2 var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
4 function commonjsRequire () {
5 throw new Error('Dynamic requires are not currently supported by rollup-plugin-commonjs');
8 function unwrapExports (x) {
9 return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
12 function createCommonjsModule(fn, module) {
13 return module = { exports: {} }, fn(module, module.exports), module.exports;
16 function getCjsExportFromNamespace (n) {
17 return n && n['default'] || n;
20 var isImplemented = function () {
21 var set, iterator, result;
22 if (typeof Set !== 'function') return false;
23 set = new Set(['raz', 'dwa', 'trzy']);
24 if (String(set) !== '[object Set]') return false;
25 if (set.size !== 3) return false;
26 if (typeof set.add !== 'function') return false;
27 if (typeof set.clear !== 'function') return false;
28 if (typeof set.delete !== 'function') return false;
29 if (typeof set.entries !== 'function') return false;
30 if (typeof set.forEach !== 'function') return false;
31 if (typeof set.has !== 'function') return false;
32 if (typeof set.keys !== 'function') return false;
33 if (typeof set.values !== 'function') return false;
35 iterator = set.values();
36 result = iterator.next();
37 if (result.done !== false) return false;
38 if (result.value !== 'raz') return false;
43 // eslint-disable-next-line no-empty-function
44 var noop = function () {};
46 var _undefined = noop(); // Support ES3 engines
48 var isValue = function (val) {
49 return (val !== _undefined) && (val !== null);
52 var validValue = function (value) {
53 if (!isValue(value)) throw new TypeError("Cannot use null or undefined");
57 var clear = function () {
58 validValue(this).length = 0;
62 var isImplemented$1 = function () {
63 var numberIsNaN = Number.isNaN;
64 if (typeof numberIsNaN !== "function") return false;
65 return !numberIsNaN({}) && numberIsNaN(NaN) && !numberIsNaN(34);
68 var shim = function (value) {
69 // eslint-disable-next-line no-self-compare
70 return value !== value;
73 var isNan = isImplemented$1()
77 var isImplemented$2 = function () {
79 if (typeof sign !== "function") return false;
80 return (sign(10) === 1) && (sign(-20) === -1);
83 var shim$1 = function (value) {
84 value = Number(value);
85 if (isNaN(value) || (value === 0)) return value;
86 return value > 0 ? 1 : -1;
89 var sign = isImplemented$2()
93 var abs = Math.abs, floor = Math.floor;
95 var toInteger = function (value) {
96 if (isNaN(value)) return 0;
97 value = Number(value);
98 if ((value === 0) || !isFinite(value)) return value;
99 return sign(value) * floor(abs(value));
104 var toPosInteger = function (value) {
105 return max(0, toInteger(value));
108 var indexOf = Array.prototype.indexOf
109 , objHasOwnProperty = Object.prototype.hasOwnProperty
111 , floor$1 = Math.floor;
113 var eIndexOf = function (searchElement /*, fromIndex*/) {
114 var i, length, fromIndex, val;
115 if (!isNan(searchElement)) return indexOf.apply(this, arguments);
117 length = toPosInteger(validValue(this).length);
118 fromIndex = arguments[1];
119 if (isNaN(fromIndex)) fromIndex = 0;
120 else if (fromIndex >= 0) fromIndex = floor$1(fromIndex);
121 else fromIndex = toPosInteger(this.length) - floor$1(abs$1(fromIndex));
123 for (i = fromIndex; i < length; ++i) {
124 if (objHasOwnProperty.call(this, i)) {
126 if (isNan(val)) return i; // Jslint: ignore
132 var create = Object.create, getPrototypeOf = Object.getPrototypeOf, plainObject = {};
134 var isImplemented$3 = function (/* CustomCreate*/) {
135 var setPrototypeOf = Object.setPrototypeOf, customCreate = arguments[0] || create;
136 if (typeof setPrototypeOf !== "function") return false;
137 return getPrototypeOf(setPrototypeOf(customCreate(null), plainObject)) === plainObject;
140 var map = { function: true, object: true };
142 var isObject = function (value) {
143 return (isValue(value) && map[typeof value]) || false;
146 var create$1 = Object.create, shim$2;
148 if (!isImplemented$3()) {
152 var create_1 = (function () {
153 var nullObject, polyProps, desc;
154 if (!shim$2) return create$1;
155 if (shim$2.level !== 1) return create$1;
165 Object.getOwnPropertyNames(Object.prototype).forEach(function (name) {
166 if (name === "__proto__") {
175 polyProps[name] = desc;
177 Object.defineProperties(nullObject, polyProps);
179 Object.defineProperty(shim$2, "nullPolyfill", {
186 return function (prototype, props) {
187 return create$1(prototype === null ? nullObject : prototype, props);
191 var objIsPrototypeOf = Object.prototype.isPrototypeOf
192 , defineProperty = Object.defineProperty
201 validate = function (obj, prototype) {
203 if (prototype === null || isObject(prototype)) return obj;
204 throw new TypeError("Prototype must be null or an object");
207 var shim$3 = (function (status) {
209 if (!status) return null;
210 if (status.level === 2) {
213 fn = function (obj, prototype) {
214 set.call(validate(obj, prototype), prototype);
218 fn = function (obj, prototype) {
219 validate(obj, prototype).__proto__ = prototype;
224 fn = function self(obj, prototype) {
226 validate(obj, prototype);
227 isNullBase = objIsPrototypeOf.call(self.nullPolyfill, obj);
228 if (isNullBase) delete self.nullPolyfill.__proto__;
229 if (prototype === null) prototype = self.nullPolyfill;
230 obj.__proto__ = prototype;
231 if (isNullBase) defineProperty(self.nullPolyfill, "__proto__", nullDesc);
235 return Object.defineProperty(fn, "level", {
243 var tmpObj1 = Object.create(null)
246 , desc = Object.getOwnPropertyDescriptor(Object.prototype, "__proto__");
250 set = desc.set; // Opera crashes at this point
251 set.call(tmpObj1, tmpObj2);
253 if (Object.getPrototypeOf(tmpObj1) === tmpObj2) return { set: set, level: 2 };
256 tmpObj1.__proto__ = tmpObj2;
257 if (Object.getPrototypeOf(tmpObj1) === tmpObj2) return { level: 2 };
260 tmpObj1.__proto__ = tmpObj2;
261 if (Object.getPrototypeOf(tmpObj1) === tmpObj2) return { level: 1 };
267 var setPrototypeOf = isImplemented$3()
268 ? Object.setPrototypeOf
271 var validCallable = function (fn) {
272 if (typeof fn !== "function") throw new TypeError(fn + " is not a function");
276 var isImplemented$4 = function () {
277 var assign = Object.assign, obj;
278 if (typeof assign !== "function") return false;
279 obj = { foo: "raz" };
280 assign(obj, { bar: "dwa" }, { trzy: "trzy" });
281 return (obj.foo + obj.bar + obj.trzy) === "razdwatrzy";
284 var isImplemented$5 = function () {
292 var keys = Object.keys;
294 var shim$4 = function (object) { return keys(isValue(object) ? Object(object) : object); };
296 var keys$1 = isImplemented$5() ? Object.keys : shim$4;
298 var max$1 = Math.max;
300 var shim$5 = function (dest, src /*, …srcn*/) {
301 var error, i, length = max$1(arguments.length, 2), assign;
302 dest = Object(validValue(dest));
303 assign = function (key) {
305 dest[key] = src[key];
307 if (!error) error = e;
310 for (i = 1; i < length; ++i) {
312 keys$1(src).forEach(assign);
314 if (error !== undefined) throw error;
318 var assign = isImplemented$4()
322 var forEach = Array.prototype.forEach, create$2 = Object.create;
324 var process$1 = function (src, obj) {
326 for (key in src) obj[key] = src[key];
329 // eslint-disable-next-line no-unused-vars
330 var normalizeOptions = function (opts1 /*, …options*/) {
331 var result = create$2(null);
332 forEach.call(arguments, function (options) {
333 if (!isValue(options)) return;
334 process$1(Object(options), result);
341 var isCallable = function (obj) {
342 return typeof obj === "function";
345 var str = "razdwatrzy";
347 var isImplemented$6 = function () {
348 if (typeof str.contains !== "function") return false;
349 return (str.contains("dwa") === true) && (str.contains("foo") === false);
352 var indexOf$1 = String.prototype.indexOf;
354 var shim$6 = function (searchString/*, position*/) {
355 return indexOf$1.call(this, searchString, arguments[1]) > -1;
358 var contains = isImplemented$6()
359 ? String.prototype.contains
362 var d_1 = createCommonjsModule(function (module) {
366 d = module.exports = function (dscr, value/*, options*/) {
367 var c, e, w, options, desc;
368 if ((arguments.length < 2) || (typeof dscr !== 'string')) {
373 options = arguments[2];
379 c = contains.call(dscr, 'c');
380 e = contains.call(dscr, 'e');
381 w = contains.call(dscr, 'w');
384 desc = { value: value, configurable: c, enumerable: e, writable: w };
385 return !options ? desc : assign(normalizeOptions(options), desc);
388 d.gs = function (dscr, get, set/*, options*/) {
389 var c, e, options, desc;
390 if (typeof dscr !== 'string') {
396 options = arguments[3];
400 } else if (!isCallable(get)) {
402 get = set = undefined;
403 } else if (set == null) {
405 } else if (!isCallable(set)) {
413 c = contains.call(dscr, 'c');
414 e = contains.call(dscr, 'e');
417 desc = { get: get, set: set, configurable: c, enumerable: e };
418 return !options ? desc : assign(normalizeOptions(options), desc);
422 var eventEmitter = createCommonjsModule(function (module, exports) {
424 var apply = Function.prototype.apply, call = Function.prototype.call
425 , create = Object.create, defineProperty = Object.defineProperty
426 , defineProperties = Object.defineProperties
427 , hasOwnProperty = Object.prototype.hasOwnProperty
428 , descriptor = { configurable: true, enumerable: false, writable: true }
430 , on, once, off, emit, methods, descriptors, base;
432 on = function (type, listener) {
435 validCallable(listener);
437 if (!hasOwnProperty.call(this, '__ee__')) {
438 data = descriptor.value = create(null);
439 defineProperty(this, '__ee__', descriptor);
440 descriptor.value = null;
444 if (!data[type]) data[type] = listener;
445 else if (typeof data[type] === 'object') data[type].push(listener);
446 else data[type] = [data[type], listener];
451 once = function (type, listener) {
454 validCallable(listener);
456 on.call(this, type, once = function () {
457 off.call(self, type, once);
458 apply.call(listener, this, arguments);
461 once.__eeOnceListener__ = listener;
465 off = function (type, listener) {
466 var data, listeners, candidate, i;
468 validCallable(listener);
470 if (!hasOwnProperty.call(this, '__ee__')) return this;
472 if (!data[type]) return this;
473 listeners = data[type];
475 if (typeof listeners === 'object') {
476 for (i = 0; (candidate = listeners[i]); ++i) {
477 if ((candidate === listener) ||
478 (candidate.__eeOnceListener__ === listener)) {
479 if (listeners.length === 2) data[type] = listeners[i ? 0 : 1];
480 else listeners.splice(i, 1);
484 if ((listeners === listener) ||
485 (listeners.__eeOnceListener__ === listener)) {
493 emit = function (type) {
494 var i, l, listener, listeners, args;
496 if (!hasOwnProperty.call(this, '__ee__')) return;
497 listeners = this.__ee__[type];
498 if (!listeners) return;
500 if (typeof listeners === 'object') {
501 l = arguments.length;
502 args = new Array(l - 1);
503 for (i = 1; i < l; ++i) args[i - 1] = arguments[i];
505 listeners = listeners.slice();
506 for (i = 0; (listener = listeners[i]); ++i) {
507 apply.call(listener, this, args);
510 switch (arguments.length) {
512 call.call(listeners, this);
515 call.call(listeners, this, arguments[1]);
518 call.call(listeners, this, arguments[1], arguments[2]);
521 l = arguments.length;
522 args = new Array(l - 1);
523 for (i = 1; i < l; ++i) {
524 args[i - 1] = arguments[i];
526 apply.call(listeners, this, args);
545 base = defineProperties({}, descriptors);
547 module.exports = exports = function (o) {
548 return (o == null) ? create(base) : defineProperties(Object(o), descriptors);
550 exports.methods = methods;
552 var eventEmitter_1 = eventEmitter.methods;
554 var validTypes = { object: true, symbol: true };
556 var isImplemented$7 = function () {
557 if (typeof Symbol !== 'function') return false;
558 try { } catch (e) { return false; }
560 // Return 'true' also for polyfills
561 if (!validTypes[typeof Symbol.iterator]) return false;
562 if (!validTypes[typeof Symbol.toPrimitive]) return false;
563 if (!validTypes[typeof Symbol.toStringTag]) return false;
568 var isSymbol = function (x) {
569 if (!x) return false;
570 if (typeof x === 'symbol') return true;
571 if (!x.constructor) return false;
572 if (x.constructor.name !== 'Symbol') return false;
573 return (x[x.constructor.toStringTag] === 'Symbol');
576 var validateSymbol = function (value) {
577 if (!isSymbol(value)) throw new TypeError(value + " is not a symbol");
581 var create$3 = Object.create, defineProperties = Object.defineProperties
582 , defineProperty$1 = Object.defineProperty, objPrototype = Object.prototype
583 , NativeSymbol, SymbolPolyfill, HiddenSymbol, globalSymbols = create$3(null)
586 if (typeof Symbol === 'function') {
587 NativeSymbol = Symbol;
589 String(NativeSymbol());
594 var generateName = (function () {
595 var created = create$3(null);
596 return function (desc) {
597 var postfix = 0, name, ie11BugWorkaround;
598 while (created[desc + (postfix || '')]) ++postfix;
599 desc += (postfix || '');
600 created[desc] = true;
602 defineProperty$1(objPrototype, name, d_1.gs(null, function (value) {
603 // For IE11 issue see:
604 // https://connect.microsoft.com/IE/feedbackdetail/view/1928508/
605 // ie11-broken-getters-on-dom-objects
606 // https://github.com/medikoo/es6-symbol/issues/12
607 if (ie11BugWorkaround) return;
608 ie11BugWorkaround = true;
609 defineProperty$1(this, name, d_1(value));
610 ie11BugWorkaround = false;
616 // Internal constructor (not one exposed) for creating Symbol instances.
617 // This one is used to ensure that `someSymbol instanceof Symbol` always return false
618 HiddenSymbol = function Symbol(description) {
619 if (this instanceof HiddenSymbol) throw new TypeError('Symbol is not a constructor');
620 return SymbolPolyfill(description);
623 // Exposed `Symbol` constructor
624 // (returns instances of HiddenSymbol)
625 var polyfill = SymbolPolyfill = function Symbol(description) {
627 if (this instanceof Symbol) throw new TypeError('Symbol is not a constructor');
628 if (isNativeSafe) return NativeSymbol(description);
629 symbol = create$3(HiddenSymbol.prototype);
630 description = (description === undefined ? '' : String(description));
631 return defineProperties(symbol, {
632 __description__: d_1('', description),
633 __name__: d_1('', generateName(description))
636 defineProperties(SymbolPolyfill, {
637 for: d_1(function (key) {
638 if (globalSymbols[key]) return globalSymbols[key];
639 return (globalSymbols[key] = SymbolPolyfill(String(key)));
641 keyFor: d_1(function (s) {
644 for (key in globalSymbols) if (globalSymbols[key] === s) return key;
647 // To ensure proper interoperability with other native functions (e.g. Array.from)
648 // fallback to eventual native implementation of given symbol
649 hasInstance: d_1('', (NativeSymbol && NativeSymbol.hasInstance) || SymbolPolyfill('hasInstance')),
650 isConcatSpreadable: d_1('', (NativeSymbol && NativeSymbol.isConcatSpreadable) ||
651 SymbolPolyfill('isConcatSpreadable')),
652 iterator: d_1('', (NativeSymbol && NativeSymbol.iterator) || SymbolPolyfill('iterator')),
653 match: d_1('', (NativeSymbol && NativeSymbol.match) || SymbolPolyfill('match')),
654 replace: d_1('', (NativeSymbol && NativeSymbol.replace) || SymbolPolyfill('replace')),
655 search: d_1('', (NativeSymbol && NativeSymbol.search) || SymbolPolyfill('search')),
656 species: d_1('', (NativeSymbol && NativeSymbol.species) || SymbolPolyfill('species')),
657 split: d_1('', (NativeSymbol && NativeSymbol.split) || SymbolPolyfill('split')),
658 toPrimitive: d_1('', (NativeSymbol && NativeSymbol.toPrimitive) || SymbolPolyfill('toPrimitive')),
659 toStringTag: d_1('', (NativeSymbol && NativeSymbol.toStringTag) || SymbolPolyfill('toStringTag')),
660 unscopables: d_1('', (NativeSymbol && NativeSymbol.unscopables) || SymbolPolyfill('unscopables'))
663 // Internal tweaks for real symbol producer
664 defineProperties(HiddenSymbol.prototype, {
665 constructor: d_1(SymbolPolyfill),
666 toString: d_1('', function () { return this.__name__; })
669 // Proper implementation of methods exposed on Symbol.prototype
670 // They won't be accessible on produced symbol instances as they derive from HiddenSymbol.prototype
671 defineProperties(SymbolPolyfill.prototype, {
672 toString: d_1(function () { return 'Symbol (' + validateSymbol(this).__description__ + ')'; }),
673 valueOf: d_1(function () { return validateSymbol(this); })
675 defineProperty$1(SymbolPolyfill.prototype, SymbolPolyfill.toPrimitive, d_1('', function () {
676 var symbol = validateSymbol(this);
677 if (typeof symbol === 'symbol') return symbol;
678 return symbol.toString();
680 defineProperty$1(SymbolPolyfill.prototype, SymbolPolyfill.toStringTag, d_1('c', 'Symbol'));
682 // Proper implementaton of toPrimitive and toStringTag for returned symbol instances
683 defineProperty$1(HiddenSymbol.prototype, SymbolPolyfill.toStringTag,
684 d_1('c', SymbolPolyfill.prototype[SymbolPolyfill.toStringTag]));
686 // Note: It's important to define `toPrimitive` as last one, as some implementations
687 // implement `toPrimitive` natively without implementing `toStringTag` (or other specified symbols)
688 // And that may invoke error in definition flow:
689 // See: https://github.com/medikoo/es6-symbol/issues/13#issuecomment-164146149
690 defineProperty$1(HiddenSymbol.prototype, SymbolPolyfill.toPrimitive,
691 d_1('c', SymbolPolyfill.prototype[SymbolPolyfill.toPrimitive]));
693 var es6Symbol = isImplemented$7() ? Symbol : polyfill;
695 var objToString = Object.prototype.toString
696 , id = objToString.call(
702 var isArguments = function (value) {
703 return objToString.call(value) === id;
706 var objToString$1 = Object.prototype.toString, id$1 = objToString$1.call("");
708 var isString = function (value) {
710 typeof value === "string" ||
712 typeof value === "object" &&
713 (value instanceof String || objToString$1.call(value) === id$1)) ||
718 var iteratorSymbol = es6Symbol.iterator
719 , isArray = Array.isArray;
721 var isIterable = function (value) {
722 if (!isValue(value)) return false;
723 if (isArray(value)) return true;
724 if (isString(value)) return true;
725 if (isArguments(value)) return true;
726 return typeof value[iteratorSymbol] === "function";
729 var validIterable = function (value) {
730 if (!isIterable(value)) throw new TypeError(value + " is not iterable");
734 var isImplemented$8 = function () {
735 var from = Array.from, arr, result;
736 if (typeof from !== "function") return false;
737 arr = ["raz", "dwa"];
739 return Boolean(result && (result !== arr) && (result[1] === "dwa"));
742 var objToString$2 = Object.prototype.toString, id$2 = objToString$2.call(noop);
744 var isFunction = function (value) {
745 return typeof value === "function" && objToString$2.call(value) === id$2;
748 var iteratorSymbol$1 = es6Symbol.iterator
749 , isArray$1 = Array.isArray
750 , call = Function.prototype.call
751 , desc = { configurable: true, enumerable: true, writable: true, value: null }
752 , defineProperty$2 = Object.defineProperty;
754 // eslint-disable-next-line complexity, max-lines-per-function
755 var shim$7 = function (arrayLike /*, mapFn, thisArg*/) {
756 var mapFn = arguments[1]
757 , thisArg = arguments[2]
769 arrayLike = Object(validValue(arrayLike));
771 if (isValue(mapFn)) validCallable(mapFn);
772 if (!this || this === Array || !isFunction(this)) {
773 // Result: Plain array
775 if (isArguments(arrayLike)) {
777 length = arrayLike.length;
778 if (length !== 1) return Array.apply(null, arrayLike);
780 arr[0] = arrayLike[0];
783 if (isArray$1(arrayLike)) {
785 arr = new Array(length = arrayLike.length);
786 for (i = 0; i < length; ++i) arr[i] = arrayLike[i];
792 // Result: Non plain array
796 if (!isArray$1(arrayLike)) {
797 if ((getIterator = arrayLike[iteratorSymbol$1]) !== undefined) {
799 iterator = validCallable(getIterator).call(arrayLike);
800 if (Context) arr = new Context();
801 result = iterator.next();
803 while (!result.done) {
804 value = mapFn ? call.call(mapFn, thisArg, result.value, i) : result.value;
807 defineProperty$2(arr, i, desc);
811 result = iterator.next();
815 } else if (isString(arrayLike)) {
817 length = arrayLike.length;
818 if (Context) arr = new Context();
819 for (i = 0, j = 0; i < length; ++i) {
820 value = arrayLike[i];
821 if (i + 1 < length) {
822 code = value.charCodeAt(0);
823 // eslint-disable-next-line max-depth
824 if (code >= 0xd800 && code <= 0xdbff) value += arrayLike[++i];
826 value = mapFn ? call.call(mapFn, thisArg, value, j) : value;
829 defineProperty$2(arr, j, desc);
838 if (length === undefined) {
839 // Source: array or array-like
840 length = toPosInteger(arrayLike.length);
841 if (Context) arr = new Context(length);
842 for (i = 0; i < length; ++i) {
843 value = mapFn ? call.call(mapFn, thisArg, arrayLike[i], i) : arrayLike[i];
846 defineProperty$2(arr, i, desc);
859 var from_1 = isImplemented$8()
863 var copy = function (obj/*, propertyNames, options*/) {
864 var copy = Object(validValue(obj)), propertyNames = arguments[1], options = Object(arguments[2]);
865 if (copy !== obj && !propertyNames) return copy;
868 from_1(propertyNames, function (propertyName) {
869 if (options.ensure || propertyName in obj) result[propertyName] = obj[propertyName];
877 var bind = Function.prototype.bind
878 , call$1 = Function.prototype.call
879 , keys$2 = Object.keys
880 , objPropertyIsEnumerable = Object.prototype.propertyIsEnumerable;
882 var _iterate = function (method, defVal) {
883 return function (obj, cb /*, thisArg, compareFn*/) {
884 var list, thisArg = arguments[2], compareFn = arguments[3];
885 obj = Object(validValue(obj));
890 list.sort(typeof compareFn === "function" ? bind.call(compareFn, obj) : undefined);
892 if (typeof method !== "function") method = list[method];
893 return call$1.call(method, list, function (key, index) {
894 if (!objPropertyIsEnumerable.call(obj, key)) return defVal;
895 return call$1.call(cb, thisArg, obj[key], key, obj, index);
900 var forEach$1 = _iterate("forEach");
902 var call$2 = Function.prototype.call;
904 var map$1 = function (obj, cb /*, thisArg*/) {
905 var result = {}, thisArg = arguments[2];
907 forEach$1(obj, function (value, key, targetObj, index) {
908 result[key] = call$2.call(cb, thisArg, value, key, targetObj, index);
913 var callable = validCallable
915 , bind$1 = Function.prototype.bind, defineProperty$3 = Object.defineProperty
916 , hasOwnProperty = Object.prototype.hasOwnProperty
919 define = function (name, desc, options) {
920 var value = validValue(desc) && callable(desc.value), dgs;
924 dgs.get = function () {
925 if (!options.overwriteDefinition && hasOwnProperty.call(this, name)) return value;
926 desc.value = bind$1.call(value, options.resolveContext ? options.resolveContext(this) : this);
927 defineProperty$3(this, name, desc);
933 var autoBind = function (props/*, options*/) {
934 var options = normalizeOptions(arguments[1]);
935 if (options.resolveContext != null) validCallable(options.resolveContext);
936 return map$1(props, function (desc, name) { return define(name, desc, options); });
939 var defineProperty$4 = Object.defineProperty, defineProperties$1 = Object.defineProperties, Iterator;
941 var es6Iterator = Iterator = function (list, context) {
942 if (!(this instanceof Iterator)) throw new TypeError("Constructor requires 'new'");
943 defineProperties$1(this, {
944 __list__: d_1("w", validValue(list)),
945 __context__: d_1("w", context),
946 __nextIndex__: d_1("w", 0)
948 if (!context) return;
949 validCallable(context.on);
950 context.on("_add", this._onAdd);
951 context.on("_delete", this._onDelete);
952 context.on("_clear", this._onClear);
955 // Internal %IteratorPrototype% doesn't expose its constructor
956 delete Iterator.prototype.constructor;
962 _next: d_1(function () {
964 if (!this.__list__) return undefined;
966 i = this.__redo__.shift();
967 if (i !== undefined) return i;
969 if (this.__nextIndex__ < this.__list__.length) return this.__nextIndex__++;
973 next: d_1(function () {
974 return this._createResult(this._next());
976 _createResult: d_1(function (i) {
977 if (i === undefined) return { done: true, value: undefined };
978 return { done: false, value: this._resolve(i) };
980 _resolve: d_1(function (i) {
981 return this.__list__[i];
983 _unBind: d_1(function () {
984 this.__list__ = null;
985 delete this.__redo__;
986 if (!this.__context__) return;
987 this.__context__.off("_add", this._onAdd);
988 this.__context__.off("_delete", this._onDelete);
989 this.__context__.off("_clear", this._onClear);
990 this.__context__ = null;
992 toString: d_1(function () {
993 return "[object " + (this[es6Symbol.toStringTag] || "Object") + "]";
997 _onAdd: d_1(function (index) {
998 if (index >= this.__nextIndex__) return;
999 ++this.__nextIndex__;
1000 if (!this.__redo__) {
1001 defineProperty$4(this, "__redo__", d_1("c", [index]));
1004 this.__redo__.forEach(function (redo, i) {
1005 if (redo >= index) this.__redo__[i] = ++redo;
1007 this.__redo__.push(index);
1009 _onDelete: d_1(function (index) {
1011 if (index >= this.__nextIndex__) return;
1012 --this.__nextIndex__;
1013 if (!this.__redo__) return;
1014 i = this.__redo__.indexOf(index);
1015 if (i !== -1) this.__redo__.splice(i, 1);
1016 this.__redo__.forEach(function (redo, j) {
1017 if (redo > index) this.__redo__[j] = --redo;
1020 _onClear: d_1(function () {
1021 if (this.__redo__) clear.call(this.__redo__);
1022 this.__nextIndex__ = 0;
1036 var array = createCommonjsModule(function (module) {
1040 var defineProperty = Object.defineProperty, ArrayIterator;
1042 ArrayIterator = module.exports = function (arr, kind) {
1043 if (!(this instanceof ArrayIterator)) throw new TypeError("Constructor requires 'new'");
1044 es6Iterator.call(this, arr);
1045 if (!kind) kind = "value";
1046 else if (contains.call(kind, "key+value")) kind = "key+value";
1047 else if (contains.call(kind, "key")) kind = "key";
1048 else kind = "value";
1049 defineProperty(this, "__kind__", d_1("", kind));
1051 if (setPrototypeOf) setPrototypeOf(ArrayIterator, es6Iterator);
1053 // Internal %ArrayIteratorPrototype% doesn't expose its constructor
1054 delete ArrayIterator.prototype.constructor;
1056 ArrayIterator.prototype = Object.create(es6Iterator.prototype, {
1057 _resolve: d_1(function (i) {
1058 if (this.__kind__ === "value") return this.__list__[i];
1059 if (this.__kind__ === "key+value") return [i, this.__list__[i]];
1063 defineProperty(ArrayIterator.prototype, es6Symbol.toStringTag, d_1("c", "Array Iterator"));
1066 var string = createCommonjsModule(function (module) {
1070 var defineProperty = Object.defineProperty, StringIterator;
1072 StringIterator = module.exports = function (str) {
1073 if (!(this instanceof StringIterator)) throw new TypeError("Constructor requires 'new'");
1075 es6Iterator.call(this, str);
1076 defineProperty(this, "__length__", d_1("", str.length));
1078 if (setPrototypeOf) setPrototypeOf(StringIterator, es6Iterator);
1080 // Internal %ArrayIteratorPrototype% doesn't expose its constructor
1081 delete StringIterator.prototype.constructor;
1083 StringIterator.prototype = Object.create(es6Iterator.prototype, {
1084 _next: d_1(function () {
1085 if (!this.__list__) return undefined;
1086 if (this.__nextIndex__ < this.__length__) return this.__nextIndex__++;
1090 _resolve: d_1(function (i) {
1091 var char = this.__list__[i], code;
1092 if (this.__nextIndex__ === this.__length__) return char;
1093 code = char.charCodeAt(0);
1094 if (code >= 0xd800 && code <= 0xdbff) return char + this.__list__[this.__nextIndex__++];
1098 defineProperty(StringIterator.prototype, es6Symbol.toStringTag, d_1("c", "String Iterator"));
1101 var iteratorSymbol$2 = es6Symbol.iterator;
1103 var get = function (obj) {
1104 if (typeof validIterable(obj)[iteratorSymbol$2] === "function") return obj[iteratorSymbol$2]();
1105 if (isArguments(obj)) return new array(obj);
1106 if (isString(obj)) return new string(obj);
1107 return new array(obj);
1110 var isArray$2 = Array.isArray, call$3 = Function.prototype.call, some = Array.prototype.some;
1112 var forOf = function (iterable, cb /*, thisArg*/) {
1113 var mode, thisArg = arguments[2], result, doBreak, broken, i, length, char, code;
1114 if (isArray$2(iterable) || isArguments(iterable)) mode = "array";
1115 else if (isString(iterable)) mode = "string";
1116 else iterable = get(iterable);
1119 doBreak = function () {
1122 if (mode === "array") {
1123 some.call(iterable, function (value) {
1124 call$3.call(cb, thisArg, value, doBreak);
1129 if (mode === "string") {
1130 length = iterable.length;
1131 for (i = 0; i < length; ++i) {
1133 if (i + 1 < length) {
1134 code = char.charCodeAt(0);
1135 if (code >= 0xd800 && code <= 0xdbff) char += iterable[++i];
1137 call$3.call(cb, thisArg, char, doBreak);
1142 result = iterable.next();
1144 while (!result.done) {
1145 call$3.call(cb, thisArg, result.value, doBreak);
1147 result = iterable.next();
1151 var iterator = createCommonjsModule(function (module) {
1153 var toStringTagSymbol = es6Symbol.toStringTag
1155 , defineProperty = Object.defineProperty
1158 SetIterator = module.exports = function (set, kind) {
1159 if (!(this instanceof SetIterator)) return new SetIterator(set, kind);
1160 es6Iterator.call(this, set.__setData__, set);
1161 if (!kind) kind = 'value';
1162 else if (contains.call(kind, 'key+value')) kind = 'key+value';
1163 else kind = 'value';
1164 defineProperty(this, '__kind__', d_1('', kind));
1166 if (setPrototypeOf) setPrototypeOf(SetIterator, es6Iterator);
1168 SetIterator.prototype = Object.create(es6Iterator.prototype, {
1169 constructor: d_1(SetIterator),
1170 _resolve: d_1(function (i) {
1171 if (this.__kind__ === 'value') return this.__list__[i];
1172 return [this.__list__[i], this.__list__[i]];
1174 toString: d_1(function () { return '[object Set Iterator]'; })
1176 defineProperty(SetIterator.prototype, toStringTagSymbol, d_1('c', 'Set Iterator'));
1179 // Exports true if environment provides native `Set` implementation,
1181 var isNativeImplemented = (function () {
1182 if (typeof Set === 'undefined') return false;
1183 return (Object.prototype.toString.call(Set.prototype) === '[object Set]');
1186 var iterator$1 = validIterable
1188 , call$4 = Function.prototype.call
1189 , defineProperty$5 = Object.defineProperty, getPrototypeOf$1 = Object.getPrototypeOf
1190 , SetPoly, getValues, NativeSet;
1192 if (isNativeImplemented) NativeSet = Set;
1194 var polyfill$1 = SetPoly = function Set(/*iterable*/) {
1195 var iterable = arguments[0], self;
1196 if (!(this instanceof SetPoly)) throw new TypeError('Constructor requires \'new\'');
1197 if (isNativeImplemented && setPrototypeOf) self = setPrototypeOf(new NativeSet(), getPrototypeOf$1(this));
1199 if (iterable != null) iterator$1(iterable);
1200 defineProperty$5(self, '__setData__', d_1('c', []));
1201 if (!iterable) return self;
1202 forOf(iterable, function (value) {
1203 if (eIndexOf.call(this, value) !== -1) return;
1205 }, self.__setData__);
1209 if (isNativeImplemented) {
1210 if (setPrototypeOf) setPrototypeOf(SetPoly, NativeSet);
1211 SetPoly.prototype = Object.create(NativeSet.prototype, { constructor: d_1(SetPoly) });
1214 eventEmitter(Object.defineProperties(SetPoly.prototype, {
1215 add: d_1(function (value) {
1216 if (this.has(value)) return this;
1217 this.emit('_add', this.__setData__.push(value) - 1, value);
1220 clear: d_1(function () {
1221 if (!this.__setData__.length) return;
1222 clear.call(this.__setData__);
1223 this.emit('_clear');
1225 delete: d_1(function (value) {
1226 var index = eIndexOf.call(this.__setData__, value);
1227 if (index === -1) return false;
1228 this.__setData__.splice(index, 1);
1229 this.emit('_delete', index, value);
1232 entries: d_1(function () { return new iterator(this, 'key+value'); }),
1233 forEach: d_1(function (cb/*, thisArg*/) {
1234 var thisArg = arguments[1], iterator, result, value;
1236 iterator = this.values();
1237 result = iterator._next();
1238 while (result !== undefined) {
1239 value = iterator._resolve(result);
1240 call$4.call(cb, thisArg, value, value, this);
1241 result = iterator._next();
1244 has: d_1(function (value) {
1245 return (eIndexOf.call(this.__setData__, value) !== -1);
1247 keys: d_1(getValues = function () { return this.values(); }),
1248 size: d_1.gs(function () { return this.__setData__.length; }),
1249 values: d_1(function () { return new iterator(this); }),
1250 toString: d_1(function () { return '[object Set]'; })
1252 defineProperty$5(SetPoly.prototype, es6Symbol.iterator, d_1(getValues));
1253 defineProperty$5(SetPoly.prototype, es6Symbol.toStringTag, d_1('c', 'Set'));
1255 var es6Set = isImplemented() ? Set : polyfill$1;
1257 var isImplemented$9 = function () {
1258 var map, iterator, result;
1259 if (typeof Map !== 'function') return false;
1261 // WebKit doesn't support arguments and crashes
1262 map = new Map([['raz', 'one'], ['dwa', 'two'], ['trzy', 'three']]);
1266 if (String(map) !== '[object Map]') return false;
1267 if (map.size !== 3) return false;
1268 if (typeof map.clear !== 'function') return false;
1269 if (typeof map.delete !== 'function') return false;
1270 if (typeof map.entries !== 'function') return false;
1271 if (typeof map.forEach !== 'function') return false;
1272 if (typeof map.get !== 'function') return false;
1273 if (typeof map.has !== 'function') return false;
1274 if (typeof map.keys !== 'function') return false;
1275 if (typeof map.set !== 'function') return false;
1276 if (typeof map.values !== 'function') return false;
1278 iterator = map.entries();
1279 result = iterator.next();
1280 if (result.done !== false) return false;
1281 if (!result.value) return false;
1282 if (result.value[0] !== 'raz') return false;
1283 if (result.value[1] !== 'one') return false;
1288 var forEach$2 = Array.prototype.forEach, create$4 = Object.create;
1290 // eslint-disable-next-line no-unused-vars
1291 var primitiveSet = function (arg /*, …args*/) {
1292 var set = create$4(null);
1293 forEach$2.call(arguments, function (name) {
1299 var iteratorKinds = primitiveSet('key',
1300 'value', 'key+value');
1302 var iterator$2 = createCommonjsModule(function (module) {
1304 var toStringTagSymbol = es6Symbol.toStringTag
1306 , defineProperties = Object.defineProperties
1307 , unBind = es6Iterator.prototype._unBind
1310 MapIterator = module.exports = function (map, kind) {
1311 if (!(this instanceof MapIterator)) return new MapIterator(map, kind);
1312 es6Iterator.call(this, map.__mapKeysData__, map);
1313 if (!kind || !iteratorKinds[kind]) kind = 'key+value';
1314 defineProperties(this, {
1315 __kind__: d_1('', kind),
1316 __values__: d_1('w', map.__mapValuesData__)
1319 if (setPrototypeOf) setPrototypeOf(MapIterator, es6Iterator);
1321 MapIterator.prototype = Object.create(es6Iterator.prototype, {
1322 constructor: d_1(MapIterator),
1323 _resolve: d_1(function (i) {
1324 if (this.__kind__ === 'value') return this.__values__[i];
1325 if (this.__kind__ === 'key') return this.__list__[i];
1326 return [this.__list__[i], this.__values__[i]];
1328 _unBind: d_1(function () {
1329 this.__values__ = null;
1332 toString: d_1(function () { return '[object Map Iterator]'; })
1334 Object.defineProperty(MapIterator.prototype, toStringTagSymbol,
1335 d_1('c', 'Map Iterator'));
1338 // Exports true if environment provides native `Map` implementation,
1340 var isNativeImplemented$1 = (function () {
1341 if (typeof Map === 'undefined') return false;
1342 return (Object.prototype.toString.call(new Map()) === '[object Map]');
1345 var iterator$3 = validIterable
1347 , call$5 = Function.prototype.call
1348 , defineProperties$2 = Object.defineProperties, getPrototypeOf$2 = Object.getPrototypeOf
1351 var polyfill$2 = MapPoly = function (/*iterable*/) {
1352 var iterable = arguments[0], keys, values, self;
1353 if (!(this instanceof MapPoly)) throw new TypeError('Constructor requires \'new\'');
1354 if (isNativeImplemented$1 && setPrototypeOf && (Map !== MapPoly)) {
1355 self = setPrototypeOf(new Map(), getPrototypeOf$2(this));
1359 if (iterable != null) iterator$3(iterable);
1360 defineProperties$2(self, {
1361 __mapKeysData__: d_1('c', keys = []),
1362 __mapValuesData__: d_1('c', values = [])
1364 if (!iterable) return self;
1365 forOf(iterable, function (value) {
1366 var key = validValue(value)[0];
1368 if (eIndexOf.call(keys, key) !== -1) return;
1375 if (isNativeImplemented$1) {
1376 if (setPrototypeOf) setPrototypeOf(MapPoly, Map);
1377 MapPoly.prototype = Object.create(Map.prototype, {
1378 constructor: d_1(MapPoly)
1382 eventEmitter(defineProperties$2(MapPoly.prototype, {
1383 clear: d_1(function () {
1384 if (!this.__mapKeysData__.length) return;
1385 clear.call(this.__mapKeysData__);
1386 clear.call(this.__mapValuesData__);
1387 this.emit('_clear');
1389 delete: d_1(function (key) {
1390 var index = eIndexOf.call(this.__mapKeysData__, key);
1391 if (index === -1) return false;
1392 this.__mapKeysData__.splice(index, 1);
1393 this.__mapValuesData__.splice(index, 1);
1394 this.emit('_delete', index, key);
1397 entries: d_1(function () { return new iterator$2(this, 'key+value'); }),
1398 forEach: d_1(function (cb/*, thisArg*/) {
1399 var thisArg = arguments[1], iterator, result;
1401 iterator = this.entries();
1402 result = iterator._next();
1403 while (result !== undefined) {
1404 call$5.call(cb, thisArg, this.__mapValuesData__[result],
1405 this.__mapKeysData__[result], this);
1406 result = iterator._next();
1409 get: d_1(function (key) {
1410 var index = eIndexOf.call(this.__mapKeysData__, key);
1411 if (index === -1) return;
1412 return this.__mapValuesData__[index];
1414 has: d_1(function (key) {
1415 return (eIndexOf.call(this.__mapKeysData__, key) !== -1);
1417 keys: d_1(function () { return new iterator$2(this, 'key'); }),
1418 set: d_1(function (key, value) {
1419 var index = eIndexOf.call(this.__mapKeysData__, key), emit;
1421 index = this.__mapKeysData__.push(key) - 1;
1424 this.__mapValuesData__[index] = value;
1425 if (emit) this.emit('_add', index, key);
1428 size: d_1.gs(function () { return this.__mapKeysData__.length; }),
1429 values: d_1(function () { return new iterator$2(this, 'value'); }),
1430 toString: d_1(function () { return '[object Map]'; })
1432 Object.defineProperty(MapPoly.prototype, es6Symbol.iterator, d_1(function () {
1433 return this.entries();
1435 Object.defineProperty(MapPoly.prototype, es6Symbol.toStringTag, d_1('c', 'Map'));
1437 var es6Map = isImplemented$9() ? Map : polyfill$2;
1439 var toStr = Object.prototype.toString;
1441 var isArguments$1 = function isArguments(value) {
1442 var str = toStr.call(value);
1443 var isArgs = str === '[object Arguments]';
1445 isArgs = str !== '[object Array]' &&
1447 typeof value === 'object' &&
1448 typeof value.length === 'number' &&
1449 value.length >= 0 &&
1450 toStr.call(value.callee) === '[object Function]';
1457 // modified from https://github.com/es-shims/es5-shim
1458 var has = Object.prototype.hasOwnProperty;
1459 var toStr$1 = Object.prototype.toString;
1460 var isArgs = isArguments$1; // eslint-disable-line global-require
1461 var isEnumerable = Object.prototype.propertyIsEnumerable;
1462 var hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');
1463 var hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');
1470 'propertyIsEnumerable',
1473 var equalsConstructorPrototype = function (o) {
1474 var ctor = o.constructor;
1475 return ctor && ctor.prototype === o;
1477 var excludedKeys = {
1478 $applicationCache: true,
1482 $frameElement: true,
1496 $webkitIndexedDB: true,
1497 $webkitStorageInfo: true,
1500 var hasAutomationEqualityBug = (function () {
1502 if (typeof window === 'undefined') { return false; }
1503 for (var k in window) {
1505 if (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {
1507 equalsConstructorPrototype(window[k]);
1518 var equalsConstructorPrototypeIfNotBuggy = function (o) {
1520 if (typeof window === 'undefined' || !hasAutomationEqualityBug) {
1521 return equalsConstructorPrototype(o);
1524 return equalsConstructorPrototype(o);
1530 keysShim = function keys(object) {
1531 var isObject = object !== null && typeof object === 'object';
1532 var isFunction = toStr$1.call(object) === '[object Function]';
1533 var isArguments = isArgs(object);
1534 var isString = isObject && toStr$1.call(object) === '[object String]';
1537 if (!isObject && !isFunction && !isArguments) {
1538 throw new TypeError('Object.keys called on a non-object');
1541 var skipProto = hasProtoEnumBug && isFunction;
1542 if (isString && object.length > 0 && !has.call(object, 0)) {
1543 for (var i = 0; i < object.length; ++i) {
1544 theKeys.push(String(i));
1548 if (isArguments && object.length > 0) {
1549 for (var j = 0; j < object.length; ++j) {
1550 theKeys.push(String(j));
1553 for (var name in object) {
1554 if (!(skipProto && name === 'prototype') && has.call(object, name)) {
1555 theKeys.push(String(name));
1560 if (hasDontEnumBug) {
1561 var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);
1563 for (var k = 0; k < dontEnums.length; ++k) {
1564 if (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {
1565 theKeys.push(dontEnums[k]);
1572 var implementation = keysShim;
1574 var slice = Array.prototype.slice;
1577 var origKeys = Object.keys;
1578 var keysShim$1 = origKeys ? function keys(o) { return origKeys(o); } : implementation;
1580 var originalKeys = Object.keys;
1582 keysShim$1.shim = function shimObjectKeys() {
1584 var keysWorksWithArguments = (function () {
1586 var args = Object.keys(arguments);
1587 return args && args.length === arguments.length;
1589 if (!keysWorksWithArguments) {
1590 Object.keys = function keys(object) { // eslint-disable-line func-name-matching
1591 if (isArguments$1(object)) {
1592 return originalKeys(slice.call(object));
1594 return originalKeys(object);
1598 Object.keys = keysShim$1;
1600 return Object.keys || keysShim$1;
1603 var objectKeys = keysShim$1;
1605 var hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';
1607 var toStr$2 = Object.prototype.toString;
1608 var concat = Array.prototype.concat;
1609 var origDefineProperty = Object.defineProperty;
1611 var isFunction$1 = function (fn) {
1612 return typeof fn === 'function' && toStr$2.call(fn) === '[object Function]';
1615 var arePropertyDescriptorsSupported = function () {
1618 origDefineProperty(obj, 'x', { enumerable: false, value: obj });
1619 // eslint-disable-next-line no-unused-vars, no-restricted-syntax
1620 for (var _ in obj) { // jscs:ignore disallowUnusedVariables
1623 return obj.x === obj;
1624 } catch (e) { /* this is IE 8. */
1628 var supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();
1630 var defineProperty$6 = function (object, name, value, predicate) {
1631 if (name in object && (!isFunction$1(predicate) || !predicate())) {
1634 if (supportsDescriptors) {
1635 origDefineProperty(object, name, {
1642 object[name] = value;
1646 var defineProperties$3 = function (object, map) {
1647 var predicates = arguments.length > 2 ? arguments[2] : {};
1648 var props = objectKeys(map);
1650 props = concat.call(props, Object.getOwnPropertySymbols(map));
1652 for (var i = 0; i < props.length; i += 1) {
1653 defineProperty$6(object, props[i], map[props[i]], predicates[props[i]]);
1657 defineProperties$3.supportsDescriptors = !!supportsDescriptors;
1659 var defineProperties_1 = defineProperties$3;
1661 /* eslint no-invalid-this: 1 */
1663 var ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';
1664 var slice$1 = Array.prototype.slice;
1665 var toStr$3 = Object.prototype.toString;
1666 var funcType = '[object Function]';
1668 var implementation$1 = function bind(that) {
1670 if (typeof target !== 'function' || toStr$3.call(target) !== funcType) {
1671 throw new TypeError(ERROR_MESSAGE + target);
1673 var args = slice$1.call(arguments, 1);
1676 var binder = function () {
1677 if (this instanceof bound) {
1678 var result = target.apply(
1680 args.concat(slice$1.call(arguments))
1682 if (Object(result) === result) {
1687 return target.apply(
1689 args.concat(slice$1.call(arguments))
1694 var boundLength = Math.max(0, target.length - args.length);
1696 for (var i = 0; i < boundLength; i++) {
1697 boundArgs.push('$' + i);
1700 bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);
1702 if (target.prototype) {
1703 var Empty = function Empty() {};
1704 Empty.prototype = target.prototype;
1705 bound.prototype = new Empty();
1706 Empty.prototype = null;
1712 var functionBind = Function.prototype.bind || implementation$1;
1714 var src = functionBind.call(Function.call, Object.prototype.hasOwnProperty);
1716 var isPrimitive = function isPrimitive(value) {
1717 return value === null || (typeof value !== 'function' && typeof value !== 'object');
1720 var fnToStr = Function.prototype.toString;
1722 var constructorRegex = /^\s*class\b/;
1723 var isES6ClassFn = function isES6ClassFunction(value) {
1725 var fnStr = fnToStr.call(value);
1726 return constructorRegex.test(fnStr);
1728 return false; // not a function
1732 var tryFunctionObject = function tryFunctionToStr(value) {
1734 if (isES6ClassFn(value)) { return false; }
1735 fnToStr.call(value);
1741 var toStr$4 = Object.prototype.toString;
1742 var fnClass = '[object Function]';
1743 var genClass = '[object GeneratorFunction]';
1744 var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';
1746 var isCallable$1 = function isCallable(value) {
1747 if (!value) { return false; }
1748 if (typeof value !== 'function' && typeof value !== 'object') { return false; }
1749 if (typeof value === 'function' && !value.prototype) { return true; }
1750 if (hasToStringTag) { return tryFunctionObject(value); }
1751 if (isES6ClassFn(value)) { return false; }
1752 var strClass = toStr$4.call(value);
1753 return strClass === fnClass || strClass === genClass;
1756 var getDay = Date.prototype.getDay;
1757 var tryDateObject = function tryDateObject(value) {
1766 var toStr$5 = Object.prototype.toString;
1767 var dateClass = '[object Date]';
1768 var hasToStringTag$1 = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';
1770 var isDateObject = function isDateObject(value) {
1771 if (typeof value !== 'object' || value === null) { return false; }
1772 return hasToStringTag$1 ? tryDateObject(value) : toStr$5.call(value) === dateClass;
1775 /* eslint complexity: [2, 17], max-statements: [2, 33] */
1776 var shams = function hasSymbols() {
1777 if (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }
1778 if (typeof Symbol.iterator === 'symbol') { return true; }
1781 var sym = Symbol('test');
1782 var symObj = Object(sym);
1783 if (typeof sym === 'string') { return false; }
1785 if (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }
1786 if (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }
1788 // temp disabled per https://github.com/ljharb/object.assign/issues/17
1789 // if (sym instanceof Symbol) { return false; }
1790 // temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4
1791 // if (!(symObj instanceof Symbol)) { return false; }
1793 // if (typeof Symbol.prototype.toString !== 'function') { return false; }
1794 // if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }
1798 for (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax
1799 if (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }
1801 if (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }
1803 var syms = Object.getOwnPropertySymbols(obj);
1804 if (syms.length !== 1 || syms[0] !== sym) { return false; }
1806 if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }
1808 if (typeof Object.getOwnPropertyDescriptor === 'function') {
1809 var descriptor = Object.getOwnPropertyDescriptor(obj, sym);
1810 if (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }
1816 var origSymbol = commonjsGlobal.Symbol;
1819 var hasSymbols$1 = function hasNativeSymbols() {
1820 if (typeof origSymbol !== 'function') { return false; }
1821 if (typeof Symbol !== 'function') { return false; }
1822 if (typeof origSymbol('foo') !== 'symbol') { return false; }
1823 if (typeof Symbol('bar') !== 'symbol') { return false; }
1828 var isSymbol$1 = createCommonjsModule(function (module) {
1830 var toStr = Object.prototype.toString;
1831 var hasSymbols = hasSymbols$1();
1834 var symToStr = Symbol.prototype.toString;
1835 var symStringRegex = /^Symbol\(.*\)$/;
1836 var isSymbolObject = function isRealSymbolObject(value) {
1837 if (typeof value.valueOf() !== 'symbol') {
1840 return symStringRegex.test(symToStr.call(value));
1843 module.exports = function isSymbol(value) {
1844 if (typeof value === 'symbol') {
1847 if (toStr.call(value) !== '[object Symbol]') {
1851 return isSymbolObject(value);
1858 module.exports = function isSymbol(value) {
1859 // this environment does not support Symbols.
1865 var hasSymbols$2 = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';
1872 var ordinaryToPrimitive = function OrdinaryToPrimitive(O, hint) {
1873 if (typeof O === 'undefined' || O === null) {
1874 throw new TypeError('Cannot call method on ' + O);
1876 if (typeof hint !== 'string' || (hint !== 'number' && hint !== 'string')) {
1877 throw new TypeError('hint must be "string" or "number"');
1879 var methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];
1880 var method, result, i;
1881 for (i = 0; i < methodNames.length; ++i) {
1882 method = O[methodNames[i]];
1883 if (isCallable$1(method)) {
1884 result = method.call(O);
1885 if (isPrimitive(result)) {
1890 throw new TypeError('No default value');
1893 var GetMethod = function GetMethod(O, P) {
1895 if (func !== null && typeof func !== 'undefined') {
1896 if (!isCallable$1(func)) {
1897 throw new TypeError(func + ' returned for property ' + P + ' of object ' + O + ' is not a function');
1904 // http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive
1905 var es2015 = function ToPrimitive(input) {
1906 if (isPrimitive(input)) {
1909 var hint = 'default';
1910 if (arguments.length > 1) {
1911 if (arguments[1] === String) {
1913 } else if (arguments[1] === Number) {
1920 if (Symbol.toPrimitive) {
1921 exoticToPrim = GetMethod(input, Symbol.toPrimitive);
1922 } else if (isSymbol$1(input)) {
1923 exoticToPrim = Symbol.prototype.valueOf;
1926 if (typeof exoticToPrim !== 'undefined') {
1927 var result = exoticToPrim.call(input, hint);
1928 if (isPrimitive(result)) {
1931 throw new TypeError('unable to convert exotic object to primitive');
1933 if (hint === 'default' && (isDateObject(input) || isSymbol$1(input))) {
1936 return ordinaryToPrimitive(input, hint === 'default' ? 'number' : hint);
1968 var undefined$1; // eslint-disable-line no-shadow-restricted-names
1970 var ThrowTypeError = Object.getOwnPropertyDescriptor
1971 ? (function () { return Object.getOwnPropertyDescriptor(arguments, 'callee').get; }())
1972 : function () { throw new TypeError(); };
1974 var hasSymbols$3 = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';
1976 var getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto
1977 var generatorFunction = undefined$1;
1978 var asyncFunction = undefined$1;
1979 var asyncGenFunction = undefined$1;
1981 var TypedArray = typeof Uint8Array === 'undefined' ? undefined$1 : getProto(Uint8Array);
1985 '$ %ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined$1 : ArrayBuffer,
1986 '$ %ArrayBufferPrototype%': typeof ArrayBuffer === 'undefined' ? undefined$1 : ArrayBuffer.prototype,
1987 '$ %ArrayIteratorPrototype%': hasSymbols$3 ? getProto([][Symbol.iterator]()) : undefined$1,
1988 '$ %ArrayPrototype%': Array.prototype,
1989 '$ %ArrayProto_entries%': Array.prototype.entries,
1990 '$ %ArrayProto_forEach%': Array.prototype.forEach,
1991 '$ %ArrayProto_keys%': Array.prototype.keys,
1992 '$ %ArrayProto_values%': Array.prototype.values,
1993 '$ %AsyncFromSyncIteratorPrototype%': undefined$1,
1994 '$ %AsyncFunction%': asyncFunction,
1995 '$ %AsyncFunctionPrototype%': undefined$1,
1996 '$ %AsyncGenerator%': undefined$1,
1997 '$ %AsyncGeneratorFunction%': asyncGenFunction,
1998 '$ %AsyncGeneratorPrototype%': undefined$1,
1999 '$ %AsyncIteratorPrototype%': undefined$1,
2000 '$ %Atomics%': typeof Atomics === 'undefined' ? undefined$1 : Atomics,
2001 '$ %Boolean%': Boolean,
2002 '$ %BooleanPrototype%': Boolean.prototype,
2003 '$ %DataView%': typeof DataView === 'undefined' ? undefined$1 : DataView,
2004 '$ %DataViewPrototype%': typeof DataView === 'undefined' ? undefined$1 : DataView.prototype,
2006 '$ %DatePrototype%': Date.prototype,
2007 '$ %decodeURI%': decodeURI,
2008 '$ %decodeURIComponent%': decodeURIComponent,
2009 '$ %encodeURI%': encodeURI,
2010 '$ %encodeURIComponent%': encodeURIComponent,
2012 '$ %ErrorPrototype%': Error.prototype,
2013 '$ %eval%': eval, // eslint-disable-line no-eval
2014 '$ %EvalError%': EvalError,
2015 '$ %EvalErrorPrototype%': EvalError.prototype,
2016 '$ %Float32Array%': typeof Float32Array === 'undefined' ? undefined$1 : Float32Array,
2017 '$ %Float32ArrayPrototype%': typeof Float32Array === 'undefined' ? undefined$1 : Float32Array.prototype,
2018 '$ %Float64Array%': typeof Float64Array === 'undefined' ? undefined$1 : Float64Array,
2019 '$ %Float64ArrayPrototype%': typeof Float64Array === 'undefined' ? undefined$1 : Float64Array.prototype,
2020 '$ %Function%': Function,
2021 '$ %FunctionPrototype%': Function.prototype,
2022 '$ %Generator%': undefined$1,
2023 '$ %GeneratorFunction%': generatorFunction,
2024 '$ %GeneratorPrototype%': undefined$1,
2025 '$ %Int8Array%': typeof Int8Array === 'undefined' ? undefined$1 : Int8Array,
2026 '$ %Int8ArrayPrototype%': typeof Int8Array === 'undefined' ? undefined$1 : Int8Array.prototype,
2027 '$ %Int16Array%': typeof Int16Array === 'undefined' ? undefined$1 : Int16Array,
2028 '$ %Int16ArrayPrototype%': typeof Int16Array === 'undefined' ? undefined$1 : Int8Array.prototype,
2029 '$ %Int32Array%': typeof Int32Array === 'undefined' ? undefined$1 : Int32Array,
2030 '$ %Int32ArrayPrototype%': typeof Int32Array === 'undefined' ? undefined$1 : Int32Array.prototype,
2031 '$ %isFinite%': isFinite,
2033 '$ %IteratorPrototype%': hasSymbols$3 ? getProto(getProto([][Symbol.iterator]())) : undefined$1,
2035 '$ %JSONParse%': JSON.parse,
2036 '$ %Map%': typeof Map === 'undefined' ? undefined$1 : Map,
2037 '$ %MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols$3 ? undefined$1 : getProto(new Map()[Symbol.iterator]()),
2038 '$ %MapPrototype%': typeof Map === 'undefined' ? undefined$1 : Map.prototype,
2040 '$ %Number%': Number,
2041 '$ %NumberPrototype%': Number.prototype,
2042 '$ %Object%': Object,
2043 '$ %ObjectPrototype%': Object.prototype,
2044 '$ %ObjProto_toString%': Object.prototype.toString,
2045 '$ %ObjProto_valueOf%': Object.prototype.valueOf,
2046 '$ %parseFloat%': parseFloat,
2047 '$ %parseInt%': parseInt,
2048 '$ %Promise%': typeof Promise === 'undefined' ? undefined$1 : Promise,
2049 '$ %PromisePrototype%': typeof Promise === 'undefined' ? undefined$1 : Promise.prototype,
2050 '$ %PromiseProto_then%': typeof Promise === 'undefined' ? undefined$1 : Promise.prototype.then,
2051 '$ %Promise_all%': typeof Promise === 'undefined' ? undefined$1 : Promise.all,
2052 '$ %Promise_reject%': typeof Promise === 'undefined' ? undefined$1 : Promise.reject,
2053 '$ %Promise_resolve%': typeof Promise === 'undefined' ? undefined$1 : Promise.resolve,
2054 '$ %Proxy%': typeof Proxy === 'undefined' ? undefined$1 : Proxy,
2055 '$ %RangeError%': RangeError,
2056 '$ %RangeErrorPrototype%': RangeError.prototype,
2057 '$ %ReferenceError%': ReferenceError,
2058 '$ %ReferenceErrorPrototype%': ReferenceError.prototype,
2059 '$ %Reflect%': typeof Reflect === 'undefined' ? undefined$1 : Reflect,
2060 '$ %RegExp%': RegExp,
2061 '$ %RegExpPrototype%': RegExp.prototype,
2062 '$ %Set%': typeof Set === 'undefined' ? undefined$1 : Set,
2063 '$ %SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols$3 ? undefined$1 : getProto(new Set()[Symbol.iterator]()),
2064 '$ %SetPrototype%': typeof Set === 'undefined' ? undefined$1 : Set.prototype,
2065 '$ %SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined$1 : SharedArrayBuffer,
2066 '$ %SharedArrayBufferPrototype%': typeof SharedArrayBuffer === 'undefined' ? undefined$1 : SharedArrayBuffer.prototype,
2067 '$ %String%': String,
2068 '$ %StringIteratorPrototype%': hasSymbols$3 ? getProto(''[Symbol.iterator]()) : undefined$1,
2069 '$ %StringPrototype%': String.prototype,
2070 '$ %Symbol%': hasSymbols$3 ? Symbol : undefined$1,
2071 '$ %SymbolPrototype%': hasSymbols$3 ? Symbol.prototype : undefined$1,
2072 '$ %SyntaxError%': SyntaxError,
2073 '$ %SyntaxErrorPrototype%': SyntaxError.prototype,
2074 '$ %ThrowTypeError%': ThrowTypeError,
2075 '$ %TypedArray%': TypedArray,
2076 '$ %TypedArrayPrototype%': TypedArray ? TypedArray.prototype : undefined$1,
2077 '$ %TypeError%': TypeError,
2078 '$ %TypeErrorPrototype%': TypeError.prototype,
2079 '$ %Uint8Array%': typeof Uint8Array === 'undefined' ? undefined$1 : Uint8Array,
2080 '$ %Uint8ArrayPrototype%': typeof Uint8Array === 'undefined' ? undefined$1 : Uint8Array.prototype,
2081 '$ %Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined$1 : Uint8ClampedArray,
2082 '$ %Uint8ClampedArrayPrototype%': typeof Uint8ClampedArray === 'undefined' ? undefined$1 : Uint8ClampedArray.prototype,
2083 '$ %Uint16Array%': typeof Uint16Array === 'undefined' ? undefined$1 : Uint16Array,
2084 '$ %Uint16ArrayPrototype%': typeof Uint16Array === 'undefined' ? undefined$1 : Uint16Array.prototype,
2085 '$ %Uint32Array%': typeof Uint32Array === 'undefined' ? undefined$1 : Uint32Array,
2086 '$ %Uint32ArrayPrototype%': typeof Uint32Array === 'undefined' ? undefined$1 : Uint32Array.prototype,
2087 '$ %URIError%': URIError,
2088 '$ %URIErrorPrototype%': URIError.prototype,
2089 '$ %WeakMap%': typeof WeakMap === 'undefined' ? undefined$1 : WeakMap,
2090 '$ %WeakMapPrototype%': typeof WeakMap === 'undefined' ? undefined$1 : WeakMap.prototype,
2091 '$ %WeakSet%': typeof WeakSet === 'undefined' ? undefined$1 : WeakSet,
2092 '$ %WeakSetPrototype%': typeof WeakSet === 'undefined' ? undefined$1 : WeakSet.prototype
2095 var GetIntrinsic = function GetIntrinsic(name, allowMissing) {
2096 if (arguments.length > 1 && typeof allowMissing !== 'boolean') {
2097 throw new TypeError('"allowMissing" argument must be a boolean');
2100 var key = '$ ' + name;
2101 if (!(key in INTRINSICS)) {
2102 throw new SyntaxError('intrinsic ' + name + ' does not exist!');
2105 // istanbul ignore if // hopefully this is impossible to test :-)
2106 if (typeof INTRINSICS[key] === 'undefined' && !allowMissing) {
2107 throw new TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');
2109 return INTRINSICS[key];
2112 var $TypeError = GetIntrinsic('%TypeError%');
2113 var $SyntaxError = GetIntrinsic('%SyntaxError%');
2118 // https://ecma-international.org/ecma-262/6.0/#sec-property-descriptor-specification-type
2119 'Property Descriptor': function isPropertyDescriptor(ES, Desc) {
2120 if (ES.Type(Desc) !== 'Object') {
2124 '[[Configurable]]': true,
2125 '[[Enumerable]]': true,
2129 '[[Writable]]': true
2132 for (var key in Desc) { // eslint-disable-line
2133 if (src(Desc, key) && !allowed[key]) {
2138 var isData = src(Desc, '[[Value]]');
2139 var IsAccessor = src(Desc, '[[Get]]') || src(Desc, '[[Set]]');
2140 if (isData && IsAccessor) {
2141 throw new $TypeError('Property Descriptors may not be both accessor and data descriptors');
2147 var assertRecord = function assertRecord(ES, recordType, argumentName, value) {
2148 var predicate = predicates[recordType];
2149 if (typeof predicate !== 'function') {
2150 throw new $SyntaxError('unknown record type: ' + recordType);
2152 if (!predicate(ES, value)) {
2153 throw new $TypeError(argumentName + ' must be a ' + recordType);
2155 console.log(predicate(ES, value), value);
2158 var _isNaN = Number.isNaN || function isNaN(a) {
2162 var $isNaN = Number.isNaN || function (a) { return a !== a; };
2164 var _isFinite = Number.isFinite || function (x) { return typeof x === 'number' && !$isNaN(x) && x !== Infinity && x !== -Infinity; };
2166 var has$1 = functionBind.call(Function.call, Object.prototype.hasOwnProperty);
2168 var $assign = Object.assign;
2170 var assign$1 = function assign(target, source) {
2172 return $assign(target, source);
2175 for (var key in source) {
2176 if (has$1(source, key)) {
2177 target[key] = source[key];
2183 var sign$1 = function sign(number) {
2184 return number >= 0 ? 1 : -1;
2187 var mod = function mod(number, modulo) {
2188 var remain = number % modulo;
2189 return Math.floor(remain >= 0 ? remain : remain + modulo);
2192 var isPrimitive$1 = function isPrimitive(value) {
2193 return value === null || (typeof value !== 'function' && typeof value !== 'object');
2196 var toStr$6 = Object.prototype.toString;
2202 // http://ecma-international.org/ecma-262/5.1/#sec-8.12.8
2203 var ES5internalSlots = {
2204 '[[DefaultValue]]': function (O) {
2206 if (arguments.length > 1) {
2207 actualHint = arguments[1];
2209 actualHint = toStr$6.call(O) === '[object Date]' ? String : Number;
2212 if (actualHint === String || actualHint === Number) {
2213 var methods = actualHint === String ? ['toString', 'valueOf'] : ['valueOf', 'toString'];
2215 for (i = 0; i < methods.length; ++i) {
2216 if (isCallable$1(O[methods[i]])) {
2217 value = O[methods[i]]();
2218 if (isPrimitive(value)) {
2223 throw new TypeError('No default value');
2225 throw new TypeError('invalid [[DefaultValue]] hint supplied');
2229 // http://ecma-international.org/ecma-262/5.1/#sec-9.1
2230 var es5 = function ToPrimitive(input) {
2231 if (isPrimitive(input)) {
2234 if (arguments.length > 1) {
2235 return ES5internalSlots['[[DefaultValue]]'](input, arguments[1]);
2237 return ES5internalSlots['[[DefaultValue]]'](input);
2240 var $Object = GetIntrinsic('%Object%');
2241 var $TypeError$1 = GetIntrinsic('%TypeError%');
2242 var $String = GetIntrinsic('%String%');
2256 // https://es5.github.io/#x9
2260 ToBoolean: function ToBoolean(value) {
2263 ToNumber: function ToNumber(value) {
2264 return +value; // eslint-disable-line no-implicit-coercion
2266 ToInteger: function ToInteger(value) {
2267 var number = this.ToNumber(value);
2268 if (_isNaN(number)) { return 0; }
2269 if (number === 0 || !_isFinite(number)) { return number; }
2270 return sign$1(number) * Math.floor(Math.abs(number));
2272 ToInt32: function ToInt32(x) {
2273 return this.ToNumber(x) >> 0;
2275 ToUint32: function ToUint32(x) {
2276 return this.ToNumber(x) >>> 0;
2278 ToUint16: function ToUint16(value) {
2279 var number = this.ToNumber(value);
2280 if (_isNaN(number) || number === 0 || !_isFinite(number)) { return 0; }
2281 var posInt = sign$1(number) * Math.floor(Math.abs(number));
2282 return mod(posInt, 0x10000);
2284 ToString: function ToString(value) {
2285 return $String(value);
2287 ToObject: function ToObject(value) {
2288 this.CheckObjectCoercible(value);
2289 return $Object(value);
2291 CheckObjectCoercible: function CheckObjectCoercible(value, optMessage) {
2292 /* jshint eqnull:true */
2293 if (value == null) {
2294 throw new $TypeError$1(optMessage || 'Cannot call method on ' + value);
2298 IsCallable: isCallable$1,
2299 SameValue: function SameValue(x, y) {
2300 if (x === y) { // 0 === -0, but they are not identical.
2301 if (x === 0) { return 1 / x === 1 / y; }
2304 return _isNaN(x) && _isNaN(y);
2307 // https://www.ecma-international.org/ecma-262/5.1/#sec-8
2308 Type: function Type(x) {
2312 if (typeof x === 'undefined') {
2315 if (typeof x === 'function' || typeof x === 'object') {
2318 if (typeof x === 'number') {
2321 if (typeof x === 'boolean') {
2324 if (typeof x === 'string') {
2329 // https://ecma-international.org/ecma-262/6.0/#sec-property-descriptor-specification-type
2330 IsPropertyDescriptor: function IsPropertyDescriptor(Desc) {
2331 if (this.Type(Desc) !== 'Object') {
2335 '[[Configurable]]': true,
2336 '[[Enumerable]]': true,
2340 '[[Writable]]': true
2343 for (var key in Desc) { // eslint-disable-line
2344 if (src(Desc, key) && !allowed[key]) {
2349 var isData = src(Desc, '[[Value]]');
2350 var IsAccessor = src(Desc, '[[Get]]') || src(Desc, '[[Set]]');
2351 if (isData && IsAccessor) {
2352 throw new $TypeError$1('Property Descriptors may not be both accessor and data descriptors');
2357 // https://ecma-international.org/ecma-262/5.1/#sec-8.10.1
2358 IsAccessorDescriptor: function IsAccessorDescriptor(Desc) {
2359 if (typeof Desc === 'undefined') {
2363 assertRecord(this, 'Property Descriptor', 'Desc', Desc);
2365 if (!src(Desc, '[[Get]]') && !src(Desc, '[[Set]]')) {
2372 // https://ecma-international.org/ecma-262/5.1/#sec-8.10.2
2373 IsDataDescriptor: function IsDataDescriptor(Desc) {
2374 if (typeof Desc === 'undefined') {
2378 assertRecord(this, 'Property Descriptor', 'Desc', Desc);
2380 if (!src(Desc, '[[Value]]') && !src(Desc, '[[Writable]]')) {
2387 // https://ecma-international.org/ecma-262/5.1/#sec-8.10.3
2388 IsGenericDescriptor: function IsGenericDescriptor(Desc) {
2389 if (typeof Desc === 'undefined') {
2393 assertRecord(this, 'Property Descriptor', 'Desc', Desc);
2395 if (!this.IsAccessorDescriptor(Desc) && !this.IsDataDescriptor(Desc)) {
2402 // https://ecma-international.org/ecma-262/5.1/#sec-8.10.4
2403 FromPropertyDescriptor: function FromPropertyDescriptor(Desc) {
2404 if (typeof Desc === 'undefined') {
2408 assertRecord(this, 'Property Descriptor', 'Desc', Desc);
2410 if (this.IsDataDescriptor(Desc)) {
2412 value: Desc['[[Value]]'],
2413 writable: !!Desc['[[Writable]]'],
2414 enumerable: !!Desc['[[Enumerable]]'],
2415 configurable: !!Desc['[[Configurable]]']
2417 } else if (this.IsAccessorDescriptor(Desc)) {
2419 get: Desc['[[Get]]'],
2420 set: Desc['[[Set]]'],
2421 enumerable: !!Desc['[[Enumerable]]'],
2422 configurable: !!Desc['[[Configurable]]']
2425 throw new $TypeError$1('FromPropertyDescriptor must be called with a fully populated Property Descriptor');
2429 // https://ecma-international.org/ecma-262/5.1/#sec-8.10.5
2430 ToPropertyDescriptor: function ToPropertyDescriptor(Obj) {
2431 if (this.Type(Obj) !== 'Object') {
2432 throw new $TypeError$1('ToPropertyDescriptor requires an object');
2436 if (src(Obj, 'enumerable')) {
2437 desc['[[Enumerable]]'] = this.ToBoolean(Obj.enumerable);
2439 if (src(Obj, 'configurable')) {
2440 desc['[[Configurable]]'] = this.ToBoolean(Obj.configurable);
2442 if (src(Obj, 'value')) {
2443 desc['[[Value]]'] = Obj.value;
2445 if (src(Obj, 'writable')) {
2446 desc['[[Writable]]'] = this.ToBoolean(Obj.writable);
2448 if (src(Obj, 'get')) {
2449 var getter = Obj.get;
2450 if (typeof getter !== 'undefined' && !this.IsCallable(getter)) {
2451 throw new TypeError('getter must be a function');
2453 desc['[[Get]]'] = getter;
2455 if (src(Obj, 'set')) {
2456 var setter = Obj.set;
2457 if (typeof setter !== 'undefined' && !this.IsCallable(setter)) {
2458 throw new $TypeError$1('setter must be a function');
2460 desc['[[Set]]'] = setter;
2463 if ((src(desc, '[[Get]]') || src(desc, '[[Set]]')) && (src(desc, '[[Value]]') || src(desc, '[[Writable]]'))) {
2464 throw new $TypeError$1('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');
2472 var regexExec = RegExp.prototype.exec;
2473 var gOPD = Object.getOwnPropertyDescriptor;
2475 var tryRegexExecCall = function tryRegexExec(value) {
2477 var lastIndex = value.lastIndex;
2478 value.lastIndex = 0;
2480 regexExec.call(value);
2485 value.lastIndex = lastIndex;
2488 var toStr$7 = Object.prototype.toString;
2489 var regexClass = '[object RegExp]';
2490 var hasToStringTag$2 = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';
2492 var isRegex = function isRegex(value) {
2493 if (!value || typeof value !== 'object') {
2496 if (!hasToStringTag$2) {
2497 return toStr$7.call(value) === regexClass;
2500 var descriptor = gOPD(value, 'lastIndex');
2501 var hasLastIndexDataProperty = descriptor && src(descriptor, 'value');
2502 if (!hasLastIndexDataProperty) {
2506 return tryRegexExecCall(value);
2509 var $TypeError$2 = GetIntrinsic('%TypeError%');
2510 var $SyntaxError$1 = GetIntrinsic('%SyntaxError%');
2511 var $Array = GetIntrinsic('%Array%');
2512 var $String$1 = GetIntrinsic('%String%');
2513 var $Object$1 = GetIntrinsic('%Object%');
2514 var $Number = GetIntrinsic('%Number%');
2515 var $Symbol = GetIntrinsic('%Symbol%', true);
2516 var $RegExp = GetIntrinsic('%RegExp%');
2518 var hasSymbols$4 = !!$Symbol;
2523 var MAX_SAFE_INTEGER = $Number.MAX_SAFE_INTEGER || Math.pow(2, 53) - 1;
2529 var parseInteger = parseInt;
2531 var arraySlice = functionBind.call(Function.call, $Array.prototype.slice);
2532 var strSlice = functionBind.call(Function.call, $String$1.prototype.slice);
2533 var isBinary = functionBind.call(Function.call, $RegExp.prototype.test, /^0b[01]+$/i);
2534 var isOctal = functionBind.call(Function.call, $RegExp.prototype.test, /^0o[0-7]+$/i);
2535 var regexExec$1 = functionBind.call(Function.call, $RegExp.prototype.exec);
2536 var nonWS = ['\u0085', '\u200b', '\ufffe'].join('');
2537 var nonWSregex = new $RegExp('[' + nonWS + ']', 'g');
2538 var hasNonWS = functionBind.call(Function.call, $RegExp.prototype.test, nonWSregex);
2539 var invalidHexLiteral = /^[-+]0x[0-9a-f]+$/i;
2540 var isInvalidHexLiteral = functionBind.call(Function.call, $RegExp.prototype.test, invalidHexLiteral);
2541 var $charCodeAt = functionBind.call(Function.call, $String$1.prototype.charCodeAt);
2543 var toStr$8 = functionBind.call(Function.call, Object.prototype.toString);
2545 var $NumberValueOf = functionBind.call(Function.call, GetIntrinsic('%NumberPrototype%').valueOf);
2546 var $BooleanValueOf = functionBind.call(Function.call, GetIntrinsic('%BooleanPrototype%').valueOf);
2547 var $StringValueOf = functionBind.call(Function.call, GetIntrinsic('%StringPrototype%').valueOf);
2548 var $DateValueOf = functionBind.call(Function.call, GetIntrinsic('%DatePrototype%').valueOf);
2550 var $floor = Math.floor;
2551 var $abs = Math.abs;
2553 var $ObjectCreate = Object.create;
2554 var $gOPD = $Object$1.getOwnPropertyDescriptor;
2556 var $isExtensible = $Object$1.isExtensible;
2558 var $defineProperty = $Object$1.defineProperty;
2560 // whitespace from: http://es5.github.io/#x15.5.4.20
2561 // implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324
2563 '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003',
2564 '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028',
2567 var trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');
2568 var replace = functionBind.call(Function.call, $String$1.prototype.replace);
2569 var trim = function (value) {
2570 return replace(value, trimRegex, '');
2577 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-abstract-operations
2578 var ES6 = assign$1(assign$1({}, es5$1), {
2580 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-call-f-v-args
2581 Call: function Call(F, V) {
2582 var args = arguments.length > 2 ? arguments[2] : [];
2583 if (!this.IsCallable(F)) {
2584 throw new $TypeError$2(F + ' is not a function');
2586 return F.apply(V, args);
2589 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-toprimitive
2592 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-toboolean
2593 // ToBoolean: ES5.ToBoolean,
2595 // https://ecma-international.org/ecma-262/6.0/#sec-tonumber
2596 ToNumber: function ToNumber(argument) {
2597 var value = isPrimitive$1(argument) ? argument : es6(argument, $Number);
2598 if (typeof value === 'symbol') {
2599 throw new $TypeError$2('Cannot convert a Symbol value to a number');
2601 if (typeof value === 'string') {
2602 if (isBinary(value)) {
2603 return this.ToNumber(parseInteger(strSlice(value, 2), 2));
2604 } else if (isOctal(value)) {
2605 return this.ToNumber(parseInteger(strSlice(value, 2), 8));
2606 } else if (hasNonWS(value) || isInvalidHexLiteral(value)) {
2609 var trimmed = trim(value);
2610 if (trimmed !== value) {
2611 return this.ToNumber(trimmed);
2615 return $Number(value);
2618 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tointeger
2619 // ToInteger: ES5.ToNumber,
2621 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-toint32
2622 // ToInt32: ES5.ToInt32,
2624 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-touint32
2625 // ToUint32: ES5.ToUint32,
2627 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-toint16
2628 ToInt16: function ToInt16(argument) {
2629 var int16bit = this.ToUint16(argument);
2630 return int16bit >= 0x8000 ? int16bit - 0x10000 : int16bit;
2633 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-touint16
2634 // ToUint16: ES5.ToUint16,
2636 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-toint8
2637 ToInt8: function ToInt8(argument) {
2638 var int8bit = this.ToUint8(argument);
2639 return int8bit >= 0x80 ? int8bit - 0x100 : int8bit;
2642 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-touint8
2643 ToUint8: function ToUint8(argument) {
2644 var number = this.ToNumber(argument);
2645 if (_isNaN(number) || number === 0 || !_isFinite(number)) { return 0; }
2646 var posInt = sign$1(number) * $floor($abs(number));
2647 return mod(posInt, 0x100);
2650 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-touint8clamp
2651 ToUint8Clamp: function ToUint8Clamp(argument) {
2652 var number = this.ToNumber(argument);
2653 if (_isNaN(number) || number <= 0) { return 0; }
2654 if (number >= 0xFF) { return 0xFF; }
2655 var f = $floor(argument);
2656 if (f + 0.5 < number) { return f + 1; }
2657 if (number < f + 0.5) { return f; }
2658 if (f % 2 !== 0) { return f + 1; }
2662 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tostring
2663 ToString: function ToString(argument) {
2664 if (typeof argument === 'symbol') {
2665 throw new $TypeError$2('Cannot convert a Symbol value to a string');
2667 return $String$1(argument);
2670 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-toobject
2671 ToObject: function ToObject(value) {
2672 this.RequireObjectCoercible(value);
2673 return $Object$1(value);
2676 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-topropertykey
2677 ToPropertyKey: function ToPropertyKey(argument) {
2678 var key = this.ToPrimitive(argument, $String$1);
2679 return typeof key === 'symbol' ? key : this.ToString(key);
2682 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength
2683 ToLength: function ToLength(argument) {
2684 var len = this.ToInteger(argument);
2685 if (len <= 0) { return 0; } // includes converting -0 to +0
2686 if (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; }
2690 // https://ecma-international.org/ecma-262/6.0/#sec-canonicalnumericindexstring
2691 CanonicalNumericIndexString: function CanonicalNumericIndexString(argument) {
2692 if (toStr$8(argument) !== '[object String]') {
2693 throw new $TypeError$2('must be a string');
2695 if (argument === '-0') { return -0; }
2696 var n = this.ToNumber(argument);
2697 if (this.SameValue(this.ToString(n), argument)) { return n; }
2701 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-requireobjectcoercible
2702 RequireObjectCoercible: es5$1.CheckObjectCoercible,
2704 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-isarray
2705 IsArray: $Array.isArray || function IsArray(argument) {
2706 return toStr$8(argument) === '[object Array]';
2709 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-iscallable
2710 // IsCallable: ES5.IsCallable,
2712 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-isconstructor
2713 IsConstructor: function IsConstructor(argument) {
2714 return typeof argument === 'function' && !!argument.prototype; // unfortunately there's no way to truly check this without try/catch `new argument`
2717 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-isextensible-o
2718 IsExtensible: Object.preventExtensions
2719 ? function IsExtensible(obj) {
2720 if (isPrimitive$1(obj)) {
2723 return $isExtensible(obj);
2725 : function isExtensible(obj) { return true; }, // eslint-disable-line no-unused-vars
2727 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-isinteger
2728 IsInteger: function IsInteger(argument) {
2729 if (typeof argument !== 'number' || _isNaN(argument) || !_isFinite(argument)) {
2732 var abs = $abs(argument);
2733 return $floor(abs) === abs;
2736 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-ispropertykey
2737 IsPropertyKey: function IsPropertyKey(argument) {
2738 return typeof argument === 'string' || typeof argument === 'symbol';
2741 // https://ecma-international.org/ecma-262/6.0/#sec-isregexp
2742 IsRegExp: function IsRegExp(argument) {
2743 if (!argument || typeof argument !== 'object') {
2747 var isRegExp = argument[$Symbol.match];
2748 if (typeof isRegExp !== 'undefined') {
2749 return es5$1.ToBoolean(isRegExp);
2752 return isRegex(argument);
2755 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevalue
2756 // SameValue: ES5.SameValue,
2758 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero
2759 SameValueZero: function SameValueZero(x, y) {
2760 return (x === y) || (_isNaN(x) && _isNaN(y));
2765 * 1. Assert: IsPropertyKey(P) is true.
2766 * 2. Let O be ToObject(V).
2767 * 3. ReturnIfAbrupt(O).
2768 * 4. Return O.[[Get]](P, V).
2770 GetV: function GetV(V, P) {
2772 if (!this.IsPropertyKey(P)) {
2773 throw new $TypeError$2('Assertion failed: IsPropertyKey(P) is not true');
2777 var O = this.ToObject(V);
2784 * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod
2785 * 1. Assert: IsPropertyKey(P) is true.
2786 * 2. Let func be GetV(O, P).
2787 * 3. ReturnIfAbrupt(func).
2788 * 4. If func is either undefined or null, return undefined.
2789 * 5. If IsCallable(func) is false, throw a TypeError exception.
2792 GetMethod: function GetMethod(O, P) {
2794 if (!this.IsPropertyKey(P)) {
2795 throw new $TypeError$2('Assertion failed: IsPropertyKey(P) is not true');
2799 var func = this.GetV(O, P);
2807 if (!this.IsCallable(func)) {
2808 throw new $TypeError$2(P + 'is not a function');
2816 * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p
2817 * 1. Assert: Type(O) is Object.
2818 * 2. Assert: IsPropertyKey(P) is true.
2819 * 3. Return O.[[Get]](P, O).
2821 Get: function Get(O, P) {
2823 if (this.Type(O) !== 'Object') {
2824 throw new $TypeError$2('Assertion failed: Type(O) is not Object');
2827 if (!this.IsPropertyKey(P)) {
2828 throw new $TypeError$2('Assertion failed: IsPropertyKey(P) is not true');
2834 Type: function Type(x) {
2835 if (typeof x === 'symbol') {
2838 return es5$1.Type(x);
2841 // https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor
2842 SpeciesConstructor: function SpeciesConstructor(O, defaultConstructor) {
2843 if (this.Type(O) !== 'Object') {
2844 throw new $TypeError$2('Assertion failed: Type(O) is not Object');
2846 var C = O.constructor;
2847 if (typeof C === 'undefined') {
2848 return defaultConstructor;
2850 if (this.Type(C) !== 'Object') {
2851 throw new $TypeError$2('O.constructor is not an Object');
2853 var S = hasSymbols$4 && $Symbol.species ? C[$Symbol.species] : void 0;
2855 return defaultConstructor;
2857 if (this.IsConstructor(S)) {
2860 throw new $TypeError$2('no constructor found');
2863 // https://ecma-international.org/ecma-262/6.0/#sec-completepropertydescriptor
2864 CompletePropertyDescriptor: function CompletePropertyDescriptor(Desc) {
2865 assertRecord(this, 'Property Descriptor', 'Desc', Desc);
2867 if (this.IsGenericDescriptor(Desc) || this.IsDataDescriptor(Desc)) {
2868 if (!src(Desc, '[[Value]]')) {
2869 Desc['[[Value]]'] = void 0;
2871 if (!src(Desc, '[[Writable]]')) {
2872 Desc['[[Writable]]'] = false;
2875 if (!src(Desc, '[[Get]]')) {
2876 Desc['[[Get]]'] = void 0;
2878 if (!src(Desc, '[[Set]]')) {
2879 Desc['[[Set]]'] = void 0;
2882 if (!src(Desc, '[[Enumerable]]')) {
2883 Desc['[[Enumerable]]'] = false;
2885 if (!src(Desc, '[[Configurable]]')) {
2886 Desc['[[Configurable]]'] = false;
2891 // https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw
2892 Set: function Set(O, P, V, Throw) {
2893 if (this.Type(O) !== 'Object') {
2894 throw new $TypeError$2('O must be an Object');
2896 if (!this.IsPropertyKey(P)) {
2897 throw new $TypeError$2('P must be a Property Key');
2899 if (this.Type(Throw) !== 'Boolean') {
2900 throw new $TypeError$2('Throw must be a Boolean');
2914 // https://ecma-international.org/ecma-262/6.0/#sec-hasownproperty
2915 HasOwnProperty: function HasOwnProperty(O, P) {
2916 if (this.Type(O) !== 'Object') {
2917 throw new $TypeError$2('O must be an Object');
2919 if (!this.IsPropertyKey(P)) {
2920 throw new $TypeError$2('P must be a Property Key');
2925 // https://ecma-international.org/ecma-262/6.0/#sec-hasproperty
2926 HasProperty: function HasProperty(O, P) {
2927 if (this.Type(O) !== 'Object') {
2928 throw new $TypeError$2('O must be an Object');
2930 if (!this.IsPropertyKey(P)) {
2931 throw new $TypeError$2('P must be a Property Key');
2936 // https://ecma-international.org/ecma-262/6.0/#sec-isconcatspreadable
2937 IsConcatSpreadable: function IsConcatSpreadable(O) {
2938 if (this.Type(O) !== 'Object') {
2941 if (hasSymbols$4 && typeof $Symbol.isConcatSpreadable === 'symbol') {
2942 var spreadable = this.Get(O, Symbol.isConcatSpreadable);
2943 if (typeof spreadable !== 'undefined') {
2944 return this.ToBoolean(spreadable);
2947 return this.IsArray(O);
2950 // https://ecma-international.org/ecma-262/6.0/#sec-invoke
2951 Invoke: function Invoke(O, P) {
2952 if (!this.IsPropertyKey(P)) {
2953 throw new $TypeError$2('P must be a Property Key');
2955 var argumentsList = arraySlice(arguments, 2);
2956 var func = this.GetV(O, P);
2957 return this.Call(func, O, argumentsList);
2960 // https://ecma-international.org/ecma-262/6.0/#sec-getiterator
2961 GetIterator: function GetIterator(obj, method) {
2962 if (!hasSymbols$4) {
2963 throw new SyntaxError('ES.GetIterator depends on native iterator support.');
2966 var actualMethod = method;
2967 if (arguments.length < 2) {
2968 actualMethod = this.GetMethod(obj, $Symbol.iterator);
2970 var iterator = this.Call(actualMethod, obj);
2971 if (this.Type(iterator) !== 'Object') {
2972 throw new $TypeError$2('iterator must return an object');
2978 // https://ecma-international.org/ecma-262/6.0/#sec-iteratornext
2979 IteratorNext: function IteratorNext(iterator, value) {
2980 var result = this.Invoke(iterator, 'next', arguments.length < 2 ? [] : [value]);
2981 if (this.Type(result) !== 'Object') {
2982 throw new $TypeError$2('iterator next must return an object');
2987 // https://ecma-international.org/ecma-262/6.0/#sec-iteratorcomplete
2988 IteratorComplete: function IteratorComplete(iterResult) {
2989 if (this.Type(iterResult) !== 'Object') {
2990 throw new $TypeError$2('Assertion failed: Type(iterResult) is not Object');
2992 return this.ToBoolean(this.Get(iterResult, 'done'));
2995 // https://ecma-international.org/ecma-262/6.0/#sec-iteratorvalue
2996 IteratorValue: function IteratorValue(iterResult) {
2997 if (this.Type(iterResult) !== 'Object') {
2998 throw new $TypeError$2('Assertion failed: Type(iterResult) is not Object');
3000 return this.Get(iterResult, 'value');
3003 // https://ecma-international.org/ecma-262/6.0/#sec-iteratorstep
3004 IteratorStep: function IteratorStep(iterator) {
3005 var result = this.IteratorNext(iterator);
3006 var done = this.IteratorComplete(result);
3007 return done === true ? false : result;
3010 // https://ecma-international.org/ecma-262/6.0/#sec-iteratorclose
3011 IteratorClose: function IteratorClose(iterator, completion) {
3012 if (this.Type(iterator) !== 'Object') {
3013 throw new $TypeError$2('Assertion failed: Type(iterator) is not Object');
3015 if (!this.IsCallable(completion)) {
3016 throw new $TypeError$2('Assertion failed: completion is not a thunk for a Completion Record');
3018 var completionThunk = completion;
3020 var iteratorReturn = this.GetMethod(iterator, 'return');
3022 if (typeof iteratorReturn === 'undefined') {
3023 return completionThunk();
3026 var completionRecord;
3028 var innerResult = this.Call(iteratorReturn, iterator, []);
3030 // if we hit here, then "e" is the innerResult completion that needs re-throwing
3032 // if the completion is of type "throw", this will throw.
3033 completionRecord = completionThunk();
3034 completionThunk = null; // ensure it's not called twice.
3036 // if not, then return the innerResult completion
3039 completionRecord = completionThunk(); // if innerResult worked, then throw if the completion does
3040 completionThunk = null; // ensure it's not called twice.
3042 if (this.Type(innerResult) !== 'Object') {
3043 throw new $TypeError$2('iterator .return must return an object');
3046 return completionRecord;
3049 // https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject
3050 CreateIterResultObject: function CreateIterResultObject(value, done) {
3051 if (this.Type(done) !== 'Boolean') {
3052 throw new $TypeError$2('Assertion failed: Type(done) is not Boolean');
3060 // https://ecma-international.org/ecma-262/6.0/#sec-regexpexec
3061 RegExpExec: function RegExpExec(R, S) {
3062 if (this.Type(R) !== 'Object') {
3063 throw new $TypeError$2('R must be an Object');
3065 if (this.Type(S) !== 'String') {
3066 throw new $TypeError$2('S must be a String');
3068 var exec = this.Get(R, 'exec');
3069 if (this.IsCallable(exec)) {
3070 var result = this.Call(exec, R, [S]);
3071 if (result === null || this.Type(result) === 'Object') {
3074 throw new $TypeError$2('"exec" method must return `null` or an Object');
3076 return regexExec$1(R, S);
3079 // https://ecma-international.org/ecma-262/6.0/#sec-arrayspeciescreate
3080 ArraySpeciesCreate: function ArraySpeciesCreate(originalArray, length) {
3081 if (!this.IsInteger(length) || length < 0) {
3082 throw new $TypeError$2('Assertion failed: length must be an integer >= 0');
3084 var len = length === 0 ? 0 : length;
3086 var isArray = this.IsArray(originalArray);
3088 C = this.Get(originalArray, 'constructor');
3089 // TODO: figure out how to make a cross-realm normal Array, a same-realm Array
3090 // if (this.IsConstructor(C)) {
3091 // if C is another realm's Array, C = undefined
3092 // Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(Array))) === null ?
3094 if (this.Type(C) === 'Object' && hasSymbols$4 && $Symbol.species) {
3095 C = this.Get(C, $Symbol.species);
3101 if (typeof C === 'undefined') {
3104 if (!this.IsConstructor(C)) {
3105 throw new $TypeError$2('C must be a constructor');
3107 return new C(len); // this.Construct(C, len);
3110 CreateDataProperty: function CreateDataProperty(O, P, V) {
3111 if (this.Type(O) !== 'Object') {
3112 throw new $TypeError$2('Assertion failed: Type(O) is not Object');
3114 if (!this.IsPropertyKey(P)) {
3115 throw new $TypeError$2('Assertion failed: IsPropertyKey(P) is not true');
3117 var oldDesc = $gOPD(O, P);
3118 var extensible = oldDesc || (typeof $isExtensible !== 'function' || $isExtensible(O));
3119 var immutable = oldDesc && (!oldDesc.writable || !oldDesc.configurable);
3120 if (immutable || !extensible) {
3129 $defineProperty(O, P, newDesc);
3133 // https://ecma-international.org/ecma-262/6.0/#sec-createdatapropertyorthrow
3134 CreateDataPropertyOrThrow: function CreateDataPropertyOrThrow(O, P, V) {
3135 if (this.Type(O) !== 'Object') {
3136 throw new $TypeError$2('Assertion failed: Type(O) is not Object');
3138 if (!this.IsPropertyKey(P)) {
3139 throw new $TypeError$2('Assertion failed: IsPropertyKey(P) is not true');
3141 var success = this.CreateDataProperty(O, P, V);
3143 throw new $TypeError$2('unable to create data property');
3148 // https://www.ecma-international.org/ecma-262/6.0/#sec-objectcreate
3149 ObjectCreate: function ObjectCreate(proto, internalSlotsList) {
3150 if (proto !== null && this.Type(proto) !== 'Object') {
3151 throw new $TypeError$2('Assertion failed: proto must be null or an object');
3153 var slots = arguments.length < 2 ? [] : internalSlotsList;
3154 if (slots.length > 0) {
3155 throw new $SyntaxError$1('es-abstract does not yet support internal slots');
3158 if (proto === null && !$ObjectCreate) {
3159 throw new $SyntaxError$1('native Object.create support is required to create null objects');
3162 return $ObjectCreate(proto);
3165 // https://ecma-international.org/ecma-262/6.0/#sec-advancestringindex
3166 AdvanceStringIndex: function AdvanceStringIndex(S, index, unicode) {
3167 if (this.Type(S) !== 'String') {
3168 throw new $TypeError$2('S must be a String');
3170 if (!this.IsInteger(index) || index < 0 || index > MAX_SAFE_INTEGER) {
3171 throw new $TypeError$2('Assertion failed: length must be an integer >= 0 and <= 2**53');
3173 if (this.Type(unicode) !== 'Boolean') {
3174 throw new $TypeError$2('Assertion failed: unicode must be a Boolean');
3179 var length = S.length;
3180 if ((index + 1) >= length) {
3184 var first = $charCodeAt(S, index);
3185 if (first < 0xD800 || first > 0xDBFF) {
3189 var second = $charCodeAt(S, index + 1);
3190 if (second < 0xDC00 || second > 0xDFFF) {
3197 // https://www.ecma-international.org/ecma-262/6.0/#sec-createmethodproperty
3198 CreateMethodProperty: function CreateMethodProperty(O, P, V) {
3199 if (this.Type(O) !== 'Object') {
3200 throw new $TypeError$2('Assertion failed: Type(O) is not Object');
3203 if (!this.IsPropertyKey(P)) {
3204 throw new $TypeError$2('Assertion failed: IsPropertyKey(P) is not true');
3213 return !!$defineProperty(O, P, newDesc);
3216 // https://www.ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow
3217 DefinePropertyOrThrow: function DefinePropertyOrThrow(O, P, desc) {
3218 if (this.Type(O) !== 'Object') {
3219 throw new $TypeError$2('Assertion failed: Type(O) is not Object');
3222 if (!this.IsPropertyKey(P)) {
3223 throw new $TypeError$2('Assertion failed: IsPropertyKey(P) is not true');
3226 return !!$defineProperty(O, P, desc);
3229 // https://www.ecma-international.org/ecma-262/6.0/#sec-deletepropertyorthrow
3230 DeletePropertyOrThrow: function DeletePropertyOrThrow(O, P) {
3231 if (this.Type(O) !== 'Object') {
3232 throw new $TypeError$2('Assertion failed: Type(O) is not Object');
3235 if (!this.IsPropertyKey(P)) {
3236 throw new $TypeError$2('Assertion failed: IsPropertyKey(P) is not true');
3239 var success = delete O[P];
3241 throw new TypeError('Attempt to delete property failed.');
3246 // https://www.ecma-international.org/ecma-262/6.0/#sec-enumerableownnames
3247 EnumerableOwnNames: function EnumerableOwnNames(O) {
3248 if (this.Type(O) !== 'Object') {
3249 throw new $TypeError$2('Assertion failed: Type(O) is not Object');
3252 return objectKeys(O);
3255 // https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-number-prototype-object
3256 thisNumberValue: function thisNumberValue(value) {
3257 if (this.Type(value) === 'Number') {
3261 return $NumberValueOf(value);
3264 // https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-boolean-prototype-object
3265 thisBooleanValue: function thisBooleanValue(value) {
3266 if (this.Type(value) === 'Boolean') {
3270 return $BooleanValueOf(value);
3273 // https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-string-prototype-object
3274 thisStringValue: function thisStringValue(value) {
3275 if (this.Type(value) === 'String') {
3279 return $StringValueOf(value);
3282 // https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-date-prototype-object
3283 thisTimeValue: function thisTimeValue(value) {
3284 return $DateValueOf(value);
3288 delete ES6.CheckObjectCoercible; // renamed in ES6 to RequireObjectCoercible
3292 var es6$1 = es2015$1;
3294 var implementation$2 = function find(predicate) {
3295 var list = es6$1.ToObject(this);
3296 var length = es6$1.ToInteger(es6$1.ToLength(list.length));
3297 if (!es6$1.IsCallable(predicate)) {
3298 throw new TypeError('Array#find: predicate must be a function');
3303 var thisArg = arguments[1];
3304 for (var i = 0, value; i < length; i++) {
3306 if (es6$1.Call(predicate, thisArg, [value, i, list])) {
3313 var polyfill$3 = function getPolyfill() {
3314 // Detect if an implementation exists
3315 // Detect early implementations which skipped holes in sparse arrays
3316 // eslint-disable-next-line no-sparse-arrays
3317 var implemented = Array.prototype.find && [, 1].find(function () {
3321 // eslint-disable-next-line global-require
3322 return implemented ? Array.prototype.find : implementation$2;
3325 var shim$8 = function shimArrayPrototypeFind() {
3326 var polyfill = polyfill$3();
3328 defineProperties_1(Array.prototype, { find: polyfill }, {
3330 return Array.prototype.find !== polyfill;
3337 var slice$2 = Array.prototype.slice;
3339 var polyfill$4 = polyfill$3();
3341 var boundFindShim = function find(array, predicate) { // eslint-disable-line no-unused-vars
3342 es6$1.RequireObjectCoercible(array);
3343 var args = slice$2.call(arguments, 1);
3344 return polyfill$4.apply(array, args);
3347 defineProperties_1(boundFindShim, {
3348 getPolyfill: polyfill$3,
3349 implementation: implementation$2,
3353 var array_prototype_find = boundFindShim;
3355 var implementation$3 = function findIndex(predicate) {
3356 var list = es6$1.ToObject(this);
3357 var length = es6$1.ToLength(list.length);
3358 if (!es6$1.IsCallable(predicate)) {
3359 throw new TypeError('Array#findIndex: predicate must be a function');
3361 if (length === 0) return -1;
3362 var thisArg = arguments[1];
3363 for (var i = 0, value; i < length; i++) {
3365 if (es6$1.Call(predicate, thisArg, [value, i, list])) return i;
3370 var polyfill$5 = function getPolyfill() {
3371 // Detect if an implementation exists
3372 // Detect early implementations which skipped holes in sparse arrays
3373 var implemented = Array.prototype.findIndex && ([, 1].findIndex(function (item, idx) {
3378 return implemented ? Array.prototype.findIndex : implementation$3;
3381 var shim$9 = function shimArrayPrototypeFindIndex() {
3382 var polyfill = polyfill$5();
3384 defineProperties_1(Array.prototype, { findIndex: polyfill }, {
3385 findIndex: function () {
3386 return Array.prototype.findIndex !== polyfill;
3393 var slice$3 = Array.prototype.slice;
3395 var polyfill$6 = polyfill$5();
3397 var boundShim = function findIndex(array, predicate) {
3398 es6$1.RequireObjectCoercible(array);
3399 var args = slice$3.call(arguments, 1);
3400 return polyfill$6.apply(array, args);
3403 defineProperties_1(boundShim, {
3404 implementation: implementation$3,
3405 getPolyfill: polyfill$5,
3409 var array_prototype_findindex = boundShim;
3411 var supportsDescriptors$1 = defineProperties_1.supportsDescriptors;
3413 /*! https://mths.be/array-from v0.2.0 by @mathias */
3414 var implementation$4 = function from(arrayLike) {
3415 var defineProperty = supportsDescriptors$1 ? Object.defineProperty : function put(object, key, descriptor) {
3416 object[key] = descriptor.value;
3419 if (arrayLike === null || typeof arrayLike === 'undefined') {
3420 throw new TypeError('`Array.from` requires an array-like object, not `null` or `undefined`');
3422 var items = es6$1.ToObject(arrayLike);
3425 if (typeof arguments[1] !== 'undefined') {
3426 mapFn = arguments[1];
3427 if (!es6$1.IsCallable(mapFn)) {
3428 throw new TypeError('When provided, the second argument to `Array.from` must be a function');
3430 if (arguments.length > 2) {
3435 var len = es6$1.ToLength(items.length);
3436 var A = es6$1.IsCallable(C) ? es6$1.ToObject(new C(len)) : new Array(len);
3438 var kValue, mappedValue;
3442 mappedValue = typeof T === 'undefined' ? mapFn(kValue, k) : es6$1.Call(mapFn, T, [kValue, k]);
3444 mappedValue = kValue;
3446 defineProperty(A, k, {
3447 'configurable': true,
3449 'value': mappedValue,
3458 var tryCall = function (fn) {
3467 var polyfill$7 = function getPolyfill() {
3468 var implemented = es6$1.IsCallable(Array.from)
3469 && tryCall(function () { })
3470 && !tryCall(function () { });
3472 return implemented ? Array.from : implementation$4;
3475 var shim$a = function shimArrayFrom() {
3476 var polyfill = polyfill$7();
3478 defineProperties_1(Array, { 'from': polyfill }, {
3479 'from': function () {
3480 return Array.from !== polyfill;
3487 // eslint-disable-next-line no-unused-vars
3488 var boundFromShim = function from(array) {
3489 // eslint-disable-next-line no-invalid-this
3490 return implementation$4.apply(this || Array, arguments);
3493 defineProperties_1(boundFromShim, {
3494 'getPolyfill': polyfill$7,
3495 'implementation': implementation$4,
3499 var array_from = boundFromShim;
3501 var ES2016 = assign$1(assign$1({}, es2015$1), {
3502 // https://github.com/tc39/ecma262/pull/60
3503 SameValueNonNumber: function SameValueNonNumber(x, y) {
3504 if (typeof x === 'number' || typeof x !== typeof y) {
3505 throw new TypeError('SameValueNonNumber requires two non-number values of the same type.');
3507 return this.SameValue(x, y);
3511 var es2016 = ES2016;
3515 var isEnumerable$1 = functionBind.call(Function.call, Object.prototype.propertyIsEnumerable);
3517 var implementation$5 = function values(O) {
3518 var obj = es7.RequireObjectCoercible(O);
3520 for (var key in obj) {
3521 if (src(obj, key) && isEnumerable$1(obj, key)) {
3522 vals.push(obj[key]);
3528 var polyfill$8 = function getPolyfill() {
3529 return typeof Object.values === 'function' ? Object.values : implementation$5;
3532 var shim$b = function shimValues() {
3533 var polyfill = polyfill$8();
3534 defineProperties_1(Object, { values: polyfill }, {
3535 values: function testValues() {
3536 return Object.values !== polyfill;
3542 var polyfill$9 = polyfill$8();
3544 defineProperties_1(polyfill$9, {
3545 getPolyfill: polyfill$8,
3546 implementation: implementation$5,
3550 var object_values = polyfill$9;
3552 // modified from https://github.com/es-shims/es6-shim
3555 var canBeObject = function (obj) {
3556 return typeof obj !== 'undefined' && obj !== null;
3558 var hasSymbols$5 = shams();
3559 var toObject = Object;
3560 var push = functionBind.call(Function.call, Array.prototype.push);
3561 var propIsEnumerable = functionBind.call(Function.call, Object.prototype.propertyIsEnumerable);
3562 var originalGetSymbols = hasSymbols$5 ? Object.getOwnPropertySymbols : null;
3564 var implementation$6 = function assign(target, source1) {
3565 if (!canBeObject(target)) { throw new TypeError('target must be an object'); }
3566 var objTarget = toObject(target);
3567 var s, source, i, props, syms, value, key;
3568 for (s = 1; s < arguments.length; ++s) {
3569 source = toObject(arguments[s]);
3570 props = objectKeys(source);
3571 var getSymbols = hasSymbols$5 && (Object.getOwnPropertySymbols || originalGetSymbols);
3573 syms = getSymbols(source);
3574 for (i = 0; i < syms.length; ++i) {
3576 if (propIsEnumerable(source, key)) {
3581 for (i = 0; i < props.length; ++i) {
3583 value = source[key];
3584 if (propIsEnumerable(source, key)) {
3585 objTarget[key] = value;
3592 var lacksProperEnumerationOrder = function () {
3593 if (!Object.assign) {
3596 // v8, specifically in node 4.x, has a bug with incorrect property enumeration order
3597 // note: this does not detect the bug unless there's 20 characters
3598 var str = 'abcdefghijklmnopqrst';
3599 var letters = str.split('');
3601 for (var i = 0; i < letters.length; ++i) {
3602 map[letters[i]] = letters[i];
3604 var obj = Object.assign({}, map);
3606 for (var k in obj) {
3609 return str !== actual;
3612 var assignHasPendingExceptions = function () {
3613 if (!Object.assign || !Object.preventExtensions) {
3616 // Firefox 37 still has "pending exception" logic in its Object.assign implementation,
3617 // which is 72% slower than our shim, and Firefox 40's native implementation.
3618 var thrower = Object.preventExtensions({ 1: 2 });
3620 Object.assign(thrower, 'xy');
3622 return thrower[1] === 'y';
3627 var polyfill$a = function getPolyfill() {
3628 if (!Object.assign) {
3629 return implementation$6;
3631 if (lacksProperEnumerationOrder()) {
3632 return implementation$6;
3634 if (assignHasPendingExceptions()) {
3635 return implementation$6;
3637 return Object.assign;
3640 var shim$c = function shimAssign() {
3641 var polyfill = polyfill$a();
3644 { assign: polyfill },
3645 { assign: function () { return Object.assign !== polyfill; } }
3650 var polyfill$b = polyfill$a();
3652 defineProperties_1(polyfill$b, {
3653 getPolyfill: polyfill$a,
3654 implementation: implementation$6,
3658 var object_assign = polyfill$b;
3663 function finallyConstructor(callback) {
3664 var constructor = this.constructor;
3667 return constructor.resolve(callback()).then(function() {
3672 return constructor.resolve(callback()).then(function() {
3673 return constructor.reject(reason);
3679 // Store setTimeout reference so promise-polyfill will be unaffected by
3680 // other code modifying setTimeout (like sinon.useFakeTimers())
3681 var setTimeoutFunc = setTimeout;
3683 function noop$1() {}
3685 // Polyfill for Function.prototype.bind
3686 function bind$2(fn, thisArg) {
3688 fn.apply(thisArg, arguments);
3694 * @param {Function} fn
3696 function Promise$1(fn) {
3697 if (!(this instanceof Promise$1))
3698 throw new TypeError('Promises must be constructed via new');
3699 if (typeof fn !== 'function') throw new TypeError('not a function');
3700 /** @type {!number} */
3702 /** @type {!boolean} */
3703 this._handled = false;
3704 /** @type {Promise|undefined} */
3705 this._value = undefined;
3706 /** @type {!Array<!Function>} */
3707 this._deferreds = [];
3709 doResolve(fn, this);
3712 function handle(self, deferred) {
3713 while (self._state === 3) {
3716 if (self._state === 0) {
3717 self._deferreds.push(deferred);
3720 self._handled = true;
3721 Promise$1._immediateFn(function() {
3722 var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;
3724 (self._state === 1 ? resolve : reject)(deferred.promise, self._value);
3729 ret = cb(self._value);
3731 reject(deferred.promise, e);
3734 resolve(deferred.promise, ret);
3738 function resolve(self, newValue) {
3740 // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure
3741 if (newValue === self)
3742 throw new TypeError('A promise cannot be resolved with itself.');
3745 (typeof newValue === 'object' || typeof newValue === 'function')
3747 var then = newValue.then;
3748 if (newValue instanceof Promise$1) {
3750 self._value = newValue;
3753 } else if (typeof then === 'function') {
3754 doResolve(bind$2(then, newValue), self);
3759 self._value = newValue;
3766 function reject(self, newValue) {
3768 self._value = newValue;
3772 function finale(self) {
3773 if (self._state === 2 && self._deferreds.length === 0) {
3774 Promise$1._immediateFn(function() {
3775 if (!self._handled) {
3776 Promise$1._unhandledRejectionFn(self._value);
3781 for (var i = 0, len = self._deferreds.length; i < len; i++) {
3782 handle(self, self._deferreds[i]);
3784 self._deferreds = null;
3790 function Handler(onFulfilled, onRejected, promise) {
3791 this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;
3792 this.onRejected = typeof onRejected === 'function' ? onRejected : null;
3793 this.promise = promise;
3797 * Take a potentially misbehaving resolver function and make sure
3798 * onFulfilled and onRejected are only called once.
3800 * Makes no guarantees about asynchrony.
3802 function doResolve(fn, self) {
3809 resolve(self, value);
3814 reject(self, reason);
3824 Promise$1.prototype['catch'] = function(onRejected) {
3825 return this.then(null, onRejected);
3828 Promise$1.prototype.then = function(onFulfilled, onRejected) {
3830 var prom = new this.constructor(noop$1);
3832 handle(this, new Handler(onFulfilled, onRejected, prom));
3836 Promise$1.prototype['finally'] = finallyConstructor;
3838 Promise$1.all = function(arr) {
3839 return new Promise$1(function(resolve, reject) {
3840 if (!arr || typeof arr.length === 'undefined')
3841 throw new TypeError('Promise.all accepts an array');
3842 var args = Array.prototype.slice.call(arr);
3843 if (args.length === 0) return resolve([]);
3844 var remaining = args.length;
3846 function res(i, val) {
3848 if (val && (typeof val === 'object' || typeof val === 'function')) {
3849 var then = val.then;
3850 if (typeof then === 'function') {
3862 if (--remaining === 0) {
3870 for (var i = 0; i < args.length; i++) {
3876 Promise$1.resolve = function(value) {
3877 if (value && typeof value === 'object' && value.constructor === Promise$1) {
3881 return new Promise$1(function(resolve) {
3886 Promise$1.reject = function(value) {
3887 return new Promise$1(function(resolve, reject) {
3892 Promise$1.race = function(values) {
3893 return new Promise$1(function(resolve, reject) {
3894 for (var i = 0, len = values.length; i < len; i++) {
3895 values[i].then(resolve, reject);
3900 // Use polyfill for setImmediate for performance gains
3901 Promise$1._immediateFn =
3902 (typeof setImmediate === 'function' &&
3907 setTimeoutFunc(fn, 0);
3910 Promise$1._unhandledRejectionFn = function _unhandledRejectionFn(err) {
3911 if (typeof console !== 'undefined' && console) {
3912 console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console
3916 /** @suppress {undefinedVars} */
3917 var globalNS = (function() {
3918 // the only reliable means to get the global object is
3919 // `Function('return this')()`
3920 // However, this causes CSP violations in Chrome apps.
3921 if (typeof self !== 'undefined') {
3924 if (typeof window !== 'undefined') {
3927 if (typeof global !== 'undefined') {
3930 throw new Error('unable to locate global object');
3933 if (!('Promise' in globalNS)) {
3934 globalNS['Promise'] = Promise$1;
3935 } else if (!globalNS.Promise.prototype['finally']) {
3936 globalNS.Promise.prototype['finally'] = finallyConstructor;
3939 var polyfill$c = /*#__PURE__*/Object.freeze({
3943 var setAsap = createCommonjsModule(function (module) {
3944 (function (thisVar, undefined$1) {
3945 var main = (typeof window === 'object' && window) || (typeof commonjsGlobal === 'object' && commonjsGlobal) ||
3946 typeof self === 'object' && self || thisVar;
3948 var hasSetImmediate = typeof setImmediate === 'function';
3949 var hasNextTick = typeof process === 'object' && !!process && typeof process.nextTick === 'function';
3952 function getNewIndex() {
3953 if (index === 9007199254740991) {
3959 var setAsap = (function () {
3960 var hiddenDiv, scriptEl, timeoutFn, callbacks;
3962 // Modern browsers, fastest async
3963 if (main.MutationObserver) {
3964 return function setAsap(callback) {
3965 hiddenDiv = document.createElement("div");
3966 (new MutationObserver(function() {
3969 })).observe(hiddenDiv, { attributes: true });
3970 hiddenDiv.setAttribute('i', '1');
3973 // Browsers that support postMessage
3974 } else if (!hasSetImmediate && main.postMessage && !main.importScripts && main.addEventListener) {
3976 var MESSAGE_PREFIX = "com.setImmediate" + Math.random();
3979 var onGlobalMessage = function (event) {
3980 if (event.source === main && event.data.indexOf(MESSAGE_PREFIX) === 0) {
3981 var i = +event.data.split(':')[1];
3983 delete callbacks[i];
3987 main.addEventListener("message", onGlobalMessage, false);
3989 return function setAsap(callback) {
3990 var i = getNewIndex();
3991 callbacks[i] = callback;
3992 main.postMessage(MESSAGE_PREFIX + ':' + i, "*");
3995 // IE browsers without postMessage
3996 } else if (!hasSetImmediate && main.document && 'onreadystatechange' in document.createElement('script')) {
3998 return function setAsap(callback) {
3999 scriptEl = document.createElement("script");
4000 scriptEl.onreadystatechange = function onreadystatechange() {
4001 scriptEl.onreadystatechange = null;
4002 scriptEl.parentNode.removeChild(scriptEl);
4006 document.body.appendChild(scriptEl);
4009 // All other browsers and node
4012 timeoutFn = (hasSetImmediate && setImmediate) || (hasNextTick && process.nextTick) || setTimeout;
4013 return function setAsap(callback) {
4014 timeoutFn(callback);
4020 if (module.exports) {
4021 module.exports = setAsap;
4022 } else if (typeof commonjsRequire !== 'undefined' && commonjsRequire.amd) {
4023 undefined$1(function () {
4027 main.setAsap = setAsap;
4032 var performanceNow = createCommonjsModule(function (module) {
4033 // Generated by CoffeeScript 1.12.2
4035 var getNanoSeconds, hrtime, loadTime, moduleLoadTime, nodeLoadTime, upTime;
4037 if ((typeof performance !== "undefined" && performance !== null) && performance.now) {
4038 module.exports = function() {
4039 return performance.now();
4041 } else if ((typeof process !== "undefined" && process !== null) && process.hrtime) {
4042 module.exports = function() {
4043 return (getNanoSeconds() - nodeLoadTime) / 1e6;
4045 hrtime = process.hrtime;
4046 getNanoSeconds = function() {
4049 return hr[0] * 1e9 + hr[1];
4051 moduleLoadTime = getNanoSeconds();
4052 upTime = process.uptime() * 1e9;
4053 nodeLoadTime = moduleLoadTime - upTime;
4054 } else if (Date.now) {
4055 module.exports = function() {
4056 return Date.now() - loadTime;
4058 loadTime = Date.now();
4060 module.exports = function() {
4061 return new Date().getTime() - loadTime;
4063 loadTime = new Date().getTime();
4066 }).call(commonjsGlobal);
4071 var root = typeof window === 'undefined' ? commonjsGlobal : window
4072 , vendors = ['moz', 'webkit']
4073 , suffix = 'AnimationFrame'
4074 , raf = root['request' + suffix]
4075 , caf = root['cancel' + suffix] || root['cancelRequest' + suffix];
4077 for(var i = 0; !raf && i < vendors.length; i++) {
4078 raf = root[vendors[i] + 'Request' + suffix];
4079 caf = root[vendors[i] + 'Cancel' + suffix]
4080 || root[vendors[i] + 'CancelRequest' + suffix];
4083 // Some versions of FF have rAF but not cAF
4088 , frameDuration = 1000 / 60;
4090 raf = function(callback) {
4091 if(queue.length === 0) {
4092 var _now = performanceNow()
4093 , next = Math.max(0, frameDuration - (_now - last));
4095 setTimeout(function() {
4096 var cp = queue.slice(0);
4097 // Clear queue here to prevent
4098 // callbacks from appending listeners
4099 // to the current frame's queue
4101 for(var i = 0; i < cp.length; i++) {
4102 if(!cp[i].cancelled) {
4104 cp[i].callback(last);
4106 setTimeout(function() { throw e }, 0);
4110 }, Math.round(next));
4120 caf = function(handle) {
4121 for(var i = 0; i < queue.length; i++) {
4122 if(queue[i].handle === handle) {
4123 queue[i].cancelled = true;
4129 var raf_1 = function(fn) {
4130 // Wrap in a new function to prevent
4131 // `cancel` potentially being assigned
4132 // to the native rAF function
4133 return raf.call(root, fn)
4135 var cancel = function() {
4136 caf.apply(root, arguments);
4138 var polyfill$d = function(object) {
4142 object.requestAnimationFrame = raf;
4143 object.cancelAnimationFrame = caf;
4145 raf_1.cancel = cancel;
4146 raf_1.polyfill = polyfill$d;
4149 searchParams: 'URLSearchParams' in self,
4150 iterable: 'Symbol' in self && 'iterator' in Symbol,
4152 'FileReader' in self &&
4162 formData: 'FormData' in self,
4163 arrayBuffer: 'ArrayBuffer' in self
4166 function isDataView(obj) {
4167 return obj && DataView.prototype.isPrototypeOf(obj)
4170 if (support.arrayBuffer) {
4172 '[object Int8Array]',
4173 '[object Uint8Array]',
4174 '[object Uint8ClampedArray]',
4175 '[object Int16Array]',
4176 '[object Uint16Array]',
4177 '[object Int32Array]',
4178 '[object Uint32Array]',
4179 '[object Float32Array]',
4180 '[object Float64Array]'
4183 var isArrayBufferView =
4184 ArrayBuffer.isView ||
4186 return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1
4190 function normalizeName(name) {
4191 if (typeof name !== 'string') {
4192 name = String(name);
4194 if (/[^a-z0-9\-#$%&'*+.^_`|~]/i.test(name)) {
4195 throw new TypeError('Invalid character in header field name')
4197 return name.toLowerCase()
4200 function normalizeValue(value) {
4201 if (typeof value !== 'string') {
4202 value = String(value);
4207 // Build a destructive iterator for the value list
4208 function iteratorFor(items) {
4211 var value = items.shift();
4212 return {done: value === undefined, value: value}
4216 if (support.iterable) {
4217 iterator[Symbol.iterator] = function() {
4225 function Headers(headers) {
4228 if (headers instanceof Headers) {
4229 headers.forEach(function(value, name) {
4230 this.append(name, value);
4232 } else if (Array.isArray(headers)) {
4233 headers.forEach(function(header) {
4234 this.append(header[0], header[1]);
4236 } else if (headers) {
4237 Object.getOwnPropertyNames(headers).forEach(function(name) {
4238 this.append(name, headers[name]);
4243 Headers.prototype.append = function(name, value) {
4244 name = normalizeName(name);
4245 value = normalizeValue(value);
4246 var oldValue = this.map[name];
4247 this.map[name] = oldValue ? oldValue + ', ' + value : value;
4250 Headers.prototype['delete'] = function(name) {
4251 delete this.map[normalizeName(name)];
4254 Headers.prototype.get = function(name) {
4255 name = normalizeName(name);
4256 return this.has(name) ? this.map[name] : null
4259 Headers.prototype.has = function(name) {
4260 return this.map.hasOwnProperty(normalizeName(name))
4263 Headers.prototype.set = function(name, value) {
4264 this.map[normalizeName(name)] = normalizeValue(value);
4267 Headers.prototype.forEach = function(callback, thisArg) {
4268 for (var name in this.map) {
4269 if (this.map.hasOwnProperty(name)) {
4270 callback.call(thisArg, this.map[name], name, this);
4275 Headers.prototype.keys = function() {
4277 this.forEach(function(value, name) {
4280 return iteratorFor(items)
4283 Headers.prototype.values = function() {
4285 this.forEach(function(value) {
4288 return iteratorFor(items)
4291 Headers.prototype.entries = function() {
4293 this.forEach(function(value, name) {
4294 items.push([name, value]);
4296 return iteratorFor(items)
4299 if (support.iterable) {
4300 Headers.prototype[Symbol.iterator] = Headers.prototype.entries;
4303 function consumed(body) {
4304 if (body.bodyUsed) {
4305 return Promise.reject(new TypeError('Already read'))
4307 body.bodyUsed = true;
4310 function fileReaderReady(reader) {
4311 return new Promise(function(resolve, reject) {
4312 reader.onload = function() {
4313 resolve(reader.result);
4315 reader.onerror = function() {
4316 reject(reader.error);
4321 function readBlobAsArrayBuffer(blob) {
4322 var reader = new FileReader();
4323 var promise = fileReaderReady(reader);
4324 reader.readAsArrayBuffer(blob);
4328 function readBlobAsText(blob) {
4329 var reader = new FileReader();
4330 var promise = fileReaderReady(reader);
4331 reader.readAsText(blob);
4335 function readArrayBufferAsText(buf) {
4336 var view = new Uint8Array(buf);
4337 var chars = new Array(view.length);
4339 for (var i = 0; i < view.length; i++) {
4340 chars[i] = String.fromCharCode(view[i]);
4342 return chars.join('')
4345 function bufferClone(buf) {
4349 var view = new Uint8Array(buf.byteLength);
4350 view.set(new Uint8Array(buf));
4356 this.bodyUsed = false;
4358 this._initBody = function(body) {
4359 this._bodyInit = body;
4361 this._bodyText = '';
4362 } else if (typeof body === 'string') {
4363 this._bodyText = body;
4364 } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {
4365 this._bodyBlob = body;
4366 } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {
4367 this._bodyFormData = body;
4368 } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {
4369 this._bodyText = body.toString();
4370 } else if (support.arrayBuffer && support.blob && isDataView(body)) {
4371 this._bodyArrayBuffer = bufferClone(body.buffer);
4372 // IE 10-11 can't handle a DataView body.
4373 this._bodyInit = new Blob([this._bodyArrayBuffer]);
4374 } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {
4375 this._bodyArrayBuffer = bufferClone(body);
4377 this._bodyText = body = Object.prototype.toString.call(body);
4380 if (!this.headers.get('content-type')) {
4381 if (typeof body === 'string') {
4382 this.headers.set('content-type', 'text/plain;charset=UTF-8');
4383 } else if (this._bodyBlob && this._bodyBlob.type) {
4384 this.headers.set('content-type', this._bodyBlob.type);
4385 } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {
4386 this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');
4392 this.blob = function() {
4393 var rejected = consumed(this);
4398 if (this._bodyBlob) {
4399 return Promise.resolve(this._bodyBlob)
4400 } else if (this._bodyArrayBuffer) {
4401 return Promise.resolve(new Blob([this._bodyArrayBuffer]))
4402 } else if (this._bodyFormData) {
4403 throw new Error('could not read FormData body as blob')
4405 return Promise.resolve(new Blob([this._bodyText]))
4409 this.arrayBuffer = function() {
4410 if (this._bodyArrayBuffer) {
4411 return consumed(this) || Promise.resolve(this._bodyArrayBuffer)
4413 return this.blob().then(readBlobAsArrayBuffer)
4418 this.text = function() {
4419 var rejected = consumed(this);
4424 if (this._bodyBlob) {
4425 return readBlobAsText(this._bodyBlob)
4426 } else if (this._bodyArrayBuffer) {
4427 return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))
4428 } else if (this._bodyFormData) {
4429 throw new Error('could not read FormData body as text')
4431 return Promise.resolve(this._bodyText)
4435 if (support.formData) {
4436 this.formData = function() {
4437 return this.text().then(decode)
4441 this.json = function() {
4442 return this.text().then(JSON.parse)
4448 // HTTP methods whose capitalization should be normalized
4449 var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'];
4451 function normalizeMethod(method) {
4452 var upcased = method.toUpperCase();
4453 return methods.indexOf(upcased) > -1 ? upcased : method
4456 function Request(input, options) {
4457 options = options || {};
4458 var body = options.body;
4460 if (input instanceof Request) {
4461 if (input.bodyUsed) {
4462 throw new TypeError('Already read')
4464 this.url = input.url;
4465 this.credentials = input.credentials;
4466 if (!options.headers) {
4467 this.headers = new Headers(input.headers);
4469 this.method = input.method;
4470 this.mode = input.mode;
4471 this.signal = input.signal;
4472 if (!body && input._bodyInit != null) {
4473 body = input._bodyInit;
4474 input.bodyUsed = true;
4477 this.url = String(input);
4480 this.credentials = options.credentials || this.credentials || 'same-origin';
4481 if (options.headers || !this.headers) {
4482 this.headers = new Headers(options.headers);
4484 this.method = normalizeMethod(options.method || this.method || 'GET');
4485 this.mode = options.mode || this.mode || null;
4486 this.signal = options.signal || this.signal;
4487 this.referrer = null;
4489 if ((this.method === 'GET' || this.method === 'HEAD') && body) {
4490 throw new TypeError('Body not allowed for GET or HEAD requests')
4492 this._initBody(body);
4495 Request.prototype.clone = function() {
4496 return new Request(this, {body: this._bodyInit})
4499 function decode(body) {
4500 var form = new FormData();
4504 .forEach(function(bytes) {
4506 var split = bytes.split('=');
4507 var name = split.shift().replace(/\+/g, ' ');
4508 var value = split.join('=').replace(/\+/g, ' ');
4509 form.append(decodeURIComponent(name), decodeURIComponent(value));
4515 function parseHeaders(rawHeaders) {
4516 var headers = new Headers();
4517 // Replace instances of \r\n and \n followed by at least one space or horizontal tab with a space
4518 // https://tools.ietf.org/html/rfc7230#section-3.2
4519 var preProcessedHeaders = rawHeaders.replace(/\r?\n[\t ]+/g, ' ');
4520 preProcessedHeaders.split(/\r?\n/).forEach(function(line) {
4521 var parts = line.split(':');
4522 var key = parts.shift().trim();
4524 var value = parts.join(':').trim();
4525 headers.append(key, value);
4531 Body.call(Request.prototype);
4533 function Response(bodyInit, options) {
4538 this.type = 'default';
4539 this.status = options.status === undefined ? 200 : options.status;
4540 this.ok = this.status >= 200 && this.status < 300;
4541 this.statusText = 'statusText' in options ? options.statusText : 'OK';
4542 this.headers = new Headers(options.headers);
4543 this.url = options.url || '';
4544 this._initBody(bodyInit);
4547 Body.call(Response.prototype);
4549 Response.prototype.clone = function() {
4550 return new Response(this._bodyInit, {
4551 status: this.status,
4552 statusText: this.statusText,
4553 headers: new Headers(this.headers),
4558 Response.error = function() {
4559 var response = new Response(null, {status: 0, statusText: ''});
4560 response.type = 'error';
4564 var redirectStatuses = [301, 302, 303, 307, 308];
4566 Response.redirect = function(url, status) {
4567 if (redirectStatuses.indexOf(status) === -1) {
4568 throw new RangeError('Invalid status code')
4571 return new Response(null, {status: status, headers: {location: url}})
4574 var DOMException$1 = self.DOMException;
4576 new DOMException$1();
4578 DOMException$1 = function(message, name) {
4579 this.message = message;
4581 var error = Error(message);
4582 this.stack = error.stack;
4584 DOMException$1.prototype = Object.create(Error.prototype);
4585 DOMException$1.prototype.constructor = DOMException$1;
4588 function fetch$1(input, init) {
4589 return new Promise(function(resolve, reject) {
4590 var request = new Request(input, init);
4592 if (request.signal && request.signal.aborted) {
4593 return reject(new DOMException$1('Aborted', 'AbortError'))
4596 var xhr = new XMLHttpRequest();
4598 function abortXhr() {
4602 xhr.onload = function() {
4605 statusText: xhr.statusText,
4606 headers: parseHeaders(xhr.getAllResponseHeaders() || '')
4608 options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL');
4609 var body = 'response' in xhr ? xhr.response : xhr.responseText;
4610 resolve(new Response(body, options));
4613 xhr.onerror = function() {
4614 reject(new TypeError('Network request failed'));
4617 xhr.ontimeout = function() {
4618 reject(new TypeError('Network request failed'));
4621 xhr.onabort = function() {
4622 reject(new DOMException$1('Aborted', 'AbortError'));
4625 xhr.open(request.method, request.url, true);
4627 if (request.credentials === 'include') {
4628 xhr.withCredentials = true;
4629 } else if (request.credentials === 'omit') {
4630 xhr.withCredentials = false;
4633 if ('responseType' in xhr && support.blob) {
4634 xhr.responseType = 'blob';
4637 request.headers.forEach(function(value, name) {
4638 xhr.setRequestHeader(name, value);
4641 if (request.signal) {
4642 request.signal.addEventListener('abort', abortXhr);
4644 xhr.onreadystatechange = function() {
4645 // DONE (success or failure)
4646 if (xhr.readyState === 4) {
4647 request.signal.removeEventListener('abort', abortXhr);
4652 xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit);
4656 fetch$1.polyfill = true;
4659 self.fetch = fetch$1;
4660 self.Headers = Headers;
4661 self.Request = Request;
4662 self.Response = Response;
4665 var lib = createCommonjsModule(function (module, exports) {
4666 Object.defineProperty(exports, "__esModule", { value: true });
4678 window.Set = es6Set;
4681 window.Map = es6Map;
4683 if (!window.Promise) {
4684 window.Promise = polyfill$c;
4685 window.Promise._immediateFn = setAsap;
4687 if (!Array.prototype.find) {
4688 array_prototype_find.shim();
4690 if (!Array.prototype.findIndex) {
4691 array_prototype_findindex.shim();
4696 if (!Object.values) {
4697 object_values.shim();
4699 if (!Object.assign) {
4700 object_assign.shim();
4702 if (!window.requestAnimationFrame || !window.cancelAnimationFrame) {
4703 window.requestAnimationFrame = raf_1;
4704 window.cancelAnimationFrame = raf_1.cancel;
4707 var finalFetch = window.fetch;
4708 var finalPromise = window.Promise;
4709 window.fetch = function (input, init) {
4711 return finalFetch(input, init);
4714 return new finalPromise(function (_, reject) { return reject(error); });
4721 (function (factory) {
4724 function _classCallCheck(instance, Constructor) {
4725 if (!(instance instanceof Constructor)) {
4726 throw new TypeError("Cannot call a class as a function");
4730 function _defineProperties(target, props) {
4731 for (var i = 0; i < props.length; i++) {
4732 var descriptor = props[i];
4733 descriptor.enumerable = descriptor.enumerable || false;
4734 descriptor.configurable = true;
4735 if ("value" in descriptor) descriptor.writable = true;
4736 Object.defineProperty(target, descriptor.key, descriptor);
4740 function _createClass(Constructor, protoProps, staticProps) {
4741 if (protoProps) _defineProperties(Constructor.prototype, protoProps);
4742 if (staticProps) _defineProperties(Constructor, staticProps);
4746 function _inherits(subClass, superClass) {
4747 if (typeof superClass !== "function" && superClass !== null) {
4748 throw new TypeError("Super expression must either be null or a function");
4751 subClass.prototype = Object.create(superClass && superClass.prototype, {
4758 if (superClass) _setPrototypeOf(subClass, superClass);
4761 function _getPrototypeOf(o) {
4762 _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
4763 return o.__proto__ || Object.getPrototypeOf(o);
4765 return _getPrototypeOf(o);
4768 function _setPrototypeOf(o, p) {
4769 _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
4774 return _setPrototypeOf(o, p);
4777 function _assertThisInitialized(self) {
4778 if (self === void 0) {
4779 throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
4785 function _possibleConstructorReturn(self, call) {
4786 if (call && (typeof call === "object" || typeof call === "function")) {
4790 return _assertThisInitialized(self);
4793 function _superPropBase(object, property) {
4794 while (!Object.prototype.hasOwnProperty.call(object, property)) {
4795 object = _getPrototypeOf(object);
4796 if (object === null) break;
4802 function _get(target, property, receiver) {
4803 if (typeof Reflect !== "undefined" && Reflect.get) {
4806 _get = function _get(target, property, receiver) {
4807 var base = _superPropBase(target, property);
4810 var desc = Object.getOwnPropertyDescriptor(base, property);
4813 return desc.get.call(receiver);
4820 return _get(target, property, receiver || target);
4826 function Emitter() {
4827 _classCallCheck(this, Emitter);
4829 Object.defineProperty(this, 'listeners', {
4836 _createClass(Emitter, [{
4837 key: "addEventListener",
4838 value: function addEventListener(type, callback) {
4839 if (!(type in this.listeners)) {
4840 this.listeners[type] = [];
4843 this.listeners[type].push(callback);
4846 key: "removeEventListener",
4847 value: function removeEventListener(type, callback) {
4848 if (!(type in this.listeners)) {
4852 var stack = this.listeners[type];
4854 for (var i = 0, l = stack.length; i < l; i++) {
4855 if (stack[i] === callback) {
4862 key: "dispatchEvent",
4863 value: function dispatchEvent(event) {
4866 if (!(event.type in this.listeners)) {
4870 var debounce = function debounce(callback) {
4871 setTimeout(function () {
4872 return callback.call(_this, event);
4876 var stack = this.listeners[event.type];
4878 for (var i = 0, l = stack.length; i < l; i++) {
4882 return !event.defaultPrevented;
4891 function (_Emitter) {
4892 _inherits(AbortSignal, _Emitter);
4894 function AbortSignal() {
4897 _classCallCheck(this, AbortSignal);
4899 _this2 = _possibleConstructorReturn(this, _getPrototypeOf(AbortSignal).call(this)); // Some versions of babel does not transpile super() correctly for IE <= 10, if the parent
4900 // constructor has failed to run, then "this.listeners" will still be undefined and then we call
4901 // the parent constructor directly instead as a workaround. For general details, see babel bug:
4902 // https://github.com/babel/babel/issues/3041
4903 // This hack was added as a fix for the issue described here:
4904 // https://github.com/Financial-Times/polyfill-library/pull/59#issuecomment-477558042
4906 if (!_this2.listeners) {
4907 Emitter.call(_assertThisInitialized(_this2));
4908 } // Compared to assignment, Object.defineProperty makes properties non-enumerable by default and
4909 // we want Object.keys(new AbortController().signal) to be [] for compat with the native impl
4912 Object.defineProperty(_assertThisInitialized(_this2), 'aborted', {
4917 Object.defineProperty(_assertThisInitialized(_this2), 'onabort', {
4925 _createClass(AbortSignal, [{
4927 value: function toString() {
4928 return '[object AbortSignal]';
4931 key: "dispatchEvent",
4932 value: function dispatchEvent(event) {
4933 if (event.type === 'abort') {
4934 this.aborted = true;
4936 if (typeof this.onabort === 'function') {
4937 this.onabort.call(this, event);
4941 _get(_getPrototypeOf(AbortSignal.prototype), "dispatchEvent", this).call(this, event);
4947 var AbortController =
4950 function AbortController() {
4951 _classCallCheck(this, AbortController);
4953 // Compared to assignment, Object.defineProperty makes properties non-enumerable by default and
4954 // we want Object.keys(new AbortController()) to be [] for compat with the native impl
4955 Object.defineProperty(this, 'signal', {
4956 value: new AbortSignal(),
4962 _createClass(AbortController, [{
4964 value: function abort() {
4968 event = new Event('abort');
4970 if (typeof document !== 'undefined') {
4971 if (!document.createEvent) {
4972 // For Internet Explorer 8:
4973 event = document.createEventObject();
4974 event.type = 'abort';
4976 // For Internet Explorer 11:
4977 event = document.createEvent('Event');
4978 event.initEvent('abort', false, false);
4981 // Fallback where document isn't available:
4990 this.signal.dispatchEvent(event);
4994 value: function toString() {
4995 return '[object AbortController]';
4999 return AbortController;
5002 if (typeof Symbol !== 'undefined' && Symbol.toStringTag) {
5003 // These are necessary to make sure that we get correct output for:
5004 // Object.prototype.toString.call(new AbortController())
5005 AbortController.prototype[Symbol.toStringTag] = 'AbortController';
5006 AbortSignal.prototype[Symbol.toStringTag] = 'AbortSignal';
5009 function polyfillNeeded(self) {
5010 if (self.__FORCE_INSTALL_ABORTCONTROLLER_POLYFILL) {
5011 console.log('__FORCE_INSTALL_ABORTCONTROLLER_POLYFILL=true is set, will force install polyfill');
5013 } // Note that the "unfetch" minimal fetch polyfill defines fetch() without
5014 // defining window.Request, and this polyfill need to work on top of unfetch
5015 // so the below feature detection needs the !self.AbortController part.
5016 // The Request.prototype check is also needed because Safari versions 11.1.2
5017 // up to and including 12.1.x has a window.AbortController present but still
5018 // does NOT correctly implement abortable fetch:
5019 // https://bugs.webkit.org/show_bug.cgi?id=174980#c2
5022 return typeof self.Request === 'function' && !self.Request.prototype.hasOwnProperty('signal') || !self.AbortController;
5026 * Note: the "fetch.Request" default value is available for fetch imported from
5027 * the "node-fetch" package and not in browsers. This is OK since browsers
5028 * will be importing umd-polyfill.js from that path "self" is passed the
5029 * decorator so the default value will not be used (because browsers that define
5030 * fetch also has Request). One quirky setup where self.fetch exists but
5031 * self.Request does not is when the "unfetch" minimal fetch polyfill is used
5032 * on top of IE11; for this case the browser will try to use the fetch.Request
5033 * default value which in turn will be undefined but then then "if (Request)"
5034 * will ensure that you get a patched fetch but still no Request (as expected).
5035 * @param {fetch, Request = fetch.Request}
5036 * @returns {fetch: abortableFetch, Request: AbortableRequest}
5039 function abortableFetchDecorator(patchTargets) {
5040 if ('function' === typeof patchTargets) {
5046 var _patchTargets = patchTargets,
5047 fetch = _patchTargets.fetch,
5048 _patchTargets$Request = _patchTargets.Request,
5049 NativeRequest = _patchTargets$Request === void 0 ? fetch.Request : _patchTargets$Request,
5050 NativeAbortController = _patchTargets.AbortController,
5051 _patchTargets$__FORCE = _patchTargets.__FORCE_INSTALL_ABORTCONTROLLER_POLYFILL,
5052 __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL = _patchTargets$__FORCE === void 0 ? false : _patchTargets$__FORCE;
5054 if (!polyfillNeeded({
5056 Request: NativeRequest,
5057 AbortController: NativeAbortController,
5058 __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL: __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL
5066 var Request = NativeRequest; // Note that the "unfetch" minimal fetch polyfill defines fetch() without
5067 // defining window.Request, and this polyfill need to work on top of unfetch
5068 // hence we only patch it if it's available. Also we don't patch it if signal
5069 // is already available on the Request prototype because in this case support
5070 // is present and the patching below can cause a crash since it assigns to
5071 // request.signal which is technically a read-only property. This latter error
5072 // happens when you run the main5.js node-fetch example in the repo
5073 // "abortcontroller-polyfill-examples". The exact error is:
5074 // request.signal = init.signal;
5076 // TypeError: Cannot set property signal of #<Request> which has only a getter
5078 if (Request && !Request.prototype.hasOwnProperty('signal') || __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL) {
5079 Request = function Request(input, init) {
5082 if (init && init.signal) {
5083 signal = init.signal; // Never pass init.signal to the native Request implementation when the polyfill has
5084 // been installed because if we're running on top of a browser with a
5085 // working native AbortController (i.e. the polyfill was installed due to
5086 // __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL being set), then passing our
5087 // fake AbortSignal to the native fetch will trigger:
5088 // TypeError: Failed to construct 'Request': member signal is not of type AbortSignal.
5093 var request = new NativeRequest(input, init);
5096 Object.defineProperty(request, 'signal', {
5107 Request.prototype = NativeRequest.prototype;
5110 var realFetch = fetch;
5112 var abortableFetch = function abortableFetch(input, init) {
5113 var signal = Request && Request.prototype.isPrototypeOf(input) ? input.signal : init ? init.signal : undefined;
5119 abortError = new DOMException('Aborted', 'AbortError');
5121 // IE 11 does not support calling the DOMException constructor, use a
5122 // regular error object on it instead.
5123 abortError = new Error('Aborted');
5124 abortError.name = 'AbortError';
5125 } // Return early if already aborted, thus avoiding making an HTTP request
5128 if (signal.aborted) {
5129 return Promise.reject(abortError);
5130 } // Turn an event into a promise, reject it once `abort` is dispatched
5133 var cancellation = new Promise(function (_, reject) {
5134 signal.addEventListener('abort', function () {
5135 return reject(abortError);
5141 if (init && init.signal) {
5142 // Never pass .signal to the native implementation when the polyfill has
5143 // been installed because if we're running on top of a browser with a
5144 // working native AbortController (i.e. the polyfill was installed due to
5145 // __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL being set), then passing our
5146 // fake AbortSignal to the native fetch will trigger:
5147 // TypeError: Failed to execute 'fetch' on 'Window': member signal is not of type AbortSignal.
5149 } // Return the fastest promise (don't need to wait for request to finish)
5152 return Promise.race([cancellation, realFetch(input, init)]);
5155 return realFetch(input, init);
5159 fetch: abortableFetch,
5166 if (!polyfillNeeded(self)) {
5171 console.warn('fetch() is not available, cannot install abortcontroller-polyfill');
5175 var _abortableFetch = abortableFetchDecorator(self),
5176 fetch = _abortableFetch.fetch,
5177 Request = _abortableFetch.Request;
5180 self.Request = Request;
5181 Object.defineProperty(self, 'AbortController', {
5185 value: AbortController
5187 Object.defineProperty(self, 'AbortSignal', {
5193 })(typeof self !== 'undefined' ? self : commonjsGlobal);
5197 var version = "5.9.2";
5199 function d3_ascending(a, b) {
5200 return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
5203 function d3_bisector(compare) {
5204 if (compare.length === 1) compare = ascendingComparator(compare);
5206 left: function(a, x, lo, hi) {
5207 if (lo == null) lo = 0;
5208 if (hi == null) hi = a.length;
5210 var mid = lo + hi >>> 1;
5211 if (compare(a[mid], x) < 0) lo = mid + 1;
5216 right: function(a, x, lo, hi) {
5217 if (lo == null) lo = 0;
5218 if (hi == null) hi = a.length;
5220 var mid = lo + hi >>> 1;
5221 if (compare(a[mid], x) > 0) hi = mid;
5229 function ascendingComparator(f) {
5230 return function(d, x) {
5231 return d3_ascending(f(d), x);
5235 var ascendingBisect = d3_bisector(d3_ascending);
5236 var bisectRight = ascendingBisect.right;
5237 var bisectLeft = ascendingBisect.left;
5239 function pairs(array, f) {
5240 if (f == null) f = pair;
5241 var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n);
5242 while (i < n) pairs[i] = f(p, p = array[++i]);
5246 function pair(a, b) {
5250 function cross(values0, values1, reduce) {
5251 var n0 = values0.length,
5252 n1 = values1.length,
5253 values = new Array(n0 * n1),
5259 if (reduce == null) reduce = pair;
5261 for (i0 = i = 0; i0 < n0; ++i0) {
5262 for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {
5263 values[i] = reduce(value0, values1[i1]);
5270 function d3_descending(a, b) {
5271 return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
5274 function number(x) {
5275 return x === null ? NaN : +x;
5278 function variance(values, valueof) {
5279 var n = values.length,
5287 if (valueof == null) {
5289 if (!isNaN(value = number(values[i]))) {
5290 delta = value - mean;
5291 mean += delta / ++m;
5292 sum += delta * (value - mean);
5299 if (!isNaN(value = number(valueof(values[i], i, values)))) {
5300 delta = value - mean;
5301 mean += delta / ++m;
5302 sum += delta * (value - mean);
5307 if (m > 1) return sum / (m - 1);
5310 function deviation(array, f) {
5311 var v = variance(array, f);
5312 return v ? Math.sqrt(v) : v;
5315 function extent(values, valueof) {
5316 var n = values.length,
5322 if (valueof == null) {
5323 while (++i < n) { // Find the first comparable value.
5324 if ((value = values[i]) != null && value >= value) {
5326 while (++i < n) { // Compare the remaining values.
5327 if ((value = values[i]) != null) {
5328 if (min > value) min = value;
5329 if (max < value) max = value;
5337 while (++i < n) { // Find the first comparable value.
5338 if ((value = valueof(values[i], i, values)) != null && value >= value) {
5340 while (++i < n) { // Compare the remaining values.
5341 if ((value = valueof(values[i], i, values)) != null) {
5342 if (min > value) min = value;
5343 if (max < value) max = value;
5353 var array$1 = Array.prototype;
5355 var slice$4 = array$1.slice;
5356 var map$2 = array$1.map;
5358 function constant(x) {
5364 function identity(x) {
5368 function d3_range(start, stop, step) {
5369 start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;
5372 n = Math.max(0, Math.ceil((stop - start) / step)) | 0,
5373 range = new Array(n);
5376 range[i] = start + i * step;
5382 var e10 = Math.sqrt(50),
5386 function ticks(start, stop, count) {
5393 stop = +stop, start = +start, count = +count;
5394 if (start === stop && count > 0) return [start];
5395 if (reverse = stop < start) n = start, start = stop, stop = n;
5396 if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];
5399 start = Math.ceil(start / step);
5400 stop = Math.floor(stop / step);
5401 ticks = new Array(n = Math.ceil(stop - start + 1));
5402 while (++i < n) ticks[i] = (start + i) * step;
5404 start = Math.floor(start * step);
5405 stop = Math.ceil(stop * step);
5406 ticks = new Array(n = Math.ceil(start - stop + 1));
5407 while (++i < n) ticks[i] = (start - i) / step;
5410 if (reverse) ticks.reverse();
5415 function tickIncrement(start, stop, count) {
5416 var step = (stop - start) / Math.max(0, count),
5417 power = Math.floor(Math.log(step) / Math.LN10),
5418 error = step / Math.pow(10, power);
5420 ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)
5421 : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);
5424 function tickStep(start, stop, count) {
5425 var step0 = Math.abs(stop - start) / Math.max(0, count),
5426 step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),
5427 error = step0 / step1;
5428 if (error >= e10) step1 *= 10;
5429 else if (error >= e5) step1 *= 5;
5430 else if (error >= e2) step1 *= 2;
5431 return stop < start ? -step1 : step1;
5434 function thresholdSturges(values) {
5435 return Math.ceil(Math.log(values.length) / Math.LN2) + 1;
5438 function histogram() {
5439 var value = identity,
5441 threshold = thresholdSturges;
5443 function histogram(data) {
5447 values = new Array(n);
5449 for (i = 0; i < n; ++i) {
5450 values[i] = value(data[i], i, data);
5453 var xz = domain(values),
5456 tz = threshold(values, x0, x1);
5458 // Convert number of thresholds into uniform thresholds.
5459 if (!Array.isArray(tz)) {
5460 tz = tickStep(x0, x1, tz);
5461 tz = d3_range(Math.ceil(x0 / tz) * tz, x1, tz); // exclusive
5464 // Remove any thresholds outside the domain.
5466 while (tz[0] <= x0) tz.shift(), --m;
5467 while (tz[m - 1] > x1) tz.pop(), --m;
5469 var bins = new Array(m + 1),
5473 for (i = 0; i <= m; ++i) {
5475 bin.x0 = i > 0 ? tz[i - 1] : x0;
5476 bin.x1 = i < m ? tz[i] : x1;
5479 // Assign data to bins by value, ignoring any outside the domain.
5480 for (i = 0; i < n; ++i) {
5482 if (x0 <= x && x <= x1) {
5483 bins[bisectRight(tz, x, 0, m)].push(data[i]);
5490 histogram.value = function(_) {
5491 return arguments.length ? (value = typeof _ === "function" ? _ : constant(_), histogram) : value;
5494 histogram.domain = function(_) {
5495 return arguments.length ? (domain = typeof _ === "function" ? _ : constant([_[0], _[1]]), histogram) : domain;
5498 histogram.thresholds = function(_) {
5499 return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant(slice$4.call(_)) : constant(_), histogram) : threshold;
5505 function threshold(values, p, valueof) {
5506 if (valueof == null) valueof = number;
5507 if (!(n = values.length)) return;
5508 if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);
5509 if (p >= 1) return +valueof(values[n - 1], n - 1, values);
5513 value0 = +valueof(values[i0], i0, values),
5514 value1 = +valueof(values[i0 + 1], i0 + 1, values);
5515 return value0 + (value1 - value0) * (i - i0);
5518 function freedmanDiaconis(values, min, max) {
5519 values = map$2.call(values, number).sort(d3_ascending);
5520 return Math.ceil((max - min) / (2 * (threshold(values, 0.75) - threshold(values, 0.25)) * Math.pow(values.length, -1 / 3)));
5523 function scott(values, min, max) {
5524 return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(values.length, -1 / 3)));
5527 function max$2(values, valueof) {
5528 var n = values.length,
5533 if (valueof == null) {
5534 while (++i < n) { // Find the first comparable value.
5535 if ((value = values[i]) != null && value >= value) {
5537 while (++i < n) { // Compare the remaining values.
5538 if ((value = values[i]) != null && value > max) {
5547 while (++i < n) { // Find the first comparable value.
5548 if ((value = valueof(values[i], i, values)) != null && value >= value) {
5550 while (++i < n) { // Compare the remaining values.
5551 if ((value = valueof(values[i], i, values)) != null && value > max) {
5562 function mean(values, valueof) {
5563 var n = values.length,
5569 if (valueof == null) {
5571 if (!isNaN(value = number(values[i]))) sum += value;
5578 if (!isNaN(value = number(valueof(values[i], i, values)))) sum += value;
5583 if (m) return sum / m;
5586 function d3_median(values, valueof) {
5587 var n = values.length,
5592 if (valueof == null) {
5594 if (!isNaN(value = number(values[i]))) {
5595 numbers.push(value);
5602 if (!isNaN(value = number(valueof(values[i], i, values)))) {
5603 numbers.push(value);
5608 return threshold(numbers.sort(d3_ascending), 0.5);
5611 function merge(arrays) {
5612 var n = arrays.length,
5619 while (++i < n) j += arrays[i].length;
5620 merged = new Array(j);
5626 merged[--j] = array[m];
5633 function min(values, valueof) {
5634 var n = values.length,
5639 if (valueof == null) {
5640 while (++i < n) { // Find the first comparable value.
5641 if ((value = values[i]) != null && value >= value) {
5643 while (++i < n) { // Compare the remaining values.
5644 if ((value = values[i]) != null && min > value) {
5653 while (++i < n) { // Find the first comparable value.
5654 if ((value = valueof(values[i], i, values)) != null && value >= value) {
5656 while (++i < n) { // Compare the remaining values.
5657 if ((value = valueof(values[i], i, values)) != null && min > value) {
5668 function permute(array, indexes) {
5669 var i = indexes.length, permutes = new Array(i);
5670 while (i--) permutes[i] = array[indexes[i]];
5674 function scan(values, compare) {
5675 if (!(n = values.length)) return;
5682 if (compare == null) compare = d3_ascending;
5685 if (compare(xi = values[i], xj) < 0 || compare(xj, xj) !== 0) {
5690 if (compare(xj, xj) === 0) return j;
5693 function shuffle(array, i0, i1) {
5694 var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0),
5699 i = Math.random() * m-- | 0;
5701 array[m + i0] = array[i + i0];
5708 function sum(values, valueof) {
5709 var n = values.length,
5714 if (valueof == null) {
5716 if (value = +values[i]) sum += value; // Note: zero and null are equivalent.
5722 if (value = +valueof(values[i], i, values)) sum += value;
5729 function transpose(matrix) {
5730 if (!(n = matrix.length)) return [];
5731 for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) {
5732 for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {
5733 row[j] = matrix[j][i];
5739 function length(d) {
5744 return transpose(arguments);
5747 var slice$5 = Array.prototype.slice;
5749 function identity$1(x) {
5759 function translateX(x) {
5760 return "translate(" + (x + 0.5) + ",0)";
5763 function translateY(y) {
5764 return "translate(0," + (y + 0.5) + ")";
5767 function number$1(scale) {
5768 return function(d) {
5773 function center(scale) {
5774 var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset.
5775 if (scale.round()) offset = Math.round(offset);
5776 return function(d) {
5777 return +scale(d) + offset;
5781 function entering() {
5782 return !this.__axis;
5785 function axis(orient, scale) {
5786 var tickArguments = [],
5792 k = orient === top || orient === left ? -1 : 1,
5793 x = orient === left || orient === right ? "x" : "y",
5794 transform = orient === top || orient === bottom ? translateX : translateY;
5796 function axis(context) {
5797 var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,
5798 format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity$1) : tickFormat,
5799 spacing = Math.max(tickSizeInner, 0) + tickPadding,
5800 range = scale.range(),
5801 range0 = +range[0] + 0.5,
5802 range1 = +range[range.length - 1] + 0.5,
5803 position = (scale.bandwidth ? center : number$1)(scale.copy()),
5804 selection = context.selection ? context.selection() : context,
5805 path = selection.selectAll(".domain").data([null]),
5806 tick = selection.selectAll(".tick").data(values, scale).order(),
5807 tickExit = tick.exit(),
5808 tickEnter = tick.enter().append("g").attr("class", "tick"),
5809 line = tick.select("line"),
5810 text = tick.select("text");
5812 path = path.merge(path.enter().insert("path", ".tick")
5813 .attr("class", "domain")
5814 .attr("stroke", "currentColor"));
5816 tick = tick.merge(tickEnter);
5818 line = line.merge(tickEnter.append("line")
5819 .attr("stroke", "currentColor")
5820 .attr(x + "2", k * tickSizeInner));
5822 text = text.merge(tickEnter.append("text")
5823 .attr("fill", "currentColor")
5824 .attr(x, k * spacing)
5825 .attr("dy", orient === top ? "0em" : orient === bottom ? "0.71em" : "0.32em"));
5827 if (context !== selection) {
5828 path = path.transition(context);
5829 tick = tick.transition(context);
5830 line = line.transition(context);
5831 text = text.transition(context);
5833 tickExit = tickExit.transition(context)
5834 .attr("opacity", epsilon)
5835 .attr("transform", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute("transform"); });
5838 .attr("opacity", epsilon)
5839 .attr("transform", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); });
5845 .attr("d", orient === left || orient == right
5846 ? (tickSizeOuter ? "M" + k * tickSizeOuter + "," + range0 + "H0.5V" + range1 + "H" + k * tickSizeOuter : "M0.5," + range0 + "V" + range1)
5847 : (tickSizeOuter ? "M" + range0 + "," + k * tickSizeOuter + "V0.5H" + range1 + "V" + k * tickSizeOuter : "M" + range0 + ",0.5H" + range1));
5851 .attr("transform", function(d) { return transform(position(d)); });
5854 .attr(x + "2", k * tickSizeInner);
5857 .attr(x, k * spacing)
5860 selection.filter(entering)
5861 .attr("fill", "none")
5862 .attr("font-size", 10)
5863 .attr("font-family", "sans-serif")
5864 .attr("text-anchor", orient === right ? "start" : orient === left ? "end" : "middle");
5867 .each(function() { this.__axis = position; });
5870 axis.scale = function(_) {
5871 return arguments.length ? (scale = _, axis) : scale;
5874 axis.ticks = function() {
5875 return tickArguments = slice$5.call(arguments), axis;
5878 axis.tickArguments = function(_) {
5879 return arguments.length ? (tickArguments = _ == null ? [] : slice$5.call(_), axis) : tickArguments.slice();
5882 axis.tickValues = function(_) {
5883 return arguments.length ? (tickValues = _ == null ? null : slice$5.call(_), axis) : tickValues && tickValues.slice();
5886 axis.tickFormat = function(_) {
5887 return arguments.length ? (tickFormat = _, axis) : tickFormat;
5890 axis.tickSize = function(_) {
5891 return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;
5894 axis.tickSizeInner = function(_) {
5895 return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;
5898 axis.tickSizeOuter = function(_) {
5899 return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;
5902 axis.tickPadding = function(_) {
5903 return arguments.length ? (tickPadding = +_, axis) : tickPadding;
5909 function axisTop(scale) {
5910 return axis(top, scale);
5913 function axisRight(scale) {
5914 return axis(right, scale);
5917 function axisBottom(scale) {
5918 return axis(bottom, scale);
5921 function axisLeft(scale) {
5922 return axis(left, scale);
5925 var noop$2 = {value: function() {}};
5927 function dispatch() {
5928 for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {
5929 if (!(t = arguments[i] + "") || (t in _)) throw new Error("illegal type: " + t);
5932 return new Dispatch(_);
5935 function Dispatch(_) {
5939 function parseTypenames(typenames, types) {
5940 return typenames.trim().split(/^|\s+/).map(function(t) {
5941 var name = "", i = t.indexOf(".");
5942 if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);
5943 if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t);
5944 return {type: t, name: name};
5948 Dispatch.prototype = dispatch.prototype = {
5949 constructor: Dispatch,
5950 on: function(typename, callback) {
5952 T = parseTypenames(typename + "", _),
5957 // If no callback was specified, return the callback of the given type and name.
5958 if (arguments.length < 2) {
5959 while (++i < n) if ((t = (typename = T[i]).type) && (t = get$1(_[t], typename.name))) return t;
5963 // If a type was specified, set the callback for the given type and name.
5964 // Otherwise, if a null callback was specified, remove callbacks of the given name.
5965 if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback);
5967 if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);
5968 else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);
5974 var copy = {}, _ = this._;
5975 for (var t in _) copy[t] = _[t].slice();
5976 return new Dispatch(copy);
5978 call: function(type, that) {
5979 if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];
5980 if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);
5981 for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);
5983 apply: function(type, that, args) {
5984 if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);
5985 for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);
5989 function get$1(type, name) {
5990 for (var i = 0, n = type.length, c; i < n; ++i) {
5991 if ((c = type[i]).name === name) {
5997 function set(type, name, callback) {
5998 for (var i = 0, n = type.length; i < n; ++i) {
5999 if (type[i].name === name) {
6000 type[i] = noop$2, type = type.slice(0, i).concat(type.slice(i + 1));
6004 if (callback != null) type.push({name: name, value: callback});
6008 var xhtml = "http://www.w3.org/1999/xhtml";
6011 svg: "http://www.w3.org/2000/svg",
6013 xlink: "http://www.w3.org/1999/xlink",
6014 xml: "http://www.w3.org/XML/1998/namespace",
6015 xmlns: "http://www.w3.org/2000/xmlns/"
6018 function namespace(name) {
6019 var prefix = name += "", i = prefix.indexOf(":");
6020 if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") name = name.slice(i + 1);
6021 return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;
6024 function creatorInherit(name) {
6026 var document = this.ownerDocument,
6027 uri = this.namespaceURI;
6028 return uri === xhtml && document.documentElement.namespaceURI === xhtml
6029 ? document.createElement(name)
6030 : document.createElementNS(uri, name);
6034 function creatorFixed(fullname) {
6036 return this.ownerDocument.createElementNS(fullname.space, fullname.local);
6040 function creator(name) {
6041 var fullname = namespace(name);
6042 return (fullname.local
6044 : creatorInherit)(fullname);
6049 function selector(selector) {
6050 return selector == null ? none : function() {
6051 return this.querySelector(selector);
6055 function selection_select(select) {
6056 if (typeof select !== "function") select = selector(select);
6058 for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
6059 for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {
6060 if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {
6061 if ("__data__" in node) subnode.__data__ = node.__data__;
6062 subgroup[i] = subnode;
6067 return new Selection(subgroups, this._parents);
6074 function selectorAll(selector) {
6075 return selector == null ? empty : function() {
6076 return this.querySelectorAll(selector);
6080 function selection_selectAll(select) {
6081 if (typeof select !== "function") select = selectorAll(select);
6083 for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {
6084 for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
6085 if (node = group[i]) {
6086 subgroups.push(select.call(node, node.__data__, i, group));
6092 return new Selection(subgroups, parents);
6095 function matcher(selector) {
6097 return this.matches(selector);
6101 function selection_filter(match) {
6102 if (typeof match !== "function") match = matcher(match);
6104 for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
6105 for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {
6106 if ((node = group[i]) && match.call(node, node.__data__, i, group)) {
6107 subgroup.push(node);
6112 return new Selection(subgroups, this._parents);
6115 function sparse(update) {
6116 return new Array(update.length);
6119 function selection_enter() {
6120 return new Selection(this._enter || this._groups.map(sparse), this._parents);
6123 function EnterNode(parent, datum) {
6124 this.ownerDocument = parent.ownerDocument;
6125 this.namespaceURI = parent.namespaceURI;
6127 this._parent = parent;
6128 this.__data__ = datum;
6131 EnterNode.prototype = {
6132 constructor: EnterNode,
6133 appendChild: function(child) { return this._parent.insertBefore(child, this._next); },
6134 insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },
6135 querySelector: function(selector) { return this._parent.querySelector(selector); },
6136 querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }
6139 function constant$1(x) {
6145 var keyPrefix = "$"; // Protect against keys like “__proto__”.
6147 function bindIndex(parent, group, enter, update, exit, data) {
6150 groupLength = group.length,
6151 dataLength = data.length;
6153 // Put any non-null nodes that fit into update.
6154 // Put any null nodes into enter.
6155 // Put any remaining data into enter.
6156 for (; i < dataLength; ++i) {
6157 if (node = group[i]) {
6158 node.__data__ = data[i];
6161 enter[i] = new EnterNode(parent, data[i]);
6165 // Put any non-null nodes that don’t fit into exit.
6166 for (; i < groupLength; ++i) {
6167 if (node = group[i]) {
6173 function bindKey(parent, group, enter, update, exit, data, key) {
6176 nodeByKeyValue = {},
6177 groupLength = group.length,
6178 dataLength = data.length,
6179 keyValues = new Array(groupLength),
6182 // Compute the key for each node.
6183 // If multiple nodes have the same key, the duplicates are added to exit.
6184 for (i = 0; i < groupLength; ++i) {
6185 if (node = group[i]) {
6186 keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);
6187 if (keyValue in nodeByKeyValue) {
6190 nodeByKeyValue[keyValue] = node;
6195 // Compute the key for each datum.
6196 // If there a node associated with this key, join and add it to update.
6197 // If there is not (or the key is a duplicate), add it to enter.
6198 for (i = 0; i < dataLength; ++i) {
6199 keyValue = keyPrefix + key.call(parent, data[i], i, data);
6200 if (node = nodeByKeyValue[keyValue]) {
6202 node.__data__ = data[i];
6203 nodeByKeyValue[keyValue] = null;
6205 enter[i] = new EnterNode(parent, data[i]);
6209 // Add any remaining nodes that were not bound to data to exit.
6210 for (i = 0; i < groupLength; ++i) {
6211 if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {
6217 function selection_data(value, key) {
6219 data = new Array(this.size()), j = -1;
6220 this.each(function(d) { data[++j] = d; });
6224 var bind = key ? bindKey : bindIndex,
6225 parents = this._parents,
6226 groups = this._groups;
6228 if (typeof value !== "function") value = constant$1(value);
6230 for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {
6231 var parent = parents[j],
6233 groupLength = group.length,
6234 data = value.call(parent, parent && parent.__data__, j, parents),
6235 dataLength = data.length,
6236 enterGroup = enter[j] = new Array(dataLength),
6237 updateGroup = update[j] = new Array(dataLength),
6238 exitGroup = exit[j] = new Array(groupLength);
6240 bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);
6242 // Now connect the enter nodes to their following update node, such that
6243 // appendChild can insert the materialized enter node before this node,
6244 // rather than at the end of the parent node.
6245 for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {
6246 if (previous = enterGroup[i0]) {
6247 if (i0 >= i1) i1 = i0 + 1;
6248 while (!(next = updateGroup[i1]) && ++i1 < dataLength);
6249 previous._next = next || null;
6254 update = new Selection(update, parents);
6255 update._enter = enter;
6256 update._exit = exit;
6260 function selection_exit() {
6261 return new Selection(this._exit || this._groups.map(sparse), this._parents);
6264 function selection_join(onenter, onupdate, onexit) {
6265 var enter = this.enter(), update = this, exit = this.exit();
6266 enter = typeof onenter === "function" ? onenter(enter) : enter.append(onenter + "");
6267 if (onupdate != null) update = onupdate(update);
6268 if (onexit == null) exit.remove(); else onexit(exit);
6269 return enter && update ? enter.merge(update).order() : update;
6272 function selection_merge(selection) {
6274 for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {
6275 for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {
6276 if (node = group0[i] || group1[i]) {
6282 for (; j < m0; ++j) {
6283 merges[j] = groups0[j];
6286 return new Selection(merges, this._parents);
6289 function selection_order() {
6291 for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {
6292 for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {
6293 if (node = group[i]) {
6294 if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);
6303 function selection_sort(compare) {
6304 if (!compare) compare = ascending;
6306 function compareNode(a, b) {
6307 return a && b ? compare(a.__data__, b.__data__) : !a - !b;
6310 for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {
6311 for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {
6312 if (node = group[i]) {
6313 sortgroup[i] = node;
6316 sortgroup.sort(compareNode);
6319 return new Selection(sortgroups, this._parents).order();
6322 function ascending(a, b) {
6323 return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
6326 function selection_call() {
6327 var callback = arguments[0];
6328 arguments[0] = this;
6329 callback.apply(null, arguments);
6333 function selection_nodes() {
6334 var nodes = new Array(this.size()), i = -1;
6335 this.each(function() { nodes[++i] = this; });
6339 function selection_node() {
6341 for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {
6342 for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {
6343 var node = group[i];
6344 if (node) return node;
6351 function selection_size() {
6353 this.each(function() { ++size; });
6357 function selection_empty() {
6358 return !this.node();
6361 function selection_each(callback) {
6363 for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {
6364 for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {
6365 if (node = group[i]) callback.call(node, node.__data__, i, group);
6372 function attrRemove(name) {
6374 this.removeAttribute(name);
6378 function attrRemoveNS(fullname) {
6380 this.removeAttributeNS(fullname.space, fullname.local);
6384 function attrConstant(name, value) {
6386 this.setAttribute(name, value);
6390 function attrConstantNS(fullname, value) {
6392 this.setAttributeNS(fullname.space, fullname.local, value);
6396 function attrFunction(name, value) {
6398 var v = value.apply(this, arguments);
6399 if (v == null) this.removeAttribute(name);
6400 else this.setAttribute(name, v);
6404 function attrFunctionNS(fullname, value) {
6406 var v = value.apply(this, arguments);
6407 if (v == null) this.removeAttributeNS(fullname.space, fullname.local);
6408 else this.setAttributeNS(fullname.space, fullname.local, v);
6412 function selection_attr(name, value) {
6413 var fullname = namespace(name);
6415 if (arguments.length < 2) {
6416 var node = this.node();
6417 return fullname.local
6418 ? node.getAttributeNS(fullname.space, fullname.local)
6419 : node.getAttribute(fullname);
6422 return this.each((value == null
6423 ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === "function"
6424 ? (fullname.local ? attrFunctionNS : attrFunction)
6425 : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));
6428 function defaultView(node) {
6429 return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node
6430 || (node.document && node) // node is a Window
6431 || node.defaultView; // node is a Document
6434 function styleRemove(name) {
6436 this.style.removeProperty(name);
6440 function styleConstant(name, value, priority) {
6442 this.style.setProperty(name, value, priority);
6446 function styleFunction(name, value, priority) {
6448 var v = value.apply(this, arguments);
6449 if (v == null) this.style.removeProperty(name);
6450 else this.style.setProperty(name, v, priority);
6454 function selection_style(name, value, priority) {
6455 return arguments.length > 1
6456 ? this.each((value == null
6457 ? styleRemove : typeof value === "function"
6459 : styleConstant)(name, value, priority == null ? "" : priority))
6460 : styleValue(this.node(), name);
6463 function styleValue(node, name) {
6464 return node.style.getPropertyValue(name)
6465 || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);
6468 function propertyRemove(name) {
6474 function propertyConstant(name, value) {
6480 function propertyFunction(name, value) {
6482 var v = value.apply(this, arguments);
6483 if (v == null) delete this[name];
6484 else this[name] = v;
6488 function selection_property(name, value) {
6489 return arguments.length > 1
6490 ? this.each((value == null
6491 ? propertyRemove : typeof value === "function"
6493 : propertyConstant)(name, value))
6494 : this.node()[name];
6497 function classArray(string) {
6498 return string.trim().split(/^|\s+/);
6501 function classList(node) {
6502 return node.classList || new ClassList(node);
6505 function ClassList(node) {
6507 this._names = classArray(node.getAttribute("class") || "");
6510 ClassList.prototype = {
6511 add: function(name) {
6512 var i = this._names.indexOf(name);
6514 this._names.push(name);
6515 this._node.setAttribute("class", this._names.join(" "));
6518 remove: function(name) {
6519 var i = this._names.indexOf(name);
6521 this._names.splice(i, 1);
6522 this._node.setAttribute("class", this._names.join(" "));
6525 contains: function(name) {
6526 return this._names.indexOf(name) >= 0;
6530 function classedAdd(node, names) {
6531 var list = classList(node), i = -1, n = names.length;
6532 while (++i < n) list.add(names[i]);
6535 function classedRemove(node, names) {
6536 var list = classList(node), i = -1, n = names.length;
6537 while (++i < n) list.remove(names[i]);
6540 function classedTrue(names) {
6542 classedAdd(this, names);
6546 function classedFalse(names) {
6548 classedRemove(this, names);
6552 function classedFunction(names, value) {
6554 (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);
6558 function selection_classed(name, value) {
6559 var names = classArray(name + "");
6561 if (arguments.length < 2) {
6562 var list = classList(this.node()), i = -1, n = names.length;
6563 while (++i < n) if (!list.contains(names[i])) return false;
6567 return this.each((typeof value === "function"
6568 ? classedFunction : value
6570 : classedFalse)(names, value));
6573 function textRemove() {
6574 this.textContent = "";
6577 function textConstant(value) {
6579 this.textContent = value;
6583 function textFunction(value) {
6585 var v = value.apply(this, arguments);
6586 this.textContent = v == null ? "" : v;
6590 function selection_text(value) {
6591 return arguments.length
6592 ? this.each(value == null
6593 ? textRemove : (typeof value === "function"
6595 : textConstant)(value))
6596 : this.node().textContent;
6599 function htmlRemove() {
6600 this.innerHTML = "";
6603 function htmlConstant(value) {
6605 this.innerHTML = value;
6609 function htmlFunction(value) {
6611 var v = value.apply(this, arguments);
6612 this.innerHTML = v == null ? "" : v;
6616 function selection_html(value) {
6617 return arguments.length
6618 ? this.each(value == null
6619 ? htmlRemove : (typeof value === "function"
6621 : htmlConstant)(value))
6622 : this.node().innerHTML;
6626 if (this.nextSibling) this.parentNode.appendChild(this);
6629 function selection_raise() {
6630 return this.each(raise);
6634 if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);
6637 function selection_lower() {
6638 return this.each(lower);
6641 function selection_append(name) {
6642 var create = typeof name === "function" ? name : creator(name);
6643 return this.select(function() {
6644 return this.appendChild(create.apply(this, arguments));
6648 function constantNull() {
6652 function selection_insert(name, before) {
6653 var create = typeof name === "function" ? name : creator(name),
6654 select = before == null ? constantNull : typeof before === "function" ? before : selector(before);
6655 return this.select(function() {
6656 return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);
6661 var parent = this.parentNode;
6662 if (parent) parent.removeChild(this);
6665 function selection_remove() {
6666 return this.each(remove);
6669 function selection_cloneShallow() {
6670 return this.parentNode.insertBefore(this.cloneNode(false), this.nextSibling);
6673 function selection_cloneDeep() {
6674 return this.parentNode.insertBefore(this.cloneNode(true), this.nextSibling);
6677 function selection_clone(deep) {
6678 return this.select(deep ? selection_cloneDeep : selection_cloneShallow);
6681 function selection_datum(value) {
6682 return arguments.length
6683 ? this.property("__data__", value)
6684 : this.node().__data__;
6687 var filterEvents = {};
6691 if (typeof document !== "undefined") {
6692 var element = document.documentElement;
6693 if (!("onmouseenter" in element)) {
6694 filterEvents = {mouseenter: "mouseover", mouseleave: "mouseout"};
6698 function filterContextListener(listener, index, group) {
6699 listener = contextListener(listener, index, group);
6700 return function(event) {
6701 var related = event.relatedTarget;
6702 if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {
6703 listener.call(this, event);
6708 function contextListener(listener, index, group) {
6709 return function(event1) {
6710 var event0 = event; // Events can be reentrant (e.g., focus).
6713 listener.call(this, this.__data__, index, group);
6720 function parseTypenames$1(typenames) {
6721 return typenames.trim().split(/^|\s+/).map(function(t) {
6722 var name = "", i = t.indexOf(".");
6723 if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);
6724 return {type: t, name: name};
6728 function onRemove(typename) {
6732 for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {
6733 if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {
6734 this.removeEventListener(o.type, o.listener, o.capture);
6739 if (++i) on.length = i;
6740 else delete this.__on;
6744 function onAdd(typename, value, capture) {
6745 var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;
6746 return function(d, i, group) {
6747 var on = this.__on, o, listener = wrap(value, i, group);
6748 if (on) for (var j = 0, m = on.length; j < m; ++j) {
6749 if ((o = on[j]).type === typename.type && o.name === typename.name) {
6750 this.removeEventListener(o.type, o.listener, o.capture);
6751 this.addEventListener(o.type, o.listener = listener, o.capture = capture);
6756 this.addEventListener(typename.type, listener, capture);
6757 o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};
6758 if (!on) this.__on = [o];
6763 function selection_on(typename, value, capture) {
6764 var typenames = parseTypenames$1(typename + ""), i, n = typenames.length, t;
6766 if (arguments.length < 2) {
6767 var on = this.node().__on;
6768 if (on) for (var j = 0, m = on.length, o; j < m; ++j) {
6769 for (i = 0, o = on[j]; i < n; ++i) {
6770 if ((t = typenames[i]).type === o.type && t.name === o.name) {
6778 on = value ? onAdd : onRemove;
6779 if (capture == null) capture = false;
6780 for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));
6784 function customEvent(event1, listener, that, args) {
6786 event1.sourceEvent = event;
6789 return listener.apply(that, args);
6795 function dispatchEvent(node, type, params) {
6796 var window = defaultView(node),
6797 event = window.CustomEvent;
6799 if (typeof event === "function") {
6800 event = new event(type, params);
6802 event = window.document.createEvent("Event");
6803 if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;
6804 else event.initEvent(type, false, false);
6807 node.dispatchEvent(event);
6810 function dispatchConstant(type, params) {
6812 return dispatchEvent(this, type, params);
6816 function dispatchFunction(type, params) {
6818 return dispatchEvent(this, type, params.apply(this, arguments));
6822 function selection_dispatch(type, params) {
6823 return this.each((typeof params === "function"
6825 : dispatchConstant)(type, params));
6828 var root$1 = [null];
6830 function Selection(groups, parents) {
6831 this._groups = groups;
6832 this._parents = parents;
6835 function selection() {
6836 return new Selection([[document.documentElement]], root$1);
6839 Selection.prototype = selection.prototype = {
6840 constructor: Selection,
6841 select: selection_select,
6842 selectAll: selection_selectAll,
6843 filter: selection_filter,
6844 data: selection_data,
6845 enter: selection_enter,
6846 exit: selection_exit,
6847 join: selection_join,
6848 merge: selection_merge,
6849 order: selection_order,
6850 sort: selection_sort,
6851 call: selection_call,
6852 nodes: selection_nodes,
6853 node: selection_node,
6854 size: selection_size,
6855 empty: selection_empty,
6856 each: selection_each,
6857 attr: selection_attr,
6858 style: selection_style,
6859 property: selection_property,
6860 classed: selection_classed,
6861 text: selection_text,
6862 html: selection_html,
6863 raise: selection_raise,
6864 lower: selection_lower,
6865 append: selection_append,
6866 insert: selection_insert,
6867 remove: selection_remove,
6868 clone: selection_clone,
6869 datum: selection_datum,
6871 dispatch: selection_dispatch
6874 function d3_select(selector) {
6875 return typeof selector === "string"
6876 ? new Selection([[document.querySelector(selector)]], [document.documentElement])
6877 : new Selection([[selector]], root$1);
6880 function create$5(name) {
6881 return d3_select(creator(name).call(document.documentElement));
6891 this._ = "@" + (++nextId).toString(36);
6894 Local.prototype = local.prototype = {
6896 get: function(node) {
6898 while (!(id in node)) if (!(node = node.parentNode)) return;
6901 set: function(node, value) {
6902 return node[this._] = value;
6904 remove: function(node) {
6905 return this._ in node && delete node[this._];
6907 toString: function() {
6912 function sourceEvent() {
6913 var current = event, source;
6914 while (source = current.sourceEvent) current = source;
6918 function point(node, event) {
6919 var svg = node.ownerSVGElement || node;
6921 if (svg.createSVGPoint) {
6922 var point = svg.createSVGPoint();
6923 point.x = event.clientX, point.y = event.clientY;
6924 point = point.matrixTransform(node.getScreenCTM().inverse());
6925 return [point.x, point.y];
6928 var rect = node.getBoundingClientRect();
6929 return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];
6932 function d3_mouse(node) {
6933 var event = sourceEvent();
6934 if (event.changedTouches) event = event.changedTouches[0];
6935 return point(node, event);
6938 function d3_selectAll(selector) {
6939 return typeof selector === "string"
6940 ? new Selection([document.querySelectorAll(selector)], [document.documentElement])
6941 : new Selection([selector == null ? [] : selector], root$1);
6944 function touch(node, touches, identifier) {
6945 if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;
6947 for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {
6948 if ((touch = touches[i]).identifier === identifier) {
6949 return point(node, touch);
6956 function d3_touches(node, touches) {
6957 if (touches == null) touches = sourceEvent().touches;
6959 for (var i = 0, n = touches ? touches.length : 0, points = new Array(n); i < n; ++i) {
6960 points[i] = point(node, touches[i]);
6966 function nopropagation() {
6967 event.stopImmediatePropagation();
6970 function noevent() {
6971 event.preventDefault();
6972 event.stopImmediatePropagation();
6975 function dragDisable(view) {
6976 var root = view.document.documentElement,
6977 selection = d3_select(view).on("dragstart.drag", noevent, true);
6978 if ("onselectstart" in root) {
6979 selection.on("selectstart.drag", noevent, true);
6981 root.__noselect = root.style.MozUserSelect;
6982 root.style.MozUserSelect = "none";
6986 function yesdrag(view, noclick) {
6987 var root = view.document.documentElement,
6988 selection = d3_select(view).on("dragstart.drag", null);
6990 selection.on("click.drag", noevent, true);
6991 setTimeout(function() { selection.on("click.drag", null); }, 0);
6993 if ("onselectstart" in root) {
6994 selection.on("selectstart.drag", null);
6996 root.style.MozUserSelect = root.__noselect;
6997 delete root.__noselect;
7001 function constant$2(x) {
7007 function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {
7008 this.target = target;
7010 this.subject = subject;
7011 this.identifier = id;
7012 this.active = active;
7020 DragEvent.prototype.on = function() {
7021 var value = this._.on.apply(this._, arguments);
7022 return value === this._ ? this : value;
7025 // Ignore right-click, since that should open the context menu.
7026 function defaultFilter() {
7027 return !event.button;
7030 function defaultContainer() {
7031 return this.parentNode;
7034 function defaultSubject(d) {
7035 return d == null ? {x: event.x, y: event.y} : d;
7038 function defaultTouchable() {
7039 return "ontouchstart" in this;
7042 function d3_drag() {
7043 var filter = defaultFilter,
7044 container = defaultContainer,
7045 subject = defaultSubject,
7046 touchable = defaultTouchable,
7048 listeners = dispatch("start", "drag", "end"),
7056 function drag(selection) {
7058 .on("mousedown.drag", mousedowned)
7060 .on("touchstart.drag", touchstarted)
7061 .on("touchmove.drag", touchmoved)
7062 .on("touchend.drag touchcancel.drag", touchended)
7063 .style("touch-action", "none")
7064 .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)");
7067 function mousedowned() {
7068 if (touchending || !filter.apply(this, arguments)) return;
7069 var gesture = beforestart("mouse", container.apply(this, arguments), d3_mouse, this, arguments);
7070 if (!gesture) return;
7071 d3_select(event.view).on("mousemove.drag", mousemoved, true).on("mouseup.drag", mouseupped, true);
7072 dragDisable(event.view);
7074 mousemoving = false;
7075 mousedownx = event.clientX;
7076 mousedowny = event.clientY;
7080 function mousemoved() {
7083 var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;
7084 mousemoving = dx * dx + dy * dy > clickDistance2;
7086 gestures.mouse("drag");
7089 function mouseupped() {
7090 d3_select(event.view).on("mousemove.drag mouseup.drag", null);
7091 yesdrag(event.view, mousemoving);
7093 gestures.mouse("end");
7096 function touchstarted() {
7097 if (!filter.apply(this, arguments)) return;
7098 var touches = event.changedTouches,
7099 c = container.apply(this, arguments),
7100 n = touches.length, i, gesture;
7102 for (i = 0; i < n; ++i) {
7103 if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments)) {
7110 function touchmoved() {
7111 var touches = event.changedTouches,
7112 n = touches.length, i, gesture;
7114 for (i = 0; i < n; ++i) {
7115 if (gesture = gestures[touches[i].identifier]) {
7122 function touchended() {
7123 var touches = event.changedTouches,
7124 n = touches.length, i, gesture;
7126 if (touchending) clearTimeout(touchending);
7127 touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!
7128 for (i = 0; i < n; ++i) {
7129 if (gesture = gestures[touches[i].identifier]) {
7136 function beforestart(id, container, point, that, args) {
7137 var p = point(container, id), s, dx, dy,
7138 sublisteners = listeners.copy();
7140 if (!customEvent(new DragEvent(drag, "beforestart", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {
7141 if ((event.subject = s = subject.apply(that, args)) == null) return false;
7142 dx = s.x - p[0] || 0;
7143 dy = s.y - p[1] || 0;
7147 return function gesture(type) {
7150 case "start": gestures[id] = gesture, n = active++; break;
7151 case "end": delete gestures[id], --active; // nobreak
7152 case "drag": p = point(container, id), n = active; break;
7154 customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);
7158 drag.filter = function(_) {
7159 return arguments.length ? (filter = typeof _ === "function" ? _ : constant$2(!!_), drag) : filter;
7162 drag.container = function(_) {
7163 return arguments.length ? (container = typeof _ === "function" ? _ : constant$2(_), drag) : container;
7166 drag.subject = function(_) {
7167 return arguments.length ? (subject = typeof _ === "function" ? _ : constant$2(_), drag) : subject;
7170 drag.touchable = function(_) {
7171 return arguments.length ? (touchable = typeof _ === "function" ? _ : constant$2(!!_), drag) : touchable;
7174 drag.on = function() {
7175 var value = listeners.on.apply(listeners, arguments);
7176 return value === listeners ? drag : value;
7179 drag.clickDistance = function(_) {
7180 return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);
7186 function define$1(constructor, factory, prototype) {
7187 constructor.prototype = factory.prototype = prototype;
7188 prototype.constructor = constructor;
7191 function extend(parent, definition) {
7192 var prototype = Object.create(parent.prototype);
7193 for (var key in definition) prototype[key] = definition[key];
7200 var brighter = 1 / darker;
7202 var reI = "\\s*([+-]?\\d+)\\s*",
7203 reN = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",
7204 reP = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",
7205 reHex3 = /^#([0-9a-f]{3})$/,
7206 reHex6 = /^#([0-9a-f]{6})$/,
7207 reRgbInteger = new RegExp("^rgb\\(" + [reI, reI, reI] + "\\)$"),
7208 reRgbPercent = new RegExp("^rgb\\(" + [reP, reP, reP] + "\\)$"),
7209 reRgbaInteger = new RegExp("^rgba\\(" + [reI, reI, reI, reN] + "\\)$"),
7210 reRgbaPercent = new RegExp("^rgba\\(" + [reP, reP, reP, reN] + "\\)$"),
7211 reHslPercent = new RegExp("^hsl\\(" + [reN, reP, reP] + "\\)$"),
7212 reHslaPercent = new RegExp("^hsla\\(" + [reN, reP, reP, reN] + "\\)$");
7215 aliceblue: 0xf0f8ff,
7216 antiquewhite: 0xfaebd7,
7218 aquamarine: 0x7fffd4,
7223 blanchedalmond: 0xffebcd,
7225 blueviolet: 0x8a2be2,
7227 burlywood: 0xdeb887,
7228 cadetblue: 0x5f9ea0,
7229 chartreuse: 0x7fff00,
7230 chocolate: 0xd2691e,
7232 cornflowerblue: 0x6495ed,
7238 darkgoldenrod: 0xb8860b,
7240 darkgreen: 0x006400,
7242 darkkhaki: 0xbdb76b,
7243 darkmagenta: 0x8b008b,
7244 darkolivegreen: 0x556b2f,
7245 darkorange: 0xff8c00,
7246 darkorchid: 0x9932cc,
7248 darksalmon: 0xe9967a,
7249 darkseagreen: 0x8fbc8f,
7250 darkslateblue: 0x483d8b,
7251 darkslategray: 0x2f4f4f,
7252 darkslategrey: 0x2f4f4f,
7253 darkturquoise: 0x00ced1,
7254 darkviolet: 0x9400d3,
7256 deepskyblue: 0x00bfff,
7259 dodgerblue: 0x1e90ff,
7260 firebrick: 0xb22222,
7261 floralwhite: 0xfffaf0,
7262 forestgreen: 0x228b22,
7264 gainsboro: 0xdcdcdc,
7265 ghostwhite: 0xf8f8ff,
7267 goldenrod: 0xdaa520,
7270 greenyellow: 0xadff2f,
7274 indianred: 0xcd5c5c,
7279 lavenderblush: 0xfff0f5,
7280 lawngreen: 0x7cfc00,
7281 lemonchiffon: 0xfffacd,
7282 lightblue: 0xadd8e6,
7283 lightcoral: 0xf08080,
7284 lightcyan: 0xe0ffff,
7285 lightgoldenrodyellow: 0xfafad2,
7286 lightgray: 0xd3d3d3,
7287 lightgreen: 0x90ee90,
7288 lightgrey: 0xd3d3d3,
7289 lightpink: 0xffb6c1,
7290 lightsalmon: 0xffa07a,
7291 lightseagreen: 0x20b2aa,
7292 lightskyblue: 0x87cefa,
7293 lightslategray: 0x778899,
7294 lightslategrey: 0x778899,
7295 lightsteelblue: 0xb0c4de,
7296 lightyellow: 0xffffe0,
7298 limegreen: 0x32cd32,
7302 mediumaquamarine: 0x66cdaa,
7303 mediumblue: 0x0000cd,
7304 mediumorchid: 0xba55d3,
7305 mediumpurple: 0x9370db,
7306 mediumseagreen: 0x3cb371,
7307 mediumslateblue: 0x7b68ee,
7308 mediumspringgreen: 0x00fa9a,
7309 mediumturquoise: 0x48d1cc,
7310 mediumvioletred: 0xc71585,
7311 midnightblue: 0x191970,
7312 mintcream: 0xf5fffa,
7313 mistyrose: 0xffe4e1,
7315 navajowhite: 0xffdead,
7319 olivedrab: 0x6b8e23,
7321 orangered: 0xff4500,
7323 palegoldenrod: 0xeee8aa,
7324 palegreen: 0x98fb98,
7325 paleturquoise: 0xafeeee,
7326 palevioletred: 0xdb7093,
7327 papayawhip: 0xffefd5,
7328 peachpuff: 0xffdab9,
7332 powderblue: 0xb0e0e6,
7334 rebeccapurple: 0x663399,
7336 rosybrown: 0xbc8f8f,
7337 royalblue: 0x4169e1,
7338 saddlebrown: 0x8b4513,
7340 sandybrown: 0xf4a460,
7346 slateblue: 0x6a5acd,
7347 slategray: 0x708090,
7348 slategrey: 0x708090,
7350 springgreen: 0x00ff7f,
7351 steelblue: 0x4682b4,
7356 turquoise: 0x40e0d0,
7360 whitesmoke: 0xf5f5f5,
7362 yellowgreen: 0x9acd32
7365 define$1(Color, color, {
7366 displayable: function() {
7367 return this.rgb().displayable();
7370 return this.rgb().hex();
7372 toString: function() {
7373 return this.rgb() + "";
7377 function color(format) {
7379 format = (format + "").trim().toLowerCase();
7380 return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00
7381 : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000
7382 : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)
7383 : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)
7384 : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)
7385 : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)
7386 : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)
7387 : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)
7388 : named.hasOwnProperty(format) ? rgbn(named[format])
7389 : format === "transparent" ? new Rgb(NaN, NaN, NaN, 0)
7394 return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);
7397 function rgba(r, g, b, a) {
7398 if (a <= 0) r = g = b = NaN;
7399 return new Rgb(r, g, b, a);
7402 function rgbConvert(o) {
7403 if (!(o instanceof Color)) o = color(o);
7404 if (!o) return new Rgb;
7406 return new Rgb(o.r, o.g, o.b, o.opacity);
7409 function rgb(r, g, b, opacity) {
7410 return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);
7413 function Rgb(r, g, b, opacity) {
7417 this.opacity = +opacity;
7420 define$1(Rgb, rgb, extend(Color, {
7421 brighter: function(k) {
7422 k = k == null ? brighter : Math.pow(brighter, k);
7423 return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
7425 darker: function(k) {
7426 k = k == null ? darker : Math.pow(darker, k);
7427 return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
7432 displayable: function() {
7433 return (0 <= this.r && this.r <= 255)
7434 && (0 <= this.g && this.g <= 255)
7435 && (0 <= this.b && this.b <= 255)
7436 && (0 <= this.opacity && this.opacity <= 1);
7439 return "#" + hex$1(this.r) + hex$1(this.g) + hex$1(this.b);
7441 toString: function() {
7442 var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));
7443 return (a === 1 ? "rgb(" : "rgba(")
7444 + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + ", "
7445 + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + ", "
7446 + Math.max(0, Math.min(255, Math.round(this.b) || 0))
7447 + (a === 1 ? ")" : ", " + a + ")");
7451 function hex$1(value) {
7452 value = Math.max(0, Math.min(255, Math.round(value) || 0));
7453 return (value < 16 ? "0" : "") + value.toString(16);
7456 function hsla(h, s, l, a) {
7457 if (a <= 0) h = s = l = NaN;
7458 else if (l <= 0 || l >= 1) h = s = NaN;
7459 else if (s <= 0) h = NaN;
7460 return new Hsl(h, s, l, a);
7463 function hslConvert(o) {
7464 if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);
7465 if (!(o instanceof Color)) o = color(o);
7466 if (!o) return new Hsl;
7467 if (o instanceof Hsl) return o;
7472 min = Math.min(r, g, b),
7473 max = Math.max(r, g, b),
7476 l = (max + min) / 2;
7478 if (r === max) h = (g - b) / s + (g < b) * 6;
7479 else if (g === max) h = (b - r) / s + 2;
7480 else h = (r - g) / s + 4;
7481 s /= l < 0.5 ? max + min : 2 - max - min;
7484 s = l > 0 && l < 1 ? 0 : h;
7486 return new Hsl(h, s, l, o.opacity);
7489 function hsl(h, s, l, opacity) {
7490 return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);
7493 function Hsl(h, s, l, opacity) {
7497 this.opacity = +opacity;
7500 define$1(Hsl, hsl, extend(Color, {
7501 brighter: function(k) {
7502 k = k == null ? brighter : Math.pow(brighter, k);
7503 return new Hsl(this.h, this.s, this.l * k, this.opacity);
7505 darker: function(k) {
7506 k = k == null ? darker : Math.pow(darker, k);
7507 return new Hsl(this.h, this.s, this.l * k, this.opacity);
7510 var h = this.h % 360 + (this.h < 0) * 360,
7511 s = isNaN(h) || isNaN(this.s) ? 0 : this.s,
7513 m2 = l + (l < 0.5 ? l : 1 - l) * s,
7516 hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),
7518 hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),
7522 displayable: function() {
7523 return (0 <= this.s && this.s <= 1 || isNaN(this.s))
7524 && (0 <= this.l && this.l <= 1)
7525 && (0 <= this.opacity && this.opacity <= 1);
7529 /* From FvD 13.37, CSS Color Module Level 3 */
7530 function hsl2rgb(h, m1, m2) {
7531 return (h < 60 ? m1 + (m2 - m1) * h / 60
7533 : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60
7537 var deg2rad = Math.PI / 180;
7538 var rad2deg = 180 / Math.PI;
7540 // https://beta.observablehq.com/@mbostock/lab-and-rgb
7550 function labConvert(o) {
7551 if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);
7552 if (o instanceof Hcl) {
7553 if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);
7554 var h = o.h * deg2rad;
7555 return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);
7557 if (!(o instanceof Rgb)) o = rgbConvert(o);
7558 var r = rgb2lrgb(o.r),
7561 y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;
7562 if (r === g && g === b) x = z = y; else {
7563 x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);
7564 z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);
7566 return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);
7569 function gray(l, opacity) {
7570 return new Lab(l, 0, 0, opacity == null ? 1 : opacity);
7573 function lab(l, a, b, opacity) {
7574 return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);
7577 function Lab(l, a, b, opacity) {
7581 this.opacity = +opacity;
7584 define$1(Lab, lab, extend(Color, {
7585 brighter: function(k) {
7586 return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);
7588 darker: function(k) {
7589 return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);
7592 var y = (this.l + 16) / 116,
7593 x = isNaN(this.a) ? y : y + this.a / 500,
7594 z = isNaN(this.b) ? y : y - this.b / 200;
7595 x = Xn * lab2xyz(x);
7596 y = Yn * lab2xyz(y);
7597 z = Zn * lab2xyz(z);
7599 lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),
7600 lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),
7601 lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),
7607 function xyz2lab(t) {
7608 return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;
7611 function lab2xyz(t) {
7612 return t > t1 ? t * t * t : t2 * (t - t0);
7615 function lrgb2rgb(x) {
7616 return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);
7619 function rgb2lrgb(x) {
7620 return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);
7623 function hclConvert(o) {
7624 if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);
7625 if (!(o instanceof Lab)) o = labConvert(o);
7626 if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0, o.l, o.opacity);
7627 var h = Math.atan2(o.b, o.a) * rad2deg;
7628 return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);
7631 function lch(l, c, h, opacity) {
7632 return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);
7635 function hcl(h, c, l, opacity) {
7636 return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);
7639 function Hcl(h, c, l, opacity) {
7643 this.opacity = +opacity;
7646 define$1(Hcl, hcl, extend(Color, {
7647 brighter: function(k) {
7648 return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);
7650 darker: function(k) {
7651 return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);
7654 return labConvert(this).rgb();
7665 BC_DA = B * C - D * A;
7667 function cubehelixConvert(o) {
7668 if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);
7669 if (!(o instanceof Rgb)) o = rgbConvert(o);
7673 l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),
7675 k = (E * (g - l) - C * bl) / D,
7676 s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1
7677 h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;
7678 return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);
7681 function cubehelix(h, s, l, opacity) {
7682 return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);
7685 function Cubehelix(h, s, l, opacity) {
7689 this.opacity = +opacity;
7692 define$1(Cubehelix, cubehelix, extend(Color, {
7693 brighter: function(k) {
7694 k = k == null ? brighter : Math.pow(brighter, k);
7695 return new Cubehelix(this.h, this.s, this.l * k, this.opacity);
7697 darker: function(k) {
7698 k = k == null ? darker : Math.pow(darker, k);
7699 return new Cubehelix(this.h, this.s, this.l * k, this.opacity);
7702 var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,
7704 a = isNaN(this.s) ? 0 : this.s * l * (1 - l),
7708 255 * (l + a * (A * cosh + B * sinh)),
7709 255 * (l + a * (C * cosh + D * sinh)),
7710 255 * (l + a * (E * cosh)),
7716 function basis(t1, v0, v1, v2, v3) {
7717 var t2 = t1 * t1, t3 = t2 * t1;
7718 return ((1 - 3 * t1 + 3 * t2 - t3) * v0
7719 + (4 - 6 * t2 + 3 * t3) * v1
7720 + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2
7724 function basis$1(values) {
7725 var n = values.length - 1;
7726 return function(t) {
7727 var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),
7730 v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,
7731 v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;
7732 return basis((t - i / n) * n, v0, v1, v2, v3);
7736 function basisClosed(values) {
7737 var n = values.length;
7738 return function(t) {
7739 var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),
7740 v0 = values[(i + n - 1) % n],
7742 v2 = values[(i + 1) % n],
7743 v3 = values[(i + 2) % n];
7744 return basis((t - i / n) * n, v0, v1, v2, v3);
7748 function constant$3(x) {
7754 function linear(a, d) {
7755 return function(t) {
7760 function exponential(a, b, y) {
7761 return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {
7762 return Math.pow(a + t * b, y);
7766 function hue(a, b) {
7768 return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant$3(isNaN(a) ? b : a);
7772 return (y = +y) === 1 ? nogamma : function(a, b) {
7773 return b - a ? exponential(a, b, y) : constant$3(isNaN(a) ? b : a);
7777 function nogamma(a, b) {
7779 return d ? linear(a, d) : constant$3(isNaN(a) ? b : a);
7782 var d3_interpolateRgb = (function rgbGamma(y) {
7783 var color = gamma(y);
7785 function rgb$1(start, end) {
7786 var r = color((start = rgb(start)).r, (end = rgb(end)).r),
7787 g = color(start.g, end.g),
7788 b = color(start.b, end.b),
7789 opacity = nogamma(start.opacity, end.opacity);
7790 return function(t) {
7794 start.opacity = opacity(t);
7799 rgb$1.gamma = rgbGamma;
7804 function rgbSpline(spline) {
7805 return function(colors) {
7806 var n = colors.length,
7811 for (i = 0; i < n; ++i) {
7812 color = rgb(colors[i]);
7813 r[i] = color.r || 0;
7814 g[i] = color.g || 0;
7815 b[i] = color.b || 0;
7821 return function(t) {
7830 var rgbBasis = rgbSpline(basis$1);
7831 var rgbBasisClosed = rgbSpline(basisClosed);
7833 function array$2(a, b) {
7834 var nb = b ? b.length : 0,
7835 na = a ? Math.min(nb, a.length) : 0,
7840 for (i = 0; i < na; ++i) x[i] = d3_interpolate(a[i], b[i]);
7841 for (; i < nb; ++i) c[i] = b[i];
7843 return function(t) {
7844 for (i = 0; i < na; ++i) c[i] = x[i](t);
7849 function date(a, b) {
7851 return a = +a, b -= a, function(t) {
7852 return d.setTime(a + b * t), d;
7856 function d3_interpolateNumber(a, b) {
7857 return a = +a, b -= a, function(t) {
7862 function object(a, b) {
7867 if (a === null || typeof a !== "object") a = {};
7868 if (b === null || typeof b !== "object") b = {};
7872 i[k] = d3_interpolate(a[k], b[k]);
7878 return function(t) {
7879 for (k in i) c[k] = i[k](t);
7884 var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,
7885 reB = new RegExp(reA.source, "g");
7894 return function(t) {
7899 function interpolateString(a, b) {
7900 var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b
7901 am, // current match in a
7902 bm, // current match in b
7903 bs, // string preceding current number in b, if any
7904 i = -1, // index in s
7905 s = [], // string constants and placeholders
7906 q = []; // number interpolators
7908 // Coerce inputs to strings.
7909 a = a + "", b = b + "";
7911 // Interpolate pairs of numbers in a & b.
7912 while ((am = reA.exec(a))
7913 && (bm = reB.exec(b))) {
7914 if ((bs = bm.index) > bi) { // a string precedes the next number in b
7915 bs = b.slice(bi, bs);
7916 if (s[i]) s[i] += bs; // coalesce with previous string
7919 if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match
7920 if (s[i]) s[i] += bm; // coalesce with previous string
7922 } else { // interpolate non-matching numbers
7924 q.push({i: i, x: d3_interpolateNumber(am, bm)});
7929 // Add remains of b.
7930 if (bi < b.length) {
7932 if (s[i]) s[i] += bs; // coalesce with previous string
7936 // Special optimization for only a single match.
7937 // Otherwise, interpolate each of the numbers and rejoin the string.
7938 return s.length < 2 ? (q[0]
7941 : (b = q.length, function(t) {
7942 for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);
7947 function d3_interpolate(a, b) {
7948 var t = typeof b, c;
7949 return b == null || t === "boolean" ? constant$3(b)
7950 : (t === "number" ? d3_interpolateNumber
7951 : t === "string" ? ((c = color(b)) ? (b = c, d3_interpolateRgb) : interpolateString)
7952 : b instanceof color ? d3_interpolateRgb
7953 : b instanceof Date ? date
7954 : Array.isArray(b) ? array$2
7955 : typeof b.valueOf !== "function" && typeof b.toString !== "function" || isNaN(b) ? object
7956 : d3_interpolateNumber)(a, b);
7959 function discrete(range) {
7960 var n = range.length;
7961 return function(t) {
7962 return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];
7966 function hue$1(a, b) {
7967 var i = hue(+a, +b);
7968 return function(t) {
7970 return x - 360 * Math.floor(x / 360);
7974 function interpolateRound(a, b) {
7975 return a = +a, b -= a, function(t) {
7976 return Math.round(a + b * t);
7980 var degrees = 180 / Math.PI;
7991 function decompose(a, b, c, d, e, f) {
7992 var scaleX, scaleY, skewX;
7993 if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;
7994 if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;
7995 if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;
7996 if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;
8000 rotate: Math.atan2(b, a) * degrees,
8001 skewX: Math.atan(skewX) * degrees,
8012 function parseCss(value) {
8013 if (value === "none") return identity$2;
8014 if (!cssNode) cssNode = document.createElement("DIV"), cssRoot = document.documentElement, cssView = document.defaultView;
8015 cssNode.style.transform = value;
8016 value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue("transform");
8017 cssRoot.removeChild(cssNode);
8018 value = value.slice(7, -1).split(",");
8019 return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);
8022 function parseSvg(value) {
8023 if (value == null) return identity$2;
8024 if (!svgNode) svgNode = document.createElementNS("http://www.w3.org/2000/svg", "g");
8025 svgNode.setAttribute("transform", value);
8026 if (!(value = svgNode.transform.baseVal.consolidate())) return identity$2;
8027 value = value.matrix;
8028 return decompose(value.a, value.b, value.c, value.d, value.e, value.f);
8031 function interpolateTransform(parse, pxComma, pxParen, degParen) {
8034 return s.length ? s.pop() + " " : "";
8037 function translate(xa, ya, xb, yb, s, q) {
8038 if (xa !== xb || ya !== yb) {
8039 var i = s.push("translate(", null, pxComma, null, pxParen);
8040 q.push({i: i - 4, x: d3_interpolateNumber(xa, xb)}, {i: i - 2, x: d3_interpolateNumber(ya, yb)});
8041 } else if (xb || yb) {
8042 s.push("translate(" + xb + pxComma + yb + pxParen);
8046 function rotate(a, b, s, q) {
8048 if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path
8049 q.push({i: s.push(pop(s) + "rotate(", null, degParen) - 2, x: d3_interpolateNumber(a, b)});
8051 s.push(pop(s) + "rotate(" + b + degParen);
8055 function skewX(a, b, s, q) {
8057 q.push({i: s.push(pop(s) + "skewX(", null, degParen) - 2, x: d3_interpolateNumber(a, b)});
8059 s.push(pop(s) + "skewX(" + b + degParen);
8063 function scale(xa, ya, xb, yb, s, q) {
8064 if (xa !== xb || ya !== yb) {
8065 var i = s.push(pop(s) + "scale(", null, ",", null, ")");
8066 q.push({i: i - 4, x: d3_interpolateNumber(xa, xb)}, {i: i - 2, x: d3_interpolateNumber(ya, yb)});
8067 } else if (xb !== 1 || yb !== 1) {
8068 s.push(pop(s) + "scale(" + xb + "," + yb + ")");
8072 return function(a, b) {
8073 var s = [], // string constants and placeholders
8074 q = []; // number interpolators
8075 a = parse(a), b = parse(b);
8076 translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);
8077 rotate(a.rotate, b.rotate, s, q);
8078 skewX(a.skewX, b.skewX, s, q);
8079 scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);
8081 return function(t) {
8082 var i = -1, n = q.length, o;
8083 while (++i < n) s[(o = q[i]).i] = o.x(t);
8089 var interpolateTransformCss = interpolateTransform(parseCss, "px, ", "px)", "deg)");
8090 var interpolateTransformSvg = interpolateTransform(parseSvg, ", ", ")", ")");
8092 var rho = Math.SQRT2,
8098 return ((x = Math.exp(x)) + 1 / x) / 2;
8102 return ((x = Math.exp(x)) - 1 / x) / 2;
8106 return ((x = Math.exp(2 * x)) - 1) / (x + 1);
8109 // p0 = [ux0, uy0, w0]
8110 // p1 = [ux1, uy1, w1]
8111 function interpolateZoom(p0, p1) {
8112 var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],
8113 ux1 = p1[0], uy1 = p1[1], w1 = p1[2],
8116 d2 = dx * dx + dy * dy,
8120 // Special case for u0 ≅ u1.
8121 if (d2 < epsilon2) {
8122 S = Math.log(w1 / w0) / rho;
8127 w0 * Math.exp(rho * t * S)
8134 var d1 = Math.sqrt(d2),
8135 b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),
8136 b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),
8137 r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),
8138 r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);
8139 S = (r1 - r0) / rho;
8143 u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));
8147 w0 * coshr0 / cosh(rho * s + r0)
8152 i.duration = S * 1000;
8157 function hsl$1(hue) {
8158 return function(start, end) {
8159 var h = hue((start = hsl(start)).h, (end = hsl(end)).h),
8160 s = nogamma(start.s, end.s),
8161 l = nogamma(start.l, end.l),
8162 opacity = nogamma(start.opacity, end.opacity);
8163 return function(t) {
8167 start.opacity = opacity(t);
8173 var hsl$2 = hsl$1(hue);
8174 var hslLong = hsl$1(nogamma);
8176 function lab$1(start, end) {
8177 var l = nogamma((start = lab(start)).l, (end = lab(end)).l),
8178 a = nogamma(start.a, end.a),
8179 b = nogamma(start.b, end.b),
8180 opacity = nogamma(start.opacity, end.opacity);
8181 return function(t) {
8185 start.opacity = opacity(t);
8190 function hcl$1(hue) {
8191 return function(start, end) {
8192 var h = hue((start = hcl(start)).h, (end = hcl(end)).h),
8193 c = nogamma(start.c, end.c),
8194 l = nogamma(start.l, end.l),
8195 opacity = nogamma(start.opacity, end.opacity);
8196 return function(t) {
8200 start.opacity = opacity(t);
8206 var hcl$2 = hcl$1(hue);
8207 var hclLong = hcl$1(nogamma);
8209 function cubehelix$1(hue) {
8210 return (function cubehelixGamma(y) {
8213 function cubehelix$1(start, end) {
8214 var h = hue((start = cubehelix(start)).h, (end = cubehelix(end)).h),
8215 s = nogamma(start.s, end.s),
8216 l = nogamma(start.l, end.l),
8217 opacity = nogamma(start.opacity, end.opacity);
8218 return function(t) {
8221 start.l = l(Math.pow(t, y));
8222 start.opacity = opacity(t);
8227 cubehelix$1.gamma = cubehelixGamma;
8233 var cubehelix$2 = cubehelix$1(hue);
8234 var cubehelixLong = cubehelix$1(nogamma);
8236 function piecewise(interpolate, values) {
8237 var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);
8238 while (i < n) I[i] = interpolate(v, v = values[++i]);
8239 return function(t) {
8240 var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));
8245 function d3_quantize(interpolator, n) {
8246 var samples = new Array(n);
8247 for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));
8251 var frame = 0, // is an animation frame pending?
8252 timeout = 0, // is a timeout pending?
8253 interval = 0, // are any timers active?
8254 pokeDelay = 1000, // how frequently we check for clock skew
8260 clock = typeof performance === "object" && performance.now ? performance : Date,
8261 setFrame = typeof window === "object" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };
8264 return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);
8267 function clearNow() {
8277 Timer.prototype = timer.prototype = {
8279 restart: function(callback, delay, time) {
8280 if (typeof callback !== "function") throw new TypeError("callback is not a function");
8281 time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);
8282 if (!this._next && taskTail !== this) {
8283 if (taskTail) taskTail._next = this;
8284 else taskHead = this;
8287 this._call = callback;
8294 this._time = Infinity;
8300 function timer(callback, delay, time) {
8302 t.restart(callback, delay, time);
8306 function timerFlush() {
8307 now(); // Get the current time, if not already set.
8308 ++frame; // Pretend we’ve set an alarm, if we haven’t already.
8309 var t = taskHead, e;
8311 if ((e = clockNow - t._time) >= 0) t._call.call(null, e);
8318 clockNow = (clockLast = clock.now()) + clockSkew;
8319 frame = timeout = 0;
8330 var now = clock.now(), delay = now - clockLast;
8331 if (delay > pokeDelay) clockSkew -= delay, clockLast = now;
8335 var t0, t1 = taskHead, t2, time = Infinity;
8338 if (time > t1._time) time = t1._time;
8339 t0 = t1, t1 = t1._next;
8341 t2 = t1._next, t1._next = null;
8342 t1 = t0 ? t0._next = t2 : taskHead = t2;
8349 function sleep(time) {
8350 if (frame) return; // Soonest alarm already set, or will be.
8351 if (timeout) timeout = clearTimeout(timeout);
8352 var delay = time - clockNow; // Strictly less than if we recomputed clockNow.
8354 if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);
8355 if (interval) interval = clearInterval(interval);
8357 if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);
8358 frame = 1, setFrame(wake);
8362 function d3_timeout(callback, delay, time) {
8364 delay = delay == null ? 0 : +delay;
8365 t.restart(function(elapsed) {
8367 callback(elapsed + delay);
8372 function interval$1(callback, delay, time) {
8373 var t = new Timer, total = delay;
8374 if (delay == null) return t.restart(callback, delay, time), t;
8375 delay = +delay, time = time == null ? now() : +time;
8376 t.restart(function tick(elapsed) {
8378 t.restart(tick, total += delay, time);
8384 var emptyOn = dispatch("start", "end", "cancel", "interrupt");
8385 var emptyTween = [];
8395 function schedule(node, name, id, index, group, timing) {
8396 var schedules = node.__transition;
8397 if (!schedules) node.__transition = {};
8398 else if (id in schedules) return;
8399 create$6(node, id, {
8401 index: index, // For context during callback.
8402 group: group, // For context during callback.
8406 delay: timing.delay,
8407 duration: timing.duration,
8414 function init(node, id) {
8415 var schedule = get$2(node, id);
8416 if (schedule.state > CREATED) throw new Error("too late; already scheduled");
8420 function set$1(node, id) {
8421 var schedule = get$2(node, id);
8422 if (schedule.state > STARTED) throw new Error("too late; already running");
8426 function get$2(node, id) {
8427 var schedule = node.__transition;
8428 if (!schedule || !(schedule = schedule[id])) throw new Error("transition not found");
8432 function create$6(node, id, self) {
8433 var schedules = node.__transition,
8436 // Initialize the self timer when the transition is created.
8437 // Note the actual delay is not known until the first callback!
8438 schedules[id] = self;
8439 self.timer = timer(schedule, 0, self.time);
8441 function schedule(elapsed) {
8442 self.state = SCHEDULED;
8443 self.timer.restart(start, self.delay, self.time);
8445 // If the elapsed delay is less than our first sleep, start immediately.
8446 if (self.delay <= elapsed) start(elapsed - self.delay);
8449 function start(elapsed) {
8452 // If the state is not SCHEDULED, then we previously errored on start.
8453 if (self.state !== SCHEDULED) return stop();
8455 for (i in schedules) {
8457 if (o.name !== self.name) continue;
8459 // While this element already has a starting transition during this frame,
8460 // defer starting an interrupting transition until that transition has a
8461 // chance to tick (and possibly end); see d3/d3-transition#54!
8462 if (o.state === STARTED) return d3_timeout(start);
8464 // Interrupt the active transition, if any.
8465 if (o.state === RUNNING) {
8468 o.on.call("interrupt", node, node.__data__, o.index, o.group);
8469 delete schedules[i];
8472 // Cancel any pre-empted transitions.
8476 o.on.call("cancel", node, node.__data__, o.index, o.group);
8477 delete schedules[i];
8481 // Defer the first tick to end of the current frame; see d3/d3#1576.
8482 // Note the transition may be canceled after start and before the first tick!
8483 // Note this must be scheduled before the start event; see d3/d3-transition#16!
8484 // Assuming this is successful, subsequent callbacks go straight to tick.
8485 d3_timeout(function() {
8486 if (self.state === STARTED) {
8487 self.state = RUNNING;
8488 self.timer.restart(tick, self.delay, self.time);
8493 // Dispatch the start event.
8494 // Note this must be done before the tween are initialized.
8495 self.state = STARTING;
8496 self.on.call("start", node, node.__data__, self.index, self.group);
8497 if (self.state !== STARTING) return; // interrupted
8498 self.state = STARTED;
8500 // Initialize the tween, deleting null tween.
8501 tween = new Array(n = self.tween.length);
8502 for (i = 0, j = -1; i < n; ++i) {
8503 if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {
8507 tween.length = j + 1;
8510 function tick(elapsed) {
8511 var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),
8516 tween[i].call(node, t);
8519 // Dispatch the end event.
8520 if (self.state === ENDING) {
8521 self.on.call("end", node, node.__data__, self.index, self.group);
8529 delete schedules[id];
8530 for (var i in schedules) return; // eslint-disable-line no-unused-vars
8531 delete node.__transition;
8535 function interrupt(node, name) {
8536 var schedules = node.__transition,
8542 if (!schedules) return;
8544 name = name == null ? null : name + "";
8546 for (i in schedules) {
8547 if ((schedule = schedules[i]).name !== name) { empty = false; continue; }
8548 active = schedule.state > STARTING && schedule.state < ENDING;
8549 schedule.state = ENDED;
8550 schedule.timer.stop();
8551 schedule.on.call(active ? "interrupt" : "cancel", node, node.__data__, schedule.index, schedule.group);
8552 delete schedules[i];
8555 if (empty) delete node.__transition;
8558 function selection_interrupt(name) {
8559 return this.each(function() {
8560 interrupt(this, name);
8564 function tweenRemove(id, name) {
8567 var schedule = set$1(this, id),
8568 tween = schedule.tween;
8570 // If this node shared tween with the previous node,
8571 // just assign the updated shared tween and we’re done!
8572 // Otherwise, copy-on-write.
8573 if (tween !== tween0) {
8574 tween1 = tween0 = tween;
8575 for (var i = 0, n = tween1.length; i < n; ++i) {
8576 if (tween1[i].name === name) {
8577 tween1 = tween1.slice();
8578 tween1.splice(i, 1);
8584 schedule.tween = tween1;
8588 function tweenFunction(id, name, value) {
8590 if (typeof value !== "function") throw new Error;
8592 var schedule = set$1(this, id),
8593 tween = schedule.tween;
8595 // If this node shared tween with the previous node,
8596 // just assign the updated shared tween and we’re done!
8597 // Otherwise, copy-on-write.
8598 if (tween !== tween0) {
8599 tween1 = (tween0 = tween).slice();
8600 for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {
8601 if (tween1[i].name === name) {
8606 if (i === n) tween1.push(t);
8609 schedule.tween = tween1;
8613 function transition_tween(name, value) {
8618 if (arguments.length < 2) {
8619 var tween = get$2(this.node(), id).tween;
8620 for (var i = 0, n = tween.length, t; i < n; ++i) {
8621 if ((t = tween[i]).name === name) {
8628 return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));
8631 function tweenValue(transition, name, value) {
8632 var id = transition._id;
8634 transition.each(function() {
8635 var schedule = set$1(this, id);
8636 (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);
8639 return function(node) {
8640 return get$2(node, id).value[name];
8644 function interpolate(a, b) {
8646 return (typeof b === "number" ? d3_interpolateNumber
8647 : b instanceof color ? d3_interpolateRgb
8648 : (c = color(b)) ? (b = c, d3_interpolateRgb)
8649 : interpolateString)(a, b);
8652 function attrRemove$1(name) {
8654 this.removeAttribute(name);
8658 function attrRemoveNS$1(fullname) {
8660 this.removeAttributeNS(fullname.space, fullname.local);
8664 function attrConstant$1(name, interpolate, value1) {
8666 string1 = value1 + "",
8669 var string0 = this.getAttribute(name);
8670 return string0 === string1 ? null
8671 : string0 === string00 ? interpolate0
8672 : interpolate0 = interpolate(string00 = string0, value1);
8676 function attrConstantNS$1(fullname, interpolate, value1) {
8678 string1 = value1 + "",
8681 var string0 = this.getAttributeNS(fullname.space, fullname.local);
8682 return string0 === string1 ? null
8683 : string0 === string00 ? interpolate0
8684 : interpolate0 = interpolate(string00 = string0, value1);
8688 function attrFunction$1(name, interpolate, value) {
8693 var string0, value1 = value(this), string1;
8694 if (value1 == null) return void this.removeAttribute(name);
8695 string0 = this.getAttribute(name);
8696 string1 = value1 + "";
8697 return string0 === string1 ? null
8698 : string0 === string00 && string1 === string10 ? interpolate0
8699 : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));
8703 function attrFunctionNS$1(fullname, interpolate, value) {
8708 var string0, value1 = value(this), string1;
8709 if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);
8710 string0 = this.getAttributeNS(fullname.space, fullname.local);
8711 string1 = value1 + "";
8712 return string0 === string1 ? null
8713 : string0 === string00 && string1 === string10 ? interpolate0
8714 : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));
8718 function transition_attr(name, value) {
8719 var fullname = namespace(name), i = fullname === "transform" ? interpolateTransformSvg : interpolate;
8720 return this.attrTween(name, typeof value === "function"
8721 ? (fullname.local ? attrFunctionNS$1 : attrFunction$1)(fullname, i, tweenValue(this, "attr." + name, value))
8722 : value == null ? (fullname.local ? attrRemoveNS$1 : attrRemove$1)(fullname)
8723 : (fullname.local ? attrConstantNS$1 : attrConstant$1)(fullname, i, value));
8726 function attrInterpolate(name, i) {
8727 return function(t) {
8728 this.setAttribute(name, i(t));
8732 function attrInterpolateNS(fullname, i) {
8733 return function(t) {
8734 this.setAttributeNS(fullname.space, fullname.local, i(t));
8738 function attrTweenNS(fullname, value) {
8741 var i = value.apply(this, arguments);
8742 if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);
8745 tween._value = value;
8749 function attrTween(name, value) {
8752 var i = value.apply(this, arguments);
8753 if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);
8756 tween._value = value;
8760 function transition_attrTween(name, value) {
8761 var key = "attr." + name;
8762 if (arguments.length < 2) return (key = this.tween(key)) && key._value;
8763 if (value == null) return this.tween(key, null);
8764 if (typeof value !== "function") throw new Error;
8765 var fullname = namespace(name);
8766 return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));
8769 function delayFunction(id, value) {
8771 init(this, id).delay = +value.apply(this, arguments);
8775 function delayConstant(id, value) {
8776 return value = +value, function() {
8777 init(this, id).delay = value;
8781 function transition_delay(value) {
8784 return arguments.length
8785 ? this.each((typeof value === "function"
8787 : delayConstant)(id, value))
8788 : get$2(this.node(), id).delay;
8791 function durationFunction(id, value) {
8793 set$1(this, id).duration = +value.apply(this, arguments);
8797 function durationConstant(id, value) {
8798 return value = +value, function() {
8799 set$1(this, id).duration = value;
8803 function transition_duration(value) {
8806 return arguments.length
8807 ? this.each((typeof value === "function"
8809 : durationConstant)(id, value))
8810 : get$2(this.node(), id).duration;
8813 function easeConstant(id, value) {
8814 if (typeof value !== "function") throw new Error;
8816 set$1(this, id).ease = value;
8820 function transition_ease(value) {
8823 return arguments.length
8824 ? this.each(easeConstant(id, value))
8825 : get$2(this.node(), id).ease;
8828 function transition_filter(match) {
8829 if (typeof match !== "function") match = matcher(match);
8831 for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
8832 for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {
8833 if ((node = group[i]) && match.call(node, node.__data__, i, group)) {
8834 subgroup.push(node);
8839 return new Transition(subgroups, this._parents, this._name, this._id);
8842 function transition_merge(transition) {
8843 if (transition._id !== this._id) throw new Error;
8845 for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {
8846 for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {
8847 if (node = group0[i] || group1[i]) {
8853 for (; j < m0; ++j) {
8854 merges[j] = groups0[j];
8857 return new Transition(merges, this._parents, this._name, this._id);
8860 function start(name) {
8861 return (name + "").trim().split(/^|\s+/).every(function(t) {
8862 var i = t.indexOf(".");
8863 if (i >= 0) t = t.slice(0, i);
8864 return !t || t === "start";
8868 function onFunction(id, name, listener) {
8869 var on0, on1, sit = start(name) ? init : set$1;
8871 var schedule = sit(this, id),
8874 // If this node shared a dispatch with the previous node,
8875 // just assign the updated shared dispatch and we’re done!
8876 // Otherwise, copy-on-write.
8877 if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);
8883 function transition_on(name, listener) {
8886 return arguments.length < 2
8887 ? get$2(this.node(), id).on.on(name)
8888 : this.each(onFunction(id, name, listener));
8891 function removeFunction(id) {
8893 var parent = this.parentNode;
8894 for (var i in this.__transition) if (+i !== id) return;
8895 if (parent) parent.removeChild(this);
8899 function transition_remove() {
8900 return this.on("end.remove", removeFunction(this._id));
8903 function transition_select(select) {
8904 var name = this._name,
8907 if (typeof select !== "function") select = selector(select);
8909 for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
8910 for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {
8911 if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {
8912 if ("__data__" in node) subnode.__data__ = node.__data__;
8913 subgroup[i] = subnode;
8914 schedule(subgroup[i], name, id, i, subgroup, get$2(node, id));
8919 return new Transition(subgroups, this._parents, name, id);
8922 function transition_selectAll(select) {
8923 var name = this._name,
8926 if (typeof select !== "function") select = selectorAll(select);
8928 for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {
8929 for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
8930 if (node = group[i]) {
8931 for (var children = select.call(node, node.__data__, i, group), child, inherit = get$2(node, id), k = 0, l = children.length; k < l; ++k) {
8932 if (child = children[k]) {
8933 schedule(child, name, id, k, children, inherit);
8936 subgroups.push(children);
8942 return new Transition(subgroups, parents, name, id);
8945 var Selection$1 = selection.prototype.constructor;
8947 function transition_selection() {
8948 return new Selection$1(this._groups, this._parents);
8951 function styleNull(name, interpolate) {
8956 var string0 = styleValue(this, name),
8957 string1 = (this.style.removeProperty(name), styleValue(this, name));
8958 return string0 === string1 ? null
8959 : string0 === string00 && string1 === string10 ? interpolate0
8960 : interpolate0 = interpolate(string00 = string0, string10 = string1);
8964 function styleRemove$1(name) {
8966 this.style.removeProperty(name);
8970 function styleConstant$1(name, interpolate, value1) {
8972 string1 = value1 + "",
8975 var string0 = styleValue(this, name);
8976 return string0 === string1 ? null
8977 : string0 === string00 ? interpolate0
8978 : interpolate0 = interpolate(string00 = string0, value1);
8982 function styleFunction$1(name, interpolate, value) {
8987 var string0 = styleValue(this, name),
8988 value1 = value(this),
8989 string1 = value1 + "";
8990 if (value1 == null) string1 = value1 = (this.style.removeProperty(name), styleValue(this, name));
8991 return string0 === string1 ? null
8992 : string0 === string00 && string1 === string10 ? interpolate0
8993 : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));
8997 function styleMaybeRemove(id, name) {
8998 var on0, on1, listener0, key = "style." + name, event = "end." + key, remove;
9000 var schedule = set$1(this, id),
9002 listener = schedule.value[key] == null ? remove || (remove = styleRemove$1(name)) : undefined;
9004 // If this node shared a dispatch with the previous node,
9005 // just assign the updated shared dispatch and we’re done!
9006 // Otherwise, copy-on-write.
9007 if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);
9013 function transition_style(name, value, priority) {
9014 var i = (name += "") === "transform" ? interpolateTransformCss : interpolate;
9015 return value == null ? this
9016 .styleTween(name, styleNull(name, i))
9017 .on("end.style." + name, styleRemove$1(name))
9018 : typeof value === "function" ? this
9019 .styleTween(name, styleFunction$1(name, i, tweenValue(this, "style." + name, value)))
9020 .each(styleMaybeRemove(this._id, name))
9022 .styleTween(name, styleConstant$1(name, i, value), priority)
9023 .on("end.style." + name, null);
9026 function styleInterpolate(name, i, priority) {
9027 return function(t) {
9028 this.style.setProperty(name, i(t), priority);
9032 function styleTween(name, value, priority) {
9035 var i = value.apply(this, arguments);
9036 if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);
9039 tween._value = value;
9043 function transition_styleTween(name, value, priority) {
9044 var key = "style." + (name += "");
9045 if (arguments.length < 2) return (key = this.tween(key)) && key._value;
9046 if (value == null) return this.tween(key, null);
9047 if (typeof value !== "function") throw new Error;
9048 return this.tween(key, styleTween(name, value, priority == null ? "" : priority));
9051 function textConstant$1(value) {
9053 this.textContent = value;
9057 function textFunction$1(value) {
9059 var value1 = value(this);
9060 this.textContent = value1 == null ? "" : value1;
9064 function transition_text(value) {
9065 return this.tween("text", typeof value === "function"
9066 ? textFunction$1(tweenValue(this, "text", value))
9067 : textConstant$1(value == null ? "" : value + ""));
9070 function transition_transition() {
9071 var name = this._name,
9075 for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {
9076 for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
9077 if (node = group[i]) {
9078 var inherit = get$2(node, id0);
9079 schedule(node, name, id1, i, group, {
9080 time: inherit.time + inherit.delay + inherit.duration,
9082 duration: inherit.duration,
9089 return new Transition(groups, this._parents, name, id1);
9092 function transition_end() {
9093 var on0, on1, that = this, id = that._id, size = that.size();
9094 return new Promise(function(resolve, reject) {
9095 var cancel = {value: reject},
9096 end = {value: function() { if (--size === 0) resolve(); }};
9098 that.each(function() {
9099 var schedule = set$1(this, id),
9102 // If this node shared a dispatch with the previous node,
9103 // just assign the updated shared dispatch and we’re done!
9104 // Otherwise, copy-on-write.
9106 on1 = (on0 = on).copy();
9107 on1._.cancel.push(cancel);
9108 on1._.interrupt.push(cancel);
9109 on1._.end.push(end);
9119 function Transition(groups, parents, name, id) {
9120 this._groups = groups;
9121 this._parents = parents;
9126 function transition(name) {
9127 return selection().transition(name);
9134 var selection_prototype = selection.prototype;
9136 Transition.prototype = transition.prototype = {
9137 constructor: Transition,
9138 select: transition_select,
9139 selectAll: transition_selectAll,
9140 filter: transition_filter,
9141 merge: transition_merge,
9142 selection: transition_selection,
9143 transition: transition_transition,
9144 call: selection_prototype.call,
9145 nodes: selection_prototype.nodes,
9146 node: selection_prototype.node,
9147 size: selection_prototype.size,
9148 empty: selection_prototype.empty,
9149 each: selection_prototype.each,
9151 attr: transition_attr,
9152 attrTween: transition_attrTween,
9153 style: transition_style,
9154 styleTween: transition_styleTween,
9155 text: transition_text,
9156 remove: transition_remove,
9157 tween: transition_tween,
9158 delay: transition_delay,
9159 duration: transition_duration,
9160 ease: transition_ease,
9164 function linear$1(t) {
9168 function quadIn(t) {
9172 function quadOut(t) {
9176 function quadInOut(t) {
9177 return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;
9180 function cubicIn(t) {
9184 function cubicOut(t) {
9185 return --t * t * t + 1;
9188 function cubicInOut(t) {
9189 return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;
9194 var polyIn = (function custom(e) {
9197 function polyIn(t) {
9198 return Math.pow(t, e);
9201 polyIn.exponent = custom;
9206 var polyOut = (function custom(e) {
9209 function polyOut(t) {
9210 return 1 - Math.pow(1 - t, e);
9213 polyOut.exponent = custom;
9218 var polyInOut = (function custom(e) {
9221 function polyInOut(t) {
9222 return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;
9225 polyInOut.exponent = custom;
9234 return 1 - Math.cos(t * halfPi);
9237 function sinOut(t) {
9238 return Math.sin(t * halfPi);
9241 function sinInOut(t) {
9242 return (1 - Math.cos(pi * t)) / 2;
9246 return Math.pow(2, 10 * t - 10);
9249 function expOut(t) {
9250 return 1 - Math.pow(2, -10 * t);
9253 function expInOut(t) {
9254 return ((t *= 2) <= 1 ? Math.pow(2, 10 * t - 10) : 2 - Math.pow(2, 10 - 10 * t)) / 2;
9257 function circleIn(t) {
9258 return 1 - Math.sqrt(1 - t * t);
9261 function circleOut(t) {
9262 return Math.sqrt(1 - --t * t);
9265 function circleInOut(t) {
9266 return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;
9280 function bounceIn(t) {
9281 return 1 - bounceOut(1 - t);
9284 function bounceOut(t) {
9285 return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;
9288 function bounceInOut(t) {
9289 return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;
9292 var overshoot = 1.70158;
9294 var backIn = (function custom(s) {
9297 function backIn(t) {
9298 return t * t * ((s + 1) * t - s);
9301 backIn.overshoot = custom;
9306 var backOut = (function custom(s) {
9309 function backOut(t) {
9310 return --t * t * ((s + 1) * t + s) + 1;
9313 backOut.overshoot = custom;
9318 var backInOut = (function custom(s) {
9321 function backInOut(t) {
9322 return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;
9325 backInOut.overshoot = custom;
9330 var tau = 2 * Math.PI,
9334 var elasticIn = (function custom(a, p) {
9335 var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
9337 function elasticIn(t) {
9338 return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);
9341 elasticIn.amplitude = function(a) { return custom(a, p * tau); };
9342 elasticIn.period = function(p) { return custom(a, p); };
9345 })(amplitude, period);
9347 var elasticOut = (function custom(a, p) {
9348 var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
9350 function elasticOut(t) {
9351 return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);
9354 elasticOut.amplitude = function(a) { return custom(a, p * tau); };
9355 elasticOut.period = function(p) { return custom(a, p); };
9358 })(amplitude, period);
9360 var elasticInOut = (function custom(a, p) {
9361 var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
9363 function elasticInOut(t) {
9364 return ((t = t * 2 - 1) < 0
9365 ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p)
9366 : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;
9369 elasticInOut.amplitude = function(a) { return custom(a, p * tau); };
9370 elasticInOut.period = function(p) { return custom(a, p); };
9372 return elasticInOut;
9373 })(amplitude, period);
9375 var defaultTiming = {
9376 time: null, // Set on use.
9382 function inherit(node, id) {
9384 while (!(timing = node.__transition) || !(timing = timing[id])) {
9385 if (!(node = node.parentNode)) {
9386 return defaultTiming.time = now(), defaultTiming;
9392 function selection_transition(name) {
9396 if (name instanceof Transition) {
9397 id = name._id, name = name._name;
9399 id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + "";
9402 for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {
9403 for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
9404 if (node = group[i]) {
9405 schedule(node, name, id, i, group, timing || inherit(node, id));
9410 return new Transition(groups, this._parents, name, id);
9413 selection.prototype.interrupt = selection_interrupt;
9414 selection.prototype.transition = selection_transition;
9416 var root$2 = [null];
9418 function active(node, name) {
9419 var schedules = node.__transition,
9424 name = name == null ? null : name + "";
9425 for (i in schedules) {
9426 if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {
9427 return new Transition([[node]], root$2, name, +i);
9435 function constant$4(x) {
9441 function BrushEvent(target, type, selection) {
9442 this.target = target;
9444 this.selection = selection;
9447 function nopropagation$1() {
9448 event.stopImmediatePropagation();
9451 function noevent$1() {
9452 event.preventDefault();
9453 event.stopImmediatePropagation();
9456 var MODE_DRAG = {name: "drag"},
9457 MODE_SPACE = {name: "space"},
9458 MODE_HANDLE = {name: "handle"},
9459 MODE_CENTER = {name: "center"};
9463 handles: ["e", "w"].map(type),
9464 input: function(x, e) { return x && [[x[0], e[0][1]], [x[1], e[1][1]]]; },
9465 output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }
9470 handles: ["n", "s"].map(type),
9471 input: function(y, e) { return y && [[e[0][0], y[0]], [e[1][0], y[1]]]; },
9472 output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }
9477 handles: ["n", "e", "s", "w", "nw", "ne", "se", "sw"].map(type),
9478 input: function(xy) { return xy; },
9479 output: function(xy) { return xy; }
9483 overlay: "crosshair",
9543 // Ignore right-click, since that should open the context menu.
9544 function defaultFilter$1() {
9545 return !event.button;
9548 function defaultExtent() {
9549 var svg = this.ownerSVGElement || this;
9550 return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];
9553 // Like d3.local, but with the name “__brush” rather than auto-generated.
9554 function local$1(node) {
9555 while (!node.__brush) if (!(node = node.parentNode)) return;
9556 return node.__brush;
9559 function empty$1(extent) {
9560 return extent[0][0] === extent[1][0]
9561 || extent[0][1] === extent[1][1];
9564 function brushSelection(node) {
9565 var state = node.__brush;
9566 return state ? state.dim.output(state.selection) : null;
9581 function brush$1(dim) {
9582 var extent = defaultExtent,
9583 filter = defaultFilter$1,
9584 listeners = dispatch(brush, "start", "brush", "end"),
9588 function brush(group) {
9590 .property("__brush", initialize)
9591 .selectAll(".overlay")
9592 .data([type("overlay")]);
9594 overlay.enter().append("rect")
9595 .attr("class", "overlay")
9596 .attr("pointer-events", "all")
9597 .attr("cursor", cursors.overlay)
9600 var extent = local$1(this).extent;
9602 .attr("x", extent[0][0])
9603 .attr("y", extent[0][1])
9604 .attr("width", extent[1][0] - extent[0][0])
9605 .attr("height", extent[1][1] - extent[0][1]);
9608 group.selectAll(".selection")
9609 .data([type("selection")])
9610 .enter().append("rect")
9611 .attr("class", "selection")
9612 .attr("cursor", cursors.selection)
9613 .attr("fill", "#777")
9614 .attr("fill-opacity", 0.3)
9615 .attr("stroke", "#fff")
9616 .attr("shape-rendering", "crispEdges");
9618 var handle = group.selectAll(".handle")
9619 .data(dim.handles, function(d) { return d.type; });
9621 handle.exit().remove();
9623 handle.enter().append("rect")
9624 .attr("class", function(d) { return "handle handle--" + d.type; })
9625 .attr("cursor", function(d) { return cursors[d.type]; });
9629 .attr("fill", "none")
9630 .attr("pointer-events", "all")
9631 .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)")
9632 .on("mousedown.brush touchstart.brush", started);
9635 brush.move = function(group, selection) {
9636 if (group.selection) {
9638 .on("start.brush", function() { emitter(this, arguments).beforestart().start(); })
9639 .on("interrupt.brush end.brush", function() { emitter(this, arguments).end(); })
9640 .tween("brush", function() {
9642 state = that.__brush,
9643 emit = emitter(that, arguments),
9644 selection0 = state.selection,
9645 selection1 = dim.input(typeof selection === "function" ? selection.apply(this, arguments) : selection, state.extent),
9646 i = d3_interpolate(selection0, selection1);
9649 state.selection = t === 1 && empty$1(selection1) ? null : i(t);
9654 return selection0 && selection1 ? tween : tween(1);
9661 state = that.__brush,
9662 selection1 = dim.input(typeof selection === "function" ? selection.apply(that, args) : selection, state.extent),
9663 emit = emitter(that, args).beforestart();
9666 state.selection = selection1 == null || empty$1(selection1) ? null : selection1;
9668 emit.start().brush().end();
9674 var group = d3_select(this),
9675 selection = local$1(this).selection;
9678 group.selectAll(".selection")
9679 .style("display", null)
9680 .attr("x", selection[0][0])
9681 .attr("y", selection[0][1])
9682 .attr("width", selection[1][0] - selection[0][0])
9683 .attr("height", selection[1][1] - selection[0][1]);
9685 group.selectAll(".handle")
9686 .style("display", null)
9687 .attr("x", function(d) { return d.type[d.type.length - 1] === "e" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; })
9688 .attr("y", function(d) { return d.type[0] === "s" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; })
9689 .attr("width", function(d) { return d.type === "n" || d.type === "s" ? selection[1][0] - selection[0][0] + handleSize : handleSize; })
9690 .attr("height", function(d) { return d.type === "e" || d.type === "w" ? selection[1][1] - selection[0][1] + handleSize : handleSize; });
9694 group.selectAll(".selection,.handle")
9695 .style("display", "none")
9698 .attr("width", null)
9699 .attr("height", null);
9703 function emitter(that, args) {
9704 return that.__brush.emitter || new Emitter(that, args);
9707 function Emitter(that, args) {
9710 this.state = that.__brush;
9714 Emitter.prototype = {
9715 beforestart: function() {
9716 if (++this.active === 1) this.state.emitter = this, this.starting = true;
9720 if (this.starting) this.starting = false, this.emit("start");
9728 if (--this.active === 0) delete this.state.emitter, this.emit("end");
9731 emit: function(type) {
9732 customEvent(new BrushEvent(brush, type, dim.output(this.state.selection)), listeners.apply, listeners, [type, this.that, this.args]);
9736 function started() {
9737 if (event.touches) { if (event.changedTouches.length < event.touches.length) return noevent$1(); }
9738 else if (touchending) return;
9739 if (!filter.apply(this, arguments)) return;
9742 type = event.target.__data__.type,
9743 mode = (event.metaKey ? type = "overlay" : type) === "selection" ? MODE_DRAG : (event.altKey ? MODE_CENTER : MODE_HANDLE),
9744 signX = dim === Y ? null : signsX[type],
9745 signY = dim === X ? null : signsY[type],
9746 state = local$1(that),
9747 extent = state.extent,
9748 selection = state.selection,
9749 W = extent[0][0], w0, w1,
9750 N = extent[0][1], n0, n1,
9751 E = extent[1][0], e0, e1,
9752 S = extent[1][1], s0, s1,
9756 shifting = signX && signY && event.shiftKey,
9759 point0 = d3_mouse(that),
9761 emit = emitter(that, arguments).beforestart();
9763 if (type === "overlay") {
9764 state.selection = selection = [
9765 [w0 = dim === Y ? W : point0[0], n0 = dim === X ? N : point0[1]],
9766 [e0 = dim === Y ? E : w0, s0 = dim === X ? S : n0]
9769 w0 = selection[0][0];
9770 n0 = selection[0][1];
9771 e0 = selection[1][0];
9772 s0 = selection[1][1];
9780 var group = d3_select(that)
9781 .attr("pointer-events", "none");
9783 var overlay = group.selectAll(".overlay")
9784 .attr("cursor", cursors[type]);
9786 if (event.touches) {
9788 .on("touchmove.brush", moved, true)
9789 .on("touchend.brush touchcancel.brush", ended, true);
9791 var view = d3_select(event.view)
9792 .on("keydown.brush", keydowned, true)
9793 .on("keyup.brush", keyupped, true)
9794 .on("mousemove.brush", moved, true)
9795 .on("mouseup.brush", ended, true);
9797 dragDisable(event.view);
9806 var point1 = d3_mouse(that);
9807 if (shifting && !lockX && !lockY) {
9808 if (Math.abs(point1[0] - point[0]) > Math.abs(point1[1] - point[1])) lockY = true;
9820 dx = point[0] - point0[0];
9821 dy = point[1] - point0[1];
9826 if (signX) dx = Math.max(W - w0, Math.min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;
9827 if (signY) dy = Math.max(N - n0, Math.min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;
9831 if (signX < 0) dx = Math.max(W - w0, Math.min(E - w0, dx)), w1 = w0 + dx, e1 = e0;
9832 else if (signX > 0) dx = Math.max(W - e0, Math.min(E - e0, dx)), w1 = w0, e1 = e0 + dx;
9833 if (signY < 0) dy = Math.max(N - n0, Math.min(S - n0, dy)), n1 = n0 + dy, s1 = s0;
9834 else if (signY > 0) dy = Math.max(N - s0, Math.min(S - s0, dy)), n1 = n0, s1 = s0 + dy;
9838 if (signX) w1 = Math.max(W, Math.min(E, w0 - dx * signX)), e1 = Math.max(W, Math.min(E, e0 + dx * signX));
9839 if (signY) n1 = Math.max(N, Math.min(S, n0 - dy * signY)), s1 = Math.max(N, Math.min(S, s0 + dy * signY));
9846 t = w0, w0 = e0, e0 = t;
9847 t = w1, w1 = e1, e1 = t;
9848 if (type in flipX) overlay.attr("cursor", cursors[type = flipX[type]]);
9853 t = n0, n0 = s0, s0 = t;
9854 t = n1, n1 = s1, s1 = t;
9855 if (type in flipY) overlay.attr("cursor", cursors[type = flipY[type]]);
9858 if (state.selection) selection = state.selection; // May be set by brush.move!
9859 if (lockX) w1 = selection[0][0], e1 = selection[1][0];
9860 if (lockY) n1 = selection[0][1], s1 = selection[1][1];
9862 if (selection[0][0] !== w1
9863 || selection[0][1] !== n1
9864 || selection[1][0] !== e1
9865 || selection[1][1] !== s1) {
9866 state.selection = [[w1, n1], [e1, s1]];
9874 if (event.touches) {
9875 if (event.touches.length) return;
9876 if (touchending) clearTimeout(touchending);
9877 touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!
9878 group.on("touchmove.brush touchend.brush touchcancel.brush", null);
9880 yesdrag(event.view, moving);
9881 view.on("keydown.brush keyup.brush mousemove.brush mouseup.brush", null);
9883 group.attr("pointer-events", "all");
9884 overlay.attr("cursor", cursors.overlay);
9885 if (state.selection) selection = state.selection; // May be set by brush.move (on start)!
9886 if (empty$1(selection)) state.selection = null, redraw.call(that);
9890 function keydowned() {
9891 switch (event.keyCode) {
9893 shifting = signX && signY;
9897 if (mode === MODE_HANDLE) {
9898 if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;
9899 if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;
9905 case 32: { // SPACE; takes priority over ALT
9906 if (mode === MODE_HANDLE || mode === MODE_CENTER) {
9907 if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx;
9908 if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy;
9910 overlay.attr("cursor", cursors.selection);
9920 function keyupped() {
9921 switch (event.keyCode) {
9924 lockX = lockY = shifting = false;
9930 if (mode === MODE_CENTER) {
9931 if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;
9932 if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;
9939 if (mode === MODE_SPACE) {
9941 if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;
9942 if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;
9945 if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;
9946 if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;
9949 overlay.attr("cursor", cursors[type]);
9960 function initialize() {
9961 var state = this.__brush || {selection: null};
9962 state.extent = extent.apply(this, arguments);
9967 brush.extent = function(_) {
9968 return arguments.length ? (extent = typeof _ === "function" ? _ : constant$4([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), brush) : extent;
9971 brush.filter = function(_) {
9972 return arguments.length ? (filter = typeof _ === "function" ? _ : constant$4(!!_), brush) : filter;
9975 brush.handleSize = function(_) {
9976 return arguments.length ? (handleSize = +_, brush) : handleSize;
9979 brush.on = function() {
9980 var value = listeners.on.apply(listeners, arguments);
9981 return value === listeners ? brush : value;
9990 var halfPi$1 = pi$1 / 2;
9991 var tau$1 = pi$1 * 2;
9992 var max$3 = Math.max;
9994 function compareValue(compare) {
9995 return function(a, b) {
9997 a.source.value + a.target.value,
9998 b.source.value + b.target.value
10006 sortSubgroups = null,
10009 function chord(matrix) {
10010 var n = matrix.length,
10012 groupIndex = d3_range(n),
10013 subgroupIndex = [],
10015 groups = chords.groups = new Array(n),
10016 subgroups = new Array(n * n),
10024 // Compute the sum.
10025 k = 0, i = -1; while (++i < n) {
10026 x = 0, j = -1; while (++j < n) {
10030 subgroupIndex.push(d3_range(n));
10035 if (sortGroups) groupIndex.sort(function(a, b) {
10036 return sortGroups(groupSums[a], groupSums[b]);
10040 if (sortSubgroups) subgroupIndex.forEach(function(d, i) {
10041 d.sort(function(a, b) {
10042 return sortSubgroups(matrix[i][a], matrix[i][b]);
10046 // Convert the sum to scaling factor for [0, 2pi].
10047 // TODO Allow start and end angle to be specified?
10048 // TODO Allow padding to be specified as percentage?
10049 k = max$3(0, tau$1 - padAngle * n) / k;
10050 dx = k ? padAngle : tau$1 / n;
10052 // Compute the start and end angle for each group and subgroup.
10053 // Note: Opera has a bug reordering object literal properties!
10054 x = 0, i = -1; while (++i < n) {
10055 x0 = x, j = -1; while (++j < n) {
10056 var di = groupIndex[i],
10057 dj = subgroupIndex[di][j],
10058 v = matrix[di][dj],
10061 subgroups[dj * n + di] = {
10073 value: groupSums[di]
10078 // Generate chords for each (non-empty) subgroup-subgroup link.
10079 i = -1; while (++i < n) {
10080 j = i - 1; while (++j < n) {
10081 var source = subgroups[j * n + i],
10082 target = subgroups[i * n + j];
10083 if (source.value || target.value) {
10084 chords.push(source.value < target.value
10085 ? {source: target, target: source}
10086 : {source: source, target: target});
10091 return sortChords ? chords.sort(sortChords) : chords;
10094 chord.padAngle = function(_) {
10095 return arguments.length ? (padAngle = max$3(0, _), chord) : padAngle;
10098 chord.sortGroups = function(_) {
10099 return arguments.length ? (sortGroups = _, chord) : sortGroups;
10102 chord.sortSubgroups = function(_) {
10103 return arguments.length ? (sortSubgroups = _, chord) : sortSubgroups;
10106 chord.sortChords = function(_) {
10107 return arguments.length ? (_ == null ? sortChords = null : (sortChords = compareValue(_))._ = _, chord) : sortChords && sortChords._;
10113 var slice$6 = Array.prototype.slice;
10115 function constant$5(x) {
10116 return function() {
10121 var pi$2 = Math.PI,
10124 tauEpsilon = tau$2 - epsilon$1;
10127 this._x0 = this._y0 = // start of current subpath
10128 this._x1 = this._y1 = null; // end of current subpath
10136 Path.prototype = path.prototype = {
10138 moveTo: function(x, y) {
10139 this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y);
10141 closePath: function() {
10142 if (this._x1 !== null) {
10143 this._x1 = this._x0, this._y1 = this._y0;
10147 lineTo: function(x, y) {
10148 this._ += "L" + (this._x1 = +x) + "," + (this._y1 = +y);
10150 quadraticCurveTo: function(x1, y1, x, y) {
10151 this._ += "Q" + (+x1) + "," + (+y1) + "," + (this._x1 = +x) + "," + (this._y1 = +y);
10153 bezierCurveTo: function(x1, y1, x2, y2, x, y) {
10154 this._ += "C" + (+x1) + "," + (+y1) + "," + (+x2) + "," + (+y2) + "," + (this._x1 = +x) + "," + (this._y1 = +y);
10156 arcTo: function(x1, y1, x2, y2, r) {
10157 x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;
10164 l01_2 = x01 * x01 + y01 * y01;
10166 // Is the radius negative? Error.
10167 if (r < 0) throw new Error("negative radius: " + r);
10169 // Is this path empty? Move to (x1,y1).
10170 if (this._x1 === null) {
10171 this._ += "M" + (this._x1 = x1) + "," + (this._y1 = y1);
10174 // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.
10175 else if (!(l01_2 > epsilon$1));
10177 // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?
10178 // Equivalently, is (x1,y1) coincident with (x2,y2)?
10179 // Or, is the radius zero? Line to (x1,y1).
10180 else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon$1) || !r) {
10181 this._ += "L" + (this._x1 = x1) + "," + (this._y1 = y1);
10184 // Otherwise, draw an arc!
10188 l21_2 = x21 * x21 + y21 * y21,
10189 l20_2 = x20 * x20 + y20 * y20,
10190 l21 = Math.sqrt(l21_2),
10191 l01 = Math.sqrt(l01_2),
10192 l = r * Math.tan((pi$2 - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),
10196 // If the start tangent is not coincident with (x0,y0), line to.
10197 if (Math.abs(t01 - 1) > epsilon$1) {
10198 this._ += "L" + (x1 + t01 * x01) + "," + (y1 + t01 * y01);
10201 this._ += "A" + r + "," + r + ",0,0," + (+(y01 * x20 > x01 * y20)) + "," + (this._x1 = x1 + t21 * x21) + "," + (this._y1 = y1 + t21 * y21);
10204 arc: function(x, y, r, a0, a1, ccw) {
10205 x = +x, y = +y, r = +r;
10206 var dx = r * Math.cos(a0),
10207 dy = r * Math.sin(a0),
10211 da = ccw ? a0 - a1 : a1 - a0;
10213 // Is the radius negative? Error.
10214 if (r < 0) throw new Error("negative radius: " + r);
10216 // Is this path empty? Move to (x0,y0).
10217 if (this._x1 === null) {
10218 this._ += "M" + x0 + "," + y0;
10221 // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).
10222 else if (Math.abs(this._x1 - x0) > epsilon$1 || Math.abs(this._y1 - y0) > epsilon$1) {
10223 this._ += "L" + x0 + "," + y0;
10226 // Is this arc empty? We’re done.
10229 // Does the angle go the wrong way? Flip the direction.
10230 if (da < 0) da = da % tau$2 + tau$2;
10232 // Is this a complete circle? Draw two arcs to complete the circle.
10233 if (da > tauEpsilon) {
10234 this._ += "A" + r + "," + r + ",0,1," + cw + "," + (x - dx) + "," + (y - dy) + "A" + r + "," + r + ",0,1," + cw + "," + (this._x1 = x0) + "," + (this._y1 = y0);
10237 // Is this arc non-empty? Draw an arc!
10238 else if (da > epsilon$1) {
10239 this._ += "A" + r + "," + r + ",0," + (+(da >= pi$2)) + "," + cw + "," + (this._x1 = x + r * Math.cos(a1)) + "," + (this._y1 = y + r * Math.sin(a1));
10242 rect: function(x, y, w, h) {
10243 this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y) + "h" + (+w) + "v" + (+h) + "h" + (-w) + "Z";
10245 toString: function() {
10250 function defaultSource(d) {
10254 function defaultTarget(d) {
10258 function defaultRadius(d) {
10262 function defaultStartAngle(d) {
10263 return d.startAngle;
10266 function defaultEndAngle(d) {
10270 function ribbon() {
10271 var source = defaultSource,
10272 target = defaultTarget,
10273 radius = defaultRadius,
10274 startAngle = defaultStartAngle,
10275 endAngle = defaultEndAngle,
10278 function ribbon() {
10280 argv = slice$6.call(arguments),
10281 s = source.apply(this, argv),
10282 t = target.apply(this, argv),
10283 sr = +radius.apply(this, (argv[0] = s, argv)),
10284 sa0 = startAngle.apply(this, argv) - halfPi$1,
10285 sa1 = endAngle.apply(this, argv) - halfPi$1,
10286 sx0 = sr * cos(sa0),
10287 sy0 = sr * sin(sa0),
10288 tr = +radius.apply(this, (argv[0] = t, argv)),
10289 ta0 = startAngle.apply(this, argv) - halfPi$1,
10290 ta1 = endAngle.apply(this, argv) - halfPi$1;
10292 if (!context) context = buffer = path();
10294 context.moveTo(sx0, sy0);
10295 context.arc(0, 0, sr, sa0, sa1);
10296 if (sa0 !== ta0 || sa1 !== ta1) { // TODO sr !== tr?
10297 context.quadraticCurveTo(0, 0, tr * cos(ta0), tr * sin(ta0));
10298 context.arc(0, 0, tr, ta0, ta1);
10300 context.quadraticCurveTo(0, 0, sx0, sy0);
10301 context.closePath();
10303 if (buffer) return context = null, buffer + "" || null;
10306 ribbon.radius = function(_) {
10307 return arguments.length ? (radius = typeof _ === "function" ? _ : constant$5(+_), ribbon) : radius;
10310 ribbon.startAngle = function(_) {
10311 return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$5(+_), ribbon) : startAngle;
10314 ribbon.endAngle = function(_) {
10315 return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$5(+_), ribbon) : endAngle;
10318 ribbon.source = function(_) {
10319 return arguments.length ? (source = _, ribbon) : source;
10322 ribbon.target = function(_) {
10323 return arguments.length ? (target = _, ribbon) : target;
10326 ribbon.context = function(_) {
10327 return arguments.length ? ((context = _ == null ? null : _), ribbon) : context;
10335 function Map$1() {}
10337 Map$1.prototype = map$3.prototype = {
10338 constructor: Map$1,
10339 has: function(key) {
10340 return (prefix + key) in this;
10342 get: function(key) {
10343 return this[prefix + key];
10345 set: function(key, value) {
10346 this[prefix + key] = value;
10349 remove: function(key) {
10350 var property = prefix + key;
10351 return property in this && delete this[property];
10353 clear: function() {
10354 for (var property in this) if (property[0] === prefix) delete this[property];
10358 for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));
10361 values: function() {
10363 for (var property in this) if (property[0] === prefix) values.push(this[property]);
10366 entries: function() {
10368 for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});
10373 for (var property in this) if (property[0] === prefix) ++size;
10376 empty: function() {
10377 for (var property in this) if (property[0] === prefix) return false;
10380 each: function(f) {
10381 for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);
10385 function map$3(object, f) {
10386 var map = new Map$1;
10388 // Copy constructor.
10389 if (object instanceof Map$1) object.each(function(value, key) { map.set(key, value); });
10391 // Index array by numeric index or specified key function.
10392 else if (Array.isArray(object)) {
10397 if (f == null) while (++i < n) map.set(i, object[i]);
10398 else while (++i < n) map.set(f(o = object[i], i, object), o);
10401 // Convert object to map.
10402 else if (object) for (var key in object) map.set(key, object[key]);
10414 function apply(array, depth, createResult, setResult) {
10415 if (depth >= keys.length) {
10416 if (sortValues != null) array.sort(sortValues);
10417 return rollup != null ? rollup(array) : array;
10422 key = keys[depth++],
10425 valuesByKey = map$3(),
10427 result = createResult();
10430 if (values = valuesByKey.get(keyValue = key(value = array[i]) + "")) {
10431 values.push(value);
10433 valuesByKey.set(keyValue, [value]);
10437 valuesByKey.each(function(values, key) {
10438 setResult(result, key, apply(values, depth, createResult, setResult));
10444 function entries(map, depth) {
10445 if (++depth > keys.length) return map;
10446 var array, sortKey = sortKeys[depth - 1];
10447 if (rollup != null && depth >= keys.length) array = map.entries();
10448 else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });
10449 return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;
10453 object: function(array) { return apply(array, 0, createObject, setObject); },
10454 map: function(array) { return apply(array, 0, createMap, setMap); },
10455 entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },
10456 key: function(d) { keys.push(d); return nest; },
10457 sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },
10458 sortValues: function(order) { sortValues = order; return nest; },
10459 rollup: function(f) { rollup = f; return nest; }
10463 function createObject() {
10467 function setObject(object, key, value) {
10468 object[key] = value;
10471 function createMap() {
10475 function setMap(map, key, value) {
10476 map.set(key, value);
10479 function Set$1() {}
10481 var proto = map$3.prototype;
10483 Set$1.prototype = set$2.prototype = {
10484 constructor: Set$1,
10486 add: function(value) {
10488 this[prefix + value] = value;
10491 remove: proto.remove,
10492 clear: proto.clear,
10493 values: proto.keys,
10495 empty: proto.empty,
10499 function set$2(object, f) {
10500 var set = new Set$1;
10502 // Copy constructor.
10503 if (object instanceof Set$1) object.each(function(value) { set.add(value); });
10505 // Otherwise, assume it’s an array.
10507 var i = -1, n = object.length;
10508 if (f == null) while (++i < n) set.add(object[i]);
10509 else while (++i < n) set.add(f(object[i], i, object));
10515 function keys$3(map) {
10517 for (var key in map) keys.push(key);
10521 function values(map) {
10523 for (var key in map) values.push(map[key]);
10527 function entries(map) {
10529 for (var key in map) entries.push({key: key, value: map[key]});
10533 var array$3 = Array.prototype;
10535 var slice$7 = array$3.slice;
10537 function ascending$1(a, b) {
10541 function area(ring) {
10542 var i = 0, n = ring.length, area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1];
10543 while (++i < n) area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1];
10547 function constant$6(x) {
10548 return function() {
10553 function contains$1(ring, hole) {
10554 var i = -1, n = hole.length, c;
10555 while (++i < n) if (c = ringContains(ring, hole[i])) return c;
10559 function ringContains(ring, point) {
10560 var x = point[0], y = point[1], contains = -1;
10561 for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) {
10562 var pi = ring[i], xi = pi[0], yi = pi[1], pj = ring[j], xj = pj[0], yj = pj[1];
10563 if (segmentContains(pi, pj, point)) return 0;
10564 if (((yi > y) !== (yj > y)) && ((x < (xj - xi) * (y - yi) / (yj - yi) + xi))) contains = -contains;
10569 function segmentContains(a, b, c) {
10570 var i; return collinear(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]);
10573 function collinear(a, b, c) {
10574 return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]);
10577 function within(p, q, r) {
10578 return p <= q && q <= r || r <= q && q <= p;
10581 function noop$3() {}
10585 [[[1.0, 1.5], [0.5, 1.0]]],
10586 [[[1.5, 1.0], [1.0, 1.5]]],
10587 [[[1.5, 1.0], [0.5, 1.0]]],
10588 [[[1.0, 0.5], [1.5, 1.0]]],
10589 [[[1.0, 1.5], [0.5, 1.0]], [[1.0, 0.5], [1.5, 1.0]]],
10590 [[[1.0, 0.5], [1.0, 1.5]]],
10591 [[[1.0, 0.5], [0.5, 1.0]]],
10592 [[[0.5, 1.0], [1.0, 0.5]]],
10593 [[[1.0, 1.5], [1.0, 0.5]]],
10594 [[[0.5, 1.0], [1.0, 0.5]], [[1.5, 1.0], [1.0, 1.5]]],
10595 [[[1.5, 1.0], [1.0, 0.5]]],
10596 [[[0.5, 1.0], [1.5, 1.0]]],
10597 [[[1.0, 1.5], [1.5, 1.0]]],
10598 [[[0.5, 1.0], [1.0, 1.5]]],
10602 function contours() {
10605 threshold = thresholdSturges,
10606 smooth = smoothLinear;
10608 function contours(values) {
10609 var tz = threshold(values);
10611 // Convert number of thresholds into uniform thresholds.
10612 if (!Array.isArray(tz)) {
10613 var domain = extent(values), start = domain[0], stop = domain[1];
10614 tz = tickStep(start, stop, tz);
10615 tz = d3_range(Math.floor(start / tz) * tz, Math.floor(stop / tz) * tz, tz);
10617 tz = tz.slice().sort(ascending$1);
10620 return tz.map(function(value) {
10621 return contour(values, value);
10625 // Accumulate, smooth contour rings, assign holes to exterior rings.
10626 // Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js
10627 function contour(values, value) {
10631 isorings(values, value, function(ring) {
10632 smooth(ring, values, value);
10633 if (area(ring) > 0) polygons.push([ring]);
10634 else holes.push(ring);
10637 holes.forEach(function(hole) {
10638 for (var i = 0, n = polygons.length, polygon; i < n; ++i) {
10639 if (contains$1((polygon = polygons[i])[0], hole) !== -1) {
10640 polygon.push(hole);
10647 type: "MultiPolygon",
10649 coordinates: polygons
10653 // Marching squares with isolines stitched into rings.
10654 // Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js
10655 function isorings(values, value, callback) {
10656 var fragmentByStart = new Array,
10657 fragmentByEnd = new Array,
10658 x, y, t0, t1, t2, t3;
10660 // Special case for the first row (y = -1, t2 = t3 = 0).
10662 t1 = values[0] >= value;
10663 cases[t1 << 1].forEach(stitch);
10664 while (++x < dx - 1) {
10665 t0 = t1, t1 = values[x + 1] >= value;
10666 cases[t0 | t1 << 1].forEach(stitch);
10668 cases[t1 << 0].forEach(stitch);
10670 // General case for the intermediate rows.
10671 while (++y < dy - 1) {
10673 t1 = values[y * dx + dx] >= value;
10674 t2 = values[y * dx] >= value;
10675 cases[t1 << 1 | t2 << 2].forEach(stitch);
10676 while (++x < dx - 1) {
10677 t0 = t1, t1 = values[y * dx + dx + x + 1] >= value;
10678 t3 = t2, t2 = values[y * dx + x + 1] >= value;
10679 cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch);
10681 cases[t1 | t2 << 3].forEach(stitch);
10684 // Special case for the last row (y = dy - 1, t0 = t1 = 0).
10686 t2 = values[y * dx] >= value;
10687 cases[t2 << 2].forEach(stitch);
10688 while (++x < dx - 1) {
10689 t3 = t2, t2 = values[y * dx + x + 1] >= value;
10690 cases[t2 << 2 | t3 << 3].forEach(stitch);
10692 cases[t2 << 3].forEach(stitch);
10694 function stitch(line) {
10695 var start = [line[0][0] + x, line[0][1] + y],
10696 end = [line[1][0] + x, line[1][1] + y],
10697 startIndex = index(start),
10698 endIndex = index(end),
10700 if (f = fragmentByEnd[startIndex]) {
10701 if (g = fragmentByStart[endIndex]) {
10702 delete fragmentByEnd[f.end];
10703 delete fragmentByStart[g.start];
10708 fragmentByStart[f.start] = fragmentByEnd[g.end] = {start: f.start, end: g.end, ring: f.ring.concat(g.ring)};
10711 delete fragmentByEnd[f.end];
10713 fragmentByEnd[f.end = endIndex] = f;
10715 } else if (f = fragmentByStart[endIndex]) {
10716 if (g = fragmentByEnd[startIndex]) {
10717 delete fragmentByStart[f.start];
10718 delete fragmentByEnd[g.end];
10723 fragmentByStart[g.start] = fragmentByEnd[f.end] = {start: g.start, end: f.end, ring: g.ring.concat(f.ring)};
10726 delete fragmentByStart[f.start];
10727 f.ring.unshift(start);
10728 fragmentByStart[f.start = startIndex] = f;
10731 fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {start: startIndex, end: endIndex, ring: [start, end]};
10736 function index(point) {
10737 return point[0] * 2 + point[1] * (dx + 1) * 4;
10740 function smoothLinear(ring, values, value) {
10741 ring.forEach(function(point) {
10747 v1 = values[yt * dx + xt];
10748 if (x > 0 && x < dx && xt === x) {
10749 v0 = values[yt * dx + xt - 1];
10750 point[0] = x + (value - v0) / (v1 - v0) - 0.5;
10752 if (y > 0 && y < dy && yt === y) {
10753 v0 = values[(yt - 1) * dx + xt];
10754 point[1] = y + (value - v0) / (v1 - v0) - 0.5;
10759 contours.contour = contour;
10761 contours.size = function(_) {
10762 if (!arguments.length) return [dx, dy];
10763 var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);
10764 if (!(_0 > 0) || !(_1 > 0)) throw new Error("invalid size");
10765 return dx = _0, dy = _1, contours;
10768 contours.thresholds = function(_) {
10769 return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant$6(slice$7.call(_)) : constant$6(_), contours) : threshold;
10772 contours.smooth = function(_) {
10773 return arguments.length ? (smooth = _ ? smoothLinear : noop$3, contours) : smooth === smoothLinear;
10779 // TODO Optimize edge cases.
10780 // TODO Optimize index calculation.
10781 // TODO Optimize arguments.
10782 function blurX(source, target, r) {
10783 var n = source.width,
10786 for (var j = 0; j < m; ++j) {
10787 for (var i = 0, sr = 0; i < n + r; ++i) {
10789 sr += source.data[i + j * n];
10793 sr -= source.data[i - w + j * n];
10795 target.data[i - r + j * n] = sr / Math.min(i + 1, n - 1 + w - i, w);
10801 // TODO Optimize edge cases.
10802 // TODO Optimize index calculation.
10803 // TODO Optimize arguments.
10804 function blurY(source, target, r) {
10805 var n = source.width,
10808 for (var i = 0; i < n; ++i) {
10809 for (var j = 0, sr = 0; j < m + r; ++j) {
10811 sr += source.data[i + j * n];
10815 sr -= source.data[i + (j - w) * n];
10817 target.data[i + (j - r) * n] = sr / Math.min(j + 1, m - 1 + w - j, w);
10823 function defaultX(d) {
10827 function defaultY(d) {
10831 function defaultWeight() {
10835 function density() {
10838 weight = defaultWeight,
10841 r = 20, // blur radius
10842 k = 2, // log2(grid cell size)
10843 o = r * 3, // grid offset, to pad for blur
10844 n = (dx + o * 2) >> k, // grid width
10845 m = (dy + o * 2) >> k, // grid height
10846 threshold = constant$6(20);
10848 function density(data) {
10849 var values0 = new Float32Array(n * m),
10850 values1 = new Float32Array(n * m);
10852 data.forEach(function(d, i, data) {
10853 var xi = (+x(d, i, data) + o) >> k,
10854 yi = (+y(d, i, data) + o) >> k,
10855 wi = +weight(d, i, data);
10856 if (xi >= 0 && xi < n && yi >= 0 && yi < m) {
10857 values0[xi + yi * n] += wi;
10862 blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);
10863 blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);
10864 blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);
10865 blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);
10866 blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);
10867 blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);
10869 var tz = threshold(values0);
10871 // Convert number of thresholds into uniform thresholds.
10872 if (!Array.isArray(tz)) {
10873 var stop = max$2(values0);
10874 tz = tickStep(0, stop, tz);
10875 tz = d3_range(0, Math.floor(stop / tz) * tz, tz);
10886 function transform(geometry) {
10887 geometry.value *= Math.pow(2, -2 * k); // Density in points per square pixel.
10888 geometry.coordinates.forEach(transformPolygon);
10892 function transformPolygon(coordinates) {
10893 coordinates.forEach(transformRing);
10896 function transformRing(coordinates) {
10897 coordinates.forEach(transformPoint);
10901 function transformPoint(coordinates) {
10902 coordinates[0] = coordinates[0] * Math.pow(2, k) - o;
10903 coordinates[1] = coordinates[1] * Math.pow(2, k) - o;
10906 function resize() {
10908 n = (dx + o * 2) >> k;
10909 m = (dy + o * 2) >> k;
10913 density.x = function(_) {
10914 return arguments.length ? (x = typeof _ === "function" ? _ : constant$6(+_), density) : x;
10917 density.y = function(_) {
10918 return arguments.length ? (y = typeof _ === "function" ? _ : constant$6(+_), density) : y;
10921 density.weight = function(_) {
10922 return arguments.length ? (weight = typeof _ === "function" ? _ : constant$6(+_), density) : weight;
10925 density.size = function(_) {
10926 if (!arguments.length) return [dx, dy];
10927 var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);
10928 if (!(_0 >= 0) && !(_0 >= 0)) throw new Error("invalid size");
10929 return dx = _0, dy = _1, resize();
10932 density.cellSize = function(_) {
10933 if (!arguments.length) return 1 << k;
10934 if (!((_ = +_) >= 1)) throw new Error("invalid cell size");
10935 return k = Math.floor(Math.log(_) / Math.LN2), resize();
10938 density.thresholds = function(_) {
10939 return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant$6(slice$7.call(_)) : constant$6(_), density) : threshold;
10942 density.bandwidth = function(_) {
10943 if (!arguments.length) return Math.sqrt(r * (r + 1));
10944 if (!((_ = +_) >= 0)) throw new Error("invalid bandwidth");
10945 return r = Math.round((Math.sqrt(4 * _ * _ + 1) - 1) / 2), resize();
10957 function objectConverter(columns) {
10958 return new Function("d", "return {" + columns.map(function(name, i) {
10959 return JSON.stringify(name) + ": d[" + i + "]";
10960 }).join(",") + "}");
10963 function customConverter(columns, f) {
10964 var object = objectConverter(columns);
10965 return function(row, i) {
10966 return f(object(row), i, columns);
10970 // Compute unique columns in order of discovery.
10971 function inferColumns(rows) {
10972 var columnSet = Object.create(null),
10975 rows.forEach(function(row) {
10976 for (var column in row) {
10977 if (!(column in columnSet)) {
10978 columns.push(columnSet[column] = column);
10986 function pad(value, width) {
10987 var s = value + "", length = s.length;
10988 return length < width ? new Array(width - length + 1).join(0) + s : s;
10991 function formatYear(year) {
10992 return year < 0 ? "-" + pad(-year, 6)
10993 : year > 9999 ? "+" + pad(year, 6)
10997 function formatDate(date) {
10998 var hours = date.getUTCHours(),
10999 minutes = date.getUTCMinutes(),
11000 seconds = date.getUTCSeconds(),
11001 milliseconds = date.getUTCMilliseconds();
11002 return isNaN(date) ? "Invalid Date"
11003 : formatYear(date.getUTCFullYear(), 4) + "-" + pad(date.getUTCMonth() + 1, 2) + "-" + pad(date.getUTCDate(), 2)
11004 + (milliseconds ? "T" + pad(hours, 2) + ":" + pad(minutes, 2) + ":" + pad(seconds, 2) + "." + pad(milliseconds, 3) + "Z"
11005 : seconds ? "T" + pad(hours, 2) + ":" + pad(minutes, 2) + ":" + pad(seconds, 2) + "Z"
11006 : minutes || hours ? "T" + pad(hours, 2) + ":" + pad(minutes, 2) + "Z"
11010 function dsvFormat(delimiter) {
11011 var reFormat = new RegExp("[\"" + delimiter + "\n\r]"),
11012 DELIMITER = delimiter.charCodeAt(0);
11014 function parse(text, f) {
11015 var convert, columns, rows = parseRows(text, function(row, i) {
11016 if (convert) return convert(row, i - 1);
11017 columns = row, convert = f ? customConverter(row, f) : objectConverter(row);
11019 rows.columns = columns || [];
11023 function parseRows(text, f) {
11024 var rows = [], // output rows
11026 I = 0, // current character index
11027 n = 0, // current line number
11028 t, // current token
11029 eof = N <= 0, // current token followed by EOF?
11030 eol = false; // current token followed by EOL?
11032 // Strip the trailing newline.
11033 if (text.charCodeAt(N - 1) === NEWLINE) --N;
11034 if (text.charCodeAt(N - 1) === RETURN) --N;
11037 if (eof) return EOF;
11038 if (eol) return eol = false, EOL;
11040 // Unescape quotes.
11042 if (text.charCodeAt(j) === QUOTE) {
11043 while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);
11044 if ((i = I) >= N) eof = true;
11045 else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;
11046 else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }
11047 return text.slice(j + 1, i - 1).replace(/""/g, "\"");
11050 // Find next delimiter or newline.
11052 if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;
11053 else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }
11054 else if (c !== DELIMITER) continue;
11055 return text.slice(j, i);
11058 // Return last token before EOF.
11059 return eof = true, text.slice(j, N);
11062 while ((t = token()) !== EOF) {
11064 while (t !== EOL && t !== EOF) row.push(t), t = token();
11065 if (f && (row = f(row, n++)) == null) continue;
11072 function preformatBody(rows, columns) {
11073 return rows.map(function(row) {
11074 return columns.map(function(column) {
11075 return formatValue(row[column]);
11076 }).join(delimiter);
11080 function format(rows, columns) {
11081 if (columns == null) columns = inferColumns(rows);
11082 return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join("\n");
11085 function formatBody(rows, columns) {
11086 if (columns == null) columns = inferColumns(rows);
11087 return preformatBody(rows, columns).join("\n");
11090 function formatRows(rows) {
11091 return rows.map(formatRow).join("\n");
11094 function formatRow(row) {
11095 return row.map(formatValue).join(delimiter);
11098 function formatValue(value) {
11099 return value == null ? ""
11100 : value instanceof Date ? formatDate(value)
11101 : reFormat.test(value += "") ? "\"" + value.replace(/"/g, "\"\"") + "\""
11107 parseRows: parseRows,
11109 formatBody: formatBody,
11110 formatRows: formatRows
11114 var csv = dsvFormat(",");
11116 var csvParse = csv.parse;
11117 var csvParseRows = csv.parseRows;
11118 var csvFormat = csv.format;
11119 var csvFormatBody = csv.formatBody;
11120 var csvFormatRows = csv.formatRows;
11122 var tsv = dsvFormat("\t");
11124 var tsvParse = tsv.parse;
11125 var tsvParseRows = tsv.parseRows;
11126 var tsvFormat = tsv.format;
11127 var tsvFormatBody = tsv.formatBody;
11128 var tsvFormatRows = tsv.formatRows;
11130 function autoType(object) {
11131 for (var key in object) {
11132 var value = object[key].trim(), number;
11133 if (!value) value = null;
11134 else if (value === "true") value = true;
11135 else if (value === "false") value = false;
11136 else if (value === "NaN") value = NaN;
11137 else if (!isNaN(number = +value)) value = number;
11138 else if (/^([-+]\d{2})?\d{4}(-\d{2}(-\d{2})?)?(T\d{2}:\d{2}(:\d{2}(\.\d{3})?)?(Z|[-+]\d{2}:\d{2})?)?$/.test(value)) value = new Date(value);
11140 object[key] = value;
11145 function responseBlob(response) {
11146 if (!response.ok) throw new Error(response.status + " " + response.statusText);
11147 return response.blob();
11150 function blob(input, init) {
11151 return fetch(input, init).then(responseBlob);
11154 function responseArrayBuffer(response) {
11155 if (!response.ok) throw new Error(response.status + " " + response.statusText);
11156 return response.arrayBuffer();
11159 function buffer(input, init) {
11160 return fetch(input, init).then(responseArrayBuffer);
11163 function responseText(response) {
11164 if (!response.ok) throw new Error(response.status + " " + response.statusText);
11165 return response.text();
11168 function d3_text(input, init) {
11169 return fetch(input, init).then(responseText);
11172 function dsvParse(parse) {
11173 return function(input, init, row) {
11174 if (arguments.length === 2 && typeof init === "function") row = init, init = undefined;
11175 return d3_text(input, init).then(function(response) {
11176 return parse(response, row);
11181 function dsv(delimiter, input, init, row) {
11182 if (arguments.length === 3 && typeof init === "function") row = init, init = undefined;
11183 var format = dsvFormat(delimiter);
11184 return d3_text(input, init).then(function(response) {
11185 return format.parse(response, row);
11189 var csv$1 = dsvParse(csvParse);
11190 var tsv$1 = dsvParse(tsvParse);
11192 function image(input, init) {
11193 return new Promise(function(resolve, reject) {
11194 var image = new Image;
11195 for (var key in init) image[key] = init[key];
11196 image.onerror = reject;
11197 image.onload = function() { resolve(image); };
11202 function responseJson(response) {
11203 if (!response.ok) throw new Error(response.status + " " + response.statusText);
11204 return response.json();
11207 function d3_json(input, init) {
11208 return fetch(input, init).then(responseJson);
11211 function parser(type) {
11212 return function(input, init) {
11213 return d3_text(input, init).then(function(text) {
11214 return (new DOMParser).parseFromString(text, type);
11219 var d3_xml = parser("application/xml");
11221 var html = parser("text/html");
11223 var svg = parser("image/svg+xml");
11225 function center$1(x, y) {
11228 if (x == null) x = 0;
11229 if (y == null) y = 0;
11238 for (i = 0; i < n; ++i) {
11239 node = nodes[i], sx += node.x, sy += node.y;
11242 for (sx = sx / n - x, sy = sy / n - y, i = 0; i < n; ++i) {
11243 node = nodes[i], node.x -= sx, node.y -= sy;
11247 force.initialize = function(_) {
11251 force.x = function(_) {
11252 return arguments.length ? (x = +_, force) : x;
11255 force.y = function(_) {
11256 return arguments.length ? (y = +_, force) : y;
11262 function constant$7(x) {
11263 return function() {
11268 function jiggle() {
11269 return (Math.random() - 0.5) * 1e-6;
11272 function tree_add(d) {
11273 var x = +this._x.call(null, d),
11274 y = +this._y.call(null, d);
11275 return add(this.cover(x, y), x, y, d);
11278 function add(tree, x, y, d) {
11279 if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points
11297 // If the tree is empty, initialize the root as a leaf.
11298 if (!node) return tree._root = leaf, tree;
11300 // Find the existing leaf for the new point, or add it.
11301 while (node.length) {
11302 if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;
11303 if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;
11304 if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;
11307 // Is the new point is exactly coincident with the existing point?
11308 xp = +tree._x.call(null, node.data);
11309 yp = +tree._y.call(null, node.data);
11310 if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;
11312 // Otherwise, split the leaf node until the old and new point are separated.
11314 parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);
11315 if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;
11316 if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;
11317 } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));
11318 return parent[j] = node, parent[i] = leaf, tree;
11321 function addAll(data) {
11322 var d, i, n = data.length,
11332 // Compute the points and their extent.
11333 for (i = 0; i < n; ++i) {
11334 if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;
11337 if (x < x0) x0 = x;
11338 if (x > x1) x1 = x;
11339 if (y < y0) y0 = y;
11340 if (y > y1) y1 = y;
11343 // If there were no (valid) points, abort.
11344 if (x0 > x1 || y0 > y1) return this;
11346 // Expand the tree to cover the new points.
11347 this.cover(x0, y0).cover(x1, y1);
11349 // Add the new points.
11350 for (i = 0; i < n; ++i) {
11351 add(this, xz[i], yz[i], data[i]);
11357 function tree_cover(x, y) {
11358 if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points
11365 // If the quadtree has no extent, initialize them.
11366 // Integer extent are necessary so that if we later double the extent,
11367 // the existing quadrant boundaries don’t change due to floating point error!
11369 x1 = (x0 = Math.floor(x)) + 1;
11370 y1 = (y0 = Math.floor(y)) + 1;
11373 // Otherwise, double repeatedly to cover.
11380 while (x0 > x || x >= x1 || y0 > y || y >= y1) {
11381 i = (y < y0) << 1 | (x < x0);
11382 parent = new Array(4), parent[i] = node, node = parent, z *= 2;
11384 case 0: x1 = x0 + z, y1 = y0 + z; break;
11385 case 1: x0 = x1 - z, y1 = y0 + z; break;
11386 case 2: x1 = x0 + z, y0 = y1 - z; break;
11387 case 3: x0 = x1 - z, y0 = y1 - z; break;
11391 if (this._root && this._root.length) this._root = node;
11401 function tree_data() {
11403 this.visit(function(node) {
11404 if (!node.length) do data.push(node.data); while (node = node.next)
11409 function tree_extent(_) {
11410 return arguments.length
11411 ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])
11412 : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];
11415 function Quad(node, x0, y0, x1, y1) {
11423 function tree_find(x, y, radius) {
11438 if (node) quads.push(new Quad(node, x0, y0, x3, y3));
11439 if (radius == null) radius = Infinity;
11441 x0 = x - radius, y0 = y - radius;
11442 x3 = x + radius, y3 = y + radius;
11446 while (q = quads.pop()) {
11448 // Stop searching if this quadrant can’t contain a closer node.
11449 if (!(node = q.node)
11450 || (x1 = q.x0) > x3
11451 || (y1 = q.y0) > y3
11452 || (x2 = q.x1) < x0
11453 || (y2 = q.y1) < y0) continue;
11455 // Bisect the current quadrant.
11457 var xm = (x1 + x2) / 2,
11458 ym = (y1 + y2) / 2;
11461 new Quad(node[3], xm, ym, x2, y2),
11462 new Quad(node[2], x1, ym, xm, y2),
11463 new Quad(node[1], xm, y1, x2, ym),
11464 new Quad(node[0], x1, y1, xm, ym)
11467 // Visit the closest quadrant first.
11468 if (i = (y >= ym) << 1 | (x >= xm)) {
11469 q = quads[quads.length - 1];
11470 quads[quads.length - 1] = quads[quads.length - 1 - i];
11471 quads[quads.length - 1 - i] = q;
11475 // Visit this point. (Visiting coincident points isn’t necessary!)
11477 var dx = x - +this._x.call(null, node.data),
11478 dy = y - +this._y.call(null, node.data),
11479 d2 = dx * dx + dy * dy;
11481 var d = Math.sqrt(radius = d2);
11482 x0 = x - d, y0 = y - d;
11483 x3 = x + d, y3 = y + d;
11492 function tree_remove(d) {
11493 if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points
11513 // If the tree is empty, initialize the root as a leaf.
11514 if (!node) return this;
11516 // Find the leaf node for the point.
11517 // While descending, also retain the deepest parent with a non-removed sibling.
11518 if (node.length) while (true) {
11519 if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;
11520 if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;
11521 if (!(parent = node, node = node[i = bottom << 1 | right])) return this;
11522 if (!node.length) break;
11523 if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;
11526 // Find the point to remove.
11527 while (node.data !== d) if (!(previous = node, node = node.next)) return this;
11528 if (next = node.next) delete node.next;
11530 // If there are multiple coincident points, remove just the point.
11531 if (previous) return (next ? previous.next = next : delete previous.next), this;
11533 // If this is the root point, remove it.
11534 if (!parent) return this._root = next, this;
11536 // Remove this leaf.
11537 next ? parent[i] = next : delete parent[i];
11539 // If the parent now contains exactly one leaf, collapse superfluous parents.
11540 if ((node = parent[0] || parent[1] || parent[2] || parent[3])
11541 && node === (parent[3] || parent[2] || parent[1] || parent[0])
11543 if (retainer) retainer[j] = node;
11544 else this._root = node;
11550 function removeAll(data) {
11551 for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);
11555 function tree_root() {
11559 function tree_size() {
11561 this.visit(function(node) {
11562 if (!node.length) do ++size; while (node = node.next)
11567 function tree_visit(callback) {
11568 var quads = [], q, node = this._root, child, x0, y0, x1, y1;
11569 if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));
11570 while (q = quads.pop()) {
11571 if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {
11572 var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;
11573 if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));
11574 if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));
11575 if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));
11576 if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));
11582 function tree_visitAfter(callback) {
11583 var quads = [], next = [], q;
11584 if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));
11585 while (q = quads.pop()) {
11588 var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;
11589 if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));
11590 if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));
11591 if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));
11592 if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));
11596 while (q = next.pop()) {
11597 callback(q.node, q.x0, q.y0, q.x1, q.y1);
11602 function defaultX$1(d) {
11606 function tree_x(_) {
11607 return arguments.length ? (this._x = _, this) : this._x;
11610 function defaultY$1(d) {
11614 function tree_y(_) {
11615 return arguments.length ? (this._y = _, this) : this._y;
11618 function quadtree(nodes, x, y) {
11619 var tree = new Quadtree(x == null ? defaultX$1 : x, y == null ? defaultY$1 : y, NaN, NaN, NaN, NaN);
11620 return nodes == null ? tree : tree.addAll(nodes);
11623 function Quadtree(x, y, x0, y0, x1, y1) {
11630 this._root = undefined;
11633 function leaf_copy(leaf) {
11634 var copy = {data: leaf.data}, next = copy;
11635 while (leaf = leaf.next) next = next.next = {data: leaf.data};
11639 var treeProto = quadtree.prototype = Quadtree.prototype;
11641 treeProto.copy = function() {
11642 var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),
11647 if (!node) return copy;
11649 if (!node.length) return copy._root = leaf_copy(node), copy;
11651 nodes = [{source: node, target: copy._root = new Array(4)}];
11652 while (node = nodes.pop()) {
11653 for (var i = 0; i < 4; ++i) {
11654 if (child = node.source[i]) {
11655 if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});
11656 else node.target[i] = leaf_copy(child);
11664 treeProto.add = tree_add;
11665 treeProto.addAll = addAll;
11666 treeProto.cover = tree_cover;
11667 treeProto.data = tree_data;
11668 treeProto.extent = tree_extent;
11669 treeProto.find = tree_find;
11670 treeProto.remove = tree_remove;
11671 treeProto.removeAll = removeAll;
11672 treeProto.root = tree_root;
11673 treeProto.size = tree_size;
11674 treeProto.visit = tree_visit;
11675 treeProto.visitAfter = tree_visitAfter;
11676 treeProto.x = tree_x;
11677 treeProto.y = tree_y;
11687 function collide(radius) {
11693 if (typeof radius !== "function") radius = constant$7(radius == null ? 1 : +radius);
11696 var i, n = nodes.length,
11704 for (var k = 0; k < iterations; ++k) {
11705 tree = quadtree(nodes, x, y).visitAfter(prepare);
11706 for (i = 0; i < n; ++i) {
11708 ri = radii[node.index], ri2 = ri * ri;
11709 xi = node.x + node.vx;
11710 yi = node.y + node.vy;
11715 function apply(quad, x0, y0, x1, y1) {
11716 var data = quad.data, rj = quad.r, r = ri + rj;
11718 if (data.index > node.index) {
11719 var x = xi - data.x - data.vx,
11720 y = yi - data.y - data.vy,
11723 if (x === 0) x = jiggle(), l += x * x;
11724 if (y === 0) y = jiggle(), l += y * y;
11725 l = (r - (l = Math.sqrt(l))) / l * strength;
11726 node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));
11727 node.vy += (y *= l) * r;
11728 data.vx -= x * (r = 1 - r);
11734 return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;
11738 function prepare(quad) {
11739 if (quad.data) return quad.r = radii[quad.data.index];
11740 for (var i = quad.r = 0; i < 4; ++i) {
11741 if (quad[i] && quad[i].r > quad.r) {
11742 quad.r = quad[i].r;
11747 function initialize() {
11748 if (!nodes) return;
11749 var i, n = nodes.length, node;
11750 radii = new Array(n);
11751 for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes);
11754 force.initialize = function(_) {
11759 force.iterations = function(_) {
11760 return arguments.length ? (iterations = +_, force) : iterations;
11763 force.strength = function(_) {
11764 return arguments.length ? (strength = +_, force) : strength;
11767 force.radius = function(_) {
11768 return arguments.length ? (radius = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : radius;
11774 function index(d) {
11778 function find(nodeById, nodeId) {
11779 var node = nodeById.get(nodeId);
11780 if (!node) throw new Error("missing: " + nodeId);
11784 function link(links) {
11786 strength = defaultStrength,
11788 distance = constant$7(30),
11795 if (links == null) links = [];
11797 function defaultStrength(link) {
11798 return 1 / Math.min(count[link.source.index], count[link.target.index]);
11801 function force(alpha) {
11802 for (var k = 0, n = links.length; k < iterations; ++k) {
11803 for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {
11804 link = links[i], source = link.source, target = link.target;
11805 x = target.x + target.vx - source.x - source.vx || jiggle();
11806 y = target.y + target.vy - source.y - source.vy || jiggle();
11807 l = Math.sqrt(x * x + y * y);
11808 l = (l - distances[i]) / l * alpha * strengths[i];
11810 target.vx -= x * (b = bias[i]);
11811 target.vy -= y * b;
11812 source.vx += x * (b = 1 - b);
11813 source.vy += y * b;
11818 function initialize() {
11819 if (!nodes) return;
11824 nodeById = map$3(nodes, id),
11827 for (i = 0, count = new Array(n); i < m; ++i) {
11828 link = links[i], link.index = i;
11829 if (typeof link.source !== "object") link.source = find(nodeById, link.source);
11830 if (typeof link.target !== "object") link.target = find(nodeById, link.target);
11831 count[link.source.index] = (count[link.source.index] || 0) + 1;
11832 count[link.target.index] = (count[link.target.index] || 0) + 1;
11835 for (i = 0, bias = new Array(m); i < m; ++i) {
11836 link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);
11839 strengths = new Array(m), initializeStrength();
11840 distances = new Array(m), initializeDistance();
11843 function initializeStrength() {
11844 if (!nodes) return;
11846 for (var i = 0, n = links.length; i < n; ++i) {
11847 strengths[i] = +strength(links[i], i, links);
11851 function initializeDistance() {
11852 if (!nodes) return;
11854 for (var i = 0, n = links.length; i < n; ++i) {
11855 distances[i] = +distance(links[i], i, links);
11859 force.initialize = function(_) {
11864 force.links = function(_) {
11865 return arguments.length ? (links = _, initialize(), force) : links;
11868 force.id = function(_) {
11869 return arguments.length ? (id = _, force) : id;
11872 force.iterations = function(_) {
11873 return arguments.length ? (iterations = +_, force) : iterations;
11876 force.strength = function(_) {
11877 return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initializeStrength(), force) : strength;
11880 force.distance = function(_) {
11881 return arguments.length ? (distance = typeof _ === "function" ? _ : constant$7(+_), initializeDistance(), force) : distance;
11895 var initialRadius = 10,
11896 initialAngle = Math.PI * (3 - Math.sqrt(5));
11898 function simulation(nodes) {
11902 alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),
11904 velocityDecay = 0.6,
11906 stepper = timer(step),
11907 event = dispatch("tick", "end");
11909 if (nodes == null) nodes = [];
11913 event.call("tick", simulation);
11914 if (alpha < alphaMin) {
11916 event.call("end", simulation);
11920 function tick(iterations) {
11921 var i, n = nodes.length, node;
11923 if (iterations === undefined) iterations = 1;
11925 for (var k = 0; k < iterations; ++k) {
11926 alpha += (alphaTarget - alpha) * alphaDecay;
11928 forces.each(function (force) {
11932 for (i = 0; i < n; ++i) {
11934 if (node.fx == null) node.x += node.vx *= velocityDecay;
11935 else node.x = node.fx, node.vx = 0;
11936 if (node.fy == null) node.y += node.vy *= velocityDecay;
11937 else node.y = node.fy, node.vy = 0;
11944 function initializeNodes() {
11945 for (var i = 0, n = nodes.length, node; i < n; ++i) {
11946 node = nodes[i], node.index = i;
11947 if (node.fx != null) node.x = node.fx;
11948 if (node.fy != null) node.y = node.fy;
11949 if (isNaN(node.x) || isNaN(node.y)) {
11950 var radius = initialRadius * Math.sqrt(i), angle = i * initialAngle;
11951 node.x = radius * Math.cos(angle);
11952 node.y = radius * Math.sin(angle);
11954 if (isNaN(node.vx) || isNaN(node.vy)) {
11955 node.vx = node.vy = 0;
11960 function initializeForce(force) {
11961 if (force.initialize) force.initialize(nodes);
11967 return simulation = {
11970 restart: function() {
11971 return stepper.restart(step), simulation;
11975 return stepper.stop(), simulation;
11978 nodes: function(_) {
11979 return arguments.length ? (nodes = _, initializeNodes(), forces.each(initializeForce), simulation) : nodes;
11982 alpha: function(_) {
11983 return arguments.length ? (alpha = +_, simulation) : alpha;
11986 alphaMin: function(_) {
11987 return arguments.length ? (alphaMin = +_, simulation) : alphaMin;
11990 alphaDecay: function(_) {
11991 return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;
11994 alphaTarget: function(_) {
11995 return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;
11998 velocityDecay: function(_) {
11999 return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;
12002 force: function(name, _) {
12003 return arguments.length > 1 ? ((_ == null ? forces.remove(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);
12006 find: function(x, y, radius) {
12015 if (radius == null) radius = Infinity;
12016 else radius *= radius;
12018 for (i = 0; i < n; ++i) {
12022 d2 = dx * dx + dy * dy;
12023 if (d2 < radius) closest = node, radius = d2;
12029 on: function(name, _) {
12030 return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);
12035 function manyBody() {
12039 strength = constant$7(-30),
12042 distanceMax2 = Infinity,
12045 function force(_) {
12046 var i, n = nodes.length, tree = quadtree(nodes, x$1, y$1).visitAfter(accumulate);
12047 for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);
12050 function initialize() {
12051 if (!nodes) return;
12052 var i, n = nodes.length, node;
12053 strengths = new Array(n);
12054 for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes);
12057 function accumulate(quad) {
12058 var strength = 0, q, c, weight = 0, x, y, i;
12060 // For internal nodes, accumulate forces from child quadrants.
12062 for (x = y = i = 0; i < 4; ++i) {
12063 if ((q = quad[i]) && (c = Math.abs(q.value))) {
12064 strength += q.value, weight += c, x += c * q.x, y += c * q.y;
12067 quad.x = x / weight;
12068 quad.y = y / weight;
12071 // For leaf nodes, accumulate forces from coincident quadrants.
12076 do strength += strengths[q.data.index];
12077 while (q = q.next);
12080 quad.value = strength;
12083 function apply(quad, x1, _, x2) {
12084 if (!quad.value) return true;
12086 var x = quad.x - node.x,
12087 y = quad.y - node.y,
12091 // Apply the Barnes-Hut approximation if possible.
12092 // Limit forces for very close nodes; randomize direction if coincident.
12093 if (w * w / theta2 < l) {
12094 if (l < distanceMax2) {
12095 if (x === 0) x = jiggle(), l += x * x;
12096 if (y === 0) y = jiggle(), l += y * y;
12097 if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);
12098 node.vx += x * quad.value * alpha / l;
12099 node.vy += y * quad.value * alpha / l;
12104 // Otherwise, process points directly.
12105 else if (quad.length || l >= distanceMax2) return;
12107 // Limit forces for very close nodes; randomize direction if coincident.
12108 if (quad.data !== node || quad.next) {
12109 if (x === 0) x = jiggle(), l += x * x;
12110 if (y === 0) y = jiggle(), l += y * y;
12111 if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);
12114 do if (quad.data !== node) {
12115 w = strengths[quad.data.index] * alpha / l;
12118 } while (quad = quad.next);
12121 force.initialize = function(_) {
12126 force.strength = function(_) {
12127 return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength;
12130 force.distanceMin = function(_) {
12131 return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);
12134 force.distanceMax = function(_) {
12135 return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);
12138 force.theta = function(_) {
12139 return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);
12145 function radial(radius, x, y) {
12147 strength = constant$7(0.1),
12151 if (typeof radius !== "function") radius = constant$7(+radius);
12152 if (x == null) x = 0;
12153 if (y == null) y = 0;
12155 function force(alpha) {
12156 for (var i = 0, n = nodes.length; i < n; ++i) {
12157 var node = nodes[i],
12158 dx = node.x - x || 1e-6,
12159 dy = node.y - y || 1e-6,
12160 r = Math.sqrt(dx * dx + dy * dy),
12161 k = (radiuses[i] - r) * strengths[i] * alpha / r;
12167 function initialize() {
12168 if (!nodes) return;
12169 var i, n = nodes.length;
12170 strengths = new Array(n);
12171 radiuses = new Array(n);
12172 for (i = 0; i < n; ++i) {
12173 radiuses[i] = +radius(nodes[i], i, nodes);
12174 strengths[i] = isNaN(radiuses[i]) ? 0 : +strength(nodes[i], i, nodes);
12178 force.initialize = function(_) {
12179 nodes = _, initialize();
12182 force.strength = function(_) {
12183 return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength;
12186 force.radius = function(_) {
12187 return arguments.length ? (radius = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : radius;
12190 force.x = function(_) {
12191 return arguments.length ? (x = +_, force) : x;
12194 force.y = function(_) {
12195 return arguments.length ? (y = +_, force) : y;
12202 var strength = constant$7(0.1),
12207 if (typeof x !== "function") x = constant$7(x == null ? 0 : +x);
12209 function force(alpha) {
12210 for (var i = 0, n = nodes.length, node; i < n; ++i) {
12211 node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;
12215 function initialize() {
12216 if (!nodes) return;
12217 var i, n = nodes.length;
12218 strengths = new Array(n);
12220 for (i = 0; i < n; ++i) {
12221 strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);
12225 force.initialize = function(_) {
12230 force.strength = function(_) {
12231 return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength;
12234 force.x = function(_) {
12235 return arguments.length ? (x = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : x;
12242 var strength = constant$7(0.1),
12247 if (typeof y !== "function") y = constant$7(y == null ? 0 : +y);
12249 function force(alpha) {
12250 for (var i = 0, n = nodes.length, node; i < n; ++i) {
12251 node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;
12255 function initialize() {
12256 if (!nodes) return;
12257 var i, n = nodes.length;
12258 strengths = new Array(n);
12260 for (i = 0; i < n; ++i) {
12261 strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);
12265 force.initialize = function(_) {
12270 force.strength = function(_) {
12271 return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength;
12274 force.y = function(_) {
12275 return arguments.length ? (y = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : y;
12281 // Computes the decimal coefficient and exponent of the specified number x with
12282 // significant digits p, where x is positive and p is in [1, 21] or undefined.
12283 // For example, formatDecimal(1.23) returns ["123", 0].
12284 function formatDecimal(x, p) {
12285 if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) return null; // NaN, ±Infinity
12286 var i, coefficient = x.slice(0, i);
12288 // The string returned by toExponential either has the form \d\.\d+e[-+]\d+
12289 // (e.g., 1.2e+3) or the form \de[-+]\d+ (e.g., 1e+3).
12291 coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,
12296 function exponent$1(x) {
12297 return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;
12300 function formatGroup(grouping, thousands) {
12301 return function(value, width) {
12302 var i = value.length,
12308 while (i > 0 && g > 0) {
12309 if (length + g + 1 > width) g = Math.max(1, width - length);
12310 t.push(value.substring(i -= g, i + g));
12311 if ((length += g + 1) > width) break;
12312 g = grouping[j = (j + 1) % grouping.length];
12315 return t.reverse().join(thousands);
12319 function formatNumerals(numerals) {
12320 return function(value) {
12321 return value.replace(/[0-9]/g, function(i) {
12322 return numerals[+i];
12327 // [[fill]align][sign][symbol][0][width][,][.precision][~][type]
12328 var re = /^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;
12330 function formatSpecifier(specifier) {
12331 return new FormatSpecifier(specifier);
12334 formatSpecifier.prototype = FormatSpecifier.prototype; // instanceof
12336 function FormatSpecifier(specifier) {
12337 if (!(match = re.exec(specifier))) throw new Error("invalid format: " + specifier);
12339 this.fill = match[1] || " ";
12340 this.align = match[2] || ">";
12341 this.sign = match[3] || "-";
12342 this.symbol = match[4] || "";
12343 this.zero = !!match[5];
12344 this.width = match[6] && +match[6];
12345 this.comma = !!match[7];
12346 this.precision = match[8] && +match[8].slice(1);
12347 this.trim = !!match[9];
12348 this.type = match[10] || "";
12351 FormatSpecifier.prototype.toString = function() {
12356 + (this.zero ? "0" : "")
12357 + (this.width == null ? "" : Math.max(1, this.width | 0))
12358 + (this.comma ? "," : "")
12359 + (this.precision == null ? "" : "." + Math.max(0, this.precision | 0))
12360 + (this.trim ? "~" : "")
12364 // Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.
12365 function formatTrim(s) {
12366 out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {
12368 case ".": i0 = i1 = i; break;
12369 case "0": if (i0 === 0) i0 = i; i1 = i; break;
12370 default: if (i0 > 0) { if (!+s[i]) break out; i0 = 0; } break;
12373 return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;
12376 var prefixExponent;
12378 function formatPrefixAuto(x, p) {
12379 var d = formatDecimal(x, p);
12380 if (!d) return x + "";
12381 var coefficient = d[0],
12383 i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,
12384 n = coefficient.length;
12385 return i === n ? coefficient
12386 : i > n ? coefficient + new Array(i - n + 1).join("0")
12387 : i > 0 ? coefficient.slice(0, i) + "." + coefficient.slice(i)
12388 : "0." + new Array(1 - i).join("0") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!
12391 function formatRounded(x, p) {
12392 var d = formatDecimal(x, p);
12393 if (!d) return x + "";
12394 var coefficient = d[0],
12396 return exponent < 0 ? "0." + new Array(-exponent).join("0") + coefficient
12397 : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + "." + coefficient.slice(exponent + 1)
12398 : coefficient + new Array(exponent - coefficient.length + 2).join("0");
12401 var formatTypes = {
12402 "%": function(x, p) { return (x * 100).toFixed(p); },
12403 "b": function(x) { return Math.round(x).toString(2); },
12404 "c": function(x) { return x + ""; },
12405 "d": function(x) { return Math.round(x).toString(10); },
12406 "e": function(x, p) { return x.toExponential(p); },
12407 "f": function(x, p) { return x.toFixed(p); },
12408 "g": function(x, p) { return x.toPrecision(p); },
12409 "o": function(x) { return Math.round(x).toString(8); },
12410 "p": function(x, p) { return formatRounded(x * 100, p); },
12411 "r": formatRounded,
12412 "s": formatPrefixAuto,
12413 "X": function(x) { return Math.round(x).toString(16).toUpperCase(); },
12414 "x": function(x) { return Math.round(x).toString(16); }
12417 function identity$3(x) {
12421 var prefixes = ["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];
12423 function formatLocale(locale) {
12424 var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity$3,
12425 currency = locale.currency,
12426 decimal = locale.decimal,
12427 numerals = locale.numerals ? formatNumerals(locale.numerals) : identity$3,
12428 percent = locale.percent || "%";
12430 function newFormat(specifier) {
12431 specifier = formatSpecifier(specifier);
12433 var fill = specifier.fill,
12434 align = specifier.align,
12435 sign = specifier.sign,
12436 symbol = specifier.symbol,
12437 zero = specifier.zero,
12438 width = specifier.width,
12439 comma = specifier.comma,
12440 precision = specifier.precision,
12441 trim = specifier.trim,
12442 type = specifier.type;
12444 // The "n" type is an alias for ",g".
12445 if (type === "n") comma = true, type = "g";
12447 // The "" type, and any invalid type, is an alias for ".12~g".
12448 else if (!formatTypes[type]) precision == null && (precision = 12), trim = true, type = "g";
12450 // If zero fill is specified, padding goes after sign and before digits.
12451 if (zero || (fill === "0" && align === "=")) zero = true, fill = "0", align = "=";
12453 // Compute the prefix and suffix.
12454 // For SI-prefix, the suffix is lazily computed.
12455 var prefix = symbol === "$" ? currency[0] : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "",
12456 suffix = symbol === "$" ? currency[1] : /[%p]/.test(type) ? percent : "";
12458 // What format function should we use?
12459 // Is this an integer type?
12460 // Can this type generate exponential notation?
12461 var formatType = formatTypes[type],
12462 maybeSuffix = /[defgprs%]/.test(type);
12464 // Set the default precision if not specified,
12465 // or clamp the specified precision to the supported range.
12466 // For significant precision, it must be in [1, 21].
12467 // For fixed precision, it must be in [0, 20].
12468 precision = precision == null ? 6
12469 : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))
12470 : Math.max(0, Math.min(20, precision));
12472 function format(value) {
12473 var valuePrefix = prefix,
12474 valueSuffix = suffix,
12477 if (type === "c") {
12478 valueSuffix = formatType(value) + valueSuffix;
12483 // Perform the initial formatting.
12484 var valueNegative = value < 0;
12485 value = formatType(Math.abs(value), precision);
12487 // Trim insignificant zeros.
12488 if (trim) value = formatTrim(value);
12490 // If a negative value rounds to zero during formatting, treat as positive.
12491 if (valueNegative && +value === 0) valueNegative = false;
12493 // Compute the prefix and suffix.
12494 valuePrefix = (valueNegative ? (sign === "(" ? sign : "-") : sign === "-" || sign === "(" ? "" : sign) + valuePrefix;
12495 valueSuffix = (type === "s" ? prefixes[8 + prefixExponent / 3] : "") + valueSuffix + (valueNegative && sign === "(" ? ")" : "");
12497 // Break the formatted value into the integer “value” part that can be
12498 // grouped, and fractional or exponential “suffix” part that is not.
12500 i = -1, n = value.length;
12502 if (c = value.charCodeAt(i), 48 > c || c > 57) {
12503 valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;
12504 value = value.slice(0, i);
12511 // If the fill character is not "0", grouping is applied before padding.
12512 if (comma && !zero) value = group(value, Infinity);
12514 // Compute the padding.
12515 var length = valuePrefix.length + value.length + valueSuffix.length,
12516 padding = length < width ? new Array(width - length + 1).join(fill) : "";
12518 // If the fill character is "0", grouping is applied after padding.
12519 if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = "";
12521 // Reconstruct the final output based on the desired alignment.
12523 case "<": value = valuePrefix + value + valueSuffix + padding; break;
12524 case "=": value = valuePrefix + padding + value + valueSuffix; break;
12525 case "^": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;
12526 default: value = padding + valuePrefix + value + valueSuffix; break;
12529 return numerals(value);
12532 format.toString = function() {
12533 return specifier + "";
12539 function formatPrefix(specifier, value) {
12540 var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = "f", specifier)),
12541 e = Math.max(-8, Math.min(8, Math.floor(exponent$1(value) / 3))) * 3,
12542 k = Math.pow(10, -e),
12543 prefix = prefixes[8 + e / 3];
12544 return function(value) {
12545 return f(k * value) + prefix;
12551 formatPrefix: formatPrefix
12563 currency: ["$", ""]
12566 function defaultLocale(definition) {
12567 locale = formatLocale(definition);
12568 format = locale.format;
12569 formatPrefix = locale.formatPrefix;
12573 function precisionFixed(step) {
12574 return Math.max(0, -exponent$1(Math.abs(step)));
12577 function precisionPrefix(step, value) {
12578 return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent$1(value) / 3))) * 3 - exponent$1(Math.abs(step)));
12581 function precisionRound(step, max) {
12582 step = Math.abs(step), max = Math.abs(max) - step;
12583 return Math.max(0, exponent$1(max) - exponent$1(step)) + 1;
12586 // Adds floating point numbers with twice the normal precision.
12587 // Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and
12588 // Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)
12590 // Code adapted from GeographicLib by Charles F. F. Karney,
12591 // http://geographiclib.sourceforge.net/
12601 Adder.prototype = {
12602 constructor: Adder,
12603 reset: function() {
12604 this.s = // rounded value
12605 this.t = 0; // exact error
12608 add$1(temp, y, this.t);
12609 add$1(this, temp.s, this.s);
12610 if (this.s) this.t += temp.t;
12611 else this.s = temp.t;
12613 valueOf: function() {
12618 var temp = new Adder;
12620 function add$1(adder, a, b) {
12621 var x = adder.s = a + b,
12624 adder.t = (a - av) + (b - bv);
12627 var epsilon$2 = 1e-6;
12628 var epsilon2$1 = 1e-12;
12629 var pi$3 = Math.PI;
12630 var halfPi$2 = pi$3 / 2;
12631 var quarterPi = pi$3 / 4;
12632 var tau$3 = pi$3 * 2;
12634 var degrees$1 = 180 / pi$3;
12635 var radians = pi$3 / 180;
12637 var abs$2 = Math.abs;
12638 var atan = Math.atan;
12639 var atan2 = Math.atan2;
12640 var cos$1 = Math.cos;
12641 var ceil = Math.ceil;
12642 var exp = Math.exp;
12643 var log = Math.log;
12644 var pow = Math.pow;
12645 var sin$1 = Math.sin;
12646 var sign$2 = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };
12647 var sqrt = Math.sqrt;
12648 var tan = Math.tan;
12651 return x > 1 ? 0 : x < -1 ? pi$3 : Math.acos(x);
12655 return x > 1 ? halfPi$2 : x < -1 ? -halfPi$2 : Math.asin(x);
12658 function haversin(x) {
12659 return (x = sin$1(x / 2)) * x;
12662 function noop$4() {}
12664 function streamGeometry(geometry, stream) {
12665 if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {
12666 streamGeometryType[geometry.type](geometry, stream);
12670 var streamObjectType = {
12671 Feature: function(object, stream) {
12672 streamGeometry(object.geometry, stream);
12674 FeatureCollection: function(object, stream) {
12675 var features = object.features, i = -1, n = features.length;
12676 while (++i < n) streamGeometry(features[i].geometry, stream);
12680 var streamGeometryType = {
12681 Sphere: function(object, stream) {
12684 Point: function(object, stream) {
12685 object = object.coordinates;
12686 stream.point(object[0], object[1], object[2]);
12688 MultiPoint: function(object, stream) {
12689 var coordinates = object.coordinates, i = -1, n = coordinates.length;
12690 while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);
12692 LineString: function(object, stream) {
12693 streamLine(object.coordinates, stream, 0);
12695 MultiLineString: function(object, stream) {
12696 var coordinates = object.coordinates, i = -1, n = coordinates.length;
12697 while (++i < n) streamLine(coordinates[i], stream, 0);
12699 Polygon: function(object, stream) {
12700 streamPolygon(object.coordinates, stream);
12702 MultiPolygon: function(object, stream) {
12703 var coordinates = object.coordinates, i = -1, n = coordinates.length;
12704 while (++i < n) streamPolygon(coordinates[i], stream);
12706 GeometryCollection: function(object, stream) {
12707 var geometries = object.geometries, i = -1, n = geometries.length;
12708 while (++i < n) streamGeometry(geometries[i], stream);
12712 function streamLine(coordinates, stream, closed) {
12713 var i = -1, n = coordinates.length - closed, coordinate;
12714 stream.lineStart();
12715 while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);
12719 function streamPolygon(coordinates, stream) {
12720 var i = -1, n = coordinates.length;
12721 stream.polygonStart();
12722 while (++i < n) streamLine(coordinates[i], stream, 1);
12723 stream.polygonEnd();
12726 function d3_geoStream(object, stream) {
12727 if (object && streamObjectType.hasOwnProperty(object.type)) {
12728 streamObjectType[object.type](object, stream);
12730 streamGeometry(object, stream);
12734 var areaRingSum = adder();
12736 var areaSum = adder(),
12747 polygonStart: function() {
12748 areaRingSum.reset();
12749 areaStream.lineStart = areaRingStart;
12750 areaStream.lineEnd = areaRingEnd;
12752 polygonEnd: function() {
12753 var areaRing = +areaRingSum;
12754 areaSum.add(areaRing < 0 ? tau$3 + areaRing : areaRing);
12755 this.lineStart = this.lineEnd = this.point = noop$4;
12757 sphere: function() {
12758 areaSum.add(tau$3);
12762 function areaRingStart() {
12763 areaStream.point = areaPointFirst;
12766 function areaRingEnd() {
12767 areaPoint(lambda00, phi00);
12770 function areaPointFirst(lambda, phi) {
12771 areaStream.point = areaPoint;
12772 lambda00 = lambda, phi00 = phi;
12773 lambda *= radians, phi *= radians;
12774 lambda0 = lambda, cosPhi0 = cos$1(phi = phi / 2 + quarterPi), sinPhi0 = sin$1(phi);
12777 function areaPoint(lambda, phi) {
12778 lambda *= radians, phi *= radians;
12779 phi = phi / 2 + quarterPi; // half the angular distance from south pole
12781 // Spherical excess E for a spherical triangle with vertices: south pole,
12782 // previous point, current point. Uses a formula derived from Cagnoli’s
12783 // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).
12784 var dLambda = lambda - lambda0,
12785 sdLambda = dLambda >= 0 ? 1 : -1,
12786 adLambda = sdLambda * dLambda,
12787 cosPhi = cos$1(phi),
12788 sinPhi = sin$1(phi),
12789 k = sinPhi0 * sinPhi,
12790 u = cosPhi0 * cosPhi + k * cos$1(adLambda),
12791 v = k * sdLambda * sin$1(adLambda);
12792 areaRingSum.add(atan2(v, u));
12794 // Advance the previous points.
12795 lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;
12798 function d3_geoArea(object) {
12800 d3_geoStream(object, areaStream);
12801 return areaSum * 2;
12804 function spherical(cartesian) {
12805 return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];
12808 function cartesian(spherical) {
12809 var lambda = spherical[0], phi = spherical[1], cosPhi = cos$1(phi);
12810 return [cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi)];
12813 function cartesianDot(a, b) {
12814 return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
12817 function cartesianCross(a, b) {
12818 return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];
12822 function cartesianAddInPlace(a, b) {
12823 a[0] += b[0], a[1] += b[1], a[2] += b[2];
12826 function cartesianScale(vector, k) {
12827 return [vector[0] * k, vector[1] * k, vector[2] * k];
12831 function cartesianNormalizeInPlace(d) {
12832 var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);
12833 d[0] /= l, d[1] /= l, d[2] /= l;
12836 var lambda0$1, phi0, lambda1, phi1, // bounds
12837 lambda2, // previous lambda-coordinate
12838 lambda00$1, phi00$1, // first point
12839 p0, // previous 3D point
12840 deltaSum = adder(),
12844 var boundsStream = {
12845 point: boundsPoint,
12846 lineStart: boundsLineStart,
12847 lineEnd: boundsLineEnd,
12848 polygonStart: function() {
12849 boundsStream.point = boundsRingPoint;
12850 boundsStream.lineStart = boundsRingStart;
12851 boundsStream.lineEnd = boundsRingEnd;
12853 areaStream.polygonStart();
12855 polygonEnd: function() {
12856 areaStream.polygonEnd();
12857 boundsStream.point = boundsPoint;
12858 boundsStream.lineStart = boundsLineStart;
12859 boundsStream.lineEnd = boundsLineEnd;
12860 if (areaRingSum < 0) lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90);
12861 else if (deltaSum > epsilon$2) phi1 = 90;
12862 else if (deltaSum < -epsilon$2) phi0 = -90;
12863 range[0] = lambda0$1, range[1] = lambda1;
12867 function boundsPoint(lambda, phi) {
12868 ranges.push(range = [lambda0$1 = lambda, lambda1 = lambda]);
12869 if (phi < phi0) phi0 = phi;
12870 if (phi > phi1) phi1 = phi;
12873 function linePoint(lambda, phi) {
12874 var p = cartesian([lambda * radians, phi * radians]);
12876 var normal = cartesianCross(p0, p),
12877 equatorial = [normal[1], -normal[0], 0],
12878 inflection = cartesianCross(equatorial, normal);
12879 cartesianNormalizeInPlace(inflection);
12880 inflection = spherical(inflection);
12881 var delta = lambda - lambda2,
12882 sign = delta > 0 ? 1 : -1,
12883 lambdai = inflection[0] * degrees$1 * sign,
12885 antimeridian = abs$2(delta) > 180;
12886 if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {
12887 phii = inflection[1] * degrees$1;
12888 if (phii > phi1) phi1 = phii;
12889 } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {
12890 phii = -inflection[1] * degrees$1;
12891 if (phii < phi0) phi0 = phii;
12893 if (phi < phi0) phi0 = phi;
12894 if (phi > phi1) phi1 = phi;
12896 if (antimeridian) {
12897 if (lambda < lambda2) {
12898 if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda;
12900 if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda;
12903 if (lambda1 >= lambda0$1) {
12904 if (lambda < lambda0$1) lambda0$1 = lambda;
12905 if (lambda > lambda1) lambda1 = lambda;
12907 if (lambda > lambda2) {
12908 if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda;
12910 if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda;
12915 ranges.push(range = [lambda0$1 = lambda, lambda1 = lambda]);
12917 if (phi < phi0) phi0 = phi;
12918 if (phi > phi1) phi1 = phi;
12919 p0 = p, lambda2 = lambda;
12922 function boundsLineStart() {
12923 boundsStream.point = linePoint;
12926 function boundsLineEnd() {
12927 range[0] = lambda0$1, range[1] = lambda1;
12928 boundsStream.point = boundsPoint;
12932 function boundsRingPoint(lambda, phi) {
12934 var delta = lambda - lambda2;
12935 deltaSum.add(abs$2(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);
12937 lambda00$1 = lambda, phi00$1 = phi;
12939 areaStream.point(lambda, phi);
12940 linePoint(lambda, phi);
12943 function boundsRingStart() {
12944 areaStream.lineStart();
12947 function boundsRingEnd() {
12948 boundsRingPoint(lambda00$1, phi00$1);
12949 areaStream.lineEnd();
12950 if (abs$2(deltaSum) > epsilon$2) lambda0$1 = -(lambda1 = 180);
12951 range[0] = lambda0$1, range[1] = lambda1;
12955 // Finds the left-right distance between two longitudes.
12956 // This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want
12957 // the distance between ±180° to be 360°.
12958 function angle(lambda0, lambda1) {
12959 return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;
12962 function rangeCompare(a, b) {
12963 return a[0] - b[0];
12966 function rangeContains(range, x) {
12967 return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;
12970 function d3_geoBounds(feature) {
12971 var i, n, a, b, merged, deltaMax, delta;
12973 phi1 = lambda1 = -(lambda0$1 = phi0 = Infinity);
12975 d3_geoStream(feature, boundsStream);
12977 // First, sort ranges by their minimum longitudes.
12978 if (n = ranges.length) {
12979 ranges.sort(rangeCompare);
12981 // Then, merge any ranges that overlap.
12982 for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {
12984 if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {
12985 if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];
12986 if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];
12988 merged.push(a = b);
12992 // Finally, find the largest gap between the merged ranges.
12993 // The final bounding box will be the inverse of this gap.
12994 for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {
12996 if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0$1 = b[0], lambda1 = a[1];
13000 ranges = range = null;
13002 return lambda0$1 === Infinity || phi0 === Infinity
13003 ? [[NaN, NaN], [NaN, NaN]]
13004 : [[lambda0$1, phi0], [lambda1, phi1]];
13011 lambda00$2, phi00$2, // first point
13012 x0, y0, z0; // previous point
13014 var centroidStream = {
13016 point: centroidPoint,
13017 lineStart: centroidLineStart,
13018 lineEnd: centroidLineEnd,
13019 polygonStart: function() {
13020 centroidStream.lineStart = centroidRingStart;
13021 centroidStream.lineEnd = centroidRingEnd;
13023 polygonEnd: function() {
13024 centroidStream.lineStart = centroidLineStart;
13025 centroidStream.lineEnd = centroidLineEnd;
13029 // Arithmetic mean of Cartesian vectors.
13030 function centroidPoint(lambda, phi) {
13031 lambda *= radians, phi *= radians;
13032 var cosPhi = cos$1(phi);
13033 centroidPointCartesian(cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi));
13036 function centroidPointCartesian(x, y, z) {
13038 X0 += (x - X0) / W0;
13039 Y0 += (y - Y0) / W0;
13040 Z0 += (z - Z0) / W0;
13043 function centroidLineStart() {
13044 centroidStream.point = centroidLinePointFirst;
13047 function centroidLinePointFirst(lambda, phi) {
13048 lambda *= radians, phi *= radians;
13049 var cosPhi = cos$1(phi);
13050 x0 = cosPhi * cos$1(lambda);
13051 y0 = cosPhi * sin$1(lambda);
13053 centroidStream.point = centroidLinePoint;
13054 centroidPointCartesian(x0, y0, z0);
13057 function centroidLinePoint(lambda, phi) {
13058 lambda *= radians, phi *= radians;
13059 var cosPhi = cos$1(phi),
13060 x = cosPhi * cos$1(lambda),
13061 y = cosPhi * sin$1(lambda),
13063 w = atan2(sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);
13065 X1 += w * (x0 + (x0 = x));
13066 Y1 += w * (y0 + (y0 = y));
13067 Z1 += w * (z0 + (z0 = z));
13068 centroidPointCartesian(x0, y0, z0);
13071 function centroidLineEnd() {
13072 centroidStream.point = centroidPoint;
13075 // See J. E. Brock, The Inertia Tensor for a Spherical Triangle,
13076 // J. Applied Mechanics 42, 239 (1975).
13077 function centroidRingStart() {
13078 centroidStream.point = centroidRingPointFirst;
13081 function centroidRingEnd() {
13082 centroidRingPoint(lambda00$2, phi00$2);
13083 centroidStream.point = centroidPoint;
13086 function centroidRingPointFirst(lambda, phi) {
13087 lambda00$2 = lambda, phi00$2 = phi;
13088 lambda *= radians, phi *= radians;
13089 centroidStream.point = centroidRingPoint;
13090 var cosPhi = cos$1(phi);
13091 x0 = cosPhi * cos$1(lambda);
13092 y0 = cosPhi * sin$1(lambda);
13094 centroidPointCartesian(x0, y0, z0);
13097 function centroidRingPoint(lambda, phi) {
13098 lambda *= radians, phi *= radians;
13099 var cosPhi = cos$1(phi),
13100 x = cosPhi * cos$1(lambda),
13101 y = cosPhi * sin$1(lambda),
13103 cx = y0 * z - z0 * y,
13104 cy = z0 * x - x0 * z,
13105 cz = x0 * y - y0 * x,
13106 m = sqrt(cx * cx + cy * cy + cz * cz),
13107 w = asin(m), // line weight = angle
13108 v = m && -w / m; // area weight multiplier
13113 X1 += w * (x0 + (x0 = x));
13114 Y1 += w * (y0 + (y0 = y));
13115 Z1 += w * (z0 + (z0 = z));
13116 centroidPointCartesian(x0, y0, z0);
13119 function d3_geoCentroid(object) {
13124 d3_geoStream(object, centroidStream);
13129 m = x * x + y * y + z * z;
13131 // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.
13132 if (m < epsilon2$1) {
13133 x = X1, y = Y1, z = Z1;
13134 // If the feature has zero length, fall back to arithmetic mean of point vectors.
13135 if (W1 < epsilon$2) x = X0, y = Y0, z = Z0;
13136 m = x * x + y * y + z * z;
13137 // If the feature still has an undefined ccentroid, then return.
13138 if (m < epsilon2$1) return [NaN, NaN];
13141 return [atan2(y, x) * degrees$1, asin(z / sqrt(m)) * degrees$1];
13144 function constant$8(x) {
13145 return function() {
13150 function compose(a, b) {
13152 function compose(x, y) {
13153 return x = a(x, y), b(x[0], x[1]);
13156 if (a.invert && b.invert) compose.invert = function(x, y) {
13157 return x = b.invert(x, y), x && a.invert(x[0], x[1]);
13163 function rotationIdentity(lambda, phi) {
13164 return [abs$2(lambda) > pi$3 ? lambda + Math.round(-lambda / tau$3) * tau$3 : lambda, phi];
13167 rotationIdentity.invert = rotationIdentity;
13169 function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {
13170 return (deltaLambda %= tau$3) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))
13171 : rotationLambda(deltaLambda))
13172 : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)
13173 : rotationIdentity);
13176 function forwardRotationLambda(deltaLambda) {
13177 return function(lambda, phi) {
13178 return lambda += deltaLambda, [lambda > pi$3 ? lambda - tau$3 : lambda < -pi$3 ? lambda + tau$3 : lambda, phi];
13182 function rotationLambda(deltaLambda) {
13183 var rotation = forwardRotationLambda(deltaLambda);
13184 rotation.invert = forwardRotationLambda(-deltaLambda);
13188 function rotationPhiGamma(deltaPhi, deltaGamma) {
13189 var cosDeltaPhi = cos$1(deltaPhi),
13190 sinDeltaPhi = sin$1(deltaPhi),
13191 cosDeltaGamma = cos$1(deltaGamma),
13192 sinDeltaGamma = sin$1(deltaGamma);
13194 function rotation(lambda, phi) {
13195 var cosPhi = cos$1(phi),
13196 x = cos$1(lambda) * cosPhi,
13197 y = sin$1(lambda) * cosPhi,
13199 k = z * cosDeltaPhi + x * sinDeltaPhi;
13201 atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),
13202 asin(k * cosDeltaGamma + y * sinDeltaGamma)
13206 rotation.invert = function(lambda, phi) {
13207 var cosPhi = cos$1(phi),
13208 x = cos$1(lambda) * cosPhi,
13209 y = sin$1(lambda) * cosPhi,
13211 k = z * cosDeltaGamma - y * sinDeltaGamma;
13213 atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),
13214 asin(k * cosDeltaPhi - x * sinDeltaPhi)
13221 function rotation(rotate) {
13222 rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);
13224 function forward(coordinates) {
13225 coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);
13226 return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates;
13229 forward.invert = function(coordinates) {
13230 coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);
13231 return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates;
13237 // Generates a circle centered at [0°, 0°], with a given radius and precision.
13238 function circleStream(stream, radius, delta, direction, t0, t1) {
13239 if (!delta) return;
13240 var cosRadius = cos$1(radius),
13241 sinRadius = sin$1(radius),
13242 step = direction * delta;
13244 t0 = radius + direction * tau$3;
13245 t1 = radius - step / 2;
13247 t0 = circleRadius(cosRadius, t0);
13248 t1 = circleRadius(cosRadius, t1);
13249 if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau$3;
13251 for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {
13252 point = spherical([cosRadius, -sinRadius * cos$1(t), -sinRadius * sin$1(t)]);
13253 stream.point(point[0], point[1]);
13257 // Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].
13258 function circleRadius(cosRadius, point) {
13259 point = cartesian(point), point[0] -= cosRadius;
13260 cartesianNormalizeInPlace(point);
13261 var radius = acos(-point[1]);
13262 return ((-point[2] < 0 ? -radius : radius) + tau$3 - epsilon$2) % tau$3;
13265 function circle() {
13266 var center = constant$8([0, 0]),
13267 radius = constant$8(90),
13268 precision = constant$8(6),
13271 stream = {point: point};
13273 function point(x, y) {
13274 ring.push(x = rotate(x, y));
13275 x[0] *= degrees$1, x[1] *= degrees$1;
13278 function circle() {
13279 var c = center.apply(this, arguments),
13280 r = radius.apply(this, arguments) * radians,
13281 p = precision.apply(this, arguments) * radians;
13283 rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;
13284 circleStream(stream, r, p, 1);
13285 c = {type: "Polygon", coordinates: [ring]};
13286 ring = rotate = null;
13290 circle.center = function(_) {
13291 return arguments.length ? (center = typeof _ === "function" ? _ : constant$8([+_[0], +_[1]]), circle) : center;
13294 circle.radius = function(_) {
13295 return arguments.length ? (radius = typeof _ === "function" ? _ : constant$8(+_), circle) : radius;
13298 circle.precision = function(_) {
13299 return arguments.length ? (precision = typeof _ === "function" ? _ : constant$8(+_), circle) : precision;
13305 function clipBuffer() {
13309 point: function(x, y) {
13312 lineStart: function() {
13313 lines.push(line = []);
13316 rejoin: function() {
13317 if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));
13319 result: function() {
13320 var result = lines;
13328 function pointEqual(a, b) {
13329 return abs$2(a[0] - b[0]) < epsilon$2 && abs$2(a[1] - b[1]) < epsilon$2;
13332 function Intersection(point, points, other, entry) {
13335 this.o = other; // another intersection
13336 this.e = entry; // is an entry?
13337 this.v = false; // visited
13338 this.n = this.p = null; // next & previous
13341 // A generalized polygon clipping algorithm: given a polygon that has been cut
13342 // into its visible line segments, and rejoins the segments by interpolating
13343 // along the clip edge.
13344 function clipRejoin(segments, compareIntersection, startInside, interpolate, stream) {
13350 segments.forEach(function(segment) {
13351 if ((n = segment.length - 1) <= 0) return;
13352 var n, p0 = segment[0], p1 = segment[n], x;
13354 // If the first and last points of a segment are coincident, then treat as a
13355 // closed ring. TODO if all rings are closed, then the winding order of the
13356 // exterior ring should be checked.
13357 if (pointEqual(p0, p1)) {
13358 stream.lineStart();
13359 for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);
13364 subject.push(x = new Intersection(p0, segment, null, true));
13365 clip.push(x.o = new Intersection(p0, null, x, false));
13366 subject.push(x = new Intersection(p1, segment, null, false));
13367 clip.push(x.o = new Intersection(p1, null, x, true));
13370 if (!subject.length) return;
13372 clip.sort(compareIntersection);
13376 for (i = 0, n = clip.length; i < n; ++i) {
13377 clip[i].e = startInside = !startInside;
13380 var start = subject[0],
13385 // Find first unvisited intersection.
13386 var current = start,
13388 while (current.v) if ((current = current.n) === start) return;
13389 points = current.z;
13390 stream.lineStart();
13392 current.v = current.o.v = true;
13395 for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);
13397 interpolate(current.x, current.n.x, 1, stream);
13399 current = current.n;
13402 points = current.p.z;
13403 for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);
13405 interpolate(current.x, current.p.x, -1, stream);
13407 current = current.p;
13409 current = current.o;
13410 points = current.z;
13411 isSubject = !isSubject;
13412 } while (!current.v);
13417 function link$1(array) {
13418 if (!(n = array.length)) return;
13424 a.n = b = array[i];
13428 a.n = b = array[0];
13432 var sum$1 = adder();
13434 function polygonContains(polygon, point) {
13435 var lambda = point[0],
13437 sinPhi = sin$1(phi),
13438 normal = [sin$1(lambda), -cos$1(lambda), 0],
13444 if (sinPhi === 1) phi = halfPi$2 + epsilon$2;
13445 else if (sinPhi === -1) phi = -halfPi$2 - epsilon$2;
13447 for (var i = 0, n = polygon.length; i < n; ++i) {
13448 if (!(m = (ring = polygon[i]).length)) continue;
13451 point0 = ring[m - 1],
13452 lambda0 = point0[0],
13453 phi0 = point0[1] / 2 + quarterPi,
13454 sinPhi0 = sin$1(phi0),
13455 cosPhi0 = cos$1(phi0);
13457 for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {
13458 var point1 = ring[j],
13459 lambda1 = point1[0],
13460 phi1 = point1[1] / 2 + quarterPi,
13461 sinPhi1 = sin$1(phi1),
13462 cosPhi1 = cos$1(phi1),
13463 delta = lambda1 - lambda0,
13464 sign = delta >= 0 ? 1 : -1,
13465 absDelta = sign * delta,
13466 antimeridian = absDelta > pi$3,
13467 k = sinPhi0 * sinPhi1;
13469 sum$1.add(atan2(k * sign * sin$1(absDelta), cosPhi0 * cosPhi1 + k * cos$1(absDelta)));
13470 angle += antimeridian ? delta + sign * tau$3 : delta;
13472 // Are the longitudes either side of the point’s meridian (lambda),
13473 // and are the latitudes smaller than the parallel (phi)?
13474 if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {
13475 var arc = cartesianCross(cartesian(point0), cartesian(point1));
13476 cartesianNormalizeInPlace(arc);
13477 var intersection = cartesianCross(normal, arc);
13478 cartesianNormalizeInPlace(intersection);
13479 var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);
13480 if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {
13481 winding += antimeridian ^ delta >= 0 ? 1 : -1;
13487 // First, determine whether the South pole is inside or outside:
13489 // It is inside if:
13490 // * the polygon winds around it in a clockwise direction.
13491 // * the polygon does not (cumulatively) wind around it, but has a negative
13492 // (counter-clockwise) area.
13494 // Second, count the (signed) number of times a segment crosses a lambda
13495 // from the point to the South pole. If it is zero, then the point is the
13496 // same side as the South pole.
13498 return (angle < -epsilon$2 || angle < epsilon$2 && sum$1 < -epsilon$2) ^ (winding & 1);
13501 function clip(pointVisible, clipLine, interpolate, start) {
13502 return function(sink) {
13503 var line = clipLine(sink),
13504 ringBuffer = clipBuffer(),
13505 ringSink = clipLine(ringBuffer),
13506 polygonStarted = false,
13513 lineStart: lineStart,
13515 polygonStart: function() {
13516 clip.point = pointRing;
13517 clip.lineStart = ringStart;
13518 clip.lineEnd = ringEnd;
13522 polygonEnd: function() {
13523 clip.point = point;
13524 clip.lineStart = lineStart;
13525 clip.lineEnd = lineEnd;
13526 segments = merge(segments);
13527 var startInside = polygonContains(polygon, start);
13528 if (segments.length) {
13529 if (!polygonStarted) sink.polygonStart(), polygonStarted = true;
13530 clipRejoin(segments, compareIntersection, startInside, interpolate, sink);
13531 } else if (startInside) {
13532 if (!polygonStarted) sink.polygonStart(), polygonStarted = true;
13534 interpolate(null, null, 1, sink);
13537 if (polygonStarted) sink.polygonEnd(), polygonStarted = false;
13538 segments = polygon = null;
13540 sphere: function() {
13541 sink.polygonStart();
13543 interpolate(null, null, 1, sink);
13549 function point(lambda, phi) {
13550 if (pointVisible(lambda, phi)) sink.point(lambda, phi);
13553 function pointLine(lambda, phi) {
13554 line.point(lambda, phi);
13557 function lineStart() {
13558 clip.point = pointLine;
13562 function lineEnd() {
13563 clip.point = point;
13567 function pointRing(lambda, phi) {
13568 ring.push([lambda, phi]);
13569 ringSink.point(lambda, phi);
13572 function ringStart() {
13573 ringSink.lineStart();
13577 function ringEnd() {
13578 pointRing(ring[0][0], ring[0][1]);
13579 ringSink.lineEnd();
13581 var clean = ringSink.clean(),
13582 ringSegments = ringBuffer.result(),
13583 i, n = ringSegments.length, m,
13588 polygon.push(ring);
13593 // No intersections.
13595 segment = ringSegments[0];
13596 if ((m = segment.length - 1) > 0) {
13597 if (!polygonStarted) sink.polygonStart(), polygonStarted = true;
13599 for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);
13605 // Rejoin connected segments.
13606 // TODO reuse ringBuffer.rejoin()?
13607 if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));
13609 segments.push(ringSegments.filter(validSegment));
13616 function validSegment(segment) {
13617 return segment.length > 1;
13620 // Intersections are sorted along the clip edge. For both antimeridian cutting
13621 // and circle clipping, the same comparison is used.
13622 function compareIntersection(a, b) {
13623 return ((a = a.x)[0] < 0 ? a[1] - halfPi$2 - epsilon$2 : halfPi$2 - a[1])
13624 - ((b = b.x)[0] < 0 ? b[1] - halfPi$2 - epsilon$2 : halfPi$2 - b[1]);
13627 var clipAntimeridian = clip(
13628 function() { return true; },
13629 clipAntimeridianLine,
13630 clipAntimeridianInterpolate,
13634 // Takes a line and cuts into visible segments. Return values: 0 - there were
13635 // intersections or the line was empty; 1 - no intersections; 2 - there were
13636 // intersections, and the first and last segments should be rejoined.
13637 function clipAntimeridianLine(stream) {
13641 clean; // no intersections
13644 lineStart: function() {
13645 stream.lineStart();
13648 point: function(lambda1, phi1) {
13649 var sign1 = lambda1 > 0 ? pi$3 : -pi$3,
13650 delta = abs$2(lambda1 - lambda0);
13651 if (abs$2(delta - pi$3) < epsilon$2) { // line crosses a pole
13652 stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi$2 : -halfPi$2);
13653 stream.point(sign0, phi0);
13655 stream.lineStart();
13656 stream.point(sign1, phi0);
13657 stream.point(lambda1, phi0);
13659 } else if (sign0 !== sign1 && delta >= pi$3) { // line crosses antimeridian
13660 if (abs$2(lambda0 - sign0) < epsilon$2) lambda0 -= sign0 * epsilon$2; // handle degeneracies
13661 if (abs$2(lambda1 - sign1) < epsilon$2) lambda1 -= sign1 * epsilon$2;
13662 phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);
13663 stream.point(sign0, phi0);
13665 stream.lineStart();
13666 stream.point(sign1, phi0);
13669 stream.point(lambda0 = lambda1, phi0 = phi1);
13672 lineEnd: function() {
13674 lambda0 = phi0 = NaN;
13676 clean: function() {
13677 return 2 - clean; // if intersections, rejoin first and last segments
13682 function clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {
13685 sinLambda0Lambda1 = sin$1(lambda0 - lambda1);
13686 return abs$2(sinLambda0Lambda1) > epsilon$2
13687 ? atan((sin$1(phi0) * (cosPhi1 = cos$1(phi1)) * sin$1(lambda1)
13688 - sin$1(phi1) * (cosPhi0 = cos$1(phi0)) * sin$1(lambda0))
13689 / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))
13690 : (phi0 + phi1) / 2;
13693 function clipAntimeridianInterpolate(from, to, direction, stream) {
13695 if (from == null) {
13696 phi = direction * halfPi$2;
13697 stream.point(-pi$3, phi);
13698 stream.point(0, phi);
13699 stream.point(pi$3, phi);
13700 stream.point(pi$3, 0);
13701 stream.point(pi$3, -phi);
13702 stream.point(0, -phi);
13703 stream.point(-pi$3, -phi);
13704 stream.point(-pi$3, 0);
13705 stream.point(-pi$3, phi);
13706 } else if (abs$2(from[0] - to[0]) > epsilon$2) {
13707 var lambda = from[0] < to[0] ? pi$3 : -pi$3;
13708 phi = direction * lambda / 2;
13709 stream.point(-lambda, phi);
13710 stream.point(0, phi);
13711 stream.point(lambda, phi);
13713 stream.point(to[0], to[1]);
13717 function clipCircle(radius) {
13718 var cr = cos$1(radius),
13719 delta = 6 * radians,
13720 smallRadius = cr > 0,
13721 notHemisphere = abs$2(cr) > epsilon$2; // TODO optimise for this common case
13723 function interpolate(from, to, direction, stream) {
13724 circleStream(stream, radius, delta, direction, from, to);
13727 function visible(lambda, phi) {
13728 return cos$1(lambda) * cos$1(phi) > cr;
13731 // Takes a line and cuts into visible segments. Return values used for polygon
13732 // clipping: 0 - there were intersections or the line was empty; 1 - no
13733 // intersections 2 - there were intersections, and the first and last segments
13734 // should be rejoined.
13735 function clipLine(stream) {
13736 var point0, // previous point
13737 c0, // code for previous point
13738 v0, // visibility of previous point
13739 v00, // visibility of first point
13740 clean; // no intersections
13742 lineStart: function() {
13746 point: function(lambda, phi) {
13747 var point1 = [lambda, phi],
13749 v = visible(lambda, phi),
13751 ? v ? 0 : code(lambda, phi)
13752 : v ? code(lambda + (lambda < 0 ? pi$3 : -pi$3), phi) : 0;
13753 if (!point0 && (v00 = v0 = v)) stream.lineStart();
13754 // Handle degeneracies.
13755 // TODO ignore if not clipping polygons.
13757 point2 = intersect(point0, point1);
13758 if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2)) {
13759 point1[0] += epsilon$2;
13760 point1[1] += epsilon$2;
13761 v = visible(point1[0], point1[1]);
13767 // outside going in
13768 stream.lineStart();
13769 point2 = intersect(point1, point0);
13770 stream.point(point2[0], point2[1]);
13772 // inside going out
13773 point2 = intersect(point0, point1);
13774 stream.point(point2[0], point2[1]);
13778 } else if (notHemisphere && point0 && smallRadius ^ v) {
13780 // If the codes for two points are different, or are both zero,
13781 // and there this segment intersects with the small circle.
13782 if (!(c & c0) && (t = intersect(point1, point0, true))) {
13785 stream.lineStart();
13786 stream.point(t[0][0], t[0][1]);
13787 stream.point(t[1][0], t[1][1]);
13790 stream.point(t[1][0], t[1][1]);
13792 stream.lineStart();
13793 stream.point(t[0][0], t[0][1]);
13797 if (v && (!point0 || !pointEqual(point0, point1))) {
13798 stream.point(point1[0], point1[1]);
13800 point0 = point1, v0 = v, c0 = c;
13802 lineEnd: function() {
13803 if (v0) stream.lineEnd();
13806 // Rejoin first and last segments if there were intersections and the first
13807 // and last points were visible.
13808 clean: function() {
13809 return clean | ((v00 && v0) << 1);
13814 // Intersects the great circle between a and b with the clip circle.
13815 function intersect(a, b, two) {
13816 var pa = cartesian(a),
13819 // We have two planes, n1.p = d1 and n2.p = d2.
13820 // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).
13821 var n1 = [1, 0, 0], // normal
13822 n2 = cartesianCross(pa, pb),
13823 n2n2 = cartesianDot(n2, n2),
13824 n1n2 = n2[0], // cartesianDot(n1, n2),
13825 determinant = n2n2 - n1n2 * n1n2;
13827 // Two polar points.
13828 if (!determinant) return !two && a;
13830 var c1 = cr * n2n2 / determinant,
13831 c2 = -cr * n1n2 / determinant,
13832 n1xn2 = cartesianCross(n1, n2),
13833 A = cartesianScale(n1, c1),
13834 B = cartesianScale(n2, c2);
13835 cartesianAddInPlace(A, B);
13837 // Solve |p(t)|^2 = 1.
13839 w = cartesianDot(A, u),
13840 uu = cartesianDot(u, u),
13841 t2 = w * w - uu * (cartesianDot(A, A) - 1);
13843 if (t2 < 0) return;
13846 q = cartesianScale(u, (-w - t) / uu);
13847 cartesianAddInPlace(q, A);
13850 if (!two) return q;
13852 // Two intersection points.
13853 var lambda0 = a[0],
13859 if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;
13861 var delta = lambda1 - lambda0,
13862 polar = abs$2(delta - pi$3) < epsilon$2,
13863 meridian = polar || delta < epsilon$2;
13865 if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;
13867 // Check that the first point is between a and b.
13870 ? phi0 + phi1 > 0 ^ q[1] < (abs$2(q[0] - lambda0) < epsilon$2 ? phi0 : phi1)
13871 : phi0 <= q[1] && q[1] <= phi1
13872 : delta > pi$3 ^ (lambda0 <= q[0] && q[0] <= lambda1)) {
13873 var q1 = cartesianScale(u, (-w + t) / uu);
13874 cartesianAddInPlace(q1, A);
13875 return [q, spherical(q1)];
13879 // Generates a 4-bit vector representing the location of a point relative to
13880 // the small circle's bounding box.
13881 function code(lambda, phi) {
13882 var r = smallRadius ? radius : pi$3 - radius,
13884 if (lambda < -r) code |= 1; // left
13885 else if (lambda > r) code |= 2; // right
13886 if (phi < -r) code |= 4; // below
13887 else if (phi > r) code |= 8; // above
13891 return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi$3, radius - pi$3]);
13894 function clipLine(a, b, x0, y0, x1, y1) {
13906 if (!dx && r > 0) return;
13909 if (r < t0) return;
13910 if (r < t1) t1 = r;
13911 } else if (dx > 0) {
13912 if (r > t1) return;
13913 if (r > t0) t0 = r;
13917 if (!dx && r < 0) return;
13920 if (r > t1) return;
13921 if (r > t0) t0 = r;
13922 } else if (dx > 0) {
13923 if (r < t0) return;
13924 if (r < t1) t1 = r;
13928 if (!dy && r > 0) return;
13931 if (r < t0) return;
13932 if (r < t1) t1 = r;
13933 } else if (dy > 0) {
13934 if (r > t1) return;
13935 if (r > t0) t0 = r;
13939 if (!dy && r < 0) return;
13942 if (r > t1) return;
13943 if (r > t0) t0 = r;
13944 } else if (dy > 0) {
13945 if (r < t0) return;
13946 if (r < t1) t1 = r;
13949 if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;
13950 if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;
13954 var clipMax = 1e9, clipMin = -clipMax;
13956 // TODO Use d3-polygon’s polygonContains here for the ring check?
13957 // TODO Eliminate duplicate buffering in clipBuffer and polygon.push?
13959 function clipRectangle(x0, y0, x1, y1) {
13961 function visible(x, y) {
13962 return x0 <= x && x <= x1 && y0 <= y && y <= y1;
13965 function interpolate(from, to, direction, stream) {
13968 || (a = corner(from, direction)) !== (a1 = corner(to, direction))
13969 || comparePoint(from, to) < 0 ^ direction > 0) {
13970 do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);
13971 while ((a = (a + direction + 4) % 4) !== a1);
13973 stream.point(to[0], to[1]);
13977 function corner(p, direction) {
13978 return abs$2(p[0] - x0) < epsilon$2 ? direction > 0 ? 0 : 3
13979 : abs$2(p[0] - x1) < epsilon$2 ? direction > 0 ? 2 : 1
13980 : abs$2(p[1] - y0) < epsilon$2 ? direction > 0 ? 1 : 0
13981 : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon
13984 function compareIntersection(a, b) {
13985 return comparePoint(a.x, b.x);
13988 function comparePoint(a, b) {
13989 var ca = corner(a, 1),
13991 return ca !== cb ? ca - cb
13992 : ca === 0 ? b[1] - a[1]
13993 : ca === 1 ? a[0] - b[0]
13994 : ca === 2 ? a[1] - b[1]
13998 return function(stream) {
13999 var activeStream = stream,
14000 bufferStream = clipBuffer(),
14004 x__, y__, v__, // first point
14005 x_, y_, v_, // previous point
14011 lineStart: lineStart,
14013 polygonStart: polygonStart,
14014 polygonEnd: polygonEnd
14017 function point(x, y) {
14018 if (visible(x, y)) activeStream.point(x, y);
14021 function polygonInside() {
14024 for (var i = 0, n = polygon.length; i < n; ++i) {
14025 for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {
14026 a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];
14027 if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }
14028 else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }
14035 // Buffer geometry within a polygon and then clip it en masse.
14036 function polygonStart() {
14037 activeStream = bufferStream, segments = [], polygon = [], clean = true;
14040 function polygonEnd() {
14041 var startInside = polygonInside(),
14042 cleanInside = clean && startInside,
14043 visible = (segments = merge(segments)).length;
14044 if (cleanInside || visible) {
14045 stream.polygonStart();
14047 stream.lineStart();
14048 interpolate(null, null, 1, stream);
14052 clipRejoin(segments, compareIntersection, startInside, interpolate, stream);
14054 stream.polygonEnd();
14056 activeStream = stream, segments = polygon = ring = null;
14059 function lineStart() {
14060 clipStream.point = linePoint;
14061 if (polygon) polygon.push(ring = []);
14067 // TODO rather than special-case polygons, simply handle them separately.
14068 // Ideally, coincident intersection points should be jittered to avoid
14069 // clipping issues.
14070 function lineEnd() {
14072 linePoint(x__, y__);
14073 if (v__ && v_) bufferStream.rejoin();
14074 segments.push(bufferStream.result());
14076 clipStream.point = point;
14077 if (v_) activeStream.lineEnd();
14080 function linePoint(x, y) {
14081 var v = visible(x, y);
14082 if (polygon) ring.push([x, y]);
14084 x__ = x, y__ = y, v__ = v;
14087 activeStream.lineStart();
14088 activeStream.point(x, y);
14091 if (v && v_) activeStream.point(x, y);
14093 var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],
14094 b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];
14095 if (clipLine(a, b, x0, y0, x1, y1)) {
14097 activeStream.lineStart();
14098 activeStream.point(a[0], a[1]);
14100 activeStream.point(b[0], b[1]);
14101 if (!v) activeStream.lineEnd();
14104 activeStream.lineStart();
14105 activeStream.point(x, y);
14110 x_ = x, y_ = y, v_ = v;
14117 function extent$1() {
14127 stream: function(stream) {
14128 return cache && cacheStream === stream ? cache : cache = clipRectangle(x0, y0, x1, y1)(cacheStream = stream);
14130 extent: function(_) {
14131 return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]];
14136 var lengthSum = adder(),
14141 var lengthStream = {
14144 lineStart: lengthLineStart,
14146 polygonStart: noop$4,
14150 function lengthLineStart() {
14151 lengthStream.point = lengthPointFirst;
14152 lengthStream.lineEnd = lengthLineEnd;
14155 function lengthLineEnd() {
14156 lengthStream.point = lengthStream.lineEnd = noop$4;
14159 function lengthPointFirst(lambda, phi) {
14160 lambda *= radians, phi *= radians;
14161 lambda0$2 = lambda, sinPhi0$1 = sin$1(phi), cosPhi0$1 = cos$1(phi);
14162 lengthStream.point = lengthPoint;
14165 function lengthPoint(lambda, phi) {
14166 lambda *= radians, phi *= radians;
14167 var sinPhi = sin$1(phi),
14168 cosPhi = cos$1(phi),
14169 delta = abs$2(lambda - lambda0$2),
14170 cosDelta = cos$1(delta),
14171 sinDelta = sin$1(delta),
14172 x = cosPhi * sinDelta,
14173 y = cosPhi0$1 * sinPhi - sinPhi0$1 * cosPhi * cosDelta,
14174 z = sinPhi0$1 * sinPhi + cosPhi0$1 * cosPhi * cosDelta;
14175 lengthSum.add(atan2(sqrt(x * x + y * y), z));
14176 lambda0$2 = lambda, sinPhi0$1 = sinPhi, cosPhi0$1 = cosPhi;
14179 function d3_geoLength(object) {
14181 d3_geoStream(object, lengthStream);
14185 var coordinates = [null, null],
14186 object$1 = {type: "LineString", coordinates: coordinates};
14188 function distance(a, b) {
14189 coordinates[0] = a;
14190 coordinates[1] = b;
14191 return d3_geoLength(object$1);
14194 var containsObjectType = {
14195 Feature: function(object, point) {
14196 return containsGeometry(object.geometry, point);
14198 FeatureCollection: function(object, point) {
14199 var features = object.features, i = -1, n = features.length;
14200 while (++i < n) if (containsGeometry(features[i].geometry, point)) return true;
14205 var containsGeometryType = {
14206 Sphere: function() {
14209 Point: function(object, point) {
14210 return containsPoint(object.coordinates, point);
14212 MultiPoint: function(object, point) {
14213 var coordinates = object.coordinates, i = -1, n = coordinates.length;
14214 while (++i < n) if (containsPoint(coordinates[i], point)) return true;
14217 LineString: function(object, point) {
14218 return containsLine(object.coordinates, point);
14220 MultiLineString: function(object, point) {
14221 var coordinates = object.coordinates, i = -1, n = coordinates.length;
14222 while (++i < n) if (containsLine(coordinates[i], point)) return true;
14225 Polygon: function(object, point) {
14226 return containsPolygon(object.coordinates, point);
14228 MultiPolygon: function(object, point) {
14229 var coordinates = object.coordinates, i = -1, n = coordinates.length;
14230 while (++i < n) if (containsPolygon(coordinates[i], point)) return true;
14233 GeometryCollection: function(object, point) {
14234 var geometries = object.geometries, i = -1, n = geometries.length;
14235 while (++i < n) if (containsGeometry(geometries[i], point)) return true;
14240 function containsGeometry(geometry, point) {
14241 return geometry && containsGeometryType.hasOwnProperty(geometry.type)
14242 ? containsGeometryType[geometry.type](geometry, point)
14246 function containsPoint(coordinates, point) {
14247 return distance(coordinates, point) === 0;
14250 function containsLine(coordinates, point) {
14251 var ab = distance(coordinates[0], coordinates[1]),
14252 ao = distance(coordinates[0], point),
14253 ob = distance(point, coordinates[1]);
14254 return ao + ob <= ab + epsilon$2;
14257 function containsPolygon(coordinates, point) {
14258 return !!polygonContains(coordinates.map(ringRadians), pointRadians(point));
14261 function ringRadians(ring) {
14262 return ring = ring.map(pointRadians), ring.pop(), ring;
14265 function pointRadians(point) {
14266 return [point[0] * radians, point[1] * radians];
14269 function contains$2(object, point) {
14270 return (object && containsObjectType.hasOwnProperty(object.type)
14271 ? containsObjectType[object.type]
14272 : containsGeometry)(object, point);
14275 function graticuleX(y0, y1, dy) {
14276 var y = d3_range(y0, y1 - epsilon$2, dy).concat(y1);
14277 return function(x) { return y.map(function(y) { return [x, y]; }); };
14280 function graticuleY(x0, x1, dx) {
14281 var x = d3_range(x0, x1 - epsilon$2, dx).concat(x1);
14282 return function(y) { return x.map(function(x) { return [x, y]; }); };
14285 function graticule() {
14286 var x1, x0, X1, X0,
14288 dx = 10, dy = dx, DX = 90, DY = 360,
14292 function graticule() {
14293 return {type: "MultiLineString", coordinates: lines()};
14297 return d3_range(ceil(X0 / DX) * DX, X1, DX).map(X)
14298 .concat(d3_range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))
14299 .concat(d3_range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs$2(x % DX) > epsilon$2; }).map(x))
14300 .concat(d3_range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs$2(y % DY) > epsilon$2; }).map(y));
14303 graticule.lines = function() {
14304 return lines().map(function(coordinates) { return {type: "LineString", coordinates: coordinates}; });
14307 graticule.outline = function() {
14313 X(X1).reverse().slice(1),
14314 Y(Y0).reverse().slice(1))
14319 graticule.extent = function(_) {
14320 if (!arguments.length) return graticule.extentMinor();
14321 return graticule.extentMajor(_).extentMinor(_);
14324 graticule.extentMajor = function(_) {
14325 if (!arguments.length) return [[X0, Y0], [X1, Y1]];
14326 X0 = +_[0][0], X1 = +_[1][0];
14327 Y0 = +_[0][1], Y1 = +_[1][1];
14328 if (X0 > X1) _ = X0, X0 = X1, X1 = _;
14329 if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;
14330 return graticule.precision(precision);
14333 graticule.extentMinor = function(_) {
14334 if (!arguments.length) return [[x0, y0], [x1, y1]];
14335 x0 = +_[0][0], x1 = +_[1][0];
14336 y0 = +_[0][1], y1 = +_[1][1];
14337 if (x0 > x1) _ = x0, x0 = x1, x1 = _;
14338 if (y0 > y1) _ = y0, y0 = y1, y1 = _;
14339 return graticule.precision(precision);
14342 graticule.step = function(_) {
14343 if (!arguments.length) return graticule.stepMinor();
14344 return graticule.stepMajor(_).stepMinor(_);
14347 graticule.stepMajor = function(_) {
14348 if (!arguments.length) return [DX, DY];
14349 DX = +_[0], DY = +_[1];
14353 graticule.stepMinor = function(_) {
14354 if (!arguments.length) return [dx, dy];
14355 dx = +_[0], dy = +_[1];
14359 graticule.precision = function(_) {
14360 if (!arguments.length) return precision;
14362 x = graticuleX(y0, y1, 90);
14363 y = graticuleY(x0, x1, precision);
14364 X = graticuleX(Y0, Y1, 90);
14365 Y = graticuleY(X0, X1, precision);
14370 .extentMajor([[-180, -90 + epsilon$2], [180, 90 - epsilon$2]])
14371 .extentMinor([[-180, -80 - epsilon$2], [180, 80 + epsilon$2]]);
14374 function graticule10() {
14375 return graticule()();
14378 function interpolate$1(a, b) {
14379 var x0 = a[0] * radians,
14380 y0 = a[1] * radians,
14381 x1 = b[0] * radians,
14382 y1 = b[1] * radians,
14387 kx0 = cy0 * cos$1(x0),
14388 ky0 = cy0 * sin$1(x0),
14389 kx1 = cy1 * cos$1(x1),
14390 ky1 = cy1 * sin$1(x1),
14391 d = 2 * asin(sqrt(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))),
14394 var interpolate = d ? function(t) {
14395 var B = sin$1(t *= d) / k,
14396 A = sin$1(d - t) / k,
14397 x = A * kx0 + B * kx1,
14398 y = A * ky0 + B * ky1,
14399 z = A * sy0 + B * sy1;
14401 atan2(y, x) * degrees$1,
14402 atan2(z, sqrt(x * x + y * y)) * degrees$1
14405 return [x0 * degrees$1, y0 * degrees$1];
14408 interpolate.distance = d;
14410 return interpolate;
14413 function identity$4(x) {
14417 var areaSum$1 = adder(),
14418 areaRingSum$1 = adder(),
14424 var areaStream$1 = {
14428 polygonStart: function() {
14429 areaStream$1.lineStart = areaRingStart$1;
14430 areaStream$1.lineEnd = areaRingEnd$1;
14432 polygonEnd: function() {
14433 areaStream$1.lineStart = areaStream$1.lineEnd = areaStream$1.point = noop$4;
14434 areaSum$1.add(abs$2(areaRingSum$1));
14435 areaRingSum$1.reset();
14437 result: function() {
14438 var area = areaSum$1 / 2;
14444 function areaRingStart$1() {
14445 areaStream$1.point = areaPointFirst$1;
14448 function areaPointFirst$1(x, y) {
14449 areaStream$1.point = areaPoint$1;
14450 x00 = x0$1 = x, y00 = y0$1 = y;
14453 function areaPoint$1(x, y) {
14454 areaRingSum$1.add(y0$1 * x - x0$1 * y);
14455 x0$1 = x, y0$1 = y;
14458 function areaRingEnd$1() {
14459 areaPoint$1(x00, y00);
14462 var x0$2 = Infinity,
14467 var boundsStream$1 = {
14468 point: boundsPoint$1,
14471 polygonStart: noop$4,
14472 polygonEnd: noop$4,
14473 result: function() {
14474 var bounds = [[x0$2, y0$2], [x1, y1]];
14475 x1 = y1 = -(y0$2 = x0$2 = Infinity);
14480 function boundsPoint$1(x, y) {
14481 if (x < x0$2) x0$2 = x;
14482 if (x > x1) x1 = x;
14483 if (y < y0$2) y0$2 = y;
14484 if (y > y1) y1 = y;
14487 // TODO Enforce positive area for exterior, negative area for interior?
14503 var centroidStream$1 = {
14504 point: centroidPoint$1,
14505 lineStart: centroidLineStart$1,
14506 lineEnd: centroidLineEnd$1,
14507 polygonStart: function() {
14508 centroidStream$1.lineStart = centroidRingStart$1;
14509 centroidStream$1.lineEnd = centroidRingEnd$1;
14511 polygonEnd: function() {
14512 centroidStream$1.point = centroidPoint$1;
14513 centroidStream$1.lineStart = centroidLineStart$1;
14514 centroidStream$1.lineEnd = centroidLineEnd$1;
14516 result: function() {
14517 var centroid = Z2$1 ? [X2$1 / Z2$1, Y2$1 / Z2$1]
14518 : Z1$1 ? [X1$1 / Z1$1, Y1$1 / Z1$1]
14519 : Z0$1 ? [X0$1 / Z0$1, Y0$1 / Z0$1]
14521 X0$1 = Y0$1 = Z0$1 =
14522 X1$1 = Y1$1 = Z1$1 =
14523 X2$1 = Y2$1 = Z2$1 = 0;
14528 function centroidPoint$1(x, y) {
14534 function centroidLineStart$1() {
14535 centroidStream$1.point = centroidPointFirstLine;
14538 function centroidPointFirstLine(x, y) {
14539 centroidStream$1.point = centroidPointLine;
14540 centroidPoint$1(x0$3 = x, y0$3 = y);
14543 function centroidPointLine(x, y) {
14544 var dx = x - x0$3, dy = y - y0$3, z = sqrt(dx * dx + dy * dy);
14545 X1$1 += z * (x0$3 + x) / 2;
14546 Y1$1 += z * (y0$3 + y) / 2;
14548 centroidPoint$1(x0$3 = x, y0$3 = y);
14551 function centroidLineEnd$1() {
14552 centroidStream$1.point = centroidPoint$1;
14555 function centroidRingStart$1() {
14556 centroidStream$1.point = centroidPointFirstRing;
14559 function centroidRingEnd$1() {
14560 centroidPointRing(x00$1, y00$1);
14563 function centroidPointFirstRing(x, y) {
14564 centroidStream$1.point = centroidPointRing;
14565 centroidPoint$1(x00$1 = x0$3 = x, y00$1 = y0$3 = y);
14568 function centroidPointRing(x, y) {
14571 z = sqrt(dx * dx + dy * dy);
14573 X1$1 += z * (x0$3 + x) / 2;
14574 Y1$1 += z * (y0$3 + y) / 2;
14577 z = y0$3 * x - x0$3 * y;
14578 X2$1 += z * (x0$3 + x);
14579 Y2$1 += z * (y0$3 + y);
14581 centroidPoint$1(x0$3 = x, y0$3 = y);
14584 function PathContext(context) {
14585 this._context = context;
14588 PathContext.prototype = {
14590 pointRadius: function(_) {
14591 return this._radius = _, this;
14593 polygonStart: function() {
14596 polygonEnd: function() {
14599 lineStart: function() {
14602 lineEnd: function() {
14603 if (this._line === 0) this._context.closePath();
14606 point: function(x, y) {
14607 switch (this._point) {
14609 this._context.moveTo(x, y);
14614 this._context.lineTo(x, y);
14618 this._context.moveTo(x + this._radius, y);
14619 this._context.arc(x, y, this._radius, 0, tau$3);
14627 var lengthSum$1 = adder(),
14634 var lengthStream$1 = {
14636 lineStart: function() {
14637 lengthStream$1.point = lengthPointFirst$1;
14639 lineEnd: function() {
14640 if (lengthRing) lengthPoint$1(x00$2, y00$2);
14641 lengthStream$1.point = noop$4;
14643 polygonStart: function() {
14646 polygonEnd: function() {
14649 result: function() {
14650 var length = +lengthSum$1;
14651 lengthSum$1.reset();
14656 function lengthPointFirst$1(x, y) {
14657 lengthStream$1.point = lengthPoint$1;
14658 x00$2 = x0$4 = x, y00$2 = y0$4 = y;
14661 function lengthPoint$1(x, y) {
14662 x0$4 -= x, y0$4 -= y;
14663 lengthSum$1.add(sqrt(x0$4 * x0$4 + y0$4 * y0$4));
14664 x0$4 = x, y0$4 = y;
14667 function PathString() {
14671 PathString.prototype = {
14673 _circle: circle$1(4.5),
14674 pointRadius: function(_) {
14675 if ((_ = +_) !== this._radius) this._radius = _, this._circle = null;
14678 polygonStart: function() {
14681 polygonEnd: function() {
14684 lineStart: function() {
14687 lineEnd: function() {
14688 if (this._line === 0) this._string.push("Z");
14691 point: function(x, y) {
14692 switch (this._point) {
14694 this._string.push("M", x, ",", y);
14699 this._string.push("L", x, ",", y);
14703 if (this._circle == null) this._circle = circle$1(this._radius);
14704 this._string.push("M", x, ",", y, this._circle);
14709 result: function() {
14710 if (this._string.length) {
14711 var result = this._string.join("");
14720 function circle$1(radius) {
14721 return "m0," + radius
14722 + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius
14723 + "a" + radius + "," + radius + " 0 1,1 0," + 2 * radius
14727 function d3_geoPath(projection, context) {
14728 var pointRadius = 4.5,
14732 function path(object) {
14734 if (typeof pointRadius === "function") contextStream.pointRadius(+pointRadius.apply(this, arguments));
14735 d3_geoStream(object, projectionStream(contextStream));
14737 return contextStream.result();
14740 path.area = function(object) {
14741 d3_geoStream(object, projectionStream(areaStream$1));
14742 return areaStream$1.result();
14745 path.measure = function(object) {
14746 d3_geoStream(object, projectionStream(lengthStream$1));
14747 return lengthStream$1.result();
14750 path.bounds = function(object) {
14751 d3_geoStream(object, projectionStream(boundsStream$1));
14752 return boundsStream$1.result();
14755 path.centroid = function(object) {
14756 d3_geoStream(object, projectionStream(centroidStream$1));
14757 return centroidStream$1.result();
14760 path.projection = function(_) {
14761 return arguments.length ? (projectionStream = _ == null ? (projection = null, identity$4) : (projection = _).stream, path) : projection;
14764 path.context = function(_) {
14765 if (!arguments.length) return context;
14766 contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _);
14767 if (typeof pointRadius !== "function") contextStream.pointRadius(pointRadius);
14771 path.pointRadius = function(_) {
14772 if (!arguments.length) return pointRadius;
14773 pointRadius = typeof _ === "function" ? _ : (contextStream.pointRadius(+_), +_);
14777 return path.projection(projection).context(context);
14780 function d3_geoTransform(methods) {
14782 stream: transformer(methods)
14786 function transformer(methods) {
14787 return function(stream) {
14788 var s = new TransformStream;
14789 for (var key in methods) s[key] = methods[key];
14795 function TransformStream() {}
14797 TransformStream.prototype = {
14798 constructor: TransformStream,
14799 point: function(x, y) { this.stream.point(x, y); },
14800 sphere: function() { this.stream.sphere(); },
14801 lineStart: function() { this.stream.lineStart(); },
14802 lineEnd: function() { this.stream.lineEnd(); },
14803 polygonStart: function() { this.stream.polygonStart(); },
14804 polygonEnd: function() { this.stream.polygonEnd(); }
14807 function fit(projection, fitBounds, object) {
14808 var clip = projection.clipExtent && projection.clipExtent();
14809 projection.scale(150).translate([0, 0]);
14810 if (clip != null) projection.clipExtent(null);
14811 d3_geoStream(object, projection.stream(boundsStream$1));
14812 fitBounds(boundsStream$1.result());
14813 if (clip != null) projection.clipExtent(clip);
14817 function fitExtent(projection, extent, object) {
14818 return fit(projection, function(b) {
14819 var w = extent[1][0] - extent[0][0],
14820 h = extent[1][1] - extent[0][1],
14821 k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),
14822 x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,
14823 y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;
14824 projection.scale(150 * k).translate([x, y]);
14828 function fitSize(projection, size, object) {
14829 return fitExtent(projection, [[0, 0], size], object);
14832 function fitWidth(projection, width, object) {
14833 return fit(projection, function(b) {
14835 k = w / (b[1][0] - b[0][0]),
14836 x = (w - k * (b[1][0] + b[0][0])) / 2,
14838 projection.scale(150 * k).translate([x, y]);
14842 function fitHeight(projection, height, object) {
14843 return fit(projection, function(b) {
14845 k = h / (b[1][1] - b[0][1]),
14847 y = (h - k * (b[1][1] + b[0][1])) / 2;
14848 projection.scale(150 * k).translate([x, y]);
14852 var maxDepth = 16, // maximum depth of subdivision
14853 cosMinDistance = cos$1(30 * radians); // cos(minimum angular distance)
14855 function resample(project, delta2) {
14856 return +delta2 ? resample$1(project, delta2) : resampleNone(project);
14859 function resampleNone(project) {
14860 return transformer({
14861 point: function(x, y) {
14863 this.stream.point(x[0], x[1]);
14868 function resample$1(project, delta2) {
14870 function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {
14873 d2 = dx * dx + dy * dy;
14874 if (d2 > 4 * delta2 && depth--) {
14878 m = sqrt(a * a + b * b + c * c),
14879 phi2 = asin(c /= m),
14880 lambda2 = abs$2(abs$2(c) - 1) < epsilon$2 || abs$2(lambda0 - lambda1) < epsilon$2 ? (lambda0 + lambda1) / 2 : atan2(b, a),
14881 p = project(lambda2, phi2),
14886 dz = dy * dx2 - dx * dy2;
14887 if (dz * dz / d2 > delta2 // perpendicular projected distance
14888 || abs$2((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end
14889 || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance
14890 resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);
14891 stream.point(x2, y2);
14892 resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);
14896 return function(stream) {
14897 var lambda00, x00, y00, a00, b00, c00, // first point
14898 lambda0, x0, y0, a0, b0, c0; // previous point
14900 var resampleStream = {
14902 lineStart: lineStart,
14904 polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },
14905 polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }
14908 function point(x, y) {
14910 stream.point(x[0], x[1]);
14913 function lineStart() {
14915 resampleStream.point = linePoint;
14916 stream.lineStart();
14919 function linePoint(lambda, phi) {
14920 var c = cartesian([lambda, phi]), p = project(lambda, phi);
14921 resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);
14922 stream.point(x0, y0);
14925 function lineEnd() {
14926 resampleStream.point = point;
14930 function ringStart() {
14932 resampleStream.point = ringPoint;
14933 resampleStream.lineEnd = ringEnd;
14936 function ringPoint(lambda, phi) {
14937 linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;
14938 resampleStream.point = linePoint;
14941 function ringEnd() {
14942 resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);
14943 resampleStream.lineEnd = lineEnd;
14947 return resampleStream;
14951 var transformRadians = transformer({
14952 point: function(x, y) {
14953 this.stream.point(x * radians, y * radians);
14957 function transformRotate(rotate) {
14958 return transformer({
14959 point: function(x, y) {
14960 var r = rotate(x, y);
14961 return this.stream.point(r[0], r[1]);
14966 function scaleTranslate(k, dx, dy) {
14967 function transform(x, y) {
14968 return [dx + k * x, dy - k * y];
14970 transform.invert = function(x, y) {
14971 return [(x - dx) / k, (dy - y) / k];
14976 function scaleTranslateRotate(k, dx, dy, alpha) {
14977 var cosAlpha = cos$1(alpha),
14978 sinAlpha = sin$1(alpha),
14983 ci = (sinAlpha * dy - cosAlpha * dx) / k,
14984 fi = (sinAlpha * dx + cosAlpha * dy) / k;
14985 function transform(x, y) {
14986 return [a * x - b * y + dx, dy - b * x - a * y];
14988 transform.invert = function(x, y) {
14989 return [ai * x - bi * y + ci, fi - bi * x - ai * y];
14994 function projection(project) {
14995 return projectionMutator(function() { return project; })();
14998 function projectionMutator(projectAt) {
15001 x = 480, y = 250, // translate
15002 lambda = 0, phi = 0, // center
15003 deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate
15004 alpha = 0, // post-rotate
15005 theta = null, preclip = clipAntimeridian, // pre-clip angle
15006 x0 = null, y0, x1, y1, postclip = identity$4, // post-clip extent
15007 delta2 = 0.5, // precision
15010 projectRotateTransform,
15014 function projection(point) {
15015 return projectRotateTransform(point[0] * radians, point[1] * radians);
15018 function invert(point) {
15019 point = projectRotateTransform.invert(point[0], point[1]);
15020 return point && [point[0] * degrees$1, point[1] * degrees$1];
15023 projection.stream = function(stream) {
15024 return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));
15027 projection.preclip = function(_) {
15028 return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;
15031 projection.postclip = function(_) {
15032 return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;
15035 projection.clipAngle = function(_) {
15036 return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees$1;
15039 projection.clipExtent = function(_) {
15040 return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$4) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];
15043 projection.scale = function(_) {
15044 return arguments.length ? (k = +_, recenter()) : k;
15047 projection.translate = function(_) {
15048 return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];
15051 projection.center = function(_) {
15052 return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees$1, phi * degrees$1];
15055 projection.rotate = function(_) {
15056 return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees$1, deltaPhi * degrees$1, deltaGamma * degrees$1];
15059 projection.angle = function(_) {
15060 return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees$1;
15063 projection.precision = function(_) {
15064 return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);
15067 projection.fitExtent = function(extent, object) {
15068 return fitExtent(projection, extent, object);
15071 projection.fitSize = function(size, object) {
15072 return fitSize(projection, size, object);
15075 projection.fitWidth = function(width, object) {
15076 return fitWidth(projection, width, object);
15079 projection.fitHeight = function(height, object) {
15080 return fitHeight(projection, height, object);
15083 function recenter() {
15084 var center = scaleTranslateRotate(k, 0, 0, alpha).apply(null, project(lambda, phi)),
15085 transform = (alpha ? scaleTranslateRotate : scaleTranslate)(k, x - center[0], y - center[1], alpha);
15086 rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);
15087 projectTransform = compose(project, transform);
15088 projectRotateTransform = compose(rotate, projectTransform);
15089 projectResample = resample(projectTransform, delta2);
15094 cache = cacheStream = null;
15098 return function() {
15099 project = projectAt.apply(this, arguments);
15100 projection.invert = project.invert && invert;
15105 function conicProjection(projectAt) {
15108 m = projectionMutator(projectAt),
15111 p.parallels = function(_) {
15112 return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees$1, phi1 * degrees$1];
15118 function cylindricalEqualAreaRaw(phi0) {
15119 var cosPhi0 = cos$1(phi0);
15121 function forward(lambda, phi) {
15122 return [lambda * cosPhi0, sin$1(phi) / cosPhi0];
15125 forward.invert = function(x, y) {
15126 return [x / cosPhi0, asin(y * cosPhi0)];
15132 function conicEqualAreaRaw(y0, y1) {
15133 var sy0 = sin$1(y0), n = (sy0 + sin$1(y1)) / 2;
15135 // Are the parallels symmetrical around the Equator?
15136 if (abs$2(n) < epsilon$2) return cylindricalEqualAreaRaw(y0);
15138 var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;
15140 function project(x, y) {
15141 var r = sqrt(c - 2 * n * sin$1(y)) / n;
15142 return [r * sin$1(x *= n), r0 - r * cos$1(x)];
15145 project.invert = function(x, y) {
15147 return [atan2(x, abs$2(r0y)) / n * sign$2(r0y), asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];
15153 function conicEqualArea() {
15154 return conicProjection(conicEqualAreaRaw)
15156 .center([0, 33.6442]);
15159 function albers() {
15160 return conicEqualArea()
15161 .parallels([29.5, 45.5])
15163 .translate([480, 250])
15165 .center([-0.6, 38.7]);
15168 // The projections must have mutually exclusive clip regions on the sphere,
15169 // as this will avoid emitting interleaving lines and polygons.
15170 function multiplex(streams) {
15171 var n = streams.length;
15173 point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },
15174 sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },
15175 lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },
15176 lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },
15177 polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },
15178 polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }
15182 // A composite projection for the United States, configured by default for
15183 // 960×500. The projection also works quite well at 960×600 if you change the
15184 // scale to 1285 and adjust the translate accordingly. The set of standard
15185 // parallels for each region comes from USGS, which is published here:
15186 // http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers
15187 function albersUsa() {
15190 lower48 = albers(), lower48Point,
15191 alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338
15192 hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007
15193 point, pointStream = {point: function(x, y) { point = [x, y]; }};
15195 function albersUsa(coordinates) {
15196 var x = coordinates[0], y = coordinates[1];
15197 return point = null,
15198 (lower48Point.point(x, y), point)
15199 || (alaskaPoint.point(x, y), point)
15200 || (hawaiiPoint.point(x, y), point);
15203 albersUsa.invert = function(coordinates) {
15204 var k = lower48.scale(),
15205 t = lower48.translate(),
15206 x = (coordinates[0] - t[0]) / k,
15207 y = (coordinates[1] - t[1]) / k;
15208 return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska
15209 : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii
15210 : lower48).invert(coordinates);
15213 albersUsa.stream = function(stream) {
15214 return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);
15217 albersUsa.precision = function(_) {
15218 if (!arguments.length) return lower48.precision();
15219 lower48.precision(_), alaska.precision(_), hawaii.precision(_);
15223 albersUsa.scale = function(_) {
15224 if (!arguments.length) return lower48.scale();
15225 lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);
15226 return albersUsa.translate(lower48.translate());
15229 albersUsa.translate = function(_) {
15230 if (!arguments.length) return lower48.translate();
15231 var k = lower48.scale(), x = +_[0], y = +_[1];
15233 lower48Point = lower48
15235 .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])
15236 .stream(pointStream);
15238 alaskaPoint = alaska
15239 .translate([x - 0.307 * k, y + 0.201 * k])
15240 .clipExtent([[x - 0.425 * k + epsilon$2, y + 0.120 * k + epsilon$2], [x - 0.214 * k - epsilon$2, y + 0.234 * k - epsilon$2]])
15241 .stream(pointStream);
15243 hawaiiPoint = hawaii
15244 .translate([x - 0.205 * k, y + 0.212 * k])
15245 .clipExtent([[x - 0.214 * k + epsilon$2, y + 0.166 * k + epsilon$2], [x - 0.115 * k - epsilon$2, y + 0.234 * k - epsilon$2]])
15246 .stream(pointStream);
15251 albersUsa.fitExtent = function(extent, object) {
15252 return fitExtent(albersUsa, extent, object);
15255 albersUsa.fitSize = function(size, object) {
15256 return fitSize(albersUsa, size, object);
15259 albersUsa.fitWidth = function(width, object) {
15260 return fitWidth(albersUsa, width, object);
15263 albersUsa.fitHeight = function(height, object) {
15264 return fitHeight(albersUsa, height, object);
15268 cache = cacheStream = null;
15272 return albersUsa.scale(1070);
15275 function azimuthalRaw(scale) {
15276 return function(x, y) {
15279 k = scale(cx * cy);
15287 function azimuthalInvert(angle) {
15288 return function(x, y) {
15289 var z = sqrt(x * x + y * y),
15294 atan2(x * sc, z * cc),
15295 asin(z && y * sc / z)
15300 var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {
15301 return sqrt(2 / (1 + cxcy));
15304 azimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {
15305 return 2 * asin(z / 2);
15308 function azimuthalEqualArea() {
15309 return projection(azimuthalEqualAreaRaw)
15311 .clipAngle(180 - 1e-3);
15314 var azimuthalEquidistantRaw = azimuthalRaw(function(c) {
15315 return (c = acos(c)) && c / sin$1(c);
15318 azimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {
15322 function azimuthalEquidistant() {
15323 return projection(azimuthalEquidistantRaw)
15325 .clipAngle(180 - 1e-3);
15328 function mercatorRaw(lambda, phi) {
15329 return [lambda, log(tan((halfPi$2 + phi) / 2))];
15332 mercatorRaw.invert = function(x, y) {
15333 return [x, 2 * atan(exp(y)) - halfPi$2];
15336 function mercator() {
15337 return mercatorProjection(mercatorRaw)
15338 .scale(961 / tau$3);
15341 function mercatorProjection(project) {
15342 var m = projection(project),
15345 translate = m.translate,
15346 clipExtent = m.clipExtent,
15347 x0 = null, y0, x1, y1; // clip extent
15349 m.scale = function(_) {
15350 return arguments.length ? (scale(_), reclip()) : scale();
15353 m.translate = function(_) {
15354 return arguments.length ? (translate(_), reclip()) : translate();
15357 m.center = function(_) {
15358 return arguments.length ? (center(_), reclip()) : center();
15361 m.clipExtent = function(_) {
15362 return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];
15365 function reclip() {
15366 var k = pi$3 * scale(),
15367 t = m(rotation(m.rotate()).invert([0, 0]));
15368 return clipExtent(x0 == null
15369 ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw
15370 ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]
15371 : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);
15378 return tan((halfPi$2 + y) / 2);
15381 function conicConformalRaw(y0, y1) {
15382 var cy0 = cos$1(y0),
15383 n = y0 === y1 ? sin$1(y0) : log(cy0 / cos$1(y1)) / log(tany(y1) / tany(y0)),
15384 f = cy0 * pow(tany(y0), n) / n;
15386 if (!n) return mercatorRaw;
15388 function project(x, y) {
15389 if (f > 0) { if (y < -halfPi$2 + epsilon$2) y = -halfPi$2 + epsilon$2; }
15390 else { if (y > halfPi$2 - epsilon$2) y = halfPi$2 - epsilon$2; }
15391 var r = f / pow(tany(y), n);
15392 return [r * sin$1(n * x), f - r * cos$1(n * x)];
15395 project.invert = function(x, y) {
15396 var fy = f - y, r = sign$2(n) * sqrt(x * x + fy * fy);
15397 return [atan2(x, abs$2(fy)) / n * sign$2(fy), 2 * atan(pow(f / r, 1 / n)) - halfPi$2];
15403 function conicConformal() {
15404 return conicProjection(conicConformalRaw)
15406 .parallels([30, 30]);
15409 function equirectangularRaw(lambda, phi) {
15410 return [lambda, phi];
15413 equirectangularRaw.invert = equirectangularRaw;
15415 function equirectangular() {
15416 return projection(equirectangularRaw)
15420 function conicEquidistantRaw(y0, y1) {
15421 var cy0 = cos$1(y0),
15422 n = y0 === y1 ? sin$1(y0) : (cy0 - cos$1(y1)) / (y1 - y0),
15425 if (abs$2(n) < epsilon$2) return equirectangularRaw;
15427 function project(x, y) {
15428 var gy = g - y, nx = n * x;
15429 return [gy * sin$1(nx), g - gy * cos$1(nx)];
15432 project.invert = function(x, y) {
15434 return [atan2(x, abs$2(gy)) / n * sign$2(gy), g - sign$2(n) * sqrt(x * x + gy * gy)];
15440 function conicEquidistant() {
15441 return conicProjection(conicEquidistantRaw)
15443 .center([0, 13.9389]);
15453 function equalEarthRaw(lambda, phi) {
15454 var l = asin(M * sin$1(phi)), l2 = l * l, l6 = l2 * l2 * l2;
15456 lambda * cos$1(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))),
15457 l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2))
15461 equalEarthRaw.invert = function(x, y) {
15462 var l = y, l2 = l * l, l6 = l2 * l2 * l2;
15463 for (var i = 0, delta, fy, fpy; i < iterations; ++i) {
15464 fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y;
15465 fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2);
15466 l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2;
15467 if (abs$2(delta) < epsilon2$1) break;
15470 M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos$1(l),
15475 function equalEarth() {
15476 return projection(equalEarthRaw)
15480 function gnomonicRaw(x, y) {
15481 var cy = cos$1(y), k = cos$1(x) * cy;
15482 return [cy * sin$1(x) / k, sin$1(y) / k];
15485 gnomonicRaw.invert = azimuthalInvert(atan);
15487 function gnomonic() {
15488 return projection(gnomonicRaw)
15493 function scaleTranslate$1(kx, ky, tx, ty) {
15494 return kx === 1 && ky === 1 && tx === 0 && ty === 0 ? identity$4 : transformer({
15495 point: function(x, y) {
15496 this.stream.point(x * kx + tx, y * ky + ty);
15501 function d3_geoIdentity() {
15502 var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, transform = identity$4, // scale, translate and reflect
15503 x0 = null, y0, x1, y1, // clip extent
15504 postclip = identity$4,
15510 cache = cacheStream = null;
15514 return projection = {
15515 stream: function(stream) {
15516 return cache && cacheStream === stream ? cache : cache = transform(postclip(cacheStream = stream));
15518 postclip: function(_) {
15519 return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;
15521 clipExtent: function(_) {
15522 return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$4) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];
15524 scale: function(_) {
15525 return arguments.length ? (transform = scaleTranslate$1((k = +_) * sx, k * sy, tx, ty), reset()) : k;
15527 translate: function(_) {
15528 return arguments.length ? (transform = scaleTranslate$1(k * sx, k * sy, tx = +_[0], ty = +_[1]), reset()) : [tx, ty];
15530 reflectX: function(_) {
15531 return arguments.length ? (transform = scaleTranslate$1(k * (sx = _ ? -1 : 1), k * sy, tx, ty), reset()) : sx < 0;
15533 reflectY: function(_) {
15534 return arguments.length ? (transform = scaleTranslate$1(k * sx, k * (sy = _ ? -1 : 1), tx, ty), reset()) : sy < 0;
15536 fitExtent: function(extent, object) {
15537 return fitExtent(projection, extent, object);
15539 fitSize: function(size, object) {
15540 return fitSize(projection, size, object);
15542 fitWidth: function(width, object) {
15543 return fitWidth(projection, width, object);
15545 fitHeight: function(height, object) {
15546 return fitHeight(projection, height, object);
15551 function naturalEarth1Raw(lambda, phi) {
15552 var phi2 = phi * phi, phi4 = phi2 * phi2;
15554 lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))),
15555 phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))
15559 naturalEarth1Raw.invert = function(x, y) {
15560 var phi = y, i = 25, delta;
15562 var phi2 = phi * phi, phi4 = phi2 * phi2;
15563 phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) /
15564 (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));
15565 } while (abs$2(delta) > epsilon$2 && --i > 0);
15567 x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))),
15572 function naturalEarth1() {
15573 return projection(naturalEarth1Raw)
15577 function orthographicRaw(x, y) {
15578 return [cos$1(y) * sin$1(x), sin$1(y)];
15581 orthographicRaw.invert = azimuthalInvert(asin);
15583 function orthographic() {
15584 return projection(orthographicRaw)
15586 .clipAngle(90 + epsilon$2);
15589 function stereographicRaw(x, y) {
15590 var cy = cos$1(y), k = 1 + cos$1(x) * cy;
15591 return [cy * sin$1(x) / k, sin$1(y) / k];
15594 stereographicRaw.invert = azimuthalInvert(function(z) {
15595 return 2 * atan(z);
15598 function stereographic() {
15599 return projection(stereographicRaw)
15604 function transverseMercatorRaw(lambda, phi) {
15605 return [log(tan((halfPi$2 + phi) / 2)), -lambda];
15608 transverseMercatorRaw.invert = function(x, y) {
15609 return [-y, 2 * atan(exp(x)) - halfPi$2];
15612 function transverseMercator() {
15613 var m = mercatorProjection(transverseMercatorRaw),
15617 m.center = function(_) {
15618 return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);
15621 m.rotate = function(_) {
15622 return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);
15625 return rotate([0, 0, 90])
15629 function defaultSeparation(a, b) {
15630 return a.parent === b.parent ? 1 : 2;
15633 function meanX(children) {
15634 return children.reduce(meanXReduce, 0) / children.length;
15637 function meanXReduce(x, c) {
15641 function maxY(children) {
15642 return 1 + children.reduce(maxYReduce, 0);
15645 function maxYReduce(y, c) {
15646 return Math.max(y, c.y);
15649 function leafLeft(node) {
15651 while (children = node.children) node = children[0];
15655 function leafRight(node) {
15657 while (children = node.children) node = children[children.length - 1];
15661 function cluster() {
15662 var separation = defaultSeparation,
15667 function cluster(root) {
15671 // First walk, computing the initial x & y values.
15672 root.eachAfter(function(node) {
15673 var children = node.children;
15675 node.x = meanX(children);
15676 node.y = maxY(children);
15678 node.x = previousNode ? x += separation(node, previousNode) : 0;
15680 previousNode = node;
15684 var left = leafLeft(root),
15685 right = leafRight(root),
15686 x0 = left.x - separation(left, right) / 2,
15687 x1 = right.x + separation(right, left) / 2;
15689 // Second walk, normalizing x & y to the desired size.
15690 return root.eachAfter(nodeSize ? function(node) {
15691 node.x = (node.x - root.x) * dx;
15692 node.y = (root.y - node.y) * dy;
15693 } : function(node) {
15694 node.x = (node.x - x0) / (x1 - x0) * dx;
15695 node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;
15699 cluster.separation = function(x) {
15700 return arguments.length ? (separation = x, cluster) : separation;
15703 cluster.size = function(x) {
15704 return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);
15707 cluster.nodeSize = function(x) {
15708 return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);
15714 function count(node) {
15716 children = node.children,
15717 i = children && children.length;
15719 else while (--i >= 0) sum += children[i].value;
15723 function node_count() {
15724 return this.eachAfter(count);
15727 function node_each(callback) {
15728 var node = this, current, next = [node], children, i, n;
15730 current = next.reverse(), next = [];
15731 while (node = current.pop()) {
15732 callback(node), children = node.children;
15733 if (children) for (i = 0, n = children.length; i < n; ++i) {
15734 next.push(children[i]);
15737 } while (next.length);
15741 function node_eachBefore(callback) {
15742 var node = this, nodes = [node], children, i;
15743 while (node = nodes.pop()) {
15744 callback(node), children = node.children;
15745 if (children) for (i = children.length - 1; i >= 0; --i) {
15746 nodes.push(children[i]);
15752 function node_eachAfter(callback) {
15753 var node = this, nodes = [node], next = [], children, i, n;
15754 while (node = nodes.pop()) {
15755 next.push(node), children = node.children;
15756 if (children) for (i = 0, n = children.length; i < n; ++i) {
15757 nodes.push(children[i]);
15760 while (node = next.pop()) {
15766 function node_sum(value) {
15767 return this.eachAfter(function(node) {
15768 var sum = +value(node.data) || 0,
15769 children = node.children,
15770 i = children && children.length;
15771 while (--i >= 0) sum += children[i].value;
15776 function node_sort(compare) {
15777 return this.eachBefore(function(node) {
15778 if (node.children) {
15779 node.children.sort(compare);
15784 function node_path(end) {
15786 ancestor = leastCommonAncestor(start, end),
15788 while (start !== ancestor) {
15789 start = start.parent;
15792 var k = nodes.length;
15793 while (end !== ancestor) {
15794 nodes.splice(k, 0, end);
15800 function leastCommonAncestor(a, b) {
15801 if (a === b) return a;
15802 var aNodes = a.ancestors(),
15803 bNodes = b.ancestors(),
15815 function node_ancestors() {
15816 var node = this, nodes = [node];
15817 while (node = node.parent) {
15823 function node_descendants() {
15825 this.each(function(node) {
15831 function node_leaves() {
15833 this.eachBefore(function(node) {
15834 if (!node.children) {
15841 function node_links() {
15842 var root = this, links = [];
15843 root.each(function(node) {
15844 if (node !== root) { // Don’t include the root’s parent, if any.
15845 links.push({source: node.parent, target: node});
15851 function hierarchy(data, children) {
15852 var root = new Node(data),
15853 valued = +data.value && (root.value = data.value),
15861 if (children == null) children = defaultChildren;
15863 while (node = nodes.pop()) {
15864 if (valued) node.value = +node.data.value;
15865 if ((childs = children(node.data)) && (n = childs.length)) {
15866 node.children = new Array(n);
15867 for (i = n - 1; i >= 0; --i) {
15868 nodes.push(child = node.children[i] = new Node(childs[i]));
15869 child.parent = node;
15870 child.depth = node.depth + 1;
15875 return root.eachBefore(computeHeight);
15878 function node_copy() {
15879 return hierarchy(this).eachBefore(copyData);
15882 function defaultChildren(d) {
15886 function copyData(node) {
15887 node.data = node.data.data;
15890 function computeHeight(node) {
15892 do node.height = height;
15893 while ((node = node.parent) && (node.height < ++height));
15896 function Node(data) {
15900 this.parent = null;
15903 Node.prototype = hierarchy.prototype = {
15907 eachAfter: node_eachAfter,
15908 eachBefore: node_eachBefore,
15912 ancestors: node_ancestors,
15913 descendants: node_descendants,
15914 leaves: node_leaves,
15919 var slice$8 = Array.prototype.slice;
15921 function shuffle$1(array) {
15922 var m = array.length,
15927 i = Math.random() * m-- | 0;
15929 array[m] = array[i];
15936 function enclose(circles) {
15937 var i = 0, n = (circles = shuffle$1(slice$8.call(circles))).length, B = [], p, e;
15941 if (e && enclosesWeak(e, p)) ++i;
15942 else e = encloseBasis(B = extendBasis(B, p)), i = 0;
15948 function extendBasis(B, p) {
15951 if (enclosesWeakAll(p, B)) return [p];
15953 // If we get here then B must have at least one element.
15954 for (i = 0; i < B.length; ++i) {
15955 if (enclosesNot(p, B[i])
15956 && enclosesWeakAll(encloseBasis2(B[i], p), B)) {
15961 // If we get here then B must have at least two elements.
15962 for (i = 0; i < B.length - 1; ++i) {
15963 for (j = i + 1; j < B.length; ++j) {
15964 if (enclosesNot(encloseBasis2(B[i], B[j]), p)
15965 && enclosesNot(encloseBasis2(B[i], p), B[j])
15966 && enclosesNot(encloseBasis2(B[j], p), B[i])
15967 && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) {
15968 return [B[i], B[j], p];
15973 // If we get here then something is very wrong.
15977 function enclosesNot(a, b) {
15978 var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y;
15979 return dr < 0 || dr * dr < dx * dx + dy * dy;
15982 function enclosesWeak(a, b) {
15983 var dr = a.r - b.r + 1e-6, dx = b.x - a.x, dy = b.y - a.y;
15984 return dr > 0 && dr * dr > dx * dx + dy * dy;
15987 function enclosesWeakAll(a, B) {
15988 for (var i = 0; i < B.length; ++i) {
15989 if (!enclosesWeak(a, B[i])) {
15996 function encloseBasis(B) {
15997 switch (B.length) {
15998 case 1: return encloseBasis1(B[0]);
15999 case 2: return encloseBasis2(B[0], B[1]);
16000 case 3: return encloseBasis3(B[0], B[1], B[2]);
16004 function encloseBasis1(a) {
16012 function encloseBasis2(a, b) {
16013 var x1 = a.x, y1 = a.y, r1 = a.r,
16014 x2 = b.x, y2 = b.y, r2 = b.r,
16015 x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,
16016 l = Math.sqrt(x21 * x21 + y21 * y21);
16018 x: (x1 + x2 + x21 / l * r21) / 2,
16019 y: (y1 + y2 + y21 / l * r21) / 2,
16020 r: (l + r1 + r2) / 2
16024 function encloseBasis3(a, b, c) {
16025 var x1 = a.x, y1 = a.y, r1 = a.r,
16026 x2 = b.x, y2 = b.y, r2 = b.r,
16027 x3 = c.x, y3 = c.y, r3 = c.r,
16034 d1 = x1 * x1 + y1 * y1 - r1 * r1,
16035 d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2,
16036 d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3,
16037 ab = a3 * b2 - a2 * b3,
16038 xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1,
16039 xb = (b3 * c2 - b2 * c3) / ab,
16040 ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1,
16041 yb = (a2 * c3 - a3 * c2) / ab,
16042 A = xb * xb + yb * yb - 1,
16043 B = 2 * (r1 + xa * xb + ya * yb),
16044 C = xa * xa + ya * ya - r1 * r1,
16045 r = -(A ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);
16047 x: x1 + xa + xb * r,
16048 y: y1 + ya + yb * r,
16053 function place(b, a, c) {
16054 var dx = b.x - a.x, x, a2,
16055 dy = b.y - a.y, y, b2,
16056 d2 = dx * dx + dy * dy;
16058 a2 = a.r + c.r, a2 *= a2;
16059 b2 = b.r + c.r, b2 *= b2;
16061 x = (d2 + b2 - a2) / (2 * d2);
16062 y = Math.sqrt(Math.max(0, b2 / d2 - x * x));
16063 c.x = b.x - x * dx - y * dy;
16064 c.y = b.y - x * dy + y * dx;
16066 x = (d2 + a2 - b2) / (2 * d2);
16067 y = Math.sqrt(Math.max(0, a2 / d2 - x * x));
16068 c.x = a.x + x * dx - y * dy;
16069 c.y = a.y + x * dy + y * dx;
16077 function intersects(a, b) {
16078 var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y;
16079 return dr > 0 && dr * dr > dx * dx + dy * dy;
16082 function score(node) {
16086 dx = (a.x * b.r + b.x * a.r) / ab,
16087 dy = (a.y * b.r + b.y * a.r) / ab;
16088 return dx * dx + dy * dy;
16091 function Node$1(circle) {
16094 this.previous = null;
16097 function packEnclose(circles) {
16098 if (!(n = circles.length)) return 0;
16100 var a, b, c, n, aa, ca, i, j, k, sj, sk;
16102 // Place the first circle.
16103 a = circles[0], a.x = 0, a.y = 0;
16104 if (!(n > 1)) return a.r;
16106 // Place the second circle.
16107 b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;
16108 if (!(n > 2)) return a.r + b.r;
16110 // Place the third circle.
16111 place(b, a, c = circles[2]);
16113 // Initialize the front-chain using the first three circles a, b and c.
16114 a = new Node$1(a), b = new Node$1(b), c = new Node$1(c);
16115 a.next = c.previous = b;
16116 b.next = a.previous = c;
16117 c.next = b.previous = a;
16119 // Attempt to place each remaining circle…
16120 pack: for (i = 3; i < n; ++i) {
16121 place(a._, b._, c = circles[i]), c = new Node$1(c);
16123 // Find the closest intersecting circle on the front-chain, if any.
16124 // “Closeness” is determined by linear distance along the front-chain.
16125 // “Ahead” or “behind” is likewise determined by linear distance.
16126 j = b.next, k = a.previous, sj = b._.r, sk = a._.r;
16129 if (intersects(j._, c._)) {
16130 b = j, a.next = b, b.previous = a, --i;
16133 sj += j._.r, j = j.next;
16135 if (intersects(k._, c._)) {
16136 a = k, a.next = b, b.previous = a, --i;
16139 sk += k._.r, k = k.previous;
16141 } while (j !== k.next);
16143 // Success! Insert the new circle c between a and b.
16144 c.previous = a, c.next = b, a.next = b.previous = b = c;
16146 // Compute the new closest circle pair to the centroid.
16148 while ((c = c.next) !== b) {
16149 if ((ca = score(c)) < aa) {
16156 // Compute the enclosing circle of the front chain.
16157 a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = enclose(a);
16159 // Translate the circles to put the enclosing circle around the origin.
16160 for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;
16165 function siblings(circles) {
16166 packEnclose(circles);
16170 function optional(f) {
16171 return f == null ? null : required(f);
16174 function required(f) {
16175 if (typeof f !== "function") throw new Error;
16179 function constantZero() {
16183 function constant$9(x) {
16184 return function() {
16189 function defaultRadius$1(d) {
16190 return Math.sqrt(d.value);
16193 function index$1() {
16197 padding = constantZero;
16199 function pack(root) {
16200 root.x = dx / 2, root.y = dy / 2;
16202 root.eachBefore(radiusLeaf(radius))
16203 .eachAfter(packChildren(padding, 0.5))
16204 .eachBefore(translateChild(1));
16206 root.eachBefore(radiusLeaf(defaultRadius$1))
16207 .eachAfter(packChildren(constantZero, 1))
16208 .eachAfter(packChildren(padding, root.r / Math.min(dx, dy)))
16209 .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));
16214 pack.radius = function(x) {
16215 return arguments.length ? (radius = optional(x), pack) : radius;
16218 pack.size = function(x) {
16219 return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];
16222 pack.padding = function(x) {
16223 return arguments.length ? (padding = typeof x === "function" ? x : constant$9(+x), pack) : padding;
16229 function radiusLeaf(radius) {
16230 return function(node) {
16231 if (!node.children) {
16232 node.r = Math.max(0, +radius(node) || 0);
16237 function packChildren(padding, k) {
16238 return function(node) {
16239 if (children = node.children) {
16242 n = children.length,
16243 r = padding(node) * k || 0,
16246 if (r) for (i = 0; i < n; ++i) children[i].r += r;
16247 e = packEnclose(children);
16248 if (r) for (i = 0; i < n; ++i) children[i].r -= r;
16254 function translateChild(k) {
16255 return function(node) {
16256 var parent = node.parent;
16259 node.x = parent.x + k * node.x;
16260 node.y = parent.y + k * node.y;
16265 function roundNode(node) {
16266 node.x0 = Math.round(node.x0);
16267 node.y0 = Math.round(node.y0);
16268 node.x1 = Math.round(node.x1);
16269 node.y1 = Math.round(node.y1);
16272 function treemapDice(parent, x0, y0, x1, y1) {
16273 var nodes = parent.children,
16277 k = parent.value && (x1 - x0) / parent.value;
16280 node = nodes[i], node.y0 = y0, node.y1 = y1;
16281 node.x0 = x0, node.x1 = x0 += node.value * k;
16285 function partition() {
16291 function partition(root) {
16292 var n = root.height + 1;
16297 root.eachBefore(positionNode(dy, n));
16298 if (round) root.eachBefore(roundNode);
16302 function positionNode(dy, n) {
16303 return function(node) {
16304 if (node.children) {
16305 treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);
16309 x1 = node.x1 - padding,
16310 y1 = node.y1 - padding;
16311 if (x1 < x0) x0 = x1 = (x0 + x1) / 2;
16312 if (y1 < y0) y0 = y1 = (y0 + y1) / 2;
16320 partition.round = function(x) {
16321 return arguments.length ? (round = !!x, partition) : round;
16324 partition.size = function(x) {
16325 return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];
16328 partition.padding = function(x) {
16329 return arguments.length ? (padding = +x, partition) : padding;
16335 var keyPrefix$1 = "$", // Protect against keys like “__proto__”.
16336 preroot = {depth: -1},
16339 function defaultId(d) {
16343 function defaultParentId(d) {
16347 function stratify() {
16348 var id = defaultId,
16349 parentId = defaultParentId;
16351 function stratify(data) {
16358 nodes = new Array(n),
16363 for (i = 0; i < n; ++i) {
16364 d = data[i], node = nodes[i] = new Node(d);
16365 if ((nodeId = id(d, i, data)) != null && (nodeId += "")) {
16366 nodeKey = keyPrefix$1 + (node.id = nodeId);
16367 nodeByKey[nodeKey] = nodeKey in nodeByKey ? ambiguous : node;
16371 for (i = 0; i < n; ++i) {
16372 node = nodes[i], nodeId = parentId(data[i], i, data);
16373 if (nodeId == null || !(nodeId += "")) {
16374 if (root) throw new Error("multiple roots");
16377 parent = nodeByKey[keyPrefix$1 + nodeId];
16378 if (!parent) throw new Error("missing: " + nodeId);
16379 if (parent === ambiguous) throw new Error("ambiguous: " + nodeId);
16380 if (parent.children) parent.children.push(node);
16381 else parent.children = [node];
16382 node.parent = parent;
16386 if (!root) throw new Error("no root");
16387 root.parent = preroot;
16388 root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);
16389 root.parent = null;
16390 if (n > 0) throw new Error("cycle");
16395 stratify.id = function(x) {
16396 return arguments.length ? (id = required(x), stratify) : id;
16399 stratify.parentId = function(x) {
16400 return arguments.length ? (parentId = required(x), stratify) : parentId;
16406 function defaultSeparation$1(a, b) {
16407 return a.parent === b.parent ? 1 : 2;
16410 // function radialSeparation(a, b) {
16411 // return (a.parent === b.parent ? 1 : 2) / a.depth;
16414 // This function is used to traverse the left contour of a subtree (or
16415 // subforest). It returns the successor of v on this contour. This successor is
16416 // either given by the leftmost child of v or by the thread of v. The function
16417 // returns null if and only if v is on the highest level of its subtree.
16418 function nextLeft(v) {
16419 var children = v.children;
16420 return children ? children[0] : v.t;
16423 // This function works analogously to nextLeft.
16424 function nextRight(v) {
16425 var children = v.children;
16426 return children ? children[children.length - 1] : v.t;
16429 // Shifts the current subtree rooted at w+. This is done by increasing
16430 // prelim(w+) and mod(w+) by shift.
16431 function moveSubtree(wm, wp, shift) {
16432 var change = shift / (wp.i - wm.i);
16440 // All other shifts, applied to the smaller subtrees between w- and w+, are
16441 // performed by this function. To prepare the shifts, we have to adjust
16442 // change(w+), shift(w+), and change(w-).
16443 function executeShifts(v) {
16446 children = v.children,
16447 i = children.length,
16453 shift += w.s + (change += w.c);
16457 // If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,
16458 // returns the specified (default) ancestor.
16459 function nextAncestor(vim, v, ancestor) {
16460 return vim.a.parent === v.parent ? vim.a : ancestor;
16463 function TreeNode(node, i) {
16465 this.parent = null;
16466 this.children = null;
16467 this.A = null; // default ancestor
16468 this.a = this; // ancestor
16469 this.z = 0; // prelim
16471 this.c = 0; // change
16472 this.s = 0; // shift
16473 this.t = null; // thread
16474 this.i = i; // number
16477 TreeNode.prototype = Object.create(Node.prototype);
16479 function treeRoot(root) {
16480 var tree = new TreeNode(root, 0),
16488 while (node = nodes.pop()) {
16489 if (children = node._.children) {
16490 node.children = new Array(n = children.length);
16491 for (i = n - 1; i >= 0; --i) {
16492 nodes.push(child = node.children[i] = new TreeNode(children[i], i));
16493 child.parent = node;
16498 (tree.parent = new TreeNode(null, 0)).children = [tree];
16502 // Node-link tree diagram using the Reingold-Tilford "tidy" algorithm
16504 var separation = defaultSeparation$1,
16509 function tree(root) {
16510 var t = treeRoot(root);
16512 // Compute the layout using Buchheim et al.’s algorithm.
16513 t.eachAfter(firstWalk), t.parent.m = -t.z;
16514 t.eachBefore(secondWalk);
16516 // If a fixed node size is specified, scale x and y.
16517 if (nodeSize) root.eachBefore(sizeNode);
16519 // If a fixed tree size is specified, scale x and y based on the extent.
16520 // Compute the left-most, right-most, and depth-most nodes for extents.
16525 root.eachBefore(function(node) {
16526 if (node.x < left.x) left = node;
16527 if (node.x > right.x) right = node;
16528 if (node.depth > bottom.depth) bottom = node;
16530 var s = left === right ? 1 : separation(left, right) / 2,
16532 kx = dx / (right.x + s + tx),
16533 ky = dy / (bottom.depth || 1);
16534 root.eachBefore(function(node) {
16535 node.x = (node.x + tx) * kx;
16536 node.y = node.depth * ky;
16543 // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is
16544 // applied recursively to the children of v, as well as the function
16545 // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the
16546 // node v is placed to the midpoint of its outermost children.
16547 function firstWalk(v) {
16548 var children = v.children,
16549 siblings = v.parent.children,
16550 w = v.i ? siblings[v.i - 1] : null;
16553 var midpoint = (children[0].z + children[children.length - 1].z) / 2;
16555 v.z = w.z + separation(v._, w._);
16556 v.m = v.z - midpoint;
16561 v.z = w.z + separation(v._, w._);
16563 v.parent.A = apportion(v, w, v.parent.A || siblings[0]);
16566 // Computes all real x-coordinates by summing up the modifiers recursively.
16567 function secondWalk(v) {
16568 v._.x = v.z + v.parent.m;
16572 // The core of the algorithm. Here, a new subtree is combined with the
16573 // previous subtrees. Threads are used to traverse the inside and outside
16574 // contours of the left and right subtree up to the highest common level. The
16575 // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the
16576 // superscript o means outside and i means inside, the subscript - means left
16577 // subtree and + means right subtree. For summing up the modifiers along the
16578 // contour, we use respective variables si+, si-, so-, and so+. Whenever two
16579 // nodes of the inside contours conflict, we compute the left one of the
16580 // greatest uncommon ancestors using the function ANCESTOR and call MOVE
16581 // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.
16582 // Finally, we add a new thread (if necessary).
16583 function apportion(v, w, ancestor) {
16588 vom = vip.parent.children[0],
16594 while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {
16595 vom = nextLeft(vom);
16596 vop = nextRight(vop);
16598 shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);
16600 moveSubtree(nextAncestor(vim, v, ancestor), v, shift);
16609 if (vim && !nextRight(vop)) {
16611 vop.m += sim - sop;
16613 if (vip && !nextLeft(vom)) {
16615 vom.m += sip - som;
16622 function sizeNode(node) {
16624 node.y = node.depth * dy;
16627 tree.separation = function(x) {
16628 return arguments.length ? (separation = x, tree) : separation;
16631 tree.size = function(x) {
16632 return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);
16635 tree.nodeSize = function(x) {
16636 return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);
16642 function treemapSlice(parent, x0, y0, x1, y1) {
16643 var nodes = parent.children,
16647 k = parent.value && (y1 - y0) / parent.value;
16650 node = nodes[i], node.x0 = x0, node.x1 = x1;
16651 node.y0 = y0, node.y1 = y0 += node.value * k;
16655 var phi = (1 + Math.sqrt(5)) / 2;
16657 function squarifyRatio(ratio, parent, x0, y0, x1, y1) {
16659 nodes = parent.children,
16666 value = parent.value,
16676 dx = x1 - x0, dy = y1 - y0;
16678 // Find the next non-empty node.
16679 do sumValue = nodes[i1++].value; while (!sumValue && i1 < n);
16680 minValue = maxValue = sumValue;
16681 alpha = Math.max(dy / dx, dx / dy) / (value * ratio);
16682 beta = sumValue * sumValue * alpha;
16683 minRatio = Math.max(maxValue / beta, beta / minValue);
16685 // Keep adding nodes while the aspect ratio maintains or improves.
16686 for (; i1 < n; ++i1) {
16687 sumValue += nodeValue = nodes[i1].value;
16688 if (nodeValue < minValue) minValue = nodeValue;
16689 if (nodeValue > maxValue) maxValue = nodeValue;
16690 beta = sumValue * sumValue * alpha;
16691 newRatio = Math.max(maxValue / beta, beta / minValue);
16692 if (newRatio > minRatio) { sumValue -= nodeValue; break; }
16693 minRatio = newRatio;
16696 // Position and record the row orientation.
16697 rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});
16698 if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);
16699 else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);
16700 value -= sumValue, i0 = i1;
16706 var squarify = (function custom(ratio) {
16708 function squarify(parent, x0, y0, x1, y1) {
16709 squarifyRatio(ratio, parent, x0, y0, x1, y1);
16712 squarify.ratio = function(x) {
16713 return custom((x = +x) > 1 ? x : 1);
16719 function index$2() {
16720 var tile = squarify,
16724 paddingStack = [0],
16725 paddingInner = constantZero,
16726 paddingTop = constantZero,
16727 paddingRight = constantZero,
16728 paddingBottom = constantZero,
16729 paddingLeft = constantZero;
16731 function treemap(root) {
16736 root.eachBefore(positionNode);
16737 paddingStack = [0];
16738 if (round) root.eachBefore(roundNode);
16742 function positionNode(node) {
16743 var p = paddingStack[node.depth],
16748 if (x1 < x0) x0 = x1 = (x0 + x1) / 2;
16749 if (y1 < y0) y0 = y1 = (y0 + y1) / 2;
16754 if (node.children) {
16755 p = paddingStack[node.depth + 1] = paddingInner(node) / 2;
16756 x0 += paddingLeft(node) - p;
16757 y0 += paddingTop(node) - p;
16758 x1 -= paddingRight(node) - p;
16759 y1 -= paddingBottom(node) - p;
16760 if (x1 < x0) x0 = x1 = (x0 + x1) / 2;
16761 if (y1 < y0) y0 = y1 = (y0 + y1) / 2;
16762 tile(node, x0, y0, x1, y1);
16766 treemap.round = function(x) {
16767 return arguments.length ? (round = !!x, treemap) : round;
16770 treemap.size = function(x) {
16771 return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];
16774 treemap.tile = function(x) {
16775 return arguments.length ? (tile = required(x), treemap) : tile;
16778 treemap.padding = function(x) {
16779 return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();
16782 treemap.paddingInner = function(x) {
16783 return arguments.length ? (paddingInner = typeof x === "function" ? x : constant$9(+x), treemap) : paddingInner;
16786 treemap.paddingOuter = function(x) {
16787 return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();
16790 treemap.paddingTop = function(x) {
16791 return arguments.length ? (paddingTop = typeof x === "function" ? x : constant$9(+x), treemap) : paddingTop;
16794 treemap.paddingRight = function(x) {
16795 return arguments.length ? (paddingRight = typeof x === "function" ? x : constant$9(+x), treemap) : paddingRight;
16798 treemap.paddingBottom = function(x) {
16799 return arguments.length ? (paddingBottom = typeof x === "function" ? x : constant$9(+x), treemap) : paddingBottom;
16802 treemap.paddingLeft = function(x) {
16803 return arguments.length ? (paddingLeft = typeof x === "function" ? x : constant$9(+x), treemap) : paddingLeft;
16809 function binary(parent, x0, y0, x1, y1) {
16810 var nodes = parent.children,
16811 i, n = nodes.length,
16812 sum, sums = new Array(n + 1);
16814 for (sums[0] = sum = i = 0; i < n; ++i) {
16815 sums[i + 1] = sum += nodes[i].value;
16818 partition(0, n, parent.value, x0, y0, x1, y1);
16820 function partition(i, j, value, x0, y0, x1, y1) {
16822 var node = nodes[i];
16823 node.x0 = x0, node.y0 = y0;
16824 node.x1 = x1, node.y1 = y1;
16828 var valueOffset = sums[i],
16829 valueTarget = (value / 2) + valueOffset,
16834 var mid = k + hi >>> 1;
16835 if (sums[mid] < valueTarget) k = mid + 1;
16839 if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k;
16841 var valueLeft = sums[k] - valueOffset,
16842 valueRight = value - valueLeft;
16844 if ((x1 - x0) > (y1 - y0)) {
16845 var xk = (x0 * valueRight + x1 * valueLeft) / value;
16846 partition(i, k, valueLeft, x0, y0, xk, y1);
16847 partition(k, j, valueRight, xk, y0, x1, y1);
16849 var yk = (y0 * valueRight + y1 * valueLeft) / value;
16850 partition(i, k, valueLeft, x0, y0, x1, yk);
16851 partition(k, j, valueRight, x0, yk, x1, y1);
16856 function sliceDice(parent, x0, y0, x1, y1) {
16857 (parent.depth & 1 ? treemapSlice : treemapDice)(parent, x0, y0, x1, y1);
16860 var resquarify = (function custom(ratio) {
16862 function resquarify(parent, x0, y0, x1, y1) {
16863 if ((rows = parent._squarify) && (rows.ratio === ratio)) {
16871 value = parent.value;
16874 row = rows[j], nodes = row.children;
16875 for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value;
16876 if (row.dice) treemapDice(row, x0, y0, x1, y0 += (y1 - y0) * row.value / value);
16877 else treemapSlice(row, x0, y0, x0 += (x1 - x0) * row.value / value, y1);
16878 value -= row.value;
16881 parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);
16882 rows.ratio = ratio;
16886 resquarify.ratio = function(x) {
16887 return custom((x = +x) > 1 ? x : 1);
16893 function d3_polygonArea(polygon) {
16895 n = polygon.length,
16897 b = polygon[n - 1],
16903 area += a[1] * b[0] - a[0] * b[1];
16909 function d3_polygonCentroid(polygon) {
16911 n = polygon.length,
16915 b = polygon[n - 1],
16922 k += c = a[0] * b[1] - b[0] * a[1];
16923 x += (a[0] + b[0]) * c;
16924 y += (a[1] + b[1]) * c;
16927 return k *= 3, [x / k, y / k];
16930 // Returns the 2D cross product of AB and AC vectors, i.e., the z-component of
16931 // the 3D cross product in a quadrant I Cartesian coordinate system (+x is
16932 // right, +y is up). Returns a positive value if ABC is counter-clockwise,
16933 // negative if clockwise, and zero if the points are collinear.
16934 function cross$1(a, b, c) {
16935 return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);
16938 function lexicographicOrder(a, b) {
16939 return a[0] - b[0] || a[1] - b[1];
16942 // Computes the upper convex hull per the monotone chain algorithm.
16943 // Assumes points.length >= 3, is sorted by x, unique in y.
16944 // Returns an array of indices into points in left-to-right order.
16945 function computeUpperHullIndexes(points) {
16946 var n = points.length,
16950 for (var i = 2; i < n; ++i) {
16951 while (size > 1 && cross$1(points[indexes[size - 2]], points[indexes[size - 1]], points[i]) <= 0) --size;
16952 indexes[size++] = i;
16955 return indexes.slice(0, size); // remove popped points
16958 function d3_polygonHull(points) {
16959 if ((n = points.length) < 3) return null;
16963 sortedPoints = new Array(n),
16964 flippedPoints = new Array(n);
16966 for (i = 0; i < n; ++i) sortedPoints[i] = [+points[i][0], +points[i][1], i];
16967 sortedPoints.sort(lexicographicOrder);
16968 for (i = 0; i < n; ++i) flippedPoints[i] = [sortedPoints[i][0], -sortedPoints[i][1]];
16970 var upperIndexes = computeUpperHullIndexes(sortedPoints),
16971 lowerIndexes = computeUpperHullIndexes(flippedPoints);
16973 // Construct the hull polygon, removing possible duplicate endpoints.
16974 var skipLeft = lowerIndexes[0] === upperIndexes[0],
16975 skipRight = lowerIndexes[lowerIndexes.length - 1] === upperIndexes[upperIndexes.length - 1],
16978 // Add upper hull in right-to-l order.
16979 // Then add lower hull in left-to-right order.
16980 for (i = upperIndexes.length - 1; i >= 0; --i) hull.push(points[sortedPoints[upperIndexes[i]][2]]);
16981 for (i = +skipLeft; i < lowerIndexes.length - skipRight; ++i) hull.push(points[sortedPoints[lowerIndexes[i]][2]]);
16986 function contains$3(polygon, point) {
16987 var n = polygon.length,
16988 p = polygon[n - 1],
16989 x = point[0], y = point[1],
16990 x0 = p[0], y0 = p[1],
16994 for (var i = 0; i < n; ++i) {
16995 p = polygon[i], x1 = p[0], y1 = p[1];
16996 if (((y1 > y) !== (y0 > y)) && (x < (x0 - x1) * (y - y1) / (y0 - y1) + x1)) inside = !inside;
17003 function length$1(polygon) {
17005 n = polygon.length,
17006 b = polygon[n - 1],
17021 perimeter += Math.sqrt(xa * xa + ya * ya);
17027 function defaultSource$1() {
17028 return Math.random();
17031 var uniform = (function sourceRandomUniform(source) {
17032 function randomUniform(min, max) {
17033 min = min == null ? 0 : +min;
17034 max = max == null ? 1 : +max;
17035 if (arguments.length === 1) max = min, min = 0;
17037 return function() {
17038 return source() * max + min;
17042 randomUniform.source = sourceRandomUniform;
17044 return randomUniform;
17045 })(defaultSource$1);
17047 var normal = (function sourceRandomNormal(source) {
17048 function randomNormal(mu, sigma) {
17050 mu = mu == null ? 0 : +mu;
17051 sigma = sigma == null ? 1 : +sigma;
17052 return function() {
17055 // If available, use the second previously-generated uniform random.
17056 if (x != null) y = x, x = null;
17058 // Otherwise, generate a new x and y.
17060 x = source() * 2 - 1;
17061 y = source() * 2 - 1;
17063 } while (!r || r > 1);
17065 return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r);
17069 randomNormal.source = sourceRandomNormal;
17071 return randomNormal;
17072 })(defaultSource$1);
17074 var logNormal = (function sourceRandomLogNormal(source) {
17075 function randomLogNormal() {
17076 var randomNormal = normal.source(source).apply(this, arguments);
17077 return function() {
17078 return Math.exp(randomNormal());
17082 randomLogNormal.source = sourceRandomLogNormal;
17084 return randomLogNormal;
17085 })(defaultSource$1);
17087 var irwinHall = (function sourceRandomIrwinHall(source) {
17088 function randomIrwinHall(n) {
17089 return function() {
17090 for (var sum = 0, i = 0; i < n; ++i) sum += source();
17095 randomIrwinHall.source = sourceRandomIrwinHall;
17097 return randomIrwinHall;
17098 })(defaultSource$1);
17100 var bates = (function sourceRandomBates(source) {
17101 function randomBates(n) {
17102 var randomIrwinHall = irwinHall.source(source)(n);
17103 return function() {
17104 return randomIrwinHall() / n;
17108 randomBates.source = sourceRandomBates;
17110 return randomBates;
17111 })(defaultSource$1);
17113 var exponential$1 = (function sourceRandomExponential(source) {
17114 function randomExponential(lambda) {
17115 return function() {
17116 return -Math.log(1 - source()) / lambda;
17120 randomExponential.source = sourceRandomExponential;
17122 return randomExponential;
17123 })(defaultSource$1);
17125 function initRange(domain, range) {
17126 switch (arguments.length) {
17128 case 1: this.range(domain); break;
17129 default: this.range(range).domain(domain); break;
17134 function initInterpolator(domain, interpolator) {
17135 switch (arguments.length) {
17137 case 1: this.interpolator(domain); break;
17138 default: this.interpolator(interpolator).domain(domain); break;
17143 var array$4 = Array.prototype;
17145 var map$4 = array$4.map;
17146 var slice$9 = array$4.slice;
17148 var implicit = {name: "implicit"};
17150 function ordinal() {
17151 var index = map$3(),
17154 unknown = implicit;
17156 function scale(d) {
17157 var key = d + "", i = index.get(key);
17159 if (unknown !== implicit) return unknown;
17160 index.set(key, i = domain.push(d));
17162 return range[(i - 1) % range.length];
17165 scale.domain = function(_) {
17166 if (!arguments.length) return domain.slice();
17167 domain = [], index = map$3();
17168 var i = -1, n = _.length, d, key;
17169 while (++i < n) if (!index.has(key = (d = _[i]) + "")) index.set(key, domain.push(d));
17173 scale.range = function(_) {
17174 return arguments.length ? (range = slice$9.call(_), scale) : range.slice();
17177 scale.unknown = function(_) {
17178 return arguments.length ? (unknown = _, scale) : unknown;
17181 scale.copy = function() {
17182 return ordinal(domain, range).unknown(unknown);
17185 initRange.apply(scale, arguments);
17191 var scale = ordinal().unknown(undefined),
17192 domain = scale.domain,
17193 ordinalRange = scale.range,
17202 delete scale.unknown;
17204 function rescale() {
17205 var n = domain().length,
17206 reverse = range[1] < range[0],
17207 start = range[reverse - 0],
17208 stop = range[1 - reverse];
17209 step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);
17210 if (round) step = Math.floor(step);
17211 start += (stop - start - step * (n - paddingInner)) * align;
17212 bandwidth = step * (1 - paddingInner);
17213 if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);
17214 var values = d3_range(n).map(function(i) { return start + step * i; });
17215 return ordinalRange(reverse ? values.reverse() : values);
17218 scale.domain = function(_) {
17219 return arguments.length ? (domain(_), rescale()) : domain();
17222 scale.range = function(_) {
17223 return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();
17226 scale.rangeRound = function(_) {
17227 return range = [+_[0], +_[1]], round = true, rescale();
17230 scale.bandwidth = function() {
17234 scale.step = function() {
17238 scale.round = function(_) {
17239 return arguments.length ? (round = !!_, rescale()) : round;
17242 scale.padding = function(_) {
17243 return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;
17246 scale.paddingInner = function(_) {
17247 return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;
17250 scale.paddingOuter = function(_) {
17251 return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;
17254 scale.align = function(_) {
17255 return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;
17258 scale.copy = function() {
17259 return band(domain(), range)
17261 .paddingInner(paddingInner)
17262 .paddingOuter(paddingOuter)
17266 return initRange.apply(rescale(), arguments);
17269 function pointish(scale) {
17270 var copy = scale.copy;
17272 scale.padding = scale.paddingOuter;
17273 delete scale.paddingInner;
17274 delete scale.paddingOuter;
17276 scale.copy = function() {
17277 return pointish(copy());
17283 function point$1() {
17284 return pointish(band.apply(null, arguments).paddingInner(1));
17287 function constant$a(x) {
17288 return function() {
17293 function number$2(x) {
17299 function identity$5(x) {
17303 function normalize(a, b) {
17304 return (b -= (a = +a))
17305 ? function(x) { return (x - a) / b; }
17306 : constant$a(isNaN(b) ? NaN : 0.5);
17309 function clamper(domain) {
17310 var a = domain[0], b = domain[domain.length - 1], t;
17311 if (a > b) t = a, a = b, b = t;
17312 return function(x) { return Math.max(a, Math.min(b, x)); };
17315 // normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].
17316 // interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].
17317 function bimap(domain, range, interpolate) {
17318 var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];
17319 if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);
17320 else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);
17321 return function(x) { return r0(d0(x)); };
17324 function polymap(domain, range, interpolate) {
17325 var j = Math.min(domain.length, range.length) - 1,
17330 // Reverse descending domains.
17331 if (domain[j] < domain[0]) {
17332 domain = domain.slice().reverse();
17333 range = range.slice().reverse();
17337 d[i] = normalize(domain[i], domain[i + 1]);
17338 r[i] = interpolate(range[i], range[i + 1]);
17341 return function(x) {
17342 var i = bisectRight(domain, x, 1, j) - 1;
17343 return r[i](d[i](x));
17347 function copy$1(source, target) {
17349 .domain(source.domain())
17350 .range(source.range())
17351 .interpolate(source.interpolate())
17352 .clamp(source.clamp())
17353 .unknown(source.unknown());
17356 function transformer$1() {
17359 interpolate = d3_interpolate,
17363 clamp = identity$5,
17368 function rescale() {
17369 piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;
17370 output = input = null;
17374 function scale(x) {
17375 return isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));
17378 scale.invert = function(y) {
17379 return clamp(untransform((input || (input = piecewise(range, domain.map(transform), d3_interpolateNumber)))(y)));
17382 scale.domain = function(_) {
17383 return arguments.length ? (domain = map$4.call(_, number$2), clamp === identity$5 || (clamp = clamper(domain)), rescale()) : domain.slice();
17386 scale.range = function(_) {
17387 return arguments.length ? (range = slice$9.call(_), rescale()) : range.slice();
17390 scale.rangeRound = function(_) {
17391 return range = slice$9.call(_), interpolate = interpolateRound, rescale();
17394 scale.clamp = function(_) {
17395 return arguments.length ? (clamp = _ ? clamper(domain) : identity$5, scale) : clamp !== identity$5;
17398 scale.interpolate = function(_) {
17399 return arguments.length ? (interpolate = _, rescale()) : interpolate;
17402 scale.unknown = function(_) {
17403 return arguments.length ? (unknown = _, scale) : unknown;
17406 return function(t, u) {
17407 transform = t, untransform = u;
17412 function continuous(transform, untransform) {
17413 return transformer$1()(transform, untransform);
17416 function tickFormat(start, stop, count, specifier) {
17417 var step = tickStep(start, stop, count),
17419 specifier = formatSpecifier(specifier == null ? ",f" : specifier);
17420 switch (specifier.type) {
17422 var value = Math.max(Math.abs(start), Math.abs(stop));
17423 if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;
17424 return formatPrefix(specifier, value);
17431 if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === "e");
17436 if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === "%") * 2;
17440 return format(specifier);
17443 function linearish(scale) {
17444 var domain = scale.domain;
17446 scale.ticks = function(count) {
17448 return ticks(d[0], d[d.length - 1], count == null ? 10 : count);
17451 scale.tickFormat = function(count, specifier) {
17453 return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);
17456 scale.nice = function(count) {
17457 if (count == null) count = 10;
17466 if (stop < start) {
17467 step = start, start = stop, stop = step;
17468 step = i0, i0 = i1, i1 = step;
17471 step = tickIncrement(start, stop, count);
17474 start = Math.floor(start / step) * step;
17475 stop = Math.ceil(stop / step) * step;
17476 step = tickIncrement(start, stop, count);
17477 } else if (step < 0) {
17478 start = Math.ceil(start * step) / step;
17479 stop = Math.floor(stop * step) / step;
17480 step = tickIncrement(start, stop, count);
17484 d[i0] = Math.floor(start / step) * step;
17485 d[i1] = Math.ceil(stop / step) * step;
17487 } else if (step < 0) {
17488 d[i0] = Math.ceil(start * step) / step;
17489 d[i1] = Math.floor(stop * step) / step;
17499 function linear$2() {
17500 var scale = continuous(identity$5, identity$5);
17502 scale.copy = function() {
17503 return copy$1(scale, linear$2());
17506 initRange.apply(scale, arguments);
17508 return linearish(scale);
17511 function identity$6(domain) {
17514 function scale(x) {
17515 return isNaN(x = +x) ? unknown : x;
17518 scale.invert = scale;
17520 scale.domain = scale.range = function(_) {
17521 return arguments.length ? (domain = map$4.call(_, number$2), scale) : domain.slice();
17524 scale.unknown = function(_) {
17525 return arguments.length ? (unknown = _, scale) : unknown;
17528 scale.copy = function() {
17529 return identity$6(domain).unknown(unknown);
17532 domain = arguments.length ? map$4.call(domain, number$2) : [0, 1];
17534 return linearish(scale);
17537 function nice(domain, interval) {
17538 domain = domain.slice();
17541 i1 = domain.length - 1,
17547 t = i0, i0 = i1, i1 = t;
17548 t = x0, x0 = x1, x1 = t;
17551 domain[i0] = interval.floor(x0);
17552 domain[i1] = interval.ceil(x1);
17556 function transformLog(x) {
17557 return Math.log(x);
17560 function transformExp(x) {
17561 return Math.exp(x);
17564 function transformLogn(x) {
17565 return -Math.log(-x);
17568 function transformExpn(x) {
17569 return -Math.exp(-x);
17572 function pow10(x) {
17573 return isFinite(x) ? +("1e" + x) : x < 0 ? 0 : x;
17576 function powp(base) {
17577 return base === 10 ? pow10
17578 : base === Math.E ? Math.exp
17579 : function(x) { return Math.pow(base, x); };
17582 function logp(base) {
17583 return base === Math.E ? Math.log
17584 : base === 10 && Math.log10
17585 || base === 2 && Math.log2
17586 || (base = Math.log(base), function(x) { return Math.log(x) / base; });
17589 function reflect(f) {
17590 return function(x) {
17595 function loggish(transform) {
17596 var scale = transform(transformLog, transformExp),
17597 domain = scale.domain,
17602 function rescale() {
17603 logs = logp(base), pows = powp(base);
17604 if (domain()[0] < 0) {
17605 logs = reflect(logs), pows = reflect(pows);
17606 transform(transformLogn, transformExpn);
17608 transform(transformLog, transformExp);
17613 scale.base = function(_) {
17614 return arguments.length ? (base = +_, rescale()) : base;
17617 scale.domain = function(_) {
17618 return arguments.length ? (domain(_), rescale()) : domain();
17621 scale.ticks = function(count) {
17624 v = d[d.length - 1],
17627 if (r = v < u) i = u, u = v, v = i;
17634 n = count == null ? 10 : +count,
17637 if (!(base % 1) && j - i < n) {
17638 i = Math.round(i) - 1, j = Math.round(j) + 1;
17639 if (u > 0) for (; i < j; ++i) {
17640 for (k = 1, p = pows(i); k < base; ++k) {
17642 if (t < u) continue;
17646 } else for (; i < j; ++i) {
17647 for (k = base - 1, p = pows(i); k >= 1; --k) {
17649 if (t < u) continue;
17655 z = ticks(i, j, Math.min(j - i, n)).map(pows);
17658 return r ? z.reverse() : z;
17661 scale.tickFormat = function(count, specifier) {
17662 if (specifier == null) specifier = base === 10 ? ".0e" : ",";
17663 if (typeof specifier !== "function") specifier = format(specifier);
17664 if (count === Infinity) return specifier;
17665 if (count == null) count = 10;
17666 var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?
17667 return function(d) {
17668 var i = d / pows(Math.round(logs(d)));
17669 if (i * base < base - 0.5) i *= base;
17670 return i <= k ? specifier(d) : "";
17674 scale.nice = function() {
17675 return domain(nice(domain(), {
17676 floor: function(x) { return pows(Math.floor(logs(x))); },
17677 ceil: function(x) { return pows(Math.ceil(logs(x))); }
17685 var scale = loggish(transformer$1()).domain([1, 10]);
17687 scale.copy = function() {
17688 return copy$1(scale, log$1()).base(scale.base());
17691 initRange.apply(scale, arguments);
17696 function transformSymlog(c) {
17697 return function(x) {
17698 return Math.sign(x) * Math.log1p(Math.abs(x / c));
17702 function transformSymexp(c) {
17703 return function(x) {
17704 return Math.sign(x) * Math.expm1(Math.abs(x)) * c;
17708 function symlogish(transform) {
17709 var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));
17711 scale.constant = function(_) {
17712 return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;
17715 return linearish(scale);
17718 function symlog() {
17719 var scale = symlogish(transformer$1());
17721 scale.copy = function() {
17722 return copy$1(scale, symlog()).constant(scale.constant());
17725 return initRange.apply(scale, arguments);
17728 function transformPow(exponent) {
17729 return function(x) {
17730 return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);
17734 function transformSqrt(x) {
17735 return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);
17738 function transformSquare(x) {
17739 return x < 0 ? -x * x : x * x;
17742 function powish(transform) {
17743 var scale = transform(identity$5, identity$5),
17746 function rescale() {
17747 return exponent === 1 ? transform(identity$5, identity$5)
17748 : exponent === 0.5 ? transform(transformSqrt, transformSquare)
17749 : transform(transformPow(exponent), transformPow(1 / exponent));
17752 scale.exponent = function(_) {
17753 return arguments.length ? (exponent = +_, rescale()) : exponent;
17756 return linearish(scale);
17760 var scale = powish(transformer$1());
17762 scale.copy = function() {
17763 return copy$1(scale, pow$1()).exponent(scale.exponent());
17766 initRange.apply(scale, arguments);
17771 function sqrt$1() {
17772 return pow$1.apply(null, arguments).exponent(0.5);
17775 function quantile() {
17781 function rescale() {
17782 var i = 0, n = Math.max(1, range.length);
17783 thresholds = new Array(n - 1);
17784 while (++i < n) thresholds[i - 1] = threshold(domain, i / n);
17788 function scale(x) {
17789 return isNaN(x = +x) ? unknown : range[bisectRight(thresholds, x)];
17792 scale.invertExtent = function(y) {
17793 var i = range.indexOf(y);
17794 return i < 0 ? [NaN, NaN] : [
17795 i > 0 ? thresholds[i - 1] : domain[0],
17796 i < thresholds.length ? thresholds[i] : domain[domain.length - 1]
17800 scale.domain = function(_) {
17801 if (!arguments.length) return domain.slice();
17803 for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);
17804 domain.sort(d3_ascending);
17808 scale.range = function(_) {
17809 return arguments.length ? (range = slice$9.call(_), rescale()) : range.slice();
17812 scale.unknown = function(_) {
17813 return arguments.length ? (unknown = _, scale) : unknown;
17816 scale.quantiles = function() {
17817 return thresholds.slice();
17820 scale.copy = function() {
17827 return initRange.apply(scale, arguments);
17830 function quantize() {
17838 function scale(x) {
17839 return x <= x ? range[bisectRight(domain, x, 0, n)] : unknown;
17842 function rescale() {
17844 domain = new Array(n);
17845 while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);
17849 scale.domain = function(_) {
17850 return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];
17853 scale.range = function(_) {
17854 return arguments.length ? (n = (range = slice$9.call(_)).length - 1, rescale()) : range.slice();
17857 scale.invertExtent = function(y) {
17858 var i = range.indexOf(y);
17859 return i < 0 ? [NaN, NaN]
17860 : i < 1 ? [x0, domain[0]]
17861 : i >= n ? [domain[n - 1], x1]
17862 : [domain[i - 1], domain[i]];
17865 scale.unknown = function(_) {
17866 return arguments.length ? (unknown = _, scale) : scale;
17869 scale.thresholds = function() {
17870 return domain.slice();
17873 scale.copy = function() {
17880 return initRange.apply(linearish(scale), arguments);
17883 function threshold$1() {
17884 var domain = [0.5],
17889 function scale(x) {
17890 return x <= x ? range[bisectRight(domain, x, 0, n)] : unknown;
17893 scale.domain = function(_) {
17894 return arguments.length ? (domain = slice$9.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();
17897 scale.range = function(_) {
17898 return arguments.length ? (range = slice$9.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();
17901 scale.invertExtent = function(y) {
17902 var i = range.indexOf(y);
17903 return [domain[i - 1], domain[i]];
17906 scale.unknown = function(_) {
17907 return arguments.length ? (unknown = _, scale) : unknown;
17910 scale.copy = function() {
17911 return threshold$1()
17917 return initRange.apply(scale, arguments);
17920 var t0$1 = new Date,
17923 function newInterval(floori, offseti, count, field) {
17925 function interval(date) {
17926 return floori(date = new Date(+date)), date;
17929 interval.floor = interval;
17931 interval.ceil = function(date) {
17932 return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;
17935 interval.round = function(date) {
17936 var d0 = interval(date),
17937 d1 = interval.ceil(date);
17938 return date - d0 < d1 - date ? d0 : d1;
17941 interval.offset = function(date, step) {
17942 return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;
17945 interval.range = function(start, stop, step) {
17946 var range = [], previous;
17947 start = interval.ceil(start);
17948 step = step == null ? 1 : Math.floor(step);
17949 if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date
17950 do range.push(previous = new Date(+start)), offseti(start, step), floori(start);
17951 while (previous < start && start < stop);
17955 interval.filter = function(test) {
17956 return newInterval(function(date) {
17957 if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);
17958 }, function(date, step) {
17959 if (date >= date) {
17960 if (step < 0) while (++step <= 0) {
17961 while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty
17962 } else while (--step >= 0) {
17963 while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty
17970 interval.count = function(start, end) {
17971 t0$1.setTime(+start), t1$1.setTime(+end);
17972 floori(t0$1), floori(t1$1);
17973 return Math.floor(count(t0$1, t1$1));
17976 interval.every = function(step) {
17977 step = Math.floor(step);
17978 return !isFinite(step) || !(step > 0) ? null
17979 : !(step > 1) ? interval
17980 : interval.filter(field
17981 ? function(d) { return field(d) % step === 0; }
17982 : function(d) { return interval.count(0, d) % step === 0; });
17989 var millisecond = newInterval(function() {
17991 }, function(date, step) {
17992 date.setTime(+date + step);
17993 }, function(start, end) {
17994 return end - start;
17997 // An optimized implementation for this simple case.
17998 millisecond.every = function(k) {
18000 if (!isFinite(k) || !(k > 0)) return null;
18001 if (!(k > 1)) return millisecond;
18002 return newInterval(function(date) {
18003 date.setTime(Math.floor(date / k) * k);
18004 }, function(date, step) {
18005 date.setTime(+date + step * k);
18006 }, function(start, end) {
18007 return (end - start) / k;
18010 var milliseconds = millisecond.range;
18012 var durationSecond = 1e3;
18013 var durationMinute = 6e4;
18014 var durationHour = 36e5;
18015 var durationDay = 864e5;
18016 var durationWeek = 6048e5;
18018 var second = newInterval(function(date) {
18019 date.setTime(date - date.getMilliseconds());
18020 }, function(date, step) {
18021 date.setTime(+date + step * durationSecond);
18022 }, function(start, end) {
18023 return (end - start) / durationSecond;
18024 }, function(date) {
18025 return date.getUTCSeconds();
18027 var seconds = second.range;
18029 var minute = newInterval(function(date) {
18030 date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);
18031 }, function(date, step) {
18032 date.setTime(+date + step * durationMinute);
18033 }, function(start, end) {
18034 return (end - start) / durationMinute;
18035 }, function(date) {
18036 return date.getMinutes();
18038 var minutes = minute.range;
18040 var hour = newInterval(function(date) {
18041 date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);
18042 }, function(date, step) {
18043 date.setTime(+date + step * durationHour);
18044 }, function(start, end) {
18045 return (end - start) / durationHour;
18046 }, function(date) {
18047 return date.getHours();
18049 var hours = hour.range;
18051 var day = newInterval(function(date) {
18052 date.setHours(0, 0, 0, 0);
18053 }, function(date, step) {
18054 date.setDate(date.getDate() + step);
18055 }, function(start, end) {
18056 return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;
18057 }, function(date) {
18058 return date.getDate() - 1;
18060 var days = day.range;
18062 function weekday(i) {
18063 return newInterval(function(date) {
18064 date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);
18065 date.setHours(0, 0, 0, 0);
18066 }, function(date, step) {
18067 date.setDate(date.getDate() + step * 7);
18068 }, function(start, end) {
18069 return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;
18073 var sunday = weekday(0);
18074 var monday = weekday(1);
18075 var tuesday = weekday(2);
18076 var wednesday = weekday(3);
18077 var thursday = weekday(4);
18078 var friday = weekday(5);
18079 var saturday = weekday(6);
18081 var sundays = sunday.range;
18082 var mondays = monday.range;
18083 var tuesdays = tuesday.range;
18084 var wednesdays = wednesday.range;
18085 var thursdays = thursday.range;
18086 var fridays = friday.range;
18087 var saturdays = saturday.range;
18089 var month = newInterval(function(date) {
18091 date.setHours(0, 0, 0, 0);
18092 }, function(date, step) {
18093 date.setMonth(date.getMonth() + step);
18094 }, function(start, end) {
18095 return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;
18096 }, function(date) {
18097 return date.getMonth();
18099 var months = month.range;
18101 var year = newInterval(function(date) {
18102 date.setMonth(0, 1);
18103 date.setHours(0, 0, 0, 0);
18104 }, function(date, step) {
18105 date.setFullYear(date.getFullYear() + step);
18106 }, function(start, end) {
18107 return end.getFullYear() - start.getFullYear();
18108 }, function(date) {
18109 return date.getFullYear();
18112 // An optimized implementation for this simple case.
18113 year.every = function(k) {
18114 return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {
18115 date.setFullYear(Math.floor(date.getFullYear() / k) * k);
18116 date.setMonth(0, 1);
18117 date.setHours(0, 0, 0, 0);
18118 }, function(date, step) {
18119 date.setFullYear(date.getFullYear() + step * k);
18122 var years = year.range;
18124 var utcMinute = newInterval(function(date) {
18125 date.setUTCSeconds(0, 0);
18126 }, function(date, step) {
18127 date.setTime(+date + step * durationMinute);
18128 }, function(start, end) {
18129 return (end - start) / durationMinute;
18130 }, function(date) {
18131 return date.getUTCMinutes();
18133 var utcMinutes = utcMinute.range;
18135 var utcHour = newInterval(function(date) {
18136 date.setUTCMinutes(0, 0, 0);
18137 }, function(date, step) {
18138 date.setTime(+date + step * durationHour);
18139 }, function(start, end) {
18140 return (end - start) / durationHour;
18141 }, function(date) {
18142 return date.getUTCHours();
18144 var utcHours = utcHour.range;
18146 var utcDay = newInterval(function(date) {
18147 date.setUTCHours(0, 0, 0, 0);
18148 }, function(date, step) {
18149 date.setUTCDate(date.getUTCDate() + step);
18150 }, function(start, end) {
18151 return (end - start) / durationDay;
18152 }, function(date) {
18153 return date.getUTCDate() - 1;
18155 var utcDays = utcDay.range;
18157 function utcWeekday(i) {
18158 return newInterval(function(date) {
18159 date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);
18160 date.setUTCHours(0, 0, 0, 0);
18161 }, function(date, step) {
18162 date.setUTCDate(date.getUTCDate() + step * 7);
18163 }, function(start, end) {
18164 return (end - start) / durationWeek;
18168 var utcSunday = utcWeekday(0);
18169 var utcMonday = utcWeekday(1);
18170 var utcTuesday = utcWeekday(2);
18171 var utcWednesday = utcWeekday(3);
18172 var utcThursday = utcWeekday(4);
18173 var utcFriday = utcWeekday(5);
18174 var utcSaturday = utcWeekday(6);
18176 var utcSundays = utcSunday.range;
18177 var utcMondays = utcMonday.range;
18178 var utcTuesdays = utcTuesday.range;
18179 var utcWednesdays = utcWednesday.range;
18180 var utcThursdays = utcThursday.range;
18181 var utcFridays = utcFriday.range;
18182 var utcSaturdays = utcSaturday.range;
18184 var utcMonth = newInterval(function(date) {
18185 date.setUTCDate(1);
18186 date.setUTCHours(0, 0, 0, 0);
18187 }, function(date, step) {
18188 date.setUTCMonth(date.getUTCMonth() + step);
18189 }, function(start, end) {
18190 return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;
18191 }, function(date) {
18192 return date.getUTCMonth();
18194 var utcMonths = utcMonth.range;
18196 var utcYear = newInterval(function(date) {
18197 date.setUTCMonth(0, 1);
18198 date.setUTCHours(0, 0, 0, 0);
18199 }, function(date, step) {
18200 date.setUTCFullYear(date.getUTCFullYear() + step);
18201 }, function(start, end) {
18202 return end.getUTCFullYear() - start.getUTCFullYear();
18203 }, function(date) {
18204 return date.getUTCFullYear();
18207 // An optimized implementation for this simple case.
18208 utcYear.every = function(k) {
18209 return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {
18210 date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);
18211 date.setUTCMonth(0, 1);
18212 date.setUTCHours(0, 0, 0, 0);
18213 }, function(date, step) {
18214 date.setUTCFullYear(date.getUTCFullYear() + step * k);
18217 var utcYears = utcYear.range;
18219 function localDate(d) {
18220 if (0 <= d.y && d.y < 100) {
18221 var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);
18222 date.setFullYear(d.y);
18225 return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);
18228 function utcDate(d) {
18229 if (0 <= d.y && d.y < 100) {
18230 var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));
18231 date.setUTCFullYear(d.y);
18234 return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));
18237 function newYear(y) {
18238 return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};
18241 function formatLocale$1(locale) {
18242 var locale_dateTime = locale.dateTime,
18243 locale_date = locale.date,
18244 locale_time = locale.time,
18245 locale_periods = locale.periods,
18246 locale_weekdays = locale.days,
18247 locale_shortWeekdays = locale.shortDays,
18248 locale_months = locale.months,
18249 locale_shortMonths = locale.shortMonths;
18251 var periodRe = formatRe(locale_periods),
18252 periodLookup = formatLookup(locale_periods),
18253 weekdayRe = formatRe(locale_weekdays),
18254 weekdayLookup = formatLookup(locale_weekdays),
18255 shortWeekdayRe = formatRe(locale_shortWeekdays),
18256 shortWeekdayLookup = formatLookup(locale_shortWeekdays),
18257 monthRe = formatRe(locale_months),
18258 monthLookup = formatLookup(locale_months),
18259 shortMonthRe = formatRe(locale_shortMonths),
18260 shortMonthLookup = formatLookup(locale_shortMonths);
18263 "a": formatShortWeekday,
18264 "A": formatWeekday,
18265 "b": formatShortMonth,
18268 "d": formatDayOfMonth,
18269 "e": formatDayOfMonth,
18270 "f": formatMicroseconds,
18273 "j": formatDayOfYear,
18274 "L": formatMilliseconds,
18275 "m": formatMonthNumber,
18276 "M": formatMinutes,
18278 "Q": formatUnixTimestamp,
18279 "s": formatUnixTimestampSeconds,
18280 "S": formatSeconds,
18281 "u": formatWeekdayNumberMonday,
18282 "U": formatWeekNumberSunday,
18283 "V": formatWeekNumberISO,
18284 "w": formatWeekdayNumberSunday,
18285 "W": formatWeekNumberMonday,
18289 "Y": formatFullYear,
18291 "%": formatLiteralPercent
18295 "a": formatUTCShortWeekday,
18296 "A": formatUTCWeekday,
18297 "b": formatUTCShortMonth,
18298 "B": formatUTCMonth,
18300 "d": formatUTCDayOfMonth,
18301 "e": formatUTCDayOfMonth,
18302 "f": formatUTCMicroseconds,
18303 "H": formatUTCHour24,
18304 "I": formatUTCHour12,
18305 "j": formatUTCDayOfYear,
18306 "L": formatUTCMilliseconds,
18307 "m": formatUTCMonthNumber,
18308 "M": formatUTCMinutes,
18309 "p": formatUTCPeriod,
18310 "Q": formatUnixTimestamp,
18311 "s": formatUnixTimestampSeconds,
18312 "S": formatUTCSeconds,
18313 "u": formatUTCWeekdayNumberMonday,
18314 "U": formatUTCWeekNumberSunday,
18315 "V": formatUTCWeekNumberISO,
18316 "w": formatUTCWeekdayNumberSunday,
18317 "W": formatUTCWeekNumberMonday,
18320 "y": formatUTCYear,
18321 "Y": formatUTCFullYear,
18322 "Z": formatUTCZone,
18323 "%": formatLiteralPercent
18327 "a": parseShortWeekday,
18329 "b": parseShortMonth,
18331 "c": parseLocaleDateTime,
18332 "d": parseDayOfMonth,
18333 "e": parseDayOfMonth,
18334 "f": parseMicroseconds,
18337 "j": parseDayOfYear,
18338 "L": parseMilliseconds,
18339 "m": parseMonthNumber,
18342 "Q": parseUnixTimestamp,
18343 "s": parseUnixTimestampSeconds,
18345 "u": parseWeekdayNumberMonday,
18346 "U": parseWeekNumberSunday,
18347 "V": parseWeekNumberISO,
18348 "w": parseWeekdayNumberSunday,
18349 "W": parseWeekNumberMonday,
18350 "x": parseLocaleDate,
18351 "X": parseLocaleTime,
18353 "Y": parseFullYear,
18355 "%": parseLiteralPercent
18358 // These recursive directive definitions must be deferred.
18359 formats.x = newFormat(locale_date, formats);
18360 formats.X = newFormat(locale_time, formats);
18361 formats.c = newFormat(locale_dateTime, formats);
18362 utcFormats.x = newFormat(locale_date, utcFormats);
18363 utcFormats.X = newFormat(locale_time, utcFormats);
18364 utcFormats.c = newFormat(locale_dateTime, utcFormats);
18366 function newFormat(specifier, formats) {
18367 return function(date) {
18371 n = specifier.length,
18376 if (!(date instanceof Date)) date = new Date(+date);
18379 if (specifier.charCodeAt(i) === 37) {
18380 string.push(specifier.slice(j, i));
18381 if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);
18382 else pad = c === "e" ? " " : "0";
18383 if (format = formats[c]) c = format(date, pad);
18389 string.push(specifier.slice(j, i));
18390 return string.join("");
18394 function newParse(specifier, newDate) {
18395 return function(string) {
18396 var d = newYear(1900),
18397 i = parseSpecifier(d, specifier, string += "", 0),
18399 if (i != string.length) return null;
18401 // If a UNIX timestamp is specified, return it.
18402 if ("Q" in d) return new Date(d.Q);
18404 // The am-pm flag is 0 for AM, and 1 for PM.
18405 if ("p" in d) d.H = d.H % 12 + d.p * 12;
18407 // Convert day-of-week and week-of-year to day-of-year.
18409 if (d.V < 1 || d.V > 53) return null;
18410 if (!("w" in d)) d.w = 1;
18412 week = utcDate(newYear(d.y)), day$1 = week.getUTCDay();
18413 week = day$1 > 4 || day$1 === 0 ? utcMonday.ceil(week) : utcMonday(week);
18414 week = utcDay.offset(week, (d.V - 1) * 7);
18415 d.y = week.getUTCFullYear();
18416 d.m = week.getUTCMonth();
18417 d.d = week.getUTCDate() + (d.w + 6) % 7;
18419 week = newDate(newYear(d.y)), day$1 = week.getDay();
18420 week = day$1 > 4 || day$1 === 0 ? monday.ceil(week) : monday(week);
18421 week = day.offset(week, (d.V - 1) * 7);
18422 d.y = week.getFullYear();
18423 d.m = week.getMonth();
18424 d.d = week.getDate() + (d.w + 6) % 7;
18426 } else if ("W" in d || "U" in d) {
18427 if (!("w" in d)) d.w = "u" in d ? d.u % 7 : "W" in d ? 1 : 0;
18428 day$1 = "Z" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();
18430 d.d = "W" in d ? (d.w + 6) % 7 + d.W * 7 - (day$1 + 5) % 7 : d.w + d.U * 7 - (day$1 + 6) % 7;
18433 // If a time zone is specified, all fields are interpreted as UTC and then
18434 // offset according to the specified time zone.
18436 d.H += d.Z / 100 | 0;
18441 // Otherwise, all fields are in local time.
18446 function parseSpecifier(d, specifier, string, j) {
18448 n = specifier.length,
18454 if (j >= m) return -1;
18455 c = specifier.charCodeAt(i++);
18457 c = specifier.charAt(i++);
18458 parse = parses[c in pads ? specifier.charAt(i++) : c];
18459 if (!parse || ((j = parse(d, string, j)) < 0)) return -1;
18460 } else if (c != string.charCodeAt(j++)) {
18468 function parsePeriod(d, string, i) {
18469 var n = periodRe.exec(string.slice(i));
18470 return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;
18473 function parseShortWeekday(d, string, i) {
18474 var n = shortWeekdayRe.exec(string.slice(i));
18475 return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;
18478 function parseWeekday(d, string, i) {
18479 var n = weekdayRe.exec(string.slice(i));
18480 return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;
18483 function parseShortMonth(d, string, i) {
18484 var n = shortMonthRe.exec(string.slice(i));
18485 return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;
18488 function parseMonth(d, string, i) {
18489 var n = monthRe.exec(string.slice(i));
18490 return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;
18493 function parseLocaleDateTime(d, string, i) {
18494 return parseSpecifier(d, locale_dateTime, string, i);
18497 function parseLocaleDate(d, string, i) {
18498 return parseSpecifier(d, locale_date, string, i);
18501 function parseLocaleTime(d, string, i) {
18502 return parseSpecifier(d, locale_time, string, i);
18505 function formatShortWeekday(d) {
18506 return locale_shortWeekdays[d.getDay()];
18509 function formatWeekday(d) {
18510 return locale_weekdays[d.getDay()];
18513 function formatShortMonth(d) {
18514 return locale_shortMonths[d.getMonth()];
18517 function formatMonth(d) {
18518 return locale_months[d.getMonth()];
18521 function formatPeriod(d) {
18522 return locale_periods[+(d.getHours() >= 12)];
18525 function formatUTCShortWeekday(d) {
18526 return locale_shortWeekdays[d.getUTCDay()];
18529 function formatUTCWeekday(d) {
18530 return locale_weekdays[d.getUTCDay()];
18533 function formatUTCShortMonth(d) {
18534 return locale_shortMonths[d.getUTCMonth()];
18537 function formatUTCMonth(d) {
18538 return locale_months[d.getUTCMonth()];
18541 function formatUTCPeriod(d) {
18542 return locale_periods[+(d.getUTCHours() >= 12)];
18546 format: function(specifier) {
18547 var f = newFormat(specifier += "", formats);
18548 f.toString = function() { return specifier; };
18551 parse: function(specifier) {
18552 var p = newParse(specifier += "", localDate);
18553 p.toString = function() { return specifier; };
18556 utcFormat: function(specifier) {
18557 var f = newFormat(specifier += "", utcFormats);
18558 f.toString = function() { return specifier; };
18561 utcParse: function(specifier) {
18562 var p = newParse(specifier, utcDate);
18563 p.toString = function() { return specifier; };
18569 var pads = {"-": "", "_": " ", "0": "0"},
18570 numberRe = /^\s*\d+/, // note: ignores next directive
18572 requoteRe = /[\\^$*+?|[\]().{}]/g;
18574 function pad$1(value, fill, width) {
18575 var sign = value < 0 ? "-" : "",
18576 string = (sign ? -value : value) + "",
18577 length = string.length;
18578 return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);
18581 function requote(s) {
18582 return s.replace(requoteRe, "\\$&");
18585 function formatRe(names) {
18586 return new RegExp("^(?:" + names.map(requote).join("|") + ")", "i");
18589 function formatLookup(names) {
18590 var map = {}, i = -1, n = names.length;
18591 while (++i < n) map[names[i].toLowerCase()] = i;
18595 function parseWeekdayNumberSunday(d, string, i) {
18596 var n = numberRe.exec(string.slice(i, i + 1));
18597 return n ? (d.w = +n[0], i + n[0].length) : -1;
18600 function parseWeekdayNumberMonday(d, string, i) {
18601 var n = numberRe.exec(string.slice(i, i + 1));
18602 return n ? (d.u = +n[0], i + n[0].length) : -1;
18605 function parseWeekNumberSunday(d, string, i) {
18606 var n = numberRe.exec(string.slice(i, i + 2));
18607 return n ? (d.U = +n[0], i + n[0].length) : -1;
18610 function parseWeekNumberISO(d, string, i) {
18611 var n = numberRe.exec(string.slice(i, i + 2));
18612 return n ? (d.V = +n[0], i + n[0].length) : -1;
18615 function parseWeekNumberMonday(d, string, i) {
18616 var n = numberRe.exec(string.slice(i, i + 2));
18617 return n ? (d.W = +n[0], i + n[0].length) : -1;
18620 function parseFullYear(d, string, i) {
18621 var n = numberRe.exec(string.slice(i, i + 4));
18622 return n ? (d.y = +n[0], i + n[0].length) : -1;
18625 function parseYear(d, string, i) {
18626 var n = numberRe.exec(string.slice(i, i + 2));
18627 return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;
18630 function parseZone(d, string, i) {
18631 var n = /^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(string.slice(i, i + 6));
18632 return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || "00")), i + n[0].length) : -1;
18635 function parseMonthNumber(d, string, i) {
18636 var n = numberRe.exec(string.slice(i, i + 2));
18637 return n ? (d.m = n[0] - 1, i + n[0].length) : -1;
18640 function parseDayOfMonth(d, string, i) {
18641 var n = numberRe.exec(string.slice(i, i + 2));
18642 return n ? (d.d = +n[0], i + n[0].length) : -1;
18645 function parseDayOfYear(d, string, i) {
18646 var n = numberRe.exec(string.slice(i, i + 3));
18647 return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;
18650 function parseHour24(d, string, i) {
18651 var n = numberRe.exec(string.slice(i, i + 2));
18652 return n ? (d.H = +n[0], i + n[0].length) : -1;
18655 function parseMinutes(d, string, i) {
18656 var n = numberRe.exec(string.slice(i, i + 2));
18657 return n ? (d.M = +n[0], i + n[0].length) : -1;
18660 function parseSeconds(d, string, i) {
18661 var n = numberRe.exec(string.slice(i, i + 2));
18662 return n ? (d.S = +n[0], i + n[0].length) : -1;
18665 function parseMilliseconds(d, string, i) {
18666 var n = numberRe.exec(string.slice(i, i + 3));
18667 return n ? (d.L = +n[0], i + n[0].length) : -1;
18670 function parseMicroseconds(d, string, i) {
18671 var n = numberRe.exec(string.slice(i, i + 6));
18672 return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;
18675 function parseLiteralPercent(d, string, i) {
18676 var n = percentRe.exec(string.slice(i, i + 1));
18677 return n ? i + n[0].length : -1;
18680 function parseUnixTimestamp(d, string, i) {
18681 var n = numberRe.exec(string.slice(i));
18682 return n ? (d.Q = +n[0], i + n[0].length) : -1;
18685 function parseUnixTimestampSeconds(d, string, i) {
18686 var n = numberRe.exec(string.slice(i));
18687 return n ? (d.Q = (+n[0]) * 1000, i + n[0].length) : -1;
18690 function formatDayOfMonth(d, p) {
18691 return pad$1(d.getDate(), p, 2);
18694 function formatHour24(d, p) {
18695 return pad$1(d.getHours(), p, 2);
18698 function formatHour12(d, p) {
18699 return pad$1(d.getHours() % 12 || 12, p, 2);
18702 function formatDayOfYear(d, p) {
18703 return pad$1(1 + day.count(year(d), d), p, 3);
18706 function formatMilliseconds(d, p) {
18707 return pad$1(d.getMilliseconds(), p, 3);
18710 function formatMicroseconds(d, p) {
18711 return formatMilliseconds(d, p) + "000";
18714 function formatMonthNumber(d, p) {
18715 return pad$1(d.getMonth() + 1, p, 2);
18718 function formatMinutes(d, p) {
18719 return pad$1(d.getMinutes(), p, 2);
18722 function formatSeconds(d, p) {
18723 return pad$1(d.getSeconds(), p, 2);
18726 function formatWeekdayNumberMonday(d) {
18727 var day = d.getDay();
18728 return day === 0 ? 7 : day;
18731 function formatWeekNumberSunday(d, p) {
18732 return pad$1(sunday.count(year(d), d), p, 2);
18735 function formatWeekNumberISO(d, p) {
18736 var day = d.getDay();
18737 d = (day >= 4 || day === 0) ? thursday(d) : thursday.ceil(d);
18738 return pad$1(thursday.count(year(d), d) + (year(d).getDay() === 4), p, 2);
18741 function formatWeekdayNumberSunday(d) {
18745 function formatWeekNumberMonday(d, p) {
18746 return pad$1(monday.count(year(d), d), p, 2);
18749 function formatYear$1(d, p) {
18750 return pad$1(d.getFullYear() % 100, p, 2);
18753 function formatFullYear(d, p) {
18754 return pad$1(d.getFullYear() % 10000, p, 4);
18757 function formatZone(d) {
18758 var z = d.getTimezoneOffset();
18759 return (z > 0 ? "-" : (z *= -1, "+"))
18760 + pad$1(z / 60 | 0, "0", 2)
18761 + pad$1(z % 60, "0", 2);
18764 function formatUTCDayOfMonth(d, p) {
18765 return pad$1(d.getUTCDate(), p, 2);
18768 function formatUTCHour24(d, p) {
18769 return pad$1(d.getUTCHours(), p, 2);
18772 function formatUTCHour12(d, p) {
18773 return pad$1(d.getUTCHours() % 12 || 12, p, 2);
18776 function formatUTCDayOfYear(d, p) {
18777 return pad$1(1 + utcDay.count(utcYear(d), d), p, 3);
18780 function formatUTCMilliseconds(d, p) {
18781 return pad$1(d.getUTCMilliseconds(), p, 3);
18784 function formatUTCMicroseconds(d, p) {
18785 return formatUTCMilliseconds(d, p) + "000";
18788 function formatUTCMonthNumber(d, p) {
18789 return pad$1(d.getUTCMonth() + 1, p, 2);
18792 function formatUTCMinutes(d, p) {
18793 return pad$1(d.getUTCMinutes(), p, 2);
18796 function formatUTCSeconds(d, p) {
18797 return pad$1(d.getUTCSeconds(), p, 2);
18800 function formatUTCWeekdayNumberMonday(d) {
18801 var dow = d.getUTCDay();
18802 return dow === 0 ? 7 : dow;
18805 function formatUTCWeekNumberSunday(d, p) {
18806 return pad$1(utcSunday.count(utcYear(d), d), p, 2);
18809 function formatUTCWeekNumberISO(d, p) {
18810 var day = d.getUTCDay();
18811 d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);
18812 return pad$1(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);
18815 function formatUTCWeekdayNumberSunday(d) {
18816 return d.getUTCDay();
18819 function formatUTCWeekNumberMonday(d, p) {
18820 return pad$1(utcMonday.count(utcYear(d), d), p, 2);
18823 function formatUTCYear(d, p) {
18824 return pad$1(d.getUTCFullYear() % 100, p, 2);
18827 function formatUTCFullYear(d, p) {
18828 return pad$1(d.getUTCFullYear() % 10000, p, 4);
18831 function formatUTCZone() {
18835 function formatLiteralPercent() {
18839 function formatUnixTimestamp(d) {
18843 function formatUnixTimestampSeconds(d) {
18844 return Math.floor(+d / 1000);
18854 dateTime: "%x, %X",
18855 date: "%-m/%-d/%Y",
18856 time: "%-I:%M:%S %p",
18857 periods: ["AM", "PM"],
18858 days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
18859 shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
18860 months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
18861 shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
18864 function defaultLocale$1(definition) {
18865 locale$1 = formatLocale$1(definition);
18866 timeFormat = locale$1.format;
18867 timeParse = locale$1.parse;
18868 utcFormat = locale$1.utcFormat;
18869 utcParse = locale$1.utcParse;
18873 var isoSpecifier = "%Y-%m-%dT%H:%M:%S.%LZ";
18875 function formatIsoNative(date) {
18876 return date.toISOString();
18879 var formatIso = Date.prototype.toISOString
18881 : utcFormat(isoSpecifier);
18883 function parseIsoNative(string) {
18884 var date = new Date(string);
18885 return isNaN(date) ? null : date;
18888 var parseIso = +new Date("2000-01-01T00:00:00.000Z")
18890 : utcParse(isoSpecifier);
18892 var durationSecond$1 = 1000,
18893 durationMinute$1 = durationSecond$1 * 60,
18894 durationHour$1 = durationMinute$1 * 60,
18895 durationDay$1 = durationHour$1 * 24,
18896 durationWeek$1 = durationDay$1 * 7,
18897 durationMonth = durationDay$1 * 30,
18898 durationYear = durationDay$1 * 365;
18900 function date$1(t) {
18901 return new Date(t);
18904 function number$3(t) {
18905 return t instanceof Date ? +t : +new Date(+t);
18908 function calendar(year, month, week, day, hour, minute, second, millisecond, format) {
18909 var scale = continuous(identity$5, identity$5),
18910 invert = scale.invert,
18911 domain = scale.domain;
18913 var formatMillisecond = format(".%L"),
18914 formatSecond = format(":%S"),
18915 formatMinute = format("%I:%M"),
18916 formatHour = format("%I %p"),
18917 formatDay = format("%a %d"),
18918 formatWeek = format("%b %d"),
18919 formatMonth = format("%B"),
18920 formatYear = format("%Y");
18922 var tickIntervals = [
18923 [second, 1, durationSecond$1],
18924 [second, 5, 5 * durationSecond$1],
18925 [second, 15, 15 * durationSecond$1],
18926 [second, 30, 30 * durationSecond$1],
18927 [minute, 1, durationMinute$1],
18928 [minute, 5, 5 * durationMinute$1],
18929 [minute, 15, 15 * durationMinute$1],
18930 [minute, 30, 30 * durationMinute$1],
18931 [ hour, 1, durationHour$1 ],
18932 [ hour, 3, 3 * durationHour$1 ],
18933 [ hour, 6, 6 * durationHour$1 ],
18934 [ hour, 12, 12 * durationHour$1 ],
18935 [ day, 1, durationDay$1 ],
18936 [ day, 2, 2 * durationDay$1 ],
18937 [ week, 1, durationWeek$1 ],
18938 [ month, 1, durationMonth ],
18939 [ month, 3, 3 * durationMonth ],
18940 [ year, 1, durationYear ]
18943 function tickFormat(date) {
18944 return (second(date) < date ? formatMillisecond
18945 : minute(date) < date ? formatSecond
18946 : hour(date) < date ? formatMinute
18947 : day(date) < date ? formatHour
18948 : month(date) < date ? (week(date) < date ? formatDay : formatWeek)
18949 : year(date) < date ? formatMonth
18950 : formatYear)(date);
18953 function tickInterval(interval, start, stop, step) {
18954 if (interval == null) interval = 10;
18956 // If a desired tick count is specified, pick a reasonable tick interval
18957 // based on the extent of the domain and a rough estimate of tick size.
18958 // Otherwise, assume interval is already a time interval and use it.
18959 if (typeof interval === "number") {
18960 var target = Math.abs(stop - start) / interval,
18961 i = d3_bisector(function(i) { return i[2]; }).right(tickIntervals, target);
18962 if (i === tickIntervals.length) {
18963 step = tickStep(start / durationYear, stop / durationYear, interval);
18966 i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];
18970 step = Math.max(tickStep(start, stop, interval), 1);
18971 interval = millisecond;
18975 return step == null ? interval : interval.every(step);
18978 scale.invert = function(y) {
18979 return new Date(invert(y));
18982 scale.domain = function(_) {
18983 return arguments.length ? domain(map$4.call(_, number$3)) : domain().map(date$1);
18986 scale.ticks = function(interval, step) {
18989 t1 = d[d.length - 1],
18992 if (r) t = t0, t0 = t1, t1 = t;
18993 t = tickInterval(interval, t0, t1, step);
18994 t = t ? t.range(t0, t1 + 1) : []; // inclusive stop
18995 return r ? t.reverse() : t;
18998 scale.tickFormat = function(count, specifier) {
18999 return specifier == null ? tickFormat : format(specifier);
19002 scale.nice = function(interval, step) {
19004 return (interval = tickInterval(interval, d[0], d[d.length - 1], step))
19005 ? domain(nice(d, interval))
19009 scale.copy = function() {
19010 return copy$1(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));
19017 return initRange.apply(calendar(year, month, sunday, day, hour, minute, second, millisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);
19020 function utcTime() {
19021 return initRange.apply(calendar(utcYear, utcMonth, utcSunday, utcDay, utcHour, utcMinute, second, millisecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);
19024 function transformer$2() {
19031 interpolator = identity$5,
19035 function scale(x) {
19036 return isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));
19039 scale.domain = function(_) {
19040 return arguments.length ? (t0 = transform(x0 = +_[0]), t1 = transform(x1 = +_[1]), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];
19043 scale.clamp = function(_) {
19044 return arguments.length ? (clamp = !!_, scale) : clamp;
19047 scale.interpolator = function(_) {
19048 return arguments.length ? (interpolator = _, scale) : interpolator;
19051 scale.unknown = function(_) {
19052 return arguments.length ? (unknown = _, scale) : unknown;
19055 return function(t) {
19056 transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);
19061 function copy$2(source, target) {
19063 .domain(source.domain())
19064 .interpolator(source.interpolator())
19065 .clamp(source.clamp())
19066 .unknown(source.unknown());
19069 function sequential() {
19070 var scale = linearish(transformer$2()(identity$5));
19072 scale.copy = function() {
19073 return copy$2(scale, sequential());
19076 return initInterpolator.apply(scale, arguments);
19079 function sequentialLog() {
19080 var scale = loggish(transformer$2()).domain([1, 10]);
19082 scale.copy = function() {
19083 return copy$2(scale, sequentialLog()).base(scale.base());
19086 return initInterpolator.apply(scale, arguments);
19089 function sequentialSymlog() {
19090 var scale = symlogish(transformer$2());
19092 scale.copy = function() {
19093 return copy$2(scale, sequentialSymlog()).constant(scale.constant());
19096 return initInterpolator.apply(scale, arguments);
19099 function sequentialPow() {
19100 var scale = powish(transformer$2());
19102 scale.copy = function() {
19103 return copy$2(scale, sequentialPow()).exponent(scale.exponent());
19106 return initInterpolator.apply(scale, arguments);
19109 function sequentialSqrt() {
19110 return sequentialPow.apply(null, arguments).exponent(0.5);
19113 function sequentialQuantile() {
19115 interpolator = identity$5;
19117 function scale(x) {
19118 if (!isNaN(x = +x)) return interpolator((bisectRight(domain, x) - 1) / (domain.length - 1));
19121 scale.domain = function(_) {
19122 if (!arguments.length) return domain.slice();
19124 for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);
19125 domain.sort(d3_ascending);
19129 scale.interpolator = function(_) {
19130 return arguments.length ? (interpolator = _, scale) : interpolator;
19133 scale.copy = function() {
19134 return sequentialQuantile(interpolator).domain(domain);
19137 return initInterpolator.apply(scale, arguments);
19140 function transformer$3() {
19149 interpolator = identity$5,
19154 function scale(x) {
19155 return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (x < t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x));
19158 scale.domain = function(_) {
19159 return arguments.length ? (t0 = transform(x0 = +_[0]), t1 = transform(x1 = +_[1]), t2 = transform(x2 = +_[2]), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), scale) : [x0, x1, x2];
19162 scale.clamp = function(_) {
19163 return arguments.length ? (clamp = !!_, scale) : clamp;
19166 scale.interpolator = function(_) {
19167 return arguments.length ? (interpolator = _, scale) : interpolator;
19170 scale.unknown = function(_) {
19171 return arguments.length ? (unknown = _, scale) : unknown;
19174 return function(t) {
19175 transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1);
19180 function diverging() {
19181 var scale = linearish(transformer$3()(identity$5));
19183 scale.copy = function() {
19184 return copy$2(scale, diverging());
19187 return initInterpolator.apply(scale, arguments);
19190 function divergingLog() {
19191 var scale = loggish(transformer$3()).domain([0.1, 1, 10]);
19193 scale.copy = function() {
19194 return copy$2(scale, divergingLog()).base(scale.base());
19197 return initInterpolator.apply(scale, arguments);
19200 function divergingSymlog() {
19201 var scale = symlogish(transformer$3());
19203 scale.copy = function() {
19204 return copy$2(scale, divergingSymlog()).constant(scale.constant());
19207 return initInterpolator.apply(scale, arguments);
19210 function divergingPow() {
19211 var scale = powish(transformer$3());
19213 scale.copy = function() {
19214 return copy$2(scale, divergingPow()).exponent(scale.exponent());
19217 return initInterpolator.apply(scale, arguments);
19220 function divergingSqrt() {
19221 return divergingPow.apply(null, arguments).exponent(0.5);
19224 function colors(specifier) {
19225 var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;
19226 while (i < n) colors[i] = "#" + specifier.slice(i * 6, ++i * 6);
19230 var category10 = colors("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf");
19232 var Accent = colors("7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666");
19234 var Dark2 = colors("1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666");
19236 var Paired = colors("a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928");
19238 var Pastel1 = colors("fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2");
19240 var Pastel2 = colors("b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc");
19242 var Set1 = colors("e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999");
19244 var Set2 = colors("66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3");
19246 var Set3 = colors("8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f");
19248 function ramp(scheme) {
19249 return rgbBasis(scheme[scheme.length - 1]);
19252 var scheme = new Array(3).concat(
19253 "d8b365f5f5f55ab4ac",
19254 "a6611adfc27d80cdc1018571",
19255 "a6611adfc27df5f5f580cdc1018571",
19256 "8c510ad8b365f6e8c3c7eae55ab4ac01665e",
19257 "8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e",
19258 "8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e",
19259 "8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e",
19260 "5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30",
19261 "5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30"
19264 var BrBG = ramp(scheme);
19266 var scheme$1 = new Array(3).concat(
19267 "af8dc3f7f7f77fbf7b",
19268 "7b3294c2a5cfa6dba0008837",
19269 "7b3294c2a5cff7f7f7a6dba0008837",
19270 "762a83af8dc3e7d4e8d9f0d37fbf7b1b7837",
19271 "762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837",
19272 "762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837",
19273 "762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837",
19274 "40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b",
19275 "40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b"
19278 var PRGn = ramp(scheme$1);
19280 var scheme$2 = new Array(3).concat(
19281 "e9a3c9f7f7f7a1d76a",
19282 "d01c8bf1b6dab8e1864dac26",
19283 "d01c8bf1b6daf7f7f7b8e1864dac26",
19284 "c51b7de9a3c9fde0efe6f5d0a1d76a4d9221",
19285 "c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221",
19286 "c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221",
19287 "c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221",
19288 "8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419",
19289 "8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419"
19292 var PiYG = ramp(scheme$2);
19294 var scheme$3 = new Array(3).concat(
19295 "998ec3f7f7f7f1a340",
19296 "5e3c99b2abd2fdb863e66101",
19297 "5e3c99b2abd2f7f7f7fdb863e66101",
19298 "542788998ec3d8daebfee0b6f1a340b35806",
19299 "542788998ec3d8daebf7f7f7fee0b6f1a340b35806",
19300 "5427888073acb2abd2d8daebfee0b6fdb863e08214b35806",
19301 "5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806",
19302 "2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08",
19303 "2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08"
19306 var PuOr = ramp(scheme$3);
19308 var scheme$4 = new Array(3).concat(
19309 "ef8a62f7f7f767a9cf",
19310 "ca0020f4a58292c5de0571b0",
19311 "ca0020f4a582f7f7f792c5de0571b0",
19312 "b2182bef8a62fddbc7d1e5f067a9cf2166ac",
19313 "b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac",
19314 "b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac",
19315 "b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac",
19316 "67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061",
19317 "67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061"
19320 var RdBu = ramp(scheme$4);
19322 var scheme$5 = new Array(3).concat(
19323 "ef8a62ffffff999999",
19324 "ca0020f4a582bababa404040",
19325 "ca0020f4a582ffffffbababa404040",
19326 "b2182bef8a62fddbc7e0e0e09999994d4d4d",
19327 "b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d",
19328 "b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d",
19329 "b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d",
19330 "67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a",
19331 "67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a"
19334 var RdGy = ramp(scheme$5);
19336 var scheme$6 = new Array(3).concat(
19337 "fc8d59ffffbf91bfdb",
19338 "d7191cfdae61abd9e92c7bb6",
19339 "d7191cfdae61ffffbfabd9e92c7bb6",
19340 "d73027fc8d59fee090e0f3f891bfdb4575b4",
19341 "d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4",
19342 "d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4",
19343 "d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4",
19344 "a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695",
19345 "a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695"
19348 var RdYlBu = ramp(scheme$6);
19350 var scheme$7 = new Array(3).concat(
19351 "fc8d59ffffbf91cf60",
19352 "d7191cfdae61a6d96a1a9641",
19353 "d7191cfdae61ffffbfa6d96a1a9641",
19354 "d73027fc8d59fee08bd9ef8b91cf601a9850",
19355 "d73027fc8d59fee08bffffbfd9ef8b91cf601a9850",
19356 "d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850",
19357 "d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850",
19358 "a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837",
19359 "a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837"
19362 var RdYlGn = ramp(scheme$7);
19364 var scheme$8 = new Array(3).concat(
19365 "fc8d59ffffbf99d594",
19366 "d7191cfdae61abdda42b83ba",
19367 "d7191cfdae61ffffbfabdda42b83ba",
19368 "d53e4ffc8d59fee08be6f59899d5943288bd",
19369 "d53e4ffc8d59fee08bffffbfe6f59899d5943288bd",
19370 "d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd",
19371 "d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd",
19372 "9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2",
19373 "9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2"
19376 var Spectral = ramp(scheme$8);
19378 var scheme$9 = new Array(3).concat(
19379 "e5f5f999d8c92ca25f",
19380 "edf8fbb2e2e266c2a4238b45",
19381 "edf8fbb2e2e266c2a42ca25f006d2c",
19382 "edf8fbccece699d8c966c2a42ca25f006d2c",
19383 "edf8fbccece699d8c966c2a441ae76238b45005824",
19384 "f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824",
19385 "f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b"
19388 var BuGn = ramp(scheme$9);
19390 var scheme$a = new Array(3).concat(
19391 "e0ecf49ebcda8856a7",
19392 "edf8fbb3cde38c96c688419d",
19393 "edf8fbb3cde38c96c68856a7810f7c",
19394 "edf8fbbfd3e69ebcda8c96c68856a7810f7c",
19395 "edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b",
19396 "f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b",
19397 "f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b"
19400 var BuPu = ramp(scheme$a);
19402 var scheme$b = new Array(3).concat(
19403 "e0f3dba8ddb543a2ca",
19404 "f0f9e8bae4bc7bccc42b8cbe",
19405 "f0f9e8bae4bc7bccc443a2ca0868ac",
19406 "f0f9e8ccebc5a8ddb57bccc443a2ca0868ac",
19407 "f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e",
19408 "f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e",
19409 "f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081"
19412 var GnBu = ramp(scheme$b);
19414 var scheme$c = new Array(3).concat(
19415 "fee8c8fdbb84e34a33",
19416 "fef0d9fdcc8afc8d59d7301f",
19417 "fef0d9fdcc8afc8d59e34a33b30000",
19418 "fef0d9fdd49efdbb84fc8d59e34a33b30000",
19419 "fef0d9fdd49efdbb84fc8d59ef6548d7301f990000",
19420 "fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000",
19421 "fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000"
19424 var OrRd = ramp(scheme$c);
19426 var scheme$d = new Array(3).concat(
19427 "ece2f0a6bddb1c9099",
19428 "f6eff7bdc9e167a9cf02818a",
19429 "f6eff7bdc9e167a9cf1c9099016c59",
19430 "f6eff7d0d1e6a6bddb67a9cf1c9099016c59",
19431 "f6eff7d0d1e6a6bddb67a9cf3690c002818a016450",
19432 "fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450",
19433 "fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636"
19436 var PuBuGn = ramp(scheme$d);
19438 var scheme$e = new Array(3).concat(
19439 "ece7f2a6bddb2b8cbe",
19440 "f1eef6bdc9e174a9cf0570b0",
19441 "f1eef6bdc9e174a9cf2b8cbe045a8d",
19442 "f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d",
19443 "f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b",
19444 "fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b",
19445 "fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858"
19448 var PuBu = ramp(scheme$e);
19450 var scheme$f = new Array(3).concat(
19451 "e7e1efc994c7dd1c77",
19452 "f1eef6d7b5d8df65b0ce1256",
19453 "f1eef6d7b5d8df65b0dd1c77980043",
19454 "f1eef6d4b9dac994c7df65b0dd1c77980043",
19455 "f1eef6d4b9dac994c7df65b0e7298ace125691003f",
19456 "f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f",
19457 "f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f"
19460 var PuRd = ramp(scheme$f);
19462 var scheme$g = new Array(3).concat(
19463 "fde0ddfa9fb5c51b8a",
19464 "feebe2fbb4b9f768a1ae017e",
19465 "feebe2fbb4b9f768a1c51b8a7a0177",
19466 "feebe2fcc5c0fa9fb5f768a1c51b8a7a0177",
19467 "feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177",
19468 "fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177",
19469 "fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a"
19472 var RdPu = ramp(scheme$g);
19474 var scheme$h = new Array(3).concat(
19475 "edf8b17fcdbb2c7fb8",
19476 "ffffcca1dab441b6c4225ea8",
19477 "ffffcca1dab441b6c42c7fb8253494",
19478 "ffffccc7e9b47fcdbb41b6c42c7fb8253494",
19479 "ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84",
19480 "ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84",
19481 "ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58"
19484 var YlGnBu = ramp(scheme$h);
19486 var scheme$i = new Array(3).concat(
19487 "f7fcb9addd8e31a354",
19488 "ffffccc2e69978c679238443",
19489 "ffffccc2e69978c67931a354006837",
19490 "ffffccd9f0a3addd8e78c67931a354006837",
19491 "ffffccd9f0a3addd8e78c67941ab5d238443005a32",
19492 "ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32",
19493 "ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529"
19496 var YlGn = ramp(scheme$i);
19498 var scheme$j = new Array(3).concat(
19499 "fff7bcfec44fd95f0e",
19500 "ffffd4fed98efe9929cc4c02",
19501 "ffffd4fed98efe9929d95f0e993404",
19502 "ffffd4fee391fec44ffe9929d95f0e993404",
19503 "ffffd4fee391fec44ffe9929ec7014cc4c028c2d04",
19504 "ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04",
19505 "ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506"
19508 var YlOrBr = ramp(scheme$j);
19510 var scheme$k = new Array(3).concat(
19511 "ffeda0feb24cf03b20",
19512 "ffffb2fecc5cfd8d3ce31a1c",
19513 "ffffb2fecc5cfd8d3cf03b20bd0026",
19514 "ffffb2fed976feb24cfd8d3cf03b20bd0026",
19515 "ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026",
19516 "ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026",
19517 "ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026"
19520 var YlOrRd = ramp(scheme$k);
19522 var scheme$l = new Array(3).concat(
19523 "deebf79ecae13182bd",
19524 "eff3ffbdd7e76baed62171b5",
19525 "eff3ffbdd7e76baed63182bd08519c",
19526 "eff3ffc6dbef9ecae16baed63182bd08519c",
19527 "eff3ffc6dbef9ecae16baed64292c62171b5084594",
19528 "f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594",
19529 "f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b"
19532 var Blues = ramp(scheme$l);
19534 var scheme$m = new Array(3).concat(
19535 "e5f5e0a1d99b31a354",
19536 "edf8e9bae4b374c476238b45",
19537 "edf8e9bae4b374c47631a354006d2c",
19538 "edf8e9c7e9c0a1d99b74c47631a354006d2c",
19539 "edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32",
19540 "f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32",
19541 "f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b"
19544 var Greens = ramp(scheme$m);
19546 var scheme$n = new Array(3).concat(
19547 "f0f0f0bdbdbd636363",
19548 "f7f7f7cccccc969696525252",
19549 "f7f7f7cccccc969696636363252525",
19550 "f7f7f7d9d9d9bdbdbd969696636363252525",
19551 "f7f7f7d9d9d9bdbdbd969696737373525252252525",
19552 "fffffff0f0f0d9d9d9bdbdbd969696737373525252252525",
19553 "fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000"
19556 var Greys = ramp(scheme$n);
19558 var scheme$o = new Array(3).concat(
19559 "efedf5bcbddc756bb1",
19560 "f2f0f7cbc9e29e9ac86a51a3",
19561 "f2f0f7cbc9e29e9ac8756bb154278f",
19562 "f2f0f7dadaebbcbddc9e9ac8756bb154278f",
19563 "f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486",
19564 "fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486",
19565 "fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d"
19568 var Purples = ramp(scheme$o);
19570 var scheme$p = new Array(3).concat(
19571 "fee0d2fc9272de2d26",
19572 "fee5d9fcae91fb6a4acb181d",
19573 "fee5d9fcae91fb6a4ade2d26a50f15",
19574 "fee5d9fcbba1fc9272fb6a4ade2d26a50f15",
19575 "fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d",
19576 "fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d",
19577 "fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d"
19580 var Reds = ramp(scheme$p);
19582 var scheme$q = new Array(3).concat(
19583 "fee6cefdae6be6550d",
19584 "feeddefdbe85fd8d3cd94701",
19585 "feeddefdbe85fd8d3ce6550da63603",
19586 "feeddefdd0a2fdae6bfd8d3ce6550da63603",
19587 "feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04",
19588 "fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04",
19589 "fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704"
19592 var Oranges = ramp(scheme$q);
19594 var cubehelix$3 = cubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));
19596 var warm = cubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));
19598 var cool = cubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));
19600 var c = cubehelix();
19602 function rainbow(t) {
19603 if (t < 0 || t > 1) t -= Math.floor(t);
19604 var ts = Math.abs(t - 0.5);
19605 c.h = 360 * t - 100;
19606 c.s = 1.5 - 1.5 * ts;
19607 c.l = 0.8 - 0.9 * ts;
19612 pi_1_3 = Math.PI / 3,
19613 pi_2_3 = Math.PI * 2 / 3;
19615 function sinebow(t) {
19617 t = (0.5 - t) * Math.PI;
19618 c$1.r = 255 * (x = Math.sin(t)) * x;
19619 c$1.g = 255 * (x = Math.sin(t + pi_1_3)) * x;
19620 c$1.b = 255 * (x = Math.sin(t + pi_2_3)) * x;
19624 function ramp$1(range) {
19625 var n = range.length;
19626 return function(t) {
19627 return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];
19631 var viridis = ramp$1(colors("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725"));
19633 var magma = ramp$1(colors("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf"));
19635 var inferno = ramp$1(colors("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4"));
19637 var plasma = ramp$1(colors("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921"));
19639 function constant$b(x) {
19640 return function constant() {
19645 var abs$3 = Math.abs;
19646 var atan2$1 = Math.atan2;
19647 var cos$2 = Math.cos;
19648 var max$4 = Math.max;
19649 var min$1 = Math.min;
19650 var sin$2 = Math.sin;
19651 var sqrt$2 = Math.sqrt;
19653 var epsilon$3 = 1e-12;
19654 var pi$4 = Math.PI;
19655 var halfPi$3 = pi$4 / 2;
19656 var tau$4 = 2 * pi$4;
19658 function acos$1(x) {
19659 return x > 1 ? 0 : x < -1 ? pi$4 : Math.acos(x);
19662 function asin$1(x) {
19663 return x >= 1 ? halfPi$3 : x <= -1 ? -halfPi$3 : Math.asin(x);
19666 function arcInnerRadius(d) {
19667 return d.innerRadius;
19670 function arcOuterRadius(d) {
19671 return d.outerRadius;
19674 function arcStartAngle(d) {
19675 return d.startAngle;
19678 function arcEndAngle(d) {
19682 function arcPadAngle(d) {
19683 return d && d.padAngle; // Note: optional!
19686 function intersect(x0, y0, x1, y1, x2, y2, x3, y3) {
19687 var x10 = x1 - x0, y10 = y1 - y0,
19688 x32 = x3 - x2, y32 = y3 - y2,
19689 t = y32 * x10 - x32 * y10;
19690 if (t * t < epsilon$3) return;
19691 t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;
19692 return [x0 + t * x10, y0 + t * y10];
19695 // Compute perpendicular offset line of length rc.
19696 // http://mathworld.wolfram.com/Circle-LineIntersection.html
19697 function cornerTangents(x0, y0, x1, y1, r1, rc, cw) {
19700 lo = (cw ? rc : -rc) / sqrt$2(x01 * x01 + y01 * y01),
19707 x00 = (x11 + x10) / 2,
19708 y00 = (y11 + y10) / 2,
19711 d2 = dx * dx + dy * dy,
19713 D = x11 * y10 - x10 * y11,
19714 d = (dy < 0 ? -1 : 1) * sqrt$2(max$4(0, r * r * d2 - D * D)),
19715 cx0 = (D * dy - dx * d) / d2,
19716 cy0 = (-D * dx - dy * d) / d2,
19717 cx1 = (D * dy + dx * d) / d2,
19718 cy1 = (-D * dx + dy * d) / d2,
19724 // Pick the closer of the two intersection points.
19725 // TODO Is there a faster way to determine which intersection to use?
19726 if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;
19733 x11: cx0 * (r1 / r - 1),
19734 y11: cy0 * (r1 / r - 1)
19739 var innerRadius = arcInnerRadius,
19740 outerRadius = arcOuterRadius,
19741 cornerRadius = constant$b(0),
19743 startAngle = arcStartAngle,
19744 endAngle = arcEndAngle,
19745 padAngle = arcPadAngle,
19751 r0 = +innerRadius.apply(this, arguments),
19752 r1 = +outerRadius.apply(this, arguments),
19753 a0 = startAngle.apply(this, arguments) - halfPi$3,
19754 a1 = endAngle.apply(this, arguments) - halfPi$3,
19755 da = abs$3(a1 - a0),
19758 if (!context) context = buffer = path();
19760 // Ensure that the outer radius is always larger than the inner radius.
19761 if (r1 < r0) r = r1, r1 = r0, r0 = r;
19764 if (!(r1 > epsilon$3)) context.moveTo(0, 0);
19766 // Or is it a circle or annulus?
19767 else if (da > tau$4 - epsilon$3) {
19768 context.moveTo(r1 * cos$2(a0), r1 * sin$2(a0));
19769 context.arc(0, 0, r1, a0, a1, !cw);
19770 if (r0 > epsilon$3) {
19771 context.moveTo(r0 * cos$2(a1), r0 * sin$2(a1));
19772 context.arc(0, 0, r0, a1, a0, cw);
19776 // Or is it a circular or annular sector?
19784 ap = padAngle.apply(this, arguments) / 2,
19785 rp = (ap > epsilon$3) && (padRadius ? +padRadius.apply(this, arguments) : sqrt$2(r0 * r0 + r1 * r1)),
19786 rc = min$1(abs$3(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),
19792 // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.
19793 if (rp > epsilon$3) {
19794 var p0 = asin$1(rp / r0 * sin$2(ap)),
19795 p1 = asin$1(rp / r1 * sin$2(ap));
19796 if ((da0 -= p0 * 2) > epsilon$3) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;
19797 else da0 = 0, a00 = a10 = (a0 + a1) / 2;
19798 if ((da1 -= p1 * 2) > epsilon$3) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;
19799 else da1 = 0, a01 = a11 = (a0 + a1) / 2;
19802 var x01 = r1 * cos$2(a01),
19803 y01 = r1 * sin$2(a01),
19804 x10 = r0 * cos$2(a10),
19805 y10 = r0 * sin$2(a10);
19807 // Apply rounded corners?
19808 if (rc > epsilon$3) {
19809 var x11 = r1 * cos$2(a11),
19810 y11 = r1 * sin$2(a11),
19811 x00 = r0 * cos$2(a00),
19812 y00 = r0 * sin$2(a00),
19815 // Restrict the corner radius according to the sector angle.
19816 if (da < pi$4 && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {
19817 var ax = x01 - oc[0],
19821 kc = 1 / sin$2(acos$1((ax * bx + ay * by) / (sqrt$2(ax * ax + ay * ay) * sqrt$2(bx * bx + by * by))) / 2),
19822 lc = sqrt$2(oc[0] * oc[0] + oc[1] * oc[1]);
19823 rc0 = min$1(rc, (r0 - lc) / (kc - 1));
19824 rc1 = min$1(rc, (r1 - lc) / (kc + 1));
19828 // Is the sector collapsed to a line?
19829 if (!(da1 > epsilon$3)) context.moveTo(x01, y01);
19831 // Does the sector’s outer ring have rounded corners?
19832 else if (rc1 > epsilon$3) {
19833 t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);
19834 t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);
19836 context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);
19838 // Have the corners merged?
19839 if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2$1(t0.y01, t0.x01), atan2$1(t1.y01, t1.x01), !cw);
19841 // Otherwise, draw the two corners and the ring.
19843 context.arc(t0.cx, t0.cy, rc1, atan2$1(t0.y01, t0.x01), atan2$1(t0.y11, t0.x11), !cw);
19844 context.arc(0, 0, r1, atan2$1(t0.cy + t0.y11, t0.cx + t0.x11), atan2$1(t1.cy + t1.y11, t1.cx + t1.x11), !cw);
19845 context.arc(t1.cx, t1.cy, rc1, atan2$1(t1.y11, t1.x11), atan2$1(t1.y01, t1.x01), !cw);
19849 // Or is the outer ring just a circular arc?
19850 else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);
19852 // Is there no inner ring, and it’s a circular sector?
19853 // Or perhaps it’s an annular sector collapsed due to padding?
19854 if (!(r0 > epsilon$3) || !(da0 > epsilon$3)) context.lineTo(x10, y10);
19856 // Does the sector’s inner ring (or point) have rounded corners?
19857 else if (rc0 > epsilon$3) {
19858 t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);
19859 t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);
19861 context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);
19863 // Have the corners merged?
19864 if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2$1(t0.y01, t0.x01), atan2$1(t1.y01, t1.x01), !cw);
19866 // Otherwise, draw the two corners and the ring.
19868 context.arc(t0.cx, t0.cy, rc0, atan2$1(t0.y01, t0.x01), atan2$1(t0.y11, t0.x11), !cw);
19869 context.arc(0, 0, r0, atan2$1(t0.cy + t0.y11, t0.cx + t0.x11), atan2$1(t1.cy + t1.y11, t1.cx + t1.x11), cw);
19870 context.arc(t1.cx, t1.cy, rc0, atan2$1(t1.y11, t1.x11), atan2$1(t1.y01, t1.x01), !cw);
19874 // Or is the inner ring just a circular arc?
19875 else context.arc(0, 0, r0, a10, a00, cw);
19878 context.closePath();
19880 if (buffer) return context = null, buffer + "" || null;
19883 arc.centroid = function() {
19884 var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,
19885 a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi$4 / 2;
19886 return [cos$2(a) * r, sin$2(a) * r];
19889 arc.innerRadius = function(_) {
19890 return arguments.length ? (innerRadius = typeof _ === "function" ? _ : constant$b(+_), arc) : innerRadius;
19893 arc.outerRadius = function(_) {
19894 return arguments.length ? (outerRadius = typeof _ === "function" ? _ : constant$b(+_), arc) : outerRadius;
19897 arc.cornerRadius = function(_) {
19898 return arguments.length ? (cornerRadius = typeof _ === "function" ? _ : constant$b(+_), arc) : cornerRadius;
19901 arc.padRadius = function(_) {
19902 return arguments.length ? (padRadius = _ == null ? null : typeof _ === "function" ? _ : constant$b(+_), arc) : padRadius;
19905 arc.startAngle = function(_) {
19906 return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$b(+_), arc) : startAngle;
19909 arc.endAngle = function(_) {
19910 return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$b(+_), arc) : endAngle;
19913 arc.padAngle = function(_) {
19914 return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant$b(+_), arc) : padAngle;
19917 arc.context = function(_) {
19918 return arguments.length ? ((context = _ == null ? null : _), arc) : context;
19924 function Linear(context) {
19925 this._context = context;
19928 Linear.prototype = {
19929 areaStart: function() {
19932 areaEnd: function() {
19935 lineStart: function() {
19938 lineEnd: function() {
19939 if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
19940 this._line = 1 - this._line;
19942 point: function(x, y) {
19944 switch (this._point) {
19945 case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
19946 case 1: this._point = 2; // proceed
19947 default: this._context.lineTo(x, y); break;
19952 function curveLinear(context) {
19953 return new Linear(context);
19967 defined = constant$b(true),
19969 curve = curveLinear,
19972 function line(data) {
19979 if (context == null) output = curve(buffer = path());
19981 for (i = 0; i <= n; ++i) {
19982 if (!(i < n && defined(d = data[i], i, data)) === defined0) {
19983 if (defined0 = !defined0) output.lineStart();
19984 else output.lineEnd();
19986 if (defined0) output.point(+x(d, i, data), +y(d, i, data));
19989 if (buffer) return output = null, buffer + "" || null;
19992 line.x = function(_) {
19993 return arguments.length ? (x = typeof _ === "function" ? _ : constant$b(+_), line) : x;
19996 line.y = function(_) {
19997 return arguments.length ? (y = typeof _ === "function" ? _ : constant$b(+_), line) : y;
20000 line.defined = function(_) {
20001 return arguments.length ? (defined = typeof _ === "function" ? _ : constant$b(!!_), line) : defined;
20004 line.curve = function(_) {
20005 return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;
20008 line.context = function(_) {
20009 return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;
20015 function area$1() {
20018 y0 = constant$b(0),
20020 defined = constant$b(true),
20022 curve = curveLinear,
20025 function area(data) {
20033 x0z = new Array(n),
20034 y0z = new Array(n);
20036 if (context == null) output = curve(buffer = path());
20038 for (i = 0; i <= n; ++i) {
20039 if (!(i < n && defined(d = data[i], i, data)) === defined0) {
20040 if (defined0 = !defined0) {
20042 output.areaStart();
20043 output.lineStart();
20046 output.lineStart();
20047 for (k = i - 1; k >= j; --k) {
20048 output.point(x0z[k], y0z[k]);
20055 x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);
20056 output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);
20060 if (buffer) return output = null, buffer + "" || null;
20063 function arealine() {
20064 return line().defined(defined).curve(curve).context(context);
20067 area.x = function(_) {
20068 return arguments.length ? (x0 = typeof _ === "function" ? _ : constant$b(+_), x1 = null, area) : x0;
20071 area.x0 = function(_) {
20072 return arguments.length ? (x0 = typeof _ === "function" ? _ : constant$b(+_), area) : x0;
20075 area.x1 = function(_) {
20076 return arguments.length ? (x1 = _ == null ? null : typeof _ === "function" ? _ : constant$b(+_), area) : x1;
20079 area.y = function(_) {
20080 return arguments.length ? (y0 = typeof _ === "function" ? _ : constant$b(+_), y1 = null, area) : y0;
20083 area.y0 = function(_) {
20084 return arguments.length ? (y0 = typeof _ === "function" ? _ : constant$b(+_), area) : y0;
20087 area.y1 = function(_) {
20088 return arguments.length ? (y1 = _ == null ? null : typeof _ === "function" ? _ : constant$b(+_), area) : y1;
20092 area.lineY0 = function() {
20093 return arealine().x(x0).y(y0);
20096 area.lineY1 = function() {
20097 return arealine().x(x0).y(y1);
20100 area.lineX1 = function() {
20101 return arealine().x(x1).y(y0);
20104 area.defined = function(_) {
20105 return arguments.length ? (defined = typeof _ === "function" ? _ : constant$b(!!_), area) : defined;
20108 area.curve = function(_) {
20109 return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;
20112 area.context = function(_) {
20113 return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;
20119 function descending(a, b) {
20120 return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
20123 function identity$7(d) {
20128 var value = identity$7,
20129 sortValues = descending,
20131 startAngle = constant$b(0),
20132 endAngle = constant$b(tau$4),
20133 padAngle = constant$b(0);
20135 function pie(data) {
20141 index = new Array(n),
20142 arcs = new Array(n),
20143 a0 = +startAngle.apply(this, arguments),
20144 da = Math.min(tau$4, Math.max(-tau$4, endAngle.apply(this, arguments) - a0)),
20146 p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),
20147 pa = p * (da < 0 ? -1 : 1),
20150 for (i = 0; i < n; ++i) {
20151 if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {
20156 // Optionally sort the arcs by previously-computed values or by data.
20157 if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });
20158 else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });
20160 // Compute the arcs! They are stored in the original data's order.
20161 for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {
20162 j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {
20175 pie.value = function(_) {
20176 return arguments.length ? (value = typeof _ === "function" ? _ : constant$b(+_), pie) : value;
20179 pie.sortValues = function(_) {
20180 return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;
20183 pie.sort = function(_) {
20184 return arguments.length ? (sort = _, sortValues = null, pie) : sort;
20187 pie.startAngle = function(_) {
20188 return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$b(+_), pie) : startAngle;
20191 pie.endAngle = function(_) {
20192 return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$b(+_), pie) : endAngle;
20195 pie.padAngle = function(_) {
20196 return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant$b(+_), pie) : padAngle;
20202 var curveRadialLinear = curveRadial(curveLinear);
20204 function Radial(curve) {
20205 this._curve = curve;
20208 Radial.prototype = {
20209 areaStart: function() {
20210 this._curve.areaStart();
20212 areaEnd: function() {
20213 this._curve.areaEnd();
20215 lineStart: function() {
20216 this._curve.lineStart();
20218 lineEnd: function() {
20219 this._curve.lineEnd();
20221 point: function(a, r) {
20222 this._curve.point(r * Math.sin(a), r * -Math.cos(a));
20226 function curveRadial(curve) {
20228 function radial(context) {
20229 return new Radial(curve(context));
20232 radial._curve = curve;
20237 function lineRadial(l) {
20240 l.angle = l.x, delete l.x;
20241 l.radius = l.y, delete l.y;
20243 l.curve = function(_) {
20244 return arguments.length ? c(curveRadial(_)) : c()._curve;
20250 function lineRadial$1() {
20251 return lineRadial(line().curve(curveRadialLinear));
20254 function areaRadial() {
20255 var a = area$1().curve(curveRadialLinear),
20262 a.angle = a.x, delete a.x;
20263 a.startAngle = a.x0, delete a.x0;
20264 a.endAngle = a.x1, delete a.x1;
20265 a.radius = a.y, delete a.y;
20266 a.innerRadius = a.y0, delete a.y0;
20267 a.outerRadius = a.y1, delete a.y1;
20268 a.lineStartAngle = function() { return lineRadial(x0()); }, delete a.lineX0;
20269 a.lineEndAngle = function() { return lineRadial(x1()); }, delete a.lineX1;
20270 a.lineInnerRadius = function() { return lineRadial(y0()); }, delete a.lineY0;
20271 a.lineOuterRadius = function() { return lineRadial(y1()); }, delete a.lineY1;
20273 a.curve = function(_) {
20274 return arguments.length ? c(curveRadial(_)) : c()._curve;
20280 function pointRadial(x, y) {
20281 return [(y = +y) * Math.cos(x -= Math.PI / 2), y * Math.sin(x)];
20284 var slice$a = Array.prototype.slice;
20286 function linkSource(d) {
20290 function linkTarget(d) {
20294 function link$2(curve) {
20295 var source = linkSource,
20296 target = linkTarget,
20302 var buffer, argv = slice$a.call(arguments), s = source.apply(this, argv), t = target.apply(this, argv);
20303 if (!context) context = buffer = path();
20304 curve(context, +x.apply(this, (argv[0] = s, argv)), +y.apply(this, argv), +x.apply(this, (argv[0] = t, argv)), +y.apply(this, argv));
20305 if (buffer) return context = null, buffer + "" || null;
20308 link.source = function(_) {
20309 return arguments.length ? (source = _, link) : source;
20312 link.target = function(_) {
20313 return arguments.length ? (target = _, link) : target;
20316 link.x = function(_) {
20317 return arguments.length ? (x = typeof _ === "function" ? _ : constant$b(+_), link) : x;
20320 link.y = function(_) {
20321 return arguments.length ? (y = typeof _ === "function" ? _ : constant$b(+_), link) : y;
20324 link.context = function(_) {
20325 return arguments.length ? ((context = _ == null ? null : _), link) : context;
20331 function curveHorizontal(context, x0, y0, x1, y1) {
20332 context.moveTo(x0, y0);
20333 context.bezierCurveTo(x0 = (x0 + x1) / 2, y0, x0, y1, x1, y1);
20336 function curveVertical(context, x0, y0, x1, y1) {
20337 context.moveTo(x0, y0);
20338 context.bezierCurveTo(x0, y0 = (y0 + y1) / 2, x1, y0, x1, y1);
20341 function curveRadial$1(context, x0, y0, x1, y1) {
20342 var p0 = pointRadial(x0, y0),
20343 p1 = pointRadial(x0, y0 = (y0 + y1) / 2),
20344 p2 = pointRadial(x1, y0),
20345 p3 = pointRadial(x1, y1);
20346 context.moveTo(p0[0], p0[1]);
20347 context.bezierCurveTo(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]);
20350 function linkHorizontal() {
20351 return link$2(curveHorizontal);
20354 function linkVertical() {
20355 return link$2(curveVertical);
20358 function linkRadial() {
20359 var l = link$2(curveRadial$1);
20360 l.angle = l.x, delete l.x;
20361 l.radius = l.y, delete l.y;
20366 draw: function(context, size) {
20367 var r = Math.sqrt(size / pi$4);
20368 context.moveTo(r, 0);
20369 context.arc(0, 0, r, 0, tau$4);
20374 draw: function(context, size) {
20375 var r = Math.sqrt(size / 5) / 2;
20376 context.moveTo(-3 * r, -r);
20377 context.lineTo(-r, -r);
20378 context.lineTo(-r, -3 * r);
20379 context.lineTo(r, -3 * r);
20380 context.lineTo(r, -r);
20381 context.lineTo(3 * r, -r);
20382 context.lineTo(3 * r, r);
20383 context.lineTo(r, r);
20384 context.lineTo(r, 3 * r);
20385 context.lineTo(-r, 3 * r);
20386 context.lineTo(-r, r);
20387 context.lineTo(-3 * r, r);
20388 context.closePath();
20392 var tan30 = Math.sqrt(1 / 3),
20393 tan30_2 = tan30 * 2;
20396 draw: function(context, size) {
20397 var y = Math.sqrt(size / tan30_2),
20399 context.moveTo(0, -y);
20400 context.lineTo(x, 0);
20401 context.lineTo(0, y);
20402 context.lineTo(-x, 0);
20403 context.closePath();
20407 var ka = 0.89081309152928522810,
20408 kr = Math.sin(pi$4 / 10) / Math.sin(7 * pi$4 / 10),
20409 kx = Math.sin(tau$4 / 10) * kr,
20410 ky = -Math.cos(tau$4 / 10) * kr;
20413 draw: function(context, size) {
20414 var r = Math.sqrt(size * ka),
20417 context.moveTo(0, -r);
20418 context.lineTo(x, y);
20419 for (var i = 1; i < 5; ++i) {
20420 var a = tau$4 * i / 5,
20423 context.lineTo(s * r, -c * r);
20424 context.lineTo(c * x - s * y, s * x + c * y);
20426 context.closePath();
20431 draw: function(context, size) {
20432 var w = Math.sqrt(size),
20434 context.rect(x, x, w, w);
20438 var sqrt3 = Math.sqrt(3);
20441 draw: function(context, size) {
20442 var y = -Math.sqrt(size / (sqrt3 * 3));
20443 context.moveTo(0, y * 2);
20444 context.lineTo(-sqrt3 * y, -y);
20445 context.lineTo(sqrt3 * y, -y);
20446 context.closePath();
20451 s = Math.sqrt(3) / 2,
20452 k = 1 / Math.sqrt(12),
20453 a = (k / 2 + 1) * 3;
20456 draw: function(context, size) {
20457 var r = Math.sqrt(size / a),
20464 context.moveTo(x0, y0);
20465 context.lineTo(x1, y1);
20466 context.lineTo(x2, y2);
20467 context.lineTo(c$2 * x0 - s * y0, s * x0 + c$2 * y0);
20468 context.lineTo(c$2 * x1 - s * y1, s * x1 + c$2 * y1);
20469 context.lineTo(c$2 * x2 - s * y2, s * x2 + c$2 * y2);
20470 context.lineTo(c$2 * x0 + s * y0, c$2 * y0 - s * x0);
20471 context.lineTo(c$2 * x1 + s * y1, c$2 * y1 - s * x1);
20472 context.lineTo(c$2 * x2 + s * y2, c$2 * y2 - s * x2);
20473 context.closePath();
20487 function symbol() {
20488 var type = constant$b(circle$2),
20489 size = constant$b(64),
20492 function symbol() {
20494 if (!context) context = buffer = path();
20495 type.apply(this, arguments).draw(context, +size.apply(this, arguments));
20496 if (buffer) return context = null, buffer + "" || null;
20499 symbol.type = function(_) {
20500 return arguments.length ? (type = typeof _ === "function" ? _ : constant$b(_), symbol) : type;
20503 symbol.size = function(_) {
20504 return arguments.length ? (size = typeof _ === "function" ? _ : constant$b(+_), symbol) : size;
20507 symbol.context = function(_) {
20508 return arguments.length ? (context = _ == null ? null : _, symbol) : context;
20514 function noop$5() {}
20516 function point$2(that, x, y) {
20517 that._context.bezierCurveTo(
20518 (2 * that._x0 + that._x1) / 3,
20519 (2 * that._y0 + that._y1) / 3,
20520 (that._x0 + 2 * that._x1) / 3,
20521 (that._y0 + 2 * that._y1) / 3,
20522 (that._x0 + 4 * that._x1 + x) / 6,
20523 (that._y0 + 4 * that._y1 + y) / 6
20527 function Basis(context) {
20528 this._context = context;
20531 Basis.prototype = {
20532 areaStart: function() {
20535 areaEnd: function() {
20538 lineStart: function() {
20539 this._x0 = this._x1 =
20540 this._y0 = this._y1 = NaN;
20543 lineEnd: function() {
20544 switch (this._point) {
20545 case 3: point$2(this, this._x1, this._y1); // proceed
20546 case 2: this._context.lineTo(this._x1, this._y1); break;
20548 if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
20549 this._line = 1 - this._line;
20551 point: function(x, y) {
20553 switch (this._point) {
20554 case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
20555 case 1: this._point = 2; break;
20556 case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed
20557 default: point$2(this, x, y); break;
20559 this._x0 = this._x1, this._x1 = x;
20560 this._y0 = this._y1, this._y1 = y;
20564 function basis$2(context) {
20565 return new Basis(context);
20568 function BasisClosed(context) {
20569 this._context = context;
20572 BasisClosed.prototype = {
20575 lineStart: function() {
20576 this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =
20577 this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;
20580 lineEnd: function() {
20581 switch (this._point) {
20583 this._context.moveTo(this._x2, this._y2);
20584 this._context.closePath();
20588 this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);
20589 this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);
20590 this._context.closePath();
20594 this.point(this._x2, this._y2);
20595 this.point(this._x3, this._y3);
20596 this.point(this._x4, this._y4);
20601 point: function(x, y) {
20603 switch (this._point) {
20604 case 0: this._point = 1; this._x2 = x, this._y2 = y; break;
20605 case 1: this._point = 2; this._x3 = x, this._y3 = y; break;
20606 case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;
20607 default: point$2(this, x, y); break;
20609 this._x0 = this._x1, this._x1 = x;
20610 this._y0 = this._y1, this._y1 = y;
20614 function basisClosed$1(context) {
20615 return new BasisClosed(context);
20618 function BasisOpen(context) {
20619 this._context = context;
20622 BasisOpen.prototype = {
20623 areaStart: function() {
20626 areaEnd: function() {
20629 lineStart: function() {
20630 this._x0 = this._x1 =
20631 this._y0 = this._y1 = NaN;
20634 lineEnd: function() {
20635 if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();
20636 this._line = 1 - this._line;
20638 point: function(x, y) {
20640 switch (this._point) {
20641 case 0: this._point = 1; break;
20642 case 1: this._point = 2; break;
20643 case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;
20644 case 3: this._point = 4; // proceed
20645 default: point$2(this, x, y); break;
20647 this._x0 = this._x1, this._x1 = x;
20648 this._y0 = this._y1, this._y1 = y;
20652 function basisOpen(context) {
20653 return new BasisOpen(context);
20656 function Bundle(context, beta) {
20657 this._basis = new Basis(context);
20661 Bundle.prototype = {
20662 lineStart: function() {
20665 this._basis.lineStart();
20667 lineEnd: function() {
20683 this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),
20684 this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)
20689 this._x = this._y = null;
20690 this._basis.lineEnd();
20692 point: function(x, y) {
20698 var bundle = (function custom(beta) {
20700 function bundle(context) {
20701 return beta === 1 ? new Basis(context) : new Bundle(context, beta);
20704 bundle.beta = function(beta) {
20705 return custom(+beta);
20711 function point$3(that, x, y) {
20712 that._context.bezierCurveTo(
20713 that._x1 + that._k * (that._x2 - that._x0),
20714 that._y1 + that._k * (that._y2 - that._y0),
20715 that._x2 + that._k * (that._x1 - x),
20716 that._y2 + that._k * (that._y1 - y),
20722 function Cardinal(context, tension) {
20723 this._context = context;
20724 this._k = (1 - tension) / 6;
20727 Cardinal.prototype = {
20728 areaStart: function() {
20731 areaEnd: function() {
20734 lineStart: function() {
20735 this._x0 = this._x1 = this._x2 =
20736 this._y0 = this._y1 = this._y2 = NaN;
20739 lineEnd: function() {
20740 switch (this._point) {
20741 case 2: this._context.lineTo(this._x2, this._y2); break;
20742 case 3: point$3(this, this._x1, this._y1); break;
20744 if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
20745 this._line = 1 - this._line;
20747 point: function(x, y) {
20749 switch (this._point) {
20750 case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
20751 case 1: this._point = 2; this._x1 = x, this._y1 = y; break;
20752 case 2: this._point = 3; // proceed
20753 default: point$3(this, x, y); break;
20755 this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
20756 this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
20760 var cardinal = (function custom(tension) {
20762 function cardinal(context) {
20763 return new Cardinal(context, tension);
20766 cardinal.tension = function(tension) {
20767 return custom(+tension);
20773 function CardinalClosed(context, tension) {
20774 this._context = context;
20775 this._k = (1 - tension) / 6;
20778 CardinalClosed.prototype = {
20781 lineStart: function() {
20782 this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =
20783 this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;
20786 lineEnd: function() {
20787 switch (this._point) {
20789 this._context.moveTo(this._x3, this._y3);
20790 this._context.closePath();
20794 this._context.lineTo(this._x3, this._y3);
20795 this._context.closePath();
20799 this.point(this._x3, this._y3);
20800 this.point(this._x4, this._y4);
20801 this.point(this._x5, this._y5);
20806 point: function(x, y) {
20808 switch (this._point) {
20809 case 0: this._point = 1; this._x3 = x, this._y3 = y; break;
20810 case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;
20811 case 2: this._point = 3; this._x5 = x, this._y5 = y; break;
20812 default: point$3(this, x, y); break;
20814 this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
20815 this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
20819 var cardinalClosed = (function custom(tension) {
20821 function cardinal(context) {
20822 return new CardinalClosed(context, tension);
20825 cardinal.tension = function(tension) {
20826 return custom(+tension);
20832 function CardinalOpen(context, tension) {
20833 this._context = context;
20834 this._k = (1 - tension) / 6;
20837 CardinalOpen.prototype = {
20838 areaStart: function() {
20841 areaEnd: function() {
20844 lineStart: function() {
20845 this._x0 = this._x1 = this._x2 =
20846 this._y0 = this._y1 = this._y2 = NaN;
20849 lineEnd: function() {
20850 if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();
20851 this._line = 1 - this._line;
20853 point: function(x, y) {
20855 switch (this._point) {
20856 case 0: this._point = 1; break;
20857 case 1: this._point = 2; break;
20858 case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;
20859 case 3: this._point = 4; // proceed
20860 default: point$3(this, x, y); break;
20862 this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
20863 this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
20867 var cardinalOpen = (function custom(tension) {
20869 function cardinal(context) {
20870 return new CardinalOpen(context, tension);
20873 cardinal.tension = function(tension) {
20874 return custom(+tension);
20880 function point$4(that, x, y) {
20886 if (that._l01_a > epsilon$3) {
20887 var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,
20888 n = 3 * that._l01_a * (that._l01_a + that._l12_a);
20889 x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;
20890 y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;
20893 if (that._l23_a > epsilon$3) {
20894 var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,
20895 m = 3 * that._l23_a * (that._l23_a + that._l12_a);
20896 x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;
20897 y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;
20900 that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);
20903 function CatmullRom(context, alpha) {
20904 this._context = context;
20905 this._alpha = alpha;
20908 CatmullRom.prototype = {
20909 areaStart: function() {
20912 areaEnd: function() {
20915 lineStart: function() {
20916 this._x0 = this._x1 = this._x2 =
20917 this._y0 = this._y1 = this._y2 = NaN;
20918 this._l01_a = this._l12_a = this._l23_a =
20919 this._l01_2a = this._l12_2a = this._l23_2a =
20922 lineEnd: function() {
20923 switch (this._point) {
20924 case 2: this._context.lineTo(this._x2, this._y2); break;
20925 case 3: this.point(this._x2, this._y2); break;
20927 if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
20928 this._line = 1 - this._line;
20930 point: function(x, y) {
20934 var x23 = this._x2 - x,
20935 y23 = this._y2 - y;
20936 this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
20939 switch (this._point) {
20940 case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
20941 case 1: this._point = 2; break;
20942 case 2: this._point = 3; // proceed
20943 default: point$4(this, x, y); break;
20946 this._l01_a = this._l12_a, this._l12_a = this._l23_a;
20947 this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
20948 this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
20949 this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
20953 var catmullRom = (function custom(alpha) {
20955 function catmullRom(context) {
20956 return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);
20959 catmullRom.alpha = function(alpha) {
20960 return custom(+alpha);
20966 function CatmullRomClosed(context, alpha) {
20967 this._context = context;
20968 this._alpha = alpha;
20971 CatmullRomClosed.prototype = {
20974 lineStart: function() {
20975 this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =
20976 this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;
20977 this._l01_a = this._l12_a = this._l23_a =
20978 this._l01_2a = this._l12_2a = this._l23_2a =
20981 lineEnd: function() {
20982 switch (this._point) {
20984 this._context.moveTo(this._x3, this._y3);
20985 this._context.closePath();
20989 this._context.lineTo(this._x3, this._y3);
20990 this._context.closePath();
20994 this.point(this._x3, this._y3);
20995 this.point(this._x4, this._y4);
20996 this.point(this._x5, this._y5);
21001 point: function(x, y) {
21005 var x23 = this._x2 - x,
21006 y23 = this._y2 - y;
21007 this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
21010 switch (this._point) {
21011 case 0: this._point = 1; this._x3 = x, this._y3 = y; break;
21012 case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;
21013 case 2: this._point = 3; this._x5 = x, this._y5 = y; break;
21014 default: point$4(this, x, y); break;
21017 this._l01_a = this._l12_a, this._l12_a = this._l23_a;
21018 this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
21019 this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
21020 this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
21024 var catmullRomClosed = (function custom(alpha) {
21026 function catmullRom(context) {
21027 return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);
21030 catmullRom.alpha = function(alpha) {
21031 return custom(+alpha);
21037 function CatmullRomOpen(context, alpha) {
21038 this._context = context;
21039 this._alpha = alpha;
21042 CatmullRomOpen.prototype = {
21043 areaStart: function() {
21046 areaEnd: function() {
21049 lineStart: function() {
21050 this._x0 = this._x1 = this._x2 =
21051 this._y0 = this._y1 = this._y2 = NaN;
21052 this._l01_a = this._l12_a = this._l23_a =
21053 this._l01_2a = this._l12_2a = this._l23_2a =
21056 lineEnd: function() {
21057 if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();
21058 this._line = 1 - this._line;
21060 point: function(x, y) {
21064 var x23 = this._x2 - x,
21065 y23 = this._y2 - y;
21066 this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
21069 switch (this._point) {
21070 case 0: this._point = 1; break;
21071 case 1: this._point = 2; break;
21072 case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;
21073 case 3: this._point = 4; // proceed
21074 default: point$4(this, x, y); break;
21077 this._l01_a = this._l12_a, this._l12_a = this._l23_a;
21078 this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
21079 this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
21080 this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
21084 var catmullRomOpen = (function custom(alpha) {
21086 function catmullRom(context) {
21087 return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);
21090 catmullRom.alpha = function(alpha) {
21091 return custom(+alpha);
21097 function LinearClosed(context) {
21098 this._context = context;
21101 LinearClosed.prototype = {
21104 lineStart: function() {
21107 lineEnd: function() {
21108 if (this._point) this._context.closePath();
21110 point: function(x, y) {
21112 if (this._point) this._context.lineTo(x, y);
21113 else this._point = 1, this._context.moveTo(x, y);
21117 function linearClosed(context) {
21118 return new LinearClosed(context);
21121 function sign$3(x) {
21122 return x < 0 ? -1 : 1;
21125 // Calculate the slopes of the tangents (Hermite-type interpolation) based on
21126 // the following paper: Steffen, M. 1990. A Simple Method for Monotonic
21127 // Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.
21128 // NOV(II), P. 443, 1990.
21129 function slope3(that, x2, y2) {
21130 var h0 = that._x1 - that._x0,
21131 h1 = x2 - that._x1,
21132 s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),
21133 s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),
21134 p = (s0 * h1 + s1 * h0) / (h0 + h1);
21135 return (sign$3(s0) + sign$3(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;
21138 // Calculate a one-sided slope.
21139 function slope2(that, t) {
21140 var h = that._x1 - that._x0;
21141 return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;
21144 // According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations
21145 // "you can express cubic Hermite interpolation in terms of cubic Bézier curves
21146 // with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1".
21147 function point$5(that, t0, t1) {
21152 dx = (x1 - x0) / 3;
21153 that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);
21156 function MonotoneX(context) {
21157 this._context = context;
21160 MonotoneX.prototype = {
21161 areaStart: function() {
21164 areaEnd: function() {
21167 lineStart: function() {
21168 this._x0 = this._x1 =
21169 this._y0 = this._y1 =
21173 lineEnd: function() {
21174 switch (this._point) {
21175 case 2: this._context.lineTo(this._x1, this._y1); break;
21176 case 3: point$5(this, this._t0, slope2(this, this._t0)); break;
21178 if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
21179 this._line = 1 - this._line;
21181 point: function(x, y) {
21185 if (x === this._x1 && y === this._y1) return; // Ignore coincident points.
21186 switch (this._point) {
21187 case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
21188 case 1: this._point = 2; break;
21189 case 2: this._point = 3; point$5(this, slope2(this, t1 = slope3(this, x, y)), t1); break;
21190 default: point$5(this, this._t0, t1 = slope3(this, x, y)); break;
21193 this._x0 = this._x1, this._x1 = x;
21194 this._y0 = this._y1, this._y1 = y;
21199 function MonotoneY(context) {
21200 this._context = new ReflectContext(context);
21203 (MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {
21204 MonotoneX.prototype.point.call(this, y, x);
21207 function ReflectContext(context) {
21208 this._context = context;
21211 ReflectContext.prototype = {
21212 moveTo: function(x, y) { this._context.moveTo(y, x); },
21213 closePath: function() { this._context.closePath(); },
21214 lineTo: function(x, y) { this._context.lineTo(y, x); },
21215 bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }
21218 function monotoneX(context) {
21219 return new MonotoneX(context);
21222 function monotoneY(context) {
21223 return new MonotoneY(context);
21226 function Natural(context) {
21227 this._context = context;
21230 Natural.prototype = {
21231 areaStart: function() {
21234 areaEnd: function() {
21237 lineStart: function() {
21241 lineEnd: function() {
21247 this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);
21249 this._context.lineTo(x[1], y[1]);
21251 var px = controlPoints(x),
21252 py = controlPoints(y);
21253 for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {
21254 this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);
21259 if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();
21260 this._line = 1 - this._line;
21261 this._x = this._y = null;
21263 point: function(x, y) {
21269 // See https://www.particleincell.com/2012/bezier-splines/ for derivation.
21270 function controlPoints(x) {
21277 a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];
21278 for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];
21279 a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];
21280 for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];
21281 a[n - 1] = r[n - 1] / b[n - 1];
21282 for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];
21283 b[n - 1] = (x[n] + a[n - 1]) / 2;
21284 for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];
21288 function natural(context) {
21289 return new Natural(context);
21292 function Step(context, t) {
21293 this._context = context;
21298 areaStart: function() {
21301 areaEnd: function() {
21304 lineStart: function() {
21305 this._x = this._y = NaN;
21308 lineEnd: function() {
21309 if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);
21310 if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
21311 if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;
21313 point: function(x, y) {
21315 switch (this._point) {
21316 case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
21317 case 1: this._point = 2; // proceed
21319 if (this._t <= 0) {
21320 this._context.lineTo(this._x, y);
21321 this._context.lineTo(x, y);
21323 var x1 = this._x * (1 - this._t) + x * this._t;
21324 this._context.lineTo(x1, this._y);
21325 this._context.lineTo(x1, y);
21330 this._x = x, this._y = y;
21334 function step(context) {
21335 return new Step(context, 0.5);
21338 function stepBefore(context) {
21339 return new Step(context, 0);
21342 function stepAfter(context) {
21343 return new Step(context, 1);
21346 function none$1(series, order) {
21347 if (!((n = series.length) > 1)) return;
21348 for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {
21349 s0 = s1, s1 = series[order[i]];
21350 for (j = 0; j < m; ++j) {
21351 s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];
21356 function none$2(series) {
21357 var n = series.length, o = new Array(n);
21358 while (--n >= 0) o[n] = n;
21362 function stackValue(d, key) {
21367 var keys = constant$b([]),
21370 value = stackValue;
21372 function stack(data) {
21373 var kz = keys.apply(this, arguments),
21380 for (i = 0; i < n; ++i) {
21381 for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {
21382 si[j] = sij = [0, +value(data[j], ki, j, data)];
21383 sij.data = data[j];
21388 for (i = 0, oz = order(sz); i < n; ++i) {
21389 sz[oz[i]].index = i;
21396 stack.keys = function(_) {
21397 return arguments.length ? (keys = typeof _ === "function" ? _ : constant$b(slice$a.call(_)), stack) : keys;
21400 stack.value = function(_) {
21401 return arguments.length ? (value = typeof _ === "function" ? _ : constant$b(+_), stack) : value;
21404 stack.order = function(_) {
21405 return arguments.length ? (order = _ == null ? none$2 : typeof _ === "function" ? _ : constant$b(slice$a.call(_)), stack) : order;
21408 stack.offset = function(_) {
21409 return arguments.length ? (offset = _ == null ? none$1 : _, stack) : offset;
21415 function expand(series, order) {
21416 if (!((n = series.length) > 0)) return;
21417 for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {
21418 for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;
21419 if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;
21421 none$1(series, order);
21424 function diverging$1(series, order) {
21425 if (!((n = series.length) > 0)) return;
21426 for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {
21427 for (yp = yn = 0, i = 0; i < n; ++i) {
21428 if ((dy = (d = series[order[i]][j])[1] - d[0]) >= 0) {
21429 d[0] = yp, d[1] = yp += dy;
21430 } else if (dy < 0) {
21431 d[1] = yn, d[0] = yn += dy;
21439 function silhouette(series, order) {
21440 if (!((n = series.length) > 0)) return;
21441 for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {
21442 for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0;
21443 s0[j][1] += s0[j][0] = -y / 2;
21445 none$1(series, order);
21448 function wiggle(series, order) {
21449 if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;
21450 for (var y = 0, j = 1, s0, m, n; j < m; ++j) {
21451 for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {
21452 var si = series[order[i]],
21453 sij0 = si[j][1] || 0,
21454 sij1 = si[j - 1][1] || 0,
21455 s3 = (sij0 - sij1) / 2;
21456 for (var k = 0; k < i; ++k) {
21457 var sk = series[order[k]],
21458 skj0 = sk[j][1] || 0,
21459 skj1 = sk[j - 1][1] || 0;
21462 s1 += sij0, s2 += s3 * sij0;
21464 s0[j - 1][1] += s0[j - 1][0] = y;
21465 if (s1) y -= s2 / s1;
21467 s0[j - 1][1] += s0[j - 1][0] = y;
21468 none$1(series, order);
21471 function appearance(series) {
21472 var peaks = series.map(peak);
21473 return none$2(series).sort(function(a, b) { return peaks[a] - peaks[b]; });
21476 function peak(series) {
21477 var i = -1, j = 0, n = series.length, vi, vj = -Infinity;
21478 while (++i < n) if ((vi = +series[i][1]) > vj) vj = vi, j = i;
21482 function ascending$2(series) {
21483 var sums = series.map(sum$2);
21484 return none$2(series).sort(function(a, b) { return sums[a] - sums[b]; });
21487 function sum$2(series) {
21488 var s = 0, i = -1, n = series.length, v;
21489 while (++i < n) if (v = +series[i][1]) s += v;
21493 function descending$1(series) {
21494 return ascending$2(series).reverse();
21497 function insideOut(series) {
21498 var n = series.length,
21501 sums = series.map(sum$2),
21502 order = appearance(series),
21508 for (i = 0; i < n; ++i) {
21510 if (top < bottom) {
21519 return bottoms.reverse().concat(tops);
21522 function reverse(series) {
21523 return none$2(series).reverse();
21526 function constant$c(x) {
21527 return function() {
21540 function RedBlackTree() {
21541 this._ = null; // root node
21544 function RedBlackNode(node) {
21545 node.U = // parent node
21546 node.C = // color - true for red, false for black
21547 node.L = // left node
21548 node.R = // right node
21549 node.P = // previous node
21550 node.N = null; // next node
21553 RedBlackTree.prototype = {
21554 constructor: RedBlackTree,
21556 insert: function(after, node) {
21557 var parent, grandpa, uncle;
21562 if (after.N) after.N.P = node;
21566 while (after.L) after = after.L;
21572 } else if (this._) {
21573 after = RedBlackFirst(this._);
21576 after.P = after.L = node;
21579 node.P = node.N = null;
21583 node.L = node.R = null;
21588 while (parent && parent.C) {
21589 grandpa = parent.U;
21590 if (parent === grandpa.L) {
21592 if (uncle && uncle.C) {
21593 parent.C = uncle.C = false;
21597 if (after === parent.R) {
21598 RedBlackRotateLeft(this, parent);
21604 RedBlackRotateRight(this, grandpa);
21608 if (uncle && uncle.C) {
21609 parent.C = uncle.C = false;
21613 if (after === parent.L) {
21614 RedBlackRotateRight(this, parent);
21620 RedBlackRotateLeft(this, grandpa);
21628 remove: function(node) {
21629 if (node.N) node.N.P = node.P;
21630 if (node.P) node.P.N = node.N;
21631 node.N = node.P = null;
21633 var parent = node.U,
21640 if (!left) next = right;
21641 else if (!right) next = left;
21642 else next = RedBlackFirst(right);
21645 if (parent.L === node) parent.L = next;
21646 else parent.R = next;
21651 if (left && right) {
21656 if (next !== right) {
21673 if (node) node.U = parent;
21675 if (node && node.C) { node.C = false; return; }
21678 if (node === this._) break;
21679 if (node === parent.L) {
21680 sibling = parent.R;
21684 RedBlackRotateLeft(this, parent);
21685 sibling = parent.R;
21687 if ((sibling.L && sibling.L.C)
21688 || (sibling.R && sibling.R.C)) {
21689 if (!sibling.R || !sibling.R.C) {
21690 sibling.L.C = false;
21692 RedBlackRotateRight(this, sibling);
21693 sibling = parent.R;
21695 sibling.C = parent.C;
21696 parent.C = sibling.R.C = false;
21697 RedBlackRotateLeft(this, parent);
21702 sibling = parent.L;
21706 RedBlackRotateRight(this, parent);
21707 sibling = parent.L;
21709 if ((sibling.L && sibling.L.C)
21710 || (sibling.R && sibling.R.C)) {
21711 if (!sibling.L || !sibling.L.C) {
21712 sibling.R.C = false;
21714 RedBlackRotateLeft(this, sibling);
21715 sibling = parent.L;
21717 sibling.C = parent.C;
21718 parent.C = sibling.L.C = false;
21719 RedBlackRotateRight(this, parent);
21729 if (node) node.C = false;
21733 function RedBlackRotateLeft(tree, node) {
21739 if (parent.L === p) parent.L = q;
21748 if (p.R) p.R.U = p;
21752 function RedBlackRotateRight(tree, node) {
21758 if (parent.L === p) parent.L = q;
21767 if (p.L) p.L.U = p;
21771 function RedBlackFirst(node) {
21772 while (node.L) node = node.L;
21776 function createEdge(left, right, v0, v1) {
21777 var edge = [null, null],
21778 index = edges.push(edge) - 1;
21780 edge.right = right;
21781 if (v0) setEdgeEnd(edge, left, right, v0);
21782 if (v1) setEdgeEnd(edge, right, left, v1);
21783 cells[left.index].halfedges.push(index);
21784 cells[right.index].halfedges.push(index);
21788 function createBorderEdge(left, v0, v1) {
21789 var edge = [v0, v1];
21794 function setEdgeEnd(edge, left, right, vertex) {
21795 if (!edge[0] && !edge[1]) {
21798 edge.right = right;
21799 } else if (edge.left === right) {
21806 // Liang–Barsky line clipping.
21807 function clipEdge(edge, x0, y0, x1, y1) {
21821 if (!dx && r > 0) return;
21824 if (r < t0) return;
21825 if (r < t1) t1 = r;
21826 } else if (dx > 0) {
21827 if (r > t1) return;
21828 if (r > t0) t0 = r;
21832 if (!dx && r < 0) return;
21835 if (r > t1) return;
21836 if (r > t0) t0 = r;
21837 } else if (dx > 0) {
21838 if (r < t0) return;
21839 if (r < t1) t1 = r;
21843 if (!dy && r > 0) return;
21846 if (r < t0) return;
21847 if (r < t1) t1 = r;
21848 } else if (dy > 0) {
21849 if (r > t1) return;
21850 if (r > t0) t0 = r;
21854 if (!dy && r < 0) return;
21857 if (r > t1) return;
21858 if (r > t0) t0 = r;
21859 } else if (dy > 0) {
21860 if (r < t0) return;
21861 if (r < t1) t1 = r;
21864 if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?
21866 if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];
21867 if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];
21871 function connectEdge(edge, x0, y0, x1, y1) {
21873 if (v1) return true;
21877 right = edge.right,
21882 fx = (lx + rx) / 2,
21883 fy = (ly + ry) / 2,
21888 if (fx < x0 || fx >= x1) return;
21890 if (!v0) v0 = [fx, y0];
21891 else if (v0[1] >= y1) return;
21894 if (!v0) v0 = [fx, y1];
21895 else if (v0[1] < y0) return;
21899 fm = (lx - rx) / (ry - ly);
21901 if (fm < -1 || fm > 1) {
21903 if (!v0) v0 = [(y0 - fb) / fm, y0];
21904 else if (v0[1] >= y1) return;
21905 v1 = [(y1 - fb) / fm, y1];
21907 if (!v0) v0 = [(y1 - fb) / fm, y1];
21908 else if (v0[1] < y0) return;
21909 v1 = [(y0 - fb) / fm, y0];
21913 if (!v0) v0 = [x0, fm * x0 + fb];
21914 else if (v0[0] >= x1) return;
21915 v1 = [x1, fm * x1 + fb];
21917 if (!v0) v0 = [x1, fm * x1 + fb];
21918 else if (v0[0] < x0) return;
21919 v1 = [x0, fm * x0 + fb];
21929 function clipEdges(x0, y0, x1, y1) {
21930 var i = edges.length,
21934 if (!connectEdge(edge = edges[i], x0, y0, x1, y1)
21935 || !clipEdge(edge, x0, y0, x1, y1)
21936 || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon$4
21937 || Math.abs(edge[0][1] - edge[1][1]) > epsilon$4)) {
21943 function createCell(site) {
21944 return cells[site.index] = {
21950 function cellHalfedgeAngle(cell, edge) {
21951 var site = cell.site,
21954 if (site === vb) vb = va, va = site;
21955 if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);
21956 if (site === va) va = edge[1], vb = edge[0];
21957 else va = edge[0], vb = edge[1];
21958 return Math.atan2(va[0] - vb[0], vb[1] - va[1]);
21961 function cellHalfedgeStart(cell, edge) {
21962 return edge[+(edge.left !== cell.site)];
21965 function cellHalfedgeEnd(cell, edge) {
21966 return edge[+(edge.left === cell.site)];
21969 function sortCellHalfedges() {
21970 for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {
21971 if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {
21972 var index = new Array(m),
21973 array = new Array(m);
21974 for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);
21975 index.sort(function(i, j) { return array[j] - array[i]; });
21976 for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];
21977 for (j = 0; j < m; ++j) halfedges[j] = array[j];
21982 function clipCells(x0, y0, x1, y1) {
21983 var nCells = cells.length,
21998 for (iCell = 0; iCell < nCells; ++iCell) {
21999 if (cell = cells[iCell]) {
22001 halfedges = cell.halfedges;
22002 iHalfedge = halfedges.length;
22004 // Remove any dangling clipped edges.
22005 while (iHalfedge--) {
22006 if (!edges[halfedges[iHalfedge]]) {
22007 halfedges.splice(iHalfedge, 1);
22011 // Insert any border edges as necessary.
22012 iHalfedge = 0, nHalfedges = halfedges.length;
22013 while (iHalfedge < nHalfedges) {
22014 end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];
22015 start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];
22016 if (Math.abs(endX - startX) > epsilon$4 || Math.abs(endY - startY) > epsilon$4) {
22017 halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,
22018 Math.abs(endX - x0) < epsilon$4 && y1 - endY > epsilon$4 ? [x0, Math.abs(startX - x0) < epsilon$4 ? startY : y1]
22019 : Math.abs(endY - y1) < epsilon$4 && x1 - endX > epsilon$4 ? [Math.abs(startY - y1) < epsilon$4 ? startX : x1, y1]
22020 : Math.abs(endX - x1) < epsilon$4 && endY - y0 > epsilon$4 ? [x1, Math.abs(startX - x1) < epsilon$4 ? startY : y0]
22021 : Math.abs(endY - y0) < epsilon$4 && endX - x0 > epsilon$4 ? [Math.abs(startY - y0) < epsilon$4 ? startX : x0, y0]
22027 if (nHalfedges) cover = false;
22031 // If there weren’t any edges, have the closest site cover the extent.
22032 // It doesn’t matter which corner of the extent we measure!
22034 var dx, dy, d2, dc = Infinity;
22036 for (iCell = 0, cover = null; iCell < nCells; ++iCell) {
22037 if (cell = cells[iCell]) {
22041 d2 = dx * dx + dy * dy;
22042 if (d2 < dc) dc = d2, cover = cell;
22047 var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];
22048 cover.halfedges.push(
22049 edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,
22050 edges.push(createBorderEdge(site, v01, v11)) - 1,
22051 edges.push(createBorderEdge(site, v11, v10)) - 1,
22052 edges.push(createBorderEdge(site, v10, v00)) - 1
22057 // Lastly delete any cells with no edges; these were entirely clipped.
22058 for (iCell = 0; iCell < nCells; ++iCell) {
22059 if (cell = cells[iCell]) {
22060 if (!cell.halfedges.length) {
22061 delete cells[iCell];
22067 var circlePool = [];
22071 function Circle() {
22072 RedBlackNode(this);
22080 function attachCircle(arc) {
22084 if (!lArc || !rArc) return;
22086 var lSite = lArc.site,
22090 if (lSite === rSite) return;
22094 ax = lSite[0] - bx,
22095 ay = lSite[1] - by,
22096 cx = rSite[0] - bx,
22097 cy = rSite[1] - by;
22099 var d = 2 * (ax * cy - ay * cx);
22100 if (d >= -epsilon2$2) return;
22102 var ha = ax * ax + ay * ay,
22103 hc = cx * cx + cy * cy,
22104 x = (cy * ha - ay * hc) / d,
22105 y = (ax * hc - cx * ha) / d;
22107 var circle = circlePool.pop() || new Circle;
22109 circle.site = cSite;
22111 circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom
22113 arc.circle = circle;
22119 if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {
22120 if (node.L) node = node.L;
22121 else { before = node.P; break; }
22123 if (node.R) node = node.R;
22124 else { before = node; break; }
22128 circles.insert(before, circle);
22129 if (!before) firstCircle = circle;
22132 function detachCircle(arc) {
22133 var circle = arc.circle;
22135 if (!circle.P) firstCircle = circle.N;
22136 circles.remove(circle);
22137 circlePool.push(circle);
22138 RedBlackNode(circle);
22143 var beachPool = [];
22146 RedBlackNode(this);
22149 this.circle = null;
22152 function createBeach(site) {
22153 var beach = beachPool.pop() || new Beach;
22158 function detachBeach(beach) {
22159 detachCircle(beach);
22160 beaches.remove(beach);
22161 beachPool.push(beach);
22162 RedBlackNode(beach);
22165 function removeBeach(beach) {
22166 var circle = beach.circle,
22170 previous = beach.P,
22172 disappearing = [beach];
22174 detachBeach(beach);
22176 var lArc = previous;
22178 && Math.abs(x - lArc.circle.x) < epsilon$4
22179 && Math.abs(y - lArc.circle.cy) < epsilon$4) {
22181 disappearing.unshift(lArc);
22186 disappearing.unshift(lArc);
22187 detachCircle(lArc);
22191 && Math.abs(x - rArc.circle.x) < epsilon$4
22192 && Math.abs(y - rArc.circle.cy) < epsilon$4) {
22194 disappearing.push(rArc);
22199 disappearing.push(rArc);
22200 detachCircle(rArc);
22202 var nArcs = disappearing.length,
22204 for (iArc = 1; iArc < nArcs; ++iArc) {
22205 rArc = disappearing[iArc];
22206 lArc = disappearing[iArc - 1];
22207 setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);
22210 lArc = disappearing[0];
22211 rArc = disappearing[nArcs - 1];
22212 rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);
22214 attachCircle(lArc);
22215 attachCircle(rArc);
22218 function addBeach(site) {
22220 directrix = site[1],
22228 dxl = leftBreakPoint(node, directrix) - x;
22229 if (dxl > epsilon$4) node = node.L; else {
22230 dxr = x - rightBreakPoint(node, directrix);
22231 if (dxr > epsilon$4) {
22238 if (dxl > -epsilon$4) {
22241 } else if (dxr > -epsilon$4) {
22245 lArc = rArc = node;
22253 var newArc = createBeach(site);
22254 beaches.insert(lArc, newArc);
22256 if (!lArc && !rArc) return;
22258 if (lArc === rArc) {
22259 detachCircle(lArc);
22260 rArc = createBeach(lArc.site);
22261 beaches.insert(newArc, rArc);
22262 newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);
22263 attachCircle(lArc);
22264 attachCircle(rArc);
22268 if (!rArc) { // && lArc
22269 newArc.edge = createEdge(lArc.site, newArc.site);
22273 // else lArc !== rArc
22274 detachCircle(lArc);
22275 detachCircle(rArc);
22277 var lSite = lArc.site,
22283 cx = rSite[0] - ax,
22284 cy = rSite[1] - ay,
22285 d = 2 * (bx * cy - by * cx),
22286 hb = bx * bx + by * by,
22287 hc = cx * cx + cy * cy,
22288 vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];
22290 setEdgeEnd(rArc.edge, lSite, rSite, vertex);
22291 newArc.edge = createEdge(lSite, site, null, vertex);
22292 rArc.edge = createEdge(site, rSite, null, vertex);
22293 attachCircle(lArc);
22294 attachCircle(rArc);
22297 function leftBreakPoint(arc, directrix) {
22298 var site = arc.site,
22301 pby2 = rfocy - directrix;
22303 if (!pby2) return rfocx;
22306 if (!lArc) return -Infinity;
22309 var lfocx = site[0],
22311 plby2 = lfocy - directrix;
22313 if (!plby2) return lfocx;
22315 var hl = lfocx - rfocx,
22316 aby2 = 1 / pby2 - 1 / plby2,
22319 if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;
22321 return (rfocx + lfocx) / 2;
22324 function rightBreakPoint(arc, directrix) {
22326 if (rArc) return leftBreakPoint(rArc, directrix);
22327 var site = arc.site;
22328 return site[1] === directrix ? site[0] : Infinity;
22331 var epsilon$4 = 1e-6;
22332 var epsilon2$2 = 1e-12;
22338 function triangleArea(a, b, c) {
22339 return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);
22342 function lexicographic(a, b) {
22347 function Diagram(sites, extent) {
22348 var site = sites.sort(lexicographic).pop(),
22354 cells = new Array(sites.length);
22355 beaches = new RedBlackTree;
22356 circles = new RedBlackTree;
22359 circle = firstCircle;
22360 if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {
22361 if (site[0] !== x || site[1] !== y) {
22363 x = site[0], y = site[1];
22365 site = sites.pop();
22366 } else if (circle) {
22367 removeBeach(circle.arc);
22373 sortCellHalfedges();
22376 var x0 = +extent[0][0],
22377 y0 = +extent[0][1],
22378 x1 = +extent[1][0],
22379 y1 = +extent[1][1];
22380 clipEdges(x0, y0, x1, y1);
22381 clipCells(x0, y0, x1, y1);
22384 this.edges = edges;
22385 this.cells = cells;
22393 Diagram.prototype = {
22394 constructor: Diagram,
22396 polygons: function() {
22397 var edges = this.edges;
22399 return this.cells.map(function(cell) {
22400 var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });
22401 polygon.data = cell.site.data;
22406 triangles: function() {
22407 var triangles = [],
22408 edges = this.edges;
22410 this.cells.forEach(function(cell, i) {
22411 if (!(m = (halfedges = cell.halfedges).length)) return;
22412 var site = cell.site,
22417 e1 = edges[halfedges[m - 1]],
22418 s1 = e1.left === site ? e1.right : e1.left;
22422 e1 = edges[halfedges[j]];
22423 s1 = e1.left === site ? e1.right : e1.left;
22424 if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {
22425 triangles.push([site.data, s0.data, s1.data]);
22433 links: function() {
22434 return this.edges.filter(function(edge) {
22436 }).map(function(edge) {
22438 source: edge.left.data,
22439 target: edge.right.data
22444 find: function(x, y, radius) {
22445 var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;
22447 // Use the previously-found cell, or start with an arbitrary one.
22448 while (!(cell = that.cells[i1])) if (++i1 >= n) return null;
22449 var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;
22451 // Traverse the half-edges to find a closer cell, if any.
22453 cell = that.cells[i0 = i1], i1 = null;
22454 cell.halfedges.forEach(function(e) {
22455 var edge = that.edges[e], v = edge.left;
22456 if ((v === cell.site || !v) && !(v = edge.right)) return;
22457 var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;
22458 if (v2 < d2) d2 = v2, i1 = v.index;
22460 } while (i1 !== null);
22464 return radius == null || d2 <= radius * radius ? cell.site : null;
22468 function voronoi() {
22473 function voronoi(data) {
22474 return new Diagram(data.map(function(d, i) {
22475 var s = [Math.round(x(d, i, data) / epsilon$4) * epsilon$4, Math.round(y(d, i, data) / epsilon$4) * epsilon$4];
22482 voronoi.polygons = function(data) {
22483 return voronoi(data).polygons();
22486 voronoi.links = function(data) {
22487 return voronoi(data).links();
22490 voronoi.triangles = function(data) {
22491 return voronoi(data).triangles();
22494 voronoi.x = function(_) {
22495 return arguments.length ? (x = typeof _ === "function" ? _ : constant$c(+_), voronoi) : x;
22498 voronoi.y = function(_) {
22499 return arguments.length ? (y = typeof _ === "function" ? _ : constant$c(+_), voronoi) : y;
22502 voronoi.extent = function(_) {
22503 return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];
22506 voronoi.size = function(_) {
22507 return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];
22513 function constant$d(x) {
22514 return function() {
22519 function ZoomEvent(target, type, transform) {
22520 this.target = target;
22522 this.transform = transform;
22525 function Transform(k, x, y) {
22531 Transform.prototype = {
22532 constructor: Transform,
22533 scale: function(k) {
22534 return k === 1 ? this : new Transform(this.k * k, this.x, this.y);
22536 translate: function(x, y) {
22537 return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);
22539 apply: function(point) {
22540 return [point[0] * this.k + this.x, point[1] * this.k + this.y];
22542 applyX: function(x) {
22543 return x * this.k + this.x;
22545 applyY: function(y) {
22546 return y * this.k + this.y;
22548 invert: function(location) {
22549 return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];
22551 invertX: function(x) {
22552 return (x - this.x) / this.k;
22554 invertY: function(y) {
22555 return (y - this.y) / this.k;
22557 rescaleX: function(x) {
22558 return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));
22560 rescaleY: function(y) {
22561 return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));
22563 toString: function() {
22564 return "translate(" + this.x + "," + this.y + ") scale(" + this.k + ")";
22568 var identity$8 = new Transform(1, 0, 0);
22570 transform.prototype = Transform.prototype;
22572 function transform(node) {
22573 return node.__zoom || identity$8;
22576 function nopropagation$2() {
22577 event.stopImmediatePropagation();
22580 function noevent$2() {
22581 event.preventDefault();
22582 event.stopImmediatePropagation();
22585 // Ignore right-click, since that should open the context menu.
22586 function defaultFilter$2() {
22587 return !event.button;
22590 function defaultExtent$1() {
22591 var e = this, w, h;
22592 if (e instanceof SVGElement) {
22593 e = e.ownerSVGElement || e;
22594 w = e.width.baseVal.value;
22595 h = e.height.baseVal.value;
22598 h = e.clientHeight;
22600 return [[0, 0], [w, h]];
22603 function defaultTransform() {
22604 return this.__zoom || identity$8;
22607 function defaultWheelDelta() {
22608 return -event.deltaY * (event.deltaMode ? 120 : 1) / 500;
22611 function defaultTouchable$1() {
22612 return "ontouchstart" in this;
22615 function defaultConstrain(transform, extent, translateExtent) {
22616 var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],
22617 dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],
22618 dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],
22619 dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];
22620 return transform.translate(
22621 dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),
22622 dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)
22626 function d3_zoom() {
22627 var filter = defaultFilter$2,
22628 extent = defaultExtent$1,
22629 constrain = defaultConstrain,
22630 wheelDelta = defaultWheelDelta,
22631 touchable = defaultTouchable$1,
22632 scaleExtent = [0, Infinity],
22633 translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],
22635 interpolate = interpolateZoom,
22637 listeners = dispatch("start", "zoom", "end"),
22642 clickDistance2 = 0;
22644 function zoom(selection) {
22646 .property("__zoom", defaultTransform)
22647 .on("wheel.zoom", wheeled)
22648 .on("mousedown.zoom", mousedowned)
22649 .on("dblclick.zoom", dblclicked)
22651 .on("touchstart.zoom", touchstarted)
22652 .on("touchmove.zoom", touchmoved)
22653 .on("touchend.zoom touchcancel.zoom", touchended)
22654 .style("touch-action", "none")
22655 .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)");
22658 zoom.transform = function(collection, transform) {
22659 var selection = collection.selection ? collection.selection() : collection;
22660 selection.property("__zoom", defaultTransform);
22661 if (collection !== selection) {
22662 schedule(collection, transform);
22664 selection.interrupt().each(function() {
22665 gesture(this, arguments)
22667 .zoom(null, typeof transform === "function" ? transform.apply(this, arguments) : transform)
22673 zoom.scaleBy = function(selection, k) {
22674 zoom.scaleTo(selection, function() {
22675 var k0 = this.__zoom.k,
22676 k1 = typeof k === "function" ? k.apply(this, arguments) : k;
22681 zoom.scaleTo = function(selection, k) {
22682 zoom.transform(selection, function() {
22683 var e = extent.apply(this, arguments),
22686 p1 = t0.invert(p0),
22687 k1 = typeof k === "function" ? k.apply(this, arguments) : k;
22688 return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);
22692 zoom.translateBy = function(selection, x, y) {
22693 zoom.transform(selection, function() {
22694 return constrain(this.__zoom.translate(
22695 typeof x === "function" ? x.apply(this, arguments) : x,
22696 typeof y === "function" ? y.apply(this, arguments) : y
22697 ), extent.apply(this, arguments), translateExtent);
22701 zoom.translateTo = function(selection, x, y) {
22702 zoom.transform(selection, function() {
22703 var e = extent.apply(this, arguments),
22706 return constrain(identity$8.translate(p[0], p[1]).scale(t.k).translate(
22707 typeof x === "function" ? -x.apply(this, arguments) : -x,
22708 typeof y === "function" ? -y.apply(this, arguments) : -y
22709 ), e, translateExtent);
22713 function scale(transform, k) {
22714 k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));
22715 return k === transform.k ? transform : new Transform(k, transform.x, transform.y);
22718 function translate(transform, p0, p1) {
22719 var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;
22720 return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);
22723 function centroid(extent) {
22724 return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];
22727 function schedule(transition, transform, center) {
22729 .on("start.zoom", function() { gesture(this, arguments).start(); })
22730 .on("interrupt.zoom end.zoom", function() { gesture(this, arguments).end(); })
22731 .tween("zoom", function() {
22734 g = gesture(that, args),
22735 e = extent.apply(that, args),
22736 p = center || centroid(e),
22737 w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),
22739 b = typeof transform === "function" ? transform.apply(that, args) : transform,
22740 i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));
22741 return function(t) {
22742 if (t === 1) t = b; // Avoid rounding error on end.
22743 else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }
22749 function gesture(that, args) {
22750 for (var i = 0, n = gestures.length, g; i < n; ++i) {
22751 if ((g = gestures[i]).that === that) {
22755 return new Gesture(that, args);
22758 function Gesture(that, args) {
22763 this.extent = extent.apply(that, args);
22766 Gesture.prototype = {
22767 start: function() {
22768 if (++this.active === 1) {
22769 this.index = gestures.push(this) - 1;
22770 this.emit("start");
22774 zoom: function(key, transform) {
22775 if (this.mouse && key !== "mouse") this.mouse[1] = transform.invert(this.mouse[0]);
22776 if (this.touch0 && key !== "touch") this.touch0[1] = transform.invert(this.touch0[0]);
22777 if (this.touch1 && key !== "touch") this.touch1[1] = transform.invert(this.touch1[0]);
22778 this.that.__zoom = transform;
22783 if (--this.active === 0) {
22784 gestures.splice(this.index, 1);
22790 emit: function(type) {
22791 customEvent(new ZoomEvent(zoom, type, this.that.__zoom), listeners.apply, listeners, [type, this.that, this.args]);
22795 function wheeled() {
22796 if (!filter.apply(this, arguments)) return;
22797 var g = gesture(this, arguments),
22799 k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),
22800 p = d3_mouse(this);
22802 // If the mouse is in the same location as before, reuse it.
22803 // If there were recent wheel events, reset the wheel idle timeout.
22805 if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {
22806 g.mouse[1] = t.invert(g.mouse[0] = p);
22808 clearTimeout(g.wheel);
22811 // If this wheel event won’t trigger a transform change, ignore it.
22812 else if (t.k === k) return;
22814 // Otherwise, capture the mouse point and location at the start.
22816 g.mouse = [p, t.invert(p)];
22822 g.wheel = setTimeout(wheelidled, wheelDelay);
22823 g.zoom("mouse", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));
22825 function wheelidled() {
22831 function mousedowned() {
22832 if (touchending || !filter.apply(this, arguments)) return;
22833 var g = gesture(this, arguments),
22834 v = d3_select(event.view).on("mousemove.zoom", mousemoved, true).on("mouseup.zoom", mouseupped, true),
22835 p = d3_mouse(this),
22836 x0 = event.clientX,
22837 y0 = event.clientY;
22839 dragDisable(event.view);
22841 g.mouse = [p, this.__zoom.invert(p)];
22845 function mousemoved() {
22848 var dx = event.clientX - x0, dy = event.clientY - y0;
22849 g.moved = dx * dx + dy * dy > clickDistance2;
22851 g.zoom("mouse", constrain(translate(g.that.__zoom, g.mouse[0] = d3_mouse(g.that), g.mouse[1]), g.extent, translateExtent));
22854 function mouseupped() {
22855 v.on("mousemove.zoom mouseup.zoom", null);
22856 yesdrag(event.view, g.moved);
22862 function dblclicked() {
22863 if (!filter.apply(this, arguments)) return;
22864 var t0 = this.__zoom,
22865 p0 = d3_mouse(this),
22866 p1 = t0.invert(p0),
22867 k1 = t0.k * (event.shiftKey ? 0.5 : 2),
22868 t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, arguments), translateExtent);
22871 if (duration > 0) d3_select(this).transition().duration(duration).call(schedule, t1, p0);
22872 else d3_select(this).call(zoom.transform, t1);
22875 function touchstarted() {
22876 if (!filter.apply(this, arguments)) return;
22877 var g = gesture(this, arguments),
22878 touches = event.changedTouches,
22880 n = touches.length, i, t, p;
22883 for (i = 0; i < n; ++i) {
22884 t = touches[i], p = touch(this, touches, t.identifier);
22885 p = [p, this.__zoom.invert(p), t.identifier];
22886 if (!g.touch0) g.touch0 = p, started = true;
22887 else if (!g.touch1) g.touch1 = p;
22890 // If this is a dbltap, reroute to the (optional) dblclick.zoom handler.
22891 if (touchstarting) {
22892 touchstarting = clearTimeout(touchstarting);
22895 p = d3_select(this).on("dblclick.zoom");
22896 if (p) p.apply(this, arguments);
22902 touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);
22908 function touchmoved() {
22909 var g = gesture(this, arguments),
22910 touches = event.changedTouches,
22911 n = touches.length, i, t, p, l;
22914 if (touchstarting) touchstarting = clearTimeout(touchstarting);
22915 for (i = 0; i < n; ++i) {
22916 t = touches[i], p = touch(this, touches, t.identifier);
22917 if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;
22918 else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;
22922 var p0 = g.touch0[0], l0 = g.touch0[1],
22923 p1 = g.touch1[0], l1 = g.touch1[1],
22924 dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,
22925 dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;
22926 t = scale(t, Math.sqrt(dp / dl));
22927 p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];
22928 l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];
22930 else if (g.touch0) p = g.touch0[0], l = g.touch0[1];
22932 g.zoom("touch", constrain(translate(t, p, l), g.extent, translateExtent));
22935 function touchended() {
22936 var g = gesture(this, arguments),
22937 touches = event.changedTouches,
22938 n = touches.length, i, t;
22941 if (touchending) clearTimeout(touchending);
22942 touchending = setTimeout(function() { touchending = null; }, touchDelay);
22943 for (i = 0; i < n; ++i) {
22945 if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;
22946 else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;
22948 if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;
22949 if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);
22953 zoom.wheelDelta = function(_) {
22954 return arguments.length ? (wheelDelta = typeof _ === "function" ? _ : constant$d(+_), zoom) : wheelDelta;
22957 zoom.filter = function(_) {
22958 return arguments.length ? (filter = typeof _ === "function" ? _ : constant$d(!!_), zoom) : filter;
22961 zoom.touchable = function(_) {
22962 return arguments.length ? (touchable = typeof _ === "function" ? _ : constant$d(!!_), zoom) : touchable;
22965 zoom.extent = function(_) {
22966 return arguments.length ? (extent = typeof _ === "function" ? _ : constant$d([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;
22969 zoom.scaleExtent = function(_) {
22970 return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];
22973 zoom.translateExtent = function(_) {
22974 return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];
22977 zoom.constrain = function(_) {
22978 return arguments.length ? (constrain = _, zoom) : constrain;
22981 zoom.duration = function(_) {
22982 return arguments.length ? (duration = +_, zoom) : duration;
22985 zoom.interpolate = function(_) {
22986 return arguments.length ? (interpolate = _, zoom) : interpolate;
22989 zoom.on = function() {
22990 var value = listeners.on.apply(listeners, arguments);
22991 return value === listeners ? zoom : value;
22994 zoom.clickDistance = function(_) {
22995 return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);
23003 var index$3 = /*#__PURE__*/Object.freeze({
23005 bisect: bisectRight,
23006 bisectRight: bisectRight,
23007 bisectLeft: bisectLeft,
23008 ascending: d3_ascending,
23009 bisector: d3_bisector,
23011 descending: d3_descending,
23012 deviation: deviation,
23014 histogram: histogram,
23015 thresholdFreedmanDiaconis: freedmanDiaconis,
23016 thresholdScott: scott,
23017 thresholdSturges: thresholdSturges,
23025 quantile: threshold,
23031 tickIncrement: tickIncrement,
23032 tickStep: tickStep,
23033 transpose: transpose,
23034 variance: variance,
23037 axisRight: axisRight,
23038 axisBottom: axisBottom,
23039 axisLeft: axisLeft,
23043 brushSelection: brushSelection,
23059 cubehelix: cubehelix,
23060 contours: contours,
23061 contourDensity: density,
23062 dispatch: dispatch,
23064 dragDisable: dragDisable,
23065 dragEnable: yesdrag,
23066 dsvFormat: dsvFormat,
23067 csvParse: csvParse,
23068 csvParseRows: csvParseRows,
23069 csvFormat: csvFormat,
23070 csvFormatBody: csvFormatBody,
23071 csvFormatRows: csvFormatRows,
23072 tsvParse: tsvParse,
23073 tsvParseRows: tsvParseRows,
23074 tsvFormat: tsvFormat,
23075 tsvFormatBody: tsvFormatBody,
23076 tsvFormatRows: tsvFormatRows,
23077 autoType: autoType,
23078 easeLinear: linear$1,
23079 easeQuad: quadInOut,
23080 easeQuadIn: quadIn,
23081 easeQuadOut: quadOut,
23082 easeQuadInOut: quadInOut,
23083 easeCubic: cubicInOut,
23084 easeCubicIn: cubicIn,
23085 easeCubicOut: cubicOut,
23086 easeCubicInOut: cubicInOut,
23087 easePoly: polyInOut,
23088 easePolyIn: polyIn,
23089 easePolyOut: polyOut,
23090 easePolyInOut: polyInOut,
23093 easeSinOut: sinOut,
23094 easeSinInOut: sinInOut,
23097 easeExpOut: expOut,
23098 easeExpInOut: expInOut,
23099 easeCircle: circleInOut,
23100 easeCircleIn: circleIn,
23101 easeCircleOut: circleOut,
23102 easeCircleInOut: circleInOut,
23103 easeBounce: bounceOut,
23104 easeBounceIn: bounceIn,
23105 easeBounceOut: bounceOut,
23106 easeBounceInOut: bounceInOut,
23107 easeBack: backInOut,
23108 easeBackIn: backIn,
23109 easeBackOut: backOut,
23110 easeBackInOut: backInOut,
23111 easeElastic: elasticOut,
23112 easeElasticIn: elasticIn,
23113 easeElasticOut: elasticOut,
23114 easeElasticInOut: elasticInOut,
23126 forceCenter: center$1,
23127 forceCollide: collide,
23129 forceManyBody: manyBody,
23130 forceRadial: radial,
23131 forceSimulation: simulation,
23134 formatDefaultLocale: defaultLocale,
23135 get format () { return format; },
23136 get formatPrefix () { return formatPrefix; },
23137 formatLocale: formatLocale,
23138 formatSpecifier: formatSpecifier,
23139 precisionFixed: precisionFixed,
23140 precisionPrefix: precisionPrefix,
23141 precisionRound: precisionRound,
23142 geoArea: d3_geoArea,
23143 geoBounds: d3_geoBounds,
23144 geoCentroid: d3_geoCentroid,
23146 geoClipAntimeridian: clipAntimeridian,
23147 geoClipCircle: clipCircle,
23148 geoClipExtent: extent$1,
23149 geoClipRectangle: clipRectangle,
23150 geoContains: contains$2,
23151 geoDistance: distance,
23152 geoGraticule: graticule,
23153 geoGraticule10: graticule10,
23154 geoInterpolate: interpolate$1,
23155 geoLength: d3_geoLength,
23156 geoPath: d3_geoPath,
23158 geoAlbersUsa: albersUsa,
23159 geoAzimuthalEqualArea: azimuthalEqualArea,
23160 geoAzimuthalEqualAreaRaw: azimuthalEqualAreaRaw,
23161 geoAzimuthalEquidistant: azimuthalEquidistant,
23162 geoAzimuthalEquidistantRaw: azimuthalEquidistantRaw,
23163 geoConicConformal: conicConformal,
23164 geoConicConformalRaw: conicConformalRaw,
23165 geoConicEqualArea: conicEqualArea,
23166 geoConicEqualAreaRaw: conicEqualAreaRaw,
23167 geoConicEquidistant: conicEquidistant,
23168 geoConicEquidistantRaw: conicEquidistantRaw,
23169 geoEqualEarth: equalEarth,
23170 geoEqualEarthRaw: equalEarthRaw,
23171 geoEquirectangular: equirectangular,
23172 geoEquirectangularRaw: equirectangularRaw,
23173 geoGnomonic: gnomonic,
23174 geoGnomonicRaw: gnomonicRaw,
23175 geoIdentity: d3_geoIdentity,
23176 geoProjection: projection,
23177 geoProjectionMutator: projectionMutator,
23178 geoMercator: mercator,
23179 geoMercatorRaw: mercatorRaw,
23180 geoNaturalEarth1: naturalEarth1,
23181 geoNaturalEarth1Raw: naturalEarth1Raw,
23182 geoOrthographic: orthographic,
23183 geoOrthographicRaw: orthographicRaw,
23184 geoStereographic: stereographic,
23185 geoStereographicRaw: stereographicRaw,
23186 geoTransverseMercator: transverseMercator,
23187 geoTransverseMercatorRaw: transverseMercatorRaw,
23188 geoRotation: rotation,
23189 geoStream: d3_geoStream,
23190 geoTransform: d3_geoTransform,
23192 hierarchy: hierarchy,
23194 packSiblings: siblings,
23195 packEnclose: enclose,
23196 partition: partition,
23197 stratify: stratify,
23200 treemapBinary: binary,
23201 treemapDice: treemapDice,
23202 treemapSlice: treemapSlice,
23203 treemapSliceDice: sliceDice,
23204 treemapSquarify: squarify,
23205 treemapResquarify: resquarify,
23206 interpolate: d3_interpolate,
23207 interpolateArray: array$2,
23208 interpolateBasis: basis$1,
23209 interpolateBasisClosed: basisClosed,
23210 interpolateDate: date,
23211 interpolateDiscrete: discrete,
23212 interpolateHue: hue$1,
23213 interpolateNumber: d3_interpolateNumber,
23214 interpolateObject: object,
23215 interpolateRound: interpolateRound,
23216 interpolateString: interpolateString,
23217 interpolateTransformCss: interpolateTransformCss,
23218 interpolateTransformSvg: interpolateTransformSvg,
23219 interpolateZoom: interpolateZoom,
23220 interpolateRgb: d3_interpolateRgb,
23221 interpolateRgbBasis: rgbBasis,
23222 interpolateRgbBasisClosed: rgbBasisClosed,
23223 interpolateHsl: hsl$2,
23224 interpolateHslLong: hslLong,
23225 interpolateLab: lab$1,
23226 interpolateHcl: hcl$2,
23227 interpolateHclLong: hclLong,
23228 interpolateCubehelix: cubehelix$2,
23229 interpolateCubehelixLong: cubehelixLong,
23230 piecewise: piecewise,
23231 quantize: d3_quantize,
23233 polygonArea: d3_polygonArea,
23234 polygonCentroid: d3_polygonCentroid,
23235 polygonHull: d3_polygonHull,
23236 polygonContains: contains$3,
23237 polygonLength: length$1,
23238 quadtree: quadtree,
23239 randomUniform: uniform,
23240 randomNormal: normal,
23241 randomLogNormal: logNormal,
23242 randomBates: bates,
23243 randomIrwinHall: irwinHall,
23244 randomExponential: exponential$1,
23246 scalePoint: point$1,
23247 scaleIdentity: identity$6,
23248 scaleLinear: linear$2,
23250 scaleSymlog: symlog,
23251 scaleOrdinal: ordinal,
23252 scaleImplicit: implicit,
23255 scaleQuantile: quantile,
23256 scaleQuantize: quantize,
23257 scaleThreshold: threshold$1,
23260 scaleSequential: sequential,
23261 scaleSequentialLog: sequentialLog,
23262 scaleSequentialPow: sequentialPow,
23263 scaleSequentialSqrt: sequentialSqrt,
23264 scaleSequentialSymlog: sequentialSymlog,
23265 scaleSequentialQuantile: sequentialQuantile,
23266 scaleDiverging: diverging,
23267 scaleDivergingLog: divergingLog,
23268 scaleDivergingPow: divergingPow,
23269 scaleDivergingSqrt: divergingSqrt,
23270 scaleDivergingSymlog: divergingSymlog,
23271 tickFormat: tickFormat,
23272 schemeCategory10: category10,
23273 schemeAccent: Accent,
23274 schemeDark2: Dark2,
23275 schemePaired: Paired,
23276 schemePastel1: Pastel1,
23277 schemePastel2: Pastel2,
23281 interpolateBrBG: BrBG,
23282 schemeBrBG: scheme,
23283 interpolatePRGn: PRGn,
23284 schemePRGn: scheme$1,
23285 interpolatePiYG: PiYG,
23286 schemePiYG: scheme$2,
23287 interpolatePuOr: PuOr,
23288 schemePuOr: scheme$3,
23289 interpolateRdBu: RdBu,
23290 schemeRdBu: scheme$4,
23291 interpolateRdGy: RdGy,
23292 schemeRdGy: scheme$5,
23293 interpolateRdYlBu: RdYlBu,
23294 schemeRdYlBu: scheme$6,
23295 interpolateRdYlGn: RdYlGn,
23296 schemeRdYlGn: scheme$7,
23297 interpolateSpectral: Spectral,
23298 schemeSpectral: scheme$8,
23299 interpolateBuGn: BuGn,
23300 schemeBuGn: scheme$9,
23301 interpolateBuPu: BuPu,
23302 schemeBuPu: scheme$a,
23303 interpolateGnBu: GnBu,
23304 schemeGnBu: scheme$b,
23305 interpolateOrRd: OrRd,
23306 schemeOrRd: scheme$c,
23307 interpolatePuBuGn: PuBuGn,
23308 schemePuBuGn: scheme$d,
23309 interpolatePuBu: PuBu,
23310 schemePuBu: scheme$e,
23311 interpolatePuRd: PuRd,
23312 schemePuRd: scheme$f,
23313 interpolateRdPu: RdPu,
23314 schemeRdPu: scheme$g,
23315 interpolateYlGnBu: YlGnBu,
23316 schemeYlGnBu: scheme$h,
23317 interpolateYlGn: YlGn,
23318 schemeYlGn: scheme$i,
23319 interpolateYlOrBr: YlOrBr,
23320 schemeYlOrBr: scheme$j,
23321 interpolateYlOrRd: YlOrRd,
23322 schemeYlOrRd: scheme$k,
23323 interpolateBlues: Blues,
23324 schemeBlues: scheme$l,
23325 interpolateGreens: Greens,
23326 schemeGreens: scheme$m,
23327 interpolateGreys: Greys,
23328 schemeGreys: scheme$n,
23329 interpolatePurples: Purples,
23330 schemePurples: scheme$o,
23331 interpolateReds: Reds,
23332 schemeReds: scheme$p,
23333 interpolateOranges: Oranges,
23334 schemeOranges: scheme$q,
23335 interpolateCubehelixDefault: cubehelix$3,
23336 interpolateRainbow: rainbow,
23337 interpolateWarm: warm,
23338 interpolateCool: cool,
23339 interpolateSinebow: sinebow,
23340 interpolateViridis: viridis,
23341 interpolateMagma: magma,
23342 interpolateInferno: inferno,
23343 interpolatePlasma: plasma,
23349 namespace: namespace,
23350 namespaces: namespaces,
23351 clientPoint: point,
23353 selectAll: d3_selectAll,
23354 selection: selection,
23355 selector: selector,
23356 selectorAll: selectorAll,
23359 touches: d3_touches,
23360 window: defaultView,
23361 get event () { return event; },
23362 customEvent: customEvent,
23367 areaRadial: areaRadial,
23368 radialArea: areaRadial,
23369 lineRadial: lineRadial$1,
23370 radialLine: lineRadial$1,
23371 pointRadial: pointRadial,
23372 linkHorizontal: linkHorizontal,
23373 linkVertical: linkVertical,
23374 linkRadial: linkRadial,
23377 symbolCircle: circle$2,
23378 symbolCross: cross$2,
23379 symbolDiamond: diamond,
23380 symbolSquare: square,
23382 symbolTriangle: triangle,
23384 curveBasisClosed: basisClosed$1,
23385 curveBasisOpen: basisOpen,
23386 curveBasis: basis$2,
23387 curveBundle: bundle,
23388 curveCardinalClosed: cardinalClosed,
23389 curveCardinalOpen: cardinalOpen,
23390 curveCardinal: cardinal,
23391 curveCatmullRomClosed: catmullRomClosed,
23392 curveCatmullRomOpen: catmullRomOpen,
23393 curveCatmullRom: catmullRom,
23394 curveLinearClosed: linearClosed,
23395 curveLinear: curveLinear,
23396 curveMonotoneX: monotoneX,
23397 curveMonotoneY: monotoneY,
23398 curveNatural: natural,
23400 curveStepAfter: stepAfter,
23401 curveStepBefore: stepBefore,
23403 stackOffsetExpand: expand,
23404 stackOffsetDiverging: diverging$1,
23405 stackOffsetNone: none$1,
23406 stackOffsetSilhouette: silhouette,
23407 stackOffsetWiggle: wiggle,
23408 stackOrderAppearance: appearance,
23409 stackOrderAscending: ascending$2,
23410 stackOrderDescending: descending$1,
23411 stackOrderInsideOut: insideOut,
23412 stackOrderNone: none$2,
23413 stackOrderReverse: reverse,
23414 timeInterval: newInterval,
23415 timeMillisecond: millisecond,
23416 timeMilliseconds: milliseconds,
23417 utcMillisecond: millisecond,
23418 utcMilliseconds: milliseconds,
23419 timeSecond: second,
23420 timeSeconds: seconds,
23422 utcSeconds: seconds,
23423 timeMinute: minute,
23424 timeMinutes: minutes,
23430 timeWeeks: sundays,
23431 timeSunday: sunday,
23432 timeSundays: sundays,
23433 timeMonday: monday,
23434 timeMondays: mondays,
23435 timeTuesday: tuesday,
23436 timeTuesdays: tuesdays,
23437 timeWednesday: wednesday,
23438 timeWednesdays: wednesdays,
23439 timeThursday: thursday,
23440 timeThursdays: thursdays,
23441 timeFriday: friday,
23442 timeFridays: fridays,
23443 timeSaturday: saturday,
23444 timeSaturdays: saturdays,
23446 timeMonths: months,
23449 utcMinute: utcMinute,
23450 utcMinutes: utcMinutes,
23452 utcHours: utcHours,
23455 utcWeek: utcSunday,
23456 utcWeeks: utcSundays,
23457 utcSunday: utcSunday,
23458 utcSundays: utcSundays,
23459 utcMonday: utcMonday,
23460 utcMondays: utcMondays,
23461 utcTuesday: utcTuesday,
23462 utcTuesdays: utcTuesdays,
23463 utcWednesday: utcWednesday,
23464 utcWednesdays: utcWednesdays,
23465 utcThursday: utcThursday,
23466 utcThursdays: utcThursdays,
23467 utcFriday: utcFriday,
23468 utcFridays: utcFridays,
23469 utcSaturday: utcSaturday,
23470 utcSaturdays: utcSaturdays,
23471 utcMonth: utcMonth,
23472 utcMonths: utcMonths,
23474 utcYears: utcYears,
23475 timeFormatDefaultLocale: defaultLocale$1,
23476 get timeFormat () { return timeFormat; },
23477 get timeParse () { return timeParse; },
23478 get utcFormat () { return utcFormat; },
23479 get utcParse () { return utcParse; },
23480 timeFormatLocale: formatLocale$1,
23481 isoFormat: formatIso,
23482 isoParse: parseIso,
23485 timerFlush: timerFlush,
23486 timeout: d3_timeout,
23487 interval: interval$1,
23488 transition: transition,
23490 interrupt: interrupt,
23493 zoomTransform: transform,
23494 zoomIdentity: identity$8
23497 function actionAddEntity(way) {
23498 return function(graph) {
23499 return graph.replace(way);
23504 Order the nodes of a way in reverse order and reverse any direction dependent tags
23505 other than `oneway`. (We assume that correcting a backwards oneway is the primary
23506 reason for reversing a way.)
23508 In addition, numeric-valued `incline` tags are negated.
23510 The JOSM implementation was used as a guide, but transformations that were of unclear benefit
23511 or adjusted tags that don't seem to be used in practice were omitted.
23514 http://wiki.openstreetmap.org/wiki/Forward_%26_backward,_left_%26_right
23515 http://wiki.openstreetmap.org/wiki/Key:direction#Steps
23516 http://wiki.openstreetmap.org/wiki/Key:incline
23517 http://wiki.openstreetmap.org/wiki/Route#Members
23518 http://josm.openstreetmap.de/browser/josm/trunk/src/org/openstreetmap/josm/corrector/ReverseWayTagCorrector.java
23519 http://wiki.openstreetmap.org/wiki/Tag:highway%3Dstop
23520 http://wiki.openstreetmap.org/wiki/Key:traffic_sign#On_a_way_or_area
23522 function actionReverse(wayID, options) {
23523 var ignoreKey = /^.*(_|:)?(description|name|note|website|ref|source|comment|watch|attribution)(_|:)?/;
23524 var numeric = /^([+\-]?)(?=[\d.])/;
23525 var turn_lanes = /^turn:lanes:?/;
23526 var keyReplacements = [
23527 [/:right$/, ':left'],
23528 [/:left$/, ':right'],
23529 [/:forward$/, ':backward'],
23530 [/:backward$/, ':forward'],
23531 [/:right:/, ':left:'],
23532 [/:left:/, ':right:'],
23533 [/:forward:/, ':backward:'],
23534 [/:backward:/, ':forward:']
23536 var valueReplacements = {
23541 forward: 'backward',
23542 backward: 'forward',
23543 forwards: 'backward',
23544 backwards: 'forward',
23546 var roleReplacements = {
23547 forward: 'backward',
23548 backward: 'forward',
23549 forwards: 'backward',
23550 backwards: 'forward'
23552 var onewayReplacements = {
23559 function reverseKey(key) {
23560 for (var i = 0; i < keyReplacements.length; ++i) {
23561 var replacement = keyReplacements[i];
23562 if (replacement[0].test(key)) {
23563 return key.replace(replacement[0], replacement[1]);
23570 function reverseValue(key, value) {
23571 if (ignoreKey.test(key)) return value;
23573 // Turn lanes are left/right to key (not way) direction - #5674
23574 if (turn_lanes.test(key)) {
23576 } else if (key === 'incline' && numeric.test(value)) {
23577 return value.replace(numeric, function(_, sign) { return sign === '-' ? '' : '-'; });
23578 } else if (options && options.reverseOneway && key === 'oneway') {
23579 return onewayReplacements[value] || value;
23581 return valueReplacements[value] || value;
23586 // Reverse the direction of tags attached to the nodes - #3076
23587 function reverseNodeTags(graph, nodeIDs) {
23588 for (var i = 0; i < nodeIDs.length; i++) {
23589 var node = graph.hasEntity(nodeIDs[i]);
23590 if (!node || !Object.keys(node.tags).length) continue;
23593 for (var key in node.tags) {
23594 tags[reverseKey(key)] = reverseValue(key, node.tags[key]);
23596 graph = graph.replace(node.update({tags: tags}));
23602 return function(graph) {
23603 var way = graph.entity(wayID);
23604 var nodes = way.nodes.slice().reverse();
23608 for (var key in way.tags) {
23609 tags[reverseKey(key)] = reverseValue(key, way.tags[key]);
23612 graph.parentRelations(way).forEach(function(relation) {
23613 relation.members.forEach(function(member, index) {
23614 if (member.id === way.id && (role = roleReplacements[member.role])) {
23615 relation = relation.updateMember({role: role}, index);
23616 graph = graph.replace(relation);
23621 // Reverse any associated directions on nodes on the way and then replace
23622 // the way itself with the reversed node ids and updated way tags
23623 return reverseNodeTags(graph, nodes)
23624 .replace(way.update({nodes: nodes, tags: tags}));
23628 function osmIsInterestingTag(key) {
23629 return key !== 'attribution' &&
23630 key !== 'created_by' &&
23631 key !== 'source' &&
23633 key.indexOf('tiger:') !== 0;
23636 var osmAreaKeys = {};
23637 function osmSetAreaKeys(value) {
23638 osmAreaKeys = value;
23641 // Tags that indicate a node can be a standalone point
23642 // e.g. { amenity: { bar: true, parking: true, ... } ... }
23643 var osmPointTags = {};
23644 function osmSetPointTags(value) {
23645 osmPointTags = value;
23647 // Tags that indicate a node can be part of a way
23648 // e.g. { amenity: { parking: true, ... }, highway: { stop: true ... } ... }
23649 var osmVertexTags = {};
23650 function osmSetVertexTags(value) {
23651 osmVertexTags = value;
23654 function osmNodeGeometriesForTags(nodeTags) {
23655 var geometries = {};
23656 for (var key in nodeTags) {
23657 if (osmPointTags[key] &&
23658 (osmPointTags[key]['*'] || osmPointTags[key][nodeTags[key]])) {
23659 geometries.point = true;
23661 if (osmVertexTags[key] &&
23662 (osmVertexTags[key]['*'] || osmVertexTags[key][nodeTags[key]])) {
23663 geometries.vertex = true;
23665 // break early if both are already supported
23666 if (geometries.point && geometries.vertex) break;
23671 var osmOneWayTags = {
23673 'chair_lift': true,
23676 'magic_carpet': true,
23677 'mixed_lift': true,
23691 'piste:halfpipe': true
23708 var osmPavedTags = {
23713 'concrete:lanes': true,
23714 'concrete:plates': true
23721 var osmRightSideIsInsideTags = {
23724 'coastline': 'coastline',
23727 'retaining_wall': true,
23729 'guard_rail': true,
23737 // "highway" tag values for pedestrian or vehicle right-of-ways that make up the routable network
23738 // (does not include `raceway`)
23739 var osmRoutableHighwayTagValues = {
23740 motorway: true, trunk: true, primary: true, secondary: true, tertiary: true, residential: true,
23741 motorway_link: true, trunk_link: true, primary_link: true, secondary_link: true, tertiary_link: true,
23742 unclassified: true, road: true, service: true, track: true, living_street: true, bus_guideway: true,
23743 path: true, footway: true, cycleway: true, bridleway: true, pedestrian: true, corridor: true, steps: true
23745 // "highway" tag values that generally do not allow motor vehicles
23746 var osmPathHighwayTagValues = {
23747 path: true, footway: true, cycleway: true, bridleway: true, pedestrian: true, corridor: true, steps: true
23750 // "railway" tag values representing existing railroad tracks (purposely does not include 'abandoned')
23751 var osmRailwayTrackTagValues = {
23752 rail: true, light_rail: true, tram: true, subway: true,
23753 monorail: true, funicular: true, miniature: true, narrow_gauge: true,
23754 disused: true, preserved: true
23757 // "waterway" tag values for line features representing water flow
23758 var osmFlowingWaterwayTagValues = {
23759 canal: true, ditch: true, drain: true, river: true, stream: true
23763 var TAU = 2 * Math.PI;
23764 var EQUATORIAL_RADIUS = 6356752.314245179;
23765 var POLAR_RADIUS = 6378137.0;
23768 function geoLatToMeters(dLat) {
23769 return dLat * (TAU * POLAR_RADIUS / 360);
23773 function geoLonToMeters(dLon, atLat) {
23774 return Math.abs(atLat) >= 90 ? 0 :
23775 dLon * (TAU * EQUATORIAL_RADIUS / 360) * Math.abs(Math.cos(atLat * (Math.PI / 180)));
23779 function geoMetersToLat(m) {
23780 return m / (TAU * POLAR_RADIUS / 360);
23784 function geoMetersToLon(m, atLat) {
23785 return Math.abs(atLat) >= 90 ? 0 :
23786 m / (TAU * EQUATORIAL_RADIUS / 360) / Math.abs(Math.cos(atLat * (Math.PI / 180)));
23790 function geoMetersToOffset(meters, tileSize) {
23791 tileSize = tileSize || 256;
23793 meters[0] * tileSize / (TAU * EQUATORIAL_RADIUS),
23794 -meters[1] * tileSize / (TAU * POLAR_RADIUS)
23799 function geoOffsetToMeters(offset, tileSize) {
23800 tileSize = tileSize || 256;
23802 offset[0] * TAU * EQUATORIAL_RADIUS / tileSize,
23803 -offset[1] * TAU * POLAR_RADIUS / tileSize
23808 // Equirectangular approximation of spherical distances on Earth
23809 function geoSphericalDistance(a, b) {
23810 var x = geoLonToMeters(a[0] - b[0], (a[1] + b[1]) / 2);
23811 var y = geoLatToMeters(a[1] - b[1]);
23812 return Math.sqrt((x * x) + (y * y));
23817 function geoScaleToZoom(k, tileSize) {
23818 tileSize = tileSize || 256;
23819 var log2ts = Math.log(tileSize) * Math.LOG2E;
23820 return Math.log(k * TAU) / Math.LN2 - log2ts;
23825 function geoZoomToScale(z, tileSize) {
23826 tileSize = tileSize || 256;
23827 return tileSize * Math.pow(2, z) / TAU;
23831 // returns info about the node from `nodes` closest to the given `point`
23832 function geoSphericalClosestNode(nodes, point) {
23833 var minDistance = Infinity, distance;
23836 for (var i in nodes) {
23837 distance = geoSphericalDistance(nodes[i].loc, point);
23838 if (distance < minDistance) {
23839 minDistance = distance;
23844 if (indexOfMin !== undefined) {
23845 return { index: indexOfMin, distance: minDistance, node: nodes[indexOfMin] };
23851 function geoExtent(min, max) {
23852 if (!(this instanceof geoExtent)) {
23853 return new geoExtent(min, max);
23854 } else if (min instanceof geoExtent) {
23856 } else if (min && min.length === 2 && min[0].length === 2 && min[1].length === 2) {
23860 this[0] = min || [ Infinity, Infinity];
23861 this[1] = max || min || [-Infinity, -Infinity];
23865 geoExtent.prototype = new Array(2);
23867 Object.assign(geoExtent.prototype, {
23869 equals: function (obj) {
23870 return this[0][0] === obj[0][0] &&
23871 this[0][1] === obj[0][1] &&
23872 this[1][0] === obj[1][0] &&
23873 this[1][1] === obj[1][1];
23877 extend: function(obj) {
23878 if (!(obj instanceof geoExtent)) obj = new geoExtent(obj);
23880 [Math.min(obj[0][0], this[0][0]), Math.min(obj[0][1], this[0][1])],
23881 [Math.max(obj[1][0], this[1][0]), Math.max(obj[1][1], this[1][1])]
23886 _extend: function(extent) {
23887 this[0][0] = Math.min(extent[0][0], this[0][0]);
23888 this[0][1] = Math.min(extent[0][1], this[0][1]);
23889 this[1][0] = Math.max(extent[1][0], this[1][0]);
23890 this[1][1] = Math.max(extent[1][1], this[1][1]);
23895 return Math.abs((this[1][0] - this[0][0]) * (this[1][1] - this[0][1]));
23899 center: function() {
23900 return [(this[0][0] + this[1][0]) / 2, (this[0][1] + this[1][1]) / 2];
23904 rectangle: function() {
23905 return [this[0][0], this[0][1], this[1][0], this[1][1]];
23910 return { minX: this[0][0], minY: this[0][1], maxX: this[1][0], maxY: this[1][1] };
23914 polygon: function() {
23916 [this[0][0], this[0][1]],
23917 [this[0][0], this[1][1]],
23918 [this[1][0], this[1][1]],
23919 [this[1][0], this[0][1]],
23920 [this[0][0], this[0][1]]
23925 contains: function(obj) {
23926 if (!(obj instanceof geoExtent)) obj = new geoExtent(obj);
23927 return obj[0][0] >= this[0][0] &&
23928 obj[0][1] >= this[0][1] &&
23929 obj[1][0] <= this[1][0] &&
23930 obj[1][1] <= this[1][1];
23934 intersects: function(obj) {
23935 if (!(obj instanceof geoExtent)) obj = new geoExtent(obj);
23936 return obj[0][0] <= this[1][0] &&
23937 obj[0][1] <= this[1][1] &&
23938 obj[1][0] >= this[0][0] &&
23939 obj[1][1] >= this[0][1];
23943 intersection: function(obj) {
23944 if (!this.intersects(obj)) return new geoExtent();
23945 return new geoExtent(
23946 [Math.max(obj[0][0], this[0][0]), Math.max(obj[0][1], this[0][1])],
23947 [Math.min(obj[1][0], this[1][0]), Math.min(obj[1][1], this[1][1])]
23952 percentContainedIn: function(obj) {
23953 if (!(obj instanceof geoExtent)) obj = new geoExtent(obj);
23954 var a1 = this.intersection(obj).area();
23955 var a2 = this.area();
23957 if (a1 === Infinity || a2 === Infinity || a1 === 0 || a2 === 0) {
23965 padByMeters: function(meters) {
23966 var dLat = geoMetersToLat(meters);
23967 var dLon = geoMetersToLon(meters, this.center()[1]);
23969 [this[0][0] - dLon, this[0][1] - dLat],
23970 [this[1][0] + dLon, this[1][1] + dLat]
23975 toParam: function() {
23976 return this.rectangle().join(',');
23982 function geoVecEqual(a, b, epsilon) {
23984 return (Math.abs(a[0] - b[0]) <= epsilon) && (Math.abs(a[1] - b[1]) <= epsilon);
23986 return (a[0] === b[0]) && (a[1] === b[1]);
23991 function geoVecAdd(a, b) {
23992 return [ a[0] + b[0], a[1] + b[1] ];
23995 // vector subtraction
23996 function geoVecSubtract(a, b) {
23997 return [ a[0] - b[0], a[1] - b[1] ];
24001 function geoVecScale(a, mag) {
24002 return [ a[0] * mag, a[1] * mag ];
24005 // vector rounding (was: geoRoundCoordinates)
24006 function geoVecFloor(a) {
24007 return [ Math.floor(a[0]), Math.floor(a[1]) ];
24010 // linear interpolation
24011 function geoVecInterp(a, b, t) {
24013 a[0] + (b[0] - a[0]) * t,
24014 a[1] + (b[1] - a[1]) * t
24018 // http://jsperf.com/id-dist-optimization
24019 function geoVecLength(a, b) {
24021 var x = a[0] - b[0];
24022 var y = a[1] - b[1];
24023 return Math.sqrt((x * x) + (y * y));
24026 // get a unit vector
24027 function geoVecNormalize(a) {
24028 var length = Math.sqrt((a[0] * a[0]) + (a[1] * a[1]));
24029 if (length !== 0) {
24030 return geoVecScale(a, 1 / length);
24035 // Return the counterclockwise angle in the range (-pi, pi)
24036 // between the positive X axis and the line intersecting a and b.
24037 function geoVecAngle(a, b) {
24038 return Math.atan2(b[1] - a[1], b[0] - a[0]);
24042 function geoVecDot(a, b, origin) {
24043 origin = origin || [0, 0];
24044 var p = geoVecSubtract(a, origin);
24045 var q = geoVecSubtract(b, origin);
24046 return (p[0]) * (q[0]) + (p[1]) * (q[1]);
24049 // normalized dot product
24050 function geoVecNormalizedDot(a, b, origin) {
24051 origin = origin || [0, 0];
24052 var p = geoVecNormalize(geoVecSubtract(a, origin));
24053 var q = geoVecNormalize(geoVecSubtract(b, origin));
24054 return geoVecDot(p, q);
24057 // 2D cross product of OA and OB vectors, returns magnitude of Z vector
24058 // Returns a positive value, if OAB makes a counter-clockwise turn,
24059 // negative for clockwise turn, and zero if the points are collinear.
24060 function geoVecCross(a, b, origin) {
24061 origin = origin || [0, 0];
24062 var p = geoVecSubtract(a, origin);
24063 var q = geoVecSubtract(b, origin);
24064 return (p[0]) * (q[1]) - (p[1]) * (q[0]);
24068 // find closest orthogonal projection of point onto points array
24069 function geoVecProject(a, points) {
24070 var min = Infinity;
24074 for (var i = 0; i < points.length - 1; i++) {
24076 var s = geoVecSubtract(points[i + 1], o);
24077 var v = geoVecSubtract(a, o);
24078 var proj = geoVecDot(v, s) / geoVecDot(s, s);
24083 } else if (proj > 1) {
24086 p = [o[0] + proj * s[0], o[1] + proj * s[1]];
24089 var dist = geoVecLength(p, a);
24097 if (idx !== undefined) {
24098 return { index: idx, distance: min, target: target };
24104 // Return the counterclockwise angle in the range (-pi, pi)
24105 // between the positive X axis and the line intersecting a and b.
24106 function geoAngle(a, b, projection) {
24107 return geoVecAngle(projection(a.loc), projection(b.loc));
24111 function geoEdgeEqual(a, b) {
24112 return (a[0] === b[0] && a[1] === b[1]) ||
24113 (a[0] === b[1] && a[1] === b[0]);
24117 // Rotate all points counterclockwise around a pivot point by given angle
24118 function geoRotate(points, angle, around) {
24119 return points.map(function(point) {
24120 var radial = geoVecSubtract(point, around);
24122 radial[0] * Math.cos(angle) - radial[1] * Math.sin(angle) + around[0],
24123 radial[0] * Math.sin(angle) + radial[1] * Math.cos(angle) + around[1]
24129 // Choose the edge with the minimal distance from `point` to its orthogonal
24130 // projection onto that edge, if such a projection exists, or the distance to
24131 // the closest vertex on that edge. Returns an object with the `index` of the
24132 // chosen edge, the chosen `loc` on that edge, and the `distance` to to it.
24133 function geoChooseEdge(nodes, point, projection, activeID) {
24134 var dist = geoVecLength;
24135 var points = nodes.map(function(n) { return projection(n.loc); });
24136 var ids = nodes.map(function(n) { return n.id; });
24137 var min = Infinity;
24141 for (var i = 0; i < points.length - 1; i++) {
24142 if (ids[i] === activeID || ids[i + 1] === activeID) continue;
24145 var s = geoVecSubtract(points[i + 1], o);
24146 var v = geoVecSubtract(point, o);
24147 var proj = geoVecDot(v, s) / geoVecDot(s, s);
24152 } else if (proj > 1) {
24155 p = [o[0] + proj * s[0], o[1] + proj * s[1]];
24158 var d = dist(p, point);
24162 loc = projection.invert(p);
24166 if (idx !== undefined) {
24167 return { index: idx, distance: min, loc: loc };
24174 // Test active (dragged or drawing) segments against inactive segments
24175 // This is used to test e.g. multipolygon rings that cross
24176 // `activeNodes` is the ring containing the activeID being dragged.
24177 // `inactiveNodes` is the other ring to test against
24178 function geoHasLineIntersections(activeNodes, inactiveNodes, activeID) {
24180 var inactives = [];
24181 var j, k, n1, n2, segment;
24183 // gather active segments (only segments in activeNodes that contain the activeID)
24184 for (j = 0; j < activeNodes.length - 1; j++) {
24185 n1 = activeNodes[j];
24186 n2 = activeNodes[j+1];
24187 segment = [n1.loc, n2.loc];
24188 if (n1.id === activeID || n2.id === activeID) {
24189 actives.push(segment);
24193 // gather inactive segments
24194 for (j = 0; j < inactiveNodes.length - 1; j++) {
24195 n1 = inactiveNodes[j];
24196 n2 = inactiveNodes[j+1];
24197 segment = [n1.loc, n2.loc];
24198 inactives.push(segment);
24202 for (j = 0; j < actives.length; j++) {
24203 for (k = 0; k < inactives.length; k++) {
24204 var p = actives[j];
24205 var q = inactives[k];
24206 var hit = geoLineIntersection(p, q);
24217 // Test active (dragged or drawing) segments against inactive segments
24218 // This is used to test whether a way intersects with itself.
24219 function geoHasSelfIntersections(nodes, activeID) {
24221 var inactives = [];
24224 // group active and passive segments along the nodes
24225 for (j = 0; j < nodes.length - 1; j++) {
24227 var n2 = nodes[j+1];
24228 var segment = [n1.loc, n2.loc];
24229 if (n1.id === activeID || n2.id === activeID) {
24230 actives.push(segment);
24232 inactives.push(segment);
24237 for (j = 0; j < actives.length; j++) {
24238 for (k = 0; k < inactives.length; k++) {
24239 var p = actives[j];
24240 var q = inactives[k];
24241 // skip if segments share an endpoint
24242 if (geoVecEqual(p[1], q[0]) || geoVecEqual(p[0], q[1]) ||
24243 geoVecEqual(p[0], q[0]) || geoVecEqual(p[1], q[1]) ) {
24247 var hit = geoLineIntersection(p, q);
24249 var epsilon = 1e-8;
24250 // skip if the hit is at the segment's endpoint
24251 if (geoVecEqual(p[1], hit, epsilon) || geoVecEqual(p[0], hit, epsilon) ||
24252 geoVecEqual(q[1], hit, epsilon) || geoVecEqual(q[0], hit, epsilon) ) {
24265 // Return the intersection point of 2 line segments.
24266 // From https://github.com/pgkelley4/line-segments-intersect
24267 // This uses the vector cross product approach described below:
24268 // http://stackoverflow.com/a/565282/786339
24269 function geoLineIntersection(a, b) {
24270 var p = [a[0][0], a[0][1]];
24271 var p2 = [a[1][0], a[1][1]];
24272 var q = [b[0][0], b[0][1]];
24273 var q2 = [b[1][0], b[1][1]];
24274 var r = geoVecSubtract(p2, p);
24275 var s = geoVecSubtract(q2, q);
24276 var uNumerator = geoVecCross(geoVecSubtract(q, p), r);
24277 var denominator = geoVecCross(r, s);
24279 if (uNumerator && denominator) {
24280 var u = uNumerator / denominator;
24281 var t = geoVecCross(geoVecSubtract(q, p), s) / denominator;
24283 if ((t >= 0) && (t <= 1) && (u >= 0) && (u <= 1)) {
24284 return geoVecInterp(p, p2, t);
24292 function geoPathIntersections(path1, path2) {
24293 var intersections = [];
24294 for (var i = 0; i < path1.length - 1; i++) {
24295 for (var j = 0; j < path2.length - 1; j++) {
24296 var a = [ path1[i], path1[i+1] ];
24297 var b = [ path2[j], path2[j+1] ];
24298 var hit = geoLineIntersection(a, b);
24300 intersections.push(hit);
24304 return intersections;
24307 function geoPathHasIntersections(path1, path2) {
24308 for (var i = 0; i < path1.length - 1; i++) {
24309 for (var j = 0; j < path2.length - 1; j++) {
24310 var a = [ path1[i], path1[i+1] ];
24311 var b = [ path2[j], path2[j+1] ];
24312 var hit = geoLineIntersection(a, b);
24322 // Return whether point is contained in polygon.
24324 // `point` should be a 2-item array of coordinates.
24325 // `polygon` should be an array of 2-item arrays of coordinates.
24327 // From https://github.com/substack/point-in-polygon.
24328 // ray-casting algorithm based on
24329 // http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html
24331 function geoPointInPolygon(point, polygon) {
24334 var inside = false;
24336 for (var i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {
24337 var xi = polygon[i][0];
24338 var yi = polygon[i][1];
24339 var xj = polygon[j][0];
24340 var yj = polygon[j][1];
24342 var intersect = ((yi > y) !== (yj > y)) &&
24343 (x < (xj - xi) * (y - yi) / (yj - yi) + xi);
24344 if (intersect) inside = !inside;
24351 function geoPolygonContainsPolygon(outer, inner) {
24352 return inner.every(function(point) {
24353 return geoPointInPolygon(point, outer);
24358 function geoPolygonIntersectsPolygon(outer, inner, checkSegments) {
24359 function testPoints(outer, inner) {
24360 return inner.some(function(point) {
24361 return geoPointInPolygon(point, outer);
24365 return testPoints(outer, inner) || (!!checkSegments && geoPathHasIntersections(outer, inner));
24369 // http://gis.stackexchange.com/questions/22895/finding-minimum-area-rectangle-for-given-points
24370 // http://gis.stackexchange.com/questions/3739/generalisation-strategies-for-building-outlines/3756#3756
24371 function geoGetSmallestSurroundingRectangle(points) {
24372 var hull = d3_polygonHull(points);
24373 var centroid = d3_polygonCentroid(hull);
24374 var minArea = Infinity;
24375 var ssrExtent = [];
24379 for (var i = 0; i <= hull.length - 1; i++) {
24380 var c2 = (i === hull.length - 1) ? hull[0] : hull[i + 1];
24381 var angle = Math.atan2(c2[1] - c1[1], c2[0] - c1[0]);
24382 var poly = geoRotate(hull, -angle, centroid);
24383 var extent = poly.reduce(function(extent, point) {
24384 return extent.extend(geoExtent(point));
24387 var area = extent.area();
24388 if (area < minArea) {
24390 ssrExtent = extent;
24397 poly: geoRotate(ssrExtent.polygon(), ssrAngle, centroid),
24403 function geoPathLength(path) {
24405 for (var i = 0; i < path.length - 1; i++) {
24406 length += geoVecLength(path[i], path[i + 1]);
24412 // If the given point is at the edge of the padded viewport,
24413 // return a vector that will nudge the viewport in that direction
24414 function geoViewportEdge(point, dimensions) {
24415 var pad = [80, 20, 50, 20]; // top, right, bottom, left
24419 if (point[0] > dimensions[0] - pad[1])
24421 if (point[0] < pad[3])
24423 if (point[1] > dimensions[1] - pad[2])
24425 if (point[1] < pad[0])
24436 Bypasses features of D3's default projection stream pipeline that are unnecessary:
24437 * Antimeridian clipping
24438 * Spherical rotation
24441 function geoRawMercator() {
24442 var project = mercatorRaw;
24443 var k = 512 / Math.PI; // scale
24445 var y = 0; // translate
24446 var clipExtent = [[0, 0], [0, 0]];
24449 function projection(point) {
24450 point = project(point[0] * Math.PI / 180, point[1] * Math.PI / 180);
24451 return [point[0] * k + x, y - point[1] * k];
24455 projection.invert = function(point) {
24456 point = project.invert((point[0] - x) / k, (y - point[1]) / k);
24457 return point && [point[0] * 180 / Math.PI, point[1] * 180 / Math.PI];
24461 projection.scale = function(_) {
24462 if (!arguments.length) return k;
24468 projection.translate = function(_) {
24469 if (!arguments.length) return [x, y];
24476 projection.clipExtent = function(_) {
24477 if (!arguments.length) return clipExtent;
24483 projection.transform = function(obj) {
24484 if (!arguments.length) return identity$8.translate(x, y).scale(k);
24492 projection.stream = d3_geoTransform({
24493 point: function(x, y) {
24494 var vec = projection([x, y]);
24495 this.stream.point(vec[0], vec[1]);
24503 function geoOrthoNormalizedDotProduct(a, b, origin) {
24504 if (geoVecEqual(origin, a) || geoVecEqual(origin, b)) {
24505 return 1; // coincident points, treat as straight and try to remove
24507 return geoVecNormalizedDot(a, b, origin);
24511 function geoOrthoFilterDotProduct(dotp, epsilon, lowerThreshold, upperThreshold, allowStraightAngles) {
24512 var val = Math.abs(dotp);
24513 if (val < epsilon) {
24514 return 0; // already orthogonal
24515 } else if (allowStraightAngles && Math.abs(val-1) < epsilon) {
24516 return 0; // straight angle, which is okay in this case
24517 } else if (val < lowerThreshold || val > upperThreshold) {
24518 return dotp; // can be adjusted
24520 return null; // ignore vertex
24525 function geoOrthoCalcScore(points, isClosed, epsilon, threshold) {
24527 var first = isClosed ? 0 : 1;
24528 var last = isClosed ? points.length : points.length - 1;
24529 var coords = points.map(function(p) { return p.coord; });
24531 var lowerThreshold = Math.cos((90 - threshold) * Math.PI / 180);
24532 var upperThreshold = Math.cos(threshold * Math.PI / 180);
24534 for (var i = first; i < last; i++) {
24535 var a = coords[(i - 1 + coords.length) % coords.length];
24536 var origin = coords[i];
24537 var b = coords[(i + 1) % coords.length];
24539 var dotp = geoOrthoFilterDotProduct(geoOrthoNormalizedDotProduct(a, b, origin), epsilon, lowerThreshold, upperThreshold);
24540 if (dotp === null) continue; // ignore vertex
24541 score = score + 2.0 * Math.min(Math.abs(dotp - 1.0), Math.min(Math.abs(dotp), Math.abs(dotp + 1)));
24547 // returns the maximum angle less than `lessThan` between the actual corner and a 0° or 90° corner
24548 function geoOrthoMaxOffsetAngle(coords, isClosed, lessThan) {
24549 var max = -Infinity;
24551 var first = isClosed ? 0 : 1;
24552 var last = isClosed ? coords.length : coords.length - 1;
24554 for (var i = first; i < last; i++) {
24555 var a = coords[(i - 1 + coords.length) % coords.length];
24556 var origin = coords[i];
24557 var b = coords[(i + 1) % coords.length];
24558 var normalizedDotP = geoOrthoNormalizedDotProduct(a, b, origin);
24560 var angle = Math.acos(Math.abs(normalizedDotP)) * 180 / Math.PI;
24562 if (angle > 45) angle = 90 - angle;
24564 if (angle >= lessThan) continue;
24566 if (angle > max) max = angle;
24569 if (max === -Infinity) return null;
24575 // similar to geoOrthoCalcScore, but returns quickly if there is something to do
24576 function geoOrthoCanOrthogonalize(coords, isClosed, epsilon, threshold, allowStraightAngles) {
24578 var first = isClosed ? 0 : 1;
24579 var last = isClosed ? coords.length : coords.length - 1;
24581 var lowerThreshold = Math.cos((90 - threshold) * Math.PI / 180);
24582 var upperThreshold = Math.cos(threshold * Math.PI / 180);
24584 for (var i = first; i < last; i++) {
24585 var a = coords[(i - 1 + coords.length) % coords.length];
24586 var origin = coords[i];
24587 var b = coords[(i + 1) % coords.length];
24589 var dotp = geoOrthoFilterDotProduct(geoOrthoNormalizedDotProduct(a, b, origin), epsilon, lowerThreshold, upperThreshold, allowStraightAngles);
24590 if (dotp === null) continue; // ignore vertex
24591 if (Math.abs(dotp) > 0) return 1; // something to do
24592 score = 0; // already square
24598 var wikibooks = [["Afrikaans","Afrikaans","af"],["Arabic","العربية","ar"],["Azerbaijani","azərbaycanca","az"],["Belarusian","беларуская","be"],["Bulgarian","български","bg"],["Bangla","বাংলা","bn"],["Bosnian","bosanski","bs"],["Catalan","català","ca"],["Czech","čeština","cs"],["Chuvash","Чӑвашла","cv"],["Welsh","Cymraeg","cy"],["Danish","dansk","da"],["German","Deutsch","de"],["Greek","Ελληνικά","el"],["English","English","en"],["Esperanto","Esperanto","eo"],["Spanish","español","es"],["Estonian","eesti","et"],["Basque","euskara","eu"],["Persian","فارسی","fa"],["Finnish","suomi","fi"],["French","français","fr"],["Western Frisian","Frysk","fy"],["Galician","galego","gl"],["Hebrew","עברית","he"],["Hindi","हिन्दी","hi"],["Croatian","hrvatski","hr"],["Hungarian","magyar","hu"],["Armenian","Հայերեն","hy"],["Interlingua","interlingua","ia"],["Indonesian","Bahasa Indonesia","id"],["Icelandic","íslenska","is"],["Italian","italiano","it"],["Japanese","日本語","ja"],["Georgian","ქართული","ka"],["Kazakh","қазақша","kk"],["Khmer","ភាសាខ្មែរ","km"],["Korean","한국어","ko"],["Kurdish","Kurdî","ku"],["Kyrgyz","Кыргызча","ky"],["Latin","Latina","la"],["Limburgish","Limburgs","li"],["Lithuanian","lietuvių","lt"],["Malagasy","Malagasy","mg"],["Macedonian","македонски","mk"],["Malayalam","മലയാളം","ml"],["Marathi","मराठी","mr"],["Malay","Bahasa Melayu","ms"],["Nepali","नेपाली","ne"],["Dutch","Nederlands","nl"],["Norwegian","norsk bokmål","no"],["Occitan","occitan","oc"],["Punjabi","ਪੰਜਾਬੀ","pa"],["Polish","polski","pl"],["Portuguese","português","pt"],["Romanian","română","ro"],["Russian","русский","ru"],["Sanskrit","संस्कृतम्","sa"],["Sinhala","සිංහල","si"],["Slovak","slovenčina","sk"],["Slovenian","slovenščina","sl"],["Albanian","shqip","sq"],["Serbian","српски / srpski","sr"],["Swedish","svenska","sv"],["Tamil","தமிழ்","ta"],["Telugu","తెలుగు","te"],["Tajik","тоҷикӣ","tg"],["Thai","ไทย","th"],["Tagalog","Tagalog","tl"],["Turkish","Türkçe","tr"],["Tatar","татарча/tatarça","tt"],["Ukrainian","українська","uk"],["Urdu","اردو","ur"],["Vietnamese","Tiếng Việt","vi"],["Chinese","中文","zh"]];
24600 var wikibooks$1 = /*#__PURE__*/Object.freeze({
24601 'default': wikibooks
24604 var wikinews = [["Arabic","العربية","ar"],["Bulgarian","български","bg"],["Bosnian","bosanski","bs"],["Catalan","català","ca"],["Czech","čeština","cs"],["German","Deutsch","de"],["Greek","Ελληνικά","el"],["English","English","en"],["Esperanto","Esperanto","eo"],["Spanish","español","es"],["Persian","فارسی","fa"],["Finnish","suomi","fi"],["French","français","fr"],["Hebrew","עברית","he"],["Italian","italiano","it"],["Japanese","日本語","ja"],["Korean","한국어","ko"],["Norwegian","norsk bokmål","no"],["Polish","polski","pl"],["Portuguese","português","pt"],["Romanian","română","ro"],["Russian","русский","ru"],["Albanian","shqip","sq"],["Serbian","српски / srpski","sr"],["Swedish","svenska","sv"],["Tamil","தமிழ்","ta"],["Turkish","Türkçe","tr"],["Ukrainian","українська","uk"],["Chinese","中文","zh"]];
24606 var wikinews$1 = /*#__PURE__*/Object.freeze({
24607 'default': wikinews
24610 var wikiquote = [["Afrikaans","Afrikaans","af"],["Arabic","العربية","ar"],["Azerbaijani","azərbaycanca","az"],["Belarusian","беларуская","be"],["Bulgarian","български","bg"],["Breton","brezhoneg","br"],["Bosnian","bosanski","bs"],["Catalan","català","ca"],["Czech","čeština","cs"],["Welsh","Cymraeg","cy"],["Danish","dansk","da"],["German","Deutsch","de"],["Greek","Ελληνικά","el"],["English","English","en"],["Esperanto","Esperanto","eo"],["Spanish","español","es"],["Estonian","eesti","et"],["Basque","euskara","eu"],["Persian","فارسی","fa"],["Finnish","suomi","fi"],["French","français","fr"],["Galician","galego","gl"],["Gujarati","ગુજરાતી","gu"],["Hebrew","עברית","he"],["Hindi","हिन्दी","hi"],["Croatian","hrvatski","hr"],["Hungarian","magyar","hu"],["Armenian","Հայերեն","hy"],["Indonesian","Bahasa Indonesia","id"],["Icelandic","íslenska","is"],["Italian","italiano","it"],["Japanese","日本語","ja"],["Georgian","ქართული","ka"],["Kannada","ಕನ್ನಡ","kn"],["Korean","한국어","ko"],["Kurdish","Kurdî","ku"],["Kyrgyz","Кыргызча","ky"],["Latin","Latina","la"],["Limburgish","Limburgs","li"],["Lithuanian","lietuvių","lt"],["Malayalam","മലയാളം","ml"],["Marathi","मराठी","mr"],["Dutch","Nederlands","nl"],["Norwegian Nynorsk","norsk nynorsk","nn"],["Norwegian","norsk bokmål","no"],["Polish","polski","pl"],["Portuguese","português","pt"],["Romanian","română","ro"],["Russian","русский","ru"],["Sanskrit","संस्कृतम्","sa"],["Slovak","slovenčina","sk"],["Slovenian","slovenščina","sl"],["Albanian","shqip","sq"],["Serbian","српски / srpski","sr"],["Sundanese","Basa Sunda","su"],["Swedish","svenska","sv"],["Tamil","தமிழ்","ta"],["Telugu","తెలుగు","te"],["Thai","ไทย","th"],["Turkish","Türkçe","tr"],["Ukrainian","українська","uk"],["Urdu","اردو","ur"],["Uzbek","oʻzbekcha/ўзбекча","uz"],["Vietnamese","Tiếng Việt","vi"],["Wolof","Wolof","wo"],["Chinese","中文","zh"]];
24612 var wikiquote$1 = /*#__PURE__*/Object.freeze({
24613 'default': wikiquote
24616 var wikiversity = [["Arabic","العربية","ar"],["Czech","čeština","cs"],["German","Deutsch","de"],["Greek","Ελληνικά","el"],["English","English","en"],["Spanish","español","es"],["Finnish","suomi","fi"],["French","français","fr"],["Italian","italiano","it"],["Japanese","日本語","ja"],["Korean","한국어","ko"],["Portuguese","português","pt"],["Russian","русский","ru"],["Slovenian","slovenščina","sl"],["Swedish","svenska","sv"]];
24618 var wikiversity$1 = /*#__PURE__*/Object.freeze({
24619 'default': wikiversity
24622 var wikivoyage = [["German","Deutsch","de"],["Greek","Ελληνικά","el"],["English","English","en"],["Spanish","español","es"],["Persian","فارسی","fa"],["Finnish","suomi","fi"],["French","français","fr"],["Hebrew","עברית","he"],["Italian","italiano","it"],["Dutch","Nederlands","nl"],["Polish","polski","pl"],["Portuguese","português","pt"],["Romanian","română","ro"],["Russian","русский","ru"],["Swedish","svenska","sv"],["Ukrainian","українська","uk"],["Vietnamese","Tiếng Việt","vi"],["Chinese","中文","zh"]];
24624 var wikivoyage$1 = /*#__PURE__*/Object.freeze({
24625 'default': wikivoyage
24628 var wiktionary = [["Afrikaans","Afrikaans","af"],["Amharic","አማርኛ","am"],["Aragonese","aragonés","an"],["Old English","Ænglisc","ang"],["Arabic","العربية","ar"],["Asturian","asturianu","ast"],["Aymara","Aymar aru","ay"],["Azerbaijani","azərbaycanca","az"],["Belarusian","беларуская","be"],["Bulgarian","български","bg"],["Bangla","বাংলা","bn"],["Breton","brezhoneg","br"],["Bosnian","bosanski","bs"],["Catalan","català","ca"],["Cherokee","ᏣᎳᎩ","chr"],["Corsican","corsu","co"],["Czech","čeština","cs"],["Kashubian","kaszëbsczi","csb"],["Welsh","Cymraeg","cy"],["Danish","dansk","da"],["German","Deutsch","de"],["Divehi","ދިވެހިބަސް","dv"],["Greek","Ελληνικά","el"],["English","English","en"],["Esperanto","Esperanto","eo"],["Spanish","español","es"],["Estonian","eesti","et"],["Basque","euskara","eu"],["Persian","فارسی","fa"],["Finnish","suomi","fi"],["Fijian","Na Vosa Vakaviti","fj"],["Faroese","føroyskt","fo"],["French","français","fr"],["Western Frisian","Frysk","fy"],["Irish","Gaeilge","ga"],["Scottish Gaelic","Gàidhlig","gd"],["Galician","galego","gl"],["Guarani","Avañe'ẽ","gn"],["Gujarati","ગુજરાતી","gu"],["Manx","Gaelg","gv"],["Hausa","Hausa","ha"],["Hebrew","עברית","he"],["Hindi","हिन्दी","hi"],["Croatian","hrvatski","hr"],["Upper Sorbian","hornjoserbsce","hsb"],["Hungarian","magyar","hu"],["Armenian","Հայերեն","hy"],["Interlingua","interlingua","ia"],["Indonesian","Bahasa Indonesia","id"],["Interlingue","Interlingue","ie"],["Ido","Ido","io"],["Icelandic","íslenska","is"],["Italian","italiano","it"],["Inuktitut","ᐃᓄᒃᑎᑐᑦ/inuktitut","iu"],["Japanese","日本語","ja"],["Lojban","la .lojban.","jbo"],["Javanese","Basa Jawa","jv"],["Georgian","ქართული","ka"],["Kazakh","қазақша","kk"],["Kalaallisut","kalaallisut","kl"],["Khmer","ភាសាខ្មែរ","km"],["Kannada","ಕನ್ನಡ","kn"],["Korean","한국어","ko"],["Kashmiri","कॉशुर / کٲشُر","ks"],["Kurdish","Kurdî","ku"],["Cornish","kernowek","kw"],["Kyrgyz","Кыргызча","ky"],["Latin","Latina","la"],["Luxembourgish","Lëtzebuergesch","lb"],["Limburgish","Limburgs","li"],["Lingala","lingála","ln"],["Lao","ລາວ","lo"],["Lithuanian","lietuvių","lt"],["Latvian","latviešu","lv"],["Malagasy","Malagasy","mg"],["Maori","Māori","mi"],["Macedonian","македонски","mk"],["Malayalam","മലയാളം","ml"],["Mongolian","монгол","mn"],["Marathi","मराठी","mr"],["Malay","Bahasa Melayu","ms"],["Maltese","Malti","mt"],["Burmese","မြန်မာဘာသာ","my"],["Nauru","Dorerin Naoero","na"],["Nāhuatl","Nāhuatl","nah"],["Low German","Plattdüütsch","nds"],["Nepali","नेपाली","ne"],["Dutch","Nederlands","nl"],["Norwegian Nynorsk","norsk nynorsk","nn"],["Norwegian","norsk bokmål","no"],["Occitan","occitan","oc"],["Oromo","Oromoo","om"],["Odia","ଓଡ଼ିଆ","or"],["Punjabi","ਪੰਜਾਬੀ","pa"],["Polish","polski","pl"],["Western Punjabi","پنجابی","pnb"],["Pashto","پښتو","ps"],["Portuguese","português","pt"],["Quechua","Runa Simi","qu"],["Romanian","română","ro"],["Aromanian","armãneashti","roa-rup"],["Russian","русский","ru"],["Kinyarwanda","Kinyarwanda","rw"],["Sanskrit","संस्कृतम्","sa"],["Sicilian","sicilianu","scn"],["Sindhi","سنڌي","sd"],["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"],["Somali","Soomaaliga","so"],["Albanian","shqip","sq"],["Serbian","српски / srpski","sr"],["Swati","SiSwati","ss"],["Southern Sotho","Sesotho","st"],["Sundanese","Basa Sunda","su"],["Swedish","svenska","sv"],["Swahili","Kiswahili","sw"],["Tamil","தமிழ்","ta"],["Telugu","తెలుగు","te"],["Tajik","тоҷикӣ","tg"],["Thai","ไทย","th"],["Tigrinya","ትግርኛ","ti"],["Turkmen","Türkmençe","tk"],["Tagalog","Tagalog","tl"],["Tswana","Setswana","tn"],["Tok Pisin","Tok Pisin","tpi"],["Turkish","Türkçe","tr"],["Tsonga","Xitsonga","ts"],["Tatar","татарча/tatarça","tt"],["Uyghur","ئۇيغۇرچە / Uyghurche","ug"],["Ukrainian","українська","uk"],["Urdu","اردو","ur"],["Uzbek","oʻzbekcha/ўзбекча","uz"],["Venetian","vèneto","vec"],["Vietnamese","Tiếng Việt","vi"],["Volapük","Volapük","vo"],["Walloon","walon","wa"],["Wolof","Wolof","wo"],["Yiddish","ייִדיש","yi"],["Chinese","中文","zh"],["Chinese (Min Nan)","Bân-lâm-gú","zh-min-nan"],["Zulu","isiZulu","zu"]];
24630 var wiktionary$1 = /*#__PURE__*/Object.freeze({
24631 'default': wiktionary
24634 var wikipedia = [["Abkhazian","Аҧсшәа","ab"],["Achinese","Acèh","ace"],["Adyghe","адыгабзэ","ady"],["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"],["تۆرکجه","تۆرکجه","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"],["Bangla","বাংলা","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","गोंयची कोंकणी / Gõychi 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 Creole","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"],["Jamaican Creole English","Patois","jam"],["Lojban","la .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","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"],["Livvi-Karelian","Livvinkarjala","olo"],["Oromo","Oromoo","om"],["Odia","ଓଡ଼ିଆ","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"],["Tulu","ತುಳು","tcy"],["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"]];
24636 var wikipedia$1 = /*#__PURE__*/Object.freeze({
24637 'default': wikipedia
24640 var wikisource = [["Arabic","العربية","ar"],["Assamese","অসমীয়া","as"],["Azerbaijani","azərbaycanca","az"],["Belarusian","беларуская","be"],["Bulgarian","български","bg"],["Bangla","বাংলা","bn"],["Breton","brezhoneg","br"],["Bosnian","bosanski","bs"],["Catalan","català","ca"],["Czech","čeština","cs"],["Welsh","Cymraeg","cy"],["Danish","dansk","da"],["German","Deutsch","de"],["Greek","Ελληνικά","el"],["English","English","en"],["Esperanto","Esperanto","eo"],["Spanish","español","es"],["Estonian","eesti","et"],["Persian","فارسی","fa"],["Finnish","suomi","fi"],["Faroese","føroyskt","fo"],["French","français","fr"],["Galician","galego","gl"],["Gujarati","ગુજરાતી","gu"],["Hebrew","עברית","he"],["Croatian","hrvatski","hr"],["Hungarian","magyar","hu"],["Armenian","Հայերեն","hy"],["Indonesian","Bahasa Indonesia","id"],["Icelandic","íslenska","is"],["Italian","italiano","it"],["Japanese","日本語","ja"],["Kannada","ಕನ್ನಡ","kn"],["Korean","한국어","ko"],["Latin","Latina","la"],["Limburgish","Limburgs","li"],["Lithuanian","lietuvių","lt"],["Macedonian","македонски","mk"],["Malayalam","മലയാളം","ml"],["Marathi","मराठी","mr"],["Dutch","Nederlands","nl"],["Norwegian","norsk bokmål","no"],["Odia","ଓଡ଼ିଆ","or"],["Punjabi","ਪੰਜਾਬੀ","pa"],["Polish","polski","pl"],["Portuguese","português","pt"],["Romanian","română","ro"],["Russian","русский","ru"],["Sanskrit","संस्कृतम्","sa"],["Sakha","саха тыла","sah"],["Slovak","slovenčina","sk"],["Slovenian","slovenščina","sl"],["Serbian","српски / srpski","sr"],["Swedish","svenska","sv"],["Tamil","தமிழ்","ta"],["Telugu","తెలుగు","te"],["Thai","ไทย","th"],["Turkish","Türkçe","tr"],["Ukrainian","українська","uk"],["Venetian","vèneto","vec"],["Vietnamese","Tiếng Việt","vi"],["Yiddish","ייִדיש","yi"],["Chinese","中文","zh"],["Chinese (Min Nan)","Bân-lâm-gú","zh-min-nan"]];
24642 var wikisource$1 = /*#__PURE__*/Object.freeze({
24643 'default': wikisource
24646 getCjsExportFromNamespace(wikibooks$1);
24648 getCjsExportFromNamespace(wikinews$1);
24650 getCjsExportFromNamespace(wikiquote$1);
24652 getCjsExportFromNamespace(wikiversity$1);
24654 getCjsExportFromNamespace(wikivoyage$1);
24656 getCjsExportFromNamespace(wiktionary$1);
24658 var require$$6 = getCjsExportFromNamespace(wikipedia$1);
24660 getCjsExportFromNamespace(wikisource$1);
24662 var wikipedia$2 = require$$6;
24664 var dataAddressFormats = [{format:[["housenumber","street"],["city","postcode"]]},{countryCodes:["au"],format:[["unit","housenumber","street"],["suburb","state","postcode"]]},{countryCodes:["gb"],format:[["housename"],["housenumber","street"],["city","postcode"]]},{countryCodes:["ie"],format:[["housename"],["housenumber","street"],["city"],["postcode"]]},{countryCodes:["at","ch","de","si","pl"],format:[["street","housenumber"],["postcode","city"]]},{countryCodes:["ad","ba","be","cz","dk","es","fi","gr","hr","is","it","li","nl","no","pt","se","sk","sm","va"],format:[["street","housenumber","unit"],["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:["ca"],format:[["housenumber","street","unit"],["city","province","postcode"]]},{countryCodes:["us"],format:[["housenumber","street","unit"],["city","state","postcode"]]},{countryCodes:["tw"],format:[["postcode","city","district"],["place","street"],["housenumber","floor","unit"]]},{countryCodes:["jp"],format:[["postcode","province","county"],["city","suburb"],["quarter","neighbourhood"],["block_number","housenumber"]],dropdowns:["postcode","province","county","city","suburb","quarter","neighbourhood","block_number"],widths:{postcode:0.3,province:0.35,county:0.35,city:0.65,suburb:0.35,quarter:0.5,neighbourhood:0.5,block_number:0.5,housenumber:0.5}},{countryCodes:["tr"],format:[["neighbourhood"],["street","housenumber"],["postcode","district","city"]]},{countryCodes:["ua"],format:[["housenumber","postcode"],["street"]]},{countryCodes:["cn"],format:[["postcode","province"],["city","district"],["street","housenumber"]]}];
24666 var dataDeprecated = [{old:{aerialway:"canopy"},replace:{aerialway:"zip_line"}},{old:{aeroway:"aerobridge"},replace:{aeroway:"jet_bridge"}},{old:{amenity:"advertising"},replace:{advertising:"*"}},{old:{amenity:"artwork"},replace:{tourism:"artwork"}},{old:{amenity:"car_repair"},replace:{shop:"car_repair"}},{old:{amenity:"citymap_post"},replace:{tourism:"information"}},{old:{amenity:"club"},replace:{club:"*"}},{old:{amenity:"community_center"},replace:{amenity:"community_centre"}},{old:{amenity:"dancing_school"},replace:{leisure:"dance","dance:teaching":"yes"}},{old:{amenity:"dog_bin"},replace:{amenity:"waste_basket",waste:"dog_excrement"}},{old:{amenity:"dog_waste_bin"},replace:{amenity:"waste_basket",waste:"dog_excrement"}},{old:{amenity:"embassy"},replace:{office:"diplomatic"}},{old:{amenity:"ev_charging"},replace:{amenity:"charging_station"}},{old:{amenity:"fire_hydrant"},replace:{emergency:"fire_hydrant"}},{old:{amenity:"firepit"},replace:{leisure:"firepit"}},{old:{amenity:"garage"},replace:{landuse:"garages"}},{old:{amenity:"garages"},replace:{landuse:"garages"}},{old:{amenity:"gym"},replace:{leisure:"fitness_centre"}},{old:{amenity:"hotel"},replace:{tourism:"hotel"}},{old:{amenity:"kiosk"},replace:{shop:"kiosk"}},{old:{amenity:"nursery"},replace:{amenity:"kindergarten"}},{old:{amenity:"preschool"},replace:{amenity:"kindergarten"}},{old:{amenity:"public_building"},replace:{building:"public"}},{old:{amenity:"real_estate"},replace:{office:"estate_agent"}},{old:{amenity:"register_office"},replace:{office:"government",government:"register_office"}},{old:{amenity:"sauna"},replace:{leisure:"sauna"}},{old:{amenity:"scrapyard"},replace:{landuse:"industrial",industrial:"scrap_yard"}},{old:{amenity:"shop"},replace:{shop:"*"}},{old:{amenity:"sloped_curb"},replace:{kerb:"lowered"}},{old:{amenity:"social_club"},replace:{club:"*"}},{old:{amenity:"swimming_pool"},replace:{leisure:"swimming_pool"}},{old:{amenity:"ticket_booth"},replace:{shop:"ticket"}},{old:{amenity:"toilet"},replace:{amenity:"toilets"}},{old:{amenity:"vending_machine",vending:"news_papers"},replace:{amenity:"vending_machine",vending:"newspapers"}},{old:{amenity:"winery"},replace:{craft:"winery"}},{old:{amenity:"youth_center"},replace:{amenity:"community_centre","community_centre:for":"juvenile"}},{old:{amenity:"youth_centre"},replace:{amenity:"community_centre","community_centre:for":"juvenile"}},{old:{artwork:"*"},replace:{artwork_type:"$1"}},{old:{"artwork:type":"*"},replace:{artwork_type:"$1"}},{old:{attraction:"ferris_wheel"},replace:{attraction:"big_wheel"}},{old:{barrier:"curb"},replace:{barrier:"kerb"}},{old:{barrier:"embankment"},replace:{man_made:"embankment"}},{old:{barrier:"entrance"},replace:{entrance:"*"}},{old:{barrier:"wire_fence"},replace:{barrier:"fence",fence_type:"wire"}},{old:{barrier:"wood_fence"},replace:{barrier:"fence",fence_type:"wood"}},{old:{building:"entrance"},replace:{entrance:"*"}},{old:{building:"family_house"},replace:{building:"house"}},{old:{building:"home"},replace:{building:"house"}},{old:{building:"household"},replace:{building:"house"}},{old:{"building:color":"*"},replace:{"building:colour":"$1"}},{old:{"building:roof:colour":"*"},replace:{"roof:colour":"$1"}},{old:{"building:type":"*"},replace:{building:"$1"}},{old:{color:"*"},replace:{colour:"$1"}},{old:{craft:"glass"},replace:{craft:"glaziery"}},{old:{craft:"catering"},replace:{craft:"caterer"}},{old:{craft:"sculpter"},replace:{craft:"sculptor"}},{old:{crossing:"zebra"},replace:{crossing:"marked"}},{old:{cuisine:"gluten-free"},replace:{"diet:gluten_free":"yes"}},{old:{cuisine:"halal"},replace:{"diet:halal":"yes"}},{old:{cuisine:"kosher"},replace:{"diet:kosher":"yes"}},{old:{cuisine:"vegan"},replace:{"diet:vegan":"yes"}},{old:{cuisine:"vegetarian"},replace:{"diet:vegetarian":"yes"}},{old:{curb:"*"},replace:{kerb:"$1"}},{old:{drinkable:"*"},replace:{drinking_water:"$1"}},{old:{dropped_kerb:"*"},replace:{kerb:"lowered"}},{old:{escalator:"*"},replace:{highway:"steps",conveying:"$1"}},{old:{fee:"0"},replace:{fee:"no"}},{old:{fee:"free"},replace:{fee:"no"}},{old:{fee:"Free"},replace:{fee:"no"}},{old:{fee:"No"},replace:{fee:"no"}},{old:{fee:"none"},replace:{fee:"no"}},{old:{fee:"some"},replace:{fee:"yes"}},{old:{fee:"Yes"},replace:{fee:"yes"}},{old:{fenced:"yes"},replace:{barrier:"fence"}},{old:{footway:"both"},replace:{sidewalk:"both"}},{old:{footway:"crossing",highway:"cycleway"},replace:{cycleway:"crossing",highway:"cycleway"}},{old:{footway:"left"},replace:{sidewalk:"left"}},{old:{footway:"no"},replace:{sidewalk:"no"}},{old:{footway:"none"},replace:{sidewalk:"no"}},{old:{footway:"right"},replace:{sidewalk:"right"}},{old:{footway:"separate"},replace:{sidewalk:"separate"}},{old:{"generator:source":"photovoltaic"},replace:{"generator:source":"solar","generator:method":"photovoltaic"}},{old:{highway:"abandoned"},replace:{"abandoned:highway":"*"}},{old:{highway:"bridleway",horse:"no"},replace:{highway:"path",horse:"no"}},{old:{highway:"cycleway",bicycle:"no"},replace:{highway:"path",bicycle:"no"}},{old:{highway:"footway",foot:"no"},replace:{highway:"path",foot:"no"}},{old:{highway:"ford"},replace:{ford:"*"}},{old:{highway:"no"}},{old:{highway:"platform"},replace:{bus:"yes",public_transport:"platform"}},{old:{highway:"stile"},replace:{barrier:"stile"}},{old:{highway:"unsurfaced"},replace:{highway:"road",surface:"unpaved"}},{old:{internet_access:"public"},replace:{internet_access:"yes","internet_access:fee":"no"}},{old:{internet_access:"wifi"},replace:{internet_access:"wlan"}},{old:{"internet_access:fee":"0"},replace:{"internet_access:fee":"no"}},{old:{"internet_access:fee":"free"},replace:{"internet_access:fee":"no"}},{old:{"internet_access:fee":"Free"},replace:{"internet_access:fee":"no"}},{old:{"internet_access:fee":"No"},replace:{"internet_access:fee":"no"}},{old:{"internet_access:name":"*"},replace:{"internet_access:ssid":"$1"}},{old:{"internet_access:type":"*"},replace:{internet_access:"$1"}},{old:{kerb:"dropped"},replace:{kerb:"lowered"}},{old:{kerb:"flat"},replace:{kerb:"flush"}},{old:{landuse:"basin"},replace:{natural:"water",water:"basin"}},{old:{landuse:"conservation"},replace:{boundary:"protected_area"}},{old:{landuse:"farm"},replace:{landuse:"farmland"}},{old:{landuse:"field"},replace:{landuse:"farmland"}},{old:{landuse:"pond"},replace:{natural:"water",water:"pond"}},{old:{landuse:"port"},replace:{landuse:"industrial",industrial:"port"}},{old:{landuse:"reservoir"},replace:{natural:"water",water:"reservoir"}},{old:{landuse:"wood"},replace:{natural:"wood"}},{old:{lawyer:"notary"},replace:{office:"notary"}},{old:{leisure:"beach"},replace:{natural:"beach"}},{old:{leisure:"club"},replace:{club:"*"}},{old:{leisure:"ice_rink",sport:"hockey"},replace:{leisure:"ice_rink",sport:"ice_hockey"}},{old:{leisure:"ice_rink",sport:"skating"},replace:{leisure:"ice_rink",sport:"ice_skating"}},{old:{leisure:"social_club"},replace:{club:"*"}},{old:{leisure:"video_arcade"},replace:{leisure:"amusement_arcade"}},{old:{leisure:"recreation_ground"},replace:{landuse:"recreation_ground"}},{old:{man_made:"cut_line"},replace:{man_made:"cutline"}},{old:{man_made:"jetty"},replace:{highway:"footway",man_made:"pier"}},{old:{man_made:"mdf"},replace:{telecom:"exchange"}},{old:{man_made:"MDF"},replace:{telecom:"exchange"}},{old:{man_made:"fuel_storage_tank"},replace:{man_made:"storage_tank",content:"fuel"}},{old:{man_made:"oil_tank"},replace:{man_made:"storage_tank",content:"oil"}},{old:{man_made:"wastewater_tank"},replace:{man_made:"storage_tank",content:"wastewater"}},{old:{man_made:"water_tank"},replace:{man_made:"storage_tank",content:"water"}},{old:{man_made:"well"},replace:{man_made:"water_well"}},{old:{man_made:"winery"},replace:{craft:"winery"}},{old:{memorial:"plate"},replace:{memorial:"plaque"}},{old:{mining_resource:"*"},replace:{resource:"$1"}},{old:{natural:"marsh"},replace:{natural:"wetland",wetland:"marsh"}},{old:{natural:"waterfall"},replace:{waterway:"waterfall"}},{old:{nosquare:"*"},replace:{nonsquare:"$1"}},{old:{office:"real_estate"},replace:{office:"estate_agent"}},{old:{oneway:"1"},replace:{oneway:"yes"}},{old:{oneway:"alternate"},replace:{oneway:"alternating"}},{old:{oneway:"no;yes"}},{old:{oneway:"unknown"}},{old:{place_name:"*"},replace:{name:"$1"}},{old:{pole:"transition"},replace:{"location:transition":"yes"}},{old:{postcode:"*"},replace:{"addr:postcode":"$1"}},{old:{power:"busbar"},replace:{power:"line",line:"busbar"}},{old:{power:"line",location:"underground"},replace:{power:"cable",location:"underground"}},{old:{power:"sub_station"},replace:{power:"substation"}},{old:{power:"substation",location:"kiosk"},replace:{power:"substation",man_made:"street_cabinet",street_cabinet:"power"}},{old:{power:"underground_cable"},replace:{power:"cable",location:"underground"}},{old:{power_source:"*"},replace:{"generator:source":"$1"}},{old:{power_rating:"*"},replace:{"generator:output":"$1"}},{old:{recommended_speed:"*"},replace:{"maxspeed:advisory":"$1"}},{old:{"recommended_speed:backward":"*"},replace:{"maxspeed:advisory:backward":"$1"}},{old:{"recommended_speed:forward":"*"},replace:{"maxspeed:advisory:forward":"$1"}},{old:{religion:"catholic"},replace:{religion:"christian",denomination:"catholic"}},{old:{reservations:"*"},replace:{reservation:"$1"}},{old:{"roof:color":"*"},replace:{"roof:colour":"$1"}},{old:{route:"ncn"},replace:{route:"bicycle",network:"ncn"}},{old:{shop:"adult"},replace:{shop:"erotic"}},{old:{shop:"antique"},replace:{shop:"antiques"}},{old:{shop:"auto_parts"},replace:{shop:"car_parts"}},{old:{shop:"baby"},replace:{shop:"baby_goods"}},{old:{shop:"baby_care"},replace:{shop:"baby_goods"}},{old:{shop:"bags"},replace:{shop:"bag"}},{old:{shop:"betting"},replace:{shop:"bookmaker"}},{old:{shop:"boutique"},replace:{shop:"clothes"}},{old:{shop:"cafe"},replace:{amenity:"cafe"}},{old:{shop:"dive"},replace:{shop:"scuba_diving"}},{old:{shop:"fashion"},replace:{shop:"clothes"}},{old:{shop:"fish"},replace:{shop:"seafood"}},{old:{shop:"fishmonger"},replace:{shop:"seafood"}},{old:{shop:"furnace"},replace:{shop:"fireplace"}},{old:{shop:"gallery"},replace:{shop:"art"}},{old:{shop:"jewellery"},replace:{shop:"jewelry"}},{old:{shop:"lingerie"},replace:{shop:"clothes",clothes:"underwear"}},{old:{shop:"luggage"},replace:{shop:"bag"}},{old:{shop:"money_transfer"},replace:{amenity:"money_transfer"}},{old:{shop:"moneylender"},replace:{shop:"money_lender"}},{old:{shop:"organic"},replace:{shop:"supermarket",organic:"only"}},{old:{shop:"perfume"},replace:{shop:"perfumery"}},{old:{shop:"real_estate"},replace:{office:"estate_agent"}},{old:{shop:"tickets"},replace:{shop:"ticket"}},{old:{shop:"underwear"},replace:{shop:"clothes",clothes:"underwear"}},{old:{shop:"winery"},replace:{craft:"winery"}},{old:{sloped_curb:"0"},replace:{kerb:"flush"}},{old:{sloped_curb:"0.00"},replace:{kerb:"flush"}},{old:{sloped_curb:"0.01"},replace:{kerb:"lowered","kerb:height":"1 cm"}},{old:{sloped_curb:"0.02"},replace:{kerb:"lowered","kerb:height":"2 cm"}},{old:{sloped_curb:"0.03"},replace:{kerb:"lowered","kerb:height":"3 cm"}},{old:{sloped_curb:"at_grade"},replace:{kerb:"flush"}},{old:{sloped_curb:"both"},replace:{kerb:"lowered"}},{old:{sloped_curb:"flush"},replace:{kerb:"flush"}},{old:{sloped_curb:"low"},replace:{kerb:"lowered"}},{old:{sloped_curb:"no"},replace:{kerb:"raised"}},{old:{sloped_curb:"yes"},replace:{kerb:"lowered"}},{old:{sport:"horse_shoes"},replace:{sport:"horseshoes"}},{old:{sport:"horseshoe"},replace:{sport:"horseshoes"}},{old:{sport:"shuffle_board"},replace:{sport:"shuffleboard"}},{old:{"theatre:type":"amphitheatre"},replace:{"theatre:type":"amphi"}},{old:{todo:"*"},replace:{fixme:"$1"}},{old:{TODO:"*"},replace:{fixme:"$1"}},{old:{"toilets:disposal":"longdrop"},replace:{"toilets:disposal":"pitlatrine"}},{old:{"toilets:disposal":"pit_latrine"},replace:{"toilets:disposal":"pitlatrine"}},{old:{tourism:"bed_and_breakfast"},replace:{tourism:"guest_house",guest_house:"bed_and_breakfast"}},{old:{type:"broad_leaved"},replace:{leaf_type:"broadleaved"}},{old:{type:"conifer"},replace:{leaf_type:"needleleaved"}},{old:{type:"deciduous"},replace:{leaf_cycle:"deciduous"}},{old:{unnamed:"*"},replace:{noname:"$1"}},{old:{water:"intermittent"},replace:{natural:"water",intermittent:"yes"}},{old:{water:"riverbank"},replace:{natural:"water",water:"river"}},{old:{water:"salt"},replace:{natural:"water",salt:"yes"}},{old:{water:"tidal"},replace:{natural:"water",tidal:"yes"}},{old:{waterway:"aqueduct"},replace:{waterway:"canal",bridge:"aqueduct"}},{old:{waterway:"lock"},replace:{waterway:"canal",lock:"yes"}},{old:{waterway:"riverbank"},replace:{natural:"water",water:"river"}},{old:{wood:"coniferous"},replace:{leaf_type:"needleleaved"}},{old:{wood:"deciduous"},replace:{leaf_cycle:"deciduous"}},{old:{wood:"evergreen"},replace:{leaf_cycle:"evergreen"}},{old:{wood:"mixed"},replace:{leaf_cycle:"mixed",leaf_type:"mixed"}}];
24668 var dataDiscarded = {created_by:true,odbl:true,"odbl:note":true,"tiger:upload_uuid":true,"tiger:tlid":true,"tiger:source":true,"tiger:separated":true,"geobase:datasetName":true,"geobase:uuid":true,"osmarender:nameDirection":true,"osmarender:renderName":true,"osmarender:renderRef":true,"osmarender:rendernames":true,"sub_sea:type":true,"KSJ2:ADS":true,"KSJ2:ARE":true,"KSJ2:AdminArea":true,"KSJ2:COP_label":true,"KSJ2:DFD":true,"KSJ2:INT":true,"KSJ2:INT_label":true,"KSJ2:LOC":true,"KSJ2:LPN":true,"KSJ2:OPC":true,"KSJ2:PubFacAdmin":true,"KSJ2:RAC":true,"KSJ2:RAC_label":true,"KSJ2:RIC":true,"KSJ2:RIN":true,"KSJ2:WSC":true,"KSJ2:coordinate":true,"KSJ2:curve_id":true,"KSJ2:curve_type":true,"KSJ2:filename":true,"KSJ2:lake_id":true,"KSJ2:lat":true,"KSJ2:long":true,"KSJ2:river_id":true,"SK53_bulk:load":true,"yh:LINE_NAME":true,"yh:LINE_NUM":true,"yh:STRUCTURE":true,"yh:TOTYUMONO":true,"yh:TYPE":true,"yh:WIDTH":true,"yh:WIDTH_RANK":true};
24670 var dataLocales = {af:{rtl:false},ar:{rtl:true},"ar-AA":{rtl:true},ast:{rtl:false},be:{rtl:false},bg:{rtl:false},bn:{rtl:false},bs:{rtl:false},ca:{rtl:false},ckb:{rtl:true},cs:{rtl:false},cy:{rtl:false},da:{rtl:false},de:{rtl:false},dv:{rtl:true},el:{rtl:false},"en-AU":{rtl:false},"en-GB":{rtl:false},eo:{rtl:false},es:{rtl:false},et:{rtl:false},eu:{rtl:false},fa:{rtl:true},fi:{rtl:false},fr:{rtl:false},gan:{rtl:false},gl:{rtl:false},gu:{rtl:false},he:{rtl:true},hi:{rtl:false},hr:{rtl:false},hu:{rtl:false},hy:{rtl:false},ia:{rtl:false},id:{rtl:false},is:{rtl:false},it:{rtl:false},ja:{rtl:false},jv:{rtl:false},km:{rtl:false},kn:{rtl:false},ko:{rtl:false},ku:{rtl:false},lij:{rtl:false},lt:{rtl:false},lv:{rtl:false},mg:{rtl:false},mk:{rtl:false},ml:{rtl:false},mn:{rtl:false},ms:{rtl:false},ne:{rtl:false},nl:{rtl:false},nn:{rtl:false},no:{rtl:false},nv:{rtl:false},pap:{rtl:false},pl:{rtl:false},pt:{rtl:false},"pt-BR":{rtl:false},rm:{rtl:false},ro:{rtl:false},ru:{rtl:false},sc:{rtl:false},si:{rtl:false},sk:{rtl:false},sl:{rtl:false},so:{rtl:false},sq:{rtl:false},sr:{rtl:false},sv:{rtl:false},ta:{rtl:false},te:{rtl:false},th:{rtl:false},tl:{rtl:false},tr:{rtl:false},uk:{rtl:false},ur:{rtl:true},vi:{rtl:false},yue:{rtl:false},zh:{rtl:false},"zh-CN":{rtl:false},"zh-HK":{rtl:false},"zh-TW":{rtl:false}};
24672 var dataPhoneFormats = {ag:"+1-268-555-1234",ai:"+1-264-555-1234",as:"+1-684-555-1234",at:"+43 1 123 45 67",bb:"+1-246-555-1234",bj:"+229 20 12 34 56",bm:"+1-441-555-1234",br:"+55 11 0982 1098",bs:"+1-242-555-1234",ca:"+1-226-555-1234",ci:"+225 20 12 34 56",cn:"+86 10 12345678",de:"+49 89 1234567",dm:"+1-767-555-1234","do":"+1-809-555-1234",es:"+34 989 12 34 56",fi:"+358 40 123 4567",fr:"+33 1 23 45 67 89",gb:"+44 1632 961234",gd:"+1-473-555-1234",gg:"+44 1632 961234",gu:"+1-671-555-1234",hk:"+852 1234 5678",hr:"+385 01 123 4567",hu:"+36 1 123 45 67",ie:"+353 20 912 3456",im:"+44 1632 961234",it:"+39 01 123 456",je:"+44 1632 961234",jm:"+1-876-555-1234",kn:"+1-869-555-1234",ky:"+1-345-555-1234",kz:"+7 495 1234567",lc:"+1-758-555-1234",mp:"+1-670-555-1234",ms:"+1-664-555-1234",nl:"+31 42 123 4567",no:"+47 22 12 34 56",pl:"+48 42 123 4567",pr:"+1-787-555-1234",pt:"+351 211 123456",ru:"+7 495 1234567",se:"+46 31 123 4567",si:"+386 31 123 4567",sj:"+47 22 12 34 56",sx:"+1-721-555-1234",tc:"+1-649-555-1234",tr:"+90 312 123 4567",tt:"+1-868-555-1234",tw:"+886 1 2345 6789",ua:"+380 44 123 4567",us:"+1-202-555-1234",va:"+39 01 123 456",vc:"+1-784-555-1234",vg:"+1-284-555-1234",vi:"+1-340-555-1234",vn:"+84 1 234 5678",za:"+27 11 907 1111"};
24674 var dataShortcuts = [{tab:"browsing",text:"shortcuts.browsing.title",columns:[{rows:[{section:"navigation",text:"shortcuts.browsing.navigation.title"},{shortcuts:["↓","↑","←","→"],text:"shortcuts.browsing.navigation.pan",separator:","},{modifiers:["⌘"],shortcuts:["↓","↑","←","→"],text:"shortcuts.browsing.navigation.pan_more",separator:","},{shortcuts:["+","-"],text:"shortcuts.browsing.navigation.zoom",separator:","},{modifiers:["⌘"],shortcuts:["+","-"],text:"shortcuts.browsing.navigation.zoom_more",separator:","},{section:"help",text:"shortcuts.browsing.help.title"},{shortcuts:["help.key"],text:"shortcuts.browsing.help.help"},{shortcuts:["shortcuts.toggle.key","?"],text:"shortcuts.browsing.help.keyboard"},{section:"display_options",text:"shortcuts.browsing.display_options.title"},{shortcuts:["background.key"],text:"shortcuts.browsing.display_options.background"},{modifiers:["⌘"],shortcuts:["background.key"],text:"shortcuts.browsing.display_options.background_switch"},{shortcuts:["map_data.key"],text:"shortcuts.browsing.display_options.map_data"},{modifiers:["⌃","⌘"],shortcuts:["F","F11"],text:"shortcuts.browsing.display_options.fullscreen"},{shortcuts:["sidebar.key","`","²"],text:"shortcuts.browsing.display_options.sidebar"},{shortcuts:["area_fill.wireframe.key"],text:"shortcuts.browsing.display_options.wireframe"},{modifiers:["⌥"],shortcuts:["area_fill.wireframe.key"],text:"shortcuts.browsing.display_options.osm_data"},{shortcuts:["background.minimap.key"],text:"shortcuts.browsing.display_options.minimap"}]},{rows:[{section:"selecting",text:"shortcuts.browsing.selecting.title"},{shortcuts:["Left-click"],text:"shortcuts.browsing.selecting.select_one"},{modifiers:["⇧"],shortcuts:["Left-click"],text:"shortcuts.browsing.selecting.select_multi"},{modifiers:["⇧"],shortcuts:["Left-click"],gesture:"shortcuts.gesture.drag",text:"shortcuts.browsing.selecting.lasso"},{modifiers:["⌘"],shortcuts:["F"],text:"shortcuts.browsing.selecting.search"},{section:"with_selected",text:"shortcuts.browsing.with_selected.title"},{shortcuts:["Right-click","shortcuts.key.space"],text:"shortcuts.browsing.with_selected.edit_menu"},{shortcuts:["inspector.zoom_to.key"],text:"shortcuts.browsing.with_selected.zoom_to"},{section:"vertex_selected",text:"shortcuts.browsing.vertex_selected.title"},{shortcuts:["[","↖"],text:"shortcuts.browsing.vertex_selected.previous"},{shortcuts:["]","↘"],text:"shortcuts.browsing.vertex_selected.next"},{shortcuts:["{","⇞"],text:"shortcuts.browsing.vertex_selected.first"},{shortcuts:["}","⇟"],text:"shortcuts.browsing.vertex_selected.last"},{shortcuts:["\\","shortcuts.key.pause"],text:"shortcuts.browsing.vertex_selected.change_parent"}]}]},{tab:"editing",text:"shortcuts.editing.title",columns:[{rows:[{section:"drawing",text:"shortcuts.editing.drawing.title"},{shortcuts:["modes.add_feature.key"],text:"shortcuts.editing.drawing.focus_add_feature"},{shortcuts:["1","2","3"],text:"shortcuts.editing.drawing.add_favorite",separator:",",suffix:"…"},{shortcuts:["modes.add_note.key"],text:"shortcuts.editing.drawing.add_note"},{shortcuts:["Left-click","shortcuts.key.space"],text:"shortcuts.editing.drawing.place_point"},{shortcuts:["⌥"],text:"shortcuts.editing.drawing.disable_snap"},{shortcuts:["↵","⎋"],text:"shortcuts.editing.drawing.stop_line"},{section:"commands",text:"shortcuts.editing.commands.title"},{modifiers:["⌘"],shortcuts:["C"],text:"shortcuts.editing.commands.copy"},{modifiers:["⌘"],shortcuts:["V"],text:"shortcuts.editing.commands.paste"},{modifiers:["⌘"],shortcuts:["Z"],text:"shortcuts.editing.commands.undo"},{modifiers:["⌘","⇧"],shortcuts:["Z"],text:"shortcuts.editing.commands.redo"},{modifiers:["⌘"],shortcuts:["S"],text:"shortcuts.editing.commands.save"}]},{rows:[{section:"operations",text:"shortcuts.editing.operations.title"},{shortcuts:["operations.continue.key"],text:"shortcuts.editing.operations.continue_line"},{shortcuts:["operations.merge.key"],text:"shortcuts.editing.operations.merge"},{shortcuts:["operations.disconnect.key"],text:"shortcuts.editing.operations.disconnect"},{shortcuts:["operations.extract.key"],text:"shortcuts.editing.operations.extract"},{shortcuts:["operations.split.key"],text:"shortcuts.editing.operations.split"},{shortcuts:["operations.reverse.key"],text:"shortcuts.editing.operations.reverse"},{shortcuts:["operations.move.key"],text:"shortcuts.editing.operations.move"},{shortcuts:["operations.rotate.key"],text:"shortcuts.editing.operations.rotate"},{shortcuts:["operations.orthogonalize.key"],text:"shortcuts.editing.operations.orthogonalize"},{shortcuts:["operations.straighten.key"],text:"shortcuts.editing.operations.straighten"},{shortcuts:["operations.circularize.key"],text:"shortcuts.editing.operations.circularize"},{shortcuts:["operations.reflect.key.long"],text:"shortcuts.editing.operations.reflect_long"},{shortcuts:["operations.reflect.key.short"],text:"shortcuts.editing.operations.reflect_short"},{modifiers:["⌘"],shortcuts:["⌫"],text:"shortcuts.editing.operations.delete"}]}]},{tab:"tools",text:"shortcuts.tools.title",columns:[{rows:[{section:"info",text:"shortcuts.tools.info.title"},{modifiers:["⌘"],shortcuts:["info_panels.key"],text:"shortcuts.tools.info.all"},{modifiers:["⌘","⇧"],shortcuts:["info_panels.background.key"],text:"shortcuts.tools.info.background"},{modifiers:["⌘","⇧"],shortcuts:["info_panels.history.key"],text:"shortcuts.tools.info.history"},{modifiers:["⌘","⇧"],shortcuts:["info_panels.location.key"],text:"shortcuts.tools.info.location"},{modifiers:["⌘","⇧"],shortcuts:["info_panels.measurement.key"],text:"shortcuts.tools.info.measurement"}]}]}];
24676 var type$1 = "FeatureCollection";
24677 var features = [{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[1.97754,51.13111],[1.8457,63.45051],[-10.45898,57.01681],[-6.82251,55.26503],[-7.25583,55.06525],[-7.26546,55.0665],[-7.26992,55.06419],[-7.2725,55.06346],[-7.27818,55.05362],[-7.2893,55.04735],[-7.29939,55.0561],[-7.31835,55.04475],[-7.3447,55.05079],[-7.38831,55.02389],[-7.40547,55.00292],[-7.39157,54.99507],[-7.40075,54.98892],[-7.40706,54.98291],[-7.40363,54.97963],[-7.40633,54.97813],[-7.39835,54.97013],[-7.40745,54.96357],[-7.40178,54.95961],[-7.40727,54.95515],[-7.3944,54.94376],[-7.44444,54.93858],[-7.45216,54.89793],[-7.44204,54.87532],[-7.4713,54.83431],[-7.48092,54.83093],[-7.49216,54.82185],[-7.55121,54.79054],[-7.5443,54.78609],[-7.54958,54.75653],[-7.5349,54.74917],[-7.54881,54.74068],[-7.55941,54.74556],[-7.57894,54.74221],[-7.57507,54.7494],[-7.58606,54.75039],[-7.58872,54.74377],[-7.60031,54.74603],[-7.60632,54.74405],[-7.61662,54.74459],[-7.63593,54.75108],[-7.68854,54.72968],[-7.72064,54.72155],[-7.75094,54.70469],[-7.79094,54.71942],[-7.8051,54.71932],[-7.83497,54.73632],[-7.85419,54.72745],[-7.91496,54.67582],[-7.90174,54.66182],[-7.83832,54.63401],[-7.7433,54.6188],[-7.70863,54.63485],[-7.70682,54.6189],[-7.69386,54.6188],[-7.69631,54.61125],[-7.75845,54.59509],[-7.78708,54.58],[-7.79446,54.58141],[-7.79969,54.57704],[-7.79673,54.56915],[-7.8184,54.56315],[-7.83334,54.55227],[-7.82737,54.54299],[-7.85007,54.53363],[-7.90741,54.53722],[-7.93213,54.53388],[-8.00487,54.54568],[-8.03727,54.51162],[-8.04285,54.48759],[-8.08027,54.48829],[-8.09988,54.48395],[-8.09126,54.4765],[-8.111,54.47807],[-8.11512,54.46904],[-8.16542,54.46914],[-8.1776,54.46485],[-8.14293,54.45003],[-8.16284,54.4413],[-8.08731,54.4002],[-8.06062,54.37051],[-8.03289,54.35711],[-8.00054,54.34835],[-7.93333,54.30561],[-7.85849,54.29151],[-7.87067,54.28794],[-7.87265,54.26648],[-7.86123,54.25931],[-7.85917,54.21256],[-7.71043,54.20307],[-7.70193,54.20776],[-7.68828,54.202],[-7.67644,54.18906],[-7.66082,54.1871],[-7.62554,54.16545],[-7.62541,54.15319],[-7.61026,54.14353],[-7.57421,54.14142],[-7.57181,54.13287],[-7.56228,54.12704],[-7.51379,54.12998],[-7.47944,54.122],[-7.47169,54.12665],[-7.47075,54.13318],[-7.44684,54.15168],[-7.40792,54.156],[-7.42579,54.14092],[-7.41903,54.13629],[-7.3744,54.14172],[-7.37234,54.13881],[-7.39509,54.12624],[-7.39182,54.12017],[-7.36341,54.13157],[-7.34518,54.11577],[-7.32471,54.12123],[-7.32003,54.11379],[-7.3078,54.11718],[-7.30548,54.12347],[-7.31591,54.12697],[-7.31213,54.13162],[-7.3187,54.13411],[-7.31857,54.13745],[-7.32222,54.13836],[-7.32737,54.13544],[-7.3399,54.14585],[-7.30827,54.16716],[-7.30024,54.16625],[-7.29029,54.1715],[-7.28158,54.16839],[-7.2863,54.14919],[-7.29874,54.14904],[-7.30162,54.14411],[-7.28411,54.13971],[-7.29192,54.13071],[-7.29737,54.133],[-7.30883,54.13242],[-7.30333,54.12251],[-7.29218,54.11929],[-7.27844,54.12282],[-7.27707,54.12986],[-7.26613,54.13624],[-7.2566,54.16354],[-7.24015,54.17125],[-7.2575,54.17678],[-7.2581,54.19257],[-7.25179,54.19403],[-7.23608,54.1935],[-7.23338,54.19792],[-7.24317,54.20076],[-7.24892,54.1977],[-7.25183,54.20201],[-7.24119,54.20623],[-7.23094,54.20578],[-7.23269,54.20912],[-7.22188,54.21607],[-7.20643,54.2117],[-7.18506,54.22485],[-7.17055,54.21742],[-7.14721,54.22488],[-7.14633,54.23008],[-7.15051,54.23165],[-7.14613,54.23983],[-7.15802,54.24434],[-7.13985,54.25298],[-7.15255,54.26235],[-7.16064,54.27405],[-7.17991,54.27144],[-7.17201,54.28627],[-7.21252,54.2985],[-7.19888,54.31117],[-7.17918,54.30946],[-7.1812,54.3397],[-7.15339,54.33514],[-7.10253,54.35811],[-7.10811,54.36677],[-7.06927,54.3899],[-7.05593,54.41056],[-7.02898,54.42135],[-7.00198,54.40832],[-6.98683,54.40829],[-6.97562,54.40014],[-6.96774,54.40145],[-6.90682,54.36966],[-6.89772,54.35075],[-6.87527,54.33853],[-6.86512,54.32568],[-6.85163,54.29137],[-6.87452,54.28677],[-6.87791,54.27918],[-6.86673,54.27522],[-6.85177,54.26489],[-6.83693,54.26658],[-6.82165,54.24346],[-6.81633,54.22299],[-6.80045,54.22108],[-6.80122,54.21338],[-6.77599,54.19965],[-6.75573,54.1987],[-6.74316,54.18258],[-6.73406,54.18566],[-6.72445,54.18127],[-6.70295,54.20036],[-6.69166,54.20018],[-6.68673,54.19398],[-6.669,54.19584],[-6.65248,54.18102],[-6.6433,54.17801],[-6.63467,54.16449],[-6.63179,54.14766],[-6.64081,54.14238],[-6.63935,54.13599],[-6.66149,54.1205],[-6.6481,54.10153],[-6.66119,54.0934],[-6.66458,54.06629],[-6.64681,54.05873],[-6.62501,54.03737],[-6.59291,54.04755],[-6.58905,54.05808],[-6.5597,54.0481],[-6.52897,54.05888],[-6.50442,54.05566],[-6.47824,54.07004],[-6.47919,54.07762],[-6.43601,54.05959],[-6.36314,54.07057],[-6.36589,54.09338],[-6.36293,54.09758],[-6.37104,54.11497],[-6.3522,54.11084],[-6.34242,54.1114],[-6.33589,54.10833],[-6.33636,54.09469],[-6.31808,54.09096],[-6.30903,54.10463],[-6.29165,54.11235],[-6.28246,54.11145],[-6.26272,54.09786],[-5.35583,53.72597],[-7.0752,49.23912],[-1.83472,49.02346],[-2.12036,49.94415],[1.97754,51.13111]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-65.2,18.7],[-65,16.3],[-63.7,19.2],[-65.2,18.7]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-63,-50.5],[-55,-51],[-60,-54],[-63,-50.5]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-139.19952,60.08402],[-141,60.30621],[-141,76],[-169,68.63655],[-169,65.20147],[-180,61],[-180,-4],[-154,9],[-133.76404,54.54021],[-130.73868,54.71986],[-129.96277,55.29163],[-130.15228,55.7758],[-130.01787,55.90688],[-130.00362,56.00798],[-130.10284,56.12336],[-130.24498,56.09656],[-130.42625,56.14249],[-131.87439,56.79787],[-135.02884,59.56285],[-135.11759,59.62306],[-135.15827,59.6261],[-135.47928,59.79822],[-136.28677,59.57955],[-136.30531,59.46462],[-136.36836,59.44898],[-136.47697,59.46558],[-137.19727,59.01935],[-139.19952,60.08402]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-111.96064,48.99841],[-121.22623,49.00049],[-122.26513,49.00246],[-122.7565,49.00208],[-123.32218,49.00218],[-122.97821,48.76524],[-123.2666,48.69821],[-123.21991,48.21186],[-125.80444,48.60749],[-124.32129,31.54109],[-117.125,32.53429],[-116.82417,32.55996],[-115.88036,32.63735],[-115.49738,32.66486],[-114.71984,32.71877],[-114.7649,32.64602],[-114.80885,32.60959],[-114.81481,32.49451],[-112.81743,31.88004],[-111.07481,31.33224],[-109.56051,31.33402],[-108.20847,31.33384],[-108.20838,31.78363],[-106.52847,31.78391],[-106.52781,31.78086],[-106.52249,31.77501],[-106.51249,31.76933],[-106.50988,31.7612],[-106.50709,31.76123],[-106.48896,31.74806],[-106.48473,31.74769],[-106.4719,31.75101],[-106.46816,31.75897],[-106.45434,31.76466],[-106.45035,31.76426],[-106.43516,31.75492],[-106.41484,31.75101],[-106.37864,31.73021],[-106.37225,31.71174],[-106.34924,31.69633],[-106.33289,31.66178],[-106.3068,31.62459],[-106.28079,31.56179],[-106.24775,31.54226],[-106.2329,31.49982],[-106.2105,31.46857],[-106.08201,31.39863],[-106.00554,31.39233],[-105.76401,31.17051],[-105.58548,31.06117],[-105.56419,30.98526],[-104.99153,30.6639],[-104.97162,30.60896],[-104.90639,30.57822],[-104.83772,30.38117],[-104.70177,30.20567],[-104.68048,29.92399],[-104.57611,29.77838],[-104.51157,29.63674],[-104.39758,29.57047],[-104.39278,29.55293],[-104.05769,29.32173],[-103.79883,29.2581],[-103.78196,29.26555],[-103.76759,29.22799],[-103.14102,28.93666],[-102.86087,29.2217],[-102.65076,29.79418],[-101.41068,29.73457],[-101.26511,29.51372],[-101.05997,29.452],[-101.04083,29.38038],[-100.96303,29.34735],[-100.94406,29.34369],[-100.94071,29.33351],[-100.92775,29.32663],[-100.89814,29.30957],[-100.87818,29.28086],[-100.80076,29.2238],[-100.76437,29.15981],[-100.67047,29.08663],[-100.6412,28.91299],[-100.63236,28.90255],[-100.61296,28.89939],[-100.534,28.75622],[-100.51495,28.74531],[-100.50705,28.7143],[-100.51203,28.70666],[-100.51014,28.69127],[-100.50048,28.66186],[-100.45547,28.6381],[-100.44697,28.60743],[-100.35599,28.45239],[-100.34946,28.39653],[-100.29488,28.31315],[-100.29591,28.27324],[-100.17197,28.17493],[-99.93645,27.9568],[-99.87722,27.80173],[-99.79671,27.73338],[-99.772,27.72532],[-99.74556,27.69979],[-99.71947,27.65981],[-99.5957,27.59974],[-99.54094,27.60537],[-99.53055,27.57973],[-99.52034,27.55782],[-99.52802,27.49773],[-99.50141,27.49986],[-99.48755,27.49518],[-99.47897,27.48421],[-99.48661,27.46453],[-99.49534,27.44861],[-99.48927,27.40941],[-99.53957,27.31565],[-99.43588,27.19678],[-99.46404,27.01968],[-99.16698,26.56039],[-99.17474,26.53939],[-99.12698,26.51958],[-99.1135,26.42954],[-99.08355,26.39625],[-99.06007,26.39737],[-99.03634,26.41255],[-99.02042,26.40598],[-99.01291,26.39364],[-98.95686,26.38641],[-98.9566,26.37365],[-98.94523,26.36949],[-98.90013,26.36419],[-98.89905,26.35454],[-98.80305,26.36626],[-98.78254,26.30511],[-98.66667,26.23457],[-98.58496,26.24647],[-98.57951,26.23434],[-98.56519,26.23987],[-98.56294,26.22464],[-98.50599,26.20858],[-98.44806,26.21236],[-98.38617,26.15721],[-98.34176,26.15278],[-98.33579,26.1388],[-98.30626,26.10003],[-98.28841,26.10512],[-98.26524,26.0914],[-98.19898,26.06411],[-98.09577,26.05698],[-98.07568,26.06667],[-98.08302,26.03396],[-97.9771,26.04136],[-97.9532,26.06179],[-97.81643,26.04475],[-97.77017,26.02439],[-97.73884,26.02902],[-97.5289,25.90648],[-97.52151,25.88625],[-97.50615,25.89031],[-97.49851,25.89903],[-97.49637,25.89641],[-97.49748,25.88008],[-97.49422,25.87981],[-97.48847,25.88564],[-97.46409,25.88174],[-97.42607,25.842],[-97.36856,25.8396],[-97.26231,25.94724],[-80.81543,24.00633],[-66.87378,44.77794],[-67.16148,45.16715],[-67.2286,45.16739],[-67.26246,45.18797],[-67.28311,45.19175],[-67.28959,45.18784],[-67.29332,45.17568],[-67.29049,45.17317],[-67.3001,45.16776],[-67.3025,45.16122],[-67.29761,45.14766],[-67.33975,45.1255],[-67.40524,45.16122],[-67.40387,45.17139],[-67.4818,45.27682],[-67.42172,45.38543],[-67.45262,45.41008],[-67.50498,45.4889],[-67.41623,45.50105],[-67.42219,45.55661],[-67.42902,45.56833],[-67.42331,45.57154],[-67.42498,45.57836],[-67.45193,45.60323],[-67.77981,45.6738],[-67.79019,47.06776],[-67.88006,47.1067],[-67.91319,47.14793],[-67.92598,47.15418],[-67.95181,47.1875],[-68.02374,47.23915],[-68.13017,47.29309],[-68.17669,47.32893],[-68.24046,47.35354],[-68.32809,47.36005],[-68.36363,47.35476],[-68.38054,47.34167],[-68.38509,47.30321],[-68.37367,47.28796],[-68.4377,47.28232],[-68.47916,47.29623],[-68.51074,47.29885],[-68.54593,47.28441],[-68.58408,47.28482],[-68.59777,47.27134],[-68.59271,47.25762],[-68.61889,47.24148],[-68.68936,47.24125],[-68.71768,47.23676],[-68.80128,47.21423],[-68.89629,47.17676],[-69.05354,47.24847],[-69.04924,47.41798],[-69.22425,47.45961],[-69.99729,46.69558],[-70.0569,46.4149],[-70.25551,46.10871],[-70.29001,46.09431],[-70.39919,45.80667],[-70.83229,45.40062],[-70.80794,45.37878],[-70.82663,45.2367],[-70.87538,45.23453],[-70.92138,45.28099],[-70.90645,45.30918],[-71.0109,45.34798],[-71.08429,45.30556],[-71.1454,45.24226],[-71.20525,45.25278],[-71.28925,45.30097],[-71.41405,45.23513],[-71.43044,45.12381],[-71.49692,45.06991],[-71.50623,45.04878],[-71.49284,45.03629],[-71.50027,45.01372],[-71.79359,45.01075],[-72.08774,45.00581],[-72.14155,45.00568],[-72.15282,45.00609],[-72.17142,45.00584],[-72.25847,45.00436],[-72.38795,45.00626],[-72.4496,45.00863],[-72.5356,45.00936],[-72.66257,45.01523],[-72.82537,45.01642],[-73.08466,45.01561],[-73.45219,45.00875],[-74.14699,44.99145],[-74.33753,44.9923],[-74.50786,44.99798],[-74.66158,44.99949],[-74.71244,44.99734],[-74.75887,44.98708],[-74.76368,45.00632],[-74.78977,45.00365],[-74.82376,45.01773],[-74.94186,44.98229],[-75.30098,44.83883],[-75.30304,44.82836],[-75.59418,44.6457],[-75.97269,44.33502],[-75.97295,44.34595],[-76.00059,44.34797],[-76.17645,44.2865],[-76.18744,44.22158],[-76.88782,43.82759],[-79.16851,43.32168],[-79.05487,43.25371],[-79.05092,43.169],[-79.04603,43.16093],[-79.04208,43.13942],[-79.07002,43.12038],[-79.06015,43.114],[-79.0568,43.10474],[-79.0774,43.07861],[-78.9996,43.05484],[-79.02311,43.02071],[-79.02552,42.99473],[-78.96235,42.9573],[-78.91188,42.9426],[-78.90398,42.89181],[-82.42767,41.47978],[-83.14316,42.03807],[-83.12805,42.23843],[-83.09715,42.29052],[-83.07252,42.31515],[-82.94575,42.34332],[-82.59676,42.5479],[-82.51368,42.61785],[-82.5108,42.66464],[-82.4675,42.76415],[-82.48055,42.80573],[-82.45497,42.9284],[-82.41334,42.97099],[-82.42596,42.99536],[-82.15851,43.39507],[-83.53729,46.098],[-83.96301,46.05036],[-84.11021,46.23851],[-84.09794,46.25656],[-84.11613,46.26878],[-84.11905,46.31516],[-84.10721,46.3218],[-84.14394,46.41076],[-84.11682,46.51576],[-84.13536,46.53218],[-84.16162,46.5284],[-84.21621,46.53891],[-84.26994,46.49189],[-84.36092,46.50997],[-84.55284,46.4407],[-84.95178,46.77185],[-89.59179,48.00307],[-89.67547,48.00371],[-90.87204,48.25943],[-91.41312,48.06753],[-92.99377,48.62474],[-93.34877,48.62604],[-93.35529,48.61124],[-93.37074,48.60584],[-93.39812,48.60369],[-93.40542,48.61089],[-93.43846,48.59478],[-93.46859,48.59205],[-93.45735,48.56667],[-93.46533,48.54593],[-93.64763,48.51751],[-93.80625,48.51888],[-93.80642,48.58047],[-93.83328,48.62582],[-93.84865,48.63064],[-93.93388,48.6326],[-94.01327,48.64471],[-94.16176,48.64697],[-94.25025,48.65463],[-94.24931,48.67827],[-94.26046,48.69816],[-94.30578,48.71073],[-94.32758,48.70433],[-94.36123,48.70478],[-94.38406,48.71135],[-94.41629,48.71067],[-94.44294,48.69266],[-94.53615,48.7024],[-94.55031,48.71419],[-94.58894,48.71928],[-94.69425,48.77938],[-94.70129,48.83376],[-94.68996,48.83953],[-94.68395,48.99914],[-111.96064,48.99841]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[180,55],[170,53],[180,49],[180,55]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[143,22],[147,22],[147,12],[143,12],[143,22]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-171.5,-10],[-171,-15],[-167,-15],[-171.5,-10]]]}}];
24678 var dataImperial = {
24683 var type$2 = "FeatureCollection";
24684 var features$1 = [{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[113.573,22.186],[114,22.5],[114.05534,22.503],[114.0595,22.51422],[114.07345,22.51934],[114.0786,22.53012],[114.08512,22.53228],[114.09034,22.53717],[114.09611,22.53486],[114.10602,22.53472],[114.1115,22.52929],[114.11522,22.5308],[114.11649,22.53418],[114.11979,22.53511],[114.1244,22.5393],[114.12729,22.53947],[114.13018,22.54132],[114.13807,22.5432],[114.14429,22.54176],[114.14441,22.54114],[114.14846,22.54179],[114.14855,22.54397],[114.15042,22.54593],[114.14964,22.54954],[114.15166,22.55168],[114.15192,22.55438],[114.15642,22.55495],[114.15841,22.55909],[114.16032,22.56153],[114.16162,22.56187],[114.1634,22.55931],[114.16553,22.5593],[114.16733,22.56119],[114.16934,22.56093],[114.17061,22.5597],[114.17702,22.56],[114.17798,22.55546],[114.18401,22.5552],[114.18673,22.55468],[114.1878,22.55545],[114.18979,22.55446],[114.1955,22.55564],[114.19674,22.55691],[114.20005,22.55717],[114.20376,22.55623],[114.20884,22.55672],[114.22438,22.55055],[114.2264,22.5476],[114.22545,22.54528],[114.22661,22.54339],[114.32,22.576],[114.45,22.43],[114.45,22.14],[113.9,22.14],[113.75,22.22],[113.553,22.095],[113.54678,22.1207],[113.5456,22.1207],[113.54076,22.12373],[113.54016,22.13618],[113.54701,22.13651],[113.5475,22.14583],[113.52456,22.17978],[113.53623,22.20191],[113.53299,22.21232],[113.53497,22.21351],[113.53735,22.21377],[113.54156,22.21315],[113.54385,22.21709],[113.55849,22.21565],[113.573,22.186]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-75,18],[-80,20.5],[-83,19],[-77,16],[-75,18]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-64.33594,32.86113],[-79.39819,27.21067],[-80.63965,23.71998],[-73.39966,20.40642],[-65.1709,19.20743],[-65.09399,16.23577],[-59.13391,16.80454],[-62.64404,15.16228],[-59.43054,14.85985],[-62.83081,13.64599],[-61.80359,10.73752],[-62.08649,10.04729],[-61.06201,9.85522],[-59.81369,8.31274],[-59.8027,8.27469],[-59.83498,8.22712],[-59.94141,8.21149],[-59.99771,8.15576],[-59.97986,8.13265],[-59.99771,8.12041],[-60.00183,8.07147],[-60.05127,8.02524],[-60.09933,8.03747],[-60.12268,8.02388],[-60.14053,7.98988],[-60.36163,7.83345],[-60.53467,7.81713],[-60.5896,7.6375],[-60.72144,7.54493],[-60.5896,7.31888],[-60.63904,7.24532],[-60.54703,7.12542],[-60.46875,7.20309],[-60.37262,7.18401],[-60.29984,7.1445],[-60.2916,7.06819],[-60.39871,6.95097],[-60.66513,6.83235],[-60.71869,6.75053],[-60.91232,6.81735],[-60.94254,6.72053],[-61.14441,6.72326],[-61.23093,6.5773],[-61.1554,6.45314],[-61.14441,6.20199],[-61.39709,5.95619],[-60.71045,5.20036],[-60.21606,5.23319],[-59.99634,5.06906],[-60.13916,4.51071],[-59.69971,4.40118],[-59.5459,3.93002],[-59.87549,3.56825],[-59.7876,3.37086],[-60.01831,2.83332],[-59.90845,2.38335],[-59.69971,2.2626],[-59.77661,1.87833],[-59.65302,1.85087],[-59.69147,1.75754],[-59.61456,1.71361],[-59.55139,1.73283],[-59.36188,1.49123],[-59.26575,1.39238],[-58.92242,1.30726],[-58.83728,1.17271],[-58.71918,1.23037],[-58.71094,1.29902],[-58.49121,1.26058],[-58.461,1.37591],[-58.50494,1.38689],[-58.51044,1.46102],[-58.38135,1.4775],[-58.32642,1.57359],[-58.00507,1.49946],[-57.99133,1.65321],[-57.79907,1.69165],[-57.70844,1.71087],[-57.54364,1.68341],[-57.41455,1.94421],[-57.10693,1.97715],[-56.8103,1.85636],[-56.48071,1.92225],[-55.90942,1.81244],[-55.90942,2.04302],[-56.14014,2.26534],[-55.94788,2.53701],[-55.70892,2.39981],[-55.37933,2.43274],[-55.19257,2.53976],[-54.98108,2.57268],[-54.88495,2.43548],[-54.71191,2.46293],[-54.69543,2.34767],[-54.58832,2.32846],[-54.43451,2.43548],[-54.20654,2.76748],[-54.17358,3.12955],[-53.96484,3.57921],[-54.33838,4.00674],[-54.44412,4.52577],[-54.46884,4.91036],[-54.36653,5.13061],[-54.27727,5.26191],[-54.19968,5.3084],[-54.01222,5.54457],[-54.0239,5.64605],[-53.86322,5.94936],[-64.33594,32.86113]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-14.5,-6],[11.79657,-17.27197],[12.03415,-17.14866],[12.38159,-17.22213],[12.58484,-17.22476],[13.01193,-16.97405],[13.24951,-17.00098],[13.38135,-16.98522],[13.93341,-17.38734],[18.42476,-17.38996],[18.47763,-17.46857],[18.62663,-17.64599],[18.79211,-17.76177],[18.92944,-17.82061],[19.33044,-17.84806],[19.66278,-17.8644],[19.74792,-17.90557],[19.85161,-17.87486],[20.10361,-17.90296],[20.18394,-17.88401],[20.34737,-17.88466],[20.44693,-17.91733],[20.51697,-17.96698],[20.83008,-18.03032],[20.95711,-17.97285],[21.16997,-17.93497],[21.42677,-18.0264],[23.45032,-17.63879],[22.00012,-16.38866],[21.99944,-13.00523],[24.03809,-12.99118],[24.03809,-10.91962],[24.43359,-11.09217],[24.45557,-11.48002],[25.37842,-11.19996],[25.42236,-11.60919],[26.96045,-11.97484],[27.18018,-11.60919],[28.125,-12.42048],[29.11377,-13.36824],[29.1687,-13.43771],[29.55872,-13.19716],[29.68506,-13.2239],[29.62463,-13.41099],[29.80591,-13.44305],[29.81415,-12.14809],[29.31152,-12.55456],[28.41064,-11.78133],[28.63037,-10.70379],[28.65234,-9.73071],[28.37219,-9.24309],[28.89748,-8.47916],[30.78644,-8.26857],[29.39941,-6.05316],[29.4873,-4.45595],[29.75922,-4.46759],[29.81415,-4.36421],[29.88007,-4.36832],[30.04074,-4.26699],[30.07919,-4.1629],[30.18356,-4.08311],[30.1918,-4.05126],[30.21566,-4.04595],[30.22923,-4.01136],[30.21326,-3.99612],[30.25978,-3.88755],[30.29274,-3.86288],[30.34424,-3.77245],[30.39848,-3.79095],[30.40878,-3.76765],[30.39548,-3.7304],[30.39054,-3.72821],[30.3896,-3.71918],[30.39093,-3.7101],[30.39514,-3.70444],[30.42028,-3.64963],[30.46886,-3.53501],[30.67108,-3.41335],[30.63297,-3.34892],[30.84206,-3.25535],[30.84549,-3.16108],[30.83485,-3.09698],[30.7933,-3.06235],[30.82111,-3.02258],[30.84515,-2.9739],[30.74764,-2.99618],[30.7037,-2.97013],[30.66422,-2.98967],[30.57632,-2.90738],[30.49393,-2.94441],[30.41016,-2.87172],[30.52002,-2.39432],[30.77545,-2.38883],[30.8606,-2.31199],[30.84961,-2.19398],[30.89081,-2.07322],[30.81116,-1.96068],[30.83862,-1.6587],[30.73425,-1.4418],[30.56259,-1.33884],[30.4541,-1.05737],[30.35797,-1.06287],[30.34149,-1.13152],[30.16571,-1.34296],[29.91852,-1.48024],[29.83887,-1.31824],[29.58344,-1.39238],[29.729,0.05493],[29.96796,0.5136],[29.9707,0.8569],[30.22339,0.92281],[30.24536,1.15349],[30.47745,1.20772],[31.30966,2.15693],[31.20255,2.22211],[31.20255,2.29278],[31.16409,2.27906],[31.13937,2.28318],[31.13113,2.26534],[31.07826,2.30033],[31.0714,2.34767],[31.00479,2.4005],[30.97183,2.40461],[30.94711,2.38746],[30.94849,2.36276],[30.9375,2.33532],[30.88531,2.34012],[30.83038,2.42176],[30.74112,2.43274],[30.76035,2.5864],[30.90179,2.88132],[30.76447,3.04178],[30.93613,3.40239],[30.94059,3.50588],[30.85236,3.48601],[30.90866,3.5936],[30.95055,3.63918],[30.94677,3.65391],[30.9866,3.70187],[31.00582,3.70701],[31.02058,3.69708],[31.16547,3.7954],[31.28838,3.79643],[31.52699,3.66282],[31.7038,3.72449],[31.82671,3.82794],[31.96198,3.65596],[31.95854,3.57099],[32.04987,3.59155],[32.07733,3.57099],[32.0842,3.53672],[32.20093,3.50657],[32.21672,3.56448],[32.19578,3.59977],[32.41516,3.74504],[32.72055,3.76782],[32.89307,3.81219],[33.02782,3.89371],[33.18146,3.7793],[33.51173,3.75258],[33.98758,4.23309],[34.05762,4.28342],[34.38721,4.61065],[35.94452,4.62023],[35.95688,4.53467],[36.04134,4.44568],[36.89621,4.4491],[38.14728,3.62992],[38.55927,3.62033],[38.92181,3.51068],[39.56039,3.43392],[39.87076,3.87522],[40.76752,4.28753],[41.16371,3.94372],[41.89774,3.97797],[41.31271,3.14463],[40.98896,2.82869],[40.99548,-0.84042],[41.7,-1.8],[41.7,-49],[-27,-60],[-65.7,-52.5],[-14.5,-6]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[31.33301,35.47856],[33.0249,33.75175],[35.44189,36.02245],[31.33301,35.47856]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[14,36.5],[15,36],[14,35],[14,36.5]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[0,62],[2.5,51.3],[-2,50],[-1.9,49],[-20,53],[0,62]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[180,-35],[161,-19],[167,-12],[180,-22],[180,4],[170,3.7],[127,5.7],[118,2.7],[119.5,5.4],[117.2,7.5],[102.6,8],[102.9158,11.74099],[102.76268,12.07357],[102.70226,12.17158],[102.74139,12.46474],[102.53128,12.68857],[102.49557,12.9256],[102.49763,13.0064],[102.4597,13.08199],[102.43412,13.09026],[102.39155,13.16407],[102.35481,13.29341],[102.35893,13.30945],[102.34503,13.34837],[102.35928,13.39797],[102.3567,13.48095],[102.36168,13.50582],[102.33559,13.53787],[102.33971,13.56023],[102.35498,13.5649],[102.36511,13.5785],[102.40047,13.5679],[102.42537,13.56891],[102.44614,13.56123],[102.48047,13.57091],[102.53849,13.56757],[102.5699,13.58526],[102.57806,13.60486],[102.62501,13.60845],[102.62132,13.61295],[102.60767,13.61562],[102.57231,13.63331],[102.56922,13.64082],[102.54879,13.658],[102.56252,13.68552],[102.5972,13.70803],[102.67084,13.74472],[102.68818,13.75172],[102.7014,13.7684],[102.73161,13.77082],[102.76543,13.85541],[102.78397,13.93207],[102.80388,13.94406],[102.81607,13.96639],[102.90705,14.02119],[102.89726,14.0535],[102.90095,14.0838],[102.92421,14.10744],[102.92378,14.12838],[102.94147,14.15035],[102.92953,14.17952],[103.17535,14.33774],[103.19939,14.32992],[103.68553,14.44],[103.94508,14.34157],[104.05756,14.34589],[104.06636,14.3419],[104.26025,14.37749],[104.50058,14.36984],[104.57817,14.36019],[104.6422,14.42387],[104.66632,14.40234],[104.68357,14.39877],[104.71138,14.43169],[104.72305,14.42188],[104.71687,14.40043],[104.75344,14.40459],[104.80408,14.43867],[104.83429,14.41573],[104.99239,14.3838],[105.05402,14.19783],[105.47905,14.49186],[105.60883,15.0005],[105.46703,15.13005],[105.48866,15.20237],[105.59269,15.2716],[105.58617,15.32823],[105.50308,15.31912],[105.46703,15.33948],[105.49175,15.37921],[105.59372,15.42869],[105.59372,15.50927],[105.60986,15.54871],[105.62616,15.56492],[105.62702,15.59129],[105.63518,15.62742],[105.63612,15.66056],[105.5975,15.72088],[105.49965,15.76681],[105.46291,15.74517],[105.43819,15.75459],[105.40489,15.79424],[105.34241,15.92039],[105.37811,15.98344],[105.39167,15.99136],[105.41931,15.98608],[105.42652,15.99764],[105.41468,16.01661],[105.21263,16.05076],[105.04955,16.10552],[105.01316,16.24401],[104.88235,16.37812],[104.8391,16.45782],[104.77936,16.49041],[104.73919,16.53287],[104.74228,16.62205],[104.76391,16.70953],[104.73953,16.80323],[104.76425,16.85088],[104.73782,16.90968],[104.744,17.0128],[104.81266,17.21853],[104.79841,17.39274],[104.70348,17.52833],[104.46384,17.65515],[104.34368,17.83564],[104.27776,17.8559],[104.22661,17.98069],[104.1116,18.10735],[104.06525,18.21174],[103.97392,18.33823],[103.9286,18.33237],[103.88809,18.29456],[103.85582,18.28673],[103.83659,18.32715],[103.79128,18.3467],[103.70201,18.34214],[103.60931,18.40405],[103.57292,18.40437],[103.51593,18.42978],[103.45963,18.42587],[103.41568,18.44802],[103.30479,18.43206],[103.24265,18.37082],[103.24333,18.34133],[103.29123,18.32357],[103.28899,18.29521],[103.23595,18.28299],[103.16608,18.25511],[103.02429,17.98135],[102.6535,17.83237],[102.40631,17.99963],[102.10968,18.22413],[101.548,17.81538],[101.30493,17.64991],[101.14563,17.46595],[100.95886,17.61654],[101.01757,17.88858],[101.18752,18.05121],[101.16863,18.10409],[101.18134,18.33595],[101.08727,18.38287],[101.05499,18.43988],[101.23215,18.73015],[101.35265,19.04524],[101.25927,19.12733],[101.2373,19.32637],[101.25824,19.58438],[101.11954,19.56836],[101.08898,19.58777],[101.08624,19.59715],[101.03165,19.6185],[100.89844,19.62125],[100.77827,19.49249],[100.63751,19.56432],[100.58258,19.49313],[100.47478,19.5944],[100.42929,19.67152],[100.43341,19.7024],[100.4147,19.7255],[100.40525,19.7646],[100.43907,19.80345],[100.45555,19.84843],[100.50636,19.87264],[100.51709,19.93027],[100.58653,20.1599],[100.56576,20.1757],[100.54945,20.17473],[100.52731,20.14379],[100.51065,20.14895],[100.48697,20.17956],[100.46774,20.196],[100.45246,20.20147],[100.45521,20.22129],[100.44783,20.23546],[100.41607,20.25286],[100.40594,20.28184],[100.38397,20.31082],[100.37556,20.35187],[100.36165,20.35638],[100.35736,20.37408],[100.33195,20.39902],[100.27805,20.40224],[100.25917,20.39677],[100.2475,20.37263],[100.22535,20.35509],[100.22346,20.31839],[100.16579,20.29988],[100.17162,20.24545],[100.10845,20.25221],[100.09266,20.2696],[100.09798,20.31485],[100.07961,20.3678],[99.9567,20.46417],[99.91636,20.44925],[99.90765,20.44977],[99.89121,20.44511],[99.87276,20.44406],[99.86212,20.44326],[99.80186,20.33948],[99.46472,20.3884],[99.56085,20.20035],[99.43691,20.08882],[99.27727,20.11623],[99.06921,20.1101],[98.97789,19.74538],[98.24387,19.68656],[97.85934,19.57014],[97.76733,18.57336],[97.39655,18.47179],[97.62451,18.30238],[97.73849,17.97743],[97.66502,17.87943],[97.90947,17.56745],[98.52951,16.82557],[98.51303,16.69276],[98.69293,16.26873],[98.87421,16.43609],[98.93394,16.3353],[98.84743,16.13356],[98.74512,16.12037],[98.58307,16.07287],[98.5762,15.79754],[98.54736,15.37557],[98.17383,15.15167],[98.3606,14.63674],[99.08295,13.89208],[99.16534,13.72204],[99.18182,13.00723],[99.39331,12.56797],[99.64153,11.78973],[99.32156,11.30266],[98.77859,10.67849],[98.80597,10.47642],[98.76657,10.40459],[98.74924,10.34194],[96.85547,6.40265],[92.42523,20.54794],[92.2728,20.96272],[92.187,21.16],[92.26,21.36],[92.27,21.4328],[92.62,21.43],[92.6,22],[93.22,22.25],[93.4,23.7],[93.34,23.95],[94.155,23.847],[94.17,23.92],[94.25171,24.07405],[94.28,24.23],[94.30175,24.2371],[94.3256,24.2731],[94.6,24.7],[94.78,25.47],[95.2,26],[95.1,26.6],[97.3,27.9],[96.14,29.38],[95.4,29.1],[94.8,29.2],[92.5,27.8],[91.64,27.76],[91.4,28],[89.58,28.18],[88.9,27.32],[88.74,27.47],[88.9,27.86],[88.7,28.1],[88.1,27.87],[85.93,27.942],[81.6,30.5],[81.2,30],[78.73,31.5],[78.77,31.99],[78.4,32.5],[79.3,32.5],[79,34.3],[78.3,34.6],[78,35.5],[76.1,35.8],[76,36.55],[75.15,37],[72.5,36.9],[71.1,36.1],[71.65,35.44],[71.45,35],[70.985,34.54],[71.18,34.36],[71.092,34.118],[70.88,33.97],[70.5,33.94],[69.908,34.04],[69.869,33.96],[70,33.75],[70.13,33.73],[70.34,33.34],[70.013,33.14],[69.57,33.09],[69.24,32.45],[69.3,31.9],[68.1,31.6],[66.393,30.934],[66.2,29.8],[62.5,29.4],[60.87,29.86],[61.53,29.0165],[61.66,28.77],[61.96,28.54],[62.43,28.42],[62.6,28.25],[62.795,28.28],[62.86,27.25],[63.24,27.25],[63.327,27.13],[63.25,27.1],[63.25,26.84],[63.18,26.83],[63.18,26.65],[62.3,26.5],[62.2,26.28],[61.85,26.22],[61.84,25.75],[61.68,25.67],[56.5,-21],[180,-65],[180,-35]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[138.7,46.7],[145.5,44.5],[145.2,43.7],[146,43.3],[142,18],[122,24.3],[138.7,46.7]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-180,7],[-148,7],[-151,-12],[-171.5,-10.75],[-171,-16],[-152,-19],[-180,-55],[-180,7]]]}}];
24685 var dataDriveLeft = {
24687 features: features$1
24690 var en = {icons:{download:"download",information:"info",remove:"remove",undo:"undo",zoom_to:"zoom to",copy:"copy",open_wikidata:"open on wikidata.org",favorite:"favorite"},toolbar:{inspect:"Inspect",undo_redo:"Undo / Redo",recent:"Recent",favorites:"Favorites",add_feature:"Add Feature"},modes:{add_feature:{title:"Add a feature",description:"Search for features to add to the map.",key:"Tab",result:"{count} result",results:"{count} results"},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.",filter_tooltip:"areas"},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.",filter_tooltip:"lines"},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.",filter_tooltip:"points"},add_note:{title:"Note",label:"Add Note",description:"Spotted an issue? Let other mappers know.",tail:"Click on the map to add a note.",key:"N"},add_preset:{title:"Add {feature}",point:{title:"Add {feature} as a point"},line:{title:"Add {feature} as a line"},area:{title:"Add {feature} as an area"},building:{title:"Add {feature} as a building"}},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."},drag_node:{connected_to_hidden:"This can't be edited because it is connected to a hidden feature."}},operations:{add:{annotation:{point:"Added a point.",vertex:"Added a node to a way.",relation:"Added a relation.",note:"Added a note."}},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.",not_downloaded:"This can't be made circular because parts of it have not yet been downloaded."},orthogonalize:{title:"Square",description:{vertex:"Square this corner.",line:"Square the corners of this line.",area:"Square the corners of this area."},key:"Q",annotation:{vertex:"Squared a single corner.",line:"Squared the corners of a line.",area:"Squared the corners of an area."},end_vertex:"This can't be squared because it is an end node.",square_enough:"This can't be made more square than it already is.",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.",not_downloaded:"This can't be made square because parts of it have not yet been downloaded."},straighten:{title:"Straighten",description:{points:"Straighten these points.",line:"Straighten this line."},key:"S",annotation:{points:"Straightened several points.",line:"Straightened a line."},too_bendy:"This can't be straightened because it bends too much.",connected_to_hidden:"This can't be straightened because it is connected to a hidden feature.",not_downloaded:"This can't be straightened because parts of it have not yet been downloaded."},"delete":{title:"Delete",description:{single:"Delete this feature permanently.",multiple:"Delete these features 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} features."},too_large:{single:"This feature can't be deleted because not enough of it is currently visible.",multiple:"These features can't be deleted because not enough of them are currently visible."},incomplete_relation:{single:"This feature can't be deleted because it hasn't been fully downloaded.",multiple:"These features can't be deleted because they haven't been fully downloaded."},part_of_relation:{single:"This feature can't be deleted because it is part of a larger relation. You must remove it from the relation first.",multiple:"These features can't be deleted because they are part of larger relations. You must remove them from the relations first."},connected_to_hidden:{single:"This feature can't be deleted because it is connected to a hidden feature.",multiple:"These features can't be deleted because some are connected to hidden features."},not_downloaded:{single:"This feature can't be deleted because parts of it have not yet been downloaded.",multiple:"These features can't be deleted because parts of them have not yet been downloaded."},has_wikidata_tag:{single:"This feature can't be deleted because it has a Wikidata tag.",multiple:"These features can't be deleted because some have Wikidata tags."}},downgrade:{title:"Downgrade",description:{building_address:"Remove all non-address and non-building tags.",building:"Remove all non-building tags.",address:"Remove all non-address tags."},annotation:{building:{single:"Downgraded a feature to a basic building.",multiple:"Downgraded {n} features to basic buildings."},address:{single:"Downgraded a feature to an address.",multiple:"Downgraded {n} features to addresses."},multiple:"Downgraded {n} features."},has_wikidata_tag:{single:"This feature can't be downgraded because it has a Wikidata tag.",multiple:"These features can't be downgraded because some have Wikidata tags."}},add_member:{annotation:"Added a member to a relation."},delete_member:{annotation:"Removed a member from a relation."},reorder_members:{annotation:"Reordered a relation's members."},connect:{annotation:{from_vertex:{to_point:"Connected a way to a point.",to_vertex:"Connected a way to another.",to_line:"Connected a way to a line.",to_area:"Connected a way to an area.",to_adjacent_vertex:"Merged adjacent points in a way.",to_sibling_vertex:"Connected a way to itself."},from_point:{to_point:"Merged a point with another.",to_vertex:"Merged a point with a point in a way.",to_line:"Moved a point to a line.",to_area:"Moved a point to an area."}},relation:"These features can't be connected because they have conflicting relation roles.",restriction:"These features can't be connected because it would damage a \"{relation}\" relation."},disconnect:{title:"Disconnect",description:"Disconnect these lines/areas from each other.",line:{description:"Disconnect this line from other features."},area:{description:"Disconnect this area from other features."},key:"D",annotation:"Disconnected lines/areas.",too_large:{single:"This can't be disconnected because not enough of it is currently visible."},not_connected:"There aren't enough lines/areas here to disconnect.",not_downloaded:"This can't be disconnected because parts of it have not yet been downloaded.",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 their endpoints aren't connected.",restriction:"These features can't be merged because it would damage a \"{relation}\" relation.",relation:"These features can't be merged because they have conflicting relation roles.",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.",paths_intersect:"These features can't be merged because the resulting path would intersect itself."},move:{title:"Move",description:{single:"Move this feature to a different location.",multiple:"Move these features 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 features."},incomplete_relation:{single:"This feature can't be moved because it hasn't been fully downloaded.",multiple:"These features can't be moved because they haven't been fully downloaded."},too_large:{single:"This feature can't be moved because not enough of it is currently visible.",multiple:"These features can't be moved because not enough of them are currently visible."},connected_to_hidden:{single:"This feature can't be moved because it is connected to a hidden feature.",multiple:"These features can't be moved because some are connected to hidden features."},not_downloaded:{single:"This feature can't be moved because parts of it have not yet been downloaded.",multiple:"These features can't be moved because parts of them have not yet been downloaded."}},reflect:{title:{long:"Reflect Long",short:"Reflect Short"},description:{long:{single:"Reflect this feature across its long axis.",multiple:"Reflect these features across their long axis."},short:{single:"Reflect this feature across its short axis.",multiple:"Reflect these features across their short axis."}},key:{long:"T",short:"Y"},annotation:{long:{single:"Reflected a feature across its long axis.",multiple:"Reflected multiple features across their long axis."},short:{single:"Reflected a feature across its short axis.",multiple:"Reflected multiple features across their short axis."}},incomplete_relation:{single:"This feature can't be reflected because it hasn't been fully downloaded.",multiple:"These features can't be reflected because they haven't been fully downloaded."},too_large:{single:"This feature can't be reflected because not enough of it is currently visible.",multiple:"These features can't be reflected because not enough of them are currently visible."},connected_to_hidden:{single:"This feature can't be reflected because it is connected to a hidden feature.",multiple:"These features can't be reflected because some are connected to hidden features."},not_downloaded:{single:"This feature can't be reflected because parts of it have not yet been downloaded.",multiple:"These features can't be reflected because parts of them have not yet been downloaded."}},rotate:{title:"Rotate",description:{single:"Rotate this feature around its center point.",multiple:"Rotate these features around their center point."},key:"R",annotation:{line:"Rotated a line.",area:"Rotated an area.",multiple:"Rotated multiple features."},incomplete_relation:{single:"This feature can't be rotated because it hasn't been fully downloaded.",multiple:"These features can't be rotated because they haven't been fully downloaded."},too_large:{single:"This feature can't be rotated because not enough of it is currently visible.",multiple:"These features can't be rotated because not enough of them are currently visible."},connected_to_hidden:{single:"This feature can't be rotated because it is connected to a hidden feature.",multiple:"These features can't be rotated because some are connected to hidden features."},not_downloaded:{single:"This feature can't be rotated because parts of it have not yet been downloaded.",multiple:"These features can't be rotated because parts of them have not yet been downloaded."}},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:{annotation:{create:"Added a turn restriction","delete":"Deleted a turn restriction"}},extract:{title:"Extract",key:"E",description:{vertex:{single:"Extract this point from its parent lines/areas."},area:{single:"Extract a point from this area."}},annotation:{single:"Extracted a point."},too_large:{area:{single:"A point can't be extracted from this area because not enough of it is currently visible."}},restriction:{vertex:{single:"This point can't be extracted because it would damage a \"{relation}\" relation."}},connected_to_hidden:{vertex:{single:"This point can't be extracted because it is connected to a hidden feature."}}}},restriction:{controls:{distance:"Distance",distance_up_to:"Up to {distance}",via:"Via",via_node_only:"Node only",via_up_to_one:"Up to 1 way",via_up_to_two:"Up to 2 ways"},help:{indirect:"(indirect)",turn:{no_left_turn:"NO Left Turn {indirect}",no_right_turn:"NO Right Turn {indirect}",no_u_turn:"NO U-Turn {indirect}",no_straight_on:"NO Straight On {indirect}",only_left_turn:"ONLY Left Turn {indirect}",only_right_turn:"ONLY Right Turn {indirect}",only_u_turn:"ONLY U-Turn {indirect}",only_straight_on:"ONLY Straight On {indirect}",allowed_left_turn:"Left Turn Allowed {indirect}",allowed_right_turn:"Right Turn Allowed {indirect}",allowed_u_turn:"U-Turn Allowed {indirect}",allowed_straight_on:"Straight On Allowed {indirect}"},from:"FROM",via:"VIA",to:"TO",from_name:"{from} {fromName}",from_name_to_name:"{from} {fromName} {to} {toName}",via_names:"{via} {viaNames}",select_from:"Click to select a {from} segment",select_from_name:"Click to select {from} {fromName}",toggle:"Click for \"{turn}\""}},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",login:"Log In",logout:"Log Out",loading_auth:"Connecting to OpenStreetMap...",report_a_bug:"Report a bug",help_translate:"Help translate",sidebar:{key:"`",tooltip:"Toggle the sidebar."},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.",rateLimit:"The API is limiting anonymous connections. You can fix this by logging in."},commit:{title:"Upload to OpenStreetMap",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.",request_review:"I would like someone to review my edits.",save:"Upload",cancel:"Cancel",changes:"{count} Changes",download_changes:"Download osmChange file",errors:"Errors",warnings:"Warnings",modified:"Modified",deleted:"Deleted",created:"Created",outstanding_errors_message:"Please resolve all errors first. {count} remaining.",comment_needed_message:"Please add a changeset comment first.",about_changeset_comments:"About changeset comments",about_changeset_comments_link:"//wiki.openstreetmap.org/wiki/Good_changeset_comments",google_warning:"You mentioned Google in this comment: remember that copying from Google Maps is strictly forbidden.",google_warning_link:"https://www.openstreetmap.org/copyright"},contributors:{list:"Edits by {users}",truncated_list:"Edits by {users} and {count} others"},info_panels:{key:"I",background:{key:"B",title:"Background",zoom:"Zoom",vintage:"Vintage",source:"Source",description:"Description",resolution:"Resolution",accuracy:"Accuracy",unknown:"Unknown",show_tiles:"Show Tiles",hide_tiles:"Hide Tiles",show_vintage:"Show Vintage",hide_vintage:"Hide Vintage"},history:{key:"H",title:"History",selected:"{n} selected",no_history:"No History (New Feature)",version:"Version",last_edit:"Last Edit",edited_by:"Edited By",changeset:"Changeset",unknown:"Unknown",link_text:"History on openstreetmap.org",note_no_history:"No History (New Note)",note_comments:"Comments",note_created_date:"Created Date",note_created_user:"Created By",note_link_text:"Note on openstreetmap.org"},location:{key:"L",title:"Location",unknown_location:"Unknown Location"},measurement:{key:"M",title:"Measurement",selected:"{n} selected",geometry:"Geometry",closed_line:"closed line",closed_area:"closed area",center:"Center",perimeter:"Perimeter",length:"Length",area:"Area",centroid:"Centroid",location:"Location",metric:"Metric",imperial:"Imperial",node_count:"Number of nodes"}},geometry:{point:"point",vertex:"vertex",line:"line",area:"area",relation:"relation",note:"note"},geocoder:{search:"Search worldwide...",no_results_visible:"No results in visible map area",no_results_worldwide:"No results found"},geolocate:{title:"Show My Location",locating:"Locating, please wait..."},inspector:{zoom_to:{key:"Z",title:"Zoom to this",tooltip_feature:"Center and zoom the map to focus on this feature.",tooltip_note:"Center and zoom the map to focus on this note.",tooltip_data:"Center and zoom the map to focus on this data.",tooltip_issue:"Center and zoom the map to focus on this issue."},show_more:"Show More",view_on_osm:"View on openstreetmap.org",view_on_keepRight:"View on keepright.at",all_fields:"All fields",all_tags:"All tags",all_members:"All members",all_relations:"All relations",add_to_relation:"Add to a relation",new_relation:"New relation...",choose_relation:"Choose a parent relation",role:"Role",choose:"Select feature type",results:"{n} results for {search}",no_documentation_key:"There is no documentation available.",edit_reference:"edit/translate",wiki_reference:"View documentation",wiki_en_reference:"View documentation in English",hidden_preset:{manual:"{features} are hidden. Enable them in the Map Data pane.",zoom:"{features} are hidden. Zoom in to enable them."},back_tooltip:"Change feature",remove:"Remove",search:"Search",multiselect:"Selected features",unknown:"Unknown",incomplete:"<not downloaded>",feature_list:"Search features",edit:"Edit feature",check:{yes:"Yes",no:"No",reverser:"Change Direction"},radio:{structure:{type:"Type","default":"Default",layer:"Layer"}},add:"Add",none:"None",node:"Node",way:"Way",relation:"Relation",location:"Location",add_fields:"Add field:",lock:{suggestion:"The \"{label}\" field is locked because there is a Wikidata tag. You can delete it or edit the tags in the \"All tags\" section."}},background:{title:"Background",description:"Background settings",key:"B",backgrounds:"Backgrounds",none:"None",best_imagery:"Best known imagery source for this location","switch":"Switch back to this background",custom:"Custom",overlays:"Overlays",imagery_source_faq:"Imagery Info / Report a Problem",reset:"reset",reset_all:"Reset All",display_options:"Display Options",brightness:"Brightness",contrast:"Contrast",saturation:"Saturation",sharpness:"Sharpness",minimap:{description:"Show Minimap",tooltip:"Show a zoomed out map to help locate the area currently displayed.",key:"/"},fix_misalignment:"Adjust imagery offset",offset:"Drag anywhere in the gray area below to adjust the imagery offset, or enter the offset values in meters."},map_data:{title:"Map Data",description:"Map Data",key:"F",data_layers:"Data Layers",layers:{osm:{tooltip:"Map data from OpenStreetMap",title:"OpenStreetMap data"},notes:{tooltip:"Note data from OpenStreetMap",title:"OpenStreetMap notes"},keepRight:{tooltip:"Automatically detected map issues from keepright.at",title:"KeepRight Issues"},improveOSM:{tooltip:"Missing data automatically detected by improveosm.org",title:"ImproveOSM Issues"},custom:{tooltip:"Drag and drop a data file onto the page, or click the button to setup",title:"Custom Map Data",zoom:"Zoom to data"}},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.",osmhidden:"These features have been automatically hidden because the OpenStreetMap layer is hidden."},photo_overlays:{title:"Photo Overlays",traffic_signs:{title:"Traffic Signs"},photo_type:{flat:{title:"Flat Photos",tooltip:"Traditional photos"},panoramic:{title:"Panoramic Photos",tooltip:"360° photos"}}},feature:{points:{description:"Points",tooltip:"Points of Interest"},traffic_roads:{description:"Traffic Roads",tooltip:"Highways, Streets, etc."},service_roads:{description:"Service 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."},building_parts:{description:"Building Parts",tooltip:"3D Building and Roof Components"},indoor:{description:"Indoor Features",tooltip:"Rooms, Corridors, Stairwells, 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"},pistes:{description:"Pistes",tooltip:"Ski Slopes, Sled Runs, Ice Skating Trails, etc."},aerialways:{description:"Aerial Features",tooltip:"Chair Lifts, Gondolas, Zip Lines, etc."},power:{description:"Power Features",tooltip:"Power Lines, Power Plants, Substations, etc."},past_future:{description:"Past/Future Features",tooltip:"Proposed, Construction, Abandoned, Demolished, etc."},others:{description:"Other Features",tooltip:"Everything Else"}},area_fill:{wireframe:{description:"No Fill (Wireframe)",tooltip:"Enabling wireframe mode makes it easy to see the background imagery.",key:"W"},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."}},settings:{custom_background:{tooltip:"Edit custom background",header:"Custom Background Settings",instructions:"Enter a tile URL template. Valid tokens are:\n {zoom} or {z}, {x}, {y} for Z/X/Y tile scheme\n {-y} or {ty} for flipped TMS-style Y coordinates\n {u} for quadtile scheme\n {switch:a,b,c} for DNS server multiplexing\n\nExample:\n{example}",template:{placeholder:"Enter a url template"}},custom_data:{tooltip:"Edit custom data layer",header:"Custom Map Data Settings",file:{instructions:"Choose a local data file. Supported types are:\n .gpx, .kml, .geojson, .json",label:"Browse files"},or:"Or",url:{instructions:"Enter a data file URL or vector tile URL template. Valid tokens are:\n {zoom} or {z}, {x}, {y} for Z/X/Y tile scheme",placeholder:"Enter a url"}}},restore:{heading:"You have unsaved changes",description:"Do you wish to restore unsaved changes from a previous editing session?",restore:"Restore my changes",reset:"Discard my changes"},save:{title:"Save",help:"Review your changes and upload them 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...",conflict_progress:"Checking for conflicts: {num} of {total}",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 osmChange file",done:"All conflicts resolved!",help:"Another user changed some of the same map features you changed.\nClick on each feature 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 feature has been deleted by {user}.",location:"This feature 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 <b>{tag}</b> tag to \"{local}\" and {user} changed it to \"{remote}\"."}},success:{just_edited:"You just edited OpenStreetMap!",thank_you:"Thank you for improving the map.",thank_you_location:"Thank you for improving the map around {where}.",thank_you_where:{format:"{place}{separator}{region}",separator:", "},help_html:"Your changes should appear on OpenStreetMap within a few minutes. It may take longer for maps elsewhere to receive updates.",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",view_on_osm:"View Changes on OSM",changeset_id:"Your changeset #: {changeset_id}",like_osm:"Like OpenStreetMap? Connect with others:",more:"More",events:"Events",languages:"Languages: {languages}",missing:"Is something missing from this list?",tell_us:"Tell us!"},confirm:{okay:"OK",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"},version:{whats_new:"What's new in iD {version}"},tag_reference:{description:"Description",on_wiki:"{tag} on wiki.osm.org",used_with:"used with {type}"},zoom:{"in":"Zoom in",out:"Zoom out"},cannot_zoom:"Cannot zoom out further in current mode.",full_screen:"Toggle Full Screen",QA:{improveOSM:{title:"ImproveOSM Detection",geometry_types:{path:"paths",parking:"parking",road:"roads",both:"roads and parking"},directions:{east:"east",north:"north",northeast:"northeast",northwest:"northwest",south:"south",southeast:"southeast",southwest:"southwest",west:"west"},error_types:{ow:{title:"Missing One-way",description:"Along this section of {highway}, {percentage}% of {num_trips} recorded trips travel from {from_node} to {to_node}. There may be missing a \"oneway\" tag."},mr:{title:"Missing Geometry",description:"{num_trips} recorded trips in this area suggest there may be unmapped {geometry_type} here.",description_alt:"Data from a 3rd party suggests there may be unmapped {geometry_type} here."},tr:{title:"Missing Turn Restriction",description:"{num_passed} of {num_trips} recorded trips (travelling {travel_direction}) make a turn from {from_way} to {to_way} at {junction}. There may be a missing \"{turn_restriction}\" restriction."}}},keepRight:{title:"KeepRight Error",detail_title:"Error",detail_description:"Description",comment:"Comment",comment_placeholder:"Enter a comment to share with other users.",close:"Close (Error Fixed)",ignore:"Ignore (Not an Error)",save_comment:"Save Comment",close_comment:"Close and Comment",ignore_comment:"Ignore and Comment",error_parts:{this_node:"this node",this_way:"this way",this_relation:"this relation",this_oneway:"this oneway",this_highway:"this highway",this_railway:"this railway",this_waterway:"this waterway",this_cycleway:"this cycleway",this_cycleway_footpath:"this cycleway/footpath",this_riverbank:"this riverbank",this_crossing:"this crossing",this_railway_crossing:"this railway crossing",this_bridge:"this bridge",this_tunnel:"this tunnel",this_boundary:"this boundary",this_turn_restriction:"this turn restriction",this_roundabout:"this roundabout",this_mini_roundabout:"this mini-roundabout",this_track:"this track",this_feature:"this feature",highway:"highway",railway:"railway",waterway:"waterway",cycleway:"cycleway",cycleway_footpath:"cycleway/footpath",riverbank:"riverbank",place_of_worship:"place of worship",pub:"pub",restaurant:"restaurant",school:"school",university:"university",hospital:"hospital",library:"library",theatre:"theatre",courthouse:"courthouse",bank:"bank",cinema:"cinema",pharmacy:"pharmacy",cafe:"cafe",fast_food:"fast food",fuel:"fuel",from:"from",to:"to",left_hand:"left-hand",right_hand:"right-hand"},errorTypes:{"20":{title:"Multiple nodes on the same spot",description:"There is more than one node in this spot. Node IDs: {var1}."},"30":{title:"Non-closed area",description:"{var1} is tagged with \"{var2}\" and should be a closed loop."},"40":{title:"Impossible oneway",description:"The first node {var1} of {var2} is not connected to any other way."},"41":{description:"The last node {var1} of {var2} is not connected to any other way."},"42":{description:"You cannot reach {var1} because all ways leading from it are oneway."},"43":{description:"You cannot escape from {var1} because all ways leading to it are oneway."},"50":{title:"Almost junction",description:"{var1} is very close but not connected to way {var2}."},"60":{title:"Deprecated tag",description:"{var1} uses deprecated tag \"{var2}\". Please use \"{var3}\" instead."},"70":{title:"Missing tag",description:"{var1} has an empty tag: \"{var2}\"."},"71":{description:"{var1} has no tags."},"72":{description:"{var1} is not member of any way and doesn't have any tags."},"73":{description:"{var1} has a \"{var2}\" tag but no \"highway\" tag."},"74":{description:"{var1} has an empty tag: \"{var2}\"."},"75":{description:"{var1} has a name \"{var2}\" but no other tags."},"90":{title:"Motorway without ref tag",description:"{var1} is tagged as a motorway and therefore needs a \"ref\", \"nat_ref\", or \"int_ref\" tag."},"100":{title:"Place of worship without religion",description:"{var1} is tagged as a place of worship and therefore needs a religion tag."},"110":{title:"Point of interest without name",description:"{var1} is tagged as a \"{var2}\" and therefore needs a name tag."},"120":{title:"Way without nodes",description:"{var1} has just one single node."},"130":{title:"Disconnected way",description:"{var1} is not connected to the rest of the map."},"150":{title:"Railway crossing without tag",description:"{var1} of a highway and a railway needs to be tagged as \"railway=crossing\" or \"railway=level_crossing\"."},"160":{title:"Railway layer conflict",description:"There are ways in different layers (e.g. tunnel or bridge) meeting at {var1}."},"170":{title:"FIXME tagged item",description:"{var1} has a FIXME tag: {var2}"},"180":{title:"Relation without type",description:"{var1} is missing a \"type\" tag."},"190":{title:"Intersection without junction",description:"{var1} intersects the {var2} {var3} but there is no junction node, bridge, or tunnel."},"200":{title:"Overlapping ways",description:"{var1} overlaps the {var2} {var3}."},"210":{title:"Self-intersecting way",description:"There is an unspecified issue with self intersecting ways."},"211":{description:"{var1} contains more than one node multiple times. Nodes are {var2}. This may or may not be an error."},"212":{description:"{var1} has only two different nodes and contains one of them more than once."},"220":{title:"Misspelled tag",description:"{var1} is tagged \"{var2}\" where \"{var3}\" looks like \"{var4}\"."},"221":{description:"{var1} has a suspicious tag \"{var2}\"."},"230":{title:"Layer conflict",description:"{var1} is a junction of ways on different layers."},"231":{description:"{var1} is a junction of ways on different layers: {var2}.",layer:"(layer: {layer})"},"232":{description:"{var1} is tagged with \"layer={var2}\". This need not be an error but it looks strange."},"270":{title:"Unusual motorway connection",description:"{var1} is a junction of a motorway and a highway other than \"motorway\", \"motorway_link\", \"trunk\", \"rest_area\", or \"construction\". Connection to \"service\" or \"unclassified\" is only valid if it has \"access=no/private\", or it leads to a motorway service area, or if it is a \"service=parking_aisle\"."},"280":{title:"Boundary issue",description:"There is an unspecified issue with this boundary."},"281":{title:"Boundary missing name",description:"{var1} has no name."},"282":{title:"Boundary missing admin level",description:"The boundary of {var1} has no valid numeric admin_level. Please do not mix admin levels (e.g. \"6;7\"). Always tag the lowest admin_level of all boundaries."},"283":{title:"Boundary not a closed loop",description:"The boundary of {var1} is not a closed loop."},"284":{title:"Boundary is split",description:"The boundary of {var1} splits here."},"285":{title:"Boundary admin_level too high",description:"{var1} has \"admin_level={var2}\" but belongs to a relation with lower \"admin_level\" (e.g. higher priority); it should have the lowest \"admin_level\" of all relations."},"290":{title:"Restriction issue",description:"There is an unspecified issue with this restriction."},"291":{title:"Restriction missing type",description:"{var1} has an unrecognized restriction type."},"292":{title:"Restriction missing \"from\" way",description:"{var1} has {var2} \"from\" members, but it should have 1."},"293":{title:"Restriction missing \"to\" way",description:"{var1} has {var2} \"to\" members, but it should have 1."},"294":{title:"Restriction \"from\" or \"to\" is not a way",description:"{var1} has \"from\" or \"to\" members which should be ways. {var2}."},"295":{title:"Restriction \"via\" is not an endpoint",description:"{var1} has a \"via\" (node {var2}) which is not the first or the last member of \"{var3}\" (way {var4})."},"296":{title:"Unusual restriction angle",description:"{var1} has a restriction type \"{var2}\" but the angle is {var3} degrees. Maybe the restriction type is not appropriate?"},"297":{title:"Wrong direction of \"to\" way",description:"{var1} does not match the direction of \"to\" way {var2}."},"298":{title:"Redundant restriction - oneway",description:"{var1} may be redundant. Entry already prohibited by \"oneway\" tag on {var2}."},"300":{title:"Missing maxspeed",description:"{var1} is missing a \"maxspeed\" tag and is tagged as motorway, trunk, primary, or secondary."},"310":{title:"Roundabout issue",description:"There is an unspecified issue with this roundabout."},"311":{title:"Roundabout not closed loop",description:"{var1} is part of a roundabout but is not closed-loop. (Split carriageways approaching a roundabout should not be tagged as roundabout)."},"312":{title:"Roundabout wrong direction",description:"If {var1} is in a country with {var2} traffic then its orientation goes the wrong way around."},"313":{title:"Roundabout weakly connected",description:"{var1} has only {var2} other road(s) connected. Roundabouts typically have 3 or more."},"320":{title:"Improper link connection",description:"{var1} is tagged as \"{var2}\" but doesn't have a connection to any other \"{var3}\" or \"{var4}\"."},"350":{title:"Improper bridge tag",description:"{var1} doesn't have a tag in common with its surrounding ways that shows the purpose of this bridge. There should be one of these tags: {var2}."},"360":{title:"Missing local name tag",description:"It would be nice if {var1} had a local name tag \"name:XX={var2}\" where XX shows the language of its common name \"{var2}\"."},"370":{title:"Doubled places",description:"{var1} has tags in common with the surrounding way {var2} {var3} and seems to be redundant.",including_the_name:"(including the name {name})"},"380":{title:"Non-physical use of sport tag",description:"{var1} is tagged \"{var2}\" but has no physical tag (e.g. \"leisure\", \"building\", \"amenity\", or \"highway\")."},"390":{title:"Missing tracktype",description:"{var1} doesn't have a \"tracktype\" tag."},"400":{title:"Geometry issue",description:"There is an unspecified issue with the geometry here."},"401":{title:"Missing turn restriction",description:"Ways {var1} and {var2} join in a very sharp angle here and there is no oneway tag or turn restriction that prevents turning."},"402":{title:"Impossible angle",description:"{var1} bends in a very sharp angle here."},"410":{title:"Website issue",description:"There is an unspecified issue with a contact website or URL."},"411":{description:"{var1} may have an outdated URL: {var2} returned HTTP status code {var3}."},"412":{description:"{var1} may have an outdated URL: {var2} contained suspicious text \"{var3}\"."},"413":{description:"{var1} may have an outdated URL: {var2} did not contain keywords \"{var3}\"."}}}},streetside:{tooltip:"Streetside photos from Microsoft",title:"Bing Streetside",report:"Report a privacy concern with this image",view_on_bing:"View on Bing Maps",hires:"High resolution"},mapillary_images:{tooltip:"Street-level photos from Mapillary"},mapillary:{title:"Mapillary",signs:{tooltip:"Traffic signs from Mapillary"},view_on_mapillary:"View this image on Mapillary"},openstreetcam_images:{tooltip:"Street-level photos from OpenStreetCam"},openstreetcam:{title:"OpenStreetCam",view_on_openstreetcam:"View this image on OpenStreetCam"},note:{note:"Note",title:"Edit note",anonymous:"anonymous",closed:"(Closed)",commentTitle:"Comments",status:{opened:"opened {when}",reopened:"reopened {when}",commented:"commented {when}",closed:"closed {when}"},newComment:"New Comment",inputPlaceholder:"Enter a comment to share with other users.",close:"Close Note",open:"Reopen Note",comment:"Comment",close_comment:"Close and Comment",open_comment:"Reopen and Comment",report:"Report","new":"New Note",newDescription:"Describe the issue.",save:"Save Note",login:"You must log in to change or comment on this note.",upload_explanation:"Your comments will be publicly visible to all OpenStreetMap users.",upload_explanation_with_user:"Your comments as {user} will be publicly visible to all OpenStreetMap users."},help:{title:"Help",key:"H",help:{title:"Help",welcome:"Welcome to the iD editor for [OpenStreetMap](https://www.openstreetmap.org/). With this editor you can update OpenStreetMap right from your web browser.",open_data_h:"Open Data",open_data:"Edits that you make on this map will be visible to everyone who uses OpenStreetMap. Your edits can be based on personal knowledge, on-the-ground surveying, or imagery collected from aerial or street level photos. Copying from commercial sources, like Google Maps, [is strictly forbidden](https://www.openstreetmap.org/copyright).",before_start_h:"Before you start",before_start:"You should be familiar with OpenStreetMap and this editor before you start editing. iD contains a walkthrough to teach you the basics of editing OpenStreetMap. Click \"Start the Walkthrough\" on this screen to take the tutorial - it takes only about 15 minutes.",open_source_h:"Open Source",open_source:"The iD editor is a collaborative open source project, and you are using version {version} now. The source code is available [on GitHub](https://github.com/openstreetmap/iD).",open_source_help:"You can help iD by [translating](https://github.com/openstreetmap/iD/blob/master/CONTRIBUTING.md#translating) or [reporting bugs](https://github.com/openstreetmap/iD/issues)."},overview:{title:"Overview",navigation_h:"Navigation",navigation_drag:"You can drag the map by pressing and holding down the {leftclick} left mouse button and moving the mouse around. You can also use the `↓`, `↑`, `←`, `→` arrow keys on your keyboard.",navigation_zoom:"You can zoom in or out by scrolling with the mouse wheel or trackpad, or by clicking the {plus} / {minus} buttons along the side of the map. You can also use the `+`, `-` keys on your keyboard.",features_h:"Map Features",features:"We use the word *features* to describe things that appear on the map, such as roads, buildings, or points of interest. Anything in the real world can be mapped as a feature on OpenStreetMap. Map features are represented on the map using *points*, *lines*, or *areas*.",nodes_ways:"In OpenStreetMap, points are sometimes called *nodes*, and lines and areas are sometimes called *ways*."},editing:{title:"Editing & Saving",select_h:"Select",select_left_click:"{leftclick} Left-click on a feature to select it. This will highlight it with a pulsing glow, and the sidebar will display details about that feature, such as its name or address.",select_right_click:"{rightclick} Right-click on a feature to display the editing menu, which shows the commands that are available, such as rotating, moving, and deleting.",multiselect_h:"Multiselect",multiselect_shift_click:"`{shift}`+{leftclick} left-click to select several features together. This makes it easier to move or delete multiple items.",multiselect_lasso:"Another way to select multiple features is to hold down the `{shift}` key, then press and hold down the {leftclick} left mouse button and drag the mouse to draw a selection lasso. All of the points inside the lasso area will be selected.",undo_redo_h:"Undo & Redo",undo_redo:"Your edits are stored locally in your browser until you choose to save them to the OpenStreetMap server. You can undo edits by clicking the {undo} **Undo** button, and redo them by clicking the {redo} **Redo** button.",save_h:"Save",save:"Click {save} **Save** to finish your edits and send them to OpenStreetMap. You should remember to save your work frequently!",save_validation:"On the save screen, you'll have a chance to review what you've done. iD will also perform some basic checks for missing data and may offer helpful suggestions and warnings if something doesn't seem right.",upload_h:"Upload",upload:"Before uploading your changes you must enter a [changeset comment](https://wiki.openstreetmap.org/wiki/Good_changeset_comments). Then click **Upload** to send your changes to OpenStreetMap, where they will be merged into the map and publicly visible to everyone.",backups_h:"Automatic Backups",backups:"If you can't finish your edits in one sitting, for example if your computer crashes or you close the browser tab, your edits are still saved in your browser's storage. You can come back later (on the same browser and computer), and iD will offer to restore your work.",keyboard_h:"Keyboard Shortcuts",keyboard:"You can view a list of keyboard shortcuts by pressing the `?` key."},feature_editor:{title:"Feature Editor",intro:"The *feature editor* appears alongside the map, and allows you to see and edit all of the information for the selected feature.",definitions:"The top section displays the feature's type. The middle section contains *fields* showing the feature's attributes, such as its name or address.",type_h:"Feature Type",type:"You can click on the feature type to change the feature to a different type. Everything that exists in the real world can be added to OpenStreetMap, so there are thousands of feature types to choose from.",type_picker:"The type picker displays the most common feature types, such as parks, hospitals, restaurants, roads, and buildings. You can search for anything by typing what you're looking for in the search box. You can also click the {inspect} **Info** icon next to the feature type to learn more about it.",fields_h:"Fields",fields_all_fields:"The \"All fields\" section contains all of the feature's details that you may edit. In OpenStreetMap, all of the fields are optional, and it's OK to leave a field blank if you are unsure.",fields_example:"Each feature type will display different fields. For example, a road may display fields for its surface and speed limit, but a restaurant may display fields for the type of food it serves and the hours it is open.",fields_add_field:"You can also click the \"Add field\" dropdown to add more fields, such as a description, Wikipedia link, wheelchair access, and more.",tags_h:"Tags",tags_all_tags:"Below the fields section, you can expand the \"All tags\" section to edit any of the OpenStreetMap *tags* for the selected feature. Each tag consists of a *key* and *value*, data elements that define all of the features stored in OpenStreetMap.",tags_resources:"Editing a feature's tags requires intermediate knowledge about OpenStreetMap. You should consult resources like the [OpenStreetMap Wiki](https://wiki.openstreetmap.org/wiki/Main_Page) or [Taginfo](https://taginfo.openstreetmap.org/) to learn more about accepted OpenStreetMap tagging practices."},points:{title:"Points",intro:"*Points* can be used to represent features such as shops, restaurants, and monuments. They mark a specific location, and describe what's there.",add_point_h:"Adding Points",add_point:"To add a point, click the {point} **Point** button on the toolbar above the map, or press the shortcut key `1`. This will change the mouse cursor to a cross symbol.",add_point_finish:"To place the new point on the map, position the mouse cursor where the point should go, then {leftclick} left-click or press `Space`.",move_point_h:"Moving Points",move_point:"To move a point, place the mouse cursor over the point, then press and hold the {leftclick} left mouse button while dragging the point to its new location.",delete_point_h:"Deleting Points",delete_point:"It's OK to delete features that don't exist in the real world. Deleting a feature from OpenStreetMap removes it from the map that everyone uses, so you should make sure a feature is really gone before you delete it.",delete_point_command:"To delete a point, {rightclick} right-click on the point to select it and show the edit menu, then use the {delete} **Delete** command."},lines:{title:"Lines",intro:"*Lines* are used to represent features such as roads, railroads, and rivers. Lines should be drawn down the center of the feature that they represent.",add_line_h:"Adding Lines",add_line:"To add a line, click the {line} **Line** button on the toolbar above the map, or press the shortcut key `2`. This will change the mouse cursor to a cross symbol.",add_line_draw:"Next, position the mouse cursor where the line should begin and {leftclick} left-click or press `Space` to begin placing nodes along the line. Continue placing more nodes by clicking or pressing `Space`. While drawing, you can zoom in or drag the map in order to add more detail.",add_line_finish:"To finish a line, press `{return}` or click again on the last node.",modify_line_h:"Modifying Lines",modify_line_dragnode:"Often you'll see lines that aren't shaped correctly, for example a road that does not match up with the background imagery. To adjust the shape of a line, first {leftclick} left-click to select it. All nodes of the line will be drawn as small circles. You can then drag the nodes to better locations.",modify_line_addnode:"You can also create new nodes along a line either by {leftclick}**x2** double-clicking on the line or by dragging the small triangles at the midpoints between nodes.",connect_line_h:"Connecting Lines",connect_line:"Having roads connected properly is important for the map and essential for providing driving directions.",connect_line_display:"The connections between roads are drawn with gray circles. The endpoints of a line are drawn with larger white circles if they don't connect to anything.",connect_line_drag:"To connect a line to another feature, drag one of the line's nodes onto the other feature until both features snap together. Tip: You can hold down the `{alt}` key to prevent nodes from connecting to other features.",connect_line_tag:"If you know that the connection has traffic lights or crosswalks, you can add them by selecting the connecting node and using the feature editor to select the correct feature's type.",disconnect_line_h:"Disconnecting Lines",disconnect_line_command:"To disconnect a road from another feature, {rightclick} right-click the connecting node and select the {disconnect} **Disconnect** command from the editing menu.",move_line_h:"Moving Lines",move_line_command:"To move an entire line, {rightclick} right-click the line and select the {move} **Move** command from the editing menu. Then move the mouse, and {leftclick} left-click to place the line in a new location.",move_line_connected:"Lines that are connected to other features will stay connected as you move the line to a new location. iD may prevent you from moving a line across another connected line.",delete_line_h:"Deleting Lines",delete_line:"If a line is entirely incorrect, for example a road that doesn't exist in the real world, it's OK to delete it. Be careful when deleting features: the background imagery you are using might be outdated, and a road that looks wrong could simply be newly built.",delete_line_command:"To delete a line, {rightclick} right-click on the line to select it and show the edit menu, then use the {delete} **Delete** command."},areas:{title:"Areas",intro:"*Areas* are used to show the boundaries of features like lakes, buildings, and residential areas. Areas should be traced around the edge of the feature that they represent, for example, around the base of a building.",point_or_area_h:"Points or Areas?",point_or_area:"Many features can be represented as points or areas. You should map buildings and property outlines as areas whenever possible. Place points inside a building area to represent businesses, amenities, and other features located inside the building.",add_area_h:"Adding Areas",add_area_command:"To add an area, click the {area} **Area** button on the toolbar above the map, or press the shortcut key `3`. This will change the mouse cursor to a cross symbol.",add_area_draw:"Next, position the mouse cursor at one of the corners of the feature and {leftclick} left-click or press `Space` to begin placing nodes around the outer edge of the area. Continue placing more nodes by clicking or pressing `Space`. While drawing, you can zoom in or drag the map in order to add more detail.",add_area_finish:"To finish an area, press `{return}` or click again on either the first or last node.",square_area_h:"Square Corners",square_area_command:"Many area features like buildings have square corners. To square the corners of an area, {rightclick} right-click the edge of the area and select the {orthogonalize} **Square** command from the editing menu.",modify_area_h:"Modifying Areas",modify_area_dragnode:"Often you'll see areas that aren't shaped correctly, for example a building that does not match up with the background imagery. To adjust the shape of an area, first {leftclick} left-click to select it. All nodes of the area will be drawn as small circles. You can then drag the nodes to better locations.",modify_area_addnode:"You can also create new nodes along an area either by {leftclick}**x2** double-clicking on the edge of the area or by dragging the small triangles at the midpoints between nodes.",delete_area_h:"Deleting Areas",delete_area:"If an area is entirely incorrect, for example a building that doesn't exist in the real world, it's OK to delete it. Be cautious when deleting features - the background imagery you are using might be outdated, and a building that looks wrong could simply be newly built.",delete_area_command:"To delete an area, {rightclick} right-click on the area to select it and show the edit menu, then use the {delete} **Delete** command."},relations:{title:"Relations",intro:"A *relation* is a special type of feature in OpenStreetMap that groups together other features. The features that belong to a relation are called *members*, and each member can have a *role* in the relation.",edit_relation_h:"Editing Relations",edit_relation:"At the bottom of the feature editor, you can expand the \"All relations\" section to see if the selected feature is a member of any relations. You can then click on the relation to select and edit it.",edit_relation_add:"To add a feature to a relation, select the feature, then click the {plus} add button in the \"All relations\" section of the feature editor. You can choose from a list of nearby relations, or choose the \"New relation...\" option.",edit_relation_delete:"You can also click the {delete} **Delete** button to remove the selected feature from the relation. If you remove all of the members from a relation, the relation will be deleted automatically.",maintain_relation_h:"Maintaining Relations",maintain_relation:"For the most part, iD will maintain relations automatically as you edit. You should take care when replacing features that might be members of relations. For example if you delete a section of road and draw a new section of road to replace it, you should add the new section to the same relations (routes, turn restrictions, etc.) as the original.",relation_types_h:"Relation Types",multipolygon_h:"Multipolygons",multipolygon:"A *multipolygon* relation is a group of one or more *outer* features and one or more inner features. The outer features define the outer edges of the multipolygon, and the inner features define sub-areas or holes cut out from the inside of the multipolygon.",multipolygon_create:"To create a multipolygon, for example a building with a hole in it, draw the outer edge as an area and the inner edge as a line or different kind of area. Then `{shift}`+{leftclick} left-click to select both features, {rightclick} right-click to show the edit menu, and select the {merge} **Merge** command.",multipolygon_merge:"Merging several lines or areas will create a new multipolygon relation with all selected areas as members. iD will choose the inner and outer roles automatically, based on which features are contained inside other features.",turn_restriction_h:"Turn restrictions",turn_restriction:"A *turn restriction* relation is a group of several road segments in an intersection. Turn restrictions consist of a *from* road, *via* node or roads, and a *to* road.",turn_restriction_field:"To edit turn restrictions, select a junction node where two or more roads meet. The feature editor will display a special \"Turn Restrictions\" field containing a model of the intersection.",turn_restriction_editing:"In the \"Turn Restrictions\" field, click to select a \"from\" road, and see whether turns are allowed or restricted to any of the \"to\" roads. You can click on the turn icons to toggle them between allowed and restricted. iD will create relations automatically and set the from, via, and to roles based on your choices.",route_h:"Routes",route:"A *route* relation is a group of one or more line features that together form a route network, like a bus route, train route, or highway route.",route_add:"To add a feature to a route relation, select the feature and scroll down to the \"All relations\" section of the feature editor, then click the {plus} add button to add this feature to a nearby existing relation or a new relation.",boundary_h:"Boundaries",boundary:"A *boundary* relation is a group of one or more line features that together form an administrative boundary.",boundary_add:"To add a feature to a boundary relation, select the feature and scroll down to the \"All relations\" section of the feature editor, then click the {plus} add button to add this feature to a nearby existing relation or a new relation."},notes:{title:"Notes",intro:"*Notes* are used to alert other users that a feature requires fixing or attention. Notes mark a specific location on the map. To view existing notes or add new ones, click the {data} **Map data** panel to enable the OpenStreetMap notes layer.",add_note_h:"Adding Notes",add_note:"To add a new note, click the {note} **Note** button on the toolbar above the map, or press the shortcut key `4`. This will change the mouse cursor to a cross symbol. To place the new note on the map, position the mouse cursor where the note should go, then {leftclick} left-click or press `Space`.",move_note:"Only new notes can be moved. To move a note, place the mouse cursor over the new note, then press and hold the {leftclick} left mouse button while dragging the note to its new location.",update_note_h:"Closing, Reopening, and Commenting",update_note:"An existing note can be updated by closing it, reopening it, or adding a comment to it. Closing a note indicates that the problem has been resolved. Reopening a note indicates that the original issue is not resolved.",save_note_h:"Saving Notes",save_note:"You must save any note edits individually by clicking the buttons below the note comments. Note edits are **not** included in changesets that you upload to OpenStreetMap."},imagery:{title:"Background Imagery",intro:"The background imagery that appears beneath the map data is an important resource for mapping. This imagery can be aerial photos collected from satellites, airplanes, and drones, or it can be scanned historical maps or other freely available source data.",sources_h:"Imagery Sources",choosing:"To see which imagery sources are available for editing, click the {layers} **Background settings** button on the side of the map.",sources:"By default, a [Bing Maps](https://www.bing.com/maps/) satellite layer is chosen as the background image. Depending on where you are editing, other imagery sources will be available. Some may be newer or have higher resolution, so it is always useful to check and see which layer is the best one to use as a mapping reference.",offsets_h:"Adjusting Imagery Offset",offset:"Imagery is sometimes offset slightly from accurate map data. If you see a lot of roads or buildings shifted from the background imagery, it may be the imagery that's incorrect, so don't move them all to match the background. Instead, you can adjust the background so that it matches the existing data by expanding the \"Adjust Imagery Offset\" section at the bottom of the Background Settings pane.",offset_change:"Click on the small triangles to adjust the imagery offset in small steps, or hold the {leftclick} left mouse button and drag within the gray square to slide the imagery into alignment."},streetlevel:{title:"Street Level Photos",intro:"Street level photos are useful for mapping traffic signs, businesses, and other details that you can't see from satellite and aerial images. The iD editor supports street level photos from [Bing Streetside](https://www.microsoft.com/en-us/maps/streetside), [Mapillary](https://www.mapillary.com), and [OpenStreetCam](https://www.openstreetcam.org).",using_h:"Using Street Level Photos",using:"To use street level photos for mapping, click the {data} **Map data** panel on the side of the map to enable or disable the available photo layers.",photos:"When enabled, the photo layer displays a line along the sequence of photos. At higher zoom levels, a circle marks at each photo location, and at even higher zoom levels, a cone indicates the direction the camera was facing when the photo was taken.",viewer:"When you click on one of the photo locations, a photo viewer appears in the bottom corner of the map. The photo viewer contains controls to step forward and backward in the image sequence. It also shows the username of the person who captured the image, the date it was captured, and a link to view the image on the original site."},gps:{title:"GPS Traces",intro:"Collected GPS traces are a valuable source of data for OpenStreetMap. This editor supports *.gpx*, *.geojson*, and *.kml* files on your local computer. You can collect GPS traces with a smartphone, sports watch, or other GPS device.",survey:"For information on how to perform a GPS survey, read [Mapping with a smartphone, GPS, or paper](http://learnosm.org/en/mobile-mapping/).",using_h:"Using GPS Traces",using:"To use a GPS trace for mapping, drag and drop the data file onto the map editor. If it's recognized, it will be drawn on the map as a bright purple line. Click the {data} **Map data** panel on the side of the map to enable, disable, or zoom to your GPS data.",tracing:"The GPS track isn't sent to OpenStreetMap - the best way to use it is to draw on the map, using it as a guide for the new features that you add.",upload:"You can also [upload your GPS data to OpenStreetMap](https://www.openstreetmap.org/trace/create) for other users to use."},qa:{title:"Quality Assurance",intro:"*Quality Assurance* (Q/A) tools can find improper tags, disconnected roads, and other issues with OpenStreetMap, which mappers can then fix. To view existing Q/A issues, click the {data} **Map data** panel to enable a specific Q/A layer.",tools_h:"Tools",tools:"The following tools are currently supported: [KeepRight](https://www.keepright.at/) and [ImproveOSM](https://improveosm.org/en/). Expect iD to support [Osmose](https://osmose.openstreetmap.fr/) and more Q/A tools in the future.",issues_h:"Handling Issues",issues:"Handling Q/A issues is similar to handling notes. Click on a marker to view the issue details in the sidebar. Each tool has its own capabilities, but generally you can comment and/or close an issue."},field:{restrictions:{title:"Turn Restrictions Help",about:{title:"About",about:"This field allows you to inspect and modify turn restrictions. It displays a model of the selected intersection including other nearby connected roads.",from_via_to:"A turn restriction always contains: one **FROM way**, one **TO way**, and either one **VIA node** or one or more **VIA ways**.",maxdist:"The \"{distField}\" slider controls how far to search for additional connected roads.",maxvia:"The \"{viaField}\" slider adjusts how many via ways may be included in the search. (Tip: simple is better)"},inspecting:{title:"Inspecting",about:"Hover over any **FROM** segment to see whether it has any turn restrictions. Each possible **TO** destination will be drawn with a colored shadow showing whether a restriction exists.",from_shadow:"{fromShadow} **FROM segment**",allow_shadow:"{allowShadow} **TO Allowed**",restrict_shadow:"{restrictShadow} **TO Restricted**",only_shadow:"{onlyShadow} **TO Only**",restricted:"\"Restricted\" means that there is a turn restriction, for example \"No Left Turn\".",only:"\"Only\" means that a vehicle taking that path may only make that choice, for example \"Only Straight On\"."},modifying:{title:"Modifying",about:"To modify turn restrictions, first click on any starting **FROM** segment to select it. The selected segment will pulse, and all possible **TO** destinations will appear as turn symbols.",indicators:"Then, click on a turn symbol to toggle it between \"Allowed\", \"Restricted\", and \"Only\".",allow_turn:"{allowTurn} **TO Allowed**",restrict_turn:"{restrictTurn} **TO Restricted**",only_turn:"{onlyTurn} **TO Only**"},tips:{title:"Tips",simple:"**Prefer simple restrictions over complex ones.**",simple_example:"For example, avoid creating a via-way restriction if a simpler via-node turn restriction will do.",indirect:"**Some restrictions display the text \"(indirect)\" and are drawn lighter.**",indirect_example:"These restrictions exist because of another nearby restriction. For example, an \"Only Straight On\" restriction will indirectly create \"No Turn\" restrictions for all other paths through the intersection.",indirect_noedit:"You may not edit indirect restrictions. Instead, edit the nearby direct restriction."}}}},issues:{title:"Issues",key:"I",list_title:"Issues ({count})",errors:{list_title:"Errors ({count})"},warnings:{list_title:"Warnings ({count})"},rules:{title:"Rules"},no_issues:{message:{everything:"Everything looks fine",everything_in_view:"Everything in view looks fine",edits:"Your edits look fine",edits_in_view:"Your edits in view look fine"},hidden_issues:{none:"Detected issues will appear here",elsewhere:"Issues elsewhere: {count}",other_features:"Issues with other features: {count}",other_features_elsewhere:"Issues elsewhere with other features: {count}",disabled_rules:"Issues with disabled rules: {count}",disabled_rules_elsewhere:"Issues elsewhere with disabled rules: {count}",ignored_issues:"Ignored issues: {count}",ignored_issues_elsewhere:"Ignored issues elsewhere: {count}"}},options:{what:{title:"Check:",edited:"My Edits",all:"Everything"},where:{title:"Where:",visible:"In View",all:"Everywhere"}},suggested:"Suggested updates:",enable_all:"Enable All",disable_all:"Disable All",reset_ignored:"Reset Ignored ({count})",fix_one:{title:"fix"},fix_all:{title:"Fix All",annotation:"Fixed several validation issues."},almost_junction:{title:"Almost Junctions",message:"{feature} is very close but not connected to {feature2}",tip:"Find features that should possibly be connected to other nearby features",self:{message:"{feature} ends very close to itself but does not reconnect"},"highway-highway":{reference:"Intersecting highways should share a junction vertex."}},close_nodes:{title:"Very Close Points",tip:"Find redundant and crowded points",message:"Two points in {way} are very close together",reference:"Redundant points in a way should be merged or moved apart.",detached:{message:"{feature} is too close to {feature2}",reference:"Separate points should not share a location."}},crossing_ways:{title:"Crossings Ways",message:"{feature} crosses {feature2}",tip:"Find features that incorrectly cross over one another","building-building":{reference:"Buildings should not intersect except on different layers."},"building-highway":{reference:"Highways crossing buildings should use bridges, tunnels, coverings, or entrances."},"building-railway":{reference:"Railways crossing buildings should use bridges or tunnels."},"building-waterway":{reference:"Waterways crossing buildings should use tunnels or different layers."},"highway-highway":{reference:"Crossing highways should use bridges, tunnels, or intersections."},"highway-railway":{reference:"Highways crossing railways should use bridges, tunnels, or level crossings."},"highway-waterway":{reference:"Highways crossing waterways should use bridges, tunnels, or fords."},"railway-railway":{reference:"Crossing railways should be connected or use bridges or tunnels."},"railway-waterway":{reference:"Railways crossing waterways should use bridges or tunnels."},"waterway-waterway":{reference:"Crossing waterways should be connected or use tunnels."},"tunnel-tunnel":{reference:"Crossing tunnels should use different layers."},"tunnel-tunnel_connectable":{reference:"Crossing tunnels should be connected or use different layers."},"bridge-bridge":{reference:"Crossing bridges should use different layers."},"bridge-bridge_connectable":{reference:"Crossing bridges should be connected or use different layers."},"indoor-indoor":{reference:"Crossing indoor features should use different levels."},"indoor-indoor_connectable":{reference:"Crossing indoor features should be connected or use different levels."}},disconnected_way:{title:"Disconnected Ways",tip:"Find unroutable roads, paths, and ferry routes",routable:{message:{multiple:"{count} routable features are connected only to each other."},reference:"All roads, paths, and ferry routes should connect to form a single routing network."},highway:{message:"{highway} is disconnected from other roads and paths"}},fixme_tag:{title:"\"Fix Me\" Requests",message:"{feature} has a \"Fix Me\" request",tip:"Find features with \"fixme\" tags",reference:"A \"fixme\" tag indicates that a mapper has requested help with a feature."},generic_name:{title:"Suspicious Names",message:"{feature} has the suspicious name \"{name}\"",tip:"Find features with generic or suspicious names",reference:"Names should be the actual, on-the-ground names of features."},incompatible_source:{title:"Suspicious Sources",tip:"Find features with suspicious source tags",google:{feature:{message:"{feature} lists Google as a data source"},reference:"Google products are proprietary and must not be used as references."}},missing_role:{title:"Missing Roles",message:"{member} has no role within {relation}",tip:"Find relations with missing or incorrect member roles",multipolygon:{reference:"Multipolygon members must have an inner or outer role."}},missing_tag:{title:"Missing Tags",tip:"Find features that are missing descriptive tags",reference:"Features must have tags that define what they are.",any:{message:"{feature} has no tags"},descriptive:{message:"{feature} has no descriptive tags"},relation_type:{message:"{feature} is a relation without a type"}},old_multipolygon:{message:"{multipolygon} has misplaced tags",reference:"Multipolygons should be tagged on their relation, not their outer way."},outdated_tags:{title:"Outdated Tags",message:"{feature} has outdated tags",tip:"Find features with deprecated tags that can be updated",reference:"Some tags change over time and should be updated.",incomplete:{message:"{feature} has incomplete tags",reference:"Some features should have additional tags."}},private_data:{title:"Private Information",tip:"Find features that may contain private information",reference:"Sensitive data like personal phone numbers should not be tagged.",contact:{message:"{feature} might be tagged with private contact information"}},tag_suggests_area:{title:"Lines Tagged as Areas",message:"{feature} should be a closed area based on the tag \"{tag}\"",tip:"Find features that are tagged as lines and should possibly be tagged as areas",reference:"Areas must have connected endpoints."},unknown_road:{message:"{feature} has no classification",reference:"Roads without a specific type may not appear in maps or routing."},impossible_oneway:{title:"Impossible One-Ways",tip:"Find route issues with one-way features",waterway:{connected:{start:{message:"{feature} flows away from a connected waterway"},end:{message:"{feature} flows against a connected waterway"},reference:"Waterway segments should all flow in the same direction."}},highway:{start:{message:"{feature} is unreachable",reference:"One-way roads must be accessible via other roads."},end:{message:"{feature} has no outlet",reference:"One-way roads must lead to other roads."}}},unsquare_way:{title:"Unsquare Corners (up to {val}°)",message:"{feature} has unsquare corners",tip:"Find features with unsquare corners that can be drawn better",buildings:{reference:"Buildings with unsquare corners can often be drawn more accurately."}},fix:{connect_almost_junction:{annotation:"Connected very close features."},connect_crossing_features:{annotation:"Connected crossing features."},connect_endpoints:{title:"Connect the ends",annotation:"Connected the endpoints of a way."},connect_feature:{title:"Connect this feature"},connect_features:{title:"Connect the features"},continue_from_start:{title:"Continue drawing from start"},continue_from_end:{title:"Continue drawing from end"},delete_feature:{title:"Delete this feature"},ignore_issue:{title:"Ignore this issue"},merge_close_vertices:{annotation:"Merged very close points in a way."},merge_points:{title:"Merge these points"},move_points_apart:{title:"Move these points apart"},move_tags:{title:"Move the tags",annotation:"Moved tags."},remove_from_relation:{title:"Remove from relation"},remove_generic_name:{title:"Remove the name",annotation:"Removed a generic name."},remove_private_info:{annotation:"Removed private information."},remove_proprietary_data:{title:"Remove any proprietary data"},remove_tag:{title:"Remove the tag",annotation:"Removed tag."},remove_tags:{title:"Remove the tags"},reposition_features:{title:"Reposition the features"},reverse_feature:{title:"Reverse this feature"},select_preset:{title:"Select a feature type"},select_road_type:{title:"Select a road type"},set_as_inner:{title:"Set as inner"},set_as_outer:{title:"Set as outer"},square_feature:{title:"Square this feature"},tag_as_disconnected:{title:"Tag as disconnected",annotation:"Tagged very close features as disconnected."},tag_as_unsquare:{title:"Tag as physically unsquare",annotation:"Tagged a way as having unsquare corners."},tag_this_as_higher:{title:"Tag this as higher"},tag_this_as_lower:{title:"Tag this as lower"},upgrade_tags:{title:"Upgrade the tags",annotation:"Upgraded old tags."},use_bridge_or_tunnel:{title:"Use a bridge or tunnel"},use_different_layers:{title:"Use different layers"},use_different_levels:{title:"Use different levels"},use_tunnel:{title:"Use a tunnel"}}},intro:{done:"done",ok:"OK",graph:{block_number:"<value for addr:block_number>",city:"Three Rivers",county:"<value for addr:county>",district:"<value for addr:district>",hamlet:"<value for addr:hamlet>",neighbourhood:"<value for addr:neighbourhood>",postcode:"49093",province:"<value for addr:province>",quarter:"<value for addr:quarter>",state:"MI",subdistrict:"<value for addr:subdistrict>",suburb:"<value for addr:suburb>",countrycode:"us",name:{"1st-avenue":"1st Avenue","2nd-avenue":"2nd Avenue","4th-avenue":"4th Avenue","5th-avenue":"5th Avenue","6th-avenue":"6th Avenue","6th-street":"6th Street","7th-avenue":"7th Avenue","8th-avenue":"8th Avenue","9th-avenue":"9th Avenue","10th-avenue":"10th Avenue","11th-avenue":"11th Avenue","12th-avenue":"12th Avenue","access-point-employment":"Access Point Employment","adams-street":"Adams Street","andrews-elementary-school":"Andrews Elementary School","andrews-street":"Andrews Street","armitage-street":"Armitage Street","barrows-school":"Barrows School","battle-street":"Battle Street","bennett-street":"Bennett Street","bowman-park":"Bowman Park","collins-drive":"Collins Drive","conrail-railroad":"Conrail Railroad","conservation-park":"Conservation Park","constantine-street":"Constantine Street","cushman-street":"Cushman Street","dollar-tree":"Dollar Tree","douglas-avenue":"Douglas Avenue","east-street":"East Street","elm-street":"Elm Street","flower-street":"Flower Street","foster-street":"Foster Street","french-street":"French Street","garden-street":"Garden Street","gem-pawnbroker":"Gem Pawnbroker","golden-finch-framing":"Golden Finch Framing","grant-avenue":"Grant Avenue","hoffman-pond":"Hoffman Pond","hoffman-street":"Hoffman Street","hook-avenue":"Hook Avenue","jefferson-street":"Jefferson Street","kelsey-street":"Kelsey Street","lafayette-park":"LaFayette Park","las-coffee-cafe":"L.A.'s Coffee Cafe","lincoln-avenue":"Lincoln Avenue","lowrys-books":"Lowry's Books","lynns-garage":"Lynn's Garage","main-street-barbell":"Main Street Barbell","main-street-cafe":"Main Street Cafe","main-street-fitness":"Main Street Fitness","main-street":"Main Street","maple-street":"Maple Street","marina-park":"Marina Park","market-street":"Market Street","memory-isle-park":"Memory Isle Park","memory-isle":"Memory Isle","michigan-avenue":"Michigan Avenue","middle-street":"Middle Street","millard-street":"Millard Street","moore-street":"Moore Street","morris-avenue":"Morris Avenue","mural-mall":"Mural Mall","paisanos-bar-and-grill":"Paisano's Bar and Grill","paisley-emporium":"Paisley Emporium","paparazzi-tattoo":"Paparazzi Tattoo","pealer-street":"Pealer Street","pine-street":"Pine Street","pizza-hut":"Pizza Hut","portage-avenue":"Portage Avenue","portage-river":"Portage River","preferred-insurance-services":"Preferred Insurance Services","railroad-drive":"Railroad Drive","river-city-appliance":"River City Appliance","river-drive":"River Drive","river-road":"River Road","river-street":"River Street","riverside-cemetery":"Riverside Cemetery","riverwalk-trail":"Riverwalk Trail","riviera-theatre":"Riviera Theatre","rocky-river":"Rocky River","saint-joseph-river":"Saint Joseph River","scidmore-park-petting-zoo":"Scidmore Park Petting Zoo","scidmore-park":"Scidmore Park","scouter-park":"Scouter Park","sherwin-williams":"Sherwin-Williams","south-street":"South Street","southern-michigan-bank":"Southern Michigan Bank","spring-street":"Spring Street","sturgeon-river-road":"Sturgeon River Road","three-rivers-city-hall":"Three Rivers City Hall","three-rivers-elementary-school":"Three Rivers Elementary School","three-rivers-fire-department":"Three Rivers Fire Department","three-rivers-high-school":"Three Rivers High School","three-rivers-middle-school":"Three Rivers Middle School","three-rivers-municipal-airport":"Three Rivers Municipal Airport","three-rivers-post-office":"Three Rivers Post Office","three-rivers-public-library":"Three Rivers Public Library","three-rivers":"Three Rivers","unique-jewelry":"Unique Jewelry","walnut-street":"Walnut Street","washington-street":"Washington Street","water-street":"Water Street","west-street":"West Street","wheeler-street":"Wheeler Street","william-towing":"William Towing","willow-drive":"Willow Drive","wood-street":"Wood Street","world-fare":"World Fare"}},welcome:{title:"Welcome",welcome:"Welcome! This walkthrough will teach you the basics of editing on OpenStreetMap.",practice:"All of the data in this walkthrough is just for practicing, and any edits that you make in the walkthrough will not be saved.",words:"This walkthrough will introduce some new words and concepts. When we introduce a new word, we'll use *italics*.",mouse:"You can use any input device to edit the map, but this walkthrough assumes you have a mouse with left and right buttons. **If you want to attach a mouse, do so now, then click OK.**",leftclick:"When this tutorial asks you to click or double-click, we mean with the left button. On a trackpad it might be a single-click or single-finger tap. **Left-click {num} times.**",rightclick:"Sometimes we'll also ask you to right-click. This might be the same as control-click, or two-finger tap on a trackpad. Your keyboard might even have a 'menu' key that works like right-click. **Right-click {num} times.**",chapters:"So far, so good! You can use the buttons below to skip chapters at any time or to restart a chapter if you get stuck. Let's begin! **Click '{next}' to continue.**"},navigation:{title:"Navigation",drag:"The main map area shows OpenStreetMap data on top of a background.{br}You can drag the map by pressing and holding the left mouse button while moving the mouse around. You can also use the arrow keys on your keyboard. **Drag the map!**",zoom:"You can zoom in or out by scrolling with the mouse wheel or trackpad, or by clicking the {plus} / {minus} buttons. **Zoom the map!**",features:"We use the word *features* to describe the things that appear on the map. Anything in the real world can be mapped as a feature on OpenStreetMap.",points_lines_areas:"Map features are represented using *points, lines, or areas.*",nodes_ways:"In OpenStreetMap, points are sometimes called *nodes*, and lines and areas are sometimes called *ways*.",click_townhall:"All features on the map can be selected by clicking on them. **Click on the point to select it.**",selected_townhall:"Great! The point is now selected. Selected features are drawn with a pulsing glow.",editor_townhall:"When a feature is selected, the *feature editor* is displayed alongside the map.",preset_townhall:"The top part of the feature editor shows the feature's type. This point is a {preset}.",fields_townhall:"The middle part of the feature editor contains *fields* showing the feature's attributes, such as its name and address.",close_townhall:"**Close the feature editor by hitting escape or pressing the {button} button in the upper corner.**",search_street:"You can also search for features in the current view, or worldwide. **Search for '{name}'.**",choose_street:"**Choose {name} from the list to select it.**",selected_street:"Great! {name} is now selected.",editor_street:"The fields shown for a street are different than the fields that were shown for the town hall.{br}For this selected street, the feature editor shows fields like '{field1}' and '{field2}'. **Close the feature editor by hitting escape or pressing the {button} button.**",play:"Try moving the map and clicking on some other features to see what kinds of things can be added to OpenStreetMap. **When you are ready to continue to the next chapter, click '{next}'.**"},points:{title:"Points",add_point:"*Points* can be used to represent features such as shops, restaurants, and monuments.{br}They mark a specific location, and describe what's there. **Click the {button} Point button to add a new point.**",place_point:"To place the new point on the map, position your mouse cursor where the point should go, then left-click or press the spacebar. **Move the mouse pointer over this building, then left-click or press the spacebar.**",search_cafe:"There are many different features that can be represented by points. The point you just added is a cafe. **Search for '{preset}'.**",choose_cafe:"**Choose {preset} from the list.**",feature_editor:"The point is now marked as a cafe. Using the feature editor, we can add more information about the cafe.",add_name:"In OpenStreetMap, all of the fields are optional, and it's OK to leave a field blank if you are unsure.{br}Let's pretend that you have local knowledge of this cafe, and you know its name. **Add a name for the cafe.**",add_close:"The feature editor will remember all of your changes automatically. **When you are finished adding the name, hit escape, enter, or 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 cafe you just created.**",update:"Let's fill in some more details for this cafe. You can change its name, add a cuisine, or add an address. **Change the cafe details.**",update_close:"**When you are finished updating the cafe, hit escape, enter, or click the {button} button to close the feature editor.**",rightclick:"You can right-click on any feature to see the *edit menu*, which shows a list of editing operations that can be performed. **Right-click to select the point you created and show the edit menu.**","delete":"It's OK to delete features that don't exist in the real world.{br}Deleting a feature from OpenStreetMap removes it from the map that everyone uses, so you should make sure a feature is really gone before you delete it. **Click on the {button} button to delete the point.**",undo:"You can always undo any changes up until you save your edits to OpenStreetMap. **Click on the {button} button to undo the delete and get the point back.**",play:"Now that you know how to create and edit points, try creating a few more points for practice! **When you are ready to continue to the next chapter, click '{next}'.**"},areas:{title:"Areas",add_playground:"*Areas* are used to show the boundaries of features like lakes, buildings, and residential areas.{br}They can 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.**",start_playground:"Let's add this playground to the map by drawing an area. Areas are drawn by placing *nodes* along the outer edge of the feature. **Click or press spacebar to place a starting node on one of the corners of the playground.**",continue_playground:"Continue drawing the area by placing more nodes along the playground's edge. It is OK to connect the area to the existing walking paths.{br}Tip: You can hold down the '{alt}' key to prevent nodes from connecting to other features. **Continue drawing an area for the playground.**",finish_playground:"Finish the area by pressing enter, or clicking again on either the first or last node. **Finish drawing an area for the playground.**",search_playground:"**Search for '{preset}'.**",choose_playground:"**Choose {preset} from the list.**",add_field:"This playground doesn't have an official name, so we won't add anything in the Name field.{br}Instead let's add some additional details about the playground to the Description field. **Open the Add Field list.**",choose_field:"**Choose {field} from the list.**",retry_add_field:"You didn't select the {field} field. Let's try again.",describe_playground:"**Add a description, then click the {button} button to close the feature editor.**",play:"Good job! Try drawing a few more areas, and see what other kinds of area features you can add to OpenStreetMap. **When you are ready to continue to the next chapter, click '{next}'.**"},lines:{title:"Lines",add_line:"*Lines* are used to represent features such as roads, railroads, and rivers. **Click the {button} Line button to add a new line.**",start_line:"Here is a road that is missing. Let's add it!{br}In OpenStreetMap, lines should be drawn down the center of the road. You can drag and zoom the map while drawing if necessary. **Start a new line by clicking at the top end of this missing road.**",intersect:"Click or press spacebar to add more nodes to the line.{br}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.**",retry_intersect:"The road needs to intersect {name}. Let's try again!",continue_line:"Continue drawing the line for the new road. Remember that you can drag and zoom the map if needed.{br}When you are finished drawing, click on the last node again. **Finish drawing the road.**",choose_category_road:"**Select {category} from the list.**",choose_preset_residential:"There are many different types of roads, but this one is a residential road. **Choose the {preset} type.**",retry_preset_residential:"You didn't select the {preset} type. **Click here to choose again.**",name_road:"**Give this road a name, then hit escape, enter, or click the {button} button to close the feature editor.**",did_name_road:"Looks good! Next we will learn how to update the shape of a line.",update_line:"Sometimes you will need to change the shape of an existing line. Here is a road that doesn't look quite right.",add_node:"We can add some nodes to this line to improve its shape. One way to add a node is to double-click the line where you want to add a node. **Double-click on the line to create a new node.**",start_drag_endpoint:"When a line is selected, you can drag any of its nodes by clicking and holding down the left mouse button while you drag. **Drag the endpoint to the place where these roads should intersect.**",finish_drag_endpoint:"This spot looks good. **Release the left mouse button to finish dragging.**",start_drag_midpoint:"Small triangles are drawn at the *midpoints* between nodes. Another way to create a new node is to drag a midpoint to a new location. **Drag the midpoint triangle to create a new node along the curve of the road.**",continue_drag_midpoint:"This line is looking much better! Continue to adjust this line by double-clicking or dragging midpoints until the curve matches the road shape. **When you're happy with how the line looks, click OK.**",delete_lines:"It's OK to delete lines for roads that don't exist in the real world.{br}Here's an example where the city planned a {street} but never built it. We can improve this part of the map by deleting the extra lines.",rightclick_intersection:"The last real street is {street1}, so we will *split* {street2} at this intersection and remove everything above it. **Right click on the intersection node.**",split_intersection:"**Click on the {button} button to split {street}.**",retry_split:"You didn't click the Split button. Try again.",did_split_multi:"Good job! {street1} is now split into two pieces. The top part can be removed. **Click the top part of {street2} to select it.**",did_split_single:"**Click the top part of {street2} to select it.**",multi_select:"{selected} is now selected. Let's also select {other1}. You can shift-click to select multiple things. **Shift-click on {other2}.**",multi_rightclick:"Good! Both lines to delete are now selected. **Right-click on one of the lines to show the edit menu.**",multi_delete:"**Click on the {button} button to delete the extra lines.**",retry_delete:"You didn't click the Delete button. Try again.",play:"Great! Use the skills that you've learned in this chapter to practice editing some more lines. **When you are ready to continue to the next chapter, click '{next}'.**"},buildings:{title:"Buildings",add_building:"OpenStreetMap is the world's largest database of buildings.{br}You can help improve this database by tracing buildings that aren't already mapped. **Click the {button} Area button to add a new area.**",start_building:"Let's add this house to the map by tracing its outline.{br}Buildings should be traced around their footprint as accurately as possible. **Click or press spacebar to place a starting node on one of the corners of the building.**",continue_building:"Continue adding more nodes to trace the outline of the building. Remember that you can zoom in if you want to add more details.{br}Finish the building by pressing enter, or clicking again on either the first or last node. **Finish tracing the building.**",retry_building:"It looks like you had some trouble placing the nodes at the building corners. Try again!",choose_category_building:"**Choose {category} from the list.**",choose_preset_house:"There are many different types of buildings, but this one is clearly a house.{br}If you're not sure of the type, it's OK to just choose the generic Building type. **Choose the {preset} type.**",close:"**Hit escape or click the {button} button to close the feature editor.**",rightclick_building:"**Right-click to select the building you created and show the edit menu.**",square_building:"The house that you just added will look even better with perfectly square corners. **Click on the {button} button to square the building shape.**",retry_square:"You didn't click the Square button. Try again.",done_square:"See how the corners of the building moved into place? Let's learn another useful trick.",add_tank:"Next we'll trace this circular storage tank. **Click the {button} Area button to add a new area.**",start_tank:"Don't worry, you won't need to draw a perfect circle. Just draw an area inside the tank that touches its edge. **Click or press spacebar to place a starting node on the edge of the tank.**",continue_tank:"Add a few more nodes around the edge. The circle will be created outside the nodes that you draw.{br}Finish the area by pressing enter, or clicking again on either the first or last node. **Finish tracing the tank.**",search_tank:"**Search for '{preset}'.**",choose_tank:"**Choose {preset} from the list.**",rightclick_tank:"**Right-click to select the storage tank you created and show the edit menu.**",circle_tank:"**Click on the {button} button to make the tank a circle.**",retry_circle:"You didn't click the Circularize button. Try again.",play:"Great Job! Practice tracing a few more buildings, and try some of the other commands on the edit menu. **When you are ready to continue to the next chapter, click '{next}'.**"},startediting:{title:"Start Editing",help:"You're now ready to edit OpenStreetMap!{br}You can replay this walkthrough anytime or view more documentation by clicking the {button} Help button or pressing the '{key}' key.",shortcuts:"You can view a list of commands along with their keyboard shortcuts by pressing the '{key}' key.",save:"Don't forget to regularly save your changes!",start:"Start mapping!"}},shortcuts:{title:"Keyboard shortcuts",tooltip:"Show the keyboard shortcuts screen.",toggle:{key:"?"},key:{alt:"Alt",backspace:"Backspace",cmd:"Cmd",ctrl:"Ctrl","delete":"Delete",del:"Del",end:"End",enter:"Enter",esc:"Esc",home:"Home",option:"Option",pause:"Pause",pgdn:"PgDn",pgup:"PgUp","return":"Return",shift:"Shift",space:"Space"},gesture:{drag:"drag"},or:"-or-",browsing:{title:"Browsing",navigation:{title:"Navigation",pan:"Pan map",pan_more:"Pan map by one screenful",zoom:"Zoom in / Zoom out",zoom_more:"Zoom in / Zoom out by a lot"},help:{title:"Help",help:"Show help/documentation",keyboard:"Show keyboard shortcuts"},display_options:{title:"Display options",background:"Show background options",background_switch:"Switch back to last background",map_data:"Show map data options",fullscreen:"Enter full screen mode",sidebar:"Toggle sidebar",wireframe:"Toggle wireframe mode",osm_data:"Toggle OpenStreetMap data",minimap:"Toggle minimap"},selecting:{title:"Selecting features",select_one:"Select a single feature",select_multi:"Select multiple features",lasso:"Draw a selection lasso around features",search:"Find features matching search text"},with_selected:{title:"With feature selected",edit_menu:"Toggle edit menu",zoom_to:"Zoom to selected feature"},vertex_selected:{title:"With node selected",previous:"Jump to previous node",next:"Jump to next node",first:"Jump to first node",last:"Jump to last node",change_parent:"Switch parent way"}},editing:{title:"Editing",drawing:{title:"Drawing",focus_add_feature:"Focus the feature search field",add_point:"'Add point' mode",add_line:"'Add line' mode",add_area:"'Add area' mode",add_note:"'Add note' mode",add_favorite:"Add a favorite feature",place_point:"Place a point or note",disable_snap:"Hold to disable point snapping",stop_line:"Finish drawing a line or area"},operations:{title:"Operations",continue_line:"Continue a line at the selected node",merge:"Combine (merge) selected features",disconnect:"Disconnect features at the selected node",extract:"Extract a point from a feature",split:"Split a line into two at the selected node",reverse:"Reverse a line",move:"Move selected features",rotate:"Rotate selected features",orthogonalize:"Square corners of a line or area",straighten:"Straighten a line or points",circularize:"Circularize a closed line or area",reflect_long:"Reflect features across the longer axis",reflect_short:"Reflect features across the shorter axis","delete":"Delete selected features"},commands:{title:"Commands",copy:"Copy selected features",paste:"Paste copied features",undo:"Undo last action",redo:"Redo last action",save:"Save changes"}},tools:{title:"Tools",info:{title:"Information",all:"Toggle all information panels",background:"Toggle background panel",history:"Toggle history panel",location:"Toggle location panel",measurement:"Toggle measurement panel"}}},units:{feet:"{quantity} ft",miles:"{quantity} mi",square_feet:"{quantity} sq ft",square_miles:"{quantity} sq mi",acres:"{quantity} ac",meters:"{quantity} m",kilometers:"{quantity} km",square_meters:"{quantity} m²",square_kilometers:"{quantity} km²",hectares:"{quantity} ha",area_pair:"{area1} ({area2})",arcdegrees:"{quantity}°",arcminutes:"{quantity}′",arcseconds:"{quantity}″",north:"N",south:"S",east:"E",west:"W",coordinate:"{coordinate}{direction}",coordinate_pair:"{latitude}, {longitude}"},wikidata:{identifier:"Identifier",label:"Label",description:"Description"},presets:{categories:{"category-barrier":{name:"Barrier Features"},"category-building":{name:"Building Features"},"category-golf":{name:"Golf Features"},"category-landuse":{name:"Land Use Features"},"category-natural":{name:"Natural Features"},"category-path":{name:"Paths"},"category-rail":{name:"Rails"},"category-restriction":{name:"Restriction Features"},"category-road_major":{name:"Major Roads"},"category-road_minor":{name:"Minor Roads"},"category-road_service":{name:"Service Roads"},"category-route":{name:"Route Features"},"category-utility":{name:"Utility Features"},"category-water":{name:"Water Bodies"},"category-waterway":{name:"Waterways"}},fields:{access_simple:{label:"Allowed Access"},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 allowed by law; a right of way"},no:{title:"Prohibited",description:"Access not allowed to the general public"},permissive:{title:"Permissive",description:"Access allowed until such time as the owner revokes the permission"},"private":{title:"Private",description:"Access allowed only with permission of the owner on an individual basis"},designated:{title:"Designated",description:"Access allowed according to signs or specific local laws"},destination:{title:"Destination",description:"Access allowed only to reach a destination"},dismount:{title:"Dismount",description:"Access allowed but rider must dismount"},permit:{title:"Permit",description:"Access allowed only with a valid permit or license"}}},address:{label:"Address",placeholders:{block_number:"Block Number","block_number!jp":"Block No.",city:"City","city!jp":"City/Town/Village/Tokyo Special Ward","city!vn":"City/Town",conscriptionnumber:"123",country:"Country",county:"County","county!jp":"District",district:"District","district!vn":"Arrondissement/Town/District",floor:"Floor",hamlet:"Hamlet",housename:"Housename",housenumber:"123","housenumber!jp":"Building No./Lot No.",neighbourhood:"Neighbourhood","neighbourhood!jp":"Chōme/Aza/Koaza",place:"Place",postcode:"Postcode",province:"Province","province!jp":"Prefecture",quarter:"Quarter","quarter!jp":"Ōaza/Machi",state:"State",street:"Street",subdistrict:"Subdistrict","subdistrict!vn":"Ward/Commune/Townlet",suburb:"Suburb","suburb!jp":"Ward",unit:"Unit"}},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"},agrarian:{label:"Products"},air_conditioning:{label:"Air Conditioning"},amenity:{label:"Type"},animal_boarding:{label:"For Animals"},animal_breeding:{label:"For Animals"},animal_shelter:{label:"For Animals"},architect:{label:"Architect"},"area/highway":{label:"Type"},artist:{label:"Artist"},artwork_type:{label:"Type"},atm:{label:"ATM"},attraction:{label:"Type"},backrest:{label:"Backrest"},bar:{label:"Bar"},barrier:{label:"Type"},basin:{label:"Type"},"bath/open_air":{label:"Open Air"},"bath/sand_bath":{label:"Sand Bath"},"bath/type":{label:"Specialty",options:{onsen:"Japanese Onsen",foot_bath:"Foot Bath",hot_spring:"Hot Spring"}},beauty:{label:"Beauty Specialty"},bench:{label:"Bench"},bicycle_parking:{label:"Type"},bin:{label:"Waste Bin"},blood_components:{label:"Blood Components",options:{whole:"whole blood",plasma:"plasma",platelets:"platelets",stemcells:"stem cell samples"}},board_type:{label:"Type"},booth:{label:"Booth"},boules:{label:"Type"},boundary:{label:"Type"},brand:{label:"Brand"},brewery:{label:"Draft Beers"},bridge:{label:"Type",placeholder:"Default"},"bridge/support":{label:"Type"},building_area:{label:"Building"},building:{label:"Building"},"building/levels_building":{label:"Building Levels",placeholder:"2, 4, 6..."},"building/material":{label:"Material"},bunker_type:{label:"Type"},cables:{label:"Cables",placeholder:"1, 2, 3..."},"camera/direction":{label:"Direction (Degrees Clockwise)",placeholder:"45, 90, 180, 270"},"camera/mount":{label:"Camera Mount"},"camera/type":{label:"Camera Type",options:{fixed:"Fixed",panning:"Panning",dome:"Dome"}},capacity:{label:"Capacity",placeholder:"50, 100, 200..."},cash_in:{label:"Cash In"},castle_type:{label:"Type"},check_date:{label:"Last Checked Date"},clothes:{label:"Clothes"},club:{label:"Type"},collection_times:{label:"Collection Times"},colour:{label:"Color"},comment:{label:"Changeset Comment",placeholder:"Brief description of your contributions (required)"},communication_multi:{label:"Communication Types"},construction:{label:"Type"},consulate:{label:"Type"},"contact/webcam":{label:"Webcam URL",placeholder:"http://example.com/"},content:{label:"Content"},conveying:{label:"Movement Direction",options:{forward:"Forward",backward:"Backward",reversible:"Reversible"}},country:{label:"Country"},couplings:{label:"Couplings",placeholder:"1, 2, 3..."},covered:{label:"Covered"},craft:{label:"Type"},"crane/type":{label:"Crane Type",options:{portal_crane:"Portal Crane","floor-mounted_crane":"Floor-mounted Crane",travel_lift:"Travel Lift"}},crop:{label:"Crops"},crossing:{label:"Type"},cuisine:{label:"Cuisines"},currency_multi:{label:"Currency Types"},cutting:{label:"Type",placeholder:"Default"},cycle_network:{label:"Network"},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"}}},"dance/style":{label:"Dance Styles"},date:{label:"Date"},delivery:{label:"Delivery"},denomination:{label:"Denomination"},denotation:{label:"Denotation"},departures_board:{label:"Departures Board",options:{yes:"Yes",timetable:"Timetable",realtime:"Realtime",no:"None"}},description:{label:"Description"},design:{label:"Design"},destination_oneway:{label:"Destinations"},"destination/ref_oneway":{label:"Destination Road Numbers"},"destination/symbol_oneway":{label:"Destination Symbols"},devices:{label:"Devices",placeholder:"1, 2, 3..."},diaper:{label:"Diaper Changing Available"},diet_multi:{label:"Diet Types"},diplomatic:{label:"Type"},"diplomatic/services":{label:"Services"},direction_cardinal:{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"}},direction_clock:{label:"Direction",options:{clockwise:"Clockwise",anticlockwise:"Counterclockwise"}},direction_vertex:{label:"Direction",options:{forward:"Forward",backward:"Backward",both:"Both / All"}},direction:{label:"Direction (Degrees Clockwise)",placeholder:"45, 90, 180, 270"},dispensing:{label:"Dispenses Prescriptions"},display:{label:"Display"},distance:{label:"Distance"},dock:{label:"Type"},dog:{label:"Dogs",options:{yes:"Allowed",leashed:"Leashed Only",no:"Not Allowed"}},door_type:{label:"Type"},door:{label:"Door"},drive_through:{label:"Drive-Through"},duration:{label:"Duration",placeholder:"00:00"},electrified:{label:"Electrification",placeholder:"Contact Line, Electrified Rail...",options:{contact_line:"Contact Line",rail:"Electrified Rail",yes:"Yes (unspecified)",no:"No"}},elevation:{label:"Elevation"},email:{label:"Email",placeholder:"example@example.com"},embankment:{label:"Type",placeholder:"Default"},embassy:{label:"Type"},emergency_combo:{label:"Type"},emergency:{label:"Emergency"},enforcement:{label:"Type"},entrance:{label:"Type"},except:{label:"Exceptions"},faces:{label:"Faces"},fax:{label:"Fax",placeholder:"+31 42 123 4567"},fee:{label:"Fee"},fence_type:{label:"Type"},"fire_hydrant/diameter":{label:"Diameter (mm, in, or letters)"},"fire_hydrant/pressure":{label:"Pressure (bar)"},"fire_hydrant/type":{label:"Shape",options:{pillar:"Pillar/Aboveground",underground:"Underground",wall:"Wall",pipe:"Capped Pipe"}},fireplace:{label:"Fireplace"},fishing:{label:"Fishing"},fitness_station:{label:"Equipment Type"},fixme:{label:"Fix Me"},"flag/type":{label:"Flag Type"},floating:{label:"Floating"},flood_prone:{label:"Flood Prone"},ford:{label:"Type",placeholder:"Default"},frequency_electrified:{label:"Operating Frequency"},frequency:{label:"Operating Frequency"},from:{label:"From"},fuel_multi:{label:"Fuel Types"},fuel:{label:"Fuel"},gauge:{label:"Gauge"},gender:{label:"Gender",placeholder:"Unknown",options:{male:"Male",female:"Female",unisex:"Unisex"}},"generator/method":{label:"Method"},"generator/output/electricity":{label:"Power Output",placeholder:"50 MW, 100 MW, 200 MW..."},"generator/source":{label:"Source"},"generator/type":{label:"Type"},government:{label:"Type"},grape_variety:{label:"Grape Varieties"},guest_house:{label:"Type"},handicap:{label:"Handicap",placeholder:"1-18"},handrail:{label:"Handrail"},hashtags:{label:"Suggested Hashtags",placeholder:"#example"},healthcare:{label:"Type"},"healthcare/speciality":{label:"Specialties"},height_building:{label:"Building Height (Meters)"},height:{label:"Height (Meters)"},highspeed:{label:"High-Speed"},highway:{label:"Type"},historic:{label:"Type"},"historic/civilization":{label:"Historic Civilization"},"historic/wreck/date_sunk":{label:"Date Sunk"},"historic/wreck/visible_at_high_tide":{label:"Visible At High Tide"},"historic/wreck/visible_at_low_tide":{label:"Visible At Low Tide"},hoops:{label:"Hoops",placeholder:"1, 2, 4..."},horse_dressage:{label:"Dressage Riding",options:{"undefined":"No",equestrian:"Yes"}},horse_riding:{label:"Horseback Riding",options:{"undefined":"No",horse_riding:"Yes"}},horse_scale:{label:"Horseback Riding Difficulty",placeholder:"Difficult, Dangerous...",options:{common:"Easy: No problems or difficulties. (default)",demanding:"Use with caution: Uneven way, occasional difficult passages.",difficult:"Difficult: Way narrow and exposed. May contain obstacles to step over and narrow passages.",critical:"Borderline: Passable only for experienced riders and horses. Major obstacles. Bridges should be examined carefully.",dangerous:"Dangerous: Passable only for very experienced riders and horses and only in good weather. Dismount.",impossible:"Impassable: Way or bridge not passable for horses. Too narrow, insuffient support, obstacles like ladders. Danger of life."}},horse_stables:{label:"Riding Stable",options:{"undefined":"No",stables:"Yes"}},iata:{label:"IATA"},icao:{label:"ICAO"},incline_steps:{label:"Incline",options:{up:"Up",down:"Down"}},incline:{label:"Incline"},indoor_type:{label:"Type"},indoor:{label:"Indoor"},industrial:{label:"Type"},information:{label:"Type"},inscription:{label:"Inscription"},intermittent_yes:{label:"Intermittent"},intermittent:{label:"Intermittent"},internet_access:{label:"Internet Access",options:{yes:"Yes",no:"No",wlan:"Wifi",wired:"Wired",terminal:"Terminal"}},"internet_access/fee":{label:"Internet Access Fee"},"internet_access/ssid":{label:"Wifi Network Name"},interval:{label:"Interval"},junction_line:{label:"Junction",options:{roundabout:"Roundabout",circular:"Traffic Circle",jughandle:"Jughandle"}},"junction/ref_oneway":{label:"Junction Number"},kerb:{label:"Curb"},"kerb/height":{label:"Height"},label:{label:"Label"},lamp_type:{label:"Type"},landuse:{label:"Type"},lanes:{label:"Lanes",placeholder:"1, 2, 3..."},language_multi:{label:"Languages"},layer:{label:"Layer",placeholder:"0"},leaf_cycle_singular:{label:"Leaf Cycle",options:{evergreen:"Evergreen",deciduous:"Deciduous",semi_evergreen:"Semi-Evergreen",semi_deciduous:"Semi-Deciduous"}},leaf_cycle:{label:"Leaf Cycle",options:{evergreen:"Evergreen",deciduous:"Deciduous",semi_evergreen:"Semi-Evergreen",semi_deciduous:"Semi-Deciduous",mixed:"Mixed"}},leaf_type_singular:{label:"Leaf Type",options:{broadleaved:"Broadleaved",needleleaved:"Needleleaved",leafless:"Leafless"}},leaf_type:{label:"Leaf Type",options:{broadleaved:"Broadleaved",needleleaved:"Needleleaved",mixed:"Mixed",leafless:"Leafless"}},leisure:{label:"Type"},length:{label:"Length (Meters)"},level:{label:"Level"},levels:{label:"Levels",placeholder:"2, 4, 6..."},liaison:{label:"Type"},lit:{label:"Lit"},location_pool:{label:"Location",options:{outdoor:"Outdoor",indoor:"Indoor",roof:"Rooftop"}},location:{label:"Location"},lock:{label:"Lock"},man_made:{label:"Type"},manhole:{label:"Type"},manufacturer:{label:"Manufacturer"},map_size:{label:"Coverage"},map_type:{label:"Type"},material:{label:"Material"},maxheight:{label:"Max Height",placeholder:"4, 4.5, 5, 14'0\", 14'6\", 15'0\""},maxspeed:{label:"Speed Limit",placeholder:"40, 50, 60..."},"maxspeed/advisory":{label:"Advisory Speed Limit",placeholder:"40, 50, 60..."},maxstay:{label:"Max Stay"},maxweight_bridge:{label:"Max Weight"},maxweight:{label:"Max Weight"},memorial:{label:"Type"},microbrewery:{label:"Microbrewery"},minspeed:{label:"Minimum Speed Limit",placeholder:"20, 30, 40..."},monitoring_multi:{label:"Monitoring"},"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_bicycle:{label:"Network Type",placeholder:"Local, Regional, National, International",options:{lcn:"Local",rcn:"Regional",ncn:"National",icn:"International"}},network_foot:{label:"Network Type",placeholder:"Local, Regional, National, International",options:{lwn:"Local",rwn:"Regional",nwn:"National",iwn:"International"}},network_horse:{label:"Network Type",placeholder:"Local, Regional, National, International",options:{lhn:"Local",rhn:"Regional",nhn:"National",ihn:"International"}},network_road:{label:"Network"},network:{label:"Network"},note:{label:"Note"},office:{label:"Type"},oneway_yes:{label:"One Way",options:{"undefined":"Assumed to be Yes",yes:"Yes",no:"No",reversible:"Reversible",alternating:"Alternating"}},oneway:{label:"One Way",options:{"undefined":"Assumed to be No",yes:"Yes",no:"No",reversible:"Reversible",alternating:"Alternating"}},"oneway/bicycle":{label:"One Way (Bicycles)"},opening_date:{label:"Expected Opening Date"},opening_hours:{label:"Hours",placeholder:"Unknown"},operator:{label:"Operator"},outdoor_seating:{label:"Outdoor Seating"},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"}},payment_multi_fee:{label:"Payment Types"},payment_multi:{label:"Payment Types"},phases:{label:"Phases",placeholder:"1, 2, 3..."},phone:{label:"Telephone",placeholder:"+31 42 123 4567"},"piste/difficulty_downhill":{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/difficulty_nordic":{label:"Difficulty",placeholder:"Easy, Intermediate, Advanced...",options:{novice:"Novice - Flat, no effort needed",easy:"Easy - Soft hills, short steep section",intermediate:"Intermediate - Steep section",advanced:"Advanced - Narrow, steep or icy section, sharp turn",expert:"Expert - Dangerous terrain around"}},"piste/difficulty_skitour":{label:"Difficulty",placeholder:"Easy, Intermediate, Advanced...",options:{novice:"Novice - L: <30° incline",easy:"Easy - WS: 30-35° incline",intermediate:"Intermediate - ZS: 35-40° incline",advanced:"Advanced - S: 40-45° incline",expert:"Expert - SS: 45–50° incline",freeride:"Freeride - AS: 50–55° incline",extreme:"Extreme - EX: >55° incline"}},"piste/difficulty":{label:"Difficulty",placeholder:"Easy, Intermediate, Advanced...",options:{novice:"Novice",easy:"Easy",intermediate:"Intermediate",advanced:"Advanced",expert:"Expert",freeride:"Freeride",extreme:"Extreme"}},"piste/grooming_downhill":{label:"Grooming",options:{classic:"Classic",mogul:"Mogul",backcountry:"Backcountry - no grooming"}},"piste/grooming_hike":{label:"Grooming",options:{classic:"Classic - Winter Hiking",backcountry:"Backcountry - Snowshoeing"}},"piste/grooming_nordic":{label:"Grooming",options:{classic:"Classic",backcountry:"Backcountry, no grooming","classic+skating":"Classic and Skating",scooter:"Scooter/Snowmobile",skating:"Skating"}},"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",connection:"Connection"}},place:{label:"Type"},plant:{label:"Plant"},"plant/output/electricity":{label:"Power Output",placeholder:"500 MW, 1000 MW, 2000 MW..."},playground:{label:"Type"},"playground/baby":{label:"Baby Seat"},"playground/max_age":{label:"Maximum Age"},"playground/min_age":{label:"Minimum Age"},population:{label:"Population"},power_supply:{label:"Power Supply"},power:{label:"Type"},produce:{label:"Produce"},product:{label:"Products"},railway:{label:"Type"},"railway/position":{label:"Milestone Position",placeholder:"Distance to one decimal (123.4)"},"railway/signal/direction":{label:"Direction",options:{forward:"Forward",backward:"Backward",both:"Both / All"}},rating:{label:"Power Rating"},recycling_accepts:{label:"Accepts"},recycling_type:{label:"Type",placeholder:"Container, Center",options:{container:"Container",centre:"Center"}},ref_aeroway_gate:{label:"Gate Number"},ref_golf_hole:{label:"Hole Number",placeholder:"1-18"},ref_highway_junction:{label:"Junction Number"},ref_platform:{label:"Platform Number"},ref_road_number:{label:"Road Number"},ref_room_number:{label:"Room Number"},ref_route:{label:"Route Number"},ref_runway:{label:"Runway Number",placeholder:"e.g. 01L/19R"},ref_stop_position:{label:"Stop Number"},ref_taxiway:{label:"Taxiway Name",placeholder:"e.g. A5"},ref:{label:"Reference Code"},"ref/isil":{label:"ISIL Code"},relation:{label:"Type"},religion:{label:"Religion"},reservation:{label:"Reservations",options:{yes:"Accepted",no:"Not Accepted",required:"Required",recommended:"Recommended"}},resort:{label:"Type"},resource:{label:"Resources"},restriction:{label:"Type"},restrictions:{label:"Turn Restrictions"},"roof/colour":{label:"Roof Color"},room:{label:"Type"},rooms:{label:"Rooms"},route_master:{label:"Type"},route:{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"}},salt:{label:"Salt"},sanitary_dump_station:{label:"Toilet Disposal"},screen:{label:"Screens",placeholder:"1, 4, 8…"},scuba_diving:{label:"Services"},"seamark/beacon_isolated_danger/shape":{label:"Shape"},"seamark/beacon_lateral/category":{label:"Category",options:{port:"Port",starboard:"Starboard",waterway_left:"Waterway Left",waterway_right:"Waterway Right",danger_left:"Danger Left",danger_right:"Danger Right"}},"seamark/beacon_lateral/colour":{label:"Color",options:{red:"Red",green:"Green",grey:"Grey"}},"seamark/beacon_lateral/shape":{label:"Shape"},"seamark/beacon_lateral/system":{label:"System",options:{"iala-a":"IALA A","iala-b":"IALA B",cevni:"CEVNI",other:"Other"}},"seamark/buoy_lateral/category":{label:"Category",options:{port:"Port",starboard:"Starboard",channel_left:"Channel Left",channel_right:"Channel Right",waterway_left:"Waterway Left",waterway_right:"Waterway Right",danger_left:"Danger Left",danger_right:"Danger Right",preferred_channel_port:"Preferred Channel Port",preferred_channel_starboard:"Preferred Channel Starboard"}},"seamark/buoy_lateral/colour":{label:"Color",options:{red:"Red",green:"Green","red;white;red;white":"Red-White-Red-White","green;white;green;white":"Green-White-Green-White","red;green;red":"Red-Green-Red","green;red;green":"Green-Red-Green",white:"White",yellow:"Yellow"}},"seamark/buoy_lateral/shape":{label:"Shape"},"seamark/buoy_lateral/system":{label:"System",options:{"iala-a":"IALA A","iala-b":"IALA B",cevni:"CEVNI",other:"Other"}},"seamark/mooring/category":{label:"Category"},"seamark/type":{label:"Seamark"},"seamark/wreck/category":{label:"Category"},seasonal:{label:"Seasonal"},seats:{label:"Seats",placeholder:"2, 4, 6..."},second_hand:{label:"Sells Used",placeholder:"Yes, No, Only",options:{yes:"Yes",no:"No",only:"Only"}},self_service:{label:"Self-Service"},service_rail:{label:"Service Type",options:{spur:"Spur",yard:"Yard",siding:"Siding",crossover:"Crossover"}},service_times:{label:"Service Times"},service:{label:"Type"},"service/bicycle":{label:"Services"},"service/vehicle":{label:"Services"},shelter_type:{label:"Type"},shelter:{label:"Shelter"},shop:{label:"Type"},"siren/purpose":{label:"Purpose"},"siren/type":{label:"Type",options:{pneumatic:"Pneumatic",electronic:"Electronic",other:"Other"}},site_type:{label:"Site Type"},site:{label:"Type"},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"},social_facility:{label:"Type"},source:{label:"Sources"},sport_ice:{label:"Sports"},sport_racing_motor:{label:"Sports"},sport_racing_nonmotor:{label:"Sports"},sport:{label:"Sports"},stars:{label:"Stars"},start_date:{label:"Start Date"},step_count:{label:"Number of Steps"},stop:{label:"Stop Type",options:{all:"All Ways",minor:"Minor Road"}},street_cabinet:{label:"Type"},structure_waterway:{label:"Structure",placeholder:"Unknown",options:{tunnel:"Tunnel"}},structure:{label:"Structure",placeholder:"Unknown",options:{bridge:"Bridge",tunnel:"Tunnel",embankment:"Embankment",cutting:"Cutting",ford:"Ford"}},studio:{label:"Type"},substance:{label:"Substance"},substation:{label:"Type"},supervised:{label:"Supervised"},support:{label:"Support"},surface:{label:"Surface"},surveillance:{label:"Surveillance Kind"},"surveillance/type":{label:"Surveillance Type",options:{camera:"Camera",guard:"Guard",ALPR:"Automatic License Plate Reader"}},"surveillance/zone":{label:"Surveillance Zone"},"survey/date":{label:"Last Survey Date"},swimming_pool:{label:"Type"},"switch":{label:"Type",options:{mechanical:"Mechanical",circuit_breaker:"Circuit Breaker",disconnector:"Disconnector",earthing:"Earthing"}},tactile_paving:{label:"Tactile Paving"},takeaway:{label:"Takeaway",placeholder:"Yes, No, Takeaway Only...",options:{yes:"Yes",no:"No",only:"Takeaway Only"}},target:{label:"Target"},tidal:{label:"Tidal"},to:{label:"To"},"toilets/disposal":{label:"Disposal",options:{flush:"Flush",pitlatrine:"Pit Latrine",chemical:"Chemical",bucket:"Bucket"}},"toilets/handwashing":{label:"Handwashing"},"toilets/position":{label:"Positions"},toll:{label:"Toll"},tomb:{label:"Type"},tourism:{label:"Type"},"tower/construction":{label:"Construction",placeholder:"Guyed, Lattice, Concealed, ..."},"tower/type":{label:"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"}},trade:{label:"Type"},traffic_calming:{label:"Type"},traffic_sign:{label:"Traffic Sign"},"traffic_sign/direction":{label:"Direction",options:{forward:"Forward",backward:"Backward",both:"Both / All"}},traffic_signals:{label:"Type"},"traffic_signals/direction":{label:"Direction",options:{forward:"Forward",backward:"Backward",both:"Both / All"}},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"}},transformer:{label:"Type",options:{distribution:"Distribution",generator:"Generator",converter:"Converter",traction:"Traction",auto:"Autotransformer",phase_angle_regulator:"Phase Angle Regulator",auxiliary:"Auxiliary",yes:"Unknown"}},trees:{label:"Trees"},trolley_wire:{label:"Overhead Trolley Wires"},tunnel:{label:"Type",placeholder:"Default"},usage_rail:{label:"Usage Type",options:{main:"Main",branch:"Branch",industrial:"Industrial",military:"Military",test:"Test",tourism:"Tourism"}},vending:{label:"Types of Goods"},visibility:{label:"Visibility",options:{house:"Up to 5m (16ft)",street:"5 to 20m (16 to 65ft)",area:"Over 20m (65ft)"}},"volcano/status":{label:"Volcano Status",options:{active:"Active",dormant:"Dormant",extinct:"Extinct"}},"volcano/type":{label:"Volcano Type",options:{stratovolcano:"Stratovolcano",shield:"Shield",scoria:"Scoria"}},voltage_electrified:{label:"Voltage"},voltage:{label:"Voltage"},"voltage/primary":{label:"Primary Voltage"},"voltage/secondary":{label:"Secondary Voltage"},"voltage/tertiary":{label:"Tertiary Voltage"},wall:{label:"Type"},water_point:{label:"Water Point"},water_source:{label:"Water Source"},water_volume:{label:"Water Reserve Volume (m³)"},water:{label:"Type"},waterway:{label:"Type"},website:{label:"Website",placeholder:"https://example.com"},wetland:{label:"Type"},wheelchair:{label:"Wheelchair Access"},wholesale:{label:"Wholesale"},width:{label:"Width (Meters)"},wikidata:{label:"Wikidata"},wikipedia:{label:"Wikipedia"},windings:{label:"Windings",placeholder:"1, 2, 3..."},"windings/configuration":{label:"Windings Configuration",options:{star:"Star / Wye",delta:"Delta","open-delta":"Open Delta",zigzag:"Zig Zag",open:"Open",scott:"Scott",leblanc:"Leblanc"}}},presets:{aerialway:{name:"Aerialway",terms:""},aeroway:{name:"Aeroway",terms:""},amenity:{name:"Amenity",terms:""},attraction:{name:"Attraction",terms:""},boundary:{name:"Boundary",terms:""},building_point:{name:"Building",terms:""},embankment:{name:"Embankment",terms:""},emergency:{name:"Emergency Feature",terms:""},highway:{name:"Highway",terms:""},indoor:{name:"Indoor Feature",terms:""},landuse:{name:"Land Use",terms:""},leisure:{name:"Leisure",terms:""},man_made:{name:"Man Made",terms:""},natural:{name:"Natural",terms:""},place:{name:"Place",terms:""},playground:{name:"Playground Equipment",terms:""},power:{name:"Power",terms:""},railway:{name:"Railway",terms:""},seamark:{name:"Seamark",terms:""},tourism:{name:"Tourism",terms:""},waterway:{name:"Waterway",terms:""},address:{name:"Address",terms:""},"advertising/billboard":{name:"Billboard",terms:""},"advertising/column":{name:"Advertising Column",terms:""},"aerialway/station":{name:"Aerialway Station",terms:""},"aerialway/cable_car":{name:"Cable Car",terms:"tramway,ropeway"},"aerialway/chair_lift":{name:"Chair Lift",terms:""},"aerialway/drag_lift":{name:"Drag Lift",terms:""},"aerialway/gondola":{name:"Gondola",terms:""},"aerialway/goods":{name:"Goods Aerialway",terms:""},"aerialway/j-bar":{name:"J-bar Lift",terms:"jbar"},"aerialway/magic_carpet":{name:"Magic Carpet Lift",terms:""},"aerialway/mixed_lift":{name:"Mixed 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/t-bar":{name:"T-bar Lift",terms:"tbar"},"aerialway/zip_line":{name:"Zip Line",terms:"aerial runway,canopy,flying fox,foefie slide,gravity propelled aerial ropeslide,Tyrolean traverse,zip wire,zip-line,zipline,zipwire"},"aeroway/aerodrome":{name:"Airport",terms:"aerodrome,aeroway,airplane,airport,jet,plane"},"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/jet_bridge":{name:"Jet Bridge",terms:"aerobridge,air jetty,airbridge,finger,gangway,jet way,jetway,passenger boarding bridge,PBB,portal,skybridge,terminal gate connector"},"aeroway/runway":{name:"Runway",terms:"landing strip"},"aeroway/taxiway":{name:"Taxiway",terms:""},"aeroway/terminal":{name:"Airport Terminal",terms:"airport,aerodrome"},"aeroway/windsock":{name:"Windsock",terms:""},"allotments/plot":{name:"Community Garden Plot",terms:""},"amenity/bus_station":{name:"Bus Station / Terminal",terms:""},"amenity/coworking_space":{name:"Coworking Space",terms:""},"amenity/embassy":{name:"Embassy",terms:""},"amenity/ferry_terminal":{name:"Ferry Station / Terminal",terms:""},"amenity/nursing_home":{name:"Nursing Home",terms:""},"amenity/recycling":{name:"Recycling",terms:"bin,can,bottle,glass,garbage,rubbish,scrap,trash"},"amenity/register_office":{name:"Register Office",terms:""},"amenity/scrapyard":{name:"Scrap Yard",terms:""},"amenity/swimming_pool":{name:"Swimming Pool",terms:""},"amenity/animal_boarding":{name:"Animal Boarding Facility",terms:"boarding,cat,cattery,dog,horse,kennel,kitten,pet,pet boarding,pet care,pet hotel,puppy,reptile"},"amenity/animal_breeding":{name:"Animal Breeding Facility",terms:"breeding,bull,cat,cow,dog,horse,husbandry,kitten,livestock,pet breeding,puppy,reptile"},"amenity/animal_shelter":{name:"Animal Shelter",terms:"adoption,aspca,cat,dog,horse,kitten,pet care,pet rescue,puppy,raptor,reptile,rescue,spca"},"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/bar/lgbtq":{name:"LGBTQ+ Bar",terms:"gay bar,lesbian bar,lgbtq bar,lgbt bar,lgb bar"},"amenity/bbq":{name:"Barbecue/Grill",terms:"bbq,grill"},"amenity/bench":{name:"Bench",terms:"seat"},"amenity/bicycle_parking":{name:"Bicycle Parking",terms:"bike"},"amenity/bicycle_parking/building":{name:"Bicycle Parking Garage",terms:"Multi-Storey Bicycle Park,Multi-Storey Bike Park,Bike Parking Station"},"amenity/bicycle_parking/lockers":{name:"Bicycle Lockers",terms:"Bike Lockers"},"amenity/bicycle_parking/shed":{name:"Bicycle Shed",terms:"Bike Shed"},"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:"Biergarten",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/cafe":{name:"Cafe",terms:"bistro,coffee,tea"},"amenity/car_pooling":{name:"Car Pooling",terms:""},"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/clinic/abortion":{name:"Abortion Clinic",terms:""},"amenity/clinic/fertility":{name:"Fertility Clinic",terms:"egg,fertility,reproductive,sperm,ovulation"},"amenity/clock":{name:"Clock",terms:""},"amenity/clock/sundial":{name:"Sundial",terms:"gnomon,shadow"},"amenity/college":{name:"College Grounds",terms:"university,undergraduate school"},"amenity/community_centre":{name:"Community Center",terms:"event,hall"},"amenity/community_centre/lgbtq":{name:"LGBTQ+ Community Center",terms:"lgbtq event,lgbtq hall,lgbt event,lgbt hall,lgb event,lgb hall"},"amenity/compressed_air":{name:"Compressed Air",terms:""},"amenity/conference_centre":{name:"Convention Center",terms:"auditorium,conference,exhibition,exposition,lecture"},"amenity/courthouse":{name:"Courthouse",terms:""},"amenity/crematorium":{name:"Crematorium",terms:"cemetery,funeral"},"amenity/dentist":{name:"Dentist",terms:"tooth,teeth"},"amenity/dive_centre":{name:"Dive Center",terms:"diving,scuba"},"amenity/doctors":{name:"Doctor",terms:"medic*,physician"},"amenity/dojo":{name:"Dojo / Martial Arts Academy",terms:"martial arts,dojang"},"amenity/drinking_water":{name:"Drinking Water",terms:"potable water source,water fountain,drinking fountain,bubbler,water tap"},"amenity/driving_school":{name:"Driving School",terms:""},"amenity/events_venue":{name:"Events Venue",terms:"banquet hall,baptism,Bar Mitzvah,Bat Mitzvah,birthdays,celebrations,conferences,confirmation,meetings,parties,party,quinceañera,reunions,weddings"},"amenity/fast_food":{name:"Fast Food",terms:"restaurant,takeaway"},"amenity/fast_food/ice_cream":{name:"Ice Cream Fast Food",terms:""},"amenity/fast_food/burger":{name:"Burger Fast Food",terms:"breakfast,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/fast_food/chicken":{name:"Chicken Fast Food",terms:"breakfast,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/fast_food/donut":{name:"Donut Fast Food",terms:"breakfast,brunch,cafe,canteen,coffee,dine,diner,donut,doughnut,dining,eat,lunch,table"},"amenity/fast_food/fish_and_chips":{name:"Fish & Chips Fast Food",terms:"breakfast,cafe,café,dine,dining,dinner,drive-in,eat,grill,lunch,table,french fries"},"amenity/fast_food/kebab":{name:"Kebab Fast Food",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/fast_food/mexican":{name:"Mexican Fast Food",terms:"breakfast,dine,dining,dinner,drive-in,eat,grill,lunch,table,tacos,burritos,enchiladas,fajitas,nachos,tortillas,salsa,tamales,quesadillas"},"amenity/fast_food/pizza":{name:"Pizza Fast Food",terms:"dine,dining,dinner,drive-in,eat,lunch,table,deep dish,thin crust,slice"},"amenity/fast_food/sandwich":{name:"Sandwich Fast Food",terms:"breakfast,cafe,café,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/fire_station":{name:"Fire Station",terms:""},"amenity/food_court":{name:"Food Court",terms:"fast food,restaurant,food"},"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,infirmary,institution,sanatorium,sanitarium,sick,surgery,ward"},"amenity/hunting_stand":{name:"Hunting Stand",terms:"game,gun,lookout,rifle,shoot*,wild,watch"},"amenity/ice_cream":{name:"Ice Cream Shop",terms:"gelato,sorbet,sherbet,frozen,yogurt"},"amenity/internet_cafe":{name:"Internet Cafe",terms:"cybercafe,taxiphone,teleboutique,coffee,cafe,net,lanhouse"},"amenity/kindergarten":{name:"Preschool/Kindergarten Grounds",terms:"kindergarden,pre-school"},"amenity/language_school":{name:"Language School",terms:"esl"},"amenity/library":{name:"Library",terms:"book"},"amenity/love_hotel":{name:"Love Hotel",terms:""},"amenity/marketplace":{name:"Marketplace",terms:""},"amenity/monastery":{name:"Monastery Grounds",terms:"abbey,basilica,bethel,cathedral,chancel,chantry,chapel,church,fold,house of God,house of prayer,house of worship,minster,mission,monastery,mosque,oratory,parish,sacellum,sanctuary,shrine,synagogue,tabernacle,temple"},"amenity/money_transfer":{name:"Money Transfer Station",terms:"money order,check,bill,currency,finance,wire transfer,cable,person to person,cash to cash,exchange"},"amenity/motorcycle_parking":{name:"Motorcycle Parking",terms:""},"amenity/music_school":{name:"Music School",terms:"school of music"},"amenity/nightclub":{name:"Nightclub",terms:"disco*,night club,dancing,dance club"},"amenity/nightclub/lgbtq":{name:"LGBTQ+ Nightclub",terms:"gay nightclub,lesbian nightclub,lgbtq nightclub,lgbt nightclub,lgb nightclub"},"amenity/parking_entrance":{name:"Parking Garage Entrance/Exit",terms:""},"amenity/parking_space":{name:"Parking Space",terms:""},"amenity/parking":{name:"Parking Lot",terms:"automobile parking,car lot,car parking,rv parking,truck parking,vehicle parking"},"amenity/parking/multi-storey":{name:"Multilevel Parking Garage",terms:"car,indoor parking,multistorey car park,parkade,parking building,parking deck,parking garage,parking ramp,parking structure"},"amenity/parking/underground":{name:"Underground Parking",terms:"automobile parking,car lot,car parking,rv parking,subsurface parking,truck parking,vehicle parking"},"amenity/payment_centre":{name:"Payment Center",terms:"check,tax pay,bill pay,currency,finance,cash,money"},"amenity/payment_terminal":{name:"Payment Terminal",terms:"interactive kiosk,ekiosk,atm,bill pay,tax pay,phone pay,finance,cash,money transfer,card"},"amenity/pharmacy":{name:"Pharmacy Counter",terms:"apothecary,drug store,drugstore,med*,prescription"},"amenity/photo_booth":{name:"Photo Booth",terms:"photobooth,photo,booth,kiosk,camera"},"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:"Christian 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/hindu":{name:"Hindu Temple",terms:"kovil,devasthana,mandir,kshetram,alayam,shrine,temple"},"amenity/place_of_worship/jewish":{name:"Jewish Synagogue",terms:"jewish"},"amenity/place_of_worship/muslim":{name:"Muslim Mosque",terms:"muslim"},"amenity/place_of_worship/shinto":{name:"Shinto Shrine",terms:"kami,torii"},"amenity/place_of_worship/sikh":{name:"Sikh Temple",terms:"gurudwara,temple"},"amenity/place_of_worship/taoist":{name:"Taoist Temple",terms:"daoist,monastery,temple"},"amenity/planetarium":{name:"Planetarium",terms:"museum,astronomy,observatory"},"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/prep_school":{name:"Test Prep / Tutoring School",terms:"academic,ACT,SAT,homework,math,reading,test prep,tutoring,writing"},"amenity/prison":{name:"Prison Grounds",terms:"cell,jail"},"amenity/pub":{name:"Pub",terms:"alcohol,drink,dive,beer,bier,booze"},"amenity/pub/lgbtq":{name:"LGBTQ+ Pub",terms:"gay pub,lesbian pub,lgbtq pub,lgbt pub,lgb pub"},"amenity/pub/microbrewery":{name:"Brewpub",terms:"alcohol,drink,dive,beer,bier,booze,craft brewery,microbrewery,small batch brewery"},"amenity/public_bath":{name:"Public Bath",terms:"onsen,foot bath,hot springs"},"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_centre":{name:"Recycling Center",terms:"bottle,can,dump,glass,garbage,rubbish,scrap,trash"},"amenity/recycling_container":{name:"Recycling Container",terms:"bin,can,bottle,glass,garbage,rubbish,scrap,trash"},"amenity/restaurant":{name:"Restaurant",terms:"bar,breakfast,cafe,café,canteen,coffee,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/restaurant/american":{name:"American Restaurant",terms:"bar,breakfast,cafe,café,canteen,coffee,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/restaurant/asian":{name:"Asian Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/restaurant/chinese":{name:"Chinese Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/restaurant/french":{name:"French Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/restaurant/german":{name:"German Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/restaurant/greek":{name:"Greek Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table,gyros,pitas,olives"},"amenity/restaurant/indian":{name:"Indian Restaurant",terms:"bar,breakfast,dine,dining,dinner,drive-in,eat,grill,lunch,table,curry"},"amenity/restaurant/italian":{name:"Italian Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table,pasta,pizza"},"amenity/restaurant/japanese":{name:"Japanese Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/restaurant/mexican":{name:"Mexican Restaurant",terms:"bar,breakfast,dine,dining,dinner,drive-in,eat,grill,lunch,table,tacos,burritos,enchiladas,fajitas,nachos,tortillas,salsa,tamales,quesadillas"},"amenity/restaurant/noodle":{name:"Noodle Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table,ramen noodles,soup,soba noodles,cellophane noodles,rice noodles"},"amenity/restaurant/pizza":{name:"Pizza Restaurant",terms:"bar,dine,dining,dinner,drive-in,eat,lunch,table,deep dish,thin crust,slice"},"amenity/restaurant/seafood":{name:"Seafood Restaurant",terms:"bar,breakfast,cafe,café,dine,dining,dinner,drive-in,eat,grill,lunch,table,fish,shellfish,molluscs,crustaceans,clams,oysters,lobsters,crab,shrimp,squid,octopus"},"amenity/restaurant/steakhouse":{name:"Steakhouse",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table,steak house,chop house,beef"},"amenity/restaurant/sushi":{name:"Sushi Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/restaurant/thai":{name:"Thai Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/restaurant/turkish":{name:"Turkish Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/restaurant/vietnamese":{name:"Vietnamese Restaurant",terms:"bar,breakfast,cafe,café,canteen,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/shelter/gazebo":{name:"Gazebo",terms:""},"amenity/shelter/lean_to":{name:"Lean-To",terms:""},"amenity/shelter/picnic_shelter":{name:"Picnic Shelter",terms:"pavilion"},"amenity/shelter/public_transport":{name:"Transit Shelter",terms:"bus stop,metro stop,public transit shelter,public transport shelter,tram stop shelter,waiting"},"amenity/shower":{name:"Shower",terms:"rain closet"},"amenity/smoking_area":{name:"Smoking Area",terms:""},"amenity/social_centre":{name:"Social Center",terms:"event,fraternal,fraternity,hall,organization,professional,society,sorority,union,vetern"},"amenity/social_facility":{name:"Social Facility",terms:""},"amenity/social_facility/ambulatory_care":{name:"Ambulatory Care",terms:""},"amenity/social_facility/food_bank":{name:"Food Bank",terms:""},"amenity/social_facility/group_home":{name:"Elderly Group Home",terms:"old,senior,living,care home,assisted living"},"amenity/social_facility/homeless_shelter":{name:"Homeless Shelter",terms:"houseless,unhoused,displaced"},"amenity/social_facility/nursing_home":{name:"Nursing Home",terms:"elderly,living,nursing,old,senior,assisted living"},"amenity/studio":{name:"Studio",terms:"recording,radio,television"},"amenity/taxi":{name:"Taxi Stand",terms:"cab"},"amenity/telephone":{name:"Telephone",terms:"phone"},"amenity/theatre":{name:"Theater",terms:"theatre,performance,play,musical"},"amenity/theatre/type/amphi":{name:"Amphitheatre",terms:"open air,outdoor,greek,ampi"},"amenity/toilets":{name:"Toilets",terms:"bathroom,restroom,outhouse,privy,head,lavatory,latrine,water closet,WC,W.C."},"amenity/toilets/disposal/flush":{name:"Flush Toilets",terms:"bathroom,head,lavatory,privy,restroom,water closet,WC,W.C."},"amenity/toilets/disposal/pitlatrine":{name:"Pit Latrine",terms:"head,lavatory,long drop,outhouse,pit toilet,privy"},"amenity/townhall":{name:"Town Hall",terms:"village,city,government,courthouse,municipal"},"amenity/toy_library":{name:"Toy Library",terms:"game,toy"},"amenity/university":{name:"University Grounds",terms:"college,graduate school,PhD program,master's degree program"},"amenity/vehicle_inspection":{name:"Vehicle Inspection",terms:"car inspection"},"amenity/vending_machine":{name:"Vending Machine",terms:""},"amenity/vending_machine/cigarettes":{name:"Cigarette Vending Machine",terms:"cigarette"},"amenity/vending_machine/coffee":{name:"Coffee Vending Machine",terms:"coffee"},"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/electronics":{name:"Electronics Vending Machine",terms:"cable,charger,earbud,headphone,phone,tablet"},"amenity/vending_machine/elongated_coin":{name:"Flat Coin Vending Machine",terms:"coin,crush,elongated,flatten,penny,souvenir"},"amenity/vending_machine/excrement_bags":{name:"Excrement Bag Dispenser",terms:"excrement bags,poop,waste,dog,animal"},"amenity/vending_machine/feminine_hygiene":{name:"Feminine Hygiene Vending Machine",terms:"condom,tampon,pad,woman,women,menstrual hygiene products,personal care"},"amenity/vending_machine/food":{name:"Food Vending Machine",terms:"food"},"amenity/vending_machine/fuel":{name:"Gas Pump",terms:"petrol,fuel,gasoline,propane,diesel,lng,cng,biodiesel"},"amenity/vending_machine/ice_cream":{name:"Ice Cream Vending Machine",terms:"chocolate,ice cream,frozen,popsicle,vanilla"},"amenity/vending_machine/newspapers":{name:"Newspaper Vending Machine",terms:"newspaper"},"amenity/vending_machine/parcel_pickup_dropoff":{name:"Parcel Pickup/Dropoff Locker",terms:"mail,parcel,pickup"},"amenity/vending_machine/parcel_pickup":{name:"Parcel Pickup Locker",terms:"amazon,locker,mail,parcel,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/stamps":{name:"Postage Vending Machine",terms:"mail,postage,stamp"},"amenity/vending_machine/sweets":{name:"Snack Vending Machine",terms:"candy,gum,chip,pretzel,cookie,cracker"},"amenity/veterinary":{name:"Veterinary",terms:"pet clinic,veterinarian,animal hospital,pet doctor"},"amenity/waste_basket":{name:"Waste Basket",terms:"bin,garbage,rubbish,litter,trash"},"amenity/waste_disposal":{name:"Garbage Dumpster",terms:"garbage,rubbish,litter,trash"},"amenity/waste_transfer_station":{name:"Waste Transfer Station",terms:"dump,garbage,recycling,rubbish,scrap,trash"},"amenity/waste/dog_excrement":{name:"Dog Excrement Bin",terms:"bin,garbage,rubbish,litter,trash,poo,dog"},"amenity/water_point":{name:"RV Drinking Water",terms:""},"amenity/watering_place":{name:"Animal Watering Place",terms:""},area:{name:"Area",terms:"polygon"},"area/highway":{name:"Road Surface",terms:"area:highway,edge of pavement,highway area,highway shape,pavement,road shape,street area"},"attraction/amusement_ride":{name:"Amusement Ride",terms:"theme park,carnival ride"},"attraction/animal":{name:"Animal Enclosure",terms:"amphibian,animal park,aquarium,bear,bird,fish,insect,lion,mammal,monkey,penguin,reptile,safari,theme park,tiger,zoo"},"attraction/big_wheel":{name:"Big Wheel",terms:"ferris wheel,theme park,amusement ride"},"attraction/bumper_car":{name:"Bumper Car",terms:"theme park,dodgem cars,autoscooter"},"attraction/bungee_jumping":{name:"Bungee Jumping",terms:"theme park,bungy jumping,jumping platform"},"attraction/carousel":{name:"Carousel",terms:"theme park,roundabout,merry-go-round,galloper,jumper,horseabout,flying horses"},"attraction/dark_ride":{name:"Dark Ride",terms:"theme park,ghost train"},"attraction/drop_tower":{name:"Drop Tower",terms:"theme park,amusement ride,gondola,tower,big drop"},"attraction/maze":{name:"Maze",terms:"theme park,amusement ride,labyrinth"},"attraction/pirate_ship":{name:"Pirate Ship",terms:"theme park,carnival ride,amusement ride"},"attraction/river_rafting":{name:"River Rafting",terms:"theme park,aquatic park,water park,rafting simulator,river rafting ride,river rapids ride"},"attraction/roller_coaster":{name:"Roller Coaster",terms:"theme park,amusement ride"},"attraction/summer_toboggan":{name:"Summer Toboggan",terms:"alpine slide,mountain coaster"},"attraction/train":{name:"Tourist Train",terms:"theme park,rackless train,road train,Tschu-Tschu train,dotto train,park train"},"attraction/water_slide":{name:"Water Slide",terms:"theme park,aquatic park,water park,flumes,water chutes,hydroslides"},barrier:{name:"Barrier",terms:""},"barrier/entrance":{name:"Entrance",terms:""},"barrier/block":{name:"Block",terms:""},"barrier/bollard":{name:"Bollard",terms:""},"barrier/border_control":{name:"Border Control",terms:""},"barrier/cattle_grid":{name:"Cattle Grid",terms:""},"barrier/chain":{name:"Chain",terms:""},"barrier/city_wall":{name:"City Wall",terms:""},"barrier/cycle_barrier":{name:"Cycle Barrier",terms:""},"barrier/ditch":{name:"Trench",terms:""},"barrier/fence":{name:"Fence",terms:""},"barrier/fence/railing":{name:"Railing",terms:"railing,handrail,guard rail"},"barrier/gate":{name:"Gate",terms:""},"barrier/guard_rail":{name:"Guard Rail",terms:"guardrail,traffic barrier,crash barrier,median barrier,roadside barrier,Armco barrier"},"barrier/hedge":{name:"Hedge",terms:""},"barrier/height_restrictor":{name:"Height Restrictor",terms:""},"barrier/kerb":{name:"Curb",terms:""},"barrier/kerb/flush":{name:"Flush Curb",terms:"even curb,level curb,tactile curb"},"barrier/kerb/lowered":{name:"Lowered Curb",terms:"curb cut,curb ramp,kerb ramp,dropped kerb,pram ramp"},"barrier/kerb/raised":{name:"Raised Curb",terms:""},"barrier/kerb/rolled":{name:"Rolled Curb",terms:"gutter"},"barrier/kissing_gate":{name:"Kissing Gate",terms:""},"barrier/lift_gate":{name:"Lift Gate",terms:""},"barrier/retaining_wall":{name:"Retaining Wall",terms:""},"barrier/sally_port":{name:"Sally Port",terms:"Postern,castle side gate"},"barrier/stile":{name:"Stile",terms:""},"barrier/toll_booth":{name:"Toll Booth",terms:""},"barrier/turnstile":{name:"Turnstile",terms:"baffle gate,turnstyle"},"barrier/wall":{name:"Wall",terms:""},"boundary/administrative":{name:"Administrative Boundary",terms:""},"bridge/support":{name:"Bridge Support",terms:""},"bridge/support/pier":{name:"Bridge Pier",terms:""},building_part:{name:"Building Part",terms:"roof,simple 3D buildings"},building:{name:"Building",terms:""},"building/bunker":{name:"Bunker",terms:""},"building/entrance":{name:"Entrance/Exit",terms:""},"building/train_station":{name:"Train Station Building",terms:""},"building/apartments":{name:"Apartment Building",terms:""},"building/barn":{name:"Barn",terms:""},"building/boathouse":{name:"Boathouse",terms:""},"building/bungalow":{name:"Bungalow",terms:"home,detached"},"building/cabin":{name:"Cabin",terms:""},"building/carport":{name:"Carport",terms:"covered parking space,garage,car,porch"},"building/cathedral":{name:"Cathedral Building",terms:""},"building/chapel":{name:"Chapel Building",terms:""},"building/church":{name:"Church Building",terms:""},"building/civic":{name:"Civic 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/farm_auxiliary":{name:"Farm Building",terms:""},"building/farm":{name:"Farm House",terms:""},"building/garage":{name:"Garage",terms:""},"building/garages":{name:"Garages",terms:""},"building/grandstand":{name:"Grandstand",terms:"tribune,stand,stands,bleachers"},"building/greenhouse":{name:"Greenhouse",terms:""},"building/hangar":{name:"Hangar Building",terms:""},"building/hospital":{name:"Hospital Building",terms:""},"building/hotel":{name:"Hotel Building",terms:""},"building/house":{name:"House",terms:"home,family,residence,dwelling"},"building/houseboat":{name:"Houseboat",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/mosque":{name:"Mosque Building",terms:""},"building/pavilion":{name:"Pavilion Building",terms:"sports"},"building/public":{name:"Public Building",terms:""},"building/residential":{name:"Residential Building",terms:""},"building/retail":{name:"Retail Building",terms:""},"building/roof":{name:"Roof",terms:""},"building/ruins":{name:"Building Ruins",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/service":{name:"Service Building",terms:""},"building/shed":{name:"Shed",terms:""},"building/stable":{name:"Stable",terms:""},"building/stadium":{name:"Stadium Building",terms:""},"building/static_caravan":{name:"Static Mobile Home",terms:""},"building/temple":{name:"Temple Building",terms:""},"building/terrace":{name:"Row Houses",terms:"home,terrace,brownstone,family,residence,dwelling"},"building/transportation":{name:"Transportation Building",terms:""},"building/university":{name:"University Building",terms:"college"},"building/warehouse":{name:"Warehouse",terms:""},"camp_site/camp_pitch":{name:"Camp Pitch",terms:"tent,rv"},club:{name:"Club",terms:"social"},"club/sport":{name:"Sports Club",terms:"athletics club,sporting club,sports association,sports society"},craft:{name:"Craft",terms:""},"craft/jeweler":{name:"Jeweler",terms:""},"craft/locksmith":{name:"Locksmith",terms:""},"craft/optician":{name:"Optician",terms:""},"craft/tailor":{name:"Tailor",terms:"clothes,suit"},"craft/agricultural_engines":{name:"Argricultural Engines Mechanic",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:"alcohol,beer,beverage,bier,booze,cider"},"craft/carpenter":{name:"Carpenter",terms:"woodworker"},"craft/carpet_layer":{name:"Carpet Layer",terms:""},"craft/caterer":{name:"Caterer",terms:""},"craft/chimney_sweeper":{name:"Chimney Sweeper",terms:""},"craft/clockmaker":{name:"Clockmaker",terms:""},"craft/confectionery":{name:"Candy Maker",terms:"sweet,candy"},"craft/distillery":{name:"Distillery",terms:"alcohol,beverage,bourbon,booze,brandy,gin,hooch,liquor,mezcal,moonshine,rum,scotch,spirits,still,tequila,vodka,whiskey,whisky"},"craft/dressmaker":{name:"Dressmaker",terms:"seamstress"},"craft/electrician":{name:"Electrician",terms:"power,wire"},"craft/electronics_repair":{name:"Electronics Repair Shop",terms:""},"craft/floorer":{name:"Floorer",terms:""},"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/joiner":{name:"Joiner",terms:"furniture"},"craft/key_cutter":{name:"Key Cutter",terms:""},"craft/metal_construction":{name:"Metal Construction",terms:""},"craft/painter":{name:"Painter",terms:""},"craft/parquet_layer":{name:"Parquet Layer",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/sculptor":{name:"Sculptor",terms:""},"craft/shoemaker":{name:"Shoemaker",terms:"cobbler"},"craft/stonemason":{name:"Stonemason",terms:"masonry"},"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:""},"emergency/designated":{name:"Emergency Access Designated",terms:""},"emergency/destination":{name:"Emergency Access Destination",terms:""},"emergency/no":{name:"Emergency Access No",terms:""},"emergency/official":{name:"Emergency Access Official",terms:""},"emergency/private":{name:"Emergency Access Private",terms:""},"emergency/yes":{name:"Emergency Access Yes",terms:""},"emergency/ambulance_station":{name:"Ambulance Station",terms:"EMS,EMT,rescue"},"emergency/defibrillator":{name:"Defibrillator",terms:"AED"},"emergency/fire_alarm":{name:"Fire Alarm Call Box",terms:""},"emergency/fire_extinguisher":{name:"Fire Extinguisher",terms:""},"emergency/fire_hose":{name:"Fire Hose",terms:""},"emergency/fire_hydrant":{name:"Fire Hydrant",terms:"fire plug,fire water well,hydrant"},"emergency/first_aid_kit":{name:"First Aid Kit",terms:"bandage,first aid,med,med kit,medic*,medkit"},"emergency/life_ring":{name:"Life Ring",terms:"life buoy,kisby ring,kisbie ring,perry buoy"},"emergency/lifeguard":{name:"Lifeguard",terms:"CPR,rescue"},"emergency/phone":{name:"Emergency Phone",terms:""},"emergency/siren":{name:"Siren",terms:"air raid,loud,noise,storm,tornado,warning"},"emergency/water_tank":{name:"Emergency Water Tank",terms:"water tank,cistern,reservoir"},entrance:{name:"Entrance/Exit",terms:"entrance,exit,door"},ford:{name:"Ford",terms:""},"golf/bunker":{name:"Sand Trap",terms:"hazard,bunker"},"golf/cartpath":{name:"Golf Cartpath",terms:""},"golf/driving_range":{name:"Driving Range",terms:""},"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/path":{name:"Golf Walking Path",terms:""},"golf/rough":{name:"Rough",terms:""},"golf/tee":{name:"Tee Box",terms:"teeing ground"},"golf/water_hazard":{name:"Water Hazard",terms:""},healthcare:{name:"Healthcare Facility",terms:"clinic,doctor,disease,health,institution,sick,surgery,wellness"},"healthcare/alternative":{name:"Alternative Medicine",terms:"acupuncture,anthroposophical,applied kinesiology,aromatherapy,ayurveda,herbalism,homeopathy,hydrotherapy,hypnosis,naturopathy,osteopathy,reflexology,reiki,shiatsu,traditional,tuina,unani"},"healthcare/alternative/chiropractic":{name:"Chiropractor",terms:"back,pain,spine"},"healthcare/audiologist":{name:"Audiologist",terms:"ear,hearing,sound"},"healthcare/birthing_center":{name:"Birthing Center",terms:"baby,childbirth,delivery,labour,labor,pregnancy"},"healthcare/blood_donation":{name:"Blood Donor Center",terms:"blood bank,blood donation,blood transfusion,apheresis,plasmapheresis,plateletpheresis,stem cell donation"},"healthcare/hospice":{name:"Hospice",terms:"terminal,illness"},"healthcare/laboratory":{name:"Medical Laboratory",terms:"medical_laboratory,medical_lab,blood_check"},"healthcare/midwife":{name:"Midwife",terms:"baby,childbirth,delivery,labour,labor,pregnancy"},"healthcare/occupational_therapist":{name:"Occupational Therapist",terms:"therapist,therapy"},"healthcare/optometrist":{name:"Optometrist",terms:"eye,glasses,lasik,lenses,vision"},"healthcare/physiotherapist":{name:"Physiotherapist",terms:"physical,therapist,therapy"},"healthcare/podiatrist":{name:"Podiatrist",terms:"foot,feet,nails"},"healthcare/psychotherapist":{name:"Psychotherapist",terms:"anxiety,counselor,depression,mental health,mind,suicide,therapist,therapy"},"healthcare/rehabilitation":{name:"Rehabilitation Facility",terms:"rehab,therapist,therapy"},"healthcare/speech_therapist":{name:"Speech Therapist",terms:"speech,therapist,therapy,voice"},"highway/bus_stop":{name:"Bus Stop",terms:""},"highway/crossing":{name:"Crossing",terms:""},"highway/bridleway":{name:"Bridle Path",terms:"bridleway,equestrian,horse,trail"},"highway/bus_guideway":{name:"Bus Guideway",terms:""},"highway/construction":{name:"Road Closed",terms:"closed,closure,construction"},"highway/corridor":{name:"Indoor Corridor",terms:"gallery,hall,hallway,indoor,passage,passageway"},"highway/crossing/zebra-raised":{name:"Marked Crosswalk (Raised)",terms:"zebra crossing,marked crossing,crosswalk,flat top,hump,speed,slow"},"highway/crossing/zebra":{name:"Marked Crosswalk",terms:"zebra crossing,marked crossing,crosswalk"},"highway/crossing/marked-raised":{name:"Marked Crosswalk (Raised)",terms:"zebra crossing,marked crossing,crosswalk,flat top,hump,speed,slow"},"highway/crossing/marked":{name:"Marked Crosswalk",terms:"zebra crossing,marked crossing,crosswalk"},"highway/crossing/unmarked-raised":{name:"Unmarked Crossing (Raised)",terms:"flat top,hump,speed,slow"},"highway/crossing/unmarked":{name:"Unmarked Crossing",terms:""},"highway/cycleway":{name:"Cycle Path",terms:"bike path,bicyle path"},"highway/cycleway/crossing":{name:"Cycle Crossing",terms:""},"highway/cycleway/bicycle_foot":{name:"Cycle & Foot Path",terms:"bicycle and foot path,bike and pedestrian path,green way,greenway,mixed-use trail,multi-use trail,segregated trail"},"highway/cycleway/crossing/marked":{name:"Marked Cycle Crossing",terms:"cycle crosswalk,cycle path crossing,cycleway crossing,bicycle crossing,bike crossing"},"highway/cycleway/crossing/unmarked":{name:"Unmarked Cycle Crossing",terms:"cycle path crossing,cycleway crossing,bicycle crossing,bike crossing"},"highway/elevator":{name:"Elevator",terms:"lift"},"highway/emergency_bay":{name:"Emergency Stopping Place",terms:"Highway Emergency Bay"},"highway/footway":{name:"Foot Path",terms:"hike,hiking,promenade,trackway,trail,walk"},"highway/footway/crossing":{name:"Pedestrian Crossing",terms:""},"highway/footway/zebra-raised":{name:"Marked Crosswalk (Raised)",terms:"zebra crossing,marked crossing,crosswalk,flat top,hump,speed,slow"},"highway/footway/zebra":{name:"Marked Crosswalk",terms:"zebra crossing,marked crossing,crosswalk"},"highway/footway/conveying":{name:"Moving Walkway",terms:"moving sidewalk,autwalk,skywalk,travolator,travelator,travellator,conveyor"},"highway/footway/marked-raised":{name:"Marked Crosswalk (Raised)",terms:"zebra crossing,marked crossing,crosswalk,flat top,hump,speed,slow"},"highway/footway/marked":{name:"Marked Crosswalk",terms:"marked foot path crossing,marked crossing,marked pedestrian crosswalk,zebra crossing"},"highway/footway/sidewalk":{name:"Sidewalk",terms:"pavement,sidepath"},"highway/footway/unmarked-raised":{name:"Unmarked Crossing (Raised)",terms:"flat top,hump,speed,slow"},"highway/footway/unmarked":{name:"Unmarked Crossing",terms:"unmarked foot path crossing,unmarked crosswalk,unmarked pedestrian crossing"},"highway/give_way":{name:"Yield Sign",terms:"give way,yield,sign"},"highway/living_street":{name:"Living Street",terms:""},"highway/milestone":{name:"Highway Milestone",terms:"mile marker,mile post,mile stone,mileage marker,milemarker,milepost"},"highway/mini_roundabout":{name:"Mini-Roundabout",terms:"traffic circle"},"highway/motorway_junction":{name:"Motorway Junction / Exit",terms:"exit"},"highway/motorway_link":{name:"Motorway Link",terms:"exit,ramp,road,street,on ramp,off ramp"},"highway/motorway":{name:"Motorway",terms:"autobahn,expressway,freeway,highway,interstate,parkway,road,street,thruway,turnpike"},"highway/passing_place":{name:"Passing Place",terms:"turnout, pullout"},"highway/path":{name:"Path",terms:"hike,hiking,trackway,trail,walk"},"highway/pedestrian_area":{name:"Pedestrian Area",terms:"center,centre,plaza,quad,square,walkway"},"highway/pedestrian_line":{name:"Pedestrian Street",terms:"center,centre,plaza,quad,square,walkway"},"highway/primary_link":{name:"Primary Link",terms:"on ramp,off ramp,ramp,road,street"},"highway/primary":{name:"Primary Road",terms:"road,street"},"highway/raceway":{name:"Racetrack (Motorsport)",terms:"auto*,formula one,kart,motocross,nascar,race*,track"},"highway/residential":{name:"Residential Road",terms:"road,street"},"highway/rest_area":{name:"Rest Area",terms:"rest stop"},"highway/road":{name:"Unknown Road",terms:"road,street"},"highway/secondary_link":{name:"Secondary Link",terms:"on ramp,off ramp,ramp,road,street"},"highway/secondary":{name:"Secondary Road",terms:"road,street"},"highway/service":{name:"Service Road",terms:"road,street"},"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/speed_camera":{name:"Speed Camera",terms:""},"highway/steps":{name:"Steps",terms:"stairs,staircase,stairway"},"highway/steps/conveying":{name:"Escalator",terms:"moving staircase,moving stairway,people mover"},"highway/stop":{name:"Stop Sign",terms:"stop,halt,sign"},"highway/street_lamp":{name:"Street Lamp",terms:"streetlight,street light,lamp,light,gaslight"},"highway/tertiary_link":{name:"Tertiary Link",terms:"on ramp,off ramp,ramp,road,street"},"highway/tertiary":{name:"Tertiary Road",terms:"road,street"},"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_mirror":{name:"Traffic Mirror",terms:"blind spot,convex,corner,curved,roadside,round,safety,sphere,visibility"},"highway/traffic_signals":{name:"Traffic Signals",terms:"light,stoplight,traffic light"},"highway/trailhead":{name:"Trailhead",terms:"hiking,mile zero,mountain biking,mountaineering,trail endpoint,trail start,staging area,trekking"},"highway/trunk_link":{name:"Trunk Link",terms:"on ramp,off ramp,ramp,road,street"},"highway/trunk":{name:"Trunk Road",terms:"road,street"},"highway/turning_circle":{name:"Turning Circle",terms:"cul-de-sac"},"highway/turning_loop":{name:"Turning Loop (Island)",terms:"cul-de-sac"},"highway/unclassified":{name:"Minor/Unclassified Road",terms:"road,street"},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/castle/fortress":{name:"Historic Fortress",terms:"citadel,military"},"historic/castle/palace":{name:"Palace",terms:"Royal Residence,royal,king,queen"},"historic/castle/stately":{name:"Château",terms:"Historic Country House,Stately Home,nobility,gentry,representative"},"historic/city_gate":{name:"City Gate",terms:"Town Gate"},"historic/fort":{name:"Historic Fort",terms:"military"},"historic/manor":{name:"Manor House",terms:"Mansion,gentry,nobility,estate"},"historic/memorial":{name:"Memorial",terms:"dedicatory,epitaph,remember,remembrance,memory,monument,stolperstein"},"historic/memorial/plaque":{name:"Commemorative Plaque",terms:"dedicatory,epitaph,historical marker,remember,remembrance,memory"},"historic/monument":{name:"Monument",terms:""},"historic/ruins":{name:"Ruins",terms:""},"historic/tomb":{name:"Tomb",terms:""},"historic/wayside_cross":{name:"Wayside Cross",terms:""},"historic/wayside_shrine":{name:"Wayside Shrine",terms:""},"historic/wreck":{name:"Shipwreck",terms:"hull,mast,maritime,remains,ship,boat"},"indoor/corridor_line":{name:"Indoor Corridor",terms:""},"indoor/area":{name:"Indoor Area",terms:"indoor space"},"indoor/corridor":{name:"Indoor Corridor",terms:"concourse,foyer,hallway,passageway"},"indoor/door":{name:"Indoor Door",terms:"doorframe,doorway,portal,room access,threshold"},"indoor/room":{name:"Room",terms:"antechamber,anteroom,atrium,cell,chamber,concourse,foyer,indoor room,lobby,vestibule"},"indoor/wall":{name:"Indoor Wall",terms:"indoor barrier,room divider,room partition"},"internet_access/wlan":{name:"Wi-Fi Hotspot",terms:"wi-fi,wifi,hotspot"},junction:{name:"Junction",terms:""},"junction/circular":{name:"Traffic Circle",terms:""},"junction/jughandle":{name:"Jughandle",terms:""},"junction/roundabout":{name:"Roundabout",terms:""},"landuse/basin":{name:"Basin",terms:""},"landuse/farm":{name:"Farmland",terms:""},"landuse/pond":{name:"Pond",terms:""},"landuse/reservoir":{name:"Reservoir",terms:""},"landuse/allotments":{name:"Community Garden",terms:"allotment,garden"},"landuse/aquaculture":{name:"Aquaculture",terms:"fish farm,crustacean,algae,aquafarming,shrimp farm,oyster farm,mariculture,algaculture"},"landuse/brownfield":{name:"Brownfield",terms:""},"landuse/cemetery":{name:"Cemetery",terms:""},"landuse/churchyard":{name:"Churchyard",terms:""},"landuse/commercial":{name:"Commercial Area",terms:""},"landuse/construction":{name:"Construction",terms:""},"landuse/farmland":{name:"Farmland",terms:"crop,grow,plant"},"landuse/farmyard":{name:"Farmyard",terms:"crop,grow,plant"},"landuse/forest":{name:"Managed Forest",terms:"cut,forest,forestry,lumber,silviculture,tree"},"landuse/garages":{name:"Garage Landuse",terms:""},"landuse/grass":{name:"Grass",terms:""},"landuse/greenfield":{name:"Greenfield",terms:""},"landuse/greenhouse_horticulture":{name:"Greenhouse Horticulture",terms:"flower,greenhouse,horticulture,grow,vivero"},"landuse/harbour":{name:"Harbor",terms:"boat"},"landuse/industrial":{name:"Industrial Area",terms:""},"landuse/industrial/scrap_yard":{name:"Scrap Yard",terms:"car,junk,metal,salvage,scrap,u-pull-it,vehicle,wreck,yard"},"landuse/industrial/slaughterhouse":{name:"Slaughterhouse",terms:"abattoir,beef,butchery,calf,chicken,cow,killing house,meat,pig,pork,poultry,shambles,stockyard"},"landuse/landfill":{name:"Landfill",terms:"dump"},"landuse/meadow":{name:"Meadow",terms:"grazing,hay field,pasture"},"landuse/military":{name:"Military Area",terms:""},"landuse/military/airfield":{name:"Military Airfield",terms:"aerodrome,aeroway,air force,airplane,airport,army,base,bomb,fight,force,guard,heli*,jet,marine,navy,plane,troop,war"},"landuse/military/barracks":{name:"Barracks",terms:"air force,army,base,fight,force,guard,marine,navy,troop,war"},"landuse/military/bunker":{name:"Military Bunker",terms:"air force,army,base,fight,force,guard,marine,navy,troop,war"},"landuse/military/checkpoint":{name:"Checkpoint",terms:"air force,army,base,force,guard,marine,navy,troop,war"},"landuse/military/danger_area":{name:"Danger Area",terms:"air force,army,base,blast,bomb,explo*,force,guard,mine,marine,navy,troop,war"},"landuse/military/naval_base":{name:"Naval Base",terms:"base,fight,force,guard,marine,navy,ship,sub,troop,war"},"landuse/military/nuclear_explosion_site":{name:"Nuclear Explosion Site",terms:"atom,blast,bomb,detonat*,nuke,site,test"},"landuse/military/obstacle_course":{name:"Obstacle Course",terms:"army,base,force,guard,marine,navy,troop,war"},"landuse/military/office":{name:"Military Office",terms:"air force,army,base,enlist,fight,force,guard,marine,navy,recruit,troop,war"},"landuse/military/range":{name:"Military Range",terms:"air force,army,base,fight,fire,force,guard,gun,marine,navy,rifle,shoot*,snip*,train,troop,war"},"landuse/military/training_area":{name:"Training Area",terms:"air force,army,base,fight,fire,force,guard,gun,marine,navy,rifle,shoot*,snip*,train,troop,war"},"landuse/orchard":{name:"Orchard",terms:"fruit"},"landuse/plant_nursery":{name:"Plant Nursery",terms:"flower,garden,grow,vivero"},"landuse/quarry":{name:"Quarry",terms:""},"landuse/railway":{name:"Railway Corridor",terms:"rail,train,track"},"landuse/recreation_ground":{name:"Recreation Ground",terms:"playing fields"},"landuse/religious":{name:"Religious Area",terms:""},"landuse/residential":{name:"Residential Area",terms:""},"landuse/residential/apartments":{name:"Apartment Complex",terms:"flat,residence,tenement"},"landuse/retail":{name:"Retail Area",terms:""},"landuse/vineyard":{name:"Vineyard",terms:"grape,wine"},"landuse/winter_sports":{name:"Winter Sports Area",terms:"piste area,ski area,ski hill,ski mountain,ski resort,snow board area,snowboard area"},"leisure/adult_gaming_centre":{name:"Adult Gaming Center",terms:"gambling,slot machine"},"leisure/amusement_arcade":{name:"Amusement Arcade",terms:"pay-to-play games,video games,driving simulators,pinball machines"},"leisure/bandstand":{name:"Bandstand",terms:""},"leisure/beach_resort":{name:"Beach Resort",terms:""},"leisure/bird_hide":{name:"Bird Hide",terms:"machan,ornithology"},"leisure/bleachers":{name:"Bleachers",terms:"crowd,bench,sports,stand,stands,seat,seating"},"leisure/bowling_alley":{name:"Bowling Alley",terms:"bowling center"},"leisure/common":{name:"Common",terms:"open space"},"leisure/dance":{name:"Dance Hall",terms:"ballroom,jive,swing,tango,waltz"},"leisure/dancing_school":{name:"Dance School",terms:"jive,swing,tango,waltz,dance teaching"},"leisure/disc_golf_course":{name:"Disc Golf Course",terms:"disk golf,frisbee golf,flying disc golf,frolf,ultimate"},"leisure/dog_park":{name:"Dog Park",terms:""},"leisure/firepit":{name:"Firepit",terms:"fireplace,campfire"},"leisure/fishing":{name:"Fishing Spot",terms:"angler"},"leisure/fitness_centre":{name:"Gym / Fitness Center",terms:"health,gym,leisure,studio"},"leisure/fitness_centre/yoga":{name:"Yoga Studio",terms:"studio,asanas,modern yoga,meditation"},"leisure/fitness_station":{name:"Outdoor Fitness Station",terms:"exercise,fitness,gym,trim trail"},"leisure/fitness_station/balance_beam":{name:"Exercise Balance Beam",terms:"balance,exercise,fitness,gym,trim trail"},"leisure/fitness_station/box":{name:"Exercise Box",terms:"box,exercise,fitness,gym,jump,trim trail"},"leisure/fitness_station/horizontal_bar":{name:"Exercise Horizontal Bar",terms:"bar,chinup,chin up,exercise,fitness,gym,pullup,pull up,trim trail"},"leisure/fitness_station/horizontal_ladder":{name:"Exercise Monkey Bars",terms:"bar,chinup,chin up,exercise,fitness,gym,ladder,monkey bars,pullup,pull up,trim trail"},"leisure/fitness_station/hyperextension":{name:"Hyperextension Station",terms:"back,exercise,extension,fitness,gym,roman chair,trim trail"},"leisure/fitness_station/parallel_bars":{name:"Parallel Bars",terms:"bar,dip,exercise,fitness,gym,trim trail"},"leisure/fitness_station/push-up":{name:"Push-Up Station",terms:"bar,exercise,fitness,gym,pushup,push up,trim trail"},"leisure/fitness_station/rings":{name:"Exercise Rings",terms:"exercise,fitness,gym,muscle up,pullup,pull up,trim trail"},"leisure/fitness_station/sign":{name:"Exercise Instruction Sign",terms:"exercise,fitness,gym,trim trail"},"leisure/fitness_station/sit-up":{name:"Sit-Up Station",terms:"crunch,exercise,fitness,gym,situp,sit up,trim trail"},"leisure/fitness_station/stairs":{name:"Exercise Stairs",terms:"exercise,fitness,gym,steps,trim trail"},"leisure/garden":{name:"Garden",terms:""},"leisure/golf_course":{name:"Golf Course",terms:"links"},"leisure/hackerspace":{name:"Hackerspace",terms:"makerspace,hackspace,hacklab"},"leisure/horse_riding":{name:"Horseback Riding Facility",terms:"equestrian,stable"},"leisure/ice_rink":{name:"Ice Rink",terms:"hockey,skating,curling"},"leisure/marina":{name:"Marina",terms:"boat"},"leisure/miniature_golf":{name:"Miniature Golf",terms:"crazy golf,mini golf,putt-putt"},"leisure/nature_reserve":{name:"Nature Reserve",terms:"protected,wildlife"},"leisure/outdoor_seating":{name:"Outdoor Seating Area",terms:"al fresco,beer garden,dining,cafe,restaurant,pub,bar,patio"},"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/picnic_table/chess":{name:"Chess Table",terms:"bench,chess board,checkerboard,checkers,chequerboard,game table"},"leisure/pitch":{name:"Sport Pitch",terms:"field"},"leisure/pitch/american_football":{name:"American Football Field",terms:"football,gridiron"},"leisure/pitch/australian_football":{name:"Australian Football Field",terms:"Aussie,AFL,football"},"leisure/pitch/badminton":{name:"Badminton Court",terms:""},"leisure/pitch/baseball":{name:"Baseball Field",terms:""},"leisure/pitch/basketball":{name:"Basketball Court",terms:""},"leisure/pitch/beachvolleyball":{name:"Beach Volleyball Court",terms:"volleyball"},"leisure/pitch/boules":{name:"Boules/Bocce Court",terms:"bocce,lyonnaise,pétanque"},"leisure/pitch/bowls":{name:"Bowling Green",terms:""},"leisure/pitch/cricket":{name:"Cricket Field",terms:""},"leisure/pitch/equestrian":{name:"Riding Arena",terms:"dressage,equestrian,horse,horseback,riding"},"leisure/pitch/field_hockey":{name:"Field Hockey Pitch",terms:"landhockey"},"leisure/pitch/horseshoes":{name:"Horseshoes Pit",terms:"horse shoes"},"leisure/pitch/netball":{name:"Netball Court",terms:""},"leisure/pitch/rugby_league":{name:"Rugby League Field",terms:""},"leisure/pitch/rugby_union":{name:"Rugby Union Field",terms:""},"leisure/pitch/shuffleboard":{name:"Shuffleboard Court",terms:"deck shuffleboard,floor shuffleboard"},"leisure/pitch/skateboard":{name:"Skate Park",terms:""},"leisure/pitch/soccer":{name:"Soccer Field",terms:"football"},"leisure/pitch/softball":{name:"Softball Field",terms:"softball,diamond"},"leisure/pitch/table_tennis":{name:"Ping Pong Table",terms:"table tennis,ping pong"},"leisure/pitch/tennis":{name:"Tennis Court",terms:""},"leisure/pitch/volleyball":{name:"Volleyball Court",terms:""},"leisure/playground":{name:"Playground",terms:"jungle gym,play area"},"leisure/resort":{name:"Resort",terms:"recreation center,sanatorium,ski and snowboard resort,vacation resort,winter sports resort"},"leisure/sauna":{name:"Sauna",terms:""},"leisure/slipway_point":{name:"Slipway",terms:"boat launch,boat ramp,boat landing"},"leisure/slipway":{name:"Slipway",terms:"boat launch,boat ramp,boat landing"},"leisure/sports_centre":{name:"Sports Center / Complex",terms:""},"leisure/sports_centre/climbing":{name:"Climbing Gym",terms:"abseiling,artificial climbing wall,belaying,bouldering,rock climbing facility,indoor rock wall,rappeling,rock gym,ropes"},"leisure/sports_centre/swimming":{name:"Swimming Pool Facility",terms:"dive,water"},"leisure/stadium":{name:"Stadium",terms:""},"leisure/swimming_area":{name:"Natural Swimming Area",terms:"dive,water,aquatics"},"leisure/swimming_pool":{name:"Swimming Pool",terms:"dive,water,aquatics"},"leisure/track":{name:"Racetrack (Non-Motorsport)",terms:"cycle,dog,greyhound,horse,race*,track"},"leisure/track/cycling_point":{name:"Cycling Track",terms:"bicycle track,bicycling track,cycle racetrack,velodrome"},"leisure/track/cycling":{name:"Cycling Track",terms:"bicycle track,bicycling track,cycle racetrack,velodrome"},"leisure/track/horse_racing_point":{name:"Horse Racing Track",terms:"equestrian race track,horse race betting,horseracing,horsetrack,horse racetrack"},"leisure/track/horse_racing":{name:"Horse Racing Track",terms:"equestrian race track,horse race betting,horseracing,horsetrack,horse racetrack"},"leisure/track/running_point":{name:"Running Track",terms:"athletics track,decathlon,foot race,long distance running,marathon,middle distance running,racetrack,running,sprint,track,walking"},"leisure/track/running":{name:"Running Track",terms:"athletics track,decathlon,foot race,long distance running,marathon,middle distance running,racetrack,running,sprint,track,walking"},"leisure/water_park":{name:"Water Park",terms:"swim,pool,dive"},line:{name:"Line",terms:"polyline"},"man_made/adit":{name:"Adit",terms:"cave,horizontal mine entrance,tunnel,underground"},"man_made/antenna":{name:"Antenna",terms:"broadcast,cell phone,cell,communication,mobile phone,radio,television,transmission,tv"},"man_made/beacon":{name:"Beacon",terms:""},"man_made/beehive":{name:"Beehive",terms:"apiary,beekeeper,farm,honey,pollination"},"man_made/breakwater":{name:"Breakwater",terms:""},"man_made/bridge":{name:"Bridge",terms:""},"man_made/bunker_silo":{name:"Bunker Silo",terms:"Silage,Storage"},"man_made/chimney":{name:"Chimney",terms:""},"man_made/clearcut":{name:"Clearcut Forest",terms:"cut,forest,lumber,tree,wood"},"man_made/crane":{name:"Crane",terms:""},"man_made/cross":{name:"Summit Cross",terms:""},"man_made/cutline":{name:"Cut line",terms:""},"man_made/dyke":{name:"Levee",terms:"Dike,Dyke,Floodbank,Stopbank"},"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:"Mast",terms:"antenna,broadcast tower,cell phone tower,cell tower,communication mast,communication tower,guyed tower,mobile phone tower,radio mast,radio tower,television tower,transmission mast,transmission tower,tv tower"},"man_made/mast/communication":{name:"Communication Mast",terms:"antenna,broadcast tower,cell phone tower,cell tower,communication mast,communication tower,guyed tower,mobile phone tower,radio mast,radio tower,television tower,transmission mast,transmission tower,tv tower"},"man_made/mast/communication/mobile_phone":{name:"Mobile Phone Mast",terms:"antenna,cell mast,cell phone mast,cell phone tower,cell tower,communication mast,communication tower,guyed tower,mobile phone tower,transmission mast,transmission tower"},"man_made/mast/communication/radio":{name:"Radio Broadcast Mast",terms:"antenna,broadcast tower,communication mast,communication tower,guyed tower,radio mast,radio tower,transmission mast,transmission tower"},"man_made/mast/communication/television":{name:"Television Broadcast Mast",terms:"antenna,broadcast tower,communication mast,communication tower,guyed tower,television mast,television tower,transmission mast,transmission tower,tv mast,tv tower"},"man_made/mineshaft":{name:"Mineshaft",terms:"cave,mine shaft,tunnel,underground,vertical mine entrance"},"man_made/monitoring_station":{name:"Monitoring Station",terms:"weather,earthquake,seismology,air,gps"},"man_made/observatory":{name:"Observatory",terms:"astronomical,meteorological"},"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:"berth,dock,jetty,landing,promenade,wharf"},"man_made/pier/floating":{name:"Floating Pier",terms:"berth,dock,jetty,landing,promenade,wharf"},"man_made/pipeline":{name:"Pipeline",terms:"oil,natural gas,water,sewer,sewage"},"man_made/pipeline/underground":{name:"Underground Pipeline",terms:"oil,natural gas,water,sewer,sewage"},"man_made/pumping_station":{name:"Pumping Station",terms:""},"man_made/silo":{name:"Silo",terms:"grain,corn,wheat"},"man_made/storage_tank":{name:"Storage Tank",terms:"water,oil,gas,petrol"},"man_made/storage_tank/water":{name:"Water Tank",terms:"cistern,water tower"},"man_made/street_cabinet":{name:"Street Cabinet",terms:"cable tv,monitoring box,technical box,telecommunications,traffic signal controls"},"man_made/surveillance":{name:"Surveillance",terms:"anpr,alpr,camera,car plate recognition,cctv,guard,license plate recognition,monitoring,number plate recognition,security,video,webcam"},"man_made/surveillance/camera":{name:"Surveillance Camera",terms:"anpr,alpr,camera,car plate recognition,cctv,guard,license plate recognition,monitoring,number plate recognition,security,video,webcam"},"man_made/survey_point":{name:"Survey Point",terms:"trig point,triangulation pillar,trigonometrical station"},"man_made/tower":{name:"Tower",terms:""},"man_made/tower/bell_tower":{name:"Bell Tower",terms:"belfry,bell gable,campanile,church tower,klockstapel"},"man_made/tower/communication":{name:"Communication Tower",terms:"antenna,broadcast tower,cell phone tower,cell tower,communication mast,communication tower,guyed tower,mobile phone tower,radio mast,radio tower,television tower,transmission mast,transmission tower,tv tower"},"man_made/tower/defensive":{name:"Fortified Tower",terms:"Defensive Tower,Castle Tower"},"man_made/tower/minaret":{name:"Minaret",terms:"Islam,mosque,Muezzin,Muslim"},"man_made/tower/observation":{name:"Observation Tower",terms:"lookout tower,fire tower"},"man_made/tunnel":{name:"Tunnel",terms:"bore,dig,shaft,underground passage,underpass"},"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/watermill":{name:"Watermill",terms:"water,wheel,mill"},"man_made/windmill":{name:"Windmill",terms:"wind,wheel,mill"},"man_made/works":{name:"Factory",terms:"assembly,build,brewery,car,plant,plastic,processing,manufacture,refinery"},manhole:{name:"Manhole",terms:"cover,hole,sewer,sewage,telecom"},"manhole/drain":{name:"Storm Drain",terms:"cover,drain,hole,rain,sewer,sewage,storm"},"manhole/telecom":{name:"Telecom Manhole",terms:"cover,phone,hole,telecom,telephone,bt"},"natural/bare_rock":{name:"Bare Rock",terms:"rock"},"natural/bay":{name:"Bay",terms:""},"natural/beach":{name:"Beach",terms:"shore"},"natural/cape":{name:"Cape",terms:"bay,coastline,erosion,headland,promontory"},"natural/cave_entrance":{name:"Cave Entrance",terms:"cavern,hollow,grotto,shelter,cavity"},"natural/cliff":{name:"Cliff",terms:"crag,escarpment,rock face,scarp"},"natural/coastline":{name:"Coastline",terms:"shore"},"natural/fell":{name:"Fell",terms:""},"natural/glacier":{name:"Glacier",terms:"ice,snow"},"natural/grassland":{name:"Grassland",terms:"prairie,savanna"},"natural/heath":{name:"Heath",terms:""},"natural/mud":{name:"Mud",terms:"wetland"},"natural/peak":{name:"Peak",terms:"acme,aiguille,alp,climax,crest,crown,hill,mount,mountain,pinnacle,summit,tip,top"},"natural/reef":{name:"Reef",terms:"barrier,coral,ocean,sand,shoal"},"natural/ridge":{name:"Ridge",terms:"crest"},"natural/rock":{name:"Attached Rock / Boulder",terms:"boulder,stone,rock"},"natural/saddle":{name:"Saddle",terms:"pass,mountain pass,top"},"natural/sand":{name:"Sand",terms:"desert"},"natural/scree":{name:"Scree",terms:"loose rocks"},"natural/scrub":{name:"Scrub",terms:"bush,shrubs"},"natural/shingle":{name:"Shingle",terms:"beach,gravel,pebbles,riverbed,rounded rock fragments"},"natural/spring":{name:"Spring",terms:""},"natural/stone":{name:"Unattached Stone / Boulder",terms:"boulder,stone,rock"},"natural/tree_row":{name:"Tree Row",terms:""},"natural/tree":{name:"Tree",terms:""},"natural/valley":{name:"Valley",terms:"canyon,dale,dell,dene,depression,glen,gorge,gully,gulley,gultch,hollow,ravine,rift,vale"},"natural/volcano":{name:"Volcano",terms:"mountain,crater"},"natural/water":{name:"Water",terms:""},"natural/water/basin":{name:"Basin",terms:"detention,drain,overflow,rain,retention"},"natural/water/canal":{name:"Canal",terms:""},"natural/water/lake":{name:"Lake",terms:"lakelet,loch,mere"},"natural/water/moat":{name:"Moat",terms:""},"natural/water/pond":{name:"Pond",terms:"lakelet,millpond,tarn,pool,mere"},"natural/water/reservoir":{name:"Reservoir",terms:""},"natural/water/river":{name:"River",terms:"beck,branch,brook,course,creek,estuary,rill,riverbank,rivulet,run,runnel,stream,tributary,watercourse"},"natural/water/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"},"natural/water/wastewater":{name:"Wastewater Basin",terms:"excrement,shit,sewage,wastewater,Settling Basin,Clarifier Basin"},"natural/wetland":{name:"Wetland",terms:"bog,fen,marsh,mire,moor,muskeg,peatland,quagmire,reedbed,saltmarsh,swamp,tidalflat,wet meadow"},"natural/wood":{name:"Wood",terms:"tree"},"noexit/yes":{name:"No Exit",terms:"no exit,road end,dead end"},office:{name:"Office",terms:""},"office/administrative":{name:"Administrative Office",terms:""},"office/physician":{name:"Physician",terms:""},"office/travel_agent":{name:"Travel Agency",terms:""},"office/accountant":{name:"Accountant Office",terms:""},"office/adoption_agency":{name:"Adoption Agency",terms:""},"office/advertising_agency":{name:"Advertising Agency",terms:"ad,ad agency,advert agency,advertising,marketing"},"office/architect":{name:"Architect Office",terms:""},"office/association":{name:"Nonprofit Organization Office",terms:"association,non-profit,nonprofit,organization,society"},"office/charity":{name:"Charity Office",terms:"charitable organization"},"office/company":{name:"Corporate Office",terms:""},"office/coworking":{name:"Coworking Space",terms:"coworking,office"},"office/diplomatic":{name:"Diplomatic Office",terms:""},"office/diplomatic/consulate":{name:"Consulate",terms:""},"office/diplomatic/embassy":{name:"Embassy",terms:""},"office/diplomatic/liaison":{name:"Liaison Office",terms:""},"office/educational_institution":{name:"Educational Institution",terms:""},"office/employment_agency":{name:"Employment Agency",terms:"job"},"office/energy_supplier":{name:"Energy Supplier Office",terms:"electricity,energy company,energy utility,gas utility"},"office/estate_agent":{name:"Real Estate Office",terms:"real estate"},"office/financial_advisor":{name:"Financial Advisor",terms:"401k,inheritance,savings,stocks,retirement,wealth management"},"office/financial":{name:"Financial Office",terms:""},"office/forestry":{name:"Forestry Office",terms:"forest,ranger"},"office/foundation":{name:"Foundation Office",terms:""},"office/government":{name:"Government Office",terms:""},"office/government/register_office":{name:"Register Office",terms:"clerk,marriage,death,birth,certificate"},"office/government/tax":{name:"Tax and Revenue Office",terms:"fiscal authorities,revenue office,tax office"},"office/guide":{name:"Tour Guide Office",terms:"dive guide,mountain guide,tour guide"},"office/insurance":{name:"Insurance Office",terms:""},"office/it":{name:"Information Technology Office",terms:"computer,information,software,technology"},"office/lawyer":{name:"Law Office",terms:""},"office/lawyer/notary":{name:"Notary Office",terms:""},"office/moving_company":{name:"Moving Company Office",terms:"relocation"},"office/newspaper":{name:"Newspaper Office",terms:""},"office/ngo":{name:"NGO Office",terms:"ngo,non government,non-government,organization,organisation"},"office/notary":{name:"Notary Office",terms:"clerk,deeds,estate,signature,wills"},"office/political_party":{name:"Political Party",terms:""},"office/private_investigator":{name:"Private Investigator Office",terms:"PI,private eye,private detective"},"office/quango":{name:"Quasi-NGO Office",terms:"ngo,non government,non-government,organization,organisation,quasi autonomous,quasi-autonomous"},"office/religion":{name:"Religious Office",terms:""},"office/research":{name:"Research Office",terms:""},"office/surveyor":{name:"Surveyor Office",terms:""},"office/tax_advisor":{name:"Tax Advisor Office",terms:"tax,tax consultant"},"office/telecommunication":{name:"Telecom Office",terms:"communication,internet,phone,voice"},"office/therapist":{name:"Therapist Office",terms:"therapy"},"office/water_utility":{name:"Water Utility Office",terms:"water board,utility"},"piste/downhill":{name:"Downhill Piste/Ski Run",terms:"ski,alpine,snowboard,downhill,piste"},"piste/downhill/halfpipe":{name:"Halfpipe",terms:"ski,alpine,halfpipe,half pipe,snowboard,downhill,piste"},"piste/hike":{name:"Snowshoeing or Winter Hiking Trail",terms:"hike,winter hiking,snowshoe,snowshoeing,piste,ski"},"piste/ice_skate":{name:"Ice Skating Piste",terms:"ice,skating,ski,piste"},"piste/nordic":{name:"Nordic or Crosscountry Piste/Ski Trail",terms:"ski,nordic,crosscountry,skating,piste"},"piste/piste":{name:"Winter Sport Trails",terms:"ski,nordic,crosscountry,downhill,alpine,snowboard,skitour,ski touring,sled,luge,sleigh,sledge,ski-joring,husky,horse,winter hiking,snowshoe,snowshoeing,ice,skating"},"piste/skitour":{name:"Ski Touring Trail",terms:"ski,skitour,crosscountry,ski touring,piste"},"piste/sled":{name:"Sled Piste",terms:"ski,sled,luge,sleigh,sledge,piste"},"piste/sleigh":{name:"Sleigh Piste",terms:"ski,piste,sled,luge,sleigh,sledge,ski-joring,husky,horse"},"place/farm":{name:"Farm",terms:""},"place/city_block":{name:"City Block",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/islet":{name:"Islet",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/plot":{name:"Plot",terms:"tract,land,lot,parcel"},"place/quarter":{name:"Sub-Borough / Quarter",terms:"boro,borough,quarter"},"place/square":{name:"Square",terms:""},"place/suburb":{name:"Borough / Suburb",terms:"boro,borough,quarter"},"place/town":{name:"Town",terms:""},"place/village":{name:"Village",terms:""},"playground/balance_beam":{name:"Play Balance Beam",terms:""},"playground/basket_spinner":{name:"Basket Spinner",terms:"basket rotator"},"playground/basket_swing":{name:"Basket Swing",terms:""},"playground/climbing_frame":{name:"Climbing Frame",terms:""},"playground/cushion":{name:"Bouncy Cushion",terms:""},"playground/horizontal_bar":{name:"Play Horizontal Bar",terms:"high bar"},"playground/rocker":{name:"Spring Rider",terms:"spring rocker,springy rocker"},"playground/roundabout":{name:"Play Roundabout",terms:"merry-go-round"},"playground/sandpit":{name:"Sandpit",terms:""},"playground/seesaw":{name:"Seesaw",terms:""},"playground/slide":{name:"Slide",terms:""},"playground/structure":{name:"Play Structure",terms:""},"playground/swing":{name:"Swing",terms:""},"playground/zipwire":{name:"Zip Wire",terms:""},point:{name:"Point",terms:"node,other,vertex,vertices"},"power/sub_station":{name:"Substation",terms:""},"power/cable/underground":{name:"Underground Power Cable",terms:""},"power/generator":{name:"Power Generator",terms:"hydro,solar,turbine,wind"},"power/generator/method/photovoltaic":{name:"Solar Panel",terms:"photovoltaic module,PV module,sunlight"},"power/generator/source/hydro":{name:"Water Turbine",terms:"dam,generator,francis turbine,hydroelectricity,kaplan turbine,pelton turbine"},"power/generator/source/nuclear":{name:"Nuclear Reactor",terms:"fission,generator,nuclear,nuke,reactor"},"power/generator/source/wind":{name:"Wind Turbine",terms:"generator,turbine,windmill,wind"},"power/line":{name:"Power Line",terms:""},"power/minor_line":{name:"Minor Power Line",terms:""},"power/plant":{name:"Power Station Grounds",terms:"coal,gas,generat*,hydro,nuclear,power,station"},"power/pole":{name:"Power Pole",terms:""},"power/substation":{name:"Substation",terms:""},"power/switch":{name:"Power Switch",terms:""},"power/tower":{name:"High-Voltage Tower",terms:"power"},"power/transformer":{name:"Transformer",terms:""},"public_transport/platform_point":{name:"Transit Stop / Platform",terms:"platform,public transit,public transportation,transit,transportation"},"public_transport/platform":{name:"Transit Platform",terms:"platform,public transit,public transportation,transit,transportation"},"public_transport/platform/aerialway_point":{name:"Aerialway Stop / Platform",terms:"aerialway,cable car,platform,public transit,public transportation,transit,transportation"},"public_transport/platform/ferry_point":{name:"Ferry Stop / Platform",terms:"boat,dock,ferry,pier,platform,public transit,public transportation,transit,transportation"},"public_transport/platform/light_rail_point":{name:"Light Rail Stop / Platform",terms:"electric,light rail,platform,public transit,public transportation,rail,track,tram,trolley,transit,transportation"},"public_transport/platform/monorail_point":{name:"Monorail Stop / Platform",terms:"monorail,platform,public transit,public transportation,rail,transit,transportation"},"public_transport/platform/subway_point":{name:"Subway Stop / Platform",terms:"metro,platform,public transit,public transportation,rail,subway,track,transit,transportation,underground"},"public_transport/platform/train_point":{name:"Train Stop / Platform",terms:"platform,public transit,public transportation,rail,track,train,transit,transportation"},"public_transport/platform/tram_point":{name:"Tram Stop / Platform",terms:"electric,light rail,platform,public transit,public transportation,rail,streetcar,track,tram,trolley,transit,transportation"},"public_transport/platform/aerialway":{name:"Aerialway Platform",terms:"aerialway,cable car,platform,public transit,public transportation,transit,transportation"},"public_transport/platform/bus_point":{name:"Bus Stop",terms:"bus,platform,public transit,public transportation,transit,transportation"},"public_transport/platform/bus":{name:"Bus Platform",terms:"bus,platform,public transit,public transportation,transit,transportation"},"public_transport/platform/ferry":{name:"Ferry Platform",terms:"boat,dock,ferry,pier,platform,public transit,public transportation,transit,transportation"},"public_transport/platform/light_rail":{name:"Light Rail Platform",terms:"electric,light rail,platform,public transit,public transportation,rail,track,tram,trolley,transit,transportation"},"public_transport/platform/monorail":{name:"Monorail Platform",terms:"monorail,platform,public transit,public transportation,rail,transit,transportation"},"public_transport/platform/subway":{name:"Subway Platform",terms:"metro,platform,public transit,public transportation,rail,subway,track,transit,transportation,underground"},"public_transport/platform/train":{name:"Train Platform",terms:"platform,public transit,public transportation,rail,track,train,transit,transportation"},"public_transport/platform/tram":{name:"Tram Platform",terms:"electric,light rail,platform,public transit,public transportation,rail,streetcar,track,tram,trolley,transit,transportation"},"public_transport/platform/trolleybus_point":{name:"Trolleybus Stop",terms:"bus,electric,platform,public transit,public transportation,streetcar,trackless,tram,trolley,transit,transportation"},"public_transport/platform/trolleybus":{name:"Trolleybus Platform",terms:"bus,electric,platform,public transit,public transportation,streetcar,trackless,tram,trolley,transit,transportation"},"public_transport/station_aerialway":{name:"Aerialway Station",terms:"aerialway,cable car,public transit,public transportation,station,terminal,transit,transportation"},"public_transport/station_bus":{name:"Bus Station / Terminal",terms:"bus,public transit,public transportation,station,terminal,transit,transportation"},"public_transport/station_ferry":{name:"Ferry Station / Terminal",terms:"boat,dock,ferry,pier,public transit,public transportation,station,terminal,transit,transportation"},"public_transport/station_light_rail":{name:"Light Rail Station",terms:"electric,light rail,public transit,public transportation,rail,station,terminal,track,tram,trolley,transit,transportation"},"public_transport/station_monorail":{name:"Monorail Station",terms:"monorail,public transit,public transportation,rail,station,terminal,transit,transportation"},"public_transport/station_subway":{name:"Subway Station",terms:"metro,public transit,public transportation,rail,station,subway,terminal,track,transit,transportation,underground"},"public_transport/station_train_halt":{name:"Train Station (Halt / Request)",terms:"halt,public transit,public transportation,rail,station,track,train,transit,transportation,whistle stop"},"public_transport/station_train":{name:"Train Station",terms:"public transit,public transportation,rail,station,terminal,track,train,transit,transportation"},"public_transport/station_tram":{name:"Tram Station",terms:"electric,light rail,public transit,public transportation,rail,station,streetcar,terminal,track,tram,trolley,transit,transportation"},"public_transport/station_trolleybus":{name:"Trolleybus Station / Terminal",terms:"bus,electric,public transit,public transportation,station,streetcar,terminal,trackless,tram,trolley,transit,transportation"},"public_transport/station":{name:"Transit Station",terms:"public transit,public transportation,station,terminal,transit,transportation"},"public_transport/stop_area":{name:"Transit Stop Area",terms:""},"public_transport/stop_position_aerialway":{name:"Aerialway Stopping Location",terms:"aerialway,cable car,public transit,public transportation,transit,transportation"},"public_transport/stop_position_bus":{name:"Bus Stopping Location",terms:"bus,public transit,public transportation,transit,transportation"},"public_transport/stop_position_ferry":{name:"Ferry Stopping Location",terms:"boat,dock,ferry,pier,public transit,public transportation,transit,transportation"},"public_transport/stop_position_light_rail":{name:"Light Rail Stopping Location",terms:"electric,light rail,public transit,public transportation,rail,track,tram,trolley,transit,transportation"},"public_transport/stop_position_monorail":{name:"Monorail Stopping Location",terms:"monorail,public transit,public transportation,rail,transit,transportation"},"public_transport/stop_position_subway":{name:"Subway Stopping Location",terms:"metro,public transit,public transportation,rail,subway,track,transit,transportation,underground"},"public_transport/stop_position_train":{name:"Train Stopping Location",terms:"public transit,public transportation,rail,track,train,transit,transportation"},"public_transport/stop_position_tram":{name:"Tram Stopping Location",terms:"electric,light rail,public transit,public transportation,rail,streetcar,track,tram,trolley,transit,transportation"},"public_transport/stop_position_trolleybus":{name:"Trolleybus Stopping Location",terms:"bus,electric,public transit,public transportation,streetcar,trackless,tram,trolley,transit,transportation"},"public_transport/stop_position":{name:"Transit Stopping Location",terms:"public transit,public transportation,transit,transportation"},"railway/halt":{name:"Train Station (Halt / Request)",terms:"break,interrupt,rest,wait,interruption"},"railway/platform":{name:"Train Platform",terms:""},"railway/station":{name:"Train Station",terms:"train station,station"},"railway/tram_stop":{name:"Tram Stopping Position",terms:"light rail,streetcar,tram,trolley"},"railway/abandoned":{name:"Abandoned Railway",terms:""},"railway/buffer_stop":{name:"Buffer Stop",terms:"stop,halt,buffer"},"railway/construction":{name:"Railway Under Construction",terms:""},"railway/crossing":{name:"Railway Crossing (Path)",terms:"crossing,pedestrian crossing,railroad crossing,level crossing,grade crossing,path through railroad,train crossing"},"railway/derail":{name:"Railway Derailer",terms:"derailer"},"railway/disused":{name:"Disused Railway",terms:""},"railway/funicular":{name:"Funicular",terms:"venicular,cliff railway,cable car,cable railway,funicular railway"},"railway/level_crossing":{name:"Railway Crossing (Road)",terms:"crossing,railroad crossing,level crossing,grade crossing,road through railroad,train crossing"},"railway/light_rail":{name:"Light Rail",terms:"light rail,streetcar,trolley"},"railway/milestone":{name:"Railway Milestone",terms:"milestone,marker"},"railway/miniature":{name:"Miniature Railway",terms:"rideable miniature railway,narrow gauge railway,minimum gauge railway"},"railway/monorail":{name:"Monorail",terms:""},"railway/narrow_gauge":{name:"Narrow Gauge Rail",terms:"narrow gauge railway,narrow gauge railroad"},"railway/rail":{name:"Rail",terms:"rail line,railroad track,train track"},"railway/rail/highspeed":{name:"High-Speed Rail",terms:"bullet train,fast rail,high speed rail,highspeed rail,HSR"},"railway/signal":{name:"Railway Signal",terms:"signal,lights"},"railway/subway_entrance":{name:"Subway Entrance",terms:"metro,transit"},"railway/subway":{name:"Subway",terms:"metro,transit"},"railway/switch":{name:"Railway Switch",terms:"switch,points"},"railway/train_wash":{name:"Train Wash",terms:"wash,clean"},"railway/tram":{name:"Tram",terms:"light rail,streetcar,tram,trolley"},relation:{name:"Relation",terms:""},"route/ferry":{name:"Ferry Route",terms:""},"seamark/beacon_isolated_danger":{name:"Danger Beacon",terms:"beacon isolated danger,isolated danger beacon,iala"},"seamark/beacon_lateral":{name:"Channel Beacon",terms:"lateral beacon,beacon lateral,cevni,channel marker,iala,lateral mark"},"seamark/buoy_lateral":{name:"Channel Buoy",terms:"lateral buoy,buoy lateral,cevni,channel marker,iala,lateral mark"},"seamark/buoy_lateral/green":{name:"Green Buoy",terms:"lateral buoy,buoy lateral,cevni,channel marker,iala,lateral mark"},"seamark/buoy_lateral/red":{name:"Red Buoy",terms:"lateral buoy,buoy lateral,cevni,channel marker,iala,lateral mark"},"seamark/mooring":{name:"Mooring",terms:"dolphin,pile,bollard,buoy,post"},shop:{name:"Shop",terms:""},"shop/boutique":{name:"Boutique",terms:""},"shop/fashion":{name:"Fashion Store",terms:""},"shop/fishmonger":{name:"Fishmonger",terms:""},"shop/furnace":{name:"Furnace Store",terms:"oven,stove"},"shop/vacant":{name:"Vacant Shop",terms:""},"shop/agrarian":{name:"Farm Supply Shop",terms:"agricultural inputs,agricultural machines,seeds,pesticides,fertilizer,agricultural tools"},"shop/alcohol":{name:"Liquor Store",terms:"alcohol,beer,booze,wine"},"shop/anime":{name:"Anime Shop",terms:"manga,japan,cosplay,figurine,dakimakura"},"shop/antiques":{name:"Antiques Shop",terms:""},"shop/appliance":{name:"Appliance Store",terms:"air conditioner,appliance,dishwasher,dryer,freezer,fridge,grill,kitchen,oven,refrigerator,stove,washer,washing machine"},"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:"bread,cakes,rolls"},"shop/bathroom_furnishing":{name:"Bathroom Furnishing Store",terms:""},"shop/beauty":{name:"Beauty Shop",terms:"spa,salon,tanning"},"shop/beauty/nails":{name:"Nail Salon",terms:"manicure,pedicure"},"shop/beauty/tanning":{name:"Tanning Salon",terms:""},"shop/bed":{name:"Bedding/Mattress Store",terms:""},"shop/beverages":{name:"Beverage Store",terms:"drinks"},"shop/bicycle":{name:"Bicycle Shop",terms:"bike,repair,tricycle,unicycle"},"shop/boat":{name:"Boat Store",terms:"fishing boat,jetski,motorboat,rowboat,sailboat,vessel,watercraft"},"shop/bookmaker":{name:"Bookmaker",terms:"betting,bookie"},"shop/books":{name:"Book Store",terms:""},"shop/butcher":{name:"Butcher",terms:"chicken,beef,lamb,meat,pork"},"shop/candles":{name:"Candle Shop",terms:"wax"},"shop/cannabis":{name:"Cannabis Shop",terms:"420,marijuana,pot,reefer,weed"},"shop/car_parts":{name:"Car Parts Store",terms:"automobile,automotive"},"shop/car_repair":{name:"Car Repair Shop",terms:"automobile,automotive,garage,service"},"shop/car":{name:"Car Dealership",terms:"automobile,automotive"},"shop/caravan":{name:"RV Dealership",terms:"auto,camper,recreational vehicle"},"shop/carpet":{name:"Carpet Store",terms:"rug"},"shop/catalogue":{name:"Catalog Shop",terms:""},"shop/charity":{name:"Charity Store",terms:"thrift,op shop,nonprofit"},"shop/cheese":{name:"Cheese Store",terms:""},"shop/chemist":{name:"Drugstore",terms:"apothecary,beauty,drug store,drugstore,gift,hair,med*,pharmacy,prescription,tooth"},"shop/chocolate":{name:"Chocolate Store",terms:"cocoa"},"shop/clothes":{name:"Clothing Store",terms:"blouses,boutique,bras,clothes,dresses,fashion,pants,shirts,shorts,skirts,slacks,socks,suits,underwear"},"shop/clothes/underwear":{name:"Underwear Store",terms:"boutique,bras,brassieres,briefs,boxers,fashion,lingerie,panties,slips,socks,stockings,underclothes,undergarments,underpants,undies"},"shop/coffee":{name:"Coffee Store",terms:""},"shop/computer":{name:"Computer Store",terms:"desktop,laptop,hardware,operating system,software"},"shop/confectionery":{name:"Candy Store",terms:"sweet"},"shop/convenience":{name:"Convenience Store",terms:""},"shop/copyshop":{name:"Copy Store",terms:"print,scan"},"shop/cosmetics":{name:"Cosmetics Store",terms:"make-up,makeup"},"shop/country_store":{name:"Country 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/e-cigarette":{name:"E-Cigarette Shop",terms:"electronic,vape,vaping,vapor"},"shop/electronics":{name:"Electronics Store",terms:"appliance,audio,blueray,camera,computer,dvd,home theater,radio,speaker,tv,video"},"shop/erotic":{name:"Erotic Store",terms:"sex,porn"},"shop/erotic/lgbtq":{name:"LGBTQ+ Erotic Store",terms:"sex,porn"},"shop/fabric":{name:"Fabric Store",terms:"sew"},"shop/farm":{name:"Produce Stand",terms:"farm shop,farm stand"},"shop/fireplace":{name:"Fireplace Store",terms:"fireplace,stove,masonry heater"},"shop/fishing":{name:"Fishing Shop",terms:"bait,fishing line,flies,fly,lure,reel,rod,tackle"},"shop/florist":{name:"Florist",terms:"flower"},"shop/frame":{name:"Framing Shop",terms:"art*,paint*,photo*,frame"},"shop/frozen_food":{name:"Frozen Food",terms:""},"shop/fuel":{name:"Fuel Shop",terms:""},"shop/funeral_directors":{name:"Funeral Home",terms:"undertaker,memorial home"},"shop/furniture":{name:"Furniture Store",terms:"chair,sofa,table"},"shop/games":{name:"Tabletop Game Store",terms:"board game,card game,dice game,game shop,live action role-playing game,miniatures wargame,strategy game"},"shop/garden_centre":{name:"Garden Center",terms:"landscape,mulch,shrub,tree"},"shop/gas":{name:"Bottled Gas Shop",terms:"cng,lpg,natural gas,propane,refill,tank"},"shop/general":{name:"General Store",terms:"Village Shop"},"shop/gift":{name:"Gift Shop",terms:"souvenir"},"shop/greengrocer":{name:"Greengrocer",terms:"fruit,produce,vegetable"},"shop/hairdresser_supply":{name:"Hairdresser Supply Store",terms:"barber,shampoo,conditioner"},"shop/hairdresser":{name:"Hairdresser",terms:"barber"},"shop/hardware":{name:"Hardware Store",terms:""},"shop/health_food":{name:"Health Food Shop",terms:"wholefood,vitamins,vegetarian,vegan"},"shop/hearing_aids":{name:"Hearing Aids Store",terms:""},"shop/herbalist":{name:"Herbalist",terms:""},"shop/hifi":{name:"Hifi Store",terms:"audio,hi-fi,high fidelity,stereo,video"},"shop/houseware":{name:"Houseware Store",terms:"home,household,kitchenware"},"shop/hunting":{name:"Hunting Shop",terms:"arrows,bows,bullets,crossbows,rifles,traps"},"shop/interior_decoration":{name:"Interior Decoration Store",terms:""},"shop/jewelry":{name:"Jewelry Store",terms:"bracelet,diamond,earrings,gem,gold,jeweler,jewellery,jeweller,necklace,pins,ring,silver"},"shop/kiosk":{name:"Kiosk",terms:""},"shop/kitchen":{name:"Kitchen Design Store",terms:"cabinets,countertops,sinks"},"shop/laundry":{name:"Laundry",terms:""},"shop/laundry/self_service":{name:"Self-Service Laundry",terms:"Coin Laundry,Laundromat,Coin Wash,Launderette,Washateria"},"shop/leather":{name:"Leather Store",terms:""},"shop/lighting":{name:"Lighting Store",terms:"fluorescent lighting,lamps,LEDs,light fixtures,lightbulbs"},"shop/locksmith":{name:"Locksmith",terms:"key,lockpick"},"shop/lottery":{name:"Lottery Shop",terms:""},"shop/mall":{name:"Mall",terms:"shopping"},"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_repair":{name:"Motorcycle Repair Shop",terms:"auto,bike,garage,motorcycle,repair,service"},"shop/motorcycle":{name:"Motorcycle Dealership",terms:"bike"},"shop/music":{name:"Music Store",terms:"tape casettes,CDs,compact discs,vinyl records"},"shop/musical_instrument":{name:"Musical Instrument Store",terms:"guitar"},"shop/newsagent":{name:"Newspaper/Magazine Shop",terms:""},"shop/nutrition_supplements":{name:"Nutrition Supplements Store",terms:""},"shop/optician":{name:"Optician",terms:"eye,glasses"},"shop/organic":{name:"Organic Goods Store",terms:""},"shop/outdoor":{name:"Outdoors Store",terms:"camping,climbing,hiking,outfitter,outdoor equipment,outdoor supplies"},"shop/outpost":{name:"Online Retailer Outpost",terms:"online,pick up,pickup"},"shop/paint":{name:"Paint Store",terms:""},"shop/party":{name:"Party Supply Store",terms:"balloons,costumes,decorations,invitations"},"shop/pastry":{name:"Pastry Shop",terms:"patisserie,cake shop,cakery"},"shop/pawnbroker":{name:"Pawn Shop",terms:""},"shop/perfumery":{name:"Perfume Store",terms:""},"shop/pet_grooming":{name:"Pet Grooming Store",terms:"cat,dog"},"shop/pet":{name:"Pet Store",terms:"animal,cat,dog,fish,kitten,puppy,reptile"},"shop/photo":{name:"Photography Store",terms:"camera,film"},"shop/pyrotechnics":{name:"Fireworks Store",terms:""},"shop/radiotechnics":{name:"Radio/Electronic Component Store",terms:"antenna,transistor"},"shop/religion":{name:"Religious Store",terms:""},"shop/scuba_diving":{name:"Scuba Diving Shop",terms:"diving,scuba"},"shop/seafood":{name:"Seafood Shop",terms:"fishmonger"},"shop/second_hand":{name:"Consignment/Thrift Store",terms:"secondhand,second hand,resale,thrift,used"},"shop/sewing":{name:"Sewing Supply Shop",terms:"haberdashery"},"shop/shoes":{name:"Shoe Store",terms:"boots,cleats,clogs,heels,loafers,oxfords,sneakers"},"shop/sports":{name:"Sporting Goods Store",terms:"athletics"},"shop/stationery":{name:"Stationery Store",terms:"card,paper"},"shop/storage_rental":{name:"Storage Rental",terms:"garages"},"shop/supermarket":{name:"Supermarket",terms:"grocery,store,shop"},"shop/tailor":{name:"Tailor",terms:"clothes,suit"},"shop/tattoo":{name:"Tattoo Parlor",terms:"ink"},"shop/tea":{name:"Tea Store",terms:""},"shop/ticket":{name:"Ticket Seller",terms:"box office"},"shop/tiles":{name:"Tile Shop",terms:""},"shop/tobacco":{name:"Tobacco Shop",terms:"cigarettes,cigars"},"shop/toys":{name:"Toy Store",terms:"games"},"shop/trade":{name:"Trade Shop",terms:""},"shop/travel_agency":{name:"Travel Agency",terms:""},"shop/tyres":{name:"Tire Store",terms:""},"shop/vacuum_cleaner":{name:"Vacuum Cleaner Store",terms:""},"shop/variety_store":{name:"Variety Store",terms:""},"shop/video_games":{name:"Video Game Store",terms:""},"shop/video":{name:"Video Store",terms:"DVD,VHS,video casette"},"shop/watches":{name:"Watches Shop",terms:""},"shop/water_sports":{name:"Watersport/Swim Shop",terms:""},"shop/water":{name:"Drinking Water Shop",terms:""},"shop/weapons":{name:"Weapon Shop",terms:"ammo,gun,knife,knives"},"shop/wholesale":{name:"Wholesale Store",terms:"warehouse club,cash and carry"},"shop/window_blind":{name:"Window Blind Store",terms:""},"shop/wine":{name:"Wine Shop",terms:""},tactile_paving:{name:"Tactile Paving",terms:"blind path,detectable warning surfaces,tactile ground surface indicators,tactile walking surface indicators,truncated domes,visually impaired path"},"telecom/data_center":{name:"Data Center",terms:"computer systems storage,information technology,server farm,the cloud,telecommunications"},"tourism/alpine_hut":{name:"Alpine Hut",terms:"climbing hut"},"tourism/apartment":{name:"Guest Apartment / Condo",terms:""},"tourism/aquarium":{name:"Aquarium",terms:"fish,sea,water"},"tourism/artwork":{name:"Artwork",terms:"mural,sculpture,statue"},"tourism/artwork/bust":{name:"Bust",terms:"figure"},"tourism/artwork/graffiti":{name:"Graffiti",terms:"Street Artwork,Guerilla Artwork,Graffiti Artwork"},"tourism/artwork/installation":{name:"Art Installation",terms:"interactive art,intervention art,modern art"},"tourism/artwork/mural":{name:"Mural",terms:"fresco,wall painting"},"tourism/artwork/sculpture":{name:"Sculpture",terms:"statue,figure,carving"},"tourism/artwork/statue":{name:"Statue",terms:"sculpture,figure,carving"},"tourism/attraction":{name:"Tourist Attraction",terms:""},"tourism/camp_site":{name:"Campground",terms:"tent,rv"},"tourism/caravan_site":{name:"RV Park",terms:"Motor Home,Camper"},"tourism/chalet":{name:"Holiday Cottage",terms:"holiday,holiday cottage,holiday home,vacation,vacation home"},"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/information/board":{name:"Information Board",terms:""},"tourism/information/guidepost":{name:"Guidepost",terms:"signpost"},"tourism/information/map":{name:"Map",terms:""},"tourism/information/office":{name:"Tourist Information Office",terms:""},"tourism/information/route_marker":{name:"Trail Marker",terms:"cairn,painted blaze,route flag,route marker,stone pile,trail blaze,trail post,way marker"},"tourism/information/terminal":{name:"Information Terminal",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/trail_riding_station":{name:"Trail Riding Station",terms:""},"tourism/viewpoint":{name:"Viewpoint",terms:""},"tourism/wilderness_hut":{name:"Wilderness Hut",terms:"wilderness hut,backcountry hut,bothy"},"tourism/zoo":{name:"Zoo",terms:"animal"},"tourism/zoo/petting":{name:"Petting Zoo",terms:"Children's Zoo,Children's Farm,Petting Farm,farm animals"},"tourism/zoo/safari":{name:"Safari Park",terms:"Drive-Through Zoo,Drive-In Zoo"},"tourism/zoo/wildlife":{name:"Wildlife Park",terms:"indigenous animals"},traffic_calming:{name:"Traffic Calming",terms:"bump,hump,slow,speed"},"traffic_calming/bump":{name:"Speed Bump",terms:"hump,speed,slow"},"traffic_calming/chicane":{name:"Traffic Chicane",terms:"driveway link,speed,slow"},"traffic_calming/choker":{name:"Traffic Choker",terms:"speed,slow"},"traffic_calming/cushion":{name:"Speed Cushion",terms:"bump,hump,speed,slow"},"traffic_calming/dip":{name:"Dip",terms:"speed,slow"},"traffic_calming/hump":{name:"Speed Hump",terms:"bump,speed,slow"},"traffic_calming/island":{name:"Traffic Island",terms:"circle,roundabout,slow"},"traffic_calming/rumble_strip":{name:"Rumble Strip",terms:"audible lines,sleeper lines,growlers"},"traffic_calming/table":{name:"Speed Table",terms:"flat top,hump,speed,slow"},traffic_sign_vertex:{name:"Traffic Sign",terms:"road,highway"},traffic_sign:{name:"Traffic Sign",terms:"road,highway"},"traffic_sign/city_limit_vertex":{name:"City Limit Sign",terms:"town,village,hamlet,boundary,edge,border,road,highway"},"traffic_sign/city_limit":{name:"City Limit Sign",terms:"town,village,hamlet,boundary,edge,border,road,highway"},"traffic_sign/maxspeed_vertex":{name:"Speed Limit Sign",terms:"max speed,maximum speed,road,highway"},"traffic_sign/maxspeed":{name:"Speed Limit Sign",terms:"max speed,maximum speed,road,highway"},"type/multipolygon":{name:"Multipolygon",terms:""},"type/boundary":{name:"Boundary",terms:""},"type/boundary/administrative":{name:"Administrative Boundary",terms:""},"type/enforcement":{name:"Enforcement",terms:""},"type/public_transport/stop_area_group":{name:"Transit Stop Area Group",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:"Only Left Turn",terms:""},"type/restriction/only_right_turn":{name:"Only Right Turn",terms:""},"type/restriction/only_straight_on":{name:"Only Straight On",terms:""},"type/restriction/only_u_turn":{name:"Only U-turn",terms:""},"type/route_master":{name:"Route Master",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/horse":{name:"Riding Route",terms:""},"type/route/light_rail":{name:"Light Rail Route",terms:""},"type/route/monorail":{name:"Monorail Route",terms:""},"type/route/pipeline":{name:"Pipeline Route",terms:""},"type/route/piste":{name:"Piste/Ski Route",terms:""},"type/route/power":{name:"Power Route",terms:""},"type/route/road":{name:"Road Route",terms:""},"type/route/subway":{name:"Subway Route",terms:""},"type/route/train":{name:"Train Route",terms:""},"type/route/tram":{name:"Tram Route",terms:""},"type/site":{name:"Site",terms:""},"type/waterway":{name:"Waterway",terms:""},"waterway/riverbank":{name:"Riverbank",terms:""},"waterway/boatyard":{name:"Boatyard",terms:""},"waterway/canal":{name:"Canal",terms:""},"waterway/canal/lock":{name:"Canal Lock",terms:""},"waterway/dam":{name:"Dam",terms:""},"waterway/ditch":{name:"Ditch",terms:""},"waterway/dock":{name:"Wet Dock / Dry Dock",terms:"boat,ship,vessel,marine"},"waterway/drain":{name:"Drain",terms:""},"waterway/fuel":{name:"Marine Fuel Station",terms:"petrol,gas,diesel,boat"},"waterway/lock_gate":{name:"Lock Gate",terms:"canal"},"waterway/milestone":{name:"Waterway Milestone",terms:"milestone,marker"},"waterway/river":{name:"River",terms:"beck,branch,brook,course,creek,estuary,rill,rivulet,run,runnel,stream,tributary,watercourse"},"waterway/sanitary_dump_station":{name:"Marine Toilet Disposal",terms:"Boat,Watercraft,Sanitary,Dump Station,Pumpout,Pump out,Elsan,CDP,CTDP,Chemical Toilet"},"waterway/stream_intermittent":{name:"Intermittent Stream",terms:"arroyo,beck,branch,brook,burn,course,creek,drift,flood,flow,gully,run,runnel,rush,spate,spritz,tributary,wadi,wash,watercourse"},"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/waterfall":{name:"Waterfall",terms:"fall"},"waterway/weir":{name:"Weir",terms:""}}},imagery:{AGIV:{attribution:{text:"© agentschap Informatie Vlaanderen"},name:"AIV Flanders most recent aerial imagery"},AGIV10cm:{attribution:{text:"© agentschap Informatie Vlaanderen"},name:"AIV Flanders 2013-2015 aerial imagery 10cm"},AGIVFlandersGRB:{attribution:{text:"© agentschap Informatie Vlaanderen"},name:"AIV Flanders GRB"},AIV_DHMV_II_HILL_25cm:{attribution:{text:"© agentschap Informatie Vlaanderen"},name:"AIV Digitaal Hoogtemodel Vlaanderen II, multidirectionale hillshade 0,25 m"},AIV_DHMV_II_SVF_25cm:{attribution:{text:"© agentschap Informatie Vlaanderen"},name:"AIV Digitaal Hoogtemodel Vlaanderen II, Skyview factor 0,25 m"},Bing:{description:"Satellite and aerial imagery.",name:"Bing aerial imagery"},"DigitalGlobe-Premium":{attribution:{text:"Terms & Feedback"},description:"DigitalGlobe-Premium is a mosaic composed of DigitalGlobe basemap with select regions filled with +Vivid or custom area of interest imagery, 50cm resolution or better, and refreshed more frequently with ongoing updates.",name:"DigitalGlobe Premium Imagery"},"DigitalGlobe-Premium-vintage":{attribution:{text:"Terms & Feedback"},description:"Imagery boundaries and capture dates. Labels appear at zoom level 13 and higher.",name:"DigitalGlobe Premium Imagery Vintage"},"DigitalGlobe-Standard":{attribution:{text:"Terms & Feedback"},description:"DigitalGlobe-Standard is a curated set of imagery covering 86% of the earth’s landmass, with 30-60cm resolution where available, backfilled by Landsat. Average age is 2.31 years, with some areas updated 2x per year.",name:"DigitalGlobe Standard Imagery"},"DigitalGlobe-Standard-vintage":{attribution:{text:"Terms & Feedback"},description:"Imagery boundaries and capture dates. Labels appear at zoom level 13 and higher.",name:"DigitalGlobe Standard Imagery Vintage"},EOXAT2018CLOUDLESS:{attribution:{text:"Sentinel-2 cloudless - https://s2maps.eu by EOX IT Services GmbH (Contains modified Copernicus Sentinel data 2017 & 2018)"},description:"Post-processed Sentinel Satellite imagery.",name:"eox.at 2018 cloudless"},EsriWorldImagery:{attribution:{text:"Terms & Feedback"},description:"Esri world imagery.",name:"Esri World Imagery"},EsriWorldImageryClarity:{attribution:{text:"Terms & Feedback"},description:"Esri archive imagery that may be clearer and more accurate than the default layer.",name:"Esri World Imagery (Clarity) Beta"},MAPNIK:{attribution:{text:"© OpenStreetMap contributors, CC-BY-SA"},description:"The default OpenStreetMap layer.",name:"OpenStreetMap (Standard)"},Mapbox:{attribution:{text:"Terms & Feedback"},description:"Satellite and aerial imagery.",name:"Mapbox Satellite"},"Maxar-Premium":{attribution:{text:"Terms & Feedback"},description:"Maxar Premium is a mosaic composed of Maxar basemap with select regions filled with +Vivid or custom area of interest imagery, 50cm resolution or better, and refreshed more frequently with ongoing updates.",name:"Maxar Premium Imagery (Beta)"},"Maxar-Standard":{attribution:{text:"Terms & Feedback"},description:"Maxar Standard is a curated set of imagery covering 86% of the earth’s landmass, with 30-60cm resolution where available, backfilled by Landsat. Average age is 2.31 years, with some areas updated 2x per year.",name:"Maxar Standard Imagery (Beta)"},"OSM_Inspector-Addresses":{attribution:{text:"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},name:"OSM Inspector: Addresses"},"OSM_Inspector-Geometry":{attribution:{text:"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},name:"OSM Inspector: Geometry"},"OSM_Inspector-Highways":{attribution:{text:"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},name:"OSM Inspector: Highways"},"OSM_Inspector-Multipolygon":{attribution:{text:"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},name:"OSM Inspector: Area"},"OSM_Inspector-Places":{attribution:{text:"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},name:"OSM Inspector: Places"},"OSM_Inspector-Routing":{attribution:{text:"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},name:"OSM Inspector: Routing"},"OSM_Inspector-Tagging":{attribution:{text:"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},name:"OSM Inspector: Tagging"},SPW_ORTHO_LAST:{name:"SPW(allonie) most recent aerial imagery"},SPW_PICC:{name:"SPW(allonie) PICC numerical imagery"},"US-TIGER-Roads-2014":{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",name:"TIGER Roads 2014"},"US-TIGER-Roads-2017":{description:"Yellow = Public domain map data from the US Census. Red = Data not found in OpenStreetMap",name:"TIGER Roads 2017"},"US-TIGER-Roads-2018":{description:"Yellow = Public domain map data from the US Census. Red = Data not found in OpenStreetMap",name:"TIGER Roads 2018"},"USDA-NAIP":{description:"The most recent year of DOQQs from the National Agriculture Imagery Program (NAIP) for each state in the contiguous United States.",name:"National Agriculture Imagery Program"},US_Forest_Service_roads_overlay:{description:"Highway: Green casing = unclassified. Brown casing = track. Surface: gravel = light brown fill, Asphalt = black, paved = gray, ground =white, concrete = blue, grass = green. Seasonal = white bars",name:"U.S. Forest Roads Overlay"},UrbISOrtho2016:{attribution:{text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB"},name:"UrbIS-Ortho 2016"},UrbISOrtho2017:{attribution:{text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB"},name:"UrbIS-Ortho 2017"},UrbISOrtho2018:{attribution:{text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB"},name:"UrbIS-Ortho 2018"},UrbisAdmFR:{attribution:{text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB"},name:"UrbisAdm FR"},UrbisAdmNL:{attribution:{text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB"},name:"UrbisAdm NL"},"Waymarked_Trails-Cycling":{attribution:{text:"© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0"},name:"Waymarked Trails: Cycling"},"Waymarked_Trails-Hiking":{attribution:{text:"© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0"},name:"Waymarked Trails: Hiking"},"Waymarked_Trails-MTB":{attribution:{text:"© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0"},name:"Waymarked Trails: MTB"},"Waymarked_Trails-Skating":{attribution:{text:"© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0"},name:"Waymarked Trails: Skating"},"Waymarked_Trails-Winter_Sports":{attribution:{text:"© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0"},name:"Waymarked Trails: Winter Sports"},"basemap.at":{attribution:{text:"basemap.at"},description:"Basemap of Austria, based on government data.",name:"basemap.at"},"basemap.at-orthofoto":{attribution:{text:"basemap.at"},description:"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery.",name:"basemap.at Orthofoto"},"eufar-balaton":{attribution:{text:"EUFAR Balaton ortofotó 2010"},description:"1940 geo-tagged photography from Balaton Limnological Institute.",name:"EUFAR Balaton orthophotos"},"finds.jp_KBN_2500":{attribution:{text:"GSI KIBAN 2500"},description:"GSI Kiban 2500 via finds.jp. Good for tracing, but a bit older.",name:"Japan GSI KIBAN 2500"},"gsi.go.jp":{attribution:{text:"GSI Japan"},description:"Japan GSI ortho Imagery. Usually better than bing, but a bit older.",name:"Japan GSI ortho Imagery"},"gsi.go.jp_airphoto":{attribution:{text:"GSI Japan"},description:"Japan GSI airphoto Imagery. Not fully orthorectified, but a bit newer and/or differently covered than GSI ortho Imagery.",name:"Japan GSI airphoto Imagery"},"gsi.go.jp_seamlessphoto":{attribution:{text:"GSI Japan seamless photo"},description:"Japan GSI seamlessphoto Imagery. The collection of latest imageries of GSI ortho, airphoto, post disaster and others.",name:"Japan GSI seamlessphoto Imagery"},"gsi.go.jp_std_map":{attribution:{text:"GSI Japan"},description:"Japan GSI Standard Map. Widely covered.",name:"Japan GSI Standard Map"},"helsingborg-orto":{attribution:{text:"© Helsingborg municipality"},description:"Orthophotos from the municipality of Helsingborg 2016, public domain",name:"Helsingborg Orthophoto"},"kalmar-orto-2014":{attribution:{text:"© Kalmar municipality"},description:"Orthophotos for the north coast of the municipality of Kalmar 2014",name:"Kalmar North Orthophoto 2014"},"kalmar-orto-2016":{attribution:{text:"© Kalmar municipality"},description:"Orthophotos for the south coast of the municipality of Kalmar 2016",name:"Kalmar South Orthophoto 2016"},"kalmar-orto-2018":{attribution:{text:"© Kalmar municipality"},description:"Orthophotos for urban areas of the municipality of Kalmar 2018",name:"Kalmar Urban Orthophoto 2018"},kelkkareitit:{attribution:{text:"© Kelkkareitit.fi"},description:"Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)",name:"Nordic snowmobile overlay"},"lantmateriet-orto1960":{attribution:{text:"© Lantmäteriet, CC0"},description:"Mosaic of Swedish orthophotos from the period 1955–1965. Older and younger pictures may occur.",name:"Lantmäteriet Historic Orthophoto 1960"},"lantmateriet-orto1975":{attribution:{text:"© Lantmäteriet, CC0"},description:"Mosaic of Swedish orthophotos from the period 1970–1980. Is under construction.",name:"Lantmäteriet Historic Orthophoto 1975"},"lantmateriet-topowebb":{attribution:{text:"© Lantmäteriet, CC0"},description:"Topographic map of Sweden 1:50 000",name:"Lantmäteriet Topographic Map"},"linkoping-orto":{attribution:{text:"© Linköping municipality"},description:"Orthophotos from the municipality of Linköping 2010, open data",name:"Linköping Orthophoto"},mapbox_locator_overlay:{attribution:{text:"Terms & Feedback"},description:"Shows major features to help orient you.",name:"Locator Overlay"},openpt_map:{attribution:{text:"© OpenStreetMap contributors, CC-BY-SA"},name:"OpenPT Map (overlay)"},"osm-gps":{attribution:{text:"© OpenStreetMap contributors"},description:"Public GPS traces uploaded to OpenStreetMap.",name:"OpenStreetMap GPS traces"},"osm-mapnik-black_and_white":{attribution:{text:"© OpenStreetMap contributors, CC-BY-SA"},name:"OpenStreetMap (Standard Black & White)"},"osm-mapnik-german_style":{attribution:{text:"© OpenStreetMap contributors, CC-BY-SA"},name:"OpenStreetMap (German Style)"},"osmse-ekonomiska":{attribution:{text:"© Lantmäteriet"},description:"Scan of \"Economic maps\" ca. 1950–1980",name:"Lantmäteriet Economic Map 1950–1980"},qa_no_address:{attribution:{text:"Simon Poole, Data ©OpenStreetMap contributors"},name:"QA No Address"},skobbler:{attribution:{text:"© Tiles: skobbler Map data: OpenStreetMap contributors"},name:"skobbler"},skoterleder:{attribution:{text:"© Skoterleder.org"},description:"Snowmobile trails",name:"Snowmobile map Sweden"},"stamen-terrain-background":{attribution:{text:"Map tiles by Stamen Design, under CC BY 3.0. Data by OpenStreetMap, under ODbL"},name:"Stamen Terrain"},"stockholm-orto":{attribution:{text:"© Stockholm municipality, CC0"},description:"Orthophotos from the municipality of Stockholm 2016, CC0 license",name:"Stockholm Orthophoto"},"tf-cycle":{attribution:{text:"Maps © Thunderforest, Data © OpenStreetMap contributors"},name:"Thunderforest OpenCycleMap"},"tf-landscape":{attribution:{text:"Maps © Thunderforest, Data © OpenStreetMap contributors"},name:"Thunderforest Landscape"},"trafikverket-baninfo":{attribution:{text:"© Trafikverket, CC0"},description:"Swedish railway network, including sidings",name:"Trafikverket Railway Network"},"trafikverket-baninfo-option":{attribution:{text:"© Trafikverket, CC0"},description:"Swedish railway network with several options for map layers",name:"Trafikverket Railway Network options"},"trafikverket-vagnat":{attribution:{text:"© Trafikverket, CC0"},description:"Swedish NVDB road network",name:"Trafikverket Road Network"},"trafikverket-vagnat-extra":{attribution:{text:"© Trafikverket, CC0"},description:"Swedish NVDB extra details: Highway reference, traffic calming, rest area, bus stop, bridge, tunnel, speed camera",name:"Trafikverket Road Network extra"},"trafikverket-vagnat-navn":{attribution:{text:"© Trafikverket, CC0"},description:"Swedish NVDB street names",name:"Trafikverket Street Names"},"trafikverket-vagnat-option":{attribution:{text:"© Trafikverket, CC0"},description:"Swedish NVDB road network with several options for map layers",name:"Trafikverket Road Network options"}},community:{"bw-facebook":{name:"Mapping Botswana on Facebook",description:"Page of OpenStreetMap in Botswana"},"bw-twitter":{name:"Mapping Botswana on Twitter",description:"Twitter of OpenStreetMap in Botswana"},"ym-Centre-Universitaire-de-Recherche-et-dApplication-en-Tldtection-CURAT-de-lUniversit-Felix-Houphouet-Boigny":{name:"YouthMappers CURAT",description:"YouthMappers chapter at Centre Universitaire de Recherche et d'Application en Télédétection (CURAT) de l'Université Felix Houphouet Boigny",extendedDescription:"Our chapter aim is to promote the use of collaborative free mapping and the use of openstreetmap data in the field of research and their application in the implementation of tools for decision-making. Help students produce their own data of their research."},"ym-The-Gambia-YMCA-University-of-the-Gambia":{name:"Connected YouthMappers",description:"YouthMappers chapter at The Gambia YMCA / University of the Gambia",extendedDescription:"Connected YouthMappers is comprised of dedicated young Gambians who aspire to change and aid national development."},"cape-coast-youthmappers":{name:"University of Cape Coast YouthMappers",description:"Follow us on Twitter: {url}",extendedDescription:"This is the official handle for the Youth Mappers chapter of the University of Cape Coast, Ghana. we love maps, open data and helping the vulnerable."},"osm-gh-facebook":{name:"OpenStreetMap Ghana on Facebook",description:"Facebook group for people interested in OpenStreetMap.",extendedDescription:"Mappers in Ghana community, promoting OpenStreetMap and Humanitarian OpenStreetMap Team (HOT) projects in Ghana. Join us."},"osm-gh-twitter":{name:"OpenStreetMap Ghana on Twitter",description:"Follow us on Twitter: {url}"},"talk-gh":{name:"Talk-gh Mailing List",description:"Talk-gh is the official mailing list for Ghana OSM community."},"ym-Kwame-Nkrumah-University-of-Science-and-Technology":{name:"Kwame Nkrumah University of Science and Technology YouthMappers",description:"YouthMappers chapter at Kwame Nkrumah University of Science and Technology"},"ym-University-of-Cape-Coast":{name:"UCC Geographical Society",description:"YouthMappers chapter at University of Cape Coast",extendedDescription:"We are a society that encompasses all students who are reading and read geography in the Department of Geography and Regional Planning at the University of Cape Coast. Our main aim is to promote interest in the discipline inside and outside of the classroom. Our motto is “We comprehend the Earth and its inhabitants.”"},"ym-University-of-Energy-and-Natural-Resources":{name:"Eco-Club",description:"YouthMappers chapter at University of Energy and Natural Resources",extendedDescription:"To provide a sound education to all citizens about the deteriorating environment and provide utmost use of recreation of the environment for human survival."},"ym-University-of-Ghana":{name:"University of Ghana YouthMappers",description:"YouthMappers chapter at University of Ghana",extendedDescription:"UG YouthMappers consists of both graduate and undergraduate students possessing knowledge and skills in GIS and Remote Sensing. The club is composed of an energetic team that is poised to address social issues and mitigate environmental problems through mapping. Our fundamental principles are capacity building, empowerment and teamwork."},"ym-University-of-Mines-and-Technology":{name:"UMaT YouthMappers",description:"YouthMappers chapter at University of Mines and Technology",extendedDescription:"UMaT YouthMappers is a group of volunteer students who seek to grant students the opportunity to improve skills in the field of mapping & creating open geographic data and analyses that address locally defined development challenges worldwide."},"ym-General-Lansana-Conte-University":{name:"YouthMappers General Lansana Conte University",description:"YouthMappers chapter at General Lansana Conte University",extendedDescription:"The YouthMappers of the University General Lansana Conté is a non profit community willing to contribute to Map Guinea and others part of the world. We are promoting the use of GIS and Open data to build decision support tools. We also work to build capacities among the students and local communities."},"ym-Institute-of-Science-and-Veterinary-Medicine":{name:"YouthMappers ISSMV Dalaba",description:"YouthMappers chapter at Institute of Science and Veterinary Medicine",extendedDescription:"YouthMappers ISSMV Dabala is a non profit organisation working to promote humanitarian mapping and the use of open sources and open data to build decision making tools in Guinea."},"ym-Universit-de-NZrkor":{name:"Youthmappers à N'Zérékoré",description:"YouthMappers chapter at Université de N'Zérékoré",extendedDescription:"YouthMappers est un groupe qui permet de faire la cartographie des communautés enclavées et à la prise des décisions en cas de catastrophes ou épidémies. Elle permet aussi la production et l'utilisation des données en accès gratuit."},"ym-Dedan-Kimathi-University-of-Technology":{name:"GDEV",description:"YouthMappers chapter at Dedan Kimathi University of Technology",extendedDescription:"GDEV is a group of enthusiastic GIS group at DeKUT that aims at helping students share, engage and learn from each other in matters geospatial"},"ym-Jomo-Kenyatta-University-of-Agriculture-and-Technology":{name:"Association of Geomatics Engineering Students",description:"YouthMappers chapter at Jomo Kenyatta University of Agriculture and Technology",extendedDescription:"The Association of Geomatics Engineering Students (AGES), aims at promoting GIS products and services as well as training students on the use of the same. It not only promotes socialization between the students and practicing professionals, but also provides a platform for exchanging new ideas for holding new GIS and surveying events and training at the university."},"ym-Karatina-University":{name:"Nature Club Karatina University",description:"YouthMappers chapter at Karatina University",extendedDescription:"This chapter aims to bring together all GIS enthusiasts.They include environment experts, wildlife experts, aquatic and tourism officers, just to mention a few. Its main aim is to provide a platform where students can learn from each other and, in the process, understand how to integrate the GIS skills in their various career paths as well as provide solutions to various environmental related challenges."},"ym-Kenyatta-University":{name:"Kenyatta University GIS Club",description:"YouthMappers chapter at Kenyatta University",extendedDescription:"Kenyatta University GIS Club (KUGISC) was founded on 28th October 2016, with more than 200 students and staff from all faculty within campus as members. We are committed to empower members with spatial knowledge, skills and expertise required in understanding the Earth. We help in mapping resources within the university by incorporating geospatial data in their projects as well as fieldwork data collection."},"ym-Moi-University":{name:"Geography Students Association",description:"YouthMappers chapter at Moi University",extendedDescription:"The Geography Students Association at Moi University (GEOSAMU) explores, discovers and aims at developing the entire world through the young Geo-Spatial analysts. GEOSAMU is part of the Department of Geography."},"ym-Technical-University-of-Kenya":{name:"Geospatial Science Student Association",description:"YouthMappers chapter at Technical University of Kenya",extendedDescription:"It's a geographical information based group with very passionate students in the relevant fields of study. We do training to members on emerging trends in the market and keep up with technological advancements"},"ym-University-of-Nairobi":{name:"Geospatial Engineering Students Association",description:"YouthMappers chapter at University of Nairobi",extendedDescription:"UN students are working with the local OSM community, Map Kibera, and GrouthTruth to learn about open mapping and contribute data for needs in their urban communities."},"ym-African-Methodist-Episcopal-University":{name:"YouthMappers-AMEU",description:"YouthMappers chapter at African Methodist Episcopal University"},"ym-Cuttington-University":{name:"Cuttington University YouthMappers",description:"YouthMappers chapter at Cuttington University",extendedDescription:"The YouthMappers at Cuttington University, Suakoko, and Bong County comprised of Students from three different departments; namely, the Department of Natural Resources Management “DONRM”, Department of Environmental Sciences, and the Department of Natural Sciences. Since the establishment of the Chapter in February 2017, the overall membership is 20 students, with each department containing 5 students."},"ym-Grand-Gedeh-County-Community-College":{name:"YouthMappers at Grand Gedeh County Community College",description:"YouthMappers chapter at Grand Gedeh County Community College",extendedDescription:"The Youth Mappers of GGCCC sole intent is to put places in and around Liberia that are not on the map. We gather youths from the college within the Grand Gedeh Community College to make it their duties to unite and bring these places to the spot light geographically."},"ym-Nimba-County-Community-College":{name:"Nimba County Community College Youth Mappers",description:"YouthMappers chapter at Nimba County Community College"},"ym-Stella-Maris-Polytechnic":{name:"YouthMappers-SMP",description:"YouthMappers chapter at Stella Maris Polytechnic"},"ym-University-of-Liberia-YouthMappers":{name:"University of Liberia YouthMappers",description:"YouthMappers chapter at University of Liberia YouthMappers",extendedDescription:"The University of Liberia YouthMappers is a chapter organization of the Global YouthMappers. We are a nonprofit student mapping organization focus on mapping for Liberia’s development and the World at large. The purpose of this organization shall be to utilize technology and geospatial knowledge as means of creating and developing maps; collecting and analyzing data that will address local and worldwide challenges. Our aim is to support and create opportunity for students to develop interest and skills in the fields of mapping. We envision a united student community that are collaborative, active and are willing to work with the University of Liberia YouthMappers in order to better the lives of others."},"osm-mg-facebook":{name:"OpenStreetMap Madagascar Facebook Group",description:"Malagasy Facebook group for people interested in OpenStreetMap."},"talk-mg":{name:"Talk-mg Mailing List",description:"Place for OpenStreetMap contributors, communities and users in Madagascar to share and discuss."},"ym-University-of-Malawi":{name:"Chanco Malawi YouthMappers",description:"YouthMappers chapter at University of Malawi",extendedDescription:"Chanco Malawi YouthMappers is the student mapping organization for the University of Malawi's Chancellor College. The students in this chapter focus on mapping for Malawi's development and science needs."},"ym-Universit-des-Sciences-Sociale-et-de-Gestion-de-Bamako":{name:"Etudiant au Laboratoire HoPE",description:"YouthMappers chapter at Université des Sciences Sociale et de Gestion de Bamako"},"ym-Universidade-Eduardo-Mondlane":{name:"Comunidade YouthMappers Moçambique",description:"YouthMappers chapter at Universidade Eduardo Mondlane",extendedDescription:"We are a student group that intends to join Mozambican society to create a resilient community of humanitarian mapping. The community intend to map the physical occupation of our Country and create open geographic data, accessible to the public and able to be used in several areas without associated costs."},"ym-Namibia-University-of-Science-and-Technology":{name:"Geoinformation Technology Student Society",description:"YouthMappers chapter at Namibia University of Science and Technology"},"ym-Abia-State-University":{name:"AbsuMappersTeam",description:"YouthMappers chapter at Abia State University",extendedDescription:"AbsuMappersTeam is voluntary team of map enthusiast ,using openstreetmap,GIS and other open source geospatial techno;ogy to solve problems.It is a dedicated for disaster response using OpenStreetMap.It is a professional mentoring and empowerment platform for those with passion for GIS and Mapping.It is a community of volunteers for geospatial data creation,field data collection and mapping.The team was co-founded by Victor N.Sunday(the Team mentor) and Professor J.U.Ogbonna ,the team coordinator and faculty Advisor. AbsuMapperTeam is an affiliate of UniiqueMappersTeam-Port Harcourt.The team stands to support sustainable development using geospatial technology"},"ym-Ahmadu-Bello-University":{name:"ABU Geomappers",description:"YouthMappers chapter at Ahmadu Bello University",extendedDescription:"We are a group of Data driven Humanitarian mappers, who are dedicated to rendering humanitarian service in response to disaster and mitigation. We are glad to contribute our expertise and knowledge through mapping, and helping to spread #OpenEvangelism through Training, and collaboration."},"ym-Federal-School-of-Surveys":{name:"OyoMappersTeam (OMT) Oyo",description:"YouthMappers chapter at Federal School of Surveys"},"ym-Federal-University-of-Technology-Akure":{name:"YouthMappers Futa Space Club",description:"YouthMappers chapter at Federal University of Technology, Akure",extendedDescription:"Our mission is to raise the next generation of Space Leaders. Activities include research and capacity building in Remote Sensing, GIS, Climate Change, Astronomy, Cosmology, Space Engineering, Global Navigation, Robotics and Space Education."},"ym-Ignatius-Ajuru-University-of-Education":{name:"IgnatiusMappersTeam (IMT)",description:"YouthMappers chapter at Ignatius Ajuru University of Education",extendedDescription:"We are a YouthMappers Chapter of Ignatius Ajuru University of Education involved in crowdsourced mapping of our environment and remote mapping of resilient communities.We are a team of volunteers using openstreetmap and other open Geospatial source for mapping."},"ym-University-of-Nigeria-Nsukka":{name:"LionMappersTeam (LMT) Nsukka",description:"YouthMappers chapter at University of Nigeria, Nsukka",extendedDescription:"The LionMappersTeam is an affiliate of YouthMappers Network, with the sole aim of providing members the opportunity to learn and improve their skills in the field of mapping science and to create open geographic data and analysis that addresses locally defined challenges globally. It is a team of volunteers for crowdsourced mapping and geographic information provision using Openstreetmap, citizen science and other geospatial technology for research, training and response to resilient community challenges. We are involved in GIS and Remote Sensing Applications and Research.Paticipatory GIS and Citizen Science,field mapping ,training workshops and outreaches to High Schools."},"ym-University-of-Port-Harcourt":{name:"UniqueMappersTeam (UMT) Port Harcourt",description:"YouthMappers chapter at University of Port Harcourt",extendedDescription:"UniqueMappersTeam(UMT)Port Harcourt is an action group and a team of volunteers for a collaborative online mapping targeted at training and empowering members with trending mapping skills to create open geospatial data and analysis that addresses locally defined challenges for geoinformation and to provide humanitarian mapping services to resilient communities in Niger Delta,Nigeria and elsewhere.We promote Crowdsoucred Mapping and Geographic information volunteering using OpenStreetMap(OSM) platform and other accessible platforms for Rapid Response Mapping,Disaster Mapping,Geo-intelligence Mapping,Map updates and training.Its an affiliate Campus chapter of Humanitarian OpenStreetMap Team(HOT).It is a project-task team of YouthMappers that provide opportunity for members to learn and improve their skills in Geoinformatics so as to explore global opportunities in the field of Mapping and Geoinformation."},"ym-University-of-Nigeria-Enugu-Campus":{name:"LionMappersTeam (LMT) Enugu",description:"YouthMappers chapter at University of Nigeria, Enugu Campus",extendedDescription:"The LionMappersTeam(LMT)Enugu Campus is an affiliate of YouthMappers Network, with the sole aim of providing members the opportunity to learn and improve their skills in the field of Geoinformatics and to create open geographic data and analysis that addresses locally defined challenges globally. It is a team of volunteers for Crowdsourced Mapping and Geographic Information provision using Openstreetmap, Citizen Science and other Geospatial Technology for research, training and response to resilient community challenges. We are involved in Web-Cartography, GIS and Remote Sensing Applications and ResearchWe are passionate about Volunteered Geographic Information.Paticipatory GIS and Citizen Science.Our major activities include online crowdsourced-Cartography, Field Mapping ,Training workshops and outreaches to High School as well as Humanitarian/Disaster Response Mapping."},"ym-Insititue-d-Enseignement-Superieur-de-Ruhengeri":{name:"YouthMappers at INES Ruhengeri",description:"YouthMappers chapter at Insititue d' Enseignement Superieur de Ruhengeri",extendedDescription:"We are students from Land Administration and Management and Land survey Departments from INES-Ruhengeri. We are engaged in mapping activities that create the changes toward sustainable development in our community."},"ym-University-of-Rwanda-Huye-Campus":{name:"Rwanda YouthMappers",description:"YouthMappers chapter at University of Rwanda - Huye Campus",extendedDescription:"Based on the commitment and the purpose of promoting mapping, and the information from YouthMappers public talks, we have organized as students in Geography department who are committed in mapping to found a chapter of our Campus. We have supported by our Facilitator Dr. Gaspard Rwanyiziri (Director of CGIS-Rwanda) and various lecturer mentors."},"ym-Institut-Suprieur-de-Management-Kolda":{name:"Les Femmes Leaders de ISM/Kolda",description:"YouthMappers chapter at Institut Supérieur de Management Kolda",extendedDescription:"Les Femmes Leaders de ISM/Kolda is an all-female mapping group in southern Senegal looking to put Kolda and surrounding villages on the map and better understand how to use OSM."},"ym-Universit-Gaston-Berger":{name:"YouthMappers at UGB",description:"YouthMappers chapter at Université Gaston Berger",extendedDescription:"YouthMappers UGB is made up of young students and researchers who are passionate about mapping. Our aim is to improve students' skills in the field of cartography and to participate in the creation of open geographic data that responds to development challenges around the world and particularly in Africa."},"ym-Fourah-Bay-College":{name:"Student's Geographical Association",description:"YouthMappers chapter at Fourah Bay College",extendedDescription:"The Student's Geographical Association- YouthMappers is an association of Fourah Bay College Students with the common goals of mapping out vulnerable places in Sierra Leone and the world at large for relief and other beneficial purposes,carry out Research and other educative endeavors. The chapter consists of young people with great ideas, development oriented with the capacity to relate with each other, comprehend and implement sustainable developmental projects as a team."},"ym-Njala-University-Freetown-Campus":{name:"Njala Freetown YouthMappers",description:"YouthMappers chapter at Njala University, Freetown Campus",extendedDescription:"We are students of Njala University Freetown Campus, studying Information Technology under the department of Physics and Computer Science. and we are located at Henry Street Freetown, Sierra Leone."},"ym-Njala-University-Njala-Campus":{name:"YouthMappers Njala University, Njala Campus",description:"YouthMappers chapter at Njala University, Njala Campus"},"ym-University-of-Pretoria":{name:"Centre for Geoinformation Science",description:"YouthMappers chapter at University of Pretoria",extendedDescription:"The students who map Pretoria are supported by the University of Pretoria's Centre for Geoinformation Science, a platform from where the excellence of UP individuals and teams involved in geographic information science (GISc) research, education and training, professional development and community engagement is encouraged and strengthened through collaborations, education and training and alliances within South Africa and abroad."},"ym-Ardhi-University":{name:"ARU Mapper",description:"YouthMappers chapter at Ardhi University",extendedDescription:"As upcoming geospatial data consultants we seek to educate and provide advice to the society on how they can use spatial data not only as a form of location but a tool of decision making and predict different hazardous and climatical changes which may harm them or future genarations."},"ym-Institute-of-Finance-Management":{name:"IFM mappers",description:"YouthMappers chapter at Institute of Finance Management",extendedDescription:"This is a new chapter at out institute and we are looking forward to use our financial education that we are receiving here at the campus and link ig with the environment in order to develop our sustainable environment towards helping the community with the effects of our environment in a financial ways by converting them into numbers. this is widely explained in ecosystem accounting and environmental accounts"},"ym-Institute-of-Rural-Development-Planning-Mwanza":{name:"Youth Mappers Chapter at Institute of Rural Development Planning - Lake Zone Centre",description:"YouthMappers chapter at Institute of Rural Development Planning Mwanza"},"ym-Institute-of-Rural-Development-Planning":{name:"Mipango YouthMappers Chapter",description:"YouthMappers chapter at Institute of Rural Development Planning",extendedDescription:"Mipango YouthMappers Chapter was introduced at IRDP on 3rd July, 2017 by Dr.Domitilla Bashemera. The founding members were 300 (190 males and 110 female) Bachelor Degree students, who were registered as members of the Chapter. Gerald Zacharia is the president of the chapter and Juster Lugira is Vice President."},"ym-Open-University-of-Tanzania":{name:"Youth Mappers at Open University of Tanzania",description:"YouthMappers chapter at Open University of Tanzania",extendedDescription:"Youth Mappers at Open University of Tanzania\n\nHad been founded by members and students of Open University of Tanzania in Department of Geography who are mainly need to improve their career and help young community through joint and partnership projects with local community groups such as Mikoko Scout Group (www.msg.or.tz) and start cooperation with international colleges and universities for exchange programs in relation to Geography Studies as some programs prepared by Mikoko Scout Group which will link local university and other universities of the same interest through International Nature & Environmental Youth Camp 2019 (www.campsite.msg.or.tz/nature.html )\n\nOur chapter will soon be recognized as youth network program that will open opportunity for students to study and conduct research studies at a local levels."},"ym-Sokoine-University-of-Agriculture":{name:"SMCoSE YouthMappers",description:"YouthMappers chapter at Sokoine University of Agriculture",extendedDescription:"A Chapter comprising of Environmental sciences and management students and Geography studies under the dept. of Geography and we will be using mapping techniques, based on systems concepts and theories, can be used to facilitate, explore, and capture the different understandings of the relationships, perspectives, and boundaries involved in environmental sustainability to obtain a more complete comprehension of the concept and develop plans for action."},"ym-University-of-Dar-es-Salaam":{name:"YouthMappers at University of Dar es Salaam",description:"YouthMappers chapter at University of Dar es Salaam",extendedDescription:"The purpose of the University of Dar es Salaam YouthMappers is to use and promote open source data and GIS technologies to map potential disaster areas, provide resources for emergency management, connect its members with open source and GIS organizations in the city of Dar es Salaam, and serve any upcoming needs of our project partners ."},"ym-Busitema-University":{name:"Good Mappers",description:"YouthMappers chapter at Busitema University",extendedDescription:"Good mappers is a team of students in Busitema University. Its main objective is to create a community of experienced mappers who can contribute to the world map."},"ym-Gulu-University":{name:"CSGU Mappers",description:"YouthMappers chapter at Gulu University",extendedDescription:"The CSGU Mappers are the Computing Society at Gulu University. This chapter is creative, passionate, innovative and ready to map Uganda and the world at large, beyond other people's imagination."},"ym-Kumi-University":{name:"Ever Last YouthMappers",description:"YouthMappers chapter at Kumi University",extendedDescription:"This energetic group of students organizes within the faculty of Science and Information Technology."},"ym-Makerere-University":{name:"Geo YouthMappers",description:"YouthMappers chapter at Makerere University",extendedDescription:"Geo YouthMappers is a Makerere University based mapping chapter esteemed to apply the spatial conception to the real world.We have collaborated on various mapping events with OSM. Our main aim is the desire to simplify data and make it readily available mostly for disaster preparedness.\"We map the world and change lives."},"ym-Mbarara-University-of-Science-and-Technology":{name:"MUST Street Mappers",description:"YouthMappers chapter at Mbarara University of Science and Technology",extendedDescription:"MUST Street Mappers is a Youth Mappers chapter at the Mbarara University of Science and Technology that is based on making our country and the world at large a better place through mapping. We base on collected information to notice patterns and data mine to present relevant and beneficial information to society."},"ym-St.-Augustine-International-University":{name:"YouthMappers at St Augustine International University",description:"YouthMappers chapter at St. Augustine International University"},"ym-Uganda-Christian-University-Mbale-Campus":{name:"Mappers for Life",description:"YouthMappers chapter at Uganda Christian University Mbale Campus",extendedDescription:"We are Team Mappers for life! Please come and join us as we map together!\" This group works from the Department of Information Technology at the UCU."},"ym-Uganda-Pentecostal-University":{name:"HiTech Youth Mappers",description:"YouthMappers chapter at Uganda Pentecostal University",extendedDescription:"A new Youthmappers Chapter in Western Uganda. Ready to map and provide open data with OpenStreetMap for development purposes."},"ym-St.-Mawaggali-Trades-Training-Institute":{name:"MawaggaliMappers",description:"YouthMappers chapter at St. Mawaggali Trades Training Institute",extendedDescription:"We are the youthappers chapter at St. Mawaggali trades in choma who are want to contribute the different humantarian tasks to serve lives through mapping."},"ym-The-University-of-Zambia":{name:"YouthMappers Unza",description:"YouthMappers chapter at The University of Zambia"},"ym-University-of-Zimbabwe":{name:"UZMappers",description:"YouthMappers chapter at University of Zimbabwe",extendedDescription:"UzMappersTeam Zimbabwe is a team of Volunteers using OpenStreetMap for Open Data Mapping and Humanitarian Disaster response mapping .The team empowers its members with open source geospatial technology skills."},"OSM-BGD-facebook":{name:"OpenStreetMap Bangladesh",description:"Improve OpenStreetMap in Bangladesh",extendedDescription:"Mapping in Bangladesh? Have questions, want to connect with the community here? Join us at {url}. All are welcome!"},"ym-Asian-University-for-Women":{name:"YouthMappers at AUW",description:"YouthMappers chapter at Asian University for Women",extendedDescription:"The Asian University for Women seeks to graduate women who will be skilled and innovative professionals, service-oriented leaders in the businesses and communities in which they will work and live, and promoters of intercultural understanding and sustainable human and economic development in Asia and throughout the world."},"ym-Dhaka-College":{name:"YouthMappers Daka College",description:"YouthMappers chapter at Dhaka College",extendedDescription:"YouthMappers DhakaCollege is an approach by students to help mapping vulnerable areas of the world as a part of Humanitarian Action. YouthMappers gives the opportunity to the students for helping people and using mapping for humanitarian purposes. This open geographic data can be used for educational, navigational and other humanitarian purposes. Happy mapping."},"ym-Dhaka-University":{name:"Openstreetmap YouthMappers",description:"YouthMappers chapter at Dhaka University",extendedDescription:"It's a great privilege for the students of University of Dhaka to map for humanitarian purposes. Our chapter gives the opportunity to the students for helping people and use mapping for humanitarian purposes."},"ym-Eastern-University":{name:"YouthMappers at Eastern University",description:"YouthMappers chapter at Eastern University",extendedDescription:"YouthMappers at Eastern University, Bangladesh has been formed with a view to assisting people during humanitarian crisis. The students, likewise other mappers of the world, are promised to assist people in using the map for educational, navigational and other humanitarian purposes."},"ym-Jahangirnagar-University":{name:"YouthMappers at IRS, Jahangirnagar University",description:"YouthMappers chapter at Jahangirnagar University"},"ym-Khulna-University":{name:"Openstreetmap",description:"YouthMappers chapter at Khulna University",extendedDescription:"KU students and faculty from multiple disciplines are experienced at creating open data for OSM to address local challenges of development, including food security and other topics."},"ym-Rajshahi-University-of-Engineering-Technology":{name:"YouthMappers at RUET",description:"YouthMappers chapter at Rajshahi University of Engineering & Technology",extendedDescription:"The \"YouthMappers at RUET\" is a humanitarian mapping group of students of Rajshahi University of Engineering & Technology (RUET) to share, develop and practice the knowledge of GIS. This group encourages using open source geospatial data and platform to make solution to reach the most vulnerable group of the world."},"ym-Sherubtse-College":{name:"Geographical Society",description:"YouthMappers chapter at Sherubtse College",extendedDescription:"The Geographical Society, in the Department of Geography & Planning, Sherubtse College, Royal University of Bhutan, with support from the Center for Climate Change and Spatial Information, has made several efforts to create awareness and address important issues at the local and national level. We now join hands with the international student-centered YouthMappers network on \"Mapping for Resilience\" and contributing to a global 'Happiness'!"},"OSM-India-facebook":{name:"OpenStreetMap India - Participatory neighborhood mapping",description:"Improve OpenStreetMap in India",extendedDescription:"Mapping in India? Have questions, want to connect with the community here? Join us at {url}. All are welcome!",events:{sotmasia2018:{name:"State of the Map Asia 2018",description:"Join the 2018 OpenStreetMap region-wide event at State of the Map Asia in India",where:"Indian Institute of Management, Bangalore, India"}}},"osm-india-forum":{name:"OpenStreetMap India forum",description:"OpenStreetMap India web forum"},"osm-india-github":{name:"OpenStreetMap India GitHub",description:"Code with us: {url}"},"OSM-india-mailinglist":{name:"OpenStreetMap India Mailinglist",description:"Talk-in is the official Mailinglist for Indian Community"},"osm-india-telegram":{name:"OpenStreetMap India Telegram",description:"Join our family: {url}"},"OSM-india-twitter":{name:"OpenStreetMap India Twitter",description:"We are just a tweet away: {url}"},"osm-india-website":{name:"OpenStreetMap India",description:"Mappers and OpenStreetMap users in India"},"osm-india-wiki":{name:"OpenStreetMap Wikiproject India",description:"Everything you need to know about mapping in India: {url}"},"osm-india-youtube":{name:"OpenStreetMap India Youtube",description:"Subscribe to our channel: {url}"},"OSM-India-Puducherry-Facebook":{name:"Free Software Hardware Movement - Facebook",description:"FSHM Facebook page to know about community events, activities",extendedDescription:"FSHM organizes events relating to free software/hardware, technology, activism and OpenStreetMap. Its FB page is the best way to keep in contact with its events."},"OSM-Puducherry-Mailing-List":{name:"Free Software Hardware Movement - Mailing List",description:"FSHM Puducherry mailing list to discuss mapping in Puducherry and other things.",extendedDescription:"FSHM organizes events relating to free software/hardware, technology, activism and OpenStreetMap."},"OSM-India-Puducherry-Matrix":{name:"Free Software Hardware Movement - Matrix",description:"FSHM Riot group to discuss, share and update mapping activities, events in and around Puducherry",extendedDescription:"FSHM community members share their OSM mapping updates / experiences through the Riot.im group, this group is also used to discuss things related to free software / hardware, technology and activism."},"ym-Gujarat-University":{name:"CCIM at Ahmedabad",description:"YouthMappers chapter at Gujarat University"},"OSM-IDN-facebook":{name:"OpenStreetMap Indonesia",description:"Improve OpenStreetMap in Indonesia",extendedDescription:"Mapping in Indonesia? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!"},"ym-Universitas-Negeri-Makassar":{name:"Kontur Geografi",description:"YouthMappers chapter at Universitas Negeri Makassar"},"ym-University-Muhammadiyah-Surakarta":{name:"SpaceTime",description:"YouthMappers chapter at University Muhammadiyah Surakarta",extendedDescription:"SpaceTime is a community mapping in the Faculty of Geography of Muhammadiyah University of Surakarta. SpaceTime was founded by Bruce Maldy Pratama, Mukhlis Akbar and Irfandi Fauzi. They are active students in the Faculty of Geography University Muhammadiyah Surakarta."},"osm-iran-aparat":{name:"OpenStreetMap Iran Aparat",description:"Subscribe to our channel at {url}",extendedDescription:"A good resource of videos about anything related to OpenStreetMap. Mainly in Persian."},"osm-iran-forum":{name:"OpenStreetMap Iran web forum",description:"OpenStreetMap Iran web forum",extendedDescription:"A web forum for OpenStreetMap users in Iran. Feel free to ask questions and discuss with others!"},"osm-iran-telegram":{name:"OpenStreetMap Iran Telegram",description:"You're welcome to join our Telegram channel at {url}. We also have a supergroup of many OSMers interested in Iran. Find its link in bio of channel."},"OSM-japan-facebook":{name:"OpenStreetMap Japan Community",description:"Mappers and OpenStreetMap users in Japan"},"OSM-japan-mailinglist":{name:"OpenStreetMap Japan Mailinglist",description:"Talk-ja is an Official Mailinglist for Japanese Community"},"OSM-japan-twitter":{name:"OpenStreetMap Japan Twitter",description:"Hashtag on Twitter: {url}"},"OSM-japan-website":{name:"OpenStreetMap Japan",description:"Mappers and OpenStreetMap users in Japan"},"OSM-MY-facebook":{name:"OpenStreetMap Malaysia on Facebook",description:"For chat about anything related to OpenStreetMap!"},"OSM-MY-forum":{name:"OpenStreetMap Malaysia Forum",description:"Official OpenStreetMap Malaysia Forum"},"OSM-MY-matrix":{name:"OpenStreetMap Malaysia Riot channel",description:"All mappers are welcome! Sign up at {signupUrl}"},"OSM-MNG-facebook":{name:"OpenStreetMap Mongolia",description:"Improve OpenStreetMap in Mongolia",extendedDescription:"Mapping in Mongolia? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!"},"OSM-MMR-facebook":{name:"OpenStreetMap Myanmar",description:"Improve OpenStreetMap in Myanmar",extendedDescription:"Mapping in Myanmar? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!"},"OSM-Nepal-facebook":{name:"OpenStreetMap Nepal",description:"Improve OpenStreetMap in Nepal",extendedDescription:"Mapping in Nepal? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!"},"ym-Institute-of-Crisis-Management-Studies":{name:"Institute of Crisis Management Studies YouthMappers",description:"YouthMappers chapter at Institute of Crisis Management Studies",extendedDescription:"To develop Crisis Mappers to assist during disaster situations."},"ym-Kathmandu-University":{name:"Geomatics Engineering Society,GES",description:"YouthMappers chapter at Kathmandu University",extendedDescription:"Geomatics Engineering Society (GES) established in 2008 A.D is a departmental club under Department of Civil and Geomatics Engineering (DCGE) at Kathmandu University. GES acts as a platform to develop the skills of students apart from their educational activities by focusing on activities like technical trainings, seminars, talk programs and interaction with experts from related field, sports activities etc."},"ym-Tribhuvan-University":{name:"Geomatics Engineering Students Association",description:"YouthMappers chapter at Tribhuvan University",extendedDescription:"This organization is the student forum of Geomatics Engineering students of Tribhuvan University , Institute of Engineering on the Pashchimanchal campus. Established since the beginning of the degree program, students have been active in mapping and leadership and are thrilled to be a part of the YouthMappers network."},"OSM-Asia-mailinglist":{name:"OpenStreetMap Asia Mailinglist",description:"Talk-asia is the official Mailinglist for Asian Community"},"osm-asia-telegram":{name:"OpenStreetMap Asia Telegram",description:"Join our family: {url}"},"OSM-PH-facebook":{name:"OpenStreetMap PH Facebook",description:"Welcome to OpenStreetMap Philippines, where we encourage all fellow Filipinos to contribute to the OpenStreetMap project."},"OSM-PH-mailinglist":{name:"Talk-ph Mailing List",description:"A mailing list to discuss OpenStreetMap in the Philippines"},"OSM-PH-slack":{name:"OpenStreetMap PH Slack",description:"All are welcome! Sign up at {signupUrl}"},"OSM-PH-telegram":{name:"OpenStreetMap PH Telegram",description:"Un-official, Telegram local community of OpenStreetMap contributors and friends in the Philippines"},"ym-Far-Eastern-University-Institute-of-Technology":{name:"Junior Philippines Computer Society",description:"YouthMappers chapter at Far Eastern University -Institute of Technology",extendedDescription:"FEU has been recognized as one of the leading universities in the Philippines. Its mission centers on producing graduates who have contributed to the advancement of the country. The university continuously challenges itself to raise the bar of excellence to achieve a top-tier status not only in the Philippines but also in the South East Asian region"},"ym-University-of-the-Philippines-Resilience-Institute":{name:"YouthMappers UP Resilience Institute",description:"YouthMappers chapter at University of the Philippines Resilience Institute",extendedDescription:"The UP Resilience Institute was established in 2016 with a mission statement to empower local communities through multidisciplinary research and actions toward resilience. Through UP NOAH Center, and the help of different organizations, we have provided building exposure maps for 17 provinces out of the 82 and uploaded more than 4 million footprints to Open Street Maps."},"OSM-RU-forum":{name:"OpenStreetMap RU forum",description:"OpenStreetMap Russia web forum"},"OSM-RU-telegram":{name:"OpenStreetMap RU telegram",description:"OpenStreetMap Russia telegram chat"},"OSM-south-korea-telegram":{name:"OSM South Korea Telegram",description:"Unofficial Channnel for OpenStreetMap contributors, communities, and users in South Korea to share and discuss."},"OSM-sri-lanka-facebook":{name:"OpenStreetMap Sri Lanka",description:"Improve OpenStreetMap in Sri Lanka",extendedDescription:"Mapping in Sri Lanka? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!"},"OSM-TW-facebook":{name:"OpenStreetMap Taiwan Community",description:"Facebook Group for Mappers and OpenStreetMap users to discuss matters about Taiwan."},"OSM-TW-mailinglist":{name:"OpenStreetMap Taiwan Mailinglist",description:"Talk-tw is an Official Mailinglist for the Communities to dicuss matters about Taiwan"},"OSM-TH-CNX-meetup":{name:"OSM Meetup Chiang Mai",description:"Irregular meeting of the OpenStreetMap community in Chiang Mai",extendedDescription:"Members of the OpenStreetMap community meet every few months in Chiang Mai. Get in contact and check out {url} to see when the next meetup is scheduled"},"OSM-TH-facebook":{name:"OpenStreetMap TH Facebook group",description:"Facebook group for OpenStreetMappers in Thailand"},"OSM-TH-forum":{name:"OpenStreetMap TH forum",description:"OpenStreetMap Thailand web forum"},"al-forum":{name:"OSM Albania Forum",description:"OpenStreetMap Albania Forum"},"al-maptime-tirana":{name:"Maptime Tirana",description:"Social events organized around mapping - beginners most welcome!",extendedDescription:"Maptime is an open learning environment for all levels and degrees of knowledge, offering intentional educational support for the beginner. Maptime is simultaneously flexible and structured, creating space for mapping tutorials, workshops, ongoing projects with a shared goal, and independent/collaborative work time."},"al-telegram":{name:"OSM Albania Telegram channel",description:"OpenStreetMap Albania Telegram channel"},"at-forum":{name:"OpenStreetMap Austria Forum",description:"The official forum for OpenStreetMap questions in and around Austria"},"at-mailinglist":{name:"Talk-at Mailing List",description:"Talk-at is the official mailing list for the Austrian OSM community"},"at-twitter":{name:"OpenStreetMap Austria Twitter",description:"OpenStreetMap Austria On Twitter: {url}"},"osmgraz-meetup":{name:"OSM community meetup Graz",description:"Monthly meetup of the OpenStreetMap community in Graz"},"osmgraz-twitter":{name:"OSM community Graz on twitter",description:"OpenStreetMap community in Graz on twitter"},"osm-at":{name:"OpenStreetMap Austria",description:"The platform for information on OpenStreetMap in Austria"},byosm:{name:"OpenStreetMap Belarus",description:"OpenStreetMap Belarus telegram chat"},"be-facebook":{name:"OpenStreetMap BE Community",description:"Mappers and OpenStreetMap on Facebook in Belgium"},"be-forum":{name:"OpenStreetMap BE forum",description:"OpenStreetMap Belgium web forum"},"be-irc":{name:"OpenStreetMap Belgium IRC",description:"Join #osmbe on irc.oftc.net (port 6667)",extendedDescription:"Join #osmbe on irc.oftc.net (port 6667), it is bridged with the Matrix chat channel"},"be-mailinglist":{name:"Talk-be Mailing List",description:"Talk-be is the official mailing list for the Belgian OSM community"},"be-matrix":{name:"OpenStreetMap BE Matrix channel",description:"All mappers are welcome!",extendedDescription:"Most talk is happening at the \"OpenStreetMap Belgium\" channel. You can ask anything there! The other rooms are for specific subjects."},"be-meetup":{name:"OpenStreetMap Belgium Meetup",description:"Real life meetups of everyone who is interested in OpenStreetMap",extendedDescription:"Physical meetups are great to meet other mappers, ask them questions and to learn a lot. Especially new contributors are very welcome!"},"be-twitter":{name:"OpenStreetMap Belgium Twitter",description:"OSM Belgium on Twitter: @osm_be"},"hr-facebook":{name:"OpenStreetMap Croatia Facebook group",description:"OpenStreetMap Croatia Facebook group"},"hr-irc":{name:"OpenStreetMap Croatia on IRC",description:"Join #osm-hr on irc.freenode.org (port 6667)"},"hr-mailinglist":{name:"Talk-hr Mailing List",description:"Talk-hr mailing list"},"czech-community":{name:"Czech OSM community",description:"Map portal, website and contacts on OSM members in Czechia"},"osmcz-facebook":{name:"OpenStreetMap CZ on Facebook",description:"Follow czech community on Facebook - including translated WeeklyOSM!"},"osmcz-twitter":{name:"Czech twitter @osmcz",description:"Follow czech community on Twitter - including translated WeeklyOSM!"},"talk-cz-mailinglist":{name:"Czech mailing list (talk-cz)",description:"Talk-cz is the official mailing list for Czech community"},"dk-forum":{name:"OpenStreetMap Denmark Web Forum",description:"OpenStreetMap Denmark web forum"},"dk-irc":{name:"OpenStreetMap Denmark IRC",description:"Join #osm-dk on irc.oftc.net (port 6667)"},"dk-mailinglist":{name:"Talk-dk Mailing List",description:"A mailing list to discuss OpenStreetMap in Denmark"},"ym-Queen-Mary-University-of-London":{name:"Queen Mary YouthMappers",description:"YouthMappers chapter at Queen Mary University of London",extendedDescription:"This chapter will be part of the activities of the Queen Mary Geography Society."},"fi-forum":{name:"OpenStreetMap FI forum",description:"OpenStreetMap Finland web forum"},"fi-irc":{name:"OpenStreetMap Finland IRC",description:"Join #osm-fi on irc.oftc.net (port 6667)"},"fi-mailinglist":{name:"Talk-fi Mailing List",description:"Talk-fi is the official mailing list for the Finnish OSM community"},"fr-facebook":{name:"OpenStreetMap France Facebook page",description:"OpenStreetMap France Facebook page"},"fr-forum":{name:"OpenStreetMap France web forum",description:"OpenStreetMap France web forum"},"fr-irc":{name:"OpenStreetMap France on IRC",description:"Join #osm-fr on irc.oftc.net (port 6667)"},"fr-mailinglist":{name:"Talk-fr Mailing List",description:"Talk-fr mailing list"},"fr-twitter":{name:"OpenStreetMap France on Twitter",description:"OpenStreetMap France on Twitter: {url}"},"de-berlin-mailinglist":{name:"Berlin Mailing List",description:"This is the mailing list for the Berlin OSM community"},"de-berlin-meetup":{name:"OpenStreetMap Berlin-Brandenburg Meetup",description:"Mappers and OpenStreetMap users in the Berlin area"},"de-berlin-telegram":{name:"@osmberlin on Telegram",description:"OpenStreetMap Berlin Telegram chat"},"de-berlin-twitter":{name:"OpenStreetMap Berlin Twitter",description:"Follow us on Twitter: {url}"},"de-forum":{name:"OpenStreetMap DE forum",description:"OpenStreetMap Germany web forum"},"de-irc":{name:"OpenStreetMap Germany IRC",description:"Join #osm-de on irc.oftc.net (port 6667)"},"de-mailinglist":{name:"Talk-de Mailing List",description:"Talk-de is the official mailing list for the German OSM community"},"de-ostwestfalen-lippe-mailinglist":{name:"OWL Mailing List",description:"This is the mailing list for the Ostwestfalen-Lippe OSM community"},"de-telegram":{name:"OpenStreetMap Germany Telegram",description:"Join the OpenStreetMap Germany Telegram supergroup at {url}"},"osm-de":{name:"OpenStreetMap Germany",description:"The platform for information on OpenStreetMap in Germany"},"ym-Heidelberg-University":{name:"disastermappers heidelberg",description:"YouthMappers chapter at Heidelberg University",extendedDescription:"Disastermappers Heidelberg was founded in 2014 as a student initiative to build a platform for exchange between students, researchers and humanitarian actors. Disastermappers are a member of Missing Maps and are organizing mapathons, workshops and webinars in Heidelberg and beyond and support HOT and Missing Maps through research and applications."},"hu-facebook":{name:"OpenStreetMap HU on Facebook",description:"Mappers and OpenStreetMap Facebook in Hungary"},"hu-forum":{name:"OpenStreetMap HU forum",description:"OpenStreetMap Hungary web forum"},"hu-meetup":{name:"OpenStreetMap Hungary Meetup",description:"The platform for organizing meetups in Hungary"},"is-facebook":{name:"OSM Iceland on Facebook",description:"Page of OpenStreetMap in Iceland"},"is-mailinglist":{name:"Talk-is Mailing List",description:"Talk-is is the official mailing list for the Icelandic OSM community"},"is-twitter":{name:"OSM Iceland on Twitter",description:"Twitter of OpenStreetMap in Iceland"},"it-facebook":{name:"OpenStreetMap Italy Facebook",description:"Join the OpenStreetMap Italy community on Facebook"},"it-irc":{name:"OpenStreetMap Italy IRC",description:"Join #osm-it on irc.oftc.net (port 6667)"},"it-mailinglist":{name:"Talk-it Mailing List",description:"Talk-it is the official mailing list for the Italian OSM community"},"it-telegram":{name:"@OpenStreetMapItalia on Telegram",description:"OpenStreetMap Italy Telegram chat"},"it-twitter":{name:"OpenStreetMap Italy Twitter",description:"Follow us on Twitter at {url}"},"OSM-Rome-meetup":{name:"Incontro Mappatori Romani",description:"Improve OpenStreetMap in the Rome area",extendedDescription:"We aim to be a resource for people to discuss and share knowledge on utilizing free geographic data sets especially OpenStreetMap, and Open geo-spatial software that manages, edits, and displays geographic data, and advocate for its use in Lazio."},"South-Tyrol-Mailing-List":{name:"OpenStreetMap mailing list for South Tyrol",description:"OpenStreetMap Italy regional talk list for South Tyrol"},"talk-it-lazio":{name:"OpenStreetMap IT Lazio",description:"All are welcome! Sign up at {signupUrl}",extendedDescription:"Mailinglist for Rome and Lazio area."},"Trentino-Mailing-List":{name:"OpenStreetMap mailing list for Trentino",description:"OpenStreetMap Italy regional talk list for Trentino"},"ym-Politecnico-di-Milano":{name:"PoliMappers",description:"YouthMappers chapter at Politecnico di Milano",extendedDescription:"PoliMappers is a volunteer students’ association based at Politecnico di Milano. The mission of the group is to train and motivate the next generation of volunteer mappers and to do mapping using free and open source software within the university as well as primary and secondary schools."},"ym-Yarmouk-University":{name:"YouthMappers at YU",description:"YouthMappers chapter at Yarmouk University",extendedDescription:"YouthMappers chapter at YU is the first mapping group in the Middle East and North Africa region where refugees, drought, and poverty are rising crises and in urgent need for humanitarian mapping activities to mitigate the consequences of such crises. YU Mappers are encouraged to use open data to address challenges in MENA region to bring relief and development to target areas within the region."},"kosovo-telegram":{name:"OpenStreetMap Kosovo on Telegram",description:"Semi-official all-Kosovo Telegram public group. We welcome all mappers from anywhere in any language."},"ym-Universit-Mohammed-V-Rabat":{name:"Brahmapoutre at Rabat",description:"YouthMappers chapter at Université Mohammed V Rabat",extendedDescription:"This chapter sees participation in the YouthMappers program as an oppourtunity to share our knowlege create new working relationships with other chapters in different countries"},"no-forum":{name:"OpenStreetMap Norway Web Forum",description:"OpenStreetMap Norway web forum"},"no-irc":{name:"OpenStreetMap Norway on IRC",description:"Chat room for mappers and OpenStreetMap users, developers and enthusiasts in Norway"},"no-mailinglist":{name:"OpenStreetMap Norway mailing list",description:"Mailing list for mappers and OpenStreetMap users, developers and enthusiasts in Norway"},"no-telegram":{name:"@OSM_no on Telegram",description:"OpenStreetMap Norway Telegram chat"},"OSM-PL-facebook-group":{name:"OpenStreetMap Poland Facebook group",description:"Group for mappers and users of OpenStreetMap in Poland"},"OSM-PL-forum":{name:"OpenStreetMap Poland Forum",description:"Forum of Polish OpenStreetMap community"},"si-forum":{name:"OpenStreetMap Slovenia Forum",description:"Forum of OpenStreetMap community in Slovenia"},"si-mailinglist":{name:"OpenStreetMap Slovenia mailing list",description:"Mailing list of OpenStreetMap community in Slovenia"},"si-twitter":{name:"OpenStreetMap Slovenia Twitter",description:"Follow OpenStreetMap Slovenia On Twitter: {url}"},"OSM-ES-mailinglist":{name:"Talk-es mailing list",description:"A mailing list to discuss OpenStreetMap in Spain"},"OSM-ES-telegram":{name:"@OSMes on Telegram",description:"OpenStreetMap Spain Telegram chat"},"ym-Universidad-Autonoma-de-Madrid":{name:"YouthMappers at UAM",description:"YouthMappers chapter at Universidad Autonoma de Madrid"},"ym-Universidad-Politcnica-de-Madrid":{name:"Mapeo Humanitario",description:"YouthMappers chapter at Universidad Politécnica de Madrid",extendedDescription:"Geo-volunteering group formed at Moncloa Campus on November 2017. Around 20 members from three Universities (Complutense, CEU and UPM). Undergraduate students, MSc and PhD students collaborate together with organizations (MSF, Acción contra el Hambre,...) supported by trainers from Geoinquietos. Official recognition by UPM as Educative Innovation Project (Code IE1718.0411)"},"osm-se":{name:"OpenStreetMap.se",description:"Provide OSM services and information for the local community in Sweden"},"se-facebook":{name:"OpenStreetMap Sweden Facebook",description:"OpenStreetMap Sweden on Facebook"},"se-forum":{name:"OpenStreetMap Sweden Web Forum",description:"OpenStreetMap Sweden web forum"},"se-irc":{name:"OpenStreetMap Sweden IRC",description:"Join #osm.se on irc.oftc.net (port 6667)"},"se-mailinglist":{name:"Talk-se Mailing List",description:"A mailing list to discuss OpenStreetMap in Sweden"},"se-twitter":{name:"OpenStreetMap Sweden on Twitter",description:"Follow us on Twitter: {url}"},"ym-Istanbul-Technical-University":{name:"YouthMappers ITU",description:"YouthMappers chapter at Istanbul Technical University",extendedDescription:"YouthMappers ITU is an interdisciplinary and collaborative student community to promote humanitarian mapping for vulnerable settlements and aims to develop and share strategic and innovative spatial information for the future cities by using geographical information systems and open data."},"Nottingham-OSM-pub-meetup":{name:"East Midlands (Nottingham) Monthly pub meet-up",description:"Social gathering for East Midlands mappers and users",extendedDescription:"A group have been meeting since March 2011, initially in Nottingham, and, more recently in Derby, and from time to time elsewhere in the East Midlands. These are social gatherings, but are an excellent place to come and ask specific questions about OSM either in the area or in general. In the summer months we usually do some light mapping for an hour in the vicinity of our meeting place. The group as a whole has a special interest in mapping public rights of way and from time to time has mapping meetings for this purpose."},"gb-mailinglist":{name:"Talk-gb Mailing List",description:"Talk-gb is the main communication forum list for the British (including Northern Ireland) OSM community"},"mappa-mercia-group":{name:"Mappa Mercia local group",description:"A home for OpenStreetMap enthusiasts in the Midlands",extendedDescription:"Mappa Mercia is a project to grow OpenStreetMap in the West Midlands, UK. We run community events, provide training and support local organisations wishing to open up their data."},"gb-irc":{name:"OpenStreetMap United Kingdom IRC",description:"Join #osm-gb on irc.oftc.net (port 6667)",extendedDescription:"Join #osm-gb on irc.oftc.net (port 6667), please be patient and wait for a few minutes if you ask a question"},"ym-University-of-Exeter":{name:"University of Exeter British Red Cross Missing Maps",description:"YouthMappers chapter at University of Exeter",extendedDescription:"We are a team of enthusiastic Geographers with comprehensive knowledge of GIS. We are passionate about supporting the British Red Cross Society with various humanitarian aid efforts. We are also important teachers of the significance of mapping remotely sensed data and how this helps on the ground. Our mapathons have themed academic focuses that highlight the different GIS research in our geography department, while also functioning as employability awareness events which we use to invite speakers in to talk about their GIS/British Red Cross careers."},"ym-University-of-Warwick":{name:"University of Warwick Resilience Mapping Society",description:"YouthMappers chapter at University of Warwick",extendedDescription:"We are a group of enthusiastic mappers based at Warwick University. Our aim is to get people excited about humanitarian mapping and help them understand the impact this activity has on the field. We are closely aligned with Missing Maps and Doctors Without Borders UK and focus on HOT tasks in our mapping activities and workshops. Our mapathons are listed on the Missing Maps page whenever they are scheduled."},"ym-Sacred-Heart-Junior-College":{name:"Youth Mappers at Sacred Heart Junior College",description:"YouthMappers chapter at Sacred Heart Junior College"},"OSM-CA-Slack":{name:"OSM-CA Slack",description:"All are welcome! Sign up at {signupUrl}."},"OSM-Vancouver-meetup":{name:"OpenStreetMap Vancouver",description:"Mappers and OpenStreetMap users in the Vancouver, BC area"},"ym-Universidad-de-Costa-Rica":{name:"YouthMappers de Universidad de Costa Rica",description:"YouthMappers chapter at Universidad de Costa Rica",extendedDescription:"YouthMappers de Universidad de Costa Rica nace en función de acción social para y por miembros de comunidades distintas según temáticas de involucramiento, interacción y representación de variables dentro de un espacio geográfico definido (un territorio) Gracias a las herramientas de OpenStreetMaps tenemos la viabilidad de poder obtener, validar y compartir la información generada para comprobación y uso destinadas a las comunidades o el interesado en tales temáticas objetivas."},"OSM-CU-telegram":{name:"OSM Cuba on Telegram",description:"OpenStreetMap Cuba Telegram chat"},"ym-Universidad-Nacional-Autnoma-de-Honduras":{name:"PumaGis Hn",description:"YouthMappers chapter at Universidad Nacional Autónoma de Honduras"},"ym-University-of-the-West-Indies-Mona-Campus":{name:"Libraries Outreach - ODL",description:"YouthMappers chapter at University of the West Indies, Mona Campus",extendedDescription:"The UWI, Mona Campus Library engages in public, outreach and special projects. This will allow our library the means to be a catalyst for spatial literacy and advocate for spatial data sharing and access to Jamaican and Caribbean interests. We have disaster relief and communication needs and extensive earth science and geo-hazards needs to better serve our campus and community. Specifically, we hace a Science Library to showcase such to all faculty and students."},"OSM-NI-telegram":{name:"OSM Nicaragua on Telegram",description:"OpenStreetMap Nicaragua Telegram chat"},"ym-Universidad-Nacional-de-Ingenieria":{name:"Yeka Street MGA",description:"YouthMappers chapter at Universidad Nacional de Ingenieria",extendedDescription:"YEKA STREET is a work team constituted by students from Universidad Nacional de Ingenieria at Managua, Nicaragua. With the principal purpose of apply our knowledge and skills using many tools and apps to map areas in our cities and contribute to the development community projects and disasters relieve plans. We want to lead the way adding more students from all careers and universities in our country to join us at this cause, increasing in this way the life level and reducing the population vulnerability."},"ym-University-of-Panama":{name:"YouthMappers UP",description:"YouthMappers chapter at University of Panama",extendedDescription:"Student mappers in Panama work with open spatial data to help identify, define, address, and create meaning about locally defined development challenges. They collaborate with students from other countries on community mapping topics from ecotourism to food security, from biodiversity to indigenous issues, promoting a humanistic vision through scientific perspectives."},"ym-Universidad-de-Puerto-Rico-Rio-Piedras":{name:"UPR YouthMappers",description:"YouthMappers chapter at Universidad de Puerto Rico - Rio Piedras"},"Bay-Area-OpenStreetMappers":{name:"Bay Area OpenStreetMappers",description:"Improve OpenStreetMap in the Bay Area",extendedDescription:"This group is about growing the OpenStreetMap community here in the Bay Area. Our events are open to everyone, from open source enthusiasts, cyclists, GIS professionals, geocachers, and beyond. Anyone and everyone who is interested in maps, map making and free map data is welcome to join our group as well as attend our events."},"Central-Pennsylvania-OSM":{name:"Central Pennsylvania OSM",description:"Online mapping community based out of State College, PA"},"Code-for-San-Jose-Slack":{name:"Code for San Jose Slack",description:"All are welcome! Sign up at {signupUrl}, then join the #osm channel."},"Dallas-Fort-Worth-OSM":{name:"Dallas-Fort Worth OSM",description:"The OpenStreetMap user group for Dallas-Fort Worth",extendedDescription:"Dallas, Fort Worth, and all the cities in between are abounding with creative and tech-savvy people. The vision for this usergroup is to find new ways to use the amazing resource of OSM."},GeoPhilly:{name:"GeoPhilly",description:"Meetup for map enthusiasts in the Philadelphia area",extendedDescription:"GeoPhilly unites developers, geographers, data geeks, open source enthusiasts, civic hackers and map addicts in our shared love of maps and the stories they tell. If you use maps as part of your work or just want to learn more, this is the meetup for you! Our events aim to be open, friendly, educational and social and range from happy hours to lightning talks or even workshops. Come create a diverse, inspiring geospatial community in the Philadelphia with us!"},MapMinnesota:{name:"MapMinnesota",description:"Mappers and OpenStreetMap enthusiasts in the Twin Cities area",extendedDescription:"Connecting OpenStreetMap enthusiasts in Minnesota and the Twin Cities!"},"Mapping-DC-meetup":{name:"Mapping DC",description:"Improve OpenStreetMap in the DC area",extendedDescription:"We are a group of volunteer mappers who aim to improve the OpenStreetMap in the DC area. We also aim to teach others about the OSM ecosystem, data analytics, cartography, and GIS. We gather every other month at meetups to focus on one area of our city."},"Maptime-ME-meetup":{name:"MaptimeME",description:"Mappers and OpenStreetMap users, around Portland, ME",extendedDescription:"Maptime is, rather literally, time for mapmaking. Our mission is to open the doors of cartographic possibility to anyone interested by creating a time and space for collaborative learning, exploration, and map creation using mapping tools and technologies."},"MaptimeHRVA-twitter":{name:"MaptimeHRVA Twitter",description:"Follow us on Twitter at {url}"},"us-ma-mailinglist":{name:"Talk-us-massachusetts Mailing List",description:"Email mailing list for the Massachusetts OSM community"},"OpenCleveland-meetup":{name:"Open Cleveland",description:"Improve OpenStreetMap in the Cleveland area",extendedDescription:"Open Geo Cleveland aims to be a resource for people to discuss and share knowledge on utilizing free geographic data sets especially OpenStreetMap, and Open geo-spatial software that manages, edits, and displays geographic data, and advocate for its use in Northeast Ohio. We're also a maptime chapter =)"},"OSM-Boston":{name:"OpenStreetMap Boston",description:"Mappers and OpenStreetMap users in the Boston area",extendedDescription:"OpenStreetMap is the free and open, wiki-style map of the world, with hundreds of thousands of contributions every day from people like you. Editing the map is simple, and fun! Join us both indoors and outdoors in our effort to create the best map of the Boston area and the rest of the world!"},"OSM-Central-Salish-Sea":{name:"OpenStreetMap Central Salish Sea",description:"Mappers and OpenStreetMap users around Mount Vernon, WA",extendedDescription:"OpenStreetMap is an map of the world made by people like you. It's a map that you build, that's given away for free like wikipedia. Check out osm.org for more. We meet all the time to talk maps, make maps and have fun!"},"OSM-Chattanooga":{name:"OSM Chattanooga",description:"The OpenStreetMap user group for Chattanooga"},"OSM-Colorado":{name:"OpenStreetMap Colorado",description:"Mappers and OpenStreetMap users in the state of Colorado, USA",extendedDescription:"OpenStreetMap (OSM) Colorado is a local collaboration of people interested in contributing their efforts to create free maps. We encourage all of our mappers to organize or suggest mapping events throughout the state. Meetup activities can be simple social mixers, OSM basic to advanced training, or community mapping parties."},"OSM-NYC":{name:"OpenStreetMap NYC",description:"Mappers and OpenStreetMap users, developers and enthusiasts in the New York Metropolitan area"},"OSM-Portland-forum":{name:"OpenStreetMap PDX Google Group",description:"Forum and mailing list for OpenStreetMap users in the Portland area",extendedDescription:"This group is to facilitate improvements to OpenStreetMap in the Portland, Oregon area to support applications such as the Open Trip Planner."},"OSM-Portland":{name:"OpenStreetMap Portland",description:"Mappers and OpenStreetMap users in the Portland area",extendedDescription:"OpenStreetMap (OSM) is a map of the world made by people like you. It's a map that you build, that's given away for free like wikipedia. Check out osm.org for more, and come join us at a meetup to talk maps, contribute to OSM, and have fun!"},"OSM-Seattle":{name:"OpenStreetMap Seattle",description:"Mappers and OpenStreetMap users in the Seattle area"},"OSM-SoCal":{name:"OpenStreetMap Southern California",description:"Let's have some fun, contribute something to Los Angeles, and learn about mapping!",extendedDescription:"OpenStreetMap (OSM) Southern California is for anyone interested in mapping to get together to work with OpenStreetMap. OpenStreetMap, the Wikipedia of maps, is a free open-source map of the world being created by more than 1,000,000 volunteers around the globe. Everyone is welcome. If you don't know OpenStreetMap, we'll teach you. If you have an idea for a mapping project or even a field trip that the group can do, great!"},"OSM-South-Bay":{name:"OSM South Bay",description:"Map Nights hosted by Code for San Jose",extendedDescription:"Code for San Jose, the local Code for America brigade, hosts monthly Map Nights on Thursday nights in downtown San José. Meet fellow South Bay mappers, help out with local mapping projects, and hear about other civic tech projects. Programming and GIS skills are not required."},"OSM-Tampa-Bay":{name:"OpenStreetMap Tampa Bay",description:"Mappers and OpenStreetMap users in the Tampa Bay area",extendedDescription:"OSM Tampa Bay group for local residents to get together and build out the definitive map of Tampa Bay with OpenStreetMap, the free and editable map of the world. If you're into maps, data, open source, GPS, hiking, cycling, et cetera, you'll love working with OpenStreetMap -- so join in! We'll get together and map and talk about new topics once-a-month or so."},"OSM-US-Slack":{name:"OpenStreetMap US Slack",description:"All are welcome! Sign up at {signupUrl}"},"OSM-US":{name:"OpenStreetMap US",description:"We help grow and improve OpenStreetMap in the United States.",extendedDescription:"We support OpenStreetMap by holding annual conferences, providing community resources, building partnerships, and by spreading the word. Join OpenStreetMap US here: {signupUrl}",events:{"sotmus2019-cfs":{name:"Propose a Talk for SotM-US 2019",description:"We are calling on all members of the OpenStreetMap community to share your ideas and session proposals for State of the Map US 2019. Whether you are brand new to OSM or have been a core contributor since the beginning, we want to hear from you!",where:"Minneapolis, Minnesota"},sotmus2019:{name:"State of the Map US 2019",description:"Join the OpenStreetMap community at State of the Map US in Minneapolis, Minnesota. Connect with other mappers, businesses, government agencies, and non profits, all collaborating around the free and editable map of the world.",where:"Minneapolis, Minnesota"}}},"OSM-Utah":{name:"OpenStreetMap Utah",description:"Mappers and OpenStreetMap users in the Salt Lake City area",extendedDescription:"Activities may include things like Learn To Map workshops, mapping parties and outdoor data collection. The events will take place in the SLC area, at least initially. We are looking for seasoned mappers as well as people new to OSM. Join and let's do some mapping!"},"OSM-Wyoming":{name:"OpenStreetMap Wyoming",description:"Mappers and OpenStreetMap users in the state of Wyoming",extendedDescription:"OpenStreetMap (OSM) Wyoming is a local collaboration of people interested in contributing their efforts to create free maps. We encourage all of our mappers to organize or suggest mapping events throughout the state. Meetup activities can be simple social mixers, OSM basic to advanced training, or community mapping parties."},"PHXGeo-meetup":{name:"PHXGeo Meetup",description:"Mappers and OpenStreetMap users in the Phoenix, AZ area",extendedDescription:"This is a meetup group for those in the Phoenix area who like maps, GIS, OpenStreetMap, cartography and anything in between."},"PHXGeo-twitter":{name:"PHXGeo Twitter",description:"Follow us on Twitter at {url}"},"Western-Slope-facebook":{name:"Western Slope OSM Facebook",description:"Mappers and OpenStreetMap users around Grand Junction, CO"},"Western-Slope-meetup":{name:"Western Slope OSM Meetup",description:"Mappers and OpenStreetMap users around Grand Junction, CO",extendedDescription:"The goal of this group is to introduce OpenStreetMap to the community, develop a community of mappers, create the most amazing geodata possible using whatever method we can and finally strategize in order to get this data out into our community. Imagine accurate trail signage! Imagine further development of bike paths! Imagine anything you want, that's the joy of OpenStreetMap!"},"ym-Ball-State-University":{name:"Gamma Theta Upsilon- Iota Omega Chapter",description:"YouthMappers chapter at Ball State University",extendedDescription:"Our chapter is a very active one. We primarily focus on community events, fundraising, and field trips. We are currently looking to develop more mapping-related activities to draw in other students from campus who may be interested in contributing."},"ym-California-University-of-Pennsylvania":{name:"CalU PA GIS Club",description:"YouthMappers chapter at California University of Pennsylvania",extendedDescription:"GIS Students at Cal U learn to apply spatial theory to the real world. The university degree program focuses on geography as well as utilizing GIS in emergency management."},"ym-Central-Washington-University":{name:"Geography Club",description:"YouthMappers chapter at Central Washington University",extendedDescription:"Our goal teaming up with Youthmappers is to bring relief to areas that are in need of humanitarian mapping. By doing so, we are serving our fellow brothers and sisters around the world as well as furthering our own cartography skills."},"ym-Clemson-University":{name:"Clemson Mappers",description:"YouthMappers chapter at Clemson University",extendedDescription:"Students in Clemson are supported by the Center for Geospatial Technologies, a community of interdisciplinary geospatial science practitioners supporting research, teaching, and outreach activities using technologies that enable the collection, analysis, and application of geospatial data. Students integrate geospatial technologies within their scholarly activities across all disciplines and build connections throughout the world."},"ym-College-of-William-and-Mary":{name:"All over the map!",description:"YouthMappers chapter at College of William and Mary",extendedDescription:"The students who are all over the map are supported by the Center for Geospatial Analysis, a group integrating GIS across the curriculum and providing student and faculty with hardware, software, and expertise. Students of all backgrounds utilize GIS across campus, including environmental science and policy, geology, history, business, sociology, biology, anthropology, public policy, and marine sciences."},"ym-Cornell-University":{name:"Mapping Society",description:"YouthMappers chapter at Cornell University",extendedDescription:"Cornell students and faculty use open data and open source software to address challenges at local, national, and global scales. In doing so, we advance our academic and personal goals of developing our own skills around GIS and spatial literacy."},"ym-George-Mason-University":{name:"Mason Mappers",description:"YouthMappers chapter at George Mason University",extendedDescription:"Mason Mappers Student Society is a humanitarian mapping student organization in the George Mason University GGS Department, and its goal is to promote education and knowledge in geo-technologies, geo-info science, to foster good global stewardship and engage in professional development while building a positive, interactive geo-community, as well as shaping students into leaders of tomorrow."},"ym-Indiana-University-of-Pennsylvania":{name:"Geospatial Science Club",description:"YouthMappers chapter at Indiana University of Pennsylvania"},"ym-Jacksonville-State-University":{name:"JSU Disaster Mapping Team",description:"YouthMappers chapter at Jacksonville State University",extendedDescription:"The JSU Disaster Mapping Team is a program at Jacksonville State University dedicated to assisting disaster response in times of emergencies. This includes tornadoes, severe thunderstorms, floods, etc. The team is intended to be a valuable asset to surrounding counties and a conduit for the JSU Geoscience Department students to apply what they have learned in an academic setting to support emergency services. Our goal is to streamline disaster response and recovery operations while utilizing student skill sets"},"ym-Kansas-State-University":{name:"Gamma Theta Upsilon: Beta Psi Chapter",description:"YouthMappers chapter at Kansas State University",extendedDescription:"We are the Kansas State University Chapter of Gamma Theta Upsilon, an international geography honor society with affiliation to YouthMappers. We have been active with mapping for OSM and conducted a mapathon called \"Map for Nepal,\" in which we used OpenStreetMap to digitize unmapped areas of Nepal after the earthquake in 2015."},"ym-McGill-University":{name:"Open Mapping Group McGill: A Member of the McGill Undergraduate Geography Society",description:"YouthMappers chapter at McGill University",extendedDescription:"The Open Mapping Group McGill: A Member of McGill Undergraduate Geography Society (OMG McGill) aims to connect students with open geospatial data and technologies to enhance resilience, community-building, and learning through mapping–on campus, in Montreal, in Canada, and abroad."},"ym-Miami-University":{name:"Geography and Planning Society",description:"YouthMappers chapter at Miami University",extendedDescription:"GPS at Miami University aims to create a close-knit community of planners and geographers who want to have fun, learn more about careers and higher education in their field, network, and work alongside professionals for real experience."},"ym-Monroe-Community-College":{name:"MCC Mapping Corps",description:"YouthMappers chapter at Monroe Community College"},"ym-Montgomery-College":{name:"GeoMC",description:"YouthMappers chapter at Montgomery College",extendedDescription:"GeoMC’s mission is to provide students with hands-on experience in applying geospatial tools, collecting data, and project management. Most of our students come with a background in GIS and are geography majors. Our chapter’s members come from diverse backgrounds and we all work together to make a positive impact in the world live in."},"ym-New-York-University":{name:"NYU mHealth Initiative Mapping Corps",description:"YouthMappers chapter at New York University",extendedDescription:"The NYU mobile health or “mHealth” research initiative focuses on development of systems that link people - usually via their phones - to the places that they live and traverse, and thus supports novel research on the way phones and maps can be leveraged to understand behavioral decision making and ultimately health outcomes."},"ym-Ohio-Wesleyan-University":{name:"Environment and Wildlife Club",description:"YouthMappers chapter at Ohio Wesleyan University",extendedDescription:"Environment and Wildlife Club looks at environmental issues on campus, in Delaware, and even nationally! We create campus and community projects, explore and enjoy the outdoors, volunteer, and try to promote environmentalism in every aspect of our lives."},"ym-Oklahoma-State-University":{name:"Geography Club",description:"YouthMappers chapter at Oklahoma State University"},"ym-State-University-of-New-York-Geneseo":{name:"SUNY Geneseo GIS Association",description:"YouthMappers chapter at State University of New York Geneseo",extendedDescription:"We spread awareness, support, education, volunteerism, and career advancement opportunities in geographic information systems, across disciplines and departments, in the context of SUNY Geneseo, the local community, and global community."},"ym-SUNY-at-Fredonia":{name:"Geoventurers",description:"YouthMappers chapter at SUNY at Fredonia",extendedDescription:"GeoVenturers is a group of students joining together across a number of majors on our campus that see geospatial technologies as a tool to serve others and to bring people together. Mentoring for the group brings in science education from the department of curriculum and instruction. We hope that we can bring our skills to play in helping make people's lives better."},"ym-Texas-Tech-University":{name:"YouthMappers at TTU",description:"YouthMappers chapter at Texas Tech University",extendedDescription:"As one of the co-founding chapters of the network, the TTU YouthMappers are enthusiastic to serve as interdisciplinary leaders to help create open geographic data and analyses that address locally defined development challenges worldwide. The chapter strives to exchange and collaborate with other chapters around the globe while also offering themselves as a local resource and service to Texas Tech student organizations in ways that add value to their respecitive campus activities through mapping."},"ym-The-Citadel":{name:"YouthMappers at The Citadel",description:"YouthMappers chapter at The Citadel",extendedDescription:"This chapter is also a Rotaract Club, which is an affiliate of Rotary International. Multiple members, as well as leadership have expressed an interest in YouthMappers and we would like to affiliate our Citadel Rotaract Club with YouthMappers."},"ym-The-George-Washington-University":{name:"Humanitarian Mapping Society",description:"YouthMappers chapter at The George Washington University",extendedDescription:"Models of leadership and engagement, HMS seeks to render aid and better the world through humanitarian Geographic Information Systems (GIS) projects. This co-founding affiliated chapter on the campus of GWU has a plethora of experience to share, and frequently partners directly with USAID, the American Red Cross, and the US Department of State in their DC area to expand student-led efforts and serve the global community."},"ym-The-Johns-Hopkins-University-SAIS":{name:"SAIS YouthMappers",description:"YouthMappers chapter at The Johns Hopkins University, SAIS",extendedDescription:"The mission of SAIS Youth Mappers is to provide students at the Johns Hopkins University SAIS with the opportunity to become highly skilled humanitarian mappers. As a group within the South Asia Club, its primary focus is on supporting humanitarian mapping projects in the Indo-Pacific Region."},"ym-The-Pennsylvania-State-University":{name:"Penn State GIS Coalition",description:"YouthMappers chapter at The Pennsylvania State University",extendedDescription:"The Penn State Geospatial Information Science (GIS) Coalition is an organization that offers students majoring, minoring, or sharing an interest in GIS opportunities to develop supplementary knowledge and skills necessary to succeed in the professional GIS industry."},"ym-University-of-California-Davis":{name:"Mapping Club",description:"YouthMappers chapter at University of California, Davis"},"ym-University-of-Central-Florida":{name:"Geospatial Information Society",description:"YouthMappers chapter at University of Central Florida",extendedDescription:"Our mission is to foster a social and educational environment for all majors who are interested in the discussion and application of GIS. Group and community events throughout the academic year organize students to volunteer to help local and regional communities by using community-based GIS projects and educating local middle and high school students on the use and application of GIS."},"ym-University-of-Chicago":{name:"Tobler Society",description:"YouthMappers chapter at University of Chicago"},"ym-University-of-Maryland-College-Park":{name:"Geography Club",description:"YouthMappers chapter at University of Maryland - College Park",extendedDescription:"The mission of the Geography Club at the University of Maryland College Park is to engage and encourage students to explore geographic interests within the campus and the community."},"ym-University-of-North-Texas":{name:"UNT Geography Club",description:"YouthMappers chapter at University of North Texas",extendedDescription:"The Geography Club is a student organization at University of North Texas that welcomes all students who are interested in geography. The objective of the Geography Club is to promote interest in Geography, the Major and the Geography Department along with fellowship among students and faculty. The club also seeks to represent student needs and wants in regard to the study of geography and to provide a forum for the presentation of innovative ideas to the benefit of the University community."},"ym-University-of-Northern-Colorado":{name:"UNCO Geography and GIS Club",description:"YouthMappers chapter at University of Northern Colorado",extendedDescription:"Official Geography and GIS Club chapter affiliated with the University of Northern Colorado where our aim is to learn, share and connect with those around us. #MakingSenseOfTheWorld"},"ym-University-of-Oregon":{name:"Map by Northwest",description:"YouthMappers chapter at University of Oregon",extendedDescription:"Map By Northwest aims to engage undergraduate students at the University of Oregon in mapping projects to assist in humanitarian causes and for conducting geographic research. We welcome students from all disciplines to join us in our mapping adventures."},"ym-University-of-Redlands":{name:"URSpatial Geo-Thinkers",description:"YouthMappers chapter at University of Redlands",extendedDescription:"To build upon the members' GIS skills and knowledge of the tools and methods through applied social engagement as well as to educate the campus community about the power of mapping and spatial analysis through community service events."},"ym-University-of-South-Carolina":{name:"Geography Graduate Student Association",description:"YouthMappers chapter at University of South Carolina",extendedDescription:"The GGSA is a fully student-run organization, designed to serve as an advocate and resource for all geography graduate students by filling the role of liaison between the department and students. Our goal is to further professional, academic, and personal development of graduate students interested in the field of geography and its sub disciplines."},"ym-University-of-Southern-California":{name:"SC Mappers",description:"YouthMappers chapter at University of Southern California",extendedDescription:"We see the world differently: we view it through a spatial lens. With the power of spatial thinking, we connect place and space to help address global challenges. Collaborate with us!"},"ym-University-of-Vermont":{name:"University of Vermont Humanitarian Mapping Club",description:"YouthMappers chapter at University of Vermont"},"ym-University-of-Victoria":{name:"Society of Geography Students",description:"YouthMappers chapter at University of Victoria",extendedDescription:"SOGS seeks to promote and represent social and academic interests within the Department of Geography. This is expressed by four key goals: To provide a forum for the discussion of matters concerning the quality and accessibility of education within geography; to provide a means of expressing a consensus of student opinion to deparhnental faculty through representation at deparkrnental meetings and on departrnental committees; to undertake anangements for such activities as are for the benefit of students and are seen to be within the field of interest of students in geography; to act as a liaison through the UVSS and the Course Union Council with other student groups on campus"},"ym-University-of-Wyoming":{name:"Gamma Theta Upsilon/Geography Club",description:"YouthMappers chapter at University of Wyoming"},"ym-UW-Madison":{name:"BadgerMaps",description:"YouthMappers chapter at UW-Madison",extendedDescription:"BadgerMaps is the UW campus chapter of Youthmappers, an organization dedicated to humanitarian and community mapping services. We connect our volunteer network with opportunities to create GIS data for projects that need it."},"ym-Vassar-College":{name:"Hudson Valley Mappers",description:"YouthMappers chapter at Vassar College",extendedDescription:"Our mission is to provide a multi-disciplinary platform for peers, educators, and community organizations to engage in local mapping projects with a focus on strengthening our local ecosystems, our built environment, and the health of our community. We also seek to contribute geospatial support for global humanitarian aid and development efforts."},"ym-Villanova-University":{name:"The Villanova Globeplotters",description:"YouthMappers chapter at Villanova University",extendedDescription:"The Villanova Globeplotters is built on Villanova’s Augustinian principle of selfless-service to the global community. Mixed with relaxed social interaction, we strive to provide geospatial outreach to those in need regardless of participating students’ race, academic major, student group association, or college career level."},"ym-West-Virginia-University":{name:"Maptime Morgantown",description:"YouthMappers chapter at West Virginia University",extendedDescription:"Working as a collaborative team, this co-founding chapter focuses on providing an open learning environment for those interested in working on projects that intersect international development, emergency response, and geographic information science.\nThey connect beginners and experts by providing technical training and experience in building meaningful and useful geographic infrastructure data, while connecting to sister cities around the world."},"ym-Western-Michigan-University":{name:"Geography Club",description:"YouthMappers chapter at Western Michigan University"},"Maptime-Australia-Slack":{name:"Maptime Australia Slack",description:"Sign up at {signupUrl}"},"talk-au":{name:"Talk-au Mailing List",description:"Place for Aussie mappers to chat"},"OSM-AR-facebook":{name:"OpenStreetMap Argentina Facebook",description:"Join the OpenStreetMap Argentina community on Facebook",extendedDescription:"News from the local community"},"OSM-AR-forum":{name:"OpenStreetMap Argentina web forum",description:"Join the OpenStreetMap Argentina web forum",extendedDescription:"Ideal for long or important discussions. Slow response time."},"OSM-AR-irc":{name:"OpenStreetMap Argentina IRC",description:"Join #osm-ar on irc.oftc.net (port 6667)",extendedDescription:"You may find the most geeky user in the community."},"OSM-AR-mailinglist":{name:"Talk-ar Mailing List",description:"Historic mailing list. Almost unused today."},"OSM-AR-telegram":{name:"OpenStreetMap Argentina Telegram",description:"Join the OpenStreetMap Argentina community on Telegram",extendedDescription:"The most active channel in the community, ideal for chatting and getting answers to your questions instantly. Everyone is welcome!"},"OSM-AR-twitter":{name:"OpenStreetMap Argentina Twitter",description:"Follow us on Twitter at {url}",extendedDescription:"News from the local community and OpenStreetMap in general."},"OSM-BO-mailinglist":{name:"Talk-bo Mailing List",description:"Talk-bo is the official mailing list for the Bolivian OpenStreetMap community",extendedDescription:"Mapping in Bolivia? Have questions, want to connect with the community here? Join us at {url}. All are welcome!"},"Bahia-telegram":{name:"OpenStreetMap Bahia Telegram Group",description:"Join the OpenStreetMap Bahia community on Telegram",extendedDescription:"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!"},"DF-telegram":{name:"OpenStreetMap Brasília Telegram Group",description:"Join the OpenStreetMap Brasília community on Telegram",extendedDescription:"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!"},"OSM-br-mailinglist":{name:"Talk-br Mailing List",description:"A mailing list to discuss OpenStreetMap in Brazil"},"OSM-br-telegram":{name:"OpenStreetMap Brasil Telegram",description:"Join the OpenStreetMap Brasil community on Telegram",extendedDescription:"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!"},"OSM-br-twitter":{name:"OpenStreetMap Brasil Twitter",description:"Follow us on Twitter at {url}"},"RS-telegram":{name:"OpenStreetMap Rio Grande do Sul Telegram Group",description:"Join the OpenStreetMap Rio Grande do Sul community on Telegram",extendedDescription:"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!"},"OSM-CL-facebook":{name:"OpenStreetMap Chile Facebook",description:"Join the OpenStreetMap Chile community on Facebook",extendedDescription:"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!"},"OSM-CL-mailinglist":{name:"Talk-cl Mailing List",description:"A mailing list to discuss OpenStreetMap in Chile"},"OSM-CL-telegram":{name:"OpenStreetMap Chile Telegram",description:"Join the OpenStreetMap Chile community on Telegram",extendedDescription:"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!"},"OSM-CL-twitter":{name:"OpenStreetMap Chile Twitter",description:"Follow us on Twitter at {url}"},"Maptime-Bogota":{name:"Maptime Bogotá",description:"We're a group of mappers interested in mapping in OpenStreetMap around Bogotá.",extendedDescription:"Learn to collect data in the field and digitize onto OpenStreetMap. It is not necessary to have previous knowledge! You just need the desire to participate, learn, and have fun."},"OSM-CO-facebook":{name:"OpenStreetMap Colombia Facebook",description:"Join the OpenStreetMap Colombia community on Facebook",extendedDescription:"Join the community to learn more about OpenStreetMap. Everyone is welcome!"},"OSM-CO-mailinglist":{name:"Talk-co Mailing List",description:"A mailing list to discuss OpenStreetMap in Colombia"},"OSM-CO-telegram":{name:"OSM Colombia on Telegram",description:"OpenStreetMap Colombia Telegram chat"},"OSM-CO-twitter":{name:"OpenStreetMap Colombia Twitter",description:"Follow us on Twitter at {url}"},"OSM-CO":{name:"OpenStreetMap Colombia",description:"News of the OpenStreetMap Colombia community and the OSMCo Foundation"},"ym-Universidad-de-Antioquia":{name:"Geomatica UDEA",description:"YouthMappers chapter at Universidad de Antioquia",extendedDescription:"We are a group interested in geospatial data, voluntary cartography, and participating in mapping with others in our country and within the YouthMappers network."},"ym-Universidad-de-La-Guajira":{name:"Grupo Mesh",description:"YouthMappers chapter at Universidad de La Guajira",extendedDescription:"Grupo Mesh is a student organization at the Universidad de la Guajira in Colombia, including students from the program of Environmental Engineering who learn cartography and open mapping."},"ym-Universidad-de-Los-Andes":{name:"Cartografos Uniandes",description:"YouthMappers chapter at Universidad de Los Andes",extendedDescription:"We are a circle of student participation that seeks to use mapping and spatial reasoning as a means to create bonds of cooperation and integration between the university and society by addressing different spatial, social, political , economic and cultural dynamics."},"ym-Universidad-de-San-Buenaventura":{name:"YouthMappers San Buenaventura",description:"YouthMappers chapter at Universidad de San Buenaventura",extendedDescription:"We are pleased to join YouthMappers mapping for a better world and community."},"ym-Universidad-Distrital-Francisco-Jose-de-Caldas":{name:"YouthMappers at Bogota",description:"YouthMappers chapter at Universidad Distrital Francisco Jose de Caldas",extendedDescription:"The Universidad Distrital Francisco José de Caldas is a public, coeducational, research university based in Bogotá, Colombia with a population of 26,140 students."},"ym-Universidad-Nacional-de-Colombia":{name:"Grupo UN",description:"YouthMappers chapter at Universidad Nacional de Colombia",extendedDescription:"Students are uniting to map and network with university students across the country of Colombia and across the globe. Geographic specialties include affiliation with microbiology and health disciplines."},"OSM-EC-telegram":{name:"OSM Ecuador on Telegram",description:"OpenStreetMap Ecuador Telegram chat"},"OSM-PY-telegram":{name:"OSM Paraguay on Telegram",description:"OpenStreetMap Paraguay Telegram chat"},"OSM-PE-facebook":{name:"OpenStreetMap Peru Facebook",description:"Join the OpenStreetMap Peru community on Facebook"},"OSM-PE-mailinglist":{name:"Talk-pe Mailing List",description:"The official mailing list for the OpenStreetMap Peru community"},"OSM-PE-matrix":{name:"OpenStreetMap Peru Matrix Chat",description:"Chat with other members of the OpenStreetMap Peru community in Matrix."},"OSM-PE-telegram":{name:"OpenStreetMap Peru Telegram",description:"Join the OpenStreetMap Peru community on Telegram"},"OSM-PE-twitter":{name:"OpenStreetMap Peru Twitter",description:"Follow us on Twitter at {url}"},"OSM-PE":{name:"OpenStreetMap Peru",description:"News and resources for the OpenStreetMap Peru community"},"LATAM-Facebook":{name:"OpenStreetMap Latam Facebook",description:"OpenStreetMap Latam on Facebook"},"LATAM-Telegram":{name:"OpenStreetMap Latam Telegram",description:"OpenStreetMap Telegram for Latin America"},"LATAM-Twitter":{name:"OpenStreetMap Latam Twitter",description:"Follow us on Twitter at {url}"},"osm-latam":{name:"OpenStreetMap Latam",description:"Supporting OpenStreetMap in Latin America",events:{"sotm-latam-2018":{name:"State of the Map Latam 2018",description:"State of the Map Latam is the annual conference for all mappers and users of OpenStreetMap in Latin America. The program includes talks, panels, workshops, and mapathons related to OpenStreetMap.",where:"Buenos Aires, Argentina"}}},"OSM-Discord":{name:"OpenStreetMap Discord",description:"Get in touch with other mappers via Discord"},"OSM-Facebook":{name:"OpenStreetMap on Facebook",description:"Like us on Facebook for news and updates about OpenStreetMap."},"OSM-help":{name:"OpenStreetMap Help",description:"Ask a question and get answers on OSM's community-driven question and answer site.",extendedDescription:"{url} is for everyone who needs help with OpenStreetMap. Whether you are a beginner mapper or have a technical question, we're here to help!"},"OSM-IRC":{name:"OpenStreetMap IRC",description:"Join #osm on irc.oftc.net (port 6667)"},"OSM-Reddit":{name:"OpenStreetMap on Reddit",description:"/r/openstreetmap/ is a great place to learn more about OpenStreetMap. Ask us anything!"},"OSM-Telegram":{name:"OpenStreetMap Telegram",description:"Join the OpenStreetMap Telegram global supergroup at {url}"},"OSM-Twitter":{name:"OpenStreetMap Twitter",description:"Follow us on Twitter at {url}"},OSMF:{name:"OpenStreetMap Foundation",description:"OSMF is a UK-based not-for-profit that supports the OpenStreetMap Project",extendedDescription:"OSMF supports the OpenStreetMap by fundraising, maintaining the servers which power OSM, organizing the annual State of the Map conference, and coordinating the volunteers who keep OSM running. You can show your support and have a voice in the direction of OpenStreetMap by joining as an OSMF member here: {signupUrl}",events:{sotm2018:{name:"State of the Map 2018",description:"Join us for 3 days in Milan, Italy for the annual worldwide OpenStreetMap conference, bringing together everyone in the community to socialize, share, and learn.",where:"Milan, Italy"}}}}};
24692 var features$2 = {botswana:{type:"Feature",id:"botswana",properties:{},geometry:{type:"Polygon",coordinates:[[[25.65423,-18.48085],[25.70131,-18.56629],[25.79198,-18.60814],[25.83557,-18.82958],[25.95414,-18.89236],[26.00296,-19.02313],[25.9925,-19.058],[26.17908,-19.52356],[26.25057,-19.57064],[26.32554,-19.57064],[26.37611,-19.62121],[26.35344,-19.64562],[26.70741,-19.87404],[26.73356,-19.91763],[26.97419,-20.00133],[27.04394,-19.99784],[27.13984,-20.06585],[27.22005,-20.07456],[27.30723,-20.22626],[27.31769,-20.45643],[27.73269,-20.4913],[27.74664,-20.70926],[27.71525,-21.07718],[27.9088,-21.2777],[28.02562,-21.55668],[28.19825,-21.5933],[28.37261,-21.59679],[28.50339,-21.65433],[28.58011,-21.62643],[28.8033,-21.71362],[29.08577,-21.80603],[29.03346,-21.90193],[29.06659,-22.02399],[29.17645,-22.07107],[29.25665,-22.05189],[29.38569,-22.19312],[29.32117,-22.21231],[29.0387,-22.23323],[29.01428,-22.27159],[28.97941,-22.31344],[28.98115,-22.34482],[28.94105,-22.45991],[28.52257,-22.59766],[28.36041,-22.58371],[28.18255,-22.70053],[28.18255,-22.74761],[28.06747,-22.89931],[27.95239,-22.9708],[27.96285,-23.03532],[27.74838,-23.24107],[27.68561,-23.21666],[27.62109,-23.23758],[27.56006,-23.36836],[27.2741,-23.49565],[27.08578,-23.66304],[27.00034,-23.70489],[26.88875,-24.10593],[26.87654,-24.26635],[26.74228,-24.31343],[26.57663,-24.45292],[26.42842,-24.64821],[25.8844,-24.77724],[25.89486,-24.88012],[25.76585,-25.17485],[25.66467,-25.48682],[25.58448,-25.64908],[25.3456,-25.78509],[25.11021,-25.76939],[25.02517,-25.71967],[24.92538,-25.81822],[24.69696,-25.83042],[24.46156,-25.74324],[24.37786,-25.76765],[24.21127,-25.67022],[23.92974,-25.64036],[23.66819,-25.44158],[23.3121,-25.26869],[22.88179,-25.50087],[22.72835,-26.01351],[22.63768,-26.10767],[22.56793,-26.2367],[22.48424,-26.21054],[22.35521,-26.33609],[22.24971,-26.35352],[22.07317,-26.63251],[21.9668,-26.67131],[21.79767,-26.66956],[21.77761,-26.69223],[21.80377,-26.78465],[21.6913,-26.87096],[21.59889,-26.8605],[21.5274,-26.86224],[21.32339,-26.84349],[21.14248,-26.87375],[21.00386,-26.84873],[20.98729,-26.81621],[20.85826,-26.80575],[20.68477,-26.92022],[20.61677,-26.79293],[20.61589,-26.68718],[20.622,-26.60461],[20.5941,-26.47558],[20.82252,-26.153],[20.78939,-25.92458],[20.63769,-25.63862],[20.63595,-25.55143],[20.36045,-25.06321],[20.25583,-24.93766],[20.11982,-24.89756],[19.98556,-24.76853],[19.99602,-21.99435],[20.9934,-22.00132],[20.99514,-18.30648],[21.45547,-18.31171],[23.10324,-17.98913],[23.31422,-17.98913],[23.43105,-18.18268],[23.54439,-18.26289],[23.60542,-18.48085],[23.77455,-18.36577],[23.91928,-18.20884],[24.18606,-18.01355],[24.36915,-17.94031],[24.47377,-17.956],[24.51038,-18.03621],[24.57839,-18.05714],[24.615,-17.98565],[24.71439,-17.89498],[24.97594,-17.77466],[25.09102,-17.82174],[25.15903,-17.76246],[25.27411,-17.79559],[25.25493,-17.91241],[25.31596,-18.06062],[25.40489,-18.1077],[25.5374,-18.37972],[25.65423,-18.48085]]]}},"Centre-Universitaire-de-Recherche-et-dApplication-en-Tldtection-CURAT-de-lUniversit-Felix-Houphouet-Boigny":{type:"Feature",id:"Centre-Universitaire-de-Recherche-et-dApplication-en-Tldtection-CURAT-de-lUniversit-Felix-Houphouet-Boigny",properties:{},geometry:{type:"Polygon",coordinates:[[[-3.98799,5.5686],[-3.94397,5.56428],[-3.90165,5.5515],[-3.86264,5.53074],[-3.82846,5.5028],[-3.80041,5.46876],[-3.77958,5.42993],[-3.76675,5.38779],[-3.76243,5.34398],[-3.76678,5.30017],[-3.77963,5.25804],[-3.80049,5.21922],[-3.82854,5.1852],[-3.86272,5.15728],[-3.90171,5.13653],[-3.94401,5.12375],[-3.98799,5.11944],[-4.03198,5.12375],[-4.07428,5.13653],[-4.11327,5.15728],[-4.14745,5.1852],[-4.1755,5.21922],[-4.19635,5.25804],[-4.2092,5.30017],[-4.21355,5.34398],[-4.20924,5.38779],[-4.19641,5.42993],[-4.17558,5.46876],[-4.14753,5.5028],[-4.11335,5.53074],[-4.07434,5.5515],[-4.03201,5.56428],[-3.98799,5.5686]]]}},"The-Gambia-YMCA-University-of-the-Gambia":{type:"Feature",id:"The-Gambia-YMCA-University-of-the-Gambia",properties:{},geometry:{type:"Polygon",coordinates:[[[-16.6763,13.68253],[-16.63121,13.67821],[-16.58785,13.66542],[-16.54791,13.64465],[-16.5129,13.6167],[-16.48419,13.58265],[-16.46288,13.54381],[-16.44977,13.50166],[-16.44538,13.45785],[-16.44986,13.41404],[-16.46303,13.37192],[-16.4844,13.33311],[-16.51312,13.2991],[-16.54811,13.27119],[-16.58801,13.25045],[-16.63129,13.23769],[-16.6763,13.23337],[-16.72131,13.23769],[-16.76459,13.25045],[-16.80449,13.27119],[-16.83948,13.2991],[-16.8682,13.33311],[-16.88956,13.37192],[-16.90274,13.41404],[-16.90722,13.45785],[-16.90282,13.50166],[-16.88972,13.54381],[-16.8684,13.58265],[-16.83969,13.6167],[-16.80469,13.64465],[-16.76474,13.66542],[-16.72139,13.67821],[-16.6763,13.68253]]]}},cape_coast_gh:{type:"Feature",id:"cape_coast_gh",properties:{},geometry:{type:"Polygon",coordinates:[[[-1.6,5],[-1.6,5.4],[-1,5.4],[-1,5],[-1.6,5]]]}},ghana:{type:"Feature",properties:{},id:"ghana",geometry:{type:"Polygon",coordinates:[[[-3.11256,5.13335],[-2.97215,5.11112],[-2.94811,5.12753],[-2.75757,5.10599],[-2.7253,5.14087],[-2.78641,5.28242],[-2.78297,5.29541],[-2.76993,5.2937],[-2.76546,5.31797],[-2.77748,5.33079],[-2.77319,5.35557],[-2.72495,5.34224],[-2.78023,5.60642],[-2.86022,5.65049],[-2.92889,5.61838],[-2.96631,5.64127],[-2.95292,5.71643],[-3.02639,5.7096],[-3.01987,5.8575],[-3.07411,5.98624],[-3.10226,6.15284],[-3.15514,6.25114],[-3.17574,6.25182],[-3.17162,6.29755],[-3.23753,6.54183],[-3.23341,6.60049],[-3.26157,6.61959],[-3.21007,6.73417],[-3.24028,6.83031],[-2.95326,7.23817],[-2.97558,7.27018],[-2.92236,7.61436],[-2.77611,7.94432],[-2.60513,8.03747],[-2.62985,8.11769],[-2.48978,8.20877],[-2.64221,9.00988],[-2.77679,9.03972],[-2.76581,9.15633],[-2.66968,9.26478],[-2.93884,10.66601],[-2.82898,11.0113],[-0.68939,11.00051],[-0.60974,10.91962],[-0.43121,11.04095],[-0.43396,11.10295],[-0.27843,11.17672],[-0.13424,11.13967],[-0.14214,11.10632],[-0.05905,11.08341],[-0.0388,11.10733],[-0.01339,11.11204],[0.02369,11.05308],[0.03296,10.97793],[-0.00549,10.96411],[-0.02266,10.81914],[-0.07141,10.76856],[-0.07999,10.69806],[-0.05905,10.63294],[0.04257,10.60257],[0.0618,10.56207],[0.14351,10.52629],[0.17097,10.42265],[0.26711,10.41151],[0.28633,10.42096],[0.34264,10.31357],[0.39757,10.31492],[0.39722,10.30546],[0.37148,10.28283],[0.35225,10.10746],[0.41817,10.06487],[0.40924,10.01822],[0.36461,10.03174],[0.34676,9.66506],[0.26779,9.64678],[0.24994,9.44771],[0.42847,9.48564],[0.56168,9.40977],[0.48203,8.80501],[0.3804,8.74122],[0.47653,8.59324],[0.65369,8.49546],[0.65781,8.42347],[0.70862,8.38339],[0.72784,8.28964],[0.60425,8.21693],[0.62004,7.70623],[0.59464,7.70283],[0.5809,7.62253],[0.52322,7.5953],[0.52734,7.45099],[0.56168,7.39243],[0.62759,7.40741],[0.66055,7.30935],[0.59395,7.11248],[0.61317,7.09306],[0.59601,7.00549],[0.52322,6.97823],[0.52322,6.94006],[0.56442,6.92234],[0.53284,6.82962],[0.65094,6.73962],[0.63446,6.63733],[0.74707,6.57048],[0.71411,6.51864],[0.90242,6.33355],[1.00405,6.33543],[1.02516,6.25319],[1.05537,6.22964],[1.1,6.17],[1.2,6.17],[1.2,4],[-3,4.5],[-3.11256,5.13335]]]}},"Kwame-Nkrumah-University-of-Science-and-Technology":{type:"Feature",id:"Kwame-Nkrumah-University-of-Science-and-Technology",properties:{},geometry:{type:"Polygon",coordinates:[[[-1.56831,6.89695],[-1.52418,6.89263],[-1.48174,6.87985],[-1.44264,6.85909],[-1.40837,6.83115],[-1.38026,6.7971],[-1.35937,6.75827],[-1.34652,6.71613],[-1.3422,6.67232],[-1.34656,6.62851],[-1.35945,6.58638],[-1.38035,6.54757],[-1.40848,6.51354],[-1.44274,6.48562],[-1.48182,6.46488],[-1.52422,6.45211],[-1.56831,6.44779],[-1.6124,6.45211],[-1.6548,6.46488],[-1.69388,6.48562],[-1.72814,6.51354],[-1.75627,6.54757],[-1.77717,6.58638],[-1.79006,6.62851],[-1.79442,6.67232],[-1.7901,6.71613],[-1.77725,6.75827],[-1.75636,6.7971],[-1.72825,6.83115],[-1.69398,6.85909],[-1.65488,6.87985],[-1.61244,6.89263],[-1.56831,6.89695]]]}},"University-of-Cape-Coast":{type:"Feature",id:"University-of-Cape-Coast",properties:{},geometry:{type:"Polygon",coordinates:[[[-1.23047,5.31552],[-1.18647,5.31121],[-1.14416,5.29842],[-1.10517,5.27766],[-1.071,5.24973],[-1.04296,5.21569],[-1.02214,5.17685],[-1.00932,5.13472],[-1.005,5.0909],[-1.00935,5.04709],[-1.02219,5.00497],[-1.04303,4.96615],[-1.07108,4.93212],[-1.10524,4.9042],[-1.14421,4.88345],[-1.1865,4.87068],[-1.23047,4.86637],[-1.27444,4.87068],[-1.31672,4.88345],[-1.3557,4.9042],[-1.38986,4.93212],[-1.4179,4.96615],[-1.43875,5.00497],[-1.45159,5.04709],[-1.45594,5.0909],[-1.45162,5.13472],[-1.4388,5.17685],[-1.41798,5.21569],[-1.38994,5.24973],[-1.35577,5.27766],[-1.31678,5.29842],[-1.27447,5.31121],[-1.23047,5.31552]]]}},"University-of-Energy-and-Natural-Resources":{type:"Feature",id:"University-of-Energy-and-Natural-Resources",properties:{},geometry:{type:"Polygon",coordinates:[[[-2.343,7.57482],[-2.2988,7.5705],[-2.2563,7.55771],[-2.21714,7.53695],[-2.18283,7.50901],[-2.15467,7.47497],[-2.13376,7.43613],[-2.12089,7.394],[-2.11656,7.35018],[-2.12093,7.30637],[-2.13384,7.26425],[-2.15477,7.22543],[-2.18294,7.19141],[-2.21725,7.16349],[-2.25639,7.14275],[-2.29885,7.12997],[-2.343,7.12566],[-2.38715,7.12997],[-2.42961,7.14275],[-2.46875,7.16349],[-2.50306,7.19141],[-2.53123,7.22543],[-2.55216,7.26425],[-2.56507,7.30637],[-2.56944,7.35018],[-2.56511,7.394],[-2.55224,7.43613],[-2.53133,7.47497],[-2.50317,7.50901],[-2.46886,7.53695],[-2.4297,7.55771],[-2.3872,7.5705],[-2.343,7.57482]]]}},"University-of-Ghana":{type:"Feature",id:"University-of-Ghana",properties:{},geometry:{type:"Polygon",coordinates:[[[-0.19624,5.87573],[-0.15219,5.87141],[-0.10984,5.85863],[-0.07082,5.83787],[-0.03662,5.80993],[-0.00855,5.77589],[0.01229,5.73706],[0.02512,5.69492],[0.02944,5.65111],[0.02509,5.6073],[0.01223,5.56517],[-0.00863,5.52635],[-0.0367,5.49233],[-0.0709,5.46441],[-0.1099,5.44366],[-0.15223,5.43089],[-0.19624,5.42657],[-0.24025,5.43089],[-0.28257,5.44366],[-0.32157,5.46441],[-0.35577,5.49233],[-0.38384,5.52635],[-0.4047,5.56517],[-0.41756,5.6073],[-0.42191,5.65111],[-0.41759,5.69492],[-0.40476,5.73706],[-0.38392,5.77589],[-0.35586,5.80993],[-0.32166,5.83787],[-0.28263,5.85863],[-0.24028,5.87141],[-0.19624,5.87573]]]}},"University-of-Mines-and-Technology":{type:"Feature",id:"University-of-Mines-and-Technology",properties:{},geometry:{type:"Polygon",coordinates:[[[-2.00125,5.52338],[-1.95723,5.51907],[-1.91491,5.50628],[-1.87591,5.48552],[-1.84173,5.45759],[-1.81368,5.42355],[-1.79285,5.38471],[-1.78003,5.34258],[-1.77571,5.29876],[-1.78006,5.25495],[-1.7929,5.21283],[-1.81376,5.17401],[-1.84181,5.13998],[-1.87598,5.11206],[-1.91497,5.09132],[-1.95726,5.07854],[-2.00125,5.07423],[-2.04524,5.07854],[-2.08753,5.09132],[-2.12652,5.11206],[-2.16069,5.13998],[-2.18874,5.17401],[-2.2096,5.21283],[-2.22244,5.25495],[-2.22679,5.29876],[-2.22247,5.34258],[-2.20965,5.38471],[-2.18882,5.42355],[-2.16077,5.45759],[-2.12659,5.48552],[-2.08759,5.50628],[-2.04527,5.51907],[-2.00125,5.52338]]]}},"General-Lansana-Conte-University":{type:"Feature",id:"General-Lansana-Conte-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-13.62305,9.93364],[-13.57857,9.92932],[-13.5358,9.91653],[-13.49639,9.89576],[-13.46186,9.86782],[-13.43353,9.83377],[-13.41249,9.79494],[-13.39955,9.7528],[-13.3952,9.70898],[-13.39961,9.66517],[-13.4126,9.62305],[-13.43367,9.58424],[-13.46201,9.55022],[-13.49653,9.5223],[-13.53591,9.50156],[-13.57863,9.48879],[-13.62305,9.48448],[-13.66747,9.48879],[-13.71018,9.50156],[-13.74956,9.5223],[-13.78408,9.55022],[-13.81242,9.58424],[-13.83349,9.62305],[-13.84648,9.66517],[-13.85089,9.70898],[-13.84654,9.7528],[-13.8336,9.79494],[-13.81256,9.83377],[-13.78423,9.86782],[-13.7497,9.89576],[-13.71029,9.91653],[-13.66753,9.92932],[-13.62305,9.93364]]]}},"Institute-of-Science-and-Veterinary-Medicine":{type:"Feature",id:"Institute-of-Science-and-Veterinary-Medicine",properties:{},geometry:{type:"Polygon",coordinates:[[[-12.1175,10.91114],[-12.07288,10.90682],[-12.02998,10.89403],[-11.99045,10.87326],[-11.95581,10.84532],[-11.9274,10.81127],[-11.90629,10.77243],[-11.89332,10.73029],[-11.88896,10.68648],[-11.89338,10.64267],[-11.90641,10.60055],[-11.92755,10.56173],[-11.95598,10.52772],[-11.99061,10.4998],[-12.0301,10.47906],[-12.07295,10.46629],[-12.1175,10.46198],[-12.16205,10.46629],[-12.2049,10.47906],[-12.24439,10.4998],[-12.27902,10.52772],[-12.30745,10.56173],[-12.32859,10.60055],[-12.34162,10.64267],[-12.34604,10.68648],[-12.34168,10.73029],[-12.32871,10.77243],[-12.3076,10.81127],[-12.27919,10.84532],[-12.24455,10.87326],[-12.20502,10.89403],[-12.16212,10.90682],[-12.1175,10.91114]]]}},"Universit-de-NZrkor":{type:"Feature",id:"Universit-de-NZrkor",properties:{},geometry:{type:"Polygon",coordinates:[[[-8.83716,7.95701],[-8.79292,7.95269],[-8.75039,7.9399],[-8.71119,7.91914],[-8.67684,7.8912],[-8.64866,7.85715],[-8.62773,7.81832],[-8.61485,7.77618],[-8.61052,7.73237],[-8.6149,7.68856],[-8.62781,7.64643],[-8.64877,7.60762],[-8.67696,7.5736],[-8.7113,7.54568],[-8.75047,7.52493],[-8.79297,7.51216],[-8.83716,7.50785],[-8.88135,7.51216],[-8.92385,7.52493],[-8.96302,7.54568],[-8.99736,7.5736],[-9.02555,7.60762],[-9.0465,7.64643],[-9.05942,7.68856],[-9.0638,7.73237],[-9.05947,7.77618],[-9.04659,7.81832],[-9.02566,7.85715],[-8.99748,7.8912],[-8.96313,7.91914],[-8.92393,7.9399],[-8.8814,7.95269],[-8.83716,7.95701]]]}},"Dedan-Kimathi-University-of-Technology":{type:"Feature",id:"Dedan-Kimathi-University-of-Technology",properties:{},geometry:{type:"Polygon",coordinates:[[[37.00195,-0.21487],[37.04577,-0.21919],[37.0879,-0.23196],[37.12672,-0.25272],[37.16076,-0.28065],[37.18869,-0.31468],[37.20944,-0.3535],[37.22222,-0.39563],[37.22654,-0.43945],[37.22222,-0.48326],[37.20945,-0.52539],[37.18869,-0.56422],[37.16076,-0.59825],[37.12673,-0.62618],[37.0879,-0.64693],[37.04577,-0.65971],[37.00195,-0.66403],[36.95814,-0.65971],[36.91601,-0.64693],[36.87718,-0.62618],[36.84314,-0.59825],[36.81521,-0.56422],[36.79446,-0.52539],[36.78168,-0.48326],[36.77737,-0.43945],[36.78168,-0.39563],[36.79447,-0.3535],[36.81522,-0.31468],[36.84315,-0.28065],[36.87718,-0.25272],[36.91601,-0.23196],[36.95814,-0.21919],[37.00195,-0.21487]]]}},"Jomo-Kenyatta-University-of-Agriculture-and-Technology":{type:"Feature",id:"Jomo-Kenyatta-University-of-Agriculture-and-Technology",properties:{},geometry:{type:"Polygon",coordinates:[[[37.0105,-0.86452],[37.05432,-0.86884],[37.09645,-0.88162],[37.13528,-0.90237],[37.16932,-0.93029],[37.19726,-0.96433],[37.21802,-1.00315],[37.2308,-1.04528],[37.23512,-1.08909],[37.23081,-1.1329],[37.21803,-1.17504],[37.19727,-1.21386],[37.16934,-1.2479],[37.1353,-1.27583],[37.09646,-1.29658],[37.05432,-1.30936],[37.0105,-1.31368],[36.96668,-1.30936],[36.92454,-1.29658],[36.8857,-1.27583],[36.85166,-1.2479],[36.82373,-1.21386],[36.80297,-1.17504],[36.79019,-1.1329],[36.78588,-1.08909],[36.7902,-1.04528],[36.80298,-1.00315],[36.82374,-0.96433],[36.85168,-0.93029],[36.88572,-0.90237],[36.92455,-0.88162],[36.96668,-0.86884],[37.0105,-0.86452]]]}},"Karatina-University":{type:"Feature",id:"Karatina-University",properties:{},geometry:{type:"Polygon",coordinates:[[[37.12789,-0.25676],[37.1717,-0.26108],[37.21383,-0.27386],[37.25266,-0.29461],[37.28669,-0.32254],[37.31462,-0.35657],[37.33538,-0.3954],[37.34816,-0.43752],[37.35247,-0.48134],[37.34816,-0.52515],[37.33538,-0.56728],[37.31463,-0.60611],[37.2867,-0.64014],[37.25267,-0.66807],[37.21384,-0.68882],[37.1717,-0.7016],[37.12789,-0.70592],[37.08407,-0.7016],[37.04194,-0.68882],[37.00311,-0.66807],[36.96908,-0.64014],[36.94115,-0.60611],[36.92039,-0.56728],[36.90762,-0.52515],[36.9033,-0.48134],[36.90762,-0.43752],[36.9204,-0.3954],[36.94115,-0.35657],[36.96908,-0.32254],[37.00312,-0.29461],[37.04194,-0.27386],[37.08407,-0.26108],[37.12789,-0.25676]]]}},"Kenyatta-University":{type:"Feature",id:"Kenyatta-University",properties:{},geometry:{type:"Polygon",coordinates:[[[36.93493,-0.95538],[36.97875,-0.9597],[37.02089,-0.97248],[37.05972,-0.99323],[37.09376,-1.02116],[37.12169,-1.05519],[37.14245,-1.09401],[37.15524,-1.13614],[37.15956,-1.17995],[37.15524,-1.22377],[37.14247,-1.2659],[37.12171,-1.30472],[37.09378,-1.33876],[37.05974,-1.36669],[37.0209,-1.38744],[36.97876,-1.40023],[36.93493,-1.40454],[36.8911,-1.40023],[36.84896,-1.38744],[36.81013,-1.36669],[36.77609,-1.33876],[36.74815,-1.30472],[36.7274,-1.2659],[36.71462,-1.22377],[36.7103,-1.17995],[36.71462,-1.13614],[36.72741,-1.09401],[36.74817,-1.05519],[36.7761,-1.02116],[36.81014,-0.99323],[36.84898,-0.97248],[36.89111,-0.9597],[36.93493,-0.95538]]]}},"Moi-University":{type:"Feature",id:"Moi-University",properties:{},geometry:{type:"Polygon",coordinates:[[[35.50781,-0.12698],[35.55163,-0.1313],[35.59376,-0.14408],[35.63258,-0.16483],[35.66661,-0.19276],[35.69454,-0.22679],[35.7153,-0.26562],[35.72808,-0.30774],[35.7324,-0.35156],[35.72808,-0.39537],[35.7153,-0.4375],[35.69455,-0.47633],[35.66662,-0.51036],[35.63259,-0.53829],[35.59376,-0.55904],[35.55163,-0.57182],[35.50781,-0.57614],[35.464,-0.57182],[35.42187,-0.55904],[35.38304,-0.53829],[35.34901,-0.51036],[35.32108,-0.47633],[35.30032,-0.4375],[35.28754,-0.39537],[35.28323,-0.35156],[35.28755,-0.30774],[35.30033,-0.26562],[35.32108,-0.22679],[35.34901,-0.19276],[35.38304,-0.16483],[35.42187,-0.14408],[35.464,-0.1313],[35.50781,-0.12698]]]}},"Technical-University-of-Kenya":{type:"Feature",id:"Technical-University-of-Kenya",properties:{},geometry:{type:"Polygon",coordinates:[[[36.82449,-1.06703],[36.86831,-1.07134],[36.91045,-1.08412],[36.94928,-1.10487],[36.98332,-1.1328],[37.01126,-1.16683],[37.03202,-1.20566],[37.04481,-1.24778],[37.04913,-1.2916],[37.04481,-1.33541],[37.03203,-1.37754],[37.01128,-1.41637],[36.98334,-1.4504],[36.9493,-1.47833],[36.91046,-1.49909],[36.86832,-1.51187],[36.82449,-1.51618],[36.78066,-1.51187],[36.73852,-1.49909],[36.69968,-1.47833],[36.66564,-1.4504],[36.6377,-1.41637],[36.61695,-1.37754],[36.60417,-1.33541],[36.59986,-1.2916],[36.60418,-1.24778],[36.61696,-1.20566],[36.63772,-1.16683],[36.66566,-1.1328],[36.6997,-1.10487],[36.73853,-1.08412],[36.78067,-1.07134],[36.82449,-1.06703]]]}},"University-of-Nairobi":{type:"Feature",id:"University-of-Nairobi",properties:{},geometry:{type:"Polygon",coordinates:[[[36.82617,-1.09366],[36.86999,-1.09798],[36.91213,-1.11076],[36.95097,-1.13151],[36.98501,-1.15944],[37.01294,-1.19347],[37.0337,-1.23229],[37.04649,-1.27442],[37.05081,-1.31823],[37.0465,-1.36205],[37.03372,-1.40418],[37.01296,-1.44301],[36.98503,-1.47704],[36.95098,-1.50497],[36.91214,-1.52573],[36.87,-1.53851],[36.82617,-1.54282],[36.78234,-1.53851],[36.7402,-1.52573],[36.70136,-1.50497],[36.66732,-1.47704],[36.63938,-1.44301],[36.61863,-1.40418],[36.60585,-1.36205],[36.60153,-1.31823],[36.60585,-1.27442],[36.61864,-1.23229],[36.6394,-1.19347],[36.66734,-1.15944],[36.70138,-1.13151],[36.74021,-1.11076],[36.78235,-1.09798],[36.82617,-1.09366]]]}},"African-Methodist-Episcopal-University":{type:"Feature",id:"African-Methodist-Episcopal-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-10.80063,6.53533],[-10.75653,6.53101],[-10.71413,6.51823],[-10.67505,6.49747],[-10.64081,6.46953],[-10.61272,6.43549],[-10.59185,6.39665],[-10.579,6.35452],[-10.57468,6.3107],[-10.57904,6.26689],[-10.59192,6.22477],[-10.61281,6.18595],[-10.64091,6.15193],[-10.67514,6.12401],[-10.7142,6.10326],[-10.75657,6.09049],[-10.80063,6.08617],[-10.84469,6.09049],[-10.88706,6.10326],[-10.92612,6.12401],[-10.96035,6.15193],[-10.98845,6.18595],[-11.00934,6.22477],[-11.02222,6.26689],[-11.02658,6.3107],[-11.02226,6.35452],[-11.00941,6.39665],[-10.98854,6.43549],[-10.96045,6.46953],[-10.92621,6.49747],[-10.88713,6.51823],[-10.84473,6.53101],[-10.80063,6.53533]]]}},"Cuttington-University":{type:"Feature",id:"Cuttington-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-9.5539,7.26498],[-9.50973,7.26066],[-9.46727,7.24788],[-9.42813,7.22711],[-9.39384,7.19917],[-9.3657,7.16513],[-9.3448,7.1263],[-9.33194,7.08416],[-9.32762,7.04035],[-9.33198,6.99653],[-9.34488,6.95441],[-9.3658,6.91559],[-9.39395,6.88157],[-9.42823,6.85365],[-9.46734,6.83291],[-9.50977,6.82013],[-9.5539,6.81582],[-9.59803,6.82013],[-9.64046,6.83291],[-9.67957,6.85365],[-9.71385,6.88157],[-9.742,6.91559],[-9.76292,6.95441],[-9.77582,6.99653],[-9.78018,7.04035],[-9.77586,7.08416],[-9.763,7.1263],[-9.7421,7.16513],[-9.71396,7.19917],[-9.67967,7.22711],[-9.64053,7.24788],[-9.59807,7.26066],[-9.5539,7.26498]]]}},"Grand-Gedeh-County-Community-College":{type:"Feature",id:"Grand-Gedeh-County-Community-College",properties:{},geometry:{type:"Polygon",coordinates:[[[-8.11817,6.28853],[-8.07409,6.28421],[-8.03171,6.27143],[-7.99266,6.25066],[-7.95843,6.22273],[-7.93035,6.18869],[-7.90949,6.14985],[-7.89665,6.10772],[-7.89233,6.0639],[-7.89669,6.02009],[-7.90955,5.97797],[-7.93043,5.93915],[-7.95852,5.90512],[-7.99274,5.8772],[-8.03178,5.85646],[-8.07413,5.84368],[-8.11817,5.83937],[-8.16221,5.84368],[-8.20456,5.85646],[-8.2436,5.8772],[-8.27782,5.90512],[-8.30591,5.93915],[-8.32679,5.97797],[-8.33966,6.02009],[-8.34401,6.0639],[-8.33969,6.10772],[-8.32686,6.14985],[-8.306,6.18869],[-8.27791,6.22273],[-8.24369,6.25066],[-8.20463,6.27143],[-8.16225,6.28421],[-8.11817,6.28853]]]}},"Nimba-County-Community-College":{type:"Feature",id:"Nimba-County-Community-College",properties:{},geometry:{type:"Polygon",coordinates:[[[-8.71645,7.57669],[-8.67226,7.57237],[-8.62976,7.55959],[-8.5906,7.53882],[-8.55628,7.51088],[-8.52812,7.47684],[-8.50721,7.438],[-8.49434,7.39587],[-8.49001,7.35205],[-8.49439,7.30824],[-8.50729,7.26612],[-8.52823,7.2273],[-8.55639,7.19328],[-8.5907,7.16536],[-8.62984,7.14462],[-8.6723,7.13185],[-8.71645,7.12753],[-8.76061,7.13185],[-8.80307,7.14462],[-8.84221,7.16536],[-8.87652,7.19328],[-8.90468,7.2273],[-8.92562,7.26612],[-8.93852,7.30824],[-8.9429,7.35205],[-8.93857,7.39587],[-8.9257,7.438],[-8.90479,7.47684],[-8.87663,7.51088],[-8.84231,7.53882],[-8.80315,7.55959],[-8.76065,7.57237],[-8.71645,7.57669]]]}},"Stella-Maris-Polytechnic":{type:"Feature",id:"Stella-Maris-Polytechnic",properties:{},geometry:{type:"Polygon",coordinates:[[[-10.7944,6.51458],[-10.7503,6.51026],[-10.7079,6.49748],[-10.66883,6.47672],[-10.63459,6.44878],[-10.60649,6.41474],[-10.58562,6.3759],[-10.57278,6.33377],[-10.56846,6.28995],[-10.57282,6.24614],[-10.58569,6.20402],[-10.60658,6.1652],[-10.63469,6.13117],[-10.66892,6.10325],[-10.70797,6.08251],[-10.75034,6.06973],[-10.7944,6.06542],[-10.83846,6.06973],[-10.88083,6.08251],[-10.91988,6.10325],[-10.95411,6.13117],[-10.98222,6.1652],[-11.00311,6.20402],[-11.01598,6.24614],[-11.02034,6.28995],[-11.01602,6.33377],[-11.00318,6.3759],[-10.98231,6.41474],[-10.95421,6.44878],[-10.91997,6.47672],[-10.8809,6.49748],[-10.8385,6.51026],[-10.7944,6.51458]]]}},"University-of-Liberia-YouthMappers":{type:"Feature",id:"University-of-Liberia-YouthMappers",properties:{},geometry:{type:"Polygon",coordinates:[[[-10.61986,6.60165],[-10.57576,6.59733],[-10.53335,6.58454],[-10.49427,6.56378],[-10.46002,6.53584],[-10.43192,6.5018],[-10.41105,6.46297],[-10.39821,6.42083],[-10.39389,6.37702],[-10.39825,6.33321],[-10.41112,6.29108],[-10.43202,6.25226],[-10.46012,6.21824],[-10.49436,6.19032],[-10.53342,6.16958],[-10.5758,6.1568],[-10.61986,6.15249],[-10.66393,6.1568],[-10.70631,6.16958],[-10.74536,6.19032],[-10.7796,6.21824],[-10.80771,6.25226],[-10.8286,6.29108],[-10.84148,6.33321],[-10.84584,6.37702],[-10.84152,6.42083],[-10.82867,6.46297],[-10.8078,6.5018],[-10.7797,6.53584],[-10.74546,6.56378],[-10.70638,6.58454],[-10.66397,6.59733],[-10.61986,6.60165]]]}},madagascar:{type:"Feature",id:"madagascar",properties:{},geometry:{type:"Polygon",coordinates:[[[51,-15],[47.5,-26],[42,-26],[43.5,-16],[49.5,-11],[51,-15]]]}},"University-of-Malawi":{type:"Feature",id:"University-of-Malawi",properties:{},geometry:{type:"Polygon",coordinates:[[[35.33203,-15.14437],[35.37742,-15.14868],[35.42107,-15.16145],[35.46131,-15.18218],[35.4966,-15.21009],[35.52557,-15.2441],[35.54712,-15.2829],[35.56042,-15.32502],[35.56494,-15.36883],[35.56051,-15.41265],[35.5473,-15.45479],[35.5258,-15.49364],[35.49685,-15.52769],[35.46154,-15.55564],[35.42125,-15.57642],[35.37752,-15.58921],[35.33203,-15.59353],[35.28654,-15.58921],[35.24281,-15.57642],[35.20252,-15.55564],[35.16721,-15.52769],[35.13826,-15.49364],[35.11676,-15.45479],[35.10355,-15.41265],[35.09912,-15.36883],[35.10365,-15.32502],[35.11694,-15.2829],[35.13849,-15.2441],[35.16747,-15.21009],[35.20275,-15.18218],[35.24299,-15.16145],[35.28664,-15.14868],[35.33203,-15.14437]]]}},"Universit-des-Sciences-Sociale-et-de-Gestion-de-Bamako":{type:"Feature",id:"Universit-des-Sciences-Sociale-et-de-Gestion-de-Bamako",properties:{},geometry:{type:"Polygon",coordinates:[[[-7.98832,12.83993],[-7.94339,12.83562],[-7.90018,12.82283],[-7.86037,12.80206],[-7.82549,12.77411],[-7.79688,12.74006],[-7.77564,12.70121],[-7.76257,12.65907],[-7.75819,12.61526],[-7.76265,12.57145],[-7.77578,12.52933],[-7.79707,12.49052],[-7.82569,12.45651],[-7.86056,12.4286],[-7.90033,12.40786],[-7.94347,12.39509],[-7.98832,12.39078],[-8.03318,12.39509],[-8.07632,12.40786],[-8.11609,12.4286],[-8.15095,12.45651],[-8.17958,12.49052],[-8.20087,12.52933],[-8.214,12.57145],[-8.21846,12.61526],[-8.21408,12.65907],[-8.20101,12.70121],[-8.17977,12.74006],[-8.15116,12.77411],[-8.11627,12.80206],[-8.07646,12.82283],[-8.03326,12.83562],[-7.98832,12.83993]]]}},"Universidade-Eduardo-Mondlane":{type:"Feature",id:"Universidade-Eduardo-Mondlane",properties:{},geometry:{type:"Polygon",coordinates:[[[32.60357,-25.72761],[32.65221,-25.73192],[32.69898,-25.74467],[32.74211,-25.76539],[32.77994,-25.79328],[32.81102,-25.82727],[32.83416,-25.86606],[32.84845,-25.90817],[32.85334,-25.95197],[32.84863,-25.99579],[32.83449,-26.03795],[32.81146,-26.07681],[32.78042,-26.11088],[32.74255,-26.13885],[32.69932,-26.15964],[32.65239,-26.17244],[32.60357,-26.17677],[32.55475,-26.17244],[32.50782,-26.15964],[32.46459,-26.13885],[32.42672,-26.11088],[32.39568,-26.07681],[32.37265,-26.03795],[32.35851,-25.99579],[32.35381,-25.95197],[32.3587,-25.90817],[32.37299,-25.86606],[32.39612,-25.82727],[32.4272,-25.79328],[32.46503,-25.76539],[32.50816,-25.74467],[32.55493,-25.73192],[32.60357,-25.72761]]]}},"Namibia-University-of-Science-and-Technology":{type:"Feature",id:"Namibia-University-of-Science-and-Technology",properties:{},geometry:{type:"Polygon",coordinates:[[[17.07709,-22.34124],[17.12446,-22.34555],[17.17002,-22.35831],[17.21202,-22.37903],[17.24886,-22.40692],[17.27912,-22.44092],[17.30164,-22.47972],[17.31554,-22.52183],[17.32029,-22.56563],[17.31569,-22.60945],[17.30192,-22.6516],[17.27949,-22.69046],[17.24926,-22.72453],[17.21239,-22.75249],[17.1703,-22.77327],[17.12461,-22.78607],[17.07709,-22.79039],[17.02957,-22.78607],[16.98388,-22.77327],[16.94179,-22.75249],[16.90493,-22.72453],[16.8747,-22.69046],[16.85226,-22.6516],[16.83849,-22.60945],[16.83389,-22.56563],[16.83864,-22.52183],[16.85255,-22.47972],[16.87506,-22.44092],[16.90532,-22.40692],[16.94216,-22.37903],[16.98416,-22.35831],[17.02972,-22.34555],[17.07709,-22.34124]]]}},"Abia-State-University":{type:"Feature",id:"Abia-State-University",properties:{},geometry:{type:"Polygon",coordinates:[[[7.41909,6.0554],[7.46315,6.05108],[7.50551,6.0383],[7.54455,6.01753],[7.57877,5.9896],[7.60684,5.95556],[7.62769,5.91672],[7.64052,5.87459],[7.64484,5.83077],[7.64048,5.78696],[7.62762,5.74484],[7.60675,5.70602],[7.57868,5.67199],[7.54447,5.64407],[7.50545,5.62333],[7.46312,5.61055],[7.41909,5.60624],[7.37507,5.61055],[7.33274,5.62333],[7.29372,5.64407],[7.25951,5.67199],[7.23143,5.70602],[7.21056,5.74484],[7.1977,5.78696],[7.19335,5.83077],[7.19767,5.87459],[7.2105,5.91672],[7.23135,5.95556],[7.25942,5.9896],[7.29363,6.01753],[7.33267,6.0383],[7.37503,6.05108],[7.41909,6.0554]]]}},"Ahmadu-Bello-University":{type:"Feature",id:"Ahmadu-Bello-University",properties:{},geometry:{type:"Polygon",coordinates:[[[7.64648,11.40298],[7.69118,11.39866],[7.73415,11.38587],[7.77375,11.36511],[7.80845,11.33716],[7.83691,11.30311],[7.85804,11.26427],[7.87104,11.22213],[7.87541,11.17831],[7.87097,11.13451],[7.85792,11.09239],[7.83674,11.05357],[7.80827,11.01956],[7.77359,10.99164],[7.73403,10.97091],[7.69111,10.95813],[7.64648,10.95382],[7.60186,10.95813],[7.55894,10.97091],[7.51938,10.99164],[7.4847,11.01956],[7.45622,11.05357],[7.43505,11.09239],[7.422,11.13451],[7.41756,11.17831],[7.42193,11.22213],[7.43493,11.26427],[7.45606,11.30311],[7.48452,11.33716],[7.51922,11.36511],[7.55882,11.38587],[7.60179,11.39866],[7.64648,11.40298]]]}},"Federal-School-of-Surveys":{type:"Feature",id:"Federal-School-of-Surveys",properties:{},geometry:{type:"Polygon",coordinates:[[[3.95129,8.06678],[3.99554,8.06247],[4.03808,8.04968],[4.07729,8.02892],[4.11165,8.00098],[4.13984,7.96693],[4.16077,7.9281],[4.17365,7.88596],[4.17798,7.84215],[4.17361,7.79833],[4.16069,7.75621],[4.13972,7.7174],[4.11153,7.68337],[4.07718,7.65546],[4.038,7.63471],[3.99549,7.62194],[3.95129,7.61763],[3.90708,7.62194],[3.86457,7.63471],[3.82539,7.65546],[3.79105,7.68337],[3.76285,7.7174],[3.74189,7.75621],[3.72897,7.79833],[3.72459,7.84215],[3.72892,7.88596],[3.7418,7.9281],[3.76274,7.96693],[3.79092,8.00098],[3.82528,8.02892],[3.86449,8.04968],[3.90704,8.06247],[3.95129,8.06678]]]}},"Federal-University-of-Technology-Akure":{type:"Feature",id:"Federal-University-of-Technology-Akure",properties:{},geometry:{type:"Polygon",coordinates:[[[5.18555,7.49987],[5.22974,7.49555],[5.27223,7.48277],[5.31138,7.46201],[5.34569,7.43407],[5.37385,7.40002],[5.39475,7.36119],[5.40762,7.31905],[5.41195,7.27524],[5.40758,7.23143],[5.39467,7.1893],[5.37374,7.15048],[5.34558,7.11646],[5.31128,7.08854],[5.27215,7.0678],[5.22969,7.05503],[5.18555,7.05071],[5.1414,7.05503],[5.09895,7.0678],[5.05982,7.08854],[5.02551,7.11646],[4.99735,7.15048],[4.97642,7.1893],[4.96352,7.23143],[4.95915,7.27524],[4.96347,7.31905],[4.97634,7.36119],[4.99725,7.40002],[5.0254,7.43407],[5.05971,7.46201],[5.09887,7.48277],[5.14136,7.49555],[5.18555,7.49987]]]}},"Ignatius-Ajuru-University-of-Education":{type:"Feature",id:"Ignatius-Ajuru-University-of-Education",properties:{},geometry:{type:"Polygon",coordinates:[[[6.93364,5.03111],[6.97762,5.02679],[7.01991,5.01401],[7.05888,4.99325],[7.09304,4.96531],[7.12106,4.93127],[7.14188,4.89244],[7.15469,4.85031],[7.15901,4.80649],[7.15466,4.76268],[7.14183,4.72056],[7.12099,4.68174],[7.09296,4.64771],[7.05881,4.61979],[7.01986,4.59904],[6.97759,4.58627],[6.93364,4.58195],[6.88968,4.58627],[6.84742,4.59904],[6.80846,4.61979],[6.77431,4.64771],[6.74628,4.68174],[6.72545,4.72056],[6.71261,4.76268],[6.70826,4.80649],[6.71258,4.85031],[6.72539,4.89244],[6.74621,4.93127],[6.77424,4.96531],[6.80839,4.99325],[6.84736,5.01401],[6.88965,5.02679],[6.93364,5.03111]]]}},"University-of-Nigeria-Nsukka":{type:"Feature",id:"University-of-Nigeria-Nsukka",properties:{},geometry:{type:"Polygon",coordinates:[[[7.40821,7.08921],[7.45236,7.0849],[7.49481,7.07211],[7.53393,7.05135],[7.56821,7.02341],[7.59634,6.98937],[7.61723,6.95053],[7.63008,6.9084],[7.63441,6.86458],[7.63004,6.82077],[7.61715,6.77865],[7.59624,6.73983],[7.5681,6.70581],[7.53383,6.67789],[7.49473,6.65714],[7.45232,6.64437],[7.40821,6.64006],[7.3641,6.64437],[7.32168,6.65714],[7.28259,6.67789],[7.24831,6.70581],[7.22018,6.73983],[7.19926,6.77865],[7.18637,6.82077],[7.18201,6.86458],[7.18633,6.9084],[7.19919,6.95053],[7.22008,6.98937],[7.24821,7.02341],[7.28249,7.05135],[7.32161,7.07211],[7.36406,7.0849],[7.40821,7.08921]]]}},"University-of-Port-Harcourt":{type:"Feature",id:"University-of-Port-Harcourt",properties:{},geometry:{type:"Polygon",coordinates:[[[6.92037,5.12633],[6.96436,5.12201],[7.00665,5.10923],[7.04563,5.08847],[7.07979,5.06053],[7.10782,5.02649],[7.12864,4.98766],[7.14145,4.94553],[7.14577,4.90171],[7.14142,4.8579],[7.12859,4.81578],[7.10775,4.77696],[7.07971,4.74293],[7.04556,4.71501],[7.0066,4.69426],[6.96433,4.68149],[6.92037,4.67717],[6.87641,4.68149],[6.83414,4.69426],[6.79517,4.71501],[6.76102,4.74293],[6.73299,4.77696],[6.71215,4.81578],[6.69931,4.8579],[6.69496,4.90171],[6.69928,4.94553],[6.71209,4.98766],[6.73292,5.02649],[6.76094,5.06053],[6.7951,5.08847],[6.83408,5.10923],[6.87638,5.12201],[6.92037,5.12633]]]}},"University-of-Nigeria-Enugu-Campus":{type:"Feature",id:"University-of-Nigeria-Enugu-Campus",properties:{},geometry:{type:"Polygon",coordinates:[[[7.50373,6.651],[7.54784,6.64668],[7.59025,6.63389],[7.62934,6.61313],[7.66359,6.58519],[7.69169,6.55115],[7.71256,6.51232],[7.72541,6.47018],[7.72973,6.42637],[7.72537,6.38256],[7.71249,6.34043],[7.6916,6.30161],[7.66349,6.26759],[7.62924,6.23967],[7.59018,6.21893],[7.5478,6.20615],[7.50373,6.20184],[7.45966,6.20615],[7.41728,6.21893],[7.37822,6.23967],[7.34398,6.26759],[7.31587,6.30161],[7.29497,6.34043],[7.28209,6.38256],[7.27773,6.42637],[7.28206,6.47018],[7.2949,6.51232],[7.31577,6.55115],[7.34388,6.58519],[7.37813,6.61313],[7.41721,6.63389],[7.45962,6.64668],[7.50373,6.651]]]}},"Insititue-d-Enseignement-Superieur-de-Ruhengeri":{type:"Feature",id:"Insititue-d-Enseignement-Superieur-de-Ruhengeri",properties:{},geometry:{type:"Polygon",coordinates:[[[29.6112,-1.27634],[29.65502,-1.28065],[29.69717,-1.29343],[29.736,-1.31418],[29.77005,-1.34211],[29.79799,-1.37614],[29.81875,-1.41496],[29.83154,-1.45709],[29.83586,-1.5009],[29.83154,-1.54472],[29.81876,-1.58685],[29.79801,-1.62568],[29.77007,-1.65971],[29.73602,-1.68764],[29.69718,-1.7084],[29.65503,-1.72118],[29.6112,-1.72549],[29.56737,-1.72118],[29.52522,-1.7084],[29.48638,-1.68764],[29.45233,-1.65971],[29.4244,-1.62568],[29.40364,-1.58685],[29.39086,-1.54472],[29.38655,-1.5009],[29.39087,-1.45709],[29.40365,-1.41496],[29.42442,-1.37614],[29.45236,-1.34211],[29.4864,-1.31418],[29.52524,-1.29343],[29.56738,-1.28065],[29.6112,-1.27634]]]}},"University-of-Rwanda-Huye-Campus":{type:"Feature",id:"University-of-Rwanda-Huye-Campus",properties:{},geometry:{type:"Polygon",coordinates:[[[29.7397,-2.39052],[29.78355,-2.39484],[29.82572,-2.40761],[29.86458,-2.42836],[29.89865,-2.45629],[29.92661,-2.49032],[29.94739,-2.52914],[29.96019,-2.57127],[29.96451,-2.61508],[29.9602,-2.65889],[29.94741,-2.70103],[29.92664,-2.73986],[29.89869,-2.77389],[29.86462,-2.80182],[29.82575,-2.82258],[29.78357,-2.83536],[29.7397,-2.83968],[29.69583,-2.83536],[29.65365,-2.82258],[29.61478,-2.80182],[29.58071,-2.77389],[29.55276,-2.73986],[29.53199,-2.70103],[29.5192,-2.65889],[29.51489,-2.61508],[29.51921,-2.57127],[29.53201,-2.52914],[29.55279,-2.49032],[29.58075,-2.45629],[29.61482,-2.42836],[29.65368,-2.40761],[29.69585,-2.39484],[29.7397,-2.39052]]]}},"Institut-Suprieur-de-Management-Kolda":{type:"Feature",id:"Institut-Suprieur-de-Management-Kolda",properties:{},geometry:{type:"Polygon",coordinates:[[[-14.94108,13.11445],[-14.8961,13.11013],[-14.85285,13.09734],[-14.81299,13.07657],[-14.77807,13.04862],[-14.74943,13.01457],[-14.72816,12.97573],[-14.71509,12.93359],[-14.7107,12.88977],[-14.71517,12.84596],[-14.72831,12.80384],[-14.74962,12.76503],[-14.77828,12.73102],[-14.81319,12.70311],[-14.85299,12.68237],[-14.89618,12.66961],[-14.94108,12.66529],[-14.98599,12.66961],[-15.02918,12.68237],[-15.06898,12.70311],[-15.10389,12.73102],[-15.13255,12.76503],[-15.15386,12.80384],[-15.167,12.84596],[-15.17147,12.88977],[-15.16708,12.93359],[-15.15401,12.97573],[-15.13274,13.01457],[-15.1041,13.04862],[-15.06918,13.07657],[-15.02932,13.09734],[-14.98607,13.11013],[-14.94108,13.11445]]]}},"Universit-Gaston-Berger":{type:"Feature",id:"Universit-Gaston-Berger",properties:{},geometry:{type:"Polygon",coordinates:[[[-16.42556,16.28748],[-16.37992,16.28316],[-16.33604,16.27037],[-16.2956,16.2496],[-16.26018,16.22164],[-16.23112,16.18759],[-16.20956,16.14874],[-16.1963,16.1066],[-16.19186,16.06278],[-16.1964,16.01897],[-16.20974,15.97685],[-16.23137,15.93805],[-16.26044,15.90404],[-16.29585,15.87614],[-16.33622,15.8554],[-16.38002,15.84264],[-16.42556,15.83833],[-16.47111,15.84264],[-16.51491,15.8554],[-16.55528,15.87614],[-16.59069,15.90404],[-16.61976,15.93805],[-16.64138,15.97685],[-16.65473,16.01897],[-16.65927,16.06278],[-16.65483,16.1066],[-16.64157,16.14874],[-16.62,16.18759],[-16.59095,16.22164],[-16.55552,16.2496],[-16.51509,16.27037],[-16.47121,16.28316],[-16.42556,16.28748]]]}},"Fourah-Bay-College":{type:"Feature",id:"Fourah-Bay-College",properties:{},geometry:{type:"Polygon",coordinates:[[[-13.18359,8.71868],[-13.13927,8.71437],[-13.09665,8.70158],[-13.05738,8.68081],[-13.02296,8.65287],[-12.99473,8.61883],[-12.97376,8.57999],[-12.96086,8.53785],[-12.95652,8.49404],[-12.96091,8.45023],[-12.97386,8.40811],[-12.99485,8.36929],[-13.0231,8.33527],[-13.0575,8.30735],[-13.09674,8.28661],[-13.13932,8.27384],[-13.18359,8.26953],[-13.22787,8.27384],[-13.27044,8.28661],[-13.30969,8.30735],[-13.34409,8.33527],[-13.37233,8.36929],[-13.39333,8.40811],[-13.40627,8.45023],[-13.41066,8.49404],[-13.40633,8.53785],[-13.39343,8.57999],[-13.37246,8.61883],[-13.34422,8.65287],[-13.30981,8.68081],[-13.27054,8.70158],[-13.22792,8.71437],[-13.18359,8.71868]]]}},"Njala-University-Freetown-Campus":{type:"Feature",id:"Njala-University-Freetown-Campus",properties:{},geometry:{type:"Polygon",coordinates:[[[-13.23673,8.7042],[-13.19241,8.69988],[-13.14979,8.68709],[-13.11052,8.66633],[-13.07611,8.63839],[-13.04787,8.60434],[-13.02691,8.5655],[-13.01401,8.52337],[-13.00967,8.47955],[-13.01406,8.43574],[-13.027,8.39362],[-13.048,8.3548],[-13.07624,8.32078],[-13.11064,8.29287],[-13.14988,8.27212],[-13.19246,8.25935],[-13.23673,8.25504],[-13.281,8.25935],[-13.32358,8.27212],[-13.36282,8.29287],[-13.39722,8.32078],[-13.42546,8.3548],[-13.44646,8.39362],[-13.4594,8.43574],[-13.46379,8.47955],[-13.45945,8.52337],[-13.44655,8.5655],[-13.42559,8.60434],[-13.39735,8.63839],[-13.36294,8.66633],[-13.32367,8.68709],[-13.28105,8.69988],[-13.23673,8.7042]]]}},"Njala-University-Njala-Campus":{type:"Feature",id:"Njala-University-Njala-Campus",properties:{},geometry:{type:"Polygon",coordinates:[[[-11.76548,8.16057],[-11.72122,8.15625],[-11.67867,8.14347],[-11.63945,8.1227],[-11.60508,8.09476],[-11.57689,8.06072],[-11.55595,8.02188],[-11.54307,7.97975],[-11.53873,7.93593],[-11.54311,7.89212],[-11.55604,7.85],[-11.577,7.81118],[-11.60521,7.77716],[-11.63956,7.74924],[-11.67875,7.7285],[-11.72127,7.71573],[-11.76548,7.71141],[-11.8097,7.71573],[-11.85221,7.7285],[-11.8914,7.74924],[-11.92576,7.77716],[-11.95396,7.81118],[-11.97493,7.85],[-11.98785,7.89212],[-11.99223,7.93593],[-11.9879,7.97975],[-11.97502,8.02188],[-11.95408,8.06072],[-11.92588,8.09476],[-11.89152,8.1227],[-11.8523,8.14347],[-11.80974,8.15625],[-11.76548,8.16057]]]}},"University-of-Pretoria":{type:"Feature",id:"University-of-Pretoria",properties:{},geometry:{type:"Polygon",coordinates:[[[28.21289,-25.49616],[28.26143,-25.50046],[28.30812,-25.51322],[28.35116,-25.53394],[28.38892,-25.56183],[28.41994,-25.59582],[28.44303,-25.63461],[28.45729,-25.67672],[28.46217,-25.72052],[28.45747,-25.76434],[28.44336,-25.8065],[28.42037,-25.84536],[28.38939,-25.87943],[28.3516,-25.9074],[28.30845,-25.92819],[28.26161,-25.94099],[28.21289,-25.94531],[28.16417,-25.94099],[28.11733,-25.92819],[28.07418,-25.9074],[28.03639,-25.87943],[28.00541,-25.84536],[27.98242,-25.8065],[27.96831,-25.76434],[27.96361,-25.72052],[27.96849,-25.67672],[27.98275,-25.63461],[28.00584,-25.59582],[28.03686,-25.56183],[28.07462,-25.53394],[28.11766,-25.51322],[28.16435,-25.50046],[28.21289,-25.49616]]]}},"Ardhi-University":{type:"Feature",id:"Ardhi-University",properties:{},geometry:{type:"Polygon",coordinates:[[[39.21541,-6.54158],[39.25951,-6.54589],[39.30192,-6.55867],[39.34101,-6.57941],[39.37527,-6.60733],[39.4034,-6.64135],[39.42431,-6.68017],[39.4372,-6.72229],[39.44156,-6.7661],[39.43724,-6.80992],[39.42439,-6.85205],[39.4035,-6.89089],[39.37538,-6.92493],[39.3411,-6.95287],[39.30199,-6.97363],[39.25955,-6.98642],[39.21541,-6.99074],[39.17127,-6.98642],[39.12883,-6.97363],[39.08972,-6.95287],[39.05544,-6.92493],[39.02732,-6.89089],[39.00643,-6.85205],[38.99358,-6.80992],[38.98926,-6.7661],[38.99362,-6.72229],[39.00651,-6.68017],[39.02742,-6.64135],[39.05555,-6.60733],[39.08981,-6.57941],[39.1289,-6.55867],[39.17131,-6.54589],[39.21541,-6.54158]]]}},"Institute-of-Finance-Management":{type:"Feature",id:"Institute-of-Finance-Management",properties:{},geometry:{type:"Polygon",coordinates:[[[39.2935,-5.91323],[39.33755,-5.91754],[39.3799,-5.93032],[39.41894,-5.95107],[39.45317,-5.97899],[39.48126,-6.01301],[39.50215,-6.05183],[39.51501,-6.09395],[39.51937,-6.13776],[39.51505,-6.18158],[39.50221,-6.22371],[39.48135,-6.26255],[39.45326,-6.29659],[39.41903,-6.32453],[39.37997,-6.34529],[39.33758,-6.35807],[39.2935,-6.36239],[39.24941,-6.35807],[39.20703,-6.34529],[39.16797,-6.32453],[39.13373,-6.29659],[39.10565,-6.26255],[39.08479,-6.22371],[39.07195,-6.18158],[39.06763,-6.13776],[39.07198,-6.09395],[39.08485,-6.05183],[39.10574,-6.01301],[39.13383,-5.97899],[39.16805,-5.95107],[39.20709,-5.93032],[39.24945,-5.91754],[39.2935,-5.91323]]]}},"Institute-of-Rural-Development-Planning-Mwanza":{type:"Feature",id:"Institute-of-Rural-Development-Planning-Mwanza",properties:{},geometry:{type:"Polygon",coordinates:[[[32.89851,-2.29201],[32.94236,-2.29632],[32.98452,-2.3091],[33.02338,-2.32985],[33.05745,-2.35778],[33.08541,-2.3918],[33.10618,-2.43063],[33.11898,-2.47275],[33.12331,-2.51657],[33.119,-2.56038],[33.10621,-2.60251],[33.08544,-2.64134],[33.05749,-2.67538],[33.02342,-2.70331],[32.98455,-2.72407],[32.94238,-2.73685],[32.89851,-2.74116],[32.85465,-2.73685],[32.81247,-2.72407],[32.7736,-2.70331],[32.73954,-2.67538],[32.71158,-2.64134],[32.69081,-2.60251],[32.67803,-2.56038],[32.67372,-2.51657],[32.67804,-2.47275],[32.69084,-2.43063],[32.71162,-2.3918],[32.73958,-2.35778],[32.77364,-2.32985],[32.8125,-2.3091],[32.85466,-2.29632],[32.89851,-2.29201]]]}},"Institute-of-Rural-Development-Planning":{type:"Feature",id:"Institute-of-Rural-Development-Planning",properties:{},geometry:{type:"Polygon",coordinates:[[[35.74578,-5.89759],[35.78983,-5.9019],[35.83218,-5.91468],[35.87122,-5.93543],[35.90545,-5.96335],[35.93354,-5.99737],[35.95442,-6.03619],[35.96729,-6.07831],[35.97165,-6.12212],[35.96733,-6.16594],[35.95449,-6.20807],[35.93363,-6.24691],[35.90554,-6.28095],[35.87131,-6.30889],[35.83225,-6.32965],[35.78986,-6.34243],[35.74578,-6.34675],[35.7017,-6.34243],[35.65931,-6.32965],[35.62025,-6.30889],[35.58602,-6.28095],[35.55794,-6.24691],[35.53707,-6.20807],[35.52424,-6.16594],[35.51992,-6.12212],[35.52427,-6.07831],[35.53714,-6.03619],[35.55802,-5.99737],[35.58612,-5.96335],[35.62034,-5.93543],[35.65938,-5.91468],[35.70174,-5.9019],[35.74578,-5.89759]]]}},"Open-University-of-Tanzania":{type:"Feature",id:"Open-University-of-Tanzania",properties:{},geometry:{type:"Polygon",coordinates:[[[39.26466,-6.55895],[39.30876,-6.56326],[39.35117,-6.57603],[39.39026,-6.59678],[39.42453,-6.6247],[39.45266,-6.65872],[39.47357,-6.69754],[39.48646,-6.73966],[39.49082,-6.78347],[39.4865,-6.82729],[39.47364,-6.86942],[39.45275,-6.90826],[39.42463,-6.9423],[39.39036,-6.97024],[39.35125,-6.991],[39.3088,-7.00379],[39.26466,-7.0081],[39.22052,-7.00379],[39.17807,-6.991],[39.13896,-6.97024],[39.10469,-6.9423],[39.07656,-6.90826],[39.05568,-6.86942],[39.04282,-6.82729],[39.0385,-6.78347],[39.04286,-6.73966],[39.05575,-6.69754],[39.07666,-6.65872],[39.10479,-6.6247],[39.13906,-6.59678],[39.17815,-6.57603],[39.22056,-6.56326],[39.26466,-6.55895]]]}},"Sokoine-University-of-Agriculture":{type:"Feature",id:"Sokoine-University-of-Agriculture",properties:{},geometry:{type:"Polygon",coordinates:[[[37.65636,-6.62796],[37.70047,-6.63227],[37.74288,-6.64505],[37.78198,-6.66579],[37.81625,-6.69371],[37.84439,-6.72773],[37.8653,-6.76655],[37.87819,-6.80868],[37.88255,-6.85249],[37.87823,-6.8963],[37.86537,-6.93844],[37.84448,-6.97727],[37.81636,-7.01131],[37.78208,-7.03925],[37.74296,-7.06002],[37.70051,-7.0728],[37.65636,-7.07712],[37.61221,-7.0728],[37.56976,-7.06002],[37.53064,-7.03925],[37.49636,-7.01131],[37.46824,-6.97727],[37.44735,-6.93844],[37.43449,-6.8963],[37.43017,-6.85249],[37.43453,-6.80868],[37.44742,-6.76655],[37.46833,-6.72773],[37.49647,-6.69371],[37.53074,-6.66579],[37.56984,-6.64505],[37.61225,-6.63227],[37.65636,-6.62796]]]}},"University-of-Dar-es-Salaam":{type:"Feature",id:"University-of-Dar-es-Salaam",properties:{},geometry:{type:"Polygon",coordinates:[[[39.20531,-6.55579],[39.24941,-6.56011],[39.29182,-6.57288],[39.33091,-6.59363],[39.36518,-6.62155],[39.39331,-6.65557],[39.41422,-6.69439],[39.42711,-6.73651],[39.43147,-6.78032],[39.42715,-6.82414],[39.41429,-6.86627],[39.39341,-6.90511],[39.36528,-6.93915],[39.33101,-6.96709],[39.2919,-6.98785],[39.24945,-7.00063],[39.20531,-7.00495],[39.16117,-7.00063],[39.11873,-6.98785],[39.07961,-6.96709],[39.04534,-6.93915],[39.01722,-6.90511],[38.99633,-6.86627],[38.98348,-6.82414],[38.97915,-6.78032],[38.98352,-6.73651],[38.9964,-6.69439],[39.01731,-6.65557],[39.04544,-6.62155],[39.07971,-6.59363],[39.1188,-6.57288],[39.16121,-6.56011],[39.20531,-6.55579]]]}},"Busitema-University":{type:"Feature",id:"Busitema-University",properties:{},geometry:{type:"Polygon",coordinates:[[[34.01367,0.75192],[34.05749,0.7476],[34.09962,0.73482],[34.13845,0.71407],[34.17248,0.68614],[34.20041,0.6521],[34.22117,0.61328],[34.23395,0.57115],[34.23826,0.52733],[34.23394,0.48352],[34.22116,0.44139],[34.20041,0.40256],[34.17248,0.36853],[34.13844,0.3406],[34.09962,0.31985],[34.05749,0.30707],[34.01367,0.30276],[33.96986,0.30707],[33.92773,0.31985],[33.8889,0.3406],[33.85487,0.36853],[33.82694,0.40256],[33.80618,0.44139],[33.7934,0.48352],[33.78908,0.52733],[33.7934,0.57115],[33.80618,0.61328],[33.82693,0.6521],[33.85486,0.68614],[33.88889,0.71407],[33.92772,0.73482],[33.96986,0.7476],[34.01367,0.75192]]]}},"Gulu-University":{type:"Feature",id:"Gulu-University",properties:{},geometry:{type:"Polygon",coordinates:[[[32.34375,3.03595],[32.38762,3.03163],[32.42981,3.01885],[32.46869,2.99809],[32.50276,2.97016],[32.53073,2.93613],[32.5515,2.8973],[32.56429,2.85516],[32.5686,2.81135],[32.56427,2.76754],[32.55147,2.72541],[32.53069,2.68659],[32.50272,2.65256],[32.46865,2.62463],[32.42978,2.60388],[32.38761,2.59111],[32.34375,2.58679],[32.29989,2.59111],[32.25772,2.60388],[32.21885,2.62463],[32.18478,2.65256],[32.15681,2.68659],[32.13603,2.72541],[32.12323,2.76754],[32.1189,2.81135],[32.12321,2.85516],[32.136,2.8973],[32.15677,2.93613],[32.18474,2.97016],[32.21881,2.99809],[32.25769,3.01885],[32.29988,3.03163],[32.34375,3.03595]]]}},"Kumi-University":{type:"Feature",id:"Kumi-University",properties:{},geometry:{type:"Polygon",coordinates:[[[33.83789,1.71855],[33.88172,1.71423],[33.92387,1.70145],[33.96271,1.6807],[33.99676,1.65277],[34.0247,1.61873],[34.04545,1.5799],[34.05823,1.53777],[34.06255,1.49396],[34.05822,1.45015],[34.04544,1.40802],[34.02467,1.36919],[33.99673,1.33516],[33.96269,1.30724],[33.92385,1.28649],[33.88171,1.27371],[33.83789,1.26939],[33.79407,1.27371],[33.75193,1.28649],[33.71309,1.30724],[33.67905,1.33516],[33.65111,1.36919],[33.63034,1.40802],[33.61756,1.45015],[33.61324,1.49396],[33.61755,1.53777],[33.63033,1.5799],[33.65109,1.61873],[33.67902,1.65277],[33.71307,1.6807],[33.75191,1.70145],[33.79406,1.71423],[33.83789,1.71855]]]}},"Makerere-University":{type:"Feature",id:"Makerere-University",properties:{},geometry:{type:"Polygon",coordinates:[[[32.60742,0.57614],[32.65124,0.57182],[32.69337,0.55904],[32.7322,0.53829],[32.76623,0.51036],[32.79416,0.47633],[32.81491,0.4375],[32.82769,0.39537],[32.832,0.35156],[32.82769,0.30774],[32.81491,0.26562],[32.79415,0.22679],[32.76622,0.19276],[32.73219,0.16483],[32.69336,0.14408],[32.65124,0.1313],[32.60742,0.12698],[32.56361,0.1313],[32.52148,0.14408],[32.48265,0.16483],[32.44862,0.19276],[32.42069,0.22679],[32.39994,0.26562],[32.38716,0.30774],[32.38284,0.35156],[32.38715,0.39537],[32.39993,0.4375],[32.42069,0.47633],[32.44861,0.51036],[32.48265,0.53829],[32.52148,0.55904],[32.56361,0.57182],[32.60742,0.57614]]]}},"Mbarara-University-of-Science-and-Technology":{type:"Feature",id:"Mbarara-University-of-Science-and-Technology",properties:{},geometry:{type:"Polygon",coordinates:[[[30.65679,-0.39187],[30.7006,-0.39618],[30.74273,-0.40896],[30.78156,-0.42971],[30.81559,-0.45764],[30.84353,-0.49167],[30.86428,-0.5305],[30.87706,-0.57263],[30.88138,-0.61644],[30.87707,-0.66025],[30.86429,-0.70238],[30.84353,-0.74121],[30.8156,-0.77524],[30.78157,-0.80317],[30.74274,-0.82393],[30.70061,-0.83671],[30.65679,-0.84102],[30.61297,-0.83671],[30.57084,-0.82393],[30.53201,-0.80317],[30.49797,-0.77524],[30.47004,-0.74121],[30.44929,-0.70238],[30.43651,-0.66025],[30.4322,-0.61644],[30.43651,-0.57263],[30.4493,-0.5305],[30.47005,-0.49167],[30.49798,-0.45764],[30.53202,-0.42971],[30.57084,-0.40896],[30.61297,-0.39618],[30.65679,-0.39187]]]}},"St.-Augustine-International-University":{type:"Feature",id:"St.-Augustine-International-University",properties:{},geometry:{type:"Polygon",coordinates:[[[32.62161,0.49696],[32.66543,0.49264],[32.70756,0.47986],[32.74639,0.45911],[32.78042,0.43118],[32.80835,0.39714],[32.8291,0.35832],[32.84188,0.31619],[32.8462,0.27237],[32.84188,0.22856],[32.8291,0.18643],[32.80834,0.14761],[32.78042,0.11357],[32.74638,0.08565],[32.70756,0.06489],[32.66543,0.05211],[32.62161,0.0478],[32.5778,0.05211],[32.53567,0.06489],[32.49684,0.08565],[32.46281,0.11357],[32.43488,0.14761],[32.41413,0.18643],[32.40135,0.22856],[32.39703,0.27237],[32.40135,0.31619],[32.41413,0.35832],[32.43488,0.39714],[32.46281,0.43118],[32.49684,0.45911],[32.53567,0.47986],[32.5778,0.49264],[32.62161,0.49696]]]}},"Uganda-Christian-University-Mbale-Campus":{type:"Feature",id:"Uganda-Christian-University-Mbale-Campus",properties:{},geometry:{type:"Polygon",coordinates:[[[34.17487,1.30046],[34.21869,1.29614],[34.26083,1.28336],[34.29967,1.26261],[34.3337,1.23468],[34.36164,1.20064],[34.38239,1.16182],[34.39517,1.11969],[34.39949,1.07587],[34.39517,1.03206],[34.38238,0.98993],[34.36162,0.95111],[34.33369,0.91707],[34.29965,0.88915],[34.26082,0.8684],[34.21868,0.85562],[34.17487,0.8513],[34.13105,0.85562],[34.08891,0.8684],[34.05008,0.88915],[34.01605,0.91707],[33.98811,0.95111],[33.96735,0.98993],[33.95457,1.03206],[33.95025,1.07587],[33.95456,1.11969],[33.96734,1.16182],[33.9881,1.20064],[34.01603,1.23468],[34.05007,1.26261],[34.0889,1.28336],[34.13104,1.29614],[34.17487,1.30046]]]}},"Uganda-Pentecostal-University":{type:"Feature",id:"Uganda-Pentecostal-University",properties:{},geometry:{type:"Polygon",coordinates:[[[30.26621,0.88664],[30.31003,0.88233],[30.35216,0.86955],[30.39099,0.84879],[30.42503,0.82086],[30.45296,0.78683],[30.47371,0.748],[30.48649,0.70587],[30.4908,0.66206],[30.48649,0.61825],[30.4737,0.57612],[30.45295,0.53729],[30.42502,0.50326],[30.39098,0.47533],[30.35215,0.45458],[30.31002,0.4418],[30.26621,0.43749],[30.22239,0.4418],[30.18026,0.45458],[30.14144,0.47533],[30.1074,0.50326],[30.07947,0.53729],[30.05871,0.57612],[30.04593,0.61825],[30.04162,0.66206],[30.04593,0.70587],[30.05871,0.748],[30.07946,0.78683],[30.10739,0.82086],[30.14143,0.84879],[30.18026,0.86955],[30.22239,0.88233],[30.26621,0.88664]]]}},"St.-Mawaggali-Trades-Training-Institute":{type:"Feature",id:"St.-Mawaggali-Trades-Training-Institute",properties:{},geometry:{type:"Polygon",coordinates:[[[26.9671,-16.59033],[27.01282,-16.59464],[27.05679,-16.60741],[27.09732,-16.62814],[27.13286,-16.65604],[27.16204,-16.69005],[27.18376,-16.72886],[27.19715,-16.77097],[27.20171,-16.81478],[27.19726,-16.8586],[27.18395,-16.90074],[27.1623,-16.93959],[27.13314,-16.97365],[27.09757,-17.0016],[27.05698,-17.02238],[27.01293,-17.03517],[26.9671,-17.03949],[26.92128,-17.03517],[26.87722,-17.02238],[26.83663,-17.0016],[26.80107,-16.97365],[26.7719,-16.93959],[26.75025,-16.90074],[26.73695,-16.8586],[26.73249,-16.81478],[26.73705,-16.77097],[26.75045,-16.72886],[26.77216,-16.69005],[26.80135,-16.65604],[26.83689,-16.62814],[26.87742,-16.60741],[26.92138,-16.59464],[26.9671,-16.59033]]]}},"The-University-of-Zambia":{type:"Feature",id:"The-University-of-Zambia",properties:{},geometry:{type:"Polygon",coordinates:[[[28.33027,-15.16737],[28.37567,-15.17168],[28.41932,-15.18445],[28.45957,-15.20518],[28.49485,-15.23309],[28.52383,-15.2671],[28.54538,-15.3059],[28.55868,-15.34802],[28.5632,-15.39183],[28.55878,-15.43565],[28.54556,-15.47779],[28.52406,-15.51664],[28.49511,-15.55069],[28.4598,-15.57864],[28.4195,-15.59942],[28.37576,-15.61221],[28.33027,-15.61653],[28.28478,-15.61221],[28.24104,-15.59942],[28.20074,-15.57864],[28.16544,-15.55069],[28.13648,-15.51664],[28.11498,-15.47779],[28.10177,-15.43565],[28.09734,-15.39183],[28.10186,-15.34802],[28.11516,-15.3059],[28.13671,-15.2671],[28.16569,-15.23309],[28.20098,-15.20518],[28.24122,-15.18445],[28.28488,-15.17168],[28.33027,-15.16737]]]}},"University-of-Zimbabwe":{type:"Feature",id:"University-of-Zimbabwe",properties:{},geometry:{type:"Polygon",coordinates:[[[31.05466,-17.56016],[31.10061,-17.56447],[31.14481,-17.57724],[31.18555,-17.59797],[31.22128,-17.62587],[31.25062,-17.65988],[31.27245,-17.69868],[31.28592,-17.74079],[31.29051,-17.7846],[31.28603,-17.82842],[31.27266,-17.87056],[31.2509,-17.90941],[31.22158,-17.94347],[31.18583,-17.97143],[31.14502,-17.99221],[31.10073,-18.005],[31.05466,-18.00932],[31.00859,-18.005],[30.9643,-17.99221],[30.92349,-17.97143],[30.88774,-17.94347],[30.85842,-17.90941],[30.83666,-17.87056],[30.82328,-17.82842],[30.81881,-17.7846],[30.8234,-17.74079],[30.83687,-17.69868],[30.85869,-17.65988],[30.88803,-17.62587],[30.92376,-17.59797],[30.96451,-17.57724],[31.0087,-17.56447],[31.05466,-17.56016]]]}},asia_full:{type:"Feature",id:"asia_full",properties:{},geometry:{type:"Polygon",coordinates:[[[51,13.5],[43.5,12.3],[34.25,27.3],[34.9,29.45],[34,31.9],[27,34.7],[25.1,39],[25.6,40.2],[26.33,40.98],[26.33,41.23],[26.63,41.36],[26.58,41.6],[26.32,41.76],[27.2,42.1],[27.55,41.93],[35,43],[38.3,47.6],[38.7,47.7],[38.86,47.86],[39.74,47.82],[40.1,49.6],[38,50],[37.4,50.4],[36.65,50.25],[35.66,50.35],[35.2,51.1],[34.28,51.27],[34.1,51.7],[34.4,51.73],[33.9,52.35],[31.8,52.05],[31.3,53.1],[32.8,53.3],[30.77,54.78],[30.95,55.61],[28.19,56.13],[27.83,57.29],[27.33,57.53],[27.7,57.9],[27.3,58.7],[28.2,59.37],[27.2,60.2],[31.5,62.6],[29,67],[30,67.66],[28.27,68.6],[31,70],[31,90],[180,90],[180,60],[130,7],[130,-0.5],[131.8,-3.5],[132.3,-8],[128,-11.3],[65,-11.3],[51,13.5]]]}},"Asian-University-for-Women":{type:"Feature",id:"Asian-University-for-Women",properties:{},geometry:{type:"Polygon",coordinates:[[[91.8457,22.57465],[91.89315,22.57033],[91.93877,22.55753],[91.98079,22.53675],[92.0176,22.50879],[92.04778,22.47472],[92.07018,22.43586],[92.08393,22.39371],[92.08852,22.34989],[92.08378,22.30609],[92.0699,22.26398],[92.04742,22.22518],[92.01721,22.19118],[91.98043,22.16329],[91.93849,22.14257],[91.893,22.12981],[91.8457,22.1255],[91.79841,22.12981],[91.75292,22.14257],[91.71098,22.16329],[91.6742,22.19118],[91.64399,22.22518],[91.6215,22.26398],[91.60762,22.30609],[91.60288,22.34989],[91.60747,22.39371],[91.62123,22.43586],[91.64362,22.47472],[91.67381,22.50879],[91.71062,22.53675],[91.75264,22.55753],[91.79826,22.57033],[91.8457,22.57465]]]}},BGD:{type:"Feature",id:"BGD",properties:{name:"Bangladesh"},geometry:{type:"Polygon",coordinates:[[[92.67272,22.04124],[92.65226,21.32405],[92.30323,21.47548],[92.36855,20.67088],[92.08289,21.1922],[92.02522,21.70157],[91.83489,22.18294],[91.41709,22.76502],[90.49601,22.80502],[90.58696,22.39279],[90.27297,21.83637],[89.84747,22.03915],[89.70205,21.85712],[89.41886,21.96618],[89.03196,22.05571],[88.87631,22.87915],[88.52977,23.63114],[88.69994,24.23372],[88.08442,24.50166],[88.30637,24.86608],[88.93155,25.23869],[88.20979,25.76807],[88.56305,26.44653],[89.35509,26.01441],[89.83248,25.96508],[89.92069,25.26975],[90.87221,25.1326],[91.7996,25.14743],[92.3762,24.97669],[91.91509,24.13041],[91.46773,24.07264],[91.15896,23.50353],[91.70647,22.98526],[91.86993,23.62435],[92.14603,23.6275],[92.67272,22.04124]]]}},"Dhaka-College":{type:"Feature",id:"Dhaka-College",properties:{},geometry:{type:"Polygon",coordinates:[[[90.35156,23.94959],[90.3995,23.94527],[90.44559,23.93247],[90.48805,23.91168],[90.52524,23.88372],[90.55573,23.84965],[90.57835,23.81079],[90.59224,23.76864],[90.59687,23.72482],[90.59208,23.68101],[90.57805,23.6389],[90.55534,23.60011],[90.52481,23.56611],[90.48766,23.53822],[90.44529,23.5175],[90.39934,23.50474],[90.35156,23.50043],[90.30379,23.50474],[90.25783,23.5175],[90.21547,23.53822],[90.17831,23.56611],[90.14779,23.60011],[90.12507,23.6389],[90.11105,23.68101],[90.10625,23.72482],[90.11088,23.76864],[90.12478,23.81079],[90.1474,23.84965],[90.17789,23.88372],[90.21508,23.91168],[90.25754,23.93247],[90.30362,23.94527],[90.35156,23.94959]]]}},"Dhaka-University":{type:"Feature",id:"Dhaka-University",properties:{},geometry:{type:"Polygon",coordinates:[[[90.35156,23.94959],[90.3995,23.94527],[90.44559,23.93247],[90.48805,23.91168],[90.52524,23.88372],[90.55573,23.84965],[90.57835,23.81079],[90.59224,23.76864],[90.59687,23.72482],[90.59208,23.68101],[90.57805,23.6389],[90.55534,23.60011],[90.52481,23.56611],[90.48766,23.53822],[90.44529,23.5175],[90.39934,23.50474],[90.35156,23.50043],[90.30379,23.50474],[90.25783,23.5175],[90.21547,23.53822],[90.17831,23.56611],[90.14779,23.60011],[90.12507,23.6389],[90.11105,23.68101],[90.10625,23.72482],[90.11088,23.76864],[90.12478,23.81079],[90.1474,23.84965],[90.17789,23.88372],[90.21508,23.91168],[90.25754,23.93247],[90.30362,23.94527],[90.35156,23.94959]]]}},"Eastern-University":{type:"Feature",id:"Eastern-University",properties:{},geometry:{type:"Polygon",coordinates:[[[90.38063,23.96703],[90.42857,23.96271],[90.47466,23.94991],[90.51713,23.92913],[90.55432,23.90116],[90.58482,23.86709],[90.60744,23.82823],[90.62134,23.78608],[90.62597,23.74226],[90.62117,23.69846],[90.60714,23.65635],[90.58443,23.61755],[90.5539,23.58356],[90.51674,23.55567],[90.47437,23.53494],[90.42841,23.52218],[90.38063,23.51788],[90.33284,23.52218],[90.28688,23.53494],[90.24451,23.55567],[90.20735,23.58356],[90.17682,23.61755],[90.15411,23.65635],[90.14008,23.69846],[90.13528,23.74226],[90.13991,23.78608],[90.15381,23.82823],[90.17643,23.86709],[90.20693,23.90116],[90.24412,23.92913],[90.28659,23.94991],[90.33268,23.96271],[90.38063,23.96703]]]}},"Jahangirnagar-University":{type:"Feature",id:"Jahangirnagar-University",properties:{},geometry:{type:"Polygon",coordinates:[[[90.26753,24.10689],[90.31553,24.10257],[90.36167,24.08977],[90.40418,24.06899],[90.44141,24.04102],[90.47194,24.00695],[90.49459,23.96809],[90.5085,23.92594],[90.51314,23.88212],[90.50834,23.83831],[90.49429,23.79621],[90.47155,23.75741],[90.44099,23.72342],[90.40378,23.69552],[90.36137,23.6748],[90.31536,23.66204],[90.26753,23.65774],[90.21969,23.66204],[90.17369,23.6748],[90.13127,23.69552],[90.09407,23.72342],[90.06351,23.75741],[90.04077,23.79621],[90.02672,23.83831],[90.02192,23.88212],[90.02656,23.92594],[90.04046,23.96809],[90.06312,24.00695],[90.09364,24.04102],[90.13088,24.06899],[90.17339,24.08977],[90.21953,24.10257],[90.26753,24.10689]]]}},"Khulna-University":{type:"Feature",id:"Khulna-University",properties:{},geometry:{type:"Polygon",coordinates:[[[89.56055,23.06152],[89.60816,23.0572],[89.65394,23.0444],[89.69611,23.02362],[89.73306,22.99565],[89.76335,22.96159],[89.78582,22.92273],[89.79962,22.88058],[89.80423,22.83676],[89.79947,22.79295],[89.78554,22.75085],[89.76297,22.71205],[89.73265,22.67805],[89.69574,22.65016],[89.65366,22.62944],[89.60801,22.61668],[89.56055,22.61237],[89.51308,22.61668],[89.46744,22.62944],[89.42535,22.65016],[89.38844,22.67805],[89.35812,22.71205],[89.33556,22.75085],[89.32163,22.79295],[89.31687,22.83676],[89.32147,22.88058],[89.33527,22.92273],[89.35775,22.96159],[89.38804,22.99565],[89.42498,23.02362],[89.46715,23.0444],[89.51293,23.0572],[89.56055,23.06152]]]}},"Rajshahi-University-of-Engineering-Technology":{type:"Feature",id:"Rajshahi-University-of-Engineering-Technology",properties:{},geometry:{type:"Polygon",coordinates:[[[88.62839,24.58841],[88.67657,24.58409],[88.72289,24.57129],[88.76556,24.5505],[88.80293,24.52253],[88.83358,24.48846],[88.85631,24.4496],[88.87027,24.40745],[88.87492,24.36363],[88.8701,24.31983],[88.856,24.27772],[88.83317,24.23893],[88.8025,24.20493],[88.76515,24.17704],[88.72258,24.15632],[88.6764,24.14356],[88.62839,24.13925],[88.58037,24.14356],[88.5342,24.15632],[88.49162,24.17704],[88.45428,24.20493],[88.4236,24.23893],[88.40077,24.27772],[88.38667,24.31983],[88.38185,24.36363],[88.38651,24.40745],[88.40047,24.4496],[88.4232,24.48846],[88.45384,24.52253],[88.49122,24.5505],[88.53389,24.57129],[88.58021,24.58409],[88.62839,24.58841]]]}},"Sherubtse-College":{type:"Feature",id:"Sherubtse-College",properties:{},geometry:{type:"Polygon",coordinates:[[[91.52369,27.51129],[91.57309,27.50697],[91.62058,27.49416],[91.66432,27.47337],[91.70263,27.4454],[91.73404,27.41133],[91.75734,27.37246],[91.77163,27.33031],[91.77639,27.28649],[91.77144,27.24268],[91.75698,27.20058],[91.73357,27.16179],[91.70212,27.1278],[91.66385,27.09991],[91.62022,27.0792],[91.5729,27.06644],[91.52369,27.06214],[91.47449,27.06644],[91.42717,27.0792],[91.38354,27.09991],[91.34526,27.1278],[91.31382,27.16179],[91.29041,27.20058],[91.27595,27.24268],[91.271,27.28649],[91.27575,27.33031],[91.29005,27.37246],[91.31335,27.41133],[91.34475,27.4454],[91.38307,27.47337],[91.42681,27.49416],[91.4743,27.50697],[91.52369,27.51129]]]}},"Gujarat-University":{type:"Feature",id:"Gujarat-University",properties:{},geometry:{type:"Polygon",coordinates:[[[72.50977,23.22343],[72.55744,23.21911],[72.60327,23.20631],[72.6455,23.18552],[72.68248,23.15756],[72.71281,23.12349],[72.73531,23.08463],[72.74913,23.04248],[72.75374,22.99866],[72.74897,22.95486],[72.73502,22.91275],[72.71243,22.87395],[72.68208,22.83996],[72.64512,22.81206],[72.60299,22.79134],[72.55728,22.77858],[72.50977,22.77427],[72.46225,22.77858],[72.41654,22.79134],[72.37441,22.81206],[72.33745,22.83996],[72.3071,22.87395],[72.28451,22.91275],[72.27056,22.95486],[72.26579,22.99866],[72.2704,23.04248],[72.28422,23.08463],[72.30672,23.12349],[72.33705,23.15756],[72.37403,23.18552],[72.41626,23.20631],[72.46209,23.21911],[72.50977,23.22343]]]}},india_andhrapradesh:{type:"Feature",id:"india_andhrapradesh",properties:{},geometry:{type:"Polygon",coordinates:[[[76.76365,14.98503],[76.78952,15.01589],[76.77614,15.05336],[76.80034,15.09466],[76.86072,15.05669],[76.87678,15.02859],[76.94279,15.02725],[76.98159,15.0103],[77.00077,15.02948],[77.04671,15.02904],[77.07882,15.00004],[77.1096,15.02859],[77.12744,15.09371],[77.14751,15.10753],[77.16873,15.17462],[77.14554,15.22413],[77.15223,15.29148],[77.12118,15.29418],[77.11387,15.3334],[77.07705,15.32577],[77.0421,15.36103],[77.027,15.44075],[76.97414,15.50807],[77.02697,15.5037],[77.03509,15.63815],[77.08728,15.65733],[77.08192,15.69524],[77.05293,15.72914],[77.05561,15.82458],[77.03333,15.85326],[77.07659,15.90991],[77.14448,15.94265],[77.2479,15.96378],[77.3564,15.95008],[77.42745,15.94836],[77.46652,15.93453],[77.61152,15.91691],[77.6536,15.88393],[77.72205,15.89199],[77.80554,15.87083],[77.8616,15.88138],[77.89376,15.90154],[78.00803,15.86506],[78.03641,15.90188],[78.06997,15.85048],[78.10755,15.83401],[78.17153,15.85511],[78.17371,15.89569],[78.20995,15.9197],[78.2507,15.96993],[78.2682,16.02857],[78.29785,16.01169],[78.40727,16.0756],[78.45394,16.07503],[78.55814,16.04517],[78.59917,16.08361],[78.64311,16.08312],[78.68277,16.03346],[78.73718,16.0097],[78.78267,16.02125],[78.8419,16.08707],[78.83228,16.13919],[78.87606,16.13902],[78.88876,16.0879],[78.92138,16.10307],[78.9049,16.17711],[78.92807,16.19871],[78.98352,16.21074],[79.01236,16.24173],[79.09802,16.2236],[79.12305,16.23187],[79.1593,16.20893],[79.22111,16.23251],[79.23438,16.32518],[79.21143,16.35493],[79.21112,16.44396],[79.22091,16.51631],[79.25265,16.57381],[79.37802,16.58412],[79.41773,16.57986],[79.44409,16.61796],[79.49421,16.63408],[79.53884,16.63046],[79.60613,16.67239],[79.63566,16.6594],[79.68544,16.69755],[79.72286,16.68966],[79.74673,16.72106],[79.79256,16.72485],[79.81796,16.69098],[79.84286,16.70561],[79.88555,16.68642],[79.90723,16.63408],[79.95306,16.63621],[80.00576,16.70857],[80.05536,16.74833],[80.07093,16.81323],[80.0332,16.85233],[79.99173,16.86303],[80.04569,16.96517],[80.08405,16.96339],[80.134,16.98524],[80.18217,17.04501],[80.19555,17.01825],[80.26201,17.01066],[80.28877,16.97677],[80.31553,16.91254],[80.3191,16.87106],[80.35879,16.85501],[80.37306,16.8113],[80.41856,16.84252],[80.45647,16.78989],[80.56262,16.76268],[80.6041,16.78766],[80.55593,16.81843],[80.56485,16.86883],[80.59027,16.91165],[80.53184,16.95001],[80.44264,16.9451],[80.35835,16.97052],[80.38778,17.0071],[80.36682,17.0566],[80.39001,17.07623],[80.42034,17.02494],[80.48234,17.05036],[80.49616,17.10789],[80.56039,17.13822],[80.68393,17.06865],[80.82309,17.03787],[80.85877,17.05081],[80.87714,17.10478],[80.88011,17.1644],[80.91689,17.15439],[80.91892,17.22003],[80.99838,17.19012],[81.03576,17.19196],[81.05653,17.22041],[81.16295,17.23278],[81.18035,17.25463],[81.17053,17.29656],[81.19016,17.32733],[81.26732,17.3202],[81.31385,17.37576],[81.24132,17.40667],[81.22725,17.43762],[81.17746,17.45203],[81.15755,17.47938],[81.11343,17.49477],[81.08374,17.45957],[81.01198,17.49248],[80.99962,17.53013],[80.95671,17.58749],[80.85431,17.59347],[80.86444,17.62914],[80.90266,17.63912],[80.90684,17.67993],[80.89153,17.74125],[80.94636,17.76025],[81.03556,17.74495],[81.07481,17.76038],[81.08891,17.81081],[81.15938,17.85273],[81.19194,17.84694],[81.25394,17.81215],[81.40915,17.80501],[81.47025,17.8233],[81.48096,17.80278],[81.5541,17.81616],[81.61119,17.81527],[81.66293,17.87682],[81.70307,17.86121],[81.78246,17.90982],[81.80119,17.93614],[81.89932,17.9687],[82.0019,18.02356],[82.03316,18.06597],[82.08072,18.07378],[82.14091,18.0439],[82.17228,18.04993],[82.25028,17.9883],[82.27583,17.995],[82.2667,18.04332],[82.29628,18.06899],[82.34354,18.07485],[82.33329,18.1422],[82.30608,18.19572],[82.33284,18.21579],[82.33685,18.26619],[82.37209,18.27421],[82.39305,18.30633],[82.33462,18.31703],[82.38458,18.36922],[82.36138,18.4098],[82.43513,18.48477],[82.48969,18.52285],[82.53139,18.51177],[82.54422,18.41638],[82.60918,18.37427],[82.59758,18.26516],[82.64005,18.23708],[82.67329,18.29908],[82.70644,18.30476],[82.77538,18.33958],[82.79251,18.36262],[82.78448,18.42803],[82.80742,18.44772],[82.89919,18.40074],[82.91103,18.36453],[82.98471,18.36362],[83.0002,18.38368],[83.04775,18.37883],[83.07472,18.401],[83.04552,18.44345],[83.05997,18.48603],[83.09665,18.54123],[83.05931,18.54334],[83.0336,18.57266],[83.05776,18.62215],[83.09414,18.63021],[83.15495,18.70089],[83.23099,18.75616],[83.27407,18.76523],[83.28745,18.79777],[83.36791,18.81557],[83.40661,18.84174],[83.39569,18.87914],[83.35554,18.92896],[83.36892,18.96132],[83.32119,18.97447],[83.3428,19.01449],[83.41665,19.00408],[83.45049,18.95576],[83.48237,19.00825],[83.46716,19.07746],[83.51314,19.07262],[83.52143,19.03271],[83.61209,19.10076],[83.62679,19.14969],[83.69206,19.05202],[83.71342,18.99346],[83.73398,18.98382],[83.79596,19.01607],[83.84255,18.9178],[83.85136,18.86003],[83.87788,18.82716],[84.05557,18.79246],[84.0894,18.75373],[84.16689,18.78415],[84.22422,18.79642],[84.2535,18.78262],[84.2914,18.8],[84.33966,18.80123],[84.39349,18.89211],[84.43671,18.92277],[84.42292,18.94711],[84.47894,18.99017],[84.51711,19.04634],[84.62687,19.08543],[84.61653,19.12624],[84.66828,19.13065],[84.6721,19.16552],[84.71352,19.1524],[84.70468,19.11772],[84.76857,19.08003],[85.15481,18.87834],[85.14492,18.85295],[85.05442,18.77126],[85.01176,18.69225],[84.94947,18.67649],[84.44354,18.21885],[83.98107,17.79763],[83.77893,17.63361],[83.20925,17.15734],[82.8246,16.92714],[82.20846,16.16914],[81.78413,16.05362],[81.60171,16.04774],[80.84225,15.52037],[80.65306,15.4875],[80.54735,15.42991],[80.4922,15.34128],[80.47381,15.25261],[80.48624,15.06582],[80.49835,15.0251],[80.66968,13.56514],[80.26863,13.56255],[80.24181,13.46797],[80.22545,13.48346],[80.14774,13.49443],[80.08045,13.49111],[80.08,13.52565],[80.00213,13.53964],[80.01841,13.50074],[79.97441,13.46419],[79.96622,13.38714],[79.93821,13.34898],[79.86379,13.31632],[79.8129,13.31712],[79.79245,13.29487],[79.73437,13.27843],[79.79598,13.24103],[79.75102,13.21106],[79.68369,13.24845],[79.68102,13.29448],[79.57781,13.26176],[79.54809,13.32329],[79.42941,13.33391],[79.41957,13.24971],[79.43293,13.1966],[79.39666,13.19679],[79.36005,13.17504],[79.36244,13.13752],[79.31106,13.1268],[79.28351,13.14994],[79.23853,13.1464],[79.20549,13.10147],[79.16498,13.01908],[79.06532,13.04951],[78.99361,13.08754],[78.95768,13.07478],[78.81243,13.08649],[78.75104,13.05634],[78.71387,13.06691],[78.70525,13.01518],[78.6625,13.02861],[78.63167,12.98455],[78.63629,12.92494],[78.60313,12.84933],[78.59178,12.77804],[78.55737,12.73938],[78.55312,12.69582],[78.50595,12.74103],[78.50517,12.68031],[78.46933,12.67292],[78.47136,12.62811],[78.3799,12.62235],[78.30177,12.66322],[78.27563,12.70205],[78.23857,12.6994],[78.23025,12.75702],[78.2528,12.82236],[78.25198,12.85741],[78.31411,12.85733],[78.32741,12.90272],[78.35638,12.93819],[78.38944,12.90542],[78.41213,12.94302],[78.46924,12.97546],[78.46092,13.03126],[78.5219,13.06638],[78.54509,13.11098],[78.57956,13.21461],[78.57797,13.28201],[78.51185,13.28722],[78.44649,13.30825],[78.43949,13.327],[78.36546,13.36503],[78.38151,13.40071],[78.37259,13.46181],[78.38241,13.52477],[78.40574,13.57659],[78.39268,13.5915],[78.32632,13.59445],[78.25894,13.58461],[78.20436,13.60369],[78.16645,13.65721],[78.11784,13.65587],[78.12295,13.71405],[78.09423,13.74251],[78.12795,13.78565],[78.11441,13.8625],[78.04999,13.89494],[78.04642,13.86104],[78.00476,13.87355],[77.95566,13.82664],[77.95098,13.88825],[77.98752,13.89784],[77.97015,13.95827],[77.92868,13.90698],[77.89567,13.93954],[77.83858,13.93508],[77.81494,13.91679],[77.83635,13.86863],[77.79261,13.8211],[77.6267,13.76984],[77.53033,13.69514],[77.45805,13.68671],[77.47014,13.7502],[77.45855,13.79212],[77.41662,13.80595],[77.43223,13.84163],[77.32787,13.83226],[77.31449,13.86393],[77.25829,13.84609],[77.21904,13.86794],[77.18236,13.8682],[77.15308,13.84278],[77.18088,13.78098],[77.17444,13.76135],[77.10308,13.76759],[77.06516,13.74405],[77.0277,13.77651],[77.00003,13.74482],[76.97723,13.81547],[77.01323,13.85558],[77.04239,13.9332],[76.99574,13.96114],[77.00108,13.98729],[76.93324,14.03009],[76.97878,14.07002],[76.89779,14.16518],[76.96469,14.18169],[77.02696,14.17477],[77.02154,14.13052],[77.03389,14.05587],[77.13014,14.04533],[77.1441,14.00245],[77.28518,14.01342],[77.31997,14.03126],[77.3503,13.95767],[77.35476,13.90325],[77.39713,13.90415],[77.42702,13.98353],[77.39,14.01386],[77.33291,14.02947],[77.40204,14.1102],[77.38331,14.13607],[77.39624,14.17175],[77.51711,14.17844],[77.49659,14.23419],[77.50284,14.27834],[77.45021,14.28414],[77.44887,14.31625],[77.37617,14.33081],[77.38984,14.26937],[77.28608,14.2828],[77.28786,14.33766],[77.23835,14.31759],[77.1661,14.34301],[77.13845,14.33721],[77.11838,14.29395],[77.11539,14.22104],[77.0818,14.2159],[77.05638,14.24623],[76.9426,14.2444],[76.92967,14.27651],[76.94748,14.31179],[76.9038,14.32379],[76.88373,14.35055],[76.88774,14.3947],[76.97828,14.48256],[76.91138,14.48836],[76.87481,14.47275],[76.83244,14.52761],[76.80434,14.53207],[76.76554,14.60075],[76.77639,14.68002],[76.80359,14.7398],[76.78371,14.78455],[76.83756,14.78968],[76.86771,14.96792],[76.76736,14.97267],[76.76365,14.98503]]]}},india_full:{type:"Feature",id:"india_full",properties:{name:"India"},geometry:{type:"MultiPolygon",coordinates:[[[[77.83745,35.49401],[78.91227,34.32194],[78.81109,33.5062],[79.20889,32.99439],[79.17613,32.48378],[78.45845,32.61816],[78.73889,31.51591],[79.72137,30.88272],[81.11126,30.18348],[80.47672,29.72987],[80.08843,28.79447],[81.0572,28.41609],[81.99999,27.92548],[83.30425,27.36451],[84.67502,27.2349],[85.25178,26.7262],[86.02439,26.63098],[87.22747,26.3979],[88.06024,26.41462],[88.1748,26.8104],[88.04313,27.44582],[88.12044,27.87654],[88.73033,28.08686],[88.81425,27.29932],[88.83564,27.09897],[89.74453,26.7194],[90.37328,26.87572],[91.21751,26.80865],[92.03348,26.83831],[92.10371,27.45261],[91.69666,27.77174],[92.50312,27.89688],[93.41335,28.64063],[94.56599,29.27744],[95.4048,29.03172],[96.11768,29.4528],[96.58659,28.83098],[96.24883,28.41103],[97.32711,28.26158],[97.40256,27.88254],[97.05199,27.69906],[97.134,27.08377],[96.41937,27.26459],[95.12477,26.57357],[95.15515,26.00131],[94.60325,25.16249],[94.55266,24.67524],[94.10674,23.85074],[93.32519,24.07856],[93.28633,23.04366],[93.06029,22.70311],[93.16613,22.27846],[92.67272,22.04124],[92.14603,23.6275],[91.86993,23.62435],[91.70647,22.98526],[91.15896,23.50353],[91.46773,24.07264],[91.91509,24.13041],[92.3762,24.97669],[91.7996,25.14743],[90.87221,25.1326],[89.92069,25.26975],[89.83248,25.96508],[89.35509,26.01441],[88.56305,26.44653],[88.20979,25.76807],[88.93155,25.23869],[88.30637,24.86608],[88.08442,24.50166],[88.69994,24.23372],[88.52977,23.63114],[88.87631,22.87915],[89.03196,22.05571],[88.88877,21.69059],[88.2085,21.70317],[86.9757,21.49556],[87.03317,20.74331],[86.49935,20.15164],[85.06027,19.47858],[83.94101,18.30201],[83.18922,17.67122],[82.19279,17.01664],[82.19124,16.55666],[81.69272,16.31022],[80.792,15.95197],[80.3249,15.89918],[80.02507,15.13641],[80.23327,13.83577],[80.28629,13.00626],[79.86255,12.05621],[79.858,10.35727],[79.34051,10.30885],[78.88535,9.54614],[79.18972,9.21654],[78.27794,8.93305],[77.94116,8.25296],[77.5399,7.96554],[76.59298,8.89928],[76.13006,10.29963],[75.74647,11.30825],[75.3961,11.78125],[74.86482,12.74194],[74.61672,13.99258],[74.44386,14.61722],[73.5342,15.99065],[73.11991,17.92857],[72.82091,19.20823],[72.82448,20.4195],[72.63053,21.35601],[71.17527,20.75744],[70.47046,20.87733],[69.16413,22.0893],[69.64493,22.45078],[69.3496,22.84318],[68.17664,23.69196],[68.8426,24.35913],[71.04324,24.35652],[70.8447,25.2151],[70.28287,25.72223],[70.16893,26.49187],[69.51439,26.94097],[70.6165,27.9892],[71.77767,27.91318],[72.82375,28.96159],[73.45064,29.97641],[74.42138,30.97981],[74.40593,31.69264],[75.25864,32.2711],[74.45156,32.7649],[74.10429,33.44147],[73.74995,34.3177],[74.2402,34.74889],[75.75706,34.50492],[76.87172,34.65354],[77.83745,35.49401]]]]}},india_karnataka:{type:"Feature",id:"india_karnataka",properties:{},geometry:{type:"Polygon",coordinates:[[[73.87267,14.75312],[74.17989,14.95708],[74.2532,14.95804],[74.29821,15.04123],[74.31574,15.18805],[74.27607,15.27727],[74.32187,15.34414],[74.28027,15.38891],[74.27464,15.54999],[74.24074,15.66684],[74.11652,15.65308],[74.16212,15.75075],[74.28923,15.73953],[74.36893,15.78648],[74.34579,15.84959],[74.43203,15.95338],[74.46484,16.0421],[74.37226,16.07692],[74.48045,16.14527],[74.50509,16.22265],[74.31843,16.32588],[74.33806,16.40125],[74.26427,16.53936],[74.33986,16.54825],[74.54427,16.63407],[74.6313,16.57831],[74.68877,16.71489],[74.91203,16.7883],[74.99259,16.95146],[75.09075,16.95064],[75.18186,16.84374],[75.26705,16.86247],[75.28311,16.95524],[75.46783,16.98524],[75.51065,16.94733],[75.66898,16.97766],[75.67389,17.11369],[75.62834,17.18928],[75.65739,17.27069],[75.58469,17.34963],[75.63468,17.47651],[75.77995,17.37683],[75.89432,17.40292],[75.93159,17.32197],[76.11996,17.37007],[76.22917,17.36301],[76.38171,17.31172],[76.37153,17.4341],[76.33086,17.46872],[76.41561,17.60431],[76.48659,17.66155],[76.48652,17.71358],[76.56488,17.76523],[76.66314,17.68771],[76.8094,17.8693],[76.92164,17.94103],[76.9513,18.05843],[76.92422,18.14531],[77.14325,18.20848],[77.20119,18.27828],[77.24726,18.41311],[77.31257,18.43674],[77.41407,18.39352],[77.3672,18.30846],[77.46332,18.26219],[77.57345,18.24294],[77.59821,18.0861],[77.64737,17.99934],[77.6208,17.9031],[77.5709,17.86625],[77.53999,17.72825],[77.45138,17.69052],[77.44541,17.58272],[77.6912,17.50865],[77.53911,17.44295],[77.52471,17.36431],[77.45747,17.34038],[77.3772,17.14285],[77.46328,17.11129],[77.50069,17.01255],[77.45223,16.91995],[77.47617,16.7804],[77.46008,16.61106],[77.37653,16.48644],[77.25617,16.47308],[77.28927,16.408],[77.41673,16.36775],[77.52418,16.3753],[77.59655,16.31743],[77.49303,16.25534],[77.51178,15.92828],[77.2479,15.96378],[77.07659,15.90991],[77.03509,15.63815],[77.027,15.44075],[77.0421,15.36103],[77.15223,15.29148],[77.16873,15.17462],[77.1096,15.02859],[76.98159,15.0103],[76.87678,15.02859],[76.80034,15.09466],[76.76736,14.97267],[76.86771,14.96792],[76.83756,14.78968],[76.77639,14.68002],[76.76554,14.60075],[76.87481,14.47275],[76.88373,14.35055],[76.94748,14.31179],[76.9426,14.2444],[77.05638,14.24623],[77.1661,14.34301],[77.28608,14.2828],[77.38984,14.26937],[77.44887,14.31625],[77.50284,14.27834],[77.51711,14.17844],[77.39624,14.17175],[77.40204,14.1102],[77.33291,14.02947],[77.42702,13.98353],[77.35476,13.90325],[77.31997,14.03126],[77.1441,14.00245],[77.03389,14.05587],[77.02696,14.17477],[76.89779,14.16518],[76.97878,14.07002],[76.93324,14.03009],[77.04239,13.9332],[76.97723,13.81547],[77.06516,13.74405],[77.17444,13.76135],[77.18236,13.8682],[77.32787,13.83226],[77.43223,13.84163],[77.47014,13.7502],[77.53033,13.69514],[77.6267,13.76984],[77.79261,13.8211],[77.89567,13.93954],[77.95098,13.88825],[78.04999,13.89494],[78.11441,13.8625],[78.11784,13.65587],[78.20436,13.60369],[78.40574,13.57659],[78.37068,13.46984],[78.40217,13.31113],[78.58854,13.26912],[78.5219,13.06638],[78.46924,12.97546],[78.35684,12.94022],[78.31447,12.8595],[78.25248,12.85994],[78.23196,12.76495],[78.08636,12.80344],[77.99036,12.80553],[77.93327,12.8876],[77.81099,12.8303],[77.74108,12.67162],[77.60006,12.6661],[77.58743,12.51473],[77.63575,12.48605],[77.61553,12.36799],[77.52722,12.27746],[77.51993,12.19264],[77.60853,12.20409],[77.73432,12.17555],[77.77447,12.12033],[77.67932,11.97287],[77.60217,11.93627],[77.49513,11.94251],[77.42332,11.77259],[77.29576,11.80871],[77.11315,11.77337],[77.01458,11.81306],[76.90977,11.79343],[76.8262,11.60485],[76.56305,11.62046],[76.51399,11.70565],[76.41621,11.67255],[76.20482,11.86247],[76.1155,11.8579],[76.11204,11.97862],[76.00455,11.93123],[75.86924,11.95161],[75.79654,12.0533],[75.63883,12.14712],[75.5804,12.1556],[75.4863,12.29074],[75.43456,12.29653],[75.37427,12.46113],[75.22345,12.56714],[75.1619,12.66883],[75.06067,12.66842],[75.00958,12.79255],[74.8591,12.76032],[74.64061,12.65899],[74.51827,12.99543],[74.32397,13.82179],[73.87267,14.75312]]]}},india_kerala:{type:"Feature",id:"india_kerala",properties:{},geometry:{type:"Polygon",coordinates:[[[74.64061,12.65899],[74.8591,12.76032],[74.88399,12.75347],[74.95843,12.78474],[75.00958,12.79255],[74.99766,12.73819],[75.05297,12.71899],[75.06067,12.66842],[75.11342,12.67842],[75.1619,12.66883],[75.14362,12.63805],[75.18287,12.63181],[75.22345,12.56714],[75.23683,12.56625],[75.28071,12.61847],[75.29121,12.59649],[75.27114,12.55367],[75.28095,12.51799],[75.33492,12.49034],[75.3573,12.46234],[75.39003,12.49736],[75.41661,12.49293],[75.4241,12.46603],[75.39599,12.45143],[75.37427,12.46113],[75.36747,12.41202],[75.38331,12.39011],[75.42333,12.37233],[75.41374,12.34763],[75.43456,12.29653],[75.4863,12.29074],[75.51484,12.25818],[75.53759,12.20064],[75.5804,12.1556],[75.63883,12.14712],[75.66604,12.09583],[75.68727,12.10816],[75.73047,12.07283],[75.75506,12.08318],[75.79833,12.08006],[75.79654,12.0533],[75.82391,12.01308],[75.82999,11.98372],[75.86924,11.95161],[76.00455,11.93123],[76.03621,11.9406],[76.07903,11.96914],[76.11204,11.97862],[76.1155,11.8579],[76.15528,11.87128],[76.20482,11.86247],[76.22662,11.80542],[76.27964,11.81018],[76.30774,11.78297],[76.31799,11.75041],[76.34252,11.73748],[76.41129,11.75913],[76.42399,11.72006],[76.40338,11.70748],[76.41621,11.67255],[76.44345,11.63744],[76.42497,11.62329],[76.37992,11.6224],[76.37056,11.59341],[76.29786,11.56442],[76.2711,11.59296],[76.2256,11.56442],[76.24255,11.52874],[76.24478,11.49439],[76.32105,11.44489],[76.33354,11.45871],[76.39063,11.42794],[76.44861,11.38155],[76.53826,11.35167],[76.54532,11.30094],[76.52349,11.27236],[76.45271,11.23905],[76.44934,11.20462],[76.51048,11.21163],[76.53385,11.19671],[76.60091,11.20654],[76.62971,11.19413],[76.69784,11.23906],[76.72537,11.22534],[76.72765,11.19388],[76.69301,11.17193],[76.69124,11.14472],[76.73852,11.12108],[76.74788,11.07514],[76.73718,11.04749],[76.69507,11.02252],[76.68644,10.98934],[76.66047,10.96052],[76.64932,10.92395],[76.73272,10.88113],[76.77286,10.88158],[76.81746,10.86195],[76.85983,10.79996],[76.88838,10.79996],[76.8973,10.77096],[76.875,10.70674],[76.85537,10.67507],[76.87277,10.62958],[76.80497,10.62646],[76.80854,10.59434],[76.82995,10.58498],[76.81746,10.43869],[76.8072,10.41505],[76.83932,10.35974],[76.82944,10.30749],[76.9018,10.26001],[76.90974,10.23668],[76.93976,10.23927],[76.98194,10.22077],[77.04075,10.25298],[77.06496,10.29751],[77.11964,10.31782],[77.17683,10.35777],[77.23655,10.35242],[77.21441,10.30577],[77.25054,10.25359],[77.25544,10.22549],[77.28042,10.20721],[77.26769,10.12222],[77.23784,10.12768],[77.20426,10.11207],[77.21976,10.07801],[77.26184,10.03015],[77.25908,9.9945],[77.27231,9.96404],[77.24834,9.95177],[77.21305,9.87549],[77.23646,9.85946],[77.22277,9.82317],[77.24656,9.80841],[77.20553,9.69439],[77.17963,9.65641],[77.16816,9.61495],[77.21264,9.60207],[77.23711,9.58089],[77.27684,9.57498],[77.3042,9.59951],[77.36511,9.54996],[77.3997,9.49683],[77.39331,9.45986],[77.36661,9.46037],[77.33693,9.40901],[77.33713,9.36507],[77.32506,9.33664],[77.28329,9.30039],[77.28844,9.27469],[77.26509,9.18184],[77.26714,9.15394],[77.24693,9.12483],[77.21199,9.101],[77.18667,9.04329],[77.16025,9.03584],[77.14986,9.01008],[77.17354,8.99121],[77.19759,8.95104],[77.19567,8.9236],[77.2559,8.8781],[77.25798,8.83758],[77.2292,8.78679],[77.19607,8.74588],[77.17517,8.73703],[77.20586,8.68645],[77.21552,8.64836],[77.27872,8.56521],[77.26344,8.50713],[77.20618,8.47859],[77.22506,8.44602],[77.18854,8.43476],[77.15375,8.37722],[77.14974,8.32192],[77.12209,8.32281],[77.09077,8.2973],[76.92132,8.09605],[76.6728,8.34299],[76.46487,8.59279],[76.22556,8.95652],[75.91159,10.04616],[75.68288,10.55908],[75.58764,10.89204],[75.55244,11.04304],[75.25797,11.51227],[75.53645,11.69255],[75.53089,11.70357],[75.25113,11.52458],[74.97117,11.94518],[74.71236,12.49398],[74.64061,12.65899]]]}},india_maharashtra:{type:"Feature",id:"india_maharashtra",properties:{name:"Maharashtra"},geometry:{type:"Polygon",coordinates:[[[72.53789,20.1498],[72.80202,20.12516],[72.87472,20.22596],[72.97061,20.21213],[72.97329,20.13096],[73.18604,20.05291],[73.29353,20.15371],[73.31137,20.20723],[73.43,20.20634],[73.41484,20.38162],[73.47594,20.49491],[73.51787,20.67019],[73.62224,20.62514],[73.63428,20.58232],[73.74801,20.56716],[73.84658,20.62336],[73.88538,20.72951],[73.93846,20.76073],[73.94515,20.84012],[73.79279,21.06787],[73.68111,21.15233],[73.82249,21.17195],[73.83231,21.2674],[73.94827,21.29773],[73.96879,21.39228],[74.10883,21.44803],[74.30776,21.48014],[74.2917,21.55864],[73.97926,21.54124],[73.86085,21.49576],[73.82294,21.60057],[73.88583,21.64517],[73.89029,21.71073],[73.83231,21.81064],[74.04684,21.92259],[74.14585,21.95425],[74.28991,21.93597],[74.38848,22.02026],[74.52764,21.90876],[74.50578,21.78254],[74.59053,21.66435],[74.83048,21.61038],[74.86438,21.63402],[75.05795,21.56489],[75.11504,21.45963],[75.21985,21.41101],[75.38443,21.38559],[75.46828,21.39406],[75.83267,21.38336],[75.95934,21.39629],[76.05255,21.35259],[76.09849,21.37399],[76.15915,21.25892],[76.16851,21.08587],[76.3826,21.07963],[76.45262,21.11486],[76.48741,21.19604],[76.61676,21.19871],[76.66091,21.28256],[76.62434,21.33519],[76.73227,21.40878],[76.79159,21.48996],[76.79516,21.59745],[76.90131,21.60101],[76.9972,21.68174],[77.1212,21.72545],[77.20728,21.69423],[77.27998,21.76113],[77.47756,21.77005],[77.57122,21.62688],[77.56721,21.52965],[77.45749,21.55641],[77.41869,21.52073],[77.48692,21.37756],[77.93873,21.38693],[78.16932,21.49843],[78.21526,21.55374],[78.3,21.58496],[78.41329,21.57782],[78.43024,21.50155],[78.50874,21.52831],[78.58501,21.48683],[78.932,21.48728],[78.91327,21.59254],[79.1278,21.62822],[79.22102,21.69646],[79.48862,21.67416],[79.50602,21.59031],[79.57604,21.54348],[79.73259,21.60235],[79.85703,21.53099],[80.06665,21.55686],[80.18842,21.63402],[80.26022,21.62019],[80.36905,21.52296],[80.41142,21.43822],[80.51936,21.3896],[80.63532,21.25],[80.45736,21.17284],[80.42391,21.0096],[80.46539,20.92709],[80.54166,20.93378],[80.54344,20.79195],[80.57823,20.67866],[80.50776,20.65458],[80.51177,20.585],[80.62239,20.60373],[80.58581,20.39544],[80.61659,20.32587],[80.38288,20.24157],[80.4141,20.19028],[80.54032,20.11],[80.54567,19.98734],[80.46048,19.82812],[80.66476,19.69075],[80.65673,19.61225],[80.82755,19.56274],[80.88553,19.50922],[80.84271,19.36605],[80.74905,19.28666],[80.67864,19.33089],[80.60751,19.31353],[80.58732,19.39674],[80.48071,19.3355],[80.39329,19.24591],[80.39154,19.1836],[80.3302,19.13746],[80.26929,18.94468],[80.35176,18.84592],[80.24684,18.70149],[80.10826,18.68928],[79.94712,18.78372],[79.95979,18.85795],[79.93945,19.0406],[79.85699,19.09508],[79.94349,19.16387],[79.92836,19.24777],[79.97469,19.38922],[79.92536,19.49855],[79.87599,19.5041],[79.75713,19.60733],[79.63608,19.57639],[79.60249,19.51309],[79.5317,19.55241],[79.42494,19.53529],[79.22736,19.61468],[79.22023,19.5286],[79.1725,19.46081],[79.08018,19.53261],[79.00213,19.54198],[78.89954,19.66954],[78.84245,19.65839],[78.82963,19.75513],[78.60098,19.81809],[78.48728,19.79375],[78.28109,19.90236],[78.3514,19.78327],[78.32909,19.71548],[78.26933,19.69184],[78.29475,19.60621],[78.29564,19.46794],[78.20778,19.43583],[78.16318,19.3551],[78.16675,19.2436],[78.03473,19.2436],[77.92412,19.3444],[77.84428,19.30426],[77.81484,19.13745],[77.74304,19.06118],[77.75106,18.98357],[77.83714,18.95414],[77.90751,18.8295],[77.83749,18.80764],[77.74829,18.60515],[77.65541,18.5316],[77.59709,18.54762],[77.54937,18.3875],[77.55171,18.29114],[77.46332,18.26219],[77.3672,18.30846],[77.41407,18.39352],[77.31257,18.43674],[77.2452,18.41278],[77.19913,18.27795],[77.14119,18.20815],[77.03495,18.18076],[76.95329,18.18881],[76.92422,18.14531],[76.9513,18.05843],[76.9075,18.00923],[76.92164,17.94103],[76.8094,17.8693],[76.66314,17.68771],[76.56488,17.76523],[76.48652,17.71358],[76.48659,17.66155],[76.41561,17.60431],[76.33086,17.46872],[76.37153,17.4341],[76.38171,17.31172],[76.22917,17.36301],[76.11996,17.37007],[75.93159,17.32197],[75.89432,17.40292],[75.77995,17.37683],[75.63468,17.47651],[75.58469,17.34963],[75.65739,17.27069],[75.62834,17.18928],[75.67389,17.11369],[75.66898,16.97766],[75.51065,16.94733],[75.46783,16.98524],[75.28311,16.95524],[75.26705,16.86247],[75.18186,16.84374],[75.09075,16.95064],[74.99259,16.95146],[74.96287,16.87942],[74.90306,16.86241],[74.91203,16.7883],[74.68877,16.71489],[74.6313,16.57831],[74.56843,16.55445],[74.54427,16.63407],[74.33986,16.54825],[74.26427,16.53936],[74.33806,16.40125],[74.31843,16.32588],[74.50509,16.22265],[74.48045,16.14527],[74.37226,16.07692],[74.46484,16.0421],[74.43203,15.95338],[74.34579,15.84959],[74.36893,15.78648],[74.28923,15.73953],[74.16212,15.75075],[74.11652,15.65308],[74.02811,15.60433],[73.97592,15.62887],[73.94515,15.74126],[73.88226,15.74929],[73.68072,15.72057],[73.32871,15.60794],[72.98859,16.57559],[72.71294,17.97077],[72.60935,19.26366],[72.53789,20.1498]]]}},india_puducherry:{type:"Feature",id:"india_puducherry",properties:{name:"Puducherry"},geometry:{type:"Polygon",coordinates:[[[79.87782,12.04973],[79.84726,11.95536],[79.83593,11.90229],[79.81979,11.85761],[79.81464,11.79006],[79.79645,11.7736],[79.77036,11.77191],[79.74564,11.78065],[79.6804,11.7988],[79.61655,11.82434],[79.58702,11.88549],[79.65672,11.93152],[79.64745,11.9594],[79.6423,12.0138],[79.66599,12.03865],[79.72813,12.04201],[79.79885,12.0457],[79.8452,12.05644],[79.87782,12.04973]]]}},india_tamilnadu:{type:"Feature",id:"india_tamilnadu",properties:{},geometry:{type:"Polygon",coordinates:[[[76.23882,11.52666],[76.42497,11.62329],[76.48321,11.69182],[76.56305,11.62046],[76.8262,11.60485],[76.90977,11.79343],[77.01458,11.81306],[77.11315,11.77337],[77.29576,11.80871],[77.33679,11.76902],[77.42332,11.77259],[77.49513,11.94251],[77.60217,11.93627],[77.67932,11.97287],[77.77447,12.12033],[77.73432,12.17555],[77.60853,12.20409],[77.51993,12.19264],[77.52722,12.27746],[77.61553,12.36799],[77.63575,12.48605],[77.58743,12.51473],[77.60006,12.6661],[77.74108,12.67162],[77.79267,12.74643],[77.81099,12.8303],[77.93327,12.8876],[77.99036,12.80553],[78.08636,12.80344],[78.23196,12.76495],[78.2273,12.71513],[78.36824,12.61165],[78.54754,12.68569],[78.62559,12.9194],[78.61355,12.97872],[78.70231,13.05633],[78.80801,13.07774],[78.97973,13.0764],[79.15278,13.00727],[79.1889,13.08443],[79.25625,13.13661],[79.34679,13.13482],[79.45292,13.33852],[79.53513,13.33423],[79.58006,13.24544],[79.68442,13.25659],[79.92572,13.33598],[79.96184,13.45149],[80.06933,13.53757],[80.15229,13.4787],[80.25978,13.44748],[80.68273,13.45353],[80.58546,12.88895],[80.57389,12.78634],[80.43092,12.33305],[80.32877,12.14],[80.20563,11.84284],[79.85031,11.95606],[79.74742,12.0054],[79.69629,11.95142],[79.76493,11.85315],[80.17499,11.74816],[80.13891,11.5158],[80.22104,11.03359],[80.22222,10.98402],[79.85413,10.97539],[79.73705,10.98906],[79.70405,10.91904],[79.85166,10.82788],[80.22599,10.82479],[80.03964,10.09642],[79.66744,9.97318],[79.55982,9.92323],[79.37812,9.6665],[79.42037,9.35343],[79.56652,9.25796],[79.57134,9.08722],[79.49634,8.89762],[79.37403,8.97879],[79.06914,9.02225],[78.73928,8.93257],[78.54484,8.84743],[78.46298,8.3509],[78.36123,8.16045],[78.10363,8.04096],[77.66766,7.85864],[76.92132,8.09605],[77.09077,8.2973],[77.14974,8.32192],[77.20618,8.47859],[77.27872,8.56521],[77.21552,8.64836],[77.19607,8.74588],[77.25798,8.83758],[77.14986,9.01008],[77.26714,9.15394],[77.28844,9.27469],[77.33693,9.40901],[77.3997,9.49683],[77.3042,9.59951],[77.27684,9.57498],[77.16816,9.61495],[77.24656,9.80841],[77.21305,9.87549],[77.26184,10.03015],[77.28042,10.20721],[77.17683,10.35777],[77.06496,10.29751],[76.98194,10.22077],[76.82944,10.30749],[76.81746,10.43869],[76.82995,10.58498],[76.8973,10.77096],[76.81746,10.86195],[76.64932,10.92395],[76.73718,11.04749],[76.72765,11.19388],[76.44934,11.20462],[76.52349,11.27236],[76.53826,11.35167],[76.39063,11.42794],[76.25772,11.47343],[76.23882,11.52666]]]}},india_telengana:{type:"Feature",id:"india_telengana",properties:{},geometry:{type:"Polygon",coordinates:[[[77.23521,16.47123],[77.29413,16.47453],[77.37516,16.48768],[77.37501,16.50885],[77.41861,16.51735],[77.42586,16.57007],[77.46147,16.58589],[77.45871,16.61229],[77.47627,16.64839],[77.43775,16.64241],[77.42132,16.66752],[77.46657,16.6772],[77.47337,16.71709],[77.42692,16.72829],[77.44309,16.76259],[77.4748,16.78164],[77.45754,16.82843],[77.46322,16.84476],[77.45223,16.91995],[77.48061,16.97751],[77.478,17.00152],[77.50069,17.01255],[77.49527,17.04601],[77.46328,17.11129],[77.40575,17.12751],[77.3772,17.14285],[77.36157,17.16669],[77.37179,17.19944],[77.39294,17.1981],[77.40662,17.2372],[77.45894,17.28058],[77.43826,17.29144],[77.45747,17.34038],[77.45274,17.37335],[77.50349,17.35735],[77.52471,17.36431],[77.53972,17.40645],[77.53911,17.44295],[77.57779,17.43051],[77.60849,17.44332],[77.61732,17.47261],[77.65946,17.48011],[77.69188,17.47463],[77.6912,17.50865],[77.66304,17.5217],[77.59762,17.53374],[77.59603,17.56309],[77.55361,17.55007],[77.52751,17.57308],[77.49462,17.56675],[77.44541,17.58272],[77.45732,17.63263],[77.45138,17.69052],[77.49398,17.7153],[77.53999,17.72825],[77.56532,17.74838],[77.55654,17.76872],[77.50997,17.78724],[77.51604,17.80424],[77.55572,17.81934],[77.5709,17.86625],[77.6208,17.9031],[77.61974,17.93865],[77.65529,17.97047],[77.64737,17.99934],[77.5862,18.01459],[77.55377,18.03572],[77.54914,18.06475],[77.59821,18.0861],[77.59705,18.15205],[77.57179,18.19195],[77.58611,18.21875],[77.57345,18.24294],[77.60614,18.28059],[77.57018,18.29238],[77.56676,18.31792],[77.51948,18.34914],[77.54937,18.3875],[77.56007,18.43522],[77.59709,18.54762],[77.64035,18.55386],[77.65775,18.5271],[77.71216,18.55431],[77.73669,18.55476],[77.74829,18.60515],[77.72956,18.64262],[77.73268,18.67607],[77.74963,18.6899],[77.78664,18.6841],[77.83749,18.80764],[77.90751,18.8295],[77.90895,18.86137],[77.88264,18.86984],[77.86524,18.91043],[77.82421,18.9131],[77.83714,18.95414],[77.79611,18.95146],[77.80057,18.98447],[77.75106,18.98357],[77.74081,19.03041],[77.74304,19.06118],[77.77693,19.07322],[77.78942,19.10534],[77.83179,19.09195],[77.81484,19.13745],[77.84205,19.18294],[77.82822,19.19008],[77.85097,19.25743],[77.88398,19.25832],[77.88442,19.27928],[77.84562,19.28597],[77.84428,19.30426],[77.89602,19.31987],[77.92412,19.3444],[77.96916,19.31095],[78.00172,19.29846],[78.02938,19.27304],[78.03473,19.2436],[78.1101,19.24851],[78.1333,19.232],[78.16675,19.2436],[78.16675,19.28106],[78.18057,19.33369],[78.16318,19.3551],[78.17121,19.39747],[78.20778,19.43583],[78.23543,19.43182],[78.25684,19.4559],[78.29564,19.46794],[78.2787,19.5393],[78.29475,19.57365],[78.29475,19.60621],[78.27111,19.65661],[78.26933,19.69184],[78.29966,19.69273],[78.32909,19.71548],[78.3514,19.78327],[78.3224,19.84125],[78.2778,19.85151],[78.27921,19.88196],[78.3679,19.8814],[78.38128,19.83858],[78.41205,19.8252],[78.45978,19.81851],[78.47762,19.79531],[78.50973,19.82386],[78.5686,19.8136],[78.58734,19.8194],[78.67966,19.79175],[78.70018,19.769],[78.72203,19.78149],[78.76842,19.7806],[78.79116,19.76008],[78.82774,19.76097],[78.84691,19.69898],[78.84245,19.65839],[78.87457,19.65705],[78.89954,19.66954],[78.9379,19.66553],[78.95262,19.65125],[78.94637,19.61914],[78.97626,19.56384],[79.00213,19.54198],[79.03513,19.54733],[79.08018,19.53261],[79.08821,19.51477],[79.12389,19.50318],[79.1725,19.46081],[79.2064,19.46973],[79.19034,19.49381],[79.22023,19.5286],[79.23361,19.57945],[79.22736,19.61468],[79.35492,19.56339],[79.39729,19.53529],[79.42494,19.53529],[79.45394,19.49961],[79.4972,19.52013],[79.5317,19.55241],[79.55367,19.52413],[79.60249,19.51309],[79.61596,19.55941],[79.63608,19.57639],[79.71198,19.58528],[79.75713,19.60733],[79.81825,19.57293],[79.82378,19.55743],[79.87599,19.5041],[79.92536,19.49855],[79.97171,19.42013],[79.97469,19.38922],[79.94937,19.29163],[79.9293,19.24996],[79.92636,19.20252],[79.94349,19.16387],[79.88262,19.13295],[79.85699,19.09508],[79.8741,19.04152],[79.92544,19.05312],[79.93945,19.0406],[79.9397,18.98616],[79.95302,18.96934],[79.95979,18.85795],[79.91056,18.82565],[79.94712,18.78372],[79.99276,18.76905],[80.03276,18.74654],[80.10826,18.68928],[80.24684,18.70149],[80.27513,18.72272],[80.30656,18.68345],[80.33809,18.59903],[80.379,18.60937],[80.38851,18.5972],[80.45022,18.62656],[80.48858,18.62656],[80.514,18.61318],[80.53184,18.58598],[80.59562,18.54896],[80.63264,18.51863],[80.65093,18.47224],[80.6991,18.43612],[80.74281,18.32194],[80.74459,18.30231],[80.7883,18.24968],[80.73344,18.21891],[80.73478,18.17163],[80.79811,18.16628],[80.81774,18.18724],[80.81729,18.22515],[80.85922,18.22605],[80.84807,18.1975],[80.86189,18.13283],[80.9007,18.13461],[80.95422,18.16717],[80.9725,18.14353],[80.94931,18.12302],[80.94396,18.08109],[80.96225,18.03158],[80.98455,17.92276],[80.99436,17.91428],[81.00417,17.83846],[81.03227,17.78985],[81.07375,17.78628],[81.08891,17.81081],[81.15938,17.85273],[81.19194,17.84694],[81.25394,17.81215],[81.40915,17.80501],[81.47025,17.8233],[81.48096,17.80278],[81.5541,17.81616],[81.56882,17.82776],[81.61119,17.81527],[81.64286,17.83935],[81.66293,17.87682],[81.68835,17.88485],[81.70307,17.86121],[81.75838,17.89332],[81.79272,17.85273],[81.78246,17.83177],[81.72939,17.81928],[81.68478,17.77067],[81.62323,17.76264],[81.5764,17.72607],[81.57105,17.68771],[81.50281,17.59003],[81.52377,17.57264],[81.50147,17.53919],[81.49345,17.44865],[81.44171,17.38175],[81.41584,17.36168],[81.37168,17.35722],[81.32262,17.38933],[81.28917,17.33759],[81.26732,17.3202],[81.19016,17.32733],[81.17053,17.29656],[81.18035,17.25463],[81.16295,17.23278],[81.11835,17.22475],[81.02603,17.18684],[80.99124,17.1797],[80.93058,17.20513],[80.90516,17.20111],[80.91318,17.14581],[80.87037,17.14625],[80.8552,17.11146],[80.86412,17.09585],[80.85877,17.05081],[80.82309,17.03787],[80.72586,17.06463],[80.68393,17.06865],[80.65673,17.08782],[80.56039,17.13822],[80.51936,17.10834],[80.49616,17.10789],[80.48234,17.05036],[80.42034,17.02494],[80.39001,17.07623],[80.36682,17.0566],[80.38778,17.0071],[80.35835,16.97052],[80.44264,16.9451],[80.48769,16.91745],[80.49126,16.94822],[80.53184,16.95001],[80.59027,16.91165],[80.5867,16.87374],[80.56485,16.86883],[80.55593,16.81843],[80.6041,16.78766],[80.56262,16.76268],[80.51088,16.76982],[80.45647,16.78989],[80.45245,16.81531],[80.41856,16.84252],[80.37306,16.8113],[80.35879,16.85501],[80.3191,16.87106],[80.31553,16.91254],[80.28877,16.97677],[80.26201,17.01066],[80.23569,17.00219],[80.19555,17.01825],[80.18217,17.04501],[80.134,16.98524],[80.08405,16.96339],[80.04569,16.96517],[80.03722,16.93663],[80.00957,16.90719],[79.99173,16.86303],[80.0332,16.85233],[80.04168,16.82602],[80.07093,16.81323],[80.054,16.74194],[80.02722,16.71251],[80.00576,16.70857],[79.95306,16.63621],[79.90723,16.63408],[79.88555,16.68642],[79.84286,16.70561],[79.81796,16.69098],[79.79256,16.72485],[79.74673,16.72106],[79.72286,16.68966],[79.68544,16.69755],[79.6621,16.68835],[79.63566,16.6594],[79.60613,16.67239],[79.53884,16.63046],[79.49421,16.63408],[79.44409,16.61796],[79.41773,16.57986],[79.37802,16.58412],[79.31162,16.57554],[79.27926,16.5816],[79.24543,16.57009],[79.24388,16.53515],[79.22091,16.51631],[79.21526,16.4846],[79.23202,16.46035],[79.21112,16.44396],[79.21143,16.35493],[79.23438,16.32518],[79.22111,16.23251],[79.1593,16.20893],[79.12305,16.23187],[79.09802,16.2236],[79.05373,16.23827],[79.01236,16.24173],[78.98352,16.21074],[78.92807,16.19871],[78.9049,16.17711],[78.92481,16.13259],[78.92138,16.10307],[78.88876,16.0879],[78.87606,16.13902],[78.83228,16.13919],[78.8419,16.08707],[78.82164,16.05227],[78.78267,16.02125],[78.73718,16.0097],[78.68277,16.03346],[78.64311,16.08312],[78.59917,16.08361],[78.55814,16.04517],[78.45394,16.07503],[78.40727,16.0756],[78.36075,16.04605],[78.32341,16.033],[78.29785,16.01169],[78.2682,16.02857],[78.25445,16.01627],[78.2507,15.96993],[78.20995,15.9197],[78.17371,15.89569],[78.17153,15.85511],[78.13252,15.8549],[78.10755,15.83401],[78.06997,15.85048],[78.03641,15.90188],[78.00803,15.86506],[77.97903,15.87982],[77.93428,15.88216],[77.89376,15.90154],[77.8616,15.88138],[77.80554,15.87083],[77.72205,15.89199],[77.689,15.87914],[77.6536,15.88393],[77.61152,15.91691],[77.58504,15.91532],[77.51178,15.92828],[77.52058,15.95112],[77.51562,16.00803],[77.49612,16.03679],[77.50848,16.07885],[77.49242,16.12134],[77.48889,16.16443],[77.50036,16.1925],[77.49303,16.25534],[77.59655,16.31743],[77.58991,16.33381],[77.54011,16.35849],[77.52418,16.3753],[77.4865,16.38299],[77.41673,16.36775],[77.37791,16.38517],[77.35761,16.3815],[77.28927,16.408],[77.26056,16.45344],[77.23521,16.47123]]]}},IDN:{type:"Feature",id:"IDN",properties:{},geometry:{type:"Polygon",coordinates:[[[109.538,1.92671],[109.58606,1.79192],[109.68554,1.78179],[109.66224,1.61881],[109.82759,1.48148],[109.93117,1.42466],[109.97919,1.29865],[110.09758,1.19756],[110.1922,1.18303],[110.30096,0.99575],[110.39497,0.99668],[110.49064,0.87637],[110.59486,0.858],[110.85815,0.94998],[110.9055,1.02835],[111.19759,1.06475],[111.22607,1.08799],[111.40504,1.0094],[111.48916,1.03442],[111.52219,0.95868],[111.66704,1.04281],[111.82599,0.98538],[111.934,1.10284],[112.13391,1.13752],[112.22581,1.39272],[112.20003,1.43709],[112.5171,1.57395],[112.77536,1.56153],[112.87744,1.58118],[113.05767,1.55877],[113.106,1.44495],[113.35493,1.35908],[113.41908,1.28549],[113.53549,1.32127],[113.63068,1.21597],[113.81508,1.30294],[113.85093,1.38715],[113.97573,1.45005],[114.14945,1.46149],[114.2027,1.4213],[114.41581,1.51111],[114.52646,1.44179],[114.58583,1.44665],[114.61498,1.57508],[114.71115,1.67148],[114.69469,1.81063],[114.74372,1.86954],[114.87834,1.91463],[114.80632,2.02438],[114.78024,2.14454],[114.79949,2.24936],[114.90604,2.25697],[114.95039,2.35132],[115.09508,2.41123],[115.13965,2.4776],[115.23743,2.50599],[115.09278,2.69409],[115.14115,2.74432],[115.11387,2.83327],[115.15001,2.90895],[115.24912,2.9667],[115.48328,3.01964],[115.56423,3.17109],[115.51617,3.26111],[115.53779,3.36201],[115.6344,3.45571],[115.57652,3.6094],[115.57965,3.74752],[115.61864,3.84247],[115.58177,3.88792],[115.64991,3.98828],[115.70731,4.19935],[115.8296,4.24118],[115.8779,4.39102],[116.00607,4.34818],[116.07901,4.27643],[116.18028,4.38255],[116.34851,4.39138],[116.43275,4.32567],[116.53602,4.37566],[116.61942,4.33622],[116.89887,4.36704],[116.97351,4.34488],[117.28899,4.31595],[117.52934,4.1615],[117.8992,4.16585],[117.95861,4.19058],[118.26478,4.09696],[127.3,5.2],[129,2.7],[141,-2.4],[141,-6.3],[140.83,-6.7],[141.02,-6.95],[141.02,-9.5],[128.5,-9.5],[127.3,-8.2],[125,-8.5],[123.96,-9.2],[124.11,-9.42],[124.22,-9.37],[124.269,-9.4],[124.287,-9.5],[124.358,-9.48564],[124.355,-9.43281],[124.383,-9.361],[124.444,-9.31899],[124.48,-9.15],[124.95,-8.9],[124.94064,-9.03565],[124.99695,-9.06413],[125.11368,-8.98275],[125.18234,-9.03293],[125.18234,-9.17396],[124.98459,-9.19429],[124.99283,-9.28646],[125.04913,-9.33254],[125.16,-9.7],[123,-11.4],[100,-7],[93.5,6.3],[96.6,6.1],[103,1.4],[103.75,1.14],[103.9,1.2],[104.5,1.3],[105,3],[108,5.1],[109.64501,2.08141],[109.62041,1.98321],[109.538,1.92671]]]}},"Universitas-Negeri-Makassar":{type:"Feature",id:"Universitas-Negeri-Makassar",properties:{},geometry:{type:"Polygon",coordinates:[[[119.4292,-4.96157],[119.47318,-4.96588],[119.51547,-4.97866],[119.55445,-4.9994],[119.58862,-5.02733],[119.61666,-5.06135],[119.63751,-5.10017],[119.65035,-5.14229],[119.6547,-5.18611],[119.65039,-5.22992],[119.63757,-5.27205],[119.61674,-5.31089],[119.5887,-5.34493],[119.55452,-5.37286],[119.51553,-5.39362],[119.47321,-5.40641],[119.4292,-5.41072],[119.38519,-5.40641],[119.34288,-5.39362],[119.30388,-5.37286],[119.26971,-5.34493],[119.24167,-5.31089],[119.22084,-5.27205],[119.20802,-5.22992],[119.2037,-5.18611],[119.20805,-5.14229],[119.22089,-5.10017],[119.24174,-5.06135],[119.26979,-5.02733],[119.30396,-4.9994],[119.34293,-4.97866],[119.38522,-4.96588],[119.4292,-4.96157]]]}},"University-Muhammadiyah-Surakarta":{type:"Feature",id:"University-Muhammadiyah-Surakarta",properties:{},geometry:{type:"Polygon",coordinates:[[[110.76899,-7.33303],[110.81316,-7.33735],[110.85564,-7.35012],[110.89479,-7.37086],[110.92912,-7.39878],[110.9573,-7.4328],[110.97825,-7.47162],[110.99116,-7.51374],[110.99553,-7.55755],[110.9912,-7.60137],[110.97833,-7.64351],[110.95741,-7.68234],[110.92924,-7.71638],[110.8949,-7.74433],[110.85572,-7.76509],[110.81321,-7.77787],[110.76899,-7.78219],[110.72477,-7.77787],[110.68225,-7.76509],[110.64307,-7.74433],[110.60873,-7.71638],[110.58056,-7.68234],[110.55964,-7.64351],[110.54677,-7.60137],[110.54244,-7.55755],[110.54681,-7.51374],[110.55973,-7.47162],[110.58067,-7.4328],[110.60885,-7.39878],[110.64318,-7.37086],[110.68233,-7.35012],[110.72481,-7.33735],[110.76899,-7.33303]]]}},iran:{type:"Feature",properties:{},id:"iran",geometry:{type:"Polygon",coordinates:[[[43.96643,39.42704],[44.36828,39.45104],[44.3518,39.57183],[44.62479,39.89048],[45.02746,39.54218],[45.50433,39.06259],[45.9613,38.92951],[46.50828,38.94537],[47.3236,39.44892],[48.00512,39.77374],[48.4411,39.3641],[48.19977,39.25565],[48.3728,39.10236],[48.30414,38.906],[48.10427,38.85269],[48.67649,38.48336],[49.32106,38.48734],[53.94287,37.48358],[54.43724,37.47487],[54.70691,37.69815],[55.26122,38.10864],[55.91695,38.16284],[56.239,38.26407],[57.28683,38.36073],[57.57896,37.98007],[58.01879,37.91821],[58.41395,37.7018],[58.72191,37.76204],[59.4218,37.59896],[59.63834,37.17964],[60.08422,37.11653],[60.37835,36.70792],[61.23424,36.72619],[61.37598,35.51361],[60.99608,34.29808],[60.63333,34.05914],[60.68847,33.68779],[61.01753,33.53868],[60.68833,33.11604],[60.98034,32.20735],[60.95577,31.5572],[61.7915,31.4486],[61.89696,31.1188],[61.90736,30.81546],[60.99448,29.85451],[61.42455,29.4109],[61.97206,28.63509],[62.8889,28.33884],[62.90715,27.31879],[63.29659,27.35528],[63.40209,27.17648],[63.2895,26.57212],[62.5891,26.47058],[62.29032,26.24108],[61.94822,26.12877],[61.62376,24.73837],[60.55845,24.98624],[58.03141,25.27164],[57.11051,25.5495],[56.54686,26.57238],[55.4988,26.01213],[55.28816,25.6474],[54.37853,25.61961],[53.90126,26.2239],[53.08217,26.52934],[51.26311,27.61327],[50.77328,28.14996],[50.48217,27.81479],[50.17456,27.78564],[49.93835,27.81965],[49.88342,27.975],[49.92187,28.18825],[50.33305,28.67232],[49.4197,29.70202],[48.58632,29.62242],[47.9928,30.44356],[47.98907,30.97004],[47.65869,30.98703],[47.65817,31.39276],[47.76361,31.76875],[47.30962,32.37144],[45.91075,33.02471],[46.06882,33.24741],[45.37024,33.9384],[45.40649,34.48845],[45.61523,34.74162],[45.84765,35.07793],[46.0613,35.21211],[45.91186,35.63945],[46.06018,35.76881],[45.75644,35.74371],[45.3092,35.9317],[45.19226,36.33283],[44.97802,36.46548],[44.95056,36.68605],[44.80224,36.7609],[44.83543,36.92589],[44.74731,37.02887],[44.71435,37.2828],[44.57153,37.38762],[44.51099,37.70537],[44.17537,37.86225],[44.29736,38.30899],[44.10461,39.10449],[43.93976,39.34825],[43.96643,39.42704]]]}},japan:{type:"Feature",id:"japan",properties:{},geometry:{type:"Polygon",coordinates:[[[141.11938,45.69083],[142.28497,45.56863],[145.39307,44.48867],[145.57983,44.11125],[145.27222,43.79291],[145.47821,43.46289],[145.68695,43.4589],[145.91217,43.39108],[145.44903,42.69934],[143.91094,41.8376],[142.48272,39.3181],[142.1751,38.15265],[141.38409,35.69383],[140.94463,35.21056],[140.55908,32.1198],[139.38457,31.87843],[138.98907,33.1752],[138.01025,34.29807],[135.99976,33.17434],[133.53882,32.71336],[132.48516,32.06483],[131.56128,31.04352],[131.03497,29.53613],[129.94629,27.50827],[127.78301,25.4442],[126.47461,25.42343],[125.86487,24.52713],[124.92657,23.88678],[123.37921,23.82053],[122.67883,24.31456],[122.7293,24.64795],[124.67834,25.02588],[125.36602,25.52354],[126.24493,26.35342],[127.56329,27.13828],[128.57403,28.73003],[128.74981,31.46703],[128.36426,32.62087],[128.92559,33.76174],[129.21021,34.62417],[129.56177,34.84086],[136.69739,37.9312],[139.1209,38.85762],[139.04297,42.04929],[140.13165,43.58114],[140.5711,45.64549],[141.11938,45.69083]]]}},malaysia:{type:"Feature",id:"malaysia",properties:{},geometry:{type:"MultiPolygon",coordinates:[[[[109.538,1.92671],[109.62041,1.98321],[109.64501,2.08141],[113.8,4.8],[114.26015,4.50701],[114.33278,4.34889],[114.31645,4.26363],[114.45418,4.24183],[114.49579,4.14668],[114.6492,4.00624],[114.80762,4.14929],[114.85775,4.26957],[114.87758,4.42656],[114.82955,4.42966],[114.80229,4.67536],[114.85851,4.79751],[114.97133,4.80824],[115.02238,4.74977],[115.09879,4.4685],[115.15547,4.38302],[115.24582,4.34118],[115.28924,4.60384],[115.2375,4.79584],[115.15038,4.87204],[115.15825,5.02512],[115,5.3],[116.9,7.6],[117.5,7.4],[119.35011,5.53088],[119.43909,5.11578],[118.83773,4.45269],[118.26478,4.09696],[117.95861,4.19058],[117.8992,4.16585],[117.52934,4.1615],[117.28899,4.31595],[116.97351,4.34488],[116.89887,4.36704],[116.61942,4.33622],[116.53602,4.37566],[116.43275,4.32567],[116.34851,4.39138],[116.18028,4.38255],[116.07901,4.27643],[116.00607,4.34818],[115.8779,4.39102],[115.8296,4.24118],[115.70731,4.19935],[115.64991,3.98828],[115.58177,3.88792],[115.61864,3.84247],[115.57965,3.74752],[115.57652,3.6094],[115.6344,3.45571],[115.53779,3.36201],[115.51617,3.26111],[115.56423,3.17109],[115.48328,3.01964],[115.24912,2.9667],[115.15001,2.90895],[115.11387,2.83327],[115.14115,2.74432],[115.09278,2.69409],[115.23743,2.50599],[115.13965,2.4776],[115.09508,2.41123],[114.95039,2.35132],[114.90604,2.25697],[114.79949,2.24936],[114.78024,2.14454],[114.80632,2.02438],[114.87834,1.91463],[114.74372,1.86954],[114.69469,1.81063],[114.71115,1.67148],[114.61498,1.57508],[114.58583,1.44665],[114.52646,1.44179],[114.41581,1.51111],[114.2027,1.4213],[114.14945,1.46149],[113.97573,1.45005],[113.85093,1.38715],[113.81508,1.30294],[113.63068,1.21597],[113.53549,1.32127],[113.41908,1.28549],[113.35493,1.35908],[113.106,1.44495],[113.05767,1.55877],[112.87744,1.58118],[112.77536,1.56153],[112.5171,1.57395],[112.20003,1.43709],[112.22581,1.39272],[112.13391,1.13752],[111.934,1.10284],[111.82599,0.98538],[111.66704,1.04281],[111.52219,0.95868],[111.48916,1.03442],[111.40504,1.0094],[111.22607,1.08799],[111.19759,1.06475],[110.9055,1.02835],[110.85815,0.94998],[110.59486,0.858],[110.49064,0.87637],[110.39497,0.99668],[110.30096,0.99575],[110.1922,1.18303],[110.09758,1.19756],[109.97919,1.29865],[109.93117,1.42466],[109.82759,1.48148],[109.66224,1.61881],[109.68554,1.78179],[109.58606,1.79192],[109.538,1.92671]]],[[[99.45833,6.30667],[99.51167,6.48167],[99.68908,6.47146],[99.91691,6.5233],[100.07588,6.40615],[100.15906,6.48065],[100.17157,6.69376],[100.32605,6.6597],[100.36648,6.53967],[100.4962,6.52128],[100.66237,6.45103],[100.73937,6.49207],[100.81258,6.44219],[100.83515,6.29654],[100.90398,6.23379],[100.98414,6.27884],[101.0943,6.26044],[101.12667,6.19264],[101.0868,5.9109],[101.03707,5.91804],[100.98946,5.78393],[101.1192,5.67031],[101.25999,5.71155],[101.27615,5.81155],[101.39691,5.87241],[101.48454,5.86993],[101.58131,5.93436],[101.66236,5.86871],[101.69082,5.75576],[101.79332,5.75066],[101.94402,5.87247],[101.94265,5.98109],[102.05204,6.0785],[102.08029,6.22537],[102.2,6.5],[103.6,5.8],[104.8,2.5],[104.5,1.5],[104.31571,1.28352],[104.12518,1.27582],[104.07647,1.43092],[103.89786,1.42794],[103.81267,1.47847],[103.67389,1.42814],[103.56667,1.1955],[103,1.325],[99,4.5],[99.45833,6.30667]]]]}},MNG:{type:"Feature",id:"MNG",properties:{name:"Mongolia"},geometry:{type:"Polygon",coordinates:[[[87.75126,49.2972],[88.80557,49.47052],[90.71367,50.33181],[92.23471,50.80217],[93.10422,50.49529],[94.14757,50.48054],[94.81595,50.01343],[95.81403,49.97747],[97.25973,49.72606],[98.23176,50.4224],[97.82574,51.011],[98.86149,52.04737],[99.98173,51.63401],[100.88948,51.51686],[102.06522,51.25992],[102.25591,50.51056],[103.67655,50.08997],[104.62155,50.27533],[105.88659,50.40602],[106.8888,50.2743],[107.86818,49.79371],[108.47517,49.28255],[109.40245,49.29296],[110.66201,49.13013],[111.58123,49.37797],[112.89774,49.54357],[114.36246,50.2483],[114.96211,50.14025],[115.4857,49.80518],[116.6788,49.88853],[116.1918,49.1346],[115.48528,48.13538],[115.74284,47.72655],[116.30895,47.85341],[117.29551,47.69771],[118.06414,48.06673],[118.86657,47.74706],[119.77282,47.04806],[119.66327,46.69268],[118.87433,46.80541],[117.4217,46.67273],[116.71787,46.3882],[115.9851,45.72724],[114.46033,45.33982],[113.46391,44.80889],[112.43606,45.01165],[111.87331,45.10208],[111.34838,44.45744],[111.66774,44.07318],[111.82959,43.74312],[111.12968,43.40683],[110.4121,42.87123],[109.2436,42.51945],[107.74477,42.48152],[106.12932,42.13433],[104.96499,41.59741],[104.52228,41.90835],[103.31228,41.90747],[101.83304,42.51487],[100.84587,42.6638],[99.51582,42.52469],[97.45176,42.74889],[96.3494,42.72563],[95.76246,43.31945],[95.30688,44.24133],[94.68893,44.35233],[93.48073,44.97547],[92.13389,45.11508],[90.94554,45.28607],[90.58577,45.71972],[90.97081,46.88815],[90.28083,47.69355],[88.8543,48.06908],[88.01383,48.59946],[87.75126,49.2972]]]}},MMR:{type:"Feature",id:"MMR",properties:{name:"Myanmar"},geometry:{type:"Polygon",coordinates:[[[92.10937,20.85881],[92.3291,21.49396],[92.68066,21.28937],[92.63672,22.08564],[92.98828,22.06528],[93.18604,22.22809],[93.14209,23.09994],[93.38379,23.22115],[93.36182,24.1267],[94.19678,23.92601],[94.70215,25.04579],[94.57031,25.26457],[95.20752,26.03704],[95.05371,26.49024],[97.66846,28.51697],[98.65723,27.50827],[98.56934,25.85922],[97.62451,24.8665],[97.73438,23.88584],[98.83301,24.14675],[98.85498,23.18076],[99.49219,23.05952],[99.1626,22.04491],[100.0415,21.96342],[100.32715,21.49396],[101.09619,21.71868],[101.16211,21.41216],[99.99756,20.36523],[97.91016,19.49766],[97.53662,18.29195],[98.83301,16.21467],[98.50342,15.32657],[98.21777,15.11455],[98.65723,14.24309],[99.18457,13.66734],[99.22852,12.85465],[99.66797,11.65224],[98.4375,9.90392],[97.77832,14.34955],[97.00928,16.80454],[95.42725,15.55954],[94.021,16.04581],[94.21875,18.0832],[92.10937,20.85881]]]}},"Institute-of-Crisis-Management-Studies":{type:"Feature",id:"Institute-of-Crisis-Management-Studies",properties:{},geometry:{type:"Polygon",coordinates:[[[85.34173,27.95228],[85.39133,27.94796],[85.43901,27.93515],[85.48293,27.91436],[85.5214,27.88639],[85.55293,27.85231],[85.57632,27.81345],[85.59067,27.77129],[85.59544,27.72747],[85.59047,27.68367],[85.57595,27.64156],[85.55245,27.60278],[85.52087,27.56879],[85.48245,27.5409],[85.43864,27.52019],[85.39113,27.50743],[85.34173,27.50313],[85.29233,27.50743],[85.24482,27.52019],[85.20102,27.5409],[85.16259,27.56879],[85.13102,27.60278],[85.10752,27.64156],[85.09299,27.68367],[85.08802,27.72747],[85.09279,27.77129],[85.10715,27.81345],[85.13054,27.85231],[85.16207,27.88639],[85.20053,27.91436],[85.24445,27.93515],[85.29213,27.94796],[85.34173,27.95228]]]}},"Kathmandu-University":{type:"Feature",id:"Kathmandu-University",properties:{},geometry:{type:"Polygon",coordinates:[[[85.53873,27.84494],[85.58828,27.84062],[85.63591,27.82781],[85.67979,27.80702],[85.71822,27.77905],[85.74972,27.74497],[85.77308,27.70611],[85.78742,27.66395],[85.79219,27.62013],[85.78722,27.57633],[85.77272,27.53422],[85.74924,27.49543],[85.7177,27.46145],[85.67931,27.43356],[85.63554,27.41285],[85.58808,27.40009],[85.53873,27.39578],[85.48938,27.40009],[85.44192,27.41285],[85.39815,27.43356],[85.35976,27.46145],[85.32822,27.49543],[85.30474,27.53422],[85.29024,27.57633],[85.28527,27.62013],[85.29004,27.66395],[85.30438,27.70611],[85.32774,27.74497],[85.35924,27.77905],[85.39767,27.80702],[85.44155,27.82781],[85.48918,27.84062],[85.53873,27.84494]]]}},NPL:{type:"Feature",id:"NPL",properties:{name:"Nepal"},geometry:{type:"Polygon",coordinates:[[[88.12044,27.87654],[88.04313,27.44582],[88.1748,26.8104],[88.06024,26.41462],[87.22747,26.3979],[86.02439,26.63098],[85.25178,26.7262],[84.67502,27.2349],[83.30425,27.36451],[81.99999,27.92548],[81.0572,28.41609],[80.08843,28.79447],[80.47672,29.72987],[81.11126,30.18348],[81.5258,30.42272],[82.32751,30.11527],[83.33711,29.46373],[83.89899,29.32023],[84.23458,28.83989],[85.01164,28.64277],[85.82332,28.20358],[86.95452,27.97426],[88.12044,27.87654]]]}},"Tribhuvan-University":{type:"Feature",id:"Tribhuvan-University",properties:{},geometry:{type:"Polygon",coordinates:[[[83.97645,28.47849],[84.0263,28.47417],[84.07421,28.46136],[84.11835,28.44057],[84.157,28.4126],[84.18869,28.37852],[84.21219,28.33965],[84.22661,28.2975],[84.23141,28.25368],[84.22641,28.20987],[84.21181,28.16777],[84.18819,28.12898],[84.15647,28.09499],[84.11785,28.06711],[84.07383,28.04639],[84.02609,28.03364],[83.97645,28.02933],[83.92682,28.03364],[83.87908,28.04639],[83.83506,28.06711],[83.79644,28.09499],[83.76471,28.12898],[83.7411,28.16777],[83.7265,28.20987],[83.7215,28.25368],[83.72629,28.2975],[83.74072,28.33965],[83.76422,28.37852],[83.7959,28.4126],[83.83456,28.44057],[83.8787,28.46136],[83.92661,28.47417],[83.97645,28.47849]]]}},north_korea:{type:"Feature",id:"north_korea",properties:{},geometry:{type:"Polygon",coordinates:[[[125,37.2],[123.5,38.4],[124.38,40.12],[124.87,40.47],[126.05,40.95],[126.6,41.6],[126.9,41.8],[127.25,41.5],[128.2,41.4],[128.3,41.56],[128.04,42.03],[128.95,42.03],[129.35,42.44],[129.69,42.44],[129.88,43],[130.2,42.9],[130.3,42.66],[130.5,42.6],[130.7,42.3],[131,39],[128.33,38.61],[128.28,38.42],[128.08,38.32],[127.14,38.32],[126.99,38.21],[126.95,38.14],[126.88,38.1],[126.82,38],[126.67,37.95],[126.69,37.84],[126.667,37.828],[126.66,37.79],[126.585,37.76],[126.474,37.81],[126.42,37.845],[126.2,37.82],[126.18,37.74],[125,37.2]]]}},"Far-Eastern-University-Institute-of-Technology":{type:"Feature",id:"Far-Eastern-University-Institute-of-Technology",properties:{},geometry:{type:"Polygon",coordinates:[[[121.02539,14.82943],[121.07071,14.82511],[121.11429,14.81231],[121.15444,14.79154],[121.18961,14.76359],[121.21847,14.72954],[121.23989,14.69069],[121.25305,14.64855],[121.25747,14.60473],[121.25296,14.56092],[121.23972,14.51881],[121.21825,14.48],[121.18938,14.44599],[121.15422,14.41808],[121.11412,14.39735],[121.07062,14.38458],[121.02539,14.38027],[120.98016,14.38458],[120.93666,14.39735],[120.89656,14.41808],[120.8614,14.44599],[120.83253,14.48],[120.81106,14.51881],[120.79782,14.56092],[120.79331,14.60473],[120.79773,14.64855],[120.81089,14.69069],[120.83232,14.72954],[120.86117,14.76359],[120.89635,14.79154],[120.93649,14.81231],[120.98007,14.82511],[121.02539,14.82943]]]}},philippines:{type:"Feature",id:"philippines",properties:{},geometry:{type:"Polygon",coordinates:[[[114.93896,8.23324],[122.01416,21.71868],[127.6062,7.39515],[125.50781,5.14566],[118.89954,4.41761],[119.49829,5.28789],[117.53174,7.39515],[114.93896,8.23324]]]}},"University-of-the-Philippines-Resilience-Institute":{type:"Feature",id:"University-of-the-Philippines-Resilience-Institute",properties:{},geometry:{type:"Polygon",coordinates:[[[121.06511,14.87964],[121.11044,14.87532],[121.15402,14.86253],[121.19418,14.84176],[121.22937,14.81381],[121.25822,14.77975],[121.27965,14.74091],[121.29282,14.69877],[121.29724,14.65495],[121.29273,14.61114],[121.27948,14.56902],[121.25801,14.53022],[121.22913,14.49621],[121.19396,14.4683],[121.15385,14.44756],[121.11035,14.4348],[121.06511,14.43049],[121.01986,14.4348],[120.97636,14.44756],[120.93625,14.4683],[120.90108,14.49621],[120.8722,14.53022],[120.85073,14.56902],[120.83748,14.61114],[120.83297,14.65495],[120.83739,14.69877],[120.85056,14.74091],[120.87199,14.77975],[120.90084,14.81381],[120.93603,14.84176],[120.97619,14.86253],[121.01977,14.87532],[121.06511,14.87964]]]}},russia:{type:"Feature",id:"russia",properties:{},geometry:{type:"MultiPolygon",coordinates:[[[[22.7311,54.32754],[20.89224,54.31253],[19.66064,54.42608],[19.88848,54.86616],[21.26845,55.19048],[22.31572,55.0153],[22.75776,54.85657],[22.65105,54.58274],[22.7311,54.32754]]],[[[-180,83],[-169,66.5],[-171,64],[-180,64],[-180,83]]],[[[180,83],[180,64.97971],[179.99281,64.97433],[178.7072,64.53493],[177.41128,64.60821],[178.313,64.07593],[178.90825,63.25197],[179.37034,62.98262],[179.48636,62.56894],[179.22825,62.3041],[177.3643,62.5219],[174.56929,61.76915],[173.68013,61.65261],[172.15,60.95],[170.6985,60.33618],[170.33085,59.88177],[168.90046,60.57355],[166.29498,59.78855],[165.84,60.16],[164.87674,59.7316],[163.53929,59.86871],[163.21711,59.21101],[162.01733,58.24328],[162.05297,57.83912],[163.19191,57.61503],[163.05794,56.15924],[162.12958,56.12219],[161.70146,55.28568],[162.11749,54.85514],[160.36877,54.34433],[160.02173,53.20257],[158.53094,52.95868],[158.23118,51.94269],[156.78979,51.01105],[156.42,51.7],[155.99182,53.15895],[155.43366,55.38103],[155.91442,56.76792],[156.75815,57.3647],[156.81035,57.83204],[158.36433,58.05575],[160.15064,59.31477],[161.87204,60.343],[163.66969,61.1409],[164.47355,62.55061],[163.25842,62.46627],[162.65791,61.6425],[160.12148,60.54423],[159.30232,61.77396],[156.72068,61.43442],[154.21806,59.75818],[155.04375,59.14495],[152.81185,58.88385],[151.26573,58.78089],[151.33815,59.50396],[149.78371,59.65573],[148.54481,59.16448],[145.48722,59.33637],[142.19782,59.03998],[138.95848,57.08805],[135.12619,54.72959],[136.70171,54.60355],[137.19342,53.97732],[138.1647,53.75501],[138.80463,54.25455],[139.90151,54.18968],[141.34531,53.08957],[141.37923,52.23877],[140.59742,51.23967],[140.51308,50.04553],[140.06193,48.44671],[138.55472,46.99965],[138.21971,46.30795],[136.86232,45.1435],[135.51535,43.989],[134.86939,43.39821],[133.53687,42.81147],[132.90627,42.79849],[132.27807,43.28456],[130.93587,42.55274],[130.78,42.22],[130.64,42.395],[130.63387,42.90302],[131.14469,42.92999],[131.28856,44.11152],[131.02519,44.96796],[131.88345,45.32116],[133.09712,45.14409],[133.76964,46.11693],[134.11235,47.21248],[134.50081,47.57845],[135.02631,48.47823],[133.3736,48.18344],[132.50669,47.78896],[130.98726,47.79013],[130.58229,48.72969],[129.39782,49.4406],[127.6574,49.76027],[127.28746,50.7398],[126.93916,51.35389],[126.5644,51.78426],[125.94635,52.7928],[125.06821,53.16105],[123.57147,53.4588],[122.24575,53.43173],[121.00308,53.2514],[120.17709,52.75389],[120.72579,52.51623],[120.7382,51.96411],[120.18208,51.64355],[119.27939,50.58292],[119.28846,50.14288],[117.87924,49.51098],[116.6788,49.88853],[115.4857,49.80518],[114.96211,50.14025],[114.36246,50.2483],[112.89774,49.54357],[111.58123,49.37797],[110.66201,49.13013],[109.40245,49.29296],[108.47517,49.28255],[107.86818,49.79371],[106.8888,50.2743],[105.88659,50.40602],[104.62158,50.27532],[103.67655,50.08997],[102.25589,50.51056],[102.06521,51.25991],[100.88948,51.51686],[99.98173,51.63401],[98.86149,52.04737],[97.82574,51.011],[98.23176,50.4224],[97.25976,49.72605],[95.81402,49.97746],[94.81595,50.01343],[94.14757,50.48054],[93.10421,50.49529],[92.23471,50.80217],[90.71367,50.33181],[88.80557,49.47052],[87.75126,49.2972],[87.35997,49.21498],[86.82936,49.82668],[85.54127,49.69286],[85.11556,50.1173],[84.41638,50.3114],[83.93511,50.88925],[83.383,51.06918],[81.94599,50.8122],[80.56845,51.38834],[80.03556,50.86475],[77.80092,53.40442],[76.52518,54.177],[76.8911,54.49052],[74.38482,53.54685],[73.42568,53.48981],[73.50852,54.03562],[72.22415,54.37665],[71.18013,54.13329],[70.86527,55.16973],[69.06817,55.38525],[68.1691,54.97039],[65.66687,54.60125],[65.17853,54.35423],[61.4366,54.00625],[60.97807,53.66499],[61.69999,52.98],[60.73999,52.71999],[60.92727,52.44755],[59.96753,51.96042],[61.588,51.27266],[61.33742,50.79907],[59.93281,50.84219],[59.64228,50.54544],[58.36332,51.06364],[56.77798,51.04355],[55.71694,50.62171],[54.53288,51.02624],[52.32872,51.71865],[50.76665,51.69276],[48.70238,50.60513],[48.57784,49.87476],[47.54948,50.4547],[46.7516,49.35601],[47.04367,49.15204],[46.46645,48.39415],[47.31524,47.71585],[48.05725,47.74377],[48.69473,47.07563],[48.59325,46.56104],[49.10116,46.39933],[48.64541,45.80629],[47.67591,45.64149],[46.68201,44.6092],[47.59094,43.66016],[47.49252,42.98658],[48.58437,41.80888],[47.98728,41.40582],[47.81567,41.15142],[47.37331,41.21973],[46.68607,41.82714],[46.40495,41.86068],[45.7764,42.09244],[45.47028,42.50278],[44.53762,42.71199],[43.93121,42.55496],[43.75599,42.74083],[42.3944,43.2203],[40.92219,43.38215],[40.07697,43.5531],[39.95501,43.435],[38.68,44.28],[37.53912,44.65721],[36.67546,45.24469],[37.40317,45.40451],[38.23295,46.24087],[37.67372,46.63657],[39.14767,47.04475],[39.1212,47.26336],[38.22354,47.10219],[38.25511,47.5464],[38.77057,47.82562],[39.73828,47.89894],[39.89562,48.23241],[39.67465,48.78382],[40.08079,49.30743],[40.06904,49.60105],[38.59499,49.92646],[38.01063,49.91566],[37.39346,50.38395],[36.62617,50.22559],[35.35612,50.5772],[35.37791,50.77394],[35.02218,51.20757],[34.22482,51.25599],[34.14198,51.56641],[34.39173,51.76888],[33.7527,52.33508],[32.71576,52.23846],[32.41206,52.28869],[32.15944,52.06125],[31.78597,52.10168],[31.54002,52.74205],[31.3052,53.074],[31.49764,53.16743],[32.30452,53.13273],[32.69364,53.35142],[32.4056,53.61805],[31.73127,53.79403],[31.79142,53.97464],[31.38447,54.15706],[30.75753,54.81177],[30.97184,55.08155],[30.87391,55.55098],[29.89629,55.78946],[29.37157,55.67009],[29.22951,55.91834],[28.17671,56.16913],[27.85528,56.75933],[27.77002,57.24426],[27.28818,57.47453],[27.71669,57.7919],[27.42015,58.72457],[28.1317,59.30083],[27.98112,59.47537],[29.1177,60.02805],[28.07,60.50352],[30.21111,61.78003],[31.13999,62.35769],[31.51609,62.86769],[30.03587,63.55281],[30.44468,64.20445],[29.54443,64.94867],[30.21765,65.80598],[29.05459,66.94429],[29.97743,67.6983],[28.44594,68.36461],[28.59193,69.06478],[35,71],[40,83],[180,83]]]]}},south_korea:{type:"Feature",id:"south_korea",properties:{},geometry:{type:"Polygon",coordinates:[[[125,33],[125,37.2],[126.18,37.74],[126.2,37.82],[126.42,37.845],[126.474,37.81],[126.585,37.76],[126.66,37.79],[126.667,37.828],[126.69,37.84],[126.67,37.95],[126.82,38],[126.88,38.1],[126.95,38.14],[126.99,38.21],[127.14,38.32],[128.08,38.32],[128.28,38.42],[128.33,38.61],[131,39],[131.3,36.6],[127.3,33],[125,33]]]}},sri_lanka:{type:"Feature",id:"sri_lanka",properties:{name:"Sri Lanka"},geometry:{type:"Polygon",coordinates:[[[81.78796,7.52306],[81.63732,6.48177],[81.21802,6.19714],[80.34836,5.96837],[79.87247,6.76346],[79.69517,8.20084],[80.1478,9.82408],[80.83882,9.26843],[81.30432,8.56421],[81.78796,7.52306]]]}},taiwan:{type:"Feature",id:"taiwan",properties:{},geometry:{type:"Polygon",coordinates:[[[119,23.5],[121.7,26],[122.5,25.5],[121.8,21.8],[120,21.5],[119,23.5]]]}},thailand_cnx:{type:"Feature",id:"thailand_cnx",properties:{},geometry:{type:"Polygon",coordinates:[[[98.4375,18.2319],[98.4375,19.2255],[99.5306,19.2255],[99.5306,18.2319],[98.4375,18.2319]]]}},thailand_full:{type:"Feature",id:"thailand_full",properties:{},geometry:{type:"Polygon",coordinates:[[[97.50366,8.39358],[97.7124,9.60075],[99.47021,11.8566],[98.05298,14.84923],[98.32764,16.15137],[97.21802,18.39623],[97.38281,19.73568],[100.2832,20.66363],[101.37085,19.69431],[101.40381,18.27109],[104.08447,18.58377],[105.76538,16.06693],[105.52368,14.15788],[102.854,13.82741],[103.00781,11.69527],[102.12891,5.81276],[101.11542,5.4875],[100.66498,6.42448],[99.13788,6.34806],[97.50366,8.39358]]]}},"al-tirana":{type:"Feature",id:"al-tirana",properties:{},geometry:{type:"Polygon",coordinates:[[[19.77796,41.36244],[19.78028,41.36267],[19.78123,41.36014],[19.78004,41.35915],[19.78099,41.35803],[19.77752,41.35682],[19.78082,41.35409],[19.77658,41.35122],[19.78029,41.34936],[19.7832,41.35026],[19.7899,41.34976],[19.79536,41.34793],[19.80046,41.3502],[19.81074,41.35213],[19.81874,41.35044],[19.82238,41.35173],[19.83428,41.35186],[19.84174,41.35434],[19.84682,41.3589],[19.84829,41.35842],[19.85095,41.36008],[19.85159,41.35903],[19.8561,41.35843],[19.85488,41.3545],[19.85784,41.35167],[19.85518,41.35228],[19.85275,41.35145],[19.85276,41.34956],[19.85151,41.34955],[19.85462,41.34419],[19.85876,41.33995],[19.8642,41.33947],[19.86465,41.33789],[19.86829,41.33772],[19.86999,41.33882],[19.87262,41.33794],[19.87259,41.33606],[19.87543,41.3355],[19.87644,41.33126],[19.87554,41.33042],[19.87232,41.33102],[19.87095,41.32999],[19.86659,41.33088],[19.86535,41.32664],[19.86164,41.32543],[19.85813,41.3214],[19.85489,41.32066],[19.85575,41.31876],[19.84532,41.314],[19.84458,41.31212],[19.85095,41.30156],[19.84975,41.29748],[19.8457,41.29559],[19.83906,41.29791],[19.82955,41.29568],[19.82738,41.29791],[19.82504,41.29827],[19.82605,41.29986],[19.82333,41.30509],[19.82032,41.30525],[19.81821,41.3037],[19.81168,41.30787],[19.81162,41.31002],[19.80709,41.31302],[19.79827,41.31487],[19.79767,41.31238],[19.79374,41.313],[19.78954,41.31035],[19.7852,41.31117],[19.78057,41.3142],[19.77976,41.31244],[19.78765,41.30887],[19.78369,41.30473],[19.77721,41.30247],[19.77515,41.30039],[19.77077,41.30363],[19.76019,41.29972],[19.75706,41.30651],[19.75854,41.30874],[19.75473,41.31208],[19.75643,41.31314],[19.75571,41.31548],[19.76586,41.3199],[19.76813,41.32266],[19.77017,41.32139],[19.76811,41.31882],[19.76922,41.31754],[19.77559,41.31854],[19.77323,41.32284],[19.77378,41.32422],[19.77893,41.32349],[19.77968,41.32518],[19.78451,41.32399],[19.78734,41.32541],[19.78321,41.33328],[19.78343,41.33578],[19.77659,41.33783],[19.78083,41.34567],[19.76839,41.35239],[19.75832,41.35489],[19.76053,41.35931],[19.75484,41.3598],[19.75767,41.36542],[19.76169,41.36185],[19.76434,41.36249],[19.76411,41.36393],[19.76775,41.36369],[19.76857,41.36459],[19.77145,41.364],[19.77204,41.36125],[19.77796,41.36244]]]}},albania:{type:"Feature",id:"albania",properties:{},geometry:{type:"Polygon",coordinates:[[[19.39087,41.86138],[19.40186,42.09007],[19.27002,42.18376],[19.69849,42.67436],[19.81384,42.46399],[20.07202,42.55713],[20.25879,42.33824],[20.34668,42.32606],[20.51697,42.23665],[20.61584,41.92272],[20.52795,41.71803],[20.56091,41.57847],[20.44556,41.54559],[20.56091,41.40566],[20.50049,41.3397],[20.58289,41.09177],[20.65979,41.07521],[20.71472,40.90521],[20.95642,40.92181],[20.98389,40.7431],[21.07178,40.60978],[20.95093,40.47202],[20.85205,40.47202],[20.68726,40.10329],[20.43457,40.07387],[20.33569,39.99396],[20.43457,39.82119],[20.38513,39.77899],[20.28625,39.8001],[20.31921,39.72831],[20.20386,39.63954],[19.97314,39.69451],[20.0116,39.86759],[19.86328,40.04444],[19.35791,40.2921],[19.25354,40.51798],[19.4458,40.3298],[19.50073,40.43859],[19.31396,40.65564],[19.41833,40.90936],[19.53918,40.92181],[19.4458,41.00063],[19.43481,41.15384],[19.50623,41.2489],[19.4458,41.32733],[19.41284,41.4139],[19.51721,41.52092],[19.45129,41.60312],[19.52271,41.57847],[19.58862,41.62366],[19.59961,41.7836],[19.39087,41.86138]]]}},austria:{type:"Feature",id:"austria",properties:{},geometry:{type:"Polygon",coordinates:[[[16.50733,46.99293],[16.28342,46.99293],[16.13584,46.8713],[15.98317,46.81909],[16.04933,46.65517],[15.86104,46.71801],[15.75926,46.69009],[15.56079,46.67962],[15.57606,46.63421],[15.47937,46.60276],[15.43357,46.65168],[15.22493,46.63421],[15.04682,46.64819],[14.99084,46.58877],[14.9603,46.62373],[14.85344,46.60276],[14.83308,46.50127],[14.75166,46.49776],[14.68041,46.43818],[14.61426,46.43818],[14.57864,46.37853],[14.44124,46.43116],[14.16135,46.42766],[14.12573,46.47674],[14.01886,46.47674],[13.91199,46.52578],[13.82548,46.50477],[13.44381,46.56078],[13.30641,46.55028],[13.1283,46.58877],[12.84332,46.61324],[12.72628,46.6412],[12.51255,46.66565],[12.35988,46.70405],[12.36497,46.77032],[12.28863,46.77729],[12.27337,46.88522],[12.20721,46.87478],[12.13088,46.90261],[12.11561,46.99987],[12.25301,47.06577],[12.2123,47.0935],[11.9833,47.04497],[11.73394,46.96168],[11.63217,47.01028],[11.54057,46.97557],[11.49986,47.00681],[11.41843,46.96515],[11.25559,46.97557],[11.1131,46.91304],[11.04185,46.76335],[10.88919,46.75986],[10.74161,46.78426],[10.70599,46.86435],[10.57877,46.83998],[10.45663,46.85043],[10.47699,46.92694],[10.38539,46.98946],[10.23272,46.86435],[10.12076,46.83302],[9.86632,46.94084],[9.90194,47.00334],[9.68312,47.05884],[9.61188,47.03804],[9.63223,47.12813],[9.58134,47.1662],[9.54063,47.26644],[9.60679,47.34926],[9.67294,47.36994],[9.64241,47.44571],[9.56608,47.48011],[9.71365,47.52824],[9.7849,47.59692],[9.83579,47.54542],[9.94774,47.53855],[10.09023,47.44915],[10.11059,47.36649],[10.2429,47.38717],[10.18692,47.2699],[10.32432,47.29751],[10.48208,47.44915],[10.43119,47.48699],[10.44137,47.59005],[10.48717,47.55229],[10.54823,47.53511],[10.59912,47.56602],[10.75688,47.53168],[10.88919,47.54542],[10.94008,47.48699],[10.99605,47.39061],[11.23523,47.44227],[11.28103,47.3975],[11.42352,47.51449],[11.57619,47.50762],[11.60672,47.59005],[11.83572,47.58662],[12.00366,47.62436],[12.20721,47.60378],[12.16141,47.69634],[12.2581,47.74427],[12.25301,47.67921],[12.43112,47.71004],[12.49219,47.63122],[12.56852,47.62779],[12.62959,47.68949],[12.77208,47.66893],[12.83315,47.54198],[12.97564,47.47323],[13.04179,47.49387],[13.0367,47.55572],[13.09777,47.64151],[13.03161,47.71004],[12.90439,47.72031],[13.00617,47.84683],[12.9451,47.93555],[12.86368,47.95941],[12.86368,48.00369],[12.75172,48.09894],[12.87386,48.21097],[12.96037,48.21097],[13.04179,48.2652],[13.18428,48.29907],[13.26061,48.2923],[13.39801,48.35659],[13.44381,48.41742],[13.43872,48.55234],[13.50997,48.58601],[13.61175,48.57255],[13.72879,48.5119],[13.78477,48.57255],[13.82039,48.62639],[13.79495,48.71713],[13.85093,48.77417],[14.05957,48.66338],[14.01377,48.63312],[14.07484,48.59274],[14.21733,48.59611],[14.3649,48.54897],[14.46668,48.64993],[14.55828,48.59611],[14.59899,48.62639],[14.72113,48.57591],[14.72113,48.6869],[14.8229,48.7272],[14.81782,48.77753],[14.96472,48.78518],[14.98936,49.01266],[15.14859,48.99503],[15.19439,48.93155],[15.30635,48.98501],[15.39286,48.98501],[15.48446,48.92821],[15.74908,48.8546],[15.84068,48.88807],[16.00862,48.78088],[16.20708,48.73391],[16.39537,48.73727],[16.49206,48.81105],[16.69053,48.77417],[16.7058,48.73391],[16.89917,48.71377],[16.97551,48.51527],[16.84828,48.45118],[16.85337,48.34644],[16.95515,48.25165],[16.99077,48.1499],[17.09255,48.13971],[17.08237,48.02412],[17.17397,48.02071],[17.08237,47.87414],[16.98568,47.86732],[17.08237,47.80925],[17.09255,47.70319],[16.74142,47.67921],[16.7058,47.75112],[16.53786,47.75454],[16.54804,47.70662],[16.42082,47.66893],[16.57348,47.6175],[16.67017,47.63122],[16.71088,47.53855],[16.66,47.44915],[16.54295,47.39406],[16.46153,47.39406],[16.49206,47.2768],[16.42591,47.19733],[16.47171,47.1489],[16.54804,47.1489],[16.47679,47.07964],[16.52768,47.05884],[16.50733,46.99293]]]}},graz:{type:"Feature",id:"graz",properties:{},geometry:{type:"Polygon",coordinates:[[[15.26276,46.94182],[15.26276,47.16918],[15.62943,47.16918],[15.62943,46.94182],[15.26276,46.94182]]]}},belarus:{type:"Feature",id:"belarus",properties:{},geometry:{type:"Polygon",coordinates:[[[23.19351,52.37811],[23.38715,52.57134],[23.67554,52.61806],[23.87329,52.72215],[23.75656,53.20027],[23.42148,53.83956],[23.43521,53.97467],[24.33609,53.99082],[24.73022,54.03762],[24.70825,54.16967],[24.95682,54.18253],[25.48004,54.37176],[25.63385,54.95239],[26.53748,55.24468],[26.27655,55.26973],[26.48804,55.71009],[26.89728,55.87993],[27.56195,55.82597],[27.56195,55.97226],[27.98218,56.20976],[29.64935,55.96304],[30.28107,55.89303],[30.95398,55.64815],[31.20941,54.67065],[32.47009,53.7617],[32.83539,53.3866],[32.22839,53.02635],[31.51978,53.16159],[31.84662,52.06262],[30.8139,51.93411],[30.4953,51.21032],[27.71301,51.46085],[25.85083,51.88666],[24.5874,51.81541],[23.51898,51.41634],[23.45581,51.99841],[23.15918,52.1874],[23.19351,52.37811]]]}},belgium:{type:"Feature",id:"belgium",properties:{},geometry:{type:"Polygon",coordinates:[[[3.08167,51.55146],[3.30963,51.43346],[3.36834,51.36996],[3.37761,51.35956],[3.37589,51.34841],[3.38482,51.34337],[3.38722,51.33887],[3.38688,51.33286],[3.36096,51.31527],[3.3819,51.30207],[3.37641,51.29928],[3.36782,51.29681],[3.38293,51.28726],[3.38327,51.2806],[3.37915,51.27824],[3.38121,51.27598],[3.39031,51.27416],[3.39598,51.26686],[3.40439,51.26449],[3.40937,51.25923],[3.41795,51.26127],[3.42138,51.25848],[3.4267,51.25482],[3.42894,51.24709],[3.44679,51.24279],[3.52592,51.24677],[3.51425,51.2878],[3.52927,51.28935],[3.53434,51.28474],[3.53811,51.28479],[3.54266,51.29177],[3.55717,51.29187],[3.5588,51.2959],[3.56163,51.29644],[3.56489,51.29569],[3.5727,51.29225],[3.57253,51.29107],[3.57571,51.28946],[3.57905,51.28951],[3.58206,51.28876],[3.58214,51.29247],[3.58618,51.29316],[3.58026,51.29869],[3.58987,51.30663],[3.62626,51.29413],[3.64145,51.28914],[3.64411,51.29069],[3.6581,51.29096],[3.6781,51.28345],[3.67905,51.28168],[3.69063,51.28173],[3.69424,51.27668],[3.71801,51.27217],[3.71827,51.27368],[3.72273,51.274],[3.75054,51.27061],[3.75286,51.27104],[3.75681,51.26986],[3.76342,51.26261],[3.76848,51.26106],[3.77123,51.26218],[3.77355,51.2646],[3.79698,51.25665],[3.79071,51.24553],[3.79063,51.21608],[3.80453,51.2143],[3.80796,51.21398],[3.82479,51.21086],[3.8356,51.21516],[3.85225,51.21484],[3.85895,51.21291],[3.89002,51.22473],[3.89568,51.21968],[3.89482,51.2143],[3.88298,51.20764],[3.88762,51.20301],[3.89345,51.20527],[3.89929,51.20398],[3.91542,51.20989],[3.91388,51.21764],[3.92349,51.21989],[3.93105,51.22194],[3.9374,51.21398],[3.94323,51.21721],[3.95748,51.21764],[3.96023,51.22527],[3.97654,51.22667],[3.9846,51.2357],[3.99473,51.23914],[4.00469,51.24311],[4.01636,51.24623],[4.03851,51.24687],[4.04125,51.24397],[4.05842,51.24505],[4.06082,51.24773],[4.16365,51.29391],[4.23815,51.35345],[4.22373,51.35881],[4.21686,51.36878],[4.21635,51.37435],[4.33685,51.37842],[4.34235,51.35988],[4.35093,51.35967],[4.36861,51.35795],[4.38543,51.35592],[4.39505,51.35753],[4.42114,51.36707],[4.42818,51.36642],[4.42337,51.37242],[4.42904,51.37521],[4.38852,51.40702],[4.38097,51.42137],[4.38904,51.42597],[4.39093,51.43304],[4.3935,51.43486],[4.39161,51.44416],[4.37891,51.44502],[4.37719,51.44716],[4.38131,51.45165],[4.38509,51.4508],[4.44157,51.47005],[4.46354,51.4723],[4.47487,51.47978],[4.48654,51.4786],[4.53856,51.48416],[4.55074,51.47283],[4.53238,51.44877],[4.53701,51.42522],[4.57512,51.43411],[4.63469,51.42651],[4.64087,51.42372],[4.65048,51.42747],[4.6673,51.42779],[4.66473,51.44556],[4.69236,51.45326],[4.70146,51.46845],[4.71416,51.47026],[4.71519,51.47304],[4.72781,51.48486],[4.74524,51.48988],[4.74721,51.49368],[4.74781,51.49651],[4.75047,51.49945],[4.75648,51.50196],[4.77253,51.50682],[4.79485,51.5034],[4.82025,51.49784],[4.82643,51.48609],[4.84737,51.48352],[4.84291,51.46449],[4.84909,51.46085],[4.84463,51.4478],[4.83089,51.44438],[4.83742,51.42683],[4.8563,51.41805],[4.88171,51.43325],[4.91741,51.4127],[4.93389,51.42083],[4.90162,51.44053],[4.9387,51.46192],[4.97646,51.44545],[5.02419,51.48523],[5.03225,51.48919],[5.04187,51.4878],[5.04135,51.48053],[5.04856,51.47433],[5.08032,51.47475],[5.10658,51.43047],[5.07294,51.39358],[5.11765,51.36149],[5.12074,51.35592],[5.13268,51.3475],[5.13525,51.31608],[5.1622,51.31135],[5.17241,51.31688],[5.19001,51.32069],[5.19585,51.32123],[5.19988,51.32348],[5.24331,51.30594],[5.2276,51.26841],[5.23842,51.26208],[5.26357,51.26782],[5.29584,51.26267],[5.31567,51.26449],[5.33755,51.26428],[5.34107,51.26686],[5.34399,51.27309],[5.34554,51.27668],[5.4172,51.2632],[5.43222,51.27706],[5.43806,51.27695],[5.44132,51.2827],[5.46398,51.28549],[5.47608,51.29209],[5.47608,51.29536],[5.48226,51.29923],[5.48201,51.301],[5.51625,51.29612],[5.52011,51.28957],[5.54363,51.27298],[5.55711,51.26718],[5.55874,51.2631],[5.55745,51.25316],[5.55651,51.24472],[5.56131,51.22301],[5.63667,51.20355],[5.65401,51.19812],[5.65513,51.1936],[5.65212,51.1929],[5.65753,51.1865],[5.66834,51.18671],[5.67624,51.18548],[5.67761,51.18435],[5.6856,51.18542],[5.68946,51.18623],[5.69815,51.1842],[5.70201,51.18397],[5.70165,51.18275],[5.70645,51.18248],[5.70815,51.18223],[5.70987,51.1812],[5.71431,51.1839],[5.7177,51.18475],[5.72948,51.18601],[5.73031,51.18553],[5.73274,51.18564],[5.73274,51.18615],[5.7345,51.18657],[5.73993,51.18757],[5.74576,51.19032],[5.75769,51.18618],[5.75821,51.1851],[5.76731,51.18413],[5.77821,51.1787],[5.77477,51.17337],[5.7801,51.17289],[5.78078,51.17208],[5.77992,51.17052],[5.77673,51.1702],[5.77585,51.17028],[5.77321,51.16967],[5.77274,51.16925],[5.77192,51.16924],[5.77093,51.1698],[5.76993,51.16905],[5.77059,51.16458],[5.77383,51.16453],[5.77385,51.16558],[5.77638,51.16565],[5.77701,51.16306],[5.7775,51.16298],[5.77808,51.16353],[5.77975,51.16356],[5.78025,51.15935],[5.77797,51.15803],[5.77677,51.15554],[5.77829,51.15502],[5.77907,51.15319],[5.78456,51.15421],[5.79005,51.15798],[5.79512,51.15798],[5.80095,51.15954],[5.80027,51.16094],[5.80361,51.1632],[5.80619,51.16352],[5.8134,51.16051],[5.8146,51.16325],[5.82473,51.16874],[5.83434,51.16314],[5.83589,51.15905],[5.84078,51.15819],[5.84129,51.15523],[5.8564,51.15071],[5.86258,51.14446],[5.85674,51.14037],[5.85159,51.13671],[5.84816,51.12938],[5.83374,51.12744],[5.82241,51.12249],[5.81211,51.11387],[5.82275,51.11171],[5.84026,51.10611],[5.83683,51.0936],[5.82584,51.08929],[5.80559,51.09102],[5.81142,51.07851],[5.80421,51.07031],[5.80868,51.06233],[5.797,51.05564],[5.77709,51.05693],[5.76576,51.03384],[5.78568,51.02412],[5.77263,51.01354],[5.77332,51.00555],[5.76885,50.99345],[5.7589,50.98912],[5.74654,50.97767],[5.72765,50.9647],[5.72834,50.95843],[5.73761,50.96145],[5.75306,50.96232],[5.76851,50.9541],[5.7589,50.94567],[5.73521,50.92446],[5.73177,50.91061],[5.7177,50.90563],[5.70362,50.9078],[5.70122,50.89545],[5.68954,50.88224],[5.68096,50.87726],[5.67169,50.87574],[5.65453,50.87054],[5.64766,50.86274],[5.64766,50.84757],[5.65453,50.83435],[5.66448,50.82437],[5.6971,50.81353],[5.71838,50.80333],[5.72113,50.77642],[5.78018,50.79639],[5.82962,50.77294],[5.9079,50.77381],[6.00403,50.76947],[6.04248,50.76252],[6.05621,50.75123],[6.129,50.73385],[6.16745,50.69037],[6.21689,50.66252],[6.2471,50.65991],[6.28143,50.64424],[6.28693,50.62333],[6.27045,50.59631],[6.24847,50.58542],[6.24058,50.56078],[6.22719,50.5538],[6.21586,50.54965],[6.20419,50.53591],[6.21552,50.52063],[6.22993,50.50295],[6.23989,50.50513],[6.2598,50.50338],[6.27766,50.50731],[6.29139,50.50076],[6.3089,50.50513],[6.3216,50.49923],[6.35078,50.49377],[6.35765,50.48722],[6.34838,50.47936],[6.35147,50.46188],[6.37756,50.45925],[6.38065,50.44657],[6.37619,50.40786],[6.36383,50.39561],[6.35387,50.38028],[6.36246,50.37634],[6.41155,50.34415],[6.41499,50.33363],[6.40675,50.31982],[6.38718,50.31763],[6.36829,50.3025],[6.35765,50.30338],[6.33018,50.31565],[6.31645,50.31478],[6.30444,50.30601],[6.29585,50.29044],[6.29414,50.27354],[6.27628,50.26411],[6.22856,50.25511],[6.21483,50.25094],[6.20659,50.24062],[6.19869,50.23403],[6.17947,50.23139],[6.18221,50.22678],[6.17672,50.22151],[6.19251,50.21206],[6.19801,50.18437],[6.19217,50.17646],[6.15166,50.16656],[6.15509,50.15491],[6.16058,50.14633],[6.15578,50.13554],[6.14376,50.13224],[6.13243,50.12454],[6.10737,50.13378],[6.11012,50.16282],[6.09947,50.16502],[6.08677,50.15425],[6.06583,50.14875],[6.02943,50.15579],[6.01639,50.17294],[5.97931,50.16898],[5.96832,50.12542],[5.94566,50.12278],[5.90378,50.10473],[5.89073,50.06948],[5.86876,50.06243],[5.87837,50.03289],[5.83168,50.01039],[5.84404,49.99935],[5.84747,49.98214],[5.81932,49.95785],[5.78773,49.95255],[5.77263,49.91144],[5.74722,49.89994],[5.7843,49.88977],[5.7946,49.87473],[5.76645,49.86012],[5.75203,49.834],[5.76645,49.80121],[5.79941,49.79855],[5.84404,49.74977],[5.83923,49.72847],[5.87906,49.72892],[5.89622,49.70672],[5.87563,49.67963],[5.91176,49.66218],[5.90567,49.65779],[5.9073,49.65479],[5.90429,49.65213],[5.90507,49.64735],[5.90567,49.64262],[5.90876,49.63868],[5.89854,49.63362],[5.89374,49.63573],[5.88524,49.6319],[5.88799,49.62645],[5.87837,49.62],[5.87829,49.61305],[5.8776,49.60737],[5.84996,49.59675],[5.85202,49.58824],[5.86318,49.58773],[5.86524,49.58974],[5.86962,49.59013],[5.87279,49.58913],[5.87502,49.58295],[5.87073,49.58134],[5.87288,49.57961],[5.87314,49.57677],[5.87451,49.5736],[5.86387,49.56965],[5.86164,49.56603],[5.85288,49.56347],[5.85168,49.56185],[5.84661,49.5608],[5.84773,49.55896],[5.84722,49.55567],[5.84224,49.55233],[5.8267,49.54933],[5.82524,49.55066],[5.82026,49.54599],[5.81623,49.54599],[5.81245,49.54582],[5.80765,49.5486],[5.79941,49.54816],[5.78859,49.55194],[5.77263,49.56141],[5.76181,49.55963],[5.75941,49.54203],[5.7407,49.53724],[5.73521,49.53813],[5.72971,49.54225],[5.7189,49.53802],[5.70156,49.5378],[5.6904,49.54392],[5.67993,49.54348],[5.67787,49.54715],[5.66757,49.54682],[5.66002,49.5505],[5.64526,49.54437],[5.62878,49.53579],[5.6262,49.52287],[5.62346,49.5144],[5.61298,49.50292],[5.60217,49.50671],[5.59359,49.51953],[5.56904,49.52565],[5.56372,49.52409],[5.55462,49.52744],[5.54192,49.51384],[5.50329,49.50504],[5.4875,49.50526],[5.48458,49.50113],[5.47085,49.49322],[5.46209,49.49679],[5.46055,49.50738],[5.45214,49.51083],[5.44304,49.51841],[5.46158,49.52788],[5.46209,49.53735],[5.4372,49.55283],[5.45368,49.56542],[5.44458,49.56586],[5.43549,49.56887],[5.42673,49.5899],[5.42862,49.59358],[5.41523,49.59947],[5.40871,49.60748],[5.39892,49.6096],[5.39652,49.6146],[5.3742,49.62128],[5.37025,49.62105],[5.36047,49.62428],[5.34897,49.62895],[5.34279,49.61505],[5.33781,49.61427],[5.32957,49.61494],[5.32064,49.61271],[5.31378,49.6096],[5.31034,49.61071],[5.30863,49.61694],[5.30279,49.62317],[5.30245,49.62962],[5.30794,49.63851],[5.31738,49.64807],[5.33043,49.65318],[5.30708,49.67085],[5.29284,49.67607],[5.27962,49.68496],[5.2791,49.6884],[5.26829,49.69495],[5.25782,49.69295],[5.2482,49.68529],[5.24117,49.68429],[5.24134,49.68851],[5.23104,49.69007],[5.2173,49.6864],[5.21421,49.68784],[5.20666,49.69451],[5.19722,49.69062],[5.18932,49.6924],[5.17542,49.6924],[5.16306,49.69218],[5.1622,49.6995],[5.1646,49.71083],[5.15963,49.71438],[5.15327,49.71671],[5.15087,49.71249],[5.14263,49.70739],[5.14006,49.71194],[5.13147,49.71205],[5.12529,49.71105],[5.12032,49.71704],[5.12358,49.72637],[5.11723,49.73757],[5.09302,49.76297],[5.08796,49.76475],[5.08452,49.76186],[5.07963,49.76164],[5.07611,49.76109],[5.07139,49.75987],[5.06727,49.76081],[5.06144,49.76192],[5.06092,49.76624],[5.04908,49.76741],[5.00599,49.7816],[5.00547,49.7832],[5.00504,49.78719],[5.00041,49.79312],[4.99741,49.79379],[4.99603,49.79506],[4.99715,49.79672],[4.99672,49.79955],[4.9938,49.79977],[4.98539,49.79888],[4.97895,49.79972],[4.96977,49.8011],[4.96779,49.79756],[4.96179,49.79717],[4.95569,49.80027],[4.94865,49.79811],[4.94814,49.79473],[4.94368,49.79035],[4.94213,49.79035],[4.94132,49.79226],[4.93887,49.7926],[4.93286,49.78977],[4.9329,49.78825],[4.93114,49.78661],[4.92939,49.78686],[4.92102,49.78805],[4.91793,49.78708],[4.91269,49.78573],[4.90475,49.78492],[4.89947,49.78597],[4.89741,49.78836],[4.88913,49.78769],[4.88724,49.78786],[4.88244,49.79049],[4.87939,49.79249],[4.87591,49.79282],[4.87068,49.79268],[4.87188,49.78922],[4.87081,49.78839],[4.86227,49.78805],[4.85712,49.78966],[4.85201,49.79035],[4.84909,49.79368],[4.8563,49.79722],[4.86076,49.80354],[4.86214,49.81373],[4.87364,49.81883],[4.86712,49.82071],[4.86712,49.82625],[4.86506,49.83444],[4.8654,49.83964],[4.85304,49.84042],[4.84943,49.84894],[4.84789,49.86278],[4.84463,49.8703],[4.85561,49.87096],[4.87484,49.89618],[4.87347,49.90459],[4.87999,49.90879],[4.87553,49.92006],[4.85424,49.92957],[4.84325,49.94636],[4.82849,49.94724],[4.78558,49.9563],[4.78523,49.9828],[4.80995,49.99626],[4.81647,50.02671],[4.83021,50.04127],[4.81441,50.04788],[4.8127,50.06794],[4.8357,50.07014],[4.83192,50.09085],[4.84291,50.10363],[4.86626,50.10318],[4.85836,50.1164],[4.88274,50.13664],[4.87072,50.14875],[4.8278,50.14963],[4.82025,50.15579],[4.76875,50.1296],[4.75262,50.10539],[4.70352,50.08424],[4.70112,50.01502],[4.69803,49.99229],[4.63383,49.98037],[4.56963,49.96712],[4.53255,49.94857],[4.51401,49.93973],[4.44122,49.93178],[4.35745,49.94327],[4.31145,49.95564],[4.22974,49.94945],[4.18785,49.95034],[4.16725,49.96801],[4.12331,49.97286],[4.12193,50.01215],[4.14734,50.05273],[4.18167,50.05493],[4.22012,50.07301],[4.1906,50.10252],[4.18922,50.1263],[4.16382,50.1219],[4.11644,50.13158],[4.13841,50.21734],[4.20708,50.25555],[4.1827,50.27025],[4.16382,50.28298],[4.15901,50.27596],[4.17309,50.2685],[4.17309,50.25994],[4.16519,50.25401],[4.13258,50.25489],[4.1312,50.26433],[4.13017,50.27091],[4.11644,50.27464],[4.12262,50.2821],[4.1185,50.2957],[4.09653,50.30864],[4.07696,50.30579],[4.07215,50.31807],[4.05533,50.32946],[4.03679,50.33998],[4.02512,50.35291],[3.98598,50.33911],[3.95748,50.33845],[3.8974,50.32267],[3.88264,50.32377],[3.88092,50.33494],[3.85448,50.33911],[3.84933,50.34875],[3.82942,50.35028],[3.82633,50.34217],[3.80711,50.3413],[3.80608,50.35072],[3.74256,50.34393],[3.73604,50.31149],[3.72437,50.30272],[3.70583,50.29921],[3.68076,50.31894],[3.66428,50.34152],[3.65227,50.37087],[3.66634,50.39123],[3.66325,50.42143],[3.65398,50.4551],[3.62995,50.46712],[3.60832,50.49006],[3.59974,50.48657],[3.55476,50.48853],[3.49915,50.47936],[3.48198,50.48635],[3.50945,50.52085],[3.4758,50.52478],[3.45726,50.50513],[3.43735,50.49945],[3.36662,50.48416],[3.27324,50.52609],[3.25951,50.60154],[3.2341,50.65251],[3.24097,50.67862],[3.24783,50.70037],[3.19565,50.70776],[3.1311,50.77642],[3.06725,50.76296],[2.99652,50.74428],[2.95807,50.67035],[2.82898,50.68602],[2.68341,50.77816],[2.57629,50.81114],[2.5708,50.93939],[2.51862,51.05866],[2.36755,51.2516],[3.08167,51.55146]]]}},be_brussels:{type:"Feature",id:"be_brussels",properties:{},geometry:{type:"Polygon",coordinates:[[[4.37973,50.76382],[4.37853,50.76811],[4.34522,50.77337],[4.34205,50.77164],[4.32952,50.77381],[4.31621,50.78624],[4.31458,50.79454],[4.30282,50.79709],[4.29802,50.80593],[4.28901,50.80691],[4.2854,50.80506],[4.27579,50.80696],[4.27218,50.81011],[4.25802,50.80935],[4.25519,50.8151],[4.24403,50.81548],[4.24343,50.82182],[4.25227,50.82697],[4.25107,50.83288],[4.25467,50.83695],[4.27193,50.84036],[4.28094,50.84215],[4.28042,50.85721],[4.27802,50.85911],[4.27699,50.86713],[4.28274,50.87227],[4.29561,50.88094],[4.29553,50.88262],[4.29149,50.88495],[4.29004,50.88982],[4.30634,50.89274],[4.31647,50.89605],[4.32892,50.90249],[4.34025,50.90411],[4.34857,50.90341],[4.36213,50.9033],[4.3726,50.90032],[4.38119,50.90319],[4.38462,50.91093],[4.39578,50.91407],[4.41543,50.91342],[4.41655,50.90757],[4.4296,50.90103],[4.43595,50.89502],[4.43106,50.89014],[4.44007,50.87845],[4.43183,50.87628],[4.4253,50.86615],[4.44599,50.85992],[4.44968,50.85591],[4.46238,50.85396],[4.46899,50.84573],[4.46959,50.83537],[4.47972,50.82036],[4.45947,50.81661],[4.45921,50.80626],[4.48238,50.79617],[4.4817,50.79134],[4.46427,50.78645],[4.435,50.775],[4.43028,50.77517],[4.38917,50.76377],[4.37973,50.76382]]]}},be_flanders:{type:"Feature",id:"be_flanders",properties:{},geometry:{type:"Polygon",coordinates:[[[2.52239,51.10172],[3.12606,51.34118],[3.17493,51.38246],[3.37615,51.38784],[3.41065,51.3304],[3.40202,51.28548],[3.49114,51.2567],[3.48251,51.30345],[3.57737,51.32322],[3.81309,51.27289],[3.82172,51.23691],[3.93095,51.23691],[4.05456,51.27469],[4.20116,51.35195],[4.16954,51.38067],[4.34202,51.39502],[4.36502,51.46491],[4.53749,51.50072],[4.57199,51.47924],[4.56049,51.44879],[4.63811,51.45058],[4.75022,51.52397],[4.83645,51.50787],[5.0808,51.49893],[5.13541,51.447],[5.10667,51.39143],[5.26477,51.31783],[5.26477,51.28727],[5.4085,51.29267],[5.48612,51.32501],[5.58098,51.28368],[5.58385,51.23511],[5.76783,51.2045],[5.87706,51.16125],[5.70459,50.80293],[5.90581,50.78657],[5.93743,50.73202],[5.90293,50.70108],[5.81382,50.69379],[5.61547,50.76112],[5.50049,50.712],[5.2044,50.7029],[5.16416,50.67558],[5.03768,50.70108],[4.98881,50.75021],[4.91694,50.72656],[4.79046,50.76658],[4.68122,50.77021],[4.66973,50.73566],[4.2874,50.67922],[3.91083,50.6774],[3.71823,50.75203],[3.65499,50.712],[3.53426,50.71018],[3.51413,50.74112],[3.45664,50.74384],[3.37328,50.69562],[3.31004,50.70745],[3.28991,50.73657],[3.16487,50.74294],[3.13181,50.77203],[3.08007,50.76021],[2.87453,50.7393],[2.89609,50.71109],[2.87453,50.69562],[2.79692,50.7029],[2.69918,50.8002],[2.62013,50.79747],[2.56982,50.8583],[2.56695,50.92358],[2.60288,50.94985],[2.5497,50.99601],[2.52239,51.10172]]]}},be_wallonia:{type:"Feature",id:"be_wallonia",properties:{},geometry:{type:"Polygon",coordinates:[[[5.78257,49.87573],[5.73919,49.83362],[5.75516,49.79146],[5.78839,49.79665],[5.91064,49.66249],[5.84857,49.59723],[5.87102,49.57599],[5.81857,49.54638],[5.66079,49.55362],[5.61108,49.50603],[5.55603,49.52928],[5.47051,49.49737],[5.45708,49.56703],[5.37522,49.62333],[5.31486,49.61137],[5.33243,49.65263],[5.26851,49.69657],[5.16628,49.69303],[4.99753,49.80006],[4.85164,49.79345],[4.84754,49.86806],[4.89013,49.90893],[4.79117,49.958],[4.87762,50.15374],[4.82418,50.16932],[4.70207,50.09556],[4.69441,49.99625],[4.44551,49.93722],[4.30589,49.96829],[4.19746,49.9546],[4.1352,50.01508],[4.22825,50.07842],[4.19682,50.13519],[4.12714,50.1355],[4.2052,50.27347],[4.16262,50.28896],[4.13538,50.25784],[4.02795,50.3584],[3.88574,50.32701],[3.84578,50.35323],[3.74546,50.35005],[3.70994,50.30316],[3.65756,50.37076],[3.65552,50.4617],[3.60586,50.49632],[3.4993,50.48921],[3.51992,50.52362],[3.47439,50.53368],[3.37698,50.49109],[3.28634,50.52793],[3.26104,50.70131],[3.20602,50.71139],[3.17839,50.75609],[3.30562,50.75466],[3.36077,50.70962],[3.45439,50.77072],[3.64047,50.72242],[3.67752,50.77062],[3.75857,50.78045],[3.77568,50.74789],[3.8798,50.75146],[3.9097,50.69245],[4.05868,50.69439],[4.14853,50.72834],[4.2467,50.6894],[4.46355,50.75511],[4.52399,50.72724],[4.59727,50.76359],[4.63445,50.74272],[4.64309,50.79755],[4.76014,50.80544],[4.92545,50.74275],[5.00339,50.76594],[5.07039,50.70649],[5.16508,50.6957],[5.16984,50.72257],[5.30912,50.71802],[5.35029,50.74629],[5.47863,50.72352],[5.68786,50.81193],[5.68225,50.75651],[5.7707,50.75132],[5.81963,50.71396],[5.88333,50.70992],[5.89217,50.75518],[5.96561,50.76107],[6.04045,50.74546],[6.03959,50.71833],[6.11066,50.72299],[6.18169,50.62383],[6.26953,50.62519],[6.17812,50.54153],[6.22658,50.49432],[6.35036,50.48854],[6.34298,50.38033],[6.40542,50.32331],[6.30647,50.32019],[6.27889,50.26734],[6.17377,50.23165],[6.19232,50.18203],[6.147,50.17775],[6.13779,50.12985],[6.10245,50.17055],[5.96368,50.17263],[5.96133,50.13136],[5.89532,50.11216],[5.81968,50.01329],[5.83578,49.97892],[5.77502,49.9608],[5.73577,49.89684],[5.78257,49.87573]]]}},croatia:{type:"Feature",id:"croatia",properties:{},geometry:{type:"Polygon",coordinates:[[[18.55316,42.39709],[18.487,42.33],[16,42.2],[13,45],[13.48,45.55],[13.6,45.46],[13.67282,45.45244],[13.78445,45.47445],[13.87695,45.43477],[13.98354,45.46061],[13.95607,45.5049],[13.99868,45.52812],[14.07402,45.49231],[14.19361,45.48114],[14.23361,45.51383],[14.33098,45.47073],[14.4841,45.54339],[14.55276,45.65149],[15.16462,45.43061],[15.36301,45.48661],[15.28061,45.60731],[15.34584,45.65341],[15.24587,45.72718],[15.55939,45.85272],[15.68573,45.84315],[15.71043,46.04506],[15.61913,46.08657],[15.60059,46.16509],[15.67131,46.23068],[15.78049,46.21928],[15.79422,46.26439],[16.073,46.34266],[16.04759,46.3891],[16.15145,46.40378],[16.30028,46.38152],[16.24191,46.49508],[16.36894,46.55083],[16.66077,46.45725],[16.72462,46.39715],[16.86058,46.35783],[16.97456,46.22688],[17.17232,46.1551],[17.31102,45.97167],[17.58087,45.93874],[17.66574,45.84483],[17.86118,45.77993],[18.15765,45.79625],[18.43522,45.74655],[18.68019,45.91486],[18.77838,45.88666],[18.82507,45.91724],[18.9164,45.70714],[18.96652,45.66972],[18.89717,45.56551],[18.94817,45.54136],[19.01686,45.56369],[19.10858,45.5144],[19.08125,45.47585],[19.00341,45.48553],[18.99315,45.44969],[19.03735,45.40735],[18.9792,45.37883],[19.09424,45.3367],[19.10972,45.30469],[19.2687,45.24886],[19.42108,45.23622],[19.45198,45.16219],[19.2041,45.17236],[19.14345,45.119],[19.09331,45.13091],[19.08464,45.11852],[19.11231,45.08359],[19.1011,44.98811],[19.16343,44.94855],[19.06865,44.88961],[18.99843,44.89696],[19.01991,44.84386],[18.83764,44.84591],[18.75065,44.90197],[18.73803,44.94119],[18.75375,44.95245],[18.78491,44.94261],[18.77858,44.98426],[18.72157,44.98326],[18.66267,45.04785],[18.46602,45.05359],[18.41889,45.09637],[18.22841,45.09274],[18.2011,45.0684],[18.11746,45.06832],[18.0011,45.14282],[17.93745,45.09903],[17.93891,45.07086],[17.84756,45.03242],[17.66404,45.12204],[17.59713,45.09425],[17.16882,45.13674],[16.92275,45.23503],[16.81812,45.17296],[16.5105,45.20898],[16.46738,45.13326],[16.40374,45.10639],[16.36047,44.99622],[16.29175,44.9865],[16.11145,45.08758],[15.99747,45.21978],[15.81894,45.2072],[15.77283,45.16143],[15.80439,45.1121],[15.75505,45.05587],[15.78598,44.96966],[15.7338,44.9371],[15.78598,44.84029],[15.74818,44.81311],[15.82858,44.72686],[15.90458,44.75089],[16.14789,44.48088],[16.15253,44.38405],[16.39709,44.06983],[17.1476,43.49677],[17.22656,43.49776],[17.282,43.47769],[17.30151,43.4393],[17.26227,43.39108],[17.37488,43.2502],[17.44734,43.1998],[17.43805,43.18365],[17.63424,43.09863],[17.71339,42.97351],[17.53967,42.93531],[17.64267,42.88351],[17.67975,42.92174],[17.7903,42.89961],[17.80815,42.92073],[17.85896,42.89458],[17.90239,42.81647],[18.24898,42.61375],[18.3609,42.61526],[18.44437,42.56076],[18.43575,42.48273],[18.55316,42.39709]]]}},czechia:{type:"Feature",id:"czechia",properties:{},geometry:{type:"Polygon",coordinates:[[[14.3811,51.06902],[15.13916,51.08282],[16.42456,50.70863],[16.68823,50.32442],[16.78711,50.49246],[17.75391,50.35247],[18.58887,49.96536],[18.92944,49.51808],[18.1604,48.98022],[17.00684,48.61839],[15.13916,48.85749],[14.67773,48.55298],[13.85376,48.58206],[12.00806,50.05008],[11.92017,50.35948],[14.3811,51.06902]]]}},denmark:{type:"Feature",id:"denmark",properties:{},geometry:{type:"Polygon",coordinates:[[[7.99805,55.11608],[7.9541,56.94497],[10.62378,57.94401],[12.65625,56.01681],[12.65625,55.91535],[12.82928,55.5566],[12.60956,55.42122],[12.66449,55.25095],[14.82605,55.37911],[15.28198,55.22902],[15.11719,54.85448],[12.87598,54.85922],[12.07672,54.44769],[10.849,54.73414],[10.67871,54.58002],[9.88083,54.83708],[9.73972,54.82265],[9.60823,54.8525],[9.63158,54.87996],[9.59038,54.88668],[9.4994,54.83886],[9.43176,54.82601],[9.41013,54.84242],[9.38198,54.83827],[9.37443,54.82047],[9.34422,54.80108],[9.25152,54.80979],[9.23985,54.84993],[9.13822,54.87483],[9.06338,54.87048],[8.90167,54.90386],[8.85532,54.89517],[8.82408,54.90662],[8.79765,54.90445],[8.77602,54.893],[8.72761,54.89181],[8.67645,54.91195],[8.66066,54.90859],[8.55698,54.92063],[8.47355,55.05537],[7.99805,55.11608]]]}},"Queen-Mary-University-of-London":{type:"Feature",id:"Queen-Mary-University-of-London",properties:{},geometry:{type:"Polygon",coordinates:[[[-0.04049,51.74867],[0.03027,51.74434],[0.09827,51.7315],[0.16087,51.71065],[0.21563,51.68262],[0.26045,51.64848],[0.29361,51.60956],[0.31386,51.56737],[0.32046,51.52354],[0.31318,51.47975],[0.29235,51.43768],[0.25881,51.39894],[0.21385,51.36502],[0.15922,51.33719],[0.09701,51.31653],[0.02959,51.30381],[-0.04049,51.29952],[-0.11057,51.30381],[-0.178,51.31653],[-0.24021,51.33719],[-0.29484,51.36502],[-0.33979,51.39894],[-0.37334,51.43768],[-0.39417,51.47975],[-0.40144,51.52354],[-0.39485,51.56737],[-0.3746,51.60956],[-0.34144,51.64848],[-0.29662,51.68262],[-0.24185,51.71065],[-0.17926,51.7315],[-0.11125,51.74434],[-0.04049,51.74867]]]}},finland:{type:"Feature",id:"finland",properties:{},geometry:{type:"Polygon",coordinates:[[[24.16992,65.34851],[23.90625,66.14274],[23.68652,66.44311],[23.99414,66.80922],[23.51074,67.27204],[23.37891,67.44123],[23.73047,67.97463],[20.74219,69.03714],[21.18164,69.28726],[21.70898,69.27171],[22.45605,68.73638],[23.15918,68.65655],[23.90625,68.8318],[25.00488,68.59249],[25.40039,68.87936],[25.75195,68.95839],[25.97168,69.70287],[26.45508,69.96044],[27.20215,69.90012],[27.50977,70.0506],[27.86133,70.08056],[28.38867,69.82447],[29.04785,69.71811],[29.26758,69.53452],[28.87207,69.225],[29.0918,69.02141],[28.52051,68.89519],[28.78418,68.84767],[28.52051,68.56038],[28.69629,68.17156],[29.26758,68.0733],[30.05859,67.69277],[29.17969,67.0503],[29.0918,66.8956],[30.14648,65.73063],[29.66309,65.20147],[29.70703,64.79285],[30.05859,64.79285],[30.10254,64.41592],[30.4541,64.30182],[30.05859,63.74363],[31.59668,63.01511],[30.27832,61.89758],[27.81738,60.56538],[27.33398,60.19616],[24.65332,59.88894],[21.84082,59.46741],[20.43457,59.46741],[19.11621,60.19616],[19.2041,60.58697],[20.08301,60.75916],[20.69824,61.14324],[20.96191,61.73153],[19.99512,63.27318],[21.44531,63.66576],[22.93945,64.20638],[23.24707,64.51064],[23.81836,64.66152],[24.16992,65.34851]]]}},france:{type:"Feature",id:"france",properties:{},geometry:{type:"MultiPolygon",coordinates:[[[[9.9,42.64836],[9.9,42.02785],[9.63227,41.43244],[9.36968,41.35052],[9.32602,41.3036],[9.27311,41.29196],[9.07196,41.26129],[8.94186,41.27688],[8.8742,41.26232],[8.84542,41.26311],[8.78782,41.25725],[7.3114,41.4242],[5.8,41.64],[3.17358,42.41768],[3.16081,42.42757],[3.0944,42.41457],[3.03402,42.45331],[3.02214,42.45645],[2.87822,42.4487],[2.87019,42.44653],[2.78424,42.40256],[2.7413,42.41128],[2.72928,42.40998],[2.69331,42.39417],[2.68378,42.3854],[2.68162,42.37263],[2.68585,42.34679],[2.66719,42.33008],[2.58106,42.34418],[2.56777,42.34173],[2.5338,42.32197],[2.47795,42.32986],[2.41933,42.37658],[2.41222,42.38021],[2.26719,42.42055],[2.25973,42.42117],[2.20694,42.41558],[2.20653,42.41526],[2.20526,42.41541],[2.16028,42.41065],[2.14881,42.40545],[2.09393,42.35474],[2.00861,42.33818],[1.965,42.36473],[1.93076,42.42442],[1.92089,42.43302],[1.88467,42.44761],[1.88459,42.44762],[1.88444,42.4477],[1.82774,42.47056],[1.72567,42.48452],[1.71561,42.50125],[1.7272,42.56103],[1.72479,42.57499],[1.71011,42.59992],[1.69377,42.60975],[1.60283,42.61382],[1.56069,42.6392],[1.54636,42.64166],[1.50444,42.6331],[1.4921,42.62502],[1.47238,42.59703],[1.43792,42.59264],[1.41936,42.60643],[1.38032,42.67415],[1.37335,42.68127],[1.33313,42.70563],[1.32364,42.7085],[1.23221,42.71248],[1.16554,42.69928],[1.08546,42.76635],[1.07564,42.77079],[0.95937,42.78852],[0.95073,42.78794],[0.92265,42.7797],[0.84606,42.8157],[0.71511,42.8464],[0.70017,42.84402],[0.69117,42.83186],[0.67409,42.76479],[0.67474,42.75286],[0.69192,42.70684],[0.669,42.67901],[0.43024,42.67863],[0.3715,42.70308],[0.35954,42.70415],[0.34912,42.69817],[0.32567,42.67274],[0.29571,42.66388],[0.24593,42.70175],[0.23972,42.70494],[0.18967,42.72039],[0.17919,42.72075],[-0.01993,42.67389],[-0.06726,42.6848],[-0.16949,42.77157],[-0.29987,42.82697],[-0.31683,42.82635],[-0.39208,42.78766],[-0.44354,42.78453],[-0.48842,42.80255],[-0.50868,42.79935],[-0.54499,42.76906],[-0.56721,42.76937],[-0.67446,42.86392],[-0.68094,42.86775],[-0.73372,42.88666],[-0.7476,42.93879],[-0.75711,42.95107],[-0.77253,42.95284],[-0.82114,42.93865],[-0.94508,42.94192],[-1.02313,42.98206],[-1.10852,43.00409],[-1.1156,43.00461],[-1.14775,43.00124],[-1.15845,43.01452],[-1.16736,43.02083],[-1.21622,43.0381],[-1.22612,43.03898],[-1.26236,43.03303],[-1.30643,43.05531],[-1.31992,43.05696],[-1.33135,43.0496],[-1.3542,43.0197],[-1.43868,43.03371],[-1.4775,43.06889],[-1.48311,43.08561],[-1.47641,43.10248],[-1.43479,43.13087],[-1.42732,43.1404],[-1.39411,43.22935],[-1.39531,43.24596],[-1.40868,43.25591],[-1.52629,43.28099],[-1.54626,43.2737],[-1.57149,43.2412],[-1.61053,43.24223],[-1.65,43.29323],[-1.66953,43.30065],[-1.73359,43.28856],[-1.75606,43.31966],[-1.76297,43.32565],[-1.79156,43.34067],[-1.80099,43.37017],[-1.78509,43.39037],[-1.7835,43.39686],[-2.7,43.9],[-6.3,48.98],[-2.25,50.09],[1.26331,50.92504],[1.76605,51.17762],[2.35816,51.32937],[2.5488,51.09759],[2.57048,51.07409],[2.58741,51.01763],[2.59845,51.0051],[2.61558,50.99749],[2.63986,50.95766],[2.64225,50.94578],[2.62452,50.9256],[2.61962,50.91067],[2.62396,50.86071],[2.62781,50.85054],[2.63786,50.83696],[2.6511,50.82906],[2.73267,50.81738],[2.79995,50.73795],[2.81655,50.73092],[2.85265,50.73335],[2.89072,50.7162],[2.90492,50.71536],[2.9161,50.72418],[2.93508,50.75592],[3.00718,50.78377],[3.08218,50.78749],[3.09244,50.79092],[3.11412,50.80566],[3.14877,50.80195],[3.2154,50.73111],[3.22149,50.7267],[3.27051,50.70375],[3.27545,50.67757],[3.26576,50.6604],[3.26588,50.64054],[3.28922,50.60028],[3.29219,50.55037],[3.3056,50.53267],[3.37551,50.50839],[3.3898,50.50884],[3.4748,50.54445],[3.52173,50.53459],[3.53266,50.51873],[3.54779,50.51012],[3.61523,50.50558],[3.67378,50.45642],[3.68415,50.35277],[3.6901,50.34044],[3.70258,50.33482],[3.71576,50.33854],[3.74935,50.36279],[3.84109,50.36558],[3.90189,50.3436],[3.91317,50.34291],[4.02672,50.36904],[4.13761,50.29984],[4.14388,50.29727],[4.21444,50.28167],[4.22904,50.26664],[4.23078,50.25233],[4.17084,50.18579],[4.16601,50.16888],[4.1764,50.1547],[4.21195,50.13602],[4.24074,50.07102],[4.23193,50.05551],[4.18164,50.03436],[4.17177,50.02537],[4.16976,50.01217],[4.1765,50.00065],[4.20633,49.97546],[4.22164,49.97089],[4.30877,49.98145],[4.44542,49.9523],[4.45469,49.95251],[4.6581,50.00609],[4.66936,50.01392],[4.67293,50.02716],[4.66924,50.06972],[4.69517,50.10472],[4.83123,50.17941],[4.8815,50.16436],[4.90479,50.14451],[4.90426,50.12639],[4.88076,50.0815],[4.86277,50.0745],[4.85104,50.06216],[4.84331,50.03884],[4.84331,50.03883],[4.8433,50.03881],[4.82678,49.989],[4.82662,49.97692],[4.83343,49.96696],[4.89654,49.91753],[4.89755,49.89424],[4.87913,49.86942],[4.87625,49.85111],[4.88924,49.81266],[4.89769,49.80204],[4.91098,49.79926],[4.99534,49.81116],[5.01867,49.79272],[5.02686,49.78886],[5.09944,49.77323],[5.13458,49.73462],[5.1412,49.72984],[5.18761,49.70906],[5.19602,49.70732],[5.28157,49.70836],[5.33363,49.67308],[5.344,49.65049],[5.3544,49.64041],[5.43141,49.60791],[5.48205,49.52815],[5.49294,49.51979],[5.50666,49.52042],[5.55401,49.54025],[5.59311,49.53424],[5.6076,49.53761],[5.641,49.56095],[5.70676,49.55267],[5.71578,49.55361],[5.77526,49.57414],[5.8399,49.55321],[5.86126,49.52038],[5.876,49.5114],[5.97516,49.50129],[5.99801,49.47317],[6.01627,49.46597],[6.08635,49.47562],[6.09319,49.47787],[6.17397,49.52187],[6.24643,49.52511],[6.334,49.48235],[6.34423,49.48037],[6.43515,49.487],[6.5451,49.44384],[6.60639,49.37868],[6.60497,49.33739],[6.61627,49.31869],[6.67013,49.29269],[6.72996,49.22917],[6.74328,49.19086],[6.76026,49.17752],[6.80904,49.17284],[6.82473,49.17826],[6.83093,49.19366],[6.82982,49.21802],[6.85119,49.23136],[6.88453,49.2239],[6.89322,49.22389],[6.93753,49.23369],[7.04055,49.19794],[7.0463,49.17503],[7.05478,49.16313],[7.06908,49.16018],[7.10494,49.16634],[7.14315,49.14159],[7.1535,49.13839],[7.28683,49.13488],[7.29893,49.13856],[7.36095,49.18259],[7.45012,49.19517],[7.50113,49.17672],[7.54379,49.10572],[7.5579,49.09626],[7.6296,49.08527],[7.64722,49.06722],[7.6612,49.06119],[7.75401,49.05963],[7.76073,49.06067],[7.80291,49.07489],[7.85525,49.05329],[7.8673,49.05227],[7.93826,49.06832],[8.08069,49.00688],[8.2225,48.98787],[8.23704,48.97683],[8.23589,48.95817],[8.20888,48.94863],[8.20089,48.94339],[8.15824,48.89753],[8.10087,48.7993],[7.99071,48.74478],[7.98534,48.7409],[7.90422,48.65865],[7.85605,48.63606],[7.8484,48.62977],[7.81842,48.58883],[7.81456,48.57704],[7.81449,48.50968],[7.78547,48.48337],[7.78055,48.47652],[7.74506,48.39484],[7.74357,48.38427],[7.75159,48.32322],[7.71085,48.29841],[7.70241,48.28803],[7.67661,48.21555],[7.59605,48.11698],[7.59165,48.10648],[7.58522,48.04694],[7.59127,48.03035],[7.62437,47.99865],[7.63205,47.97081],[7.57554,47.87436],[7.5728,47.86435],[7.57267,47.83631],[7.54581,47.78793],[7.54418,47.77232],[7.55758,47.72899],[7.53526,47.6989],[7.53136,47.68564],[7.537,47.67302],[7.60016,47.60822],[7.58967,47.56755],[7.55424,47.55128],[7.54511,47.54283],[7.51256,47.48439],[7.38747,47.42111],[7.32653,47.4273],[7.24435,47.40939],[7.16708,47.4335],[7.15212,47.47612],[7.14279,47.48707],[7.12853,47.48893],[7.0801,47.47718],[7.03557,47.48695],[7.02102,47.48458],[7.01205,47.47287],[7.003,47.44095],[6.9551,47.40808],[6.94716,47.39698],[6.94818,47.38337],[6.95769,47.37359],[6.97126,47.37218],[7.018,47.38386],[7.05623,47.37035],[7.07007,47.35005],[7.05958,47.32257],[6.97424,47.27856],[6.96347,47.26233],[6.96134,47.23479],[6.89443,47.19393],[6.88913,47.18922],[6.85545,47.14636],[6.76907,47.10751],[6.76011,47.09953],[6.72561,47.0418],[6.62355,46.9811],[6.4812,46.9445],[6.46892,46.93522],[6.46686,46.91997],[6.47548,46.88771],[6.4535,46.8239],[6.45644,46.80534],[6.46722,46.79104],[6.46098,46.76887],[6.15817,46.59343],[6.14872,46.58069],[6.15152,46.56508],[6.16549,46.54399],[6.15811,46.52456],[6.10174,46.46979],[6.09572,46.45418],[6.09704,46.43317],[6.10829,46.41643],[6.16622,46.38839],[6.17817,46.36922],[6.13748,46.31297],[6.13371,46.30227],[6.13038,46.23737],[6.1103,46.22344],[6.08865,46.23081],[6.07717,46.23123],[6.01857,46.21601],[6.00681,46.20752],[6.00388,46.19332],[6.00787,46.16977],[6.01783,46.15564],[6.03509,46.15456],[6.05564,46.16288],[6.12468,46.15415],[6.13778,46.15702],[6.24026,46.22094],[6.24906,46.23299],[6.24707,46.24777],[6.21148,46.31057],[6.21219,46.32485],[6.23946,46.36705],[6.31648,46.41557],[6.41083,46.42495],[6.41748,46.42682],[6.50498,46.46871],[6.63047,46.47435],[6.74665,46.45695],[6.82244,46.42925],[6.81832,46.38181],[6.80484,46.36179],[6.80189,46.34639],[6.81095,46.33359],[6.86491,46.30038],[6.87504,46.28007],[6.86092,46.2439],[6.82698,46.21188],[6.82075,46.19862],[6.81863,46.16592],[6.82259,46.15261],[6.83427,46.14509],[6.90382,46.12971],[6.90491,46.09595],[6.90932,46.08406],[6.92001,46.07721],[6.94898,46.0699],[7.01556,46.00883],[7.05191,45.93066],[7.04533,45.92217],[7.04497,45.92064],[7.04394,45.92036],[6.99582,45.85822],[6.94097,45.83551],[6.84376,45.82387],[6.83102,45.81711],[6.82614,45.80353],[6.82787,45.73217],[6.83174,45.72082],[6.8414,45.71373],[6.90729,45.69124],[6.92419,45.66935],[6.94247,45.66172],[6.97131,45.66528],[7.00597,45.64945],[7.01151,45.63652],[6.9978,45.60877],[6.99643,45.59465],[7.0158,45.52354],[7.02774,45.5102],[7.1072,45.47877],[7.1228,45.44924],[7.13304,45.44001],[7.1856,45.41894],[7.19515,45.40409],[7.17075,45.35069],[7.14232,45.32298],[7.13649,45.30576],[7.14458,45.25048],[7.08417,45.20279],[6.99279,45.19823],[6.98106,45.19368],[6.90009,45.12689],[6.85843,45.11699],[6.78283,45.14228],[6.77056,45.14242],[6.67751,45.11356],[6.6653,45.10289],[6.66501,45.08667],[6.68237,45.04558],[6.69602,45.03395],[6.75744,45.01884],[6.78375,44.9146],[6.7942,44.90161],[6.86698,44.86519],[6.8798,44.86346],[6.93633,44.87461],[7.01795,44.84402],[7.03453,44.82282],[7.03711,44.75009],[7.0496,44.73226],[7.07224,44.72311],[7.08651,44.6968],[7.08666,44.68085],[7.07671,44.67134],[6.99007,44.67203],[6.97413,44.66431],[6.97056,44.64696],[6.97819,44.61784],[6.94659,44.57124],[6.88235,44.53479],[6.87233,44.5195],[6.87892,44.50245],[6.95894,44.43129],[6.95872,44.42908],[6.92167,44.41436],[6.91223,44.40659],[6.90907,44.39477],[6.90972,44.38195],[6.91637,44.36804],[6.99909,44.29414],[7.01181,44.256],[7.01983,44.24558],[7.03259,44.2424],[7.07312,44.2461],[7.1651,44.22112],[7.24533,44.18544],[7.26053,44.16682],[7.27537,44.15947],[7.33878,44.1574],[7.36278,44.13834],[7.37776,44.13416],[7.56283,44.15792],[7.5642,44.15836],[7.56478,44.15817],[7.60548,44.1634],[7.6162,44.16827],[7.63989,44.18928],[7.68608,44.1861],[7.69422,44.17795],[7.68937,44.13869],[7.69445,44.12276],[7.72786,44.08615],[7.72403,44.05704],[7.68603,44.02371],[7.68077,44.0164],[7.66016,43.9672],[7.59624,43.94466],[7.58419,43.93287],[7.56858,43.89159],[7.5271,43.87434],[7.51649,43.86397],[7.51594,43.84915],[7.53622,43.79234],[9.26696,43.39308],[9.8,43.1],[9.9,42.64836]]]]}},"de-berlin-brandenburg":{type:"Feature",id:"de-berlin-brandenburg",properties:{},geometry:{type:"Polygon",coordinates:[[[11.32141,53.11711],[12.09595,53.36694],[12.88147,53.20274],[13.78235,53.50765],[14.16687,53.41608],[14.10645,53.28164],[14.29871,53.27507],[14.41956,53.32431],[14.19434,52.93871],[14.19434,52.82932],[14.57336,52.60972],[14.57336,52.36218],[14.71619,52.05249],[14.61182,51.84257],[14.76563,51.54975],[14.36462,51.519],[14.1449,51.54975],[13.99109,51.36835],[13.2605,51.39578],[13.07373,51.65211],[13.13965,51.86971],[12.67273,52.01532],[12.40356,52.03222],[12.22229,52.14697],[12.32117,52.50619],[12.16736,52.51956],[12.23877,52.87245],[11.60156,52.96849],[11.32141,53.11711]]]}},"de-ostwestfalen-lippe":{type:"Feature",id:"de-ostwestfalen-lippe",properties:{},geometry:{type:"Polygon",coordinates:[[[8.04337,52.05756],[8.42583,52.19919],[8.43846,52.35394],[8.30866,52.39929],[8.28438,52.4581],[8.67096,52.56967],[9.22028,52.49616],[9.06097,52.28328],[9.47365,51.86716],[9.46266,51.64103],[9.26285,51.46641],[9.15648,51.43569],[8.80348,51.43218],[8.54444,51.46003],[8.42239,51.55658],[8.31076,51.72252],[8.12645,51.86844],[8.04337,52.05756]]]}},germany:{type:"Feature",id:"germany",properties:{},geometry:{type:"Polygon",coordinates:[[[7.05048,52.62973],[7.21252,53.20274],[6.56982,53.61858],[8.30772,55.1467],[8.6483,54.96421],[9.45305,54.83313],[9.95018,54.82838],[11.99913,54.44689],[13.3889,54.89162],[14.15245,54.47562],[14.26231,53.78037],[14.44359,53.27096],[14.36119,53.0668],[14.16344,52.97097],[14.13597,52.84508],[14.62486,52.60555],[14.5919,52.35463],[14.71825,52.24042],[14.74571,52.06516],[14.60838,51.83153],[14.74571,51.69554],[14.76768,51.54206],[14.98741,51.43261],[15.03136,51.27824],[14.94347,51.04744],[14.85558,50.88138],[14.77867,50.81548],[14.64684,50.85017],[14.5974,50.99215],[14.32823,51.07506],[14.32823,50.88138],[13.01537,50.49508],[12.48253,50.38663],[12.33421,50.18305],[12.1804,50.30952],[12.12547,50.25686],[12.22984,50.09856],[12.55394,49.92912],[12.4276,49.75199],[12.5045,49.68807],[12.77916,49.35286],[12.93297,49.36002],[13.03185,49.28841],[13.57018,48.96489],[13.80089,48.81319],[13.75694,48.52297],[13.52074,48.58842],[13.45482,48.57388],[13.40538,48.36994],[13.23509,48.28959],[12.99889,48.24571],[12.75169,48.12118],[12.9879,47.86385],[12.91649,47.71623],[13.04832,47.72362],[13.09776,47.67186],[13.0648,47.50885],[12.93846,47.47173],[12.77367,47.5793],[12.8286,47.60894],[12.70226,47.70144],[12.1859,47.70514],[12.16942,47.62005],[11.86729,47.60524],[11.63109,47.59412],[11.25755,47.40114],[10.98839,47.40486],[10.88402,47.52369],[10.67528,47.55707],[10.45006,47.54594],[10.46654,47.41973],[10.34019,47.3081],[10.19737,47.27457],[10.21385,47.38998],[10.10948,47.3751],[10.08202,47.46431],[9.84581,47.55336],[9.40636,47.55336],[9.09874,47.68388],[8.90236,47.65521],[8.85292,47.70329],[8.80348,47.74025],[8.76915,47.71993],[8.80486,47.70329],[8.79524,47.68388],[8.7307,47.69867],[8.73482,47.7227],[8.71284,47.7384],[8.7513,47.76887],[8.69637,47.76425],[8.65654,47.8067],[8.63594,47.76518],[8.61122,47.80947],[8.57002,47.79286],[8.48763,47.77902],[8.41621,47.71808],[8.41347,47.68111],[8.46428,47.65891],[8.53706,47.67001],[8.60985,47.67741],[8.63457,47.64966],[8.59886,47.64319],[8.61122,47.6219],[8.56865,47.60061],[8.56865,47.6219],[8.52745,47.64041],[8.45879,47.60801],[8.50273,47.58672],[8.38463,47.57004],[8.33107,47.57375],[8.29399,47.61542],[8.2061,47.62653],[8.10173,47.56819],[7.96852,47.5617],[7.92046,47.55429],[7.89024,47.59505],[7.8257,47.58949],[7.81197,47.56726],[7.6815,47.54038],[7.6403,47.56448],[7.69386,47.5756],[7.6815,47.59412],[7.64854,47.60061],[7.61421,47.58394],[7.50641,47.70237],[7.79205,48.60749],[8.22876,48.97481],[6.84174,49.17093],[6.37482,49.48597],[6.53961,49.80963],[6.1441,50.01833],[6.19835,50.21119],[6.41808,50.35159],[6.19835,50.63117],[6.02257,50.77034],[6.02257,51.07506],[6.24229,51.37778],[5.97862,51.81456],[6.1496,51.90022],[6.44073,51.85105],[6.828,51.95611],[6.68518,52.05587],[7.04773,52.23957],[6.99554,52.45768],[6.70166,52.48445],[6.72913,52.64973],[7.05048,52.62973]]]}},"Heidelberg-University":{type:"Feature",id:"Heidelberg-University",properties:{},geometry:{type:"Polygon",coordinates:[[[8.67039,49.64365],[8.73804,49.63932],[8.80306,49.62648],[8.86292,49.60564],[8.91529,49.57762],[8.95817,49.54349],[8.98989,49.50458],[9.00928,49.46239],[9.01561,49.41856],[9.00868,49.37477],[8.98878,49.33269],[8.95671,49.29395],[8.91371,49.26002],[8.86146,49.23218],[8.80194,49.21151],[8.73744,49.19879],[8.67039,49.19449],[8.60334,49.19879],[8.53883,49.21151],[8.47931,49.23218],[8.42706,49.26002],[8.38407,49.29395],[8.352,49.33269],[8.3321,49.37477],[8.32516,49.41856],[8.33149,49.46239],[8.35088,49.50458],[8.38261,49.54349],[8.42548,49.57762],[8.47786,49.60564],[8.53771,49.62648],[8.60273,49.63932],[8.67039,49.64365]]]}},hungary:{type:"Feature",id:"hungary",properties:{},geometry:{type:"Polygon",coordinates:[[[18.43643,45.73111],[17.67426,45.83454],[17.57675,45.92823],[17.35153,45.94303],[17.14966,46.16081],[16.52756,46.50028],[16.3147,46.86582],[16.11969,46.86582],[16.28448,46.99337],[16.48224,47.01584],[16.5152,47.1505],[16.42731,47.2177],[16.43829,47.41136],[16.66763,47.44852],[16.67587,47.60616],[16.43829,47.65614],[16.54816,47.75964],[16.71844,47.73563],[16.75003,47.68111],[17.08099,47.70791],[17.04254,47.86293],[17.09473,47.96234],[17.20734,48.02484],[17.75665,47.74486],[18.71246,47.76702],[18.85529,47.82606],[18.77838,47.87767],[18.75641,47.98808],[18.82233,48.04687],[19.50348,48.1056],[19.55566,48.25028],[19.92096,48.14227],[20.34943,48.30329],[20.54718,48.54389],[20.82184,48.58751],[21.14044,48.50751],[21.47003,48.58751],[21.70074,48.36902],[21.8367,48.34073],[22.2171,48.42282],[22.38327,48.24205],[22.50549,48.24845],[22.61948,48.1056],[22.83371,48.11843],[22.90649,47.95406],[22.59064,47.75779],[22.48077,47.81131],[22.42584,47.74486],[22.32147,47.75779],[22.02759,47.51442],[22.03033,47.38161],[21.9397,47.3658],[21.48926,46.75868],[21.52908,46.73233],[21.4151,46.61737],[21.33133,46.61549],[21.10611,46.23875],[20.79575,46.27863],[20.7106,46.15035],[20.25055,46.13227],[19.82758,46.16461],[19.54742,46.17793],[19.51447,46.1018],[18.80997,45.87567],[18.70285,45.91294],[18.43643,45.73111]]]}},iceland:{type:"Feature",id:"iceland",properties:{},geometry:{type:"Polygon",coordinates:[[[-25.21,65.81],[-23.17,66.89],[-19.51,66.29],[-19.09,67.46],[-17.98,67.34],[-17.38,66.83],[-14.01,66.72],[-12.36,64.54],[-17.21,62.92],[-23.63,63.15],[-25.21,65.81]]]}},italy:{type:"Feature",id:"italy",properties:{},geometry:{type:"Polygon",coordinates:[[[7.6,43.5],[7.49542,43.86523],[7.69043,44.0718],[7.69043,44.19796],[7.42676,44.15068],[6.9873,44.26094],[6.85547,44.55916],[7.03125,44.73113],[7.00928,44.87144],[6.72363,44.91814],[6.5918,45.12005],[7.09717,45.25942],[7.14111,45.41388],[6.96533,45.61404],[6.76758,45.79817],[7.03125,45.9053],[7.55859,45.9817],[7.77832,45.93587],[8.12988,46.13417],[8.08594,46.30141],[8.48145,46.46813],[8.61328,46.13417],[8.81104,46.10371],[9.05273,45.8288],[9.07471,46.11894],[9.27246,46.25585],[9.25049,46.43786],[9.44824,46.49839],[9.49219,46.31658],[9.68994,46.31658],[9.95361,46.36209],[10.06348,46.17983],[10.17334,46.25585],[10.0415,46.453],[10.08545,46.60417],[10.26123,46.66452],[10.45898,46.49839],[10.50293,46.61926],[10.39307,46.70974],[10.41504,46.86019],[10.61279,46.87521],[11.03027,46.76997],[11.16211,46.93526],[11.27197,46.99524],[11.53564,47.01023],[11.7334,46.99524],[12.2168,47.10004],[12.15088,46.93526],[12.43652,46.70974],[12.96387,46.61926],[13.73291,46.54375],[13.71094,46.42271],[13.40332,46.33176],[13.40332,46.22545],[13.66699,46.17983],[13.51318,46.05799],[13.64502,45.96642],[13.5791,45.85941],[13.93066,45.64477],[13.82629,45.5756],[13.6,45.6294],[12.9,45.4],[12.8,45],[18.9,40.3],[18.5,39],[15,36],[11,38],[9.6,43.2],[7.6,43.5]]]}},IT_Lazio:{type:"Feature",id:"IT_Lazio",properties:{},geometry:{type:"Polygon",coordinates:[[[13.23814,42.1301],[13.19363,42.15923],[13.17062,42.15169],[13.12434,42.17797],[13.08798,42.17886],[13.08575,42.14318],[13.0317,42.12309],[13.01946,42.07634],[13.05545,42.01736],[13.10194,42.00898],[13.10589,42.02698],[13.36437,41.92475],[13.384,41.90419],[13.35751,41.8694],[13.38052,41.81709],[13.4169,41.83467],[13.50508,41.8016],[13.52044,41.77297],[13.57182,41.7543],[13.66214,41.81144],[13.70555,41.78747],[13.72956,41.7989],[13.7629,41.7488],[13.81162,41.75426],[13.85645,41.73124],[13.89541,41.73405],[13.98311,41.66238],[14.01182,41.60835],[13.99895,41.57448],[14.02596,41.55567],[14.00526,41.53875],[14.0275,41.52321],[13.97291,41.49404],[13.99278,41.48208],[13.9779,41.46249],[13.90257,41.42273],[13.86123,41.41763],[13.8886,41.40081],[13.8688,41.36272],[13.88974,41.29748],[13.82898,41.28154],[13.83083,41.2502],[13.77126,41.24136],[13.45667,40.77769],[11.52381,41.03693],[11.44922,42.37798],[11.48889,42.43937],[11.61771,42.43604],[11.61626,42.48862],[11.56011,42.51595],[11.58852,42.54226],[11.57917,42.56803],[11.61401,42.55723],[11.64337,42.56635],[11.71111,42.61091],[11.73597,42.60666],[11.74975,42.63965],[11.80478,42.644],[11.77554,42.70951],[11.80156,42.70719],[11.81949,42.74543],[11.74602,42.78576],[11.77424,42.82107],[11.80685,42.79485],[11.8137,42.82267],[11.84851,42.84008],[11.90558,42.8325],[11.92743,42.78092],[11.97948,42.76459],[11.96293,42.72669],[11.9301,42.71295],[11.94133,42.6833],[12.03,42.64324],[12.10666,42.66464],[12.12406,42.64929],[12.16101,42.67691],[12.20434,42.66046],[12.24292,42.62906],[12.22819,42.61077],[12.24626,42.60256],[12.23866,42.57218],[12.27504,42.55991],[12.26676,42.53347],[12.29027,42.51904],[12.27477,42.50921],[12.30735,42.4973],[12.29041,42.49164],[12.32537,42.49476],[12.35123,42.47365],[12.39017,42.49819],[12.41905,42.49765],[12.41244,42.46756],[12.43038,42.45802],[12.41368,42.45517],[12.41365,42.4256],[12.4636,42.42909],[12.44469,42.39882],[12.51169,42.40311],[12.52874,42.36445],[12.60642,42.40245],[12.61481,42.46511],[12.64109,42.4678],[12.6495,42.44331],[12.67465,42.44242],[12.74156,42.47053],[12.71114,42.50079],[12.89273,42.5635],[12.88052,42.60935],[13.00524,42.61622],[13.02522,42.64],[13.06423,42.62427],[13.13,42.66053],[13.14645,42.64714],[13.17506,42.66707],[13.19025,42.73363],[13.25415,42.72145],[13.2645,42.74019],[13.28589,42.74049],[13.35851,42.69533],[13.35059,42.66968],[13.37022,42.6507],[13.4092,42.64383],[13.39493,42.59223],[13.29421,42.5705],[13.28454,42.58349],[13.24686,42.57367],[13.19228,42.58849],[13.15673,42.54102],[13.17934,42.48031],[13.11708,42.44489],[13.19508,42.39017],[13.15427,42.35797],[13.22737,42.32031],[13.23563,42.27871],[13.28229,42.23874],[13.33653,42.22338],[13.34238,42.19939],[13.3808,42.18142],[13.34871,42.17689],[13.35488,42.16769],[13.32819,42.16483],[13.30621,42.13923],[13.23814,42.1301]]]}},"Politecnico-di-Milano":{type:"Feature",id:"Politecnico-di-Milano",properties:{},geometry:{type:"Polygon",coordinates:[[[9.22852,45.68471],[9.29123,45.68038],[9.3515,45.66755],[9.40699,45.64672],[9.45556,45.61871],[9.49533,45.58459],[9.52478,45.54569],[9.54279,45.50351],[9.5487,45.45968],[9.5423,45.41589],[9.52388,45.37381],[9.49415,45.33505],[9.45428,45.30111],[9.40581,45.27326],[9.3506,45.25258],[9.29074,45.23985],[9.22852,45.23555],[9.16629,45.23985],[9.10644,45.25258],[9.05122,45.27326],[9.00275,45.30111],[8.96288,45.33505],[8.93316,45.37381],[8.91473,45.41589],[8.90833,45.45968],[8.91424,45.50351],[8.93225,45.54569],[8.9617,45.58459],[9.00147,45.61871],[9.05004,45.64672],[9.10553,45.66755],[9.16581,45.68038],[9.22852,45.68471]]]}},IT_Roma_Capitale:{type:"Feature",id:"IT_Roma_Capitale",properties:{},geometry:{type:"Polygon",coordinates:[[[11.6,42.16],[12.28,42.2],[12.52,42.31],[13.27,41.92],[13.15,41.58],[12.6,41.16],[11.6,42.16]]]}},south_tyrol:{type:"Feature",id:"south_tyrol",properties:{},geometry:{type:"Polygon",coordinates:[[[10.45624,46.86582],[10.73639,46.89211],[10.82977,46.80946],[10.96161,46.81322],[11.1319,46.99149],[11.49067,47.01233],[11.68121,47.04018],[11.7691,47.01023],[12.16736,47.115],[12.28546,47.08322],[12.18384,46.98213],[12.30469,46.85831],[12.37335,46.73421],[12.49969,46.67017],[12.34039,46.61737],[12.08771,46.64944],[12.0163,46.52297],[11.8515,46.49272],[11.66336,46.48657],[11.56929,46.34077],[11.399,46.25585],[11.18958,46.21072],[11.13739,46.2867],[11.20193,46.44732],[10.91904,46.42603],[10.61966,46.43833],[10.44113,46.49036],[10.36766,46.68854],[10.45624,46.86582]]]}},trentino:{type:"Feature",id:"trentino",properties:{},geometry:{type:"Polygon",coordinates:[[[10.49332,46.35641],[10.59219,46.46624],[10.76317,46.49697],[10.84076,46.45536],[11.07971,46.54469],[11.23627,46.50123],[11.21086,46.32559],[11.1779,46.27341],[11.23352,46.2473],[11.32416,46.30235],[11.5583,46.40378],[11.62628,46.5069],[11.83502,46.54233],[11.91399,46.44306],[11.85356,46.34124],[11.99158,46.18363],[11.84464,46.08466],[11.72791,46.07704],[11.69907,45.95592],[11.51093,45.97979],[11.28845,45.8814],[11.21567,45.76273],[11.16074,45.68316],[10.90256,45.66013],[10.82016,45.71097],[10.84076,45.81827],[10.51529,45.76752],[10.41504,46.00269],[10.51941,46.2112],[10.49332,46.35641]]]}},"Yarmouk-University":{type:"Feature",id:"Yarmouk-University",properties:{},geometry:{type:"Polygon",coordinates:[[[35.85811,32.76124],[35.91021,32.75691],[35.96029,32.7441],[36.00642,32.72331],[36.04681,32.69532],[36.07992,32.66124],[36.10446,32.62236],[36.11951,32.5802],[36.1245,32.53638],[36.11926,32.49258],[36.10399,32.45048],[36.0793,32.4117],[36.04615,32.37772],[36.00581,32.34985],[35.95982,32.32914],[35.90996,32.31639],[35.85811,32.31208],[35.80627,32.31639],[35.75641,32.32914],[35.71042,32.34985],[35.67008,32.37772],[35.63693,32.4117],[35.61224,32.45048],[35.59697,32.49258],[35.59173,32.53638],[35.59672,32.5802],[35.61177,32.62236],[35.63631,32.66124],[35.66941,32.69532],[35.70981,32.72331],[35.75593,32.7441],[35.80602,32.75691],[35.85811,32.76124]]]}},kosovo:{type:"Feature",id:"kosovo",properties:{},geometry:{type:"Polygon",coordinates:[[[20.68323,41.85101],[20.64878,41.8621],[20.62895,41.87788],[20.59321,41.87344],[20.5834,41.88906],[20.57131,41.92032],[20.61548,41.94279],[20.61932,41.97284],[20.60727,41.98358],[20.58959,42.03994],[20.56682,42.05515],[20.55,42.08081],[20.5618,42.12415],[20.51171,42.21912],[20.4557,42.26696],[20.40232,42.28017],[20.39286,42.29328],[20.35016,42.30573],[20.34327,42.32034],[20.32919,42.32272],[20.30564,42.30975],[20.28975,42.31841],[20.25651,42.31381],[20.23897,42.32339],[20.24172,42.33451],[20.23137,42.34709],[20.24041,42.36756],[20.20299,42.40034],[20.2216,42.42031],[20.18897,42.44976],[20.18995,42.46123],[20.16241,42.50248],[20.09905,42.52756],[20.07781,42.55062],[20.05218,42.55643],[20.0611,42.56636],[20.07983,42.63561],[20.09833,42.65387],[20.02597,42.70293],[20.01357,42.73718],[20.0294,42.76543],[20.05828,42.77918],[20.17177,42.77208],[20.25749,42.77015],[20.26633,42.81006],[20.26709,42.81838],[20.40458,42.85177],[20.48421,42.87209],[20.52629,42.8857],[20.48117,42.92979],[20.48712,42.94371],[20.52036,42.97599],[20.538,42.97944],[20.54736,42.96696],[20.56759,43.00047],[20.59714,43.01791],[20.61815,43.00738],[20.63582,43.01263],[20.65529,43.03791],[20.66666,43.05941],[20.65555,43.06668],[20.65535,43.07614],[20.69024,43.09046],[20.68474,43.11734],[20.6571,43.13426],[20.60822,43.17079],[20.59313,43.19966],[20.59288,43.20807],[20.60326,43.21586],[20.61577,43.20947],[20.6759,43.21404],[20.71781,43.23861],[20.72976,43.25396],[20.78861,43.2509],[20.79902,43.26973],[20.82402,43.27416],[20.88056,43.23237],[20.89633,43.2064],[20.89185,43.19741],[20.86038,43.18418],[20.88322,43.17221],[20.968,43.12786],[20.97317,43.13725],[21.00171,43.14304],[21.02916,43.13467],[21.05505,43.11374],[21.0768,43.12108],[21.0795,43.1332],[21.09221,43.14057],[21.11813,43.11808],[21.14314,43.11815],[21.15722,43.09497],[21.14943,43.08237],[21.15915,43.04152],[21.17346,43.02927],[21.17228,43.01229],[21.18865,43.01181],[21.19528,43.02655],[21.20838,43.03051],[21.24098,43.01253],[21.25156,42.98139],[21.24127,42.95446],[21.27793,42.90132],[21.30679,42.91192],[21.33168,42.90934],[21.34717,42.90549],[21.36699,42.87815],[21.44,42.87777],[21.44185,42.85103],[21.43,42.84464],[21.42818,42.80712],[21.41748,42.77388],[21.39541,42.75691],[21.39835,42.75158],[21.45096,42.75723],[21.46671,42.74511],[21.48212,42.7524],[21.53015,42.73143],[21.56111,42.74322],[21.59623,42.731],[21.59439,42.7097],[21.67045,42.68104],[21.68037,42.6972],[21.73393,42.71782],[21.7767,42.72243],[21.77888,42.69807],[21.80449,42.65599],[21.77972,42.64209],[21.77173,42.62838],[21.77008,42.60166],[21.75125,42.58434],[21.75095,42.55505],[21.72961,42.54235],[21.70728,42.54294],[21.70222,42.53272],[21.71414,42.51308],[21.69423,42.49888],[21.67446,42.49033],[21.67458,42.48071],[21.62857,42.45056],[21.65142,42.40951],[21.62852,42.37199],[21.57112,42.35813],[21.5391,42.36425],[21.53133,42.33801],[21.56671,42.3189],[21.59596,42.27006],[21.58272,42.25167],[21.52186,42.23975],[21.50594,42.2651],[21.44573,42.27489],[21.43843,42.25552],[21.44638,42.23142],[21.43208,42.22775],[21.39412,42.24212],[21.3493,42.20076],[21.33667,42.1989],[21.33915,42.18753],[21.30895,42.13871],[21.32219,42.10706],[21.30296,42.10363],[21.29279,42.10824],[21.25722,42.08817],[21.23557,42.08617],[21.21595,42.09461],[21.20791,42.12657],[21.16719,42.1714],[21.16274,42.19266],[21.11303,42.20093],[21.05269,42.16308],[21.02143,42.14681],[20.92263,42.12229],[20.89259,42.09216],[20.83556,42.08285],[20.79199,42.07669],[20.76879,42.04106],[20.77208,41.95756],[20.77892,41.91873],[20.74544,41.8779],[20.68323,41.85101]]]}},"Universit-Mohammed-V-Rabat":{type:"Feature",id:"Universit-Mohammed-V-Rabat",properties:{},geometry:{type:"Polygon",coordinates:[[[-6.84395,34.22335],[-6.79097,34.21902],[-6.74003,34.20621],[-6.69312,34.18541],[-6.65205,34.15742],[-6.61839,34.12333],[-6.59343,34.08446],[-6.57813,34.0423],[-6.57307,33.99847],[-6.57841,33.95467],[-6.59394,33.91257],[-6.61905,33.8738],[-6.65276,33.83982],[-6.69379,33.81195],[-6.74054,33.79124],[-6.79124,33.7785],[-6.84395,33.77419],[-6.89666,33.7785],[-6.94736,33.79124],[-6.99412,33.81195],[-7.03514,33.83982],[-7.06886,33.8738],[-7.09397,33.91257],[-7.1095,33.95467],[-7.11484,33.99847],[-7.10977,34.0423],[-7.09447,34.08446],[-7.06952,34.12333],[-7.03586,34.15742],[-6.99478,34.18541],[-6.94787,34.20621],[-6.89694,34.21902],[-6.84395,34.22335]]]}},norway:{type:"Feature",id:"norway",properties:{},geometry:{type:"Polygon",coordinates:[[[25.98816,69.6179],[25.24109,68.60752],[20.42908,68.97318],[16.9519,67.9499],[13.77686,64.59561],[14.28223,64.47279],[14.08447,63.99524],[13.02979,64.10101],[12.00806,63.2633],[12.14813,61.6586],[12.87323,61.31245],[12.67548,61.0636],[12.26074,61.00241],[12.60681,60.50593],[12.49146,60.08128],[12.17285,59.88756],[11.87622,59.84895],[11.94214,59.69547],[11.6922,59.58998],[11.84601,59.25044],[11.64276,58.89471],[11.45325,58.88194],[11.44775,59.00168],[11.34888,59.11254],[11.18134,59.08009],[11.06186,58.97054],[8,57.5],[3,57.5],[3,83],[40,83],[35,71],[29.61365,69.28629],[27.98767,69.99711],[25.98816,69.6179]]]}},poland:{type:"Feature",id:"poland",properties:{},geometry:{type:"Polygon",coordinates:[[[14.03,52.84],[14.34,53.26],[14.13,54.16],[15.95,54.52],[16.31,54.76],[17.13,54.97],[18.29,55.08],[18.9,54.98],[19.69,54.5],[21.47,54.37],[22.9,54.46],[23.39,54.3],[24.01,53.17],[24.03,52.71],[23.29,52.3],[23.74,52.09],[23.64,51.61],[24.24,50.86],[24.11,50.41],[23.78,50.34],[22.77,49.55],[22.96,48.97],[22.18,49.1],[21.6,49.38],[20.93,49.24],[20.47,49.34],[20.12,49.13],[19.76,49.14],[19.45,49.51],[18.94,49.34],[18.48,49.85],[17.83,49.92],[17.54,50.21],[17.06,50.35],[17.08,50.18],[16.65,50.05],[16.11,50.41],[16.3,50.6],[16.01,50.54],[15.34,50.73],[15.14,50.93],[14.78,50.82],[14.94,51.27],[14.5,51.81],[14.66,52.05],[14.53,52.57],[14.03,52.84]]]}},slovenia:{type:"Feature",id:"slovenia",properties:{},geometry:{type:"Polygon",coordinates:[[[15.17101,45.41273],[15.06731,45.4781],[14.98353,45.48726],[14.93027,45.51869],[14.91295,45.46869],[14.81398,45.45019],[14.77755,45.49724],[14.71885,45.52386],[14.68383,45.51924],[14.68367,45.57107],[14.58902,45.61966],[14.59477,45.65727],[14.51653,45.5974],[14.49636,45.52968],[14.32388,45.46048],[14.28251,45.47949],[14.26083,45.47352],[14.2367,45.49569],[14.21022,45.45962],[14.1328,45.46542],[14.06694,45.47615],[14.01187,45.50769],[13.98752,45.49945],[14.00668,45.4739],[13.99154,45.44854],[13.91789,45.44329],[13.88867,45.416],[13.81063,45.42531],[13.7856,45.45577],[13.67553,45.43241],[13.37688,45.56647],[13.63953,45.6426],[13.72158,45.60472],[13.83759,45.59226],[13.89962,45.63295],[13.82754,45.67917],[13.82429,45.70266],[13.78961,45.73525],[13.66355,45.79008],[13.62279,45.78613],[13.58835,45.80154],[13.56531,45.85522],[13.62633,45.93894],[13.62975,45.97662],[13.59233,45.97929],[13.57124,45.9591],[13.52998,45.95627],[13.46729,46.00147],[13.49765,46.03741],[13.4896,46.06574],[13.58839,46.11268],[13.63712,46.14524],[13.65358,46.17505],[13.57147,46.17434],[13.54859,46.19982],[13.48189,46.21479],[13.42003,46.19662],[13.40026,46.21037],[13.40304,46.23284],[13.36653,46.30266],[13.43369,46.33243],[13.43247,46.36779],[13.56263,46.40895],[13.59357,46.44846],[13.68393,46.44947],[13.71321,46.53296],[13.79725,46.5164],[13.91305,46.53108],[14.00849,46.49169],[14.09406,46.49538],[14.12664,46.4852],[14.16569,46.44341],[14.28242,46.45347],[14.3259,46.44111],[14.43178,46.4568],[14.45113,46.43239],[14.52618,46.43623],[14.56677,46.38549],[14.58993,46.44479],[14.65658,46.45447],[14.71191,46.50954],[14.80818,46.51778],[14.81442,46.55093],[14.86094,46.61239],[14.9102,46.61569],[14.95398,46.64257],[14.98376,46.61868],[15.02973,46.65796],[15.10645,46.66965],[15.23727,46.64973],[15.41364,46.66553],[15.46237,46.64732],[15.47411,46.6226],[15.53427,46.64346],[15.53636,46.6761],[15.59201,46.69952],[15.62405,46.69039],[15.65624,46.71643],[15.767,46.70899],[15.83801,46.73237],[15.91476,46.71958],[16.02919,46.67033],[16.02955,46.68778],[15.99495,46.71178],[15.97505,46.74967],[15.98671,46.84189],[16.0553,46.85049],[16.11022,46.87912],[16.15425,46.86525],[16.23302,46.88667],[16.29431,46.8824],[16.34649,46.85476],[16.36058,46.8278],[16.34711,46.79707],[16.32245,46.79068],[16.33977,46.7799],[16.33186,46.75896],[16.38893,46.70785],[16.4383,46.69655],[16.42822,46.65301],[16.40159,46.6439],[16.51477,46.57299],[16.54136,46.53627],[16.5416,46.50887],[16.611,46.48393],[16.61889,46.46203],[16.52219,46.45842],[16.47451,46.50108],[16.36776,46.53371],[16.2582,46.489],[16.28533,46.42441],[16.3168,46.40141],[16.30574,46.36921],[16.18689,46.36804],[16.14548,46.39515],[16.06959,46.38154],[16.08614,46.34087],[16.04058,46.32708],[16.01819,46.29964],[15.80777,46.25091],[15.79649,46.21296],[15.77128,46.19937],[15.67996,46.21707],[15.65737,46.20838],[15.65639,46.18456],[15.62037,46.16163],[15.61899,46.11595],[15.63483,46.09529],[15.71869,46.06873],[15.74241,46.04578],[15.71612,45.99489],[15.71645,45.9178],[15.69237,45.90013],[15.69375,45.87111],[15.71776,45.8416],[15.6441,45.81058],[15.57467,45.83999],[15.52333,45.81155],[15.49115,45.82041],[15.47514,45.78666],[15.40343,45.78216],[15.28683,45.73391],[15.27435,45.72408],[15.29763,45.70782],[15.36329,45.72191],[15.41517,45.65443],[15.39705,45.62929],[15.31501,45.62356],[15.31503,45.60696],[15.29266,45.60163],[15.30852,45.58653],[15.31145,45.5423],[15.39496,45.48325],[15.34824,45.44665],[15.27515,45.45599],[15.22848,45.41683],[15.17101,45.41273]]]}},spain:{type:"Feature",id:"spain",properties:{},geometry:{type:"MultiPolygon",coordinates:[[[[-19,29],[-13,30],[-13,29],[-14,27.8],[-19,27],[-19,29]]],[[[-8.89106,41.82289],[-10,44],[-4,44],[-1.77005,43.37605],[-1.71005,43.37569],[-1.71135,43.33125],[-1.72259,43.31318],[-1.68904,43.31291],[-1.68811,43.33413],[-1.64467,43.33372],[-1.64498,43.31332],[-1.60299,43.31295],[-1.60344,43.29266],[-1.56359,43.29212],[-1.56305,43.31338],[-1.47799,43.31284],[-1.36677,43.27614],[-1.35688,43.23815],[-1.37037,43.1713],[-1.44231,43.08336],[-1.41983,43.06036],[-1.37307,43.05117],[-1.36407,43.11159],[-1.30203,43.13522],[-1.23549,43.13325],[-1.27955,43.07744],[-1.19232,43.06496],[-1.00619,43.00778],[-0.94234,42.9749],[-0.7562,42.98213],[-0.71484,42.96108],[-0.69685,42.90314],[-0.55118,42.82207],[-0.50442,42.84845],[-0.42889,42.82009],[-0.31648,42.86558],[-0.14563,42.81086],[-0.03143,42.71249],[0.18618,42.7541],[0.30218,42.71777],[0.36422,42.74287],[0.44875,42.71447],[0.62769,42.7224],[0.64118,42.85767],[0.71492,42.88272],[0.9676,42.81811],[1.10878,42.79898],[1.17532,42.73429],[1.36326,42.74155],[1.41137,42.70939],[1.48061,42.71034],[1.4813,42.50107],[1.64436,42.50203],[1.64328,42.54245],[1.73041,42.54342],[1.73164,42.50118],[2.06386,42.50164],[2.06456,42.45902],[2.39693,42.45994],[2.39768,42.41784],[2.48048,42.41797],[2.48098,42.37594],[2.64479,42.37626],[2.64448,42.45924],[2.81133,42.45961],[2.81126,42.50104],[3.06388,42.50085],[3.06388,42.45915],[3.23078,42.45934],[5,40],[4,39],[-2.2,36.5],[-5.6,35.95],[-6,36],[-7.37535,37.15354],[-7.40832,37.16822],[-7.4481,37.39094],[-7.46963,37.40758],[-7.4647,37.45305],[-7.50197,37.51641],[-7.51916,37.52292],[-7.52196,37.57237],[-7.45013,37.66958],[-7.4249,37.75992],[-7.31666,37.83997],[-7.26833,37.98895],[-7.15368,38.01552],[-7.11771,38.05536],[-7.0143,38.02438],[-6.99632,38.10756],[-6.96147,38.20125],[-7.08062,38.15708],[-7.34027,38.44024],[-7.26383,38.73807],[-7.04352,38.87297],[-7.06151,38.90796],[-6.96934,39.01983],[-7.00081,39.08879],[-7.15368,39.09577],[-7.15255,39.16029],[-7.24472,39.19689],[-7.25596,39.28133],[-7.33689,39.35351],[-7.3279,39.45599],[-7.51449,39.58865],[-7.55271,39.67954],[-7.05027,39.67522],[-6.99519,39.81954],[-6.92213,39.87909],[-6.88616,40.02299],[-7.04128,40.13479],[-7.01767,40.26615],[-6.8086,40.34501],[-6.86818,40.44516],[-6.85356,40.60664],[-6.83783,40.87576],[-6.9536,41.03704],[-6.80186,41.03959],[-6.76814,41.13871],[-6.64112,41.26556],[-6.56244,41.26303],[-6.21737,41.5791],[-6.31628,41.64465],[-6.51523,41.64129],[-6.58717,41.68832],[-6.54783,41.85597],[-6.62988,41.91121],[-7.13345,41.94048],[-7.16829,41.87188],[-7.42569,41.78477],[-7.95398,41.84593],[-8.13045,41.78058],[-8.25185,41.90786],[-8.12933,42.03488],[-8.24848,42.1008],[-8.36762,42.05575],[-8.60704,42.03405],[-8.89106,41.82289]]]]}},"Universidad-Autonoma-de-Madrid":{type:"Feature",id:"Universidad-Autonoma-de-Madrid",properties:{},geometry:{type:"Polygon",coordinates:[[[-3.69437,40.77124],[-3.63652,40.76691],[-3.58092,40.75409],[-3.52972,40.73327],[-3.48489,40.70527],[-3.44818,40.67117],[-3.42097,40.63228],[-3.40432,40.59011],[-3.39883,40.54628],[-3.4047,40.50248],[-3.42167,40.46039],[-3.44909,40.42163],[-3.48588,40.38767],[-3.53063,40.35981],[-3.58162,40.33912],[-3.6369,40.32638],[-3.69437,40.32208],[-3.75184,40.32638],[-3.80712,40.33912],[-3.85811,40.35981],[-3.90286,40.38767],[-3.93965,40.42163],[-3.96707,40.46039],[-3.98405,40.50248],[-3.98992,40.54628],[-3.98443,40.59011],[-3.96777,40.63228],[-3.94057,40.67117],[-3.90385,40.70527],[-3.85903,40.73327],[-3.80783,40.75409],[-3.75222,40.76691],[-3.69437,40.77124]]]}},"Universidad-Politcnica-de-Madrid":{type:"Feature",id:"Universidad-Politcnica-de-Madrid",properties:{},geometry:{type:"Polygon",coordinates:[[[-3.7173,40.67259],[-3.65954,40.66826],[-3.60402,40.65544],[-3.55289,40.63463],[-3.50813,40.60662],[-3.47147,40.57252],[-3.44431,40.53363],[-3.42767,40.49146],[-3.42219,40.44764],[-3.42805,40.40384],[-3.445,40.36175],[-3.47238,40.32298],[-3.50912,40.28902],[-3.5538,40.26117],[-3.60472,40.24047],[-3.65992,40.22773],[-3.7173,40.22343],[-3.77469,40.22773],[-3.82989,40.24047],[-3.8808,40.26117],[-3.92549,40.28902],[-3.96222,40.32298],[-3.9896,40.36175],[-4.00656,40.40384],[-4.01241,40.44764],[-4.00693,40.49146],[-3.9903,40.53363],[-3.96314,40.57252],[-3.92647,40.60662],[-3.88172,40.63463],[-3.83059,40.65544],[-3.77507,40.66826],[-3.7173,40.67259]]]}},sweden:{type:"Feature",id:"sweden",properties:{},geometry:{type:"Polygon",coordinates:[[[10.57159,58.2445],[10.63202,58.9245],[11.35712,59.12804],[11.53839,58.91174],[11.62079,58.92308],[11.75812,59.24341],[11.65649,59.61777],[11.85974,59.7121],[11.82129,59.84481],[11.95862,59.91098],[12.15363,59.91235],[12.44476,60.0895],[12.48322,60.32151],[12.56012,60.50458],[12.36511,60.71217],[12.19482,61.01572],[12.64801,61.09415],[12.82928,61.34276],[12.55463,61.55018],[12.42828,61.54495],[12.12341,61.71331],[12.28546,62.26664],[12.03278,62.60851],[12.10968,62.74718],[12.06024,62.89772],[12.18658,62.99765],[11.95587,63.28183],[12.18109,63.47873],[12.1344,63.59012],[12.659,63.9856],[12.90619,64.0722],[13.20831,64.10461],[13.9801,64.03014],[14.06525,64.46214],[13.60382,64.56968],[14.26025,65.11608],[14.31519,65.23831],[14.45251,65.31412],[14.47998,65.62656],[14.57886,65.80953],[14.49097,66.15163],[14.99634,66.17161],[15.4248,66.29337],[15.33691,66.51107],[16.04004,66.93221],[16.37512,67.06743],[16.35864,67.21467],[16.06201,67.42015],[16.1499,67.52957],[16.37512,67.55266],[16.70471,67.91688],[17.25952,68.13067],[17.88025,67.99523],[18.09448,68.19809],[18.06702,68.54432],[18.39661,68.58848],[19.00085,68.52019],[19.89075,68.39109],[20.13245,68.48798],[19.89075,68.55637],[20.28076,68.78613],[19.99512,69.06268],[20.62134,69.08033],[20.86853,69.03518],[21.24756,68.8437],[21.92322,68.60652],[22.90649,68.39514],[23.73596,67.96639],[23.5437,67.8362],[23.62061,67.47492],[23.79639,67.44544],[23.81287,67.26992],[23.63159,67.23806],[24.04358,66.82868],[23.91174,66.57448],[23.71399,66.31986],[24.22485,65.97333],[24.04358,65.64469],[21.00586,63.63894],[18.57239,61.83023],[19.18762,60.53297],[19.11346,60.18387],[19.66827,59.82687],[19.90173,58.07788],[18.78662,56.9869],[16.73218,56.05977],[15.0238,55.72711],[14.36462,55.31977],[13.1163,55.22276],[12.7002,55.30414],[12.82654,55.57834],[12.84851,55.72402],[12.79358,55.83214],[12.6123,56.0751],[12.49146,56.13331],[12.07947,56.30435],[11.35437,57.67185],[10.57159,58.2445]]]}},"Istanbul-Technical-University":{type:"Feature",id:"Istanbul-Technical-University",properties:{},geometry:{type:"Polygon",coordinates:[[[29.02465,41.33019],[29.083,41.32586],[29.13907,41.31304],[29.19071,41.29222],[29.23592,41.26422],[29.27294,41.23011],[29.30037,41.19122],[29.31717,41.14905],[29.3227,41.10523],[29.31678,41.06143],[29.29965,41.01934],[29.272,40.98058],[29.2349,40.94662],[29.18977,40.91876],[29.13835,40.89807],[29.08261,40.88533],[29.02465,40.88103],[28.9667,40.88533],[28.91095,40.89807],[28.85954,40.91876],[28.81441,40.94662],[28.77731,40.98058],[28.74965,41.01934],[28.73253,41.06143],[28.72661,41.10523],[28.73214,41.14905],[28.74893,41.19122],[28.77636,41.23011],[28.81339,41.26422],[28.85859,41.29222],[28.91023,41.31304],[28.96631,41.32586],[29.02465,41.33019]]]}},east_midlands_uk:{type:"Feature",id:"east_midlands_uk",properties:{},geometry:{type:"Polygon",coordinates:[[[0.03031,53.53488],[0.28564,53.56315],[0.48889,53.10722],[0.27299,52.82421],[0.24507,52.7845],[0.27219,52.77279],[0.18631,52.73533],[0.14206,52.7399],[0.08901,52.72361],[0.06361,52.72737],[0.04413,52.71436],[0.04883,52.68175],[0.02104,52.66476],[-0.03129,52.66151],[-0.06373,52.67521],[-0.08777,52.66676],[-0.10221,52.67218],[-0.14108,52.65149],[-0.18003,52.66054],[-0.19288,52.65242],[-0.20605,52.66805],[-0.26064,52.65139],[-0.28925,52.67025],[-0.335,52.67485],[-0.35023,52.66159],[-0.40569,52.64802],[-0.45065,52.65411],[-0.49897,52.63931],[-0.52006,52.64143],[-0.55014,52.61223],[-0.54419,52.59287],[-0.55813,52.59447],[-0.57192,52.58579],[-0.58149,52.59587],[-0.58865,52.58679],[-0.60303,52.58857],[-0.66093,52.56893],[-0.69783,52.5457],[-0.71564,52.52237],[-0.75723,52.51093],[-0.77488,52.51826],[-0.82013,52.51552],[-0.86871,52.52699],[-0.88346,52.51395],[-0.88214,52.49315],[-0.89806,52.4869],[-0.88241,52.47127],[-0.90065,52.45994],[-0.94219,52.46777],[-0.95192,52.47741],[-1.0007,52.47092],[-1.04452,52.44573],[-1.03429,52.43627],[-1.04987,52.42225],[-1.08439,52.43628],[-1.12928,52.41609],[-1.14947,52.39701],[-1.20141,52.39648],[-1.30715,52.49423],[-1.52226,52.57033],[-1.52716,52.58272],[-1.56075,52.59612],[-1.55447,52.61472],[-1.57139,52.6353],[-1.54714,52.64218],[-1.54245,52.65362],[-1.55281,52.66845],[-1.58965,52.68724],[-1.59082,52.69801],[-1.65505,52.69878],[-1.65662,52.72173],[-1.70372,52.7298],[-1.69687,52.75272],[-1.66654,52.78471],[-1.61113,52.78139],[-1.61435,52.78826],[-1.58887,52.79985],[-1.59183,52.80947],[-1.6105,52.81639],[-1.58536,52.8317],[-1.62672,52.85441],[-1.69028,52.86445],[-1.70061,52.86057],[-1.70435,52.86666],[-1.72527,52.85964],[-1.77712,52.88377],[-1.79092,52.88023],[-1.80186,52.88613],[-1.81171,52.88058],[-1.83295,52.8869],[-1.85422,52.93063],[-1.82982,52.94565],[-1.82678,52.97707],[-1.76257,52.99965],[-1.75775,53.01698],[-1.75978,53.03869],[-1.7847,53.04991],[-1.77566,53.05933],[-1.79424,53.08837],[-1.78373,53.10281],[-1.82144,53.13579],[-1.81254,53.15432],[-1.8393,53.1769],[-1.87403,53.19536],[-1.95671,53.21373],[-1.96237,53.22622],[-1.9896,53.21572],[-1.97486,53.23106],[-2.00948,53.26065],[-2.00679,53.35457],[-2.009,53.36201],[-2.03173,53.36573],[-2.03385,53.37517],[-2.00464,53.38633],[-1.99233,53.41519],[-2.02371,53.42055],[-2.02738,53.43233],[-2.01366,53.43988],[-2.00422,53.43592],[-2.00823,53.44155],[-1.98579,53.45523],[-1.98809,53.48033],[-1.97428,53.48838],[-1.97159,53.50434],[-1.92197,53.50995],[-1.92678,53.52095],[-1.91189,53.53803],[-1.89411,53.5336],[-1.87349,53.54041],[-1.84182,53.51989],[-1.82223,53.52108],[-1.80428,53.537],[-1.77188,53.53384],[-1.74155,53.54105],[-1.72318,53.55991],[-1.66945,53.5532],[-1.65103,53.56166],[-1.61581,53.56305],[-1.59636,53.57692],[-1.59109,53.60677],[-1.55023,53.60421],[-1.53078,53.59311],[-1.51867,53.5997],[-1.49656,53.59736],[-1.49512,53.60317],[-1.48371,53.59485],[-1.44763,53.61272],[-1.40036,53.59865],[-1.3767,53.60646],[-1.35612,53.59535],[-1.35143,53.58106],[-1.30782,53.57535],[-1.25803,53.59198],[-1.24825,53.61634],[-1.21778,53.62429],[-1.21602,53.642],[-1.1886,53.63583],[-1.15503,53.64319],[-1.13504,53.63254],[-1.12095,53.64688],[-0.99046,53.6612],[-0.94448,53.65868],[-0.86533,53.63769],[-0.89792,53.58325],[-0.90111,53.5687],[-0.89099,53.56654],[-0.90126,53.54788],[-0.89233,53.53738],[-0.94654,53.52732],[-0.95001,53.51363],[-0.93209,53.51065],[-0.93557,53.5025],[-0.90047,53.47513],[-0.92046,53.46446],[-0.87373,53.46146],[-0.87192,53.46629],[-0.79748,53.45504],[-0.78436,53.46336],[-0.78439,53.47665],[-0.77157,53.47918],[-0.76811,53.4989],[-0.75211,53.50051],[-0.73959,53.51991],[-0.62449,53.51282],[-0.62975,53.45819],[-0.55179,53.4595],[-0.47175,53.47485],[-0.48663,53.48045],[-0.48838,53.50484],[-0.40507,53.51759],[-0.40814,53.53208],[-0.43066,53.54631],[-0.50123,53.53744],[-0.46702,53.54894],[-0.429,53.5745],[-0.41967,53.56375],[-0.33594,53.5586],[-0.30342,53.59077],[-0.30093,53.61636],[-0.24847,53.59364],[-0.25139,53.58463],[-0.23466,53.58623],[-0.22255,53.56799],[-0.19169,53.56844],[-0.21988,53.53258],[-0.21059,53.53168],[-0.20408,53.51174],[-0.2106,53.48626],[-0.18856,53.48451],[-0.1818,53.46862],[-0.15368,53.46565],[-0.14923,53.44667],[-0.13188,53.43591],[-0.12034,53.43357],[-0.08221,53.45112],[-0.10786,53.46987],[-0.0898,53.47765],[-0.09548,53.48596],[-0.07526,53.48931],[-0.06493,53.51878],[-0.01452,53.51538],[0.03031,53.53488]]]}},"england-west-midlands":{type:"Feature",id:"england-west-midlands",properties:{},geometry:{type:"Polygon",coordinates:[[[-3.28493,52.44175],[-3.12706,52.96995],[-1.95817,53.27605],[-1.1222,52.36367],[-1.59859,51.90733],[-2.65611,51.7761],[-3.10848,51.95414],[-3.28493,52.44175]]]}},london_uk:{type:"Feature",id:"london_uk",properties:{},geometry:{type:"Polygon",coordinates:[[[0.23926,51.43251],[0.23923,51.43329],[0.23926,51.43251],[0.23717,51.4241],[0.205,51.39919],[0.18385,51.37628],[0.16188,51.36621],[0.15614,51.3539],[0.1603,51.31026],[0.14958,51.30173],[0.14213,51.29098],[0.06692,51.27361],[-0.01594,51.26864],[-0.05766,51.2586],[-0.10949,51.25943],[-0.16628,51.26848],[-0.19872,51.25854],[-0.22666,51.2587],[-0.27352,51.28757],[-0.31813,51.30077],[-0.33644,51.31532],[-0.40313,51.30581],[-0.44436,51.31987],[-0.47985,51.3302],[-0.50762,51.37142],[-0.53414,51.39494],[-0.54109,51.42774],[-0.53264,51.43923],[-0.5152,51.46248],[-0.49617,51.48894],[-0.50203,51.53945],[-0.5278,51.55474],[-0.53166,51.5611],[-0.53569,51.57289],[-0.53596,51.5778],[-0.53455,51.58275],[-0.53376,51.58792],[-0.51516,51.6337],[-0.49776,51.65205],[-0.4901,51.66912],[-0.45924,51.67692],[-0.44684,51.69442],[-0.42579,51.71213],[-0.39306,51.715],[-0.38079,51.71654],[-0.34459,51.70948],[-0.2838,51.71515],[-0.26707,51.71395],[-0.23509,51.69056],[-0.22093,51.68445],[-0.17729,51.68441],[-0.10644,51.69165],[-0.05899,51.68257],[0.02324,51.678],[0.0691,51.68854],[0.10856,51.68336],[0.19863,51.65015],[0.25714,51.61353],[0.28187,51.57813],[0.29039,51.55903],[0.26811,51.50265],[0.26882,51.49783],[0.26782,51.49042],[0.2659,51.47443],[0.25509,51.46053],[0.23586,51.44791],[0.23926,51.43251]]]}},united_kingdom:{type:"Feature",id:"united_kingdom",properties:{name:"United Kingdom",source:"OpenStreetMap"},geometry:{type:"Polygon",coordinates:[[[-7.24863,55.06999],[-6.96705,55.19847],[-6.59182,55.36664],[-9.93166,58.01975],[0.32957,61.43878],[2.43894,51.64531],[0.72508,50.42953],[-7.66848,49.03788],[-5.93264,51.46771],[-5.4053,53.54032],[-6.07527,54.0096],[-6.28173,54.11135],[-6.309,54.10669],[-6.31788,54.09098],[-6.33629,54.09472],[-6.33993,54.11189],[-6.3662,54.11374],[-6.36237,54.0766],[-6.37492,54.06914],[-6.37907,54.06909],[-6.37911,54.06907],[-6.37918,54.06902],[-6.39105,54.05885],[-6.41198,54.06306],[-6.44345,54.05649],[-6.45607,54.07252],[-6.47779,54.07709],[-6.4713,54.0663],[-6.51051,54.05268],[-6.53187,54.05968],[-6.55772,54.04917],[-6.58643,54.05757],[-6.59499,54.04462],[-6.62381,54.03646],[-6.66426,54.06917],[-6.66202,54.09283],[-6.64506,54.096],[-6.66127,54.12266],[-6.64886,54.12138],[-6.63961,54.13187],[-6.63436,54.16317],[-6.66539,54.19316],[-6.70601,54.20005],[-6.72106,54.18197],[-6.74076,54.18192],[-6.75617,54.19926],[-6.77562,54.19895],[-6.80097,54.21317],[-6.80042,54.2211],[-6.81617,54.22302],[-6.82774,54.26149],[-6.87804,54.27924],[-6.87229,54.28794],[-6.859,54.28191],[-6.85087,54.29728],[-6.87594,54.34641],[-6.90626,54.3503],[-6.91129,54.37474],[-6.93074,54.37575],[-6.9237,54.38284],[-6.95963,54.39221],[-6.98165,54.40946],[-6.99601,54.40538],[-7.0291,54.42137],[-7.05724,54.41108],[-7.07234,54.38839],[-7.10979,54.36824],[-7.10388,54.35574],[-7.15344,54.33501],[-7.18882,54.33765],[-7.17974,54.32046],[-7.17949,54.30924],[-7.19789,54.31106],[-7.21219,54.29962],[-7.17302,54.28613],[-7.17937,54.2726],[-7.16092,54.27371],[-7.14225,54.25559],[-7.15893,54.24396],[-7.14594,54.23957],[-7.14503,54.22473],[-7.17104,54.2176],[-7.18808,54.22492],[-7.1986,54.21578],[-7.22085,54.21581],[-7.23182,54.20557],[-7.24806,54.20446],[-7.24915,54.19817],[-7.233,54.19784],[-7.25942,54.19225],[-7.25828,54.17737],[-7.24028,54.1697],[-7.25812,54.16451],[-7.26296,54.13741],[-7.29195,54.11911],[-7.30891,54.13211],[-7.28551,54.13626],[-7.30149,54.14421],[-7.28379,54.15386],[-7.27997,54.16797],[-7.2913,54.17196],[-7.33956,54.14672],[-7.30533,54.12336],[-7.31867,54.11329],[-7.32713,54.12458],[-7.34602,54.11645],[-7.3632,54.1316],[-7.39181,54.12013],[-7.37279,54.13963],[-7.42078,54.13705],[-7.40959,54.15646],[-7.44192,54.15409],[-7.46841,54.14081],[-7.47919,54.12227],[-7.5281,54.13574],[-7.54738,54.12214],[-7.56576,54.12659],[-7.57454,54.14151],[-7.61043,54.14378],[-7.62966,54.1703],[-7.66425,54.18797],[-7.67659,54.18196],[-7.68829,54.20197],[-7.68543,54.20776],[-7.7394,54.20353],[-7.74858,54.20942],[-7.80368,54.20707],[-7.81173,54.20073],[-7.86017,54.21728],[-7.86046,54.26026],[-7.87322,54.27945],[-7.86187,54.29343],[-7.88087,54.29188],[-7.9017,54.30143],[-7.91095,54.29595],[-7.9616,54.31247],[-8.00093,54.35846],[-8.03129,54.35671],[-8.05733,54.36572],[-8.08416,54.39741],[-8.16026,54.44028],[-8.14291,54.45092],[-8.17751,54.46476],[-8.11467,54.46903],[-8.11324,54.4764],[-8.09148,54.47653],[-8.09868,54.48433],[-8.08933,54.48708],[-8.04265,54.48763],[-8.04185,54.50638],[-8.00601,54.54594],[-7.9703,54.54705],[-7.94973,54.53363],[-7.85055,54.53313],[-7.82402,54.54427],[-7.83325,54.55223],[-7.79659,54.57163],[-7.79341,54.58188],[-7.76212,54.58588],[-7.75151,54.59878],[-7.69725,54.61007],[-7.70877,54.63495],[-7.74165,54.61797],[-7.75797,54.62503],[-7.77236,54.62149],[-7.81366,54.64411],[-7.82828,54.63305],[-7.85213,54.63078],[-7.85669,54.65057],[-7.89164,54.65594],[-7.9099,54.66828],[-7.91381,54.67596],[-7.89766,54.68701],[-7.92089,54.69596],[-7.91804,54.70282],[-7.8796,54.70269],[-7.83665,54.73642],[-7.81761,54.73378],[-7.8047,54.7186],[-7.78875,54.71964],[-7.75006,54.70428],[-7.73551,54.71683],[-7.7116,54.72611],[-7.69723,54.72356],[-7.63657,54.75151],[-7.60944,54.74415],[-7.59117,54.74438],[-7.57919,54.75047],[-7.57865,54.74191],[-7.5698,54.74384],[-7.54826,54.74101],[-7.53859,54.751],[-7.54804,54.75711],[-7.54795,54.78835],[-7.52847,54.80757],[-7.47096,54.8348],[-7.44188,54.87561],[-7.45258,54.89849],[-7.44727,54.93524],[-7.39202,54.94545],[-7.4072,54.95521],[-7.4027,54.96689],[-7.40705,54.98294],[-7.39135,54.99774],[-7.40558,55.00332],[-7.37023,55.03476],[-7.34516,55.05083],[-7.31828,55.04507],[-7.29947,55.0561],[-7.28944,55.04771],[-7.27251,55.06357],[-7.24863,55.06999]]]}},"University-of-Exeter":{type:"Feature",id:"University-of-Exeter",properties:{},geometry:{type:"Polygon",coordinates:[[[-3.53515,50.96148],[-3.46559,50.95715],[-3.39875,50.94431],[-3.33721,50.92347],[-3.28338,50.89544],[-3.23931,50.8613],[-3.20671,50.82239],[-3.18679,50.7802],[-3.1803,50.73637],[-3.18744,50.69258],[-3.20791,50.6505],[-3.24089,50.61177],[-3.28508,50.57784],[-3.33879,50.55001],[-3.39995,50.52934],[-3.46624,50.51662],[-3.53515,50.51233],[-3.60405,50.51662],[-3.67035,50.52934],[-3.73151,50.55001],[-3.78522,50.57784],[-3.82941,50.61177],[-3.86239,50.6505],[-3.88285,50.69258],[-3.89,50.73637],[-3.8835,50.7802],[-3.86359,50.82239],[-3.83098,50.8613],[-3.78692,50.89544],[-3.73308,50.92347],[-3.67155,50.94431],[-3.6047,50.95715],[-3.53515,50.96148]]]}},"University-of-Warwick":{type:"Feature",id:"University-of-Warwick",properties:{},geometry:{type:"Polygon",coordinates:[[[-1.56119,52.60392],[-1.48906,52.59958],[-1.41974,52.58674],[-1.35593,52.56589],[-1.30011,52.53785],[-1.25443,52.50371],[-1.22063,52.46479],[-1.2,52.4226],[-1.19329,52.37877],[-1.20072,52.33498],[-1.22196,52.29291],[-1.25615,52.25418],[-1.30198,52.22025],[-1.35766,52.19243],[-1.42106,52.17177],[-1.48977,52.15905],[-1.56119,52.15476],[-1.63261,52.15905],[-1.70132,52.17177],[-1.76473,52.19243],[-1.8204,52.22025],[-1.86623,52.25418],[-1.90043,52.29291],[-1.92166,52.33498],[-1.92909,52.37877],[-1.92238,52.4226],[-1.90175,52.46479],[-1.86796,52.50371],[-1.82228,52.53785],[-1.76645,52.56589],[-1.70265,52.58674],[-1.63333,52.59958],[-1.56119,52.60392]]]}},"Sacred-Heart-Junior-College":{type:"Feature",id:"Sacred-Heart-Junior-College",properties:{},geometry:{type:"Polygon",coordinates:[[[-89.07411,17.38565],[-89.0282,17.38133],[-88.98406,17.36853],[-88.9434,17.34776],[-88.90777,17.3198],[-88.87855,17.28574],[-88.85686,17.24689],[-88.84353,17.20475],[-88.83907,17.16093],[-88.84364,17.11712],[-88.85706,17.07501],[-88.87881,17.0362],[-88.90805,17.0022],[-88.94366,16.97429],[-88.98426,16.95356],[-89.02831,16.9408],[-89.07411,16.93649],[-89.11991,16.9408],[-89.16396,16.95356],[-89.20456,16.97429],[-89.24017,17.0022],[-89.26941,17.0362],[-89.29116,17.07501],[-89.30458,17.11712],[-89.30915,17.16093],[-89.30469,17.20475],[-89.29136,17.24689],[-89.26967,17.28574],[-89.24045,17.3198],[-89.20483,17.34776],[-89.16416,17.36853],[-89.12002,17.38133],[-89.07411,17.38565]]]}},canada_full:{type:"Feature",id:"canada_full",properties:{},geometry:{type:"Polygon",coordinates:[[[-140.99854,69.64945],[-120.9375,78.7335],[-91.05469,82.7432],[-75.58594,83.40004],[-63.45703,83.15311],[-59.32617,82.37915],[-63.76465,81.42049],[-67.19238,80.79583],[-73.21289,78.85307],[-74.9707,76.33114],[-61.34766,70.75797],[-50.1416,46.67959],[-65.98389,42.85181],[-66.95892,44.48769],[-66.9397,44.81692],[-67.13745,45.15493],[-67.26379,45.18591],[-67.31873,45.1278],[-67.43958,45.21881],[-67.44507,45.58329],[-67.79114,45.67164],[-67.78015,47.07012],[-68.19763,47.35743],[-68.39539,47.35743],[-68.37891,47.29413],[-68.90625,47.17478],[-69.06006,47.23449],[-69.08203,47.43552],[-69.22485,47.46524],[-70.00488,46.70974],[-70.05981,46.41514],[-70.18066,46.36209],[-70.3125,46.21025],[-70.24658,46.14178],[-70.3125,45.97406],[-70.26855,45.91294],[-70.42236,45.80583],[-70.42236,45.72152],[-70.71899,45.49865],[-70.62012,45.38302],[-70.80688,45.4293],[-70.85083,45.22848],[-71.00464,45.3367],[-71.1145,45.25169],[-71.26831,45.29035],[-71.41113,45.24395],[-71.5155,45.0153],[-74.81689,45.0153],[-75.31128,44.84808],[-75.7782,44.51218],[-75.82214,44.4377],[-76.43188,44.09942],[-76.79993,43.63011],[-78.68683,43.63806],[-79.19495,43.45292],[-79.07204,43.26521],[-79.05693,43.25671],[-79.04594,43.13807],[-79.06998,43.12103],[-79.06311,43.11652],[-79.05693,43.10951],[-79.07616,43.08393],[-79.07684,43.07691],[-79.01505,43.06839],[-78.99719,43.05785],[-79.02672,43.02071],[-79.01779,42.98456],[-78.98003,42.97099],[-78.96423,42.95843],[-78.93402,42.95542],[-78.91136,42.93883],[-78.90518,42.90011],[-78.93127,42.82361],[-80.07935,42.38289],[-81.27686,42.20818],[-82.39197,41.68112],[-82.68311,41.67701],[-83.07861,41.86547],[-83.15552,42.03909],[-83.12531,42.12064],[-83.13904,42.23462],[-83.07587,42.31185],[-82.98523,42.33418],[-82.81219,42.37478],[-82.63916,42.56117],[-82.59521,42.54903],[-82.52655,42.61375],[-82.41669,43.00063],[-82.13379,43.59631],[-82.51831,45.34442],[-83.59772,45.82114],[-83.43567,45.99696],[-83.57162,46.10847],[-83.65402,46.12275],[-83.76663,46.10466],[-83.82843,46.11989],[-83.89984,46.06084],[-83.95615,46.05989],[-83.974,46.1018],[-84.00833,46.11609],[-84.00696,46.14559],[-84.07974,46.18934],[-84.10995,46.24065],[-84.0976,46.25585],[-84.11545,46.26724],[-84.12094,46.31564],[-84.10309,46.32038],[-84.13467,46.36115],[-84.14841,46.42082],[-84.10995,46.50359],[-84.12781,46.531],[-84.14085,46.53241],[-84.17313,46.52722],[-84.19373,46.54092],[-84.226,46.53525],[-84.26582,46.49603],[-84.2926,46.49225],[-84.34135,46.50595],[-84.37225,46.50879],[-84.44023,46.49036],[-84.47662,46.45489],[-84.55353,46.45867],[-84.76776,46.62492],[-84.84741,46.88272],[-88.38501,48.31243],[-89.32983,47.96786],[-93.21899,48.64743],[-93.80127,48.5166],[-93.83423,48.63291],[-94.6637,48.75257],[-94.8175,49.32691],[-95.15259,49.38595],[-95.15533,49.00184],[-123.31879,49.00004],[-122.99469,48.7761],[-123.2666,48.69096],[-123.11279,48.37815],[-123.44238,48.22467],[-124.7168,48.49477],[-128.49609,48.74895],[-131.2207,53.61858],[-130.75928,54.73731],[-129.99023,55.27912],[-130.07813,56.10881],[-131.74805,56.63206],[-135.53833,59.80063],[-137.47192,58.90465],[-138.67493,59.78958],[-138.6969,59.90822],[-139.20227,60.09772],[-139.08142,60.35141],[-139.71863,60.33239],[-139.98779,60.18523],[-140.46021,60.30791],[-140.52063,60.22618],[-141.01501,60.30519],[-140.99854,69.64945]]]}},ottawa_gatineau:{type:"Feature",id:"ottawa_gatineau",properties:{},geometry:{type:"Polygon",coordinates:[[[-76.23413,45.50827],[-76.12839,45.55829],[-75.26184,45.58041],[-75.13412,45.39652],[-75.42938,45.32512],[-75.35385,45.17816],[-75.82489,44.93564],[-76.34537,45.36855],[-76.23413,45.50827]]]}},vancouver_metro:{type:"Feature",id:"vancouver_metro",properties:{},geometry:{type:"Polygon",coordinates:[[[-123.32,49],[-123.45,49.38],[-123.26,49.47],[-122.24,49.27],[-122.2,49],[-123.32,49]]]}},"Universidad-de-Costa-Rica":{type:"Feature",id:"Universidad-de-Costa-Rica",properties:{},geometry:{type:"Polygon",coordinates:[[[-84.05105,10.16183],[-84.00654,10.15751],[-83.96374,10.14472],[-83.92431,10.12396],[-83.88975,10.09601],[-83.8614,10.06196],[-83.84035,10.02313],[-83.8274,9.98099],[-83.82305,9.93717],[-83.82746,9.89336],[-83.84046,9.85124],[-83.86155,9.81243],[-83.88991,9.77841],[-83.92445,9.75049],[-83.96385,9.72975],[-84.0066,9.71698],[-84.05105,9.71267],[-84.0955,9.71698],[-84.13825,9.72975],[-84.17765,9.75049],[-84.21219,9.77841],[-84.24055,9.81243],[-84.26164,9.85124],[-84.27464,9.89336],[-84.27905,9.93717],[-84.2747,9.98099],[-84.26175,10.02313],[-84.2407,10.06196],[-84.21235,10.09601],[-84.17779,10.12396],[-84.13836,10.14472],[-84.09556,10.15751],[-84.05105,10.16183]]]}},cuba:{type:"Feature",id:"cuba",properties:{},geometry:{type:"Polygon",coordinates:[[[-85.5,21.75],[-83.5,23.5],[-80,23.5],[-73.5,20.4],[-74.5,19.5],[-78,19.5],[-85.5,21.75]]]}},"Universidad-Nacional-Autnoma-de-Honduras":{type:"Feature",id:"Universidad-Nacional-Autnoma-de-Honduras",properties:{},geometry:{type:"Polygon",coordinates:[[[-87.16598,14.30969],[-87.12077,14.30537],[-87.07729,14.29258],[-87.03724,14.27181],[-87.00214,14.24385],[-86.97336,14.2098],[-86.95199,14.17096],[-86.93885,14.12882],[-86.93444,14.085],[-86.93893,14.04119],[-86.95215,13.99907],[-86.97357,13.96026],[-87.00237,13.92625],[-87.03745,13.89834],[-87.07745,13.87761],[-87.12085,13.86484],[-87.16598,13.86053],[-87.21111,13.86484],[-87.25451,13.87761],[-87.29451,13.89834],[-87.32959,13.92625],[-87.35839,13.96026],[-87.37982,13.99907],[-87.39303,14.04119],[-87.39752,14.085],[-87.39312,14.12882],[-87.37998,14.17096],[-87.3586,14.2098],[-87.32982,14.24385],[-87.29472,14.27181],[-87.25467,14.29258],[-87.2112,14.30537],[-87.16598,14.30969]]]}},"University-of-the-West-Indies-Mona-Campus":{type:"Feature",id:"University-of-the-West-Indies-Mona-Campus",properties:{},geometry:{type:"Polygon",coordinates:[[[-76.74601,18.23094],[-76.69988,18.22662],[-76.65553,18.21383],[-76.61468,18.19305],[-76.57888,18.16509],[-76.54952,18.13104],[-76.52773,18.09219],[-76.51435,18.05004],[-76.50987,18.00622],[-76.51446,17.96241],[-76.52795,17.9203],[-76.5498,17.8815],[-76.57918,17.84749],[-76.61495,17.81959],[-76.65575,17.79886],[-76.7,17.7861],[-76.74601,17.78179],[-76.79202,17.7861],[-76.83627,17.79886],[-76.87707,17.81959],[-76.91284,17.84749],[-76.94222,17.8815],[-76.96407,17.9203],[-76.97756,17.96241],[-76.98215,18.00622],[-76.97767,18.05004],[-76.96429,18.09219],[-76.9425,18.13104],[-76.91314,18.16509],[-76.87734,18.19305],[-76.83649,18.21383],[-76.79214,18.22662],[-76.74601,18.23094]]]}},nicaragua:{type:"Feature",id:"nicaragua",properties:{},geometry:{type:"Polygon",coordinates:[[[-88,13],[-87.56104,13.13298],[-87.36877,12.99921],[-86.97876,13.02597],[-86.88538,13.28272],[-86.7041,13.29876],[-86.77002,13.76873],[-86.31409,13.77407],[-86.1438,14.046],[-86.01746,14.05133],[-85.75378,13.89141],[-85.16602,14.31761],[-84.96277,14.80144],[-84.4574,14.63674],[-83.39722,15.03499],[-82.5,14.9],[-82.8,12],[-83.676,10.95],[-83.66,10.8],[-83.92,10.7],[-84.688,11.076],[-84.91,10.945],[-85.615,11.215],[-85.7,11.06],[-86,11.06],[-88,13]]]}},"Universidad-Nacional-de-Ingenieria":{type:"Feature",id:"Universidad-Nacional-de-Ingenieria",properties:{},geometry:{type:"Polygon",coordinates:[[[-86.27051,12.35623],[-86.22565,12.35191],[-86.18253,12.33912],[-86.1428,12.31835],[-86.10798,12.2904],[-86.07942,12.25635],[-86.05821,12.21751],[-86.04517,12.17537],[-86.0408,12.13156],[-86.04525,12.08775],[-86.05835,12.04563],[-86.0796,12.00682],[-86.10817,11.9728],[-86.14298,11.94489],[-86.18267,11.92415],[-86.22573,11.91138],[-86.27051,11.90707],[-86.31528,11.91138],[-86.35834,11.92415],[-86.39804,11.94489],[-86.43284,11.9728],[-86.46141,12.00682],[-86.48266,12.04563],[-86.49576,12.08775],[-86.50021,12.13156],[-86.49584,12.17537],[-86.4828,12.21751],[-86.46159,12.25635],[-86.43303,12.2904],[-86.39822,12.31835],[-86.35848,12.33912],[-86.31536,12.35191],[-86.27051,12.35623]]]}},"University-of-Panama":{type:"Feature",id:"University-of-Panama",properties:{},geometry:{type:"Polygon",coordinates:[[[-79.54102,9.23988],[-79.49663,9.23556],[-79.45395,9.22278],[-79.41462,9.20201],[-79.38016,9.17407],[-79.35188,9.14002],[-79.33089,9.10119],[-79.31797,9.05905],[-79.31363,9.01523],[-79.31802,8.97142],[-79.33099,8.9293],[-79.35201,8.89048],[-79.3803,8.85647],[-79.41475,8.82855],[-79.45405,8.80781],[-79.49668,8.79504],[-79.54102,8.79072],[-79.58535,8.79504],[-79.62798,8.80781],[-79.66728,8.82855],[-79.70173,8.85647],[-79.73002,8.89048],[-79.75104,8.9293],[-79.76401,8.97142],[-79.7684,9.01523],[-79.76406,9.05905],[-79.75114,9.10119],[-79.73015,9.14002],[-79.70187,9.17407],[-79.66741,9.20201],[-79.62808,9.22278],[-79.5854,9.23556],[-79.54102,9.23988]]]}},"Universidad-de-Puerto-Rico-Rio-Piedras":{type:"Feature",id:"Universidad-de-Puerto-Rico-Rio-Piedras",properties:{},geometry:{type:"Polygon",coordinates:[[[-66.04978,18.62742],[-66.00355,18.6231],[-65.9591,18.6103],[-65.91815,18.58953],[-65.88227,18.56157],[-65.85285,18.52751],[-65.83101,18.48866],[-65.81759,18.44651],[-65.8131,18.40269],[-65.81771,18.35889],[-65.83123,18.31677],[-65.85313,18.27797],[-65.88258,18.24397],[-65.91843,18.21606],[-65.95932,18.19533],[-66.00367,18.18257],[-66.04978,18.17826],[-66.0959,18.18257],[-66.14025,18.19533],[-66.18113,18.21606],[-66.21699,18.24397],[-66.24644,18.27797],[-66.26834,18.31677],[-66.28186,18.35889],[-66.28647,18.40269],[-66.28198,18.44651],[-66.26856,18.48866],[-66.24672,18.52751],[-66.2173,18.56157],[-66.18142,18.58953],[-66.14047,18.6103],[-66.09602,18.6231],[-66.04978,18.62742]]]}},"Ball-State-University":{type:"Feature",id:"Ball-State-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-85.40688,40.43064],[-85.34933,40.42631],[-85.294,40.41349],[-85.24306,40.39268],[-85.19846,40.36468],[-85.16193,40.33057],[-85.13486,40.29169],[-85.11829,40.24952],[-85.11283,40.20569],[-85.11866,40.16189],[-85.13555,40.1198],[-85.16283,40.08104],[-85.19944,40.04708],[-85.24396,40.01922],[-85.29469,39.99852],[-85.3497,39.98578],[-85.40688,39.98148],[-85.46406,39.98578],[-85.51907,39.99852],[-85.5698,40.01922],[-85.61432,40.04708],[-85.65093,40.08104],[-85.67821,40.1198],[-85.6951,40.16189],[-85.70094,40.20569],[-85.69547,40.24952],[-85.6789,40.29169],[-85.65183,40.33057],[-85.6153,40.36468],[-85.5707,40.39268],[-85.51976,40.41349],[-85.46444,40.42631],[-85.40688,40.43064]]]}},boston_metro:{type:"Feature",id:"boston_metro",properties:{},geometry:{type:"Polygon",coordinates:[[[-70.5,41.91],[-71,41.91],[-71.42,42.05],[-71.57,42.18],[-71.64,42.4],[-71.57,42.52],[-71.35,42.64],[-71.1,42.7],[-70.5,42.7],[-70.5,41.91]]]}},"California-University-of-Pennsylvania":{type:"Feature",id:"California-University-of-Pennsylvania",properties:{},geometry:{type:"Polygon",coordinates:[[[-79.89258,40.26902],[-79.83516,40.26469],[-79.77997,40.25187],[-79.72915,40.23105],[-79.68466,40.20305],[-79.64821,40.16895],[-79.62121,40.13006],[-79.60467,40.08789],[-79.59922,40.04407],[-79.60504,40.00027],[-79.62189,39.95818],[-79.64911,39.91941],[-79.68562,39.88545],[-79.73004,39.85759],[-79.78066,39.8369],[-79.83553,39.82416],[-79.89258,39.81986],[-79.94963,39.82416],[-80.0045,39.8369],[-80.05511,39.85759],[-80.09953,39.88545],[-80.13605,39.91941],[-80.16326,39.95818],[-80.18011,40.00027],[-80.18593,40.04407],[-80.18048,40.08789],[-80.16395,40.13006],[-80.13694,40.16895],[-80.1005,40.20305],[-80.05601,40.23105],[-80.00518,40.25187],[-79.95,40.26469],[-79.89258,40.26902]]]}},central_pa:{type:"Feature",id:"central_pa",properties:{},geometry:{type:"Polygon",coordinates:[[[-78.7,41.5],[-77,41.5],[-76,40],[-76,39.72],[-79.3,39.72],[-78.7,41.5]]]}},"Central-Washington-University":{type:"Feature",id:"Central-Washington-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-120.49805,47.20483],[-120.43356,47.2005],[-120.37159,47.18767],[-120.31453,47.16684],[-120.26459,47.13882],[-120.22371,47.10469],[-120.19344,47.06579],[-120.17494,47.02361],[-120.16888,46.97978],[-120.17546,46.93599],[-120.19442,46.89391],[-120.22499,46.85516],[-120.26598,46.82122],[-120.3158,46.79338],[-120.37256,46.7727],[-120.43409,46.75997],[-120.49805,46.75567],[-120.562,46.75997],[-120.62353,46.7727],[-120.68029,46.79338],[-120.73012,46.82122],[-120.77111,46.85516],[-120.80167,46.89391],[-120.82063,46.93599],[-120.82722,46.97978],[-120.82116,47.02361],[-120.80265,47.06579],[-120.77238,47.10469],[-120.7315,47.13882],[-120.68157,47.16684],[-120.62451,47.18767],[-120.56253,47.2005],[-120.49805,47.20483]]]}},chattanooga:{type:"Feature",id:"chattanooga",properties:{},geometry:{type:"Polygon",coordinates:[[[-85.634,34.743],[-85.634,35.282],[-84.933,35.282],[-84.933,34.743],[-85.634,34.743]]]}},"Clemson-University":{type:"Feature",id:"Clemson-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-82.79297,34.89394],[-82.73955,34.88961],[-82.68821,34.8768],[-82.64092,34.85599],[-82.59951,34.82801],[-82.56558,34.79392],[-82.54043,34.75504],[-82.52501,34.71288],[-82.51991,34.66905],[-82.5253,34.62525],[-82.54095,34.58316],[-82.56627,34.54438],[-82.60025,34.51041],[-82.6416,34.48253],[-82.68873,34.46183],[-82.73984,34.44908],[-82.79297,34.44478],[-82.8461,34.44908],[-82.8972,34.46183],[-82.94433,34.48253],[-82.98568,34.51041],[-83.01967,34.54438],[-83.04498,34.58316],[-83.06064,34.62525],[-83.06603,34.66905],[-83.06092,34.71288],[-83.04551,34.75504],[-83.02035,34.79392],[-82.98642,34.82801],[-82.94502,34.85599],[-82.89773,34.8768],[-82.84638,34.88961],[-82.79297,34.89394]]]}},cleveland:{type:"Feature",id:"cleveland",properties:{},geometry:{type:"Polygon",coordinates:[[[-82.5,41.5],[-80.95,42],[-80.95,41],[-82.5,41],[-82.5,41.5]]]}},"College-of-William-and-Mary":{type:"Feature",id:"College-of-William-and-Mary",properties:{},geometry:{type:"Polygon",coordinates:[[[-76.72852,37.52485],[-76.67328,37.52053],[-76.62018,37.50771],[-76.57128,37.4869],[-76.52846,37.45891],[-76.49338,37.42481],[-76.46739,37.38593],[-76.45146,37.34377],[-76.44619,37.29994],[-76.45178,37.25614],[-76.46798,37.21405],[-76.49416,37.17527],[-76.5293,37.14131],[-76.57205,37.11344],[-76.62077,37.09274],[-76.6736,37.08],[-76.72852,37.0757],[-76.78343,37.08],[-76.83626,37.09274],[-76.88498,37.11344],[-76.92773,37.14131],[-76.96287,37.17527],[-76.98905,37.21405],[-77.00525,37.25614],[-77.01084,37.29994],[-77.00557,37.34377],[-76.98965,37.38593],[-76.96365,37.42481],[-76.92857,37.45891],[-76.88576,37.4869],[-76.83685,37.50771],[-76.78376,37.52053],[-76.72852,37.52485]]]}},colorado:{type:"Feature",id:"colorado",properties:{},geometry:{type:"Polygon",coordinates:[[[-109.05,37],[-109.05,41],[-102.05,41],[-102.05,37],[-109.05,37]]]}},"Cornell-University":{type:"Feature",id:"Cornell-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-76.4735,42.67798],[-76.41391,42.67365],[-76.35663,42.66082],[-76.30389,42.64001],[-76.25772,42.612],[-76.21991,42.57789],[-76.1919,42.539],[-76.17476,42.49683],[-76.16912,42.453],[-76.17518,42.4092],[-76.19268,42.36711],[-76.22092,42.32835],[-76.25882,42.2944],[-76.3049,42.26655],[-76.3574,42.24586],[-76.41433,42.23312],[-76.4735,42.22882],[-76.53267,42.23312],[-76.5896,42.24586],[-76.6421,42.26655],[-76.68818,42.2944],[-76.72608,42.32835],[-76.75432,42.36711],[-76.77182,42.4092],[-76.77788,42.453],[-76.77224,42.49683],[-76.7551,42.539],[-76.72709,42.57789],[-76.68928,42.612],[-76.64311,42.64001],[-76.59037,42.66082],[-76.53309,42.67365],[-76.4735,42.67798]]]}},dc_metro:{type:"Feature",id:"dc_metro",properties:{},geometry:{type:"Polygon",coordinates:[[[-77.04437,38.70266],[-77.27783,38.69409],[-77.57172,38.91668],[-77.61017,39.1258],[-77.27509,39.21523],[-77.08694,39.21204],[-76.87546,39.05119],[-76.69968,38.97863],[-76.71066,38.77657],[-76.84662,38.7048],[-77.04437,38.70266]]]}},dfw_metro:{type:"Feature",id:"dfw_metro",properties:{},geometry:{type:"Polygon",coordinates:[[[-97.75,32.25],[-97.75,33.4],[-96,33.4],[-96,32.25],[-97.75,32.25]]]}},"George-Mason-University":{type:"Feature",id:"George-Mason-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-77.34375,39.04717],[-77.28734,39.04284],[-77.23312,39.03002],[-77.18318,39.00921],[-77.13947,38.98121],[-77.10365,38.94711],[-77.07711,38.90823],[-77.06086,38.86606],[-77.05549,38.82224],[-77.06121,38.77844],[-77.07776,38.73635],[-77.10449,38.69758],[-77.14037,38.66361],[-77.18402,38.63575],[-77.23376,38.61506],[-77.28769,38.60231],[-77.34375,38.59801],[-77.39981,38.60231],[-77.45374,38.61506],[-77.50348,38.63575],[-77.54713,38.66361],[-77.58301,38.69758],[-77.60974,38.73635],[-77.62629,38.77844],[-77.63201,38.82224],[-77.62664,38.86606],[-77.61039,38.90823],[-77.58385,38.94711],[-77.54803,38.98121],[-77.50432,39.00921],[-77.45438,39.03002],[-77.40016,39.04284],[-77.34375,39.04717]]]}},grand_junction_co:{type:"Feature",id:"grand_junction_co",properties:{},geometry:{type:"Polygon",coordinates:[[[-109,39.4],[-108.1,39.4],[-107.8,39.16],[-107.8,38.7],[-108.1,38.5],[-109,39],[-109,39.4]]]}},hrva:{type:"Feature",id:"hrva",properties:{},geometry:{type:"Polygon",coordinates:[[[-76.85486,36.53392],[-76.85486,37.35488],[-75.8194,37.35488],[-75.8194,36.53392],[-76.85486,36.53392]]]}},"Indiana-University-of-Pennsylvania":{type:"Feature",id:"Indiana-University-of-Pennsylvania",properties:{},geometry:{type:"Polygon",coordinates:[[[-79.16139,40.83872],[-79.10348,40.83439],[-79.04782,40.82157],[-78.99657,40.80076],[-78.9517,40.77275],[-78.91495,40.73865],[-78.88772,40.69976],[-78.87104,40.65759],[-78.86555,40.61377],[-78.87142,40.56997],[-78.88842,40.52788],[-78.91586,40.48911],[-78.95269,40.45515],[-78.99749,40.4273],[-79.04853,40.4066],[-79.10386,40.39387],[-79.16139,40.38956],[-79.21892,40.39387],[-79.27426,40.4066],[-79.3253,40.4273],[-79.37009,40.45515],[-79.40692,40.48911],[-79.43437,40.52788],[-79.45136,40.56997],[-79.45724,40.61377],[-79.45174,40.65759],[-79.43507,40.69976],[-79.40784,40.73865],[-79.37108,40.77275],[-79.32622,40.80076],[-79.27496,40.82157],[-79.2193,40.83439],[-79.16139,40.83872]]]}},"Jacksonville-State-University":{type:"Feature",id:"Jacksonville-State-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-85.76795,34.04756],[-85.71507,34.04323],[-85.66424,34.03042],[-85.61743,34.00962],[-85.57644,33.98163],[-85.54285,33.94754],[-85.51794,33.90867],[-85.50268,33.86651],[-85.49762,33.82268],[-85.50295,33.77888],[-85.51845,33.73679],[-85.5435,33.69801],[-85.57715,33.66403],[-85.61809,33.63616],[-85.66475,33.61545],[-85.71534,33.6027],[-85.76795,33.5984],[-85.82055,33.6027],[-85.87115,33.61545],[-85.91781,33.63616],[-85.95874,33.66403],[-85.99239,33.69801],[-86.01745,33.73679],[-86.03295,33.77888],[-86.03828,33.82268],[-86.03322,33.86651],[-86.01795,33.90867],[-85.99305,33.94754],[-85.95945,33.98163],[-85.91846,34.00962],[-85.87165,34.03042],[-85.82082,34.04323],[-85.76795,34.04756]]]}},"Kansas-State-University":{type:"Feature",id:"Kansas-State-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-96.5918,39.38872],[-96.53511,39.38439],[-96.48062,39.37157],[-96.43045,39.35076],[-96.38652,39.32276],[-96.35053,39.28866],[-96.32387,39.24978],[-96.30753,39.20761],[-96.30215,39.16378],[-96.30789,39.11998],[-96.32452,39.07789],[-96.35139,39.03912],[-96.38744,39.00516],[-96.4313,38.9773],[-96.48128,38.95661],[-96.53546,38.94386],[-96.5918,38.93956],[-96.64813,38.94386],[-96.70232,38.95661],[-96.75229,38.9773],[-96.79615,39.00516],[-96.83221,39.03912],[-96.85907,39.07789],[-96.87571,39.11998],[-96.88145,39.16378],[-96.87606,39.20761],[-96.85973,39.24978],[-96.83306,39.28866],[-96.79708,39.32276],[-96.75315,39.35076],[-96.70297,39.37157],[-96.64848,39.38439],[-96.5918,39.38872]]]}},la_metro:{type:"Feature",id:"la_metro",properties:{},geometry:{type:"Polygon",coordinates:[[[-118.5,33.7],[-118.68,34.23],[-118.5,34.35],[-118,34.2],[-117.3,34.2],[-117.2,34.1],[-117.37,33.9],[-117.74,33.5],[-118.5,33.7]]]}},massachusetts:{type:"Feature",id:"massachusetts",properties:{},geometry:{type:"Polygon",coordinates:[[[-73.53149,42.9725],[-69.40063,42.9725],[-69.40063,40.98819],[-71.55396,41.04622],[-71.53198,41.91863],[-73.70728,41.91045],[-73.53149,42.9725]]]}},"McGill-University":{type:"Feature",id:"McGill-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-73.5787,45.73088],[-73.51593,45.72655],[-73.45561,45.71372],[-73.40007,45.69289],[-73.35147,45.66488],[-73.31166,45.63076],[-73.28219,45.59186],[-73.26416,45.54968],[-73.25825,45.50585],[-73.26465,45.46206],[-73.28309,45.41998],[-73.31284,45.38122],[-73.35274,45.34728],[-73.40125,45.31943],[-73.45652,45.29875],[-73.51642,45.28602],[-73.5787,45.28172],[-73.64097,45.28602],[-73.70088,45.29875],[-73.75614,45.31943],[-73.80465,45.34728],[-73.84455,45.38122],[-73.8743,45.41998],[-73.89274,45.46206],[-73.89914,45.50585],[-73.89323,45.54968],[-73.8752,45.59186],[-73.84573,45.63076],[-73.80593,45.66488],[-73.75732,45.69289],[-73.70178,45.71372],[-73.64146,45.72655],[-73.5787,45.73088]]]}},"Miami-University":{type:"Feature",id:"Miami-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-84.73174,39.73566],[-84.67477,39.73133],[-84.62001,39.71851],[-84.56958,39.6977],[-84.52543,39.6697],[-84.48927,39.6356],[-84.46247,39.59671],[-84.44606,39.55454],[-84.44065,39.51072],[-84.44642,39.46692],[-84.46314,39.42483],[-84.49014,39.38606],[-84.52638,39.3521],[-84.57045,39.32424],[-84.62067,39.30354],[-84.67513,39.2908],[-84.73174,39.2865],[-84.78835,39.2908],[-84.84281,39.30354],[-84.89303,39.32424],[-84.9371,39.3521],[-84.97334,39.38606],[-85.00034,39.42483],[-85.01706,39.46692],[-85.02283,39.51072],[-85.01742,39.55454],[-85.00101,39.59671],[-84.97421,39.6356],[-84.93805,39.6697],[-84.8939,39.6977],[-84.84347,39.71851],[-84.78871,39.73133],[-84.73174,39.73566]]]}},minneapolis_st_paul_metro:{type:"Feature",id:"minneapolis_st_paul_metro",properties:{},geometry:{type:"Polygon",coordinates:[[[-93.801,44.578],[-93.801,45.348],[-92.666,45.348],[-92.666,44.578],[-93.801,44.578]]]}},"Monroe-Community-College":{type:"Feature",id:"Monroe-Community-College",properties:{},geometry:{type:"Polygon",coordinates:[[[-77.61025,43.32617],[-77.55003,43.32184],[-77.49214,43.30901],[-77.43884,43.28819],[-77.39219,43.26018],[-77.35398,43.22607],[-77.32568,43.18718],[-77.30836,43.14501],[-77.30267,43.10118],[-77.30879,43.05738],[-77.32648,43.0153],[-77.35502,42.97654],[-77.39332,42.94258],[-77.43988,42.91473],[-77.49294,42.89405],[-77.55046,42.88131],[-77.61025,42.87701],[-77.67004,42.88131],[-77.72756,42.89405],[-77.78061,42.91473],[-77.82718,42.94258],[-77.86547,42.97654],[-77.89402,43.0153],[-77.9117,43.05738],[-77.91783,43.10118],[-77.91214,43.14501],[-77.89482,43.18718],[-77.86652,43.22607],[-77.82831,43.26018],[-77.78166,43.28819],[-77.72836,43.30901],[-77.67047,43.32184],[-77.61025,43.32617]]]}},"Montgomery-College":{type:"Feature",id:"Montgomery-College",properties:{},geometry:{type:"Polygon",coordinates:[[[-77.15782,39.32194],[-77.10119,39.31761],[-77.04675,39.30479],[-76.99662,39.28398],[-76.95274,39.25598],[-76.91678,39.22188],[-76.89014,39.183],[-76.87383,39.14083],[-76.86844,39.097],[-76.87418,39.0532],[-76.8908,39.01111],[-76.91764,38.97234],[-76.95366,38.93838],[-76.99747,38.91052],[-77.0474,38.88982],[-77.10154,38.87708],[-77.15782,38.87278],[-77.2141,38.87708],[-77.26823,38.88982],[-77.31816,38.91052],[-77.36198,38.93838],[-77.398,38.97234],[-77.42484,39.01111],[-77.44146,39.0532],[-77.4472,39.097],[-77.44181,39.14083],[-77.42549,39.183],[-77.39885,39.22188],[-77.3629,39.25598],[-77.31902,39.28398],[-77.26889,39.30479],[-77.21445,39.31761],[-77.15782,39.32194]]]}},mt_vernon_wa:{type:"Feature",id:"mt_vernon_wa",properties:{},geometry:{type:"Polygon",coordinates:[[[-123.3,49],[-122,49],[-122,48],[-123.2,48.4],[-123.3,49]]]}},"New-York-University":{type:"Feature",id:"New-York-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-74.00391,40.93853],[-73.94591,40.9342],[-73.89017,40.92138],[-73.83883,40.90057],[-73.7939,40.87257],[-73.75709,40.83846],[-73.72982,40.79957],[-73.71312,40.7574],[-73.70762,40.71358],[-73.7135,40.66978],[-73.73053,40.62769],[-73.75801,40.58893],[-73.7949,40.55497],[-73.83976,40.52711],[-73.89087,40.50642],[-73.94629,40.49368],[-74.00391,40.48938],[-74.06152,40.49368],[-74.11694,40.50642],[-74.16805,40.52711],[-74.21291,40.55497],[-74.2498,40.58893],[-74.27729,40.62769],[-74.29431,40.66978],[-74.30019,40.71358],[-74.29469,40.7574],[-74.27799,40.79957],[-74.25072,40.83846],[-74.21391,40.87257],[-74.16898,40.90057],[-74.11765,40.92138],[-74.0619,40.9342],[-74.00391,40.93853]]]}},nyc_metro:{type:"Feature",id:"nyc_metro",properties:{},geometry:{type:"Polygon",coordinates:[[[-74.73,40.64],[-73.95,41.38],[-73.6,40.95],[-73.25,41],[-73.25,40.6],[-74.43,40.43],[-74.73,40.64]]]}},"Ohio-Wesleyan-University":{type:"Feature",id:"Ohio-Wesleyan-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-83.06823,40.52082],[-83.0106,40.51649],[-82.9552,40.50367],[-82.90419,40.48285],[-82.85953,40.45485],[-82.82295,40.42075],[-82.79585,40.38186],[-82.77925,40.33969],[-82.77378,40.29586],[-82.77963,40.25207],[-82.79654,40.20998],[-82.82385,40.17121],[-82.86051,40.13725],[-82.90509,40.10939],[-82.95589,40.0887],[-83.01097,40.07596],[-83.06823,40.07166],[-83.12549,40.07596],[-83.18056,40.0887],[-83.23136,40.10939],[-83.27595,40.13725],[-83.3126,40.17121],[-83.33992,40.20998],[-83.35683,40.25207],[-83.36268,40.29586],[-83.3572,40.33969],[-83.34061,40.38186],[-83.31351,40.42075],[-83.27692,40.45485],[-83.23227,40.48285],[-83.18126,40.50367],[-83.12586,40.51649],[-83.06823,40.52082]]]}},"Oklahoma-State-University":{type:"Feature",id:"Oklahoma-State-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-97.07253,36.34551],[-97.01814,36.34119],[-96.96586,36.32837],[-96.9177,36.30756],[-96.87554,36.27957],[-96.841,36.24548],[-96.81539,36.2066],[-96.7997,36.16444],[-96.79451,36.12061],[-96.80001,36.07681],[-96.81596,36.03472],[-96.84173,35.99594],[-96.87634,35.96197],[-96.91844,35.9341],[-96.96642,35.9134],[-97.01845,35.90066],[-97.07253,35.89636],[-97.12662,35.90066],[-97.17865,35.9134],[-97.22663,35.9341],[-97.26873,35.96197],[-97.30333,35.99594],[-97.32911,36.03472],[-97.34506,36.07681],[-97.35055,36.12061],[-97.34537,36.16444],[-97.32967,36.2066],[-97.30407,36.24548],[-97.26952,36.27957],[-97.22736,36.30756],[-97.17921,36.32837],[-97.12693,36.34119],[-97.07253,36.34551]]]}},philly_metro:{type:"Feature",id:"philly_metro",properties:{},geometry:{type:"Polygon",coordinates:[[[-75.7,40.3],[-75.3,40.4],[-74.7,40.3],[-74.45,40.1],[-74.9,39.55],[-75.5,39.55],[-75.8,39.7218],[-76.23,39.7211],[-75.7,40.3]]]}},phoenix:{type:"Feature",id:"phoenix",properties:{},geometry:{type:"Polygon",coordinates:[[[-113,32.7],[-113,34],[-111.1,34],[-111.1,32.7],[-113,32.7]]]}},portland_me:{type:"Feature",id:"portland_me",properties:{},geometry:{type:"Polygon",coordinates:[[[-70.5,42.9],[-71,43.3],[-71,44.2],[-69.6,44.5],[-69,44],[-70.5,42.9]]]}},portland_or:{type:"Feature",id:"portland_or",properties:{},geometry:{type:"Polygon",coordinates:[[[-124.4,44.8],[-124.4,46.3],[-121.5,46.3],[-121.5,44.8],[-124.4,44.8]]]}},salt_lake_city:{type:"Feature",id:"salt_lake_city",properties:{},geometry:{type:"Polygon",coordinates:[[[-112.6,40.75],[-112.3,41.4],[-111.5,41.4],[-111.1,40.3],[-112,39.75],[-112.6,40.75]]]}},seattle:{type:"Feature",id:"seattle",properties:{},geometry:{type:"Polygon",coordinates:[[[-122.15,47.26],[-122.33,47.26],[-122.54,47.33],[-122.52,47.46],[-122.45,47.55],[-122.45,47.8],[-121.2,47.8],[-121.43,47.38],[-121.43,47.14],[-121.94,47.14],[-122,47.17],[-122,47.17],[-122.1,47.19],[-122.15,47.26]]]}},sf_bay_area:{type:"Feature",id:"sf_bay_area",properties:{},geometry:{type:"Polygon",coordinates:[[[-123.5,38.5],[-122.8,38.8],[-121.7,38.2],[-121.5,36.9],[-123,36.9],[-123.5,38.5]]]}},south_sf_bay_area:{type:"Feature",id:"south_sf_bay_area",properties:{},geometry:{type:"Polygon",coordinates:[[[-121.4566,37.48249],[-121.21628,37.17673],[-121.20529,36.95757],[-121.49368,36.95757],[-121.5596,36.8928],[-121.98257,37.12419],[-122.27234,37.39635],[-122.13501,37.48903],[-121.4566,37.48249]]]}},st_louis:{type:"Feature",id:"st_louis",properties:{},geometry:{type:"Polygon",coordinates:[[[-90.28,39.1],[-89.57,39.05],[-89.57,38.18],[-90.58,38],[-91.37,38.2],[-91.37,38.75],[-90.28,39.1]]]}},"State-University-of-New-York-Geneseo":{type:"Feature",id:"State-University-of-New-York-Geneseo",properties:{},geometry:{type:"Polygon",coordinates:[[[-77.7832,43.0361],[-77.72327,43.03177],[-77.66566,43.01895],[-77.61261,42.99813],[-77.56618,42.97012],[-77.52815,42.93601],[-77.49998,42.89712],[-77.48274,42.85494],[-77.47707,42.81111],[-77.48316,42.76732],[-77.50076,42.72523],[-77.52917,42.68647],[-77.56729,42.65252],[-77.61364,42.62467],[-77.66644,42.60398],[-77.72369,42.59124],[-77.7832,42.58694],[-77.84272,42.59124],[-77.89996,42.60398],[-77.95277,42.62467],[-77.99912,42.65252],[-78.03723,42.68647],[-78.06564,42.72523],[-78.08324,42.76732],[-78.08934,42.81111],[-78.08367,42.85494],[-78.06643,42.89712],[-78.03826,42.93601],[-78.00023,42.97012],[-77.9538,42.99813],[-77.90075,43.01895],[-77.84314,43.03177],[-77.7832,43.0361]]]}},"SUNY-at-Fredonia":{type:"Feature",id:"SUNY-at-Fredonia",properties:{},geometry:{type:"Polygon",coordinates:[[[-79.36523,42.64804],[-79.30567,42.6437],[-79.24842,42.63088],[-79.19571,42.61006],[-79.14956,42.58206],[-79.11177,42.54795],[-79.08377,42.50906],[-79.06664,42.46688],[-79.061,42.42305],[-79.06706,42.37926],[-79.08454,42.33717],[-79.11278,42.29841],[-79.15065,42.26445],[-79.19671,42.2366],[-79.24919,42.21591],[-79.30609,42.20318],[-79.36523,42.19888],[-79.42438,42.20318],[-79.48128,42.21591],[-79.53376,42.2366],[-79.57982,42.26445],[-79.61769,42.29841],[-79.64592,42.33717],[-79.66341,42.37926],[-79.66947,42.42305],[-79.66383,42.46688],[-79.64669,42.50906],[-79.6187,42.54795],[-79.58091,42.58206],[-79.53476,42.61006],[-79.48205,42.63088],[-79.4248,42.6437],[-79.36523,42.64804]]]}},tampa_bay:{type:"Feature",id:"tampa_bay",properties:{},geometry:{type:"Polygon",coordinates:[[[-83,28.2],[-82.2,28.2],[-82.2,27.55],[-83,27.55],[-83,28.2]]]}},"Texas-Tech-University":{type:"Feature",id:"Texas-Tech-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-101.86523,33.80259],[-101.81251,33.79827],[-101.76183,33.78546],[-101.71515,33.76465],[-101.67428,33.73667],[-101.64078,33.70258],[-101.61595,33.66371],[-101.60072,33.62155],[-101.59568,33.57772],[-101.60099,33.53392],[-101.61644,33.49182],[-101.64143,33.45304],[-101.67498,33.41907],[-101.7158,33.39119],[-101.76233,33.37049],[-101.81278,33.35774],[-101.86523,33.35344],[-101.91769,33.35774],[-101.96814,33.37049],[-102.01467,33.39119],[-102.05549,33.41907],[-102.08904,33.45304],[-102.11403,33.49182],[-102.12948,33.53392],[-102.13479,33.57772],[-102.12975,33.62155],[-102.11452,33.66371],[-102.08969,33.70258],[-102.05619,33.73667],[-102.01532,33.76465],[-101.96864,33.78546],[-101.91796,33.79827],[-101.86523,33.80259]]]}},"The-Citadel":{type:"Feature",id:"The-Citadel",properties:{},geometry:{type:"Polygon",coordinates:[[[-79.96064,33.02165],[-79.90838,33.01732],[-79.85816,33.00451],[-79.81189,32.98371],[-79.77138,32.95573],[-79.73818,32.92164],[-79.71357,32.88277],[-79.69847,32.84061],[-79.69347,32.79679],[-79.69873,32.75298],[-79.71404,32.71088],[-79.73881,32.6721],[-79.77206,32.63813],[-79.81252,32.61025],[-79.85863,32.58954],[-79.90864,32.57679],[-79.96064,32.57249],[-80.01263,32.57679],[-80.06264,32.58954],[-80.10876,32.61025],[-80.14921,32.63813],[-80.18247,32.6721],[-80.20723,32.71088],[-80.22254,32.75298],[-80.2278,32.79679],[-80.2228,32.84061],[-80.2077,32.88277],[-80.18309,32.92164],[-80.14989,32.95573],[-80.10938,32.98371],[-80.06312,33.00451],[-80.01289,33.01732],[-79.96064,33.02165]]]}},"The-George-Washington-University":{type:"Feature",id:"The-George-Washington-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-77.04812,39.12442],[-76.99165,39.12009],[-76.93737,39.10727],[-76.88738,39.08646],[-76.84362,39.05846],[-76.80776,39.02436],[-76.7812,38.98548],[-76.76492,38.94331],[-76.75955,38.89948],[-76.76527,38.85569],[-76.78184,38.81359],[-76.80861,38.77483],[-76.84453,38.74086],[-76.88822,38.713],[-76.93801,38.6923],[-76.992,38.67956],[-77.04812,38.67526],[-77.10425,38.67956],[-77.15823,38.6923],[-77.20803,38.713],[-77.25172,38.74086],[-77.28764,38.77483],[-77.31441,38.81359],[-77.33097,38.85569],[-77.33669,38.89948],[-77.33132,38.94331],[-77.31505,38.98548],[-77.28848,39.02436],[-77.25263,39.05846],[-77.20887,39.08646],[-77.15888,39.10727],[-77.1046,39.12009],[-77.04812,39.12442]]]}},"The-Johns-Hopkins-University-SAIS":{type:"Feature",id:"The-Johns-Hopkins-University-SAIS",properties:{},geometry:{type:"Polygon",coordinates:[[[-77.04027,39.13272],[-76.98379,39.12839],[-76.9295,39.11557],[-76.87951,39.09476],[-76.83574,39.06677],[-76.79988,39.03267],[-76.77331,38.99378],[-76.75704,38.95161],[-76.75167,38.90779],[-76.75739,38.86399],[-76.77396,38.8219],[-76.80073,38.78313],[-76.83665,38.74916],[-76.88035,38.7213],[-76.93015,38.70061],[-76.98414,38.68787],[-77.04027,38.68356],[-77.0964,38.68787],[-77.15039,38.70061],[-77.20019,38.7213],[-77.24389,38.74916],[-77.27982,38.78313],[-77.30658,38.8219],[-77.32316,38.86399],[-77.32888,38.90779],[-77.32351,38.95161],[-77.30723,38.99378],[-77.28066,39.03267],[-77.2448,39.06677],[-77.20104,39.09476],[-77.15104,39.11557],[-77.09675,39.12839],[-77.04027,39.13272]]]}},"The-Pennsylvania-State-University":{type:"Feature",id:"The-Pennsylvania-State-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-77.85976,41.02277],[-77.80169,41.01844],[-77.74587,41.00562],[-77.69448,40.9848],[-77.64948,40.9568],[-77.61263,40.92269],[-77.58532,40.88381],[-77.5686,40.84164],[-77.5631,40.79781],[-77.56899,40.75401],[-77.58603,40.71192],[-77.61355,40.67316],[-77.65049,40.6392],[-77.6954,40.61134],[-77.74658,40.59065],[-77.80207,40.57791],[-77.85976,40.57361],[-77.91744,40.57791],[-77.97293,40.59065],[-78.02411,40.61134],[-78.06903,40.6392],[-78.10596,40.67316],[-78.13348,40.71192],[-78.15053,40.75401],[-78.15642,40.79781],[-78.15091,40.84164],[-78.13419,40.88381],[-78.10689,40.92269],[-78.07003,40.9568],[-78.02504,40.9848],[-77.97364,41.00562],[-77.91783,41.01844],[-77.85976,41.02277]]]}},"University-of-California-Davis":{type:"Feature",id:"University-of-California-Davis",properties:{},geometry:{type:"Polygon",coordinates:[[[-121.72852,38.77274],[-121.67232,38.76842],[-121.61831,38.7556],[-121.56857,38.73479],[-121.52502,38.70679],[-121.48934,38.67269],[-121.4629,38.63381],[-121.44671,38.59164],[-121.44136,38.54781],[-121.44705,38.50402],[-121.46354,38.46192],[-121.49017,38.42315],[-121.52591,38.38919],[-121.56939,38.36133],[-121.61894,38.34063],[-121.67267,38.32789],[-121.72852,38.32359],[-121.78437,38.32789],[-121.83809,38.34063],[-121.88764,38.36133],[-121.93112,38.38919],[-121.96686,38.42315],[-121.99349,38.46192],[-122.00998,38.50402],[-122.01567,38.54781],[-122.01032,38.59164],[-121.99413,38.63381],[-121.96769,38.67269],[-121.93201,38.70679],[-121.88847,38.73479],[-121.83872,38.7556],[-121.78471,38.76842],[-121.72852,38.77274]]]}},"University-of-Central-Florida":{type:"Feature",id:"University-of-Central-Florida",properties:{},geometry:{type:"Polygon",coordinates:[[[-81.38672,28.68361],[-81.33678,28.67929],[-81.28877,28.66648],[-81.24455,28.64569],[-81.20582,28.61771],[-81.17407,28.58364],[-81.15052,28.54477],[-81.13608,28.50262],[-81.13127,28.45879],[-81.13628,28.41499],[-81.15091,28.37289],[-81.17457,28.3341],[-81.20636,28.30011],[-81.24505,28.27223],[-81.28915,28.25151],[-81.33699,28.23876],[-81.38672,28.23445],[-81.43645,28.23876],[-81.48428,28.25151],[-81.52839,28.27223],[-81.56708,28.30011],[-81.59887,28.3341],[-81.62253,28.37289],[-81.63715,28.41499],[-81.64217,28.45879],[-81.63736,28.50262],[-81.62291,28.54477],[-81.59937,28.58364],[-81.56762,28.61771],[-81.52889,28.64569],[-81.48467,28.66648],[-81.43666,28.67929],[-81.38672,28.68361]]]}},"University-of-Chicago":{type:"Feature",id:"University-of-Chicago",properties:{},geometry:{type:"Polygon",coordinates:[[[-87.59878,42.0135],[-87.53981,42.00917],[-87.48314,41.99634],[-87.43095,41.97553],[-87.38527,41.94752],[-87.34785,41.91341],[-87.32013,41.87452],[-87.30316,41.83235],[-87.29758,41.78852],[-87.30357,41.74473],[-87.32088,41.70264],[-87.34882,41.66388],[-87.38632,41.62992],[-87.43192,41.60207],[-87.48388,41.58138],[-87.54022,41.56864],[-87.59878,41.56434],[-87.65734,41.56864],[-87.71367,41.58138],[-87.76563,41.60207],[-87.81124,41.62992],[-87.84873,41.66388],[-87.87668,41.70264],[-87.89399,41.74473],[-87.89998,41.78852],[-87.8944,41.83235],[-87.87743,41.87452],[-87.84971,41.91341],[-87.81229,41.94752],[-87.76661,41.97553],[-87.71442,41.99634],[-87.65774,42.00917],[-87.59878,42.0135]]]}},"University-of-Maryland-College-Park":{type:"Feature",id:"University-of-Maryland-College-Park",properties:{},geometry:{type:"Polygon",coordinates:[[[-76.94332,39.21148],[-76.88677,39.20715],[-76.83242,39.19433],[-76.78237,39.17352],[-76.73856,39.14552],[-76.70266,39.11142],[-76.67606,39.07254],[-76.65977,39.03037],[-76.65439,38.98654],[-76.66012,38.94275],[-76.67671,38.90065],[-76.70351,38.86189],[-76.73947,38.82792],[-76.78322,38.80006],[-76.83307,38.77937],[-76.88712,38.76662],[-76.94332,38.76232],[-76.99951,38.76662],[-77.05356,38.77937],[-77.10341,38.80006],[-77.14716,38.82792],[-77.18313,38.86189],[-77.20992,38.90065],[-77.22651,38.94275],[-77.23224,38.98654],[-77.22686,39.03037],[-77.21057,39.07254],[-77.18397,39.11142],[-77.14808,39.14552],[-77.10426,39.17352],[-77.05421,39.19433],[-76.99986,39.20715],[-76.94332,39.21148]]]}},"University-of-North-Texas":{type:"Feature",id:"University-of-North-Texas",properties:{},geometry:{type:"Polygon",coordinates:[[[-97.15255,33.43207],[-97.10005,33.42774],[-97.04958,33.41493],[-97.0031,33.39413],[-96.9624,33.36615],[-96.92905,33.33206],[-96.90432,33.29319],[-96.88916,33.25103],[-96.88413,33.2072],[-96.88942,33.1634],[-96.90481,33.1213],[-96.92969,33.08252],[-96.96309,33.04855],[-97.00374,33.02067],[-97.05007,32.99997],[-97.10031,32.98722],[-97.15255,32.98291],[-97.20478,32.98722],[-97.25502,32.99997],[-97.30135,33.02067],[-97.342,33.04855],[-97.3754,33.08252],[-97.40028,33.1213],[-97.41567,33.1634],[-97.42096,33.2072],[-97.41593,33.25103],[-97.40077,33.29319],[-97.37604,33.33206],[-97.34269,33.36615],[-97.30199,33.39413],[-97.25551,33.41493],[-97.20504,33.42774],[-97.15255,33.43207]]]}},"University-of-Northern-Colorado":{type:"Feature",id:"University-of-Northern-Colorado",properties:{},geometry:{type:"Polygon",coordinates:[[[-104.69563,40.62872],[-104.63791,40.62439],[-104.58242,40.61157],[-104.53133,40.59075],[-104.4866,40.56275],[-104.44996,40.52865],[-104.42281,40.48976],[-104.40619,40.44759],[-104.40071,40.40377],[-104.40657,40.35997],[-104.42351,40.31788],[-104.45087,40.27911],[-104.48758,40.24515],[-104.53224,40.21729],[-104.58312,40.1966],[-104.63828,40.18386],[-104.69563,40.17956],[-104.75298,40.18386],[-104.80815,40.1966],[-104.85903,40.21729],[-104.90368,40.24515],[-104.94039,40.27911],[-104.96775,40.31788],[-104.98469,40.35997],[-104.99055,40.40377],[-104.98507,40.44759],[-104.96845,40.48976],[-104.9413,40.52865],[-104.90466,40.56275],[-104.85994,40.59075],[-104.80884,40.61157],[-104.75336,40.62439],[-104.69563,40.62872]]]}},"University-of-Oregon":{type:"Feature",id:"University-of-Oregon",properties:{},geometry:{type:"Polygon",coordinates:[[[-123.04688,44.249],[-122.98571,44.24467],[-122.92693,44.23184],[-122.87281,44.21102],[-122.82543,44.18301],[-122.78663,44.1489],[-122.7579,44.11],[-122.74032,44.06783],[-122.73455,44.024],[-122.74077,43.9802],[-122.75874,43.93812],[-122.78773,43.89936],[-122.82661,43.86541],[-122.8739,43.83756],[-122.92777,43.81688],[-122.98617,43.80414],[-123.04688,43.79984],[-123.10758,43.80414],[-123.16598,43.81688],[-123.21985,43.83756],[-123.26714,43.86541],[-123.30602,43.89936],[-123.33501,43.93812],[-123.35298,43.9802],[-123.3592,44.024],[-123.35343,44.06783],[-123.33585,44.11],[-123.30712,44.1489],[-123.26832,44.18301],[-123.22094,44.21102],[-123.16682,44.23184],[-123.10804,44.24467],[-123.04688,44.249]]]}},"University-of-Redlands":{type:"Feature",id:"University-of-Redlands",properties:{},geometry:{type:"Polygon",coordinates:[[[-117.16339,34.28768],[-117.11037,34.28336],[-117.0594,34.27054],[-117.01245,34.24974],[-116.97134,34.22175],[-116.93766,34.18767],[-116.91268,34.14879],[-116.89737,34.10663],[-116.8923,34.06281],[-116.89765,34.019],[-116.91319,33.97691],[-116.93832,33.93813],[-116.97206,33.90415],[-117.01311,33.87628],[-117.0599,33.85558],[-117.11064,33.84283],[-117.16339,33.83852],[-117.21614,33.84283],[-117.26688,33.85558],[-117.31367,33.87628],[-117.35473,33.90415],[-117.38847,33.93813],[-117.4136,33.97691],[-117.42914,34.019],[-117.43448,34.06281],[-117.42941,34.10663],[-117.4141,34.14879],[-117.38913,34.18767],[-117.35544,34.22175],[-117.31434,34.24974],[-117.26739,34.27054],[-117.21642,34.28336],[-117.16339,34.28768]]]}},"University-of-South-Carolina":{type:"Feature",id:"University-of-South-Carolina",properties:{},geometry:{type:"Polygon",coordinates:[[[-81.03516,34.24082],[-80.98216,34.23649],[-80.93122,34.22368],[-80.8843,34.20288],[-80.84321,34.17489],[-80.80954,34.14081],[-80.78458,34.10193],[-80.76928,34.05977],[-80.76421,34.01594],[-80.76956,33.97214],[-80.78509,33.93005],[-80.81021,33.89127],[-80.84393,33.85729],[-80.88496,33.82942],[-80.93172,33.80871],[-80.98243,33.79597],[-81.03516,33.79166],[-81.08788,33.79597],[-81.13859,33.80871],[-81.18535,33.82942],[-81.22638,33.85729],[-81.26011,33.89127],[-81.28522,33.93005],[-81.30076,33.97214],[-81.3061,34.01594],[-81.30103,34.05977],[-81.28573,34.10193],[-81.26077,34.14081],[-81.2271,34.17489],[-81.18602,34.20288],[-81.1391,34.22368],[-81.08815,34.23649],[-81.03516,34.24082]]]}},"University-of-Southern-California":{type:"Feature",id:"University-of-Southern-California",properties:{},geometry:{type:"Polygon",coordinates:[[[-118.30078,34.24082],[-118.24779,34.23649],[-118.19684,34.22368],[-118.14992,34.20288],[-118.10884,34.17489],[-118.07517,34.14081],[-118.05021,34.10193],[-118.03491,34.05977],[-118.02984,34.01594],[-118.03518,33.97214],[-118.05072,33.93005],[-118.07583,33.89127],[-118.10955,33.85729],[-118.15058,33.82942],[-118.19735,33.80871],[-118.24806,33.79597],[-118.30078,33.79166],[-118.3535,33.79597],[-118.40421,33.80871],[-118.45098,33.82942],[-118.49201,33.85729],[-118.52573,33.89127],[-118.55085,33.93005],[-118.56638,33.97214],[-118.57172,34.01594],[-118.56665,34.05977],[-118.55135,34.10193],[-118.52639,34.14081],[-118.49273,34.17489],[-118.45164,34.20288],[-118.40472,34.22368],[-118.35378,34.23649],[-118.30078,34.24082]]]}},"University-of-Vermont":{type:"Feature",id:"University-of-Vermont",properties:{},geometry:{type:"Polygon",coordinates:[[[-73.21289,44.68973],[-73.15127,44.6854],[-73.09204,44.67257],[-73.0375,44.65175],[-72.98977,44.62374],[-72.95068,44.58962],[-72.92174,44.55072],[-72.90403,44.50855],[-72.89821,44.46472],[-72.90449,44.42092],[-72.92259,44.37884],[-72.9518,44.34008],[-72.99098,44.30613],[-73.03862,44.27829],[-73.09289,44.2576],[-73.15173,44.24487],[-73.21289,44.24057],[-73.27405,44.24487],[-73.33289,44.2576],[-73.38716,44.27829],[-73.4348,44.30613],[-73.47398,44.34008],[-73.50319,44.37884],[-73.52129,44.42092],[-73.52757,44.46472],[-73.52175,44.50855],[-73.50404,44.55072],[-73.4751,44.58962],[-73.43601,44.62374],[-73.38828,44.65175],[-73.33374,44.67257],[-73.27451,44.6854],[-73.21289,44.68973]]]}},"University-of-Victoria":{type:"Feature",id:"University-of-Victoria",properties:{},geometry:{type:"Polygon",coordinates:[[[-123.31186,48.68804],[-123.24549,48.68371],[-123.18171,48.67087],[-123.123,48.65004],[-123.07162,48.62201],[-123.02956,48.58789],[-122.99842,48.54898],[-122.9794,48.5068],[-122.97318,48.46297],[-122.97997,48.41917],[-122.99948,48.3771],[-123.03094,48.33835],[-123.07312,48.30441],[-123.12438,48.27658],[-123.18277,48.25591],[-123.24607,48.24318],[-123.31186,48.23888],[-123.37764,48.24318],[-123.44094,48.25591],[-123.49933,48.27658],[-123.55059,48.30441],[-123.59277,48.33835],[-123.62423,48.3771],[-123.64374,48.41917],[-123.65053,48.46297],[-123.64431,48.5068],[-123.62529,48.54898],[-123.59415,48.58789],[-123.55209,48.62201],[-123.50071,48.65004],[-123.442,48.67087],[-123.37822,48.68371],[-123.31186,48.68804]]]}},"University-of-Wyoming":{type:"Feature",id:"University-of-Wyoming",properties:{},geometry:{type:"Polygon",coordinates:[[[-105.56651,41.53953],[-105.50798,41.5352],[-105.45172,41.52238],[-105.39992,41.50157],[-105.35457,41.47356],[-105.31742,41.43946],[-105.2899,41.40057],[-105.27306,41.3584],[-105.26751,41.31457],[-105.27345,41.27077],[-105.29063,41.22868],[-105.31837,41.18992],[-105.3556,41.15596],[-105.40087,41.12811],[-105.45245,41.10742],[-105.50837,41.09468],[-105.56651,41.09038],[-105.62465,41.09468],[-105.68057,41.10742],[-105.73215,41.12811],[-105.77742,41.15596],[-105.81465,41.18992],[-105.84239,41.22868],[-105.85957,41.27077],[-105.86551,41.31457],[-105.85996,41.3584],[-105.84312,41.40057],[-105.8156,41.43946],[-105.77845,41.47356],[-105.7331,41.50157],[-105.6813,41.52238],[-105.62504,41.5352],[-105.56651,41.53953]]]}},usa_full:{type:"Feature",id:"usa_full",properties:{},geometry:{type:"MultiPolygon",coordinates:[[[[-124.76179,48.41301],[-123.22752,48.18499],[-123.32289,49.00429],[-96.01312,49.00605],[-95.11054,49.412],[-93.99811,49.00671],[-89.43531,47.98378],[-88.34922,48.29633],[-87.50645,48.01427],[-83.2814,46.13885],[-82.17616,43.58854],[-82.66248,41.68895],[-79.00601,42.80053],[-79.15798,43.44626],[-78.76239,43.62496],[-76.90231,43.80246],[-75.07988,44.98029],[-72.02225,45.00598],[-71.41227,45.25488],[-70.46149,46.21766],[-69.25051,47.51223],[-67.75966,47.099],[-66.94528,44.71049],[-69.84893,43.26199],[-69.87974,40.99205],[-72.00202,40.99125],[-74.02112,39.57279],[-75.41474,35.05319],[-80.02453,32.01613],[-79.89011,26.85507],[-80.02,24.0071],[-84.01601,24.00527],[-84.01656,25.01258],[-81.99666,25.01349],[-81.9972,25.98268],[-84.01879,28.99618],[-86.02775,30.00475],[-88.01625,30.00389],[-88.01567,28.99443],[-90.90285,28.85645],[-93.74053,29.47421],[-95.55633,28.58761],[-96.80617,27.79782],[-96.95553,25.98216],[-97.43502,25.8266],[-98.01091,25.9928],[-99.23511,26.4476],[-100.00624,28.00822],[-101.25529,29.48105],[-102.1514,29.74757],[-102.71736,29.39206],[-103.25189,28.89087],[-104.58819,29.69979],[-105.02053,30.5361],[-106.20525,31.4467],[-106.28689,31.56133],[-106.42932,31.75206],[-106.48421,31.74645],[-106.53072,31.78209],[-108.18711,31.77551],[-108.19927,31.326],[-111.00893,31.33601],[-114.86123,32.47999],[-117.67593,32.46302],[-119.97759,33.00641],[-122.53697,36.85661],[-124.99343,40.05576],[-124.60595,45.90245],[-124.76179,48.41301]]],[[[-160.57876,22.50629],[-159.00937,22.50702],[-157.50474,21.9985],[-156.29276,21.22259],[-154.68902,19.88057],[-154.62178,18.7587],[-155.99619,18.77902],[-157.50832,20.9958],[-158.74706,21.24398],[-160.57822,21.49846],[-160.57876,22.50629]]],[[[-167.1572,68.722],[-164.9717,68.9947],[-163.0218,69.9707],[-160.4136,70.7398],[-156.1769,71.5633],[-140.9684,69.9535],[-140.9874,61.0119],[-139.1716,60.4127],[-138.0072,59.9918],[-135.123,59.7566],[-131.9759,56.9995],[-130.0071,57.0001],[-130.0044,54.0043],[-133.9948,54.0032],[-138.515,57.9986],[-138.516,58.9953],[-151.5013,58.992],[-151.5003,57.9988],[-151.9963,55.9992],[-158.0191,55.0028],[-159.0076,55.0025],[-162.4025,53.9567],[-171.4689,51.8215],[-177.9993,51.2554],[-178.0001,52.2446],[-173.8197,59.7401],[-172.5143,63.8767],[-169.0075,64.9988],[-169.0087,66.0015],[-168.0022,66.0018],[-164.8554,67.0255],[-167.1572,68.722]]],[[[-68.2,17.8],[-67.9,18.67],[-65.33,18.57],[-64.64,18.36],[-64.32,17.38],[-68.2,17.8]]],[[[146.2,15.4],[144.8,12.9],[144.2,13.2],[145.7,15.6],[146.2,15.4]]],[[[180,52.2],[180,51],[172,52.5],[172,53.5],[180,52.2]]]]}},"UW-Madison":{type:"Feature",id:"UW-Madison",properties:{},geometry:{type:"Polygon",coordinates:[[[-89.41268,43.30123],[-89.35248,43.2969],[-89.29462,43.28408],[-89.24134,43.26326],[-89.19471,43.23525],[-89.15652,43.20114],[-89.12823,43.16225],[-89.11092,43.12007],[-89.10523,43.07624],[-89.11135,43.03245],[-89.12903,42.99036],[-89.15756,42.9516],[-89.19584,42.91765],[-89.24239,42.8898],[-89.29542,42.86911],[-89.35291,42.85638],[-89.41268,42.85208],[-89.47245,42.85638],[-89.52994,42.86911],[-89.58298,42.8898],[-89.62952,42.91765],[-89.6678,42.9516],[-89.69634,42.99036],[-89.71401,43.03245],[-89.72014,43.07624],[-89.71444,43.12007],[-89.69713,43.16225],[-89.66884,43.20114],[-89.63065,43.23525],[-89.58402,43.26326],[-89.53074,43.28408],[-89.47288,43.2969],[-89.41268,43.30123]]]}},"Vassar-College":{type:"Feature",id:"Vassar-College",properties:{},geometry:{type:"Polygon",coordinates:[[[-73.89515,41.91136],[-73.83628,41.90703],[-73.7797,41.8942],[-73.72759,41.87339],[-73.68198,41.84538],[-73.64462,41.81127],[-73.61695,41.77238],[-73.6,41.73021],[-73.59443,41.68639],[-73.60041,41.64259],[-73.61769,41.6005],[-73.64559,41.56174],[-73.68303,41.52778],[-73.72856,41.49993],[-73.78044,41.47924],[-73.83668,41.4665],[-73.89515,41.4622],[-73.95362,41.4665],[-74.00986,41.47924],[-74.06174,41.49993],[-74.10727,41.52778],[-74.14471,41.56174],[-74.17261,41.6005],[-74.1899,41.64259],[-74.19587,41.68639],[-74.1903,41.73021],[-74.17336,41.77238],[-74.14568,41.81127],[-74.10832,41.84538],[-74.06271,41.87339],[-74.01061,41.8942],[-73.95402,41.90703],[-73.89515,41.91136]]]}},"Villanova-University":{type:"Feature",id:"Villanova-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-75.34361,40.26191],[-75.28619,40.25758],[-75.23101,40.24476],[-75.18019,40.22394],[-75.13571,40.19594],[-75.09927,40.16184],[-75.07227,40.12296],[-75.05573,40.08079],[-75.05028,40.03696],[-75.0561,39.99316],[-75.07295,39.95107],[-75.10016,39.9123],[-75.13667,39.87834],[-75.18109,39.85048],[-75.23169,39.82979],[-75.28656,39.81705],[-75.34361,39.81275],[-75.40065,39.81705],[-75.45552,39.82979],[-75.50613,39.85048],[-75.55054,39.87834],[-75.58705,39.9123],[-75.61426,39.95107],[-75.63111,39.99316],[-75.63693,40.03696],[-75.63148,40.08079],[-75.61495,40.12296],[-75.58795,40.16184],[-75.5515,40.19594],[-75.50702,40.22394],[-75.4562,40.24476],[-75.40102,40.25758],[-75.34361,40.26191]]]}},"West-Virginia-University":{type:"Feature",id:"West-Virginia-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-79.98047,39.86412],[-79.92339,39.85979],[-79.86853,39.84697],[-79.81801,39.82616],[-79.77378,39.79816],[-79.73755,39.76405],[-79.7107,39.72517],[-79.69426,39.683],[-79.68884,39.63917],[-79.69462,39.59537],[-79.71137,39.55328],[-79.73842,39.51452],[-79.77473,39.48055],[-79.81888,39.4527],[-79.8692,39.432],[-79.92375,39.41926],[-79.98047,39.41496],[-80.03718,39.41926],[-80.09174,39.432],[-80.14206,39.4527],[-80.18621,39.48055],[-80.22252,39.51452],[-80.24957,39.55328],[-80.26632,39.59537],[-80.2721,39.63917],[-80.26668,39.683],[-80.25024,39.72517],[-80.22339,39.76405],[-80.18716,39.79816],[-80.14293,39.82616],[-80.09241,39.84697],[-80.03755,39.85979],[-79.98047,39.86412]]]}},"Western-Michigan-University":{type:"Feature",id:"Western-Michigan-University",properties:{},geometry:{type:"Polygon",coordinates:[[[-85.61042,42.5082],[-85.55099,42.50387],[-85.49387,42.49105],[-85.44127,42.47023],[-85.39523,42.44222],[-85.35752,42.40811],[-85.32959,42.36922],[-85.31249,42.32705],[-85.30686,42.28322],[-85.3129,42.23942],[-85.33035,42.19734],[-85.35852,42.15858],[-85.39631,42.12462],[-85.44227,42.09677],[-85.49464,42.07608],[-85.55141,42.06334],[-85.61042,42.05904],[-85.66944,42.06334],[-85.72621,42.07608],[-85.77857,42.09677],[-85.82453,42.12462],[-85.86232,42.15858],[-85.89049,42.19734],[-85.90794,42.23942],[-85.91398,42.28322],[-85.90835,42.32705],[-85.89125,42.36922],[-85.86332,42.40811],[-85.82561,42.44222],[-85.77957,42.47023],[-85.72697,42.49105],[-85.66985,42.50387],[-85.61042,42.5082]]]}},wyoming:{type:"Feature",id:"wyoming",properties:{},geometry:{type:"Polygon",coordinates:[[[-111.05,41],[-111.05,45],[-104.05,45],[-104.05,41],[-111.05,41]]]}},australia_full:{type:"Feature",id:"australia_full",properties:{},geometry:{type:"Polygon",coordinates:[[[146.07422,-44.43378],[131.66016,-44.65302],[124.54102,-41.44273],[116.45508,-39.36828],[108.80859,-39.16414],[103.18359,-27.60567],[95.27344,-24.04646],[96.30615,-11.15685],[106.25977,-9.92557],[116.47705,-13.98738],[122.77222,-11.65224],[126.43066,-11.48002],[129.26514,-9.92557],[134.89014,-9.92557],[139.46045,-10.14193],[141.55334,-9.99861],[141.7868,-9.77132],[142.229,-9.67115],[142.72614,-9.552],[143.30017,-9.39216],[144.24774,-9.24851],[144.44824,-9.59533],[149.5459,-12.68321],[154.90723,-18.02053],[156.42334,-21.55528],[158.02734,-24.68695],[160.0708,-26.03704],[167.34375,-26.6671],[170.354,-29.11378],[168.2666,-30.63791],[160.15869,-34.03445],[152.18262,-38.41056],[149.94141,-43.51669],[146.07422,-44.43378]]]}},argentina:{type:"Feature",id:"argentina",properties:{},geometry:{type:"Polygon",coordinates:[[[-73.14602,-49.18818],[-72.91615,-48.93261],[-72.53201,-48.80072],[-72.58755,-48.48542],[-72.22624,-48.32339],[-72.49784,-47.96155],[-72.33315,-47.44938],[-71.86801,-47.23376],[-71.94851,-46.80983],[-71.64665,-46.68783],[-71.79939,-46.19141],[-71.6147,-45.97522],[-71.79762,-45.62288],[-71.46813,-45.4921],[-71.32472,-45.306],[-71.56043,-44.97863],[-72.04094,-44.90019],[-72.07396,-44.78023],[-71.46969,-44.73753],[-71.23704,-44.79082],[-71.13226,-44.4711],[-71.36469,-44.38958],[-71.80731,-44.42036],[-71.84736,-44.11002],[-71.64902,-43.94552],[-71.75129,-43.78527],[-71.60784,-43.62836],[-71.93082,-43.45685],[-71.76157,-43.1645],[-72.14281,-42.8979],[-72.1812,-42.69735],[-72.023,-42.41766],[-72.17288,-42.14043],[-71.72931,-42.12447],[-71.91021,-41.34113],[-71.8196,-41.06038],[-71.96387,-40.71955],[-71.8414,-40.4521],[-71.65704,-40.36426],[-71.82818,-40.20778],[-71.59266,-39.90123],[-71.67811,-39.56486],[-71.39497,-39.34179],[-71.42542,-38.92164],[-70.92524,-38.76298],[-70.84044,-38.54138],[-70.97623,-38.44222],[-70.98292,-38.10477],[-71.21191,-37.68901],[-71.11983,-37.4585],[-71.21555,-37.27261],[-71.09237,-37.11444],[-71.11982,-36.69792],[-71.03513,-36.47333],[-70.71285,-36.42687],[-70.70501,-36.27229],[-70.42451,-36.15581],[-70.38755,-35.60868],[-70.43201,-35.31842],[-70.58358,-35.27831],[-70.36203,-35.13645],[-70.21683,-34.61145],[-70.01089,-34.41389],[-70.03094,-34.28805],[-69.79507,-34.24304],[-69.90417,-33.77143],[-69.7705,-33.3611],[-70.00282,-33.32294],[-70.08089,-33.02919],[-70.00121,-32.8846],[-70.17038,-32.62555],[-70.14899,-32.46585],[-70.31918,-32.27335],[-70.35277,-32.0257],[-70.2106,-31.95769],[-70.46072,-31.84116],[-70.56691,-31.60016],[-70.49734,-31.12216],[-70.40805,-31.16633],[-70.23998,-30.61575],[-70.11719,-30.43102],[-69.89853,-30.35557],[-69.87492,-29.7043],[-70.01808,-29.38321],[-69.78724,-29.13008],[-69.68114,-28.47172],[-69.45679,-28.18357],[-69.17254,-27.97088],[-68.94231,-27.52325],[-68.8412,-27.15464],[-68.29854,-27.0389],[-68.2638,-26.91623],[-68.58734,-26.49294],[-68.55754,-26.2871],[-68.38108,-26.17822],[-68.57599,-25.42894],[-68.4999,-25.16149],[-68.34279,-25.1124],[-68.56789,-24.79739],[-68.26201,-24.40457],[-67.32231,-24.0344],[-66.99052,-23.00044],[-67.18066,-22.8138],[-67.02827,-22.54089],[-66.78247,-22.43778],[-66.73899,-22.23893],[-66.28793,-22.08605],[-66.24277,-21.79408],[-66.07589,-21.83493],[-65.74764,-22.10912],[-64.99322,-22.08239],[-64.53579,-22.29137],[-64.29933,-22.86509],[-64.24332,-22.56039],[-63.93139,-22],[-62.80617,-22],[-62.7913,-22.16193],[-62.3009,-22.48659],[-62.20671,-22.70418],[-61.73612,-23.23432],[-61.08824,-23.61393],[-60.9899,-23.81808],[-60.37353,-24.024],[-60.03941,-24.01156],[-59.47554,-24.33261],[-59.35397,-24.47821],[-58.67243,-24.83192],[-58.24167,-24.92801],[-57.76089,-25.17193],[-57.555,-25.4484],[-57.74064,-25.65045],[-57.89112,-25.9662],[-58.08473,-26.11185],[-58.22103,-26.41403],[-58.18996,-26.64518],[-58.31991,-26.85821],[-58.64913,-27.12662],[-58.59905,-27.29984],[-57.87482,-27.27527],[-57.48754,-27.44418],[-56.96564,-27.50202],[-56.84926,-27.6063],[-56.60117,-27.42102],[-56.3749,-27.58903],[-56.29432,-27.42003],[-56.06276,-27.306],[-55.73692,-27.44516],[-55.6057,-27.16241],[-55.42284,-26.99528],[-54.78695,-26.63111],[-54.61874,-26.20893],[-54.67933,-25.99524],[-54.65698,-25.67619],[-54.5842,-25.58952],[-54.4812,-25.62543],[-54.108,-25.495],[-53.86217,-25.65902],[-53.83619,-25.97166],[-53.6411,-26.21559],[-53.73094,-26.5097],[-53.67249,-26.91252],[-53.84355,-27.16453],[-53.959,-27.15804],[-54.21736,-27.38603],[-54.673,-27.57],[-54.814,-27.533],[-54.936,-27.772],[-55.38728,-27.98524],[-55.76677,-28.23982],[-55.69902,-28.42637],[-55.88091,-28.4715],[-56.29651,-28.80272],[-56.42475,-29.07897],[-56.59315,-29.12516],[-56.70164,-29.35913],[-57.328,-29.972],[-57.64923,-30.20184],[-57.63687,-30.33197],[-57.85924,-30.47701],[-57.8096,-30.91332],[-58.08141,-31.45457],[-57.98082,-31.58691],[-58.20653,-31.86773],[-58.10645,-32.24002],[-58.20464,-32.46055],[-58.0841,-32.99782],[-58.36693,-33.12177],[-58.49375,-33.57857],[-58.29507,-34.17809],[-57.9345,-34.4519],[-55.9,-35.6],[-57,-39],[-61,-41],[-63.5,-55],[-66.67094,-55.11906],[-67.27285,-54.90511],[-67.95071,-54.87373],[-68.60967,-54.91369],[-68.60676,-52.65902],[-68.41869,-52.3325],[-69.19014,-52.15044],[-69.48632,-52.15165],[-69.9955,-52.00074],[-71.92259,-51.99991],[-72.29907,-51.69791],[-72.28621,-50.65987],[-72.72636,-50.61667],[-73.06995,-50.78909],[-73.32848,-50.5716],[-73.52199,-50.15397],[-73.44481,-49.79226],[-73.53933,-49.49825],[-73.47299,-49.20464],[-73.14602,-49.18818]]]}},bolivia:{type:"Feature",id:"bolivia",properties:{},geometry:{type:"Polygon",coordinates:[[[-60.17487,-16.26675],[-58.32092,-16.31948],[-58.47336,-16.74472],[-58.39371,-17.18081],[-57.79152,-17.55501],[-57.71187,-17.73103],[-57.55463,-18.22348],[-57.72079,-18.89914],[-57.70775,-19.0381],[-58.11768,-19.75313],[-57.85675,-19.96754],[-58.15338,-20.15201],[-58.17535,-19.83066],[-59.07074,-19.28846],[-59.97025,-19.29494],[-61.78848,-19.65358],[-62.57401,-21.99972],[-63.93082,-22.00736],[-64.24942,-22.60957],[-64.31808,-22.8806],[-64.56528,-22.36595],[-64.62021,-22.21856],[-64.99649,-22.08628],[-65.77446,-22.10027],[-65.92552,-21.93222],[-66.04774,-21.91884],[-66.04225,-21.86022],[-66.2273,-21.78437],[-66.3121,-22.1219],[-66.74057,-22.23635],[-66.7955,-22.44213],[-67.18002,-22.81353],[-67.56351,-22.90085],[-67.81174,-22.87934],[-68.17566,-21.3252],[-68.405,-20.9499],[-68.54095,-20.92681],[-68.55606,-20.7285],[-68.43796,-20.63857],[-68.74557,-20.46369],[-68.72772,-20.08173],[-68.56293,-20.05077],[-68.53134,-19.85779],[-68.69064,-19.74667],[-68.41873,-19.41544],[-68.9296,-18.97448],[-69.12186,-18.14128],[-69.46793,-17.50852],[-69.46793,-17.37489],[-69.63547,-17.27787],[-69.01199,-16.66053],[-69.03877,-16.58487],[-68.93509,-16.2061],[-69.16718,-16.22259],[-69.40201,-15.62634],[-69.13422,-15.23516],[-69.35806,-14.96933],[-68.97903,-14.21979],[-68.87466,-12.88745],[-68.65768,-12.49088],[-69.57264,-10.94456],[-68.74806,-11.00835],[-68.75167,-11.01762],[-68.75201,-11.03716],[-68.76592,-11.04963],[-68.70815,-11.14253],[-68.54576,-11.11036],[-68.24295,-10.95872],[-68.08502,-10.69165],[-67.86736,-10.64036],[-67.71629,-10.71459],[-67.6775,-10.60341],[-67.65947,-10.61792],[-67.58446,-10.50402],[-67.43614,-10.44966],[-67.40593,-10.38314],[-67.31461,-10.37774],[-67.32216,-10.32438],[-67.1953,-10.32277],[-67.18869,-10.33983],[-67.17093,-10.33814],[-66.57921,-9.90392],[-65.86441,-9.75981],[-65.56503,-9.82477],[-65.44968,-9.67318],[-65.29449,-9.85589],[-65.39474,-10.54722],[-65.35629,-10.78474],[-65.2684,-10.88658],[-65.29861,-11.32656],[-65.14481,-11.70939],[-64.36752,-12.4587],[-63.67538,-12.46675],[-61.64841,-13.53453],[-61.06339,-13.52919],[-60.4303,-13.88608],[-60.23804,-15.09864],[-60.57312,-15.09599],[-60.24353,-15.47221],[-60.17487,-16.26675]]]}},bahia:{id:"bahia",type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-46.26343,-11.52309],[-46.40625,-11.53923],[-46.51062,-11.50425],[-46.604,-11.3481],[-46.61224,-11.25653],[-46.46668,-11.1811],[-46.42822,-11.02208],[-46.32935,-10.9331],[-46.19751,-10.65521],[-45.84045,-10.47701],[-45.82672,-10.35275],[-45.74707,-10.34194],[-45.70038,-10.26087],[-45.72784,-10.15815],[-45.59326,-10.09326],[-45.41199,-10.43379],[-45.45593,-10.55262],[-45.37903,-10.72538],[-45.15381,-10.8387],[-44.90112,-10.90883],[-44.60999,-10.66601],[-44.34631,-10.54182],[-44.13757,-10.63362],[-44.05518,-10.39057],[-43.96179,-10.42839],[-43.78601,-10.15275],[-43.69263,-10.03918],[-43.69812,-9.95262],[-43.64868,-9.82274],[-43.76404,-9.76861],[-43.8794,-9.54117],[-43.68713,-9.41655],[-43.4729,-9.24851],[-43.3081,-9.37861],[-43.04443,-9.36235],[-42.8302,-9.60617],[-42.33581,-9.31899],[-41.90735,-9.23767],[-41.7865,-9.09125],[-41.40198,-8.71136],[-41.14929,-8.70593],[-41.03943,-8.83351],[-41.01471,-8.82808],[-40.92407,-8.83894],[-40.8197,-9.07226],[-40.68237,-9.14277],[-40.66864,-9.26478],[-40.7428,-9.30002],[-40.75653,-9.42197],[-40.62744,-9.47615],[-40.53131,-9.41384],[-40.47363,-9.39758],[-40.42694,-9.34338],[-40.36102,-9.37319],[-40.29785,-9.09396],[-40.23468,-9.04243],[-40.14679,-9.10481],[-40.07813,-9.05057],[-39.98749,-9.05599],[-39.8996,-8.95833],[-39.90509,-8.82808],[-39.68262,-8.77923],[-39.70459,-8.67063],[-39.65241,-8.65977],[-39.41345,-8.50769],[-39.2926,-8.54843],[-39.23492,-8.6299],[-38.96576,-8.76837],[-38.86963,-8.76837],[-38.71307,-8.83622],[-38.68835,-8.90678],[-38.66913,-8.98275],[-38.61694,-8.96376],[-38.60596,-8.86065],[-38.5675,-8.81723],[-38.47687,-8.84708],[-38.50983,-8.94205],[-38.42194,-9.037],[-38.33679,-8.97461],[-38.28461,-9.00716],[-38.31757,-9.06684],[-38.21045,-9.36235],[-38.04565,-9.4599],[-38.02368,-9.8498],[-37.89185,-9.96885],[-37.74902,-10.31492],[-37.8479,-10.37977],[-37.78198,-10.64981],[-37.93579,-10.73617],[-38.13354,-10.6822],[-38.26538,-10.79014],[-38.02368,-11.31848],[-37.73804,-11.57691],[-37.3645,-11.48002],[-38.50159,-18.11975],[-39.65515,-18.35453],[-40.25391,-17.96828],[-40.23193,-17.79053],[-40.61646,-17.38209],[-40.51758,-16.89917],[-40.13306,-16.45716],[-39.90234,-16.04581],[-40.68237,-15.68651],[-41.08887,-15.73939],[-41.35254,-15.73939],[-41.37451,-15.49603],[-41.80298,-15.09334],[-42.04468,-15.18878],[-43.24219,-14.67925],[-43.50586,-14.78551],[-43.92334,-14.63674],[-43.7915,-14.31761],[-44.35181,-14.24309],[-44.65942,-14.38148],[-45.78003,-15.13576],[-46.10962,-15.29478],[-46.06567,-14.87047],[-45.92285,-14.38148],[-46.24146,-14.14723],[-46.32935,-13.11158],[-46.38428,-12.02858],[-46.26343,-11.52309]]]}},brazil:{type:"Feature",id:"brazil",properties:{},geometry:{type:"Polygon",coordinates:[[[-51.56433,4.29711],[-28.4491,1.04914],[-37.67761,-21.04862],[-52.94861,-34.05721],[-53.56384,-33.71063],[-53.58581,-33.23409],[-53.16833,-32.81036],[-54.11316,-32.08723],[-55.73914,-30.85036],[-56.11267,-31.18931],[-56.11267,-30.90694],[-57.0575,-30.14988],[-57.23328,-30.32073],[-57.73865,-30.26381],[-55.98083,-28.5411],[-54.94812,-27.68839],[-53.80554,-27.18136],[-53.7616,-26.73089],[-53.87146,-26.00249],[-54.20105,-25.88394],[-54.6405,-25.88394],[-54.28894,-24.13171],[-55.43701,-24.18685],[-55.87647,-22.3704],[-58.07373,-22.08564],[-58.24402,-20.06109],[-57.71668,-17.98396],[-58.43628,-17.18278],[-58.50769,-16.38866],[-60.1831,-16.29905],[-60.26001,-15.14637],[-60.49072,-14.09396],[-60.94116,-13.63531],[-61.85303,-13.5926],[-63.58887,-12.56529],[-64.22058,-12.55992],[-65.20386,-11.8996],[-65.4126,-9.74154],[-66.82983,-10.1203],[-68.17566,-10.92501],[-70.6366,-11.18379],[-70.6366,-9.62783],[-71.42761,-9.97426],[-72.74597,-9.88769],[-73.97644,-7.10634],[-72.70752,-4.67498],[-70.15869,-4.23686],[-69.67529,-1.03266],[-70.19714,1.75205],[-67.56042,1.83989],[-66.94519,0.69761],[-63.78113,1.83989],[-64.84131,4.36832],[-63.25378,3.59566],[-60.24353,5.20584],[-60.03479,4.98698],[-59.57886,3.81493],[-59.89746,3.26118],[-60.05676,2.76199],[-59.9469,2.2626],[-59.77661,2.23515],[-59.77661,1.75754],[-58.64502,1.55987],[-55.87647,2.61384],[-53.10791,2.35041],[-51.56433,4.29711]]]}},df_br:{id:"df_br",type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-48.20114,-15.49868],[-47.42111,-15.5],[-47.38953,-15.56484],[-47.32361,-15.58865],[-47.33047,-15.63891],[-47.31125,-15.73278],[-47.36755,-15.83189],[-47.3703,-15.927],[-47.36893,-15.99698],[-47.30988,-16.04317],[-48.27805,-16.04713],[-48.24921,-15.94152],[-48.2753,-15.93096],[-48.29041,-15.83189],[-48.22998,-15.77772],[-48.21899,-15.71163],[-48.24097,-15.70898],[-48.23547,-15.66535],[-48.22449,-15.63097],[-48.20251,-15.62568],[-48.20114,-15.49868]]]}},rs_br:{id:"rs_br",type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-50.56791,-28.32331],[-49.64837,-28.40599],[-49.62152,-28.67722],[-49.82288,-28.81257],[-49.86986,-29.14725],[-49.40674,-29.43409],[-50.66187,-31.5221],[-51.51429,-32.07544],[-52.0244,-32.51232],[-52.32644,-33.22264],[-53.199,-34.04411],[-53.65541,-33.63156],[-53.50103,-32.61414],[-55.57503,-31.01726],[-56.0113,-31.18392],[-56.20595,-30.78112],[-56.93084,-30.18535],[-57.2463,-30.36505],[-57.57519,-30.33029],[-57.71614,-30.18535],[-57.40068,-29.91811],[-57.23959,-29.67347],[-56.02473,-28.4178],[-55.70255,-28.08671],[-54.40043,-27.2008],[-53.38022,-26.97372],[-51.97071,-27.23661],[-51.03103,-27.74271],[-50.56791,-28.32331]]]}},chile:{type:"Feature",id:"chile",properties:{},geometry:{type:"MultiPolygon",coordinates:[[[[-110,-28],[-110,-26],[-109,-26],[-109,-28],[-110,-28]],[[-69.46999,-17.50394],[-69.67049,-17.66692],[-69.80164,-17.65253],[-69.83047,-17.71337],[-69.82704,-17.75196],[-69.80919,-17.8023],[-69.75494,-17.98135],[-69.82018,-18.1191],[-69.86618,-18.17325],[-69.96918,-18.26065],[-70.19165,-18.33106],[-72.5,-18.3],[-78,-53],[-68,-58],[-65.80412,-55.20392],[-67.30412,-54.90395],[-68.60412,-54.90395],[-68.60412,-52.65417],[-68.42212,-52.39063],[-68.42268,-52.33665],[-68.57786,-52.32931],[-68.58833,-52.31016],[-68.84205,-52.28181],[-69.19421,-52.15445],[-69.49016,-52.15561],[-70.00412,-52.00423],[-71.92097,-52.00391],[-71.95221,-51.97896],[-72.04212,-51.96756],[-71.93324,-51.91854],[-72.03255,-51.8118],[-72.32412,-51.60426],[-72.34531,-50.65403],[-73.32687,-50.52827],[-73.51742,-49.89065],[-72.98733,-48.99351],[-72.68005,-48.89271],[-72.53174,-48.77746],[-72.56195,-48.50569],[-72.24472,-48.34986],[-72.46788,-47.7451],[-72.0504,-47.34557],[-71.87325,-47.12505],[-71.9426,-46.81204],[-71.64974,-46.68289],[-71.82037,-46.1256],[-71.64459,-46.00936],[-71.75291,-45.55168],[-71.47104,-45.49829],[-71.54383,-45.40436],[-71.3895,-45.35287],[-71.33354,-45.28286],[-71.41148,-45.19486],[-71.56494,-44.98326],[-72.03323,-44.88409],[-72.03495,-44.76989],[-71.24908,-44.80425],[-71.07056,-44.47985],[-71.81213,-44.30714],[-71.58417,-43.64303],[-71.8856,-43.45765],[-71.72596,-43.19066],[-72.14344,-42.90363],[-72.04765,-42.54322],[-72.04182,-42.40546],[-72.17194,-42.14686],[-71.73051,-42.11516],[-71.92612,-40.72332],[-71.80252,-40.42081],[-71.70639,-40.425],[-71.66794,-40.30571],[-71.77643,-40.268],[-71.39465,-38.92843],[-70.90816,-38.67251],[-71.189,-37.74167],[-71.04858,-36.49087],[-70.95932,-36.50246],[-70.37876,-36.04743],[-70.43884,-35.32549],[-70.58441,-35.27646],[-70.53875,-35.20551],[-70.3791,-35.17241],[-69.87854,-34.15614],[-69.8703,-33.57458],[-69.78207,-33.33282],[-69.86721,-33.28663],[-69.99561,-33.3268],[-70.08453,-33.03716],[-70.3125,-32.12562],[-70.22736,-31.93934],[-70.46185,-31.84548],[-70.53102,-31.3724],[-70.07904,-30.38828],[-69.88678,-30.35747],[-69.81262,-30.14869],[-69.93347,-30.10118],[-69.94308,-29.24087],[-68.78609,-27.10803],[-68.56567,-27.17525],[-68.25256,-26.96492],[-68.57666,-26.49147],[-68.5437,-26.27987],[-68.37067,-26.17639],[-68.48328,-25.15399],[-68.32397,-25.09928],[-68.5437,-24.79047],[-68.46405,-24.62829],[-68.24432,-24.39338],[-67.32216,-24.03768],[-66.98639,-23.00012],[-67.17728,-22.81416],[-67.55768,-22.89642],[-67.81586,-22.86099],[-68.19489,-21.27018],[-68.405,-20.93964],[-68.53546,-20.8524],[-68.47504,-20.64949],[-68.72772,-20.46948],[-68.73322,-20.38454],[-68.67279,-20.34591],[-68.76549,-20.08237],[-68.56842,-20.05658],[-68.52997,-19.85262],[-68.68309,-19.72793],[-68.40225,-19.41091],[-68.92548,-18.97253],[-69.11087,-18.1328],[-69.06143,-18.06231],[-69.29352,-17.96698],[-69.30931,-17.9121],[-69.30794,-17.83956],[-69.34708,-17.7343],[-69.47205,-17.61065],[-69.46999,-17.50394]]]]}},bogota:{type:"Feature",id:"bogota",properties:{},geometry:{type:"Polygon",coordinates:[[[-74.38,4.7],[-74.17,5],[-73.75,5],[-73.9,4.37],[-74.25,4.31],[-74.38,4.7]]]}},colombia:{type:"Feature",id:"colombia",properties:{},geometry:{type:"Polygon",coordinates:[[[-75.8,11.8],[-71.3,12.7],[-70.9,11.9],[-71.98242,11.65762],[-72.2406,11.14607],[-72.45483,11.10295],[-72.8833,10.43379],[-72.94922,9.83898],[-73.31177,9.20514],[-72.99866,9.29189],[-72.94373,9.09125],[-72.76245,9.12379],[-72.65259,8.61633],[-72.39716,8.36098],[-72.34497,8.00484],[-72.4054,8.04563],[-72.49054,7.945],[-72.4411,7.89875],[-72.45209,7.53676],[-72.43835,7.40605],[-72.18567,7.38426],[-72.14996,7.32161],[-72.18018,7.24532],[-72.03461,7.0273],[-71.12,7.02457],[-71.09528,6.98641],[-70.9964,6.98641],[-70.77942,7.09817],[-70.5542,7.07636],[-70.30701,6.93461],[-70.11475,6.98095],[-69.43016,6.10778],[-69.34914,6.13987],[-69.31,6.0873],[-69.23378,6.08047],[-69.17404,6.15011],[-69.03877,6.22384],[-68.66455,6.14055],[-67.80762,6.288],[-67.45056,6.21155],[-67.47803,6.10232],[-67.40662,6.00946],[-67.60437,5.7909],[-67.63184,5.4629],[-67.82959,5.31524],[-67.79114,4.28068],[-67.62085,3.74915],[-67.5,3.78204],[-67.29126,3.36537],[-67.86255,2.82234],[-67.58789,2.79491],[-67.1759,2.33395],[-66.85181,1.23037],[-67.08801,1.16172],[-67.16766,1.83989],[-67.34894,1.97715],[-67.36816,2.22417],[-67.44781,2.21868],[-67.56866,2.054],[-67.80487,1.98813],[-67.91199,1.81793],[-68.18939,2.01009],[-68.2663,1.85087],[-68.16193,1.73008],[-69.83459,1.71361],[-69.8291,1.08209],[-69.19739,1.06561],[-69.15344,0.62621],[-69.48303,0.73057],[-69.79065,0.58776],[-70.02686,0.57128],[-70.04059,-0.19226],[-69.60937,-0.50262],[-69.55719,-0.65367],[-69.61212,-0.7498],[-69.41986,-1.03541],[-69.40338,-1.37041],[-69.9321,-4.21974],[-69.94995,-4.23275],[-70.06531,-4.08071],[-70.1841,-3.93893],[-70.28641,-3.82246],[-70.35027,-3.80054],[-70.50613,-3.87796],[-70.71075,-3.793],[-70.04883,-2.75102],[-70.8783,-2.23241],[-71.41113,-2.37786],[-71.75171,-2.19124],[-72.36694,-2.48762],[-72.63336,-2.36688],[-72.67456,-2.4595],[-72.93274,-2.4492],[-73.1813,-2.22692],[-73.10028,-2.0842],[-73.14697,-1.79597],[-73.55347,-1.69439],[-73.47382,-1.55437],[-73.64136,-1.26607],[-73.85834,-1.22763],[-74.27582,-0.97774],[-74.42139,-0.51086],[-74.79492,-0.23621],[-75.20142,-0.06592],[-75.27832,-0.12909],[-75.80566,0.04669],[-76.09955,0.32959],[-76.32751,0.42572],[-76.40991,0.37903],[-76.41266,0.23621],[-76.96198,0.27191],[-77.11029,0.36529],[-77.53601,0.40649],[-77.48383,0.65093],[-77.69257,0.73606],[-77.66441,0.81296],[-77.7166,0.85141],[-77.74544,0.83562],[-77.77565,0.83974],[-77.80861,0.82738],[-77.8196,0.80678],[-77.96173,0.82257],[-78.19794,0.94478],[-78.19931,0.99284],[-78.28308,1.05325],[-78.2515,1.08346],[-78.31741,1.19193],[-78.43002,1.1425],[-78.55499,1.2496],[-78.61816,1.24685],[-80,2.5],[-77.7,7.7],[-77.55524,7.51498],[-77.32178,7.87971],[-77.17896,7.93956],[-77.5,8.5],[-75.8,11.8]]]}},"Universidad-de-Antioquia":{type:"Feature",id:"Universidad-de-Antioquia",properties:{},geometry:{type:"Polygon",coordinates:[[[-75.58594,6.45251],[-75.54185,6.4482],[-75.49945,6.43541],[-75.46038,6.41465],[-75.42614,6.38671],[-75.39805,6.35267],[-75.37719,6.31384],[-75.36435,6.2717],[-75.36003,6.22789],[-75.36438,6.18407],[-75.37726,6.14195],[-75.39814,6.10313],[-75.42624,6.06911],[-75.46047,6.04119],[-75.49952,6.02044],[-75.54188,6.00767],[-75.58594,6.00336],[-75.62999,6.00767],[-75.67236,6.02044],[-75.7114,6.04119],[-75.74563,6.06911],[-75.77373,6.10313],[-75.79462,6.14195],[-75.80749,6.18407],[-75.81185,6.22789],[-75.80753,6.2717],[-75.79469,6.31384],[-75.77382,6.35267],[-75.74573,6.38671],[-75.71149,6.41465],[-75.67242,6.43541],[-75.63003,6.4482],[-75.58594,6.45251]]]}},"Universidad-de-La-Guajira":{type:"Feature",id:"Universidad-de-La-Guajira",properties:{},geometry:{type:"Polygon",coordinates:[[[-72.86133,11.74767],[-72.81658,11.74335],[-72.77355,11.73056],[-72.73391,11.70979],[-72.69917,11.68184],[-72.67067,11.64779],[-72.64951,11.60895],[-72.6365,11.56681],[-72.63213,11.523],[-72.63657,11.47919],[-72.64964,11.43707],[-72.67084,11.39826],[-72.69935,11.36424],[-72.73408,11.33633],[-72.77368,11.31559],[-72.81665,11.30282],[-72.86133,11.29851],[-72.90601,11.30282],[-72.94897,11.31559],[-72.98858,11.33633],[-73.0233,11.36424],[-73.05182,11.39826],[-73.07302,11.43707],[-73.08609,11.47919],[-73.09053,11.523],[-73.08616,11.56681],[-73.07314,11.60895],[-73.05198,11.64779],[-73.02349,11.68184],[-72.98875,11.70979],[-72.9491,11.73056],[-72.90608,11.74335],[-72.86133,11.74767]]]}},"Universidad-de-Los-Andes":{type:"Feature",id:"Universidad-de-Los-Andes",properties:{},geometry:{type:"Polygon",coordinates:[[[-74.0918,4.79005],[-74.04783,4.78574],[-74.00556,4.77295],[-73.9666,4.75219],[-73.93245,4.72426],[-73.90444,4.69022],[-73.88363,4.65139],[-73.87082,4.60925],[-73.8665,4.56544],[-73.87085,4.52163],[-73.88368,4.4795],[-73.9045,4.44068],[-73.93253,4.40665],[-73.96666,4.37873],[-74.00561,4.35798],[-74.04786,4.34521],[-74.0918,4.34089],[-74.13574,4.34521],[-74.17799,4.35798],[-74.21693,4.37873],[-74.25107,4.40665],[-74.27909,4.44068],[-74.29992,4.4795],[-74.31275,4.52163],[-74.31709,4.56544],[-74.31278,4.60925],[-74.29997,4.65139],[-74.27915,4.69022],[-74.25114,4.72426],[-74.217,4.75219],[-74.17804,4.77295],[-74.13576,4.78574],[-74.0918,4.79005]]]}},"Universidad-de-San-Buenaventura":{type:"Feature",id:"Universidad-de-San-Buenaventura",properties:{},geometry:{type:"Polygon",coordinates:[[[-75.58594,6.45251],[-75.54185,6.4482],[-75.49945,6.43541],[-75.46038,6.41465],[-75.42614,6.38671],[-75.39805,6.35267],[-75.37719,6.31384],[-75.36435,6.2717],[-75.36003,6.22789],[-75.36438,6.18407],[-75.37726,6.14195],[-75.39814,6.10313],[-75.42624,6.06911],[-75.46047,6.04119],[-75.49952,6.02044],[-75.54188,6.00767],[-75.58594,6.00336],[-75.62999,6.00767],[-75.67236,6.02044],[-75.7114,6.04119],[-75.74563,6.06911],[-75.77373,6.10313],[-75.79462,6.14195],[-75.80749,6.18407],[-75.81185,6.22789],[-75.80753,6.2717],[-75.79469,6.31384],[-75.77382,6.35267],[-75.74573,6.38671],[-75.71149,6.41465],[-75.67242,6.43541],[-75.63003,6.4482],[-75.58594,6.45251]]]}},"Universidad-Distrital-Francisco-Jose-de-Caldas":{type:"Feature",id:"Universidad-Distrital-Francisco-Jose-de-Caldas",properties:{},geometry:{type:"Polygon",coordinates:[[[-74.0918,4.87766],[-74.04782,4.87334],[-74.00554,4.86056],[-73.96658,4.8398],[-73.93243,4.81186],[-73.90442,4.77782],[-73.8836,4.73899],[-73.87079,4.69686],[-73.86648,4.65304],[-73.87082,4.60923],[-73.88365,4.56711],[-73.90448,4.52829],[-73.93251,4.49426],[-73.96665,4.46634],[-74.0056,4.44559],[-74.04785,4.43281],[-74.0918,4.4285],[-74.13574,4.43281],[-74.178,4.44559],[-74.21695,4.46634],[-74.25109,4.49426],[-74.27911,4.52829],[-74.29994,4.56711],[-74.31278,4.60923],[-74.31712,4.65304],[-74.3128,4.69686],[-74.29999,4.73899],[-74.27918,4.77782],[-74.25116,4.81186],[-74.21701,4.8398],[-74.17805,4.86056],[-74.13577,4.87334],[-74.0918,4.87766]]]}},"Universidad-Nacional-de-Colombia":{type:"Feature",id:"Universidad-Nacional-de-Colombia",properties:{},geometry:{type:"Polygon",coordinates:[[[-74.0918,4.87766],[-74.04782,4.87334],[-74.00554,4.86056],[-73.96658,4.8398],[-73.93243,4.81186],[-73.90442,4.77782],[-73.8836,4.73899],[-73.87079,4.69686],[-73.86648,4.65304],[-73.87082,4.60923],[-73.88365,4.56711],[-73.90448,4.52829],[-73.93251,4.49426],[-73.96665,4.46634],[-74.0056,4.44559],[-74.04785,4.43281],[-74.0918,4.4285],[-74.13574,4.43281],[-74.178,4.44559],[-74.21695,4.46634],[-74.25109,4.49426],[-74.27911,4.52829],[-74.29994,4.56711],[-74.31278,4.60923],[-74.31712,4.65304],[-74.3128,4.69686],[-74.29999,4.73899],[-74.27918,4.77782],[-74.25116,4.81186],[-74.21701,4.8398],[-74.17805,4.86056],[-74.13577,4.87334],[-74.0918,4.87766]]]}},ecuador:{type:"Feature",id:"ecuador",properties:{},geometry:{type:"Polygon",coordinates:[[[-82,-3],[-80,2.2],[-77.86079,0.80404],[-77.72072,0.85484],[-77.66287,0.81794],[-77.66424,0.80884],[-77.67385,0.80215],[-77.67729,0.79099],[-77.66184,0.78979],[-77.68587,0.77365],[-77.6972,0.74241],[-77.67523,0.73778],[-77.5573,0.65058],[-77.47353,0.6626],[-77.52159,0.44837],[-76.47583,0.20874],[-76.32202,0.4422],[-76.0199,0.30487],[-75.81665,0.09064],[-75.26733,-0.1181],[-75.31265,-0.16617],[-75.50629,-0.21698],[-75.22888,-0.56441],[-75.20279,-0.97362],[-75.28931,-0.99147],[-75.36072,-0.95027],[-75.64087,-1.62576],[-76.63376,-2.59052],[-77.84637,-3],[-78.2872,-3.42158],[-79.01917,-5.01844],[-79.24301,-4.96581],[-79.62753,-4.42656],[-79.79233,-4.48954],[-80.12535,-4.29784],[-80.36018,-4.49775],[-80.44584,-4.45086],[-80.44739,-4.37692],[-80.33409,-4.21841],[-80.45013,-4.20968],[-80.44928,-4.13024],[-80.48035,-4.09445],[-80.47297,-4.05079],[-80.44739,-3.99719],[-80.39915,-3.98281],[-80.29701,-4.01843],[-80.12878,-3.89718],[-80.16106,-3.86704],[-80.19264,-3.60256],[-80.21633,-3.582],[-80.20706,-3.54705],[-80.21745,-3.5],[-80.22878,-3.50181],[-80.2335,-3.4899],[-80.2456,-3.48759],[-80.24545,-3.48481],[-80.24416,-3.48461],[-80.24386,-3.48247],[-80.24313,-3.48142],[-80.24393,-3.47881],[-80.24079,-3.47723],[-80.2438,-3.46463],[-80.22217,-3.44047],[-80.25238,-3.41],[-82,-3]]]}},paraguay:{type:"Feature",id:"paraguay",properties:{},geometry:{type:"Polygon",coordinates:[[[-54.25873,-24.35961],[-54.58403,-25.58921],[-54.65681,-25.67588],[-54.67916,-25.99493],[-54.61857,-26.20862],[-54.78678,-26.6308],[-55.42267,-26.99497],[-55.60553,-27.1621],[-55.73675,-27.44486],[-55.78857,-27.44309],[-55.89775,-27.34371],[-55.97809,-27.35591],[-56.06259,-27.30569],[-56.29415,-27.41973],[-56.37473,-27.58873],[-56.601,-27.42072],[-56.84909,-27.606],[-56.96547,-27.50172],[-57.48737,-27.44388],[-57.87465,-27.27496],[-58.59888,-27.29953],[-58.64896,-27.12631],[-58.31974,-26.8579],[-58.18979,-26.64487],[-58.22086,-26.41372],[-58.08456,-26.11154],[-57.89095,-25.96589],[-57.74047,-25.65014],[-57.55483,-25.44809],[-57.76072,-25.17162],[-58.2415,-24.9277],[-58.67226,-24.83161],[-59.3538,-24.4779],[-59.47537,-24.3323],[-60.03924,-24.01125],[-60.37336,-24.02369],[-60.98973,-23.81777],[-61.08807,-23.61362],[-61.73595,-23.234],[-62.20654,-22.70386],[-62.30073,-22.48627],[-62.64387,-22.24906],[-62.26072,-21.05983],[-62.26622,-20.56305],[-61.92152,-20.08915],[-61.73647,-19.63289],[-59.97488,-19.29332],[-59.06988,-19.28619],[-58.20814,-19.80515],[-57.83186,-20.9842],[-57.92507,-21.63334],[-57.88113,-21.68734],[-57.90602,-21.71294],[-57.97194,-22.07832],[-56.81013,-22.27099],[-56.56363,-22.20044],[-56.49462,-22.08659],[-56.39677,-22.07641],[-56.26631,-22.24811],[-56.01774,-22.29259],[-55.8526,-22.28227],[-55.78935,-22.38413],[-55.74034,-22.38913],[-55.75132,-22.47989],[-55.7472,-22.50653],[-55.72347,-22.5514],[-55.69845,-22.56298],[-55.69365,-22.57788],[-55.62361,-22.62986],[-55.38191,-24.00601],[-54.65973,-23.82806],[-54.31366,-24.01762],[-54.25873,-24.35961]]]}},peru:{type:"Feature",id:"peru",properties:{},geometry:{type:"Polygon",coordinates:[[[-83,-3],[-80.25238,-3.41],[-80.22217,-3.44047],[-80.2438,-3.46463],[-80.24079,-3.47723],[-80.24393,-3.47881],[-80.24313,-3.48142],[-80.24386,-3.48247],[-80.24416,-3.48461],[-80.24545,-3.48481],[-80.2456,-3.48759],[-80.2335,-3.4899],[-80.22878,-3.50181],[-80.21745,-3.5001],[-80.20706,-3.54705],[-80.21633,-3.582],[-80.19264,-3.60256],[-80.16106,-3.86704],[-80.12878,-3.89718],[-80.29701,-4.01843],[-80.39915,-3.98281],[-80.44739,-3.99719],[-80.47297,-4.05079],[-80.48035,-4.09445],[-80.44928,-4.13024],[-80.45013,-4.20968],[-80.33409,-4.21841],[-80.44739,-4.37692],[-80.44584,-4.45086],[-80.36018,-4.49775],[-80.12535,-4.29784],[-79.79233,-4.48954],[-79.62753,-4.42656],[-79.24301,-4.96581],[-79.01917,-5.01844],[-78.2872,-3.42158],[-77.84637,-3],[-76.63376,-2.59052],[-75.64087,-1.62576],[-75.36072,-0.95027],[-75.56534,-0.13806],[-75.15884,-0.06665],[-74.40628,-0.55553],[-72.92862,-2.39505],[-70.9552,-2.25162],[-70.02686,-2.70987],[-70.70595,-3.78478],[-70.49789,-3.88142],[-70.32349,-3.8088],[-69.95819,-4.23211],[-69.94446,-4.29784],[-69.99802,-4.37316],[-70.10376,-4.29164],[-70.19028,-4.35946],[-71.82999,-4.5662],[-72.86133,-5.25507],[-73.94348,-7.4932],[-72.19116,-9.95803],[-70.61188,-9.57638],[-70.62149,-10.96681],[-69.57161,-10.94557],[-68.65494,-12.49629],[-69.01886,-13.62196],[-68.83896,-14.22445],[-69.38141,-14.86251],[-69.14795,-15.24444],[-69.39926,-15.6151],[-69.19189,-16.17449],[-69.10177,-16.22555],[-68.96152,-16.19456],[-68.78952,-16.34254],[-68.98865,-16.42357],[-69.04015,-16.57368],[-69.01886,-16.65198],[-69.61075,-17.26542],[-69.46896,-17.37423],[-69.46827,-17.49919],[-69.66654,-17.66071],[-69.81262,-17.67281],[-69.75,-18],[-70,-18.27],[-75,-19],[-83,-3]]]}},latam:{type:"Feature",id:"latam",properties:{},geometry:{type:"Polygon",coordinates:[[[-123,14],[-117.45574,32.58935],[-117.23326,32.52453],[-116.43813,32.58992],[-115.96571,32.62752],[-115.48953,32.66395],[-114.71211,32.7179],[-114.7455,32.65614],[-114.79837,32.6067],[-114.81091,32.49615],[-111.06611,31.33282],[-109.5397,31.33311],[-108.86816,31.33165],[-108.2131,31.33135],[-108.21447,31.78655],[-106.52962,31.78363],[-106.51966,31.77225],[-106.50867,31.76116],[-106.4867,31.74715],[-106.4716,31.75123],[-106.46851,31.75912],[-106.45409,31.76554],[-106.43898,31.75678],[-106.41426,31.75007],[-106.37959,31.7305],[-106.37409,31.71269],[-106.35075,31.69575],[-106.33289,31.65835],[-106.30543,31.6224],[-106.28002,31.56186],[-106.24741,31.54314],[-106.21101,31.47347],[-106.17805,31.45766],[-106.14956,31.43335],[-106.00502,31.38881],[-105.76607,31.16816],[-105.38292,30.84683],[-104.9121,30.63644],[-104.67293,29.91804],[-104.39415,29.56151],[-103.20921,28.98742],[-102.4182,29.81056],[-101.4514,29.77242],[-100.96779,29.34866],[-100.9005,29.31454],[-100.69725,29.14257],[-100.62309,28.91322],[-100.51598,28.749],[-100.51186,28.70474],[-100.50293,28.66227],[-100.40337,28.58271],[-100.01472,28.06956],[-99.53957,27.59837],[-99.53339,27.57859],[-99.51279,27.5655],[-99.52103,27.55607],[-99.52824,27.49731],[-99.5018,27.50066],[-99.48601,27.49426],[-99.47777,27.48299],[-99.48498,27.4635],[-99.49596,27.44857],[-99.48669,27.39067],[-99.53476,27.31321],[-99.44344,27.25951],[-99.45717,27.03222],[-99.07127,26.42692],[-98.9978,26.39248],[-98.46771,26.21028],[-98.25966,26.09194],[-98.08388,26.05061],[-97.95067,26.06172],[-97.79205,26.05185],[-97.57919,25.95002],[-97.51328,25.89073],[-97.46315,25.87899],[-97.41783,25.83821],[-97.34367,25.92594],[-97,26],[-81,24],[-73.5,20.5],[-64,20],[-29,0],[-29,-20],[-63,-51],[-62,-57],[-72,-57],[-113,-30],[-123,14]]]}}};
24694 var resources = {"bw-facebook":{id:"bw-facebook",type:"facebook",featureId:"botswana",countryCodes:["bw"],languageCodes:["en","tn"],name:"Mapping Botswana on Facebook",description:"Page of OpenStreetMap in Botswana",url:"https://www.facebook.com/MappingBotswana/",contacts:[{name:"info@openstreetmap.org.bw",email:"info@openstreetmap.org.bw"}]},"bw-twitter":{id:"bw-twitter",type:"twitter",featureId:"botswana",countryCodes:["bw"],languageCodes:["en","tn"],name:"Mapping Botswana on Twitter",description:"Twitter of OpenStreetMap in Botswana",url:"https://twitter.com/mappingbotswana",contacts:[{name:"info@openstreetmap.org.bw",email:"info@openstreetmap.org.bw"}]},"ym-Centre-Universitaire-de-Recherche-et-dApplication-en-Tldtection-CURAT-de-lUniversit-Felix-Houphouet-Boigny":{type:"youthmappers",name:"YouthMappers CURAT",description:"YouthMappers chapter at Centre Universitaire de Recherche et d'Application en Télédétection (CURAT) de l'Université Felix Houphouet Boigny",id:"ym-Centre-Universitaire-de-Recherche-et-dApplication-en-Tldtection-CURAT-de-lUniversit-Felix-Houphouet-Boigny",featureId:"Centre-Universitaire-de-Recherche-et-dApplication-en-Tldtection-CURAT-de-lUniversit-Felix-Houphouet-Boigny",contacts:[{name:"Organizer",email:"gpcome@gmail.com"}],extendedDescription:"Our chapter aim is to promote the use of collaborative free mapping and the use of openstreetmap data in the field of research and their application in the implementation of tools for decision-making. Help students produce their own data of their research.",countryCodes:["ci"],url:"mailto:gpcome@gmail.com"},"ym-The-Gambia-YMCA-University-of-the-Gambia":{type:"youthmappers",name:"Connected YouthMappers",description:"YouthMappers chapter at The Gambia YMCA / University of the Gambia",id:"ym-The-Gambia-YMCA-University-of-the-Gambia",featureId:"The-Gambia-YMCA-University-of-the-Gambia",contacts:[{name:"Organizer",email:"connectedyouthmappers@gmail.com"}],extendedDescription:"Connected YouthMappers is comprised of dedicated young Gambians who aspire to change and aid national development.",countryCodes:["gm"],url:"mailto:connectedyouthmappers@gmail.com"},"cape-coast-youthmappers":{id:"cape-coast-youthmappers",featureId:"cape_coast_gh",type:"twitter",name:"University of Cape Coast YouthMappers",countryCodes:["gh"],languageCodes:["en"],description:"Follow us on Twitter: {url}",extendedDescription:"This is the official handle for the Youth Mappers chapter of the University of Cape Coast, Ghana. we love maps, open data and helping the vulnerable.",url:"https://twitter.com/YouthmappersUCC",contacts:[{name:"Enock Seth Nyamador",email:"kwadzo459@gmail.com"}]},"osm-gh-facebook":{id:"osm-gh-facebook",featureId:"ghana",type:"facebook",name:"OpenStreetMap Ghana on Facebook",countryCodes:["gh"],languageCodes:["en"],description:"Facebook group for people interested in OpenStreetMap.",extendedDescription:"Mappers in Ghana community, promoting OpenStreetMap and Humanitarian OpenStreetMap Team (HOT) projects in Ghana. Join us.",url:"https://www.facebook.com/OSMGhana/",contacts:[{name:"Enock Seth Nyamador",email:"kwadzo459@gmail.com"}]},"osm-gh-twitter":{id:"osm-gh-twitter",featureId:"ghana",type:"twitter",name:"OpenStreetMap Ghana on Twitter",countryCodes:["gh"],languageCodes:["en"],description:"Follow us on Twitter: {url}",url:"https://twitter.com/osmghana",contacts:[{name:"Enock Seth Nyamador",email:"kwadzo459@gmail.com"}]},"talk-gh":{id:"talk-gh",featureId:"ghana",type:"mailinglist",name:"Talk-gh Mailing List",countryCodes:["gh"],languageCodes:["en"],description:"Talk-gh is the official mailing list for Ghana OSM community.",url:"https://lists.openstreetmap.org/listinfo/talk-gh",contacts:[{name:"Enock Seth Nyamador",email:"kwadzo459@gmail.com"}]},"ym-Kwame-Nkrumah-University-of-Science-and-Technology":{type:"youthmappers",name:"Kwame Nkrumah University of Science and Technology YouthMappers",description:"YouthMappers chapter at Kwame Nkrumah University of Science and Technology",id:"ym-Kwame-Nkrumah-University-of-Science-and-Technology",featureId:"Kwame-Nkrumah-University-of-Science-and-Technology",contacts:[{name:"Organizer",email:"knustyouthmappers@outlook.com"}],countryCodes:["gh"],url:"https://www.facebook.com/KNUSTMappers/"},"ym-University-of-Cape-Coast":{type:"youthmappers",name:"UCC Geographical Society",description:"YouthMappers chapter at University of Cape Coast",id:"ym-University-of-Cape-Coast",featureId:"University-of-Cape-Coast",contacts:[{name:"Organizer",email:"geosoc_ucc@yahoo.com"}],extendedDescription:"We are a society that encompasses all students who are reading and read geography in the Department of Geography and Regional Planning at the University of Cape Coast. Our main aim is to promote interest in the discipline inside and outside of the classroom. Our motto is “We comprehend the Earth and its inhabitants.”",countryCodes:["gh"],url:"https://www.facebook.com/Geographical-Society-Ucc-105157196204838/info/?tab=page_info"},"ym-University-of-Energy-and-Natural-Resources":{type:"youthmappers",name:"Eco-Club",description:"YouthMappers chapter at University of Energy and Natural Resources",id:"ym-University-of-Energy-and-Natural-Resources",featureId:"University-of-Energy-and-Natural-Resources",contacts:[{name:"Organizer",email:"james.agyei-ohemeng@uenr.edu.gh"}],extendedDescription:"To provide a sound education to all citizens about the deteriorating environment and provide utmost use of recreation of the environment for human survival.",countryCodes:["gh"],url:"mailto:james.agyei-ohemeng@uenr.edu.gh"},"ym-University-of-Ghana":{type:"youthmappers",name:"University of Ghana YouthMappers",description:"YouthMappers chapter at University of Ghana",id:"ym-University-of-Ghana",featureId:"University-of-Ghana",contacts:[{name:"Organizer",email:"mawulikaf@gmail.com"}],extendedDescription:"UG YouthMappers consists of both graduate and undergraduate students possessing knowledge and skills in GIS and Remote Sensing. The club is composed of an energetic team that is poised to address social issues and mitigate environmental problems through mapping. Our fundamental principles are capacity building, empowerment and teamwork.",countryCodes:["gh"],url:"https://twitter.com/UGYouthMappers"},"ym-University-of-Mines-and-Technology":{type:"youthmappers",name:"UMaT YouthMappers",description:"YouthMappers chapter at University of Mines and Technology",id:"ym-University-of-Mines-and-Technology",featureId:"University-of-Mines-and-Technology",contacts:[{name:"Organizer",email:"kwadzo459@gmail.com"}],extendedDescription:"UMaT YouthMappers is a group of volunteer students who seek to grant students the opportunity to improve skills in the field of mapping & creating open geographic data and analyses that address locally defined development challenges worldwide.",countryCodes:["gh"],url:"http://umatyouthmappers.wordpress.com/"},"ym-General-Lansana-Conte-University":{type:"youthmappers",name:"YouthMappers General Lansana Conte University",description:"YouthMappers chapter at General Lansana Conte University",id:"ym-General-Lansana-Conte-University",featureId:"General-Lansana-Conte-University",contacts:[{name:"Organizer",email:"condefa3@gmail.com"}],extendedDescription:"The YouthMappers of the University General Lansana Conté is a non profit community willing to contribute to Map Guinea and others part of the world. We are promoting the use of GIS and Open data to build decision support tools. We also work to build capacities among the students and local communities.",countryCodes:["gn"],url:"www.uglc.org"},"ym-Institute-of-Science-and-Veterinary-Medicine":{type:"youthmappers",name:"YouthMappers ISSMV Dalaba",description:"YouthMappers chapter at Institute of Science and Veterinary Medicine",id:"ym-Institute-of-Science-and-Veterinary-Medicine",featureId:"Institute-of-Science-and-Veterinary-Medicine",contacts:[{name:"Organizer",email:"bvloua45@gmail.com"}],extendedDescription:"YouthMappers ISSMV Dabala is a non profit organisation working to promote humanitarian mapping and the use of open sources and open data to build decision making tools in Guinea.",countryCodes:["gn"],url:"mailto:bvloua45@gmail.com"},"ym-Universit-de-NZrkor":{type:"youthmappers",name:"Youthmappers à N'Zérékoré",description:"YouthMappers chapter at Université de N'Zérékoré",id:"ym-Universit-de-NZrkor",featureId:"Universit-de-NZrkor",contacts:[{name:"Organizer",email:"donpaul1974@gmail.com"}],extendedDescription:"YouthMappers est un groupe qui permet de faire la cartographie des communautés enclavées et à la prise des décisions en cas de catastrophes ou épidémies. Elle permet aussi la production et l'utilisation des données en accès gratuit.",countryCodes:["gn"],url:"mailto:donpaul1974@gmail.com"},"ym-Dedan-Kimathi-University-of-Technology":{type:"youthmappers",name:"GDEV",description:"YouthMappers chapter at Dedan Kimathi University of Technology",id:"ym-Dedan-Kimathi-University-of-Technology",featureId:"Dedan-Kimathi-University-of-Technology",contacts:[{name:"Organizer",email:"gdevkenya@gmail.com"}],extendedDescription:"GDEV is a group of enthusiastic GIS group at DeKUT that aims at helping students share, engage and learn from each other in matters geospatial",countryCodes:["ke"],url:"https://plus.google.com/u/0/communities/102367719061492681269/stream/e376a295-1246-4e19-9f66-fa6077719f32"},"ym-Jomo-Kenyatta-University-of-Agriculture-and-Technology":{type:"youthmappers",name:"Association of Geomatics Engineering Students",description:"YouthMappers chapter at Jomo Kenyatta University of Agriculture and Technology",id:"ym-Jomo-Kenyatta-University-of-Agriculture-and-Technology",featureId:"Jomo-Kenyatta-University-of-Agriculture-and-Technology",contacts:[{name:"Organizer",email:"laurahmugeha36@gmail.com"}],extendedDescription:"The Association of Geomatics Engineering Students (AGES), aims at promoting GIS products and services as well as training students on the use of the same. It not only promotes socialization between the students and practicing professionals, but also provides a platform for exchanging new ideas for holding new GIS and surveying events and training at the university.",countryCodes:["ke"],url:"mailto:laurahmugeha36@gmail.com"},"ym-Karatina-University":{type:"youthmappers",name:"Nature Club Karatina University",description:"YouthMappers chapter at Karatina University",id:"ym-Karatina-University",featureId:"Karatina-University",contacts:[{name:"Organizer",email:"karunatureclub@gmail.com"}],extendedDescription:"This chapter aims to bring together all GIS enthusiasts.They include environment experts, wildlife experts, aquatic and tourism officers, just to mention a few. Its main aim is to provide a platform where students can learn from each other and, in the process, understand how to integrate the GIS skills in their various career paths as well as provide solutions to various environmental related challenges.",countryCodes:["ke"],url:"https://twitter.com/karunature"},"ym-Kenyatta-University":{type:"youthmappers",name:"Kenyatta University GIS Club",description:"YouthMappers chapter at Kenyatta University",id:"ym-Kenyatta-University",featureId:"Kenyatta-University",contacts:[{name:"Organizer",email:"jamesmagige24@gmail.com"}],extendedDescription:"Kenyatta University GIS Club (KUGISC) was founded on 28th October 2016, with more than 200 students and staff from all faculty within campus as members. We are committed to empower members with spatial knowledge, skills and expertise required in understanding the Earth. We help in mapping resources within the university by incorporating geospatial data in their projects as well as fieldwork data collection.",countryCodes:["ke"],url:"mailto:jamesmagige24@gmail.com"},"ym-Moi-University":{type:"youthmappers",name:"Geography Students Association",description:"YouthMappers chapter at Moi University",id:"ym-Moi-University",featureId:"Moi-University",contacts:[{name:"Organizer",email:"geosamu44@gmail.com"}],extendedDescription:"The Geography Students Association at Moi University (GEOSAMU) explores, discovers and aims at developing the entire world through the young Geo-Spatial analysts. GEOSAMU is part of the Department of Geography.",countryCodes:["ke"],url:"mailto:geosamu44@gmail.com?subject=YouthMappers%20at%20Moi%20University"},"ym-Technical-University-of-Kenya":{type:"youthmappers",name:"Geospatial Science Student Association",description:"YouthMappers chapter at Technical University of Kenya",id:"ym-Technical-University-of-Kenya",featureId:"Technical-University-of-Kenya",contacts:[{name:"Organizer",email:"youthmappers.tuk@gmail.com"}],extendedDescription:"It's a geographical information based group with very passionate students in the relevant fields of study. We do training to members on emerging trends in the market and keep up with technological advancements",countryCodes:["ke"],url:"mailto:youthmappers.tuk@gmail.com"},"ym-University-of-Nairobi":{type:"youthmappers",name:"Geospatial Engineering Students Association",description:"YouthMappers chapter at University of Nairobi",id:"ym-University-of-Nairobi",featureId:"University-of-Nairobi",contacts:[{name:"Organizer",email:"contact@mapkibera.org"}],extendedDescription:"UN students are working with the local OSM community, Map Kibera, and GrouthTruth to learn about open mapping and contribute data for needs in their urban communities.",countryCodes:["ke"],url:"www.geospatial.uonbi.ac.ke"},"ym-African-Methodist-Episcopal-University":{type:"youthmappers",name:"YouthMappers-AMEU",description:"YouthMappers chapter at African Methodist Episcopal University",id:"ym-African-Methodist-Episcopal-University",featureId:"African-Methodist-Episcopal-University",contacts:[{name:"Organizer",email:"youthmapper.ameu@gmail.com"}],countryCodes:["lr"],url:"mailto:youthmapper.ameu@gmail.com"},"ym-Cuttington-University":{type:"youthmappers",name:"Cuttington University YouthMappers",description:"YouthMappers chapter at Cuttington University",id:"ym-Cuttington-University",featureId:"Cuttington-University",contacts:[{name:"Organizer",email:"youthmappers.cu@gmail.com"}],extendedDescription:"The YouthMappers at Cuttington University, Suakoko, and Bong County comprised of Students from three different departments; namely, the Department of Natural Resources Management “DONRM”, Department of Environmental Sciences, and the Department of Natural Sciences. Since the establishment of the Chapter in February 2017, the overall membership is 20 students, with each department containing 5 students.",countryCodes:["lr"],url:"mailto:youthmappers.cu@gmail.com"},"ym-Grand-Gedeh-County-Community-College":{type:"youthmappers",name:"YouthMappers at Grand Gedeh County Community College",description:"YouthMappers chapter at Grand Gedeh County Community College",id:"ym-Grand-Gedeh-County-Community-College",featureId:"Grand-Gedeh-County-Community-College",contacts:[{name:"Organizer",email:"yimodaxzibitallison@gmail.com"}],extendedDescription:"The Youth Mappers of GGCCC sole intent is to put places in and around Liberia that are not on the map. We gather youths from the college within the Grand Gedeh Community College to make it their duties to unite and bring these places to the spot light geographically.",countryCodes:["lr"],url:"mailto:yimodaxzibitallison@gmail.com"},"ym-Nimba-County-Community-College":{type:"youthmappers",name:"Nimba County Community College Youth Mappers",description:"YouthMappers chapter at Nimba County Community College",id:"ym-Nimba-County-Community-College",featureId:"Nimba-County-Community-College",contacts:[{name:"Organizer",email:"ncccyouthmappers@yahoo.com"}],countryCodes:["lr"],url:"mailto:ncccyouthmappers@yahoo.com"},"ym-Stella-Maris-Polytechnic":{type:"youthmappers",name:"YouthMappers-SMP",description:"YouthMappers chapter at Stella Maris Polytechnic",id:"ym-Stella-Maris-Polytechnic",featureId:"Stella-Maris-Polytechnic",contacts:[{name:"Organizer",email:"youthmappers.smp@gmail.com"}],countryCodes:["lr"],url:"mailto:youthmappers.smp@gmail.com"},"ym-University-of-Liberia-YouthMappers":{type:"youthmappers",name:"University of Liberia YouthMappers",description:"YouthMappers chapter at University of Liberia YouthMappers",id:"ym-University-of-Liberia-YouthMappers",featureId:"University-of-Liberia-YouthMappers",contacts:[{name:"Organizer",email:"ulym2017@gmail.com"}],extendedDescription:"The University of Liberia YouthMappers is a chapter organization of the Global YouthMappers. We are a nonprofit student mapping organization focus on mapping for Liberia’s development and the World at large. The purpose of this organization shall be to utilize technology and geospatial knowledge as means of creating and developing maps; collecting and analyzing data that will address local and worldwide challenges. Our aim is to support and create opportunity for students to develop interest and skills in the fields of mapping. We envision a united student community that are collaborative, active and are willing to work with the University of Liberia YouthMappers in order to better the lives of others.",countryCodes:["lr"],url:"mailto:ulym2017@gmail.com"},"osm-mg-facebook":{id:"osm-mg-facebook",featureId:"madagascar",type:"facebook",name:"OpenStreetMap Madagascar Facebook Group",countryCodes:["mg"],languageCodes:["mg","fr"],description:"Malagasy Facebook group for people interested in OpenStreetMap.",url:"https://www.facebook.com/groups/1601381123461284/",contacts:[{name:"Brice Ramamonjy",email:"rafaby21@gmail.com"},{name:"Dolly Andriatsiferana",email:"privatemajory@gmail.com"}]},"talk-mg":{id:"talk-mg",featureId:"madagascar",type:"mailinglist",countryCodes:["mg"],languageCodes:["mg","fr"],name:"Talk-mg Mailing List",description:"Place for OpenStreetMap contributors, communities and users in Madagascar to share and discuss.",url:"https://lists.openstreetmap.org/listinfo/talk-mg",contacts:[{name:"Brice Ramamonjy",email:"rafaby21@gmail.com"},{name:"Dolly Andriatsiferana",email:"privatemajory@gmail.com"}]},"ym-University-of-Malawi":{type:"youthmappers",name:"Chanco Malawi YouthMappers",description:"YouthMappers chapter at University of Malawi",id:"ym-University-of-Malawi",featureId:"University-of-Malawi",contacts:[{name:"Organizer",email:"zolamanyungwa@gmail.com"}],extendedDescription:"Chanco Malawi YouthMappers is the student mapping organization for the University of Malawi's Chancellor College. The students in this chapter focus on mapping for Malawi's development and science needs.",countryCodes:["mw"],url:"mailto:zolamanyungwa@gmail.com"},"ym-Universit-des-Sciences-Sociale-et-de-Gestion-de-Bamako":{type:"youthmappers",name:"Etudiant au Laboratoire HoPE",description:"YouthMappers chapter at Université des Sciences Sociale et de Gestion de Bamako",id:"ym-Universit-des-Sciences-Sociale-et-de-Gestion-de-Bamako",featureId:"Universit-des-Sciences-Sociale-et-de-Gestion-de-Bamako",contacts:[{name:"Organizer",email:"youthmappersfhg@gmail.com"}],countryCodes:["ml"],url:"mailto:youthmappersfhg@gmail.com"},"ym-Universidade-Eduardo-Mondlane":{type:"youthmappers",name:"Comunidade YouthMappers Moçambique",description:"YouthMappers chapter at Universidade Eduardo Mondlane",id:"ym-Universidade-Eduardo-Mondlane",featureId:"Universidade-Eduardo-Mondlane",contacts:[{name:"Organizer",email:"moz.youthmappers1@hotmail.com"}],extendedDescription:"We are a student group that intends to join Mozambican society to create a resilient community of humanitarian mapping. The community intend to map the physical occupation of our Country and create open geographic data, accessible to the public and able to be used in several areas without associated costs.",countryCodes:["mz"],url:"www.facebook.com/Moz-YouthMappers"},"ym-Namibia-University-of-Science-and-Technology":{type:"youthmappers",name:"Geoinformation Technology Student Society",description:"YouthMappers chapter at Namibia University of Science and Technology",id:"ym-Namibia-University-of-Science-and-Technology",featureId:"Namibia-University-of-Science-and-Technology",contacts:[{name:"Organizer",email:"patriciasem87@gmail.com"}],countryCodes:["na"],url:"mailto:patriciasem87@gmail.com"},"ym-Abia-State-University":{type:"youthmappers",name:"AbsuMappersTeam",description:"YouthMappers chapter at Abia State University",id:"ym-Abia-State-University",featureId:"Abia-State-University",contacts:[{name:"Organizer",email:"absumappersteam@gmail.com"}],extendedDescription:"AbsuMappersTeam is voluntary team of map enthusiast ,using openstreetmap,GIS and other open source geospatial techno;ogy to solve problems.It is a dedicated for disaster response using OpenStreetMap.It is a professional mentoring and empowerment platform for those with passion for GIS and Mapping.It is a community of volunteers for geospatial data creation,field data collection and mapping.The team was co-founded by Victor N.Sunday(the Team mentor) and Professor J.U.Ogbonna ,the team coordinator and faculty Advisor. AbsuMapperTeam is an affiliate of UniiqueMappersTeam-Port Harcourt.The team stands to support sustainable development using geospatial technology",countryCodes:["ng"],url:"https://www.facebook.com/Absumappersteam-1709186109157466"},"ym-Ahmadu-Bello-University":{type:"youthmappers",name:"ABU Geomappers",description:"YouthMappers chapter at Ahmadu Bello University",id:"ym-Ahmadu-Bello-University",featureId:"Ahmadu-Bello-University",contacts:[{name:"Organizer",email:"abugeomappers@gmail.com"}],extendedDescription:"We are a group of Data driven Humanitarian mappers, who are dedicated to rendering humanitarian service in response to disaster and mitigation. We are glad to contribute our expertise and knowledge through mapping, and helping to spread #OpenEvangelism through Training, and collaboration.",countryCodes:["ng"],url:"https://web.facebook.com/abugeomappers/"},"ym-Federal-School-of-Surveys":{type:"youthmappers",name:"OyoMappersTeam (OMT) Oyo",description:"YouthMappers chapter at Federal School of Surveys",id:"ym-Federal-School-of-Surveys",featureId:"Federal-School-of-Surveys",contacts:[{name:"Organizer",email:"oyomappersteam@gmail.com"}],countryCodes:["ng"],url:"https://web.facebook.com/Oyomappersteam-omt-oyo-1432864713415765/"},"ym-Federal-University-of-Technology-Akure":{type:"youthmappers",name:"YouthMappers Futa Space Club",description:"YouthMappers chapter at Federal University of Technology, Akure",id:"ym-Federal-University-of-Technology-Akure",featureId:"Federal-University-of-Technology-Akure",contacts:[{name:"Organizer",email:"denironyx@gmail.com"}],extendedDescription:"Our mission is to raise the next generation of Space Leaders. Activities include research and capacity building in Remote Sensing, GIS, Climate Change, Astronomy, Cosmology, Space Engineering, Global Navigation, Robotics and Space Education.",countryCodes:["ng"],url:"http://spaceclubfuta.com.ng/"},"ym-Ignatius-Ajuru-University-of-Education":{type:"youthmappers",name:"IgnatiusMappersTeam (IMT)",description:"YouthMappers chapter at Ignatius Ajuru University of Education",id:"ym-Ignatius-Ajuru-University-of-Education",featureId:"Ignatius-Ajuru-University-of-Education",contacts:[{name:"Organizer",email:"ignatiusmappersteam@gmail.com"}],extendedDescription:"We are a YouthMappers Chapter of Ignatius Ajuru University of Education involved in crowdsourced mapping of our environment and remote mapping of resilient communities.We are a team of volunteers using openstreetmap and other open Geospatial source for mapping.",countryCodes:["ng"],url:"https://fb.me/ignatiusmappersteam"},"ym-University-of-Nigeria-Nsukka":{type:"youthmappers",name:"LionMappersTeam (LMT) Nsukka",description:"YouthMappers chapter at University of Nigeria, Nsukka",id:"ym-University-of-Nigeria-Nsukka",featureId:"University-of-Nigeria-Nsukka",contacts:[{name:"Organizer",email:"lionmappersteam@gmail.com"}],extendedDescription:"The LionMappersTeam is an affiliate of YouthMappers Network, with the sole aim of providing members the opportunity to learn and improve their skills in the field of mapping science and to create open geographic data and analysis that addresses locally defined challenges globally. It is a team of volunteers for crowdsourced mapping and geographic information provision using Openstreetmap, citizen science and other geospatial technology for research, training and response to resilient community challenges. We are involved in GIS and Remote Sensing Applications and Research.Paticipatory GIS and Citizen Science,field mapping ,training workshops and outreaches to High Schools.",countryCodes:["ng"],url:"http://fb.me/LionMappersTeamNsukka;and send messages to our Page at m.me/LionMappersTeamNsukka"},"ym-University-of-Port-Harcourt":{type:"youthmappers",name:"UniqueMappersTeam (UMT) Port Harcourt",description:"YouthMappers chapter at University of Port Harcourt",id:"ym-University-of-Port-Harcourt",featureId:"University-of-Port-Harcourt",contacts:[{name:"Organizer",email:"victor.sunday@uniport.edu.ng"}],extendedDescription:"UniqueMappersTeam(UMT)Port Harcourt is an action group and a team of volunteers for a collaborative online mapping targeted at training and empowering members with trending mapping skills to create open geospatial data and analysis that addresses locally defined challenges for geoinformation and to provide humanitarian mapping services to resilient communities in Niger Delta,Nigeria and elsewhere.We promote Crowdsoucred Mapping and Geographic information volunteering using OpenStreetMap(OSM) platform and other accessible platforms for Rapid Response Mapping,Disaster Mapping,Geo-intelligence Mapping,Map updates and training.Its an affiliate Campus chapter of Humanitarian OpenStreetMap Team(HOT).It is a project-task team of YouthMappers that provide opportunity for members to learn and improve their skills in Geoinformatics so as to explore global opportunities in the field of Mapping and Geoinformation.",countryCodes:["ng"],url:"https://web.facebook.com/uniquemappersteamportharcourt/"},"ym-University-of-Nigeria-Enugu-Campus":{type:"youthmappers",name:"LionMappersTeam (LMT) Enugu",description:"YouthMappers chapter at University of Nigeria, Enugu Campus",id:"ym-University-of-Nigeria-Enugu-Campus",featureId:"University-of-Nigeria-Enugu-Campus",contacts:[{name:"Organizer",email:"lmtenugucampus@gmail.com"}],extendedDescription:"The LionMappersTeam(LMT)Enugu Campus is an affiliate of YouthMappers Network, with the sole aim of providing members the opportunity to learn and improve their skills in the field of Geoinformatics and to create open geographic data and analysis that addresses locally defined challenges globally. It is a team of volunteers for Crowdsourced Mapping and Geographic Information provision using Openstreetmap, Citizen Science and other Geospatial Technology for research, training and response to resilient community challenges. We are involved in Web-Cartography, GIS and Remote Sensing Applications and ResearchWe are passionate about Volunteered Geographic Information.Paticipatory GIS and Citizen Science.Our major activities include online crowdsourced-Cartography, Field Mapping ,Training workshops and outreaches to High School as well as Humanitarian/Disaster Response Mapping.",countryCodes:["ng"],url:"https://web.facebook.com/Lionmappersteam-enugu-Campus-361221567667528/"},"ym-Insititue-d-Enseignement-Superieur-de-Ruhengeri":{type:"youthmappers",name:"YouthMappers at INES Ruhengeri",description:"YouthMappers chapter at Insititue d' Enseignement Superieur de Ruhengeri",id:"ym-Insititue-d-Enseignement-Superieur-de-Ruhengeri",featureId:"Insititue-d-Enseignement-Superieur-de-Ruhengeri",contacts:[{name:"Organizer",email:"dufitesaie91@yahoo.com"}],extendedDescription:"We are students from Land Administration and Management and Land survey Departments from INES-Ruhengeri. We are engaged in mapping activities that create the changes toward sustainable development in our community.",countryCodes:["rw"],url:"www.ines.ac.rw"},"ym-University-of-Rwanda-Huye-Campus":{type:"youthmappers",name:"Rwanda YouthMappers",description:"YouthMappers chapter at University of Rwanda - Huye Campus",id:"ym-University-of-Rwanda-Huye-Campus",featureId:"University-of-Rwanda-Huye-Campus",contacts:[{name:"Organizer",email:"erneruz@gmail.com"}],extendedDescription:"Based on the commitment and the purpose of promoting mapping, and the information from YouthMappers public talks, we have organized as students in Geography department who are committed in mapping to found a chapter of our Campus. We have supported by our Facilitator Dr. Gaspard Rwanyiziri (Director of CGIS-Rwanda) and various lecturer mentors.",countryCodes:["rw"],url:"https://www.facebook.com/Rwanda-YouthMappers"},"ym-Institut-Suprieur-de-Management-Kolda":{type:"youthmappers",name:"Les Femmes Leaders de ISM/Kolda",description:"YouthMappers chapter at Institut Supérieur de Management Kolda",id:"ym-Institut-Suprieur-de-Management-Kolda",featureId:"Institut-Suprieur-de-Management-Kolda",contacts:[{name:"Organizer",email:"koldaym@gmail.com"}],extendedDescription:"Les Femmes Leaders de ISM/Kolda is an all-female mapping group in southern Senegal looking to put Kolda and surrounding villages on the map and better understand how to use OSM.",countryCodes:["sn"],url:"mailto:koldaym@gmail.com"},"ym-Universit-Gaston-Berger":{type:"youthmappers",name:"YouthMappers at UGB",description:"YouthMappers chapter at Université Gaston Berger",id:"ym-Universit-Gaston-Berger",featureId:"Universit-Gaston-Berger",contacts:[{name:"Organizer",email:"youthmappers.ugb@gmail.com"}],extendedDescription:"YouthMappers UGB is made up of young students and researchers who are passionate about mapping. Our aim is to improve students' skills in the field of cartography and to participate in the creation of open geographic data that responds to development challenges around the world and particularly in Africa.",countryCodes:["sn"],url:"https://web.facebook.com/youthmappersugb/"},"ym-Fourah-Bay-College":{type:"youthmappers",name:"Student's Geographical Association",description:"YouthMappers chapter at Fourah Bay College",id:"ym-Fourah-Bay-College",featureId:"Fourah-Bay-College",contacts:[{name:"Organizer",email:"sgayouthmappers@gmail.com"}],extendedDescription:"The Student's Geographical Association- YouthMappers is an association of Fourah Bay College Students with the common goals of mapping out vulnerable places in Sierra Leone and the world at large for relief and other beneficial purposes,carry out Research and other educative endeavors. The chapter consists of young people with great ideas, development oriented with the capacity to relate with each other, comprehend and implement sustainable developmental projects as a team.",countryCodes:["sl"],url:"mailto:sgayouthmappers@gmail.com?subject=YouthMappers%20at%20Fourah%20Bay%20College"},"ym-Njala-University-Freetown-Campus":{type:"youthmappers",name:"Njala Freetown YouthMappers",description:"YouthMappers chapter at Njala University, Freetown Campus",id:"ym-Njala-University-Freetown-Campus",featureId:"Njala-University-Freetown-Campus",contacts:[{name:"Organizer",email:"njalafreetownmappers@gmail.com"}],extendedDescription:"We are students of Njala University Freetown Campus, studying Information Technology under the department of Physics and Computer Science. and we are located at Henry Street Freetown, Sierra Leone.",countryCodes:["sl"],url:"mailto:Njalafreetownmappers@gmail.com"},"ym-Njala-University-Njala-Campus":{type:"youthmappers",name:"YouthMappers Njala University, Njala Campus",description:"YouthMappers chapter at Njala University, Njala Campus",id:"ym-Njala-University-Njala-Campus",featureId:"Njala-University-Njala-Campus",contacts:[{name:"Organizer",email:"youthmappersnu2017@gmail.com"}],countryCodes:["sl"],url:"mailto:youthmappersnu2017@gmail.com"},"ym-University-of-Pretoria":{type:"youthmappers",name:"Centre for Geoinformation Science",description:"YouthMappers chapter at University of Pretoria",id:"ym-University-of-Pretoria",featureId:"University-of-Pretoria",contacts:[{name:"Organizer",email:"cgis-info@kendy.up.ac.za"}],extendedDescription:"The students who map Pretoria are supported by the University of Pretoria's Centre for Geoinformation Science, a platform from where the excellence of UP individuals and teams involved in geographic information science (GISc) research, education and training, professional development and community engagement is encouraged and strengthened through collaborations, education and training and alliances within South Africa and abroad.",countryCodes:["za"],url:"http://www.up.ac.za/cgis"},"ym-Ardhi-University":{type:"youthmappers",name:"ARU Mapper",description:"YouthMappers chapter at Ardhi University",id:"ym-Ardhi-University",featureId:"Ardhi-University",contacts:[{name:"Organizer",email:"bayonakennedy@gmail.com"}],extendedDescription:"As upcoming geospatial data consultants we seek to educate and provide advice to the society on how they can use spatial data not only as a form of location but a tool of decision making and predict different hazardous and climatical changes which may harm them or future genarations.",countryCodes:["tz"],url:"mailto:bayonakennedy@gmail.com"},"ym-Institute-of-Finance-Management":{type:"youthmappers",name:"IFM mappers",description:"YouthMappers chapter at Institute of Finance Management",id:"ym-Institute-of-Finance-Management",featureId:"Institute-of-Finance-Management",contacts:[{name:"Organizer",email:"supermalik95@gmail.com"}],extendedDescription:"This is a new chapter at out institute and we are looking forward to use our financial education that we are receiving here at the campus and link ig with the environment in order to develop our sustainable environment towards helping the community with the effects of our environment in a financial ways by converting them into numbers. this is widely explained in ecosystem accounting and environmental accounts",countryCodes:["tz"],url:"mailto:supermalik95@gmail.com"},"ym-Institute-of-Rural-Development-Planning-Mwanza":{type:"youthmappers",name:"Youth Mappers Chapter at Institute of Rural Development Planning - Lake Zone Centre",description:"YouthMappers chapter at Institute of Rural Development Planning Mwanza",id:"ym-Institute-of-Rural-Development-Planning-Mwanza",featureId:"Institute-of-Rural-Development-Planning-Mwanza",contacts:[{name:"Organizer",email:"shabanimagawila@gmail.com"}],countryCodes:["tz"],url:"www.facebook.com/IYMLZC/"},"ym-Institute-of-Rural-Development-Planning":{type:"youthmappers",name:"Mipango YouthMappers Chapter",description:"YouthMappers chapter at Institute of Rural Development Planning",id:"ym-Institute-of-Rural-Development-Planning",featureId:"Institute-of-Rural-Development-Planning",contacts:[{name:"Organizer",email:"msmapperschapter@gmail.com"}],extendedDescription:"Mipango YouthMappers Chapter was introduced at IRDP on 3rd July, 2017 by Dr.Domitilla Bashemera. The founding members were 300 (190 males and 110 female) Bachelor Degree students, who were registered as members of the Chapter. Gerald Zacharia is the president of the chapter and Juster Lugira is Vice President.",countryCodes:["tz"],url:"mailto:msmapperschapter@gmail.com"},"ym-Open-University-of-Tanzania":{type:"youthmappers",name:"Youth Mappers at Open University of Tanzania",description:"YouthMappers chapter at Open University of Tanzania",id:"ym-Open-University-of-Tanzania",featureId:"Open-University-of-Tanzania",contacts:[{name:"Organizer",email:"youthmapout@gmail.com"}],extendedDescription:"Youth Mappers at Open University of Tanzania\n\nHad been founded by members and students of Open University of Tanzania in Department of Geography who are mainly need to improve their career and help young community through joint and partnership projects with local community groups such as Mikoko Scout Group (www.msg.or.tz) and start cooperation with international colleges and universities for exchange programs in relation to Geography Studies as some programs prepared by Mikoko Scout Group which will link local university and other universities of the same interest through International Nature & Environmental Youth Camp 2019 (www.campsite.msg.or.tz/nature.html )\n\nOur chapter will soon be recognized as youth network program that will open opportunity for students to study and conduct research studies at a local levels.",countryCodes:["tz"],url:"mailto:youthmapout@gmail.com"},"ym-Sokoine-University-of-Agriculture":{type:"youthmappers",name:"SMCoSE YouthMappers",description:"YouthMappers chapter at Sokoine University of Agriculture",id:"ym-Sokoine-University-of-Agriculture",featureId:"Sokoine-University-of-Agriculture",contacts:[{name:"Organizer",email:"smcoseyouthmappers@gmail.com"}],extendedDescription:"A Chapter comprising of Environmental sciences and management students and Geography studies under the dept. of Geography and we will be using mapping techniques, based on systems concepts and theories, can be used to facilitate, explore, and capture the different understandings of the relationships, perspectives, and boundaries involved in environmental sustainability to obtain a more complete comprehension of the concept and develop plans for action.",countryCodes:["tz"],url:"mailto:SMCoSEyouthmappers@gmail.com"},"ym-University-of-Dar-es-Salaam":{type:"youthmappers",name:"YouthMappers at University of Dar es Salaam",description:"YouthMappers chapter at University of Dar es Salaam",id:"ym-University-of-Dar-es-Salaam",featureId:"University-of-Dar-es-Salaam",contacts:[{name:"Organizer",email:"godluckur@gmail.com"}],extendedDescription:"The purpose of the University of Dar es Salaam YouthMappers is to use and promote open source data and GIS technologies to map potential disaster areas, provide resources for emergency management, connect its members with open source and GIS organizations in the city of Dar es Salaam, and serve any upcoming needs of our project partners .",countryCodes:["tz"],url:"https://www.facebook.com/UDSMYouthMappers/"},"ym-Busitema-University":{type:"youthmappers",name:"Good Mappers",description:"YouthMappers chapter at Busitema University",id:"ym-Busitema-University",featureId:"Busitema-University",contacts:[{name:"Organizer",email:"mulindwasteven82@gmail.com"}],extendedDescription:"Good mappers is a team of students in Busitema University. Its main objective is to create a community of experienced mappers who can contribute to the world map.",countryCodes:["ug"],url:"https://m.facebook.com/HOTBusitemaUniv/"},"ym-Gulu-University":{type:"youthmappers",name:"CSGU Mappers",description:"YouthMappers chapter at Gulu University",id:"ym-Gulu-University",featureId:"Gulu-University",contacts:[{name:"Organizer",email:"git445@gmail.com"}],extendedDescription:"The CSGU Mappers are the Computing Society at Gulu University. This chapter is creative, passionate, innovative and ready to map Uganda and the world at large, beyond other people's imagination.",countryCodes:["ug"],url:"mailto:git445@gmail.com?subject=YouthMappers%20at%20Gulu%20University"},"ym-Kumi-University":{type:"youthmappers",name:"Ever Last YouthMappers",description:"YouthMappers chapter at Kumi University",id:"ym-Kumi-University",featureId:"Kumi-University",contacts:[{name:"Organizer",email:"kumiuniversityeverlastyouthmap@gmail.com"}],extendedDescription:"This energetic group of students organizes within the faculty of Science and Information Technology.",countryCodes:["ug"],url:"mailto:kumiuniversityeverlastyouthmap@gmail.com?subject=YouthMappers%20at%20Kumi%20University"},"ym-Makerere-University":{type:"youthmappers",name:"Geo YouthMappers",description:"YouthMappers chapter at Makerere University",id:"ym-Makerere-University",featureId:"Makerere-University",contacts:[{name:"Organizer",email:"geo-youthmappers@googlegroups.com"}],extendedDescription:"Geo YouthMappers is a Makerere University based mapping chapter esteemed to apply the spatial conception to the real world.We have collaborated on various mapping events with OSM. Our main aim is the desire to simplify data and make it readily available mostly for disaster preparedness.\"We map the world and change lives.",countryCodes:["ug"],url:"https://www.facebook.com/groups/1742657446017065/"},"ym-Mbarara-University-of-Science-and-Technology":{type:"youthmappers",name:"MUST Street Mappers",description:"YouthMappers chapter at Mbarara University of Science and Technology",id:"ym-Mbarara-University-of-Science-and-Technology",featureId:"Mbarara-University-of-Science-and-Technology",contacts:[{name:"Organizer",email:"muststreetmappers@gmail.com"}],extendedDescription:"MUST Street Mappers is a Youth Mappers chapter at the Mbarara University of Science and Technology that is based on making our country and the world at large a better place through mapping. We base on collected information to notice patterns and data mine to present relevant and beneficial information to society.",countryCodes:["ug"],url:"https://web.facebook.com/muststreetmappers/"},"ym-St.-Augustine-International-University":{type:"youthmappers",name:"YouthMappers at St Augustine International University",description:"YouthMappers chapter at St. Augustine International University",id:"ym-St.-Augustine-International-University",featureId:"St.-Augustine-International-University",contacts:[{name:"Organizer",email:"youthmapperssaiu@gmail.com"}],countryCodes:["ng"],url:"mailto:youthmapperssaiu@gmail.com"},"ym-Uganda-Christian-University-Mbale-Campus":{type:"youthmappers",name:"Mappers for Life",description:"YouthMappers chapter at Uganda Christian University Mbale Campus",id:"ym-Uganda-Christian-University-Mbale-Campus",featureId:"Uganda-Christian-University-Mbale-Campus",contacts:[{name:"Organizer",email:"munhilll@gmail.com"}],extendedDescription:"We are Team Mappers for life! Please come and join us as we map together!\" This group works from the Department of Information Technology at the UCU.",countryCodes:["ug"],url:"mailto:munhilll@gmail.com?subject=YouthMappers%20and%20the%20Uganda%20Christian%20University%20Mappers%20for%20Life"},"ym-Uganda-Pentecostal-University":{type:"youthmappers",name:"HiTech Youth Mappers",description:"YouthMappers chapter at Uganda Pentecostal University",id:"ym-Uganda-Pentecostal-University",featureId:"Uganda-Pentecostal-University",contacts:[{name:"Organizer",email:"hitechyouthmappers@gmail.com"}],extendedDescription:"A new Youthmappers Chapter in Western Uganda. Ready to map and provide open data with OpenStreetMap for development purposes.",countryCodes:["ug"],url:"mailto:hitechyouthmappers@gmail.com"},"ym-St.-Mawaggali-Trades-Training-Institute":{type:"youthmappers",name:"MawaggaliMappers",description:"YouthMappers chapter at St. Mawaggali Trades Training Institute",id:"ym-St.-Mawaggali-Trades-Training-Institute",featureId:"St.-Mawaggali-Trades-Training-Institute",contacts:[{name:"Organizer",email:"mawaggalimappers@gmail.com"}],extendedDescription:"We are the youthappers chapter at St. Mawaggali trades in choma who are want to contribute the different humantarian tasks to serve lives through mapping.",countryCodes:["zm"],url:"mailto:mawaggalimappers@gmail.com"},"ym-The-University-of-Zambia":{type:"youthmappers",name:"YouthMappers Unza",description:"YouthMappers chapter at The University of Zambia",id:"ym-The-University-of-Zambia",featureId:"The-University-of-Zambia",contacts:[{name:"Organizer",email:"chombachishala13@gmail.com"}],countryCodes:["zm"],url:"https://www.facebook.com/search/posts/?q=youth%20mappers%20unza"},"ym-University-of-Zimbabwe":{type:"youthmappers",name:"UZMappers",description:"YouthMappers chapter at University of Zimbabwe",id:"ym-University-of-Zimbabwe",featureId:"University-of-Zimbabwe",contacts:[{name:"Organizer",email:"uzmappersteam@gmail.com"}],extendedDescription:"UzMappersTeam Zimbabwe is a team of Volunteers using OpenStreetMap for Open Data Mapping and Humanitarian Disaster response mapping .The team empowers its members with open source geospatial technology skills.",countryCodes:["zw"],url:"https://www.facebook.com/Uzmappersteam-Zimbabwe-246038666256392/"},"OSM-BGD-facebook":{id:"OSM-BGD-facebook",featureId:"BGD",type:"facebook",name:"OpenStreetMap Bangladesh",description:"Improve OpenStreetMap in Bangladesh",extendedDescription:"Mapping in Bangladesh? Have questions, want to connect with the community here? Join us at {url}. All are welcome!",url:"https://www.facebook.com/groups/osmbd/",contacts:[{name:"Ahasanul Hoque",email:"hoque.ahasan@gmail.com"}]},"ym-Asian-University-for-Women":{type:"youthmappers",name:"YouthMappers at AUW",description:"YouthMappers chapter at Asian University for Women",id:"ym-Asian-University-for-Women",featureId:"Asian-University-for-Women",contacts:[{name:"Organizer",email:"harunur.rashid@auw.edu.bd"}],extendedDescription:"The Asian University for Women seeks to graduate women who will be skilled and innovative professionals, service-oriented leaders in the businesses and communities in which they will work and live, and promoters of intercultural understanding and sustainable human and economic development in Asia and throughout the world.",countryCodes:["bd"],url:"http://www.auw.edu.bd/"},"ym-Dhaka-College":{type:"youthmappers",name:"YouthMappers Daka College",description:"YouthMappers chapter at Dhaka College",id:"ym-Dhaka-College",featureId:"Dhaka-College",contacts:[{name:"Organizer",email:"youthmappersdc@gmail.com"}],extendedDescription:"YouthMappers DhakaCollege is an approach by students to help mapping vulnerable areas of the world as a part of Humanitarian Action. YouthMappers gives the opportunity to the students for helping people and using mapping for humanitarian purposes. This open geographic data can be used for educational, navigational and other humanitarian purposes. Happy mapping.",countryCodes:["bd"],url:"https://www.facebook.com/groups/321220498214124/"},"ym-Dhaka-University":{type:"youthmappers",name:"Openstreetmap YouthMappers",description:"YouthMappers chapter at Dhaka University",id:"ym-Dhaka-University",featureId:"Dhaka-University",contacts:[{name:"Organizer",email:"hoque.ahasan@gmail.com"}],extendedDescription:"It's a great privilege for the students of University of Dhaka to map for humanitarian purposes. Our chapter gives the opportunity to the students for helping people and use mapping for humanitarian purposes.",countryCodes:["bd"],url:"https://www.facebook.com/groups/osmDU/1773150346233538/?notif_t=group_activity¬if_id=1472953820177890"},"ym-Eastern-University":{type:"youthmappers",name:"YouthMappers at Eastern University",description:"YouthMappers chapter at Eastern University",id:"ym-Eastern-University",featureId:"Eastern-University",contacts:[{name:"Organizer",email:"infolimon@gmail.com"}],extendedDescription:"YouthMappers at Eastern University, Bangladesh has been formed with a view to assisting people during humanitarian crisis. The students, likewise other mappers of the world, are promised to assist people in using the map for educational, navigational and other humanitarian purposes.",countryCodes:["bd"],url:"mailto:infolimon@gmail.com"},"ym-Jahangirnagar-University":{type:"youthmappers",name:"YouthMappers at IRS, Jahangirnagar University",description:"YouthMappers chapter at Jahangirnagar University",id:"ym-Jahangirnagar-University",featureId:"Jahangirnagar-University",contacts:[{name:"Organizer",email:"s.t.islam@juniv.edu"}],countryCodes:["bd"],url:"mailto:s.t.islam@juniv.edu"},"ym-Khulna-University":{type:"youthmappers",name:"Openstreetmap",description:"YouthMappers chapter at Khulna University",id:"ym-Khulna-University",featureId:"Khulna-University",contacts:[{name:"Organizer",email:"hoque.ahasan@gmail.com"}],extendedDescription:"KU students and faculty from multiple disciplines are experienced at creating open data for OSM to address local challenges of development, including food security and other topics.",countryCodes:["bd"],url:"https://www.facebook.com/groups/osmku/"},"ym-Rajshahi-University-of-Engineering-Technology":{type:"youthmappers",name:"YouthMappers at RUET",description:"YouthMappers chapter at Rajshahi University of Engineering & Technology",id:"ym-Rajshahi-University-of-Engineering-Technology",featureId:"Rajshahi-University-of-Engineering-Technology",contacts:[{name:"Organizer",email:"ruetmappers@gmail.com"}],extendedDescription:"The \"YouthMappers at RUET\" is a humanitarian mapping group of students of Rajshahi University of Engineering & Technology (RUET) to share, develop and practice the knowledge of GIS. This group encourages using open source geospatial data and platform to make solution to reach the most vulnerable group of the world.",countryCodes:["bd"],url:"mailto:ruetmappers@gmail.com"},"ym-Sherubtse-College":{type:"youthmappers",name:"Geographical Society",description:"YouthMappers chapter at Sherubtse College",id:"ym-Sherubtse-College",featureId:"Sherubtse-College",contacts:[{name:"Organizer",email:"gsscbhutan@gmail.com"}],extendedDescription:"The Geographical Society, in the Department of Geography & Planning, Sherubtse College, Royal University of Bhutan, with support from the Center for Climate Change and Spatial Information, has made several efforts to create awareness and address important issues at the local and national level. We now join hands with the international student-centered YouthMappers network on \"Mapping for Resilience\" and contributing to a global 'Happiness'!",countryCodes:["bt"],url:"mailto:gsscbhutan@gmail.com?subject=About%20the%20Royal%20University%20of%20Bhutan%20Geographical%20Society%20and%20Youth%20Mappers"},"OSM-India-facebook":{id:"OSM-India-facebook",featureId:"india_full",type:"facebook",name:"OpenStreetMap India - Participatory neighborhood mapping",description:"Improve OpenStreetMap in India",extendedDescription:"Mapping in India? Have questions, want to connect with the community here? Join us at {url}. All are welcome!",url:"https://www.facebook.com/groups/mappingindia/",contacts:[{name:"Jinal Foflia",email:"fofliajinal@gmail.com"},{name:"Arun Ganesh",email:"arun.planemad@gmail.com"}],events:[{id:"sotmasia2018",i18n:true,name:"State of the Map Asia 2018",description:"Join the 2018 OpenStreetMap region-wide event at State of the Map Asia in India",where:"Indian Institute of Management, Bangalore, India",when:"2018-11-17",url:"http://stateofthemap.asia/"}]},"osm-india-forum":{id:"osm-india-forum",featureId:"india_full",type:"forum",countryCodes:["in"],name:"OpenStreetMap India forum",description:"OpenStreetMap India web forum",url:"https://forum.openstreetmap.org/viewforum.php?id=65",contacts:[{name:"OpenStreetMap India",email:"openstreetmapindia@gmail.com"}]},"osm-india-github":{id:"osm-india-github",featureId:"india_full",type:"github",name:"OpenStreetMap India GitHub",description:"Code with us: {url}",url:"https://github.com/osm-in",contacts:[{name:"Naveen Francis",email:"naveenpf@gmail.com"}]},"OSM-india-mailinglist":{id:"OSM-india-mailinglist",featureId:"india_full",type:"mailinglist",name:"OpenStreetMap India Mailinglist",description:"Talk-in is the official Mailinglist for Indian Community",url:"https://lists.openstreetmap.org/listinfo/talk-in",contacts:[{name:"Arun Ganesh",email:"arun.planemad@gmail.com"}]},"osm-india-telegram":{id:"osm-india-telegram",featureId:"india_full",type:"telegram",name:"OpenStreetMap India Telegram",description:"Join our family: {url}",url:"https://t.me/OSMIndia",contacts:[{name:"Naveen Francis",email:"naveenpf@gmail.com"}]},"OSM-india-twitter":{id:"OSM-india-twitter",featureId:"india_full",type:"twitter",name:"OpenStreetMap India Twitter",description:"We are just a tweet away: {url}",url:"https://twitter.com/osm_in",contacts:[{name:"Jinal Foflia",email:"fofliajinal@gmail.com"}]},"osm-india-website":{id:"osm-india-website",featureId:"india_full",type:"osm",name:"OpenStreetMap India",countryCodes:["in"],description:"Mappers and OpenStreetMap users in India",url:"https://openstreetmap.in/",contacts:[{name:" OpenStreetMap India",email:"openstreetmapindia@gmail.com"}]},"osm-india-wiki":{id:"osm-india-wiki",featureId:"india_full",type:"wiki",name:"OpenStreetMap Wikiproject India",description:"Everything you need to know about mapping in India: {url}",url:"https://wiki.openstreetmap.org/wiki/WikiProject_India",contacts:[{name:"Naveen Francis",email:"naveenpf@gmail.com"}]},"osm-india-youtube":{id:"osm-india-youtube",featureId:"india_full",type:"youtube",name:"OpenStreetMap India Youtube",description:"Subscribe to our channel: {url}",url:"https://www.youtube.com/channel/UCu5sKaPU04x0RJkgGkoFORw",contacts:[{name:"Naveen Francis",email:"naveenpf@gmail.com"}]},"OSM-India-Puducherry-Facebook":{id:"OSM-India-Puducherry-Facebook",featureId:"india_puducherry",type:"facebook",name:"Free Software Hardware Movement - Facebook",description:"FSHM Facebook page to know about community events, activities",extendedDescription:"FSHM organizes events relating to free software/hardware, technology, activism and OpenStreetMap. Its FB page is the best way to keep in contact with its events.",url:"https://www.facebook.com/FSHMP",contacts:[{name:"Kamalavelan",email:"sskamalavelan@gmail.com",osm:"demonshreder"},{name:"Prasanna",email:"prasmailme@gmail.com",osm:"Prashere"}]},"OSM-Puducherry-Mailing-List":{id:"OSM-Puducherry-Mailing-List",featureId:"india_puducherry",type:"mailinglist",name:"Free Software Hardware Movement - Mailing List",description:"FSHM Puducherry mailing list to discuss mapping in Puducherry and other things.",extendedDescription:"FSHM organizes events relating to free software/hardware, technology, activism and OpenStreetMap.",url:"https://www.freelists.org/archive/puduvailug/",signupUrl:"https://www.freelists.org/list/puduvailug",contacts:[{name:"Kamalavelan",email:"sskamalavelan@gmail.com",osm:"demonshreder"},{name:"Prasanna",email:"prasmailme@gmail.com",osm:"Prashere"}]},"OSM-India-Puducherry-Matrix":{id:"OSM-India-Puducherry-Matrix",featureId:"india_puducherry",type:"matrix",name:"Free Software Hardware Movement - Matrix",description:"FSHM Riot group to discuss, share and update mapping activities, events in and around Puducherry",extendedDescription:"FSHM community members share their OSM mapping updates / experiences through the Riot.im group, this group is also used to discuss things related to free software / hardware, technology and activism.",url:"https://riot.im/app/#/room/#fshm:matrix.org",contacts:[{name:"Kamalavelan",email:"sskamalavelan@gmail.com",osm:"demonshreder"},{name:"Prasanna",email:"prasmailme@gmail.com",osm:"Prashere"}]},"ym-Gujarat-University":{type:"youthmappers",name:"CCIM at Ahmedabad",description:"YouthMappers chapter at Gujarat University",id:"ym-Gujarat-University",featureId:"Gujarat-University",contacts:[{name:"Organizer",email:"coolmulls@gmail.com"}],countryCodes:["in"],url:"mailto:Coolmulls@gmail.com"},"OSM-IDN-facebook":{id:"OSM-IDN-facebook",featureId:"IDN",type:"facebook",name:"OpenStreetMap Indonesia",description:"Improve OpenStreetMap in Indonesia",extendedDescription:"Mapping in Indonesia? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!",url:"https://www.facebook.com/groups/osm.id/",contacts:[{name:"Yantisa Akhadi",email:"yantisa.akhadi@hotosm.org"}]},"ym-Universitas-Negeri-Makassar":{type:"youthmappers",name:"Kontur Geografi",description:"YouthMappers chapter at Universitas Negeri Makassar",id:"ym-Universitas-Negeri-Makassar",featureId:"Universitas-Negeri-Makassar",contacts:[{name:"Organizer",email:"konturgeografi@gmail.com"}],countryCodes:["in"],url:"https://tentangkontur.blogspot.co.id"},"ym-University-Muhammadiyah-Surakarta":{type:"youthmappers",name:"SpaceTime",description:"YouthMappers chapter at University Muhammadiyah Surakarta",id:"ym-University-Muhammadiyah-Surakarta",featureId:"University-Muhammadiyah-Surakarta",contacts:[{name:"Organizer",email:"spacetime1717@gmail.com"}],extendedDescription:"SpaceTime is a community mapping in the Faculty of Geography of Muhammadiyah University of Surakarta. SpaceTime was founded by Bruce Maldy Pratama, Mukhlis Akbar and Irfandi Fauzi. They are active students in the Faculty of Geography University Muhammadiyah Surakarta.",countryCodes:["in"],url:"mailto:spacetime1717@gmail.com"},"osm-iran-aparat":{id:"osm-iran-aparat",featureId:"iran",type:"aparat",countryCodes:["ir"],languageCodes:["fa"],name:"OpenStreetMap Iran Aparat",description:"Subscribe to our channel at {url}",extendedDescription:"A good resource of videos about anything related to OpenStreetMap. Mainly in Persian.",url:"https://www.aparat.com/osm_iran",contacts:[{name:"Iman",email:"iriman@chmail.ir"}]},"osm-iran-forum":{id:"osm-iran-forum",featureId:"iran",type:"forum",countryCodes:["ir"],languageCodes:["fa"],name:"OpenStreetMap Iran web forum",description:"OpenStreetMap Iran web forum",extendedDescription:"A web forum for OpenStreetMap users in Iran. Feel free to ask questions and discuss with others!",url:"https://forum.openstreetmap.org/viewforum.php?id=103",contacts:[{name:"Iman",email:"iriman@chmail.ir"}]},"osm-iran-telegram":{id:"osm-iran-telegram",featureId:"iran",type:"telegram",countryCodes:["ir"],languageCodes:["fa"],name:"OpenStreetMap Iran Telegram",description:"You're welcome to join our Telegram channel at {url}. We also have a supergroup of many OSMers interested in Iran. Find its link in bio of channel.",url:"https://t.me/openstreetmapir",contacts:[{name:"Iman",email:"iriman@chmail.ir"}]},"OSM-japan-facebook":{id:"OSM-japan-facebook",featureId:"japan",type:"facebook",name:"OpenStreetMap Japan Community",countryCodes:["jp"],languageCodes:["jp"],description:"Mappers and OpenStreetMap users in Japan",url:"https://www.facebook.com/groups/osmjapan/",contacts:[{name:"Satoshi IIDA",email:"nyampire@gmail.com"}]},"OSM-japan-mailinglist":{id:"OSM-japan-mailinglist",featureId:"japan",type:"mailinglist",name:"OpenStreetMap Japan Mailinglist",countryCodes:["jp"],languageCodes:["jp"],description:"Talk-ja is an Official Mailinglist for Japanese Community",url:"https://lists.openstreetmap.org/listinfo/talk-ja",contacts:[{name:"OSMF Japan",email:"info@osmf.jp"}]},"OSM-japan-twitter":{id:"OSM-japan-twitter",featureId:"japan",type:"twitter",name:"OpenStreetMap Japan Twitter",countryCodes:["jp"],languageCodes:["jp"],description:"Hashtag on Twitter: {url}",url:"https://twitter.com/hashtag/osmjp",contacts:[{name:"Satoshi IIDA",email:"nyampire@gmail.com"}]},"OSM-japan-website":{id:"OSM-japan-website",featureId:"japan",type:"group",name:"OpenStreetMap Japan",countryCodes:["jp"],languageCodes:["jp"],description:"Mappers and OpenStreetMap users in Japan",url:"https://openstreetmap.jp/",contacts:[{name:"Satoshi IIDA",email:"nyampire@gmail.com"}]},"OSM-MY-facebook":{id:"OSM-MY-facebook",featureId:"malaysia",type:"facebook",countryCodes:["my"],languageCodes:["ms","en"],name:"OpenStreetMap Malaysia on Facebook",description:"For chat about anything related to OpenStreetMap!",url:"https://www.facebook.com/groups/openstreetmapMY/",contacts:[{name:"Mohd Saidin",email:"projekopenstreetmap@hotmail.com"}]},"OSM-MY-forum":{id:"OSM-MY-forum",featureId:"malaysia",type:"forum",countryCodes:["my"],languageCodes:["ms","en"],name:"OpenStreetMap Malaysia Forum",description:"Official OpenStreetMap Malaysia Forum",url:"https://forum.openstreetmap.org/viewforum.php?id=60",contacts:[{name:"Mohd Saidin",email:"projekopenstreetmap@hotmail.com"}]},"OSM-MY-matrix":{id:"OSM-MY-matrix",featureId:"malaysia",type:"matrix",countryCodes:["my"],languageCodes:["ms","en"],name:"OpenStreetMap Malaysia Riot channel",description:"All mappers are welcome! Sign up at {signupUrl}",signupUrl:"https://riot.im/app/#/register",url:"https://riot.im/app/#/room/#OpenstreetmapMalaysia:matrix.org",contacts:[{name:"Ahmad Amsyar",email:"OfficiallyAhmad@protonmail.ch"}]},"OSM-MNG-facebook":{id:"OSM-MNG-facebook",featureId:"MNG",type:"facebook",name:"OpenStreetMap Mongolia",description:"Improve OpenStreetMap in Mongolia",extendedDescription:"Mapping in Mongolia? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!",url:"https://www.facebook.com/groups/OSM.Mongolia/",contacts:[{name:" ",email:"talk-mn@openstreetmap.org"}]},"OSM-MMR-facebook":{id:"OSM-MMR-facebook",featureId:"MMR",type:"facebook",name:"OpenStreetMap Myanmar",description:"Improve OpenStreetMap in Myanmar",extendedDescription:"Mapping in Myanmar? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!",url:"https://www.facebook.com/groups/osmmm/",contacts:[{name:"Yan Naung Oak",email:"yan@phandeeyar.org"},{name:"Patrick Oswald",email:"patrickoswald.omm@gmail.com"},{name:"Set Khaing Oo",email:"setkhaing@phandeeyar.org"}]},"OSM-Nepal-facebook":{id:"OSM-Nepal-facebook",featureId:"NPL",type:"facebook",name:"OpenStreetMap Nepal",description:"Improve OpenStreetMap in Nepal",extendedDescription:"Mapping in Nepal? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!",url:"https://www.facebook.com/groups/mapkathmandu/",contacts:[{name:"Kshitiz Khanal",email:"khanal1990@gmail.com"}]},"ym-Institute-of-Crisis-Management-Studies":{type:"youthmappers",name:"Institute of Crisis Management Studies YouthMappers",description:"YouthMappers chapter at Institute of Crisis Management Studies",id:"ym-Institute-of-Crisis-Management-Studies",featureId:"Institute-of-Crisis-Management-Studies",contacts:[{name:"Organizer",email:"deepakadhikari@tuicms.edu.np"}],extendedDescription:"To develop Crisis Mappers to assist during disaster situations.",countryCodes:["np"],url:"mailto:deepakadhikari@tuicms.edu.np"},"ym-Kathmandu-University":{type:"youthmappers",name:"Geomatics Engineering Society,GES",description:"YouthMappers chapter at Kathmandu University",id:"ym-Kathmandu-University",featureId:"Kathmandu-University",contacts:[{name:"Organizer",email:"ges@ku.edu.np"}],extendedDescription:"Geomatics Engineering Society (GES) established in 2008 A.D is a departmental club under Department of Civil and Geomatics Engineering (DCGE) at Kathmandu University. GES acts as a platform to develop the skills of students apart from their educational activities by focusing on activities like technical trainings, seminars, talk programs and interaction with experts from related field, sports activities etc.",countryCodes:["np"],url:"ku.edu.np/ges"},"ym-Tribhuvan-University":{type:"youthmappers",name:"Geomatics Engineering Students Association",description:"YouthMappers chapter at Tribhuvan University",id:"ym-Tribhuvan-University",featureId:"Tribhuvan-University",contacts:[{name:"Organizer",email:"gesan.nepal@gmail.com"}],extendedDescription:"This organization is the student forum of Geomatics Engineering students of Tribhuvan University , Institute of Engineering on the Pashchimanchal campus. Established since the beginning of the degree program, students have been active in mapping and leadership and are thrilled to be a part of the YouthMappers network.",countryCodes:["np"],url:"http://gesanwrc.wordpress.com/"},"OSM-Asia-mailinglist":{id:"OSM-Asia-mailinglist",featureId:"asia_full",type:"mailinglist",name:"OpenStreetMap Asia Mailinglist",description:"Talk-asia is the official Mailinglist for Asian Community",url:"https://lists.openstreetmap.org/listinfo/talk-asia",contacts:[{name:"Erwin Olario",email:"govvin@gmail.com"}]},"osm-asia-telegram":{id:"osm-asia-telegram",featureId:"asia_full",type:"telegram",name:"OpenStreetMap Asia Telegram",description:"Join our family: {url}",url:"https://t.me/OpenStreetMapAsia",contacts:[{name:"Erwin Olario",email:"govvin@gmail.com"}]},"OSM-PH-facebook":{id:"OSM-PH-facebook",featureId:"philippines",type:"facebook",countryCodes:["ph"],name:"OpenStreetMap PH Facebook",description:"Welcome to OpenStreetMap Philippines, where we encourage all fellow Filipinos to contribute to the OpenStreetMap project.",url:"https://www.facebook.com/OSMPH/",contacts:[{name:"Maning Sambale",email:"emmanuel.sambale@gmail.com"},{name:"OSM PH Group",email:"osm.pilipinas@gmail.com"}]},"OSM-PH-mailinglist":{id:"OSM-PH-mailinglist",featureId:"philippines",type:"mailinglist",countryCodes:["ph"],name:"Talk-ph Mailing List",description:"A mailing list to discuss OpenStreetMap in the Philippines",url:"https://lists.openstreetmap.org/pipermail/talk-ph/",contacts:[{name:"Maning Sambale",email:"emmanuel.sambale@gmail.com"},{name:"OSM PH Group",email:"osm.pilipinas@gmail.com"}]},"OSM-PH-slack":{id:"OSM-PH-slack",featureId:"philippines",type:"slack",countryCodes:["ph"],name:"OpenStreetMap PH Slack",description:"All are welcome! Sign up at {signupUrl}",signupUrl:"https://osmph-chat.herokuapp.com/",url:"https://osmph.slack.com",contacts:[{name:"Maning Sambale",email:"emmanuel.sambale@gmail.com"},{name:"OSM PH Group",email:"osm.pilipinas@gmail.com"}]},"OSM-PH-telegram":{id:"OSM-PH-telegram",featureId:"philippines",type:"telegram",countryCodes:["ph"],languageCodes:["tl","en"],name:"OpenStreetMap PH Telegram",description:"Un-official, Telegram local community of OpenStreetMap contributors and friends in the Philippines",url:"https://t.me/osmph",contacts:[{name:"Erwin Olario",email:"govvin@gmail.com"},{name:"OSM PH Group",email:"osm.pilipinas@gmail.com"}]},"ym-Far-Eastern-University-Institute-of-Technology":{type:"youthmappers",name:"Junior Philippines Computer Society",description:"YouthMappers chapter at Far Eastern University -Institute of Technology",id:"ym-Far-Eastern-University-Institute-of-Technology",featureId:"Far-Eastern-University-Institute-of-Technology",contacts:[{name:"Organizer",email:"jpcsfeutech@outlook.com"}],extendedDescription:"FEU has been recognized as one of the leading universities in the Philippines. Its mission centers on producing graduates who have contributed to the advancement of the country. The university continuously challenges itself to raise the bar of excellence to achieve a top-tier status not only in the Philippines but also in the South East Asian region",countryCodes:["ph"],url:"mailto:jpcsfeutech@outlook.com?subject=YouthMappers%20and%20Junior%20Philippines%20Computer%20Society"},"ym-University-of-the-Philippines-Resilience-Institute":{type:"youthmappers",name:"YouthMappers UP Resilience Institute",description:"YouthMappers chapter at University of the Philippines Resilience Institute",id:"ym-University-of-the-Philippines-Resilience-Institute",featureId:"University-of-the-Philippines-Resilience-Institute",contacts:[{name:"Organizer",email:"llnguyen@up.edu.ph"}],extendedDescription:"The UP Resilience Institute was established in 2016 with a mission statement to empower local communities through multidisciplinary research and actions toward resilience. Through UP NOAH Center, and the help of different organizations, we have provided building exposure maps for 17 provinces out of the 82 and uploaded more than 4 million footprints to Open Street Maps.",countryCodes:["ph"],url:"https://www.facebook.com/UP-Resillience-Institute-Youth-Mappers-123477508533225"},"OSM-RU-forum":{id:"OSM-RU-forum",type:"forum",featureId:"russia",countryCodes:["ru"],languageCodes:["ru"],name:"OpenStreetMap RU forum",description:"OpenStreetMap Russia web forum",url:"https://forum.openstreetmap.org/viewforum.php?id=21",contacts:[{name:"Ilya Zverev",email:"ilya@zverev.info"}]},"OSM-RU-telegram":{id:"OSM-RU-telegram",type:"telegram",featureId:"russia",countryCodes:["ru"],languageCodes:["ru"],name:"OpenStreetMap RU telegram",description:"OpenStreetMap Russia telegram chat",url:"https://t.me/ruosm",contacts:[{name:"Ilya Zverev",email:"ilya@zverev.info"}]},"OSM-south-korea-telegram":{id:"OSM-south-korea-telegram",featureId:"south_korea",type:"telegram",countryCodes:["kr"],languageCodes:["ko","en"],name:"OSM South Korea Telegram",description:"Unofficial Channnel for OpenStreetMap contributors, communities, and users in South Korea to share and discuss.",url:"https://t.me/osmKorea",contacts:[{name:"Yongmin Hong",email:"revi@pobox.com"},{name:"Max N",email:"abonnements@revolwear.com"}]},"OSM-sri-lanka-facebook":{id:"OSM-sri-lanka-facebook",featureId:"sri_lanka",type:"facebook",countryCodes:["lk"],name:"OpenStreetMap Sri Lanka",description:"Improve OpenStreetMap in Sri Lanka",extendedDescription:"Mapping in Sri Lanka? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!",url:"https://www.facebook.com/groups/142058222659672/",contacts:[{name:"Karan Suthakaran",email:"karansuthakaran@yahoo.com"}]},"OSM-TW-facebook":{id:"OSM-TW-facebook",featureId:"taiwan",type:"facebook",name:"OpenStreetMap Taiwan Community",countryCodes:["tw"],languageCodes:["zh-tw"],description:"Facebook Group for Mappers and OpenStreetMap users to discuss matters about Taiwan.",url:"https://www.facebook.com/groups/OpenStreetMap.TW/",contacts:[{name:"Nobody 沒有人 (Public mail)",email:"hiboard@openstreetmap.tw"}]},"OSM-TW-mailinglist":{id:"OSM-TW-mailinglist",featureId:"taiwan",type:"mailinglist",name:"OpenStreetMap Taiwan Mailinglist",countryCodes:["tw"],languageCodes:["zh-tw","en"],description:"Talk-tw is an Official Mailinglist for the Communities to dicuss matters about Taiwan",url:"https://lists.openstreetmap.org/listinfo/talk-tw",contacts:[{name:"Nobody 沒有人 (Public email)",email:"hiboard@openstreetmap.tw"}]},"OSM-TH-CNX-meetup":{id:"OSM-TH-CNX-meetup",featureId:"thailand_cnx",type:"meetup",countryCodes:["th"],languageCodes:["en"],name:"OSM Meetup Chiang Mai",description:"Irregular meeting of the OpenStreetMap community in Chiang Mai",extendedDescription:"Members of the OpenStreetMap community meet every few months in Chiang Mai. Get in contact and check out {url} to see when the next meetup is scheduled",url:"https://forum.openstreetmap.org/viewforum.php?id=46",contacts:[{name:"Team Chiang Mai",email:"meetup-cnx@openstreetmap.in.th"}]},"OSM-TH-facebook":{id:"OSM-TH-facebook",featureId:"thailand_full",type:"facebook",countryCodes:["th"],languageCodes:["en","th"],name:"OpenStreetMap TH Facebook group",description:"Facebook group for OpenStreetMappers in Thailand",url:"https://www.facebook.com/groups/thaiosm/",contacts:[{name:"Theppitak Karoonboonyanan",email:"theppitak@gmail.com"}]},"OSM-TH-forum":{id:"OSM-TH-forum",featureId:"thailand_full",type:"forum",countryCodes:["th"],languageCodes:["en","th"],name:"OpenStreetMap TH forum",description:"OpenStreetMap Thailand web forum",url:"https://forum.openstreetmap.org/viewforum.php?id=46",contacts:[{name:"Stephan Knauss",email:"osm@stephans-server.de"}]},"al-forum":{id:"al-forum",featureId:"albania",type:"forum",countryCodes:["al"],languageCodes:["sq","en"],name:"OSM Albania Forum",description:"OpenStreetMap Albania Forum",url:"https://forum.openstreetmap.org/viewforum.php?id=91",contacts:[{name:"Jonathan Beliën",email:"dev@jbelien.be"},{name:"Amanti Lulo",email:"amanti.lulo@gmail.com"}]},"al-maptime-tirana":{id:"al-maptime-tirana",featureId:"al-tirana",type:"group",countryCodes:["al"],languageCodes:["sq","en"],name:"Maptime Tirana",description:"Social events organized around mapping - beginners most welcome!",extendedDescription:"Maptime is an open learning environment for all levels and degrees of knowledge, offering intentional educational support for the beginner. Maptime is simultaneously flexible and structured, creating space for mapping tutorials, workshops, ongoing projects with a shared goal, and independent/collaborative work time.",url:"http://maptime.io/tirana/",contacts:[{name:"Jonathan Beliën",email:"dev@jbelien.be"},{name:"Amanti Lulo",email:"amanti.lulo@gmail.com"}]},"al-telegram":{id:"al-telegram",featureId:"albania",type:"telegram",countryCodes:["al"],languageCodes:["sq","en"],name:"OSM Albania Telegram channel",description:"OpenStreetMap Albania Telegram channel",url:"https://telegram.me/OpenStreetMapAL",contacts:[{name:"Jonathan Beliën",email:"dev@jbelien.be"},{name:"Amanti Lulo",email:"amanti.lulo@gmail.com"}]},"at-forum":{id:"at-forum",featureId:"austria",type:"forum",name:"OpenStreetMap Austria Forum",countryCodes:["at"],languageCodes:["en","de"],description:"The official forum for OpenStreetMap questions in and around Austria",url:"https://forum.openstreetmap.org/viewforum.php?id=89",contacts:[{name:"emga",email:"emgaosm@gmail.com"}]},"at-mailinglist":{id:"at-mailinglist",featureId:"austria",type:"mailinglist",name:"Talk-at Mailing List",countryCodes:["at"],languageCodes:["de"],description:"Talk-at is the official mailing list for the Austrian OSM community",url:"https://lists.openstreetmap.org/listinfo/talk-at",contacts:[{name:"AT community",email:"info@openstreetmap.at"}]},"at-twitter":{id:"at-twitter",featureId:"austria",type:"twitter",name:"OpenStreetMap Austria Twitter",countryCodes:["at"],languageCodes:["de"],description:"OpenStreetMap Austria On Twitter: {url}",url:"https://twitter.com/osm_at",contacts:[{name:"AT Community",email:"info@openstreetmap.at"}]},"osmgraz-meetup":{id:"osmgraz-meetup",featureId:"graz",type:"meetup",countryCodes:["at"],languageCodes:["de","en"],name:"OSM community meetup Graz",description:"Monthly meetup of the OpenStreetMap community in Graz",url:"https://wiki.openstreetmap.org/wiki/Graz/Stammtisch",contacts:[{name:"Michael Maier",email:"michael.maier@secure.mailbox.org"}]},"osmgraz-twitter":{id:"osmgraz-twitter",featureId:"graz",type:"twitter",countryCodes:["at"],languageCodes:["de","en"],name:"OSM community Graz on twitter",description:"OpenStreetMap community in Graz on twitter",url:"https://twitter.com/osmgraz",contacts:[{name:"Michael Maier",email:"michael.maier@secure.mailbox.org"}]},"osm-at":{id:"osm-at",featureId:"austria",type:"group",countryCodes:["at"],languageCodes:["de"],name:"OpenStreetMap Austria",description:"The platform for information on OpenStreetMap in Austria",url:"https://www.openstreetmap.at/",contacts:[{name:"AT community",email:"info@openstreetmap.at"}]},byosm:{id:"byosm",type:"telegram",featureId:"belarus",languageCodes:["ru","be","en"],name:"OpenStreetMap Belarus",description:"OpenStreetMap Belarus telegram chat",url:"https://t.me/byosm",contacts:[{name:"Darafei Praliaskouski",email:"me@komzpa.net"}]},"be-facebook":{id:"be-facebook",featureId:"belgium",type:"facebook",name:"OpenStreetMap BE Community",countryCodes:["be"],languageCodes:["en","nl","fr","de"],description:"Mappers and OpenStreetMap on Facebook in Belgium",url:"https://www.facebook.com/groups/1419016881706058/",contacts:[{name:"BE community",email:"community@osm.be"}]},"be-forum":{id:"be-forum",type:"forum",featureId:"belgium",countryCodes:["be"],languageCodes:["en","nl","fr","de"],name:"OpenStreetMap BE forum",description:"OpenStreetMap Belgium web forum",url:"https://forum.openstreetmap.org/viewforum.php?id=29",contacts:[{name:"BE community",email:"community@osm.be"}]},"be-irc":{id:"be-irc",featureId:"belgium",type:"irc",name:"OpenStreetMap Belgium IRC",countryCodes:["be"],languageCodes:["en","nl","fr","de"],description:"Join #osmbe on irc.oftc.net (port 6667)",extendedDescription:"Join #osmbe on irc.oftc.net (port 6667), it is bridged with the Matrix chat channel",url:"https://webchat.oftc.net/?channels=osmbe",contacts:[{name:"BE community",email:"community@osm.be"}]},"be-mailinglist":{id:"be-mailinglist",featureId:"belgium",type:"mailinglist",name:"Talk-be Mailing List",countryCodes:["be"],languageCodes:["en","nl","fr","de"],description:"Talk-be is the official mailing list for the Belgian OSM community",url:"https://lists.openstreetmap.org/listinfo/talk-be",contacts:[{name:"BE community",email:"community@osm.be"}]},"be-matrix":{id:"be-matrix",featureId:"belgium",type:"matrix",countryCodes:["be"],languageCodes:["en","nl","fr","de"],name:"OpenStreetMap BE Matrix channel",description:"All mappers are welcome!",extendedDescription:"Most talk is happening at the \"OpenStreetMap Belgium\" channel. You can ask anything there! The other rooms are for specific subjects.",url:"https://riot.im/app/#/group/+osmbe:matrix.org",contacts:[{name:"BE community",email:"community@osm.be"}]},"be-meetup":{id:"be-meetup",featureId:"belgium",type:"meetup",countryCodes:["be"],languageCodes:["en","nl","fr","de"],name:"OpenStreetMap Belgium Meetup",description:"Real life meetups of everyone who is interested in OpenStreetMap",extendedDescription:"Physical meetups are great to meet other mappers, ask them questions and to learn a lot. Especially new contributors are very welcome!",url:"https://meetup.com/OpenStreetMap-Belgium/",contacts:[{name:"BE community",email:"community@osm.be"}]},"be-twitter":{id:"be-twitter",featureId:"belgium",type:"twitter",name:"OpenStreetMap Belgium Twitter",countryCodes:["be"],languageCodes:["en","nl","fr","de"],description:"OSM Belgium on Twitter: @osm_be",url:"https://twitter.com/osm_be",contacts:[{name:"BE community",email:"community@osm.be"}]},"hr-facebook":{id:"hr-facebook",featureId:"croatia",type:"facebook",name:"OpenStreetMap Croatia Facebook group",countryCodes:["hr"],languageCodes:["hr"],description:"OpenStreetMap Croatia Facebook group",url:"https://www.facebook.com/groups/541098862671461",contacts:[{name:"OpenStreetMap Croatia",email:"info@osm-hr.org"}]},"hr-irc":{id:"hr-irc",featureId:"croatia",type:"irc",name:"OpenStreetMap Croatia on IRC",countryCodes:["hr"],languageCodes:["hr"],description:"Join #osm-hr on irc.freenode.org (port 6667)",url:"https://webchat.freenode.net/?url=irc://irc.freenode.net/osm-hr",contacts:[{name:"OpenStreetMap Croatia",email:"info@osm-hr.org"}]},"hr-mailinglist":{id:"hr-mailinglist",featureId:"croatia",type:"mailinglist",name:"Talk-hr Mailing List",countryCodes:["hr"],languageCodes:["hr"],description:"Talk-hr mailing list",url:"https://lists.openstreetmap.org/listinfo/talk-hr",contacts:[{name:"OpenStreetMap Croatia",email:"info@osm-hr.org"}]},"czech-community":{id:"czech-community",featureId:"czechia",type:"group",name:"Czech OSM community",countryCodes:["cz"],languageCodes:["cs","sk","en"],description:"Map portal, website and contacts on OSM members in Czechia",url:"https://openstreetmap.cz/komunita",contacts:[{name:"osmcz",email:"dev@openstreetmap.cz"}]},"osmcz-facebook":{id:"osmcz-facebook",featureId:"czechia",type:"facebook",name:"OpenStreetMap CZ on Facebook",countryCodes:["cz"],languageCodes:["cs","sk","en"],description:"Follow czech community on Facebook - including translated WeeklyOSM!",url:"https://www.facebook.com/osmcz",contacts:[{name:"osmcz",email:"dev@openstreetmap.cz"}]},"osmcz-twitter":{id:"osmcz-twitter",featureId:"czechia",type:"twitter",name:"Czech twitter @osmcz",countryCodes:["cz"],languageCodes:["cs","sk","en"],description:"Follow czech community on Twitter - including translated WeeklyOSM!",url:"https://twitter.com/osmcz",contacts:[{name:"osmcz",email:"dev@openstreetmap.cz"}]},"talk-cz-mailinglist":{id:"talk-cz-mailinglist",featureId:"czechia",type:"mailinglist",name:"Czech mailing list (talk-cz)",countryCodes:["cz"],languageCodes:["cs","sk","en"],description:"Talk-cz is the official mailing list for Czech community",url:"https://openstreetmap.cz/talkcz",contacts:[{name:"osmcz",email:"dev@openstreetmap.cz"}]},"dk-forum":{id:"dk-forum",type:"forum",featureId:"denmark",countryCodes:["dk"],languageCodes:["da"],name:"OpenStreetMap Denmark Web Forum",description:"OpenStreetMap Denmark web forum",url:"https://forum.openstreetmap.org/viewforum.php?id=48",contacts:[{name:"Talk-dk-owner",email:"talk-dk-owner@openstreetmap.org"}]},"dk-irc":{id:"dk-irc",featureId:"denmark",type:"irc",name:"OpenStreetMap Denmark IRC",countryCodes:["dk"],languageCodes:["da"],description:"Join #osm-dk on irc.oftc.net (port 6667)",url:"https://webchat.oftc.net/?channels=osm-dk",contacts:[{name:"Talk-dk-owner",email:"talk-dk-owner@openstreetmap.org"}]},"dk-mailinglist":{id:"dk-mailinglist",featureId:"denmark",type:"mailinglist",name:"Talk-dk Mailing List",countryCodes:["dk"],languageCodes:["da"],description:"A mailing list to discuss OpenStreetMap in Denmark",url:"https://lists.openstreetmap.org/listinfo/talk-dk",contacts:[{name:"Talk-dk-owner",email:"talk-dk-owner@openstreetmap.org"}]},"ym-Queen-Mary-University-of-London":{type:"youthmappers",name:"Queen Mary YouthMappers",description:"YouthMappers chapter at Queen Mary University of London",id:"ym-Queen-Mary-University-of-London",featureId:"Queen-Mary-University-of-London",contacts:[{name:"Organizer",email:"youthmappers@qmul.ac.uk"}],extendedDescription:"This chapter will be part of the activities of the Queen Mary Geography Society.",countryCodes:["uk"],url:"https://www.facebook.com/groups/qmulgeographysociety/"},"fi-forum":{id:"fi-forum",featureId:"finland",type:"forum",countryCodes:["fi"],languageCodes:["fi"],name:"OpenStreetMap FI forum",description:"OpenStreetMap Finland web forum",url:"https://forum.openstreetmap.org/viewforum.php?id=15",contacts:[{name:"Talk-fi administrator",email:"talk-fi-owner@openstreetmap.org"}]},"fi-irc":{id:"fi-irc",featureId:"finland",type:"irc",name:"OpenStreetMap Finland IRC",countryCodes:["fi"],languageCodes:["fi"],description:"Join #osm-fi on irc.oftc.net (port 6667)",url:"https://webchat.oftc.net/?channels=osm-fi",contacts:[{name:"Talk-fi administrator",email:"talk-fi-owner@openstreetmap.org"}]},"fi-mailinglist":{id:"fi-mailinglist",featureId:"finland",type:"mailinglist",name:"Talk-fi Mailing List",countryCodes:["fi"],languageCodes:["fi"],description:"Talk-fi is the official mailing list for the Finnish OSM community",url:"https://lists.openstreetmap.org/listinfo/talk-fi",contacts:[{name:"Talk-fi administrator",email:"talk-fi-owner@openstreetmap.org"}]},"fr-facebook":{id:"fr-facebook",featureId:"france",type:"facebook",name:"OpenStreetMap France Facebook page",countryCodes:["fr"],languageCodes:["fr"],description:"OpenStreetMap France Facebook page",url:"https://www.facebook.com/osmfr",contacts:[{name:"OpenStreetMap France",email:"contact@openstreetmap.fr"}]},"fr-forum":{id:"fr-forum",type:"forum",featureId:"france",countryCodes:["fr"],languageCodes:["fr"],name:"OpenStreetMap France web forum",description:"OpenStreetMap France web forum",url:"https://forum.openstreetmap.fr/",contacts:[{name:"OpenStreetMap France",email:"contact@openstreetmap.fr"}]},"fr-irc":{id:"fr-irc",featureId:"france",type:"irc",name:"OpenStreetMap France on IRC",countryCodes:["fr"],languageCodes:["fr"],description:"Join #osm-fr on irc.oftc.net (port 6667)",url:"https://webchat.oftc.net/?channels=osm-fr",contacts:[{name:"OpenStreetMap France",email:"contact@openstreetmap.fr"}]},"fr-mailinglist":{id:"fr-mailinglist",featureId:"france",type:"mailinglist",name:"Talk-fr Mailing List",countryCodes:["fr"],languageCodes:["fr"],description:"Talk-fr mailing list",url:"https://lists.openstreetmap.org/listinfo/talk-fr",contacts:[{name:"OpenStreetMap France",email:"contact@openstreetmap.fr"}]},"fr-twitter":{id:"fr-twitter",featureId:"france",type:"twitter",name:"OpenStreetMap France on Twitter",countryCodes:["fr"],languageCodes:["fr"],description:"OpenStreetMap France on Twitter: {url}",url:"https://twitter.com/osm_fr",contacts:[{name:"OpenStreetMap France",email:"contact@openstreetmap.fr"}]},"de-berlin-mailinglist":{id:"de-berlin-mailinglist",featureId:"de-berlin-brandenburg",type:"mailinglist",name:"Berlin Mailing List",countryCodes:["de"],languageCodes:["de"],description:"This is the mailing list for the Berlin OSM community",url:"https://lists.openstreetmap.de/listinfo/berlin",contacts:[{name:"FOSSGIS e.V.",email:"info@fossgis.de"}]},"de-berlin-meetup":{id:"de-berlin-meetup",featureId:"de-berlin-brandenburg",type:"meetup",name:"OpenStreetMap Berlin-Brandenburg Meetup",countryCodes:["de"],languageCodes:["de"],description:"Mappers and OpenStreetMap users in the Berlin area",url:"https://www.meetup.com/OSM-Berlin-Brandenburg/",contacts:[{name:"Christopher Lorenz",email:"osm@lorenz.lu"}]},"de-berlin-telegram":{id:"de-berlin-telegram",featureId:"de-berlin-brandenburg",type:"telegram",name:"@osmberlin on Telegram",countryCodes:["de"],languageCodes:["de"],description:"OpenStreetMap Berlin Telegram chat",url:"https://t.me/osmberlin",contacts:[{name:"Christopher Lorenz",email:"osm@lorenz.lu"}]},"de-berlin-twitter":{id:"de-berlin-twitter",featureId:"de-berlin-brandenburg",type:"twitter",name:"OpenStreetMap Berlin Twitter",countryCodes:["de"],languageCodes:["de"],description:"Follow us on Twitter: {url}",url:"https://twitter.com/osmberlin",contacts:[{name:"Christopher Lorenz",email:"osm@lorenz.lu"}]},"de-forum":{id:"de-forum",featureId:"germany",type:"forum",countryCodes:["de"],languageCodes:["de"],name:"OpenStreetMap DE forum",description:"OpenStreetMap Germany web forum",url:"https://forum.openstreetmap.org/viewforum.php?id=14",contacts:[{name:"FOSSGIS e.V.",email:"info@fossgis.de"}]},"de-irc":{id:"de-irc",featureId:"germany",type:"irc",name:"OpenStreetMap Germany IRC",countryCodes:["de"],languageCodes:["de"],description:"Join #osm-de on irc.oftc.net (port 6667)",url:"https://webchat.oftc.net/?channels=osm-de",contacts:[{name:"FOSSGIS e.V.",email:"info@fossgis.de"}]},"de-mailinglist":{id:"de-mailinglist",featureId:"germany",type:"mailinglist",name:"Talk-de Mailing List",countryCodes:["de"],languageCodes:["de"],description:"Talk-de is the official mailing list for the German OSM community",url:"https://lists.openstreetmap.org/listinfo/talk-de",contacts:[{name:"FOSSGIS e.V.",email:"info@fossgis.de"}]},"de-ostwestfalen-lippe-mailinglist":{id:"de-ostwestfalen-lippe-mailinglist",featureId:"de-ostwestfalen-lippe",type:"mailinglist",name:"OWL Mailing List",countryCodes:["de"],languageCodes:["de"],description:"This is the mailing list for the Ostwestfalen-Lippe OSM community",url:"https://gt.owl.de/mailman/listinfo/osm",contacts:[{name:"Florian Lohoff",email:"osm-owner@gt.owl.de"}]},"de-telegram":{id:"de-telegram",featureId:"germany",type:"telegram",name:"OpenStreetMap Germany Telegram",countryCodes:["de"],languageCodes:["de"],description:"Join the OpenStreetMap Germany Telegram supergroup at {url}",url:"https://t.me/OSM_de",contacts:[{name:"Max N",email:"abonnements@revolwear.com"}]},"osm-de":{id:"osm-de",featureId:"germany",type:"group",countryCodes:["de"],languageCodes:["de"],name:"OpenStreetMap Germany",description:"The platform for information on OpenStreetMap in Germany",url:"https://www.openstreetmap.de/",contacts:[{name:"FOSSGIS e.V.",email:"info@fossgis.de"}]},"ym-Heidelberg-University":{type:"youthmappers",name:"disastermappers heidelberg",description:"YouthMappers chapter at Heidelberg University",id:"ym-Heidelberg-University",featureId:"Heidelberg-University",contacts:[{name:"Organizer",email:"disastermappers@posteo.de"}],extendedDescription:"Disastermappers Heidelberg was founded in 2014 as a student initiative to build a platform for exchange between students, researchers and humanitarian actors. Disastermappers are a member of Missing Maps and are organizing mapathons, workshops and webinars in Heidelberg and beyond and support HOT and Missing Maps through research and applications.",countryCodes:["de"],url:"https://disastermappers.wordpress.com/"},"hu-facebook":{id:"hu-facebook",featureId:"hungary",type:"facebook",name:"OpenStreetMap HU on Facebook",countryCodes:["hu"],languageCodes:["hu"],description:"Mappers and OpenStreetMap Facebook in Hungary",url:"https://www.facebook.com/groups/osm.hu/",contacts:[{name:"Ferenc Veres",email:"info@openstreetmap.hu"}]},"hu-forum":{id:"hu-forum",featureId:"hungary",type:"forum",countryCodes:["hu"],languageCodes:["hu"],name:"OpenStreetMap HU forum",description:"OpenStreetMap Hungary web forum",url:"https://groups.google.com/forum/#!forum/openstreetmap-hungary",contacts:[{name:"Ferenc Veres",email:"info@openstreetmap.hu"}]},"hu-meetup":{id:"hu-meetup",featureId:"hungary",type:"meetup",countryCodes:["hu"],languageCodes:["hu"],name:"OpenStreetMap Hungary Meetup",description:"The platform for organizing meetups in Hungary",url:"https://www.meetup.com/OpenStreetMap-Hungary",contacts:[{name:"Ferenc Veres",email:"info@openstreetmap.hu"}]},"is-facebook":{id:"is-facebook",type:"facebook",featureId:"iceland",countryCodes:["is"],languageCodes:["is","en"],name:"OSM Iceland on Facebook",description:"Page of OpenStreetMap in Iceland",url:"https://www.facebook.com/osmiceland/",contacts:[{name:"Talk-is-owner",email:"talk-is-owner@openstreetmap.org"}]},"is-mailinglist":{id:"is-mailinglist",type:"mailinglist",featureId:"iceland",countryCodes:["is"],languageCodes:["is","en"],name:"Talk-is Mailing List",description:"Talk-is is the official mailing list for the Icelandic OSM community",url:"https://lists.openstreetmap.org/listinfo/talk-is",contacts:[{name:"Talk-is-owner",email:"talk-is-owner@openstreetmap.org"}]},"is-twitter":{id:"is-twitter",type:"twitter",featureId:"iceland",countryCodes:["is"],languageCodes:["is","en"],name:"OSM Iceland on Twitter",description:"Twitter of OpenStreetMap in Iceland",url:"https://twitter.com/openstreetmapis",contacts:[{name:"Talk-is-owner",email:"talk-is-owner@openstreetmap.org"}]},"it-facebook":{id:"it-facebook",featureId:"italy",type:"facebook",name:"OpenStreetMap Italy Facebook",countryCodes:["it"],languageCodes:["it"],description:"Join the OpenStreetMap Italy community on Facebook",url:"https://www.facebook.com/OpenStreetMap.Italia/",contacts:[{name:"Simone Cortesi",email:"simone@cortesi.com"},{name:"Stefano",email:"sabas88@gmail.com"},{name:"Alessandro Palmas",email:"alessandro.palmas@wikimedia.it"}]},"it-irc":{id:"it-irc",featureId:"italy",type:"irc",name:"OpenStreetMap Italy IRC",countryCodes:["it"],languageCodes:["it"],description:"Join #osm-it on irc.oftc.net (port 6667)",url:"https://webchat.oftc.net/?channels=osm-it",contacts:[{name:"Simone Cortesi",email:"simone@cortesi.com"},{name:"Stefano",email:"sabas88@gmail.com"},{name:"Alessandro Palmas",email:"alessandro.palmas@wikimedia.it"}]},"it-mailinglist":{id:"it-mailinglist",featureId:"italy",type:"mailinglist",name:"Talk-it Mailing List",countryCodes:["it"],languageCodes:["it"],description:"Talk-it is the official mailing list for the Italian OSM community",url:"https://lists.openstreetmap.org/listinfo/talk-it",contacts:[{name:"Simone Cortesi",email:"simone@cortesi.com"},{name:"Stefano",email:"sabas88@gmail.com"},{name:"Alessandro Palmas",email:"alessandro.palmas@wikimedia.it"}]},"it-telegram":{id:"it-telegram",type:"telegram",featureId:"italy",countryCodes:["it"],languageCodes:["it"],name:"@OpenStreetMapItalia on Telegram",description:"OpenStreetMap Italy Telegram chat",url:"https://t.me/OpenStreetMapItalia",contacts:[{name:"Simone Cortesi",email:"simone@cortesi.com"},{name:"Stefano",email:"sabas88@gmail.com"},{name:"Alessandro Palmas",email:"alessandro.palmas@wikimedia.it"}]},"it-twitter":{id:"it-twitter",featureId:"italy",type:"twitter",name:"OpenStreetMap Italy Twitter",countryCodes:["it"],languageCodes:["it"],description:"Follow us on Twitter at {url}",url:"https://twitter.com/OpenStreetMapIt",contacts:[{name:"Simone Cortesi",email:"simone@cortesi.com"},{name:"Stefano",email:"sabas88@gmail.com"},{name:"Alessandro Palmas",email:"alessandro.palmas@wikimedia.it"}]},"OSM-Rome-meetup":{id:"OSM-Rome-meetup",featureId:"IT_Roma_Capitale",type:"group",name:"Incontro Mappatori Romani",countryCodes:["it"],languageCodes:["it"],description:"Improve OpenStreetMap in the Rome area",extendedDescription:"We aim to be a resource for people to discuss and share knowledge on utilizing free geographic data sets especially OpenStreetMap, and Open geo-spatial software that manages, edits, and displays geographic data, and advocate for its use in Lazio.",url:"https://wiki.openstreetmap.org/wiki/Rome/Incontro",contacts:[{name:"Martin Koppenhoefer",email:"dieterdreist@gmail.com"}]},"South-Tyrol-Mailing-List":{id:"South-Tyrol-Mailing-List",featureId:"south_tyrol",type:"mailinglist",countryCodes:["it"],languageCodes:["de","it","lld","en"],name:"OpenStreetMap mailing list for South Tyrol",description:"OpenStreetMap Italy regional talk list for South Tyrol",url:"https://lists.openstreetmap.org/listinfo/talk-it-southtyrol",contacts:[{name:"Martin Raifer",email:"tyr.asd@gmail.com"}]},"talk-it-lazio":{id:"talk-it-lazio",featureId:"IT_Lazio",type:"mailinglist",countryCodes:["it"],languageCodes:["it"],name:"OpenStreetMap IT Lazio",description:"All are welcome! Sign up at {signupUrl}",extendedDescription:"Mailinglist for Rome and Lazio area.",signupUrl:"https://lists.openstreetmap.org/listinfo/talk-it-lazio",url:"https://lists.openstreetmap.org/listinfo/talk-it-lazio",contacts:[{name:"Martin Koppenhoefer",email:"dieterdreist@gmail.com"}]},"Trentino-Mailing-List":{id:"Trentino-Mailing-List",featureId:"trentino",type:"mailinglist",countryCodes:["it"],languageCodes:["it"],name:"OpenStreetMap mailing list for Trentino",description:"OpenStreetMap Italy regional talk list for Trentino",url:"https://lists.openstreetmap.org/listinfo/talk-it-trentino",contacts:[{name:"Luca Delucchi",email:"lucadeluge@gmail.com"}]},"ym-Politecnico-di-Milano":{type:"youthmappers",name:"PoliMappers",description:"YouthMappers chapter at Politecnico di Milano",id:"ym-Politecnico-di-Milano",featureId:"Politecnico-di-Milano",contacts:[{name:"Organizer",email:"polimappers@gmail.com"}],extendedDescription:"PoliMappers is a volunteer students’ association based at Politecnico di Milano. The mission of the group is to train and motivate the next generation of volunteer mappers and to do mapping using free and open source software within the university as well as primary and secondary schools.",countryCodes:["it"],url:"https://polimappers.github.io/"},"ym-Yarmouk-University":{type:"youthmappers",name:"YouthMappers at YU",description:"YouthMappers chapter at Yarmouk University",id:"ym-Yarmouk-University",featureId:"Yarmouk-University",contacts:[{name:"Organizer",email:"rnjawarneh@yu.edu.jo"}],extendedDescription:"YouthMappers chapter at YU is the first mapping group in the Middle East and North Africa region where refugees, drought, and poverty are rising crises and in urgent need for humanitarian mapping activities to mitigate the consequences of such crises. YU Mappers are encouraged to use open data to address challenges in MENA region to bring relief and development to target areas within the region.",countryCodes:["jo"],url:"mailto:rnjawarneh@yu.edu.jo"},"kosovo-telegram":{id:"kosovo-telegram",type:"telegram",featureId:"kosovo",countryCodes:["xk"],languageCodes:["sq","sr","en"],name:"OpenStreetMap Kosovo on Telegram",description:"Semi-official all-Kosovo Telegram public group. We welcome all mappers from anywhere in any language.",url:"https://t.me/osmkosovo",contacts:[{name:"Guillaume Rischard",email:"guillaumenospam@openstreetmapnospam.lu"}]},"ym-Universit-Mohammed-V-Rabat":{type:"youthmappers",name:"Brahmapoutre at Rabat",description:"YouthMappers chapter at Université Mohammed V Rabat",id:"ym-Universit-Mohammed-V-Rabat",featureId:"Universit-Mohammed-V-Rabat",contacts:[{name:"Organizer",email:"khmichasma@gmail.com"}],extendedDescription:"This chapter sees participation in the YouthMappers program as an oppourtunity to share our knowlege create new working relationships with other chapters in different countries",countryCodes:["ma"],url:"mailto:khmichasma@gmail.com"},"no-forum":{id:"no-forum",type:"forum",featureId:"norway",countryCodes:["no"],languageCodes:["no"],name:"OpenStreetMap Norway Web Forum",description:"OpenStreetMap Norway web forum",url:"https://forum.openstreetmap.org/viewforum.php?id=68",contacts:[{name:"OpenStreetMap Norway",email:"kart@nuug.no"}]},"no-irc":{id:"no-irc",featureId:"norway",type:"irc",name:"OpenStreetMap Norway on IRC",countryCodes:["no"],languageCodes:["no"],description:"Chat room for mappers and OpenStreetMap users, developers and enthusiasts in Norway",contacts:[{name:"OpenStreetMap Norway",email:"kart@nuug.no"}],url:"https://webchat.oftc.net/?channels=osm-no"},"no-mailinglist":{id:"no-mailinglist",featureId:"norway",type:"mailinglist",name:"OpenStreetMap Norway mailing list",countryCodes:["no"],languageCodes:["no"],description:"Mailing list for mappers and OpenStreetMap users, developers and enthusiasts in Norway",contacts:[{name:"OpenStreetMap Norway",email:"kart@nuug.no"}],url:"https://lists.nuug.no/mailman/listinfo/kart"},"no-telegram":{id:"no-telegram",type:"telegram",featureId:"norway",countryCodes:["no"],languageCodes:["no"],name:"@OSM_no on Telegram",description:"OpenStreetMap Norway Telegram chat",url:"https://t.me/OSM_no",contacts:[{name:"Syver Stensholt",email:"sssandum@gmail.com"}]},"OSM-PL-facebook-group":{id:"OSM-PL-facebook-group",type:"facebook",featureId:"poland",countryCodes:["pl"],languageCodes:["pl"],name:"OpenStreetMap Poland Facebook group",description:"Group for mappers and users of OpenStreetMap in Poland",url:"https://www.facebook.com/groups/500589303317858/",contacts:[{name:"Michał Brzozowski",email:"www.haxor@gmail.com"}]},"OSM-PL-forum":{id:"OSM-PL-forum",type:"forum",featureId:"poland",countryCodes:["pl"],languageCodes:["pl","en"],name:"OpenStreetMap Poland Forum",description:"Forum of Polish OpenStreetMap community",url:"https://forum.openstreetmap.org/viewforum.php?id=23",contacts:[{name:"Daniel Koć",email:"daniel@xn--ko-wla.pl"},{name:"Ryszard Mikke",email:"ryszard.mikke@gmail.com"}]},"si-forum":{id:"si-forum",type:"forum",featureId:"slovenia",countryCodes:["si"],languageCodes:["sl","en"],name:"OpenStreetMap Slovenia Forum",description:"Forum of OpenStreetMap community in Slovenia",url:"https://forum.openstreetmap.org/viewforum.php?id=58",contacts:[{name:"OpenStreetMap Slovenia",email:"talk-si@openstreetmap.org"}]},"si-mailinglist":{id:"si-mailinglist",type:"mailinglist",featureId:"slovenia",countryCodes:["si"],languageCodes:["sl","en"],name:"OpenStreetMap Slovenia mailing list",description:"Mailing list of OpenStreetMap community in Slovenia",url:"https://lists.openstreetmap.org/listinfo/talk-si",contacts:[{name:"OpenStreetMap Slovenia",email:"talk-si@openstreetmap.org"}]},"si-twitter":{id:"si-twitter",featureId:"slovenia",type:"twitter",name:"OpenStreetMap Slovenia Twitter",countryCodes:["si"],languageCodes:["sl","en"],description:"Follow OpenStreetMap Slovenia On Twitter: {url}",url:"https://twitter.com/OpenStreetMapSi",contacts:[{name:"OpenStreetMap Slovenia",email:"talk-si@openstreetmap.org"}]},"OSM-ES-mailinglist":{id:"OSM-ES-mailinglist",type:"mailinglist",featureId:"spain",languageCodes:["es"],name:"Talk-es mailing list",description:"A mailing list to discuss OpenStreetMap in Spain",url:"https://lists.openstreetmap.org/listinfo/talk-es",contacts:[{name:"Iván Sánchez",email:"ivansanchez@escomposlinux.org"}]},"OSM-ES-telegram":{id:"OSM-ES-telegram",type:"telegram",featureId:"spain",languageCodes:["es"],name:"@OSMes on Telegram",description:"OpenStreetMap Spain Telegram chat",url:"https://t.me/OSMes",contacts:[{name:"Jorge Sanz",email:"sanchi2@gmail.com"}]},"ym-Universidad-Autonoma-de-Madrid":{type:"youthmappers",name:"YouthMappers at UAM",description:"YouthMappers chapter at Universidad Autonoma de Madrid",id:"ym-Universidad-Autonoma-de-Madrid",featureId:"Universidad-Autonoma-de-Madrid",contacts:[{name:"Organizer",email:"youthmappersatuam@gmail.com"}],countryCodes:["es"],url:"mailto:youthmappersatuam@gmail.com"},"ym-Universidad-Politcnica-de-Madrid":{type:"youthmappers",name:"Mapeo Humanitario",description:"YouthMappers chapter at Universidad Politécnica de Madrid",id:"ym-Universidad-Politcnica-de-Madrid",featureId:"Universidad-Politcnica-de-Madrid",contacts:[{name:"Organizer",email:"lab.topografia@gmail.com"}],extendedDescription:"Geo-volunteering group formed at Moncloa Campus on November 2017. Around 20 members from three Universities (Complutense, CEU and UPM). Undergraduate students, MSc and PhD students collaborate together with organizations (MSF, Acción contra el Hambre,...) supported by trainers from Geoinquietos. Official recognition by UPM as Educative Innovation Project (Code IE1718.0411)",countryCodes:["es"],url:"https://blogs.upm.es/mapeo-humanitario/"},"osm-se":{id:"osm-se",featureId:"sweden",type:"group",countryCodes:["se"],languageCodes:["sv"],name:"OpenStreetMap.se",description:"Provide OSM services and information for the local community in Sweden",url:"http://openstreetmap.se/",contacts:[{name:"Talk-se-owner",email:"talk-se-owner@openstreetmap.org"}]},"se-facebook":{id:"se-facebook",featureId:"sweden",type:"facebook",name:"OpenStreetMap Sweden Facebook",countryCodes:["se"],languageCodes:["sv"],description:"OpenStreetMap Sweden on Facebook",url:"https://www.facebook.com/groups/osmsweden/",contacts:[{name:"Talk-se-owner",email:"talk-se-owner@openstreetmap.org"}]},"se-forum":{id:"se-forum",type:"forum",featureId:"sweden",countryCodes:["se"],languageCodes:["sv"],name:"OpenStreetMap Sweden Web Forum",description:"OpenStreetMap Sweden web forum",url:"https://forum.openstreetmap.org/viewforum.php?id=4",contacts:[{name:"Talk-se-owner",email:"talk-se-owner@openstreetmap.org"}]},"se-irc":{id:"se-irc",featureId:"sweden",type:"irc",name:"OpenStreetMap Sweden IRC",countryCodes:["se"],languageCodes:["sv"],description:"Join #osm.se on irc.oftc.net (port 6667)",url:"https://webchat.oftc.net/?channels=osm.se",contacts:[{name:"Talk-se-owner",email:"talk-se-owner@openstreetmap.org"}]},"se-mailinglist":{id:"se-mailinglist",featureId:"sweden",type:"mailinglist",name:"Talk-se Mailing List",countryCodes:["se"],languageCodes:["sv"],description:"A mailing list to discuss OpenStreetMap in Sweden",url:"https://lists.openstreetmap.org/listinfo/talk-se",contacts:[{name:"Talk-se-owner",email:"talk-se-owner@openstreetmap.org"}]},"se-twitter":{id:"se-twitter",featureId:"sweden",type:"twitter",name:"OpenStreetMap Sweden on Twitter",countryCodes:["se"],languageCodes:["sv"],description:"Follow us on Twitter: {url}",url:"https://twitter.com/openstreetmapse",contacts:[{name:"Talk-se-owner",email:"talk-se-owner@openstreetmap.org"}]},"ym-Istanbul-Technical-University":{type:"youthmappers",name:"YouthMappers ITU",description:"YouthMappers chapter at Istanbul Technical University",id:"ym-Istanbul-Technical-University",featureId:"Istanbul-Technical-University",contacts:[{name:"Organizer",email:"youthmappersitu@gmail.com"}],extendedDescription:"YouthMappers ITU is an interdisciplinary and collaborative student community to promote humanitarian mapping for vulnerable settlements and aims to develop and share strategic and innovative spatial information for the future cities by using geographical information systems and open data.",countryCodes:["tr"],url:"https://www.facebook.com/YouthMappers-ITU-226489641442744/?modal=admin_todo_tour"},"Nottingham-OSM-pub-meetup":{id:"Nottingham-OSM-pub-meetup",featureId:"east_midlands_uk",type:"group",name:"East Midlands (Nottingham) Monthly pub meet-up",countryCodes:["gb"],languageCodes:["en"],description:"Social gathering for East Midlands mappers and users",extendedDescription:"A group have been meeting since March 2011, initially in Nottingham, and, more recently in Derby, and from time to time elsewhere in the East Midlands. These are social gatherings, but are an excellent place to come and ask specific questions about OSM either in the area or in general. In the summer months we usually do some light mapping for an hour in the vicinity of our meeting place. The group as a whole has a special interest in mapping public rights of way and from time to time has mapping meetings for this purpose.",url:"https://wiki.openstreetmap.org/wiki/Nottingham/Pub-meetup",contacts:[{name:"Jerry Clough",email:"SK53.osm@gmail.com"}]},"gb-mailinglist":{id:"gb-mailinglist",featureId:"united_kingdom",type:"mailinglist",name:"Talk-gb Mailing List",countryCodes:["gb"],languageCodes:["en","cy"],description:"Talk-gb is the main communication forum list for the British (including Northern Ireland) OSM community",url:"https://lists.openstreetmap.org/listinfo/talk-gb",contacts:[{name:"UK mailing list",email:"talk-gb-owner@lists.openstreetmap.org"}]},"mappa-mercia-group":{id:"mappa-mercia-group",featureId:"england-west-midlands",type:"group",countryCodes:["gb"],languageCodes:["en"],name:"Mappa Mercia local group",description:"A home for OpenStreetMap enthusiasts in the Midlands",extendedDescription:"Mappa Mercia is a project to grow OpenStreetMap in the West Midlands, UK. We run community events, provide training and support local organisations wishing to open up their data.",url:"http://www.mappa-mercia.org/",contacts:[{name:"Brian Prangle",email:"community@mappa-mercia.org"}]},"gb-irc":{id:"gb-irc",featureId:"united_kingdom",type:"irc",name:"OpenStreetMap United Kingdom IRC",countryCodes:["gb"],languageCodes:["en","cy"],description:"Join #osm-gb on irc.oftc.net (port 6667)",extendedDescription:"Join #osm-gb on irc.oftc.net (port 6667), please be patient and wait for a few minutes if you ask a question",url:"https://webchat.oftc.net/?channels=osm-gb",contacts:[{name:"UK mailing list",email:"talk-gb-owner@lists.openstreetmap.org"}]},"ym-University-of-Exeter":{type:"youthmappers",name:"University of Exeter British Red Cross Missing Maps",description:"YouthMappers chapter at University of Exeter",id:"ym-University-of-Exeter",featureId:"University-of-Exeter",contacts:[{name:"Organizer",email:"uniofexemissingmaps@gmail.com"}],extendedDescription:"We are a team of enthusiastic Geographers with comprehensive knowledge of GIS. We are passionate about supporting the British Red Cross Society with various humanitarian aid efforts. We are also important teachers of the significance of mapping remotely sensed data and how this helps on the ground. Our mapathons have themed academic focuses that highlight the different GIS research in our geography department, while also functioning as employability awareness events which we use to invite speakers in to talk about their GIS/British Red Cross careers.",countryCodes:["uk"],url:"https://www.facebook.com/EUMissingMaps/"},"ym-University-of-Warwick":{type:"youthmappers",name:"University of Warwick Resilience Mapping Society",description:"YouthMappers chapter at University of Warwick",id:"ym-University-of-Warwick",featureId:"University-of-Warwick",contacts:[{name:"Organizer",email:"p.ulbrich@warwick.ac.uk"}],extendedDescription:"We are a group of enthusiastic mappers based at Warwick University. Our aim is to get people excited about humanitarian mapping and help them understand the impact this activity has on the field. We are closely aligned with Missing Maps and Doctors Without Borders UK and focus on HOT tasks in our mapping activities and workshops. Our mapathons are listed on the Missing Maps page whenever they are scheduled.",countryCodes:["uk"],url:"mailto:p.ulbrich@warwick.ac.uk"},"ym-Sacred-Heart-Junior-College":{type:"youthmappers",name:"Youth Mappers at Sacred Heart Junior College",description:"YouthMappers chapter at Sacred Heart Junior College",id:"ym-Sacred-Heart-Junior-College",featureId:"Sacred-Heart-Junior-College",contacts:[{name:"Organizer",email:"jtzib18@gmail.com"}],countryCodes:["bz"],url:"mailto:jtzib18@gmail.com"},"OSM-CA-Slack":{id:"OSM-CA-Slack",featureId:"canada_full",type:"slack",countryCodes:["ca"],languageCodes:["en","fr"],name:"OSM-CA Slack",description:"All are welcome! Sign up at {signupUrl}.",signupUrl:"https://slackinviteosmcanada.herokuapp.com/",url:"https://osm-ca.slack.com/",contacts:[{name:"Denis Carriere",email:"carriere.denis@gmail.com"}]},"OSM-Vancouver-meetup":{id:"OSM-Vancouver-meetup",featureId:"vancouver_metro",type:"meetup",name:"OpenStreetMap Vancouver",countryCodes:["ca"],languageCodes:["en"],description:"Mappers and OpenStreetMap users in the Vancouver, BC area",url:"https://www.meetup.com/OpenStreetMap-Vancouver/",contacts:[{name:"Paul Norman",email:"penorman@mac.com"},{name:"Peter Chin",email:"bpchin@gmail.com"}],events:[{name:"April Metrotown Mappy Hour",description:"Mappy Hour is the time and place for discussion of OpenStreetMap, from surveying data to consuming data. Beginners welcome. Bring your questions.",when:"2018-04-27 18:30",where:"Firefighters' Public House, 6515 Bonsor Avenue, Burnaby, BC",url:"https://www.meetup.com/OpenStreetMap-Vancouver/events/qzsbsmyxgbkc/"}]},"ym-Universidad-de-Costa-Rica":{type:"youthmappers",name:"YouthMappers de Universidad de Costa Rica",description:"YouthMappers chapter at Universidad de Costa Rica",id:"ym-Universidad-de-Costa-Rica",featureId:"Universidad-de-Costa-Rica",contacts:[{name:"Organizer",email:"youthmappersucr@gmail.com"}],extendedDescription:"YouthMappers de Universidad de Costa Rica nace en función de acción social para y por miembros de comunidades distintas según temáticas de involucramiento, interacción y representación de variables dentro de un espacio geográfico definido (un territorio) Gracias a las herramientas de OpenStreetMaps tenemos la viabilidad de poder obtener, validar y compartir la información generada para comprobación y uso destinadas a las comunidades o el interesado en tales temáticas objetivas.",countryCodes:["cr"],url:"https://www.facebook.com/ucr.asege/"},"OSM-CU-telegram":{id:"OSM-CU-telegram",type:"telegram",featureId:"cuba",countryCodes:["cu"],languageCodes:["es"],name:"OSM Cuba on Telegram",description:"OpenStreetMap Cuba Telegram chat",url:"https://telegram.me/OSM_Cuba",contacts:[{name:"Talk-cu Owner",email:"talk-cu-owner@openstreetmap.org"}]},"ym-Universidad-Nacional-Autnoma-de-Honduras":{type:"youthmappers",name:"PumaGis Hn",description:"YouthMappers chapter at Universidad Nacional Autónoma de Honduras",id:"ym-Universidad-Nacional-Autnoma-de-Honduras",featureId:"Universidad-Nacional-Autnoma-de-Honduras",contacts:[{name:"Organizer",email:"pumagishn@gmail.com"}],countryCodes:["hn"],url:"mailto:pumagishn@gmail.com"},"ym-University-of-the-West-Indies-Mona-Campus":{type:"youthmappers",name:"Libraries Outreach - ODL",description:"YouthMappers chapter at University of the West Indies, Mona Campus",id:"ym-University-of-the-West-Indies-Mona-Campus",featureId:"University-of-the-West-Indies-Mona-Campus",contacts:[{name:"Organizer",email:"benjamin.branch@uwimona.edu.jm"}],extendedDescription:"The UWI, Mona Campus Library engages in public, outreach and special projects. This will allow our library the means to be a catalyst for spatial literacy and advocate for spatial data sharing and access to Jamaican and Caribbean interests. We have disaster relief and communication needs and extensive earth science and geo-hazards needs to better serve our campus and community. Specifically, we hace a Science Library to showcase such to all faculty and students.",countryCodes:["jm"],url:"mailto:benjamin.branch@uwimona.edu.jm"},"OSM-NI-telegram":{id:"OSM-NI-telegram",type:"telegram",featureId:"nicaragua",countryCodes:["ni"],languageCodes:["es"],name:"OSM Nicaragua on Telegram",description:"OpenStreetMap Nicaragua Telegram chat",url:"https://telegram.me/MapaNica",contacts:[{name:"Talk-ni Owner",email:"talk-ni-owner@openstreetmap.org"}]},"ym-Universidad-Nacional-de-Ingenieria":{type:"youthmappers",name:"Yeka Street MGA",description:"YouthMappers chapter at Universidad Nacional de Ingenieria",id:"ym-Universidad-Nacional-de-Ingenieria",featureId:"Universidad-Nacional-de-Ingenieria",contacts:[{name:"Organizer",email:"yeka.street.mga@gmail.com"}],extendedDescription:"YEKA STREET is a work team constituted by students from Universidad Nacional de Ingenieria at Managua, Nicaragua. With the principal purpose of apply our knowledge and skills using many tools and apps to map areas in our cities and contribute to the development community projects and disasters relieve plans. We want to lead the way adding more students from all careers and universities in our country to join us at this cause, increasing in this way the life level and reducing the population vulnerability.",countryCodes:["ni"],url:"https://www.facebook.com/yekastreetmga/"},"ym-University-of-Panama":{type:"youthmappers",name:"YouthMappers UP",description:"YouthMappers chapter at University of Panama",id:"ym-University-of-Panama",featureId:"University-of-Panama",contacts:[{name:"Organizer",email:"youthmappers.up@gmail.com"}],extendedDescription:"Student mappers in Panama work with open spatial data to help identify, define, address, and create meaning about locally defined development challenges. They collaborate with students from other countries on community mapping topics from ecotourism to food security, from biodiversity to indigenous issues, promoting a humanistic vision through scientific perspectives.",countryCodes:["pa"],url:"mailto:Youthmappers.up@gmail.com"},"ym-Universidad-de-Puerto-Rico-Rio-Piedras":{type:"youthmappers",name:"UPR YouthMappers",description:"YouthMappers chapter at Universidad de Puerto Rico - Rio Piedras",id:"ym-Universidad-de-Puerto-Rico-Rio-Piedras",featureId:"Universidad-de-Puerto-Rico-Rio-Piedras",contacts:[{name:"Organizer",email:"carlosguilbe@gmail.com"}],countryCodes:["pa"],url:"mailto:carlosguilbe@gmail.com"},"Bay-Area-OpenStreetMappers":{id:"Bay-Area-OpenStreetMappers",featureId:"sf_bay_area",type:"meetup",name:"Bay Area OpenStreetMappers",countryCodes:["us"],languageCodes:["en"],description:"Improve OpenStreetMap in the Bay Area",extendedDescription:"This group is about growing the OpenStreetMap community here in the Bay Area. Our events are open to everyone, from open source enthusiasts, cyclists, GIS professionals, geocachers, and beyond. Anyone and everyone who is interested in maps, map making and free map data is welcome to join our group as well as attend our events.",url:"https://www.meetup.com/Bay-Area-OpenStreetMappers/",contacts:[{name:"Ben Discoe",email:"bdiscoe@gmail.com"}]},"Central-Pennsylvania-OSM":{id:"Central-Pennsylvania-OSM",featureId:"central_pa",type:"facebook",name:"Central Pennsylvania OSM",countryCodes:["us"],languageCodes:["en"],description:"Online mapping community based out of State College, PA",url:"https://www.facebook.com/CentralPennsylvaniaOSM",contacts:[{name:"Sterling Quinn",email:"sdq107@psu.edu"}]},"Code-for-San-Jose-Slack":{id:"Code-for-San-Jose-Slack",featureId:"south_sf_bay_area",type:"slack",countryCodes:["us"],languageCodes:["en"],name:"Code for San Jose Slack",description:"All are welcome! Sign up at {signupUrl}, then join the #osm channel.",signupUrl:"https://slackin-c4sj.herokuapp.com/",url:"https://codeforsanjose.slack.com/",contacts:[{name:"OSM Bay Area mailing list",email:"talk-us-sfbay@openstreetmap.org"}]},"Dallas-Fort-Worth-OSM":{id:"Dallas-Fort-Worth-OSM",featureId:"dfw_metro",type:"group",name:"Dallas-Fort Worth OSM",countryCodes:["us"],languageCodes:["en"],description:"The OpenStreetMap user group for Dallas-Fort Worth",extendedDescription:"Dallas, Fort Worth, and all the cities in between are abounding with creative and tech-savvy people. The vision for this usergroup is to find new ways to use the amazing resource of OSM.",url:"http://dfwosm.org/",contacts:[{name:"Andrew Matheny",email:"andrewdmatheny@gmail.com"}]},GeoPhilly:{id:"GeoPhilly",featureId:"philly_metro",type:"meetup",name:"GeoPhilly",countryCodes:["us"],languageCodes:["en"],description:"Meetup for map enthusiasts in the Philadelphia area",extendedDescription:"GeoPhilly unites developers, geographers, data geeks, open source enthusiasts, civic hackers and map addicts in our shared love of maps and the stories they tell. If you use maps as part of your work or just want to learn more, this is the meetup for you! Our events aim to be open, friendly, educational and social and range from happy hours to lightning talks or even workshops. Come create a diverse, inspiring geospatial community in the Philadelphia with us!",url:"https://www.meetup.com/GeoPhilly/",contacts:[{name:"Dan Ford",email:"dford@azavea.com"}]},MapMinnesota:{id:"MapMinnesota",featureId:"minneapolis_st_paul_metro",type:"meetup",name:"MapMinnesota",countryCodes:["us"],languageCodes:["en"],description:"Mappers and OpenStreetMap enthusiasts in the Twin Cities area",extendedDescription:"Connecting OpenStreetMap enthusiasts in Minnesota and the Twin Cities!",url:"https://www.meetup.com/Map-Minnesota/",contacts:[{name:"Ian Dees",email:"ian.dees@gmail.com"}]},"Mapping-DC-meetup":{id:"Mapping-DC-meetup",featureId:"dc_metro",type:"meetup",name:"Mapping DC",countryCodes:["us"],languageCodes:["en"],description:"Improve OpenStreetMap in the DC area",extendedDescription:"We are a group of volunteer mappers who aim to improve the OpenStreetMap in the DC area. We also aim to teach others about the OSM ecosystem, data analytics, cartography, and GIS. We gather every other month at meetups to focus on one area of our city.",url:"https://mappingdc.org/",contacts:[{name:"Brian DeRocher",email:"brian@derocher.org"}],events:[{name:"April Meetup",description:"Meets every other month on the 2nd Tuesday",when:"2018-04-10 18:00",where:"Capitol City Brewing Company, 1100 New York Ave NW, Washington, DC",url:"https://www.meetup.com/MappingDC/events/qqvnvhyxgbnb/"},{name:"June Meetup",description:"Meets every other month on the 2nd Tuesday",when:"2018-06-12 18:00",where:"Capitol City Brewing Company, 1100 New York Ave NW, Washington, DC",url:"https://www.meetup.com/MappingDC/events/qqvnvhyxjbqb/"},{name:"August Meetup",description:"Meets every other month on the 2nd Tuesday",when:"2018-08-14 18:00",where:"Capitol City Brewing Company, 1100 New York Ave NW, Washington, DC",url:"https://www.meetup.com/MappingDC/events/qqvnvhyxlbsb/"},{name:"October Meetup",description:"Meets every other month on the 2nd Tuesday",when:"2018-10-09 18:00",where:"Capitol City Brewing Company, 1100 New York Ave NW, Washington, DC",url:"https://www.meetup.com/MappingDC/events/qqvnvhyxnbmb/"}]},"Maptime-ME-meetup":{id:"Maptime-ME-meetup",featureId:"portland_me",type:"meetup",name:"MaptimeME",countryCodes:["us"],languageCodes:["en"],description:"Mappers and OpenStreetMap users, around Portland, ME",extendedDescription:"Maptime is, rather literally, time for mapmaking. Our mission is to open the doors of cartographic possibility to anyone interested by creating a time and space for collaborative learning, exploration, and map creation using mapping tools and technologies.",url:"https://www.meetup.com/MaptimeME/",contacts:[{name:"Malcolm Toon",email:"malcolm@foreflight.com"}]},"MaptimeHRVA-twitter":{id:"MaptimeHRVA-twitter",featureId:"hrva",type:"twitter",name:"MaptimeHRVA Twitter",countryCodes:["us"],languageCodes:["en"],description:"Follow us on Twitter at {url}",url:"https://twitter.com/maptimehrva",contacts:[{name:"Jonah Adkins",email:"jonahadkins@gmail.com"}]},"us-ma-mailinglist":{id:"us-ma-mailinglist",featureId:"massachusetts",type:"mailinglist",name:"Talk-us-massachusetts Mailing List",countryCodes:["us"],languageCodes:["en"],description:"Email mailing list for the Massachusetts OSM community",url:"https://lists.openstreetmap.org/listinfo/talk-us-massachusetts",contacts:[{name:"Alan Bragg",email:"alan.ruth.bragg@gmail.com"}]},"OpenCleveland-meetup":{id:"OpenCleveland-meetup",featureId:"cleveland",type:"meetup",name:"Open Cleveland",countryCodes:["us"],languageCodes:["en"],description:"Improve OpenStreetMap in the Cleveland area",extendedDescription:"Open Geo Cleveland aims to be a resource for people to discuss and share knowledge on utilizing free geographic data sets especially OpenStreetMap, and Open geo-spatial software that manages, edits, and displays geographic data, and advocate for its use in Northeast Ohio. We're also a maptime chapter =)",url:"https://www.meetup.com/open-cleveland/",contacts:[{name:"Will Skora",email:"skorasaurus@gmail.com"},{name:"Anastasia Diamond-Ortiz",email:"anastasia.diamond@gmail.com"}],events:[{name:"Wednesday Meetup / Hack Night",description:"Meets weekly - programming experience is not necessary!",when:"2018-04-18 18:00",where:"The Tech Hive, 6815 Euclid Ave, Cleveland, OH",url:"https://www.meetup.com/open-cleveland/events/lcjdnpyxgbxb/"},{name:"Wednesday Meetup / Hack Night",description:"Meets weekly - programming experience is not necessary!",when:"2018-04-25 18:00",where:"The Tech Hive, 6815 Euclid Ave, Cleveland, OH",url:"https://www.meetup.com/open-cleveland/events/lcjdnpyxgbhc/"},{name:"Wednesday Meetup / Hack Night",description:"Meets weekly - programming experience is not necessary!",when:"2018-05-02 18:00",where:"The Tech Hive, 6815 Euclid Ave, Cleveland, OH",url:"https://www.meetup.com/open-cleveland/events/lcjdnpyxhbdb/"},{name:"Wednesday Meetup / Hack Night",description:"Meets weekly - programming experience is not necessary!",when:"2018-05-09 18:00",where:"The Tech Hive, 6815 Euclid Ave, Cleveland, OH",url:"https://www.meetup.com/open-cleveland/events/lcjdnpyxhbmb/"},{name:"Wednesday Meetup / Hack Night",description:"Meets weekly - programming experience is not necessary!",when:"2018-05-16 18:00",where:"The Tech Hive, 6815 Euclid Ave, Cleveland, OH",url:"https://www.meetup.com/open-cleveland/events/lcjdnpyxhbvb/"},{name:"Wednesday Meetup / Hack Night",description:"Meets weekly - programming experience is not necessary!",when:"2018-05-23 18:00",where:"The Tech Hive, 6815 Euclid Ave, Cleveland, OH",url:"https://www.meetup.com/open-cleveland/events/lcjdnpyxhbfc/"},{name:"Wednesday Meetup / Hack Night",description:"Meets weekly - programming experience is not necessary!",when:"2018-05-30 18:00",where:"The Tech Hive, 6815 Euclid Ave, Cleveland, OH",url:"https://www.meetup.com/open-cleveland/events/lcjdnpyxhbnc/"}]},"OSM-Boston":{id:"OSM-Boston",featureId:"boston_metro",type:"meetup",name:"OpenStreetMap Boston",countryCodes:["us"],languageCodes:["en"],description:"Mappers and OpenStreetMap users in the Boston area",extendedDescription:"OpenStreetMap is the free and open, wiki-style map of the world, with hundreds of thousands of contributions every day from people like you. Editing the map is simple, and fun! Join us both indoors and outdoors in our effort to create the best map of the Boston area and the rest of the world!",url:"https://www.meetup.com/OpenStreetMap-Boston/",contacts:[{name:"Lars Ahlzen",email:"lars@ahlzen.com"}]},"OSM-Central-Salish-Sea":{id:"OSM-Central-Salish-Sea",featureId:"mt_vernon_wa",type:"meetup",name:"OpenStreetMap Central Salish Sea",countryCodes:["us"],languageCodes:["en"],description:"Mappers and OpenStreetMap users around Mount Vernon, WA",extendedDescription:"OpenStreetMap is an map of the world made by people like you. It's a map that you build, that's given away for free like wikipedia. Check out osm.org for more. We meet all the time to talk maps, make maps and have fun!",url:"https://www.meetup.com/OpenStreetMap-Central-Salish-Sea/",contacts:[{name:"Clifford Snow",email:"clifford@snowandsnow.us"}]},"OSM-Chattanooga":{id:"OSM-Chattanooga",featureId:"chattanooga",type:"facebook",name:"OSM Chattanooga",countryCodes:["us"],languageCodes:["en"],description:"The OpenStreetMap user group for Chattanooga",url:"https://www.facebook.com/groups/123483951073256",contacts:[{name:"Jenny Park",email:"tennessee@tpl.org"},{name:"Randal Hale",email:"rjhale@northrivergeographic.com"}]},"OSM-Colorado":{id:"OSM-Colorado",featureId:"colorado",type:"meetup",name:"OpenStreetMap Colorado",countryCodes:["us"],languageCodes:["en"],description:"Mappers and OpenStreetMap users in the state of Colorado, USA",extendedDescription:"OpenStreetMap (OSM) Colorado is a local collaboration of people interested in contributing their efforts to create free maps. We encourage all of our mappers to organize or suggest mapping events throughout the state. Meetup activities can be simple social mixers, OSM basic to advanced training, or community mapping parties.",url:"https://www.meetup.com/OSM-Colorado/",contacts:[{name:"Russell Deffner",email:"russdeffner@gmail.com"}]},"OSM-NYC":{id:"OSM-NYC",featureId:"nyc_metro",type:"meetup",name:"OpenStreetMap NYC",countryCodes:["us"],languageCodes:["en"],description:"Mappers and OpenStreetMap users, developers and enthusiasts in the New York Metropolitan area",url:"https://www.meetup.com/osm-nyc/",contacts:[{name:"Jeff Ferzoco",email:"jferzoco@carto.com"}]},"OSM-Portland-forum":{id:"OSM-Portland-forum",featureId:"portland_or",type:"forum",name:"OpenStreetMap PDX Google Group",countryCodes:["us"],languageCodes:["en"],description:"Forum and mailing list for OpenStreetMap users in the Portland area",extendedDescription:"This group is to facilitate improvements to OpenStreetMap in the Portland, Oregon area to support applications such as the Open Trip Planner.",url:"https://groups.google.com/group/osm-pdx",contacts:[{name:"Madeline Steele",email:"madeline.steele@gmail.com"}]},"OSM-Portland":{id:"OSM-Portland",featureId:"portland_or",type:"meetup",name:"OpenStreetMap Portland",countryCodes:["us"],languageCodes:["en"],description:"Mappers and OpenStreetMap users in the Portland area",extendedDescription:"OpenStreetMap (OSM) is a map of the world made by people like you. It's a map that you build, that's given away for free like wikipedia. Check out osm.org for more, and come join us at a meetup to talk maps, contribute to OSM, and have fun!",url:"https://www.meetup.com/OpenStreetMap-Portland/",contacts:[{name:"Madeline Steele",email:"madeline.steele@gmail.com"}]},"OSM-Seattle":{id:"OSM-Seattle",featureId:"seattle",type:"meetup",name:"OpenStreetMap Seattle",countryCodes:["us"],languageCodes:["en"],description:"Mappers and OpenStreetMap users in the Seattle area",url:"https://www.meetup.com/OpenStreetMap-Seattle/",contacts:[{name:"Clifford Snow",email:"clifford@snowandsnow.us"},{name:"Chase Stephens",email:"seattlefyi@gmail.com"},{name:"Paul McCombs",email:"pablo@imperium.org"}]},"OSM-SoCal":{id:"OSM-SoCal",featureId:"la_metro",type:"meetup",name:"OpenStreetMap Southern California",countryCodes:["us"],languageCodes:["en"],description:"Let's have some fun, contribute something to Los Angeles, and learn about mapping!",extendedDescription:"OpenStreetMap (OSM) Southern California is for anyone interested in mapping to get together to work with OpenStreetMap. OpenStreetMap, the Wikipedia of maps, is a free open-source map of the world being created by more than 1,000,000 volunteers around the globe. Everyone is welcome. If you don't know OpenStreetMap, we'll teach you. If you have an idea for a mapping project or even a field trip that the group can do, great!",url:"https://www.meetup.com/OSM-Southern-California/",contacts:[{name:"Charlotte Wolter",email:"techlady@techlady.com"}]},"OSM-South-Bay":{id:"OSM-South-Bay",featureId:"south_sf_bay_area",type:"meetup",name:"OSM South Bay",countryCodes:["us"],languageCodes:["en"],description:"Map Nights hosted by Code for San Jose",extendedDescription:"Code for San Jose, the local Code for America brigade, hosts monthly Map Nights on Thursday nights in downtown San José. Meet fellow South Bay mappers, help out with local mapping projects, and hear about other civic tech projects. Programming and GIS skills are not required.",url:"https://www.meetup.com/Code-for-San-Jose/",contacts:[{name:"OSM Bay Area mailing list",email:"talk-us-sfbay@openstreetmap.org"}]},"OSM-Tampa-Bay":{id:"OSM-Tampa-Bay",featureId:"tampa_bay",type:"meetup",name:"OpenStreetMap Tampa Bay",countryCodes:["us"],languageCodes:["en"],description:"Mappers and OpenStreetMap users in the Tampa Bay area",extendedDescription:"OSM Tampa Bay group for local residents to get together and build out the definitive map of Tampa Bay with OpenStreetMap, the free and editable map of the world. If you're into maps, data, open source, GPS, hiking, cycling, et cetera, you'll love working with OpenStreetMap -- so join in! We'll get together and map and talk about new topics once-a-month or so.",url:"https://www.meetup.com/osmtampabay/",contacts:[{name:"Coleman McCormick",email:"cmccormick@gmail.com"}]},"OSM-US-Slack":{id:"OSM-US-Slack",featureId:"usa_full",type:"slack",countryCodes:["us"],languageCodes:["en"],name:"OpenStreetMap US Slack",description:"All are welcome! Sign up at {signupUrl}",signupUrl:"https://slack.openstreetmap.us/",url:"https://osmus.slack.com",contacts:[{name:"Ian Dees",email:"ian@openstreetmap.us"},{name:"Clifford Snow",email:"clifford@snowandsnow.us"}]},"OSM-US":{id:"OSM-US",featureId:"usa_full",type:"group",countryCodes:["us"],languageCodes:["en"],name:"OpenStreetMap US",description:"We help grow and improve OpenStreetMap in the United States.",extendedDescription:"We support OpenStreetMap by holding annual conferences, providing community resources, building partnerships, and by spreading the word. Join OpenStreetMap US here: {signupUrl}",signupUrl:"https://www.openstreetmap.us/join",url:"https://www.openstreetmap.us/",contacts:[{name:"Ian Dees",email:"ian@openstreetmap.us"},{name:"Bryan Housel",email:"bryan@openstreetmap.us"}],events:[{id:"sotmus2019-cfs",i18n:true,name:"Propose a Talk for SotM-US 2019",description:"We are calling on all members of the OpenStreetMap community to share your ideas and session proposals for State of the Map US 2019. Whether you are brand new to OSM or have been a core contributor since the beginning, we want to hear from you!",where:"Minneapolis, Minnesota",when:"2019-jun-01",url:"https://sessionize.com/sotmus2019"},{id:"sotmus2019",i18n:true,name:"State of the Map US 2019",description:"Join the OpenStreetMap community at State of the Map US in Minneapolis, Minnesota. Connect with other mappers, businesses, government agencies, and non profits, all collaborating around the free and editable map of the world.",where:"Minneapolis, Minnesota",when:"2019-sep-05",url:"https://2019.stateofthemap.us/"}]},"OSM-Utah":{id:"OSM-Utah",featureId:"salt_lake_city",type:"meetup",name:"OpenStreetMap Utah",countryCodes:["us"],languageCodes:["en"],description:"Mappers and OpenStreetMap users in the Salt Lake City area",extendedDescription:"Activities may include things like Learn To Map workshops, mapping parties and outdoor data collection. The events will take place in the SLC area, at least initially. We are looking for seasoned mappers as well as people new to OSM. Join and let's do some mapping!",url:"https://www.meetup.com/OpenStreetMap-Utah/",contacts:[{name:"Martijn van Exel",email:"m@rtijn.org"}]},"OSM-Wyoming":{id:"OSM-Wyoming",featureId:"wyoming",type:"meetup",name:"OpenStreetMap Wyoming",countryCodes:["us"],languageCodes:["en"],description:"Mappers and OpenStreetMap users in the state of Wyoming",extendedDescription:"OpenStreetMap (OSM) Wyoming is a local collaboration of people interested in contributing their efforts to create free maps. We encourage all of our mappers to organize or suggest mapping events throughout the state. Meetup activities can be simple social mixers, OSM basic to advanced training, or community mapping parties.",url:"https://www.meetup.com/OSM-Wyoming/",contacts:[{name:"Russell Deffner",email:"russdeffner@gmail.com"}]},"PHXGeo-meetup":{id:"PHXGeo-meetup",featureId:"phoenix",type:"meetup",name:"PHXGeo Meetup",countryCodes:["us"],languageCodes:["en"],description:"Mappers and OpenStreetMap users in the Phoenix, AZ area",extendedDescription:"This is a meetup group for those in the Phoenix area who like maps, GIS, OpenStreetMap, cartography and anything in between.",url:"https://www.meetup.com/PHXGeo/",contacts:[{name:"Ryan Arp",email:"ryan@arpconsultinggroup.com"}]},"PHXGeo-twitter":{id:"PHXGeo-twitter",featureId:"phoenix",type:"twitter",name:"PHXGeo Twitter",countryCodes:["us"],languageCodes:["en"],description:"Follow us on Twitter at {url}",url:"https://twitter.com/phxgeo",contacts:[{name:"Ryan Arp",email:"ryan@arpconsultinggroup.com"}]},"Western-Slope-facebook":{id:"Western-Slope-facebook",featureId:"grand_junction_co",type:"facebook",name:"Western Slope OSM Facebook",countryCodes:["us"],languageCodes:["en"],description:"Mappers and OpenStreetMap users around Grand Junction, CO",url:"https://www.facebook.com/wsosm/",contacts:[{name:"Aaron Young",email:"aaron@kaartgroup.com"}]},"Western-Slope-meetup":{id:"Western-Slope-meetup",featureId:"grand_junction_co",type:"meetup",name:"Western Slope OSM Meetup",countryCodes:["us"],languageCodes:["en"],description:"Mappers and OpenStreetMap users around Grand Junction, CO",extendedDescription:"The goal of this group is to introduce OpenStreetMap to the community, develop a community of mappers, create the most amazing geodata possible using whatever method we can and finally strategize in order to get this data out into our community. Imagine accurate trail signage! Imagine further development of bike paths! Imagine anything you want, that's the joy of OpenStreetMap!",url:"https://www.meetup.com/Western-Slope-OpenStreetMap/",contacts:[{name:"Aaron Young",email:"aaron@kaartgroup.com"}]},"ym-Ball-State-University":{type:"youthmappers",name:"Gamma Theta Upsilon- Iota Omega Chapter",description:"YouthMappers chapter at Ball State University",id:"ym-Ball-State-University",featureId:"Ball-State-University",contacts:[{name:"Organizer",email:"gtu@bsu.edu"}],extendedDescription:"Our chapter is a very active one. We primarily focus on community events, fundraising, and field trips. We are currently looking to develop more mapping-related activities to draw in other students from campus who may be interested in contributing.",countryCodes:["us"],url:"https://www.facebook.com/BallState.GammaThetaUpsilon/"},"ym-California-University-of-Pennsylvania":{type:"youthmappers",name:"CalU PA GIS Club",description:"YouthMappers chapter at California University of Pennsylvania",id:"ym-California-University-of-Pennsylvania",featureId:"California-University-of-Pennsylvania",contacts:[{name:"Organizer",email:"mueller@calu.edu"}],extendedDescription:"GIS Students at Cal U learn to apply spatial theory to the real world. The university degree program focuses on geography as well as utilizing GIS in emergency management.",countryCodes:["us"],url:"https://www.facebook.com/CalUGisClub/"},"ym-Central-Washington-University":{type:"youthmappers",name:"Geography Club",description:"YouthMappers chapter at Central Washington University",id:"ym-Central-Washington-University",featureId:"Central-Washington-University",contacts:[{name:"Organizer",email:"valkoc@cwu.edu"}],extendedDescription:"Our goal teaming up with Youthmappers is to bring relief to areas that are in need of humanitarian mapping. By doing so, we are serving our fellow brothers and sisters around the world as well as furthering our own cartography skills.",countryCodes:["us"],url:"https://www.cwu.edu/geography/geography-club"},"ym-Clemson-University":{type:"youthmappers",name:"Clemson Mappers",description:"YouthMappers chapter at Clemson University",id:"ym-Clemson-University",featureId:"Clemson-University",contacts:[{name:"Organizer",email:"clemsonmappers@gmail.com"}],extendedDescription:"Students in Clemson are supported by the Center for Geospatial Technologies, a community of interdisciplinary geospatial science practitioners supporting research, teaching, and outreach activities using technologies that enable the collection, analysis, and application of geospatial data. Students integrate geospatial technologies within their scholarly activities across all disciplines and build connections throughout the world.",countryCodes:["us"],url:"http://www.clemsongis.org/#!clemson-mappers/i9w6t"},"ym-College-of-William-and-Mary":{type:"youthmappers",name:"All over the map!",description:"YouthMappers chapter at College of William and Mary",id:"ym-College-of-William-and-Mary",featureId:"College-of-William-and-Mary",contacts:[{name:"Organizer",email:"lnseitz@email.wm.edu"}],extendedDescription:"The students who are all over the map are supported by the Center for Geospatial Analysis, a group integrating GIS across the curriculum and providing student and faculty with hardware, software, and expertise. Students of all backgrounds utilize GIS across campus, including environmental science and policy, geology, history, business, sociology, biology, anthropology, public policy, and marine sciences.",countryCodes:["us"],url:"mailto:lnseitz@email.wm.edu"},"ym-Cornell-University":{type:"youthmappers",name:"Mapping Society",description:"YouthMappers chapter at Cornell University",id:"ym-Cornell-University",featureId:"Cornell-University",contacts:[{name:"Organizer",email:"mappingsocietycornell@gmail.com"}],extendedDescription:"Cornell students and faculty use open data and open source software to address challenges at local, national, and global scales. In doing so, we advance our academic and personal goals of developing our own skills around GIS and spatial literacy.",countryCodes:["us"],url:"mailto:mappingsocietycornell@gmail.com?subject=Youth%20Mappers%20and%20Mapping%20Society%20at%20Cornell%20University"},"ym-George-Mason-University":{type:"youthmappers",name:"Mason Mappers",description:"YouthMappers chapter at George Mason University",id:"ym-George-Mason-University",featureId:"George-Mason-University",contacts:[{name:"Organizer",email:"masonmappers@gmail.com"}],extendedDescription:"Mason Mappers Student Society is a humanitarian mapping student organization in the George Mason University GGS Department, and its goal is to promote education and knowledge in geo-technologies, geo-info science, to foster good global stewardship and engage in professional development while building a positive, interactive geo-community, as well as shaping students into leaders of tomorrow.",countryCodes:["us"],url:"Facebook.com/MasonMappers"},"ym-Indiana-University-of-Pennsylvania":{type:"youthmappers",name:"Geospatial Science Club",description:"YouthMappers chapter at Indiana University of Pennsylvania",id:"ym-Indiana-University-of-Pennsylvania",featureId:"Indiana-University-of-Pennsylvania",contacts:[{name:"Organizer",email:"rhoch@iup.edu"}],countryCodes:["us"],url:"mailto:rhoch@iup.edu"},"ym-Jacksonville-State-University":{type:"youthmappers",name:"JSU Disaster Mapping Team",description:"YouthMappers chapter at Jacksonville State University",id:"ym-Jacksonville-State-University",featureId:"Jacksonville-State-University",contacts:[{name:"Organizer",email:"ltatum@stu.jsu.edu"}],extendedDescription:"The JSU Disaster Mapping Team is a program at Jacksonville State University dedicated to assisting disaster response in times of emergencies. This includes tornadoes, severe thunderstorms, floods, etc. The team is intended to be a valuable asset to surrounding counties and a conduit for the JSU Geoscience Department students to apply what they have learned in an academic setting to support emergency services. Our goal is to streamline disaster response and recovery operations while utilizing student skill sets",countryCodes:["us"],url:"mailto:ltatum@stu.jsu.edu"},"ym-Kansas-State-University":{type:"youthmappers",name:"Gamma Theta Upsilon: Beta Psi Chapter",description:"YouthMappers chapter at Kansas State University",id:"ym-Kansas-State-University",featureId:"Kansas-State-University",contacts:[{name:"Organizer",email:"tblarsen@ksu.edu"}],extendedDescription:"We are the Kansas State University Chapter of Gamma Theta Upsilon, an international geography honor society with affiliation to YouthMappers. We have been active with mapping for OSM and conducted a mapathon called \"Map for Nepal,\" in which we used OpenStreetMap to digitize unmapped areas of Nepal after the earthquake in 2015.",countryCodes:["us"],url:"https://www.facebook.com/kstate.gtu?fref=ts"},"ym-McGill-University":{type:"youthmappers",name:"Open Mapping Group McGill: A Member of the McGill Undergraduate Geography Society",description:"YouthMappers chapter at McGill University",id:"ym-McGill-University",featureId:"McGill-University",contacts:[{name:"Organizer",email:"omg.mcgill@gmail.com"}],extendedDescription:"The Open Mapping Group McGill: A Member of McGill Undergraduate Geography Society (OMG McGill) aims to connect students with open geospatial data and technologies to enhance resilience, community-building, and learning through mapping–on campus, in Montreal, in Canada, and abroad.",countryCodes:["ca"],url:"mailto:omg.mcgill@gmail.com"},"ym-Miami-University":{type:"youthmappers",name:"Geography and Planning Society",description:"YouthMappers chapter at Miami University",id:"ym-Miami-University",featureId:"Miami-University",contacts:[{name:"Organizer",email:"gpsmiamioh@gmail.com"}],extendedDescription:"GPS at Miami University aims to create a close-knit community of planners and geographers who want to have fun, learn more about careers and higher education in their field, network, and work alongside professionals for real experience.",countryCodes:["us"],url:"mailto:GPSMiamiOH@gmail.com"},"ym-Monroe-Community-College":{type:"youthmappers",name:"MCC Mapping Corps",description:"YouthMappers chapter at Monroe Community College",id:"ym-Monroe-Community-College",featureId:"Monroe-Community-College",contacts:[{name:"Organizer",email:"gist@monroecc.edu"}],countryCodes:["us"],url:"mailto:GIST@monroecc.edu"},"ym-Montgomery-College":{type:"youthmappers",name:"GeoMC",description:"YouthMappers chapter at Montgomery College",id:"ym-Montgomery-College",featureId:"Montgomery-College",contacts:[{name:"Organizer",email:"stephanie.calderon@montgomerycollege.edu"}],extendedDescription:"GeoMC’s mission is to provide students with hands-on experience in applying geospatial tools, collecting data, and project management. Most of our students come with a background in GIS and are geography majors. Our chapter’s members come from diverse backgrounds and we all work together to make a positive impact in the world live in.",countryCodes:["us"],url:"mailto:stephanie.calderon@montgomerycollege.edu"},"ym-New-York-University":{type:"youthmappers",name:"NYU mHealth Initiative Mapping Corps",description:"YouthMappers chapter at New York University",id:"ym-New-York-University",featureId:"New-York-University",contacts:[{name:"Organizer",email:"mhealth@nyu.edu"}],extendedDescription:"The NYU mobile health or “mHealth” research initiative focuses on development of systems that link people - usually via their phones - to the places that they live and traverse, and thus supports novel research on the way phones and maps can be leveraged to understand behavioral decision making and ultimately health outcomes.",countryCodes:["us"],url:"www.nyumhealth.org"},"ym-Ohio-Wesleyan-University":{type:"youthmappers",name:"Environment and Wildlife Club",description:"YouthMappers chapter at Ohio Wesleyan University",id:"ym-Ohio-Wesleyan-University",featureId:"Ohio-Wesleyan-University",contacts:[{name:"Organizer",email:"envirowild@owu.edu"}],extendedDescription:"Environment and Wildlife Club looks at environmental issues on campus, in Delaware, and even nationally! We create campus and community projects, explore and enjoy the outdoors, volunteer, and try to promote environmentalism in every aspect of our lives.",countryCodes:["us"],url:"mailto:envirowild@owu.edu"},"ym-Oklahoma-State-University":{type:"youthmappers",name:"Geography Club",description:"YouthMappers chapter at Oklahoma State University",id:"ym-Oklahoma-State-University",featureId:"Oklahoma-State-University",contacts:[{name:"Organizer",email:"hhayden@okstate.edu"}],countryCodes:["us"],url:"mailto:hhayden@okstate.edu"},"ym-State-University-of-New-York-Geneseo":{type:"youthmappers",name:"SUNY Geneseo GIS Association",description:"YouthMappers chapter at State University of New York Geneseo",id:"ym-State-University-of-New-York-Geneseo",featureId:"State-University-of-New-York-Geneseo",contacts:[{name:"Organizer",email:"bb18@geneseo.edu"}],extendedDescription:"We spread awareness, support, education, volunteerism, and career advancement opportunities in geographic information systems, across disciplines and departments, in the context of SUNY Geneseo, the local community, and global community.",countryCodes:["us"],url:"http://www.facebook.com/GeneseoGIS"},"ym-SUNY-at-Fredonia":{type:"youthmappers",name:"Geoventurers",description:"YouthMappers chapter at SUNY at Fredonia",id:"ym-SUNY-at-Fredonia",featureId:"SUNY-at-Fredonia",contacts:[{name:"Organizer",email:"amw30@geneseo.edu"}],extendedDescription:"GeoVenturers is a group of students joining together across a number of majors on our campus that see geospatial technologies as a tool to serve others and to bring people together. Mentoring for the group brings in science education from the department of curriculum and instruction. We hope that we can bring our skills to play in helping make people's lives better.",countryCodes:["us"],url:"mailto:amw30@geneseo.edu?subject=GeoVenturers%20and%20the%20YouthMappers%20network"},"ym-Texas-Tech-University":{type:"youthmappers",name:"YouthMappers at TTU",description:"YouthMappers chapter at Texas Tech University",id:"ym-Texas-Tech-University",featureId:"Texas-Tech-University",contacts:[{name:"Organizer",email:"emily.glaeser@ttu.edu"}],extendedDescription:"As one of the co-founding chapters of the network, the TTU YouthMappers are enthusiastic to serve as interdisciplinary leaders to help create open geographic data and analyses that address locally defined development challenges worldwide. The chapter strives to exchange and collaborate with other chapters around the globe while also offering themselves as a local resource and service to Texas Tech student organizations in ways that add value to their respecitive campus activities through mapping.",countryCodes:["us"],url:"https://www.facebook.com/youthmapperstexastech/"},"ym-The-Citadel":{type:"youthmappers",name:"YouthMappers at The Citadel",description:"YouthMappers chapter at The Citadel",id:"ym-The-Citadel",featureId:"The-Citadel",contacts:[{name:"Organizer",email:"cstokes5@citadel.edu"}],extendedDescription:"This chapter is also a Rotaract Club, which is an affiliate of Rotary International. Multiple members, as well as leadership have expressed an interest in YouthMappers and we would like to affiliate our Citadel Rotaract Club with YouthMappers.",countryCodes:["us"],url:"Mailto:cstokes5@citadel.edu"},"ym-The-George-Washington-University":{type:"youthmappers",name:"Humanitarian Mapping Society",description:"YouthMappers chapter at The George Washington University",id:"ym-The-George-Washington-University",featureId:"The-George-Washington-University",contacts:[{name:"Organizer",email:"hms.gwu@gmail.com"}],extendedDescription:"Models of leadership and engagement, HMS seeks to render aid and better the world through humanitarian Geographic Information Systems (GIS) projects. This co-founding affiliated chapter on the campus of GWU has a plethora of experience to share, and frequently partners directly with USAID, the American Red Cross, and the US Department of State in their DC area to expand student-led efforts and serve the global community.",countryCodes:["us"],url:"https://www.facebook.com/GWHMS/"},"ym-The-Johns-Hopkins-University-SAIS":{type:"youthmappers",name:"SAIS YouthMappers",description:"YouthMappers chapter at The Johns Hopkins University, SAIS",id:"ym-The-Johns-Hopkins-University-SAIS",featureId:"The-Johns-Hopkins-University-SAIS",contacts:[{name:"Organizer",email:"saisyouthmappers@gmail.com"}],extendedDescription:"The mission of SAIS Youth Mappers is to provide students at the Johns Hopkins University SAIS with the opportunity to become highly skilled humanitarian mappers. As a group within the South Asia Club, its primary focus is on supporting humanitarian mapping projects in the Indo-Pacific Region.",countryCodes:["us"],url:"mailto:saisyouthmappers@gmail.com"},"ym-The-Pennsylvania-State-University":{type:"youthmappers",name:"Penn State GIS Coalition",description:"YouthMappers chapter at The Pennsylvania State University",id:"ym-The-Pennsylvania-State-University",featureId:"The-Pennsylvania-State-University",contacts:[{name:"Organizer",email:"advising@geog.psu.edu"}],extendedDescription:"The Penn State Geospatial Information Science (GIS) Coalition is an organization that offers students majoring, minoring, or sharing an interest in GIS opportunities to develop supplementary knowledge and skills necessary to succeed in the professional GIS industry.",countryCodes:["us"],url:"mailto:advising@geog.psu.edu"},"ym-University-of-California-Davis":{type:"youthmappers",name:"Mapping Club",description:"YouthMappers chapter at University of California, Davis",id:"ym-University-of-California-Davis",featureId:"University-of-California-Davis",contacts:[{name:"Organizer",email:"ucdmappingclub@ucdavis.edu"}],countryCodes:["us"],url:"mailto:ucdmappingclub@ucdavis.edu?subject=YouthMappers%20and%20UC%20Davis%20Mapping%20Club"},"ym-University-of-Central-Florida":{type:"youthmappers",name:"Geospatial Information Society",description:"YouthMappers chapter at University of Central Florida",id:"ym-University-of-Central-Florida",featureId:"University-of-Central-Florida",contacts:[{name:"Organizer",email:"rsouth@knights.ucf.edu"}],extendedDescription:"Our mission is to foster a social and educational environment for all majors who are interested in the discussion and application of GIS. Group and community events throughout the academic year organize students to volunteer to help local and regional communities by using community-based GIS projects and educating local middle and high school students on the use and application of GIS.",countryCodes:["us"],url:"mailto:rsouth@knights.ucf.edu"},"ym-University-of-Chicago":{type:"youthmappers",name:"Tobler Society",description:"YouthMappers chapter at University of Chicago",id:"ym-University-of-Chicago",featureId:"University-of-Chicago",contacts:[{name:"Organizer",email:"toblersociety@uchicago.edu"}],countryCodes:["us"],url:"mailto:toblersociety@uchicago.edu"},"ym-University-of-Maryland-College-Park":{type:"youthmappers",name:"Geography Club",description:"YouthMappers chapter at University of Maryland - College Park",id:"ym-University-of-Maryland-College-Park",featureId:"University-of-Maryland-College-Park",contacts:[{name:"Organizer",email:"geogclubumd@gmail.com"}],extendedDescription:"The mission of the Geography Club at the University of Maryland College Park is to engage and encourage students to explore geographic interests within the campus and the community.",countryCodes:["us"],url:"https://www.facebook.com/UMDGeographyClub/?fref=ts"},"ym-University-of-North-Texas":{type:"youthmappers",name:"UNT Geography Club",description:"YouthMappers chapter at University of North Texas",id:"ym-University-of-North-Texas",featureId:"University-of-North-Texas",contacts:[{name:"Organizer",email:"reeseramsey@my.unt.edu"}],extendedDescription:"The Geography Club is a student organization at University of North Texas that welcomes all students who are interested in geography. The objective of the Geography Club is to promote interest in Geography, the Major and the Geography Department along with fellowship among students and faculty. The club also seeks to represent student needs and wants in regard to the study of geography and to provide a forum for the presentation of innovative ideas to the benefit of the University community.",countryCodes:["us"],url:"Mailto:reeseramsey@my.unt.edu"},"ym-University-of-Northern-Colorado":{type:"youthmappers",name:"UNCO Geography and GIS Club",description:"YouthMappers chapter at University of Northern Colorado",id:"ym-University-of-Northern-Colorado",featureId:"University-of-Northern-Colorado",contacts:[{name:"Organizer",email:"uncogeoggisclub@gmail.com"}],extendedDescription:"Official Geography and GIS Club chapter affiliated with the University of Northern Colorado where our aim is to learn, share and connect with those around us. #MakingSenseOfTheWorld",countryCodes:["us"],url:"www.facebook.com/groups/476365076071166/"},"ym-University-of-Oregon":{type:"youthmappers",name:"Map by Northwest",description:"YouthMappers chapter at University of Oregon",id:"ym-University-of-Oregon",featureId:"University-of-Oregon",contacts:[{name:"Organizer",email:"cbone@uoregon.edu"}],extendedDescription:"Map By Northwest aims to engage undergraduate students at the University of Oregon in mapping projects to assist in humanitarian causes and for conducting geographic research. We welcome students from all disciplines to join us in our mapping adventures.",countryCodes:["us"],url:"http://blogs.uoregon.edu/mxnw/"},"ym-University-of-Redlands":{type:"youthmappers",name:"URSpatial Geo-Thinkers",description:"YouthMappers chapter at University of Redlands",id:"ym-University-of-Redlands",featureId:"University-of-Redlands",contacts:[{name:"Organizer",email:"nathan_strout@redlands.edu"}],extendedDescription:"To build upon the members' GIS skills and knowledge of the tools and methods through applied social engagement as well as to educate the campus community about the power of mapping and spatial analysis through community service events.",countryCodes:["us"],url:"mailto:nathan_strout@redlands.edu"},"ym-University-of-South-Carolina":{type:"youthmappers",name:"Geography Graduate Student Association",description:"YouthMappers chapter at University of South Carolina",id:"ym-University-of-South-Carolina",featureId:"University-of-South-Carolina",contacts:[{name:"Organizer",email:"carolina_ggsa@gmail.com"}],extendedDescription:"The GGSA is a fully student-run organization, designed to serve as an advocate and resource for all geography graduate students by filling the role of liaison between the department and students. Our goal is to further professional, academic, and personal development of graduate students interested in the field of geography and its sub disciplines.",countryCodes:["us"],url:"https://carolinaggsa.wordpress.com/"},"ym-University-of-Southern-California":{type:"youthmappers",name:"SC Mappers",description:"YouthMappers chapter at University of Southern California",id:"ym-University-of-Southern-California",featureId:"University-of-Southern-California",contacts:[{name:"Organizer",email:"scmappers@gmail.com"}],extendedDescription:"We see the world differently: we view it through a spatial lens. With the power of spatial thinking, we connect place and space to help address global challenges. Collaborate with us!",countryCodes:["us"],url:"mailto:scmappers@gmail.com?subject=YouthMappers%20at%20USC"},"ym-University-of-Vermont":{type:"youthmappers",name:"University of Vermont Humanitarian Mapping Club",description:"YouthMappers chapter at University of Vermont",id:"ym-University-of-Vermont",featureId:"University-of-Vermont",contacts:[{name:"Organizer",email:"uvm.hmc@gmail.com"}],countryCodes:["us"],url:"https://www.facebook.com/UVMHMC"},"ym-University-of-Victoria":{type:"youthmappers",name:"Society of Geography Students",description:"YouthMappers chapter at University of Victoria",id:"ym-University-of-Victoria",featureId:"University-of-Victoria",contacts:[{name:"Organizer",email:"sogsmappers@gmail.com"}],extendedDescription:"SOGS seeks to promote and represent social and academic interests within the Department of Geography. This is expressed by four key goals: To provide a forum for the discussion of matters concerning the quality and accessibility of education within geography; to provide a means of expressing a consensus of student opinion to deparhnental faculty through representation at deparkrnental meetings and on departrnental committees; to undertake anangements for such activities as are for the benefit of students and are seen to be within the field of interest of students in geography; to act as a liaison through the UVSS and the Course Union Council with other student groups on campus",url:"https://www.facebook.com/SOGSUVic/"},"ym-University-of-Wyoming":{type:"youthmappers",name:"Gamma Theta Upsilon/Geography Club",description:"YouthMappers chapter at University of Wyoming",id:"ym-University-of-Wyoming",featureId:"University-of-Wyoming",contacts:[{name:"Organizer",email:"gtu-geography@uwyo.edu"}],countryCodes:["us"],url:"http://www.uwyo.edu/geography/geographyclub/"},"ym-UW-Madison":{type:"youthmappers",name:"BadgerMaps",description:"YouthMappers chapter at UW-Madison",id:"ym-UW-Madison",featureId:"UW-Madison",contacts:[{name:"Organizer",email:"uwbadgermaps@gmail.com"}],extendedDescription:"BadgerMaps is the UW campus chapter of Youthmappers, an organization dedicated to humanitarian and community mapping services. We connect our volunteer network with opportunities to create GIS data for projects that need it.",countryCodes:["us"],url:"https://www.facebook.com/UW-BadgerMaps-197746270811951/"},"ym-Vassar-College":{type:"youthmappers",name:"Hudson Valley Mappers",description:"YouthMappers chapter at Vassar College",id:"ym-Vassar-College",featureId:"Vassar-College",contacts:[{name:"Organizer",email:"geo@vassar.edu"}],extendedDescription:"Our mission is to provide a multi-disciplinary platform for peers, educators, and community organizations to engage in local mapping projects with a focus on strengthening our local ecosystems, our built environment, and the health of our community. We also seek to contribute geospatial support for global humanitarian aid and development efforts.",countryCodes:["us"],url:"http://pages.vassar.edu/gis/vassar-youthmappers/"},"ym-Villanova-University":{type:"youthmappers",name:"The Villanova Globeplotters",description:"YouthMappers chapter at Villanova University",id:"ym-Villanova-University",featureId:"Villanova-University",contacts:[{name:"Organizer",email:"villanova.globeplotters@gmail.com"}],extendedDescription:"The Villanova Globeplotters is built on Villanova’s Augustinian principle of selfless-service to the global community. Mixed with relaxed social interaction, we strive to provide geospatial outreach to those in need regardless of participating students’ race, academic major, student group association, or college career level.",countryCodes:["us"],url:"mailto:villanova.globeplotters@gmail.com"},"ym-West-Virginia-University":{type:"youthmappers",name:"Maptime Morgantown",description:"YouthMappers chapter at West Virginia University",id:"ym-West-Virginia-University",featureId:"West-Virginia-University",contacts:[{name:"Organizer",email:"maptimemorgantown@gmail.com"}],extendedDescription:"Working as a collaborative team, this co-founding chapter focuses on providing an open learning environment for those interested in working on projects that intersect international development, emergency response, and geographic information science.\nThey connect beginners and experts by providing technical training and experience in building meaningful and useful geographic infrastructure data, while connecting to sister cities around the world.",countryCodes:["us"],url:"mailto:MaptimeMorgantown@gmail.com?subject=Maptime%20Morgantown%20from%20YouthMappers%20website"},"ym-Western-Michigan-University":{type:"youthmappers",name:"Geography Club",description:"YouthMappers chapter at Western Michigan University",id:"ym-Western-Michigan-University",featureId:"Western-Michigan-University",contacts:[{name:"Organizer",email:"wmu.geog.club@gmail.com"}],countryCodes:["us"],url:"http://www.facebook.com/groups/WMUGeographyClub/"},"Maptime-Australia-Slack":{id:"Maptime-Australia-Slack",featureId:"australia_full",type:"slack",countryCodes:["au"],languageCodes:["en"],name:"Maptime Australia Slack",description:"Sign up at {signupUrl}",signupUrl:"https://bit.ly/maptimeau",url:"https://maptimeaustralia.slack.com",contacts:[{name:"David Dean",email:"ddean@ieee.org"},{name:"Philip Mallis",email:"philip.mallis@unimelb.edu.au"},{name:"Edoardo Neerhut",email:"ed@mapillary.com"}]},"talk-au":{id:"talk-au",featureId:"australia_full",type:"mailinglist",countryCodes:["au"],languageCodes:["en"],name:"Talk-au Mailing List",description:"Place for Aussie mappers to chat",url:"https://lists.openstreetmap.org/listinfo/talk-au",contacts:[{name:"Ben Kelley",email:"ben.kelley@gmail.com"},{name:"Steve Bennett",email:"stevagewp@gmail.com"},{name:"Ian Sergeant",email:"inas66+osm@gmail.com"}]},"OSM-AR-facebook":{id:"OSM-AR-facebook",featureId:"argentina",type:"facebook",name:"OpenStreetMap Argentina Facebook",countryCodes:["ar"],languageCodes:["es"],description:"Join the OpenStreetMap Argentina community on Facebook",extendedDescription:"News from the local community",url:"https://www.facebook.com/OpenStreetMapArgentina/",contacts:[{name:"OpenStreetMap Argentina",email:"openstreetmap.org.ar@gmail.com"}]},"OSM-AR-forum":{id:"OSM-AR-forum",featureId:"argentina",type:"forum",name:"OpenStreetMap Argentina web forum",countryCodes:["ar"],languageCodes:["es"],description:"Join the OpenStreetMap Argentina web forum",extendedDescription:"Ideal for long or important discussions. Slow response time.",url:"https://forum.openstreetmap.org/viewforum.php?id=49",contacts:[{name:"OpenStreetMap Argentina",email:"openstreetmap.org.ar@gmail.com"}]},"OSM-AR-irc":{id:"OSM-AR-irc",featureId:"argentina",type:"irc",name:"OpenStreetMap Argentina IRC",countryCodes:["ar"],languageCodes:["es"],description:"Join #osm-ar on irc.oftc.net (port 6667)",extendedDescription:"You may find the most geeky user in the community.",url:"https://webchat.oftc.net/?channels=osm-ar",contacts:[{name:"OpenStreetMap Argentina",email:"openstreetmap.org.ar@gmail.com"}]},"OSM-AR-mailinglist":{id:"OSM-AR-mailinglist",featureId:"argentina",type:"mailinglist",name:"Talk-ar Mailing List",countryCodes:["ar"],languageCodes:["es"],description:"Historic mailing list. Almost unused today.",url:"https://lists.openstreetmap.org/pipermail/talk-ar/",contacts:[{name:"OpenStreetMap Argentina",email:"openstreetmap.org.ar@gmail.com"}]},"OSM-AR-telegram":{id:"OSM-AR-telegram",featureId:"argentina",type:"telegram",name:"OpenStreetMap Argentina Telegram",countryCodes:["ar"],languageCodes:["es"],description:"Join the OpenStreetMap Argentina community on Telegram",extendedDescription:"The most active channel in the community, ideal for chatting and getting answers to your questions instantly. Everyone is welcome!",url:"https://telegram.me/osm_ar",contacts:[{name:"OpenStreetMap Argentina",email:"openstreetmap.org.ar@gmail.com"}]},"OSM-AR-twitter":{id:"OSM-AR-twitter",featureId:"argentina",type:"twitter",name:"OpenStreetMap Argentina Twitter",countryCodes:["ar"],languageCodes:["es"],description:"Follow us on Twitter at {url}",extendedDescription:"News from the local community and OpenStreetMap in general.",url:"https://twitter.com/OpenStreetMapAr",contacts:[{name:"OpenStreetMap Argentina",email:"openstreetmap.org.ar@gmail.com"}]},"OSM-BO-mailinglist":{id:"OSM-BO-mailinglist",featureId:"bolivia",type:"mailinglist",name:"Talk-bo Mailing List",countryCodes:["bo"],languageCodes:["es"],description:"Talk-bo is the official mailing list for the Bolivian OpenStreetMap community",extendedDescription:"Mapping in Bolivia? Have questions, want to connect with the community here? Join us at {url}. All are welcome!",url:"https://lists.openstreetmap.org/pipermail/talk-bo/",contacts:[{name:"Marco Antonio",email:"marcoantoniofrias@gmail.com"}]},"Bahia-telegram":{id:"Bahia-telegram",featureId:"bahia",type:"telegram",name:"OpenStreetMap Bahia Telegram Group",countryCodes:["br"],languageCodes:["pt"],description:"Join the OpenStreetMap Bahia community on Telegram",extendedDescription:"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!",url:"https://t.me/OSMBA",contacts:[{name:"Wille Marcel",email:"wille@wille.blog.br"}]},"DF-telegram":{id:"DF-telegram",featureId:"df_br",type:"telegram",name:"OpenStreetMap Brasília Telegram Group",countryCodes:["br"],languageCodes:["pt"],description:"Join the OpenStreetMap Brasília community on Telegram",extendedDescription:"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!",url:"https://t.me/osmbsb",contacts:[{name:"Wille Marcel",email:"wille@wille.blog.br"}]},"OSM-br-mailinglist":{id:"OSM-br-mailinglist",featureId:"brazil",type:"mailinglist",name:"Talk-br Mailing List",countryCodes:["br"],languageCodes:["pt"],description:"A mailing list to discuss OpenStreetMap in Brazil",url:"https://lists.openstreetmap.org/pipermail/talk-br/",contacts:[{name:"Arlindo Pereira",email:"nighto@gmail.com"}]},"OSM-br-telegram":{id:"OSM-br-telegram",featureId:"brazil",type:"telegram",name:"OpenStreetMap Brasil Telegram",countryCodes:["br"],languageCodes:["pt"],description:"Join the OpenStreetMap Brasil community on Telegram",extendedDescription:"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!",url:"https://t.me/OSMBrasil_Comunidade",contacts:[{name:"Vitor George",email:"vitor.george@gmail.com"}],events:[{id:"webinar_mundogeo",name:"Webinar: OpenStreetMap em Prefeituras e Empresas",description:"Participe do webinar sobre como utilizar o OpenStreeMap em prefeituras e empresas.",where:"Online",when:"2018-05-02 14:30",url:"http://mundogeo.com/webinar/webinar.html"},{id:"mundogeo",name:"Painel OpenStreetMap no MundoGeo #connect",description:"Participe do painel sobre o OpenStreetMap no MundoGeo #connect.",where:"São Paulo, SP, Brasil",when:"2018-05-16 11:00",url:"http://mundogeoconnect.com/2018/atividades-especiais/"}]},"OSM-br-twitter":{id:"OSM-br-twitter",featureId:"brazil",type:"twitter",name:"OpenStreetMap Brasil Twitter",countryCodes:["br"],languageCodes:["pt"],description:"Follow us on Twitter at {url}",url:"https://twitter.com/OpenStreetMapBR",contacts:[{name:"Wille Marcel",email:"wille@wille.blog.br"}]},"RS-telegram":{id:"RS-telegram",featureId:"rs_br",type:"telegram",name:"OpenStreetMap Rio Grande do Sul Telegram Group",countryCodes:["br"],languageCodes:["pt"],description:"Join the OpenStreetMap Rio Grande do Sul community on Telegram",extendedDescription:"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!",url:"https://t.me/osmrs",contacts:[{name:"No one",email:"nobody@nowhere.org"}]},"OSM-CL-facebook":{id:"OSM-CL-facebook",featureId:"chile",type:"facebook",name:"OpenStreetMap Chile Facebook",countryCodes:["cl"],languageCodes:["es"],description:"Join the OpenStreetMap Chile community on Facebook",extendedDescription:"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!",url:"https://www.facebook.com/OpenStreetMap-Chile-145127198882915/",contacts:[{name:"Julio Costa",email:"julio.costa@openstreetmap.cl"}]},"OSM-CL-mailinglist":{id:"OSM-CL-mailinglist",featureId:"chile",type:"mailinglist",name:"Talk-cl Mailing List",countryCodes:["cl"],languageCodes:["es"],description:"A mailing list to discuss OpenStreetMap in Chile",url:"https://lists.openstreetmap.org/pipermail/talk-cl/",contacts:[{name:"Julio Costa",email:"julio.costa@openstreetmap.cl"}]},"OSM-CL-telegram":{id:"OSM-CL-telegram",featureId:"chile",type:"telegram",name:"OpenStreetMap Chile Telegram",countryCodes:["cl"],languageCodes:["es"],description:"Join the OpenStreetMap Chile community on Telegram",extendedDescription:"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!",url:"https://t.me/OSMcl",contacts:[{name:"Julio Costa",email:"julio.costa@openstreetmap.cl"}]},"OSM-CL-twitter":{id:"OSM-CL-twitter",featureId:"chile",type:"twitter",name:"OpenStreetMap Chile Twitter",countryCodes:["cl"],languageCodes:["es"],description:"Follow us on Twitter at {url}",url:"https://twitter.com/osmCL",contacts:[{name:"Julio Costa",email:"julio.costa@openstreetmap.cl"}]},"Maptime-Bogota":{id:"Maptime-Bogota",featureId:"bogota",type:"meetup",name:"Maptime Bogotá",countryCodes:["co"],languageCodes:["es"],description:"We're a group of mappers interested in mapping in OpenStreetMap around Bogotá.",extendedDescription:"Learn to collect data in the field and digitize onto OpenStreetMap. It is not necessary to have previous knowledge! You just need the desire to participate, learn, and have fun.",url:"https://www.meetup.com/Maptime-Colombia-OSM/",contacts:[{name:"Andrés Gómez Casanova",email:"angoca@gmail.com"}]},"OSM-CO-facebook":{id:"OSM-CO-facebook",featureId:"colombia",type:"facebook",name:"OpenStreetMap Colombia Facebook",countryCodes:["co"],languageCodes:["es"],description:"Join the OpenStreetMap Colombia community on Facebook",extendedDescription:"Join the community to learn more about OpenStreetMap. Everyone is welcome!",url:"https://www.facebook.com/groups/OsmCol/",contacts:[{name:"Fredy Rivera",email:"fredyrivera@gmail.com"}]},"OSM-CO-mailinglist":{id:"OSM-CO-mailinglist",featureId:"colombia",type:"mailinglist",name:"Talk-co Mailing List",countryCodes:["co"],languageCodes:["es"],description:"A mailing list to discuss OpenStreetMap in Colombia",url:"https://lists.openstreetmap.org/pipermail/talk-co/",contacts:[{name:"Fredy Rivera",email:"fredyrivera@gmail.com"}]},"OSM-CO-telegram":{id:"OSM-CO-telegram",type:"telegram",featureId:"colombia",countryCodes:["co"],languageCodes:["es"],name:"OSM Colombia on Telegram",description:"OpenStreetMap Colombia Telegram chat",url:"https://telegram.me/osmco",contacts:[{name:"Fredy Rivera",email:"fredyrivera@gmail.com"}]},"OSM-CO-twitter":{id:"OSM-CO-twitter",featureId:"colombia",type:"twitter",name:"OpenStreetMap Colombia Twitter",countryCodes:["co"],languageCodes:["es"],description:"Follow us on Twitter at {url}",url:"https://twitter.com/OpenStreetMapCo",contacts:[{name:"Fredy Rivera",email:"fredyrivera@gmail.com"}]},"OSM-CO":{id:"OSM-CO",featureId:"colombia",type:"group",countryCodes:["co"],languageCodes:["es"],name:"OpenStreetMap Colombia",description:"News of the OpenStreetMap Colombia community and the OSMCo Foundation",url:"https://blog.openstreetmap.co/s657",contacts:[{name:"Fredy Rivera",email:"fredyrivera@gmail.com"}]},"ym-Universidad-de-Antioquia":{type:"youthmappers",name:"Geomatica UDEA",description:"YouthMappers chapter at Universidad de Antioquia",id:"ym-Universidad-de-Antioquia",featureId:"Universidad-de-Antioquia",contacts:[{name:"Organizer",email:"geomatica.ing.udea@gmail.com"}],extendedDescription:"We are a group interested in geospatial data, voluntary cartography, and participating in mapping with others in our country and within the YouthMappers network.",countryCodes:["co"],url:"mailto:geomatica.ing.udea@gmail.com?subject=YouthMappers%20y%20Universidad%20de%20Antioquia"},"ym-Universidad-de-La-Guajira":{type:"youthmappers",name:"Grupo Mesh",description:"YouthMappers chapter at Universidad de La Guajira",id:"ym-Universidad-de-La-Guajira",featureId:"Universidad-de-La-Guajira",contacts:[{name:"Organizer",email:"zoviedo@uniguajira.edu.co"}],extendedDescription:"Grupo Mesh is a student organization at the Universidad de la Guajira in Colombia, including students from the program of Environmental Engineering who learn cartography and open mapping.",countryCodes:["co"],url:"mailto:zoviedo@uniguajira.edu.co?subject=Grupo%20Mesh%20y%20YouthMappers"},"ym-Universidad-de-Los-Andes":{type:"youthmappers",name:"Cartografos Uniandes",description:"YouthMappers chapter at Universidad de Los Andes",id:"ym-Universidad-de-Los-Andes",featureId:"Universidad-de-Los-Andes",contacts:[{name:"Organizer",email:"geografia@uniandes.edu.co"}],extendedDescription:"We are a circle of student participation that seeks to use mapping and spatial reasoning as a means to create bonds of cooperation and integration between the university and society by addressing different spatial, social, political , economic and cultural dynamics.",countryCodes:["co"],url:"mailto:geografia@uniandes.edu.co?subject=Youth%20Mappers%20Chapter%20y%20la%20Universidad%20de%20los%20Andes"},"ym-Universidad-de-San-Buenaventura":{type:"youthmappers",name:"YouthMappers San Buenaventura",description:"YouthMappers chapter at Universidad de San Buenaventura",id:"ym-Universidad-de-San-Buenaventura",featureId:"Universidad-de-San-Buenaventura",contacts:[{name:"Organizer",email:"ingenieria.sistemas@usbmed.edu.co"}],extendedDescription:"We are pleased to join YouthMappers mapping for a better world and community.",countryCodes:["co"],url:"https://www.facebook.com/groups/1742657446017065/"},"ym-Universidad-Distrital-Francisco-Jose-de-Caldas":{type:"youthmappers",name:"YouthMappers at Bogota",description:"YouthMappers chapter at Universidad Distrital Francisco Jose de Caldas",id:"ym-Universidad-Distrital-Francisco-Jose-de-Caldas",featureId:"Universidad-Distrital-Francisco-Jose-de-Caldas",contacts:[{name:"Organizer",email:"lrocha@selper.org.co"}],extendedDescription:"The Universidad Distrital Francisco José de Caldas is a public, coeducational, research university based in Bogotá, Colombia with a population of 26,140 students.",countryCodes:["co"],url:"mailto:lrocha@selper.org.co"},"ym-Universidad-Nacional-de-Colombia":{type:"youthmappers",name:"Grupo UN",description:"YouthMappers chapter at Universidad Nacional de Colombia",id:"ym-Universidad-Nacional-de-Colombia",featureId:"Universidad-Nacional-de-Colombia",contacts:[{name:"Organizer",email:"raknudsono@unal.edu.co"}],extendedDescription:"Students are uniting to map and network with university students across the country of Colombia and across the globe. Geographic specialties include affiliation with microbiology and health disciplines.",countryCodes:["co"],url:"mailto:raknudsono@unal.edu.co?subject=Youth%20Mappers%20y%20Grupo%20UN%20Colombia"},"OSM-EC-telegram":{id:"OSM-EC-telegram",type:"telegram",featureId:"ecuador",languageCodes:["es"],countryCodes:["ec"],name:"OSM Ecuador on Telegram",description:"OpenStreetMap Ecuador Telegram chat",url:"https://telegram.me/MappingEcuador",contacts:[{name:"Talk-ec Owner",email:"talk-ec-owner@openstreetmap.org"}]},"OSM-PY-telegram":{id:"OSM-PY-telegram",type:"telegram",featureId:"paraguay",languageCodes:["es"],countryCodes:["py"],name:"OSM Paraguay on Telegram",description:"OpenStreetMap Paraguay Telegram chat",url:"https://telegram.me/osm_py",contacts:[{name:"Talk-py Owner",email:"talk-py-owner@openstreetmap.org"}]},"OSM-PE-facebook":{id:"OSM-PE-facebook",featureId:"peru",type:"facebook",name:"OpenStreetMap Peru Facebook",countryCodes:["pe"],languageCodes:["es"],description:"Join the OpenStreetMap Peru community on Facebook",url:"https://www.facebook.com/Osmpe",contacts:[{name:"Diego Sangunietti",email:"diego.sanguinetti@hotmail.com"},{name:"Ruben Lopez M.",email:"rub2106@gmail.com"}]},"OSM-PE-mailinglist":{id:"OSM-PE-mailinglist",featureId:"peru",type:"mailinglist",name:"Talk-pe Mailing List",countryCodes:["pe"],languageCodes:["es"],description:"The official mailing list for the OpenStreetMap Peru community",url:"https://lists.openstreetmap.org/pipermail/talk-pe/",contacts:[{name:"Diego Sangunietti",email:"diego.sanguinetti@hotmail.com"},{name:"Ruben Lopez M.",email:"rub2106@gmail.com"}]},"OSM-PE-matrix":{id:"OSM-PE-matrix",featureId:"peru",type:"matrix",name:"OpenStreetMap Peru Matrix Chat",countryCodes:["pe"],languageCodes:["es"],description:"Chat with other members of the OpenStreetMap Peru community in Matrix.",url:"https://matrix.to/#/#osmpe:matrix.org",contacts:[{name:"Diego Sangunietti",email:"diego.sanguinetti@hotmail.com"},{name:"Ruben Lopez M.",email:"rub2106@gmail.com"}]},"OSM-PE-telegram":{id:"OSM-PE-telegram",featureId:"peru",type:"telegram",name:"OpenStreetMap Peru Telegram",countryCodes:["pe"],languageCodes:["es"],description:"Join the OpenStreetMap Peru community on Telegram",url:"https://telegram.me/osmPe",contacts:[{name:"Diego Sangunietti",email:"diego.sanguinetti@hotmail.com"},{name:"Ruben Lopez M.",email:"rub2106@gmail.com"}]},"OSM-PE-twitter":{id:"OSM-PE-twitter",featureId:"peru",type:"twitter",name:"OpenStreetMap Peru Twitter",countryCodes:["pe"],languageCodes:["es"],description:"Follow us on Twitter at {url}",url:"https://twitter.com/osmpe",contacts:[{name:"Diego Sangunietti",email:"diego.sanguinetti@hotmail.com"},{name:"Ruben Lopez M.",email:"rub2106@gmail.com"}]},"OSM-PE":{id:"OSM-PE",featureId:"peru",type:"group",name:"OpenStreetMap Peru",countryCodes:["ar"],languageCodes:["es"],description:"News and resources for the OpenStreetMap Peru community",url:"http://osmpe.ourproject.org/",contacts:[{name:"Diego Sangunietti",email:"diego.sanguinetti@hotmail.com"},{name:"Ruben Lopez M.",email:"rub2106@gmail.com"}]},"LATAM-Facebook":{id:"LATAM-Facebook",featureId:"latam",type:"facebook",languageCodes:["es","pt"],name:"OpenStreetMap Latam Facebook",description:"OpenStreetMap Latam on Facebook",url:"https://www.facebook.com/osmlatam/",contacts:[{name:"OSM LATAM",email:"info@osmlatam.org"}]},"LATAM-Telegram":{id:"LATAM-Telegram",featureId:"latam",type:"telegram",languageCodes:["es","pt"],name:"OpenStreetMap Latam Telegram",description:"OpenStreetMap Telegram for Latin America",url:"https://t.me/OSMLatam",contacts:[{name:"OSM LATAM",email:"info@osmlatam.org"}]},"LATAM-Twitter":{id:"LATAM-Twitter",featureId:"latam",type:"twitter",languageCodes:["es","pt"],name:"OpenStreetMap Latam Twitter",description:"Follow us on Twitter at {url}",url:"https://twitter.com/osmlatam",contacts:[{name:"OSM LATAM",email:"info@osmlatam.org"}]},"osm-latam":{id:"osm-latam",featureId:"latam",type:"group",languageCodes:["es","pt"],name:"OpenStreetMap Latam",description:"Supporting OpenStreetMap in Latin America",url:"https://osmlatam.org/",contacts:[{name:"OSM LATAM",email:"info@osmlatam.org"}],events:[{id:"sotm-latam-2018",i18n:true,name:"State of the Map Latam 2018",description:"State of the Map Latam is the annual conference for all mappers and users of OpenStreetMap in Latin America. The program includes talks, panels, workshops, and mapathons related to OpenStreetMap.",where:"Buenos Aires, Argentina",when:"2018-sep-24",url:"https://state.osmlatam.org/"}]},"OSM-Discord":{id:"OSM-Discord",type:"discord",languageCodes:["en"],name:"OpenStreetMap Discord",description:"Get in touch with other mappers via Discord",url:"https://discord.gg/SRZUYUz",contacts:[{name:"Austin Harrison",email:"jaustinharrison@gmail.com"}]},"OSM-Facebook":{id:"OSM-Facebook",type:"facebook",languageCodes:["en"],name:"OpenStreetMap on Facebook",description:"Like us on Facebook for news and updates about OpenStreetMap.",url:"https://www.facebook.com/OpenStreetMap",contacts:[{name:"Harry Wood",email:"mail@harrywood.co.uk"}]},"OSM-help":{id:"OSM-help",type:"forum",languageCodes:["en"],name:"OpenStreetMap Help",description:"Ask a question and get answers on OSM's community-driven question and answer site.",extendedDescription:"{url} is for everyone who needs help with OpenStreetMap. Whether you are a beginner mapper or have a technical question, we're here to help!",url:"https://help.openstreetmap.org/",contacts:[{name:"OSMF Operations",email:"operations@osmfoundation.org"}]},"OSM-IRC":{id:"OSM-IRC",type:"irc",languageCodes:["en"],name:"OpenStreetMap IRC",description:"Join #osm on irc.oftc.net (port 6667)",url:"https://webchat.oftc.net/?channels=osm",contacts:[{name:"Harry Wood",email:"mail@harrywood.co.uk"}]},"OSM-Reddit":{id:"OSM-Reddit",type:"reddit",languageCodes:["en"],name:"OpenStreetMap on Reddit",description:"/r/openstreetmap/ is a great place to learn more about OpenStreetMap. Ask us anything!",url:"https://www.reddit.com/r/openstreetmap/",contacts:[{name:"Serge Wroclawski",email:"emacsen@gmail.com"}]},"OSM-Telegram":{id:"OSM-Telegram",type:"telegram",languageCodes:["en"],name:"OpenStreetMap Telegram",description:"Join the OpenStreetMap Telegram global supergroup at {url}",url:"https://t.me/OpenStreetMapOrg",contacts:[{name:"Max N",email:"abonnements@revolwear.com"}]},"OSM-Twitter":{id:"OSM-Twitter",type:"twitter",languageCodes:["en"],name:"OpenStreetMap Twitter",description:"Follow us on Twitter at {url}",url:"https://twitter.com/openstreetmap",contacts:[{name:"Harry Wood",email:"mail@harrywood.co.uk"}]},OSMF:{id:"OSMF",type:"group",languageCodes:["en","nl","fr","it","jp","ru"],name:"OpenStreetMap Foundation",description:"OSMF is a UK-based not-for-profit that supports the OpenStreetMap Project",extendedDescription:"OSMF supports the OpenStreetMap by fundraising, maintaining the servers which power OSM, organizing the annual State of the Map conference, and coordinating the volunteers who keep OSM running. You can show your support and have a voice in the direction of OpenStreetMap by joining as an OSMF member here: {signupUrl}",url:"https://wiki.osmfoundation.org/wiki/Main_Page",signupUrl:"https://join.osmfoundation.org/",contacts:[{name:"OSMF Board",email:"board@osmfoundation.org"}],events:[{id:"sotm2018",i18n:true,name:"State of the Map 2018",description:"Join us for 3 days in Milan, Italy for the annual worldwide OpenStreetMap conference, bringing together everyone in the community to socialize, share, and learn.",where:"Milan, Italy",when:"2018-jul-28",url:"https://2018.stateofthemap.org/"}]}};
24696 var dataImagery = [{id:"sjcgis.org-Aerials_2013_WM",name:"2013 aerial imagery for San Juan County WA",type:"tms",template:"https://sjcgis.org/arcgis/rest/services/Basemaps/Aerials_2013_WM/MapServer/tile/{zoom}/{y}/{x}",endDate:"2013-06-01T00:00:00.000Z",startDate:"2013-05-01T00:00:00.000Z",zoomExtent:[0,19],polygon:[[[-123.02167,48.44667],[-122.94666,48.44781],[-122.90151,48.41307],[-122.80263,48.40771],[-122.79199,48.4428],[-122.80881,48.47866],[-122.73912,48.49572],[-122.78547,48.62161],[-122.73088,48.63613],[-122.7556,48.71208],[-122.95747,48.71593],[-122.97086,48.69577],[-122.9997,48.6978],[-123.00348,48.73427],[-123.0433,48.7431],[-123.07626,48.70528],[-123.08485,48.66335],[-123.12845,48.6638],[-123.22698,48.70302],[-123.24655,48.68353],[-123.17445,48.64702],[-123.21514,48.60107],[-123.21393,48.57336],[-123.1808,48.56575],[-123.16621,48.52006],[-123.10235,48.47684],[-123.02167,48.44667]],[[-122.98339,48.78214],[-122.93498,48.76653],[-122.91181,48.73858],[-122.80229,48.73982],[-122.81946,48.75499],[-122.9343,48.79572],[-122.98374,48.79436],[-122.98339,48.78214]]],terms_url:"https://www.arcgis.com/home/item.html?id=7bf69831861d438d8365cf9f46662523",terms_text:"Pictometry Inc, San Juan County GIS",description:"Public domain aerial imagery taken in May/June 2013 from San Juan County, WA. Resolution is 9 inch."},{id:"sjcgis.org-Aerials_2016_WM",name:"2016 aerial imagery for San Juan County WA",type:"tms",template:"https://sjcgis.org/arcgis/rest/services/Basemaps/Aerials_2016_WM/MapServer/tile/{zoom}/{y}/{x}",endDate:"2016-07-01T00:00:00.000Z",startDate:"2016-05-01T00:00:00.000Z",zoomExtent:[0,19],polygon:[[[-123.02167,48.44667],[-122.94666,48.44781],[-122.90151,48.41307],[-122.80263,48.40771],[-122.79199,48.4428],[-122.80881,48.47866],[-122.73912,48.49572],[-122.78547,48.62161],[-122.73088,48.63613],[-122.7556,48.71208],[-122.95747,48.71593],[-122.97086,48.69577],[-122.9997,48.6978],[-123.00348,48.73427],[-123.0433,48.7431],[-123.07626,48.70528],[-123.08485,48.66335],[-123.12845,48.6638],[-123.22698,48.70302],[-123.24655,48.68353],[-123.17445,48.64702],[-123.21514,48.60107],[-123.21393,48.57336],[-123.1808,48.56575],[-123.16621,48.52006],[-123.10235,48.47684],[-123.02167,48.44667]],[[-122.98339,48.78214],[-122.93498,48.76653],[-122.91181,48.73858],[-122.80229,48.73982],[-122.81946,48.75499],[-122.9343,48.79572],[-122.98374,48.79436],[-122.98339,48.78214]]],best:true,description:"Public domain aerial imagery taken in May, June, and July from San Juan County, WA. Resolution is 6 inch countywide."},{id:"OS7",name:"7th Series (OS7)",type:"tms",template:"https://ooc.openstreetmap.org/os7/{zoom}/{x}/{y}.jpg",zoomExtent:[6,14],polygon:[[[-3.04697,54.83947],[-3.05864,55.24157],[-4.04466,55.23296],[-4.07076,55.63654],[-4.61904,55.6253],[-4.64926,56.02834],[-4.48961,56.03217],[-4.52394,56.4367],[-3.86751,56.44581],[-3.84176,56.04944],[-3.44591,56.04982],[-3.43492,55.64429],[-2.79497,55.65049],[-2.80802,56.05749],[-3.20661,56.05327],[-3.21417,56.45682],[-3.73808,56.45075],[-3.74185,56.86175],[-5.07669,56.83171],[-5.03652,56.42949],[-5.16012,56.42493],[-5.12991,56.01798],[-5.92607,55.99456],[-5.85518,55.23335],[-5.2281,55.25136],[-5.21024,55.02765],[-4.65956,55.04181],[-4.64548,54.81633],[-3.04697,54.83947]],[[-1.74835,57.76428],[-1.74065,57.36],[-2.58022,57.35537],[-2.57437,57.04526],[-2.08408,57.04799],[-2.07651,56.64276],[-2.7345,56.63906],[-2.73781,56.81718],[-3.23885,56.81437],[-3.24896,57.35168],[-3.75629,57.34889],[-3.76219,57.65868],[-4.76587,57.64473],[-4.81008,58.26984],[-5.2511,58.26547],[-5.27376,58.66767],[-3.55818,58.69887],[-3.56607,58.9316],[-3.37656,58.93444],[-3.38584,59.20171],[-3.18713,59.20215],[-3.18747,59.24176],[-3.06757,59.24203],[-3.07855,59.42135],[-2.37131,59.42763],[-2.36856,59.0222],[-2.67893,59.02078],[-2.67343,58.83935],[-2.86569,58.83651],[-2.8602,58.53531],[-3.03461,58.53316],[-3.0195,58.13159],[-3.6156,58.11982],[-3.61276,57.97754],[-3.71092,57.97562],[-3.69932,57.75364],[-1.74835,57.76428]],[[-7.07492,56.76319],[-7.73471,56.73566],[-7.7911,57.13994],[-7.70662,57.14343],[-7.76299,57.54311],[-7.60218,57.54968],[-7.62134,57.68452],[-7.72499,57.6803],[-7.73017,57.71673],[-7.60264,57.72191],[-7.59964,57.70083],[-7.48634,57.70544],[-7.49528,57.76813],[-7.37493,57.77301],[-7.39337,57.90201],[-7.23591,57.90838],[-7.24323,57.95948],[-7.13916,57.96369],[-7.14508,58.00495],[-7.23742,58.00122],[-7.23297,57.97018],[-7.31133,57.96702],[-7.31538,57.99525],[-7.24904,57.99792],[-7.28082,58.21856],[-7.07355,58.22687],[-7.0827,58.29018],[-6.80743,58.30119],[-6.82768,58.44074],[-6.50305,58.45366],[-6.51532,58.53792],[-6.16474,58.55184],[-6.10631,58.14894],[-6.33469,58.13976],[-6.27759,57.74145],[-6.96138,57.71366],[-6.93332,57.51615],[-7.10017,57.50933],[-7.05218,57.169],[-7.13111,57.16575],[-7.07492,56.76319]],[[0.41076,50.82087],[0.98102,50.80612],[0.99437,51.01173],[1.45062,50.99998],[1.47712,51.40552],[0.89619,51.42035],[0.88243,51.21039],[0.505,51.22007],[0.52273,51.49042],[-0.63397,51.51063],[-0.63671,51.44563],[-1.09951,51.45248],[-1.11485,51.04814],[-0.52987,51.0394],[-0.52751,51.10203],[0.42806,51.08778],[0.41076,50.82087]],[[-5.39457,51.9619],[-4.79581,51.98051],[-4.78873,51.89403],[-4.20265,51.91228],[-4.22941,52.23828],[-3.6552,52.25602],[-3.62228,51.85483],[-4.21342,51.8364],[-4.18551,51.49342],[-4.77661,51.47485],[-4.78476,51.57525],[-5.08799,51.56574],[-5.09422,51.64242],[-5.3678,51.63385],[-5.39457,51.9619]],[[-1.2389,54.03537],[-0.62779,54.02811],[-0.62004,54.25257],[-0.57268,54.25201],[-0.55865,54.65542],[-1.17998,54.66269],[-1.18782,54.43788],[-1.23221,54.4384],[-1.2389,54.03537]],[[-2.67227,50.97677],[-2.09961,50.98023],[-2.10572,51.37949],[-1.58877,51.38259],[-1.59499,51.78589],[-2.17563,51.78891],[-2.17154,51.38392],[-2.67846,51.38088],[-2.67227,50.97677]],[[-2.60155,53.27155],[-3.22973,53.2685],[-3.23522,53.67231],[-2.60704,53.67533],[-2.60155,53.27155]],[[-0.03942,51.7728],[-0.61563,51.77577],[-0.60465,52.58414],[-0.02843,52.58122],[-0.03942,51.7728]],[[-2.91529,54.03523],[-3.53229,54.02866],[-3.54484,54.43397],[-2.92785,54.44047],[-2.91529,54.03523]],[[-6.30583,57.19689],[-6.3539,57.60015],[-5.69111,57.62295],[-5.64305,57.21995],[-6.30583,57.19689]],[[1.17115,52.57236],[1.19865,52.97594],[1.79788,52.96106],[1.77037,52.55734],[1.17115,52.57236]],[[-2.40225,55.56317],[-2.40088,55.9657],[-1.76084,55.96501],[-1.76222,55.56248],[-2.40225,55.56317]],[[-6.32574,56.38537],[-7.0196,56.35747],[-7.07316,56.76384],[-6.3793,56.79145],[-6.32574,56.38537]],[[-2.42258,54.4431],[-2.42574,54.84188],[-1.79931,54.84354],[-1.79614,54.44477],[-2.42258,54.4431]],[[-3.02701,51.37935],[-3.60589,51.37017],[-3.62237,51.77304],[-3.04349,51.78215],[-3.02701,51.37935]],[[-3.05379,52.18979],[-3.06615,52.59374],[-2.48364,52.60034],[-2.47128,52.19646],[-3.05379,52.18979]],[[-5.67673,51.70425],[-5.67886,51.73101],[-5.4636,51.7376],[-5.46146,51.71084],[-5.67673,51.70425]],[[-5.84427,59.10882],[-5.8469,59.13578],[-5.79558,59.1371],[-5.79294,59.11014],[-5.84427,59.10882]],[[-8.64844,57.77861],[-8.66597,57.87717],[-8.46649,57.88721],[-8.44897,57.78867],[-8.64844,57.77861]],[[-4.52711,59.01532],[-4.52859,59.03319],[-4.47623,59.03434],[-4.47475,59.01646],[-4.52711,59.01532]],[[-7.68062,58.25838],[-7.68655,58.2938],[-7.53445,58.30084],[-7.52852,58.26542],[-7.68062,58.25838]],[[-6.19102,59.08009],[-6.19546,59.11586],[-6.12542,59.11815],[-6.12099,59.08238],[-6.19102,59.08009]],[[-4.42669,59.07112],[-4.42805,59.0887],[-4.37621,59.08976],[-4.37485,59.07218],[-4.42669,59.07112]]]},{id:"ACT2017",name:"ACTmapi Imagery 2017",type:"wms",template:"https://data.actmapi.act.gov.au/arcgis/rest/services/actmapi/imagery2017mga/ImageServer/exportImage?f=image&format=jpeg&imageSR=3857&bboxSR=3857&bbox={bbox}&size={width},{height}&foo={proj}",projection:"EPSG:3857",endDate:"2017-05-01T00:00:00.000Z",startDate:"2017-05-01T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[149.085,-35.1171],[149.1509,-35.1157],[149.1509,-35.1335],[149.1736,-35.1335],[149.1739,-35.1512],[149.1957,-35.1512],[149.1962,-35.1689],[149.2177,-35.1683],[149.2192,-35.2048],[149.241,-35.2043],[149.2419,-35.2223],[149.2632,-35.2222],[149.2644,-35.2575],[149.3085,-35.2571],[149.309,-35.2751],[149.3531,-35.2742],[149.3536,-35.2921],[149.3974,-35.2917],[149.3988,-35.3452],[149.3777,-35.3457],[149.3772,-35.3641],[149.3341,-35.3648],[149.3385,-35.5451],[149.1624,-35.5487],[149.1727,-35.9271],[149.0175,-35.9294],[149.0172,-35.9113],[148.9506,-35.9125],[148.9499,-35.8946],[148.9277,-35.8949],[148.9272,-35.8768],[148.9053,-35.8768],[148.9042,-35.8586],[148.8826,-35.859],[148.8805,-35.7695],[148.8361,-35.7698],[148.8359,-35.7521],[148.8138,-35.7524],[148.8131,-35.7343],[148.7909,-35.7347],[148.7911,-35.7167],[148.7688,-35.7167],[148.7617,-35.3924],[148.7839,-35.3921],[148.7822,-35.3022],[148.8041,-35.302],[148.8033,-35.2836],[148.8474,-35.2832],[148.8469,-35.2652],[148.8689,-35.2643],[148.8687,-35.2466],[148.9128,-35.246],[148.9123,-35.2282],[148.9341,-35.228],[148.9329,-35.1919],[148.999,-35.1904],[148.9986,-35.1724],[149.0206,-35.172],[149.0204,-35.154],[149.0637,-35.1532],[149.0635,-35.1355],[149.0857,-35.1348],[149.085,-35.1171]]],terms_url:"https://actmapi-actgov.opendata.arcgis.com/datasets/884456bde6fd46d68e0c05479f55d548",terms_text:"© Jacobs Group (Australia) Pty Ltd and Australian Capital Territory",icon:"http://actmapi.act.gov.au/img/apple-touch-icon.png"},{id:"ACT2018",name:"ACTmapi Imagery 2018",type:"wms",template:"https://data.actmapi.act.gov.au/arcgis/rest/services/actmapi/imagery2018mga/ImageServer/exportImage?f=image&format=jpeg&imageSR=3857&bboxSR=3857&bbox={bbox}&size={width},{height}&foo={proj}",projection:"EPSG:3857",endDate:"2018-03-19T00:00:00.000Z",startDate:"2018-03-19T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[149.2695,-35.4381],[149.2669,-35.348],[149.3329,-35.3468],[149.3334,-35.3648],[149.3774,-35.364],[149.3769,-35.3459],[149.3989,-35.3455],[149.3984,-35.3275],[149.4094,-35.3273],[149.4088,-35.3092],[149.3978,-35.3095],[149.3973,-35.2914],[149.3533,-35.2923],[149.3528,-35.2743],[149.3089,-35.2751],[149.3084,-35.2571],[149.2644,-35.2579],[149.2634,-35.2219],[149.2415,-35.2223],[149.241,-35.2043],[149.219,-35.2047],[149.218,-35.1687],[149.1961,-35.1691],[149.1956,-35.151],[149.1737,-35.1514],[149.1732,-35.1334],[149.1512,-35.1338],[149.1508,-35.1158],[149.085,-35.1169],[149.0854,-35.135],[149.0635,-35.1353],[149.0639,-35.1534],[149.0201,-35.1541],[149.0205,-35.1721],[148.9985,-35.1725],[148.999,-35.1905],[148.9331,-35.1916],[148.934,-35.2276],[148.912,-35.228],[148.9124,-35.246],[148.8685,-35.2467],[148.8689,-35.2647],[148.8469,-35.265],[148.8473,-35.2831],[148.8034,-35.2837],[148.8038,-35.3018],[148.7818,-35.3021],[148.7838,-35.3922],[148.8058,-35.3919],[148.8086,-35.5181],[148.7976,-35.5182],[148.7994,-35.5993],[148.8766,-35.5982],[148.8747,-35.517],[148.8527,-35.5174],[148.8508,-35.4363],[148.8398,-35.4364],[148.8388,-35.3914],[149.0039,-35.3888],[149.0048,-35.4248],[149.0268,-35.4244],[149.0277,-35.4605],[149.0497,-35.4601],[149.0511,-35.5142],[149.1613,-35.5122],[149.1594,-35.4402],[149.2695,-35.4381]]],terms_text:"© Jacobs Group (Australia) Pty Ltd and Australian Capital Territory",best:true,icon:"http://actmapi.act.gov.au/img/apple-touch-icon.png"},{id:"AGRI-black_and_white-2.5m",name:"AGRI black-and-white 2.5m",type:"tms",template:"https://{switch:a,b,c}.agri.openstreetmap.org/layer/au_ga_agri/{zoom}/{x}/{y}.png",endDate:"2011-01-01T00:00:00.000Z",startDate:"2006-01-01T00:00:00.000Z",zoomExtent:[0,16],polygon:[[[112.28778,-28.78459],[112.71488,-31.13894],[114.11263,-34.17829],[113.60788,-37.39012],[117.17992,-37.45179],[119.31538,-37.42096],[121.72262,-36.70839],[123.81925,-35.76893],[125.9547,-34.3066],[127.97368,-33.7274],[130.07031,-33.24166],[130.10913,-33.8887],[131.00214,-34.04971],[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.36829],[142.3783,-40.64702],[142.49478,-42.07487],[144.009,-44.06013],[147.23161,-44.03222],[149.05645,-42.53431],[149.52237,-40.99959],[149.9494,-40.85292],[150.8036,-38.09627],[151.81313,-38.12682],[156.20052,-22.66771],[156.20052,-20.10109],[156.62761,-17.41763],[155.26869,-17.19521],[154.14272,-19.51662],[153.5215,-18.34139],[153.05558,-16.5636],[152.78379,-15.25677],[152.27905,-13.4135],[151.3472,-12.39177],[149.48354,-12.05024],[146.9598,-9.99241],[135.9719,-9.99241],[130.3032,-10.33636],[128.09016,-12.16414],[125.91588,-12.31591],[124.3239,-11.86033],[122.03323,-11.97429],[118.26706,-16.9353],[115.93747,-19.11357],[114.0738,-21.11863],[113.49141,-22.59603],[112.28778,-28.78459]]],terms_url:"https://data.gov.au/dataset/agri-the-australian-geographic-reference-image",terms_text:"AGRI, Geoscience Australia"},{id:"AIV_DHMV_II_HILL_25cm",name:"AIV Digitaal Hoogtemodel Vlaanderen II, multidirectionale hillshade 0,25 m",type:"wms",template:"https://geoservices.informatievlaanderen.be/raadpleegdiensten/dhmv/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=DHMV_II_HILL_25cm&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",polygon:[[[5.98494,50.70723],[5.98494,50.7672],[5.91079,50.82275],[5.75561,50.83533],[5.75423,50.86264],[5.8332,50.93323],[5.85517,51.02661],[5.90941,51.07754],[5.91216,51.18225],[5.87851,51.20807],[5.77414,51.23689],[5.68419,51.24075],[5.62308,51.26998],[5.62308,51.29789],[5.54,51.34724],[5.4473,51.34853],[5.39855,51.32107],[5.31203,51.32322],[5.26671,51.36182],[5.19942,51.37254],[5.18294,51.39611],[5.15891,51.4924],[5.08338,51.53086],[5.03257,51.53983],[4.95566,51.50522],[4.90142,51.50565],[4.83825,51.54367],[4.77096,51.55862],[4.7119,51.54709],[4.64049,51.49667],[4.6144,51.4971],[4.56565,51.53171],[4.48256,51.53043],[4.42626,51.52189],[4.3006,51.46974],[4.29511,51.42566],[4.18113,51.42437],[4.13718,51.39525],[4.13856,51.35067],[4.05204,51.30047],[3.93325,51.27298],[3.86527,51.27084],[3.86321,51.29016],[3.76296,51.32407],[3.59336,51.35925],[3.47732,51.33137],[3.42582,51.39739],[3.23562,51.35153],[3.226,51.36568],[3.17794,51.36182],[3.16009,51.33223],[3.06258,51.30219],[2.75084,51.1702],[2.47001,51.07452],[2.49267,50.99378],[2.53112,50.95573],[2.50915,50.91159],[2.53043,50.82145],[2.5991,50.76416],[2.66501,50.76459],[2.77007,50.66677],[2.8971,50.65894],[2.99186,50.72549],[3.11339,50.72636],[3.23699,50.70592],[3.36265,50.6585],[3.47114,50.70201],[3.63936,50.66721],[3.69842,50.68156],[3.72794,50.71245],[3.81858,50.68418],[3.87488,50.64152],[4.09255,50.64283],[4.15023,50.66329],[4.20653,50.64413],[4.31365,50.64283],[4.45235,50.68766],[4.53475,50.67808],[4.61303,50.69549],[4.67689,50.69592],[4.72701,50.73201],[4.78057,50.73201],[4.79979,50.71288],[4.86228,50.71288],[4.88563,50.69549],[4.96116,50.69549],[5.03119,50.65763],[5.10741,50.65023],[5.2008,50.64892],[5.23581,50.66546],[5.32508,50.6659],[5.36696,50.682],[5.42121,50.66416],[5.52215,50.6746],[5.6224,50.72418],[5.67527,50.69853],[5.73981,50.69723],[5.77277,50.67199],[5.8126,50.66024],[5.90804,50.65981],[5.98494,50.70723]]],terms_text:"© agentschap Informatie Vlaanderen",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/BE_GRB_Flanders_TMS.png"},{id:"AIV_DHMV_II_SVF_25cm",name:"AIV Digitaal Hoogtemodel Vlaanderen II, Skyview factor 0,25 m",type:"wms",template:"https://geoservices.informatievlaanderen.be/raadpleegdiensten/dhmv/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=DHMV_II_SVF_25cm&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",polygon:[[[5.98494,50.70723],[5.98494,50.7672],[5.91079,50.82275],[5.75561,50.83533],[5.75423,50.86264],[5.8332,50.93323],[5.85517,51.02661],[5.90941,51.07754],[5.91216,51.18225],[5.87851,51.20807],[5.77414,51.23689],[5.68419,51.24075],[5.62308,51.26998],[5.62308,51.29789],[5.54,51.34724],[5.4473,51.34853],[5.39855,51.32107],[5.31203,51.32322],[5.26671,51.36182],[5.19942,51.37254],[5.18294,51.39611],[5.15891,51.4924],[5.08338,51.53086],[5.03257,51.53983],[4.95566,51.50522],[4.90142,51.50565],[4.83825,51.54367],[4.77096,51.55862],[4.7119,51.54709],[4.64049,51.49667],[4.6144,51.4971],[4.56565,51.53171],[4.48256,51.53043],[4.42626,51.52189],[4.3006,51.46974],[4.29511,51.42566],[4.18113,51.42437],[4.13718,51.39525],[4.13856,51.35067],[4.05204,51.30047],[3.93325,51.27298],[3.86527,51.27084],[3.86321,51.29016],[3.76296,51.32407],[3.59336,51.35925],[3.47732,51.33137],[3.42582,51.39739],[3.23562,51.35153],[3.226,51.36568],[3.17794,51.36182],[3.16009,51.33223],[3.06258,51.30219],[2.75084,51.1702],[2.47001,51.07452],[2.49267,50.99378],[2.53112,50.95573],[2.50915,50.91159],[2.53043,50.82145],[2.5991,50.76416],[2.66501,50.76459],[2.77007,50.66677],[2.8971,50.65894],[2.99186,50.72549],[3.11339,50.72636],[3.23699,50.70592],[3.36265,50.6585],[3.47114,50.70201],[3.63936,50.66721],[3.69842,50.68156],[3.72794,50.71245],[3.81858,50.68418],[3.87488,50.64152],[4.09255,50.64283],[4.15023,50.66329],[4.20653,50.64413],[4.31365,50.64283],[4.45235,50.68766],[4.53475,50.67808],[4.61303,50.69549],[4.67689,50.69592],[4.72701,50.73201],[4.78057,50.73201],[4.79979,50.71288],[4.86228,50.71288],[4.88563,50.69549],[4.96116,50.69549],[5.03119,50.65763],[5.10741,50.65023],[5.2008,50.64892],[5.23581,50.66546],[5.32508,50.6659],[5.36696,50.682],[5.42121,50.66416],[5.52215,50.6746],[5.6224,50.72418],[5.67527,50.69853],[5.73981,50.69723],[5.77277,50.67199],[5.8126,50.66024],[5.90804,50.65981],[5.98494,50.70723]]],terms_text:"© agentschap Informatie Vlaanderen",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/BE_GRB_Flanders_TMS.png"},{id:"AGIV10cm",name:"AIV Flanders 2013-2015 aerial imagery 10cm",type:"wms",template:"https://geoservices.informatievlaanderen.be/raadpleegdiensten/OGW/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=OGWRGB13_15VL&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",polygon:[[[5.98494,50.70723],[5.98494,50.7672],[5.91079,50.82275],[5.75561,50.83533],[5.75423,50.86264],[5.8332,50.93323],[5.85517,51.02661],[5.90941,51.07754],[5.91216,51.18225],[5.87851,51.20807],[5.77414,51.23689],[5.68419,51.24075],[5.62308,51.26998],[5.62308,51.29789],[5.54,51.34724],[5.4473,51.34853],[5.39855,51.32107],[5.31203,51.32322],[5.26671,51.36182],[5.19942,51.37254],[5.18294,51.39611],[5.15891,51.4924],[5.08338,51.53086],[5.03257,51.53983],[4.95566,51.50522],[4.90142,51.50565],[4.83825,51.54367],[4.77096,51.55862],[4.7119,51.54709],[4.64049,51.49667],[4.6144,51.4971],[4.56565,51.53171],[4.48256,51.53043],[4.42626,51.52189],[4.3006,51.46974],[4.29511,51.42566],[4.18113,51.42437],[4.13718,51.39525],[4.13856,51.35067],[4.05204,51.30047],[3.93325,51.27298],[3.86527,51.27084],[3.86321,51.29016],[3.76296,51.32407],[3.59336,51.35925],[3.47732,51.33137],[3.42582,51.39739],[3.23562,51.35153],[3.226,51.36568],[3.17794,51.36182],[3.16009,51.33223],[3.06258,51.30219],[2.75084,51.1702],[2.47001,51.07452],[2.49267,50.99378],[2.53112,50.95573],[2.50915,50.91159],[2.53043,50.82145],[2.5991,50.76416],[2.66501,50.76459],[2.77007,50.66677],[2.8971,50.65894],[2.99186,50.72549],[3.11339,50.72636],[3.23699,50.70592],[3.36265,50.6585],[3.47114,50.70201],[3.63936,50.66721],[3.69842,50.68156],[3.72794,50.71245],[3.81858,50.68418],[3.87488,50.64152],[4.09255,50.64283],[4.15023,50.66329],[4.20653,50.64413],[4.31365,50.64283],[4.45235,50.68766],[4.53475,50.67808],[4.61303,50.69549],[4.67689,50.69592],[4.72701,50.73201],[4.78057,50.73201],[4.79979,50.71288],[4.86228,50.71288],[4.88563,50.69549],[4.96116,50.69549],[5.03119,50.65763],[5.10741,50.65023],[5.2008,50.64892],[5.23581,50.66546],[5.32508,50.6659],[5.36696,50.682],[5.42121,50.66416],[5.52215,50.6746],[5.6224,50.72418],[5.67527,50.69853],[5.73981,50.69723],[5.77277,50.67199],[5.8126,50.66024],[5.90804,50.65981],[5.98494,50.70723]]],terms_text:"© agentschap Informatie Vlaanderen",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/BE_GRB_Flanders_TMS.png"},{id:"AGIVFlandersGRB",name:"AIV Flanders GRB",type:"tms",template:"https://tile.informatievlaanderen.be/ws/raadpleegdiensten/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=grb_bsk&STYLE=&FORMAT=image/png&tileMatrixSet=GoogleMapsVL&tileMatrix={zoom}&tileRow={y}&tileCol={x}",zoomExtent:[0,21],polygon:[[[4.40434,50.78177],[4.45538,50.79328],[4.40268,50.8961],[4.331,50.90094],[4.27142,50.82002],[4.30648,50.81244],[4.36348,50.77251],[4.40434,50.78177],[4.43104,50.73831],[4.31859,50.72022],[4.29031,50.69402],[4.14853,50.72834],[3.95877,50.68947],[3.9097,50.69245],[3.89113,50.74333],[3.77568,50.74789],[3.75857,50.78045],[3.67752,50.77062],[3.64047,50.72242],[3.54139,50.73377],[3.54062,50.76307],[3.46005,50.76556],[3.3522,50.70614],[3.30562,50.75466],[3.17839,50.75609],[3.15329,50.78564],[3.02008,50.77312],[2.99943,50.81035],[2.91648,50.75356],[2.85476,50.75745],[2.86521,50.70565],[2.78473,50.7369],[2.713,50.81534],[2.63518,50.8129],[2.59909,50.85306],[2.59031,50.91893],[2.63262,50.94575],[2.57372,51.00842],[2.54165,51.09345],[3.15582,51.32714],[3.18307,51.37128],[3.23443,51.34669],[3.36356,51.37228],[3.38101,51.27446],[3.44201,51.24313],[3.52759,51.24604],[3.51511,51.28753],[3.58984,51.30577],[3.7783,51.26235],[3.79088,51.21429],[3.92412,51.21938],[4.16613,51.2929],[4.26163,51.37647],[4.42065,51.36473],[4.39108,51.45149],[4.54747,51.48571],[4.53541,51.42303],[4.64953,51.42758],[4.76359,51.5088],[4.84188,51.48074],[4.8383,51.42174],[4.89366,51.41698],[4.92785,51.39544],[5.02894,51.48789],[5.08018,51.46948],[5.10202,51.42892],[5.07117,51.3935],[5.13109,51.35137],[5.13448,51.31547],[5.20031,51.32172],[5.24189,51.30534],[5.23036,51.26436],[5.34828,51.27492],[5.41741,51.26229],[5.4863,51.30197],[5.5556,51.26986],[5.56045,51.22233],[5.76027,51.18505],[5.85578,51.14463],[5.75909,51.03588],[5.72665,50.91307],[5.64522,50.8372],[5.68732,50.804],[5.47863,50.72352],[5.41196,50.72368],[5.38908,50.74775],[5.30912,50.71802],[5.16984,50.72257],[5.16508,50.6957],[5.05642,50.71567],[5.00339,50.76594],[4.92545,50.74275],[4.90869,50.76968],[4.83106,50.77028],[4.76014,50.80544],[4.64309,50.79755],[4.65486,50.7552],[4.62021,50.74348],[4.59727,50.76359],[4.52399,50.72724],[4.49455,50.75679],[4.43104,50.73831],[4.40434,50.78177]],[[5.67393,50.75373],[5.88438,50.70114],[5.94172,50.76524],[5.76662,50.78761],[5.67393,50.75373]],[[4.91171,51.43492],[4.93711,51.42614],[4.95891,51.45471],[4.92801,51.46049],[4.91171,51.43492]]],terms_text:"© agentschap Informatie Vlaanderen",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/BE_GRB_Flanders_TMS.png"},{id:"AGIV",name:"AIV Flanders most recent aerial imagery",type:"tms",template:"https://tile.informatievlaanderen.be/ws/raadpleegdiensten/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=omwrgbmrvl&STYLE=&FORMAT=image/png&tileMatrixSet=GoogleMapsVL&tileMatrix={zoom}&tileRow={y}&tileCol={x}",zoomExtent:[0,21],polygon:[[[4.7737,50.79368],[4.8379,50.75916],[4.92511,50.73483],[4.98862,50.76264],[5.036,50.73527],[5.0645,50.69875],[5.1644,50.69005],[5.19393,50.71179],[5.3086,50.71245],[5.36422,50.74396],[5.43391,50.70766],[5.54378,50.74396],[5.61141,50.73527],[5.71166,50.73505],[5.77105,50.74092],[5.81946,50.70484],[5.89568,50.70614],[5.9204,50.72831],[5.91971,50.74504],[5.89843,50.77675],[5.81569,50.76351],[5.77517,50.79216],[5.69552,50.79737],[5.69072,50.82319],[5.66325,50.82904],[5.65467,50.86481],[5.72368,50.9012],[5.77174,50.95443],[5.75114,50.97368],[5.78273,51.00048],[5.78032,51.0523],[5.80848,51.05338],[5.80951,51.07668],[5.84315,51.09372],[5.84418,51.1101],[5.82599,51.11851],[5.86959,51.14953],[5.8277,51.17365],[5.792,51.16891],[5.7738,51.19344],[5.666,51.1928],[5.64059,51.21065],[5.5709,51.22829],[5.56231,51.27535],[5.49811,51.30605],[5.47099,51.30219],[5.45794,51.2893],[5.43048,51.28823],[5.41434,51.27363],[5.36593,51.282],[5.33641,51.28265],[5.32577,51.26718],[5.24337,51.27406],[5.24989,51.31335],[5.20972,51.32794],[5.14174,51.31914],[5.14209,51.35367],[5.08647,51.39482],[5.11565,51.43615],[5.08853,51.47508],[5.05214,51.47636],[5.04561,51.4939],[5.02364,51.4939],[5.01609,51.48663],[4.82966,51.48663],[4.83001,51.50009],[4.76855,51.51099],[4.74727,51.50394],[4.658,51.4492],[4.65663,51.43144],[4.53956,51.43379],[4.55466,51.48171],[4.5296,51.48748],[4.46368,51.48235],[4.37167,51.45562],[4.37751,51.40553],[4.4139,51.37511],[4.39776,51.36118],[4.34798,51.36675],[4.34627,51.38497],[4.20344,51.38111],[4.2213,51.3511],[4.15641,51.29832],[4.05101,51.25193],[4.00638,51.25279],[3.95144,51.22205],[3.88484,51.22936],[3.81926,51.21797],[3.80038,51.22872],[3.80107,51.26074],[3.74442,51.28007],[3.63593,51.29746],[3.58615,51.31378],[3.5065,51.28308],[3.51371,51.25021],[3.43921,51.25064],[3.39766,51.27513],[3.37329,51.31678],[3.39114,51.34274],[3.3623,51.37961],[3.24283,51.35474],[3.20266,51.37039],[3.15631,51.35196],[3.14223,51.33051],[2.53318,51.09092],[2.56476,50.9968],[2.61832,50.9527],[2.57781,50.91852],[2.5936,50.88431],[2.58948,50.85051],[2.6245,50.80757],[2.71033,50.8054],[2.78449,50.71853],[2.87375,50.69983],[2.86483,50.74765],[2.92525,50.75156],[2.97263,50.77024],[2.97332,50.79889],[3.00078,50.79759],[3.01383,50.76676],[3.09863,50.76611],[3.13537,50.78196],[3.16832,50.75004],[3.30428,50.74613],[3.31561,50.71484],[3.3678,50.70179],[3.44848,50.75091],[3.53293,50.75156],[3.53328,50.72549],[3.63902,50.7131],[3.69086,50.7672],[3.75163,50.76177],[3.7712,50.73874],[3.87729,50.73983],[3.87969,50.70418],[3.9202,50.68352],[3.99951,50.682],[4.06749,50.68961],[4.16018,50.72049],[4.17632,50.70331],[4.24739,50.68222],[4.31708,50.69418],[4.31846,50.70962],[4.38403,50.71027],[4.38437,50.72353],[4.47226,50.74743],[4.52617,50.71853],[4.55226,50.73766],[4.64908,50.73722],[4.6532,50.78717],[4.72426,50.78218],[4.73731,50.79585],[4.7737,50.79368]]],terms_text:"© agentschap Informatie Vlaanderen",best:true,icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/BE_GRB_Flanders_TMS.png"},{id:"alagoas_litoral",name:"Alagoas Litoral 2006",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Ortofotos%202006&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-35.52384,-9.48089],[-35.5236,-9.44515],[-35.51572,-9.44518],[-35.51584,-9.44229],[-35.50542,-9.44238],[-35.50518,-9.43064],[-35.49334,-9.43073],[-35.49304,-9.3982],[-35.4893,-9.39817],[-35.48921,-9.38628],[-35.4854,-9.38634],[-35.48525,-9.37809],[-35.48127,-9.37812],[-35.48114,-9.36987],[-35.47698,-9.36996],[-35.47686,-9.36385],[-35.47459,-9.36388],[-35.47447,-9.36153],[-35.47212,-9.36141],[-35.47206,-9.35917],[-35.46976,-9.3592],[-35.46967,-9.35682],[-35.46653,-9.35676],[-35.46641,-9.35289],[-35.46387,-9.35277],[-35.46387,-9.35119],[-35.44135,-9.35131],[-35.44125,-9.34541],[-35.43177,-9.34538],[-35.43171,-9.33602],[-35.39463,-9.33632],[-35.39442,-9.30125],[-35.38165,-9.30143],[-35.38147,-9.28638],[-35.37799,-9.28626],[-35.37796,-9.2811],[-35.36942,-9.28122],[-35.36921,-9.27261],[-35.35966,-9.27276],[-35.35969,-9.26465],[-35.35051,-9.26474],[-35.35036,-9.25562],[-35.34115,-9.25565],[-35.34118,-9.24501],[-35.31775,-9.24519],[-35.3176,-9.22567],[-35.30292,-9.22579],[-35.30283,-9.2113],[-35.30794,-9.21136],[-35.30785,-9.19979],[-35.29103,-9.19988],[-35.29091,-9.1966],[-35.29018,-9.19669],[-35.28997,-9.16516],[-35.27759,-9.16522],[-35.2775,-9.16417],[-35.27541,-9.1642],[-35.27535,-9.16152],[-35.27375,-9.16149],[-35.27366,-9.15839],[-35.27182,-9.15842],[-35.27185,-9.15729],[-35.27149,-9.15729],[-35.27143,-9.15469],[-35.26965,-9.15463],[-35.26959,-9.15362],[-35.26919,-9.15362],[-35.26907,-9.13159],[-35.26403,-9.13165],[-35.264,-9.12318],[-35.26056,-9.12321],[-35.26053,-9.11781],[-35.256,-9.11784],[-35.25573,-9.08946],[-35.25114,-9.08955],[-35.25108,-9.08651],[-35.25026,-9.08648],[-35.25029,-9.08475],[-35.24449,-9.08478],[-35.24449,-9.07989],[-35.24093,-9.07997],[-35.24081,-9.07312],[-35.23734,-9.07312],[-35.23719,-9.06322],[-35.23655,-9.06322],[-35.23652,-9.04655],[-35.23323,-9.04652],[-35.23332,-9.04345],[-35.2306,-9.04348],[-35.2306,-9.04014],[-35.22897,-9.04008],[-35.229,-9.03835],[-35.22505,-9.03826],[-35.22502,-9.03167],[-35.2223,-9.03161],[-35.22233,-9.02012],[-35.21834,-9.02009],[-35.21831,-9.01341],[-35.21671,-9.01341],[-35.21668,-9.00998],[-35.21176,-9.00998],[-35.21173,-9.00647],[-35.20971,-9.00653],[-35.20974,-9.00438],[-35.20765,-9.00432],[-35.20768,-9.00226],[-35.20566,-9.00226],[-35.20563,-8.99987],[-35.20391,-8.99987],[-35.20394,-8.99785],[-35.20213,-8.99791],[-35.20213,-8.99579],[-35.19844,-8.99582],[-35.19844,-8.99361],[-35.19434,-8.99361],[-35.19428,-8.99122],[-35.19065,-8.99131],[-35.19062,-8.98833],[-35.18766,-8.98842],[-35.18763,-8.98544],[-35.18473,-8.98541],[-35.18467,-8.98255],[-35.18238,-8.98252],[-35.18235,-8.98052],[-35.17951,-8.98061],[-35.17948,-8.97742],[-35.17809,-8.97745],[-35.17803,-8.97306],[-35.17558,-8.97303],[-35.17549,-8.96912],[-35.17293,-8.96909],[-35.17284,-8.96292],[-35.17063,-8.96289],[-35.17048,-8.95579],[-35.16852,-8.95564],[-35.16852,-8.94806],[-35.16794,-8.948],[-35.16791,-8.93995],[-35.16245,-8.93995],[-35.16242,-8.92978],[-35.1587,-8.92981],[-35.15873,-8.92662],[-35.15547,-8.92668],[-35.1555,-8.92378],[-35.15348,-8.92381],[-35.15339,-8.92065],[-35.15131,-8.92062],[-35.15122,-8.91194],[-35.15263,-8.91194],[-35.15263,-8.90821],[-35.15439,-8.90824],[-35.1543,-8.90215],[-35.15593,-8.90212],[-35.15593,-8.90051],[-35.15768,-8.90048],[-35.15774,-8.89905],[-35.15958,-8.89908],[-35.15955,-8.89747],[-35.16139,-8.8975],[-35.16133,-8.89625],[-35.16363,-8.89625],[-35.1636,-8.89526],[-35.16553,-8.89526],[-35.1655,-8.89315],[-35.16794,-8.89315],[-35.16791,-8.89147],[-35.17024,-8.89153],[-35.17027,-8.8904],[-35.17302,-8.89043],[-35.17302,-8.88876],[-35.17791,-8.88876],[-35.17794,-8.88795],[-35.17894,-8.88792],[-35.17894,-8.88891],[-35.17966,-8.88894],[-35.17978,-8.88858],[-35.18099,-8.88861],[-35.18099,-8.88816],[-35.18519,-8.88816],[-35.18519,-8.88897],[-35.18591,-8.889],[-35.18591,-8.88971],[-35.18932,-8.88971],[-35.18947,-8.8893],[-35.19014,-8.88927],[-35.19017,-8.88831],[-35.19071,-8.88831],[-35.19077,-8.88789],[-35.19153,-8.88792],[-35.19156,-8.88619],[-35.19754,-8.88607],[-35.19757,-8.8873],[-35.19968,-8.8873],[-35.19974,-8.88777],[-35.2008,-8.88777],[-35.2008,-8.88822],[-35.2033,-8.88822],[-35.20337,-8.8887],[-35.20563,-8.88861],[-35.20557,-8.88983],[-35.20741,-8.8898],[-35.20744,-8.89022],[-35.21125,-8.89025],[-35.21128,-8.88769],[-35.21245,-8.88777],[-35.21248,-8.88861],[-35.21623,-8.88858],[-35.21623,-8.88748],[-35.21871,-8.88745],[-35.21871,-8.88897],[-35.22136,-8.88897],[-35.22263,-8.88792],[-35.22402,-8.88748],[-35.22453,-8.88763],[-35.22644,-8.88718],[-35.22707,-8.88598],[-35.23311,-8.88446],[-35.23933,-8.88339],[-35.24129,-8.88416],[-35.25011,-8.88515],[-35.25624,-8.88506],[-35.26168,-8.88294],[-35.26161,-8.88094],[-35.26406,-8.88109],[-35.26877,-8.8793],[-35.27421,-8.87748],[-35.2781,-8.87518],[-35.28499,-8.87507],[-35.28502,-8.87581],[-35.2881,-8.87578],[-35.29405,-8.87545],[-35.30782,-8.87208],[-35.31757,-8.86961],[-35.32784,-8.86716],[-35.33206,-8.86614],[-35.34103,-8.86376],[-35.3471,-8.86244],[-35.3522,-8.86113],[-35.35257,-8.86391],[-35.34903,-8.86611],[-35.34496,-8.87205],[-35.34327,-8.87489],[-35.34318,-8.87569],[-35.34381,-8.87668],[-35.34481,-8.8768],[-35.34888,-8.87721],[-35.35042,-8.87781],[-35.35254,-8.87891],[-35.35399,-8.88011],[-35.35577,-8.88252],[-35.35755,-8.88396],[-35.36036,-8.88512],[-35.36114,-8.88509],[-35.3612,-8.88587],[-35.36175,-8.8859],[-35.36178,-8.88777],[-35.36253,-8.88783],[-35.36247,-8.891],[-35.36311,-8.89112],[-35.36311,-8.89482],[-35.3644,-8.89488],[-35.36507,-8.8967],[-35.36637,-8.90022],[-35.36754,-8.90427],[-35.36794,-8.90782],[-35.36863,-8.90917],[-35.37207,-8.91155],[-35.3741,-8.91349],[-35.37277,-8.916],[-35.37262,-8.91817],[-35.37084,-8.92229],[-35.37062,-8.92486],[-35.37235,-8.93038],[-35.37153,-8.93193],[-35.37153,-8.93363],[-35.37171,-8.93387],[-35.37171,-8.94362],[-35.36818,-8.94377],[-35.36815,-8.94505],[-35.36927,-8.94511],[-35.36921,-8.94863],[-35.37078,-8.94872],[-35.37081,-8.95182],[-35.37219,-8.95176],[-35.37222,-8.95528],[-35.37319,-8.95531],[-35.37313,-8.95737],[-35.3744,-8.95737],[-35.37446,-8.96012],[-35.37567,-8.96018],[-35.3757,-8.96205],[-35.37688,-8.96208],[-35.37694,-8.96444],[-35.37781,-8.96444],[-35.37775,-8.96617],[-35.38074,-8.96617],[-35.38074,-8.96331],[-35.38288,-8.96328],[-35.38291,-8.95982],[-35.38542,-8.95985],[-35.38542,-8.95722],[-35.38723,-8.95722],[-35.3872,-8.95406],[-35.38947,-8.95409],[-35.38947,-8.95084],[-35.39158,-8.95087],[-35.39158,-8.94792],[-35.39587,-8.94792],[-35.39581,-8.94651],[-35.3972,-8.94654],[-35.39711,-8.94472],[-35.39838,-8.94469],[-35.39838,-8.93915],[-35.40107,-8.93915],[-35.40106,-8.93895],[-35.40167,-8.93894],[-35.40173,-8.93688],[-35.40236,-8.93688],[-35.40236,-8.93628],[-35.40324,-8.9364],[-35.4033,-8.93583],[-35.40426,-8.9358],[-35.4042,-8.93363],[-35.40574,-8.9336],[-35.40577,-8.93124],[-35.4081,-8.93133],[-35.40804,-8.92927],[-35.40937,-8.9293],[-35.40928,-8.92739],[-35.41085,-8.92742],[-35.41085,-8.92542],[-35.41239,-8.92545],[-35.41236,-8.9239],[-35.41335,-8.92387],[-35.41329,-8.92193],[-35.41523,-8.92196],[-35.41523,-8.91999],[-35.41655,-8.92002],[-35.41655,-8.91755],[-35.4196,-8.91755],[-35.41966,-8.91964],[-35.42184,-8.91964],[-35.42187,-8.92265],[-35.42389,-8.92268],[-35.42392,-8.92513],[-35.42537,-8.92513],[-35.42537,-8.92766],[-35.42724,-8.92766],[-35.42727,-8.92987],[-35.42815,-8.92984],[-35.42818,-8.9316],[-35.42987,-8.93154],[-35.4299,-8.93407],[-35.43141,-8.93407],[-35.43141,-8.9356],[-35.43226,-8.93557],[-35.43229,-8.93586],[-35.4334,-8.93583],[-35.4334,-8.94001],[-35.43434,-8.94004],[-35.43434,-8.94097],[-35.43531,-8.94097],[-35.43534,-8.94261],[-35.43567,-8.94264],[-35.4357,-8.94329],[-35.43627,-8.94332],[-35.43624,-8.94422],[-35.4373,-8.94422],[-35.43727,-8.9452],[-35.43823,-8.9452],[-35.43827,-8.94684],[-35.43902,-8.94687],[-35.43902,-8.94798],[-35.44026,-8.94798],[-35.44032,-8.94953],[-35.44159,-8.94956],[-35.44165,-8.95152],[-35.44273,-8.95152],[-35.44273,-8.95334],[-35.44436,-8.95334],[-35.44436,-8.95498],[-35.44569,-8.95501],[-35.44563,-8.95674],[-35.4472,-8.9568],[-35.44717,-8.95865],[-35.44895,-8.95871],[-35.44892,-8.96],[-35.45101,-8.95994],[-35.45098,-8.96101],[-35.45469,-8.96095],[-35.45466,-8.96235],[-35.46049,-8.96235],[-35.46055,-8.96557],[-35.46653,-8.96548],[-35.46659,-8.96885],[-35.46771,-8.96883],[-35.46774,-8.97053],[-35.4739,-8.97053],[-35.47399,-8.9753],[-35.47791,-8.97521],[-35.47797,-8.97816],[-35.4841,-8.97813],[-35.48416,-8.98201],[-35.49084,-8.98195],[-35.49084,-8.98562],[-35.49721,-8.98562],[-35.49721,-8.99069],[-35.50225,-8.99057],[-35.50234,-8.99567],[-35.50648,-8.99567],[-35.50651,-8.99856],[-35.51204,-8.9985],[-35.51207,-9.00163],[-35.51663,-9.00166],[-35.51666,-9.00617],[-35.52119,-9.00614],[-35.52122,-9.00739],[-35.53127,-9.00733],[-35.53127,-9.01064],[-35.54818,-9.01049],[-35.54818,-9.01359],[-35.56968,-9.01344],[-35.56974,-9.01738],[-35.58575,-9.01732],[-35.58578,-9.01995],[-35.60957,-9.01983],[-35.60954,-9.02302],[-35.62911,-9.02287],[-35.62905,-9.02508],[-35.65221,-9.0249],[-35.65224,-9.02758],[-35.67552,-9.0274],[-35.67555,-9.03056],[-35.68295,-9.03056],[-35.68298,-9.03435],[-35.69128,-9.03432],[-35.69128,-9.03766],[-35.6995,-9.0376],[-35.6995,-9.04034],[-35.70668,-9.04031],[-35.70671,-9.04518],[-35.71115,-9.04518],[-35.71133,-9.06691],[-35.70871,-9.06691],[-35.70877,-9.07869],[-35.70656,-9.07872],[-35.70656,-9.08653],[-35.7043,-9.08653],[-35.70433,-9.09104],[-35.69992,-9.09107],[-35.69989,-9.0956],[-35.69536,-9.09557],[-35.69542,-9.10001],[-35.69092,-9.10013],[-35.69101,-9.10207],[-35.63367,-9.10246],[-35.6337,-9.10541],[-35.62585,-9.10553],[-35.62591,-9.10964],[-35.62231,-9.10964],[-35.62234,-9.11203],[-35.6199,-9.112],[-35.6199,-9.11501],[-35.61473,-9.11507],[-35.61473,-9.11707],[-35.61177,-9.11701],[-35.61181,-9.1182],[-35.6096,-9.11826],[-35.60963,-9.12571],[-35.59976,-9.12583],[-35.59979,-9.12923],[-35.59634,-9.12926],[-35.5964,-9.13502],[-35.59197,-9.13507],[-35.59209,-9.149],[-35.59018,-9.14897],[-35.59015,-9.15108],[-35.6016,-9.15105],[-35.60154,-9.14912],[-35.60552,-9.14912],[-35.60549,-9.14557],[-35.61184,-9.14554],[-35.61184,-9.14235],[-35.6176,-9.14238],[-35.61757,-9.13853],[-35.624,-9.13853],[-35.62397,-9.13466],[-35.63177,-9.13466],[-35.63164,-9.13063],[-35.63922,-9.1306],[-35.63919,-9.12878],[-35.66386,-9.12869],[-35.6638,-9.1261],[-35.71278,-9.12577],[-35.71275,-9.12407],[-35.72426,-9.12401],[-35.71964,-9.15323],[-35.72112,-9.1532],[-35.72124,-9.17258],[-35.72066,-9.17255],[-35.72082,-9.18558],[-35.71212,-9.18566],[-35.7133,-9.34416],[-35.69041,-9.34433],[-35.69065,-9.37189],[-35.68899,-9.37189],[-35.68902,-9.37598],[-35.68757,-9.37598],[-35.68766,-9.38232],[-35.68497,-9.38235],[-35.68503,-9.39093],[-35.68168,-9.39099],[-35.68177,-9.39936],[-35.67715,-9.39933],[-35.67724,-9.4089],[-35.67292,-9.40893],[-35.67301,-9.41754],[-35.66972,-9.4176],[-35.66978,-9.42498],[-35.66722,-9.42498],[-35.66728,-9.4327],[-35.66075,-9.43288],[-35.66075,-9.43705],[-35.6513,-9.43708],[-35.65142,-9.44211],[-35.64514,-9.44217],[-35.64523,-9.44652],[-35.63645,-9.44661],[-35.63645,-9.44992],[-35.62711,-9.45],[-35.62727,-9.46505],[-35.62086,-9.46511],[-35.62092,-9.4722],[-35.60939,-9.47222],[-35.60939,-9.47529],[-35.59674,-9.47535],[-35.59674,-9.47351],[-35.57844,-9.47371],[-35.57847,-9.47595],[-35.57267,-9.47604],[-35.5727,-9.48042],[-35.56823,-9.48048],[-35.56826,-9.48881],[-35.54169,-9.48893],[-35.54163,-9.48071],[-35.52384,-9.48089]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"arapiraca_al",name:"Arapiraca AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Arapiraca&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.60875,-9.83072],[-36.60784,-9.74047],[-36.61718,-9.74051],[-36.61631,-9.65075],[-36.70737,-9.64977],[-36.70832,-9.74043],[-36.69898,-9.74047],[-36.69997,-9.82968],[-36.60875,-9.83072]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"CRAIG-Auvergne-2013",name:"Auvergne 2013 25cm CRAIG",type:"tms",template:"https://tiles.craig.fr/osm/wmts/1.0.0/ortho_2013/webmercator/{zoom}/{x}/{y}.jpeg",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[2.94012,44.63388],[2.99719,44.63393],[2.99717,44.64734],[3.01597,44.64735],[3.01593,44.67412],[3.03495,44.67413],[3.0349,44.70152],[3.05363,44.70154],[3.05357,44.7419],[3.07233,44.74191],[3.07222,44.80917],[3.09216,44.80919],[3.09214,44.82213],[3.13014,44.82216],[3.13005,44.87707],[3.14856,44.87709],[3.14858,44.8637],[3.16823,44.86371],[3.16825,44.85003],[3.2064,44.85006],[3.20638,44.86284],[3.24395,44.86287],[3.24393,44.87679],[3.26315,44.87681],[3.26308,44.91752],[3.32004,44.91757],[3.32002,44.93033],[3.33908,44.93035],[3.33906,44.9442],[3.377,44.94423],[3.37702,44.93029],[3.39603,44.9303],[3.39612,44.87627],[3.41483,44.87629],[3.41489,44.83553],[3.43334,44.83554],[3.43338,44.80828],[3.45255,44.80829],[3.45258,44.79463],[3.50893,44.79468],[3.5089,44.80815],[3.60426,44.80823],[3.60422,44.83482],[3.62361,44.83484],[3.62357,44.86166],[3.64248,44.86167],[3.64255,44.8211],[3.66101,44.82112],[3.66103,44.80777],[3.6993,44.8078],[3.69928,44.82099],[3.73611,44.82102],[3.73618,44.77971],[3.77511,44.77974],[3.77515,44.75223],[3.81184,44.75226],[3.81186,44.7392],[3.83118,44.73922],[3.83121,44.72468],[3.88782,44.72472],[3.8878,44.73818],[3.92563,44.73821],[3.9256,44.75167],[3.94541,44.75168],[3.94537,44.77847],[3.96437,44.77848],[3.96435,44.79193],[4.00332,44.79196],[4.0033,44.80526],[4.02169,44.80527],[4.02167,44.81857],[4.05965,44.8186],[4.05961,44.84492],[4.07981,44.84494],[4.07979,44.85735],[4.17388,44.85743],[4.17386,44.87055],[4.19326,44.87056],[4.19323,44.88427],[4.21404,44.88429],[4.214,44.91002],[4.23241,44.91004],[4.23237,44.93731],[4.27155,44.93734],[4.27153,44.9503],[4.32887,44.95034],[4.32878,45.00367],[4.34893,45.00368],[4.3489,45.01707],[4.40608,45.01711],[4.40599,45.071],[4.38847,45.07099],[4.38845,45.0846],[4.40794,45.08461],[4.40792,45.09663],[4.48436,45.09669],[4.48429,45.13705],[4.46636,45.13703],[4.46634,45.1502],[4.48645,45.15022],[4.4864,45.17724],[4.50655,45.17726],[4.50644,45.24501],[4.48813,45.24499],[4.48811,45.25921],[4.46986,45.25919],[4.46984,45.27298],[4.45088,45.27297],[4.45086,45.28642],[4.39368,45.28637],[4.39363,45.31352],[4.37509,45.3135],[4.37507,45.32741],[4.39507,45.32742],[4.39503,45.35458],[4.37679,45.35457],[4.37676,45.36855],[4.35766,45.36853],[4.35763,45.38234],[4.28146,45.38227],[4.28143,45.39688],[4.24446,45.39685],[4.24443,45.41079],[4.14812,45.41071],[4.14814,45.39807],[4.12919,45.39805],[4.12921,45.38409],[4.09021,45.38406],[4.09024,45.37121],[4.01355,45.37115],[4.01353,45.3861],[3.91709,45.38602],[3.91707,45.39974],[3.93757,45.39975],[3.93755,45.41311],[3.97528,45.41315],[3.97526,45.42621],[3.99537,45.42622],[3.9957,45.52096],[3.97778,45.52094],[3.97769,45.57439],[3.95818,45.57437],[3.95815,45.58837],[3.9396,45.58835],[3.93958,45.60262],[3.92023,45.60261],[3.9202,45.61646],[3.88189,45.61643],[3.88185,45.64328],[3.84413,45.64325],[3.84411,45.65709],[3.82617,45.65707],[3.82612,45.68389],[3.80722,45.68387],[3.80713,45.73758],[3.78821,45.73756],[3.78819,45.7518],[3.76885,45.75178],[3.7688,45.77897],[3.75072,45.77895],[3.75058,45.86066],[3.76967,45.86067],[3.76958,45.91433],[3.75166,45.91432],[3.75164,45.92809],[3.7329,45.92807],[3.73285,45.95472],[3.81018,45.95478],[3.81016,45.96823],[3.8496,45.96826],[3.84951,46.02162],[3.83188,46.0216],[3.83179,46.07591],[3.8505,46.07592],[3.85046,46.10295],[3.83247,46.10294],[3.83234,46.18456],[3.81422,46.18455],[3.81415,46.22442],[3.83369,46.22444],[3.83366,46.2381],[3.85289,46.23812],[3.85287,46.25147],[3.89314,46.25151],[3.89312,46.26447],[3.91306,46.26448],[3.91303,46.27793],[3.95189,46.27796],[3.95187,46.29082],[3.97152,46.29084],[3.9715,46.30369],[4.0105,46.30373],[4.01048,46.31776],[4.02983,46.31778],[4.02978,46.34428],[4.0116,46.34427],[4.01146,46.42534],[4.03153,46.42536],[4.03146,46.4658],[4.01324,46.46578],[4.01322,46.47938],[3.99437,46.47936],[3.99435,46.49361],[3.9746,46.4936],[3.97457,46.50753],[3.87754,46.50745],[3.8775,46.53478],[3.85836,46.53476],[3.85833,46.54832],[3.81869,46.54828],[3.81871,46.53553],[3.79924,46.53552],[3.79922,46.54907],[3.76104,46.54904],[3.76092,46.61681],[3.74233,46.61679],[3.74228,46.64396],[3.72286,46.64395],[3.72281,46.67104],[3.70387,46.67102],[3.70385,46.68467],[3.68411,46.68466],[3.68406,46.712],[3.66484,46.71198],[3.66479,46.73904],[3.64576,46.73902],[3.64572,46.76634],[3.62575,46.76632],[3.62573,46.77971],[3.56723,46.77966],[3.56725,46.76631],[3.54715,46.76629],[3.54719,46.73928],[3.52716,46.73927],[3.52723,46.6989],[3.48774,46.69887],[3.48776,46.68594],[3.46796,46.68593],[3.46794,46.69941],[3.46792,46.71279],[3.44865,46.71278],[3.44863,46.72679],[3.35043,46.72671],[3.35048,46.6999],[3.33039,46.69988],[3.33034,46.7272],[3.23272,46.72712],[3.23274,46.71351],[3.2129,46.7135],[3.21293,46.70013],[3.17354,46.7001],[3.1735,46.72751],[3.15412,46.72749],[3.1541,46.74073],[3.11478,46.7407],[3.11475,46.75428],[3.07534,46.75424],[3.0753,46.78135],[3.05597,46.78134],[3.05592,46.80831],[2.99704,46.80826],[2.99702,46.82196],[2.93794,46.82191],[2.93797,46.80826],[2.89866,46.80823],[2.89869,46.79424],[2.87899,46.79422],[2.87901,46.78104],[2.85942,46.78103],[2.85944,46.76771],[2.84004,46.76769],[2.84007,46.75447],[2.7414,46.75439],[2.74138,46.76682],[2.70234,46.76679],[2.70236,46.75389],[2.68266,46.75387],[2.68268,46.74048],[2.66349,46.74046],[2.66351,46.7259],[2.64342,46.72588],[2.64344,46.71309],[2.62414,46.71308],[2.62417,46.69981],[2.60397,46.69979],[2.60399,46.68584],[2.56512,46.68581],[2.56515,46.67261],[2.54593,46.6726],[2.546,46.63215],[2.56592,46.63217],[2.56595,46.61811],[2.54564,46.61809],[2.54569,46.59072],[2.56642,46.59074],[2.56644,46.57754],[2.5855,46.57756],[2.58552,46.56472],[2.56613,46.5647],[2.56616,46.55062],[2.46828,46.55055],[2.4683,46.53582],[2.33212,46.53571],[2.33217,46.50886],[2.31265,46.50884],[2.31267,46.49534],[2.29288,46.49533],[2.2929,46.48182],[2.27487,46.4818],[2.27492,46.45442],[2.25539,46.4544],[2.25553,46.37349],[2.27595,46.37351],[2.27604,46.32087],[2.31456,46.32091],[2.31458,46.30704],[2.35371,46.30707],[2.35373,46.29297],[2.39384,46.293],[2.39389,46.26729],[2.45157,46.26733],[2.4516,46.25349],[2.47094,46.25351],[2.47098,46.22656],[2.49151,46.22657],[2.49155,46.19933],[2.51088,46.19934],[2.51093,46.17278],[2.53117,46.1728],[2.53138,46.05135],[2.55163,46.05137],[2.55166,46.03777],[2.57056,46.03778],[2.57068,45.96994],[2.55144,45.96993],[2.55146,45.95662],[2.53226,45.9566],[2.53228,45.94301],[2.51307,45.94299],[2.51313,45.90203],[2.47494,45.902],[2.47496,45.88882],[2.43619,45.88879],[2.43622,45.87533],[2.41721,45.87531],[2.41725,45.84794],[2.37847,45.84791],[2.3785,45.83397],[2.35952,45.83396],[2.35956,45.80708],[2.37873,45.8071],[2.37875,45.79358],[2.3987,45.79359],[2.39872,45.78035],[2.41825,45.78036],[2.41832,45.74],[2.45722,45.74003],[2.45724,45.7267],[2.47589,45.72671],[2.47591,45.71324],[2.49533,45.71325],[2.49542,45.65913],[2.45769,45.6591],[2.45776,45.61834],[2.43912,45.61833],[2.43919,45.57766],[2.4585,45.57768],[2.45855,45.55053],[2.47809,45.55055],[2.47811,45.53725],[2.49755,45.53726],[2.49759,45.51068],[2.47855,45.51066],[2.47864,45.45613],[2.45978,45.45612],[2.45987,45.40176],[2.42249,45.40173],[2.42247,45.41528],[2.40232,45.41527],[2.40229,45.42882],[2.3256,45.42876],[2.32567,45.38796],[2.34562,45.38798],[2.34566,45.36111],[2.32626,45.36109],[2.32628,45.34721],[2.30738,45.3472],[2.3074,45.3336],[2.28811,45.33358],[2.28813,45.32082],[2.26963,45.3208],[2.26966,45.30621],[2.25066,45.3062],[2.25068,45.29251],[2.23169,45.2925],[2.23171,45.27924],[2.213,45.27922],[2.21305,45.25204],[2.19374,45.25202],[2.19376,45.23811],[2.17561,45.2381],[2.17574,45.15768],[2.15735,45.15767],[2.15744,45.10295],[2.12024,45.10292],[2.12026,45.08955],[2.10067,45.08953],[2.10069,45.07544],[2.08246,45.07543],[2.08255,45.0216],[2.10255,45.02161],[2.1026,44.99445],[2.04574,44.99441],[2.04585,44.92753],[2.06578,44.92755],[2.06589,44.85969],[2.0857,44.8597],[2.08572,44.84581],[2.10556,44.84583],[2.1056,44.81933],[2.12474,44.81934],[2.12477,44.80551],[2.14351,44.80553],[2.14355,44.7786],[2.12561,44.77858],[2.1257,44.72427],[2.10665,44.72426],[2.10671,44.68423],[2.12634,44.68424],[2.12636,44.67074],[2.14598,44.67075],[2.14607,44.61644],[2.18396,44.61648],[2.18398,44.60378],[2.24042,44.60383],[2.24037,44.63095],[2.25948,44.63097],[2.25946,44.64493],[2.31668,44.64498],[2.3167,44.63088],[2.33615,44.6309],[2.33617,44.61758],[2.37242,44.61761],[2.3724,44.63158],[2.41105,44.63161],[2.41107,44.61907],[2.44922,44.61911],[2.4492,44.63232],[2.50486,44.63237],[2.50481,44.65976],[2.52461,44.65977],[2.52457,44.68717],[2.54225,44.68719],[2.54223,44.70122],[2.58071,44.70125],[2.5806,44.76834],[2.61769,44.76837],[2.61762,44.80884],[2.63676,44.80885],[2.63669,44.84929],[2.67331,44.84933],[2.67329,44.86252],[2.69338,44.86253],[2.69333,44.88943],[2.73052,44.88946],[2.73048,44.91645],[2.74992,44.91646],[2.75005,44.83647],[2.80733,44.83652],[2.80731,44.8491],[2.82638,44.84912],[2.8264,44.83628],[2.8457,44.8363],[2.84577,44.79571],[2.86422,44.79573],[2.86426,44.76865],[2.88399,44.76866],[2.88403,44.74197],[2.90203,44.74198],[2.90214,44.67432],[2.92198,44.67434],[2.92202,44.6473],[2.9401,44.64731],[2.94012,44.63388]]],terms_url:"http://ids.craig.fr/geocat/srv/fre/catalog.search?node=srv#/metadata/8cabc987-829c-4c9f-943b-6a0e255cd73",terms_text:"Orthophotographie CRAIG/Sintegra/IGN 2013"},{id:"CRAIG-Auvergne-2016",name:"Auvergne 2016 25cm CRAIG",type:"tms",template:"https://tiles.craig.fr/ortho/wmts/1.0.0/ortho_2016/webmercator/{zoom}/{x}/{y}.jpeg",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[2.49389,46.66829],[2.71362,46.84141],[3.64746,46.80758],[4.04846,46.48327],[4.03747,46.24825],[4.46044,46.25965],[4.4934,46.14559],[4.38354,46.09229],[4.45495,45.69084],[4.76257,45.57176],[4.81201,45.34443],[4.22424,44.84419],[3.86169,44.696],[3.37829,44.80523],[3.33435,44.89091],[3.18054,44.82471],[3.03222,44.60612],[2.92785,44.60221],[2.71911,44.85198],[2.51037,44.60221],[2.12585,44.58265],[2.005,44.97257],[2.30712,45.46784],[2.43347,45.44087],[2.41149,45.72919],[2.34558,45.82402],[2.54882,45.97979],[2.46093,46.22166],[2.21374,46.33935],[2.27828,46.53903],[2.54882,46.56642],[2.49389,46.66829]]],terms_url:"http://ids.craig.fr/geocat/srv/fre/catalog.search?node=srv#/metadata/e37c057b-5884-429b-8bec-5db0baef0ee",terms_text:"CRAIG - IGN -TopoGEODIS - Feder Auvergne-Rhône-Alpes 2016"},{id:"BANO",name:"BANO",type:"tms",template:"https://{switch:a,b,c}.layers.openstreetmap.fr/bano/{zoom}/{x}/{y}.png",zoomExtent:[12,20],polygon:[[[-2.7,43.9],[-6.3,48.98],[-2.25,50.09],[1.31,50.88],[2.35816,51.32937],[2.5488,51.09759],[2.57048,51.07409],[2.58741,51.01763],[2.59845,51.0051],[2.61558,50.99749],[2.63986,50.95766],[2.64225,50.94578],[2.62452,50.9256],[2.61962,50.91067],[2.62396,50.86071],[2.62781,50.85054],[2.63786,50.83696],[2.6511,50.82906],[2.73267,50.81738],[2.79995,50.73795],[2.81655,50.73092],[2.85265,50.73335],[2.89072,50.7162],[2.90492,50.71536],[2.9161,50.72418],[2.93508,50.75592],[3.00718,50.78377],[3.08218,50.78749],[3.09244,50.79092],[3.11412,50.80566],[3.14877,50.80195],[3.2154,50.73111],[3.22149,50.7267],[3.27051,50.70375],[3.27545,50.67757],[3.26576,50.6604],[3.26588,50.64054],[3.28922,50.60028],[3.29219,50.55037],[3.3056,50.53267],[3.37551,50.50839],[3.3898,50.50884],[3.4748,50.54445],[3.52173,50.53459],[3.53266,50.51873],[3.54779,50.51012],[3.61523,50.50558],[3.67378,50.45642],[3.68415,50.35277],[3.6901,50.34044],[3.70258,50.33482],[3.71576,50.33854],[3.74935,50.36279],[3.84109,50.36558],[3.90189,50.3436],[3.91317,50.34291],[4.02672,50.36904],[4.13761,50.29984],[4.14388,50.29727],[4.21444,50.28167],[4.22904,50.26664],[4.23078,50.25233],[4.17084,50.18579],[4.16601,50.16888],[4.1764,50.1547],[4.21195,50.13602],[4.24074,50.07102],[4.23193,50.05551],[4.18164,50.03436],[4.17177,50.02537],[4.16976,50.01217],[4.1765,50.00065],[4.20633,49.97546],[4.22164,49.97089],[4.30877,49.98145],[4.44542,49.9523],[4.45469,49.95251],[4.6581,50.00609],[4.66936,50.01392],[4.67293,50.02716],[4.66924,50.06972],[4.69517,50.10472],[4.83123,50.17941],[4.8815,50.16436],[4.90479,50.14451],[4.90426,50.12639],[4.88076,50.0815],[4.86277,50.0745],[4.85104,50.06216],[4.84331,50.03884],[4.84331,50.03883],[4.8433,50.03881],[4.82678,49.989],[4.82662,49.97692],[4.83343,49.96696],[4.89654,49.91753],[4.89755,49.89424],[4.87913,49.86942],[4.87625,49.85111],[4.88924,49.81266],[4.89769,49.80204],[4.91098,49.79926],[4.99534,49.81116],[5.01867,49.79272],[5.02686,49.78886],[5.09944,49.77323],[5.13458,49.73462],[5.1412,49.72984],[5.18761,49.70906],[5.19602,49.70732],[5.28157,49.70836],[5.33363,49.67308],[5.344,49.65049],[5.3544,49.64041],[5.43141,49.60791],[5.48205,49.52815],[5.49294,49.51979],[5.50666,49.52042],[5.55401,49.54025],[5.59311,49.53424],[5.6076,49.53761],[5.641,49.56095],[5.70676,49.55267],[5.71578,49.55361],[5.77526,49.57414],[5.8399,49.55321],[5.86126,49.52038],[5.876,49.5114],[5.97516,49.50129],[5.99801,49.47317],[6.01627,49.46597],[6.08635,49.47562],[6.09319,49.47787],[6.17397,49.52187],[6.24643,49.52511],[6.334,49.48235],[6.34423,49.48037],[6.43515,49.487],[6.5451,49.44384],[6.60639,49.37868],[6.60497,49.33739],[6.61627,49.31869],[6.67013,49.29269],[6.72996,49.22917],[6.74328,49.19086],[6.76026,49.17752],[6.80904,49.17284],[6.82473,49.17826],[6.83093,49.19366],[6.82982,49.21802],[6.85119,49.23136],[6.88453,49.2239],[6.89322,49.22389],[6.93753,49.23369],[7.04055,49.19794],[7.0463,49.17503],[7.05478,49.16313],[7.06908,49.16018],[7.10494,49.16634],[7.14315,49.14159],[7.1535,49.13839],[7.28683,49.13488],[7.29893,49.13856],[7.36095,49.18259],[7.45012,49.19517],[7.50113,49.17672],[7.54379,49.10572],[7.5579,49.09626],[7.6296,49.08527],[7.64722,49.06722],[7.6612,49.06119],[7.75401,49.05963],[7.76073,49.06067],[7.80291,49.07489],[7.85525,49.05329],[7.8673,49.05227],[7.93826,49.06832],[8.08069,49.00688],[8.2225,48.98787],[8.23704,48.97683],[8.23589,48.95817],[8.20888,48.94863],[8.20089,48.94339],[8.15824,48.89753],[8.10087,48.7993],[7.99071,48.74478],[7.98534,48.7409],[7.90422,48.65865],[7.85605,48.63606],[7.8484,48.62977],[7.81842,48.58883],[7.81456,48.57704],[7.81449,48.50968],[7.78547,48.48337],[7.78055,48.47652],[7.74506,48.39484],[7.74357,48.38427],[7.75159,48.32322],[7.71085,48.29841],[7.70241,48.28803],[7.67661,48.21555],[7.59605,48.11698],[7.59165,48.10648],[7.58522,48.04694],[7.59127,48.03035],[7.62437,47.99865],[7.63205,47.97081],[7.57554,47.87436],[7.5728,47.86435],[7.57267,47.83631],[7.54581,47.78793],[7.54418,47.77232],[7.55758,47.72899],[7.53526,47.6989],[7.53136,47.68564],[7.537,47.67302],[7.60016,47.60822],[7.58967,47.56755],[7.55424,47.55128],[7.54511,47.54283],[7.51256,47.48439],[7.38747,47.42111],[7.32653,47.4273],[7.24435,47.40939],[7.16708,47.4335],[7.15212,47.47612],[7.14279,47.48707],[7.12853,47.48893],[7.0801,47.47718],[7.03557,47.48695],[7.02102,47.48458],[7.01205,47.47287],[7.003,47.44095],[6.9551,47.40808],[6.94716,47.39698],[6.94818,47.38337],[6.95769,47.37359],[6.97126,47.37218],[7.018,47.38386],[7.05623,47.37035],[7.07007,47.35005],[7.05958,47.32257],[6.97424,47.27856],[6.96347,47.26233],[6.96134,47.23479],[6.89443,47.19393],[6.88913,47.18922],[6.85545,47.14636],[6.76907,47.10751],[6.76011,47.09953],[6.72561,47.0418],[6.62355,46.9811],[6.4812,46.9445],[6.46892,46.93522],[6.46686,46.91997],[6.47548,46.88771],[6.4535,46.8239],[6.45644,46.80534],[6.46722,46.79104],[6.46098,46.76887],[6.15817,46.59343],[6.14872,46.58069],[6.15152,46.56508],[6.16549,46.54399],[6.15811,46.52456],[6.10174,46.46979],[6.09572,46.45418],[6.09704,46.43317],[6.10829,46.41643],[6.16622,46.38839],[6.17817,46.36922],[6.13748,46.31297],[6.13371,46.30227],[6.13038,46.23737],[6.1103,46.22344],[6.08865,46.23081],[6.07717,46.23123],[6.01857,46.21601],[6.00681,46.20752],[6.00388,46.19332],[6.00787,46.16977],[6.01783,46.15564],[6.03509,46.15456],[6.05564,46.16288],[6.12468,46.15415],[6.13778,46.15702],[6.24026,46.22094],[6.24906,46.23299],[6.24707,46.24777],[6.21148,46.31057],[6.21219,46.32485],[6.23946,46.36705],[6.31648,46.41557],[6.41083,46.42495],[6.41748,46.42682],[6.50498,46.46871],[6.63047,46.47435],[6.74665,46.45695],[6.82244,46.42925],[6.81832,46.38181],[6.80484,46.36179],[6.80189,46.34639],[6.81095,46.33359],[6.86491,46.30038],[6.87504,46.28007],[6.86092,46.2439],[6.82698,46.21188],[6.82075,46.19862],[6.81863,46.16592],[6.82259,46.15261],[6.83427,46.14509],[6.90382,46.12971],[6.90491,46.09595],[6.90932,46.08406],[6.92001,46.07721],[6.94898,46.0699],[7.01556,46.00883],[7.05191,45.93066],[7.04533,45.92217],[7.04497,45.92064],[7.04394,45.92036],[6.99582,45.85822],[6.94097,45.83551],[6.84376,45.82387],[6.83102,45.81711],[6.82614,45.80353],[6.82787,45.73217],[6.83174,45.72082],[6.8414,45.71373],[6.90729,45.69124],[6.92419,45.66935],[6.94247,45.66172],[6.97131,45.66528],[7.00597,45.64945],[7.01151,45.63652],[6.9978,45.60877],[6.99643,45.59465],[7.0158,45.52354],[7.02774,45.5102],[7.1072,45.47877],[7.1228,45.44924],[7.13304,45.44001],[7.1856,45.41894],[7.19515,45.40409],[7.17075,45.35069],[7.14232,45.32298],[7.13649,45.30576],[7.14458,45.25048],[7.08417,45.20279],[6.99279,45.19823],[6.98106,45.19368],[6.90009,45.12689],[6.85843,45.11699],[6.78283,45.14228],[6.77056,45.14242],[6.67751,45.11356],[6.6653,45.10289],[6.66501,45.08667],[6.68237,45.04558],[6.69602,45.03395],[6.75744,45.01884],[6.78375,44.9146],[6.7942,44.90161],[6.86698,44.86519],[6.8798,44.86346],[6.93633,44.87461],[7.01795,44.84402],[7.03453,44.82282],[7.03711,44.75009],[7.0496,44.73226],[7.07224,44.72311],[7.08651,44.6968],[7.08666,44.68085],[7.07671,44.67134],[6.99007,44.67203],[6.97413,44.66431],[6.97056,44.64696],[6.97819,44.61784],[6.94659,44.57124],[6.88235,44.53479],[6.87233,44.5195],[6.87892,44.50245],[6.95894,44.43129],[6.95872,44.42908],[6.92167,44.41436],[6.91223,44.40659],[6.90907,44.39477],[6.90972,44.38195],[6.91637,44.36804],[6.99909,44.29414],[7.01181,44.256],[7.01983,44.24558],[7.03259,44.2424],[7.07312,44.2461],[7.1651,44.22112],[7.24533,44.18544],[7.26053,44.16682],[7.27537,44.15947],[7.33878,44.1574],[7.36278,44.13834],[7.37776,44.13416],[7.56283,44.15792],[7.5642,44.15836],[7.56478,44.15817],[7.60548,44.1634],[7.6162,44.16827],[7.63989,44.18928],[7.68608,44.1861],[7.69422,44.17795],[7.68937,44.13869],[7.69445,44.12276],[7.72786,44.08615],[7.72403,44.05704],[7.68603,44.02371],[7.68077,44.0164],[7.66016,43.9672],[7.59624,43.94466],[7.58419,43.93287],[7.56858,43.89159],[7.5271,43.87434],[7.51649,43.86397],[7.51594,43.84915],[7.53622,43.79234],[9.8,43.1],[9.63227,41.43244],[9.36968,41.35052],[9.27311,41.29196],[8.94186,41.27688],[5.8,41.64],[3.17358,42.41768],[3.16081,42.42757],[3.0944,42.41457],[3.03402,42.45331],[3.02214,42.45645],[2.87822,42.4487],[2.87019,42.44653],[2.78424,42.40256],[2.7413,42.41128],[2.72928,42.40998],[2.69331,42.39417],[2.68378,42.3854],[2.68162,42.37263],[2.68585,42.34679],[2.66719,42.33008],[2.58106,42.34418],[2.56777,42.34173],[2.5338,42.32197],[2.47795,42.32986],[2.41933,42.37658],[2.41222,42.38021],[2.26719,42.42055],[2.25973,42.42117],[2.20694,42.41558],[2.20653,42.41526],[2.20526,42.41541],[2.16028,42.41065],[2.14881,42.40545],[2.09393,42.35474],[2.00861,42.33818],[1.965,42.36473],[1.93076,42.42442],[1.92089,42.43302],[1.88467,42.44761],[1.88459,42.44762],[1.88444,42.4477],[1.82774,42.47056],[1.72567,42.48452],[1.71561,42.50125],[1.7272,42.56103],[1.72479,42.57499],[1.71011,42.59992],[1.69377,42.60975],[1.60283,42.61382],[1.56069,42.6392],[1.54636,42.64166],[1.50444,42.6331],[1.4921,42.62502],[1.47238,42.59703],[1.43792,42.59264],[1.41936,42.60643],[1.38032,42.67415],[1.37335,42.68127],[1.33313,42.70563],[1.32364,42.7085],[1.23221,42.71248],[1.16554,42.69928],[1.08546,42.76635],[1.07564,42.77079],[0.95937,42.78852],[0.95073,42.78794],[0.92265,42.7797],[0.84606,42.8157],[0.71511,42.8464],[0.70017,42.84402],[0.69117,42.83186],[0.67409,42.76479],[0.67474,42.75286],[0.69192,42.70684],[0.669,42.67901],[0.43024,42.67863],[0.3715,42.70308],[0.35954,42.70415],[0.34912,42.69817],[0.32567,42.67274],[0.29571,42.66388],[0.24594,42.70175],[0.23972,42.70494],[0.18967,42.72039],[0.17919,42.72075],[-0.01993,42.67389],[-0.06726,42.6848],[-0.16949,42.77157],[-0.29987,42.82697],[-0.31683,42.82635],[-0.39208,42.78766],[-0.44354,42.78453],[-0.48842,42.80255],[-0.50868,42.79935],[-0.54499,42.76906],[-0.56721,42.76937],[-0.67446,42.86392],[-0.68094,42.86775],[-0.73372,42.88666],[-0.7476,42.93879],[-0.75711,42.95107],[-0.77253,42.95284],[-0.82114,42.93865],[-0.94508,42.94192],[-1.02313,42.98206],[-1.10852,43.00409],[-1.1156,43.00461],[-1.14775,43.00124],[-1.15845,43.01452],[-1.16736,43.02083],[-1.21622,43.0381],[-1.22612,43.03898],[-1.26236,43.03303],[-1.30643,43.05531],[-1.31992,43.05696],[-1.33135,43.0496],[-1.3542,43.0197],[-1.43868,43.03371],[-1.4775,43.06889],[-1.48311,43.08561],[-1.47641,43.10248],[-1.43479,43.13087],[-1.42732,43.1404],[-1.39411,43.22935],[-1.39531,43.24596],[-1.40868,43.25591],[-1.52629,43.28099],[-1.54626,43.2737],[-1.57149,43.2412],[-1.61053,43.24223],[-1.65,43.29323],[-1.66953,43.30065],[-1.73359,43.28856],[-1.75606,43.31966],[-1.76297,43.32565],[-1.79156,43.34067],[-1.80099,43.37017],[-1.78509,43.39037],[-1.7835,43.39686],[-2.7,43.9]]],terms_url:"https://wiki.openstreetmap.org/wiki/FR:WikiProject_France/WikiProject_Base_Adresses_Nationale_Ouverte_(BANO)#Licence_du_r.C3.A9sultat",terms_text:"Tiles © cquest@Openstreetmap France, data © OpenStreetMap contributors, ODBL",description:"French address registry or Base Adresses Nationale Ouverte",overlay:true},{id:"lu.geoportail.opendata.basemap",name:"Basemap geoportail.lu",type:"tms",template:"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/basemap/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.png",endDate:"2010-07-20T00:00:00.000Z",startDate:"2013-07-19T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[5.96175,50.17631],[6.02627,50.18496],[6.03318,50.16395],[6.06069,50.15536],[6.07668,50.15913],[6.07824,50.17255],[6.10176,50.17199],[6.1225,50.16437],[6.1201,50.15594],[6.1277,50.14993],[6.11323,50.13739],[6.12369,50.13719],[6.14093,50.1305],[6.13555,50.11899],[6.13808,50.10263],[6.13108,50.09964],[6.13547,50.09119],[6.12194,50.09059],[6.12634,50.07817],[6.13186,50.07348],[6.12117,50.064],[6.11444,50.06139],[6.11563,50.05817],[6.12361,50.06323],[6.13661,50.04178],[6.13034,50.02975],[6.14821,50.02307],[6.13868,50.01572],[6.13594,50.01485],[6.13138,50.01905],[6.13024,50.01819],[6.13934,50.01116],[6.1517,50.01058],[6.14546,49.99689],[6.13966,49.9994],[6.13852,49.99829],[6.14218,49.99535],[6.15023,49.99518],[6.15625,49.98867],[6.17305,49.98589],[6.17348,49.98344],[6.17035,49.98376],[6.16549,49.97115],[6.17151,49.96298],[6.1763,49.962],[6.17995,49.95386],[6.18339,49.9548],[6.17983,49.96307],[6.18331,49.9686],[6.19277,49.97158],[6.19978,49.95352],[6.20707,49.95672],[6.21269,49.9514],[6.22502,49.95039],[6.22044,49.94369],[6.22824,49.93726],[6.22635,49.92766],[6.21913,49.92354],[6.22986,49.92125],[6.23603,49.91355],[6.23187,49.91064],[6.22769,49.91062],[6.23229,49.9072],[6.23381,49.90028],[6.24692,49.89535],[6.25781,49.88724],[6.26301,49.88101],[6.27646,49.87725],[6.28113,49.87957],[6.29166,49.87548],[6.2977,49.86673],[6.30989,49.87107],[6.31532,49.8673],[6.31465,49.86057],[6.32361,49.85188],[6.32158,49.8409],[6.32741,49.83673],[6.33656,49.83998],[6.33937,49.8507],[6.36465,49.85164],[6.4022,49.82098],[6.42643,49.81629],[6.42807,49.81186],[6.43097,49.81129],[6.44161,49.81547],[6.44344,49.81233],[6.45366,49.81275],[6.46454,49.81975],[6.47057,49.82385],[6.49681,49.81277],[6.50669,49.80993],[6.51155,49.80238],[6.51485,49.80513],[6.5196,49.81446],[6.52981,49.81048],[6.53225,49.80686],[6.53083,49.80116],[6.50622,49.78899],[6.51917,49.78344],[6.51105,49.77422],[6.52056,49.76818],[6.52052,49.76134],[6.50373,49.75086],[6.50263,49.73298],[6.50727,49.72938],[6.51809,49.7242],[6.51642,49.72129],[6.51176,49.72016],[6.50479,49.725],[6.49891,49.72639],[6.49558,49.72443],[6.50712,49.71655],[6.50788,49.71215],[6.5046,49.71227],[6.42714,49.66237],[6.4399,49.66025],[6.44251,49.65591],[6.42178,49.61809],[6.39898,49.60094],[6.37941,49.59526],[6.37551,49.58809],[6.38443,49.5801],[6.38119,49.57509],[6.36909,49.5783],[6.35791,49.57166],[6.3849,49.55817],[6.38009,49.54856],[6.35855,49.53296],[6.35932,49.52481],[6.37076,49.50545],[6.37056,49.45732],[6.3334,49.46493],[6.32189,49.47244],[6.29503,49.47928],[6.28789,49.48379],[6.27191,49.49995],[6.24133,49.50693],[6.19669,49.50331],[6.17337,49.50577],[6.16086,49.50085],[6.1671,49.49006],[6.14018,49.48525],[6.12937,49.48803],[6.12725,49.47081],[6.1014,49.46726],[6.10483,49.45076],[6.08167,49.45417],[6.07722,49.46139],[6.05917,49.46306],[6.05222,49.46028],[6.04421,49.44553],[6.02529,49.44703],[6.02154,49.45127],[6.01574,49.44885],[5.99412,49.45301],[5.97657,49.44885],[5.97773,49.45955],[5.97232,49.46087],[5.96891,49.48202],[5.9616,49.49026],[5.91578,49.49835],[5.89033,49.4948],[5.86332,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.83187,49.52639],[5.84308,49.53081],[5.83562,49.54114],[5.81625,49.53325],[5.8052,49.54272],[5.85943,49.57158],[5.86866,49.587],[5.86289,49.58525],[5.8511,49.58379],[5.84712,49.58961],[5.84565,49.5981],[5.8694,49.6106],[5.88182,49.63815],[5.89998,49.63907],[5.89934,49.66239],[5.85656,49.67628],[5.85628,49.68211],[5.8757,49.71118],[5.86481,49.72331],[5.84325,49.71822],[5.82191,49.72128],[5.82489,49.73767],[5.82073,49.74878],[5.78626,49.79079],[5.76517,49.78961],[5.75094,49.79094],[5.74159,49.82126],[5.74581,49.82435],[5.7372,49.83353],[5.74053,49.84142],[5.74701,49.84048],[5.74624,49.84783],[5.75399,49.84878],[5.74066,49.85152],[5.75229,49.85922],[5.74955,49.87554],[5.77567,49.87438],[5.77505,49.88057],[5.7346,49.89341],[5.73303,49.90285],[5.75783,49.91737],[5.76039,49.93252],[5.77073,49.93711],[5.76878,49.94239],[5.7688,49.96104],[5.78672,49.96816],[5.80524,49.96677],[5.80652,49.97321],[5.83129,49.97995],[5.83462,49.98656],[5.81806,49.99936],[5.81561,50.01437],[5.84792,50.02809],[5.86189,50.04581],[5.85087,50.0563],[5.85781,50.07186],[5.881,50.08069],[5.89196,50.12041],[5.95286,50.13384],[5.96175,50.17631]]],terms_url:"https://data.public.lu/en/datasets/carte-de-base-webservices-wms-et-wmts",terms_text:"Administration du Cadastre et de la Topographie",icon:"https://www.geoportail.lu/static/img/lion.png"},{id:"basemap.at",name:"basemap.at",type:"tms",template:"https://maps{switch:1,2,3,4}.wien.gv.at/basemap/geolandbasemap/normal/google3857/{zoom}/{y}/{x}.png",zoomExtent:[0,19],polygon:[[[16.50733,46.99293],[16.28342,46.99293],[16.13584,46.8713],[15.98317,46.81909],[16.04933,46.65517],[15.86104,46.71801],[15.75926,46.69009],[15.56079,46.67962],[15.57606,46.63421],[15.47937,46.60276],[15.43357,46.65168],[15.22493,46.63421],[15.04682,46.64819],[14.99084,46.58877],[14.9603,46.62373],[14.85344,46.60276],[14.83308,46.50127],[14.75166,46.49776],[14.68041,46.43818],[14.61426,46.43818],[14.57864,46.37853],[14.44124,46.43116],[14.16135,46.42766],[14.12573,46.47674],[14.01886,46.47674],[13.91199,46.52578],[13.82548,46.50477],[13.44381,46.56078],[13.30641,46.55028],[13.1283,46.58877],[12.84332,46.61324],[12.72628,46.6412],[12.51255,46.66565],[12.35988,46.70405],[12.36497,46.77032],[12.28863,46.77729],[12.27337,46.88522],[12.20721,46.87478],[12.13088,46.90261],[12.11561,46.99987],[12.25301,47.06577],[12.2123,47.0935],[11.9833,47.04497],[11.73394,46.96168],[11.63217,47.01028],[11.54057,46.97557],[11.49986,47.00681],[11.41843,46.96515],[11.25559,46.97557],[11.1131,46.91304],[11.04185,46.76335],[10.88919,46.75986],[10.74161,46.78426],[10.70599,46.86435],[10.57877,46.83998],[10.45663,46.85043],[10.47699,46.92694],[10.38539,46.98946],[10.23272,46.86435],[10.12076,46.83302],[9.86632,46.94084],[9.90194,47.00334],[9.68312,47.05884],[9.61188,47.03804],[9.63223,47.12813],[9.58134,47.1662],[9.54063,47.26644],[9.60679,47.34926],[9.67294,47.36994],[9.64241,47.44571],[9.56608,47.48011],[9.71365,47.52824],[9.7849,47.59692],[9.83579,47.54542],[9.94774,47.53855],[10.09023,47.44915],[10.11059,47.36649],[10.2429,47.38717],[10.18692,47.2699],[10.32432,47.29751],[10.48208,47.44915],[10.43119,47.48699],[10.44137,47.59005],[10.48717,47.55229],[10.54823,47.53511],[10.59912,47.56602],[10.75688,47.53168],[10.88919,47.54542],[10.94008,47.48699],[10.99605,47.39061],[11.23523,47.44227],[11.28103,47.3975],[11.42352,47.51449],[11.57619,47.50762],[11.60672,47.59005],[11.83572,47.58662],[12.00366,47.62436],[12.20721,47.60378],[12.16141,47.69634],[12.2581,47.74427],[12.25301,47.67921],[12.43112,47.71004],[12.49219,47.63122],[12.56852,47.62779],[12.62959,47.68949],[12.77208,47.66893],[12.83315,47.54198],[12.97564,47.47323],[13.04179,47.49387],[13.0367,47.55572],[13.09777,47.64151],[13.03161,47.71004],[12.90439,47.72031],[13.00617,47.84683],[12.9451,47.93555],[12.86368,47.95941],[12.86368,48.00369],[12.75172,48.09894],[12.87386,48.21097],[12.96037,48.21097],[13.04179,48.2652],[13.18428,48.29907],[13.26061,48.2923],[13.39801,48.35659],[13.44381,48.41742],[13.43872,48.55234],[13.50997,48.58601],[13.61175,48.57255],[13.72879,48.5119],[13.78477,48.57255],[13.82039,48.62639],[13.79495,48.71713],[13.85093,48.77417],[14.05957,48.66338],[14.01377,48.63312],[14.07484,48.59274],[14.21733,48.59611],[14.3649,48.54897],[14.46668,48.64993],[14.55828,48.59611],[14.59899,48.62639],[14.72113,48.57591],[14.72113,48.6869],[14.8229,48.7272],[14.81782,48.77753],[14.96472,48.78518],[14.98936,49.01266],[15.14859,48.99503],[15.19439,48.93155],[15.30635,48.98501],[15.39286,48.98501],[15.48446,48.92821],[15.74908,48.8546],[15.84068,48.88807],[16.00862,48.78088],[16.20708,48.73391],[16.39537,48.73727],[16.49206,48.81105],[16.69053,48.77417],[16.7058,48.73391],[16.89917,48.71377],[16.97551,48.51527],[16.84828,48.45118],[16.85337,48.34644],[16.95515,48.25165],[16.99077,48.1499],[17.09255,48.13971],[17.08237,48.02412],[17.17397,48.02071],[17.08237,47.87414],[16.98568,47.86732],[17.08237,47.80925],[17.09255,47.70319],[16.74142,47.67921],[16.7058,47.75112],[16.53786,47.75454],[16.54804,47.70662],[16.42082,47.66893],[16.57348,47.6175],[16.67017,47.63122],[16.71088,47.53855],[16.66,47.44915],[16.54295,47.39406],[16.46153,47.39406],[16.49206,47.2768],[16.42591,47.19733],[16.47171,47.1489],[16.54804,47.1489],[16.47679,47.07964],[16.52768,47.05884],[16.50733,46.99293]]],terms_url:"https://basemap.at",terms_text:"basemap.at",description:"Basemap of Austria, based on government data.",icon:"https://www.basemap.at/images/logo_basemap.jpg"},{id:"basemap.at-overlay",name:"basemap.at Beschriftungen (annotations)",type:"tms",template:"https://maps{switch:1,2,3,4}.wien.gv.at/basemap/bmapoverlay/normal/google3857/{zoom}/{y}/{x}.png",zoomExtent:[0,19],polygon:[[[16.50733,46.99293],[16.28342,46.99293],[16.13584,46.8713],[15.98317,46.81909],[16.04933,46.65517],[15.86104,46.71801],[15.75926,46.69009],[15.56079,46.67962],[15.57606,46.63421],[15.47937,46.60276],[15.43357,46.65168],[15.22493,46.63421],[15.04682,46.64819],[14.99084,46.58877],[14.9603,46.62373],[14.85344,46.60276],[14.83308,46.50127],[14.75166,46.49776],[14.68041,46.43818],[14.61426,46.43818],[14.57864,46.37853],[14.44124,46.43116],[14.16135,46.42766],[14.12573,46.47674],[14.01886,46.47674],[13.91199,46.52578],[13.82548,46.50477],[13.44381,46.56078],[13.30641,46.55028],[13.1283,46.58877],[12.84332,46.61324],[12.72628,46.6412],[12.51255,46.66565],[12.35988,46.70405],[12.36497,46.77032],[12.28863,46.77729],[12.27337,46.88522],[12.20721,46.87478],[12.13088,46.90261],[12.11561,46.99987],[12.25301,47.06577],[12.2123,47.0935],[11.9833,47.04497],[11.73394,46.96168],[11.63217,47.01028],[11.54057,46.97557],[11.49986,47.00681],[11.41843,46.96515],[11.25559,46.97557],[11.1131,46.91304],[11.04185,46.76335],[10.88919,46.75986],[10.74161,46.78426],[10.70599,46.86435],[10.57877,46.83998],[10.45663,46.85043],[10.47699,46.92694],[10.38539,46.98946],[10.23272,46.86435],[10.12076,46.83302],[9.86632,46.94084],[9.90194,47.00334],[9.68312,47.05884],[9.61188,47.03804],[9.63223,47.12813],[9.58134,47.1662],[9.54063,47.26644],[9.60679,47.34926],[9.67294,47.36994],[9.64241,47.44571],[9.56608,47.48011],[9.71365,47.52824],[9.7849,47.59692],[9.83579,47.54542],[9.94774,47.53855],[10.09023,47.44915],[10.11059,47.36649],[10.2429,47.38717],[10.18692,47.2699],[10.32432,47.29751],[10.48208,47.44915],[10.43119,47.48699],[10.44137,47.59005],[10.48717,47.55229],[10.54823,47.53511],[10.59912,47.56602],[10.75688,47.53168],[10.88919,47.54542],[10.94008,47.48699],[10.99605,47.39061],[11.23523,47.44227],[11.28103,47.3975],[11.42352,47.51449],[11.57619,47.50762],[11.60672,47.59005],[11.83572,47.58662],[12.00366,47.62436],[12.20721,47.60378],[12.16141,47.69634],[12.2581,47.74427],[12.25301,47.67921],[12.43112,47.71004],[12.49219,47.63122],[12.56852,47.62779],[12.62959,47.68949],[12.77208,47.66893],[12.83315,47.54198],[12.97564,47.47323],[13.04179,47.49387],[13.0367,47.55572],[13.09777,47.64151],[13.03161,47.71004],[12.90439,47.72031],[13.00617,47.84683],[12.9451,47.93555],[12.86368,47.95941],[12.86368,48.00369],[12.75172,48.09894],[12.87386,48.21097],[12.96037,48.21097],[13.04179,48.2652],[13.18428,48.29907],[13.26061,48.2923],[13.39801,48.35659],[13.44381,48.41742],[13.43872,48.55234],[13.50997,48.58601],[13.61175,48.57255],[13.72879,48.5119],[13.78477,48.57255],[13.82039,48.62639],[13.79495,48.71713],[13.85093,48.77417],[14.05957,48.66338],[14.01377,48.63312],[14.07484,48.59274],[14.21733,48.59611],[14.3649,48.54897],[14.46668,48.64993],[14.55828,48.59611],[14.59899,48.62639],[14.72113,48.57591],[14.72113,48.6869],[14.8229,48.7272],[14.81782,48.77753],[14.96472,48.78518],[14.98936,49.01266],[15.14859,48.99503],[15.19439,48.93155],[15.30635,48.98501],[15.39286,48.98501],[15.48446,48.92821],[15.74908,48.8546],[15.84068,48.88807],[16.00862,48.78088],[16.20708,48.73391],[16.39537,48.73727],[16.49206,48.81105],[16.69053,48.77417],[16.7058,48.73391],[16.89917,48.71377],[16.97551,48.51527],[16.84828,48.45118],[16.85337,48.34644],[16.95515,48.25165],[16.99077,48.1499],[17.09255,48.13971],[17.08237,48.02412],[17.17397,48.02071],[17.08237,47.87414],[16.98568,47.86732],[17.08237,47.80925],[17.09255,47.70319],[16.74142,47.67921],[16.7058,47.75112],[16.53786,47.75454],[16.54804,47.70662],[16.42082,47.66893],[16.57348,47.6175],[16.67017,47.63122],[16.71088,47.53855],[16.66,47.44915],[16.54295,47.39406],[16.46153,47.39406],[16.49206,47.2768],[16.42591,47.19733],[16.47171,47.1489],[16.54804,47.1489],[16.47679,47.07964],[16.52768,47.05884],[16.50733,46.99293]]],terms_url:"https://basemap.at/",terms_text:"basemap.at",description:"Annotation overlay provided by basemap.at.",icon:"https://www.basemap.at/images/logo_basemap.jpg",overlay:true},{id:"basemap.at-orthofoto",name:"basemap.at Orthofoto",type:"tms",template:"https://maps{switch:1,2,3,4}.wien.gv.at/basemap/bmaporthofoto30cm/normal/google3857/{zoom}/{y}/{x}.jpeg",zoomExtent:[0,19],polygon:[[[16.50733,46.99293],[16.28342,46.99293],[16.13584,46.8713],[15.98317,46.81909],[16.04933,46.65517],[15.86104,46.71801],[15.75926,46.69009],[15.56079,46.67962],[15.57606,46.63421],[15.47937,46.60276],[15.43357,46.65168],[15.22493,46.63421],[15.04682,46.64819],[14.99084,46.58877],[14.9603,46.62373],[14.85344,46.60276],[14.83308,46.50127],[14.75166,46.49776],[14.68041,46.43818],[14.61426,46.43818],[14.57864,46.37853],[14.44124,46.43116],[14.16135,46.42766],[14.12573,46.47674],[14.01886,46.47674],[13.91199,46.52578],[13.82548,46.50477],[13.44381,46.56078],[13.30641,46.55028],[13.1283,46.58877],[12.84332,46.61324],[12.72628,46.6412],[12.51255,46.66565],[12.35988,46.70405],[12.36497,46.77032],[12.28863,46.77729],[12.27337,46.88522],[12.20721,46.87478],[12.13088,46.90261],[12.11561,46.99987],[12.25301,47.06577],[12.2123,47.0935],[11.9833,47.04497],[11.73394,46.96168],[11.63217,47.01028],[11.54057,46.97557],[11.49986,47.00681],[11.41843,46.96515],[11.25559,46.97557],[11.1131,46.91304],[11.04185,46.76335],[10.88919,46.75986],[10.74161,46.78426],[10.70599,46.86435],[10.57877,46.83998],[10.45663,46.85043],[10.47699,46.92694],[10.38539,46.98946],[10.23272,46.86435],[10.12076,46.83302],[9.86632,46.94084],[9.90194,47.00334],[9.68312,47.05884],[9.61188,47.03804],[9.63223,47.12813],[9.58134,47.1662],[9.54063,47.26644],[9.60679,47.34926],[9.67294,47.36994],[9.64241,47.44571],[9.56608,47.48011],[9.71365,47.52824],[9.7849,47.59692],[9.83579,47.54542],[9.94774,47.53855],[10.09023,47.44915],[10.11059,47.36649],[10.2429,47.38717],[10.18692,47.2699],[10.32432,47.29751],[10.48208,47.44915],[10.43119,47.48699],[10.44137,47.59005],[10.48717,47.55229],[10.54823,47.53511],[10.59912,47.56602],[10.75688,47.53168],[10.88919,47.54542],[10.94008,47.48699],[10.99605,47.39061],[11.23523,47.44227],[11.28103,47.3975],[11.42352,47.51449],[11.57619,47.50762],[11.60672,47.59005],[11.83572,47.58662],[12.00366,47.62436],[12.20721,47.60378],[12.16141,47.69634],[12.2581,47.74427],[12.25301,47.67921],[12.43112,47.71004],[12.49219,47.63122],[12.56852,47.62779],[12.62959,47.68949],[12.77208,47.66893],[12.83315,47.54198],[12.97564,47.47323],[13.04179,47.49387],[13.0367,47.55572],[13.09777,47.64151],[13.03161,47.71004],[12.90439,47.72031],[13.00617,47.84683],[12.9451,47.93555],[12.86368,47.95941],[12.86368,48.00369],[12.75172,48.09894],[12.87386,48.21097],[12.96037,48.21097],[13.04179,48.2652],[13.18428,48.29907],[13.26061,48.2923],[13.39801,48.35659],[13.44381,48.41742],[13.43872,48.55234],[13.50997,48.58601],[13.61175,48.57255],[13.72879,48.5119],[13.78477,48.57255],[13.82039,48.62639],[13.79495,48.71713],[13.85093,48.77417],[14.05957,48.66338],[14.01377,48.63312],[14.07484,48.59274],[14.21733,48.59611],[14.3649,48.54897],[14.46668,48.64993],[14.55828,48.59611],[14.59899,48.62639],[14.72113,48.57591],[14.72113,48.6869],[14.8229,48.7272],[14.81782,48.77753],[14.96472,48.78518],[14.98936,49.01266],[15.14859,48.99503],[15.19439,48.93155],[15.30635,48.98501],[15.39286,48.98501],[15.48446,48.92821],[15.74908,48.8546],[15.84068,48.88807],[16.00862,48.78088],[16.20708,48.73391],[16.39537,48.73727],[16.49206,48.81105],[16.69053,48.77417],[16.7058,48.73391],[16.89917,48.71377],[16.97551,48.51527],[16.84828,48.45118],[16.85337,48.34644],[16.95515,48.25165],[16.99077,48.1499],[17.09255,48.13971],[17.08237,48.02412],[17.17397,48.02071],[17.08237,47.87414],[16.98568,47.86732],[17.08237,47.80925],[17.09255,47.70319],[16.74142,47.67921],[16.7058,47.75112],[16.53786,47.75454],[16.54804,47.70662],[16.42082,47.66893],[16.57348,47.6175],[16.67017,47.63122],[16.71088,47.53855],[16.66,47.44915],[16.54295,47.39406],[16.46153,47.39406],[16.49206,47.2768],[16.42591,47.19733],[16.47171,47.1489],[16.54804,47.1489],[16.47679,47.07964],[16.52768,47.05884],[16.50733,46.99293]]],terms_url:"https://basemap.at",terms_text:"basemap.at",best:true,description:"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery.",icon:"https://www.basemap.at/images/logo_basemap.jpg"},{id:"bavaria-80cm",name:"Bavaria (80 cm)",type:"wms",template:"https://geoservices.bayern.de/wms/v2/ogc_dop80_oa.cgi?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=by_dop80c&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[7,18],polygon:[[[10.12359,50.56846],[10.14286,50.55078],[10.20281,50.55742],[10.25205,50.51796],[10.32698,50.49345],[10.41048,50.41848],[10.60317,50.33109],[10.62244,50.2271],[10.72521,50.21066],[10.72949,50.24765],[10.85153,50.24354],[10.71879,50.32015],[10.71236,50.36524],[10.85581,50.39664],[10.93717,50.39664],[10.99069,50.36661],[11.12772,50.36661],[11.1791,50.31332],[11.16197,50.29417],[11.24119,50.2928],[11.24975,50.37344],[11.24119,50.47982],[11.35895,50.5234],[11.43816,50.50979],[11.44244,50.48936],[11.42532,50.4771],[11.42532,50.44166],[11.48955,50.42257],[11.49169,50.39801],[11.51952,50.39801],[11.52594,50.37617],[11.59874,50.40347],[11.63727,50.38845],[11.79357,50.4212],[11.83639,50.39255],[11.92203,50.42802],[11.98626,50.38709],[11.98412,50.35705],[12.04835,50.33109],[12.09331,50.32972],[12.1297,50.29828],[12.14041,50.27228],[12.10615,50.25586],[12.11258,50.23532],[12.14897,50.23669],[12.19822,50.20107],[12.22391,50.16406],[12.20464,50.14348],[12.20678,50.10779],[12.24318,50.09955],[12.27743,50.07208],[12.49367,49.98543],[12.49796,49.94136],[12.55576,49.92206],[12.54934,49.86827],[12.48083,49.78817],[12.41018,49.75775],[12.46156,49.70655],[12.5472,49.68023],[12.58788,49.55261],[12.65425,49.53455],[12.66281,49.43302],[12.75274,49.41073],[12.7977,49.34661],[12.90475,49.35638],[12.99681,49.33685],[13.05462,49.27543],[13.13169,49.21952],[13.19164,49.14395],[13.2366,49.12153],[13.29655,49.12293],[13.37148,49.08088],[13.4143,49.02897],[13.4143,48.97981],[13.57916,48.96997],[13.63483,48.94326],[13.67765,48.88698],[13.73759,48.89261],[13.7847,48.83346],[13.84036,48.77423],[13.81681,48.70646],[13.84464,48.70081],[13.8425,48.60038],[13.76543,48.5423],[13.75258,48.50401],[13.67122,48.50543],[13.64339,48.54371],[13.45712,48.5508],[13.45712,48.41598],[13.40574,48.36053],[13.2837,48.27511],[13.09315,48.26941],[12.95827,48.19097],[12.87691,48.18526],[12.772,48.09382],[12.86407,48.01368],[12.89832,47.95492],[12.94543,47.95636],[12.99681,47.88461],[13.01394,47.83434],[12.93472,47.7322],[13.0589,47.72499],[13.11885,47.63851],[13.06532,47.56922],[13.05676,47.47379],[13.00323,47.45208],[12.76772,47.55044],[12.76986,47.63274],[12.73989,47.67312],[12.6671,47.67024],[12.57503,47.6212],[12.48083,47.61975],[12.41446,47.67024],[12.24318,47.67745],[12.2132,47.69186],[12.19179,47.68177],[12.2132,47.66591],[12.21106,47.60388],[12.17467,47.59521],[12.13827,47.60388],[11.89205,47.60388],[11.85137,47.57933],[11.63942,47.58222],[11.59445,47.54899],[11.59017,47.51285],[11.51738,47.49839],[11.4403,47.50417],[11.39534,47.47524],[11.42746,47.44484],[11.3461,47.44339],[11.27973,47.39559],[11.21336,47.38834],[11.24761,47.43181],[11.10203,47.39269],[10.965,47.38979],[10.97785,47.43615],[10.9179,47.47524],[10.8708,47.47524],[10.85581,47.49405],[10.90077,47.5143],[10.87294,47.53598],[10.81085,47.51285],[10.64385,47.54899],[10.59461,47.55477],[10.57962,47.52876],[10.46187,47.54032],[10.46615,47.48392],[10.48756,47.47813],[10.48756,47.41298],[10.45973,47.40283],[10.45973,47.37529],[10.41048,47.37384],[10.40834,47.34339],[10.32056,47.28678],[10.28202,47.27806],[10.28416,47.26208],[10.14714,47.26208],[10.1921,47.30275],[10.19424,47.37384],[10.16641,47.37384],[10.16641,47.34629],[10.10004,47.34339],[10.0615,47.36369],[10.06792,47.41877],[10.09361,47.42601],[10.09576,47.44194],[9.978,47.48537],[9.95659,47.52731],[9.8945,47.52876],[9.85596,47.50851],[9.81743,47.54465],[9.82171,47.57644],[9.77461,47.58222],[9.73821,47.52586],[9.67398,47.53454],[9.58406,47.56488],[9.63972,47.60532],[9.7168,47.60388],[9.85596,47.676],[9.978,47.65582],[10.02938,47.68177],[10.10004,47.66735],[10.13215,47.676],[10.14286,47.70195],[10.0615,47.7725],[10.11288,47.8099],[10.08291,47.85302],[10.1086,47.90902],[10.07649,47.96496],[10.13001,48.02084],[10.13429,48.10669],[10.10004,48.12813],[10.05508,48.26228],[9.96944,48.36765],[10.03153,48.42593],[10.02938,48.46144],[10.12359,48.47705],[10.15356,48.4515],[10.23492,48.51252],[10.31628,48.51678],[10.29915,48.61878],[10.24563,48.6683],[10.27346,48.70646],[10.3698,48.68385],[10.43189,48.69939],[10.45116,48.72765],[10.40192,48.746],[10.44046,48.84896],[10.43403,48.95873],[10.33769,49.02055],[10.24991,49.03599],[10.24991,49.07387],[10.20066,49.10331],[10.25205,49.13274],[10.12359,49.19714],[10.11931,49.26285],[10.15142,49.28939],[10.10432,49.34522],[10.14072,49.39401],[10.1086,49.44555],[10.11074,49.50537],[10.0722,49.53316],[10.01654,49.47616],[9.92662,49.47894],[9.92448,49.55678],[9.89878,49.58177],[9.85596,49.53872],[9.80672,49.55678],[9.86667,49.60675],[9.85382,49.6442],[9.81743,49.66083],[9.83455,49.68993],[9.79602,49.72039],[9.75748,49.70793],[9.74035,49.68577],[9.70609,49.71624],[9.67826,49.71624],[9.68254,49.68854],[9.62045,49.69131],[9.64615,49.78955],[9.55836,49.77434],[9.57121,49.73561],[9.50698,49.75222],[9.49199,49.77987],[9.46844,49.76051],[9.42562,49.77849],[9.40421,49.76466],[9.33356,49.7702],[9.32928,49.73423],[9.4085,49.72593],[9.42776,49.69824],[9.41492,49.6442],[9.38066,49.63865],[9.35925,49.64974],[9.33998,49.63727],[9.31215,49.64836],[9.27789,49.62617],[9.28432,49.60814],[9.2415,49.57483],[9.09805,49.57205],[9.06594,49.60814],[9.10019,49.65113],[9.09163,49.6927],[9.13017,49.71208],[9.13873,49.74253],[9.10876,49.75637],[9.13659,49.79093],[9.10019,49.78955],[9.07236,49.82824],[9.03596,49.83514],[9.01669,50.02671],[8.96317,50.03084],[8.95674,50.05971],[9.00171,50.0707],[9.02097,50.11054],[9.1216,50.12289],[9.15586,50.11328],[9.19654,50.11878],[9.18583,50.13525],[9.23507,50.1476],[9.37638,50.12701],[9.4085,50.0817],[9.52197,50.09543],[9.50484,50.14211],[9.53267,50.16406],[9.48985,50.16954],[9.49413,50.24354],[9.61403,50.22163],[9.66541,50.23532],[9.63544,50.24901],[9.66756,50.27228],[9.74249,50.30922],[9.72964,50.35841],[9.77032,50.42939],[9.86881,50.40074],[9.91805,50.40893],[10.03581,50.47982],[10.03795,50.51115],[10.12359,50.56846]]],terms_url:"https://www.ldbv.bayern.de/",terms_text:"Bayerische Vermessungsverwaltung",best:true},{id:"bavaria-DOP80",name:"Bavaria DOP 80cm",type:"tms",template:"https://mapproxy.osm.ch/tiles/BAYERNDOP80/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",zoomExtent:[7,18],polygon:[[[10.12359,50.56846],[10.14286,50.55078],[10.20281,50.55742],[10.25205,50.51796],[10.32698,50.49345],[10.41048,50.41848],[10.60317,50.33109],[10.62244,50.2271],[10.72521,50.21066],[10.72949,50.24765],[10.85153,50.24354],[10.71879,50.32015],[10.71236,50.36524],[10.85581,50.39664],[10.93717,50.39664],[10.99069,50.36661],[11.12772,50.36661],[11.1791,50.31332],[11.16197,50.29417],[11.24119,50.2928],[11.24975,50.37344],[11.24119,50.47982],[11.35895,50.5234],[11.43816,50.50979],[11.44244,50.48936],[11.42532,50.4771],[11.42532,50.44166],[11.48955,50.42257],[11.49169,50.39801],[11.51952,50.39801],[11.52594,50.37617],[11.59874,50.40347],[11.63727,50.38845],[11.79357,50.4212],[11.83639,50.39255],[11.92203,50.42802],[11.98626,50.38709],[11.98412,50.35705],[12.04835,50.33109],[12.09331,50.32972],[12.1297,50.29828],[12.14041,50.27228],[12.10615,50.25586],[12.11258,50.23532],[12.14897,50.23669],[12.19822,50.20107],[12.22391,50.16406],[12.20464,50.14348],[12.20678,50.10779],[12.24318,50.09955],[12.27743,50.07208],[12.49367,49.98543],[12.49796,49.94136],[12.55576,49.92206],[12.54934,49.86827],[12.48083,49.78817],[12.41018,49.75775],[12.46156,49.70655],[12.5472,49.68023],[12.58788,49.55261],[12.65425,49.53455],[12.66281,49.43302],[12.75274,49.41073],[12.7977,49.34661],[12.90475,49.35638],[12.99681,49.33685],[13.05462,49.27543],[13.13169,49.21952],[13.19164,49.14395],[13.2366,49.12153],[13.29655,49.12293],[13.37148,49.08088],[13.4143,49.02897],[13.4143,48.97981],[13.57916,48.96997],[13.63483,48.94326],[13.67765,48.88698],[13.73759,48.89261],[13.7847,48.83346],[13.84036,48.77423],[13.81681,48.70646],[13.84464,48.70081],[13.8425,48.60038],[13.76543,48.5423],[13.75258,48.50401],[13.67122,48.50543],[13.64339,48.54371],[13.45712,48.5508],[13.45712,48.41598],[13.40574,48.36053],[13.2837,48.27511],[13.09315,48.26941],[12.95827,48.19097],[12.87691,48.18526],[12.772,48.09382],[12.86407,48.01368],[12.89832,47.95492],[12.94543,47.95636],[12.99681,47.88461],[13.01394,47.83434],[12.93472,47.7322],[13.0589,47.72499],[13.11885,47.63851],[13.06532,47.56922],[13.05676,47.47379],[13.00323,47.45208],[12.76772,47.55044],[12.76986,47.63274],[12.73989,47.67312],[12.6671,47.67024],[12.57503,47.6212],[12.48083,47.61975],[12.41446,47.67024],[12.24318,47.67745],[12.2132,47.69186],[12.19179,47.68177],[12.2132,47.66591],[12.21106,47.60388],[12.17467,47.59521],[12.13827,47.60388],[11.89205,47.60388],[11.85137,47.57933],[11.63942,47.58222],[11.59445,47.54899],[11.59017,47.51285],[11.51738,47.49839],[11.4403,47.50417],[11.39534,47.47524],[11.42746,47.44484],[11.3461,47.44339],[11.27973,47.39559],[11.21336,47.38834],[11.24761,47.43181],[11.10203,47.39269],[10.965,47.38979],[10.97785,47.43615],[10.9179,47.47524],[10.8708,47.47524],[10.85581,47.49405],[10.90077,47.5143],[10.87294,47.53598],[10.81085,47.51285],[10.64385,47.54899],[10.59461,47.55477],[10.57962,47.52876],[10.46187,47.54032],[10.46615,47.48392],[10.48756,47.47813],[10.48756,47.41298],[10.45973,47.40283],[10.45973,47.37529],[10.41048,47.37384],[10.40834,47.34339],[10.32056,47.28678],[10.28202,47.27806],[10.28416,47.26208],[10.14714,47.26208],[10.1921,47.30275],[10.19424,47.37384],[10.16641,47.37384],[10.16641,47.34629],[10.10004,47.34339],[10.0615,47.36369],[10.06792,47.41877],[10.09361,47.42601],[10.09576,47.44194],[9.978,47.48537],[9.95659,47.52731],[9.8945,47.52876],[9.85596,47.50851],[9.81743,47.54465],[9.82171,47.57644],[9.77461,47.58222],[9.73821,47.52586],[9.67398,47.53454],[9.58406,47.56488],[9.63972,47.60532],[9.7168,47.60388],[9.85596,47.676],[9.978,47.65582],[10.02938,47.68177],[10.10004,47.66735],[10.13215,47.676],[10.14286,47.70195],[10.0615,47.7725],[10.11288,47.8099],[10.08291,47.85302],[10.1086,47.90902],[10.07649,47.96496],[10.13001,48.02084],[10.13429,48.10669],[10.10004,48.12813],[10.05508,48.26228],[9.96944,48.36765],[10.03153,48.42593],[10.02938,48.46144],[10.12359,48.47705],[10.15356,48.4515],[10.23492,48.51252],[10.31628,48.51678],[10.29915,48.61878],[10.24563,48.6683],[10.27346,48.70646],[10.3698,48.68385],[10.43189,48.69939],[10.45116,48.72765],[10.40192,48.746],[10.44046,48.84896],[10.43403,48.95873],[10.33769,49.02055],[10.24991,49.03599],[10.24991,49.07387],[10.20066,49.10331],[10.25205,49.13274],[10.12359,49.19714],[10.11931,49.26285],[10.15142,49.28939],[10.10432,49.34522],[10.14072,49.39401],[10.1086,49.44555],[10.11074,49.50537],[10.0722,49.53316],[10.01654,49.47616],[9.92662,49.47894],[9.92448,49.55678],[9.89878,49.58177],[9.85596,49.53872],[9.80672,49.55678],[9.86667,49.60675],[9.85382,49.6442],[9.81743,49.66083],[9.83455,49.68993],[9.79602,49.72039],[9.75748,49.70793],[9.74035,49.68577],[9.70609,49.71624],[9.67826,49.71624],[9.68254,49.68854],[9.62045,49.69131],[9.64615,49.78955],[9.55836,49.77434],[9.57121,49.73561],[9.50698,49.75222],[9.49199,49.77987],[9.46844,49.76051],[9.42562,49.77849],[9.40421,49.76466],[9.33356,49.7702],[9.32928,49.73423],[9.4085,49.72593],[9.42776,49.69824],[9.41492,49.6442],[9.38066,49.63865],[9.35925,49.64974],[9.33998,49.63727],[9.31215,49.64836],[9.27789,49.62617],[9.28432,49.60814],[9.2415,49.57483],[9.09805,49.57205],[9.06594,49.60814],[9.10019,49.65113],[9.09163,49.6927],[9.13017,49.71208],[9.13873,49.74253],[9.10876,49.75637],[9.13659,49.79093],[9.10019,49.78955],[9.07236,49.82824],[9.03596,49.83514],[9.01669,50.02671],[8.96317,50.03084],[8.95674,50.05971],[9.00171,50.0707],[9.02097,50.11054],[9.1216,50.12289],[9.15586,50.11328],[9.19654,50.11878],[9.18583,50.13525],[9.23507,50.1476],[9.37638,50.12701],[9.4085,50.0817],[9.52197,50.09543],[9.50484,50.14211],[9.53267,50.16406],[9.48985,50.16954],[9.49413,50.24354],[9.61403,50.22163],[9.66541,50.23532],[9.63544,50.24901],[9.66756,50.27228],[9.74249,50.30922],[9.72964,50.35841],[9.77032,50.42939],[9.86881,50.40074],[9.91805,50.40893],[10.03581,50.47982],[10.03795,50.51115],[10.12359,50.56846]]],terms_url:"https://www.ldbv.bayern.de/",terms_text:"Bayerische Vermessungsverwaltung",best:true,description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{id:"route500hydro",name:"BD Carthage",type:"tms",template:"https://{switch:a,b,c}.tile.openstreetmap.fr/route500hydro/{zoom}/{x}/{y}.png",zoomExtent:[6,20],polygon:[[[-2.7,43.9],[-6.3,48.98],[-2.25,50.09],[1.31,50.88],[2.35816,51.32937],[2.5488,51.09759],[2.57048,51.07409],[2.58741,51.01763],[2.59845,51.0051],[2.61558,50.99749],[2.63986,50.95766],[2.64225,50.94578],[2.62452,50.9256],[2.61962,50.91067],[2.62396,50.86071],[2.62781,50.85054],[2.63786,50.83696],[2.6511,50.82906],[2.73267,50.81738],[2.79995,50.73795],[2.81655,50.73092],[2.85265,50.73335],[2.89072,50.7162],[2.90492,50.71536],[2.9161,50.72418],[2.93508,50.75592],[3.00718,50.78377],[3.08218,50.78749],[3.09244,50.79092],[3.11412,50.80566],[3.14877,50.80195],[3.2154,50.73111],[3.22149,50.7267],[3.27051,50.70375],[3.27545,50.67757],[3.26576,50.6604],[3.26588,50.64054],[3.28922,50.60028],[3.29219,50.55037],[3.3056,50.53267],[3.37551,50.50839],[3.3898,50.50884],[3.4748,50.54445],[3.52173,50.53459],[3.53266,50.51873],[3.54779,50.51012],[3.61523,50.50558],[3.67378,50.45642],[3.68415,50.35277],[3.6901,50.34044],[3.70258,50.33482],[3.71576,50.33854],[3.74935,50.36279],[3.84109,50.36558],[3.90189,50.3436],[3.91317,50.34291],[4.02672,50.36904],[4.13761,50.29984],[4.14388,50.29727],[4.21444,50.28167],[4.22904,50.26664],[4.23078,50.25233],[4.17084,50.18579],[4.16601,50.16888],[4.1764,50.1547],[4.21195,50.13602],[4.24074,50.07102],[4.23193,50.05551],[4.18164,50.03436],[4.17177,50.02537],[4.16976,50.01217],[4.1765,50.00065],[4.20633,49.97546],[4.22164,49.97089],[4.30877,49.98145],[4.44542,49.9523],[4.45469,49.95251],[4.6581,50.00609],[4.66936,50.01392],[4.67293,50.02716],[4.66924,50.06972],[4.69517,50.10472],[4.83123,50.17941],[4.8815,50.16436],[4.90479,50.14451],[4.90426,50.12639],[4.88076,50.0815],[4.86277,50.0745],[4.85104,50.06216],[4.84331,50.03884],[4.84331,50.03883],[4.8433,50.03881],[4.82678,49.989],[4.82662,49.97692],[4.83343,49.96696],[4.89654,49.91753],[4.89755,49.89424],[4.87913,49.86942],[4.87625,49.85111],[4.88924,49.81266],[4.89769,49.80204],[4.91098,49.79926],[4.99534,49.81116],[5.01867,49.79272],[5.02686,49.78886],[5.09944,49.77323],[5.13458,49.73462],[5.1412,49.72984],[5.18761,49.70906],[5.19602,49.70732],[5.28157,49.70836],[5.33363,49.67308],[5.344,49.65049],[5.3544,49.64041],[5.43141,49.60791],[5.48205,49.52815],[5.49294,49.51979],[5.50666,49.52042],[5.55401,49.54025],[5.59311,49.53424],[5.6076,49.53761],[5.641,49.56095],[5.70676,49.55267],[5.71578,49.55361],[5.77526,49.57414],[5.8399,49.55321],[5.86126,49.52038],[5.876,49.5114],[5.97516,49.50129],[5.99801,49.47317],[6.01627,49.46597],[6.08635,49.47562],[6.09319,49.47787],[6.17397,49.52187],[6.24643,49.52511],[6.334,49.48235],[6.34423,49.48037],[6.43515,49.487],[6.5451,49.44384],[6.60639,49.37868],[6.60497,49.33739],[6.61627,49.31869],[6.67013,49.29269],[6.72996,49.22917],[6.74328,49.19086],[6.76026,49.17752],[6.80904,49.17284],[6.82473,49.17826],[6.83093,49.19366],[6.82982,49.21802],[6.85119,49.23136],[6.88453,49.2239],[6.89322,49.22389],[6.93753,49.23369],[7.04055,49.19794],[7.0463,49.17503],[7.05478,49.16313],[7.06908,49.16018],[7.10494,49.16634],[7.14315,49.14159],[7.1535,49.13839],[7.28683,49.13488],[7.29893,49.13856],[7.36095,49.18259],[7.45012,49.19517],[7.50113,49.17672],[7.54379,49.10572],[7.5579,49.09626],[7.6296,49.08527],[7.64722,49.06722],[7.6612,49.06119],[7.75401,49.05963],[7.76073,49.06067],[7.80291,49.07489],[7.85525,49.05329],[7.8673,49.05227],[7.93826,49.06832],[8.08069,49.00688],[8.2225,48.98787],[8.23704,48.97683],[8.23589,48.95817],[8.20888,48.94863],[8.20089,48.94339],[8.15824,48.89753],[8.10087,48.7993],[7.99071,48.74478],[7.98534,48.7409],[7.90422,48.65865],[7.85605,48.63606],[7.8484,48.62977],[7.81842,48.58883],[7.81456,48.57704],[7.81449,48.50968],[7.78547,48.48337],[7.78055,48.47652],[7.74506,48.39484],[7.74357,48.38427],[7.75159,48.32322],[7.71085,48.29841],[7.70241,48.28803],[7.67661,48.21555],[7.59605,48.11698],[7.59165,48.10648],[7.58522,48.04694],[7.59127,48.03035],[7.62437,47.99865],[7.63205,47.97081],[7.57554,47.87436],[7.5728,47.86435],[7.57267,47.83631],[7.54581,47.78793],[7.54418,47.77232],[7.55758,47.72899],[7.53526,47.6989],[7.53136,47.68564],[7.537,47.67302],[7.60016,47.60822],[7.58967,47.56755],[7.55424,47.55128],[7.54511,47.54283],[7.51256,47.48439],[7.38747,47.42111],[7.32653,47.4273],[7.24435,47.40939],[7.16708,47.4335],[7.15212,47.47612],[7.14279,47.48707],[7.12853,47.48893],[7.0801,47.47718],[7.03557,47.48695],[7.02102,47.48458],[7.01205,47.47287],[7.003,47.44095],[6.9551,47.40808],[6.94716,47.39698],[6.94818,47.38337],[6.95769,47.37359],[6.97126,47.37218],[7.018,47.38386],[7.05623,47.37035],[7.07007,47.35005],[7.05958,47.32257],[6.97424,47.27856],[6.96347,47.26233],[6.96134,47.23479],[6.89443,47.19393],[6.88913,47.18922],[6.85545,47.14636],[6.76907,47.10751],[6.76011,47.09953],[6.72561,47.0418],[6.62355,46.9811],[6.4812,46.9445],[6.46892,46.93522],[6.46686,46.91997],[6.47548,46.88771],[6.4535,46.8239],[6.45644,46.80534],[6.46722,46.79104],[6.46098,46.76887],[6.15817,46.59343],[6.14872,46.58069],[6.15152,46.56508],[6.16549,46.54399],[6.15811,46.52456],[6.10174,46.46979],[6.09572,46.45418],[6.09704,46.43317],[6.10829,46.41643],[6.16622,46.38839],[6.17817,46.36922],[6.13748,46.31297],[6.13371,46.30227],[6.13038,46.23737],[6.1103,46.22344],[6.08865,46.23081],[6.07717,46.23123],[6.01857,46.21601],[6.00681,46.20752],[6.00388,46.19332],[6.00787,46.16977],[6.01783,46.15564],[6.03509,46.15456],[6.05564,46.16288],[6.12468,46.15415],[6.13778,46.15702],[6.24026,46.22094],[6.24906,46.23299],[6.24707,46.24777],[6.21148,46.31057],[6.21219,46.32485],[6.23946,46.36705],[6.31648,46.41557],[6.41083,46.42495],[6.41748,46.42682],[6.50498,46.46871],[6.63047,46.47435],[6.74665,46.45695],[6.82244,46.42925],[6.81832,46.38181],[6.80484,46.36179],[6.80189,46.34639],[6.81095,46.33359],[6.86491,46.30038],[6.87504,46.28007],[6.86092,46.2439],[6.82698,46.21188],[6.82075,46.19862],[6.81863,46.16592],[6.82259,46.15261],[6.83427,46.14509],[6.90382,46.12971],[6.90491,46.09595],[6.90932,46.08406],[6.92001,46.07721],[6.94898,46.0699],[7.01556,46.00883],[7.05191,45.93066],[7.04533,45.92217],[7.04497,45.92064],[7.04394,45.92036],[6.99582,45.85822],[6.94097,45.83551],[6.84376,45.82387],[6.83102,45.81711],[6.82614,45.80353],[6.82787,45.73217],[6.83174,45.72082],[6.8414,45.71373],[6.90729,45.69124],[6.92419,45.66935],[6.94247,45.66172],[6.97131,45.66528],[7.00597,45.64945],[7.01151,45.63652],[6.9978,45.60877],[6.99643,45.59465],[7.0158,45.52354],[7.02774,45.5102],[7.1072,45.47877],[7.1228,45.44924],[7.13304,45.44001],[7.1856,45.41894],[7.19515,45.40409],[7.17075,45.35069],[7.14232,45.32298],[7.13649,45.30576],[7.14458,45.25048],[7.08417,45.20279],[6.99279,45.19823],[6.98106,45.19368],[6.90009,45.12689],[6.85843,45.11699],[6.78283,45.14228],[6.77056,45.14242],[6.67751,45.11356],[6.6653,45.10289],[6.66501,45.08667],[6.68237,45.04558],[6.69602,45.03395],[6.75744,45.01884],[6.78375,44.9146],[6.7942,44.90161],[6.86698,44.86519],[6.8798,44.86346],[6.93633,44.87461],[7.01795,44.84402],[7.03453,44.82282],[7.03711,44.75009],[7.0496,44.73226],[7.07224,44.72311],[7.08651,44.6968],[7.08666,44.68085],[7.07671,44.67134],[6.99007,44.67203],[6.97413,44.66431],[6.97056,44.64696],[6.97819,44.61784],[6.94659,44.57124],[6.88235,44.53479],[6.87233,44.5195],[6.87892,44.50245],[6.95894,44.43129],[6.95872,44.42908],[6.92167,44.41436],[6.91223,44.40659],[6.90907,44.39477],[6.90972,44.38195],[6.91637,44.36804],[6.99909,44.29414],[7.01181,44.256],[7.01983,44.24558],[7.03259,44.2424],[7.07312,44.2461],[7.1651,44.22112],[7.24533,44.18544],[7.26053,44.16682],[7.27537,44.15947],[7.33878,44.1574],[7.36278,44.13834],[7.37776,44.13416],[7.56283,44.15792],[7.5642,44.15836],[7.56478,44.15817],[7.60548,44.1634],[7.6162,44.16827],[7.63989,44.18928],[7.68608,44.1861],[7.69422,44.17795],[7.68937,44.13869],[7.69445,44.12276],[7.72786,44.08615],[7.72403,44.05704],[7.68603,44.02371],[7.68077,44.0164],[7.66016,43.9672],[7.59624,43.94466],[7.58419,43.93287],[7.56858,43.89159],[7.5271,43.87434],[7.51649,43.86397],[7.51594,43.84915],[7.53622,43.79234],[9.8,43.1],[9.63227,41.43244],[9.36968,41.35052],[9.27311,41.29196],[8.94186,41.27688],[5.8,41.64],[3.17358,42.41768],[3.16081,42.42757],[3.0944,42.41457],[3.03402,42.45331],[3.02214,42.45645],[2.87822,42.4487],[2.87019,42.44653],[2.78424,42.40256],[2.7413,42.41128],[2.72928,42.40998],[2.69331,42.39417],[2.68378,42.3854],[2.68162,42.37263],[2.68585,42.34679],[2.66719,42.33008],[2.58106,42.34418],[2.56777,42.34173],[2.5338,42.32197],[2.47795,42.32986],[2.41933,42.37658],[2.41222,42.38021],[2.26719,42.42055],[2.25973,42.42117],[2.20694,42.41558],[2.20653,42.41526],[2.20526,42.41541],[2.16028,42.41065],[2.14881,42.40545],[2.09393,42.35474],[2.00861,42.33818],[1.965,42.36473],[1.93076,42.42442],[1.92089,42.43302],[1.88467,42.44761],[1.88459,42.44762],[1.88444,42.4477],[1.82774,42.47056],[1.72567,42.48452],[1.71561,42.50125],[1.7272,42.56103],[1.72479,42.57499],[1.71011,42.59992],[1.69377,42.60975],[1.60283,42.61382],[1.56069,42.6392],[1.54636,42.64166],[1.50444,42.6331],[1.4921,42.62502],[1.47238,42.59703],[1.43792,42.59264],[1.41936,42.60643],[1.38032,42.67415],[1.37335,42.68127],[1.33313,42.70563],[1.32364,42.7085],[1.23221,42.71248],[1.16554,42.69928],[1.08546,42.76635],[1.07564,42.77079],[0.95937,42.78852],[0.95073,42.78794],[0.92265,42.7797],[0.84606,42.8157],[0.71511,42.8464],[0.70017,42.84402],[0.69117,42.83186],[0.67409,42.76479],[0.67474,42.75286],[0.69192,42.70684],[0.669,42.67901],[0.43024,42.67863],[0.3715,42.70308],[0.35954,42.70415],[0.34912,42.69817],[0.32567,42.67274],[0.29571,42.66388],[0.24594,42.70175],[0.23972,42.70494],[0.18967,42.72039],[0.17919,42.72075],[-0.01993,42.67389],[-0.06726,42.6848],[-0.16949,42.77157],[-0.29987,42.82697],[-0.31683,42.82635],[-0.39208,42.78766],[-0.44354,42.78453],[-0.48842,42.80255],[-0.50868,42.79935],[-0.54499,42.76906],[-0.56721,42.76937],[-0.67446,42.86392],[-0.68094,42.86775],[-0.73372,42.88666],[-0.7476,42.93879],[-0.75711,42.95107],[-0.77253,42.95284],[-0.82114,42.93865],[-0.94508,42.94192],[-1.02313,42.98206],[-1.10852,43.00409],[-1.1156,43.00461],[-1.14775,43.00124],[-1.15845,43.01452],[-1.16736,43.02083],[-1.21622,43.0381],[-1.22612,43.03898],[-1.26236,43.03303],[-1.30643,43.05531],[-1.31992,43.05696],[-1.33135,43.0496],[-1.3542,43.0197],[-1.43868,43.03371],[-1.4775,43.06889],[-1.48311,43.08561],[-1.47641,43.10248],[-1.43479,43.13087],[-1.42732,43.1404],[-1.39411,43.22935],[-1.39531,43.24596],[-1.40868,43.25591],[-1.52629,43.28099],[-1.54626,43.2737],[-1.57149,43.2412],[-1.61053,43.24223],[-1.65,43.29323],[-1.66953,43.30065],[-1.73359,43.28856],[-1.75606,43.31966],[-1.76297,43.32565],[-1.79156,43.34067],[-1.80099,43.37017],[-1.78509,43.39037],[-1.7835,43.39686],[-2.7,43.9]]],terms_url:"http://www.sandre.eaufrance.fr/actualite/la-bd-carthage-en-licence-ouverte-open-licence",terms_text:"Tiles © cquest@Openstreetmap France, data © Onema - IGN, LO/OL",description:"Réseau hydrographique: cours et plans d'eau et POI",overlay:true},{id:"fr.ign.bdortho",name:"BDOrtho IGN",type:"tms",template:"https://proxy-ign.openstreetmap.fr/94GjiyqD/bdortho/{zoom}/{x}/{y}.jpg",zoomExtent:[2,21],polygon:[[[-2.7,43.9],[-6.3,48.98],[-2.25,50.09],[1.31,50.88],[2.35816,51.32937],[2.5488,51.09759],[2.57048,51.07409],[2.58741,51.01763],[2.59845,51.0051],[2.61558,50.99749],[2.63986,50.95766],[2.64225,50.94578],[2.62452,50.9256],[2.61962,50.91067],[2.62396,50.86071],[2.62781,50.85054],[2.63786,50.83696],[2.6511,50.82906],[2.73267,50.81738],[2.79995,50.73795],[2.81655,50.73092],[2.85265,50.73335],[2.89072,50.7162],[2.90492,50.71536],[2.9161,50.72418],[2.93508,50.75592],[3.00718,50.78377],[3.08218,50.78749],[3.09244,50.79092],[3.11412,50.80566],[3.14877,50.80195],[3.2154,50.73111],[3.22149,50.7267],[3.27051,50.70375],[3.27545,50.67757],[3.26576,50.6604],[3.26588,50.64054],[3.28922,50.60028],[3.29219,50.55037],[3.3056,50.53267],[3.37551,50.50839],[3.3898,50.50884],[3.4748,50.54445],[3.52173,50.53459],[3.53266,50.51873],[3.54779,50.51012],[3.61523,50.50558],[3.67378,50.45642],[3.68415,50.35277],[3.6901,50.34044],[3.70258,50.33482],[3.71576,50.33854],[3.74935,50.36279],[3.84109,50.36558],[3.90189,50.3436],[3.91317,50.34291],[4.02672,50.36904],[4.13761,50.29984],[4.14388,50.29727],[4.21444,50.28167],[4.22904,50.26664],[4.23078,50.25233],[4.17084,50.18579],[4.16601,50.16888],[4.1764,50.1547],[4.21195,50.13602],[4.24074,50.07102],[4.23193,50.05551],[4.18164,50.03436],[4.17177,50.02537],[4.16976,50.01217],[4.1765,50.00065],[4.20633,49.97546],[4.22164,49.97089],[4.30877,49.98145],[4.44542,49.9523],[4.45469,49.95251],[4.6581,50.00609],[4.66936,50.01392],[4.67293,50.02716],[4.66924,50.06972],[4.69517,50.10472],[4.83123,50.17941],[4.8815,50.16436],[4.90479,50.14451],[4.90426,50.12639],[4.88076,50.0815],[4.86277,50.0745],[4.85104,50.06216],[4.84331,50.03884],[4.84331,50.03883],[4.8433,50.03881],[4.82678,49.989],[4.82662,49.97692],[4.83343,49.96696],[4.89654,49.91753],[4.89755,49.89424],[4.87913,49.86942],[4.87625,49.85111],[4.88924,49.81266],[4.89769,49.80204],[4.91098,49.79926],[4.99534,49.81116],[5.01867,49.79272],[5.02686,49.78886],[5.09944,49.77323],[5.13458,49.73462],[5.1412,49.72984],[5.18761,49.70906],[5.19602,49.70732],[5.28157,49.70836],[5.33363,49.67308],[5.344,49.65049],[5.3544,49.64041],[5.43141,49.60791],[5.48205,49.52815],[5.49294,49.51979],[5.50666,49.52042],[5.55401,49.54025],[5.59311,49.53424],[5.6076,49.53761],[5.641,49.56095],[5.70676,49.55267],[5.71578,49.55361],[5.77526,49.57414],[5.8399,49.55321],[5.86126,49.52038],[5.876,49.5114],[5.97516,49.50129],[5.99801,49.47317],[6.01627,49.46597],[6.08635,49.47562],[6.09319,49.47787],[6.17397,49.52187],[6.24643,49.52511],[6.334,49.48235],[6.34423,49.48037],[6.43515,49.487],[6.5451,49.44384],[6.60639,49.37868],[6.60497,49.33739],[6.61627,49.31869],[6.67013,49.29269],[6.72996,49.22917],[6.74328,49.19086],[6.76026,49.17752],[6.80904,49.17284],[6.82473,49.17826],[6.83093,49.19366],[6.82982,49.21802],[6.85119,49.23136],[6.88453,49.2239],[6.89322,49.22389],[6.93753,49.23369],[7.04055,49.19794],[7.0463,49.17503],[7.05478,49.16313],[7.06908,49.16018],[7.10494,49.16634],[7.14315,49.14159],[7.1535,49.13839],[7.28683,49.13488],[7.29893,49.13856],[7.36095,49.18259],[7.45012,49.19517],[7.50113,49.17672],[7.54379,49.10572],[7.5579,49.09626],[7.6296,49.08527],[7.64722,49.06722],[7.6612,49.06119],[7.75401,49.05963],[7.76073,49.06067],[7.80291,49.07489],[7.85525,49.05329],[7.8673,49.05227],[7.93826,49.06832],[8.08069,49.00688],[8.2225,48.98787],[8.23704,48.97683],[8.23589,48.95817],[8.20888,48.94863],[8.20089,48.94339],[8.15824,48.89753],[8.10087,48.7993],[7.99071,48.74478],[7.98534,48.7409],[7.90422,48.65865],[7.85605,48.63606],[7.8484,48.62977],[7.81842,48.58883],[7.81456,48.57704],[7.81449,48.50968],[7.78547,48.48337],[7.78055,48.47652],[7.74506,48.39484],[7.74357,48.38427],[7.75159,48.32322],[7.71085,48.29841],[7.70241,48.28803],[7.67661,48.21555],[7.59605,48.11698],[7.59165,48.10648],[7.58522,48.04694],[7.59127,48.03035],[7.62437,47.99865],[7.63205,47.97081],[7.57554,47.87436],[7.5728,47.86435],[7.57267,47.83631],[7.54581,47.78793],[7.54418,47.77232],[7.55758,47.72899],[7.53526,47.6989],[7.53136,47.68564],[7.537,47.67302],[7.60016,47.60822],[7.58967,47.56755],[7.55424,47.55128],[7.54511,47.54283],[7.51256,47.48439],[7.38747,47.42111],[7.32653,47.4273],[7.24435,47.40939],[7.16708,47.4335],[7.15212,47.47612],[7.14279,47.48707],[7.12853,47.48893],[7.0801,47.47718],[7.03557,47.48695],[7.02102,47.48458],[7.01205,47.47287],[7.003,47.44095],[6.9551,47.40808],[6.94716,47.39698],[6.94818,47.38337],[6.95769,47.37359],[6.97126,47.37218],[7.018,47.38386],[7.05623,47.37035],[7.07007,47.35005],[7.05958,47.32257],[6.97424,47.27856],[6.96347,47.26233],[6.96134,47.23479],[6.89443,47.19393],[6.88913,47.18922],[6.85545,47.14636],[6.76907,47.10751],[6.76011,47.09953],[6.72561,47.0418],[6.62355,46.9811],[6.4812,46.9445],[6.46892,46.93522],[6.46686,46.91997],[6.47548,46.88771],[6.4535,46.8239],[6.45644,46.80534],[6.46722,46.79104],[6.46098,46.76887],[6.15817,46.59343],[6.14872,46.58069],[6.15152,46.56508],[6.16549,46.54399],[6.15811,46.52456],[6.10174,46.46979],[6.09572,46.45418],[6.09704,46.43317],[6.10829,46.41643],[6.16622,46.38839],[6.17817,46.36922],[6.13748,46.31297],[6.13371,46.30227],[6.13038,46.23737],[6.1103,46.22344],[6.08865,46.23081],[6.07717,46.23123],[6.01857,46.21601],[6.00681,46.20752],[6.00388,46.19332],[6.00787,46.16977],[6.01783,46.15564],[6.03509,46.15456],[6.05564,46.16288],[6.12468,46.15415],[6.13778,46.15702],[6.24026,46.22094],[6.24906,46.23299],[6.24707,46.24777],[6.21148,46.31057],[6.21219,46.32485],[6.23946,46.36705],[6.31648,46.41557],[6.41083,46.42495],[6.41748,46.42682],[6.50498,46.46871],[6.63047,46.47435],[6.74665,46.45695],[6.82244,46.42925],[6.81832,46.38181],[6.80484,46.36179],[6.80189,46.34639],[6.81095,46.33359],[6.86491,46.30038],[6.87504,46.28007],[6.86092,46.2439],[6.82698,46.21188],[6.82075,46.19862],[6.81863,46.16592],[6.82259,46.15261],[6.83427,46.14509],[6.90382,46.12971],[6.90491,46.09595],[6.90932,46.08406],[6.92001,46.07721],[6.94898,46.0699],[7.01556,46.00883],[7.05191,45.93066],[7.04533,45.92217],[7.04497,45.92064],[7.04394,45.92036],[6.99582,45.85822],[6.94097,45.83551],[6.84376,45.82387],[6.83102,45.81711],[6.82614,45.80353],[6.82787,45.73217],[6.83174,45.72082],[6.8414,45.71373],[6.90729,45.69124],[6.92419,45.66935],[6.94247,45.66172],[6.97131,45.66528],[7.00597,45.64945],[7.01151,45.63652],[6.9978,45.60877],[6.99643,45.59465],[7.0158,45.52354],[7.02774,45.5102],[7.1072,45.47877],[7.1228,45.44924],[7.13304,45.44001],[7.1856,45.41894],[7.19515,45.40409],[7.17075,45.35069],[7.14232,45.32298],[7.13649,45.30576],[7.14458,45.25048],[7.08417,45.20279],[6.99279,45.19823],[6.98106,45.19368],[6.90009,45.12689],[6.85843,45.11699],[6.78283,45.14228],[6.77056,45.14242],[6.67751,45.11356],[6.6653,45.10289],[6.66501,45.08667],[6.68237,45.04558],[6.69602,45.03395],[6.75744,45.01884],[6.78375,44.9146],[6.7942,44.90161],[6.86698,44.86519],[6.8798,44.86346],[6.93633,44.87461],[7.01795,44.84402],[7.03453,44.82282],[7.03711,44.75009],[7.0496,44.73226],[7.07224,44.72311],[7.08651,44.6968],[7.08666,44.68085],[7.07671,44.67134],[6.99007,44.67203],[6.97413,44.66431],[6.97056,44.64696],[6.97819,44.61784],[6.94659,44.57124],[6.88235,44.53479],[6.87233,44.5195],[6.87892,44.50245],[6.95894,44.43129],[6.95872,44.42908],[6.92167,44.41436],[6.91223,44.40659],[6.90907,44.39477],[6.90972,44.38195],[6.91637,44.36804],[6.99909,44.29414],[7.01181,44.256],[7.01983,44.24558],[7.03259,44.2424],[7.07312,44.2461],[7.1651,44.22112],[7.24533,44.18544],[7.26053,44.16682],[7.27537,44.15947],[7.33878,44.1574],[7.36278,44.13834],[7.37776,44.13416],[7.56283,44.15792],[7.5642,44.15836],[7.56478,44.15817],[7.60548,44.1634],[7.6162,44.16827],[7.63989,44.18928],[7.68608,44.1861],[7.69422,44.17795],[7.68937,44.13869],[7.69445,44.12276],[7.72786,44.08615],[7.72403,44.05704],[7.68603,44.02371],[7.68077,44.0164],[7.66016,43.9672],[7.59624,43.94466],[7.58419,43.93287],[7.56858,43.89159],[7.5271,43.87434],[7.51649,43.86397],[7.51594,43.84915],[7.53622,43.79234],[9.8,43.1],[9.63227,41.43244],[9.36968,41.35052],[9.27311,41.29196],[8.94186,41.27688],[5.8,41.64],[3.17358,42.41768],[3.16081,42.42757],[3.0944,42.41457],[3.03402,42.45331],[3.02214,42.45645],[2.87822,42.4487],[2.87019,42.44653],[2.78424,42.40256],[2.7413,42.41128],[2.72928,42.40998],[2.69331,42.39417],[2.68378,42.3854],[2.68162,42.37263],[2.68585,42.34679],[2.66719,42.33008],[2.58106,42.34418],[2.56777,42.34173],[2.5338,42.32197],[2.47795,42.32986],[2.41933,42.37658],[2.41222,42.38021],[2.26719,42.42055],[2.25973,42.42117],[2.20694,42.41558],[2.20653,42.41526],[2.20526,42.41541],[2.16028,42.41065],[2.14881,42.40545],[2.09393,42.35474],[2.00861,42.33818],[1.965,42.36473],[1.93076,42.42442],[1.92089,42.43302],[1.88467,42.44761],[1.88459,42.44762],[1.88444,42.4477],[1.82774,42.47056],[1.72567,42.48452],[1.71561,42.50125],[1.7272,42.56103],[1.72479,42.57499],[1.71011,42.59992],[1.69377,42.60975],[1.60283,42.61382],[1.56069,42.6392],[1.54636,42.64166],[1.50444,42.6331],[1.4921,42.62502],[1.47238,42.59703],[1.43792,42.59264],[1.41936,42.60643],[1.38032,42.67415],[1.37335,42.68127],[1.33313,42.70563],[1.32364,42.7085],[1.23221,42.71248],[1.16554,42.69928],[1.08546,42.76635],[1.07564,42.77079],[0.95937,42.78852],[0.95073,42.78794],[0.92265,42.7797],[0.84606,42.8157],[0.71511,42.8464],[0.70017,42.84402],[0.69117,42.83186],[0.67409,42.76479],[0.67474,42.75286],[0.69192,42.70684],[0.669,42.67901],[0.43024,42.67863],[0.3715,42.70308],[0.35954,42.70415],[0.34912,42.69817],[0.32567,42.67274],[0.29571,42.66388],[0.24594,42.70175],[0.23972,42.70494],[0.18967,42.72039],[0.17919,42.72075],[-0.01993,42.67389],[-0.06726,42.6848],[-0.16949,42.77157],[-0.29987,42.82697],[-0.31683,42.82635],[-0.39208,42.78766],[-0.44354,42.78453],[-0.48842,42.80255],[-0.50868,42.79935],[-0.54499,42.76906],[-0.56721,42.76937],[-0.67446,42.86392],[-0.68094,42.86775],[-0.73372,42.88666],[-0.7476,42.93879],[-0.75711,42.95107],[-0.77253,42.95284],[-0.82114,42.93865],[-0.94508,42.94192],[-1.02313,42.98206],[-1.10852,43.00409],[-1.1156,43.00461],[-1.14775,43.00124],[-1.15845,43.01452],[-1.16736,43.02083],[-1.21622,43.0381],[-1.22612,43.03898],[-1.26236,43.03303],[-1.30643,43.05531],[-1.31992,43.05696],[-1.33135,43.0496],[-1.3542,43.0197],[-1.43868,43.03371],[-1.4775,43.06889],[-1.48311,43.08561],[-1.47641,43.10248],[-1.43479,43.13087],[-1.42732,43.1404],[-1.39411,43.22935],[-1.39531,43.24596],[-1.40868,43.25591],[-1.52629,43.28099],[-1.54626,43.2737],[-1.57149,43.2412],[-1.61053,43.24223],[-1.65,43.29323],[-1.66953,43.30065],[-1.73359,43.28856],[-1.75606,43.31966],[-1.76297,43.32565],[-1.79156,43.34067],[-1.80099,43.37017],[-1.78509,43.39037],[-1.7835,43.39686],[-2.7,43.9]],[[-61.27501,14.90218],[-60.72368,14.90101],[-60.72489,14.36686],[-61.27622,14.36803],[-61.27501,14.90218]],[[-61.92802,16.58618],[-61.92686,15.7394],[-60.88128,15.74072],[-60.88243,16.5875],[-61.92802,16.58618]],[[-53.89344,6.004],[-52.46522,5.4465],[-51.52039,4.51072],[-51.53687,4.11633],[-52.2345,3.10213],[-52.641,2.25162],[-52.92664,2.07597],[-53.72864,2.21869],[-54.20106,2.03205],[-54.8053,2.27358],[-54.31092,2.80589],[-54.31641,3.20085],[-54.12415,3.46408],[-54.12964,3.59567],[-54.42078,4.00127],[-54.58008,4.95962],[-53.89344,6.004]],[[55.08816,-20.77935],[55.95959,-20.77281],[55.96576,-21.49],[55.09434,-21.49651],[55.08816,-20.77935]],[[44.92054,-12.57363],[45.34826,-12.57029],[45.35274,-13.1163],[44.92502,-13.11963],[44.92054,-12.57363]],[[-178.57728,-14.70582],[-178.42568,-14.00334],[-176.34156,-12.83858],[-175.71534,-12.9189],[-175.91858,-13.58726],[-177.84638,-14.64983],[-178.57728,-14.70582]]],terms_url:"https://openstreetmap.fr/bdortho",terms_text:"BDOrtho IGN",best:true,icon:"http://www.ign.fr/institut/sites/all/themes/ign_institut/logo.png"},{id:"Benin_cotonou_pleiade_2016",name:"Benin: Cotonou Pleiade 2016",type:"tms",template:"https://geoxxx.agrocampus-ouest.fr/owsifl/gwc/service/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=Benin:cotonou_pleiade_2016&STYLE=&FORMAT=image/jpeg&tileMatrixSet=EPSG:3857&tileMatrix=EPSG:3857:{zoom}&tileRow={y}&tileCol={x}",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[2.31954,6.55745],[2.33645,6.56024],[2.36377,6.56211],[2.36738,6.56068],[2.37777,6.5494],[2.37779,6.53485],[2.36994,6.49332],[2.37038,6.45527],[2.36958,6.45269],[2.36188,6.44177],[2.35392,6.40545],[2.36749,6.4015],[2.39526,6.40072],[2.40128,6.40374],[2.40588,6.40341],[2.42046,6.39383],[2.42485,6.39794],[2.42949,6.39887],[2.43625,6.39628],[2.43958,6.40042],[2.44439,6.40189],[2.45376,6.39899],[2.47145,6.39632],[2.48162,6.39106],[2.49453,6.3874],[2.50893,6.38888],[2.50719,6.39229],[2.5012,6.39162],[2.4963,6.39521],[2.4951,6.40123],[2.49543,6.40401],[2.4983,6.41022],[2.50191,6.41282],[2.51087,6.41321],[2.52219,6.40849],[2.53352,6.40517],[2.5381,6.40961],[2.54111,6.4109],[2.54651,6.41099],[2.54654,6.40651],[2.57639,6.40724],[2.57642,6.41177],[2.58576,6.41196],[2.58868,6.41095],[2.60877,6.39414],[2.6257,6.39488],[2.64555,6.39729],[2.65039,6.39339],[2.65367,6.36823],[2.64312,6.36659],[2.61251,6.36289],[2.56868,6.3607],[2.54683,6.36055],[2.54687,6.35546],[2.50207,6.35461],[2.47064,6.35596],[2.46777,6.35203],[2.46423,6.3502],[2.45254,6.35006],[2.45113,6.34813],[2.44737,6.34629],[2.43757,6.34654],[2.43298,6.33841],[2.43016,6.33707],[2.42245,6.33707],[2.39236,6.34115],[2.39315,6.34115],[2.36528,6.34445],[2.35386,6.3453],[2.34377,6.34458],[2.34094,6.34534],[2.31086,6.36567],[2.28435,6.37465],[2.28147,6.37762],[2.27599,6.39517],[2.27612,6.3982],[2.31529,6.49261],[2.3158,6.55307],[2.31954,6.55745]],[[1.69563,6.25076],[1.7001,6.24712],[1.70418,6.24697],[1.75875,6.25836],[1.77079,6.25995],[1.81712,6.27161],[1.84457,6.27657],[1.85768,6.27945],[1.88843,6.28326],[1.90482,6.28595],[1.90618,6.29435],[1.90083,6.29721],[1.89881,6.29954],[1.89404,6.30085],[1.89048,6.2997],[1.88748,6.29636],[1.88344,6.29622],[1.8697,6.29227],[1.8564,6.29198],[1.85207,6.28675],[1.84991,6.28906],[1.84691,6.29203],[1.84353,6.29333],[1.84041,6.29315],[1.83627,6.29129],[1.8341,6.28733],[1.83417,6.2852],[1.8323,6.28456],[1.82786,6.28644],[1.82182,6.29084],[1.81563,6.28998],[1.81211,6.29143],[1.80758,6.29571],[1.80472,6.29693],[1.80074,6.2971],[1.79776,6.29612],[1.79625,6.29492],[1.7949,6.28965],[1.79641,6.28608],[1.80098,6.28338],[1.79567,6.28013],[1.79156,6.28174],[1.78499,6.28122],[1.78092,6.27753],[1.77588,6.2755],[1.76745,6.27696],[1.75653,6.27496],[1.74833,6.27239],[1.74762,6.27726],[1.74572,6.27938],[1.73948,6.27985],[1.7368,6.27761],[1.73572,6.27892],[1.72902,6.27911],[1.72435,6.27422],[1.72449,6.26786],[1.72556,6.26683],[1.69934,6.26159],[1.69573,6.25726],[1.69563,6.25076]]],best:true},{id:"Berlin-2011",name:"Berlin aerial photography 2011",type:"wms",template:"https://fbinter.stadt-berlin.de/fb/wms/senstadt/k_luftbild2011_20?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2011-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",polygon:[[[13.48699,52.68076],[13.52584,52.65196],[13.5299,52.64437],[13.54209,52.60921],[13.58109,52.58134],[13.59674,52.55936],[13.63477,52.55121],[13.66547,52.52854],[13.67199,52.50379],[13.65806,52.50372],[13.65796,52.49324],[13.7547,52.4565],[13.76644,52.43884],[13.76627,52.42973],[13.74494,52.39909],[13.65235,52.33133],[13.6417,52.33103],[13.62609,52.35491],[13.59432,52.37455],[13.53198,52.38376],[13.51948,52.39236],[13.48536,52.39227],[13.43552,52.38016],[13.42885,52.37401],[13.38689,52.37388],[13.38642,52.38667],[13.36857,52.38728],[13.37045,52.39349],[13.33968,52.40887],[13.31243,52.39775],[13.30557,52.40452],[13.23622,52.40342],[13.18886,52.40417],[13.17719,52.39067],[13.14859,52.38971],[13.14868,52.38421],[13.11889,52.38385],[13.11935,52.40025],[13.10487,52.40723],[13.07371,52.40668],[13.07367,52.41403],[13.10516,52.47897],[13.11685,52.47881],[13.112,52.55915],[13.11865,52.59156],[13.15251,52.60489],[13.16282,52.60462],[13.21264,52.6321],[13.22139,52.63215],[13.27292,52.66444],[13.31376,52.66442],[13.32714,52.64692],[13.36783,52.6468],[13.39158,52.65382],[13.42728,52.6549],[13.47594,52.68122],[13.48699,52.68076]]],terms_text:"Geoportal Berlin/Digitale farbige Orthophotos 2011"},{id:"Berlin-2014",name:"Berlin aerial photography 2014",type:"tms",template:"https://tiles.codefor.de/berlin-2014/{zoom}/{x}/{y}.png",endDate:"2014-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",polygon:[[[13.19746,52.64206],[13.25639,52.64285],[13.2558,52.66101],[13.31391,52.66185],[13.31476,52.64353],[13.37431,52.64462],[13.37386,52.66269],[13.4026,52.663],[13.40332,52.64501],[13.4334,52.64555],[13.43227,52.68001],[13.49082,52.68111],[13.49147,52.66428],[13.52092,52.66457],[13.5216,52.6465],[13.55096,52.6469],[13.55147,52.62938],[13.52219,52.62898],[13.52335,52.59248],[13.58263,52.59329],[13.58307,52.57535],[13.61246,52.57582],[13.61324,52.55784],[13.64268,52.55813],[13.64296,52.5401],[13.67253,52.54048],[13.67375,52.50475],[13.64413,52.5045],[13.64476,52.48608],[13.7037,52.48683],[13.70415,52.46901],[13.73362,52.4692],[13.73399,52.45121],[13.76358,52.45156],[13.76447,52.40209],[13.73546,52.39753],[13.73611,52.37963],[13.70678,52.37935],[13.70731,52.36136],[13.67785,52.36104],[13.67898,52.33017],[13.62102,52.32946],[13.61999,52.36033],[13.59046,52.36007],[13.5901,52.37806],[13.53116,52.37735],[13.53064,52.39525],[13.47168,52.39459],[13.47149,52.4125],[13.44101,52.41219],[13.44257,52.37604],[13.35487,52.37498],[13.35427,52.39306],[13.23667,52.39114],[13.23609,52.40922],[13.17635,52.40836],[13.17752,52.39029],[13.14791,52.38987],[13.14876,52.37459],[13.11971,52.37422],[13.11941,52.38955],[13.08981,52.38899],[13.08938,52.40707],[13.0618,52.40662],[13.06075,52.42408],[13.08842,52.42449],[13.086,52.47853],[13.11546,52.47896],[13.11462,52.49695],[13.1441,52.49729],[13.14332,52.5157],[13.1137,52.51528],[13.11077,52.6047],[13.19862,52.6062],[13.19746,52.64206]]],terms_text:"Geoportal Berlin/Digitale farbige Orthophotos 2014"},{id:"Berlin-2015",name:"Berlin aerial photography 2015",type:"tms",template:"https://tiles.codefor.de/berlin-2015/{zoom}/{x}/{y}.png",endDate:"2015-08-03T00:00:00.000Z",startDate:"2015-08-02T00:00:00.000Z",polygon:[[[13.11068,52.59538],[13.13975,52.60527],[13.18355,52.61488],[13.21262,52.63315],[13.24167,52.64282],[13.256,52.65201],[13.27004,52.67021],[13.31368,52.67072],[13.32914,52.66204],[13.32948,52.6529],[13.43284,52.65414],[13.44733,52.6816],[13.50561,52.68244],[13.50654,52.65531],[13.53605,52.65572],[13.5376,52.61991],[13.52229,52.61977],[13.52304,52.60165],[13.59776,52.58469],[13.59865,52.55769],[13.62817,52.55805],[13.64303,52.5492],[13.65813,52.54042],[13.67312,52.53144],[13.67356,52.51358],[13.65913,52.51344],[13.65998,52.48643],[13.68931,52.48687],[13.73386,52.46933],[13.73405,52.46034],[13.76362,52.46068],[13.76431,52.42464],[13.74941,52.42474],[13.75045,52.39778],[13.73585,52.39762],[13.70661,52.37944],[13.707,52.3614],[13.67782,52.36125],[13.66405,52.33395],[13.62073,52.33337],[13.62031,52.36042],[13.58986,52.3781],[13.53149,52.37748],[13.53133,52.38641],[13.44223,52.38484],[13.42813,52.3667],[13.38464,52.3662],[13.35432,52.39301],[13.29537,52.39209],[13.29531,52.40103],[13.19171,52.39957],[13.19222,52.39056],[13.14774,52.38996],[13.14839,52.38095],[13.11964,52.38041],[13.0744,52.40683],[13.07392,52.42426],[13.10275,52.43374],[13.10123,52.47874],[13.11558,52.47897],[13.11068,52.59538]]],terms_text:"Geoportal Berlin/Digitale farbige Orthophotos 2015"},{id:"Berlin-2016",name:"Berlin aerial photography 2016",type:"tms",template:"https://tiles.codefor.de/berlin-2016/{zoom}/{x}/{y}.png",endDate:"2016-04-03T00:00:00.000Z",startDate:"2016-04-02T00:00:00.000Z",polygon:[[[13.29535,52.392],[13.29502,52.40083],[13.19206,52.39937],[13.19241,52.39035],[13.14839,52.3897],[13.14877,52.38046],[13.11926,52.38001],[13.11888,52.38921],[13.08906,52.40693],[13.07431,52.4067],[13.07356,52.42447],[13.10259,52.43394],[13.10073,52.47912],[13.11534,52.47934],[13.11055,52.59579],[13.13972,52.60527],[13.18403,52.60593],[13.21212,52.63346],[13.27041,52.65222],[13.26973,52.67025],[13.31405,52.67086],[13.32953,52.65323],[13.43315,52.65458],[13.43254,52.67251],[13.44682,52.68189],[13.50593,52.68261],[13.50681,52.65545],[13.53643,52.6558],[13.53757,52.61964],[13.52288,52.61946],[13.52345,52.6017],[13.53842,52.59279],[13.56782,52.59313],[13.59798,52.58464],[13.5988,52.55755],[13.62826,52.55788],[13.65822,52.53124],[13.67314,52.53139],[13.67365,52.51359],[13.65912,52.51344],[13.65989,52.48661],[13.68929,52.48692],[13.7188,52.47807],[13.73406,52.4604],[13.7636,52.46069],[13.76454,52.42482],[13.75027,52.42468],[13.75097,52.39814],[13.70722,52.37923],[13.70772,52.36111],[13.67826,52.36081],[13.67876,52.34302],[13.66428,52.34287],[13.66454,52.33367],[13.62038,52.33319],[13.61959,52.36012],[13.58956,52.37786],[13.5313,52.37719],[13.53103,52.38581],[13.44254,52.38473],[13.42861,52.36674],[13.38418,52.36617],[13.35417,52.39279],[13.29535,52.392]]],terms_text:"Geoportal Berlin/Digitale farbige Orthophotos 2016"},{id:"Berlin-2016-infrared",name:"Berlin aerial photography 2016 (infrared)",type:"tms",template:"https://tiles.codefor.de/berlin-2016i/{zoom}/{x}/{y}.png",endDate:"2016-04-03T00:00:00.000Z",startDate:"2016-04-02T00:00:00.000Z",polygon:[[[13.29535,52.392],[13.29502,52.40083],[13.19206,52.39937],[13.19241,52.39035],[13.14839,52.3897],[13.14877,52.38046],[13.11926,52.38001],[13.11888,52.38921],[13.08906,52.40693],[13.07431,52.4067],[13.07356,52.42447],[13.10259,52.43394],[13.10073,52.47912],[13.11534,52.47934],[13.11055,52.59579],[13.13972,52.60527],[13.18403,52.60593],[13.21212,52.63346],[13.27041,52.65222],[13.26973,52.67025],[13.31405,52.67086],[13.32953,52.65323],[13.43315,52.65458],[13.43254,52.67251],[13.44682,52.68189],[13.50593,52.68261],[13.50681,52.65545],[13.53643,52.6558],[13.53757,52.61964],[13.52288,52.61946],[13.52345,52.6017],[13.53842,52.59279],[13.56782,52.59313],[13.59798,52.58464],[13.5988,52.55755],[13.62826,52.55788],[13.65822,52.53124],[13.67314,52.53139],[13.67365,52.51359],[13.65912,52.51344],[13.65989,52.48661],[13.68929,52.48692],[13.7188,52.47807],[13.73406,52.4604],[13.7636,52.46069],[13.76454,52.42482],[13.75027,52.42468],[13.75097,52.39814],[13.70722,52.37923],[13.70772,52.36111],[13.67826,52.36081],[13.67876,52.34302],[13.66428,52.34287],[13.66454,52.33367],[13.62038,52.33319],[13.61959,52.36012],[13.58956,52.37786],[13.5313,52.37719],[13.53103,52.38581],[13.44254,52.38473],[13.42861,52.36674],[13.38418,52.36617],[13.35417,52.39279],[13.29535,52.392]]],terms_text:"Geoportal Berlin/Digitale Color-Infrarot-Orthophotos 2016"},{id:"Berlin-2017",name:"Berlin aerial photography 2017",type:"tms",template:"https://tiles.codefor.de/berlin-2017/{zoom}/{x}/{y}.png",endDate:"2017-03-28T00:00:00.000Z",startDate:"2017-03-27T00:00:00.000Z",polygon:[[[13.29535,52.392],[13.29502,52.40083],[13.19206,52.39937],[13.19241,52.39035],[13.14839,52.3897],[13.14877,52.38046],[13.11926,52.38001],[13.11888,52.38921],[13.08906,52.40693],[13.07431,52.4067],[13.07356,52.42447],[13.10259,52.43394],[13.10073,52.47912],[13.11534,52.47934],[13.11055,52.59579],[13.13972,52.60527],[13.18403,52.60593],[13.21212,52.63346],[13.27041,52.65222],[13.26973,52.67025],[13.31405,52.67086],[13.32953,52.65323],[13.43315,52.65458],[13.43254,52.67251],[13.44682,52.68189],[13.50593,52.68261],[13.50681,52.65545],[13.53643,52.6558],[13.53757,52.61964],[13.52288,52.61946],[13.52345,52.6017],[13.53842,52.59279],[13.56782,52.59313],[13.59798,52.58464],[13.5988,52.55755],[13.62826,52.55788],[13.65822,52.53124],[13.67314,52.53139],[13.67365,52.51359],[13.65912,52.51344],[13.65989,52.48661],[13.68929,52.48692],[13.7188,52.47807],[13.73406,52.4604],[13.7636,52.46069],[13.76454,52.42482],[13.75027,52.42468],[13.75097,52.39814],[13.70722,52.37923],[13.70772,52.36111],[13.67826,52.36081],[13.67876,52.34302],[13.66428,52.34287],[13.66454,52.33367],[13.62038,52.33319],[13.61959,52.36012],[13.58956,52.37786],[13.5313,52.37719],[13.53103,52.38581],[13.44254,52.38473],[13.42861,52.36674],[13.38418,52.36617],[13.35417,52.39279],[13.29535,52.392]]],terms_text:"Geoportal Berlin/Digitale farbige Orthophotos 2017"},{id:"Berlin-2018",name:"Berlin aerial photography 2018",type:"tms",template:"https://tiles.codefor.de/berlin-2018/{zoom}/{x}/{y}.png",endDate:"2018-04-07T00:00:00.000Z",startDate:"2018-03-19T00:00:00.000Z",polygon:[[[13.29535,52.392],[13.29502,52.40083],[13.19206,52.39937],[13.19241,52.39035],[13.14839,52.3897],[13.14877,52.38046],[13.11926,52.38001],[13.11888,52.38921],[13.08906,52.40693],[13.07431,52.4067],[13.07356,52.42447],[13.10259,52.43394],[13.10073,52.47912],[13.11534,52.47934],[13.11055,52.59579],[13.13972,52.60527],[13.18403,52.60593],[13.21212,52.63346],[13.27041,52.65222],[13.26973,52.67025],[13.31405,52.67086],[13.32953,52.65323],[13.43315,52.65458],[13.43254,52.67251],[13.44682,52.68189],[13.50593,52.68261],[13.50681,52.65545],[13.53643,52.6558],[13.53757,52.61964],[13.52288,52.61946],[13.52345,52.6017],[13.53842,52.59279],[13.56782,52.59313],[13.59798,52.58464],[13.5988,52.55755],[13.62826,52.55788],[13.65822,52.53124],[13.67314,52.53139],[13.67365,52.51359],[13.65912,52.51344],[13.65989,52.48661],[13.68929,52.48692],[13.7188,52.47807],[13.73406,52.4604],[13.7636,52.46069],[13.76454,52.42482],[13.75027,52.42468],[13.75097,52.39814],[13.70722,52.37923],[13.70772,52.36111],[13.67826,52.36081],[13.67876,52.34302],[13.66428,52.34287],[13.66454,52.33367],[13.62038,52.33319],[13.61959,52.36012],[13.58956,52.37786],[13.5313,52.37719],[13.53103,52.38581],[13.44254,52.38473],[13.42861,52.36674],[13.38418,52.36617],[13.35417,52.39279],[13.29535,52.392]]],terms_text:"Geoportal Berlin/Digitale farbige Orthophotos 2018",best:true},{id:"Bing",name:"Bing aerial imagery",type:"bing",template:"https://www.bing.com/maps",zoomExtent:[1,22],"default":true,description:"Satellite and aerial imagery.",icon:"https://osmlab.github.io/editor-layer-index/sources/world/Bing.png"},{id:"Bologna-Orthophoto-2017",name:"Bologna ortofoto 2017",type:"tms",template:"https://sitmappe.comune.bologna.it/tms/tileserver/Ortofoto2017/{zoom}/{x}/{y}.png",endDate:"2017-01-01T00:00:00.000Z",startDate:"2017-01-01T00:00:00.000Z",zoomExtent:[0,19],polygon:[[[11.22962,44.53077],[11.23184,44.52461],[11.24123,44.52167],[11.23251,44.50893],[11.23572,44.50323],[11.25009,44.50116],[11.24765,44.49644],[11.25708,44.49765],[11.25653,44.49294],[11.29461,44.48981],[11.29676,44.4857],[11.28807,44.47586],[11.29226,44.4609],[11.28447,44.45459],[11.28228,44.42572],[11.29347,44.4276],[11.29254,44.43377],[11.31339,44.42103],[11.32504,44.42274],[11.33695,44.42772],[11.33765,44.43167],[11.3315,44.43273],[11.33453,44.43867],[11.34466,44.43594],[11.34498,44.44093],[11.36235,44.45099],[11.37312,44.44935],[11.37498,44.45897],[11.39499,44.46368],[11.4011,44.46122],[11.39464,44.46803],[11.41577,44.48376],[11.42559,44.4845],[11.42717,44.48921],[11.41727,44.4906],[11.43363,44.51312],[11.42692,44.51532],[11.43034,44.5196],[11.42466,44.51959],[11.41987,44.52934],[11.4143,44.52564],[11.40739,44.52851],[11.41487,44.53999],[11.38871,44.54145],[11.39082,44.54553],[11.36474,44.55253],[11.36414,44.55609],[11.3573,44.5519],[11.34375,44.55333],[11.33589,44.54299],[11.33145,44.54734],[11.31349,44.54722],[11.30929,44.5295],[11.29104,44.53581],[11.28179,44.54851],[11.26911,44.53248],[11.25118,44.55578],[11.24499,44.55569],[11.22962,44.53077]]],terms_url:"http://dati.comune.bologna.it/node/3449",terms_text:"© Comune di Bologna cc-by 4.0 ODbL compliant",best:true},{id:"Bonvillars-2013",name:"Bonvillars Orthophoto 2013",type:"tms",template:"http://osmdata.asitvd.ch/tiles/bonvillars2013/{zoom}/{x}/{y}.png",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",zoomExtent:[14,20],polygon:[[[6.66713,46.83358],[6.66313,46.83833],[6.67213,46.84191],[6.6749,46.84226],[6.67843,46.83807],[6.66713,46.83358]]],terms_url:"http://osmdata.asitvd.ch/",terms_text:"Bonvillars - Orthophoto technique 2013"},{id:"Bordeaux_2012",name:"Bordeaux - 2012",type:"tms",template:"http://wms.openstreetmap.fr/tms/1.0.0/bordeaux_2012/{zoom}/{x}/{y}",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[-0.59923,45.04193],[-0.54231,45.02757],[-0.50979,45.00601],[-0.47727,45.00206],[-0.47066,44.97367],[-0.45542,44.95102],[-0.46456,44.91792],[-0.4732,44.91936],[-0.48794,44.90928],[-0.4981,44.89057],[-0.48946,44.87797],[-0.4666,44.87076],[-0.47625,44.84735],[-0.49505,44.83978],[-0.49099,44.83186],[-0.46965,44.82537],[-0.49709,44.80446],[-0.52453,44.80013],[-0.5103,44.76767],[-0.53469,44.76515],[-0.56213,44.75107],[-0.5601,44.74169],[-0.5728,44.74133],[-0.59465,44.7601],[-0.63429,44.73989],[-0.65004,44.77705],[-0.67901,44.77489],[-0.68816,44.77922],[-0.71509,44.76839],[-0.75168,44.7471],[-0.76336,44.75577],[-0.73846,44.77561],[-0.74202,44.78571],[-0.72779,44.81239],[-0.73999,44.82861],[-0.76438,44.82933],[-0.803,44.82176],[-0.8401,44.82753],[-0.83908,44.84014],[-0.87567,44.85023],[-0.88532,44.85852],[-0.88685,44.88769],[-0.86601,44.88697],[-0.84569,44.89669],[-0.83349,44.92764],[-0.81825,44.92764],[-0.80198,44.92224],[-0.79843,44.9485],[-0.78725,44.94814],[-0.75574,44.97007],[-0.72169,44.95785],[-0.69578,44.93087],[-0.68866,44.93447],[-0.67139,44.93267],[-0.66935,44.94095],[-0.62514,44.95066],[-0.63226,44.95893],[-0.63124,44.9672],[-0.60024,44.96756],[-0.55146,44.97834],[-0.54079,44.97726],[-0.55451,44.99739],[-0.59364,45.01751],[-0.60787,45.03403],[-0.59923,45.04193]]],terms_text:"Communauté urbaine de Bordeaux - 2012"},{id:"Bordeaux_2016",name:"Bordeaux 2016",type:"tms",template:"http://tms.bordeaux.inria.fr/bdx2016/{zoom}/{x}/{y}.jpg",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",zoomExtent:[14,20],polygon:[[[-0.59923,45.04193],[-0.54231,45.02757],[-0.50979,45.00601],[-0.47727,45.00206],[-0.47066,44.97367],[-0.45542,44.95102],[-0.46456,44.91792],[-0.4732,44.91936],[-0.48794,44.90928],[-0.4981,44.89057],[-0.48946,44.87797],[-0.4666,44.87076],[-0.47625,44.84735],[-0.49505,44.83978],[-0.49099,44.83186],[-0.46965,44.82537],[-0.49709,44.80446],[-0.52453,44.80013],[-0.5103,44.76767],[-0.53469,44.76515],[-0.56213,44.75107],[-0.5601,44.74169],[-0.5728,44.74133],[-0.59465,44.7601],[-0.63429,44.73989],[-0.65004,44.77705],[-0.67901,44.77489],[-0.68816,44.77922],[-0.71509,44.76839],[-0.75168,44.7471],[-0.76336,44.75577],[-0.73846,44.77561],[-0.74202,44.78571],[-0.72779,44.81239],[-0.73999,44.82861],[-0.76438,44.82933],[-0.803,44.82176],[-0.8401,44.82753],[-0.83908,44.84014],[-0.87567,44.85023],[-0.88532,44.85852],[-0.88685,44.88769],[-0.86601,44.88697],[-0.84569,44.89669],[-0.83349,44.92764],[-0.81825,44.92764],[-0.80198,44.92224],[-0.79843,44.9485],[-0.78725,44.94814],[-0.75574,44.97007],[-0.72169,44.95785],[-0.69578,44.93087],[-0.68866,44.93447],[-0.67139,44.93267],[-0.66935,44.94095],[-0.62514,44.95066],[-0.63226,44.95893],[-0.63124,44.9672],[-0.60024,44.96756],[-0.55146,44.97834],[-0.54079,44.97726],[-0.55451,44.99739],[-0.59364,45.01751],[-0.60787,45.03403],[-0.59923,45.04193]]],terms_text:"Bordeaux Métropole - 2016"},{id:"branquinha_al",name:"Branquinha AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?service=WMS&version=1.1.0&request=GetMap&layers=Branquinha&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-35.96968,-9.2928],[-35.97063,-9.20261],[-35.97727,-9.20264],[-35.98365,-9.2027],[-35.98765,-9.20266],[-35.99159,-9.20274],[-36.00498,-9.20284],[-36.01473,-9.20293],[-36.01651,-9.20296],[-36.01871,-9.20293],[-36.02487,-9.20286],[-36.02892,-9.20297],[-36.03308,-9.20289],[-36.03769,-9.20294],[-36.04581,-9.203],[-36.05161,-9.20305],[-36.05457,-9.20301],[-36.06022,-9.20304],[-36.06191,-9.20304],[-36.0618,-9.21319],[-36.06167,-9.21806],[-36.06156,-9.21915],[-36.06163,-9.22156],[-36.06144,-9.22277],[-36.06139,-9.22716],[-36.06134,-9.23227],[-36.0614,-9.23391],[-36.06145,-9.23494],[-36.06131,-9.23646],[-36.06133,-9.23773],[-36.06142,-9.23905],[-36.06145,-9.24133],[-36.06136,-9.2423],[-36.06141,-9.24358],[-36.06139,-9.2453],[-36.06126,-9.24726],[-36.06123,-9.24949],[-36.06127,-9.25107],[-36.06121,-9.25517],[-36.06119,-9.25795],[-36.06107,-9.25945],[-36.06109,-9.26183],[-36.06106,-9.26493],[-36.06086,-9.27146],[-36.06083,-9.2751],[-36.06074,-9.28274],[-36.0608,-9.29234],[-36.06074,-9.29363],[-36.05477,-9.29357],[-36.04621,-9.29349],[-36.03941,-9.29348],[-36.03501,-9.29339],[-36.02979,-9.29341],[-36.02167,-9.29332],[-36.01278,-9.29328],[-36.00468,-9.29321],[-35.99678,-9.29314],[-35.98969,-9.29312],[-35.98483,-9.29305],[-35.98305,-9.29289],[-35.98173,-9.29294],[-35.97884,-9.29282],[-35.96968,-9.2928]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"British_Columbia_Mosaic",name:"British Columbia Mosaic",type:"tms",template:"http://{switch:a,b,c,d}.imagery.paulnorman.ca/tiles/bc_mosaic/{zoom}/{x}/{y}.png",endDate:"2013-06-01T00:00:00.000Z",startDate:"2009-01-01T00:00:00.000Z",zoomExtent:[9,20],polygon:[[[-123.3176,49.32726],[-123.44053,49.32682],[-123.44072,49.33844],[-123.43984,49.34304],[-123.44013,49.34354],[-123.44011,49.34399],[-123.44063,49.34445],[-123.44047,49.34558],[-123.43978,49.34606],[-123.43897,49.34613],[-123.43729,49.35672],[-123.43748,49.37108],[-123.43353,49.37094],[-123.43304,49.37373],[-123.43327,49.37512],[-123.43228,49.3761],[-123.43175,49.37917],[-123.43143,49.37959],[-123.43078,49.38239],[-123.43134,49.38274],[-123.43121,49.38385],[-123.43004,49.38459],[-123.41899,49.38471],[-123.41922,49.41352],[-123.39725,49.41357],[-123.39728,49.42435],[-123.40069,49.42433],[-123.40077,49.57035],[-123.40008,49.57035],[-123.40108,49.59338],[-123.37604,49.59328],[-123.37698,49.67561],[-123.35073,49.67564],[-123.3508,49.70868],[-123.33289,49.70872],[-123.33279,49.72563],[-123.30071,49.72556],[-123.30092,49.73754],[-123.2886,49.73764],[-123.28878,49.82492],[-123.2998,49.82492],[-123.30117,49.84978],[-123.32182,49.85067],[-123.32733,49.85777],[-123.32767,49.97589],[-123.30083,49.97522],[-123.30072,50.0997],[-123.25017,50.10074],[-123.25091,50.27549],[-123.02243,50.27556],[-123.02249,50.32549],[-123.00093,50.32547],[-123.00078,50.34239],[-122.9775,50.34234],[-122.97748,50.35043],[-122.95081,50.3505],[-122.95079,50.3712],[-122.93252,50.37115],[-122.9321,50.39979],[-122.88742,50.39997],[-122.88734,50.42561],[-122.66202,50.4257],[-122.66231,50.39945],[-122.59903,50.39924],[-122.59883,50.37552],[-122.57248,50.37537],[-122.57356,50.24939],[-122.59904,50.24946],[-122.59915,50.22657],[-122.6185,50.22664],[-122.61857,50.22441],[-122.64906,50.22451],[-122.64922,50.19935],[-122.73086,50.19938],[-122.73116,50.12443],[-122.74904,50.12451],[-122.74905,50.0903],[-122.76878,50.09034],[-122.76898,49.94945],[-122.99905,49.94947],[-122.99912,49.87546],[-122.97759,49.87546],[-122.97781,49.69951],[-122.99924,49.69948],[-122.99925,49.65165],[-123.02215,49.65165],[-123.02212,49.59951],[-123.04919,49.59946],[-123.04919,49.59405],[-123.06646,49.59404],[-123.06636,49.54519],[-123.06999,49.54512],[-123.0699,49.54132],[-123.07068,49.53928],[-123.07089,49.53799],[-123.07115,49.53688],[-123.07111,49.53581],[-123.07138,49.53282],[-123.07165,49.53211],[-123.07171,49.53139],[-123.07203,49.53042],[-123.07396,49.53035],[-123.0748,49.5295],[-123.07482,49.52881],[-123.07434,49.52806],[-123.07353,49.52746],[-123.07337,49.52704],[-123.07329,49.52559],[-123.07371,49.52496],[-123.07362,49.52449],[-123.09926,49.52449],[-123.09916,49.47545],[-123.07105,49.47553],[-123.07109,49.4663],[-123.07392,49.46631],[-123.07422,49.4505],[-123.07463,49.45009],[-123.07465,49.44933],[-123.0746,49.44902],[-123.07446,49.44869],[-123.07433,49.44799],[-123.07424,49.44777],[-123.07431,49.44475],[-123.07471,49.44476],[-123.07464,49.43773],[-122.99965,49.43774],[-122.99965,49.43692],[-122.86062,49.44153],[-122.81026,49.4424],[-122.8099,49.37667],[-122.40361,49.37666],[-122.40363,49.37719],[-122.26474,49.3773],[-122.26354,49.23601],[-122.21557,49.23614],[-122.0581,49.23588],[-121.95383,49.29665],[-121.94009,49.30454],[-121.92358,49.31423],[-121.89909,49.32254],[-121.88834,49.32598],[-121.8553,49.33636],[-121.8327,49.34415],[-121.76713,49.36544],[-121.67367,49.36546],[-121.64042,49.37438],[-121.5962,49.38605],[-121.58612,49.38792],[-121.52137,49.39946],[-121.51174,49.40384],[-121.46793,49.4229],[-121.44168,49.43456],[-121.42243,49.43458],[-121.34629,49.39323],[-121.34801,49.34124],[-121.5135,49.32058],[-121.60317,49.27717],[-121.65841,49.18561],[-121.67995,49.16541],[-121.78158,49.07026],[-121.80762,49.06225],[-121.9394,49.06362],[-121.97255,49.04242],[-121.99214,49.03329],[-122.00353,49.02734],[-122.01786,49.02411],[-122.11086,48.99928],[-122.14931,48.99953],[-122.14927,48.99915],[-122.19914,48.9996],[-122.19918,48.9992],[-122.23436,48.99948],[-122.23436,49.00017],[-122.39947,49.00124],[-122.45213,49.00163],[-122.45213,49.00088],[-122.45841,49.00093],[-122.45848,48.99931],[-122.49925,48.9995],[-122.49925,48.99929],[-122.54926,48.99951],[-122.54926,48.99932],[-122.65808,48.99942],[-122.65811,48.9954],[-122.70676,48.99553],[-122.75198,48.99564],[-122.79221,48.99572],[-122.79219,48.99943],[-123.03504,48.99957],[-123.03504,49.0001],[-123.03971,49.00005],[-123.03974,49.00018],[-123.04855,49.00013],[-123.04853,49.00047],[-123.05571,49.00045],[-123.05563,49.00023],[-123.06414,49.00013],[-123.06416,48.99994],[-123.0749,48.99969],[-123.07507,49.00062],[-123.08996,49.00037],[-123.10923,48.99994],[-123.12712,49.0003],[-123.136,48.99987],[-123.13627,49.00058],[-123.15385,48.99981],[-123.15405,49.00068],[-123.171,49.00013],[-123.20009,48.99968],[-123.20034,49.04978],[-123.21088,49.04972],[-123.21122,49.05199],[-123.20705,49.05209],[-123.20789,49.06079],[-123.21917,49.0601],[-123.21896,49.06127],[-123.22518,49.06127],[-123.22539,49.06224],[-123.22971,49.06203],[-123.22981,49.06859],[-123.23319,49.06873],[-123.2335,49.07059],[-123.24931,49.07025],[-123.24973,49.08026],[-123.27514,49.0804],[-123.27514,49.08709],[-123.29948,49.0873],[-123.29944,49.08025],[-123.32545,49.08039],[-123.32544,49.11547],[-123.2751,49.15033],[-123.27518,49.18733],[-123.27881,49.18711],[-123.27889,49.19107],[-123.30048,49.19107],[-123.30042,49.26229],[-123.31262,49.26224],[-123.3126,49.27149],[-123.31543,49.27147],[-123.31566,49.28189],[-123.31747,49.28188],[-123.3175,49.29185],[-123.31904,49.29185],[-123.31907,49.2986],[-123.32023,49.29857],[-123.32028,49.30197],[-123.32227,49.30196],[-123.32239,49.31183],[-123.3254,49.31181],[-123.32539,49.32017],[-123.31927,49.3202],[-123.31922,49.32467],[-123.31794,49.32466],[-123.31799,49.32541],[-123.3176,49.32726]]],terms_url:"http://imagery.paulnorman.ca/tiles/about.html",terms_text:"Copyright Province of British Columbia, City of Surrey"},{id:"Budapest_XI_2015",name:"Budapest district XI orthophoto 2015",type:"wms",template:"http://terinfo.ujbuda.hu/mapproxy/service?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=orto2015_20160304&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",polygon:[[[19.04767,47.48789],[19.05157,47.4899],[19.06434,47.4792],[19.0665,47.47632],[19.06766,47.47343],[19.06837,47.47077],[19.06846,47.46876],[19.06722,47.46501],[19.05683,47.45259],[19.0549,47.44906],[19.05176,47.43499],[19.04863,47.429],[19.04384,47.42968],[19.04023,47.42932],[19.03509,47.43818],[19.03221,47.43779],[19.0252,47.442],[19.0207,47.44576],[19.01915,47.44658],[19.01545,47.44759],[19.01347,47.44361],[19.01266,47.44271],[19.01178,47.44247],[19.0119,47.44188],[19.0098,47.43944],[19.0057,47.43111],[19.00046,47.43097],[18.99534,47.42821],[18.97545,47.42818],[18.97343,47.42904],[18.97361,47.42998],[18.97548,47.43067],[18.97719,47.43402],[18.97823,47.43817],[18.97733,47.44657],[18.97004,47.44988],[18.96861,47.45142],[18.97568,47.45506],[18.97586,47.45556],[18.97625,47.45584],[18.97658,47.45594],[18.97763,47.45597],[18.98017,47.45605],[18.98162,47.46067],[18.97793,47.46857],[18.96867,47.47643],[18.97745,47.48194],[18.98035,47.48169],[18.98565,47.4782],[18.98907,47.47838],[18.99117,47.47898],[18.99177,47.48102],[18.99288,47.48182],[18.99836,47.48238],[18.99902,47.483],[19.004,47.48189],[19.00416,47.48399],[19.01027,47.48535],[19.01237,47.48404],[19.0138,47.48351],[19.01674,47.48465],[19.0163,47.48539],[19.01689,47.48595],[19.01808,47.48605],[19.02108,47.48492],[19.02124,47.48612],[19.02301,47.48741],[19.02637,47.48885],[19.02995,47.48904],[19.03135,47.48855],[19.03189,47.48759],[19.03286,47.48712],[19.03364,47.48702],[19.03514,47.48725],[19.03585,47.48729],[19.03616,47.48751],[19.03665,47.48767],[19.03748,47.48774],[19.03847,47.48737],[19.03918,47.48679],[19.04105,47.48649],[19.04181,47.48737],[19.04387,47.4881],[19.04542,47.48817],[19.04695,47.4881],[19.04767,47.48789]]],terms_url:"http://terinfo.ujbuda.hu",terms_text:"Budapest XI. kerület önkormányzata",description:"5 cm resolution bald image"},{id:"Budapest_XI_2017",name:"Budapest district XI orthophoto 2017",type:"wms",template:"http://terinfo.ujbuda.hu/mapproxy/service?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=orto_2017&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2017-03-01T00:00:00.000Z",startDate:"2017-03-01T00:00:00.000Z",polygon:[[[19.04767,47.48789],[19.05157,47.4899],[19.06434,47.4792],[19.0665,47.47632],[19.06766,47.47343],[19.06837,47.47077],[19.06846,47.46876],[19.06722,47.46501],[19.05683,47.45259],[19.0549,47.44906],[19.05176,47.43499],[19.04863,47.429],[19.04384,47.42968],[19.04023,47.42932],[19.03509,47.43818],[19.03221,47.43779],[19.0252,47.442],[19.0207,47.44576],[19.01915,47.44658],[19.01545,47.44759],[19.01347,47.44361],[19.01266,47.44271],[19.01178,47.44247],[19.0119,47.44188],[19.0098,47.43944],[19.0057,47.43111],[19.00046,47.43097],[18.99534,47.42821],[18.97545,47.42818],[18.97343,47.42904],[18.97361,47.42998],[18.97548,47.43067],[18.97719,47.43402],[18.97823,47.43817],[18.97733,47.44657],[18.97004,47.44988],[18.96861,47.45142],[18.97568,47.45506],[18.97586,47.45556],[18.97625,47.45584],[18.97658,47.45594],[18.97763,47.45597],[18.98017,47.45605],[18.98162,47.46067],[18.97793,47.46857],[18.96867,47.47643],[18.97745,47.48194],[18.98035,47.48169],[18.98565,47.4782],[18.98907,47.47838],[18.99117,47.47898],[18.99177,47.48102],[18.99288,47.48182],[18.99836,47.48238],[18.99902,47.483],[19.004,47.48189],[19.00416,47.48399],[19.01027,47.48535],[19.01237,47.48404],[19.0138,47.48351],[19.01674,47.48465],[19.0163,47.48539],[19.01689,47.48595],[19.01808,47.48605],[19.02108,47.48492],[19.02124,47.48612],[19.02301,47.48741],[19.02637,47.48885],[19.02995,47.48904],[19.03135,47.48855],[19.03189,47.48759],[19.03286,47.48712],[19.03364,47.48702],[19.03514,47.48725],[19.03585,47.48729],[19.03616,47.48751],[19.03665,47.48767],[19.03748,47.48774],[19.03847,47.48737],[19.03918,47.48679],[19.04105,47.48649],[19.04181,47.48737],[19.04387,47.4881],[19.04542,47.48817],[19.04695,47.4881],[19.04767,47.48789]]],terms_url:"http://terinfo.ujbuda.hu",terms_text:"Budapest XI. kerület önkormányzata",best:true,description:"5 cm resolution bald image"},{id:"Cadastre",name:"Cadastre",type:"tms",template:"http://tms.cadastre.openstreetmap.fr/*/tout/{zoom}/{x}/{y}.png",zoomExtent:[12,22],polygon:[[[-2.7,43.9],[-6.3,48.98],[-2.25,50.09],[1.31,50.88],[2.35816,51.32937],[2.5488,51.09759],[2.57048,51.07409],[2.58741,51.01763],[2.59845,51.0051],[2.61558,50.99749],[2.63986,50.95766],[2.64225,50.94578],[2.62452,50.9256],[2.61962,50.91067],[2.62396,50.86071],[2.62781,50.85054],[2.63786,50.83696],[2.6511,50.82906],[2.73267,50.81738],[2.79995,50.73795],[2.81655,50.73092],[2.85265,50.73335],[2.89072,50.7162],[2.90492,50.71536],[2.9161,50.72418],[2.93508,50.75592],[3.00718,50.78377],[3.08218,50.78749],[3.09244,50.79092],[3.11412,50.80566],[3.14877,50.80195],[3.2154,50.73111],[3.22149,50.7267],[3.27051,50.70375],[3.27545,50.67757],[3.26576,50.6604],[3.26588,50.64054],[3.28922,50.60028],[3.29219,50.55037],[3.3056,50.53267],[3.37551,50.50839],[3.3898,50.50884],[3.4748,50.54445],[3.52173,50.53459],[3.53266,50.51873],[3.54779,50.51012],[3.61523,50.50558],[3.67378,50.45642],[3.68415,50.35277],[3.6901,50.34044],[3.70258,50.33482],[3.71576,50.33854],[3.74935,50.36279],[3.84109,50.36558],[3.90189,50.3436],[3.91317,50.34291],[4.02672,50.36904],[4.13761,50.29984],[4.14388,50.29727],[4.21444,50.28167],[4.22904,50.26664],[4.23078,50.25233],[4.17084,50.18579],[4.16601,50.16888],[4.1764,50.1547],[4.21195,50.13602],[4.24074,50.07102],[4.23193,50.05551],[4.18164,50.03436],[4.17177,50.02537],[4.16976,50.01217],[4.1765,50.00065],[4.20633,49.97546],[4.22164,49.97089],[4.30877,49.98145],[4.44542,49.9523],[4.45469,49.95251],[4.6581,50.00609],[4.66936,50.01392],[4.67293,50.02716],[4.66924,50.06972],[4.69517,50.10472],[4.83123,50.17941],[4.8815,50.16436],[4.90479,50.14451],[4.90426,50.12639],[4.88076,50.0815],[4.86277,50.0745],[4.85104,50.06216],[4.84331,50.03884],[4.84331,50.03883],[4.8433,50.03881],[4.82678,49.989],[4.82662,49.97692],[4.83343,49.96696],[4.89654,49.91753],[4.89755,49.89424],[4.87913,49.86942],[4.87625,49.85111],[4.88924,49.81266],[4.89769,49.80204],[4.91098,49.79926],[4.99534,49.81116],[5.01867,49.79272],[5.02686,49.78886],[5.09944,49.77323],[5.13458,49.73462],[5.1412,49.72984],[5.18761,49.70906],[5.19602,49.70732],[5.28157,49.70836],[5.33363,49.67308],[5.344,49.65049],[5.3544,49.64041],[5.43141,49.60791],[5.48205,49.52815],[5.49294,49.51979],[5.50666,49.52042],[5.55401,49.54025],[5.59311,49.53424],[5.6076,49.53761],[5.641,49.56095],[5.70676,49.55267],[5.71578,49.55361],[5.77526,49.57414],[5.8399,49.55321],[5.86126,49.52038],[5.876,49.5114],[5.97516,49.50129],[5.99801,49.47317],[6.01627,49.46597],[6.08635,49.47562],[6.09319,49.47787],[6.17397,49.52187],[6.24643,49.52511],[6.334,49.48235],[6.34423,49.48037],[6.43515,49.487],[6.5451,49.44384],[6.60639,49.37868],[6.60497,49.33739],[6.61627,49.31869],[6.67013,49.29269],[6.72996,49.22917],[6.74328,49.19086],[6.76026,49.17752],[6.80904,49.17284],[6.82473,49.17826],[6.83093,49.19366],[6.82982,49.21802],[6.85119,49.23136],[6.88453,49.2239],[6.89322,49.22389],[6.93753,49.23369],[7.04055,49.19794],[7.0463,49.17503],[7.05478,49.16313],[7.06908,49.16018],[7.10494,49.16634],[7.14315,49.14159],[7.1535,49.13839],[7.28683,49.13488],[7.29893,49.13856],[7.36095,49.18259],[7.45012,49.19517],[7.50113,49.17672],[7.54379,49.10572],[7.5579,49.09626],[7.6296,49.08527],[7.64722,49.06722],[7.6612,49.06119],[7.75401,49.05963],[7.76073,49.06067],[7.80291,49.07489],[7.85525,49.05329],[7.8673,49.05227],[7.93826,49.06832],[8.08069,49.00688],[8.2225,48.98787],[8.23704,48.97683],[8.23589,48.95817],[8.20888,48.94863],[8.20089,48.94339],[8.15824,48.89753],[8.10087,48.7993],[7.99071,48.74478],[7.98534,48.7409],[7.90422,48.65865],[7.85605,48.63606],[7.8484,48.62977],[7.81842,48.58883],[7.81456,48.57704],[7.81449,48.50968],[7.78547,48.48337],[7.78055,48.47652],[7.74506,48.39484],[7.74357,48.38427],[7.75159,48.32322],[7.71085,48.29841],[7.70241,48.28803],[7.67661,48.21555],[7.59605,48.11698],[7.59165,48.10648],[7.58522,48.04694],[7.59127,48.03035],[7.62437,47.99865],[7.63205,47.97081],[7.57554,47.87436],[7.5728,47.86435],[7.57267,47.83631],[7.54581,47.78793],[7.54418,47.77232],[7.55758,47.72899],[7.53526,47.6989],[7.53136,47.68564],[7.537,47.67302],[7.60016,47.60822],[7.58967,47.56755],[7.55424,47.55128],[7.54511,47.54283],[7.51256,47.48439],[7.38747,47.42111],[7.32653,47.4273],[7.24435,47.40939],[7.16708,47.4335],[7.15212,47.47612],[7.14279,47.48707],[7.12853,47.48893],[7.0801,47.47718],[7.03557,47.48695],[7.02102,47.48458],[7.01205,47.47287],[7.003,47.44095],[6.9551,47.40808],[6.94716,47.39698],[6.94818,47.38337],[6.95769,47.37359],[6.97126,47.37218],[7.018,47.38386],[7.05623,47.37035],[7.07007,47.35005],[7.05958,47.32257],[6.97424,47.27856],[6.96347,47.26233],[6.96134,47.23479],[6.89443,47.19393],[6.88913,47.18922],[6.85545,47.14636],[6.76907,47.10751],[6.76011,47.09953],[6.72561,47.0418],[6.62355,46.9811],[6.4812,46.9445],[6.46892,46.93522],[6.46686,46.91997],[6.47548,46.88771],[6.4535,46.8239],[6.45644,46.80534],[6.46722,46.79104],[6.46098,46.76887],[6.15817,46.59343],[6.14872,46.58069],[6.15152,46.56508],[6.16549,46.54399],[6.15811,46.52456],[6.10174,46.46979],[6.09572,46.45418],[6.09704,46.43317],[6.10829,46.41643],[6.16622,46.38839],[6.17817,46.36922],[6.13748,46.31297],[6.13371,46.30227],[6.13038,46.23737],[6.1103,46.22344],[6.08865,46.23081],[6.07717,46.23123],[6.01857,46.21601],[6.00681,46.20752],[6.00388,46.19332],[6.00787,46.16977],[6.01783,46.15564],[6.03509,46.15456],[6.05564,46.16288],[6.12468,46.15415],[6.13778,46.15702],[6.24026,46.22094],[6.24906,46.23299],[6.24707,46.24777],[6.21148,46.31057],[6.21219,46.32485],[6.23946,46.36705],[6.31648,46.41557],[6.41083,46.42495],[6.41748,46.42682],[6.50498,46.46871],[6.63047,46.47435],[6.74665,46.45695],[6.82244,46.42925],[6.81832,46.38181],[6.80484,46.36179],[6.80189,46.34639],[6.81095,46.33359],[6.86491,46.30038],[6.87504,46.28007],[6.86092,46.2439],[6.82698,46.21188],[6.82075,46.19862],[6.81863,46.16592],[6.82259,46.15261],[6.83427,46.14509],[6.90382,46.12971],[6.90491,46.09595],[6.90932,46.08406],[6.92001,46.07721],[6.94898,46.0699],[7.01556,46.00883],[7.05191,45.93066],[7.04533,45.92217],[7.04497,45.92064],[7.04394,45.92036],[6.99582,45.85822],[6.94097,45.83551],[6.84376,45.82387],[6.83102,45.81711],[6.82614,45.80353],[6.82787,45.73217],[6.83174,45.72082],[6.8414,45.71373],[6.90729,45.69124],[6.92419,45.66935],[6.94247,45.66172],[6.97131,45.66528],[7.00597,45.64945],[7.01151,45.63652],[6.9978,45.60877],[6.99643,45.59465],[7.0158,45.52354],[7.02774,45.5102],[7.1072,45.47877],[7.1228,45.44924],[7.13304,45.44001],[7.1856,45.41894],[7.19515,45.40409],[7.17075,45.35069],[7.14232,45.32298],[7.13649,45.30576],[7.14458,45.25048],[7.08417,45.20279],[6.99279,45.19823],[6.98106,45.19368],[6.90009,45.12689],[6.85843,45.11699],[6.78283,45.14228],[6.77056,45.14242],[6.67751,45.11356],[6.6653,45.10289],[6.66501,45.08667],[6.68237,45.04558],[6.69602,45.03395],[6.75744,45.01884],[6.78375,44.9146],[6.7942,44.90161],[6.86698,44.86519],[6.8798,44.86346],[6.93633,44.87461],[7.01795,44.84402],[7.03453,44.82282],[7.03711,44.75009],[7.0496,44.73226],[7.07224,44.72311],[7.08651,44.6968],[7.08666,44.68085],[7.07671,44.67134],[6.99007,44.67203],[6.97413,44.66431],[6.97056,44.64696],[6.97819,44.61784],[6.94659,44.57124],[6.88235,44.53479],[6.87233,44.5195],[6.87892,44.50245],[6.95894,44.43129],[6.95872,44.42908],[6.92167,44.41436],[6.91223,44.40659],[6.90907,44.39477],[6.90972,44.38195],[6.91637,44.36804],[6.99909,44.29414],[7.01181,44.256],[7.01983,44.24558],[7.03259,44.2424],[7.07312,44.2461],[7.1651,44.22112],[7.24533,44.18544],[7.26053,44.16682],[7.27537,44.15947],[7.33878,44.1574],[7.36278,44.13834],[7.37776,44.13416],[7.56283,44.15792],[7.5642,44.15836],[7.56478,44.15817],[7.60548,44.1634],[7.6162,44.16827],[7.63989,44.18928],[7.68608,44.1861],[7.69422,44.17795],[7.68937,44.13869],[7.69445,44.12276],[7.72786,44.08615],[7.72403,44.05704],[7.68603,44.02371],[7.68077,44.0164],[7.66016,43.9672],[7.59624,43.94466],[7.58419,43.93287],[7.56858,43.89159],[7.5271,43.87434],[7.51649,43.86397],[7.51594,43.84915],[7.53622,43.79234],[9.8,43.1],[9.63227,41.43244],[9.36968,41.35052],[9.27311,41.29196],[8.94186,41.27688],[5.8,41.64],[3.17358,42.41768],[3.16081,42.42757],[3.0944,42.41457],[3.03402,42.45331],[3.02214,42.45645],[2.87822,42.4487],[2.87019,42.44653],[2.78424,42.40256],[2.7413,42.41128],[2.72928,42.40998],[2.69331,42.39417],[2.68378,42.3854],[2.68162,42.37263],[2.68585,42.34679],[2.66719,42.33008],[2.58106,42.34418],[2.56777,42.34173],[2.5338,42.32197],[2.47795,42.32986],[2.41933,42.37658],[2.41222,42.38021],[2.26719,42.42055],[2.25973,42.42117],[2.20694,42.41558],[2.20653,42.41526],[2.20526,42.41541],[2.16028,42.41065],[2.14881,42.40545],[2.09393,42.35474],[2.00861,42.33818],[1.965,42.36473],[1.93076,42.42442],[1.92089,42.43302],[1.88467,42.44761],[1.88459,42.44762],[1.88444,42.4477],[1.82774,42.47056],[1.72567,42.48452],[1.71561,42.50125],[1.7272,42.56103],[1.72479,42.57499],[1.71011,42.59992],[1.69377,42.60975],[1.60283,42.61382],[1.56069,42.6392],[1.54636,42.64166],[1.50444,42.6331],[1.4921,42.62502],[1.47238,42.59703],[1.43792,42.59264],[1.41936,42.60643],[1.38032,42.67415],[1.37335,42.68127],[1.33313,42.70563],[1.32364,42.7085],[1.23221,42.71248],[1.16554,42.69928],[1.08546,42.76635],[1.07564,42.77079],[0.95937,42.78852],[0.95073,42.78794],[0.92265,42.7797],[0.84606,42.8157],[0.71511,42.8464],[0.70017,42.84402],[0.69117,42.83186],[0.67409,42.76479],[0.67474,42.75286],[0.69192,42.70684],[0.669,42.67901],[0.43024,42.67863],[0.3715,42.70308],[0.35954,42.70415],[0.34912,42.69817],[0.32567,42.67274],[0.29571,42.66388],[0.24594,42.70175],[0.23972,42.70494],[0.18967,42.72039],[0.17919,42.72075],[-0.01993,42.67389],[-0.06726,42.6848],[-0.16949,42.77157],[-0.29987,42.82697],[-0.31683,42.82635],[-0.39208,42.78766],[-0.44354,42.78453],[-0.48842,42.80255],[-0.50868,42.79935],[-0.54499,42.76906],[-0.56721,42.76937],[-0.67446,42.86392],[-0.68094,42.86775],[-0.73372,42.88666],[-0.7476,42.93879],[-0.75711,42.95107],[-0.77253,42.95284],[-0.82114,42.93865],[-0.94508,42.94192],[-1.02313,42.98206],[-1.10852,43.00409],[-1.1156,43.00461],[-1.14775,43.00124],[-1.15845,43.01452],[-1.16736,43.02083],[-1.21622,43.0381],[-1.22612,43.03898],[-1.26236,43.03303],[-1.30643,43.05531],[-1.31992,43.05696],[-1.33135,43.0496],[-1.3542,43.0197],[-1.43868,43.03371],[-1.4775,43.06889],[-1.48311,43.08561],[-1.47641,43.10248],[-1.43479,43.13087],[-1.42732,43.1404],[-1.39411,43.22935],[-1.39531,43.24596],[-1.40868,43.25591],[-1.52629,43.28099],[-1.54626,43.2737],[-1.57149,43.2412],[-1.61053,43.24223],[-1.65,43.29323],[-1.66953,43.30065],[-1.73359,43.28856],[-1.75606,43.31966],[-1.76297,43.32565],[-1.79156,43.34067],[-1.80099,43.37017],[-1.78509,43.39037],[-1.7835,43.39686],[-2.7,43.9]]],terms_url:"https://wiki.openstreetmap.org/wiki/WikiProject_Cadastre_Fran%C3%A7ais/Conditions_d%27utilisation",terms_text:"cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2019",description:"French land registry",icon:"https://svn.openstreetmap.org/applications/editors/josm/plugins/cadastre-fr/images/cadastre_small.png"},{id:"lu.geoportail.opendata.cadastre",name:"Cadastre geoportail.lu",type:"tms",template:"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/cadastre/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.png",zoomExtent:[0,20],polygon:[[[5.96175,50.17631],[6.02627,50.18496],[6.03318,50.16395],[6.06069,50.15536],[6.07668,50.15913],[6.07824,50.17255],[6.10176,50.17199],[6.1225,50.16437],[6.1201,50.15594],[6.1277,50.14993],[6.11323,50.13739],[6.12369,50.13719],[6.14093,50.1305],[6.13555,50.11899],[6.13808,50.10263],[6.13108,50.09964],[6.13547,50.09119],[6.12194,50.09059],[6.12634,50.07817],[6.13186,50.07348],[6.12117,50.064],[6.11444,50.06139],[6.11563,50.05817],[6.12361,50.06323],[6.13661,50.04178],[6.13034,50.02975],[6.14821,50.02307],[6.13868,50.01572],[6.13594,50.01485],[6.13138,50.01905],[6.13024,50.01819],[6.13934,50.01116],[6.1517,50.01058],[6.14546,49.99689],[6.13966,49.9994],[6.13852,49.99829],[6.14218,49.99535],[6.15023,49.99518],[6.15625,49.98867],[6.17305,49.98589],[6.17348,49.98344],[6.17035,49.98376],[6.16549,49.97115],[6.17151,49.96298],[6.1763,49.962],[6.17995,49.95386],[6.18339,49.9548],[6.17983,49.96307],[6.18331,49.9686],[6.19277,49.97158],[6.19978,49.95352],[6.20707,49.95672],[6.21269,49.9514],[6.22502,49.95039],[6.22044,49.94369],[6.22824,49.93726],[6.22635,49.92766],[6.21913,49.92354],[6.22986,49.92125],[6.23603,49.91355],[6.23187,49.91064],[6.22769,49.91062],[6.23229,49.9072],[6.23381,49.90028],[6.24692,49.89535],[6.25781,49.88724],[6.26301,49.88101],[6.27646,49.87725],[6.28113,49.87957],[6.29166,49.87548],[6.2977,49.86673],[6.30989,49.87107],[6.31532,49.8673],[6.31465,49.86057],[6.32361,49.85188],[6.32158,49.8409],[6.32741,49.83673],[6.33656,49.83998],[6.33937,49.8507],[6.36465,49.85164],[6.4022,49.82098],[6.42643,49.81629],[6.42807,49.81186],[6.43097,49.81129],[6.44161,49.81547],[6.44344,49.81233],[6.45366,49.81275],[6.46454,49.81975],[6.47057,49.82385],[6.49681,49.81277],[6.50669,49.80993],[6.51155,49.80238],[6.51485,49.80513],[6.5196,49.81446],[6.52981,49.81048],[6.53225,49.80686],[6.53083,49.80116],[6.50622,49.78899],[6.51917,49.78344],[6.51105,49.77422],[6.52056,49.76818],[6.52052,49.76134],[6.50373,49.75086],[6.50263,49.73298],[6.50727,49.72938],[6.51809,49.7242],[6.51642,49.72129],[6.51176,49.72016],[6.50479,49.725],[6.49891,49.72639],[6.49558,49.72443],[6.50712,49.71655],[6.50788,49.71215],[6.5046,49.71227],[6.42714,49.66237],[6.4399,49.66025],[6.44251,49.65591],[6.42178,49.61809],[6.39898,49.60094],[6.37941,49.59526],[6.37551,49.58809],[6.38443,49.5801],[6.38119,49.57509],[6.36909,49.5783],[6.35791,49.57166],[6.3849,49.55817],[6.38009,49.54856],[6.35855,49.53296],[6.35932,49.52481],[6.37076,49.50545],[6.37056,49.45732],[6.3334,49.46493],[6.32189,49.47244],[6.29503,49.47928],[6.28789,49.48379],[6.27191,49.49995],[6.24133,49.50693],[6.19669,49.50331],[6.17337,49.50577],[6.16086,49.50085],[6.1671,49.49006],[6.14018,49.48525],[6.12937,49.48803],[6.12725,49.47081],[6.1014,49.46726],[6.10483,49.45076],[6.08167,49.45417],[6.07722,49.46139],[6.05917,49.46306],[6.05222,49.46028],[6.04421,49.44553],[6.02529,49.44703],[6.02154,49.45127],[6.01574,49.44885],[5.99412,49.45301],[5.97657,49.44885],[5.97773,49.45955],[5.97232,49.46087],[5.96891,49.48202],[5.9616,49.49026],[5.91578,49.49835],[5.89033,49.4948],[5.86332,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.83187,49.52639],[5.84308,49.53081],[5.83562,49.54114],[5.81625,49.53325],[5.8052,49.54272],[5.85943,49.57158],[5.86866,49.587],[5.86289,49.58525],[5.8511,49.58379],[5.84712,49.58961],[5.84565,49.5981],[5.8694,49.6106],[5.88182,49.63815],[5.89998,49.63907],[5.89934,49.66239],[5.85656,49.67628],[5.85628,49.68211],[5.8757,49.71118],[5.86481,49.72331],[5.84325,49.71822],[5.82191,49.72128],[5.82489,49.73767],[5.82073,49.74878],[5.78626,49.79079],[5.76517,49.78961],[5.75094,49.79094],[5.74159,49.82126],[5.74581,49.82435],[5.7372,49.83353],[5.74053,49.84142],[5.74701,49.84048],[5.74624,49.84783],[5.75399,49.84878],[5.74066,49.85152],[5.75229,49.85922],[5.74955,49.87554],[5.77567,49.87438],[5.77505,49.88057],[5.7346,49.89341],[5.73303,49.90285],[5.75783,49.91737],[5.76039,49.93252],[5.77073,49.93711],[5.76878,49.94239],[5.7688,49.96104],[5.78672,49.96816],[5.80524,49.96677],[5.80652,49.97321],[5.83129,49.97995],[5.83462,49.98656],[5.81806,49.99936],[5.81561,50.01437],[5.84792,50.02809],[5.86189,50.04581],[5.85087,50.0563],[5.85781,50.07186],[5.881,50.08069],[5.89196,50.12041],[5.95286,50.13384],[5.96175,50.17631]]],terms_url:"https://data.public.lu/en/datasets/plan-cadastral-numerise-pcn-webservices-wms-et-wmts",terms_text:"Administration du Cadastre et de la Topographie",icon:"https://www.geoportail.lu/static/img/lion.png"},{id:"cajueiro_al",name:"Cajueiro AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Cajueiro&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.10753,-9.43884],[-36.10752,-9.43421],[-36.10767,-9.42959],[-36.10779,-9.42361],[-36.10769,-9.41927],[-36.10781,-9.41391],[-36.10803,-9.41094],[-36.1081,-9.40965],[-36.10811,-9.40747],[-36.10816,-9.40693],[-36.10819,-9.40418],[-36.10811,-9.40176],[-36.10817,-9.40002],[-36.10827,-9.39952],[-36.10827,-9.39646],[-36.10833,-9.39475],[-36.10832,-9.39273],[-36.10836,-9.3904],[-36.10841,-9.38447],[-36.10847,-9.38165],[-36.10846,-9.37767],[-36.10835,-9.37573],[-36.10845,-9.37432],[-36.10849,-9.37234],[-36.10845,-9.3697],[-36.10867,-9.36278],[-36.10863,-9.36102],[-36.10873,-9.35928],[-36.10874,-9.35736],[-36.10855,-9.35479],[-36.1087,-9.3523],[-36.10871,-9.34996],[-36.10873,-9.34893],[-36.11269,-9.34908],[-36.11726,-9.34912],[-36.12138,-9.34905],[-36.12806,-9.3491],[-36.13217,-9.34906],[-36.13694,-9.34915],[-36.14025,-9.34914],[-36.14134,-9.34932],[-36.14458,-9.34916],[-36.14684,-9.34914],[-36.14842,-9.34905],[-36.15276,-9.34907],[-36.154,-9.34922],[-36.15627,-9.34923],[-36.16026,-9.34921],[-36.16086,-9.34929],[-36.166,-9.34933],[-36.16938,-9.34942],[-36.17176,-9.34936],[-36.17628,-9.34945],[-36.18028,-9.34937],[-36.18227,-9.34946],[-36.18826,-9.34938],[-36.19039,-9.34945],[-36.19354,-9.34946],[-36.19552,-9.34941],[-36.19918,-9.34951],[-36.19926,-9.35146],[-36.19913,-9.35234],[-36.19912,-9.35353],[-36.19919,-9.35646],[-36.19922,-9.35771],[-36.1993,-9.35832],[-36.19933,-9.36112],[-36.19922,-9.36177],[-36.19918,-9.36258],[-36.19931,-9.364],[-36.19926,-9.36499],[-36.19922,-9.36563],[-36.19928,-9.3666],[-36.19917,-9.36796],[-36.19917,-9.36868],[-36.19922,-9.36911],[-36.19912,-9.37017],[-36.19887,-9.37149],[-36.19886,-9.37264],[-36.19902,-9.37322],[-36.19915,-9.37504],[-36.19911,-9.37688],[-36.19896,-9.37747],[-36.19899,-9.37915],[-36.19917,-9.38053],[-36.19919,-9.38124],[-36.19926,-9.38175],[-36.19928,-9.38302],[-36.19913,-9.38374],[-36.19908,-9.38592],[-36.19879,-9.38787],[-36.19881,-9.38935],[-36.19902,-9.39092],[-36.19904,-9.392],[-36.19899,-9.39348],[-36.1988,-9.39451],[-36.19867,-9.39705],[-36.19845,-9.39949],[-36.19864,-9.40313],[-36.19866,-9.40476],[-36.19865,-9.40836],[-36.19875,-9.40902],[-36.19857,-9.41058],[-36.19859,-9.41273],[-36.19874,-9.41446],[-36.19868,-9.41711],[-36.1986,-9.41902],[-36.19846,-9.41965],[-36.1985,-9.42235],[-36.19871,-9.42429],[-36.19858,-9.42697],[-36.1984,-9.42895],[-36.19857,-9.43412],[-36.19871,-9.4347],[-36.19865,-9.43595],[-36.19857,-9.43626],[-36.19859,-9.43667],[-36.19876,-9.43749],[-36.19889,-9.43905],[-36.19882,-9.43995],[-36.1785,-9.43977],[-36.17718,-9.43968],[-36.17265,-9.43967],[-36.17099,-9.43971],[-36.16396,-9.43963],[-36.15386,-9.4395],[-36.13983,-9.4393],[-36.12875,-9.43913],[-36.11497,-9.43892],[-36.10753,-9.43884]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"osm-cambodia_laos_thailand_vietnam-bilingual",name:"Cambodia, Laos, Thailand, Vietnam, Malaysia, Myanmar bilingual",type:"tms",template:"https://{switch:a,b,c,d}.tile.osm-tools.org/osm/{zoom}/{x}/{y}.png",zoomExtent:[0,20],polygon:[[[92.10238,20.81356],[93.56905,24.09755],[94.1733,23.92695],[95.19503,26.70727],[96.75509,27.52867],[97.58456,28.5806],[98.73812,27.51405],[98.74362,25.87992],[97.67794,24.75774],[97.96359,24.04238],[98.82052,24.16272],[99.52364,22.95934],[100.36959,21.50514],[101.79232,22.48305],[105.36288,23.33311],[106.81857,22.84801],[108.19735,21.36197],[107.43895,18.85398],[117.14537,7.46562],[119.6173,5.28754],[118.12315,4.05023],[117.25523,4.36249],[115.86546,4.34606],[115.50841,3.02498],[114.5526,1.5101],[113.54186,1.25748],[112.96507,1.5705],[112.24547,1.5101],[111.67418,1.01583],[110.4547,0.90049],[109.49889,1.9219],[103.22569,1.12568],[100.46263,3.23889],[97.6721,8.05888],[93.89281,15.93987],[92.10238,20.81356]]],terms_url:"http://www.osm-tools.org",terms_text:"© osm-tools.org & OpenStreetMap contributors, CC-BY-SA"},{id:"campo_alegre_al",name:"Campo Alegre AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Campo%20Alegre&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.30643,-9.82332],[-36.30603,-9.78597],[-36.30602,-9.78263],[-36.30609,-9.78168],[-36.30604,-9.78081],[-36.3059,-9.77531],[-36.30586,-9.76496],[-36.30545,-9.73336],[-36.39634,-9.73248],[-36.39627,-9.73744],[-36.39636,-9.74336],[-36.39644,-9.75535],[-36.3966,-9.75856],[-36.39665,-9.75979],[-36.39655,-9.76244],[-36.39661,-9.76489],[-36.39658,-9.76648],[-36.39661,-9.76684],[-36.39659,-9.7696],[-36.3967,-9.77896],[-36.39675,-9.78464],[-36.39684,-9.79067],[-36.39693,-9.79681],[-36.39703,-9.80298],[-36.39719,-9.82033],[-36.39722,-9.82234],[-36.39392,-9.82233],[-36.35375,-9.82279],[-36.34822,-9.82286],[-36.31697,-9.82317],[-36.31191,-9.82324],[-36.30879,-9.82327],[-36.30643,-9.82332]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"canaan_drone_red_cross_201712",name:"Canaan - American Red Cross, Dec-2017",type:"tms",template:"https://tiles.openaerialmap.org/5ac65a9f91b5310010e0d489/0/5ac65a9f91b5310010e0d48a/{zoom}/{x}/{y}.png",endDate:"2017-12-20T00:00:00.000Z",startDate:"2017-12-11T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[-72.26734,18.63561],[-72.2636,18.6373],[-72.26116,18.64141],[-72.25983,18.64588],[-72.25811,18.64742],[-72.24502,18.64795],[-72.23433,18.64807],[-72.22734,18.6482],[-72.21953,18.65438],[-72.2161,18.65446],[-72.21584,18.66222],[-72.21725,18.66739],[-72.21889,18.67019],[-72.22309,18.66958],[-72.22343,18.67312],[-72.22502,18.6732],[-72.22545,18.67609],[-72.23288,18.67597],[-72.23339,18.67877],[-72.23674,18.67857],[-72.23854,18.67975],[-72.24,18.68129],[-72.24463,18.68207],[-72.24682,18.6817],[-72.24605,18.67698],[-72.25094,18.67698],[-72.25511,18.67902],[-72.25961,18.67898],[-72.26081,18.67743],[-72.27038,18.67711],[-72.27901,18.67682],[-72.28373,18.67893],[-72.28613,18.68154],[-72.29665,18.68178],[-72.30184,18.68568],[-72.3012,18.68824],[-72.30802,18.69324],[-72.30948,18.69308],[-72.31699,18.69682],[-72.32806,18.70528],[-72.3384,18.69902],[-72.34012,18.69666],[-72.33961,18.69426],[-72.33377,18.68357],[-72.33135,18.68192],[-72.32551,18.68093],[-72.32027,18.67741],[-72.31626,18.67477],[-72.31167,18.672],[-72.308,18.66995],[-72.30534,18.66926],[-72.30068,18.66499],[-72.29796,18.66479],[-72.29609,18.66129],[-72.29315,18.65999],[-72.29519,18.65497],[-72.28414,18.64962],[-72.27804,18.64523],[-72.27487,18.64212],[-72.27352,18.64057],[-72.2706,18.63901],[-72.26734,18.63561]]],terms_url:"http://americanredcross.github.io/",terms_text:"American Red Cross",description:"Drone imagery collected December 2017 for Canaan, Haiti by American Red Cross in coordination with the Haitian Red Cross."},{id:"Geneve-SITG-2011",name:"Canton de Génève 5cm (SITG 2011)",type:"wms",template:"https://ge.ch/ags2/services/Orthophotos_2011/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2011-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",polygon:[[[6.18221,46.22618],[6.18348,46.22772],[6.18929,46.23329],[6.19196,46.23858],[6.19253,46.24239],[6.19061,46.24397],[6.19046,46.24654],[6.19256,46.25045],[6.19186,46.25262],[6.19325,46.256],[6.19287,46.25776],[6.19543,46.26181],[6.1979,46.26454],[6.20045,46.26569],[6.20917,46.26634],[6.21716,46.27388],[6.22046,46.27895],[6.2275,46.28649],[6.23433,46.28955],[6.23643,46.2932],[6.24074,46.29774],[6.23958,46.30396],[6.2413,46.30529],[6.2432,46.30453],[6.24513,46.30492],[6.24627,46.30372],[6.24983,46.3027],[6.25032,46.3014],[6.24938,46.30018],[6.25146,46.29647],[6.25063,46.29451],[6.25223,46.29382],[6.25429,46.2907],[6.25231,46.28735],[6.25032,46.2868],[6.24974,46.28574],[6.24636,46.28433],[6.24323,46.28428],[6.23985,46.28098],[6.23934,46.27627],[6.24372,46.27356],[6.25113,46.26258],[6.26244,46.2553],[6.26301,46.25457],[6.262,46.25215],[6.26736,46.24887],[6.27732,46.25211],[6.27725,46.25298],[6.2832,46.25503],[6.28231,46.25568],[6.28278,46.25677],[6.28868,46.26046],[6.29154,46.2644],[6.29457,46.26556],[6.29729,46.26489],[6.29783,46.2631],[6.29541,46.25827],[6.29663,46.2566],[6.3024,46.2558],[6.30678,46.25753],[6.311,46.25666],[6.30768,46.25184],[6.31046,46.25057],[6.31011,46.24749],[6.31156,46.24386],[6.29606,46.22501],[6.29012,46.22241],[6.27773,46.21493],[6.26707,46.21276],[6.25668,46.20926],[6.25089,46.20574],[6.25076,46.20456],[6.2495,46.20404],[6.24643,46.20454],[6.24251,46.20364],[6.23594,46.20541],[6.23347,46.20509],[6.22889,46.20172],[6.22323,46.20005],[6.22355,46.19881],[6.22257,46.19791],[6.21935,46.19765],[6.21688,46.19448],[6.21259,46.19189],[6.20727,46.19137],[6.20588,46.18908],[6.2034,46.18806],[6.20282,46.18642],[6.20035,46.18504],[6.19905,46.18296],[6.19615,46.18288],[6.1885,46.17967],[6.18751,46.17539],[6.18982,46.16584],[6.1748,46.15694],[6.1688,46.15624],[6.15829,46.15195],[6.15434,46.15141],[6.14952,46.14933],[6.14805,46.14748],[6.14832,46.14619],[6.14561,46.14417],[6.14244,46.14493],[6.13768,46.14217],[6.13692,46.14071],[6.13074,46.13946],[6.12598,46.13966],[6.12014,46.14181],[6.1077,46.14203],[6.10537,46.14313],[6.09746,46.14325],[6.09151,46.15095],[6.07476,46.14795],[6.07188,46.14908],[6.05295,46.15046],[6.04973,46.1468],[6.04862,46.14153],[6.04571,46.13916],[6.04287,46.14006],[6.04013,46.13894],[6.03783,46.13716],[6.03647,46.13381],[6.03531,46.13344],[6.03,46.13816],[6.02079,46.14024],[6.01693,46.14191],[6.01282,46.14119],[6.00814,46.14171],[6.00364,46.14088],[5.99338,46.1432],[5.98728,46.14171],[5.98464,46.14232],[5.98309,46.13712],[5.97603,46.1319],[5.97314,46.13081],[5.97037,46.13108],[5.96536,46.12882],[5.96163,46.12976],[5.9573,46.12767],[5.95575,46.12836],[5.95484,46.13214],[5.9589,46.13553],[5.96446,46.13738],[5.96517,46.13845],[5.9631,46.14241],[5.96383,46.14656],[5.97157,46.1558],[5.97884,46.16721],[5.98022,46.17354],[5.98322,46.17507],[5.98537,46.17478],[5.98754,46.17306],[5.99029,46.17955],[5.9936,46.18203],[5.98976,46.18692],[5.98287,46.18822],[5.98068,46.1904],[5.96282,46.1963],[5.96225,46.19719],[5.96465,46.20022],[5.97164,46.20302],[5.96985,46.20383],[5.96794,46.20675],[5.97227,46.21418],[5.97364,46.21563],[5.97897,46.21821],[6.00857,46.24444],[6.01422,46.24855],[6.06593,46.28345],[6.11511,46.31511],[6.12573,46.31843],[6.12972,46.31568],[6.12978,46.31407],[6.13604,46.30896],[6.14179,46.30555],[6.15393,46.30014],[6.17157,46.29507],[6.17125,46.29223],[6.17277,46.28629],[6.17018,46.28533],[6.16834,46.28109],[6.17201,46.27554],[6.1722,46.27301],[6.1691,46.26785],[6.16746,46.26217],[6.16531,46.26195],[6.16455,46.26274],[6.15943,46.25898],[6.15532,46.25216],[6.15387,46.25212],[6.15273,46.25037],[6.15311,46.2477],[6.15494,46.24591],[6.1521,46.23878],[6.15217,46.23273],[6.15034,46.22659],[6.15454,46.22191],[6.15483,46.22044],[6.15296,46.21738],[6.154,46.21355],[6.1571,46.21097],[6.16263,46.21043],[6.16387,46.2097],[6.16911,46.21191],[6.16867,46.21318],[6.17073,46.21478],[6.17471,46.21603],[6.18221,46.22618]],[[6.18834,46.34901],[6.18696,46.34862],[6.18195,46.35015],[6.17961,46.352],[6.17142,46.35444],[6.17022,46.35911],[6.17415,46.36036],[6.17272,46.36189],[6.17348,46.36288],[6.17999,46.36547],[6.1877,46.36132],[6.19447,46.36175],[6.19905,46.36086],[6.20113,46.35634],[6.20258,46.35567],[6.20791,46.35583],[6.21374,46.35379],[6.21247,46.35085],[6.20846,46.34665],[6.2086,46.33991],[6.20659,46.33792],[6.20493,46.33861],[6.20348,46.33793],[6.19181,46.34333],[6.19318,46.34787],[6.19076,46.3477],[6.18834,46.34901]],[[6.18182,46.34281],[6.18016,46.34318],[6.1752,46.34532],[6.17341,46.34398],[6.17324,46.34054],[6.1714,46.33952],[6.16588,46.34254],[6.16564,46.34339],[6.17091,46.35054],[6.17341,46.35029],[6.17458,46.35192],[6.17587,46.35205],[6.18579,46.34593],[6.18182,46.34281]]],terms_url:"http://ge.ch/sitg/donnees/conditions-d-utilisation/open-data",terms_text:"Orthophotos du SITG 2011"},{id:"CTFRIBOURG2016",name:"Canton Fribourg 2016",type:"tms",template:"https://mapproxy.osm.ch/tiles/fribourg_2016/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",zoomExtent:[1,21],polygon:[[[6.79478,46.57542],[6.79949,46.57407],[6.80256,46.57491],[6.80336,46.57687],[6.80427,46.57664],[6.80489,46.57792],[6.80794,46.57761],[6.8094,46.57885],[6.81084,46.57896],[6.81322,46.57823],[6.81153,46.58099],[6.8142,46.58396],[6.81411,46.58567],[6.8206,46.58368],[6.82371,46.57747],[6.82693,46.57796],[6.82927,46.57637],[6.83485,46.57533],[6.83744,46.57677],[6.83691,46.57748],[6.83982,46.57896],[6.84239,46.58244],[6.84532,46.58276],[6.84644,46.58394],[6.84857,46.58331],[6.85087,46.58113],[6.85262,46.58197],[6.85996,46.57987],[6.86554,46.57725],[6.86507,46.57623],[6.8679,46.57515],[6.87446,46.56497],[6.8845,46.56195],[6.88686,46.56341],[6.89214,46.5679],[6.89918,46.56671],[6.89885,46.56499],[6.89393,46.55991],[6.88822,46.55815],[6.86839,46.54164],[6.86498,46.53896],[6.86015,46.53597],[6.85563,46.54086],[6.85501,46.54144],[6.85087,46.54111],[6.8407,46.53819],[6.83032,46.53744],[6.82783,46.54298],[6.82553,46.54357],[6.81278,46.52707],[6.81088,46.52513],[6.81534,46.52139],[6.8181,46.5165],[6.82263,46.51411],[6.82429,46.51207],[6.83034,46.51246],[6.83239,46.50544],[6.83503,46.50231],[6.84126,46.49706],[6.84294,46.49632],[6.84554,46.49667],[6.84775,46.49369],[6.84891,46.49337],[6.85729,46.49305],[6.86276,46.49384],[6.86634,46.50079],[6.87244,46.50431],[6.88168,46.51257],[6.8967,46.52044],[6.89773,46.52005],[6.89711,46.51766],[6.89767,46.51483],[6.89522,46.51079],[6.89572,46.50773],[6.89974,46.51039],[6.90142,46.51233],[6.92517,46.50769],[6.92759,46.50467],[6.93363,46.50167],[6.93674,46.50096],[6.95614,46.49949],[6.97239,46.48879],[6.97581,46.4784],[6.97783,46.47289],[6.97815,46.46833],[6.97906,46.46107],[6.98016,46.45896],[6.99212,46.44891],[6.98361,46.43873],[6.98394,46.43799],[6.98746,46.43794],[7.01786,46.44707],[7.02103,46.45729],[7.06583,46.48904],[7.0724,46.4864],[7.10037,46.48699],[7.12279,46.49869],[7.1264,46.50317],[7.13096,46.50466],[7.13624,46.50861],[7.13704,46.51308],[7.14005,46.51688],[7.14044,46.51988],[7.14318,46.52183],[7.1437,46.52475],[7.1453,46.52701],[7.14835,46.52846],[7.15834,46.52681],[7.16346,46.52855],[7.16709,46.53101],[7.18234,46.53837],[7.19218,46.54656],[7.20081,46.54169],[7.20108,46.543],[7.20765,46.53291],[7.21417,46.53762],[7.21811,46.54211],[7.22171,46.54481],[7.22311,46.5476],[7.22543,46.54923],[7.2322,46.55123],[7.23614,46.554],[7.24047,46.55424],[7.24705,46.55623],[7.25574,46.56029],[7.26385,46.56752],[7.2681,46.57369],[7.28136,46.58411],[7.2992,46.5791],[7.30805,46.58132],[7.31254,46.58917],[7.3207,46.59183],[7.31479,46.60042],[7.3162,46.60937],[7.31826,46.61615],[7.3178,46.61856],[7.31213,46.6217],[7.31327,46.63662],[7.32284,46.63731],[7.32684,46.63873],[7.32975,46.64171],[7.32787,46.64616],[7.321,46.65465],[7.32345,46.65526],[7.32914,46.65459],[7.33116,46.65522],[7.33403,46.65471],[7.34549,46.6553],[7.34756,46.65307],[7.35063,46.65164],[7.35079,46.64799],[7.35456,46.64669],[7.3558,46.64533],[7.35528,46.64193],[7.35714,46.63927],[7.35877,46.64418],[7.36209,46.64683],[7.36229,46.64791],[7.36608,46.64898],[7.37747,46.65636],[7.36933,46.65564],[7.36953,46.65748],[7.37103,46.65907],[7.37083,46.66085],[7.37187,46.66283],[7.37122,46.66375],[7.37252,46.66757],[7.37108,46.66942],[7.37649,46.67503],[7.37293,46.68012],[7.37777,46.68357],[7.37587,46.68645],[7.376,46.6878],[7.38027,46.69018],[7.37693,46.69272],[7.3686,46.69265],[7.3649,46.69505],[7.36261,46.69928],[7.3598,46.69802],[7.34598,46.69895],[7.34604,46.7019],[7.34939,46.70555],[7.35037,46.70874],[7.35021,46.71119],[7.34903,46.71249],[7.34065,46.71464],[7.33277,46.71491],[7.32868,46.71641],[7.31011,46.71815],[7.30785,46.71717],[7.30002,46.72247],[7.29683,46.72737],[7.29685,46.73565],[7.29834,46.74013],[7.30304,46.74517],[7.30454,46.74816],[7.30486,46.75026],[7.30335,46.7514],[7.30309,46.75261],[7.30359,46.75919],[7.29987,46.76375],[7.29881,46.76513],[7.29307,46.77136],[7.29532,46.77537],[7.29639,46.77729],[7.30081,46.77905],[7.30053,46.78064],[7.30113,46.78134],[7.30447,46.78321],[7.30447,46.78415],[7.30207,46.78638],[7.30351,46.78887],[7.30201,46.79079],[7.30159,46.79283],[7.30732,46.79872],[7.31044,46.80823],[7.31537,46.81246],[7.32028,46.8149],[7.32047,46.81564],[7.32072,46.82011],[7.31981,46.82515],[7.32891,46.829],[7.3302,46.82968],[7.33123,46.83177],[7.33103,46.8328],[7.32926,46.83563],[7.32333,46.84041],[7.30755,46.84704],[7.30775,46.84808],[7.30613,46.84999],[7.31207,46.85557],[7.31351,46.85936],[7.31739,46.8606],[7.32087,46.86154],[7.32576,46.85681],[7.323,46.85476],[7.32603,46.85163],[7.33181,46.8512],[7.33536,46.85043],[7.33678,46.84979],[7.33821,46.84946],[7.34726,46.85375],[7.34934,46.85331],[7.35167,46.85502],[7.35444,46.85875],[7.35772,46.86065],[7.35925,46.86311],[7.35794,46.86513],[7.35838,46.8688],[7.35738,46.8701],[7.35386,46.87129],[7.35253,46.87555],[7.35339,46.88676],[7.34843,46.88934],[7.32573,46.89373],[7.30935,46.89152],[7.29618,46.89377],[7.28938,46.89377],[7.28639,46.89269],[7.28245,46.8898],[7.2802,46.8896],[7.27259,46.89249],[7.26634,46.89361],[7.25931,46.89797],[7.24433,46.90037],[7.24314,46.89792],[7.23633,46.89809],[7.23203,46.90029],[7.2309,46.9024],[7.23032,46.90394],[7.22351,46.90276],[7.21755,46.89735],[7.21244,46.90173],[7.2088,46.9026],[7.20781,46.90913],[7.20578,46.91477],[7.20692,46.92481],[7.2111,46.92527],[7.21854,46.92434],[7.2342,46.92939],[7.23411,46.93669],[7.23477,46.93827],[7.2302,46.93995],[7.2282,46.93881],[7.22555,46.93633],[7.2174,46.93307],[7.2093,46.93334],[7.20823,46.93323],[7.2058,46.94023],[7.2055,46.94112],[7.20951,46.94188],[7.21027,46.94302],[7.21044,46.94569],[7.21011,46.94781],[7.20885,46.95435],[7.21102,46.95652],[7.20838,46.95768],[7.20742,46.95967],[7.19764,46.96065],[7.19459,46.96135],[7.19463,46.9629],[7.19552,46.96416],[7.19633,46.96365],[7.19794,46.96445],[7.1993,46.9638],[7.20646,46.96413],[7.20745,46.96751],[7.21422,46.96692],[7.21467,46.97133],[7.21739,46.97147],[7.21686,46.97271],[7.22247,46.97454],[7.22163,46.97556],[7.22821,46.97836],[7.23569,46.98456],[7.23486,46.98675],[7.22594,46.9924],[7.22625,46.99868],[7.22575,46.99915],[7.21779,47.00641],[7.21299,47.0068],[7.09058,46.978],[7.03295,46.98265],[6.73785,46.81195],[6.73908,46.71021],[6.81908,46.65533],[6.82741,46.65982],[6.82089,46.65179],[6.81729,46.64923],[6.81851,46.6478],[6.81458,46.64747],[6.81344,46.64953],[6.81194,46.6492],[6.81081,46.65038],[6.80674,46.65059],[6.80203,46.64889],[6.79891,46.64914],[6.79879,46.64781],[6.80367,46.64567],[6.80325,46.6448],[6.8038,46.64451],[6.80321,46.64376],[6.80171,46.64421],[6.79895,46.63959],[6.79692,46.63314],[6.79838,46.63016],[6.80043,46.62991],[6.80065,46.62843],[6.80172,46.62854],[6.80228,46.62775],[6.80197,46.62507],[6.80355,46.62124],[6.80244,46.61877],[6.80296,46.61615],[6.80185,46.61555],[6.80389,46.60903],[6.80239,46.60142],[6.79833,46.59986],[6.8002,46.59362],[6.80124,46.5925],[6.79848,46.58616],[6.79948,46.58559],[6.79894,46.58205],[6.79611,46.57932],[6.79626,46.57728],[6.79478,46.57542]]],terms_text:"Canton Fribourg 2016 'orthophoto technique'",description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{id:"Canvec",name:"Canvec - English",type:"wms",template:"https://maps.geogratis.gc.ca/wms/canvec_en?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=canvec&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-141.0678,60.2442],[-139.3842,60.10331],[-137.4746,58.82791],[-135.4766,59.65971],[-134.399,58.86279],[-132.5239,57.08342],[-130.1435,55.27452],[-130.7734,54.75597],[-132.4355,54.71514],[-134.5711,54.38827],[-141.7761,53.58405],[-128.9768,46.41459],[-124.8087,48.42976],[-123.4286,48.17889],[-123.0256,48.40444],[-123.19237,48.65504],[-122.99582,48.51065],[-122.4869,48.4098],[-122.32915,48.4528],[-122.22939,48.50649],[-122.17908,48.52965],[-122.1842,48.5669],[-121.77833,48.57593],[-121.66578,48.42791],[-121.33068,48.35714],[-121.02713,48.34977],[-121.03054,48.49406],[-120.698,48.51497],[-120.51041,48.8718],[-119.97579,48.88134],[-119.95447,48.51497],[-119.90758,48.29421],[-119.73193,48.15503],[-119.74386,48.07419],[-119.62279,48.10951],[-119.60232,48.14707],[-119.25273,48.16243],[-114.1499,48.99487],[-95.12094,48.98405],[-95.13419,49.35564],[-94.94415,49.34356],[-94.8839,49.29522],[-94.71704,48.87631],[-94.71791,48.7485],[-93.83204,48.49765],[-93.43778,48.53066],[-93.38216,48.59507],[-92.98471,48.60312],[-92.73847,48.50725],[-92.7095,48.42081],[-92.54293,48.40158],[-92.38361,48.20406],[-92.11564,48.27641],[-91.58697,48.02516],[-91.24658,48.05422],[-90.86275,48.20889],[-90.78308,48.0639],[-90.0774,48.07435],[-89.93835,47.96584],[-89.75469,47.99609],[-89.32745,47.93943],[-88.41489,48.26677],[-84.9566,46.86086],[-84.84795,46.6762],[-84.55904,46.45441],[-84.47642,46.44972],[-84.43758,46.48872],[-84.3669,46.5055],[-84.34899,46.5055],[-84.29026,46.49077],[-84.25742,46.49386],[-84.22507,46.53187],[-84.1962,46.53804],[-84.18027,46.52468],[-84.15987,46.52468],[-84.13449,46.52879],[-84.11558,46.50653],[-84.15944,46.42769],[-84.10024,46.20338],[-83.95558,46.05132],[-83.8864,46.06125],[-83.8203,46.11181],[-83.76975,46.09563],[-83.67498,46.11391],[-83.58084,46.09921],[-83.44747,45.99521],[-83.60888,45.81772],[-82.14271,43.57905],[-82.39133,43.06666],[-82.41252,43.01127],[-82.42522,42.99864],[-82.42618,42.99374],[-82.42363,42.98536],[-82.41503,42.97697],[-82.41853,42.96578],[-82.43064,42.95203],[-82.44911,42.93711],[-82.45739,42.92568],[-82.46472,42.90562],[-82.47228,42.8877],[-82.47228,42.84743],[-82.48536,42.80967],[-82.46844,42.76365],[-82.48586,42.73697],[-82.49155,42.71168],[-82.51488,42.66652],[-82.51224,42.63893],[-82.52421,42.61103],[-82.56854,42.58184],[-82.59498,42.55148],[-82.61286,42.56409],[-82.65158,42.55707],[-82.83439,42.3763],[-83.01489,42.33457],[-83.07244,42.31502],[-83.09647,42.29542],[-83.12823,42.24126],[-83.14167,42.18582],[-83.12799,42.12172],[-83.16266,42.04963],[-83.05136,41.70911],[-82.41932,41.6377],[-81.22563,42.19633],[-80.06688,42.37121],[-78.86642,42.825],[-78.90301,42.92307],[-78.92063,42.95234],[-78.93331,42.95708],[-78.96058,42.9595],[-78.98479,42.9761],[-79.01825,42.9964],[-79.01969,43.01561],[-79.00695,43.0333],[-78.99599,43.06448],[-79.07335,43.07876],[-79.07286,43.083],[-79.0652,43.0917],[-79.05623,43.10825],[-79.05982,43.11563],[-79.06764,43.11992],[-79.05411,43.12801],[-79.04112,43.13986],[-79.04465,43.16192],[-79.05101,43.17037],[-79.04758,43.19974],[-79.05511,43.25682],[-79.18688,43.44858],[-78.68836,43.62502],[-76.77647,43.61369],[-76.41665,44.08498],[-75.49023,44.70772],[-75.29544,44.82587],[-75.16845,44.88548],[-75.1275,44.8975],[-75.00499,44.95265],[-74.98159,44.97728],[-74.90496,44.98222],[-74.8313,45.01108],[-74.77954,45.00158],[-74.74562,44.98526],[-74.70475,44.99877],[-74.49079,44.99343],[-74.23203,44.98552],[-73.93713,44.99512],[-73.01809,45.0121],[-72.63177,45.0121],[-72.54779,45.00506],[-72.32259,45.00286],[-71.49404,45.01093],[-71.48648,45.06221],[-71.42303,45.12765],[-71.43112,45.14037],[-71.37175,45.22117],[-71.28959,45.28578],[-71.23613,45.24302],[-71.11683,45.22933],[-71.0531,45.29866],[-70.98936,45.31088],[-70.90246,45.22525],[-70.82473,45.22714],[-70.77626,45.40013],[-70.7119,45.3754],[-70.63387,45.37346],[-70.60302,45.41179],[-70.67659,45.56319],[-70.3752,45.73075],[-70.36334,45.82013],[-70.25417,45.87468],[-70.22569,45.94403],[-70.27316,45.99022],[-70.17586,46.33538],[-70.06195,46.4107],[-69.98891,46.69363],[-69.22424,47.44463],[-69.06999,47.41092],[-69.07473,47.24202],[-68.89684,47.17469],[-68.78685,47.21493],[-68.72415,47.23217],[-68.68583,47.24028],[-68.66044,47.23183],[-68.62162,47.24028],[-68.59425,47.24974],[-68.59226,47.27001],[-68.57385,47.28486],[-68.55941,47.2798],[-68.542,47.2798],[-68.51214,47.29195],[-68.47381,47.29229],[-68.46038,47.28149],[-68.43898,47.27777],[-68.37229,47.2825],[-68.3703,47.34796],[-68.33173,47.35822],[-68.29664,47.352],[-68.2399,47.34897],[-68.0906,47.26798],[-68.00002,47.21223],[-67.96344,47.19753],[-67.93582,47.15947],[-67.88619,47.10424],[-67.80218,47.06386],[-67.79415,45.93923],[-67.82753,45.8489],[-67.82753,45.6704],[-67.54943,45.57445],[-67.45302,45.58742],[-67.44189,45.52251],[-67.54201,45.49393],[-67.4456,45.38726],[-67.51605,45.29343],[-67.38257,45.11839],[-67.3047,45.11316],[-67.26762,45.18116],[-67.12671,45.09484],[-66.94835,44.78406],[-66.52283,43.61294],[-65.02339,42.10691],[-42.53366,47.50263],[-75.90901,77.3176],[-71.86482,78.7359],[-67.20011,80.66812],[-66.20727,80.78637],[-54.82473,83.07464],[-57.62518,85.04043],[-106.7949,85.04625],[-141.3957,79.2514],[-141.0678,60.2442]]]},{id:"Canvec_French",name:"Canvec - French",type:"wms",template:"https://maps.geogratis.gc.ca/wms/canvec_fr?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=canvec&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-141.0678,60.2442],[-139.3842,60.10331],[-137.4746,58.82791],[-135.4766,59.65971],[-134.399,58.86279],[-132.5239,57.08342],[-130.1435,55.27452],[-130.7734,54.75597],[-132.4355,54.71514],[-134.5711,54.38827],[-141.7761,53.58405],[-128.9768,46.41459],[-124.8087,48.42976],[-123.4286,48.17889],[-123.0256,48.40444],[-123.19237,48.65504],[-122.99582,48.51065],[-122.4869,48.4098],[-122.32915,48.4528],[-122.22939,48.50649],[-122.17908,48.52965],[-122.1842,48.5669],[-121.77833,48.57593],[-121.66578,48.42791],[-121.33068,48.35714],[-121.02713,48.34977],[-121.03054,48.49406],[-120.698,48.51497],[-120.51041,48.8718],[-119.97579,48.88134],[-119.95447,48.51497],[-119.90758,48.29421],[-119.73193,48.15503],[-119.74386,48.07419],[-119.62279,48.10951],[-119.60232,48.14707],[-119.25273,48.16243],[-114.1499,48.99487],[-95.12094,48.98405],[-95.13419,49.35564],[-94.94415,49.34356],[-94.8839,49.29522],[-94.71704,48.87631],[-94.71791,48.7485],[-93.83204,48.49765],[-93.43778,48.53066],[-93.38216,48.59507],[-92.98471,48.60312],[-92.73847,48.50725],[-92.7095,48.42081],[-92.54293,48.40158],[-92.38361,48.20406],[-92.11564,48.27641],[-91.58697,48.02516],[-91.24658,48.05422],[-90.86275,48.20889],[-90.78308,48.0639],[-90.0774,48.07435],[-89.93835,47.96584],[-89.75469,47.99609],[-89.32745,47.93943],[-88.41489,48.26677],[-84.9566,46.86086],[-84.84795,46.6762],[-84.55904,46.45441],[-84.47642,46.44972],[-84.43758,46.48872],[-84.3669,46.5055],[-84.34899,46.5055],[-84.29026,46.49077],[-84.25742,46.49386],[-84.22507,46.53187],[-84.1962,46.53804],[-84.18027,46.52468],[-84.15987,46.52468],[-84.13449,46.52879],[-84.11558,46.50653],[-84.15944,46.42769],[-84.10024,46.20338],[-83.95558,46.05132],[-83.8864,46.06125],[-83.8203,46.11181],[-83.76975,46.09563],[-83.67498,46.11391],[-83.58084,46.09921],[-83.44747,45.99521],[-83.60888,45.81772],[-82.14271,43.57905],[-82.39133,43.06666],[-82.41252,43.01127],[-82.42522,42.99864],[-82.42618,42.99374],[-82.42363,42.98536],[-82.41503,42.97697],[-82.41853,42.96578],[-82.43064,42.95203],[-82.44911,42.93711],[-82.45739,42.92568],[-82.46472,42.90562],[-82.47228,42.8877],[-82.47228,42.84743],[-82.48536,42.80967],[-82.46844,42.76365],[-82.48586,42.73697],[-82.49155,42.71168],[-82.51488,42.66652],[-82.51224,42.63893],[-82.52421,42.61103],[-82.56854,42.58184],[-82.59498,42.55148],[-82.61286,42.56409],[-82.65158,42.55707],[-82.83439,42.3763],[-83.01489,42.33457],[-83.07244,42.31502],[-83.09647,42.29542],[-83.12823,42.24126],[-83.14167,42.18582],[-83.12799,42.12172],[-83.16266,42.04963],[-83.05136,41.70911],[-82.41932,41.6377],[-81.22563,42.19633],[-80.06688,42.37121],[-78.86642,42.825],[-78.90301,42.92307],[-78.92063,42.95234],[-78.93331,42.95708],[-78.96058,42.9595],[-78.98479,42.9761],[-79.01825,42.9964],[-79.01969,43.01561],[-79.00695,43.0333],[-78.99599,43.06448],[-79.07335,43.07876],[-79.07286,43.083],[-79.0652,43.0917],[-79.05623,43.10825],[-79.05982,43.11563],[-79.06764,43.11992],[-79.05411,43.12801],[-79.04112,43.13986],[-79.04465,43.16192],[-79.05101,43.17037],[-79.04758,43.19974],[-79.05511,43.25682],[-79.18688,43.44858],[-78.68836,43.62502],[-76.77647,43.61369],[-76.41665,44.08498],[-75.49023,44.70772],[-75.29544,44.82587],[-75.16845,44.88548],[-75.1275,44.8975],[-75.00499,44.95265],[-74.98159,44.97728],[-74.90496,44.98222],[-74.8313,45.01108],[-74.77954,45.00158],[-74.74562,44.98526],[-74.70475,44.99877],[-74.49079,44.99343],[-74.23203,44.98552],[-73.93713,44.99512],[-73.01809,45.0121],[-72.63177,45.0121],[-72.54779,45.00506],[-72.32259,45.00286],[-71.49404,45.01093],[-71.48648,45.06221],[-71.42303,45.12765],[-71.43112,45.14037],[-71.37175,45.22117],[-71.28959,45.28578],[-71.23613,45.24302],[-71.11683,45.22933],[-71.0531,45.29866],[-70.98936,45.31088],[-70.90246,45.22525],[-70.82473,45.22714],[-70.77626,45.40013],[-70.7119,45.3754],[-70.63387,45.37346],[-70.60302,45.41179],[-70.67659,45.56319],[-70.3752,45.73075],[-70.36334,45.82013],[-70.25417,45.87468],[-70.22569,45.94403],[-70.27316,45.99022],[-70.17586,46.33538],[-70.06195,46.4107],[-69.98891,46.69363],[-69.22424,47.44463],[-69.06999,47.41092],[-69.07473,47.24202],[-68.89684,47.17469],[-68.78685,47.21493],[-68.72415,47.23217],[-68.68583,47.24028],[-68.66044,47.23183],[-68.62162,47.24028],[-68.59425,47.24974],[-68.59226,47.27001],[-68.57385,47.28486],[-68.55941,47.2798],[-68.542,47.2798],[-68.51214,47.29195],[-68.47381,47.29229],[-68.46038,47.28149],[-68.43898,47.27777],[-68.37229,47.2825],[-68.3703,47.34796],[-68.33173,47.35822],[-68.29664,47.352],[-68.2399,47.34897],[-68.0906,47.26798],[-68.00002,47.21223],[-67.96344,47.19753],[-67.93582,47.15947],[-67.88619,47.10424],[-67.80218,47.06386],[-67.79415,45.93923],[-67.82753,45.8489],[-67.82753,45.6704],[-67.54943,45.57445],[-67.45302,45.58742],[-67.44189,45.52251],[-67.54201,45.49393],[-67.4456,45.38726],[-67.51605,45.29343],[-67.38257,45.11839],[-67.3047,45.11316],[-67.26762,45.18116],[-67.12671,45.09484],[-66.94835,44.78406],[-66.52283,43.61294],[-65.02339,42.10691],[-42.53366,47.50263],[-75.90901,77.3176],[-71.86482,78.7359],[-67.20011,80.66812],[-66.20727,80.78637],[-54.82473,83.07464],[-57.62518,85.04043],[-106.7949,85.04625],[-141.3957,79.2514],[-141.0678,60.2442]]]},{id:"capela_al",name:"Capela AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Capela&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.03321,-9.45741],[-36.03322,-9.45581],[-36.03336,-9.45483],[-36.0334,-9.45291],[-36.03327,-9.45141],[-36.03336,-9.44287],[-36.0335,-9.43821],[-36.03353,-9.42881],[-36.03363,-9.42027],[-36.03389,-9.41091],[-36.03389,-9.40032],[-36.03401,-9.3888],[-36.03413,-9.38528],[-36.03428,-9.38265],[-36.03417,-9.37849],[-36.03444,-9.36688],[-36.05246,-9.3671],[-36.05791,-9.36711],[-36.0716,-9.36727],[-36.08622,-9.36731],[-36.103,-9.3675],[-36.11652,-9.36755],[-36.12515,-9.36768],[-36.12522,-9.37473],[-36.12521,-9.37721],[-36.12511,-9.38038],[-36.12514,-9.38529],[-36.12505,-9.39026],[-36.12504,-9.39477],[-36.12506,-9.40172],[-36.12499,-9.40382],[-36.1248,-9.40679],[-36.12463,-9.41123],[-36.12474,-9.4136],[-36.12456,-9.4163],[-36.12459,-9.42461],[-36.12466,-9.42691],[-36.12465,-9.42925],[-36.12457,-9.4297],[-36.12464,-9.43538],[-36.12438,-9.44109],[-36.12446,-9.44387],[-36.12452,-9.44579],[-36.12438,-9.44736],[-36.12448,-9.44856],[-36.12448,-9.45095],[-36.12436,-9.45392],[-36.12434,-9.45791],[-36.11758,-9.45783],[-36.1089,-9.45778],[-36.10419,-9.4578],[-36.10116,-9.45773],[-36.0953,-9.45773],[-36.08461,-9.45767],[-36.07361,-9.45757],[-36.05726,-9.45741],[-36.04816,-9.45747],[-36.04177,-9.45739],[-36.03767,-9.45739],[-36.03321,-9.45741]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"COS2010_v1.0",name:"Carta de Uso do Solo 2010 (WMS)",type:"wms",template:"http://mapas.dgterritorio.pt/wms-inspire/cos2010v1?language=por&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=COS2010_v1.0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2010-01-01T00:00:00.000Z",startDate:"2010-01-01T00:00:00.000Z",zoomExtent:[14,18],polygon:[[[-7.31278,36.98391],[-7.44461,37.5718],[-7.1933,37.97019],[-6.97357,38.00807],[-6.90628,38.24142],[-7.06627,38.20743],[-7.27158,38.45628],[-7.20429,38.72356],[-7.0134,38.85468],[-6.91315,39.03839],[-6.97357,39.13113],[-7.17957,39.23651],[-7.28668,39.48497],[-7.44873,39.61838],[-7.34162,39.60886],[-6.99692,39.64906],[-6.81839,40.0192],[-7.01065,40.19986],[-6.85272,40.24285],[-6.76209,40.35073],[-6.77994,40.8886],[-6.88637,41.01151],[-6.79642,41.01721],[-6.63849,41.21689],[-6.4531,41.24116],[-6.29311,41.38763],[-6.15715,41.5908],[-6.31165,41.68932],[-6.51215,41.71188],[-6.49841,41.88081],[-6.56296,41.97991],[-6.80191,42.00951],[-7.20497,42.00135],[-7.22763,41.8849],[-7.36908,41.87058],[-7.72751,41.92885],[-7.92526,41.94009],[-8.07907,41.84706],[-8.1601,41.91812],[-8.01796,42.05031],[-8.19924,42.18681],[-8.39356,42.1023],[-8.66066,42.07886],[-8.88382,41.88081],[-9.17084,41.86956],[-9.04175,41.43655],[-9.01978,40.65981],[-9.15711,40.26695],[-9.81903,39.52099],[-9.74213,38.6512],[-9.12964,37.88136],[-9.27246,36.99378],[-9.09394,36.68604],[-7.80579,36.74989],[-7.31278,36.98391]]],terms_url:"http://www.dgterritorio.pt/dados_abertos/cos/",terms_text:"Direcção-Geral do Território",icon:"http://www.igeo.pt/favicon.ico"},{id:"Cartoriviera-2012",name:"Cartoriviera - Orthophoto 2012",type:"tms",template:"http://osmdata.asitvd.ch/tiles/cartoriviera2012/{zoom}/{x}/{y}.png",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",zoomExtent:[14,20],polygon:[[[7.02235,46.42856],[7.0224,46.42045],[7.02176,46.41955],[7.02225,46.41954],[7.02161,46.41749],[7.02242,46.4174],[7.02242,46.41681],[7.02113,46.41443],[7.02164,46.41259],[7.0216,46.41188],[7.01918,46.41055],[7.01896,46.41004],[7.01757,46.40826],[7.01426,46.40696],[7.00948,46.40695],[7.00952,46.40451],[7.00368,46.40153],[6.97052,46.40139],[6.97056,46.39354],[6.96507,46.38333],[6.89379,46.383],[6.89327,46.39209],[6.8968,46.4],[6.89678,46.40097],[6.89395,46.401],[6.89768,46.40888],[6.89246,46.41386],[6.89237,46.41807],[6.8949,46.4193],[6.89285,46.41948],[6.89395,46.42312],[6.89225,46.42339],[6.89219,46.42802],[6.88743,46.428],[6.87652,46.43163],[6.86624,46.43633],[6.84003,46.44591],[6.83504,46.44934],[6.827,46.45204],[6.82695,46.45379],[6.81953,46.45655],[6.80361,46.45993],[6.78775,46.46253],[6.78697,46.5246],[6.82604,46.5248],[6.82609,46.52662],[6.83907,46.5267],[6.83888,46.55006],[6.90658,46.55042],[6.912,46.54301],[6.91083,46.53983],[6.90979,46.53512],[6.90931,46.53517],[6.90867,46.53373],[6.91195,46.53297],[6.91335,46.53604],[6.9268,46.53364],[6.92723,46.5349],[6.93714,46.53311],[6.93691,46.5327],[6.94028,46.53196],[6.94164,46.53477],[6.94309,46.53455],[6.94345,46.53528],[6.95641,46.53003],[6.95632,46.52733],[6.95111,46.52725],[6.95301,46.52611],[6.94341,46.52605],[6.94343,46.52546],[7.01629,46.52568],[7.02158,46.52211],[7.02196,46.47355],[7.07099,46.47368],[7.07402,46.4719],[7.07383,46.4326],[7.05947,46.43233],[7.05278,46.42879],[7.02235,46.42856]]],terms_url:"https://map.cartoriviera.ch/?baselayer_ref=orthos_2012_mobile&baselayer_opacity=100",terms_text:"Cartoriviera"},{id:"Catastro-Spain",name:"Catastro Spain",type:"wms",template:"http://ovc.catastro.meh.es/Cartografia/WMS/ServidorWMS.aspx?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=Catastro&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-17.88463,28.44606],[-17.89395,28.52255],[-18.02125,28.74819],[-18.02241,28.80384],[-17.9424,28.87261],[-17.89118,28.87371],[-17.89033,28.85151],[-17.76759,28.85378],[-17.76698,28.83122],[-17.74127,28.832],[-17.73949,28.76422],[-17.71398,28.76497],[-17.71293,28.73037],[-17.75744,28.69318],[-17.75708,28.67413],[-17.74579,28.67435],[-17.74573,28.61656],[-17.75197,28.58337],[-17.76225,28.5592],[-17.78331,28.54167],[-17.78316,28.49366],[-17.80861,28.4925],[-17.80601,28.4469],[-17.88463,28.44606]],[[-18.1661,27.78516],[-18.16349,27.69492],[-18.08898,27.69634],[-18.08734,27.67387],[-18.03641,27.67537],[-18.03501,27.63026],[-17.959,27.6324],[-17.86033,27.7926],[-17.86303,27.83688],[-17.8884,27.83649],[-17.88913,27.85905],[-17.99065,27.85675],[-18.03868,27.76558],[-18.11464,27.76379],[-18.11546,27.78636],[-18.1661,27.78516]],[[-17.36038,28.06398],[-17.36297,28.17572],[-17.33756,28.17637],[-17.33846,28.2213],[-17.18579,28.22388],[-17.08208,28.13518],[-17.08084,28.068],[-17.13154,28.06681],[-17.15633,28.02146],[-17.23211,28.02037],[-17.23199,27.99804],[-17.25768,27.99784],[-17.25785,28.01997],[-17.30867,28.01923],[-17.36038,28.06398]],[[-16.92782,28.32758],[-16.92866,28.37219],[-16.87767,28.37293],[-16.87807,28.39542],[-16.52143,28.42261],[-16.44571,28.49113],[-16.44625,28.53597],[-16.42059,28.53627],[-16.42092,28.55884],[-16.34433,28.55976],[-16.3446,28.58221],[-16.19125,28.58372],[-16.19162,28.60684],[-16.12793,28.60782],[-16.1278,28.59218],[-16.09951,28.5925],[-16.09934,28.51638],[-16.16481,28.51612],[-16.16475,28.49386],[-16.23858,28.44847],[-16.26535,28.44761],[-16.26586,28.403],[-16.31675,28.40176],[-16.31631,28.38019],[-16.34208,28.37951],[-16.34083,28.2893],[-16.41584,28.19761],[-16.4151,28.13113],[-16.51533,28.01648],[-16.61684,28.01532],[-16.61681,27.99305],[-16.71842,27.99192],[-16.7191,28.03714],[-16.7447,28.03679],[-16.74534,28.08181],[-16.7707,28.08161],[-16.8224,28.1259],[-16.82317,28.17087],[-16.8487,28.17075],[-16.85028,28.26079],[-16.87565,28.26055],[-16.87608,28.28322],[-16.90151,28.28277],[-16.90239,28.32793],[-16.92782,28.32758]],[[-15.85374,27.90089],[-15.8542,27.99018],[-15.82895,27.99066],[-15.82911,28.03558],[-15.7783,28.03632],[-15.75328,28.08143],[-15.72788,28.08157],[-15.72826,28.17186],[-15.49897,28.1728],[-15.49874,28.15041],[-15.44978,28.15075],[-15.45016,28.19614],[-15.39728,28.19614],[-15.39644,28.03836],[-15.37103,28.03802],[-15.37065,28.01532],[-15.34578,28.01532],[-15.34548,27.92544],[-15.3708,27.92524],[-15.37057,27.83521],[-15.39598,27.83474],[-15.421,27.78797],[-15.47181,27.78939],[-15.47188,27.76665],[-15.52277,27.76678],[-15.54771,27.72161],[-15.62361,27.72134],[-15.62415,27.74199],[-15.70075,27.74335],[-15.80167,27.81105],[-15.85374,27.90089]],[[-14.52156,28.04678],[-14.52244,28.11841],[-14.41575,28.11561],[-14.21688,28.22788],[-14.21537,28.33903],[-14.16417,28.45283],[-14.11151,28.4748],[-14.03358,28.72267],[-13.95652,28.74494],[-13.95617,28.76659],[-13.82902,28.76643],[-13.82896,28.78798],[-13.80007,28.78793],[-13.8013,28.71899],[-13.82757,28.71935],[-13.82786,28.6518],[-13.80258,28.6519],[-13.80339,28.53842],[-13.82885,28.53847],[-13.83151,28.39702],[-13.91582,28.22414],[-13.98564,28.22357],[-14.03696,28.17958],[-14.13871,28.17999],[-14.13866,28.15791],[-14.21537,28.15781],[-14.21472,28.11189],[-14.29132,28.04524],[-14.33197,28.03687],[-14.44578,28.04698],[-14.44666,28.0658],[-14.49628,28.06826],[-14.49593,28.04585],[-14.52156,28.04678]],[[-13.80066,28.84566],[-13.80093,28.82311],[-13.77569,28.82305],[-13.69729,28.88982],[-13.69729,28.91277],[-13.60725,28.9118],[-13.43886,29.00024],[-13.43746,29.13513],[-13.4117,29.13499],[-13.41056,29.22298],[-13.45928,29.25559],[-13.45974,29.2942],[-13.50913,29.29456],[-13.51006,29.31635],[-13.56354,29.31729],[-13.56406,29.27138],[-13.53892,29.2712],[-13.53897,29.25004],[-13.56613,29.25013],[-13.5666,29.203],[-13.51565,29.20223],[-13.51565,29.18206],[-13.5398,29.18278],[-13.54089,29.13753],[-13.65782,29.13685],[-13.71322,29.09351],[-13.76634,29.09345],[-13.85025,29.01659],[-13.85182,28.98343],[-13.85244,28.91486],[-13.90131,28.89245],[-13.9024,28.84698],[-13.80066,28.84566]],[[1.64799,38.99907],[1.73217,38.99936],[1.73147,39.04417],[1.64895,39.04319],[1.64816,39.12764],[1.39486,39.12657],[1.39544,39.08642],[1.22811,39.08526],[1.22911,39.0029],[1.14487,39.0018],[1.14528,38.832],[1.31136,38.83316],[1.31219,38.79065],[1.39469,38.79162],[1.39519,38.75296],[1.31128,38.75193],[1.31259,38.62388],[1.6489,38.62511],[1.64807,38.71115],[1.58456,38.71012],[1.58116,38.70054],[1.54915,38.70028],[1.51972,38.70921],[1.50355,38.72532],[1.48133,38.91551],[1.55189,38.92544],[1.56673,38.95666],[1.64874,38.95833],[1.64799,38.99907]],[[2.54507,39.41667],[2.43933,39.41611],[2.43871,39.48469],[2.43902,39.49934],[2.31223,39.49934],[2.31192,39.54179],[2.22907,39.541],[2.22835,39.62606],[2.34601,39.62709],[2.92704,39.96016],[3.14566,39.96005],[3.14608,40.00198],[3.23139,40.00198],[3.23129,39.83292],[3.14823,39.83316],[3.14844,39.79357],[3.48148,39.79318],[3.48035,39.5959],[3.31506,39.47846],[3.31462,39.37855],[3.08302,39.24994],[2.97986,39.25015],[2.97904,39.3335],[2.72874,39.33342],[2.72885,39.45814],[2.64569,39.45774],[2.64538,39.49966],[2.54528,39.49942],[2.54507,39.41667]],[[3.81204,40.04344],[3.72908,40.0438],[3.72862,39.95842],[3.81266,39.9576],[3.81228,39.91644],[3.9609,39.91598],[4.19381,39.79131],[4.31503,39.79058],[4.31599,39.83293],[4.39874,39.83204],[4.39737,39.91858],[4.3158,39.91933],[4.31619,40.0434],[4.2319,40.04436],[4.23248,40.08478],[4.14915,40.08611],[4.14906,40.12552],[4.0628,40.12722],[4.06242,40.08499],[3.81287,40.08529],[3.81204,40.04344]],[[-8.89106,41.82289],[-9.1092,42.57511],[-9.03655,42.73066],[-9.08834,42.72696],[-9.14661,42.77503],[-9.21855,42.90163],[-9.2761,42.86051],[-9.30991,42.93113],[-9.27898,42.9822],[-9.30991,43.06004],[-9.25236,43.10417],[-9.2315,43.17032],[-9.14733,43.21018],[-9.06748,43.19916],[-9.03367,43.24267],[-8.99842,43.24477],[-8.99986,43.29558],[-8.93727,43.30553],[-8.92936,43.32699],[-8.8639,43.32908],[-8.87613,43.37407],[-8.82217,43.37354],[-8.78548,43.31914],[-8.70635,43.305],[-8.60996,43.3296],[-8.55097,43.32332],[-8.52435,43.3364],[-8.52507,43.36465],[-8.45745,43.39184],[-8.36105,43.41118],[-8.36033,43.46342],[-8.33444,43.57974],[-8.27761,43.57088],[-8.06467,43.72392],[-7.99921,43.7234],[-7.9172,43.78264],[-7.85605,43.79146],[-7.83591,43.73743],[-7.66284,43.80982],[-7.31889,43.67827],[-7.19975,43.58308],[-6.24882,43.6075],[-6.12293,43.57901],[-5.85204,43.6799],[-5.60363,43.57087],[-5.28553,43.56191],[-5.17875,43.49916],[-4.90899,43.48367],[-4.61562,43.4192],[-4.18399,43.42492],[-3.80295,43.51954],[-3.74,43.48693],[-3.56128,43.54236],[-3.1083,43.38163],[-2.93857,43.46246],[-2.74524,43.47551],[-2.30462,43.31706],[-1.9854,43.3563],[-1.85528,43.39725],[-1.7698,43.39644],[-1.77005,43.37605],[-1.71005,43.37569],[-1.71135,43.33125],[-1.72259,43.31318],[-1.68904,43.31291],[-1.68811,43.33413],[-1.64467,43.33372],[-1.64498,43.31332],[-1.60299,43.31295],[-1.60344,43.29266],[-1.56359,43.29212],[-1.56305,43.31338],[-1.47799,43.31284],[-1.36677,43.27614],[-1.35688,43.23815],[-1.37037,43.1713],[-1.44231,43.08336],[-1.41983,43.06036],[-1.37307,43.05117],[-1.36407,43.11159],[-1.30203,43.13522],[-1.23549,43.13325],[-1.27955,43.07744],[-1.19232,43.06496],[-1.00619,43.00778],[-0.94234,42.9749],[-0.7562,42.98213],[-0.71484,42.96108],[-0.69685,42.90314],[-0.55118,42.82207],[-0.50442,42.84845],[-0.42889,42.82009],[-0.31648,42.86558],[-0.14563,42.81086],[-0.03143,42.71249],[0.18618,42.7541],[0.30218,42.71777],[0.36422,42.74287],[0.44875,42.71447],[0.62769,42.7224],[0.64118,42.85767],[0.71492,42.88272],[0.9676,42.81811],[1.10878,42.79898],[1.17532,42.73429],[1.36326,42.74155],[1.41137,42.70939],[1.48061,42.71034],[1.4813,42.50107],[1.64436,42.50203],[1.64328,42.54245],[1.73041,42.54342],[1.73164,42.50118],[2.06386,42.50164],[2.06456,42.45902],[2.39693,42.45994],[2.39768,42.41784],[2.48048,42.41797],[2.48098,42.37594],[2.64479,42.37626],[2.64448,42.45924],[2.81133,42.45961],[2.81126,42.50104],[3.06388,42.50085],[3.06388,42.45915],[3.23078,42.45934],[3.23049,42.37644],[3.31415,42.37604],[3.31412,42.33399],[3.39785,42.33404],[3.39739,42.29009],[3.31389,42.29084],[3.31397,42.20702],[3.14759,42.2073],[3.14759,42.12606],[3.23055,42.126],[3.24668,41.95294],[3.19452,41.85589],[3.06054,41.76474],[2.78358,41.63718],[2.26293,41.42716],[2.16492,41.29893],[1.86008,41.22322],[1.3763,41.11627],[1.17937,41.04646],[1.08585,41.04849],[0.75854,40.81956],[0.9114,40.73376],[0.87813,40.67514],[0.66502,40.53587],[0.55801,40.55022],[0.43392,40.37576],[0.26756,40.19192],[0.16415,40.06472],[0.07513,40.01447],[0.01039,39.89522],[-0.09392,39.81169],[-0.18474,39.63117],[-0.29085,39.50363],[-0.28636,39.33343],[-0.18564,39.17746],[-0.21352,39.15585],[-0.11101,38.97222],[0.00949,38.88268],[0.12189,38.87218],[0.23429,38.79864],[0.25587,38.72642],[0.09581,38.61338],[-0.0022,38.60706],[-0.05705,38.52691],[-0.27197,38.47624],[-0.37987,38.39312],[-0.38347,38.33813],[-0.45091,38.33108],[-0.50487,38.28309],[-0.48238,38.19481],[-0.42933,38.16583],[-0.45451,38.14886],[-0.584,38.17219],[-0.61367,38.11986],[-0.63705,37.96122],[-0.68111,37.94562],[-0.73237,37.88107],[-0.72158,37.78306],[-0.68831,37.734],[-0.66415,37.62315],[-0.71939,37.58784],[-0.91963,37.53758],[-1.11071,37.51641],[-1.33832,37.52867],[-1.44089,37.39037],[-1.6767,37.27652],[-1.85408,36.91229],[-2.06835,36.69291],[-2.21588,36.66192],[-2.37219,36.78018],[-2.68129,36.65911],[-2.92015,36.66756],[-3.09402,36.71263],[-3.46108,36.65488],[-3.72804,36.69291],[-4.37435,36.66333],[-4.65712,36.44042],[-4.9188,36.45313],[-5.16995,36.35135],[-5.28411,36.19702],[-5.26809,36.12418],[-5.35248,36.12247],[-5.35161,36.04014],[-5.43658,36.03889],[-5.43532,36.00344],[-5.68886,36.00365],[-5.68996,36.04053],[-5.85506,36.03856],[-5.85668,36.12421],[-5.93848,36.12215],[-5.94003,36.16556],[-5.99834,36.1645],[-6.03573,36.1781],[-6.07752,36.22241],[-6.15061,36.28646],[-6.23154,36.37701],[-6.33585,36.53106],[-6.32146,36.58163],[-6.40419,36.6235],[-6.47433,36.74897],[-6.41588,36.79939],[-6.49052,36.91738],[-6.62989,37.0194],[-6.87448,37.10838],[-7.04264,37.18507],[-7.26474,37.18435],[-7.37535,37.15354],[-7.40832,37.16822],[-7.42029,37.21183],[-7.42492,37.23505],[-7.43805,37.2452],[-7.44597,37.33261],[-7.4481,37.39094],[-7.46963,37.40758],[-7.4647,37.45305],[-7.50197,37.51641],[-7.51916,37.52292],[-7.52196,37.57237],[-7.45013,37.66958],[-7.4249,37.75992],[-7.31666,37.83997],[-7.26833,37.98895],[-7.15368,38.01552],[-7.11771,38.05536],[-7.0143,38.02438],[-6.99632,38.10756],[-6.96147,38.20125],[-7.08062,38.15708],[-7.34027,38.44024],[-7.26383,38.73807],[-7.04352,38.87297],[-7.06151,38.90796],[-6.96934,39.01983],[-7.00081,39.08879],[-7.15368,39.09577],[-7.15255,39.16029],[-7.24472,39.19689],[-7.25596,39.28133],[-7.33689,39.35351],[-7.3279,39.45599],[-7.51449,39.58865],[-7.55271,39.67954],[-7.05027,39.67522],[-6.99519,39.81954],[-6.92213,39.87909],[-6.88616,40.02299],[-7.04128,40.13479],[-7.01767,40.26615],[-6.8086,40.34501],[-6.86818,40.44516],[-6.85356,40.60664],[-6.83783,40.87576],[-6.9536,41.03704],[-6.80186,41.03959],[-6.76814,41.13871],[-6.64112,41.26556],[-6.56244,41.26303],[-6.21737,41.5791],[-6.31628,41.64465],[-6.51523,41.64129],[-6.58717,41.68832],[-6.54783,41.85597],[-6.62988,41.91121],[-7.13345,41.94048],[-7.16829,41.87188],[-7.42569,41.78477],[-7.95398,41.84593],[-8.13045,41.78058],[-8.25185,41.90786],[-8.12933,42.03488],[-8.24848,42.1008],[-8.36762,42.05575],[-8.60704,42.03405],[-8.89106,41.82289]]]},{id:"Chorzow-buildings",name:"Chorzów: Buildings",type:"wms",template:"http://e-odgik.chorzow.eu/services/wms/wms_funkcje_bud/MapServer/WMSServer?FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=3,2,1,8,7,6&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[18.94562,50.31836],[18.94349,50.32385],[18.95466,50.32599],[18.96426,50.33307],[18.96521,50.33777],[18.98692,50.33621],[18.98468,50.32501],[18.99777,50.32204],[18.99686,50.31716],[18.98774,50.31736],[18.98695,50.30989],[18.99736,50.30031],[18.99744,50.29722],[19.00546,50.29548],[19.0073,50.28342],[19.00574,50.27871],[18.99236,50.27091],[18.96792,50.28661],[18.96215,50.27972],[18.96169,50.27337],[18.95824,50.27291],[18.95492,50.26193],[18.96014,50.24927],[18.95672,50.2452],[18.95555,50.23891],[18.94132,50.243],[18.93475,50.25314],[18.93324,50.26032],[18.93262,50.26588],[18.9296,50.26774],[18.92976,50.27131],[18.92669,50.27289],[18.92632,50.27623],[18.93071,50.27619],[18.93437,50.28729],[18.92383,50.29533],[18.92635,50.29986],[18.91905,50.30212],[18.91955,50.30576],[18.92463,50.31192],[18.9262,50.31883],[18.94562,50.31836]]],terms_text:"Urząd Miasta Chorzowa"},{id:"South_Africa-CapeTown-Aerial-2013",name:"City of Cape Town 2013 Aerial",type:"tms",template:"https://{switch:a,b,c}.coct.aerial.openstreetmap.org.za/layer/za_coct_aerial_2013/{zoom}/{x}/{y}.jpg",endDate:"2015-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",zoomExtent:[1,21],polygon:[[[18.44866,-33.89362],[18.44859,-33.90264],[18.4702,-33.90277],[18.48139,-33.84724],[18.44925,-33.80107],[18.42815,-33.73564],[18.43914,-33.71772],[18.40719,-33.65899],[18.33224,-33.57752],[18.33245,-33.55045],[18.354,-33.55059],[18.35425,-33.5236],[18.36524,-33.52366],[18.36503,-33.5148],[18.37601,-33.51477],[18.37605,-33.5058],[18.42966,-33.50594],[18.4297,-33.48785],[18.44049,-33.48789],[18.4406,-33.46988],[18.49437,-33.4701],[18.49433,-33.47916],[18.51583,-33.47917],[18.51574,-33.48819],[18.52647,-33.4883],[18.52632,-33.52435],[18.54793,-33.52443],[18.54795,-33.51539],[18.56937,-33.5155],[18.56937,-33.52448],[18.58012,-33.52453],[18.58007,-33.5426],[18.59078,-33.5426],[18.59074,-33.56064],[18.57995,-33.56053],[18.57988,-33.56962],[18.5907,-33.56962],[18.59065,-33.57868],[18.62301,-33.57873],[18.62292,-33.58773],[18.66597,-33.58789],[18.66593,-33.61493],[18.67672,-33.61497],[18.67658,-33.65103],[18.6873,-33.65102],[18.68734,-33.66004],[18.69807,-33.66009],[18.69807,-33.66907],[18.75204,-33.66925],[18.75208,-33.64219],[18.77364,-33.64225],[18.77371,-33.63319],[18.82746,-33.6333],[18.82752,-33.6603],[18.81667,-33.66029],[18.8166,-33.67832],[18.80581,-33.67831],[18.80581,-33.70539],[18.8274,-33.70544],[18.82733,-33.72347],[18.83812,-33.72343],[18.83804,-33.74139],[18.81652,-33.74137],[18.81637,-33.79551],[18.80559,-33.79551],[18.80551,-33.81357],[18.79476,-33.81355],[18.79472,-33.83154],[18.77311,-33.83152],[18.77313,-33.84052],[18.76236,-33.84052],[18.76227,-33.90359],[18.75146,-33.90352],[18.75108,-33.98478],[18.76191,-33.9848],[18.76178,-34.02988],[18.7726,-34.0299],[18.77258,-34.03891],[18.79403,-34.03894],[18.79388,-34.0407],[18.79845,-34.04119],[18.80324,-34.04118],[18.80341,-34.03892],[18.81594,-34.03897],[18.81634,-34.02993],[18.83798,-34.03165],[18.838,-34.03],[18.84842,-34.03001],[18.84847,-34.02185],[18.85993,-34.02347],[18.85986,-34.02101],[18.86827,-34.02208],[18.86819,-34.02117],[18.88546,-34.02343],[18.88518,-34.02132],[18.90252,-34.02103],[18.90258,-34.012],[18.91342,-34.012],[18.91348,-33.99396],[18.94588,-33.99403],[18.94586,-34.0031],[18.96743,-34.003],[18.96747,-34.01208],[18.97822,-34.01208],[18.97833,-34.02114],[18.98914,-34.02114],[18.98916,-34.03913],[19.00002,-34.03913],[19.00002,-34.05718],[19.01084,-34.05725],[19.01079,-34.08414],[19,-34.08413],[19.00002,-34.0932],[18.98915,-34.09317],[18.98918,-34.1022],[18.97832,-34.10218],[18.97832,-34.11123],[18.9675,-34.11121],[18.96749,-34.12925],[18.9566,-34.12924],[18.95656,-34.13824],[18.96742,-34.13831],[18.96742,-34.14732],[18.98918,-34.1473],[18.98918,-34.1653],[18.97827,-34.16529],[18.97832,-34.17429],[18.96742,-34.17427],[18.96746,-34.1833],[18.95656,-34.18332],[18.95656,-34.19236],[18.94574,-34.19232],[18.9457,-34.20132],[18.93487,-34.20137],[18.93489,-34.21933],[18.90236,-34.21935],[18.90176,-34.23626],[18.88784,-34.23735],[18.88942,-34.25541],[18.88059,-34.25534],[18.87927,-34.26443],[18.86969,-34.26441],[18.86971,-34.27344],[18.83714,-34.27342],[18.83712,-34.26438],[18.84802,-34.2644],[18.84803,-34.23739],[18.81549,-34.21028],[18.81565,-34.17413],[18.85488,-34.15627],[18.76176,-34.08405],[18.65337,-34.07748],[18.47974,-34.11012],[18.44637,-34.13423],[18.44445,-34.16409],[18.436,-34.16405],[18.43597,-34.18202],[18.44681,-34.18211],[18.44673,-34.19111],[18.46593,-34.19121],[18.48662,-34.24539],[18.47889,-34.25437],[18.486,-34.25437],[18.46771,-34.29941],[18.48922,-34.34458],[18.50011,-34.34458],[18.49992,-34.36262],[18.46743,-34.36251],[18.46737,-34.35349],[18.3916,-34.31707],[18.39177,-34.29002],[18.37016,-34.28087],[18.37068,-34.21789],[18.34923,-34.18162],[18.32747,-34.18149],[18.32767,-34.16346],[18.31187,-34.15438],[18.3114,-34.14353],[18.32367,-34.13469],[18.34993,-34.10421],[18.33932,-34.08828],[18.36125,-34.05972],[18.35505,-34.05538],[18.34275,-34.06433],[18.32,-34.06443],[18.29607,-34.04513],[18.30682,-34.02526],[18.32877,-34.0192],[18.32892,-34.00125],[18.33974,-34.00127],[18.3398,-33.98663],[18.36287,-33.97351],[18.36381,-33.92925],[18.37262,-33.92927],[18.37284,-33.91776],[18.39773,-33.89335],[18.44866,-33.89362]]],terms_url:"https://www.capetown.gov.za",terms_text:"City of Cape Town Aerial - OPENSTREETMAP USE ONLY",description:"OpenStreetMap use only. City of Cape Town Aerial ortho-photography of the municipal area. 12cm ground sample distance"},{id:"South_Africa-CapeTown-Aerial",name:"City of Cape Town 2015 Aerial",type:"tms",template:"https://{switch:a,b,c}.coct.aerial.openstreetmap.org.za/layer/za_coct_aerial_2015/{zoom}/{x}/{y}.jpg",endDate:"2016-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[1,21],polygon:[[[18.44866,-33.89362],[18.44859,-33.90264],[18.4702,-33.90277],[18.48139,-33.84724],[18.44925,-33.80107],[18.42815,-33.73564],[18.43914,-33.71772],[18.40719,-33.65899],[18.33224,-33.57752],[18.33245,-33.55045],[18.354,-33.55059],[18.35425,-33.5236],[18.36524,-33.52366],[18.36503,-33.5148],[18.37601,-33.51477],[18.37605,-33.5058],[18.42966,-33.50594],[18.4297,-33.48785],[18.44049,-33.48789],[18.4406,-33.46988],[18.49437,-33.4701],[18.49433,-33.47916],[18.51583,-33.47917],[18.51574,-33.48819],[18.52647,-33.4883],[18.52632,-33.52435],[18.54793,-33.52443],[18.54795,-33.51539],[18.56937,-33.5155],[18.56937,-33.52448],[18.58012,-33.52453],[18.58007,-33.5426],[18.59078,-33.5426],[18.59074,-33.56064],[18.57995,-33.56053],[18.57988,-33.56962],[18.5907,-33.56962],[18.59065,-33.57868],[18.62301,-33.57873],[18.62292,-33.58773],[18.66597,-33.58789],[18.66593,-33.61493],[18.67672,-33.61497],[18.67658,-33.65103],[18.6873,-33.65102],[18.68734,-33.66004],[18.69807,-33.66009],[18.69807,-33.66907],[18.75204,-33.66925],[18.75208,-33.64219],[18.77364,-33.64225],[18.77371,-33.63319],[18.82746,-33.6333],[18.82752,-33.6603],[18.81667,-33.66029],[18.8166,-33.67832],[18.80581,-33.67831],[18.80581,-33.70539],[18.8274,-33.70544],[18.82733,-33.72347],[18.83812,-33.72343],[18.83804,-33.74139],[18.81652,-33.74137],[18.81637,-33.79551],[18.80559,-33.79551],[18.80551,-33.81357],[18.79476,-33.81355],[18.79472,-33.83154],[18.77311,-33.83152],[18.77313,-33.84052],[18.76236,-33.84052],[18.76227,-33.90359],[18.75146,-33.90352],[18.75108,-33.98478],[18.76191,-33.9848],[18.76178,-34.02988],[18.7726,-34.0299],[18.77258,-34.03891],[18.79403,-34.03894],[18.79388,-34.0407],[18.79845,-34.04119],[18.80324,-34.04118],[18.80341,-34.03892],[18.81594,-34.03897],[18.81634,-34.02993],[18.83798,-34.03165],[18.838,-34.03],[18.84842,-34.03001],[18.84847,-34.02185],[18.85993,-34.02347],[18.85986,-34.02101],[18.86827,-34.02208],[18.86819,-34.02117],[18.88546,-34.02343],[18.88518,-34.02132],[18.90252,-34.02103],[18.90258,-34.012],[18.91342,-34.012],[18.91348,-33.99396],[18.94588,-33.99403],[18.94586,-34.0031],[18.96743,-34.003],[18.96747,-34.01208],[18.97822,-34.01208],[18.97833,-34.02114],[18.98914,-34.02114],[18.98916,-34.03913],[19.00002,-34.03913],[19.00002,-34.05718],[19.01084,-34.05725],[19.01079,-34.08414],[19,-34.08413],[19.00002,-34.0932],[18.98915,-34.09317],[18.98918,-34.1022],[18.97832,-34.10218],[18.97832,-34.11123],[18.9675,-34.11121],[18.96749,-34.12925],[18.9566,-34.12924],[18.95656,-34.13824],[18.96742,-34.13831],[18.96742,-34.14732],[18.98918,-34.1473],[18.98918,-34.1653],[18.97827,-34.16529],[18.97832,-34.17429],[18.96742,-34.17427],[18.96746,-34.1833],[18.95656,-34.18332],[18.95656,-34.19236],[18.94574,-34.19232],[18.9457,-34.20132],[18.93487,-34.20137],[18.93489,-34.21933],[18.90236,-34.21935],[18.90176,-34.23626],[18.88784,-34.23735],[18.88942,-34.25541],[18.88059,-34.25534],[18.87927,-34.26443],[18.86969,-34.26441],[18.86971,-34.27344],[18.83714,-34.27342],[18.83712,-34.26438],[18.84802,-34.2644],[18.84803,-34.23739],[18.81549,-34.21028],[18.81565,-34.17413],[18.85488,-34.15627],[18.76176,-34.08405],[18.65337,-34.07748],[18.47974,-34.11012],[18.44637,-34.13423],[18.44445,-34.16409],[18.436,-34.16405],[18.43597,-34.18202],[18.44681,-34.18211],[18.44673,-34.19111],[18.46593,-34.19121],[18.48662,-34.24539],[18.47889,-34.25437],[18.486,-34.25437],[18.46771,-34.29941],[18.48922,-34.34458],[18.50011,-34.34458],[18.49992,-34.36262],[18.46743,-34.36251],[18.46737,-34.35349],[18.3916,-34.31707],[18.39177,-34.29002],[18.37016,-34.28087],[18.37068,-34.21789],[18.34923,-34.18162],[18.32747,-34.18149],[18.32767,-34.16346],[18.31187,-34.15438],[18.3114,-34.14353],[18.32367,-34.13469],[18.34993,-34.10421],[18.33932,-34.08828],[18.36125,-34.05972],[18.35505,-34.05538],[18.34275,-34.06433],[18.32,-34.06443],[18.29607,-34.04513],[18.30682,-34.02526],[18.32877,-34.0192],[18.32892,-34.00125],[18.33974,-34.00127],[18.3398,-33.98663],[18.36287,-33.97351],[18.36381,-33.92925],[18.37262,-33.92927],[18.37284,-33.91776],[18.39773,-33.89335],[18.44866,-33.89362]]],terms_url:"https://www.capetown.gov.za",terms_text:"City of Cape Town Aerial - OPENSTREETMAP USE ONLY",best:true,description:"OpenStreetMap use only. City of Cape Town Aerial ortho-photography of the municipal area. 8cm ground sample distance"},{id:"City_of_Melbourne_May_2018",name:"City of Melbourne",type:"tms",template:"https://{switch:a,b,c,d}.tiles.mapbox.com/v4/openstreetmapau.gdbhzo3g/{zoom}/{x}/{y}.jpg?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcGF1IiwiYSI6ImNqbWl3bXZ6aDA0MTkzd21xdnV1d2k0azEifQ.HYkMOqH_E2fYd1b0oXRe6w",endDate:"2018-05-01T00:00:00.000Z",startDate:"2018-05-01T00:00:00.000Z",zoomExtent:[10,22],polygon:[[[144.9146,-37.79929],[144.9139,-37.79888],[144.91276,-37.79858],[144.91138,-37.79876],[144.90975,-37.79976],[144.90604,-37.80641],[144.90428,-37.81261],[144.9042,-37.81421],[144.90561,-37.82089],[144.90426,-37.82245],[144.89902,-37.82728],[144.89686,-37.83007],[144.89598,-37.83355],[144.89602,-37.83873],[144.89703,-37.84192],[144.90113,-37.84692],[144.9052,-37.85019],[144.90684,-37.85056],[144.90802,-37.8502],[144.9084,-37.84948],[144.90701,-37.84771],[144.90763,-37.84693],[144.90448,-37.84165],[144.90529,-37.84139],[144.90806,-37.8458],[144.91181,-37.8502],[144.91274,-37.85039],[144.91548,-37.84892],[144.91553,-37.84814],[144.91396,-37.84594],[144.91619,-37.84451],[144.91396,-37.84131],[144.91634,-37.83985],[144.91651,-37.83841],[144.91508,-37.83441],[144.91829,-37.83307],[144.91947,-37.83258],[144.92102,-37.83087],[144.92186,-37.83002],[144.92297,-37.8295],[144.92937,-37.82816],[144.93529,-37.82702],[144.94112,-37.82692],[144.94181,-37.82679],[144.94585,-37.8275],[144.94707,-37.82794],[144.94784,-37.82779],[144.95786,-37.82953],[144.95921,-37.82941],[144.9613,-37.82902],[144.96254,-37.82972],[144.96477,-37.83184],[144.96565,-37.83229],[144.96621,-37.83231],[144.97033,-37.83121],[144.97052,-37.83228],[144.97106,-37.83307],[144.97346,-37.83507],[144.97428,-37.83595],[144.97943,-37.85002],[144.97968,-37.85081],[144.98061,-37.85117],[144.98425,-37.85151],[144.98483,-37.85139],[144.98537,-37.85085],[144.98923,-37.83109],[144.98891,-37.83038],[144.99226,-37.81041],[144.99243,-37.80983],[144.99187,-37.80895],[144.97449,-37.80714],[144.97683,-37.79327],[144.97674,-37.7928],[144.97642,-37.79232],[144.97589,-37.79219],[144.96977,-37.79146],[144.97076,-37.78566],[144.97041,-37.785],[144.9699,-37.78477],[144.96488,-37.7842],[144.96511,-37.78252],[144.96507,-37.78198],[144.96421,-37.78142],[144.96398,-37.78082],[144.96389,-37.77964],[144.96355,-37.7785],[144.96267,-37.77779],[144.96136,-37.77724],[144.93919,-37.77456],[144.93836,-37.77458],[144.93801,-37.77485],[144.93728,-37.77601],[144.93658,-37.77692],[144.93613,-37.77728],[144.93598,-37.77791],[144.93778,-37.78142],[144.93827,-37.78421],[144.93911,-37.78654],[144.93885,-37.78672],[144.93881,-37.7873],[144.93773,-37.78801],[144.93216,-37.7874],[144.93123,-37.78783],[144.93076,-37.78786],[144.93003,-37.78735],[144.92181,-37.78642],[144.91488,-37.77938],[144.91428,-37.77865],[144.9137,-37.77853],[144.91293,-37.77855],[144.90819,-37.78135],[144.90722,-37.78206],[144.90572,-37.7845],[144.90529,-37.78637],[144.90428,-37.78657],[144.90375,-37.78718],[144.90319,-37.78827],[144.90201,-37.78883],[144.90143,-37.78964],[144.90188,-37.79103],[144.90257,-37.79198],[144.90415,-37.79288],[144.90645,-37.79383],[144.90814,-37.79456],[144.91046,-37.79519],[144.9127,-37.79605],[144.91429,-37.79695],[144.91525,-37.79783],[144.91539,-37.79815],[144.91531,-37.79848],[144.91518,-37.79872],[144.9148,-37.79914],[144.9146,-37.79929]]],terms_url:"https://data.melbourne.vic.gov.au/Property-Planning/2018-Aerial-Imagery-True-Ortho-/qa5h-sfgh",terms_text:"City of Melbourne",best:true,icon:"https://www.melbourne.vic.gov.au/_catalogs/masterpage/android-icon.png"},{id:"Zuerich-aerial_2011",name:"City of Zürich Orthophoto 2011",type:"wms",template:"https://www.gis.stadt-zuerich.ch/maps/services/wms/WMS-ZH-STZH-OGD/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Luftbild_2011&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2011-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[8.44624,47.44143],[8.63178,47.43968],[8.62895,47.31377],[8.44381,47.31555],[8.44624,47.44143]]],terms_text:"Stadt Zürich Open Government Data"},{id:"Zuerich-overview",name:"City of Zürich Overview map (Steets, buildings, house numbers)",type:"wms",template:"https://www.gis.stadt-zuerich.ch/maps/services/wms/WMS-ZH-STZH-OGD/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Uebersichtsplan&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,21],polygon:[[[8.45788,47.44582],[8.57392,47.44477],[8.57362,47.43124],[8.60266,47.43096],[8.6023,47.41746],[8.6318,47.41716],[8.6295,47.33628],[8.57162,47.33678],[8.57152,47.32292],[8.54236,47.3236],[8.54212,47.31013],[8.48418,47.31062],[8.48478,47.33762],[8.45582,47.33787],[8.45609,47.35135],[8.42713,47.35161],[8.42864,47.43259],[8.45745,47.43231],[8.45788,47.44582]]],terms_text:"Stadt Zürich Open Government Data"},{id:"Czech_CUZK-KM",name:"Czech CUZK:KM",type:"wms",template:"https://wms.cuzk.cz/wms.asp?service=WMS&VERSION=1.1.1&REQUEST=GetMap&SRS={proj}&LAYERS=parcelni_cisla_i,obrazy_parcel_i,RST_KMD_I,hranice_parcel_i,DEF_BUDOVY,RST_KN_I,dalsi_p_mapy_i,prehledka_kat_prac,prehledka_kat_uz,prehledka_kraju-linie&FORMAT=image/png&transparent=TRUE&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[15.00637,49.01774],[15.15599,49.00138],[15.1909,48.94246],[15.31059,48.98829],[15.40535,48.9752],[15.54,48.91624],[15.71456,48.86706],[15.83425,48.88018],[15.9689,48.81782],[16.0886,48.74553],[16.39781,48.74553],[16.48758,48.81454],[16.6721,48.7784],[16.68208,48.73566],[16.90152,48.71263],[16.9464,48.6237],[17.11597,48.83752],[17.21072,48.88018],[17.40523,48.81782],[17.48004,48.85393],[17.52991,48.81782],[17.70446,48.86706],[17.81418,48.9359],[17.884,48.9359],[17.94385,49.02101],[18.06354,49.03409],[18.1184,49.09944],[18.1982,49.30473],[18.38771,49.33399],[18.57723,49.50917],[18.75677,49.49946],[18.84654,49.52536],[18.87646,49.57066],[18.79666,49.69341],[18.64206,49.70954],[18.5872,49.83515],[18.61214,49.88338],[18.56226,49.93477],[18.51239,49.90587],[18.36277,49.95403],[18.32786,49.92193],[18.26303,49.97328],[18.1184,50.00534],[18.06354,50.07581],[17.91392,49.97969],[17.77927,50.03098],[17.71444,50.12379],[17.60472,50.16534],[17.75932,50.21962],[17.73438,50.34391],[17.63963,50.28021],[17.38029,50.28021],[17.35037,50.34391],[17.28055,50.33754],[17.18579,50.40752],[16.90152,50.46152],[16.86661,50.41388],[16.96635,50.31844],[17.03617,50.23238],[16.83668,50.21962],[16.712,50.1046],[16.58233,50.15895],[16.56238,50.23876],[16.43272,50.33754],[16.35292,50.39163],[16.27811,50.39163],[16.20829,50.44565],[16.39781,50.53449],[16.44768,50.59785],[16.35292,50.6706],[16.23821,50.67692],[16.21827,50.63266],[16.1285,50.68324],[16.0487,50.60734],[15.98885,50.7022],[15.87415,50.68324],[15.82926,50.76533],[15.72952,50.74324],[15.45023,50.81577],[15.39039,50.77479],[15.38041,50.85987],[15.29563,50.88504],[15.29563,50.98876],[15.17095,51.02014],[14.99141,51.00131],[15.00637,50.88819],[14.84179,50.8756],[14.7969,50.82522],[14.63233,50.85672],[14.66225,50.93536],[14.57248,50.92278],[14.61238,50.98562],[14.49767,51.04837],[14.41788,51.02328],[14.30816,51.06717],[14.2533,51.00445],[14.40291,50.93221],[14.37299,50.89763],[14.24332,50.90706],[14.20841,50.84412],[14.03386,50.81262],[13.979,50.82522],[13.90419,50.79686],[13.87427,50.74009],[13.53514,50.7243],[13.53015,50.65796],[13.4703,50.61367],[13.39051,50.66428],[13.32567,50.58835],[13.25086,50.61051],[13.196,50.50595],[13.05137,50.52181],[12.96659,50.4107],[12.82695,50.47105],[12.70227,50.41388],[12.50777,50.40116],[12.34319,50.25471],[12.32324,50.18451],[12.24843,50.27384],[12.17362,50.33118],[12.09881,50.33436],[12.11876,50.25152],[12.22349,50.16534],[12.20354,50.12379],[12.50278,49.97328],[12.47784,49.93798],[12.54766,49.91551],[12.46787,49.80298],[12.40802,49.76111],[12.48283,49.68696],[12.5327,49.68696],[12.51774,49.62885],[12.60751,49.54155],[12.67234,49.43788],[12.81199,49.34699],[12.94664,49.34374],[13.23091,49.12882],[13.32567,49.10597],[13.43539,49.0439],[13.41544,48.99484],[13.50022,48.94901],[13.56506,48.98829],[13.68475,48.88346],[13.7446,48.90313],[13.82439,48.77511],[13.8992,48.77511],[14.05879,48.67642],[14.04383,48.63029],[14.14358,48.59072],[14.37299,48.56103],[14.48271,48.65007],[14.57747,48.60721],[14.62734,48.63359],[14.70713,48.58083],[14.74703,48.70276],[14.81187,48.73895],[14.81685,48.79483],[14.98642,48.76525],[15.00637,49.01774]]],overlay:true},{id:"Czech_CUZK-KM-tms",name:"Czech CUZK:KM tiles proxy",type:"tms",template:"https://osm-{switch:a,b,c}.zby.cz/tiles_cuzk.php/{zoom}/{x}/{y}.png",zoomExtent:[13,18],polygon:[[[15.00637,49.01774],[15.15599,49.00138],[15.1909,48.94246],[15.31059,48.98829],[15.40535,48.9752],[15.54,48.91624],[15.71456,48.86706],[15.83425,48.88018],[15.9689,48.81782],[16.0886,48.74553],[16.39781,48.74553],[16.48758,48.81454],[16.6721,48.7784],[16.68208,48.73566],[16.90152,48.71263],[16.9464,48.6237],[17.11597,48.83752],[17.21072,48.88018],[17.40523,48.81782],[17.48004,48.85393],[17.52991,48.81782],[17.70446,48.86706],[17.81418,48.9359],[17.884,48.9359],[17.94385,49.02101],[18.06354,49.03409],[18.1184,49.09944],[18.1982,49.30473],[18.38771,49.33399],[18.57723,49.50917],[18.75677,49.49946],[18.84654,49.52536],[18.87646,49.57066],[18.79666,49.69341],[18.64206,49.70954],[18.5872,49.83515],[18.61214,49.88338],[18.56226,49.93477],[18.51239,49.90587],[18.36277,49.95403],[18.32786,49.92193],[18.26303,49.97328],[18.1184,50.00534],[18.06354,50.07581],[17.91392,49.97969],[17.77927,50.03098],[17.71444,50.12379],[17.60472,50.16534],[17.75932,50.21962],[17.73438,50.34391],[17.63963,50.28021],[17.38029,50.28021],[17.35037,50.34391],[17.28055,50.33754],[17.18579,50.40752],[16.90152,50.46152],[16.86661,50.41388],[16.96635,50.31844],[17.03617,50.23238],[16.83668,50.21962],[16.712,50.1046],[16.58233,50.15895],[16.56238,50.23876],[16.43272,50.33754],[16.35292,50.39163],[16.27811,50.39163],[16.20829,50.44565],[16.39781,50.53449],[16.44768,50.59785],[16.35292,50.6706],[16.23821,50.67692],[16.21827,50.63266],[16.1285,50.68324],[16.0487,50.60734],[15.98885,50.7022],[15.87415,50.68324],[15.82926,50.76533],[15.72952,50.74324],[15.45023,50.81577],[15.39039,50.77479],[15.38041,50.85987],[15.29563,50.88504],[15.29563,50.98876],[15.17095,51.02014],[14.99141,51.00131],[15.00637,50.88819],[14.84179,50.8756],[14.7969,50.82522],[14.63233,50.85672],[14.66225,50.93536],[14.57248,50.92278],[14.61238,50.98562],[14.49767,51.04837],[14.41788,51.02328],[14.30816,51.06717],[14.2533,51.00445],[14.40291,50.93221],[14.37299,50.89763],[14.24332,50.90706],[14.20841,50.84412],[14.03386,50.81262],[13.979,50.82522],[13.90419,50.79686],[13.87427,50.74009],[13.53514,50.7243],[13.53015,50.65796],[13.4703,50.61367],[13.39051,50.66428],[13.32567,50.58835],[13.25086,50.61051],[13.196,50.50595],[13.05137,50.52181],[12.96659,50.4107],[12.82695,50.47105],[12.70227,50.41388],[12.50777,50.40116],[12.34319,50.25471],[12.32324,50.18451],[12.24843,50.27384],[12.17362,50.33118],[12.09881,50.33436],[12.11876,50.25152],[12.22349,50.16534],[12.20354,50.12379],[12.50278,49.97328],[12.47784,49.93798],[12.54766,49.91551],[12.46787,49.80298],[12.40802,49.76111],[12.48283,49.68696],[12.5327,49.68696],[12.51774,49.62885],[12.60751,49.54155],[12.67234,49.43788],[12.81199,49.34699],[12.94664,49.34374],[13.23091,49.12882],[13.32567,49.10597],[13.43539,49.0439],[13.41544,48.99484],[13.50022,48.94901],[13.56506,48.98829],[13.68475,48.88346],[13.7446,48.90313],[13.82439,48.77511],[13.8992,48.77511],[14.05879,48.67642],[14.04383,48.63029],[14.14358,48.59072],[14.37299,48.56103],[14.48271,48.65007],[14.57747,48.60721],[14.62734,48.63359],[14.70713,48.58083],[14.74703,48.70276],[14.81187,48.73895],[14.81685,48.79483],[14.98642,48.76525],[15.00637,49.01774]]],overlay:true},{id:"Czech_pLPIS",name:"Czech pLPIS",type:"wms",template:"https://eagri.cz/public/app/wms/plpis.fcgi?FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=LPIS_FB4,LPIS_FB4_KOD&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&TRANSPARENT=true",projection:"EPSG:4326",polygon:[[[15.00637,49.01774],[15.15599,49.00138],[15.1909,48.94246],[15.31059,48.98829],[15.40535,48.9752],[15.54,48.91624],[15.71456,48.86706],[15.83425,48.88018],[15.9689,48.81782],[16.0886,48.74553],[16.39781,48.74553],[16.48758,48.81454],[16.6721,48.7784],[16.68208,48.73566],[16.90152,48.71263],[16.9464,48.6237],[17.11597,48.83752],[17.21072,48.88018],[17.40523,48.81782],[17.48004,48.85393],[17.52991,48.81782],[17.70446,48.86706],[17.81418,48.9359],[17.884,48.9359],[17.94385,49.02101],[18.06354,49.03409],[18.1184,49.09944],[18.1982,49.30473],[18.38771,49.33399],[18.57723,49.50917],[18.75677,49.49946],[18.84654,49.52536],[18.87646,49.57066],[18.79666,49.69341],[18.64206,49.70954],[18.5872,49.83515],[18.61214,49.88338],[18.56226,49.93477],[18.51239,49.90587],[18.36277,49.95403],[18.32786,49.92193],[18.26303,49.97328],[18.1184,50.00534],[18.06354,50.07581],[17.91392,49.97969],[17.77927,50.03098],[17.71444,50.12379],[17.60472,50.16534],[17.75932,50.21962],[17.73438,50.34391],[17.63963,50.28021],[17.38029,50.28021],[17.35037,50.34391],[17.28055,50.33754],[17.18579,50.40752],[16.90152,50.46152],[16.86661,50.41388],[16.96635,50.31844],[17.03617,50.23238],[16.83668,50.21962],[16.712,50.1046],[16.58233,50.15895],[16.56238,50.23876],[16.43272,50.33754],[16.35292,50.39163],[16.27811,50.39163],[16.20829,50.44565],[16.39781,50.53449],[16.44768,50.59785],[16.35292,50.6706],[16.23821,50.67692],[16.21827,50.63266],[16.1285,50.68324],[16.0487,50.60734],[15.98885,50.7022],[15.87415,50.68324],[15.82926,50.76533],[15.72952,50.74324],[15.45023,50.81577],[15.39039,50.77479],[15.38041,50.85987],[15.29563,50.88504],[15.29563,50.98876],[15.17095,51.02014],[14.99141,51.00131],[15.00637,50.88819],[14.84179,50.8756],[14.7969,50.82522],[14.63233,50.85672],[14.66225,50.93536],[14.57248,50.92278],[14.61238,50.98562],[14.49767,51.04837],[14.41788,51.02328],[14.30816,51.06717],[14.2533,51.00445],[14.40291,50.93221],[14.37299,50.89763],[14.24332,50.90706],[14.20841,50.84412],[14.03386,50.81262],[13.979,50.82522],[13.90419,50.79686],[13.87427,50.74009],[13.53514,50.7243],[13.53015,50.65796],[13.4703,50.61367],[13.39051,50.66428],[13.32567,50.58835],[13.25086,50.61051],[13.196,50.50595],[13.05137,50.52181],[12.96659,50.4107],[12.82695,50.47105],[12.70227,50.41388],[12.50777,50.40116],[12.34319,50.25471],[12.32324,50.18451],[12.24843,50.27384],[12.17362,50.33118],[12.09881,50.33436],[12.11876,50.25152],[12.22349,50.16534],[12.20354,50.12379],[12.50278,49.97328],[12.47784,49.93798],[12.54766,49.91551],[12.46787,49.80298],[12.40802,49.76111],[12.48283,49.68696],[12.5327,49.68696],[12.51774,49.62885],[12.60751,49.54155],[12.67234,49.43788],[12.81199,49.34699],[12.94664,49.34374],[13.23091,49.12882],[13.32567,49.10597],[13.43539,49.0439],[13.41544,48.99484],[13.50022,48.94901],[13.56506,48.98829],[13.68475,48.88346],[13.7446,48.90313],[13.82439,48.77511],[13.8992,48.77511],[14.05879,48.67642],[14.04383,48.63029],[14.14358,48.59072],[14.37299,48.56103],[14.48271,48.65007],[14.57747,48.60721],[14.62734,48.63359],[14.70713,48.58083],[14.74703,48.70276],[14.81187,48.73895],[14.81685,48.79483],[14.98642,48.76525],[15.00637,49.01774]]]},{id:"Czech_RUIAN-budovy",name:"Czech RUIAN budovy",type:"tms",template:"https://tile.poloha.net/budovy/{zoom}/{x}/{y}.png",zoomExtent:[12,20],polygon:[[[15.00637,49.01774],[15.15599,49.00138],[15.1909,48.94246],[15.31059,48.98829],[15.40535,48.9752],[15.54,48.91624],[15.71456,48.86706],[15.83425,48.88018],[15.9689,48.81782],[16.0886,48.74553],[16.39781,48.74553],[16.48758,48.81454],[16.6721,48.7784],[16.68208,48.73566],[16.90152,48.71263],[16.9464,48.6237],[17.11597,48.83752],[17.21072,48.88018],[17.40523,48.81782],[17.48004,48.85393],[17.52991,48.81782],[17.70446,48.86706],[17.81418,48.9359],[17.884,48.9359],[17.94385,49.02101],[18.06354,49.03409],[18.1184,49.09944],[18.1982,49.30473],[18.38771,49.33399],[18.57723,49.50917],[18.75677,49.49946],[18.84654,49.52536],[18.87646,49.57066],[18.79666,49.69341],[18.64206,49.70954],[18.5872,49.83515],[18.61214,49.88338],[18.56226,49.93477],[18.51239,49.90587],[18.36277,49.95403],[18.32786,49.92193],[18.26303,49.97328],[18.1184,50.00534],[18.06354,50.07581],[17.91392,49.97969],[17.77927,50.03098],[17.71444,50.12379],[17.60472,50.16534],[17.75932,50.21962],[17.73438,50.34391],[17.63963,50.28021],[17.38029,50.28021],[17.35037,50.34391],[17.28055,50.33754],[17.18579,50.40752],[16.90152,50.46152],[16.86661,50.41388],[16.96635,50.31844],[17.03617,50.23238],[16.83668,50.21962],[16.712,50.1046],[16.58233,50.15895],[16.56238,50.23876],[16.43272,50.33754],[16.35292,50.39163],[16.27811,50.39163],[16.20829,50.44565],[16.39781,50.53449],[16.44768,50.59785],[16.35292,50.6706],[16.23821,50.67692],[16.21827,50.63266],[16.1285,50.68324],[16.0487,50.60734],[15.98885,50.7022],[15.87415,50.68324],[15.82926,50.76533],[15.72952,50.74324],[15.45023,50.81577],[15.39039,50.77479],[15.38041,50.85987],[15.29563,50.88504],[15.29563,50.98876],[15.17095,51.02014],[14.99141,51.00131],[15.00637,50.88819],[14.84179,50.8756],[14.7969,50.82522],[14.63233,50.85672],[14.66225,50.93536],[14.57248,50.92278],[14.61238,50.98562],[14.49767,51.04837],[14.41788,51.02328],[14.30816,51.06717],[14.2533,51.00445],[14.40291,50.93221],[14.37299,50.89763],[14.24332,50.90706],[14.20841,50.84412],[14.03386,50.81262],[13.979,50.82522],[13.90419,50.79686],[13.87427,50.74009],[13.53514,50.7243],[13.53015,50.65796],[13.4703,50.61367],[13.39051,50.66428],[13.32567,50.58835],[13.25086,50.61051],[13.196,50.50595],[13.05137,50.52181],[12.96659,50.4107],[12.82695,50.47105],[12.70227,50.41388],[12.50777,50.40116],[12.34319,50.25471],[12.32324,50.18451],[12.24843,50.27384],[12.17362,50.33118],[12.09881,50.33436],[12.11876,50.25152],[12.22349,50.16534],[12.20354,50.12379],[12.50278,49.97328],[12.47784,49.93798],[12.54766,49.91551],[12.46787,49.80298],[12.40802,49.76111],[12.48283,49.68696],[12.5327,49.68696],[12.51774,49.62885],[12.60751,49.54155],[12.67234,49.43788],[12.81199,49.34699],[12.94664,49.34374],[13.23091,49.12882],[13.32567,49.10597],[13.43539,49.0439],[13.41544,48.99484],[13.50022,48.94901],[13.56506,48.98829],[13.68475,48.88346],[13.7446,48.90313],[13.82439,48.77511],[13.8992,48.77511],[14.05879,48.67642],[14.04383,48.63029],[14.14358,48.59072],[14.37299,48.56103],[14.48271,48.65007],[14.57747,48.60721],[14.62734,48.63359],[14.70713,48.58083],[14.74703,48.70276],[14.81187,48.73895],[14.81685,48.79483],[14.98642,48.76525],[15.00637,49.01774]]],terms_url:"https://poloha.net/",terms_text:"Czech RUIAN"},{id:"Czech_RUIAN-parcely",name:"Czech RUIAN parcely",type:"tms",template:"https://tile.poloha.net/parcely/{zoom}/{x}/{y}.png",zoomExtent:[12,20],polygon:[[[15.00637,49.01774],[15.15599,49.00138],[15.1909,48.94246],[15.31059,48.98829],[15.40535,48.9752],[15.54,48.91624],[15.71456,48.86706],[15.83425,48.88018],[15.9689,48.81782],[16.0886,48.74553],[16.39781,48.74553],[16.48758,48.81454],[16.6721,48.7784],[16.68208,48.73566],[16.90152,48.71263],[16.9464,48.6237],[17.11597,48.83752],[17.21072,48.88018],[17.40523,48.81782],[17.48004,48.85393],[17.52991,48.81782],[17.70446,48.86706],[17.81418,48.9359],[17.884,48.9359],[17.94385,49.02101],[18.06354,49.03409],[18.1184,49.09944],[18.1982,49.30473],[18.38771,49.33399],[18.57723,49.50917],[18.75677,49.49946],[18.84654,49.52536],[18.87646,49.57066],[18.79666,49.69341],[18.64206,49.70954],[18.5872,49.83515],[18.61214,49.88338],[18.56226,49.93477],[18.51239,49.90587],[18.36277,49.95403],[18.32786,49.92193],[18.26303,49.97328],[18.1184,50.00534],[18.06354,50.07581],[17.91392,49.97969],[17.77927,50.03098],[17.71444,50.12379],[17.60472,50.16534],[17.75932,50.21962],[17.73438,50.34391],[17.63963,50.28021],[17.38029,50.28021],[17.35037,50.34391],[17.28055,50.33754],[17.18579,50.40752],[16.90152,50.46152],[16.86661,50.41388],[16.96635,50.31844],[17.03617,50.23238],[16.83668,50.21962],[16.712,50.1046],[16.58233,50.15895],[16.56238,50.23876],[16.43272,50.33754],[16.35292,50.39163],[16.27811,50.39163],[16.20829,50.44565],[16.39781,50.53449],[16.44768,50.59785],[16.35292,50.6706],[16.23821,50.67692],[16.21827,50.63266],[16.1285,50.68324],[16.0487,50.60734],[15.98885,50.7022],[15.87415,50.68324],[15.82926,50.76533],[15.72952,50.74324],[15.45023,50.81577],[15.39039,50.77479],[15.38041,50.85987],[15.29563,50.88504],[15.29563,50.98876],[15.17095,51.02014],[14.99141,51.00131],[15.00637,50.88819],[14.84179,50.8756],[14.7969,50.82522],[14.63233,50.85672],[14.66225,50.93536],[14.57248,50.92278],[14.61238,50.98562],[14.49767,51.04837],[14.41788,51.02328],[14.30816,51.06717],[14.2533,51.00445],[14.40291,50.93221],[14.37299,50.89763],[14.24332,50.90706],[14.20841,50.84412],[14.03386,50.81262],[13.979,50.82522],[13.90419,50.79686],[13.87427,50.74009],[13.53514,50.7243],[13.53015,50.65796],[13.4703,50.61367],[13.39051,50.66428],[13.32567,50.58835],[13.25086,50.61051],[13.196,50.50595],[13.05137,50.52181],[12.96659,50.4107],[12.82695,50.47105],[12.70227,50.41388],[12.50777,50.40116],[12.34319,50.25471],[12.32324,50.18451],[12.24843,50.27384],[12.17362,50.33118],[12.09881,50.33436],[12.11876,50.25152],[12.22349,50.16534],[12.20354,50.12379],[12.50278,49.97328],[12.47784,49.93798],[12.54766,49.91551],[12.46787,49.80298],[12.40802,49.76111],[12.48283,49.68696],[12.5327,49.68696],[12.51774,49.62885],[12.60751,49.54155],[12.67234,49.43788],[12.81199,49.34699],[12.94664,49.34374],[13.23091,49.12882],[13.32567,49.10597],[13.43539,49.0439],[13.41544,48.99484],[13.50022,48.94901],[13.56506,48.98829],[13.68475,48.88346],[13.7446,48.90313],[13.82439,48.77511],[13.8992,48.77511],[14.05879,48.67642],[14.04383,48.63029],[14.14358,48.59072],[14.37299,48.56103],[14.48271,48.65007],[14.57747,48.60721],[14.62734,48.63359],[14.70713,48.58083],[14.74703,48.70276],[14.81187,48.73895],[14.81685,48.79483],[14.98642,48.76525],[15.00637,49.01774]]],terms_url:"https://poloha.net/",terms_text:"Czech RUIAN"},{id:"Czestochowa-buildings",name:"Częstochowa: Buildings",type:"wms",template:"http://geoportal.czestochowa.um.gov.pl/isdp/scripts/isdp.dll/wms?FORMAT=image/png&transparent=true&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ieg_budynek&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[19.08183,50.8554],[19.0888,50.86563],[19.11082,50.86616],[19.10961,50.86092],[19.11709,50.85933],[19.11531,50.86283],[19.11997,50.86327],[19.1227,50.85452],[19.12938,50.85519],[19.12566,50.86165],[19.13364,50.86147],[19.14318,50.86815],[19.1498,50.87916],[19.16507,50.8794],[19.16816,50.88501],[19.17265,50.88477],[19.18346,50.87706],[19.18084,50.86562],[19.18711,50.84712],[19.19973,50.84395],[19.19637,50.83678],[19.19358,50.83357],[19.19454,50.83145],[19.20696,50.82985],[19.20838,50.82484],[19.21831,50.82571],[19.22564,50.82475],[19.23075,50.82509],[19.2308,50.82666],[19.23351,50.82683],[19.23303,50.82335],[19.21868,50.80115],[19.21753,50.79272],[19.22592,50.78822],[19.20889,50.77561],[19.19891,50.76355],[19.19521,50.75182],[19.19074,50.75211],[19.18245,50.7545],[19.16504,50.7535],[19.16417,50.75586],[19.14559,50.75805],[19.14282,50.75543],[19.13021,50.75786],[19.127,50.75314],[19.1216,50.75363],[19.12066,50.74981],[19.10348,50.75228],[19.09598,50.75201],[19.0956,50.74912],[19.09351,50.7488],[19.09285,50.75027],[19.08442,50.74986],[19.08473,50.74349],[19.08382,50.73741],[19.07878,50.73668],[19.07503,50.73465],[19.07284,50.73708],[19.07153,50.74042],[19.0685,50.74339],[19.06632,50.74233],[19.06392,50.74554],[19.06595,50.7466],[19.06548,50.7496],[19.06202,50.75041],[19.06018,50.74455],[19.04257,50.74466],[19.0333,50.74827],[19.01869,50.76252],[19.01554,50.77044],[19.01101,50.7718],[19.01353,50.77766],[19.01159,50.78077],[19.01081,50.78759],[19.01362,50.79262],[19.01972,50.79555],[19.01896,50.80703],[19.03439,50.80116],[19.03453,50.804],[19.02593,50.80731],[19.02308,50.81499],[19.03154,50.81614],[19.02909,50.82435],[19.03787,50.82584],[19.03921,50.84083],[19.04676,50.84934],[19.05993,50.8532],[19.06209,50.8596],[19.06492,50.86134],[19.08183,50.8554]]],terms_text:"Urząd Miasta Częstochowy"},{id:"Duna_2013",name:"Danube flood orthophoto 2013",type:"tms",template:"http://e.tile.openstreetmap.hu/dunai-arviz-2013/{zoom}/{x}/{y}.jpg",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",zoomExtent:[10,20],polygon:[[[19.07732,47.69597],[19.07799,47.69598],[19.09462,47.69446],[19.08056,47.59587],[19.07434,47.58909],[19.07952,47.58883],[19.07717,47.57241],[19.05779,47.57209],[19.07732,47.69597]]],terms_url:"http://fototerkep.hu",terms_text:"Fotótérkép.hu",description:"Riverbank of Danube at Budapest, Szentendre and Szigetmonostor"},{id:"Delaware2012Orthophotography",name:"Delaware 2012 Orthophotography",type:"wms",template:"https://firstmap.delaware.gov/arcgis/services/DE_Imagery/DE_Imagery_2012/ImageServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",polygon:[[[-75.01771,38.45189],[-75.74174,38.44996],[-75.807,39.73907],[-75.75559,39.80106],[-75.64692,39.85638],[-75.47115,39.84646],[-75.37726,39.81478],[-75.48746,39.67181],[-75.50901,39.43446],[-75.39327,39.27784],[-75.30707,39.01667],[-75.19317,38.82219],[-75.05341,38.80876],[-75.01771,38.45189]]],terms_url:"https://firstmap.delaware.gov/arcgis/rest/services/DE_Imagery/DE_Imagery_2012/ImageServer",terms_text:"Digital Aerial Solutions, LLC",description:"This data set consists of 0.3-meter pixel resolution (approximately 1-foot), 4-band true color and near infrared (R, G, B, IR) orthoimages covering New Castle, Kent and Sussex Counties in Delaware."},{id:"Delaware2017Orthophotography",name:"Delaware 2017 Orthophotography",type:"wms",template:"https://firstmap.delaware.gov/arcgis/services/DE_Imagery/DE_Imagery_2017/ImageServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2017-01-01T00:00:00.000Z",startDate:"2017-01-01T00:00:00.000Z",polygon:[[[-75.01771,38.45189],[-75.74174,38.44996],[-75.807,39.73907],[-75.75559,39.80106],[-75.64692,39.85638],[-75.47115,39.84646],[-75.37726,39.81478],[-75.48746,39.67181],[-75.50901,39.43446],[-75.39327,39.27784],[-75.30707,39.01667],[-75.19317,38.82219],[-75.05341,38.80876],[-75.01771,38.45189]]],terms_url:"https://firstmap.delaware.gov/arcgis/rest/services/DE_Imagery/DE_Imagery_2017/ImageServer",terms_text:"Digital Aerial Solutions, LLC",description:"This data set consists of 0.3-meter pixel resolution (approximately 1-foot), 4-band true color and near infrared (R, G, B, IR) orthoimages covering New Castle, Kent and Sussex Counties in Delaware."},{id:"delmiro_gouveia",name:"Delmiro Gouveia AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Delmiro%20Gouveia&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-37.94962,-9.42957],[-37.94834,-9.33972],[-38.03903,-9.33834],[-38.04034,-9.42846],[-37.94962,-9.42957]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"der-es",name:"DER-ES",type:"wms",template:"http://portal.der.es.gov.br/geoserver/wms?SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=deres-ext:TRECHOINFO&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-40.94577,-21.31404],[-40.6231,-20.86278],[-40.38882,-20.65177],[-40.22209,-20.29831],[-39.80383,-19.66412],[-39.69603,-19.42573],[-39.67304,-19.30437],[-39.70538,-18.61384],[-39.65292,-18.33096],[-40.22281,-17.97587],[-40.34282,-17.9198],[-40.45278,-17.91502],[-40.46499,-17.92049],[-40.48368,-17.90408],[-40.50164,-17.90681],[-40.51602,-17.88903],[-40.53326,-17.88903],[-40.54548,-17.90134],[-40.58932,-17.91502],[-40.58932,-17.93211],[-40.61519,-17.93416],[-40.62956,-17.9868],[-40.64609,-17.9868],[-40.65903,-18.00731],[-40.68777,-18.00594],[-40.70574,-18.01756],[-40.71365,-18.00184],[-40.72155,-17.99774],[-40.75102,-18.00252],[-40.76754,-17.99842],[-40.76754,-17.98133],[-40.80923,-17.94852],[-40.82432,-17.96014],[-40.83151,-17.94989],[-40.86528,-17.9827],[-40.88397,-17.96766],[-40.90912,-17.98475],[-40.77761,-18.10775],[-40.77832,-18.15146],[-40.79054,-18.15351],[-40.8351,-18.14531],[-40.89547,-18.10365],[-40.93283,-18.12755],[-40.95583,-18.1255],[-40.95296,-18.14463],[-40.96014,-18.15009],[-40.96374,-18.14326],[-40.97955,-18.13643],[-40.99248,-18.15009],[-40.99105,-18.16307],[-41.00901,-18.16307],[-41.05788,-18.1658],[-41.05788,-18.17536],[-41.09597,-18.19243],[-41.09597,-18.2054],[-41.1089,-18.21291],[-41.09812,-18.22997],[-41.10531,-18.2327],[-41.09884,-18.25591],[-41.12903,-18.27502],[-41.16137,-18.30572],[-41.15059,-18.37394],[-41.16424,-18.37939],[-41.16424,-18.4019],[-41.15059,-18.40735],[-41.15849,-18.41144],[-41.17358,-18.41144],[-41.18868,-18.44485],[-41.02123,-18.46667],[-41.04638,-18.60362],[-41.03776,-18.61452],[-41.05788,-18.62678],[-41.0471,-18.64857],[-41.03488,-18.65402],[-40.99895,-18.67716],[-40.94505,-18.69418],[-40.94433,-18.76973],[-40.92134,-18.81055],[-40.93715,-18.82347],[-40.94721,-18.82143],[-40.97092,-18.83572],[-41.08375,-18.83232],[-41.10675,-18.83572],[-41.11753,-18.80783],[-41.13118,-18.79286],[-41.23611,-18.7949],[-41.2512,-18.81667],[-41.2476,-18.85544],[-41.2203,-18.87992],[-41.20808,-18.87992],[-41.20664,-18.86632],[-41.16424,-18.867],[-41.15634,-18.88876],[-41.12903,-18.9044],[-41.12112,-18.92412],[-41.0392,-18.98665],[-41.07585,-19.00567],[-41.06507,-19.06342],[-40.96877,-19.12726],[-40.96158,-19.15102],[-40.92996,-19.206],[-40.94649,-19.22296],[-40.94793,-19.24264],[-40.92565,-19.26299],[-40.94936,-19.2786],[-40.92277,-19.31048],[-40.94361,-19.35252],[-40.93427,-19.381],[-40.95727,-19.39184],[-40.9738,-19.42641],[-40.95439,-19.46165],[-40.97883,-19.50298],[-41.01332,-19.50298],[-41.04638,-19.48333],[-41.05429,-19.48401],[-41.04135,-19.56664],[-41.09238,-19.58966],[-41.14627,-19.656],[-41.16496,-19.65871],[-41.17933,-19.6939],[-41.19658,-19.74599],[-41.16999,-19.80618],[-41.18939,-19.82375],[-41.18868,-19.88526],[-41.21239,-19.89743],[-41.22964,-19.90216],[-41.24689,-19.93324],[-41.25479,-19.92919],[-41.26988,-19.93797],[-41.30653,-19.93392],[-41.31516,-19.96972],[-41.3245,-19.97647],[-41.313,-20.01226],[-41.33672,-20.05548],[-41.34822,-20.08653],[-41.3554,-20.12094],[-41.37768,-20.15805],[-41.38702,-20.18638],[-41.41074,-20.19448],[-41.4208,-20.20257],[-41.7636,-20.2046],[-41.78516,-20.28483],[-41.85055,-20.3246],[-41.86349,-20.37513],[-41.85127,-20.38187],[-41.84337,-20.40949],[-41.80887,-20.42498],[-41.80672,-20.47211],[-41.83115,-20.47885],[-41.81103,-20.54212],[-41.83115,-20.55086],[-41.86205,-20.61814],[-41.82109,-20.64437],[-41.85343,-20.68068],[-41.87139,-20.72102],[-41.8678,-20.73849],[-41.88002,-20.73984],[-41.88289,-20.76739],[-41.85415,-20.77478],[-41.83331,-20.7983],[-41.80887,-20.80905],[-41.78444,-20.80569],[-41.75138,-20.82382],[-41.74707,-20.87487],[-41.72335,-20.87554],[-41.74132,-20.92723],[-41.72335,-20.97757],[-41.74347,-21.09763],[-41.7291,-21.12579],[-41.594,-21.16332],[-41.57244,-21.18678],[-41.49051,-21.18879],[-41.48332,-21.20085],[-41.43948,-21.22095],[-41.41289,-21.20956],[-41.34965,-21.21291],[-41.27994,-21.2464],[-41.24473,-21.23234],[-41.17718,-21.25511],[-41.09238,-21.2243],[-41.04854,-21.25913],[-41.01548,-21.25578],[-41.00254,-21.28726],[-40.94577,-21.31404]]],terms_url:"https://der.es.gov.br",terms_text:"Departamento de Estradas de Rodagem do Estado do Espírito Santo",overlay:true},{id:"db-inspire-2013-11",name:"Deutsche Bahn VzG lines January 2017",type:"wms",template:"https://wms.michreichert.de/vzg-strecken-2017?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=vzg_strecken,station_codes,level_crossings&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2013-11-01T00:00:00.000Z",startDate:"2013-11-01T00:00:00.000Z",polygon:[[[8.19422,48.97504],[7.97355,49.02623],[7.94677,49.06313],[7.44328,49.18928],[7.05679,49.11163],[6.94302,49.21345],[6.81633,49.16389],[6.68209,49.24061],[6.3501,49.46202],[6.35353,49.57302],[6.42632,49.67177],[6.50254,49.71885],[6.45241,50.61258],[6.03871,50.71215],[6.00369,50.753],[6.05742,50.8559],[6.0787,50.90247],[6.0727,51.06792],[6.17123,51.33853],[6.22548,51.36554],[6.15715,51.5509],[6.12763,51.91069],[6.79985,51.86661],[7.02851,52.31255],[6.72947,52.64179],[7.07486,52.75269],[7.20532,53.18442],[7.04464,53.33106],[6.5173,53.65785],[8.23529,54.99001],[11.92257,54.52963],[14.1679,54.59631],[14.46591,53.24712],[14.14318,52.83946],[14.64375,52.58613],[14.57646,52.32756],[14.74537,52.06577],[14.66847,51.7353],[14.7234,51.53927],[15.03926,51.28745],[14.98845,51.09207],[14.88922,50.93856],[14.81593,50.87729],[14.63671,50.89116],[14.59311,50.91887],[14.57217,51.01076],[14.26283,51.06473],[14.28086,50.98024],[14.22816,50.85796],[13.69532,50.72883],[13.03442,50.50085],[12.49077,50.34582],[12.32632,50.29277],[12.35379,50.21462],[12.32701,50.16363],[12.1677,50.34889],[12.07707,50.2524],[12.18195,50.21136],[12.26014,50.09069],[12.53892,49.4164],[12.88808,49.3385],[13.21287,49.12439],[13.73952,48.83688],[13.45371,48.56222],[13.40555,48.37812],[13.03648,48.25986],[12.71376,48.10856],[12.93108,47.9376],[13.00455,47.84506],[12.90671,47.73249],[13.05228,47.59329],[12.15792,47.7087],[12.20393,47.61667],[12.17783,47.59815],[11.61753,47.60093],[11.26666,47.39124],[10.9247,47.46811],[10.91578,47.55623],[10.59031,47.5567],[10.29848,47.39937],[9.78144,47.61274],[9.74024,47.52842],[9.00278,47.69137],[8.68933,47.72371],[8.63809,47.70261],[8.63079,47.69359],[8.62127,47.69177],[8.62414,47.68221],[8.61243,47.68115],[8.35382,47.61367],[8.27485,47.619],[8.23709,47.61023],[8.22808,47.60583],[8.20284,47.61555],[8.10834,47.58251],[8.08568,47.5583],[8.06714,47.56444],[8.04981,47.55645],[8.02749,47.55112],[7.98097,47.55494],[7.91917,47.54787],[7.88862,47.58888],[7.81257,47.57122],[7.79455,47.55558],[7.71404,47.54063],[7.66043,47.54485],[7.65219,47.54702],[7.63439,47.56173],[7.61499,47.55669],[7.5834,47.57048],[7.58559,47.5845],[7.59366,47.60048],[7.58761,47.608],[7.51491,47.6652],[7.5434,47.81539],[7.57671,48.02454],[7.56812,48.06012],[7.80639,48.52438],[7.79987,48.58029],[7.80665,48.60106],[8.11014,48.84977],[8.19422,48.97504]]],terms_url:"https://data.deutschebahn.com/dataset/data-streckennetz",terms_text:"Data CC-BY 4.0 Deutsche Bahn AG",overlay:true},{id:"db-inspire-2015-11",name:"Deutsche Bahn VzG lines Nov 2015",type:"wms",template:"https://wms.michreichert.de/vzg-strecken-2015?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=vzg_strecken,station_codes,level_crossings&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-11-01T00:00:00.000Z",startDate:"2015-11-01T00:00:00.000Z",polygon:[[[8.19422,48.97504],[7.97355,49.02623],[7.94677,49.06313],[7.44328,49.18928],[7.05679,49.11163],[6.94302,49.21345],[6.81633,49.16389],[6.68209,49.24061],[6.3501,49.46202],[6.35353,49.57302],[6.42632,49.67177],[6.50254,49.71885],[6.45241,50.61258],[6.03871,50.71215],[6.00369,50.753],[6.05742,50.8559],[6.0787,50.90247],[6.0727,51.06792],[6.17123,51.33853],[6.22548,51.36554],[6.15715,51.5509],[6.12763,51.91069],[6.79985,51.86661],[7.02851,52.31255],[6.72947,52.64179],[7.07486,52.75269],[7.20532,53.18442],[7.04464,53.33106],[6.5173,53.65785],[8.23529,54.99001],[11.92257,54.52963],[14.1679,54.59631],[14.46591,53.24712],[14.14318,52.83946],[14.64375,52.58613],[14.57646,52.32756],[14.74537,52.06577],[14.66847,51.7353],[14.7234,51.53927],[15.03926,51.28745],[14.98845,51.09207],[14.88922,50.93856],[14.81593,50.87729],[14.63671,50.89116],[14.59311,50.91887],[14.57217,51.01076],[14.26283,51.06473],[14.28086,50.98024],[14.22816,50.85796],[13.69532,50.72883],[13.03442,50.50085],[12.49077,50.34582],[12.32632,50.29277],[12.35379,50.21462],[12.32701,50.16363],[12.1677,50.34889],[12.07707,50.2524],[12.18195,50.21136],[12.26014,50.09069],[12.53892,49.4164],[12.88808,49.3385],[13.21287,49.12439],[13.73952,48.83688],[13.45371,48.56222],[13.40555,48.37812],[13.03648,48.25986],[12.71376,48.10856],[12.93108,47.9376],[13.00455,47.84506],[12.90671,47.73249],[13.05228,47.59329],[12.15792,47.7087],[12.20393,47.61667],[12.17783,47.59815],[11.61753,47.60093],[11.26666,47.39124],[10.9247,47.46811],[10.91578,47.55623],[10.59031,47.5567],[10.29848,47.39937],[9.78144,47.61274],[9.74024,47.52842],[9.00278,47.69137],[8.68933,47.72371],[8.63809,47.70261],[8.63079,47.69359],[8.62127,47.69177],[8.62414,47.68221],[8.61243,47.68115],[8.35382,47.61367],[8.27485,47.619],[8.23709,47.61023],[8.22808,47.60583],[8.20284,47.61555],[8.10834,47.58251],[8.08568,47.5583],[8.06714,47.56444],[8.04981,47.55645],[8.02749,47.55112],[7.98097,47.55494],[7.91917,47.54787],[7.88862,47.58888],[7.81257,47.57122],[7.79455,47.55558],[7.71404,47.54063],[7.66043,47.54485],[7.65219,47.54702],[7.63439,47.56173],[7.61499,47.55669],[7.5834,47.57048],[7.58559,47.5845],[7.59366,47.60048],[7.58761,47.608],[7.51491,47.6652],[7.5434,47.81539],[7.57671,48.02454],[7.56812,48.06012],[7.80639,48.52438],[7.79987,48.58029],[7.80665,48.60106],[8.11014,48.84977],[8.19422,48.97504]]],terms_url:"https://data.deutschebahn.com/dataset/data-streckennetz",terms_text:"Data CC-BY 4.0 Deutsche Bahn AG",overlay:true},{id:"DigitalGlobe-Premium",name:"DigitalGlobe Premium Imagery",type:"tms",template:"https://{switch:a,b,c,d}.tiles.mapbox.com/v4/digitalglobe.316c9a2e/{zoom}/{x}/{y}.png?access_token=pk.eyJ1IjoiZGlnaXRhbGdsb2JlIiwiYSI6ImNqZGFrZ2c2dzFlMWgyd2x0ZHdmMDB6NzYifQ.9Pl3XOO82ArX94fHV289Pg",zoomExtent:[0,22],terms_url:"https://wiki.openstreetmap.org/wiki/DigitalGlobe",terms_text:"Terms & Feedback","default":true,description:"DigitalGlobe-Premium is a mosaic composed of DigitalGlobe basemap with select regions filled with +Vivid or custom area of interest imagery, 50cm resolution or better, and refreshed more frequently with ongoing updates.",icon:"https://osmlab.github.io/editor-layer-index/sources/world/DigitalGlobePremiumImagery.png"},{id:"DigitalGlobe-Premium-vintage",name:"DigitalGlobe Premium Imagery Vintage",type:"tms",template:"https://{switch:a,b,c,d}.tiles.mapbox.com/v4/digitalglobe.2850d66c/{zoom}/{x}/{y}.png?access_token=pk.eyJ1IjoiZGlnaXRhbGdsb2JlIiwiYSI6ImNqOTBkcmZjNzJ5ZnozNHF6NnVkOGd6ODYifQ.grAnqgpCjOaeq-ozqt4QNw",zoomExtent:[0,22],terms_url:"https://wiki.openstreetmap.org/wiki/DigitalGlobe",terms_text:"Terms & Feedback",description:"Imagery boundaries and capture dates. Labels appear at zoom level 13 and higher.",icon:"https://osmlab.github.io/editor-layer-index/sources/world/DigitalGlobePremiumImagery.png",overlay:true},{id:"DigitalGlobe-Standard",name:"DigitalGlobe Standard Imagery",type:"tms",template:"https://{switch:a,b,c,d}.tiles.mapbox.com/v4/digitalglobe.0a8e44ba/{zoom}/{x}/{y}.png?access_token=pk.eyJ1IjoiZGlnaXRhbGdsb2JlIiwiYSI6ImNqZGFrZ3pjczNpaHYycXFyMGo0djY3N2IifQ.90uebT4-ow1uqZKTUrf6RQ",zoomExtent:[0,22],terms_url:"https://wiki.openstreetmap.org/wiki/DigitalGlobe",terms_text:"Terms & Feedback","default":true,description:"DigitalGlobe-Standard is a curated set of imagery covering 86% of the earth’s landmass, with 30-60cm resolution where available, backfilled by Landsat. Average age is 2.31 years, with some areas updated 2x per year.",icon:"https://osmlab.github.io/editor-layer-index/sources/world/DigitalGlobePremiumImagery.png"},{id:"DigitalGlobe-Standard-vintage",name:"DigitalGlobe Standard Imagery Vintage",type:"tms",template:"https://{switch:a,b,c,d}.tiles.mapbox.com/v4/digitalglobe.1412531a/{zoom}/{x}/{y}.png?access_token=pk.eyJ1IjoiZGlnaXRhbGdsb2JlIiwiYSI6ImNqOTBlYWJ1ZDAza2YyeG14NWVodTA4OWUifQ.wVc8ZOuPuYVw39lhS2j3_g",zoomExtent:[0,22],terms_url:"https://wiki.openstreetmap.org/wiki/DigitalGlobe",terms_text:"Terms & Feedback",description:"Imagery boundaries and capture dates. Labels appear at zoom level 13 and higher.",icon:"https://osmlab.github.io/editor-layer-index/sources/world/DigitalGlobePremiumImagery.png",overlay:true},{id:"drone-imagery-2014",name:"Drone Imagery 2014 (Haiti)",type:"tms",template:"http://wms.openstreetmap.fr/tms/1.0.0/haiti_2014/{zoom}/{x}/{y}",endDate:"2014-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",polygon:[[[-72.3286,18.69461],[-72.33034,18.69412],[-72.33117,18.69284],[-72.33413,18.68542],[-72.33452,18.68414],[-72.33443,18.68355],[-72.33375,18.68235],[-72.32147,18.67721],[-72.32027,18.67698],[-72.31909,18.67713],[-72.3183,18.67804],[-72.31508,18.68457],[-72.31394,18.689],[-72.31553,18.68993],[-72.3286,18.69461]],[[-72.34695,18.61833],[-72.34553,18.62166],[-72.34355,18.62447],[-72.34245,18.62553],[-72.34076,18.62658],[-72.33786,18.62639],[-72.33649,18.62597],[-72.33589,18.62504],[-72.33482,18.62559],[-72.33472,18.6255],[-72.33459,18.62513],[-72.33343,18.62438],[-72.33174,18.62469],[-72.3313,18.62457],[-72.33126,18.62321],[-72.33088,18.62276],[-72.33066,18.62277],[-72.32985,18.62345],[-72.32862,18.62186],[-72.32829,18.6218],[-72.32817,18.62193],[-72.32809,18.6218],[-72.32734,18.62261],[-72.32541,18.62101],[-72.32422,18.62122],[-72.32396,18.61869],[-72.32354,18.61815],[-72.32325,18.61818],[-72.32351,18.61877],[-72.32058,18.62031],[-72.32043,18.61993],[-72.31978,18.62066],[-72.31807,18.61907],[-72.31742,18.61958],[-72.31523,18.61782],[-72.31463,18.61844],[-72.31324,18.6165],[-72.31275,18.61677],[-72.31232,18.6172],[-72.31198,18.61704],[-72.31042,18.61764],[-72.31062,18.61564],[-72.30996,18.61526],[-72.30936,18.61623],[-72.30786,18.61542],[-72.30669,18.61623],[-72.30604,18.61704],[-72.30419,18.61545],[-72.30288,18.61688],[-72.30191,18.61637],[-72.30131,18.61552],[-72.30118,18.6158],[-72.30087,18.61546],[-72.30076,18.61567],[-72.30062,18.6156],[-72.30012,18.61609],[-72.29198,18.61365],[-72.29194,18.61347],[-72.29143,18.61342],[-72.29094,18.61323],[-72.29105,18.61199],[-72.29057,18.61152],[-72.28772,18.61145],[-72.28801,18.6096],[-72.2865,18.60968],[-72.28635,18.60799],[-72.28448,18.60844],[-72.28436,18.60789],[-72.283,18.60808],[-72.283,18.60658],[-72.2828,18.60676],[-72.2816,18.60537],[-72.28106,18.60533],[-72.27973,18.60682],[-72.27805,18.60525],[-72.27793,18.6053],[-72.2778,18.60524],[-72.2772,18.60638],[-72.27589,18.60564],[-72.27544,18.60629],[-72.27385,18.60508],[-72.27341,18.60508],[-72.27241,18.60593],[-72.27099,18.60442],[-72.27047,18.60429],[-72.27038,18.60446],[-72.27024,18.60427],[-72.27011,18.60433],[-72.26862,18.60368],[-72.26778,18.6037],[-72.26751,18.60429],[-72.2655,18.60318],[-72.26539,18.60336],[-72.26515,18.60309],[-72.26471,18.603],[-72.26436,18.60331],[-72.26312,18.60193],[-72.26258,18.60188],[-72.262,18.60251],[-72.26139,18.60184],[-72.26106,18.60182],[-72.26106,18.60148],[-72.26014,18.6005],[-72.25994,18.60049],[-72.25803,18.60079],[-72.2576,18.60054],[-72.25691,18.60094],[-72.25413,18.59992],[-72.25093,18.59739],[-72.25062,18.59676],[-72.25033,18.59701],[-72.24451,18.59231],[-72.24215,18.58872],[-72.24167,18.58756],[-72.24077,18.58654],[-72.24147,18.58592],[-72.2413,18.58543],[-72.2395,18.58424],[-72.24007,18.58358],[-72.2382,18.58197],[-72.23868,18.58157],[-72.2385,18.58119],[-72.23703,18.58054],[-72.23612,18.57894],[-72.23646,18.57825],[-72.23636,18.5777],[-72.23467,18.57684],[-72.2353,18.57562],[-72.235,18.57499],[-72.23335,18.57423],[-72.23399,18.57293],[-72.23182,18.57169],[-72.23188,18.57137],[-72.23175,18.57127],[-72.23198,18.5708],[-72.23072,18.5694],[-72.23097,18.56874],[-72.23082,18.56844],[-72.23046,18.56855],[-72.23009,18.56754],[-72.22942,18.56715],[-72.22972,18.56651],[-72.22961,18.566],[-72.22908,18.56612],[-72.22848,18.56396],[-72.22818,18.56395],[-72.22733,18.56421],[-72.2265,18.56179],[-72.22623,18.56191],[-72.22436,18.55908],[-72.22471,18.55882],[-72.22357,18.55689],[-72.22379,18.55675],[-72.22325,18.55579],[-72.22387,18.55544],[-72.22382,18.55528],[-72.22458,18.55483],[-72.22453,18.55439],[-72.22625,18.55408],[-72.22705,18.55349],[-72.22692,18.55333],[-72.2271,18.55324],[-72.22687,18.55273],[-72.22592,18.55308],[-72.22465,18.55027],[-72.22483,18.5501],[-72.22457,18.54956],[-72.22327,18.55014],[-72.22261,18.54869],[-72.2208,18.54918],[-72.22051,18.54852],[-72.22034,18.54865],[-72.2201,18.54845],[-72.21952,18.54876],[-72.21862,18.54755],[-72.2174,18.5478],[-72.21714,18.54733],[-72.21694,18.54734],[-72.21583,18.54517],[-72.21505,18.54533],[-72.21477,18.54494],[-72.21442,18.54218],[-72.21421,18.54233],[-72.21293,18.5401],[-72.21199,18.5404],[-72.21188,18.54025],[-72.21145,18.53781],[-72.21085,18.53797],[-72.21028,18.53545],[-72.20993,18.53465],[-72.20942,18.53478],[-72.20942,18.53456],[-72.20851,18.53472],[-72.2057,18.53039],[-72.20444,18.52693],[-72.20438,18.52643],[-72.20418,18.52637],[-72.20399,18.52572],[-72.20263,18.5222],[-72.20182,18.5197],[-72.20148,18.51742],[-72.20301,18.51606],[-72.20503,18.51506],[-72.20767,18.51432],[-72.20936,18.5142],[-72.2095,18.51448],[-72.21082,18.51416],[-72.21095,18.51444],[-72.21189,18.51412],[-72.21266,18.51403],[-72.21277,18.51417],[-72.21462,18.51393],[-72.21697,18.51569],[-72.21731,18.51648],[-72.21787,18.51642],[-72.21818,18.51975],[-72.21798,18.51984],[-72.21909,18.52189],[-72.22031,18.52152],[-72.22096,18.52382],[-72.22209,18.52355],[-72.22251,18.52685],[-72.22229,18.52693],[-72.22271,18.52726],[-72.22289,18.52707],[-72.2231,18.52722],[-72.22404,18.52681],[-72.22551,18.52936],[-72.22596,18.5297],[-72.22642,18.52964],[-72.2265,18.53018],[-72.2275,18.53118],[-72.22673,18.53171],[-72.22885,18.53383],[-72.22811,18.53435],[-72.22981,18.53623],[-72.22912,18.5367],[-72.22935,18.53731],[-72.23059,18.53875],[-72.23222,18.54189],[-72.23215,18.5421],[-72.23258,18.54324],[-72.23311,18.54304],[-72.2342,18.54558],[-72.23436,18.5455],[-72.23554,18.54776],[-72.23571,18.54779],[-72.23601,18.54899],[-72.23839,18.55165],[-72.23747,18.55231],[-72.23951,18.55397],[-72.23918,18.55413],[-72.2407,18.55661],[-72.24014,18.5568],[-72.24079,18.55824],[-72.24063,18.55835],[-72.24067,18.55845],[-72.24117,18.55815],[-72.24161,18.55898],[-72.24216,18.55882],[-72.24242,18.56062],[-72.24262,18.56101],[-72.24294,18.56089],[-72.24399,18.56371],[-72.24466,18.56356],[-72.24475,18.56413],[-72.24536,18.56445],[-72.2449,18.56525],[-72.24518,18.56549],[-72.245,18.56581],[-72.24499,18.56607],[-72.24543,18.56633],[-72.24559,18.56618],[-72.24588,18.56662],[-72.24687,18.56727],[-72.24662,18.56749],[-72.24781,18.56897],[-72.24728,18.56938],[-72.24859,18.57137],[-72.24894,18.57159],[-72.24865,18.57222],[-72.2488,18.57219],[-72.24885,18.5723],[-72.24945,18.57197],[-72.25068,18.57411],[-72.25147,18.5737],[-72.25251,18.57598],[-72.25339,18.57551],[-72.25491,18.57848],[-72.25462,18.57863],[-72.25467,18.57878],[-72.25505,18.57894],[-72.25495,18.57913],[-72.256,18.58074],[-72.2563,18.58054],[-72.25752,18.58237],[-72.25769,18.58227],[-72.2578,18.5824],[-72.25808,18.5823],[-72.25857,18.5821],[-72.25862,18.58222],[-72.25889,18.58219],[-72.25894,18.58302],[-72.25958,18.58445],[-72.25984,18.58472],[-72.26072,18.58443],[-72.26094,18.58565],[-72.2622,18.58722],[-72.26351,18.58643],[-72.2643,18.58738],[-72.26474,18.58708],[-72.26594,18.58862],[-72.26756,18.58877],[-72.26742,18.58917],[-72.27039,18.58893],[-72.27021,18.5903],[-72.2722,18.59048],[-72.27211,18.59145],[-72.27381,18.59188],[-72.27384,18.59168],[-72.27729,18.59169],[-72.28014,18.59129],[-72.28059,18.59048],[-72.28106,18.59071],[-72.28226,18.58989],[-72.28286,18.59047],[-72.28367,18.58966],[-72.28401,18.59014],[-72.28468,18.59029],[-72.2851,18.58997],[-72.2857,18.59062],[-72.28661,18.59068],[-72.28681,18.59014],[-72.28728,18.59032],[-72.28741,18.59013],[-72.28801,18.59052],[-72.28991,18.59071],[-72.29077,18.58997],[-72.29196,18.59186],[-72.2945,18.59148],[-72.29454,18.59361],[-72.29654,18.59322],[-72.29689,18.59586],[-72.2976,18.59675],[-72.29824,18.59722],[-72.29871,18.5962],[-72.30053,18.59733],[-72.30081,18.59675],[-72.30113,18.59691],[-72.30131,18.59676],[-72.30175,18.59721],[-72.30303,18.59774],[-72.3033,18.59729],[-72.30394,18.59761],[-72.30394,18.59736],[-72.30555,18.59794],[-72.30598,18.59756],[-72.30703,18.59838],[-72.30723,18.59799],[-72.30862,18.59833],[-72.30938,18.59752],[-72.31013,18.5981],[-72.31037,18.59739],[-72.3121,18.5983],[-72.3122,18.59807],[-72.31424,18.59902],[-72.31456,18.59873],[-72.31524,18.59922],[-72.31681,18.59952],[-72.31662,18.60004],[-72.31958,18.60072],[-72.31907,18.60202],[-72.32042,18.60247],[-72.32061,18.60242],[-72.32082,18.60267],[-72.3211,18.6027],[-72.32105,18.60298],[-72.32144,18.60347],[-72.32368,18.60322],[-72.32375,18.60432],[-72.32584,18.60436],[-72.32588,18.60522],[-72.32617,18.60585],[-72.32864,18.60525],[-72.32897,18.60527],[-72.32916,18.60727],[-72.33006,18.60812],[-72.3294,18.60867],[-72.33004,18.60959],[-72.33282,18.60949],[-72.33258,18.61058],[-72.33302,18.61005],[-72.3335,18.61054],[-72.33477,18.61035],[-72.33485,18.61167],[-72.33735,18.61174],[-72.33725,18.61237],[-72.33767,18.61298],[-72.34038,18.61306],[-72.34016,18.6138],[-72.34153,18.61384],[-72.34258,18.61457],[-72.3426,18.61512],[-72.34306,18.61499],[-72.34682,18.61792],[-72.34695,18.61833]],[[-72.72363,19.09461],[-72.72302,19.09518],[-72.72206,19.0965],[-72.72169,19.09612],[-72.72164,19.0962],[-72.72132,19.09609],[-72.72073,19.0967],[-72.7198,19.09587],[-72.71965,19.09591],[-72.7197,19.09601],[-72.71955,19.09602],[-72.71911,19.09623],[-72.71906,19.09627],[-72.71904,19.09625],[-72.71888,19.09631],[-72.71886,19.09626],[-72.71817,19.09643],[-72.71776,19.09679],[-72.71756,19.09657],[-72.71693,19.09705],[-72.71713,19.09735],[-72.71495,19.0988],[-72.71479,19.09852],[-72.71483,19.09849],[-72.7148,19.0984],[-72.71455,19.09859],[-72.71449,19.09851],[-72.71413,19.09877],[-72.71413,19.09893],[-72.71419,19.09891],[-72.71417,19.09978],[-72.71324,19.09971],[-72.71287,19.09974],[-72.71295,19.09967],[-72.71278,19.09968],[-72.71278,19.09977],[-72.71282,19.09976],[-72.71285,19.09988],[-72.71266,19.09989],[-72.71266,19.09987],[-72.71245,19.09987],[-72.71182,19.09991],[-72.71178,19.10012],[-72.71157,19.10009],[-72.71147,19.10102],[-72.71042,19.10086],[-72.71039,19.10119],[-72.7103,19.1012],[-72.71031,19.10151],[-72.7097,19.10156],[-72.7097,19.10162],[-72.70917,19.10169],[-72.70917,19.1021],[-72.70828,19.10211],[-72.70809,19.10289],[-72.70788,19.10284],[-72.70798,19.10367],[-72.70724,19.1038],[-72.70731,19.10501],[-72.70723,19.10501],[-72.70736,19.10565],[-72.70637,19.10584],[-72.7062,19.10714],[-72.70588,19.10706],[-72.70591,19.10747],[-72.7053,19.10757],[-72.7054,19.10813],[-72.70568,19.10809],[-72.70568,19.10928],[-72.70591,19.11013],[-72.70589,19.11022],[-72.70574,19.11025],[-72.70574,19.11116],[-72.70538,19.11114],[-72.70557,19.11247],[-72.70499,19.11256],[-72.70537,19.11361],[-72.7047,19.11388],[-72.70496,19.11563],[-72.70418,19.11564],[-72.70442,19.11762],[-72.70371,19.11764],[-72.70371,19.1178],[-72.70352,19.11779],[-72.70339,19.12227],[-72.70264,19.12205],[-72.70253,19.12301],[-72.70289,19.12592],[-72.70308,19.12595],[-72.70316,19.12864],[-72.70234,19.12997],[-72.70206,19.1301],[-72.69987,19.1305],[-72.69325,19.13064],[-72.687,19.13075],[-72.68456,19.13073],[-72.68338,19.13056],[-72.6828,19.1297],[-72.68203,19.1283],[-72.68201,19.12715],[-72.68158,19.12714],[-72.68187,19.12508],[-72.68185,19.12507],[-72.68215,19.12414],[-72.68253,19.12295],[-72.68265,19.12243],[-72.68263,19.12185],[-72.68302,19.12185],[-72.68301,19.12132],[-72.68286,19.12133],[-72.68293,19.11947],[-72.68251,19.11946],[-72.68256,19.11803],[-72.68265,19.11751],[-72.68265,19.11703],[-72.68318,19.11704],[-72.68319,19.11685],[-72.68371,19.11687],[-72.68384,19.11684],[-72.684,19.11685],[-72.68398,19.11689],[-72.68426,19.11688],[-72.68426,19.11679],[-72.68481,19.11674],[-72.68546,19.11667],[-72.68557,19.11664],[-72.68551,19.11664],[-72.6856,19.11662],[-72.68595,19.11658],[-72.68596,19.11654],[-72.68608,19.11654],[-72.68661,19.11663],[-72.68662,19.11656],[-72.68713,19.11665],[-72.68721,19.11666],[-72.68721,19.11663],[-72.6878,19.11666],[-72.68779,19.11659],[-72.68833,19.11663],[-72.68832,19.11658],[-72.68928,19.11657],[-72.6897,19.11656],[-72.68998,19.11644],[-72.6902,19.11644],[-72.69019,19.11615],[-72.69027,19.11563],[-72.69029,19.11541],[-72.69017,19.11543],[-72.69018,19.11493],[-72.69018,19.11458],[-72.69019,19.11445],[-72.69022,19.11433],[-72.6902,19.11406],[-72.68972,19.11398],[-72.68968,19.11397],[-72.68973,19.11415],[-72.68974,19.1142],[-72.68937,19.11417],[-72.68872,19.11412],[-72.688,19.11412],[-72.68758,19.11409],[-72.68759,19.11401],[-72.68736,19.11403],[-72.68711,19.11406],[-72.68682,19.11406],[-72.68677,19.11405],[-72.68591,19.11422],[-72.68554,19.11421],[-72.68557,19.11369],[-72.68554,19.11308],[-72.68533,19.11314],[-72.6852,19.11316],[-72.68519,19.1132],[-72.68504,19.11325],[-72.68495,19.1127],[-72.68474,19.11278],[-72.68468,19.11277],[-72.68446,19.11281],[-72.68416,19.1128],[-72.6836,19.11254],[-72.68353,19.11102],[-72.68363,19.11007],[-72.68338,19.11003],[-72.68344,19.10974],[-72.68295,19.1096],[-72.68305,19.10892],[-72.68111,19.10826],[-72.68112,19.1081],[-72.67965,19.10781],[-72.67968,19.10765],[-72.67923,19.10749],[-72.67916,19.10802],[-72.67838,19.10755],[-72.67779,19.10753],[-72.67775,19.10769],[-72.67623,19.10765],[-72.67606,19.10762],[-72.67621,19.10797],[-72.67549,19.10804],[-72.67548,19.1079],[-72.67431,19.10804],[-72.67432,19.10795],[-72.67398,19.10794],[-72.67382,19.10798],[-72.6739,19.10864],[-72.67319,19.10856],[-72.67307,19.10852],[-72.67284,19.10855],[-72.67276,19.10855],[-72.67286,19.10907],[-72.67284,19.10915],[-72.67251,19.10903],[-72.67236,19.10906],[-72.6723,19.10905],[-72.67224,19.10913],[-72.67179,19.10912],[-72.67051,19.10679],[-72.6704,19.10401],[-72.67048,19.10396],[-72.67032,19.10223],[-72.67034,19.1016],[-72.67062,19.09856],[-72.67121,19.09697],[-72.67278,19.09595],[-72.67277,19.09629],[-72.67364,19.09636],[-72.6736,19.09662],[-72.67484,19.09623],[-72.67489,19.09666],[-72.67566,19.09655],[-72.67566,19.09648],[-72.67655,19.09642],[-72.67772,19.09626],[-72.67786,19.09675],[-72.67784,19.09689],[-72.67826,19.09677],[-72.67837,19.09698],[-72.67858,19.09698],[-72.67853,19.09665],[-72.67878,19.09666],[-72.67861,19.09635],[-72.67927,19.09633],[-72.67973,19.0962],[-72.68015,19.09604],[-72.68058,19.09598],[-72.68029,19.09501],[-72.68072,19.095],[-72.68066,19.09474],[-72.68048,19.09418],[-72.68037,19.09335],[-72.68064,19.09335],[-72.68064,19.09266],[-72.67973,19.09263],[-72.67972,19.09269],[-72.67943,19.09266],[-72.67966,19.09132],[-72.67977,19.09107],[-72.68249,19.0892],[-72.68272,19.08907],[-72.68506,19.0888],[-72.68508,19.08888],[-72.68616,19.08873],[-72.6862,19.08887],[-72.68718,19.08866],[-72.68717,19.0886],[-72.68849,19.08844],[-72.68852,19.08847],[-72.69006,19.0884],[-72.69018,19.08871],[-72.69227,19.08828],[-72.69229,19.08887],[-72.69218,19.08924],[-72.69222,19.08928],[-72.69277,19.08923],[-72.69279,19.08933],[-72.69335,19.08934],[-72.69289,19.0888],[-72.69274,19.0883],[-72.69496,19.08857],[-72.69571,19.08831],[-72.69579,19.08892],[-72.69625,19.08904],[-72.69649,19.08889],[-72.69849,19.08845],[-72.69849,19.08866],[-72.6988,19.08858],[-72.69885,19.08895],[-72.69884,19.08903],[-72.69926,19.08895],[-72.70023,19.08884],[-72.70023,19.08893],[-72.70088,19.08892],[-72.7014,19.08887],[-72.70128,19.08828],[-72.70257,19.08859],[-72.70282,19.08874],[-72.70309,19.08883],[-72.70293,19.08855],[-72.70341,19.08862],[-72.70557,19.08863],[-72.70552,19.08906],[-72.70665,19.08889],[-72.70666,19.08938],[-72.70902,19.08917],[-72.70898,19.0891],[-72.71116,19.08894],[-72.71121,19.0892],[-72.71281,19.08912],[-72.71286,19.0898],[-72.71502,19.08882],[-72.71569,19.08838],[-72.71573,19.08847],[-72.7161,19.08824],[-72.71598,19.08795],[-72.71653,19.0877],[-72.71653,19.08761],[-72.71579,19.08781],[-72.71676,19.08727],[-72.71671,19.08717],[-72.71815,19.08638],[-72.71795,19.08602],[-72.71954,19.08518],[-72.71954,19.08511],[-72.72217,19.08467],[-72.72327,19.08506],[-72.72622,19.08712],[-72.72763,19.0891],[-72.72752,19.08973],[-72.72548,19.09295],[-72.72482,19.09403],[-72.72399,19.09495],[-72.72363,19.09461]],[[-72.06537,19.65239],[-72.06565,19.6518],[-72.06603,19.65128],[-72.06697,19.65109],[-72.0676,19.6511],[-72.07102,19.65223],[-72.0719,19.65254],[-72.07189,19.65255],[-72.07264,19.6528],[-72.07262,19.65284],[-72.07268,19.65286],[-72.07269,19.65283],[-72.0733,19.65305],[-72.07393,19.65327],[-72.07416,19.65347],[-72.07418,19.65351],[-72.07435,19.65395],[-72.07432,19.65425],[-72.07419,19.65495],[-72.07399,19.65583],[-72.07384,19.65648],[-72.07307,19.65805],[-72.07274,19.65866],[-72.0727,19.65869],[-72.07228,19.65915],[-72.07221,19.65917],[-72.07196,19.65916],[-72.0714,19.65909],[-72.07012,19.65866],[-72.07017,19.65856],[-72.06983,19.65852],[-72.06984,19.65848],[-72.06939,19.65841],[-72.06944,19.65823],[-72.06941,19.65823],[-72.06937,19.65836],[-72.06842,19.65807],[-72.06707,19.65759],[-72.06451,19.65663],[-72.06434,19.65632],[-72.06421,19.65547],[-72.06422,19.65541],[-72.06472,19.65379],[-72.06487,19.65351],[-72.06537,19.65239]],[[-72.23222,18.69173],[-72.23182,18.69172],[-72.23115,18.69168],[-72.23128,18.69161],[-72.23072,18.69152],[-72.23068,18.69147],[-72.23135,18.69159],[-72.23157,18.69149],[-72.23162,18.69137],[-72.23165,18.69134],[-72.23165,18.69164],[-72.23222,18.69173]],[[-72.2406,18.69192],[-72.23953,18.6921],[-72.23891,18.69207],[-72.23878,18.69207],[-72.23856,18.692],[-72.23818,18.69192],[-72.23186,18.69054],[-72.22977,18.69113],[-72.21709,18.68967],[-72.21618,18.68724],[-72.21599,18.68673],[-72.21602,18.68659],[-72.2159,18.68601],[-72.21581,18.68593],[-72.21561,18.68483],[-72.21569,18.6847],[-72.21578,18.68435],[-72.21595,18.68347],[-72.21629,18.68289],[-72.2164,18.68221],[-72.21633,18.68211],[-72.21641,18.68208],[-72.21642,18.68189],[-72.21694,18.6813],[-72.21685,18.68096],[-72.21693,18.68099],[-72.21722,18.68091],[-72.21734,18.6808],[-72.21731,18.67964],[-72.21749,18.67958],[-72.21749,18.67946],[-72.21747,18.67908],[-72.21743,18.67853],[-72.21739,18.6785],[-72.21718,18.6786],[-72.2171,18.67856],[-72.21708,18.67838],[-72.21724,18.67767],[-72.21724,18.67745],[-72.21721,18.67744],[-72.21681,18.67754],[-72.21671,18.67688],[-72.21662,18.67612],[-72.21642,18.67621],[-72.21601,18.67548],[-72.21596,18.67551],[-72.21589,18.67549],[-72.21552,18.6756],[-72.2154,18.67561],[-72.21529,18.6757],[-72.21521,18.67571],[-72.21491,18.67472],[-72.21464,18.67387],[-72.21456,18.6737],[-72.21447,18.67348],[-72.21413,18.67301],[-72.21427,18.67293],[-72.21413,18.67271],[-72.21383,18.67278],[-72.21339,18.67181],[-72.21178,18.67209],[-72.21169,18.67172],[-72.21135,18.67183],[-72.21116,18.67196],[-72.21077,18.67121],[-72.21058,18.67129],[-72.20984,18.66963],[-72.20972,18.6697],[-72.20966,18.66968],[-72.20918,18.66838],[-72.20895,18.66773],[-72.2093,18.66606],[-72.20937,18.66571],[-72.20974,18.66536],[-72.21031,18.66477],[-72.21021,18.66416],[-72.21042,18.66401],[-72.2111,18.66329],[-72.21167,18.66268],[-72.21179,18.66236],[-72.21206,18.66242],[-72.21193,18.66185],[-72.21188,18.66155],[-72.21199,18.66147],[-72.21239,18.66137],[-72.21331,18.66103],[-72.21393,18.66039],[-72.21376,18.65992],[-72.21355,18.65956],[-72.21376,18.65943],[-72.21349,18.65869],[-72.21296,18.65736],[-72.21357,18.6572],[-72.21312,18.65639],[-72.21281,18.65534],[-72.21317,18.6551],[-72.21308,18.65459],[-72.21347,18.65438],[-72.21374,18.65436],[-72.21382,18.65416],[-72.2135,18.65353],[-72.21304,18.65171],[-72.21345,18.65143],[-72.21341,18.65133],[-72.21364,18.65105],[-72.21418,18.65077],[-72.21378,18.65016],[-72.21364,18.64989],[-72.21372,18.64975],[-72.21429,18.64943],[-72.21379,18.64934],[-72.21362,18.64922],[-72.21382,18.64869],[-72.21354,18.64765],[-72.21331,18.64717],[-72.21366,18.64552],[-72.21389,18.64539],[-72.21377,18.6451],[-72.214,18.64399],[-72.21412,18.64378],[-72.21437,18.64347],[-72.2158,18.64222],[-72.21601,18.64217],[-72.21761,18.64218],[-72.21778,18.64272],[-72.21798,18.64256],[-72.21816,18.64236],[-72.21821,18.6422],[-72.22119,18.64222],[-72.22125,18.6423],[-72.22135,18.64224],[-72.2215,18.64223],[-72.22293,18.64229],[-72.22299,18.64235],[-72.22311,18.64227],[-72.22717,18.64249],[-72.22828,18.64281],[-72.22811,18.6432],[-72.22848,18.64325],[-72.22919,18.64258],[-72.2304,18.64263],[-72.23711,18.64295],[-72.23719,18.64317],[-72.23807,18.64322],[-72.23828,18.64298],[-72.23988,18.64306],[-72.24332,18.6434],[-72.24367,18.64387],[-72.24518,18.64437],[-72.2456,18.64364],[-72.24562,18.64372],[-72.24574,18.64363],[-72.24723,18.64378],[-72.24853,18.64441],[-72.24918,18.64397],[-72.25155,18.64418],[-72.25382,18.64516],[-72.2546,18.64564],[-72.25517,18.64642],[-72.2554,18.64807],[-72.25531,18.64812],[-72.2552,18.64828],[-72.2555,18.64881],[-72.25586,18.64847],[-72.25603,18.64856],[-72.25625,18.64848],[-72.25685,18.64755],[-72.25965,18.64494],[-72.26253,18.64336],[-72.26304,18.64362],[-72.26388,18.64308],[-72.26486,18.64445],[-72.26525,18.64373],[-72.26533,18.64378],[-72.26576,18.64259],[-72.26652,18.64289],[-72.26641,18.64135],[-72.26714,18.64137],[-72.26737,18.6407],[-72.26824,18.64023],[-72.26853,18.6403],[-72.26901,18.63988],[-72.26908,18.63978],[-72.26948,18.63958],[-72.27214,18.63895],[-72.27383,18.63988],[-72.27375,18.64004],[-72.27476,18.64088],[-72.27501,18.64054],[-72.27622,18.64161],[-72.27639,18.64131],[-72.27652,18.64138],[-72.27845,18.643],[-72.27896,18.64273],[-72.2823,18.64457],[-72.28387,18.64607],[-72.28384,18.64611],[-72.28412,18.64641],[-72.28401,18.64647],[-72.28455,18.6471],[-72.28538,18.64803],[-72.28569,18.64785],[-72.28642,18.64857],[-72.28724,18.64936],[-72.28775,18.65003],[-72.28724,18.65028],[-72.28768,18.65089],[-72.28708,18.65122],[-72.28656,18.65188],[-72.28736,18.6532],[-72.2872,18.65332],[-72.2873,18.65355],[-72.28905,18.65383],[-72.28882,18.65459],[-72.28889,18.6546],[-72.28878,18.65512],[-72.29013,18.65481],[-72.29084,18.65766],[-72.2902,18.65767],[-72.29076,18.66015],[-72.28998,18.66022],[-72.29045,18.66151],[-72.29022,18.66161],[-72.29033,18.66256],[-72.29138,18.66227],[-72.29155,18.66276],[-72.29368,18.66243],[-72.29377,18.663],[-72.29441,18.66289],[-72.29444,18.66273],[-72.29656,18.66246],[-72.29662,18.66262],[-72.29708,18.66261],[-72.29692,18.66184],[-72.30025,18.66195],[-72.30141,18.66311],[-72.30141,18.66397],[-72.30192,18.66392],[-72.30197,18.66454],[-72.30311,18.66471],[-72.30471,18.66632],[-72.30471,18.66668],[-72.30505,18.66666],[-72.30529,18.66692],[-72.30519,18.66768],[-72.30607,18.66759],[-72.30749,18.66901],[-72.30782,18.67109],[-72.30784,18.67216],[-72.30757,18.67405],[-72.30716,18.67526],[-72.30674,18.67537],[-72.30687,18.67599],[-72.30657,18.67612],[-72.30611,18.67602],[-72.30585,18.67705],[-72.30607,18.67726],[-72.3061,18.67744],[-72.30635,18.678],[-72.30609,18.67871],[-72.30587,18.67881],[-72.3059,18.67951],[-72.30556,18.68062],[-72.30395,18.68368],[-72.30377,18.68373],[-72.30139,18.68415],[-72.29912,18.68452],[-72.29899,18.68432],[-72.29826,18.6844],[-72.29828,18.6845],[-72.29502,18.68412],[-72.29419,18.68422],[-72.29408,18.68376],[-72.29202,18.68398],[-72.29191,18.68364],[-72.29101,18.68377],[-72.29095,18.68347],[-72.29037,18.68378],[-72.29035,18.68363],[-72.28936,18.68384],[-72.28913,18.68345],[-72.28766,18.6835],[-72.2877,18.68329],[-72.28538,18.68344],[-72.2849,18.68243],[-72.28449,18.68243],[-72.28376,18.68198],[-72.28268,18.68186],[-72.2822,18.68284],[-72.28268,18.68296],[-72.28164,18.68413],[-72.28111,18.68523],[-72.28129,18.68628],[-72.28089,18.68726],[-72.28036,18.68726],[-72.28036,18.68762],[-72.2715,18.688],[-72.2715,18.68774],[-72.27171,18.6875],[-72.27193,18.68611],[-72.2713,18.68611],[-72.27115,18.68635],[-72.27115,18.68735],[-72.26903,18.68805],[-72.26661,18.68821],[-72.26315,18.68817],[-72.25798,18.6868],[-72.25503,18.68501],[-72.25415,18.68242],[-72.25408,18.68278],[-72.25266,18.68732],[-72.25106,18.68819],[-72.24828,18.68927],[-72.24695,18.68917],[-72.24718,18.68966],[-72.24628,18.68966],[-72.24632,18.68997],[-72.24527,18.69032],[-72.24487,18.69045],[-72.24361,18.69036],[-72.24351,18.69029],[-72.24321,18.6903],[-72.24318,18.69051],[-72.24324,18.69061],[-72.24325,18.691],[-72.24303,18.69122],[-72.24166,18.69171],[-72.24149,18.69178],[-72.2406,18.69192]],[[-72.27545,18.56614],[-72.27419,18.56701],[-72.27356,18.56701],[-72.27297,18.56706],[-72.27227,18.56707],[-72.27191,18.56707],[-72.27178,18.56718],[-72.2709,18.56724],[-72.27064,18.56724],[-72.26998,18.56708],[-72.26875,18.56671],[-72.2684,18.56661],[-72.26809,18.56639],[-72.26781,18.56611],[-72.26744,18.5652],[-72.26739,18.56308],[-72.26738,18.5626],[-72.26742,18.56195],[-72.26799,18.56064],[-72.26822,18.56014],[-72.26856,18.55975],[-72.26871,18.55962],[-72.2702,18.55963],[-72.27181,18.55967],[-72.27491,18.55982],[-72.27579,18.55986],[-72.27588,18.55999],[-72.2758,18.56491],[-72.27578,18.56541],[-72.27575,18.56556],[-72.27552,18.56608],[-72.27545,18.56614]],[[-72.33318,18.56014],[-72.33166,18.55959],[-72.33021,18.55904],[-72.32919,18.55866],[-72.3292,18.55861],[-72.32887,18.55838],[-72.32868,18.55826],[-72.3282,18.55827],[-72.32815,18.55828],[-72.3261,18.55752],[-72.32604,18.5575],[-72.32604,18.55745],[-72.32589,18.55732],[-72.32551,18.5573],[-72.32437,18.55688],[-72.32411,18.55678],[-72.32379,18.55662],[-72.32348,18.55633],[-72.32315,18.55628],[-72.32174,18.55556],[-72.32143,18.55541],[-72.3205,18.55488],[-72.32019,18.5547],[-72.32007,18.55453],[-72.31984,18.55412],[-72.31984,18.55385],[-72.31998,18.55322],[-72.32046,18.55124],[-72.32056,18.55083],[-72.32066,18.55047],[-72.32068,18.55039],[-72.32111,18.54857],[-72.32127,18.54791],[-72.32147,18.54719],[-72.32153,18.54699],[-72.322,18.5458],[-72.32203,18.54575],[-72.32354,18.54486],[-72.3236,18.54483],[-72.3236,18.54481],[-72.32486,18.54407],[-72.32534,18.54378],[-72.32533,18.5439],[-72.32534,18.54392],[-72.32555,18.54416],[-72.32588,18.54452],[-72.3259,18.54453],[-72.32621,18.54452],[-72.3266,18.54452],[-72.32666,18.54398],[-72.32669,18.54367],[-72.32666,18.54361],[-72.32666,18.54356],[-72.32669,18.54356],[-72.32677,18.5436],[-72.32704,18.54363],[-72.32714,18.5432],[-72.32713,18.54314],[-72.32704,18.54317],[-72.32697,18.54316],[-72.32698,18.54296],[-72.32697,18.54293],[-72.32697,18.54281],[-72.32728,18.54263],[-72.32814,18.5424],[-72.32864,18.54226],[-72.3297,18.54228],[-72.32979,18.54228],[-72.33174,18.54279],[-72.33242,18.54298],[-72.33329,18.54319],[-72.33328,18.54321],[-72.33529,18.54372],[-72.33589,18.54387],[-72.33689,18.54504],[-72.33734,18.54555],[-72.33761,18.546],[-72.33783,18.54639],[-72.33788,18.54658],[-72.33791,18.54693],[-72.33792,18.54705],[-72.33763,18.54705],[-72.33749,18.54705],[-72.33751,18.54753],[-72.33751,18.54764],[-72.33747,18.54764],[-72.33748,18.54773],[-72.33742,18.54773],[-72.33739,18.54776],[-72.33735,18.54773],[-72.33734,18.54774],[-72.33726,18.54774],[-72.33725,18.54782],[-72.33725,18.54804],[-72.33728,18.548],[-72.3373,18.54798],[-72.3373,18.54796],[-72.33737,18.54788],[-72.33739,18.54789],[-72.33741,18.5478],[-72.33744,18.5478],[-72.33755,18.5477],[-72.33752,18.54764],[-72.33773,18.54741],[-72.33775,18.54741],[-72.33775,18.54737],[-72.33789,18.54721],[-72.3389,18.54828],[-72.33902,18.54842],[-72.34008,18.55026],[-72.34014,18.55034],[-72.34028,18.55068],[-72.34041,18.55099],[-72.34029,18.55156],[-72.34021,18.55185],[-72.33985,18.55283],[-72.33973,18.55315],[-72.33927,18.55425],[-72.33914,18.55457],[-72.33915,18.55458],[-72.3391,18.5547],[-72.33896,18.55506],[-72.33847,18.55626],[-72.33842,18.55625],[-72.33844,18.55631],[-72.33832,18.55661],[-72.33822,18.55686],[-72.33821,18.55687],[-72.33816,18.55699],[-72.33815,18.55698],[-72.33807,18.557],[-72.33803,18.557],[-72.33806,18.55726],[-72.338,18.55742],[-72.33716,18.5593],[-72.33709,18.55945],[-72.33843,18.55931],[-72.33929,18.55922],[-72.33982,18.55941],[-72.33983,18.55943],[-72.34028,18.55975],[-72.34092,18.5598],[-72.34096,18.5598],[-72.34413,18.5609],[-72.3446,18.56107],[-72.34472,18.56111],[-72.34472,18.56109],[-72.34829,18.5623],[-72.34912,18.5626],[-72.35035,18.56335],[-72.35302,18.56496],[-72.35333,18.56616],[-72.35351,18.56901],[-72.35337,18.56949],[-72.35156,18.57185],[-72.35042,18.57341],[-72.35036,18.57338],[-72.34849,18.57592],[-72.34815,18.57636],[-72.34756,18.57636],[-72.34753,18.57634],[-72.34746,18.57647],[-72.34745,18.57639],[-72.34705,18.57703],[-72.34659,18.57672],[-72.34649,18.57683],[-72.34544,18.57618],[-72.34365,18.57629],[-72.34361,18.57636],[-72.34354,18.57631],[-72.34258,18.5764],[-72.34252,18.57699],[-72.3428,18.57707],[-72.343,18.57715],[-72.3429,18.57737],[-72.34338,18.5774],[-72.34321,18.57803],[-72.34324,18.57803],[-72.3432,18.57816],[-72.3444,18.57852],[-72.34395,18.57972],[-72.34414,18.57976],[-72.34377,18.58067],[-72.34424,18.58074],[-72.34398,18.58155],[-72.34388,18.58181],[-72.34392,18.5818],[-72.34371,18.5823],[-72.34375,18.58229],[-72.34371,18.58237],[-72.34283,18.58355],[-72.3424,18.58413],[-72.34238,18.58411],[-72.34234,18.58411],[-72.34209,18.58403],[-72.34207,18.58434],[-72.342,18.58433],[-72.34192,18.58474],[-72.34192,18.58477],[-72.34118,18.58575],[-72.3408,18.58627],[-72.34024,18.58655],[-72.33983,18.58675],[-72.33542,18.58843],[-72.33539,18.58845],[-72.33539,18.58843],[-72.33517,18.58851],[-72.3346,18.58806],[-72.33372,18.58896],[-72.33361,18.58917],[-72.33295,18.58941],[-72.33253,18.58912],[-72.33252,18.58916],[-72.33168,18.58889],[-72.33157,18.5891],[-72.33152,18.58918],[-72.33153,18.58917],[-72.33152,18.5892],[-72.33158,18.58929],[-72.33161,18.58934],[-72.33136,18.58951],[-72.33134,18.58953],[-72.33135,18.58954],[-72.3313,18.58963],[-72.33132,18.58976],[-72.33112,18.58977],[-72.33118,18.58983],[-72.33097,18.59017],[-72.33011,18.5905],[-72.32965,18.59068],[-72.32418,18.59182],[-72.3238,18.59189],[-72.32228,18.59068],[-72.32079,18.58947],[-72.32076,18.58801],[-72.32078,18.588],[-72.32078,18.58706],[-72.32073,18.58691],[-72.32073,18.58626],[-72.32092,18.58625],[-72.32081,18.58589],[-72.32074,18.58593],[-72.3207,18.58531],[-72.32114,18.58437],[-72.32185,18.58274],[-72.32202,18.58277],[-72.3222,18.58276],[-72.32211,18.58251],[-72.32196,18.58249],[-72.32242,18.5815],[-72.32245,18.5815],[-72.32295,18.58034],[-72.32368,18.579],[-72.32465,18.57947],[-72.32575,18.57852],[-72.32661,18.5778],[-72.32721,18.57838],[-72.32824,18.57817],[-72.32848,18.57756],[-72.32855,18.5776],[-72.32938,18.57666],[-72.32907,18.57629],[-72.32936,18.57607],[-72.32877,18.57563],[-72.32975,18.57451],[-72.32968,18.57443],[-72.32989,18.57408],[-72.32994,18.57359],[-72.3296,18.57363],[-72.32997,18.57247],[-72.33009,18.57153],[-72.33017,18.57152],[-72.33047,18.57045],[-72.3314,18.57052],[-72.33167,18.56999],[-72.33027,18.56999],[-72.33025,18.57003],[-72.33006,18.57004],[-72.3297,18.57],[-72.32981,18.56877],[-72.32877,18.56765],[-72.32858,18.56749],[-72.32877,18.56711],[-72.32912,18.5668],[-72.32897,18.56664],[-72.32938,18.56572],[-72.32946,18.56554],[-72.33052,18.56424],[-72.33056,18.56424],[-72.33056,18.5642],[-72.33105,18.56367],[-72.33112,18.56374],[-72.33111,18.56376],[-72.33117,18.56377],[-72.33131,18.56391],[-72.33153,18.5641],[-72.33154,18.56385],[-72.33161,18.56365],[-72.33168,18.56329],[-72.33169,18.56322],[-72.33171,18.56319],[-72.33181,18.5628],[-72.33187,18.5626],[-72.33299,18.56123],[-72.33318,18.561],[-72.33365,18.56064],[-72.33393,18.56042],[-72.33367,18.56033],[-72.33367,18.56027],[-72.33332,18.56011],[-72.33318,18.56014]],[[-72.31173,18.56168],[-72.31195,18.56259],[-72.31221,18.56365],[-72.31259,18.56628],[-72.31254,18.5663],[-72.31264,18.56654],[-72.31266,18.56682],[-72.3127,18.56687],[-72.31276,18.56734],[-72.31256,18.56746],[-72.31232,18.56754],[-72.31229,18.56757],[-72.31199,18.5677],[-72.31216,18.56801],[-72.31227,18.56815],[-72.31231,18.56828],[-72.31239,18.56841],[-72.31291,18.56909],[-72.31281,18.56916],[-72.31306,18.56945],[-72.31309,18.56956],[-72.31323,18.57061],[-72.31325,18.57137],[-72.31325,18.57213],[-72.31234,18.57268],[-72.31117,18.57341],[-72.30971,18.5739],[-72.30911,18.5739],[-72.30894,18.57369],[-72.3086,18.57389],[-72.30712,18.57389],[-72.307,18.57357],[-72.30666,18.57388],[-72.30605,18.57389],[-72.30581,18.57367],[-72.30555,18.57388],[-72.3007,18.57387],[-72.30059,18.57369],[-72.30044,18.57386],[-72.29691,18.57388],[-72.29518,18.57386],[-72.295,18.57371],[-72.29473,18.57341],[-72.29387,18.5722],[-72.29341,18.57156],[-72.29338,18.57142],[-72.2933,18.57075],[-72.29338,18.57008],[-72.29349,18.56992],[-72.29361,18.56978],[-72.29361,18.56985],[-72.29378,18.56959],[-72.29364,18.56957],[-72.29345,18.56951],[-72.29358,18.56919],[-72.29389,18.56859],[-72.29373,18.56847],[-72.29359,18.56827],[-72.29359,18.5681],[-72.29379,18.5679],[-72.29403,18.56774],[-72.29387,18.56762],[-72.29368,18.56743],[-72.29396,18.56457],[-72.29411,18.56426],[-72.29401,18.56418],[-72.29402,18.5638],[-72.29412,18.56283],[-72.29451,18.56209],[-72.29462,18.56196],[-72.29767,18.5617],[-72.29849,18.56192],[-72.29864,18.56184],[-72.29857,18.56174],[-72.2988,18.56157],[-72.30144,18.56133],[-72.30181,18.56176],[-72.30228,18.56125],[-72.30275,18.56122],[-72.30427,18.56126],[-72.30505,18.56147],[-72.30522,18.5613],[-72.30609,18.56132],[-72.30821,18.56138],[-72.31173,18.56168]]]},{id:"DroneImageryCanaanHaitiNovember2015",name:"Drone Imagery Canaan(Haiti) November 2015",type:"tms",template:"http://wms.openstreetmap.fr/tms/1.0.0/haiti_canaan_nov2015/{zoom}/{x}/{y}",endDate:"2015-11-01T00:00:00.000Z",startDate:"2015-11-01T00:00:00.000Z",polygon:[[[-72.23109,18.67676],[-72.23101,18.67675],[-72.23108,18.67675],[-72.23104,18.67669],[-72.23105,18.67665],[-72.23151,18.67663],[-72.23153,18.67665],[-72.23146,18.67676],[-72.23285,18.67669],[-72.23506,18.67641],[-72.23507,18.67638],[-72.23507,18.67635],[-72.23505,18.67635],[-72.23511,18.6762],[-72.23509,18.67614],[-72.23523,18.67613],[-72.23522,18.67611],[-72.23523,18.67606],[-72.2352,18.67598],[-72.23515,18.6758],[-72.23629,18.67565],[-72.23625,18.67553],[-72.23624,18.67551],[-72.23648,18.67548],[-72.23648,18.67565],[-72.23648,18.67581],[-72.23689,18.67575],[-72.2372,18.67571],[-72.23747,18.67567],[-72.23772,18.67563],[-72.23805,18.6756],[-72.23854,18.67555],[-72.23888,18.67552],[-72.239,18.67551],[-72.23897,18.67565],[-72.23897,18.67571],[-72.23901,18.67576],[-72.239,18.67576],[-72.23902,18.67584],[-72.23905,18.67589],[-72.23929,18.67587],[-72.23981,18.67581],[-72.24059,18.67571],[-72.24142,18.67561],[-72.24177,18.67556],[-72.24179,18.67553],[-72.2421,18.67551],[-72.24272,18.67545],[-72.24276,18.67536],[-72.24278,18.67537],[-72.24279,18.67537],[-72.24299,18.67536],[-72.24334,18.67535],[-72.24339,18.67535],[-72.2434,18.67534],[-72.24372,18.67532],[-72.24424,18.67525],[-72.24443,18.67509],[-72.2474,18.67253],[-72.24731,18.67233],[-72.24681,18.67157],[-72.2469,18.67061],[-72.24652,18.67055],[-72.24661,18.66991],[-72.24669,18.66991],[-72.24688,18.66884],[-72.24707,18.66789],[-72.24709,18.66749],[-72.24728,18.66743],[-72.24716,18.66691],[-72.24717,18.66642],[-72.24703,18.66644],[-72.24701,18.66616],[-72.24971,18.66598],[-72.24947,18.66475],[-72.24989,18.66489],[-72.24989,18.66507],[-72.25113,18.66515],[-72.25102,18.66548],[-72.25111,18.66548],[-72.25111,18.66559],[-72.25219,18.66551],[-72.25387,18.66554],[-72.25387,18.66563],[-72.25551,18.66559],[-72.25638,18.66484],[-72.25719,18.66359],[-72.25763,18.66208],[-72.25768,18.65694],[-72.25779,18.64996],[-72.25713,18.64563],[-72.25696,18.64517],[-72.25564,18.64352],[-72.2493,18.64358],[-72.2482,18.64361],[-72.24637,18.64397],[-72.24629,18.64462],[-72.24454,18.64436],[-72.24442,18.64527],[-72.24311,18.6455],[-72.24326,18.64639],[-72.24286,18.64794],[-72.24272,18.64801],[-72.24282,18.6482],[-72.24257,18.64894],[-72.24109,18.64902],[-72.24109,18.64918],[-72.2405,18.64906],[-72.24036,18.6495],[-72.2403,18.64863],[-72.23753,18.64915],[-72.23664,18.64899],[-72.23666,18.64883],[-72.23582,18.64888],[-72.23488,18.64878],[-72.23487,18.64893],[-72.2338,18.649],[-72.23384,18.64932],[-72.23262,18.64927],[-72.2325,18.64824],[-72.23028,18.64837],[-72.23028,18.64821],[-72.22743,18.64815],[-72.2263,18.64775],[-72.22608,18.64845],[-72.22583,18.64841],[-72.22576,18.64828],[-72.22417,18.64849],[-72.22417,18.64805],[-72.22166,18.64804],[-72.21921,18.6485],[-72.21767,18.64995],[-72.21719,18.6509],[-72.21637,18.65422],[-72.21633,18.65888],[-72.21633,18.66198],[-72.2171,18.66448],[-72.21737,18.66441],[-72.21814,18.66454],[-72.21864,18.66568],[-72.21837,18.66588],[-72.21881,18.66817],[-72.21881,18.66893],[-72.21846,18.66888],[-72.21884,18.67018],[-72.22015,18.67173],[-72.22175,18.67311],[-72.22175,18.67288],[-72.2225,18.67317],[-72.22257,18.67357],[-72.22241,18.67368],[-72.22489,18.67588],[-72.2287,18.67693],[-72.23073,18.6768],[-72.23111,18.67678],[-72.23109,18.67676]]]},{id:"drone-imagery-2016",name:"Drone Imagery Matthew(Haiti) October 2016",type:"tms",template:"https://imagery.openstreetmap.fr/tms/1.0.0/haiti_uav_201610/{zoom}/{x}/{y}",endDate:"2016-10-01T00:00:00.000Z",startDate:"2016-10-01T00:00:00.000Z",polygon:[[[-74.11291,18.64948],[-74.10903,18.64598],[-74.10873,18.64446],[-74.1095,18.64452],[-74.1095,18.64181],[-74.10968,18.64187],[-74.11053,18.64103],[-74.10988,18.64034],[-74.11005,18.64014],[-74.11005,18.64009],[-74.11011,18.64002],[-74.10949,18.63959],[-74.1095,18.63924],[-74.10904,18.63926],[-74.10894,18.63917],[-74.10905,18.63912],[-74.10898,18.63899],[-74.10782,18.63839],[-74.10823,18.63775],[-74.10812,18.63764],[-74.10786,18.63774],[-74.10768,18.63733],[-74.10748,18.63719],[-74.10722,18.63559],[-74.10901,18.63394],[-74.11678,18.62847],[-74.11952,18.62815],[-74.12251,18.63132],[-74.12731,18.63703],[-74.12684,18.6374],[-74.12731,18.63771],[-74.12768,18.63756],[-74.13403,18.64671],[-74.13401,18.64897],[-74.13087,18.65167],[-74.13076,18.65153],[-74.13053,18.65179],[-74.13054,18.65195],[-74.12878,18.65342],[-74.1274,18.65412],[-74.12514,18.65497],[-74.11997,18.65432],[-74.11938,18.65429],[-74.11291,18.64948]],[[-74.11305,18.4922],[-74.10884,18.49216],[-74.10118,18.49095],[-74.10105,18.49057],[-74.10131,18.4902],[-74.10101,18.48996],[-74.10142,18.48933],[-74.10099,18.48931],[-74.1009,18.48886],[-74.10166,18.48725],[-74.10108,18.48713],[-74.10133,18.48664],[-74.10058,18.48654],[-74.10048,18.48552],[-74.10062,18.4849],[-74.10037,18.48478],[-74.10012,18.4827],[-74.09994,18.48123],[-74.10033,18.48114],[-74.10242,18.48116],[-74.10492,18.48149],[-74.10771,18.48189],[-74.1099,18.48226],[-74.10987,18.48243],[-74.10992,18.48246],[-74.11018,18.48232],[-74.11196,18.48261],[-74.11247,18.48278],[-74.11316,18.48382],[-74.1134,18.48521],[-74.11349,18.48709],[-74.11338,18.48704],[-74.11336,18.48717],[-74.11349,18.48727],[-74.11355,18.48931],[-74.11349,18.48949],[-74.1135,18.48951],[-74.11349,18.48952],[-74.11347,18.48951],[-74.11334,18.48957],[-74.11336,18.48962],[-74.11341,18.48958],[-74.11344,18.48959],[-74.11349,18.48956],[-74.11352,18.48957],[-74.11355,18.48956],[-74.11357,18.48998],[-74.11359,18.49067],[-74.11354,18.49108],[-74.11322,18.492],[-74.11305,18.4922]],[[-74.10198,18.24954],[-74.09767,18.24744],[-74.09419,18.2474],[-74.09338,18.24885],[-74.09638,18.25292],[-74.09934,18.25335],[-74.10198,18.24954]],[[-74.02901,18.59744],[-74.02881,18.60255],[-74.00847,18.60182],[-74.00867,18.59671],[-74.02901,18.59744]],[[-73.91991,18.07466],[-73.91468,18.07482],[-73.91535,18.07742],[-73.91478,18.08009],[-73.91997,18.08014],[-73.91924,18.07802],[-73.91999,18.07637],[-73.91991,18.07466]],[[-74.22365,18.3081],[-74.22061,18.30272],[-74.21902,18.30278],[-74.21592,18.30364],[-74.21615,18.30804],[-74.22365,18.3081]],[[-74.00508,18.17646],[-74.00072,18.17657],[-74.00186,18.18175],[-74.00269,18.18344],[-74.00653,18.18336],[-74.00715,18.18218],[-74.00649,18.18056],[-74.0052,18.17922],[-74.00508,18.17646]],[[-74.0653,18.22881],[-74.06361,18.2268],[-74.06114,18.22672],[-74.05968,18.22853],[-74.06281,18.23083],[-74.06446,18.23034],[-74.0653,18.22881]],[[-74.11371,18.47184],[-74.11002,18.47177],[-74.10959,18.47536],[-74.11341,18.47497],[-74.11371,18.47184]],[[-73.95852,18.47452],[-73.95446,18.47465],[-73.95548,18.4794],[-73.95965,18.47878],[-73.95852,18.47452]],[[-74.16719,18.27229],[-74.16196,18.27232],[-74.16175,18.27303],[-74.16255,18.27452],[-74.16372,18.27542],[-74.16341,18.27749],[-74.16404,18.27854],[-74.16756,18.27868],[-74.16742,18.27592],[-74.16775,18.27416],[-74.16719,18.27229]],[[-74.11091,18.45286],[-74.10701,18.45258],[-74.10684,18.4586],[-74.11102,18.45781],[-74.11091,18.45286]],[[-73.76854,18.18022],[-73.75773,18.18006],[-73.73559,18.19311],[-73.73567,18.20143],[-73.74563,18.20191],[-73.74468,18.22311],[-73.77121,18.22417],[-73.77129,18.20844],[-73.76915,18.2064],[-73.76854,18.18022]],[[-74.13455,18.60914],[-74.1388,18.60929],[-74.13871,18.61165],[-74.13447,18.6115],[-74.13455,18.60914]],[[-74.04228,18.20945],[-74.042,18.20484],[-74.04155,18.20239],[-74.03959,18.20051],[-74.03836,18.20028],[-74.03764,18.20242],[-74.03792,18.20562],[-74.03918,18.20932],[-74.04228,18.20945]],[[-74.08668,18.61121],[-74.08669,18.61217],[-74.09146,18.61689],[-74.09211,18.61603],[-74.09313,18.61699],[-74.09603,18.62025],[-74.09627,18.6206],[-74.0967,18.62202],[-74.09337,18.62651],[-74.09237,18.62754],[-74.08862,18.62596],[-74.08863,18.62561],[-74.08778,18.62561],[-74.08661,18.6251],[-74.08662,18.62368],[-74.08514,18.62367],[-74.08462,18.62289],[-74.08463,18.62175],[-74.08339,18.62174],[-74.08261,18.62057],[-74.08262,18.61982],[-74.07659,18.6198],[-74.07658,18.61596],[-74.07255,18.61591],[-74.07259,18.61403],[-74.07062,18.61402],[-74.06858,18.6129],[-74.06855,18.61208],[-74.06614,18.61207],[-74.06414,18.61206],[-74.0625,18.61105],[-74.06254,18.61011],[-74.05927,18.61013],[-74.0545,18.60876],[-74.05451,18.60817],[-74.05168,18.60816],[-74.04932,18.60776],[-74.04647,18.60664],[-74.04646,18.6062],[-74.04243,18.6062],[-74.04133,18.60592],[-74.03625,18.60378],[-74.03597,18.60345],[-74.03642,18.60252],[-74.03719,18.6019],[-74.04003,18.60217],[-74.05608,18.60473],[-74.05851,18.6054],[-74.05861,18.60623],[-74.0611,18.60627],[-74.06481,18.60745],[-74.06518,18.60686],[-74.06679,18.60802],[-74.0696,18.60885],[-74.07142,18.60711],[-74.07239,18.60736],[-74.07515,18.61024],[-74.07701,18.61019],[-74.07798,18.61096],[-74.07901,18.61013],[-74.08109,18.61234],[-74.08234,18.60896],[-74.08383,18.60922],[-74.08513,18.60977],[-74.08668,18.61121]],[[-74.45922,18.4663],[-74.45589,18.46471],[-74.44779,18.47],[-74.44693,18.4713],[-74.44726,18.47934],[-74.44554,18.47915],[-74.44515,18.48326],[-74.43968,18.4839],[-74.439,18.48762],[-74.44299,18.49004],[-74.44906,18.49104],[-74.45382,18.49311],[-74.45571,18.49635],[-74.45786,18.49725],[-74.46052,18.49523],[-74.46241,18.49143],[-74.46198,18.48799],[-74.45537,18.48597],[-74.45526,18.47111],[-74.45944,18.46871],[-74.45922,18.4663]],[[-74.41888,18.57551],[-74.41499,18.57331],[-74.41045,18.57648],[-74.40824,18.58233],[-74.40954,18.58894],[-74.4112,18.59195],[-74.41081,18.59689],[-74.41663,18.60063],[-74.42178,18.59671],[-74.42146,18.59416],[-74.41745,18.59419],[-74.41753,18.59067],[-74.41538,18.59002],[-74.41533,18.58382],[-74.41652,18.58382],[-74.41756,18.5814],[-74.41756,18.57967],[-74.41924,18.57754],[-74.41888,18.57551]]]},{id:"Erlangen-2011",name:"Erlangen Luftbild (2011 5,0 cm)",type:"wms",template:"https://secure.erlangen.de/arcgiser/services/Luftbilder2011/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Erlangen_ratio10_5cm_gk4.jp2&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2011-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",polygon:[[[10.92791,49.53196],[10.97194,49.52969],[10.97821,49.53568],[10.99934,49.53589],[11.03214,49.53089],[11.04425,49.54317],[11.03842,49.55239],[11.03663,49.57167],[11.04029,49.58572],[11.07287,49.58587],[11.07243,49.63486],[11.0054,49.6344],[11.00397,49.62599],[10.9748,49.62541],[10.94293,49.64563],[10.92532,49.64876],[10.91002,49.63793],[10.92235,49.60463],[10.91949,49.57823],[10.91135,49.57095],[10.91256,49.5606],[10.92907,49.55674],[10.92791,49.53196]]],terms_text:"© Stadt Erlangen | © Aerowest GmbH"},{id:"Erlangen-2013",name:"Erlangen Luftbild (2013 6,25 cm)",type:"wms",template:"https://secure.erlangen.de/arcgiser/services/Luftbilder2013/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Erlangen_ratio5_6.25cm.jp2&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",polygon:[[[10.92791,49.53196],[10.9726,49.52939],[10.97909,49.53475],[10.99934,49.53589],[11.03214,49.53089],[11.04425,49.54317],[11.03842,49.55239],[11.03743,49.57873],[11.0568,49.592],[11.05748,49.61358],[11.04681,49.61447],[11.04788,49.6187],[11.00308,49.62367],[10.98107,49.62339],[10.98069,49.62617],[10.96737,49.62781],[10.96539,49.63415],[10.94293,49.64563],[10.92532,49.64876],[10.91002,49.63793],[10.92235,49.60463],[10.91949,49.57823],[10.91135,49.57095],[10.91256,49.5606],[10.92907,49.55674],[10.92791,49.53196]]],terms_text:"© Stadt Erlangen | © Aerowest GmbH"},{id:"Erlangen-2016",name:"Erlangen Luftbild (2016 5,0 cm)",type:"tms",template:"https://osm.rrze.fau.de/protected/YgktSWTTo6HS9nKi/lbe2016/{zoom}/{x}/{y}.jpg",endDate:"2016-03-18T00:00:00.000Z",startDate:"2016-03-18T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[10.97664,49.53765],[10.99101,49.53392],[10.99389,49.53835],[11.02784,49.53254],[11.0346,49.53462],[11.03407,49.53759],[11.04318,49.54321],[11.03557,49.55303],[11.0384,49.55842],[11.03508,49.56929],[11.03791,49.58659],[11.04797,49.5902],[11.04922,49.5937],[11.05749,49.59521],[11.05623,49.59905],[11.05127,49.6003],[11.05351,49.60904],[11.04309,49.61381],[11.04076,49.61823],[11.0285,49.61735],[11.01929,49.61896],[11.0152,49.61372],[11.00581,49.61448],[11.00639,49.61931],[11.00083,49.6221],[10.9856,49.61651],[10.97837,49.61753],[10.9737,49.62495],[10.96539,49.62557],[10.96063,49.62856],[10.96382,49.63176],[10.95474,49.6379],[10.94837,49.637],[10.94185,49.64377],[10.9273,49.64837],[10.92063,49.63963],[10.91136,49.63773],[10.92429,49.60505],[10.92205,49.58004],[10.91221,49.57008],[10.91441,49.5618],[10.92353,49.55842],[10.92712,49.55976],[10.93345,49.55892],[10.93071,49.54467],[10.93067,49.53225],[10.9406,49.53325],[10.95488,49.53021],[10.97199,49.53126],[10.97664,49.53765]]],terms_text:"© Stadt Erlangen | © GEOCART GmbH"},{id:"Erlangen-2018",name:"Erlangen Luftbild (2018 5,0 cm)",type:"tms",template:"https://osm.rrze.fau.de/protected/YgktSWTTo6HS9nKi/lbe2018/{zoom}/{x}/{y}.jpg",endDate:"2018-04-09T00:00:00.000Z",startDate:"2018-04-09T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[10.85157,49.55172],[10.93037,49.55272],[10.9326,49.55818],[10.91627,49.55882],[10.91144,49.56652],[10.92281,49.60584],[10.9108,49.63751],[10.92775,49.64838],[10.94444,49.64321],[10.96487,49.63317],[10.96384,49.62711],[10.9745,49.62483],[10.9786,49.61794],[10.98478,49.61694],[10.998,49.62228],[11.00813,49.62194],[11.0071,49.61449],[11.01448,49.61394],[11.02081,49.62292],[11.05757,49.63993],[11.08136,49.62614],[11.08312,49.62034],[11.10419,49.61524],[11.11767,49.61449],[11.11997,49.60377],[11.13132,49.60348],[11.1272,49.58815],[11.10271,49.58378],[11.08898,49.59124],[11.07988,49.60837],[11.05808,49.60971],[11.06049,49.59803],[11.06512,49.59614],[11.0689,49.58879],[11.06031,49.58556],[11.04469,49.58913],[11.03851,49.58556],[11.03577,49.57276],[11.03937,49.55785],[11.04272,49.5432],[11.03465,49.5324],[10.97531,49.53467],[10.97158,49.53084],[10.94279,49.52986],[10.94273,49.50582],[10.92163,49.50566],[10.91245,49.51829],[10.88818,49.52834],[10.87518,49.51725],[10.84872,49.52291],[10.84652,49.52797],[10.84637,49.53223],[10.85157,49.55172]]],terms_text:"© Stadt Erlangen | © Hansa Luftbild AG",best:true},{id:"EsriWorldImagery",name:"Esri World Imagery",type:"tms",template:"https://{switch:services,server}.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/tile/{zoom}/{y}/{x}",zoomExtent:[0,22],terms_url:"https://wiki.openstreetmap.org/wiki/Esri",terms_text:"Terms & Feedback","default":true,description:"Esri world imagery.",icon:"https://osmlab.github.io/editor-layer-index/sources/world/EsriImageryClarity.png"},{id:"EsriWorldImageryClarity",name:"Esri World Imagery (Clarity) Beta",type:"tms",template:"https://clarity.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/MapServer/tile/{zoom}/{y}/{x}",zoomExtent:[0,22],terms_url:"https://wiki.openstreetmap.org/wiki/Esri",terms_text:"Terms & Feedback","default":true,description:"Esri archive imagery that may be clearer and more accurate than the default layer.",icon:"https://osmlab.github.io/editor-layer-index/sources/world/EsriImageryClarity.png"},{id:"maaamet.ee-pohi_vr2",name:"Estonia Basemap (Maaamet)",type:"wms",template:"https://kaart.maaamet.ee/wms/alus-geo?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=pohi_vr2&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[22.35364,58.85385],[22.09411,58.85038],[22.09179,58.8951],[22.00503,58.89371],[21.99979,58.98374],[22.34754,58.98845],[22.34535,59.03337],[22.51935,59.03538],[22.51556,59.1251],[22.69017,59.12686],[22.69212,59.08218],[22.77912,59.083],[22.78083,59.03814],[22.86808,59.03877],[22.8693,58.99399],[22.9563,58.99487],[22.95495,59.03959],[23.12895,59.04097],[23.12786,59.08582],[23.47671,59.0877],[23.47415,59.26726],[23.64924,59.26788],[23.64888,59.31281],[23.73698,59.313],[23.73649,59.3578],[23.91158,59.35787],[23.91207,59.4028],[24.176,59.4028],[24.17637,59.4478],[24.26446,59.44767],[24.26471,59.49236],[24.70605,59.49082],[24.70898,59.62553],[24.79744,59.62497],[24.79659,59.58009],[24.97327,59.57885],[24.97462,59.62386],[24.88603,59.62473],[24.88725,59.66918],[24.9762,59.66863],[24.9773,59.71346],[25.06601,59.71259],[25.0632,59.62306],[25.24037,59.62145],[25.24184,59.66647],[25.33055,59.66548],[25.32884,59.62078],[25.41755,59.61979],[25.41938,59.66468],[25.6855,59.66148],[25.68757,59.70613],[25.86511,59.70386],[25.86279,59.65901],[26.12855,59.65507],[26.12575,59.6101],[26.39114,59.60565],[26.38809,59.56099],[26.82967,59.55215],[26.82626,59.50729],[26.91423,59.50549],[26.91057,59.46051],[27.96689,59.43303],[27.9719,59.4778],[28.03669,59.4757],[28.04377,59.47223],[28.04767,59.46578],[28.05182,59.46342],[28.06915,59.46256],[28.08452,59.45939],[28.12174,59.44091],[28.13577,59.4277],[28.13711,59.42267],[28.14163,59.41901],[28.16652,59.41205],[28.17225,59.40789],[28.19275,59.4015],[28.21069,59.3836],[28.21069,59.37994],[28.20386,59.37459],[28.21057,59.37235],[28.21105,59.36937],[28.20678,59.36719],[28.20703,59.36377],[28.19971,59.36091],[28.20203,59.35731],[28.19263,59.35227],[28.19397,59.34642],[28.16969,59.33354],[28.13626,59.29244],[28.12515,59.28901],[28.11722,59.28895],[28.1099,59.29063],[28.05353,59.2902],[28.02022,59.28334],[27.99825,59.2753],[27.97983,59.27293],[27.96433,59.27268],[27.95335,59.26863],[27.9492,59.26533],[27.90564,59.24044],[27.90113,59.23488],[27.901,59.22639],[27.89783,59.21746],[27.90235,59.20728],[27.89234,59.19222],[27.88978,59.18379],[27.87648,59.17372],[27.87184,59.16841],[27.86818,59.16159],[27.84414,59.14814],[27.83206,59.14401],[27.82035,59.13362],[27.80986,59.12905],[27.80595,59.12166],[27.80534,59.1127],[27.81071,59.10819],[27.8101,59.10606],[27.80205,59.1028],[27.78887,59.0909],[27.7907,59.08112],[27.79375,59.07842],[27.79411,59.07566],[27.79277,59.0729],[27.79302,59.06927],[27.7885,59.06657],[27.78265,59.065],[27.77508,59.0581],[27.77313,59.05107],[27.77667,59.04743],[27.76983,59.03325],[27.76605,59.03155],[27.75153,59.03017],[27.74628,59.02716],[27.74567,59.01705],[27.74165,59.00951],[27.74787,58.99267],[27.74274,58.98845],[27.73213,58.9855],[27.6544,58.98783],[27.65501,58.99241],[27.39414,58.99964],[27.38974,58.95474],[27.12935,58.96135],[27.12557,58.9164],[27.03882,58.91841],[27.0271,58.7841],[27.11361,58.78183],[27.10934,58.73709],[27.19537,58.73512],[27.18731,58.64533],[27.27309,58.64305],[27.25259,58.41883],[27.53397,58.41142],[27.5552,58.36575],[27.51762,58.33265],[27.51408,58.32214],[27.49993,58.32246],[27.48687,58.18803],[27.52872,58.18687],[27.59205,58.11875],[27.63695,58.09735],[27.60938,58.05399],[27.62268,58.0058],[27.64489,58.00205],[27.65294,58.00644],[27.64781,58.01426],[27.64781,58.02086],[27.66172,58.01866],[27.66856,58.01045],[27.68393,58.00845],[27.6965,58.0045],[27.70065,57.99862],[27.69882,57.98827],[27.69125,57.98549],[27.68064,57.97449],[27.6821,57.9719],[27.68893,57.97184],[27.68588,57.95928],[27.65892,57.9554],[27.66758,57.951],[27.67161,57.94627],[27.66917,57.94174],[27.67649,57.93552],[27.68247,57.93655],[27.68613,57.92794],[27.68247,57.92437],[27.71078,57.92392],[27.72029,57.92036],[27.72054,57.91174],[27.70834,57.90616],[27.69882,57.90616],[27.70614,57.90136],[27.72896,57.90739],[27.74677,57.90169],[27.7536,57.90409],[27.75739,57.90318],[27.75592,57.89806],[27.76959,57.89566],[27.78094,57.89832],[27.799,57.89961],[27.81852,57.89579],[27.82096,57.89047],[27.81949,57.888],[27.81059,57.88612],[27.81827,57.88249],[27.81169,57.87204],[27.81583,57.87166],[27.8184,57.8651],[27.81632,57.86134],[27.79875,57.85205],[27.7946,57.84634],[27.80058,57.8442],[27.7957,57.84017],[27.78862,57.84186],[27.78411,57.83725],[27.77715,57.8325],[27.75849,57.83536],[27.74165,57.82679],[27.72383,57.83179],[27.70541,57.84192],[27.68771,57.83419],[27.66636,57.83653],[27.66026,57.83893],[27.64818,57.8377],[27.63634,57.83978],[27.62487,57.83751],[27.62207,57.83874],[27.59791,57.83328],[27.56252,57.83023],[27.5563,57.83127],[27.55227,57.82113],[27.54446,57.82204],[27.5452,57.81808],[27.55056,57.81769],[27.55667,57.81366],[27.5408,57.81288],[27.54471,57.808],[27.53726,57.80644],[27.53958,57.80144],[27.53592,57.79663],[27.53861,57.79396],[27.52921,57.78856],[27.5175,57.78876],[27.51847,57.79201],[27.50298,57.78798],[27.50005,57.78973],[27.4959,57.78869],[27.50774,57.78349],[27.51457,57.77516],[27.5081,57.77158],[27.51115,57.76416],[27.51591,57.7639],[27.52018,57.75993],[27.52811,57.75818],[27.53007,57.75368],[27.53116,57.74073],[27.548,57.7333],[27.5419,57.73037],[27.52799,57.72946],[27.5236,57.71616],[27.52762,57.70899],[27.5236,57.70802],[27.51652,57.70873],[27.51066,57.71101],[27.50859,57.70723],[27.49993,57.70495],[27.49529,57.70749],[27.48711,57.7191],[27.47357,57.71545],[27.47064,57.70802],[27.46149,57.70619],[27.44807,57.71616],[27.43086,57.70756],[27.42818,57.69902],[27.41341,57.69915],[27.41647,57.69524],[27.40744,57.69276],[27.40231,57.68493],[27.39133,57.68539],[27.39377,57.67913],[27.39145,57.67671],[27.38193,57.67332],[27.37779,57.66836],[27.38364,57.66059],[27.3801,57.65883],[27.38755,57.6555],[27.38047,57.6495],[27.38352,57.64799],[27.38157,57.64368],[27.39072,57.6431],[27.38816,57.64009],[27.40085,57.63742],[27.40317,57.62905],[27.40182,57.62376],[27.39597,57.62115],[27.39023,57.62036],[27.39084,57.6169],[27.40195,57.61775],[27.40634,57.61546],[27.40683,57.61246],[27.38572,57.60304],[27.37827,57.59513],[27.35692,57.59696],[27.3413,57.58984],[27.34179,57.58539],[27.32886,57.5797],[27.32141,57.57898],[27.3341,57.56596],[27.33178,57.56066],[27.33776,57.56007],[27.33886,57.54671],[27.34386,57.5454],[27.35472,57.52575],[27.35131,57.51632],[27.34569,57.52104],[27.32446,57.52274],[27.29664,57.53859],[27.28017,57.53643],[27.2737,57.54311],[27.26431,57.54377],[27.2637,57.54841],[27.25772,57.54979],[27.24796,57.54769],[27.2249,57.55385],[27.19329,57.54966],[27.16145,57.55922],[27.11654,57.56118],[27.10092,57.5653],[27.08506,57.57538],[27.07262,57.57734],[27.07225,57.57989],[27.0559,57.58251],[27.05285,57.58087],[27.04687,57.58048],[27.04492,57.58251],[27.0332,57.58532],[27.04126,57.58761],[27.04418,57.5967],[27.03101,57.60461],[26.99513,57.60461],[26.99233,57.61076],[26.98696,57.60867],[26.98366,57.61174],[26.97549,57.612],[26.97097,57.60448],[26.9595,57.60625],[26.9578,57.60468],[26.94596,57.60272],[26.93961,57.60932],[26.95133,57.61579],[26.94999,57.62056],[26.94059,57.61978],[26.92961,57.62376],[26.92644,57.6331],[26.90679,57.63304],[26.89971,57.63056],[26.90057,57.62918],[26.89581,57.62572],[26.88849,57.62357],[26.88898,57.62193],[26.87458,57.61906],[26.87275,57.61736],[26.86555,57.61592],[26.85786,57.60997],[26.86469,57.6084],[26.85811,57.60049],[26.85994,57.59598],[26.86433,57.59415],[26.86177,57.59108],[26.84688,57.5884],[26.83504,57.58244],[26.81589,57.58153],[26.80954,57.58473],[26.79685,57.58179],[26.79929,57.58002],[26.79295,57.57315],[26.78685,57.57525],[26.7766,57.55994],[26.76915,57.56039],[26.76354,57.56314],[26.75366,57.56249],[26.75817,57.5653],[26.76891,57.57041],[26.77379,57.57473],[26.76769,57.57754],[26.74804,57.5778],[26.75317,57.58009],[26.73816,57.58774],[26.72901,57.58016],[26.73828,57.57584],[26.73072,57.56903],[26.72388,57.57244],[26.71107,57.56596],[26.69972,57.57106],[26.69753,57.5706],[26.69741,57.56733],[26.69155,57.56615],[26.67569,57.56668],[26.67105,57.56327],[26.6719,57.55385],[26.66531,57.55287],[26.64652,57.55391],[26.64262,57.54658],[26.63444,57.54357],[26.61443,57.52909],[26.61712,57.50885],[26.60467,57.51212],[26.60479,57.51442],[26.5954,57.51376],[26.59479,57.51592],[26.58808,57.51619],[26.59015,57.52516],[26.58698,57.52621],[26.58771,57.53781],[26.58381,57.53957],[26.57978,57.53695],[26.57966,57.53375],[26.56123,57.5285],[26.56184,57.52261],[26.5666,57.51946],[26.55794,57.5137],[26.52585,57.51619],[26.49961,57.52451],[26.49095,57.54534],[26.46996,57.57551],[26.40151,57.57237],[26.34489,57.58408],[26.33476,57.5797],[26.32781,57.57963],[26.32635,57.58277],[26.3117,57.58473],[26.30853,57.59291],[26.3006,57.59343],[26.29291,57.59114],[26.28352,57.59232],[26.28217,57.5952],[26.27754,57.595],[26.27034,57.6001],[26.27022,57.60461],[26.25423,57.61383],[26.24715,57.62082],[26.24813,57.62775],[26.23947,57.63408],[26.24203,57.63539],[26.24667,57.63559],[26.23959,57.64649],[26.23239,57.6461],[26.23117,57.64904],[26.24215,57.65146],[26.2363,57.65753],[26.23032,57.65805],[26.21043,57.66601],[26.21372,57.66888],[26.21092,57.67071],[26.21018,57.67906],[26.20079,57.68102],[26.19896,57.68356],[26.19444,57.68519],[26.18541,57.68454],[26.17712,57.68761],[26.18871,57.69472],[26.19859,57.70906],[26.20567,57.71486],[26.1726,57.72867],[26.141,57.73278],[26.13563,57.73923],[26.13905,57.74548],[26.13551,57.7503],[26.10537,57.757],[26.08035,57.76547],[26.07974,57.76384],[26.07328,57.76371],[26.07047,57.7656],[26.05912,57.75987],[26.049,57.7611],[26.0435,57.76703],[26.03326,57.77054],[26.02374,57.76761],[26.01776,57.7723],[26.02459,57.77516],[26.02496,57.7816],[26.02252,57.78355],[26.02776,57.7898],[26.03081,57.79097],[26.03338,57.80105],[26.03679,57.80592],[26.03606,57.8108],[26.04851,57.82289],[26.05705,57.83842],[26.05558,57.84764],[26.03667,57.84926],[26.02008,57.84517],[26.00958,57.85731],[25.99848,57.85816],[25.96273,57.84491],[25.931,57.85244],[25.89537,57.84972],[25.8883,57.84595],[25.88085,57.84946],[25.88573,57.85277],[25.88427,57.85595],[25.87561,57.85796],[25.87475,57.86322],[25.8595,57.85614],[25.81923,57.86419],[25.78312,57.89948],[25.78629,57.90428],[25.77165,57.91206],[25.75102,57.91692],[25.73724,57.92295],[25.72833,57.92133],[25.72247,57.91245],[25.70356,57.90331],[25.67916,57.90461],[25.67549,57.91277],[25.66207,57.91511],[25.65609,57.91439],[25.64889,57.91666],[25.64987,57.91841],[25.63828,57.93059],[25.57983,57.9442],[25.59399,57.95961],[25.58935,57.96504],[25.58239,57.96783],[25.58044,57.9721],[25.57483,57.9741],[25.56556,57.96718],[25.56604,57.96258],[25.55714,57.96038],[25.55567,57.96711],[25.55079,57.97255],[25.53725,57.97139],[25.52566,57.97184],[25.5226,57.96802],[25.51638,57.96737],[25.51211,57.96977],[25.52212,57.97488],[25.51943,57.98031],[25.48539,57.97475],[25.47843,57.98006],[25.47843,57.98264],[25.44219,57.99616],[25.44817,58.00114],[25.46648,58.00515],[25.44817,58.01698],[25.40693,58.02893],[25.37155,58.02926],[25.36374,58.03171],[25.35336,58.04334],[25.34482,58.04676],[25.33604,58.05709],[25.3292,58.05858],[25.32664,58.0638],[25.31981,58.066],[25.31908,58.06929],[25.29553,58.08161],[25.28686,58.08149],[25.28113,58.07019],[25.266,58.06716],[25.26502,58.06],[25.27991,58.05063],[25.29309,58.0467],[25.30431,58.03449],[25.30114,58.01504],[25.29748,58.01459],[25.30285,58.00011],[25.29577,57.99972],[25.29736,57.99661],[25.30358,57.99396],[25.30138,57.99273],[25.29187,57.99286],[25.28308,57.98963],[25.26722,57.99454],[25.25611,57.9939],[25.25502,58.00347],[25.2455,58.00302],[25.22768,58.01782],[25.24587,58.01872],[25.23562,58.02286],[25.23635,58.02441],[25.22732,58.02435],[25.22537,58.02195],[25.21902,58.02977],[25.21658,58.04088],[25.22695,58.04799],[25.22817,58.05348],[25.22122,58.05302],[25.22146,58.05051],[25.2178,58.04908],[25.21597,58.05954],[25.21219,58.06226],[25.20523,58.06122],[25.20389,58.0651],[25.21621,58.07413],[25.21207,58.08052],[25.19962,58.08536],[25.18949,58.08007],[25.19169,58.07613],[25.1535,58.07478],[25.15154,58.07703],[25.13397,58.07974],[25.10579,58.07749],[25.10518,58.06645],[25.07662,58.06645],[25.02037,58.01769],[24.99512,58.01084],[24.94863,58.00942],[24.83234,57.97177],[24.80806,57.99066],[24.74229,57.98187],[24.74339,57.96491],[24.7329,57.96239],[24.71508,57.96271],[24.6919,57.94653],[24.67335,57.95896],[24.64468,57.95889],[24.64187,57.95423],[24.64577,57.95268],[24.62869,57.94193],[24.61612,57.94368],[24.60892,57.95125],[24.58464,57.96174],[24.57317,57.95436],[24.54792,57.94938],[24.54352,57.94478],[24.5301,57.94705],[24.5207,57.94303],[24.51839,57.93675],[24.5096,57.93442],[24.51326,57.93066],[24.4625,57.92496],[24.44579,57.90798],[24.46018,57.90662],[24.45225,57.89942],[24.46006,57.87977],[24.41138,57.86491],[24.40906,57.87191],[24.33707,57.87393],[24.33829,58.0109],[24.42272,58.01097],[24.42614,58.28002],[24.51155,58.2797],[24.51216,58.32471],[24.42638,58.32503],[24.42712,58.36972],[24.34182,58.37017],[24.34048,58.23547],[24.17014,58.23572],[24.17014,58.1908],[24.08485,58.19092],[24.0851,58.23605],[24.00066,58.23579],[23.99993,58.28092],[23.82971,58.28047],[23.82947,58.32554],[23.65864,58.32496],[23.65791,58.41493],[23.57225,58.41468],[23.57127,58.50436],[23.39935,58.50359],[23.40106,58.41391],[23.14421,58.41238],[23.14567,58.36735],[23.05989,58.36703],[23.06172,58.32221],[22.9757,58.32157],[22.97716,58.27681],[22.89187,58.27598],[22.89358,58.23103],[22.80865,58.2302],[22.81012,58.18539],[22.89529,58.1861],[22.89663,58.1413],[22.72641,58.13982],[22.72495,58.18475],[22.55522,58.18276],[22.55693,58.13744],[22.64173,58.13886],[22.64344,58.094],[22.38903,58.0909],[22.38525,58.18063],[22.29995,58.17967],[22.30679,58.04527],[22.22198,58.0436],[22.22626,57.95404],[22.14206,57.95281],[22.1445,57.90804],[22.06007,57.90681],[22.06263,57.86186],[21.97807,57.86043],[21.96831,58.04004],[22.05274,58.04134],[22.04506,58.17581],[21.96038,58.17471],[21.95781,58.21941],[21.78723,58.21638],[21.78211,58.30631],[21.69681,58.3049],[21.69401,58.34975],[21.77942,58.35122],[21.76795,58.53074],[22.02566,58.53488],[22.02797,58.49001],[22.11375,58.49167],[22.11144,58.53621],[22.19709,58.53742],[22.19453,58.5823],[22.45236,58.58573],[22.44638,58.7203],[22.36023,58.71916],[22.35364,58.85385]],[[23.47415,59.26726],[23.29868,59.26632],[23.29795,59.31138],[23.47293,59.31194],[23.47415,59.26726]],[[24.17014,58.1908],[24.25507,58.19073],[24.25458,58.14581],[24.17002,58.14588],[24.17014,58.1908]],[[24.08485,58.19092],[24.08497,58.10129],[23.99968,58.10116],[23.99993,58.05632],[23.91525,58.05612],[23.915,58.14613],[23.83032,58.146],[23.82971,58.23572],[23.91451,58.23585],[23.91476,58.19099],[24.08485,58.19092]],[[24.61854,59.53612],[24.44183,59.5368],[24.44309,59.62659],[24.62016,59.6258],[24.61854,59.53612]],[[26.40403,59.7852],[26.31501,59.78667],[26.31814,59.83152],[26.40732,59.82994],[26.40403,59.7852]],[[26.48308,59.649],[26.48647,59.69383],[26.57514,59.69202],[26.57166,59.64719],[26.48308,59.649]],[[23.15944,57.78408],[23.24346,57.78461],[23.24445,57.73971],[23.32848,57.74031],[23.32679,57.82998],[23.15845,57.82885],[23.15944,57.78408]]],terms_text:"Maa-Ameti põhikaart"},{id:"Maaamet-Estonia_Cadastre",name:"Estonia Cadastre (Maaamet)",type:"wms",template:"https://kaart.maaamet.ee/wms/alus-geo?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=of10000,TOPOYKSUS_6569,TOPOYKSUS_6573&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[22.35364,58.85385],[22.09411,58.85038],[22.09179,58.8951],[22.00503,58.89371],[21.99979,58.98374],[22.34754,58.98845],[22.34535,59.03337],[22.51935,59.03538],[22.51556,59.1251],[22.69017,59.12686],[22.69212,59.08218],[22.77912,59.083],[22.78083,59.03814],[22.86808,59.03877],[22.8693,58.99399],[22.9563,58.99487],[22.95495,59.03959],[23.12895,59.04097],[23.12786,59.08582],[23.47671,59.0877],[23.47415,59.26726],[23.64924,59.26788],[23.64888,59.31281],[23.73698,59.313],[23.73649,59.3578],[23.91158,59.35787],[23.91207,59.4028],[24.176,59.4028],[24.17637,59.4478],[24.26446,59.44767],[24.26471,59.49236],[24.70605,59.49082],[24.70898,59.62553],[24.79744,59.62497],[24.79659,59.58009],[24.97327,59.57885],[24.97462,59.62386],[24.88603,59.62473],[24.88725,59.66918],[24.9762,59.66863],[24.9773,59.71346],[25.06601,59.71259],[25.0632,59.62306],[25.24037,59.62145],[25.24184,59.66647],[25.33055,59.66548],[25.32884,59.62078],[25.41755,59.61979],[25.41938,59.66468],[25.6855,59.66148],[25.68757,59.70613],[25.86511,59.70386],[25.86279,59.65901],[26.12855,59.65507],[26.12575,59.6101],[26.39114,59.60565],[26.38809,59.56099],[26.82967,59.55215],[26.82626,59.50729],[26.91423,59.50549],[26.91057,59.46051],[27.96689,59.43303],[27.9719,59.4778],[28.03669,59.4757],[28.04377,59.47223],[28.04767,59.46578],[28.05182,59.46342],[28.06915,59.46256],[28.08452,59.45939],[28.12174,59.44091],[28.13577,59.4277],[28.13711,59.42267],[28.14163,59.41901],[28.16652,59.41205],[28.17225,59.40789],[28.19275,59.4015],[28.21069,59.3836],[28.21069,59.37994],[28.20386,59.37459],[28.21057,59.37235],[28.21105,59.36937],[28.20678,59.36719],[28.20703,59.36377],[28.19971,59.36091],[28.20203,59.35731],[28.19263,59.35227],[28.19397,59.34642],[28.16969,59.33354],[28.13626,59.29244],[28.12515,59.28901],[28.11722,59.28895],[28.1099,59.29063],[28.05353,59.2902],[28.02022,59.28334],[27.99825,59.2753],[27.97983,59.27293],[27.96433,59.27268],[27.95335,59.26863],[27.9492,59.26533],[27.90564,59.24044],[27.90113,59.23488],[27.901,59.22639],[27.89783,59.21746],[27.90235,59.20728],[27.89234,59.19222],[27.88978,59.18379],[27.87648,59.17372],[27.87184,59.16841],[27.86818,59.16159],[27.84414,59.14814],[27.83206,59.14401],[27.82035,59.13362],[27.80986,59.12905],[27.80595,59.12166],[27.80534,59.1127],[27.81071,59.10819],[27.8101,59.10606],[27.80205,59.1028],[27.78887,59.0909],[27.7907,59.08112],[27.79375,59.07842],[27.79411,59.07566],[27.79277,59.0729],[27.79302,59.06927],[27.7885,59.06657],[27.78265,59.065],[27.77508,59.0581],[27.77313,59.05107],[27.77667,59.04743],[27.76983,59.03325],[27.76605,59.03155],[27.75153,59.03017],[27.74628,59.02716],[27.74567,59.01705],[27.74165,59.00951],[27.74787,58.99267],[27.74274,58.98845],[27.73213,58.9855],[27.6544,58.98783],[27.65501,58.99241],[27.39414,58.99964],[27.38974,58.95474],[27.12935,58.96135],[27.12557,58.9164],[27.03882,58.91841],[27.0271,58.7841],[27.11361,58.78183],[27.10934,58.73709],[27.19537,58.73512],[27.18731,58.64533],[27.27309,58.64305],[27.25259,58.41883],[27.53397,58.41142],[27.5552,58.36575],[27.51762,58.33265],[27.51408,58.32214],[27.49993,58.32246],[27.48687,58.18803],[27.52872,58.18687],[27.59205,58.11875],[27.63695,58.09735],[27.60938,58.05399],[27.62268,58.0058],[27.64489,58.00205],[27.65294,58.00644],[27.64781,58.01426],[27.64781,58.02086],[27.66172,58.01866],[27.66856,58.01045],[27.68393,58.00845],[27.6965,58.0045],[27.70065,57.99862],[27.69882,57.98827],[27.69125,57.98549],[27.68064,57.97449],[27.6821,57.9719],[27.68893,57.97184],[27.68588,57.95928],[27.65892,57.9554],[27.66758,57.951],[27.67161,57.94627],[27.66917,57.94174],[27.67649,57.93552],[27.68247,57.93655],[27.68613,57.92794],[27.68247,57.92437],[27.71078,57.92392],[27.72029,57.92036],[27.72054,57.91174],[27.70834,57.90616],[27.69882,57.90616],[27.70614,57.90136],[27.72896,57.90739],[27.74677,57.90169],[27.7536,57.90409],[27.75739,57.90318],[27.75592,57.89806],[27.76959,57.89566],[27.78094,57.89832],[27.799,57.89961],[27.81852,57.89579],[27.82096,57.89047],[27.81949,57.888],[27.81059,57.88612],[27.81827,57.88249],[27.81169,57.87204],[27.81583,57.87166],[27.8184,57.8651],[27.81632,57.86134],[27.79875,57.85205],[27.7946,57.84634],[27.80058,57.8442],[27.7957,57.84017],[27.78862,57.84186],[27.78411,57.83725],[27.77715,57.8325],[27.75849,57.83536],[27.74165,57.82679],[27.72383,57.83179],[27.70541,57.84192],[27.68771,57.83419],[27.66636,57.83653],[27.66026,57.83893],[27.64818,57.8377],[27.63634,57.83978],[27.62487,57.83751],[27.62207,57.83874],[27.59791,57.83328],[27.56252,57.83023],[27.5563,57.83127],[27.55227,57.82113],[27.54446,57.82204],[27.5452,57.81808],[27.55056,57.81769],[27.55667,57.81366],[27.5408,57.81288],[27.54471,57.808],[27.53726,57.80644],[27.53958,57.80144],[27.53592,57.79663],[27.53861,57.79396],[27.52921,57.78856],[27.5175,57.78876],[27.51847,57.79201],[27.50298,57.78798],[27.50005,57.78973],[27.4959,57.78869],[27.50774,57.78349],[27.51457,57.77516],[27.5081,57.77158],[27.51115,57.76416],[27.51591,57.7639],[27.52018,57.75993],[27.52811,57.75818],[27.53007,57.75368],[27.53116,57.74073],[27.548,57.7333],[27.5419,57.73037],[27.52799,57.72946],[27.5236,57.71616],[27.52762,57.70899],[27.5236,57.70802],[27.51652,57.70873],[27.51066,57.71101],[27.50859,57.70723],[27.49993,57.70495],[27.49529,57.70749],[27.48711,57.7191],[27.47357,57.71545],[27.47064,57.70802],[27.46149,57.70619],[27.44807,57.71616],[27.43086,57.70756],[27.42818,57.69902],[27.41341,57.69915],[27.41647,57.69524],[27.40744,57.69276],[27.40231,57.68493],[27.39133,57.68539],[27.39377,57.67913],[27.39145,57.67671],[27.38193,57.67332],[27.37779,57.66836],[27.38364,57.66059],[27.3801,57.65883],[27.38755,57.6555],[27.38047,57.6495],[27.38352,57.64799],[27.38157,57.64368],[27.39072,57.6431],[27.38816,57.64009],[27.40085,57.63742],[27.40317,57.62905],[27.40182,57.62376],[27.39597,57.62115],[27.39023,57.62036],[27.39084,57.6169],[27.40195,57.61775],[27.40634,57.61546],[27.40683,57.61246],[27.38572,57.60304],[27.37827,57.59513],[27.35692,57.59696],[27.3413,57.58984],[27.34179,57.58539],[27.32886,57.5797],[27.32141,57.57898],[27.3341,57.56596],[27.33178,57.56066],[27.33776,57.56007],[27.33886,57.54671],[27.34386,57.5454],[27.35472,57.52575],[27.35131,57.51632],[27.34569,57.52104],[27.32446,57.52274],[27.29664,57.53859],[27.28017,57.53643],[27.2737,57.54311],[27.26431,57.54377],[27.2637,57.54841],[27.25772,57.54979],[27.24796,57.54769],[27.2249,57.55385],[27.19329,57.54966],[27.16145,57.55922],[27.11654,57.56118],[27.10092,57.5653],[27.08506,57.57538],[27.07262,57.57734],[27.07225,57.57989],[27.0559,57.58251],[27.05285,57.58087],[27.04687,57.58048],[27.04492,57.58251],[27.0332,57.58532],[27.04126,57.58761],[27.04418,57.5967],[27.03101,57.60461],[26.99513,57.60461],[26.99233,57.61076],[26.98696,57.60867],[26.98366,57.61174],[26.97549,57.612],[26.97097,57.60448],[26.9595,57.60625],[26.9578,57.60468],[26.94596,57.60272],[26.93961,57.60932],[26.95133,57.61579],[26.94999,57.62056],[26.94059,57.61978],[26.92961,57.62376],[26.92644,57.6331],[26.90679,57.63304],[26.89971,57.63056],[26.90057,57.62918],[26.89581,57.62572],[26.88849,57.62357],[26.88898,57.62193],[26.87458,57.61906],[26.87275,57.61736],[26.86555,57.61592],[26.85786,57.60997],[26.86469,57.6084],[26.85811,57.60049],[26.85994,57.59598],[26.86433,57.59415],[26.86177,57.59108],[26.84688,57.5884],[26.83504,57.58244],[26.81589,57.58153],[26.80954,57.58473],[26.79685,57.58179],[26.79929,57.58002],[26.79295,57.57315],[26.78685,57.57525],[26.7766,57.55994],[26.76915,57.56039],[26.76354,57.56314],[26.75366,57.56249],[26.75817,57.5653],[26.76891,57.57041],[26.77379,57.57473],[26.76769,57.57754],[26.74804,57.5778],[26.75317,57.58009],[26.73816,57.58774],[26.72901,57.58016],[26.73828,57.57584],[26.73072,57.56903],[26.72388,57.57244],[26.71107,57.56596],[26.69972,57.57106],[26.69753,57.5706],[26.69741,57.56733],[26.69155,57.56615],[26.67569,57.56668],[26.67105,57.56327],[26.6719,57.55385],[26.66531,57.55287],[26.64652,57.55391],[26.64262,57.54658],[26.63444,57.54357],[26.61443,57.52909],[26.61712,57.50885],[26.60467,57.51212],[26.60479,57.51442],[26.5954,57.51376],[26.59479,57.51592],[26.58808,57.51619],[26.59015,57.52516],[26.58698,57.52621],[26.58771,57.53781],[26.58381,57.53957],[26.57978,57.53695],[26.57966,57.53375],[26.56123,57.5285],[26.56184,57.52261],[26.5666,57.51946],[26.55794,57.5137],[26.52585,57.51619],[26.49961,57.52451],[26.49095,57.54534],[26.46996,57.57551],[26.40151,57.57237],[26.34489,57.58408],[26.33476,57.5797],[26.32781,57.57963],[26.32635,57.58277],[26.3117,57.58473],[26.30853,57.59291],[26.3006,57.59343],[26.29291,57.59114],[26.28352,57.59232],[26.28217,57.5952],[26.27754,57.595],[26.27034,57.6001],[26.27022,57.60461],[26.25423,57.61383],[26.24715,57.62082],[26.24813,57.62775],[26.23947,57.63408],[26.24203,57.63539],[26.24667,57.63559],[26.23959,57.64649],[26.23239,57.6461],[26.23117,57.64904],[26.24215,57.65146],[26.2363,57.65753],[26.23032,57.65805],[26.21043,57.66601],[26.21372,57.66888],[26.21092,57.67071],[26.21018,57.67906],[26.20079,57.68102],[26.19896,57.68356],[26.19444,57.68519],[26.18541,57.68454],[26.17712,57.68761],[26.18871,57.69472],[26.19859,57.70906],[26.20567,57.71486],[26.1726,57.72867],[26.141,57.73278],[26.13563,57.73923],[26.13905,57.74548],[26.13551,57.7503],[26.10537,57.757],[26.08035,57.76547],[26.07974,57.76384],[26.07328,57.76371],[26.07047,57.7656],[26.05912,57.75987],[26.049,57.7611],[26.0435,57.76703],[26.03326,57.77054],[26.02374,57.76761],[26.01776,57.7723],[26.02459,57.77516],[26.02496,57.7816],[26.02252,57.78355],[26.02776,57.7898],[26.03081,57.79097],[26.03338,57.80105],[26.03679,57.80592],[26.03606,57.8108],[26.04851,57.82289],[26.05705,57.83842],[26.05558,57.84764],[26.03667,57.84926],[26.02008,57.84517],[26.00958,57.85731],[25.99848,57.85816],[25.96273,57.84491],[25.931,57.85244],[25.89537,57.84972],[25.8883,57.84595],[25.88085,57.84946],[25.88573,57.85277],[25.88427,57.85595],[25.87561,57.85796],[25.87475,57.86322],[25.8595,57.85614],[25.81923,57.86419],[25.78312,57.89948],[25.78629,57.90428],[25.77165,57.91206],[25.75102,57.91692],[25.73724,57.92295],[25.72833,57.92133],[25.72247,57.91245],[25.70356,57.90331],[25.67916,57.90461],[25.67549,57.91277],[25.66207,57.91511],[25.65609,57.91439],[25.64889,57.91666],[25.64987,57.91841],[25.63828,57.93059],[25.57983,57.9442],[25.59399,57.95961],[25.58935,57.96504],[25.58239,57.96783],[25.58044,57.9721],[25.57483,57.9741],[25.56556,57.96718],[25.56604,57.96258],[25.55714,57.96038],[25.55567,57.96711],[25.55079,57.97255],[25.53725,57.97139],[25.52566,57.97184],[25.5226,57.96802],[25.51638,57.96737],[25.51211,57.96977],[25.52212,57.97488],[25.51943,57.98031],[25.48539,57.97475],[25.47843,57.98006],[25.47843,57.98264],[25.44219,57.99616],[25.44817,58.00114],[25.46648,58.00515],[25.44817,58.01698],[25.40693,58.02893],[25.37155,58.02926],[25.36374,58.03171],[25.35336,58.04334],[25.34482,58.04676],[25.33604,58.05709],[25.3292,58.05858],[25.32664,58.0638],[25.31981,58.066],[25.31908,58.06929],[25.29553,58.08161],[25.28686,58.08149],[25.28113,58.07019],[25.266,58.06716],[25.26502,58.06],[25.27991,58.05063],[25.29309,58.0467],[25.30431,58.03449],[25.30114,58.01504],[25.29748,58.01459],[25.30285,58.00011],[25.29577,57.99972],[25.29736,57.99661],[25.30358,57.99396],[25.30138,57.99273],[25.29187,57.99286],[25.28308,57.98963],[25.26722,57.99454],[25.25611,57.9939],[25.25502,58.00347],[25.2455,58.00302],[25.22768,58.01782],[25.24587,58.01872],[25.23562,58.02286],[25.23635,58.02441],[25.22732,58.02435],[25.22537,58.02195],[25.21902,58.02977],[25.21658,58.04088],[25.22695,58.04799],[25.22817,58.05348],[25.22122,58.05302],[25.22146,58.05051],[25.2178,58.04908],[25.21597,58.05954],[25.21219,58.06226],[25.20523,58.06122],[25.20389,58.0651],[25.21621,58.07413],[25.21207,58.08052],[25.19962,58.08536],[25.18949,58.08007],[25.19169,58.07613],[25.1535,58.07478],[25.15154,58.07703],[25.13397,58.07974],[25.10579,58.07749],[25.10518,58.06645],[25.07662,58.06645],[25.02037,58.01769],[24.99512,58.01084],[24.94863,58.00942],[24.83234,57.97177],[24.80806,57.99066],[24.74229,57.98187],[24.74339,57.96491],[24.7329,57.96239],[24.71508,57.96271],[24.6919,57.94653],[24.67335,57.95896],[24.64468,57.95889],[24.64187,57.95423],[24.64577,57.95268],[24.62869,57.94193],[24.61612,57.94368],[24.60892,57.95125],[24.58464,57.96174],[24.57317,57.95436],[24.54792,57.94938],[24.54352,57.94478],[24.5301,57.94705],[24.5207,57.94303],[24.51839,57.93675],[24.5096,57.93442],[24.51326,57.93066],[24.4625,57.92496],[24.44579,57.90798],[24.46018,57.90662],[24.45225,57.89942],[24.46006,57.87977],[24.41138,57.86491],[24.40906,57.87191],[24.33707,57.87393],[24.33829,58.0109],[24.42272,58.01097],[24.42614,58.28002],[24.51155,58.2797],[24.51216,58.32471],[24.42638,58.32503],[24.42712,58.36972],[24.34182,58.37017],[24.34048,58.23547],[24.17014,58.23572],[24.17014,58.1908],[24.08485,58.19092],[24.0851,58.23605],[24.00066,58.23579],[23.99993,58.28092],[23.82971,58.28047],[23.82947,58.32554],[23.65864,58.32496],[23.65791,58.41493],[23.57225,58.41468],[23.57127,58.50436],[23.39935,58.50359],[23.40106,58.41391],[23.14421,58.41238],[23.14567,58.36735],[23.05989,58.36703],[23.06172,58.32221],[22.9757,58.32157],[22.97716,58.27681],[22.89187,58.27598],[22.89358,58.23103],[22.80865,58.2302],[22.81012,58.18539],[22.89529,58.1861],[22.89663,58.1413],[22.72641,58.13982],[22.72495,58.18475],[22.55522,58.18276],[22.55693,58.13744],[22.64173,58.13886],[22.64344,58.094],[22.38903,58.0909],[22.38525,58.18063],[22.29995,58.17967],[22.30679,58.04527],[22.22198,58.0436],[22.22626,57.95404],[22.14206,57.95281],[22.1445,57.90804],[22.06007,57.90681],[22.06263,57.86186],[21.97807,57.86043],[21.96831,58.04004],[22.05274,58.04134],[22.04506,58.17581],[21.96038,58.17471],[21.95781,58.21941],[21.78723,58.21638],[21.78211,58.30631],[21.69681,58.3049],[21.69401,58.34975],[21.77942,58.35122],[21.76795,58.53074],[22.02566,58.53488],[22.02797,58.49001],[22.11375,58.49167],[22.11144,58.53621],[22.19709,58.53742],[22.19453,58.5823],[22.45236,58.58573],[22.44638,58.7203],[22.36023,58.71916],[22.35364,58.85385]],[[23.47415,59.26726],[23.29868,59.26632],[23.29795,59.31138],[23.47293,59.31194],[23.47415,59.26726]],[[24.17014,58.1908],[24.25507,58.19073],[24.25458,58.14581],[24.17002,58.14588],[24.17014,58.1908]],[[24.08485,58.19092],[24.08497,58.10129],[23.99968,58.10116],[23.99993,58.05632],[23.91525,58.05612],[23.915,58.14613],[23.83032,58.146],[23.82971,58.23572],[23.91451,58.23585],[23.91476,58.19099],[24.08485,58.19092]],[[24.61854,59.53612],[24.44183,59.5368],[24.44309,59.62659],[24.62016,59.6258],[24.61854,59.53612]],[[26.40403,59.7852],[26.31501,59.78667],[26.31814,59.83152],[26.40732,59.82994],[26.40403,59.7852]],[[26.48308,59.649],[26.48647,59.69383],[26.57514,59.69202],[26.57166,59.64719],[26.48308,59.649]],[[23.15944,57.78408],[23.24346,57.78461],[23.24445,57.73971],[23.32848,57.74031],[23.32679,57.82998],[23.15845,57.82885],[23.15944,57.78408]]],terms_text:"Maa-Ameti katastrikaart ortofoto alusel"},{id:"maaamet.ee-cir_ngr",name:"Estonia Forestry (Maaamet)",type:"wms",template:"https://kaart.maaamet.ee/wms/alus-geo?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=cir_ngr&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[22.35364,58.85385],[22.09411,58.85038],[22.09179,58.8951],[22.00503,58.89371],[21.99979,58.98374],[22.34754,58.98845],[22.34535,59.03337],[22.51935,59.03538],[22.51556,59.1251],[22.69017,59.12686],[22.69212,59.08218],[22.77912,59.083],[22.78083,59.03814],[22.86808,59.03877],[22.8693,58.99399],[22.9563,58.99487],[22.95495,59.03959],[23.12895,59.04097],[23.12786,59.08582],[23.47671,59.0877],[23.47415,59.26726],[23.64924,59.26788],[23.64888,59.31281],[23.73698,59.313],[23.73649,59.3578],[23.91158,59.35787],[23.91207,59.4028],[24.176,59.4028],[24.17637,59.4478],[24.26446,59.44767],[24.26471,59.49236],[24.70605,59.49082],[24.70898,59.62553],[24.79744,59.62497],[24.79659,59.58009],[24.97327,59.57885],[24.97462,59.62386],[24.88603,59.62473],[24.88725,59.66918],[24.9762,59.66863],[24.9773,59.71346],[25.06601,59.71259],[25.0632,59.62306],[25.24037,59.62145],[25.24184,59.66647],[25.33055,59.66548],[25.32884,59.62078],[25.41755,59.61979],[25.41938,59.66468],[25.6855,59.66148],[25.68757,59.70613],[25.86511,59.70386],[25.86279,59.65901],[26.12855,59.65507],[26.12575,59.6101],[26.39114,59.60565],[26.38809,59.56099],[26.82967,59.55215],[26.82626,59.50729],[26.91423,59.50549],[26.91057,59.46051],[27.96689,59.43303],[27.9719,59.4778],[28.03669,59.4757],[28.04377,59.47223],[28.04767,59.46578],[28.05182,59.46342],[28.06915,59.46256],[28.08452,59.45939],[28.12174,59.44091],[28.13577,59.4277],[28.13711,59.42267],[28.14163,59.41901],[28.16652,59.41205],[28.17225,59.40789],[28.19275,59.4015],[28.21069,59.3836],[28.21069,59.37994],[28.20386,59.37459],[28.21057,59.37235],[28.21105,59.36937],[28.20678,59.36719],[28.20703,59.36377],[28.19971,59.36091],[28.20203,59.35731],[28.19263,59.35227],[28.19397,59.34642],[28.16969,59.33354],[28.13626,59.29244],[28.12515,59.28901],[28.11722,59.28895],[28.1099,59.29063],[28.05353,59.2902],[28.02022,59.28334],[27.99825,59.2753],[27.97983,59.27293],[27.96433,59.27268],[27.95335,59.26863],[27.9492,59.26533],[27.90564,59.24044],[27.90113,59.23488],[27.901,59.22639],[27.89783,59.21746],[27.90235,59.20728],[27.89234,59.19222],[27.88978,59.18379],[27.87648,59.17372],[27.87184,59.16841],[27.86818,59.16159],[27.84414,59.14814],[27.83206,59.14401],[27.82035,59.13362],[27.80986,59.12905],[27.80595,59.12166],[27.80534,59.1127],[27.81071,59.10819],[27.8101,59.10606],[27.80205,59.1028],[27.78887,59.0909],[27.7907,59.08112],[27.79375,59.07842],[27.79411,59.07566],[27.79277,59.0729],[27.79302,59.06927],[27.7885,59.06657],[27.78265,59.065],[27.77508,59.0581],[27.77313,59.05107],[27.77667,59.04743],[27.76983,59.03325],[27.76605,59.03155],[27.75153,59.03017],[27.74628,59.02716],[27.74567,59.01705],[27.74165,59.00951],[27.74787,58.99267],[27.74274,58.98845],[27.73213,58.9855],[27.6544,58.98783],[27.65501,58.99241],[27.39414,58.99964],[27.38974,58.95474],[27.12935,58.96135],[27.12557,58.9164],[27.03882,58.91841],[27.0271,58.7841],[27.11361,58.78183],[27.10934,58.73709],[27.19537,58.73512],[27.18731,58.64533],[27.27309,58.64305],[27.25259,58.41883],[27.53397,58.41142],[27.5552,58.36575],[27.51762,58.33265],[27.51408,58.32214],[27.49993,58.32246],[27.48687,58.18803],[27.52872,58.18687],[27.59205,58.11875],[27.63695,58.09735],[27.60938,58.05399],[27.62268,58.0058],[27.64489,58.00205],[27.65294,58.00644],[27.64781,58.01426],[27.64781,58.02086],[27.66172,58.01866],[27.66856,58.01045],[27.68393,58.00845],[27.6965,58.0045],[27.70065,57.99862],[27.69882,57.98827],[27.69125,57.98549],[27.68064,57.97449],[27.6821,57.9719],[27.68893,57.97184],[27.68588,57.95928],[27.65892,57.9554],[27.66758,57.951],[27.67161,57.94627],[27.66917,57.94174],[27.67649,57.93552],[27.68247,57.93655],[27.68613,57.92794],[27.68247,57.92437],[27.71078,57.92392],[27.72029,57.92036],[27.72054,57.91174],[27.70834,57.90616],[27.69882,57.90616],[27.70614,57.90136],[27.72896,57.90739],[27.74677,57.90169],[27.7536,57.90409],[27.75739,57.90318],[27.75592,57.89806],[27.76959,57.89566],[27.78094,57.89832],[27.799,57.89961],[27.81852,57.89579],[27.82096,57.89047],[27.81949,57.888],[27.81059,57.88612],[27.81827,57.88249],[27.81169,57.87204],[27.81583,57.87166],[27.8184,57.8651],[27.81632,57.86134],[27.79875,57.85205],[27.7946,57.84634],[27.80058,57.8442],[27.7957,57.84017],[27.78862,57.84186],[27.78411,57.83725],[27.77715,57.8325],[27.75849,57.83536],[27.74165,57.82679],[27.72383,57.83179],[27.70541,57.84192],[27.68771,57.83419],[27.66636,57.83653],[27.66026,57.83893],[27.64818,57.8377],[27.63634,57.83978],[27.62487,57.83751],[27.62207,57.83874],[27.59791,57.83328],[27.56252,57.83023],[27.5563,57.83127],[27.55227,57.82113],[27.54446,57.82204],[27.5452,57.81808],[27.55056,57.81769],[27.55667,57.81366],[27.5408,57.81288],[27.54471,57.808],[27.53726,57.80644],[27.53958,57.80144],[27.53592,57.79663],[27.53861,57.79396],[27.52921,57.78856],[27.5175,57.78876],[27.51847,57.79201],[27.50298,57.78798],[27.50005,57.78973],[27.4959,57.78869],[27.50774,57.78349],[27.51457,57.77516],[27.5081,57.77158],[27.51115,57.76416],[27.51591,57.7639],[27.52018,57.75993],[27.52811,57.75818],[27.53007,57.75368],[27.53116,57.74073],[27.548,57.7333],[27.5419,57.73037],[27.52799,57.72946],[27.5236,57.71616],[27.52762,57.70899],[27.5236,57.70802],[27.51652,57.70873],[27.51066,57.71101],[27.50859,57.70723],[27.49993,57.70495],[27.49529,57.70749],[27.48711,57.7191],[27.47357,57.71545],[27.47064,57.70802],[27.46149,57.70619],[27.44807,57.71616],[27.43086,57.70756],[27.42818,57.69902],[27.41341,57.69915],[27.41647,57.69524],[27.40744,57.69276],[27.40231,57.68493],[27.39133,57.68539],[27.39377,57.67913],[27.39145,57.67671],[27.38193,57.67332],[27.37779,57.66836],[27.38364,57.66059],[27.3801,57.65883],[27.38755,57.6555],[27.38047,57.6495],[27.38352,57.64799],[27.38157,57.64368],[27.39072,57.6431],[27.38816,57.64009],[27.40085,57.63742],[27.40317,57.62905],[27.40182,57.62376],[27.39597,57.62115],[27.39023,57.62036],[27.39084,57.6169],[27.40195,57.61775],[27.40634,57.61546],[27.40683,57.61246],[27.38572,57.60304],[27.37827,57.59513],[27.35692,57.59696],[27.3413,57.58984],[27.34179,57.58539],[27.32886,57.5797],[27.32141,57.57898],[27.3341,57.56596],[27.33178,57.56066],[27.33776,57.56007],[27.33886,57.54671],[27.34386,57.5454],[27.35472,57.52575],[27.35131,57.51632],[27.34569,57.52104],[27.32446,57.52274],[27.29664,57.53859],[27.28017,57.53643],[27.2737,57.54311],[27.26431,57.54377],[27.2637,57.54841],[27.25772,57.54979],[27.24796,57.54769],[27.2249,57.55385],[27.19329,57.54966],[27.16145,57.55922],[27.11654,57.56118],[27.10092,57.5653],[27.08506,57.57538],[27.07262,57.57734],[27.07225,57.57989],[27.0559,57.58251],[27.05285,57.58087],[27.04687,57.58048],[27.04492,57.58251],[27.0332,57.58532],[27.04126,57.58761],[27.04418,57.5967],[27.03101,57.60461],[26.99513,57.60461],[26.99233,57.61076],[26.98696,57.60867],[26.98366,57.61174],[26.97549,57.612],[26.97097,57.60448],[26.9595,57.60625],[26.9578,57.60468],[26.94596,57.60272],[26.93961,57.60932],[26.95133,57.61579],[26.94999,57.62056],[26.94059,57.61978],[26.92961,57.62376],[26.92644,57.6331],[26.90679,57.63304],[26.89971,57.63056],[26.90057,57.62918],[26.89581,57.62572],[26.88849,57.62357],[26.88898,57.62193],[26.87458,57.61906],[26.87275,57.61736],[26.86555,57.61592],[26.85786,57.60997],[26.86469,57.6084],[26.85811,57.60049],[26.85994,57.59598],[26.86433,57.59415],[26.86177,57.59108],[26.84688,57.5884],[26.83504,57.58244],[26.81589,57.58153],[26.80954,57.58473],[26.79685,57.58179],[26.79929,57.58002],[26.79295,57.57315],[26.78685,57.57525],[26.7766,57.55994],[26.76915,57.56039],[26.76354,57.56314],[26.75366,57.56249],[26.75817,57.5653],[26.76891,57.57041],[26.77379,57.57473],[26.76769,57.57754],[26.74804,57.5778],[26.75317,57.58009],[26.73816,57.58774],[26.72901,57.58016],[26.73828,57.57584],[26.73072,57.56903],[26.72388,57.57244],[26.71107,57.56596],[26.69972,57.57106],[26.69753,57.5706],[26.69741,57.56733],[26.69155,57.56615],[26.67569,57.56668],[26.67105,57.56327],[26.6719,57.55385],[26.66531,57.55287],[26.64652,57.55391],[26.64262,57.54658],[26.63444,57.54357],[26.61443,57.52909],[26.61712,57.50885],[26.60467,57.51212],[26.60479,57.51442],[26.5954,57.51376],[26.59479,57.51592],[26.58808,57.51619],[26.59015,57.52516],[26.58698,57.52621],[26.58771,57.53781],[26.58381,57.53957],[26.57978,57.53695],[26.57966,57.53375],[26.56123,57.5285],[26.56184,57.52261],[26.5666,57.51946],[26.55794,57.5137],[26.52585,57.51619],[26.49961,57.52451],[26.49095,57.54534],[26.46996,57.57551],[26.40151,57.57237],[26.34489,57.58408],[26.33476,57.5797],[26.32781,57.57963],[26.32635,57.58277],[26.3117,57.58473],[26.30853,57.59291],[26.3006,57.59343],[26.29291,57.59114],[26.28352,57.59232],[26.28217,57.5952],[26.27754,57.595],[26.27034,57.6001],[26.27022,57.60461],[26.25423,57.61383],[26.24715,57.62082],[26.24813,57.62775],[26.23947,57.63408],[26.24203,57.63539],[26.24667,57.63559],[26.23959,57.64649],[26.23239,57.6461],[26.23117,57.64904],[26.24215,57.65146],[26.2363,57.65753],[26.23032,57.65805],[26.21043,57.66601],[26.21372,57.66888],[26.21092,57.67071],[26.21018,57.67906],[26.20079,57.68102],[26.19896,57.68356],[26.19444,57.68519],[26.18541,57.68454],[26.17712,57.68761],[26.18871,57.69472],[26.19859,57.70906],[26.20567,57.71486],[26.1726,57.72867],[26.141,57.73278],[26.13563,57.73923],[26.13905,57.74548],[26.13551,57.7503],[26.10537,57.757],[26.08035,57.76547],[26.07974,57.76384],[26.07328,57.76371],[26.07047,57.7656],[26.05912,57.75987],[26.049,57.7611],[26.0435,57.76703],[26.03326,57.77054],[26.02374,57.76761],[26.01776,57.7723],[26.02459,57.77516],[26.02496,57.7816],[26.02252,57.78355],[26.02776,57.7898],[26.03081,57.79097],[26.03338,57.80105],[26.03679,57.80592],[26.03606,57.8108],[26.04851,57.82289],[26.05705,57.83842],[26.05558,57.84764],[26.03667,57.84926],[26.02008,57.84517],[26.00958,57.85731],[25.99848,57.85816],[25.96273,57.84491],[25.931,57.85244],[25.89537,57.84972],[25.8883,57.84595],[25.88085,57.84946],[25.88573,57.85277],[25.88427,57.85595],[25.87561,57.85796],[25.87475,57.86322],[25.8595,57.85614],[25.81923,57.86419],[25.78312,57.89948],[25.78629,57.90428],[25.77165,57.91206],[25.75102,57.91692],[25.73724,57.92295],[25.72833,57.92133],[25.72247,57.91245],[25.70356,57.90331],[25.67916,57.90461],[25.67549,57.91277],[25.66207,57.91511],[25.65609,57.91439],[25.64889,57.91666],[25.64987,57.91841],[25.63828,57.93059],[25.57983,57.9442],[25.59399,57.95961],[25.58935,57.96504],[25.58239,57.96783],[25.58044,57.9721],[25.57483,57.9741],[25.56556,57.96718],[25.56604,57.96258],[25.55714,57.96038],[25.55567,57.96711],[25.55079,57.97255],[25.53725,57.97139],[25.52566,57.97184],[25.5226,57.96802],[25.51638,57.96737],[25.51211,57.96977],[25.52212,57.97488],[25.51943,57.98031],[25.48539,57.97475],[25.47843,57.98006],[25.47843,57.98264],[25.44219,57.99616],[25.44817,58.00114],[25.46648,58.00515],[25.44817,58.01698],[25.40693,58.02893],[25.37155,58.02926],[25.36374,58.03171],[25.35336,58.04334],[25.34482,58.04676],[25.33604,58.05709],[25.3292,58.05858],[25.32664,58.0638],[25.31981,58.066],[25.31908,58.06929],[25.29553,58.08161],[25.28686,58.08149],[25.28113,58.07019],[25.266,58.06716],[25.26502,58.06],[25.27991,58.05063],[25.29309,58.0467],[25.30431,58.03449],[25.30114,58.01504],[25.29748,58.01459],[25.30285,58.00011],[25.29577,57.99972],[25.29736,57.99661],[25.30358,57.99396],[25.30138,57.99273],[25.29187,57.99286],[25.28308,57.98963],[25.26722,57.99454],[25.25611,57.9939],[25.25502,58.00347],[25.2455,58.00302],[25.22768,58.01782],[25.24587,58.01872],[25.23562,58.02286],[25.23635,58.02441],[25.22732,58.02435],[25.22537,58.02195],[25.21902,58.02977],[25.21658,58.04088],[25.22695,58.04799],[25.22817,58.05348],[25.22122,58.05302],[25.22146,58.05051],[25.2178,58.04908],[25.21597,58.05954],[25.21219,58.06226],[25.20523,58.06122],[25.20389,58.0651],[25.21621,58.07413],[25.21207,58.08052],[25.19962,58.08536],[25.18949,58.08007],[25.19169,58.07613],[25.1535,58.07478],[25.15154,58.07703],[25.13397,58.07974],[25.10579,58.07749],[25.10518,58.06645],[25.07662,58.06645],[25.02037,58.01769],[24.99512,58.01084],[24.94863,58.00942],[24.83234,57.97177],[24.80806,57.99066],[24.74229,57.98187],[24.74339,57.96491],[24.7329,57.96239],[24.71508,57.96271],[24.6919,57.94653],[24.67335,57.95896],[24.64468,57.95889],[24.64187,57.95423],[24.64577,57.95268],[24.62869,57.94193],[24.61612,57.94368],[24.60892,57.95125],[24.58464,57.96174],[24.57317,57.95436],[24.54792,57.94938],[24.54352,57.94478],[24.5301,57.94705],[24.5207,57.94303],[24.51839,57.93675],[24.5096,57.93442],[24.51326,57.93066],[24.4625,57.92496],[24.44579,57.90798],[24.46018,57.90662],[24.45225,57.89942],[24.46006,57.87977],[24.41138,57.86491],[24.40906,57.87191],[24.33707,57.87393],[24.33829,58.0109],[24.42272,58.01097],[24.42614,58.28002],[24.51155,58.2797],[24.51216,58.32471],[24.42638,58.32503],[24.42712,58.36972],[24.34182,58.37017],[24.34048,58.23547],[24.17014,58.23572],[24.17014,58.1908],[24.08485,58.19092],[24.0851,58.23605],[24.00066,58.23579],[23.99993,58.28092],[23.82971,58.28047],[23.82947,58.32554],[23.65864,58.32496],[23.65791,58.41493],[23.57225,58.41468],[23.57127,58.50436],[23.39935,58.50359],[23.40106,58.41391],[23.14421,58.41238],[23.14567,58.36735],[23.05989,58.36703],[23.06172,58.32221],[22.9757,58.32157],[22.97716,58.27681],[22.89187,58.27598],[22.89358,58.23103],[22.80865,58.2302],[22.81012,58.18539],[22.89529,58.1861],[22.89663,58.1413],[22.72641,58.13982],[22.72495,58.18475],[22.55522,58.18276],[22.55693,58.13744],[22.64173,58.13886],[22.64344,58.094],[22.38903,58.0909],[22.38525,58.18063],[22.29995,58.17967],[22.30679,58.04527],[22.22198,58.0436],[22.22626,57.95404],[22.14206,57.95281],[22.1445,57.90804],[22.06007,57.90681],[22.06263,57.86186],[21.97807,57.86043],[21.96831,58.04004],[22.05274,58.04134],[22.04506,58.17581],[21.96038,58.17471],[21.95781,58.21941],[21.78723,58.21638],[21.78211,58.30631],[21.69681,58.3049],[21.69401,58.34975],[21.77942,58.35122],[21.76795,58.53074],[22.02566,58.53488],[22.02797,58.49001],[22.11375,58.49167],[22.11144,58.53621],[22.19709,58.53742],[22.19453,58.5823],[22.45236,58.58573],[22.44638,58.7203],[22.36023,58.71916],[22.35364,58.85385]],[[23.47415,59.26726],[23.29868,59.26632],[23.29795,59.31138],[23.47293,59.31194],[23.47415,59.26726]],[[24.17014,58.1908],[24.25507,58.19073],[24.25458,58.14581],[24.17002,58.14588],[24.17014,58.1908]],[[24.08485,58.19092],[24.08497,58.10129],[23.99968,58.10116],[23.99993,58.05632],[23.91525,58.05612],[23.915,58.14613],[23.83032,58.146],[23.82971,58.23572],[23.91451,58.23585],[23.91476,58.19099],[24.08485,58.19092]],[[24.61854,59.53612],[24.44183,59.5368],[24.44309,59.62659],[24.62016,59.6258],[24.61854,59.53612]],[[26.40403,59.7852],[26.31501,59.78667],[26.31814,59.83152],[26.40732,59.82994],[26.40403,59.7852]],[[26.48308,59.649],[26.48647,59.69383],[26.57514,59.69202],[26.57166,59.64719],[26.48308,59.649]],[[23.15944,57.78408],[23.24346,57.78461],[23.24445,57.73971],[23.32848,57.74031],[23.32679,57.82998],[23.15845,57.82885],[23.15944,57.78408]]],terms_text:"Maa-Ameti metsanduslik ortofoto"},{id:"maaamet.ee-reljeef",name:"Estonia Hillshading (Maaamet)",type:"wms",template:"https://kaart.maaamet.ee/wms/alus-geo?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=reljeef&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[22.35364,58.85385],[22.09411,58.85038],[22.09179,58.8951],[22.00503,58.89371],[21.99979,58.98374],[22.34754,58.98845],[22.34535,59.03337],[22.51935,59.03538],[22.51556,59.1251],[22.69017,59.12686],[22.69212,59.08218],[22.77912,59.083],[22.78083,59.03814],[22.86808,59.03877],[22.8693,58.99399],[22.9563,58.99487],[22.95495,59.03959],[23.12895,59.04097],[23.12786,59.08582],[23.47671,59.0877],[23.47415,59.26726],[23.64924,59.26788],[23.64888,59.31281],[23.73698,59.313],[23.73649,59.3578],[23.91158,59.35787],[23.91207,59.4028],[24.176,59.4028],[24.17637,59.4478],[24.26446,59.44767],[24.26471,59.49236],[24.70605,59.49082],[24.70898,59.62553],[24.79744,59.62497],[24.79659,59.58009],[24.97327,59.57885],[24.97462,59.62386],[24.88603,59.62473],[24.88725,59.66918],[24.9762,59.66863],[24.9773,59.71346],[25.06601,59.71259],[25.0632,59.62306],[25.24037,59.62145],[25.24184,59.66647],[25.33055,59.66548],[25.32884,59.62078],[25.41755,59.61979],[25.41938,59.66468],[25.6855,59.66148],[25.68757,59.70613],[25.86511,59.70386],[25.86279,59.65901],[26.12855,59.65507],[26.12575,59.6101],[26.39114,59.60565],[26.38809,59.56099],[26.82967,59.55215],[26.82626,59.50729],[26.91423,59.50549],[26.91057,59.46051],[27.96689,59.43303],[27.9719,59.4778],[28.03669,59.4757],[28.04377,59.47223],[28.04767,59.46578],[28.05182,59.46342],[28.06915,59.46256],[28.08452,59.45939],[28.12174,59.44091],[28.13577,59.4277],[28.13711,59.42267],[28.14163,59.41901],[28.16652,59.41205],[28.17225,59.40789],[28.19275,59.4015],[28.21069,59.3836],[28.21069,59.37994],[28.20386,59.37459],[28.21057,59.37235],[28.21105,59.36937],[28.20678,59.36719],[28.20703,59.36377],[28.19971,59.36091],[28.20203,59.35731],[28.19263,59.35227],[28.19397,59.34642],[28.16969,59.33354],[28.13626,59.29244],[28.12515,59.28901],[28.11722,59.28895],[28.1099,59.29063],[28.05353,59.2902],[28.02022,59.28334],[27.99825,59.2753],[27.97983,59.27293],[27.96433,59.27268],[27.95335,59.26863],[27.9492,59.26533],[27.90564,59.24044],[27.90113,59.23488],[27.901,59.22639],[27.89783,59.21746],[27.90235,59.20728],[27.89234,59.19222],[27.88978,59.18379],[27.87648,59.17372],[27.87184,59.16841],[27.86818,59.16159],[27.84414,59.14814],[27.83206,59.14401],[27.82035,59.13362],[27.80986,59.12905],[27.80595,59.12166],[27.80534,59.1127],[27.81071,59.10819],[27.8101,59.10606],[27.80205,59.1028],[27.78887,59.0909],[27.7907,59.08112],[27.79375,59.07842],[27.79411,59.07566],[27.79277,59.0729],[27.79302,59.06927],[27.7885,59.06657],[27.78265,59.065],[27.77508,59.0581],[27.77313,59.05107],[27.77667,59.04743],[27.76983,59.03325],[27.76605,59.03155],[27.75153,59.03017],[27.74628,59.02716],[27.74567,59.01705],[27.74165,59.00951],[27.74787,58.99267],[27.74274,58.98845],[27.73213,58.9855],[27.6544,58.98783],[27.65501,58.99241],[27.39414,58.99964],[27.38974,58.95474],[27.12935,58.96135],[27.12557,58.9164],[27.03882,58.91841],[27.0271,58.7841],[27.11361,58.78183],[27.10934,58.73709],[27.19537,58.73512],[27.18731,58.64533],[27.27309,58.64305],[27.25259,58.41883],[27.53397,58.41142],[27.5552,58.36575],[27.51762,58.33265],[27.51408,58.32214],[27.49993,58.32246],[27.48687,58.18803],[27.52872,58.18687],[27.59205,58.11875],[27.63695,58.09735],[27.60938,58.05399],[27.62268,58.0058],[27.64489,58.00205],[27.65294,58.00644],[27.64781,58.01426],[27.64781,58.02086],[27.66172,58.01866],[27.66856,58.01045],[27.68393,58.00845],[27.6965,58.0045],[27.70065,57.99862],[27.69882,57.98827],[27.69125,57.98549],[27.68064,57.97449],[27.6821,57.9719],[27.68893,57.97184],[27.68588,57.95928],[27.65892,57.9554],[27.66758,57.951],[27.67161,57.94627],[27.66917,57.94174],[27.67649,57.93552],[27.68247,57.93655],[27.68613,57.92794],[27.68247,57.92437],[27.71078,57.92392],[27.72029,57.92036],[27.72054,57.91174],[27.70834,57.90616],[27.69882,57.90616],[27.70614,57.90136],[27.72896,57.90739],[27.74677,57.90169],[27.7536,57.90409],[27.75739,57.90318],[27.75592,57.89806],[27.76959,57.89566],[27.78094,57.89832],[27.799,57.89961],[27.81852,57.89579],[27.82096,57.89047],[27.81949,57.888],[27.81059,57.88612],[27.81827,57.88249],[27.81169,57.87204],[27.81583,57.87166],[27.8184,57.8651],[27.81632,57.86134],[27.79875,57.85205],[27.7946,57.84634],[27.80058,57.8442],[27.7957,57.84017],[27.78862,57.84186],[27.78411,57.83725],[27.77715,57.8325],[27.75849,57.83536],[27.74165,57.82679],[27.72383,57.83179],[27.70541,57.84192],[27.68771,57.83419],[27.66636,57.83653],[27.66026,57.83893],[27.64818,57.8377],[27.63634,57.83978],[27.62487,57.83751],[27.62207,57.83874],[27.59791,57.83328],[27.56252,57.83023],[27.5563,57.83127],[27.55227,57.82113],[27.54446,57.82204],[27.5452,57.81808],[27.55056,57.81769],[27.55667,57.81366],[27.5408,57.81288],[27.54471,57.808],[27.53726,57.80644],[27.53958,57.80144],[27.53592,57.79663],[27.53861,57.79396],[27.52921,57.78856],[27.5175,57.78876],[27.51847,57.79201],[27.50298,57.78798],[27.50005,57.78973],[27.4959,57.78869],[27.50774,57.78349],[27.51457,57.77516],[27.5081,57.77158],[27.51115,57.76416],[27.51591,57.7639],[27.52018,57.75993],[27.52811,57.75818],[27.53007,57.75368],[27.53116,57.74073],[27.548,57.7333],[27.5419,57.73037],[27.52799,57.72946],[27.5236,57.71616],[27.52762,57.70899],[27.5236,57.70802],[27.51652,57.70873],[27.51066,57.71101],[27.50859,57.70723],[27.49993,57.70495],[27.49529,57.70749],[27.48711,57.7191],[27.47357,57.71545],[27.47064,57.70802],[27.46149,57.70619],[27.44807,57.71616],[27.43086,57.70756],[27.42818,57.69902],[27.41341,57.69915],[27.41647,57.69524],[27.40744,57.69276],[27.40231,57.68493],[27.39133,57.68539],[27.39377,57.67913],[27.39145,57.67671],[27.38193,57.67332],[27.37779,57.66836],[27.38364,57.66059],[27.3801,57.65883],[27.38755,57.6555],[27.38047,57.6495],[27.38352,57.64799],[27.38157,57.64368],[27.39072,57.6431],[27.38816,57.64009],[27.40085,57.63742],[27.40317,57.62905],[27.40182,57.62376],[27.39597,57.62115],[27.39023,57.62036],[27.39084,57.6169],[27.40195,57.61775],[27.40634,57.61546],[27.40683,57.61246],[27.38572,57.60304],[27.37827,57.59513],[27.35692,57.59696],[27.3413,57.58984],[27.34179,57.58539],[27.32886,57.5797],[27.32141,57.57898],[27.3341,57.56596],[27.33178,57.56066],[27.33776,57.56007],[27.33886,57.54671],[27.34386,57.5454],[27.35472,57.52575],[27.35131,57.51632],[27.34569,57.52104],[27.32446,57.52274],[27.29664,57.53859],[27.28017,57.53643],[27.2737,57.54311],[27.26431,57.54377],[27.2637,57.54841],[27.25772,57.54979],[27.24796,57.54769],[27.2249,57.55385],[27.19329,57.54966],[27.16145,57.55922],[27.11654,57.56118],[27.10092,57.5653],[27.08506,57.57538],[27.07262,57.57734],[27.07225,57.57989],[27.0559,57.58251],[27.05285,57.58087],[27.04687,57.58048],[27.04492,57.58251],[27.0332,57.58532],[27.04126,57.58761],[27.04418,57.5967],[27.03101,57.60461],[26.99513,57.60461],[26.99233,57.61076],[26.98696,57.60867],[26.98366,57.61174],[26.97549,57.612],[26.97097,57.60448],[26.9595,57.60625],[26.9578,57.60468],[26.94596,57.60272],[26.93961,57.60932],[26.95133,57.61579],[26.94999,57.62056],[26.94059,57.61978],[26.92961,57.62376],[26.92644,57.6331],[26.90679,57.63304],[26.89971,57.63056],[26.90057,57.62918],[26.89581,57.62572],[26.88849,57.62357],[26.88898,57.62193],[26.87458,57.61906],[26.87275,57.61736],[26.86555,57.61592],[26.85786,57.60997],[26.86469,57.6084],[26.85811,57.60049],[26.85994,57.59598],[26.86433,57.59415],[26.86177,57.59108],[26.84688,57.5884],[26.83504,57.58244],[26.81589,57.58153],[26.80954,57.58473],[26.79685,57.58179],[26.79929,57.58002],[26.79295,57.57315],[26.78685,57.57525],[26.7766,57.55994],[26.76915,57.56039],[26.76354,57.56314],[26.75366,57.56249],[26.75817,57.5653],[26.76891,57.57041],[26.77379,57.57473],[26.76769,57.57754],[26.74804,57.5778],[26.75317,57.58009],[26.73816,57.58774],[26.72901,57.58016],[26.73828,57.57584],[26.73072,57.56903],[26.72388,57.57244],[26.71107,57.56596],[26.69972,57.57106],[26.69753,57.5706],[26.69741,57.56733],[26.69155,57.56615],[26.67569,57.56668],[26.67105,57.56327],[26.6719,57.55385],[26.66531,57.55287],[26.64652,57.55391],[26.64262,57.54658],[26.63444,57.54357],[26.61443,57.52909],[26.61712,57.50885],[26.60467,57.51212],[26.60479,57.51442],[26.5954,57.51376],[26.59479,57.51592],[26.58808,57.51619],[26.59015,57.52516],[26.58698,57.52621],[26.58771,57.53781],[26.58381,57.53957],[26.57978,57.53695],[26.57966,57.53375],[26.56123,57.5285],[26.56184,57.52261],[26.5666,57.51946],[26.55794,57.5137],[26.52585,57.51619],[26.49961,57.52451],[26.49095,57.54534],[26.46996,57.57551],[26.40151,57.57237],[26.34489,57.58408],[26.33476,57.5797],[26.32781,57.57963],[26.32635,57.58277],[26.3117,57.58473],[26.30853,57.59291],[26.3006,57.59343],[26.29291,57.59114],[26.28352,57.59232],[26.28217,57.5952],[26.27754,57.595],[26.27034,57.6001],[26.27022,57.60461],[26.25423,57.61383],[26.24715,57.62082],[26.24813,57.62775],[26.23947,57.63408],[26.24203,57.63539],[26.24667,57.63559],[26.23959,57.64649],[26.23239,57.6461],[26.23117,57.64904],[26.24215,57.65146],[26.2363,57.65753],[26.23032,57.65805],[26.21043,57.66601],[26.21372,57.66888],[26.21092,57.67071],[26.21018,57.67906],[26.20079,57.68102],[26.19896,57.68356],[26.19444,57.68519],[26.18541,57.68454],[26.17712,57.68761],[26.18871,57.69472],[26.19859,57.70906],[26.20567,57.71486],[26.1726,57.72867],[26.141,57.73278],[26.13563,57.73923],[26.13905,57.74548],[26.13551,57.7503],[26.10537,57.757],[26.08035,57.76547],[26.07974,57.76384],[26.07328,57.76371],[26.07047,57.7656],[26.05912,57.75987],[26.049,57.7611],[26.0435,57.76703],[26.03326,57.77054],[26.02374,57.76761],[26.01776,57.7723],[26.02459,57.77516],[26.02496,57.7816],[26.02252,57.78355],[26.02776,57.7898],[26.03081,57.79097],[26.03338,57.80105],[26.03679,57.80592],[26.03606,57.8108],[26.04851,57.82289],[26.05705,57.83842],[26.05558,57.84764],[26.03667,57.84926],[26.02008,57.84517],[26.00958,57.85731],[25.99848,57.85816],[25.96273,57.84491],[25.931,57.85244],[25.89537,57.84972],[25.8883,57.84595],[25.88085,57.84946],[25.88573,57.85277],[25.88427,57.85595],[25.87561,57.85796],[25.87475,57.86322],[25.8595,57.85614],[25.81923,57.86419],[25.78312,57.89948],[25.78629,57.90428],[25.77165,57.91206],[25.75102,57.91692],[25.73724,57.92295],[25.72833,57.92133],[25.72247,57.91245],[25.70356,57.90331],[25.67916,57.90461],[25.67549,57.91277],[25.66207,57.91511],[25.65609,57.91439],[25.64889,57.91666],[25.64987,57.91841],[25.63828,57.93059],[25.57983,57.9442],[25.59399,57.95961],[25.58935,57.96504],[25.58239,57.96783],[25.58044,57.9721],[25.57483,57.9741],[25.56556,57.96718],[25.56604,57.96258],[25.55714,57.96038],[25.55567,57.96711],[25.55079,57.97255],[25.53725,57.97139],[25.52566,57.97184],[25.5226,57.96802],[25.51638,57.96737],[25.51211,57.96977],[25.52212,57.97488],[25.51943,57.98031],[25.48539,57.97475],[25.47843,57.98006],[25.47843,57.98264],[25.44219,57.99616],[25.44817,58.00114],[25.46648,58.00515],[25.44817,58.01698],[25.40693,58.02893],[25.37155,58.02926],[25.36374,58.03171],[25.35336,58.04334],[25.34482,58.04676],[25.33604,58.05709],[25.3292,58.05858],[25.32664,58.0638],[25.31981,58.066],[25.31908,58.06929],[25.29553,58.08161],[25.28686,58.08149],[25.28113,58.07019],[25.266,58.06716],[25.26502,58.06],[25.27991,58.05063],[25.29309,58.0467],[25.30431,58.03449],[25.30114,58.01504],[25.29748,58.01459],[25.30285,58.00011],[25.29577,57.99972],[25.29736,57.99661],[25.30358,57.99396],[25.30138,57.99273],[25.29187,57.99286],[25.28308,57.98963],[25.26722,57.99454],[25.25611,57.9939],[25.25502,58.00347],[25.2455,58.00302],[25.22768,58.01782],[25.24587,58.01872],[25.23562,58.02286],[25.23635,58.02441],[25.22732,58.02435],[25.22537,58.02195],[25.21902,58.02977],[25.21658,58.04088],[25.22695,58.04799],[25.22817,58.05348],[25.22122,58.05302],[25.22146,58.05051],[25.2178,58.04908],[25.21597,58.05954],[25.21219,58.06226],[25.20523,58.06122],[25.20389,58.0651],[25.21621,58.07413],[25.21207,58.08052],[25.19962,58.08536],[25.18949,58.08007],[25.19169,58.07613],[25.1535,58.07478],[25.15154,58.07703],[25.13397,58.07974],[25.10579,58.07749],[25.10518,58.06645],[25.07662,58.06645],[25.02037,58.01769],[24.99512,58.01084],[24.94863,58.00942],[24.83234,57.97177],[24.80806,57.99066],[24.74229,57.98187],[24.74339,57.96491],[24.7329,57.96239],[24.71508,57.96271],[24.6919,57.94653],[24.67335,57.95896],[24.64468,57.95889],[24.64187,57.95423],[24.64577,57.95268],[24.62869,57.94193],[24.61612,57.94368],[24.60892,57.95125],[24.58464,57.96174],[24.57317,57.95436],[24.54792,57.94938],[24.54352,57.94478],[24.5301,57.94705],[24.5207,57.94303],[24.51839,57.93675],[24.5096,57.93442],[24.51326,57.93066],[24.4625,57.92496],[24.44579,57.90798],[24.46018,57.90662],[24.45225,57.89942],[24.46006,57.87977],[24.41138,57.86491],[24.40906,57.87191],[24.33707,57.87393],[24.33829,58.0109],[24.42272,58.01097],[24.42614,58.28002],[24.51155,58.2797],[24.51216,58.32471],[24.42638,58.32503],[24.42712,58.36972],[24.34182,58.37017],[24.34048,58.23547],[24.17014,58.23572],[24.17014,58.1908],[24.08485,58.19092],[24.0851,58.23605],[24.00066,58.23579],[23.99993,58.28092],[23.82971,58.28047],[23.82947,58.32554],[23.65864,58.32496],[23.65791,58.41493],[23.57225,58.41468],[23.57127,58.50436],[23.39935,58.50359],[23.40106,58.41391],[23.14421,58.41238],[23.14567,58.36735],[23.05989,58.36703],[23.06172,58.32221],[22.9757,58.32157],[22.97716,58.27681],[22.89187,58.27598],[22.89358,58.23103],[22.80865,58.2302],[22.81012,58.18539],[22.89529,58.1861],[22.89663,58.1413],[22.72641,58.13982],[22.72495,58.18475],[22.55522,58.18276],[22.55693,58.13744],[22.64173,58.13886],[22.64344,58.094],[22.38903,58.0909],[22.38525,58.18063],[22.29995,58.17967],[22.30679,58.04527],[22.22198,58.0436],[22.22626,57.95404],[22.14206,57.95281],[22.1445,57.90804],[22.06007,57.90681],[22.06263,57.86186],[21.97807,57.86043],[21.96831,58.04004],[22.05274,58.04134],[22.04506,58.17581],[21.96038,58.17471],[21.95781,58.21941],[21.78723,58.21638],[21.78211,58.30631],[21.69681,58.3049],[21.69401,58.34975],[21.77942,58.35122],[21.76795,58.53074],[22.02566,58.53488],[22.02797,58.49001],[22.11375,58.49167],[22.11144,58.53621],[22.19709,58.53742],[22.19453,58.5823],[22.45236,58.58573],[22.44638,58.7203],[22.36023,58.71916],[22.35364,58.85385]],[[23.47415,59.26726],[23.29868,59.26632],[23.29795,59.31138],[23.47293,59.31194],[23.47415,59.26726]],[[24.17014,58.1908],[24.25507,58.19073],[24.25458,58.14581],[24.17002,58.14588],[24.17014,58.1908]],[[24.08485,58.19092],[24.08497,58.10129],[23.99968,58.10116],[23.99993,58.05632],[23.91525,58.05612],[23.915,58.14613],[23.83032,58.146],[23.82971,58.23572],[23.91451,58.23585],[23.91476,58.19099],[24.08485,58.19092]],[[24.61854,59.53612],[24.44183,59.5368],[24.44309,59.62659],[24.62016,59.6258],[24.61854,59.53612]],[[26.40403,59.7852],[26.31501,59.78667],[26.31814,59.83152],[26.40732,59.82994],[26.40403,59.7852]],[[26.48308,59.649],[26.48647,59.69383],[26.57514,59.69202],[26.57166,59.64719],[26.48308,59.649]],[[23.15944,57.78408],[23.24346,57.78461],[23.24445,57.73971],[23.32848,57.74031],[23.32679,57.82998],[23.15845,57.82885],[23.15944,57.78408]]],terms_text:"Maa-Ameti reljeefikaart"},{id:"maaamet.ee-orto",name:"Estonia Ortho (Maaamet)",type:"tms",template:"https://tiles.maaamet.ee/tm/tms/1.0.0/foto@GMC/{zoom}/{x}/{-y}.png",zoomExtent:[6,18],polygon:[[[22.35364,58.85385],[22.09411,58.85038],[22.09179,58.8951],[22.00503,58.89371],[21.99979,58.98374],[22.34754,58.98845],[22.34535,59.03337],[22.51935,59.03538],[22.51556,59.1251],[22.69017,59.12686],[22.69212,59.08218],[22.77912,59.083],[22.78083,59.03814],[22.86808,59.03877],[22.8693,58.99399],[22.9563,58.99487],[22.95495,59.03959],[23.12895,59.04097],[23.12786,59.08582],[23.47671,59.0877],[23.47415,59.26726],[23.64924,59.26788],[23.64888,59.31281],[23.73698,59.313],[23.73649,59.3578],[23.91158,59.35787],[23.91207,59.4028],[24.176,59.4028],[24.17637,59.4478],[24.26446,59.44767],[24.26471,59.49236],[24.70605,59.49082],[24.70898,59.62553],[24.79744,59.62497],[24.79659,59.58009],[24.97327,59.57885],[24.97462,59.62386],[24.88603,59.62473],[24.88725,59.66918],[24.9762,59.66863],[24.9773,59.71346],[25.06601,59.71259],[25.0632,59.62306],[25.24037,59.62145],[25.24184,59.66647],[25.33055,59.66548],[25.32884,59.62078],[25.41755,59.61979],[25.41938,59.66468],[25.6855,59.66148],[25.68757,59.70613],[25.86511,59.70386],[25.86279,59.65901],[26.12855,59.65507],[26.12575,59.6101],[26.39114,59.60565],[26.38809,59.56099],[26.82967,59.55215],[26.82626,59.50729],[26.91423,59.50549],[26.91057,59.46051],[27.96689,59.43303],[27.9719,59.4778],[28.03669,59.4757],[28.04377,59.47223],[28.04767,59.46578],[28.05182,59.46342],[28.06915,59.46256],[28.08452,59.45939],[28.12174,59.44091],[28.13577,59.4277],[28.13711,59.42267],[28.14163,59.41901],[28.16652,59.41205],[28.17225,59.40789],[28.19275,59.4015],[28.21069,59.3836],[28.21069,59.37994],[28.20386,59.37459],[28.21057,59.37235],[28.21105,59.36937],[28.20678,59.36719],[28.20703,59.36377],[28.19971,59.36091],[28.20203,59.35731],[28.19263,59.35227],[28.19397,59.34642],[28.16969,59.33354],[28.13626,59.29244],[28.12515,59.28901],[28.11722,59.28895],[28.1099,59.29063],[28.05353,59.2902],[28.02022,59.28334],[27.99825,59.2753],[27.97983,59.27293],[27.96433,59.27268],[27.95335,59.26863],[27.9492,59.26533],[27.90564,59.24044],[27.90113,59.23488],[27.901,59.22639],[27.89783,59.21746],[27.90235,59.20728],[27.89234,59.19222],[27.88978,59.18379],[27.87648,59.17372],[27.87184,59.16841],[27.86818,59.16159],[27.84414,59.14814],[27.83206,59.14401],[27.82035,59.13362],[27.80986,59.12905],[27.80595,59.12166],[27.80534,59.1127],[27.81071,59.10819],[27.8101,59.10606],[27.80205,59.1028],[27.78887,59.0909],[27.7907,59.08112],[27.79375,59.07842],[27.79411,59.07566],[27.79277,59.0729],[27.79302,59.06927],[27.7885,59.06657],[27.78265,59.065],[27.77508,59.0581],[27.77313,59.05107],[27.77667,59.04743],[27.76983,59.03325],[27.76605,59.03155],[27.75153,59.03017],[27.74628,59.02716],[27.74567,59.01705],[27.74165,59.00951],[27.74787,58.99267],[27.74274,58.98845],[27.73213,58.9855],[27.6544,58.98783],[27.65501,58.99241],[27.39414,58.99964],[27.38974,58.95474],[27.12935,58.96135],[27.12557,58.9164],[27.03882,58.91841],[27.0271,58.7841],[27.11361,58.78183],[27.10934,58.73709],[27.19537,58.73512],[27.18731,58.64533],[27.27309,58.64305],[27.25259,58.41883],[27.53397,58.41142],[27.5552,58.36575],[27.51762,58.33265],[27.51408,58.32214],[27.49993,58.32246],[27.48687,58.18803],[27.52872,58.18687],[27.59205,58.11875],[27.63695,58.09735],[27.60938,58.05399],[27.62268,58.0058],[27.64489,58.00205],[27.65294,58.00644],[27.64781,58.01426],[27.64781,58.02086],[27.66172,58.01866],[27.66856,58.01045],[27.68393,58.00845],[27.6965,58.0045],[27.70065,57.99862],[27.69882,57.98827],[27.69125,57.98549],[27.68064,57.97449],[27.6821,57.9719],[27.68893,57.97184],[27.68588,57.95928],[27.65892,57.9554],[27.66758,57.951],[27.67161,57.94627],[27.66917,57.94174],[27.67649,57.93552],[27.68247,57.93655],[27.68613,57.92794],[27.68247,57.92437],[27.71078,57.92392],[27.72029,57.92036],[27.72054,57.91174],[27.70834,57.90616],[27.69882,57.90616],[27.70614,57.90136],[27.72896,57.90739],[27.74677,57.90169],[27.7536,57.90409],[27.75739,57.90318],[27.75592,57.89806],[27.76959,57.89566],[27.78094,57.89832],[27.799,57.89961],[27.81852,57.89579],[27.82096,57.89047],[27.81949,57.888],[27.81059,57.88612],[27.81827,57.88249],[27.81169,57.87204],[27.81583,57.87166],[27.8184,57.8651],[27.81632,57.86134],[27.79875,57.85205],[27.7946,57.84634],[27.80058,57.8442],[27.7957,57.84017],[27.78862,57.84186],[27.78411,57.83725],[27.77715,57.8325],[27.75849,57.83536],[27.74165,57.82679],[27.72383,57.83179],[27.70541,57.84192],[27.68771,57.83419],[27.66636,57.83653],[27.66026,57.83893],[27.64818,57.8377],[27.63634,57.83978],[27.62487,57.83751],[27.62207,57.83874],[27.59791,57.83328],[27.56252,57.83023],[27.5563,57.83127],[27.55227,57.82113],[27.54446,57.82204],[27.5452,57.81808],[27.55056,57.81769],[27.55667,57.81366],[27.5408,57.81288],[27.54471,57.808],[27.53726,57.80644],[27.53958,57.80144],[27.53592,57.79663],[27.53861,57.79396],[27.52921,57.78856],[27.5175,57.78876],[27.51847,57.79201],[27.50298,57.78798],[27.50005,57.78973],[27.4959,57.78869],[27.50774,57.78349],[27.51457,57.77516],[27.5081,57.77158],[27.51115,57.76416],[27.51591,57.7639],[27.52018,57.75993],[27.52811,57.75818],[27.53007,57.75368],[27.53116,57.74073],[27.548,57.7333],[27.5419,57.73037],[27.52799,57.72946],[27.5236,57.71616],[27.52762,57.70899],[27.5236,57.70802],[27.51652,57.70873],[27.51066,57.71101],[27.50859,57.70723],[27.49993,57.70495],[27.49529,57.70749],[27.48711,57.7191],[27.47357,57.71545],[27.47064,57.70802],[27.46149,57.70619],[27.44807,57.71616],[27.43086,57.70756],[27.42818,57.69902],[27.41341,57.69915],[27.41647,57.69524],[27.40744,57.69276],[27.40231,57.68493],[27.39133,57.68539],[27.39377,57.67913],[27.39145,57.67671],[27.38193,57.67332],[27.37779,57.66836],[27.38364,57.66059],[27.3801,57.65883],[27.38755,57.6555],[27.38047,57.6495],[27.38352,57.64799],[27.38157,57.64368],[27.39072,57.6431],[27.38816,57.64009],[27.40085,57.63742],[27.40317,57.62905],[27.40182,57.62376],[27.39597,57.62115],[27.39023,57.62036],[27.39084,57.6169],[27.40195,57.61775],[27.40634,57.61546],[27.40683,57.61246],[27.38572,57.60304],[27.37827,57.59513],[27.35692,57.59696],[27.3413,57.58984],[27.34179,57.58539],[27.32886,57.5797],[27.32141,57.57898],[27.3341,57.56596],[27.33178,57.56066],[27.33776,57.56007],[27.33886,57.54671],[27.34386,57.5454],[27.35472,57.52575],[27.35131,57.51632],[27.34569,57.52104],[27.32446,57.52274],[27.29664,57.53859],[27.28017,57.53643],[27.2737,57.54311],[27.26431,57.54377],[27.2637,57.54841],[27.25772,57.54979],[27.24796,57.54769],[27.2249,57.55385],[27.19329,57.54966],[27.16145,57.55922],[27.11654,57.56118],[27.10092,57.5653],[27.08506,57.57538],[27.07262,57.57734],[27.07225,57.57989],[27.0559,57.58251],[27.05285,57.58087],[27.04687,57.58048],[27.04492,57.58251],[27.0332,57.58532],[27.04126,57.58761],[27.04418,57.5967],[27.03101,57.60461],[26.99513,57.60461],[26.99233,57.61076],[26.98696,57.60867],[26.98366,57.61174],[26.97549,57.612],[26.97097,57.60448],[26.9595,57.60625],[26.9578,57.60468],[26.94596,57.60272],[26.93961,57.60932],[26.95133,57.61579],[26.94999,57.62056],[26.94059,57.61978],[26.92961,57.62376],[26.92644,57.6331],[26.90679,57.63304],[26.89971,57.63056],[26.90057,57.62918],[26.89581,57.62572],[26.88849,57.62357],[26.88898,57.62193],[26.87458,57.61906],[26.87275,57.61736],[26.86555,57.61592],[26.85786,57.60997],[26.86469,57.6084],[26.85811,57.60049],[26.85994,57.59598],[26.86433,57.59415],[26.86177,57.59108],[26.84688,57.5884],[26.83504,57.58244],[26.81589,57.58153],[26.80954,57.58473],[26.79685,57.58179],[26.79929,57.58002],[26.79295,57.57315],[26.78685,57.57525],[26.7766,57.55994],[26.76915,57.56039],[26.76354,57.56314],[26.75366,57.56249],[26.75817,57.5653],[26.76891,57.57041],[26.77379,57.57473],[26.76769,57.57754],[26.74804,57.5778],[26.75317,57.58009],[26.73816,57.58774],[26.72901,57.58016],[26.73828,57.57584],[26.73072,57.56903],[26.72388,57.57244],[26.71107,57.56596],[26.69972,57.57106],[26.69753,57.5706],[26.69741,57.56733],[26.69155,57.56615],[26.67569,57.56668],[26.67105,57.56327],[26.6719,57.55385],[26.66531,57.55287],[26.64652,57.55391],[26.64262,57.54658],[26.63444,57.54357],[26.61443,57.52909],[26.61712,57.50885],[26.60467,57.51212],[26.60479,57.51442],[26.5954,57.51376],[26.59479,57.51592],[26.58808,57.51619],[26.59015,57.52516],[26.58698,57.52621],[26.58771,57.53781],[26.58381,57.53957],[26.57978,57.53695],[26.57966,57.53375],[26.56123,57.5285],[26.56184,57.52261],[26.5666,57.51946],[26.55794,57.5137],[26.52585,57.51619],[26.49961,57.52451],[26.49095,57.54534],[26.46996,57.57551],[26.40151,57.57237],[26.34489,57.58408],[26.33476,57.5797],[26.32781,57.57963],[26.32635,57.58277],[26.3117,57.58473],[26.30853,57.59291],[26.3006,57.59343],[26.29291,57.59114],[26.28352,57.59232],[26.28217,57.5952],[26.27754,57.595],[26.27034,57.6001],[26.27022,57.60461],[26.25423,57.61383],[26.24715,57.62082],[26.24813,57.62775],[26.23947,57.63408],[26.24203,57.63539],[26.24667,57.63559],[26.23959,57.64649],[26.23239,57.6461],[26.23117,57.64904],[26.24215,57.65146],[26.2363,57.65753],[26.23032,57.65805],[26.21043,57.66601],[26.21372,57.66888],[26.21092,57.67071],[26.21018,57.67906],[26.20079,57.68102],[26.19896,57.68356],[26.19444,57.68519],[26.18541,57.68454],[26.17712,57.68761],[26.18871,57.69472],[26.19859,57.70906],[26.20567,57.71486],[26.1726,57.72867],[26.141,57.73278],[26.13563,57.73923],[26.13905,57.74548],[26.13551,57.7503],[26.10537,57.757],[26.08035,57.76547],[26.07974,57.76384],[26.07328,57.76371],[26.07047,57.7656],[26.05912,57.75987],[26.049,57.7611],[26.0435,57.76703],[26.03326,57.77054],[26.02374,57.76761],[26.01776,57.7723],[26.02459,57.77516],[26.02496,57.7816],[26.02252,57.78355],[26.02776,57.7898],[26.03081,57.79097],[26.03338,57.80105],[26.03679,57.80592],[26.03606,57.8108],[26.04851,57.82289],[26.05705,57.83842],[26.05558,57.84764],[26.03667,57.84926],[26.02008,57.84517],[26.00958,57.85731],[25.99848,57.85816],[25.96273,57.84491],[25.931,57.85244],[25.89537,57.84972],[25.8883,57.84595],[25.88085,57.84946],[25.88573,57.85277],[25.88427,57.85595],[25.87561,57.85796],[25.87475,57.86322],[25.8595,57.85614],[25.81923,57.86419],[25.78312,57.89948],[25.78629,57.90428],[25.77165,57.91206],[25.75102,57.91692],[25.73724,57.92295],[25.72833,57.92133],[25.72247,57.91245],[25.70356,57.90331],[25.67916,57.90461],[25.67549,57.91277],[25.66207,57.91511],[25.65609,57.91439],[25.64889,57.91666],[25.64987,57.91841],[25.63828,57.93059],[25.57983,57.9442],[25.59399,57.95961],[25.58935,57.96504],[25.58239,57.96783],[25.58044,57.9721],[25.57483,57.9741],[25.56556,57.96718],[25.56604,57.96258],[25.55714,57.96038],[25.55567,57.96711],[25.55079,57.97255],[25.53725,57.97139],[25.52566,57.97184],[25.5226,57.96802],[25.51638,57.96737],[25.51211,57.96977],[25.52212,57.97488],[25.51943,57.98031],[25.48539,57.97475],[25.47843,57.98006],[25.47843,57.98264],[25.44219,57.99616],[25.44817,58.00114],[25.46648,58.00515],[25.44817,58.01698],[25.40693,58.02893],[25.37155,58.02926],[25.36374,58.03171],[25.35336,58.04334],[25.34482,58.04676],[25.33604,58.05709],[25.3292,58.05858],[25.32664,58.0638],[25.31981,58.066],[25.31908,58.06929],[25.29553,58.08161],[25.28686,58.08149],[25.28113,58.07019],[25.266,58.06716],[25.26502,58.06],[25.27991,58.05063],[25.29309,58.0467],[25.30431,58.03449],[25.30114,58.01504],[25.29748,58.01459],[25.30285,58.00011],[25.29577,57.99972],[25.29736,57.99661],[25.30358,57.99396],[25.30138,57.99273],[25.29187,57.99286],[25.28308,57.98963],[25.26722,57.99454],[25.25611,57.9939],[25.25502,58.00347],[25.2455,58.00302],[25.22768,58.01782],[25.24587,58.01872],[25.23562,58.02286],[25.23635,58.02441],[25.22732,58.02435],[25.22537,58.02195],[25.21902,58.02977],[25.21658,58.04088],[25.22695,58.04799],[25.22817,58.05348],[25.22122,58.05302],[25.22146,58.05051],[25.2178,58.04908],[25.21597,58.05954],[25.21219,58.06226],[25.20523,58.06122],[25.20389,58.0651],[25.21621,58.07413],[25.21207,58.08052],[25.19962,58.08536],[25.18949,58.08007],[25.19169,58.07613],[25.1535,58.07478],[25.15154,58.07703],[25.13397,58.07974],[25.10579,58.07749],[25.10518,58.06645],[25.07662,58.06645],[25.02037,58.01769],[24.99512,58.01084],[24.94863,58.00942],[24.83234,57.97177],[24.80806,57.99066],[24.74229,57.98187],[24.74339,57.96491],[24.7329,57.96239],[24.71508,57.96271],[24.6919,57.94653],[24.67335,57.95896],[24.64468,57.95889],[24.64187,57.95423],[24.64577,57.95268],[24.62869,57.94193],[24.61612,57.94368],[24.60892,57.95125],[24.58464,57.96174],[24.57317,57.95436],[24.54792,57.94938],[24.54352,57.94478],[24.5301,57.94705],[24.5207,57.94303],[24.51839,57.93675],[24.5096,57.93442],[24.51326,57.93066],[24.4625,57.92496],[24.44579,57.90798],[24.46018,57.90662],[24.45225,57.89942],[24.46006,57.87977],[24.41138,57.86491],[24.40906,57.87191],[24.33707,57.87393],[24.33829,58.0109],[24.42272,58.01097],[24.42614,58.28002],[24.51155,58.2797],[24.51216,58.32471],[24.42638,58.32503],[24.42712,58.36972],[24.34182,58.37017],[24.34048,58.23547],[24.17014,58.23572],[24.17014,58.1908],[24.08485,58.19092],[24.0851,58.23605],[24.00066,58.23579],[23.99993,58.28092],[23.82971,58.28047],[23.82947,58.32554],[23.65864,58.32496],[23.65791,58.41493],[23.57225,58.41468],[23.57127,58.50436],[23.39935,58.50359],[23.40106,58.41391],[23.14421,58.41238],[23.14567,58.36735],[23.05989,58.36703],[23.06172,58.32221],[22.9757,58.32157],[22.97716,58.27681],[22.89187,58.27598],[22.89358,58.23103],[22.80865,58.2302],[22.81012,58.18539],[22.89529,58.1861],[22.89663,58.1413],[22.72641,58.13982],[22.72495,58.18475],[22.55522,58.18276],[22.55693,58.13744],[22.64173,58.13886],[22.64344,58.094],[22.38903,58.0909],[22.38525,58.18063],[22.29995,58.17967],[22.30679,58.04527],[22.22198,58.0436],[22.22626,57.95404],[22.14206,57.95281],[22.1445,57.90804],[22.06007,57.90681],[22.06263,57.86186],[21.97807,57.86043],[21.96831,58.04004],[22.05274,58.04134],[22.04506,58.17581],[21.96038,58.17471],[21.95781,58.21941],[21.78723,58.21638],[21.78211,58.30631],[21.69681,58.3049],[21.69401,58.34975],[21.77942,58.35122],[21.76795,58.53074],[22.02566,58.53488],[22.02797,58.49001],[22.11375,58.49167],[22.11144,58.53621],[22.19709,58.53742],[22.19453,58.5823],[22.45236,58.58573],[22.44638,58.7203],[22.36023,58.71916],[22.35364,58.85385]],[[23.47415,59.26726],[23.29868,59.26632],[23.29795,59.31138],[23.47293,59.31194],[23.47415,59.26726]],[[24.17014,58.1908],[24.25507,58.19073],[24.25458,58.14581],[24.17002,58.14588],[24.17014,58.1908]],[[24.08485,58.19092],[24.08497,58.10129],[23.99968,58.10116],[23.99993,58.05632],[23.91525,58.05612],[23.915,58.14613],[23.83032,58.146],[23.82971,58.23572],[23.91451,58.23585],[23.91476,58.19099],[24.08485,58.19092]],[[24.61854,59.53612],[24.44183,59.5368],[24.44309,59.62659],[24.62016,59.6258],[24.61854,59.53612]],[[26.40403,59.7852],[26.31501,59.78667],[26.31814,59.83152],[26.40732,59.82994],[26.40403,59.7852]],[[26.48308,59.649],[26.48647,59.69383],[26.57514,59.69202],[26.57166,59.64719],[26.48308,59.649]],[[23.15944,57.78408],[23.24346,57.78461],[23.24445,57.73971],[23.32848,57.74031],[23.32679,57.82998],[23.15845,57.82885],[23.15944,57.78408]]],terms_text:"Maa-Ameti ortofoto"},{id:"estrela_de_alagoas",name:"Estrela de Alagoas",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Estrela%20de%20Alagoas&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.71382,-9.43476],[-36.71477,-9.34443],[-36.80586,-9.34498],[-36.80525,-9.43542],[-36.71382,-9.43476]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"eufar-balaton",name:"EUFAR Balaton orthophotos",type:"tms",template:"http://e.tile.openstreetmap.hu/balaton/0/{zoom}/{x}/{y}.jpg",endDate:"2010-08-31T00:00:00.000Z",startDate:"2010-08-01T00:00:00.000Z",zoomExtent:[12,19],polygon:[[[18.17918,46.98502],[18.17773,47.01816],[18.08176,47.05643],[18.10281,47.06311],[18.08152,47.09344],[18.06436,47.09049],[18.03537,47.07983],[18.03344,47.08262],[17.9582,47.05567],[17.99436,47.00449],[17.86441,46.95517],[17.80274,47.0103],[17.67184,46.97207],[17.23875,46.77079],[17.22244,46.6796],[17.47175,46.70306],[18.16735,46.94133],[18.17918,46.98502]]],terms_url:"http://www.bli.okologia.mta.hu/",terms_text:"EUFAR Balaton ortofotó 2010",best:true,description:"1940 geo-tagged photography from Balaton Limnological Institute."},{id:"Fiez-2013",name:"Fiez Orthophoto 2013",type:"tms",template:"http://osmdata.asitvd.ch/tiles/fiez2013/{zoom}/{x}/{y}.png",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",zoomExtent:[14,20],polygon:[[[6.62313,46.82339],[6.62899,46.82484],[6.62882,46.82674],[6.62531,46.83274],[6.62382,46.83317],[6.61839,46.83194],[6.62313,46.82339]]],terms_url:"http://osmdata.asitvd.ch/",terms_text:"Fiez - Orthophoto technique 2013"},{id:"fiskeridir-akvakultur",name:"Fiskeridirektoratet Aquaculture overlay",type:"wms",template:"https://ogc.fiskeridir.no/wms.ashx?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=layer_262&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[3,22],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://www.fiskeridir.no/Kart",terms_text:"© Fiskeridirektoratet",description:"Aquaculture/marine farms (licensed sites, may not yet have any installations)",icon:"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9c/Emblem_of_the_Norwegian_Directorate_of_Fisheries.svg/175px-Emblem_of_the_Norwegian_Directorate_of_Fisheries.svg.png",overlay:true},{id:"FOMI_2000",name:"FÖMI orthophoto 2000",type:"tms",template:"http://e.tile.openstreetmap.hu/ortofoto2000/{zoom}/{x}/{y}.jpg",endDate:"2000-01-01T00:00:00.000Z",startDate:"2000-01-01T00:00:00.000Z",zoomExtent:[0,17],polygon:[[[16.11391,46.8691],[16.17897,46.90662],[16.20004,46.94151],[16.22175,46.93554],[16.24628,46.94639],[16.25532,46.96421],[16.27647,46.96261],[16.29058,47.01398],[16.30162,46.99923],[16.34146,46.99652],[16.35052,47.01063],[16.3734,46.99859],[16.41277,47.00475],[16.43327,46.99274],[16.44781,47.00389],[16.48,46.99412],[16.5122,47.00117],[16.46356,47.03227],[16.44786,47.02275],[16.43912,47.02966],[16.44567,47.03887],[16.52032,47.0561],[16.47321,47.07362],[16.46372,47.09392],[16.5008,47.11006],[16.50004,47.12329],[16.52953,47.12874],[16.51716,47.14969],[16.45495,47.14259],[16.46487,47.16833],[16.45556,47.18756],[16.43056,47.1847],[16.4195,47.19491],[16.41892,47.21071],[16.43713,47.2097],[16.44263,47.23371],[16.43131,47.25276],[16.46715,47.25317],[16.48923,47.27989],[16.46463,47.33385],[16.4337,47.35281],[16.45851,47.36705],[16.44546,47.40702],[16.48317,47.40936],[16.49638,47.38927],[16.51709,47.41002],[16.57491,47.40542],[16.58073,47.41917],[16.66185,47.4556],[16.67064,47.47422],[16.65234,47.50034],[16.68956,47.51016],[16.71478,47.5402],[16.66354,47.56773],[16.6732,47.60495],[16.65953,47.6061],[16.65276,47.62285],[16.63142,47.62832],[16.57391,47.61967],[16.51474,47.6462],[16.49675,47.63931],[16.42546,47.66217],[16.44374,47.67421],[16.44805,47.69647],[16.4747,47.68116],[16.48722,47.69798],[16.55217,47.72255],[16.53638,47.73678],[16.54798,47.75154],[16.60952,47.76037],[16.63441,47.75908],[16.65729,47.74149],[16.72094,47.73536],[16.75341,47.68282],[16.83016,47.68106],[16.83943,47.70451],[16.86689,47.72115],[16.87668,47.68765],[17.09374,47.70777],[17.07066,47.72854],[17.0516,47.79385],[17.07495,47.8085],[17.04714,47.82856],[17.05195,47.83777],[17.01055,47.85818],[17.01639,47.86733],[17.08575,47.87462],[17.11317,47.92716],[17.09171,47.93429],[17.11838,47.96011],[17.09466,47.97088],[17.20103,48.01999],[17.24177,48.02247],[17.25795,47.99865],[17.33465,47.99312],[17.40299,47.94785],[17.45392,47.88526],[17.52674,47.86551],[17.56758,47.81513],[17.6084,47.82189],[17.70858,47.75668],[17.77987,47.73949],[17.8661,47.74575],[17.90013,47.73926],[17.94687,47.74467],[17.97087,47.75784],[18.00441,47.74634],[18.03806,47.75768],[18.29588,47.73146],[18.45407,47.76512],[18.49316,47.75276],[18.55908,47.766],[18.64609,47.75909],[18.72607,47.78904],[18.74118,47.81382],[18.792,47.82309],[18.84854,47.81672],[18.85588,47.82608],[18.82801,47.83429],[18.81357,47.85555],[18.76353,47.8716],[18.75686,47.89684],[18.77675,47.95509],[18.75525,47.97635],[18.81574,47.99344],[18.82,48.03968],[18.83327,48.04824],[18.87494,48.04707],[18.88667,48.05868],[18.90898,48.05114],[18.9439,48.05886],[18.98161,48.0536],[19.01486,48.07818],[19.05852,48.05735],[19.08436,48.07278],[19.1074,48.0656],[19.13529,48.07415],[19.24137,48.05365],[19.25578,48.07156],[19.30311,48.08871],[19.3866,48.09191],[19.40002,48.0823],[19.45405,48.10144],[19.46735,48.08393],[19.49442,48.10991],[19.49238,48.13966],[19.51282,48.15466],[19.50452,48.17344],[19.52897,48.19036],[19.52604,48.20313],[19.5775,48.21601],[19.63083,48.25007],[19.64452,48.23917],[19.66986,48.23921],[19.69122,48.20389],[19.72113,48.20147],[19.74618,48.21651],[19.78716,48.19253],[19.79873,48.19482],[19.80528,48.18373],[19.78242,48.16504],[19.79481,48.15353],[19.82133,48.16908],[19.84528,48.16274],[19.85517,48.17843],[19.86013,48.16941],[19.89875,48.16631],[19.91454,48.14686],[19.8983,48.1249],[19.93738,48.13112],[19.97439,48.166],[19.98871,48.16217],[20.02904,48.17768],[20.04945,48.1672],[20.07299,48.17961],[20.07004,48.1917],[20.13409,48.22518],[20.13319,48.25398],[20.20616,48.25098],[20.20383,48.26191],[20.22847,48.26278],[20.23495,48.27993],[20.28686,48.26164],[20.32571,48.27279],[20.33746,48.30167],[20.36566,48.31661],[20.38408,48.35118],[20.40983,48.36586],[20.40253,48.38256],[20.42053,48.40386],[20.41623,48.41854],[20.50793,48.48936],[20.50651,48.53442],[20.53747,48.52788],[20.54649,48.54429],[20.58659,48.53576],[20.65387,48.56141],[20.83636,48.58284],[20.8378,48.57421],[20.85044,48.58163],[20.84533,48.5665],[20.86815,48.55182],[20.92232,48.55945],[20.93463,48.53834],[20.95588,48.53396],[20.9562,48.52167],[20.98158,48.51777],[21.01511,48.53231],[21.06632,48.52589],[21.11745,48.49105],[21.16087,48.5215],[21.17963,48.51823],[21.22106,48.5375],[21.30549,48.52225],[21.31338,48.55084],[21.32688,48.55413],[21.31938,48.5612],[21.41545,48.55895],[21.42266,48.57882],[21.44061,48.5851],[21.51409,48.55107],[21.54202,48.5084],[21.61393,48.50942],[21.62019,48.46983],[21.66355,48.41796],[21.66456,48.39216],[21.70174,48.3807],[21.71187,48.35762],[21.81741,48.33279],[21.8352,48.33464],[21.83721,48.36325],[21.8843,48.35605],[21.88484,48.36754],[21.89788,48.36256],[21.8998,48.37022],[21.92819,48.3616],[21.92681,48.3709],[21.9492,48.37873],[21.99446,48.37732],[22.02133,48.39275],[22.0546,48.37753],[22.07649,48.38724],[22.08674,48.37156],[22.13591,48.38052],[22.13106,48.39123],[22.15277,48.39624],[22.15619,48.40931],[22.21257,48.42565],[22.23714,48.41004],[22.26549,48.40987],[22.23988,48.38701],[22.26757,48.36116],[22.31781,48.35454],[22.31329,48.32507],[22.33729,48.30791],[22.33843,48.27921],[22.38475,48.23396],[22.40064,48.2492],[22.43284,48.25252],[22.45639,48.24231],[22.4899,48.25342],[22.49722,48.23955],[22.51615,48.23797],[22.53111,48.20943],[22.57114,48.19614],[22.56164,48.18161],[22.59824,48.14476],[22.59028,48.10734],[22.67545,48.092],[22.73472,48.11985],[22.75762,48.12006],[22.77039,48.10902],[22.77232,48.12187],[22.80277,48.12211],[22.80253,48.10708],[22.82543,48.11751],[22.83644,48.08025],[22.86113,48.07503],[22.8678,48.05243],[22.88204,48.05481],[22.86597,48.01132],[22.83556,47.9906],[22.84076,47.98136],[22.87257,47.97527],[22.86973,47.96596],[22.89157,47.96724],[22.89744,47.95406],[22.84733,47.90776],[22.79281,47.89086],[22.75869,47.89414],[22.77775,47.84225],[22.71363,47.83609],[22.68019,47.78775],[22.61112,47.77175],[22.549,47.77222],[22.48121,47.81089],[22.45131,47.80339],[22.43133,47.73981],[22.35662,47.74862],[22.31777,47.76609],[22.31762,47.74337],[22.28514,47.72928],[22.26432,47.73107],[22.259,47.69791],[22.23068,47.6932],[22.17965,47.59161],[22.12892,47.5979],[22.09428,47.55836],[22.07826,47.56213],[22.05345,47.54748],[22.07122,47.53807],[22.06179,47.5288],[22.04513,47.53989],[22.03672,47.53267],[22.00719,47.48362],[22.03279,47.45084],[22.02388,47.39086],[22.01198,47.3758],[21.96274,47.38105],[21.93825,47.37253],[21.87779,47.28578],[21.88728,47.27305],[21.85349,47.23976],[21.85807,47.18736],[21.81248,47.16675],[21.79241,47.10598],[21.72683,47.09839],[21.6976,47.05792],[21.65042,47.04083],[21.68887,47.002],[21.66787,46.97123],[21.68149,46.96521],[21.6382,46.93305],[21.59845,46.92747],[21.61429,46.88673],[21.60167,46.86682],[21.52033,46.83737],[21.51861,46.80007],[21.48318,46.76502],[21.52634,46.73932],[21.52937,46.72097],[21.49233,46.68597],[21.47284,46.69591],[21.4299,46.69394],[21.43096,46.67814],[21.45467,46.66086],[21.41624,46.64262],[21.4098,46.62181],[21.3657,46.63795],[21.33005,46.63182],[21.31397,46.61767],[21.30124,46.59087],[21.32079,46.58286],[21.2743,46.54074],[21.26003,46.50216],[21.27442,46.47673],[21.29645,46.4763],[21.31743,46.45073],[21.28952,46.41548],[21.29633,46.40696],[21.22501,46.41369],[21.20642,46.40338],[21.19926,46.3479],[21.17623,46.33577],[21.1805,46.30445],[21.11554,46.30185],[21.10305,46.26246],[21.07088,46.2539],[21.06608,46.24294],[21.03662,46.24804],[21.02467,46.26653],[20.96082,46.2623],[20.94658,46.2793],[20.92507,46.27662],[20.92181,46.26181],[20.87327,46.28776],[20.77565,46.27596],[20.74905,46.25085],[20.76186,46.20456],[20.7274,46.20775],[20.73411,46.19394],[20.71405,46.16605],[20.68436,46.14478],[20.65492,46.14977],[20.63945,46.12676],[20.54505,46.17909],[20.50148,46.19033],[20.49494,46.17099],[20.45923,46.14288],[20.39751,46.15747],[20.36853,46.15286],[20.35571,46.16963],[20.29681,46.15215],[20.2549,46.11585],[20.24848,46.1301],[20.23301,46.12417],[20.18174,46.16011],[20.1365,46.14495],[20.10097,46.17728],[20.06362,46.14373],[20.03461,46.14589],[20.01581,46.17684],[19.93541,46.17642],[19.85335,46.15],[19.81797,46.12817],[19.75854,46.14798],[19.69821,46.18793],[19.68277,46.18004],[19.66151,46.19044],[19.63174,46.1693],[19.56765,46.17911],[19.5604,46.16658],[19.50266,46.14245],[19.52712,46.12103],[19.4645,46.09538],[19.46658,46.08204],[19.416,46.04605],[19.3804,46.03587],[19.36409,46.0523],[19.2819,46.0148],[19.29653,45.98812],[19.28565,45.9969],[19.14799,45.99634],[19.13384,46.0371],[19.10487,46.04017],[19.06604,46.0002],[19.07968,45.96364],[19.00598,45.95907],[19.00927,45.92366],[18.90613,45.93538],[18.87946,45.91668],[18.86471,45.92085],[18.86856,45.91134],[18.82768,45.90517],[18.822,45.91459],[18.80751,45.90361],[18.80925,45.87962],[18.79562,45.87845],[18.70489,45.91819],[18.67002,45.91084],[18.65966,45.91689],[18.66513,45.89928],[18.64128,45.88904],[18.65502,45.87424],[18.62777,45.87338],[18.61484,45.85314],[18.62367,45.83985],[18.57324,45.81376],[18.57498,45.80043],[18.55972,45.8038],[18.52235,45.78269],[18.49067,45.79472],[18.48219,45.7655],[18.45628,45.76952],[18.44508,45.76052],[18.44685,45.73713],[18.40763,45.73971],[18.39189,45.7617],[18.36423,45.77294],[18.33942,45.74716],[18.29682,45.76122],[18.24405,45.76123],[18.23073,45.77903],[18.19087,45.78788],[18.16819,45.77627],[18.12465,45.78963],[18.10681,45.77083],[18.08189,45.76452],[17.99588,45.79573],[17.93021,45.78633],[17.90668,45.79257],[17.86531,45.76701],[17.82627,45.81],[17.80898,45.8041],[17.78091,45.81749],[17.76034,45.81192],[17.74086,45.8296],[17.66329,45.83818],[17.62762,45.89794],[17.57007,45.93582],[17.43783,45.95038],[17.4259,45.92727],[17.41081,45.93997],[17.39215,45.93021],[17.38287,45.94757],[17.34762,45.94234],[17.34388,45.96053],[17.35377,45.9525],[17.39054,45.95819],[17.38742,45.96618],[17.35835,45.96427],[17.37549,45.96869],[17.37519,45.98811],[17.36357,45.99154],[17.35672,45.97358],[17.33396,45.99608],[17.33198,45.97289],[17.313,45.96653],[17.32365,45.98878],[17.29877,45.98387],[17.3042,46.00211],[17.25797,46.01103],[17.29632,46.02852],[17.25415,46.03001],[17.27096,46.05671],[17.23248,46.0592],[17.25251,46.06647],[17.23131,46.07903],[17.20199,46.07655],[17.23313,46.09896],[17.2104,46.10017],[17.21297,46.11386],[17.17593,46.10846],[17.17434,46.12876],[17.18652,46.13323],[17.1811,46.15055],[17.15623,46.15858],[17.15929,46.16968],[17.1261,46.16845],[17.12274,46.17898],[17.07525,46.18895],[17.06616,46.2023],[16.97354,46.2252],[16.97395,46.24311],[16.95041,46.24153],[16.88624,46.28146],[16.87137,46.32528],[16.88021,46.3357],[16.86154,46.34524],[16.86562,46.35565],[16.8522,46.35172],[16.84986,46.36262],[16.83529,46.36382],[16.83765,46.3748],[16.82617,46.3671],[16.79334,46.38739],[16.75921,46.37766],[16.72987,46.40149],[16.71821,46.38987],[16.67729,46.44945],[16.66318,46.4487],[16.66637,46.4583],[16.61879,46.46199],[16.60447,46.47608],[16.5236,46.50538],[16.53258,46.5314],[16.51767,46.53635],[16.50841,46.56527],[16.483,46.56604],[16.4834,46.5786],[16.44557,46.61095],[16.42486,46.61316],[16.38594,46.64425],[16.39154,46.66373],[16.41985,46.65848],[16.42863,46.69397],[16.36892,46.70401],[16.37983,46.71539],[16.37109,46.72229],[16.35706,46.71424],[16.3186,46.75414],[16.33054,46.77521],[16.31216,46.778],[16.31277,46.79731],[16.34064,46.80519],[16.35084,46.83006],[16.34033,46.84688],[16.3015,46.85951],[16.29139,46.87283],[16.23323,46.87667],[16.15609,46.85371],[16.12657,46.85691],[16.11391,46.8691]]],terms_url:"https://www.fomi.hu",terms_text:"Földmérési és Távérzékelési Intézet"},{id:"FOMI_2005",name:"FÖMI orthophoto 2005",type:"tms",template:"http://e.tile.openstreetmap.hu/ortofoto2005/{zoom}/{x}/{y}.jpg",endDate:"2005-01-01T00:00:00.000Z",startDate:"2005-01-01T00:00:00.000Z",zoomExtent:[0,17],polygon:[[[16.11391,46.8691],[16.17897,46.90662],[16.20004,46.94151],[16.22175,46.93554],[16.24628,46.94639],[16.25532,46.96421],[16.27647,46.96261],[16.29058,47.01398],[16.30162,46.99923],[16.34146,46.99652],[16.35052,47.01063],[16.3734,46.99859],[16.41277,47.00475],[16.43327,46.99274],[16.44781,47.00389],[16.48,46.99412],[16.5122,47.00117],[16.46356,47.03227],[16.44786,47.02275],[16.43912,47.02966],[16.44567,47.03887],[16.52032,47.0561],[16.47321,47.07362],[16.46372,47.09392],[16.5008,47.11006],[16.50004,47.12329],[16.52953,47.12874],[16.51716,47.14969],[16.45495,47.14259],[16.46487,47.16833],[16.45556,47.18756],[16.43056,47.1847],[16.4195,47.19491],[16.41892,47.21071],[16.43713,47.2097],[16.44263,47.23371],[16.43131,47.25276],[16.46715,47.25317],[16.48923,47.27989],[16.46463,47.33385],[16.4337,47.35281],[16.45851,47.36705],[16.44546,47.40702],[16.48317,47.40936],[16.49638,47.38927],[16.51709,47.41002],[16.57491,47.40542],[16.58073,47.41917],[16.66185,47.4556],[16.67064,47.47422],[16.65234,47.50034],[16.68956,47.51016],[16.71478,47.5402],[16.66354,47.56773],[16.6732,47.60495],[16.65953,47.6061],[16.65276,47.62285],[16.63142,47.62832],[16.57391,47.61967],[16.51474,47.6462],[16.49675,47.63931],[16.42546,47.66217],[16.44374,47.67421],[16.44805,47.69647],[16.4747,47.68116],[16.48722,47.69798],[16.55217,47.72255],[16.53638,47.73678],[16.54798,47.75154],[16.60952,47.76037],[16.63441,47.75908],[16.65729,47.74149],[16.72094,47.73536],[16.75341,47.68282],[16.83016,47.68106],[16.83943,47.70451],[16.86689,47.72115],[16.87668,47.68765],[17.09374,47.70777],[17.07066,47.72854],[17.0516,47.79385],[17.07495,47.8085],[17.04714,47.82856],[17.05195,47.83777],[17.01055,47.85818],[17.01639,47.86733],[17.08575,47.87462],[17.11317,47.92716],[17.09171,47.93429],[17.11838,47.96011],[17.09466,47.97088],[17.20103,48.01999],[17.24177,48.02247],[17.25795,47.99865],[17.33465,47.99312],[17.40299,47.94785],[17.45392,47.88526],[17.52674,47.86551],[17.56758,47.81513],[17.6084,47.82189],[17.70858,47.75668],[17.77987,47.73949],[17.8661,47.74575],[17.90013,47.73926],[17.94687,47.74467],[17.97087,47.75784],[18.00441,47.74634],[18.03806,47.75768],[18.29588,47.73146],[18.45407,47.76512],[18.49316,47.75276],[18.55908,47.766],[18.64609,47.75909],[18.72607,47.78904],[18.74118,47.81382],[18.792,47.82309],[18.84854,47.81672],[18.85588,47.82608],[18.82801,47.83429],[18.81357,47.85555],[18.76353,47.8716],[18.75686,47.89684],[18.77675,47.95509],[18.75525,47.97635],[18.81574,47.99344],[18.82,48.03968],[18.83327,48.04824],[18.87494,48.04707],[18.88667,48.05868],[18.90898,48.05114],[18.9439,48.05886],[18.98161,48.0536],[19.01486,48.07818],[19.05852,48.05735],[19.08436,48.07278],[19.1074,48.0656],[19.13529,48.07415],[19.24137,48.05365],[19.25578,48.07156],[19.30311,48.08871],[19.3866,48.09191],[19.40002,48.0823],[19.45405,48.10144],[19.46735,48.08393],[19.49442,48.10991],[19.49238,48.13966],[19.51282,48.15466],[19.50452,48.17344],[19.52897,48.19036],[19.52604,48.20313],[19.5775,48.21601],[19.63083,48.25007],[19.64452,48.23917],[19.66986,48.23921],[19.69122,48.20389],[19.72113,48.20147],[19.74618,48.21651],[19.78716,48.19253],[19.79873,48.19482],[19.80528,48.18373],[19.78242,48.16504],[19.79481,48.15353],[19.82133,48.16908],[19.84528,48.16274],[19.85517,48.17843],[19.86013,48.16941],[19.89875,48.16631],[19.91454,48.14686],[19.8983,48.1249],[19.93738,48.13112],[19.97439,48.166],[19.98871,48.16217],[20.02904,48.17768],[20.04945,48.1672],[20.07299,48.17961],[20.07004,48.1917],[20.13409,48.22518],[20.13319,48.25398],[20.20616,48.25098],[20.20383,48.26191],[20.22847,48.26278],[20.23495,48.27993],[20.28686,48.26164],[20.32571,48.27279],[20.33746,48.30167],[20.36566,48.31661],[20.38408,48.35118],[20.40983,48.36586],[20.40253,48.38256],[20.42053,48.40386],[20.41623,48.41854],[20.50793,48.48936],[20.50651,48.53442],[20.53747,48.52788],[20.54649,48.54429],[20.58659,48.53576],[20.65387,48.56141],[20.83636,48.58284],[20.8378,48.57421],[20.85044,48.58163],[20.84533,48.5665],[20.86815,48.55182],[20.92232,48.55945],[20.93463,48.53834],[20.95588,48.53396],[20.9562,48.52167],[20.98158,48.51777],[21.01511,48.53231],[21.06632,48.52589],[21.11745,48.49105],[21.16087,48.5215],[21.17963,48.51823],[21.22106,48.5375],[21.30549,48.52225],[21.31338,48.55084],[21.32688,48.55413],[21.31938,48.5612],[21.41545,48.55895],[21.42266,48.57882],[21.44061,48.5851],[21.51409,48.55107],[21.54202,48.5084],[21.61393,48.50942],[21.62019,48.46983],[21.66355,48.41796],[21.66456,48.39216],[21.70174,48.3807],[21.71187,48.35762],[21.81741,48.33279],[21.8352,48.33464],[21.83721,48.36325],[21.8843,48.35605],[21.88484,48.36754],[21.89788,48.36256],[21.8998,48.37022],[21.92819,48.3616],[21.92681,48.3709],[21.9492,48.37873],[21.99446,48.37732],[22.02133,48.39275],[22.0546,48.37753],[22.07649,48.38724],[22.08674,48.37156],[22.13591,48.38052],[22.13106,48.39123],[22.15277,48.39624],[22.15619,48.40931],[22.21257,48.42565],[22.23714,48.41004],[22.26549,48.40987],[22.23988,48.38701],[22.26757,48.36116],[22.31781,48.35454],[22.31329,48.32507],[22.33729,48.30791],[22.33843,48.27921],[22.38475,48.23396],[22.40064,48.2492],[22.43284,48.25252],[22.45639,48.24231],[22.4899,48.25342],[22.49722,48.23955],[22.51615,48.23797],[22.53111,48.20943],[22.57114,48.19614],[22.56164,48.18161],[22.59824,48.14476],[22.59028,48.10734],[22.67545,48.092],[22.73472,48.11985],[22.75762,48.12006],[22.77039,48.10902],[22.77232,48.12187],[22.80277,48.12211],[22.80253,48.10708],[22.82543,48.11751],[22.83644,48.08025],[22.86113,48.07503],[22.8678,48.05243],[22.88204,48.05481],[22.86597,48.01132],[22.83556,47.9906],[22.84076,47.98136],[22.87257,47.97527],[22.86973,47.96596],[22.89157,47.96724],[22.89744,47.95406],[22.84733,47.90776],[22.79281,47.89086],[22.75869,47.89414],[22.77775,47.84225],[22.71363,47.83609],[22.68019,47.78775],[22.61112,47.77175],[22.549,47.77222],[22.48121,47.81089],[22.45131,47.80339],[22.43133,47.73981],[22.35662,47.74862],[22.31777,47.76609],[22.31762,47.74337],[22.28514,47.72928],[22.26432,47.73107],[22.259,47.69791],[22.23068,47.6932],[22.17965,47.59161],[22.12892,47.5979],[22.09428,47.55836],[22.07826,47.56213],[22.05345,47.54748],[22.07122,47.53807],[22.06179,47.5288],[22.04513,47.53989],[22.03672,47.53267],[22.00719,47.48362],[22.03279,47.45084],[22.02388,47.39086],[22.01198,47.3758],[21.96274,47.38105],[21.93825,47.37253],[21.87779,47.28578],[21.88728,47.27305],[21.85349,47.23976],[21.85807,47.18736],[21.81248,47.16675],[21.79241,47.10598],[21.72683,47.09839],[21.6976,47.05792],[21.65042,47.04083],[21.68887,47.002],[21.66787,46.97123],[21.68149,46.96521],[21.6382,46.93305],[21.59845,46.92747],[21.61429,46.88673],[21.60167,46.86682],[21.52033,46.83737],[21.51861,46.80007],[21.48318,46.76502],[21.52634,46.73932],[21.52937,46.72097],[21.49233,46.68597],[21.47284,46.69591],[21.4299,46.69394],[21.43096,46.67814],[21.45467,46.66086],[21.41624,46.64262],[21.4098,46.62181],[21.3657,46.63795],[21.33005,46.63182],[21.31397,46.61767],[21.30124,46.59087],[21.32079,46.58286],[21.2743,46.54074],[21.26003,46.50216],[21.27442,46.47673],[21.29645,46.4763],[21.31743,46.45073],[21.28952,46.41548],[21.29633,46.40696],[21.22501,46.41369],[21.20642,46.40338],[21.19926,46.3479],[21.17623,46.33577],[21.1805,46.30445],[21.11554,46.30185],[21.10305,46.26246],[21.07088,46.2539],[21.06608,46.24294],[21.03662,46.24804],[21.02467,46.26653],[20.96082,46.2623],[20.94658,46.2793],[20.92507,46.27662],[20.92181,46.26181],[20.87327,46.28776],[20.77565,46.27596],[20.74905,46.25085],[20.76186,46.20456],[20.7274,46.20775],[20.73411,46.19394],[20.71405,46.16605],[20.68436,46.14478],[20.65492,46.14977],[20.63945,46.12676],[20.54505,46.17909],[20.50148,46.19033],[20.49494,46.17099],[20.45923,46.14288],[20.39751,46.15747],[20.36853,46.15286],[20.35571,46.16963],[20.29681,46.15215],[20.2549,46.11585],[20.24848,46.1301],[20.23301,46.12417],[20.18174,46.16011],[20.1365,46.14495],[20.10097,46.17728],[20.06362,46.14373],[20.03461,46.14589],[20.01581,46.17684],[19.93541,46.17642],[19.85335,46.15],[19.81797,46.12817],[19.75854,46.14798],[19.69821,46.18793],[19.68277,46.18004],[19.66151,46.19044],[19.63174,46.1693],[19.56765,46.17911],[19.5604,46.16658],[19.50266,46.14245],[19.52712,46.12103],[19.4645,46.09538],[19.46658,46.08204],[19.416,46.04605],[19.3804,46.03587],[19.36409,46.0523],[19.2819,46.0148],[19.29653,45.98812],[19.28565,45.9969],[19.14799,45.99634],[19.13384,46.0371],[19.10487,46.04017],[19.06604,46.0002],[19.07968,45.96364],[19.00598,45.95907],[19.00927,45.92366],[18.90613,45.93538],[18.87946,45.91668],[18.86471,45.92085],[18.86856,45.91134],[18.82768,45.90517],[18.822,45.91459],[18.80751,45.90361],[18.80925,45.87962],[18.79562,45.87845],[18.70489,45.91819],[18.67002,45.91084],[18.65966,45.91689],[18.66513,45.89928],[18.64128,45.88904],[18.65502,45.87424],[18.62777,45.87338],[18.61484,45.85314],[18.62367,45.83985],[18.57324,45.81376],[18.57498,45.80043],[18.55972,45.8038],[18.52235,45.78269],[18.49067,45.79472],[18.48219,45.7655],[18.45628,45.76952],[18.44508,45.76052],[18.44685,45.73713],[18.40763,45.73971],[18.39189,45.7617],[18.36423,45.77294],[18.33942,45.74716],[18.29682,45.76122],[18.24405,45.76123],[18.23073,45.77903],[18.19087,45.78788],[18.16819,45.77627],[18.12465,45.78963],[18.10681,45.77083],[18.08189,45.76452],[17.99588,45.79573],[17.93021,45.78633],[17.90668,45.79257],[17.86531,45.76701],[17.82627,45.81],[17.80898,45.8041],[17.78091,45.81749],[17.76034,45.81192],[17.74086,45.8296],[17.66329,45.83818],[17.62762,45.89794],[17.57007,45.93582],[17.43783,45.95038],[17.4259,45.92727],[17.41081,45.93997],[17.39215,45.93021],[17.38287,45.94757],[17.34762,45.94234],[17.34388,45.96053],[17.35377,45.9525],[17.39054,45.95819],[17.38742,45.96618],[17.35835,45.96427],[17.37549,45.96869],[17.37519,45.98811],[17.36357,45.99154],[17.35672,45.97358],[17.33396,45.99608],[17.33198,45.97289],[17.313,45.96653],[17.32365,45.98878],[17.29877,45.98387],[17.3042,46.00211],[17.25797,46.01103],[17.29632,46.02852],[17.25415,46.03001],[17.27096,46.05671],[17.23248,46.0592],[17.25251,46.06647],[17.23131,46.07903],[17.20199,46.07655],[17.23313,46.09896],[17.2104,46.10017],[17.21297,46.11386],[17.17593,46.10846],[17.17434,46.12876],[17.18652,46.13323],[17.1811,46.15055],[17.15623,46.15858],[17.15929,46.16968],[17.1261,46.16845],[17.12274,46.17898],[17.07525,46.18895],[17.06616,46.2023],[16.97354,46.2252],[16.97395,46.24311],[16.95041,46.24153],[16.88624,46.28146],[16.87137,46.32528],[16.88021,46.3357],[16.86154,46.34524],[16.86562,46.35565],[16.8522,46.35172],[16.84986,46.36262],[16.83529,46.36382],[16.83765,46.3748],[16.82617,46.3671],[16.79334,46.38739],[16.75921,46.37766],[16.72987,46.40149],[16.71821,46.38987],[16.67729,46.44945],[16.66318,46.4487],[16.66637,46.4583],[16.61879,46.46199],[16.60447,46.47608],[16.5236,46.50538],[16.53258,46.5314],[16.51767,46.53635],[16.50841,46.56527],[16.483,46.56604],[16.4834,46.5786],[16.44557,46.61095],[16.42486,46.61316],[16.38594,46.64425],[16.39154,46.66373],[16.41985,46.65848],[16.42863,46.69397],[16.36892,46.70401],[16.37983,46.71539],[16.37109,46.72229],[16.35706,46.71424],[16.3186,46.75414],[16.33054,46.77521],[16.31216,46.778],[16.31277,46.79731],[16.34064,46.80519],[16.35084,46.83006],[16.34033,46.84688],[16.3015,46.85951],[16.29139,46.87283],[16.23323,46.87667],[16.15609,46.85371],[16.12657,46.85691],[16.11391,46.8691]]],terms_url:"https://www.fomi.hu",terms_text:"Földmérési és Távérzékelési Intézet"},{id:"Freemap.sk-Car",name:"Freemap.sk Car",type:"tms",template:"https://{switch:a,b,c,d}.freemap.sk/A/{zoom}/{x}/{y}.jpeg",zoomExtent:[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.",icon:"https://raw.githubusercontent.com/FreemapSlovakia/freemap-v3-react/master/src/images/freemap-logo-small.png"},{id:"Freemap.sk-Cyclo",name:"Freemap.sk Cyclo",type:"tms",template:"https://{switch:a,b,c,d}.freemap.sk/C/{zoom}/{x}/{y}.jpeg",zoomExtent:[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.",icon:"https://raw.githubusercontent.com/FreemapSlovakia/freemap-v3-react/master/src/images/freemap-logo-small.png"},{id:"Freemap.sk-Hiking",name:"Freemap.sk Hiking",type:"tms",template:"https://{switch:a,b,c,d}.freemap.sk/T/{zoom}/{x}/{y}.jpeg",zoomExtent:[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.",icon:"https://raw.githubusercontent.com/FreemapSlovakia/freemap-v3-react/master/src/images/freemap-logo-small.png"},{id:"Freemap.sk-Ski",name:"Freemap.sk Ski",type:"tms",template:"https://{switch:a,b,c,d}.freemap.sk/K/{zoom}/{x}/{y}.jpeg",zoomExtent:[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.",icon:"https://raw.githubusercontent.com/FreemapSlovakia/freemap-v3-react/master/src/images/freemap-logo-small.png"},{id:"fta-digiroad-functional",name:"FTA Road Network",type:"wms",template:"https://extranet.liikennevirasto.fi/inspirepalvelu/beta/wms?SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=dr_tielinkki_toim_lk&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[3,20],polygon:[[[27.96569,70.0988],[27.57431,70.07728],[27.10876,69.93548],[26.70913,69.97549],[26.45507,69.94207],[25.87142,69.6671],[25.94833,69.61024],[25.83023,69.55323],[25.66955,69.20794],[25.73822,69.01797],[25.60089,68.90309],[25.45806,68.91199],[25.11749,68.80699],[25.07354,68.64355],[24.88128,68.62003],[23.97491,68.84568],[23.74969,68.8308],[23.63433,68.71645],[23.18939,68.68053],[22.52197,68.7553],[21.63894,69.28191],[21.26953,69.31783],[20.94131,69.21622],[21.08963,69.09307],[21.05941,69.04352],[20.72296,69.12491],[20.54443,69.0558],[20.84655,68.97416],[20.81634,68.91742],[21.38754,68.68461],[22.04734,68.47066],[22.80212,68.35464],[23.12072,68.13169],[23.5437,67.9633],[23.44757,67.8393],[23.48602,67.59352],[23.36517,67.46545],[23.71124,67.41592],[23.72772,67.32186],[23.54644,67.26885],[23.53128,67.16724],[23.89251,66.86863],[23.84582,66.57775],[23.61843,66.44562],[23.67171,66.20303],[23.87191,66.14551],[24.09988,65.87247],[24.1658,65.66959],[24.11636,65.39143],[21.37939,63.68037],[20.17639,63.29787],[19.08325,60.16064],[20.22033,59.44786],[22.29125,59.44507],[25.82336,59.933],[27.52075,60.23435],[27.83386,60.53229],[29.29641,61.26165],[31.20803,62.44759],[31.62826,62.90585],[31.2635,63.22106],[29.99605,63.75387],[30.28656,63.81704],[30.58319,64.0782],[30.5104,64.26428],[30.09979,64.39218],[30.02563,64.58736],[30.16845,64.63329],[30.09429,64.79518],[29.78393,64.79811],[29.65347,64.89733],[29.65759,65.05939],[29.91027,65.09527],[29.93225,65.20895],[29.72076,65.27853],[29.91577,65.63788],[30.1863,65.66223],[29.9913,66.09771],[29.07119,66.91983],[30.11077,67.63431],[29.3486,68.08099],[28.67568,68.20166],[28.46547,68.54039],[28.72375,68.72642],[28.82675,68.87341],[28.44985,68.90792],[28.95996,69.05089],[28.83324,69.10563],[28.87207,69.22132],[29.36096,69.46526],[29.15634,69.69667],[28.38455,69.83488],[28.35845,69.88312],[28.17169,69.92511],[28.00415,70.01495],[27.96569,70.0988]]],terms_url:"https://www.liikennevirasto.fi/web/en/open-data/digiroad/",terms_text:"© Liikennevirasto",description:"Digiroad national road network from the Finnish Transport Agency, functional road classes.",icon:"https://www.liikennevirasto.fi/livi-theme/images/general/liikennevirasto_logo_2x.png",overlay:true},{id:"gaza_pleiades_20140706",name:"Gaza Strip - Pléiades - 2014/07/06",type:"tms",template:"https://imagery.openstreetmap.fr/tms/1.0.0/gaza_pleiades_20140706/{zoom}/{x}/{y}",endDate:"2014-07-06T00:00:00.000Z",startDate:"2014-07-06T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[34.49022,31.59487],[34.49339,31.59263],[34.5678,31.5401],[34.5653,31.53226],[34.55613,31.52552],[34.54729,31.5121],[34.53011,31.5066],[34.5255,31.50251],[34.51369,31.50067],[34.505,31.49543],[34.4887,31.48263],[34.48532,31.48028],[34.47962,31.47778],[34.47471,31.47207],[34.4674,31.46448],[34.46576,31.46275],[34.45308,31.45139],[34.44585,31.4441],[34.44216,31.44327],[34.43798,31.44112],[34.43226,31.43458],[34.43164,31.43265],[34.4268,31.42804],[34.42211,31.42437],[34.41326,31.41862],[34.41329,31.41758],[34.41174,31.41604],[34.40918,31.41542],[34.4067,31.41295],[34.40506,31.41295],[34.40197,31.4112],[34.40134,31.40986],[34.39492,31.40391],[34.39351,31.40113],[34.38824,31.39599],[34.38037,31.38951],[34.38074,31.38791],[34.37407,31.37915],[34.37338,31.37422],[34.37159,31.37209],[34.37214,31.37093],[34.37158,31.36972],[34.3704,31.36909],[34.36827,31.36992],[34.36685,31.36914],[34.36497,31.36137],[34.37438,31.30609],[34.36708,31.29074],[34.34339,31.27846],[34.33119,31.26149],[34.31931,31.25317],[34.29093,31.24009],[34.26762,31.21894],[34.25915,31.22131],[34.231,31.26295],[34.21113,31.32157],[34.2434,31.34554],[34.29954,31.39629],[34.34172,31.43251],[34.36439,31.45715],[34.41099,31.50162],[34.42619,31.52686],[34.44463,31.54193],[34.49022,31.59487]]],terms_url:"https://wiki.openstreetmap.org/wiki/2014_Gaza_Strip",terms_text:"Copyright CNES 2014, Distribution Airbus Defence and Space"},{id:"gaza_pleiades_20140706_nir",name:"Gaza Strip - Pléiades - 2014/07/06 (NIR)",type:"tms",template:"https://imagery.openstreetmap.fr/tms/1.0.0/gaza_pleiades_20140706_nir/{zoom}/{x}/{y}",endDate:"2014-07-06T00:00:00.000Z",startDate:"2014-07-06T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[34.49022,31.59487],[34.49339,31.59263],[34.5678,31.5401],[34.5653,31.53226],[34.55613,31.52552],[34.54729,31.5121],[34.53011,31.5066],[34.5255,31.50251],[34.51369,31.50067],[34.505,31.49543],[34.4887,31.48263],[34.48532,31.48028],[34.47962,31.47778],[34.47471,31.47207],[34.4674,31.46448],[34.46576,31.46275],[34.45308,31.45139],[34.44585,31.4441],[34.44216,31.44327],[34.43798,31.44112],[34.43226,31.43458],[34.43164,31.43265],[34.4268,31.42804],[34.42211,31.42437],[34.41326,31.41862],[34.41329,31.41758],[34.41174,31.41604],[34.40918,31.41542],[34.4067,31.41295],[34.40506,31.41295],[34.40197,31.4112],[34.40134,31.40986],[34.39492,31.40391],[34.39351,31.40113],[34.38824,31.39599],[34.38037,31.38951],[34.38074,31.38791],[34.37407,31.37915],[34.37338,31.37422],[34.37159,31.37209],[34.37214,31.37093],[34.37158,31.36972],[34.3704,31.36909],[34.36827,31.36992],[34.36685,31.36914],[34.36497,31.36137],[34.37438,31.30609],[34.36708,31.29074],[34.34339,31.27846],[34.33119,31.26149],[34.31931,31.25317],[34.29093,31.24009],[34.26762,31.21894],[34.25915,31.22131],[34.231,31.26295],[34.21113,31.32157],[34.2434,31.34554],[34.29954,31.39629],[34.34172,31.43251],[34.36439,31.45715],[34.41099,31.50162],[34.42619,31.52686],[34.44463,31.54193],[34.49022,31.59487]]],terms_url:"https://wiki.openstreetmap.org/wiki/2014_Gaza_Strip",terms_text:"Copyright CNES 2014, Distribution Airbus Defence and Space"},{id:"Geobase_Hydrography",name:"Geobase Hydrography - English",type:"wms",template:"https://maps.geogratis.gc.ca/wms/hydro_network_en?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=nhn:nhn&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-141.0678,60.2442],[-139.3842,60.10331],[-137.4746,58.82791],[-135.4766,59.65971],[-134.399,58.86279],[-132.5239,57.08342],[-130.1435,55.27452],[-130.7734,54.75597],[-132.4355,54.71514],[-134.5711,54.38827],[-141.7761,53.58405],[-128.9768,46.41459],[-124.8087,48.42976],[-123.4286,48.17889],[-123.0256,48.40444],[-123.19237,48.65504],[-122.99582,48.51065],[-122.4869,48.4098],[-122.32915,48.4528],[-122.22939,48.50649],[-122.17908,48.52965],[-122.1842,48.5669],[-121.77833,48.57593],[-121.66578,48.42791],[-121.33068,48.35714],[-121.02713,48.34977],[-121.03054,48.49406],[-120.698,48.51497],[-120.51041,48.8718],[-119.97579,48.88134],[-119.95447,48.51497],[-119.90758,48.29421],[-119.73193,48.15503],[-119.74386,48.07419],[-119.62279,48.10951],[-119.60232,48.14707],[-119.25273,48.16243],[-114.1499,48.99487],[-95.12094,48.98405],[-95.13419,49.35564],[-94.94415,49.34356],[-94.8839,49.29522],[-94.71704,48.87631],[-94.71791,48.7485],[-93.83204,48.49765],[-93.43778,48.53066],[-93.38216,48.59507],[-92.98471,48.60312],[-92.73847,48.50725],[-92.7095,48.42081],[-92.54293,48.40158],[-92.38361,48.20406],[-92.11564,48.27641],[-91.58697,48.02516],[-91.24658,48.05422],[-90.86275,48.20889],[-90.78308,48.0639],[-90.0774,48.07435],[-89.93835,47.96584],[-89.75469,47.99609],[-89.32745,47.93943],[-88.41489,48.26677],[-84.9566,46.86086],[-84.84795,46.6762],[-84.55904,46.45441],[-84.47642,46.44972],[-84.43758,46.48872],[-84.3669,46.5055],[-84.34899,46.5055],[-84.29026,46.49077],[-84.25742,46.49386],[-84.22507,46.53187],[-84.1962,46.53804],[-84.18027,46.52468],[-84.15987,46.52468],[-84.13449,46.52879],[-84.11558,46.50653],[-84.15944,46.42769],[-84.10024,46.20338],[-83.95558,46.05132],[-83.8864,46.06125],[-83.8203,46.11181],[-83.76975,46.09563],[-83.67498,46.11391],[-83.58084,46.09921],[-83.44747,45.99521],[-83.60888,45.81772],[-82.14271,43.57905],[-82.39133,43.06666],[-82.41252,43.01127],[-82.42522,42.99864],[-82.42618,42.99374],[-82.42363,42.98536],[-82.41503,42.97697],[-82.41853,42.96578],[-82.43064,42.95203],[-82.44911,42.93711],[-82.45739,42.92568],[-82.46472,42.90562],[-82.47228,42.8877],[-82.47228,42.84743],[-82.48536,42.80967],[-82.46844,42.76365],[-82.48586,42.73697],[-82.49155,42.71168],[-82.51488,42.66652],[-82.51224,42.63893],[-82.52421,42.61103],[-82.56854,42.58184],[-82.59498,42.55148],[-82.61286,42.56409],[-82.65158,42.55707],[-82.83439,42.3763],[-83.01489,42.33457],[-83.07244,42.31502],[-83.09647,42.29542],[-83.12823,42.24126],[-83.14167,42.18582],[-83.12799,42.12172],[-83.16266,42.04963],[-83.05136,41.70911],[-82.41932,41.6377],[-81.22563,42.19633],[-80.06688,42.37121],[-78.86642,42.825],[-78.90301,42.92307],[-78.92063,42.95234],[-78.93331,42.95708],[-78.96058,42.9595],[-78.98479,42.9761],[-79.01825,42.9964],[-79.01969,43.01561],[-79.00695,43.0333],[-78.99599,43.06448],[-79.07335,43.07876],[-79.07286,43.083],[-79.0652,43.0917],[-79.05623,43.10825],[-79.05982,43.11563],[-79.06764,43.11992],[-79.05411,43.12801],[-79.04112,43.13986],[-79.04465,43.16192],[-79.05101,43.17037],[-79.04758,43.19974],[-79.05511,43.25682],[-79.18688,43.44858],[-78.68836,43.62502],[-76.77647,43.61369],[-76.41665,44.08498],[-75.49023,44.70772],[-75.29544,44.82587],[-75.16845,44.88548],[-75.1275,44.8975],[-75.00499,44.95265],[-74.98159,44.97728],[-74.90496,44.98222],[-74.8313,45.01108],[-74.77954,45.00158],[-74.74562,44.98526],[-74.70475,44.99877],[-74.49079,44.99343],[-74.23203,44.98552],[-73.93713,44.99512],[-73.01809,45.0121],[-72.63177,45.0121],[-72.54779,45.00506],[-72.32259,45.00286],[-71.49404,45.01093],[-71.48648,45.06221],[-71.42303,45.12765],[-71.43112,45.14037],[-71.37175,45.22117],[-71.28959,45.28578],[-71.23613,45.24302],[-71.11683,45.22933],[-71.0531,45.29866],[-70.98936,45.31088],[-70.90246,45.22525],[-70.82473,45.22714],[-70.77626,45.40013],[-70.7119,45.3754],[-70.63387,45.37346],[-70.60302,45.41179],[-70.67659,45.56319],[-70.3752,45.73075],[-70.36334,45.82013],[-70.25417,45.87468],[-70.22569,45.94403],[-70.27316,45.99022],[-70.17586,46.33538],[-70.06195,46.4107],[-69.98891,46.69363],[-69.22424,47.44463],[-69.06999,47.41092],[-69.07473,47.24202],[-68.89684,47.17469],[-68.78685,47.21493],[-68.72415,47.23217],[-68.68583,47.24028],[-68.66044,47.23183],[-68.62162,47.24028],[-68.59425,47.24974],[-68.59226,47.27001],[-68.57385,47.28486],[-68.55941,47.2798],[-68.542,47.2798],[-68.51214,47.29195],[-68.47381,47.29229],[-68.46038,47.28149],[-68.43898,47.27777],[-68.37229,47.2825],[-68.3703,47.34796],[-68.33173,47.35822],[-68.29664,47.352],[-68.2399,47.34897],[-68.0906,47.26798],[-68.00002,47.21223],[-67.96344,47.19753],[-67.93582,47.15947],[-67.88619,47.10424],[-67.80218,47.06386],[-67.79415,45.93923],[-67.82753,45.8489],[-67.82753,45.6704],[-67.54943,45.57445],[-67.45302,45.58742],[-67.44189,45.52251],[-67.54201,45.49393],[-67.4456,45.38726],[-67.51605,45.29343],[-67.38257,45.11839],[-67.3047,45.11316],[-67.26762,45.18116],[-67.12671,45.09484],[-66.94835,44.78406],[-66.52283,43.61294],[-65.02339,42.10691],[-42.53366,47.50263],[-75.90901,77.3176],[-71.86482,78.7359],[-67.20011,80.66812],[-66.20727,80.78637],[-54.82473,83.07464],[-57.62518,85.04043],[-106.7949,85.04625],[-141.3957,79.2514],[-141.0678,60.2442]]],overlay:true},{id:"Geobase_Hydrography_French",name:"Geobase Hydrography - French",type:"wms",template:"https://maps.geogratis.gc.ca/wms/hydro_network_fr?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=nhn:nhn&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-141.0678,60.2442],[-139.3842,60.10331],[-137.4746,58.82791],[-135.4766,59.65971],[-134.399,58.86279],[-132.5239,57.08342],[-130.1435,55.27452],[-130.7734,54.75597],[-132.4355,54.71514],[-134.5711,54.38827],[-141.7761,53.58405],[-128.9768,46.41459],[-124.8087,48.42976],[-123.4286,48.17889],[-123.0256,48.40444],[-123.19237,48.65504],[-122.99582,48.51065],[-122.4869,48.4098],[-122.32915,48.4528],[-122.22939,48.50649],[-122.17908,48.52965],[-122.1842,48.5669],[-121.77833,48.57593],[-121.66578,48.42791],[-121.33068,48.35714],[-121.02713,48.34977],[-121.03054,48.49406],[-120.698,48.51497],[-120.51041,48.8718],[-119.97579,48.88134],[-119.95447,48.51497],[-119.90758,48.29421],[-119.73193,48.15503],[-119.74386,48.07419],[-119.62279,48.10951],[-119.60232,48.14707],[-119.25273,48.16243],[-114.1499,48.99487],[-95.12094,48.98405],[-95.13419,49.35564],[-94.94415,49.34356],[-94.8839,49.29522],[-94.71704,48.87631],[-94.71791,48.7485],[-93.83204,48.49765],[-93.43778,48.53066],[-93.38216,48.59507],[-92.98471,48.60312],[-92.73847,48.50725],[-92.7095,48.42081],[-92.54293,48.40158],[-92.38361,48.20406],[-92.11564,48.27641],[-91.58697,48.02516],[-91.24658,48.05422],[-90.86275,48.20889],[-90.78308,48.0639],[-90.0774,48.07435],[-89.93835,47.96584],[-89.75469,47.99609],[-89.32745,47.93943],[-88.41489,48.26677],[-84.9566,46.86086],[-84.84795,46.6762],[-84.55904,46.45441],[-84.47642,46.44972],[-84.43758,46.48872],[-84.3669,46.5055],[-84.34899,46.5055],[-84.29026,46.49077],[-84.25742,46.49386],[-84.22507,46.53187],[-84.1962,46.53804],[-84.18027,46.52468],[-84.15987,46.52468],[-84.13449,46.52879],[-84.11558,46.50653],[-84.15944,46.42769],[-84.10024,46.20338],[-83.95558,46.05132],[-83.8864,46.06125],[-83.8203,46.11181],[-83.76975,46.09563],[-83.67498,46.11391],[-83.58084,46.09921],[-83.44747,45.99521],[-83.60888,45.81772],[-82.14271,43.57905],[-82.39133,43.06666],[-82.41252,43.01127],[-82.42522,42.99864],[-82.42618,42.99374],[-82.42363,42.98536],[-82.41503,42.97697],[-82.41853,42.96578],[-82.43064,42.95203],[-82.44911,42.93711],[-82.45739,42.92568],[-82.46472,42.90562],[-82.47228,42.8877],[-82.47228,42.84743],[-82.48536,42.80967],[-82.46844,42.76365],[-82.48586,42.73697],[-82.49155,42.71168],[-82.51488,42.66652],[-82.51224,42.63893],[-82.52421,42.61103],[-82.56854,42.58184],[-82.59498,42.55148],[-82.61286,42.56409],[-82.65158,42.55707],[-82.83439,42.3763],[-83.01489,42.33457],[-83.07244,42.31502],[-83.09647,42.29542],[-83.12823,42.24126],[-83.14167,42.18582],[-83.12799,42.12172],[-83.16266,42.04963],[-83.05136,41.70911],[-82.41932,41.6377],[-81.22563,42.19633],[-80.06688,42.37121],[-78.86642,42.825],[-78.90301,42.92307],[-78.92063,42.95234],[-78.93331,42.95708],[-78.96058,42.9595],[-78.98479,42.9761],[-79.01825,42.9964],[-79.01969,43.01561],[-79.00695,43.0333],[-78.99599,43.06448],[-79.07335,43.07876],[-79.07286,43.083],[-79.0652,43.0917],[-79.05623,43.10825],[-79.05982,43.11563],[-79.06764,43.11992],[-79.05411,43.12801],[-79.04112,43.13986],[-79.04465,43.16192],[-79.05101,43.17037],[-79.04758,43.19974],[-79.05511,43.25682],[-79.18688,43.44858],[-78.68836,43.62502],[-76.77647,43.61369],[-76.41665,44.08498],[-75.49023,44.70772],[-75.29544,44.82587],[-75.16845,44.88548],[-75.1275,44.8975],[-75.00499,44.95265],[-74.98159,44.97728],[-74.90496,44.98222],[-74.8313,45.01108],[-74.77954,45.00158],[-74.74562,44.98526],[-74.70475,44.99877],[-74.49079,44.99343],[-74.23203,44.98552],[-73.93713,44.99512],[-73.01809,45.0121],[-72.63177,45.0121],[-72.54779,45.00506],[-72.32259,45.00286],[-71.49404,45.01093],[-71.48648,45.06221],[-71.42303,45.12765],[-71.43112,45.14037],[-71.37175,45.22117],[-71.28959,45.28578],[-71.23613,45.24302],[-71.11683,45.22933],[-71.0531,45.29866],[-70.98936,45.31088],[-70.90246,45.22525],[-70.82473,45.22714],[-70.77626,45.40013],[-70.7119,45.3754],[-70.63387,45.37346],[-70.60302,45.41179],[-70.67659,45.56319],[-70.3752,45.73075],[-70.36334,45.82013],[-70.25417,45.87468],[-70.22569,45.94403],[-70.27316,45.99022],[-70.17586,46.33538],[-70.06195,46.4107],[-69.98891,46.69363],[-69.22424,47.44463],[-69.06999,47.41092],[-69.07473,47.24202],[-68.89684,47.17469],[-68.78685,47.21493],[-68.72415,47.23217],[-68.68583,47.24028],[-68.66044,47.23183],[-68.62162,47.24028],[-68.59425,47.24974],[-68.59226,47.27001],[-68.57385,47.28486],[-68.55941,47.2798],[-68.542,47.2798],[-68.51214,47.29195],[-68.47381,47.29229],[-68.46038,47.28149],[-68.43898,47.27777],[-68.37229,47.2825],[-68.3703,47.34796],[-68.33173,47.35822],[-68.29664,47.352],[-68.2399,47.34897],[-68.0906,47.26798],[-68.00002,47.21223],[-67.96344,47.19753],[-67.93582,47.15947],[-67.88619,47.10424],[-67.80218,47.06386],[-67.79415,45.93923],[-67.82753,45.8489],[-67.82753,45.6704],[-67.54943,45.57445],[-67.45302,45.58742],[-67.44189,45.52251],[-67.54201,45.49393],[-67.4456,45.38726],[-67.51605,45.29343],[-67.38257,45.11839],[-67.3047,45.11316],[-67.26762,45.18116],[-67.12671,45.09484],[-66.94835,44.78406],[-66.52283,43.61294],[-65.02339,42.10691],[-42.53366,47.50263],[-75.90901,77.3176],[-71.86482,78.7359],[-67.20011,80.66812],[-66.20727,80.78637],[-54.82473,83.07464],[-57.62518,85.04043],[-106.7949,85.04625],[-141.3957,79.2514],[-141.0678,60.2442]]],overlay:true},{id:"Geobase_Roads",name:"Geobase Roads - English",type:"wms",template:"https://maps.geogratis.gc.ca/wms/roads_en?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=roads&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[4,20],polygon:[[[-141.0678,60.2442],[-139.3842,60.10331],[-137.4746,58.82791],[-135.4766,59.65971],[-134.399,58.86279],[-132.5239,57.08342],[-130.1435,55.27452],[-130.7734,54.75597],[-132.4355,54.71514],[-134.5711,54.38827],[-141.7761,53.58405],[-128.9768,46.41459],[-124.8087,48.42976],[-123.4286,48.17889],[-123.0256,48.40444],[-123.19237,48.65504],[-122.99582,48.51065],[-122.4869,48.4098],[-122.32915,48.4528],[-122.22939,48.50649],[-122.17908,48.52965],[-122.1842,48.5669],[-121.77833,48.57593],[-121.66578,48.42791],[-121.33068,48.35714],[-121.02713,48.34977],[-121.03054,48.49406],[-120.698,48.51497],[-120.51041,48.8718],[-119.97579,48.88134],[-119.95447,48.51497],[-119.90758,48.29421],[-119.73193,48.15503],[-119.74386,48.07419],[-119.62279,48.10951],[-119.60232,48.14707],[-119.25273,48.16243],[-114.1499,48.99487],[-95.12094,48.98405],[-95.13419,49.35564],[-94.94415,49.34356],[-94.8839,49.29522],[-94.71704,48.87631],[-94.71791,48.7485],[-93.83204,48.49765],[-93.43778,48.53066],[-93.38216,48.59507],[-92.98471,48.60312],[-92.73847,48.50725],[-92.7095,48.42081],[-92.54293,48.40158],[-92.38361,48.20406],[-92.11564,48.27641],[-91.58697,48.02516],[-91.24658,48.05422],[-90.86275,48.20889],[-90.78308,48.0639],[-90.0774,48.07435],[-89.93835,47.96584],[-89.75469,47.99609],[-89.32745,47.93943],[-88.41489,48.26677],[-84.9566,46.86086],[-84.84795,46.6762],[-84.55904,46.45441],[-84.47642,46.44972],[-84.43758,46.48872],[-84.3669,46.5055],[-84.34899,46.5055],[-84.29026,46.49077],[-84.25742,46.49386],[-84.22507,46.53187],[-84.1962,46.53804],[-84.18027,46.52468],[-84.15987,46.52468],[-84.13449,46.52879],[-84.11558,46.50653],[-84.15944,46.42769],[-84.10024,46.20338],[-83.95558,46.05132],[-83.8864,46.06125],[-83.8203,46.11181],[-83.76975,46.09563],[-83.67498,46.11391],[-83.58084,46.09921],[-83.44747,45.99521],[-83.60888,45.81772],[-82.14271,43.57905],[-82.39133,43.06666],[-82.41252,43.01127],[-82.42522,42.99864],[-82.42618,42.99374],[-82.42363,42.98536],[-82.41503,42.97697],[-82.41853,42.96578],[-82.43064,42.95203],[-82.44911,42.93711],[-82.45739,42.92568],[-82.46472,42.90562],[-82.47228,42.8877],[-82.47228,42.84743],[-82.48536,42.80967],[-82.46844,42.76365],[-82.48586,42.73697],[-82.49155,42.71168],[-82.51488,42.66652],[-82.51224,42.63893],[-82.52421,42.61103],[-82.56854,42.58184],[-82.59498,42.55148],[-82.61286,42.56409],[-82.65158,42.55707],[-82.83439,42.3763],[-83.01489,42.33457],[-83.07244,42.31502],[-83.09647,42.29542],[-83.12823,42.24126],[-83.14167,42.18582],[-83.12799,42.12172],[-83.16266,42.04963],[-83.05136,41.70911],[-82.41932,41.6377],[-81.22563,42.19633],[-80.06688,42.37121],[-78.86642,42.825],[-78.90301,42.92307],[-78.92063,42.95234],[-78.93331,42.95708],[-78.96058,42.9595],[-78.98479,42.9761],[-79.01825,42.9964],[-79.01969,43.01561],[-79.00695,43.0333],[-78.99599,43.06448],[-79.07335,43.07876],[-79.07286,43.083],[-79.0652,43.0917],[-79.05623,43.10825],[-79.05982,43.11563],[-79.06764,43.11992],[-79.05411,43.12801],[-79.04112,43.13986],[-79.04465,43.16192],[-79.05101,43.17037],[-79.04758,43.19974],[-79.05511,43.25682],[-79.18688,43.44858],[-78.68836,43.62502],[-76.77647,43.61369],[-76.41665,44.08498],[-75.49023,44.70772],[-75.29544,44.82587],[-75.16845,44.88548],[-75.1275,44.8975],[-75.00499,44.95265],[-74.98159,44.97728],[-74.90496,44.98222],[-74.8313,45.01108],[-74.77954,45.00158],[-74.74562,44.98526],[-74.70475,44.99877],[-74.49079,44.99343],[-74.23203,44.98552],[-73.93713,44.99512],[-73.01809,45.0121],[-72.63177,45.0121],[-72.54779,45.00506],[-72.32259,45.00286],[-71.49404,45.01093],[-71.48648,45.06221],[-71.42303,45.12765],[-71.43112,45.14037],[-71.37175,45.22117],[-71.28959,45.28578],[-71.23613,45.24302],[-71.11683,45.22933],[-71.0531,45.29866],[-70.98936,45.31088],[-70.90246,45.22525],[-70.82473,45.22714],[-70.77626,45.40013],[-70.7119,45.3754],[-70.63387,45.37346],[-70.60302,45.41179],[-70.67659,45.56319],[-70.3752,45.73075],[-70.36334,45.82013],[-70.25417,45.87468],[-70.22569,45.94403],[-70.27316,45.99022],[-70.17586,46.33538],[-70.06195,46.4107],[-69.98891,46.69363],[-69.22424,47.44463],[-69.06999,47.41092],[-69.07473,47.24202],[-68.89684,47.17469],[-68.78685,47.21493],[-68.72415,47.23217],[-68.68583,47.24028],[-68.66044,47.23183],[-68.62162,47.24028],[-68.59425,47.24974],[-68.59226,47.27001],[-68.57385,47.28486],[-68.55941,47.2798],[-68.542,47.2798],[-68.51214,47.29195],[-68.47381,47.29229],[-68.46038,47.28149],[-68.43898,47.27777],[-68.37229,47.2825],[-68.3703,47.34796],[-68.33173,47.35822],[-68.29664,47.352],[-68.2399,47.34897],[-68.0906,47.26798],[-68.00002,47.21223],[-67.96344,47.19753],[-67.93582,47.15947],[-67.88619,47.10424],[-67.80218,47.06386],[-67.79415,45.93923],[-67.82753,45.8489],[-67.82753,45.6704],[-67.54943,45.57445],[-67.45302,45.58742],[-67.44189,45.52251],[-67.54201,45.49393],[-67.4456,45.38726],[-67.51605,45.29343],[-67.38257,45.11839],[-67.3047,45.11316],[-67.26762,45.18116],[-67.12671,45.09484],[-66.94835,44.78406],[-66.52283,43.61294],[-65.02339,42.10691],[-42.53366,47.50263],[-75.90901,77.3176],[-71.86482,78.7359],[-67.20011,80.66812],[-66.20727,80.78637],[-54.82473,83.07464],[-57.62518,85.04043],[-106.7949,85.04625],[-141.3957,79.2514],[-141.0678,60.2442]]]},{id:"Geobase_Roads_French",name:"Geobase Roads - French",type:"wms",template:"https://cartes.geogratis.gc.ca/wms/roads_fr?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=routes&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[4,20],polygon:[[[-141.0678,60.2442],[-139.3842,60.10331],[-137.4746,58.82791],[-135.4766,59.65971],[-134.399,58.86279],[-132.5239,57.08342],[-130.1435,55.27452],[-130.7734,54.75597],[-132.4355,54.71514],[-134.5711,54.38827],[-141.7761,53.58405],[-128.9768,46.41459],[-124.8087,48.42976],[-123.4286,48.17889],[-123.0256,48.40444],[-123.19237,48.65504],[-122.99582,48.51065],[-122.4869,48.4098],[-122.32915,48.4528],[-122.22939,48.50649],[-122.17908,48.52965],[-122.1842,48.5669],[-121.77833,48.57593],[-121.66578,48.42791],[-121.33068,48.35714],[-121.02713,48.34977],[-121.03054,48.49406],[-120.698,48.51497],[-120.51041,48.8718],[-119.97579,48.88134],[-119.95447,48.51497],[-119.90758,48.29421],[-119.73193,48.15503],[-119.74386,48.07419],[-119.62279,48.10951],[-119.60232,48.14707],[-119.25273,48.16243],[-114.1499,48.99487],[-95.12094,48.98405],[-95.13419,49.35564],[-94.94415,49.34356],[-94.8839,49.29522],[-94.71704,48.87631],[-94.71791,48.7485],[-93.83204,48.49765],[-93.43778,48.53066],[-93.38216,48.59507],[-92.98471,48.60312],[-92.73847,48.50725],[-92.7095,48.42081],[-92.54293,48.40158],[-92.38361,48.20406],[-92.11564,48.27641],[-91.58697,48.02516],[-91.24658,48.05422],[-90.86275,48.20889],[-90.78308,48.0639],[-90.0774,48.07435],[-89.93835,47.96584],[-89.75469,47.99609],[-89.32745,47.93943],[-88.41489,48.26677],[-84.9566,46.86086],[-84.84795,46.6762],[-84.55904,46.45441],[-84.47642,46.44972],[-84.43758,46.48872],[-84.3669,46.5055],[-84.34899,46.5055],[-84.29026,46.49077],[-84.25742,46.49386],[-84.22507,46.53187],[-84.1962,46.53804],[-84.18027,46.52468],[-84.15987,46.52468],[-84.13449,46.52879],[-84.11558,46.50653],[-84.15944,46.42769],[-84.10024,46.20338],[-83.95558,46.05132],[-83.8864,46.06125],[-83.8203,46.11181],[-83.76975,46.09563],[-83.67498,46.11391],[-83.58084,46.09921],[-83.44747,45.99521],[-83.60888,45.81772],[-82.14271,43.57905],[-82.39133,43.06666],[-82.41252,43.01127],[-82.42522,42.99864],[-82.42618,42.99374],[-82.42363,42.98536],[-82.41503,42.97697],[-82.41853,42.96578],[-82.43064,42.95203],[-82.44911,42.93711],[-82.45739,42.92568],[-82.46472,42.90562],[-82.47228,42.8877],[-82.47228,42.84743],[-82.48536,42.80967],[-82.46844,42.76365],[-82.48586,42.73697],[-82.49155,42.71168],[-82.51488,42.66652],[-82.51224,42.63893],[-82.52421,42.61103],[-82.56854,42.58184],[-82.59498,42.55148],[-82.61286,42.56409],[-82.65158,42.55707],[-82.83439,42.3763],[-83.01489,42.33457],[-83.07244,42.31502],[-83.09647,42.29542],[-83.12823,42.24126],[-83.14167,42.18582],[-83.12799,42.12172],[-83.16266,42.04963],[-83.05136,41.70911],[-82.41932,41.6377],[-81.22563,42.19633],[-80.06688,42.37121],[-78.86642,42.825],[-78.90301,42.92307],[-78.92063,42.95234],[-78.93331,42.95708],[-78.96058,42.9595],[-78.98479,42.9761],[-79.01825,42.9964],[-79.01969,43.01561],[-79.00695,43.0333],[-78.99599,43.06448],[-79.07335,43.07876],[-79.07286,43.083],[-79.0652,43.0917],[-79.05623,43.10825],[-79.05982,43.11563],[-79.06764,43.11992],[-79.05411,43.12801],[-79.04112,43.13986],[-79.04465,43.16192],[-79.05101,43.17037],[-79.04758,43.19974],[-79.05511,43.25682],[-79.18688,43.44858],[-78.68836,43.62502],[-76.77647,43.61369],[-76.41665,44.08498],[-75.49023,44.70772],[-75.29544,44.82587],[-75.16845,44.88548],[-75.1275,44.8975],[-75.00499,44.95265],[-74.98159,44.97728],[-74.90496,44.98222],[-74.8313,45.01108],[-74.77954,45.00158],[-74.74562,44.98526],[-74.70475,44.99877],[-74.49079,44.99343],[-74.23203,44.98552],[-73.93713,44.99512],[-73.01809,45.0121],[-72.63177,45.0121],[-72.54779,45.00506],[-72.32259,45.00286],[-71.49404,45.01093],[-71.48648,45.06221],[-71.42303,45.12765],[-71.43112,45.14037],[-71.37175,45.22117],[-71.28959,45.28578],[-71.23613,45.24302],[-71.11683,45.22933],[-71.0531,45.29866],[-70.98936,45.31088],[-70.90246,45.22525],[-70.82473,45.22714],[-70.77626,45.40013],[-70.7119,45.3754],[-70.63387,45.37346],[-70.60302,45.41179],[-70.67659,45.56319],[-70.3752,45.73075],[-70.36334,45.82013],[-70.25417,45.87468],[-70.22569,45.94403],[-70.27316,45.99022],[-70.17586,46.33538],[-70.06195,46.4107],[-69.98891,46.69363],[-69.22424,47.44463],[-69.06999,47.41092],[-69.07473,47.24202],[-68.89684,47.17469],[-68.78685,47.21493],[-68.72415,47.23217],[-68.68583,47.24028],[-68.66044,47.23183],[-68.62162,47.24028],[-68.59425,47.24974],[-68.59226,47.27001],[-68.57385,47.28486],[-68.55941,47.2798],[-68.542,47.2798],[-68.51214,47.29195],[-68.47381,47.29229],[-68.46038,47.28149],[-68.43898,47.27777],[-68.37229,47.2825],[-68.3703,47.34796],[-68.33173,47.35822],[-68.29664,47.352],[-68.2399,47.34897],[-68.0906,47.26798],[-68.00002,47.21223],[-67.96344,47.19753],[-67.93582,47.15947],[-67.88619,47.10424],[-67.80218,47.06386],[-67.79415,45.93923],[-67.82753,45.8489],[-67.82753,45.6704],[-67.54943,45.57445],[-67.45302,45.58742],[-67.44189,45.52251],[-67.54201,45.49393],[-67.4456,45.38726],[-67.51605,45.29343],[-67.38257,45.11839],[-67.3047,45.11316],[-67.26762,45.18116],[-67.12671,45.09484],[-66.94835,44.78406],[-66.52283,43.61294],[-65.02339,42.10691],[-42.53366,47.50263],[-75.90901,77.3176],[-71.86482,78.7359],[-67.20011,80.66812],[-66.20727,80.78637],[-54.82473,83.07464],[-57.62518,85.04043],[-106.7949,85.04625],[-141.3957,79.2514],[-141.0678,60.2442]]]},{id:"geoimage.at",name:"Geoimage.at MaxRes",type:"wms",template:"https://gis.bmlfuw.gv.at/wmsgw/?key=4d80de696cd562a63ce463a58a61488d&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=Luftbild_MR,Luftbild_1m,Luftbild_8m,Satellitenbild_30m&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[16.50733,46.99293],[16.28342,46.99293],[16.13584,46.8713],[15.98317,46.81909],[16.04933,46.65517],[15.86104,46.71801],[15.75926,46.69009],[15.56079,46.67962],[15.57606,46.63421],[15.47937,46.60276],[15.43357,46.65168],[15.22493,46.63421],[15.04682,46.64819],[14.99084,46.58877],[14.9603,46.62373],[14.85344,46.60276],[14.83308,46.50127],[14.75166,46.49776],[14.68041,46.43818],[14.61426,46.43818],[14.57864,46.37853],[14.44124,46.43116],[14.16135,46.42766],[14.12573,46.47674],[14.01886,46.47674],[13.91199,46.52578],[13.82548,46.50477],[13.44381,46.56078],[13.30641,46.55028],[13.1283,46.58877],[12.84332,46.61324],[12.72628,46.6412],[12.51255,46.66565],[12.35988,46.70405],[12.36497,46.77032],[12.28863,46.77729],[12.27337,46.88522],[12.20721,46.87478],[12.13088,46.90261],[12.11561,46.99987],[12.25301,47.06577],[12.2123,47.0935],[11.9833,47.04497],[11.73394,46.96168],[11.63217,47.01028],[11.54057,46.97557],[11.49986,47.00681],[11.41843,46.96515],[11.25559,46.97557],[11.1131,46.91304],[11.04185,46.76335],[10.88919,46.75986],[10.74161,46.78426],[10.70599,46.86435],[10.57877,46.83998],[10.45663,46.85043],[10.47699,46.92694],[10.38539,46.98946],[10.23272,46.86435],[10.12076,46.83302],[9.86632,46.94084],[9.90194,47.00334],[9.68312,47.05884],[9.61188,47.03804],[9.63223,47.12813],[9.58134,47.1662],[9.54063,47.26644],[9.60679,47.34926],[9.67294,47.36994],[9.64241,47.44571],[9.56608,47.48011],[9.71365,47.52824],[9.7849,47.59692],[9.83579,47.54542],[9.94774,47.53855],[10.09023,47.44915],[10.11059,47.36649],[10.2429,47.38717],[10.18692,47.2699],[10.32432,47.29751],[10.48208,47.44915],[10.43119,47.48699],[10.44137,47.59005],[10.48717,47.55229],[10.54823,47.53511],[10.59912,47.56602],[10.75688,47.53168],[10.88919,47.54542],[10.94008,47.48699],[10.99605,47.39061],[11.23523,47.44227],[11.28103,47.3975],[11.42352,47.51449],[11.57619,47.50762],[11.60672,47.59005],[11.83572,47.58662],[12.00366,47.62436],[12.20721,47.60378],[12.16141,47.69634],[12.2581,47.74427],[12.25301,47.67921],[12.43112,47.71004],[12.49219,47.63122],[12.56852,47.62779],[12.62959,47.68949],[12.77208,47.66893],[12.83315,47.54198],[12.97564,47.47323],[13.04179,47.49387],[13.0367,47.55572],[13.09777,47.64151],[13.03161,47.71004],[12.90439,47.72031],[13.00617,47.84683],[12.9451,47.93555],[12.86368,47.95941],[12.86368,48.00369],[12.75172,48.09894],[12.87386,48.21097],[12.96037,48.21097],[13.04179,48.2652],[13.18428,48.29907],[13.26061,48.2923],[13.39801,48.35659],[13.44381,48.41742],[13.43872,48.55234],[13.50997,48.58601],[13.61175,48.57255],[13.72879,48.5119],[13.78477,48.57255],[13.82039,48.62639],[13.79495,48.71713],[13.85093,48.77417],[14.05957,48.66338],[14.01377,48.63312],[14.07484,48.59274],[14.21733,48.59611],[14.3649,48.54897],[14.46668,48.64993],[14.55828,48.59611],[14.59899,48.62639],[14.72113,48.57591],[14.72113,48.6869],[14.8229,48.7272],[14.81782,48.77753],[14.96472,48.78518],[14.98936,49.01266],[15.14859,48.99503],[15.19439,48.93155],[15.30635,48.98501],[15.39286,48.98501],[15.48446,48.92821],[15.74908,48.8546],[15.84068,48.88807],[16.00862,48.78088],[16.20708,48.73391],[16.39537,48.73727],[16.49206,48.81105],[16.69053,48.77417],[16.7058,48.73391],[16.89917,48.71377],[16.97551,48.51527],[16.84828,48.45118],[16.85337,48.34644],[16.95515,48.25165],[16.99077,48.1499],[17.09255,48.13971],[17.08237,48.02412],[17.17397,48.02071],[17.08237,47.87414],[16.98568,47.86732],[17.08237,47.80925],[17.09255,47.70319],[16.74142,47.67921],[16.7058,47.75112],[16.53786,47.75454],[16.54804,47.70662],[16.42082,47.66893],[16.57348,47.6175],[16.67017,47.63122],[16.71088,47.53855],[16.66,47.44915],[16.54295,47.39406],[16.46153,47.39406],[16.49206,47.2768],[16.42591,47.19733],[16.47171,47.1489],[16.54804,47.1489],[16.47679,47.07964],[16.52768,47.05884],[16.50733,46.99293]]],terms_url:"http://geoimage.at",terms_text:"geoimage.at",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/at/GeoimageatMaxRes.png"},{id:"Geolittoral-Orthophotos2000",name:"Géolittoral - Orthophotos 2000",type:"wms",template:"http://geolittoral.din.developpement-durable.gouv.fr/wxs?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortholittorale&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2000-01-01T00:00:00.000Z",startDate:"2000-01-01T00:00:00.000Z",polygon:[[[-1.07962,46.10959],[-0.94115,46.01474],[-0.56306,45.15178],[-0.7266,45.08425],[-0.87904,45.34094],[-0.99794,45.33779],[-0.95558,44.69982],[-1.15862,44.19865],[-1.21512,44.20558],[-1.24654,44.1162],[-1.27903,44.03937],[-1.28825,44.02304],[-1.32117,43.94094],[-1.32151,43.92296],[-1.3092,43.92337],[-1.3085,43.91439],[-1.28366,43.91514],[-1.28302,43.90624],[-1.2761,43.90655],[-1.28211,43.89254],[-1.30102,43.85159],[-1.30384,43.8424],[-1.30923,43.83498],[-1.33474,43.76946],[-1.34407,43.74875],[-1.3456,43.74214],[-1.34673,43.73688],[-1.43284,43.53152],[-1.42806,43.46812],[-1.60627,43.40591],[-1.6061,43.36012],[-1.77441,43.30357],[-1.82995,43.38484],[-1.58551,43.46856],[-1.35706,44.03374],[-1.40217,44.06461],[-1.33584,44.22832],[-1.21836,44.23033],[-1.16795,44.41097],[-1.30744,44.41847],[-1.16979,45.59107],[-1.48685,46.06042],[-1.36364,46.09146],[-1.60176,46.17019],[-1.64442,46.22375],[-1.58595,46.30426],[-1.51008,46.33888],[-1.75643,46.42214],[-2.1872,46.81857],[-2.16423,46.85534],[-2.23654,46.9337],[-2.39769,46.96718],[-2.282,47.07631],[-2.12563,47.01875],[-2.09013,47.06562],[-2.18487,47.10698],[-2.2647,47.10763],[-2.24489,47.18562],[-2.56779,47.24467],[-2.66727,47.46686],[-2.74787,47.47122],[-2.75771,47.43461],[-2.89321,47.4629],[-2.90369,47.50905],[-3.03383,47.53833],[-3.07113,47.51185],[-3.01653,47.49873],[-3.12502,47.42693],[-3.18803,47.48441],[-3.22791,47.61132],[-3.2967,47.63161],[-3.2876,47.67154],[-3.34074,47.66893],[-3.38912,47.59473],[-3.55087,47.63827],[-3.53384,47.72488],[-3.76577,47.76476],[-3.77595,47.7371],[-3.91168,47.75915],[-3.8959,47.79911],[-3.97236,47.81526],[-3.99722,47.7975],[-3.97956,47.76268],[-3.8945,47.72193],[-3.9162,47.67831],[-4.10163,47.70921],[-4.08989,47.78944],[-4.03798,47.79909],[-4.04125,47.83109],[-4.08765,47.84221],[-4.14781,47.82525],[-4.14314,47.78847],[-4.35162,47.7415],[-4.47962,47.9776],[-4.98565,47.99896],[-4.96938,48.08972],[-4.63576,48.07798],[-4.60147,48.11469],[-4.385,48.10962],[-4.38955,48.14543],[-4.30925,48.15009],[-4.31268,48.17694],[-4.46369,48.18468],[-4.49748,48.1453],[-4.5921,48.14758],[-4.57537,48.22488],[-4.67101,48.2331],[-4.65434,48.31049],[-4.84243,48.3005],[-5.19867,48.44926],[-5.10346,48.51722],[-4.81465,48.39413],[-4.83515,48.54319],[-4.63387,48.66373],[-3.96692,48.77978],[-3.94939,48.74715],[-3.6502,48.75356],[-3.65853,48.82527],[-3.53931,48.85834],[-3.54444,48.90297],[-3.40954,48.91866],[-3.40755,48.87366],[-3.02769,48.9275],[-2.67861,48.58841],[-2.28475,48.71909],[-2.17543,48.65016],[-2.0137,48.73221],[-1.80953,48.73178],[-1.80392,48.66126],[-1.61161,48.68582],[-1.71645,49.24781],[-1.8026,49.32721],[-1.85748,49.3253],[-1.9262,49.65573],[-2.03908,49.67872],[-2.00445,49.76087],[-1.61759,49.68498],[-1.28373,49.76067],[-1.1492,49.63504],[-1.17134,49.55412],[-1.27353,49.55245],[-1.1328,49.3934],[-0.93059,49.40804],[-0.74827,49.35976],[-0.38935,49.34167],[-0.24704,49.29995],[-0.12454,49.29353],[0.02731,49.37619],[0.01801,49.54656],[0.12211,49.69292],[0.51713,49.86466],[1.05727,49.94904],[1.43908,50.11819],[1.53177,50.46437],[1.52549,50.85867],[1.64118,50.95919],[2.4521,51.12144],[2.59286,51.12124],[2.60683,51.05779],[1.7976,50.89906],[1.66458,50.82379],[1.70786,50.1282],[1.05936,49.85],[0.61607,49.79062],[0.24731,49.65027],[0.1709,49.53174],[0.57065,49.49622],[0.41115,49.3396],[0.19504,49.35736],[0.01718,49.25479],[-0.24453,49.26312],[-0.38408,49.30495],[-0.74091,49.32438],[-0.9954,49.37133],[-1.05453,49.25175],[-1.27704,49.29022],[-1.25966,49.43463],[-1.39141,49.53985],[-1.27535,49.62056],[-1.29775,49.65946],[-1.4905,49.57139],[-1.77517,49.63398],[-1.74601,49.48155],[-1.51294,49.24691],[-1.48261,48.72607],[-1.30574,48.72531],[-1.28323,48.59731],[-2.76114,48.43471],[-3.00174,48.67646],[-3.21062,48.72097],[-3.95404,48.56051],[-4.15643,48.60792],[-4.44475,48.55852],[-4.63683,48.48299],[-4.6319,48.44727],[-4.25022,48.43088],[-4.06141,48.21805],[-4.1757,48.05165],[-4.31904,48.0141],[-4.26781,47.89977],[-3.88484,47.98172],[-3.76375,47.86403],[-2.32727,47.52634],[-2.36911,47.3339],[-1.74067,47.33507],[-1.77062,47.20451],[-2.03678,47.21942],[-2.0968,47.15548],[-1.88786,47.01239],[-2.08797,46.83007],[-2.01214,46.83436],[-1.84079,46.69651],[-1.87318,46.65484],[-1.68859,46.50392],[-1.62117,46.51513],[-1.42428,46.41675],[-1.01761,46.35917],[-1.07962,46.10959]],[[-2.41232,46.69242],[-2.37197,46.67611],[-2.26749,46.68033],[-2.27007,46.70705],[-2.29827,46.73286],[-2.41655,46.73711],[-2.41232,46.69242]],[[-3.06018,47.40542],[-2.82587,47.29635],[-2.78787,47.33417],[-3.02436,47.44563],[-3.06018,47.40542]],[[-3.26482,47.4295],[-3.3343,47.35928],[-3.29614,47.34133],[-3.31489,47.30057],[-3.19941,47.24492],[-3.16567,47.27751],[-3.08686,47.23612],[-3.00637,47.30855],[-3.26482,47.4295]],[[-1.93966,48.86346],[-1.93993,48.91179],[-1.701,48.91105],[-1.69726,48.86173],[-1.93966,48.86346]]],terms_url:"https://wiki.openstreetmap.org/wiki/WikiProject_France/G%C3%A9oLittoral",terms_text:"Ortho littorale 2000"},{id:"Geolittoral-Sentiers",name:"Géolittoral - Sentiers",type:"wms",template:"http://geolittoral.din.developpement-durable.gouv.fr/wxs?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=n_sentier_littoral_l&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-0.98385,46.18807],[-0.89497,46.15628],[-0.93455,46.10163],[-0.84388,46.06949],[-0.88241,46.01637],[-0.53787,45.89558],[-0.63498,45.76444],[-0.86666,45.8479],[-0.76264,45.6245],[-0.69695,45.62659],[-0.69397,45.60184],[-0.68755,45.60174],[-0.688,45.50986],[-0.63799,45.50892],[-0.63978,45.44747],[-0.61574,45.44695],[-0.61619,45.38586],[-0.58544,45.38596],[-0.58529,45.32334],[-0.55379,45.32344],[-0.55275,45.19661],[-0.49094,45.19577],[-0.49184,45.13315],[-0.45661,45.13325],[-0.45512,45.07161],[-0.41611,45.07089],[-0.41621,45.02696],[-0.2907,44.98278],[-0.22,45.06771],[-0.12252,45.02563],[-0.18925,44.94591],[-0.09266,44.91019],[-0.14521,44.8392],[-0.15491,44.84238],[-0.19387,44.78678],[-0.43541,44.87317],[-0.39048,44.68413],[-0.58798,44.66014],[-0.66628,44.99129],[-0.77838,44.99263],[-0.77764,45.05389],[-0.81584,45.05321],[-0.81838,45.11962],[-0.88393,45.12051],[-0.88171,45.18081],[-0.93438,45.18185],[-0.9328,45.24484],[-1.00163,45.24439],[-1.00247,45.30827],[-1.0524,45.31013],[-1.04828,45.36911],[-1.06412,45.36911],[-1.05039,45.18252],[-1.10761,44.80787],[-1.01514,44.80113],[-1.01946,44.76914],[-0.93365,44.76149],[-0.9404,44.7018],[-0.96035,44.56434],[-1.01408,44.56765],[-1.09916,44.1456],[-1.22689,44.14022],[-1.21853,44.03249],[-1.30762,44.029],[-1.39572,43.74301],[-1.31296,43.72951],[-1.37439,43.53109],[-1.34589,43.50606],[-1.59964,43.35423],[-1.76549,43.25548],[-1.79281,43.28038],[-1.80281,43.40425],[-1.72832,43.45033],[-1.58531,43.489],[-1.33584,44.22832],[-1.30744,44.41847],[-1.22511,45.44416],[-1.48685,46.06042],[-1.60176,46.17019],[-1.64442,46.22375],[-1.75643,46.42214],[-2.03483,46.61895],[-2.3466,46.62382],[-2.46561,46.71196],[-2.3233,46.83812],[-2.45286,46.93856],[-2.31733,47.16214],[-2.92848,47.28413],[-2.96742,47.22147],[-3.35602,47.32474],[-3.18803,47.48441],[-3.22791,47.61132],[-3.38912,47.59473],[-3.9162,47.67831],[-4.10163,47.70921],[-4.14314,47.78847],[-4.37619,47.71067],[-4.47962,47.9776],[-4.98565,47.99896],[-4.96938,48.08972],[-4.60147,48.11469],[-4.5921,48.14758],[-4.67101,48.2331],[-4.84243,48.3005],[-5.19867,48.44926],[-5.10346,48.51722],[-4.83515,48.54319],[-4.63117,48.66129],[-3.96692,48.77978],[-3.94939,48.74715],[-3.67013,48.89508],[-3.54444,48.90297],[-3.40954,48.91866],[-3.33344,48.90458],[-3.02769,48.9275],[-2.80207,48.79793],[-2.69353,48.76722],[-2.45786,48.70896],[-2.28475,48.71909],[-2.17543,48.65016],[-2.0137,48.73221],[-1.80953,48.73178],[-1.7243,48.75828],[-1.70557,48.84512],[-1.90304,48.86288],[-1.91027,48.92348],[-1.68714,48.93249],[-1.74277,49.24473],[-1.85748,49.3253],[-1.9262,49.65573],[-2.03908,49.67872],[-2.00445,49.76087],[-1.61759,49.68498],[-1.28373,49.76067],[-1.1492,49.63504],[-1.18545,49.54836],[-0.96463,49.42509],[-0.74429,49.36802],[-0.39014,49.3622],[-0.24976,49.3158],[-0.13342,49.31293],[0.02731,49.37619],[0.01801,49.54656],[0.12211,49.69292],[0.51713,49.86466],[1.05727,49.94904],[1.43908,50.11819],[1.53177,50.46437],[1.52549,50.85867],[1.64118,50.95919],[2.59712,51.17355],[2.66071,51.0196],[2.07124,50.92022],[2.05937,50.94709],[1.7976,50.89906],[1.68089,50.8717],[1.65569,50.59729],[1.75357,50.5932],[1.72295,50.24702],[1.82156,50.24262],[1.80149,50.05116],[1.54565,50.06311],[1.54155,50.01267],[1.42462,50.01747],[1.42667,50.05276],[1.03838,49.84609],[0.9827,49.88916],[0.57961,49.82133],[0.42063,49.76297],[0.4281,49.75445],[0.20831,49.67269],[0.14765,49.57767],[0.13461,49.5809],[0.11117,49.54365],[0.56598,49.52045],[0.5632,49.49989],[0.63001,49.49666],[0.61478,49.37441],[0.54825,49.37851],[0.54254,49.33461],[0.45741,49.33938],[0.45843,49.34492],[0.32597,49.35456],[0.32846,49.38128],[0.28011,49.38433],[0.27689,49.36334],[0.21095,49.36658],[0.20817,49.35084],[0.14326,49.35532],[0.13769,49.3115],[0.07204,49.31532],[0.0675,49.28713],[0.00274,49.29076],[0.00508,49.25711],[-0.02027,49.26036],[-0.03492,49.1973],[-0.19448,49.21463],[-0.38966,49.12726],[-0.45369,49.18792],[-0.3561,49.23214],[-0.82088,49.28331],[-0.99778,49.30149],[-1.16728,49.24545],[-1.19515,49.28183],[-1.26768,49.24099],[-1.34114,49.2975],[-1.24768,49.35025],[-1.44583,49.60689],[-1.81105,49.61757],[-1.77479,49.44333],[-1.72775,49.46509],[-1.5339,49.29098],[-1.47909,49.29233],[-1.47608,49.24027],[-1.43557,49.20326],[-1.47225,49.1822],[-1.45091,48.75725],[-1.31155,48.76408],[-1.30533,48.70216],[-1.2584,48.70421],[-1.25229,48.64353],[-1.23519,48.64435],[-1.2269,48.56824],[-1.85218,48.53086],[-1.84908,48.4975],[-1.92326,48.49187],[-1.92813,48.44096],[-2.04272,48.43601],[-2.03889,48.48191],[-2.2895,48.46102],[-2.3021,48.52433],[-2.40863,48.51618],[-2.42035,48.56954],[-2.43084,48.57852],[-2.49083,48.54924],[-2.47353,48.53326],[-2.54978,48.49647],[-2.54005,48.48747],[-2.70681,48.40746],[-3.02979,48.69115],[-4.01034,48.53179],[-4.05342,48.64412],[-4.38281,48.57349],[-4.35482,48.5118],[-4.38853,48.50473],[-4.13495,48.44868],[-4.16411,48.38936],[-4.01832,48.35685],[-4.04733,48.29918],[-3.98814,48.2867],[-4.0214,48.21606],[-4.03634,48.21958],[-4.06623,48.16028],[-4.16675,48.18247],[-4.18331,48.14934],[-4.17232,48.1065],[-4.20111,48.10285],[-4.18643,48.04389],[-4.18806,48.04061],[-4.35686,48.02305],[-4.25657,47.93997],[-4.23363,47.93497],[-4.21371,47.97598],[-4.21854,47.97726],[-4.1806,48.05569],[-3.6172,47.93124],[-2.17991,47.58642],[-2.25449,47.44501],[-2.30182,47.4568],[-2.32043,47.42092],[-2.30372,47.41755],[-2.34753,47.33499],[-2.36219,47.33837],[-2.38079,47.3039],[-2.35852,47.29854],[-2.29962,47.29784],[-2.29742,47.3618],[-2.13199,47.35852],[-2.13478,47.39107],[-2.01565,47.39623],[-2.01404,47.38095],[-1.92862,47.38254],[-1.92891,47.37956],[-1.8322,47.38184],[-1.82986,47.34165],[-1.73608,47.34304],[-1.73418,47.305],[-1.64084,47.30639],[-1.64011,47.29427],[-1.58355,47.29566],[-1.58531,47.33708],[-1.4612,47.33966],[-1.46003,47.32924],[-1.37211,47.33221],[-1.36054,47.11239],[-1.48567,47.11149],[-1.48582,47.11877],[-1.66897,47.11688],[-1.66971,47.12864],[-1.72553,47.12764],[-1.72612,47.13761],[-1.93975,47.13263],[-1.94019,47.1422],[-1.9925,47.14309],[-1.81066,47.00588],[-1.94723,46.92078],[-1.92891,46.90677],[-1.99529,46.86461],[-1.73652,46.66839],[-1.77535,46.64386],[-1.82678,46.64174],[-1.82473,46.62071],[-1.18192,46.39987],[-0.91261,46.3048],[-0.95481,46.2489],[-0.94235,46.24424],[-0.98385,46.18807]],[[3.14769,42.40072],[3.14949,42.40015],[3.15305,42.40052],[3.15804,42.40243],[3.1877,42.42805],[3.14227,42.5248],[3.06837,42.54635],[3.04884,42.6942],[3.0799,43.03073],[3.22641,43.18727],[3.40916,43.26032],[3.52104,43.25877],[3.66429,43.37628],[3.73841,43.39054],[4.00979,43.53607],[4.17692,43.45636],[4.54355,43.43349],[4.54943,43.35401],[4.83506,43.30891],[4.97506,43.38309],[5.03219,43.31928],[5.25919,43.31928],[5.31082,43.20504],[5.35682,43.18645],[5.36882,43.16785],[5.40232,43.16211],[5.41382,43.17123],[5.40919,43.19921],[5.54232,43.18827],[5.60582,43.14797],[5.6197,43.1529],[5.63832,43.17159],[5.67157,43.1674],[5.69095,43.13411],[5.77607,43.10637],[5.7762,43.09432],[5.75407,43.08328],[5.75707,43.0725],[5.77032,43.06465],[5.85933,43.03469],[5.8877,43.06273],[5.9567,43.06109],[5.96383,43.09277],[6.00033,43.09186],[6.01745,43.06849],[6.10233,43.07415],[6.10483,43.0526],[6.0666,43.04318],[6.06722,43.03785],[6.1427,43.00923],[6.15676,42.98715],[6.19635,42.97331],[6.22221,42.9801],[6.26891,42.99651],[6.25515,43.03627],[6.2019,43.02713],[6.18378,43.09188],[6.30153,43.09909],[6.32478,43.07974],[6.37778,43.08011],[6.38866,43.13395],[6.51341,43.14608],[6.57704,43.17881],[6.62291,43.14563],[6.69779,43.19969],[6.68016,43.23357],[6.72116,43.26007],[6.72241,43.27472],[6.67054,43.29192],[6.68741,43.33113],[6.72416,43.34267],[6.75291,43.409],[6.79104,43.39674],[6.90629,43.41672],[6.96767,43.50273],[6.96617,43.52812],[7.00617,43.53845],[7.03554,43.4982],[7.06892,43.5001],[7.09079,43.51642],[7.06267,43.53672],[7.08254,43.5456],[7.1238,43.53074],[7.1558,43.5437],[7.1433,43.62284],[7.16867,43.64636],[7.2138,43.63469],[7.25417,43.68497],[7.3403,43.66744],[7.36442,43.6894],[7.35305,43.7082],[7.4163,43.71091],[7.45405,43.74506],[7.4943,43.74524],[7.57943,43.78424],[7.60552,43.78603],[7.60368,43.78898],[7.59588,43.79528],[7.59628,43.79549],[7.53853,43.84195],[7.45996,43.79988],[7.44781,43.80934],[7.32353,43.74806],[7.30822,43.76357],[6.64878,43.3885],[6.66865,43.37178],[6.51003,43.27803],[6.56584,43.22509],[6.12681,43.10527],[5.48229,43.24939],[5.47267,43.2309],[5.41567,43.24657],[5.45267,43.3451],[4.80191,43.48158],[4.76416,43.39244],[4.65716,43.42368],[4.67228,43.45608],[4.43203,43.52419],[4.41453,43.49255],[4.16102,43.56433],[4.14452,43.57067],[4.14165,43.57393],[4.18677,43.59946],[4.10565,43.68196],[3.79689,43.52165],[3.77851,43.51313],[3.76464,43.50597],[3.76201,43.50334],[3.74226,43.49328],[3.71601,43.52075],[3.26213,43.28143],[3.24638,43.29735],[3.18388,43.28052],[3.10675,43.24083],[3.15475,43.19419],[2.90625,43.19383],[2.90675,42.76189],[2.94613,42.76208],[2.9465,42.61516],[2.99238,42.61497],[2.99238,42.5125],[3.041,42.51259],[3.04121,42.50093],[3.09086,42.50082],[3.14769,42.40072]],[[6.35945,43.02321],[6.42477,43.02444],[6.45244,43.03504],[6.46985,43.05461],[6.51121,43.05765],[6.52156,43.04318],[6.48364,43.02444],[6.47179,43.00725],[6.41178,42.9918],[6.39852,42.98048],[6.35178,42.99905],[6.35945,43.02321]]],terms_url:"https://wiki.openstreetmap.org/wiki/WikiProject_France/G%C3%A9oLittoral",terms_text:"Ortho littorale 2000"},{id:"GeolittoralV2-Orthophotos",name:"Géolittoral V2 - Orthophotos 2011-2014",type:"wms",template:"http://geolittoral.din.developpement-durable.gouv.fr/wxs?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortholittorale_v2_rvb&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2014-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",polygon:[[[-0.98385,46.18807],[-0.89497,46.15628],[-0.93455,46.10163],[-0.84388,46.06949],[-0.88241,46.01637],[-0.53787,45.89558],[-0.63498,45.76444],[-0.86666,45.8479],[-0.76264,45.6245],[-0.69695,45.62659],[-0.69397,45.60184],[-0.68755,45.60174],[-0.688,45.50986],[-0.63799,45.50892],[-0.63978,45.44747],[-0.61574,45.44695],[-0.61619,45.38586],[-0.58544,45.38596],[-0.58529,45.32334],[-0.55379,45.32344],[-0.55275,45.19661],[-0.49094,45.19577],[-0.49184,45.13315],[-0.45661,45.13325],[-0.45512,45.07161],[-0.41611,45.07089],[-0.41621,45.02696],[-0.2907,44.98278],[-0.22,45.06771],[-0.12252,45.02563],[-0.18925,44.94591],[-0.09266,44.91019],[-0.14521,44.8392],[-0.15491,44.84238],[-0.19387,44.78678],[-0.43541,44.87317],[-0.39048,44.68413],[-0.58798,44.66014],[-0.66628,44.99129],[-0.77838,44.99263],[-0.77764,45.05389],[-0.81584,45.05321],[-0.81838,45.11962],[-0.88393,45.12051],[-0.88171,45.18081],[-0.93438,45.18185],[-0.9328,45.24484],[-1.00163,45.24439],[-1.00247,45.30827],[-1.0524,45.31013],[-1.04828,45.36911],[-1.06412,45.36911],[-1.05039,45.18252],[-1.10761,44.80787],[-1.01514,44.80113],[-1.01946,44.76914],[-0.93365,44.76149],[-0.9404,44.7018],[-0.96035,44.56434],[-1.01408,44.56765],[-1.09916,44.1456],[-1.22689,44.14022],[-1.21853,44.03249],[-1.30762,44.029],[-1.39572,43.74301],[-1.31296,43.72951],[-1.37439,43.53109],[-1.34589,43.50606],[-1.59964,43.35423],[-1.76549,43.25548],[-1.79281,43.28038],[-1.80281,43.40425],[-1.72832,43.45033],[-1.58531,43.489],[-1.33584,44.22832],[-1.30744,44.41847],[-1.22511,45.44416],[-1.48685,46.06042],[-1.60176,46.17019],[-1.64442,46.22375],[-1.75643,46.42214],[-2.03483,46.61895],[-2.3466,46.62382],[-2.46561,46.71196],[-2.3233,46.83812],[-2.45286,46.93856],[-2.31733,47.16214],[-2.92848,47.28413],[-2.96742,47.22147],[-3.35602,47.32474],[-3.18803,47.48441],[-3.22791,47.61132],[-3.38912,47.59473],[-3.9162,47.67831],[-4.10163,47.70921],[-4.14314,47.78847],[-4.37619,47.71067],[-4.47962,47.9776],[-4.98565,47.99896],[-4.96938,48.08972],[-4.60147,48.11469],[-4.5921,48.14758],[-4.67101,48.2331],[-4.84243,48.3005],[-5.19867,48.44926],[-5.10346,48.51722],[-4.83515,48.54319],[-4.63117,48.66129],[-3.96692,48.77978],[-3.94939,48.74715],[-3.67013,48.89508],[-3.54444,48.90297],[-3.40954,48.91866],[-3.33344,48.90458],[-3.02769,48.9275],[-2.80207,48.79793],[-2.69353,48.76722],[-2.45786,48.70896],[-2.28475,48.71909],[-2.17543,48.65016],[-2.0137,48.73221],[-1.80953,48.73178],[-1.7243,48.75828],[-1.70557,48.84512],[-1.90304,48.86288],[-1.91027,48.92348],[-1.68714,48.93249],[-1.74277,49.24473],[-1.85748,49.3253],[-1.9262,49.65573],[-2.03908,49.67872],[-2.00445,49.76087],[-1.61759,49.68498],[-1.28373,49.76067],[-1.1492,49.63504],[-1.18545,49.54836],[-0.96463,49.42509],[-0.74429,49.36802],[-0.39014,49.3622],[-0.24976,49.3158],[-0.13342,49.31293],[0.02731,49.37619],[0.01801,49.54656],[0.12211,49.69292],[0.51713,49.86466],[1.05727,49.94904],[1.43908,50.11819],[1.53177,50.46437],[1.52549,50.85867],[1.64118,50.95919],[2.59712,51.17355],[2.66071,51.0196],[2.07124,50.92022],[2.05937,50.94709],[1.7976,50.89906],[1.68089,50.8717],[1.65569,50.59729],[1.75357,50.5932],[1.72295,50.24702],[1.82156,50.24262],[1.80149,50.05116],[1.54565,50.06311],[1.54155,50.01267],[1.42462,50.01747],[1.42667,50.05276],[1.03838,49.84609],[0.9827,49.88916],[0.57961,49.82133],[0.42063,49.76297],[0.4281,49.75445],[0.20831,49.67269],[0.14765,49.57767],[0.13461,49.5809],[0.11117,49.54365],[0.56598,49.52045],[0.5632,49.49989],[0.63001,49.49666],[0.61478,49.37441],[0.54825,49.37851],[0.54254,49.33461],[0.45741,49.33938],[0.45843,49.34492],[0.32597,49.35456],[0.32846,49.38128],[0.28011,49.38433],[0.27689,49.36334],[0.21095,49.36658],[0.20817,49.35084],[0.14326,49.35532],[0.13769,49.3115],[0.07204,49.31532],[0.0675,49.28713],[0.00274,49.29076],[0.00508,49.25711],[-0.02027,49.26036],[-0.03492,49.1973],[-0.19448,49.21463],[-0.38966,49.12726],[-0.45369,49.18792],[-0.3561,49.23214],[-0.82088,49.28331],[-0.99778,49.30149],[-1.16728,49.24545],[-1.19515,49.28183],[-1.26768,49.24099],[-1.34114,49.2975],[-1.24768,49.35025],[-1.44583,49.60689],[-1.81105,49.61757],[-1.77479,49.44333],[-1.72775,49.46509],[-1.5339,49.29098],[-1.47909,49.29233],[-1.47608,49.24027],[-1.43557,49.20326],[-1.47225,49.1822],[-1.45091,48.75725],[-1.31155,48.76408],[-1.30533,48.70216],[-1.2584,48.70421],[-1.25229,48.64353],[-1.23519,48.64435],[-1.2269,48.56824],[-1.85218,48.53086],[-1.84908,48.4975],[-1.92326,48.49187],[-1.92813,48.44096],[-2.04272,48.43601],[-2.03889,48.48191],[-2.2895,48.46102],[-2.3021,48.52433],[-2.40863,48.51618],[-2.42035,48.56954],[-2.43084,48.57852],[-2.49083,48.54924],[-2.47353,48.53326],[-2.54978,48.49647],[-2.54005,48.48747],[-2.70681,48.40746],[-3.02979,48.69115],[-4.01034,48.53179],[-4.05342,48.64412],[-4.38281,48.57349],[-4.35482,48.5118],[-4.38853,48.50473],[-4.13495,48.44868],[-4.16411,48.38936],[-4.01832,48.35685],[-4.04733,48.29918],[-3.98814,48.2867],[-4.0214,48.21606],[-4.03634,48.21958],[-4.06623,48.16028],[-4.16675,48.18247],[-4.18331,48.14934],[-4.17232,48.1065],[-4.20111,48.10285],[-4.18643,48.04389],[-4.18806,48.04061],[-4.35686,48.02305],[-4.25657,47.93997],[-4.23363,47.93497],[-4.21371,47.97598],[-4.21854,47.97726],[-4.1806,48.05569],[-3.6172,47.93124],[-2.17991,47.58642],[-2.25449,47.44501],[-2.30182,47.4568],[-2.32043,47.42092],[-2.30372,47.41755],[-2.34753,47.33499],[-2.36219,47.33837],[-2.38079,47.3039],[-2.35852,47.29854],[-2.29962,47.29784],[-2.29742,47.3618],[-2.13199,47.35852],[-2.13478,47.39107],[-2.01565,47.39623],[-2.01404,47.38095],[-1.92862,47.38254],[-1.92891,47.37956],[-1.8322,47.38184],[-1.82986,47.34165],[-1.73608,47.34304],[-1.73418,47.305],[-1.64084,47.30639],[-1.64011,47.29427],[-1.58355,47.29566],[-1.58531,47.33708],[-1.4612,47.33966],[-1.46003,47.32924],[-1.37211,47.33221],[-1.36054,47.11239],[-1.48567,47.11149],[-1.48582,47.11877],[-1.66897,47.11688],[-1.66971,47.12864],[-1.72553,47.12764],[-1.72612,47.13761],[-1.93975,47.13263],[-1.94019,47.1422],[-1.9925,47.14309],[-1.81066,47.00588],[-1.94723,46.92078],[-1.92891,46.90677],[-1.99529,46.86461],[-1.73652,46.66839],[-1.77535,46.64386],[-1.82678,46.64174],[-1.82473,46.62071],[-1.18192,46.39987],[-0.91261,46.3048],[-0.95481,46.2489],[-0.94235,46.24424],[-0.98385,46.18807]],[[3.14769,42.40072],[3.14949,42.40015],[3.15305,42.40052],[3.15804,42.40243],[3.1877,42.42805],[3.14227,42.5248],[3.06837,42.54635],[3.04884,42.6942],[3.0799,43.03073],[3.22641,43.18727],[3.40916,43.26032],[3.52104,43.25877],[3.66429,43.37628],[3.73841,43.39054],[4.00979,43.53607],[4.17692,43.45636],[4.54355,43.43349],[4.54943,43.35401],[4.83506,43.30891],[4.97506,43.38309],[5.03219,43.31928],[5.25919,43.31928],[5.31082,43.20504],[5.35682,43.18645],[5.36882,43.16785],[5.40232,43.16211],[5.41382,43.17123],[5.40919,43.19921],[5.54232,43.18827],[5.60582,43.14797],[5.6197,43.1529],[5.63832,43.17159],[5.67157,43.1674],[5.69095,43.13411],[5.77607,43.10637],[5.7762,43.09432],[5.75407,43.08328],[5.75707,43.0725],[5.77032,43.06465],[5.85933,43.03469],[5.8877,43.06273],[5.9567,43.06109],[5.96383,43.09277],[6.00033,43.09186],[6.01745,43.06849],[6.10233,43.07415],[6.10483,43.0526],[6.0666,43.04318],[6.06722,43.03785],[6.1427,43.00923],[6.15676,42.98715],[6.19635,42.97331],[6.22221,42.9801],[6.26891,42.99651],[6.25515,43.03627],[6.2019,43.02713],[6.18378,43.09188],[6.30153,43.09909],[6.32478,43.07974],[6.37778,43.08011],[6.38866,43.13395],[6.51341,43.14608],[6.57704,43.17881],[6.62291,43.14563],[6.69779,43.19969],[6.68016,43.23357],[6.72116,43.26007],[6.72241,43.27472],[6.67054,43.29192],[6.68741,43.33113],[6.72416,43.34267],[6.75291,43.409],[6.79104,43.39674],[6.90629,43.41672],[6.96767,43.50273],[6.96617,43.52812],[7.00617,43.53845],[7.03554,43.4982],[7.06892,43.5001],[7.09079,43.51642],[7.06267,43.53672],[7.08254,43.5456],[7.1238,43.53074],[7.1558,43.5437],[7.1433,43.62284],[7.16867,43.64636],[7.2138,43.63469],[7.25417,43.68497],[7.3403,43.66744],[7.36442,43.6894],[7.35305,43.7082],[7.4163,43.71091],[7.45405,43.74506],[7.4943,43.74524],[7.57943,43.78424],[7.60552,43.78603],[7.60368,43.78898],[7.59588,43.79528],[7.59628,43.79549],[7.53853,43.84195],[7.45996,43.79988],[7.44781,43.80934],[7.32353,43.74806],[7.30822,43.76357],[6.64878,43.3885],[6.66865,43.37178],[6.51003,43.27803],[6.56584,43.22509],[6.12681,43.10527],[5.48229,43.24939],[5.47267,43.2309],[5.41567,43.24657],[5.45267,43.3451],[4.80191,43.48158],[4.76416,43.39244],[4.65716,43.42368],[4.67228,43.45608],[4.43203,43.52419],[4.41453,43.49255],[4.16102,43.56433],[4.14452,43.57067],[4.14165,43.57393],[4.18677,43.59946],[4.10565,43.68196],[3.79689,43.52165],[3.77851,43.51313],[3.76464,43.50597],[3.76201,43.50334],[3.74226,43.49328],[3.71601,43.52075],[3.26213,43.28143],[3.24638,43.29735],[3.18388,43.28052],[3.10675,43.24083],[3.15475,43.19419],[2.90625,43.19383],[2.90675,42.76189],[2.94613,42.76208],[2.9465,42.61516],[2.99238,42.61497],[2.99238,42.5125],[3.041,42.51259],[3.04121,42.50093],[3.09086,42.50082],[3.14769,42.40072]],[[6.35945,43.02321],[6.42477,43.02444],[6.45244,43.03504],[6.46985,43.05461],[6.51121,43.05765],[6.52156,43.04318],[6.48364,43.02444],[6.47179,43.00725],[6.41178,42.9918],[6.39852,42.98048],[6.35178,42.99905],[6.35945,43.02321]]],terms_url:"https://wiki.openstreetmap.org/wiki/WikiProject_France/G%C3%A9oLittoral",terms_text:"Ortho Littorale V2 - MEDDE"},{id:"lu.geoportail.opendata.ortho_10cm_proto_lidar",name:"geoportail.lu LIDAR prototype Nordstad 2017",type:"tms",template:"https://{switch:wmts1,wmts2}.geoportail.lu/opendata/wmts/ortho_10cm_proto_lidar/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.jpeg",endDate:"2017-04-09T00:00:00.000Z",startDate:"2017-04-09T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[6.05001,49.82175],[6.04979,49.91166],[6.18901,49.91172],[6.18897,49.82181],[6.05001,49.82175]]],terms_url:"https://act.public.lu/fr/cartographie/lidar",terms_text:"Administration du Cadastre et de la Topographie",icon:"https://www.geoportail.lu/static/img/lion.png"},{id:"Geoportal2-PL-aerial_image",name:"Geoportal 2: Orthophotomap (aerial image)",type:"wms",template:"http://mapy.geoportal.gov.pl/wss/service/img/guest/ORTO/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Raster&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}{header(User-Agent,Mozilla/5.0 (JOSM)}",projection:"EPSG:4326",zoomExtent:[0,23],polygon:[[[15.9751,54.37092],[16.31116,54.55618],[17.13919,54.78457],[18.34485,54.90227],[19.66137,54.47372],[20.28152,54.42135],[21.46639,54.34064],[22.77599,54.37698],[22.8626,54.42336],[23.29567,54.26786],[23.53472,54.09553],[23.52086,53.97752],[23.71834,53.46296],[23.92968,53.18567],[23.92968,52.68873],[23.7322,52.60675],[23.5659,52.58781],[23.20905,52.33026],[23.19519,52.23701],[23.50354,52.18606],[23.69062,52.00301],[23.59708,51.7399],[23.66291,51.38886],[23.9366,50.98278],[24.16873,50.86048],[24.01975,50.80358],[24.10983,50.66105],[24.05786,50.41884],[23.61787,50.30834],[22.68244,49.51635],[22.73788,49.20949],[22.90417,49.07804],[22.8626,48.99401],[22.60969,49.03718],[22.07615,49.20044],[21.84749,49.37219],[21.37631,49.44883],[21.10262,49.37219],[20.91207,49.3022],[20.6453,49.39023],[20.18451,49.33156],[20.11869,49.20044],[19.942,49.13021],[19.76531,49.21176],[19.74798,49.39925],[19.60247,49.41503],[19.50893,49.58154],[19.42925,49.59052],[19.23177,49.41503],[18.99618,49.38798],[18.93382,49.4916],[18.83681,49.49386],[18.80216,49.66234],[18.6428,49.70941],[18.52154,49.89947],[18.08154,50.01092],[17.88753,49.98865],[17.73855,50.06877],[17.6069,50.17096],[17.74548,50.21532],[17.71084,50.3017],[17.41635,50.26407],[16.94864,50.44533],[16.89321,50.40339],[17.00061,50.31055],[17.01793,50.22419],[16.81352,50.18649],[16.64029,50.09767],[16.43242,50.28621],[16.19683,50.42767],[16.42203,50.58852],[16.33888,50.66324],[16.22802,50.63688],[16.05479,50.61271],[15.57322,50.76415],[15.26834,50.89764],[15.24409,50.9806],[15.02929,51.0133],[15.00157,50.85829],[14.81102,50.87359],[14.95653,51.07212],[15.01889,51.29146],[14.93921,51.46015],[14.72094,51.55718],[14.75212,51.62606],[14.59968,51.84276],[14.70362,52.07334],[14.55811,52.24974],[14.51654,52.42544],[14.60315,52.58781],[14.11465,52.82083],[14.15276,52.9734],[14.35024,53.07342],[14.42299,53.26656],[14.1978,53.87348],[14.22205,53.99585],[15.9751,54.37092]]],terms_url:"https://geoportal.gov.pl/web/guest/regulamin",terms_text:"Główny Urząd Geodezji i Kartografii",best:true,icon:"https://wiki.openstreetmap.org/w/images/2/25/Geoportal-josm.png"},{id:"Geoportal2-PL-prng",name:"Geoportal 2: PRNG (geo names)",type:"wms",template:"http://mapy.geoportal.gov.pl/wss/service/pub/guest/G2_PRNG_WMS/MapServer/WMSServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=PozostaleObiektyFizjograficzne,Hydrografia,PozostaleMiejscowosci,Wies,UksztaltowanieTerenu&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}{header(User-Agent,Mozilla/5.0 (JOSM)}",projection:"EPSG:4326",polygon:[[[15.9751,54.37092],[16.31116,54.55618],[17.13919,54.78457],[18.34485,54.90227],[19.66137,54.47372],[20.28152,54.42135],[21.46639,54.34064],[22.77599,54.37698],[22.8626,54.42336],[23.29567,54.26786],[23.53472,54.09553],[23.52086,53.97752],[23.71834,53.46296],[23.92968,53.18567],[23.92968,52.68873],[23.7322,52.60675],[23.5659,52.58781],[23.20905,52.33026],[23.19519,52.23701],[23.50354,52.18606],[23.69062,52.00301],[23.59708,51.7399],[23.66291,51.38886],[23.9366,50.98278],[24.16873,50.86048],[24.01975,50.80358],[24.10983,50.66105],[24.05786,50.41884],[23.61787,50.30834],[22.68244,49.51635],[22.73788,49.20949],[22.90417,49.07804],[22.8626,48.99401],[22.60969,49.03718],[22.07615,49.20044],[21.84749,49.37219],[21.37631,49.44883],[21.10262,49.37219],[20.91207,49.3022],[20.6453,49.39023],[20.18451,49.33156],[20.11869,49.20044],[19.942,49.13021],[19.76531,49.21176],[19.74798,49.39925],[19.60247,49.41503],[19.50893,49.58154],[19.42925,49.59052],[19.23177,49.41503],[18.99618,49.38798],[18.93382,49.4916],[18.83681,49.49386],[18.80216,49.66234],[18.6428,49.70941],[18.52154,49.89947],[18.08154,50.01092],[17.88753,49.98865],[17.73855,50.06877],[17.6069,50.17096],[17.74548,50.21532],[17.71084,50.3017],[17.41635,50.26407],[16.94864,50.44533],[16.89321,50.40339],[17.00061,50.31055],[17.01793,50.22419],[16.81352,50.18649],[16.64029,50.09767],[16.43242,50.28621],[16.19683,50.42767],[16.42203,50.58852],[16.33888,50.66324],[16.22802,50.63688],[16.05479,50.61271],[15.57322,50.76415],[15.26834,50.89764],[15.24409,50.9806],[15.02929,51.0133],[15.00157,50.85829],[14.81102,50.87359],[14.95653,51.07212],[15.01889,51.29146],[14.93921,51.46015],[14.72094,51.55718],[14.75212,51.62606],[14.59968,51.84276],[14.70362,52.07334],[14.55811,52.24974],[14.51654,52.42544],[14.60315,52.58781],[14.11465,52.82083],[14.15276,52.9734],[14.35024,53.07342],[14.42299,53.26656],[14.1978,53.87348],[14.22205,53.99585],[15.9751,54.37092]]],terms_url:"http://www.codgik.gov.pl/index.php/darmowe-dane/prng.html",terms_text:"Centralny Ośrodek Dokumentacji Geodezyjnej i Kartograficznej",icon:"https://wiki.openstreetmap.org/w/images/2/25/Geoportal-josm.png",overlay:true},{id:"Geoportal-PL-aerial_image",name:"Geoportal.gov.pl (Orthophotomap)",type:"tms",template:"https://wms.misek.pl/geoportal.orto/tms/{zoom}/{x}/{y}",zoomExtent:[6,24],polygon:[[[15.9751,54.37092],[16.31116,54.55618],[17.13919,54.78457],[18.34485,54.90227],[19.66137,54.47372],[20.28152,54.42135],[21.46639,54.34064],[22.77599,54.37698],[22.8626,54.42336],[23.29567,54.26786],[23.53472,54.09553],[23.52086,53.97752],[23.71834,53.46296],[23.92968,53.18567],[23.92968,52.68873],[23.7322,52.60675],[23.5659,52.58781],[23.20905,52.33026],[23.19519,52.23701],[23.50354,52.18606],[23.69062,52.00301],[23.59708,51.7399],[23.66291,51.38886],[23.9366,50.98278],[24.16873,50.86048],[24.01975,50.80358],[24.10983,50.66105],[24.05786,50.41884],[23.61787,50.30834],[22.68244,49.51635],[22.73788,49.20949],[22.90417,49.07804],[22.8626,48.99401],[22.60969,49.03718],[22.07615,49.20044],[21.84749,49.37219],[21.37631,49.44883],[21.10262,49.37219],[20.91207,49.3022],[20.6453,49.39023],[20.18451,49.33156],[20.11869,49.20044],[19.942,49.13021],[19.76531,49.21176],[19.74798,49.39925],[19.60247,49.41503],[19.50893,49.58154],[19.42925,49.59052],[19.23177,49.41503],[18.99618,49.38798],[18.93382,49.4916],[18.83681,49.49386],[18.80216,49.66234],[18.6428,49.70941],[18.52154,49.89947],[18.08154,50.01092],[17.88753,49.98865],[17.73855,50.06877],[17.6069,50.17096],[17.74548,50.21532],[17.71084,50.3017],[17.41635,50.26407],[16.94864,50.44533],[16.89321,50.40339],[17.00061,50.31055],[17.01793,50.22419],[16.81352,50.18649],[16.64029,50.09767],[16.43242,50.28621],[16.19683,50.42767],[16.42203,50.58852],[16.33888,50.66324],[16.22802,50.63688],[16.05479,50.61271],[15.57322,50.76415],[15.26834,50.89764],[15.24409,50.9806],[15.02929,51.0133],[15.00157,50.85829],[14.81102,50.87359],[14.95653,51.07212],[15.01889,51.29146],[14.93921,51.46015],[14.72094,51.55718],[14.75212,51.62606],[14.59968,51.84276],[14.70362,52.07334],[14.55811,52.24974],[14.51654,52.42544],[14.60315,52.58781],[14.11465,52.82083],[14.15276,52.9734],[14.35024,53.07342],[14.42299,53.26656],[14.1978,53.87348],[14.22205,53.99585],[15.9751,54.37092]]],terms_text:"Copyright © Główny Urząd Geodezji i Kartografii.",best:true,icon:"https://i.imgur.com/aFlvMpM.png"},{id:"girau_do_pnciano",name:"Girau do Ponciano",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Girau%20do%20Ponciano&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.78013,-9.92939],[-36.78087,-9.83892],[-36.87233,-9.83917],[-36.87173,-9.90542],[-36.87037,-9.92989],[-36.86156,-9.92994],[-36.85566,-9.92981],[-36.85146,-9.92973],[-36.84575,-9.92977],[-36.83213,-9.92967],[-36.81456,-9.9296],[-36.78013,-9.92939]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"Gliwice-buildings",name:"Gliwice: Buildings",type:"wms",template:"http://185.60.246.14:9090/isdp/gs/ows?FORMAT=image/png&transparent=true&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=default:EGIB_budynek,default:pkt_adr&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[18.57376,50.34828],[18.58723,50.35464],[18.58421,50.3601],[18.59264,50.37522],[18.65228,50.38297],[18.67384,50.37675],[18.67672,50.36174],[18.69218,50.34467],[18.70805,50.33799],[18.74154,50.3391],[18.75145,50.33046],[18.74679,50.31236],[18.75512,50.30193],[18.76358,50.29989],[18.76539,50.26873],[18.744,50.26541],[18.73482,50.25377],[18.72775,50.22843],[18.71439,50.22835],[18.71426,50.21978],[18.67522,50.21969],[18.67607,50.22562],[18.65098,50.23169],[18.6288,50.22539],[18.61744,50.24044],[18.62699,50.24369],[18.6315,50.25487],[18.61406,50.2576],[18.60319,50.25206],[18.56536,50.24763],[18.54841,50.2492],[18.55857,50.2826],[18.5459,50.29947],[18.52896,50.33687],[18.55118,50.35332],[18.57376,50.34828]]],terms_text:"Urząd Miasta Gliwice"},{id:"GRAFCAN-Canary_Islands",name:"GRAFCAN - Canary Islands",type:"wms",template:"https://idecan1.grafcan.es/ServicioWMS/OrtoUrb?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=OU&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[-17.92917,28.89106],[-18.03334,28.79981],[-18.03743,28.73178],[-17.87811,28.43224],[-17.83113,28.41787],[-17.72696,28.56328],[-17.73105,28.67982],[-17.68407,28.73715],[-17.75352,28.86781],[-17.85768,28.86065],[-17.92917,28.89106]],[[-18.07818,27.77211],[-18.13707,27.78751],[-18.17054,27.76441],[-18.1779,27.70695],[-18.15782,27.68799],[-18.0581,27.6791],[-18.00656,27.62574],[-17.96105,27.62218],[-17.93896,27.70814],[-17.90751,27.7194],[-17.86199,27.80468],[-17.8727,27.84079],[-17.92558,27.86801],[-18.00522,27.83605],[-18.01392,27.8035],[-18.07818,27.77211]],[[-17.26878,28.23996],[-17.33403,28.21933],[-17.36331,28.1537],[-17.36666,28.08803],[-17.33069,28.04742],[-17.27296,28.00681],[-17.20017,28.00533],[-17.14412,28.02896],[-17.07803,28.0836],[-17.08723,28.1537],[-17.1826,28.2149],[-17.26878,28.23996]],[[-16.9358,28.37623],[-16.945,28.33574],[-16.71995,27.98317],[-16.62541,27.98317],[-16.52753,28.01641],[-16.39953,28.14632],[-16.33594,28.30922],[-16.33009,28.36445],[-16.10253,28.52408],[-16.09834,28.5814],[-16.14268,28.62547],[-16.33929,28.59609],[-16.43801,28.53143],[-16.53924,28.44025],[-16.83959,28.41229],[-16.9358,28.37623]],[[-15.68833,28.20585],[-15.47395,28.16437],[-15.42427,28.21046],[-15.36283,28.17244],[-15.38375,28.05598],[-15.33146,27.98444],[-15.3576,27.8042],[-15.5916,27.69777],[-15.7001,27.73365],[-15.79944,27.80305],[-15.87134,27.92439],[-15.84781,28.03637],[-15.74716,28.08943],[-15.73147,28.18396],[-15.68833,28.20585]],[[-14.50882,28.13448],[-14.41078,28.13448],[-14.24868,28.24278],[-14.23822,28.34637],[-14.03953,28.73911],[-13.89442,28.78265],[-13.78592,28.77692],[-13.82122,28.38433],[-13.91534,28.19095],[-14.18593,28.13563],[-14.30881,28.00529],[-14.54019,28.05144],[-14.50882,28.13448]],[[-13.5525,29.37727],[-13.50868,29.36824],[-13.47955,29.38728],[-13.47543,29.40963],[-13.5003,29.42807],[-13.5505,29.40712],[-13.5525,29.37727]],[[-13.3976,29.16102],[-13.42814,29.12157],[-13.44174,28.99084],[-13.53899,28.91947],[-13.70841,28.88468],[-13.77116,28.80865],[-13.90083,28.83522],[-13.90711,28.88926],[-13.85796,28.93686],[-13.85691,29.03657],[-13.67599,29.14988],[-13.56723,29.15719],[-13.55428,29.35073],[-13.39988,29.21806],[-13.3976,29.16102]],[[-13.33792,29.28667],[-13.35035,29.27436],[-13.3386,29.26533],[-13.32617,29.27765],[-13.33792,29.28667]]],terms_text:"GRAFCAN OrtoExpress Urbana 2009"},{id:"GRAFCAN_Express-Canary_Islands",name:"GRAFCAN Express - Canary Islands",type:"wms",template:"https://idecan1.grafcan.es/ServicioWMS/OrtoExpress?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=ortoexpress&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[-17.92917,28.89106],[-18.03334,28.79981],[-18.03743,28.73178],[-17.87811,28.43224],[-17.83113,28.41787],[-17.72696,28.56328],[-17.73105,28.67982],[-17.68407,28.73715],[-17.75352,28.86781],[-17.85768,28.86065],[-17.92917,28.89106]],[[-18.07818,27.77211],[-18.13707,27.78751],[-18.17054,27.76441],[-18.1779,27.70695],[-18.15782,27.68799],[-18.0581,27.6791],[-18.00656,27.62574],[-17.96105,27.62218],[-17.93896,27.70814],[-17.90751,27.7194],[-17.86199,27.80468],[-17.8727,27.84079],[-17.92558,27.86801],[-18.00522,27.83605],[-18.01392,27.8035],[-18.07818,27.77211]],[[-17.26878,28.23996],[-17.33403,28.21933],[-17.36331,28.1537],[-17.36666,28.08803],[-17.33069,28.04742],[-17.27296,28.00681],[-17.20017,28.00533],[-17.14412,28.02896],[-17.07803,28.0836],[-17.08723,28.1537],[-17.1826,28.2149],[-17.26878,28.23996]],[[-16.9358,28.37623],[-16.945,28.33574],[-16.71995,27.98317],[-16.62541,27.98317],[-16.52753,28.01641],[-16.39953,28.14632],[-16.33594,28.30922],[-16.33009,28.36445],[-16.10253,28.52408],[-16.09834,28.5814],[-16.14268,28.62547],[-16.33929,28.59609],[-16.43801,28.53143],[-16.53924,28.44025],[-16.83959,28.41229],[-16.9358,28.37623]],[[-15.68833,28.20585],[-15.47395,28.16437],[-15.42427,28.21046],[-15.36283,28.17244],[-15.38375,28.05598],[-15.33146,27.98444],[-15.3576,27.8042],[-15.5916,27.69777],[-15.7001,27.73365],[-15.79944,27.80305],[-15.87134,27.92439],[-15.84781,28.03637],[-15.74716,28.08943],[-15.73147,28.18396],[-15.68833,28.20585]],[[-14.50882,28.13448],[-14.41078,28.13448],[-14.24868,28.24278],[-14.23822,28.34637],[-14.03953,28.73911],[-13.89442,28.78265],[-13.78592,28.77692],[-13.82122,28.38433],[-13.91534,28.19095],[-14.18593,28.13563],[-14.30881,28.00529],[-14.54019,28.05144],[-14.50882,28.13448]],[[-13.5525,29.37727],[-13.50868,29.36824],[-13.47955,29.38728],[-13.47543,29.40963],[-13.5003,29.42807],[-13.5505,29.40712],[-13.5525,29.37727]],[[-13.3976,29.16102],[-13.42814,29.12157],[-13.44174,28.99084],[-13.53899,28.91947],[-13.70841,28.88468],[-13.77116,28.80865],[-13.90083,28.83522],[-13.90711,28.88926],[-13.85796,28.93686],[-13.85691,29.03657],[-13.67599,29.14988],[-13.56723,29.15719],[-13.55428,29.35073],[-13.39988,29.21806],[-13.3976,29.16102]],[[-13.33792,29.28667],[-13.35035,29.27436],[-13.3386,29.26533],[-13.32617,29.27765],[-13.33792,29.28667]]],terms_text:"GRAFCAN OrtoExpress"},{id:"GrandNancy_Orthophotographie_2012",name:"GrandNancy - Orthophoto - 2012",type:"tms",template:"http://wms.openstreetmap.fr/tms/1.0.0/nancy_2012/{zoom}/{x}/{y}",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[6.06066,48.60554],[6.29717,48.59923],[6.30611,48.74077],[6.06896,48.7471],[6.06066,48.60554]]],terms_url:"https://wiki.openstreetmap.org/wiki/Nancy/Orthophotographie",terms_text:"GrandNancy Orthophotographie 2012"},{id:"GURS-buildings",name:"GURS: Building outlines",type:"tms",template:"https://wms.openstreetmap.de/tms/GURS-building-outlines/{zoom}/{x}/{y}.png",zoomExtent:[8,19],polygon:[[[15.17101,45.41273],[15.06731,45.4781],[14.98353,45.48726],[14.93027,45.51869],[14.91295,45.46869],[14.81398,45.45019],[14.77755,45.49724],[14.71885,45.52386],[14.68383,45.51924],[14.68367,45.57107],[14.58902,45.61966],[14.59477,45.65727],[14.51653,45.5974],[14.49636,45.52968],[14.32388,45.46048],[14.28251,45.47949],[14.26083,45.47352],[14.2367,45.49569],[14.21022,45.45962],[14.1328,45.46542],[14.06694,45.47615],[14.01187,45.50769],[13.98752,45.49945],[14.00668,45.4739],[13.99154,45.44854],[13.91789,45.44329],[13.88867,45.416],[13.81063,45.42531],[13.7856,45.45577],[13.67553,45.43241],[13.38,45.5666],[13.63822,45.64153],[13.72158,45.60472],[13.83759,45.59226],[13.89962,45.63295],[13.82754,45.67917],[13.82429,45.70266],[13.78961,45.73525],[13.66355,45.79008],[13.62279,45.78613],[13.58835,45.80154],[13.56531,45.85522],[13.62633,45.93894],[13.62975,45.97662],[13.59233,45.97929],[13.57124,45.9591],[13.52998,45.95627],[13.46729,46.00147],[13.49765,46.03741],[13.4896,46.06574],[13.58839,46.11268],[13.63712,46.14524],[13.65358,46.17505],[13.57147,46.17434],[13.54859,46.19982],[13.48189,46.21479],[13.42003,46.19662],[13.40026,46.21037],[13.40304,46.23284],[13.36653,46.30266],[13.43369,46.33243],[13.43247,46.36779],[13.56263,46.40895],[13.59357,46.44846],[13.68393,46.44947],[13.71321,46.53296],[13.79725,46.5164],[13.91305,46.53108],[14.00849,46.49169],[14.09406,46.49538],[14.12664,46.4852],[14.16569,46.44341],[14.28242,46.45347],[14.3259,46.44111],[14.43178,46.4568],[14.45113,46.43239],[14.52618,46.43623],[14.56677,46.38549],[14.58993,46.44479],[14.65658,46.45447],[14.71191,46.50954],[14.80818,46.51778],[14.81442,46.55093],[14.86094,46.61239],[14.9102,46.61569],[14.95398,46.64257],[14.98376,46.61868],[15.02973,46.65796],[15.10645,46.66965],[15.23727,46.64973],[15.41364,46.66553],[15.46237,46.64732],[15.47411,46.6226],[15.53427,46.64346],[15.53636,46.6761],[15.59201,46.69952],[15.62405,46.69039],[15.65624,46.71643],[15.767,46.70899],[15.83801,46.73237],[15.91476,46.71958],[16.02919,46.67033],[16.02955,46.68778],[15.99495,46.71178],[15.97505,46.74967],[15.98671,46.84189],[16.0553,46.85049],[16.11022,46.87912],[16.15425,46.86525],[16.23302,46.88667],[16.29431,46.8824],[16.34649,46.85476],[16.36058,46.8278],[16.34711,46.79707],[16.32245,46.79068],[16.33977,46.7799],[16.33186,46.75896],[16.38893,46.70785],[16.4383,46.69655],[16.42822,46.65301],[16.40159,46.6439],[16.51477,46.57299],[16.54136,46.53627],[16.5416,46.50887],[16.611,46.48393],[16.61889,46.46203],[16.52219,46.45842],[16.47451,46.50108],[16.36776,46.53371],[16.2582,46.489],[16.28533,46.42441],[16.3168,46.40141],[16.30574,46.36921],[16.18689,46.36804],[16.14548,46.39515],[16.06959,46.38154],[16.08614,46.34087],[16.04058,46.32708],[16.01819,46.29964],[15.80777,46.25091],[15.79649,46.21296],[15.77128,46.19937],[15.67996,46.21707],[15.65737,46.20838],[15.65639,46.18456],[15.62037,46.16163],[15.61899,46.11595],[15.63483,46.09529],[15.71869,46.06873],[15.74241,46.04578],[15.71612,45.99489],[15.71645,45.9178],[15.69237,45.90013],[15.69375,45.87111],[15.71776,45.8416],[15.6441,45.81058],[15.57467,45.83999],[15.52333,45.81155],[15.49115,45.82041],[15.47514,45.78666],[15.40343,45.78216],[15.28683,45.73391],[15.27435,45.72408],[15.29763,45.70782],[15.36329,45.72191],[15.41517,45.65443],[15.39705,45.62929],[15.31501,45.62356],[15.31503,45.60696],[15.29266,45.60163],[15.30852,45.58653],[15.31145,45.5423],[15.39496,45.48325],[15.34824,45.44665],[15.27515,45.45599],[15.22848,45.41683],[15.17101,45.41273]]],terms_url:"http://egp.gu.gov.si/",terms_text:"CC-BY ©2019 Geodetska uprava Republike Slovenije (gu.gov.si).",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/si/GURSRoadlines.png",overlay:true},{id:"GURS-roads",name:"GURS: Road lines",type:"tms",template:"https://wms.openstreetmap.de/tms/GURS-road-lines/{zoom}/{x}/{y}.png",zoomExtent:[8,19],polygon:[[[15.17101,45.41273],[15.06731,45.4781],[14.98353,45.48726],[14.93027,45.51869],[14.91295,45.46869],[14.81398,45.45019],[14.77755,45.49724],[14.71885,45.52386],[14.68383,45.51924],[14.68367,45.57107],[14.58902,45.61966],[14.59477,45.65727],[14.51653,45.5974],[14.49636,45.52968],[14.32388,45.46048],[14.28251,45.47949],[14.26083,45.47352],[14.2367,45.49569],[14.21022,45.45962],[14.1328,45.46542],[14.06694,45.47615],[14.01187,45.50769],[13.98752,45.49945],[14.00668,45.4739],[13.99154,45.44854],[13.91789,45.44329],[13.88867,45.416],[13.81063,45.42531],[13.7856,45.45577],[13.67553,45.43241],[13.38,45.5666],[13.63822,45.64153],[13.72158,45.60472],[13.83759,45.59226],[13.89962,45.63295],[13.82754,45.67917],[13.82429,45.70266],[13.78961,45.73525],[13.66355,45.79008],[13.62279,45.78613],[13.58835,45.80154],[13.56531,45.85522],[13.62633,45.93894],[13.62975,45.97662],[13.59233,45.97929],[13.57124,45.9591],[13.52998,45.95627],[13.46729,46.00147],[13.49765,46.03741],[13.4896,46.06574],[13.58839,46.11268],[13.63712,46.14524],[13.65358,46.17505],[13.57147,46.17434],[13.54859,46.19982],[13.48189,46.21479],[13.42003,46.19662],[13.40026,46.21037],[13.40304,46.23284],[13.36653,46.30266],[13.43369,46.33243],[13.43247,46.36779],[13.56263,46.40895],[13.59357,46.44846],[13.68393,46.44947],[13.71321,46.53296],[13.79725,46.5164],[13.91305,46.53108],[14.00849,46.49169],[14.09406,46.49538],[14.12664,46.4852],[14.16569,46.44341],[14.28242,46.45347],[14.3259,46.44111],[14.43178,46.4568],[14.45113,46.43239],[14.52618,46.43623],[14.56677,46.38549],[14.58993,46.44479],[14.65658,46.45447],[14.71191,46.50954],[14.80818,46.51778],[14.81442,46.55093],[14.86094,46.61239],[14.9102,46.61569],[14.95398,46.64257],[14.98376,46.61868],[15.02973,46.65796],[15.10645,46.66965],[15.23727,46.64973],[15.41364,46.66553],[15.46237,46.64732],[15.47411,46.6226],[15.53427,46.64346],[15.53636,46.6761],[15.59201,46.69952],[15.62405,46.69039],[15.65624,46.71643],[15.767,46.70899],[15.83801,46.73237],[15.91476,46.71958],[16.02919,46.67033],[16.02955,46.68778],[15.99495,46.71178],[15.97505,46.74967],[15.98671,46.84189],[16.0553,46.85049],[16.11022,46.87912],[16.15425,46.86525],[16.23302,46.88667],[16.29431,46.8824],[16.34649,46.85476],[16.36058,46.8278],[16.34711,46.79707],[16.32245,46.79068],[16.33977,46.7799],[16.33186,46.75896],[16.38893,46.70785],[16.4383,46.69655],[16.42822,46.65301],[16.40159,46.6439],[16.51477,46.57299],[16.54136,46.53627],[16.5416,46.50887],[16.611,46.48393],[16.61889,46.46203],[16.52219,46.45842],[16.47451,46.50108],[16.36776,46.53371],[16.2582,46.489],[16.28533,46.42441],[16.3168,46.40141],[16.30574,46.36921],[16.18689,46.36804],[16.14548,46.39515],[16.06959,46.38154],[16.08614,46.34087],[16.04058,46.32708],[16.01819,46.29964],[15.80777,46.25091],[15.79649,46.21296],[15.77128,46.19937],[15.67996,46.21707],[15.65737,46.20838],[15.65639,46.18456],[15.62037,46.16163],[15.61899,46.11595],[15.63483,46.09529],[15.71869,46.06873],[15.74241,46.04578],[15.71612,45.99489],[15.71645,45.9178],[15.69237,45.90013],[15.69375,45.87111],[15.71776,45.8416],[15.6441,45.81058],[15.57467,45.83999],[15.52333,45.81155],[15.49115,45.82041],[15.47514,45.78666],[15.40343,45.78216],[15.28683,45.73391],[15.27435,45.72408],[15.29763,45.70782],[15.36329,45.72191],[15.41517,45.65443],[15.39705,45.62929],[15.31501,45.62356],[15.31503,45.60696],[15.29266,45.60163],[15.30852,45.58653],[15.31145,45.5423],[15.39496,45.48325],[15.34824,45.44665],[15.27515,45.45599],[15.22848,45.41683],[15.17101,45.41273]]],terms_url:"http://egp.gu.gov.si/",terms_text:"CC-BY ©2019 Geodetska uprava Republike Slovenije (gu.gov.si).",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/si/GURSRoadlines.png",overlay:true},{id:"hamburg-20cm",name:"Hamburg (20 cm)",type:"wms",template:"https://geodienste.hamburg.de/HH_WMS_DOP20?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=1&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[8.4826,53.9356],[8.48274,53.90924],[8.5275,53.90941],[8.52792,53.93577],[8.4826,53.9356]],[[9.77232,53.54352],[9.77434,53.55433],[9.76314,53.55521],[9.73047,53.55787],[9.73465,53.56536],[9.75793,53.61828],[9.77129,53.63131],[9.7707,53.61607],[9.79634,53.6103],[9.78993,53.60386],[9.81817,53.58591],[9.83773,53.59198],[9.84498,53.59498],[9.85416,53.59805],[9.86814,53.6093],[9.86931,53.61323],[9.88505,53.62199],[9.88697,53.6252],[9.89356,53.63026],[9.89637,53.63122],[9.89688,53.63492],[9.90678,53.65231],[9.93115,53.65262],[9.94552,53.65276],[9.95024,53.65085],[9.95155,53.65065],[9.97795,53.64887],[9.98492,53.6483],[9.98739,53.65072],[9.9996,53.68153],[10.02282,53.68157],[10.04338,53.68198],[10.05148,53.67759],[10.06925,53.67955],[10.0604,53.68833],[10.071,53.69585],[10.0707,53.70996],[10.08198,53.72044],[10.11908,53.71324],[10.16939,53.73896],[10.19369,53.731],[10.1779,53.70992],[10.15694,53.70451],[10.15829,53.68944],[10.14342,53.68057],[10.14176,53.67744],[10.14473,53.67613],[10.14643,53.67588],[10.14955,53.67545],[10.17153,53.66869],[10.19885,53.64675],[10.18973,53.63838],[10.22202,53.63349],[10.18887,53.61316],[10.19236,53.59474],[10.20117,53.58392],[10.15169,53.57619],[10.15067,53.56973],[10.148,53.5639],[10.15308,53.56242],[10.15942,53.56091],[10.15189,53.5417],[10.15465,53.53657],[10.16874,53.5374],[10.16327,53.52185],[10.16611,53.52013],[10.16919,53.51965],[10.18951,53.51148],[10.21043,53.51996],[10.21828,53.49923],[10.2367,53.49629],[10.25008,53.47898],[10.26592,53.47079],[10.29043,53.45512],[10.30962,53.44309],[10.31223,53.45229],[10.32514,53.44979],[10.30799,53.43332],[10.25598,53.41623],[10.25089,53.41024],[10.24578,53.40261],[10.24155,53.39797],[10.16555,53.39933],[10.14506,53.41614],[10.10949,53.42649],[10.1068,53.42658],[10.07581,53.45436],[10.05155,53.46394],[10.03517,53.4469],[10.01449,53.44203],[10.02294,53.43228],[9.99754,53.42546],[9.98243,53.41478],[9.97873,53.4142],[9.9581,53.42708],[9.92953,53.42007],[9.92552,53.41924],[9.90667,53.41596],[9.92305,53.43631],[9.91704,53.44664],[9.90436,53.45707],[9.89493,53.45583],[9.86885,53.44462],[9.86211,53.42942],[9.84872,53.44111],[9.80663,53.46648],[9.80021,53.47372],[9.8028,53.49383],[9.78203,53.49236],[9.76885,53.5053],[9.77107,53.52185],[9.78105,53.51838],[9.77352,53.52796],[9.77232,53.54352]]],terms_url:"https://www.hamburg.de/bsw/landesbetrieb-geoinformation-und-vermessung",terms_text:"Freie und Hansestadt Hamburg, Landesbetrieb Geoinformation und Vermessung"},{id:"Hamburg-DK5",name:"Hamburg (DK5)",type:"wms",template:"https://geodienste.hamburg.de/HH_WMS_DK5?FORMAT=image/png&TRANSPARENT=false&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=1&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[8.4826,53.9356],[8.48274,53.90924],[8.5275,53.90941],[8.52792,53.93577],[8.4826,53.9356]],[[9.77232,53.54352],[9.77434,53.55433],[9.76314,53.55521],[9.73047,53.55787],[9.73465,53.56536],[9.75793,53.61828],[9.77129,53.63131],[9.7707,53.61607],[9.79634,53.6103],[9.78993,53.60386],[9.81817,53.58591],[9.83773,53.59198],[9.84498,53.59498],[9.85416,53.59805],[9.86814,53.6093],[9.86931,53.61323],[9.88505,53.62199],[9.88697,53.6252],[9.89356,53.63026],[9.89637,53.63122],[9.89688,53.63492],[9.90678,53.65231],[9.93115,53.65262],[9.94552,53.65276],[9.95024,53.65085],[9.95155,53.65065],[9.97795,53.64887],[9.98492,53.6483],[9.98739,53.65072],[9.9996,53.68153],[10.02282,53.68157],[10.04338,53.68198],[10.05148,53.67759],[10.06925,53.67955],[10.0604,53.68833],[10.071,53.69585],[10.0707,53.70996],[10.08198,53.72044],[10.11908,53.71324],[10.16939,53.73896],[10.19369,53.731],[10.1779,53.70992],[10.15694,53.70451],[10.15829,53.68944],[10.14342,53.68057],[10.14176,53.67744],[10.14473,53.67613],[10.14643,53.67588],[10.14955,53.67545],[10.17153,53.66869],[10.19885,53.64675],[10.18973,53.63838],[10.22202,53.63349],[10.18887,53.61316],[10.19236,53.59474],[10.20117,53.58392],[10.15169,53.57619],[10.15067,53.56973],[10.148,53.5639],[10.15308,53.56242],[10.15942,53.56091],[10.15189,53.5417],[10.15465,53.53657],[10.16874,53.5374],[10.16327,53.52185],[10.16611,53.52013],[10.16919,53.51965],[10.18951,53.51148],[10.21043,53.51996],[10.21828,53.49923],[10.2367,53.49629],[10.25008,53.47898],[10.26592,53.47079],[10.29043,53.45512],[10.30962,53.44309],[10.31223,53.45229],[10.32514,53.44979],[10.30799,53.43332],[10.25598,53.41623],[10.25089,53.41024],[10.24578,53.40261],[10.24155,53.39797],[10.16555,53.39933],[10.14506,53.41614],[10.10949,53.42649],[10.1068,53.42658],[10.07581,53.45436],[10.05155,53.46394],[10.03517,53.4469],[10.01449,53.44203],[10.02294,53.43228],[9.99754,53.42546],[9.98243,53.41478],[9.97873,53.4142],[9.9581,53.42708],[9.92953,53.42007],[9.92552,53.41924],[9.90667,53.41596],[9.92305,53.43631],[9.91704,53.44664],[9.90436,53.45707],[9.89493,53.45583],[9.86885,53.44462],[9.86211,53.42942],[9.84872,53.44111],[9.80663,53.46648],[9.80021,53.47372],[9.8028,53.49383],[9.78203,53.49236],[9.76885,53.5053],[9.77107,53.52185],[9.78105,53.51838],[9.77352,53.52796],[9.77232,53.54352]]],terms_url:"https://www.hamburg.de/bsw/landesbetrieb-geoinformation-und-vermessung",terms_text:"Freie und Hansestadt Hamburg, Landesbetrieb Geoinformation und Vermessung"},{id:"Hampshire-Aerial-FCIR",name:"Hampshire Aerial FCIR",type:"tms",template:"https://{switch:a,b,c}.hampshire.aerial.openstreetmap.org.uk/layer/gb_hampshire_aerial_fcir/{zoom}/{x}/{y}.png",endDate:"2014-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",zoomExtent:[8,20],polygon:[[[-1.31567,50.77809],[-1.49139,50.73027],[-1.57113,50.69041],[-1.68095,50.71748],[-1.69338,50.73484],[-1.69528,50.74065],[-1.68689,50.74999],[-1.71068,50.74812],[-1.7195,50.75261],[-1.746,50.74452],[-1.74845,50.75675],[-1.74287,50.76397],[-1.75101,50.77577],[-1.78525,50.76177],[-1.79911,50.77236],[-1.82256,50.77225],[-1.82678,50.78077],[-1.8225,50.79933],[-1.80732,50.80074],[-1.81566,50.80752],[-1.80889,50.81358],[-1.80579,50.83249],[-1.79816,50.83535],[-1.80649,50.84414],[-1.80988,50.86189],[-1.81378,50.85591],[-1.83052,50.85261],[-1.85271,50.85651],[-1.85655,50.86684],[-1.8492,50.87802],[-1.85082,50.89178],[-1.84077,50.90051],[-1.82693,50.89939],[-1.82006,50.90492],[-1.82151,50.91691],[-1.81689,50.92412],[-1.84114,50.92886],[-1.87446,50.91441],[-1.91129,50.9439],[-1.92339,50.95917],[-1.95751,50.97575],[-1.9591,50.99152],[-1.94907,50.98649],[-1.92879,51.00055],[-1.88709,51.0026],[-1.87393,51.0097],[-1.8717,50.99083],[-1.85433,51.00786],[-1.83567,51.01238],[-1.81502,50.9899],[-1.80031,50.99457],[-1.75184,50.98133],[-1.71927,50.98047],[-1.69142,50.95943],[-1.66829,50.95041],[-1.6526,50.95029],[-1.63536,50.96269],[-1.62397,50.95903],[-1.6089,50.97686],[-1.62172,50.98099],[-1.63115,50.99984],[-1.60984,51.01225],[-1.60173,51.01042],[-1.60787,51.01582],[-1.6057,51.02271],[-1.63542,51.03176],[-1.63858,51.04126],[-1.63107,51.07819],[-1.64025,51.09201],[-1.6306,51.10359],[-1.63408,51.11099],[-1.63067,51.11652],[-1.64109,51.12237],[-1.66525,51.12546],[-1.65724,51.15539],[-1.67474,51.177],[-1.67213,51.18708],[-1.69679,51.20233],[-1.69247,51.21617],[-1.65288,51.22301],[-1.63564,51.22019],[-1.62395,51.24136],[-1.61402,51.24467],[-1.60741,51.25513],[-1.57717,51.25863],[-1.54443,51.24826],[-1.5384,51.25085],[-1.53436,51.25919],[-1.54345,51.25957],[-1.54007,51.27602],[-1.54596,51.28095],[-1.53591,51.28978],[-1.52595,51.28975],[-1.53093,51.29948],[-1.53008,51.3111],[-1.53628,51.31596],[-1.52986,51.34057],[-1.51552,51.34219],[-1.49498,51.33228],[-1.43599,51.33861],[-1.44759,51.3464],[-1.4463,51.35699],[-1.43056,51.35941],[-1.41608,51.37517],[-1.34899,51.37045],[-1.31472,51.37627],[-1.27555,51.3707],[-1.25116,51.37511],[-1.24118,51.36938],[-1.22209,51.37271],[-1.17602,51.36102],[-1.14321,51.36028],[-1.11875,51.36156],[-1.12096,51.36859],[-1.11678,51.3767],[-1.08363,51.38712],[-1.04754,51.36122],[-0.9904,51.36619],[-0.97264,51.36297],[-0.92376,51.36937],[-0.87681,51.3555],[-0.86549,51.35947],[-0.82728,51.35574],[-0.81122,51.34418],[-0.78322,51.34084],[-0.76325,51.32721],[-0.76005,51.32013],[-0.74183,51.31112],[-0.72842,51.28238],[-0.72631,51.25653],[-0.73713,51.23126],[-0.74898,51.2277],[-0.77712,51.23901],[-0.80193,51.23628],[-0.80611,51.24056],[-0.82491,51.23137],[-0.82701,51.22315],[-0.84493,51.20998],[-0.82268,51.18268],[-0.83042,51.15022],[-0.81952,51.15047],[-0.80504,51.15847],[-0.79382,51.15491],[-0.78879,51.14141],[-0.77846,51.13664],[-0.77813,51.13063],[-0.76654,51.11946],[-0.74365,51.11491],[-0.74715,51.10131],[-0.75411,51.10116],[-0.75122,51.09547],[-0.75506,51.08987],[-0.75076,51.0852],[-0.7785,51.07715],[-0.78645,51.06467],[-0.79954,51.06078],[-0.82645,51.05881],[-0.83646,51.0664],[-0.84519,51.06052],[-0.8499,51.0436],[-0.89485,51.01978],[-0.89065,51.00194],[-0.90461,50.99327],[-0.91461,50.97806],[-0.91278,50.9708],[-0.93246,50.94278],[-0.92119,50.9232],[-0.93793,50.91615],[-0.95132,50.89178],[-0.92368,50.86513],[-0.92976,50.85365],[-0.92903,50.84245],[-0.94342,50.82191],[-0.9299,50.78445],[-0.93275,50.77435],[-0.95347,50.73682],[-1.31567,50.77809]]]},{id:"Hampshire-Aerial-RGB",name:"Hampshire Aerial RGB",type:"tms",template:"https://{switch:a,b,c}.hampshire.aerial.openstreetmap.org.uk/layer/gb_hampshire_aerial_rgb/{zoom}/{x}/{y}.png",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",zoomExtent:[8,20],polygon:[[[-1.31567,50.77809],[-1.49139,50.73027],[-1.57113,50.69041],[-1.68095,50.71748],[-1.69338,50.73484],[-1.69528,50.74065],[-1.68689,50.74999],[-1.71068,50.74812],[-1.7195,50.75261],[-1.746,50.74452],[-1.74845,50.75675],[-1.74287,50.76397],[-1.75101,50.77577],[-1.78525,50.76177],[-1.79911,50.77236],[-1.82256,50.77225],[-1.82678,50.78077],[-1.8225,50.79933],[-1.80732,50.80074],[-1.81566,50.80752],[-1.80889,50.81358],[-1.80579,50.83249],[-1.79816,50.83535],[-1.80649,50.84414],[-1.80988,50.86189],[-1.81378,50.85591],[-1.83052,50.85261],[-1.85271,50.85651],[-1.85655,50.86684],[-1.8492,50.87802],[-1.85082,50.89178],[-1.84077,50.90051],[-1.82693,50.89939],[-1.82006,50.90492],[-1.82151,50.91691],[-1.81689,50.92412],[-1.84114,50.92886],[-1.87446,50.91441],[-1.91129,50.9439],[-1.92339,50.95917],[-1.95751,50.97575],[-1.9591,50.99152],[-1.94907,50.98649],[-1.92879,51.00055],[-1.88709,51.0026],[-1.87393,51.0097],[-1.8717,50.99083],[-1.85433,51.00786],[-1.83567,51.01238],[-1.81502,50.9899],[-1.80031,50.99457],[-1.75184,50.98133],[-1.71927,50.98047],[-1.69142,50.95943],[-1.66829,50.95041],[-1.6526,50.95029],[-1.63536,50.96269],[-1.62397,50.95903],[-1.6089,50.97686],[-1.62172,50.98099],[-1.63115,50.99984],[-1.60984,51.01225],[-1.60173,51.01042],[-1.60787,51.01582],[-1.6057,51.02271],[-1.63542,51.03176],[-1.63858,51.04126],[-1.63107,51.07819],[-1.64025,51.09201],[-1.6306,51.10359],[-1.63408,51.11099],[-1.63067,51.11652],[-1.64109,51.12237],[-1.66525,51.12546],[-1.65724,51.15539],[-1.67474,51.177],[-1.67213,51.18708],[-1.69679,51.20233],[-1.69247,51.21617],[-1.65288,51.22301],[-1.63564,51.22019],[-1.62395,51.24136],[-1.61402,51.24467],[-1.60741,51.25513],[-1.57717,51.25863],[-1.54443,51.24826],[-1.5384,51.25085],[-1.53436,51.25919],[-1.54345,51.25957],[-1.54007,51.27602],[-1.54596,51.28095],[-1.53591,51.28978],[-1.52595,51.28975],[-1.53093,51.29948],[-1.53008,51.3111],[-1.53628,51.31596],[-1.52986,51.34057],[-1.51552,51.34219],[-1.49498,51.33228],[-1.43599,51.33861],[-1.44759,51.3464],[-1.4463,51.35699],[-1.43056,51.35941],[-1.41608,51.37517],[-1.34899,51.37045],[-1.31472,51.37627],[-1.27555,51.3707],[-1.25116,51.37511],[-1.24118,51.36938],[-1.22209,51.37271],[-1.17602,51.36102],[-1.14321,51.36028],[-1.11875,51.36156],[-1.12096,51.36859],[-1.11678,51.3767],[-1.08363,51.38712],[-1.04754,51.36122],[-0.9904,51.36619],[-0.97264,51.36297],[-0.92376,51.36937],[-0.87681,51.3555],[-0.86549,51.35947],[-0.82728,51.35574],[-0.81122,51.34418],[-0.78322,51.34084],[-0.76325,51.32721],[-0.76005,51.32013],[-0.74183,51.31112],[-0.72842,51.28238],[-0.72631,51.25653],[-0.73713,51.23126],[-0.74898,51.2277],[-0.77712,51.23901],[-0.80193,51.23628],[-0.80611,51.24056],[-0.82491,51.23137],[-0.82701,51.22315],[-0.84493,51.20998],[-0.82268,51.18268],[-0.83042,51.15022],[-0.81952,51.15047],[-0.80504,51.15847],[-0.79382,51.15491],[-0.78879,51.14141],[-0.77846,51.13664],[-0.77813,51.13063],[-0.76654,51.11946],[-0.74365,51.11491],[-0.74715,51.10131],[-0.75411,51.10116],[-0.75122,51.09547],[-0.75506,51.08987],[-0.75076,51.0852],[-0.7785,51.07715],[-0.78645,51.06467],[-0.79954,51.06078],[-0.82645,51.05881],[-0.83646,51.0664],[-0.84519,51.06052],[-0.8499,51.0436],[-0.89485,51.01978],[-0.89065,51.00194],[-0.90461,50.99327],[-0.91461,50.97806],[-0.91278,50.9708],[-0.93246,50.94278],[-0.92119,50.9232],[-0.93793,50.91615],[-0.95132,50.89178],[-0.92368,50.86513],[-0.92976,50.85365],[-0.92903,50.84245],[-0.94342,50.82191],[-0.9299,50.78445],[-0.93275,50.77435],[-0.95347,50.73682],[-1.31567,50.77809]]]},{id:"helsingborg-orto",name:"Helsingborg Orthophoto",type:"tms",template:"http://mapproxy.openstreetmap.se/tiles/1.0.0/hborg2016_EPSG3857/{zoom}/{x}/{y}.jpeg",zoomExtent:[5,20],polygon:[[[12.74345,55.94997],[12.93777,55.90804],[13.00369,55.96842],[12.79083,56.25022],[12.56698,56.1356],[12.74345,55.94997]]],terms_url:"https://helsingborg.opendatasoft.com/",terms_text:"© Helsingborg municipality",best:true,description:"Orthophotos from the municipality of Helsingborg 2016, public domain",icon:"https://upload.wikimedia.org/wikipedia/commons/thumb/1/18/Helsingborg_vapen.svg/198px-Helsingborg_vapen.svg.png"},{id:"hri-orto",name:"Helsinki region orthophoto",type:"wms",template:"https://kartta.hsy.fi/geoserver/ows?SERVICE=WMS&FORMAT=image/jpeg&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=taustakartat_ja_aluejaot:Ortoilmakuva_2017&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,19],polygon:[[[24.26948,59.8593],[24.26674,60.22549],[24.55307,60.36703],[24.50363,60.49038],[24.76387,60.60079],[25.00625,60.54175],[24.90051,60.38197],[24.9884,60.35073],[25.06943,60.44096],[25.17517,60.45248],[25.18066,60.34122],[25.27954,60.2943],[25.19577,60.08813],[24.26948,59.8593]]],terms_url:"https://hri.fi/data/en_GB/dataset/paakaupunkiseudun-ortokuva-2017",terms_text:"© Espoon, Helsingin ja Vantaan kaupungit, Kirkkonummen ja Nurmijärven kunnat sekä HSL ja HSY",best:true,description:"Ortophotos from the municipalities of Espoo, Helsinki, Vantaa, Kirkkonummi and Nurmijärvi + HSL and HSY",icon:"https://raw.githubusercontent.com/osmlab/editor-layer-index/gh-pages/sources/europe/fi/hri_logo.png"},{id:"hu-hillshade",name:"Hillshade Hungary",type:"tms",template:"https://{switch:a,b,c}.map.turistautak.hu/tiles/shading/{zoom}/{x}/{y}.png",zoomExtent:[0,18],polygon:[[[15,45],[24,45],[24,49],[15,49],[15,45]]],terms_text:"SRTM",overlay:true},{id:"IBGE_DF_Addresses",name:"IBGE Distrito Federal",type:"tms",template:"https://{switch:a,b,c,d}.tiles.mapbox.com/styles/v1/wille/cirnnxni1000jg8nfppc8g7pm/tiles/256/{zoom}/{x}/{y}?access_token=pk.eyJ1Ijoid2lsbGUiLCJhIjoicFNVWk5VWSJ9.hluCd0YGvYHNlFi_utWe2g",zoomExtent:[0,20],polygon:[[[-48.2444,-16.0508],[-48.2444,-15.5005],[-47.5695,-15.5005],[-47.5695,-16.0508],[-48.2444,-16.0508]]],terms_text:"IBGE",description:"Addresses data from IBGE",overlay:true},{id:"IBGE_Setores_Rurais",name:"IBGE Mapa de Setores Rurais",type:"tms",template:"https://{switch:a,b,c,d}.tiles.mapbox.com/v4/tmpsantos.i00mo1kj/{zoom}/{x}/{y}.png?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcCIsImEiOiJjaml5MjVyb3MwMWV0M3hxYmUzdGdwbzE4In0.q548FjhsSJzvXsGlPsFxAQ",zoomExtent:[0,14],polygon:[[[-69.94793,-4.23168],[-69.45659,-1.49119],[-69.3973,-1.36508],[-69.42989,-1.22173],[-69.39523,-1.12555],[-69.44292,-1.03351],[-69.41861,-0.99827],[-69.528,-0.92514],[-69.52577,-0.86807],[-69.62491,-0.74667],[-69.56179,-0.63692],[-69.60783,-0.5008],[-69.8446,-0.33732],[-69.92054,-0.32573],[-70.04323,-0.18998],[-70.04302,0.56359],[-69.80272,0.57162],[-69.6711,0.66759],[-69.60529,0.61328],[-69.59701,0.6542],[-69.48002,0.73577],[-69.35277,0.61416],[-69.28914,0.64997],[-69.29484,0.60389],[-69.19975,0.60591],[-69.19425,0.64982],[-69.11563,0.64484],[-69.19001,0.74056],[-69.14881,0.76751],[-69.13576,0.87204],[-69.18846,0.91324],[-69.1646,0.94156],[-69.21679,0.97245],[-69.19773,0.99974],[-69.24494,1.05655],[-69.37641,1.08794],[-69.42312,1.04265],[-69.60989,1.09826],[-69.67718,1.06994],[-69.70963,1.11817],[-69.84266,1.07272],[-69.83972,1.71893],[-69.78236,1.69244],[-69.53464,1.77691],[-69.39109,1.72935],[-68.1645,1.72945],[-68.19207,1.7797],[-68.23954,1.77044],[-68.22688,1.82918],[-68.28555,1.83084],[-68.19583,2.03479],[-68.18033,1.9767],[-68.14417,1.97854],[-68.09043,1.89774],[-67.90162,1.81165],[-67.76942,2.00924],[-67.55095,2.04769],[-67.49519,2.16312],[-67.39404,2.22894],[-67.32672,2.06387],[-67.33083,1.94158],[-67.22831,1.84127],[-67.15384,1.8315],[-67.15922,1.67504],[-67.08017,1.38546],[-67.13923,1.32002],[-67.08675,1.16704],[-66.85119,1.22896],[-66.31032,0.74494],[-66.19737,0.78161],[-66.07783,0.76174],[-66.07024,0.8123],[-65.96712,0.81511],[-65.88369,0.94159],[-65.77261,0.95859],[-65.7421,1.00125],[-65.58894,1.00471],[-65.49624,0.87415],[-65.60623,0.70748],[-65.54116,0.64881],[-65.44499,0.68921],[-65.39213,0.75692],[-65.41198,0.82415],[-65.32734,0.93596],[-65.21302,0.90282],[-65.1749,0.94131],[-65.15831,1.1246],[-65.07232,1.15303],[-65.06317,1.11205],[-65.01361,1.10905],[-64.97445,1.20288],[-64.90439,1.25153],[-64.86966,1.22713],[-64.80053,1.31527],[-64.74446,1.22569],[-64.5789,1.34041],[-64.52608,1.44322],[-64.43586,1.47006],[-64.3939,1.52901],[-64.35111,1.52921],[-64.34777,1.49508],[-64.41019,1.40301],[-64.33791,1.36134],[-64.3136,1.45617],[-64.19707,1.52071],[-64.0735,1.64902],[-64.05781,1.92899],[-63.97219,1.99194],[-63.83555,1.96644],[-63.71155,2.04645],[-63.66501,2.01861],[-63.6268,2.11222],[-63.56474,2.13571],[-63.44059,2.126],[-63.36742,2.26864],[-63.37088,2.41121],[-63.42123,2.45102],[-63.46036,2.39684],[-63.56398,2.44573],[-63.76805,2.43994],[-63.84358,2.4916],[-64.01914,2.46135],[-64.0573,2.49752],[-63.98033,2.7237],[-64.07709,2.87262],[-64.07156,2.92142],[-64.12349,2.99048],[-64.15754,2.98243],[-64.14592,3.03459],[-64.22642,3.12356],[-64.19795,3.20121],[-64.2444,3.43036],[-64.17437,3.56841],[-64.281,3.70928],[-64.54357,3.85713],[-64.72239,4.11775],[-64.80203,4.17422],[-64.81123,4.27048],[-64.69522,4.25323],[-64.623,4.135],[-64.5565,4.10529],[-64.164,4.127],[-63.964,3.868],[-63.928,3.925],[-63.85,3.95],[-63.682,3.908],[-63.676,4.019],[-63.591,3.886],[-63.497,3.84],[-63.489,3.874],[-63.434,3.865],[-63.428,3.977],[-63.204,3.952],[-63.226,3.836],[-63.103,3.794],[-63.059,3.748],[-63.081,3.694],[-62.96,3.608],[-62.835,3.739],[-62.743,3.674],[-62.729,3.805],[-62.788,3.894],[-62.753,4.032],[-62.555,4.019],[-62.552,4.109],[-62.437,4.183],[-62.14308,4.07768],[-62.071,4.126],[-62.076,4.154],[-61.982,4.181],[-61.93175,4.12009],[-61.92213,4.16126],[-61.824,4.164],[-61.802,4.229],[-61.724,4.27],[-61.56,4.252],[-61.508,4.322],[-61.513,4.406],[-61.288,4.458],[-61.323,4.535],[-61.217,4.536],[-61.14559,4.48016],[-61.095,4.522],[-60.994,4.519],[-60.932,4.587],[-60.949,4.653],[-60.899,4.717],[-60.751,4.756],[-60.591,4.927],[-60.661,5.164],[-60.73197,5.21203],[-60.434,5.182],[-60.20825,5.28346],[-60.172,5.227],[-60.135,5.249],[-60.094,5.14],[-59.96984,5.06334],[-60.02524,4.7065],[-60.0705,4.61688],[-60.15725,4.57247],[-60.16114,4.51773],[-59.79503,4.46554],[-59.66948,4.37629],[-59.7319,4.28587],[-59.73069,4.18076],[-59.61818,4.13166],[-59.65406,4.06943],[-59.58417,3.96851],[-59.5153,3.94493],[-59.59279,3.88538],[-59.59631,3.79386],[-59.66555,3.78126],[-59.66842,3.70277],[-59.86728,3.57776],[-59.80205,3.50156],[-59.8408,3.43174],[-59.80488,3.35695],[-59.907,3.212],[-59.98944,2.88185],[-59.99,2.686],[-59.895,2.482],[-59.89872,2.36245],[-59.72315,2.27614],[-59.751,1.859],[-59.677,1.839],[-59.663,1.871],[-59.69,1.757],[-59.539,1.723],[-59.381,1.507],[-59.329,1.514],[-59.327,1.464],[-59.284,1.45],[-59.253,1.389],[-58.978,1.302],[-58.918,1.317],[-58.886,1.261],[-58.912,1.239],[-58.82512,1.17127],[-58.73956,1.1999],[-58.69456,1.29732],[-58.49622,1.26796],[-58.45787,1.37145],[-58.50511,1.40317],[-58.50873,1.46295],[-58.38559,1.46999],[-58.39472,1.52651],[-58.32237,1.59702],[-58.236,1.54669],[-58.16064,1.56011],[-58.12942,1.4989],[-58.00423,1.50303],[-57.99009,1.65844],[-57.85206,1.66782],[-57.77431,1.72973],[-57.70509,1.73093],[-57.65042,1.68237],[-57.5376,1.7005],[-57.50187,1.78609],[-57.43776,1.82681],[-57.43343,1.90598],[-57.36768,1.92372],[-57.36912,1.95638],[-57.30712,1.99665],[-57.22923,1.93759],[-57.08668,2.02644],[-57.01421,1.91489],[-56.91971,1.93036],[-56.79793,1.85336],[-56.72096,1.92582],[-56.62145,1.94588],[-56.57976,1.90588],[-56.45126,1.95614],[-56.24404,1.87808],[-56.1709,1.90048],[-56.11762,1.85097],[-55.95638,1.84509],[-55.90385,1.88803],[-55.93635,1.98647],[-55.9031,2.04108],[-56.00307,2.1676],[-56.05505,2.18464],[-56.04288,2.22778],[-56.13887,2.26574],[-56.09012,2.37228],[-56.02181,2.34247],[-55.97052,2.52931],[-55.76663,2.45524],[-55.71028,2.39917],[-55.49971,2.44324],[-55.38533,2.41836],[-55.32019,2.51537],[-55.23474,2.50338],[-55.1234,2.56762],[-55.10302,2.52564],[-54.95424,2.58359],[-54.86846,2.43989],[-54.68917,2.45389],[-54.68861,2.32472],[-54.54667,2.31833],[-54.53778,2.26556],[-54.46861,2.21306],[-54.24917,2.14667],[-54.18056,2.1725],[-54.11083,2.11222],[-54.06139,2.19167],[-53.94083,2.21917],[-53.93194,2.27194],[-53.88667,2.26778],[-53.745,2.37389],[-53.73389,2.31222],[-53.52972,2.24917],[-53.45861,2.2575],[-53.32833,2.35333],[-53.21667,2.25333],[-53.27899,2.18603],[-53.11861,2.2225],[-52.99472,2.17528],[-52.90972,2.19583],[-52.84722,2.28556],[-52.67528,2.37389],[-52.59444,2.47389],[-52.54028,2.57028],[-52.56417,2.63944],[-52.43944,2.87778],[-52.39583,2.90222],[-52.33187,3.16938],[-52.21472,3.26833],[-51.97104,3.70696],[-51.92148,3.72422],[-51.922,3.7792],[-51.79731,3.88888],[-51.77783,3.97406],[-51.65867,4.05276],[-51.61325,4.17437],[-51.63716,4.50834],[-51.49427,4.67426],[-51.11466,4.42286],[-50.94232,4.20165],[-50.85475,3.92491],[-50.85507,3.45573],[-50.75331,2.94057],[-50.29908,2.33079],[-49.73896,1.79143],[-48.23746,-0.07449],[-44.84728,-1.07246],[-43.54602,-2.04705],[-43.24389,-2.12403],[-42.78189,-2.33053],[-41.78084,-2.51859],[-41.5085,-2.68486],[-40.66365,-2.63829],[-40.50396,-2.57531],[-39.8907,-2.65328],[-39.15187,-3.04444],[-38.57151,-3.48047],[-38.34306,-3.54434],[-38.21421,-3.74103],[-38.12555,-3.80544],[-37.90182,-4.07265],[-37.77934,-4.18046],[-37.63401,-4.24454],[-37.51218,-4.41535],[-37.22122,-4.51045],[-37.07874,-4.71355],[-36.91716,-4.71372],[-36.62299,-4.85815],[-36.18969,-4.88505],[-35.93627,-4.83327],[-35.56471,-4.90758],[-35.33677,-4.99239],[-35.17659,-5.12497],[-34.79469,-6.33583],[-34.71587,-6.74615],[-34.62306,-6.90323],[-34.59953,-7.11133],[-34.64374,-7.98735],[-34.81497,-8.62472],[-35.0253,-9.13761],[-35.55848,-9.81261],[-35.69663,-9.90026],[-35.96401,-10.31281],[-36.06155,-10.37447],[-36.26639,-10.64593],[-36.61764,-10.81082],[-36.78725,-10.95151],[-36.99511,-11.29602],[-37.11368,-11.41261],[-37.46002,-12.10275],[-37.89668,-12.75844],[-38.22146,-13.09717],[-38.61146,-13.26537],[-38.85337,-14.65508],[-38.74388,-15.60089],[-38.66456,-15.74741],[-38.64697,-15.88327],[-38.8013,-16.24838],[-38.92933,-16.80775],[-38.53193,-17.80026],[-38.49171,-18.0046],[-38.53661,-18.09683],[-38.67053,-18.16855],[-39.35288,-18.10892],[-39.4675,-18.30359],[-39.54529,-18.78548],[-39.49227,-19.40134],[-39.63477,-19.74403],[-39.86353,-19.88681],[-40.17827,-20.75426],[-40.81442,-21.67672],[-40.76948,-21.87786],[-40.81442,-22.09702],[-41.5086,-22.52638],[-41.59666,-22.83627],[-41.79292,-23.08823],[-41.91484,-23.18527],[-43.19603,-23.26703],[-44.07735,-23.40501],[-45.13508,-24.12014],[-46.61368,-24.67512],[-47.85376,-25.47012],[-48.2801,-26.23036],[-48.34897,-26.75081],[-48.11076,-27.28208],[-48.21148,-27.85592],[-48.40713,-28.43255],[-48.68615,-28.76016],[-48.9156,-28.86305],[-49.1579,-29.02871],[-49.52748,-29.42005],[-49.82565,-29.86559],[-50.17344,-30.64282],[-50.60441,-31.24135],[-51.18785,-31.77646],[-51.74211,-32.10539],[-51.89236,-32.29596],[-52.06117,-32.38504],[-52.27087,-32.92102],[-52.45986,-33.25369],[-52.61505,-33.42291],[-53.18109,-33.86891],[-53.43053,-33.73947],[-53.43951,-33.69347],[-53.53228,-33.6888],[-53.51819,-33.15342],[-53.44438,-33.05296],[-53.24468,-32.93489],[-53.31008,-32.91875],[-53.29454,-32.89931],[-53.18496,-32.85043],[-53.14569,-32.79202],[-53.0858,-32.78835],[-53.07558,-32.74088],[-53.24992,-32.6041],[-53.39137,-32.58573],[-53.46423,-32.48446],[-53.58321,-32.45192],[-53.74599,-32.07848],[-53.83375,-32.05524],[-53.84978,-32.00064],[-53.96073,-31.95532],[-53.96972,-31.91765],[-54.10019,-31.92825],[-54.4549,-31.65295],[-54.4528,-31.59959],[-54.58676,-31.45656],[-54.8367,-31.442],[-54.88623,-31.3773],[-54.94087,-31.38068],[-55.00723,-31.26692],[-55.07446,-31.33216],[-55.24003,-31.26062],[-55.29118,-31.14226],[-55.34037,-31.13144],[-55.34981,-31.03922],[-55.42306,-31.01823],[-55.57742,-30.83309],[-55.65834,-30.864],[-55.66621,-30.95395],[-55.723,-30.943],[-55.727,-30.979],[-55.882,-31.077],[-56.00989,-31.08267],[-56.02241,-30.78565],[-56.12508,-30.73871],[-56.17074,-30.61517],[-56.26095,-30.58509],[-56.29193,-30.51967],[-56.38177,-30.49956],[-56.46126,-30.38486],[-56.54706,-30.35946],[-56.54115,-30.31291],[-56.6187,-30.30054],[-56.64628,-30.20346],[-56.77662,-30.1633],[-56.80777,-30.10301],[-57.07113,-30.08671],[-57.22081,-30.28928],[-57.31303,-30.25785],[-57.39229,-30.30474],[-57.46574,-30.26589],[-57.52431,-30.28569],[-57.56087,-30.21134],[-57.64744,-30.19483],[-57.48047,-30.12315],[-57.33713,-29.99284],[-57.294,-29.831],[-57.121,-29.765],[-56.89888,-29.53179],[-56.81905,-29.48816],[-56.76618,-29.37768],[-56.70164,-29.35913],[-56.59315,-29.12516],[-56.418,-29.075],[-56.40775,-28.9748],[-56.29995,-28.89614],[-56.29652,-28.8027],[-56.17858,-28.75922],[-56.00984,-28.60718],[-56.01249,-28.50873],[-55.88357,-28.47923],[-55.87739,-28.36159],[-55.75157,-28.37095],[-55.69433,-28.42204],[-55.67047,-28.33218],[-55.77415,-28.27414],[-55.7757,-28.24481],[-55.63167,-28.17719],[-55.60747,-28.11604],[-55.55957,-28.16523],[-55.4952,-28.07682],[-55.44611,-28.09787],[-55.368,-28.029],[-55.38299,-27.97948],[-55.343,-27.972],[-55.32706,-27.92664],[-55.26574,-27.92969],[-55.196,-27.856],[-55.133,-27.897],[-55.106,-27.846],[-55.035,-27.858],[-55.081,-27.779],[-54.936,-27.772],[-54.90617,-27.63871],[-54.85,-27.624],[-54.814,-27.533],[-54.775,-27.586],[-54.67926,-27.57394],[-54.67709,-27.508],[-54.621,-27.541],[-54.574,-27.453],[-54.5246,-27.5059],[-54.444,-27.472],[-54.47081,-27.42674],[-54.41,-27.405],[-54.35466,-27.46528],[-54.34067,-27.40311],[-54.28484,-27.44819],[-54.261,-27.397],[-54.21736,-27.38603],[-54.172,-27.254],[-54.15619,-27.29619],[-54.08872,-27.30149],[-54.01026,-27.19978],[-53.96219,-27.19698],[-53.95195,-27.15169],[-53.79879,-27.14629],[-53.80233,-27.04028],[-53.76087,-27.06543],[-53.78585,-27.02674],[-53.7473,-27.03218],[-53.7092,-26.93414],[-53.67125,-26.94222],[-53.69684,-26.86015],[-53.66059,-26.85814],[-53.75814,-26.72045],[-53.7205,-26.65099],[-53.75864,-26.64113],[-53.63739,-26.24968],[-53.742,-26.108],[-53.73409,-26.04333],[-53.83619,-25.97166],[-53.82214,-25.79377],[-53.89113,-25.62286],[-53.94895,-25.6117],[-53.95638,-25.64628],[-54.01,-25.567],[-54.07592,-25.55766],[-54.098,-25.619],[-54.099,-25.495],[-54.206,-25.541],[-54.178,-25.584],[-54.23,-25.562],[-54.25,-25.597],[-54.28,-25.556],[-54.38395,-25.59747],[-54.43288,-25.69756],[-54.4927,-25.6181],[-54.59354,-25.59275],[-54.61941,-25.45312],[-54.4295,-25.15915],[-54.43548,-24.94769],[-54.32437,-24.66059],[-54.32714,-24.47073],[-54.25877,-24.36377],[-54.34537,-24.14705],[-54.28223,-24.07336],[-54.43984,-23.90446],[-54.66978,-23.81262],[-54.70533,-23.86452],[-54.89,-23.898],[-54.924,-23.959],[-55.06223,-23.99335],[-55.107,-23.961],[-55.22907,-24.01383],[-55.30415,-23.96504],[-55.34542,-23.99458],[-55.41423,-23.9645],[-55.44167,-23.70084],[-55.47306,-23.64834],[-55.53989,-23.625],[-55.52356,-23.19733],[-55.54199,-23.1561],[-55.59635,-23.14993],[-55.66578,-22.85274],[-55.61432,-22.65521],[-55.72364,-22.55166],[-55.74302,-22.39266],[-55.78939,-22.3846],[-55.84304,-22.28725],[-56.20983,-22.27805],[-56.36485,-22.16949],[-56.39404,-22.07434],[-56.50711,-22.09561],[-56.63705,-22.26341],[-56.70344,-22.21693],[-56.72026,-22.26479],[-56.79344,-22.24238],[-56.84285,-22.30155],[-56.88343,-22.24755],[-56.9967,-22.22246],[-57.3744,-22.23204],[-57.5804,-22.17534],[-57.6106,-22.09462],[-57.70751,-22.09111],[-57.80183,-22.15072],[-57.99384,-22.09023],[-58.00946,-22.04038],[-57.91281,-21.88266],[-57.96603,-21.85045],[-57.90866,-21.77355],[-57.94714,-21.74413],[-57.88329,-21.68903],[-57.93436,-21.65037],[-57.91387,-21.59021],[-57.96795,-21.52432],[-57.8535,-21.33109],[-57.92019,-21.27655],[-57.85066,-21.22407],[-57.86834,-21.04417],[-57.81919,-20.94066],[-57.92836,-20.90036],[-57.8552,-20.83403],[-57.89863,-20.78872],[-57.96183,-20.7916],[-57.93478,-20.74565],[-57.86732,-20.73265],[-57.92414,-20.66392],[-57.98848,-20.69879],[-57.99847,-20.43551],[-58.09339,-20.35554],[-58.09596,-20.25445],[-58.16216,-20.25953],[-58.12152,-20.19246],[-58.16932,-20.1694],[-57.95347,-20.02094],[-57.90248,-20.04207],[-57.85796,-19.9703],[-58.131,-19.758],[-57.784,-19.033],[-57.694,-19.011],[-57.719,-18.899],[-57.766,-18.899],[-57.557,-18.24],[-57.453,-18.231],[-57.574,-18.131],[-57.72302,-17.83074],[-57.68472,-17.8306],[-57.70991,-17.72702],[-57.783,-17.639],[-57.73696,-17.5583],[-57.883,-17.449],[-57.996,-17.515],[-58.06,-17.45],[-58.116,-17.451],[-58.151,-17.384],[-58.263,-17.344],[-58.396,-17.181],[-58.423,-16.989],[-58.474,-16.935],[-58.47,-16.703],[-58.436,-16.592],[-58.333,-16.49],[-58.32227,-16.26559],[-58.388,-16.261],[-58.43059,-16.32264],[-60.17335,-16.26672],[-60.238,-15.473],[-60.57543,-15.09677],[-60.244,-15.096],[-60.272,-14.62],[-60.321,-14.608],[-60.492,-14.188],[-60.479,-14.097],[-60.38066,-13.9888],[-60.45062,-13.9364],[-60.45599,-13.85422],[-60.49068,-13.85782],[-60.46776,-13.79446],[-60.76755,-13.68329],[-60.87678,-13.62149],[-60.91857,-13.54334],[-61.0056,-13.552],[-61.0129,-13.48925],[-61.0938,-13.49081],[-61.10314,-13.53056],[-61.18155,-13.50557],[-61.19236,-13.53695],[-61.29954,-13.47718],[-61.46527,-13.55427],[-61.57927,-13.48711],[-61.852,-13.538],[-61.892,-13.431],[-61.96968,-13.40759],[-61.97592,-13.36695],[-62.11498,-13.25932],[-62.115,-13.163],[-62.15254,-13.15993],[-62.16703,-13.11346],[-62.19,-13.153],[-62.214,-13.111],[-62.27269,-13.15687],[-62.39178,-13.13471],[-62.453,-13.064],[-62.612,-13.041],[-62.65,-12.965],[-62.729,-13.02],[-62.779,-13.009],[-62.89672,-12.8539],[-63.01134,-12.83602],[-63.08186,-12.72323],[-63.06163,-12.68584],[-63.15726,-12.6138],[-63.24621,-12.66222],[-63.23713,-12.69043],[-63.30125,-12.68138],[-63.44052,-12.608],[-63.43627,-12.56526],[-63.50641,-12.56562],[-63.55295,-12.50598],[-63.7848,-12.42871],[-63.88957,-12.44745],[-63.89949,-12.50204],[-63.95144,-12.53179],[-64.13464,-12.47732],[-64.16781,-12.51503],[-64.17504,-12.46675],[-64.22945,-12.45419],[-64.29018,-12.50313],[-64.29452,-12.4582],[-64.41057,-12.44436],[-64.51217,-12.3551],[-64.51256,-12.22562],[-64.70406,-12.1827],[-64.70719,-12.08684],[-64.75486,-12.15762],[-64.7688,-12.09356],[-64.83747,-12.11786],[-64.80954,-12.05633],[-64.84077,-12.01027],[-65.03548,-11.99408],[-65.01398,-11.90303],[-65.0727,-11.86587],[-65.08672,-11.7082],[-65.18953,-11.72353],[-65.18216,-11.75609],[-65.2593,-11.71053],[-65.21178,-11.52857],[-65.3074,-11.49957],[-65.33276,-11.33986],[-65.29053,-11.32275],[-65.34347,-11.3082],[-65.35834,-11.26834],[-65.35938,-11.22067],[-65.31294,-11.19578],[-65.35387,-11.18419],[-65.36177,-11.14031],[-65.28269,-11.09009],[-65.30071,-11.03142],[-65.25053,-10.98506],[-65.27476,-10.87302],[-65.35376,-10.78881],[-65.34667,-10.68155],[-65.40569,-10.63935],[-65.43011,-10.48505],[-65.288,-10.219],[-65.333,-9.965],[-65.28588,-9.84413],[-65.39313,-9.68683],[-65.44394,-9.66957],[-65.4883,-9.71015],[-65.55611,-9.84498],[-65.627,-9.83804],[-65.66963,-9.78129],[-65.71023,-9.80857],[-65.68395,-9.74992],[-65.7432,-9.78296],[-65.77013,-9.73442],[-65.79437,-9.79295],[-65.79962,-9.75663],[-65.86532,-9.79533],[-65.87184,-9.75307],[-65.91976,-9.75314],[-65.98222,-9.81011],[-66.151,-9.785],[-66.426,-9.899],[-66.435,-9.866],[-66.61995,-9.89353],[-66.63701,-9.94983],[-66.8751,-10.08268],[-66.9528,-10.18886],[-66.99683,-10.20017],[-67.01537,-10.25919],[-67.17745,-10.33923],[-67.31545,-10.31932],[-67.31155,-10.37716],[-67.40717,-10.37386],[-67.44361,-10.45492],[-67.57925,-10.5028],[-67.64028,-10.59807],[-67.67631,-10.60484],[-67.70825,-10.71083],[-67.86386,-10.64067],[-68.03289,-10.65486],[-68.10456,-10.71426],[-68.10333,-10.77541],[-68.27819,-10.98926],[-68.71576,-11.14483],[-68.75767,-11.00079],[-68.9118,-11.02192],[-69.41453,-10.92575],[-69.73653,-10.97445],[-69.76903,-10.92972],[-69.93442,-10.9219],[-70.15869,-11.04096],[-70.30672,-11.06983],[-70.43675,-11.03923],[-70.53033,-10.93465],[-70.62103,-10.99982],[-70.62338,-9.82054],[-70.53663,-9.76584],[-70.59972,-9.56264],[-70.55282,-9.57093],[-70.56894,-9.53127],[-70.50506,-9.50557],[-70.49665,-9.42489],[-70.59581,-9.4425],[-70.6632,-9.52601],[-70.75067,-9.56043],[-70.79332,-9.63846],[-70.96337,-9.74891],[-70.99391,-9.81721],[-71.13974,-9.85702],[-71.22052,-9.96968],[-72.1804,-9.99967],[-72.15136,-9.79742],[-72.26296,-9.75085],[-72.25282,-9.61633],[-72.28821,-9.60316],[-72.2829,-9.53995],[-72.35688,-9.4946],[-72.51954,-9.49128],[-72.71676,-9.4122],[-73.2038,-9.40715],[-73.07352,-9.23461],[-73.0093,-9.22236],[-73.02612,-9.17786],[-72.9582,-9.14302],[-72.94091,-8.98494],[-72.99931,-8.91778],[-73.05901,-8.90561],[-73.14992,-8.6839],[-73.20907,-8.6857],[-73.28745,-8.61948],[-73.3055,-8.47197],[-73.38956,-8.46878],[-73.41286,-8.41099],[-73.53744,-8.34587],[-73.62739,-8.02187],[-73.73175,-7.9684],[-73.7725,-7.90237],[-73.76164,-7.85803],[-73.69706,-7.86527],[-73.6843,-7.77644],[-73.82217,-7.71788],[-73.99094,-7.53635],[-73.948,-7.52661],[-73.91981,-7.46568],[-73.96394,-7.34764],[-73.87014,-7.37882],[-73.7003,-7.30429],[-73.79842,-7.11306],[-73.71046,-6.84019],[-73.53639,-6.6834],[-73.39115,-6.64193],[-73.35281,-6.59327],[-73.22741,-6.58884],[-73.18797,-6.52302],[-73.13523,-6.51046],[-73.10473,-6.40666],[-73.24664,-6.14963],[-73.23821,-6.04399],[-73.1868,-6.00512],[-73.15207,-5.86796],[-73.05303,-5.79517],[-72.95912,-5.65689],[-72.95888,-5.46613],[-72.86052,-5.27117],[-72.88725,-5.16307],[-72.73986,-5.08859],[-72.72765,-5.05199],[-72.6212,-5.0518],[-72.598,-4.98386],[-72.38202,-4.87296],[-72.36895,-4.80387],[-72.12601,-4.73454],[-72.04335,-4.62384],[-72.00689,-4.64622],[-71.99464,-4.60996],[-71.94743,-4.60877],[-71.91909,-4.5298],[-71.88549,-4.53803],[-71.9073,-4.51644],[-71.76637,-4.50446],[-71.75109,-4.46887],[-71.70817,-4.51165],[-71.65479,-4.47246],[-71.65032,-4.50395],[-71.61548,-4.4687],[-71.6335,-4.51524],[-71.59625,-4.52928],[-71.53703,-4.46442],[-71.49428,-4.48701],[-71.50716,-4.43909],[-71.43438,-4.42882],[-71.42562,-4.47058],[-71.35026,-4.42728],[-71.30752,-4.46288],[-71.32091,-4.42009],[-71.27782,-4.44217],[-71.26975,-4.385],[-71.20263,-4.37987],[-71.19422,-4.42471],[-71.14478,-4.38158],[-71.11491,-4.41119],[-71.10616,-4.37764],[-70.99389,-4.38654],[-70.99595,-4.34632],[-70.9357,-4.38432],[-70.84483,-4.27905],[-70.86447,-4.25245],[-70.81677,-4.23005],[-70.8458,-4.21872],[-70.75901,-4.15944],[-70.68147,-4.20791],[-70.64256,-4.12805],[-70.62521,-4.19151],[-70.56118,-4.1775],[-70.57357,-4.21169],[-70.54796,-4.13671],[-70.51036,-4.14824],[-70.50417,-4.20098],[-70.48535,-4.16132],[-70.43435,-4.16266],[-70.43146,-4.13217],[-70.33892,-4.17997],[-70.32281,-4.14206],[-70.28769,-4.16555],[-70.29141,-4.28709],[-70.21457,-4.29749],[-70.19194,-4.36179],[-70.15508,-4.27308],[-70.11749,-4.28585],[-70.10881,-4.25454],[-70.04189,-4.29409],[-70.07948,-4.31428],[-70.02826,-4.3703],[-69.99182,-4.37482],[-69.94793,-4.23168]],[[-34.00035,-3.76654],[-34.01797,-3.84985],[-34.00664,-3.91809],[-33.98608,-3.95952],[-33.95923,-3.99217],[-33.8921,-4.03653],[-33.81658,-4.05077],[-33.72931,-4.03151],[-33.66638,-3.9838],[-33.62736,-3.9185],[-33.61519,-3.84985],[-33.63239,-3.76864],[-33.68693,-3.69537],[-33.74987,-3.65978],[-33.81658,-3.6489],[-33.89336,-3.66397],[-33.96007,-3.70877],[-34.00035,-3.76654]],[[-32.5538,-4.00884],[-32.59937,-3.9531],[-32.64061,-3.87309],[-32.61755,-3.73712],[-32.58338,-3.70527],[-32.54228,-3.65606],[-32.4592,-3.63029],[-32.35174,-3.63887],[-32.30049,-3.67684],[-32.24749,-3.75266],[-32.23155,-3.81889],[-32.2357,-3.90247],[-32.30194,-3.9883],[-32.42898,-4.0384],[-32.5538,-4.00884]],[[-29.50321,0.79391],[-29.54097,0.8689],[-29.54727,0.92553],[-29.52367,0.99422],[-29.48958,1.06134],[-29.43136,1.10224],[-29.35899,1.1206],[-29.29238,1.11378],[-29.22158,1.0776],[-29.16285,1.00314],[-29.14501,0.92605],[-29.14764,0.88358],[-29.17176,0.8196],[-29.24885,0.74357],[-29.29448,0.72521],[-29.36371,0.71892],[-29.43556,0.73937],[-29.50321,0.79391]],[[-29.09537,-20.42649],[-29.19756,-20.33509],[-29.3343,-20.28932],[-29.46741,-20.3288],[-29.54604,-20.42958],[-29.55396,-20.52706],[-29.51696,-20.62613],[-29.40995,-20.68955],[-29.27599,-20.72578],[-29.15968,-20.66209],[-29.07188,-20.57088],[-28.9712,-20.64769],[-28.83286,-20.69814],[-28.67968,-20.62099],[-28.63549,-20.49284],[-28.63412,-20.47146],[-28.7431,-20.30094],[-28.8683,-20.27288],[-29.0031,-20.32416],[-29.09537,-20.42649]]],terms_text:"IBGE",icon:"https://osmlab.github.io/editor-layer-index/sources/south-america/br/IBGE_Setores_Rurais.png"},{id:"IBGE_Setores_Urbanos",name:"IBGE Mapa de Setores Urbanos",type:"tms",template:"https://{switch:a,b,c,d}.tiles.mapbox.com/v4/tmpsantos.hgda0m6h/{zoom}/{x}/{y}.png?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcCIsImEiOiJjaml5MjVyb3MwMWV0M3hxYmUzdGdwbzE4In0.q548FjhsSJzvXsGlPsFxAQ",zoomExtent:[0,19],polygon:[[[-69.94793,-4.23168],[-69.45659,-1.49119],[-69.3973,-1.36508],[-69.42989,-1.22173],[-69.39523,-1.12555],[-69.44292,-1.03351],[-69.41861,-0.99827],[-69.528,-0.92514],[-69.52577,-0.86807],[-69.62491,-0.74667],[-69.56179,-0.63692],[-69.60783,-0.5008],[-69.8446,-0.33732],[-69.92054,-0.32573],[-70.04323,-0.18998],[-70.04302,0.56359],[-69.80272,0.57162],[-69.6711,0.66759],[-69.60529,0.61328],[-69.59701,0.6542],[-69.48002,0.73577],[-69.35277,0.61416],[-69.28914,0.64997],[-69.29484,0.60389],[-69.19975,0.60591],[-69.19425,0.64982],[-69.11563,0.64484],[-69.19001,0.74056],[-69.14881,0.76751],[-69.13576,0.87204],[-69.18846,0.91324],[-69.1646,0.94156],[-69.21679,0.97245],[-69.19773,0.99974],[-69.24494,1.05655],[-69.37641,1.08794],[-69.42312,1.04265],[-69.60989,1.09826],[-69.67718,1.06994],[-69.70963,1.11817],[-69.84266,1.07272],[-69.83972,1.71893],[-69.78236,1.69244],[-69.53464,1.77691],[-69.39109,1.72935],[-68.1645,1.72945],[-68.19207,1.7797],[-68.23954,1.77044],[-68.22688,1.82918],[-68.28555,1.83084],[-68.19583,2.03479],[-68.18033,1.9767],[-68.14417,1.97854],[-68.09043,1.89774],[-67.90162,1.81165],[-67.76942,2.00924],[-67.55095,2.04769],[-67.49519,2.16312],[-67.39404,2.22894],[-67.32672,2.06387],[-67.33083,1.94158],[-67.22831,1.84127],[-67.15384,1.8315],[-67.15922,1.67504],[-67.08017,1.38546],[-67.13923,1.32002],[-67.08675,1.16704],[-66.85119,1.22896],[-66.31032,0.74494],[-66.19737,0.78161],[-66.07783,0.76174],[-66.07024,0.8123],[-65.96712,0.81511],[-65.88369,0.94159],[-65.77261,0.95859],[-65.7421,1.00125],[-65.58894,1.00471],[-65.49624,0.87415],[-65.60623,0.70748],[-65.54116,0.64881],[-65.44499,0.68921],[-65.39213,0.75692],[-65.41198,0.82415],[-65.32734,0.93596],[-65.21302,0.90282],[-65.1749,0.94131],[-65.15831,1.1246],[-65.07232,1.15303],[-65.06317,1.11205],[-65.01361,1.10905],[-64.97445,1.20288],[-64.90439,1.25153],[-64.86966,1.22713],[-64.80053,1.31527],[-64.74446,1.22569],[-64.5789,1.34041],[-64.52608,1.44322],[-64.43586,1.47006],[-64.3939,1.52901],[-64.35111,1.52921],[-64.34777,1.49508],[-64.41019,1.40301],[-64.33791,1.36134],[-64.3136,1.45617],[-64.19707,1.52071],[-64.0735,1.64902],[-64.05781,1.92899],[-63.97219,1.99194],[-63.83555,1.96644],[-63.71155,2.04645],[-63.66501,2.01861],[-63.6268,2.11222],[-63.56474,2.13571],[-63.44059,2.126],[-63.36742,2.26864],[-63.37088,2.41121],[-63.42123,2.45102],[-63.46036,2.39684],[-63.56398,2.44573],[-63.76805,2.43994],[-63.84358,2.4916],[-64.01914,2.46135],[-64.0573,2.49752],[-63.98033,2.7237],[-64.07709,2.87262],[-64.07156,2.92142],[-64.12349,2.99048],[-64.15754,2.98243],[-64.14592,3.03459],[-64.22642,3.12356],[-64.19795,3.20121],[-64.2444,3.43036],[-64.17437,3.56841],[-64.281,3.70928],[-64.54357,3.85713],[-64.72239,4.11775],[-64.80203,4.17422],[-64.81123,4.27048],[-64.69522,4.25323],[-64.623,4.135],[-64.5565,4.10529],[-64.164,4.127],[-63.964,3.868],[-63.928,3.925],[-63.85,3.95],[-63.682,3.908],[-63.676,4.019],[-63.591,3.886],[-63.497,3.84],[-63.489,3.874],[-63.434,3.865],[-63.428,3.977],[-63.204,3.952],[-63.226,3.836],[-63.103,3.794],[-63.059,3.748],[-63.081,3.694],[-62.96,3.608],[-62.835,3.739],[-62.743,3.674],[-62.729,3.805],[-62.788,3.894],[-62.753,4.032],[-62.555,4.019],[-62.552,4.109],[-62.437,4.183],[-62.14308,4.07768],[-62.071,4.126],[-62.076,4.154],[-61.982,4.181],[-61.93175,4.12009],[-61.92213,4.16126],[-61.824,4.164],[-61.802,4.229],[-61.724,4.27],[-61.56,4.252],[-61.508,4.322],[-61.513,4.406],[-61.288,4.458],[-61.323,4.535],[-61.217,4.536],[-61.14559,4.48016],[-61.095,4.522],[-60.994,4.519],[-60.932,4.587],[-60.949,4.653],[-60.899,4.717],[-60.751,4.756],[-60.591,4.927],[-60.661,5.164],[-60.73197,5.21203],[-60.434,5.182],[-60.20825,5.28346],[-60.172,5.227],[-60.135,5.249],[-60.094,5.14],[-59.96984,5.06334],[-60.02524,4.7065],[-60.0705,4.61688],[-60.15725,4.57247],[-60.16114,4.51773],[-59.79503,4.46554],[-59.66948,4.37629],[-59.7319,4.28587],[-59.73069,4.18076],[-59.61818,4.13166],[-59.65406,4.06943],[-59.58417,3.96851],[-59.5153,3.94493],[-59.59279,3.88538],[-59.59631,3.79386],[-59.66555,3.78126],[-59.66842,3.70277],[-59.86728,3.57776],[-59.80205,3.50156],[-59.8408,3.43174],[-59.80488,3.35695],[-59.907,3.212],[-59.98944,2.88185],[-59.99,2.686],[-59.895,2.482],[-59.89872,2.36245],[-59.72315,2.27614],[-59.751,1.859],[-59.677,1.839],[-59.663,1.871],[-59.69,1.757],[-59.539,1.723],[-59.381,1.507],[-59.329,1.514],[-59.327,1.464],[-59.284,1.45],[-59.253,1.389],[-58.978,1.302],[-58.918,1.317],[-58.886,1.261],[-58.912,1.239],[-58.82512,1.17127],[-58.73956,1.1999],[-58.69456,1.29732],[-58.49622,1.26796],[-58.45787,1.37145],[-58.50511,1.40317],[-58.50873,1.46295],[-58.38559,1.46999],[-58.39472,1.52651],[-58.32237,1.59702],[-58.236,1.54669],[-58.16064,1.56011],[-58.12942,1.4989],[-58.00423,1.50303],[-57.99009,1.65844],[-57.85206,1.66782],[-57.77431,1.72973],[-57.70509,1.73093],[-57.65042,1.68237],[-57.5376,1.7005],[-57.50187,1.78609],[-57.43776,1.82681],[-57.43343,1.90598],[-57.36768,1.92372],[-57.36912,1.95638],[-57.30712,1.99665],[-57.22923,1.93759],[-57.08668,2.02644],[-57.01421,1.91489],[-56.91971,1.93036],[-56.79793,1.85336],[-56.72096,1.92582],[-56.62145,1.94588],[-56.57976,1.90588],[-56.45126,1.95614],[-56.24404,1.87808],[-56.1709,1.90048],[-56.11762,1.85097],[-55.95638,1.84509],[-55.90385,1.88803],[-55.93635,1.98647],[-55.9031,2.04108],[-56.00307,2.1676],[-56.05505,2.18464],[-56.04288,2.22778],[-56.13887,2.26574],[-56.09012,2.37228],[-56.02181,2.34247],[-55.97052,2.52931],[-55.76663,2.45524],[-55.71028,2.39917],[-55.49971,2.44324],[-55.38533,2.41836],[-55.32019,2.51537],[-55.23474,2.50338],[-55.1234,2.56762],[-55.10302,2.52564],[-54.95424,2.58359],[-54.86846,2.43989],[-54.68917,2.45389],[-54.68861,2.32472],[-54.54667,2.31833],[-54.53778,2.26556],[-54.46861,2.21306],[-54.24917,2.14667],[-54.18056,2.1725],[-54.11083,2.11222],[-54.06139,2.19167],[-53.94083,2.21917],[-53.93194,2.27194],[-53.88667,2.26778],[-53.745,2.37389],[-53.73389,2.31222],[-53.52972,2.24917],[-53.45861,2.2575],[-53.32833,2.35333],[-53.21667,2.25333],[-53.27899,2.18603],[-53.11861,2.2225],[-52.99472,2.17528],[-52.90972,2.19583],[-52.84722,2.28556],[-52.67528,2.37389],[-52.59444,2.47389],[-52.54028,2.57028],[-52.56417,2.63944],[-52.43944,2.87778],[-52.39583,2.90222],[-52.33187,3.16938],[-52.21472,3.26833],[-51.97104,3.70696],[-51.92148,3.72422],[-51.922,3.7792],[-51.79731,3.88888],[-51.77783,3.97406],[-51.65867,4.05276],[-51.61325,4.17437],[-51.63716,4.50834],[-51.49427,4.67426],[-51.11466,4.42286],[-50.94232,4.20165],[-50.85475,3.92491],[-50.85507,3.45573],[-50.75331,2.94057],[-50.29908,2.33079],[-49.73896,1.79143],[-48.23746,-0.07449],[-44.84728,-1.07246],[-43.54602,-2.04705],[-43.24389,-2.12403],[-42.78189,-2.33053],[-41.78084,-2.51859],[-41.5085,-2.68486],[-40.66365,-2.63829],[-40.50396,-2.57531],[-39.8907,-2.65328],[-39.15187,-3.04444],[-38.57151,-3.48047],[-38.34306,-3.54434],[-38.21421,-3.74103],[-38.12555,-3.80544],[-37.90182,-4.07265],[-37.77934,-4.18046],[-37.63401,-4.24454],[-37.51218,-4.41535],[-37.22122,-4.51045],[-37.07874,-4.71355],[-36.91716,-4.71372],[-36.62299,-4.85815],[-36.18969,-4.88505],[-35.93627,-4.83327],[-35.56471,-4.90758],[-35.33677,-4.99239],[-35.17659,-5.12497],[-34.79469,-6.33583],[-34.71587,-6.74615],[-34.62306,-6.90323],[-34.59953,-7.11133],[-34.64374,-7.98735],[-34.81497,-8.62472],[-35.0253,-9.13761],[-35.55848,-9.81261],[-35.69663,-9.90026],[-35.96401,-10.31281],[-36.06155,-10.37447],[-36.26639,-10.64593],[-36.61764,-10.81082],[-36.78725,-10.95151],[-36.99511,-11.29602],[-37.11368,-11.41261],[-37.46002,-12.10275],[-37.89668,-12.75844],[-38.22146,-13.09717],[-38.61146,-13.26537],[-38.85337,-14.65508],[-38.74388,-15.60089],[-38.66456,-15.74741],[-38.64697,-15.88327],[-38.8013,-16.24838],[-38.92933,-16.80775],[-38.53193,-17.80026],[-38.49171,-18.0046],[-38.53661,-18.09683],[-38.67053,-18.16855],[-39.35288,-18.10892],[-39.4675,-18.30359],[-39.54529,-18.78548],[-39.49227,-19.40134],[-39.63477,-19.74403],[-39.86353,-19.88681],[-40.17827,-20.75426],[-40.81442,-21.67672],[-40.76948,-21.87786],[-40.81442,-22.09702],[-41.5086,-22.52638],[-41.59666,-22.83627],[-41.79292,-23.08823],[-41.91484,-23.18527],[-43.19603,-23.26703],[-44.07735,-23.40501],[-45.13508,-24.12014],[-46.61368,-24.67512],[-47.85376,-25.47012],[-48.2801,-26.23036],[-48.34897,-26.75081],[-48.11076,-27.28208],[-48.21148,-27.85592],[-48.40713,-28.43255],[-48.68615,-28.76016],[-48.9156,-28.86305],[-49.1579,-29.02871],[-49.52748,-29.42005],[-49.82565,-29.86559],[-50.17344,-30.64282],[-50.60441,-31.24135],[-51.18785,-31.77646],[-51.74211,-32.10539],[-51.89236,-32.29596],[-52.06117,-32.38504],[-52.27087,-32.92102],[-52.45986,-33.25369],[-52.61505,-33.42291],[-53.18109,-33.86891],[-53.43053,-33.73947],[-53.43951,-33.69347],[-53.53228,-33.6888],[-53.51819,-33.15342],[-53.44438,-33.05296],[-53.24468,-32.93489],[-53.31008,-32.91875],[-53.29454,-32.89931],[-53.18496,-32.85043],[-53.14569,-32.79202],[-53.0858,-32.78835],[-53.07558,-32.74088],[-53.24992,-32.6041],[-53.39137,-32.58573],[-53.46423,-32.48446],[-53.58321,-32.45192],[-53.74599,-32.07848],[-53.83375,-32.05524],[-53.84978,-32.00064],[-53.96073,-31.95532],[-53.96972,-31.91765],[-54.10019,-31.92825],[-54.4549,-31.65295],[-54.4528,-31.59959],[-54.58676,-31.45656],[-54.8367,-31.442],[-54.88623,-31.3773],[-54.94087,-31.38068],[-55.00723,-31.26692],[-55.07446,-31.33216],[-55.24003,-31.26062],[-55.29118,-31.14226],[-55.34037,-31.13144],[-55.34981,-31.03922],[-55.42306,-31.01823],[-55.57742,-30.83309],[-55.65834,-30.864],[-55.66621,-30.95395],[-55.723,-30.943],[-55.727,-30.979],[-55.882,-31.077],[-56.00989,-31.08267],[-56.02241,-30.78565],[-56.12508,-30.73871],[-56.17074,-30.61517],[-56.26095,-30.58509],[-56.29193,-30.51967],[-56.38177,-30.49956],[-56.46126,-30.38486],[-56.54706,-30.35946],[-56.54115,-30.31291],[-56.6187,-30.30054],[-56.64628,-30.20346],[-56.77662,-30.1633],[-56.80777,-30.10301],[-57.07113,-30.08671],[-57.22081,-30.28928],[-57.31303,-30.25785],[-57.39229,-30.30474],[-57.46574,-30.26589],[-57.52431,-30.28569],[-57.56087,-30.21134],[-57.64744,-30.19483],[-57.48047,-30.12315],[-57.33713,-29.99284],[-57.294,-29.831],[-57.121,-29.765],[-56.89888,-29.53179],[-56.81905,-29.48816],[-56.76618,-29.37768],[-56.70164,-29.35913],[-56.59315,-29.12516],[-56.418,-29.075],[-56.40775,-28.9748],[-56.29995,-28.89614],[-56.29652,-28.8027],[-56.17858,-28.75922],[-56.00984,-28.60718],[-56.01249,-28.50873],[-55.88357,-28.47923],[-55.87739,-28.36159],[-55.75157,-28.37095],[-55.69433,-28.42204],[-55.67047,-28.33218],[-55.77415,-28.27414],[-55.7757,-28.24481],[-55.63167,-28.17719],[-55.60747,-28.11604],[-55.55957,-28.16523],[-55.4952,-28.07682],[-55.44611,-28.09787],[-55.368,-28.029],[-55.38299,-27.97948],[-55.343,-27.972],[-55.32706,-27.92664],[-55.26574,-27.92969],[-55.196,-27.856],[-55.133,-27.897],[-55.106,-27.846],[-55.035,-27.858],[-55.081,-27.779],[-54.936,-27.772],[-54.90617,-27.63871],[-54.85,-27.624],[-54.814,-27.533],[-54.775,-27.586],[-54.67926,-27.57394],[-54.67709,-27.508],[-54.621,-27.541],[-54.574,-27.453],[-54.5246,-27.5059],[-54.444,-27.472],[-54.47081,-27.42674],[-54.41,-27.405],[-54.35466,-27.46528],[-54.34067,-27.40311],[-54.28484,-27.44819],[-54.261,-27.397],[-54.21736,-27.38603],[-54.172,-27.254],[-54.15619,-27.29619],[-54.08872,-27.30149],[-54.01026,-27.19978],[-53.96219,-27.19698],[-53.95195,-27.15169],[-53.79879,-27.14629],[-53.80233,-27.04028],[-53.76087,-27.06543],[-53.78585,-27.02674],[-53.7473,-27.03218],[-53.7092,-26.93414],[-53.67125,-26.94222],[-53.69684,-26.86015],[-53.66059,-26.85814],[-53.75814,-26.72045],[-53.7205,-26.65099],[-53.75864,-26.64113],[-53.63739,-26.24968],[-53.742,-26.108],[-53.73409,-26.04333],[-53.83619,-25.97166],[-53.82214,-25.79377],[-53.89113,-25.62286],[-53.94895,-25.6117],[-53.95638,-25.64628],[-54.01,-25.567],[-54.07592,-25.55766],[-54.098,-25.619],[-54.099,-25.495],[-54.206,-25.541],[-54.178,-25.584],[-54.23,-25.562],[-54.25,-25.597],[-54.28,-25.556],[-54.38395,-25.59747],[-54.43288,-25.69756],[-54.4927,-25.6181],[-54.59354,-25.59275],[-54.61941,-25.45312],[-54.4295,-25.15915],[-54.43548,-24.94769],[-54.32437,-24.66059],[-54.32714,-24.47073],[-54.25877,-24.36377],[-54.34537,-24.14705],[-54.28223,-24.07336],[-54.43984,-23.90446],[-54.66978,-23.81262],[-54.70533,-23.86452],[-54.89,-23.898],[-54.924,-23.959],[-55.06223,-23.99335],[-55.107,-23.961],[-55.22907,-24.01383],[-55.30415,-23.96504],[-55.34542,-23.99458],[-55.41423,-23.9645],[-55.44167,-23.70084],[-55.47306,-23.64834],[-55.53989,-23.625],[-55.52356,-23.19733],[-55.54199,-23.1561],[-55.59635,-23.14993],[-55.66578,-22.85274],[-55.61432,-22.65521],[-55.72364,-22.55166],[-55.74302,-22.39266],[-55.78939,-22.3846],[-55.84304,-22.28725],[-56.20983,-22.27805],[-56.36485,-22.16949],[-56.39404,-22.07434],[-56.50711,-22.09561],[-56.63705,-22.26341],[-56.70344,-22.21693],[-56.72026,-22.26479],[-56.79344,-22.24238],[-56.84285,-22.30155],[-56.88343,-22.24755],[-56.9967,-22.22246],[-57.3744,-22.23204],[-57.5804,-22.17534],[-57.6106,-22.09462],[-57.70751,-22.09111],[-57.80183,-22.15072],[-57.99384,-22.09023],[-58.00946,-22.04038],[-57.91281,-21.88266],[-57.96603,-21.85045],[-57.90866,-21.77355],[-57.94714,-21.74413],[-57.88329,-21.68903],[-57.93436,-21.65037],[-57.91387,-21.59021],[-57.96795,-21.52432],[-57.8535,-21.33109],[-57.92019,-21.27655],[-57.85066,-21.22407],[-57.86834,-21.04417],[-57.81919,-20.94066],[-57.92836,-20.90036],[-57.8552,-20.83403],[-57.89863,-20.78872],[-57.96183,-20.7916],[-57.93478,-20.74565],[-57.86732,-20.73265],[-57.92414,-20.66392],[-57.98848,-20.69879],[-57.99847,-20.43551],[-58.09339,-20.35554],[-58.09596,-20.25445],[-58.16216,-20.25953],[-58.12152,-20.19246],[-58.16932,-20.1694],[-57.95347,-20.02094],[-57.90248,-20.04207],[-57.85796,-19.9703],[-58.131,-19.758],[-57.784,-19.033],[-57.694,-19.011],[-57.719,-18.899],[-57.766,-18.899],[-57.557,-18.24],[-57.453,-18.231],[-57.574,-18.131],[-57.72302,-17.83074],[-57.68472,-17.8306],[-57.70991,-17.72702],[-57.783,-17.639],[-57.73696,-17.5583],[-57.883,-17.449],[-57.996,-17.515],[-58.06,-17.45],[-58.116,-17.451],[-58.151,-17.384],[-58.263,-17.344],[-58.396,-17.181],[-58.423,-16.989],[-58.474,-16.935],[-58.47,-16.703],[-58.436,-16.592],[-58.333,-16.49],[-58.32227,-16.26559],[-58.388,-16.261],[-58.43059,-16.32264],[-60.17335,-16.26672],[-60.238,-15.473],[-60.57543,-15.09677],[-60.244,-15.096],[-60.272,-14.62],[-60.321,-14.608],[-60.492,-14.188],[-60.479,-14.097],[-60.38066,-13.9888],[-60.45062,-13.9364],[-60.45599,-13.85422],[-60.49068,-13.85782],[-60.46776,-13.79446],[-60.76755,-13.68329],[-60.87678,-13.62149],[-60.91857,-13.54334],[-61.0056,-13.552],[-61.0129,-13.48925],[-61.0938,-13.49081],[-61.10314,-13.53056],[-61.18155,-13.50557],[-61.19236,-13.53695],[-61.29954,-13.47718],[-61.46527,-13.55427],[-61.57927,-13.48711],[-61.852,-13.538],[-61.892,-13.431],[-61.96968,-13.40759],[-61.97592,-13.36695],[-62.11498,-13.25932],[-62.115,-13.163],[-62.15254,-13.15993],[-62.16703,-13.11346],[-62.19,-13.153],[-62.214,-13.111],[-62.27269,-13.15687],[-62.39178,-13.13471],[-62.453,-13.064],[-62.612,-13.041],[-62.65,-12.965],[-62.729,-13.02],[-62.779,-13.009],[-62.89672,-12.8539],[-63.01134,-12.83602],[-63.08186,-12.72323],[-63.06163,-12.68584],[-63.15726,-12.6138],[-63.24621,-12.66222],[-63.23713,-12.69043],[-63.30125,-12.68138],[-63.44052,-12.608],[-63.43627,-12.56526],[-63.50641,-12.56562],[-63.55295,-12.50598],[-63.7848,-12.42871],[-63.88957,-12.44745],[-63.89949,-12.50204],[-63.95144,-12.53179],[-64.13464,-12.47732],[-64.16781,-12.51503],[-64.17504,-12.46675],[-64.22945,-12.45419],[-64.29018,-12.50313],[-64.29452,-12.4582],[-64.41057,-12.44436],[-64.51217,-12.3551],[-64.51256,-12.22562],[-64.70406,-12.1827],[-64.70719,-12.08684],[-64.75486,-12.15762],[-64.7688,-12.09356],[-64.83747,-12.11786],[-64.80954,-12.05633],[-64.84077,-12.01027],[-65.03548,-11.99408],[-65.01398,-11.90303],[-65.0727,-11.86587],[-65.08672,-11.7082],[-65.18953,-11.72353],[-65.18216,-11.75609],[-65.2593,-11.71053],[-65.21178,-11.52857],[-65.3074,-11.49957],[-65.33276,-11.33986],[-65.29053,-11.32275],[-65.34347,-11.3082],[-65.35834,-11.26834],[-65.35938,-11.22067],[-65.31294,-11.19578],[-65.35387,-11.18419],[-65.36177,-11.14031],[-65.28269,-11.09009],[-65.30071,-11.03142],[-65.25053,-10.98506],[-65.27476,-10.87302],[-65.35376,-10.78881],[-65.34667,-10.68155],[-65.40569,-10.63935],[-65.43011,-10.48505],[-65.288,-10.219],[-65.333,-9.965],[-65.28588,-9.84413],[-65.39313,-9.68683],[-65.44394,-9.66957],[-65.4883,-9.71015],[-65.55611,-9.84498],[-65.627,-9.83804],[-65.66963,-9.78129],[-65.71023,-9.80857],[-65.68395,-9.74992],[-65.7432,-9.78296],[-65.77013,-9.73442],[-65.79437,-9.79295],[-65.79962,-9.75663],[-65.86532,-9.79533],[-65.87184,-9.75307],[-65.91976,-9.75314],[-65.98222,-9.81011],[-66.151,-9.785],[-66.426,-9.899],[-66.435,-9.866],[-66.61995,-9.89353],[-66.63701,-9.94983],[-66.8751,-10.08268],[-66.9528,-10.18886],[-66.99683,-10.20017],[-67.01537,-10.25919],[-67.17745,-10.33923],[-67.31545,-10.31932],[-67.31155,-10.37716],[-67.40717,-10.37386],[-67.44361,-10.45492],[-67.57925,-10.5028],[-67.64028,-10.59807],[-67.67631,-10.60484],[-67.70825,-10.71083],[-67.86386,-10.64067],[-68.03289,-10.65486],[-68.10456,-10.71426],[-68.10333,-10.77541],[-68.27819,-10.98926],[-68.71576,-11.14483],[-68.75767,-11.00079],[-68.9118,-11.02192],[-69.41453,-10.92575],[-69.73653,-10.97445],[-69.76903,-10.92972],[-69.93442,-10.9219],[-70.15869,-11.04096],[-70.30672,-11.06983],[-70.43675,-11.03923],[-70.53033,-10.93465],[-70.62103,-10.99982],[-70.62338,-9.82054],[-70.53663,-9.76584],[-70.59972,-9.56264],[-70.55282,-9.57093],[-70.56894,-9.53127],[-70.50506,-9.50557],[-70.49665,-9.42489],[-70.59581,-9.4425],[-70.6632,-9.52601],[-70.75067,-9.56043],[-70.79332,-9.63846],[-70.96337,-9.74891],[-70.99391,-9.81721],[-71.13974,-9.85702],[-71.22052,-9.96968],[-72.1804,-9.99967],[-72.15136,-9.79742],[-72.26296,-9.75085],[-72.25282,-9.61633],[-72.28821,-9.60316],[-72.2829,-9.53995],[-72.35688,-9.4946],[-72.51954,-9.49128],[-72.71676,-9.4122],[-73.2038,-9.40715],[-73.07352,-9.23461],[-73.0093,-9.22236],[-73.02612,-9.17786],[-72.9582,-9.14302],[-72.94091,-8.98494],[-72.99931,-8.91778],[-73.05901,-8.90561],[-73.14992,-8.6839],[-73.20907,-8.6857],[-73.28745,-8.61948],[-73.3055,-8.47197],[-73.38956,-8.46878],[-73.41286,-8.41099],[-73.53744,-8.34587],[-73.62739,-8.02187],[-73.73175,-7.9684],[-73.7725,-7.90237],[-73.76164,-7.85803],[-73.69706,-7.86527],[-73.6843,-7.77644],[-73.82217,-7.71788],[-73.99094,-7.53635],[-73.948,-7.52661],[-73.91981,-7.46568],[-73.96394,-7.34764],[-73.87014,-7.37882],[-73.7003,-7.30429],[-73.79842,-7.11306],[-73.71046,-6.84019],[-73.53639,-6.6834],[-73.39115,-6.64193],[-73.35281,-6.59327],[-73.22741,-6.58884],[-73.18797,-6.52302],[-73.13523,-6.51046],[-73.10473,-6.40666],[-73.24664,-6.14963],[-73.23821,-6.04399],[-73.1868,-6.00512],[-73.15207,-5.86796],[-73.05303,-5.79517],[-72.95912,-5.65689],[-72.95888,-5.46613],[-72.86052,-5.27117],[-72.88725,-5.16307],[-72.73986,-5.08859],[-72.72765,-5.05199],[-72.6212,-5.0518],[-72.598,-4.98386],[-72.38202,-4.87296],[-72.36895,-4.80387],[-72.12601,-4.73454],[-72.04335,-4.62384],[-72.00689,-4.64622],[-71.99464,-4.60996],[-71.94743,-4.60877],[-71.91909,-4.5298],[-71.88549,-4.53803],[-71.9073,-4.51644],[-71.76637,-4.50446],[-71.75109,-4.46887],[-71.70817,-4.51165],[-71.65479,-4.47246],[-71.65032,-4.50395],[-71.61548,-4.4687],[-71.6335,-4.51524],[-71.59625,-4.52928],[-71.53703,-4.46442],[-71.49428,-4.48701],[-71.50716,-4.43909],[-71.43438,-4.42882],[-71.42562,-4.47058],[-71.35026,-4.42728],[-71.30752,-4.46288],[-71.32091,-4.42009],[-71.27782,-4.44217],[-71.26975,-4.385],[-71.20263,-4.37987],[-71.19422,-4.42471],[-71.14478,-4.38158],[-71.11491,-4.41119],[-71.10616,-4.37764],[-70.99389,-4.38654],[-70.99595,-4.34632],[-70.9357,-4.38432],[-70.84483,-4.27905],[-70.86447,-4.25245],[-70.81677,-4.23005],[-70.8458,-4.21872],[-70.75901,-4.15944],[-70.68147,-4.20791],[-70.64256,-4.12805],[-70.62521,-4.19151],[-70.56118,-4.1775],[-70.57357,-4.21169],[-70.54796,-4.13671],[-70.51036,-4.14824],[-70.50417,-4.20098],[-70.48535,-4.16132],[-70.43435,-4.16266],[-70.43146,-4.13217],[-70.33892,-4.17997],[-70.32281,-4.14206],[-70.28769,-4.16555],[-70.29141,-4.28709],[-70.21457,-4.29749],[-70.19194,-4.36179],[-70.15508,-4.27308],[-70.11749,-4.28585],[-70.10881,-4.25454],[-70.04189,-4.29409],[-70.07948,-4.31428],[-70.02826,-4.3703],[-69.99182,-4.37482],[-69.94793,-4.23168]],[[-34.00035,-3.76654],[-34.01797,-3.84985],[-34.00664,-3.91809],[-33.98608,-3.95952],[-33.95923,-3.99217],[-33.8921,-4.03653],[-33.81658,-4.05077],[-33.72931,-4.03151],[-33.66638,-3.9838],[-33.62736,-3.9185],[-33.61519,-3.84985],[-33.63239,-3.76864],[-33.68693,-3.69537],[-33.74987,-3.65978],[-33.81658,-3.6489],[-33.89336,-3.66397],[-33.96007,-3.70877],[-34.00035,-3.76654]],[[-32.5538,-4.00884],[-32.59937,-3.9531],[-32.64061,-3.87309],[-32.61755,-3.73712],[-32.58338,-3.70527],[-32.54228,-3.65606],[-32.4592,-3.63029],[-32.35174,-3.63887],[-32.30049,-3.67684],[-32.24749,-3.75266],[-32.23155,-3.81889],[-32.2357,-3.90247],[-32.30194,-3.9883],[-32.42898,-4.0384],[-32.5538,-4.00884]],[[-29.50321,0.79391],[-29.54097,0.8689],[-29.54727,0.92553],[-29.52367,0.99422],[-29.48958,1.06134],[-29.43136,1.10224],[-29.35899,1.1206],[-29.29238,1.11378],[-29.22158,1.0776],[-29.16285,1.00314],[-29.14501,0.92605],[-29.14764,0.88358],[-29.17176,0.8196],[-29.24885,0.74357],[-29.29448,0.72521],[-29.36371,0.71892],[-29.43556,0.73937],[-29.50321,0.79391]],[[-29.09537,-20.42649],[-29.19756,-20.33509],[-29.3343,-20.28932],[-29.46741,-20.3288],[-29.54604,-20.42958],[-29.55396,-20.52706],[-29.51696,-20.62613],[-29.40995,-20.68955],[-29.27599,-20.72578],[-29.15968,-20.66209],[-29.07188,-20.57088],[-28.9712,-20.64769],[-28.83286,-20.69814],[-28.67968,-20.62099],[-28.63549,-20.49284],[-28.63412,-20.47146],[-28.7431,-20.30094],[-28.8683,-20.27288],[-29.0031,-20.32416],[-29.09537,-20.42649]]],terms_text:"IBGE",icon:"https://osmlab.github.io/editor-layer-index/sources/south-america/br/IBGE_Setores_Rurais.png"},{id:"IBGE_BC250_Aglomerado_Rural",name:"IBGE-BC250-Aglomerado Rural Isolado",type:"wms",template:"http://www.geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BC250_Aglomerado_Rural_Isolado_P&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image%2Fpng&TRANSPARENT=TRUE",projection:"EPSG:3857",polygon:[[[-29.3325,2.33596],[-28.72472,2.03155],[-27.76041,-8.93703],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.83894],[-66.52331,-9.98587],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.66908],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.5874],[-73.29207,-9.45415],[-73.0625,-9.01727],[-73.61432,-8.40982],[-74.09056,-7.52755],[-74.03652,-7.27885],[-73.84718,-7.23829],[-73.78618,-6.77487],[-73.22362,-6.43011],[-73.33719,-6.02974],[-72.93016,-5.03871],[-71.93973,-4.42503],[-70.96802,-4.24829],[-70.79598,-4.06493],[-70.02393,-4.16735],[-69.51025,-1.13409],[-69.70776,-0.56762],[-70.13645,-0.22616],[-70.14083,0.5844],[-69.26594,0.8065],[-69.34226,0.96892],[-69.92481,1.01571],[-69.92343,1.77385],[-68.38511,1.82943],[-68.24848,2.11981],[-67.94571,1.94842],[-67.37696,2.32747],[-67.05751,1.85834],[-67.00579,1.2916],[-66.79967,1.31468],[-66.28683,0.85771],[-65.67671,1.11115],[-65.42494,0.96655],[-65.15671,1.24203],[-64.27483,1.60159],[-64.0486,2.06514],[-63.47236,2.27936],[-64.13446,2.43391],[-64.10005,2.72378],[-64.32628,3.11828],[-64.28142,3.54198],[-64.88451,4.11767],[-64.88064,4.34246],[-64.13653,4.22315],[-63.95465,4.02132],[-63.17706,4.0483],[-62.96093,3.76366],[-62.82024,4.10602],[-62.49922,4.27081],[-61.91181,4.26284],[-61.35393,4.6301],[-61.04904,4.62312],[-60.70452,4.96985],[-60.78709,5.29676],[-60.22457,5.37121],[-59.89857,5.10754],[-59.97549,4.60302],[-59.59676,4.43987],[-59.41942,3.96994],[-59.71017,3.54201],[-59.88955,2.72301],[-59.63006,2.31633],[-59.63382,1.96658],[-59.18812,1.47808],[-58.80545,1.32073],[-58.35933,1.68993],[-57.6,1.80391],[-57.39854,2.06512],[-57.12392,2.12876],[-56.02925,1.94945],[-56.23884,2.26335],[-55.98195,2.62866],[-55.64816,2.51995],[-54.93958,2.68251],[-54.24988,2.25056],[-53.73937,2.47373],[-52.98578,2.28049],[-52.65712,2.56407],[-52.41739,3.22121],[-51.73983,4.11916],[-51.7246,4.55687],[-51.0112,5.5229],[-43.48209,5.33583],[-29.3325,2.33596]]],terms_text:"IBGE",overlay:true},{id:"IBGE_BC250_Pista_Pouso",name:"IBGE-BC250-Pista de Pouso",type:"wms",template:"http://geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BC250_Pista_Ponto_Pouso_L&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image%2Fpng&TRANSPARENT=TRUE",projection:"EPSG:3857",polygon:[[[-29.3325,2.33596],[-28.72472,2.03155],[-27.76041,-8.93703],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.83894],[-66.52331,-9.98587],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.66908],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.5874],[-73.29207,-9.45415],[-73.0625,-9.01727],[-73.61432,-8.40982],[-74.09056,-7.52755],[-74.03652,-7.27885],[-73.84718,-7.23829],[-73.78618,-6.77487],[-73.22362,-6.43011],[-73.33719,-6.02974],[-72.93016,-5.03871],[-71.93973,-4.42503],[-70.96802,-4.24829],[-70.79598,-4.06493],[-70.02393,-4.16735],[-69.51025,-1.13409],[-69.70776,-0.56762],[-70.13645,-0.22616],[-70.14083,0.5844],[-69.26594,0.8065],[-69.34226,0.96892],[-69.92481,1.01571],[-69.92343,1.77385],[-68.38511,1.82943],[-68.24848,2.11981],[-67.94571,1.94842],[-67.37696,2.32747],[-67.05751,1.85834],[-67.00579,1.2916],[-66.79967,1.31468],[-66.28683,0.85771],[-65.67671,1.11115],[-65.42494,0.96655],[-65.15671,1.24203],[-64.27483,1.60159],[-64.0486,2.06514],[-63.47236,2.27936],[-64.13446,2.43391],[-64.10005,2.72378],[-64.32628,3.11828],[-64.28142,3.54198],[-64.88451,4.11767],[-64.88064,4.34246],[-64.13653,4.22315],[-63.95465,4.02132],[-63.17706,4.0483],[-62.96093,3.76366],[-62.82024,4.10602],[-62.49922,4.27081],[-61.91181,4.26284],[-61.35393,4.6301],[-61.04904,4.62312],[-60.70452,4.96985],[-60.78709,5.29676],[-60.22457,5.37121],[-59.89857,5.10754],[-59.97549,4.60302],[-59.59676,4.43987],[-59.41942,3.96994],[-59.71017,3.54201],[-59.88955,2.72301],[-59.63006,2.31633],[-59.63382,1.96658],[-59.18812,1.47808],[-58.80545,1.32073],[-58.35933,1.68993],[-57.6,1.80391],[-57.39854,2.06512],[-57.12392,2.12876],[-56.02925,1.94945],[-56.23884,2.26335],[-55.98195,2.62866],[-55.64816,2.51995],[-54.93958,2.68251],[-54.24988,2.25056],[-53.73937,2.47373],[-52.98578,2.28049],[-52.65712,2.56407],[-52.41739,3.22121],[-51.73983,4.11916],[-51.7246,4.55687],[-51.0112,5.5229],[-43.48209,5.33583],[-29.3325,2.33596]]],terms_text:"IBGE",overlay:true},{id:"IBGE_BC250_Rios_Drenagem",name:"IBGE-BC250-Rios Drenagem",type:"wms",template:"http://www.geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BC250_Trecho_Drenagem_L&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image%2Fpng&TRANSPARENT=TRUE",projection:"EPSG:3857",polygon:[[[-29.3325,2.33596],[-28.72472,2.03155],[-27.76041,-8.93703],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.83894],[-66.52331,-9.98587],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.66908],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.5874],[-73.29207,-9.45415],[-73.0625,-9.01727],[-73.61432,-8.40982],[-74.09056,-7.52755],[-74.03652,-7.27885],[-73.84718,-7.23829],[-73.78618,-6.77487],[-73.22362,-6.43011],[-73.33719,-6.02974],[-72.93016,-5.03871],[-71.93973,-4.42503],[-70.96802,-4.24829],[-70.79598,-4.06493],[-70.02393,-4.16735],[-69.51025,-1.13409],[-69.70776,-0.56762],[-70.13645,-0.22616],[-70.14083,0.5844],[-69.26594,0.8065],[-69.34226,0.96892],[-69.92481,1.01571],[-69.92343,1.77385],[-68.38511,1.82943],[-68.24848,2.11981],[-67.94571,1.94842],[-67.37696,2.32747],[-67.05751,1.85834],[-67.00579,1.2916],[-66.79967,1.31468],[-66.28683,0.85771],[-65.67671,1.11115],[-65.42494,0.96655],[-65.15671,1.24203],[-64.27483,1.60159],[-64.0486,2.06514],[-63.47236,2.27936],[-64.13446,2.43391],[-64.10005,2.72378],[-64.32628,3.11828],[-64.28142,3.54198],[-64.88451,4.11767],[-64.88064,4.34246],[-64.13653,4.22315],[-63.95465,4.02132],[-63.17706,4.0483],[-62.96093,3.76366],[-62.82024,4.10602],[-62.49922,4.27081],[-61.91181,4.26284],[-61.35393,4.6301],[-61.04904,4.62312],[-60.70452,4.96985],[-60.78709,5.29676],[-60.22457,5.37121],[-59.89857,5.10754],[-59.97549,4.60302],[-59.59676,4.43987],[-59.41942,3.96994],[-59.71017,3.54201],[-59.88955,2.72301],[-59.63006,2.31633],[-59.63382,1.96658],[-59.18812,1.47808],[-58.80545,1.32073],[-58.35933,1.68993],[-57.6,1.80391],[-57.39854,2.06512],[-57.12392,2.12876],[-56.02925,1.94945],[-56.23884,2.26335],[-55.98195,2.62866],[-55.64816,2.51995],[-54.93958,2.68251],[-54.24988,2.25056],[-53.73937,2.47373],[-52.98578,2.28049],[-52.65712,2.56407],[-52.41739,3.22121],[-51.73983,4.11916],[-51.7246,4.55687],[-51.0112,5.5229],[-43.48209,5.33583],[-29.3325,2.33596]]],terms_text:"IBGE",overlay:true},{id:"IBGE_BC250_Terra_Indegina",name:"IBGE-BC250-Terra Indigena",type:"wms",template:"http://geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BC250_Terra_Indigena_A&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image%2Fpng&TRANSPARENT=TRUE",projection:"EPSG:3857",polygon:[[[-29.3325,2.33596],[-28.72472,2.03155],[-27.76041,-8.93703],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.83894],[-66.52331,-9.98587],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.66908],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.5874],[-73.29207,-9.45415],[-73.0625,-9.01727],[-73.61432,-8.40982],[-74.09056,-7.52755],[-74.03652,-7.27885],[-73.84718,-7.23829],[-73.78618,-6.77487],[-73.22362,-6.43011],[-73.33719,-6.02974],[-72.93016,-5.03871],[-71.93973,-4.42503],[-70.96802,-4.24829],[-70.79598,-4.06493],[-70.02393,-4.16735],[-69.51025,-1.13409],[-69.70776,-0.56762],[-70.13645,-0.22616],[-70.14083,0.5844],[-69.26594,0.8065],[-69.34226,0.96892],[-69.92481,1.01571],[-69.92343,1.77385],[-68.38511,1.82943],[-68.24848,2.11981],[-67.94571,1.94842],[-67.37696,2.32747],[-67.05751,1.85834],[-67.00579,1.2916],[-66.79967,1.31468],[-66.28683,0.85771],[-65.67671,1.11115],[-65.42494,0.96655],[-65.15671,1.24203],[-64.27483,1.60159],[-64.0486,2.06514],[-63.47236,2.27936],[-64.13446,2.43391],[-64.10005,2.72378],[-64.32628,3.11828],[-64.28142,3.54198],[-64.88451,4.11767],[-64.88064,4.34246],[-64.13653,4.22315],[-63.95465,4.02132],[-63.17706,4.0483],[-62.96093,3.76366],[-62.82024,4.10602],[-62.49922,4.27081],[-61.91181,4.26284],[-61.35393,4.6301],[-61.04904,4.62312],[-60.70452,4.96985],[-60.78709,5.29676],[-60.22457,5.37121],[-59.89857,5.10754],[-59.97549,4.60302],[-59.59676,4.43987],[-59.41942,3.96994],[-59.71017,3.54201],[-59.88955,2.72301],[-59.63006,2.31633],[-59.63382,1.96658],[-59.18812,1.47808],[-58.80545,1.32073],[-58.35933,1.68993],[-57.6,1.80391],[-57.39854,2.06512],[-57.12392,2.12876],[-56.02925,1.94945],[-56.23884,2.26335],[-55.98195,2.62866],[-55.64816,2.51995],[-54.93958,2.68251],[-54.24988,2.25056],[-53.73937,2.47373],[-52.98578,2.28049],[-52.65712,2.56407],[-52.41739,3.22121],[-51.73983,4.11916],[-51.7246,4.55687],[-51.0112,5.5229],[-43.48209,5.33583],[-29.3325,2.33596]]],terms_text:"IBGE",overlay:true},{id:"IBGE_BC250_Rodoviario",name:"IBGE-BC250-Trecho Rodoviario",type:"wms",template:"http://geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BC250_Trecho_Rodoviario_L&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image/png&TRANSPARENT=TRUE",projection:"EPSG:3857",polygon:[[[-29.3325,2.33596],[-28.72472,2.03155],[-27.76041,-8.93703],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.83894],[-66.52331,-9.98587],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.66908],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.5874],[-73.29207,-9.45415],[-73.0625,-9.01727],[-73.61432,-8.40982],[-74.09056,-7.52755],[-74.03652,-7.27885],[-73.84718,-7.23829],[-73.78618,-6.77487],[-73.22362,-6.43011],[-73.33719,-6.02974],[-72.93016,-5.03871],[-71.93973,-4.42503],[-70.96802,-4.24829],[-70.79598,-4.06493],[-70.02393,-4.16735],[-69.51025,-1.13409],[-69.70776,-0.56762],[-70.13645,-0.22616],[-70.14083,0.5844],[-69.26594,0.8065],[-69.34226,0.96892],[-69.92481,1.01571],[-69.92343,1.77385],[-68.38511,1.82943],[-68.24848,2.11981],[-67.94571,1.94842],[-67.37696,2.32747],[-67.05751,1.85834],[-67.00579,1.2916],[-66.79967,1.31468],[-66.28683,0.85771],[-65.67671,1.11115],[-65.42494,0.96655],[-65.15671,1.24203],[-64.27483,1.60159],[-64.0486,2.06514],[-63.47236,2.27936],[-64.13446,2.43391],[-64.10005,2.72378],[-64.32628,3.11828],[-64.28142,3.54198],[-64.88451,4.11767],[-64.88064,4.34246],[-64.13653,4.22315],[-63.95465,4.02132],[-63.17706,4.0483],[-62.96093,3.76366],[-62.82024,4.10602],[-62.49922,4.27081],[-61.91181,4.26284],[-61.35393,4.6301],[-61.04904,4.62312],[-60.70452,4.96985],[-60.78709,5.29676],[-60.22457,5.37121],[-59.89857,5.10754],[-59.97549,4.60302],[-59.59676,4.43987],[-59.41942,3.96994],[-59.71017,3.54201],[-59.88955,2.72301],[-59.63006,2.31633],[-59.63382,1.96658],[-59.18812,1.47808],[-58.80545,1.32073],[-58.35933,1.68993],[-57.6,1.80391],[-57.39854,2.06512],[-57.12392,2.12876],[-56.02925,1.94945],[-56.23884,2.26335],[-55.98195,2.62866],[-55.64816,2.51995],[-54.93958,2.68251],[-54.24988,2.25056],[-53.73937,2.47373],[-52.98578,2.28049],[-52.65712,2.56407],[-52.41739,3.22121],[-51.73983,4.11916],[-51.7246,4.55687],[-51.0112,5.5229],[-43.48209,5.33583],[-29.3325,2.33596]]],terms_text:"IBGE",overlay:true},{id:"IBGE_BC250_Uso_Sustentavel",name:"IBGE-BC250-Unidade de Uso Sistentável - APA",type:"wms",template:"http://geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BC250_Unidade_Uso_Sustentavel_A&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image%2Fpng&TRANSPARENT=TRUE",projection:"EPSG:3857",polygon:[[[-29.3325,2.33596],[-28.72472,2.03155],[-27.76041,-8.93703],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.83894],[-66.52331,-9.98587],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.66908],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.5874],[-73.29207,-9.45415],[-73.0625,-9.01727],[-73.61432,-8.40982],[-74.09056,-7.52755],[-74.03652,-7.27885],[-73.84718,-7.23829],[-73.78618,-6.77487],[-73.22362,-6.43011],[-73.33719,-6.02974],[-72.93016,-5.03871],[-71.93973,-4.42503],[-70.96802,-4.24829],[-70.79598,-4.06493],[-70.02393,-4.16735],[-69.51025,-1.13409],[-69.70776,-0.56762],[-70.13645,-0.22616],[-70.14083,0.5844],[-69.26594,0.8065],[-69.34226,0.96892],[-69.92481,1.01571],[-69.92343,1.77385],[-68.38511,1.82943],[-68.24848,2.11981],[-67.94571,1.94842],[-67.37696,2.32747],[-67.05751,1.85834],[-67.00579,1.2916],[-66.79967,1.31468],[-66.28683,0.85771],[-65.67671,1.11115],[-65.42494,0.96655],[-65.15671,1.24203],[-64.27483,1.60159],[-64.0486,2.06514],[-63.47236,2.27936],[-64.13446,2.43391],[-64.10005,2.72378],[-64.32628,3.11828],[-64.28142,3.54198],[-64.88451,4.11767],[-64.88064,4.34246],[-64.13653,4.22315],[-63.95465,4.02132],[-63.17706,4.0483],[-62.96093,3.76366],[-62.82024,4.10602],[-62.49922,4.27081],[-61.91181,4.26284],[-61.35393,4.6301],[-61.04904,4.62312],[-60.70452,4.96985],[-60.78709,5.29676],[-60.22457,5.37121],[-59.89857,5.10754],[-59.97549,4.60302],[-59.59676,4.43987],[-59.41942,3.96994],[-59.71017,3.54201],[-59.88955,2.72301],[-59.63006,2.31633],[-59.63382,1.96658],[-59.18812,1.47808],[-58.80545,1.32073],[-58.35933,1.68993],[-57.6,1.80391],[-57.39854,2.06512],[-57.12392,2.12876],[-56.02925,1.94945],[-56.23884,2.26335],[-55.98195,2.62866],[-55.64816,2.51995],[-54.93958,2.68251],[-54.24988,2.25056],[-53.73937,2.47373],[-52.98578,2.28049],[-52.65712,2.56407],[-52.41739,3.22121],[-51.73983,4.11916],[-51.7246,4.55687],[-51.0112,5.5229],[-43.48209,5.33583],[-29.3325,2.33596]]],terms_text:"IBGE",overlay:true},{id:"IBGE_BC250_Villa",name:"IBGE-BC250-Villa",type:"wms",template:"http://geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BC250_Vila_P&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image%2Fpng&TRANSPARENT=TRUE",projection:"EPSG:3857",polygon:[[[-29.3325,2.33596],[-28.72472,2.03155],[-27.76041,-8.93703],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.83894],[-66.52331,-9.98587],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.66908],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.5874],[-73.29207,-9.45415],[-73.0625,-9.01727],[-73.61432,-8.40982],[-74.09056,-7.52755],[-74.03652,-7.27885],[-73.84718,-7.23829],[-73.78618,-6.77487],[-73.22362,-6.43011],[-73.33719,-6.02974],[-72.93016,-5.03871],[-71.93973,-4.42503],[-70.96802,-4.24829],[-70.79598,-4.06493],[-70.02393,-4.16735],[-69.51025,-1.13409],[-69.70776,-0.56762],[-70.13645,-0.22616],[-70.14083,0.5844],[-69.26594,0.8065],[-69.34226,0.96892],[-69.92481,1.01571],[-69.92343,1.77385],[-68.38511,1.82943],[-68.24848,2.11981],[-67.94571,1.94842],[-67.37696,2.32747],[-67.05751,1.85834],[-67.00579,1.2916],[-66.79967,1.31468],[-66.28683,0.85771],[-65.67671,1.11115],[-65.42494,0.96655],[-65.15671,1.24203],[-64.27483,1.60159],[-64.0486,2.06514],[-63.47236,2.27936],[-64.13446,2.43391],[-64.10005,2.72378],[-64.32628,3.11828],[-64.28142,3.54198],[-64.88451,4.11767],[-64.88064,4.34246],[-64.13653,4.22315],[-63.95465,4.02132],[-63.17706,4.0483],[-62.96093,3.76366],[-62.82024,4.10602],[-62.49922,4.27081],[-61.91181,4.26284],[-61.35393,4.6301],[-61.04904,4.62312],[-60.70452,4.96985],[-60.78709,5.29676],[-60.22457,5.37121],[-59.89857,5.10754],[-59.97549,4.60302],[-59.59676,4.43987],[-59.41942,3.96994],[-59.71017,3.54201],[-59.88955,2.72301],[-59.63006,2.31633],[-59.63382,1.96658],[-59.18812,1.47808],[-58.80545,1.32073],[-58.35933,1.68993],[-57.6,1.80391],[-57.39854,2.06512],[-57.12392,2.12876],[-56.02925,1.94945],[-56.23884,2.26335],[-55.98195,2.62866],[-55.64816,2.51995],[-54.93958,2.68251],[-54.24988,2.25056],[-53.73937,2.47373],[-52.98578,2.28049],[-52.65712,2.56407],[-52.41739,3.22121],[-51.73983,4.11916],[-51.7246,4.55687],[-51.0112,5.5229],[-43.48209,5.33583],[-29.3325,2.33596]]],terms_text:"IBGE",overlay:true},{id:"IBGE_BCIM_Gerador_Eletrica",name:"IBGE-BCIM-Estações Geradora de Energia Elétrica",type:"wms",template:"http://www.geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BCIM_Est_Gerad_Energia_Eletrica_P&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image%2Fpng&TRANSPARENT=TRUE",projection:"EPSG:3857",polygon:[[[-29.3325,2.33596],[-28.72472,2.03155],[-27.76041,-8.93703],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.83894],[-66.52331,-9.98587],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.66908],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.5874],[-73.29207,-9.45415],[-73.0625,-9.01727],[-73.61432,-8.40982],[-74.09056,-7.52755],[-74.03652,-7.27885],[-73.84718,-7.23829],[-73.78618,-6.77487],[-73.22362,-6.43011],[-73.33719,-6.02974],[-72.93016,-5.03871],[-71.93973,-4.42503],[-70.96802,-4.24829],[-70.79598,-4.06493],[-70.02393,-4.16735],[-69.51025,-1.13409],[-69.70776,-0.56762],[-70.13645,-0.22616],[-70.14083,0.5844],[-69.26594,0.8065],[-69.34226,0.96892],[-69.92481,1.01571],[-69.92343,1.77385],[-68.38511,1.82943],[-68.24848,2.11981],[-67.94571,1.94842],[-67.37696,2.32747],[-67.05751,1.85834],[-67.00579,1.2916],[-66.79967,1.31468],[-66.28683,0.85771],[-65.67671,1.11115],[-65.42494,0.96655],[-65.15671,1.24203],[-64.27483,1.60159],[-64.0486,2.06514],[-63.47236,2.27936],[-64.13446,2.43391],[-64.10005,2.72378],[-64.32628,3.11828],[-64.28142,3.54198],[-64.88451,4.11767],[-64.88064,4.34246],[-64.13653,4.22315],[-63.95465,4.02132],[-63.17706,4.0483],[-62.96093,3.76366],[-62.82024,4.10602],[-62.49922,4.27081],[-61.91181,4.26284],[-61.35393,4.6301],[-61.04904,4.62312],[-60.70452,4.96985],[-60.78709,5.29676],[-60.22457,5.37121],[-59.89857,5.10754],[-59.97549,4.60302],[-59.59676,4.43987],[-59.41942,3.96994],[-59.71017,3.54201],[-59.88955,2.72301],[-59.63006,2.31633],[-59.63382,1.96658],[-59.18812,1.47808],[-58.80545,1.32073],[-58.35933,1.68993],[-57.6,1.80391],[-57.39854,2.06512],[-57.12392,2.12876],[-56.02925,1.94945],[-56.23884,2.26335],[-55.98195,2.62866],[-55.64816,2.51995],[-54.93958,2.68251],[-54.24988,2.25056],[-53.73937,2.47373],[-52.98578,2.28049],[-52.65712,2.56407],[-52.41739,3.22121],[-51.73983,4.11916],[-51.7246,4.55687],[-51.0112,5.5229],[-43.48209,5.33583],[-29.3325,2.33596]]],terms_text:"IBGE",overlay:true},{id:"IBGE_BCIM_Municipio",name:"IBGE-BCIM-Município",type:"wms",template:"http://www.geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BCIM_Municipio_A&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image%2Fpng&TRANSPARENT=TRUE",projection:"EPSG:3857",polygon:[[[-29.3325,2.33596],[-28.72472,2.03155],[-27.76041,-8.93703],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.83894],[-66.52331,-9.98587],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.66908],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.5874],[-73.29207,-9.45415],[-73.0625,-9.01727],[-73.61432,-8.40982],[-74.09056,-7.52755],[-74.03652,-7.27885],[-73.84718,-7.23829],[-73.78618,-6.77487],[-73.22362,-6.43011],[-73.33719,-6.02974],[-72.93016,-5.03871],[-71.93973,-4.42503],[-70.96802,-4.24829],[-70.79598,-4.06493],[-70.02393,-4.16735],[-69.51025,-1.13409],[-69.70776,-0.56762],[-70.13645,-0.22616],[-70.14083,0.5844],[-69.26594,0.8065],[-69.34226,0.96892],[-69.92481,1.01571],[-69.92343,1.77385],[-68.38511,1.82943],[-68.24848,2.11981],[-67.94571,1.94842],[-67.37696,2.32747],[-67.05751,1.85834],[-67.00579,1.2916],[-66.79967,1.31468],[-66.28683,0.85771],[-65.67671,1.11115],[-65.42494,0.96655],[-65.15671,1.24203],[-64.27483,1.60159],[-64.0486,2.06514],[-63.47236,2.27936],[-64.13446,2.43391],[-64.10005,2.72378],[-64.32628,3.11828],[-64.28142,3.54198],[-64.88451,4.11767],[-64.88064,4.34246],[-64.13653,4.22315],[-63.95465,4.02132],[-63.17706,4.0483],[-62.96093,3.76366],[-62.82024,4.10602],[-62.49922,4.27081],[-61.91181,4.26284],[-61.35393,4.6301],[-61.04904,4.62312],[-60.70452,4.96985],[-60.78709,5.29676],[-60.22457,5.37121],[-59.89857,5.10754],[-59.97549,4.60302],[-59.59676,4.43987],[-59.41942,3.96994],[-59.71017,3.54201],[-59.88955,2.72301],[-59.63006,2.31633],[-59.63382,1.96658],[-59.18812,1.47808],[-58.80545,1.32073],[-58.35933,1.68993],[-57.6,1.80391],[-57.39854,2.06512],[-57.12392,2.12876],[-56.02925,1.94945],[-56.23884,2.26335],[-55.98195,2.62866],[-55.64816,2.51995],[-54.93958,2.68251],[-54.24988,2.25056],[-53.73937,2.47373],[-52.98578,2.28049],[-52.65712,2.56407],[-52.41739,3.22121],[-51.73983,4.11916],[-51.7246,4.55687],[-51.0112,5.5229],[-43.48209,5.33583],[-29.3325,2.33596]]],terms_text:"IBGE",overlay:true},{id:"ign-topografico-tms",name:"IGN topographical map (TMS)",type:"tms",template:"https://ide.ign.gob.ar/geoservicios/rest/services/Mapas_IGN/mapa_topografico/MapServer/tile/{zoom}/{y}/{x}",zoomExtent:[1,20],polygon:[[[-55.5438,-35.77219],[-64.31743,-49.44788],[-61.52546,-55.68296],[-66.04226,-55.24192],[-66.6896,-55.17191],[-66.86233,-55.04496],[-67.23387,-54.9245],[-67.47633,-54.92785],[-67.71808,-54.91261],[-67.96138,-54.88571],[-68.18753,-54.89288],[-68.61804,-54.92151],[-68.66375,-52.66716],[-68.51023,-52.39432],[-70.01629,-52.05707],[-72.05562,-52.01749],[-72.09055,-51.93758],[-72.02273,-51.88832],[-72.49598,-51.597],[-72.3623,-51.25935],[-72.46252,-51.08654],[-72.31217,-50.90093],[-72.39293,-50.69005],[-72.49148,-50.66866],[-72.59646,-50.73916],[-72.76983,-50.68829],[-73.22154,-50.87193],[-73.22709,-50.66897],[-73.39438,-50.58008],[-73.57703,-50.15788],[-73.53993,-50.01443],[-73.61453,-49.91795],[-73.52684,-49.7716],[-73.02779,-49.70085],[-73.02788,-49.23743],[-73.16148,-49.13062],[-72.96385,-48.89084],[-72.80952,-48.90039],[-72.59462,-48.77255],[-72.63621,-48.45823],[-72.46698,-48.45706],[-72.42158,-48.31422],[-72.3428,-48.29046],[-72.37166,-48.15995],[-72.57678,-47.96054],[-72.5731,-47.72062],[-72.3839,-47.57888],[-72.38448,-47.41759],[-72.07162,-47.2755],[-72.04726,-47.14867],[-71.93566,-47.15037],[-72.00956,-47.08473],[-72.00759,-46.78833],[-71.71488,-46.64453],[-71.7985,-46.26925],[-71.97019,-46.14972],[-71.63332,-45.97063],[-71.66595,-45.89232],[-71.77408,-45.85187],[-71.8548,-45.61169],[-71.7885,-45.50505],[-71.58354,-45.45607],[-71.58236,-45.36316],[-71.40574,-45.27206],[-71.61593,-45.03146],[-72.07949,-44.93988],[-72.11766,-44.73884],[-71.47444,-44.68048],[-71.2897,-44.75036],[-71.28469,-44.60892],[-71.20209,-44.5359],[-71.40536,-44.44891],[-71.86374,-44.44274],[-71.9047,-44.10354],[-71.70007,-43.98287],[-71.78725,-43.80985],[-71.63263,-43.65888],[-71.87866,-43.56195],[-71.95542,-43.44292],[-71.91512,-43.319],[-71.80268,-43.29535],[-71.73869,-43.19234],[-71.94149,-43.11061],[-72.18001,-42.8948],[-72.18733,-42.66619],[-72.06314,-42.53751],[-72.0441,-42.41231],[-72.14365,-42.40333],[-72.20024,-42.17229],[-72.17802,-42.13207],[-72.06032,-42.10593],[-71.78041,-42.12128],[-71.83133,-41.78089],[-71.94135,-41.60926],[-71.9023,-41.06778],[-72.02097,-40.73647],[-71.91507,-40.61832],[-71.87117,-40.38959],[-71.76665,-40.35676],[-71.87961,-40.24227],[-71.8856,-40.10093],[-71.67779,-39.92156],[-71.74365,-39.86164],[-71.77001,-39.61946],[-71.68665,-39.50983],[-71.58545,-39.55159],[-71.45202,-39.31025],[-71.47673,-38.89162],[-71.25594,-38.74909],[-70.95844,-38.70272],[-70.89411,-38.57644],[-71.03346,-38.45451],[-71.08724,-38.09054],[-71.23505,-37.86541],[-71.26668,-37.68295],[-71.18031,-37.4828],[-71.27241,-37.28686],[-71.17697,-37.1077],[-71.27586,-36.9637],[-71.20495,-36.91075],[-71.2345,-36.83303],[-71.07654,-36.43571],[-70.96469,-36.43366],[-70.90086,-36.34336],[-70.77062,-36.35412],[-70.59553,-36.12118],[-70.44219,-36.14876],[-70.42788,-35.73781],[-70.50607,-35.38014],[-70.59764,-35.34459],[-70.63128,-35.23712],[-70.42629,-35.12462],[-70.32933,-34.83081],[-70.35687,-34.72532],[-70.07752,-34.38253],[-70.06901,-34.24694],[-69.87771,-34.20233],[-69.95948,-33.77235],[-69.83371,-33.34911],[-70.02502,-33.37388],[-70.14906,-33.04145],[-70.06223,-33.01233],[-70.00981,-32.90747],[-70.19517,-32.75732],[-70.19589,-32.50891],[-70.28486,-32.45564],[-70.44343,-32.05325],[-70.41077,-31.9809],[-70.29402,-31.95849],[-70.5117,-31.85844],[-70.62295,-31.59949],[-70.59941,-31.29869],[-70.5377,-31.08557],[-70.35748,-31.0002],[-70.20264,-30.32249],[-69.97775,-30.32288],[-69.847,-30.16294],[-70.01824,-30.10003],[-69.95038,-29.73744],[-70.03755,-29.35428],[-69.97565,-29.18743],[-69.85112,-29.06923],[-69.70118,-28.37779],[-69.20484,-27.90816],[-68.84844,-27.13115],[-68.76133,-27.08588],[-68.60693,-27.09636],[-68.3489,-26.92771],[-68.64137,-26.50722],[-68.60352,-26.25391],[-68.45177,-26.1377],[-68.63052,-25.43524],[-68.55582,-25.14476],[-68.44595,-25.0658],[-68.62011,-24.81717],[-68.55162,-24.58836],[-68.28078,-24.34935],[-67.32648,-24.02538],[-66.99882,-23.00044],[-67.18775,-22.81375],[-67.08088,-22.62433],[-67.03366,-22.53815],[-66.84345,-22.39746],[-66.73734,-22.22282],[-66.38248,-22.07602],[-66.28978,-21.76554],[-66.21845,-21.72575],[-65.89675,-21.88263],[-65.71368,-22.09054],[-65.61493,-22.09152],[-65.60973,-22.09505],[-65.60607,-22.09358],[-65.60256,-22.09658],[-65.60015,-22.09543],[-65.59229,-22.09511],[-65.59015,-22.09735],[-65.58691,-22.09645],[-65.58512,-22.08432],[-65.57523,-22.07312],[-65.47487,-22.08487],[-64.99026,-22.06739],[-64.59768,-22.19269],[-64.52643,-22.29504],[-64.33114,-22.68517],[-64.10381,-22.34114],[-64.10712,-22.32023],[-64.06522,-22.23093],[-64.04702,-22.23757],[-64.03654,-22.19469],[-64.0029,-22.10735],[-63.99022,-22.07925],[-63.97147,-22.07619],[-63.94118,-21.99823],[-63.70932,-21.99896],[-63.68839,-22.01037],[-63.68079,-22.03116],[-63.68507,-22.04019],[-63.68156,-22.05185],[-63.67659,-22.03287],[-63.67201,-22.02293],[-63.66821,-22.01634],[-63.67191,-22.01399],[-63.66566,-21.99839],[-62.79606,-21.98778],[-62.74618,-22.10033],[-62.18511,-22.50843],[-61.93761,-22.97376],[-61.45605,-23.36182],[-61.05842,-23.56621],[-60.95137,-23.75997],[-60.28746,-24.01906],[-60.03728,-24.00408],[-59.46607,-24.33428],[-59.12256,-24.59772],[-58.46645,-24.84584],[-58.332,-24.98132],[-58.2349,-24.91756],[-57.8565,-25.08005],[-57.76981,-25.15013],[-57.75374,-25.17277],[-57.71597,-25.26456],[-57.71837,-25.27146],[-57.71111,-25.27265],[-57.71008,-25.28146],[-57.70692,-25.2845],[-57.70438,-25.28159],[-57.70273,-25.28239],[-57.70175,-25.28459],[-57.69741,-25.28283],[-57.69281,-25.28588],[-57.69733,-25.29337],[-57.70246,-25.29847],[-57.69612,-25.30832],[-57.69763,-25.3199],[-57.69143,-25.32127],[-57.67993,-25.33318],[-57.64822,-25.3679],[-57.63902,-25.38287],[-57.61504,-25.38841],[-57.59954,-25.39704],[-57.57673,-25.42029],[-57.56698,-25.43147],[-57.55477,-25.43999],[-57.55285,-25.44705],[-57.55811,-25.45717],[-57.55763,-25.46897],[-57.56523,-25.48014],[-57.56806,-25.49501],[-57.57722,-25.50575],[-57.57566,-25.52264],[-57.5661,-25.54112],[-57.56809,-25.55797],[-57.58142,-25.57145],[-57.59952,-25.57438],[-57.60444,-25.59855],[-57.6122,-25.61963],[-57.6367,-25.61807],[-57.66569,-25.60273],[-57.67006,-25.65579],[-57.67513,-25.66052],[-57.68626,-25.66287],[-57.69808,-25.65933],[-57.71855,-25.64914],[-57.72537,-25.71924],[-57.77786,-25.77559],[-57.84986,-26.01142],[-58.08597,-26.14202],[-58.13896,-26.66834],[-58.28224,-26.80127],[-58.32056,-26.82169],[-58.3167,-26.86081],[-58.32384,-26.87074],[-58.56858,-27.20629],[-57.90834,-27.24265],[-56.99114,-27.41858],[-56.60886,-27.36586],[-56.40607,-27.52701],[-56.32355,-27.36897],[-56.09353,-27.25219],[-55.76168,-27.38106],[-55.65541,-27.30153],[-55.67524,-27.17004],[-55.59643,-27.06538],[-55.40826,-26.91763],[-55.20788,-26.89214],[-54.97304,-26.63717],[-54.8532,-26.59894],[-54.72264,-26.31238],[-54.73235,-25.98554],[-54.65309,-25.84138],[-54.71357,-25.66721],[-54.62995,-25.55106],[-54.44288,-25.5795],[-54.11451,-25.4396],[-53.80059,-25.65093],[-53.766,-25.94301],[-53.59024,-26.19274],[-53.67264,-26.61495],[-53.61669,-26.95395],[-53.76351,-27.18917],[-54.15393,-27.36033],[-54.26461,-27.49923],[-54.79439,-27.6397],[-55.0044,-27.90341],[-55.19076,-27.92946],[-55.41589,-28.14304],[-55.66542,-28.26547],[-55.61633,-28.32205],[-55.65957,-28.46539],[-55.83413,-28.42136],[-55.87339,-28.49468],[-56.13558,-28.7265],[-56.37343,-29.10817],[-56.569,-29.13892],[-56.76306,-29.48638],[-57.05958,-29.72263],[-57.24463,-29.86452],[-57.3045,-30.03966],[-57.61942,-30.20517],[-57.60863,-30.32424],[-57.82983,-30.53118],[-57.75241,-30.68756],[-57.75273,-30.91942],[-57.93419,-31.27388],[-57.99,-31.36053],[-57.98302,-31.3734],[-57.97736,-31.38022],[-57.97778,-31.38599],[-57.98203,-31.39213],[-58.00944,-31.41341],[-58.06637,-31.47395],[-57.92613,-31.57745],[-57.98622,-31.77449],[-58.12179,-31.89772],[-58.11905,-32.14059],[-58.04227,-32.29153],[-58.14327,-32.45845],[-58.0758,-33.00587],[-58.18964,-33.09402],[-58.2723,-33.1061],[-58.31012,-33.1048],[-58.35418,-33.1221],[-58.37567,-33.17644],[-58.44465,-33.5853],[-58.43016,-33.71813],[-58.42434,-33.86887],[-58.41858,-33.91742],[-58.33697,-34.00477],[-58.241,-34.16246],[-57.84696,-34.50017],[-55.5438,-35.77219]]],terms_url:"http://www.ign.gob.ar/",terms_text:"Instituto Geográfico Nacional de la República Argentina",icon:"http://www.ign.gob.ar/sites/default/files/favicon.png"},{id:"Haiti-Drone",name:"Imagerie Drone (Haiti)",type:"tms",template:"http://wms.openstreetmap.fr/tms/1.0.0/iomhaiti/{zoom}/{x}/{y}",zoomExtent:[0,21],polygon:[[[-72.15474,19.6879],[-72.15458,19.6878],[-72.15485,19.68776],[-72.15472,19.68685],[-72.15431,19.68707],[-72.15463,19.68544],[-72.15301,19.68499],[-72.15086,19.68435],[-72.15045,19.68479],[-72.15078,19.68315],[-72.15223,19.6833],[-72.15282,19.68066],[-72.15186,19.68051],[-72.15191,19.68034],[-72.15227,19.68035],[-72.15238,19.67972],[-72.15328,19.67965],[-72.15333,19.67698],[-72.15308,19.67694],[-72.15348,19.67638],[-72.14878,19.67107],[-72.13664,19.67081],[-72.13557,19.67408],[-72.13573,19.68351],[-72.13679,19.68407],[-72.13695,19.68559],[-72.13778,19.685],[-72.13782,19.68727],[-72.13888,19.68767],[-72.13881,19.69013],[-72.13853,19.68949],[-72.13806,19.68964],[-72.13869,19.69232],[-72.13825,19.69276],[-72.13948,19.69737],[-72.14101,19.7],[-72.1437,19.70112],[-72.14851,19.70015],[-72.14772,19.70268],[-72.14874,19.7029],[-72.1616,19.70357],[-72.16578,19.698],[-72.165,19.69324],[-72.16223,19.68901],[-72.15474,19.6879]],[[-72.13106,19.67189],[-72.12598,19.67728],[-72.12554,19.67762],[-72.12169,19.67764],[-72.11497,19.6726],[-72.11527,19.66872],[-72.11982,19.66275],[-72.12278,19.66257],[-72.1249,19.6627],[-72.12858,19.66454],[-72.13081,19.66617],[-72.13167,19.66879],[-72.13156,19.671],[-72.13106,19.67189]],[[-71.84579,19.67098],[-71.84294,19.67595],[-71.841,19.67595],[-71.83802,19.67553],[-71.83787,19.6745],[-71.83905,19.67439],[-71.83901,19.67411],[-71.83984,19.67395],[-71.83891,19.67361],[-71.83802,19.67209],[-71.83801,19.67263],[-71.83767,19.67272],[-71.83763,19.67254],[-71.83544,19.67321],[-71.83533,19.673],[-71.83312,19.67346],[-71.83267,19.67168],[-71.83216,19.67209],[-71.83072,19.66949],[-71.8306,19.66976],[-71.83022,19.66989],[-71.82918,19.66721],[-71.82907,19.66721],[-71.82891,19.66679],[-71.82895,19.66662],[-71.82883,19.66635],[-71.82856,19.66648],[-71.82887,19.66725],[-71.82876,19.66741],[-71.8278,19.66782],[-71.82771,19.66786],[-71.82783,19.66796],[-71.82718,19.66812],[-71.82718,19.66809],[-71.82644,19.66839],[-71.82641,19.66832],[-71.8262,19.66843],[-71.82618,19.66836],[-71.82589,19.66842],[-71.82589,19.66866],[-71.82516,19.66875],[-71.82545,19.66916],[-71.82293,19.66957],[-71.82271,19.66967],[-71.82277,19.66976],[-71.82018,19.67099],[-71.81985,19.67045],[-71.8198,19.6706],[-71.81947,19.67076],[-71.81825,19.67134],[-71.81814,19.67114],[-71.81758,19.67143],[-71.81696,19.67077],[-71.81764,19.6719],[-71.81714,19.67204],[-71.81582,19.6718],[-71.81384,19.67119],[-71.81233,19.6707],[-71.81218,19.67043],[-71.81243,19.67015],[-71.81192,19.67001],[-71.81188,19.67058],[-71.81117,19.67035],[-71.80959,19.66985],[-71.8078,19.66928],[-71.8056,19.66861],[-71.80514,19.66689],[-71.80512,19.66523],[-71.80523,19.66198],[-71.80656,19.65239],[-71.80734,19.64829],[-71.80997,19.64683],[-71.81475,19.64545],[-71.81477,19.64556],[-71.815,19.64551],[-71.81495,19.64538],[-71.81599,19.64502],[-71.81589,19.64489],[-71.81659,19.64461],[-71.81901,19.6438],[-71.82115,19.64345],[-71.82216,19.64333],[-71.8269,19.64321],[-71.82805,19.64322],[-71.83045,19.64408],[-71.83064,19.64486],[-71.82953,19.64504],[-71.82961,19.64561],[-71.82994,19.64557],[-71.83037,19.64517],[-71.83047,19.64535],[-71.83081,19.6452],[-71.83102,19.64511],[-71.83125,19.64585],[-71.83111,19.64582],[-71.83137,19.64659],[-71.83289,19.64619],[-71.83446,19.64571],[-71.83447,19.64631],[-71.83422,19.64619],[-71.8342,19.64655],[-71.83467,19.6463],[-71.83491,19.64639],[-71.8348,19.64622],[-71.83544,19.64585],[-71.8355,19.6458],[-71.83647,19.64613],[-71.83764,19.64727],[-71.83791,19.64789],[-71.83905,19.6508],[-71.84569,19.66962],[-71.84579,19.67098]],[[-72.09888,18.54843],[-72.09907,18.54838],[-72.09991,18.54809],[-72.10234,18.54813],[-72.10252,18.54814],[-72.10229,18.54826],[-72.10229,18.54828],[-72.10256,18.54815],[-72.10272,18.54814],[-72.10343,18.54871],[-72.10354,18.5489],[-72.10352,18.54974],[-72.10349,18.54974],[-72.10351,18.55003],[-72.10285,18.55018],[-72.1029,18.55025],[-72.10287,18.55031],[-72.10352,18.55024],[-72.1035,18.55152],[-72.10338,18.55152],[-72.10308,18.55161],[-72.10348,18.55162],[-72.10342,18.55435],[-72.10243,18.5555],[-72.10149,18.55562],[-72.10062,18.55559],[-72.0979,18.55521],[-72.09688,18.55466],[-72.09652,18.55421],[-72.09661,18.55417],[-72.09651,18.55417],[-72.09654,18.55398],[-72.09644,18.55355],[-72.09628,18.55357],[-72.09621,18.5532],[-72.09599,18.55337],[-72.09564,18.55267],[-72.09556,18.55185],[-72.09685,18.55035],[-72.09729,18.55032],[-72.09699,18.5502],[-72.09888,18.54843]],[[-72.25425,18.56826],[-72.25603,18.57178],[-72.25579,18.5748],[-72.2535,18.57555],[-72.25228,18.57555],[-72.24999,18.57409],[-72.24739,18.56983],[-72.24601,18.56673],[-72.24585,18.56295],[-72.24794,18.56254],[-72.25015,18.5628],[-72.25192,18.56508],[-72.25425,18.56826]],[[-72.30315,18.53327],[-72.30313,18.53318],[-72.30483,18.53111],[-72.30974,18.53111],[-72.31643,18.53243],[-72.32341,18.53661],[-72.32614,18.53878],[-72.32619,18.54264],[-72.31705,18.55406],[-72.31309,18.55406],[-72.29875,18.54533],[-72.29886,18.54073],[-72.2963,18.54047],[-72.29546,18.53952],[-72.29619,18.53386],[-72.29719,18.53322],[-72.3007,18.53328],[-72.30227,18.53423],[-72.30285,18.53352],[-72.3031,18.53334],[-72.30318,18.5334],[-72.30358,18.53356],[-72.30308,18.53465],[-72.30371,18.53399],[-72.30453,18.53441],[-72.3044,18.53451],[-72.30627,18.53526],[-72.30631,18.53527],[-72.30612,18.53576],[-72.30612,18.53582],[-72.30637,18.53589],[-72.30627,18.53549],[-72.30667,18.53509],[-72.3062,18.53497],[-72.30589,18.53494],[-72.30554,18.53468],[-72.30549,18.53461],[-72.30556,18.53451],[-72.30467,18.53423],[-72.30476,18.53388],[-72.30433,18.53375],[-72.30426,18.53363],[-72.30315,18.53327]],[[-72.29814,18.4775],[-72.29357,18.49486],[-72.29222,18.49643],[-72.29317,18.49725],[-72.28923,18.50571],[-72.28781,18.5081],[-72.28505,18.51199],[-72.28402,18.51132],[-72.28086,18.51588],[-72.27732,18.5176],[-72.27235,18.51752],[-72.26627,18.51446],[-72.26659,18.50668],[-72.26926,18.50462],[-72.2662,18.50298],[-72.26882,18.49652],[-72.26915,18.49594],[-72.27027,18.49615],[-72.27027,18.4956],[-72.26907,18.49557],[-72.26929,18.49377],[-72.2737,18.486],[-72.27467,18.48504],[-72.27518,18.4834],[-72.27654,18.48134],[-72.27735,18.4815],[-72.2783,18.48097],[-72.27785,18.4807],[-72.2771,18.48012],[-72.279,18.47758],[-72.27972,18.47729],[-72.28064,18.47764],[-72.28137,18.47716],[-72.28084,18.47698],[-72.28128,18.47584],[-72.28232,18.47518],[-72.28516,18.4751],[-72.28499,18.47637],[-72.28544,18.47698],[-72.28628,18.47563],[-72.28693,18.47547],[-72.2866,18.47519],[-72.2866,18.475],[-72.29098,18.47473],[-72.29466,18.47494],[-72.29739,18.47684],[-72.29814,18.4775]],[[-72.34667,18.52224],[-72.34683,18.52443],[-72.34753,18.52776],[-72.34555,18.52911],[-72.34031,18.52922],[-72.33833,18.52803],[-72.3369,18.53012],[-72.33381,18.52967],[-72.32893,18.52708],[-72.32865,18.52533],[-72.32921,18.52327],[-72.33041,18.52205],[-72.33216,18.52218],[-72.33225,18.5192],[-72.33692,18.51836],[-72.3382,18.51847],[-72.33815,18.51818],[-72.3412,18.51779],[-72.34549,18.5172],[-72.34926,18.51728],[-72.35043,18.51889],[-72.35035,18.52061],[-72.34968,18.52204],[-72.34667,18.52224]],[[-72.33031,18.54865],[-72.34297,18.55081],[-72.34332,18.55306],[-72.34131,18.56143],[-72.33906,18.56136],[-72.33847,18.56383],[-72.33753,18.56543],[-72.33484,18.56506],[-72.33118,18.56383],[-72.33121,18.56162],[-72.32321,18.56069],[-72.32124,18.5596],[-72.3208,18.5587],[-72.32088,18.55788],[-72.32595,18.55803],[-72.32662,18.5582],[-72.32592,18.55775],[-72.3251,18.55738],[-72.32338,18.55226],[-72.3246,18.54785],[-72.3289,18.54837],[-72.32998,18.54895],[-72.33031,18.54865]],[[-72.32314,18.52698],[-72.32234,18.52807],[-72.32096,18.52797],[-72.32078,18.52713],[-72.32085,18.52537],[-72.32146,18.52496],[-72.32257,18.52489],[-72.32285,18.52533],[-72.32324,18.52648],[-72.32314,18.52698]],[[-72.21608,18.64578],[-72.21596,18.65538],[-72.20303,18.65583],[-72.19471,18.65534],[-72.19222,18.65456],[-72.19206,18.65213],[-72.19348,18.64776],[-72.20125,18.63852],[-72.20693,18.63882],[-72.2121,18.64241],[-72.21181,18.64306],[-72.21217,18.64269],[-72.2128,18.64276],[-72.21347,18.64313],[-72.21356,18.64375],[-72.21542,18.64439],[-72.21589,18.64503],[-72.21608,18.64578]],[[-72.28677,18.6482],[-72.2901,18.65274],[-72.28981,18.65365],[-72.29007,18.65427],[-72.29072,18.65377],[-72.29103,18.65447],[-72.29125,18.65422],[-72.29168,18.65589],[-72.29122,18.65661],[-72.29227,18.65597],[-72.29269,18.65675],[-72.29307,18.65673],[-72.29413,18.65818],[-72.29602,18.66084],[-72.29597,18.66191],[-72.29329,18.66457],[-72.29067,18.666],[-72.28959,18.66613],[-72.28959,18.66657],[-72.2877,18.66647],[-72.28758,18.66766],[-72.28312,18.66972],[-72.27965,18.66965],[-72.27843,18.66908],[-72.2784,18.66877],[-72.27774,18.66917],[-72.27744,18.66914],[-72.27701,18.66832],[-72.27656,18.66811],[-72.27654,18.66806],[-72.27523,18.66852],[-72.27493,18.66746],[-72.27464,18.66743],[-72.27347,18.66821],[-72.27323,18.66827],[-72.27268,18.66716],[-72.27191,18.66743],[-72.27188,18.66734],[-72.26881,18.66819],[-72.26883,18.66718],[-72.26908,18.66682],[-72.26881,18.66679],[-72.26811,18.66707],[-72.26763,18.66738],[-72.26756,18.66669],[-72.26686,18.66695],[-72.26559,18.66736],[-72.26545,18.66701],[-72.26475,18.66741],[-72.26299,18.66819],[-72.26285,18.66818],[-72.26265,18.66761],[-72.2623,18.66771],[-72.26248,18.66792],[-72.26248,18.66823],[-72.26231,18.66826],[-72.2621,18.66797],[-72.26228,18.66892],[-72.26015,18.6689],[-72.25427,18.66879],[-72.25054,18.66835],[-72.25044,18.66954],[-72.24779,18.66989],[-72.24152,18.66979],[-72.24142,18.67419],[-72.23892,18.67398],[-72.23872,18.67346],[-72.23837,18.67331],[-72.2387,18.67395],[-72.23755,18.6739],[-72.23742,18.67351],[-72.23774,18.67334],[-72.23751,18.67326],[-72.23684,18.67349],[-72.23644,18.67241],[-72.23551,18.6726],[-72.2354,18.67242],[-72.2353,18.6729],[-72.23455,18.67269],[-72.23431,18.67246],[-72.23424,18.67347],[-72.23341,18.67346],[-72.23329,18.6733],[-72.23274,18.67329],[-72.23271,18.6735],[-72.2277,18.67253],[-72.22653,18.67165],[-72.2268,18.67157],[-72.2275,18.67159],[-72.22749,18.67145],[-72.22729,18.67146],[-72.22728,18.6713],[-72.22721,18.67136],[-72.22618,18.67137],[-72.2256,18.67088],[-72.22551,18.66945],[-72.22611,18.66969],[-72.22618,18.66959],[-72.22598,18.66955],[-72.22578,18.66914],[-72.22533,18.66946],[-72.22497,18.66947],[-72.22458,18.66788],[-72.22355,18.6677],[-72.22359,18.66759],[-72.22246,18.66763],[-72.22237,18.66702],[-72.22233,18.66709],[-72.22192,18.66703],[-72.22081,18.6669],[-72.22081,18.66653],[-72.22087,18.66636],[-72.2206,18.66681],[-72.22039,18.66664],[-72.21843,18.66505],[-72.21829,18.6641],[-72.21835,18.66084],[-72.21872,18.66065],[-72.21869,18.6606],[-72.21873,18.66045],[-72.21898,18.66032],[-72.21878,18.6602],[-72.2187,18.66024],[-72.21858,18.66004],[-72.21861,18.66],[-72.21878,18.66013],[-72.219,18.66002],[-72.21891,18.65991],[-72.21897,18.65979],[-72.21838,18.65958],[-72.21847,18.65397],[-72.2201,18.65116],[-72.2258,18.64695],[-72.2283,18.64573],[-72.23793,18.64586],[-72.23776,18.6447],[-72.24004,18.64325],[-72.2456,18.64335],[-72.24827,18.64504],[-72.24875,18.64367],[-72.25111,18.64298],[-72.25124,18.64334],[-72.25126,18.64316],[-72.25148,18.64314],[-72.25133,18.64297],[-72.25336,18.64235],[-72.25352,18.64268],[-72.25395,18.64254],[-72.25415,18.64293],[-72.25439,18.64287],[-72.25438,18.64275],[-72.25642,18.64232],[-72.25669,18.64314],[-72.25688,18.64286],[-72.25682,18.64253],[-72.25884,18.6421],[-72.25889,18.64225],[-72.25926,18.64223],[-72.25965,18.64241],[-72.25922,18.64069],[-72.25995,18.64048],[-72.26012,18.64063],[-72.26012,18.63994],[-72.26153,18.63947],[-72.26261,18.6391],[-72.26545,18.63873],[-72.27194,18.63868],[-72.2722,18.63886],[-72.27303,18.63942],[-72.27317,18.64126],[-72.27387,18.64103],[-72.27422,18.64161],[-72.27522,18.6417],[-72.27545,18.64157],[-72.27555,18.64169],[-72.27554,18.64175],[-72.27647,18.64186],[-72.27675,18.6419],[-72.2763,18.6426],[-72.27742,18.643],[-72.27798,18.64272],[-72.27858,18.64313],[-72.27857,18.64323],[-72.2789,18.64335],[-72.27985,18.64397],[-72.28587,18.64697],[-72.28677,18.6482]],[[-72.55572,18.53059],[-72.55559,18.5367],[-72.555,18.53797],[-72.5488,18.53792],[-72.54866,18.53728],[-72.54884,18.53063],[-72.54937,18.5301],[-72.55513,18.53012],[-72.55572,18.53059]],[[-72.62353,18.50799],[-72.62344,18.50952],[-72.62261,18.51043],[-72.62049,18.51185],[-72.61834,18.51075],[-72.61622,18.50832],[-72.61626,18.50647],[-72.61866,18.50444],[-72.6204,18.5045],[-72.62283,18.507],[-72.62353,18.50799]]]},{id:"osmim-imagicode-S2A_R119_N09_20160327T050917",name:"imagico.de: Adams Bridge",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R119_N09_20160327T050917&z={zoom}&x={x}&y={-y}",endDate:"2016-03-27T00:00:00.000Z",startDate:"2016-03-27T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[79.01779,8.82757],[79.01402,9.64678],[80.17642,9.65042],[80.17728,8.8313],[79.01779,8.82757]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Supplementing incomplete coverage in other sources (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC80700162014211LGN00",name:"imagico.de: Alaska Range",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC80700162014211LGN00&z={zoom}&x={x}&y={-y}",endDate:"2014-07-31T00:00:00.000Z",startDate:"2014-07-31T00:00:00.000Z",zoomExtent:[0,12],polygon:[[[-152.70873,62.30357],[-152.70839,62.58153],[-152.00835,63.54646],[-148.99432,63.5333],[-148.99432,62.30357],[-152.70873,62.30357]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Recent summer image of the Alaska Range for mapping natural features (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-aral2",name:"imagico.de: Aral Sea (high water level)",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=aral2&z={zoom}&x={x}&y={-y}",endDate:"2016-03-03T00:00:00.000Z",startDate:"2016-03-03T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[58.049,43.2623],[58.049,46.7189],[58.1014,46.8645],[61.5524,46.8629],[61.5524,46.3896],[61.4675,45.3416],[60.6317,43.2623],[58.049,43.2623]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Water and wetland extents, dams etc. - some remaining winter ice in the north (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-aral1",name:"imagico.de: Aral Sea (low water level)",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=aral1&z={zoom}&x={x}&y={-y}",endDate:"2016-09-09T00:00:00.000Z",startDate:"2016-09-09T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[58.049,43.2623],[58.049,46.7334],[58.096,46.8645],[61.5524,46.8629],[61.5524,46.3896],[61.4685,45.3544],[60.6267,43.2623],[58.049,43.2623]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Water and wetland extents, dams etc. (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R067_S40_20170417T140051",name:"imagico.de: Bahía Blanca (high tide)",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R067_S40_20170417T140051&z={zoom}&x={x}&y={-y}",endDate:"2017-04-17T00:00:00.000Z",startDate:"2017-04-17T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[-62.9988,-40.7327],[-62.9988,-37.9476],[-61.7505,-37.9474],[-61.7501,-40.7322],[-62.9988,-40.7327]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Tidal flats and islands at the coast (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R067_S40_20170127T140051",name:"imagico.de: Bahía Blanca (low tide)",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R067_S40_20170127T140051&z={zoom}&x={x}&y={-y}",endDate:"2017-01-27T00:00:00.000Z",startDate:"2017-01-27T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[-62.9988,-40.7327],[-62.9988,-37.9476],[-61.7505,-37.9474],[-61.7501,-40.7322],[-62.9988,-40.7327]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Tidal flats and islands at the coast (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC81190582014075LGN00",name:"imagico.de: Bakun Reservoir",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC81190582014075LGN00&z={zoom}&x={x}&y={-y}",endDate:"2014-03-16T00:00:00.000Z",startDate:"2014-03-16T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[114.36,2.02846],[113.53448,2.03],[113.53619,3.07077],[114.76512,3.06751],[114.76254,2.08816],[114.36,2.02846]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Missing in older pre-2011 images (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC81250592016107LGN00",name:"imagico.de: Batam",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC81250592016107LGN00&z={zoom}&x={x}&y={-y}",endDate:"2016-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[104.00155,-0.00008],[104.00137,1.45099],[104.91015,1.45116],[104.91015,-0.00008],[104.00155,-0.00008]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Missing Islands in OSM (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC80770232017156LGN00",name:"imagico.de: Bogoslof Island",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC80770232017156LGN00&z={zoom}&x={x}&y={-y}",endDate:"2017-06-05T00:00:00.000Z",startDate:"2017-06-05T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[-168.2544,53.8749],[-168.2544,54.0213],[-167.8591,54.0213],[-167.8591,53.8749],[-168.2544,53.8749]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Recent image from after the eruption (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC81800982013291LGN00",name:"imagico.de: Bouvet Island",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC81800982013291LGN00&z={zoom}&x={x}&y={-y}",endDate:"2013-10-18T00:00:00.000Z",startDate:"2013-10-18T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[3.24653,-54.47047],[3.24653,-54.37539],[3.46385,-54.37539],[3.46385,-54.47047],[3.24653,-54.47047]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",best:true,description:"For more accurate coastline and glacier mapping (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R017_S67_20170223T022551",name:"imagico.de: Bunger Hills",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R017_S67_20170223T022551&z={zoom}&x={x}&y={-y}",endDate:"2017-02-23T00:00:00.000Z",startDate:"2017-02-23T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[96.1197,-67.6542],[96.1201,-67.1899],[98.7331,-65.044],[105.1028,-65.044],[105.1028,-65.7224],[103.3017,-67.6542],[96.1197,-67.6542]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Largest ice free area at the East Antarctic coast - shows considerable amounts of non-permanent ice. (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R065_N47_20160929T102022",name:"imagico.de: Central Alps in late September 2016",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R065_N47_20160929T102022&z={zoom}&x={x}&y={-y}",endDate:"2016-09-29T00:00:00.000Z",startDate:"2016-09-29T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[10.55906,45.95485],[7.47396,45.95533],[7.55585,46.2708],[8.0547,47.66469],[11.75245,47.66481],[11.75245,46.81334],[11.38424,45.95509],[10.55906,45.95485]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Up-to-date image for glacier mapping - beware of some fresh snow at higher altitudes (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC82050982015344LGN00",name:"imagico.de: Clerke Rocks",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC82050982015344LGN00&z={zoom}&x={x}&y={-y}",endDate:"2015-12-10T00:00:00.000Z",startDate:"2015-12-10T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[-34.17701,-55.29693],[-35.19599,-55.28285],[-35.16664,-54.72097],[-34.12517,-54.73465],[-34.1401,-55.29693],[-34.17701,-55.29693]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Missing in other image sources (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R086_N60_20160831T213532",name:"imagico.de: Cook Inlet",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R086_N60_20160831T213532&z={zoom}&x={x}&y={-y}",endDate:"2016-08-31T00:00:00.000Z",startDate:"2016-08-31T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[-154.5102,59.4577],[-154.5097,60.6888],[-153.5403,62.1718],[-148.0423,62.1718],[-148.0445,61.5342],[-149.7291,59.4584],[-154.5102,59.4577]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Tidal flats and glaciers in surrounding mountains (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-EO1A0040712016264110KF",name:"imagico.de: Coropuna",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=EO1A0040712016264110KF&z={zoom}&x={x}&y={-y}",endDate:"2016-09-21T00:00:00.000Z",startDate:"2016-09-21T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[-72.75945,-15.68684],[-72.75945,-15.4957],[-72.74434,-15.4263],[-72.41286,-15.4263],[-72.41286,-15.65296],[-72.42411,-15.68667],[-72.75945,-15.68684]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Up-to-date image for glacier mapping (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R022_N06_20151221T103009",name:"imagico.de: Cotonou",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R022_N06_20151221T103009&z={zoom}&x={x}&y={-y}",endDate:"2015-12-21T00:00:00.000Z",startDate:"2015-12-21T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[1.83975,6.2578],[1.83975,7.11427],[2.5494,7.11427],[2.5494,6.48905],[2.49781,6.25806],[1.83975,6.2578]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Patchy and partly cloudy coverage in usual sources (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R040_N01_20160311T164128",name:"imagico.de: Darwin and Wolf islands, Galapagos",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R040_N01_20160311T164128&z={zoom}&x={x}&y={-y}",endDate:"2016-03-11T00:00:00.000Z",startDate:"2016-03-11T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[-92.05216,1.3213],[-92.05216,1.72181],[-91.74849,1.72181],[-91.74849,1.3213],[-92.05216,1.3213]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Recent image, only old and poor images in other sources currently (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC80360072014245LGN00",name:"imagico.de: Eastern Devon Island coast",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC80360072014245LGN00&z={zoom}&x={x}&y={-y}",endDate:"2014-09-02T00:00:00.000Z",startDate:"2014-09-02T00:00:00.000Z",zoomExtent:[0,11],polygon:[[[-84.34799,74.38946],[-84.34799,75.8903],[-79.14871,75.8903],[-79.14871,74.38946],[-84.34799,74.38946]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Coastline mostly mapped meanwhile (false color IR)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC82160152013239LGN00",name:"imagico.de: Eastern Iceland",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC82160152013239LGN00&z={zoom}&x={x}&y={-y}",endDate:"2013-08-27T00:00:00.000Z",startDate:"2013-08-27T00:00:00.000Z",zoomExtent:[0,12],polygon:[[[-13.04701,64.21109],[-15.16496,64.22408],[-15.16805,64.81573],[-13.04357,64.8036],[-13.04701,64.21109]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Missing islets and inaccurate coast (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-AST_L1T_00302052007154424_20150518041444_91492",name:"imagico.de: El Altar",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=AST_L1T_00302052007154424_20150518041444_91492&z={zoom}&x={x}&y={-y}",endDate:"2012-02-05T00:00:00.000Z",startDate:"2012-02-05T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[-78.532,-1.80509],[-78.532,-1.60811],[-78.33562,-1.60811],[-78.33562,-1.80509],[-78.532,-1.80509]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"2007 ASTER image offering better glacier coverage than common sources (true color with estimated blue)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R009_S61_20160109",name:"imagico.de: Elephant Island/Clarence Island",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R009_S61_20160109&z={zoom}&x={x}&y={-y}",endDate:"2016-01-09T00:00:00.000Z",startDate:"2016-01-09T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[-56.13476,-61.63472],[-56.13476,-61.19936],[-55.83264,-60.84015],[-53.72343,-60.83982],[-53.72343,-61.63472],[-56.13476,-61.63472]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Fairly clear up-to-date image for updating glacier edges (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-enderby",name:"imagico.de: Enderby Land and Kemp Coast",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=enderby&z={zoom}&x={x}&y={-y}",endDate:"2017-03-27T00:00:00.000Z",startDate:"2017-01-25T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[45.4547,-68.5091],[45.4547,-67.5724],[49.7155,-65.7176],[59.2693,-65.7176],[67.3735,-67.3449],[67.3735,-68.2581],[67.088,-68.5091],[45.4547,-68.5091]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Sentinel-2 images of Enderby Land and Kemp Coast (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC82100502015347LGN00",name:"imagico.de: Fogo, Cape Verde",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC82100502015347LGN00&z={zoom}&x={x}&y={-y}",endDate:"2015-12-13T00:00:00.000Z",startDate:"2015-12-13T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[-24.75878,14.74814],[-24.75878,15.09249],[-24.26706,15.09249],[-24.26706,14.74814],[-24.75878,14.74814]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Image from after the 2014/2015 eruption (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-greenland",name:"imagico.de: Greenland mosaic",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=greenland&z={zoom}&x={x}&y={-y}",endDate:"2015-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",zoomExtent:[0,12],polygon:[[[-43.9774,59.7171],[-44.545,59.7302],[-44.9203,59.7672],[-45.3587,59.8218],[-45.763,59.8848],[-46.0859,59.9827],[-46.3381,60.119],[-46.577,60.2652],[-46.8114,60.4418],[-47.2635,60.5314],[-47.6937,60.5549],[-48.1457,60.6192],[-48.5771,60.7015],[-48.8689,60.8506],[-49.0578,61.0555],[-49.396,61.2957],[-49.7601,61.4934],[-50.2064,61.7324],[-50.4699,61.9539],[-50.8647,62.1596],[-51.0631,62.3869],[-51.2121,62.6001],[-51.3005,62.8389],[-51.4238,62.9979],[-51.6767,63.1944],[-51.9465,63.4079],[-52.0253,63.6377],[-52.2255,63.8378],[-52.3658,64.0705],[-52.4829,64.3792],[-52.4988,64.6788],[-52.789,64.9063],[-53.2046,65.1321],[-53.6649,65.4753],[-53.9977,65.8019],[-54.1348,66.1568],[-54.1441,66.5235],[-54.2285,66.8319],[-54.4519,67.303],[-54.5141,67.7648],[-54.604,68.2021],[-54.568,68.5698],[-54.598,68.8347],[-54.7606,69.1207],[-55.0028,69.4125],[-55.2735,69.6187],[-55.3808,69.8283],[-55.3945,70.0838],[-55.3094,70.2573],[-55.4307,70.479],[-55.5501,70.6707],[-55.7654,70.861],[-56.2489,71.2343],[-56.5018,71.5429],[-56.5867,71.9015],[-56.5189,72.2355],[-56.5085,72.5258],[-56.8923,72.8144],[-57.4027,73.1054],[-57.8066,73.4566],[-58.1461,73.7696],[-58.3554,74.0972],[-58.5125,74.3783],[-58.7336,74.6328],[-59.3551,74.8869],[-60.1412,75.102],[-61.0067,75.2763],[-61.911,75.3886],[-62.4706,75.5595],[-62.9776,75.7454],[-64.1463,75.779],[-65.4481,75.7235],[-66.7068,75.6792],[-67.8379,75.6525],[-69.0456,75.6195],[-70.055,75.5344],[-71.0898,75.4705],[-72.1119,75.4476],[-74.2311,76.4102],[-74.5601,76.5328],[-74.5601,82.6959],[-14.4462,82.6959],[-14.3994,82.5997],[-13.5339,82.4379],[-12.0312,82.3426],[-10.7796,82.3196],[-10.7796,80.1902],[-11.2123,80.069],[-11.136,79.8103],[-10.7796,79.5176],[-10.7796,79.0441],[-11.2626,78.7128],[-12.2579,78.3558],[-13.2398,78.1272],[-13.7649,77.9279],[-14.1169,77.6779],[-14.7129,77.5278],[-15.5507,77.3655],[-16.0936,77.0771],[-16.0586,76.5548],[-15.838,75.9611],[-15.6879,75.4726],[-16.253,75.058],[-17.0427,74.6425],[-18.3155,74.2702],[-19.4463,73.9378],[-19.8329,73.632],[-20.2938,73.3524],[-20.7831,73.0446],[-21.01,72.6766],[-20.8774,72.2926],[-20.7672,71.8726],[-20.7765,71.4304],[-20.9411,70.9802],[-21.219,70.6126],[-21.5326,70.3001],[-21.8039,70.0911],[-22.166,69.8947],[-22.4831,69.7539],[-22.9027,69.6585],[-23.3545,69.544],[-23.9177,69.4036],[-24.1794,69.3088],[-24.6745,69.1084],[-25.1222,68.9555],[-25.6659,68.7995],[-26.0994,68.583],[-26.6316,68.4043],[-27.7638,68.2813],[-28.4575,68.0023],[-29.353,67.8135],[-30.6456,67.4911],[-31.7673,67.0005],[-32.9783,66.2596],[-33.9313,66.0156],[-34.8956,65.7403],[-35.5914,65.5208],[-36.1483,65.372],[-36.7532,65.2559],[-37.1858,65.1349],[-37.6032,64.9727],[-38.0624,64.4901],[-38.5304,64.1244],[-39.0545,63.7213],[-39.3131,63.4405],[-39.5739,62.7506],[-39.9532,62.2739],[-40.2757,61.8547],[-40.714,61.3365],[-41.2091,60.8495],[-41.821,60.5526],[-42.4368,60.3264],[-42.8643,60.0299],[-43.1131,59.9147],[-43.3282,59.83],[-43.5459,59.7695],[-43.797,59.7284],[-43.9774,59.7171]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Landsat mosaic of Greenland (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R047_S54_20160411T044330",name:"imagico.de: Heard Island coast",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R047_S54_20160411T044330&z={zoom}&x={x}&y={-y}",endDate:"2016-04-12T00:00:00.000Z",startDate:"2016-04-12T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[73.06897,-53.27059],[73.06897,-52.87549],[73.67338,-52.87673],[74.08863,-52.9495],[74.08863,-53.27059],[73.06897,-53.27059]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Recent image of Heard island with interior mostly cloud covered but mostly well visible coast (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC82280982013259LGN00",name:"imagico.de: Isla Londonderry",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC82280982013259LGN00&z={zoom}&x={x}&y={-y}",endDate:"2013-09-16T00:00:00.000Z",startDate:"2013-09-16T00:00:00.000Z",zoomExtent:[0,12],polygon:[[[-69.8568,-55.55949],[-72.26521,-55.14943],[-72.26521,-54.51089],[-72.08531,-54.17909],[-69.49116,-54.17889],[-69.4915,-55.28379],[-69.62231,-55.5591],[-69.8568,-55.55949]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"A lot of very coarse coastlines could be improved here, much snow cover though so no use for glacier mapping (false color IR)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-dms_kangerlussuaq_20151008",name:"imagico.de: Kangerlussuaq Autumn",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=dms_kangerlussuaq_20151008&z={zoom}&x={x}&y={-y}",endDate:"2015-10-08T00:00:00.000Z",startDate:"2015-10-08T00:00:00.000Z",zoomExtent:[0,17],polygon:[[[-50.6992,66.9888],[-50.721,67.0017],[-50.7341,67.0125],[-50.7396,67.0193],[-50.7396,67.0212],[-50.7158,67.0265],[-50.7017,67.0265],[-50.6829,67.0176],[-50.6686,67.0077],[-50.6638,66.998],[-50.6642,66.9946],[-50.6891,66.9888],[-50.6992,66.9888]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Icebridge DMS image of the airport and settlement - alignment might be poor",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-dms_kangerlussuaq_20160518",name:"imagico.de: Kangerlussuaq Spring",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=dms_kangerlussuaq_20160518&z={zoom}&x={x}&y={-y}",endDate:"2016-05-18T00:00:00.000Z",startDate:"2016-05-18T00:00:00.000Z",zoomExtent:[0,18],polygon:[[[-50.7519,66.9996],[-50.7555,67.0023],[-50.7555,67.0033],[-50.6395,67.0297],[-50.6162,67.0339],[-50.6097,67.0281],[-50.6331,67.022],[-50.7323,66.9996],[-50.7519,66.9996]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Icebridge DMS image of the airport and roads - alignment might be poor",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R021_N44_20160807T083013",name:"imagico.de: Kerch Strait",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R021_N44_20160807T083013&z={zoom}&x={x}&y={-y}",endDate:"2016-08-07T00:00:00.000Z",startDate:"2016-08-07T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[35.93259,44.96237],[35.93259,45.55926],[37.36991,45.55926],[37.36991,44.96237],[35.93259,44.96237]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"State of bridge construction in August 2016 (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R021_N44_20180429T082601",name:"imagico.de: Kerch Strait 2018",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R021_N44_20180429T082601&z={zoom}&x={x}&y={-y}",endDate:"2018-04-29T00:00:00.000Z",startDate:"2018-04-29T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[35.8787,45.0348],[35.8787,45.6095],[36.9208,45.6095],[36.9208,45.0348],[35.8787,45.0348]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Bridge and surrounding after completion in April 2018 (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-ls_polar2",name:"imagico.de: Landsat off-nadir July 2016",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=ls_polar2&z={zoom}&x={x}&y={-y}",endDate:"2016-07-17T00:00:00.000Z",startDate:"2016-07-17T00:00:00.000Z",zoomExtent:[0,10],polygon:[[[-79.05175,81.91484],[-79.05175,83.43339],[-73.6039,83.80225],[-26.42449,83.80225],[-21.493,83.50352],[-16.88835,83.15095],[-16.88835,81.91484],[-79.05175,81.91484]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Latest images north of the regular Landsat limit (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-larsen_2018",name:"imagico.de: Larsen C ice shelf after calving",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=larsen_2018&z={zoom}&x={x}&y={-y}",endDate:"2018-01-06T00:00:00.000Z",startDate:"2018-01-06T00:00:00.000Z",zoomExtent:[0,12],polygon:[[[-62.7282,-68.9652],[-64.0489,-68.7318],[-64.0486,-68.5373],[-60.8845,-65.9399],[-59.9187,-65.9389],[-59.1088,-66.0775],[-59.1088,-68.8359],[-59.2544,-68.9652],[-62.7282,-68.9652]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"For updating the ice edge after the 2017 iceberg calving (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-AST_L1T_00311162013112731_20150618142416_109190",name:"imagico.de: Leskov Island ASTER",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=AST_L1T_00311162013112731_20150618142416_109190&z={zoom}&x={x}&y={-y}",endDate:"2013-11-16T00:00:00.000Z",startDate:"2013-11-16T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[-28.21075,-56.72108],[-28.21075,-56.62498],[-27.96956,-56.62498],[-27.96956,-56.72108],[-28.21075,-56.72108]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Missing in other image sources (true color with estimated blue)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC81991002015286LGN00",name:"imagico.de: Leskov Island Landsat",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC81991002015286LGN00&z={zoom}&x={x}&y={-y}",endDate:"2015-10-13T00:00:00.000Z",startDate:"2015-10-13T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[-27.99293,-56.73479],[-28.22776,-56.73262],[-28.22416,-56.60075],[-27.96975,-56.60283],[-27.97319,-56.73479],[-27.99293,-56.73479]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Missing in other image sources (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2B_R005_S69_20180222T061749",name:"imagico.de: Lützow-Holm Bay",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2B_R005_S69_20180222T061749&z={zoom}&x={x}&y={-y}",endDate:"2018-02-22T00:00:00.000Z",startDate:"2018-02-22T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[35.124,-70.3693],[35.1241,-69.2795],[36.3864,-68.4765],[42.2208,-68.4762],[42.2208,-70.3651],[35.124,-70.3693]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Up-to-date late season image or an area poorly mapped in OSM at the moment - lots of sea ice, be careful with distinguishing sea ice from ice shelves and floating glacier tongues. (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-ls_polar",name:"imagico.de: May 2013 off-nadir Landsat",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=ls_polar&z={zoom}&x={x}&y={-y}",endDate:"2013-05-17T00:00:00.000Z",startDate:"2013-05-17T00:00:00.000Z",zoomExtent:[0,10],polygon:[[[-85.76109,81.39333],[-89.83016,82.14952],[-89.83153,82.24405],[-84.99342,82.73099],[-79.95207,83.13108],[-74.55641,83.46267],[-69.35851,83.70451],[-28.20784,83.70451],[-23.06624,83.46532],[-17.96584,83.15518],[-17.96721,82.72386],[-22.78197,81.4419],[-85.76109,81.39333]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"First available image north of the regular Landsat limit, mostly with seasonal snow cover so difficult to interpret (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R042_S78_20170214T202521",name:"imagico.de: McMurdo Sound and Dry Valleys",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R042_S78_20170214T202521&z={zoom}&x={x}&y={-y}",endDate:"2017-02-14T00:00:00.000Z",startDate:"2017-02-14T00:00:00.000Z",zoomExtent:[0,12],polygon:[[[162.9125,-78.4514],[162.6595,-78.4257],[159.2712,-77.6013],[159.2712,-77.4108],[164.157,-76.477],[169.7813,-76.4764],[169.7813,-78.4514],[162.9125,-78.4514]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Up-to-date late season image - not ice minimum, be careful with distinguishing sea ice from ice shelves. (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R092_S02_20160613T075613",name:"imagico.de: Mount Kenya 2016",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R092_S02_20160613T075613&z={zoom}&x={x}&y={-y}",endDate:"2016-06-13T00:00:00.000Z",startDate:"2016-06-13T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[37.20666,-0.26685],[37.20666,-0.01193],[37.56552,-0.01193],[37.56552,-0.26685],[37.20666,-0.26685]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Up-to-date image for glacier mapping (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R092_S05_20160802T075556",name:"imagico.de: Mount Kilimanjaro 2016",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R092_S05_20160802T075556&z={zoom}&x={x}&y={-y}",endDate:"2016-08-02T00:00:00.000Z",startDate:"2016-08-02T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[37.24769,-3.22921],[37.24769,-2.96816],[37.61581,-2.96816],[37.61581,-3.22921],[37.24769,-3.22921]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Up-to-date image for glacier mapping (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC80940622015159LGN00",name:"imagico.de: New Ireland",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC80940622015159LGN00&z={zoom}&x={x}&y={-y}",endDate:"2015-06-08T00:00:00.000Z",startDate:"2015-06-08T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[150.38853,-2.80053],[150.38853,-2.3834],[150.83348,-2.3834],[150.83348,-2.80053],[150.38853,-2.80053]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Many missing islands in OSM (mostly mapped meanwhile) (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-northsea_s2_2016",name:"imagico.de: North Sea Coast 2016",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=northsea_s2_2016&z={zoom}&x={x}&y={-y}",endDate:"2016-09-25T00:00:00.000Z",startDate:"2016-09-25T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[5.1562,52.8755],[5.1615,53.0325],[6.4155,55.7379],[9.8813,55.7459],[9.8813,53.2428],[9.6846,52.8877],[5.1562,52.8755]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Up-to-date low tide imagery of the coast for updating mapping of tidalflats and shoals (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-northsea_s2_2017",name:"imagico.de: North Sea Coast 2017",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=northsea_s2_2017&z={zoom}&x={x}&y={-y}",endDate:"2017-06-02T00:00:00.000Z",startDate:"2017-06-02T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[5.1713,53.0918],[6.477,55.8973],[9.8813,55.8973],[9.8813,53.2761],[9.7789,53.0918],[5.1713,53.0918]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Up-to-date low tide imagery of the coast for updating mapping of tidalflats and shoals (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-northsea_s2_2018",name:"imagico.de: North Sea Coast spring 2018",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=northsea_s2_2018&z={zoom}&x={x}&y={-y}",endDate:"2018-05-08T00:00:00.000Z",startDate:"2018-05-08T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[5.3179,53.0918],[5.322,53.4418],[6.7023,56.3572],[9.8813,56.3578],[9.8813,53.2819],[9.7758,53.0921],[5.3179,53.0918]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Up-to-date low tide imagery of the coast for updating mapping of tidalflats and shoals (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-caspian_2018",name:"imagico.de: Northeast Caspian Sea 2018",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=caspian_2018&z={zoom}&x={x}&y={-y}",endDate:"2018-05-16T00:00:00.000Z",startDate:"2018-05-16T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[51.0243,45.0729],[51.0243,46.569],[52.4259,46.5687],[53.6471,46.3177],[53.6474,45.0729],[51.0243,45.0729]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Coastal contruction and Kashagan oil field in Kazakhstan in May 2018 (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-ural_s2_2016",name:"imagico.de: Northern and Polar Ural mountains August 2016",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=ural_s2_2016&z={zoom}&x={x}&y={-y}",endDate:"2016-08-12T00:00:00.000Z",startDate:"2016-08-12T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[59.19898,64.89205],[59.19898,66.91656],[60.73329,68.44289],[67.73295,68.44327],[67.73295,67.74883],[64.21647,64.91957],[59.19898,64.89205]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Up-to-date late summer imagery with few clouds - caution: not all visible snow is glaciers (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-ndvina",name:"imagico.de: Northern Dvina delta at low tide",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=ndvina&z={zoom}&x={x}&y={-y}",endDate:"2015-09-13T00:00:00.000Z",startDate:"2015-09-13T00:00:00.000Z",zoomExtent:[0,12],polygon:[[[37.7291,64.1971],[37.7291,65.1161],[37.8592,65.2705],[41.3223,65.2705],[41.3223,64.3142],[41.2114,64.1973],[37.7291,64.1971]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Beaches, tidal flats and other costal forms (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-nellesmere_ast",name:"imagico.de: Northern Ellesmere Island",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=nellesmere_ast&z={zoom}&x={x}&y={-y}",endDate:"2012-07-09T00:00:00.000Z",startDate:"2012-07-09T00:00:00.000Z",zoomExtent:[0,10],polygon:[[[-81.62923,82.4597],[-83.03136,82.47986],[-83.03136,83.05876],[-72.80309,83.09567],[-65.65786,83.03232],[-65.81167,82.4597],[-81.62923,82.4597]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Assembled from July 2012 ASTER imagery (true color with estimated blue)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-nellesmere_ast_2016",name:"imagico.de: Northern Ellesmere Island July 2016",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=nellesmere_ast_2016&z={zoom}&x={x}&y={-y}",endDate:"2012-07-15T00:00:00.000Z",startDate:"2012-07-08T00:00:00.000Z",zoomExtent:[0,10],polygon:[[[-78.89729,82.17577],[-82.64501,82.19426],[-82.64501,83.08067],[-66.58986,83.08497],[-63.78011,82.98908],[-63.78011,82.72198],[-65.0092,82.17577],[-78.89729,82.17577]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Assembled from July 2016 ASTER imagery (true color with estimated blue)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC81960222015233LGN00vis",name:"imagico.de: Northern German west coast tidalflats",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC81960222015233LGN00vis&z={zoom}&x={x}&y={-y}",endDate:"2015-08-21T00:00:00.000Z",startDate:"2015-08-21T00:00:00.000Z",zoomExtent:[0,12],polygon:[[[7.63568,53.28027],[7.63568,53.6677],[8.49433,55.50246],[9.20775,55.48106],[9.20775,53.28027],[7.63568,53.28027]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Up-to-date low tide imagery of the coast for updating mapping of tidalflats and shoals (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC81960222015233LGN00ir",name:"imagico.de: Northern German west coast tidalflats (infrared)",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC81960222015233LGN00ir&z={zoom}&x={x}&y={-y}",endDate:"2015-08-21T00:00:00.000Z",startDate:"2015-08-21T00:00:00.000Z",zoomExtent:[0,12],polygon:[[[7.63568,53.28027],[7.63568,53.66811],[8.49433,55.50246],[9.20775,55.48106],[9.20775,53.28027],[7.63568,53.28027]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Up-to-date low tide imagery of the coast for updating mapping of tidalflats and shoals (false color IR)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-ngreenland_ast",name:"imagico.de: Northern Greenland ASTER",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=ngreenland_ast&z={zoom}&x={x}&y={-y}",endDate:"2012-08-13T00:00:00.000Z",startDate:"2005-06-21T00:00:00.000Z",zoomExtent:[0,10],polygon:[[[-52.49222,82.48972],[-52.49222,82.94295],[-49.28696,83.47312],[-44.5285,83.73214],[-29.5253,83.73214],[-25.26398,83.58271],[-21.18393,83.39776],[-21.18393,82.74312],[-23.40454,82.48972],[-52.49222,82.48972]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Assembled from mostly 2012 ASTER imagery, some 2005 images mainly in the northeast (true color with estimated blue)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-EO1A1350972013086110KF",name:"imagico.de: Northwest Heard Island",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=EO1A1350972013086110KF&z={zoom}&x={x}&y={-y}",endDate:"2013-03-13T00:00:00.000Z",startDate:"2013-03-13T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[73.2279,-53.20333],[73.2279,-53.01073],[73.25949,-52.94944],[73.78992,-52.94944],[73.78992,-53.06048],[73.71783,-53.20333],[73.2279,-53.20333]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Glaciers of Northwest Heard Island (mapped meanwhile) (false color IR)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R111_N09_20160604T154554",name:"imagico.de: Panama Canal",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R111_N09_20160604T154554&z={zoom}&x={x}&y={-y}",endDate:"2016-06-07T00:00:00.000Z",startDate:"2016-06-07T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[-80.01654,8.84898],[-80.01654,9.41481],[-79.46859,9.41481],[-79.46859,8.84898],[-80.01654,8.84898]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Images of the new locks (but partly cloudy) (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-EO1A0120532016364110KF",name:"imagico.de: Panama Canal - Pacific side",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=EO1A0120532016364110KF&z={zoom}&x={x}&y={-y}",endDate:"2016-12-30T00:00:00.000Z",startDate:"2016-12-30T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[-79.62539,8.77083],[-79.68684,8.82197],[-79.68667,8.93705],[-79.65363,9.09294],[-79.26816,9.09294],[-79.32833,8.77083],[-79.62539,8.77083]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"New locks with less clouds than in the Sentinel-2 image - make sure to check image alignment (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R078_N68_20160930T081002",name:"imagico.de: Pechora Sea Coast",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R078_N68_20160930T081002&z={zoom}&x={x}&y={-y}",endDate:"2016-09-30T00:00:00.000Z",startDate:"2016-09-30T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[53.1802,67.5344],[53.1821,68.414],[54.2107,69.3367],[55.3584,70.2786],[59.004,70.2786],[60.6947,69.977],[61.9837,69.7161],[61.9823,68.9395],[59.9153,67.5344],[53.1802,67.5344]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Sentinel-2 image of the Pechora Sea coast in autumn 2016 (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC81511242016033LGN00",name:"imagico.de: Pensacola Mountains",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC81511242016033LGN00&z={zoom}&x={x}&y={-y}",endDate:"2016-02-02T00:00:00.000Z",startDate:"2016-02-02T00:00:00.000Z",zoomExtent:[0,10],polygon:[[[-53.20922,-84.12525],[-60.61538,-83.78609],[-60.61538,-82.29969],[-48.72405,-82.29987],[-44.52178,-82.43683],[-44.51354,-84.12525],[-53.20922,-84.12525]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Outside regular Landsat coverage and therefore not in LIMA and Bing/Mapbox (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R136_N41_20150831T093006",name:"imagico.de: Prokletije Mountains",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R136_N41_20150831T093006&z={zoom}&x={x}&y={-y}",endDate:"2015-08-31T00:00:00.000Z",startDate:"2015-08-31T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[19.11233,42.15316],[19.08426,43.08074],[20.63299,43.09603],[20.63788,42.16779],[19.11233,42.15316]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Late summer imagery where usual sources are severely limited by clouds and snow (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-DMS_1142622_03746_20110415_17533956",name:"imagico.de: Qasigiannguit",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=DMS_1142622_03746_20110415_17533956&z={zoom}&x={x}&y={-y}",endDate:"2011-04-15T00:00:00.000Z",startDate:"2011-04-15T00:00:00.000Z",zoomExtent:[0,15],polygon:[[[-51.23857,68.79972],[-51.24334,68.85303],[-51.15167,68.85303],[-51.14038,68.80116],[-51.23857,68.79972]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Icebridge DMS image of the settlement - alignment might be poor",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC81510432015030LGN00",name:"imagico.de: Rann of Kutch",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC81510432015030LGN00&z={zoom}&x={x}&y={-y}",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[0,12],polygon:[[[67.9684,22.36265],[67.86231,22.38392],[67.86231,24.88693],[71.48986,24.88693],[71.48986,22.36265],[67.9684,22.36265]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Land/water distinction difficult to properly map based on Bing/Mapbox images (false color IR)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R093_N41_20150828T092005",name:"imagico.de: Rila and Pirin Mountains",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R093_N41_20150828T092005&z={zoom}&x={x}&y={-y}",endDate:"2015-08-28T00:00:00.000Z",startDate:"2015-08-28T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[23.80811,41.58488],[22.99238,41.60195],[23.01186,42.29984],[23.99402,42.28339],[23.96561,41.58488],[23.80811,41.58488]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Late summer imagery where usual sources are severely limited by clouds and snow (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC81730602015040LGN00",name:"imagico.de: Rwenzori Mountains",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC81730602015040LGN00&z={zoom}&x={x}&y={-y}",endDate:"2015-02-09T00:00:00.000Z",startDate:"2015-02-09T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[29.7663,0.20689],[29.7663,0.50918],[30.0346,0.50918],[30.0346,0.20689],[29.7663,0.20689]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Recent image of most of the remaining Rwenzori Mountains glaciers (false color IR)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R078_N01_20160702T082522",name:"imagico.de: Rwenzori Mountains 2016",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R078_N01_20160702T082522&z={zoom}&x={x}&y={-y}",endDate:"2016-07-02T00:00:00.000Z",startDate:"2016-07-02T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[29.80514,0.23586],[29.80514,0.46709],[30.02503,0.46709],[30.02503,0.23586],[29.80514,0.23586]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Up-to-date image for glacier mapping (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC80611072014036LGN00",name:"imagico.de: Scott Island",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC80611072014036LGN00&z={zoom}&x={x}&y={-y}",endDate:"2014-02-05T00:00:00.000Z",startDate:"2014-02-05T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[-180,-67.42635],[-180,-67.32544],[-179.82473,-67.32538],[-179.82473,-67.42635],[-180,-67.42635]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Missing in other image sources (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC82100972015347LGN00",name:"imagico.de: Shag Rocks",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC82100972015347LGN00&z={zoom}&x={x}&y={-y}",endDate:"2015-12-13T00:00:00.000Z",startDate:"2015-12-13T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[-42.12875,-53.7205],[-42.14626,-53.45782],[-41.67573,-53.44586],[-41.65582,-53.70872],[-42.12875,-53.7205]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Missing in other image sources (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC81130622013270LGN00",name:"imagico.de: Southeastern Sulawesi",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC81130622013270LGN00&z={zoom}&x={x}&y={-y}",endDate:"2013-09-27T00:00:00.000Z",startDate:"2013-09-27T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[120.84382,-3.59545],[120.84382,-3.15985],[120.98184,-2.51468],[122.62618,-2.51468],[122.62618,-3.00215],[122.5007,-3.59545],[120.84382,-3.59545]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Missing islands and coarse coastline due to cloud cover in Bing, lakes could also use additional detail (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC80281222016035LGN00",name:"imagico.de: Southern Transantarctic Mountains",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC80281222016035LGN00&z={zoom}&x={x}&y={-y}",endDate:"2016-02-04T00:00:00.000Z",startDate:"2016-02-04T00:00:00.000Z",zoomExtent:[0,10],polygon:[[[156.96951,-84.50098],[154.50858,-84.46255],[154.50858,-82.60681],[175.46774,-82.58505],[177.00583,-83.52807],[177.00583,-84.19262],[171.93839,-84.34633],[166.83798,-84.4437],[161.67029,-84.50045],[156.96951,-84.50098]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Outside regular Landsat coverage and therefore not in LIMA and Bing/Mapbox (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC81030632015286LGN00",name:"imagico.de: Sudirman Range 2015",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC81030632015286LGN00&z={zoom}&x={x}&y={-y}",endDate:"2015-10-13T00:00:00.000Z",startDate:"2015-10-13T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[136.4226,-4.2853],[136.4226,-3.6447],[137.7971,-3.6447],[137.7971,-4.2853],[136.4226,-4.2853]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Older image of the Sudirman Range with no fresh snow showing glacier extent (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R088_S05_20160812T011732",name:"imagico.de: Sudirman Range 2016",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R088_S05_20160812T011732&z={zoom}&x={x}&y={-y}",endDate:"2016-08-12T00:00:00.000Z",startDate:"2016-08-12T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[136.8044,-4.2585],[136.8044,-3.7836],[137.7701,-3.7836],[137.7701,-4.2585],[136.8044,-4.2585]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Cloud free image of the Sudirman Range but with fresh snow (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-s2sval",name:"imagico.de: Svalbard mosaic",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=s2sval&z={zoom}&x={x}&y={-y}",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",zoomExtent:[0,12],polygon:[[[16.6108,76.4137],[16.4731,76.4268],[16.3788,76.4589],[14.4124,77.1324],[14.0784,77.2536],[10.9875,78.4054],[10.631,78.5605],[10.2314,78.8392],[10.3952,79.6074],[10.516,79.7731],[10.9632,79.8707],[20.2294,80.849],[20.4702,80.8493],[25.1752,80.6817],[33.4391,80.3438],[33.7809,80.3016],[34.0395,80.239],[33.977,80.1527],[25.5722,76.5917],[25.2739,76.481],[25.1416,76.4327],[24.937,76.4176],[16.6108,76.4137]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Sentinel-2 mosaic of Svalbard (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-DMS_1142636_160xx_20110507_1822xxxx",name:"imagico.de: Thule Air Base",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=DMS_1142636_160xx_20110507_1822xxxx&z={zoom}&x={x}&y={-y}",endDate:"2011-05-07T00:00:00.000Z",startDate:"2011-05-07T00:00:00.000Z",zoomExtent:[0,15],polygon:[[[-68.93977,76.51133],[-68.93977,76.5499],[-68.76635,76.55176],[-68.50993,76.55176],[-68.50744,76.51612],[-68.67897,76.51194],[-68.93977,76.51133]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Icebridge DMS image - alignment might be poor",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-dms_thule2_2015.09.25",name:"imagico.de: Thule Airbase DMS low altitude overflight September 2015",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=dms_thule2_2015.09.25&z={zoom}&x={x}&y={-y}",endDate:"2015-09-25T00:00:00.000Z",startDate:"2015-09-25T00:00:00.000Z",zoomExtent:[0,17],polygon:[[[-68.74292,76.52636],[-68.74446,76.5284],[-68.74807,76.54939],[-68.74615,76.56017],[-68.72276,76.56022],[-68.72017,76.55775],[-68.71853,76.52921],[-68.71978,76.52637],[-68.74292,76.52636]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Icebridge DMS aerial images from Thule Airbase - alignment might be poor",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-dms_thule_2015.10.06",name:"imagico.de: Thule Airbase DMS overflight October 2015",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=dms_thule_2015.10.06&z={zoom}&x={x}&y={-y}",endDate:"2015-10-06T00:00:00.000Z",startDate:"2015-10-06T00:00:00.000Z",zoomExtent:[0,16],polygon:[[[-68.81924,76.5251],[-68.82651,76.54177],[-68.77345,76.5439],[-68.7021,76.54545],[-68.59177,76.5456],[-68.59183,76.52793],[-68.6597,76.5251],[-68.81924,76.5251]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Icebridge DMS aerial images from Thule Airbase - alignment might be poor",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-dms_thule_2015.09.25",name:"imagico.de: Thule Airbase DMS overflight September 2015",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=dms_thule_2015.09.25&z={zoom}&x={x}&y={-y}",endDate:"2015-09-25T00:00:00.000Z",startDate:"2015-09-25T00:00:00.000Z",zoomExtent:[0,16],polygon:[[[-68.77771,76.50688],[-68.77662,76.57064],[-68.68115,76.57065],[-68.6763,76.55384],[-68.6762,76.53074],[-68.68523,76.50688],[-68.77771,76.50688]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Icebridge DMS aerial images from Thule Airbase - alignment might be poor",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R094_N79_20160812T105622",name:"imagico.de: Ushakov Island August 2016",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R094_N79_20160812T105622&z={zoom}&x={x}&y={-y}",endDate:"2016-08-12T00:00:00.000Z",startDate:"2016-08-12T00:00:00.000Z",zoomExtent:[0,12],polygon:[[[78.45886,80.72643],[78.45886,80.9099],[80.48892,80.9099],[80.48892,80.72643],[78.45886,80.72643]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Up-to-date late summer imagery with few clouds (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC80910682014358LGN00",name:"imagico.de: Vanatinai",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC80910682014358LGN00&z={zoom}&x={x}&y={-y}",endDate:"2014-12-24T00:00:00.000Z",startDate:"2014-12-24T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[153.06138,-11.78923],[153.06138,-11.28869],[153.10927,-11.07229],[154.41201,-11.07229],[154.41201,-11.78923],[153.06138,-11.78923]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Coarse coastline due to cloud cover in Bing/Mapbox (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC82330892016031LGN00",name:"imagico.de: Volcán Calbuco",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC82330892016031LGN00&z={zoom}&x={x}&y={-y}",endDate:"2016-01-31T00:00:00.000Z",startDate:"2016-01-31T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[-72.86696,-41.51741],[-72.86696,-41.04527],[-72.23181,-41.04527],[-71.8751,-41.10829],[-72.00007,-41.51741],[-72.86696,-41.51741]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Image from after the 2015 eruption (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R089_N52_20160623T024048",name:"imagico.de: Vostochny Cosmodrome",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R089_N52_20160623T024048&z={zoom}&x={x}&y={-y}",endDate:"2016-06-23T00:00:00.000Z",startDate:"2016-06-23T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[126.36143,51.37553],[126.34804,52.33932],[128.60762,52.3409],[128.61174,51.37553],[126.36143,51.37553]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Recent image showing newest features (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-walps_autumn_2017",name:"imagico.de: Western Alps autumn colors 2017",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=walps_autumn_2017&z={zoom}&x={x}&y={-y}",endDate:"2017-10-17T00:00:00.000Z",startDate:"2017-10-17T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[4.6412,43.2493],[4.3118,43.2653],[4.3118,44.2167],[5.2562,46.965],[5.9151,48.7177],[7.3866,48.7467],[10.088,48.7467],[10.088,48.7032],[7.7819,43.2813],[7.76,43.2653],[7.3646,43.2493],[4.6412,43.2493]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Autumn colors in the Alps, Jura and southwestern Germany (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC81490352013282LGN00",name:"imagico.de: Western Karakoram",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC81490352013282LGN00&z={zoom}&x={x}&y={-y}",endDate:"2013-10-09T00:00:00.000Z",startDate:"2013-10-09T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[75.98364,34.97851],[73.96164,35.36957],[74.44281,37.09391],[76.50601,36.70267],[75.98364,34.97851]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Represents approximately minimum snow cover so can be well used for glacier mapping (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R039_S15_20160510T145731",name:"imagico.de: Willkanuta Mountains and Quelccaya Ice Cap",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R039_S15_20160510T145731&z={zoom}&x={x}&y={-y}",endDate:"2016-05-10T00:00:00.000Z",startDate:"2016-05-10T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[-71.18071,-14.49785],[-71.17976,-13.71029],[-70.55637,-13.71263],[-70.55637,-14.49785],[-71.18071,-14.49785]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Poor and outdated imagery in other sources (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"IPR-orotofoto-last-tms",name:"IPR ortofoto LAST (tmsproxy)",type:"tms",template:"https://osm-{switch:a,b,c}.zby.cz/tiles_ipr_last.php/{zoom}/{x}/{y}.jpg",zoomExtent:[1,20],polygon:[[[14.81232,49.93089],[14.18755,49.87687],[14.12025,50.19882],[14.74502,50.25247],[14.81232,49.93089]]]},{id:"IPR-orotofoto-vege-tms",name:"IPR ortofoto Low-Vegetation (tmsproxy)",type:"tms",template:"https://osm-{switch:a,b,c}.zby.cz/tiles_ipr_vege.php/{zoom}/{x}/{y}.jpg",zoomExtent:[1,20],polygon:[[[14.30454,49.99538],[14.31604,49.94205],[14.35,49.94508],[14.35384,49.92726],[14.42385,49.93352],[14.42009,49.95097],[14.48865,49.95709],[14.48479,49.97501],[14.55386,49.98117],[14.55012,49.99852],[14.58455,50.00159],[14.5883,49.98424],[14.69168,49.99346],[14.67634,50.06453],[14.71279,50.06777],[14.70115,50.12158],[14.6647,50.11834],[14.661,50.13543],[14.62755,50.13246],[14.61965,50.16895],[14.58543,50.16591],[14.58163,50.18344],[14.40776,50.168],[14.41156,50.15045],[14.37765,50.14744],[14.3738,50.16524],[14.33893,50.16214],[14.34278,50.14434],[14.27368,50.1382],[14.27749,50.12058],[14.2088,50.11447],[14.21289,50.09557],[14.24656,50.09857],[14.25417,50.06336],[14.21987,50.0603],[14.2237,50.04259],[14.258,50.04565],[14.26953,49.99226],[14.30454,49.99538]]]},{id:"GSGS3906",name:"Ireland British War Office 1:25k GSGS 3906",type:"tms",template:"https://mapwarper.net/layers/tile/101/{zoom}/{x}/{y}.png",zoomExtent:[0,18],polygon:[[[-9.31139,51.43828],[-7.36131,51.99302],[-7.33934,52.13149],[-6.9658,52.06231],[-6.23796,52.1534],[-6.21049,52.52928],[-5.98253,52.80079],[-5.96056,53.67037],[-6.20775,53.67851],[-6.22423,53.95255],[-5.86442,54.12513],[-5.85893,54.20392],[-5.53483,54.23122],[-5.39476,54.44739],[-5.50188,54.70052],[-6.21873,55.38194],[-6.86418,55.2162],[-7.25145,55.46455],[-7.53435,55.30853],[-8.25395,55.26787],[-8.61101,54.97259],[-8.49016,54.89369],[-8.83897,54.68306],[-8.42699,54.52397],[-8.75108,54.31302],[-9.29765,54.38985],[-10.05296,54.37866],[-10.30015,54.05747],[-10.02275,53.79386],[-10.30565,53.55142],[-9.99803,53.24354],[-9.09166,53.19256],[-9.81676,53.1102],[-9.48167,52.96984],[-9.70415,52.68107],[-10.00627,52.63608],[-9.78929,52.52426],[-9.99803,52.32663],[-10.64348,52.1753],[-10.39629,51.9761],[-10.16832,51.64668],[-10.28642,51.57334],[-9.88542,51.57163],[-9.79204,51.44684],[-9.31139,51.43828]]],terms_url:"https://wiki.openstreetmap.org/wiki/Ireland/Background_Imagery#Trinity_College_Dublin",terms_text:"Glucksman Map Library, Trinity College Dublin",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/ie/IrelandBritishWarOffice-GSGS3906.png"},{id:"Israel_Hiking",name:"Israel Hiking",type:"tms",template:"https://israelhiking.osm.org.il/Tiles/{zoom}/{x}/{y}.png",zoomExtent:[7,16],polygon:[[[34.64563,32.92073],[34.98374,33.13352],[35.15662,33.09994],[35.31781,33.11463],[35.36541,33.06285],[35.46229,33.09994],[35.51741,33.12652],[35.5266,33.21531],[35.53893,33.25442],[35.56446,33.2969],[35.61264,33.27918],[35.67429,33.30627],[35.70785,33.34269],[35.75363,33.35091],[35.81509,33.3392],[35.91531,32.9406],[35.80834,32.772],[35.77835,32.72446],[35.59491,32.62828],[35.5729,32.36541],[35.59461,32.21856],[35.55452,32.02901],[35.57225,31.75415],[35.48771,31.41951],[35.4209,31.25116],[35.47936,31.1783],[35.42771,30.95172],[35.3321,30.77107],[35.20709,30.53307],[35.17202,30.11204],[35.07514,29.83713],[35.02336,29.64569],[34.93992,29.39946],[34.89517,29.37711],[34.84785,29.59084],[34.69667,30.10714],[34.52423,30.40912],[34.48879,30.64515],[34.07929,31.52265],[34.64563,32.92073]]],terms_url:"https://israelhiking.osm.org.il/",terms_text:"Tiles © IsraelHiking, CC BY-SA-NC 3.0. Data by OpenStreetMap under ODbL.",description:"Israel Hiking map",icon:"https://israelhiking.osm.org.il/content/favicons/favicon.ico"},{id:"Israel_MTB",name:"Israel MTB",type:"tms",template:"https://israelhiking.osm.org.il/MTBTiles/{zoom}/{x}/{y}.png",zoomExtent:[7,16],polygon:[[[34.64563,32.92073],[34.98374,33.13352],[35.15662,33.09994],[35.31781,33.11463],[35.36541,33.06285],[35.46229,33.09994],[35.51741,33.12652],[35.5266,33.21531],[35.53893,33.25442],[35.56446,33.2969],[35.61264,33.27918],[35.67429,33.30627],[35.70785,33.34269],[35.75363,33.35091],[35.81509,33.3392],[35.91531,32.9406],[35.80834,32.772],[35.77835,32.72446],[35.59491,32.62828],[35.5729,32.36541],[35.59461,32.21856],[35.55452,32.02901],[35.57225,31.75415],[35.48771,31.41951],[35.4209,31.25116],[35.47936,31.1783],[35.42771,30.95172],[35.3321,30.77107],[35.20709,30.53307],[35.17202,30.11204],[35.07514,29.83713],[35.02336,29.64569],[34.93992,29.39946],[34.89517,29.37711],[34.84785,29.59084],[34.69667,30.10714],[34.52423,30.40912],[34.48879,30.64515],[34.07929,31.52265],[34.64563,32.92073]]],terms_url:"https://israelhiking.osm.org.il/",terms_text:"Tiles © IsraelHiking, CC BY-SA-NC 3.0. Data by OpenStreetMap under ODbL.",description:"Israel MTB map",icon:"https://israelhiking.osm.org.il/content/favicons/favicon.ico"},{id:"ITACyL-Castile-and-Leon",name:"ITACyL - Castile and León",type:"wms",template:"http://orto.wms.itacyl.es/WMS?REQUEST=GetMap&SERVICE=WMS&VERSION=1.1.1&LAYERS=Ortofoto_CyL&SRS={proj}&FORMAT=image/jpeg&STYLES=Default&TRANSPARENT=TRUE&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[-1.9358,41.43834],[-1.89601,41.43869],[-1.89536,41.39687],[-1.9767,41.39616],[-1.97639,41.37623],[-2.06201,41.37548],[-2.06262,41.41471],[-2.10458,41.41434],[-2.10363,41.35367],[-2.14448,41.35331],[-2.1419,41.18683],[-2.06204,41.18753],[-2.06171,41.16624],[-2.02046,41.16661],[-2.01887,41.06334],[-2.10083,41.06262],[-2.10114,41.08296],[-2.22733,41.08185],[-2.22704,41.0635],[-2.26912,41.06313],[-2.2688,41.04257],[-2.35325,41.04182],[-2.35356,41.06148],[-2.39487,41.06112],[-2.39457,41.04206],[-2.43722,41.04168],[-2.43756,41.06315],[-2.47928,41.06278],[-2.47991,41.10369],[-2.52078,41.10333],[-2.5211,41.12429],[-2.60415,41.12357],[-2.60481,41.16628],[-2.6471,41.16591],[-2.64808,41.22931],[-2.72874,41.2286],[-2.72907,41.24974],[-2.89552,41.24828],[-2.89649,41.31063],[-2.9363,41.31028],[-2.93571,41.27231],[-3.14692,41.27046],[-3.14723,41.29045],[-3.22828,41.28974],[-3.22767,41.25008],[-3.39581,41.2486],[-3.39518,41.20808],[-3.43492,41.20773],[-3.43429,41.16696],[-3.47877,41.16657],[-3.47844,41.14556],[-3.60336,41.14446],[-3.6027,41.10169],[-3.64539,41.10131],[-3.64508,41.08159],[-3.68735,41.08122],[-3.68673,41.04104],[-3.72866,41.04067],[-3.72803,40.9998],[-3.76896,40.99944],[-3.76864,40.97886],[-3.85473,40.97811],[-3.8544,40.95653],[-3.89857,40.95615],[-3.89764,40.89575],[-3.93906,40.89539],[-3.93716,40.77204],[-4.06198,40.77093],[-4.06133,40.72926],[-4.10372,40.72888],[-4.10311,40.68918],[-4.14628,40.6888],[-4.14498,40.60421],[-4.19025,40.60381],[-4.18994,40.58362],[-4.22946,40.58327],[-4.22979,40.60487],[-4.27054,40.60451],[-4.26958,40.54211],[-4.31384,40.54171],[-4.31163,40.39758],[-4.39376,40.39685],[-4.39345,40.37677],[-4.43723,40.37638],[-4.43623,40.31123],[-4.52192,40.31046],[-4.52037,40.20897],[-4.56131,40.2086],[-4.56099,40.18763],[-4.68895,40.18649],[-4.68933,40.21101],[-4.73192,40.21063],[-4.73252,40.24966],[-4.76838,40.24934],[-4.76809,40.23035],[-4.81104,40.22996],[-4.81147,40.20726],[-4.8542,40.18414],[-4.85264,40.12563],[-4.93699,40.12488],[-4.93638,40.08529],[-5.35538,40.08155],[-5.35606,40.12562],[-5.44027,40.12487],[-5.44091,40.16673],[-5.60382,40.16527],[-5.60448,40.20881],[-5.68646,40.20808],[-5.68712,40.25131],[-6.02166,40.24834],[-6.02295,40.33257],[-6.10433,40.33184],[-6.1056,40.41451],[-6.18951,40.41376],[-6.19018,40.45745],[-6.26971,40.45675],[-6.26909,40.41653],[-6.35192,40.41579],[-6.35128,40.37422],[-6.43325,40.37349],[-6.43264,40.33361],[-6.52245,40.33281],[-6.52116,40.24849],[-6.59942,40.24779],[-6.59886,40.21128],[-6.85568,40.20899],[-6.85634,40.25257],[-6.93622,40.25186],[-6.93751,40.33657],[-6.85111,40.33734],[-6.86001,40.91672],[-6.93544,40.91605],[-6.93741,41.0435],[-6.85482,41.04423],[-6.85548,41.08706],[-6.77015,41.08781],[-6.77245,41.23623],[-6.68379,41.23701],[-6.60436,41.2377],[-6.60524,41.29474],[-6.5193,41.29549],[-6.51991,41.33479],[-6.43673,41.33552],[-6.43801,41.41814],[-6.35318,41.41888],[-6.35447,41.50141],[-6.26889,41.50216],[-6.2708,41.6245],[-6.35661,41.62375],[-6.35724,41.66401],[-6.43548,41.66333],[-6.4349,41.62651],[-6.52279,41.62575],[-6.52343,41.66635],[-6.6034,41.66565],[-6.60733,41.9166],[-7.02209,41.913],[-7.02406,42.03872],[-7.1054,42.03801],[-7.10613,42.08421],[-7.0208,42.08495],[-7.02276,42.2094],[-6.93699,42.21014],[-6.93763,42.25087],[-6.8548,42.25159],[-6.85545,42.29329],[-6.77342,42.294],[-6.77403,42.33244],[-6.85325,42.33176],[-6.85523,42.4569],[-7.10341,42.45477],[-7.10811,42.75115],[-7.02199,42.75189],[-7.02241,42.77825],[-6.93976,42.77896],[-6.94199,42.91962],[-6.77302,42.92106],[-6.77363,42.95958],[-6.52329,42.96172],[-6.52391,43.00095],[-6.43893,43.00167],[-6.44024,43.08361],[-5.93782,43.08789],[-5.93708,43.04189],[-5.85421,43.0426],[-5.85357,43.00258],[-5.77236,43.00327],[-5.77363,43.08308],[-5.6027,43.08453],[-5.60202,43.04222],[-5.52161,43.04291],[-5.52226,43.08409],[-5.4376,43.08481],[-5.43827,43.12651],[-5.10444,43.12935],[-5.10573,43.2099],[-5.02386,43.2106],[-5.02451,43.25117],[-4.90017,43.25222],[-4.89941,43.20501],[-4.81126,43.20576],[-4.80966,43.10538],[-4.76975,43.10571],[-4.76937,43.08168],[-4.72945,43.08202],[-4.72881,43.04219],[-4.56322,43.0436],[-4.56353,43.06296],[-4.39599,43.06438],[-4.39566,43.04336],[-4.3537,43.04371],[-4.35266,42.97836],[-4.23013,42.9794],[-4.22913,42.91625],[-4.18774,42.9166],[-4.18706,42.87407],[-4.10552,42.87476],[-4.10486,42.83348],[-3.97801,42.83457],[-3.97733,42.79214],[-3.9375,42.79248],[-3.93781,42.81183],[-3.85397,42.81254],[-3.85427,42.83193],[-3.89573,42.83158],[-3.89607,42.85343],[-3.93821,42.85307],[-3.93889,42.89577],[-3.9806,42.89542],[-3.98093,42.91627],[-4.0222,42.91591],[-4.0229,42.96014],[-3.97851,42.96052],[-3.97946,43.01999],[-3.93883,43.02034],[-3.93918,43.04239],[-3.89704,43.04275],[-3.89738,43.06414],[-3.85424,43.06451],[-3.8549,43.10583],[-3.77086,43.10654],[-3.77116,43.12515],[-3.72819,43.12551],[-3.72853,43.14656],[-3.68713,43.14691],[-3.68778,43.18786],[-3.60365,43.18858],[-3.60331,43.16747],[-3.52278,43.16815],[-3.52243,43.14619],[-3.39669,43.14726],[-3.39699,43.16601],[-3.35444,43.16637],[-3.35479,43.18837],[-3.31268,43.18873],[-3.31299,43.20828],[-3.22993,43.20899],[-3.22959,43.18768],[-3.10343,43.18875],[-3.10274,43.14562],[-3.14546,43.14526],[-3.14516,43.1271],[-3.10617,43.12743],[-3.10445,43.01915],[-3.02075,43.01987],[-3.0201,42.97903],[-2.9811,42.97936],[-2.97977,42.8958],[-3.10476,42.89473],[-3.10276,42.76928],[-3.02199,42.76997],[-3.02168,42.74983],[-2.98024,42.75019],[-2.97988,42.7275],[-2.89613,42.72822],[-2.89679,42.76967],[-2.8534,42.77004],[-2.85405,42.81087],[-2.68577,42.81231],[-2.68544,42.79159],[-2.64523,42.79194],[-2.64489,42.77024],[-2.52005,42.7713],[-2.51936,42.72827],[-2.5607,42.72791],[-2.56038,42.7076],[-2.51944,42.70795],[-2.5181,42.62357],[-2.60404,42.62283],[-2.60439,42.64497],[-2.77154,42.64353],[-2.77188,42.66544],[-2.81176,42.6651],[-2.8121,42.68624],[-2.85469,42.68588],[-2.85337,42.60302],[-2.89413,42.60267],[-2.89379,42.58159],[-3.0619,42.58015],[-3.06031,42.47952],[-3.02191,42.47985],[-3.0199,42.3525],[-3.06255,42.35213],[-3.06029,42.20906],[-3.1012,42.20871],[-3.10086,42.18682],[-3.06175,42.18716],[-3.0611,42.14559],[-3.02029,42.14594],[-3.01963,42.10375],[-2.89602,42.10482],[-2.89501,42.04071],[-2.81222,42.04143],[-2.81353,42.1246],[-2.76871,42.12499],[-2.76905,42.14674],[-2.72695,42.14711],[-2.7266,42.12485],[-2.68706,42.12519],[-2.68605,42.06109],[-2.72804,42.06073],[-2.72739,42.0193],[-2.60343,42.02037],[-2.60376,42.04135],[-2.561,42.04173],[-2.56198,42.10411],[-2.52266,42.10445],[-2.52299,42.12577],[-2.47933,42.12615],[-2.47963,42.145],[-2.35517,42.14608],[-2.3555,42.16747],[-2.31184,42.16785],[-2.3115,42.14605],[-2.2699,42.14641],[-2.26924,42.1048],[-2.2295,42.10515],[-2.22981,42.12514],[-2.14467,42.12587],[-2.14432,42.10386],[-2.10385,42.10421],[-2.10156,41.95811],[-1.97689,41.95919],[-1.97655,41.93765],[-1.93473,41.93801],[-1.93504,41.95776],[-1.89453,41.95811],[-1.89483,41.97715],[-1.854,41.97751],[-1.85304,41.91638],[-1.81381,41.91672],[-1.81151,41.76984],[-1.7706,41.77019],[-1.76866,41.64582],[-1.85335,41.64508],[-1.85305,41.62567],[-1.89471,41.6253],[-1.89403,41.58215],[-1.97716,41.58142],[-1.97683,41.56021],[-1.9377,41.56055],[-1.9358,41.43834]]],terms_text:"ITACyL"},{id:"gsi.go.jp_airphoto",name:"Japan GSI airphoto Imagery",type:"tms",template:"http://cyberjapandata.gsi.go.jp/xyz/airphoto/{zoom}/{x}/{y}.png",zoomExtent:[14,18],polygon:[[[140.88867,45.67548],[140.71289,45.41388],[141.04248,43.80282],[139.96582,43.35714],[138.99902,42.01665],[139.04297,41.26129],[137.5708,38.58253],[132.69287,36.86204],[130.84717,34.93999],[129.74854,34.994],[129.02344,34.56086],[128.36426,33.21112],[127.90283,31.87756],[128.4082,29.89781],[125.8374,26.78485],[123.33252,25.0657],[122.58545,24.42715],[123.53027,23.44309],[125.88135,24.10665],[129.96826,26.31311],[132.1875,30.20211],[134.42871,32.43561],[136.82373,33.28462],[137.85645,34.21634],[138.64746,33.24788],[138.58154,32.00808],[139.6582,28.67131],[141.65771,29.66896],[142.0752,32.06396],[141.21826,33.37641],[141.56982,35.44277],[141.43799,36.52729],[142.82227,39.16414],[143.04199,40.89691],[145.92041,42.40723],[146.18408,43.03678],[145.74463,43.54855],[145.32715,43.67582],[145.30518,43.91372],[145.61279,44.2452],[145.41504,44.62175],[144.38232,44.52784],[142.31689,45.53714],[141.3501,45.70618],[140.88867,45.67548]]],terms_url:"http://www.gsi.go.jp/kikakuchousei/kikakuchousei40182.html",terms_text:"GSI Japan",description:"Japan GSI airphoto Imagery. Not fully orthorectified, but a bit newer and/or differently covered than GSI ortho Imagery."},{id:"finds.jp_KBN_2500",name:"Japan GSI KIBAN 2500",type:"tms",template:"http://www.finds.jp/ws/tmc/1.0.0/KBN2500FN-900913-L/{zoom}/{x}/{y}.png",zoomExtent:[15,20],polygon:[[[140.88867,45.67548],[140.71289,45.41388],[141.04248,43.80282],[139.96582,43.35714],[138.99902,42.01665],[139.04297,41.26129],[137.5708,38.58253],[132.69287,36.86204],[130.84717,34.93999],[129.74854,34.994],[129.02344,34.56086],[128.36426,33.21112],[127.90283,31.87756],[128.4082,29.89781],[125.8374,26.78485],[123.33252,25.0657],[122.58545,24.42715],[123.53027,23.44309],[125.88135,24.10665],[129.96826,26.31311],[132.1875,30.20211],[134.42871,32.43561],[136.82373,33.28462],[137.85645,34.21634],[138.64746,33.24788],[138.58154,32.00808],[139.6582,28.67131],[141.65771,29.66896],[142.0752,32.06396],[141.21826,33.37641],[141.56982,35.44277],[141.43799,36.52729],[142.82227,39.16414],[143.04199,40.89691],[145.92041,42.40723],[146.18408,43.03678],[145.74463,43.54855],[145.32715,43.67582],[145.30518,43.91372],[145.61279,44.2452],[145.41504,44.62175],[144.38232,44.52784],[142.31689,45.53714],[141.3501,45.70618],[140.88867,45.67548]]],terms_url:"http://www.finds.jp/siteinfo/c_tou.html.ja",terms_text:"GSI KIBAN 2500",description:"GSI Kiban 2500 via finds.jp. Good for tracing, but a bit older."},{id:"gsi.go.jp",name:"Japan GSI ortho Imagery",type:"tms",template:"https://cyberjapandata.gsi.go.jp/xyz/ort/{zoom}/{x}/{y}.jpg",zoomExtent:[5,19],polygon:[[[130.35021,31.45741],[130.26851,31.45817],[130.20875,31.44939],[130.1002,31.44996],[130.09237,31.3919],[130.13355,31.37528],[130.35043,31.37528],[130.35021,31.45741]],[[130.4193,31.41715],[130.417,31.41672],[130.41677,31.47525],[130.34179,31.47506],[130.34179,31.48374],[130.33362,31.48374],[130.33329,31.50044],[130.36675,31.49997],[130.36664,31.52458],[130.35019,31.52544],[130.35041,31.54986],[130.32523,31.55024],[130.32501,31.60029],[130.31661,31.63336],[130.31634,31.65084],[130.3752,31.65084],[130.31164,31.67599],[130.29194,31.69179],[130.29105,31.73235],[130.2521,31.73387],[130.24986,31.71693],[130.24427,31.71712],[130.21629,31.75804],[130.17533,31.75919],[130.17422,31.78259],[130.18384,31.79096],[130.23644,31.79096],[130.26911,31.77003],[130.36334,31.75785],[130.42668,31.70893],[130.62409,31.7076],[130.62588,31.68627],[130.61088,31.62245],[130.55582,31.50249],[130.54239,31.41715],[130.42158,31.41715],[130.4193,31.41715]],[[130.52516,31.24184],[130.54441,31.24107],[130.56858,31.21715],[130.59924,31.21657],[130.59924,31.26633],[130.57641,31.26633],[130.57351,31.31625],[130.6308,31.28393],[130.68989,31.27666],[130.66706,31.26059],[130.66594,31.21925],[130.64401,31.18135],[130.59007,31.14688],[130.54239,31.17503],[130.54239,31.1913],[130.50009,31.19207],[130.50009,31.21581],[130.52494,31.21715],[130.52516,31.24184]],[[130.74987,31.16622],[130.74965,31.24107],[130.77449,31.25887],[130.77718,31.33307],[130.75122,31.37455],[130.74898,31.41658],[130.67557,31.46852],[130.67489,31.50077],[131.40006,31.5002],[131.40834,31.45916],[131.36694,31.40932],[131.3656,31.35142],[131.31703,31.34206],[131.29957,31.36595],[131.24317,31.36633],[131.19952,31.43358],[131.14782,31.45019],[131.13394,31.45],[131.1326,31.42899],[131.10059,31.42536],[131.05091,31.41639],[131.04912,31.39155],[131.08403,31.35085],[131.11626,31.35085],[131.11783,31.33422],[130.99943,31.33365],[130.99965,31.25102],[130.87521,31.25064],[130.87454,31.16679],[130.74987,31.16622]],[[130.86625,30.47468],[130.86602,30.49937],[130.93362,30.57493],[130.93227,30.61597],[131.00636,30.61655],[131.04933,30.59112],[131.04933,30.54275],[130.99203,30.50843],[130.99114,30.47526],[130.86625,30.47468]],[[137.87486,36.37519],[138.00005,36.37494],[138.00005,36.30839],[138.04159,36.30827],[138.04191,36.29175],[138.08306,36.29162],[138.08353,36.2499],[138.13307,36.24996],[138.13354,36.16677],[138.16654,36.1667],[138.16694,36.12485],[138.04167,36.12491],[138.04144,36.04158],[137.87479,36.04152],[137.87486,36.37519]],[[138.37446,35.83393],[138.4998,35.83285],[138.4998,35.75042],[138.74936,35.7506],[138.7507,35.58332],[138.62447,35.58386],[138.62536,35.49991],[138.37491,35.49972],[138.37446,35.83393]],[[135.79179,35.64165],[135.8006,35.64923],[135.834,35.65052],[135.8916,35.62003],[135.89271,35.6091],[135.95776,35.60858],[135.9834,35.6172],[135.98435,35.641],[135.95095,35.6419],[135.95048,35.68305],[135.94225,35.69204],[135.94178,35.73239],[136.00809,35.77516],[136.03167,35.77503],[136.05018,35.75012],[136.05003,35.66646],[136.0084,35.65836],[136.00856,35.61694],[136.03404,35.60022],[136.06664,35.59996],[136.06617,35.61656],[136.1002,35.62492],[136.1002,35.69127],[136.07598,35.69166],[136.07503,35.74922],[136.08342,35.76694],[136.12441,35.76605],[136.15021,35.7004],[136.15875,35.64216],[136.17442,35.62492],[136.17553,35.58342],[136.1749,35.55813],[136.15859,35.55832],[136.15875,35.56701],[136.1165,35.56675],[136.11626,35.52555],[136.04045,35.5247],[136.01684,35.50311],[136.01661,35.48334],[135.97543,35.48334],[135.94141,35.50885],[135.94186,35.56641],[135.93358,35.57487],[135.90873,35.57514],[135.90851,35.59953],[135.83185,35.59972],[135.7928,35.62519],[135.79179,35.64165]],[[135.80916,35.47505],[135.77044,35.53345],[135.7579,35.53326],[135.74168,35.51641],[135.70072,35.51705],[135.67464,35.53363],[135.67543,35.56659],[135.6996,35.58333],[135.81654,35.58343],[135.81654,35.56804],[135.85817,35.54956],[135.85851,35.52543],[135.8509,35.5247],[135.85012,35.47514],[135.80916,35.47505]],[[135.58333,35.44132],[135.61656,35.44989],[135.64163,35.47496],[135.71639,35.47478],[135.71728,35.46703],[135.81442,35.46539],[135.86668,35.44187],[135.86679,35.40868],[135.81722,35.40822],[135.81677,35.38496],[135.77548,35.3835],[135.75835,35.40804],[135.59183,35.4084],[135.58322,35.42536],[135.58333,35.44132]],[[135.40011,35.43312],[135.42496,35.44189],[135.45803,35.45008],[135.45899,35.49164],[135.46642,35.49184],[135.46619,35.50807],[135.44181,35.51709],[135.43968,35.53293],[135.45843,35.55804],[135.52324,35.55811],[135.52498,35.5091],[135.54152,35.50008],[135.54152,35.4834],[135.57515,35.48366],[135.57491,35.49164],[135.60878,35.49171],[135.60894,35.46684],[135.59208,35.45826],[135.53305,35.45826],[135.50029,35.45008],[135.50045,35.4415],[135.50789,35.42506],[135.53337,35.42513],[135.53297,35.38346],[135.5416,35.38333],[135.54176,35.36688],[135.5086,35.35836],[135.50892,35.34216],[135.50013,35.34164],[135.50013,35.41662],[135.39987,35.41655],[135.40011,35.43312]],[[133.70822,35.45816],[133.70822,35.33319],[133.12484,35.33328],[133.12495,35.3749],[132.95877,35.37508],[132.95821,35.4578],[132.87506,35.45853],[132.87461,35.52504],[132.95015,35.52522],[132.9497,35.55819],[133.01674,35.55855],[133.01685,35.56675],[133.03352,35.56693],[133.03308,35.59205],[133.06687,35.59187],[133.06654,35.6168],[133.14135,35.61671],[133.14151,35.59181],[133.36667,35.59186],[133.36689,35.57484],[133.34216,35.57447],[133.34194,35.558],[133.33321,35.55026],[133.28363,35.55017],[133.28341,35.49178],[133.33354,35.4916],[133.33354,35.47529],[133.41714,35.47492],[133.41714,35.37516],[133.49995,35.37534],[133.49973,35.45806],[133.45854,35.45806],[133.45854,35.51629],[133.49212,35.5335],[133.54136,35.54161],[133.58343,35.54197],[133.58355,35.45843],[133.70822,35.45816]],[[133.84174,35.46646],[133.84158,35.58367],[133.975,35.58329],[133.97532,35.5086],[134.00823,35.50834],[134.0334,35.49971],[134.0421,35.47497],[134.04432,35.45834],[134.08357,35.4586],[134.08309,35.53359],[134.13326,35.54969],[134.23328,35.55999],[134.27491,35.58342],[134.33299,35.58367],[134.33521,35.49172],[134.36654,35.49224],[134.36654,35.49997],[134.41718,35.49971],[134.41592,35.5417],[134.6253,35.54157],[134.62514,35.37554],[134.70839,35.37463],[134.70823,35.33398],[134.41655,35.33359],[134.41592,35.37528],[134.39218,35.37541],[134.39155,35.35011],[134.37477,35.33346],[134.20005,35.33359],[134.19939,35.35874],[134.24997,35.39971],[134.27515,35.39962],[134.27504,35.39205],[134.35819,35.39314],[134.35852,35.3999],[134.3752,35.39999],[134.37441,35.42489],[134.33256,35.42507],[134.33278,35.41659],[134.04954,35.41659],[134.05077,35.39178],[134.0661,35.39187],[134.06711,35.39999],[134.14187,35.40017],[134.14164,35.36678],[134.18339,35.35847],[134.18372,35.33337],[133.78309,35.33364],[133.78331,35.34159],[133.82472,35.3592],[133.82505,35.38311],[133.84173,35.40838],[133.89981,35.40893],[133.89981,35.41677],[133.85829,35.41659],[133.8574,35.46646],[133.84174,35.46646]],[[133.24987,33.66667],[133.41786,33.66674],[133.52485,33.66674],[133.52493,33.79178],[133.64157,33.79185],[133.64188,33.66681],[133.75006,33.66687],[133.75029,33.62517],[133.79152,33.62498],[133.79168,33.5084],[133.73336,33.5084],[133.73328,33.51658],[133.64196,33.51671],[133.60833,33.48346],[133.52493,33.46682],[133.47492,33.41935],[133.43313,33.38321],[133.37497,33.38334],[133.37497,33.49157],[133.20817,33.49191],[133.20824,33.55827],[133.24947,33.55833],[133.24987,33.66667]],[[134.3501,33.73355],[134.4832,33.73368],[134.48336,33.66732],[134.43366,33.65033],[134.43287,33.63412],[134.35279,33.63347],[134.3501,33.73355]],[[140.31656,36.21656],[140.31671,36.44984],[140.34973,36.44994],[140.35012,36.51668],[140.47467,36.51671],[140.47483,36.59159],[140.62489,36.59204],[140.62467,36.63354],[140.64974,36.6348],[140.65041,36.71684],[140.69912,36.81554],[140.71006,36.91306],[140.70838,36.95687],[140.74956,36.95866],[140.75323,37.06176],[140.75001,37.16671],[141.00832,37.16666],[141.00837,37.0917],[140.98331,37.05828],[140.98333,36.95834],[140.90834,36.90002],[140.81672,36.89999],[140.80828,36.87498],[140.80833,36.85],[140.81655,36.85004],[140.81669,36.8415],[140.81669,36.81816],[140.79988,36.80832],[140.7834,36.79992],[140.775,36.79523],[140.77498,36.78339],[140.75836,36.775],[140.75825,36.75837],[140.75002,36.75831],[140.74689,36.71939],[140.73336,36.65048],[140.69167,36.58337],[140.65003,36.51336],[140.64998,36.38351],[140.59986,36.27483],[140.57499,36.24796],[140.57463,36.21729],[140.31656,36.21656]],[[141.2166,41.24992],[141.41662,41.24971],[141.39858,41.17052],[141.40426,41.0968],[141.39503,41.04046],[141.39858,40.97185],[141.40625,40.91003],[141.41136,40.83011],[141.41307,40.80204],[141.42245,40.74987],[141.34161,40.75084],[141.3149,40.74556],[141.29203,40.74169],[141.23322,40.7419],[141.23307,40.85837],[141.25026,40.85858],[141.24941,40.91647],[141.17412,40.9169],[141.22498,40.9948],[141.23819,41.0696],[141.2497,41.1258],[141.27143,41.15875],[141.23336,41.22995],[141.2166,41.24992]],[[141.25854,41.3166],[141.15015,41.31672],[141.1499,41.39163],[141.18877,41.39205],[141.21625,41.37916],[141.25849,41.36012],[141.25854,41.3166]],[[141.05841,45.2584],[141.03453,45.25833],[141.00874,45.25815],[141.0083,45.27495],[140.99994,45.27495],[141.00002,45.30371],[140.99999,45.30828],[140.99196,45.30846],[140.99171,45.34162],[140.98351,45.34172],[140.98336,45.34998],[140.97477,45.35008],[140.97502,45.3667],[140.96664,45.36675],[140.96685,45.39818],[140.9665,45.42499],[140.9584,45.42484],[140.95816,45.43314],[140.95012,45.4335],[140.94967,45.51651],[140.97443,45.51672],[140.97448,45.50014],[140.98307,45.50042],[140.98332,45.46697],[140.99045,45.46704],[140.99135,45.45876],[141.00019,45.45813],[141.00035,45.45002],[141.01627,45.4502],[141.01637,45.47496],[141.04992,45.47532],[141.04992,45.46676],[141.06614,45.46679],[141.0665,45.4502],[141.07463,45.44999],[141.07498,45.34178],[141.0666,45.34168],[141.06418,45.30611],[141.06644,45.30565],[141.06629,45.28484],[141.05906,45.28357],[141.05841,45.2584]],[[144.27488,42.96671],[144.27502,42.99155],[144.25861,42.99145],[144.25805,42.98314],[144.20818,42.98319],[144.20854,42.97472],[144.16684,42.97503],[144.16684,43.00496],[144.16642,43.04178],[144.07486,43.04188],[144.07493,43.10025],[144.24988,43.1],[144.24988,43.1168],[144.29179,43.11675],[144.292,43.0919],[144.4168,43.09185],[144.4168,43.1168],[144.56654,43.1168],[144.56675,42.99171],[144.50005,42.9915],[144.5002,42.92481],[144.46653,42.92501],[144.31739,42.96675],[144.27488,42.96671]],[[140.69973,42.57513],[140.70015,42.61647],[140.84451,42.61673],[140.99961,42.61669],[141.00006,42.54168],[141.24984,42.54168],[141.24994,42.58336],[141.29163,42.58332],[141.29158,42.6251],[141.37501,42.62498],[141.37501,42.66662],[141.49992,42.66666],[141.49992,42.8165],[141.47496,42.8165],[141.47511,42.83341],[141.81236,42.83357],[141.95752,42.83328],[141.94355,42.77977],[141.95762,42.77896],[141.95832,42.7502],[141.99991,42.75086],[141.9992,42.71493],[142.00031,42.67632],[142.01799,42.65076],[142.09082,42.65002],[142.09122,42.5251],[142.02472,42.5251],[141.96033,42.52495],[141.8665,42.52518],[141.8656,42.57713],[141.83577,42.58519],[141.80482,42.57417],[141.74646,42.57705],[141.73069,42.61477],[141.61707,42.61055],[141.52134,42.60331],[141.45615,42.57587],[141.3562,42.52866],[141.27523,42.48822],[141.19507,42.43791],[141.10476,42.3914],[141.05393,42.33165],[141.0254,42.29161],[140.95187,42.29146],[140.9147,42.32682],[140.89451,42.37174],[140.88426,42.42723],[140.85041,42.46096],[140.76643,42.49978],[140.76663,42.52821],[140.69973,42.57513]],[[140.75005,43.23374],[140.82762,43.2135],[140.88245,43.22531],[140.97338,43.24601],[141.02139,43.24311],[141.04213,43.20211],[141.08346,43.18205],[141.17267,43.16382],[141.25678,43.19366],[141.37528,43.33327],[141.62491,43.33335],[141.62451,43.4168],[141.79146,43.4168],[141.79197,43.83339],[142.12487,43.83332],[142.12487,43.75022],[142.16656,43.74993],[142.16656,43.83317],[142.24954,43.83325],[142.24984,43.8581],[142.27465,43.8581],[142.27465,43.87425],[142.26671,43.8749],[142.26651,43.91688],[142.24994,43.9171],[142.25001,44.5],[142.49997,44.50013],[142.49977,43.88366],[142.51674,43.88344],[142.51644,43.83346],[142.62473,43.83346],[142.62473,43.58331],[142.54176,43.58403],[142.54196,43.50008],[142.50057,43.50022],[142.50037,43.25006],[142.25054,43.25014],[142.25004,43.45838],[142.00031,43.45816],[142.00001,43.41724],[141.91703,43.41688],[141.91703,43.33342],[141.87494,43.33327],[141.87454,43.17487],[141.93351,43.17473],[141.93391,43.15868],[141.99137,43.15802],[141.99207,43.1334],[141.87524,43.13332],[141.87484,43.00012],[141.49984,43.00027],[141.50015,42.91683],[141.25021,42.91631],[141.25001,42.9999],[141.12505,43.00005],[141.12525,43.08323],[140.99988,43.0836],[141.00008,43.16638],[140.75086,43.1666],[140.75005,43.23374]],[[140.59121,41.78353],[140.58382,41.8334],[140.58453,41.87732],[140.59092,41.91613],[140.60797,41.94403],[140.57544,41.95914],[140.58439,41.99979],[140.7104,42.00011],[140.86894,42.00011],[140.91724,42.00053],[140.99041,41.91909],[141.04737,41.90693],[141.12722,41.88398],[141.17552,41.83732],[141.20194,41.81488],[141.18418,41.78321],[141.11301,41.76711],[141.05689,41.71559],[140.99382,41.69968],[140.94267,41.70414],[140.89238,41.73563],[140.84806,41.74326],[140.80018,41.75672],[140.73299,41.74634],[140.69705,41.73234],[140.6881,41.76986],[140.59121,41.78353]],[[140.2418,42.2338],[140.24159,42.25827],[140.21005,42.25797],[140.20804,42.27485],[140.26611,42.27514],[140.2651,42.29179],[140.29001,42.2912],[140.29182,42.26779],[140.33914,42.24139],[140.34145,42.21662],[140.29323,42.21662],[140.2418,42.2338]],[[140.55007,42.08447],[140.54977,42.11387],[140.58066,42.11193],[140.62636,42.12069],[140.63365,42.12136],[140.6336,42.10061],[140.60853,42.09964],[140.60848,42.08327],[140.54972,42.08312],[140.55007,42.08447]],[[140.6583,41.06668],[140.67117,40.91974],[140.84492,40.91652],[140.91726,40.91688],[140.91712,40.87597],[140.9846,40.87533],[140.98503,40.79278],[141.13391,40.79192],[141.13972,40.68034],[141.17424,40.68174],[141.18504,40.60057],[141.43351,40.60078],[141.43308,40.51757],[141.18305,40.51649],[141.18362,40.58223],[141.16714,40.59172],[141.04397,40.59237],[141.04283,40.65825],[140.98402,40.65836],[140.72646,40.65857],[140.72589,40.57521],[140.66849,40.57467],[140.60883,40.57489],[140.60925,40.48311],[140.55058,40.483],[140.54888,40.51757],[140.40028,40.51692],[140.40013,40.5832],[140.25665,40.58233],[140.24898,40.63292],[140.33251,40.63292],[140.33251,40.66687],[140.41676,40.66698],[140.41704,40.73311],[140.33194,40.73375],[140.33351,40.75851],[140.28421,40.75818],[140.28037,40.85679],[140.30254,40.98507],[140.31845,41.00019],[140.42443,41.0004],[140.42443,40.90029],[140.55044,40.89975],[140.54994,41.06668],[140.6583,41.06668]],[[140.01669,40.33381],[140.25252,40.33381],[140.25006,39.33298],[139.98341,39.3332],[140.05622,39.72433],[140.00614,39.77043],[139.94073,39.88023],[139.94158,40.01081],[139.94055,40.08509],[139.94116,40.10876],[140.01669,40.33381]],[[139.85814,39.04176],[139.87552,39.04137],[139.87703,39.00009],[139.91671,39.00001],[139.9167,38.79173],[139.75493,38.79165],[139.7502,38.79386],[139.79376,38.89687],[139.79014,38.9254],[139.83615,38.99102],[139.85814,39.04176]],[[139.37551,38.1174],[139.38053,37.95893],[139.417,37.95845],[139.417,37.87413],[139.37571,37.8746],[139.37611,37.83296],[139.29234,37.83145],[139.30007,37.78074],[139.29173,37.68357],[139.29193,37.66473],[139.22935,37.6594],[139.18113,37.61024],[139.14537,37.60769],[139.12367,37.62671],[139.09816,37.65018],[139.08831,37.6664],[138.99951,37.66656],[138.99942,37.79171],[138.81261,37.79199],[138.86834,37.84689],[138.9915,37.91333],[139.08231,37.9775],[139.27679,38.03417],[139.37551,38.1174]],[[139.96008,38.49993],[140.50033,38.50009],[140.50023,38.16654],[140.37496,38.16654],[140.37536,38.08348],[140.2504,38.08293],[140.21705,38.07407],[140.22136,38.0422],[140.2512,38.04196],[140.2504,38.00017],[140.23372,37.99962],[140.23352,37.94197],[140.20861,37.9411],[140.20841,37.90013],[140.19253,37.89965],[140.19123,37.88372],[140.15838,37.883],[140.15828,37.85811],[140.0753,37.85945],[140.0741,37.87476],[140.05019,37.87571],[140.05019,37.89252],[140.05762,37.89355],[140.05813,37.92541],[140.0741,37.92573],[140.0742,37.94197],[140.09871,37.95369],[140.09821,37.99234],[140.10182,38.00041],[140.12282,38.00081],[140.11549,38.01806],[140.08977,38.02795],[140.0747,38.04133],[140.06727,38.03492],[140.06707,37.99186],[140.01634,37.9917],[140.01584,38.066],[139.99805,38.06656],[139.99966,38.13739],[139.99956,38.17514],[139.99795,38.3337],[139.95787,38.33378],[139.95837,38.50028],[139.96008,38.49993]],[[140.70822,38.7833],[140.70837,39.15023],[141.04194,39.14957],[141.04167,39.50008],[141.00147,39.49986],[140.99893,39.91638],[141.25077,39.91692],[141.25037,39.5007],[141.16709,39.50008],[141.16699,39.45627],[141.16669,39.40273],[141.16689,39.25073],[141.20798,39.24996],[141.20898,38.87471],[141.03399,38.8751],[141.03339,38.78354],[140.86794,38.78315],[140.70822,38.7833]],[[141.3759,38.36972],[141.37476,38.49992],[141.24904,38.50025],[141.25134,38.66886],[141.52524,38.66653],[141.54981,38.63369],[141.55052,38.55563],[141.55549,38.47938],[141.56558,38.39559],[141.54626,38.37398],[141.55919,38.32429],[141.59854,38.31226],[141.59527,38.26063],[141.50762,38.23664],[141.46983,38.24479],[141.39226,38.27725],[141.41158,38.34781],[141.3759,38.36972]],[[131.04175,33.7381],[131.0413,33.70887],[130.99956,33.70858],[131.00035,33.68392],[131.04959,33.68392],[131.05014,33.64171],[131.0751,33.64201],[131.07588,33.61683],[131.10039,33.61666],[131.10084,33.60082],[131.17448,33.60007],[131.19999,33.58422],[131.20066,33.55868],[131.2405,33.55868],[131.28258,33.54207],[131.33137,33.52528],[131.41821,33.55065],[131.51625,33.55084],[131.51692,33.5667],[131.63353,33.56688],[131.63308,33.47545],[131.7423,33.47452],[131.74946,33.45939],[131.75014,33.33289],[131.60756,33.33401],[131.60801,33.37421],[131.52565,33.37458],[131.52467,33.26691],[131.5769,33.25843],[131.64942,33.28332],[131.71634,33.28388],[131.77497,33.26687],[131.78385,33.25028],[131.83291,33.25015],[131.88403,33.2745],[131.90825,33.2749],[131.90809,33.25849],[131.87517,33.20607],[131.84985,33.18276],[131.85032,33.14964],[131.87525,33.15038],[131.90777,33.14129],[131.9171,33.13332],[131.91733,33.10858],[131.9505,33.09967],[131.95019,33.08349],[131.98279,33.08336],[131.98279,33.10007],[132.00036,33.1169],[132.0252,33.1169],[132.02473,33.0998],[132.00843,33.09172],[132.00843,33.06718],[132.01745,33.06705],[132.01715,33.04988],[131.99181,33.04211],[131.92518,33.04092],[131.9255,33.025],[131.95003,33.025],[131.95045,33.01347],[131.95034,32.97482],[131.98326,32.97536],[131.98492,32.95941],[132.0261,32.95922],[132.05828,32.95862],[132.05844,32.99142],[132.07198,32.9917],[132.08297,32.98332],[132.09168,32.92635],[132.02473,32.92542],[132.02473,32.90058],[132.03349,32.88294],[132.00795,32.88357],[131.98326,32.85871],[131.99988,32.8498],[132.01715,32.8429],[132.01603,32.82654],[131.97551,32.78396],[131.93411,32.76746],[131.8992,32.76614],[131.89179,32.71661],[131.83317,32.6507],[131.78369,32.64894],[131.78415,32.58396],[131.74185,32.58283],[131.7082,32.56669],[131.70773,32.54294],[131.74159,32.50852],[131.74141,32.45129],[131.70804,32.44216],[131.70112,32.40878],[131.65787,32.39219],[131.64226,32.33355],[131.59948,32.27572],[131.57492,32.18338],[131.54184,32.08474],[131.542,32.00009],[131.49975,32.00023],[131.50038,31.74971],[131.4586,31.75011],[131.45876,31.79182],[131.24969,31.79169],[131.24969,32.16704],[131.37488,32.16717],[131.37504,32.25046],[131.49991,32.25019],[131.49991,32.33341],[131.54137,32.33341],[131.54167,32.62506],[131.66645,32.62515],[131.66633,32.66662],[131.74993,32.66652],[131.75006,32.91664],[131.5977,32.91688],[131.25044,32.91663],[131.24902,33.00042],[131.49971,33.00002],[131.49987,33.06345],[131.50018,33.13915],[131.4804,33.16631],[131.284,33.16618],[131.26706,33.20035],[131.26627,33.25039],[131.29966,33.26985],[131.29951,33.31999],[131.24427,33.34114],[131.17511,33.34154],[131.17527,33.35806],[131.07525,33.35806],[131.07572,33.33347],[131.00055,33.33321],[131.00007,33.2496],[130.91445,33.2496],[130.7497,33.25013],[130.7497,33.08374],[130.62546,33.08321],[130.62546,33.00002],[130.72796,33.00171],[130.87492,33.00018],[130.8753,32.79131],[130.96677,32.79185],[130.96709,32.85808],[130.92531,32.85781],[130.92531,32.95029],[130.96679,32.95831],[131.00012,32.91683],[131.00017,32.50007],[130.66647,32.50046],[130.66669,32.33306],[130.62506,32.33306],[130.62461,32.24943],[130.49972,32.25037],[130.50039,32.12517],[130.33275,32.12498],[130.3437,32.16133],[130.34954,32.20815],[130.42748,32.29423],[130.46637,32.40054],[130.4939,32.40073],[130.523,32.43304],[130.54941,32.44456],[130.54986,32.4659],[130.48383,32.46647],[130.47421,32.47535],[130.4751,32.50064],[130.5089,32.54197],[130.62439,32.62571],[130.62484,32.6666],[130.52569,32.66679],[130.52524,32.68337],[130.55859,32.71671],[130.55903,32.7745],[130.57493,32.78372],[130.57493,32.82172],[130.50935,32.84185],[130.50778,32.86986],[130.44155,32.89158],[130.41624,32.94258],[130.41579,32.97488],[130.37438,33.00098],[130.37528,33.08315],[130.24927,33.08372],[130.24905,33.16076],[130.15863,33.09741],[130.17775,33.07174],[130.18369,33.06684],[130.18369,33.03401],[130.19958,33.025],[130.19977,33.00001],[130.12479,33.00001],[130.12457,32.96678],[130.0409,32.9407],[130.02501,32.94164],[130.02456,32.91647],[130.12457,32.9172],[130.12457,32.86739],[130.15031,32.86683],[130.19578,32.8661],[130.23334,32.89183],[130.29198,32.89183],[130.29243,32.84991],[130.29153,32.7916],[130.2922,32.71725],[130.18343,32.65791],[130.15034,32.65002],[130.11539,32.64962],[130.11744,32.70014],[130.15903,32.71706],[130.24856,32.75867],[130.24968,32.79085],[130.1333,32.79235],[130.12569,32.76751],[130.00147,32.74963],[129.9294,32.67317],[129.80048,32.57459],[129.80003,32.54704],[129.77425,32.54749],[129.71767,32.54987],[129.71632,32.59043],[129.7499,32.67487],[129.75012,32.72459],[129.80025,32.72553],[129.74161,32.77523],[129.62411,32.8501],[129.62646,32.91787],[129.83159,32.91738],[129.87121,32.91644],[129.89269,32.94105],[129.93343,33.00827],[129.967,33.07469],[130.05809,33.12025],[130.05876,33.21693],[130.24946,33.21674],[130.2499,33.33331],[130.21566,33.3335],[130.0422,33.33331],[129.92559,33.33294],[129.90836,33.35837],[129.90791,33.38304],[129.86695,33.38285],[129.86697,33.36012],[129.83338,33.34079],[129.80093,33.34098],[129.80003,33.31592],[129.75057,33.31686],[129.75034,33.27533],[129.72572,33.27477],[129.6917,33.30807],[129.69237,33.25025],[129.87479,33.25025],[129.8759,33.21299],[129.87521,33.11856],[129.87523,33.03323],[129.80831,33.03305],[129.7499,33.05031],[129.734,33.058],[129.72658,33.08172],[129.69842,33.09982],[129.62413,33.09928],[129.62374,33.12377],[129.62501,33.24201],[129.59255,33.24108],[129.59255,33.29928],[129.54197,33.3004],[129.50012,33.31761],[129.49989,33.41686],[129.59949,33.41593],[129.66753,33.40864],[129.66775,33.43274],[129.8336,33.56656],[129.93208,33.56787],[129.93522,33.40827],[130.04131,33.3836],[130.04108,33.48428],[130.24901,33.48465],[130.25057,33.61681],[130.28504,33.63405],[130.28303,33.69151],[130.30888,33.69151],[130.32365,33.66712],[130.39225,33.69179],[130.41777,33.72484],[130.43388,33.77546],[130.39024,33.87047],[130.39113,33.92509],[130.50774,33.92621],[130.60555,33.89166],[130.66665,33.9496],[130.74991,34.00844],[130.84973,34.00825],[130.8504,34.14155],[130.88308,34.19192],[130.85801,34.27519],[130.83228,34.36706],[130.97127,34.45052],[131.08608,34.43336],[131.19307,34.44166],[131.29356,34.44092],[131.36518,34.44591],[131.37548,34.5328],[131.44934,34.55013],[131.57445,34.69176],[131.62526,34.69158],[131.78596,34.70078],[131.86989,34.77435],[131.99545,34.88146],[132.37594,35.16739],[132.74972,35.16684],[132.75084,35.08318],[132.6255,35.08337],[132.62505,34.91671],[132.3755,34.91689],[132.37527,34.83426],[132.12482,34.83298],[132.12482,34.75008],[132.00038,34.7499],[132.00038,34.5833],[131.74989,34.58326],[131.75139,34.37954],[131.75147,34.1671],[132.12497,34.16683],[132.12481,34.2914],[132.25016,34.29193],[132.24929,34.40917],[132.25016,34.49983],[132.37249,34.49996],[132.37503,34.58339],[132.49167,34.58339],[132.49182,34.70831],[132.59177,34.70824],[132.58365,34.5417],[132.84148,34.54133],[132.84193,34.66623],[133.08343,34.66678],[133.08365,34.76631],[133.20743,34.76687],[133.20787,34.66678],[133.49973,34.66642],[133.50026,34.83314],[133.7012,34.83357],[133.69941,34.87526],[133.74984,34.87535],[133.74984,34.9999],[133.8751,35.00003],[133.87518,35.12504],[133.97425,35.12517],[133.97546,35.00097],[134.0585,34.99997],[134.05816,35.07464],[134.16654,35.0748],[134.1667,35.00016],[134.75338,35.00016],[134.83324,34.99997],[134.8333,35.04176],[135.24494,35.04176],[135.37472,35.04153],[135.37535,35.0836],[135.74948,35.08335],[135.75066,35.25004],[135.87474,35.2503],[135.87529,35.33388],[136.00001,35.33356],[136.00024,35.2587],[135.98331,35.24255],[135.93361,35.20027],[135.93306,35.1667],[135.97539,35.16664],[135.97523,35.15597],[136.04993,35.15829],[136.04993,35.21663],[136.05895,35.22484],[136.12455,35.23344],[136.12536,35.25011],[136.16667,35.24997],[136.16651,35.36441],[136.16664,35.45873],[136.33347,35.45857],[136.37478,35.33382],[136.49981,35.33356],[136.49965,35.49981],[136.74991,35.58365],[137.00003,35.58344],[136.99984,35.41254],[136.99999,35.33351],[137.24995,35.33357],[137.24998,34.91665],[137.6249,34.91658],[137.62516,35.00034],[137.69186,35.00052],[137.69182,35.06711],[137.74199,35.06668],[137.74222,35.10789],[137.77489,35.10844],[137.77474,35.15015],[138.16671,35.15021],[138.16666,35.2918],[138.38224,35.29138],[138.50029,35.29187],[138.50119,35.33333],[138.38256,35.33369],[138.38319,35.44169],[138.49985,35.44208],[138.49988,35.4584],[138.66644,35.45855],[138.66704,35.37476],[138.70818,35.37519],[138.70818,35.33348],[138.8334,35.33357],[138.83329,35.40832],[139.0082,35.40836],[139.00858,35.39192],[139.1243,35.39228],[139.12498,35.41668],[139.25001,35.41667],[139.24995,35.49996],[139.12487,35.50005],[139.12492,35.5833],[138.99999,35.58333],[138.99999,35.6667],[139.1249,35.66678],[139.12504,35.8092],[139.12474,35.91713],[139.00053,35.91713],[139.00006,36.00001],[139.12492,36.00012],[139.12547,36.11894],[139.12495,36.16664],[139,36.16668],[138.99941,36.25031],[138.95831,36.25002],[138.95822,36.29127],[138.91663,36.29166],[138.91678,36.37496],[138.95845,36.37565],[138.95836,36.45832],[139.08379,36.45868],[139.08334,36.5],[139.25009,36.50012],[139.2496,36.54136],[139.37464,36.54189],[139.37505,36.62499],[139.45022,36.62528],[139.44999,36.66667],[139.66374,36.66671],[139.75002,36.66665],[139.75005,36.75003],[140,36.75001],[139.99998,36.62209],[140.00001,36.41668],[140.25001,36.41666],[140.24999,36.04158],[140.50004,36.04158],[140.49989,35.83349],[140.41632,35.83374],[140.4168,35.7919],[140.45874,35.79113],[140.45874,35.72461],[140.51666,35.72486],[140.51691,35.7417],[140.59144,35.74174],[140.5915,35.94177],[140.65002,35.94164],[140.64994,36.00837],[140.67503,36.00834],[140.71403,35.92326],[140.77327,35.83877],[140.81532,35.78508],[140.89133,35.7501],[140.89211,35.71717],[140.86632,35.67853],[140.80694,35.70622],[140.72767,35.6761],[140.68235,35.68891],[140.60194,35.63074],[140.48545,35.54409],[140.4095,35.42897],[140.40816,35.33353],[140.30722,35.33371],[140.30767,35.41748],[140.30946,35.45851],[140.20762,35.45905],[140.20829,35.37478],[140.12503,35.37478],[140.12436,35.33408],[140.29155,35.33316],[140.29245,35.20909],[140.31707,35.20836],[140.31662,35.18422],[140.35042,35.18257],[140.3431,35.13152],[140.23201,35.10096],[140.13697,35.09271],[140.05542,35.03643],[139.98865,34.98849],[139.96379,34.91688],[139.91222,34.88262],[139.82272,34.89218],[139.78337,34.93633],[139.73961,34.95322],[139.7443,34.99303],[139.81476,35.00932],[139.7963,35.05283],[139.80169,35.09108],[139.80766,35.1529],[139.80866,35.19667],[139.85153,35.24127],[139.8325,35.29189],[139.74927,35.2961],[139.76149,35.33517],[139.79232,35.35267],[139.81035,35.49933],[140.0035,35.49988],[140.03349,35.53668],[140.06639,35.58384],[139.79714,35.58311],[139.80005,35.50079],[139.77087,35.47343],[139.70992,35.44207],[139.6987,35.40282],[139.66887,35.36715],[139.68478,35.30781],[139.73549,35.2728],[139.75069,35.25934],[139.73734,35.23092],[139.74388,35.20852],[139.69714,35.18971],[139.67426,35.1702],[139.68932,35.15394],[139.68151,35.13477],[139.62355,35.12199],[139.59783,35.1285],[139.60224,35.17253],[139.58363,35.18959],[139.59033,35.24164],[139.5496,35.28403],[139.49879,35.30084],[139.42314,35.30942],[139.29131,35.30066],[139.23074,35.27778],[139.15546,35.23542],[139.15031,35.17507],[139.16665,35.13316],[139.12502,35.13298],[139.09436,35.13335],[139.05832,35.13316],[139.05671,35.00443],[139.03348,34.98385],[138.99968,34.98367],[139.00057,34.88274],[139.14136,34.88348],[139.11002,34.84602],[139.08129,34.79529],[139.01691,34.74107],[138.9999,34.64151],[138.90044,34.6097],[138.87367,34.59159],[138.80026,34.59988],[138.75773,34.65881],[138.72528,34.67575],[138.72528,34.72506],[138.83316,34.72598],[138.83383,34.74952],[138.7419,34.75106],[138.7338,34.8136],[138.74985,34.90057],[138.76065,34.93773],[138.75028,34.98313],[138.77855,35.04352],[138.87546,35.03316],[138.87703,35.04929],[138.85845,35.04984],[138.76804,35.12107],[138.68294,35.12223],[138.61873,35.09015],[138.55409,35.05201],[138.54926,34.99442],[138.49996,34.95392],[138.39142,34.91129],[138.35562,34.86759],[138.33929,34.80042],[138.27635,34.72246],[138.24467,34.66616],[138.24396,34.58503],[138.12662,34.58573],[138.01467,34.62561],[137.88184,34.65541],[137.79532,34.63718],[137.68991,34.65307],[137.57654,34.66441],[137.38135,34.64618],[137.18402,34.58409],[137.03187,34.5662],[137.00794,34.57573],[137.0254,34.61792],[137.0599,34.66613],[137.17517,34.66686],[137.30767,34.75996],[137.29894,34.77595],[137.29088,34.79231],[137.25037,34.79213],[137.21635,34.76768],[137.15816,34.74911],[137.08318,34.75076],[137.03215,34.76345],[136.94061,34.80848],[136.93456,34.77522],[136.98335,34.72575],[137.06751,34.74212],[137.06773,34.70183],[137.02454,34.70809],[137.01581,34.64937],[136.98179,34.65029],[136.82601,34.74911],[136.84884,34.82319],[136.79266,34.82521],[136.79132,35.00048],[136.75081,35.00012],[136.74991,34.95849],[136.68277,34.96069],[136.6624,34.89701],[136.59078,34.80003],[136.53863,34.72704],[136.58294,34.62506],[136.75682,34.54181],[136.85798,34.54126],[136.93945,34.54347],[136.91675,34.49231],[136.94081,34.46687],[136.94113,34.40866],[136.92404,34.35876],[136.90742,34.30209],[136.90045,34.2666],[136.84981,34.23416],[136.81693,34.1923],[136.79948,34.19254],[136.79996,34.22906],[136.74203,34.25863],[136.73325,34.28285],[136.70896,34.28334],[136.64264,34.25902],[136.5594,34.22605],[136.53564,34.22167],[136.50068,34.20864],[136.44007,34.20053],[136.38325,34.16675],[136.3334,34.14802],[136.31583,34.08487],[136.2674,34.08316],[136.12497,34.08343],[136.12449,34.16688],[136.24968,34.16688],[136.24984,34.25012],[136.37486,34.25025],[136.37468,34.33331],[136.50021,34.33302],[136.49973,34.49192],[136.45843,34.49127],[136.45811,34.5416],[136.4168,34.54186],[136.41664,34.62516],[136.37494,34.62464],[136.37469,34.68106],[136.37485,34.74974],[136.33402,34.75026],[136.33354,34.79109],[136.37485,34.79213],[136.37533,34.95858],[136.33323,34.95858],[136.33323,34.83345],[136.29239,34.83371],[136.29208,34.792],[136.24966,34.79213],[136.24998,34.70838],[136.29192,34.70851],[136.2916,34.62475],[136.12487,34.62512],[136.12498,34.66674],[136.04161,34.66655],[136.04094,34.7499],[136.00023,34.75009],[135.99991,34.65993],[135.99975,34.58387],[136.04153,34.58374],[136.04185,34.50017],[136.04989,34.49997],[136.05005,34.42503],[135.91674,34.425],[135.91667,34.35836],[135.81665,34.35837],[135.81661,34.31668],[135.74991,34.31672],[135.75007,34.29167],[135.64152,34.29176],[135.64186,34.27512],[135.53325,34.27489],[135.53348,34.25834],[135.475,34.25834],[135.47511,34.22498],[135.37507,34.22512],[135.3749,34.20814],[135.50001,34.20837],[135.50001,33.66652],[135.87502,33.66661],[135.87558,33.74983],[136.03371,33.75021],[136.01272,33.71062],[135.99681,33.67327],[135.97948,33.63389],[135.97195,33.61271],[135.95831,33.56798],[135.85332,33.50522],[135.85353,33.48302],[135.87591,33.4814],[135.86057,33.44051],[135.77718,33.42558],[135.7418,33.42534],[135.74163,33.4665],[135.68498,33.47915],[135.59008,33.49633],[135.47373,33.52819],[135.3902,33.5752],[135.37485,33.61633],[135.37533,33.64967],[135.33371,33.6498],[135.32468,33.66653],[135.45794,33.66666],[135.45842,33.74987],[135.41727,33.75],[135.41663,33.78802],[135.41743,33.83273],[135.37517,33.83326],[135.37517,33.79171],[135.3284,33.78999],[135.28777,33.75622],[135.21503,33.7698],[135.14371,33.85113],[135.12013,33.87826],[135.05776,33.87991],[135.05947,33.96479],[135.07709,34.00837],[135.11345,34.05029],[135.06515,34.06759],[135.07041,34.121],[135.15522,34.16286],[135.1163,34.18742],[135.06316,34.25849],[135.04915,34.27082],[134.99554,34.27152],[134.9955,34.29122],[134.99945,34.29894],[135.00904,34.30357],[135.1457,34.34721],[135.20804,34.35108],[135.24174,34.39165],[135.19145,34.42482],[135.25012,34.46056],[135.29487,34.42658],[135.30902,34.44119],[135.36647,34.53277],[135.39147,34.53394],[135.38308,34.63128],[135.36409,34.66669],[135.29161,34.66695],[135.29061,34.6245],[135.08349,34.62463],[135.04725,34.61643],[134.92905,34.64799],[134.826,34.69662],[134.75874,34.74267],[134.71632,34.74982],[134.52561,34.74969],[134.41657,34.70885],[134.31671,34.66669],[134.25055,34.66656],[134.24992,34.68309],[134.15797,34.68348],[134.15781,34.70013],[134.12505,34.7],[134.12474,34.58386],[134.11666,34.55845],[134.02519,34.55024],[134.02535,34.44785],[134.02788,34.41639],[134.19168,34.41678],[134.19152,34.38401],[134.28347,34.38296],[134.28347,34.33371],[134.38082,34.29415],[134.40952,34.26539],[134.43268,34.24648],[134.56265,34.25055],[134.66663,34.24963],[134.64146,34.04963],[134.70809,33.96554],[134.74006,33.92825],[134.71221,33.86773],[134.76918,33.86691],[134.76712,33.82524],[134.66742,33.7754],[134.63102,33.77487],[134.50018,33.77493],[134.49978,33.95855],[134.4582,33.95874],[134.45816,34.00006],[134.34679,33.99889],[134.06047,33.99988],[133.74955,34.00047],[133.74998,34.33337],[133.875,34.33342],[133.87494,34.41668],[133.95888,34.41683],[133.95843,34.44157],[133.85055,34.44157],[133.84966,34.46621],[133.82537,34.46704],[133.81642,34.44222],[133.84205,34.43326],[133.84194,34.41656],[133.75822,34.41715],[133.74122,34.44175],[133.6913,34.44152],[133.69085,34.45739],[133.69097,34.46639],[133.70004,34.48346],[133.61655,34.48355],[133.61689,34.45827],[133.53351,34.45887],[133.53329,34.41752],[133.4897,34.41743],[133.46642,34.43313],[133.46631,34.44992],[133.4503,34.45002],[133.45008,34.4166],[133.41713,34.41696],[133.41668,34.35786],[133.34174,34.3583],[133.30304,34.37515],[133.2748,34.35876],[133.21655,34.35],[133.16694,34.35007],[133.16662,34.36659],[133.09184,34.36659],[133.09176,34.3417],[133.05837,34.34164],[133.05829,34.32491],[132.90003,34.32517],[132.89148,34.29164],[132.7917,34.29164],[132.79133,34.28281],[132.792,34.24212],[132.77492,34.22513],[132.71629,34.22499],[132.71652,34.21655],[132.75854,34.21636],[132.775,34.20877],[132.79218,34.20095],[132.79223,34.14177],[132.74138,34.14173],[132.70838,34.16655],[132.63354,34.16665],[132.61664,34.1917],[132.59185,34.1916],[132.5749,34.1666],[132.54155,34.16674],[132.54178,34.14196],[132.42515,34.14165],[132.42503,34.16657],[132.3749,34.16663],[132.37515,34.18348],[132.40833,34.18343],[132.3752,34.2168],[132.34991,34.23331],[132.35014,34.25834],[132.35814,34.25843],[132.35819,34.27503],[132.33922,34.25834],[132.29166,34.22494],[132.24992,34.22494],[132.25003,34.2043],[132.25809,34.18324],[132.28327,34.18352],[132.28321,34.19995],[132.29183,34.20837],[132.32501,34.20847],[132.31684,34.1753],[132.25843,34.17533],[132.25843,34.14171],[132.2502,34.11675],[132.21669,34.11684],[132.21685,34.0585],[132.22491,34.05827],[132.22502,33.99163],[132.21669,33.99177],[132.21652,33.97516],[132.25037,33.97526],[132.25014,33.91622],[131.95761,33.91733],[131.95783,33.92512],[131.91755,33.92495],[131.91586,33.95863],[131.88699,33.96671],[131.87569,33.95891],[131.84973,33.92502],[131.80049,33.92439],[131.79948,33.95046],[131.7752,33.95057],[131.75058,33.9668],[131.70828,33.97508],[131.70918,33.92551],[131.68366,33.92513],[131.68321,33.95056],[131.6916,33.96717],[131.69988,33.98323],[131.68332,33.99937],[131.68354,34.01681],[131.69999,34.017],[131.70011,34.03314],[131.68209,34.03352],[131.67515,34.02581],[131.62513,34.02488],[131.59122,33.97515],[131.38721,33.97497],[131.29981,33.91685],[131.16675,33.91667],[131.1172,33.97473],[131.06078,34.02462],[131.03349,34.02557],[131.04198,34.00848],[131.04175,33.7381]],[[135.98583,35.86595],[135.93905,35.95517],[135.95723,36.1316],[136.15271,36.29666],[136.6596,36.75695],[136.65846,37.00603],[136.66642,37.33477],[136.85167,37.42328],[137.11307,37.5288],[137.31877,37.54953],[137.39151,37.50356],[137.34765,37.35791],[137.20218,37.24762],[137.09307,37.06828],[137.0223,36.83795],[137.09532,36.80133],[137.22971,36.77368],[137.35387,36.80451],[137.39706,36.90966],[137.50588,36.95883],[137.72267,37.01579],[137.95199,37.10656],[138.053,37.16975],[138.18626,37.18254],[138.28854,37.24861],[138.43501,37.34512],[138.54909,37.41229],[138.61842,37.49225],[138.73903,37.51536],[138.78378,37.5674],[138.82185,37.62796],[138.91491,37.63009],[138.924,37.6032],[139.01321,37.59757],[139.01421,37.53507],[139.03452,37.52325],[139.03793,37.45798],[139.04887,37.42358],[139.13027,37.42312],[139.23881,37.4326],[139.26282,37.33326],[139.12289,37.32784],[139.11408,37.26354],[139.11422,37.16748],[139.05555,37.16658],[138.82825,37.17133],[138.87072,37.2338],[138.89104,37.31316],[138.72965,37.33259],[138.71403,37.29474],[138.71715,37.1642],[138.53517,37.16533],[138.39907,37.16692],[138.37478,37.13261],[138.3725,36.99907],[138.08823,36.99839],[138.08596,36.91586],[137.89233,36.91768],[137.87798,36.83517],[137.66517,36.8321],[137.52111,36.83142],[137.51216,36.74222],[137.39482,36.74427],[137.37138,36.58325],[137.29367,36.58371],[137.18016,36.55028],[137.21383,36.53133],[137.26384,36.33176],[136.63321,36.33496],[136.50436,36.29227],[136.39412,36.29444],[136.38034,36.25493],[136.37778,36.17665],[136.38218,36.09507],[136.38758,36.00065],[136.2593,35.99399],[136.25532,35.90923],[136.24992,35.83337],[136.12207,35.82876],[136.11184,35.88725],[136.05984,35.91165],[136.01793,35.86676],[135.98583,35.86595]],[[140.03281,37.29986],[140.03344,37.34643],[140.03344,37.47427],[140.03407,37.48281],[139.99973,37.48356],[140.00036,37.44198],[139.94212,37.44173],[139.94197,37.35007],[139.89116,37.35007],[139.89116,37.41698],[139.81725,37.41647],[139.81266,37.57468],[139.74192,37.57556],[139.74224,37.79174],[139.81789,37.79162],[139.98296,37.79112],[139.98359,37.58334],[140.0412,37.58334],[140.04151,37.47502],[140.1591,37.47528],[140.15815,37.63311],[140.3745,37.63399],[140.37481,37.83338],[140.5,37.83525],[140.49989,37.91662],[140.53144,37.9168],[140.62489,37.9167],[140.62489,37.84641],[140.62534,37.33359],[140.57502,37.33284],[140.57486,37.25881],[140.4579,37.25855],[140.45774,37.2084],[140.2501,37.20866],[140.24994,37.29998],[140.03281,37.29986]],[[141.00075,38.16707],[140.84264,38.16752],[140.68779,38.16405],[140.70788,38.09499],[140.70868,38.03346],[140.61627,38.03362],[140.53369,38.11364],[140.5359,38.14478],[140.61948,38.14478],[140.62471,38.2048],[140.6231,38.27376],[140.63073,38.33902],[140.81255,38.33698],[141.00362,38.33398],[141.00075,38.16707]],[[129.44454,34.73675],[129.52524,34.65452],[129.35703,34.19046],[129.23088,34.06063],[129.15132,34.11616],[129.27179,34.63488],[129.44454,34.73675]]],terms_url:"http://www.gsi.go.jp/kikakuchousei/kikakuchousei40182.html",terms_text:"GSI Japan",description:"Japan GSI ortho Imagery. Usually better than bing, but a bit older."},{id:"gsi.go.jp_seamlessphoto",name:"Japan GSI seamlessphoto Imagery",type:"tms",template:"https://cyberjapandata.gsi.go.jp/xyz/seamlessphoto/{zoom}/{x}/{y}.jpg",zoomExtent:[14,18],polygon:[[[140.88867,45.67548],[140.71289,45.41388],[141.04248,43.80282],[139.96582,43.35714],[138.99902,42.01665],[139.04297,41.26129],[137.5708,38.58253],[132.69287,36.86204],[130.84717,34.93999],[129.74854,34.994],[129.02344,34.56086],[128.36426,33.21112],[127.90283,31.87756],[128.4082,29.89781],[125.8374,26.78485],[123.33252,25.0657],[122.58545,24.42715],[123.53027,23.44309],[125.88135,24.10665],[129.96826,26.31311],[132.1875,30.20211],[134.42871,32.43561],[136.82373,33.28462],[137.85645,34.21634],[138.64746,33.24788],[138.58154,32.00808],[139.6582,28.67131],[141.65771,29.66896],[142.0752,32.06396],[141.21826,33.37641],[141.56982,35.44277],[141.43799,36.52729],[142.82227,39.16414],[143.04199,40.89691],[145.92041,42.40723],[146.18408,43.03678],[145.74463,43.54855],[145.32715,43.67582],[145.30518,43.91372],[145.61279,44.2452],[145.41504,44.62175],[144.38232,44.52784],[142.31689,45.53714],[141.3501,45.70618],[140.88867,45.67548]]],terms_url:"http://www.gsi.go.jp/kikakuchousei/kikakuchousei40182.html",terms_text:"GSI Japan seamless photo",description:"Japan GSI seamlessphoto Imagery. The collection of latest imageries of GSI ortho, airphoto, post disaster and others."},{id:"gsi.go.jp_std_map",name:"Japan GSI Standard Map",type:"tms",template:"https://cyberjapandata.gsi.go.jp/xyz/std/{zoom}/{x}/{y}.png",zoomExtent:[5,18],polygon:[[[141.85547,44.64912],[140.22949,43.9691],[138.95508,41.80408],[139.48242,40.17887],[138.86719,38.30718],[136.31836,37.19533],[132.14355,35.13788],[128.93555,33.35806],[129.50684,32.4727],[129.77051,31.69078],[130.20996,30.90223],[131.2207,30.78904],[131.66016,32.32428],[132.71484,32.87959],[133.76953,33.17434],[136.75781,33.87042],[139.30664,35.06597],[140.88867,35.17381],[141.15234,36.5626],[142.11914,39.94344],[141.76758,42.68243],[141.85547,44.64912]]],terms_url:"https://maps.gsi.go.jp/help/use.html",terms_text:"GSI Japan",description:"Japan GSI Standard Map. Widely covered."},{id:"juno-gps",name:"Juno GPS traces",type:"tms",template:"https://gps-tile.junolab.net/{zoom}/{x}/{y}.png",startDate:"2019-01-01T00:00:00.000Z",zoomExtent:[0,19],polygon:[[[-74.337,40.484],[-73.572,40.484],[-73.572,40.957],[-74.337,40.957],[-74.337,40.484]]],terms_url:"https://gps-tile.junolab.net/about.html",terms_text:"© 2019 Juno",description:"Juno drivers' GPS traces from two days ago, updated daily",icon:"https://osmlab.github.io/editor-layer-index/sources/north-america/us/ny/Juno-GPS.png",overlay:true},{id:"kalmar-orto-2014",name:"Kalmar North Orthophoto 2014",type:"wms",template:"https://kartportal.kalmar.se/arcgisserver/services/Ortofoto/Kalmar_2014/ImageServer/WMSServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2014-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",zoomExtent:[9,22],polygon:[[[16.28473,56.70827],[16.38856,56.70798],[16.40843,56.7615],[16.46269,56.75672],[16.47753,56.76023],[16.48815,56.77023],[16.48754,56.79231],[16.48254,56.79547],[16.47667,56.8223],[16.4687,56.82614],[16.48584,56.86271],[16.48809,56.87369],[16.45694,56.87786],[16.46288,56.88769],[16.42696,56.88757],[16.39809,56.89604],[16.36791,56.8952],[16.36717,56.85985],[16.36431,56.84636],[16.36001,56.83657],[16.34423,56.82532],[16.32675,56.79284],[16.26114,56.74422],[16.28473,56.70827]]],terms_url:"http://data-kalmar.opendata.arcgis.com/",terms_text:"© Kalmar municipality",best:true,description:"Orthophotos for the north coast of the municipality of Kalmar 2014",icon:"https://upload.wikimedia.org/wikipedia/commons/thumb/6/67/Kalmarvapen_1a.svg/206px-Kalmarvapen_1a.svg.png"},{id:"kalmar-orto-2016",name:"Kalmar South Orthophoto 2016",type:"wms",template:"https://kartportal.kalmar.se/arcgisserver/services/Ortofoto/Kalmar_2016/ImageServer/WMSServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",zoomExtent:[9,22],polygon:[[[16.156,56.45834],[16.11389,56.46083],[16.09246,56.46633],[16.0724,56.4662],[16.07126,56.51153],[16.08516,56.56847],[16.14417,56.63933],[16.21168,56.68491],[16.28412,56.71655],[16.25135,56.74358],[16.25045,56.75062],[16.29558,56.7512],[16.33516,56.72511],[16.38922,56.71885],[16.41137,56.67602],[16.4053,56.66294],[16.33101,56.625],[16.28048,56.613],[16.21561,56.51967],[16.156,56.45834]]],terms_url:"http://data-kalmar.opendata.arcgis.com/",terms_text:"© Kalmar municipality",best:true,description:"Orthophotos for the south coast of the municipality of Kalmar 2016",icon:"https://upload.wikimedia.org/wikipedia/commons/thumb/6/67/Kalmarvapen_1a.svg/206px-Kalmarvapen_1a.svg.png"},{id:"kalmar-orto-2018",name:"Kalmar Urban Orthophoto 2018",type:"wms",template:"https://kartportal.kalmar.se/arcgisserver/services/Ortofoto/Kalmar_2018/ImageServer/WMSServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2018-01-01T00:00:00.000Z",startDate:"2018-01-01T00:00:00.000Z",zoomExtent:[9,22],polygon:[[[16.3416,56.81756],[16.32773,56.7973],[16.36692,56.78706],[16.37105,56.79153],[16.36978,56.80511],[16.35645,56.8133],[16.3416,56.81756]],[[16.39207,56.79339],[16.4608,56.78944],[16.48817,56.79067],[16.4833,56.76986],[16.46612,56.76711],[16.45409,56.76774],[16.43173,56.77309],[16.43178,56.77663],[16.40554,56.77214],[16.39325,56.77349],[16.39207,56.79339]],[[16.29836,56.79102],[16.28796,56.7883],[16.27727,56.78367],[16.27623,56.77952],[16.2862,56.7761],[16.3108,56.77696],[16.3118,56.78086],[16.30364,56.78883],[16.29836,56.79102]],[[16.20686,56.63637],[16.22098,56.62389],[16.2453,56.62467],[16.26751,56.62951],[16.28724,56.63831],[16.37871,56.65462],[16.38806,56.6897],[16.38664,56.72867],[16.31586,56.72879],[16.29956,56.7219],[16.29331,56.70021],[16.26799,56.66889],[16.23945,56.66991],[16.2266,56.6624],[16.21411,56.64972],[16.20686,56.63637]],[[16.15172,56.67843],[16.15712,56.69334],[16.15268,56.70297],[16.13274,56.71254],[16.10987,56.71964],[16.08638,56.7112],[16.07969,56.70056],[16.08149,56.69566],[16.09534,56.69599],[16.12877,56.67766],[16.15172,56.67843]],[[15.97369,56.62759],[16.00164,56.63215],[16.04126,56.62999],[16.05658,56.62489],[16.06201,56.61794],[16.09186,56.60378],[16.10527,56.5926],[16.09581,56.58161],[16.03481,56.60405],[16.0305,56.61252],[16.0088,56.60223],[15.98755,56.59742],[15.98449,56.57141],[15.94887,56.57264],[15.91878,56.55184],[15.90892,56.55393],[15.89921,56.56867],[15.9188,56.57287],[15.94612,56.57491],[15.96371,56.59004],[15.9496,56.59724],[15.94308,56.60903],[15.95726,56.61598],[15.97589,56.62005],[15.97369,56.62759]]],terms_url:"http://data-kalmar.opendata.arcgis.com/",terms_text:"© Kalmar municipality",best:true,description:"Orthophotos for urban areas of the municipality of Kalmar 2018",icon:"https://upload.wikimedia.org/wikipedia/commons/thumb/6/67/Kalmarvapen_1a.svg/206px-Kalmarvapen_1a.svg.png"},{id:"Aargau-AGIS-2014",name:"Kanton Aargau 25cm (AGIS 2014)",type:"tms",template:"https://mapproxy.osm.ch/tiles/AGIS2014/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",endDate:"2014-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",zoomExtent:[8,19],polygon:[[[8.09602,47.57882],[8.10323,47.57879],[8.10323,47.58583],[8.10591,47.58732],[8.11019,47.58878],[8.11589,47.5893],[8.12168,47.58916],[8.12546,47.58873],[8.12959,47.58888],[8.13023,47.59122],[8.132,47.59358],[8.13506,47.59546],[8.13831,47.59698],[8.14161,47.59939],[8.14534,47.60076],[8.14961,47.60144],[8.15438,47.60127],[8.15751,47.60063],[8.16119,47.59914],[8.16255,47.59976],[8.16438,47.60148],[8.16653,47.60399],[8.17087,47.60673],[8.17608,47.60838],[8.17912,47.60868],[8.18153,47.6118],[8.18304,47.61489],[8.18498,47.6176],[8.18953,47.62151],[8.19212,47.62321],[8.22261,47.623],[8.22561,47.6212],[8.22849,47.61842],[8.22959,47.61621],[8.23008,47.61501],[8.23261,47.61686],[8.23657,47.61803],[8.24,47.61835],[8.24351,47.61783],[8.24749,47.61877],[8.25066,47.61988],[8.25708,47.6208],[8.26104,47.62069],[8.26491,47.61935],[8.26732,47.61769],[8.26902,47.61531],[8.27579,47.61702],[8.28106,47.61707],[8.28772,47.61626],[8.29421,47.61442],[8.29947,47.61221],[8.30311,47.60977],[8.30287,47.59447],[8.30438,47.59227],[8.30591,47.59109],[8.30791,47.59019],[8.31236,47.58917],[8.31655,47.58713],[8.32049,47.58436],[8.32598,47.57888],[8.32864,47.57716],[8.33219,47.57604],[8.33902,47.57577],[8.34702,47.57628],[8.35962,47.57552],[8.36475,47.57436],[8.37207,47.57377],[8.38002,47.57233],[8.38194,47.57496],[8.38387,47.57686],[8.38879,47.58027],[8.39232,47.58174],[8.39611,47.58247],[8.40013,47.58255],[8.40432,47.58158],[8.41158,47.57928],[8.418,47.57602],[8.42381,47.57452],[8.43039,47.57228],[8.43275,47.57035],[8.4336,47.56849],[8.43353,47.56669],[8.4319,47.56444],[8.4286,47.56217],[8.42575,47.56121],[8.4259,47.55854],[8.42498,47.55624],[8.42353,47.55469],[8.42296,47.5537],[8.4246,47.5517],[8.42492,47.54981],[8.42434,47.54836],[8.42539,47.54679],[8.425,47.54418],[8.4233,47.5422],[8.421,47.54106],[8.41832,47.54049],[8.41551,47.54062],[8.4139,47.53924],[8.41283,47.5372],[8.41194,47.53626],[8.41241,47.53415],[8.41185,47.53237],[8.41117,47.53158],[8.40143,47.53169],[8.40124,47.52443],[8.39936,47.5222],[8.39666,47.52082],[8.39385,47.51988],[8.39085,47.51973],[8.38877,47.52014],[8.38809,47.5146],[8.38551,47.51075],[8.38366,47.50944],[8.36776,47.50953],[8.36739,47.48709],[8.3751,47.48689],[8.37889,47.4853],[8.38196,47.48188],[8.38184,47.47521],[8.38328,47.47192],[8.38244,47.46879],[8.37943,47.46643],[8.37751,47.4659],[8.37787,47.46496],[8.38238,47.46423],[8.38671,47.46097],[8.39171,47.45743],[8.39315,47.45349],[8.39514,47.45031],[8.39418,47.44722],[8.39171,47.44535],[8.3896,47.44449],[8.38996,47.44339],[8.39111,47.4416],[8.39213,47.43924],[8.39339,47.4359],[8.39249,47.43411],[8.39369,47.43143],[8.39568,47.42854],[8.39959,47.42463],[8.39953,47.41954],[8.449,47.41897],[8.45369,47.41233],[8.45369,47.40451],[8.44858,47.39649],[8.40362,47.39685],[8.40483,47.39392],[8.4029,47.38903],[8.4035,47.38553],[8.40314,47.38304],[8.40483,47.37905],[8.40844,47.37575],[8.41379,47.37338],[8.4159,47.37016],[8.41584,47.36539],[8.4144,47.36327],[8.41494,47.35912],[8.41722,47.35573],[8.41632,47.35231],[8.41355,47.34913],[8.41367,47.34688],[8.41476,47.3448],[8.41885,47.34244],[8.42264,47.34052],[8.42469,47.33718],[8.42421,47.33163],[8.42914,47.33286],[8.4351,47.33192],[8.43763,47.33281],[8.44328,47.33506],[8.44527,47.33746],[8.45213,47.3402],[8.45761,47.33975],[8.46212,47.33649],[8.46278,47.33322],[8.46043,47.32829],[8.45797,47.32457],[8.45556,47.32005],[8.44918,47.31495],[8.44713,47.31217],[8.44021,47.30948],[8.43624,47.29817],[8.43311,47.29593],[8.42806,47.29397],[8.42318,47.29001],[8.41656,47.28789],[8.41024,47.28728],[8.4035,47.28409],[8.40188,47.2805],[8.40862,47.27593],[8.41066,47.2716],[8.40892,47.26613],[8.41235,47.2618],[8.41235,47.25873],[8.41109,47.25608],[8.41698,47.25142],[8.41885,47.2475],[8.41801,47.24305],[8.4144,47.23904],[8.41373,47.23565],[8.4106,47.23226],[8.40435,47.22797],[8.40296,47.2256],[8.40398,47.22127],[8.40856,47.21718],[8.40928,47.21326],[8.40844,47.20945],[8.41012,47.20258],[8.41319,47.19678],[8.41271,47.1924],[8.4088,47.18799],[8.40814,47.18475],[8.4091,47.1812],[8.41518,47.17915],[8.41915,47.17563],[8.42294,47.16553],[8.42294,47.15747],[8.42011,47.15325],[8.42246,47.14838],[8.42276,47.14392],[8.42053,47.13954],[8.41584,47.13524],[8.40898,47.13274],[8.40386,47.13201],[8.40116,47.13258],[8.39532,47.1327],[8.38437,47.1345],[8.37895,47.13385],[8.37245,47.13442],[8.36908,47.13659],[8.368,47.13876],[8.35656,47.14228],[8.35409,47.14564],[8.35331,47.14916],[8.3506,47.15161],[8.3503,47.15419],[8.34772,47.15669],[8.34561,47.15923],[8.34086,47.16164],[8.33935,47.16512],[8.3373,47.16896],[8.33315,47.17154],[8.33261,47.17351],[8.33062,47.17792],[8.33002,47.18717],[8.32924,47.18786],[8.32936,47.19494],[8.32292,47.19514],[8.32148,47.19854],[8.32196,47.20115],[8.31835,47.21043],[8.31413,47.21178],[8.31089,47.2153],[8.31107,47.21857],[8.31221,47.2198],[8.30884,47.22433],[8.30932,47.22646],[8.30715,47.23042],[8.30727,47.2321],[8.30595,47.23582],[8.30607,47.23949],[8.30378,47.24366],[8.30144,47.24677],[8.29554,47.24836],[8.29187,47.25293],[8.28814,47.25869],[8.28766,47.26143],[8.28627,47.26519],[8.28723,47.26805],[8.28838,47.26964],[8.2823,47.27478],[8.27718,47.27576],[8.27273,47.27531],[8.26749,47.27593],[8.26533,47.27719],[8.2616,47.27695],[8.25793,47.27781],[8.25576,47.27887],[8.25317,47.27678],[8.25034,47.27548],[8.2501,47.27348],[8.24956,47.27017],[8.24559,47.26715],[8.24095,47.26678],[8.23452,47.26727],[8.23145,47.26278],[8.2309,47.25931],[8.22663,47.24942],[8.222,47.24713],[8.21526,47.24431],[8.21363,47.24203],[8.21309,47.23602],[8.21123,47.23246],[8.21285,47.22548],[8.21117,47.22266],[8.20689,47.22053],[8.19762,47.22065],[8.19149,47.21861],[8.16976,47.21865],[8.16543,47.22315],[8.16085,47.22405],[8.15351,47.2294],[8.15171,47.2332],[8.14822,47.23647],[8.14798,47.241],[8.14635,47.24203],[8.13823,47.24166],[8.13558,47.23941],[8.12673,47.23606],[8.1218,47.23631],[8.11614,47.23872],[8.10675,47.23945],[8.10266,47.24113],[8.09983,47.24436],[8.09766,47.2493],[8.09797,47.25069],[8.09339,47.25567],[8.08852,47.2569],[8.08485,47.25583],[8.08323,47.25405],[8.07995,47.25246],[8.0769,47.25054],[8.06854,47.24284],[8.06325,47.24098],[8.05134,47.23865],[8.04857,47.23886],[8.03575,47.23747],[8.0322,47.23555],[8.02714,47.23534],[8.01139,47.23967],[8.00927,47.24116],[8.00791,47.24312],[8.00783,47.24821],[8.00857,47.25042],[8.0084,47.25769],[8.00712,47.25922],[8.00299,47.26162],[8.00052,47.26486],[7.99759,47.26789],[7.99627,47.27271],[7.99474,47.27369],[7.98993,47.27121],[7.97278,47.26907],[7.96857,47.27008],[7.96737,47.27098],[7.95861,47.27112],[7.9601,47.26748],[7.96274,47.26396],[7.96576,47.26171],[7.96699,47.25879],[7.96695,47.25001],[7.95963,47.24582],[7.95112,47.23918],[7.94469,47.236],[7.93733,47.23106],[7.93405,47.23051],[7.9298,47.23077],[7.9178,47.23305],[7.90784,47.23837],[7.89793,47.2377],[7.8695,47.23207],[7.85478,47.22719],[7.85137,47.22713],[7.83958,47.22947],[7.83584,47.22976],[7.83082,47.23259],[7.82707,47.23505],[7.82431,47.23831],[7.82129,47.24042],[7.82014,47.24264],[7.81822,47.24562],[7.81771,47.24917],[7.81822,47.25082],[7.81835,47.25371],[7.81988,47.25587],[7.82116,47.2568],[7.82112,47.25778],[7.8192,47.26058],[7.81912,47.26154],[7.81686,47.26486],[7.8175,47.26731],[7.81958,47.26982],[7.82439,47.27158],[7.82805,47.2721],[7.83592,47.27837],[7.83707,47.28342],[7.84005,47.2872],[7.84201,47.29067],[7.84588,47.29427],[7.84763,47.2982],[7.85137,47.30299],[7.8529,47.30741],[7.85571,47.31032],[7.86065,47.31254],[7.86422,47.31349],[7.87018,47.31672],[7.87631,47.31736],[7.88082,47.31716],[7.88337,47.31667],[7.88588,47.31941],[7.88886,47.32131],[7.88805,47.32443],[7.88907,47.3287],[7.8915,47.33262],[7.8978,47.34014],[7.9001,47.34156],[7.90005,47.3432],[7.90222,47.34557],[7.90635,47.34704],[7.90963,47.34735],[7.91359,47.34626],[7.91618,47.34456],[7.91699,47.34303],[7.92401,47.33899],[7.93839,47.33792],[7.94929,47.33784],[7.95431,47.33596],[7.95593,47.33317],[7.95691,47.32968],[7.95571,47.32535],[7.96993,47.32797],[7.97308,47.33017],[7.98333,47.33432],[7.98563,47.33692],[7.98954,47.33818],[7.99248,47.33827],[7.99784,47.34017],[7.99635,47.34257],[7.99601,47.34588],[7.99733,47.34859],[8.00116,47.35081],[8.00137,47.3569],[8.00261,47.3577],[8.00418,47.36044],[8.00976,47.36419],[8.01125,47.36598],[8.01746,47.36926],[8.01912,47.37157],[8.0198,47.37376],[8.02023,47.37598],[8.02172,47.37837],[8.02193,47.38093],[8.02282,47.38286],[8.02078,47.38857],[8.01606,47.38929],[8.01265,47.38897],[8.00772,47.39012],[8.00367,47.39205],[8.00163,47.39479],[8.00155,47.39998],[8.00023,47.40306],[7.99801,47.40453],[7.99261,47.40551],[7.98776,47.40637],[7.98418,47.40839],[7.98027,47.4081],[7.9732,47.41127],[7.96963,47.41383],[7.95695,47.41893],[7.95529,47.4218],[7.95593,47.42402],[7.95746,47.42621],[7.96274,47.42828],[7.97746,47.43254],[7.97567,47.43732],[7.97614,47.44138],[7.97431,47.44368],[7.95129,47.45111],[7.94861,47.4539],[7.94818,47.4566],[7.94678,47.45755],[7.94039,47.45669],[7.93588,47.45738],[7.93631,47.47625],[7.9318,47.47605],[7.92469,47.47717],[7.91571,47.47743],[7.90903,47.47947],[7.90316,47.47967],[7.90295,47.48965],[7.8969,47.4898],[7.8918,47.49405],[7.89086,47.49765],[7.8878,47.49931],[7.88631,47.5023],[7.87999,47.50397],[7.87403,47.50787],[7.86994,47.50944],[7.87006,47.51239],[7.86435,47.51245],[7.85851,47.51543],[7.8558,47.51854],[7.85625,47.52147],[7.8549,47.52474],[7.85183,47.5285],[7.84647,47.52714],[7.84148,47.52777],[7.8413,47.52406],[7.84015,47.51587],[7.83943,47.51259],[7.83688,47.51256],[7.83679,47.51049],[7.83352,47.50949],[7.83156,47.50765],[7.82981,47.50552],[7.82522,47.50354],[7.82049,47.5004],[7.81475,47.49491],[7.81181,47.49261],[7.80645,47.4914],[7.80403,47.49146],[7.80049,47.49014],[7.77977,47.49028],[7.77871,47.49304],[7.7796,47.496],[7.78386,47.5004],[7.78203,47.50368],[7.78088,47.5073],[7.78109,47.51018],[7.77977,47.51265],[7.77969,47.51529],[7.77045,47.51802],[7.75905,47.52003],[7.75266,47.52009],[7.74781,47.51957],[7.73368,47.52291],[7.72781,47.52719],[7.71985,47.52978],[7.71262,47.53095],[7.70764,47.5344],[7.70551,47.53917],[7.70696,47.54279],[7.71415,47.54627],[7.72245,47.54756],[7.749,47.54977],[7.75428,47.55339],[7.76654,47.55615],[7.77168,47.55761],[7.78007,47.55836],[7.78577,47.55982],[7.7902,47.5616],[7.79398,47.56634],[7.80492,47.57237],[7.80611,47.57989],[7.81173,47.58954],[7.81577,47.59218],[7.82211,47.59352],[7.83645,47.59163],[7.83952,47.59045],[7.84305,47.58778],[7.84875,47.58899],[7.85624,47.59189],[7.86488,47.59393],[7.87126,47.5943],[7.87726,47.59367],[7.88535,47.59424],[7.89343,47.59301],[7.90109,47.58976],[7.90833,47.58514],[7.91386,47.57923],[7.91867,47.57194],[7.91956,47.56772],[7.91875,47.56433],[7.9156,47.56008],[7.91577,47.55715],[7.91841,47.55405],[7.92126,47.55261],[7.92552,47.55227],[7.93471,47.55221],[7.9405,47.55078],[7.94326,47.54968],[7.94356,47.55052],[7.94458,47.55589],[7.94841,47.55979],[7.95394,47.56229],[7.96003,47.56333],[7.96577,47.56272],[7.97203,47.5612],[7.97833,47.56057],[7.98624,47.56094],[7.99718,47.56212],[8.0045,47.56137],[8.01114,47.55974],[8.01641,47.55701],[8.02046,47.55574],[8.0262,47.55741],[8.03799,47.55876],[8.04254,47.56028],[8.0485,47.56333],[8.05454,47.56798],[8.05931,47.56921],[8.0622,47.56895],[8.06693,47.57002],[8.07242,47.56973],[8.07739,47.56795],[8.08182,47.56436],[8.08522,47.56281],[8.08791,47.56298],[8.09259,47.56559],[8.09395,47.56809],[8.09484,47.57587],[8.09602,47.57882]]],terms_text:"AGIS OF2014",description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{id:"Aargau-AGIS-2016",name:"Kanton Aargau 25cm (AGIS 2016)",type:"tms",template:"https://mapproxy.osm.ch/tiles/AGIS2016/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",zoomExtent:[8,19],polygon:[[[7.70438,47.55794],[7.77076,47.55772],[7.77103,47.58025],[7.80408,47.58017],[7.80433,47.60248],[7.93713,47.60217],[7.93703,47.57962],[8.00374,47.57917],[8.00338,47.55687],[8.0364,47.55665],[8.03681,47.57928],[8.10313,47.57881],[8.10387,47.60112],[8.17011,47.60086],[8.17036,47.6235],[8.30311,47.62235],[8.30305,47.59988],[8.3362,47.59927],[8.33585,47.5771],[8.36913,47.57694],[8.36943,47.59931],[8.43564,47.59877],[8.43454,47.53133],[8.40144,47.53162],[8.40096,47.50926],[8.3678,47.50959],[8.3675,47.48698],[8.40042,47.48666],[8.39939,47.41929],[8.46558,47.4187],[8.46515,47.39647],[8.43206,47.39654],[8.43125,47.3516],[8.46434,47.35128],[8.46327,47.28387],[8.42997,47.28421],[8.42714,47.12676],[8.3293,47.12753],[8.32937,47.13007],[8.32833,47.13007],[8.3285,47.14529],[8.3294,47.19502],[8.2964,47.19526],[8.29714,47.24022],[8.2641,47.24046],[8.26446,47.26297],[8.23141,47.26316],[8.23075,47.21822],[8.09886,47.21912],[8.09874,47.24135],[8.066,47.24176],[8.06552,47.2192],[7.99993,47.21952],[8.00003,47.26433],[7.96735,47.26462],[7.96675,47.21961],[7.80153,47.22029],[7.80244,47.28791],[7.83518,47.28772],[7.83543,47.31017],[7.86837,47.31017],[7.86885,47.35542],[8.00097,47.3543],[8.00156,47.39928],[7.9353,47.39976],[7.93607,47.46716],[7.90278,47.46729],[7.90303,47.48981],[7.86987,47.48998],[7.86993,47.5125],[7.83689,47.51258],[7.83665,47.4901],[7.77027,47.49026],[7.77045,47.51274],[7.70452,47.51307],[7.70438,47.55794]]],terms_text:"AGIS OF2016",description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{id:"Aargau-AGIS-2017",name:"Kanton Aargau 25cm (AGIS 2017)",type:"tms",template:"https://mapproxy.osm.ch/tiles/AGIS2017/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",endDate:"2017-01-01T00:00:00.000Z",startDate:"2017-01-01T00:00:00.000Z",zoomExtent:[8,19],polygon:[[[7.70438,47.55794],[7.77076,47.55772],[7.77103,47.58025],[7.80408,47.58017],[7.80433,47.60248],[7.93713,47.60217],[7.93703,47.57962],[8.00374,47.57917],[8.00338,47.55687],[8.0364,47.55665],[8.03681,47.57928],[8.10313,47.57881],[8.10387,47.60112],[8.17011,47.60086],[8.17036,47.6235],[8.30311,47.62235],[8.30305,47.59988],[8.3362,47.59927],[8.33585,47.5771],[8.36913,47.57694],[8.36943,47.59931],[8.43564,47.59877],[8.43454,47.53133],[8.40144,47.53162],[8.40096,47.50926],[8.3678,47.50959],[8.3675,47.48698],[8.40042,47.48666],[8.39939,47.41929],[8.46558,47.4187],[8.46515,47.39647],[8.43206,47.39654],[8.43125,47.3516],[8.46434,47.35128],[8.46327,47.28387],[8.42997,47.28421],[8.42714,47.12676],[8.3293,47.12753],[8.32937,47.13007],[8.32833,47.13007],[8.3285,47.14529],[8.3294,47.19502],[8.2964,47.19526],[8.29714,47.24022],[8.2641,47.24046],[8.26446,47.26297],[8.23141,47.26316],[8.23075,47.21822],[8.09886,47.21912],[8.09874,47.24135],[8.066,47.24176],[8.06552,47.2192],[7.99993,47.21952],[8.00003,47.26433],[7.96735,47.26462],[7.96675,47.21961],[7.80153,47.22029],[7.80244,47.28791],[7.83518,47.28772],[7.83543,47.31017],[7.86837,47.31017],[7.86885,47.35542],[8.00097,47.3543],[8.00156,47.39928],[7.9353,47.39976],[7.93607,47.46716],[7.90278,47.46729],[7.90303,47.48981],[7.86987,47.48998],[7.86993,47.5125],[7.83689,47.51258],[7.83665,47.4901],[7.77027,47.49026],[7.77045,47.51274],[7.70452,47.51307],[7.70438,47.55794]]],terms_text:"AGIS OF2017",best:true,description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{id:"Basel-Landschaft-2015",name:"Kanton Basel-Landschaft 10cm (2015)",type:"tms",template:"https://mapproxy.osm.ch/tiles/KTBASELLANDSCHAFT2015/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[18,21],polygon:[[[7.37028,47.41368],[7.35758,47.41508],[7.35792,47.41827],[7.35354,47.41961],[7.34488,47.42402],[7.33973,47.42971],[7.33269,47.43024],[7.32685,47.43192],[7.32528,47.43489],[7.3305,47.44176],[7.33899,47.44109],[7.34496,47.43608],[7.35266,47.43436],[7.3812,47.43208],[7.37599,47.41431],[7.37815,47.414],[7.38204,47.41331],[7.38839,47.41398],[7.41371,47.41093],[7.42074,47.4111],[7.42748,47.41448],[7.43811,47.41274],[7.4484,47.41507],[7.45558,47.42792],[7.45062,47.43534],[7.43784,47.44632],[7.42542,47.44328],[7.4209,47.44594],[7.42242,47.45072],[7.4288,47.45388],[7.43003,47.45949],[7.44577,47.46197],[7.44717,47.45696],[7.45651,47.44926],[7.49236,47.45897],[7.53068,47.46119],[7.52745,47.47391],[7.53633,47.48383],[7.53623,47.49105],[7.5326,47.49097],[7.53179,47.4974],[7.52004,47.49678],[7.51223,47.49892],[7.50935,47.50888],[7.49908,47.51628],[7.49787,47.52125],[7.50228,47.51491],[7.51746,47.51728],[7.5222,47.51409],[7.53096,47.52905],[7.51935,47.53472],[7.51075,47.52899],[7.5023,47.5284],[7.49804,47.53615],[7.50545,47.54438],[7.51676,47.54541],[7.52732,47.55278],[7.55466,47.56437],[7.56458,47.55704],[7.56124,47.55172],[7.55875,47.55235],[7.55588,47.54434],[7.56479,47.54569],[7.58726,47.5419],[7.58269,47.53247],[7.58948,47.52792],[7.59025,47.51979],[7.59478,47.51929],[7.61378,47.53925],[7.6223,47.53977],[7.62285,47.55004],[7.61774,47.55437],[7.61762,47.55865],[7.63273,47.56149],[7.63997,47.55816],[7.649,47.5483],[7.66131,47.54483],[7.66586,47.53746],[7.67467,47.53375],[7.69494,47.5325],[7.71347,47.53978],[7.71596,47.53582],[7.72362,47.53675],[7.72716,47.53293],[7.73322,47.53275],[7.73797,47.52732],[7.74902,47.52498],[7.75786,47.52605],[7.78763,47.52012],[7.79014,47.51864],[7.78887,47.50683],[7.7928,47.50068],[7.78663,47.49312],[7.79889,47.49565],[7.79816,47.4994],[7.7994,47.49748],[7.80742,47.49714],[7.81471,47.5048],[7.83198,47.51474],[7.83321,47.53382],[7.84653,47.53266],[7.85233,47.53524],[7.86257,47.52692],[7.86396,47.51931],[7.87666,47.52269],[7.87567,47.51319],[7.89399,47.50606],[7.90477,47.49218],[7.90482,47.48491],[7.93329,47.48141],[7.94702,47.48489],[7.94003,47.46202],[7.94885,47.46378],[7.95761,47.45881],[7.95785,47.45128],[7.94678,47.44319],[7.95003,47.43172],[7.96183,47.42183],[7.95657,47.41968],[7.95504,47.41561],[7.94839,47.41627],[7.93493,47.41177],[7.93672,47.40806],[7.93266,47.40527],[7.90974,47.39852],[7.89022,47.40714],[7.88333,47.4061],[7.88344,47.4012],[7.8777,47.40126],[7.86914,47.39551],[7.87943,47.38799],[7.87881,47.38351],[7.86265,47.38198],[7.84012,47.37476],[7.83055,47.36512],[7.80217,47.3611],[7.79637,47.35347],[7.79356,47.33905],[7.78529,47.33788],[7.76896,47.33891],[7.76642,47.34273],[7.75152,47.34433],[7.73415,47.35776],[7.72791,47.36886],[7.70195,47.37245],[7.6442,47.36721],[7.64176,47.38047],[7.63558,47.38059],[7.63332,47.38291],[7.63331,47.38534],[7.63725,47.38607],[7.63272,47.41003],[7.66405,47.41002],[7.6798,47.41751],[7.68658,47.43366],[7.68297,47.43872],[7.68485,47.44784],[7.69227,47.45421],[7.69883,47.45586],[7.69993,47.46191],[7.70988,47.46938],[7.69976,47.48063],[7.66833,47.48635],[7.66612,47.49687],[7.65217,47.49581],[7.64865,47.49183],[7.65539,47.49021],[7.65051,47.48826],[7.65593,47.48739],[7.64442,47.48564],[7.64097,47.48273],[7.6073,47.4894],[7.60885,47.48353],[7.60563,47.47936],[7.60815,47.47521],[7.60449,47.47045],[7.61887,47.46745],[7.62607,47.46291],[7.62217,47.46195],[7.61646,47.44523],[7.6158,47.43275],[7.59207,47.43271],[7.58121,47.42878],[7.57842,47.43491],[7.5689,47.4369],[7.5683,47.42233],[7.58074,47.4147],[7.52524,47.41163],[7.53117,47.40353],[7.51862,47.38822],[7.5113,47.38974],[7.50226,47.38481],[7.49233,47.38523],[7.47841,47.39056],[7.47747,47.40128],[7.46448,47.40251],[7.46092,47.40068],[7.45002,47.40393],[7.44951,47.39976],[7.4434,47.40231],[7.44131,47.40018],[7.44357,47.3889],[7.43732,47.38089],[7.41169,47.38057],[7.41628,47.38479],[7.41449,47.3943],[7.39894,47.39684],[7.39592,47.40338],[7.38869,47.40302],[7.38405,47.41236],[7.37968,47.41281],[7.37584,47.41401],[7.37028,47.41368]]],terms_url:"https://www.geo.bl.ch/fileadmin/user_upload/Geodaten/Nutzungsbedingungen_GBD_BL_V3p2.pdf",terms_text:"Geodaten des Kantons Basel-Landschaft 2015",best:true,description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{id:"KTBASELSTADT2015",name:"Kanton Basel-Stadt 2015",type:"tms",template:"https://mapproxy.osm.ch/tiles/KTBASELSTADT2015/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[8,21],polygon:[[[7.492,47.4817],[7.492,47.6342],[7.784,47.6342],[7.784,47.4817],[7.492,47.4817]]],terms_text:"Kanton Basel-Stadt OF 2015",description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{id:"KTBASELSTADT2017",name:"Kanton Basel-Stadt 2017",type:"tms",template:"https://mapproxy.osm.ch/tiles/KTBASELSTADT2017/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",endDate:"2017-01-01T00:00:00.000Z",startDate:"2017-01-01T00:00:00.000Z",zoomExtent:[8,21],polygon:[[[7.67138,47.59522],[7.67996,47.60078],[7.68451,47.60182],[7.69438,47.60171],[7.69395,47.59667],[7.68708,47.59355],[7.67884,47.58712],[7.68571,47.58538],[7.68906,47.57612],[7.69412,47.5734],[7.6924,47.56691],[7.6847,47.5617],[7.66425,47.56164],[7.64872,47.55689],[7.63035,47.55869],[7.62357,47.55666],[7.62786,47.55145],[7.62738,47.53658],[7.61833,47.53662],[7.61335,47.53262],[7.59962,47.51911],[7.58503,47.51917],[7.58409,47.52636],[7.57713,47.53163],[7.58125,47.53986],[7.5719,47.54148],[7.55387,47.54148],[7.55379,47.55122],[7.55653,47.55828],[7.5537,47.56031],[7.55379,47.57473],[7.56434,47.58122],[7.57936,47.57988],[7.58331,47.59019],[7.58563,47.59233],[7.59207,47.59239],[7.59851,47.59071],[7.60915,47.58643],[7.60923,47.5811],[7.6191,47.58046],[7.63687,47.59314],[7.63782,47.59557],[7.64168,47.59887],[7.64528,47.60026],[7.66494,47.59618],[7.67138,47.59522]]],terms_text:"Kanton Basel-Stadt OF 2017",best:true,description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{id:"Bern-dsm-hillshade-2015",name:"Kanton Bern, Digitales Oberflaechenmodell 50cm, Relief",type:"wms",template:"https://www.geoservice.apps.be.ch/geoservice2/services/a42geo/a42geo_hoehenwms_d_fk/MapServer/WmsServer?LAYERS=GEODB.LDOM50CM_LORELIEF&SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&STYLES=default&FORMAT=image/jpeg&CRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[8,22],polygon:[[[6.82526,47.07901],[7.28497,46.74221],[7.06335,46.27329],[8.20129,46.43975],[8.44334,46.59001],[8.47595,46.76315],[8.41244,46.79841],[8.13984,46.7869],[7.96543,46.80687],[7.90089,46.8914],[7.97676,47.00414],[7.88784,47.05609],[7.90363,47.17665],[7.81952,47.29413],[7.55859,47.33231],[7.16583,47.31183],[6.82388,47.18131],[6.82526,47.07901]]],terms_text:"Digitales Oberflächenmodell LIDAR 50cm © Amt für Wald des Kantons Bern"},{id:"Bern-dtm-hillshade-2015",name:"Kanton Bern, Digitales Terrainmodell 50cm, Relief",type:"wms",template:"https://www.geoservice.apps.be.ch/geoservice2/services/a42geo/a42geo_hoehenwms_d_fk/MapServer/WmsServer?LAYERS=GEODB.LDTM50CM_LTRELIEF&SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&STYLES=default&FORMAT=image/jpeg&CRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[8,22],polygon:[[[6.82526,47.07901],[7.28497,46.74221],[7.06335,46.27329],[8.20129,46.43975],[8.44334,46.59001],[8.47595,46.76315],[8.41244,46.79841],[8.13984,46.7869],[7.96543,46.80687],[7.90089,46.8914],[7.97676,47.00414],[7.88784,47.05609],[7.90363,47.17665],[7.81952,47.29413],[7.55859,47.33231],[7.16583,47.31183],[6.82388,47.18131],[6.82526,47.07901]]],terms_text:"Digitales Terrainmodell LIDAR 50cm © Amt für Wald des Kantons Bern"},{id:"Solothurn-sogis2014-tms",name:"Kanton Solothurn (SOGIS)",type:"tms",template:"https://mapproxy.osm.ch/tiles/sogis2014/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",endDate:"2017-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[15,19],polygon:[[[7.95595,47.47162],[7.98239,47.47155],[7.98239,47.45353],[7.99553,47.45353],[7.99521,47.41747],[8.0218,47.41743],[8.02155,47.39935],[8.03456,47.39926],[8.03468,47.39028],[8.04788,47.39022],[8.04769,47.37224],[8.03456,47.37232],[8.03437,47.3544],[8.02117,47.35427],[8.02072,47.32739],[7.99445,47.32747],[7.99426,47.31857],[7.96773,47.31866],[7.96767,47.30966],[7.94122,47.30978],[7.94133,47.32778],[7.91486,47.32786],[7.91467,47.30988],[7.9016,47.31005],[7.9014,47.30097],[7.87501,47.3011],[7.87501,47.29223],[7.86165,47.29212],[7.86154,47.27409],[7.84832,47.27416],[7.8483,47.26523],[7.83502,47.2652],[7.83502,47.25624],[7.79535,47.25636],[7.7953,47.24741],[7.72924,47.24756],[7.72929,47.25652],[7.71623,47.25667],[7.71618,47.26559],[7.70304,47.26559],[7.70304,47.27461],[7.68975,47.27467],[7.68989,47.28368],[7.66341,47.28371],[7.66332,47.2747],[7.61055,47.27476],[7.61041,47.24787],[7.62352,47.24777],[7.62356,47.23879],[7.64986,47.23876],[7.64999,47.22977],[7.6499,47.22083],[7.66308,47.22073],[7.6631,47.21178],[7.66297,47.20273],[7.67617,47.2027],[7.67623,47.19372],[7.68938,47.19369],[7.68924,47.17572],[7.70243,47.1756],[7.70234,47.14869],[7.66267,47.14881],[7.66281,47.13978],[7.63633,47.1399],[7.63647,47.14869],[7.5968,47.14893],[7.59684,47.13996],[7.57041,47.13999],[7.57042,47.15792],[7.55736,47.15795],[7.55732,47.14888],[7.54421,47.14895],[7.54417,47.13991],[7.53098,47.13991],[7.53095,47.13097],[7.51767,47.13097],[7.51765,47.12196],[7.51769,47.11292],[7.49131,47.11301],[7.49135,47.10403],[7.4782,47.104],[7.47813,47.07705],[7.46493,47.07708],[7.46498,47.06807],[7.42552,47.06801],[7.42543,47.08601],[7.37279,47.08598],[7.37288,47.10403],[7.3596,47.10403],[7.35955,47.131],[7.41228,47.131],[7.41223,47.14901],[7.42538,47.14901],[7.42552,47.15801],[7.3727,47.15796],[7.3727,47.18498],[7.34627,47.18492],[7.34636,47.20287],[7.33307,47.2029],[7.33307,47.22096],[7.34614,47.22096],[7.34614,47.22991],[7.37256,47.22991],[7.3727,47.2389],[7.399,47.23896],[7.39913,47.24792],[7.41228,47.24792],[7.41228,47.26592],[7.45186,47.26589],[7.45195,47.2749],[7.46505,47.27493],[7.4651,47.28385],[7.47829,47.28385],[7.47834,47.29293],[7.5046,47.29288],[7.50473,47.30183],[7.5312,47.30181],[7.53129,47.31979],[7.54448,47.31985],[7.54453,47.3288],[7.55768,47.32883],[7.55768,47.33786],[7.53125,47.33786],[7.53133,47.35586],[7.51801,47.35583],[7.5181,47.36483],[7.3988,47.36484],[7.39889,47.39182],[7.38564,47.39181],[7.38564,47.4008],[7.37234,47.4008],[7.37234,47.40978],[7.34584,47.40978],[7.34584,47.41878],[7.31925,47.41878],[7.31925,47.44578],[7.4121,47.44578],[7.4121,47.49078],[7.42535,47.49078],[7.42535,47.49981],[7.43856,47.49981],[7.43856,47.50876],[7.49177,47.50876],[7.49178,47.63468],[7.7845,47.63428],[7.78415,47.57123],[7.81074,47.57114],[7.81074,47.56216],[7.82395,47.56206],[7.82387,47.54414],[7.86368,47.54397],[7.86363,47.53498],[7.87679,47.53495],[7.87675,47.52599],[7.8901,47.52596],[7.89006,47.51695],[7.90319,47.51692],[7.9031,47.49886],[7.91649,47.49883],[7.91645,47.48976],[7.95612,47.48967],[7.95595,47.47162]]],terms_text:"Orthofoto WMS Solothurn",best:true,description:"This imagery is provided via a proxy operated by https://sosm.ch/",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/ch/KantonSolothurn-SOGIS-wms.png"},{id:"Solothurn-infrared-SOGIS",name:"Kanton Solothurn Infrarot (SOGIS)",type:"wms",template:"https://geoweb.so.ch/wms/sogis_orthofoto.wms?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Orthofoto_CIR_SO&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2017-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[15,19],polygon:[[[7.57042,47.15792],[7.55736,47.15795],[7.55732,47.14888],[7.54421,47.14895],[7.54417,47.13991],[7.53098,47.13991],[7.53093,47.12196],[7.51765,47.12196],[7.51769,47.11292],[7.49131,47.11301],[7.49135,47.10403],[7.4782,47.104],[7.47816,47.09496],[7.49144,47.09499],[7.4914,47.07702],[7.47816,47.07705],[7.4782,47.06804],[7.42552,47.06801],[7.42543,47.08601],[7.37279,47.08598],[7.37288,47.10403],[7.3596,47.10403],[7.35955,47.131],[7.41228,47.131],[7.41223,47.14901],[7.42538,47.14901],[7.42552,47.15801],[7.39913,47.15804],[7.39913,47.14901],[7.3727,47.14898],[7.3727,47.18498],[7.34627,47.18492],[7.34636,47.19391],[7.33307,47.19394],[7.33307,47.22991],[7.37256,47.22991],[7.3727,47.2389],[7.399,47.23896],[7.39913,47.24792],[7.41228,47.24792],[7.41228,47.26592],[7.45186,47.26589],[7.45195,47.2749],[7.46505,47.27493],[7.4651,47.28385],[7.47829,47.28385],[7.47834,47.29293],[7.49149,47.29289],[7.49162,47.30184],[7.5312,47.30181],[7.53129,47.31979],[7.54448,47.31985],[7.54453,47.3288],[7.55768,47.32883],[7.55768,47.33786],[7.53125,47.33786],[7.53133,47.35586],[7.51801,47.35583],[7.5181,47.36483],[7.43862,47.36492],[7.43867,47.37389],[7.42538,47.37395],[7.42543,47.40081],[7.38558,47.4009],[7.38567,47.4098],[7.35915,47.4098],[7.35915,47.41878],[7.37239,47.41884],[7.37247,47.43682],[7.38571,47.43682],[7.38571,47.44104],[7.39563,47.44016],[7.3963,47.44258],[7.40761,47.4411],[7.40793,47.44225],[7.40313,47.44246],[7.39738,47.44331],[7.39832,47.44583],[7.41214,47.44583],[7.41228,47.45478],[7.43867,47.45488],[7.4388,47.47053],[7.45007,47.46941],[7.45007,47.47223],[7.44647,47.47223],[7.44647,47.47381],[7.44293,47.4739],[7.44288,47.47553],[7.43921,47.4756],[7.43921,47.4772],[7.43557,47.47729],[7.43548,47.47899],[7.4174,47.47896],[7.41744,47.48573],[7.42099,47.48573],[7.42108,47.49082],[7.42763,47.49073],[7.42852,47.49349],[7.43099,47.49643],[7.43485,47.49889],[7.4419,47.49552],[7.44665,47.49455],[7.45011,47.49176],[7.45087,47.4907],[7.46451,47.49073],[7.46456,47.48903],[7.46819,47.489],[7.46819,47.48566],[7.47187,47.48573],[7.47192,47.48233],[7.48269,47.48239],[7.48264,47.48388],[7.48623,47.48397],[7.48637,47.48566],[7.48991,47.48566],[7.49,47.4907],[7.4997,47.49073],[7.49965,47.4914],[7.49175,47.49194],[7.49175,47.49513],[7.49822,47.49479],[7.49889,47.49585],[7.49566,47.49628],[7.49171,47.49625],[7.4918,47.49973],[7.50504,47.4997],[7.50504,47.50874],[7.5448,47.50871],[7.54474,47.45482],[7.49169,47.45469],[7.49175,47.44581],[7.46529,47.44577],[7.46522,47.40983],[7.49156,47.40979],[7.49175,47.39192],[7.50489,47.39183],[7.50489,47.40068],[7.51821,47.40077],[7.51834,47.41876],[7.55794,47.41872],[7.55813,47.44581],[7.58453,47.44572],[7.58441,47.43667],[7.61094,47.43662],[7.611,47.4637],[7.59767,47.4637],[7.59793,47.49964],[7.62433,47.49969],[7.62445,47.4906],[7.63778,47.49055],[7.63784,47.4996],[7.67757,47.49947],[7.67745,47.49047],[7.70385,47.49043],[7.70391,47.48146],[7.71711,47.48129],[7.71711,47.45452],[7.70397,47.45452],[7.70385,47.44559],[7.69046,47.44551],[7.69033,47.40957],[7.67713,47.40949],[7.67713,47.40068],[7.65066,47.40068],[7.65047,47.37365],[7.67706,47.37357],[7.67706,47.38251],[7.71667,47.38251],[7.71679,47.37344],[7.74307,47.3734],[7.74307,47.35538],[7.7562,47.35534],[7.75633,47.3464],[7.78261,47.34627],[7.78292,47.36433],[7.79612,47.36428],[7.79619,47.37327],[7.82265,47.37314],[7.82271,47.38229],[7.84912,47.38212],[7.84924,47.39106],[7.86251,47.39097],[7.86263,47.40906],[7.8759,47.40897],[7.87602,47.41803],[7.90242,47.41795],[7.90242,47.40897],[7.92889,47.4088],[7.92914,47.41782],[7.94215,47.41769],[7.94266,47.46276],[7.95592,47.46259],[7.95612,47.47164],[7.98239,47.47155],[7.98239,47.45353],[7.99553,47.45353],[7.99521,47.41747],[8.0218,47.41743],[8.02155,47.39935],[8.03456,47.39926],[8.03468,47.39028],[8.04788,47.39015],[8.04769,47.37224],[8.03456,47.37232],[8.03437,47.3544],[8.02117,47.35427],[8.02072,47.32739],[7.99445,47.32747],[7.99426,47.31857],[7.96773,47.31866],[7.96767,47.30966],[7.9412,47.30992],[7.94133,47.32778],[7.91486,47.32786],[7.91467,47.30988],[7.9016,47.31005],[7.9014,47.30097],[7.87501,47.3011],[7.87501,47.29223],[7.86165,47.29212],[7.86154,47.27409],[7.84843,47.27415],[7.8483,47.26523],[7.83502,47.2652],[7.83502,47.25624],[7.79535,47.25636],[7.7953,47.24741],[7.72924,47.24756],[7.72929,47.25652],[7.71623,47.25667],[7.71618,47.26559],[7.70304,47.26559],[7.70304,47.27461],[7.68975,47.27467],[7.68989,47.28368],[7.66341,47.28371],[7.66332,47.2747],[7.61055,47.27476],[7.61041,47.24787],[7.62352,47.24765],[7.62356,47.23879],[7.64986,47.23876],[7.64999,47.22977],[7.66305,47.22971],[7.6631,47.21178],[7.67621,47.21169],[7.67623,47.19372],[7.68938,47.19369],[7.68924,47.17572],[7.70243,47.1756],[7.70248,47.16663],[7.71567,47.16663],[7.71558,47.15769],[7.70239,47.15766],[7.70234,47.14869],[7.66267,47.14881],[7.66281,47.13978],[7.63633,47.1399],[7.63647,47.14869],[7.5968,47.14893],[7.59684,47.13996],[7.57041,47.13999],[7.57042,47.15792]]],terms_text:"Orthofoto WMS Solothurn",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/ch/KantonSolothurn-SOGIS-wms.png"},{id:"Solothurn-sogis2014-dom-wms",name:"Kanton Solothurn, DOM Relief 2014 50cm",type:"wms",template:"https://geoweb.so.ch/wms/wms_lidar?LAYERS=dom_relief2014_50cm&SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/jpeg&CRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2014-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",zoomExtent:[8,22],polygon:[[[7.95595,47.47162],[7.98239,47.47155],[7.98239,47.45353],[7.99553,47.45353],[7.99521,47.41747],[8.0218,47.41743],[8.02155,47.39935],[8.03456,47.39926],[8.03468,47.39028],[8.04788,47.39022],[8.04769,47.37224],[8.03456,47.37232],[8.03437,47.3544],[8.02117,47.35427],[8.02072,47.32739],[7.99445,47.32747],[7.99426,47.31857],[7.96773,47.31866],[7.96767,47.30966],[7.94122,47.30978],[7.94133,47.32778],[7.91486,47.32786],[7.91467,47.30988],[7.9016,47.31005],[7.9014,47.30097],[7.87501,47.3011],[7.87501,47.29223],[7.86165,47.29212],[7.86154,47.27409],[7.84832,47.27416],[7.8483,47.26523],[7.83502,47.2652],[7.83502,47.25624],[7.79535,47.25636],[7.7953,47.24741],[7.72924,47.24756],[7.72929,47.25652],[7.71623,47.25667],[7.71618,47.26559],[7.70304,47.26559],[7.70304,47.27461],[7.68975,47.27467],[7.68989,47.28368],[7.66341,47.28371],[7.66332,47.2747],[7.61055,47.27476],[7.61041,47.24787],[7.62352,47.24777],[7.62356,47.23879],[7.64986,47.23876],[7.64999,47.22977],[7.6499,47.22083],[7.66308,47.22073],[7.6631,47.21178],[7.66297,47.20273],[7.67617,47.2027],[7.67623,47.19372],[7.68938,47.19369],[7.68924,47.17572],[7.70243,47.1756],[7.70234,47.14869],[7.66267,47.14881],[7.66281,47.13978],[7.63633,47.1399],[7.63647,47.14869],[7.5968,47.14893],[7.59684,47.13996],[7.57041,47.13999],[7.57042,47.15792],[7.55736,47.15795],[7.55732,47.14888],[7.54421,47.14895],[7.54417,47.13991],[7.53098,47.13991],[7.53095,47.13097],[7.51767,47.13097],[7.51765,47.12196],[7.51769,47.11292],[7.49131,47.11301],[7.49135,47.10403],[7.4782,47.104],[7.47813,47.07705],[7.46493,47.07708],[7.46498,47.06807],[7.42552,47.06801],[7.42543,47.08601],[7.37279,47.08598],[7.37288,47.10403],[7.3596,47.10403],[7.35955,47.131],[7.41228,47.131],[7.41223,47.14901],[7.42538,47.14901],[7.42552,47.15801],[7.3727,47.15796],[7.3727,47.18498],[7.34627,47.18492],[7.34636,47.20287],[7.33307,47.2029],[7.33307,47.22096],[7.34614,47.22096],[7.34614,47.22991],[7.37256,47.22991],[7.3727,47.2389],[7.399,47.23896],[7.39913,47.24792],[7.41228,47.24792],[7.41228,47.26592],[7.45186,47.26589],[7.45195,47.2749],[7.46505,47.27493],[7.4651,47.28385],[7.47829,47.28385],[7.47834,47.29293],[7.5046,47.29288],[7.50473,47.30183],[7.5312,47.30181],[7.53129,47.31979],[7.54448,47.31985],[7.54453,47.3288],[7.55768,47.32883],[7.55768,47.33786],[7.53125,47.33786],[7.53133,47.35586],[7.51801,47.35583],[7.5181,47.36483],[7.3988,47.36484],[7.39889,47.39182],[7.38564,47.39181],[7.38564,47.4008],[7.37234,47.4008],[7.37234,47.40978],[7.34584,47.40978],[7.34584,47.41878],[7.31925,47.41878],[7.31925,47.44578],[7.4121,47.44578],[7.4121,47.49078],[7.42535,47.49078],[7.42535,47.49981],[7.43856,47.49981],[7.43856,47.50876],[7.49177,47.50876],[7.49178,47.63468],[7.7845,47.63428],[7.78415,47.57123],[7.81074,47.57114],[7.81074,47.56216],[7.82395,47.56206],[7.82387,47.54414],[7.86368,47.54397],[7.86363,47.53498],[7.87679,47.53495],[7.87675,47.52599],[7.8901,47.52596],[7.89006,47.51695],[7.90319,47.51692],[7.9031,47.49886],[7.91649,47.49883],[7.91645,47.48976],[7.95612,47.48967],[7.95595,47.47162]]],terms_text:"DOM Relief 2014 - Auflösung 50cm, WMS Solothurn (SOGIS)"},{id:"Solothurn-sogis2014-dtm-wms",name:"Kanton Solothurn, DTM Relief 2014 50cm",type:"wms",template:"https://geoweb.so.ch/wms/wms_lidar?LAYERS=dtm_relief2014_50cm&SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/jpeg&CRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2014-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",zoomExtent:[8,22],polygon:[[[7.95595,47.47162],[7.98239,47.47155],[7.98239,47.45353],[7.99553,47.45353],[7.99521,47.41747],[8.0218,47.41743],[8.02155,47.39935],[8.03456,47.39926],[8.03468,47.39028],[8.04788,47.39022],[8.04769,47.37224],[8.03456,47.37232],[8.03437,47.3544],[8.02117,47.35427],[8.02072,47.32739],[7.99445,47.32747],[7.99426,47.31857],[7.96773,47.31866],[7.96767,47.30966],[7.94122,47.30978],[7.94133,47.32778],[7.91486,47.32786],[7.91467,47.30988],[7.9016,47.31005],[7.9014,47.30097],[7.87501,47.3011],[7.87501,47.29223],[7.86165,47.29212],[7.86154,47.27409],[7.84832,47.27416],[7.8483,47.26523],[7.83502,47.2652],[7.83502,47.25624],[7.79535,47.25636],[7.7953,47.24741],[7.72924,47.24756],[7.72929,47.25652],[7.71623,47.25667],[7.71618,47.26559],[7.70304,47.26559],[7.70304,47.27461],[7.68975,47.27467],[7.68989,47.28368],[7.66341,47.28371],[7.66332,47.2747],[7.61055,47.27476],[7.61041,47.24787],[7.62352,47.24777],[7.62356,47.23879],[7.64986,47.23876],[7.64999,47.22977],[7.6499,47.22083],[7.66308,47.22073],[7.6631,47.21178],[7.66297,47.20273],[7.67617,47.2027],[7.67623,47.19372],[7.68938,47.19369],[7.68924,47.17572],[7.70243,47.1756],[7.70234,47.14869],[7.66267,47.14881],[7.66281,47.13978],[7.63633,47.1399],[7.63647,47.14869],[7.5968,47.14893],[7.59684,47.13996],[7.57041,47.13999],[7.57042,47.15792],[7.55736,47.15795],[7.55732,47.14888],[7.54421,47.14895],[7.54417,47.13991],[7.53098,47.13991],[7.53095,47.13097],[7.51767,47.13097],[7.51765,47.12196],[7.51769,47.11292],[7.49131,47.11301],[7.49135,47.10403],[7.4782,47.104],[7.47813,47.07705],[7.46493,47.07708],[7.46498,47.06807],[7.42552,47.06801],[7.42543,47.08601],[7.37279,47.08598],[7.37288,47.10403],[7.3596,47.10403],[7.35955,47.131],[7.41228,47.131],[7.41223,47.14901],[7.42538,47.14901],[7.42552,47.15801],[7.3727,47.15796],[7.3727,47.18498],[7.34627,47.18492],[7.34636,47.20287],[7.33307,47.2029],[7.33307,47.22096],[7.34614,47.22096],[7.34614,47.22991],[7.37256,47.22991],[7.3727,47.2389],[7.399,47.23896],[7.39913,47.24792],[7.41228,47.24792],[7.41228,47.26592],[7.45186,47.26589],[7.45195,47.2749],[7.46505,47.27493],[7.4651,47.28385],[7.47829,47.28385],[7.47834,47.29293],[7.5046,47.29288],[7.50473,47.30183],[7.5312,47.30181],[7.53129,47.31979],[7.54448,47.31985],[7.54453,47.3288],[7.55768,47.32883],[7.55768,47.33786],[7.53125,47.33786],[7.53133,47.35586],[7.51801,47.35583],[7.5181,47.36483],[7.3988,47.36484],[7.39889,47.39182],[7.38564,47.39181],[7.38564,47.4008],[7.37234,47.4008],[7.37234,47.40978],[7.34584,47.40978],[7.34584,47.41878],[7.31925,47.41878],[7.31925,47.44578],[7.4121,47.44578],[7.4121,47.49078],[7.42535,47.49078],[7.42535,47.49981],[7.43856,47.49981],[7.43856,47.50876],[7.49177,47.50876],[7.49178,47.63468],[7.7845,47.63428],[7.78415,47.57123],[7.81074,47.57114],[7.81074,47.56216],[7.82395,47.56206],[7.82387,47.54414],[7.86368,47.54397],[7.86363,47.53498],[7.87679,47.53495],[7.87675,47.52599],[7.8901,47.52596],[7.89006,47.51695],[7.90319,47.51692],[7.9031,47.49886],[7.91649,47.49883],[7.91645,47.48976],[7.95612,47.48967],[7.95595,47.47162]]],terms_text:"DTM Relief 2014 - Auflösung 50cm, WMS Solothurn (SOGIS)"},{id:"KTTHURGAU2017",name:"Kanton Thurgau OF 2017",type:"tms",template:"https://mapproxy.osm.ch/tiles/KTTHURGAU2017/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",zoomExtent:[8,21],polygon:[[[8.63768,47.70041],[8.78328,47.6988],[8.78304,47.68533],[8.87027,47.68427],[8.86997,47.6709],[8.89901,47.67047],[8.89867,47.65698],[8.9277,47.65661],[8.92828,47.67015],[8.95726,47.66973],[8.95774,47.68327],[9.19061,47.67994],[9.19027,47.66645],[9.21922,47.66603],[9.21899,47.65256],[9.24784,47.6521],[9.24747,47.63864],[9.3057,47.63765],[9.30526,47.6242],[9.33417,47.62371],[9.33348,47.59674],[9.39151,47.59577],[9.39114,47.58235],[9.42007,47.58176],[9.4186,47.54139],[9.44754,47.54084],[9.44717,47.5273],[9.47605,47.52681],[9.47519,47.49986],[9.50414,47.49935],[9.5031,47.47242],[9.41596,47.47392],[9.41554,47.46045],[9.3576,47.46141],[9.35818,47.47498],[9.32896,47.47534],[9.32864,47.46188],[9.18361,47.4642],[9.18411,47.47769],[9.15492,47.4781],[9.15466,47.46463],[9.06736,47.46583],[9.06718,47.45234],[9.09609,47.45193],[9.09582,47.43853],[9.06663,47.43883],[9.06642,47.42537],[9.00829,47.4262],[9.00714,47.38573],[8.97811,47.38616],[8.9774,47.35913],[8.9194,47.35989],[8.92032,47.38697],[8.89136,47.38725],[8.89286,47.44117],[8.86398,47.44149],[8.86604,47.52251],[8.80784,47.52317],[8.80894,47.56373],[8.77985,47.56403],[8.78024,47.57751],[8.72209,47.57814],[8.72337,47.63213],[8.6652,47.63273],[8.6658,47.6598],[8.63674,47.66],[8.63768,47.70041]]],terms_text:"Kanton Thurgau OF 2017",best:true,description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{id:"Zug-2011",name:"Kanton Zug 2011",type:"wms",template:"https://services.geo.zg.ch:443/ows/Orthofotos?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=zg.orthofoto_2011_kt_zg&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2011-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",zoomExtent:[10,21],polygon:[[[8.38726,47.10908],[8.38983,47.25303],[8.42944,47.25265],[8.42894,47.22567],[8.60057,47.22407],[8.60037,47.21507],[8.61357,47.21495],[8.61338,47.20594],[8.62658,47.20582],[8.62618,47.18783],[8.63934,47.18769],[8.63914,47.1787],[8.66555,47.17844],[8.66534,47.16943],[8.7049,47.16899],[8.70427,47.14203],[8.69105,47.14215],[8.69046,47.11516],[8.67731,47.1153],[8.67706,47.10634],[8.66389,47.10647],[8.66371,47.0975],[8.65052,47.09761],[8.65031,47.08863],[8.59764,47.08915],[8.59746,47.08015],[8.49204,47.0812],[8.49245,47.09917],[8.43969,47.09967],[8.43996,47.10863],[8.38726,47.10908]]],terms_text:"GIS Kanton Zug",best:true},{id:"Zug-2018",name:"Kanton Zug Gemeinde Zug Süd 2018",type:"wms",template:"https://services.geo.zg.ch:443/ows/Orthofotos?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=zg.orthofoto_2018_kt_zg&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2018-01-01T00:00:00.000Z",startDate:"2018-01-01T00:00:00.000Z",zoomExtent:[10,21],polygon:[[[8.50052,47.11291],[8.49638,47.11761],[8.49451,47.12364],[8.49538,47.12653],[8.50462,47.13724],[8.50322,47.13933],[8.50466,47.14722],[8.51099,47.15916],[8.56415,47.15299],[8.5652,47.14929],[8.54924,47.13843],[8.55098,47.12132],[8.50052,47.11291]]],terms_text:"GIS Kanton Zug",best:true},{id:"Zug-2016",name:"Kanton Zug Nord 2016",type:"wms",template:"https://services.geo.zg.ch:443/ows/Orthofotos?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=zg.orthofoto_2016_kt_zg&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",zoomExtent:[10,21],polygon:[[[8.41093,47.16521],[8.40759,47.16918],[8.40754,47.23725],[8.419,47.23722],[8.42336,47.22958],[8.43891,47.22945],[8.48056,47.2125],[8.5294,47.22688],[8.57951,47.22275],[8.57946,47.17083],[8.57535,47.14926],[8.56428,47.14944],[8.53594,47.15205],[8.50658,47.15268],[8.50686,47.162],[8.44723,47.16256],[8.41093,47.16521]]],terms_text:"GIS Kanton Zug",best:true},{id:"OGDLidarZH-DOM",name:"Kanton Zurich, Oberflächenschummerung 50cm",type:"wms",template:"https://wms.zh.ch/OGDLidarZH?FORMAT=image/jpeg&VERSION=1.3.0&SERVICE=WMS&REQUEST=GetMap&LAYERS=dom2014hillshade&CRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2014-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",zoomExtent:[8,22],polygon:[[[8.71338,47.21388],[8.7137,47.22737],[8.8117,47.22626],[8.80337,47.23858],[8.80866,47.2431],[8.82448,47.24656],[8.82971,47.24539],[8.83652,47.24257],[8.84568,47.24253],[8.84837,47.24322],[8.85232,47.24034],[8.86206,47.23882],[8.86472,47.23966],[8.86863,47.23968],[8.87339,47.24125],[8.87882,47.24476],[8.88054,47.24791],[8.89878,47.24976],[8.90281,47.25094],[8.91025,47.25003],[8.92735,47.25406],[8.93644,47.25499],[8.94233,47.25849],[8.94423,47.26173],[8.94882,47.26536],[8.95094,47.2686],[8.95068,47.27108],[8.953,47.27285],[8.95411,47.27505],[8.95504,47.28251],[8.95171,47.28527],[8.94664,47.28647],[8.95258,47.28844],[8.95454,47.28982],[8.96141,47.30098],[8.97552,47.30245],[8.98006,47.30416],[8.99153,47.31893],[8.99069,47.32183],[8.98637,47.32542],[8.98548,47.32778],[8.98364,47.32931],[8.98592,47.33815],[8.98464,47.34061],[8.98079,47.34237],[8.98088,47.34835],[8.97785,47.35437],[8.9759,47.35606],[8.97002,47.35843],[8.96572,47.3589],[8.96238,47.36252],[8.95665,47.37432],[8.9521,47.37836],[8.94778,47.37971],[8.95023,47.38346],[8.95018,47.38596],[8.9488,47.38836],[8.9397,47.39403],[8.93637,47.39496],[8.93251,47.39871],[8.92801,47.40148],[8.92278,47.4038],[8.91388,47.40569],[8.91924,47.41213],[8.92049,47.41915],[8.91829,47.42323],[8.92094,47.42544],[8.92107,47.42828],[8.92571,47.42695],[8.93437,47.42796],[8.93877,47.43173],[8.93974,47.43411],[8.93889,47.43725],[8.93511,47.43973],[8.92349,47.43953],[8.91973,47.44081],[8.91322,47.44119],[8.91162,47.44347],[8.91527,47.44628],[8.91499,47.45004],[8.91196,47.45378],[8.90517,47.45791],[8.90183,47.46435],[8.89735,47.46898],[8.89581,47.47219],[8.89135,47.4738],[8.89143,47.47821],[8.90142,47.48133],[8.90428,47.48449],[8.90314,47.48928],[8.90001,47.49187],[8.89967,47.49885],[8.90357,47.50404],[8.90413,47.50745],[8.90322,47.51948],[8.90497,47.52447],[8.90365,47.52691],[8.89982,47.52965],[8.88423,47.53392],[8.87883,47.53277],[8.87061,47.53477],[8.8602,47.53488],[8.85674,47.53594],[8.84782,47.5358],[8.84614,47.54087],[8.8403,47.54654],[8.83728,47.55278],[8.84275,47.5537],[8.84648,47.5562],[8.85269,47.55645],[8.8562,47.55792],[8.85775,47.56141],[8.85728,47.56489],[8.85511,47.56721],[8.85079,47.56818],[8.84763,47.57023],[8.84538,47.57061],[8.8448,47.57309],[8.84211,47.57513],[8.83326,47.57769],[8.82962,47.57778],[8.82661,47.57662],[8.82137,47.57756],[8.81432,47.57598],[8.81234,47.5778],[8.81222,47.58473],[8.81067,47.58639],[8.80812,47.58738],[8.76818,47.59674],[8.7543,47.59729],[8.75529,47.60108],[8.75416,47.60273],[8.74883,47.60588],[8.74829,47.60874],[8.7507,47.60981],[8.75255,47.61292],[8.75575,47.61217],[8.76102,47.61335],[8.78169,47.60634],[8.78165,47.60345],[8.78467,47.59993],[8.80168,47.5966],[8.80512,47.59686],[8.80895,47.59938],[8.81074,47.60981],[8.81866,47.61372],[8.82001,47.61526],[8.82089,47.62058],[8.82015,47.62415],[8.82415,47.6256],[8.83079,47.63206],[8.83448,47.64099],[8.83182,47.64945],[8.82695,47.65206],[8.81168,47.65599],[8.81112,47.6621],[8.81192,47.66454],[8.81041,47.66752],[8.80881,47.66857],[8.80293,47.66978],[8.79299,47.66919],[8.78685,47.66978],[8.78453,47.66899],[8.78216,47.66659],[8.77921,47.65695],[8.77763,47.65563],[8.77398,47.65435],[8.76623,47.65438],[8.76108,47.65257],[8.75852,47.65033],[8.75464,47.64883],[8.7534,47.64733],[8.74839,47.64613],[8.74329,47.64749],[8.73882,47.64651],[8.72376,47.64753],[8.72063,47.64664],[8.71492,47.64885],[8.70826,47.64764],[8.70481,47.65039],[8.70053,47.65199],[8.69427,47.65307],[8.69242,47.65581],[8.68632,47.66094],[8.68485,47.66413],[8.68574,47.66799],[8.68326,47.67315],[8.68056,47.67561],[8.67521,47.6776],[8.67642,47.68177],[8.67561,47.68661],[8.67427,47.68799],[8.67227,47.68891],[8.66273,47.69029],[8.64644,47.69847],[8.63968,47.69877],[8.6355,47.69743],[8.62162,47.69554],[8.61818,47.69279],[8.61744,47.69087],[8.62007,47.68134],[8.61478,47.68308],[8.60917,47.68188],[8.60199,47.67451],[8.59954,47.66923],[8.60275,47.66132],[8.60979,47.6568],[8.6141,47.6564],[8.61574,47.65557],[8.62231,47.65104],[8.62227,47.65024],[8.62048,47.64758],[8.61939,47.65043],[8.61521,47.65452],[8.6093,47.65677],[8.60324,47.65654],[8.60069,47.65541],[8.59788,47.65276],[8.59645,47.64876],[8.59092,47.64623],[8.58937,47.6444],[8.58874,47.63936],[8.59116,47.62755],[8.59325,47.62233],[8.59838,47.61587],[8.59854,47.6145],[8.59114,47.60917],[8.58937,47.60682],[8.58796,47.60319],[8.58788,47.59909],[8.58203,47.59793],[8.57398,47.59329],[8.57146,47.58988],[8.57035,47.58633],[8.57203,47.57985],[8.56771,47.57799],[8.56506,47.57524],[8.56117,47.56407],[8.55707,47.55947],[8.55616,47.56336],[8.55206,47.56904],[8.55334,47.57146],[8.5526,47.57599],[8.55007,47.57806],[8.54666,47.57923],[8.5435,47.58228],[8.54319,47.5851],[8.54888,47.5879],[8.55175,47.58777],[8.55764,47.58963],[8.56114,47.59151],[8.56265,47.5946],[8.56668,47.59565],[8.56902,47.59748],[8.56953,47.60049],[8.57237,47.60386],[8.57308,47.60641],[8.57562,47.60676],[8.579,47.60845],[8.58076,47.61031],[8.58125,47.61203],[8.58025,47.61456],[8.57712,47.61636],[8.57525,47.61957],[8.57277,47.6211],[8.56785,47.62164],[8.56341,47.62697],[8.56105,47.62838],[8.54803,47.62998],[8.54558,47.63122],[8.54498,47.63297],[8.54288,47.63458],[8.53995,47.63565],[8.52769,47.63634],[8.52112,47.63887],[8.51478,47.6385],[8.50932,47.63559],[8.50829,47.62942],[8.50161,47.62597],[8.5007,47.62421],[8.50149,47.62154],[8.49253,47.61893],[8.48884,47.61953],[8.47669,47.61937],[8.47439,47.61838],[8.47154,47.61495],[8.47129,47.61307],[8.46785,47.61272],[8.46446,47.61109],[8.46173,47.60659],[8.45519,47.60676],[8.45061,47.60411],[8.4499,47.60164],[8.4507,47.59584],[8.45382,47.59343],[8.45428,47.5866],[8.4563,47.5848],[8.46014,47.58382],[8.46332,47.58044],[8.46881,47.5795],[8.46219,47.57653],[8.45419,47.57668],[8.43642,47.57154],[8.43161,47.57102],[8.42476,47.57231],[8.41477,47.56879],[8.41304,47.56745],[8.41034,47.56194],[8.41039,47.55972],[8.40789,47.55465],[8.40846,47.55018],[8.39964,47.54444],[8.39609,47.543],[8.39469,47.54094],[8.39495,47.53674],[8.39136,47.53568],[8.38835,47.53305],[8.38525,47.53316],[8.38113,47.53219],[8.3774,47.52969],[8.37518,47.52679],[8.37279,47.51651],[8.36579,47.51663],[8.35666,47.51348],[8.35439,47.51104],[8.35103,47.50314],[8.3524,47.49957],[8.35163,47.4973],[8.35274,47.49484],[8.3545,47.49355],[8.3557,47.48979],[8.35533,47.48525],[8.35698,47.47931],[8.35891,47.47743],[8.36187,47.47645],[8.36722,47.47654],[8.36702,47.47487],[8.36073,47.47222],[8.35903,47.46604],[8.35996,47.46381],[8.36326,47.46204],[8.3673,47.45653],[8.36975,47.45504],[8.37393,47.45472],[8.37754,47.45201],[8.37583,47.45068],[8.37441,47.44614],[8.37623,47.43818],[8.37168,47.43675],[8.36855,47.43406],[8.3681,47.43158],[8.36904,47.42863],[8.37222,47.42603],[8.38283,47.42346],[8.38371,47.42251],[8.38073,47.42207],[8.37555,47.4178],[8.37598,47.41378],[8.37441,47.40906],[8.36067,47.40664],[8.35789,47.40542],[8.35629,47.40377],[8.35661,47.39961],[8.36195,47.39516],[8.36577,47.39429],[8.37601,47.3947],[8.37743,47.39218],[8.38036,47.39048],[8.38761,47.39035],[8.38832,47.38012],[8.39034,47.37527],[8.39355,47.3719],[8.39387,47.36945],[8.39574,47.3671],[8.39902,47.36608],[8.39836,47.36408],[8.40012,47.36094],[8.40103,47.35433],[8.39728,47.34677],[8.39779,47.34475],[8.40186,47.3391],[8.40931,47.33409],[8.4061,47.32975],[8.40578,47.32667],[8.40689,47.32447],[8.41295,47.3205],[8.41611,47.31996],[8.42948,47.32227],[8.43556,47.32083],[8.43437,47.31954],[8.43155,47.31851],[8.42609,47.31375],[8.42276,47.30706],[8.42311,47.30368],[8.41745,47.3015],[8.41372,47.29824],[8.40012,47.29564],[8.39768,47.29392],[8.39518,47.29516],[8.39108,47.29552],[8.38602,47.29437],[8.38272,47.29225],[8.38198,47.29034],[8.38255,47.2881],[8.38508,47.28565],[8.38977,47.27507],[8.39563,47.271],[8.39407,47.26672],[8.39415,47.26361],[8.39756,47.25986],[8.39614,47.25481],[8.39742,47.25189],[8.40647,47.24452],[8.40826,47.24118],[8.40761,47.23957],[8.4096,47.23585],[8.41073,47.22799],[8.41248,47.22433],[8.41695,47.22014],[8.41959,47.21902],[8.42269,47.21886],[8.42977,47.22],[8.43936,47.21937],[8.45,47.21363],[8.4546,47.21334],[8.45625,47.21081],[8.4591,47.20934],[8.46447,47.20928],[8.46609,47.20862],[8.46868,47.20533],[8.47329,47.20398],[8.47693,47.20458],[8.48399,47.20392],[8.49489,47.20738],[8.504,47.20768],[8.51538,47.21152],[8.51753,47.21271],[8.51906,47.21495],[8.5306,47.21306],[8.53307,47.21325],[8.5415,47.21778],[8.54456,47.21707],[8.55407,47.21726],[8.55858,47.21517],[8.56984,47.2139],[8.57491,47.21255],[8.57749,47.20771],[8.58044,47.2064],[8.58408,47.20603],[8.59012,47.20714],[8.58965,47.2046],[8.59074,47.20195],[8.59358,47.1986],[8.59581,47.19753],[8.60168,47.19722],[8.60653,47.1992],[8.60725,47.19885],[8.61097,47.19387],[8.61128,47.19059],[8.61391,47.18838],[8.61522,47.18515],[8.61938,47.18045],[8.61976,47.17918],[8.61721,47.17359],[8.6196,47.1698],[8.62292,47.16821],[8.6339,47.16715],[8.63561,47.16578],[8.63965,47.16459],[8.64287,47.16443],[8.65216,47.16598],[8.65425,47.16552],[8.6549,47.15967],[8.65649,47.15783],[8.65882,47.15658],[8.66853,47.15492],[8.67847,47.15558],[8.68241,47.15759],[8.69361,47.15898],[8.69804,47.16134],[8.69886,47.16303],[8.6977,47.17033],[8.69599,47.17232],[8.68919,47.17566],[8.6872,47.17959],[8.6879,47.18229],[8.69186,47.18485],[8.69824,47.19205],[8.70323,47.19326],[8.70852,47.19602],[8.71423,47.19693],[8.71692,47.19893],[8.74212,47.2071],[8.74218,47.21355],[8.71338,47.21388]]],terms_text:"Geographisches Informationssystem des Kantons Zürich (GIS-ZH), Oberflächenschummerung"},{id:"OGDOrthoZH2016",name:"Kanton Zurich, Orthofoto ZH Frühjahr 2015/16 RGB 10cm",type:"wms",template:"https://wms.zh.ch/OGDOrthoZH?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&LAYERS=ortho_w_15&FORMAT=image/jpeg&CRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2016-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[8,22],polygon:[[[8.71338,47.21388],[8.7137,47.22737],[8.8117,47.22626],[8.80337,47.23858],[8.80866,47.2431],[8.82448,47.24656],[8.82971,47.24539],[8.83652,47.24257],[8.84568,47.24253],[8.84837,47.24322],[8.85232,47.24034],[8.86206,47.23882],[8.86472,47.23966],[8.86863,47.23968],[8.87339,47.24125],[8.87882,47.24476],[8.88054,47.24791],[8.89878,47.24976],[8.90281,47.25094],[8.91025,47.25003],[8.92735,47.25406],[8.93644,47.25499],[8.94233,47.25849],[8.94423,47.26173],[8.94882,47.26536],[8.95094,47.2686],[8.95068,47.27108],[8.953,47.27285],[8.95411,47.27505],[8.95504,47.28251],[8.95171,47.28527],[8.94664,47.28647],[8.95258,47.28844],[8.95454,47.28982],[8.96141,47.30098],[8.97552,47.30245],[8.98006,47.30416],[8.99153,47.31893],[8.99069,47.32183],[8.98637,47.32542],[8.98548,47.32778],[8.98364,47.32931],[8.98592,47.33815],[8.98464,47.34061],[8.98079,47.34237],[8.98088,47.34835],[8.97785,47.35437],[8.9759,47.35606],[8.97002,47.35843],[8.96572,47.3589],[8.96238,47.36252],[8.95665,47.37432],[8.9521,47.37836],[8.94778,47.37971],[8.95023,47.38346],[8.95018,47.38596],[8.9488,47.38836],[8.9397,47.39403],[8.93637,47.39496],[8.93251,47.39871],[8.92801,47.40148],[8.92278,47.4038],[8.91388,47.40569],[8.91924,47.41213],[8.92049,47.41915],[8.91829,47.42323],[8.92094,47.42544],[8.92107,47.42828],[8.92571,47.42695],[8.93437,47.42796],[8.93877,47.43173],[8.93974,47.43411],[8.93889,47.43725],[8.93511,47.43973],[8.92349,47.43953],[8.91973,47.44081],[8.91322,47.44119],[8.91162,47.44347],[8.91527,47.44628],[8.91499,47.45004],[8.91196,47.45378],[8.90517,47.45791],[8.90183,47.46435],[8.89735,47.46898],[8.89581,47.47219],[8.89135,47.4738],[8.89143,47.47821],[8.90142,47.48133],[8.90428,47.48449],[8.90314,47.48928],[8.90001,47.49187],[8.89967,47.49885],[8.90357,47.50404],[8.90413,47.50745],[8.90322,47.51948],[8.90497,47.52447],[8.90365,47.52691],[8.89982,47.52965],[8.88423,47.53392],[8.87883,47.53277],[8.87061,47.53477],[8.8602,47.53488],[8.85674,47.53594],[8.84782,47.5358],[8.84614,47.54087],[8.8403,47.54654],[8.83728,47.55278],[8.84275,47.5537],[8.84648,47.5562],[8.85269,47.55645],[8.8562,47.55792],[8.85775,47.56141],[8.85728,47.56489],[8.85511,47.56721],[8.85079,47.56818],[8.84763,47.57023],[8.84538,47.57061],[8.8448,47.57309],[8.84211,47.57513],[8.83326,47.57769],[8.82962,47.57778],[8.82661,47.57662],[8.82137,47.57756],[8.81432,47.57598],[8.81234,47.5778],[8.81222,47.58473],[8.81067,47.58639],[8.80812,47.58738],[8.76818,47.59674],[8.7543,47.59729],[8.75529,47.60108],[8.75416,47.60273],[8.74883,47.60588],[8.74829,47.60874],[8.7507,47.60981],[8.75255,47.61292],[8.75575,47.61217],[8.76102,47.61335],[8.78169,47.60634],[8.78165,47.60345],[8.78467,47.59993],[8.80168,47.5966],[8.80512,47.59686],[8.80895,47.59938],[8.81074,47.60981],[8.81866,47.61372],[8.82001,47.61526],[8.82089,47.62058],[8.82015,47.62415],[8.82415,47.6256],[8.83079,47.63206],[8.83448,47.64099],[8.83182,47.64945],[8.82695,47.65206],[8.81168,47.65599],[8.81112,47.6621],[8.81192,47.66454],[8.81041,47.66752],[8.80881,47.66857],[8.80293,47.66978],[8.79299,47.66919],[8.78685,47.66978],[8.78453,47.66899],[8.78216,47.66659],[8.77921,47.65695],[8.77763,47.65563],[8.77398,47.65435],[8.76623,47.65438],[8.76108,47.65257],[8.75852,47.65033],[8.75464,47.64883],[8.7534,47.64733],[8.74839,47.64613],[8.74329,47.64749],[8.73882,47.64651],[8.72376,47.64753],[8.72063,47.64664],[8.71492,47.64885],[8.70826,47.64764],[8.70481,47.65039],[8.70053,47.65199],[8.69427,47.65307],[8.69242,47.65581],[8.68632,47.66094],[8.68485,47.66413],[8.68574,47.66799],[8.68326,47.67315],[8.68056,47.67561],[8.67521,47.6776],[8.67642,47.68177],[8.67561,47.68661],[8.67427,47.68799],[8.67227,47.68891],[8.66273,47.69029],[8.64644,47.69847],[8.63968,47.69877],[8.6355,47.69743],[8.62162,47.69554],[8.61818,47.69279],[8.61744,47.69087],[8.62007,47.68134],[8.61478,47.68308],[8.60917,47.68188],[8.60199,47.67451],[8.59954,47.66923],[8.60275,47.66132],[8.60979,47.6568],[8.6141,47.6564],[8.61574,47.65557],[8.62231,47.65104],[8.62227,47.65024],[8.62048,47.64758],[8.61939,47.65043],[8.61521,47.65452],[8.6093,47.65677],[8.60324,47.65654],[8.60069,47.65541],[8.59788,47.65276],[8.59645,47.64876],[8.59092,47.64623],[8.58937,47.6444],[8.58874,47.63936],[8.59116,47.62755],[8.59325,47.62233],[8.59838,47.61587],[8.59854,47.6145],[8.59114,47.60917],[8.58937,47.60682],[8.58796,47.60319],[8.58788,47.59909],[8.58203,47.59793],[8.57398,47.59329],[8.57146,47.58988],[8.57035,47.58633],[8.57203,47.57985],[8.56771,47.57799],[8.56506,47.57524],[8.56117,47.56407],[8.55707,47.55947],[8.55616,47.56336],[8.55206,47.56904],[8.55334,47.57146],[8.5526,47.57599],[8.55007,47.57806],[8.54666,47.57923],[8.5435,47.58228],[8.54319,47.5851],[8.54888,47.5879],[8.55175,47.58777],[8.55764,47.58963],[8.56114,47.59151],[8.56265,47.5946],[8.56668,47.59565],[8.56902,47.59748],[8.56953,47.60049],[8.57237,47.60386],[8.57308,47.60641],[8.57562,47.60676],[8.579,47.60845],[8.58076,47.61031],[8.58125,47.61203],[8.58025,47.61456],[8.57712,47.61636],[8.57525,47.61957],[8.57277,47.6211],[8.56785,47.62164],[8.56341,47.62697],[8.56105,47.62838],[8.54803,47.62998],[8.54558,47.63122],[8.54498,47.63297],[8.54288,47.63458],[8.53995,47.63565],[8.52769,47.63634],[8.52112,47.63887],[8.51478,47.6385],[8.50932,47.63559],[8.50829,47.62942],[8.50161,47.62597],[8.5007,47.62421],[8.50149,47.62154],[8.49253,47.61893],[8.48884,47.61953],[8.47669,47.61937],[8.47439,47.61838],[8.47154,47.61495],[8.47129,47.61307],[8.46785,47.61272],[8.46446,47.61109],[8.46173,47.60659],[8.45519,47.60676],[8.45061,47.60411],[8.4499,47.60164],[8.4507,47.59584],[8.45382,47.59343],[8.45428,47.5866],[8.4563,47.5848],[8.46014,47.58382],[8.46332,47.58044],[8.46881,47.5795],[8.46219,47.57653],[8.45419,47.57668],[8.43642,47.57154],[8.43161,47.57102],[8.42476,47.57231],[8.41477,47.56879],[8.41304,47.56745],[8.41034,47.56194],[8.41039,47.55972],[8.40789,47.55465],[8.40846,47.55018],[8.39964,47.54444],[8.39609,47.543],[8.39469,47.54094],[8.39495,47.53674],[8.39136,47.53568],[8.38835,47.53305],[8.38525,47.53316],[8.38113,47.53219],[8.3774,47.52969],[8.37518,47.52679],[8.37279,47.51651],[8.36579,47.51663],[8.35666,47.51348],[8.35439,47.51104],[8.35103,47.50314],[8.3524,47.49957],[8.35163,47.4973],[8.35274,47.49484],[8.3545,47.49355],[8.3557,47.48979],[8.35533,47.48525],[8.35698,47.47931],[8.35891,47.47743],[8.36187,47.47645],[8.36722,47.47654],[8.36702,47.47487],[8.36073,47.47222],[8.35903,47.46604],[8.35996,47.46381],[8.36326,47.46204],[8.3673,47.45653],[8.36975,47.45504],[8.37393,47.45472],[8.37754,47.45201],[8.37583,47.45068],[8.37441,47.44614],[8.37623,47.43818],[8.37168,47.43675],[8.36855,47.43406],[8.3681,47.43158],[8.36904,47.42863],[8.37222,47.42603],[8.38283,47.42346],[8.38371,47.42251],[8.38073,47.42207],[8.37555,47.4178],[8.37598,47.41378],[8.37441,47.40906],[8.36067,47.40664],[8.35789,47.40542],[8.35629,47.40377],[8.35661,47.39961],[8.36195,47.39516],[8.36577,47.39429],[8.37601,47.3947],[8.37743,47.39218],[8.38036,47.39048],[8.38761,47.39035],[8.38832,47.38012],[8.39034,47.37527],[8.39355,47.3719],[8.39387,47.36945],[8.39574,47.3671],[8.39902,47.36608],[8.39836,47.36408],[8.40012,47.36094],[8.40103,47.35433],[8.39728,47.34677],[8.39779,47.34475],[8.40186,47.3391],[8.40931,47.33409],[8.4061,47.32975],[8.40578,47.32667],[8.40689,47.32447],[8.41295,47.3205],[8.41611,47.31996],[8.42948,47.32227],[8.43556,47.32083],[8.43437,47.31954],[8.43155,47.31851],[8.42609,47.31375],[8.42276,47.30706],[8.42311,47.30368],[8.41745,47.3015],[8.41372,47.29824],[8.40012,47.29564],[8.39768,47.29392],[8.39518,47.29516],[8.39108,47.29552],[8.38602,47.29437],[8.38272,47.29225],[8.38198,47.29034],[8.38255,47.2881],[8.38508,47.28565],[8.38977,47.27507],[8.39563,47.271],[8.39407,47.26672],[8.39415,47.26361],[8.39756,47.25986],[8.39614,47.25481],[8.39742,47.25189],[8.40647,47.24452],[8.40826,47.24118],[8.40761,47.23957],[8.4096,47.23585],[8.41073,47.22799],[8.41248,47.22433],[8.41695,47.22014],[8.41959,47.21902],[8.42269,47.21886],[8.42977,47.22],[8.43936,47.21937],[8.45,47.21363],[8.4546,47.21334],[8.45625,47.21081],[8.4591,47.20934],[8.46447,47.20928],[8.46609,47.20862],[8.46868,47.20533],[8.47329,47.20398],[8.47693,47.20458],[8.48399,47.20392],[8.49489,47.20738],[8.504,47.20768],[8.51538,47.21152],[8.51753,47.21271],[8.51906,47.21495],[8.5306,47.21306],[8.53307,47.21325],[8.5415,47.21778],[8.54456,47.21707],[8.55407,47.21726],[8.55858,47.21517],[8.56984,47.2139],[8.57491,47.21255],[8.57749,47.20771],[8.58044,47.2064],[8.58408,47.20603],[8.59012,47.20714],[8.58965,47.2046],[8.59074,47.20195],[8.59358,47.1986],[8.59581,47.19753],[8.60168,47.19722],[8.60653,47.1992],[8.60725,47.19885],[8.61097,47.19387],[8.61128,47.19059],[8.61391,47.18838],[8.61522,47.18515],[8.61938,47.18045],[8.61976,47.17918],[8.61721,47.17359],[8.6196,47.1698],[8.62292,47.16821],[8.6339,47.16715],[8.63561,47.16578],[8.63965,47.16459],[8.64287,47.16443],[8.65216,47.16598],[8.65425,47.16552],[8.6549,47.15967],[8.65649,47.15783],[8.65882,47.15658],[8.66853,47.15492],[8.67847,47.15558],[8.68241,47.15759],[8.69361,47.15898],[8.69804,47.16134],[8.69886,47.16303],[8.6977,47.17033],[8.69599,47.17232],[8.68919,47.17566],[8.6872,47.17959],[8.6879,47.18229],[8.69186,47.18485],[8.69824,47.19205],[8.70323,47.19326],[8.70852,47.19602],[8.71423,47.19693],[8.71692,47.19893],[8.74212,47.2071],[8.74218,47.21355],[8.71338,47.21388]]],terms_text:"Geographisches Informationssystem des Kantons Zürich (GIS-ZH), Orthofoto ZH Frühjahr 2015/16 RGB"},{id:"OGDOrthoZH2015",name:"Kanton Zurich, Orthofoto ZH Sommer 2014/15 RGB 10cm",type:"wms",template:"https://wms.zh.ch/OGDOrthoZH?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&LAYERS=ortho_s_14&FORMAT=image/jpeg&CRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",zoomExtent:[8,22],polygon:[[[8.71338,47.21388],[8.7137,47.22737],[8.8117,47.22626],[8.80337,47.23858],[8.80866,47.2431],[8.82448,47.24656],[8.82971,47.24539],[8.83652,47.24257],[8.84568,47.24253],[8.84837,47.24322],[8.85232,47.24034],[8.86206,47.23882],[8.86472,47.23966],[8.86863,47.23968],[8.87339,47.24125],[8.87882,47.24476],[8.88054,47.24791],[8.89878,47.24976],[8.90281,47.25094],[8.91025,47.25003],[8.92735,47.25406],[8.93644,47.25499],[8.94233,47.25849],[8.94423,47.26173],[8.94882,47.26536],[8.95094,47.2686],[8.95068,47.27108],[8.953,47.27285],[8.95411,47.27505],[8.95504,47.28251],[8.95171,47.28527],[8.94664,47.28647],[8.95258,47.28844],[8.95454,47.28982],[8.96141,47.30098],[8.97552,47.30245],[8.98006,47.30416],[8.99153,47.31893],[8.99069,47.32183],[8.98637,47.32542],[8.98548,47.32778],[8.98364,47.32931],[8.98592,47.33815],[8.98464,47.34061],[8.98079,47.34237],[8.98088,47.34835],[8.97785,47.35437],[8.9759,47.35606],[8.97002,47.35843],[8.96572,47.3589],[8.96238,47.36252],[8.95665,47.37432],[8.9521,47.37836],[8.94778,47.37971],[8.95023,47.38346],[8.95018,47.38596],[8.9488,47.38836],[8.9397,47.39403],[8.93637,47.39496],[8.93251,47.39871],[8.92801,47.40148],[8.92278,47.4038],[8.91388,47.40569],[8.91924,47.41213],[8.92049,47.41915],[8.91829,47.42323],[8.92094,47.42544],[8.92107,47.42828],[8.92571,47.42695],[8.93437,47.42796],[8.93877,47.43173],[8.93974,47.43411],[8.93889,47.43725],[8.93511,47.43973],[8.92349,47.43953],[8.91973,47.44081],[8.91322,47.44119],[8.91162,47.44347],[8.91527,47.44628],[8.91499,47.45004],[8.91196,47.45378],[8.90517,47.45791],[8.90183,47.46435],[8.89735,47.46898],[8.89581,47.47219],[8.89135,47.4738],[8.89143,47.47821],[8.90142,47.48133],[8.90428,47.48449],[8.90314,47.48928],[8.90001,47.49187],[8.89967,47.49885],[8.90357,47.50404],[8.90413,47.50745],[8.90322,47.51948],[8.90497,47.52447],[8.90365,47.52691],[8.89982,47.52965],[8.88423,47.53392],[8.87883,47.53277],[8.87061,47.53477],[8.8602,47.53488],[8.85674,47.53594],[8.84782,47.5358],[8.84614,47.54087],[8.8403,47.54654],[8.83728,47.55278],[8.84275,47.5537],[8.84648,47.5562],[8.85269,47.55645],[8.8562,47.55792],[8.85775,47.56141],[8.85728,47.56489],[8.85511,47.56721],[8.85079,47.56818],[8.84763,47.57023],[8.84538,47.57061],[8.8448,47.57309],[8.84211,47.57513],[8.83326,47.57769],[8.82962,47.57778],[8.82661,47.57662],[8.82137,47.57756],[8.81432,47.57598],[8.81234,47.5778],[8.81222,47.58473],[8.81067,47.58639],[8.80812,47.58738],[8.76818,47.59674],[8.7543,47.59729],[8.75529,47.60108],[8.75416,47.60273],[8.74883,47.60588],[8.74829,47.60874],[8.7507,47.60981],[8.75255,47.61292],[8.75575,47.61217],[8.76102,47.61335],[8.78169,47.60634],[8.78165,47.60345],[8.78467,47.59993],[8.80168,47.5966],[8.80512,47.59686],[8.80895,47.59938],[8.81074,47.60981],[8.81866,47.61372],[8.82001,47.61526],[8.82089,47.62058],[8.82015,47.62415],[8.82415,47.6256],[8.83079,47.63206],[8.83448,47.64099],[8.83182,47.64945],[8.82695,47.65206],[8.81168,47.65599],[8.81112,47.6621],[8.81192,47.66454],[8.81041,47.66752],[8.80881,47.66857],[8.80293,47.66978],[8.79299,47.66919],[8.78685,47.66978],[8.78453,47.66899],[8.78216,47.66659],[8.77921,47.65695],[8.77763,47.65563],[8.77398,47.65435],[8.76623,47.65438],[8.76108,47.65257],[8.75852,47.65033],[8.75464,47.64883],[8.7534,47.64733],[8.74839,47.64613],[8.74329,47.64749],[8.73882,47.64651],[8.72376,47.64753],[8.72063,47.64664],[8.71492,47.64885],[8.70826,47.64764],[8.70481,47.65039],[8.70053,47.65199],[8.69427,47.65307],[8.69242,47.65581],[8.68632,47.66094],[8.68485,47.66413],[8.68574,47.66799],[8.68326,47.67315],[8.68056,47.67561],[8.67521,47.6776],[8.67642,47.68177],[8.67561,47.68661],[8.67427,47.68799],[8.67227,47.68891],[8.66273,47.69029],[8.64644,47.69847],[8.63968,47.69877],[8.6355,47.69743],[8.62162,47.69554],[8.61818,47.69279],[8.61744,47.69087],[8.62007,47.68134],[8.61478,47.68308],[8.60917,47.68188],[8.60199,47.67451],[8.59954,47.66923],[8.60275,47.66132],[8.60979,47.6568],[8.6141,47.6564],[8.61574,47.65557],[8.62231,47.65104],[8.62227,47.65024],[8.62048,47.64758],[8.61939,47.65043],[8.61521,47.65452],[8.6093,47.65677],[8.60324,47.65654],[8.60069,47.65541],[8.59788,47.65276],[8.59645,47.64876],[8.59092,47.64623],[8.58937,47.6444],[8.58874,47.63936],[8.59116,47.62755],[8.59325,47.62233],[8.59838,47.61587],[8.59854,47.6145],[8.59114,47.60917],[8.58937,47.60682],[8.58796,47.60319],[8.58788,47.59909],[8.58203,47.59793],[8.57398,47.59329],[8.57146,47.58988],[8.57035,47.58633],[8.57203,47.57985],[8.56771,47.57799],[8.56506,47.57524],[8.56117,47.56407],[8.55707,47.55947],[8.55616,47.56336],[8.55206,47.56904],[8.55334,47.57146],[8.5526,47.57599],[8.55007,47.57806],[8.54666,47.57923],[8.5435,47.58228],[8.54319,47.5851],[8.54888,47.5879],[8.55175,47.58777],[8.55764,47.58963],[8.56114,47.59151],[8.56265,47.5946],[8.56668,47.59565],[8.56902,47.59748],[8.56953,47.60049],[8.57237,47.60386],[8.57308,47.60641],[8.57562,47.60676],[8.579,47.60845],[8.58076,47.61031],[8.58125,47.61203],[8.58025,47.61456],[8.57712,47.61636],[8.57525,47.61957],[8.57277,47.6211],[8.56785,47.62164],[8.56341,47.62697],[8.56105,47.62838],[8.54803,47.62998],[8.54558,47.63122],[8.54498,47.63297],[8.54288,47.63458],[8.53995,47.63565],[8.52769,47.63634],[8.52112,47.63887],[8.51478,47.6385],[8.50932,47.63559],[8.50829,47.62942],[8.50161,47.62597],[8.5007,47.62421],[8.50149,47.62154],[8.49253,47.61893],[8.48884,47.61953],[8.47669,47.61937],[8.47439,47.61838],[8.47154,47.61495],[8.47129,47.61307],[8.46785,47.61272],[8.46446,47.61109],[8.46173,47.60659],[8.45519,47.60676],[8.45061,47.60411],[8.4499,47.60164],[8.4507,47.59584],[8.45382,47.59343],[8.45428,47.5866],[8.4563,47.5848],[8.46014,47.58382],[8.46332,47.58044],[8.46881,47.5795],[8.46219,47.57653],[8.45419,47.57668],[8.43642,47.57154],[8.43161,47.57102],[8.42476,47.57231],[8.41477,47.56879],[8.41304,47.56745],[8.41034,47.56194],[8.41039,47.55972],[8.40789,47.55465],[8.40846,47.55018],[8.39964,47.54444],[8.39609,47.543],[8.39469,47.54094],[8.39495,47.53674],[8.39136,47.53568],[8.38835,47.53305],[8.38525,47.53316],[8.38113,47.53219],[8.3774,47.52969],[8.37518,47.52679],[8.37279,47.51651],[8.36579,47.51663],[8.35666,47.51348],[8.35439,47.51104],[8.35103,47.50314],[8.3524,47.49957],[8.35163,47.4973],[8.35274,47.49484],[8.3545,47.49355],[8.3557,47.48979],[8.35533,47.48525],[8.35698,47.47931],[8.35891,47.47743],[8.36187,47.47645],[8.36722,47.47654],[8.36702,47.47487],[8.36073,47.47222],[8.35903,47.46604],[8.35996,47.46381],[8.36326,47.46204],[8.3673,47.45653],[8.36975,47.45504],[8.37393,47.45472],[8.37754,47.45201],[8.37583,47.45068],[8.37441,47.44614],[8.37623,47.43818],[8.37168,47.43675],[8.36855,47.43406],[8.3681,47.43158],[8.36904,47.42863],[8.37222,47.42603],[8.38283,47.42346],[8.38371,47.42251],[8.38073,47.42207],[8.37555,47.4178],[8.37598,47.41378],[8.37441,47.40906],[8.36067,47.40664],[8.35789,47.40542],[8.35629,47.40377],[8.35661,47.39961],[8.36195,47.39516],[8.36577,47.39429],[8.37601,47.3947],[8.37743,47.39218],[8.38036,47.39048],[8.38761,47.39035],[8.38832,47.38012],[8.39034,47.37527],[8.39355,47.3719],[8.39387,47.36945],[8.39574,47.3671],[8.39902,47.36608],[8.39836,47.36408],[8.40012,47.36094],[8.40103,47.35433],[8.39728,47.34677],[8.39779,47.34475],[8.40186,47.3391],[8.40931,47.33409],[8.4061,47.32975],[8.40578,47.32667],[8.40689,47.32447],[8.41295,47.3205],[8.41611,47.31996],[8.42948,47.32227],[8.43556,47.32083],[8.43437,47.31954],[8.43155,47.31851],[8.42609,47.31375],[8.42276,47.30706],[8.42311,47.30368],[8.41745,47.3015],[8.41372,47.29824],[8.40012,47.29564],[8.39768,47.29392],[8.39518,47.29516],[8.39108,47.29552],[8.38602,47.29437],[8.38272,47.29225],[8.38198,47.29034],[8.38255,47.2881],[8.38508,47.28565],[8.38977,47.27507],[8.39563,47.271],[8.39407,47.26672],[8.39415,47.26361],[8.39756,47.25986],[8.39614,47.25481],[8.39742,47.25189],[8.40647,47.24452],[8.40826,47.24118],[8.40761,47.23957],[8.4096,47.23585],[8.41073,47.22799],[8.41248,47.22433],[8.41695,47.22014],[8.41959,47.21902],[8.42269,47.21886],[8.42977,47.22],[8.43936,47.21937],[8.45,47.21363],[8.4546,47.21334],[8.45625,47.21081],[8.4591,47.20934],[8.46447,47.20928],[8.46609,47.20862],[8.46868,47.20533],[8.47329,47.20398],[8.47693,47.20458],[8.48399,47.20392],[8.49489,47.20738],[8.504,47.20768],[8.51538,47.21152],[8.51753,47.21271],[8.51906,47.21495],[8.5306,47.21306],[8.53307,47.21325],[8.5415,47.21778],[8.54456,47.21707],[8.55407,47.21726],[8.55858,47.21517],[8.56984,47.2139],[8.57491,47.21255],[8.57749,47.20771],[8.58044,47.2064],[8.58408,47.20603],[8.59012,47.20714],[8.58965,47.2046],[8.59074,47.20195],[8.59358,47.1986],[8.59581,47.19753],[8.60168,47.19722],[8.60653,47.1992],[8.60725,47.19885],[8.61097,47.19387],[8.61128,47.19059],[8.61391,47.18838],[8.61522,47.18515],[8.61938,47.18045],[8.61976,47.17918],[8.61721,47.17359],[8.6196,47.1698],[8.62292,47.16821],[8.6339,47.16715],[8.63561,47.16578],[8.63965,47.16459],[8.64287,47.16443],[8.65216,47.16598],[8.65425,47.16552],[8.6549,47.15967],[8.65649,47.15783],[8.65882,47.15658],[8.66853,47.15492],[8.67847,47.15558],[8.68241,47.15759],[8.69361,47.15898],[8.69804,47.16134],[8.69886,47.16303],[8.6977,47.17033],[8.69599,47.17232],[8.68919,47.17566],[8.6872,47.17959],[8.6879,47.18229],[8.69186,47.18485],[8.69824,47.19205],[8.70323,47.19326],[8.70852,47.19602],[8.71423,47.19693],[8.71692,47.19893],[8.74212,47.2071],[8.74218,47.21355],[8.71338,47.21388]]],terms_text:"Geographisches Informationssystem des Kantons Zürich (GIS-ZH), Orthofoto ZH Sommer 2014/15 RGB"},{id:"OGDOrthoZH2018",name:"Kanton Zurich, Orthofoto ZH Sommer 2018 RGB 10cm",type:"wms",template:"https://wms.zh.ch/OGDOrthoZH?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&LAYERS=ortho&FORMAT=image/jpeg&CRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2018-01-01T00:00:00.000Z",startDate:"2018-01-01T00:00:00.000Z",zoomExtent:[8,22],polygon:[[[8.71338,47.21388],[8.7137,47.22737],[8.8117,47.22626],[8.80337,47.23858],[8.80866,47.2431],[8.82448,47.24656],[8.82971,47.24539],[8.83652,47.24257],[8.84568,47.24253],[8.84837,47.24322],[8.85232,47.24034],[8.86206,47.23882],[8.86472,47.23966],[8.86863,47.23968],[8.87339,47.24125],[8.87882,47.24476],[8.88054,47.24791],[8.89878,47.24976],[8.90281,47.25094],[8.91025,47.25003],[8.92735,47.25406],[8.93644,47.25499],[8.94233,47.25849],[8.94423,47.26173],[8.94882,47.26536],[8.95094,47.2686],[8.95068,47.27108],[8.953,47.27285],[8.95411,47.27505],[8.95504,47.28251],[8.95171,47.28527],[8.94664,47.28647],[8.95258,47.28844],[8.95454,47.28982],[8.96141,47.30098],[8.97552,47.30245],[8.98006,47.30416],[8.99153,47.31893],[8.99069,47.32183],[8.98637,47.32542],[8.98548,47.32778],[8.98364,47.32931],[8.98592,47.33815],[8.98464,47.34061],[8.98079,47.34237],[8.98088,47.34835],[8.97785,47.35437],[8.9759,47.35606],[8.97002,47.35843],[8.96572,47.3589],[8.96238,47.36252],[8.95665,47.37432],[8.9521,47.37836],[8.94778,47.37971],[8.95023,47.38346],[8.95018,47.38596],[8.9488,47.38836],[8.9397,47.39403],[8.93637,47.39496],[8.93251,47.39871],[8.92801,47.40148],[8.92278,47.4038],[8.91388,47.40569],[8.91924,47.41213],[8.92049,47.41915],[8.91829,47.42323],[8.92094,47.42544],[8.92107,47.42828],[8.92571,47.42695],[8.93437,47.42796],[8.93877,47.43173],[8.93974,47.43411],[8.93889,47.43725],[8.93511,47.43973],[8.92349,47.43953],[8.91973,47.44081],[8.91322,47.44119],[8.91162,47.44347],[8.91527,47.44628],[8.91499,47.45004],[8.91196,47.45378],[8.90517,47.45791],[8.90183,47.46435],[8.89735,47.46898],[8.89581,47.47219],[8.89135,47.4738],[8.89143,47.47821],[8.90142,47.48133],[8.90428,47.48449],[8.90314,47.48928],[8.90001,47.49187],[8.89967,47.49885],[8.90357,47.50404],[8.90413,47.50745],[8.90322,47.51948],[8.90497,47.52447],[8.90365,47.52691],[8.89982,47.52965],[8.88423,47.53392],[8.87883,47.53277],[8.87061,47.53477],[8.8602,47.53488],[8.85674,47.53594],[8.84782,47.5358],[8.84614,47.54087],[8.8403,47.54654],[8.83728,47.55278],[8.84275,47.5537],[8.84648,47.5562],[8.85269,47.55645],[8.8562,47.55792],[8.85775,47.56141],[8.85728,47.56489],[8.85511,47.56721],[8.85079,47.56818],[8.84763,47.57023],[8.84538,47.57061],[8.8448,47.57309],[8.84211,47.57513],[8.83326,47.57769],[8.82962,47.57778],[8.82661,47.57662],[8.82137,47.57756],[8.81432,47.57598],[8.81234,47.5778],[8.81222,47.58473],[8.81067,47.58639],[8.80812,47.58738],[8.76818,47.59674],[8.7543,47.59729],[8.75529,47.60108],[8.75416,47.60273],[8.74883,47.60588],[8.74829,47.60874],[8.7507,47.60981],[8.75255,47.61292],[8.75575,47.61217],[8.76102,47.61335],[8.78169,47.60634],[8.78165,47.60345],[8.78467,47.59993],[8.80168,47.5966],[8.80512,47.59686],[8.80895,47.59938],[8.81074,47.60981],[8.81866,47.61372],[8.82001,47.61526],[8.82089,47.62058],[8.82015,47.62415],[8.82415,47.6256],[8.83079,47.63206],[8.83448,47.64099],[8.83182,47.64945],[8.82695,47.65206],[8.81168,47.65599],[8.81112,47.6621],[8.81192,47.66454],[8.81041,47.66752],[8.80881,47.66857],[8.80293,47.66978],[8.79299,47.66919],[8.78685,47.66978],[8.78453,47.66899],[8.78216,47.66659],[8.77921,47.65695],[8.77763,47.65563],[8.77398,47.65435],[8.76623,47.65438],[8.76108,47.65257],[8.75852,47.65033],[8.75464,47.64883],[8.7534,47.64733],[8.74839,47.64613],[8.74329,47.64749],[8.73882,47.64651],[8.72376,47.64753],[8.72063,47.64664],[8.71492,47.64885],[8.70826,47.64764],[8.70481,47.65039],[8.70053,47.65199],[8.69427,47.65307],[8.69242,47.65581],[8.68632,47.66094],[8.68485,47.66413],[8.68574,47.66799],[8.68326,47.67315],[8.68056,47.67561],[8.67521,47.6776],[8.67642,47.68177],[8.67561,47.68661],[8.67427,47.68799],[8.67227,47.68891],[8.66273,47.69029],[8.64644,47.69847],[8.63968,47.69877],[8.6355,47.69743],[8.62162,47.69554],[8.61818,47.69279],[8.61744,47.69087],[8.62007,47.68134],[8.61478,47.68308],[8.60917,47.68188],[8.60199,47.67451],[8.59954,47.66923],[8.60275,47.66132],[8.60979,47.6568],[8.6141,47.6564],[8.61574,47.65557],[8.62231,47.65104],[8.62227,47.65024],[8.62048,47.64758],[8.61939,47.65043],[8.61521,47.65452],[8.6093,47.65677],[8.60324,47.65654],[8.60069,47.65541],[8.59788,47.65276],[8.59645,47.64876],[8.59092,47.64623],[8.58937,47.6444],[8.58874,47.63936],[8.59116,47.62755],[8.59325,47.62233],[8.59838,47.61587],[8.59854,47.6145],[8.59114,47.60917],[8.58937,47.60682],[8.58796,47.60319],[8.58788,47.59909],[8.58203,47.59793],[8.57398,47.59329],[8.57146,47.58988],[8.57035,47.58633],[8.57203,47.57985],[8.56771,47.57799],[8.56506,47.57524],[8.56117,47.56407],[8.55707,47.55947],[8.55616,47.56336],[8.55206,47.56904],[8.55334,47.57146],[8.5526,47.57599],[8.55007,47.57806],[8.54666,47.57923],[8.5435,47.58228],[8.54319,47.5851],[8.54888,47.5879],[8.55175,47.58777],[8.55764,47.58963],[8.56114,47.59151],[8.56265,47.5946],[8.56668,47.59565],[8.56902,47.59748],[8.56953,47.60049],[8.57237,47.60386],[8.57308,47.60641],[8.57562,47.60676],[8.579,47.60845],[8.58076,47.61031],[8.58125,47.61203],[8.58025,47.61456],[8.57712,47.61636],[8.57525,47.61957],[8.57277,47.6211],[8.56785,47.62164],[8.56341,47.62697],[8.56105,47.62838],[8.54803,47.62998],[8.54558,47.63122],[8.54498,47.63297],[8.54288,47.63458],[8.53995,47.63565],[8.52769,47.63634],[8.52112,47.63887],[8.51478,47.6385],[8.50932,47.63559],[8.50829,47.62942],[8.50161,47.62597],[8.5007,47.62421],[8.50149,47.62154],[8.49253,47.61893],[8.48884,47.61953],[8.47669,47.61937],[8.47439,47.61838],[8.47154,47.61495],[8.47129,47.61307],[8.46785,47.61272],[8.46446,47.61109],[8.46173,47.60659],[8.45519,47.60676],[8.45061,47.60411],[8.4499,47.60164],[8.4507,47.59584],[8.45382,47.59343],[8.45428,47.5866],[8.4563,47.5848],[8.46014,47.58382],[8.46332,47.58044],[8.46881,47.5795],[8.46219,47.57653],[8.45419,47.57668],[8.43642,47.57154],[8.43161,47.57102],[8.42476,47.57231],[8.41477,47.56879],[8.41304,47.56745],[8.41034,47.56194],[8.41039,47.55972],[8.40789,47.55465],[8.40846,47.55018],[8.39964,47.54444],[8.39609,47.543],[8.39469,47.54094],[8.39495,47.53674],[8.39136,47.53568],[8.38835,47.53305],[8.38525,47.53316],[8.38113,47.53219],[8.3774,47.52969],[8.37518,47.52679],[8.37279,47.51651],[8.36579,47.51663],[8.35666,47.51348],[8.35439,47.51104],[8.35103,47.50314],[8.3524,47.49957],[8.35163,47.4973],[8.35274,47.49484],[8.3545,47.49355],[8.3557,47.48979],[8.35533,47.48525],[8.35698,47.47931],[8.35891,47.47743],[8.36187,47.47645],[8.36722,47.47654],[8.36702,47.47487],[8.36073,47.47222],[8.35903,47.46604],[8.35996,47.46381],[8.36326,47.46204],[8.3673,47.45653],[8.36975,47.45504],[8.37393,47.45472],[8.37754,47.45201],[8.37583,47.45068],[8.37441,47.44614],[8.37623,47.43818],[8.37168,47.43675],[8.36855,47.43406],[8.3681,47.43158],[8.36904,47.42863],[8.37222,47.42603],[8.38283,47.42346],[8.38371,47.42251],[8.38073,47.42207],[8.37555,47.4178],[8.37598,47.41378],[8.37441,47.40906],[8.36067,47.40664],[8.35789,47.40542],[8.35629,47.40377],[8.35661,47.39961],[8.36195,47.39516],[8.36577,47.39429],[8.37601,47.3947],[8.37743,47.39218],[8.38036,47.39048],[8.38761,47.39035],[8.38832,47.38012],[8.39034,47.37527],[8.39355,47.3719],[8.39387,47.36945],[8.39574,47.3671],[8.39902,47.36608],[8.39836,47.36408],[8.40012,47.36094],[8.40103,47.35433],[8.39728,47.34677],[8.39779,47.34475],[8.40186,47.3391],[8.40931,47.33409],[8.4061,47.32975],[8.40578,47.32667],[8.40689,47.32447],[8.41295,47.3205],[8.41611,47.31996],[8.42948,47.32227],[8.43556,47.32083],[8.43437,47.31954],[8.43155,47.31851],[8.42609,47.31375],[8.42276,47.30706],[8.42311,47.30368],[8.41745,47.3015],[8.41372,47.29824],[8.40012,47.29564],[8.39768,47.29392],[8.39518,47.29516],[8.39108,47.29552],[8.38602,47.29437],[8.38272,47.29225],[8.38198,47.29034],[8.38255,47.2881],[8.38508,47.28565],[8.38977,47.27507],[8.39563,47.271],[8.39407,47.26672],[8.39415,47.26361],[8.39756,47.25986],[8.39614,47.25481],[8.39742,47.25189],[8.40647,47.24452],[8.40826,47.24118],[8.40761,47.23957],[8.4096,47.23585],[8.41073,47.22799],[8.41248,47.22433],[8.41695,47.22014],[8.41959,47.21902],[8.42269,47.21886],[8.42977,47.22],[8.43936,47.21937],[8.45,47.21363],[8.4546,47.21334],[8.45625,47.21081],[8.4591,47.20934],[8.46447,47.20928],[8.46609,47.20862],[8.46868,47.20533],[8.47329,47.20398],[8.47693,47.20458],[8.48399,47.20392],[8.49489,47.20738],[8.504,47.20768],[8.51538,47.21152],[8.51753,47.21271],[8.51906,47.21495],[8.5306,47.21306],[8.53307,47.21325],[8.5415,47.21778],[8.54456,47.21707],[8.55407,47.21726],[8.55858,47.21517],[8.56984,47.2139],[8.57491,47.21255],[8.57749,47.20771],[8.58044,47.2064],[8.58408,47.20603],[8.59012,47.20714],[8.58965,47.2046],[8.59074,47.20195],[8.59358,47.1986],[8.59581,47.19753],[8.60168,47.19722],[8.60653,47.1992],[8.60725,47.19885],[8.61097,47.19387],[8.61128,47.19059],[8.61391,47.18838],[8.61522,47.18515],[8.61938,47.18045],[8.61976,47.17918],[8.61721,47.17359],[8.6196,47.1698],[8.62292,47.16821],[8.6339,47.16715],[8.63561,47.16578],[8.63965,47.16459],[8.64287,47.16443],[8.65216,47.16598],[8.65425,47.16552],[8.6549,47.15967],[8.65649,47.15783],[8.65882,47.15658],[8.66853,47.15492],[8.67847,47.15558],[8.68241,47.15759],[8.69361,47.15898],[8.69804,47.16134],[8.69886,47.16303],[8.6977,47.17033],[8.69599,47.17232],[8.68919,47.17566],[8.6872,47.17959],[8.6879,47.18229],[8.69186,47.18485],[8.69824,47.19205],[8.70323,47.19326],[8.70852,47.19602],[8.71423,47.19693],[8.71692,47.19893],[8.74212,47.2071],[8.74218,47.21355],[8.71338,47.21388]]],terms_text:"Geographisches Informationssystem des Kantons Zürich (GIS-ZH), Orthofoto ZH Sommer 2018 RGB",best:true},{id:"OGDLidarZH-DTM",name:"Kanton Zurich, Terrainschummerung 50cm",type:"wms",template:"https://wms.zh.ch/OGDLidarZH?FORMAT=image/jpeg&VERSION=1.3.0&SERVICE=WMS&REQUEST=GetMap&LAYERS=dtm2014hillshade&CRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2014-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",zoomExtent:[8,22],polygon:[[[8.71338,47.21388],[8.7137,47.22737],[8.8117,47.22626],[8.80337,47.23858],[8.80866,47.2431],[8.82448,47.24656],[8.82971,47.24539],[8.83652,47.24257],[8.84568,47.24253],[8.84837,47.24322],[8.85232,47.24034],[8.86206,47.23882],[8.86472,47.23966],[8.86863,47.23968],[8.87339,47.24125],[8.87882,47.24476],[8.88054,47.24791],[8.89878,47.24976],[8.90281,47.25094],[8.91025,47.25003],[8.92735,47.25406],[8.93644,47.25499],[8.94233,47.25849],[8.94423,47.26173],[8.94882,47.26536],[8.95094,47.2686],[8.95068,47.27108],[8.953,47.27285],[8.95411,47.27505],[8.95504,47.28251],[8.95171,47.28527],[8.94664,47.28647],[8.95258,47.28844],[8.95454,47.28982],[8.96141,47.30098],[8.97552,47.30245],[8.98006,47.30416],[8.99153,47.31893],[8.99069,47.32183],[8.98637,47.32542],[8.98548,47.32778],[8.98364,47.32931],[8.98592,47.33815],[8.98464,47.34061],[8.98079,47.34237],[8.98088,47.34835],[8.97785,47.35437],[8.9759,47.35606],[8.97002,47.35843],[8.96572,47.3589],[8.96238,47.36252],[8.95665,47.37432],[8.9521,47.37836],[8.94778,47.37971],[8.95023,47.38346],[8.95018,47.38596],[8.9488,47.38836],[8.9397,47.39403],[8.93637,47.39496],[8.93251,47.39871],[8.92801,47.40148],[8.92278,47.4038],[8.91388,47.40569],[8.91924,47.41213],[8.92049,47.41915],[8.91829,47.42323],[8.92094,47.42544],[8.92107,47.42828],[8.92571,47.42695],[8.93437,47.42796],[8.93877,47.43173],[8.93974,47.43411],[8.93889,47.43725],[8.93511,47.43973],[8.92349,47.43953],[8.91973,47.44081],[8.91322,47.44119],[8.91162,47.44347],[8.91527,47.44628],[8.91499,47.45004],[8.91196,47.45378],[8.90517,47.45791],[8.90183,47.46435],[8.89735,47.46898],[8.89581,47.47219],[8.89135,47.4738],[8.89143,47.47821],[8.90142,47.48133],[8.90428,47.48449],[8.90314,47.48928],[8.90001,47.49187],[8.89967,47.49885],[8.90357,47.50404],[8.90413,47.50745],[8.90322,47.51948],[8.90497,47.52447],[8.90365,47.52691],[8.89982,47.52965],[8.88423,47.53392],[8.87883,47.53277],[8.87061,47.53477],[8.8602,47.53488],[8.85674,47.53594],[8.84782,47.5358],[8.84614,47.54087],[8.8403,47.54654],[8.83728,47.55278],[8.84275,47.5537],[8.84648,47.5562],[8.85269,47.55645],[8.8562,47.55792],[8.85775,47.56141],[8.85728,47.56489],[8.85511,47.56721],[8.85079,47.56818],[8.84763,47.57023],[8.84538,47.57061],[8.8448,47.57309],[8.84211,47.57513],[8.83326,47.57769],[8.82962,47.57778],[8.82661,47.57662],[8.82137,47.57756],[8.81432,47.57598],[8.81234,47.5778],[8.81222,47.58473],[8.81067,47.58639],[8.80812,47.58738],[8.76818,47.59674],[8.7543,47.59729],[8.75529,47.60108],[8.75416,47.60273],[8.74883,47.60588],[8.74829,47.60874],[8.7507,47.60981],[8.75255,47.61292],[8.75575,47.61217],[8.76102,47.61335],[8.78169,47.60634],[8.78165,47.60345],[8.78467,47.59993],[8.80168,47.5966],[8.80512,47.59686],[8.80895,47.59938],[8.81074,47.60981],[8.81866,47.61372],[8.82001,47.61526],[8.82089,47.62058],[8.82015,47.62415],[8.82415,47.6256],[8.83079,47.63206],[8.83448,47.64099],[8.83182,47.64945],[8.82695,47.65206],[8.81168,47.65599],[8.81112,47.6621],[8.81192,47.66454],[8.81041,47.66752],[8.80881,47.66857],[8.80293,47.66978],[8.79299,47.66919],[8.78685,47.66978],[8.78453,47.66899],[8.78216,47.66659],[8.77921,47.65695],[8.77763,47.65563],[8.77398,47.65435],[8.76623,47.65438],[8.76108,47.65257],[8.75852,47.65033],[8.75464,47.64883],[8.7534,47.64733],[8.74839,47.64613],[8.74329,47.64749],[8.73882,47.64651],[8.72376,47.64753],[8.72063,47.64664],[8.71492,47.64885],[8.70826,47.64764],[8.70481,47.65039],[8.70053,47.65199],[8.69427,47.65307],[8.69242,47.65581],[8.68632,47.66094],[8.68485,47.66413],[8.68574,47.66799],[8.68326,47.67315],[8.68056,47.67561],[8.67521,47.6776],[8.67642,47.68177],[8.67561,47.68661],[8.67427,47.68799],[8.67227,47.68891],[8.66273,47.69029],[8.64644,47.69847],[8.63968,47.69877],[8.6355,47.69743],[8.62162,47.69554],[8.61818,47.69279],[8.61744,47.69087],[8.62007,47.68134],[8.61478,47.68308],[8.60917,47.68188],[8.60199,47.67451],[8.59954,47.66923],[8.60275,47.66132],[8.60979,47.6568],[8.6141,47.6564],[8.61574,47.65557],[8.62231,47.65104],[8.62227,47.65024],[8.62048,47.64758],[8.61939,47.65043],[8.61521,47.65452],[8.6093,47.65677],[8.60324,47.65654],[8.60069,47.65541],[8.59788,47.65276],[8.59645,47.64876],[8.59092,47.64623],[8.58937,47.6444],[8.58874,47.63936],[8.59116,47.62755],[8.59325,47.62233],[8.59838,47.61587],[8.59854,47.6145],[8.59114,47.60917],[8.58937,47.60682],[8.58796,47.60319],[8.58788,47.59909],[8.58203,47.59793],[8.57398,47.59329],[8.57146,47.58988],[8.57035,47.58633],[8.57203,47.57985],[8.56771,47.57799],[8.56506,47.57524],[8.56117,47.56407],[8.55707,47.55947],[8.55616,47.56336],[8.55206,47.56904],[8.55334,47.57146],[8.5526,47.57599],[8.55007,47.57806],[8.54666,47.57923],[8.5435,47.58228],[8.54319,47.5851],[8.54888,47.5879],[8.55175,47.58777],[8.55764,47.58963],[8.56114,47.59151],[8.56265,47.5946],[8.56668,47.59565],[8.56902,47.59748],[8.56953,47.60049],[8.57237,47.60386],[8.57308,47.60641],[8.57562,47.60676],[8.579,47.60845],[8.58076,47.61031],[8.58125,47.61203],[8.58025,47.61456],[8.57712,47.61636],[8.57525,47.61957],[8.57277,47.6211],[8.56785,47.62164],[8.56341,47.62697],[8.56105,47.62838],[8.54803,47.62998],[8.54558,47.63122],[8.54498,47.63297],[8.54288,47.63458],[8.53995,47.63565],[8.52769,47.63634],[8.52112,47.63887],[8.51478,47.6385],[8.50932,47.63559],[8.50829,47.62942],[8.50161,47.62597],[8.5007,47.62421],[8.50149,47.62154],[8.49253,47.61893],[8.48884,47.61953],[8.47669,47.61937],[8.47439,47.61838],[8.47154,47.61495],[8.47129,47.61307],[8.46785,47.61272],[8.46446,47.61109],[8.46173,47.60659],[8.45519,47.60676],[8.45061,47.60411],[8.4499,47.60164],[8.4507,47.59584],[8.45382,47.59343],[8.45428,47.5866],[8.4563,47.5848],[8.46014,47.58382],[8.46332,47.58044],[8.46881,47.5795],[8.46219,47.57653],[8.45419,47.57668],[8.43642,47.57154],[8.43161,47.57102],[8.42476,47.57231],[8.41477,47.56879],[8.41304,47.56745],[8.41034,47.56194],[8.41039,47.55972],[8.40789,47.55465],[8.40846,47.55018],[8.39964,47.54444],[8.39609,47.543],[8.39469,47.54094],[8.39495,47.53674],[8.39136,47.53568],[8.38835,47.53305],[8.38525,47.53316],[8.38113,47.53219],[8.3774,47.52969],[8.37518,47.52679],[8.37279,47.51651],[8.36579,47.51663],[8.35666,47.51348],[8.35439,47.51104],[8.35103,47.50314],[8.3524,47.49957],[8.35163,47.4973],[8.35274,47.49484],[8.3545,47.49355],[8.3557,47.48979],[8.35533,47.48525],[8.35698,47.47931],[8.35891,47.47743],[8.36187,47.47645],[8.36722,47.47654],[8.36702,47.47487],[8.36073,47.47222],[8.35903,47.46604],[8.35996,47.46381],[8.36326,47.46204],[8.3673,47.45653],[8.36975,47.45504],[8.37393,47.45472],[8.37754,47.45201],[8.37583,47.45068],[8.37441,47.44614],[8.37623,47.43818],[8.37168,47.43675],[8.36855,47.43406],[8.3681,47.43158],[8.36904,47.42863],[8.37222,47.42603],[8.38283,47.42346],[8.38371,47.42251],[8.38073,47.42207],[8.37555,47.4178],[8.37598,47.41378],[8.37441,47.40906],[8.36067,47.40664],[8.35789,47.40542],[8.35629,47.40377],[8.35661,47.39961],[8.36195,47.39516],[8.36577,47.39429],[8.37601,47.3947],[8.37743,47.39218],[8.38036,47.39048],[8.38761,47.39035],[8.38832,47.38012],[8.39034,47.37527],[8.39355,47.3719],[8.39387,47.36945],[8.39574,47.3671],[8.39902,47.36608],[8.39836,47.36408],[8.40012,47.36094],[8.40103,47.35433],[8.39728,47.34677],[8.39779,47.34475],[8.40186,47.3391],[8.40931,47.33409],[8.4061,47.32975],[8.40578,47.32667],[8.40689,47.32447],[8.41295,47.3205],[8.41611,47.31996],[8.42948,47.32227],[8.43556,47.32083],[8.43437,47.31954],[8.43155,47.31851],[8.42609,47.31375],[8.42276,47.30706],[8.42311,47.30368],[8.41745,47.3015],[8.41372,47.29824],[8.40012,47.29564],[8.39768,47.29392],[8.39518,47.29516],[8.39108,47.29552],[8.38602,47.29437],[8.38272,47.29225],[8.38198,47.29034],[8.38255,47.2881],[8.38508,47.28565],[8.38977,47.27507],[8.39563,47.271],[8.39407,47.26672],[8.39415,47.26361],[8.39756,47.25986],[8.39614,47.25481],[8.39742,47.25189],[8.40647,47.24452],[8.40826,47.24118],[8.40761,47.23957],[8.4096,47.23585],[8.41073,47.22799],[8.41248,47.22433],[8.41695,47.22014],[8.41959,47.21902],[8.42269,47.21886],[8.42977,47.22],[8.43936,47.21937],[8.45,47.21363],[8.4546,47.21334],[8.45625,47.21081],[8.4591,47.20934],[8.46447,47.20928],[8.46609,47.20862],[8.46868,47.20533],[8.47329,47.20398],[8.47693,47.20458],[8.48399,47.20392],[8.49489,47.20738],[8.504,47.20768],[8.51538,47.21152],[8.51753,47.21271],[8.51906,47.21495],[8.5306,47.21306],[8.53307,47.21325],[8.5415,47.21778],[8.54456,47.21707],[8.55407,47.21726],[8.55858,47.21517],[8.56984,47.2139],[8.57491,47.21255],[8.57749,47.20771],[8.58044,47.2064],[8.58408,47.20603],[8.59012,47.20714],[8.58965,47.2046],[8.59074,47.20195],[8.59358,47.1986],[8.59581,47.19753],[8.60168,47.19722],[8.60653,47.1992],[8.60725,47.19885],[8.61097,47.19387],[8.61128,47.19059],[8.61391,47.18838],[8.61522,47.18515],[8.61938,47.18045],[8.61976,47.17918],[8.61721,47.17359],[8.6196,47.1698],[8.62292,47.16821],[8.6339,47.16715],[8.63561,47.16578],[8.63965,47.16459],[8.64287,47.16443],[8.65216,47.16598],[8.65425,47.16552],[8.6549,47.15967],[8.65649,47.15783],[8.65882,47.15658],[8.66853,47.15492],[8.67847,47.15558],[8.68241,47.15759],[8.69361,47.15898],[8.69804,47.16134],[8.69886,47.16303],[8.6977,47.17033],[8.69599,47.17232],[8.68919,47.17566],[8.6872,47.17959],[8.6879,47.18229],[8.69186,47.18485],[8.69824,47.19205],[8.70323,47.19326],[8.70852,47.19602],[8.71423,47.19693],[8.71692,47.19893],[8.74212,47.2071],[8.74218,47.21355],[8.71338,47.21388]]],terms_text:"Geographisches Informationssystem des Kantons Zürich (GIS-ZH), Terrainschummerung"},{id:"kartverket-abas",name:"Kartverket Administrative Boundaries overlay",type:"wms",template:"https://openwms.statkart.no/skwms1/wms.adm_enheter?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=avtaltavgrensningslinje,territorialgrense,riksgrense,fylker,kommuner&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,22],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://www.kartverket.no/data/Kartdata/Grenser/",terms_text:"© Kartverket",description:"Official administrative boundaries at the national, county and municipality levels",icon:"https://www.kartverket.no/Content/Images/logo-graphic-512.png",overlay:true},{id:"kartverket-luftfartshindre",name:"Kartverket Aviation Obstructions overlay",type:"wms",template:"https://openwms.statkart.no/skwms1/wms.nrl?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=nrl3_wms&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[7,20],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://kartverket.no/kart/Nasjonalt-register-over-luftfartshindre/",terms_text:"© Kartverket",description:"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in urban areas (e.g. masts, towers, high buildings, power lines)",icon:"https://www.kartverket.no/Content/Images/logo-graphic-512.png",overlay:true},{id:"kartverket-matrikkel",name:"Kartverket Cadastral overlay",type:"wms",template:"https://wms.geonorge.no/skwms1/wms.matrikkel?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=matrikkel_WMS&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[14,20],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"http://www.seeiendom.no/",terms_text:"© Kartverket",description:"Real estate boundaries from the official land register (`matrikkelen´). Monthly update.",icon:"https://www.kartverket.no/Content/Images/logo-graphic-512.png",overlay:true},{id:"kartverket-hoydekurver",name:"Kartverket Contour Lines overlay",type:"wms",template:"https://openwms.statkart.no/skwms1/wms.topo4?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=hoydetall5linje,hoydetall5punkt,hoydepunkt,vannpunkt,hoydekurver_1m,hoydekurver_5m,N50Hoydekurver,N250Hoydekurver,N500Hoydekurver,N1000Hoydekurver,N2000Hoydekurver&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[9,22],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://www.kartverket.no/Prosjekter/Nasjonal-detaljert-hoydemodell/",terms_text:"© Kartverket",description:"Contours for Norway",icon:"https://www.kartverket.no/Content/Images/logo-graphic-512.png",overlay:true},{id:"kartverket-dom-skygge",name:"Kartverket DOM Digital Surface Model",type:"wms",template:"https://wms.geonorge.no/skwms1/wms.hoyde-dom_somlos_skyggerelieff?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=las_dom_skyggerelieff_somlos&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,24],polygon:[[[11.53568,58.86659],[11.66192,58.89784],[11.7935,59.09471],[11.84243,59.239],[11.82877,59.34509],[11.71279,59.60387],[11.86205,59.63771],[11.95608,59.69196],[11.93389,59.86895],[12.17881,59.8786],[12.46948,60.03124],[12.55438,60.18972],[12.51237,60.31659],[12.61793,60.40065],[12.61883,60.51512],[12.25387,61.01106],[12.69195,61.04632],[12.90756,61.34802],[12.57493,61.57623],[12.42465,61.57175],[12.15233,61.72694],[12.31212,62.26512],[12.07078,62.61109],[12.14907,62.7455],[12.08883,62.89668],[12.23464,62.99952],[11.99225,63.26684],[12.23327,63.47505],[12.17971,63.57117],[12.69313,63.96344],[13.21378,64.0839],[13.99183,64.00514],[14.17035,64.18236],[14.13253,64.47516],[13.67658,64.58356],[14.02455,64.88119],[14.33572,65.11098],[14.51699,65.30365],[14.54177,65.67762],[14.63674,65.81299],[14.53903,66.12496],[15.03881,66.14245],[15.50033,66.27956],[15.39368,66.4795],[15.63473,66.59685],[16.04695,66.90283],[16.39832,67.03827],[16.41439,67.21036],[16.10744,67.43617],[16.16455,67.5087],[16.42318,67.52589],[16.5866,67.64528],[16.7471,67.90466],[17.34741,68.09995],[17.90583,67.95885],[18.16489,68.19424],[18.13721,68.52675],[18.40761,68.57059],[18.62222,68.49607],[18.98574,68.50591],[19.92752,68.34558],[20.24505,68.49201],[19.99237,68.55586],[20.21137,68.65685],[20.34848,68.79976],[20.31623,68.93227],[20.10322,69.0359],[20.55694,69.04926],[20.7206,69.10837],[21.06178,69.02541],[21.12098,69.10587],[21.01135,69.21086],[21.2824,69.30076],[21.62645,69.26589],[22.33512,68.81965],[22.37485,68.70596],[22.5377,68.73329],[22.80161,68.67674],[23.04635,68.67833],[23.16467,68.61903],[23.68789,68.70049],[23.79776,68.81592],[23.96804,68.82287],[24.17541,68.7314],[24.76043,68.63655],[24.8544,68.55285],[24.90827,68.54387],[24.93347,68.6025],[25.12435,68.62003],[25.1667,68.79008],[25.43334,68.87886],[25.62945,68.88103],[25.79589,69.01157],[25.73272,69.19428],[26.02249,69.66758],[26.56631,69.94207],[27.10601,69.89539],[27.63679,70.05317],[27.93548,70.07401],[27.96569,70.00415],[28.40312,69.80824],[29.1014,69.69095],[29.328,69.47585],[28.82859,69.2316],[28.7931,69.0943],[29.04485,68.99986],[29.25292,69.10601],[29.32641,69.22982],[29.29229,69.27632],[29.39117,69.31298],[29.57038,69.31201],[29.85191,69.41631],[29.96795,69.39916],[30.13069,69.4667],[30.2008,69.5658],[30.13137,69.6609],[30.15678,69.66496],[30.51589,69.53787],[30.82077,69.52371],[30.95329,69.55563],[30.96221,69.67832],[30.83578,69.79192],[31.65161,70.17579],[31.78344,70.4662],[30.49255,70.86989],[28.43261,71.30079],[25.66406,71.40266],[23.81835,71.29374],[18.30322,70.40734],[14.24926,69.07641],[11.18408,67.47913],[11.74438,66.90852],[9.95361,64.88393],[4.72961,62.3649],[4.12948,61.69247],[4.08142,61.02637],[4.4577,59.19421],[5.31188,58.4276],[6.47094,57.84475],[7.56408,57.72468],[8.4375,57.91776],[10.59792,58.75006],[10.64905,58.88203],[11.09035,58.97673],[11.16173,59.06743],[11.34175,59.10293],[11.44922,58.99078],[11.45194,58.88136],[11.53568,58.86659]]],terms_url:"https://hoydedata.no/",terms_text:"© Kartverket",description:"Shaded relief representation of the Norwegian digital surface model (DOM), i.e. earth surface including trees, buildings and other objects on top of it.",icon:"https://www.kartverket.no/Content/Images/logo-graphic-512.png"},{id:"kartverket-dtm-skygge",name:"Kartverket DTM Digital Terrain Model",type:"wms",template:"https://wms.geonorge.no/skwms1/wms.hoyde-dtm_somlos_skyggerelieff?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=las_dtm_skyggerelieff_somlos&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,24],polygon:[[[11.53568,58.86659],[11.66192,58.89784],[11.7935,59.09471],[11.84243,59.239],[11.82877,59.34509],[11.71279,59.60387],[11.86205,59.63771],[11.95608,59.69196],[11.93389,59.86895],[12.17881,59.8786],[12.46948,60.03124],[12.55438,60.18972],[12.51237,60.31659],[12.61793,60.40065],[12.61883,60.51512],[12.25387,61.01106],[12.69195,61.04632],[12.90756,61.34802],[12.57493,61.57623],[12.42465,61.57175],[12.15233,61.72694],[12.31212,62.26512],[12.07078,62.61109],[12.14907,62.7455],[12.08883,62.89668],[12.23464,62.99952],[11.99225,63.26684],[12.23327,63.47505],[12.17971,63.57117],[12.69313,63.96344],[13.21378,64.0839],[13.99183,64.00514],[14.17035,64.18236],[14.13253,64.47516],[13.67658,64.58356],[14.02455,64.88119],[14.33572,65.11098],[14.51699,65.30365],[14.54177,65.67762],[14.63674,65.81299],[14.53903,66.12496],[15.03881,66.14245],[15.50033,66.27956],[15.39368,66.4795],[15.63473,66.59685],[16.04695,66.90283],[16.39832,67.03827],[16.41439,67.21036],[16.10744,67.43617],[16.16455,67.5087],[16.42318,67.52589],[16.5866,67.64528],[16.7471,67.90466],[17.34741,68.09995],[17.90583,67.95885],[18.16489,68.19424],[18.13721,68.52675],[18.40761,68.57059],[18.62222,68.49607],[18.98574,68.50591],[19.92752,68.34558],[20.24505,68.49201],[19.99237,68.55586],[20.21137,68.65685],[20.34848,68.79976],[20.31623,68.93227],[20.10322,69.0359],[20.55694,69.04926],[20.7206,69.10837],[21.06178,69.02541],[21.12098,69.10587],[21.01135,69.21086],[21.2824,69.30076],[21.62645,69.26589],[22.33512,68.81965],[22.37485,68.70596],[22.5377,68.73329],[22.80161,68.67674],[23.04635,68.67833],[23.16467,68.61903],[23.68789,68.70049],[23.79776,68.81592],[23.96804,68.82287],[24.17541,68.7314],[24.76043,68.63655],[24.8544,68.55285],[24.90827,68.54387],[24.93347,68.6025],[25.12435,68.62003],[25.1667,68.79008],[25.43334,68.87886],[25.62945,68.88103],[25.79589,69.01157],[25.73272,69.19428],[26.02249,69.66758],[26.56631,69.94207],[27.10601,69.89539],[27.63679,70.05317],[27.93548,70.07401],[27.96569,70.00415],[28.40312,69.80824],[29.1014,69.69095],[29.328,69.47585],[28.82859,69.2316],[28.7931,69.0943],[29.04485,68.99986],[29.25292,69.10601],[29.32641,69.22982],[29.29229,69.27632],[29.39117,69.31298],[29.57038,69.31201],[29.85191,69.41631],[29.96795,69.39916],[30.13069,69.4667],[30.2008,69.5658],[30.13137,69.6609],[30.15678,69.66496],[30.51589,69.53787],[30.82077,69.52371],[30.95329,69.55563],[30.96221,69.67832],[30.83578,69.79192],[31.65161,70.17579],[31.78344,70.4662],[30.49255,70.86989],[28.43261,71.30079],[25.66406,71.40266],[23.81835,71.29374],[18.30322,70.40734],[14.24926,69.07641],[11.18408,67.47913],[11.74438,66.90852],[9.95361,64.88393],[4.72961,62.3649],[4.12948,61.69247],[4.08142,61.02637],[4.4577,59.19421],[5.31188,58.4276],[6.47094,57.84475],[7.56408,57.72468],[8.4375,57.91776],[10.59792,58.75006],[10.64905,58.88203],[11.09035,58.97673],[11.16173,59.06743],[11.34175,59.10293],[11.44922,58.99078],[11.45194,58.88136],[11.53568,58.86659]]],terms_url:"https://hoydedata.no/",terms_text:"© Kartverket",description:"Shaded relief representation of the Norwegian digital terrain model (DTM), i.e. earth surface without trees, buildings and other objects.",icon:"https://www.kartverket.no/Content/Images/logo-graphic-512.png"},{id:"kartverket-ok-1st",name:"Kartverket Economic Maps (historic)",type:"wms",template:"https://wms.geonorge.no/skwms1/wms.n5raster2?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=n5raster_foerstegang_metadata,n5raster_foerstegang&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[11,20],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://www.kartverket.no/kunnskap/historie/kartverkets-historiske-arkiv/",terms_text:"© Kartverket",description:"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk kartverk´). Available from zoom 16. Please correct local imagery offset.",icon:"https://www.kartverket.no/Content/Images/logo-graphic-512.png"},{id:"kartverket-friluft",name:"Kartverket Hiking Trails",type:"wms",template:"https://wms.geonorge.no/skwms1/wms.friluftsruter2?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Fotrute&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[6,24],polygon:[[[11.53568,58.86659],[11.66192,58.89784],[11.7935,59.09471],[11.84243,59.239],[11.82877,59.34509],[11.71279,59.60387],[11.86205,59.63771],[11.95608,59.69196],[11.93389,59.86895],[12.17881,59.8786],[12.46948,60.03124],[12.55438,60.18972],[12.51237,60.31659],[12.61793,60.40065],[12.61883,60.51512],[12.25387,61.01106],[12.69195,61.04632],[12.90756,61.34802],[12.57493,61.57623],[12.42465,61.57175],[12.15233,61.72694],[12.31212,62.26512],[12.07078,62.61109],[12.14907,62.7455],[12.08883,62.89668],[12.23464,62.99952],[11.99225,63.26684],[12.23327,63.47505],[12.17971,63.57117],[12.69313,63.96344],[13.21378,64.0839],[13.99183,64.00514],[14.17035,64.18236],[14.13253,64.47516],[13.67658,64.58356],[14.02455,64.88119],[14.33572,65.11098],[14.51699,65.30365],[14.54177,65.67762],[14.63674,65.81299],[14.53903,66.12496],[15.03881,66.14245],[15.50033,66.27956],[15.39368,66.4795],[15.63473,66.59685],[16.04695,66.90283],[16.39832,67.03827],[16.41439,67.21036],[16.10744,67.43617],[16.16455,67.5087],[16.42318,67.52589],[16.5866,67.64528],[16.7471,67.90466],[17.34741,68.09995],[17.90583,67.95885],[18.16489,68.19424],[18.13721,68.52675],[18.40761,68.57059],[18.62222,68.49607],[18.98574,68.50591],[19.92752,68.34558],[20.24505,68.49201],[19.99237,68.55586],[20.21137,68.65685],[20.34848,68.79976],[20.31623,68.93227],[20.10322,69.0359],[20.55694,69.04926],[20.7206,69.10837],[21.06178,69.02541],[21.12098,69.10587],[21.01135,69.21086],[21.2824,69.30076],[21.62645,69.26589],[22.33512,68.81965],[22.37485,68.70596],[22.5377,68.73329],[22.80161,68.67674],[23.04635,68.67833],[23.16467,68.61903],[23.68789,68.70049],[23.79776,68.81592],[23.96804,68.82287],[24.17541,68.7314],[24.76043,68.63655],[24.8544,68.55285],[24.90827,68.54387],[24.93347,68.6025],[25.12435,68.62003],[25.1667,68.79008],[25.43334,68.87886],[25.62945,68.88103],[25.79589,69.01157],[25.73272,69.19428],[26.02249,69.66758],[26.56631,69.94207],[27.10601,69.89539],[27.63679,70.05317],[27.93548,70.07401],[27.96569,70.00415],[28.40312,69.80824],[29.1014,69.69095],[29.328,69.47585],[28.82859,69.2316],[28.7931,69.0943],[29.04485,68.99986],[29.25292,69.10601],[29.32641,69.22982],[29.29229,69.27632],[29.39117,69.31298],[29.57038,69.31201],[29.85191,69.41631],[29.96795,69.39916],[30.13069,69.4667],[30.2008,69.5658],[30.13137,69.6609],[30.15678,69.66496],[30.51589,69.53787],[30.82077,69.52371],[30.95329,69.55563],[30.96221,69.67832],[30.83578,69.79192],[31.65161,70.17579],[31.78344,70.4662],[30.49255,70.86989],[28.43261,71.30079],[25.66406,71.40266],[23.81835,71.29374],[18.30322,70.40734],[14.24926,69.07641],[11.18408,67.47913],[11.74438,66.90852],[9.95361,64.88393],[4.72961,62.3649],[4.12948,61.69247],[4.08142,61.02637],[4.4577,59.19421],[5.31188,58.4276],[6.47094,57.84475],[7.56408,57.72468],[8.4375,57.91776],[10.59792,58.75006],[10.64905,58.88203],[11.09035,58.97673],[11.16173,59.06743],[11.34175,59.10293],[11.44922,58.99078],[11.45194,58.88136],[11.53568,58.86659]]],terms_url:"https://kartverket.no/geodataarbeid/temadata/nasjonal-database-for-tur--og-friluftsruter/",terms_text:"© Kartverket",description:"Hiking trails from the Norwegian database `Tur- og Friluftsruter´, including DNT routes.",icon:"https://www.kartverket.no/Content/Images/logo-graphic-512.png",overlay:true},{id:"kartverket-fjellskygge",name:"Kartverket Hillshade overlay",type:"tms",template:"https://opencache{switch:,2,3}.statkart.no/gatekeeper/gk/gk.open_gmaps?layers=fjellskygge&zoom={zoom}&x={x}&y={y}",zoomExtent:[9,15],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://kartkatalog.geonorge.no/metadata/kartverket/fjellskygge-cache/cca7c129-fe66-4c96-9091-40d92290dd81",terms_text:"© Kartverket",description:"Hillshade for Norway",icon:"https://www.kartverket.no/Content/Images/logo-graphic-512.png",overlay:true},{id:"kartverket-historic",name:"Kartverket Historic maps",type:"wms",template:"https://wms.geonorge.no/skwms1/wms.historiskekart?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=amt1&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[5,15],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://www.kartverket.no/kart/historiske-kart/",terms_text:"© Kartverket",description:"Historic maps - for the time being `Amtskartserien´ 1826-1917.",icon:"https://www.kartverket.no/Content/Images/logo-graphic-512.png"},{id:"kartverket-topo4",name:"Kartverket N50 topo",type:"tms",template:"https://opencache{switch:,2,3}.statkart.no/gatekeeper/gk/gk.open_gmaps?layers=topo4&zoom={zoom}&x={x}&y={y}",zoomExtent:[3,15],polygon:[[[11.53568,58.86659],[11.66192,58.89784],[11.7935,59.09471],[11.84243,59.239],[11.82877,59.34509],[11.71279,59.60387],[11.86205,59.63771],[11.95608,59.69196],[11.93389,59.86895],[12.17881,59.8786],[12.46948,60.03124],[12.55438,60.18972],[12.51237,60.31659],[12.61793,60.40065],[12.61883,60.51512],[12.25387,61.01106],[12.69195,61.04632],[12.90756,61.34802],[12.57493,61.57623],[12.42465,61.57175],[12.15233,61.72694],[12.31212,62.26512],[12.07078,62.61109],[12.14907,62.7455],[12.08883,62.89668],[12.23464,62.99952],[11.99225,63.26684],[12.23327,63.47505],[12.17971,63.57117],[12.69313,63.96344],[13.21378,64.0839],[13.99183,64.00514],[14.17035,64.18236],[14.13253,64.47516],[13.67658,64.58356],[14.02455,64.88119],[14.33572,65.11098],[14.51699,65.30365],[14.54177,65.67762],[14.63674,65.81299],[14.53903,66.12496],[15.03881,66.14245],[15.50033,66.27956],[15.39368,66.4795],[15.63473,66.59685],[16.04695,66.90283],[16.39832,67.03827],[16.41439,67.21036],[16.10744,67.43617],[16.16455,67.5087],[16.42318,67.52589],[16.5866,67.64528],[16.7471,67.90466],[17.34741,68.09995],[17.90583,67.95885],[18.16489,68.19424],[18.13721,68.52675],[18.40761,68.57059],[18.62222,68.49607],[18.98574,68.50591],[19.92752,68.34558],[20.24505,68.49201],[19.99237,68.55586],[20.21137,68.65685],[20.34848,68.79976],[20.31623,68.93227],[20.10322,69.0359],[20.55694,69.04926],[20.7206,69.10837],[21.06178,69.02541],[21.12098,69.10587],[21.01135,69.21086],[21.2824,69.30076],[21.62645,69.26589],[22.33512,68.81965],[22.37485,68.70596],[22.5377,68.73329],[22.80161,68.67674],[23.04635,68.67833],[23.16467,68.61903],[23.68789,68.70049],[23.79776,68.81592],[23.96804,68.82287],[24.17541,68.7314],[24.76043,68.63655],[24.8544,68.55285],[24.90827,68.54387],[24.93347,68.6025],[25.12435,68.62003],[25.1667,68.79008],[25.43334,68.87886],[25.62945,68.88103],[25.79589,69.01157],[25.73272,69.19428],[26.02249,69.66758],[26.56631,69.94207],[27.10601,69.89539],[27.63679,70.05317],[27.93548,70.07401],[27.96569,70.00415],[28.40312,69.80824],[29.1014,69.69095],[29.328,69.47585],[28.82859,69.2316],[28.7931,69.0943],[29.04485,68.99986],[29.25292,69.10601],[29.32641,69.22982],[29.29229,69.27632],[29.39117,69.31298],[29.57038,69.31201],[29.85191,69.41631],[29.96795,69.39916],[30.13069,69.4667],[30.2008,69.5658],[30.13137,69.6609],[30.15678,69.66496],[30.51589,69.53787],[30.82077,69.52371],[30.95329,69.55563],[30.96221,69.67832],[30.83578,69.79192],[31.65161,70.17579],[31.78344,70.4662],[30.49255,70.86989],[28.43261,71.30079],[25.66406,71.40266],[23.81835,71.29374],[18.30322,70.40734],[14.24926,69.07641],[11.18408,67.47913],[11.74438,66.90852],[9.95361,64.88393],[4.72961,62.3649],[4.12948,61.69247],[4.08142,61.02637],[4.4577,59.19421],[5.31188,58.4276],[6.47094,57.84475],[7.56408,57.72468],[8.4375,57.91776],[10.59792,58.75006],[10.64905,58.88203],[11.09035,58.97673],[11.16173,59.06743],[11.34175,59.10293],[11.44922,58.99078],[11.45194,58.88136],[11.53568,58.86659]]],terms_url:"https://wiki.openstreetmap.org/wiki/No:Kartverket_import",terms_text:"© Kartverket",description:"Topographic map N50, equivalent to Norway 1:50.000 paper map series.",icon:"https://www.kartverket.no/Content/Images/logo-graphic-512.png"},{id:"kartverket-sjokart",name:"Kartverket Nautical Charts",type:"tms",template:"https://opencache{switch:,2,3}.statkart.no/gatekeeper/gk/gk.open_gmaps?layers=sjokartraster&zoom={zoom}&x={x}&y={y}",zoomExtent:[3,20],polygon:[[[-15.01273,-60.16205],[33.3326,-60.17016],[33.32144,-73.0009],[-15.0239,-72.99613],[-15.01273,-60.16205]],[[-173.00076,-70.54952],[-125.00321,-70.54878],[-125.00167,-78.99977],[-172.99922,-79.0002],[-173.00076,-70.54952]],[[3.24857,56.08599],[2.60924,56.59428],[1.47215,58.45924],[1.77704,61.36251],[-0.49301,63.88665],[-13.73292,69.76376],[-12.43655,72.58741],[-5.11965,74.39626],[-3.60356,79.12998],[5.85587,82.34863],[34.98861,82.3401],[37.96874,78.62784],[37.99619,75.79673],[36.95796,73.68962],[32.07458,70.27336],[30.3511,69.56882],[21.46179,69.57098],[18.3032,68.36681],[14.47997,66.2558],[11.50266,63.28307],[11.50166,58.95444],[11.08246,58.96771],[10.03051,58.25173],[8.88244,57.69534],[3.24857,56.08599]]],terms_url:"https://www.kartverket.no/Kart/Sjokart/",terms_text:"© Kartverket",description:"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). Raster representation of paper charts. Updated biweekly.",icon:"https://www.kartverket.no/Content/Images/logo-graphic-512.png"},{id:"kartverket-vegnett",name:"Kartverket Road Network",type:"wms",template:"https://openwms.statkart.no/skwms1/wms.vegnett?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=all&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[3,24],polygon:[[[11.53568,58.86659],[11.66192,58.89784],[11.7935,59.09471],[11.84243,59.239],[11.82877,59.34509],[11.71279,59.60387],[11.86205,59.63771],[11.95608,59.69196],[11.93389,59.86895],[12.17881,59.8786],[12.46948,60.03124],[12.55438,60.18972],[12.51237,60.31659],[12.61793,60.40065],[12.61883,60.51512],[12.25387,61.01106],[12.69195,61.04632],[12.90756,61.34802],[12.57493,61.57623],[12.42465,61.57175],[12.15233,61.72694],[12.31212,62.26512],[12.07078,62.61109],[12.14907,62.7455],[12.08883,62.89668],[12.23464,62.99952],[11.99225,63.26684],[12.23327,63.47505],[12.17971,63.57117],[12.69313,63.96344],[13.21378,64.0839],[13.99183,64.00514],[14.17035,64.18236],[14.13253,64.47516],[13.67658,64.58356],[14.02455,64.88119],[14.33572,65.11098],[14.51699,65.30365],[14.54177,65.67762],[14.63674,65.81299],[14.53903,66.12496],[15.03881,66.14245],[15.50033,66.27956],[15.39368,66.4795],[15.63473,66.59685],[16.04695,66.90283],[16.39832,67.03827],[16.41439,67.21036],[16.10744,67.43617],[16.16455,67.5087],[16.42318,67.52589],[16.5866,67.64528],[16.7471,67.90466],[17.34741,68.09995],[17.90583,67.95885],[18.16489,68.19424],[18.13721,68.52675],[18.40761,68.57059],[18.62222,68.49607],[18.98574,68.50591],[19.92752,68.34558],[20.24505,68.49201],[19.99237,68.55586],[20.21137,68.65685],[20.34848,68.79976],[20.31623,68.93227],[20.10322,69.0359],[20.55694,69.04926],[20.7206,69.10837],[21.06178,69.02541],[21.12098,69.10587],[21.01135,69.21086],[21.2824,69.30076],[21.62645,69.26589],[22.33512,68.81965],[22.37485,68.70596],[22.5377,68.73329],[22.80161,68.67674],[23.04635,68.67833],[23.16467,68.61903],[23.68789,68.70049],[23.79776,68.81592],[23.96804,68.82287],[24.17541,68.7314],[24.76043,68.63655],[24.8544,68.55285],[24.90827,68.54387],[24.93347,68.6025],[25.12435,68.62003],[25.1667,68.79008],[25.43334,68.87886],[25.62945,68.88103],[25.79589,69.01157],[25.73272,69.19428],[26.02249,69.66758],[26.56631,69.94207],[27.10601,69.89539],[27.63679,70.05317],[27.93548,70.07401],[27.96569,70.00415],[28.40312,69.80824],[29.1014,69.69095],[29.328,69.47585],[28.82859,69.2316],[28.7931,69.0943],[29.04485,68.99986],[29.25292,69.10601],[29.32641,69.22982],[29.29229,69.27632],[29.39117,69.31298],[29.57038,69.31201],[29.85191,69.41631],[29.96795,69.39916],[30.13069,69.4667],[30.2008,69.5658],[30.13137,69.6609],[30.15678,69.66496],[30.51589,69.53787],[30.82077,69.52371],[30.95329,69.55563],[30.96221,69.67832],[30.83578,69.79192],[31.65161,70.17579],[31.78344,70.4662],[30.49255,70.86989],[28.43261,71.30079],[25.66406,71.40266],[23.81835,71.29374],[18.30322,70.40734],[14.24926,69.07641],[11.18408,67.47913],[11.74438,66.90852],[9.95361,64.88393],[4.72961,62.3649],[4.12948,61.69247],[4.08142,61.02637],[4.4577,59.19421],[5.31188,58.4276],[6.47094,57.84475],[7.56408,57.72468],[8.4375,57.91776],[10.59792,58.75006],[10.64905,58.88203],[11.09035,58.97673],[11.16173,59.06743],[11.34175,59.10293],[11.44922,58.99078],[11.45194,58.88136],[11.53568,58.86659]]],terms_url:"https://www.kartverket.no/data/kartdata/vegdata/",terms_text:"© Kartverket",description:"Norwegian road network from the National Road database (NVDB). Colours represent national, county, municipal, private and forest roads + footways/cycleways.",icon:"https://www.kartverket.no/Content/Images/logo-graphic-512.png",overlay:true},{id:"Katowice-buildings",name:"Katowice: Buildings",type:"wms",template:"http://mapserver.um.katowice.pl/services/ortowms/MapServer/WMSServer?FORMAT=image/png&transparent=true&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=4,5,6&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[18.90884,50.24006],[18.90851,50.23542],[18.94279,50.23515],[18.94399,50.27138],[18.95469,50.27485],[18.95571,50.2894],[18.96692,50.29364],[18.98752,50.2848],[18.99888,50.2847],[18.99907,50.29368],[18.98892,50.29377],[18.98934,50.30244],[19.0094,50.30196],[19.03401,50.28842],[19.05533,50.30139],[19.07901,50.30087],[19.07908,50.29297],[19.12296,50.27784],[19.12267,50.25523],[19.11079,50.2428],[19.1098,50.17946],[19.12065,50.17936],[19.11957,50.14359],[19.10777,50.14386],[19.0973,50.13916],[19.09656,50.12786],[19.06379,50.12786],[19.02985,50.14009],[19.03007,50.16177],[19.01909,50.16698],[19.00848,50.16707],[18.96329,50.1498],[18.92907,50.15008],[18.92915,50.15426],[18.91854,50.15419],[18.91878,50.20421],[18.90792,50.20429],[18.90808,50.21297],[18.88588,50.21314],[18.88639,50.24024],[18.90884,50.24006]]],terms_text:"Urząd Miasta Katowic"},{id:"Katowice-aerial_image",name:"Katowice: Orthophotomap (aerial image)",type:"wms",template:"http://mapserver.um.katowice.pl/services/ortowms/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=2&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,23],polygon:[[[18.90884,50.24006],[18.90851,50.23542],[18.94279,50.23515],[18.94399,50.27138],[18.95469,50.27485],[18.95571,50.2894],[18.96692,50.29364],[18.98752,50.2848],[18.99888,50.2847],[18.99907,50.29368],[18.98892,50.29377],[18.98934,50.30244],[19.0094,50.30196],[19.03401,50.28842],[19.05533,50.30139],[19.07901,50.30087],[19.07908,50.29297],[19.12296,50.27784],[19.12267,50.25523],[19.11079,50.2428],[19.1098,50.17946],[19.12065,50.17936],[19.11957,50.14359],[19.10777,50.14386],[19.0973,50.13916],[19.09656,50.12786],[19.06379,50.12786],[19.02985,50.14009],[19.03007,50.16177],[19.01909,50.16698],[19.00848,50.16707],[18.96329,50.1498],[18.92907,50.15008],[18.92915,50.15426],[18.91854,50.15419],[18.91878,50.20421],[18.90792,50.20429],[18.90808,50.21297],[18.88588,50.21314],[18.88639,50.24024],[18.90884,50.24006]]],terms_text:"Urząd Miasta Katowic"},{id:"kelowna_2012",name:"Kelowna 2012",type:"tms",template:"http://{switch:a,b,c,d}.tile.paulnorman.ca/kelowna2012/{zoom}/{x}/{y}.png",endDate:"2012-05-14T00:00:00.000Z",startDate:"2012-05-13T00:00:00.000Z",zoomExtent:[9,20],polygon:[[[-119.58673,49.79281],[-119.54657,49.79281],[-119.54657,49.80138],[-119.53434,49.80138],[-119.53434,49.80473],[-119.52962,49.80473],[-119.52962,49.81196],[-119.51045,49.81196],[-119.51157,49.87443],[-119.51089,49.87449],[-119.51141,49.88433],[-119.51141,49.92218],[-119.49386,49.92235],[-119.49405,49.9313],[-119.48039,49.93175],[-119.48046,49.94075],[-119.46667,49.94099],[-119.46928,49.99137],[-119.45513,49.99161],[-119.45567,50.01212],[-119.44167,50.01239],[-119.44173,50.01363],[-119.42215,50.01404],[-119.4221,50.01193],[-119.41213,50.01217],[-119.41261,50.02169],[-119.41234,50.02169],[-119.41248,50.02508],[-119.41209,50.02508],[-119.4122,50.02708],[-119.41261,50.02707],[-119.41283,50.03219],[-119.39363,50.03264],[-119.39353,50.03078],[-119.37957,50.03101],[-119.37954,50.02876],[-119.37358,50.02886],[-119.37154,49.97936],[-119.35735,49.97936],[-119.35484,49.92561],[-119.32681,49.92572],[-119.32566,49.88041],[-119.31389,49.88065],[-119.31371,49.87717],[-119.31322,49.87722],[-119.31315,49.87497],[-119.31245,49.87491],[-119.31223,49.87236],[-119.31176,49.87233],[-119.3116,49.86961],[-119.31122,49.86942],[-119.31092,49.86324],[-119.31037,49.86327],[-119.30951,49.85124],[-119.31064,49.85123],[-119.31039,49.84626],[-119.32453,49.846],[-119.3246,49.84507],[-119.3367,49.84488],[-119.33675,49.84351],[-119.33794,49.84347],[-119.3378,49.83821],[-119.33836,49.8381],[-119.33837,49.83512],[-119.33909,49.83511],[-119.3388,49.83212],[-119.33915,49.83206],[-119.33917,49.82933],[-119.33946,49.82933],[-119.33959,49.82679],[-119.35001,49.82658],[-119.34937,49.81806],[-119.4047,49.81638],[-119.40457,49.8099],[-119.41016,49.8099],[-119.41029,49.80728],[-119.43195,49.80691],[-119.43226,49.7908],[-119.44598,49.79055],[-119.44529,49.78202],[-119.49674,49.78116],[-119.49661,49.77849],[-119.54184,49.77751],[-119.54159,49.77183],[-119.55603,49.77149],[-119.55612,49.77184],[-119.57157,49.77151],[-119.57162,49.77173],[-119.58192,49.77149],[-119.58201,49.77177],[-119.5923,49.77152],[-119.59234,49.77181],[-119.60038,49.7716],[-119.60119,49.78391],[-119.58644,49.78439],[-119.58673,49.79281]]],description:"High quality aerial imagery taken for the City of Kelowna"},{id:"kelowna_roads",name:"Kelowna Roads overlay",type:"tms",template:"http://{switch:a,b,c,d}.tile.paulnorman.ca/kelowna_overlay/{zoom}/{x}/{y}.png",zoomExtent:[9,20],polygon:[[[-119.58673,49.79281],[-119.54657,49.79281],[-119.54657,49.80138],[-119.53434,49.80138],[-119.53434,49.80473],[-119.52962,49.80473],[-119.52962,49.81196],[-119.51045,49.81196],[-119.51157,49.87443],[-119.51089,49.87449],[-119.51141,49.88433],[-119.51141,49.92218],[-119.49386,49.92235],[-119.49405,49.9313],[-119.48039,49.93175],[-119.48046,49.94075],[-119.46667,49.94099],[-119.46928,49.99137],[-119.45513,49.99161],[-119.45567,50.01212],[-119.44167,50.01239],[-119.44173,50.01363],[-119.42215,50.01404],[-119.4221,50.01193],[-119.41213,50.01217],[-119.41261,50.02169],[-119.41234,50.02169],[-119.41248,50.02508],[-119.41209,50.02508],[-119.4122,50.02708],[-119.41261,50.02707],[-119.41283,50.03219],[-119.39363,50.03264],[-119.39353,50.03078],[-119.37957,50.03101],[-119.37954,50.02876],[-119.37358,50.02886],[-119.37154,49.97936],[-119.35735,49.97936],[-119.35484,49.92561],[-119.32681,49.92572],[-119.32566,49.88041],[-119.31389,49.88065],[-119.31371,49.87717],[-119.31322,49.87722],[-119.31315,49.87497],[-119.31245,49.87491],[-119.31223,49.87236],[-119.31176,49.87233],[-119.3116,49.86961],[-119.31122,49.86942],[-119.31092,49.86324],[-119.31037,49.86327],[-119.30951,49.85124],[-119.31064,49.85123],[-119.31039,49.84626],[-119.32453,49.846],[-119.3246,49.84507],[-119.3367,49.84488],[-119.33675,49.84351],[-119.33794,49.84347],[-119.3378,49.83821],[-119.33836,49.8381],[-119.33837,49.83512],[-119.33909,49.83511],[-119.3388,49.83212],[-119.33915,49.83206],[-119.33917,49.82933],[-119.33946,49.82933],[-119.33959,49.82679],[-119.35001,49.82658],[-119.34937,49.81806],[-119.4047,49.81638],[-119.40457,49.8099],[-119.41016,49.8099],[-119.41029,49.80728],[-119.43195,49.80691],[-119.43226,49.7908],[-119.44598,49.79055],[-119.44529,49.78202],[-119.49674,49.78116],[-119.49661,49.77849],[-119.54184,49.77751],[-119.54159,49.77183],[-119.55603,49.77149],[-119.55612,49.77184],[-119.57157,49.77151],[-119.57162,49.77173],[-119.58192,49.77149],[-119.58201,49.77177],[-119.5923,49.77152],[-119.59234,49.77181],[-119.60038,49.7716],[-119.60119,49.78391],[-119.58644,49.78439],[-119.58673,49.79281]]],overlay:true},{id:"kystverket-navigasjon",name:"Kystverket Navigational Aid overlay",type:"wms",template:"https://nfs.kystverket.no/arcgis/services/nfs/NFSSistOperativ/MapServer/WmsServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=17,16,15,14,12,10,9,8,7,4&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[12,19],polygon:[[[3.24857,56.08599],[2.60924,56.59428],[1.47215,58.45924],[1.77704,61.36251],[-0.49301,63.88665],[-13.73292,69.76376],[-12.43655,72.58741],[-5.11965,74.39626],[-3.60356,79.12998],[5.85587,82.34863],[34.98861,82.3401],[37.96874,78.62784],[37.99619,75.79673],[36.95796,73.68962],[32.07458,70.27336],[30.3511,69.56882],[21.46179,69.57098],[18.3032,68.36681],[14.47997,66.2558],[11.50266,63.28307],[11.50166,58.95444],[11.08246,58.96771],[10.03051,58.25173],[8.88244,57.69534],[3.24857,56.08599]]],terms_url:"http://kystverket.no/Maritim-infrastruktur/Fyr-og-merker-/",terms_text:"© Kystverket",description:"Beacons, buoys, lights and fairways maintained by the Norwegian Coastal Administration",icon:"https://upload.wikimedia.org/wikipedia/commons/thumb/6/68/Coat_of_arms_of_the_Norwegian_Coastal_Administration.svg/143px-Coat_of_arms_of_the_Norwegian_Coastal_Administration.svg.png",overlay:true},{id:"landsat_233055",name:"Landsat 233055",type:"tms",template:"http://{switch:a,b,c,d}.tile.paulnorman.ca/landsat_233055/{zoom}/{x}/{y}.png",endDate:"2013-09-03T00:00:00.000Z",startDate:"2013-09-03T00:00:00.000Z",zoomExtent:[5,14],polygon:[[[-60.855,6.1765],[-60.47626,7.91883],[-62.16169,8.27787],[-62.53225,6.53755],[-60.855,6.1765]]],description:"Recent Landsat imagery"},{id:"osmse-ekonomiska",name:"Lantmäteriet Economic Map 1950–1980",type:"tms",template:"https://mapproxy.openstreetmap.se/tms/1.0.0/ek_EPSG3857/{zoom}/{x}/{-y}.jpeg",zoomExtent:[3,17],polygon:[[[12.71117,55.2666],[14.38109,55.29163],[19.65453,57.24934],[19.85228,59.75087],[17.77587,61.13794],[18.06151,62.27815],[20.97289,63.5779],[24.35668,65.60842],[23.96117,66.79191],[20.61034,66.45189],[17.13866,63.96632],[11.99706,61.03702],[12.29369,60.31607],[10.70067,58.81375],[12.71117,55.2666]]],terms_url:"https://www.lantmateriet.se",terms_text:"© Lantmäteriet",description:"Scan of \"Economic maps\" ca. 1950–1980",icon:"https://raw.githubusercontent.com/osmlab/editor-layer-index/gh-pages/sources/europe/se/lantmateriet_icon.png"},{id:"lantmateriet-orto1960",name:"Lantmäteriet Historic Orthophoto 1960",type:"wms",template:"https://api.lantmateriet.se/historiska-ortofoton/wms/v1/token/9b342b7d9f12d4ddb92277be9869d860/?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=OI.Histortho_60&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[5,19],polygon:[[[12.80182,55.19612],[14.22729,55.27286],[18.44604,56.69244],[19.74242,57.98481],[20.0061,59.5371],[19.08394,60.19308],[20.49499,63.2497],[24.25231,65.57437],[23.81835,67.92514],[23.23607,68.34655],[20.43456,69.17038],[18.08349,68.5644],[16.50145,67.88382],[14.43602,66.14275],[11.82128,63.30775],[12.20031,60.31063],[10.62377,58.5482],[12.64251,56.03062],[12.80182,55.19612]]],terms_url:"https://www.lantmateriet.se/",terms_text:"© Lantmäteriet, CC0",description:"Mosaic of Swedish orthophotos from the period 1955–1965. Older and younger pictures may occur.",icon:"https://raw.githubusercontent.com/osmlab/editor-layer-index/gh-pages/sources/europe/se/lantmateriet_icon.png"},{id:"lantmateriet-orto1975",name:"Lantmäteriet Historic Orthophoto 1975",type:"wms",template:"https://api.lantmateriet.se/historiska-ortofoton/wms/v1/token/9b342b7d9f12d4ddb92277be9869d860/?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=OI.Histortho_75&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[5,19],polygon:[[[12.80182,55.19612],[14.22729,55.27286],[18.44604,56.69244],[19.74242,57.98481],[20.0061,59.5371],[17.85131,60.87407],[14.74558,60.53889],[11.60239,59.56416],[10.51799,58.66559],[12.64251,56.03062],[12.80182,55.19612]]],terms_url:"https://www.lantmateriet.se/",terms_text:"© Lantmäteriet, CC0",description:"Mosaic of Swedish orthophotos from the period 1970–1980. Is under construction.",icon:"https://raw.githubusercontent.com/osmlab/editor-layer-index/gh-pages/sources/europe/se/lantmateriet_icon.png"},{id:"lantmateriet-topowebb",name:"Lantmäteriet Topographic Map",type:"tms",template:"https://api.lantmateriet.se/open/topowebb-ccby/v1/wmts/token/9b342b7d9f12d4ddb92277be9869d860/1.0.0/topowebb/default/3857/{zoom}/{y}/{x}.png",zoomExtent:[3,15],polygon:[[[12.80182,55.19612],[14.22729,55.27286],[18.44604,56.69244],[19.74242,57.98481],[20.0061,59.5371],[19.08394,60.19308],[20.49499,63.2497],[24.25231,65.57437],[23.81835,67.92514],[23.23607,68.34655],[20.43456,69.17038],[18.08349,68.5644],[16.50145,67.88382],[14.43602,66.14275],[11.82128,63.30775],[12.20031,60.31063],[10.62377,58.5482],[12.64251,56.03062],[12.80182,55.19612]]],terms_url:"https://www.lantmateriet.se/",terms_text:"© Lantmäteriet, CC0",description:"Topographic map of Sweden 1:50 000",icon:"https://raw.githubusercontent.com/osmlab/editor-layer-index/gh-pages/sources/europe/se/lantmateriet_icon.png"},{id:"lu.geoportail.opendata.ortholatest",name:"Latest available ortho geoportail.lu",type:"tms",template:"https://{switch:wmts1,wmts2}.geoportail.lu/opendata/wmts/ortho_latest/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.jpeg",endDate:"2017-06-22T00:00:00.000Z",startDate:"2017-06-14T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[5.96175,50.17631],[6.02627,50.18496],[6.03318,50.16395],[6.06069,50.15536],[6.07668,50.15913],[6.07824,50.17255],[6.10176,50.17199],[6.1225,50.16437],[6.1201,50.15594],[6.1277,50.14993],[6.11323,50.13739],[6.12369,50.13719],[6.14093,50.1305],[6.13555,50.11899],[6.13808,50.10263],[6.13108,50.09964],[6.13547,50.09119],[6.12194,50.09059],[6.12634,50.07817],[6.13186,50.07348],[6.12117,50.064],[6.11444,50.06139],[6.11563,50.05817],[6.12361,50.06323],[6.13661,50.04178],[6.13034,50.02975],[6.14821,50.02307],[6.13868,50.01572],[6.13594,50.01485],[6.13138,50.01905],[6.13024,50.01819],[6.13934,50.01116],[6.1517,50.01058],[6.14546,49.99689],[6.13966,49.9994],[6.13852,49.99829],[6.14218,49.99535],[6.15023,49.99518],[6.15625,49.98867],[6.17305,49.98589],[6.17348,49.98344],[6.17035,49.98376],[6.16549,49.97115],[6.17151,49.96298],[6.1763,49.962],[6.17995,49.95386],[6.18339,49.9548],[6.17983,49.96307],[6.18331,49.9686],[6.19277,49.97158],[6.19978,49.95352],[6.20707,49.95672],[6.21269,49.9514],[6.22502,49.95039],[6.22044,49.94369],[6.22824,49.93726],[6.22635,49.92766],[6.21913,49.92354],[6.22986,49.92125],[6.23603,49.91355],[6.23187,49.91064],[6.22769,49.91062],[6.23229,49.9072],[6.23381,49.90028],[6.24692,49.89535],[6.25781,49.88724],[6.26301,49.88101],[6.27646,49.87725],[6.28113,49.87957],[6.29166,49.87548],[6.2977,49.86673],[6.30989,49.87107],[6.31532,49.8673],[6.31465,49.86057],[6.32361,49.85188],[6.32158,49.8409],[6.32741,49.83673],[6.33656,49.83998],[6.33937,49.8507],[6.36465,49.85164],[6.4022,49.82098],[6.42643,49.81629],[6.42807,49.81186],[6.43097,49.81129],[6.44161,49.81547],[6.44344,49.81233],[6.45366,49.81275],[6.46454,49.81975],[6.47057,49.82385],[6.49681,49.81277],[6.50669,49.80993],[6.51155,49.80238],[6.51485,49.80513],[6.5196,49.81446],[6.52981,49.81048],[6.53225,49.80686],[6.53083,49.80116],[6.50622,49.78899],[6.51917,49.78344],[6.51105,49.77422],[6.52056,49.76818],[6.52052,49.76134],[6.50373,49.75086],[6.50263,49.73298],[6.50727,49.72938],[6.51809,49.7242],[6.51642,49.72129],[6.51176,49.72016],[6.50479,49.725],[6.49891,49.72639],[6.49558,49.72443],[6.50712,49.71655],[6.50788,49.71215],[6.5046,49.71227],[6.42714,49.66237],[6.4399,49.66025],[6.44251,49.65591],[6.42178,49.61809],[6.39898,49.60094],[6.37941,49.59526],[6.37551,49.58809],[6.38443,49.5801],[6.38119,49.57509],[6.36909,49.5783],[6.35791,49.57166],[6.3849,49.55817],[6.38009,49.54856],[6.35855,49.53296],[6.35932,49.52481],[6.37076,49.50545],[6.37056,49.45732],[6.3334,49.46493],[6.32189,49.47244],[6.29503,49.47928],[6.28789,49.48379],[6.27191,49.49995],[6.24133,49.50693],[6.19669,49.50331],[6.17337,49.50577],[6.16086,49.50085],[6.1671,49.49006],[6.14018,49.48525],[6.12937,49.48803],[6.12725,49.47081],[6.1014,49.46726],[6.10483,49.45076],[6.08167,49.45417],[6.07722,49.46139],[6.05917,49.46306],[6.05222,49.46028],[6.04421,49.44553],[6.02529,49.44703],[6.02154,49.45127],[6.01574,49.44885],[5.99412,49.45301],[5.97657,49.44885],[5.97773,49.45955],[5.97232,49.46087],[5.96891,49.48202],[5.9616,49.49026],[5.91578,49.49835],[5.89033,49.4948],[5.86332,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.83187,49.52639],[5.84308,49.53081],[5.83562,49.54114],[5.81625,49.53325],[5.8052,49.54272],[5.85943,49.57158],[5.86866,49.587],[5.86289,49.58525],[5.8511,49.58379],[5.84712,49.58961],[5.84565,49.5981],[5.8694,49.6106],[5.88182,49.63815],[5.89998,49.63907],[5.89934,49.66239],[5.85656,49.67628],[5.85628,49.68211],[5.8757,49.71118],[5.86481,49.72331],[5.84325,49.71822],[5.82191,49.72128],[5.82489,49.73767],[5.82073,49.74878],[5.78626,49.79079],[5.76517,49.78961],[5.75094,49.79094],[5.74159,49.82126],[5.74581,49.82435],[5.7372,49.83353],[5.74053,49.84142],[5.74701,49.84048],[5.74624,49.84783],[5.75399,49.84878],[5.74066,49.85152],[5.75229,49.85922],[5.74955,49.87554],[5.77567,49.87438],[5.77505,49.88057],[5.7346,49.89341],[5.73303,49.90285],[5.75783,49.91737],[5.76039,49.93252],[5.77073,49.93711],[5.76878,49.94239],[5.7688,49.96104],[5.78672,49.96816],[5.80524,49.96677],[5.80652,49.97321],[5.83129,49.97995],[5.83462,49.98656],[5.81806,49.99936],[5.81561,50.01437],[5.84792,50.02809],[5.86189,50.04581],[5.85087,50.0563],[5.85781,50.07186],[5.881,50.08069],[5.89196,50.12041],[5.95286,50.13384],[5.96175,50.17631]]],terms_url:"https://data.public.lu/en/datasets/bd-l-ortho-webservices-wms-et-wmts",terms_text:"Administration du Cadastre et de la Topographie",best:true,icon:"https://www.geoportail.lu/static/img/lion.png"},{id:"landsat_047026",name:"Latest southwest British Columbia Landsat",type:"tms",template:"http://{switch:a,b,c,d}.tile.paulnorman.ca/landsat_047026/{zoom}/{x}/{y}.png",endDate:"2013-09-12T00:00:00.000Z",startDate:"2013-09-12T00:00:00.000Z",zoomExtent:[5,13],polygon:[[[-121.93555,47.78206],[-121.57206,48.64101],[-121.20155,49.48462],[-121.83755,49.60232],[-122.4767,49.71617],[-123.11891,49.82688],[-123.76023,49.93358],[-124.08877,49.08705],[-124.41289,48.22526],[-123.79277,48.11973],[-123.17279,48.01096],[-122.55355,47.89823],[-121.93555,47.78206]]],description:"Recent lower-resolution landsat imagery for southwest British Columbia"},{id:"Lausanne-2012",name:"Lausanne - Orthophoto technique 2012",type:"tms",template:"http://osmdata.asitvd.ch/tiles/lausanne2012/{zoom}/{x}/{y}.png",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",zoomExtent:[14,20],polygon:[[[6.66668,46.49441],[6.61637,46.49406],[6.61636,46.49836],[6.60135,46.49825],[6.60131,46.50227],[6.55923,46.50194],[6.55773,46.59687],[6.72895,46.59805],[6.7304,46.49004],[6.67702,46.48978],[6.67703,46.49011],[6.67345,46.49006],[6.67347,46.49041],[6.66672,46.49036],[6.66668,46.49441]]],terms_url:"http://carto.lausanne.ch/lausanne-gc/",terms_text:"Ville de Lausanne - Orthophoto technique 2012"},{id:"linkoping-orto",name:"Linköping Orthophoto",type:"wms",template:"http://kartan.linkoping.se/wms?servicename=wms_ortofoto&FORMAT=image/jpeg&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Kommun_2010_25cm&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[13,20],polygon:[[[15.36884,58.6305],[15.41279,58.65623],[15.46635,58.6339],[15.54291,58.64408],[15.54119,58.60672],[15.58376,58.6414],[15.7592,58.55267],[15.76675,58.52006],[15.91438,58.51755],[16.08089,58.37148],[15.82718,58.30588],[15.84915,58.21449],[15.65861,58.15513],[15.56763,58.19134],[15.55939,58.14661],[15.50171,58.07679],[15.37777,58.05881],[15.28713,58.1031],[15.27203,58.13483],[15.35889,58.16455],[15.32387,58.38012],[15.24971,58.40027],[15.3582,58.47288],[15.36884,58.6305]]],terms_url:"https://www.linkoping.se/open/",terms_text:"© Linköping municipality",best:true,description:"Orthophotos from the municipality of Linköping 2010, open data",icon:"https://upload.wikimedia.org/wikipedia/commons/thumb/2/29/Linköping_vapen.svg/198px-Linköping_vapen.svg.png"},{id:"LINZ_NZ_Aerial_Imagery",name:"LINZ NZ Aerial Imagery",type:"tms",template:"https://tiles-a.data-cdn.linz.govt.nz/services;key=3197c6d0e5cb494a95d58dc2de3216c2/tiles/v4/set=2/EPSG:3857/{zoom}/{x}/{y}.png",zoomExtent:[0,21],polygon:[[[167.25037,-47.21957],[167.24487,-47.28016],[167.50305,-47.37975],[168.25012,-47.1561],[168.74451,-46.7963],[169.32678,-46.75492],[169.78271,-46.60417],[170.42542,-46.11133],[170.80444,-45.95115],[170.95276,-45.44086],[171.30981,-44.91036],[171.40869,-44.39062],[172.56226,-43.92955],[172.90283,-43.9691],[173.16101,-43.90977],[173.25989,-43.69568],[172.97424,-43.5366],[172.76001,-43.37711],[173.15002,-43.17714],[173.70483,-42.63396],[174.36401,-41.7836],[174.32007,-41.40978],[174.84741,-41.52914],[175.07263,-41.70573],[175.50659,-41.67291],[176.2262,-41.10833],[176.83044,-40.42604],[177.17102,-39.67337],[177.03918,-39.39375],[177.44568,-39.18118],[177.60498,-39.33005],[177.97852,-39.36828],[178.33557,-38.65978],[178.70911,-37.74466],[178.62671,-37.54458],[178.3136,-37.43125],[177.62146,-37.37889],[177.03918,-37.39635],[176.56128,-37.37016],[176.33606,-37.05956],[176.00647,-36.29742],[175.67688,-36.05354],[174.67163,-35.1783],[173.19397,-34.28445],[172.67761,-34.23451],[172.38647,-34.40238],[172.47986,-34.71904],[172.98523,-35.32185],[173.56201,-36.14231],[174.30908,-37.07709],[174.55627,-38.05242],[174.47937,-38.65549],[174.32556,-38.86537],[173.79822,-38.95941],[173.60596,-39.23225],[173.69934,-39.56335],[174.58923,-39.95607],[174.98474,-40.21664],[174.98474,-40.49292],[174.72107,-40.80549],[174.14978,-40.65147],[173.28186,-40.4344],[172.58972,-40.35073],[172.08435,-40.53468],[171.76575,-40.82628],[171.57349,-41.39742],[171.28235,-41.65239],[170.87585,-42.53284],[170.354,-42.87194],[168.27759,-43.92955],[167.6239,-44.47691],[166.55273,-45.38688],[166.27258,-45.91677],[166.48132,-46.22545],[167.67883,-46.47192],[167.25037,-47.21957]]],terms_url:"https://www.linz.govt.nz/data/licensing-and-using-data/attributing-elevation-or-aerial-imagery-data",terms_text:"Sourced from LINZ CC-BY 4.0",best:true,icon:"https://koordinates.a.ssl.fastly.net/media/settings/branding/favicon-lds.ico"},{id:"LINZ_NZ_Topo50_Gridless_Maps",name:"LINZ NZ Topo50 Gridless Maps",type:"tms",template:"https://tiles-a.data-cdn.linz.govt.nz/services;key=3197c6d0e5cb494a95d58dc2de3216c2/tiles/v4/layer=2343/EPSG:3857/{zoom}/{x}/{y}.png",zoomExtent:[0,21],polygon:[[[167.25037,-47.21957],[167.24487,-47.28016],[167.50305,-47.37975],[168.25012,-47.1561],[168.74451,-46.7963],[169.32678,-46.75492],[169.78271,-46.60417],[170.42542,-46.11133],[170.80444,-45.95115],[170.95276,-45.44086],[171.30981,-44.91036],[171.40869,-44.39062],[172.56226,-43.92955],[172.90283,-43.9691],[173.16101,-43.90977],[173.25989,-43.69568],[172.97424,-43.5366],[172.76001,-43.37711],[173.15002,-43.17714],[173.70483,-42.63396],[174.36401,-41.7836],[174.32007,-41.40978],[174.84741,-41.52914],[175.07263,-41.70573],[175.50659,-41.67291],[176.2262,-41.10833],[176.83044,-40.42604],[177.17102,-39.67337],[177.03918,-39.39375],[177.44568,-39.18118],[177.60498,-39.33005],[177.97852,-39.36828],[178.33557,-38.65978],[178.70911,-37.74466],[178.62671,-37.54458],[178.3136,-37.43125],[177.62146,-37.37889],[177.03918,-37.39635],[176.56128,-37.37016],[176.33606,-37.05956],[176.00647,-36.29742],[175.67688,-36.05354],[174.67163,-35.1783],[173.19397,-34.28445],[172.67761,-34.23451],[172.38647,-34.40238],[172.47986,-34.71904],[172.98523,-35.32185],[173.56201,-36.14231],[174.30908,-37.07709],[174.55627,-38.05242],[174.47937,-38.65549],[174.32556,-38.86537],[173.79822,-38.95941],[173.60596,-39.23225],[173.69934,-39.56335],[174.58923,-39.95607],[174.98474,-40.21664],[174.98474,-40.49292],[174.72107,-40.80549],[174.14978,-40.65147],[173.28186,-40.4344],[172.58972,-40.35073],[172.08435,-40.53468],[171.76575,-40.82628],[171.57349,-41.39742],[171.28235,-41.65239],[170.87585,-42.53284],[170.354,-42.87194],[168.27759,-43.92955],[167.6239,-44.47691],[166.55273,-45.38688],[166.27258,-45.91677],[166.48132,-46.22545],[167.67883,-46.47192],[167.25037,-47.21957]]],terms_url:"https://data.linz.govt.nz/layer/2343-nz-mainland-topo50-gridless-maps",terms_text:"CC BY 4.0 Land Information New Zealand",icon:"https://koordinates.a.ssl.fastly.net/media/settings/branding/favicon-lds.ico"},{id:"ORT10LT",name:"Lithuania - NŽT ORT10LT",type:"tms",template:"https://ort10lt.openmap.lt/g16/{zoom}/{x}/{y}.jpeg",endDate:"2016-01-01T00:00:00.000Z",startDate:"2010-01-01T00:00:00.000Z",zoomExtent:[4,18],polygon:[[[26.21384,55.85075],[26.38583,55.70453],[26.63036,55.68067],[26.62053,55.56892],[26.52422,55.50992],[26.55415,55.38883],[26.43993,55.34794],[26.79197,55.3212],[26.82913,55.27635],[26.74346,55.25399],[26.67648,55.15883],[26.46112,55.12856],[26.35774,55.15054],[26.22963,55.10732],[26.27138,55.07759],[26.20851,54.99741],[26.06191,54.94161],[25.85782,54.9276],[25.74298,54.81506],[25.76261,54.5769],[25.53194,54.34182],[25.67716,54.32381],[25.78573,54.23362],[25.78588,54.15506],[25.55508,54.14619],[25.51095,54.17503],[25.58967,54.22858],[25.51362,54.30785],[25.26893,54.27447],[25.0706,54.13363],[24.95737,54.17206],[24.81338,54.14486],[24.77902,54.09991],[24.87128,54.0349],[24.81957,53.99772],[24.68459,53.96211],[24.69787,54.01714],[24.62591,54.0105],[24.43426,53.90144],[24.35206,53.89679],[24.20161,53.97001],[23.96833,53.9267],[23.91302,53.96968],[23.77812,53.89892],[23.70977,53.93945],[23.53704,53.94307],[23.48224,53.98938],[23.52734,54.04735],[23.48586,54.15323],[23.38679,54.22484],[23.04212,54.31597],[23.01021,54.3828],[22.85469,54.4104],[22.792,54.36332],[22.70234,54.4529],[22.68386,54.58597],[22.74897,54.63198],[22.74297,54.72682],[22.88668,54.8135],[22.8204,54.91198],[22.6424,54.97134],[22.58924,55.07024],[22.0806,55.02448],[22.03241,55.0841],[21.91307,55.08168],[21.64919,55.18081],[21.50151,55.18682],[21.38437,55.2937],[21.27098,55.24501],[21.09836,55.25639],[20.94217,55.28245],[21.08635,55.56183],[21.03995,55.83636],[21.06403,56.06995],[21.20478,56.08117],[21.2308,56.16233],[21.5021,56.2955],[21.72359,56.31382],[21.83566,56.37162],[21.96954,56.37665],[22.0153,56.42428],[22.43727,56.4064],[22.68,56.35159],[22.91917,56.37902],[22.94668,56.41465],[23.09325,56.30464],[23.17034,56.36677],[23.30645,56.38305],[23.55717,56.33382],[23.7648,56.37332],[23.76669,56.32381],[24.019,56.32976],[24.12146,56.2489],[24.28574,56.30064],[24.45415,56.25816],[24.57947,56.28824],[24.62841,56.37533],[24.90238,56.48053],[25.12774,56.20591],[25.57714,56.18241],[25.67312,56.14937],[26.21384,55.85075]]],terms_url:"https://www.geoportal.lt",terms_text:"NŽT ORT10LT",best:true},{id:"mapbox_locator_overlay",name:"Locator Overlay",type:"tms",template:"https://{switch:a,b,c,d}.tiles.mapbox.com/v4/openstreetmap.map-inh76ba2/{zoom}/{x}/{y}.png?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcCIsImEiOiJjaml5MjVyb3MwMWV0M3hxYmUzdGdwbzE4In0.q548FjhsSJzvXsGlPsFxAQ",zoomExtent:[0,16],overzoom:false,terms_url:"https://www.mapbox.com/about/maps",terms_text:"Terms & Feedback","default":true,description:"Shows major features to help orient you.",overlay:true},{id:"Lodz-buildings",name:"Łódź: Buildings",type:"wms",template:"http://gis.mapa.lodz.pl/awiskts/services/WMS_publikowane/LODZ/MapServer/WMSServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Budynki,Ulice,Adresy&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[19.55046,51.68509],[19.53843,51.68518],[19.53858,51.68067],[19.50381,51.68085],[19.50351,51.68564],[19.48084,51.68589],[19.48063,51.6815],[19.43517,51.68168],[19.43517,51.67754],[19.41155,51.67791],[19.41214,51.68703],[19.37723,51.68739],[19.37723,51.69172],[19.34216,51.692],[19.34291,51.70544],[19.33132,51.70572],[19.33176,51.71474],[19.31988,51.71493],[19.32077,51.74612],[19.33206,51.74612],[19.33251,51.75513],[19.32107,51.75532],[19.32225,51.79108],[19.31052,51.79126],[19.31141,51.81387],[19.323,51.81359],[19.32389,51.82709],[19.33488,51.82718],[19.33473,51.84481],[19.39342,51.84444],[19.39342,51.84022],[19.42789,51.83985],[19.42834,51.85738],[19.4634,51.85701],[19.4634,51.86133],[19.47499,51.86133],[19.47529,51.86601],[19.52194,51.86509],[19.52238,51.85619],[19.568,51.85582],[19.56785,51.85105],[19.57944,51.85105],[19.57825,51.82397],[19.63649,51.82342],[19.63411,51.76488],[19.65759,51.7647],[19.65714,51.74676],[19.64496,51.74695],[19.64421,51.7152],[19.63337,51.7152],[19.63322,51.70167],[19.62059,51.70167],[19.62044,51.68868],[19.55032,51.68942],[19.55046,51.68509]]],terms_text:"Urząd Miasta Łodzi",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/dOrthophotomap2017(aerialimage).png"},{id:"Lodz-2015",name:"Łódź: Orthophotomap 2015 (aerial image)",type:"wms",template:"http://gis.mapa.lodz.pl/awiskts/services/Ortofotomapa/Ortofotomapa/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[19.55046,51.68509],[19.53843,51.68518],[19.53858,51.68067],[19.50381,51.68085],[19.50351,51.68564],[19.48084,51.68589],[19.48063,51.6815],[19.43517,51.68168],[19.43517,51.67754],[19.41155,51.67791],[19.41214,51.68703],[19.37723,51.68739],[19.37723,51.69172],[19.34216,51.692],[19.34291,51.70544],[19.33132,51.70572],[19.33176,51.71474],[19.31988,51.71493],[19.32077,51.74612],[19.33206,51.74612],[19.33251,51.75513],[19.32107,51.75532],[19.32225,51.79108],[19.31052,51.79126],[19.31141,51.81387],[19.323,51.81359],[19.32389,51.82709],[19.33488,51.82718],[19.33473,51.84481],[19.39342,51.84444],[19.39342,51.84022],[19.42789,51.83985],[19.42834,51.85738],[19.4634,51.85701],[19.4634,51.86133],[19.47499,51.86133],[19.47529,51.86601],[19.52194,51.86509],[19.52238,51.85619],[19.568,51.85582],[19.56785,51.85105],[19.57944,51.85105],[19.57825,51.82397],[19.63649,51.82342],[19.63411,51.76488],[19.65759,51.7647],[19.65714,51.74676],[19.64496,51.74695],[19.64421,51.7152],[19.63337,51.7152],[19.63322,51.70167],[19.62059,51.70167],[19.62044,51.68868],[19.55032,51.68942],[19.55046,51.68509]]],terms_text:"Urząd Miasta Łodzi",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/dOrthophotomap2017(aerialimage).png"},{id:"Lodz-2017",name:"Łódź: Orthophotomap 2017 (aerial image)",type:"wms",template:"https://mapa.lodz.pl/3/services/OGC/Ortofotomapa/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2017-01-01T00:00:00.000Z",startDate:"2017-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[19.55046,51.68509],[19.53843,51.68518],[19.53858,51.68067],[19.50381,51.68085],[19.50351,51.68564],[19.48084,51.68589],[19.48063,51.6815],[19.43517,51.68168],[19.43517,51.67754],[19.41155,51.67791],[19.41214,51.68703],[19.37723,51.68739],[19.37723,51.69172],[19.34216,51.692],[19.34291,51.70544],[19.33132,51.70572],[19.33176,51.71474],[19.31988,51.71493],[19.32077,51.74612],[19.33206,51.74612],[19.33251,51.75513],[19.32107,51.75532],[19.32225,51.79108],[19.31052,51.79126],[19.31141,51.81387],[19.323,51.81359],[19.32389,51.82709],[19.33488,51.82718],[19.33473,51.84481],[19.39342,51.84444],[19.39342,51.84022],[19.42789,51.83985],[19.42834,51.85738],[19.4634,51.85701],[19.4634,51.86133],[19.47499,51.86133],[19.47529,51.86601],[19.52194,51.86509],[19.52238,51.85619],[19.568,51.85582],[19.56785,51.85105],[19.57944,51.85105],[19.57825,51.82397],[19.63649,51.82342],[19.63411,51.76488],[19.65759,51.7647],[19.65714,51.74676],[19.64496,51.74695],[19.64421,51.7152],[19.63337,51.7152],[19.63322,51.70167],[19.62059,51.70167],[19.62044,51.68868],[19.55032,51.68942],[19.55046,51.68509]]],terms_text:"Urząd Miasta Łodzi",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/dOrthophotomap2017(aerialimage).png"},{id:"Loire_Atlantique-Orthophotos-2012",name:"Loire-Atlantique - Orthophotos 2012 - 20 cm",type:"tms",template:"http://{switch:a,b,c,d,e,f,g,h}.tiles.cg44.makina-corpus.net/ortho-2012/{zoom}/{x}/{-y}.jpg",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",zoomExtent:[0,19],polygon:[[[-1.48638,46.87691],[-1.54437,46.84873],[-1.73468,46.87246],[-1.89276,46.94234],[-1.95475,46.98084],[-2.07067,47.08521],[-2.2678,47.12656],[-2.22627,47.17124],[-2.19217,47.16914],[-2.19341,47.25546],[-2.29694,47.22769],[-2.41658,47.25336],[-2.54862,47.28575],[-2.63913,47.41678],[-2.50573,47.50812],[-2.31063,47.53021],[-2.24836,47.52384],[-2.23223,47.51499],[-2.12109,47.54674],[-2.11783,47.60126],[-2.1001,47.61123],[-2.09981,47.62005],[-2.11141,47.62873],[-2.10055,47.65141],[-2.08121,47.66578],[-1.98016,47.70751],[-1.83077,47.72419],[-1.67455,47.72544],[-1.63735,47.77463],[-1.49601,47.81752],[-1.49911,47.84166],[-1.38133,47.84415],[-1.346,47.81086],[-1.23007,47.78587],[-1.21643,47.75838],[-1.22635,47.73628],[-1.21086,47.7317],[-1.18668,47.73462],[-1.15196,47.69332],[-1.13151,47.63654],[-1.09121,47.6332],[-0.99265,47.6027],[-0.98459,47.58598],[-1.0317,47.55001],[-1.13585,47.55628],[-1.13275,47.5161],[-1.0317,47.51778],[-0.94863,47.50103],[-0.93686,47.47715],[-0.93376,47.43859],[-0.9009,47.39874],[-0.92694,47.37482],[-0.97157,47.35845],[-1.28339,47.32736],[-1.23379,47.26093],[-1.20032,47.26935],[-1.16498,47.24957],[-1.14143,47.1763],[-1.1563,47.15818],[-1.20652,47.12402],[-1.20838,47.10968],[-1.15568,47.10504],[-1.14081,47.08056],[-1.09431,47.0717],[-1.09989,47.03199],[-1.14453,47.01636],[-1.21582,47.02904],[-1.26727,47.06325],[-1.28524,47.02185],[-1.34972,47.02397],[-1.33918,46.969],[-1.3491,46.94446],[-1.45014,46.91186],[-1.47504,46.9176],[-1.48775,46.93063],[-1.49235,46.98433],[-1.48644,46.99943],[-1.49213,47.02722],[-1.52764,47.00541],[-1.52961,46.97252],[-1.50507,46.94439],[-1.50222,46.92973],[-1.51142,46.91371],[-1.48622,46.89724],[-1.48638,46.87691]]],terms_url:"http://data2.loire-atlantique.fr/licences/",terms_text:"Département de Loire-Atlantique"},{id:"Loire_Atlantique-Orthophotos-2016",name:"Loire-Atlantique - Orthophotos 2016 - 10 cm",type:"wms",template:"https://wms-vuduciel2.makina-corpus.net/geoserver/wms?SERVICE=WMS&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=cg44:ortho44-2016&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[-1.48638,46.87691],[-1.54437,46.84873],[-1.73468,46.87246],[-1.89276,46.94234],[-1.95475,46.98084],[-2.07067,47.08521],[-2.2678,47.12656],[-2.22627,47.17124],[-2.19217,47.16914],[-2.19341,47.25546],[-2.29694,47.22769],[-2.41658,47.25336],[-2.54862,47.28575],[-2.63913,47.41678],[-2.50573,47.50812],[-2.31063,47.53021],[-2.24836,47.52384],[-2.23223,47.51499],[-2.12109,47.54674],[-2.11783,47.60126],[-2.1001,47.61123],[-2.09981,47.62005],[-2.11141,47.62873],[-2.10055,47.65141],[-2.08121,47.66578],[-1.98016,47.70751],[-1.83077,47.72419],[-1.67455,47.72544],[-1.63735,47.77463],[-1.49601,47.81752],[-1.49911,47.84166],[-1.38133,47.84415],[-1.346,47.81086],[-1.23007,47.78587],[-1.21643,47.75838],[-1.22635,47.73628],[-1.21086,47.7317],[-1.18668,47.73462],[-1.15196,47.69332],[-1.13151,47.63654],[-1.09121,47.6332],[-0.99265,47.6027],[-0.98459,47.58598],[-1.0317,47.55001],[-1.13585,47.55628],[-1.13275,47.5161],[-1.0317,47.51778],[-0.94863,47.50103],[-0.93686,47.47715],[-0.93376,47.43859],[-0.9009,47.39874],[-0.92694,47.37482],[-0.97157,47.35845],[-1.28339,47.32736],[-1.23379,47.26093],[-1.20032,47.26935],[-1.16498,47.24957],[-1.14143,47.1763],[-1.1563,47.15818],[-1.20652,47.12402],[-1.20838,47.10968],[-1.15568,47.10504],[-1.14081,47.08056],[-1.09431,47.0717],[-1.09989,47.03199],[-1.14453,47.01636],[-1.21582,47.02904],[-1.26727,47.06325],[-1.28524,47.02185],[-1.34972,47.02397],[-1.33918,46.969],[-1.3491,46.94446],[-1.45014,46.91186],[-1.47504,46.9176],[-1.48775,46.93063],[-1.49235,46.98433],[-1.48644,46.99943],[-1.49213,47.02722],[-1.52764,47.00541],[-1.52961,46.97252],[-1.50507,46.94439],[-1.50222,46.92973],[-1.51142,46.91371],[-1.48622,46.89724],[-1.48638,46.87691]]],terms_url:"http://data2.loire-atlantique.fr/licences/",terms_text:"© Loire-Atlantique ouverture des données publiques"},{id:"Lombardia-Italy-CTR-DBT",name:"Lombardia - Italy (CTR DBT)",type:"wms",template:"https://www.cartografia.servizirl.it/arcgis/services/wms/ctr_wms/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Sfondo%20C.T.R.%2010000&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[8.4816,45.28938],[8.63085,45.01372],[8.78009,44.98189],[8.86775,45.02712],[9.07148,44.80063],[9.14966,44.79055],[9.19467,44.67106],[9.31549,44.65758],[9.36997,44.698],[9.37945,44.82752],[9.33207,44.91483],[9.41025,45.03716],[9.78692,45.04386],[9.78692,45.00032],[9.93853,45.002],[9.93379,45.08903],[10.00013,45.09071],[10.00013,44.99697],[10.20149,45.002],[10.20149,44.95004],[10.40523,44.9534],[10.40523,44.90476],[10.49288,44.90308],[10.49288,44.8628],[10.6516,44.85776],[10.64686,44.90308],[11.35282,44.89469],[11.35519,44.93663],[11.45706,44.93328],[11.44758,44.97351],[11.3623,45.00032],[11.35282,45.09238],[11.25806,45.09572],[11.25806,45.13752],[11.16094,45.14253],[11.16094,45.18262],[11.05196,45.19097],[11.05196,45.23436],[10.9572,45.23269],[10.9572,45.28605],[10.8577,45.28438],[10.85534,45.32271],[10.74636,45.32937],[10.75347,45.47408],[10.64686,45.48073],[10.60301,45.51074],[10.57636,45.47379],[10.53549,45.50036],[10.59116,45.53148],[10.61666,45.61304],[10.87429,45.84001],[10.82217,45.85982],[10.67529,45.85817],[10.57342,45.8103],[10.58624,46.00773],[10.5016,46.01596],[10.59325,46.11529],[10.60896,46.35583],[10.65634,46.38688],[10.64686,46.46037],[10.4147,46.57285],[10.32705,46.56797],[10.25124,46.65422],[10.07357,46.62494],[10.02382,46.53212],[10.02855,46.43588],[10.07357,46.39832],[10.12095,46.39669],[10.0783,46.32802],[10.14464,46.26582],[10.10436,46.24781],[9.97407,46.40812],[9.71111,46.3689],[9.68742,46.32312],[9.61872,46.30675],[9.55712,46.32475],[9.50264,46.39015],[9.47895,46.5256],[9.25626,46.51582],[9.22546,46.44078],[9.27284,46.34438],[9.17098,46.19044],[9.04305,46.12808],[9.062,46.09195],[8.97435,46.04593],[8.98856,46.00152],[8.93882,45.97354],[9.04068,45.8961],[9.01936,45.84827],[8.84879,46.0081],[8.89854,46.07059],[8.8251,46.11823],[8.70902,46.11659],[8.67823,46.07552],[8.7185,46.01468],[8.55504,45.90434],[8.59768,45.83836],[8.53372,45.79378],[8.6877,45.49235],[8.78009,45.41591],[8.68533,45.37931],[8.71139,45.34103],[8.69481,45.32104],[8.62848,45.37765],[8.5124,45.35768],[8.4816,45.28938]]],terms_url:"https://www.dati.gov.it/content/italian-open-data-license-v20",terms_text:"CTR DBT 10000 Regione Lombardia"},{id:"Lombardia-Italy-CTR",name:"Lombardia - Italy (CTR)",type:"wms",template:"https://www.cartografia.regione.lombardia.it/ArcGIS10/services/wms/ctr_wms/MapServer/WMSServer?STYLES=&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=0&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[8.4816,45.28938],[8.63085,45.01372],[8.78009,44.98189],[8.86775,45.02712],[9.07148,44.80063],[9.14966,44.79055],[9.19467,44.67106],[9.31549,44.65758],[9.36997,44.698],[9.37945,44.82752],[9.33207,44.91483],[9.41025,45.03716],[9.78692,45.04386],[9.78692,45.00032],[9.93853,45.002],[9.93379,45.08903],[10.00013,45.09071],[10.00013,44.99697],[10.20149,45.002],[10.20149,44.95004],[10.40523,44.9534],[10.40523,44.90476],[10.49288,44.90308],[10.49288,44.8628],[10.6516,44.85776],[10.64686,44.90308],[11.35282,44.89469],[11.35519,44.93663],[11.45706,44.93328],[11.44758,44.97351],[11.3623,45.00032],[11.35282,45.09238],[11.25806,45.09572],[11.25806,45.13752],[11.16094,45.14253],[11.16094,45.18262],[11.05196,45.19097],[11.05196,45.23436],[10.9572,45.23269],[10.9572,45.28605],[10.8577,45.28438],[10.85534,45.32271],[10.74636,45.32937],[10.75347,45.47408],[10.64686,45.48073],[10.60301,45.51074],[10.57636,45.47379],[10.53549,45.50036],[10.59116,45.53148],[10.61666,45.61304],[10.87429,45.84001],[10.82217,45.85982],[10.67529,45.85817],[10.57342,45.8103],[10.58624,46.00773],[10.5016,46.01596],[10.59325,46.11529],[10.60896,46.35583],[10.65634,46.38688],[10.64686,46.46037],[10.4147,46.57285],[10.32705,46.56797],[10.25124,46.65422],[10.07357,46.62494],[10.02382,46.53212],[10.02855,46.43588],[10.07357,46.39832],[10.12095,46.39669],[10.0783,46.32802],[10.14464,46.26582],[10.10436,46.24781],[9.97407,46.40812],[9.71111,46.3689],[9.68742,46.32312],[9.61872,46.30675],[9.55712,46.32475],[9.50264,46.39015],[9.47895,46.5256],[9.25626,46.51582],[9.22546,46.44078],[9.27284,46.34438],[9.17098,46.19044],[9.04305,46.12808],[9.062,46.09195],[8.97435,46.04593],[8.98856,46.00152],[8.93882,45.97354],[9.04068,45.8961],[9.01936,45.84827],[8.84879,46.0081],[8.89854,46.07059],[8.8251,46.11823],[8.70902,46.11659],[8.67823,46.07552],[8.7185,46.01468],[8.55504,45.90434],[8.59768,45.83836],[8.53372,45.79378],[8.6877,45.49235],[8.78009,45.41591],[8.68533,45.37931],[8.71139,45.34103],[8.69481,45.32104],[8.62848,45.37765],[8.5124,45.35768],[8.4816,45.28938]]],terms_url:"https://www.dati.gov.it/content/italian-open-data-license-v20",terms_text:"Regione Lombardia - Infrastruttura per l'informazione territoriale"},{id:"londrina2011",name:"Londrina Ortofoto 2011",type:"tms",template:"https://siglon.londrina.pr.gov.br/arcgis/rest/services/Imagens/Ortofotos_2011_Paranacidade/MapServer/WMTS/tile/1.0.0/Imagens_Ortofotos_2011_Paranacidade/default/GoogleMapsCompatible/{zoom}/{y}/{x}",endDate:"2011-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",zoomExtent:[0,19],polygon:[[[-51.10903,-23.39275],[-51.11015,-23.39112],[-51.11198,-23.3896],[-51.11358,-23.38977],[-51.121,-23.38593],[-51.12225,-23.38511],[-51.12483,-23.3835],[-51.12538,-23.38187],[-51.12482,-23.3777],[-51.12446,-23.37505],[-51.12437,-23.3723],[-51.12244,-23.37033],[-51.12302,-23.36643],[-51.12856,-23.36548],[-51.12832,-23.35884],[-51.12477,-23.35476],[-51.12703,-23.35091],[-51.12412,-23.3468],[-51.12025,-23.34781],[-51.11765,-23.33969],[-51.11265,-23.34129],[-51.1094,-23.33489],[-51.10756,-23.33409],[-51.10486,-23.33398],[-51.10253,-23.33419],[-51.09987,-23.33102],[-51.09801,-23.32936],[-51.09999,-23.32831],[-51.10323,-23.32532],[-51.10473,-23.32319],[-51.10466,-23.32129],[-51.10515,-23.31844],[-51.10636,-23.31575],[-51.10661,-23.31467],[-51.1105,-23.31167],[-51.11158,-23.30842],[-51.0995,-23.30947],[-51.0974,-23.30863],[-51.09512,-23.30745],[-51.09202,-23.30494],[-51.09036,-23.30371],[-51.09205,-23.29875],[-51.09269,-23.2975],[-51.09408,-23.29295],[-51.10074,-23.29332],[-51.10102,-23.28871],[-51.10068,-23.28837],[-51.10085,-23.28778],[-51.09938,-23.28664],[-51.09632,-23.27791],[-51.10285,-23.27302],[-51.10836,-23.27034],[-51.1131,-23.2684],[-51.1316,-23.26534],[-51.13188,-23.26201],[-51.13173,-23.25506],[-51.1329,-23.25468],[-51.13296,-23.25075],[-51.13474,-23.25127],[-51.13534,-23.25133],[-51.13517,-23.24359],[-51.13535,-23.24118],[-51.13752,-23.24219],[-51.13885,-23.2435],[-51.14109,-23.24521],[-51.14717,-23.24318],[-51.14761,-23.23828],[-51.14908,-23.23588],[-51.14977,-23.23681],[-51.15139,-23.23854],[-51.15289,-23.23884],[-51.15384,-23.23895],[-51.1582,-23.23814],[-51.16045,-23.23816],[-51.16035,-23.24658],[-51.15912,-23.24783],[-51.16131,-23.24777],[-51.16659,-23.24594],[-51.17193,-23.24582],[-51.17205,-23.24956],[-51.17424,-23.2484],[-51.17514,-23.24932],[-51.17686,-23.24816],[-51.17947,-23.25169],[-51.18135,-23.25381],[-51.18274,-23.25363],[-51.18379,-23.25326],[-51.18496,-23.2533],[-51.18627,-23.25215],[-51.18665,-23.24748],[-51.19118,-23.24914],[-51.19142,-23.25286],[-51.19369,-23.25278],[-51.19384,-23.26074],[-51.20097,-23.26055],[-51.20127,-23.2426],[-51.20994,-23.24278],[-51.2109,-23.26988],[-51.21969,-23.27222],[-51.22597,-23.27453],[-51.22934,-23.2786],[-51.23452,-23.2816],[-51.23498,-23.28325],[-51.23507,-23.28544],[-51.23371,-23.2859],[-51.23216,-23.28802],[-51.2287,-23.29229],[-51.2274,-23.2946],[-51.22679,-23.29548],[-51.2256,-23.29657],[-51.22393,-23.29721],[-51.22048,-23.30073],[-51.21864,-23.3013],[-51.21668,-23.30212],[-51.21424,-23.30441],[-51.21097,-23.30697],[-51.22328,-23.3183],[-51.22439,-23.31459],[-51.22521,-23.31289],[-51.22512,-23.31258],[-51.22521,-23.31251],[-51.22553,-23.31253],[-51.22595,-23.31239],[-51.22617,-23.31183],[-51.22936,-23.31489],[-51.22802,-23.31661],[-51.22789,-23.31902],[-51.22767,-23.32023],[-51.22723,-23.32151],[-51.22739,-23.32223],[-51.22725,-23.32285],[-51.23033,-23.32558],[-51.23046,-23.32671],[-51.22954,-23.32789],[-51.22916,-23.3305],[-51.22929,-23.33178],[-51.22681,-23.33447],[-51.22602,-23.33657],[-51.22473,-23.33839],[-51.2221,-23.34023],[-51.22257,-23.34196],[-51.22381,-23.34339],[-51.22384,-23.34531],[-51.22441,-23.347],[-51.22454,-23.34829],[-51.22404,-23.34968],[-51.22351,-23.35011],[-51.22382,-23.35077],[-51.22305,-23.35174],[-51.2226,-23.35296],[-51.22587,-23.35481],[-51.2265,-23.36706],[-51.22354,-23.36915],[-51.22367,-23.37968],[-51.22038,-23.38163],[-51.21647,-23.3817],[-51.21416,-23.37995],[-51.20928,-23.37395],[-51.20738,-23.36814],[-51.20629,-23.36723],[-51.20472,-23.36627],[-51.19823,-23.36668],[-51.19297,-23.36651],[-51.18986,-23.36544],[-51.18806,-23.36464],[-51.18718,-23.36453],[-51.1858,-23.36374],[-51.18304,-23.36359],[-51.18071,-23.36376],[-51.17907,-23.36158],[-51.17764,-23.35836],[-51.16684,-23.35626],[-51.16614,-23.35854],[-51.16476,-23.36039],[-51.16077,-23.35922],[-51.15983,-23.3666],[-51.16204,-23.36861],[-51.16276,-23.37416],[-51.15845,-23.3758],[-51.15505,-23.37631],[-51.15396,-23.37903],[-51.15299,-23.38105],[-51.15119,-23.38208],[-51.14917,-23.38251],[-51.14722,-23.38216],[-51.14518,-23.38259],[-51.1441,-23.38376],[-51.14512,-23.38808],[-51.1418,-23.3894],[-51.14031,-23.3888],[-51.14068,-23.39161],[-51.14127,-23.39354],[-51.14094,-23.39443],[-51.14046,-23.39536],[-51.13939,-23.3951],[-51.13739,-23.39315],[-51.13609,-23.3898],[-51.13429,-23.38976],[-51.13216,-23.39007],[-51.13172,-23.39286],[-51.12259,-23.38864],[-51.12228,-23.39166],[-51.11883,-23.39317],[-51.11568,-23.39335],[-51.10903,-23.39275]],[[-51.13829,-23.41601],[-51.13331,-23.41867],[-51.13209,-23.41644],[-51.13002,-23.41829],[-51.12869,-23.41901],[-51.12824,-23.42103],[-51.12696,-23.42186],[-51.12533,-23.42269],[-51.12445,-23.42097],[-51.12151,-23.42411],[-51.12063,-23.42327],[-51.11971,-23.42312],[-51.11977,-23.42157],[-51.1188,-23.42155],[-51.11643,-23.42084],[-51.11943,-23.41917],[-51.11787,-23.41678],[-51.11655,-23.41731],[-51.1157,-23.4157],[-51.11512,-23.41309],[-51.11908,-23.41111],[-51.1196,-23.4117],[-51.12052,-23.41489],[-51.12148,-23.41714],[-51.12309,-23.41863],[-51.12755,-23.41654],[-51.12803,-23.4174],[-51.1312,-23.41557],[-51.1308,-23.41477],[-51.13279,-23.41264],[-51.13522,-23.41106],[-51.13586,-23.41096],[-51.13682,-23.41119],[-51.13721,-23.41158],[-51.1373,-23.41324],[-51.13743,-23.41471],[-51.13829,-23.41601]],[[-51.18929,-23.61469],[-51.18869,-23.61385],[-51.18818,-23.61339],[-51.18731,-23.61302],[-51.18629,-23.61314],[-51.18402,-23.61396],[-51.18349,-23.61397],[-51.18183,-23.61284],[-51.1814,-23.61344],[-51.18063,-23.61314],[-51.18001,-23.61409],[-51.17866,-23.61329],[-51.18065,-23.6106],[-51.17972,-23.61018],[-51.18062,-23.60849],[-51.18212,-23.6085],[-51.18261,-23.60775],[-51.1832,-23.60804],[-51.18415,-23.60628],[-51.18511,-23.60666],[-51.18649,-23.6047],[-51.18902,-23.6061],[-51.18821,-23.60742],[-51.18919,-23.60802],[-51.1889,-23.60953],[-51.18962,-23.60993],[-51.19119,-23.61119],[-51.19015,-23.61245],[-51.19054,-23.61276],[-51.19029,-23.61378],[-51.18929,-23.61469]],[[-51.08006,-23.52984],[-51.07962,-23.52205],[-51.08468,-23.52194],[-51.08582,-23.52404],[-51.08589,-23.52704],[-51.08579,-23.52777],[-51.0853,-23.52806],[-51.08514,-23.52857],[-51.08512,-23.52982],[-51.08471,-23.53024],[-51.08343,-23.53024],[-51.0833,-23.52978],[-51.08006,-23.52984]]],terms_url:"http://siglon.londrina.pr.gov.br",terms_text:"Prefeitura do Londrinas, PR"},{id:"LPI_NSW_Administrative_Boundaries_County",name:"LPI NSW Administrative Boundaries County",type:"wms",template:"https://maps.six.nsw.gov.au/arcgis/services/public/NSW_Administrative_Boundaries/MapServer/WMSServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&LAYERS=4&STYLES=&FORMAT=image/png32&DPI=96&MAP_RESOLUTION=96&FORMAT_OPTIONS=dpi:96&TRANSPARENT=TRUE",projection:"EPSG:3857",zoomExtent:[1,21],polygon:[[[159.00339,-31.48767],[159.03789,-31.70558],[159.31098,-31.85952],[159.37278,-31.77892],[159.17443,-31.4374],[159.00339,-31.48767]],[[140.99865,-28.99893],[148.9452,-28.99487],[149.48562,-28.5615],[150.29914,-28.53373],[151.0954,-28.71792],[151.39436,-28.97978],[151.98941,-28.73557],[151.92904,-28.49836],[152.49246,-28.2353],[153.57907,-28.14156],[153.69692,-28.64983],[153.25847,-30.97354],[152.75437,-32.50849],[151.90879,-33.05535],[151.25834,-34.38081],[151.01442,-35.11568],[150.46154,-36.1203],[150.41275,-36.61786],[149.97847,-37.507],[148.20135,-36.80566],[148.07918,-36.81716],[147.88542,-36.09019],[147.69029,-36.04418],[146.82844,-36.18868],[145.23484,-35.98499],[144.84457,-36.21492],[144.51935,-36.1296],[143.20218,-35.13174],[142.47856,-34.81194],[140.9937,-34.07017],[141.0026,-34.01974],[140.99865,-28.99893]]],terms_url:"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Land and Property Information 2019",icon:"http://spatialservices.finance.nsw.gov.au/__data/assets/file/0010/210520/favicon.ico",overlay:true},{id:"LPI_NSW_Administrative_Boundaries_LGA",name:"LPI NSW Administrative Boundaries LGA",type:"wms",template:"https://maps.six.nsw.gov.au/arcgis/services/public/NSW_Administrative_Boundaries/MapServer/WMSServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&LAYERS=6&STYLES=&FORMAT=image/png32&DPI=96&MAP_RESOLUTION=96&FORMAT_OPTIONS=dpi:96&TRANSPARENT=TRUE",projection:"EPSG:3857",zoomExtent:[1,21],polygon:[[[159.00339,-31.48767],[159.03789,-31.70558],[159.31098,-31.85952],[159.37278,-31.77892],[159.17443,-31.4374],[159.00339,-31.48767]],[[140.99865,-28.99893],[148.9452,-28.99487],[149.48562,-28.5615],[150.29914,-28.53373],[151.0954,-28.71792],[151.39436,-28.97978],[151.98941,-28.73557],[151.92904,-28.49836],[152.49246,-28.2353],[153.57907,-28.14156],[153.69692,-28.64983],[153.25847,-30.97354],[152.75437,-32.50849],[151.90879,-33.05535],[151.25834,-34.38081],[151.01442,-35.11568],[150.46154,-36.1203],[150.41275,-36.61786],[149.97847,-37.507],[148.20135,-36.80566],[148.07918,-36.81716],[147.88542,-36.09019],[147.69029,-36.04418],[146.82844,-36.18868],[145.23484,-35.98499],[144.84457,-36.21492],[144.51935,-36.1296],[143.20218,-35.13174],[142.47856,-34.81194],[140.9937,-34.07017],[141.0026,-34.01974],[140.99865,-28.99893]]],terms_url:"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Land and Property Information 2019",icon:"http://spatialservices.finance.nsw.gov.au/__data/assets/file/0010/210520/favicon.ico",overlay:true},{id:"LPI_NSW_Administrative_Boundaries_NPWS_Reserve",name:"LPI NSW Administrative Boundaries NPWS Reserve",type:"wms",template:"https://maps.six.nsw.gov.au/arcgis/services/public/NSW_Administrative_Boundaries/MapServer/WMSServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&LAYERS=1&STYLES=&FORMAT=image/png32&DPI=96&MAP_RESOLUTION=96&FORMAT_OPTIONS=dpi:96&TRANSPARENT=TRUE",projection:"EPSG:3857",zoomExtent:[1,21],polygon:[[[159.00339,-31.48767],[159.03789,-31.70558],[159.31098,-31.85952],[159.37278,-31.77892],[159.17443,-31.4374],[159.00339,-31.48767]],[[140.99865,-28.99893],[148.9452,-28.99487],[149.48562,-28.5615],[150.29914,-28.53373],[151.0954,-28.71792],[151.39436,-28.97978],[151.98941,-28.73557],[151.92904,-28.49836],[152.49246,-28.2353],[153.57907,-28.14156],[153.69692,-28.64983],[153.25847,-30.97354],[152.75437,-32.50849],[151.90879,-33.05535],[151.25834,-34.38081],[151.01442,-35.11568],[150.46154,-36.1203],[150.41275,-36.61786],[149.97847,-37.507],[148.20135,-36.80566],[148.07918,-36.81716],[147.88542,-36.09019],[147.69029,-36.04418],[146.82844,-36.18868],[145.23484,-35.98499],[144.84457,-36.21492],[144.51935,-36.1296],[143.20218,-35.13174],[142.47856,-34.81194],[140.9937,-34.07017],[141.0026,-34.01974],[140.99865,-28.99893]]],terms_url:"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Land and Property Information 2019",icon:"http://spatialservices.finance.nsw.gov.au/__data/assets/file/0010/210520/favicon.ico",overlay:true},{id:"LPI_NSW_Administrative_Boundaries_Parish",name:"LPI NSW Administrative Boundaries Parish",type:"wms",template:"https://maps.six.nsw.gov.au/arcgis/services/public/NSW_Administrative_Boundaries/MapServer/WMSServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&LAYERS=3&STYLES=&FORMAT=image/png32&DPI=96&MAP_RESOLUTION=96&FORMAT_OPTIONS=dpi:96&TRANSPARENT=TRUE",projection:"EPSG:3857",zoomExtent:[1,21],polygon:[[[159.00339,-31.48767],[159.03789,-31.70558],[159.31098,-31.85952],[159.37278,-31.77892],[159.17443,-31.4374],[159.00339,-31.48767]],[[140.99865,-28.99893],[148.9452,-28.99487],[149.48562,-28.5615],[150.29914,-28.53373],[151.0954,-28.71792],[151.39436,-28.97978],[151.98941,-28.73557],[151.92904,-28.49836],[152.49246,-28.2353],[153.57907,-28.14156],[153.69692,-28.64983],[153.25847,-30.97354],[152.75437,-32.50849],[151.90879,-33.05535],[151.25834,-34.38081],[151.01442,-35.11568],[150.46154,-36.1203],[150.41275,-36.61786],[149.97847,-37.507],[148.20135,-36.80566],[148.07918,-36.81716],[147.88542,-36.09019],[147.69029,-36.04418],[146.82844,-36.18868],[145.23484,-35.98499],[144.84457,-36.21492],[144.51935,-36.1296],[143.20218,-35.13174],[142.47856,-34.81194],[140.9937,-34.07017],[141.0026,-34.01974],[140.99865,-28.99893]]],terms_url:"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Land and Property Information 2019",icon:"http://spatialservices.finance.nsw.gov.au/__data/assets/file/0010/210520/favicon.ico",overlay:true},{id:"LPI_NSW_Administrative_Boundaries_StateForest",name:"LPI NSW Administrative Boundaries State Forest",type:"wms",template:"https://maps.six.nsw.gov.au/arcgis/services/public/NSW_Administrative_Boundaries/MapServer/WMSServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&LAYERS=2&STYLES=&FORMAT=image/png32&DPI=96&MAP_RESOLUTION=96&FORMAT_OPTIONS=dpi:96&TRANSPARENT=TRUE",projection:"EPSG:3857",zoomExtent:[1,21],polygon:[[[159.00339,-31.48767],[159.03789,-31.70558],[159.31098,-31.85952],[159.37278,-31.77892],[159.17443,-31.4374],[159.00339,-31.48767]],[[140.99865,-28.99893],[148.9452,-28.99487],[149.48562,-28.5615],[150.29914,-28.53373],[151.0954,-28.71792],[151.39436,-28.97978],[151.98941,-28.73557],[151.92904,-28.49836],[152.49246,-28.2353],[153.57907,-28.14156],[153.69692,-28.64983],[153.25847,-30.97354],[152.75437,-32.50849],[151.90879,-33.05535],[151.25834,-34.38081],[151.01442,-35.11568],[150.46154,-36.1203],[150.41275,-36.61786],[149.97847,-37.507],[148.20135,-36.80566],[148.07918,-36.81716],[147.88542,-36.09019],[147.69029,-36.04418],[146.82844,-36.18868],[145.23484,-35.98499],[144.84457,-36.21492],[144.51935,-36.1296],[143.20218,-35.13174],[142.47856,-34.81194],[140.9937,-34.07017],[141.0026,-34.01974],[140.99865,-28.99893]]],terms_url:"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Land and Property Information 2019",icon:"http://spatialservices.finance.nsw.gov.au/__data/assets/file/0010/210520/favicon.ico",overlay:true},{id:"LPI_NSW_Administrative_Boundaries_Suburb",name:"LPI NSW Administrative Boundaries Suburb",type:"wms",template:"https://maps.six.nsw.gov.au/arcgis/services/public/NSW_Administrative_Boundaries/MapServer/WMSServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&LAYERS=7&STYLES=&FORMAT=image/png32&DPI=96&MAP_RESOLUTION=96&FORMAT_OPTIONS=dpi:96&TRANSPARENT=TRUE",projection:"EPSG:3857",zoomExtent:[1,21],polygon:[[[159.00339,-31.48767],[159.03789,-31.70558],[159.31098,-31.85952],[159.37278,-31.77892],[159.17443,-31.4374],[159.00339,-31.48767]],[[140.99865,-28.99893],[148.9452,-28.99487],[149.48562,-28.5615],[150.29914,-28.53373],[151.0954,-28.71792],[151.39436,-28.97978],[151.98941,-28.73557],[151.92904,-28.49836],[152.49246,-28.2353],[153.57907,-28.14156],[153.69692,-28.64983],[153.25847,-30.97354],[152.75437,-32.50849],[151.90879,-33.05535],[151.25834,-34.38081],[151.01442,-35.11568],[150.46154,-36.1203],[150.41275,-36.61786],[149.97847,-37.507],[148.20135,-36.80566],[148.07918,-36.81716],[147.88542,-36.09019],[147.69029,-36.04418],[146.82844,-36.18868],[145.23484,-35.98499],[144.84457,-36.21492],[144.51935,-36.1296],[143.20218,-35.13174],[142.47856,-34.81194],[140.9937,-34.07017],[141.0026,-34.01974],[140.99865,-28.99893]]],terms_url:"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Land and Property Information 2019",icon:"http://spatialservices.finance.nsw.gov.au/__data/assets/file/0010/210520/favicon.ico",overlay:true},{id:"NSW_LPI_BaseMap",name:"LPI NSW Base Map",type:"tms",template:"https://maps.six.nsw.gov.au/arcgis/rest/services/public/NSW_Base_Map/MapServer/tile/{zoom}/{y}/{x}",zoomExtent:[1,19],polygon:[[[140.99486,-28.95297],[148.96114,-28.89977],[148.98701,-28.48623],[151.01361,-28.47865],[151.10847,-28.70329],[151.87599,-28.68312],[151.93348,-28.40788],[152.25544,-28.23327],[153.06608,-28.21047],[153.14082,-28.1091],[153.47351,-28.11648],[153.35765,-27.69361],[159.49383,-27.69925],[159.4857,-37.84741],[149.52569,-37.82815],[149.91596,-37.487],[148.04859,-36.81317],[147.9681,-36.15679],[146.71477,-36.28666],[145.30046,-36.15679],[144.53007,-36.14751],[142.8398,-35.02543],[142.35686,-34.78025],[141.97741,-34.40162],[140.99503,-34.13718],[140.99486,-28.95297]]],terms_url:"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Land and Property Information 2019",icon:"http://spatialservices.finance.nsw.gov.au/__data/assets/file/0010/210520/favicon.ico"},{id:"NSW_LPI_Imagery",name:"LPI NSW Imagery",type:"tms",template:"https://maps.six.nsw.gov.au/arcgis/rest/services/public/NSW_Imagery/MapServer/tile/{zoom}/{y}/{x}",zoomExtent:[1,21],polygon:[[[140.98687,-28.98878],[148.99515,-28.97275],[148.99667,-28.49151],[151.0029,-28.49307],[151.0029,-28.72617],[151.49151,-28.73239],[151.49187,-28.71553],[151.92282,-28.71964],[151.92516,-28.48971],[151.99559,-28.48987],[151.99899,-28.11927],[152.49676,-28.12209],[152.49682,-28.11464],[153.00446,-28.11544],[153.00446,-28.1204],[153.50386,-28.11934],[153.50393,-28.12271],[153.59194,-28.12236],[153.59266,-28.17769],[153.61112,-28.17579],[153.61139,-28.18252],[153.74268,-28.21621],[153.77873,-28.71091],[152.6238,-32.58772],[152.3124,-32.63288],[151.41419,-33.57904],[150.89299,-35.26487],[150.46207,-35.77773],[150.01565,-37.51036],[149.99181,-37.51268],[149.51978,-37.51307],[149.51996,-37.52169],[149.4463,-37.53537],[149.06334,-37.5358],[148.98366,-37.52176],[148.98169,-37.5192],[148.98638,-37.2585],[148.48754,-37.26585],[148.48248,-37.00927],[147.99439,-37.01434],[147.98829,-36.53322],[147.95297,-36.52607],[147.94865,-36.0686],[147.5035,-36.07168],[147.50477,-36.2651],[146.492,-36.26613],[146.49225,-36.2565],[145.99298,-36.25343],[145.99659,-36.01881],[145.98316,-36.01871],[145.96245,-36.0219],[145.94624,-36.01209],[145.94543,-36.00603],[145.50415,-36.00136],[145.50379,-36.01091],[145.0072,-36.00362],[145.00354,-36.15204],[144.48608,-36.14231],[144.48741,-36.01375],[143.98747,-36.00241],[143.99329,-35.57238],[143.49717,-35.58371],[143.4918,-35.40656],[143.46134,-35.36749],[143.45856,-35.35559],[143.48978,-35.33965],[143.48955,-35.33221],[143.4317,-35.25706],[143.25055,-35.26066],[143.24384,-35.01327],[142.99333,-35.01772],[142.99198,-34.79619],[142.49714,-34.80323],[142.49732,-34.80076],[142.42114,-34.80176],[142.42092,-34.78383],[142.23309,-34.78592],[142.23077,-34.78075],[142.227,-34.50613],[141.99753,-34.50837],[141.9946,-34.25267],[141.49823,-34.25569],[141.49817,-34.25228],[140.99454,-34.25284],[140.98687,-28.98878]],[[159.22678,-31.74407],[159.26398,-31.74399],[159.28989,-31.77428],[159.28993,-31.79393],[159.26157,-31.79395],[159.22682,-31.75483],[159.22678,-31.74407]],[[159.03784,-31.49819],[159.04448,-31.5006],[159.04619,-31.49734],[159.04888,-31.49829],[159.04884,-31.48423],[159.06882,-31.48423],[159.06991,-31.482],[159.08317,-31.48203],[159.08203,-31.48434],[159.08205,-31.49567],[159.08564,-31.49703],[159.08383,-31.50058],[159.09007,-31.5026],[159.08682,-31.50859],[159.09433,-31.51136],[159.09174,-31.51585],[159.09537,-31.51724],[159.10276,-31.52611],[159.1161,-31.53006],[159.11422,-31.5342],[159.11875,-31.53417],[159.1193,-31.54888],[159.12618,-31.55796],[159.11841,-31.56323],[159.11553,-31.55983],[159.1115,-31.55983],[159.11154,-31.60158],[159.08954,-31.6016],[159.08626,-31.60845],[159.07954,-31.60611],[159.07714,-31.61149],[159.05943,-31.61155],[159.05296,-31.60369],[159.05893,-31.59087],[159.05891,-31.57897],[159.05541,-31.57773],[159.05735,-31.57387],[159.05585,-31.57333],[159.05038,-31.57335],[159.05035,-31.56329],[159.0463,-31.5619],[159.04847,-31.55793],[159.04237,-31.55601],[159.04533,-31.55038],[159.03783,-31.54763],[159.03802,-31.54723],[159.03487,-31.54724],[159.03487,-31.54383],[159.03244,-31.54297],[159.03461,-31.53808],[159.02754,-31.53554],[159.02964,-31.53159],[159.02305,-31.52935],[159.03784,-31.49819]]],terms_url:"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Land and Property Information 2019",best:true,icon:"http://spatialservices.finance.nsw.gov.au/__data/assets/file/0010/210520/favicon.ico"},{id:"NSW_LPI_Imagery_Dates",name:"LPI NSW Imagery Dates",type:"wms",template:"https://maps.six.nsw.gov.au/arcgis/services/public/NSW_Imagery_Dates/MapServer/WMSServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&LAYERS=0&STYLES=&FORMAT=image/png32&DPI=96&MAP_RESOLUTION=96&FORMAT_OPTIONS=dpi:96&TRANSPARENT=TRUE",projection:"EPSG:3857",zoomExtent:[0,21],polygon:[[[140.98687,-28.98878],[148.99515,-28.97275],[148.99667,-28.49151],[151.0029,-28.49307],[151.0029,-28.72617],[151.49151,-28.73239],[151.49187,-28.71553],[151.92282,-28.71964],[151.92516,-28.48971],[151.99559,-28.48987],[151.99899,-28.11927],[152.49676,-28.12209],[152.49682,-28.11464],[153.00446,-28.11544],[153.00446,-28.1204],[153.50386,-28.11934],[153.50393,-28.12271],[153.59194,-28.12236],[153.59266,-28.17769],[153.61112,-28.17579],[153.61139,-28.18252],[153.74268,-28.21621],[153.77873,-28.71091],[152.6238,-32.58772],[152.3124,-32.63288],[151.41419,-33.57904],[150.89299,-35.26487],[150.46207,-35.77773],[150.01565,-37.51036],[149.99181,-37.51268],[149.51978,-37.51307],[149.51996,-37.52169],[149.4463,-37.53537],[149.06334,-37.5358],[148.98366,-37.52176],[148.98169,-37.5192],[148.98638,-37.2585],[148.48754,-37.26585],[148.48248,-37.00927],[147.99439,-37.01434],[147.98829,-36.53322],[147.95297,-36.52607],[147.94865,-36.0686],[147.5035,-36.07168],[147.50477,-36.2651],[146.492,-36.26613],[146.49225,-36.2565],[145.99298,-36.25343],[145.99659,-36.01881],[145.98316,-36.01871],[145.96245,-36.0219],[145.94624,-36.01209],[145.94543,-36.00603],[145.50415,-36.00136],[145.50379,-36.01091],[145.0072,-36.00362],[145.00354,-36.15204],[144.48608,-36.14231],[144.48741,-36.01375],[143.98747,-36.00241],[143.99329,-35.57238],[143.49717,-35.58371],[143.4918,-35.40656],[143.46134,-35.36749],[143.45856,-35.35559],[143.48978,-35.33965],[143.48955,-35.33221],[143.4317,-35.25706],[143.25055,-35.26066],[143.24384,-35.01327],[142.99333,-35.01772],[142.99198,-34.79619],[142.49714,-34.80323],[142.49732,-34.80076],[142.42114,-34.80176],[142.42092,-34.78383],[142.23309,-34.78592],[142.23077,-34.78075],[142.227,-34.50613],[141.99753,-34.50837],[141.9946,-34.25267],[141.49823,-34.25569],[141.49817,-34.25228],[140.99454,-34.25284],[140.98687,-28.98878]],[[159.22678,-31.74407],[159.26398,-31.74399],[159.28989,-31.77428],[159.28993,-31.79393],[159.26157,-31.79395],[159.22682,-31.75483],[159.22678,-31.74407]],[[159.03784,-31.49819],[159.04448,-31.5006],[159.04619,-31.49734],[159.04888,-31.49829],[159.04884,-31.48423],[159.06882,-31.48423],[159.06991,-31.482],[159.08317,-31.48203],[159.08203,-31.48434],[159.08205,-31.49567],[159.08564,-31.49703],[159.08383,-31.50058],[159.09007,-31.5026],[159.08682,-31.50859],[159.09433,-31.51136],[159.09174,-31.51585],[159.09537,-31.51724],[159.10276,-31.52611],[159.1161,-31.53006],[159.11422,-31.5342],[159.11875,-31.53417],[159.1193,-31.54888],[159.12618,-31.55796],[159.11841,-31.56323],[159.11553,-31.55983],[159.1115,-31.55983],[159.11154,-31.60158],[159.08954,-31.6016],[159.08626,-31.60845],[159.07954,-31.60611],[159.07714,-31.61149],[159.05943,-31.61155],[159.05296,-31.60369],[159.05893,-31.59087],[159.05891,-31.57897],[159.05541,-31.57773],[159.05735,-31.57387],[159.05585,-31.57333],[159.05038,-31.57335],[159.05035,-31.56329],[159.0463,-31.5619],[159.04847,-31.55793],[159.04237,-31.55601],[159.04533,-31.55038],[159.03783,-31.54763],[159.03802,-31.54723],[159.03487,-31.54724],[159.03487,-31.54383],[159.03244,-31.54297],[159.03461,-31.53808],[159.02754,-31.53554],[159.02964,-31.53159],[159.02305,-31.52935],[159.03784,-31.49819]]],terms_url:"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Land and Property Information 2019",icon:"http://spatialservices.finance.nsw.gov.au/__data/assets/file/0010/210520/favicon.ico",overlay:true},{id:"NSW_LPI_TopographicMap",name:"LPI NSW Topographic Map",type:"tms",template:"https://maps.six.nsw.gov.au/arcgis/rest/services/public/NSW_Topo_Map/MapServer/tile/{zoom}/{y}/{x}",zoomExtent:[1,16],polygon:[[[140.99884,-28.99924],[148.95024,-28.99937],[148.94988,-28.96653],[148.99983,-28.96653],[149.00009,-28.81658],[149.10007,-28.81658],[149.0997,-28.74885],[148.99985,-28.74974],[148.99982,-28.50003],[151.00005,-28.50052],[151.00059,-28.73258],[151.02395,-28.73274],[151.02413,-28.74188],[151.03293,-28.74188],[151.03383,-28.75054],[151.99998,-28.74953],[151.99998,-28.71645],[152.0334,-28.71661],[152.03322,-28.6832],[152.00007,-28.68335],[151.99988,-28.64163],[151.98299,-28.64139],[151.98317,-28.62491],[151.93313,-28.62475],[151.93341,-28.50007],[151.99989,-28.50023],[151.99986,-28.37496],[152.24997,-28.37507],[152.24994,-28.25001],[152.99972,-28.24986],[152.9999,-28.28324],[153.1165,-28.2834],[153.11659,-28.24986],[153.16663,-28.25001],[153.16672,-28.23316],[153.24999,-28.23324],[153.25003,-28.12497],[153.62496,-28.12508],[153.62484,-28.49991],[153.7498,-28.49999],[153.74959,-28.7498],[153.62481,-28.75011],[153.62497,-28.99993],[153.49977,-29.00006],[153.49984,-29.49951],[153.3748,-29.50005],[153.37541,-29.87503],[153.49991,-29.87514],[153.49991,-30.00009],[153.24989,-29.99976],[153.25002,-30.19177],[153.27482,-30.19162],[153.27482,-30.21685],[153.21661,-30.21661],[153.21661,-30.25006],[153.25002,-30.25006],[153.24975,-30.37519],[153.12436,-30.37497],[153.12465,-30.62504],[153.03317,-30.62505],[153.03339,-30.87508],[153.12492,-30.87503],[153.12493,-31.12505],[153.00824,-31.12497],[153.00829,-31.24998],[153,-31.25],[152.99994,-31.62499],[152.87494,-31.62505],[152.87496,-31.74995],[152.78329,-31.75],[152.7832,-31.87486],[152.74991,-31.87501],[152.75004,-32.00002],[152.6249,-31.99994],[152.62491,-32.5],[152.49998,-32.49996],[152.50003,-32.56664],[152.41667,-32.56634],[152.41676,-32.625],[152.34985,-32.62499],[152.34985,-32.63323],[152.28308,-32.63322],[152.28326,-32.62498],[152.24948,-32.62498],[152.24981,-32.87491],[151.87457,-32.87504],[151.87485,-33.00001],[151.74977,-33.00015],[151.75047,-33.25004],[151.62524,-33.24974],[151.62508,-33.37516],[151.49958,-33.37514],[151.50031,-33.62494],[151.37415,-33.62437],[151.37279,-34.00196],[151.24778,-34.00112],[151.24778,-34.24931],[150.99573,-34.25015],[151.00081,-34.62483],[150.87174,-34.6265],[150.87276,-35.12427],[150.76706,-35.12344],[150.76909,-35.24638],[150.62579,-35.2497],[150.62803,-35.37515],[150.49997,-35.37515],[150.49591,-35.6275],[150.37192,-35.62503],[150.37497,-35.7538],[150.26724,-35.75132],[150.2652,-35.87412],[150.24792,-35.87083],[150.24589,-36.37488],[150.12292,-36.37488],[150.12597,-36.62243],[150.02535,-36.62407],[150.0284,-36.74713],[149.99283,-36.74958],[150.00401,-37.12245],[150.05889,-37.12731],[150.05686,-37.37809],[149.99791,-37.37324],[149.99994,-37.48301],[149.98774,-37.48462],[149.98571,-37.508],[148.06846,-36.80624],[147.99306,-36.138],[147.81483,-36.00556],[147.38939,-36.01137],[147.38221,-36.13103],[146.99725,-36.12755],[146.98863,-36.25283],[146.49564,-36.24471],[146.50426,-36.12639],[145.00118,-36.00795],[145.01541,-36.25421],[144.50725,-36.24765],[144.49912,-36.0211],[143.99654,-35.98105],[143.33826,-35.23318],[142.40976,-34.76694],[142.03614,-34.37588],[140.99652,-34.13858],[140.99884,-28.99924]]],terms_url:"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Land and Property Information 2019",icon:"http://spatialservices.finance.nsw.gov.au/__data/assets/file/0010/210520/favicon.ico"},{id:"orthophoto_lyon_2012",name:"Lyon Orthophoto 2012-03 10cm",type:"wms",template:"https://download.data.grandlyon.com/wms/grandlyon?language=fre&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=1830_5150_10cm_CC46,1830_5155_10cm_CC46,1830_5160_10cm_CC46,1830_5165_10cm_CC46,1830_5170_10cm_CC46,1830_5175_10cm_CC46,1830_5180_10cm_CC46,1830_5185_10cm_CC46,1830_5190_10cm_CC46,1835_5150_10cm_CC46,1835_5155_10cm_CC46,1835_5160_10cm_CC46,1835_5165_10cm_CC46,1835_5170_10cm_CC46,1835_5175_10cm_CC46,1835_5180_10cm_CC46,1835_5185_10cm_CC46,1835_5190_10cm_CC46,1840_5150_10cm_CC46,1840_5155_10cm_CC46,1840_5160_10cm_CC46,1840_5165_10cm_CC46,1840_5170_10cm_CC46,1840_5175_10cm_CC46,1840_5180_10cm_CC46,1840_5185_10cm_CC46,1840_5190_10cm_CC46,1845_5150_10cm_CC46,1845_5155_10cm_CC46,1845_5160_10cm_CC46,1845_5165_10cm_CC46,1845_5170_10cm_CC46,1845_5175_10cm_CC46,1845_5180_10cm_CC46,1845_5185_10cm_CC46,1845_5190_10cm_CC46,1850_5155_10cm_CC46,1850_5160_10cm_CC46,1850_5165_10cm_CC46,1850_5170_10cm_CC46,1850_5175_10cm_CC46,1850_5180_10cm_CC46,1850_5185_10cm_CC46,1855_5155_10cm_CC46,1855_5165_10cm_CC46,1855_5170_10cm_CC46,1855_5175_10cm_CC46,1855_5180_10cm_CC46,1855_5185_10cm_CC46,1860_5155_10cm_CC46,1860_5160_10cm_CC46,1860_5165_10cm_CC46,1860_5170_10cm_CC46,1860_5175_10cm_CC46,1860_5180_10cm_CC46,1860_5185_10cm_CC46,1865_5155_10cm_CC46,1865_5160_10cm_CC46,1865_5165_10cm_CC46,1865_5170_10cm_CC46&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2012-03-01T00:00:00.000Z",startDate:"2012-03-01T00:00:00.000Z",polygon:[[[4.69049,45.54652],[4.83131,45.54652],[4.83131,45.57131],[4.88344,45.57131],[4.88344,45.59745],[5.16622,45.59745],[5.16622,45.74533],[5.10793,45.74533],[5.10793,45.88145],[4.90698,45.88145],[4.90698,45.92107],[4.84377,45.92107],[4.84377,45.94011],[4.71543,45.94011],[4.71543,45.87018],[4.67458,45.87018],[4.67458,45.7178],[4.69567,45.7178],[4.69049,45.54652]]],terms_url:"https://data.grandlyon.com/imagerie/orthophotographie-2012-du-grand-lyon",terms_text:"Grand Lyon Smart Data DSIT"},{id:"orthophoto_lyon",name:"Lyon Orthophoto 8cm",type:"tms",template:"http://wms.openstreetmap.fr/tms/1.0.0/lyon/{zoom}/{x}/{y}",endDate:"2018-01-01T00:00:00.000Z",startDate:"2015-05-01T00:00:00.000Z",zoomExtent:[2,22],polygon:[[[4.66489,45.54688],[4.88253,45.54348],[4.88435,45.59745],[5.16623,45.59242],[5.17217,45.74532],[5.10793,45.74653],[5.11305,45.88145],[4.90698,45.88508],[4.90822,45.92106],[4.84377,45.92212],[4.84497,45.9581],[4.67729,45.96069],[4.66489,45.54688]]],terms_url:"https://data.grandlyon.com/imagerie/orthophotographie-2015-du-grand-lyon/",terms_text:"Métropole de Lyon DINSI",best:true},{id:"MainRoadsWA_Road_Hierarchy",name:"Main Roads WA Road Hierarchy",type:"wms",template:"https://services.slip.wa.gov.au/public/services/SLIP_Public_Services/Transport/MapServer/WMSServer?LAYERS=8&TRANSPARENT=TRUE&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&FORMAT=image%2Fpng&SRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}",projection:"EPSG:3857",zoomExtent:[0,21],polygon:[[[129.00009,-31.68764],[128.99872,-14.58225],[127.08984,-12.29707],[124.76074,-12.98315],[121.24512,-15.70766],[119.0918,-17.60214],[115.53223,-18.85431],[112.41211,-20.46819],[111.24756,-22.83695],[111.00586,-25.62172],[111.64307,-29.66896],[111.68701,-32.3614],[112.14844,-34.47034],[113.35693,-36.10238],[116.98242,-36.70366],[119.44336,-36.94989],[122.27783,-36.61553],[125.99121,-35.40696],[127.59521,-34.57895],[128.86963,-33.59632],[129.00009,-31.68764]]],terms_url:"https://catalogue.data.wa.gov.au/dataset/clss-road-hierarchy",terms_text:"Main Roads Western Australia",overlay:true},{id:"mainzlatestaerialimagery",name:"Mainz latest aerial imagery",type:"wms",template:"https://gint.mainz.de/gint1-cgi/mapserv?map=/data/mapbender-int/umn-www/client/a62/luftbild.map&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Luftbild_f_mz_2018&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[17,22],polygon:[[[8.10355,49.865],[8.38356,49.865],[8.38356,50.0466],[8.10355,50.0466],[8.10355,49.865]]],terms_url:"https://www.mainz.de/vv/oe/100140100000035141.php#tab-infos",terms_text:"Vermessung und Geoinformation Mainz",icon:"https://www.mainz.de/configuration.inc.php.media/27432/Logo-72px.png"},{id:"major_isidoro",name:"Major Isidoro AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Major%20Isidoro&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.94048,-9.57588],[-36.94106,-9.48536],[-37.03215,-9.48606],[-37.03164,-9.57639],[-36.94048,-9.57588]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"Mapbox",name:"Mapbox Satellite",type:"tms",template:"https://{switch:a,b,c,d}.tiles.mapbox.com/v4/mapbox.satellite/{zoom}/{x}/{y}@2x.jpg?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcCIsImEiOiJjaml5MjVyb3MwMWV0M3hxYmUzdGdwbzE4In0.q548FjhsSJzvXsGlPsFxAQ",tileSize:512,zoomExtent:[0,22],terms_url:"https://www.mapbox.com/about/maps",terms_text:"Terms & Feedback","default":true,description:"Satellite and aerial imagery.",icon:"https://osmlab.github.io/editor-layer-index/sources/world/MapBoxSatellite.png"},{id:"Maps4BW-LGL_BW",name:"Maps4BW (LGL-BW, www.lgl-bw.de)",type:"wms",template:"https://owsproxy.lgl-bw.de/owsproxy/ows/WMS_Maps4BW?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=webatlasde&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[9.06954,49.57679],[9.10577,49.57952],[9.16079,49.58263],[9.24212,49.58402],[9.27192,49.63515],[9.30454,49.65561],[9.36753,49.65893],[9.38253,49.64341],[9.41191,49.66033],[9.39602,49.67143],[9.41828,49.69706],[9.40378,49.71957],[9.37769,49.70357],[9.35828,49.70334],[9.29438,49.73958],[9.31467,49.76859],[9.42435,49.79099],[9.50417,49.78962],[9.51808,49.78214],[9.65623,49.79286],[9.65317,49.73944],[9.63435,49.70076],[9.67054,49.69515],[9.67721,49.71846],[9.71079,49.72918],[9.8014,49.73429],[9.83728,49.70237],[9.87656,49.61362],[9.83362,49.55607],[9.84954,49.54793],[9.87463,49.5836],[9.91419,49.58955],[9.93066,49.56097],[9.92482,49.48951],[10.01787,49.48673],[10.03352,49.52978],[10.06372,49.55129],[10.09052,49.54218],[10.12792,49.51192],[10.11027,49.49272],[10.16753,49.38589],[10.12627,49.3809],[10.14385,49.32772],[10.16061,49.27043],[10.13569,49.26189],[10.14311,49.20387],[10.25161,49.15031],[10.26279,49.12959],[10.26869,49.05202],[10.36527,49.02557],[10.45894,48.93581],[10.46208,48.83947],[10.42886,48.74973],[10.46648,48.73627],[10.49761,48.68581],[10.45007,48.66277],[10.3553,48.65068],[10.32297,48.68241],[10.26028,48.67842],[10.32542,48.60763],[10.31448,48.52323],[10.17973,48.45977],[10.12892,48.45301],[10.10938,48.47445],[10.06355,48.45381],[10.03918,48.45125],[10.04492,48.43158],[10.0152,48.40323],[9.98709,48.38565],[9.97328,48.37944],[9.97549,48.36558],[9.99071,48.3734],[10.00265,48.3632],[9.99992,48.35572],[10.06698,48.28172],[10.08111,48.2253],[10.11306,48.12632],[10.13966,48.11307],[10.14695,48.07455],[10.13763,48.01938],[10.11725,47.9755],[10.11359,47.93422],[10.10709,47.86711],[10.14174,47.80956],[10.0732,47.78686],[10.11825,47.76126],[10.14213,47.70165],[10.13262,47.67678],[10.07445,47.63472],[10.06303,47.66923],[10.00359,47.67526],[9.95808,47.64376],[9.84481,47.67533],[9.83488,47.66042],[9.74926,47.60206],[9.70817,47.60007],[9.65788,47.60599],[9.64742,47.58931],[9.61389,47.57809],[9.56602,47.53274],[9.51199,47.53246],[9.25717,47.65752],[9.18684,47.65697],[9.17591,47.65379],[9.17028,47.65474],[9.15555,47.666],[9.1494,47.66713],[9.13947,47.66367],[9.02005,47.68616],[8.94127,47.65569],[8.89825,47.64821],[8.88263,47.65327],[8.87474,47.6545],[8.87235,47.66971],[8.84949,47.68089],[8.84993,47.70233],[8.81816,47.71242],[8.80108,47.72811],[8.77231,47.71606],[8.81295,47.6959],[8.79373,47.67216],[8.7533,47.68997],[8.72575,47.6917],[8.71002,47.68829],[8.68937,47.69318],[8.67046,47.68235],[8.65783,47.68883],[8.66161,47.71454],[8.70596,47.71584],[8.70932,47.73275],[8.73033,47.75527],[8.72003,47.76273],[8.68871,47.75314],[8.67898,47.78306],[8.64981,47.79435],[8.65592,47.76948],[8.63132,47.75749],[8.61918,47.76216],[8.61351,47.78451],[8.61686,47.79705],[8.568,47.79977],[8.57611,47.79015],[8.57847,47.78102],[8.56315,47.77654],[8.48889,47.76458],[8.45742,47.74126],[8.4623,47.72909],[8.44929,47.71663],[8.41471,47.69991],[8.4273,47.68562],[8.41061,47.6743],[8.46839,47.6568],[8.52474,47.64677],[8.5269,47.66373],[8.56441,47.67261],[8.57853,47.66373],[8.60454,47.6751],[8.63333,47.65212],[8.62386,47.63922],[8.60395,47.63193],[8.61281,47.61327],[8.57951,47.59306],[8.5602,47.59867],[8.56765,47.61442],[8.53394,47.62984],[8.51208,47.61641],[8.46581,47.60137],[8.46631,47.58666],[8.48985,47.59139],[8.5,47.58062],[8.43414,47.5629],[8.39882,47.57559],[8.38525,47.56408],[8.32701,47.56893],[8.29483,47.59077],[8.2948,47.60497],[8.26293,47.60823],[8.22435,47.60446],[8.18644,47.60508],[8.16904,47.59394],[8.13615,47.58246],[8.10503,47.56795],[8.09873,47.55933],[8.08261,47.55624],[8.07095,47.56299],[8.0274,47.54931],[7.94632,47.54209],[7.90966,47.54825],[7.90676,47.5603],[7.88681,47.58765],[7.83987,47.58122],[7.79648,47.55517],[7.69208,47.53137],[7.66583,47.53403],[7.63159,47.56044],[7.63879,47.56619],[7.68607,47.57205],[7.65278,47.59418],[7.62247,47.57767],[7.60473,47.57822],[7.58771,47.59015],[7.52156,47.65161],[7.50399,47.70235],[7.52096,47.77685],[7.55712,47.84839],[7.54946,47.8792],[7.57461,47.93028],[7.61318,47.96804],[7.6119,47.9871],[7.56124,48.03836],[7.57491,48.1258],[7.59534,48.15977],[7.63305,48.19717],[7.66275,48.22473],[7.68466,48.30305],[7.76346,48.49158],[7.80046,48.5126],[7.79958,48.5878],[7.83409,48.64439],[7.91211,48.68899],[7.96723,48.75716],[8.02069,48.78879],[8.04302,48.7956],[8.08647,48.81306],[8.13644,48.89782],[8.19706,48.96021],[8.28161,48.9949],[8.29967,49.02597],[8.31243,49.05996],[8.38654,49.23497],[8.46083,49.28407],[8.48783,49.29326],[8.47577,49.3079],[8.44839,49.31693],[8.45152,49.33135],[8.46288,49.3869],[8.49407,49.40186],[8.49762,49.41583],[8.50721,49.43414],[8.49834,49.44187],[8.47977,49.44391],[8.46414,49.44151],[8.44696,49.44516],[8.43947,49.45214],[8.44407,49.46085],[8.45992,49.46498],[8.46312,49.47135],[8.4554,49.48107],[8.44184,49.49297],[8.41194,49.55852],[8.42193,49.5843],[8.44117,49.59081],[8.45482,49.59157],[8.47738,49.5874],[8.56161,49.52237],[8.61486,49.54175],[8.59165,49.59179],[8.58706,49.61156],[8.65189,49.6209],[8.69494,49.62762],[8.70105,49.59869],[8.68726,49.57096],[8.72597,49.53085],[8.78493,49.51775],[8.81467,49.53187],[8.88863,49.51091],[8.90168,49.50363],[8.90315,49.486],[8.87995,49.46561],[8.83117,49.42147],[8.80845,49.40981],[8.82075,49.39647],[8.83009,49.41316],[8.85107,49.39663],[8.90247,49.44632],[8.93863,49.48179],[8.95154,49.50562],[8.98498,49.51153],[9.03553,49.50079],[9.05731,49.532],[9.10023,49.52728],[9.11009,49.51213],[9.12424,49.51722],[9.11286,49.53337],[9.08284,49.54211],[9.06694,49.56433],[9.06954,49.57679]]],terms_url:"https://www.lgl-bw.de/",terms_text:"Datengrundlage: LGL, www.lgl-bw.de"},{id:"mar_vermelho_al",name:"Mar Vermelho AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Mar%20Vermelho&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.34201,-9.49289],[-36.3422,-9.47533],[-36.34275,-9.4029],[-36.34473,-9.4029],[-36.34537,-9.40279],[-36.34702,-9.40293],[-36.3508,-9.40291],[-36.359,-9.40307],[-36.36109,-9.403],[-36.36289,-9.40307],[-36.3659,-9.40305],[-36.36713,-9.40301],[-36.37571,-9.40307],[-36.38049,-9.40308],[-36.38663,-9.4032],[-36.38852,-9.40312],[-36.39286,-9.40325],[-36.39656,-9.40322],[-36.40309,-9.40327],[-36.41973,-9.40338],[-36.43368,-9.4034],[-36.43355,-9.41685],[-36.43344,-9.42386],[-36.43338,-9.43753],[-36.43329,-9.45012],[-36.433,-9.49359],[-36.40839,-9.4935],[-36.40442,-9.49354],[-36.40008,-9.49351],[-36.39787,-9.49342],[-36.39168,-9.49328],[-36.38757,-9.49331],[-36.38536,-9.49341],[-36.37673,-9.49331],[-36.37427,-9.49319],[-36.36707,-9.49299],[-36.36502,-9.493],[-36.36043,-9.49299],[-36.35955,-9.49295],[-36.35895,-9.49304],[-36.35703,-9.49294],[-36.35665,-9.493],[-36.3526,-9.493],[-36.34767,-9.49297],[-36.34201,-9.49289]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"MassGIS-L3-Parcels",name:"MassGIS L3 Parcels",type:"tms",template:"https://tiles.arcgis.com/tiles/hGdibHYSPO59RG1h/arcgis/rest/services/MassGIS_Level3_Parcels/MapServer/tile/{zoom}/{y}/{x}",zoomExtent:[15,20],polygon:[[[-72.13569,42.03025],[-72.53156,42.03458],[-72.57278,42.03022],[-72.58216,42.02474],[-72.60717,42.02515],[-72.60797,42.03108],[-72.64019,42.03205],[-72.69933,42.03696],[-72.75714,42.03635],[-72.75868,42.02439],[-72.76572,42.02276],[-72.76673,42.00327],[-72.81705,41.99769],[-72.81378,42.03674],[-73.03678,42.03929],[-73.43281,42.05059],[-73.49688,42.04968],[-73.50814,42.08626],[-73.26496,42.74594],[-72.6872,42.73348],[-71.97286,42.71307],[-71.69663,42.70572],[-71.29464,42.69704],[-71.27894,42.71136],[-71.26787,42.72603],[-71.25526,42.73659],[-71.24598,42.74231],[-71.23732,42.74491],[-71.22391,42.74643],[-71.18181,42.73732],[-71.18617,42.79088],[-71.16667,42.80891],[-71.13277,42.82145],[-71.06442,42.80626],[-71.05395,42.83337],[-71.04483,42.84869],[-71.03128,42.85924],[-70.96702,42.86887],[-70.94967,42.87588],[-70.92973,42.88504],[-70.91465,42.88661],[-70.90348,42.88671],[-70.88566,42.88288],[-70.84776,42.86088],[-70.82963,42.86875],[-70.81567,42.87204],[-70.45842,42.67694],[-70.8759,42.35302],[-69.88713,42.0519],[-69.89537,41.21643],[-70.81959,41.23192],[-71.09996,41.43386],[-71.12047,41.49717],[-71.13131,41.59231],[-71.14059,41.6051],[-71.14047,41.62389],[-71.13569,41.6284],[-71.13291,41.6601],[-71.17605,41.6681],[-71.17588,41.67154],[-71.1954,41.67514],[-71.26139,41.7523],[-71.32885,41.7811],[-71.33407,41.79455],[-71.34156,41.79817],[-71.33914,41.80842],[-71.3472,41.8231],[-71.3449,41.828],[-71.3352,41.8355],[-71.3422,41.8448],[-71.33392,41.86229],[-71.34086,41.87872],[-71.33865,41.89865],[-71.38174,41.8932],[-71.38127,42.01885],[-71.49744,42.01725],[-71.52888,42.01499],[-71.79925,42.00807],[-71.80067,42.02351],[-72.0635,42.02735],[-72.13569,42.03025]]],overlay:true},{id:"Maxar-Premium",name:"Maxar Premium Imagery (Beta)",type:"tms",template:"https://earthwatch.digitalglobe.com/earthservice/tmsaccess/tms/1.0.0/DigitalGlobe:ImageryTileService@EPSG:3857@jpg/{zoom}/{x}/{-y}.jpg?connectId=91e57457-aa2d-41ad-a42b-3b63a123f54a",zoomExtent:[0,22],terms_url:"https://wiki.openstreetmap.org/wiki/DigitalGlobe",terms_text:"Terms & Feedback","default":true,description:"Maxar Premium is a mosaic composed of Maxar basemap with select regions filled with +Vivid or custom area of interest imagery, 50cm resolution or better, and refreshed more frequently with ongoing updates.",icon:"https://osmlab.github.io/editor-layer-index/sources/world/Maxar.png"},{id:"Maxar-Standard",name:"Maxar Standard Imagery (Beta)",type:"tms",template:"https://earthwatch.digitalglobe.com/earthservice/tmsaccess/tms/1.0.0/DigitalGlobe:ImageryTileService@EPSG:3857@jpg/{zoom}/{x}/{-y}.jpg?connectId=d9c5e3ef-6300-4cec-9562-c1f27da6b2d9",zoomExtent:[0,22],terms_url:"https://wiki.openstreetmap.org/wiki/DigitalGlobe",terms_text:"Terms & Feedback","default":true,description:"Maxar Standard is a curated set of imagery covering 86% of the earth’s landmass, with 30-60cm resolution where available, backfilled by Landsat. Average age is 2.31 years, with some areas updated 2x per year.",icon:"https://osmlab.github.io/editor-layer-index/sources/world/Maxar.png"},{id:"geodata.md.gov-MD_SixInchImagery",name:"MD Latest 6 Inch Aerial Imagery",type:"wms",template:"https://geodata.md.gov/imap/services/Imagery/MD_SixInchImagery/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=MD_SixInchImagery&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2016-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[-76.23413,37.92037],[-76.59805,38.15832],[-76.94,38.27053],[-77.03819,38.41379],[-77.23526,38.33627],[-77.31216,38.41056],[-77.26273,38.56642],[-77.043,38.71338],[-77.04987,38.7937],[-76.92627,38.8925],[-77.04094,38.9845],[-77.12162,38.92523],[-77.15012,38.95514],[-77.25243,38.97543],[-77.25929,39.02425],[-77.34581,39.05492],[-77.46185,39.07038],[-77.53738,39.13965],[-77.47421,39.22481],[-77.57275,39.30428],[-77.72347,39.32899],[-77.77702,39.46323],[-77.86148,39.51622],[-77.84088,39.60886],[-77.95624,39.59299],[-78.16635,39.69556],[-78.27003,39.62156],[-78.3387,39.64007],[-78.46641,39.52364],[-78.6628,39.54006],[-78.79875,39.60622],[-78.9814,39.4468],[-79.06723,39.47649],[-79.48505,39.19954],[-79.48557,39.72158],[-75.78836,39.72181],[-75.69099,38.46058],[-75.04924,38.45816],[-75.04984,38.40222],[-75.08151,38.32321],[-75.09773,38.30907],[-75.187,38.09755],[-75.23798,38.0224],[-75.61821,37.98967],[-75.86369,37.90953],[-76.23413,37.92037]]],terms_url:"http://imap.maryland.gov/Pages/imagery-products.aspx",terms_text:"DoIT, MD iMap, MDP",description:"Six Inch resolution aerial imagery for the State of Maryland"},{id:"geodata.md.gov-MD_ThreeInchImagery",name:"MD Three Inch Aerial Imagery",type:"wms",template:"https://geodata.md.gov/imap/services/Imagery/MD_ThreeInchImagery/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=MD_ThreeInchImagery&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,20],polygon:[[[-76.46299,38.9808],[-76.46326,38.94779],[-76.49499,38.9369],[-76.51617,38.93697],[-76.54763,38.9591],[-76.54745,38.98667],[-76.51559,39.00306],[-76.4839,39.00292],[-76.46299,38.9808]],[[-76.09548,38.84133],[-76.0428,38.8409],[-76.04289,38.8298],[-76.03229,38.8297],[-76.03277,38.79667],[-76.02545,38.79664],[-76.02541,38.77462],[-76.03308,38.77472],[-76.03366,38.73073],[-76.05462,38.73094],[-76.0548,38.72005],[-76.10753,38.72043],[-76.10714,38.75338],[-76.11754,38.75346],[-76.11701,38.79731],[-76.09601,38.79715],[-76.09548,38.84133]],[[-77.23397,39.16838],[-77.25516,39.14647],[-77.25496,39.11343],[-77.18093,39.05337],[-77.14907,39.0477],[-77.12798,39.04779],[-77.10683,39.05325],[-77.10688,39.0917],[-77.11775,39.10827],[-77.16011,39.12485],[-77.15975,39.15214],[-77.17048,39.16302],[-77.21284,39.17272],[-77.23397,39.16838]]],terms_url:"http://imap.maryland.gov/Pages/imagery-products.aspx",terms_text:"DoIT, MD iMap, MDP",description:"Three Inch Resolution Imagery for the cities of Rockville, Gaithersburg and Annapolis"},{id:"geodata.md.gov-MD_ColorBasemap",name:"MD Transportation Basemap",type:"wms",template:"https://geodata.md.gov/imap/services/Transportation/MD_ColorBasemap/MapServer/WmsServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=MD_ColorBasemap&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-76.23413,37.92037],[-76.59805,38.15832],[-76.94,38.27053],[-77.03819,38.41379],[-77.23526,38.33627],[-77.31216,38.41056],[-77.26273,38.56642],[-77.043,38.71338],[-77.04987,38.7937],[-76.92627,38.8925],[-77.04094,38.9845],[-77.12162,38.92523],[-77.15012,38.95514],[-77.25243,38.97543],[-77.25929,39.02425],[-77.34581,39.05492],[-77.46185,39.07038],[-77.53738,39.13965],[-77.47421,39.22481],[-77.57275,39.30428],[-77.72347,39.32899],[-77.77702,39.46323],[-77.86148,39.51622],[-77.84088,39.60886],[-77.95624,39.59299],[-78.16635,39.69556],[-78.27003,39.62156],[-78.3387,39.64007],[-78.46641,39.52364],[-78.6628,39.54006],[-78.79875,39.60622],[-78.9814,39.4468],[-79.06723,39.47649],[-79.48505,39.19954],[-79.48557,39.72158],[-75.78836,39.72181],[-75.69099,38.46058],[-75.04924,38.45816],[-75.04984,38.40222],[-75.08151,38.32321],[-75.09773,38.30907],[-75.187,38.09755],[-75.23798,38.0224],[-75.61821,37.98967],[-75.86369,37.90953],[-76.23413,37.92037]]],terms_url:"http://imap.maryland.gov/Pages/imagery-products.aspx",terms_text:"DoIT, MD iMap, MDP",description:"Maryland State Highway Administration road features and additional Maryland focused landmarks"},{id:"MCGIS-County-NAIP-Imagery-2015",name:"Mesa County GIS NAIP 2015",type:"wms",template:"https://mcgis.mesacounty.us/image/services/Mosaic_Datasets/MesaCounty_2015/ImageServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[-109.06765,39.37875],[-107.37012,39.37962],[-107.36995,39.18422],[-107.49574,39.18416],[-107.49568,39.12133],[-107.62081,39.12126],[-107.62076,39.05974],[-107.68231,39.05971],[-107.68226,38.99652],[-107.81774,38.99645],[-107.81779,39.05859],[-107.86948,39.05856],[-107.86943,38.99769],[-108.05698,38.99759],[-108.05688,38.87126],[-108.18204,38.8712],[-108.18198,38.8081],[-108.37142,38.808],[-108.3711,38.43452],[-109.06685,38.43416],[-109.06765,39.37875]]],terms_url:"http://gis.mesacounty.us/",terms_text:"Mesa County GIS",icon:"https://gis.mesacounty.us/globalassets/images/county-logos/mesa-county-logo.png"},{id:"MCGIS-County-NAIP-Imagery-2017",name:"Mesa County GIS NAIP 2017",type:"wms",template:"https://mcgis.mesacounty.us/image/services/Mosaic_Datasets/NAIP_2017/ImageServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2017-10-24T00:00:00.000Z",startDate:"2017-08-26T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[-109.06765,39.37875],[-107.37012,39.37962],[-107.36995,39.18422],[-107.49574,39.18416],[-107.49568,39.12133],[-107.62081,39.12126],[-107.62076,39.05974],[-107.68231,39.05971],[-107.68226,38.99652],[-107.81774,38.99645],[-107.81779,39.05859],[-107.86948,39.05856],[-107.86943,38.99769],[-108.05698,38.99759],[-108.05688,38.87126],[-108.18204,38.8712],[-108.18198,38.8081],[-108.37142,38.808],[-108.3711,38.43452],[-109.06685,38.43416],[-109.06765,39.37875]]],terms_url:"http://gis.mesacounty.us/",terms_text:"Mesa County GIS",icon:"https://gis.mesacounty.us/globalassets/images/county-logos/mesa-county-logo.png"},{id:"MCGIS-County-Valleywide-Imagery-2018",name:"Mesa County GIS Valleywide 2018",type:"wms",template:"https://mcgis.mesacounty.us/image/services/Mosaic_Datasets/City_Color_2018/ImageServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2018-01-01T00:00:00.000Z",startDate:"2018-01-01T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[-108.93915,39.23931],[-108.86841,39.23846],[-108.86843,39.23734],[-108.81245,39.23666],[-108.81274,39.22256],[-108.79405,39.22234],[-108.79432,39.20857],[-108.70096,39.20745],[-108.70123,39.1939],[-108.60764,39.19277],[-108.60791,39.17906],[-108.58915,39.17884],[-108.58943,39.1649],[-108.53332,39.16422],[-108.53361,39.14993],[-108.51461,39.14971],[-108.51489,39.13611],[-108.44076,39.13522],[-108.44104,39.12109],[-108.42192,39.12086],[-108.42201,39.1163],[-108.3984,39.11602],[-108.39798,39.13708],[-108.32446,39.13619],[-108.32416,39.15107],[-108.30718,39.15087],[-108.3066,39.18],[-108.28866,39.17979],[-108.28807,39.20939],[-108.26868,39.20916],[-108.26957,39.16484],[-108.2864,39.16505],[-108.28699,39.13571],[-108.30312,39.13591],[-108.3038,39.10194],[-108.32335,39.10218],[-108.32328,39.10574],[-108.32914,39.10581],[-108.32943,39.09121],[-108.34736,39.09142],[-108.34764,39.07715],[-108.36637,39.07738],[-108.36666,39.06268],[-108.38569,39.06291],[-108.38599,39.04799],[-108.42216,39.04843],[-108.42245,39.03377],[-108.44051,39.03399],[-108.44137,38.99101],[-108.42193,38.99077],[-108.42252,38.96127],[-108.44162,38.9615],[-108.44133,38.97595],[-108.46034,38.97618],[-108.46006,38.99024],[-108.47877,38.99047],[-108.47848,39.00485],[-108.51515,39.0053],[-108.51519,39.00287],[-108.51825,39.00291],[-108.51821,39.00517],[-108.53414,39.00536],[-108.53397,39.0139],[-108.54342,39.01401],[-108.54336,39.01733],[-108.5455,39.01735],[-108.54548,39.01855],[-108.65864,39.01991],[-108.65778,39.06287],[-108.67867,39.06313],[-108.67837,39.07793],[-108.69699,39.07816],[-108.69671,39.09203],[-108.71557,39.09225],[-108.71529,39.10619],[-108.7388,39.10648],[-108.73853,39.12033],[-108.75744,39.12056],[-108.75686,39.14927],[-108.79422,39.14972],[-108.79393,39.16386],[-108.83224,39.16432],[-108.83196,39.17845],[-108.85061,39.17868],[-108.85033,39.19302],[-108.86938,39.19325],[-108.86906,39.20925],[-108.90237,39.20965],[-108.90208,39.22384],[-108.93946,39.22429],[-108.93915,39.23931]]],terms_url:"http://gis.mesacounty.us/",terms_text:"Mesa County GIS",icon:"https://gis.mesacounty.us/globalassets/images/county-logos/mesa-county-logo.png"},{id:"Metropole_Ruhr_RVR-DOP10",name:"Metropole Ruhr: Luftbilder (10 cm)",type:"wms",template:"https://geodaten.metropoleruhr.de/dop/dop?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=DOP&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[6.51691,51.81714],[6.52258,51.81469],[6.52281,51.81041],[6.52834,51.81053],[6.53991,51.80134],[6.5511,51.799],[6.56818,51.78992],[6.57476,51.79606],[6.58457,51.79369],[6.59102,51.8024],[6.60911,51.80019],[6.61081,51.79423],[6.63264,51.79981],[6.65946,51.7892],[6.66837,51.77738],[6.7138,51.78084],[6.70876,51.77131],[6.72131,51.76899],[6.7475,51.77035],[6.74862,51.77551],[6.75824,51.77656],[6.7698,51.76649],[6.77219,51.74596],[6.78862,51.74884],[6.79861,51.74217],[6.81927,51.74341],[6.81956,51.73741],[6.82683,51.72983],[6.8403,51.73694],[6.84995,51.73712],[6.85551,51.73636],[6.8586,51.72956],[6.9103,51.74592],[6.90861,51.75275],[6.91511,51.76144],[6.9157,51.7786],[6.93527,51.7738],[6.95606,51.77245],[6.97559,51.79936],[6.98794,51.80129],[6.99485,51.80141],[6.99497,51.79884],[7.02118,51.80014],[7.0244,51.7899],[7.03141,51.78745],[7.0316,51.78317],[7.03847,51.78414],[7.05392,51.77839],[7.06079,51.77936],[7.0609,51.77679],[7.07333,51.777],[7.07867,51.78137],[7.11433,51.78795],[7.13435,51.80542],[7.1616,51.81528],[7.16419,51.8196],[7.19177,51.82174],[7.2141,51.81694],[7.22121,51.81191],[7.23658,51.80785],[7.23668,51.80528],[7.24916,51.80461],[7.2535,51.79953],[7.26179,51.79966],[7.26485,51.79198],[7.26245,51.78252],[7.27229,51.77838],[7.26002,51.77391],[7.26012,51.77134],[7.2688,51.76118],[7.27577,51.75957],[7.27889,51.75019],[7.31079,51.74636],[7.3151,51.74214],[7.31519,51.73957],[7.31102,51.74036],[7.3125,51.73781],[7.32081,51.73707],[7.31169,51.72237],[7.29963,51.71277],[7.2985,51.70589],[7.31069,51.71207],[7.30825,51.70346],[7.32762,51.70202],[7.33057,51.69692],[7.34427,51.69969],[7.34599,51.69028],[7.33919,51.68761],[7.35589,51.68356],[7.35877,51.68017],[7.3781,51.67959],[7.39086,51.66947],[7.40617,51.6654],[7.41031,51.66545],[7.4101,51.67145],[7.43089,51.6683],[7.43892,51.67527],[7.44854,51.67625],[7.44933,51.69341],[7.44094,51.69673],[7.43792,51.7044],[7.42406,51.70593],[7.42245,51.71277],[7.43451,51.72321],[7.44825,51.72511],[7.46718,51.7365],[7.47273,51.73572],[7.4771,51.72892],[7.4826,51.72985],[7.47877,51.72037],[7.48435,51.71872],[7.48449,51.71444],[7.49119,51.72053],[7.49947,51.72063],[7.50214,51.72324],[7.51738,51.72172],[7.51788,51.70629],[7.53035,51.70473],[7.52922,51.69701],[7.53349,51.69277],[7.54458,51.6912],[7.5378,51.68768],[7.54477,51.6852],[7.5528,51.69301],[7.56651,51.69575],[7.56642,51.69832],[7.58706,51.70029],[7.59379,51.70551],[7.6048,51.7065],[7.60743,51.71082],[7.6143,51.71176],[7.61419,51.71518],[7.62663,51.71447],[7.62814,51.7102],[7.64321,51.71381],[7.6531,51.70621],[7.65428,51.71308],[7.668,51.71581],[7.66915,51.72353],[7.68832,51.72889],[7.69283,51.71608],[7.7012,51.71275],[7.71352,51.71631],[7.71481,51.71976],[7.71899,51.71809],[7.71749,51.72236],[7.72163,51.7224],[7.72555,51.73016],[7.73659,51.73028],[7.73638,51.73799],[7.75154,51.73901],[7.7699,51.72378],[7.77119,51.72722],[7.78908,51.72912],[7.79037,51.73256],[7.80282,51.73183],[7.80137,51.73439],[7.80825,51.73531],[7.81228,51.73964],[7.82058,51.73887],[7.82457,51.74491],[7.83287,51.74413],[7.83314,51.73385],[7.83739,51.72961],[7.85815,51.72724],[7.85822,51.72467],[7.86374,51.72472],[7.87187,51.7308],[7.87745,51.72828],[7.88038,51.72145],[7.88875,51.7181],[7.88912,51.70267],[7.90148,51.70536],[7.90568,51.70283],[7.91249,51.70632],[7.92768,51.7056],[7.92912,51.70305],[7.94014,51.704],[7.93746,51.70055],[7.94296,51.70146],[7.96108,51.69305],[7.97631,51.69061],[7.97779,51.68633],[7.9875,51.68385],[7.98761,51.67871],[7.99732,51.67622],[7.9974,51.67279],[7.98365,51.67096],[7.96286,51.67592],[7.95466,51.67242],[7.95366,51.65612],[7.94689,51.65092],[7.94984,51.64237],[7.94443,51.63804],[7.93477,51.6388],[7.93224,51.62935],[7.92406,51.62585],[7.92414,51.62242],[7.91195,51.61374],[7.91632,51.60349],[7.91378,51.59489],[7.87529,51.59282],[7.86837,51.59446],[7.85742,51.59179],[7.85889,51.58837],[7.82749,51.57863],[7.84327,51.55307],[7.83262,51.53925],[7.83277,51.53325],[7.84115,51.52819],[7.8345,51.51955],[7.83755,51.50758],[7.83212,51.50496],[7.83912,51.49988],[7.83923,51.4956],[7.84474,51.49479],[7.8506,51.48028],[7.83418,51.4784],[7.82198,51.47228],[7.80819,51.47471],[7.79876,51.46776],[7.78906,51.47109],[7.76169,51.46823],[7.74785,51.47237],[7.7425,51.46717],[7.73567,51.46623],[7.72864,51.47216],[7.69838,51.4744],[7.67525,51.46728],[7.65606,51.46621],[7.65347,51.46103],[7.63843,51.45914],[7.63589,51.45226],[7.62083,51.45122],[7.61407,51.44772],[7.61977,51.44092],[7.62525,51.44099],[7.62127,51.43666],[7.62825,51.43245],[7.62561,51.42899],[7.63125,51.42391],[7.61633,51.41859],[7.62183,51.4178],[7.62196,51.41352],[7.63313,51.40679],[7.61322,51.38512],[7.60485,51.39017],[7.60609,51.39447],[7.59647,51.39521],[7.58704,51.38995],[7.59,51.38313],[7.58465,51.37878],[7.58644,51.36509],[7.59234,51.35144],[7.59934,51.34638],[7.59257,51.34373],[7.59407,51.33946],[7.58186,51.33588],[7.58334,51.33247],[7.57655,51.33067],[7.57816,51.32298],[7.58373,51.31962],[7.57837,51.31612],[7.58134,51.30844],[7.58547,51.30763],[7.58305,51.29732],[7.56826,51.28942],[7.56582,51.27996],[7.55089,51.27635],[7.54977,51.26862],[7.52923,51.27008],[7.52797,51.26663],[7.51302,51.26387],[7.51049,51.25784],[7.50371,51.25604],[7.50385,51.25175],[7.49563,51.2525],[7.49438,51.24906],[7.49708,51.24995],[7.50271,51.24488],[7.50143,51.24229],[7.48262,51.23262],[7.469,51.23158],[7.46505,51.22724],[7.45129,51.23049],[7.44191,51.22522],[7.44478,51.22098],[7.43534,51.21742],[7.43816,51.21489],[7.43413,51.21312],[7.42995,51.21563],[7.42962,51.22506],[7.42408,51.22756],[7.41182,51.22653],[7.41342,51.2197],[7.39824,51.22463],[7.39521,51.23317],[7.40319,51.23928],[7.3934,51.246],[7.38793,51.24593],[7.38672,51.24162],[7.37853,51.24151],[7.37289,51.24657],[7.35526,51.2429],[7.35405,51.23859],[7.34849,51.24109],[7.339,51.23924],[7.33872,51.24695],[7.32904,51.25024],[7.3238,51.24417],[7.31284,51.24487],[7.31027,51.24054],[7.30481,51.24046],[7.29643,51.24549],[7.29764,51.24979],[7.28262,51.24957],[7.27541,51.25975],[7.2715,51.25455],[7.26734,51.25621],[7.26578,51.26133],[7.27623,51.27434],[7.26764,51.2845],[7.25531,51.28518],[7.26537,51.30847],[7.26521,51.31276],[7.25974,51.31268],[7.26511,51.31533],[7.26365,51.31788],[7.23393,51.308],[7.22973,51.31051],[7.2271,51.3079],[7.22296,51.3087],[7.22309,51.30527],[7.20682,51.30159],[7.20026,51.29463],[7.18792,51.2953],[7.18232,51.29864],[7.16869,51.29757],[7.18065,51.30633],[7.16674,51.31211],[7.16924,51.31815],[7.16503,51.32066],[7.1662,51.32582],[7.15645,51.32996],[7.15351,51.33505],[7.14807,51.33411],[7.14927,51.33842],[7.14513,51.33921],[7.15292,51.34962],[7.14882,51.34956],[7.14731,51.35296],[7.15665,51.35911],[7.15911,51.36601],[7.15189,51.37532],[7.14634,51.37695],[7.13957,51.37513],[7.13802,51.37939],[7.13262,51.37759],[7.127,51.38093],[7.12163,51.37827],[7.12153,51.38084],[7.11742,51.38078],[7.11626,51.37561],[7.11215,51.37555],[7.11205,51.37812],[7.1039,51.37627],[7.09853,51.37361],[7.10004,51.37021],[7.0919,51.36836],[7.08765,51.37172],[7.08088,51.3699],[7.07796,51.37414],[7.0552,51.36176],[7.04973,51.36167],[7.04404,51.36671],[7.03604,51.36144],[7.01944,51.36544],[7.01,51.36185],[7.00745,51.35752],[6.98689,51.35803],[6.98301,51.35282],[6.97743,51.35529],[6.97621,51.35184],[6.96545,51.34737],[6.95033,51.34882],[6.94748,51.35134],[6.9257,51.34839],[6.92422,51.35093],[6.92825,51.35272],[6.92137,51.35346],[6.92391,51.35779],[6.90565,51.36775],[6.90022,51.3668],[6.8904,51.37176],[6.87848,51.36297],[6.86745,51.36449],[6.85115,51.36162],[6.84552,51.36495],[6.84991,51.35903],[6.83385,51.35101],[6.82295,51.34995],[6.81731,51.35328],[6.81615,51.34897],[6.80939,51.34713],[6.80649,51.3505],[6.7941,51.35198],[6.79314,51.34339],[6.77673,51.34308],[6.7475,51.35281],[6.73831,51.34492],[6.72749,51.34214],[6.71287,51.33328],[6.69193,51.34144],[6.66428,51.3469],[6.65435,51.35356],[6.65789,51.36477],[6.67409,51.36938],[6.67794,51.3746],[6.67511,51.37626],[6.6684,51.37356],[6.67309,51.38908],[6.66081,51.38798],[6.65693,51.38362],[6.64602,51.38254],[6.64443,51.3868],[6.63626,51.38577],[6.63586,51.39348],[6.611,51.39726],[6.59479,51.39265],[6.57148,51.39302],[6.56618,51.38948],[6.55797,51.38931],[6.55496,51.39439],[6.54679,51.39337],[6.54505,51.40019],[6.53816,51.4009],[6.52939,51.41101],[6.52596,51.42379],[6.5149,51.42527],[6.51453,51.43213],[6.51987,51.43481],[6.52092,51.44084],[6.51119,51.4432],[6.50821,51.44743],[6.50273,51.44731],[6.50198,51.46101],[6.50709,51.46798],[6.49868,51.47123],[6.49698,51.4772],[6.49012,51.47705],[6.48714,51.48127],[6.4818,51.47859],[6.47608,51.48275],[6.47404,51.49471],[6.46699,51.49799],[6.46245,51.50561],[6.45407,51.508],[6.45497,51.51659],[6.44796,51.51901],[6.45326,51.52255],[6.44876,51.52931],[6.45562,51.52946],[6.47816,51.51966],[6.47499,51.52731],[6.48673,51.53871],[6.46262,51.55191],[6.49612,51.56806],[6.46176,51.56732],[6.42276,51.5759],[6.41912,51.56725],[6.40847,51.56101],[6.38918,51.56144],[6.37657,51.56545],[6.36951,51.56872],[6.36916,51.57471],[6.37726,51.57747],[6.37284,51.58251],[6.37372,51.59111],[6.35235,51.60349],[6.33482,51.59709],[6.32362,51.60026],[6.32067,51.60363],[6.33275,51.60905],[6.33392,51.6125],[6.30035,51.62117],[6.30143,51.62633],[6.29113,51.63725],[6.29225,51.64156],[6.29903,51.64343],[6.32563,51.63632],[6.32819,51.63981],[6.35403,51.64554],[6.35313,51.66095],[6.36553,51.66123],[6.36262,51.66374],[6.37069,51.66735],[6.38091,51.6813],[6.38062,51.68643],[6.37195,51.6931],[6.35808,51.6945],[6.35482,51.703],[6.3682,51.71016],[6.37642,51.7112],[6.38041,51.71387],[6.37731,51.7198],[6.38829,51.7209],[6.38789,51.72775],[6.40932,51.73937],[6.41055,51.74197],[6.40346,51.74524],[6.40597,51.74959],[6.40178,51.75035],[6.40287,51.75552],[6.41405,51.75319],[6.42134,51.7465],[6.42188,51.73708],[6.40877,51.72478],[6.40921,51.71708],[6.4164,51.71209],[6.44839,51.70765],[6.46246,51.70281],[6.47677,51.71855],[6.48908,51.72053],[6.48418,51.73414],[6.48942,51.7394],[6.48908,51.74539],[6.48171,51.75381],[6.53363,51.76434],[6.52478,51.77444],[6.50784,51.78094],[6.4898,51.80714],[6.48961,51.81056],[6.51162,51.81274],[6.51691,51.81714]]],terms_url:"https://www.metropoleruhr.de/regionalverband-ruhr.html",terms_text:"Datengrundlage: Regionalverband Ruhr"},{id:"miljodirektoratet-vern",name:"Miljødirektoratet Protected Areas overlay",type:"wms",template:"https://kart.miljodirektoratet.no/arcgis/services/vern/MapServer/WmsServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=naturvern_klasser_omrade&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,22],polygon:[[[-10.95725,71.60964],[-6.16765,71.62095],[-6.13756,70.30991],[-10.92717,70.29784],[-10.95725,71.60964]],[[16.81947,74.9482],[21.25771,74.94213],[21.23712,73.8918],[16.79889,73.89828],[16.81947,74.9482]],[[4.04288,79.93593],[20.65421,81.54417],[36.6503,80.40108],[26.76265,75.8129],[13.88667,75.79135],[4.04288,79.93593]],[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://kart.naturbase.no",terms_text:"© Miljødirektoratet",description:"Norwegian national parks, nature reserves and other protected areas and objects from Naturbase, including Svalbard/Spitsbergen",icon:"http://www.miljodirektoratet.no/Framework/favicon-32.png",overlay:true},{id:"miljodirektoratet-friluftsomrader",name:"Miljødirektoratet Public Recreation Areas overlay",type:"wms",template:"https://kart.miljodirektoratet.no/arcgis/services/friluftsliv_statlig_sikra/MapServer/WmsServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=friluftsliv_statlig_sikra&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,22],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"http://www.miljostatus.no/tema/friluftsliv/statlig-sikra-friluftlivsomrader/",terms_text:"© Miljødirektoratet",description:"Public recreation areas with State ownership (\"friluftsområder\").",icon:"http://www.miljodirektoratet.no/Framework/favicon-32.png",overlay:true},{id:"minador_do_negrao",name:"Minador do Negrão",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Minador%20do%20Negrao&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.8196,-9.35174],[-36.82017,-9.26142],[-36.82465,-9.26133],[-36.83064,-9.26147],[-36.83673,-9.2615],[-36.84228,-9.26148],[-36.84562,-9.2616],[-36.85564,-9.2616],[-36.86214,-9.26159],[-36.8659,-9.26147],[-36.86724,-9.2615],[-36.86952,-9.26149],[-36.87127,-9.26157],[-36.87476,-9.26153],[-36.87816,-9.26163],[-36.88321,-9.2617],[-36.88565,-9.26167],[-36.88857,-9.26148],[-36.89217,-9.26151],[-36.89383,-9.26163],[-36.8974,-9.26175],[-36.91122,-9.26183],[-36.9111,-9.26651],[-36.91112,-9.28542],[-36.91121,-9.29066],[-36.91118,-9.29368],[-36.91099,-9.29929],[-36.91091,-9.30729],[-36.9109,-9.3123],[-36.91083,-9.31597],[-36.91084,-9.32013],[-36.91098,-9.32395],[-36.91099,-9.32587],[-36.91079,-9.32964],[-36.91079,-9.33523],[-36.91074,-9.33944],[-36.91092,-9.34311],[-36.91084,-9.34471],[-36.91066,-9.35229],[-36.89277,-9.35225],[-36.87735,-9.35212],[-36.86463,-9.35203],[-36.85761,-9.35194],[-36.84344,-9.35191],[-36.83115,-9.3518],[-36.8196,-9.35174]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"mml-tausta",name:"MML Background Map",type:"tms",template:"http://tiles.kartat.kapsi.fi/taustakartta/{zoom}/{x}/{y}.jpg",zoomExtent:[2,19],polygon:[[[27.96569,70.0988],[27.57431,70.07728],[27.10876,69.93548],[26.70913,69.97549],[26.45507,69.94207],[25.87142,69.6671],[25.94833,69.61024],[25.83023,69.55323],[25.66955,69.20794],[25.73822,69.01797],[25.60089,68.90309],[25.45806,68.91199],[25.11749,68.80699],[25.07354,68.64355],[24.88128,68.62003],[23.97491,68.84568],[23.74969,68.8308],[23.63433,68.71645],[23.18939,68.68053],[22.52197,68.7553],[21.63894,69.28191],[21.26953,69.31783],[20.94131,69.21622],[21.08963,69.09307],[21.05941,69.04352],[20.72296,69.12491],[20.54443,69.0558],[20.84655,68.97416],[20.81634,68.91742],[21.38754,68.68461],[22.04734,68.47066],[22.80212,68.35464],[23.12072,68.13169],[23.5437,67.9633],[23.44757,67.8393],[23.48602,67.59352],[23.36517,67.46545],[23.71124,67.41592],[23.72772,67.32186],[23.54644,67.26885],[23.53128,67.16724],[23.89251,66.86863],[23.84582,66.57775],[23.61843,66.44562],[23.67171,66.20303],[23.87191,66.14551],[24.09988,65.87247],[24.1658,65.66959],[24.11636,65.39143],[21.37939,63.68037],[20.17639,63.29787],[19.08325,60.16064],[20.22033,59.44786],[22.29125,59.44507],[25.82336,59.933],[27.52075,60.23435],[27.83386,60.53229],[29.29641,61.26165],[31.20803,62.44759],[31.62826,62.90585],[31.2635,63.22106],[29.99605,63.75387],[30.28656,63.81704],[30.58319,64.0782],[30.5104,64.26428],[30.09979,64.39218],[30.02563,64.58736],[30.16845,64.63329],[30.09429,64.79518],[29.78393,64.79811],[29.65347,64.89733],[29.65759,65.05939],[29.91027,65.09527],[29.93225,65.20895],[29.72076,65.27853],[29.91577,65.63788],[30.1863,65.66223],[29.9913,66.09771],[29.07119,66.91983],[30.11077,67.63431],[29.3486,68.08099],[28.67568,68.20166],[28.46547,68.54039],[28.72375,68.72642],[28.82675,68.87341],[28.44985,68.90792],[28.95996,69.05089],[28.83324,69.10563],[28.87207,69.22132],[29.36096,69.46526],[29.15634,69.69667],[28.38455,69.83488],[28.35845,69.88312],[28.17169,69.92511],[28.00415,70.01495],[27.96569,70.0988]]],terms_url:"https://www.maanmittauslaitos.fi/en/",terms_text:"© Maanmittauslaitos",description:"Background map from the National Land Survey of Finland",icon:"https://www.maanmittauslaitos.fi/apple-touch-icon.png"},{id:"mml-orto",name:"MML Orthophoto",type:"tms",template:"http://tiles.kartat.kapsi.fi/ortokuva/{zoom}/{x}/{y}.jpg",zoomExtent:[2,19],polygon:[[[27.96569,70.0988],[27.57431,70.07728],[27.10876,69.93548],[26.70913,69.97549],[26.45507,69.94207],[25.87142,69.6671],[25.94833,69.61024],[25.83023,69.55323],[25.66955,69.20794],[25.73822,69.01797],[25.60089,68.90309],[25.45806,68.91199],[25.11749,68.80699],[25.07354,68.64355],[24.88128,68.62003],[23.97491,68.84568],[23.74969,68.8308],[23.63433,68.71645],[23.18939,68.68053],[22.52197,68.7553],[21.63894,69.28191],[21.26953,69.31783],[20.94131,69.21622],[21.08963,69.09307],[21.05941,69.04352],[20.72296,69.12491],[20.54443,69.0558],[20.84655,68.97416],[20.81634,68.91742],[21.38754,68.68461],[22.04734,68.47066],[22.80212,68.35464],[23.12072,68.13169],[23.5437,67.9633],[23.44757,67.8393],[23.48602,67.59352],[23.36517,67.46545],[23.71124,67.41592],[23.72772,67.32186],[23.54644,67.26885],[23.53128,67.16724],[23.89251,66.86863],[23.84582,66.57775],[23.61843,66.44562],[23.67171,66.20303],[23.87191,66.14551],[24.09988,65.87247],[24.1658,65.66959],[24.11636,65.39143],[21.37939,63.68037],[20.17639,63.29787],[19.08325,60.16064],[20.22033,59.44786],[22.29125,59.44507],[25.82336,59.933],[27.52075,60.23435],[27.83386,60.53229],[29.29641,61.26165],[31.20803,62.44759],[31.62826,62.90585],[31.2635,63.22106],[29.99605,63.75387],[30.28656,63.81704],[30.58319,64.0782],[30.5104,64.26428],[30.09979,64.39218],[30.02563,64.58736],[30.16845,64.63329],[30.09429,64.79518],[29.78393,64.79811],[29.65347,64.89733],[29.65759,65.05939],[29.91027,65.09527],[29.93225,65.20895],[29.72076,65.27853],[29.91577,65.63788],[30.1863,65.66223],[29.9913,66.09771],[29.07119,66.91983],[30.11077,67.63431],[29.3486,68.08099],[28.67568,68.20166],[28.46547,68.54039],[28.72375,68.72642],[28.82675,68.87341],[28.44985,68.90792],[28.95996,69.05089],[28.83324,69.10563],[28.87207,69.22132],[29.36096,69.46526],[29.15634,69.69667],[28.38455,69.83488],[28.35845,69.88312],[28.17169,69.92511],[28.00415,70.01495],[27.96569,70.0988]]],terms_url:"https://www.maanmittauslaitos.fi/en/",terms_text:"© Maanmittauslaitos",best:true,description:"Ortophotos from the National Land Survey of Finland",icon:"https://www.maanmittauslaitos.fi/apple-touch-icon.png"},{id:"mml-topo",name:"MML Topographic Map",type:"tms",template:"http://tiles.kartat.kapsi.fi/peruskartta/{zoom}/{x}/{y}.jpg",zoomExtent:[2,19],polygon:[[[27.96569,70.0988],[27.57431,70.07728],[27.10876,69.93548],[26.70913,69.97549],[26.45507,69.94207],[25.87142,69.6671],[25.94833,69.61024],[25.83023,69.55323],[25.66955,69.20794],[25.73822,69.01797],[25.60089,68.90309],[25.45806,68.91199],[25.11749,68.80699],[25.07354,68.64355],[24.88128,68.62003],[23.97491,68.84568],[23.74969,68.8308],[23.63433,68.71645],[23.18939,68.68053],[22.52197,68.7553],[21.63894,69.28191],[21.26953,69.31783],[20.94131,69.21622],[21.08963,69.09307],[21.05941,69.04352],[20.72296,69.12491],[20.54443,69.0558],[20.84655,68.97416],[20.81634,68.91742],[21.38754,68.68461],[22.04734,68.47066],[22.80212,68.35464],[23.12072,68.13169],[23.5437,67.9633],[23.44757,67.8393],[23.48602,67.59352],[23.36517,67.46545],[23.71124,67.41592],[23.72772,67.32186],[23.54644,67.26885],[23.53128,67.16724],[23.89251,66.86863],[23.84582,66.57775],[23.61843,66.44562],[23.67171,66.20303],[23.87191,66.14551],[24.09988,65.87247],[24.1658,65.66959],[24.11636,65.39143],[21.37939,63.68037],[20.17639,63.29787],[19.08325,60.16064],[20.22033,59.44786],[22.29125,59.44507],[25.82336,59.933],[27.52075,60.23435],[27.83386,60.53229],[29.29641,61.26165],[31.20803,62.44759],[31.62826,62.90585],[31.2635,63.22106],[29.99605,63.75387],[30.28656,63.81704],[30.58319,64.0782],[30.5104,64.26428],[30.09979,64.39218],[30.02563,64.58736],[30.16845,64.63329],[30.09429,64.79518],[29.78393,64.79811],[29.65347,64.89733],[29.65759,65.05939],[29.91027,65.09527],[29.93225,65.20895],[29.72076,65.27853],[29.91577,65.63788],[30.1863,65.66223],[29.9913,66.09771],[29.07119,66.91983],[30.11077,67.63431],[29.3486,68.08099],[28.67568,68.20166],[28.46547,68.54039],[28.72375,68.72642],[28.82675,68.87341],[28.44985,68.90792],[28.95996,69.05089],[28.83324,69.10563],[28.87207,69.22132],[29.36096,69.46526],[29.15634,69.69667],[28.38455,69.83488],[28.35845,69.88312],[28.17169,69.92511],[28.00415,70.01495],[27.96569,70.0988]]],terms_url:"https://www.maanmittauslaitos.fi/en/",terms_text:"© Maanmittauslaitos",description:"Topographic map from the National Land Survey of Finland",icon:"https://www.maanmittauslaitos.fi/apple-touch-icon.png"},{id:"mtbmap-no",name:"MTBmap.no",type:"tms",template:"https://mtbmap.no/tiles/osm/mtbmap/{zoom}/{x}/{y}.jpg",tileSize:512,zoomExtent:[3,14],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://www.mtbmap.no/",terms_text:"© MTBmap.no",description:"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/no/MTBmapno.png"},{id:"Mulhouse_2018",name:"Mulhouse - 2018",type:"tms",template:"http://wms.openstreetmap.fr/tms/1.0.0/mulhouse_2018/{zoom}/{x}/{y}",endDate:"2018-01-01T00:00:00.000Z",startDate:"2018-01-01T00:00:00.000Z",zoomExtent:[0,23],polygon:[[[7.53731,47.78041],[7.57439,47.84128],[7.57301,47.85602],[7.55035,47.86201],[7.53525,47.84588],[7.5016,47.85141],[7.45972,47.84174],[7.4556,47.83252],[7.4453,47.83114],[7.43088,47.84128],[7.41549,47.83831],[7.39174,47.84727],[7.38007,47.83851],[7.33475,47.83989],[7.34024,47.89563],[7.31758,47.91082],[7.28737,47.89977],[7.28462,47.88412],[7.24686,47.88228],[7.23724,47.87629],[7.23312,47.86431],[7.2139,47.86524],[7.183,47.85786],[7.17613,47.84819],[7.21115,47.82284],[7.18986,47.81085],[7.19948,47.78179],[7.16789,47.77025],[7.183,47.73517],[7.17682,47.72362],[7.19467,47.69451],[7.21802,47.68527],[7.24548,47.68527],[7.25166,47.69497],[7.2448,47.70376],[7.2551,47.71392],[7.27844,47.713],[7.27982,47.70237],[7.26814,47.69405],[7.26883,47.68434],[7.28531,47.67094],[7.30247,47.66308],[7.32376,47.65984],[7.33337,47.66724],[7.3732,47.65383],[7.39242,47.65475],[7.40822,47.6603],[7.39723,47.67648],[7.42744,47.68666],[7.47551,47.69821],[7.5222,47.69636],[7.55104,47.71531],[7.56134,47.73517],[7.53731,47.78041]]],terms_url:"https://data.mulhouse-alsace.fr/explore/dataset/m2a_orthophotographie-2018/information/",terms_text:"Mulhouse Alsace Agglomération 2018"},{id:"MunichLatestAerialImagery",name:"Munich latest aerial imagery 60cm",type:"wms",template:"https://ogc.muenchen.de/wms/opendata_luftbild?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=bgl0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[11,22],polygon:[[[11.48878,48.053],[11.55589,48.05323],[11.55583,48.06224],[11.56915,48.06229],[11.56908,48.07128],[11.64986,48.07155],[11.64993,48.06256],[11.70326,48.06274],[11.70313,48.08074],[11.71673,48.08079],[11.71667,48.08968],[11.7299,48.08972],[11.72963,48.12566],[11.74313,48.1257],[11.74292,48.15276],[11.72943,48.15271],[11.72936,48.16152],[11.71612,48.16147],[11.71592,48.18859],[11.7027,48.18855],[11.70263,48.19752],[11.67558,48.19743],[11.67537,48.22446],[11.66176,48.22441],[11.66169,48.23355],[11.64863,48.2335],[11.64857,48.24246],[11.54064,48.2421],[11.54058,48.25093],[11.52735,48.25088],[11.52728,48.26001],[11.47335,48.25983],[11.47356,48.23291],[11.46014,48.23287],[11.46021,48.22373],[11.43336,48.22364],[11.43343,48.21439],[11.3798,48.21421],[11.37987,48.20518],[11.36607,48.20514],[11.36621,48.18741],[11.35259,48.18737],[11.35266,48.17817],[11.33946,48.17813],[11.33973,48.14216],[11.36684,48.14225],[11.36697,48.12443],[11.38083,48.12448],[11.3809,48.11558],[11.44769,48.1158],[11.44804,48.07087],[11.46186,48.07091],[11.46193,48.06193],[11.48872,48.06202],[11.48878,48.053]]],terms_url:"http://www.geodatenservice-muenchen.de/",terms_text:"Datenquelle: dl-de/by-2-0: Landeshauptstadt München – Kommunalreferat – GeodatenService – www.geodatenservice-muenchen.de",icon:"https://www.muenchen.de/media/css/images/favicon_114x114.png"},{id:"openlabs-geoportal-public-transport",name:"Municipality of Tirana - Public Transport (Open Labs GeoPortal) (overlay)",type:"tms",template:"https://geoportal.openlabs.cc/mapcache/tms/1.0.0/public-transport@GoogleMapsCompatibleExtended/{zoom}/{x}/{-y}.png",endDate:"2017-01-01T00:00:00.000Z",startDate:"2017-01-01T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[19.73762,41.30154],[19.88628,41.27213],[19.86877,41.38582],[19.68338,41.3732],[19.73762,41.30154]]],terms_url:"https://geoportal.openlabs.cc/",terms_text:"Data provided by the Muncipality of Tirana hosted by Open Labs",description:"Bus stops & lines provided by the Muncipality of Tirana hosted by Open Labs",overlay:true},{id:"openlabs-geoportal-tirana",name:"Municipality of Tirana (Open Labs GeoPortal)",type:"tms",template:"https://geoportal.openlabs.cc/mapcache/tms/1.0.0/tirana@GoogleMapsCompatibleExtended/{zoom}/{x}/{-y}.png",endDate:"2017-01-01T00:00:00.000Z",startDate:"2017-01-01T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[19.70226,41.1404],[19.77573,41.11868],[19.86431,41.12126],[20.24986,41.3495],[20.03082,41.41184],[19.92577,41.5204],[19.88869,41.50755],[19.88937,41.42265],[19.81659,41.46177],[19.7335,41.43037],[19.74174,41.37887],[19.65797,41.37475],[19.57214,41.24322],[19.61815,41.22567],[19.67171,41.22722],[19.70226,41.1404]]],terms_url:"https://geoportal.openlabs.cc",terms_text:"Data provided by the Muncipality of Tirana hosted by Open Labs",description:"Streets & Builings provided by the Muncipality of Tirana hosted by Open Labs"},{id:"USDA-NAIP",name:"National Agriculture Imagery Program",type:"wms",template:"https://gis.apfo.usda.gov/arcgis/services/NAIP/USDA_CONUS_PRIME/ImageServer/WMSServer?FORMAT=image/jpeg&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[12,20],polygon:[[[-123.25493,48.7529],[-123.25493,48.55923],[-123.19222,48.55923],[-123.19222,48.43484],[-122.94196,48.43484],[-122.94196,48.37208],[-122.88062,48.37208],[-122.88062,48.30948],[-122.81676,48.30948],[-122.81676,48.19046],[-123.00411,48.19046],[-123.00411,48.12759],[-123.05842,48.12759],[-123.05842,48.19051],[-123.25411,48.19051],[-123.25411,48.1275],[-123.37066,48.1275],[-123.37066,48.19084],[-124.05826,48.19084],[-124.05826,48.25344],[-124.18152,48.25344],[-124.18152,48.31647],[-124.43191,48.31647],[-124.43191,48.37826],[-124.55646,48.37826],[-124.55646,48.44083],[-124.75551,48.44083],[-124.75551,48.1915],[-124.81853,48.1915],[-124.81853,48.12284],[-124.7553,48.12284],[-124.7553,47.55353],[-124.38121,47.55353],[-124.38121,47.12187],[-124.19289,47.12187],[-124.19289,43.75694],[-124.44434,43.75694],[-124.44434,43.14256],[-124.63989,43.14256],[-124.63989,42.61945],[-124.44385,42.61945],[-124.44385,39.80807],[-123.88157,39.80807],[-123.88157,39.11028],[-123.75805,39.11028],[-123.75805,38.49688],[-123.27028,38.49688],[-123.27028,37.93319],[-122.81481,37.93319],[-122.81481,37.80196],[-122.56643,37.80196],[-122.56643,36.93196],[-121.8784,36.93196],[-121.8784,36.68976],[-122.00347,36.68976],[-122.00347,36.43411],[-121.94142,36.43411],[-121.94142,35.92976],[-121.5041,35.92976],[-121.5041,35.81003],[-121.37903,35.81003],[-121.37903,35.42392],[-120.94265,35.42392],[-120.94265,35.18497],[-120.8172,35.18497],[-120.8172,35.12199],[-120.69184,35.12199],[-120.69184,34.49668],[-120.50459,34.49668],[-120.50459,34.43397],[-120.00788,34.43397],[-120.00788,34.36826],[-119.52835,34.36826],[-119.52835,34.05764],[-119.0061,34.05764],[-119.0061,33.99753],[-118.50463,33.99753],[-118.50463,33.86946],[-118.44132,33.86946],[-118.44132,33.68653],[-118.06691,33.68653],[-118.06691,33.30638],[-117.503,33.30638],[-117.503,33.05003],[-117.31882,33.05003],[-117.31882,32.62059],[-117.1917,32.62059],[-117.1917,32.49746],[-116.7465,32.49746],[-116.7465,32.56092],[-115.99701,32.56092],[-115.99701,32.62649],[-114.88081,32.62649],[-114.88081,32.43408],[-114.62945,32.43408],[-114.62945,32.37316],[-114.44474,32.37316],[-114.44474,32.30754],[-114.25576,32.30754],[-114.25576,32.24446],[-114.06803,32.24446],[-114.06803,32.18291],[-113.81665,32.18291],[-113.81665,32.12076],[-113.63074,32.12076],[-113.63074,32.05651],[-113.44175,32.05651],[-113.44175,31.99844],[-113.2546,31.99844],[-113.2546,31.93254],[-113.06807,31.93254],[-113.06807,31.87181],[-112.81611,31.87181],[-112.81611,31.81042],[-112.63088,31.81042],[-112.63088,31.74647],[-112.44189,31.74647],[-112.44189,31.6856],[-112.25719,31.6856],[-112.25719,31.62104],[-112.00338,31.62104],[-112.00338,31.55958],[-111.81562,31.55958],[-111.81562,31.49702],[-111.62786,31.49702],[-111.62786,31.43399],[-111.4419,31.43399],[-111.4419,31.37339],[-111.25597,31.37339],[-111.25597,31.31132],[-108.18458,31.31132],[-108.18458,31.74595],[-106.50651,31.74595],[-106.50651,31.68423],[-106.37973,31.68423],[-106.37973,31.62175],[-106.31743,31.62175],[-106.31743,31.49682],[-106.25518,31.49682],[-106.25518,31.43449],[-106.19247,31.43449],[-106.19247,31.37213],[-106.00392,31.37213],[-106.00392,31.30933],[-105.94166,31.30933],[-105.94166,31.24575],[-105.87982,31.24575],[-105.87982,31.18362],[-105.81623,31.18362],[-105.81623,31.12072],[-105.69212,31.12072],[-105.69212,31.05848],[-105.63029,31.05848],[-105.63029,30.93283],[-105.50444,30.93283],[-105.50444,30.87159],[-105.4413,30.87159],[-105.4413,30.80846],[-105.37815,30.80846],[-105.37815,30.74718],[-105.19047,30.74718],[-105.19047,30.68432],[-105.12862,30.68432],[-105.12862,30.61997],[-105.00365,30.61997],[-105.00365,30.55891],[-104.9418,30.55891],[-104.9418,30.49632],[-104.8782,30.49632],[-104.8782,30.30983],[-104.81553,30.30983],[-104.81553,30.24783],[-104.75361,30.24783],[-104.75361,29.93539],[-104.69095,29.93539],[-104.69095,29.80902],[-104.62913,29.80902],[-104.62913,29.68436],[-104.56599,29.68436],[-104.56599,29.62235],[-104.50372,29.62235],[-104.50372,29.55954],[-104.44101,29.55954],[-104.44101,29.49748],[-104.25376,29.49748],[-104.25376,29.37167],[-104.1292,29.37167],[-104.1292,29.30916],[-104.06887,29.30916],[-104.06887,29.24673],[-103.81873,29.24673],[-103.81873,29.18431],[-103.75574,29.18431],[-103.75574,29.12232],[-103.56675,29.12232],[-103.56675,29.05981],[-103.50498,29.05981],[-103.50498,28.99675],[-103.31658,28.99675],[-103.31658,28.93469],[-103.05976,28.93469],[-103.05976,29.0593],[-102.99797,29.0593],[-102.99797,29.12129],[-102.93314,29.12129],[-102.93314,29.18486],[-102.8096,29.18486],[-102.8096,29.25262],[-102.87013,29.25262],[-102.87013,29.3081],[-102.80967,29.3081],[-102.80967,29.37155],[-102.74757,29.37155],[-102.74757,29.55819],[-102.68455,29.55819],[-102.68455,29.68477],[-102.49678,29.68477],[-102.49678,29.74577],[-102.30866,29.74577],[-102.30866,29.80866],[-102.19093,29.80866],[-102.19093,29.74601],[-101.50499,29.74601],[-101.50499,29.68468],[-101.38058,29.68468],[-101.38058,29.55945],[-101.31751,29.55945],[-101.31751,29.49589],[-101.19101,29.49589],[-101.19101,29.43261],[-101.0675,29.43261],[-101.0675,29.30881],[-100.94189,29.30881],[-100.94189,29.24562],[-100.81673,29.24562],[-100.81673,29.11904],[-100.75227,29.11904],[-100.75227,29.05782],[-100.69254,29.05782],[-100.69254,28.87204],[-100.62902,28.87204],[-100.62902,28.80954],[-100.56799,28.80954],[-100.56799,28.62255],[-100.50404,28.62255],[-100.50404,28.55838],[-100.44218,28.55838],[-100.44218,28.49683],[-100.37943,28.49683],[-100.37943,28.30929],[-100.31719,28.30929],[-100.31719,28.18357],[-100.25448,28.18357],[-100.25448,28.12139],[-100.12823,28.12139],[-100.12823,28.05921],[-100.06595,28.05921],[-100.06595,27.99661],[-100.00239,27.99661],[-100.00239,27.93322],[-99.94265,27.93322],[-99.94265,27.74547],[-99.81685,27.74547],[-99.81685,27.68343],[-99.75413,27.68343],[-99.75413,27.62215],[-99.62916,27.62215],[-99.62916,27.5589],[-99.56728,27.5589],[-99.56728,27.43538],[-99.50418,27.43538],[-99.50418,27.3774],[-99.56718,27.3774],[-99.56718,27.24637],[-99.50498,27.24637],[-99.50498,26.99656],[-99.44274,26.99656],[-99.44274,26.8728],[-99.38006,26.8728],[-99.38006,26.80682],[-99.31907,26.80682],[-99.31907,26.74736],[-99.25375,26.74736],[-99.25375,26.62101],[-99.19106,26.62101],[-99.19106,26.49567],[-99.13006,26.49567],[-99.13006,26.37138],[-99.00295,26.37138],[-99.00295,26.30938],[-98.81657,26.30938],[-98.81657,26.24578],[-98.69201,26.24578],[-98.69201,26.18371],[-98.44409,26.18371],[-98.44409,26.12172],[-98.38232,26.12172],[-98.38232,26.05965],[-98.25327,26.05965],[-98.25327,25.99869],[-98.01091,25.99869],[-98.01091,25.99323],[-97.69323,25.99323],[-97.69323,25.93341],[-97.63139,25.93341],[-97.63139,25.86959],[-97.50468,25.86959],[-97.50468,25.80735],[-97.30834,25.80735],[-97.30834,25.87312],[-97.24563,25.87312],[-97.24563,25.93537],[-97.11389,25.93537],[-97.11389,27.68092],[-97.0571,27.68092],[-97.0571,27.81082],[-95.58108,27.81082],[-95.58108,28.74688],[-94.27104,28.74688],[-94.27104,29.55941],[-92.50299,29.55941],[-92.50299,29.49748],[-91.87762,29.49748],[-91.87762,29.3727],[-91.37842,29.3727],[-91.37842,29.24683],[-91.3154,29.24683],[-91.3154,29.18443],[-91.12947,29.18443],[-91.12947,29.12326],[-91.00526,29.12326],[-91.00526,28.99684],[-89.45002,28.99684],[-89.45002,28.86774],[-88.81043,28.86774],[-88.81043,30.18419],[-85.87915,30.18419],[-85.87915,29.5455],[-84.83681,29.5455],[-84.83681,29.62252],[-84.74828,29.62252],[-84.74828,29.68362],[-84.68589,29.68362],[-84.68589,29.74684],[-83.6297,29.74684],[-83.6297,29.43244],[-83.31749,29.43244],[-83.31749,29.05794],[-82.87966,29.05794],[-82.87966,27.74535],[-82.81828,27.74535],[-82.81828,26.92909],[-82.37968,26.92909],[-82.37968,26.36942],[-81.87771,26.36942],[-81.87771,25.80597],[-81.50369,25.80597],[-81.50369,25.74748],[-81.44055,25.74748],[-81.44055,25.68515],[-81.31559,25.68515],[-81.31559,25.5601],[-81.25385,25.5601],[-81.25385,25.43424],[-81.1902,25.43424],[-81.1902,25.12343],[-81.12881,25.12343],[-81.12881,25.06194],[-81.06492,25.06194],[-81.06492,24.81578],[-81.62895,24.81578],[-81.62895,24.75384],[-81.69072,24.75384],[-81.69072,24.68994],[-81.81732,24.68994],[-81.81732,24.62792],[-82.191,24.62792],[-82.191,24.49629],[-81.62166,24.49629],[-81.62166,24.55948],[-81.37201,24.55948],[-81.37201,24.62207],[-81.05933,24.62207],[-81.05933,24.68483],[-80.93471,24.68483],[-80.93471,24.74748],[-80.74711,24.74748],[-80.74711,24.81006],[-80.36299,24.81006],[-80.36299,25.11759],[-80.12234,25.11759],[-80.12234,25.74724],[-80.05885,25.74724],[-80.05885,26.37083],[-79.99584,26.37083],[-79.99584,26.9398],[-80.05873,26.9398],[-80.05873,27.12775],[-80.12263,27.12775],[-80.12263,27.25343],[-80.1847,27.25343],[-80.1847,27.37812],[-80.24617,27.37812],[-80.24617,27.56587],[-80.30948,27.56587],[-80.30948,27.75303],[-80.37215,27.75303],[-80.37215,27.87745],[-80.43515,27.87745],[-80.43515,28.00334],[-80.49661,28.00334],[-80.49661,28.12773],[-80.55872,28.12773],[-80.55872,28.37235],[-80.49663,28.37235],[-80.49663,29.51603],[-81.12136,29.51603],[-81.12136,31.6847],[-80.60187,31.6847],[-80.60187,32.24753],[-79.4921,32.24753],[-79.4921,32.99703],[-79.11165,32.99703],[-79.11165,33.37295],[-78.61536,33.37295],[-78.61536,33.80976],[-77.9317,33.80976],[-77.9317,33.87182],[-77.86923,33.87182],[-77.86923,34.05525],[-77.68264,34.05525],[-77.68264,34.29746],[-77.24535,34.29746],[-77.24535,34.55986],[-76.49733,34.55986],[-76.49733,34.6228],[-76.43376,34.6228],[-76.43376,34.68493],[-76.37321,34.68493],[-76.37321,34.74677],[-76.30594,34.74677],[-76.30594,34.80855],[-76.2468,34.80855],[-76.2468,34.87284],[-76.18259,34.87284],[-76.18259,34.93353],[-76.12081,34.93353],[-76.12081,34.99524],[-75.9979,34.99524],[-75.9979,35.05782],[-75.87034,35.05782],[-75.87034,35.12191],[-75.74622,35.12191],[-75.74622,35.18189],[-75.49297,35.18189],[-75.49297,35.3083],[-75.43257,35.3083],[-75.43257,35.75425],[-75.49699,35.75425],[-75.49699,37.81056],[-75.3083,37.81056],[-75.3083,37.87201],[-75.2456,37.87201],[-75.2456,37.99548],[-75.18288,37.99548],[-75.18288,38.05851],[-75.11848,38.05851],[-75.11848,38.24691],[-75.05921,38.24691],[-75.05921,38.37043],[-74.99481,38.37043],[-74.99481,38.87184],[-74.48783,38.87184],[-74.48783,39.30894],[-74.17663,39.30894],[-74.17663,39.62247],[-74.0567,39.62247],[-74.0567,39.93318],[-73.9959,39.93318],[-73.9959,40.18549],[-73.93416,40.18549],[-73.93416,40.49595],[-73.8723,40.49595],[-73.8723,40.55271],[-71.80745,40.55271],[-71.80745,41.3088],[-70.88251,41.3088],[-70.88251,41.18498],[-70.74619,41.18498],[-70.74619,41.30919],[-70.43376,41.30919],[-70.43376,41.49639],[-69.93343,41.49639],[-69.93343,41.62308],[-69.86986,41.62308],[-69.86986,41.87769],[-69.93579,41.87769],[-69.93579,42.00323],[-69.99758,42.00323],[-69.99758,42.06502],[-70.06061,42.06502],[-70.06061,42.12943],[-70.55729,42.12943],[-70.55729,43.24871],[-70.49741,43.24871],[-70.49741,43.30922],[-70.37042,43.30922],[-70.37042,43.37196],[-70.30857,43.37196],[-70.30857,43.49699],[-70.18392,43.49699],[-70.18392,43.62235],[-70.05758,43.62235],[-70.05758,43.68502],[-69.74552,43.68502],[-69.74552,43.74766],[-69.24728,43.74766],[-69.24728,43.8107],[-69.05607,43.8107],[-69.05607,43.87172],[-68.99505,43.87172],[-68.99505,43.9982],[-68.49637,43.9982],[-68.49637,44.05974],[-68.3081,44.05974],[-68.3081,44.12214],[-68.18518,44.12214],[-68.18518,44.30814],[-67.9956,44.30814],[-67.9956,44.37275],[-67.8103,44.37275],[-67.8103,44.43518],[-67.49653,44.43518],[-67.49653,44.49688],[-67.37102,44.49688],[-67.37102,44.56006],[-67.18488,44.56006],[-67.18488,44.62133],[-67.12212,44.62133],[-67.12212,44.68679],[-67.05936,44.68679],[-67.05936,44.74737],[-66.93111,44.74737],[-66.93111,44.94066],[-66.99468,44.94066],[-66.99468,45.00245],[-67.05958,45.00245],[-67.05958,45.12734],[-67.1202,45.12734],[-67.1202,45.19101],[-67.24698,45.19101],[-67.24698,45.25344],[-67.31775,45.25344],[-67.31775,45.18984],[-67.37075,45.18984],[-67.37075,45.2534],[-67.43269,45.2534],[-67.43269,45.30834],[-67.37086,45.30834],[-67.37086,45.4397],[-67.43056,45.4397],[-67.43056,45.49501],[-67.37099,45.49501],[-67.37099,45.62645],[-67.6215,45.62645],[-67.6215,45.68961],[-67.68383,45.68961],[-67.68383,45.75326],[-67.74621,45.75326],[-67.74621,47.12682],[-67.87001,47.12682],[-67.87001,47.19003],[-67.93238,47.19003],[-67.93238,47.25397],[-67.99594,47.25397],[-67.99594,47.31497],[-68.12067,47.31497],[-68.12067,47.37808],[-68.44232,47.37808],[-68.44232,47.31661],[-68.63143,47.31661],[-68.63143,47.25447],[-68.9978,47.25447],[-68.9978,47.43989],[-69.06072,47.43989],[-69.06072,47.50476],[-69.25381,47.50476],[-69.25381,47.43981],[-69.31793,47.43981],[-69.31793,47.3786],[-69.44385,47.3786],[-69.44385,47.31563],[-69.50382,47.31563],[-69.50382,47.25258],[-69.56678,47.25258],[-69.56678,47.19109],[-69.63035,47.19109],[-69.63035,47.1287],[-69.69331,47.1287],[-69.69331,47.06543],[-69.75571,47.06543],[-69.75571,47.00428],[-69.81804,47.00428],[-69.81804,46.94153],[-69.8804,46.94153],[-69.8804,46.87925],[-69.94217,46.87925],[-69.94217,46.81774],[-70.00631,46.81774],[-70.00631,46.69203],[-70.07043,46.69203],[-70.07043,46.44259],[-70.19459,46.44259],[-70.19459,46.37859],[-70.2562,46.37859],[-70.2562,46.31526],[-70.32037,46.31526],[-70.32037,46.06512],[-70.3815,46.06512],[-70.3815,45.93552],[-70.32016,45.93552],[-70.32016,45.87948],[-70.44931,45.87948],[-70.44931,45.75387],[-70.507,45.75387],[-70.507,45.69169],[-70.63166,45.69169],[-70.63166,45.62916],[-70.75755,45.62916],[-70.75755,45.44147],[-70.88099,45.44147],[-70.88099,45.37806],[-71.13328,45.37806],[-71.13328,45.31515],[-71.38303,45.31515],[-71.38303,45.25342],[-71.50764,45.25342],[-71.50764,45.06557],[-73.94189,45.06557],[-73.94189,45.00312],[-74.74697,45.00312],[-74.74697,45.0649],[-74.8801,45.0649],[-74.8801,45.0029],[-75.06625,45.0029],[-75.06625,44.94152],[-75.25394,44.94152],[-75.25394,44.8776],[-75.37896,44.8776],[-75.37896,44.81535],[-75.44313,44.81535],[-75.44313,44.75361],[-75.56666,44.75361],[-75.56666,44.69099],[-75.62902,44.69099],[-75.62902,44.6285],[-75.75405,44.6285],[-75.75405,44.56638],[-75.81731,44.56638],[-75.81731,44.50289],[-75.87995,44.50289],[-75.87995,44.37849],[-76.13003,44.37849],[-76.13003,44.31592],[-76.1927,44.31592],[-76.1927,44.25344],[-76.31826,44.25344],[-76.31826,44.19167],[-76.3793,44.19167],[-76.3793,44.06537],[-76.44276,44.06537],[-76.44276,43.99638],[-76.31703,43.99638],[-76.31703,43.94146],[-76.50766,43.94146],[-76.50766,43.87233],[-76.383,43.87233],[-76.383,43.80919],[-76.25341,43.80919],[-76.25341,43.56652],[-76.50648,43.56652],[-76.50648,43.50339],[-76.63312,43.50339],[-76.63312,43.44323],[-76.69511,43.44323],[-76.69511,43.37869],[-76.81778,43.37869],[-76.81778,43.31807],[-77.682,43.31807],[-77.682,43.37894],[-78.05659,43.37894],[-78.05659,43.43969],[-78.43897,43.43969],[-78.43897,43.37944],[-78.88034,43.37944],[-78.88034,43.31497],[-79.12989,43.31497],[-79.12989,43.24293],[-79.06696,43.24293],[-79.06696,43.12999],[-79.12989,43.12999],[-79.12989,43.05773],[-79.07126,43.05773],[-79.07126,42.92949],[-78.94326,42.92949],[-78.94326,42.75422],[-79.06944,42.75422],[-79.06944,42.69416],[-79.13344,42.69416],[-79.13344,42.6297],[-79.19475,42.6297],[-79.19475,42.56635],[-79.37868,42.56635],[-79.37868,42.50334],[-79.4443,42.50334],[-79.4443,42.44106],[-79.56799,42.44106],[-79.56799,42.37753],[-79.69062,42.37753],[-79.69062,42.31711],[-79.81646,42.31711],[-79.81646,42.25345],[-80.00524,42.25345],[-80.00524,42.19092],[-80.19168,42.19092],[-80.19168,42.12726],[-80.3168,42.12726],[-80.3168,42.06699],[-80.50632,42.06699],[-80.50632,42.00343],[-80.69305,42.00343],[-80.69305,41.94151],[-80.94404,41.94151],[-80.94404,41.87812],[-81.19427,41.87812],[-81.19427,41.81665],[-81.31901,41.81665],[-81.31901,41.75455],[-81.44184,41.75455],[-81.44184,41.69096],[-81.50535,41.69096],[-81.50535,41.63016],[-82.74701,41.63016],[-82.74701,41.75369],[-82.88391,41.75369],[-82.88391,41.56561],[-82.99572,41.56561],[-82.99572,41.62704],[-83.12578,41.62704],[-83.12578,41.68784],[-83.24747,41.68784],[-83.24747,41.75369],[-83.37373,41.75369],[-83.37373,41.80928],[-83.3106,41.80928],[-83.3106,41.87161],[-83.24747,41.87161],[-83.24747,41.93614],[-83.18434,41.93614],[-83.18434,41.99609],[-83.12077,41.99609],[-83.12077,42.24648],[-83.05892,42.24648],[-83.05892,42.30896],[-82.86853,42.30896],[-82.86853,42.37177],[-82.80722,42.37177],[-82.80722,42.55855],[-82.75537,42.55855],[-82.75537,42.49549],[-82.5599,42.49549],[-82.5599,42.55855],[-82.49678,42.55855],[-82.49678,42.68336],[-82.43289,42.68336],[-82.43289,42.93422],[-82.37006,42.93422],[-82.37006,43.06481],[-82.43289,43.06481],[-82.43289,43.19176],[-82.49475,43.19176],[-82.49475,43.50346],[-82.55713,43.50346],[-82.55713,43.81609],[-82.61979,43.81609],[-82.61979,43.94221],[-82.68395,43.94221],[-82.68395,44.00226],[-82.74653,44.00226],[-82.74653,44.06705],[-82.87087,44.06705],[-82.87087,44.12919],[-83.00852,44.12919],[-83.00852,44.06648],[-83.13361,44.06648],[-83.13361,44.00539],[-83.24145,44.00539],[-83.24145,44.9962],[-83.18061,44.9962],[-83.18061,45.0673],[-83.24552,45.0673],[-83.24552,45.12874],[-83.30659,45.12874],[-83.30659,45.25515],[-83.37061,45.25515],[-83.37061,45.31659],[-83.43256,45.31659],[-83.43256,45.37921],[-83.61784,45.37921],[-83.61784,45.44197],[-83.80843,45.44197],[-83.80843,45.50362],[-84.05507,45.50362],[-84.05507,45.56479],[-84.12352,45.56479],[-84.12352,45.62878],[-84.18075,45.62878],[-84.18075,45.69147],[-84.31116,45.69147],[-84.31116,45.93371],[-83.821,45.93371],[-83.821,45.87251],[-83.49681,45.87251],[-83.49681,45.93371],[-83.43381,45.93371],[-83.43381,46.00169],[-83.49627,46.00169],[-83.49627,46.06682],[-83.56,46.06682],[-83.56,46.12616],[-83.99546,46.12616],[-83.99546,46.19317],[-84.05918,46.19317],[-84.05918,46.3815],[-84.11526,46.3815],[-84.11526,46.49536],[-84.05918,46.49536],[-84.05918,46.56827],[-84.25795,46.56827],[-84.25795,46.50512],[-84.30719,46.50512],[-84.30719,46.56827],[-84.44154,46.56827],[-84.44154,46.50453],[-84.99657,46.50453],[-84.99657,46.68429],[-84.92982,46.68429],[-84.92982,46.81808],[-85.31659,46.81808],[-85.31659,46.75358],[-87.55626,46.75358],[-87.55626,47.44074],[-87.68254,47.44074],[-87.68254,47.50356],[-88.25607,47.50356],[-88.25607,47.44337],[-88.44174,47.44337],[-88.44174,47.37899],[-88.50683,47.37899],[-88.50683,47.31539],[-88.63128,47.31539],[-88.63128,47.25398],[-88.75696,47.25398],[-88.75696,47.19347],[-88.88383,47.19347],[-88.88383,47.12847],[-88.94342,47.12847],[-88.94342,47.06621],[-89.07087,47.06621],[-89.07087,47.00268],[-89.25656,47.00268],[-89.25656,46.94108],[-90.36777,46.94108],[-90.36777,47.68448],[-90.307,47.68448],[-90.307,47.74602],[-89.99486,47.74602],[-89.99486,47.80827],[-89.80486,47.80827],[-89.80486,47.87006],[-89.67977,47.87006],[-89.67977,47.93396],[-89.49338,47.93396],[-89.49338,47.9958],[-89.42847,47.9958],[-89.42847,48.06564],[-89.99327,48.06564],[-89.99327,48.1283],[-90.74559,48.1283],[-90.74559,48.18931],[-90.80873,48.18931],[-90.80873,48.25221],[-91.06776,48.25221],[-91.06776,48.19167],[-91.19462,48.19167],[-91.19462,48.1279],[-91.68142,48.1279],[-91.68142,48.2526],[-91.93219,48.2526],[-91.93219,48.31425],[-91.99297,48.31425],[-91.99297,48.37808],[-92.31894,48.37808],[-92.31894,48.25291],[-92.37322,48.25291],[-92.37322,48.31534],[-92.43223,48.31534],[-92.43223,48.44114],[-92.49772,48.44114],[-92.49772,48.50178],[-92.56794,48.50178],[-92.56794,48.43958],[-92.62105,48.43958],[-92.62105,48.56508],[-92.80868,48.56508],[-92.80868,48.62869],[-92.80868,48.62674],[-92.93318,48.62674],[-92.93318,48.69221],[-93.00517,48.69221],[-93.00517,48.6283],[-93.12259,48.6283],[-93.12259,48.69221],[-93.31908,48.69221],[-93.31908,48.62674],[-93.50495,48.62674],[-93.50495,48.56352],[-93.74746,48.56352],[-93.74746,48.62674],[-93.81355,48.62674],[-93.81355,48.68988],[-94.24531,48.68988],[-94.24531,48.75543],[-94.61832,48.75543],[-94.61832,48.94104],[-94.6809,48.94104],[-94.6809,49.00297],[-94.74415,49.00297],[-94.74415,49.25361],[-94.80841,49.25361],[-94.80841,49.37841],[-95.11924,49.37841],[-95.11924,49.44253],[-95.19343,49.44253],[-95.19343,49.00353],[-96.87069,49.00353],[-96.87069,49.06561],[-99.00493,49.06561],[-99.00493,49.00507],[-109.36993,49.00507],[-109.36993,49.06682],[-109.50587,49.06682],[-109.50587,49.00507],[-114.183,49.00507],[-114.183,49.06873],[-114.75787,49.06873],[-114.75787,49.00507],[-115.43373,49.00507],[-115.43373,49.06714],[-116.50627,49.06714],[-116.50627,49.00507],[-117.30895,49.00507],[-117.30895,49.06598],[-119.88295,49.06598],[-119.88295,49.00507],[-120.12086,49.00507],[-120.12086,49.06784],[-121.44516,49.06784],[-121.44516,49.00507],[-121.93118,49.00507],[-121.93118,49.06561],[-122.81748,49.06561],[-122.81748,49.00291],[-122.87952,49.00291],[-122.87952,48.9347],[-122.81746,48.9347],[-122.81746,48.8102],[-122.75389,48.8102],[-122.75389,48.75338],[-122.87129,48.75338],[-122.87129,48.81539],[-123.00554,48.81539],[-123.00554,48.75295],[-123.12969,48.75295],[-123.12969,48.69022],[-123.18382,48.69022],[-123.18382,48.7529],[-123.25493,48.7529]],[[-122.93417,37.75215],[-122.93475,37.6842],[-123.0679,37.6849],[-123.06737,37.74753],[-123.12926,37.74785],[-123.12869,37.81569],[-123.05907,37.81532],[-123.05959,37.75281],[-122.93417,37.75215]],[[-71.62995,41.25409],[-71.49665,41.25414],[-71.49656,41.12297],[-71.62986,41.12291],[-71.62995,41.25409]],[[-70.31843,41.37752],[-70.31834,41.24482],[-70.19066,41.24487],[-70.19062,41.1886],[-69.9336,41.1887],[-69.93373,41.37919],[-69.99507,41.37917],[-69.99511,41.44316],[-70.07078,41.44313],[-70.0707,41.31449],[-70.24617,41.31443],[-70.24621,41.37755],[-70.31843,41.37752]],[[-68.94034,43.94041],[-68.68569,43.9405],[-68.68565,43.87218],[-68.74654,43.87216],[-68.7465,43.81025],[-68.80908,43.81023],[-68.80903,43.74673],[-68.87731,43.7467],[-68.87735,43.81178],[-68.94025,43.81176],[-68.94034,43.94041]],[[-123.12915,49.06451],[-122.99542,49.06451],[-122.99542,48.93432],[-123.12915,48.93432],[-123.12915,49.06451]],[[-82.94071,24.75359],[-82.87194,24.75359],[-82.87194,24.69057],[-82.74462,24.69057],[-82.74462,24.62146],[-82.8088,24.62146],[-82.8088,24.55949],[-82.94071,24.55949],[-82.94071,24.75359]]],description:"The most recent year of DOQQs from the National Agriculture Imagery Program (NAIP) for each state in the contiguous United States.",icon:"https://osmlab.github.io/editor-layer-index/sources/north-america/us/USDA.png"},{id:"NC-US",name:"NC Latest Orthoimagery",type:"wms",template:"https://services.nconemap.gov/secure/services/Imagery/Orthoimagery_Latest/ImageServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2014-01-01T00:00:00.000Z",startDate:"2010-01-01T00:00:00.000Z",polygon:[[[-81.6792,36.5974],[-80.25359,36.54793],[-75.8409,36.5671],[-75.4323,35.6441],[-75.50475,35.18806],[-75.70525,35.17684],[-76.14745,34.94077],[-76.53472,34.55487],[-76.69676,34.66789],[-77.27904,34.53224],[-77.68828,34.26482],[-77.9435,33.8269],[-78.21288,33.89402],[-78.5301,33.8304],[-79.6693,34.7916],[-80.8122,34.8085],[-80.84685,34.96329],[-80.95122,35.05552],[-81.06383,35.01729],[-81.07482,35.13417],[-82.3632,35.1805],[-82.9989,34.9919],[-84.3333,34.9767],[-84.27184,35.28229],[-84.09056,35.27332],[-83.91478,35.53301],[-83.55498,35.5911],[-83.2556,35.73392],[-82.98644,35.81414],[-82.92327,35.96767],[-82.67882,36.0854],[-82.60192,36.08984],[-82.536,35.96989],[-82.35472,36.14752],[-82.04436,36.14309],[-81.90428,36.33803],[-81.74224,36.37342],[-81.6792,36.5974]]],description:"Most recent true color imagery for the state of North Carolina. The imagery has a pixel resolution of 6 inches and is comprised of imagery flown in 2010, 2012, 2013, and 2014"},{id:"landsat-niger-2012_10",name:"Niger Delta Oct 2012 Landsat",type:"tms",template:"http://{switch:a,b,c,d}.imagery.paulnorman.ca/tiles/niger_oct_2012_321/{zoom}/{x}/{y}.png",endDate:"2012-10-01T00:00:00.000Z",startDate:"2012-10-01T00:00:00.000Z",zoomExtent:[1,13],polygon:[[[-6.92922,13.78574],[-5.13295,13.51884],[-5.07802,13.74039],[-3.60036,13.52418],[-3.54543,13.74039],[-2.06227,13.52685],[-1.3564,16.58454],[-3.17464,16.85285],[-3.22408,16.62665],[-4.72371,16.85022],[-4.76766,16.63455],[-6.27553,16.84759],[-6.92922,13.78574]]]},{id:"img.nj.gov-Infrared2015",name:"NJ 2015 Aerial Imagery (Infrared)",type:"wms",template:"https://img.nj.gov/imagerywms/Infrared2015?FORMAT=image/png&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&SRS={proj}&WIDTH={width}&HEIGHT={height}&LAYERS=Infrared2015&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-05-03T00:00:00.000Z",startDate:"2015-03-29T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[-74.86599,40.08543],[-74.93534,40.07256],[-75.05653,40.00868],[-75.14236,39.95791],[-75.14456,39.88322],[-75.18515,39.88042],[-75.24499,39.85486],[-75.33339,39.8495],[-75.41531,39.80156],[-75.45131,39.78304],[-75.57744,39.62346],[-75.54245,39.56827],[-75.57847,39.48183],[-74.91678,38.84647],[-74.31702,39.38739],[-74.06708,39.75155],[-73.92141,40.49222],[-74.2382,40.49378],[-74.23859,40.54916],[-74.20211,40.54924],[-74.20228,40.57648],[-74.18406,40.57609],[-74.18436,40.63146],[-74.07587,40.63078],[-74.07532,40.64457],[-74.02124,40.65811],[-74.02081,40.69919],[-74.00265,40.69929],[-74.00247,40.74037],[-73.98434,40.74026],[-73.98402,40.78145],[-73.96591,40.78158],[-73.96597,40.80868],[-73.94777,40.80861],[-73.94769,40.82232],[-73.92966,40.82225],[-73.92906,40.86355],[-73.91104,40.86329],[-73.91061,40.91838],[-73.8923,40.91831],[-73.89215,40.95961],[-73.87413,40.95942],[-73.87386,40.99251],[-74.70601,41.36513],[-74.75716,41.34769],[-74.79801,41.32268],[-74.84024,41.27864],[-74.90547,41.17038],[-74.98152,41.1126],[-75.03902,41.03819],[-75.13515,40.99441],[-75.13773,40.97309],[-75.05705,40.86757],[-75.06846,40.85037],[-75.09687,40.85096],[-75.10099,40.83927],[-75.09018,40.82238],[-75.1367,40.77729],[-75.1724,40.78067],[-75.19833,40.75389],[-75.20506,40.69131],[-75.20373,40.61832],[-75.19764,40.57367],[-75.16777,40.55907],[-75.10237,40.56702],[-75.06906,40.5365],[-75.07421,40.45505],[-75.06134,40.4165],[-75.02684,40.40252],[-74.9671,40.3952],[-74.94461,40.33817],[-74.86839,40.29157],[-74.84402,40.24796],[-74.77552,40.21428],[-74.76334,40.19172],[-74.72918,40.16392],[-74.72609,40.14949],[-74.78805,40.12468],[-74.8229,40.13033],[-74.86599,40.08543]]],terms_url:"https://njgin.state.nj.us/NJ_NJGINExplorer/ShowMetadata.jsp?docId=188471FF-2803-4145-A5AD-605DE86D3B4D",terms_text:"NJ Office of Information Technology (NJOIT), Office of Geographic Information Systems (OGIS)",description:"Digital orthophotography of New Jersey, Near Infrared, 1 foot resolution"},{id:"img.nj.gov-Natural2015",name:"NJ 2015 Aerial Imagery (Natural Color)",type:"wms",template:"https://img.nj.gov/imagerywms/Natural2015?FORMAT=image/png&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&SRS={proj}&WIDTH={width}&HEIGHT={height}&LAYERS=Natural2015&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-05-03T00:00:00.000Z",startDate:"2015-03-29T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[-74.86599,40.08543],[-74.93534,40.07256],[-75.05653,40.00868],[-75.14236,39.95791],[-75.14456,39.88322],[-75.18515,39.88042],[-75.24499,39.85486],[-75.33339,39.8495],[-75.41531,39.80156],[-75.45131,39.78304],[-75.57744,39.62346],[-75.54245,39.56827],[-75.57847,39.48183],[-74.91678,38.84647],[-74.31702,39.38739],[-74.06708,39.75155],[-73.92141,40.49222],[-74.2382,40.49378],[-74.23859,40.54916],[-74.20211,40.54924],[-74.20228,40.57648],[-74.18406,40.57609],[-74.18436,40.63146],[-74.07587,40.63078],[-74.07532,40.64457],[-74.02124,40.65811],[-74.02081,40.69919],[-74.00265,40.69929],[-74.00247,40.74037],[-73.98434,40.74026],[-73.98402,40.78145],[-73.96591,40.78158],[-73.96597,40.80868],[-73.94777,40.80861],[-73.94769,40.82232],[-73.92966,40.82225],[-73.92906,40.86355],[-73.91104,40.86329],[-73.91061,40.91838],[-73.8923,40.91831],[-73.89215,40.95961],[-73.87413,40.95942],[-73.87386,40.99251],[-74.70601,41.36513],[-74.75716,41.34769],[-74.79801,41.32268],[-74.84024,41.27864],[-74.90547,41.17038],[-74.98152,41.1126],[-75.03902,41.03819],[-75.13515,40.99441],[-75.13773,40.97309],[-75.05705,40.86757],[-75.06846,40.85037],[-75.09687,40.85096],[-75.10099,40.83927],[-75.09018,40.82238],[-75.1367,40.77729],[-75.1724,40.78067],[-75.19833,40.75389],[-75.20506,40.69131],[-75.20373,40.61832],[-75.19764,40.57367],[-75.16777,40.55907],[-75.10237,40.56702],[-75.06906,40.5365],[-75.07421,40.45505],[-75.06134,40.4165],[-75.02684,40.40252],[-74.9671,40.3952],[-74.94461,40.33817],[-74.86839,40.29157],[-74.84402,40.24796],[-74.77552,40.21428],[-74.76334,40.19172],[-74.72918,40.16392],[-74.72609,40.14949],[-74.78805,40.12468],[-74.8229,40.13033],[-74.86599,40.08543]]],terms_url:"https://njgin.state.nj.us/NJ_NJGINExplorer/ShowMetadata.jsp?docId=188471FF-2803-4145-A5AD-605DE86D3B4D",terms_text:"NJ Office of Information Technology (NJOIT), Office of Geographic Information Systems (OGIS)",description:"Digital orthophotography of New Jersey, Natural Color, 1 foot resolution"},{id:"NLSC-EMAP5",name:"NLSC General Map with Contour line",type:"tms",template:"https://wmts.nlsc.gov.tw/wmts/EMAP5_OPENDATA/default/EPSG:3857/{zoom}/{y}/{x}",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[0,15],polygon:[[[121.2237,25.76997],[122.2251,26.60305],[122.9312,22.57058],[120.6771,20.72799],[118.2509,23.26265],[118.3036,23.30751],[118.1978,24.34453],[118.1036,24.36172],[118.2283,24.49486],[118.4416,24.55302],[118.6024,24.46068],[120.0474,25.38843],[119.8935,25.78169],[119.787,26.2048],[120.4578,26.53253],[121.2237,25.76997]]],terms_url:"https://maps.nlsc.gov.tw",terms_text:"© National Land Surveying and Mapping Center, Taiwan OGDL 1.0",description:"The emap from Taiwan National Land Surveying and Mapping Center",icon:"https://osmlab.github.io/editor-layer-index/sources/asia/tw/Taiwane-MapOpenData.png"},{id:"IBGE_Salvador_Streets",name:"Nomes de Ruas IBGE Salvador-BA",type:"tms",template:"https://api.mapbox.com/styles/v1/wille/cj8lp78dn62wl2rquim47qo0g/tiles/256/{zoom}/{x}/{y}?access_token=pk.eyJ1Ijoid2lsbGUiLCJhIjoicFNVWk5VWSJ9.hluCd0YGvYHNlFi_utWe2g",zoomExtent:[0,20],polygon:[[[-38.48974,-12.81113],[-38.54485,-13.01392],[-38.47755,-13.03466],[-38.33473,-12.94685],[-38.30006,-12.90669],[-38.33954,-12.90435],[-38.35482,-12.83021],[-38.38091,-12.82184],[-38.40717,-12.86754],[-38.46537,-12.81599],[-38.48974,-12.81113]]],description:"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - IBGE.",overlay:true},{id:"kelkkareitit",name:"Nordic snowmobile overlay",type:"tms",template:"https://tiles.kelkkareitit.fi/kelkkareitit/{zoom}/{x}/{y}.png",zoomExtent:[3,18],polygon:[[[27.53173,60.21799],[31.35496,62.51233],[31.63513,62.90773],[30.09154,64.91889],[30.21239,65.87473],[29.13573,66.90422],[30.19041,67.67609],[28.70726,68.42748],[29.02587,68.9505],[31.04735,69.53452],[31.78344,70.44784],[28.32274,71.32192],[23.76342,71.29023],[17.1826,69.99806],[12.10691,68.01581],[9.97556,64.85828],[4.13084,61.95963],[4.57029,59.00664],[6.21826,57.95859],[8.14086,57.8506],[10.41502,58.75682],[12.63702,56.0383],[12.7716,55.25095],[14.2932,55.19769],[18.58886,56.84297],[20.69823,59.3444],[27.53173,60.21799]]],terms_url:"https://kelkkareitit.fi/",terms_text:"© Kelkkareitit.fi",description:"Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)",icon:"https://kelkkareitit.fi/img/favicon.png",overlay:true},{id:"geovekst-nib",name:"Norway Orthophoto",type:"tms",template:"https://waapi.webatlas.no/maptiles/tiles/webatlas-orto-newup/wa_grid/{zoom}/{x}/{y}.jpeg?api_key=b8e36d51-119a-423b-b156-d744d54123d5",zoomExtent:[0,21],polygon:[[[11.53568,58.86659],[11.66192,58.89784],[11.7935,59.09471],[11.84243,59.239],[11.82877,59.34509],[11.71279,59.60387],[11.86205,59.63771],[11.95608,59.69196],[11.93389,59.86895],[12.17881,59.8786],[12.46948,60.03124],[12.55438,60.18972],[12.51237,60.31659],[12.61793,60.40065],[12.61883,60.51512],[12.25387,61.01106],[12.69195,61.04632],[12.90756,61.34802],[12.57493,61.57623],[12.42465,61.57175],[12.15233,61.72694],[12.31212,62.26512],[12.07078,62.61109],[12.14907,62.7455],[12.08883,62.89668],[12.23464,62.99952],[11.99225,63.26684],[12.23327,63.47505],[12.17971,63.57117],[12.69313,63.96344],[13.21378,64.0839],[13.99183,64.00514],[14.17035,64.18236],[14.13253,64.47516],[13.67658,64.58356],[14.02455,64.88119],[14.33572,65.11098],[14.51699,65.30365],[14.54177,65.67762],[14.63674,65.81299],[14.53903,66.12496],[15.03881,66.14245],[15.50033,66.27956],[15.39368,66.4795],[15.63473,66.59685],[16.04695,66.90283],[16.39832,67.03827],[16.41439,67.21036],[16.10744,67.43617],[16.16455,67.5087],[16.42318,67.52589],[16.5866,67.64528],[16.7471,67.90466],[17.34741,68.09995],[17.90583,67.95885],[18.16489,68.19424],[18.13721,68.52675],[18.40761,68.57059],[18.62222,68.49607],[18.98574,68.50591],[19.92752,68.34558],[20.24505,68.49201],[19.99237,68.55586],[20.21137,68.65685],[20.34848,68.79976],[20.31623,68.93227],[20.10322,69.0359],[20.55694,69.04926],[20.7206,69.10837],[21.06178,69.02541],[21.12098,69.10587],[21.01135,69.21086],[21.2824,69.30076],[21.62645,69.26589],[22.33512,68.81965],[22.37485,68.70596],[22.5377,68.73329],[22.80161,68.67674],[23.04635,68.67833],[23.16467,68.61903],[23.68789,68.70049],[23.79776,68.81592],[23.96804,68.82287],[24.17541,68.7314],[24.76043,68.63655],[24.8544,68.55285],[24.90827,68.54387],[24.93347,68.6025],[25.12435,68.62003],[25.1667,68.79008],[25.43334,68.87886],[25.62945,68.88103],[25.79589,69.01157],[25.73272,69.19428],[26.02249,69.66758],[26.56631,69.94207],[27.10601,69.89539],[27.63679,70.05317],[27.93548,70.07401],[27.96569,70.00415],[28.40312,69.80824],[29.1014,69.69095],[29.328,69.47585],[28.82859,69.2316],[28.7931,69.0943],[29.04485,68.99986],[29.25292,69.10601],[29.32641,69.22982],[29.29229,69.27632],[29.39117,69.31298],[29.57038,69.31201],[29.85191,69.41631],[29.96795,69.39916],[30.13069,69.4667],[30.2008,69.5658],[30.13137,69.6609],[30.15678,69.66496],[30.51589,69.53787],[30.82077,69.52371],[30.95329,69.55563],[30.96221,69.67832],[30.83578,69.79192],[31.65161,70.17579],[31.78344,70.4662],[30.49255,70.86989],[28.43261,71.30079],[25.66406,71.40266],[23.81835,71.29374],[18.30322,70.40734],[14.24926,69.07641],[11.18408,67.47913],[11.74438,66.90852],[9.95361,64.88393],[4.72961,62.3649],[4.12948,61.69247],[4.08142,61.02637],[4.4577,59.19421],[5.31188,58.4276],[6.47094,57.84475],[7.56408,57.72468],[8.4375,57.91776],[10.59792,58.75006],[10.64905,58.88203],[11.09035,58.97673],[11.16173,59.06743],[11.34175,59.10293],[11.44922,58.99078],[11.45194,58.88136],[11.53568,58.86659]]],terms_url:"https://www.norgeibilder.no",terms_text:"© Geovekst",best:true,description:"Norwegian orthophotos (max zoom 21), courtesy of Geovekst and Norkart.",icon:"https://register.geonorge.no/data/organizations/_L_norgeibilder96x96.png"},{id:"geovekst-nib2",name:"Norway Orthophoto (more recent, less zoom)",type:"tms",template:"https://opencache{switch:,2,3}.statkart.no/gatekeeper/gk/gk.open_nib_web_mercator_wmts_v2?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=Nibcache_web_mercator_v2&STYLE=default&FORMAT=image/jpgpng&tileMatrixSet=default028mm&tileMatrix={zoom}&tileRow={y}&tileCol={x}",zoomExtent:[0,19],polygon:[[[11.53568,58.86659],[11.66192,58.89784],[11.7935,59.09471],[11.84243,59.239],[11.82877,59.34509],[11.71279,59.60387],[11.86205,59.63771],[11.95608,59.69196],[11.93389,59.86895],[12.17881,59.8786],[12.46948,60.03124],[12.55438,60.18972],[12.51237,60.31659],[12.61793,60.40065],[12.61883,60.51512],[12.25387,61.01106],[12.69195,61.04632],[12.90756,61.34802],[12.57493,61.57623],[12.42465,61.57175],[12.15233,61.72694],[12.31212,62.26512],[12.07078,62.61109],[12.14907,62.7455],[12.08883,62.89668],[12.23464,62.99952],[11.99225,63.26684],[12.23327,63.47505],[12.17971,63.57117],[12.69313,63.96344],[13.21378,64.0839],[13.99183,64.00514],[14.17035,64.18236],[14.13253,64.47516],[13.67658,64.58356],[14.02455,64.88119],[14.33572,65.11098],[14.51699,65.30365],[14.54177,65.67762],[14.63674,65.81299],[14.53903,66.12496],[15.03881,66.14245],[15.50033,66.27956],[15.39368,66.4795],[15.63473,66.59685],[16.04695,66.90283],[16.39832,67.03827],[16.41439,67.21036],[16.10744,67.43617],[16.16455,67.5087],[16.42318,67.52589],[16.5866,67.64528],[16.7471,67.90466],[17.34741,68.09995],[17.90583,67.95885],[18.16489,68.19424],[18.13721,68.52675],[18.40761,68.57059],[18.62222,68.49607],[18.98574,68.50591],[19.92752,68.34558],[20.24505,68.49201],[19.99237,68.55586],[20.21137,68.65685],[20.34848,68.79976],[20.31623,68.93227],[20.10322,69.0359],[20.55694,69.04926],[20.7206,69.10837],[21.06178,69.02541],[21.12098,69.10587],[21.01135,69.21086],[21.2824,69.30076],[21.62645,69.26589],[22.33512,68.81965],[22.37485,68.70596],[22.5377,68.73329],[22.80161,68.67674],[23.04635,68.67833],[23.16467,68.61903],[23.68789,68.70049],[23.79776,68.81592],[23.96804,68.82287],[24.17541,68.7314],[24.76043,68.63655],[24.8544,68.55285],[24.90827,68.54387],[24.93347,68.6025],[25.12435,68.62003],[25.1667,68.79008],[25.43334,68.87886],[25.62945,68.88103],[25.79589,69.01157],[25.73272,69.19428],[26.02249,69.66758],[26.56631,69.94207],[27.10601,69.89539],[27.63679,70.05317],[27.93548,70.07401],[27.96569,70.00415],[28.40312,69.80824],[29.1014,69.69095],[29.328,69.47585],[28.82859,69.2316],[28.7931,69.0943],[29.04485,68.99986],[29.25292,69.10601],[29.32641,69.22982],[29.29229,69.27632],[29.39117,69.31298],[29.57038,69.31201],[29.85191,69.41631],[29.96795,69.39916],[30.13069,69.4667],[30.2008,69.5658],[30.13137,69.6609],[30.15678,69.66496],[30.51589,69.53787],[30.82077,69.52371],[30.95329,69.55563],[30.96221,69.67832],[30.83578,69.79192],[31.65161,70.17579],[31.78344,70.4662],[30.49255,70.86989],[28.43261,71.30079],[25.66406,71.40266],[23.81835,71.29374],[18.30322,70.40734],[14.24926,69.07641],[11.18408,67.47913],[11.74438,66.90852],[9.95361,64.88393],[4.72961,62.3649],[4.12948,61.69247],[4.08142,61.02637],[4.4577,59.19421],[5.31188,58.4276],[6.47094,57.84475],[7.56408,57.72468],[8.4375,57.91776],[10.59792,58.75006],[10.64905,58.88203],[11.09035,58.97673],[11.16173,59.06743],[11.34175,59.10293],[11.44922,58.99078],[11.45194,58.88136],[11.53568,58.86659]]],terms_url:"https://www.norgeibilder.no",terms_text:"© Geovekst",best:true,description:"Most recent Norwegian orthophotos (max zoom 19), courtesy of Geovekst and Kartverket.",icon:"https://register.geonorge.no/data/organizations/_L_norgeibilder96x96.png"},{id:"npd-offshore",name:"NPD Offshore Installations overlay",type:"wms",template:"http://gis.npd.no/ogc/factmaps/2_0?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=fclFixed,pplAll,fldByStatus&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[6,20],polygon:[[[8.51989,57.6454],[3.25195,56.08737],[2.61185,56.59434],[1.96321,57.90482],[1.48178,58.42936],[1.98303,60.31063],[1.78802,61.35659],[-0.49061,63.88725],[1.36226,67.01603],[14.99771,74.50082],[36.99371,74.50155],[36.99989,73.68633],[32.06909,70.27429],[23.97215,70.47356],[16.25974,68.58447],[12.12888,64.81157],[5.38328,61.92862],[5.7678,58.85355],[8.51989,57.6454]]],terms_url:"http://www.npd.no/no/Kart/Faktakart/",terms_text:"© Oljedirektoratet",description:"Production platforms and oil/natural gas fields on the Norwegian continental shelf",icon:"https://register.geonorge.no/data/organizations/870917732_od_liten.png",overlay:true},{id:"nve-snoskred",name:"NVE Avalanche Danger Areas overlay",type:"wms",template:"https://gis3.nve.no/map/services/SkredSnoAktR/MapServer/WmsServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Snoskred-Aktsomhetsomrader&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[5,13],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://www.nve.no/flaum-og-skred/kartlegging/aktsemdkart/aktsomhetskart-for-snoskred/",terms_text:"© NVE",description:"Potential snowslide areas, computed from theoretical height model. Valid for drops higher than 20-50 meters. Dark red=trigger area.",icon:"https://www.nve.no/Content/Images/nve-logo.png",overlay:true},{id:"nve-nettanlegg",name:"NVE Electricity Network overlay",type:"wms",template:"https://gis3.nve.no/map/services/Nettanlegg1/MapServer/WmsServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Sentralnett,Regionalnett,Distribusjonsnett,Sjokabler,Master og stolper,Transformatorstasjoner&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[6,22],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://www.nve.no/karttjenester/",terms_text:"© NVE",description:"Power lines (high voltage network) including transformers, submarine cables and pylons. Local distribution network is not included.",icon:"https://www.nve.no/Content/Images/nve-logo.png",overlay:true},{id:"nve-vannkraft",name:"NVE Hydropower Plants overlay",type:"wms",template:"https://gis3.nve.no/map/services/Vannkraft1/MapServer/WmsServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Vannkraftverk,Vannvei,Dam&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[6,22],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://www.nve.no/karttjenester/",terms_text:"© NVE",description:"Hydropower plants including waterways (tunnel, canal, pipeline) and dams",icon:"https://www.nve.no/Content/Images/nve-logo.png",overlay:true},{id:"nve-vindkraft",name:"NVE Wind Power Plants overlay",type:"wms",template:"https://gis3.nve.no/map/services/Vindkraft2/MapServer/WmsServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Vindkraft_konsesjon_gitt_ikke_utbygd,Vindkraft_under_bygging,Vindkraft_utbygd,Vindkraftomrade,Vindturbin&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[6,22],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://www.nve.no/karttjenester/",terms_text:"© NVE",description:"Wind power turbines, farms and concession areas (blue: planned, light green: construction, dark green: built).",icon:"https://www.nve.no/Content/Images/nve-logo.png",overlay:true},{id:"orthos.dhses.ny.gov_latest",name:"NYS Orthos Online",type:"wms",template:"https://orthos.dhses.ny.gov/arcgis/services/Latest/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0,1,2,3,4&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2018-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",zoomExtent:[0,19],polygon:[[[-74.91231,45.03606],[-73.47788,45.02996],[-73.33846,45.03098],[-73.31978,45.00558],[-73.32265,44.98525],[-73.34852,44.9283],[-73.36721,44.8397],[-73.34277,44.81727],[-73.34565,44.77647],[-73.37296,44.73463],[-73.37008,44.67946],[-73.39739,44.64471],[-73.39308,44.60276],[-73.39739,44.54543],[-73.34996,44.51264],[-73.34565,44.49521],[-73.37871,44.4706],[-73.30828,44.43572],[-73.30397,44.41827],[-73.33271,44.33917],[-73.30828,44.27128],[-73.30828,44.25172],[-73.38014,44.14868],[-73.40458,44.04133],[-73.3399,43.79596],[-73.28097,43.64222],[-73.2091,43.54957],[-73.21342,43.51206],[-73.24647,42.67557],[-73.45919,42.14284],[-73.47069,42.03938],[-73.48794,41.73764],[-73.49944,41.64319],[-73.47788,41.62708],[-73.43189,41.57979],[-73.42614,41.56366],[-73.42685,41.45926],[-73.43979,41.40322],[-73.44985,41.38328],[-73.43835,41.37033],[-73.42757,41.35901],[-73.41751,41.3439],[-73.41895,41.27642],[-73.43045,41.24455],[-73.46566,41.19752],[-73.52962,41.14505],[-73.55477,41.13368],[-73.61586,41.13531],[-73.62664,41.10878],[-73.62736,41.05407],[-73.63958,40.99118],[-73.61873,40.98195],[-73.59933,40.96568],[-73.59933,40.93474],[-73.63455,40.91682],[-73.68054,40.89183],[-73.69851,40.87988],[-73.68629,40.87064],[-73.66257,40.87934],[-73.63814,40.90541],[-73.59789,40.91193],[-73.57562,40.9179],[-73.52675,40.92388],[-73.50159,40.94288],[-73.4901,40.95374],[-73.41751,40.96079],[-73.38374,40.96133],[-73.33702,40.95591],[-73.30828,40.93637],[-73.27091,40.92659],[-73.2091,40.91953],[-73.18682,40.92714],[-73.16814,40.93148],[-73.16598,40.95971],[-73.16886,40.97002],[-73.12933,40.98195],[-73.10777,40.98195],[-73.06681,40.9749],[-72.8584,40.97436],[-72.71826,40.98195],[-72.65574,41.00528],[-72.64424,41.00473],[-72.62628,40.99226],[-72.54148,41.03889],[-72.4768,41.06328],[-72.45811,41.08928],[-72.41859,41.09308],[-72.36612,41.13856],[-72.36037,41.1418],[-72.32229,41.15479],[-72.29067,41.16399],[-72.21449,41.18238],[-72.20083,41.19157],[-72.04848,41.25914],[-72.02548,41.2937],[-71.93924,41.30774],[-71.92343,41.30666],[-71.90259,41.2991],[-71.90187,41.28939],[-71.99458,41.24509],[-72.10453,41.19806],[-72.18287,41.16723],[-72.18934,41.16237],[-72.25186,41.12232],[-72.30432,41.10445],[-72.31582,41.09524],[-72.27917,41.08441],[-72.2727,41.08062],[-72.26839,41.04973],[-72.21736,41.04811],[-72.19652,41.04215],[-72.18646,41.05298],[-72.17137,41.0584],[-72.14981,41.05895],[-72.15628,41.09633],[-72.15268,41.1077],[-72.14909,41.14667],[-72.134,41.14505],[-72.07076,41.10553],[-72.07435,41.05678],[-72.08657,41.03185],[-72.10957,41.0069],[-72.08729,41.01287],[-72.06213,41.02534],[-72.04561,41.03239],[-72.01902,41.03293],[-72.00895,41.04215],[-72.00177,41.05136],[-71.96368,41.07737],[-71.922,41.08874],[-71.88966,41.08766],[-71.85588,41.08062],[-71.84582,41.07466],[-71.85588,41.05298],[-71.89038,41.03727],[-71.91625,41.03022],[-71.99099,41.00365],[-72.07938,40.97273],[-72.31941,40.88205],[-72.4423,40.8402],[-72.62771,40.7869],[-72.76569,40.75043],[-72.88499,40.71286],[-72.95973,40.68671],[-73.03735,40.66],[-73.08118,40.64855],[-73.22994,40.61637],[-73.32193,40.6131],[-73.35211,40.61855],[-73.55477,40.56944],[-73.75959,40.57708],[-73.88248,40.54815],[-73.9335,40.53449],[-73.945,40.53395],[-73.94572,40.56289],[-74.08227,40.56234],[-74.08011,40.54924],[-74.12251,40.52084],[-74.15772,40.51373],[-74.18719,40.50117],[-74.22887,40.48696],[-74.26121,40.48532],[-74.2763,40.4957],[-74.27918,40.54378],[-74.26983,40.56671],[-74.25834,40.57217],[-74.22528,40.57217],[-74.226,40.58309],[-74.25115,40.59564],[-74.25259,40.62237],[-74.24324,40.64091],[-74.2339,40.64909],[-74.20228,40.654],[-74.12538,40.65673],[-74.11532,40.69107],[-74.09951,40.68998],[-74.07795,40.71068],[-74.06286,40.7183],[-74.05208,40.7439],[-74.02549,40.79288],[-73.98094,40.86901],[-73.96225,40.92551],[-73.94931,40.96459],[-73.94644,40.99877],[-73.98165,41.01612],[-74.04561,41.04323],[-74.18072,41.09524],[-74.30792,41.14938],[-74.44087,41.21537],[-74.52783,41.25914],[-74.61335,41.30234],[-74.65791,41.31098],[-74.70246,41.33581],[-74.76714,41.38975],[-74.79661,41.41023],[-74.85338,41.42263],[-74.90728,41.43179],[-74.99783,41.47111],[-75.04167,41.52708],[-75.08479,41.59323],[-75.08407,41.61848],[-75.07329,41.66467],[-75.08766,41.70278],[-75.08766,41.71351],[-75.12144,41.76177],[-75.11928,41.79232],[-75.13078,41.81696],[-75.18755,41.83838],[-75.25295,41.84962],[-75.28745,41.85497],[-75.29823,41.88227],[-75.30613,41.9304],[-75.34063,41.94003],[-75.3665,41.9566],[-75.37225,41.97744],[-75.58066,41.97957],[-75.58137,41.92399],[-75.78906,41.92666],[-75.78691,41.98278],[-79.77687,41.98118],[-79.7819,42.20994],[-79.77184,42.28017],[-79.72153,42.29824],[-79.57349,42.36731],[-79.42976,42.46599],[-79.3737,42.49991],[-79.25728,42.54546],[-79.18973,42.5624],[-79.16529,42.56981],[-79.12074,42.62483],[-79.0963,42.64598],[-79.06899,42.6967],[-79.03162,42.71043],[-78.98851,42.72311],[-78.88358,42.77693],[-78.88646,42.8149],[-78.93964,42.88655],[-78.93964,42.93603],[-79.04887,42.96969],[-79.04743,43.05167],[-79.09343,43.05272],[-79.09199,43.09262],[-79.08624,43.26556],[-79.06468,43.27602],[-78.84909,43.33041],[-78.72979,43.35237],[-78.63924,43.37013],[-78.54869,43.37953],[-78.47826,43.38789],[-77.95508,43.38476],[-77.73158,43.34714],[-77.71146,43.34034],[-77.66259,43.31159],[-77.61516,43.28387],[-77.55336,43.253],[-77.5282,43.25509],[-77.45634,43.27864],[-77.42256,43.28492],[-77.16385,43.29433],[-77.0503,43.29381],[-76.94178,43.29329],[-76.91447,43.30793],[-76.85051,43.3163],[-76.80236,43.32832],[-76.75996,43.35184],[-76.64785,43.42809],[-76.54509,43.48026],[-76.51993,43.49486],[-76.44304,43.52717],[-76.4222,43.53811],[-76.28206,43.53863],[-76.23822,43.55686],[-76.24038,43.74147],[-76.30649,43.82915],[-76.31152,43.8675],[-76.34602,43.8618],[-76.40064,43.86128],[-76.47178,43.88408],[-76.46675,43.90893],[-76.4186,43.93119],[-76.37189,43.93223],[-76.36974,43.90272],[-76.33308,43.92964],[-76.27847,43.92964],[-76.27847,43.90427],[-76.26697,43.89599],[-76.23607,43.91204],[-76.19295,43.93326],[-76.19007,43.95086],[-76.21523,43.96017],[-76.25044,43.94982],[-76.31224,43.94775],[-76.30578,43.9762],[-76.33093,44.00464],[-76.39561,44.0248],[-76.39848,44.06251],[-76.37548,44.06457],[-76.3762,44.0909],[-76.47107,44.09297],[-76.46604,44.10948],[-76.44232,44.1296],[-76.39848,44.13218],[-76.39776,44.20435],[-76.3762,44.21671],[-76.23966,44.21929],[-76.23966,44.22804],[-76.21738,44.22856],[-76.21523,44.3479],[-76.11893,44.37103],[-76.04634,44.39157],[-75.93423,44.43418],[-75.83721,44.50341],[-75.76822,44.55823],[-75.69923,44.60379],[-75.63168,44.64829],[-75.56772,44.70501],[-75.50448,44.74586],[-75.45274,44.78157],[-75.31763,44.8723],[-75.15378,44.93745],[-75.09054,44.97305],[-74.97411,45.02793],[-74.91985,45.03682],[-74.91231,45.03606]]],terms_url:"https://gis.ny.gov/gateway/orthoprogram/index.cfm",terms_text:"New York State Statewide Digital Orthoimagery Program",description:"New York State High Resolution Digital Orthoimagery, 1 foot resolution",icon:"https://osmlab.github.io/editor-layer-index/sources/north-america/us/ny/NYS_Orthos_Online.png"},{id:"olho_dagua_do_casado",name:"Olho d'Agua do Casado AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Olho%20Dagua%20do%20Casado&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-37.7822,-9.54444],[-37.7826,-9.45388],[-37.81147,-9.45412],[-37.81735,-9.45451],[-37.82057,-9.45416],[-37.87394,-9.45428],[-37.87358,-9.54475],[-37.7822,-9.54444]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"osmbe-nl",name:"OpenStreetMap (Belgian Style - Dutch)",type:"tms",template:"https://tile.openstreetmap.be/osmbe-nl/{zoom}/{x}/{y}.png",zoomExtent:[0,18],polygon:[[[5.47007,49.49196],[5.44409,49.51409],[5.46213,49.53677],[5.43766,49.54766],[5.42566,49.59145],[5.40775,49.60448],[5.35207,49.62396],[5.34232,49.61192],[5.30544,49.60645],[5.3026,49.63608],[5.32535,49.6575],[5.27025,49.68827],[5.24458,49.67985],[5.16215,49.6918],[5.16164,49.71172],[5.12622,49.70442],[5.09058,49.75946],[5.06262,49.75724],[5.01261,49.77534],[4.9921,49.79533],[4.95485,49.79586],[4.94404,49.78583],[4.90589,49.78055],[4.84827,49.78972],[4.86599,49.81918],[4.84266,49.86913],[4.85659,49.86973],[4.87961,49.91078],[4.84433,49.94482],[4.78844,49.95381],[4.78535,49.97018],[4.79004,49.98569],[4.81194,49.99563],[4.81579,50.02853],[4.83599,50.04069],[4.82339,50.04664],[4.81641,50.06702],[4.83456,50.06856],[4.83709,50.09442],[4.84472,50.10023],[4.85447,50.1029],[4.866,50.09623],[4.86587,50.12038],[4.8776,50.13223],[4.89443,50.13779],[4.88043,50.1403],[4.87725,50.15205],[4.8529,50.15168],[4.83169,50.1526],[4.82334,50.15923],[4.78067,50.14092],[4.76486,50.13634],[4.75217,50.11158],[4.71293,50.09598],[4.70278,50.09336],[4.68851,50.06595],[4.70309,50.05587],[4.68731,50.01802],[4.69495,49.99662],[4.69461,49.99504],[4.63074,49.98584],[4.58965,49.98336],[4.55981,49.96757],[4.54315,49.9679],[4.52365,49.94973],[4.51156,49.94579],[4.47953,49.94584],[4.44588,49.93656],[4.40593,49.94785],[4.39149,49.94697],[4.38072,49.95088],[4.34921,49.95202],[4.3137,49.96541],[4.19616,49.9536],[4.19304,49.95746],[4.19582,49.96629],[4.13704,49.97691],[4.15996,49.99544],[4.13683,50.00786],[4.13272,50.01973],[4.16174,50.05032],[4.17458,50.04772],[4.22857,50.06873],[4.19529,50.10571],[4.19766,50.12037],[4.19566,50.13394],[4.15448,50.12716],[4.13656,50.12909],[4.12568,50.13511],[4.13677,50.15213],[4.14989,50.1647],[4.14686,50.17314],[4.15567,50.19785],[4.14799,50.21344],[4.15979,50.21579],[4.19179,50.24106],[4.21836,50.25492],[4.20676,50.27068],[4.17487,50.27492],[4.16567,50.28779],[4.155,50.27742],[4.16937,50.26848],[4.16851,50.25626],[4.13426,50.25572],[4.13228,50.26754],[4.12086,50.27276],[4.12139,50.29732],[4.10928,50.30112],[4.0977,50.31201],[4.08017,50.30809],[4.07339,50.31754],[4.03817,50.33987],[4.02738,50.35491],[3.98611,50.34137],[3.96482,50.34012],[3.96355,50.34742],[3.90223,50.3257],[3.88419,50.32554],[3.88429,50.33511],[3.85645,50.34099],[3.84244,50.35243],[3.81321,50.34251],[3.80551,50.35098],[3.74124,50.34624],[3.73556,50.32532],[3.73175,50.30705],[3.70911,50.3021],[3.68231,50.31988],[3.66397,50.34724],[3.65542,50.37075],[3.66788,50.38597],[3.67276,50.40227],[3.66777,50.42262],[3.66743,50.43635],[3.65685,50.4464],[3.66129,50.45399],[3.64419,50.4618],[3.6099,50.4935],[3.58162,50.48917],[3.56897,50.4982],[3.49868,50.48577],[3.49448,50.49918],[3.51582,50.52075],[3.4742,50.53204],[3.44739,50.50415],[3.43663,50.5083],[3.42736,50.50327],[3.37405,50.48993],[3.35949,50.50325],[3.32767,50.50732],[3.31872,50.51788],[3.30319,50.51966],[3.28718,50.52552],[3.27549,50.53872],[3.27524,50.59381],[3.25497,50.62115],[3.24349,50.64031],[3.23893,50.65864],[3.24019,50.67023],[3.26029,50.67692],[3.25131,50.69091],[3.25881,50.69312],[3.24518,50.71225],[3.23779,50.71086],[3.22148,50.70958],[3.20498,50.71072],[3.18953,50.72603],[3.19445,50.7316],[3.14457,50.78871],[3.12547,50.78553],[3.11348,50.79278],[3.10455,50.78042],[3.08585,50.77064],[3.05758,50.77987],[3.04064,50.77484],[3.03691,50.77003],[3.02927,50.76813],[3.01945,50.77263],[2.99536,50.76043],[2.96822,50.74763],[2.9557,50.75181],[2.93962,50.74441],[2.94602,50.73167],[2.9349,50.72822],[2.92939,50.70786],[2.92206,50.70224],[2.91184,50.70267],[2.91281,50.69463],[2.90742,50.69209],[2.90017,50.69202],[2.88533,50.70547],[2.87992,50.70199],[2.86855,50.70242],[2.84646,50.72043],[2.81843,50.71386],[2.78869,50.72508],[2.77811,50.74686],[2.76469,50.75397],[2.75409,50.76251],[2.75922,50.77052],[2.73745,50.77967],[2.7236,50.79079],[2.71636,50.8123],[2.6788,50.81207],[2.67057,50.81562],[2.63543,50.80987],[2.61055,50.84419],[2.59427,50.84743],[2.60628,50.86565],[2.60151,50.90993],[2.58525,50.91825],[2.62479,50.94743],[2.62148,50.95406],[2.60263,50.98638],[2.56946,51.00113],[2.55892,51.06596],[2.34072,51.31453],[3.01078,51.59839],[3.32658,51.43728],[3.37581,51.3584],[3.38739,51.33392],[3.36094,51.31523],[3.3789,51.30251],[3.36832,51.29778],[3.38177,51.28732],[3.38342,51.27485],[3.38922,51.27329],[3.41852,51.25984],[3.43471,51.24621],[3.45031,51.24219],[3.527,51.24651],[3.51433,51.28799],[3.54179,51.29123],[3.56145,51.29637],[3.57559,51.29428],[3.58905,51.30652],[3.63839,51.29078],[3.6582,51.29056],[3.69139,51.28043],[3.71763,51.27428],[3.77605,51.26777],[3.79652,51.25635],[3.79031,51.24163],[3.78934,51.22711],[3.79294,51.21546],[3.85827,51.21334],[3.88901,51.22423],[3.89467,51.21743],[3.88782,51.20283],[3.91256,51.20837],[3.91482,51.21509],[3.9281,51.22508],[3.93751,51.2174],[3.95603,51.22117],[4.01551,51.24825],[4.0551,51.24402],[4.1651,51.2938],[4.23804,51.35274],[4.21772,51.36206],[4.21546,51.37487],[4.33535,51.37775],[4.34197,51.36012],[4.38556,51.35574],[4.39906,51.35785],[4.42462,51.3668],[4.42309,51.37577],[4.38147,51.41805],[4.39426,51.44251],[4.37771,51.44595],[4.38055,51.45075],[4.4768,51.47912],[4.53739,51.48358],[4.54967,51.47364],[4.53097,51.44965],[4.53758,51.42456],[4.57427,51.43404],[4.6431,51.42478],[4.64951,51.42741],[4.66744,51.42777],[4.66465,51.44625],[4.69115,51.45283],[4.70175,51.46691],[4.72792,51.48435],[4.74476,51.48977],[4.74945,51.49905],[4.75827,51.50302],[4.7766,51.50625],[4.81666,51.49552],[4.82318,51.48441],[4.84355,51.48177],[4.83884,51.46588],[4.84529,51.45817],[4.82521,51.44674],[4.83103,51.42488],[4.88072,51.4166],[4.91431,51.45952],[4.95767,51.4548],[4.94134,51.42928],[4.93775,51.40655],[4.96007,51.42194],[4.99955,51.44324],[5.00816,51.47134],[5.01937,51.48074],[5.03235,51.48827],[5.04093,51.4876],[5.04722,51.47217],[5.08032,51.47226],[5.10643,51.43135],[5.0727,51.39365],[5.11662,51.36118],[5.13225,51.3472],[5.13581,51.31594],[5.15592,51.31278],[5.20039,51.32325],[5.24326,51.3057],[5.22742,51.26844],[5.238,51.26255],[5.26216,51.26778],[5.335,51.26474],[5.34493,51.27681],[5.41551,51.2639],[5.44065,51.28246],[5.48215,51.30064],[5.51628,51.29599],[5.55816,51.26613],[5.56283,51.22287],[5.65253,51.19899],[5.65947,51.19052],[5.71011,51.18671],[5.74598,51.19455],[5.76873,51.18843],[5.78118,51.18082],[5.78447,51.15925],[5.82594,51.16827],[5.85709,51.14477],[5.83976,51.12993],[5.81435,51.11524],[5.83555,51.10842],[5.8338,51.09577],[5.82291,51.09124],[5.8119,51.0943],[5.79816,51.09023],[5.80612,51.07955],[5.80458,51.05888],[5.77731,51.05804],[5.76027,51.03223],[5.77383,51.02859],[5.77829,51.02399],[5.76759,51.00526],[5.76846,50.9985],[5.76419,50.99502],[5.74816,50.98087],[5.72174,50.96128],[5.73469,50.95683],[5.7426,50.96113],[5.74604,50.96209],[5.75617,50.95898],[5.76011,50.95227],[5.73223,50.9221],[5.72625,50.9059],[5.70051,50.90955],[5.69711,50.8958],[5.68051,50.88068],[5.64516,50.86533],[5.64337,50.84974],[5.64049,50.84701],[5.64576,50.83961],[5.64567,50.83789],[5.65094,50.83431],[5.65568,50.82591],[5.70296,50.80821],[5.69338,50.79687],[5.70259,50.78396],[5.69204,50.75629],[5.7218,50.76538],[5.73762,50.75842],[5.73912,50.76522],[5.76476,50.7837],[5.77748,50.78344],[5.78519,50.7684],[5.7927,50.77138],[5.80759,50.75681],[5.84525,50.76609],[5.84901,50.75975],[5.88667,50.77108],[5.89689,50.75501],[5.95896,50.76308],[6.02001,50.75521],[6.04208,50.74557],[6.03953,50.7295],[6.11623,50.72364],[6.1491,50.68465],[6.16312,50.67169],[6.17755,50.65576],[6.18715,50.6505],[6.18348,50.6457],[6.18205,50.63583],[6.26822,50.62829],[6.27251,50.62033],[6.24102,50.58657],[6.22795,50.58535],[6.18304,50.55597],[6.1833,50.54646],[6.19789,50.53715],[6.22586,50.49832],[6.26954,50.50961],[6.35349,50.49244],[6.34706,50.46422],[6.37423,50.45989],[6.3825,50.43975],[6.37408,50.40637],[6.35129,50.38206],[6.40305,50.34866],[6.41162,50.32769],[6.40783,50.31893],[6.38558,50.31658],[6.36388,50.30021],[6.32792,50.3186],[6.31289,50.31636],[6.29335,50.2909],[6.29547,50.27422],[6.28111,50.26236],[6.23624,50.25692],[6.21151,50.24816],[6.1981,50.23275],[6.18166,50.23125],[6.1789,50.22147],[6.19337,50.20761],[6.19683,50.17988],[6.15231,50.16841],[6.15923,50.14002],[6.13978,50.12527],[6.10856,50.1326],[6.11273,50.16093],[6.10156,50.16551],[6.08452,50.16697],[6.0821,50.15275],[6.06344,50.14834],[6.03055,50.15829],[6.02136,50.17685],[5.96932,50.16795],[5.96515,50.12813],[5.90347,50.11172],[5.89064,50.07554],[5.86237,50.06368],[5.8749,50.04624],[5.86392,50.02594],[5.82586,50.00934],[5.82665,50.00135],[5.8448,49.99123],[5.83952,49.9756],[5.80883,49.95773],[5.78215,49.957],[5.76822,49.91307],[5.74481,49.89975],[5.78087,49.88794],[5.78897,49.87213],[5.77636,49.86265],[5.75667,49.8703],[5.76191,49.85693],[5.75803,49.84287],[5.74291,49.83555],[5.75151,49.81985],[5.75473,49.79514],[5.7909,49.79765],[5.8179,49.75977],[5.83544,49.74713],[5.82702,49.72616],[5.86996,49.72777],[5.88817,49.70952],[5.86372,49.68213],[5.91262,49.66488],[5.90382,49.65192],[5.90876,49.63876],[5.89899,49.63401],[5.89117,49.63469],[5.87663,49.60771],[5.84953,49.59399],[5.87403,49.58991],[5.8736,49.57435],[5.84053,49.55222],[5.82582,49.54931],[5.81858,49.5461],[5.79504,49.55029],[5.77149,49.55832],[5.76226,49.554],[5.76126,49.53952],[5.74792,49.53452],[5.73009,49.53954],[5.6987,49.53744],[5.66008,49.55039],[5.64371,49.54565],[5.6228,49.5283],[5.62589,49.51698],[5.61175,49.50102],[5.59116,49.51734],[5.55638,49.52373],[5.54257,49.5105],[5.47007,49.49196]]],terms_url:"https://openstreetmap.org/",terms_text:"© OpenStreetMap contributors, CC-BY-SA; Tiles courtesy of GEO-6",icon:"https://osmlab.github.io/editor-layer-index/sources/world/OpenStreetMap-GPS.png"},{id:"osmbe-fr",name:"OpenStreetMap (Belgian Style - French)",type:"tms",template:"https://tile.openstreetmap.be/osmbe-fr/{zoom}/{x}/{y}.png",zoomExtent:[0,18],polygon:[[[5.47007,49.49196],[5.44409,49.51409],[5.46213,49.53677],[5.43766,49.54766],[5.42566,49.59145],[5.40775,49.60448],[5.35207,49.62396],[5.34232,49.61192],[5.30544,49.60645],[5.3026,49.63608],[5.32535,49.6575],[5.27025,49.68827],[5.24458,49.67985],[5.16215,49.6918],[5.16164,49.71172],[5.12622,49.70442],[5.09058,49.75946],[5.06262,49.75724],[5.01261,49.77534],[4.9921,49.79533],[4.95485,49.79586],[4.94404,49.78583],[4.90589,49.78055],[4.84827,49.78972],[4.86599,49.81918],[4.84266,49.86913],[4.85659,49.86973],[4.87961,49.91078],[4.84433,49.94482],[4.78844,49.95381],[4.78535,49.97018],[4.79004,49.98569],[4.81194,49.99563],[4.81579,50.02853],[4.83599,50.04069],[4.82339,50.04664],[4.81641,50.06702],[4.83456,50.06856],[4.83709,50.09442],[4.84472,50.10023],[4.85447,50.1029],[4.866,50.09623],[4.86587,50.12038],[4.8776,50.13223],[4.89443,50.13779],[4.88043,50.1403],[4.87725,50.15205],[4.8529,50.15168],[4.83169,50.1526],[4.82334,50.15923],[4.78067,50.14092],[4.76486,50.13634],[4.75217,50.11158],[4.71293,50.09598],[4.70278,50.09336],[4.68851,50.06595],[4.70309,50.05587],[4.68731,50.01802],[4.69495,49.99662],[4.69461,49.99504],[4.63074,49.98584],[4.58965,49.98336],[4.55981,49.96757],[4.54315,49.9679],[4.52365,49.94973],[4.51156,49.94579],[4.47953,49.94584],[4.44588,49.93656],[4.40593,49.94785],[4.39149,49.94697],[4.38072,49.95088],[4.34921,49.95202],[4.3137,49.96541],[4.19616,49.9536],[4.19304,49.95746],[4.19582,49.96629],[4.13704,49.97691],[4.15996,49.99544],[4.13683,50.00786],[4.13272,50.01973],[4.16174,50.05032],[4.17458,50.04772],[4.22857,50.06873],[4.19529,50.10571],[4.19766,50.12037],[4.19566,50.13394],[4.15448,50.12716],[4.13656,50.12909],[4.12568,50.13511],[4.13677,50.15213],[4.14989,50.1647],[4.14686,50.17314],[4.15567,50.19785],[4.14799,50.21344],[4.15979,50.21579],[4.19179,50.24106],[4.21836,50.25492],[4.20676,50.27068],[4.17487,50.27492],[4.16567,50.28779],[4.155,50.27742],[4.16937,50.26848],[4.16851,50.25626],[4.13426,50.25572],[4.13228,50.26754],[4.12086,50.27276],[4.12139,50.29732],[4.10928,50.30112],[4.0977,50.31201],[4.08017,50.30809],[4.07339,50.31754],[4.03817,50.33987],[4.02738,50.35491],[3.98611,50.34137],[3.96482,50.34012],[3.96355,50.34742],[3.90223,50.3257],[3.88419,50.32554],[3.88429,50.33511],[3.85645,50.34099],[3.84244,50.35243],[3.81321,50.34251],[3.80551,50.35098],[3.74124,50.34624],[3.73556,50.32532],[3.73175,50.30705],[3.70911,50.3021],[3.68231,50.31988],[3.66397,50.34724],[3.65542,50.37075],[3.66788,50.38597],[3.67276,50.40227],[3.66777,50.42262],[3.66743,50.43635],[3.65685,50.4464],[3.66129,50.45399],[3.64419,50.4618],[3.6099,50.4935],[3.58162,50.48917],[3.56897,50.4982],[3.49868,50.48577],[3.49448,50.49918],[3.51582,50.52075],[3.4742,50.53204],[3.44739,50.50415],[3.43663,50.5083],[3.42736,50.50327],[3.37405,50.48993],[3.35949,50.50325],[3.32767,50.50732],[3.31872,50.51788],[3.30319,50.51966],[3.28718,50.52552],[3.27549,50.53872],[3.27524,50.59381],[3.25497,50.62115],[3.24349,50.64031],[3.23893,50.65864],[3.24019,50.67023],[3.26029,50.67692],[3.25131,50.69091],[3.25881,50.69312],[3.24518,50.71225],[3.23779,50.71086],[3.22148,50.70958],[3.20498,50.71072],[3.18953,50.72603],[3.19445,50.7316],[3.14457,50.78871],[3.12547,50.78553],[3.11348,50.79278],[3.10455,50.78042],[3.08585,50.77064],[3.05758,50.77987],[3.04064,50.77484],[3.03691,50.77003],[3.02927,50.76813],[3.01945,50.77263],[2.99536,50.76043],[2.96822,50.74763],[2.9557,50.75181],[2.93962,50.74441],[2.94602,50.73167],[2.9349,50.72822],[2.92939,50.70786],[2.92206,50.70224],[2.91184,50.70267],[2.91281,50.69463],[2.90742,50.69209],[2.90017,50.69202],[2.88533,50.70547],[2.87992,50.70199],[2.86855,50.70242],[2.84646,50.72043],[2.81843,50.71386],[2.78869,50.72508],[2.77811,50.74686],[2.76469,50.75397],[2.75409,50.76251],[2.75922,50.77052],[2.73745,50.77967],[2.7236,50.79079],[2.71636,50.8123],[2.6788,50.81207],[2.67057,50.81562],[2.63543,50.80987],[2.61055,50.84419],[2.59427,50.84743],[2.60628,50.86565],[2.60151,50.90993],[2.58525,50.91825],[2.62479,50.94743],[2.62148,50.95406],[2.60263,50.98638],[2.56946,51.00113],[2.55892,51.06596],[2.34072,51.31453],[3.01078,51.59839],[3.32658,51.43728],[3.37581,51.3584],[3.38739,51.33392],[3.36094,51.31523],[3.3789,51.30251],[3.36832,51.29778],[3.38177,51.28732],[3.38342,51.27485],[3.38922,51.27329],[3.41852,51.25984],[3.43471,51.24621],[3.45031,51.24219],[3.527,51.24651],[3.51433,51.28799],[3.54179,51.29123],[3.56145,51.29637],[3.57559,51.29428],[3.58905,51.30652],[3.63839,51.29078],[3.6582,51.29056],[3.69139,51.28043],[3.71763,51.27428],[3.77605,51.26777],[3.79652,51.25635],[3.79031,51.24163],[3.78934,51.22711],[3.79294,51.21546],[3.85827,51.21334],[3.88901,51.22423],[3.89467,51.21743],[3.88782,51.20283],[3.91256,51.20837],[3.91482,51.21509],[3.9281,51.22508],[3.93751,51.2174],[3.95603,51.22117],[4.01551,51.24825],[4.0551,51.24402],[4.1651,51.2938],[4.23804,51.35274],[4.21772,51.36206],[4.21546,51.37487],[4.33535,51.37775],[4.34197,51.36012],[4.38556,51.35574],[4.39906,51.35785],[4.42462,51.3668],[4.42309,51.37577],[4.38147,51.41805],[4.39426,51.44251],[4.37771,51.44595],[4.38055,51.45075],[4.4768,51.47912],[4.53739,51.48358],[4.54967,51.47364],[4.53097,51.44965],[4.53758,51.42456],[4.57427,51.43404],[4.6431,51.42478],[4.64951,51.42741],[4.66744,51.42777],[4.66465,51.44625],[4.69115,51.45283],[4.70175,51.46691],[4.72792,51.48435],[4.74476,51.48977],[4.74945,51.49905],[4.75827,51.50302],[4.7766,51.50625],[4.81666,51.49552],[4.82318,51.48441],[4.84355,51.48177],[4.83884,51.46588],[4.84529,51.45817],[4.82521,51.44674],[4.83103,51.42488],[4.88072,51.4166],[4.91431,51.45952],[4.95767,51.4548],[4.94134,51.42928],[4.93775,51.40655],[4.96007,51.42194],[4.99955,51.44324],[5.00816,51.47134],[5.01937,51.48074],[5.03235,51.48827],[5.04093,51.4876],[5.04722,51.47217],[5.08032,51.47226],[5.10643,51.43135],[5.0727,51.39365],[5.11662,51.36118],[5.13225,51.3472],[5.13581,51.31594],[5.15592,51.31278],[5.20039,51.32325],[5.24326,51.3057],[5.22742,51.26844],[5.238,51.26255],[5.26216,51.26778],[5.335,51.26474],[5.34493,51.27681],[5.41551,51.2639],[5.44065,51.28246],[5.48215,51.30064],[5.51628,51.29599],[5.55816,51.26613],[5.56283,51.22287],[5.65253,51.19899],[5.65947,51.19052],[5.71011,51.18671],[5.74598,51.19455],[5.76873,51.18843],[5.78118,51.18082],[5.78447,51.15925],[5.82594,51.16827],[5.85709,51.14477],[5.83976,51.12993],[5.81435,51.11524],[5.83555,51.10842],[5.8338,51.09577],[5.82291,51.09124],[5.8119,51.0943],[5.79816,51.09023],[5.80612,51.07955],[5.80458,51.05888],[5.77731,51.05804],[5.76027,51.03223],[5.77383,51.02859],[5.77829,51.02399],[5.76759,51.00526],[5.76846,50.9985],[5.76419,50.99502],[5.74816,50.98087],[5.72174,50.96128],[5.73469,50.95683],[5.7426,50.96113],[5.74604,50.96209],[5.75617,50.95898],[5.76011,50.95227],[5.73223,50.9221],[5.72625,50.9059],[5.70051,50.90955],[5.69711,50.8958],[5.68051,50.88068],[5.64516,50.86533],[5.64337,50.84974],[5.64049,50.84701],[5.64576,50.83961],[5.64567,50.83789],[5.65094,50.83431],[5.65568,50.82591],[5.70296,50.80821],[5.69338,50.79687],[5.70259,50.78396],[5.69204,50.75629],[5.7218,50.76538],[5.73762,50.75842],[5.73912,50.76522],[5.76476,50.7837],[5.77748,50.78344],[5.78519,50.7684],[5.7927,50.77138],[5.80759,50.75681],[5.84525,50.76609],[5.84901,50.75975],[5.88667,50.77108],[5.89689,50.75501],[5.95896,50.76308],[6.02001,50.75521],[6.04208,50.74557],[6.03953,50.7295],[6.11623,50.72364],[6.1491,50.68465],[6.16312,50.67169],[6.17755,50.65576],[6.18715,50.6505],[6.18348,50.6457],[6.18205,50.63583],[6.26822,50.62829],[6.27251,50.62033],[6.24102,50.58657],[6.22795,50.58535],[6.18304,50.55597],[6.1833,50.54646],[6.19789,50.53715],[6.22586,50.49832],[6.26954,50.50961],[6.35349,50.49244],[6.34706,50.46422],[6.37423,50.45989],[6.3825,50.43975],[6.37408,50.40637],[6.35129,50.38206],[6.40305,50.34866],[6.41162,50.32769],[6.40783,50.31893],[6.38558,50.31658],[6.36388,50.30021],[6.32792,50.3186],[6.31289,50.31636],[6.29335,50.2909],[6.29547,50.27422],[6.28111,50.26236],[6.23624,50.25692],[6.21151,50.24816],[6.1981,50.23275],[6.18166,50.23125],[6.1789,50.22147],[6.19337,50.20761],[6.19683,50.17988],[6.15231,50.16841],[6.15923,50.14002],[6.13978,50.12527],[6.10856,50.1326],[6.11273,50.16093],[6.10156,50.16551],[6.08452,50.16697],[6.0821,50.15275],[6.06344,50.14834],[6.03055,50.15829],[6.02136,50.17685],[5.96932,50.16795],[5.96515,50.12813],[5.90347,50.11172],[5.89064,50.07554],[5.86237,50.06368],[5.8749,50.04624],[5.86392,50.02594],[5.82586,50.00934],[5.82665,50.00135],[5.8448,49.99123],[5.83952,49.9756],[5.80883,49.95773],[5.78215,49.957],[5.76822,49.91307],[5.74481,49.89975],[5.78087,49.88794],[5.78897,49.87213],[5.77636,49.86265],[5.75667,49.8703],[5.76191,49.85693],[5.75803,49.84287],[5.74291,49.83555],[5.75151,49.81985],[5.75473,49.79514],[5.7909,49.79765],[5.8179,49.75977],[5.83544,49.74713],[5.82702,49.72616],[5.86996,49.72777],[5.88817,49.70952],[5.86372,49.68213],[5.91262,49.66488],[5.90382,49.65192],[5.90876,49.63876],[5.89899,49.63401],[5.89117,49.63469],[5.87663,49.60771],[5.84953,49.59399],[5.87403,49.58991],[5.8736,49.57435],[5.84053,49.55222],[5.82582,49.54931],[5.81858,49.5461],[5.79504,49.55029],[5.77149,49.55832],[5.76226,49.554],[5.76126,49.53952],[5.74792,49.53452],[5.73009,49.53954],[5.6987,49.53744],[5.66008,49.55039],[5.64371,49.54565],[5.6228,49.5283],[5.62589,49.51698],[5.61175,49.50102],[5.59116,49.51734],[5.55638,49.52373],[5.54257,49.5105],[5.47007,49.49196]]],terms_url:"https://openstreetmap.org/",terms_text:"© OpenStreetMap contributors, CC-BY-SA; Tiles courtesy of GEO-6",icon:"https://osmlab.github.io/editor-layer-index/sources/world/OpenStreetMap-GPS.png"},{id:"MAPNIK",name:"OpenStreetMap (Standard)",type:"tms",template:"https://{switch:a,b,c}.tile.openstreetmap.org/{zoom}/{x}/{y}.png",zoomExtent:[0,19],terms_url:"https://www.openstreetmap.org",terms_text:"© OpenStreetMap contributors, CC-BY-SA","default":true,description:"The default OpenStreetMap layer.",icon:"https://osmlab.github.io/editor-layer-index/sources/world/OpenStreetMap-GPS.png"},{id:"osm-gps",name:"OpenStreetMap GPS traces",type:"tms",template:"https://{switch:a,b,c}.gps-tile.openstreetmap.org/lines/{zoom}/{x}/{y}.png",zoomExtent:[0,20],terms_url:"https://www.openstreetmap.org/copyright",terms_text:"© OpenStreetMap contributors",terms_html:"<span style='display: inline-block; padding: 0 8px; background-color: rgba(0,0,0,0.5);'><span style='color: #eee;'>GPS Direction:</span> <span style='font-size: 15px; padding-left: 2px; font-weight: bold;'> <span style='color: #0ee;'>←</span> <span style='color: #96f;'>↓</span> <span style='color: #6e0;'>↑</span> <span style='color: #f63;'>→</span> </span></span> © <a href='https://www.openstreetmap.org/copyright'>OpenStreetMap contributors</a>.",description:"Public GPS traces uploaded to OpenStreetMap.",icon:"https://osmlab.github.io/editor-layer-index/sources/world/OpenStreetMap-GPS.png",overlay:true},{id:"osm-hu-ortho",name:"openstreetmap.hu orthophotos",type:"tms",template:"http://adam.openstreetmap.hu/mapproxy/tiles/1.0.0/openstreetmap.hu.orthophotos/mercator/{zoom}/{x}/{y}.png",zoomExtent:[0,21],polygon:[[[18.8577,47.44553],[18.86169,47.44883],[18.86491,47.44704],[18.8609,47.44373],[18.8577,47.44553]],[[18.80614,47.59304],[18.81376,47.5974],[18.82295,47.59011],[18.81533,47.58574],[18.80614,47.59304]],[[17.66691,46.92167],[17.66369,46.93033],[17.67207,46.93178],[17.67529,46.92312],[17.66691,46.92167]],[[17.6725,46.93546],[17.67529,46.92708],[17.68409,46.92845],[17.68129,46.93683],[17.6725,46.93546]],[[17.82155,46.96075],[17.82507,46.9547],[17.83347,46.95701],[17.82995,46.96304],[17.82155,46.96075]],[[18.62796,47.19818],[18.63943,47.20324],[18.64953,47.1926],[18.63806,47.18753],[18.62796,47.19818]],[[17.51223,46.8789],[17.51406,46.88166],[17.5214,46.87939],[17.51957,46.87662],[17.51223,46.8789]],[[17.67724,46.91844],[17.68718,46.92344],[17.70594,46.90603],[17.69249,46.89926],[17.68144,46.90951],[17.68275,46.90595],[17.68198,46.90582],[17.68667,46.89926],[17.67947,46.89686],[17.67405,46.90445],[17.67131,46.90398],[17.66666,46.91662],[17.67724,46.91844]],[[18.80776,47.55615],[18.81638,47.55969],[18.81351,47.56305],[18.80473,47.55949],[18.80776,47.55615]],[[18.98706,47.46989],[18.97962,47.47042],[18.98056,47.47648],[18.988,47.47595],[18.98706,47.46989]],[[18.98356,47.41149],[19.00839,47.42511],[19.01568,47.41932],[18.9907,47.40518],[18.98356,47.41149]],[[19.02652,47.87563],[19.03163,47.87613],[19.03305,47.86957],[19.02793,47.86907],[19.02652,47.87563]],[[18.00803,46.86674],[18.01095,46.86028],[18.01323,46.86064],[18.01626,46.8536],[18.01682,46.85371],[18.01852,46.84948],[18.02021,46.84631],[18.02961,46.84829],[18.02742,46.85392],[18.03388,46.85534],[18.03056,46.86395],[18.03367,46.86456],[18.03058,46.87154],[18.00803,46.86674]],[[17.99509,46.87632],[17.98585,46.87595],[17.98535,46.88397],[17.98599,46.88412],[17.98531,46.88537],[17.95829,46.87876],[17.96077,46.87351],[17.92868,46.86631],[17.92467,46.87372],[17.93136,46.87535],[17.92995,46.87822],[17.9553,46.88415],[17.9946,46.89341],[17.99786,46.88671],[17.98771,46.88443],[17.98774,46.88411],[17.99415,46.88442],[17.99509,46.87632]],[[18.86533,47.42808],[18.87291,47.42455],[18.87701,47.42871],[18.86799,47.43238],[18.86774,47.43208],[18.86517,47.43317],[18.86477,47.4327],[18.86441,47.43285],[18.86288,47.43108],[18.86328,47.43092],[18.86288,47.43046],[18.86516,47.42947],[18.86448,47.42875],[18.86553,47.42829],[18.86533,47.42808]],[[19.16232,47.59776],[19.16893,47.59033],[19.17815,47.59512],[19.17291,47.60068],[19.16232,47.59776]],[[18.13162,47.02619],[18.14103,47.02111],[18.13923,47.01957],[18.15704,47.01044],[18.16271,47.00242],[18.16463,46.99571],[18.16639,46.9959],[18.16702,46.99363],[18.17101,46.99454],[18.1722,46.99571],[18.16977,47.00416],[18.17656,47.00709],[18.1761,47.00771],[18.17639,47.00781],[18.17057,47.01414],[18.1748,47.01815],[18.17782,47.01428],[18.18518,47.01746],[18.17933,47.0239],[18.17589,47.02268],[18.17277,47.02434],[18.17219,47.02377],[18.17159,47.02407],[18.16938,47.0221],[18.16216,47.02596],[18.16485,47.02832],[18.16245,47.02947],[18.16323,47.03025],[18.1521,47.03554],[18.15156,47.03498],[18.1503,47.03563],[18.14513,47.03112],[18.14337,47.0322],[18.1454,47.03419],[18.14441,47.03467],[18.14522,47.03539],[18.14168,47.03697],[18.13111,47.02745],[18.13226,47.0269],[18.13162,47.02619]],[[17.79852,46.81745],[17.79178,46.81585],[17.79601,46.80664],[17.7948,46.80598],[17.79693,46.80056],[17.80109,46.79993],[17.80736,46.80225],[17.79852,46.81745]],[[17.7788,46.81461],[17.78446,46.80714],[17.79083,46.80925],[17.7853,46.81683],[17.7788,46.81461]]],terms_text:"openstreetmap.hu"},{id:"OpenTopoMap",name:"OpenTopoMap",type:"tms",template:"https://{switch:a,b,c}.tile.opentopomap.org/{zoom}/{x}/{y}.png",zoomExtent:[3,17],terms_url:"https://tile.opentopomap.org/about#verwendung",terms_text:"Kartendaten: © OpenStreetMap-Mitwirkende, SRTM | Kartendarstellung: © OpenTopoMap (CC-BY-SA)",icon:"https://osmlab.github.io/editor-layer-index/sources/world/OpenTopoMap.png"},{id:"lu.geoportail.opendata.ortho2010",name:"Ortho 2010 geoportail.lu",type:"tms",template:"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/ortho_2010/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.jpeg",endDate:"2010-07-02T00:00:00.000Z",startDate:"2010-06-24T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[5.96175,50.17631],[6.02627,50.18496],[6.03318,50.16395],[6.06069,50.15536],[6.07668,50.15913],[6.07824,50.17255],[6.10176,50.17199],[6.1225,50.16437],[6.1201,50.15594],[6.1277,50.14993],[6.11323,50.13739],[6.12369,50.13719],[6.14093,50.1305],[6.13555,50.11899],[6.13808,50.10263],[6.13108,50.09964],[6.13547,50.09119],[6.12194,50.09059],[6.12634,50.07817],[6.13186,50.07348],[6.12117,50.064],[6.11444,50.06139],[6.11563,50.05817],[6.12361,50.06323],[6.13661,50.04178],[6.13034,50.02975],[6.14821,50.02307],[6.13868,50.01572],[6.13594,50.01485],[6.13138,50.01905],[6.13024,50.01819],[6.13934,50.01116],[6.1517,50.01058],[6.14546,49.99689],[6.13966,49.9994],[6.13852,49.99829],[6.14218,49.99535],[6.15023,49.99518],[6.15625,49.98867],[6.17305,49.98589],[6.17348,49.98344],[6.17035,49.98376],[6.16549,49.97115],[6.17151,49.96298],[6.1763,49.962],[6.17995,49.95386],[6.18339,49.9548],[6.17983,49.96307],[6.18331,49.9686],[6.19277,49.97158],[6.19978,49.95352],[6.20707,49.95672],[6.21269,49.9514],[6.22502,49.95039],[6.22044,49.94369],[6.22824,49.93726],[6.22635,49.92766],[6.21913,49.92354],[6.22986,49.92125],[6.23603,49.91355],[6.23187,49.91064],[6.22769,49.91062],[6.23229,49.9072],[6.23381,49.90028],[6.24692,49.89535],[6.25781,49.88724],[6.26301,49.88101],[6.27646,49.87725],[6.28113,49.87957],[6.29166,49.87548],[6.2977,49.86673],[6.30989,49.87107],[6.31532,49.8673],[6.31465,49.86057],[6.32361,49.85188],[6.32158,49.8409],[6.32741,49.83673],[6.33656,49.83998],[6.33937,49.8507],[6.36465,49.85164],[6.4022,49.82098],[6.42643,49.81629],[6.42807,49.81186],[6.43097,49.81129],[6.44161,49.81547],[6.44344,49.81233],[6.45366,49.81275],[6.46454,49.81975],[6.47057,49.82385],[6.49681,49.81277],[6.50669,49.80993],[6.51155,49.80238],[6.51485,49.80513],[6.5196,49.81446],[6.52981,49.81048],[6.53225,49.80686],[6.53083,49.80116],[6.50622,49.78899],[6.51917,49.78344],[6.51105,49.77422],[6.52056,49.76818],[6.52052,49.76134],[6.50373,49.75086],[6.50263,49.73298],[6.50727,49.72938],[6.51809,49.7242],[6.51642,49.72129],[6.51176,49.72016],[6.50479,49.725],[6.49891,49.72639],[6.49558,49.72443],[6.50712,49.71655],[6.50788,49.71215],[6.5046,49.71227],[6.42714,49.66237],[6.4399,49.66025],[6.44251,49.65591],[6.42178,49.61809],[6.39898,49.60094],[6.37941,49.59526],[6.37551,49.58809],[6.38443,49.5801],[6.38119,49.57509],[6.36909,49.5783],[6.35791,49.57166],[6.3849,49.55817],[6.38009,49.54856],[6.35855,49.53296],[6.35932,49.52481],[6.37076,49.50545],[6.37056,49.45732],[6.3334,49.46493],[6.32189,49.47244],[6.29503,49.47928],[6.28789,49.48379],[6.27191,49.49995],[6.24133,49.50693],[6.19669,49.50331],[6.17337,49.50577],[6.16086,49.50085],[6.1671,49.49006],[6.14018,49.48525],[6.12937,49.48803],[6.12725,49.47081],[6.1014,49.46726],[6.10483,49.45076],[6.08167,49.45417],[6.07722,49.46139],[6.05917,49.46306],[6.05222,49.46028],[6.04421,49.44553],[6.02529,49.44703],[6.02154,49.45127],[6.01574,49.44885],[5.99412,49.45301],[5.97657,49.44885],[5.97773,49.45955],[5.97232,49.46087],[5.96891,49.48202],[5.9616,49.49026],[5.91578,49.49835],[5.89033,49.4948],[5.86332,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.83187,49.52639],[5.84308,49.53081],[5.83562,49.54114],[5.81625,49.53325],[5.8052,49.54272],[5.85943,49.57158],[5.86866,49.587],[5.86289,49.58525],[5.8511,49.58379],[5.84712,49.58961],[5.84565,49.5981],[5.8694,49.6106],[5.88182,49.63815],[5.89998,49.63907],[5.89934,49.66239],[5.85656,49.67628],[5.85628,49.68211],[5.8757,49.71118],[5.86481,49.72331],[5.84325,49.71822],[5.82191,49.72128],[5.82489,49.73767],[5.82073,49.74878],[5.78626,49.79079],[5.76517,49.78961],[5.75094,49.79094],[5.74159,49.82126],[5.74581,49.82435],[5.7372,49.83353],[5.74053,49.84142],[5.74701,49.84048],[5.74624,49.84783],[5.75399,49.84878],[5.74066,49.85152],[5.75229,49.85922],[5.74955,49.87554],[5.77567,49.87438],[5.77505,49.88057],[5.7346,49.89341],[5.73303,49.90285],[5.75783,49.91737],[5.76039,49.93252],[5.77073,49.93711],[5.76878,49.94239],[5.7688,49.96104],[5.78672,49.96816],[5.80524,49.96677],[5.80652,49.97321],[5.83129,49.97995],[5.83462,49.98656],[5.81806,49.99936],[5.81561,50.01437],[5.84792,50.02809],[5.86189,50.04581],[5.85087,50.0563],[5.85781,50.07186],[5.881,50.08069],[5.89196,50.12041],[5.95286,50.13384],[5.96175,50.17631]]],terms_url:"https://data.public.lu/en/datasets/bd-l-ortho-webservices-wms-et-wmts",terms_text:"Administration du Cadastre et de la Topographie",icon:"https://www.geoportail.lu/static/img/lion.png"},{id:"lu.geoportail.opendata.ortho2013",name:"Ortho 2013 geoportail.lu",type:"tms",template:"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/ortho_2013/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.jpeg",endDate:"2013-07-20T00:00:00.000Z",startDate:"2013-07-19T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[5.96175,50.17631],[6.02627,50.18496],[6.03318,50.16395],[6.06069,50.15536],[6.07668,50.15913],[6.07824,50.17255],[6.10176,50.17199],[6.1225,50.16437],[6.1201,50.15594],[6.1277,50.14993],[6.11323,50.13739],[6.12369,50.13719],[6.14093,50.1305],[6.13555,50.11899],[6.13808,50.10263],[6.13108,50.09964],[6.13547,50.09119],[6.12194,50.09059],[6.12634,50.07817],[6.13186,50.07348],[6.12117,50.064],[6.11444,50.06139],[6.11563,50.05817],[6.12361,50.06323],[6.13661,50.04178],[6.13034,50.02975],[6.14821,50.02307],[6.13868,50.01572],[6.13594,50.01485],[6.13138,50.01905],[6.13024,50.01819],[6.13934,50.01116],[6.1517,50.01058],[6.14546,49.99689],[6.13966,49.9994],[6.13852,49.99829],[6.14218,49.99535],[6.15023,49.99518],[6.15625,49.98867],[6.17305,49.98589],[6.17348,49.98344],[6.17035,49.98376],[6.16549,49.97115],[6.17151,49.96298],[6.1763,49.962],[6.17995,49.95386],[6.18339,49.9548],[6.17983,49.96307],[6.18331,49.9686],[6.19277,49.97158],[6.19978,49.95352],[6.20707,49.95672],[6.21269,49.9514],[6.22502,49.95039],[6.22044,49.94369],[6.22824,49.93726],[6.22635,49.92766],[6.21913,49.92354],[6.22986,49.92125],[6.23603,49.91355],[6.23187,49.91064],[6.22769,49.91062],[6.23229,49.9072],[6.23381,49.90028],[6.24692,49.89535],[6.25781,49.88724],[6.26301,49.88101],[6.27646,49.87725],[6.28113,49.87957],[6.29166,49.87548],[6.2977,49.86673],[6.30989,49.87107],[6.31532,49.8673],[6.31465,49.86057],[6.32361,49.85188],[6.32158,49.8409],[6.32741,49.83673],[6.33656,49.83998],[6.33937,49.8507],[6.36465,49.85164],[6.4022,49.82098],[6.42643,49.81629],[6.42807,49.81186],[6.43097,49.81129],[6.44161,49.81547],[6.44344,49.81233],[6.45366,49.81275],[6.46454,49.81975],[6.47057,49.82385],[6.49681,49.81277],[6.50669,49.80993],[6.51155,49.80238],[6.51485,49.80513],[6.5196,49.81446],[6.52981,49.81048],[6.53225,49.80686],[6.53083,49.80116],[6.50622,49.78899],[6.51917,49.78344],[6.51105,49.77422],[6.52056,49.76818],[6.52052,49.76134],[6.50373,49.75086],[6.50263,49.73298],[6.50727,49.72938],[6.51809,49.7242],[6.51642,49.72129],[6.51176,49.72016],[6.50479,49.725],[6.49891,49.72639],[6.49558,49.72443],[6.50712,49.71655],[6.50788,49.71215],[6.5046,49.71227],[6.42714,49.66237],[6.4399,49.66025],[6.44251,49.65591],[6.42178,49.61809],[6.39898,49.60094],[6.37941,49.59526],[6.37551,49.58809],[6.38443,49.5801],[6.38119,49.57509],[6.36909,49.5783],[6.35791,49.57166],[6.3849,49.55817],[6.38009,49.54856],[6.35855,49.53296],[6.35932,49.52481],[6.37076,49.50545],[6.37056,49.45732],[6.3334,49.46493],[6.32189,49.47244],[6.29503,49.47928],[6.28789,49.48379],[6.27191,49.49995],[6.24133,49.50693],[6.19669,49.50331],[6.17337,49.50577],[6.16086,49.50085],[6.1671,49.49006],[6.14018,49.48525],[6.12937,49.48803],[6.12725,49.47081],[6.1014,49.46726],[6.10483,49.45076],[6.08167,49.45417],[6.07722,49.46139],[6.05917,49.46306],[6.05222,49.46028],[6.04421,49.44553],[6.02529,49.44703],[6.02154,49.45127],[6.01574,49.44885],[5.99412,49.45301],[5.97657,49.44885],[5.97773,49.45955],[5.97232,49.46087],[5.96891,49.48202],[5.9616,49.49026],[5.91578,49.49835],[5.89033,49.4948],[5.86332,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.83187,49.52639],[5.84308,49.53081],[5.83562,49.54114],[5.81625,49.53325],[5.8052,49.54272],[5.85943,49.57158],[5.86866,49.587],[5.86289,49.58525],[5.8511,49.58379],[5.84712,49.58961],[5.84565,49.5981],[5.8694,49.6106],[5.88182,49.63815],[5.89998,49.63907],[5.89934,49.66239],[5.85656,49.67628],[5.85628,49.68211],[5.8757,49.71118],[5.86481,49.72331],[5.84325,49.71822],[5.82191,49.72128],[5.82489,49.73767],[5.82073,49.74878],[5.78626,49.79079],[5.76517,49.78961],[5.75094,49.79094],[5.74159,49.82126],[5.74581,49.82435],[5.7372,49.83353],[5.74053,49.84142],[5.74701,49.84048],[5.74624,49.84783],[5.75399,49.84878],[5.74066,49.85152],[5.75229,49.85922],[5.74955,49.87554],[5.77567,49.87438],[5.77505,49.88057],[5.7346,49.89341],[5.73303,49.90285],[5.75783,49.91737],[5.76039,49.93252],[5.77073,49.93711],[5.76878,49.94239],[5.7688,49.96104],[5.78672,49.96816],[5.80524,49.96677],[5.80652,49.97321],[5.83129,49.97995],[5.83462,49.98656],[5.81806,49.99936],[5.81561,50.01437],[5.84792,50.02809],[5.86189,50.04581],[5.85087,50.0563],[5.85781,50.07186],[5.881,50.08069],[5.89196,50.12041],[5.95286,50.13384],[5.96175,50.17631]]],terms_url:"https://data.public.lu/en/datasets/bd-l-ortho-webservices-wms-et-wmts",terms_text:"Administration du Cadastre et de la Topographie",icon:"https://www.geoportail.lu/static/img/lion.png"},{id:"lu.geoportail.opendata.ortho2016",name:"Ortho 2016 geoportail.lu",type:"tms",template:"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/ortho_2016/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.jpeg",endDate:"2016-08-16T00:00:00.000Z",startDate:"2013-08-30T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[5.96175,50.17631],[6.02627,50.18496],[6.03318,50.16395],[6.06069,50.15536],[6.07668,50.15913],[6.07824,50.17255],[6.10176,50.17199],[6.1225,50.16437],[6.1201,50.15594],[6.1277,50.14993],[6.11323,50.13739],[6.12369,50.13719],[6.14093,50.1305],[6.13555,50.11899],[6.13808,50.10263],[6.13108,50.09964],[6.13547,50.09119],[6.12194,50.09059],[6.12634,50.07817],[6.13186,50.07348],[6.12117,50.064],[6.11444,50.06139],[6.11563,50.05817],[6.12361,50.06323],[6.13661,50.04178],[6.13034,50.02975],[6.14821,50.02307],[6.13868,50.01572],[6.13594,50.01485],[6.13138,50.01905],[6.13024,50.01819],[6.13934,50.01116],[6.1517,50.01058],[6.14546,49.99689],[6.13966,49.9994],[6.13852,49.99829],[6.14218,49.99535],[6.15023,49.99518],[6.15625,49.98867],[6.17305,49.98589],[6.17348,49.98344],[6.17035,49.98376],[6.16549,49.97115],[6.17151,49.96298],[6.1763,49.962],[6.17995,49.95386],[6.18339,49.9548],[6.17983,49.96307],[6.18331,49.9686],[6.19277,49.97158],[6.19978,49.95352],[6.20707,49.95672],[6.21269,49.9514],[6.22502,49.95039],[6.22044,49.94369],[6.22824,49.93726],[6.22635,49.92766],[6.21913,49.92354],[6.22986,49.92125],[6.23603,49.91355],[6.23187,49.91064],[6.22769,49.91062],[6.23229,49.9072],[6.23381,49.90028],[6.24692,49.89535],[6.25781,49.88724],[6.26301,49.88101],[6.27646,49.87725],[6.28113,49.87957],[6.29166,49.87548],[6.2977,49.86673],[6.30989,49.87107],[6.31532,49.8673],[6.31465,49.86057],[6.32361,49.85188],[6.32158,49.8409],[6.32741,49.83673],[6.33656,49.83998],[6.33937,49.8507],[6.36465,49.85164],[6.4022,49.82098],[6.42643,49.81629],[6.42807,49.81186],[6.43097,49.81129],[6.44161,49.81547],[6.44344,49.81233],[6.45366,49.81275],[6.46454,49.81975],[6.47057,49.82385],[6.49681,49.81277],[6.50669,49.80993],[6.51155,49.80238],[6.51485,49.80513],[6.5196,49.81446],[6.52981,49.81048],[6.53225,49.80686],[6.53083,49.80116],[6.50622,49.78899],[6.51917,49.78344],[6.51105,49.77422],[6.52056,49.76818],[6.52052,49.76134],[6.50373,49.75086],[6.50263,49.73298],[6.50727,49.72938],[6.51809,49.7242],[6.51642,49.72129],[6.51176,49.72016],[6.50479,49.725],[6.49891,49.72639],[6.49558,49.72443],[6.50712,49.71655],[6.50788,49.71215],[6.5046,49.71227],[6.42714,49.66237],[6.4399,49.66025],[6.44251,49.65591],[6.42178,49.61809],[6.39898,49.60094],[6.37941,49.59526],[6.37551,49.58809],[6.38443,49.5801],[6.38119,49.57509],[6.36909,49.5783],[6.35791,49.57166],[6.3849,49.55817],[6.38009,49.54856],[6.35855,49.53296],[6.35932,49.52481],[6.37076,49.50545],[6.37056,49.45732],[6.3334,49.46493],[6.32189,49.47244],[6.29503,49.47928],[6.28789,49.48379],[6.27191,49.49995],[6.24133,49.50693],[6.19669,49.50331],[6.17337,49.50577],[6.16086,49.50085],[6.1671,49.49006],[6.14018,49.48525],[6.12937,49.48803],[6.12725,49.47081],[6.1014,49.46726],[6.10483,49.45076],[6.08167,49.45417],[6.07722,49.46139],[6.05917,49.46306],[6.05222,49.46028],[6.04421,49.44553],[6.02529,49.44703],[6.02154,49.45127],[6.01574,49.44885],[5.99412,49.45301],[5.97657,49.44885],[5.97773,49.45955],[5.97232,49.46087],[5.96891,49.48202],[5.9616,49.49026],[5.91578,49.49835],[5.89033,49.4948],[5.86332,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.83187,49.52639],[5.84308,49.53081],[5.83562,49.54114],[5.81625,49.53325],[5.8052,49.54272],[5.85943,49.57158],[5.86866,49.587],[5.86289,49.58525],[5.8511,49.58379],[5.84712,49.58961],[5.84565,49.5981],[5.8694,49.6106],[5.88182,49.63815],[5.89998,49.63907],[5.89934,49.66239],[5.85656,49.67628],[5.85628,49.68211],[5.8757,49.71118],[5.86481,49.72331],[5.84325,49.71822],[5.82191,49.72128],[5.82489,49.73767],[5.82073,49.74878],[5.78626,49.79079],[5.76517,49.78961],[5.75094,49.79094],[5.74159,49.82126],[5.74581,49.82435],[5.7372,49.83353],[5.74053,49.84142],[5.74701,49.84048],[5.74624,49.84783],[5.75399,49.84878],[5.74066,49.85152],[5.75229,49.85922],[5.74955,49.87554],[5.77567,49.87438],[5.77505,49.88057],[5.7346,49.89341],[5.73303,49.90285],[5.75783,49.91737],[5.76039,49.93252],[5.77073,49.93711],[5.76878,49.94239],[5.7688,49.96104],[5.78672,49.96816],[5.80524,49.96677],[5.80652,49.97321],[5.83129,49.97995],[5.83462,49.98656],[5.81806,49.99936],[5.81561,50.01437],[5.84792,50.02809],[5.86189,50.04581],[5.85087,50.0563],[5.85781,50.07186],[5.881,50.08069],[5.89196,50.12041],[5.95286,50.13384],[5.96175,50.17631]]],terms_url:"https://data.public.lu/en/datasets/bd-l-ortho-webservices-wms-et-wmts",terms_text:"Administration du Cadastre et de la Topographie",icon:"https://www.geoportail.lu/static/img/lion.png"},{id:"lu.geoportail.opendata.ortho2017",name:"Ortho 2017 geoportail.lu",type:"tms",template:"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/ortho_2017/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.jpeg",endDate:"2017-06-22T00:00:00.000Z",startDate:"2017-06-14T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[5.96175,50.17631],[6.02627,50.18496],[6.03318,50.16395],[6.06069,50.15536],[6.07668,50.15913],[6.07824,50.17255],[6.10176,50.17199],[6.1225,50.16437],[6.1201,50.15594],[6.1277,50.14993],[6.11323,50.13739],[6.12369,50.13719],[6.14093,50.1305],[6.13555,50.11899],[6.13808,50.10263],[6.13108,50.09964],[6.13547,50.09119],[6.12194,50.09059],[6.12634,50.07817],[6.13186,50.07348],[6.12117,50.064],[6.11444,50.06139],[6.11563,50.05817],[6.12361,50.06323],[6.13661,50.04178],[6.13034,50.02975],[6.14821,50.02307],[6.13868,50.01572],[6.13594,50.01485],[6.13138,50.01905],[6.13024,50.01819],[6.13934,50.01116],[6.1517,50.01058],[6.14546,49.99689],[6.13966,49.9994],[6.13852,49.99829],[6.14218,49.99535],[6.15023,49.99518],[6.15625,49.98867],[6.17305,49.98589],[6.17348,49.98344],[6.17035,49.98376],[6.16549,49.97115],[6.17151,49.96298],[6.1763,49.962],[6.17995,49.95386],[6.18339,49.9548],[6.17983,49.96307],[6.18331,49.9686],[6.19277,49.97158],[6.19978,49.95352],[6.20707,49.95672],[6.21269,49.9514],[6.22502,49.95039],[6.22044,49.94369],[6.22824,49.93726],[6.22635,49.92766],[6.21913,49.92354],[6.22986,49.92125],[6.23603,49.91355],[6.23187,49.91064],[6.22769,49.91062],[6.23229,49.9072],[6.23381,49.90028],[6.24692,49.89535],[6.25781,49.88724],[6.26301,49.88101],[6.27646,49.87725],[6.28113,49.87957],[6.29166,49.87548],[6.2977,49.86673],[6.30989,49.87107],[6.31532,49.8673],[6.31465,49.86057],[6.32361,49.85188],[6.32158,49.8409],[6.32741,49.83673],[6.33656,49.83998],[6.33937,49.8507],[6.36465,49.85164],[6.4022,49.82098],[6.42643,49.81629],[6.42807,49.81186],[6.43097,49.81129],[6.44161,49.81547],[6.44344,49.81233],[6.45366,49.81275],[6.46454,49.81975],[6.47057,49.82385],[6.49681,49.81277],[6.50669,49.80993],[6.51155,49.80238],[6.51485,49.80513],[6.5196,49.81446],[6.52981,49.81048],[6.53225,49.80686],[6.53083,49.80116],[6.50622,49.78899],[6.51917,49.78344],[6.51105,49.77422],[6.52056,49.76818],[6.52052,49.76134],[6.50373,49.75086],[6.50263,49.73298],[6.50727,49.72938],[6.51809,49.7242],[6.51642,49.72129],[6.51176,49.72016],[6.50479,49.725],[6.49891,49.72639],[6.49558,49.72443],[6.50712,49.71655],[6.50788,49.71215],[6.5046,49.71227],[6.42714,49.66237],[6.4399,49.66025],[6.44251,49.65591],[6.42178,49.61809],[6.39898,49.60094],[6.37941,49.59526],[6.37551,49.58809],[6.38443,49.5801],[6.38119,49.57509],[6.36909,49.5783],[6.35791,49.57166],[6.3849,49.55817],[6.38009,49.54856],[6.35855,49.53296],[6.35932,49.52481],[6.37076,49.50545],[6.37056,49.45732],[6.3334,49.46493],[6.32189,49.47244],[6.29503,49.47928],[6.28789,49.48379],[6.27191,49.49995],[6.24133,49.50693],[6.19669,49.50331],[6.17337,49.50577],[6.16086,49.50085],[6.1671,49.49006],[6.14018,49.48525],[6.12937,49.48803],[6.12725,49.47081],[6.1014,49.46726],[6.10483,49.45076],[6.08167,49.45417],[6.07722,49.46139],[6.05917,49.46306],[6.05222,49.46028],[6.04421,49.44553],[6.02529,49.44703],[6.02154,49.45127],[6.01574,49.44885],[5.99412,49.45301],[5.97657,49.44885],[5.97773,49.45955],[5.97232,49.46087],[5.96891,49.48202],[5.9616,49.49026],[5.91578,49.49835],[5.89033,49.4948],[5.86332,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.83187,49.52639],[5.84308,49.53081],[5.83562,49.54114],[5.81625,49.53325],[5.8052,49.54272],[5.85943,49.57158],[5.86866,49.587],[5.86289,49.58525],[5.8511,49.58379],[5.84712,49.58961],[5.84565,49.5981],[5.8694,49.6106],[5.88182,49.63815],[5.89998,49.63907],[5.89934,49.66239],[5.85656,49.67628],[5.85628,49.68211],[5.8757,49.71118],[5.86481,49.72331],[5.84325,49.71822],[5.82191,49.72128],[5.82489,49.73767],[5.82073,49.74878],[5.78626,49.79079],[5.76517,49.78961],[5.75094,49.79094],[5.74159,49.82126],[5.74581,49.82435],[5.7372,49.83353],[5.74053,49.84142],[5.74701,49.84048],[5.74624,49.84783],[5.75399,49.84878],[5.74066,49.85152],[5.75229,49.85922],[5.74955,49.87554],[5.77567,49.87438],[5.77505,49.88057],[5.7346,49.89341],[5.73303,49.90285],[5.75783,49.91737],[5.76039,49.93252],[5.77073,49.93711],[5.76878,49.94239],[5.7688,49.96104],[5.78672,49.96816],[5.80524,49.96677],[5.80652,49.97321],[5.83129,49.97995],[5.83462,49.98656],[5.81806,49.99936],[5.81561,50.01437],[5.84792,50.02809],[5.86189,50.04581],[5.85087,50.0563],[5.85781,50.07186],[5.881,50.08069],[5.89196,50.12041],[5.95286,50.13384],[5.96175,50.17631]]],terms_url:"https://data.public.lu/en/datasets/bd-l-ortho-webservices-wms-et-wmts",terms_text:"Administration du Cadastre et de la Topographie",icon:"https://www.geoportail.lu/static/img/lion.png"},{id:"ORTOFOTO_V1",name:"Orthophoto 1st cycle (1994-1999) - Latvia",type:"wms",template:"https://services.lgia.gov.lv/arcfree/services/Ortofoto_v1/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[27.66415,55.75354],[27.68475,55.93319],[28.26703,56.1908],[28.23682,56.49827],[27.82757,56.94886],[27.90997,57.37037],[27.58313,57.56387],[26.93219,57.63598],[26.5202,57.58596],[26.0368,57.87192],[25.1991,58.10487],[24.31744,57.90258],[24.31744,57.19669],[23.93567,56.9788],[23.55115,56.98479],[23.23804,57.10283],[23.14465,57.37333],[22.60632,57.60215],[22.60083,57.76953],[21.66699,57.56681],[21.40057,57.29625],[21.38409,57.0177],[21.04626,56.80026],[20.99133,56.36615],[21.0545,56.0392],[21.28796,56.05608],[21.29895,56.1908],[22.11743,56.41936],[24.44379,56.24425],[24.81183,56.3996],[25.15515,56.1694],[25.58087,56.12962],[26.53668,55.66146],[26.91296,55.66766],[27.0805,55.80991],[27.66415,55.75354]]],terms_text:"Latvijas Ģeotelpiskās informācijas aģentūras brīvais WMS serviss 1994 - 1999.gada Latvijas ortofotokarte"},{id:"ORTOS_DGRF_2004_06",name:"Ortofotos DGRF 2004-2006 (WMS)",type:"wms",template:"http://mapas.dgterritorio.pt:8888/wms/produtos?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Ortos&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2006-01-01T00:00:00.000Z",startDate:"2004-01-01T00:00:00.000Z",zoomExtent:[14,19],polygon:[[[-7.31278,36.98391],[-7.44461,37.5718],[-7.1933,37.97019],[-6.97357,38.00807],[-6.90628,38.24142],[-7.06627,38.20743],[-7.27158,38.45628],[-7.20429,38.72356],[-7.0134,38.85468],[-6.91315,39.03839],[-6.97357,39.13113],[-7.17957,39.23651],[-7.28668,39.48497],[-7.44873,39.61838],[-7.34162,39.60886],[-6.99692,39.64906],[-6.81839,40.0192],[-7.01065,40.19986],[-6.85272,40.24285],[-6.76209,40.35073],[-6.77994,40.8886],[-6.88637,41.01151],[-6.79642,41.01721],[-6.63849,41.21689],[-6.4531,41.24116],[-6.29311,41.38763],[-6.15715,41.5908],[-6.31165,41.68932],[-6.51215,41.71188],[-6.49841,41.88081],[-6.56296,41.97991],[-6.80191,42.00951],[-7.20497,42.00135],[-7.22763,41.8849],[-7.36908,41.87058],[-7.72751,41.92885],[-7.92526,41.94009],[-8.07907,41.84706],[-8.1601,41.91812],[-8.01796,42.05031],[-8.19924,42.18681],[-8.39356,42.1023],[-8.66066,42.07886],[-8.88382,41.88081],[-9.17084,41.86956],[-9.04175,41.43655],[-9.01978,40.65981],[-9.15711,40.26695],[-9.81903,39.52099],[-9.74213,38.6512],[-9.12964,37.88136],[-9.27246,36.99378],[-9.09394,36.68604],[-7.80579,36.74989],[-7.31278,36.98391]]],terms_url:"http://www.dgterritorio.pt/dados_abertos/ortofotos/",terms_text:"Direcção-Geral do Território",icon:"http://www.igeo.pt/favicon.ico"},{id:"ORTOS_DGT_2014_15",name:"Ortofotos Litoral DGT 2014-2015 (WMS)",type:"wms",template:"http://ows.dgterritorio.pt/wss/service/ortos2014-2015-wms/guest?language=por&FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Ortoimagens_2014-2015_Litoral&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",zoomExtent:[1,20],polygon:[[[-7.38968,37.19205],[-7.52426,37.18002],[-7.89505,36.98171],[-8.15186,37.10886],[-8.65036,37.14062],[-8.95111,37.03545],[-8.78632,37.34833],[-8.76434,37.55111],[-8.7561,38.38258],[-8.47664,38.33466],[-8.47183,38.40141],[-8.66066,38.46596],[-8.66959,38.60882],[-9.142,38.53689],[-8.81104,38.67372],[-8.79318,38.85468],[-8.95935,38.9829],[-9.18732,38.84934],[-9.2395,38.72838],[-9.37821,38.74659],[-9.38233,39.07891],[-9.29169,39.2514],[-9.31915,39.33642],[-9.17084,39.38526],[-9.06372,39.48815],[-9.02252,39.69662],[-8.78632,40.14529],[-8.86322,40.2093],[-8.72589,40.53155],[-8.64075,40.50858],[-8.62427,40.63063],[-8.53089,40.6004],[-8.535,40.71292],[-8.61466,40.89275],[-8.61878,41.10419],[-8.53089,41.16728],[-8.66959,41.21689],[-8.72315,41.41081],[-8.76984,41.65958],[-8.66547,41.73955],[-8.81104,41.72316],[-8.81104,41.85217],[-8.74649,41.9125],[-8.83576,41.93089],[-8.91815,41.84501],[-8.89343,41.70778],[-8.82065,41.50755],[-8.73139,41.16315],[-8.67508,41.069],[-8.68469,40.90729],[-8.93326,40.17573],[-8.88107,40.12219],[-9.11453,39.64694],[-9.11865,39.5623],[-9.3013,39.40543],[-9.43039,39.37571],[-9.34799,39.23864],[-9.45099,39.04799],[-9.45786,38.89317],[-9.53201,38.78835],[-9.50043,38.68551],[-9.28894,38.663],[-9.19418,38.54172],[-9.25324,38.38473],[-9.03488,38.42347],[-8.92502,38.46757],[-8.81241,38.35997],[-8.7973,38.14968],[-8.91953,37.95286],[-8.84262,37.8651],[-8.83988,37.40617],[-9.02664,37.01023],[-8.92914,36.97513],[-8.61466,37.099],[-8.15048,37.05956],[-7.8923,36.93672],[-7.48993,37.15156],[-7.39105,37.15813],[-7.38968,37.19205]]],terms_url:"http://www.dgterritorio.pt/",terms_text:"Direcção-Geral do Território",icon:"http://www.igeo.pt/favicon.ico"},{id:"OS-historic-25k-OSM_Limited",name:"OS 1:25k historic (OSM)",type:"tms",template:"https://ooc.openstreetmap.org/os1/{zoom}/{x}/{y}.jpg",zoomExtent:[6,17],polygon:[[[-6.45854,49.90441],[-6.3872,49.98411],[-6.22968,49.98962],[-6.21713,49.86801],[-6.45512,49.85918],[-6.45854,49.90441]],[[-1.44951,60.86341],[-0.71671,60.85451],[-0.73497,60.43598],[-0.69388,60.41682],[-0.72584,60.39427],[-0.73954,60.04847],[-0.92674,60.04619],[-0.93815,59.82662],[-1.45865,59.8312],[-1.44552,60.0536],[-1.46321,60.0536],[-1.46435,60.063],[-1.57165,60.06385],[-1.56936,60.179],[-1.64356,60.1807],[-1.64356,60.18922],[-1.82162,60.1895],[-1.82048,60.36155],[-1.8416,60.36973],[-1.82162,60.38328],[-1.81799,60.59343],[-1.45317,60.59343],[-1.44951,60.86341]],[[-4.90892,54.42421],[-4.2826,54.44299],[-4.25354,54.02977],[-4.87664,54.02218],[-4.90892,54.42421]],[[-5.86674,59.14446],[-5.776,59.14709],[-5.772,59.10141],[-5.86218,59.09906],[-5.86674,59.14446]],[[-1.70659,59.57036],[-1.55792,59.56935],[-1.55649,59.49657],[-1.70545,59.49758],[-1.70659,59.57036]],[[-7.68658,58.2941],[-7.53306,58.3007],[-7.52564,58.26469],[-7.67973,58.25779],[-7.68658,58.2941]],[[-4.53383,59.03599],[-4.48132,59.03716],[-4.47961,59.01866],[-4.53326,59.01807],[-4.53383,59.03599]],[[-8.67107,57.87699],[-8.46732,57.88973],[-8.44678,57.7907],[-8.65109,57.77792],[-8.67107,57.87699]],[[-5.23955,50.35306],[-5.79201,50.33849],[-5.76005,49.9317],[-4.65514,49.95815],[-4.67797,50.28601],[-4.24422,50.28017],[-4.24878,50.20425],[-3.38129,50.20425],[-3.42238,50.51882],[-3.11648,50.52463],[-3.12105,50.65796],[-2.67364,50.66195],[-2.59535,50.63943],[-2.5905,50.57284],[-2.47912,50.57335],[-2.47589,50.50667],[-2.39679,50.50564],[-2.40164,50.57233],[-1.04003,50.57182],[-1.03357,50.70593],[-0.5493,50.70388],[-0.54607,50.78866],[-0.09247,50.7856],[-0.08763,50.71819],[0.47897,50.71206],[0.48704,50.81825],[0.97615,50.80499],[0.99229,51.01263],[1.44912,51.00044],[1.47818,51.40904],[1.02296,51.42716],[1.03588,51.76409],[1.61054,51.7501],[1.64606,52.156],[1.72677,52.15402],[1.74937,52.44818],[1.78707,52.48116],[1.7591,52.52251],[1.79335,52.96027],[0.37981,52.99585],[0.38952,53.25112],[0.34786,53.25112],[0.32389,53.28219],[0.34615,53.65385],[0.12849,53.65755],[0.11658,53.66747],[0.13506,54.06557],[-0.06098,54.06591],[-0.04142,54.47094],[-0.56627,54.47718],[-0.55921,54.65651],[-1.16656,54.66235],[-1.16374,54.84261],[-1.33162,54.84391],[-1.32571,55.24708],[-1.52945,55.24871],[-1.52418,55.65401],[-1.76388,55.65401],[-1.77337,55.97191],[-2.16079,55.9683],[-2.15433,56.06214],[-2.45781,56.05853],[-2.41906,56.64172],[-2.09622,56.64172],[-2.0833,57.00213],[-1.92834,57.01268],[-1.9181,57.35909],[-1.75022,57.36257],[-1.76959,57.76086],[-3.69376,57.75742],[-3.70667,57.98064],[-3.5969,57.97721],[-3.60336,58.12073],[-3.02223,58.13096],[-3.02869,58.54108],[-2.8479,58.53097],[-2.86081,58.84305],[-2.67962,58.8415],[-2.68419,58.88517],[-2.63397,58.90522],[-2.67962,58.93351],[-2.68876,59.02292],[-2.36687,59.02292],[-2.37029,59.26529],[-2.3429,59.2822],[-2.37144,59.29969],[-2.37372,59.37071],[-2.3429,59.38582],[-2.37258,59.40035],[-2.37144,59.42591],[-3.07342,59.42301],[-3.07114,59.34336],[-3.1031,59.33114],[-3.07456,59.31367],[-3.07228,59.2326],[-3.38503,59.14842],[-3.37476,58.93528],[-3.56538,58.93233],[-3.55483,58.69759],[-5.28086,58.66677],[-5.25342,58.35141],[-5.50685,58.34379],[-5.47618,58.03236],[-5.8975,58.02124],[-5.8523,57.61718],[-6.13963,57.61372],[-6.15416,57.74232],[-6.29137,57.73801],[-6.33657,58.13988],[-6.11219,58.14669],[-6.14738,58.51063],[-6.29348,58.54162],[-6.84137,58.29773],[-7.00574,58.29293],[-7.10162,58.20644],[-7.25731,58.17931],[-7.25311,58.10049],[-7.40707,58.09056],[-7.39135,57.79114],[-7.79099,57.77332],[-7.76242,57.54442],[-7.6985,57.14532],[-7.79438,57.13045],[-7.71676,56.73686],[-7.01221,56.76544],[-6.97992,56.54539],[-7.06386,56.54539],[-7.04449,56.35626],[-6.50068,56.38129],[-6.44914,55.97936],[-6.56329,55.96915],[-6.53937,55.70301],[-6.55955,55.69073],[-6.53453,55.67617],[-6.52162,55.57044],[-5.89126,55.59234],[-5.85601,55.23207],[-5.22936,55.2516],[-5.18371,54.62541],[-3.6656,54.65184],[-3.64962,54.432],[-3.54004,54.43067],[-3.53091,54.02902],[-3.06977,54.03036],[-3.06757,53.82214],[-3.08049,53.77399],[-3.06192,53.74775],[-3.06112,53.6737],[-3.21447,53.67084],[-3.20577,53.42262],[-3.27996,53.35522],[-3.28967,53.36084],[-3.33275,53.36493],[-3.37613,53.35403],[-4.0889,53.34331],[-4.09455,53.4612],[-4.69741,53.44486],[-4.68828,53.33186],[-4.72024,53.28958],[-4.68371,53.24862],[-4.67687,53.15426],[-4.84808,53.14468],[-4.81783,52.74403],[-4.25458,52.75589],[-4.22888,52.25488],[-4.26076,52.25364],[-4.27246,52.24326],[-4.81363,52.23009],[-4.80792,52.11389],[-5.38891,52.09917],[-5.37179,51.91297],[-5.42087,51.91015],[-5.41402,51.84532],[-5.36836,51.84744],[-5.34668,51.55953],[-4.77368,51.57585],[-4.76569,51.48851],[-4.19154,51.49704],[-4.18698,51.43447],[-3.61512,51.44443],[-3.61055,51.37465],[-3.14941,51.37893],[-3.14941,51.29193],[-4.30387,51.27459],[-4.28612,51.05087],[-4.85433,51.03666],[-4.83722,50.72128],[-5.26183,50.70827],[-5.23955,50.35306]],[[-2.15027,60.17132],[-2.00302,60.16961],[-2.00131,60.0997],[-2.14855,60.10112],[-2.15027,60.17132]],[[-6.2086,59.11635],[-6.12299,59.11664],[-6.12185,59.0715],[-6.20974,59.0715],[-6.2086,59.11635]],[[-4.41596,59.0889],[-4.4212,59.07708],[-4.39719,59.07791],[-4.39134,59.08973],[-4.41596,59.0889]]]},{id:"OS-New_Popular_Edition-historic",name:"OS New Popular Edition historic",type:"tms",template:"https://ooc.openstreetmap.org/npe/{zoom}/{x}/{y}.png",zoomExtent:[6,15],polygon:[[[-3.68466,55.23744],[-3.65106,54.42892],[-3.54463,54.43072],[-3.52815,54.02593],[-3.07016,54.03137],[-3.06123,53.6717],[-3.21298,53.67048],[-3.20371,53.35568],[-4.10424,53.34297],[-4.11042,53.46005],[-4.71124,53.44799],[-4.69339,53.15171],[-4.84307,53.1476],[-4.81595,52.74378],[-4.25342,52.75541],[-4.22733,52.24378],[-4.81303,52.23117],[-4.80754,52.11452],[-5.38913,52.09892],[-5.3493,51.56085],[-4.77252,51.57622],[-4.76772,51.48652],[-4.19299,51.49806],[-4.18956,51.43518],[-3.61278,51.44502],[-3.61072,51.37307],[-3.15067,51.37864],[-3.14723,51.28984],[-4.29462,51.2718],[-4.28363,51.04744],[-4.85423,51.03406],[-4.83707,50.76556],[-5.2621,50.75427],[-5.23395,50.34984],[-5.79562,50.33319],[-5.76228,49.92913],[-4.64717,49.96094],[-4.66914,50.2753],[-4.25166,50.2832],[-4.24617,50.19361],[-3.40159,50.20679],[-3.41395,50.52041],[-3.13105,50.52391],[-3.1338,50.66078],[-2.66963,50.66252],[-2.66688,50.5719],[-1.04228,50.56929],[-1.04502,50.70429],[-0.54652,50.69994],[-0.54103,50.79031],[-0.08784,50.78424],[-0.08887,50.72211],[0.47693,50.70907],[0.48242,50.81939],[0.98024,50.8068],[0.99328,51.01333],[1.44784,51.00036],[1.47805,51.40478],[1.018,51.41634],[1.04272,51.76742],[1.6195,51.75084],[1.65246,52.15456],[1.72662,52.15245],[1.79529,52.9594],[0.60396,52.99123],[0.60327,52.97222],[0.38148,52.97883],[0.39625,53.24796],[0.31934,53.24961],[0.34269,53.65319],[0.11609,53.65726],[0.13738,54.06181],[-0.06243,54.06584],[-0.04183,54.46924],[-0.56781,54.47722],[-0.56163,54.65715],[-1.18098,54.66271],[-1.17755,54.84183],[-1.33342,54.84381],[-1.32655,55.24743],[-1.53117,55.24821],[-1.52636,55.6528],[-1.76394,55.6528],[-1.76257,55.96765],[-2.40321,55.96727],[-2.39772,55.56243],[-2.16151,55.56282],[-2.15808,55.2486],[-2.92158,55.24571],[-3.68466,55.23744]]]},{id:"OS-OpenData_Locator",name:"OS OpenData Locator",type:"tms",template:"http://tiles.itoworld.com/os_locator/{zoom}/{x}/{y}.png",zoomExtent:[0,22],polygon:[[[-0.88639,61.11666],[-9.24009,57.92465],[-6.61235,55.46835],[-6.1039,55.40191],[-5.61358,55.06607],[-5.40088,54.90562],[-5.29371,54.77201],[-5.11832,54.5911],[-4.92368,54.38599],[-4.94067,53.59884],[-5.44172,52.27725],[-6.03376,51.6012],[-7.54473,49.33762],[-2.59721,50.2588],[0.65674,50.64047],[1.32419,50.83256],[1.87586,51.19234],[2.05883,52.88863],[-1.61452,56.47933],[-1.21085,57.64972],[-1.69525,59.08903],[0.21543,60.43058],[-0.88639,61.11666]]],overlay:true},{id:"OS-OpenData_StreetView",name:"OS OpenData StreetView",type:"tms",template:"https://{switch:a,b,c}.os.openstreetmap.org/sv/{zoom}/{x}/{y}.png",zoomExtent:[1,18],polygon:[[[-5.82929,50.02297],[-5.82929,50.25482],[-5.37336,50.25482],[-5.37336,50.35306],[-5.1756,50.35306],[-5.1756,50.59254],[-4.99707,50.59254],[-4.99707,50.69356],[-4.79657,50.69356],[-4.79657,50.78221],[-4.69495,50.78221],[-4.69495,50.96074],[-4.60431,50.96074],[-4.60431,51.06921],[-4.37922,51.06921],[-4.37922,51.25218],[-3.90393,51.25218],[-3.90393,51.2917],[-3.71717,51.2917],[-3.71717,51.2453],[-3.14862,51.2453],[-3.14862,51.36207],[-3.74463,51.36207],[-3.74463,51.43404],[-3.82978,51.43404],[-3.82978,51.52982],[-4.08521,51.52982],[-4.08521,51.49393],[-4.37922,51.49393],[-4.37922,51.54272],[-5.14442,51.54272],[-5.14442,51.6296],[-5.73871,51.6296],[-5.73871,51.77404],[-5.50954,51.77404],[-5.50954,51.98026],[-5.1988,51.98026],[-5.1988,52.09734],[-4.88806,52.09734],[-4.88806,52.18316],[-4.49575,52.18316],[-4.49575,52.29257],[-4.30154,52.29257],[-4.30154,52.36853],[-4.18112,52.36853],[-4.18112,52.79337],[-4.44137,52.79337],[-4.44137,52.73696],[-4.85698,52.73696],[-4.85698,52.93173],[-4.7288,52.93173],[-4.7288,53.50386],[-4.15782,53.50386],[-4.15782,53.41135],[-3.31105,53.41135],[-3.31105,53.50386],[-3.23337,53.50386],[-3.23337,54.01592],[-3.39262,54.01592],[-3.39262,54.1981],[-3.55964,54.1981],[-3.55964,54.43373],[-3.7189,54.43373],[-3.7189,54.7219],[-4.30154,54.7219],[-4.30154,54.61407],[-5.04731,54.61407],[-5.04731,54.75329],[-5.22987,54.75329],[-5.22987,55.21908],[-5.65326,55.21908],[-5.65326,55.25009],[-5.89796,55.25009],[-5.89796,55.48225],[-6.59332,55.48225],[-6.59332,56.30134],[-7.17277,56.30134],[-7.17277,56.56018],[-6.81717,56.56018],[-6.81717,56.69917],[-6.53153,56.69917],[-6.53153,56.9067],[-6.81168,56.9067],[-6.81168,57.37166],[-6.8721,57.37166],[-6.8721,57.55189],[-7.09732,57.55189],[-7.09732,57.24111],[-7.17423,57.24111],[-7.17423,56.9067],[-7.37198,56.9067],[-7.37198,56.80759],[-7.5203,56.80759],[-7.5203,56.71425],[-7.83068,56.71425],[-7.83068,56.89946],[-7.64941,56.89946],[-7.64941,57.47396],[-7.83068,57.47396],[-7.83068,57.79156],[-7.47362,57.79156],[-7.47362,58.08606],[-7.18798,58.08606],[-7.18798,58.3672],[-6.80346,58.3672],[-6.80346,58.41558],[-6.63866,58.41558],[-6.63866,58.46733],[-6.51781,58.46733],[-6.51781,58.56256],[-6.05362,58.56256],[-6.05362,58.15688],[-6.14701,58.15688],[-6.14701,58.11059],[-6.27998,58.11059],[-6.27998,57.71227],[-6.15913,57.71227],[-6.15913,57.66676],[-5.93391,57.66676],[-5.93391,57.88925],[-5.80643,57.88925],[-5.80643,57.96218],[-5.61417,57.96218],[-5.61417,58.09112],[-5.49082,58.09112],[-5.49082,58.37333],[-5.31991,58.37333],[-5.31991,58.75015],[-3.572,58.75015],[-3.572,59.20918],[-3.19445,59.20918],[-3.19445,59.47592],[-2.24358,59.47592],[-2.24358,59.13887],[-2.4611,59.13887],[-2.4611,58.81859],[-2.74077,58.81859],[-2.74077,58.58047],[-2.91167,58.58047],[-2.91167,58.11575],[-3.48654,58.11575],[-3.48654,57.74039],[-1.71532,57.74039],[-1.71532,57.22256],[-1.97945,57.22256],[-1.97945,56.87607],[-2.1659,56.87607],[-2.1659,56.63332],[-2.36011,56.63332],[-2.36011,56.04775],[-1.97945,56.04775],[-1.97945,55.86509],[-1.4745,55.86509],[-1.4745,55.24999],[-1.3222,55.24999],[-1.3222,54.82217],[-1.055,54.82217],[-1.055,54.67466],[-0.66188,54.67466],[-0.66188,54.55275],[-0.32476,54.55275],[-0.32476,54.28652],[0.00928,54.28652],[0.00928,53.79385],[0.2082,53.79385],[0.2082,53.52177],[0.41635,53.52177],[0.41635,53.02989],[1.42734,53.02989],[1.42734,52.92021],[1.83339,52.92021],[1.83339,52.04249],[1.52355,52.04249],[1.52355,51.82613],[1.2697,51.82613],[1.2697,51.69675],[1.11665,51.69675],[1.11665,51.44035],[1.52355,51.44035],[1.52355,51.33318],[1.45076,51.33318],[1.45076,51.02076],[1.06999,51.02076],[1.06999,50.90084],[0.77881,50.90084],[0.77881,50.72984],[-0.7256,50.72984],[-0.7256,50.70384],[-1.00744,50.70384],[-1.00744,50.57363],[-2.36253,50.57363],[-2.36253,50.48464],[-2.49878,50.48464],[-2.49878,50.57363],[-3.40964,50.57363],[-3.40964,50.20578],[-3.69224,50.20578],[-3.69224,50.13477],[-5.00547,50.13477],[-5.00547,49.94745],[-5.28395,49.94745],[-5.28395,50.02297],[-5.82929,50.02297]],[[-6.45807,49.86736],[-6.45807,49.94999],[-6.39788,49.94999],[-6.39788,50.00538],[-6.17996,50.00538],[-6.17996,49.91686],[-6.25402,49.91686],[-6.25402,49.86736],[-6.45807,49.86736]],[[-5.83432,49.93216],[-5.83432,49.97546],[-5.76833,49.97546],[-5.76833,49.93216],[-5.83432,49.93216]],[[-1.94838,60.68857],[-1.94838,60.30588],[-1.75431,60.30588],[-1.75431,60.12844],[-1.57549,60.12844],[-1.57549,59.79792],[-1.0317,59.79792],[-1.0317,60.03545],[-0.66269,60.03545],[-0.66269,60.91039],[-1.10344,60.91039],[-1.10344,60.804],[-1.35063,60.804],[-1.35063,60.68857],[-1.94838,60.68857]],[[-2.20338,60.19686],[-2.20338,60.09294],[-1.9864,60.09294],[-1.9864,60.19686],[-2.20338,60.19686]],[[-1.75431,59.56983],[-1.75431,59.46394],[-1.53733,59.46394],[-1.53733,59.56983],[-1.75431,59.56983]],[[-4.5586,59.13705],[-4.5586,58.95691],[-4.2867,58.95691],[-4.2867,59.13705],[-4.5586,59.13705]],[[-6.27877,59.20257],[-6.27877,59.02278],[-5.66506,59.02278],[-5.66506,59.20257],[-6.27877,59.20257]],[[-8.71635,57.94406],[-8.71635,57.73059],[-8.35929,57.73059],[-8.35929,57.94406],[-8.71635,57.94406]],[[-7.6077,50.4021],[-7.6077,50.26887],[-7.39072,50.26887],[-7.39072,50.4021],[-7.6077,50.4021]],[[-7.73043,58.35799],[-7.73043,58.24831],[-7.51345,58.24831],[-7.51345,58.35799],[-7.73043,58.35799]]]},{id:"OS-Scottish_Popular-historic",name:"OS Scottish Popular historic",type:"tms",template:"https://ooc.openstreetmap.org/npescotland/{zoom}/{x}/{y}.jpg",zoomExtent:[6,15],polygon:[[[-6.37546,57.1045],[-6.12998,57.11183],[-6.12586,56.94143],[-6.26045,56.93892],[-6.26045,56.83765],[-6.24259,56.65806],[-6.3552,56.65655],[-6.37649,56.79029],[-7.02812,56.76396],[-6.99636,56.54246],[-7.04391,56.53937],[-7.03206,56.44201],[-6.98331,56.44353],[-6.97593,56.36063],[-6.45271,56.37964],[-6.44035,56.2013],[-6.19315,56.21199],[-6.18354,56.12483],[-6.36379,56.11641],[-6.36173,55.98258],[-6.48944,55.97912],[-6.47777,55.84134],[-6.55467,55.8371],[-6.53545,55.66049],[-6.45442,55.66087],[-6.44412,55.57285],[-6.19985,55.57266],[-5.96845,55.58857],[-5.98562,55.7686],[-5.90665,55.77169],[-5.88949,55.59284],[-5.80983,55.594],[-5.79335,55.41395],[-5.827,55.41395],[-5.80915,55.24247],[-5.61826,55.24873],[-5.62101,55.26713],[-5.46239,55.27026],[-5.48642,55.514],[-5.43836,55.51516],[-5.42943,55.42681],[-5.24129,55.43071],[-5.19464,54.80351],[-5.07105,54.80668],[-5.05221,54.62471],[-4.3223,54.65173],[-4.33123,54.7319],[-4.06786,54.73697],[-4.06786,54.76471],[-3.55699,54.77342],[-3.55837,54.83754],[-2.42098,54.84671],[-2.42647,55.25265],[-2.03097,55.25265],[-2.01449,55.56606],[-1.76455,55.56606],[-1.76455,55.9724],[-2.35026,55.96548],[-2.5796,56.06527],[-2.58234,56.37071],[-2.65032,56.36919],[-2.65581,56.50585],[-2.48965,56.50509],[-2.42785,56.55356],[-2.42373,56.73026],[-2.1628,56.73177],[-2.17104,56.99301],[-2.00075,56.99301],[-1.98479,57.3159],[-1.83476,57.31553],[-1.83441,57.36074],[-1.75167,57.36111],[-1.74893,57.63046],[-1.83613,57.63009],[-1.83544,57.70171],[-2.00436,57.70207],[-2.00367,57.71968],[-3.22281,57.71418],[-3.22629,57.76157],[-3.51331,57.77622],[-3.50914,57.71051],[-3.84766,57.70611],[-3.85182,57.76853],[-3.79925,57.76989],[-3.80474,57.88578],[-3.85556,57.88651],[-3.85937,57.97558],[-3.79513,57.97656],[-3.79483,58.03052],[-3.69733,58.03161],[-3.69458,58.06722],[-3.52391,58.07437],[-3.52978,58.16007],[-3.35774,58.16286],[-3.3483,58.28742],[-3.07638,58.29121],[-3.03004,58.43744],[-3.01768,58.65814],[-2.85837,58.66028],[-2.86524,58.7943],[-2.75812,58.79715],[-2.76636,58.87461],[-2.6208,58.88668],[-2.62766,58.97527],[-2.54114,58.97668],[-2.54217,59.0841],[-2.52363,59.08375],[-2.52913,59.1574],[-2.43849,59.15705],[-2.4378,59.246],[-2.36914,59.24705],[-2.3688,59.40748],[-2.52947,59.40748],[-2.52741,59.33436],[-2.70319,59.33576],[-2.70525,59.40608],[-3.12891,59.40433],[-3.12411,59.15951],[-3.40288,59.1574],[-3.39464,58.9689],[-3.4276,58.96961],[-3.42572,58.88526],[-3.45215,58.87071],[-3.51017,58.86911],[-3.50708,58.78826],[-3.38555,58.79004],[-3.3828,58.6999],[-3.4494,58.69847],[-3.45078,58.65385],[-3.50159,58.65421],[-3.5009,58.62705],[-3.72612,58.62383],[-3.72475,58.60595],[-4.6476,58.5895],[-4.65996,58.67171],[-5.10697,58.66135],[-5.09804,58.58091],[-5.23743,58.57769],[-5.22455,58.26305],[-5.4127,58.25818],[-5.39965,58.12245],[-5.53286,58.11991],[-5.52393,57.99494],[-5.55346,57.99422],[-5.54728,57.93995],[-5.85696,57.93157],[-5.83181,57.73361],[-5.86374,57.73224],[-5.85773,57.66096],[-6.19624,57.64975],[-6.20242,57.72353],[-6.41666,57.7162],[-6.42421,57.75945],[-6.4764,57.75725],[-6.46884,57.71326],[-6.53339,57.71216],[-6.52721,57.6391],[-6.692,57.63395],[-6.68102,57.54341],[-6.78195,57.53826],[-6.75311,57.31608],[-6.50592,57.32498],[-6.49768,57.28084],[-6.4812,57.27824],[-6.47159,57.19203],[-6.38644,57.19352],[-6.37546,57.1045]],[[-7.65043,56.77461],[-7.40667,56.79304],[-7.41972,56.88281],[-7.38676,56.90268],[-7.25836,56.91056],[-7.24806,57.07141],[-7.11485,57.077],[-7.16772,57.43466],[-7.0352,57.44094],[-7.05236,57.69026],[-6.86834,57.6976],[-6.87315,57.71631],[-6.70286,57.72217],[-6.71591,57.81117],[-6.53188,57.81958],[-6.53875,57.88133],[-6.22015,57.89265],[-6.24143,58.09935],[-6.12676,58.10152],[-6.17758,58.53105],[-6.46734,58.52029],[-6.4591,58.45102],[-6.63145,58.44455],[-6.6239,58.39169],[-6.79212,58.38485],[-6.78869,58.34956],[-6.90885,58.34415],[-6.89718,58.25503],[-7.20136,58.24166],[-7.14094,57.83201],[-7.37509,57.82104],[-7.36822,57.69503],[-7.6573,57.68292],[-7.67652,57.80715],[-7.79257,57.80202],[-7.77327,57.67734],[-7.70756,57.68024],[-7.69376,57.59088],[-7.75947,57.58797],[-7.74587,57.49965],[-7.51241,57.5085],[-7.47911,57.29468],[-7.52855,57.2932],[-7.51276,57.05871],[-7.61163,57.05386],[-7.59859,56.87493],[-7.66725,56.87268],[-7.65043,56.77461]],[[-1.46238,59.82831],[-1.21519,59.83107],[-1.21519,59.96194],[-1.10533,59.96056],[-1.0986,60.09498],[-0.97632,60.09346],[-0.96352,60.3476],[-0.74028,60.34484],[-0.7147,60.84722],[-1.08215,60.85901],[-1.08455,60.76944],[-1.21296,60.77011],[-1.21579,60.68079],[-1.23364,60.68113],[-1.23467,60.5909],[-1.27132,60.59191],[-1.27338,60.64581],[-1.45466,60.64648],[-1.45397,60.59224],[-1.6373,60.59292],[-1.63954,60.3507],[-1.73172,60.35095],[-1.73172,60.18067],[-1.64177,60.17931],[-1.64177,60.1448],[-1.46393,60.14344],[-1.46238,59.82831]],[[-6.21496,56.97437],[-6.22525,57.06445],[-6.29117,57.06184],[-6.29237,57.08062],[-6.62162,57.06943],[-6.61338,57.00629],[-6.46163,57.01302],[-6.4582,56.96776],[-6.21496,56.97437]],[[-2.12774,60.10855],[-2.12803,60.16207],[-2.00203,60.16224],[-2.00174,60.10872],[-2.12774,60.10855]],[[-6.68977,56.95804],[-6.69228,56.9759],[-6.65984,56.97726],[-6.65733,56.9594],[-6.68977,56.95804]],[[-7.66365,58.25846],[-7.66844,58.28502],[-7.54896,58.29098],[-7.54417,58.26442],[-7.66365,58.25846]],[[-8.65104,57.78885],[-8.66674,57.875],[-8.48272,57.88449],[-8.46702,57.79836],[-8.65104,57.78885]]]},{id:"OSIP_1ft",name:"OSIP 1ft Imagery Most Current Available",type:"wms",template:"https://geo1.oit.ohio.gov/arcgis/services/OSIP/osip_best_avail_1ft/ImageServer/WMSServer?FORMAT=image/jpeg&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2014-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",zoomExtent:[8,20],polygon:[[[-83.1356,41.75081],[-83.08101,41.7511],[-83.0796,41.62936],[-82.95011,41.54404],[-82.89032,41.54404],[-82.89032,41.69462],[-82.8494,41.7463],[-82.76758,41.73925],[-82.75184,41.63584],[-82.64799,41.62408],[-82.68575,41.50634],[-82.49063,41.40492],[-82.0217,41.53462],[-81.72901,41.52048],[-81.39541,41.7369],[-81.10587,41.84484],[-80.50161,41.99939],[-80.51105,40.62127],[-80.6275,40.59021],[-80.58344,40.49933],[-80.58973,40.2812],[-80.85095,39.625],[-81.19399,39.37974],[-81.38912,39.31159],[-81.45521,39.38704],[-81.515,39.35054],[-81.54333,39.26288],[-81.72586,39.19461],[-81.73216,38.9258],[-81.9021,38.85477],[-81.95875,38.89397],[-81.9084,38.93315],[-82.02799,38.99922],[-82.11611,38.92336],[-82.12555,38.8278],[-82.19794,38.78856],[-82.16647,38.72475],[-82.16017,38.58712],[-82.26718,38.57236],[-82.29865,38.43198],[-82.57875,38.39745],[-82.73925,38.53545],[-82.8494,38.56006],[-82.91235,38.73212],[-83.00676,38.71002],[-83.14524,38.59942],[-83.30575,38.58466],[-83.39387,38.64368],[-83.46625,38.64614],[-83.54178,38.69283],[-83.65193,38.61172],[-83.74635,38.63385],[-83.9635,38.76403],[-84.08624,38.75421],[-84.22157,38.7812],[-84.34117,38.99922],[-84.49223,39.07255],[-84.64015,39.05545],[-84.74086,39.11164],[-84.84471,39.08477],[-84.82898,41.70637],[-83.44737,41.76038],[-83.13438,41.64959],[-83.1356,41.75081]]],terms_url:"https://ogrip.oit.ohio.gov/ProjectsInitiatives/StatewideImagery.aspx",terms_text:"Ohio Statewide Imagery Program",description:"Most recent available 1-foot orthoimagery from the Ohio Statewide Imagery Program."},{id:"OSIP_6in",name:"OSIP 6in Imagery Most Current Available",type:"wms",template:"https://geo1.oit.ohio.gov/arcgis/services/OSIP/OSIP_6in_best_avail/ImageServer/WMSServer?FORMAT=image/jpeg&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2018-01-01T00:00:00.000Z",startDate:"2010-01-01T00:00:00.000Z",zoomExtent:[8,20],polygon:[[[-83.1356,41.75081],[-83.08101,41.7511],[-83.0796,41.62936],[-82.95011,41.54404],[-82.89032,41.54404],[-82.89032,41.69462],[-82.8494,41.7463],[-82.76758,41.73925],[-82.75184,41.63584],[-82.64799,41.62408],[-82.68575,41.50634],[-82.49063,41.40492],[-82.0217,41.53462],[-81.72901,41.52048],[-81.39541,41.7369],[-81.10587,41.84484],[-80.50161,41.99939],[-80.51105,40.62127],[-80.6275,40.59021],[-80.58344,40.49933],[-80.58973,40.2812],[-80.85095,39.625],[-81.19399,39.37974],[-81.38912,39.31159],[-81.45521,39.38704],[-81.515,39.35054],[-81.54333,39.26288],[-81.72586,39.19461],[-81.73216,38.9258],[-81.9021,38.85477],[-81.95875,38.89397],[-81.9084,38.93315],[-82.02799,38.99922],[-82.11611,38.92336],[-82.12555,38.8278],[-82.19794,38.78856],[-82.16647,38.72475],[-82.16017,38.58712],[-82.26718,38.57236],[-82.29865,38.43198],[-82.57875,38.39745],[-82.73925,38.53545],[-82.8494,38.56006],[-82.91235,38.73212],[-83.00676,38.71002],[-83.14524,38.59942],[-83.30575,38.58466],[-83.39387,38.64368],[-83.46625,38.64614],[-83.54178,38.69283],[-83.65193,38.61172],[-83.74635,38.63385],[-83.9635,38.76403],[-84.08624,38.75421],[-84.22157,38.7812],[-84.34117,38.99922],[-84.49223,39.07255],[-84.64015,39.05545],[-84.74086,39.11164],[-84.84471,39.08477],[-84.82898,41.70637],[-83.44737,41.76038],[-83.13438,41.64959],[-83.1356,41.75081]]],terms_url:"https://ogrip.oit.ohio.gov/ProjectsInitiatives/StatewideImagery.aspx",terms_text:"Ohio Statewide Imagery Program",description:"Most recent available 6-inch orthoimagery from the Ohio Statewide Imagery Program."},{id:"osm-hr-knin-2007",name:"osm-hr: Knin-2007 Aerial imagery",type:"tms",template:"https://tms.osm-hr.org/knin-2007/{zoom}/{x}/{-y}.png",endDate:"2007-01-01T00:00:00.000Z",startDate:"2007-01-01T00:00:00.000Z",zoomExtent:[0,19],polygon:[[[16.21712,44.08054],[16.22916,44.08041],[16.22938,44.06055],[16.2303,44.05757],[16.23715,44.04213],[16.23715,44.03615],[16.23041,44.03599],[16.22494,44.03627],[16.2243,44.03599],[16.22404,44.03504],[16.21608,44.02178],[16.21286,44.01661],[16.20391,44.01672],[16.19269,44.02601],[16.18003,44.03662],[16.18011,44.03772],[16.21129,44.06685],[16.21712,44.08054]]]},{id:"osmie_barony",name:"OSMIE Baronies",type:"tms",template:"https://tile.openstreetmap.ie/barony/{zoom}/{x}/{y}.png",zoomExtent:[7,20],polygon:[[[-6.32987,52.38838],[-6.16508,52.58073],[-5.9893,52.9811],[-6.05796,53.31713],[-5.9838,53.50704],[-6.24473,53.86326],[-6.35459,53.91182],[-6.31614,53.98133],[-6.13487,53.97002],[-5.61851,54.23574],[-5.3878,54.44708],[-5.53886,54.67641],[-6.07444,55.21277],[-6.21452,55.33168],[-6.78306,55.17828],[-6.9506,55.25505],[-7.17582,55.35355],[-7.22526,55.45024],[-7.50816,55.28791],[-7.63999,55.28009],[-8.02451,55.2206],[-8.25797,55.27853],[-8.28269,55.172],[-8.58482,55.01168],[-8.38432,54.86021],[-8.69743,54.78901],[-8.85124,54.67641],[-8.46946,54.57942],[-8.17008,54.62397],[-8.33763,54.4854],[-8.68644,54.36556],[-8.62876,54.27625],[-9.04075,54.3051],[-9.13688,54.23614],[-9.2852,54.33834],[-9.90043,54.32233],[-10.15037,54.2245],[-10.27397,53.94578],[-9.98832,53.85678],[-10.3289,53.60982],[-10.22727,53.39418],[-9.78233,53.21857],[-8.96934,53.26952],[-9.04624,53.1762],[-9.2852,53.15644],[-9.40879,52.99433],[-9.57084,52.75562],[-9.97321,52.54316],[-9.70405,52.57071],[-9.69444,52.4855],[-9.97733,52.41854],[-9.87296,52.33387],[-9.92378,52.2381],[-10.06523,52.34478],[-10.15586,52.30113],[-10.65849,52.07212],[-9.90318,52.12274],[-10.45799,51.88772],[-10.39344,51.82411],[-10.56098,51.76635],[-10.32478,51.79014],[-10.25749,51.70937],[-9.80705,51.81816],[-10.28289,51.57045],[-9.89631,51.60032],[-9.51454,51.70256],[-9.83177,51.55082],[-9.83039,51.43368],[-9.43351,51.50468],[-9.53788,51.41741],[-8.63151,51.59179],[-7.70316,51.95209],[-7.46421,52.12105],[-6.33537,52.17667],[-6.32987,52.38838]],[[-9.89082,53.14368],[-9.51042,53.03605],[-9.45274,53.08557],[-9.82902,53.18279],[-9.89082,53.14368]]],icon:"https://www.townlands.ie/static/logo_small.png"},{id:"osmie_cps",name:"OSMIE Civil Parishes",type:"tms",template:"https://tile.openstreetmap.ie/civilparish/{zoom}/{x}/{y}.png",zoomExtent:[7,20],polygon:[[[-6.32987,52.38838],[-6.16508,52.58073],[-5.9893,52.9811],[-6.05796,53.31713],[-5.9838,53.50704],[-6.24473,53.86326],[-6.35459,53.91182],[-6.31614,53.98133],[-6.13487,53.97002],[-5.61851,54.23574],[-5.3878,54.44708],[-5.53886,54.67641],[-6.07444,55.21277],[-6.21452,55.33168],[-6.78306,55.17828],[-6.9506,55.25505],[-7.17582,55.35355],[-7.22526,55.45024],[-7.50816,55.28791],[-7.63999,55.28009],[-8.02451,55.2206],[-8.25797,55.27853],[-8.28269,55.172],[-8.58482,55.01168],[-8.38432,54.86021],[-8.69743,54.78901],[-8.85124,54.67641],[-8.46946,54.57942],[-8.17008,54.62397],[-8.33763,54.4854],[-8.68644,54.36556],[-8.62876,54.27625],[-9.04075,54.3051],[-9.13688,54.23614],[-9.2852,54.33834],[-9.90043,54.32233],[-10.15037,54.2245],[-10.27397,53.94578],[-9.98832,53.85678],[-10.3289,53.60982],[-10.22727,53.39418],[-9.78233,53.21857],[-8.96934,53.26952],[-9.04624,53.1762],[-9.2852,53.15644],[-9.40879,52.99433],[-9.57084,52.75562],[-9.97321,52.54316],[-9.70405,52.57071],[-9.69444,52.4855],[-9.97733,52.41854],[-9.87296,52.33387],[-9.92378,52.2381],[-10.06523,52.34478],[-10.15586,52.30113],[-10.65849,52.07212],[-9.90318,52.12274],[-10.45799,51.88772],[-10.39344,51.82411],[-10.56098,51.76635],[-10.32478,51.79014],[-10.25749,51.70937],[-9.80705,51.81816],[-10.28289,51.57045],[-9.89631,51.60032],[-9.51454,51.70256],[-9.83177,51.55082],[-9.83039,51.43368],[-9.43351,51.50468],[-9.53788,51.41741],[-8.63151,51.59179],[-7.70316,51.95209],[-7.46421,52.12105],[-6.33537,52.17667],[-6.32987,52.38838]],[[-9.89082,53.14368],[-9.51042,53.03605],[-9.45274,53.08557],[-9.82902,53.18279],[-9.89082,53.14368]]],icon:"https://www.townlands.ie/static/logo_small.png"},{id:"osmie_dail_ea",name:"OSMIE Dail Election Areas",type:"tms",template:"https://tile.openstreetmap.ie/dail_ea/{zoom}/{x}/{y}.png",zoomExtent:[7,20],polygon:[[[-6.32987,52.38838],[-6.16508,52.58073],[-5.9893,52.9811],[-6.05796,53.31713],[-5.9838,53.50704],[-6.24473,53.86326],[-6.35459,53.91182],[-6.31614,53.98133],[-6.13487,53.97002],[-5.61851,54.23574],[-5.3878,54.44708],[-5.53886,54.67641],[-6.07444,55.21277],[-6.21452,55.33168],[-6.78306,55.17828],[-6.9506,55.25505],[-7.17582,55.35355],[-7.22526,55.45024],[-7.50816,55.28791],[-7.63999,55.28009],[-8.02451,55.2206],[-8.25797,55.27853],[-8.28269,55.172],[-8.58482,55.01168],[-8.38432,54.86021],[-8.69743,54.78901],[-8.85124,54.67641],[-8.46946,54.57942],[-8.17008,54.62397],[-8.33763,54.4854],[-8.68644,54.36556],[-8.62876,54.27625],[-9.04075,54.3051],[-9.13688,54.23614],[-9.2852,54.33834],[-9.90043,54.32233],[-10.15037,54.2245],[-10.27397,53.94578],[-9.98832,53.85678],[-10.3289,53.60982],[-10.22727,53.39418],[-9.78233,53.21857],[-8.96934,53.26952],[-9.04624,53.1762],[-9.2852,53.15644],[-9.40879,52.99433],[-9.57084,52.75562],[-9.97321,52.54316],[-9.70405,52.57071],[-9.69444,52.4855],[-9.97733,52.41854],[-9.87296,52.33387],[-9.92378,52.2381],[-10.06523,52.34478],[-10.15586,52.30113],[-10.65849,52.07212],[-9.90318,52.12274],[-10.45799,51.88772],[-10.39344,51.82411],[-10.56098,51.76635],[-10.32478,51.79014],[-10.25749,51.70937],[-9.80705,51.81816],[-10.28289,51.57045],[-9.89631,51.60032],[-9.51454,51.70256],[-9.83177,51.55082],[-9.83039,51.43368],[-9.43351,51.50468],[-9.53788,51.41741],[-8.63151,51.59179],[-7.70316,51.95209],[-7.46421,52.12105],[-6.33537,52.17667],[-6.32987,52.38838]],[[-9.89082,53.14368],[-9.51042,53.03605],[-9.45274,53.08557],[-9.82902,53.18279],[-9.89082,53.14368]]],icon:"https://www.townlands.ie/static/logo_small.png"},{id:"osmie_eds",name:"OSMIE EDs",type:"tms",template:"https://tile.openstreetmap.ie/ed/{zoom}/{x}/{y}.png",zoomExtent:[7,20],polygon:[[[-6.32987,52.38838],[-6.16508,52.58073],[-5.9893,52.9811],[-6.05796,53.31713],[-5.9838,53.50704],[-6.24473,53.86326],[-6.35459,53.91182],[-6.31614,53.98133],[-6.13487,53.97002],[-5.61851,54.23574],[-5.3878,54.44708],[-5.53886,54.67641],[-6.07444,55.21277],[-6.21452,55.33168],[-6.78306,55.17828],[-6.9506,55.25505],[-7.17582,55.35355],[-7.22526,55.45024],[-7.50816,55.28791],[-7.63999,55.28009],[-8.02451,55.2206],[-8.25797,55.27853],[-8.28269,55.172],[-8.58482,55.01168],[-8.38432,54.86021],[-8.69743,54.78901],[-8.85124,54.67641],[-8.46946,54.57942],[-8.17008,54.62397],[-8.33763,54.4854],[-8.68644,54.36556],[-8.62876,54.27625],[-9.04075,54.3051],[-9.13688,54.23614],[-9.2852,54.33834],[-9.90043,54.32233],[-10.15037,54.2245],[-10.27397,53.94578],[-9.98832,53.85678],[-10.3289,53.60982],[-10.22727,53.39418],[-9.78233,53.21857],[-8.96934,53.26952],[-9.04624,53.1762],[-9.2852,53.15644],[-9.40879,52.99433],[-9.57084,52.75562],[-9.97321,52.54316],[-9.70405,52.57071],[-9.69444,52.4855],[-9.97733,52.41854],[-9.87296,52.33387],[-9.92378,52.2381],[-10.06523,52.34478],[-10.15586,52.30113],[-10.65849,52.07212],[-9.90318,52.12274],[-10.45799,51.88772],[-10.39344,51.82411],[-10.56098,51.76635],[-10.32478,51.79014],[-10.25749,51.70937],[-9.80705,51.81816],[-10.28289,51.57045],[-9.89631,51.60032],[-9.51454,51.70256],[-9.83177,51.55082],[-9.83039,51.43368],[-9.43351,51.50468],[-9.53788,51.41741],[-8.63151,51.59179],[-7.70316,51.95209],[-7.46421,52.12105],[-6.33537,52.17667],[-6.32987,52.38838]],[[-9.89082,53.14368],[-9.51042,53.03605],[-9.45274,53.08557],[-9.82902,53.18279],[-9.89082,53.14368]]],icon:"https://www.townlands.ie/static/logo_small.png"},{id:"osmie_local_ea",name:"OSMIE Local Election Areas",type:"tms",template:"https://tile.openstreetmap.ie/local_ea/{zoom}/{x}/{y}.png",zoomExtent:[7,20],polygon:[[[-6.32987,52.38838],[-6.16508,52.58073],[-5.9893,52.9811],[-6.05796,53.31713],[-5.9838,53.50704],[-6.24473,53.86326],[-6.35459,53.91182],[-6.31614,53.98133],[-6.13487,53.97002],[-5.61851,54.23574],[-5.3878,54.44708],[-5.53886,54.67641],[-6.07444,55.21277],[-6.21452,55.33168],[-6.78306,55.17828],[-6.9506,55.25505],[-7.17582,55.35355],[-7.22526,55.45024],[-7.50816,55.28791],[-7.63999,55.28009],[-8.02451,55.2206],[-8.25797,55.27853],[-8.28269,55.172],[-8.58482,55.01168],[-8.38432,54.86021],[-8.69743,54.78901],[-8.85124,54.67641],[-8.46946,54.57942],[-8.17008,54.62397],[-8.33763,54.4854],[-8.68644,54.36556],[-8.62876,54.27625],[-9.04075,54.3051],[-9.13688,54.23614],[-9.2852,54.33834],[-9.90043,54.32233],[-10.15037,54.2245],[-10.27397,53.94578],[-9.98832,53.85678],[-10.3289,53.60982],[-10.22727,53.39418],[-9.78233,53.21857],[-8.96934,53.26952],[-9.04624,53.1762],[-9.2852,53.15644],[-9.40879,52.99433],[-9.57084,52.75562],[-9.97321,52.54316],[-9.70405,52.57071],[-9.69444,52.4855],[-9.97733,52.41854],[-9.87296,52.33387],[-9.92378,52.2381],[-10.06523,52.34478],[-10.15586,52.30113],[-10.65849,52.07212],[-9.90318,52.12274],[-10.45799,51.88772],[-10.39344,51.82411],[-10.56098,51.76635],[-10.32478,51.79014],[-10.25749,51.70937],[-9.80705,51.81816],[-10.28289,51.57045],[-9.89631,51.60032],[-9.51454,51.70256],[-9.83177,51.55082],[-9.83039,51.43368],[-9.43351,51.50468],[-9.53788,51.41741],[-8.63151,51.59179],[-7.70316,51.95209],[-7.46421,52.12105],[-6.33537,52.17667],[-6.32987,52.38838]],[[-9.89082,53.14368],[-9.51042,53.03605],[-9.45274,53.08557],[-9.82902,53.18279],[-9.89082,53.14368]]],icon:"https://www.townlands.ie/static/logo_small.png"},{id:"osmie_tie_not_counties",name:"OSMIE T.ie Land not in Counties",type:"tms",template:"https://www.townlands.ie/tiles/not_counties/{zoom}/{x}/{y}.png",zoomExtent:[2,19],polygon:[[[-6.32987,52.38838],[-6.16508,52.58073],[-5.9893,52.9811],[-6.05796,53.31713],[-5.9838,53.50704],[-6.24473,53.86326],[-6.35459,53.91182],[-6.31614,53.98133],[-6.13487,53.97002],[-5.61851,54.23574],[-5.3878,54.44708],[-5.53886,54.67641],[-6.07444,55.21277],[-6.21452,55.33168],[-6.78306,55.17828],[-6.9506,55.25505],[-7.17582,55.35355],[-7.22526,55.45024],[-7.50816,55.28791],[-7.63999,55.28009],[-8.02451,55.2206],[-8.25797,55.27853],[-8.28269,55.172],[-8.58482,55.01168],[-8.38432,54.86021],[-8.69743,54.78901],[-8.85124,54.67641],[-8.46946,54.57942],[-8.17008,54.62397],[-8.33763,54.4854],[-8.68644,54.36556],[-8.62876,54.27625],[-9.04075,54.3051],[-9.13688,54.23614],[-9.2852,54.33834],[-9.90043,54.32233],[-10.15037,54.2245],[-10.27397,53.94578],[-9.98832,53.85678],[-10.3289,53.60982],[-10.22727,53.39418],[-9.78233,53.21857],[-8.96934,53.26952],[-9.04624,53.1762],[-9.2852,53.15644],[-9.40879,52.99433],[-9.57084,52.75562],[-9.97321,52.54316],[-9.70405,52.57071],[-9.69444,52.4855],[-9.97733,52.41854],[-9.87296,52.33387],[-9.92378,52.2381],[-10.06523,52.34478],[-10.15586,52.30113],[-10.65849,52.07212],[-9.90318,52.12274],[-10.45799,51.88772],[-10.39344,51.82411],[-10.56098,51.76635],[-10.32478,51.79014],[-10.25749,51.70937],[-9.80705,51.81816],[-10.28289,51.57045],[-9.89631,51.60032],[-9.51454,51.70256],[-9.83177,51.55082],[-9.83039,51.43368],[-9.43351,51.50468],[-9.53788,51.41741],[-8.63151,51.59179],[-7.70316,51.95209],[-7.46421,52.12105],[-6.33537,52.17667],[-6.32987,52.38838]],[[-9.89082,53.14368],[-9.51042,53.03605],[-9.45274,53.08557],[-9.82902,53.18279],[-9.89082,53.14368]]],icon:"https://www.townlands.ie/static/logo_small.png"},{id:"osmie_tds",name:"OSMIE Townlands",type:"tms",template:"https://tile.openstreetmap.ie/townland/{zoom}/{x}/{y}.png",zoomExtent:[7,20],polygon:[[[-6.32987,52.38838],[-6.16508,52.58073],[-5.9893,52.9811],[-6.05796,53.31713],[-5.9838,53.50704],[-6.24473,53.86326],[-6.35459,53.91182],[-6.31614,53.98133],[-6.13487,53.97002],[-5.61851,54.23574],[-5.3878,54.44708],[-5.53886,54.67641],[-6.07444,55.21277],[-6.21452,55.33168],[-6.78306,55.17828],[-6.9506,55.25505],[-7.17582,55.35355],[-7.22526,55.45024],[-7.50816,55.28791],[-7.63999,55.28009],[-8.02451,55.2206],[-8.25797,55.27853],[-8.28269,55.172],[-8.58482,55.01168],[-8.38432,54.86021],[-8.69743,54.78901],[-8.85124,54.67641],[-8.46946,54.57942],[-8.17008,54.62397],[-8.33763,54.4854],[-8.68644,54.36556],[-8.62876,54.27625],[-9.04075,54.3051],[-9.13688,54.23614],[-9.2852,54.33834],[-9.90043,54.32233],[-10.15037,54.2245],[-10.27397,53.94578],[-9.98832,53.85678],[-10.3289,53.60982],[-10.22727,53.39418],[-9.78233,53.21857],[-8.96934,53.26952],[-9.04624,53.1762],[-9.2852,53.15644],[-9.40879,52.99433],[-9.57084,52.75562],[-9.97321,52.54316],[-9.70405,52.57071],[-9.69444,52.4855],[-9.97733,52.41854],[-9.87296,52.33387],[-9.92378,52.2381],[-10.06523,52.34478],[-10.15586,52.30113],[-10.65849,52.07212],[-9.90318,52.12274],[-10.45799,51.88772],[-10.39344,51.82411],[-10.56098,51.76635],[-10.32478,51.79014],[-10.25749,51.70937],[-9.80705,51.81816],[-10.28289,51.57045],[-9.89631,51.60032],[-9.51454,51.70256],[-9.83177,51.55082],[-9.83039,51.43368],[-9.43351,51.50468],[-9.53788,51.41741],[-8.63151,51.59179],[-7.70316,51.95209],[-7.46421,52.12105],[-6.33537,52.17667],[-6.32987,52.38838]],[[-9.89082,53.14368],[-9.51042,53.03605],[-9.45274,53.08557],[-9.82902,53.18279],[-9.89082,53.14368]]],icon:"https://www.townlands.ie/static/logo_small.png"},{id:"al_palestina",name:"Palestina AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Palestina&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-37.28907,-9.71916],[-37.28904,-9.71114],[-37.28911,-9.7022],[-37.28915,-9.69175],[-37.28919,-9.68886],[-37.28927,-9.68069],[-37.28926,-9.67732],[-37.28936,-9.66999],[-37.28936,-9.66599],[-37.28931,-9.66133],[-37.28941,-9.65526],[-37.28946,-9.64556],[-37.2895,-9.63489],[-37.28954,-9.62926],[-37.2964,-9.62885],[-37.31188,-9.62897],[-37.32762,-9.62914],[-37.33181,-9.62919],[-37.34338,-9.62917],[-37.35876,-9.62923],[-37.37175,-9.6293],[-37.37839,-9.62913],[-37.38051,-9.62922],[-37.38061,-9.63143],[-37.38054,-9.63785],[-37.38043,-9.63895],[-37.38053,-9.64147],[-37.38051,-9.64876],[-37.3805,-9.6543],[-37.38043,-9.656],[-37.38024,-9.66028],[-37.38022,-9.66551],[-37.38019,-9.67054],[-37.38016,-9.67896],[-37.38013,-9.68781],[-37.38009,-9.70116],[-37.38003,-9.71053],[-37.3801,-9.71743],[-37.38005,-9.71959],[-37.37932,-9.71954],[-37.37392,-9.71956],[-37.36582,-9.71945],[-37.35849,-9.71946],[-37.35334,-9.71938],[-37.34414,-9.71937],[-37.33423,-9.71923],[-37.32933,-9.71927],[-37.3218,-9.71924],[-37.31983,-9.71927],[-37.31094,-9.7192],[-37.29589,-9.71921],[-37.28907,-9.71916]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"palmeira_dos_indios",name:"Palmeira dos Indios AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Palmeira%20dos%20Indios&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.58664,-9.46124],[-36.58665,-9.45851],[-36.58619,-9.41968],[-36.58604,-9.41452],[-36.58596,-9.40593],[-36.58585,-9.39509],[-36.58579,-9.39163],[-36.58565,-9.38983],[-36.58549,-9.38249],[-36.58529,-9.37965],[-36.58511,-9.37744],[-36.58503,-9.37059],[-36.5889,-9.37058],[-36.59064,-9.37065],[-36.59389,-9.3706],[-36.60037,-9.37073],[-36.61046,-9.37049],[-36.62288,-9.37021],[-36.63377,-9.37002],[-36.63835,-9.36986],[-36.64743,-9.36997],[-36.65141,-9.36994],[-36.65534,-9.36972],[-36.65647,-9.36974],[-36.66111,-9.37024],[-36.66276,-9.37026],[-36.66704,-9.36973],[-36.67052,-9.36966],[-36.67325,-9.36966],[-36.67602,-9.36987],[-36.67593,-9.3726],[-36.67597,-9.37679],[-36.67639,-9.38138],[-36.67654,-9.38464],[-36.67663,-9.39265],[-36.67675,-9.39829],[-36.67689,-9.40875],[-36.67707,-9.41887],[-36.67717,-9.43179],[-36.67724,-9.43395],[-36.67718,-9.43753],[-36.67728,-9.44311],[-36.6773,-9.44933],[-36.67741,-9.45528],[-36.6774,-9.45938],[-36.67735,-9.46017],[-36.67568,-9.46021],[-36.66625,-9.4603],[-36.66224,-9.4603],[-36.65736,-9.46042],[-36.6504,-9.46047],[-36.63543,-9.46065],[-36.61979,-9.46083],[-36.61433,-9.46083],[-36.61029,-9.46097],[-36.60647,-9.46097],[-36.60186,-9.46099],[-36.59426,-9.46112],[-36.58664,-9.46124]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"Pangasinan_Bulacan_HiRes",name:"Pangasinán/Bulacan (Philippines HiRes)",type:"tms",template:"https://gravitystorm.dev.openstreetmap.org/imagery/philippines/{zoom}/{x}/{y}.png",zoomExtent:[12,19],polygon:[[[120.33659,15.98577],[120.44599,15.984],[120.44613,15.97446],[120.47646,15.97459],[120.59425,15.94683],[120.59806,16.09079],[120.59654,16.198],[120.36854,16.21853],[120.34758,16.04231],[120.33659,15.98577]],[[120.8268,15.3658],[121.2684,15.2602],[121.2699,14.7025],[120.695,14.8423],[120.8268,15.3658]]]},{id:"pao_de_acucar",name:"Pão de Açucar AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Pao%20de%20Acucar&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-37.39003,-9.78589],[-37.39019,-9.7762],[-37.38993,-9.76575],[-37.38991,-9.75256],[-37.39015,-9.74102],[-37.39003,-9.73201],[-37.39012,-9.72254],[-37.39015,-9.71289],[-37.39019,-9.70341],[-37.3902,-9.69548],[-37.40377,-9.6955],[-37.41728,-9.6956],[-37.43224,-9.69569],[-37.44319,-9.69573],[-37.44723,-9.69582],[-37.45682,-9.69585],[-37.47062,-9.69591],[-37.47373,-9.69591],[-37.47586,-9.69604],[-37.48128,-9.69605],[-37.48131,-9.6989],[-37.48122,-9.70087],[-37.48121,-9.70239],[-37.48135,-9.70545],[-37.48138,-9.71046],[-37.48134,-9.71617],[-37.4812,-9.71875],[-37.48125,-9.72035],[-37.48136,-9.72134],[-37.48134,-9.7241],[-37.4813,-9.72506],[-37.48103,-9.72732],[-37.48102,-9.73088],[-37.48127,-9.73462],[-37.48131,-9.73638],[-37.48131,-9.73893],[-37.48131,-9.74388],[-37.4813,-9.74989],[-37.48122,-9.75315],[-37.48102,-9.75855],[-37.48084,-9.7642],[-37.48085,-9.76526],[-37.48094,-9.76675],[-37.48093,-9.76881],[-37.48084,-9.7721],[-37.48087,-9.77486],[-37.48076,-9.77993],[-37.48081,-9.7863],[-37.46382,-9.78623],[-37.45353,-9.7862],[-37.43979,-9.78611],[-37.42998,-9.78607],[-37.4208,-9.786],[-37.40853,-9.78596],[-37.39545,-9.78593],[-37.39003,-9.78589]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"PCN-Italy-2006",name:"PCN 2006 - Italy",type:"wms",template:"http://wms.pcn.minambiente.it/ogc?map=/ms_ogc/WMS_v1.3/raster/ortofoto_colore_06.map&FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=OI.ORTOIMMAGINI.2006.33,OI.ORTOIMMAGINI.2006.32&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2006-01-01T00:00:00.000Z",startDate:"2006-01-01T00:00:00.000Z",polygon:[[[7.54795,43.73118],[8.10697,43.86701],[8.73593,44.38944],[10.18338,43.85116],[9.55016,43.13605],[10.27725,42.27515],[11.69748,42.08118],[12.90059,40.84897],[14.97466,40.20869],[16.04773,38.8953],[13.1086,38.74113],[11.77717,37.93605],[14.40624,36.74299],[15.13467,36.59364],[15.42867,37.027],[15.21993,37.43376],[15.4836,37.92936],[16.01644,37.8036],[17.21669,38.87425],[17.21669,39.40468],[16.55477,39.78775],[17.05464,40.45144],[18.32906,39.70539],[18.68773,40.0587],[18.04964,40.67064],[16.00545,41.52122],[16.38448,41.85964],[15.51837,42.1537],[14.57997,42.2461],[13.56099,43.65128],[12.57889,44.0867],[12.28795,44.62204],[12.56398,44.97092],[12.34151,45.17458],[12.41696,45.40557],[13.09252,45.62826],[13.69549,45.70806],[13.78445,45.5825],[13.9191,45.6322],[13.8235,45.7176],[13.59784,45.8072],[13.64307,45.98326],[13.52963,45.96588],[13.47474,46.00546],[13.66472,46.17392],[13.47587,46.22725],[13.42218,46.20758],[13.37671,46.29668],[13.59777,46.44137],[13.68684,46.43881],[13.7148,46.5222],[12.9151,46.60953],[12.38708,46.71529],[12.27591,46.88651],[12.17486,46.90895],[12.11675,47.01241],[12.21781,47.03996],[12.19254,47.09331],[11.74789,46.98484],[11.33355,46.99862],[11.10618,46.92966],[11.00764,46.76896],[10.72974,46.78972],[10.75753,46.82258],[10.66405,46.87614],[10.47197,46.85698],[10.38659,46.67847],[10.49375,46.62049],[10.46136,46.53164],[10.25309,46.57432],[10.23674,46.63484],[10.10307,46.61003],[10.03715,46.44479],[10.165,46.41051],[10.10506,46.3372],[10.17862,46.25626],[10.07055,46.21668],[9.95249,46.38045],[9.73086,46.35071],[9.71273,46.29266],[9.57015,46.2958],[9.46117,46.37481],[9.45936,46.50873],[9.40487,46.46621],[9.36128,46.5081],[9.28136,46.49685],[9.24503,46.23616],[8.95601,45.96503],[9.09065,45.89906],[9.0298,45.82127],[8.90992,45.8333],[8.9408,45.86682],[8.88904,45.95465],[8.78551,45.99063],[8.85617,46.0748],[8.62242,46.12112],[8.45032,46.26869],[8.42464,46.46367],[8.08814,46.26692],[8.15493,46.1834],[8.11383,46.11577],[8.02906,46.10331],[7.98881,45.99867],[7.9049,45.99945],[7.85949,45.91485],[7.56343,45.97421],[7.10685,45.85653],[7.04151,45.92435],[6.95315,45.85163],[6.80785,45.83265],[6.80785,45.71864],[6.98948,45.63869],[7.00037,45.509],[7.18019,45.40071],[7.10572,45.32924],[7.13115,45.25386],[6.85144,45.13226],[6.7697,45.16044],[6.62803,45.11175],[6.66981,45.02324],[6.74791,45.01939],[6.75518,44.89915],[7.02217,44.82519],[7.07484,44.68073],[6.95133,44.66264],[6.85507,44.53072],[6.94504,44.43112],[6.88784,44.42043],[6.89171,44.36637],[7.00764,44.23736],[7.36364,44.11882],[7.68694,44.17487],[7.72508,44.07578],[7.49355,43.86551],[7.54795,43.73118]],[[8.17134,39.14848],[8.62453,38.75119],[9.09831,39.03764],[9.03102,39.13144],[9.26585,39.18575],[9.64076,39.0227],[9.89894,40.67991],[9.50068,41.39257],[8.30317,40.91071],[8.41304,41.16139],[8.21254,41.13864],[8.07521,40.59862],[8.36154,40.35],[8.27914,39.98585],[8.38283,39.6536],[8.17134,39.14848]],[[12.51489,35.53423],[12.64054,35.5306],[12.63861,35.48641],[12.51296,35.49005],[12.51489,35.53423]],[[11.91218,36.85688],[12.08179,36.85523],[12.07958,36.70974],[11.90998,36.71139],[11.91218,36.85688]],[[12.84019,35.88131],[12.89186,35.88145],[12.89198,35.85003],[12.84031,35.84989],[12.84019,35.88131]]]},{id:"PCN-Lazio_Umbria-2008",name:"PCN 2008 - IT Lazio+Umbria",type:"wms",template:"http://wms.pcn.minambiente.it/ogc?map=/ms_ogc/WMS_v1.3/raster/ortofoto_colore_08.map&FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=OI.ORTOIMMAGINI.2008.33&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2008-01-01T00:00:00.000Z",startDate:"2008-01-01T00:00:00.000Z",polygon:[[[12.33149,41.64637],[12.41178,41.64791],[12.41499,41.54635],[12.49574,41.54789],[12.4985,41.49619],[12.57948,41.49843],[12.58062,41.42932],[12.60632,41.4288],[12.60746,41.39663],[12.8293,41.39818],[12.83159,41.34688],[12.9128,41.34843],[12.9151,41.29726],[12.99585,41.2983],[12.99791,41.19636],[13.1679,41.19808],[13.16721,41.24692],[13.41337,41.24829],[13.4152,41.19705],[13.8341,41.19808],[13.83341,41.2476],[13.91737,41.24847],[13.91668,41.39749],[14.0011,41.39784],[13.99996,41.49774],[14.08415,41.49826],[14.08346,41.65014],[14.00087,41.6498],[13.99973,41.75051],[13.83433,41.74965],[13.83364,41.80047],[13.75151,41.79978],[13.7499,41.84987],[13.41841,41.8497],[13.41681,41.95027],[13.33445,41.94959],[13.3333,42.00041],[13.25141,41.99973],[13.25003,42.05051],[13.08509,42.04966],[13.08394,42.097],[13.33399,42.09819],[13.33376,42.1472],[13.41772,42.14822],[13.41635,42.25052],[13.33399,42.24984],[13.33353,42.30094],[13.25141,42.29992],[13.25003,42.54699],[13.41795,42.54817],[13.41589,42.75065],[13.33468,42.74947],[13.33307,42.90056],[13.16836,42.89938],[13.16721,42.95079],[12.96419,42.95012],[12.96258,43.0003],[12.91877,42.9998],[12.91601,43.25078],[12.83526,43.24994],[12.83228,43.50107],[12.66321,43.4994],[12.66482,43.45112],[12.58567,43.44996],[12.58246,43.5508],[12.50171,43.5498],[12.49987,43.65131],[12.16242,43.64915],[12.16494,43.60132],[12.07891,43.5995],[12.0819,43.45196],[11.99541,43.44913],[11.99862,43.34661],[12.07891,43.34795],[12.08075,43.30189],[11.9961,43.29955],[11.99862,43.20214],[11.91237,43.19929],[11.91466,43.15212],[11.83207,43.14944],[11.8323,43.09653],[11.91099,43.09837],[11.91466,42.90191],[11.82909,42.89922],[11.83139,42.85231],[11.74582,42.84945],[11.74811,42.65236],[11.6731,42.64966],[11.67493,42.6105],[11.49485,42.59936],[11.49852,42.49593],[11.57812,42.49796],[11.58156,42.45244],[11.41226,42.44872],[11.41524,42.34656],[11.49599,42.34792],[11.49921,42.29636],[11.57835,42.29822],[11.58225,42.24628],[11.66185,42.24832],[11.66621,42.09649],[11.74536,42.09819],[11.74903,41.99666],[11.91443,41.99922],[11.91535,41.98626],[11.99403,41.98745],[11.99862,41.89685],[12.07868,41.89907],[12.08144,41.84594],[12.16311,41.84799],[12.16563,41.6964],[12.3292,41.69863],[12.33149,41.64637]]]},{id:"PCN-Italy-2012",name:"PCN 2012 - Italy",type:"wms",template:"http://wms.pcn.minambiente.it/ogc?map=/ms_ogc/WMS_v1.3/raster/ortofoto_colore_12.map&FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=OI.ORTOIMMAGINI.2012&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",polygon:[[[7.54795,43.73118],[8.10697,43.86701],[8.73593,44.38944],[10.18338,43.85116],[9.55016,43.13605],[10.27725,42.27515],[11.69748,42.08118],[12.90059,40.84897],[14.97466,40.20869],[16.04773,38.8953],[13.1086,38.74113],[11.77717,37.93605],[14.40624,36.74299],[15.13467,36.59364],[15.42867,37.027],[15.21993,37.43376],[15.4836,37.92936],[16.01644,37.8036],[17.21669,38.87425],[17.21669,39.40468],[16.55477,39.78775],[17.05464,40.45144],[18.32906,39.70539],[18.68773,40.0587],[18.04964,40.67064],[16.00545,41.52122],[16.38448,41.85964],[15.51837,42.1537],[14.57997,42.2461],[13.56099,43.65128],[12.57889,44.0867],[12.28795,44.62204],[12.56398,44.97092],[12.34151,45.17458],[12.41696,45.40557],[13.09252,45.62826],[13.69549,45.70806],[13.78445,45.5825],[13.9191,45.6322],[13.8235,45.7176],[13.59784,45.8072],[13.64307,45.98326],[13.52963,45.96588],[13.47474,46.00546],[13.66472,46.17392],[13.47587,46.22725],[13.42218,46.20758],[13.37671,46.29668],[13.59777,46.44137],[13.68684,46.43881],[13.7148,46.5222],[12.9151,46.60953],[12.38708,46.71529],[12.27591,46.88651],[12.17486,46.90895],[12.11675,47.01241],[12.21781,47.03996],[12.19254,47.09331],[11.74789,46.98484],[11.33355,46.99862],[11.10618,46.92966],[11.00764,46.76896],[10.72974,46.78972],[10.75753,46.82258],[10.66405,46.87614],[10.47197,46.85698],[10.38659,46.67847],[10.49375,46.62049],[10.46136,46.53164],[10.25309,46.57432],[10.23674,46.63484],[10.10307,46.61003],[10.03715,46.44479],[10.165,46.41051],[10.10506,46.3372],[10.17862,46.25626],[10.07055,46.21668],[9.95249,46.38045],[9.73086,46.35071],[9.71273,46.29266],[9.57015,46.2958],[9.46117,46.37481],[9.45936,46.50873],[9.40487,46.46621],[9.36128,46.5081],[9.28136,46.49685],[9.24503,46.23616],[8.95601,45.96503],[9.09065,45.89906],[9.0298,45.82127],[8.90992,45.8333],[8.9408,45.86682],[8.88904,45.95465],[8.78551,45.99063],[8.85617,46.0748],[8.62242,46.12112],[8.45032,46.26869],[8.42464,46.46367],[8.08814,46.26692],[8.15493,46.1834],[8.11383,46.11577],[8.02906,46.10331],[7.98881,45.99867],[7.9049,45.99945],[7.85949,45.91485],[7.56343,45.97421],[7.10685,45.85653],[7.04151,45.92435],[6.95315,45.85163],[6.80785,45.83265],[6.80785,45.71864],[6.98948,45.63869],[7.00037,45.509],[7.18019,45.40071],[7.10572,45.32924],[7.13115,45.25386],[6.85144,45.13226],[6.7697,45.16044],[6.62803,45.11175],[6.66981,45.02324],[6.74791,45.01939],[6.75518,44.89915],[7.02217,44.82519],[7.07484,44.68073],[6.95133,44.66264],[6.85507,44.53072],[6.94504,44.43112],[6.88784,44.42043],[6.89171,44.36637],[7.00764,44.23736],[7.36364,44.11882],[7.68694,44.17487],[7.72508,44.07578],[7.49355,43.86551],[7.54795,43.73118]],[[8.17134,39.14848],[8.62453,38.75119],[9.09831,39.03764],[9.03102,39.13144],[9.26585,39.18575],[9.64076,39.0227],[9.89894,40.67991],[9.50068,41.39257],[8.30317,40.91071],[8.41304,41.16139],[8.21254,41.13864],[8.07521,40.59862],[8.36154,40.35],[8.27914,39.98585],[8.38283,39.6536],[8.17134,39.14848]],[[12.51489,35.53423],[12.64054,35.5306],[12.63861,35.48641],[12.51296,35.49005],[12.51489,35.53423]],[[11.91218,36.85688],[12.08179,36.85523],[12.07958,36.70974],[11.90998,36.71139],[11.91218,36.85688]],[[12.84019,35.88131],[12.89186,35.88145],[12.89198,35.85003],[12.84031,35.84989],[12.84019,35.88131]]]},{id:"Actueel_ortho25_WMS",name:"PDOK aerial imagery Beeldmateriaal.nl 25cm latest",type:"tms",template:"https://geodata.nationaalgeoregister.nl/luchtfoto/rgb/wmts?FORMAT=image/jpeg&SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=Actueel_ortho25&STYLE=&FORMAT=image/jpeg&tileMatrixSet=OGC:1.0:GoogleMapsCompatible&tileMatrix={zoom}&tileRow={y}&tileCol={x}",zoomExtent:[0,19],polygon:[[[3.14377,51.35984],[3.1575,51.24113],[3.33878,51.11544],[3.91281,51.05851],[4.65714,51.28067],[4.89334,51.26348],[5.17899,51.12579],[5.38498,51.13096],[5.54428,51.05678],[5.42069,50.85956],[5.46738,50.70326],[5.65689,50.61926],[6.14853,50.62143],[6.30234,50.85782],[6.29959,50.95438],[6.26389,51.01835],[6.37238,51.09259],[6.40122,51.20114],[6.37375,51.25102],[6.44516,51.31587],[6.42044,51.5496],[6.34354,51.67922],[6.79672,51.76429],[7.04666,51.91024],[7.07138,52.04559],[7.27188,52.17041],[7.30759,52.38551],[7.20596,52.53195],[7.28287,52.61458],[7.29935,52.77853],[7.44217,52.97827],[7.43393,53.28314],[7.04392,53.55159],[6.78299,53.63635],[6.23917,53.54016],[5.6871,53.51241],[5.17349,53.43885],[4.81644,53.23384],[4.65164,53.06583],[4.54178,52.48598],[4.32205,52.19568],[4.08104,52.01369],[4.02199,52.01623],[3.93684,51.96379],[3.95195,51.88079],[3.84483,51.84942],[3.62373,51.70752],[3.65532,51.66069],[3.63335,51.62746],[3.54683,51.62234],[3.39577,51.56091],[3.38203,51.51735],[3.49876,51.43267],[3.32985,51.38556],[3.14377,51.35984]]],terms_url:"https://www.nationaalgeoregister.nl/geonetwork/srv/dut/catalog.search#/search?facet.q=license%2FCC-BY&isChild=%27false%27&resultType=details&any_OR_title_OR_keyword=luchtfoto&fast=index&_content_type=json&from=1&to=20&sortBy=relevance",terms_text:"Kadaster / Beeldmateriaal.nl, CC BY 4.0",best:true,description:"Nationwide data set 25cm resolution color aerial imagery of the most recent year.",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/nl/PDOK-Luchtfoto-Beeldmateriaal-25cm-latest.png"},{id:"al_piranhas",name:"Piranhas AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Piranhas&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-37.71918,-9.65236],[-37.71918,-9.63874],[-37.71914,-9.6321],[-37.71924,-9.62114],[-37.71929,-9.61023],[-37.71934,-9.59988],[-37.7194,-9.58891],[-37.71945,-9.57802],[-37.71944,-9.57173],[-37.71952,-9.56684],[-37.71956,-9.56225],[-37.71998,-9.56218],[-37.72258,-9.56195],[-37.72818,-9.56203],[-37.73254,-9.562],[-37.74107,-9.56206],[-37.74845,-9.56202],[-37.75926,-9.56216],[-37.76972,-9.56227],[-37.78036,-9.56244],[-37.78537,-9.56236],[-37.78907,-9.56233],[-37.79562,-9.56245],[-37.79771,-9.56237],[-37.81006,-9.56243],[-37.81061,-9.56241],[-37.81053,-9.56531],[-37.81049,-9.57629],[-37.81046,-9.58742],[-37.81038,-9.59757],[-37.81031,-9.61798],[-37.81018,-9.65197],[-37.81018,-9.6523],[-37.81024,-9.65259],[-37.80664,-9.65245],[-37.80206,-9.65253],[-37.79597,-9.65237],[-37.79179,-9.65252],[-37.78815,-9.65246],[-37.78723,-9.65242],[-37.78035,-9.65241],[-37.77865,-9.65223],[-37.77625,-9.6523],[-37.77475,-9.65219],[-37.77234,-9.65223],[-37.7696,-9.65245],[-37.76623,-9.65251],[-37.76345,-9.65246],[-37.7604,-9.6525],[-37.75102,-9.65237],[-37.75012,-9.65249],[-37.74155,-9.65248],[-37.7403,-9.65239],[-37.73785,-9.65246],[-37.73443,-9.65238],[-37.73106,-9.65243],[-37.72651,-9.65237],[-37.72195,-9.65225],[-37.71992,-9.65228],[-37.71918,-9.65236]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"PNOA-Spain-TMS",name:"PNOA Spain",type:"tms",template:"https://www.ign.es/wmts/pnoa-ma?request=GetTile&service=WMTS&VERSION=1.0.0&Layer=OI.OrthoimageCoverage&Style=default&Format=image/png&TileMatrixSet=GoogleMapsCompatible&TileMatrix={zoom}&TileRow={y}&TileCol={x}",zoomExtent:[0,20],polygon:[[[-17.88463,28.44606],[-17.89395,28.52255],[-18.02125,28.74819],[-18.02241,28.80384],[-17.9424,28.87261],[-17.89118,28.87371],[-17.89033,28.85151],[-17.76759,28.85378],[-17.76698,28.83122],[-17.74127,28.832],[-17.73949,28.76422],[-17.71398,28.76497],[-17.71293,28.73037],[-17.75744,28.69318],[-17.75708,28.67413],[-17.74579,28.67435],[-17.74573,28.61656],[-17.75197,28.58337],[-17.76225,28.5592],[-17.78331,28.54167],[-17.78316,28.49366],[-17.80861,28.4925],[-17.80601,28.4469],[-17.88463,28.44606]],[[-18.1661,27.78516],[-18.16349,27.69492],[-18.08898,27.69634],[-18.08734,27.67387],[-18.03641,27.67537],[-18.03501,27.63026],[-17.959,27.6324],[-17.86033,27.7926],[-17.86303,27.83688],[-17.8884,27.83649],[-17.88913,27.85905],[-17.99065,27.85675],[-18.03868,27.76558],[-18.11464,27.76379],[-18.11546,27.78636],[-18.1661,27.78516]],[[-17.36038,28.06398],[-17.36297,28.17572],[-17.33756,28.17637],[-17.33846,28.2213],[-17.18579,28.22388],[-17.08208,28.13518],[-17.08084,28.068],[-17.13154,28.06681],[-17.15633,28.02146],[-17.23211,28.02037],[-17.23199,27.99804],[-17.25768,27.99784],[-17.25785,28.01997],[-17.30867,28.01923],[-17.36038,28.06398]],[[-16.92782,28.32758],[-16.92866,28.37219],[-16.87767,28.37293],[-16.87807,28.39542],[-16.52143,28.42261],[-16.44571,28.49113],[-16.44625,28.53597],[-16.42059,28.53627],[-16.42092,28.55884],[-16.34433,28.55976],[-16.3446,28.58221],[-16.19125,28.58372],[-16.19162,28.60684],[-16.12793,28.60782],[-16.1278,28.59218],[-16.09951,28.5925],[-16.09934,28.51638],[-16.16481,28.51612],[-16.16475,28.49386],[-16.23858,28.44847],[-16.26535,28.44761],[-16.26586,28.403],[-16.31675,28.40176],[-16.31631,28.38019],[-16.34208,28.37951],[-16.34083,28.2893],[-16.41584,28.19761],[-16.4151,28.13113],[-16.51533,28.01648],[-16.61684,28.01532],[-16.61681,27.99305],[-16.71842,27.99192],[-16.7191,28.03714],[-16.7447,28.03679],[-16.74534,28.08181],[-16.7707,28.08161],[-16.8224,28.1259],[-16.82317,28.17087],[-16.8487,28.17075],[-16.85028,28.26079],[-16.87565,28.26055],[-16.87608,28.28322],[-16.90151,28.28277],[-16.90239,28.32793],[-16.92782,28.32758]],[[-15.85374,27.90089],[-15.8542,27.99018],[-15.82895,27.99066],[-15.82911,28.03558],[-15.7783,28.03632],[-15.75328,28.08143],[-15.72788,28.08157],[-15.72826,28.17186],[-15.49897,28.1728],[-15.49874,28.15041],[-15.44978,28.15075],[-15.45016,28.19614],[-15.39728,28.19614],[-15.39644,28.03836],[-15.37103,28.03802],[-15.37065,28.01532],[-15.34578,28.01532],[-15.34548,27.92544],[-15.3708,27.92524],[-15.37057,27.83521],[-15.39598,27.83474],[-15.421,27.78797],[-15.47181,27.78939],[-15.47188,27.76665],[-15.52277,27.76678],[-15.54771,27.72161],[-15.62361,27.72134],[-15.62415,27.74199],[-15.70075,27.74335],[-15.80167,27.81105],[-15.85374,27.90089]],[[-14.52156,28.04678],[-14.52244,28.11841],[-14.41575,28.11561],[-14.21688,28.22788],[-14.21537,28.33903],[-14.16417,28.45283],[-14.11151,28.4748],[-14.03358,28.72267],[-13.95652,28.74494],[-13.95617,28.76659],[-13.82902,28.76643],[-13.82896,28.78798],[-13.80007,28.78793],[-13.8013,28.71899],[-13.82757,28.71935],[-13.82786,28.6518],[-13.80258,28.6519],[-13.80339,28.53842],[-13.82885,28.53847],[-13.83151,28.39702],[-13.91582,28.22414],[-13.98564,28.22357],[-14.03696,28.17958],[-14.13871,28.17999],[-14.13866,28.15791],[-14.21537,28.15781],[-14.21472,28.11189],[-14.29132,28.04524],[-14.33197,28.03687],[-14.44578,28.04698],[-14.44666,28.0658],[-14.49628,28.06826],[-14.49593,28.04585],[-14.52156,28.04678]],[[-13.80066,28.84566],[-13.80093,28.82311],[-13.77569,28.82305],[-13.69729,28.88982],[-13.69729,28.91277],[-13.60725,28.9118],[-13.43886,29.00024],[-13.43746,29.13513],[-13.4117,29.13499],[-13.41056,29.22298],[-13.45928,29.25559],[-13.45974,29.2942],[-13.50913,29.29456],[-13.51006,29.31635],[-13.56354,29.31729],[-13.56406,29.27138],[-13.53892,29.2712],[-13.53897,29.25004],[-13.56613,29.25013],[-13.5666,29.203],[-13.51565,29.20223],[-13.51565,29.18206],[-13.5398,29.18278],[-13.54089,29.13753],[-13.65782,29.13685],[-13.71322,29.09351],[-13.76634,29.09345],[-13.85025,29.01659],[-13.85182,28.98343],[-13.85244,28.91486],[-13.90131,28.89245],[-13.9024,28.84698],[-13.80066,28.84566]],[[1.64799,38.99907],[1.73217,38.99936],[1.73147,39.04417],[1.64895,39.04319],[1.64816,39.12764],[1.39486,39.12657],[1.39544,39.08642],[1.22811,39.08526],[1.22911,39.0029],[1.14487,39.0018],[1.14528,38.832],[1.31136,38.83316],[1.31219,38.79065],[1.39469,38.79162],[1.39519,38.75296],[1.31128,38.75193],[1.31259,38.62388],[1.6489,38.62511],[1.64807,38.71115],[1.58456,38.71012],[1.58116,38.70054],[1.54915,38.70028],[1.51972,38.70921],[1.50355,38.72532],[1.48133,38.91551],[1.55189,38.92544],[1.56673,38.95666],[1.64874,38.95833],[1.64799,38.99907]],[[2.54507,39.41667],[2.43933,39.41611],[2.43871,39.48469],[2.43902,39.49934],[2.31223,39.49934],[2.31192,39.54179],[2.22907,39.541],[2.22835,39.62606],[2.34601,39.62709],[2.92704,39.96016],[3.14566,39.96005],[3.14608,40.00198],[3.23139,40.00198],[3.23129,39.83292],[3.14823,39.83316],[3.14844,39.79357],[3.48148,39.79318],[3.48035,39.5959],[3.31506,39.47846],[3.31462,39.37855],[3.08302,39.24994],[2.97986,39.25015],[2.97904,39.3335],[2.72874,39.33342],[2.72885,39.45814],[2.64569,39.45774],[2.64538,39.49966],[2.54528,39.49942],[2.54507,39.41667]],[[3.81204,40.04344],[3.72908,40.0438],[3.72862,39.95842],[3.81266,39.9576],[3.81228,39.91644],[3.9609,39.91598],[4.19381,39.79131],[4.31503,39.79058],[4.31599,39.83293],[4.39874,39.83204],[4.39737,39.91858],[4.3158,39.91933],[4.31619,40.0434],[4.2319,40.04436],[4.23248,40.08478],[4.14915,40.08611],[4.14906,40.12552],[4.0628,40.12722],[4.06242,40.08499],[3.81287,40.08529],[3.81204,40.04344]],[[-8.89106,41.82289],[-9.1092,42.57511],[-9.03655,42.73066],[-9.08834,42.72696],[-9.14661,42.77503],[-9.21855,42.90163],[-9.2761,42.86051],[-9.30991,42.93113],[-9.27898,42.9822],[-9.30991,43.06004],[-9.25236,43.10417],[-9.2315,43.17032],[-9.14733,43.21018],[-9.06748,43.19916],[-9.03367,43.24267],[-8.99842,43.24477],[-8.99986,43.29558],[-8.93727,43.30553],[-8.92936,43.32699],[-8.8639,43.32908],[-8.87613,43.37407],[-8.82217,43.37354],[-8.78548,43.31914],[-8.70635,43.305],[-8.60996,43.3296],[-8.55097,43.32332],[-8.52435,43.3364],[-8.52507,43.36465],[-8.45745,43.39184],[-8.36105,43.41118],[-8.36033,43.46342],[-8.33444,43.57974],[-8.27761,43.57088],[-8.06467,43.72392],[-7.99921,43.7234],[-7.9172,43.78264],[-7.85605,43.79146],[-7.83591,43.73743],[-7.66284,43.80982],[-7.31889,43.67827],[-7.19975,43.58308],[-6.24882,43.6075],[-6.12293,43.57901],[-5.85204,43.6799],[-5.60363,43.57087],[-5.28553,43.56191],[-5.17875,43.49916],[-4.90899,43.48367],[-4.61562,43.4192],[-4.18399,43.42492],[-3.80295,43.51954],[-3.74,43.48693],[-3.56128,43.54236],[-3.1083,43.38163],[-2.93857,43.46246],[-2.74524,43.47551],[-2.30462,43.31706],[-1.9854,43.3563],[-1.85528,43.39725],[-1.7698,43.39644],[-1.77005,43.37605],[-1.71005,43.37569],[-1.71135,43.33125],[-1.72259,43.31318],[-1.68904,43.31291],[-1.68811,43.33413],[-1.64467,43.33372],[-1.64498,43.31332],[-1.60299,43.31295],[-1.60344,43.29266],[-1.56359,43.29212],[-1.56305,43.31338],[-1.47799,43.31284],[-1.36677,43.27614],[-1.35688,43.23815],[-1.37037,43.1713],[-1.44231,43.08336],[-1.41983,43.06036],[-1.37307,43.05117],[-1.36407,43.11159],[-1.30203,43.13522],[-1.23549,43.13325],[-1.27955,43.07744],[-1.19232,43.06496],[-1.00619,43.00778],[-0.94234,42.9749],[-0.7562,42.98213],[-0.71484,42.96108],[-0.69685,42.90314],[-0.55118,42.82207],[-0.50442,42.84845],[-0.42889,42.82009],[-0.31648,42.86558],[-0.14563,42.81086],[-0.03143,42.71249],[0.18618,42.7541],[0.30218,42.71777],[0.36422,42.74287],[0.44875,42.71447],[0.62769,42.7224],[0.64118,42.85767],[0.71492,42.88272],[0.9676,42.81811],[1.10878,42.79898],[1.17532,42.73429],[1.36326,42.74155],[1.41137,42.70939],[1.48061,42.71034],[1.4813,42.50107],[1.64436,42.50203],[1.64328,42.54245],[1.73041,42.54342],[1.73164,42.50118],[2.06386,42.50164],[2.06456,42.45902],[2.39693,42.45994],[2.39768,42.41784],[2.48048,42.41797],[2.48098,42.37594],[2.64479,42.37626],[2.64448,42.45924],[2.81133,42.45961],[2.81126,42.50104],[3.06388,42.50085],[3.06388,42.45915],[3.23078,42.45934],[3.23049,42.37644],[3.31415,42.37604],[3.31412,42.33399],[3.39785,42.33404],[3.39739,42.29009],[3.31389,42.29084],[3.31397,42.20702],[3.14759,42.2073],[3.14759,42.12606],[3.23055,42.126],[3.24668,41.95294],[3.19452,41.85589],[3.06054,41.76474],[2.78358,41.63718],[2.26293,41.42716],[2.16492,41.29893],[1.86008,41.22322],[1.3763,41.11627],[1.17937,41.04646],[1.08585,41.04849],[0.75854,40.81956],[0.9114,40.73376],[0.87813,40.67514],[0.66502,40.53587],[0.55801,40.55022],[0.43392,40.37576],[0.26756,40.19192],[0.16415,40.06472],[0.07513,40.01447],[0.01039,39.89522],[-0.09392,39.81169],[-0.18474,39.63117],[-0.29085,39.50363],[-0.28636,39.33343],[-0.18564,39.17746],[-0.21352,39.15585],[-0.11101,38.97222],[0.00949,38.88268],[0.12189,38.87218],[0.23429,38.79864],[0.25587,38.72642],[0.09581,38.61338],[-0.0022,38.60706],[-0.05705,38.52691],[-0.27197,38.47624],[-0.37987,38.39312],[-0.38347,38.33813],[-0.45091,38.33108],[-0.50487,38.28309],[-0.48238,38.19481],[-0.42933,38.16583],[-0.45451,38.14886],[-0.584,38.17219],[-0.61367,38.11986],[-0.63705,37.96122],[-0.68111,37.94562],[-0.73237,37.88107],[-0.72158,37.78306],[-0.68831,37.734],[-0.66415,37.62315],[-0.71939,37.58784],[-0.91963,37.53758],[-1.11071,37.51641],[-1.33832,37.52867],[-1.44089,37.39037],[-1.6767,37.27652],[-1.85408,36.91229],[-2.06835,36.69291],[-2.21588,36.66192],[-2.37219,36.78018],[-2.68129,36.65911],[-2.92015,36.66756],[-3.09402,36.71263],[-3.46108,36.65488],[-3.72804,36.69291],[-4.37435,36.66333],[-4.65712,36.44042],[-4.9188,36.45313],[-5.16995,36.35135],[-5.28411,36.19702],[-5.26809,36.12418],[-5.35248,36.12247],[-5.35161,36.04014],[-5.43658,36.03889],[-5.43532,36.00344],[-5.68886,36.00365],[-5.68996,36.04053],[-5.85506,36.03856],[-5.85668,36.12421],[-5.93848,36.12215],[-5.94003,36.16556],[-5.99834,36.1645],[-6.03573,36.1781],[-6.07752,36.22241],[-6.15061,36.28646],[-6.23154,36.37701],[-6.33585,36.53106],[-6.32146,36.58163],[-6.40419,36.6235],[-6.47433,36.74897],[-6.41588,36.79939],[-6.49052,36.91738],[-6.62989,37.0194],[-6.87448,37.10838],[-7.04264,37.18507],[-7.26474,37.18435],[-7.37535,37.15354],[-7.40832,37.16822],[-7.42029,37.21183],[-7.42492,37.23505],[-7.43805,37.2452],[-7.44597,37.33261],[-7.4481,37.39094],[-7.46963,37.40758],[-7.4647,37.45305],[-7.50197,37.51641],[-7.51916,37.52292],[-7.52196,37.57237],[-7.45013,37.66958],[-7.4249,37.75992],[-7.31666,37.83997],[-7.26833,37.98895],[-7.15368,38.01552],[-7.11771,38.05536],[-7.0143,38.02438],[-6.99632,38.10756],[-6.96147,38.20125],[-7.08062,38.15708],[-7.34027,38.44024],[-7.26383,38.73807],[-7.04352,38.87297],[-7.06151,38.90796],[-6.96934,39.01983],[-7.00081,39.08879],[-7.15368,39.09577],[-7.15255,39.16029],[-7.24472,39.19689],[-7.25596,39.28133],[-7.33689,39.35351],[-7.3279,39.45599],[-7.51449,39.58865],[-7.55271,39.67954],[-7.05027,39.67522],[-6.99519,39.81954],[-6.92213,39.87909],[-6.88616,40.02299],[-7.04128,40.13479],[-7.01767,40.26615],[-6.8086,40.34501],[-6.86818,40.44516],[-6.85356,40.60664],[-6.83783,40.87576],[-6.9536,41.03704],[-6.80186,41.03959],[-6.76814,41.13871],[-6.64112,41.26556],[-6.56244,41.26303],[-6.21737,41.5791],[-6.31628,41.64465],[-6.51523,41.64129],[-6.58717,41.68832],[-6.54783,41.85597],[-6.62988,41.91121],[-7.13345,41.94048],[-7.16829,41.87188],[-7.42569,41.78477],[-7.95398,41.84593],[-8.13045,41.78058],[-8.25185,41.90786],[-8.12933,42.03488],[-8.24848,42.1008],[-8.36762,42.05575],[-8.60704,42.03405],[-8.89106,41.82289]]],terms_text:"PNOA",best:true},{id:"poco_das_trincheiras",name:"Poço das Trincheiras AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Poco%20das%20Trincheiras&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-37.23942,-9.35157],[-37.23947,-9.34387],[-37.23942,-9.33792],[-37.23954,-9.33022],[-37.23973,-9.32791],[-37.23974,-9.3228],[-37.23964,-9.32085],[-37.23971,-9.31864],[-37.2398,-9.31706],[-37.23982,-9.31561],[-37.24053,-9.30933],[-37.24051,-9.30004],[-37.24008,-9.29687],[-37.23998,-9.29546],[-37.23992,-9.29319],[-37.23989,-9.28978],[-37.23995,-9.28818],[-37.24008,-9.28641],[-37.24036,-9.28212],[-37.24038,-9.27897],[-37.24051,-9.27557],[-37.24004,-9.26979],[-37.24018,-9.26721],[-37.24018,-9.26612],[-37.23995,-9.26455],[-37.23983,-9.26151],[-37.24333,-9.26136],[-37.24936,-9.26146],[-37.26445,-9.26161],[-37.28016,-9.26172],[-37.28294,-9.26171],[-37.29581,-9.26178],[-37.30685,-9.26178],[-37.31419,-9.26189],[-37.32437,-9.26192],[-37.33078,-9.26175],[-37.33057,-9.27275],[-37.33048,-9.28007],[-37.33054,-9.28117],[-37.33069,-9.28427],[-37.3307,-9.28535],[-37.33064,-9.28617],[-37.33071,-9.28717],[-37.33064,-9.28769],[-37.33062,-9.29027],[-37.33043,-9.29308],[-37.33038,-9.29655],[-37.33034,-9.30591],[-37.3304,-9.31203],[-37.33038,-9.32194],[-37.33041,-9.3342],[-37.33035,-9.34185],[-37.3303,-9.34783],[-37.33035,-9.35202],[-37.31509,-9.35194],[-37.30011,-9.3519],[-37.29531,-9.35183],[-37.28899,-9.35171],[-37.28497,-9.35182],[-37.27851,-9.35173],[-37.27431,-9.35181],[-37.27115,-9.3517],[-37.26351,-9.35168],[-37.26046,-9.35164],[-37.25402,-9.35177],[-37.24705,-9.35163],[-37.23942,-9.35157]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"e-mapa.net-buildings",name:"polska.e-mapa.net: Buildings",type:"wms",template:"http://integracja02.gugik.gov.pl/cgi-bin/KrajowaIntegracjaEwidencjiGruntow?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=budynki&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,19],polygon:[[[15.9751,54.37092],[16.31116,54.55618],[17.13919,54.78457],[18.34485,54.90227],[19.66137,54.47372],[20.28152,54.42135],[21.46639,54.34064],[22.77599,54.37698],[22.8626,54.42336],[23.29567,54.26786],[23.53472,54.09553],[23.52086,53.97752],[23.71834,53.46296],[23.92968,53.18567],[23.92968,52.68873],[23.7322,52.60675],[23.5659,52.58781],[23.20905,52.33026],[23.19519,52.23701],[23.50354,52.18606],[23.69062,52.00301],[23.59708,51.7399],[23.66291,51.38886],[23.9366,50.98278],[24.16873,50.86048],[24.01975,50.80358],[24.10983,50.66105],[24.05786,50.41884],[23.61787,50.30834],[22.68244,49.51635],[22.73788,49.20949],[22.90417,49.07804],[22.8626,48.99401],[22.60969,49.03718],[22.07615,49.20044],[21.84749,49.37219],[21.37631,49.44883],[21.10262,49.37219],[20.91207,49.3022],[20.6453,49.39023],[20.18451,49.33156],[20.11869,49.20044],[19.942,49.13021],[19.76531,49.21176],[19.74798,49.39925],[19.60247,49.41503],[19.50893,49.58154],[19.42925,49.59052],[19.23177,49.41503],[18.99618,49.38798],[18.93382,49.4916],[18.83681,49.49386],[18.80216,49.66234],[18.6428,49.70941],[18.52154,49.89947],[18.08154,50.01092],[17.88753,49.98865],[17.73855,50.06877],[17.6069,50.17096],[17.74548,50.21532],[17.71084,50.3017],[17.41635,50.26407],[16.94864,50.44533],[16.89321,50.40339],[17.00061,50.31055],[17.01793,50.22419],[16.81352,50.18649],[16.64029,50.09767],[16.43242,50.28621],[16.19683,50.42767],[16.42203,50.58852],[16.33888,50.66324],[16.22802,50.63688],[16.05479,50.61271],[15.57322,50.76415],[15.26834,50.89764],[15.24409,50.9806],[15.02929,51.0133],[15.00157,50.85829],[14.81102,50.87359],[14.95653,51.07212],[15.01889,51.29146],[14.93921,51.46015],[14.72094,51.55718],[14.75212,51.62606],[14.59968,51.84276],[14.70362,52.07334],[14.55811,52.24974],[14.51654,52.42544],[14.60315,52.58781],[14.11465,52.82083],[14.15276,52.9734],[14.35024,53.07342],[14.42299,53.26656],[14.1978,53.87348],[14.22205,53.99585],[15.9751,54.37092]]],terms_url:"https://polska.e-mapa.net/",terms_text:"polska.e-mapa.net - Geoportal otwartych danych przestrzennych",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/polskae-mapanetBuildings.png"},{id:"debicki-buildings",name:"Powiat dębicki: Buildings",type:"wms",template:"https://debica.geoportal2.pl/map/wms/wms.php?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=budynki,adresy,EBU,EBT,S&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,19],polygon:[[[21.53768,50.01085],[21.51944,50.05423],[21.58099,50.1233],[21.48804,50.18059],[21.13725,50.14835],[21.13939,50.12721],[21.18058,50.12101],[21.14315,50.05965],[21.15356,49.92854],[21.27892,49.92554],[21.22448,49.8861],[21.22362,49.84258],[21.35177,49.8349],[21.36368,49.86838],[21.41585,49.82003],[21.47943,49.8398],[21.52679,49.88911],[21.47689,50.00135],[21.53768,50.01085]]],terms_text:"Powiat dębicki",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/PowiatrzeszowskiBuildings.png"},{id:"lancucki-buildings",name:"Powiat łańcucki: Buildings",type:"wms",template:"https://lancut.geoportal2.pl/map/wms/wms.php?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=EBT,budynki,adresy&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,19],polygon:[[[22.17224,50.10121],[22.12574,50.1079],[22.0823,50.17206],[22.13591,50.1867],[22.173,50.18117],[22.18418,50.22914],[22.235,50.24718],[22.3856,50.16031],[22.40346,50.13331],[22.45275,50.12745],[22.45275,50.10676],[22.41768,50.08997],[22.38364,50.08915],[22.38542,50.05393],[22.35315,50.05067],[22.3562,50.00627],[22.31478,49.99451],[22.32139,49.94614],[22.29979,49.92455],[22.24161,49.92847],[22.20901,49.93728],[22.22382,49.96085],[22.16683,50.00412],[22.1387,50.00251],[22.12015,50.04626],[22.17224,50.10121]]],terms_text:"Powiat łańcucki",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/PowiatrzeszowskiBuildings.png"},{id:"lubaczowski-buildings",name:"Powiat lubaczowski: Buildings",type:"wms",template:"https://lubaczow.geoportal2.pl/map/wms/wms.php?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=S,EBT,adresy,budynki_ewid&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,19],polygon:[[[23.29224,50.09693],[23.55763,50.25704],[23.51394,50.26643],[23.522,50.29892],[23.40991,50.3083],[23.44482,50.35653],[23.38072,50.3699],[23.38829,50.4058],[23.35821,50.41105],[23.2527,50.36601],[23.19379,50.40529],[23.01962,50.2928],[22.84161,50.30574],[22.83572,50.27037],[22.82426,50.26923],[22.79651,50.20933],[22.86603,50.18949],[22.87414,50.13786],[22.93233,50.1678],[22.88954,50.11501],[22.95351,50.07178],[23.05556,50.04967],[22.99884,49.99028],[23.14951,49.97563],[23.29224,50.09693]]],terms_text:"Powiat lubaczowski",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/PowiatrzeszowskiBuildings.png"},{id:"poznanski-buildings",name:"Powiat poznański: Buildings",type:"wms",template:"http://wms.podgik.poznan.pl/cgi-bin/poznan?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=budynki&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[16.9585,52.46312],[17.03946,52.33605],[16.84291,52.36501],[16.78596,52.46566],[16.70022,52.53819],[16.6415,52.5288],[16.44898,52.36793],[16.47775,52.2696],[16.5659,52.26813],[16.58375,52.17007],[17.08099,52.14981],[17.37124,52.34522],[17.39853,52.44037],[17.35338,52.53949],[17.13689,52.57783],[17.13126,52.6419],[17.01608,52.68366],[16.9158,52.65079],[16.85814,52.58191],[16.7367,52.57459],[16.70022,52.53824],[16.78598,52.46567],[16.9585,52.46312]]],terms_text:"PODGIK Poznań",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/PowiatpoznaskiOrthophotomap(aerialimage).png"},{id:"sropczyce-buildings",name:"Powiat ropczycko-sędziszowski: Buildings",type:"wms",template:"https://spropczyce.geoportal2.pl/map/wms/wms.php?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=budynki&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,19],polygon:[[[21.60041,50.21025],[21.74199,50.16538],[21.792,50.17829],[21.81459,50.15264],[21.78741,50.10859],[21.82597,50.09149],[21.82552,50.02925],[21.78666,49.97585],[21.70632,49.96022],[21.683,49.92431],[21.60062,49.91793],[21.54249,49.8862],[21.5188,49.89119],[21.45315,49.99268],[21.50364,50.0198],[21.49298,50.07161],[21.55535,50.11909],[21.50429,50.16559],[21.59816,50.17866],[21.60041,50.21025]]],terms_text:"Powiat ropczycko-sędziszowski",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/PowiatrzeszowskiBuildings.png"},{id:"rzeszowski-buildings",name:"Powiat rzeszowski: Buildings",type:"wms",template:"https://powiatrzeszowski.geoportal2.pl/map/wms/wms.php?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=budynki,EBT,EBU&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,19],polygon:[[[22.18219,50.17339],[22.09834,50.17176],[22.18016,50.09784],[22.13779,50.00695],[22.09444,50.00841],[22.02839,50.06668],[21.9354,50.06636],[21.98164,49.94977],[22.05278,50.0097],[22.1771,50.00555],[22.23319,49.96829],[22.31144,49.87008],[22.34961,49.72826],[21.99951,49.82808],[21.84961,49.95739],[21.7495,49.96981],[21.78503,50.14212],[21.93307,50.24748],[22.08291,50.26471],[21.98553,50.31545],[22.0901,50.37369],[22.19821,50.35265],[22.2536,50.2647],[22.18219,50.17339]]],terms_text:"Powiat rzeszowski",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/PowiatrzeszowskiBuildings.png"},{id:"rzeszowski-aerial",name:"Powiat rzeszowski: Orthophotomap (aerial image)",type:"wms",template:"https://powiatrzeszowski.geoportal2.pl/map/wms/wms.php?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortofotomapa&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,19],polygon:[[[22.18219,50.17339],[22.09834,50.17176],[22.18016,50.09784],[22.13779,50.00695],[22.09444,50.00841],[22.02839,50.06668],[21.9354,50.06636],[21.98164,49.94977],[22.05278,50.0097],[22.1771,50.00555],[22.23319,49.96829],[22.31144,49.87008],[22.34961,49.72826],[21.99951,49.82808],[21.84961,49.95739],[21.7495,49.96981],[21.78503,50.14212],[21.93307,50.24748],[22.08291,50.26471],[21.98553,50.31545],[22.0901,50.37369],[22.19821,50.35265],[22.2536,50.2647],[22.18219,50.17339]]],terms_text:"Powiat rzeszowski",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/PowiatrzeszowskiBuildings.png"},{id:"stalowowolski-buildings",name:"Powiat stalowowolski: Buildings",type:"wms",template:"https://stalowawola.geoportal2.pl/map/wms/wms.php?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=EBT,adresy,budynki,centroidy&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,19],polygon:[[[22.017,50.35811],[22.09292,50.44916],[22.06785,50.51434],[22.09722,50.54302],[22.16347,50.52686],[22.23795,50.5503],[22.26768,50.60465],[22.22757,50.6653],[22.16235,50.66969],[22.20843,50.75403],[22.16239,50.80039],[22.0546,50.82234],[21.94394,50.77639],[21.86228,50.80439],[21.83413,50.75035],[21.87465,50.70066],[21.84046,50.65749],[21.97582,50.53164],[21.84797,50.47196],[21.88045,50.3913],[22.017,50.35811]]],terms_text:"Powiat stalowowolski",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/PowiatrzeszowskiBuildings.png"},{id:"poznan-buildings",name:"Poznań: Buildings",type:"wms",template:"http://wms2.geopoz.poznan.pl:8080/geoserver/sip/wms?SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=budynki_ewidencyjne_sql&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2018-01-01T00:00:00.000Z",startDate:"2018-01-01T00:00:00.000Z",zoomExtent:[0,23],polygon:[[[16.72794,52.48838],[16.86925,52.48982],[16.86879,52.50779],[16.93948,52.50845],[16.93926,52.51743],[16.98639,52.51784],[16.98784,52.45494],[17.03491,52.45534],[17.0353,52.43736],[17.08235,52.43774],[17.0831,52.4018],[17.0596,52.40161],[17.06129,52.32075],[17.01438,52.32035],[17.01518,52.28441],[16.96829,52.28401],[16.96787,52.30198],[16.89752,52.30134],[16.89662,52.33728],[16.80273,52.33638],[16.80176,52.37232],[16.77828,52.3721],[16.77603,52.45294],[16.72897,52.45244],[16.72794,52.48838]]],terms_text:"Zarząd Geodezji i Katastru Miejskiego GEOPOZ"},{id:"poznan-ortofotomapa2014",name:"Poznań: Orthophotomap 2014 (aerial image)",type:"wms",template:"http://wms1.geopoz.poznan.pl:6080/arcgis/services/sip/ortofotomapa_2014/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortofotomapa_2014_image&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2014-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",zoomExtent:[0,23],polygon:[[[16.72794,52.48838],[16.86925,52.48982],[16.86879,52.50779],[16.93948,52.50845],[16.93926,52.51743],[16.98639,52.51784],[16.98784,52.45494],[17.03491,52.45534],[17.0353,52.43736],[17.08235,52.43774],[17.0831,52.4018],[17.0596,52.40161],[17.06129,52.32075],[17.01438,52.32035],[17.01518,52.28441],[16.96829,52.28401],[16.96787,52.30198],[16.89752,52.30134],[16.89662,52.33728],[16.80273,52.33638],[16.80176,52.37232],[16.77828,52.3721],[16.77603,52.45294],[16.72897,52.45244],[16.72794,52.48838]]],terms_text:"Zarząd Geodezji i Katastru Miejskiego GEOPOZ"},{id:"poznan-ortofotomapa2016",name:"Poznań: Orthophotomap 2016 (aerial image)",type:"wms",template:"http://wms1.geopoz.poznan.pl:6080/arcgis/services/sip/ortofotomapy/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortofotomapa_2016_image&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",zoomExtent:[0,23],polygon:[[[16.72794,52.48838],[16.86925,52.48982],[16.86879,52.50779],[16.93948,52.50845],[16.93926,52.51743],[16.98639,52.51784],[16.98784,52.45494],[17.03491,52.45534],[17.0353,52.43736],[17.08235,52.43774],[17.0831,52.4018],[17.0596,52.40161],[17.06129,52.32075],[17.01438,52.32035],[17.01518,52.28441],[16.96829,52.28401],[16.96787,52.30198],[16.89752,52.30134],[16.89662,52.33728],[16.80273,52.33638],[16.80176,52.37232],[16.77828,52.3721],[16.77603,52.45294],[16.72897,52.45244],[16.72794,52.48838]]],terms_text:"Zarząd Geodezji i Katastru Miejskiego GEOPOZ"},{id:"PrahaIPRlatestorthophoto",name:"Praha IPR latest orthophoto",type:"wms",template:"http://giswa1.mag.mepnet.cz/arcgis/services/MAP/letecke_snimky_posledni_snimkovani_cache/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[1,20],polygon:[[[14.81232,49.93089],[14.18755,49.87687],[14.12025,50.19882],[14.74502,50.25247],[14.81232,49.93089]]]},{id:"PrahaIPRlow-vegetationorthophoto",name:"Praha IPR low-vegetation orthophoto",type:"wms",template:"http://giswa1.mag.mepnet.cz/arcgis/services/MAP/mimovegetacni_snimkovani_cache/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[1,20],polygon:[[[14.30454,49.99538],[14.31604,49.94205],[14.35,49.94508],[14.35384,49.92726],[14.42385,49.93352],[14.42009,49.95097],[14.48865,49.95709],[14.48479,49.97501],[14.55386,49.98117],[14.55012,49.99852],[14.58455,50.00159],[14.5883,49.98424],[14.69168,49.99346],[14.67634,50.06453],[14.71279,50.06777],[14.70115,50.12158],[14.6647,50.11834],[14.661,50.13543],[14.62755,50.13246],[14.61965,50.16895],[14.58543,50.16591],[14.58163,50.18344],[14.40776,50.168],[14.41156,50.15045],[14.37765,50.14744],[14.3738,50.16524],[14.33893,50.16214],[14.34278,50.14434],[14.27368,50.1382],[14.27749,50.12058],[14.2088,50.11447],[14.21289,50.09557],[14.24656,50.09857],[14.25417,50.06336],[14.21987,50.0603],[14.2237,50.04259],[14.258,50.04565],[14.26953,49.99226],[14.30454,49.99538]]]},{id:"przemysl-buildings",name:"Przemyśl: Buildings",type:"wms",template:"http://przemysl.geoportal2.pl/map/wms/wms.php?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=adresy,budynki&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,19],polygon:[[[22.72268,49.76885],[22.73002,49.76787],[22.73097,49.77612],[22.72027,49.77662],[22.71787,49.78062],[22.73104,49.78553],[22.7244,49.79043],[22.73458,49.80441],[22.73167,49.81429],[22.7261,49.8165],[22.72762,49.82124],[22.74395,49.8187],[22.75952,49.80939],[22.79042,49.81462],[22.81169,49.80571],[22.79738,49.80146],[22.80384,49.79247],[22.83118,49.79664],[22.85752,49.78561],[22.84549,49.76746],[22.82485,49.77105],[22.82004,49.75674],[22.77358,49.74439],[22.73838,49.75895],[22.72205,49.74644],[22.71065,49.76288],[22.72268,49.76885]]],terms_text:"Miasto Przemyśl",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/PowiatrzeszowskiBuildings.png"},{id:"przemysl-aerial",name:"Przemyśl: Ortophotomap (aerial image)",type:"wms",template:"http://przemysl.geoportal2.pl/map/wms/wms.php?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortofotomapa&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,23],polygon:[[[22.72268,49.76885],[22.73002,49.76787],[22.73097,49.77612],[22.72027,49.77662],[22.71787,49.78062],[22.73104,49.78553],[22.7244,49.79043],[22.73458,49.80441],[22.73167,49.81429],[22.7261,49.8165],[22.72762,49.82124],[22.74395,49.8187],[22.75952,49.80939],[22.79042,49.81462],[22.81169,49.80571],[22.79738,49.80146],[22.80384,49.79247],[22.83118,49.79664],[22.85752,49.78561],[22.84549,49.76746],[22.82485,49.77105],[22.82004,49.75674],[22.77358,49.74439],[22.73838,49.75895],[22.72205,49.74644],[22.71065,49.76288],[22.72268,49.76885]]],terms_text:"Miasto Przemyśl",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/PowiatrzeszowskiBuildings.png"},{id:"RABA-KGZ-3000",name:"RABA-KGZ: Slovenia built-up areas",type:"tms",template:"https://wms.openstreetmap.de/tms/RABA3000/{zoom}/{x}/{y}.png",zoomExtent:[8,19],polygon:[[[15.17101,45.41273],[15.06731,45.4781],[14.98353,45.48726],[14.93027,45.51869],[14.91295,45.46869],[14.81398,45.45019],[14.77755,45.49724],[14.71885,45.52386],[14.68383,45.51924],[14.68367,45.57107],[14.58902,45.61966],[14.59477,45.65727],[14.51653,45.5974],[14.49636,45.52968],[14.32388,45.46048],[14.28251,45.47949],[14.26083,45.47352],[14.2367,45.49569],[14.21022,45.45962],[14.1328,45.46542],[14.06694,45.47615],[14.01187,45.50769],[13.98752,45.49945],[14.00668,45.4739],[13.99154,45.44854],[13.91789,45.44329],[13.88867,45.416],[13.81063,45.42531],[13.7856,45.45577],[13.67553,45.43241],[13.38,45.5666],[13.63822,45.64153],[13.72158,45.60472],[13.83759,45.59226],[13.89962,45.63295],[13.82754,45.67917],[13.82429,45.70266],[13.78961,45.73525],[13.66355,45.79008],[13.62279,45.78613],[13.58835,45.80154],[13.56531,45.85522],[13.62633,45.93894],[13.62975,45.97662],[13.59233,45.97929],[13.57124,45.9591],[13.52998,45.95627],[13.46729,46.00147],[13.49765,46.03741],[13.4896,46.06574],[13.58839,46.11268],[13.63712,46.14524],[13.65358,46.17505],[13.57147,46.17434],[13.54859,46.19982],[13.48189,46.21479],[13.42003,46.19662],[13.40026,46.21037],[13.40304,46.23284],[13.36653,46.30266],[13.43369,46.33243],[13.43247,46.36779],[13.56263,46.40895],[13.59357,46.44846],[13.68393,46.44947],[13.71321,46.53296],[13.79725,46.5164],[13.91305,46.53108],[14.00849,46.49169],[14.09406,46.49538],[14.12664,46.4852],[14.16569,46.44341],[14.28242,46.45347],[14.3259,46.44111],[14.43178,46.4568],[14.45113,46.43239],[14.52618,46.43623],[14.56677,46.38549],[14.58993,46.44479],[14.65658,46.45447],[14.71191,46.50954],[14.80818,46.51778],[14.81442,46.55093],[14.86094,46.61239],[14.9102,46.61569],[14.95398,46.64257],[14.98376,46.61868],[15.02973,46.65796],[15.10645,46.66965],[15.23727,46.64973],[15.41364,46.66553],[15.46237,46.64732],[15.47411,46.6226],[15.53427,46.64346],[15.53636,46.6761],[15.59201,46.69952],[15.62405,46.69039],[15.65624,46.71643],[15.767,46.70899],[15.83801,46.73237],[15.91476,46.71958],[16.02919,46.67033],[16.02955,46.68778],[15.99495,46.71178],[15.97505,46.74967],[15.98671,46.84189],[16.0553,46.85049],[16.11022,46.87912],[16.15425,46.86525],[16.23302,46.88667],[16.29431,46.8824],[16.34649,46.85476],[16.36058,46.8278],[16.34711,46.79707],[16.32245,46.79068],[16.33977,46.7799],[16.33186,46.75896],[16.38893,46.70785],[16.4383,46.69655],[16.42822,46.65301],[16.40159,46.6439],[16.51477,46.57299],[16.54136,46.53627],[16.5416,46.50887],[16.611,46.48393],[16.61889,46.46203],[16.52219,46.45842],[16.47451,46.50108],[16.36776,46.53371],[16.2582,46.489],[16.28533,46.42441],[16.3168,46.40141],[16.30574,46.36921],[16.18689,46.36804],[16.14548,46.39515],[16.06959,46.38154],[16.08614,46.34087],[16.04058,46.32708],[16.01819,46.29964],[15.80777,46.25091],[15.79649,46.21296],[15.77128,46.19937],[15.67996,46.21707],[15.65737,46.20838],[15.65639,46.18456],[15.62037,46.16163],[15.61899,46.11595],[15.63483,46.09529],[15.71869,46.06873],[15.74241,46.04578],[15.71612,45.99489],[15.71645,45.9178],[15.69237,45.90013],[15.69375,45.87111],[15.71776,45.8416],[15.6441,45.81058],[15.57467,45.83999],[15.52333,45.81155],[15.49115,45.82041],[15.47514,45.78666],[15.40343,45.78216],[15.28683,45.73391],[15.27435,45.72408],[15.29763,45.70782],[15.36329,45.72191],[15.41517,45.65443],[15.39705,45.62929],[15.31501,45.62356],[15.31503,45.60696],[15.29266,45.60163],[15.30852,45.58653],[15.31145,45.5423],[15.39496,45.48325],[15.34824,45.44665],[15.27515,45.45599],[15.22848,45.41683],[15.17101,45.41273]]],terms_url:"https://wiki.openstreetmap.org/wiki/Slovenia_Landcover_Import_-_RABA-KGZ",terms_text:"Copyright ©2019 Ministrstvo za kmetijstvo, gozdarstvo in prehrano (mkgp.gov.si). Some rights reserved.",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/si/RABA-KGZSloveniafarmlanduse.png"},{id:"RABA-KGZ",name:"RABA-KGZ: Slovenia farmland use",type:"tms",template:"https://wms.openstreetmap.de/tms/RABA/{zoom}/{x}/{y}.png",zoomExtent:[8,19],polygon:[[[15.17101,45.41273],[15.06731,45.4781],[14.98353,45.48726],[14.93027,45.51869],[14.91295,45.46869],[14.81398,45.45019],[14.77755,45.49724],[14.71885,45.52386],[14.68383,45.51924],[14.68367,45.57107],[14.58902,45.61966],[14.59477,45.65727],[14.51653,45.5974],[14.49636,45.52968],[14.32388,45.46048],[14.28251,45.47949],[14.26083,45.47352],[14.2367,45.49569],[14.21022,45.45962],[14.1328,45.46542],[14.06694,45.47615],[14.01187,45.50769],[13.98752,45.49945],[14.00668,45.4739],[13.99154,45.44854],[13.91789,45.44329],[13.88867,45.416],[13.81063,45.42531],[13.7856,45.45577],[13.67553,45.43241],[13.38,45.5666],[13.63822,45.64153],[13.72158,45.60472],[13.83759,45.59226],[13.89962,45.63295],[13.82754,45.67917],[13.82429,45.70266],[13.78961,45.73525],[13.66355,45.79008],[13.62279,45.78613],[13.58835,45.80154],[13.56531,45.85522],[13.62633,45.93894],[13.62975,45.97662],[13.59233,45.97929],[13.57124,45.9591],[13.52998,45.95627],[13.46729,46.00147],[13.49765,46.03741],[13.4896,46.06574],[13.58839,46.11268],[13.63712,46.14524],[13.65358,46.17505],[13.57147,46.17434],[13.54859,46.19982],[13.48189,46.21479],[13.42003,46.19662],[13.40026,46.21037],[13.40304,46.23284],[13.36653,46.30266],[13.43369,46.33243],[13.43247,46.36779],[13.56263,46.40895],[13.59357,46.44846],[13.68393,46.44947],[13.71321,46.53296],[13.79725,46.5164],[13.91305,46.53108],[14.00849,46.49169],[14.09406,46.49538],[14.12664,46.4852],[14.16569,46.44341],[14.28242,46.45347],[14.3259,46.44111],[14.43178,46.4568],[14.45113,46.43239],[14.52618,46.43623],[14.56677,46.38549],[14.58993,46.44479],[14.65658,46.45447],[14.71191,46.50954],[14.80818,46.51778],[14.81442,46.55093],[14.86094,46.61239],[14.9102,46.61569],[14.95398,46.64257],[14.98376,46.61868],[15.02973,46.65796],[15.10645,46.66965],[15.23727,46.64973],[15.41364,46.66553],[15.46237,46.64732],[15.47411,46.6226],[15.53427,46.64346],[15.53636,46.6761],[15.59201,46.69952],[15.62405,46.69039],[15.65624,46.71643],[15.767,46.70899],[15.83801,46.73237],[15.91476,46.71958],[16.02919,46.67033],[16.02955,46.68778],[15.99495,46.71178],[15.97505,46.74967],[15.98671,46.84189],[16.0553,46.85049],[16.11022,46.87912],[16.15425,46.86525],[16.23302,46.88667],[16.29431,46.8824],[16.34649,46.85476],[16.36058,46.8278],[16.34711,46.79707],[16.32245,46.79068],[16.33977,46.7799],[16.33186,46.75896],[16.38893,46.70785],[16.4383,46.69655],[16.42822,46.65301],[16.40159,46.6439],[16.51477,46.57299],[16.54136,46.53627],[16.5416,46.50887],[16.611,46.48393],[16.61889,46.46203],[16.52219,46.45842],[16.47451,46.50108],[16.36776,46.53371],[16.2582,46.489],[16.28533,46.42441],[16.3168,46.40141],[16.30574,46.36921],[16.18689,46.36804],[16.14548,46.39515],[16.06959,46.38154],[16.08614,46.34087],[16.04058,46.32708],[16.01819,46.29964],[15.80777,46.25091],[15.79649,46.21296],[15.77128,46.19937],[15.67996,46.21707],[15.65737,46.20838],[15.65639,46.18456],[15.62037,46.16163],[15.61899,46.11595],[15.63483,46.09529],[15.71869,46.06873],[15.74241,46.04578],[15.71612,45.99489],[15.71645,45.9178],[15.69237,45.90013],[15.69375,45.87111],[15.71776,45.8416],[15.6441,45.81058],[15.57467,45.83999],[15.52333,45.81155],[15.49115,45.82041],[15.47514,45.78666],[15.40343,45.78216],[15.28683,45.73391],[15.27435,45.72408],[15.29763,45.70782],[15.36329,45.72191],[15.41517,45.65443],[15.39705,45.62929],[15.31501,45.62356],[15.31503,45.60696],[15.29266,45.60163],[15.30852,45.58653],[15.31145,45.5423],[15.39496,45.48325],[15.34824,45.44665],[15.27515,45.45599],[15.22848,45.41683],[15.17101,45.41273]]],terms_url:"https://wiki.openstreetmap.org/wiki/Slovenia_Landcover_Import_-_RABA-KGZ",terms_text:"Copyright ©2019 Ministrstvo za kmetijstvo, gozdarstvo in prehrano (mkgp.gov.si). Some rights reserved.",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/si/RABA-KGZSloveniafarmlanduse.png"},{id:"riksantikvaren-kulturminner",name:"Riksantikvaren Heritage Sites overlay",type:"wms",template:"https://kart.ra.no/arcgis/services/Distribusjon/Kulturminner/MapServer/WmsServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=3,6&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[13,22],polygon:[[[-10.95725,71.60964],[-6.16765,71.62095],[-6.13756,70.30991],[-10.92717,70.29784],[-10.95725,71.60964]],[[16.81947,74.9482],[21.25771,74.94213],[21.23712,73.8918],[16.79889,73.89828],[16.81947,74.9482]],[[4.04288,79.93593],[20.65421,81.54417],[36.6503,80.40108],[26.76265,75.8129],[13.88667,75.79135],[4.04288,79.93593]],[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://www.riksantikvaren.no/Veiledning/Data-og-tjenester/Karttjenester",terms_text:"© Riksantikvaren",description:"Archeological and architectural monuments/sites and cultural environments protected by law (''enkeltminner'') from the Norwegian Directorate for Cultural Heritage",icon:"https://www.riksantikvaren.no/extension/riksantikvaren/design/internetsite/images/logo_na.png",overlay:true},{id:"rio2013",name:"Rio Mosaic 2013",type:"wms",template:"http://geo.rio.rj.gov.br/ArcGIS/services/Imagens/Mosaico_2013/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=1&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",polygon:[[[-43.17709,-22.96971],[-43.14586,-22.96959],[-43.14605,-22.92719],[-43.15625,-22.92731],[-43.15647,-22.87557],[-43.17739,-22.87494],[-43.17742,-22.88553],[-43.19804,-22.88571],[-43.19804,-22.85429],[-43.21875,-22.85444],[-43.21901,-22.83365],[-43.22937,-22.83365],[-43.22934,-22.82371],[-43.19869,-22.82353],[-43.19856,-22.83413],[-43.18826,-22.83398],[-43.18804,-22.84448],[-43.16667,-22.84442],[-43.16683,-22.83404],[-43.15638,-22.83407],[-43.15654,-22.81336],[-43.10436,-22.81306],[-43.10446,-22.80288],[-43.09387,-22.80276],[-43.0941,-22.73998],[-43.13599,-22.73992],[-43.13569,-22.75067],[-43.12573,-22.75055],[-43.12556,-22.77118],[-43.14595,-22.77109],[-43.14612,-22.76055],[-43.17771,-22.76088],[-43.17758,-22.77115],[-43.18807,-22.7713],[-43.18807,-22.78166],[-43.25067,-22.78163],[-43.25057,-22.79198],[-43.28054,-22.79282],[-43.30343,-22.79312],[-43.33353,-22.79297],[-43.33347,-22.80258],[-43.38574,-22.8024],[-43.38542,-22.81255],[-43.41691,-22.81285],[-43.41675,-22.82341],[-43.42717,-22.82335],[-43.4274,-22.83374],[-43.45844,-22.83362],[-43.45864,-22.81276],[-43.48984,-22.813],[-43.48994,-22.7965],[-43.50208,-22.79746],[-43.51543,-22.79737],[-43.52078,-22.79591],[-43.54169,-22.79603],[-43.54179,-22.80234],[-43.54653,-22.80246],[-43.54666,-22.81189],[-43.55251,-22.81279],[-43.56991,-22.81294],[-43.56998,-22.8197],[-43.57361,-22.82326],[-43.58348,-22.82329],[-43.58352,-22.83347],[-43.59391,-22.83374],[-43.59394,-22.85468],[-43.66099,-22.85459],[-43.66099,-22.85983],[-43.70852,-22.86019],[-43.70836,-22.86503],[-43.72206,-22.86488],[-43.72213,-22.86847],[-43.75015,-22.86859],[-43.75009,-22.8753],[-43.76038,-22.87527],[-43.75992,-22.8785],[-43.75976,-22.88457],[-43.76132,-22.88586],[-43.78129,-22.8858],[-43.78126,-22.89591],[-43.80213,-22.89621],[-43.80135,-22.91137],[-43.80119,-22.92758],[-43.79213,-22.92776],[-43.7922,-22.93822],[-43.78191,-22.93799],[-43.78184,-22.94869],[-43.75067,-22.94845],[-43.7506,-22.95909],[-43.72986,-22.95886],[-43.72966,-22.97984],[-43.70904,-22.97966],[-43.70891,-22.99033],[-43.69846,-22.99006],[-43.69836,-23.00065],[-43.66735,-23.00044],[-43.66726,-23.01117],[-43.63125,-23.00937],[-43.63131,-23.02079],[-43.63586,-23.02091],[-43.63602,-23.03164],[-43.67771,-23.03164],[-43.67765,-23.04233],[-43.67086,-23.0423],[-43.67109,-23.0631],[-43.64599,-23.06304],[-43.64605,-23.05276],[-43.60475,-23.05255],[-43.60452,-23.06307],[-43.58381,-23.06289],[-43.58368,-23.08404],[-43.54186,-23.08383],[-43.54195,-23.06319],[-43.52147,-23.06301],[-43.5213,-23.07352],[-43.50043,-23.07337],[-43.50043,-23.04218],[-43.45877,-23.04221],[-43.4587,-23.03194],[-43.43782,-23.03182],[-43.43776,-23.02154],[-43.3235,-23.02121],[-43.3233,-23.04212],[-43.31291,-23.04195],[-43.31275,-23.05267],[-43.30239,-23.05258],[-43.30236,-23.04227],[-43.29194,-23.04215],[-43.29197,-23.03194],[-43.27109,-23.03182],[-43.27119,-23.01093],[-43.26061,-23.01087],[-43.26067,-23.00059],[-43.25057,-23.00047],[-43.25054,-23.01126],[-43.23989,-23.01102],[-43.23986,-23.00062],[-43.21908,-23.0005],[-43.21904,-22.99021],[-43.20901,-22.99009],[-43.20862,-23.08389],[-43.18768,-23.08377],[-43.18761,-23.07334],[-43.13582,-23.07337],[-43.13589,-23.05249],[-43.17732,-23.05255],[-43.17709,-22.96971]]],terms_url:"https://pgeo3.rio.rj.gov.br/arcgis/rest/services/Imagens/Mosaico_2013_UTM/MapServer",terms_text:"Instituto Pereira Passos - Prefeitura da Cidade do Rio de Janeiro."},{id:"rio2015",name:"Rio Mosaic 2015",type:"wms",template:"https://pgeo3.rio.rj.gov.br/arcgis/services/Imagens/Mosaico_2015_UTM/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[-42.30363,-22.43698],[-44.10842,-22.06579],[-44.5313,-23.7863],[-42.70469,-24.16178],[-42.30363,-22.43698]]],terms_url:"https://pgeo3.rio.rj.gov.br/arcgis/rest/services/Imagens/Mosaico_2015_UTM/MapServer",terms_text:"Instituto Pereira Passos - Prefeitura da Cidade do Rio de Janeiro."},{id:"route500",name:"Route 500",type:"tms",template:"https://{switch:a,b,c}.tile.openstreetmap.fr/route500/{zoom}/{x}/{y}.png",zoomExtent:[12,20],polygon:[[[-2.7,43.9],[-6.3,48.98],[-2.25,50.09],[1.31,50.88],[2.35816,51.32937],[2.5488,51.09759],[2.57048,51.07409],[2.58741,51.01763],[2.59845,51.0051],[2.61558,50.99749],[2.63986,50.95766],[2.64225,50.94578],[2.62452,50.9256],[2.61962,50.91067],[2.62396,50.86071],[2.62781,50.85054],[2.63786,50.83696],[2.6511,50.82906],[2.73267,50.81738],[2.79995,50.73795],[2.81655,50.73092],[2.85265,50.73335],[2.89072,50.7162],[2.90492,50.71536],[2.9161,50.72418],[2.93508,50.75592],[3.00718,50.78377],[3.08218,50.78749],[3.09244,50.79092],[3.11412,50.80566],[3.14877,50.80195],[3.2154,50.73111],[3.22149,50.7267],[3.27051,50.70375],[3.27545,50.67757],[3.26576,50.6604],[3.26588,50.64054],[3.28922,50.60028],[3.29219,50.55037],[3.3056,50.53267],[3.37551,50.50839],[3.3898,50.50884],[3.4748,50.54445],[3.52173,50.53459],[3.53266,50.51873],[3.54779,50.51012],[3.61523,50.50558],[3.67378,50.45642],[3.68415,50.35277],[3.6901,50.34044],[3.70258,50.33482],[3.71576,50.33854],[3.74935,50.36279],[3.84109,50.36558],[3.90189,50.3436],[3.91317,50.34291],[4.02672,50.36904],[4.13761,50.29984],[4.14388,50.29727],[4.21444,50.28167],[4.22904,50.26664],[4.23078,50.25233],[4.17084,50.18579],[4.16601,50.16888],[4.1764,50.1547],[4.21195,50.13602],[4.24074,50.07102],[4.23193,50.05551],[4.18164,50.03436],[4.17177,50.02537],[4.16976,50.01217],[4.1765,50.00065],[4.20633,49.97546],[4.22164,49.97089],[4.30877,49.98145],[4.44542,49.9523],[4.45469,49.95251],[4.6581,50.00609],[4.66936,50.01392],[4.67293,50.02716],[4.66924,50.06972],[4.69517,50.10472],[4.83123,50.17941],[4.8815,50.16436],[4.90479,50.14451],[4.90426,50.12639],[4.88076,50.0815],[4.86277,50.0745],[4.85104,50.06216],[4.84331,50.03884],[4.84331,50.03883],[4.8433,50.03881],[4.82678,49.989],[4.82662,49.97692],[4.83343,49.96696],[4.89654,49.91753],[4.89755,49.89424],[4.87913,49.86942],[4.87625,49.85111],[4.88924,49.81266],[4.89769,49.80204],[4.91098,49.79926],[4.99534,49.81116],[5.01867,49.79272],[5.02686,49.78886],[5.09944,49.77323],[5.13458,49.73462],[5.1412,49.72984],[5.18761,49.70906],[5.19602,49.70732],[5.28157,49.70836],[5.33363,49.67308],[5.344,49.65049],[5.3544,49.64041],[5.43141,49.60791],[5.48205,49.52815],[5.49294,49.51979],[5.50666,49.52042],[5.55401,49.54025],[5.59311,49.53424],[5.6076,49.53761],[5.641,49.56095],[5.70676,49.55267],[5.71578,49.55361],[5.77526,49.57414],[5.8399,49.55321],[5.86126,49.52038],[5.876,49.5114],[5.97516,49.50129],[5.99801,49.47317],[6.01627,49.46597],[6.08635,49.47562],[6.09319,49.47787],[6.17397,49.52187],[6.24643,49.52511],[6.334,49.48235],[6.34423,49.48037],[6.43515,49.487],[6.5451,49.44384],[6.60639,49.37868],[6.60497,49.33739],[6.61627,49.31869],[6.67013,49.29269],[6.72996,49.22917],[6.74328,49.19086],[6.76026,49.17752],[6.80904,49.17284],[6.82473,49.17826],[6.83093,49.19366],[6.82982,49.21802],[6.85119,49.23136],[6.88453,49.2239],[6.89322,49.22389],[6.93753,49.23369],[7.04055,49.19794],[7.0463,49.17503],[7.05478,49.16313],[7.06908,49.16018],[7.10494,49.16634],[7.14315,49.14159],[7.1535,49.13839],[7.28683,49.13488],[7.29893,49.13856],[7.36095,49.18259],[7.45012,49.19517],[7.50113,49.17672],[7.54379,49.10572],[7.5579,49.09626],[7.6296,49.08527],[7.64722,49.06722],[7.6612,49.06119],[7.75401,49.05963],[7.76073,49.06067],[7.80291,49.07489],[7.85525,49.05329],[7.8673,49.05227],[7.93826,49.06832],[8.08069,49.00688],[8.2225,48.98787],[8.23704,48.97683],[8.23589,48.95817],[8.20888,48.94863],[8.20089,48.94339],[8.15824,48.89753],[8.10087,48.7993],[7.99071,48.74478],[7.98534,48.7409],[7.90422,48.65865],[7.85605,48.63606],[7.8484,48.62977],[7.81842,48.58883],[7.81456,48.57704],[7.81449,48.50968],[7.78547,48.48337],[7.78055,48.47652],[7.74506,48.39484],[7.74357,48.38427],[7.75159,48.32322],[7.71085,48.29841],[7.70241,48.28803],[7.67661,48.21555],[7.59605,48.11698],[7.59165,48.10648],[7.58522,48.04694],[7.59127,48.03035],[7.62437,47.99865],[7.63205,47.97081],[7.57554,47.87436],[7.5728,47.86435],[7.57267,47.83631],[7.54581,47.78793],[7.54418,47.77232],[7.55758,47.72899],[7.53526,47.6989],[7.53136,47.68564],[7.537,47.67302],[7.60016,47.60822],[7.58967,47.56755],[7.55424,47.55128],[7.54511,47.54283],[7.51256,47.48439],[7.38747,47.42111],[7.32653,47.4273],[7.24435,47.40939],[7.16708,47.4335],[7.15212,47.47612],[7.14279,47.48707],[7.12853,47.48893],[7.0801,47.47718],[7.03557,47.48695],[7.02102,47.48458],[7.01205,47.47287],[7.003,47.44095],[6.9551,47.40808],[6.94716,47.39698],[6.94818,47.38337],[6.95769,47.37359],[6.97126,47.37218],[7.018,47.38386],[7.05623,47.37035],[7.07007,47.35005],[7.05958,47.32257],[6.97424,47.27856],[6.96347,47.26233],[6.96134,47.23479],[6.89443,47.19393],[6.88913,47.18922],[6.85545,47.14636],[6.76907,47.10751],[6.76011,47.09953],[6.72561,47.0418],[6.62355,46.9811],[6.4812,46.9445],[6.46892,46.93522],[6.46686,46.91997],[6.47548,46.88771],[6.4535,46.8239],[6.45644,46.80534],[6.46722,46.79104],[6.46098,46.76887],[6.15817,46.59343],[6.14872,46.58069],[6.15152,46.56508],[6.16549,46.54399],[6.15811,46.52456],[6.10174,46.46979],[6.09572,46.45418],[6.09704,46.43317],[6.10829,46.41643],[6.16622,46.38839],[6.17817,46.36922],[6.13748,46.31297],[6.13371,46.30227],[6.13038,46.23737],[6.1103,46.22344],[6.08865,46.23081],[6.07717,46.23123],[6.01857,46.21601],[6.00681,46.20752],[6.00388,46.19332],[6.00787,46.16977],[6.01783,46.15564],[6.03509,46.15456],[6.05564,46.16288],[6.12468,46.15415],[6.13778,46.15702],[6.24026,46.22094],[6.24906,46.23299],[6.24707,46.24777],[6.21148,46.31057],[6.21219,46.32485],[6.23946,46.36705],[6.31648,46.41557],[6.41083,46.42495],[6.41748,46.42682],[6.50498,46.46871],[6.63047,46.47435],[6.74665,46.45695],[6.82244,46.42925],[6.81832,46.38181],[6.80484,46.36179],[6.80189,46.34639],[6.81095,46.33359],[6.86491,46.30038],[6.87504,46.28007],[6.86092,46.2439],[6.82698,46.21188],[6.82075,46.19862],[6.81863,46.16592],[6.82259,46.15261],[6.83427,46.14509],[6.90382,46.12971],[6.90491,46.09595],[6.90932,46.08406],[6.92001,46.07721],[6.94898,46.0699],[7.01556,46.00883],[7.05191,45.93066],[7.04533,45.92217],[7.04497,45.92064],[7.04394,45.92036],[6.99582,45.85822],[6.94097,45.83551],[6.84376,45.82387],[6.83102,45.81711],[6.82614,45.80353],[6.82787,45.73217],[6.83174,45.72082],[6.8414,45.71373],[6.90729,45.69124],[6.92419,45.66935],[6.94247,45.66172],[6.97131,45.66528],[7.00597,45.64945],[7.01151,45.63652],[6.9978,45.60877],[6.99643,45.59465],[7.0158,45.52354],[7.02774,45.5102],[7.1072,45.47877],[7.1228,45.44924],[7.13304,45.44001],[7.1856,45.41894],[7.19515,45.40409],[7.17075,45.35069],[7.14232,45.32298],[7.13649,45.30576],[7.14458,45.25048],[7.08417,45.20279],[6.99279,45.19823],[6.98106,45.19368],[6.90009,45.12689],[6.85843,45.11699],[6.78283,45.14228],[6.77056,45.14242],[6.67751,45.11356],[6.6653,45.10289],[6.66501,45.08667],[6.68237,45.04558],[6.69602,45.03395],[6.75744,45.01884],[6.78375,44.9146],[6.7942,44.90161],[6.86698,44.86519],[6.8798,44.86346],[6.93633,44.87461],[7.01795,44.84402],[7.03453,44.82282],[7.03711,44.75009],[7.0496,44.73226],[7.07224,44.72311],[7.08651,44.6968],[7.08666,44.68085],[7.07671,44.67134],[6.99007,44.67203],[6.97413,44.66431],[6.97056,44.64696],[6.97819,44.61784],[6.94659,44.57124],[6.88235,44.53479],[6.87233,44.5195],[6.87892,44.50245],[6.95894,44.43129],[6.95872,44.42908],[6.92167,44.41436],[6.91223,44.40659],[6.90907,44.39477],[6.90972,44.38195],[6.91637,44.36804],[6.99909,44.29414],[7.01181,44.256],[7.01983,44.24558],[7.03259,44.2424],[7.07312,44.2461],[7.1651,44.22112],[7.24533,44.18544],[7.26053,44.16682],[7.27537,44.15947],[7.33878,44.1574],[7.36278,44.13834],[7.37776,44.13416],[7.56283,44.15792],[7.5642,44.15836],[7.56478,44.15817],[7.60548,44.1634],[7.6162,44.16827],[7.63989,44.18928],[7.68608,44.1861],[7.69422,44.17795],[7.68937,44.13869],[7.69445,44.12276],[7.72786,44.08615],[7.72403,44.05704],[7.68603,44.02371],[7.68077,44.0164],[7.66016,43.9672],[7.59624,43.94466],[7.58419,43.93287],[7.56858,43.89159],[7.5271,43.87434],[7.51649,43.86397],[7.51594,43.84915],[7.53622,43.79234],[9.8,43.1],[9.63227,41.43244],[9.36968,41.35052],[9.27311,41.29196],[8.94186,41.27688],[5.8,41.64],[3.17358,42.41768],[3.16081,42.42757],[3.0944,42.41457],[3.03402,42.45331],[3.02214,42.45645],[2.87822,42.4487],[2.87019,42.44653],[2.78424,42.40256],[2.7413,42.41128],[2.72928,42.40998],[2.69331,42.39417],[2.68378,42.3854],[2.68162,42.37263],[2.68585,42.34679],[2.66719,42.33008],[2.58106,42.34418],[2.56777,42.34173],[2.5338,42.32197],[2.47795,42.32986],[2.41933,42.37658],[2.41222,42.38021],[2.26719,42.42055],[2.25973,42.42117],[2.20694,42.41558],[2.20653,42.41526],[2.20526,42.41541],[2.16028,42.41065],[2.14881,42.40545],[2.09393,42.35474],[2.00861,42.33818],[1.965,42.36473],[1.93076,42.42442],[1.92089,42.43302],[1.88467,42.44761],[1.88459,42.44762],[1.88444,42.4477],[1.82774,42.47056],[1.72567,42.48452],[1.71561,42.50125],[1.7272,42.56103],[1.72479,42.57499],[1.71011,42.59992],[1.69377,42.60975],[1.60283,42.61382],[1.56069,42.6392],[1.54636,42.64166],[1.50444,42.6331],[1.4921,42.62502],[1.47238,42.59703],[1.43792,42.59264],[1.41936,42.60643],[1.38032,42.67415],[1.37335,42.68127],[1.33313,42.70563],[1.32364,42.7085],[1.23221,42.71248],[1.16554,42.69928],[1.08546,42.76635],[1.07564,42.77079],[0.95937,42.78852],[0.95073,42.78794],[0.92265,42.7797],[0.84606,42.8157],[0.71511,42.8464],[0.70017,42.84402],[0.69117,42.83186],[0.67409,42.76479],[0.67474,42.75286],[0.69192,42.70684],[0.669,42.67901],[0.43024,42.67863],[0.3715,42.70308],[0.35954,42.70415],[0.34912,42.69817],[0.32567,42.67274],[0.29571,42.66388],[0.24594,42.70175],[0.23972,42.70494],[0.18967,42.72039],[0.17919,42.72075],[-0.01993,42.67389],[-0.06726,42.6848],[-0.16949,42.77157],[-0.29987,42.82697],[-0.31683,42.82635],[-0.39208,42.78766],[-0.44354,42.78453],[-0.48842,42.80255],[-0.50868,42.79935],[-0.54499,42.76906],[-0.56721,42.76937],[-0.67446,42.86392],[-0.68094,42.86775],[-0.73372,42.88666],[-0.7476,42.93879],[-0.75711,42.95107],[-0.77253,42.95284],[-0.82114,42.93865],[-0.94508,42.94192],[-1.02313,42.98206],[-1.10852,43.00409],[-1.1156,43.00461],[-1.14775,43.00124],[-1.15845,43.01452],[-1.16736,43.02083],[-1.21622,43.0381],[-1.22612,43.03898],[-1.26236,43.03303],[-1.30643,43.05531],[-1.31992,43.05696],[-1.33135,43.0496],[-1.3542,43.0197],[-1.43868,43.03371],[-1.4775,43.06889],[-1.48311,43.08561],[-1.47641,43.10248],[-1.43479,43.13087],[-1.42732,43.1404],[-1.39411,43.22935],[-1.39531,43.24596],[-1.40868,43.25591],[-1.52629,43.28099],[-1.54626,43.2737],[-1.57149,43.2412],[-1.61053,43.24223],[-1.65,43.29323],[-1.66953,43.30065],[-1.73359,43.28856],[-1.75606,43.31966],[-1.76297,43.32565],[-1.79156,43.34067],[-1.80099,43.37017],[-1.78509,43.39037],[-1.7835,43.39686],[-2.7,43.9]]],terms_url:"https://wiki.openstreetmap.org/wiki/FR:Servers/tile.openstreetmap.fr#Route500.E2.84.A2.C2.A9.C2.AE",terms_text:"Tiles © cquest@Openstreetmap France, data © IGN, LO/OL",description:"Routes du réseau classé (autoroutes, nationales, départementales)",overlay:true},{id:"Ruda_Slaska-aerial_image",name:"Ruda Śląska: Orthophotomap (aerial image)",type:"wms",template:"https://rudaslaska.geoportal2.pl/map/wmsorto/wms.php?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortofotomapa&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,23],polygon:[[[18.84294,50.32508],[18.84008,50.33091],[18.85132,50.33437],[18.86262,50.3305],[18.88693,50.333],[18.89493,50.3319],[18.90045,50.32562],[18.89713,50.31146],[18.89312,50.31149],[18.89114,50.30778],[18.8972,50.2999],[18.89073,50.29586],[18.90211,50.29204],[18.90706,50.28637],[18.90853,50.27823],[18.93583,50.27379],[18.94106,50.25859],[18.93848,50.25317],[18.95086,50.24267],[18.96531,50.24084],[18.94611,50.22907],[18.89932,50.22516],[18.90251,50.21749],[18.89075,50.21557],[18.89292,50.20913],[18.86474,50.20512],[18.85673,50.22078],[18.85258,50.22331],[18.84619,50.21761],[18.83341,50.21715],[18.83533,50.22307],[18.83051,50.23099],[18.82411,50.23055],[18.81641,50.23709],[18.81619,50.24125],[18.80635,50.24596],[18.80344,50.24293],[18.78831,50.24456],[18.79552,50.2768],[18.81681,50.27732],[18.81919,50.28794],[18.83893,50.29795],[18.83849,50.3004],[18.82699,50.30342],[18.82691,50.32073],[18.83007,50.32371],[18.84294,50.32508]]],terms_text:"Urząd Miasta Ruda Śląska"},{id:"Rzeszow-buildings",name:"Rzeszów: Buildings",type:"wms",template:"http://wms.erzeszow.pl/?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=komunikacja,budynki,adresy&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,19],polygon:[[[22.09538,50.08157],[22.0947,50.05584],[22.08892,50.05589],[22.08874,50.03671],[22.09505,50.03682],[22.09435,49.98723],[22.0609,49.98754],[22.0605,49.96525],[22.04757,49.96509],[22.04724,49.95792],[22.03139,49.95845],[22.0312,49.9574],[22.0014,49.95833],[22.00019,49.9375],[22.0014,49.93746],[22.00029,49.92047],[21.96799,49.92088],[21.969,49.93683],[21.95393,49.93706],[21.95441,49.94373],[21.94192,49.94378],[21.94253,49.96646],[21.93676,49.9665],[21.93776,49.97828],[21.92898,49.97858],[21.92951,49.98858],[21.91606,49.9888],[21.9165,50.01192],[21.90572,50.01195],[21.90653,50.04136],[21.87425,50.04183],[21.87546,50.06072],[21.90465,50.06083],[21.90672,50.0835],[22.09538,50.08157]]],terms_text:"Urząd Miasta Rzeszowa"},{id:"Rzeszow-aerial_image",name:"Rzeszów: Orthophotomap (aerial image)",type:"wms",template:"http://wms.erzeszow.pl/?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=rastry&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,23],polygon:[[[22.09538,50.08157],[22.0947,50.05584],[22.08892,50.05589],[22.08874,50.03671],[22.09505,50.03682],[22.09435,49.98723],[22.0609,49.98754],[22.0605,49.96525],[22.04757,49.96509],[22.04724,49.95792],[22.03139,49.95845],[22.0312,49.9574],[22.0014,49.95833],[22.00019,49.9375],[22.0014,49.93746],[22.00029,49.92047],[21.96799,49.92088],[21.969,49.93683],[21.95393,49.93706],[21.95441,49.94373],[21.94192,49.94378],[21.94253,49.96646],[21.93676,49.9665],[21.93776,49.97828],[21.92898,49.97858],[21.92951,49.98858],[21.91606,49.9888],[21.9165,50.01192],[21.90572,50.01195],[21.90653,50.04136],[21.87425,50.04183],[21.87546,50.06072],[21.90465,50.06083],[21.90672,50.0835],[22.09538,50.08157]]],terms_text:"Urząd Miasta Rzeszowa"},{id:"SanJuanMetroAreaUSACEOrthophotos",name:"San Juan Metro Area: 2013 USACE Orthophotos",type:"tms",template:"http://imagery-pr-usace-2013.s3-website-us-east-1.amazonaws.com/tiles/{zoom}/{x}/{y}.jpg",endDate:"2013-03-15T00:00:00.000Z",startDate:"2013-03-13T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[-66.15007,18.35002],[-66.03337,18.35002],[-66.03328,18.45634],[-66.05464,18.45636],[-66.05463,18.46542],[-66.08303,18.46544],[-66.08302,18.47451],[-66.13034,18.47455],[-66.13034,18.4796],[-66.13983,18.47961],[-66.13984,18.46557],[-66.14995,18.46558],[-66.15007,18.35002]]]},{id:"santana_do_ipanema",name:"Santana do Ipanema AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Santana%20do%20Ipanema&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-37.20224,-9.41356],[-37.20188,-9.37768],[-37.20208,-9.37455],[-37.20192,-9.36733],[-37.20169,-9.36045],[-37.20172,-9.35501],[-37.20195,-9.35101],[-37.20191,-9.34773],[-37.20175,-9.33835],[-37.2017,-9.33505],[-37.20171,-9.33301],[-37.20142,-9.32833],[-37.20121,-9.32469],[-37.20117,-9.32351],[-37.21425,-9.32346],[-37.21537,-9.3234],[-37.22078,-9.32328],[-37.23727,-9.32313],[-37.25181,-9.32293],[-37.2656,-9.32276],[-37.2803,-9.32259],[-37.29191,-9.32245],[-37.29205,-9.33522],[-37.29304,-9.4122],[-37.28357,-9.41235],[-37.27789,-9.4125],[-37.2716,-9.41249],[-37.26506,-9.41262],[-37.26165,-9.41274],[-37.25499,-9.41276],[-37.24991,-9.41296],[-37.24616,-9.41297],[-37.24108,-9.41303],[-37.23461,-9.41321],[-37.2284,-9.41325],[-37.22165,-9.41335],[-37.21686,-9.41346],[-37.21292,-9.41343],[-37.20224,-9.41356]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"Sao_miguel_dos_campos",name:"São Miguel dos Campos AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Sao_miguel_dos_campos&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.1415,-9.83171],[-36.05047,-9.83246],[-36.04959,-9.74246],[-36.14059,-9.74166],[-36.1415,-9.83171]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"GEOSN-DOP-2005",name:"Saxony historical aerial imagery 2005",type:"wms",template:"https://geodienste.sachsen.de/wms_geosn_dop-2005/guest?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=dop_2005&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2005-01-01T00:00:00.000Z",startDate:"2005-01-01T00:00:00.000Z",polygon:[[[13.86571,50.71509],[13.86683,50.73012],[13.90116,50.73012],[13.90184,50.74446],[13.91043,50.74446],[13.91043,50.77378],[13.95266,50.77486],[13.95197,50.78897],[13.99969,50.78941],[13.999,50.79831],[14.16715,50.79762],[14.1747,50.8462],[14.32851,50.84534],[14.33503,50.87643],[14.41674,50.876],[14.41674,50.95025],[14.33263,50.95133],[14.3364,50.99802],[14.58188,50.99608],[14.57742,50.94895],[14.54068,50.95003],[14.54446,50.89831],[14.60557,50.89116],[14.60454,50.83439],[14.6605,50.83352],[14.65673,50.79578],[14.83422,50.79469],[14.84727,50.89138],[14.9204,50.88943],[14.9331,50.99478],[14.99902,50.99673],[15.00142,51.09709],[15.04159,51.09709],[15.04228,51.35317],[14.99696,51.35317],[15.00314,51.49959],[14.91593,51.50301],[14.91662,51.55043],[14.74908,51.55129],[14.75114,51.60121],[14.41056,51.59993],[14.41125,51.55129],[14.07891,51.54915],[14.07479,51.49831],[13.99446,51.50002],[13.99446,51.39817],[13.53921,51.39989],[13.53852,51.42516],[13.50041,51.42505],[13.50179,51.44945],[13.41596,51.45094],[13.41699,51.50013],[13.3315,51.50055],[13.33047,51.44966],[13.24945,51.44987],[13.25116,51.60036],[13.16773,51.60057],[13.16739,51.65023],[13.08328,51.65066],[13.08362,51.69941],[12.66202,51.70027],[12.66065,51.64832],[12.4162,51.65045],[12.41345,51.60057],[12.16146,51.60015],[12.16146,51.50109],[12.07631,51.50023],[12.07974,51.39625],[12.16008,51.39753],[12.16214,51.34995],[12.07906,51.35253],[12.07906,51.24562],[12.16214,51.24691],[12.16352,51.0958],[12.24317,51.09709],[12.2454,51.04813],[12.49688,51.04883],[12.49894,50.89966],[12.33346,50.89923],[12.32797,50.84984],[12.20712,50.8494],[12.20506,50.69829],[12.24694,50.69744],[12.24694,50.65023],[11.91529,50.64849],[11.91598,50.59839],[11.83221,50.59817],[11.83255,50.39922],[11.91495,50.39922],[11.91461,50.34886],[11.99486,50.34659],[11.99838,50.29897],[12.16506,50.29912],[12.16549,50.24904],[12.23673,50.24871],[12.24823,50.24212],[12.24772,50.14904],[12.33149,50.14893],[12.33852,50.19335],[12.33286,50.23927],[12.3538,50.23619],[12.35998,50.24926],[12.41457,50.24948],[12.41594,50.29906],[12.49851,50.29874],[12.49834,50.34948],[12.58142,50.34915],[12.58125,50.39896],[12.69489,50.39962],[12.70622,50.39426],[12.71257,50.39875],[13.0813,50.39907],[13.0813,50.4992],[13.24816,50.49898],[13.24884,50.54809],[13.33124,50.54918],[13.33056,50.59911],[13.50908,50.59759],[13.50462,50.62656],[13.5393,50.62635],[13.53827,50.65481],[13.54633,50.65547],[13.54599,50.66983],[13.5544,50.67027],[13.55457,50.68908],[13.54736,50.68887],[13.54582,50.69969],[13.63886,50.69947],[13.63955,50.71425],[13.86571,50.71509]]],terms_url:"https://geoportal.sachsen.de/cps/metadaten_portal.html?id=3f38c3f3-03db-4a2a-b6da-2704b9a1d5f0",terms_text:"Staatsbetrieb Geobasisinformation und Vermessung Sachsen",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/de/SaxonyWebAtlasSN.png"},{id:"GEOSN-DOP-2012_2014",name:"Saxony historical aerial imagery 2012-2014",type:"wms",template:"https://geodienste.sachsen.de/wms_geosn_dop_2012_2014/guest?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=dop_2012_2014_rgb&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",polygon:[[[13.86571,50.71509],[13.86683,50.73012],[13.90116,50.73012],[13.90184,50.74446],[13.91043,50.74446],[13.91043,50.77378],[13.95266,50.77486],[13.95197,50.78897],[13.99969,50.78941],[13.999,50.79831],[14.16715,50.79762],[14.1747,50.8462],[14.32851,50.84534],[14.33503,50.87643],[14.41674,50.876],[14.41674,50.95025],[14.33263,50.95133],[14.3364,50.99802],[14.58188,50.99608],[14.57742,50.94895],[14.54068,50.95003],[14.54446,50.89831],[14.60557,50.89116],[14.60454,50.83439],[14.6605,50.83352],[14.65673,50.79578],[14.83422,50.79469],[14.84727,50.89138],[14.9204,50.88943],[14.9331,50.99478],[14.99902,50.99673],[15.00142,51.09709],[15.04159,51.09709],[15.04228,51.35317],[14.99696,51.35317],[15.00314,51.49959],[14.91593,51.50301],[14.91662,51.55043],[14.74908,51.55129],[14.75114,51.60121],[14.41056,51.59993],[14.41125,51.55129],[14.07891,51.54915],[14.07479,51.49831],[13.99446,51.50002],[13.99446,51.39817],[13.53921,51.39989],[13.53852,51.42516],[13.50041,51.42505],[13.50179,51.44945],[13.41596,51.45094],[13.41699,51.50013],[13.3315,51.50055],[13.33047,51.44966],[13.24945,51.44987],[13.25116,51.60036],[13.16773,51.60057],[13.16739,51.65023],[13.08328,51.65066],[13.08362,51.69941],[12.66202,51.70027],[12.66065,51.64832],[12.4162,51.65045],[12.41345,51.60057],[12.16146,51.60015],[12.16146,51.50109],[12.07631,51.50023],[12.07974,51.39625],[12.16008,51.39753],[12.16214,51.34995],[12.07906,51.35253],[12.07906,51.24562],[12.16214,51.24691],[12.16352,51.0958],[12.24317,51.09709],[12.2454,51.04813],[12.49688,51.04883],[12.49894,50.89966],[12.33346,50.89923],[12.32797,50.84984],[12.20712,50.8494],[12.20506,50.69829],[12.24694,50.69744],[12.24694,50.65023],[11.91529,50.64849],[11.91598,50.59839],[11.83221,50.59817],[11.83255,50.39922],[11.91495,50.39922],[11.91461,50.34886],[11.99486,50.34659],[11.99838,50.29897],[12.16506,50.29912],[12.16549,50.24904],[12.23673,50.24871],[12.24823,50.24212],[12.24772,50.14904],[12.33149,50.14893],[12.33852,50.19335],[12.33286,50.23927],[12.3538,50.23619],[12.35998,50.24926],[12.41457,50.24948],[12.41594,50.29906],[12.49851,50.29874],[12.49834,50.34948],[12.58142,50.34915],[12.58125,50.39896],[12.69489,50.39962],[12.70622,50.39426],[12.71257,50.39875],[13.0813,50.39907],[13.0813,50.4992],[13.24816,50.49898],[13.24884,50.54809],[13.33124,50.54918],[13.33056,50.59911],[13.50908,50.59759],[13.50462,50.62656],[13.5393,50.62635],[13.53827,50.65481],[13.54633,50.65547],[13.54599,50.66983],[13.5544,50.67027],[13.55457,50.68908],[13.54736,50.68887],[13.54582,50.69969],[13.63886,50.69947],[13.63955,50.71425],[13.86571,50.71509]]],terms_url:"https://geoportal.sachsen.de/cps/metadaten_portal.html?id=8c276e3c-88af-462f-8128-6900bc7dd4f8",terms_text:"Staatsbetrieb Geobasisinformation und Vermessung Sachsen",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/de/SaxonyWebAtlasSN.png"},{id:"GEOSN-DOP-RGB",name:"Saxony latest aerial imagery",type:"wms",template:"https://geodienste.sachsen.de/wms_geosn_dop-rgb/guest?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=sn_dop_020&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[13.54901,50.69792],[13.84251,50.71126],[13.93239,50.74504],[14.04614,50.79389],[14.25257,50.85953],[14.40002,50.88966],[14.42671,50.9357],[14.35649,50.97197],[14.32559,50.99319],[14.27504,50.99054],[14.31577,51.04266],[14.41547,51.01263],[14.51939,51.0038],[14.5882,50.9817],[14.54467,50.91977],[14.57977,50.90649],[14.64718,50.92243],[14.64437,50.90915],[14.60505,50.85687],[14.7202,50.81785],[14.81008,50.81341],[14.85642,50.89055],[14.91259,50.94721],[14.99685,51.08679],[15.05303,51.24793],[15.05583,51.29274],[14.99264,51.34452],[14.98843,51.398],[14.97719,51.45754],[14.90979,51.49603],[14.73986,51.5371],[14.73986,51.59122],[14.70054,51.60605],[14.67948,51.5982],[14.68369,51.57813],[14.67386,51.55806],[14.61769,51.55718],[14.58399,51.59035],[14.51939,51.56941],[14.43513,51.5598],[14.327,51.52574],[14.13461,51.55544],[14.0672,51.49952],[14.02788,51.47854],[14.04333,51.45229],[13.99558,51.39274],[13.95767,51.40588],[13.88886,51.38836],[13.72455,51.37434],[13.55463,51.39274],[13.40437,51.45929],[13.35241,51.43916],[13.3159,51.44354],[13.28641,51.41815],[13.22602,51.40063],[13.21339,51.46104],[13.219,51.52661],[13.17406,51.5982],[13.00274,51.67751],[12.90584,51.65312],[12.90303,51.66619],[12.85388,51.69318],[12.76401,51.65922],[12.68817,51.67054],[12.64324,51.62959],[12.57723,51.63046],[12.42557,51.61041],[12.23037,51.57028],[12.17701,51.53011],[12.13909,51.46017],[12.16718,51.41727],[12.1742,51.33487],[12.13207,51.3182],[12.18684,51.21364],[12.15875,51.18812],[12.22054,51.09296],[12.49017,51.05414],[12.52106,50.99319],[12.60532,50.97286],[12.62639,50.91889],[12.50281,50.91092],[12.23739,50.81874],[12.21352,50.72993],[12.28654,50.665],[12.21773,50.6463],[12.13347,50.6276],[12.05343,50.56342],[12.01972,50.64719],[11.85963,50.54825],[11.87649,50.50808],[11.92704,50.5054],[11.93687,50.48664],[11.87087,50.44194],[11.93406,50.39989],[11.96917,50.33987],[12.12083,50.29773],[12.17279,50.3067],[12.18543,50.26094],[12.21212,50.25375],[12.25705,50.21603],[12.28233,50.15668],[12.35535,50.15848],[12.35535,50.22142],[12.41433,50.28158],[12.51123,50.34705],[12.53791,50.38735],[12.67835,50.40257],[12.71205,50.38646],[12.7289,50.39631],[12.75699,50.42584],[12.78648,50.43389],[12.81737,50.41779],[12.84686,50.43657],[12.94797,50.38735],[13.00976,50.41421],[13.04627,50.44999],[13.0561,50.48753],[13.21479,50.49289],[13.27517,50.56609],[13.34118,50.56877],[13.39173,50.61334],[13.47739,50.58571],[13.54761,50.63473],[13.56867,50.67212],[13.54901,50.69792]]],terms_url:"https://geoportal.sachsen.de/cps/metadaten_portal.html?id=cd01c334-7e32-482f-bd43-af286707178a",terms_text:"Staatsbetrieb Geobasisinformation und Vermessung Sachsen",best:true,icon:"https://osmlab.github.io/editor-layer-index/sources/europe/de/SaxonyWebAtlasSN.png"},{id:"GEOSN-DOP-CIR",name:"Saxony latest aerial imagery infrared",type:"wms",template:"https://geodienste.sachsen.de/wms_geosn_dop-cir/guest?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=sn_dop_020_cir&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[13.54901,50.69792],[13.84251,50.71126],[13.93239,50.74504],[14.04614,50.79389],[14.25257,50.85953],[14.40002,50.88966],[14.42671,50.9357],[14.35649,50.97197],[14.32559,50.99319],[14.27504,50.99054],[14.31577,51.04266],[14.41547,51.01263],[14.51939,51.0038],[14.5882,50.9817],[14.54467,50.91977],[14.57977,50.90649],[14.64718,50.92243],[14.64437,50.90915],[14.60505,50.85687],[14.7202,50.81785],[14.81008,50.81341],[14.85642,50.89055],[14.91259,50.94721],[14.99685,51.08679],[15.05303,51.24793],[15.05583,51.29274],[14.99264,51.34452],[14.98843,51.398],[14.97719,51.45754],[14.90979,51.49603],[14.73986,51.5371],[14.73986,51.59122],[14.70054,51.60605],[14.67948,51.5982],[14.68369,51.57813],[14.67386,51.55806],[14.61769,51.55718],[14.58399,51.59035],[14.51939,51.56941],[14.43513,51.5598],[14.327,51.52574],[14.13461,51.55544],[14.0672,51.49952],[14.02788,51.47854],[14.04333,51.45229],[13.99558,51.39274],[13.95767,51.40588],[13.88886,51.38836],[13.72455,51.37434],[13.55463,51.39274],[13.40437,51.45929],[13.35241,51.43916],[13.3159,51.44354],[13.28641,51.41815],[13.22602,51.40063],[13.21339,51.46104],[13.219,51.52661],[13.17406,51.5982],[13.00274,51.67751],[12.90584,51.65312],[12.90303,51.66619],[12.85388,51.69318],[12.76401,51.65922],[12.68817,51.67054],[12.64324,51.62959],[12.57723,51.63046],[12.42557,51.61041],[12.23037,51.57028],[12.17701,51.53011],[12.13909,51.46017],[12.16718,51.41727],[12.1742,51.33487],[12.13207,51.3182],[12.18684,51.21364],[12.15875,51.18812],[12.22054,51.09296],[12.49017,51.05414],[12.52106,50.99319],[12.60532,50.97286],[12.62639,50.91889],[12.50281,50.91092],[12.23739,50.81874],[12.21352,50.72993],[12.28654,50.665],[12.21773,50.6463],[12.13347,50.6276],[12.05343,50.56342],[12.01972,50.64719],[11.85963,50.54825],[11.87649,50.50808],[11.92704,50.5054],[11.93687,50.48664],[11.87087,50.44194],[11.93406,50.39989],[11.96917,50.33987],[12.12083,50.29773],[12.17279,50.3067],[12.18543,50.26094],[12.21212,50.25375],[12.25705,50.21603],[12.28233,50.15668],[12.35535,50.15848],[12.35535,50.22142],[12.41433,50.28158],[12.51123,50.34705],[12.53791,50.38735],[12.67835,50.40257],[12.71205,50.38646],[12.7289,50.39631],[12.75699,50.42584],[12.78648,50.43389],[12.81737,50.41779],[12.84686,50.43657],[12.94797,50.38735],[13.00976,50.41421],[13.04627,50.44999],[13.0561,50.48753],[13.21479,50.49289],[13.27517,50.56609],[13.34118,50.56877],[13.39173,50.61334],[13.47739,50.58571],[13.54761,50.63473],[13.56867,50.67212],[13.54901,50.69792]]],terms_url:"https://geoportal.sachsen.de/cps/metadaten_portal.html?id=ba87bbed-4cb5-4539-a9f5-f863de752f52",terms_text:"Staatsbetrieb Geobasisinformation und Vermessung Sachsen",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/de/SaxonyWebAtlasSN.png"},{id:"GEOSN-DTK",name:"Saxony topographic map",type:"wms",template:"https://geodienste.sachsen.de/wms_geosn_dtk-pg-color/guest?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=sn_dtk_pg_color&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[13.54901,50.69792],[13.84251,50.71126],[13.93239,50.74504],[14.04614,50.79389],[14.25257,50.85953],[14.40002,50.88966],[14.42671,50.9357],[14.35649,50.97197],[14.32559,50.99319],[14.27504,50.99054],[14.31577,51.04266],[14.41547,51.01263],[14.51939,51.0038],[14.5882,50.9817],[14.54467,50.91977],[14.57977,50.90649],[14.64718,50.92243],[14.64437,50.90915],[14.60505,50.85687],[14.7202,50.81785],[14.81008,50.81341],[14.85642,50.89055],[14.91259,50.94721],[14.99685,51.08679],[15.05303,51.24793],[15.05583,51.29274],[14.99264,51.34452],[14.98843,51.398],[14.97719,51.45754],[14.90979,51.49603],[14.73986,51.5371],[14.73986,51.59122],[14.70054,51.60605],[14.67948,51.5982],[14.68369,51.57813],[14.67386,51.55806],[14.61769,51.55718],[14.58399,51.59035],[14.51939,51.56941],[14.43513,51.5598],[14.327,51.52574],[14.13461,51.55544],[14.0672,51.49952],[14.02788,51.47854],[14.04333,51.45229],[13.99558,51.39274],[13.95767,51.40588],[13.88886,51.38836],[13.72455,51.37434],[13.55463,51.39274],[13.40437,51.45929],[13.35241,51.43916],[13.3159,51.44354],[13.28641,51.41815],[13.22602,51.40063],[13.21339,51.46104],[13.219,51.52661],[13.17406,51.5982],[13.00274,51.67751],[12.90584,51.65312],[12.90303,51.66619],[12.85388,51.69318],[12.76401,51.65922],[12.68817,51.67054],[12.64324,51.62959],[12.57723,51.63046],[12.42557,51.61041],[12.23037,51.57028],[12.17701,51.53011],[12.13909,51.46017],[12.16718,51.41727],[12.1742,51.33487],[12.13207,51.3182],[12.18684,51.21364],[12.15875,51.18812],[12.22054,51.09296],[12.49017,51.05414],[12.52106,50.99319],[12.60532,50.97286],[12.62639,50.91889],[12.50281,50.91092],[12.23739,50.81874],[12.21352,50.72993],[12.28654,50.665],[12.21773,50.6463],[12.13347,50.6276],[12.05343,50.56342],[12.01972,50.64719],[11.85963,50.54825],[11.87649,50.50808],[11.92704,50.5054],[11.93687,50.48664],[11.87087,50.44194],[11.93406,50.39989],[11.96917,50.33987],[12.12083,50.29773],[12.17279,50.3067],[12.18543,50.26094],[12.21212,50.25375],[12.25705,50.21603],[12.28233,50.15668],[12.35535,50.15848],[12.35535,50.22142],[12.41433,50.28158],[12.51123,50.34705],[12.53791,50.38735],[12.67835,50.40257],[12.71205,50.38646],[12.7289,50.39631],[12.75699,50.42584],[12.78648,50.43389],[12.81737,50.41779],[12.84686,50.43657],[12.94797,50.38735],[13.00976,50.41421],[13.04627,50.44999],[13.0561,50.48753],[13.21479,50.49289],[13.27517,50.56609],[13.34118,50.56877],[13.39173,50.61334],[13.47739,50.58571],[13.54761,50.63473],[13.56867,50.67212],[13.54901,50.69792]]],terms_url:"https://geoportal.sachsen.de/cps/metadaten_portal.html?id=d6d24c6d-94ea-447d-8a0c-40afdedeb5c6",terms_text:"Staatsbetrieb Geobasisinformation und Vermessung Sachsen",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/de/SaxonyWebAtlasSN.png"},{id:"GEOSN-WebAtlas",name:"Saxony WebAtlasSN",type:"wms",template:"https://geodienste.sachsen.de/wms_geosn_webatlas-sn/guest?FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Vegetation,Siedlung,Gewaesser,Verkehr,Administrative_Einheiten,Beschriftung&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[13.54901,50.69792],[13.84251,50.71126],[13.93239,50.74504],[14.04614,50.79389],[14.25257,50.85953],[14.40002,50.88966],[14.42671,50.9357],[14.35649,50.97197],[14.32559,50.99319],[14.27504,50.99054],[14.31577,51.04266],[14.41547,51.01263],[14.51939,51.0038],[14.5882,50.9817],[14.54467,50.91977],[14.57977,50.90649],[14.64718,50.92243],[14.64437,50.90915],[14.60505,50.85687],[14.7202,50.81785],[14.81008,50.81341],[14.85642,50.89055],[14.91259,50.94721],[14.99685,51.08679],[15.05303,51.24793],[15.05583,51.29274],[14.99264,51.34452],[14.98843,51.398],[14.97719,51.45754],[14.90979,51.49603],[14.73986,51.5371],[14.73986,51.59122],[14.70054,51.60605],[14.67948,51.5982],[14.68369,51.57813],[14.67386,51.55806],[14.61769,51.55718],[14.58399,51.59035],[14.51939,51.56941],[14.43513,51.5598],[14.327,51.52574],[14.13461,51.55544],[14.0672,51.49952],[14.02788,51.47854],[14.04333,51.45229],[13.99558,51.39274],[13.95767,51.40588],[13.88886,51.38836],[13.72455,51.37434],[13.55463,51.39274],[13.40437,51.45929],[13.35241,51.43916],[13.3159,51.44354],[13.28641,51.41815],[13.22602,51.40063],[13.21339,51.46104],[13.219,51.52661],[13.17406,51.5982],[13.00274,51.67751],[12.90584,51.65312],[12.90303,51.66619],[12.85388,51.69318],[12.76401,51.65922],[12.68817,51.67054],[12.64324,51.62959],[12.57723,51.63046],[12.42557,51.61041],[12.23037,51.57028],[12.17701,51.53011],[12.13909,51.46017],[12.16718,51.41727],[12.1742,51.33487],[12.13207,51.3182],[12.18684,51.21364],[12.15875,51.18812],[12.22054,51.09296],[12.49017,51.05414],[12.52106,50.99319],[12.60532,50.97286],[12.62639,50.91889],[12.50281,50.91092],[12.23739,50.81874],[12.21352,50.72993],[12.28654,50.665],[12.21773,50.6463],[12.13347,50.6276],[12.05343,50.56342],[12.01972,50.64719],[11.85963,50.54825],[11.87649,50.50808],[11.92704,50.5054],[11.93687,50.48664],[11.87087,50.44194],[11.93406,50.39989],[11.96917,50.33987],[12.12083,50.29773],[12.17279,50.3067],[12.18543,50.26094],[12.21212,50.25375],[12.25705,50.21603],[12.28233,50.15668],[12.35535,50.15848],[12.35535,50.22142],[12.41433,50.28158],[12.51123,50.34705],[12.53791,50.38735],[12.67835,50.40257],[12.71205,50.38646],[12.7289,50.39631],[12.75699,50.42584],[12.78648,50.43389],[12.81737,50.41779],[12.84686,50.43657],[12.94797,50.38735],[13.00976,50.41421],[13.04627,50.44999],[13.0561,50.48753],[13.21479,50.49289],[13.27517,50.56609],[13.34118,50.56877],[13.39173,50.61334],[13.47739,50.58571],[13.54761,50.63473],[13.56867,50.67212],[13.54901,50.69792]]],terms_url:"https://geoportal.sachsen.de/cps/metadaten_portal.html?id=475a9197-620f-4dcb-b8aa-7f71b626443f",terms_text:"Staatsbetrieb Geobasisinformation und Vermessung Sachsen",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/de/SaxonyWebAtlasSN.png"},{id:"Geodatastyrelsen_Denmark",name:"SDFE aerial imagery",type:"tms",template:"https://osmtools.septima.dk/mapproxy/tiles/1.0.0/kortforsyningen_ortoforaar/EPSG3857/{zoom}/{x}/{y}.jpeg",zoomExtent:[0,21],polygon:[[[8.37439,54.95517],[8.36838,55.40421],[8.2104,55.40398],[8.20873,55.49373],[8.05027,55.49247],[8.01851,56.75014],[8.18192,56.75099],[8.17633,57.02089],[8.34133,57.02199],[8.33925,57.11196],[8.50544,57.11232],[8.50339,57.20205],[9.33163,57.20276],[9.33191,57.29248],[9.49789,57.29196],[9.49886,57.38206],[9.66497,57.38116],[9.66873,57.56056],[9.8352,57.55963],[9.83749,57.64933],[10.17257,57.64628],[10.17542,57.73678],[10.51183,57.73303],[10.51521,57.82289],[10.68349,57.82077],[10.67516,57.6412],[10.5077,57.64331],[10.504,57.55351],[10.67104,57.55141],[10.65078,57.10245],[10.48577,57.10451],[10.47862,56.92491],[10.3144,56.92676],[10.31123,56.83693],[10.47503,56.83509],[10.4649,56.56567],[10.95242,56.55898],[10.94792,56.46922],[11.10993,56.46647],[11.10526,56.37683],[10.94299,56.37953],[10.93412,56.19948],[10.77197,56.20202],[10.76948,56.11201],[10.60797,56.11503],[10.44667,56.11672],[10.28659,56.11868],[10.28315,56.02819],[10.44393,56.02704],[10.44177,55.75792],[10.4335,55.66935],[10.74381,55.66469],[10.74381,55.57123],[10.8969,55.57123],[10.90518,55.39539],[11.06137,55.38128],[11.0593,55.11241],[11.04586,55.03186],[11.20308,55.02475],[11.20308,55.11714],[11.0593,55.11241],[11.06137,55.38128],[11.07896,55.57123],[10.8969,55.57123],[10.92587,55.66702],[10.74381,55.66469],[10.75623,55.75792],[10.44177,55.75792],[10.44393,56.02704],[10.44667,56.11672],[10.60797,56.11503],[10.60521,56.02475],[10.92587,56.02012],[10.91971,55.93094],[11.08028,55.92792],[11.08581,56.01783],[11.7265,56.00506],[11.732,56.09521],[12.05403,56.08713],[12.06085,56.17626],[12.70235,56.15944],[12.66111,55.71143],[12.97923,55.7014],[12.96129,55.52173],[12.32687,55.54121],[12.32061,55.45137],[12.47782,55.44707],[12.47024,55.35705],[12.62697,55.35238],[12.62009,55.26326],[12.46273,55.26722],[12.45529,55.17782],[12.2987,55.18223],[12.28973,55.09236],[12.60486,55.08329],[12.5872,54.90363],[12.27666,54.9119],[12.26102,54.73316],[12.10707,54.73782],[12.08586,54.46817],[11.7795,54.47536],[11.78374,54.56548],[11.16585,54.57822],[11.17064,54.66865],[10.86172,54.6734],[10.86512,54.76347],[10.77136,54.76439],[10.77073,54.73728],[10.75514,54.73758],[10.7544,54.71957],[10.73891,54.71976],[10.73844,54.71085],[10.70745,54.7113],[10.70411,54.67567],[10.5511,54.67817],[10.55472,54.76702],[10.2424,54.77059],[10.24598,54.86047],[10.09023,54.86221],[10.08737,54.77239],[9.15558,54.77696],[9.15628,54.86754],[8.5322,54.86638],[8.53143,54.95516],[8.37439,54.95517]],[[11.45777,56.81955],[11.78492,56.81274],[11.77167,56.63328],[11.44596,56.64011],[11.45777,56.81955]],[[11.32747,57.3613],[11.31618,57.1818],[11.15087,57.18473],[11.14566,57.09496],[10.81577,57.10017],[10.82906,57.36953],[11.32747,57.3613]],[[11.58433,56.27779],[11.57829,56.18804],[11.73923,56.18458],[11.74564,56.27432],[11.58433,56.27779]],[[14.68259,55.36394],[14.83952,55.35652],[14.82638,55.26713],[15.13934,55.25174],[15.1532,55.34108],[15.30992,55.33306],[15.29572,55.24374],[15.13934,55.25174],[15.12556,55.16238],[15.28158,55.15442],[15.25356,54.97576],[14.63175,55.00625],[14.68259,55.36394]]],terms_url:"https://download.kortforsyningen.dk/content/vilkaar-og-betingelser",terms_text:"Geodatastyrelsen og Danske Kommuner",best:true,icon:"https://osmlab.github.io/editor-layer-index/sources/europe/dk/SDFESkrmkort.png"},{id:"Geodatastyrelsen_Cadastral_Parcels_INSPIRE_View",name:"SDFE Cadastral Parcels INSPIRE View",type:"wms",template:"https://kortforsyningen.kms.dk/cp_inspire?login=OpenStreetMapDK2015&password=Gall4Peters&FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=CP.CadastralParcel&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,20],polygon:[[[8.37439,54.95517],[8.36838,55.40421],[8.2104,55.40398],[8.20873,55.49373],[8.05027,55.49247],[8.01851,56.75014],[8.18192,56.75099],[8.17633,57.02089],[8.34133,57.02199],[8.33925,57.11196],[8.50544,57.11232],[8.50339,57.20205],[9.33163,57.20276],[9.33191,57.29248],[9.49789,57.29196],[9.49886,57.38206],[9.66497,57.38116],[9.66873,57.56056],[9.8352,57.55963],[9.83749,57.64933],[10.17257,57.64628],[10.17542,57.73678],[10.51183,57.73303],[10.51521,57.82289],[10.68349,57.82077],[10.67516,57.6412],[10.5077,57.64331],[10.504,57.55351],[10.67104,57.55141],[10.65078,57.10245],[10.48577,57.10451],[10.47862,56.92491],[10.3144,56.92676],[10.31123,56.83693],[10.47503,56.83509],[10.4649,56.56567],[10.95242,56.55898],[10.94792,56.46922],[11.10993,56.46647],[11.10526,56.37683],[10.94299,56.37953],[10.93412,56.19948],[10.77197,56.20202],[10.76948,56.11201],[10.60797,56.11503],[10.44667,56.11672],[10.28659,56.11868],[10.28315,56.02819],[10.44393,56.02704],[10.44177,55.75792],[10.4335,55.66935],[10.74381,55.66469],[10.74381,55.57123],[10.8969,55.57123],[10.90518,55.39539],[11.06137,55.38128],[11.0593,55.11241],[11.04586,55.03186],[11.20308,55.02475],[11.20308,55.11714],[11.0593,55.11241],[11.06137,55.38128],[11.07896,55.57123],[10.8969,55.57123],[10.92587,55.66702],[10.74381,55.66469],[10.75623,55.75792],[10.44177,55.75792],[10.44393,56.02704],[10.44667,56.11672],[10.60797,56.11503],[10.60521,56.02475],[10.92587,56.02012],[10.91971,55.93094],[11.08028,55.92792],[11.08581,56.01783],[11.7265,56.00506],[11.732,56.09521],[12.05403,56.08713],[12.06085,56.17626],[12.70235,56.15944],[12.66111,55.71143],[12.97923,55.7014],[12.96129,55.52173],[12.32687,55.54121],[12.32061,55.45137],[12.47782,55.44707],[12.47024,55.35705],[12.62697,55.35238],[12.62009,55.26326],[12.46273,55.26722],[12.45529,55.17782],[12.2987,55.18223],[12.28973,55.09236],[12.60486,55.08329],[12.5872,54.90363],[12.27666,54.9119],[12.26102,54.73316],[12.10707,54.73782],[12.08586,54.46817],[11.7795,54.47536],[11.78374,54.56548],[11.16585,54.57822],[11.17064,54.66865],[10.86172,54.6734],[10.86512,54.76347],[10.77136,54.76439],[10.77073,54.73728],[10.75514,54.73758],[10.7544,54.71957],[10.73891,54.71976],[10.73844,54.71085],[10.70745,54.7113],[10.70411,54.67567],[10.5511,54.67817],[10.55472,54.76702],[10.2424,54.77059],[10.24598,54.86047],[10.09023,54.86221],[10.08737,54.77239],[9.15558,54.77696],[9.15628,54.86754],[8.5322,54.86638],[8.53143,54.95516],[8.37439,54.95517]],[[11.45777,56.81955],[11.78492,56.81274],[11.77167,56.63328],[11.44596,56.64011],[11.45777,56.81955]],[[11.32747,57.3613],[11.31618,57.1818],[11.15087,57.18473],[11.14566,57.09496],[10.81577,57.10017],[10.82906,57.36953],[11.32747,57.3613]],[[11.58433,56.27779],[11.57829,56.18804],[11.73923,56.18458],[11.74564,56.27432],[11.58433,56.27779]],[[14.68259,55.36394],[14.83952,55.35652],[14.82638,55.26713],[15.13934,55.25174],[15.1532,55.34108],[15.30992,55.33306],[15.29572,55.24374],[15.13934,55.25174],[15.12556,55.16238],[15.28158,55.15442],[15.25356,54.97576],[14.63175,55.00625],[14.68259,55.36394]]],terms_text:"Geodatastyrelsen og Danske Kommuner",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/dk/SDFESkrmkort.png"},{id:"Geodatastyrelsen_DTK_Kort25",name:"SDFE DTK Kort25",type:"wms",template:"https://kortforsyningen.kms.dk/topo25?FORMAT=image/png&VERSION=1.1.1&login=OpenStreetMapDK2015&password=Gall4Peters&SERVICE=WMS&REQUEST=GetMap&Layers=topo25_klassisk&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,19],polygon:[[[8.37439,54.95517],[8.36838,55.40421],[8.2104,55.40398],[8.20873,55.49373],[8.05027,55.49247],[8.01851,56.75014],[8.18192,56.75099],[8.17633,57.02089],[8.34133,57.02199],[8.33925,57.11196],[8.50544,57.11232],[8.50339,57.20205],[9.33163,57.20276],[9.33191,57.29248],[9.49789,57.29196],[9.49886,57.38206],[9.66497,57.38116],[9.66873,57.56056],[9.8352,57.55963],[9.83749,57.64933],[10.17257,57.64628],[10.17542,57.73678],[10.51183,57.73303],[10.51521,57.82289],[10.68349,57.82077],[10.67516,57.6412],[10.5077,57.64331],[10.504,57.55351],[10.67104,57.55141],[10.65078,57.10245],[10.48577,57.10451],[10.47862,56.92491],[10.3144,56.92676],[10.31123,56.83693],[10.47503,56.83509],[10.4649,56.56567],[10.95242,56.55898],[10.94792,56.46922],[11.10993,56.46647],[11.10526,56.37683],[10.94299,56.37953],[10.93412,56.19948],[10.77197,56.20202],[10.76948,56.11201],[10.60797,56.11503],[10.44667,56.11672],[10.28659,56.11868],[10.28315,56.02819],[10.44393,56.02704],[10.44177,55.75792],[10.4335,55.66935],[10.74381,55.66469],[10.74381,55.57123],[10.8969,55.57123],[10.90518,55.39539],[11.06137,55.38128],[11.0593,55.11241],[11.04586,55.03186],[11.20308,55.02475],[11.20308,55.11714],[11.0593,55.11241],[11.06137,55.38128],[11.07896,55.57123],[10.8969,55.57123],[10.92587,55.66702],[10.74381,55.66469],[10.75623,55.75792],[10.44177,55.75792],[10.44393,56.02704],[10.44667,56.11672],[10.60797,56.11503],[10.60521,56.02475],[10.92587,56.02012],[10.91971,55.93094],[11.08028,55.92792],[11.08581,56.01783],[11.7265,56.00506],[11.732,56.09521],[12.05403,56.08713],[12.06085,56.17626],[12.70235,56.15944],[12.66111,55.71143],[12.97923,55.7014],[12.96129,55.52173],[12.32687,55.54121],[12.32061,55.45137],[12.47782,55.44707],[12.47024,55.35705],[12.62697,55.35238],[12.62009,55.26326],[12.46273,55.26722],[12.45529,55.17782],[12.2987,55.18223],[12.28973,55.09236],[12.60486,55.08329],[12.5872,54.90363],[12.27666,54.9119],[12.26102,54.73316],[12.10707,54.73782],[12.08586,54.46817],[11.7795,54.47536],[11.78374,54.56548],[11.16585,54.57822],[11.17064,54.66865],[10.86172,54.6734],[10.86512,54.76347],[10.77136,54.76439],[10.77073,54.73728],[10.75514,54.73758],[10.7544,54.71957],[10.73891,54.71976],[10.73844,54.71085],[10.70745,54.7113],[10.70411,54.67567],[10.5511,54.67817],[10.55472,54.76702],[10.2424,54.77059],[10.24598,54.86047],[10.09023,54.86221],[10.08737,54.77239],[9.15558,54.77696],[9.15628,54.86754],[8.5322,54.86638],[8.53143,54.95516],[8.37439,54.95517]],[[11.45777,56.81955],[11.78492,56.81274],[11.77167,56.63328],[11.44596,56.64011],[11.45777,56.81955]],[[11.32747,57.3613],[11.31618,57.1818],[11.15087,57.18473],[11.14566,57.09496],[10.81577,57.10017],[10.82906,57.36953],[11.32747,57.3613]],[[11.58433,56.27779],[11.57829,56.18804],[11.73923,56.18458],[11.74564,56.27432],[11.58433,56.27779]],[[14.68259,55.36394],[14.83952,55.35652],[14.82638,55.26713],[15.13934,55.25174],[15.1532,55.34108],[15.30992,55.33306],[15.29572,55.24374],[15.13934,55.25174],[15.12556,55.16238],[15.28158,55.15442],[15.25356,54.97576],[14.63175,55.00625],[14.68259,55.36394]]],terms_text:"Geodatastyrelsen og Danske Kommuner",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/dk/SDFESkrmkort.png"},{id:"Geodatastyrelsen_Skaermkort",name:"SDFE Skærmkort",type:"wms",template:"https://kortforsyningen.kms.dk/topo_skaermkort?FORMAT=image/png&VERSION=1.1.1&login=OpenStreetMapDK2015&password=Gall4Peters&SERVICE=WMS&REQUEST=GetMap&Layers=dtk_skaermkort&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,19],polygon:[[[8.37439,54.95517],[8.36838,55.40421],[8.2104,55.40398],[8.20873,55.49373],[8.05027,55.49247],[8.01851,56.75014],[8.18192,56.75099],[8.17633,57.02089],[8.34133,57.02199],[8.33925,57.11196],[8.50544,57.11232],[8.50339,57.20205],[9.33163,57.20276],[9.33191,57.29248],[9.49789,57.29196],[9.49886,57.38206],[9.66497,57.38116],[9.66873,57.56056],[9.8352,57.55963],[9.83749,57.64933],[10.17257,57.64628],[10.17542,57.73678],[10.51183,57.73303],[10.51521,57.82289],[10.68349,57.82077],[10.67516,57.6412],[10.5077,57.64331],[10.504,57.55351],[10.67104,57.55141],[10.65078,57.10245],[10.48577,57.10451],[10.47862,56.92491],[10.3144,56.92676],[10.31123,56.83693],[10.47503,56.83509],[10.4649,56.56567],[10.95242,56.55898],[10.94792,56.46922],[11.10993,56.46647],[11.10526,56.37683],[10.94299,56.37953],[10.93412,56.19948],[10.77197,56.20202],[10.76948,56.11201],[10.60797,56.11503],[10.44667,56.11672],[10.28659,56.11868],[10.28315,56.02819],[10.44393,56.02704],[10.44177,55.75792],[10.4335,55.66935],[10.74381,55.66469],[10.74381,55.57123],[10.8969,55.57123],[10.90518,55.39539],[11.06137,55.38128],[11.0593,55.11241],[11.04586,55.03186],[11.20308,55.02475],[11.20308,55.11714],[11.0593,55.11241],[11.06137,55.38128],[11.07896,55.57123],[10.8969,55.57123],[10.92587,55.66702],[10.74381,55.66469],[10.75623,55.75792],[10.44177,55.75792],[10.44393,56.02704],[10.44667,56.11672],[10.60797,56.11503],[10.60521,56.02475],[10.92587,56.02012],[10.91971,55.93094],[11.08028,55.92792],[11.08581,56.01783],[11.7265,56.00506],[11.732,56.09521],[12.05403,56.08713],[12.06085,56.17626],[12.70235,56.15944],[12.66111,55.71143],[12.97923,55.7014],[12.96129,55.52173],[12.32687,55.54121],[12.32061,55.45137],[12.47782,55.44707],[12.47024,55.35705],[12.62697,55.35238],[12.62009,55.26326],[12.46273,55.26722],[12.45529,55.17782],[12.2987,55.18223],[12.28973,55.09236],[12.60486,55.08329],[12.5872,54.90363],[12.27666,54.9119],[12.26102,54.73316],[12.10707,54.73782],[12.08586,54.46817],[11.7795,54.47536],[11.78374,54.56548],[11.16585,54.57822],[11.17064,54.66865],[10.86172,54.6734],[10.86512,54.76347],[10.77136,54.76439],[10.77073,54.73728],[10.75514,54.73758],[10.7544,54.71957],[10.73891,54.71976],[10.73844,54.71085],[10.70745,54.7113],[10.70411,54.67567],[10.5511,54.67817],[10.55472,54.76702],[10.2424,54.77059],[10.24598,54.86047],[10.09023,54.86221],[10.08737,54.77239],[9.15558,54.77696],[9.15628,54.86754],[8.5322,54.86638],[8.53143,54.95516],[8.37439,54.95517]],[[11.45777,56.81955],[11.78492,56.81274],[11.77167,56.63328],[11.44596,56.64011],[11.45777,56.81955]],[[11.32747,57.3613],[11.31618,57.1818],[11.15087,57.18473],[11.14566,57.09496],[10.81577,57.10017],[10.82906,57.36953],[11.32747,57.3613]],[[11.58433,56.27779],[11.57829,56.18804],[11.73923,56.18458],[11.74564,56.27432],[11.58433,56.27779]],[[14.68259,55.36394],[14.83952,55.35652],[14.82638,55.26713],[15.13934,55.25174],[15.1532,55.34108],[15.30992,55.33306],[15.29572,55.24374],[15.13934,55.25174],[15.12556,55.16238],[15.28158,55.15442],[15.25356,54.97576],[14.63175,55.00625],[14.68259,55.36394]]],terms_text:"Geodatastyrelsen og Danske Kommuner",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/dk/SDFESkrmkort.png"},{id:"SDFE_Overflade_Skyggekort_40cm",name:"SDFE Surface Shadow Map (40 cm)",type:"wms",template:"https://kortforsyningen.kms.dk/dhm?login=OpenStreetMapDK2015&password=Gall4Peters&FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=dhm_overflade_skyggekort&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,20],polygon:[[[8.37439,54.95517],[8.36838,55.40421],[8.2104,55.40398],[8.20873,55.49373],[8.05027,55.49247],[8.01851,56.75014],[8.18192,56.75099],[8.17633,57.02089],[8.34133,57.02199],[8.33925,57.11196],[8.50544,57.11232],[8.50339,57.20205],[9.33163,57.20276],[9.33191,57.29248],[9.49789,57.29196],[9.49886,57.38206],[9.66497,57.38116],[9.66873,57.56056],[9.8352,57.55963],[9.83749,57.64933],[10.17257,57.64628],[10.17542,57.73678],[10.51183,57.73303],[10.51521,57.82289],[10.68349,57.82077],[10.67516,57.6412],[10.5077,57.64331],[10.504,57.55351],[10.67104,57.55141],[10.65078,57.10245],[10.48577,57.10451],[10.47862,56.92491],[10.3144,56.92676],[10.31123,56.83693],[10.47503,56.83509],[10.4649,56.56567],[10.95242,56.55898],[10.94792,56.46922],[11.10993,56.46647],[11.10526,56.37683],[10.94299,56.37953],[10.93412,56.19948],[10.77197,56.20202],[10.76948,56.11201],[10.60797,56.11503],[10.44667,56.11672],[10.28659,56.11868],[10.28315,56.02819],[10.44393,56.02704],[10.44177,55.75792],[10.4335,55.66935],[10.74381,55.66469],[10.74381,55.57123],[10.8969,55.57123],[10.90518,55.39539],[11.06137,55.38128],[11.0593,55.11241],[11.04586,55.03186],[11.20308,55.02475],[11.20308,55.11714],[11.0593,55.11241],[11.06137,55.38128],[11.07896,55.57123],[10.8969,55.57123],[10.92587,55.66702],[10.74381,55.66469],[10.75623,55.75792],[10.44177,55.75792],[10.44393,56.02704],[10.44667,56.11672],[10.60797,56.11503],[10.60521,56.02475],[10.92587,56.02012],[10.91971,55.93094],[11.08028,55.92792],[11.08581,56.01783],[11.7265,56.00506],[11.732,56.09521],[12.05403,56.08713],[12.06085,56.17626],[12.70235,56.15944],[12.66111,55.71143],[12.97923,55.7014],[12.96129,55.52173],[12.32687,55.54121],[12.32061,55.45137],[12.47782,55.44707],[12.47024,55.35705],[12.62697,55.35238],[12.62009,55.26326],[12.46273,55.26722],[12.45529,55.17782],[12.2987,55.18223],[12.28973,55.09236],[12.60486,55.08329],[12.5872,54.90363],[12.27666,54.9119],[12.26102,54.73316],[12.10707,54.73782],[12.08586,54.46817],[11.7795,54.47536],[11.78374,54.56548],[11.16585,54.57822],[11.17064,54.66865],[10.86172,54.6734],[10.86512,54.76347],[10.77136,54.76439],[10.77073,54.73728],[10.75514,54.73758],[10.7544,54.71957],[10.73891,54.71976],[10.73844,54.71085],[10.70745,54.7113],[10.70411,54.67567],[10.5511,54.67817],[10.55472,54.76702],[10.2424,54.77059],[10.24598,54.86047],[10.09023,54.86221],[10.08737,54.77239],[9.15558,54.77696],[9.15628,54.86754],[8.5322,54.86638],[8.53143,54.95516],[8.37439,54.95517]],[[11.45777,56.81955],[11.78492,56.81274],[11.77167,56.63328],[11.44596,56.64011],[11.45777,56.81955]],[[11.32747,57.3613],[11.31618,57.1818],[11.15087,57.18473],[11.14566,57.09496],[10.81577,57.10017],[10.82906,57.36953],[11.32747,57.3613]],[[11.58433,56.27779],[11.57829,56.18804],[11.73923,56.18458],[11.74564,56.27432],[11.58433,56.27779]],[[14.68259,55.36394],[14.83952,55.35652],[14.82638,55.26713],[15.13934,55.25174],[15.1532,55.34108],[15.30992,55.33306],[15.29572,55.24374],[15.13934,55.25174],[15.12556,55.16238],[15.28158,55.15442],[15.25356,54.97576],[14.63175,55.00625],[14.68259,55.36394]]],terms_text:"Geodatastyrelsen og Danske Kommuner",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/dk/SDFESkrmkort.png"},{id:"SDFE_Terraen_Skyggekort_40cm",name:"SDFE Terrain Shadow Map (40 cm)",type:"wms",template:"https://kortforsyningen.kms.dk/dhm?login=OpenStreetMapDK2015&password=Gall4Peters&FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=dhm_terraen_skyggekort&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,20],polygon:[[[8.37439,54.95517],[8.36838,55.40421],[8.2104,55.40398],[8.20873,55.49373],[8.05027,55.49247],[8.01851,56.75014],[8.18192,56.75099],[8.17633,57.02089],[8.34133,57.02199],[8.33925,57.11196],[8.50544,57.11232],[8.50339,57.20205],[9.33163,57.20276],[9.33191,57.29248],[9.49789,57.29196],[9.49886,57.38206],[9.66497,57.38116],[9.66873,57.56056],[9.8352,57.55963],[9.83749,57.64933],[10.17257,57.64628],[10.17542,57.73678],[10.51183,57.73303],[10.51521,57.82289],[10.68349,57.82077],[10.67516,57.6412],[10.5077,57.64331],[10.504,57.55351],[10.67104,57.55141],[10.65078,57.10245],[10.48577,57.10451],[10.47862,56.92491],[10.3144,56.92676],[10.31123,56.83693],[10.47503,56.83509],[10.4649,56.56567],[10.95242,56.55898],[10.94792,56.46922],[11.10993,56.46647],[11.10526,56.37683],[10.94299,56.37953],[10.93412,56.19948],[10.77197,56.20202],[10.76948,56.11201],[10.60797,56.11503],[10.44667,56.11672],[10.28659,56.11868],[10.28315,56.02819],[10.44393,56.02704],[10.44177,55.75792],[10.4335,55.66935],[10.74381,55.66469],[10.74381,55.57123],[10.8969,55.57123],[10.90518,55.39539],[11.06137,55.38128],[11.0593,55.11241],[11.04586,55.03186],[11.20308,55.02475],[11.20308,55.11714],[11.0593,55.11241],[11.06137,55.38128],[11.07896,55.57123],[10.8969,55.57123],[10.92587,55.66702],[10.74381,55.66469],[10.75623,55.75792],[10.44177,55.75792],[10.44393,56.02704],[10.44667,56.11672],[10.60797,56.11503],[10.60521,56.02475],[10.92587,56.02012],[10.91971,55.93094],[11.08028,55.92792],[11.08581,56.01783],[11.7265,56.00506],[11.732,56.09521],[12.05403,56.08713],[12.06085,56.17626],[12.70235,56.15944],[12.66111,55.71143],[12.97923,55.7014],[12.96129,55.52173],[12.32687,55.54121],[12.32061,55.45137],[12.47782,55.44707],[12.47024,55.35705],[12.62697,55.35238],[12.62009,55.26326],[12.46273,55.26722],[12.45529,55.17782],[12.2987,55.18223],[12.28973,55.09236],[12.60486,55.08329],[12.5872,54.90363],[12.27666,54.9119],[12.26102,54.73316],[12.10707,54.73782],[12.08586,54.46817],[11.7795,54.47536],[11.78374,54.56548],[11.16585,54.57822],[11.17064,54.66865],[10.86172,54.6734],[10.86512,54.76347],[10.77136,54.76439],[10.77073,54.73728],[10.75514,54.73758],[10.7544,54.71957],[10.73891,54.71976],[10.73844,54.71085],[10.70745,54.7113],[10.70411,54.67567],[10.5511,54.67817],[10.55472,54.76702],[10.2424,54.77059],[10.24598,54.86047],[10.09023,54.86221],[10.08737,54.77239],[9.15558,54.77696],[9.15628,54.86754],[8.5322,54.86638],[8.53143,54.95516],[8.37439,54.95517]],[[11.45777,56.81955],[11.78492,56.81274],[11.77167,56.63328],[11.44596,56.64011],[11.45777,56.81955]],[[11.32747,57.3613],[11.31618,57.1818],[11.15087,57.18473],[11.14566,57.09496],[10.81577,57.10017],[10.82906,57.36953],[11.32747,57.3613]],[[11.58433,56.27779],[11.57829,56.18804],[11.73923,56.18458],[11.74564,56.27432],[11.58433,56.27779]],[[14.68259,55.36394],[14.83952,55.35652],[14.82638,55.26713],[15.13934,55.25174],[15.1532,55.34108],[15.30992,55.33306],[15.29572,55.24374],[15.13934,55.25174],[15.12556,55.16238],[15.28158,55.15442],[15.25356,54.97576],[14.63175,55.00625],[14.68259,55.36394]]],terms_text:"Geodatastyrelsen og Danske Kommuner",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/dk/SDFESkrmkort.png"},{id:"Sicily-ATA2007",name:"Sicily - Italy",type:"wms",template:"http://map.sitr.regione.sicilia.it/ArcGIS/services/WGS84_F33/Ortofoto_ATA20072008_f33/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=0&STYLES=default&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[15.71165,38.25894],[15.23718,38.81938],[14.27124,38.55246],[13.15063,38.75408],[11.96411,37.97451],[12.52441,37.54022],[11.87897,36.79609],[12.49695,35.47409],[12.68921,35.46962],[14.57336,36.66401],[15.29709,36.62875],[15.39854,37.42171],[15.71165,38.25894]]]},{id:"Siemianowice_Slaskie-buildings",name:"Siemianowice Śląskie: Buildings",type:"wms",template:"https://siemianowice.geoportal2.pl/map/wms/wms.php?FORMAT=image/png&transparent=true&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=budynki,drogi,adresy,ulice&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,19],polygon:[[[19.03103,50.33933],[19.0316,50.35413],[19.0656,50.35373],[19.06529,50.34219],[19.06118,50.33749],[19.06069,50.31967],[19.05603,50.31975],[19.05562,50.30155],[19.06432,50.3015],[19.06366,50.27175],[19.04379,50.27179],[19.04375,50.27478],[19.0213,50.27505],[19.02156,50.28398],[19.01027,50.28856],[18.98791,50.28871],[18.98822,50.3022],[18.98143,50.30226],[18.98213,50.33977],[19.03103,50.33933]]],terms_text:"Urząd Miasta Siemianowice Śląskie"},{id:"Siemianowice_Slaskie-aerial_image",name:"Siemianowice Śląskie: Orthophotomap (aerial image)",type:"wms",template:"https://siemianowice.geoportal2.pl/map/wms/wms.php?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortofotomapa&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,23],polygon:[[[19.03103,50.33933],[19.0316,50.35413],[19.0656,50.35373],[19.06529,50.34219],[19.06118,50.33749],[19.06069,50.31967],[19.05603,50.31975],[19.05562,50.30155],[19.06432,50.3015],[19.06366,50.27175],[19.04379,50.27179],[19.04375,50.27478],[19.0213,50.27505],[19.02156,50.28398],[19.01027,50.28856],[18.98791,50.28871],[18.98822,50.3022],[18.98143,50.30226],[18.98213,50.33977],[19.03103,50.33933]]],terms_text:"Urząd Miasta Siemianowice Śląskie"},{id:"sc2012",name:"SIG Santa Catarina OrtoRGB 2012",type:"wms",template:"http://sigsc.sc.gov.br/sigserver/SIGSC/wms?SERVICE=WMS&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=OrtoRGB-Landsat-2012&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",polygon:[[[-48.62488,-26.91624],[-48.62416,-26.83409],[-48.56163,-26.83412],[-48.56165,-26.74919],[-48.62675,-26.74918],[-48.62715,-26.73276],[-48.64126,-26.733],[-48.64174,-26.70912],[-48.62414,-26.70913],[-48.62418,-26.50079],[-48.57099,-26.50077],[-48.57155,-26.47415],[-48.55418,-26.47381],[-48.5545,-26.45736],[-48.56155,-26.45747],[-48.56161,-26.41746],[-48.4991,-26.41747],[-48.49909,-26.25081],[-48.43664,-26.25079],[-48.43661,-26.20752],[-48.4601,-26.20751],[-48.46195,-26.1242],[-48.56161,-26.12419],[-48.56163,-25.95753],[-48.62411,-25.95753],[-48.62411,-25.94507],[-48.68838,-25.94607],[-48.6884,-25.95752],[-49.25089,-25.95752],[-49.2509,-25.9992],[-49.31339,-25.9992],[-49.31338,-26.0825],[-49.37591,-26.0825],[-49.37591,-26.12419],[-49.50093,-26.12418],[-49.50092,-26.16586],[-49.68661,-26.16585],[-49.68661,-26.12417],[-49.74907,-26.08246],[-49.74908,-26.04084],[-49.8116,-26.04085],[-49.81159,-25.99918],[-49.93657,-25.99915],[-49.93661,-25.98244],[-50.00091,-25.98288],[-50.00094,-25.99915],[-50.31338,-25.99916],[-50.31342,-26.04083],[-50.37411,-26.04084],[-50.3741,-25.9992],[-50.49914,-25.99918],[-50.49911,-25.98414],[-50.62593,-25.98452],[-50.62595,-26.04084],[-50.6884,-26.04161],[-50.68845,-26.12416],[-50.75094,-26.12414],[-50.75095,-26.20752],[-51.12595,-26.20747],[-51.12595,-26.24913],[-51.18848,-26.24918],[-51.31344,-26.33245],[-51.31347,-26.62414],[-51.4366,-26.62415],[-51.43659,-26.56476],[-51.62409,-26.5641],[-51.62411,-26.5408],[-51.99907,-26.5408],[-52.06158,-26.49911],[-52.06158,-26.45747],[-52.12408,-26.45749],[-52.12406,-26.41579],[-52.37407,-26.4158],[-52.37409,-26.39133],[-52.56156,-26.3894],[-52.56158,-26.37415],[-52.62408,-26.37417],[-52.62409,-26.33247],[-53.12408,-26.33247],[-53.1241,-26.31707],[-53.1618,-26.3165],[-53.16136,-26.29082],[-53.18656,-26.29083],[-53.24907,-26.24911],[-53.24906,-26.23919],[-53.31159,-26.23824],[-53.3741,-26.22882],[-53.43845,-26.22777],[-53.43843,-26.24914],[-53.5616,-26.24916],[-53.56159,-26.23983],[-53.65501,-26.23814],[-53.65623,-26.29263],[-53.67011,-26.31684],[-53.68846,-26.33242],[-53.70322,-26.3741],[-53.70929,-26.38449],[-53.7098,-26.39568],[-53.70619,-26.40722],[-53.70721,-26.45927],[-53.71438,-26.46168],[-53.71476,-26.48118],[-53.73047,-26.49913],[-53.73146,-26.54081],[-53.75096,-26.5408],[-53.75095,-26.62417],[-53.7602,-26.62414],[-53.76125,-26.6675],[-53.75098,-26.66751],[-53.75096,-26.74298],[-53.72737,-26.7434],[-53.72133,-26.74905],[-53.72141,-26.75093],[-53.74571,-26.75943],[-53.74612,-26.77704],[-53.71948,-26.77755],[-53.72084,-26.83416],[-53.70047,-26.83414],[-53.70277,-26.93108],[-53.71168,-26.93091],[-53.71224,-26.95557],[-53.751,-26.95479],[-53.75092,-26.99915],[-53.76467,-26.99915],[-53.8037,-27.03751],[-53.80454,-27.07258],[-53.80809,-27.07249],[-53.80862,-27.09613],[-53.8269,-27.09577],[-53.82762,-27.12414],[-53.84644,-27.12413],[-53.84765,-27.17014],[-53.83506,-27.18932],[-53.83536,-27.20054],[-53.68847,-27.20284],[-53.68849,-27.22789],[-53.43654,-27.23246],[-53.43655,-27.16751],[-53.37598,-27.16751],[-53.37601,-27.23352],[-53.24905,-27.23564],[-53.24905,-27.20922],[-53.06344,-27.20918],[-53.06345,-27.2334],[-52.81348,-27.23685],[-52.81346,-27.27653],[-52.75096,-27.27732],[-52.75096,-27.29249],[-52.4385,-27.29252],[-52.43848,-27.32689],[-52.37603,-27.32753],[-52.37599,-27.3342],[-52.25098,-27.33418],[-52.25099,-27.34669],[-52.18655,-27.34728],[-52.18657,-27.33419],[-52.12598,-27.3342],[-52.12599,-27.36413],[-52.02979,-27.36489],[-52.03036,-27.42442],[-51.97534,-27.42479],[-51.97603,-27.50088],[-51.93845,-27.50085],[-51.93845,-27.54252],[-51.68846,-27.54247],[-51.68847,-27.55742],[-51.59903,-27.5579],[-51.59923,-27.59481],[-51.56351,-27.59498],[-51.56348,-27.62586],[-51.50088,-27.62586],[-51.50095,-27.66754],[-51.43937,-27.6675],[-51.43954,-27.70932],[-51.37597,-27.7095],[-51.37601,-27.75089],[-51.31349,-27.7509],[-51.31346,-27.79253],[-51.18847,-27.79251],[-51.18848,-27.87586],[-51.12598,-27.87586],[-51.12597,-27.91752],[-51.06348,-27.9175],[-51.06347,-27.95919],[-51.00095,-28.00086],[-50.9385,-28.00086],[-50.93849,-28.16755],[-50.81346,-28.16752],[-50.81345,-28.29253],[-50.75096,-28.29251],[-50.68845,-28.33418],[-50.68849,-28.41754],[-50.626,-28.41752],[-50.56352,-28.44094],[-50.43848,-28.44051],[-50.43847,-28.45917],[-50.37597,-28.45921],[-50.37598,-28.47554],[-50.18844,-28.47454],[-50.18849,-28.51143],[-50.12398,-28.51104],[-50.12402,-28.50086],[-49.87597,-28.50085],[-49.87601,-28.5142],[-49.81347,-28.51369],[-49.81347,-28.58255],[-49.83003,-28.58251],[-49.82951,-28.62597],[-49.8759,-28.66572],[-50.001,-28.74915],[-50.001,-29.04083],[-50.03319,-29.04081],[-50.03219,-29.14711],[-50.12602,-29.14774],[-50.12598,-29.16579],[-50.13613,-29.16581],[-50.1885,-29.19623],[-50.1885,-29.31905],[-50.1422,-29.31873],[-50.14208,-29.33422],[-50.126,-29.33418],[-50.12599,-29.36238],[-49.99906,-29.36153],[-49.99904,-29.24031],[-49.93848,-29.23986],[-49.93851,-29.25087],[-49.87601,-29.25087],[-49.876,-29.30098],[-49.82262,-29.30052],[-49.82227,-29.33419],[-49.81347,-29.33422],[-49.81354,-29.3411],[-49.68654,-29.33991],[-49.68651,-29.29255],[-49.62399,-29.29252],[-49.62398,-29.25085],[-49.56149,-29.25083],[-49.56145,-29.16749],[-49.49901,-29.16746],[-49.49902,-29.08419],[-49.4365,-29.08418],[-49.43651,-29.04251],[-49.37405,-29.04248],[-49.37402,-28.9592],[-49.31153,-28.95917],[-49.31152,-28.91749],[-49.24898,-28.9175],[-49.24897,-28.87582],[-49.18655,-28.87585],[-49.18653,-28.83414],[-49.12402,-28.83418],[-49.12401,-28.7925],[-49.06149,-28.79247],[-49.06146,-28.75084],[-48.99903,-28.75085],[-48.99903,-28.70919],[-48.93658,-28.70918],[-48.93658,-28.66752],[-48.87405,-28.66751],[-48.87404,-28.62585],[-48.74912,-28.62585],[-48.74912,-28.54254],[-48.68656,-28.54253],[-48.68658,-28.33417],[-48.62408,-28.33416],[-48.62406,-28.08418],[-48.5616,-28.08418],[-48.56159,-27.95919],[-48.49905,-27.95916],[-48.49904,-27.91581],[-48.56157,-27.9158],[-48.5616,-27.87584],[-48.49902,-27.87586],[-48.49902,-27.83422],[-48.43657,-27.83418],[-48.43661,-27.62583],[-48.37406,-27.62585],[-48.37405,-27.50086],[-48.31157,-27.50086],[-48.31153,-27.24913],[-48.43657,-27.24913],[-48.43654,-27.20916],[-48.37402,-27.2092],[-48.37405,-27.1658],[-48.43656,-27.1658],[-48.43656,-27.12415],[-48.49906,-27.12413],[-48.49907,-27.08667],[-48.50022,-27.08666],[-48.50031,-27.08247],[-48.5616,-27.08248],[-48.56159,-27.04252],[-48.49906,-27.04252],[-48.49906,-26.99913],[-48.56156,-26.99913],[-48.56157,-26.91579],[-48.62488,-26.91624]]],terms_url:"http://sigsc.sds.sc.gov.br/download/termo_sigsc.pdf",terms_text:"Sistema de Informações Geográficas - Governo de Santa Catarina"},{id:"SIGIP-2012",name:"SIGIP - Orthophoto 2012",type:"tms",template:"http://osmdata.asitvd.ch/tiles/sigip2012/{zoom}/{x}/{y}.png",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",zoomExtent:[14,20],polygon:[[[6.71057,46.54396],[6.72968,46.54408],[6.72995,46.52605],[6.71085,46.52596],[6.71113,46.50796],[6.6922,46.50788],[6.6923,46.49883],[6.63531,46.49847],[6.63488,46.52547],[6.65381,46.52558],[6.65361,46.54358],[6.69163,46.54384],[6.69155,46.55284],[6.71047,46.55293],[6.71057,46.54396]]],terms_url:"https://www.sigip.ch/",terms_text:"SIGIP"},{id:"Slovakia-Historic-Maps",name:"Slovakia Historic Maps",type:"tms",template:"http://tms.freemap.sk/historicke/{zoom}/{x}/{y}.png",zoomExtent:[0,12],polygon:[[[16.81969,47.49272],[16.81969,49.50303],[22.83883,49.50303],[22.83883,47.49272],[16.81969,47.49272]]],icon:"https://raw.githubusercontent.com/FreemapSlovakia/freemap-v3-react/master/src/images/freemap-logo-small.png"},{id:"skoterleder",name:"Snowmobile map Sweden",type:"tms",template:"https://tiles.skoterleder.org/tiles/{zoom}/{x}/{y}.png",zoomExtent:[5,14],polygon:[[[12.80182,55.19612],[14.22729,55.27286],[18.44604,56.69244],[19.74242,57.98481],[20.0061,59.5371],[19.08394,60.19308],[20.49499,63.2497],[23.87328,65.21069],[30.14647,65.19226],[30.19042,67.62596],[29.43236,69.62651],[27.93822,70.14037],[20.73119,69.2756],[18.08349,68.5644],[16.50145,67.88382],[14.43602,66.14275],[11.82128,63.30775],[12.20031,60.31063],[10.62377,58.5482],[12.64251,56.03062],[12.80182,55.19612]]],terms_url:"https://skoterleder.org/",terms_text:"© Skoterleder.org",description:"Snowmobile trails",icon:"https://upload.wikimedia.org/wikipedia/commons/thumb/8/8f/Sweden_road_sign_D9.svg/200px-Sweden_road_sign_D9.svg.png"},{id:"Soskut_Pusztazamor_Tarnok_Diosd_orto_2017",name:"Sóskút, Pusztazámor, Tárnok, Diósd ortophoto 2017",type:"tms",template:"http://adam.openstreetmap.hu/mapproxy/tiles/1.0.0/Soskut-Tarnok-Pusztazamor-Diosd/mercator/{zoom}/{x}/{y}.png",endDate:"2017-03-01T00:00:00.000Z",startDate:"2017-03-01T00:00:00.000Z",zoomExtent:[11,20],polygon:[[[18.79273,47.37079],[18.79194,47.37048],[18.79139,47.37063],[18.79011,47.37176],[18.78916,47.37345],[18.78722,47.37566],[18.78603,47.37765],[18.78498,47.37905],[18.7837,47.38032],[18.78267,47.38195],[18.7814,47.38368],[18.77934,47.38713],[18.77666,47.3894],[18.76472,47.3967],[18.7617,47.39966],[18.75631,47.40328],[18.75837,47.40653],[18.7588,47.40776],[18.762,47.41217],[18.76304,47.41315],[18.76593,47.41471],[18.77041,47.41766],[18.77247,47.41809],[18.77248,47.4203],[18.8086,47.44041],[18.81742,47.43539],[18.82092,47.43572],[18.82804,47.43755],[18.83021,47.43526],[18.83585,47.43754],[18.84049,47.43346],[18.84765,47.43572],[18.851,47.43281],[18.869,47.43961],[18.87361,47.43597],[18.87499,47.43342],[18.87386,47.43248],[18.87604,47.42797],[18.8605,47.423],[18.86621,47.41798],[18.87243,47.41086],[18.8663,47.40773],[18.86964,47.40471],[18.86777,47.40207],[18.86509,47.40052],[18.87081,47.39838],[18.86772,47.39699],[18.86992,47.39655],[18.87649,47.39478],[18.87749,47.39495],[18.87867,47.39462],[18.88358,47.38996],[18.88291,47.38967],[18.88539,47.3853],[18.87748,47.38339],[18.88181,47.37605],[18.87914,47.37393],[18.88638,47.36923],[18.88206,47.36773],[18.87973,47.36641],[18.8747,47.36252],[18.87282,47.36137],[18.87028,47.36063],[18.86688,47.35853],[18.86234,47.35637],[18.85567,47.35199],[18.84874,47.34728],[18.83192,47.33841],[18.82497,47.34258],[18.8162,47.34925],[18.81079,47.35357],[18.80823,47.356],[18.80645,47.35854],[18.80708,47.35902],[18.80635,47.36021],[18.80465,47.36175],[18.80381,47.36335],[18.80055,47.36545],[18.79988,47.36617],[18.79416,47.36975],[18.79273,47.37079]],[[18.91871,47.40938],[18.91826,47.40998],[18.92067,47.41156],[18.9251,47.41372],[18.93473,47.41917],[18.94063,47.42241],[18.94982,47.41938],[18.95155,47.4175],[18.9569,47.41923],[18.9577,47.41878],[18.95755,47.41435],[18.96211,47.40507],[18.96266,47.40118],[18.96316,47.39903],[18.95446,47.39673],[18.95276,47.39526],[18.95202,47.39362],[18.95119,47.39356],[18.94692,47.39799],[18.94411,47.39845],[18.94161,47.39869],[18.93735,47.39633],[18.93617,47.39683],[18.93122,47.4],[18.9312,47.40023],[18.92924,47.40205],[18.92561,47.40605],[18.92466,47.40635],[18.92293,47.40926],[18.91871,47.40938]]],terms_url:"http://fototerkep.hu",terms_text:"Fototerkep.hu",best:true,description:"5 cm resolution bald image of 4 settlement"},{id:"South_Africa-CD_NGI-Aerial",name:"South Africa CD:NGI Aerial",type:"tms",template:"http://{switch:a,b,c}.aerial.openstreetmap.org.za/ngi-aerial/{zoom}/{x}/{y}.jpg",zoomExtent:[1,22],polygon:[[[17.83968,-32.79834],[17.88935,-32.69728],[18.00364,-32.69822],[18.09917,-32.74853],[18.28987,-32.55266],[18.29302,-32.04871],[18.10545,-31.6455],[17.85293,-31.3444],[17.548,-30.90217],[17.40445,-30.63747],[17.24937,-30.39917],[16.9937,-29.65436],[16.7988,-29.19437],[16.54941,-28.84159],[16.44987,-28.69188],[16.4491,-28.55158],[16.60026,-28.48257],[16.75141,-28.4487],[16.74622,-28.2459],[16.88551,-28.04729],[16.99295,-28.0244],[17.05297,-28.02571],[17.10076,-28.03388],[17.20115,-28.09305],[17.20263,-28.23284],[17.24746,-28.23382],[17.2508,-28.19889],[17.35119,-28.19759],[17.35156,-28.24427],[17.40158,-28.24524],[17.41491,-28.34898],[17.40083,-28.548],[17.4527,-28.54897],[17.45121,-28.64951],[17.49836,-28.68721],[17.60282,-28.683],[17.64997,-28.69679],[17.65259,-28.73815],[17.80139,-28.73815],[17.99943,-28.75606],[18.00027,-28.79562],[18.15745,-28.87181],[18.50638,-28.87181],[18.61536,-28.82959],[18.90875,-28.82775],[19.1047,-28.94885],[19.19691,-28.93785],[19.24301,-28.85162],[19.23149,-28.80296],[19.25873,-28.70099],[19.44315,-28.69732],[19.55003,-28.49583],[19.69673,-28.49399],[19.69882,-28.44794],[19.85076,-28.44333],[19.84971,-28.40278],[19.99536,-28.39909],[19.98937,-24.74979],[20.29167,-24.91923],[20.47246,-25.15017],[20.65324,-25.45294],[20.73326,-25.6802],[20.8281,-25.89635],[20.84292,-26.21585],[20.65028,-26.48409],[20.65324,-26.82049],[21.08891,-26.84693],[21.67277,-26.839],[21.7765,-26.66963],[21.97211,-26.64314],[22.28034,-26.32747],[22.57078,-26.1334],[22.77528,-25.67752],[23.00052,-25.27619],[23.46583,-25.27351],[23.88372,-25.59737],[24.2364,-25.6134],[24.60391,-25.78966],[25.1107,-25.73894],[25.50784,-25.68554],[25.64418,-25.48238],[25.84193,-24.78054],[25.84664,-24.75385],[26.39285,-24.63329],[26.47391,-24.56533],[26.509,-24.48424],[26.58619,-24.40758],[26.73006,-24.30145],[26.85674,-24.24995],[26.85744,-24.10269],[26.92155,-23.8991],[26.93183,-23.84619],[26.97148,-23.69943],[27.00061,-23.63676],[27.0578,-23.60526],[27.13605,-23.52034],[27.33396,-23.39738],[27.51441,-23.35939],[27.59581,-23.20855],[27.80986,-23.0995],[27.88285,-23.06205],[27.93829,-22.94965],[28.04076,-22.82551],[28.20568,-22.65529],[28.33972,-22.56394],[28.49061,-22.5607],[28.61088,-22.54002],[28.82818,-22.45502],[28.92853,-22.42323],[28.95941,-22.30901],[29.01626,-22.20834],[29.23241,-22.16935],[29.35312,-22.18429],[29.6549,-22.11864],[29.77771,-22.1362],[29.9293,-22.18494],[30.11668,-22.28303],[30.25634,-22.29148],[30.30336,-22.33952],[30.50618,-22.30576],[30.83743,-22.28498],[31.00586,-22.30771],[31.18342,-22.32329],[31.29306,-22.36746],[31.56806,-23.19034],[31.55683,-23.44308],[31.69311,-23.61752],[31.71197,-23.74114],[31.77747,-23.88006],[31.88863,-23.94811],[31.91444,-24.17467],[31.99483,-24.30409],[32.01667,-24.4406],[32.00773,-24.65366],[32.01964,-24.91407],[32.03552,-25.08498],[32.01964,-25.38214],[31.99285,-25.44938],[31.99979,-25.51657],[32.00575,-25.6079],[32.00575,-25.66248],[31.93627,-25.84037],[31.98094,-25.95465],[31.86878,-26.00373],[31.41621,-25.72777],[31.32291,-25.74386],[31.25046,-25.82965],[31.1393,-25.91627],[31.11647,-25.99124],[30.96561,-26.26658],[30.89217,-26.32797],[30.85346,-26.40356],[30.82269,-26.44888],[30.80226,-26.52407],[30.80384,-26.80821],[30.90209,-26.78075],[30.91003,-26.84895],[30.98249,-26.90826],[30.97653,-27.00292],[31.00344,-27.04416],[31.15433,-27.19804],[31.50156,-27.31112],[31.97002,-27.31112],[31.97002,-27.12047],[31.97697,-27.05066],[32.00025,-26.79839],[32.10698,-26.79846],[32.31145,-26.84795],[32.89999,-26.85161],[32.88609,-26.9817],[32.70943,-27.47854],[32.62407,-27.77751],[32.5814,-28.07479],[32.53872,-28.2288],[32.42756,-28.50216],[32.36404,-28.59457],[32.07026,-28.84698],[31.98788,-28.90695],[31.77648,-28.96949],[31.46385,-29.28593],[31.35963,-29.38543],[31.16808,-29.63074],[31.06486,-29.78935],[31.05345,-29.84705],[31.06699,-29.86403],[31.04555,-29.9502],[30.95186,-30.00339],[30.86518,-30.10241],[30.72447,-30.3925],[30.35563,-30.93089],[30.09724,-31.24583],[29.86731,-31.43043],[29.74094,-31.50147],[29.48131,-31.69787],[28.89432,-32.28989],[28.54971,-32.58946],[28.14365,-32.83207],[28.07487,-32.94169],[27.84509,-33.08287],[27.3758,-33.38607],[26.88054,-33.6459],[26.59169,-33.74808],[26.45273,-33.79358],[26.20675,-33.75489],[26.00779,-33.7224],[25.80555,-33.75243],[25.75111,-33.80065],[25.65291,-33.85436],[25.65291,-33.94698],[25.71958,-34.00401],[25.72028,-34.05112],[25.55089,-34.06315],[25.35046,-34.05026],[25.28106,-34.00203],[25.04763,-33.99946],[24.95472,-34.00436],[24.94966,-34.10104],[24.87704,-34.15065],[24.87629,-34.20053],[24.85326,-34.21896],[24.76453,-34.20179],[24.50014,-34.20033],[24.34867,-34.11638],[24.19888,-34.1019],[23.99634,-34.05144],[23.80175,-34.05243],[23.74936,-34.01119],[23.49735,-34.00901],[23.41552,-34.04346],[23.41543,-34.11404],[22.90009,-34.0993],[22.84124,-34.05479],[22.64703,-34.05026],[22.64598,-34.00728],[22.57002,-34.00641],[22.50505,-34.06459],[22.252,-34.06459],[22.22213,-34.10147],[22.16212,-34.1057],[22.17124,-34.15218],[22.15769,-34.21809],[22.00156,-34.21722],[21.9497,-34.322],[21.86115,-34.40071],[21.56147,-34.40201],[21.5468,-34.36612],[21.50174,-34.36699],[21.5007,-34.40201],[21.41949,-34.44652],[21.19787,-34.44782],[21.09882,-34.39913],[21.00337,-34.37539],[20.89319,-34.39971],[20.89766,-34.4854],[20.74468,-34.48281],[20.5042,-34.48626],[20.25272,-34.70148],[20.08035,-34.83619],[19.99233,-34.83791],[19.89907,-34.82758],[19.89383,-34.7936],[19.5973,-34.79618],[19.39297,-34.64202],[19.28771,-34.64048],[19.28614,-34.59866],[19.34744,-34.52445],[19.32853,-34.45344],[19.098,-34.44998],[19.07256,-34.38024],[19.00235,-34.35256],[18.95206,-34.39494],[18.7975,-34.39364],[18.79842,-34.10164],[18.50175,-34.10153],[18.49995,-34.36169],[18.44773,-34.362],[18.44799,-34.35227],[18.39744,-34.3514],[18.39717,-34.3023],[18.35657,-34.30056],[18.34793,-34.20204],[18.29721,-34.19503],[18.29511,-33.99371],[18.33745,-33.99141],[18.34766,-33.84924],[18.34793,-33.78155],[18.41247,-33.74488],[18.36155,-33.65016],[18.2992,-33.58559],[18.21668,-33.44887],[18.13899,-33.39741],[17.94735,-33.16026],[17.88552,-33.05757],[17.84859,-32.96685],[17.83968,-32.85073],[17.83968,-32.79834]]],best:true},{id:"South-Tyrol-Orthofoto2011",name:"South Tyrol Orthofoto 2011",type:"tms",template:"https://geoservices.buergernetz.bz.it/geoserver/gwc/service/wmts/?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=P_BZ_OF_2011_EPSG3857&STYLE=default&TILEMATRIXSET=GoogleMapsCompatible&TILEMATRIX=GoogleMapsCompatible%3A{zoom}&TILEROW={y}&TILECOL={x}&FORMAT=image%2Fjpeg",endDate:"2011-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",zoomExtent:[0,18],polygon:[[[10.38615,46.68821],[10.39201,46.69016],[10.40215,46.70624],[10.41274,46.70821],[10.41622,46.71479],[10.4168,46.71847],[10.39934,46.73435],[10.43464,46.75356],[10.44107,46.75413],[10.44011,46.77149],[10.42123,46.78861],[10.42845,46.79755],[10.43851,46.79869],[10.44925,46.80462],[10.45602,46.81635],[10.45438,46.82221],[10.4583,46.82478],[10.45513,46.83059],[10.45906,46.83548],[10.46483,46.83624],[10.46229,46.8413],[10.46987,46.84933],[10.46819,46.8553],[10.47838,46.86013],[10.48372,46.85543],[10.49628,46.85305],[10.49931,46.84857],[10.52124,46.84653],[10.5527,46.8511],[10.55795,46.84695],[10.55264,46.8408],[10.55536,46.84087],[10.58883,46.85125],[10.59502,46.85829],[10.60936,46.8597],[10.62441,46.86558],[10.64858,46.86655],[10.66787,46.87651],[10.67297,46.87138],[10.69112,46.86861],[10.69786,46.86339],[10.69508,46.85308],[10.70594,46.84786],[10.71763,46.84795],[10.72333,46.83892],[10.75621,46.83383],[10.76481,46.82409],[10.76387,46.81971],[10.75239,46.81387],[10.74506,46.80223],[10.7276,46.79709],[10.73122,46.78925],[10.75722,46.78624],[10.77744,46.79149],[10.78678,46.79735],[10.81439,46.77662],[10.82479,46.77472],[10.83129,46.78138],[10.84112,46.78282],[10.85354,46.77506],[10.86845,46.77313],[10.86993,46.7669],[10.88294,46.76393],[10.88962,46.76529],[10.8951,46.77092],[10.90527,46.76911],[10.92299,46.7764],[10.92821,46.77408],[10.94388,46.77648],[10.97522,46.77361],[10.97932,46.77014],[10.99475,46.76804],[11.01397,46.77317],[11.02328,46.76715],[11.0346,46.79428],[11.04234,46.801],[11.03792,46.80562],[11.05633,46.80928],[11.07279,46.82092],[11.08171,46.82252],[11.0762,46.83384],[11.06887,46.83793],[11.07303,46.84345],[11.06988,46.85348],[11.08742,46.87927],[11.09961,46.88922],[11.09538,46.89178],[11.09795,46.89844],[11.0946,46.91247],[11.10792,46.91706],[11.10804,46.92632],[11.11418,46.93234],[11.13851,46.92865],[11.16322,46.94091],[11.16642,46.94479],[11.16114,46.94979],[11.1637,46.96677],[11.17598,46.96367],[11.18658,46.97062],[11.19527,46.97152],[11.20418,46.96877],[11.20688,46.96403],[11.22047,46.97025],[11.24139,46.9708],[11.24865,46.97517],[11.25582,46.97535],[11.26272,46.98169],[11.27662,46.98168],[11.28762,46.98699],[11.30709,46.98525],[11.3205,46.99345],[11.33765,46.98606],[11.34516,46.99169],[11.35932,46.99154],[11.37697,46.98025],[11.38324,46.97168],[11.40465,46.96609],[11.43929,46.97601],[11.45134,46.99294],[11.46803,46.99582],[11.46859,47.003],[11.47831,47.01201],[11.50238,47.01073],[11.50313,47.00808],[11.51366,47.00595],[11.51679,47.00091],[11.53381,46.99233],[11.53846,46.98519],[11.55297,46.99149],[11.57663,46.99657],[11.58,47.00277],[11.58879,47.00641],[11.59901,47.00657],[11.60944,47.01207],[11.62697,47.01437],[11.63629,47.00383],[11.66542,46.99304],[11.6885,46.99658],[11.71226,46.99416],[11.72897,46.97322],[11.74698,46.97013],[11.76411,46.97412],[11.78106,46.99342],[11.81526,46.991],[11.83564,46.99417],[11.84396,47.0025],[11.85192,47.0014],[11.86722,47.01252],[11.87393,47.01136],[11.8794,47.01714],[11.89137,47.01728],[11.91627,47.03422],[11.9329,47.03864],[11.94688,47.03464],[11.95457,47.04374],[11.96773,47.04158],[11.97912,47.0511],[11.98587,47.04815],[11.99534,47.05064],[12.02037,47.04821],[12.02968,47.05127],[12.03353,47.0583],[12.04276,47.06228],[12.07543,47.0605],[12.08035,47.06951],[12.09308,47.07791],[12.10329,47.07931],[12.11867,47.07445],[12.13561,47.08171],[12.15125,47.08049],[12.15997,47.08267],[12.18589,47.09322],[12.2278,47.08302],[12.24228,47.06892],[12.23786,47.0644],[12.21821,47.05795],[12.2182,47.04483],[12.20552,47.02595],[12.18048,47.02414],[12.16423,47.01782],[12.14786,47.02357],[12.12723,47.01218],[12.12285,47.00662],[12.1322,46.99339],[12.12974,46.98593],[12.13977,46.982],[12.13808,46.96514],[12.13328,46.96292],[12.13882,46.95764],[12.15927,46.95133],[12.1702,46.93758],[12.15414,46.91654],[12.14675,46.91413],[12.16205,46.908],[12.16959,46.91121],[12.19154,46.90682],[12.20106,46.8965],[12.2022,46.88806],[12.21663,46.87517],[12.22147,46.88084],[12.23125,46.88146],[12.2345,46.88919],[12.24162,46.89192],[12.27486,46.88512],[12.27979,46.87921],[12.27736,46.87319],[12.29326,46.86566],[12.2912,46.85704],[12.29733,46.84455],[12.30833,46.84137],[12.30726,46.83271],[12.285,46.81503],[12.29383,46.8027],[12.28905,46.79948],[12.28889,46.79427],[12.28232,46.79153],[12.28539,46.7839],[12.30943,46.78603],[12.35837,46.77583],[12.37036,46.74163],[12.38475,46.71745],[12.40283,46.70811],[12.41103,46.70701],[12.41522,46.70163],[12.42862,46.6997],[12.42943,46.69567],[12.44268,46.68979],[12.47501,46.68756],[12.4795,46.67969],[12.43473,46.66714],[12.40648,46.64167],[12.38115,46.64183],[12.37944,46.63733],[12.3915,46.62765],[12.38577,46.62154],[12.35939,46.61829],[12.34465,46.62376],[12.34034,46.63022],[12.33578,46.62732],[12.3172,46.62876],[12.31785,46.62355],[12.30802,46.61811],[12.28413,46.61623],[12.26982,46.62003],[12.25931,46.62809],[12.24502,46.62326],[12.24198,46.61586],[12.21241,46.60918],[12.20444,46.59836],[12.19228,46.59321],[12.19261,46.62059],[12.1818,46.6192],[12.17117,46.63275],[12.16062,46.63574],[12.1511,46.63215],[12.1436,46.6327],[12.13739,46.64122],[12.12342,46.64475],[12.10949,46.65204],[12.10609,46.65783],[12.09345,46.66123],[12.08826,46.66638],[12.07985,46.66686],[12.07038,46.67386],[12.07173,46.66064],[12.06686,46.65364],[12.07479,46.64329],[12.06837,46.63997],[12.06495,46.62121],[12.05448,46.61778],[12.05318,46.60989],[12.04613,46.60716],[12.05043,46.60016],[12.04763,46.58357],[12.03665,46.57668],[12.0266,46.55871],[12.02189,46.55791],[11.99941,46.53208],[11.99411,46.53345],[11.98704,46.54417],[11.96633,46.54363],[11.95094,46.53869],[11.94719,46.52879],[11.94147,46.52689],[11.93294,46.52631],[11.9121,46.532],[11.8904,46.52175],[11.85192,46.51682],[11.82849,46.50783],[11.82334,46.51315],[11.82391,46.52141],[11.81086,46.53146],[11.79385,46.52023],[11.79189,46.51322],[11.76157,46.50503],[11.74317,46.50391],[11.73202,46.50877],[11.71935,46.50916],[11.71524,46.51245],[11.69889,46.50218],[11.6672,46.49647],[11.64515,46.49743],[11.63849,46.50051],[11.63495,46.49486],[11.64297,46.49346],[11.65174,46.48271],[11.64536,46.47189],[11.64179,46.47439],[11.62679,46.4708],[11.62987,46.46377],[11.61882,46.44325],[11.62143,46.42539],[11.60161,46.39731],[11.60307,46.38924],[11.5932,46.38265],[11.56489,46.38018],[11.55878,46.35076],[11.55249,46.34418],[11.54423,46.34483],[11.53837,46.35015],[11.52445,46.35502],[11.47969,46.36277],[11.48052,46.3551],[11.46322,46.34922],[11.45556,46.33396],[11.42105,46.32441],[11.40517,46.32387],[11.39865,46.31426],[11.39994,46.30709],[11.39569,46.3083],[11.38188,46.30052],[11.36088,46.29906],[11.36078,46.29682],[11.38256,46.29177],[11.3871,46.28143],[11.39609,46.27423],[11.39862,46.264],[11.38756,46.26029],[11.37347,46.2629],[11.36836,46.26135],[11.35783,46.26481],[11.35495,46.27564],[11.33912,46.28306],[11.33379,46.29049],[11.33471,46.2962],[11.3129,46.28256],[11.31737,46.27303],[11.30645,46.25786],[11.29124,46.2604],[11.24743,46.22933],[11.20622,46.2187],[11.18267,46.22496],[11.17077,46.23806],[11.17994,46.24434],[11.18351,46.25269],[11.18935,46.25354],[11.19448,46.2461],[11.20029,46.25566],[11.16604,46.26129],[11.14885,46.27904],[11.13725,46.28336],[11.14293,46.28934],[11.15847,46.29059],[11.16439,46.2986],[11.1761,46.30346],[11.1847,46.32104],[11.18894,46.32151],[11.18696,46.32673],[11.1942,46.33016],[11.20204,46.34212],[11.19001,46.35984],[11.19263,46.36578],[11.20393,46.36765],[11.19792,46.37232],[11.21275,46.39804],[11.21345,46.40675],[11.20565,46.4166],[11.21026,46.4206],[11.20347,46.42682],[11.21416,46.43556],[11.21634,46.44255],[11.20903,46.45293],[11.21419,46.45807],[11.21736,46.45731],[11.21886,46.46199],[11.21626,46.47277],[11.20939,46.481],[11.20876,46.49346],[11.19608,46.50241],[11.1924,46.501],[11.18686,46.50734],[11.18002,46.49823],[11.17014,46.49635],[11.16095,46.4878],[11.12934,46.48058],[11.1103,46.49643],[11.10449,46.4948],[11.08812,46.50128],[11.08173,46.53021],[11.05915,46.51508],[11.03795,46.51357],[11.05006,46.50784],[11.05773,46.49235],[11.06278,46.4894],[11.06894,46.46619],[11.07625,46.45487],[11.0778,46.44569],[11.07301,46.44042],[11.05394,46.44849],[11.0414,46.44569],[11.02817,46.46116],[11.00952,46.46917],[11.00462,46.47607],[10.98695,46.48289],[10.96543,46.48103],[10.95791,46.46983],[10.93819,46.46578],[10.9325,46.45831],[10.93332,46.4528],[10.91305,46.44284],[10.89161,46.44366],[10.88324,46.44995],[10.88093,46.44579],[10.87162,46.4438],[10.86174,46.43509],[10.85113,46.43817],[10.80034,46.44185],[10.78906,46.45164],[10.77835,46.47112],[10.76934,46.47609],[10.76463,46.4848],[10.75906,46.48547],[10.74422,46.48333],[10.71753,46.46022],[10.69667,46.4573],[10.68293,46.44846],[10.66821,46.45122],[10.63303,46.44309],[10.61439,46.45098],[10.60128,46.46139],[10.59995,46.46766],[10.57672,46.47237],[10.55875,46.48187],[10.54986,46.49123],[10.53685,46.49062],[10.52657,46.49425],[10.49366,46.49719],[10.48141,46.49337],[10.45714,46.5096],[10.45124,46.53083],[10.45814,46.54215],[10.47056,46.54377],[10.46954,46.54856],[10.47617,46.55749],[10.47321,46.56701],[10.48305,46.5777],[10.48575,46.58921],[10.48221,46.59199],[10.48576,46.59805],[10.48291,46.60512],[10.49055,46.61394],[10.44632,46.63989],[10.40935,46.63389],[10.40011,46.63648],[10.39873,46.6455],[10.38946,46.65862],[10.39057,46.67089],[10.3803,46.68399],[10.38615,46.68821]]],terms_url:"https://geoservices.buergernetz.bz.it/geokatalog",terms_text:"© Autonomen Provinz Bozen/Provincia Autonoma di Bolzano CC-BY 3.0"},{id:"South-Tyrol-Orthofoto2011-20cm",name:"South Tyrol Orthofoto 2011 (highres)",type:"wms",template:"https://geoservices.buergernetz.bz.it/geoserver/ows?SERVICE=WMS&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=P_BZ_OF_2011_EPSG3857,P_BZ_OF_2011_20cm_EPSG3857&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2011-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",polygon:[[[10.38615,46.68821],[10.39201,46.69016],[10.40215,46.70624],[10.41274,46.70821],[10.41622,46.71479],[10.4168,46.71847],[10.39934,46.73435],[10.43464,46.75356],[10.44107,46.75413],[10.44011,46.77149],[10.42123,46.78861],[10.42845,46.79755],[10.43851,46.79869],[10.44925,46.80462],[10.45602,46.81635],[10.45438,46.82221],[10.4583,46.82478],[10.45513,46.83059],[10.45906,46.83548],[10.46483,46.83624],[10.46229,46.8413],[10.46987,46.84933],[10.46819,46.8553],[10.47838,46.86013],[10.48372,46.85543],[10.49628,46.85305],[10.49931,46.84857],[10.52124,46.84653],[10.5527,46.8511],[10.55795,46.84695],[10.55264,46.8408],[10.55536,46.84087],[10.58883,46.85125],[10.59502,46.85829],[10.60936,46.8597],[10.62441,46.86558],[10.64858,46.86655],[10.66787,46.87651],[10.67297,46.87138],[10.69112,46.86861],[10.69786,46.86339],[10.69508,46.85308],[10.70594,46.84786],[10.71763,46.84795],[10.72333,46.83892],[10.75621,46.83383],[10.76481,46.82409],[10.76387,46.81971],[10.75239,46.81387],[10.74506,46.80223],[10.7276,46.79709],[10.73122,46.78925],[10.75722,46.78624],[10.77744,46.79149],[10.78678,46.79735],[10.81439,46.77662],[10.82479,46.77472],[10.83129,46.78138],[10.84112,46.78282],[10.85354,46.77506],[10.86845,46.77313],[10.86993,46.7669],[10.88294,46.76393],[10.88962,46.76529],[10.8951,46.77092],[10.90527,46.76911],[10.92299,46.7764],[10.92821,46.77408],[10.94388,46.77648],[10.97522,46.77361],[10.97932,46.77014],[10.99475,46.76804],[11.01397,46.77317],[11.02328,46.76715],[11.0346,46.79428],[11.04234,46.801],[11.03792,46.80562],[11.05633,46.80928],[11.07279,46.82092],[11.08171,46.82252],[11.0762,46.83384],[11.06887,46.83793],[11.07303,46.84345],[11.06988,46.85348],[11.08742,46.87927],[11.09961,46.88922],[11.09538,46.89178],[11.09795,46.89844],[11.0946,46.91247],[11.10792,46.91706],[11.10804,46.92632],[11.11418,46.93234],[11.13851,46.92865],[11.16322,46.94091],[11.16642,46.94479],[11.16114,46.94979],[11.1637,46.96677],[11.17598,46.96367],[11.18658,46.97062],[11.19527,46.97152],[11.20418,46.96877],[11.20688,46.96403],[11.22047,46.97025],[11.24139,46.9708],[11.24865,46.97517],[11.25582,46.97535],[11.26272,46.98169],[11.27662,46.98168],[11.28762,46.98699],[11.30709,46.98525],[11.3205,46.99345],[11.33765,46.98606],[11.34516,46.99169],[11.35932,46.99154],[11.37697,46.98025],[11.38324,46.97168],[11.40465,46.96609],[11.43929,46.97601],[11.45134,46.99294],[11.46803,46.99582],[11.46859,47.003],[11.47831,47.01201],[11.50238,47.01073],[11.50313,47.00808],[11.51366,47.00595],[11.51679,47.00091],[11.53381,46.99233],[11.53846,46.98519],[11.55297,46.99149],[11.57663,46.99657],[11.58,47.00277],[11.58879,47.00641],[11.59901,47.00657],[11.60944,47.01207],[11.62697,47.01437],[11.63629,47.00383],[11.66542,46.99304],[11.6885,46.99658],[11.71226,46.99416],[11.72897,46.97322],[11.74698,46.97013],[11.76411,46.97412],[11.78106,46.99342],[11.81526,46.991],[11.83564,46.99417],[11.84396,47.0025],[11.85192,47.0014],[11.86722,47.01252],[11.87393,47.01136],[11.8794,47.01714],[11.89137,47.01728],[11.91627,47.03422],[11.9329,47.03864],[11.94688,47.03464],[11.95457,47.04374],[11.96773,47.04158],[11.97912,47.0511],[11.98587,47.04815],[11.99534,47.05064],[12.02037,47.04821],[12.02968,47.05127],[12.03353,47.0583],[12.04276,47.06228],[12.07543,47.0605],[12.08035,47.06951],[12.09308,47.07791],[12.10329,47.07931],[12.11867,47.07445],[12.13561,47.08171],[12.15125,47.08049],[12.15997,47.08267],[12.18589,47.09322],[12.2278,47.08302],[12.24228,47.06892],[12.23786,47.0644],[12.21821,47.05795],[12.2182,47.04483],[12.20552,47.02595],[12.18048,47.02414],[12.16423,47.01782],[12.14786,47.02357],[12.12723,47.01218],[12.12285,47.00662],[12.1322,46.99339],[12.12974,46.98593],[12.13977,46.982],[12.13808,46.96514],[12.13328,46.96292],[12.13882,46.95764],[12.15927,46.95133],[12.1702,46.93758],[12.15414,46.91654],[12.14675,46.91413],[12.16205,46.908],[12.16959,46.91121],[12.19154,46.90682],[12.20106,46.8965],[12.2022,46.88806],[12.21663,46.87517],[12.22147,46.88084],[12.23125,46.88146],[12.2345,46.88919],[12.24162,46.89192],[12.27486,46.88512],[12.27979,46.87921],[12.27736,46.87319],[12.29326,46.86566],[12.2912,46.85704],[12.29733,46.84455],[12.30833,46.84137],[12.30726,46.83271],[12.285,46.81503],[12.29383,46.8027],[12.28905,46.79948],[12.28889,46.79427],[12.28232,46.79153],[12.28539,46.7839],[12.30943,46.78603],[12.35837,46.77583],[12.37036,46.74163],[12.38475,46.71745],[12.40283,46.70811],[12.41103,46.70701],[12.41522,46.70163],[12.42862,46.6997],[12.42943,46.69567],[12.44268,46.68979],[12.47501,46.68756],[12.4795,46.67969],[12.43473,46.66714],[12.40648,46.64167],[12.38115,46.64183],[12.37944,46.63733],[12.3915,46.62765],[12.38577,46.62154],[12.35939,46.61829],[12.34465,46.62376],[12.34034,46.63022],[12.33578,46.62732],[12.3172,46.62876],[12.31785,46.62355],[12.30802,46.61811],[12.28413,46.61623],[12.26982,46.62003],[12.25931,46.62809],[12.24502,46.62326],[12.24198,46.61586],[12.21241,46.60918],[12.20444,46.59836],[12.19228,46.59321],[12.19261,46.62059],[12.1818,46.6192],[12.17117,46.63275],[12.16062,46.63574],[12.1511,46.63215],[12.1436,46.6327],[12.13739,46.64122],[12.12342,46.64475],[12.10949,46.65204],[12.10609,46.65783],[12.09345,46.66123],[12.08826,46.66638],[12.07985,46.66686],[12.07038,46.67386],[12.07173,46.66064],[12.06686,46.65364],[12.07479,46.64329],[12.06837,46.63997],[12.06495,46.62121],[12.05448,46.61778],[12.05318,46.60989],[12.04613,46.60716],[12.05043,46.60016],[12.04763,46.58357],[12.03665,46.57668],[12.0266,46.55871],[12.02189,46.55791],[11.99941,46.53208],[11.99411,46.53345],[11.98704,46.54417],[11.96633,46.54363],[11.95094,46.53869],[11.94719,46.52879],[11.94147,46.52689],[11.93294,46.52631],[11.9121,46.532],[11.8904,46.52175],[11.85192,46.51682],[11.82849,46.50783],[11.82334,46.51315],[11.82391,46.52141],[11.81086,46.53146],[11.79385,46.52023],[11.79189,46.51322],[11.76157,46.50503],[11.74317,46.50391],[11.73202,46.50877],[11.71935,46.50916],[11.71524,46.51245],[11.69889,46.50218],[11.6672,46.49647],[11.64515,46.49743],[11.63849,46.50051],[11.63495,46.49486],[11.64297,46.49346],[11.65174,46.48271],[11.64536,46.47189],[11.64179,46.47439],[11.62679,46.4708],[11.62987,46.46377],[11.61882,46.44325],[11.62143,46.42539],[11.60161,46.39731],[11.60307,46.38924],[11.5932,46.38265],[11.56489,46.38018],[11.55878,46.35076],[11.55249,46.34418],[11.54423,46.34483],[11.53837,46.35015],[11.52445,46.35502],[11.47969,46.36277],[11.48052,46.3551],[11.46322,46.34922],[11.45556,46.33396],[11.42105,46.32441],[11.40517,46.32387],[11.39865,46.31426],[11.39994,46.30709],[11.39569,46.3083],[11.38188,46.30052],[11.36088,46.29906],[11.36078,46.29682],[11.38256,46.29177],[11.3871,46.28143],[11.39609,46.27423],[11.39862,46.264],[11.38756,46.26029],[11.37347,46.2629],[11.36836,46.26135],[11.35783,46.26481],[11.35495,46.27564],[11.33912,46.28306],[11.33379,46.29049],[11.33471,46.2962],[11.3129,46.28256],[11.31737,46.27303],[11.30645,46.25786],[11.29124,46.2604],[11.24743,46.22933],[11.20622,46.2187],[11.18267,46.22496],[11.17077,46.23806],[11.17994,46.24434],[11.18351,46.25269],[11.18935,46.25354],[11.19448,46.2461],[11.20029,46.25566],[11.16604,46.26129],[11.14885,46.27904],[11.13725,46.28336],[11.14293,46.28934],[11.15847,46.29059],[11.16439,46.2986],[11.1761,46.30346],[11.1847,46.32104],[11.18894,46.32151],[11.18696,46.32673],[11.1942,46.33016],[11.20204,46.34212],[11.19001,46.35984],[11.19263,46.36578],[11.20393,46.36765],[11.19792,46.37232],[11.21275,46.39804],[11.21345,46.40675],[11.20565,46.4166],[11.21026,46.4206],[11.20347,46.42682],[11.21416,46.43556],[11.21634,46.44255],[11.20903,46.45293],[11.21419,46.45807],[11.21736,46.45731],[11.21886,46.46199],[11.21626,46.47277],[11.20939,46.481],[11.20876,46.49346],[11.19608,46.50241],[11.1924,46.501],[11.18686,46.50734],[11.18002,46.49823],[11.17014,46.49635],[11.16095,46.4878],[11.12934,46.48058],[11.1103,46.49643],[11.10449,46.4948],[11.08812,46.50128],[11.08173,46.53021],[11.05915,46.51508],[11.03795,46.51357],[11.05006,46.50784],[11.05773,46.49235],[11.06278,46.4894],[11.06894,46.46619],[11.07625,46.45487],[11.0778,46.44569],[11.07301,46.44042],[11.05394,46.44849],[11.0414,46.44569],[11.02817,46.46116],[11.00952,46.46917],[11.00462,46.47607],[10.98695,46.48289],[10.96543,46.48103],[10.95791,46.46983],[10.93819,46.46578],[10.9325,46.45831],[10.93332,46.4528],[10.91305,46.44284],[10.89161,46.44366],[10.88324,46.44995],[10.88093,46.44579],[10.87162,46.4438],[10.86174,46.43509],[10.85113,46.43817],[10.80034,46.44185],[10.78906,46.45164],[10.77835,46.47112],[10.76934,46.47609],[10.76463,46.4848],[10.75906,46.48547],[10.74422,46.48333],[10.71753,46.46022],[10.69667,46.4573],[10.68293,46.44846],[10.66821,46.45122],[10.63303,46.44309],[10.61439,46.45098],[10.60128,46.46139],[10.59995,46.46766],[10.57672,46.47237],[10.55875,46.48187],[10.54986,46.49123],[10.53685,46.49062],[10.52657,46.49425],[10.49366,46.49719],[10.48141,46.49337],[10.45714,46.5096],[10.45124,46.53083],[10.45814,46.54215],[10.47056,46.54377],[10.46954,46.54856],[10.47617,46.55749],[10.47321,46.56701],[10.48305,46.5777],[10.48575,46.58921],[10.48221,46.59199],[10.48576,46.59805],[10.48291,46.60512],[10.49055,46.61394],[10.44632,46.63989],[10.40935,46.63389],[10.40011,46.63648],[10.39873,46.6455],[10.38946,46.65862],[10.39057,46.67089],[10.3803,46.68399],[10.38615,46.68821]]],terms_url:"https://geoservices.buergernetz.bz.it/geokatalog",terms_text:"© Autonomen Provinz Bozen/Provincia Autonoma di Bolzano CC-BY 3.0",description:"Orthophoto of South Tyrol from 2011 with up to 20cm resolution (larger valleys)"},{id:"South-Tyrol-Orthofoto2014",name:"South Tyrol Orthofoto 2014",type:"tms",template:"https://geoservices.buergernetz.bz.it/geoserver/gwc/service/wmts/?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=P_BZ_OF_2014_EPSG3857&STYLE=default&TILEMATRIXSET=GoogleMapsCompatible&TILEMATRIX=GoogleMapsCompatible%3A{zoom}&TILEROW={y}&TILECOL={x}&FORMAT=image%2Fjpeg",endDate:"2014-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",zoomExtent:[0,18],polygon:[[[11.71495,46.51227],[11.69889,46.50218],[11.6672,46.49647],[11.64515,46.49743],[11.63849,46.50051],[11.63495,46.49486],[11.64297,46.49346],[11.65174,46.48271],[11.64536,46.47189],[11.64179,46.47439],[11.62679,46.4708],[11.62987,46.46377],[11.61882,46.44325],[11.61936,46.43957],[11.62508,46.43957],[11.62508,46.44797],[11.63349,46.44587],[11.63769,46.45846],[11.64399,46.45846],[11.6608,46.44587],[11.66711,46.44587],[11.66711,46.47525],[11.69442,46.47735],[11.69652,46.48575],[11.70913,46.49624],[11.70913,46.50254],[11.71333,46.50254],[11.71495,46.51227]],[[11.61435,46.41535],[11.60161,46.39731],[11.60307,46.38924],[11.5932,46.38265],[11.56489,46.38018],[11.55878,46.35076],[11.55249,46.34418],[11.54423,46.34483],[11.53837,46.35015],[11.52445,46.35502],[11.47969,46.36277],[11.48052,46.3551],[11.46322,46.34922],[11.45556,46.33396],[11.42105,46.32441],[11.40517,46.32387],[11.39865,46.31426],[11.39994,46.30709],[11.39569,46.3083],[11.38188,46.30052],[11.36088,46.29906],[11.36078,46.29682],[11.38256,46.29177],[11.3871,46.28143],[11.39609,46.27423],[11.39862,46.264],[11.38756,46.26029],[11.37347,46.2629],[11.36836,46.26135],[11.35783,46.26481],[11.35495,46.27564],[11.33912,46.28306],[11.33379,46.29049],[11.33471,46.2962],[11.3129,46.28256],[11.31737,46.27303],[11.30645,46.25786],[11.29124,46.2604],[11.24743,46.22933],[11.20622,46.2187],[11.18267,46.22496],[11.17077,46.23806],[11.17994,46.24434],[11.18351,46.25269],[11.18935,46.25354],[11.19448,46.2461],[11.20029,46.25566],[11.16604,46.26129],[11.14885,46.27904],[11.13725,46.28336],[11.14293,46.28934],[11.15847,46.29059],[11.16439,46.2986],[11.1761,46.30346],[11.1847,46.32104],[11.18894,46.32151],[11.18696,46.32673],[11.1942,46.33016],[11.20204,46.34212],[11.19001,46.35984],[11.19263,46.36578],[11.20393,46.36765],[11.19792,46.37232],[11.21275,46.39804],[11.21345,46.40675],[11.20644,46.4156],[11.20485,46.3997],[11.17754,46.3997],[11.17543,46.3871],[11.16703,46.38081],[11.16703,46.36821],[11.16283,46.36821],[11.16283,46.29895],[11.12501,46.29895],[11.12291,46.25488],[11.13131,46.25278],[11.12711,46.24858],[11.16283,46.24858],[11.16283,46.215],[11.24898,46.2129],[11.25108,46.2234],[11.2889,46.2234],[11.2889,46.24019],[11.3015,46.25278],[11.30991,46.25278],[11.31201,46.24858],[11.33722,46.25068],[11.34143,46.26747],[11.34563,46.26747],[11.34773,46.25698],[11.35613,46.24858],[11.41707,46.25278],[11.41917,46.32414],[11.49271,46.32204],[11.48851,46.33044],[11.49901,46.32834],[11.50111,46.34723],[11.52423,46.34723],[11.53894,46.34513],[11.53894,46.32834],[11.55995,46.32414],[11.58306,46.34932],[11.58306,46.37241],[11.60407,46.37241],[11.60617,46.38291],[11.61458,46.38291],[11.62508,46.3934],[11.62508,46.41229],[11.61435,46.41535]],[[11.20663,46.41745],[11.21026,46.4206],[11.20347,46.42682],[11.21416,46.43556],[11.21634,46.44255],[11.20903,46.45293],[11.21419,46.45807],[11.21736,46.45731],[11.21886,46.46199],[11.21626,46.47277],[11.20939,46.481],[11.20876,46.49346],[11.19608,46.50241],[11.1924,46.501],[11.18686,46.50734],[11.18002,46.49823],[11.17014,46.49635],[11.16095,46.4878],[11.12934,46.48058],[11.1103,46.49643],[11.10449,46.4948],[11.08812,46.50128],[11.08173,46.53021],[11.05915,46.51508],[11.03795,46.51357],[11.05006,46.50784],[11.05773,46.49235],[11.06278,46.4894],[11.06894,46.46619],[11.07625,46.45487],[11.0778,46.44569],[11.07301,46.44042],[11.05394,46.44849],[11.0414,46.44569],[11.02817,46.46116],[11.00952,46.46917],[11.00462,46.47607],[10.98695,46.48289],[10.96543,46.48103],[10.96285,46.47718],[10.96952,46.45217],[10.98423,46.45217],[10.98843,46.44587],[10.99894,46.44587],[11.01154,46.42068],[11.04096,46.42068],[11.08088,46.43537],[11.08298,46.47525],[11.15232,46.47525],[11.18804,46.48365],[11.19014,46.47525],[11.20695,46.47315],[11.20485,46.44587],[11.19855,46.44167],[11.19435,46.42698],[11.19014,46.42698],[11.19014,46.42068],[11.20695,46.42068],[11.20663,46.41745]],[[10.47433,46.55501],[10.47617,46.55749],[10.47321,46.56701],[10.48305,46.5777],[10.48575,46.58921],[10.48221,46.59199],[10.48576,46.59805],[10.48291,46.60512],[10.49055,46.61394],[10.46952,46.62628],[10.47785,46.61797],[10.47785,46.59069],[10.47365,46.59069],[10.47155,46.5676],[10.46314,46.55501],[10.47433,46.55501]],[[10.46925,46.62643],[10.44632,46.63989],[10.40935,46.63389],[10.40011,46.63648],[10.39873,46.6455],[10.38946,46.65862],[10.39057,46.67089],[10.3803,46.68399],[10.38615,46.68821],[10.39201,46.69016],[10.40215,46.70624],[10.41274,46.70821],[10.41622,46.71479],[10.4168,46.71847],[10.39934,46.73435],[10.43464,46.75356],[10.44107,46.75413],[10.44011,46.77149],[10.42123,46.78861],[10.42845,46.79755],[10.43626,46.79843],[10.43373,46.81106],[10.42532,46.80686],[10.42532,46.79847],[10.42112,46.79847],[10.41692,46.78587],[10.41692,46.75229],[10.3938,46.7376],[10.3896,46.72081],[10.3854,46.72081],[10.3791,46.69353],[10.3791,46.66834],[10.3833,46.66414],[10.3812,46.64735],[10.3896,46.64525],[10.3938,46.63056],[10.42532,46.62846],[10.44843,46.63476],[10.46925,46.62643]]],terms_url:"https://geoservices.buergernetz.bz.it/geokatalog/",terms_text:"© Autonomen Provinz Bozen/Provincia Autonoma di Bolzano CC-BY 3.0"},{id:"South-Tyrol-Orthofoto-2014-2015",name:"South Tyrol Orthofoto 2014/2015",type:"tms",template:"https://geoservices.buergernetz.bz.it/geoserver/gwc/service/wmts/?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=P_BZ_OF_2014_2015_EPSG3857&STYLE=default&TILEMATRIXSET=GoogleMapsCompatible&TILEMATRIX=GoogleMapsCompatible%3A{zoom}&TILEROW={y}&TILECOL={x}&FORMAT=image%2Fjpeg",endDate:"2015-11-01T00:00:00.000Z",startDate:"2014-07-01T00:00:00.000Z",zoomExtent:[0,18],polygon:[[[10.38615,46.68821],[10.39201,46.69016],[10.40215,46.70624],[10.41274,46.70821],[10.41622,46.71479],[10.4168,46.71847],[10.39934,46.73435],[10.43464,46.75356],[10.44107,46.75413],[10.44011,46.77149],[10.42123,46.78861],[10.42845,46.79755],[10.43851,46.79869],[10.44925,46.80462],[10.45602,46.81635],[10.45438,46.82221],[10.4583,46.82478],[10.45513,46.83059],[10.45906,46.83548],[10.46483,46.83624],[10.46229,46.8413],[10.46987,46.84933],[10.46819,46.8553],[10.47838,46.86013],[10.48372,46.85543],[10.49628,46.85305],[10.49931,46.84857],[10.52124,46.84653],[10.5527,46.8511],[10.55795,46.84695],[10.55264,46.8408],[10.55536,46.84087],[10.58883,46.85125],[10.59502,46.85829],[10.60936,46.8597],[10.62441,46.86558],[10.64858,46.86655],[10.66787,46.87651],[10.67297,46.87138],[10.69112,46.86861],[10.69786,46.86339],[10.69508,46.85308],[10.70594,46.84786],[10.71763,46.84795],[10.72333,46.83892],[10.75621,46.83383],[10.76481,46.82409],[10.76387,46.81971],[10.75239,46.81387],[10.74506,46.80223],[10.7276,46.79709],[10.73122,46.78925],[10.75722,46.78624],[10.77744,46.79149],[10.78678,46.79735],[10.81439,46.77662],[10.82479,46.77472],[10.83129,46.78138],[10.84112,46.78282],[10.85354,46.77506],[10.86845,46.77313],[10.86993,46.7669],[10.88294,46.76393],[10.88962,46.76529],[10.8951,46.77092],[10.90527,46.76911],[10.92299,46.7764],[10.92821,46.77408],[10.94388,46.77648],[10.97522,46.77361],[10.97932,46.77014],[10.99475,46.76804],[11.01397,46.77317],[11.02328,46.76715],[11.0346,46.79428],[11.04234,46.801],[11.03792,46.80562],[11.05633,46.80928],[11.07279,46.82092],[11.08171,46.82252],[11.0762,46.83384],[11.06887,46.83793],[11.07303,46.84345],[11.06988,46.85348],[11.08742,46.87927],[11.09961,46.88922],[11.09538,46.89178],[11.09795,46.89844],[11.0946,46.91247],[11.10792,46.91706],[11.10804,46.92632],[11.11418,46.93234],[11.13851,46.92865],[11.16322,46.94091],[11.16642,46.94479],[11.16114,46.94979],[11.1637,46.96677],[11.17598,46.96367],[11.18658,46.97062],[11.19527,46.97152],[11.20418,46.96877],[11.20688,46.96403],[11.22047,46.97025],[11.24139,46.9708],[11.24865,46.97517],[11.25582,46.97535],[11.26272,46.98169],[11.27662,46.98168],[11.28762,46.98699],[11.30709,46.98525],[11.3205,46.99345],[11.33765,46.98606],[11.34516,46.99169],[11.35932,46.99154],[11.37697,46.98025],[11.38324,46.97168],[11.40465,46.96609],[11.43929,46.97601],[11.45134,46.99294],[11.46803,46.99582],[11.46859,47.003],[11.47831,47.01201],[11.50238,47.01073],[11.50313,47.00808],[11.51366,47.00595],[11.51679,47.00091],[11.53381,46.99233],[11.53846,46.98519],[11.55297,46.99149],[11.57663,46.99657],[11.58,47.00277],[11.58879,47.00641],[11.59901,47.00657],[11.60944,47.01207],[11.62697,47.01437],[11.63629,47.00383],[11.66542,46.99304],[11.6885,46.99658],[11.71226,46.99416],[11.72897,46.97322],[11.74698,46.97013],[11.76411,46.97412],[11.78106,46.99342],[11.81526,46.991],[11.83564,46.99417],[11.84396,47.0025],[11.85192,47.0014],[11.86722,47.01252],[11.87393,47.01136],[11.8794,47.01714],[11.89137,47.01728],[11.91627,47.03422],[11.9329,47.03864],[11.94688,47.03464],[11.95457,47.04374],[11.96773,47.04158],[11.97912,47.0511],[11.98587,47.04815],[11.99534,47.05064],[12.02037,47.04821],[12.02968,47.05127],[12.03353,47.0583],[12.04276,47.06228],[12.07543,47.0605],[12.08035,47.06951],[12.09308,47.07791],[12.10329,47.07931],[12.11867,47.07445],[12.13561,47.08171],[12.15125,47.08049],[12.15997,47.08267],[12.18589,47.09322],[12.2278,47.08302],[12.24228,47.06892],[12.23786,47.0644],[12.21821,47.05795],[12.2182,47.04483],[12.20552,47.02595],[12.18048,47.02414],[12.16423,47.01782],[12.14786,47.02357],[12.12723,47.01218],[12.12285,47.00662],[12.1322,46.99339],[12.12974,46.98593],[12.13977,46.982],[12.13808,46.96514],[12.13328,46.96292],[12.13882,46.95764],[12.15927,46.95133],[12.1702,46.93758],[12.15414,46.91654],[12.14675,46.91413],[12.16205,46.908],[12.16959,46.91121],[12.19154,46.90682],[12.20106,46.8965],[12.2022,46.88806],[12.21663,46.87517],[12.22147,46.88084],[12.23125,46.88146],[12.2345,46.88919],[12.24162,46.89192],[12.27486,46.88512],[12.27979,46.87921],[12.27736,46.87319],[12.29326,46.86566],[12.2912,46.85704],[12.29733,46.84455],[12.30833,46.84137],[12.30726,46.83271],[12.285,46.81503],[12.29383,46.8027],[12.28905,46.79948],[12.28889,46.79427],[12.28232,46.79153],[12.28539,46.7839],[12.30943,46.78603],[12.35837,46.77583],[12.37036,46.74163],[12.38475,46.71745],[12.40283,46.70811],[12.41103,46.70701],[12.41522,46.70163],[12.42862,46.6997],[12.42943,46.69567],[12.44268,46.68979],[12.47501,46.68756],[12.4795,46.67969],[12.43473,46.66714],[12.40648,46.64167],[12.38115,46.64183],[12.37944,46.63733],[12.3915,46.62765],[12.38577,46.62154],[12.35939,46.61829],[12.34465,46.62376],[12.34034,46.63022],[12.33578,46.62732],[12.3172,46.62876],[12.31785,46.62355],[12.30802,46.61811],[12.28413,46.61623],[12.26982,46.62003],[12.25931,46.62809],[12.24502,46.62326],[12.24198,46.61586],[12.21241,46.60918],[12.20444,46.59836],[12.19228,46.59321],[12.19261,46.62059],[12.1818,46.6192],[12.17117,46.63275],[12.16062,46.63574],[12.1511,46.63215],[12.1436,46.6327],[12.13739,46.64122],[12.12342,46.64475],[12.10949,46.65204],[12.10609,46.65783],[12.09345,46.66123],[12.08826,46.66638],[12.07985,46.66686],[12.07038,46.67386],[12.07173,46.66064],[12.06686,46.65364],[12.07479,46.64329],[12.06837,46.63997],[12.06495,46.62121],[12.05448,46.61778],[12.05318,46.60989],[12.04613,46.60716],[12.05043,46.60016],[12.04763,46.58357],[12.03665,46.57668],[12.0266,46.55871],[12.02189,46.55791],[11.99941,46.53208],[11.99411,46.53345],[11.98704,46.54417],[11.96633,46.54363],[11.95094,46.53869],[11.94719,46.52879],[11.94147,46.52689],[11.93294,46.52631],[11.9121,46.532],[11.8904,46.52175],[11.85192,46.51682],[11.82849,46.50783],[11.82334,46.51315],[11.82391,46.52141],[11.81086,46.53146],[11.79385,46.52023],[11.79189,46.51322],[11.76157,46.50503],[11.74317,46.50391],[11.73202,46.50877],[11.71935,46.50916],[11.71524,46.51245],[11.69889,46.50218],[11.6672,46.49647],[11.64515,46.49743],[11.63849,46.50051],[11.63495,46.49486],[11.64297,46.49346],[11.65174,46.48271],[11.64536,46.47189],[11.64179,46.47439],[11.62679,46.4708],[11.62987,46.46377],[11.61882,46.44325],[11.62143,46.42539],[11.60161,46.39731],[11.60307,46.38924],[11.5932,46.38265],[11.56489,46.38018],[11.55878,46.35076],[11.55249,46.34418],[11.54423,46.34483],[11.53837,46.35015],[11.52445,46.35502],[11.47969,46.36277],[11.48052,46.3551],[11.46322,46.34922],[11.45556,46.33396],[11.42105,46.32441],[11.40517,46.32387],[11.39865,46.31426],[11.39994,46.30709],[11.39569,46.3083],[11.38188,46.30052],[11.36088,46.29906],[11.36078,46.29682],[11.38256,46.29177],[11.3871,46.28143],[11.39609,46.27423],[11.39862,46.264],[11.38756,46.26029],[11.37347,46.2629],[11.36836,46.26135],[11.35783,46.26481],[11.35495,46.27564],[11.33912,46.28306],[11.33379,46.29049],[11.33471,46.2962],[11.3129,46.28256],[11.31737,46.27303],[11.30645,46.25786],[11.29124,46.2604],[11.24743,46.22933],[11.20622,46.2187],[11.18267,46.22496],[11.17077,46.23806],[11.17994,46.24434],[11.18351,46.25269],[11.18935,46.25354],[11.19448,46.2461],[11.20029,46.25566],[11.16604,46.26129],[11.14885,46.27904],[11.13725,46.28336],[11.14293,46.28934],[11.15847,46.29059],[11.16439,46.2986],[11.1761,46.30346],[11.1847,46.32104],[11.18894,46.32151],[11.18696,46.32673],[11.1942,46.33016],[11.20204,46.34212],[11.19001,46.35984],[11.19263,46.36578],[11.20393,46.36765],[11.19792,46.37232],[11.21275,46.39804],[11.21345,46.40675],[11.20565,46.4166],[11.21026,46.4206],[11.20347,46.42682],[11.21416,46.43556],[11.21634,46.44255],[11.20903,46.45293],[11.21419,46.45807],[11.21736,46.45731],[11.21886,46.46199],[11.21626,46.47277],[11.20939,46.481],[11.20876,46.49346],[11.19608,46.50241],[11.1924,46.501],[11.18686,46.50734],[11.18002,46.49823],[11.17014,46.49635],[11.16095,46.4878],[11.12934,46.48058],[11.1103,46.49643],[11.10449,46.4948],[11.08812,46.50128],[11.08173,46.53021],[11.05915,46.51508],[11.03795,46.51357],[11.05006,46.50784],[11.05773,46.49235],[11.06278,46.4894],[11.06894,46.46619],[11.07625,46.45487],[11.0778,46.44569],[11.07301,46.44042],[11.05394,46.44849],[11.0414,46.44569],[11.02817,46.46116],[11.00952,46.46917],[11.00462,46.47607],[10.98695,46.48289],[10.96543,46.48103],[10.95791,46.46983],[10.93819,46.46578],[10.9325,46.45831],[10.93332,46.4528],[10.91305,46.44284],[10.89161,46.44366],[10.88324,46.44995],[10.88093,46.44579],[10.87162,46.4438],[10.86174,46.43509],[10.85113,46.43817],[10.80034,46.44185],[10.78906,46.45164],[10.77835,46.47112],[10.76934,46.47609],[10.76463,46.4848],[10.75906,46.48547],[10.74422,46.48333],[10.71753,46.46022],[10.69667,46.4573],[10.68293,46.44846],[10.66821,46.45122],[10.63303,46.44309],[10.61439,46.45098],[10.60128,46.46139],[10.59995,46.46766],[10.57672,46.47237],[10.55875,46.48187],[10.54986,46.49123],[10.53685,46.49062],[10.52657,46.49425],[10.49366,46.49719],[10.48141,46.49337],[10.45714,46.5096],[10.45124,46.53083],[10.45814,46.54215],[10.47056,46.54377],[10.46954,46.54856],[10.47617,46.55749],[10.47321,46.56701],[10.48305,46.5777],[10.48575,46.58921],[10.48221,46.59199],[10.48576,46.59805],[10.48291,46.60512],[10.49055,46.61394],[10.44632,46.63989],[10.40935,46.63389],[10.40011,46.63648],[10.39873,46.6455],[10.38946,46.65862],[10.39057,46.67089],[10.3803,46.68399],[10.38615,46.68821]]],terms_url:"https://geoservices.buergernetz.bz.it/geokatalog",terms_text:"© Autonomen Provinz Bozen/Provincia Autonoma di Bolzano CC-BY 4.0",best:true},{id:"South-Tyrol-Topomap",name:"South Tyrol Topomap",type:"tms",template:"https://geoservices.buergernetz.bz.it/geoserver/gwc/service/wmts/?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=P_BZ_BASEMAP_TOPO&STYLE=default&TILEMATRIXSET=GoogleMapsCompatible&TILEMATRIX=GoogleMapsCompatible%3A{zoom}&TILEROW={y}&TILECOL={x}&FORMAT=image%2Fjpeg",zoomExtent:[0,20],polygon:[[[10.38615,46.68821],[10.39201,46.69016],[10.40215,46.70624],[10.41274,46.70821],[10.41622,46.71479],[10.4168,46.71847],[10.39934,46.73435],[10.43464,46.75356],[10.44107,46.75413],[10.44011,46.77149],[10.42123,46.78861],[10.42845,46.79755],[10.43851,46.79869],[10.44925,46.80462],[10.45602,46.81635],[10.45438,46.82221],[10.4583,46.82478],[10.45513,46.83059],[10.45906,46.83548],[10.46483,46.83624],[10.46229,46.8413],[10.46987,46.84933],[10.46819,46.8553],[10.47838,46.86013],[10.48372,46.85543],[10.49628,46.85305],[10.49931,46.84857],[10.52124,46.84653],[10.5527,46.8511],[10.55795,46.84695],[10.55264,46.8408],[10.55536,46.84087],[10.58883,46.85125],[10.59502,46.85829],[10.60936,46.8597],[10.62441,46.86558],[10.64858,46.86655],[10.66787,46.87651],[10.67297,46.87138],[10.69112,46.86861],[10.69786,46.86339],[10.69508,46.85308],[10.70594,46.84786],[10.71763,46.84795],[10.72333,46.83892],[10.75621,46.83383],[10.76481,46.82409],[10.76387,46.81971],[10.75239,46.81387],[10.74506,46.80223],[10.7276,46.79709],[10.73122,46.78925],[10.75722,46.78624],[10.77744,46.79149],[10.78678,46.79735],[10.81439,46.77662],[10.82479,46.77472],[10.83129,46.78138],[10.84112,46.78282],[10.85354,46.77506],[10.86845,46.77313],[10.86993,46.7669],[10.88294,46.76393],[10.88962,46.76529],[10.8951,46.77092],[10.90527,46.76911],[10.92299,46.7764],[10.92821,46.77408],[10.94388,46.77648],[10.97522,46.77361],[10.97932,46.77014],[10.99475,46.76804],[11.01397,46.77317],[11.02328,46.76715],[11.0346,46.79428],[11.04234,46.801],[11.03792,46.80562],[11.05633,46.80928],[11.07279,46.82092],[11.08171,46.82252],[11.0762,46.83384],[11.06887,46.83793],[11.07303,46.84345],[11.06988,46.85348],[11.08742,46.87927],[11.09961,46.88922],[11.09538,46.89178],[11.09795,46.89844],[11.0946,46.91247],[11.10792,46.91706],[11.10804,46.92632],[11.11418,46.93234],[11.13851,46.92865],[11.16322,46.94091],[11.16642,46.94479],[11.16114,46.94979],[11.1637,46.96677],[11.17598,46.96367],[11.18658,46.97062],[11.19527,46.97152],[11.20418,46.96877],[11.20688,46.96403],[11.22047,46.97025],[11.24139,46.9708],[11.24865,46.97517],[11.25582,46.97535],[11.26272,46.98169],[11.27662,46.98168],[11.28762,46.98699],[11.30709,46.98525],[11.3205,46.99345],[11.33765,46.98606],[11.34516,46.99169],[11.35932,46.99154],[11.37697,46.98025],[11.38324,46.97168],[11.40465,46.96609],[11.43929,46.97601],[11.45134,46.99294],[11.46803,46.99582],[11.46859,47.003],[11.47831,47.01201],[11.50238,47.01073],[11.50313,47.00808],[11.51366,47.00595],[11.51679,47.00091],[11.53381,46.99233],[11.53846,46.98519],[11.55297,46.99149],[11.57663,46.99657],[11.58,47.00277],[11.58879,47.00641],[11.59901,47.00657],[11.60944,47.01207],[11.62697,47.01437],[11.63629,47.00383],[11.66542,46.99304],[11.6885,46.99658],[11.71226,46.99416],[11.72897,46.97322],[11.74698,46.97013],[11.76411,46.97412],[11.78106,46.99342],[11.81526,46.991],[11.83564,46.99417],[11.84396,47.0025],[11.85192,47.0014],[11.86722,47.01252],[11.87393,47.01136],[11.8794,47.01714],[11.89137,47.01728],[11.91627,47.03422],[11.9329,47.03864],[11.94688,47.03464],[11.95457,47.04374],[11.96773,47.04158],[11.97912,47.0511],[11.98587,47.04815],[11.99534,47.05064],[12.02037,47.04821],[12.02968,47.05127],[12.03353,47.0583],[12.04276,47.06228],[12.07543,47.0605],[12.08035,47.06951],[12.09308,47.07791],[12.10329,47.07931],[12.11867,47.07445],[12.13561,47.08171],[12.15125,47.08049],[12.15997,47.08267],[12.18589,47.09322],[12.2278,47.08302],[12.24228,47.06892],[12.23786,47.0644],[12.21821,47.05795],[12.2182,47.04483],[12.20552,47.02595],[12.18048,47.02414],[12.16423,47.01782],[12.14786,47.02357],[12.12723,47.01218],[12.12285,47.00662],[12.1322,46.99339],[12.12974,46.98593],[12.13977,46.982],[12.13808,46.96514],[12.13328,46.96292],[12.13882,46.95764],[12.15927,46.95133],[12.1702,46.93758],[12.15414,46.91654],[12.14675,46.91413],[12.16205,46.908],[12.16959,46.91121],[12.19154,46.90682],[12.20106,46.8965],[12.2022,46.88806],[12.21663,46.87517],[12.22147,46.88084],[12.23125,46.88146],[12.2345,46.88919],[12.24162,46.89192],[12.27486,46.88512],[12.27979,46.87921],[12.27736,46.87319],[12.29326,46.86566],[12.2912,46.85704],[12.29733,46.84455],[12.30833,46.84137],[12.30726,46.83271],[12.285,46.81503],[12.29383,46.8027],[12.28905,46.79948],[12.28889,46.79427],[12.28232,46.79153],[12.28539,46.7839],[12.30943,46.78603],[12.35837,46.77583],[12.37036,46.74163],[12.38475,46.71745],[12.40283,46.70811],[12.41103,46.70701],[12.41522,46.70163],[12.42862,46.6997],[12.42943,46.69567],[12.44268,46.68979],[12.47501,46.68756],[12.4795,46.67969],[12.43473,46.66714],[12.40648,46.64167],[12.38115,46.64183],[12.37944,46.63733],[12.3915,46.62765],[12.38577,46.62154],[12.35939,46.61829],[12.34465,46.62376],[12.34034,46.63022],[12.33578,46.62732],[12.3172,46.62876],[12.31785,46.62355],[12.30802,46.61811],[12.28413,46.61623],[12.26982,46.62003],[12.25931,46.62809],[12.24502,46.62326],[12.24198,46.61586],[12.21241,46.60918],[12.20444,46.59836],[12.19228,46.59321],[12.19261,46.62059],[12.1818,46.6192],[12.17117,46.63275],[12.16062,46.63574],[12.1511,46.63215],[12.1436,46.6327],[12.13739,46.64122],[12.12342,46.64475],[12.10949,46.65204],[12.10609,46.65783],[12.09345,46.66123],[12.08826,46.66638],[12.07985,46.66686],[12.07038,46.67386],[12.07173,46.66064],[12.06686,46.65364],[12.07479,46.64329],[12.06837,46.63997],[12.06495,46.62121],[12.05448,46.61778],[12.05318,46.60989],[12.04613,46.60716],[12.05043,46.60016],[12.04763,46.58357],[12.03665,46.57668],[12.0266,46.55871],[12.02189,46.55791],[11.99941,46.53208],[11.99411,46.53345],[11.98704,46.54417],[11.96633,46.54363],[11.95094,46.53869],[11.94719,46.52879],[11.94147,46.52689],[11.93294,46.52631],[11.9121,46.532],[11.8904,46.52175],[11.85192,46.51682],[11.82849,46.50783],[11.82334,46.51315],[11.82391,46.52141],[11.81086,46.53146],[11.79385,46.52023],[11.79189,46.51322],[11.76157,46.50503],[11.74317,46.50391],[11.73202,46.50877],[11.71935,46.50916],[11.71524,46.51245],[11.69889,46.50218],[11.6672,46.49647],[11.64515,46.49743],[11.63849,46.50051],[11.63495,46.49486],[11.64297,46.49346],[11.65174,46.48271],[11.64536,46.47189],[11.64179,46.47439],[11.62679,46.4708],[11.62987,46.46377],[11.61882,46.44325],[11.62143,46.42539],[11.60161,46.39731],[11.60307,46.38924],[11.5932,46.38265],[11.56489,46.38018],[11.55878,46.35076],[11.55249,46.34418],[11.54423,46.34483],[11.53837,46.35015],[11.52445,46.35502],[11.47969,46.36277],[11.48052,46.3551],[11.46322,46.34922],[11.45556,46.33396],[11.42105,46.32441],[11.40517,46.32387],[11.39865,46.31426],[11.39994,46.30709],[11.39569,46.3083],[11.38188,46.30052],[11.36088,46.29906],[11.36078,46.29682],[11.38256,46.29177],[11.3871,46.28143],[11.39609,46.27423],[11.39862,46.264],[11.38756,46.26029],[11.37347,46.2629],[11.36836,46.26135],[11.35783,46.26481],[11.35495,46.27564],[11.33912,46.28306],[11.33379,46.29049],[11.33471,46.2962],[11.3129,46.28256],[11.31737,46.27303],[11.30645,46.25786],[11.29124,46.2604],[11.24743,46.22933],[11.20622,46.2187],[11.18267,46.22496],[11.17077,46.23806],[11.17994,46.24434],[11.18351,46.25269],[11.18935,46.25354],[11.19448,46.2461],[11.20029,46.25566],[11.16604,46.26129],[11.14885,46.27904],[11.13725,46.28336],[11.14293,46.28934],[11.15847,46.29059],[11.16439,46.2986],[11.1761,46.30346],[11.1847,46.32104],[11.18894,46.32151],[11.18696,46.32673],[11.1942,46.33016],[11.20204,46.34212],[11.19001,46.35984],[11.19263,46.36578],[11.20393,46.36765],[11.19792,46.37232],[11.21275,46.39804],[11.21345,46.40675],[11.20565,46.4166],[11.21026,46.4206],[11.20347,46.42682],[11.21416,46.43556],[11.21634,46.44255],[11.20903,46.45293],[11.21419,46.45807],[11.21736,46.45731],[11.21886,46.46199],[11.21626,46.47277],[11.20939,46.481],[11.20876,46.49346],[11.19608,46.50241],[11.1924,46.501],[11.18686,46.50734],[11.18002,46.49823],[11.17014,46.49635],[11.16095,46.4878],[11.12934,46.48058],[11.1103,46.49643],[11.10449,46.4948],[11.08812,46.50128],[11.08173,46.53021],[11.05915,46.51508],[11.03795,46.51357],[11.05006,46.50784],[11.05773,46.49235],[11.06278,46.4894],[11.06894,46.46619],[11.07625,46.45487],[11.0778,46.44569],[11.07301,46.44042],[11.05394,46.44849],[11.0414,46.44569],[11.02817,46.46116],[11.00952,46.46917],[11.00462,46.47607],[10.98695,46.48289],[10.96543,46.48103],[10.95791,46.46983],[10.93819,46.46578],[10.9325,46.45831],[10.93332,46.4528],[10.91305,46.44284],[10.89161,46.44366],[10.88324,46.44995],[10.88093,46.44579],[10.87162,46.4438],[10.86174,46.43509],[10.85113,46.43817],[10.80034,46.44185],[10.78906,46.45164],[10.77835,46.47112],[10.76934,46.47609],[10.76463,46.4848],[10.75906,46.48547],[10.74422,46.48333],[10.71753,46.46022],[10.69667,46.4573],[10.68293,46.44846],[10.66821,46.45122],[10.63303,46.44309],[10.61439,46.45098],[10.60128,46.46139],[10.59995,46.46766],[10.57672,46.47237],[10.55875,46.48187],[10.54986,46.49123],[10.53685,46.49062],[10.52657,46.49425],[10.49366,46.49719],[10.48141,46.49337],[10.45714,46.5096],[10.45124,46.53083],[10.45814,46.54215],[10.47056,46.54377],[10.46954,46.54856],[10.47617,46.55749],[10.47321,46.56701],[10.48305,46.5777],[10.48575,46.58921],[10.48221,46.59199],[10.48576,46.59805],[10.48291,46.60512],[10.49055,46.61394],[10.44632,46.63989],[10.40935,46.63389],[10.40011,46.63648],[10.39873,46.6455],[10.38946,46.65862],[10.39057,46.67089],[10.3803,46.68399],[10.38615,46.68821]]],terms_url:"https://geoservices.buergernetz.bz.it/geokatalog",terms_text:"© Autonomen Provinz Bozen/Provincia Autonoma di Bolzano",description:"Topographical basemap of South Tyrol"},{id:"SPW2009",name:"SPW(allonie) 2009-2010 aerial imagery",type:"wms",template:"https://geoservices.wallonie.be/arcgis/services/IMAGERIE/ORTHO_2009_2010/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2010-01-01T00:00:00.000Z",startDate:"2009-01-01T00:00:00.000Z",polygon:[[[5.78257,49.87573],[5.73919,49.83362],[5.75516,49.79146],[5.78839,49.79665],[5.91064,49.66249],[5.84857,49.59723],[5.87102,49.57599],[5.81857,49.54638],[5.66079,49.55362],[5.61108,49.50603],[5.55603,49.52928],[5.47051,49.49737],[5.45708,49.56703],[5.37522,49.62333],[5.31486,49.61137],[5.33243,49.65263],[5.26851,49.69657],[5.16628,49.69303],[4.99753,49.80006],[4.85164,49.79345],[4.84754,49.86806],[4.89013,49.90893],[4.79117,49.958],[4.87762,50.15374],[4.82418,50.16932],[4.70207,50.09556],[4.69441,49.99625],[4.44551,49.93722],[4.30589,49.96829],[4.19746,49.9546],[4.1352,50.01508],[4.22825,50.07842],[4.19682,50.13519],[4.12714,50.1355],[4.2052,50.27347],[4.16262,50.28896],[4.13538,50.25784],[4.02795,50.3584],[3.88574,50.32701],[3.84578,50.35323],[3.74546,50.35005],[3.70994,50.30316],[3.65756,50.37076],[3.65552,50.4617],[3.60586,50.49632],[3.4993,50.48921],[3.51992,50.52362],[3.47439,50.53368],[3.37698,50.49109],[3.28634,50.52793],[3.26104,50.70131],[3.20602,50.71139],[3.17839,50.75609],[3.30562,50.75466],[3.36077,50.70962],[3.45439,50.77072],[3.64047,50.72242],[3.67752,50.77062],[3.75857,50.78045],[3.77568,50.74789],[3.8798,50.75146],[3.9097,50.69245],[4.05868,50.69439],[4.14853,50.72834],[4.2467,50.6894],[4.46355,50.75511],[4.52399,50.72724],[4.59727,50.76359],[4.63445,50.74272],[4.64309,50.79755],[4.76014,50.80544],[4.92545,50.74275],[5.00339,50.76594],[5.07039,50.70649],[5.16508,50.6957],[5.16984,50.72257],[5.30912,50.71802],[5.35029,50.74629],[5.47863,50.72352],[5.68786,50.81193],[5.68225,50.75651],[5.7707,50.75132],[5.81963,50.71396],[5.88333,50.70992],[5.89217,50.75518],[5.96561,50.76107],[6.04045,50.74546],[6.03959,50.71833],[6.11066,50.72299],[6.18169,50.62383],[6.26953,50.62519],[6.17812,50.54153],[6.22658,50.49432],[6.35036,50.48854],[6.34298,50.38033],[6.40542,50.32331],[6.30647,50.32019],[6.27889,50.26734],[6.17377,50.23165],[6.19232,50.18203],[6.147,50.17775],[6.13779,50.12985],[6.10245,50.17055],[5.96368,50.17263],[5.96133,50.13136],[5.89532,50.11216],[5.81968,50.01329],[5.83578,49.97892],[5.77502,49.9608],[5.73577,49.89684],[5.78257,49.87573]],[[2.99943,50.81035],[2.93719,50.79361],[2.96,50.7735],[2.92247,50.75729],[2.84203,50.75153],[2.86315,50.70826],[2.91065,50.69409],[2.94001,50.74543],[3.02932,50.77896],[2.99943,50.81035]]],icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/SPW(allonie)2009-2010aerialimagery.png"},{id:"SPW2012",name:"SPW(allonie) 2012-2013 aerial imagery",type:"wms",template:"https://geoservices.wallonie.be/arcgis/services/IMAGERIE/ORTHO_2012_2013/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2013-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",polygon:[[[5.78257,49.87573],[5.73919,49.83362],[5.75516,49.79146],[5.78839,49.79665],[5.91064,49.66249],[5.84857,49.59723],[5.87102,49.57599],[5.81857,49.54638],[5.66079,49.55362],[5.61108,49.50603],[5.55603,49.52928],[5.47051,49.49737],[5.45708,49.56703],[5.37522,49.62333],[5.31486,49.61137],[5.33243,49.65263],[5.26851,49.69657],[5.16628,49.69303],[4.99753,49.80006],[4.85164,49.79345],[4.84754,49.86806],[4.89013,49.90893],[4.79117,49.958],[4.87762,50.15374],[4.82418,50.16932],[4.70207,50.09556],[4.69441,49.99625],[4.44551,49.93722],[4.30589,49.96829],[4.19746,49.9546],[4.1352,50.01508],[4.22825,50.07842],[4.19682,50.13519],[4.12714,50.1355],[4.2052,50.27347],[4.16262,50.28896],[4.13538,50.25784],[4.02795,50.3584],[3.88574,50.32701],[3.84578,50.35323],[3.74546,50.35005],[3.70994,50.30316],[3.65756,50.37076],[3.65552,50.4617],[3.60586,50.49632],[3.4993,50.48921],[3.51992,50.52362],[3.47439,50.53368],[3.37698,50.49109],[3.28634,50.52793],[3.26104,50.70131],[3.20602,50.71139],[3.17839,50.75609],[3.30562,50.75466],[3.36077,50.70962],[3.45439,50.77072],[3.64047,50.72242],[3.67752,50.77062],[3.75857,50.78045],[3.77568,50.74789],[3.8798,50.75146],[3.9097,50.69245],[4.05868,50.69439],[4.14853,50.72834],[4.2467,50.6894],[4.46355,50.75511],[4.52399,50.72724],[4.59727,50.76359],[4.63445,50.74272],[4.64309,50.79755],[4.76014,50.80544],[4.92545,50.74275],[5.00339,50.76594],[5.07039,50.70649],[5.16508,50.6957],[5.16984,50.72257],[5.30912,50.71802],[5.35029,50.74629],[5.47863,50.72352],[5.68786,50.81193],[5.68225,50.75651],[5.7707,50.75132],[5.81963,50.71396],[5.88333,50.70992],[5.89217,50.75518],[5.96561,50.76107],[6.04045,50.74546],[6.03959,50.71833],[6.11066,50.72299],[6.18169,50.62383],[6.26953,50.62519],[6.17812,50.54153],[6.22658,50.49432],[6.35036,50.48854],[6.34298,50.38033],[6.40542,50.32331],[6.30647,50.32019],[6.27889,50.26734],[6.17377,50.23165],[6.19232,50.18203],[6.147,50.17775],[6.13779,50.12985],[6.10245,50.17055],[5.96368,50.17263],[5.96133,50.13136],[5.89532,50.11216],[5.81968,50.01329],[5.83578,49.97892],[5.77502,49.9608],[5.73577,49.89684],[5.78257,49.87573]],[[2.99943,50.81035],[2.93719,50.79361],[2.96,50.7735],[2.92247,50.75729],[2.84203,50.75153],[2.86315,50.70826],[2.91065,50.69409],[2.94001,50.74543],[3.02932,50.77896],[2.99943,50.81035]]],icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/SPW(allonie)2009-2010aerialimagery.png"},{id:"SPW2015",name:"SPW(allonie) 2015 aerial imagery",type:"wms",template:"https://geoservices.wallonie.be/arcgis/services/IMAGERIE/ORTHO_2015/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",polygon:[[[5.78257,49.87573],[5.73919,49.83362],[5.75516,49.79146],[5.78839,49.79665],[5.91064,49.66249],[5.84857,49.59723],[5.87102,49.57599],[5.81857,49.54638],[5.66079,49.55362],[5.61108,49.50603],[5.55603,49.52928],[5.47051,49.49737],[5.45708,49.56703],[5.37522,49.62333],[5.31486,49.61137],[5.33243,49.65263],[5.26851,49.69657],[5.16628,49.69303],[4.99753,49.80006],[4.85164,49.79345],[4.84754,49.86806],[4.89013,49.90893],[4.79117,49.958],[4.87762,50.15374],[4.82418,50.16932],[4.70207,50.09556],[4.69441,49.99625],[4.44551,49.93722],[4.30589,49.96829],[4.19746,49.9546],[4.1352,50.01508],[4.22825,50.07842],[4.19682,50.13519],[4.12714,50.1355],[4.2052,50.27347],[4.16262,50.28896],[4.13538,50.25784],[4.02795,50.3584],[3.88574,50.32701],[3.84578,50.35323],[3.74546,50.35005],[3.70994,50.30316],[3.65756,50.37076],[3.65552,50.4617],[3.60586,50.49632],[3.4993,50.48921],[3.51992,50.52362],[3.47439,50.53368],[3.37698,50.49109],[3.28634,50.52793],[3.26104,50.70131],[3.20602,50.71139],[3.17839,50.75609],[3.30562,50.75466],[3.36077,50.70962],[3.45439,50.77072],[3.64047,50.72242],[3.67752,50.77062],[3.75857,50.78045],[3.77568,50.74789],[3.8798,50.75146],[3.9097,50.69245],[4.05868,50.69439],[4.14853,50.72834],[4.2467,50.6894],[4.46355,50.75511],[4.52399,50.72724],[4.59727,50.76359],[4.63445,50.74272],[4.64309,50.79755],[4.76014,50.80544],[4.92545,50.74275],[5.00339,50.76594],[5.07039,50.70649],[5.16508,50.6957],[5.16984,50.72257],[5.30912,50.71802],[5.35029,50.74629],[5.47863,50.72352],[5.68786,50.81193],[5.68225,50.75651],[5.7707,50.75132],[5.81963,50.71396],[5.88333,50.70992],[5.89217,50.75518],[5.96561,50.76107],[6.04045,50.74546],[6.03959,50.71833],[6.11066,50.72299],[6.18169,50.62383],[6.26953,50.62519],[6.17812,50.54153],[6.22658,50.49432],[6.35036,50.48854],[6.34298,50.38033],[6.40542,50.32331],[6.30647,50.32019],[6.27889,50.26734],[6.17377,50.23165],[6.19232,50.18203],[6.147,50.17775],[6.13779,50.12985],[6.10245,50.17055],[5.96368,50.17263],[5.96133,50.13136],[5.89532,50.11216],[5.81968,50.01329],[5.83578,49.97892],[5.77502,49.9608],[5.73577,49.89684],[5.78257,49.87573]],[[2.99943,50.81035],[2.93719,50.79361],[2.96,50.7735],[2.92247,50.75729],[2.84203,50.75153],[2.86315,50.70826],[2.91065,50.69409],[2.94001,50.74543],[3.02932,50.77896],[2.99943,50.81035]]],icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/SPW(allonie)2009-2010aerialimagery.png"},{id:"SPW2016",name:"SPW(allonie) 2016 aerial imagery",type:"wms",template:"https://geoservices.wallonie.be/arcgis/services/IMAGERIE/ORTHO_2016/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",polygon:[[[5.78257,49.87573],[5.73919,49.83362],[5.75516,49.79146],[5.78839,49.79665],[5.91064,49.66249],[5.84857,49.59723],[5.87102,49.57599],[5.81857,49.54638],[5.66079,49.55362],[5.61108,49.50603],[5.55603,49.52928],[5.47051,49.49737],[5.45708,49.56703],[5.37522,49.62333],[5.31486,49.61137],[5.33243,49.65263],[5.26851,49.69657],[5.16628,49.69303],[4.99753,49.80006],[4.85164,49.79345],[4.84754,49.86806],[4.89013,49.90893],[4.79117,49.958],[4.87762,50.15374],[4.82418,50.16932],[4.70207,50.09556],[4.69441,49.99625],[4.44551,49.93722],[4.30589,49.96829],[4.19746,49.9546],[4.1352,50.01508],[4.22825,50.07842],[4.19682,50.13519],[4.12714,50.1355],[4.2052,50.27347],[4.16262,50.28896],[4.13538,50.25784],[4.02795,50.3584],[3.88574,50.32701],[3.84578,50.35323],[3.74546,50.35005],[3.70994,50.30316],[3.65756,50.37076],[3.65552,50.4617],[3.60586,50.49632],[3.4993,50.48921],[3.51992,50.52362],[3.47439,50.53368],[3.37698,50.49109],[3.28634,50.52793],[3.26104,50.70131],[3.20602,50.71139],[3.17839,50.75609],[3.30562,50.75466],[3.36077,50.70962],[3.45439,50.77072],[3.64047,50.72242],[3.67752,50.77062],[3.75857,50.78045],[3.77568,50.74789],[3.8798,50.75146],[3.9097,50.69245],[4.05868,50.69439],[4.14853,50.72834],[4.2467,50.6894],[4.46355,50.75511],[4.52399,50.72724],[4.59727,50.76359],[4.63445,50.74272],[4.64309,50.79755],[4.76014,50.80544],[4.92545,50.74275],[5.00339,50.76594],[5.07039,50.70649],[5.16508,50.6957],[5.16984,50.72257],[5.30912,50.71802],[5.35029,50.74629],[5.47863,50.72352],[5.68786,50.81193],[5.68225,50.75651],[5.7707,50.75132],[5.81963,50.71396],[5.88333,50.70992],[5.89217,50.75518],[5.96561,50.76107],[6.04045,50.74546],[6.03959,50.71833],[6.11066,50.72299],[6.18169,50.62383],[6.26953,50.62519],[6.17812,50.54153],[6.22658,50.49432],[6.35036,50.48854],[6.34298,50.38033],[6.40542,50.32331],[6.30647,50.32019],[6.27889,50.26734],[6.17377,50.23165],[6.19232,50.18203],[6.147,50.17775],[6.13779,50.12985],[6.10245,50.17055],[5.96368,50.17263],[5.96133,50.13136],[5.89532,50.11216],[5.81968,50.01329],[5.83578,49.97892],[5.77502,49.9608],[5.73577,49.89684],[5.78257,49.87573]],[[2.99943,50.81035],[2.93719,50.79361],[2.96,50.7735],[2.92247,50.75729],[2.84203,50.75153],[2.86315,50.70826],[2.91065,50.69409],[2.94001,50.74543],[3.02932,50.77896],[2.99943,50.81035]]],icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/SPW(allonie)2009-2010aerialimagery.png"},{id:"SPW_ORTHO_LAST",name:"SPW(allonie) most recent aerial imagery",type:"wms",template:"https://geoservices.wallonie.be/arcgis/services/IMAGERIE/ORTHO_LAST/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[5.78257,49.87573],[5.73919,49.83362],[5.75516,49.79146],[5.78839,49.79665],[5.91064,49.66249],[5.84857,49.59723],[5.87102,49.57599],[5.81857,49.54638],[5.66079,49.55362],[5.61108,49.50603],[5.55603,49.52928],[5.47051,49.49737],[5.45708,49.56703],[5.37522,49.62333],[5.31486,49.61137],[5.33243,49.65263],[5.26851,49.69657],[5.16628,49.69303],[4.99753,49.80006],[4.85164,49.79345],[4.84754,49.86806],[4.89013,49.90893],[4.79117,49.958],[4.87762,50.15374],[4.82418,50.16932],[4.70207,50.09556],[4.69441,49.99625],[4.44551,49.93722],[4.30589,49.96829],[4.19746,49.9546],[4.1352,50.01508],[4.22825,50.07842],[4.19682,50.13519],[4.12714,50.1355],[4.2052,50.27347],[4.16262,50.28896],[4.13538,50.25784],[4.02795,50.3584],[3.88574,50.32701],[3.84578,50.35323],[3.74546,50.35005],[3.70994,50.30316],[3.65756,50.37076],[3.65552,50.4617],[3.60586,50.49632],[3.4993,50.48921],[3.51992,50.52362],[3.47439,50.53368],[3.37698,50.49109],[3.28634,50.52793],[3.26104,50.70131],[3.20602,50.71139],[3.17839,50.75609],[3.30562,50.75466],[3.36077,50.70962],[3.45439,50.77072],[3.64047,50.72242],[3.67752,50.77062],[3.75857,50.78045],[3.77568,50.74789],[3.8798,50.75146],[3.9097,50.69245],[4.05868,50.69439],[4.14853,50.72834],[4.2467,50.6894],[4.46355,50.75511],[4.52399,50.72724],[4.59727,50.76359],[4.63445,50.74272],[4.64309,50.79755],[4.76014,50.80544],[4.92545,50.74275],[5.00339,50.76594],[5.07039,50.70649],[5.16508,50.6957],[5.16984,50.72257],[5.30912,50.71802],[5.35029,50.74629],[5.47863,50.72352],[5.68786,50.81193],[5.68225,50.75651],[5.7707,50.75132],[5.81963,50.71396],[5.88333,50.70992],[5.89217,50.75518],[5.96561,50.76107],[6.04045,50.74546],[6.03959,50.71833],[6.11066,50.72299],[6.18169,50.62383],[6.26953,50.62519],[6.17812,50.54153],[6.22658,50.49432],[6.35036,50.48854],[6.34298,50.38033],[6.40542,50.32331],[6.30647,50.32019],[6.27889,50.26734],[6.17377,50.23165],[6.19232,50.18203],[6.147,50.17775],[6.13779,50.12985],[6.10245,50.17055],[5.96368,50.17263],[5.96133,50.13136],[5.89532,50.11216],[5.81968,50.01329],[5.83578,49.97892],[5.77502,49.9608],[5.73577,49.89684],[5.78257,49.87573]],[[2.99943,50.81035],[2.93719,50.79361],[2.96,50.7735],[2.92247,50.75729],[2.84203,50.75153],[2.86315,50.70826],[2.91065,50.69409],[2.94001,50.74543],[3.02932,50.77896],[2.99943,50.81035]]],best:true,icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/SPW(allonie)2009-2010aerialimagery.png"},{id:"SPW_PICC",name:"SPW(allonie) PICC numerical imagery",type:"wms",template:"https://geoservices.wallonie.be/arcgis/services/TOPOGRAPHIE/PICC_VDIFF/MapServer/WmsServer?SERVICE=WMS&VERSION=1.1.1&FORMAT=image/png8&TRANSPARENT=FALSE&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&LAYERS=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",projection:"EPSG:3857",polygon:[[[5.78257,49.87573],[5.73919,49.83362],[5.75516,49.79146],[5.78839,49.79665],[5.91064,49.66249],[5.84857,49.59723],[5.87102,49.57599],[5.81857,49.54638],[5.66079,49.55362],[5.61108,49.50603],[5.55603,49.52928],[5.47051,49.49737],[5.45708,49.56703],[5.37522,49.62333],[5.31486,49.61137],[5.33243,49.65263],[5.26851,49.69657],[5.16628,49.69303],[4.99753,49.80006],[4.85164,49.79345],[4.84754,49.86806],[4.89013,49.90893],[4.79117,49.958],[4.87762,50.15374],[4.82418,50.16932],[4.70207,50.09556],[4.69441,49.99625],[4.44551,49.93722],[4.30589,49.96829],[4.19746,49.9546],[4.1352,50.01508],[4.22825,50.07842],[4.19682,50.13519],[4.12714,50.1355],[4.2052,50.27347],[4.16262,50.28896],[4.13538,50.25784],[4.02795,50.3584],[3.88574,50.32701],[3.84578,50.35323],[3.74546,50.35005],[3.70994,50.30316],[3.65756,50.37076],[3.65552,50.4617],[3.60586,50.49632],[3.4993,50.48921],[3.51992,50.52362],[3.47439,50.53368],[3.37698,50.49109],[3.28634,50.52793],[3.26104,50.70131],[3.20602,50.71139],[3.17839,50.75609],[3.30562,50.75466],[3.36077,50.70962],[3.45439,50.77072],[3.64047,50.72242],[3.67752,50.77062],[3.75857,50.78045],[3.77568,50.74789],[3.8798,50.75146],[3.9097,50.69245],[4.05868,50.69439],[4.14853,50.72834],[4.2467,50.6894],[4.46355,50.75511],[4.52399,50.72724],[4.59727,50.76359],[4.63445,50.74272],[4.64309,50.79755],[4.76014,50.80544],[4.92545,50.74275],[5.00339,50.76594],[5.07039,50.70649],[5.16508,50.6957],[5.16984,50.72257],[5.30912,50.71802],[5.35029,50.74629],[5.47863,50.72352],[5.68786,50.81193],[5.68225,50.75651],[5.7707,50.75132],[5.81963,50.71396],[5.88333,50.70992],[5.89217,50.75518],[5.96561,50.76107],[6.04045,50.74546],[6.03959,50.71833],[6.11066,50.72299],[6.18169,50.62383],[6.26953,50.62519],[6.17812,50.54153],[6.22658,50.49432],[6.35036,50.48854],[6.34298,50.38033],[6.40542,50.32331],[6.30647,50.32019],[6.27889,50.26734],[6.17377,50.23165],[6.19232,50.18203],[6.147,50.17775],[6.13779,50.12985],[6.10245,50.17055],[5.96368,50.17263],[5.96133,50.13136],[5.89532,50.11216],[5.81968,50.01329],[5.83578,49.97892],[5.77502,49.9608],[5.73577,49.89684],[5.78257,49.87573]],[[2.99943,50.81035],[2.93719,50.79361],[2.96,50.7735],[2.92247,50.75729],[2.84203,50.75153],[2.86315,50.70826],[2.91065,50.69409],[2.94001,50.74543],[3.02932,50.77896],[2.99943,50.81035]]],icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/SPW(allonie)2009-2010aerialimagery.png"},{id:"SPWrelief2014",name:"SPW(allonie) shaded relief",type:"wms",template:"https://geoservices.wallonie.be/arcgis/services/RELIEF/WALLONIE_MNT_2013_2014_HILLSHADE/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2014-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",polygon:[[[5.78257,49.87573],[5.73919,49.83362],[5.75516,49.79146],[5.78839,49.79665],[5.91064,49.66249],[5.84857,49.59723],[5.87102,49.57599],[5.81857,49.54638],[5.66079,49.55362],[5.61108,49.50603],[5.55603,49.52928],[5.47051,49.49737],[5.45708,49.56703],[5.37522,49.62333],[5.31486,49.61137],[5.33243,49.65263],[5.26851,49.69657],[5.16628,49.69303],[4.99753,49.80006],[4.85164,49.79345],[4.84754,49.86806],[4.89013,49.90893],[4.79117,49.958],[4.87762,50.15374],[4.82418,50.16932],[4.70207,50.09556],[4.69441,49.99625],[4.44551,49.93722],[4.30589,49.96829],[4.19746,49.9546],[4.1352,50.01508],[4.22825,50.07842],[4.19682,50.13519],[4.12714,50.1355],[4.2052,50.27347],[4.16262,50.28896],[4.13538,50.25784],[4.02795,50.3584],[3.88574,50.32701],[3.84578,50.35323],[3.74546,50.35005],[3.70994,50.30316],[3.65756,50.37076],[3.65552,50.4617],[3.60586,50.49632],[3.4993,50.48921],[3.51992,50.52362],[3.47439,50.53368],[3.37698,50.49109],[3.28634,50.52793],[3.26104,50.70131],[3.20602,50.71139],[3.17839,50.75609],[3.30562,50.75466],[3.36077,50.70962],[3.45439,50.77072],[3.64047,50.72242],[3.67752,50.77062],[3.75857,50.78045],[3.77568,50.74789],[3.8798,50.75146],[3.9097,50.69245],[4.05868,50.69439],[4.14853,50.72834],[4.2467,50.6894],[4.46355,50.75511],[4.52399,50.72724],[4.59727,50.76359],[4.63445,50.74272],[4.64309,50.79755],[4.76014,50.80544],[4.92545,50.74275],[5.00339,50.76594],[5.07039,50.70649],[5.16508,50.6957],[5.16984,50.72257],[5.30912,50.71802],[5.35029,50.74629],[5.47863,50.72352],[5.68786,50.81193],[5.68225,50.75651],[5.7707,50.75132],[5.81963,50.71396],[5.88333,50.70992],[5.89217,50.75518],[5.96561,50.76107],[6.04045,50.74546],[6.03959,50.71833],[6.11066,50.72299],[6.18169,50.62383],[6.26953,50.62519],[6.17812,50.54153],[6.22658,50.49432],[6.35036,50.48854],[6.34298,50.38033],[6.40542,50.32331],[6.30647,50.32019],[6.27889,50.26734],[6.17377,50.23165],[6.19232,50.18203],[6.147,50.17775],[6.13779,50.12985],[6.10245,50.17055],[5.96368,50.17263],[5.96133,50.13136],[5.89532,50.11216],[5.81968,50.01329],[5.83578,49.97892],[5.77502,49.9608],[5.73577,49.89684],[5.78257,49.87573]],[[2.99943,50.81035],[2.93719,50.79361],[2.96,50.7735],[2.92247,50.75729],[2.84203,50.75153],[2.86315,50.70826],[2.91065,50.69409],[2.94001,50.74543],[3.02932,50.77896],[2.99943,50.81035]]],icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/SPW(allonie)2009-2010aerialimagery.png"},{id:"ssb-sentrum",name:"SSB City Centres overlay",type:"wms",template:"https://ogc.ssb.no/wms.ashx?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=layer_193&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,22],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://www.ssb.no/arealsentrum/",terms_text:"© SSB",description:"Downtown areas with significant commercial and service activities.",icon:"http://www.fosterhjemsforening.no/wp-content/uploads/2015/06/SSB_logo1.png",overlay:true},{id:"ssb-tettsteder",name:"SSB Urban Areas overlay",type:"wms",template:"https://ogc.ssb.no/wms.ashx?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=layer_198&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,22],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://www.ssb.no/beftett",terms_text:"© SSB",description:"Human settlements of at least 200 people with less than 200 meters between households",icon:"http://www.fosterhjemsforening.no/wp-content/uploads/2015/06/SSB_logo1.png",overlay:true},{id:"Bern-bern2016-tms",name:"Stadt Bern 10cm (2016)",type:"tms",template:"https://mapproxy.osm.ch/tiles/bern2016/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",zoomExtent:[8,21],polygon:[[[7.29431,46.92376],[7.29827,46.92747],[7.30616,46.93095],[7.30433,46.93623],[7.30686,46.94037],[7.32464,46.94328],[7.32845,46.94641],[7.34141,46.94608],[7.34385,46.94737],[7.34346,46.94879],[7.35136,46.94855],[7.35056,46.95021],[7.35309,46.95193],[7.3582,46.95118],[7.3685,46.95662],[7.37151,46.96073],[7.37503,46.95983],[7.37851,46.96147],[7.38062,46.96547],[7.38321,46.9663],[7.3938,46.96693],[7.40005,46.96918],[7.40829,46.96869],[7.42817,46.9738],[7.43271,46.97269],[7.43536,46.96843],[7.43785,46.96843],[7.44125,46.97679],[7.44569,46.97479],[7.44838,46.97564],[7.4477,46.97901],[7.44405,46.97807],[7.44127,46.97982],[7.45067,46.99015],[7.45221,46.98968],[7.45465,46.97782],[7.46804,46.97583],[7.47079,46.97],[7.47019,46.96741],[7.47816,46.97118],[7.48452,46.97016],[7.48613,46.9679],[7.48579,46.96468],[7.47847,46.9629],[7.48029,46.96068],[7.47893,46.95878],[7.47978,46.9566],[7.47701,46.95446],[7.48405,46.94999],[7.48339,46.9452],[7.49556,46.93962],[7.49351,46.93766],[7.4908,46.93876],[7.4895,46.93687],[7.47667,46.93695],[7.47811,46.93625],[7.4747,46.93392],[7.47535,46.93299],[7.4691,46.92924],[7.47077,46.9255],[7.45857,46.93484],[7.44764,46.93043],[7.43542,46.93497],[7.4338,46.93312],[7.43764,46.93074],[7.41469,46.93682],[7.41384,46.93157],[7.40708,46.93038],[7.40806,46.92563],[7.40213,46.9242],[7.40148,46.92119],[7.38757,46.93045],[7.38231,46.92728],[7.38002,46.92989],[7.38087,46.93241],[7.37487,46.93143],[7.37489,46.93271],[7.36807,46.93239],[7.36831,46.93043],[7.36041,46.92859],[7.36056,46.9272],[7.33878,46.92454],[7.33937,46.91967],[7.32746,46.91903],[7.32692,46.9236],[7.32437,46.92519],[7.30823,46.92229],[7.29431,46.92376]]],terms_text:"Orthophoto 2016, Vermessungsamt Stadt Bern",best:true,description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{id:"Bern-2012",name:"Stadt Bern 10cm/25cm (2012)",type:"tms",template:"https://mapproxy.osm.ch/tiles/bern2012/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",zoomExtent:[14,19],polygon:[[[7.3807,47.00952],[7.38073,47.02301],[7.43853,47.02303],[7.43865,47.01408],[7.45174,47.014],[7.45172,47.00503],[7.54111,47.005],[7.54111,46.99873],[7.54378,46.99871],[7.54375,46.98696],[7.55682,46.987],[7.55685,46.96003],[7.51744,46.96001],[7.51744,46.95108],[7.53051,46.95106],[7.53051,46.92407],[7.51741,46.92405],[7.51738,46.91505],[7.53042,46.91507],[7.53048,46.9061],[7.54358,46.90602],[7.54358,46.87905],[7.55659,46.87903],[7.55662,46.8611],[7.54349,46.86104],[7.5434,46.85212],[7.49095,46.85212],[7.49107,46.87907],[7.47794,46.87909],[7.47797,46.89707],[7.45168,46.89713],[7.45171,46.88808],[7.43855,46.88814],[7.43858,46.87015],[7.41233,46.87015],[7.41236,46.87907],[7.39917,46.87911],[7.3992,46.86108],[7.38613,46.86114],[7.3861,46.85218],[7.373,46.85216],[7.37303,46.86112],[7.34677,46.8611],[7.3468,46.88808],[7.25488,46.88796],[7.25485,46.90596],[7.24172,46.90592],[7.24169,46.91497],[7.22856,46.91493],[7.22833,46.96887],[7.24146,46.96891],[7.24149,46.98688],[7.26769,46.98694],[7.26777,46.99593],[7.28078,46.99595],[7.2809,47.0094],[7.3807,47.00952]]],terms_text:"Orthophoto 2012, Vermessungsamt Stadt Bern",description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{id:"Uster-2008",name:"Stadt Uster Orthophoto 2008 10cm",type:"tms",template:"https://mapproxy.osm.ch/tiles/uster/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",endDate:"2008-01-01T00:00:00.000Z",startDate:"2008-01-01T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[8.68,47.32],[8.74,47.32],[8.74,47.365],[8.68,47.365],[8.68,47.32]]],terms_text:"Stadt Uster Vermessung Orthophoto 2008",description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{id:"Zuerich-zh_luftbild2011-tms",name:"Stadt Zürich Luftbild 2011",type:"tms",template:"https://mapproxy.osm.ch/tiles/zh_luftbild2011/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",endDate:"2011-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[8.44624,47.44143],[8.63178,47.43968],[8.62895,47.31377],[8.44381,47.31555],[8.44624,47.44143]]],terms_text:"Stadt Zürich Luftbild 2011",description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{id:"Zuerich-city_map",name:"Stadtplan Zürich",type:"tms",template:"https://mapproxy.osm.ch/tiles/zh_stadtplan/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",zoomExtent:[0,21],polygon:[[[8.56681,47.34713],[8.56665,47.34706],[8.56563,47.34684],[8.56575,47.34666],[8.56509,47.34645],[8.54207,47.33502],[8.54073,47.33376],[8.5403,47.33396],[8.54019,47.33372],[8.54042,47.33358],[8.5388,47.33208],[8.53642,47.33076],[8.53622,47.33018],[8.53345,47.32992],[8.5318,47.3295],[8.53145,47.32846],[8.53102,47.32789],[8.52974,47.32777],[8.52969,47.32687],[8.52899,47.32698],[8.52813,47.32685],[8.52802,47.32635],[8.52755,47.32639],[8.52762,47.32616],[8.52579,47.32619],[8.52563,47.32575],[8.52426,47.32608],[8.5242,47.32486],[8.52372,47.32416],[8.52304,47.32433],[8.52193,47.32436],[8.52194,47.32394],[8.51932,47.32401],[8.51868,47.32386],[8.51768,47.3232],[8.51642,47.32308],[8.5156,47.32315],[8.51472,47.32272],[8.51295,47.3229],[8.51162,47.32222],[8.50957,47.32202],[8.5095,47.32165],[8.50788,47.32203],[8.50735,47.32173],[8.50529,47.32144],[8.50476,47.32121],[8.5043,47.32074],[8.50317,47.32022],[8.50241,47.32053],[8.50227,47.32082],[8.50152,47.32129],[8.50102,47.32198],[8.50095,47.32259],[8.5006,47.32278],[8.50078,47.3237],[8.50066,47.32451],[8.50098,47.32595],[8.5015,47.3265],[8.50159,47.32732],[8.50188,47.32765],[8.50132,47.32883],[8.5014,47.32903],[8.50069,47.32979],[8.50087,47.33053],[8.50063,47.3311],[8.50112,47.33183],[8.50075,47.33202],[8.50078,47.33224],[8.50106,47.3326],[8.50191,47.33303],[8.5022,47.33364],[8.50177,47.33412],[8.50152,47.33504],[8.50199,47.33666],[8.50161,47.33728],[8.49877,47.33968],[8.49808,47.34169],[8.49702,47.34247],[8.49709,47.34326],[8.49798,47.34365],[8.4981,47.34387],[8.49817,47.34453],[8.49773,47.34521],[8.49636,47.34648],[8.4951,47.34691],[8.49467,47.3476],[8.49285,47.34828],[8.49206,47.3495],[8.49145,47.34964],[8.49128,47.34983],[8.49089,47.35067],[8.49,47.35056],[8.48813,47.352],[8.48691,47.35203],[8.4868,47.3522],[8.48728,47.35311],[8.4871,47.3534],[8.48501,47.35469],[8.48463,47.35536],[8.48463,47.3567],[8.48426,47.35737],[8.48321,47.35814],[8.48272,47.35907],[8.48205,47.35954],[8.47879,47.36078],[8.47698,47.36029],[8.47365,47.36081],[8.47275,47.36079],[8.47169,47.36132],[8.47053,47.36166],[8.46951,47.36438],[8.4664,47.36574],[8.46583,47.3661],[8.46545,47.36664],[8.46485,47.36681],[8.46427,47.36728],[8.46418,47.36838],[8.4649,47.36897],[8.46482,47.36911],[8.46938,47.37136],[8.47042,47.3726],[8.47022,47.37395],[8.46868,47.37382],[8.46761,47.37357],[8.46544,47.37444],[8.46288,47.37603],[8.45995,47.3775],[8.45638,47.37801],[8.45116,47.37817],[8.45047,47.37836],[8.44847,47.37967],[8.44801,47.38025],[8.45174,47.38062],[8.45371,47.38027],[8.45614,47.38072],[8.45669,47.38094],[8.45673,47.38244],[8.45745,47.38222],[8.45843,47.38231],[8.45841,47.38263],[8.45745,47.38325],[8.45767,47.3834],[8.45756,47.38371],[8.45807,47.38388],[8.46004,47.38594],[8.46088,47.38704],[8.46121,47.38795],[8.46104,47.38803],[8.46381,47.39053],[8.46518,47.39132],[8.46556,47.39113],[8.46618,47.39113],[8.46727,47.39065],[8.46697,47.39131],[8.46739,47.3929],[8.4671,47.39334],[8.46607,47.39378],[8.4651,47.39453],[8.46484,47.39481],[8.46488,47.39508],[8.46535,47.39492],[8.46854,47.39461],[8.47018,47.39401],[8.47066,47.39439],[8.47191,47.39388],[8.47208,47.39408],[8.47152,47.3943],[8.47151,47.3949],[8.4721,47.39517],[8.47301,47.39506],[8.47349,47.396],[8.46516,47.39829],[8.46568,47.39922],[8.46759,47.39873],[8.46806,47.39957],[8.46615,47.40006],[8.4677,47.403],[8.4699,47.40298],[8.47551,47.40381],[8.47815,47.40387],[8.47819,47.40508],[8.47738,47.40517],[8.47705,47.40619],[8.47729,47.40914],[8.47703,47.40935],[8.47543,47.40971],[8.47583,47.41077],[8.47605,47.41072],[8.47628,47.41102],[8.47665,47.41097],[8.47725,47.41194],[8.47488,47.41241],[8.47394,47.41222],[8.47303,47.41146],[8.47268,47.41058],[8.47101,47.41094],[8.47113,47.41137],[8.47085,47.41167],[8.47044,47.41159],[8.47031,47.41253],[8.46876,47.41225],[8.46801,47.41334],[8.46863,47.41363],[8.46857,47.41408],[8.46955,47.41484],[8.47007,47.41557],[8.46913,47.41649],[8.46913,47.41693],[8.46962,47.41752],[8.47158,47.41763],[8.4772,47.41974],[8.47688,47.42016],[8.47783,47.42212],[8.47895,47.42172],[8.47937,47.42113],[8.47972,47.42141],[8.48131,47.42134],[8.48171,47.423],[8.48294,47.42266],[8.48292,47.42222],[8.48609,47.42155],[8.48658,47.42164],[8.48683,47.42186],[8.48796,47.42201],[8.48851,47.42271],[8.49019,47.42234],[8.491,47.4239],[8.49006,47.42435],[8.49007,47.42532],[8.49027,47.42536],[8.49017,47.42578],[8.48552,47.42712],[8.48481,47.42784],[8.48466,47.42873],[8.48437,47.42896],[8.48445,47.42979],[8.48579,47.43103],[8.49562,47.43281],[8.50027,47.43442],[8.50207,47.43467],[8.50364,47.43402],[8.50997,47.43213],[8.51155,47.43116],[8.51274,47.43085],[8.516,47.43174],[8.51628,47.43175],[8.51681,47.43133],[8.51872,47.4319],[8.51979,47.43167],[8.52463,47.43126],[8.52549,47.43316],[8.5303,47.43207],[8.53063,47.43266],[8.533,47.43228],[8.53374,47.43251],[8.53467,47.432],[8.53521,47.43188],[8.53606,47.43187],[8.5374,47.4314],[8.53964,47.43126],[8.5401,47.4311],[8.54033,47.43186],[8.54363,47.43143],[8.54284,47.43289],[8.54311,47.43288],[8.54451,47.4325],[8.54459,47.43262],[8.54607,47.43207],[8.54858,47.43142],[8.55009,47.43128],[8.55098,47.43102],[8.55199,47.43104],[8.55535,47.43066],[8.5561,47.42803],[8.55684,47.42624],[8.55783,47.42554],[8.55697,47.4249],[8.55736,47.42472],[8.5569,47.42424],[8.55723,47.4241],[8.55419,47.4208],[8.56082,47.41817],[8.56129,47.41829],[8.56235,47.41632],[8.56282,47.41643],[8.56323,47.41565],[8.56622,47.41632],[8.56692,47.41629],[8.56735,47.41649],[8.5678,47.41684],[8.56875,47.41855],[8.56903,47.41871],[8.5696,47.41868],[8.56944,47.41926],[8.57223,47.41893],[8.57367,47.42004],[8.57378,47.4178],[8.57342,47.41711],[8.57386,47.41438],[8.57384,47.41324],[8.57331,47.41257],[8.5726,47.41207],[8.573,47.41144],[8.58806,47.40797],[8.58894,47.40756],[8.59312,47.40704],[8.59728,47.40631],[8.59722,47.406],[8.59608,47.40612],[8.59378,47.40222],[8.59622,47.40154],[8.5948,47.39918],[8.59725,47.39851],[8.59644,47.39715],[8.59637,47.39663],[8.59623,47.39646],[8.59453,47.39712],[8.59392,47.39647],[8.59335,47.39614],[8.59208,47.39691],[8.59172,47.39681],[8.59148,47.397],[8.58828,47.3958],[8.58905,47.39501],[8.58995,47.39478],[8.58818,47.39351],[8.58752,47.39321],[8.58747,47.39297],[8.58619,47.3928],[8.58442,47.39195],[8.58369,47.39008],[8.58305,47.38905],[8.58316,47.38831],[8.58437,47.38834],[8.58432,47.38894],[8.58492,47.39011],[8.58528,47.3904],[8.58696,47.39017],[8.5869,47.38977],[8.58765,47.38905],[8.58698,47.38793],[8.59181,47.38638],[8.59307,47.38565],[8.59299,47.38523],[8.59354,47.38522],[8.59274,47.38417],[8.59082,47.38476],[8.59013,47.38381],[8.58966,47.384],[8.58956,47.38373],[8.59217,47.38311],[8.59151,47.38244],[8.59384,47.38081],[8.59407,47.38061],[8.59406,47.38029],[8.59556,47.3796],[8.59574,47.37927],[8.59721,47.37849],[8.59674,47.37782],[8.59702,47.37716],[8.5976,47.37661],[8.59705,47.37589],[8.59778,47.37557],[8.59828,47.3751],[8.59855,47.37473],[8.59813,47.37447],[8.6002,47.37331],[8.60053,47.3734],[8.60096,47.37312],[8.60194,47.37198],[8.60192,47.37171],[8.60324,47.37131],[8.60607,47.36871],[8.60745,47.36816],[8.60812,47.36761],[8.61067,47.3673],[8.612,47.36684],[8.61308,47.36776],[8.61344,47.36779],[8.61366,47.36802],[8.61549,47.3677],[8.61645,47.36841],[8.61665,47.36828],[8.61764,47.36681],[8.61709,47.36626],[8.61682,47.36535],[8.61565,47.36466],[8.61495,47.36458],[8.61557,47.36342],[8.61566,47.36273],[8.61482,47.36263],[8.6147,47.36151],[8.61929,47.36121],[8.61996,47.36104],[8.62174,47.36007],[8.62257,47.35983],[8.62187,47.35946],[8.62133,47.35746],[8.62351,47.35592],[8.62352,47.35561],[8.62544,47.35466],[8.62416,47.35397],[8.62245,47.35364],[8.62209,47.35334],[8.61989,47.35367],[8.61976,47.35385],[8.61844,47.35382],[8.61839,47.35425],[8.61708,47.35414],[8.61569,47.35442],[8.6152,47.3541],[8.61386,47.35402],[8.61255,47.35437],[8.61156,47.35394],[8.61107,47.35352],[8.61042,47.35337],[8.60946,47.35352],[8.60776,47.35333],[8.60607,47.35363],[8.60506,47.35359],[8.6038,47.353],[8.60305,47.35219],[8.6032,47.35207],[8.60294,47.35175],[8.603,47.35076],[8.60262,47.35073],[8.6016,47.35073],[8.60104,47.35105],[8.60026,47.35112],[8.5996,47.35145],[8.59859,47.35145],[8.59824,47.35165],[8.59689,47.3514],[8.59666,47.35161],[8.59596,47.35169],[8.59564,47.3519],[8.59494,47.35161],[8.59454,47.35175],[8.5939,47.35161],[8.5935,47.35211],[8.59229,47.3523],[8.59189,47.35278],[8.59118,47.35321],[8.59047,47.35271],[8.59014,47.35286],[8.58846,47.35289],[8.58797,47.35307],[8.58748,47.35267],[8.5863,47.35288],[8.58591,47.35231],[8.5853,47.35201],[8.58462,47.35141],[8.58417,47.35129],[8.58438,47.35116],[8.58398,47.35085],[8.58348,47.35104],[8.58335,47.35087],[8.58221,47.35101],[8.58246,47.35062],[8.57851,47.34873],[8.57827,47.34888],[8.57786,47.34865],[8.57686,47.34878],[8.57688,47.34859],[8.57625,47.34839],[8.57308,47.34751],[8.573,47.34765],[8.57214,47.34744],[8.57163,47.34728],[8.5717,47.34712],[8.57029,47.34672],[8.56968,47.3476],[8.56741,47.34674],[8.56681,47.34713]]],terms_text:"Stadt Zürich Open Government Data",description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{id:"stamen-terrain-background",name:"Stamen Terrain",type:"tms",template:"https://stamen-tiles-{switch:a,b,c,d}.a.ssl.fastly.net/terrain-background/{zoom}/{x}/{y}.jpg",zoomExtent:[4,18],terms_url:"http://maps.stamen.com/#terrain",terms_text:"Map tiles by Stamen Design, under CC BY 3.0. Data by OpenStreetMap, under ODbL",icon:"https://stamen.com/wp-content/uploads/2016/07/stamen_compass_rose_small-01.png"},{id:"stockholm-orto",name:"Stockholm Orthophoto",type:"wms",template:"https://openmap.stockholm.se/bios/wms/app/baggis/web/WMS_STHLM_ORTOFOTO_2016?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=p_1002630&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[5,21],polygon:[[[17.8755,59.2625],[17.94411,59.27307],[18.09551,59.22603],[18.19582,59.22786],[18.20297,59.24886],[18.12538,59.30779],[18.1786,59.32566],[18.09876,59.3721],[18.04264,59.37816],[18.00796,59.34334],[17.93655,59.37641],[17.97483,59.40246],[17.90882,59.4417],[17.8854,59.43792],[17.88918,59.41382],[17.84077,59.38568],[17.81708,59.40054],[17.77725,59.39984],[17.75622,59.3916],[17.79899,59.36204],[17.94993,59.31121],[17.85622,59.28412],[17.8755,59.2625]]],terms_url:"http://dataportalen.stockholm.se/dataportalen/",terms_text:"© Stockholm municipality, CC0",best:true,description:"Orthophotos from the municipality of Stockholm 2016, CC0 license",icon:"https://upload.wikimedia.org/wikipedia/commons/thumb/4/4d/Stockholm_vapen_bra.svg/196px-Stockholm_vapen_bra.svg.png"},{id:"Surrey-Air_Survey",name:"Surrey Air Survey",type:"tms",template:"https://{switch:a,b,c}.surrey.aerial.openstreetmap.org.uk/layer/gb_surrey_aerial/{zoom}/{x}/{y}.png",endDate:"2009-01-01T00:00:00.000Z",startDate:"2007-01-01T00:00:00.000Z",zoomExtent:[8,21],polygon:[[[-0.75248,51.08219],[-0.75952,51.08563],[-0.80143,51.14579],[-0.83989,51.14407],[-0.83577,51.18024],[-0.85295,51.20113],[-0.85227,51.20962],[-0.84952,51.2179],[-0.82669,51.24037],[-0.8121,51.24692],[-0.77365,51.24596],[-0.75442,51.23811],[-0.75408,51.23392],[-0.74464,51.23338],[-0.74307,51.28472],[-0.7515,51.30695],[-0.76644,51.3121],[-0.78206,51.32702],[-0.78154,51.33881],[-0.73743,51.37205],[-0.71923,51.37697],[-0.67958,51.3848],[-0.68078,51.39015],[-0.65314,51.39176],[-0.63014,51.39058],[-0.62911,51.39701],[-0.62344,51.39776],[-0.61314,51.42956],[-0.60025,51.44591],[-0.58671,51.44454],[-0.57624,51.4532],[-0.56268,51.45235],[-0.54774,51.447],[-0.53727,51.44486],[-0.5371,51.45267],[-0.54396,51.45459],[-0.54053,51.46989],[-0.53092,51.47609],[-0.50912,51.47448],[-0.5086,51.46957],[-0.49006,51.46828],[-0.45264,51.46069],[-0.44869,51.44293],[-0.44148,51.44186],[-0.44183,51.43694],[-0.41127,51.43801],[-0.40149,51.42795],[-0.38071,51.42624],[-0.38054,51.41617],[-0.34913,51.41382],[-0.3275,51.40375],[-0.30398,51.39904],[-0.30192,51.37547],[-0.30948,51.36969],[-0.31119,51.35297],[-0.29557,51.35415],[-0.29231,51.36733],[-0.2851,51.36808],[-0.27875,51.37719],[-0.26553,51.38372],[-0.24115,51.3848],[-0.21231,51.36283],[-0.21077,51.34986],[-0.19086,51.35029],[-0.15429,51.33388],[-0.14966,51.30577],[-0.10743,51.29665],[-0.08872,51.30996],[-0.08786,51.32208],[-0.0652,51.32154],[-0.06417,51.32648],[-0.05198,51.32637],[-0.05284,51.33463],[-0.03308,51.34309],[0.00192,51.33763],[0.01188,51.3282],[0.01393,51.29944],[0.02029,51.29944],[0.02406,51.30727],[0.03316,51.30867],[0.04552,51.30545],[0.05239,51.28774],[0.06166,51.25778],[0.06406,51.24155],[0.04621,51.21263],[0.04071,51.21091],[0.04483,51.19898],[0.04947,51.19973],[0.05582,51.19446],[0.06114,51.17907],[0.06234,51.15421],[0.05771,51.14171],[0.02046,51.13654],[-0.0446,51.13364],[-0.1567,51.13525],[-0.15721,51.129],[-0.22879,51.11834],[-0.24733,51.11834],[-0.25008,51.12114],[-0.29935,51.1137],[-0.32218,51.11198],[-0.32235,51.10584],[-0.3596,51.10196],[-0.35891,51.11133],[-0.38638,51.11176],[-0.3869,51.10625],[-0.4281,51.09472],[-0.48568,51.09516],[-0.48713,51.08723],[-0.52974,51.08654],[-0.53023,51.07899],[-0.61046,51.07655],[-0.60997,51.08067],[-0.6578,51.07922],[-0.65828,51.07434],[-0.68365,51.07075],[-0.6998,51.07083],[-0.72966,51.07449],[-0.75248,51.08219]]]},{id:"Swietochlowice-2008",name:"Świętochłowice: Orthophotomap 2008 (aerial image)",type:"wms",template:"https://swietochlowice.geoportal2.pl/map/wms/wms.php?SERVICE=WMS&REQUEST=GetMap&VERSION=1.1.1&LAYERS=ortofotomapa2008&STYLES=&FORMAT=image/jpeg&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&SRS={proj}",projection:"EPSG:4326",endDate:"2008-01-01T00:00:00.000Z",startDate:"2008-01-01T00:00:00.000Z",zoomExtent:[0,23],polygon:[[[18.92818,50.32151],[18.93028,50.31766],[18.93402,50.31392],[18.93193,50.31119],[18.92556,50.30575],[18.92429,50.30354],[18.92964,50.30206],[18.93083,50.3004],[18.9283,50.2961],[18.93573,50.29356],[18.93885,50.28965],[18.9371,50.28727],[18.93966,50.28206],[18.93402,50.27553],[18.92953,50.27543],[18.93037,50.27338],[18.93413,50.27104],[18.93239,50.26883],[18.92716,50.26926],[18.90447,50.27371],[18.89758,50.27612],[18.89569,50.28028],[18.89783,50.28566],[18.89712,50.2878],[18.88292,50.29258],[18.88031,50.29473],[18.88311,50.29894],[18.88819,50.30164],[18.88326,50.30717],[18.88444,50.31183],[18.89149,50.31809],[18.89306,50.32558],[18.89568,50.32704],[18.92818,50.32151]]],terms_text:"Urząd Miasta Świętochłowice"},{id:"Swietochlowice-2009",name:"Świętochłowice: Orthophotomap 2009 (aerial image)",type:"wms",template:"https://swietochlowice.geoportal2.pl/map/wms/wms.php?SERVICE=WMS&REQUEST=GetMap&VERSION=1.1.1&LAYERS=ortofotomapa2009&STYLES=&FORMAT=image/jpeg&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&SRS={proj}",projection:"EPSG:4326",endDate:"2009-01-01T00:00:00.000Z",startDate:"2009-01-01T00:00:00.000Z",zoomExtent:[0,23],polygon:[[[18.92818,50.32151],[18.93028,50.31766],[18.93402,50.31392],[18.93193,50.31119],[18.92556,50.30575],[18.92429,50.30354],[18.92964,50.30206],[18.93083,50.3004],[18.9283,50.2961],[18.93573,50.29356],[18.93885,50.28965],[18.9371,50.28727],[18.93966,50.28206],[18.93402,50.27553],[18.92953,50.27543],[18.93037,50.27338],[18.93413,50.27104],[18.93239,50.26883],[18.92716,50.26926],[18.90447,50.27371],[18.89758,50.27612],[18.89569,50.28028],[18.89783,50.28566],[18.89712,50.2878],[18.88292,50.29258],[18.88031,50.29473],[18.88311,50.29894],[18.88819,50.30164],[18.88326,50.30717],[18.88444,50.31183],[18.89149,50.31809],[18.89306,50.32558],[18.89568,50.32704],[18.92818,50.32151]]],terms_text:"Urząd Miasta Świętochłowice"},{id:"Swietochlowice-2012",name:"Świętochłowice: Orthophotomap 2012 (aerial image)",type:"wms",template:"https://swietochlowice.geoportal2.pl/map/wms/wms.php?SERVICE=WMS&REQUEST=GetMap&VERSION=1.1.1&LAYERS=ortofotomapa2012&STYLES=&FORMAT=image/jpeg&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&SRS={proj}",projection:"EPSG:4326",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",zoomExtent:[0,23],polygon:[[[18.92818,50.32151],[18.93028,50.31766],[18.93402,50.31392],[18.93193,50.31119],[18.92556,50.30575],[18.92429,50.30354],[18.92964,50.30206],[18.93083,50.3004],[18.9283,50.2961],[18.93573,50.29356],[18.93885,50.28965],[18.9371,50.28727],[18.93966,50.28206],[18.93402,50.27553],[18.92953,50.27543],[18.93037,50.27338],[18.93413,50.27104],[18.93239,50.26883],[18.92716,50.26926],[18.90447,50.27371],[18.89758,50.27612],[18.89569,50.28028],[18.89783,50.28566],[18.89712,50.2878],[18.88292,50.29258],[18.88031,50.29473],[18.88311,50.29894],[18.88819,50.30164],[18.88326,50.30717],[18.88444,50.31183],[18.89149,50.31809],[18.89306,50.32558],[18.89568,50.32704],[18.92818,50.32151]]],terms_text:"Urząd Miasta Świętochłowice"},{id:"Szeged_2011",name:"Szeged orthophoto 2011",type:"tms",template:"http://e.tile.openstreetmap.hu/szeged-2011-10cm/{zoom}/{x}/{y}.png",endDate:"2011-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",zoomExtent:[10,22],polygon:[[[20.14599,46.22811],[20.13323,46.22904],[20.12584,46.22987],[20.12233,46.23099],[20.12085,46.23175],[20.11897,46.23351],[20.11312,46.24136],[20.11203,46.2433],[20.11157,46.245],[20.11119,46.24709],[20.11129,46.24877],[20.11159,46.25097],[20.11222,46.2528],[20.11299,46.25427],[20.11354,46.25535],[20.11477,46.2568],[20.13523,46.27685],[20.13664,46.27751],[20.13789,46.27803],[20.13939,46.27835],[20.14088,46.27846],[20.16115,46.27816],[20.16211,46.27816],[20.16359,46.2777],[20.16618,46.27615],[20.16878,46.27386],[20.16961,46.27144],[20.16959,46.27045],[20.17009,46.27044],[20.17399,46.26433],[20.17662,46.25829],[20.1948,46.25492],[20.18587,46.24481],[20.18466,46.24531],[20.17804,46.23831],[20.17818,46.23771],[20.17953,46.2371],[20.17257,46.23002],[20.16983,46.23504],[20.16877,46.23629],[20.16703,46.23785],[20.16594,46.23873],[20.16544,46.239],[20.16548,46.239],[20.16352,46.24014],[20.16021,46.2412],[20.15927,46.24153],[20.15927,46.24158],[20.15835,46.24185],[20.15495,46.24229],[20.15108,46.23515],[20.14938,46.23246],[20.14599,46.22811]]],terms_url:"http://www.geo.u-szeged.hu",terms_text:"SZTE TFGT - University of Szeged",best:true,description:"Inner part of Szeged"},{id:"TW_NLSC_WMS_EMAP6",name:"Taiwan e-Map Open Data",type:"tms",template:"https://wmts.nlsc.gov.tw/wmts/EMAP6_OPENDATA/default/GoogleMapsCompatible/{zoom}/{y}/{x}",zoomExtent:[0,15],polygon:[[[121.2237,25.76997],[122.2251,26.60305],[122.9312,22.57058],[120.6771,20.72799],[118.2509,23.26265],[118.3036,23.30751],[118.1978,24.34453],[118.1036,24.36172],[118.2283,24.49486],[118.4416,24.55302],[118.6024,24.46068],[120.0474,25.38843],[119.8935,25.78169],[119.787,26.2048],[120.4578,26.53253],[121.2237,25.76997]]],terms_url:"https://maps.nlsc.gov.tw/",terms_text:"© National Land Surveying and Mapping Center, Taiwan OGDL 1.0",icon:"https://osmlab.github.io/editor-layer-index/sources/asia/tw/Taiwane-MapOpenData.png"},{id:"TW_NLSC_WMS_LANDSECT",name:"Taiwan Land-Section Data",type:"wms",template:"https://wms.nlsc.gov.tw/wms?VERSION=1.1.1&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=LANDSECT&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[121.2237,25.76997],[122.2251,26.60305],[122.9312,22.57058],[120.6771,20.72799],[118.2509,23.26265],[118.3036,23.30751],[118.1978,24.34453],[118.1036,24.36172],[118.2283,24.49486],[118.4416,24.55302],[118.6024,24.46068],[120.0474,25.38843],[119.8935,25.78169],[119.787,26.2048],[120.4578,26.53253],[121.2237,25.76997]]],terms_url:"https://maps.nlsc.gov.tw/",terms_text:"© National Land Surveying and Mapping Center, Taiwan OGDL 1.0",icon:"https://osmlab.github.io/editor-layer-index/sources/asia/tw/Taiwane-MapOpenData.png"},{id:"TW_NLSC_WMS_Village",name:"Taiwan Village Boundaries",type:"wms",template:"https://wms.nlsc.gov.tw/wms?VERSION=1.1.1&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Village&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[121.2237,25.76997],[122.2251,26.60305],[122.9312,22.57058],[120.6771,20.72799],[118.2509,23.26265],[118.3036,23.30751],[118.1978,24.34453],[118.1036,24.36172],[118.2283,24.49486],[118.4416,24.55302],[118.6024,24.46068],[120.0474,25.38843],[119.8935,25.78169],[119.787,26.2048],[120.4578,26.53253],[121.2237,25.76997]]],terms_url:"https://maps.nlsc.gov.tw/",terms_text:"© National Land Surveying and Mapping Center, Taiwan OGDL 1.0",icon:"https://osmlab.github.io/editor-layer-index/sources/asia/tw/Taiwane-MapOpenData.png"},{id:"TEClines",name:"TEC bus lines",type:"wms",template:"https://geodata.tec-wl.be/arcgis/services/Lignes/MapServer/WMSServer?FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[5.40236,49.50688],[5.81984,49.54253],[6.1714,49.62089],[5.85829,49.68846],[5.7704,49.85343],[5.894,50.11832],[6.15492,50.13593],[6.39662,50.36775],[6.28126,50.46576],[6.11372,50.7933],[5.72646,50.77941],[5.70998,50.85229],[5.61385,50.80024],[5.46278,50.79677],[5.21284,50.70119],[4.94917,50.80371],[4.75966,50.80718],[4.72121,50.88869],[4.60585,50.77941],[4.48775,50.85749],[4.36964,50.85056],[4.15266,50.72728],[3.59236,50.76725],[3.29848,50.76377],[3.04579,50.80024],[2.86177,50.72728],[2.89748,50.68553],[3.0815,50.76725],[3.19685,50.68031],[3.28749,50.52691],[3.67201,50.47625],[3.68574,50.31692],[3.99062,50.27305],[4.14992,50.17465],[4.24055,50.08661],[4.15266,49.99842],[4.18562,49.96486],[4.55366,49.94542],[4.69923,50.03372],[4.81184,50.0919],[4.84206,50.01607],[4.86677,49.90475],[4.85854,49.80382],[5.08925,49.7648],[5.34743,49.60843],[5.40236,49.50688]]],icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/TECbusstops.png",overlay:true},{id:"TECstops",name:"TEC bus stops",type:"wms",template:"https://geodata.tec-wl.be/arcgis/services/Poteaux/MapServer/WMSServer?FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[5.40236,49.50688],[5.81984,49.54253],[6.1714,49.62089],[5.85829,49.68846],[5.7704,49.85343],[5.894,50.11832],[6.15492,50.13593],[6.39662,50.36775],[6.28126,50.46576],[6.11372,50.7933],[5.72646,50.77941],[5.70998,50.85229],[5.61385,50.80024],[5.46278,50.79677],[5.21284,50.70119],[4.94917,50.80371],[4.75966,50.80718],[4.72121,50.88869],[4.60585,50.77941],[4.48775,50.85749],[4.36964,50.85056],[4.15266,50.72728],[3.59236,50.76725],[3.29848,50.76377],[3.04579,50.80024],[2.86177,50.72728],[2.89748,50.68553],[3.0815,50.76725],[3.19685,50.68031],[3.28749,50.52691],[3.67201,50.47625],[3.68574,50.31692],[3.99062,50.27305],[4.14992,50.17465],[4.24055,50.08661],[4.15266,49.99842],[4.18562,49.96486],[4.55366,49.94542],[4.69923,50.03372],[4.81184,50.0919],[4.84206,50.01607],[4.86677,49.90475],[4.85854,49.80382],[5.08925,49.7648],[5.34743,49.60843],[5.40236,49.50688]]],icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/TECbusstops.png",overlay:true},{id:"teotonio_vilela",name:"Teotonio Vilela AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Teotonio%20Vilela&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.31164,-9.95468],[-36.31158,-9.94382],[-36.31145,-9.93197],[-36.31127,-9.92436],[-36.31123,-9.91848],[-36.31119,-9.91637],[-36.31141,-9.91324],[-36.3111,-9.90922],[-36.31108,-9.90318],[-36.31099,-9.89379],[-36.31089,-9.8842],[-36.31078,-9.87412],[-36.31068,-9.86457],[-36.3318,-9.86432],[-36.34001,-9.86437],[-36.3478,-9.86425],[-36.35917,-9.8642],[-36.37047,-9.86404],[-36.38448,-9.86386],[-36.40164,-9.86364],[-36.40221,-9.9225],[-36.40249,-9.93177],[-36.40259,-9.94183],[-36.40248,-9.94804],[-36.40266,-9.9537],[-36.3855,-9.95384],[-36.38283,-9.95392],[-36.37096,-9.95399],[-36.36232,-9.95423],[-36.34747,-9.95422],[-36.33287,-9.95446],[-36.3291,-9.95456],[-36.32089,-9.95459],[-36.31164,-9.95468]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"tnris.org",name:"Texas Orthophoto",type:"tms",template:"https://txgi.tnris.org/login/path/ecology-fiona-poem-romeo/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=texas&STYLE=&FORMAT=image/png&tileMatrixSet=0to20&tileMatrix=0to20:{zoom}&tileRow={y}&tileCol={x}",startDate:"2012-01-01T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[-99.99854,34.56018],[-95.55655,33.99257],[-93.89679,33.61039],[-93.98468,32.04103],[-93.41614,31.02505],[-93.74531,29.57268],[-96.50492,28.23159],[-97.36942,26.95467],[-97.04867,25.8053],[-99.07342,26.32559],[-100.76599,29.02532],[-102.33154,29.84339],[-103.13355,28.88112],[-104.28879,29.28831],[-104.72698,29.94816],[-104.72697,30.23535],[-106.5345,31.78457],[-106.75767,31.78457],[-106.75766,32.04386],[-106.61848,32.04385],[-103.11949,32.04376],[-103.09544,36.50046],[-103.05798,36.54269],[-100.00042,36.54222],[-99.99854,34.56018]]],terms_url:"https://tnris.org/maps-and-data/online-mapping-services",terms_text:"Texas Natural Resources Information System"},{id:"US-TIGER-Roads-2017",name:"TIGER Roads 2017",type:"tms",template:"https://{switch:a,b,c,d}.tiles.mapbox.com/styles/v1/openstreetmapus/cj8dftc3q1ecn2tnx9qhwyj0c/tiles/256/{zoom}/{x}/{y}?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcHVzIiwiYSI6ImNpcnF4Ym43dDBoOXZmYW04bWhlNWdrY2EifQ.4SFexuTUuKkZeerO3dgtmw",endDate:"2017-01-01T00:00:00.000Z",startDate:"2017-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[-124.76179,48.41301],[-124.60595,45.90245],[-124.99343,40.05576],[-122.53697,36.85661],[-119.97759,33.00641],[-117.67593,32.46302],[-114.86123,32.47999],[-111.00893,31.33601],[-108.19927,31.326],[-108.18711,31.77551],[-106.53072,31.78209],[-106.48421,31.74645],[-106.42932,31.75206],[-106.28689,31.56133],[-106.20525,31.4467],[-105.02053,30.5361],[-104.58819,29.69979],[-103.25189,28.89087],[-102.71736,29.39206],[-102.1514,29.74757],[-101.25529,29.48105],[-100.00624,28.00822],[-99.23511,26.4476],[-98.01091,25.9928],[-97.43502,25.8266],[-96.95553,25.98216],[-96.80617,27.79782],[-95.55633,28.58761],[-93.74053,29.47421],[-90.90285,28.85645],[-88.01567,28.99443],[-88.01625,30.00389],[-86.02775,30.00475],[-84.01879,28.99618],[-81.9972,25.98268],[-81.99666,25.01349],[-84.01656,25.01258],[-84.01601,24.00527],[-80.02,24.0071],[-79.89011,26.85507],[-80.02453,32.01613],[-75.41474,35.05319],[-74.02112,39.57279],[-72.00202,40.99125],[-69.87974,40.99205],[-69.84893,43.26199],[-66.94528,44.71049],[-67.75966,47.099],[-69.25051,47.51223],[-70.46149,46.21766],[-71.41227,45.25488],[-72.02225,45.00598],[-75.07988,44.98029],[-76.90231,43.80246],[-78.76239,43.62496],[-79.15798,43.44626],[-79.00601,42.80053],[-82.66248,41.68895],[-82.17616,43.58854],[-83.2814,46.13885],[-87.50645,48.01427],[-88.34922,48.29633],[-89.43531,47.98378],[-93.99811,49.00671],[-95.11054,49.412],[-96.01312,49.00605],[-123.32289,49.00429],[-123.22752,48.18499],[-124.76179,48.41301]],[[-160.57876,22.50629],[-160.57822,21.49846],[-158.74706,21.24398],[-157.50832,20.9958],[-155.99619,18.77902],[-154.62178,18.7587],[-154.68902,19.88057],[-156.29276,21.22259],[-157.50474,21.9985],[-159.00937,22.50702],[-160.57876,22.50629]],[[-167.1572,68.722],[-164.8554,67.0255],[-168.0022,66.0018],[-169.0087,66.0015],[-169.0075,64.9988],[-172.5143,63.8767],[-173.8197,59.7401],[-178.0001,52.2446],[-177.9993,51.2554],[-171.4689,51.8215],[-162.4025,53.9567],[-159.0076,55.0025],[-158.0191,55.0028],[-151.9963,55.9992],[-151.5003,57.9988],[-151.5013,58.992],[-138.516,58.9953],[-138.515,57.9986],[-133.9948,54.0032],[-130.0044,54.0043],[-130.0071,57.0001],[-131.9759,56.9995],[-135.123,59.7566],[-138.0072,59.9918],[-139.1716,60.4127],[-140.9874,61.0119],[-140.9684,69.9535],[-156.1769,71.5633],[-160.4136,70.7398],[-163.0218,69.9707],[-164.9717,68.9947],[-167.1572,68.722]],[[-68.2,17.8],[-64.32,17.38],[-64.64,18.36],[-65.33,18.57],[-67.9,18.67],[-68.2,17.8]],[[146.2,15.4],[145.7,15.6],[144.2,13.2],[144.8,12.9],[146.2,15.4]],[[179.99,52.2],[172,53.5],[172,52.5],[179.99,51],[179.99,52.2]]],description:"Yellow = Public domain map data from the US Census. Red = Data not found in OpenStreetMap",icon:"https://osmlab.github.io/editor-layer-index/sources/north-america/us/TIGER2017RoadsOverlay.png",overlay:true},{id:"US-TIGER-Roads-2018",name:"TIGER Roads 2018",type:"tms",template:"https://{switch:a,b,c,d}.tiles.mapbox.com/styles/v1/openstreetmapus/cjo1wbulo3ub82ro1c9onlzmh/tiles/256/{zoom}/{x}/{y}?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcHVzIiwiYSI6ImNpcnF4Ym43dDBoOXZmYW04bWhlNWdrY2EifQ.4SFexuTUuKkZeerO3dgtmw",endDate:"2018-01-01T00:00:00.000Z",startDate:"2018-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[-124.76179,48.41301],[-124.60595,45.90245],[-124.99343,40.05576],[-122.53697,36.85661],[-119.97759,33.00641],[-117.67593,32.46302],[-114.86123,32.47999],[-111.00893,31.33601],[-108.19927,31.326],[-108.18711,31.77551],[-106.53072,31.78209],[-106.48421,31.74645],[-106.42932,31.75206],[-106.28689,31.56133],[-106.20525,31.4467],[-105.02053,30.5361],[-104.58819,29.69979],[-103.25189,28.89087],[-102.71736,29.39206],[-102.1514,29.74757],[-101.25529,29.48105],[-100.00624,28.00822],[-99.23511,26.4476],[-98.01091,25.9928],[-97.43502,25.8266],[-96.95553,25.98216],[-96.80617,27.79782],[-95.55633,28.58761],[-93.74053,29.47421],[-90.90285,28.85645],[-88.01567,28.99443],[-88.01625,30.00389],[-86.02775,30.00475],[-84.01879,28.99618],[-81.9972,25.98268],[-81.99666,25.01349],[-84.01656,25.01258],[-84.01601,24.00527],[-80.02,24.0071],[-79.89011,26.85507],[-80.02453,32.01613],[-75.41474,35.05319],[-74.02112,39.57279],[-72.00202,40.99125],[-69.87974,40.99205],[-69.84893,43.26199],[-66.94528,44.71049],[-67.75966,47.099],[-69.25051,47.51223],[-70.46149,46.21766],[-71.41227,45.25488],[-72.02225,45.00598],[-75.07988,44.98029],[-76.90231,43.80246],[-78.76239,43.62496],[-79.15798,43.44626],[-79.00601,42.80053],[-82.66248,41.68895],[-82.17616,43.58854],[-83.2814,46.13885],[-87.50645,48.01427],[-88.34922,48.29633],[-89.43531,47.98378],[-93.99811,49.00671],[-95.11054,49.412],[-96.01312,49.00605],[-123.32289,49.00429],[-123.22752,48.18499],[-124.76179,48.41301]],[[-160.57876,22.50629],[-160.57822,21.49846],[-158.74706,21.24398],[-157.50832,20.9958],[-155.99619,18.77902],[-154.62178,18.7587],[-154.68902,19.88057],[-156.29276,21.22259],[-157.50474,21.9985],[-159.00937,22.50702],[-160.57876,22.50629]],[[-167.1572,68.722],[-164.8554,67.0255],[-168.0022,66.0018],[-169.0087,66.0015],[-169.0075,64.9988],[-172.5143,63.8767],[-173.8197,59.7401],[-178.0001,52.2446],[-177.9993,51.2554],[-171.4689,51.8215],[-162.4025,53.9567],[-159.0076,55.0025],[-158.0191,55.0028],[-151.9963,55.9992],[-151.5003,57.9988],[-151.5013,58.992],[-138.516,58.9953],[-138.515,57.9986],[-133.9948,54.0032],[-130.0044,54.0043],[-130.0071,57.0001],[-131.9759,56.9995],[-135.123,59.7566],[-138.0072,59.9918],[-139.1716,60.4127],[-140.9874,61.0119],[-140.9684,69.9535],[-156.1769,71.5633],[-160.4136,70.7398],[-163.0218,69.9707],[-164.9717,68.9947],[-167.1572,68.722]],[[-68.2,17.8],[-64.32,17.38],[-64.64,18.36],[-65.33,18.57],[-67.9,18.67],[-68.2,17.8]],[[146.2,15.4],[145.7,15.6],[144.2,13.2],[144.8,12.9],[146.2,15.4]],[[179.99,52.2],[172,53.5],[172,52.5],[179.99,51],[179.99,52.2]]],description:"Yellow = Public domain map data from the US Census. Red = Data not found in OpenStreetMap",icon:"https://osmlab.github.io/editor-layer-index/sources/north-america/us/TIGER2017RoadsOverlay.png",overlay:true},{id:"tirol.gv.at-contourlines",name:"Tiris: contour lines",type:"wms",template:"https://gis.tirol.gv.at/arcgis/services/Service_Public/terrain/MapServer/WmsServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Hoehenschichtlinien_20m&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[15,22],polygon:[[[10.43998,47.59768],[10.47886,47.59925],[10.50277,47.58656],[10.4838,47.55979],[10.51312,47.5435],[10.57177,47.54582],[10.57004,47.56212],[10.60109,47.58074],[10.63904,47.5691],[10.70804,47.57027],[10.71149,47.54932],[10.76841,47.55048],[10.78566,47.52603],[10.89605,47.55048],[10.93572,47.5237],[10.934,47.50506],[10.89088,47.49573],[10.95125,47.49107],[10.9547,47.46776],[11.003,47.43276],[10.99092,47.40825],[11.10304,47.40475],[11.11511,47.41993],[11.20998,47.4456],[11.26863,47.44093],[11.26691,47.41059],[11.29451,47.4421],[11.33073,47.46076],[11.38248,47.45843],[11.3704,47.47592],[11.4394,47.53069],[11.467,47.51787],[11.57394,47.5237],[11.57567,47.55863],[11.59809,47.59121],[11.63431,47.60633],[11.66881,47.5947],[11.793,47.60284],[11.83958,47.59238],[11.84993,47.61098],[12.00689,47.63656],[12.03622,47.62494],[12.07761,47.62726],[12.10866,47.61912],[12.19491,47.62261],[12.15351,47.68768],[12.15868,47.7167],[12.18111,47.71206],[12.21906,47.72482],[12.24148,47.75382],[12.27253,47.7515],[12.2846,47.73178],[12.26563,47.69581],[12.33635,47.7109],[12.37602,47.69581],[12.44329,47.70277],[12.45364,47.69232],[12.45364,47.6749],[12.51057,47.63191],[12.53126,47.64586],[12.58991,47.63424],[12.57956,47.61098],[12.66581,47.5947],[12.67961,47.57492],[12.64511,47.55048],[12.66753,47.53185],[12.68478,47.50389],[12.71238,47.48175],[12.66753,47.45609],[12.64166,47.45959],[12.65028,47.44326],[12.62096,47.40709],[12.57439,47.38607],[12.55024,47.39658],[12.49159,47.37205],[12.50884,47.35102],[12.48814,47.32063],[12.43467,47.32297],[12.41397,47.30426],[12.36395,47.30894],[12.3122,47.32764],[12.2708,47.29841],[12.17766,47.29373],[12.14833,47.28437],[12.11729,47.29958],[12.09831,47.27501],[12.12591,47.25042],[12.09659,47.19771],[12.11039,47.14846],[12.14143,47.10974],[12.13799,47.08977],[12.15006,47.07568],[12.00517,47.04395],[11.92065,47.02985],[11.83095,46.99103],[11.78783,46.98633],[11.77403,46.9675],[11.73091,46.96514],[11.70676,46.98986],[11.64294,46.99456],[11.61189,47.00515],[11.53254,46.97809],[11.49287,47.00868],[11.44457,46.9675],[11.4049,46.96161],[11.34453,46.98633],[11.20309,46.9569],[11.17549,46.96161],[11.17721,46.94395],[11.14616,46.92275],[11.12546,46.92275],[11.10822,46.90389],[11.11511,46.88857],[11.08234,46.85319],[11.09614,46.8237],[11.05129,46.80245],[11.02369,46.76229],[10.91848,46.77056],[10.88398,46.75756],[10.84085,46.77292],[10.82361,46.76938],[10.79083,46.78946],[10.75633,46.77883],[10.72529,46.79064],[10.74771,46.82724],[10.69424,46.84494],[10.67354,46.86971],[10.60799,46.85319],[10.55452,46.82724],[10.52002,46.83904],[10.46827,46.83668],[10.45103,46.8815],[10.47517,46.93217],[10.41308,46.95572],[10.3941,46.98868],[10.3665,46.98044],[10.33891,46.94748],[10.32856,46.91803],[10.29751,46.91332],[10.25956,46.9251],[10.23886,46.86263],[10.16642,46.83904],[10.13537,46.8473],[10.13192,46.87207],[10.10604,46.88621],[10.09224,46.92746],[10.12502,46.95219],[10.14572,47.00044],[10.11294,47.02514],[10.15262,47.04983],[10.13019,47.06276],[10.13364,47.09095],[10.15952,47.12617],[10.20091,47.1426],[10.19229,47.20005],[10.20954,47.21294],[10.18711,47.23989],[10.20091,47.25628],[10.16814,47.2633],[10.16814,47.28086],[10.20264,47.29139],[10.24404,47.28905],[10.33373,47.32063],[10.38893,47.39074],[10.4148,47.39424],[10.4562,47.43626],[10.44758,47.48175],[10.41998,47.50506],[10.4424,47.55514],[10.41308,47.57143],[10.43998,47.59768]],[[12.4019,47.16019],[12.35705,47.13908],[12.35015,47.11208],[12.31048,47.10739],[12.25528,47.07215],[12.21388,47.05923],[12.20008,47.02632],[12.14488,47.03102],[12.11556,47.0075],[12.13626,46.95926],[12.16731,46.9357],[12.14316,46.91096],[12.18973,46.90036],[12.21733,46.86617],[12.25528,46.88386],[12.27425,46.88268],[12.2984,46.83432],[12.27598,46.82016],[12.27943,46.77765],[12.35015,46.77174],[12.3812,46.715],[12.44329,46.68425],[12.51402,46.67004],[12.56576,46.64873],[12.62958,46.65347],[12.70203,46.65347],[12.70375,46.69844],[12.72963,46.70081],[12.72273,46.73747],[12.80207,46.74929],[12.85382,46.74456],[12.90384,46.77174],[12.92799,46.75992],[12.95732,46.77647],[12.97974,46.79772],[12.89522,46.83314],[12.89522,46.84848],[12.8452,46.86381],[12.84692,46.91568],[12.7969,46.93099],[12.78828,46.94748],[12.7486,46.96867],[12.73653,46.99691],[12.78138,47.0416],[12.7624,47.051],[12.7141,47.04513],[12.71065,47.07803],[12.62268,47.12617],[12.56921,47.14142],[12.55196,47.13321],[12.52609,47.15433],[12.48297,47.16488],[12.46054,47.14846],[12.43467,47.15785],[12.41915,47.14377],[12.4019,47.16019]]],terms_url:"https://tiris.tirol.gv.at",terms_text:"tiris.tirol.gv.at",icon:"https://static.tirol.gv.at/plainhtml/v1/tirollogo.gif",overlay:true},{id:"tirol.gv.at-DGM",name:"Tiris: DGM (Terrain model)",type:"wms",template:"https://gis.tirol.gv.at/arcgis/services/Service_Public/terrain/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Image_Schummerung_Gelaendemodell&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[10.43998,47.59768],[10.47886,47.59925],[10.50277,47.58656],[10.4838,47.55979],[10.51312,47.5435],[10.57177,47.54582],[10.57004,47.56212],[10.60109,47.58074],[10.63904,47.5691],[10.70804,47.57027],[10.71149,47.54932],[10.76841,47.55048],[10.78566,47.52603],[10.89605,47.55048],[10.93572,47.5237],[10.934,47.50506],[10.89088,47.49573],[10.95125,47.49107],[10.9547,47.46776],[11.003,47.43276],[10.99092,47.40825],[11.10304,47.40475],[11.11511,47.41993],[11.20998,47.4456],[11.26863,47.44093],[11.26691,47.41059],[11.29451,47.4421],[11.33073,47.46076],[11.38248,47.45843],[11.3704,47.47592],[11.4394,47.53069],[11.467,47.51787],[11.57394,47.5237],[11.57567,47.55863],[11.59809,47.59121],[11.63431,47.60633],[11.66881,47.5947],[11.793,47.60284],[11.83958,47.59238],[11.84993,47.61098],[12.00689,47.63656],[12.03622,47.62494],[12.07761,47.62726],[12.10866,47.61912],[12.19491,47.62261],[12.15351,47.68768],[12.15868,47.7167],[12.18111,47.71206],[12.21906,47.72482],[12.24148,47.75382],[12.27253,47.7515],[12.2846,47.73178],[12.26563,47.69581],[12.33635,47.7109],[12.37602,47.69581],[12.44329,47.70277],[12.45364,47.69232],[12.45364,47.6749],[12.51057,47.63191],[12.53126,47.64586],[12.58991,47.63424],[12.57956,47.61098],[12.66581,47.5947],[12.67961,47.57492],[12.64511,47.55048],[12.66753,47.53185],[12.68478,47.50389],[12.71238,47.48175],[12.66753,47.45609],[12.64166,47.45959],[12.65028,47.44326],[12.62096,47.40709],[12.57439,47.38607],[12.55024,47.39658],[12.49159,47.37205],[12.50884,47.35102],[12.48814,47.32063],[12.43467,47.32297],[12.41397,47.30426],[12.36395,47.30894],[12.3122,47.32764],[12.2708,47.29841],[12.17766,47.29373],[12.14833,47.28437],[12.11729,47.29958],[12.09831,47.27501],[12.12591,47.25042],[12.09659,47.19771],[12.11039,47.14846],[12.14143,47.10974],[12.13799,47.08977],[12.15006,47.07568],[12.00517,47.04395],[11.92065,47.02985],[11.83095,46.99103],[11.78783,46.98633],[11.77403,46.9675],[11.73091,46.96514],[11.70676,46.98986],[11.64294,46.99456],[11.61189,47.00515],[11.53254,46.97809],[11.49287,47.00868],[11.44457,46.9675],[11.4049,46.96161],[11.34453,46.98633],[11.20309,46.9569],[11.17549,46.96161],[11.17721,46.94395],[11.14616,46.92275],[11.12546,46.92275],[11.10822,46.90389],[11.11511,46.88857],[11.08234,46.85319],[11.09614,46.8237],[11.05129,46.80245],[11.02369,46.76229],[10.91848,46.77056],[10.88398,46.75756],[10.84085,46.77292],[10.82361,46.76938],[10.79083,46.78946],[10.75633,46.77883],[10.72529,46.79064],[10.74771,46.82724],[10.69424,46.84494],[10.67354,46.86971],[10.60799,46.85319],[10.55452,46.82724],[10.52002,46.83904],[10.46827,46.83668],[10.45103,46.8815],[10.47517,46.93217],[10.41308,46.95572],[10.3941,46.98868],[10.3665,46.98044],[10.33891,46.94748],[10.32856,46.91803],[10.29751,46.91332],[10.25956,46.9251],[10.23886,46.86263],[10.16642,46.83904],[10.13537,46.8473],[10.13192,46.87207],[10.10604,46.88621],[10.09224,46.92746],[10.12502,46.95219],[10.14572,47.00044],[10.11294,47.02514],[10.15262,47.04983],[10.13019,47.06276],[10.13364,47.09095],[10.15952,47.12617],[10.20091,47.1426],[10.19229,47.20005],[10.20954,47.21294],[10.18711,47.23989],[10.20091,47.25628],[10.16814,47.2633],[10.16814,47.28086],[10.20264,47.29139],[10.24404,47.28905],[10.33373,47.32063],[10.38893,47.39074],[10.4148,47.39424],[10.4562,47.43626],[10.44758,47.48175],[10.41998,47.50506],[10.4424,47.55514],[10.41308,47.57143],[10.43998,47.59768]],[[12.4019,47.16019],[12.35705,47.13908],[12.35015,47.11208],[12.31048,47.10739],[12.25528,47.07215],[12.21388,47.05923],[12.20008,47.02632],[12.14488,47.03102],[12.11556,47.0075],[12.13626,46.95926],[12.16731,46.9357],[12.14316,46.91096],[12.18973,46.90036],[12.21733,46.86617],[12.25528,46.88386],[12.27425,46.88268],[12.2984,46.83432],[12.27598,46.82016],[12.27943,46.77765],[12.35015,46.77174],[12.3812,46.715],[12.44329,46.68425],[12.51402,46.67004],[12.56576,46.64873],[12.62958,46.65347],[12.70203,46.65347],[12.70375,46.69844],[12.72963,46.70081],[12.72273,46.73747],[12.80207,46.74929],[12.85382,46.74456],[12.90384,46.77174],[12.92799,46.75992],[12.95732,46.77647],[12.97974,46.79772],[12.89522,46.83314],[12.89522,46.84848],[12.8452,46.86381],[12.84692,46.91568],[12.7969,46.93099],[12.78828,46.94748],[12.7486,46.96867],[12.73653,46.99691],[12.78138,47.0416],[12.7624,47.051],[12.7141,47.04513],[12.71065,47.07803],[12.62268,47.12617],[12.56921,47.14142],[12.55196,47.13321],[12.52609,47.15433],[12.48297,47.16488],[12.46054,47.14846],[12.43467,47.15785],[12.41915,47.14377],[12.4019,47.16019]]],terms_url:"https://tiris.tirol.gv.at",terms_text:"tiris.tirol.gv.at",icon:"https://static.tirol.gv.at/plainhtml/v1/tirollogo.gif"},{id:"tirol.gv.at-DOM",name:"Tiris: DOM (Surface model)",type:"wms",template:"https://gis.tirol.gv.at/arcgis/services/Service_Public/terrain/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Image_Schummerung_Oberflaechenmodell&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[10.43998,47.59768],[10.47886,47.59925],[10.50277,47.58656],[10.4838,47.55979],[10.51312,47.5435],[10.57177,47.54582],[10.57004,47.56212],[10.60109,47.58074],[10.63904,47.5691],[10.70804,47.57027],[10.71149,47.54932],[10.76841,47.55048],[10.78566,47.52603],[10.89605,47.55048],[10.93572,47.5237],[10.934,47.50506],[10.89088,47.49573],[10.95125,47.49107],[10.9547,47.46776],[11.003,47.43276],[10.99092,47.40825],[11.10304,47.40475],[11.11511,47.41993],[11.20998,47.4456],[11.26863,47.44093],[11.26691,47.41059],[11.29451,47.4421],[11.33073,47.46076],[11.38248,47.45843],[11.3704,47.47592],[11.4394,47.53069],[11.467,47.51787],[11.57394,47.5237],[11.57567,47.55863],[11.59809,47.59121],[11.63431,47.60633],[11.66881,47.5947],[11.793,47.60284],[11.83958,47.59238],[11.84993,47.61098],[12.00689,47.63656],[12.03622,47.62494],[12.07761,47.62726],[12.10866,47.61912],[12.19491,47.62261],[12.15351,47.68768],[12.15868,47.7167],[12.18111,47.71206],[12.21906,47.72482],[12.24148,47.75382],[12.27253,47.7515],[12.2846,47.73178],[12.26563,47.69581],[12.33635,47.7109],[12.37602,47.69581],[12.44329,47.70277],[12.45364,47.69232],[12.45364,47.6749],[12.51057,47.63191],[12.53126,47.64586],[12.58991,47.63424],[12.57956,47.61098],[12.66581,47.5947],[12.67961,47.57492],[12.64511,47.55048],[12.66753,47.53185],[12.68478,47.50389],[12.71238,47.48175],[12.66753,47.45609],[12.64166,47.45959],[12.65028,47.44326],[12.62096,47.40709],[12.57439,47.38607],[12.55024,47.39658],[12.49159,47.37205],[12.50884,47.35102],[12.48814,47.32063],[12.43467,47.32297],[12.41397,47.30426],[12.36395,47.30894],[12.3122,47.32764],[12.2708,47.29841],[12.17766,47.29373],[12.14833,47.28437],[12.11729,47.29958],[12.09831,47.27501],[12.12591,47.25042],[12.09659,47.19771],[12.11039,47.14846],[12.14143,47.10974],[12.13799,47.08977],[12.15006,47.07568],[12.00517,47.04395],[11.92065,47.02985],[11.83095,46.99103],[11.78783,46.98633],[11.77403,46.9675],[11.73091,46.96514],[11.70676,46.98986],[11.64294,46.99456],[11.61189,47.00515],[11.53254,46.97809],[11.49287,47.00868],[11.44457,46.9675],[11.4049,46.96161],[11.34453,46.98633],[11.20309,46.9569],[11.17549,46.96161],[11.17721,46.94395],[11.14616,46.92275],[11.12546,46.92275],[11.10822,46.90389],[11.11511,46.88857],[11.08234,46.85319],[11.09614,46.8237],[11.05129,46.80245],[11.02369,46.76229],[10.91848,46.77056],[10.88398,46.75756],[10.84085,46.77292],[10.82361,46.76938],[10.79083,46.78946],[10.75633,46.77883],[10.72529,46.79064],[10.74771,46.82724],[10.69424,46.84494],[10.67354,46.86971],[10.60799,46.85319],[10.55452,46.82724],[10.52002,46.83904],[10.46827,46.83668],[10.45103,46.8815],[10.47517,46.93217],[10.41308,46.95572],[10.3941,46.98868],[10.3665,46.98044],[10.33891,46.94748],[10.32856,46.91803],[10.29751,46.91332],[10.25956,46.9251],[10.23886,46.86263],[10.16642,46.83904],[10.13537,46.8473],[10.13192,46.87207],[10.10604,46.88621],[10.09224,46.92746],[10.12502,46.95219],[10.14572,47.00044],[10.11294,47.02514],[10.15262,47.04983],[10.13019,47.06276],[10.13364,47.09095],[10.15952,47.12617],[10.20091,47.1426],[10.19229,47.20005],[10.20954,47.21294],[10.18711,47.23989],[10.20091,47.25628],[10.16814,47.2633],[10.16814,47.28086],[10.20264,47.29139],[10.24404,47.28905],[10.33373,47.32063],[10.38893,47.39074],[10.4148,47.39424],[10.4562,47.43626],[10.44758,47.48175],[10.41998,47.50506],[10.4424,47.55514],[10.41308,47.57143],[10.43998,47.59768]],[[12.4019,47.16019],[12.35705,47.13908],[12.35015,47.11208],[12.31048,47.10739],[12.25528,47.07215],[12.21388,47.05923],[12.20008,47.02632],[12.14488,47.03102],[12.11556,47.0075],[12.13626,46.95926],[12.16731,46.9357],[12.14316,46.91096],[12.18973,46.90036],[12.21733,46.86617],[12.25528,46.88386],[12.27425,46.88268],[12.2984,46.83432],[12.27598,46.82016],[12.27943,46.77765],[12.35015,46.77174],[12.3812,46.715],[12.44329,46.68425],[12.51402,46.67004],[12.56576,46.64873],[12.62958,46.65347],[12.70203,46.65347],[12.70375,46.69844],[12.72963,46.70081],[12.72273,46.73747],[12.80207,46.74929],[12.85382,46.74456],[12.90384,46.77174],[12.92799,46.75992],[12.95732,46.77647],[12.97974,46.79772],[12.89522,46.83314],[12.89522,46.84848],[12.8452,46.86381],[12.84692,46.91568],[12.7969,46.93099],[12.78828,46.94748],[12.7486,46.96867],[12.73653,46.99691],[12.78138,47.0416],[12.7624,47.051],[12.7141,47.04513],[12.71065,47.07803],[12.62268,47.12617],[12.56921,47.14142],[12.55196,47.13321],[12.52609,47.15433],[12.48297,47.16488],[12.46054,47.14846],[12.43467,47.15785],[12.41915,47.14377],[12.4019,47.16019]]],terms_url:"https://tiris.tirol.gv.at",terms_text:"tiris.tirol.gv.at",icon:"https://static.tirol.gv.at/plainhtml/v1/tirollogo.gif"},{id:"tirol.gv.at-orthofoto",name:"Tiris: orthophoto",type:"wms",template:"https://gis.tirol.gv.at/arcgis/services/Service_Public/orthofoto/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Image_Aktuell_RGB&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[10.43998,47.59768],[10.47886,47.59925],[10.50277,47.58656],[10.4838,47.55979],[10.51312,47.5435],[10.57177,47.54582],[10.57004,47.56212],[10.60109,47.58074],[10.63904,47.5691],[10.70804,47.57027],[10.71149,47.54932],[10.76841,47.55048],[10.78566,47.52603],[10.89605,47.55048],[10.93572,47.5237],[10.934,47.50506],[10.89088,47.49573],[10.95125,47.49107],[10.9547,47.46776],[11.003,47.43276],[10.99092,47.40825],[11.10304,47.40475],[11.11511,47.41993],[11.20998,47.4456],[11.26863,47.44093],[11.26691,47.41059],[11.29451,47.4421],[11.33073,47.46076],[11.38248,47.45843],[11.3704,47.47592],[11.4394,47.53069],[11.467,47.51787],[11.57394,47.5237],[11.57567,47.55863],[11.59809,47.59121],[11.63431,47.60633],[11.66881,47.5947],[11.793,47.60284],[11.83958,47.59238],[11.84993,47.61098],[12.00689,47.63656],[12.03622,47.62494],[12.07761,47.62726],[12.10866,47.61912],[12.19491,47.62261],[12.15351,47.68768],[12.15868,47.7167],[12.18111,47.71206],[12.21906,47.72482],[12.24148,47.75382],[12.27253,47.7515],[12.2846,47.73178],[12.26563,47.69581],[12.33635,47.7109],[12.37602,47.69581],[12.44329,47.70277],[12.45364,47.69232],[12.45364,47.6749],[12.51057,47.63191],[12.53126,47.64586],[12.58991,47.63424],[12.57956,47.61098],[12.66581,47.5947],[12.67961,47.57492],[12.64511,47.55048],[12.66753,47.53185],[12.68478,47.50389],[12.71238,47.48175],[12.66753,47.45609],[12.64166,47.45959],[12.65028,47.44326],[12.62096,47.40709],[12.57439,47.38607],[12.55024,47.39658],[12.49159,47.37205],[12.50884,47.35102],[12.48814,47.32063],[12.43467,47.32297],[12.41397,47.30426],[12.36395,47.30894],[12.3122,47.32764],[12.2708,47.29841],[12.17766,47.29373],[12.14833,47.28437],[12.11729,47.29958],[12.09831,47.27501],[12.12591,47.25042],[12.09659,47.19771],[12.11039,47.14846],[12.14143,47.10974],[12.13799,47.08977],[12.15006,47.07568],[12.00517,47.04395],[11.92065,47.02985],[11.83095,46.99103],[11.78783,46.98633],[11.77403,46.9675],[11.73091,46.96514],[11.70676,46.98986],[11.64294,46.99456],[11.61189,47.00515],[11.53254,46.97809],[11.49287,47.00868],[11.44457,46.9675],[11.4049,46.96161],[11.34453,46.98633],[11.20309,46.9569],[11.17549,46.96161],[11.17721,46.94395],[11.14616,46.92275],[11.12546,46.92275],[11.10822,46.90389],[11.11511,46.88857],[11.08234,46.85319],[11.09614,46.8237],[11.05129,46.80245],[11.02369,46.76229],[10.91848,46.77056],[10.88398,46.75756],[10.84085,46.77292],[10.82361,46.76938],[10.79083,46.78946],[10.75633,46.77883],[10.72529,46.79064],[10.74771,46.82724],[10.69424,46.84494],[10.67354,46.86971],[10.60799,46.85319],[10.55452,46.82724],[10.52002,46.83904],[10.46827,46.83668],[10.45103,46.8815],[10.47517,46.93217],[10.41308,46.95572],[10.3941,46.98868],[10.3665,46.98044],[10.33891,46.94748],[10.32856,46.91803],[10.29751,46.91332],[10.25956,46.9251],[10.23886,46.86263],[10.16642,46.83904],[10.13537,46.8473],[10.13192,46.87207],[10.10604,46.88621],[10.09224,46.92746],[10.12502,46.95219],[10.14572,47.00044],[10.11294,47.02514],[10.15262,47.04983],[10.13019,47.06276],[10.13364,47.09095],[10.15952,47.12617],[10.20091,47.1426],[10.19229,47.20005],[10.20954,47.21294],[10.18711,47.23989],[10.20091,47.25628],[10.16814,47.2633],[10.16814,47.28086],[10.20264,47.29139],[10.24404,47.28905],[10.33373,47.32063],[10.38893,47.39074],[10.4148,47.39424],[10.4562,47.43626],[10.44758,47.48175],[10.41998,47.50506],[10.4424,47.55514],[10.41308,47.57143],[10.43998,47.59768]],[[12.4019,47.16019],[12.35705,47.13908],[12.35015,47.11208],[12.31048,47.10739],[12.25528,47.07215],[12.21388,47.05923],[12.20008,47.02632],[12.14488,47.03102],[12.11556,47.0075],[12.13626,46.95926],[12.16731,46.9357],[12.14316,46.91096],[12.18973,46.90036],[12.21733,46.86617],[12.25528,46.88386],[12.27425,46.88268],[12.2984,46.83432],[12.27598,46.82016],[12.27943,46.77765],[12.35015,46.77174],[12.3812,46.715],[12.44329,46.68425],[12.51402,46.67004],[12.56576,46.64873],[12.62958,46.65347],[12.70203,46.65347],[12.70375,46.69844],[12.72963,46.70081],[12.72273,46.73747],[12.80207,46.74929],[12.85382,46.74456],[12.90384,46.77174],[12.92799,46.75992],[12.95732,46.77647],[12.97974,46.79772],[12.89522,46.83314],[12.89522,46.84848],[12.8452,46.86381],[12.84692,46.91568],[12.7969,46.93099],[12.78828,46.94748],[12.7486,46.96867],[12.73653,46.99691],[12.78138,47.0416],[12.7624,47.051],[12.7141,47.04513],[12.71065,47.07803],[12.62268,47.12617],[12.56921,47.14142],[12.55196,47.13321],[12.52609,47.15433],[12.48297,47.16488],[12.46054,47.14846],[12.43467,47.15785],[12.41915,47.14377],[12.4019,47.16019]]],terms_url:"https://tiris.tirol.gv.at",terms_text:"tiris.tirol.gv.at",icon:"https://static.tirol.gv.at/plainhtml/v1/tirollogo.gif"},{id:"tirol.gv.at-orthofoto-cir",name:"Tiris: orthophoto infrared",type:"wms",template:"https://gis.tirol.gv.at/arcgis/services/Service_Public/orthofoto/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Image_Aktuell_CIR&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[10.43998,47.59768],[10.47886,47.59925],[10.50277,47.58656],[10.4838,47.55979],[10.51312,47.5435],[10.57177,47.54582],[10.57004,47.56212],[10.60109,47.58074],[10.63904,47.5691],[10.70804,47.57027],[10.71149,47.54932],[10.76841,47.55048],[10.78566,47.52603],[10.89605,47.55048],[10.93572,47.5237],[10.934,47.50506],[10.89088,47.49573],[10.95125,47.49107],[10.9547,47.46776],[11.003,47.43276],[10.99092,47.40825],[11.10304,47.40475],[11.11511,47.41993],[11.20998,47.4456],[11.26863,47.44093],[11.26691,47.41059],[11.29451,47.4421],[11.33073,47.46076],[11.38248,47.45843],[11.3704,47.47592],[11.4394,47.53069],[11.467,47.51787],[11.57394,47.5237],[11.57567,47.55863],[11.59809,47.59121],[11.63431,47.60633],[11.66881,47.5947],[11.793,47.60284],[11.83958,47.59238],[11.84993,47.61098],[12.00689,47.63656],[12.03622,47.62494],[12.07761,47.62726],[12.10866,47.61912],[12.19491,47.62261],[12.15351,47.68768],[12.15868,47.7167],[12.18111,47.71206],[12.21906,47.72482],[12.24148,47.75382],[12.27253,47.7515],[12.2846,47.73178],[12.26563,47.69581],[12.33635,47.7109],[12.37602,47.69581],[12.44329,47.70277],[12.45364,47.69232],[12.45364,47.6749],[12.51057,47.63191],[12.53126,47.64586],[12.58991,47.63424],[12.57956,47.61098],[12.66581,47.5947],[12.67961,47.57492],[12.64511,47.55048],[12.66753,47.53185],[12.68478,47.50389],[12.71238,47.48175],[12.66753,47.45609],[12.64166,47.45959],[12.65028,47.44326],[12.62096,47.40709],[12.57439,47.38607],[12.55024,47.39658],[12.49159,47.37205],[12.50884,47.35102],[12.48814,47.32063],[12.43467,47.32297],[12.41397,47.30426],[12.36395,47.30894],[12.3122,47.32764],[12.2708,47.29841],[12.17766,47.29373],[12.14833,47.28437],[12.11729,47.29958],[12.09831,47.27501],[12.12591,47.25042],[12.09659,47.19771],[12.11039,47.14846],[12.14143,47.10974],[12.13799,47.08977],[12.15006,47.07568],[12.00517,47.04395],[11.92065,47.02985],[11.83095,46.99103],[11.78783,46.98633],[11.77403,46.9675],[11.73091,46.96514],[11.70676,46.98986],[11.64294,46.99456],[11.61189,47.00515],[11.53254,46.97809],[11.49287,47.00868],[11.44457,46.9675],[11.4049,46.96161],[11.34453,46.98633],[11.20309,46.9569],[11.17549,46.96161],[11.17721,46.94395],[11.14616,46.92275],[11.12546,46.92275],[11.10822,46.90389],[11.11511,46.88857],[11.08234,46.85319],[11.09614,46.8237],[11.05129,46.80245],[11.02369,46.76229],[10.91848,46.77056],[10.88398,46.75756],[10.84085,46.77292],[10.82361,46.76938],[10.79083,46.78946],[10.75633,46.77883],[10.72529,46.79064],[10.74771,46.82724],[10.69424,46.84494],[10.67354,46.86971],[10.60799,46.85319],[10.55452,46.82724],[10.52002,46.83904],[10.46827,46.83668],[10.45103,46.8815],[10.47517,46.93217],[10.41308,46.95572],[10.3941,46.98868],[10.3665,46.98044],[10.33891,46.94748],[10.32856,46.91803],[10.29751,46.91332],[10.25956,46.9251],[10.23886,46.86263],[10.16642,46.83904],[10.13537,46.8473],[10.13192,46.87207],[10.10604,46.88621],[10.09224,46.92746],[10.12502,46.95219],[10.14572,47.00044],[10.11294,47.02514],[10.15262,47.04983],[10.13019,47.06276],[10.13364,47.09095],[10.15952,47.12617],[10.20091,47.1426],[10.19229,47.20005],[10.20954,47.21294],[10.18711,47.23989],[10.20091,47.25628],[10.16814,47.2633],[10.16814,47.28086],[10.20264,47.29139],[10.24404,47.28905],[10.33373,47.32063],[10.38893,47.39074],[10.4148,47.39424],[10.4562,47.43626],[10.44758,47.48175],[10.41998,47.50506],[10.4424,47.55514],[10.41308,47.57143],[10.43998,47.59768]],[[12.4019,47.16019],[12.35705,47.13908],[12.35015,47.11208],[12.31048,47.10739],[12.25528,47.07215],[12.21388,47.05923],[12.20008,47.02632],[12.14488,47.03102],[12.11556,47.0075],[12.13626,46.95926],[12.16731,46.9357],[12.14316,46.91096],[12.18973,46.90036],[12.21733,46.86617],[12.25528,46.88386],[12.27425,46.88268],[12.2984,46.83432],[12.27598,46.82016],[12.27943,46.77765],[12.35015,46.77174],[12.3812,46.715],[12.44329,46.68425],[12.51402,46.67004],[12.56576,46.64873],[12.62958,46.65347],[12.70203,46.65347],[12.70375,46.69844],[12.72963,46.70081],[12.72273,46.73747],[12.80207,46.74929],[12.85382,46.74456],[12.90384,46.77174],[12.92799,46.75992],[12.95732,46.77647],[12.97974,46.79772],[12.89522,46.83314],[12.89522,46.84848],[12.8452,46.86381],[12.84692,46.91568],[12.7969,46.93099],[12.78828,46.94748],[12.7486,46.96867],[12.73653,46.99691],[12.78138,47.0416],[12.7624,47.051],[12.7141,47.04513],[12.71065,47.07803],[12.62268,47.12617],[12.56921,47.14142],[12.55196,47.13321],[12.52609,47.15433],[12.48297,47.16488],[12.46054,47.14846],[12.43467,47.15785],[12.41915,47.14377],[12.4019,47.16019]]],terms_url:"https://tiris.tirol.gv.at",terms_text:"tiris.tirol.gv.at",icon:"https://static.tirol.gv.at/plainhtml/v1/tirollogo.gif"},{id:"lu.geoportail.opendata.topo",name:"Topographical Map geoportail.lu",type:"tms",template:"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/topo/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.png",endDate:"2010-07-20T00:00:00.000Z",startDate:"2013-07-19T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[5.96175,50.17631],[6.02627,50.18496],[6.03318,50.16395],[6.06069,50.15536],[6.07668,50.15913],[6.07824,50.17255],[6.10176,50.17199],[6.1225,50.16437],[6.1201,50.15594],[6.1277,50.14993],[6.11323,50.13739],[6.12369,50.13719],[6.14093,50.1305],[6.13555,50.11899],[6.13808,50.10263],[6.13108,50.09964],[6.13547,50.09119],[6.12194,50.09059],[6.12634,50.07817],[6.13186,50.07348],[6.12117,50.064],[6.11444,50.06139],[6.11563,50.05817],[6.12361,50.06323],[6.13661,50.04178],[6.13034,50.02975],[6.14821,50.02307],[6.13868,50.01572],[6.13594,50.01485],[6.13138,50.01905],[6.13024,50.01819],[6.13934,50.01116],[6.1517,50.01058],[6.14546,49.99689],[6.13966,49.9994],[6.13852,49.99829],[6.14218,49.99535],[6.15023,49.99518],[6.15625,49.98867],[6.17305,49.98589],[6.17348,49.98344],[6.17035,49.98376],[6.16549,49.97115],[6.17151,49.96298],[6.1763,49.962],[6.17995,49.95386],[6.18339,49.9548],[6.17983,49.96307],[6.18331,49.9686],[6.19277,49.97158],[6.19978,49.95352],[6.20707,49.95672],[6.21269,49.9514],[6.22502,49.95039],[6.22044,49.94369],[6.22824,49.93726],[6.22635,49.92766],[6.21913,49.92354],[6.22986,49.92125],[6.23603,49.91355],[6.23187,49.91064],[6.22769,49.91062],[6.23229,49.9072],[6.23381,49.90028],[6.24692,49.89535],[6.25781,49.88724],[6.26301,49.88101],[6.27646,49.87725],[6.28113,49.87957],[6.29166,49.87548],[6.2977,49.86673],[6.30989,49.87107],[6.31532,49.8673],[6.31465,49.86057],[6.32361,49.85188],[6.32158,49.8409],[6.32741,49.83673],[6.33656,49.83998],[6.33937,49.8507],[6.36465,49.85164],[6.4022,49.82098],[6.42643,49.81629],[6.42807,49.81186],[6.43097,49.81129],[6.44161,49.81547],[6.44344,49.81233],[6.45366,49.81275],[6.46454,49.81975],[6.47057,49.82385],[6.49681,49.81277],[6.50669,49.80993],[6.51155,49.80238],[6.51485,49.80513],[6.5196,49.81446],[6.52981,49.81048],[6.53225,49.80686],[6.53083,49.80116],[6.50622,49.78899],[6.51917,49.78344],[6.51105,49.77422],[6.52056,49.76818],[6.52052,49.76134],[6.50373,49.75086],[6.50263,49.73298],[6.50727,49.72938],[6.51809,49.7242],[6.51642,49.72129],[6.51176,49.72016],[6.50479,49.725],[6.49891,49.72639],[6.49558,49.72443],[6.50712,49.71655],[6.50788,49.71215],[6.5046,49.71227],[6.42714,49.66237],[6.4399,49.66025],[6.44251,49.65591],[6.42178,49.61809],[6.39898,49.60094],[6.37941,49.59526],[6.37551,49.58809],[6.38443,49.5801],[6.38119,49.57509],[6.36909,49.5783],[6.35791,49.57166],[6.3849,49.55817],[6.38009,49.54856],[6.35855,49.53296],[6.35932,49.52481],[6.37076,49.50545],[6.37056,49.45732],[6.3334,49.46493],[6.32189,49.47244],[6.29503,49.47928],[6.28789,49.48379],[6.27191,49.49995],[6.24133,49.50693],[6.19669,49.50331],[6.17337,49.50577],[6.16086,49.50085],[6.1671,49.49006],[6.14018,49.48525],[6.12937,49.48803],[6.12725,49.47081],[6.1014,49.46726],[6.10483,49.45076],[6.08167,49.45417],[6.07722,49.46139],[6.05917,49.46306],[6.05222,49.46028],[6.04421,49.44553],[6.02529,49.44703],[6.02154,49.45127],[6.01574,49.44885],[5.99412,49.45301],[5.97657,49.44885],[5.97773,49.45955],[5.97232,49.46087],[5.96891,49.48202],[5.9616,49.49026],[5.91578,49.49835],[5.89033,49.4948],[5.86332,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.83187,49.52639],[5.84308,49.53081],[5.83562,49.54114],[5.81625,49.53325],[5.8052,49.54272],[5.85943,49.57158],[5.86866,49.587],[5.86289,49.58525],[5.8511,49.58379],[5.84712,49.58961],[5.84565,49.5981],[5.8694,49.6106],[5.88182,49.63815],[5.89998,49.63907],[5.89934,49.66239],[5.85656,49.67628],[5.85628,49.68211],[5.8757,49.71118],[5.86481,49.72331],[5.84325,49.71822],[5.82191,49.72128],[5.82489,49.73767],[5.82073,49.74878],[5.78626,49.79079],[5.76517,49.78961],[5.75094,49.79094],[5.74159,49.82126],[5.74581,49.82435],[5.7372,49.83353],[5.74053,49.84142],[5.74701,49.84048],[5.74624,49.84783],[5.75399,49.84878],[5.74066,49.85152],[5.75229,49.85922],[5.74955,49.87554],[5.77567,49.87438],[5.77505,49.88057],[5.7346,49.89341],[5.73303,49.90285],[5.75783,49.91737],[5.76039,49.93252],[5.77073,49.93711],[5.76878,49.94239],[5.7688,49.96104],[5.78672,49.96816],[5.80524,49.96677],[5.80652,49.97321],[5.83129,49.97995],[5.83462,49.98656],[5.81806,49.99936],[5.81561,50.01437],[5.84792,50.02809],[5.86189,50.04581],[5.85087,50.0563],[5.85781,50.07186],[5.881,50.08069],[5.89196,50.12041],[5.95286,50.13384],[5.96175,50.17631]]],terms_url:"https://data.public.lu/en/datasets/cartes-topographiques-services-wms-et-wmts",terms_text:"Administration du Cadastre et de la Topographie",icon:"https://www.geoportail.lu/static/img/lion.png"},{id:"Torokbalint-orthophoto-2013",name:"Törökbálint orthophoto 2013",type:"wms",template:"https://terkep.torokbalint.hu/mapproxy/service?FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ORTO_2013_5CM_2013SZEPT_TAKARASSAL_512_512&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&TRANSPARENT=true",projection:"EPSG:3857",endDate:"2013-09-01T00:00:00.000Z",startDate:"2013-09-01T00:00:00.000Z",polygon:[[[18.91731,47.40854],[18.91691,47.40849],[18.91606,47.40885],[18.91565,47.40905],[18.91458,47.40938],[18.91385,47.4097],[18.91376,47.40976],[18.91314,47.41038],[18.9122,47.41098],[18.91041,47.41175],[18.90932,47.41258],[18.90841,47.41317],[18.90676,47.41443],[18.90481,47.41568],[18.90362,47.41597],[18.90317,47.41616],[18.90062,47.41742],[18.90042,47.41755],[18.89968,47.41797],[18.89888,47.41818],[18.89814,47.41835],[18.89752,47.41855],[18.89666,47.41901],[18.8958,47.41954],[18.89421,47.4205],[18.89055,47.42209],[18.88743,47.42332],[18.88554,47.42424],[18.88436,47.42476],[18.88189,47.42553],[18.88085,47.42598],[18.8801,47.42629],[18.87956,47.42649],[18.87741,47.42738],[18.87602,47.42789],[18.87508,47.42836],[18.87281,47.42934],[18.87164,47.42968],[18.8714,47.43001],[18.87259,47.4323],[18.87273,47.43278],[18.87274,47.43324],[18.87244,47.43482],[18.87206,47.43526],[18.86891,47.43712],[18.86561,47.4375],[18.86466,47.43774],[18.86404,47.43809],[18.86378,47.43791],[18.8634,47.43784],[18.863,47.43798],[18.85195,47.44715],[18.85217,47.44847],[18.8593,47.45387],[18.85839,47.45512],[18.85777,47.45568],[18.85718,47.456],[18.8572,47.45636],[18.86015,47.45839],[18.86194,47.4595],[18.86099,47.46071],[18.85979,47.46201],[18.85929,47.46236],[18.85859,47.46272],[18.85713,47.46333],[18.85634,47.4636],[18.85628,47.46403],[18.85719,47.46528],[18.85663,47.46551],[18.85653,47.4658],[18.85693,47.46656],[18.85836,47.46953],[18.85826,47.4698],[18.85827,47.46991],[18.85838,47.47019],[18.85844,47.47027],[18.85852,47.47033],[18.85862,47.47036],[18.85873,47.47038],[18.8589,47.47036],[18.86146,47.46973],[18.86277,47.46929],[18.86617,47.46785],[18.86794,47.46656],[18.86997,47.46524],[18.8708,47.46457],[18.87268,47.46333],[18.87536,47.46113],[18.87687,47.45927],[18.88943,47.45987],[18.89024,47.45988],[18.90371,47.45534],[18.90427,47.4552],[18.90493,47.45506],[18.90542,47.4551],[18.90567,47.45505],[18.90629,47.45477],[18.90648,47.45453],[18.9066,47.45447],[18.90678,47.45439],[18.90811,47.45399],[18.90837,47.45395],[18.9089,47.45384],[18.90954,47.4537],[18.91326,47.45317],[18.91353,47.4532],[18.91372,47.45317],[18.91386,47.45307],[18.91431,47.45294],[18.91598,47.453],[18.91807,47.45317],[18.91846,47.453],[18.91903,47.45161],[18.92173,47.4508],[18.92246,47.45069],[18.92418,47.45025],[18.92756,47.44989],[18.92972,47.44951],[18.93221,47.44922],[18.93347,47.44932],[18.93921,47.44935],[18.94229,47.44903],[18.94549,47.4489],[18.94826,47.4487],[18.95003,47.44824],[18.9547,47.44722],[18.95749,47.44692],[18.95802,47.44715],[18.95844,47.44708],[18.95877,47.44666],[18.96145,47.4393],[18.96368,47.4358],[18.96598,47.43288],[18.96899,47.4297],[18.9701,47.42704],[18.97009,47.42679],[18.96695,47.4246],[18.95735,47.41842],[18.95676,47.4184],[18.95606,47.41813],[18.95385,47.41739],[18.95144,47.41665],[18.95131,47.41664],[18.9327,47.41703],[18.93257,47.41696],[18.93201,47.41674],[18.93149,47.4164],[18.93114,47.41612],[18.92123,47.41091],[18.91957,47.40987],[18.91927,47.40961],[18.91731,47.40854]]],terms_url:"http://www.torokbalint.hu",terms_text:"Törökbálint",description:"5 cm resolution bald image"},{id:"Torokbalint-orthophoto-2015",name:"Törökbálint orthophoto 2015",type:"wms",template:"https://terkep.torokbalint.hu/mapproxy/service?FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=TBORTO_2015_20160218&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&TRANSPARENT=true",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",polygon:[[[18.91731,47.40854],[18.91691,47.40849],[18.91606,47.40885],[18.91565,47.40905],[18.91458,47.40938],[18.91385,47.4097],[18.91376,47.40976],[18.91314,47.41038],[18.9122,47.41098],[18.91041,47.41175],[18.90932,47.41258],[18.90841,47.41317],[18.90676,47.41443],[18.90481,47.41568],[18.90362,47.41597],[18.90317,47.41616],[18.90062,47.41742],[18.90042,47.41755],[18.89968,47.41797],[18.89888,47.41818],[18.89814,47.41835],[18.89752,47.41855],[18.89666,47.41901],[18.8958,47.41954],[18.89421,47.4205],[18.89055,47.42209],[18.88743,47.42332],[18.88554,47.42424],[18.88436,47.42476],[18.88189,47.42553],[18.88085,47.42598],[18.8801,47.42629],[18.87956,47.42649],[18.87741,47.42738],[18.87602,47.42789],[18.87508,47.42836],[18.87281,47.42934],[18.87164,47.42968],[18.8714,47.43001],[18.87259,47.4323],[18.87273,47.43278],[18.87274,47.43324],[18.87244,47.43482],[18.87206,47.43526],[18.86891,47.43712],[18.86561,47.4375],[18.86466,47.43774],[18.86404,47.43809],[18.86378,47.43791],[18.8634,47.43784],[18.863,47.43798],[18.85195,47.44715],[18.85217,47.44847],[18.8593,47.45387],[18.85839,47.45512],[18.85777,47.45568],[18.85718,47.456],[18.8572,47.45636],[18.86015,47.45839],[18.86194,47.4595],[18.86099,47.46071],[18.85979,47.46201],[18.85929,47.46236],[18.85859,47.46272],[18.85713,47.46333],[18.85634,47.4636],[18.85628,47.46403],[18.85719,47.46528],[18.85663,47.46551],[18.85653,47.4658],[18.85693,47.46656],[18.85836,47.46953],[18.85826,47.4698],[18.85827,47.46991],[18.85838,47.47019],[18.85844,47.47027],[18.85852,47.47033],[18.85862,47.47036],[18.85873,47.47038],[18.8589,47.47036],[18.86146,47.46973],[18.86277,47.46929],[18.86617,47.46785],[18.86794,47.46656],[18.86997,47.46524],[18.8708,47.46457],[18.87268,47.46333],[18.87536,47.46113],[18.87687,47.45927],[18.88943,47.45987],[18.89024,47.45988],[18.90371,47.45534],[18.90427,47.4552],[18.90493,47.45506],[18.90542,47.4551],[18.90567,47.45505],[18.90629,47.45477],[18.90648,47.45453],[18.9066,47.45447],[18.90678,47.45439],[18.90811,47.45399],[18.90837,47.45395],[18.9089,47.45384],[18.90954,47.4537],[18.91326,47.45317],[18.91353,47.4532],[18.91372,47.45317],[18.91386,47.45307],[18.91431,47.45294],[18.91598,47.453],[18.91807,47.45317],[18.91846,47.453],[18.91903,47.45161],[18.92173,47.4508],[18.92246,47.45069],[18.92418,47.45025],[18.92756,47.44989],[18.92972,47.44951],[18.93221,47.44922],[18.93347,47.44932],[18.93921,47.44935],[18.94229,47.44903],[18.94549,47.4489],[18.94826,47.4487],[18.95003,47.44824],[18.9547,47.44722],[18.95749,47.44692],[18.95802,47.44715],[18.95844,47.44708],[18.95877,47.44666],[18.96145,47.4393],[18.96368,47.4358],[18.96598,47.43288],[18.96899,47.4297],[18.9701,47.42704],[18.97009,47.42679],[18.96695,47.4246],[18.95735,47.41842],[18.95676,47.4184],[18.95606,47.41813],[18.95385,47.41739],[18.95144,47.41665],[18.95131,47.41664],[18.9327,47.41703],[18.93257,47.41696],[18.93201,47.41674],[18.93149,47.4164],[18.93114,47.41612],[18.92123,47.41091],[18.91957,47.40987],[18.91927,47.40961],[18.91731,47.40854]]],terms_url:"http://www.torokbalint.hu/",terms_text:"Törökbálint",best:true,description:"5 cm resolution bald image"},{id:"Toulouse-Orthophotoplan-2007",name:"Toulouse - Orthophotoplan 2007",type:"wms",template:"https://wms.plan.toulouse.fr/geocache/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortho2007&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2007-01-01T00:00:00.000Z",startDate:"2007-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[1.192,43.63288],[1.20154,43.63297],[1.20111,43.65549],[1.2228,43.6557],[1.22262,43.66534],[1.22753,43.66538],[1.22754,43.66564],[1.23376,43.66569],[1.23376,43.66502],[1.23512,43.66503],[1.23509,43.66707],[1.24436,43.66716],[1.24416,43.67439],[1.2494,43.67443],[1.2494,43.67466],[1.25557,43.67472],[1.25557,43.67445],[1.25695,43.67447],[1.25688,43.67853],[1.28749,43.67883],[1.28708,43.70132],[1.30882,43.70146],[1.30865,43.71277],[1.33033,43.71295],[1.33002,43.73052],[1.33671,43.73058],[1.33673,43.73122],[1.37343,43.73105],[1.37358,43.72458],[1.46045,43.72529],[1.46078,43.7028],[1.48249,43.70295],[1.48298,43.66921],[1.50468,43.66936],[1.50484,43.65812],[1.52655,43.65827],[1.52669,43.64703],[1.54837,43.64716],[1.54854,43.63594],[1.57022,43.63608],[1.57051,43.61358],[1.54882,43.61343],[1.5491,43.59095],[1.57077,43.59107],[1.57094,43.57983],[1.57937,43.57989],[1.57948,43.57377],[1.58091,43.57378],[1.58109,43.55738],[1.57123,43.55731],[1.57165,43.52355],[1.39848,43.52226],[1.39865,43.51101],[1.3121,43.51025],[1.3119,43.52152],[1.29026,43.52131],[1.28986,43.54382],[1.31152,43.54401],[1.31133,43.55526],[1.30369,43.55519],[1.30361,43.55951],[1.29554,43.55943],[1.29554,43.55955],[1.28956,43.55945],[1.28929,43.57754],[1.26757,43.57736],[1.2674,43.58861],[1.25355,43.5885],[1.25338,43.59563],[1.2518,43.59563],[1.2518,43.59494],[1.23504,43.59478],[1.23504,43.5946],[1.22396,43.5946],[1.22394,43.59947],[1.21397,43.5993],[1.21388,43.60464],[1.20206,43.60448],[1.20195,43.61048],[1.19243,43.61037],[1.192,43.63288]]],terms_url:"https://wiki.openstreetmap.org/wiki/Toulouse/ToulouseMetropoleData",terms_text:"ToulouseMetropole"},{id:"Toulouse-Orthophotoplan-2011",name:"Toulouse - Orthophotoplan 2011",type:"wms",template:"https://wms.plan.toulouse.fr/geocache/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortho2011&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2011-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[1.11351,43.68676],[1.13518,43.68708],[1.13489,43.69835],[1.17829,43.69903],[1.17799,43.71028],[1.19966,43.71061],[1.19934,43.72187],[1.24274,43.72253],[1.24243,43.73375],[1.26415,43.73409],[1.26383,43.74536],[1.28553,43.74565],[1.28525,43.75693],[1.30692,43.75723],[1.30664,43.76848],[1.32834,43.76879],[1.32808,43.78003],[1.43673,43.78158],[1.43731,43.7591],[1.45901,43.75937],[1.45933,43.74815],[1.48103,43.7484],[1.48133,43.73718],[1.50303,43.73741],[1.50359,43.71497],[1.52531,43.71518],[1.52561,43.70401],[1.54727,43.70426],[1.54757,43.69304],[1.5692,43.69329],[1.56957,43.68203],[1.5912,43.68227],[1.59174,43.6598],[1.61342,43.66003],[1.61372,43.64883],[1.63538,43.64908],[1.63841,43.51407],[1.29216,43.50947],[1.29186,43.5207],[1.27021,43.5204],[1.26988,43.53164],[1.24823,43.53133],[1.2476,43.55378],[1.22596,43.55349],[1.22568,43.56472],[1.20398,43.56442],[1.20331,43.5869],[1.18162,43.58656],[1.18102,43.60904],[1.15928,43.60869],[1.15896,43.61995],[1.13726,43.61962],[1.13659,43.64209],[1.11491,43.64176],[1.11351,43.68676]]],terms_url:"https://wiki.openstreetmap.org/wiki/Toulouse/ToulouseMetropoleData",terms_text:"ToulouseMetropole"},{id:"Toulouse-Orthophotoplan-2013",name:"Toulouse - Orthophotoplan 2013",type:"wms",template:"https://wms.plan.toulouse.fr/geocache/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortho2013&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[1.11351,43.68676],[1.13518,43.68708],[1.13489,43.69835],[1.17829,43.69903],[1.17799,43.71028],[1.19966,43.71061],[1.19934,43.72187],[1.24274,43.72253],[1.24243,43.73375],[1.26415,43.73409],[1.26383,43.74536],[1.28553,43.74565],[1.28525,43.75693],[1.30692,43.75723],[1.30664,43.76848],[1.32834,43.76879],[1.32808,43.78003],[1.43673,43.78158],[1.43731,43.7591],[1.45901,43.75937],[1.45933,43.74815],[1.48103,43.7484],[1.48133,43.73718],[1.50303,43.73741],[1.50359,43.71497],[1.52531,43.71518],[1.52561,43.70401],[1.54727,43.70426],[1.54757,43.69304],[1.5692,43.69329],[1.56957,43.68203],[1.5912,43.68227],[1.59174,43.6598],[1.61342,43.66003],[1.61372,43.64883],[1.63538,43.64908],[1.63841,43.51407],[1.29216,43.50947],[1.29186,43.5207],[1.27021,43.5204],[1.26988,43.53164],[1.24823,43.53133],[1.2476,43.55378],[1.22596,43.55349],[1.22568,43.56472],[1.20398,43.56442],[1.20331,43.5869],[1.18162,43.58656],[1.18102,43.60904],[1.15928,43.60869],[1.15896,43.61995],[1.13726,43.61962],[1.13659,43.64209],[1.11491,43.64176],[1.11351,43.68676]]],terms_url:"https://wiki.openstreetmap.org/wiki/Toulouse/ToulouseMetropoleData",terms_text:"ToulouseMetropole"},{id:"Toulouse-Orthophotoplan-2015",name:"Toulouse - Orthophotoplan 2015",type:"wms",template:"https://wms.plan.toulouse.fr/geocache/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortho2015&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[1.11351,43.68676],[1.13518,43.68708],[1.13489,43.69835],[1.17829,43.69903],[1.17799,43.71028],[1.19966,43.71061],[1.19934,43.72187],[1.24274,43.72253],[1.24243,43.73375],[1.26415,43.73409],[1.26383,43.74536],[1.28553,43.74565],[1.28525,43.75693],[1.30692,43.75723],[1.30664,43.76848],[1.32834,43.76879],[1.32808,43.78003],[1.43673,43.78158],[1.43731,43.7591],[1.45901,43.75937],[1.45933,43.74815],[1.48103,43.7484],[1.48133,43.73718],[1.50303,43.73741],[1.50359,43.71497],[1.52531,43.71518],[1.52561,43.70401],[1.54727,43.70426],[1.54757,43.69304],[1.5692,43.69329],[1.56957,43.68203],[1.5912,43.68227],[1.59174,43.6598],[1.61342,43.66003],[1.61372,43.64883],[1.63538,43.64908],[1.63841,43.51407],[1.29216,43.50947],[1.29186,43.5207],[1.27021,43.5204],[1.26988,43.53164],[1.24823,43.53133],[1.2476,43.55378],[1.22596,43.55349],[1.22568,43.56472],[1.20398,43.56442],[1.20331,43.5869],[1.18162,43.58656],[1.18102,43.60904],[1.15928,43.60869],[1.15896,43.61995],[1.13726,43.61962],[1.13659,43.64209],[1.11491,43.64176],[1.11351,43.68676]]],terms_url:"https://wiki.openstreetmap.org/wiki/Toulouse/ToulouseMetropoleData",terms_text:"ToulouseMetropole"},{id:"Toulouse-Orthophotoplan-2017",name:"Toulouse - Orthophotoplan 2017",type:"wms",template:"https://wms.plan.toulouse.fr/geocache/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortho2017&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2017-01-01T00:00:00.000Z",startDate:"2017-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[1.11351,43.68676],[1.13518,43.68708],[1.13489,43.69835],[1.17829,43.69903],[1.17799,43.71028],[1.19966,43.71061],[1.19934,43.72187],[1.24274,43.72253],[1.24243,43.73375],[1.26415,43.73409],[1.26383,43.74536],[1.28553,43.74565],[1.28525,43.75693],[1.30692,43.75723],[1.30664,43.76848],[1.32834,43.76879],[1.32808,43.78003],[1.43673,43.78158],[1.43731,43.7591],[1.45901,43.75937],[1.45933,43.74815],[1.48103,43.7484],[1.48133,43.73718],[1.50303,43.73741],[1.50359,43.71497],[1.52531,43.71518],[1.52561,43.70401],[1.54727,43.70426],[1.54757,43.69304],[1.5692,43.69329],[1.56957,43.68203],[1.5912,43.68227],[1.59174,43.6598],[1.61342,43.66003],[1.61372,43.64883],[1.63538,43.64908],[1.63841,43.51407],[1.29216,43.50947],[1.29186,43.5207],[1.27021,43.5204],[1.26988,43.53164],[1.24823,43.53133],[1.2476,43.55378],[1.22596,43.55349],[1.22568,43.56472],[1.20398,43.56442],[1.20331,43.5869],[1.18162,43.58656],[1.18102,43.60904],[1.15928,43.60869],[1.15896,43.61995],[1.13726,43.61962],[1.13659,43.64209],[1.11491,43.64176],[1.11351,43.68676]]],terms_url:"https://wiki.openstreetmap.org/wiki/Toulouse/ToulouseMetropoleData",terms_text:"ToulouseMetropole",best:true},{id:"Tours-Orthophoto-2008_2010",name:"Tours - Orthophotos 2008-2010",type:"tms",template:"http://wms.openstreetmap.fr/tms/1.0.0/tours/{zoom}/{x}/{y}",endDate:"2011-01-01T00:00:00.000Z",startDate:"2008-01-01T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[0.54575,47.46526],[0.54585,47.46082],[0.53922,47.4607],[0.53935,47.45624],[0.5328,47.4561],[0.5329,47.45157],[0.52619,47.4514],[0.52659,47.44249],[0.50009,47.44207],[0.50024,47.43758],[0.4936,47.43743],[0.4937,47.43293],[0.46061,47.43246],[0.46072,47.42798],[0.4541,47.42781],[0.45493,47.40539],[0.46154,47.40545],[0.46191,47.39649],[0.46843,47.3966],[0.46913,47.37864],[0.47571,47.37876],[0.47621,47.3652],[0.48283,47.36535],[0.48296,47.36083],[0.47635,47.36074],[0.47665,47.35173],[0.47005,47.35162],[0.4702,47.34713],[0.46375,47.34701],[0.45714,47.34241],[0.45729,47.33791],[0.45067,47.33781],[0.45084,47.33331],[0.44422,47.3332],[0.44438,47.32871],[0.43114,47.3285],[0.43163,47.315],[0.43824,47.31511],[0.43838,47.31062],[0.47145,47.31114],[0.47131,47.31566],[0.47789,47.31575],[0.47807,47.31128],[0.48468,47.31136],[0.48486,47.30687],[0.49144,47.30698],[0.49174,47.29797],[0.48516,47.29787],[0.48543,47.28887],[0.47885,47.28877],[0.47916,47.27978],[0.48578,47.2799],[0.48591,47.27539],[0.49254,47.2755],[0.49267,47.27101],[0.4993,47.27111],[0.49943,47.26661],[0.51927,47.26692],[0.51942,47.26242],[0.52602,47.26252],[0.52587,47.26702],[0.5457,47.26734],[0.54555,47.27183],[0.55877,47.27204],[0.55863,47.27652],[0.56523,47.27663],[0.56508,47.28112],[0.57168,47.28123],[0.57152,47.28572],[0.57814,47.28583],[0.57799,47.29033],[0.5846,47.29043],[0.58431,47.29942],[0.5975,47.29961],[0.59766,47.29514],[0.65716,47.296],[0.6573,47.29151],[0.6705,47.29172],[0.67035,47.29621],[0.68362,47.29637],[0.68343,47.30089],[0.69006,47.30096],[0.68992,47.30547],[0.7362,47.30612],[0.73608,47.31061],[0.7559,47.31089],[0.75577,47.31539],[0.76238,47.31547],[0.76223,47.31999],[0.77549,47.32015],[0.77497,47.33882],[0.77458,47.35163],[0.76804,47.35159],[0.76759,47.36053],[0.77424,47.36062],[0.77335,47.39213],[0.76674,47.39202],[0.76644,47.40108],[0.77306,47.40111],[0.77289,47.41013],[0.76618,47.41002],[0.76603,47.4145],[0.75276,47.4143],[0.75298,47.40981],[0.74624,47.4097],[0.74594,47.42322],[0.73923,47.42315],[0.73887,47.43661],[0.73233,47.43652],[0.73219,47.44106],[0.7255,47.44098],[0.72542,47.44535],[0.73188,47.44548],[0.73185,47.45011],[0.73845,47.45023],[0.73831,47.45463],[0.74494,47.45474],[0.74432,47.4772],[0.73107,47.47697],[0.7309,47.48154],[0.71762,47.48126],[0.71779,47.47684],[0.69777,47.4765],[0.69805,47.47198],[0.69145,47.47189],[0.69173,47.46302],[0.6851,47.46293],[0.68494,47.46735],[0.67826,47.46733],[0.67798,47.47622],[0.67141,47.47616],[0.67104,47.4882],[0.65773,47.48797],[0.65782,47.48504],[0.65119,47.48483],[0.65147,47.47586],[0.64482,47.47572],[0.64493,47.47126],[0.6118,47.47075],[0.61188,47.46631],[0.60528,47.46612],[0.60542,47.46166],[0.59888,47.46155],[0.59902,47.45709],[0.57249,47.45669],[0.57218,47.46565],[0.54575,47.46526]]],terms_url:"https://wiki.openstreetmap.org/wiki/Tours/Orthophoto",terms_text:"Orthophoto Tour(s) Plus 2008"},{id:"Tours-Orthophoto-2013",name:"Tours - Orthophotos 2013",type:"tms",template:"http://wms.openstreetmap.fr/tms/1.0.0/tours_2013/{zoom}/{x}/{y}",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[0.77512,47.32983],[0.77427,47.35617],[0.77053,47.35611],[0.77024,47.36512],[0.77398,47.36517],[0.7728,47.40148],[0.7904,47.40147],[0.78988,47.4103],[0.79117,47.41047],[0.79108,47.41942],[0.79392,47.41942],[0.79319,47.43733],[0.79834,47.43742],[0.79808,47.45544],[0.80044,47.45541],[0.80138,47.46426],[0.80074,47.46899],[0.79396,47.47331],[0.78405,47.47323],[0.78387,47.47871],[0.77606,47.47859],[0.77585,47.48204],[0.77066,47.48219],[0.77044,47.4859],[0.76096,47.49092],[0.75718,47.49092],[0.73753,47.50336],[0.7259,47.50588],[0.71113,47.50576],[0.70418,47.50408],[0.69109,47.50038],[0.69045,47.49718],[0.67757,47.49683],[0.67757,47.49353],[0.66427,47.49301],[0.6635,47.48953],[0.65088,47.48958],[0.65133,47.48032],[0.64734,47.4803],[0.64747,47.47852],[0.64474,47.47846],[0.64479,47.47575],[0.64238,47.47578],[0.64225,47.47302],[0.63835,47.47294],[0.63792,47.47131],[0.60513,47.47079],[0.60513,47.46632],[0.59852,47.46603],[0.59878,47.46156],[0.592,47.46156],[0.59226,47.45976],[0.58084,47.45971],[0.58007,47.46145],[0.57234,47.46139],[0.57222,47.46512],[0.55874,47.46489],[0.5466,47.46052],[0.53269,47.45355],[0.52677,47.45315],[0.52677,47.45152],[0.52231,47.45123],[0.52256,47.44804],[0.51977,47.44776],[0.52007,47.44247],[0.4975,47.4416],[0.49716,47.44049],[0.49355,47.44015],[0.49355,47.43573],[0.47943,47.43575],[0.46171,47.42819],[0.45643,47.42088],[0.45489,47.41229],[0.45506,47.40218],[0.46149,47.40193],[0.46167,47.39641],[0.46879,47.39602],[0.47016,47.35173],[0.45677,47.3515],[0.45729,47.34254],[0.43085,47.34196],[0.43196,47.30602],[0.47154,47.3067],[0.47257,47.28004],[0.48527,47.28004],[0.48578,47.27084],[0.49935,47.27107],[0.49917,47.26245],[0.55273,47.26304],[0.55222,47.27201],[0.56561,47.27224],[0.56526,47.28156],[0.59118,47.28156],[0.59067,47.29099],[0.66912,47.29169],[0.6832,47.29564],[0.6832,47.30077],[0.69658,47.30123],[0.69641,47.3024],[0.71006,47.30245],[0.72293,47.30589],[0.72285,47.31043],[0.74165,47.31084],[0.75426,47.31392],[0.7625,47.31815],[0.76207,47.32013],[0.76619,47.32009],[0.76956,47.32207],[0.77233,47.32508],[0.77336,47.3267],[0.77512,47.32983]]],terms_url:"https://wiki.openstreetmap.org/wiki/Tours/Orthophoto",terms_text:"Orthophoto Tour(s)plus 2013"},{id:"trafikverket-baninfo",name:"Trafikverket Railway Network",type:"wms",template:"https://geo-baninfo.trafikverket.se/mapservice/wms.axd/BanInfo?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Spar_Huvud_och_sidospar&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[7,20],polygon:[[[12.80182,55.19612],[14.22729,55.27286],[18.44604,56.69244],[19.74242,57.98481],[20.0061,59.5371],[19.08394,60.19308],[20.49499,63.2497],[24.25231,65.57437],[23.81835,67.92514],[23.23607,68.34655],[20.43456,69.17038],[18.08349,68.5644],[16.50145,67.88382],[14.43602,66.14275],[11.82128,63.30775],[12.20031,60.31063],[10.62377,58.5482],[12.64251,56.03062],[12.80182,55.19612]]],terms_url:"https://www.trafikverket.se",terms_text:"© Trafikverket, CC0",description:"Swedish railway network, including sidings",icon:"https://api.trafikinfo.trafikverket.se/img/apple-touch-icon-144-precomposed.png",overlay:true},{id:"trafikverket-vagnat",name:"Trafikverket Road Network",type:"wms",template:"https://geo-netinfo.trafikverket.se/mapservice/wms.axd/NetInfo?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Vagtrafiknat,Funkvagklass,Farjeled&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[13,20],polygon:[[[12.80182,55.19612],[14.22729,55.27286],[18.44604,56.69244],[19.74242,57.98481],[20.0061,59.5371],[19.08394,60.19308],[20.49499,63.2497],[24.25231,65.57437],[23.81835,67.92514],[23.23607,68.34655],[20.43456,69.17038],[18.08349,68.5644],[16.50145,67.88382],[14.43602,66.14275],[11.82128,63.30775],[12.20031,60.31063],[10.62377,58.5482],[12.64251,56.03062],[12.80182,55.19612]]],terms_url:"https://www.trafikverket.se",terms_text:"© Trafikverket, CC0",description:"Swedish NVDB road network",icon:"https://api.trafikinfo.trafikverket.se/img/apple-touch-icon-144-precomposed.png",overlay:true},{id:"trafikverket-vagnat-extra",name:"Trafikverket Road Network extra",type:"wms",template:"https://geo-netinfo.trafikverket.se/mapservice/wms.axd/NetInfo?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Vagnummer,Vaghinder,Rastplats,Rastficka,Hallplats,Farthinder,BroTunnel,ATK_Matplats&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[3,20],polygon:[[[12.80182,55.19612],[14.22729,55.27286],[18.44604,56.69244],[19.74242,57.98481],[20.0061,59.5371],[19.08394,60.19308],[20.49499,63.2497],[24.25231,65.57437],[23.81835,67.92514],[23.23607,68.34655],[20.43456,69.17038],[18.08349,68.5644],[16.50145,67.88382],[14.43602,66.14275],[11.82128,63.30775],[12.20031,60.31063],[10.62377,58.5482],[12.64251,56.03062],[12.80182,55.19612]]],terms_url:"https://www.trafikverket.se",terms_text:"© Trafikverket, CC0",description:"Swedish NVDB extra details: Highway reference, traffic calming, rest area, bus stop, bridge, tunnel, speed camera",icon:"https://api.trafikinfo.trafikverket.se/img/apple-touch-icon-144-precomposed.png",overlay:true},{id:"trafikverket-vagnat-navn",name:"Trafikverket Street Names",type:"tms",template:"https://mapproxy.openstreetmap.se/tiles/1.0.0/nvdb_names/EPSG3857/{zoom}/{x}/{y}.png",zoomExtent:[15,19],polygon:[[[12.80182,55.19612],[14.22729,55.27286],[18.44604,56.69244],[19.74242,57.98481],[20.0061,59.5371],[19.08394,60.19308],[20.49499,63.2497],[24.25231,65.57437],[23.81835,67.92514],[23.23607,68.34655],[20.43456,69.17038],[18.08349,68.5644],[16.50145,67.88382],[14.43602,66.14275],[11.82128,63.30775],[12.20031,60.31063],[10.62377,58.5482],[12.64251,56.03062],[12.80182,55.19612]]],terms_url:"https://www.trafikverket.se",terms_text:"© Trafikverket, CC0",description:"Swedish NVDB street names",icon:"https://api.trafikinfo.trafikverket.se/img/apple-touch-icon-144-precomposed.png",overlay:true},{id:"US_Forest_Service_roads_overlay",name:"U.S. Forest Roads Overlay",type:"tms",template:"https://{switch:a,b,c,d}.tiles.mapbox.com/styles/v1/glassman/cjf4qjmps0tgv2qpahj977mvz/tiles/256/{zoom}/{x}/{y}?access_token=pk.eyJ1IjoiZ2xhc3NtYW4iLCJhIjoiRjk3dWdwYyJ9.Tg_fMJWxygeKBgVTrZHmGA",zoomExtent:[0,20],polygon:[[[-124.76179,48.41301],[-124.60595,45.90245],[-124.99343,40.05576],[-122.53697,36.85661],[-119.97759,33.00641],[-117.67593,32.46302],[-114.86123,32.47999],[-111.00893,31.33601],[-108.19927,31.326],[-108.18711,31.77551],[-106.53072,31.78209],[-106.48421,31.74645],[-106.42932,31.75206],[-106.28689,31.56133],[-106.20525,31.4467],[-105.02053,30.5361],[-104.58819,29.69979],[-103.25189,28.89087],[-102.71736,29.39206],[-102.1514,29.74757],[-101.25529,29.48105],[-100.00624,28.00822],[-99.23511,26.4476],[-98.01091,25.9928],[-97.43502,25.8266],[-96.95553,25.98216],[-96.80617,27.79782],[-95.55633,28.58761],[-93.74053,29.47421],[-90.90285,28.85645],[-88.01567,28.99443],[-88.01625,30.00389],[-86.02775,30.00475],[-84.01879,28.99618],[-81.9972,25.98268],[-81.99666,25.01349],[-84.01656,25.01258],[-84.01601,24.00527],[-80.02,24.0071],[-79.89011,26.85507],[-80.02453,32.01613],[-75.41474,35.05319],[-74.02112,39.57279],[-72.00202,40.99125],[-69.87974,40.99205],[-69.84893,43.26199],[-66.94528,44.71049],[-67.75966,47.099],[-69.25051,47.51223],[-70.46149,46.21766],[-71.41227,45.25488],[-72.02225,45.00598],[-75.07988,44.98029],[-76.90231,43.80246],[-78.76239,43.62496],[-79.15798,43.44626],[-79.00601,42.80053],[-82.66248,41.68895],[-82.17616,43.58854],[-83.2814,46.13885],[-87.50645,48.01427],[-88.34922,48.29633],[-89.43531,47.98378],[-93.99811,49.00671],[-95.11054,49.412],[-96.01312,49.00605],[-123.32289,49.00429],[-123.22752,48.18499],[-124.76179,48.41301]],[[-160.57876,22.50629],[-160.57822,21.49846],[-158.74706,21.24398],[-157.50832,20.9958],[-155.99619,18.77902],[-154.62178,18.7587],[-154.68902,19.88057],[-156.29276,21.22259],[-157.50474,21.9985],[-159.00937,22.50702],[-160.57876,22.50629]],[[-167.15715,68.72197],[-164.8554,67.02551],[-168.0022,66.00175],[-169.00874,66.00155],[-169.00754,64.99877],[-172.51433,63.87673],[-173.8197,59.74014],[-162.50181,58.00058],[-160.0159,58.00124],[-160.01497,57.00003],[-160.50548,56.9999],[-165.80926,54.82485],[-178.0001,52.24465],[-177.9993,51.25543],[-171.46891,51.82153],[-162.40251,53.95666],[-159.00757,55.0025],[-158.01907,55.00278],[-151.99632,55.99919],[-151.50034,57.99879],[-151.50129,58.99198],[-138.516,58.99532],[-138.51505,57.99864],[-133.99482,54.00317],[-130.00444,54.00434],[-130.00708,57.00005],[-131.97588,56.99952],[-135.12299,59.7566],[-138.00718,59.9918],[-139.17159,60.41272],[-140.9874,61.01186],[-140.9684,69.95351],[-156.17689,71.56333],[-160.41363,70.73977],[-163.02183,69.97074],[-164.9717,68.99469],[-167.15715,68.72197]]],description:"Highway: Green casing = unclassified. Brown casing = track. Surface: gravel = light brown fill, Asphalt = black, paved = gray, ground =white, concrete = blue, grass = green. Seasonal = white bars",icon:"https://osmlab.github.io/editor-layer-index/sources/north-america/us/USForestService-overlay.png",overlay:true},{id:"US_Forest_Service_roads",name:"U.S. Forest Service roads",type:"tms",template:"https://osm.cycle.travel/forest/{zoom}/{x}/{y}.png",zoomExtent:[0,19],polygon:[[[-124.76179,48.41301],[-124.60595,45.90245],[-124.99343,40.05576],[-122.53697,36.85661],[-119.97759,33.00641],[-117.67593,32.46302],[-114.86123,32.47999],[-111.00893,31.33601],[-108.19927,31.326],[-108.18711,31.77551],[-106.53072,31.78209],[-106.48421,31.74645],[-106.42932,31.75206],[-106.28689,31.56133],[-106.20525,31.4467],[-105.02053,30.5361],[-104.58819,29.69979],[-103.25189,28.89087],[-102.71736,29.39206],[-102.1514,29.74757],[-101.25529,29.48105],[-100.00624,28.00822],[-99.23511,26.4476],[-98.01091,25.9928],[-97.43502,25.8266],[-96.95553,25.98216],[-96.80617,27.79782],[-95.55633,28.58761],[-93.74053,29.47421],[-90.90285,28.85645],[-88.01567,28.99443],[-88.01625,30.00389],[-86.02775,30.00475],[-84.01879,28.99618],[-81.9972,25.98268],[-81.99666,25.01349],[-84.01656,25.01258],[-84.01601,24.00527],[-80.02,24.0071],[-79.89011,26.85507],[-80.02453,32.01613],[-75.41474,35.05319],[-74.02112,39.57279],[-72.00202,40.99125],[-69.87974,40.99205],[-69.84893,43.26199],[-66.94528,44.71049],[-67.75966,47.099],[-69.25051,47.51223],[-70.46149,46.21766],[-71.41227,45.25488],[-72.02225,45.00598],[-75.07988,44.98029],[-76.90231,43.80246],[-78.76239,43.62496],[-79.15798,43.44626],[-79.00601,42.80053],[-82.66248,41.68895],[-82.17616,43.58854],[-83.2814,46.13885],[-87.50645,48.01427],[-88.34922,48.29633],[-89.43531,47.98378],[-93.99811,49.00671],[-95.11054,49.412],[-96.01312,49.00605],[-123.32289,49.00429],[-123.22752,48.18499],[-124.76179,48.41301]],[[-160.57876,22.50629],[-160.57822,21.49846],[-158.74706,21.24398],[-157.50832,20.9958],[-155.99619,18.77902],[-154.62178,18.7587],[-154.68902,19.88057],[-156.29276,21.22259],[-157.50474,21.9985],[-159.00937,22.50702],[-160.57876,22.50629]],[[-167.15715,68.72197],[-164.8554,67.02551],[-168.0022,66.00175],[-169.00874,66.00155],[-169.00754,64.99877],[-172.51433,63.87673],[-173.8197,59.74014],[-162.50181,58.00058],[-160.0159,58.00124],[-160.01497,57.00003],[-160.50548,56.9999],[-165.80926,54.82485],[-178.0001,52.24465],[-177.9993,51.25543],[-171.46891,51.82153],[-162.40251,53.95666],[-159.00757,55.0025],[-158.01907,55.00278],[-151.99632,55.99919],[-151.50034,57.99879],[-151.50129,58.99198],[-138.516,58.99532],[-138.51505,57.99864],[-133.99482,54.00317],[-130.00444,54.00434],[-130.00708,57.00005],[-131.97588,56.99952],[-135.12299,59.7566],[-138.00718,59.9918],[-139.17159,60.41272],[-140.9874,61.01186],[-140.9684,69.95351],[-156.17689,71.56333],[-160.41363,70.73977],[-163.02183,69.97074],[-164.9717,68.99469],[-167.15715,68.72197]]]},{id:"Zuerich-zh_uebersichtsplan-tms",name:"Übersichtsplan Zürich",type:"tms",template:"https://mapproxy.osm.ch/tiles/zh_uebersichtsplan/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",zoomExtent:[0,21],polygon:[[[8.45788,47.44582],[8.57392,47.44477],[8.57362,47.43124],[8.60266,47.43096],[8.60231,47.41746],[8.6318,47.41716],[8.6295,47.33628],[8.57162,47.33679],[8.57152,47.32292],[8.54236,47.3236],[8.54212,47.31013],[8.48418,47.31062],[8.48478,47.33762],[8.45582,47.33787],[8.45609,47.35135],[8.42713,47.35161],[8.42864,47.43259],[8.45745,47.43231],[8.45788,47.44582]]],terms_text:"Stadt Zürich Open Government Data",description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{id:"UkraineKyiv2014DZK",name:"Ukraine - Kyiv 2014 (DZK)",type:"tms",template:"http://map.land.gov.ua/map/ortho_kiev/{zoom}/{x}/{-y}.jpg",endDate:"2014-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",zoomExtent:[0,16],polygon:[[[30.30752,50.57184],[30.33155,50.57402],[30.37687,50.57925],[30.42288,50.58143],[30.4318,50.58579],[30.44416,50.58797],[30.45515,50.58754],[30.46545,50.58449],[30.46819,50.57751],[30.49085,50.57489],[30.51351,50.57489],[30.52519,50.57402],[30.55608,50.55221],[30.58424,50.53869],[30.5966,50.53781],[30.60896,50.5365],[30.64329,50.5352],[30.65496,50.53563],[30.65496,50.54305],[30.66045,50.54916],[30.66801,50.55439],[30.67762,50.55876],[30.68792,50.56137],[30.70783,50.55614],[30.71127,50.56356],[30.71127,50.57838],[30.72157,50.58231],[30.71882,50.58972],[30.72981,50.59103],[30.74011,50.58841],[30.76208,50.58536],[30.77306,50.58274],[30.78336,50.57795],[30.80259,50.57141],[30.81014,50.56617],[30.82182,50.55439],[30.82525,50.53956],[30.81701,50.53432],[30.79504,50.52909],[30.78474,50.52559],[30.76276,50.51992],[30.76208,50.5125],[30.75315,50.50769],[30.74354,50.50376],[30.73805,50.49721],[30.74629,50.49197],[30.75521,50.48847],[30.74835,50.48236],[30.75178,50.47537],[30.75315,50.46794],[30.74835,50.46138],[30.75178,50.45439],[30.78886,50.43646],[30.7971,50.43165],[30.80328,50.41765],[30.8225,50.40846],[30.82044,50.40102],[30.82319,50.39358],[30.81289,50.39095],[30.80122,50.39139],[30.78954,50.39314],[30.77787,50.3927],[30.77856,50.3857],[30.77169,50.38001],[30.76208,50.37519],[30.75109,50.37256],[30.73873,50.37256],[30.72775,50.37475],[30.71813,50.37957],[30.71539,50.36512],[30.71127,50.35855],[30.70577,50.35241],[30.69753,50.34716],[30.68586,50.34453],[30.65084,50.34058],[30.63848,50.34014],[30.62681,50.33795],[30.62887,50.3305],[30.64947,50.29279],[30.66663,50.28314],[30.67144,50.27656],[30.6632,50.27085],[30.65153,50.26997],[30.64535,50.27612],[30.63368,50.27787],[30.62132,50.27656],[30.61857,50.2691],[30.62956,50.25637],[30.6378,50.25154],[30.64535,50.23792],[30.64398,50.2309],[30.63917,50.22387],[30.62956,50.21992],[30.6069,50.2164],[30.59591,50.2186],[30.59042,50.23353],[30.5863,50.241],[30.57531,50.25505],[30.56501,50.25944],[30.5657,50.2669],[30.56432,50.29718],[30.56638,50.30463],[30.5657,50.31209],[30.55677,50.31691],[30.54441,50.31735],[30.52587,50.32699],[30.51489,50.3305],[30.50253,50.33182],[30.48055,50.33664],[30.47163,50.34146],[30.46957,50.34935],[30.47025,50.35679],[30.46201,50.36205],[30.4524,50.35679],[30.44004,50.35548],[30.43661,50.36512],[30.43111,50.37212],[30.43661,50.37826],[30.43455,50.3857],[30.40914,50.39883],[30.39678,50.40014],[30.3906,50.40671],[30.37069,50.41546],[30.36314,50.42159],[30.3597,50.42902],[30.3597,50.43646],[30.35696,50.44389],[30.3446,50.44477],[30.32056,50.44258],[30.29585,50.44477],[30.28349,50.44477],[30.27799,50.43864],[30.27525,50.43165],[30.26563,50.42771],[30.25396,50.42902],[30.24572,50.42377],[30.23542,50.42771],[30.2416,50.43427],[30.2416,50.44214],[30.23679,50.4487],[30.23885,50.45613],[30.24297,50.46313],[30.24915,50.46968],[30.25671,50.47493],[30.26083,50.48192],[30.26563,50.48847],[30.26907,50.49983],[30.26151,50.50595],[30.26357,50.51381],[30.26975,50.51992],[30.28898,50.52821],[30.29722,50.53345],[30.30271,50.54],[30.30203,50.54741],[30.30477,50.55483],[30.32743,50.55221],[30.33086,50.55919],[30.32262,50.56486],[30.31233,50.56835],[30.30752,50.57184]]],description:"Works only from within Ukraine or with an Ukrainian proxy server."},{id:"Ukraine-orto10000-2012",name:"Ukraine - Orthophotomaps 2012",type:"tms",template:"http://212.26.144.110/tile2/orto_10000/{zoom}/{x}/{-y}.jpg",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",zoomExtent:[0,16],polygon:[[[23.6193,51.65491],[24.09803,51.64047],[24.39723,51.89353],[25.19178,51.95913],[26.12263,51.92224],[26.49829,51.80933],[27.09005,51.77026],[27.62861,51.62603],[28.02422,51.59093],[28.28021,51.68172],[28.37662,51.5806],[28.82542,51.5682],[29.19111,51.64253],[29.41718,51.4399],[29.67316,51.51238],[29.82276,51.47512],[30.21837,51.50824],[30.54417,51.30709],[30.63726,51.38599],[30.51425,51.63634],[30.983,52.09005],[31.2822,52.07984],[31.48832,52.13497],[32.11,52.05531],[32.31279,52.11864],[32.43912,52.32434],[32.93114,52.28368],[33.29683,52.39337],[33.75561,52.35277],[34.35734,51.78055],[34.14457,51.76409],[34.05813,51.67965],[34.22103,51.47098],[34.25095,51.30085],[34.7197,51.19056],[35.11199,51.21139],[35.1818,51.08626],[35.38792,51.03402],[35.40787,50.62878],[35.62063,50.38563],[36.06944,50.4513],[36.21571,50.41106],[36.31212,50.28802],[36.4717,50.32624],[36.59138,50.2519],[37.46571,50.45977],[37.735,50.11353],[38.05747,49.9384],[38.19377,49.95765],[38.19045,50.07514],[38.35002,50.08154],[38.41651,49.98972],[38.73899,49.97476],[39.00827,49.83344],[39.14457,49.89987],[39.27755,49.78195],[39.54018,49.74544],[39.79949,49.58406],[40.18845,49.6013],[40.0588,49.50424],[40.20508,49.24666],[39.93247,49.06185],[39.71638,49.01608],[40.08872,48.85448],[39.79617,48.78443],[39.69311,48.65283],[39.86266,48.5693],[39.99231,48.31348],[39.83274,47.92287],[39.74297,47.83144],[39.57675,47.81135],[38.86532,47.85153],[38.77555,47.68618],[38.38327,47.60106],[38.30348,47.52704],[38.30016,47.23891],[38.13393,47.05577],[37.5455,47.05124],[37.31279,46.87654],[37.20973,46.92651],[36.96039,46.83107],[36.7443,46.61685],[36.72436,46.7719],[36.4451,46.72407],[36.10601,46.4728],[36.20574,46.66022],[35.92316,46.64424],[35.43114,46.39948],[35.10202,45.97138],[35.0455,45.75145],[35.47436,45.33],[35.86,45.53297],[35.9963,45.43274],[36.11598,45.51899],[36.66452,45.4514],[36.65454,45.34168],[36.50494,45.31363],[36.47502,45.24111],[36.48832,45.04884],[35.81013,44.98539],[35.5076,45.11222],[35.42782,44.93364],[35.12196,44.76394],[34.67649,44.75686],[33.985,44.37078],[33.68912,44.38504],[33.38327,44.50608],[33.35002,44.589],[33.55282,44.93128],[33.42981,45.1263],[33.19377,45.14271],[32.83141,45.33935],[32.60534,45.30896],[32.44577,45.3557],[32.50893,45.47005],[32.87795,45.68181],[33.57941,45.90665],[33.58938,46.02681],[33.25694,46.07065],[33.02422,45.97138],[31.61133,46.19506],[31.27555,46.61457],[30.87662,46.56887],[30.43446,45.98756],[29.69643,45.55159],[29.79284,45.46306],[29.73965,45.15913],[29.47369,45.41407],[29.18114,45.38373],[28.74896,45.22004],[28.56611,45.23409],[28.29018,45.33],[28.23367,45.49103],[28.31678,45.56789],[28.483,45.54228],[28.47303,45.73753],[28.95175,46.03143],[29.02489,46.18125],[28.9318,46.49569],[29.18779,46.57116],[29.59337,46.45448],[29.81944,46.46593],[29.95574,46.68759],[29.8959,46.8197],[29.56013,46.96963],[29.54683,47.29982],[29.14789,47.50234],[29.23101,47.77562],[29.17117,47.934],[28.86864,47.99411],[28.63593,48.16513],[28.44311,48.06525],[28.36332,48.17178],[28.25694,48.15404],[27.735,48.43494],[27.55547,48.45258],[26.92383,48.34884],[26.36532,48.17178],[26.1193,47.97408],[25.3846,47.91618],[24.91585,47.70408],[24.52024,47.94291],[24.18446,47.90058],[23.58274,48.00523],[23.43646,47.96963],[23.15388,48.10522],[23.07077,47.98743],[22.858,47.9585],[22.76824,48.09856],[22.58539,48.103],[22.51558,48.2161],[22.11332,48.4217],[22.49896,49.06621],[22.58872,49.11193],[22.87795,49.04006],[22.7217,49.18151],[22.71837,49.64652],[23.24364,50.105],[24.04484,50.49785],[24.05813,50.68779],[23.9451,50.81399],[24.10135,50.85388],[23.62928,51.29462],[23.6193,51.65491]]],description:"Works only from within Ukraine or with an Ukrainian proxy server."},{id:"uniao_dos_palmares",name:"União dos Palmares AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Uniao%20dos%20Palmares&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-35.97725,-9.20752],[-35.9772,-9.19398],[-35.97694,-9.19053],[-35.97678,-9.18607],[-35.97702,-9.18208],[-35.97704,-9.17968],[-35.97682,-9.17734],[-35.97664,-9.17517],[-35.97701,-9.17518],[-35.97696,-9.1707],[-35.97674,-9.17066],[-35.97661,-9.16645],[-35.97618,-9.16222],[-35.9761,-9.16026],[-35.97661,-9.16026],[-35.97672,-9.14608],[-35.97654,-9.14122],[-35.97666,-9.1332],[-35.97653,-9.12184],[-35.97648,-9.11748],[-35.98618,-9.11755],[-35.98947,-9.11733],[-36.00561,-9.11733],[-36.01859,-9.11736],[-36.04601,-9.11722],[-36.06734,-9.11698],[-36.06756,-9.16134],[-36.06771,-9.16405],[-36.06745,-9.16408],[-36.06756,-9.16657],[-36.06777,-9.16654],[-36.06798,-9.20701],[-36.0498,-9.20711],[-36.04671,-9.20698],[-36.02941,-9.20709],[-36.01355,-9.20718],[-35.99318,-9.20733],[-35.97725,-9.20752]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"URBIS2009",name:"URBIS 2009 aerial imagery",type:"wms",template:"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=Urbis:Ortho2009&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",endDate:"2009-01-01T00:00:00.000Z",startDate:"2009-01-01T00:00:00.000Z",polygon:[[[4.37973,50.76382],[4.38917,50.76377],[4.43028,50.77517],[4.435,50.775],[4.46427,50.78645],[4.4817,50.79134],[4.48238,50.79617],[4.45921,50.80626],[4.45947,50.81661],[4.47972,50.82036],[4.46959,50.83537],[4.46899,50.84573],[4.46238,50.85396],[4.44968,50.85591],[4.44599,50.85992],[4.4253,50.86615],[4.43183,50.87628],[4.44007,50.87845],[4.43106,50.89014],[4.43595,50.89502],[4.4296,50.90103],[4.41655,50.90757],[4.41543,50.91342],[4.39578,50.91407],[4.38462,50.91093],[4.38119,50.90319],[4.3726,50.90032],[4.36213,50.9033],[4.34857,50.90341],[4.34025,50.90411],[4.32892,50.90249],[4.31647,50.89605],[4.30634,50.89274],[4.29004,50.88982],[4.29149,50.88495],[4.29553,50.88262],[4.29561,50.88094],[4.28274,50.87227],[4.27699,50.86713],[4.27802,50.85911],[4.28042,50.85721],[4.28094,50.84215],[4.27193,50.84036],[4.25467,50.83695],[4.25107,50.83288],[4.25227,50.82697],[4.24343,50.82182],[4.24403,50.81548],[4.25519,50.8151],[4.25802,50.80935],[4.27218,50.81011],[4.27579,50.80696],[4.2854,50.80506],[4.28901,50.80691],[4.29802,50.80593],[4.30282,50.79709],[4.31458,50.79454],[4.31621,50.78624],[4.32952,50.77381],[4.34205,50.77164],[4.34522,50.77337],[4.37853,50.76811],[4.37973,50.76382]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"URBIS2012",name:"URBIS 2012 aerial imagery",type:"wms",template:"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=Urbis:Ortho2012&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",polygon:[[[4.37973,50.76382],[4.38917,50.76377],[4.43028,50.77517],[4.435,50.775],[4.46427,50.78645],[4.4817,50.79134],[4.48238,50.79617],[4.45921,50.80626],[4.45947,50.81661],[4.47972,50.82036],[4.46959,50.83537],[4.46899,50.84573],[4.46238,50.85396],[4.44968,50.85591],[4.44599,50.85992],[4.4253,50.86615],[4.43183,50.87628],[4.44007,50.87845],[4.43106,50.89014],[4.43595,50.89502],[4.4296,50.90103],[4.41655,50.90757],[4.41543,50.91342],[4.39578,50.91407],[4.38462,50.91093],[4.38119,50.90319],[4.3726,50.90032],[4.36213,50.9033],[4.34857,50.90341],[4.34025,50.90411],[4.32892,50.90249],[4.31647,50.89605],[4.30634,50.89274],[4.29004,50.88982],[4.29149,50.88495],[4.29553,50.88262],[4.29561,50.88094],[4.28274,50.87227],[4.27699,50.86713],[4.27802,50.85911],[4.28042,50.85721],[4.28094,50.84215],[4.27193,50.84036],[4.25467,50.83695],[4.25107,50.83288],[4.25227,50.82697],[4.24343,50.82182],[4.24403,50.81548],[4.25519,50.8151],[4.25802,50.80935],[4.27218,50.81011],[4.27579,50.80696],[4.2854,50.80506],[4.28901,50.80691],[4.29802,50.80593],[4.30282,50.79709],[4.31458,50.79454],[4.31621,50.78624],[4.32952,50.77381],[4.34205,50.77164],[4.34522,50.77337],[4.37853,50.76811],[4.37973,50.76382]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"URBIS2014",name:"URBIS 2014 aerial imagery",type:"wms",template:"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=Urbis:Ortho2014&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",endDate:"2014-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",polygon:[[[4.4001,50.76373],[4.43093,50.77254],[4.43586,50.77237],[4.46549,50.78373],[4.48189,50.78835],[4.48269,50.79849],[4.46363,50.80686],[4.46407,50.81546],[4.48204,50.81699],[4.48103,50.82343],[4.47465,50.83505],[4.47403,50.84587],[4.46712,50.85447],[4.45257,50.85797],[4.45017,50.86151],[4.42968,50.86764],[4.43423,50.87384],[4.44147,50.87513],[4.44381,50.88004],[4.43534,50.88977],[4.43968,50.89475],[4.43287,50.90363],[4.42096,50.90917],[4.42023,50.91387],[4.38315,50.91381],[4.37879,50.90637],[4.37334,50.90289],[4.36241,50.906],[4.34824,50.90611],[4.33955,50.90685],[4.32771,50.90515],[4.31471,50.89842],[4.30413,50.89498],[4.2871,50.89192],[4.28725,50.88532],[4.29293,50.88265],[4.27948,50.8736],[4.27347,50.86822],[4.27364,50.85871],[4.27688,50.85575],[4.27644,50.84376],[4.26664,50.8405],[4.25488,50.83992],[4.24755,50.83453],[4.24799,50.82866],[4.24357,50.82599],[4.24376,50.81356],[4.25233,50.81268],[4.25649,50.80711],[4.27025,50.8073],[4.27222,50.80537],[4.28414,50.80241],[4.28885,50.80434],[4.29544,50.8043],[4.30046,50.79506],[4.31076,50.79299],[4.31444,50.78372],[4.32628,50.77221],[4.34194,50.76891],[4.34474,50.77029],[4.37535,50.76577],[4.3755,50.76381],[4.4001,50.76373]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"URBIS2015",name:"URBIS 2015 aerial imagery",type:"wms",template:"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=Urbis:Ortho2015&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",polygon:[[[4.37973,50.76382],[4.38917,50.76377],[4.43028,50.77517],[4.435,50.775],[4.46427,50.78645],[4.4817,50.79134],[4.48238,50.79617],[4.45921,50.80626],[4.45947,50.81661],[4.47972,50.82036],[4.46959,50.83537],[4.46899,50.84573],[4.46238,50.85396],[4.44968,50.85591],[4.44599,50.85992],[4.4253,50.86615],[4.43183,50.87628],[4.44007,50.87845],[4.43106,50.89014],[4.43595,50.89502],[4.4296,50.90103],[4.41655,50.90757],[4.41543,50.91342],[4.39578,50.91407],[4.38462,50.91093],[4.38119,50.90319],[4.3726,50.90032],[4.36213,50.9033],[4.34857,50.90341],[4.34025,50.90411],[4.32892,50.90249],[4.31647,50.89605],[4.30634,50.89274],[4.29004,50.88982],[4.29149,50.88495],[4.29553,50.88262],[4.29561,50.88094],[4.28274,50.87227],[4.27699,50.86713],[4.27802,50.85911],[4.28042,50.85721],[4.28094,50.84215],[4.27193,50.84036],[4.25467,50.83695],[4.25107,50.83288],[4.25227,50.82697],[4.24343,50.82182],[4.24403,50.81548],[4.25519,50.8151],[4.25802,50.80935],[4.27218,50.81011],[4.27579,50.80696],[4.2854,50.80506],[4.28901,50.80691],[4.29802,50.80593],[4.30282,50.79709],[4.31458,50.79454],[4.31621,50.78624],[4.32952,50.77381],[4.34205,50.77164],[4.34522,50.77337],[4.37853,50.76811],[4.37973,50.76382]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"UrbISOrtho2016",name:"UrbIS-Ortho 2016",type:"wms",template:"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=Urbis:Ortho2016&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",polygon:[[[4.37973,50.76382],[4.38917,50.76377],[4.43028,50.77517],[4.435,50.775],[4.46427,50.78645],[4.4817,50.79134],[4.48238,50.79617],[4.45921,50.80626],[4.45947,50.81661],[4.47972,50.82036],[4.46959,50.83537],[4.46899,50.84573],[4.46238,50.85396],[4.44968,50.85591],[4.44599,50.85992],[4.4253,50.86615],[4.43183,50.87628],[4.44007,50.87845],[4.43106,50.89014],[4.43595,50.89502],[4.4296,50.90103],[4.41655,50.90757],[4.41543,50.91342],[4.39578,50.91407],[4.38462,50.91093],[4.38119,50.90319],[4.3726,50.90032],[4.36213,50.9033],[4.34857,50.90341],[4.34025,50.90411],[4.32892,50.90249],[4.31647,50.89605],[4.30634,50.89274],[4.29004,50.88982],[4.29149,50.88495],[4.29553,50.88262],[4.29561,50.88094],[4.28274,50.87227],[4.27699,50.86713],[4.27802,50.85911],[4.28042,50.85721],[4.28094,50.84215],[4.27193,50.84036],[4.25467,50.83695],[4.25107,50.83288],[4.25227,50.82697],[4.24343,50.82182],[4.24403,50.81548],[4.25519,50.8151],[4.25802,50.80935],[4.27218,50.81011],[4.27579,50.80696],[4.2854,50.80506],[4.28901,50.80691],[4.29802,50.80593],[4.30282,50.79709],[4.31458,50.79454],[4.31621,50.78624],[4.32952,50.77381],[4.34205,50.77164],[4.34522,50.77337],[4.37853,50.76811],[4.37973,50.76382]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"UrbISOrtho2017",name:"UrbIS-Ortho 2017",type:"wms",template:"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=Urbis:Ortho2017&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",endDate:"2017-01-01T00:00:00.000Z",startDate:"2017-01-01T00:00:00.000Z",polygon:[[[4.37973,50.76382],[4.38917,50.76377],[4.43028,50.77517],[4.435,50.775],[4.46427,50.78645],[4.4817,50.79134],[4.48238,50.79617],[4.45921,50.80626],[4.45947,50.81661],[4.47972,50.82036],[4.46959,50.83537],[4.46899,50.84573],[4.46238,50.85396],[4.44968,50.85591],[4.44599,50.85992],[4.4253,50.86615],[4.43183,50.87628],[4.44007,50.87845],[4.43106,50.89014],[4.43595,50.89502],[4.4296,50.90103],[4.41655,50.90757],[4.41543,50.91342],[4.39578,50.91407],[4.38462,50.91093],[4.38119,50.90319],[4.3726,50.90032],[4.36213,50.9033],[4.34857,50.90341],[4.34025,50.90411],[4.32892,50.90249],[4.31647,50.89605],[4.30634,50.89274],[4.29004,50.88982],[4.29149,50.88495],[4.29553,50.88262],[4.29561,50.88094],[4.28274,50.87227],[4.27699,50.86713],[4.27802,50.85911],[4.28042,50.85721],[4.28094,50.84215],[4.27193,50.84036],[4.25467,50.83695],[4.25107,50.83288],[4.25227,50.82697],[4.24343,50.82182],[4.24403,50.81548],[4.25519,50.8151],[4.25802,50.80935],[4.27218,50.81011],[4.27579,50.80696],[4.2854,50.80506],[4.28901,50.80691],[4.29802,50.80593],[4.30282,50.79709],[4.31458,50.79454],[4.31621,50.78624],[4.32952,50.77381],[4.34205,50.77164],[4.34522,50.77337],[4.37853,50.76811],[4.37973,50.76382]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"UrbISOrtho2018",name:"UrbIS-Ortho 2018",type:"wms",template:"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=Urbis:Ortho2018&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",endDate:"2018-01-01T00:00:00.000Z",startDate:"2018-01-01T00:00:00.000Z",polygon:[[[4.37973,50.76382],[4.38917,50.76377],[4.43028,50.77517],[4.435,50.775],[4.46427,50.78645],[4.4817,50.79134],[4.48238,50.79617],[4.45921,50.80626],[4.45947,50.81661],[4.47972,50.82036],[4.46959,50.83537],[4.46899,50.84573],[4.46238,50.85396],[4.44968,50.85591],[4.44599,50.85992],[4.4253,50.86615],[4.43183,50.87628],[4.44007,50.87845],[4.43106,50.89014],[4.43595,50.89502],[4.4296,50.90103],[4.41655,50.90757],[4.41543,50.91342],[4.39578,50.91407],[4.38462,50.91093],[4.38119,50.90319],[4.3726,50.90032],[4.36213,50.9033],[4.34857,50.90341],[4.34025,50.90411],[4.32892,50.90249],[4.31647,50.89605],[4.30634,50.89274],[4.29004,50.88982],[4.29149,50.88495],[4.29553,50.88262],[4.29561,50.88094],[4.28274,50.87227],[4.27699,50.86713],[4.27802,50.85911],[4.28042,50.85721],[4.28094,50.84215],[4.27193,50.84036],[4.25467,50.83695],[4.25107,50.83288],[4.25227,50.82697],[4.24343,50.82182],[4.24403,50.81548],[4.25519,50.8151],[4.25802,50.80935],[4.27218,50.81011],[4.27579,50.80696],[4.2854,50.80506],[4.28901,50.80691],[4.29802,50.80593],[4.30282,50.79709],[4.31458,50.79454],[4.31621,50.78624],[4.32952,50.77381],[4.34205,50.77164],[4.34522,50.77337],[4.37853,50.76811],[4.37973,50.76382]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",best:true,icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"UrbisAdmFR",name:"UrbisAdm FR",type:"wms",template:"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=urbisFR&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[4.4347,50.77647],[4.45427,50.78367],[4.4635,50.78798],[4.48273,50.79313],[4.44715,50.80821],[4.44831,50.81147],[4.45788,50.81646],[4.45466,50.81838],[4.4768,50.82036],[4.46552,50.83549],[4.46835,50.83744],[4.46037,50.85218],[4.44578,50.85522],[4.44466,50.85809],[4.43891,50.86042],[4.43719,50.85868],[4.42612,50.86296],[4.42037,50.86789],[4.42973,50.87764],[4.43736,50.87867],[4.42681,50.89026],[4.43307,50.89464],[4.42277,50.90298],[4.41187,50.90753],[4.41376,50.91159],[4.4032,50.91381],[4.38758,50.9098],[4.37771,50.89713],[4.36303,50.90119],[4.34183,50.9026],[4.33093,50.90119],[4.31651,50.89389],[4.3057,50.8908],[4.29334,50.88847],[4.29428,50.88658],[4.29737,50.8849],[4.29918,50.87975],[4.28587,50.87201],[4.27858,50.86556],[4.28064,50.85944],[4.28999,50.85625],[4.28304,50.85354],[4.28793,50.84833],[4.28291,50.8479],[4.28158,50.83785],[4.27399,50.8392],[4.27184,50.8363],[4.25793,50.83571],[4.2545,50.83289],[4.25523,50.82839],[4.2509,50.82419],[4.24382,50.81928],[4.2566,50.81743],[4.25995,50.81106],[4.27274,50.81212],[4.2757,50.81087],[4.27708,50.80835],[4.28454,50.80732],[4.29274,50.80911],[4.2951,50.80881],[4.30162,50.81299],[4.3066,50.81239],[4.30205,50.80445],[4.30501,50.7987],[4.31527,50.79661],[4.31845,50.79403],[4.3193,50.78722],[4.32201,50.7832],[4.33089,50.7758],[4.3408,50.77354],[4.34677,50.77574],[4.3551,50.77354],[4.36527,50.77284],[4.38243,50.76917],[4.38303,50.76375],[4.43312,50.77802],[4.4347,50.77647]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"UrbisAdmNL",name:"UrbisAdm NL",type:"wms",template:"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=urbisNL&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[4.4347,50.77647],[4.45427,50.78367],[4.4635,50.78798],[4.48273,50.79313],[4.44715,50.80821],[4.44831,50.81147],[4.45788,50.81646],[4.45466,50.81838],[4.4768,50.82036],[4.46552,50.83549],[4.46835,50.83744],[4.46037,50.85218],[4.44578,50.85522],[4.44466,50.85809],[4.43891,50.86042],[4.43719,50.85868],[4.42612,50.86296],[4.42037,50.86789],[4.42973,50.87764],[4.43736,50.87867],[4.42681,50.89026],[4.43307,50.89464],[4.42277,50.90298],[4.41187,50.90753],[4.41376,50.91159],[4.4032,50.91381],[4.38758,50.9098],[4.37771,50.89713],[4.36303,50.90119],[4.34183,50.9026],[4.33093,50.90119],[4.31651,50.89389],[4.3057,50.8908],[4.29334,50.88847],[4.29428,50.88658],[4.29737,50.8849],[4.29918,50.87975],[4.28587,50.87201],[4.27858,50.86556],[4.28064,50.85944],[4.28999,50.85625],[4.28304,50.85354],[4.28793,50.84833],[4.28291,50.8479],[4.28158,50.83785],[4.27399,50.8392],[4.27184,50.8363],[4.25793,50.83571],[4.2545,50.83289],[4.25523,50.82839],[4.2509,50.82419],[4.24382,50.81928],[4.2566,50.81743],[4.25995,50.81106],[4.27274,50.81212],[4.2757,50.81087],[4.27708,50.80835],[4.28454,50.80732],[4.29274,50.80911],[4.2951,50.80881],[4.30162,50.81299],[4.3066,50.81239],[4.30205,50.80445],[4.30501,50.7987],[4.31527,50.79661],[4.31845,50.79403],[4.3193,50.78722],[4.32201,50.7832],[4.33089,50.7758],[4.3408,50.77354],[4.34677,50.77574],[4.3551,50.77354],[4.36527,50.77284],[4.38243,50.76917],[4.38303,50.76375],[4.43312,50.77802],[4.4347,50.77647]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"URBISfr2013",name:"URBISfr numerical imagery (2013)",type:"wms",template:"https://gis.irisnet.be/arcgis/rest/services/basemap/urbisFR/MapServer/export?f=image&format=png8&transparent=False&SRS={proj}&bboxSR=3857&imageSR=3857&bbox={bbox}&size={width},{height}",projection:"EPSG:3857",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",polygon:[[[4.4347,50.77647],[4.45427,50.78367],[4.4635,50.78798],[4.48273,50.79313],[4.44715,50.80821],[4.44831,50.81147],[4.45788,50.81646],[4.45466,50.81838],[4.4768,50.82036],[4.46552,50.83549],[4.46835,50.83744],[4.46037,50.85218],[4.44578,50.85522],[4.44466,50.85809],[4.43891,50.86042],[4.43719,50.85868],[4.42612,50.86296],[4.42037,50.86789],[4.42973,50.87764],[4.43736,50.87867],[4.42681,50.89026],[4.43307,50.89464],[4.42277,50.90298],[4.41187,50.90753],[4.41376,50.91159],[4.4032,50.91381],[4.38758,50.9098],[4.37771,50.89713],[4.36303,50.90119],[4.34183,50.9026],[4.33093,50.90119],[4.31651,50.89389],[4.3057,50.8908],[4.29334,50.88847],[4.29428,50.88658],[4.29737,50.8849],[4.29918,50.87975],[4.28587,50.87201],[4.27858,50.86556],[4.28064,50.85944],[4.28999,50.85625],[4.28304,50.85354],[4.28793,50.84833],[4.28291,50.8479],[4.28158,50.83785],[4.27399,50.8392],[4.27184,50.8363],[4.25793,50.83571],[4.2545,50.83289],[4.25523,50.82839],[4.2509,50.82419],[4.24382,50.81928],[4.2566,50.81743],[4.25995,50.81106],[4.27274,50.81212],[4.2757,50.81087],[4.27708,50.80835],[4.28454,50.80732],[4.29274,50.80911],[4.2951,50.80881],[4.30162,50.81299],[4.3066,50.81239],[4.30205,50.80445],[4.30501,50.7987],[4.31527,50.79661],[4.31845,50.79403],[4.3193,50.78722],[4.32201,50.7832],[4.33089,50.7758],[4.3408,50.77354],[4.34677,50.77574],[4.3551,50.77354],[4.36527,50.77284],[4.38243,50.76917],[4.38303,50.76375],[4.43312,50.77802],[4.4347,50.77647]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"URBISnl2013",name:"URBISnl numerical imagery (2013)",type:"wms",template:"https://gis.irisnet.be/arcgis/rest/services/basemap/urbisNL/MapServer/export?f=image&format=png8&transparent=False&SRS={proj}&bboxSR=3857&imageSR=3857&bbox={bbox}&size={width},{height}",projection:"EPSG:3857",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",polygon:[[[4.4347,50.77647],[4.45427,50.78367],[4.4635,50.78798],[4.48273,50.79313],[4.44715,50.80821],[4.44831,50.81147],[4.45788,50.81646],[4.45466,50.81838],[4.4768,50.82036],[4.46552,50.83549],[4.46835,50.83744],[4.46037,50.85218],[4.44578,50.85522],[4.44466,50.85809],[4.43891,50.86042],[4.43719,50.85868],[4.42612,50.86296],[4.42037,50.86789],[4.42973,50.87764],[4.43736,50.87867],[4.42681,50.89026],[4.43307,50.89464],[4.42277,50.90298],[4.41187,50.90753],[4.41376,50.91159],[4.4032,50.91381],[4.38758,50.9098],[4.37771,50.89713],[4.36303,50.90119],[4.34183,50.9026],[4.33093,50.90119],[4.31651,50.89389],[4.3057,50.8908],[4.29334,50.88847],[4.29428,50.88658],[4.29737,50.8849],[4.29918,50.87975],[4.28587,50.87201],[4.27858,50.86556],[4.28064,50.85944],[4.28999,50.85625],[4.28304,50.85354],[4.28793,50.84833],[4.28291,50.8479],[4.28158,50.83785],[4.27399,50.8392],[4.27184,50.8363],[4.25793,50.83571],[4.2545,50.83289],[4.25523,50.82839],[4.2509,50.82419],[4.24382,50.81928],[4.2566,50.81743],[4.25995,50.81106],[4.27274,50.81212],[4.2757,50.81087],[4.27708,50.80835],[4.28454,50.80732],[4.29274,50.80911],[4.2951,50.80881],[4.30162,50.81299],[4.3066,50.81239],[4.30205,50.80445],[4.30501,50.7987],[4.31527,50.79661],[4.31845,50.79403],[4.3193,50.78722],[4.32201,50.7832],[4.33089,50.7758],[4.3408,50.77354],[4.34677,50.77574],[4.3551,50.77354],[4.36527,50.77284],[4.38243,50.76917],[4.38303,50.76375],[4.43312,50.77802],[4.4347,50.77647]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"USGS-Imagery",name:"USGS Imagery",type:"tms",template:"https://ags-proxy.openstreetmap.us/tiles/{zoom}/{x}/{y}?url=https%3A%2F%2Fbasemap.nationalmap.gov%2Farcgis%2Frest%2Fservices%2FUSGSImageryOnly%2FMapServer",zoomExtent:[12,20],polygon:[[[-123.25493,48.7529],[-123.25493,48.55923],[-123.19222,48.55923],[-123.19222,48.43484],[-122.94196,48.43484],[-122.94196,48.37208],[-122.88062,48.37208],[-122.88062,48.30948],[-122.81676,48.30948],[-122.81676,48.19046],[-123.00411,48.19046],[-123.00411,48.12759],[-123.05842,48.12759],[-123.05842,48.19051],[-123.25411,48.19051],[-123.25411,48.1275],[-123.37066,48.1275],[-123.37066,48.19084],[-124.05826,48.19084],[-124.05826,48.25344],[-124.18152,48.25344],[-124.18152,48.31647],[-124.43191,48.31647],[-124.43191,48.37826],[-124.55646,48.37826],[-124.55646,48.44083],[-124.75551,48.44083],[-124.75551,48.1915],[-124.81853,48.1915],[-124.81853,48.12284],[-124.7553,48.12284],[-124.7553,47.55353],[-124.38121,47.55353],[-124.38121,47.12187],[-124.19289,47.12187],[-124.19289,43.75694],[-124.44434,43.75694],[-124.44434,43.14256],[-124.63989,43.14256],[-124.63989,42.61945],[-124.44385,42.61945],[-124.44385,39.80807],[-123.88157,39.80807],[-123.88157,39.11028],[-123.75805,39.11028],[-123.75805,38.49688],[-123.27028,38.49688],[-123.27028,37.93319],[-122.81481,37.93319],[-122.81481,37.80196],[-122.56643,37.80196],[-122.56643,36.93196],[-121.8784,36.93196],[-121.8784,36.68976],[-122.00347,36.68976],[-122.00347,36.43411],[-121.94142,36.43411],[-121.94142,35.92976],[-121.5041,35.92976],[-121.5041,35.81003],[-121.37903,35.81003],[-121.37903,35.42392],[-120.94265,35.42392],[-120.94265,35.18497],[-120.8172,35.18497],[-120.8172,35.12199],[-120.69184,35.12199],[-120.69184,34.49668],[-120.50459,34.49668],[-120.50459,34.43397],[-120.00788,34.43397],[-120.00788,34.36826],[-119.52835,34.36826],[-119.52835,34.05764],[-119.0061,34.05764],[-119.0061,33.99753],[-118.50463,33.99753],[-118.50463,33.86946],[-118.44132,33.86946],[-118.44132,33.68653],[-118.06691,33.68653],[-118.06691,33.30638],[-117.503,33.30638],[-117.503,33.05003],[-117.31882,33.05003],[-117.31882,32.62059],[-117.1917,32.62059],[-117.1917,32.49746],[-116.7465,32.49746],[-116.7465,32.56092],[-115.99701,32.56092],[-115.99701,32.62649],[-114.88081,32.62649],[-114.88081,32.43408],[-114.62945,32.43408],[-114.62945,32.37316],[-114.44474,32.37316],[-114.44474,32.30754],[-114.25576,32.30754],[-114.25576,32.24446],[-114.06803,32.24446],[-114.06803,32.18291],[-113.81665,32.18291],[-113.81665,32.12076],[-113.63074,32.12076],[-113.63074,32.05651],[-113.44175,32.05651],[-113.44175,31.99844],[-113.2546,31.99844],[-113.2546,31.93254],[-113.06807,31.93254],[-113.06807,31.87181],[-112.81611,31.87181],[-112.81611,31.81042],[-112.63088,31.81042],[-112.63088,31.74647],[-112.44189,31.74647],[-112.44189,31.6856],[-112.25719,31.6856],[-112.25719,31.62104],[-112.00338,31.62104],[-112.00338,31.55958],[-111.81562,31.55958],[-111.81562,31.49702],[-111.62786,31.49702],[-111.62786,31.43399],[-111.4419,31.43399],[-111.4419,31.37339],[-111.25597,31.37339],[-111.25597,31.31132],[-108.18458,31.31132],[-108.18458,31.74595],[-106.50651,31.74595],[-106.50651,31.68423],[-106.37973,31.68423],[-106.37973,31.62175],[-106.31743,31.62175],[-106.31743,31.49682],[-106.25518,31.49682],[-106.25518,31.43449],[-106.19247,31.43449],[-106.19247,31.37213],[-106.00392,31.37213],[-106.00392,31.30933],[-105.94166,31.30933],[-105.94166,31.24575],[-105.87982,31.24575],[-105.87982,31.18362],[-105.81623,31.18362],[-105.81623,31.12072],[-105.69212,31.12072],[-105.69212,31.05848],[-105.63029,31.05848],[-105.63029,30.93283],[-105.50444,30.93283],[-105.50444,30.87159],[-105.4413,30.87159],[-105.4413,30.80846],[-105.37815,30.80846],[-105.37815,30.74718],[-105.19047,30.74718],[-105.19047,30.68432],[-105.12862,30.68432],[-105.12862,30.61997],[-105.00365,30.61997],[-105.00365,30.55891],[-104.9418,30.55891],[-104.9418,30.49632],[-104.8782,30.49632],[-104.8782,30.30983],[-104.81553,30.30983],[-104.81553,30.24783],[-104.75361,30.24783],[-104.75361,29.93539],[-104.69095,29.93539],[-104.69095,29.80902],[-104.62913,29.80902],[-104.62913,29.68436],[-104.56599,29.68436],[-104.56599,29.62235],[-104.50372,29.62235],[-104.50372,29.55954],[-104.44101,29.55954],[-104.44101,29.49748],[-104.25376,29.49748],[-104.25376,29.37167],[-104.1292,29.37167],[-104.1292,29.30916],[-104.06887,29.30916],[-104.06887,29.24673],[-103.81873,29.24673],[-103.81873,29.18431],[-103.75574,29.18431],[-103.75574,29.12232],[-103.56675,29.12232],[-103.56675,29.05981],[-103.50498,29.05981],[-103.50498,28.99675],[-103.31658,28.99675],[-103.31658,28.93469],[-103.05976,28.93469],[-103.05976,29.0593],[-102.99797,29.0593],[-102.99797,29.12129],[-102.93314,29.12129],[-102.93314,29.18486],[-102.8096,29.18486],[-102.8096,29.25262],[-102.87013,29.25262],[-102.87013,29.3081],[-102.80967,29.3081],[-102.80967,29.37155],[-102.74757,29.37155],[-102.74757,29.55819],[-102.68455,29.55819],[-102.68455,29.68477],[-102.49678,29.68477],[-102.49678,29.74577],[-102.30866,29.74577],[-102.30866,29.80866],[-102.19093,29.80866],[-102.19093,29.74601],[-101.50499,29.74601],[-101.50499,29.68468],[-101.38058,29.68468],[-101.38058,29.55945],[-101.31751,29.55945],[-101.31751,29.49589],[-101.19101,29.49589],[-101.19101,29.43261],[-101.0675,29.43261],[-101.0675,29.30881],[-100.94189,29.30881],[-100.94189,29.24562],[-100.81673,29.24562],[-100.81673,29.11904],[-100.75227,29.11904],[-100.75227,29.05782],[-100.69254,29.05782],[-100.69254,28.87204],[-100.62902,28.87204],[-100.62902,28.80954],[-100.56799,28.80954],[-100.56799,28.62255],[-100.50404,28.62255],[-100.50404,28.55838],[-100.44218,28.55838],[-100.44218,28.49683],[-100.37943,28.49683],[-100.37943,28.30929],[-100.31719,28.30929],[-100.31719,28.18357],[-100.25448,28.18357],[-100.25448,28.12139],[-100.12823,28.12139],[-100.12823,28.05921],[-100.06595,28.05921],[-100.06595,27.99661],[-100.00239,27.99661],[-100.00239,27.93322],[-99.94265,27.93322],[-99.94265,27.74547],[-99.81685,27.74547],[-99.81685,27.68343],[-99.75413,27.68343],[-99.75413,27.62215],[-99.62916,27.62215],[-99.62916,27.5589],[-99.56728,27.5589],[-99.56728,27.43538],[-99.50418,27.43538],[-99.50418,27.3774],[-99.56718,27.3774],[-99.56718,27.24637],[-99.50498,27.24637],[-99.50498,26.99656],[-99.44274,26.99656],[-99.44274,26.8728],[-99.38006,26.8728],[-99.38006,26.80682],[-99.31907,26.80682],[-99.31907,26.74736],[-99.25375,26.74736],[-99.25375,26.62101],[-99.19106,26.62101],[-99.19106,26.49567],[-99.13006,26.49567],[-99.13006,26.37138],[-99.00295,26.37138],[-99.00295,26.30938],[-98.81657,26.30938],[-98.81657,26.24578],[-98.69201,26.24578],[-98.69201,26.18371],[-98.44409,26.18371],[-98.44409,26.12172],[-98.38232,26.12172],[-98.38232,26.05965],[-98.25327,26.05965],[-98.25327,25.99869],[-98.01091,25.99869],[-98.01091,25.99323],[-97.69323,25.99323],[-97.69323,25.93341],[-97.63139,25.93341],[-97.63139,25.86959],[-97.50468,25.86959],[-97.50468,25.80735],[-97.30834,25.80735],[-97.30834,25.87312],[-97.24563,25.87312],[-97.24563,25.93537],[-97.11389,25.93537],[-97.11389,27.68092],[-97.0571,27.68092],[-97.0571,27.81082],[-95.58108,27.81082],[-95.58108,28.74688],[-94.27104,28.74688],[-94.27104,29.55941],[-92.50299,29.55941],[-92.50299,29.49748],[-91.87762,29.49748],[-91.87762,29.3727],[-91.37842,29.3727],[-91.37842,29.24683],[-91.3154,29.24683],[-91.3154,29.18443],[-91.12947,29.18443],[-91.12947,29.12326],[-91.00526,29.12326],[-91.00526,28.99684],[-89.45002,28.99684],[-89.45002,28.86774],[-88.81043,28.86774],[-88.81043,30.18419],[-85.87915,30.18419],[-85.87915,29.5455],[-84.83681,29.5455],[-84.83681,29.62252],[-84.74828,29.62252],[-84.74828,29.68362],[-84.68589,29.68362],[-84.68589,29.74684],[-83.6297,29.74684],[-83.6297,29.43244],[-83.31749,29.43244],[-83.31749,29.05794],[-82.87966,29.05794],[-82.87966,27.74535],[-82.81828,27.74535],[-82.81828,26.92909],[-82.37968,26.92909],[-82.37968,26.36942],[-81.87771,26.36942],[-81.87771,25.80597],[-81.50369,25.80597],[-81.50369,25.74748],[-81.44055,25.74748],[-81.44055,25.68515],[-81.31559,25.68515],[-81.31559,25.5601],[-81.25385,25.5601],[-81.25385,25.43424],[-81.1902,25.43424],[-81.1902,25.12343],[-81.12881,25.12343],[-81.12881,25.06194],[-81.06492,25.06194],[-81.06492,24.81578],[-81.62895,24.81578],[-81.62895,24.75384],[-81.69072,24.75384],[-81.69072,24.68994],[-81.81732,24.68994],[-81.81732,24.62792],[-82.191,24.62792],[-82.191,24.49629],[-81.62166,24.49629],[-81.62166,24.55948],[-81.37201,24.55948],[-81.37201,24.62207],[-81.05933,24.62207],[-81.05933,24.68483],[-80.93471,24.68483],[-80.93471,24.74748],[-80.74711,24.74748],[-80.74711,24.81006],[-80.36299,24.81006],[-80.36299,25.11759],[-80.12234,25.11759],[-80.12234,25.74724],[-80.05885,25.74724],[-80.05885,26.37083],[-79.99584,26.37083],[-79.99584,26.9398],[-80.05873,26.9398],[-80.05873,27.12775],[-80.12263,27.12775],[-80.12263,27.25343],[-80.1847,27.25343],[-80.1847,27.37812],[-80.24617,27.37812],[-80.24617,27.56587],[-80.30948,27.56587],[-80.30948,27.75303],[-80.37215,27.75303],[-80.37215,27.87745],[-80.43515,27.87745],[-80.43515,28.00334],[-80.49661,28.00334],[-80.49661,28.12773],[-80.55872,28.12773],[-80.55872,28.37235],[-80.49663,28.37235],[-80.49663,29.51603],[-81.12136,29.51603],[-81.12136,31.6847],[-80.60187,31.6847],[-80.60187,32.24753],[-79.4921,32.24753],[-79.4921,32.99703],[-79.11165,32.99703],[-79.11165,33.37295],[-78.61536,33.37295],[-78.61536,33.80976],[-77.9317,33.80976],[-77.9317,33.87182],[-77.86923,33.87182],[-77.86923,34.05525],[-77.68264,34.05525],[-77.68264,34.29746],[-77.24535,34.29746],[-77.24535,34.55986],[-76.49733,34.55986],[-76.49733,34.6228],[-76.43376,34.6228],[-76.43376,34.68493],[-76.37321,34.68493],[-76.37321,34.74677],[-76.30594,34.74677],[-76.30594,34.80855],[-76.2468,34.80855],[-76.2468,34.87284],[-76.18259,34.87284],[-76.18259,34.93353],[-76.12081,34.93353],[-76.12081,34.99524],[-75.9979,34.99524],[-75.9979,35.05782],[-75.87034,35.05782],[-75.87034,35.12191],[-75.74622,35.12191],[-75.74622,35.18189],[-75.49297,35.18189],[-75.49297,35.3083],[-75.43257,35.3083],[-75.43257,35.75425],[-75.49699,35.75425],[-75.49699,37.81056],[-75.3083,37.81056],[-75.3083,37.87201],[-75.2456,37.87201],[-75.2456,37.99548],[-75.18288,37.99548],[-75.18288,38.05851],[-75.11848,38.05851],[-75.11848,38.24691],[-75.05921,38.24691],[-75.05921,38.37043],[-74.99481,38.37043],[-74.99481,38.87184],[-74.48783,38.87184],[-74.48783,39.30894],[-74.17663,39.30894],[-74.17663,39.62247],[-74.0567,39.62247],[-74.0567,39.93318],[-73.9959,39.93318],[-73.9959,40.18549],[-73.93416,40.18549],[-73.93416,40.49595],[-73.8723,40.49595],[-73.8723,40.55271],[-71.80745,40.55271],[-71.80745,41.3088],[-70.88251,41.3088],[-70.88251,41.18498],[-70.74619,41.18498],[-70.74619,41.30919],[-70.43376,41.30919],[-70.43376,41.49639],[-69.93343,41.49639],[-69.93343,41.62308],[-69.86986,41.62308],[-69.86986,41.87769],[-69.93579,41.87769],[-69.93579,42.00323],[-69.99758,42.00323],[-69.99758,42.06502],[-70.06061,42.06502],[-70.06061,42.12943],[-70.55729,42.12943],[-70.55729,43.24871],[-70.49741,43.24871],[-70.49741,43.30922],[-70.37042,43.30922],[-70.37042,43.37196],[-70.30857,43.37196],[-70.30857,43.49699],[-70.18392,43.49699],[-70.18392,43.62235],[-70.05758,43.62235],[-70.05758,43.68502],[-69.74552,43.68502],[-69.74552,43.74766],[-69.24728,43.74766],[-69.24728,43.8107],[-69.05607,43.8107],[-69.05607,43.87172],[-68.99505,43.87172],[-68.99505,43.9982],[-68.49637,43.9982],[-68.49637,44.05974],[-68.3081,44.05974],[-68.3081,44.12214],[-68.18518,44.12214],[-68.18518,44.30814],[-67.9956,44.30814],[-67.9956,44.37275],[-67.8103,44.37275],[-67.8103,44.43518],[-67.49653,44.43518],[-67.49653,44.49688],[-67.37102,44.49688],[-67.37102,44.56006],[-67.18488,44.56006],[-67.18488,44.62133],[-67.12212,44.62133],[-67.12212,44.68679],[-67.05936,44.68679],[-67.05936,44.74737],[-66.93111,44.74737],[-66.93111,44.94066],[-66.99468,44.94066],[-66.99468,45.00245],[-67.05958,45.00245],[-67.05958,45.12734],[-67.1202,45.12734],[-67.1202,45.19101],[-67.24698,45.19101],[-67.24698,45.25344],[-67.31775,45.25344],[-67.31775,45.18984],[-67.37075,45.18984],[-67.37075,45.2534],[-67.43269,45.2534],[-67.43269,45.30834],[-67.37086,45.30834],[-67.37086,45.4397],[-67.43056,45.4397],[-67.43056,45.49501],[-67.37099,45.49501],[-67.37099,45.62645],[-67.6215,45.62645],[-67.6215,45.68961],[-67.68383,45.68961],[-67.68383,45.75326],[-67.74621,45.75326],[-67.74621,47.12682],[-67.87001,47.12682],[-67.87001,47.19003],[-67.93238,47.19003],[-67.93238,47.25397],[-67.99594,47.25397],[-67.99594,47.31497],[-68.12067,47.31497],[-68.12067,47.37808],[-68.44232,47.37808],[-68.44232,47.31661],[-68.63143,47.31661],[-68.63143,47.25447],[-68.9978,47.25447],[-68.9978,47.43989],[-69.06072,47.43989],[-69.06072,47.50476],[-69.25381,47.50476],[-69.25381,47.43981],[-69.31793,47.43981],[-69.31793,47.3786],[-69.44385,47.3786],[-69.44385,47.31563],[-69.50382,47.31563],[-69.50382,47.25258],[-69.56678,47.25258],[-69.56678,47.19109],[-69.63035,47.19109],[-69.63035,47.1287],[-69.69331,47.1287],[-69.69331,47.06543],[-69.75571,47.06543],[-69.75571,47.00428],[-69.81804,47.00428],[-69.81804,46.94153],[-69.8804,46.94153],[-69.8804,46.87925],[-69.94217,46.87925],[-69.94217,46.81774],[-70.00631,46.81774],[-70.00631,46.69203],[-70.07043,46.69203],[-70.07043,46.44259],[-70.19459,46.44259],[-70.19459,46.37859],[-70.2562,46.37859],[-70.2562,46.31526],[-70.32037,46.31526],[-70.32037,46.06512],[-70.3815,46.06512],[-70.3815,45.93552],[-70.32016,45.93552],[-70.32016,45.87948],[-70.44931,45.87948],[-70.44931,45.75387],[-70.507,45.75387],[-70.507,45.69169],[-70.63166,45.69169],[-70.63166,45.62916],[-70.75755,45.62916],[-70.75755,45.44147],[-70.88099,45.44147],[-70.88099,45.37806],[-71.13328,45.37806],[-71.13328,45.31515],[-71.38303,45.31515],[-71.38303,45.25342],[-71.50764,45.25342],[-71.50764,45.06557],[-73.94189,45.06557],[-73.94189,45.00312],[-74.74697,45.00312],[-74.74697,45.0649],[-74.8801,45.0649],[-74.8801,45.0029],[-75.06625,45.0029],[-75.06625,44.94152],[-75.25394,44.94152],[-75.25394,44.8776],[-75.37896,44.8776],[-75.37896,44.81535],[-75.44313,44.81535],[-75.44313,44.75361],[-75.56666,44.75361],[-75.56666,44.69099],[-75.62902,44.69099],[-75.62902,44.6285],[-75.75405,44.6285],[-75.75405,44.56638],[-75.81731,44.56638],[-75.81731,44.50289],[-75.87995,44.50289],[-75.87995,44.37849],[-76.13003,44.37849],[-76.13003,44.31592],[-76.1927,44.31592],[-76.1927,44.25344],[-76.31826,44.25344],[-76.31826,44.19167],[-76.3793,44.19167],[-76.3793,44.06537],[-76.44276,44.06537],[-76.44276,43.99638],[-76.31703,43.99638],[-76.31703,43.94146],[-76.50766,43.94146],[-76.50766,43.87233],[-76.383,43.87233],[-76.383,43.80919],[-76.25341,43.80919],[-76.25341,43.56652],[-76.50648,43.56652],[-76.50648,43.50339],[-76.63312,43.50339],[-76.63312,43.44323],[-76.69511,43.44323],[-76.69511,43.37869],[-76.81778,43.37869],[-76.81778,43.31807],[-77.682,43.31807],[-77.682,43.37894],[-78.05659,43.37894],[-78.05659,43.43969],[-78.43897,43.43969],[-78.43897,43.37944],[-78.88034,43.37944],[-78.88034,43.31497],[-79.12989,43.31497],[-79.12989,43.24293],[-79.06696,43.24293],[-79.06696,43.12999],[-79.12989,43.12999],[-79.12989,43.05773],[-79.07126,43.05773],[-79.07126,42.92949],[-78.94326,42.92949],[-78.94326,42.75422],[-79.06944,42.75422],[-79.06944,42.69416],[-79.13344,42.69416],[-79.13344,42.6297],[-79.19475,42.6297],[-79.19475,42.56635],[-79.37868,42.56635],[-79.37868,42.50334],[-79.4443,42.50334],[-79.4443,42.44106],[-79.56799,42.44106],[-79.56799,42.37753],[-79.69062,42.37753],[-79.69062,42.31711],[-79.81646,42.31711],[-79.81646,42.25345],[-80.00524,42.25345],[-80.00524,42.19092],[-80.19168,42.19092],[-80.19168,42.12726],[-80.3168,42.12726],[-80.3168,42.06699],[-80.50632,42.06699],[-80.50632,42.00343],[-80.69305,42.00343],[-80.69305,41.94151],[-80.94404,41.94151],[-80.94404,41.87812],[-81.19427,41.87812],[-81.19427,41.81665],[-81.31901,41.81665],[-81.31901,41.75455],[-81.44184,41.75455],[-81.44184,41.69096],[-81.50535,41.69096],[-81.50535,41.63016],[-82.74701,41.63016],[-82.74701,41.75369],[-82.88391,41.75369],[-82.88391,41.56561],[-82.99572,41.56561],[-82.99572,41.62704],[-83.12578,41.62704],[-83.12578,41.68784],[-83.24747,41.68784],[-83.24747,41.75369],[-83.37373,41.75369],[-83.37373,41.80928],[-83.3106,41.80928],[-83.3106,41.87161],[-83.24747,41.87161],[-83.24747,41.93614],[-83.18434,41.93614],[-83.18434,41.99609],[-83.12077,41.99609],[-83.12077,42.24648],[-83.05892,42.24648],[-83.05892,42.30896],[-82.86853,42.30896],[-82.86853,42.37177],[-82.80722,42.37177],[-82.80722,42.55855],[-82.75537,42.55855],[-82.75537,42.49549],[-82.5599,42.49549],[-82.5599,42.55855],[-82.49678,42.55855],[-82.49678,42.68336],[-82.43289,42.68336],[-82.43289,42.93422],[-82.37006,42.93422],[-82.37006,43.06481],[-82.43289,43.06481],[-82.43289,43.19176],[-82.49475,43.19176],[-82.49475,43.50346],[-82.55713,43.50346],[-82.55713,43.81609],[-82.61979,43.81609],[-82.61979,43.94221],[-82.68395,43.94221],[-82.68395,44.00226],[-82.74653,44.00226],[-82.74653,44.06705],[-82.87087,44.06705],[-82.87087,44.12919],[-83.00852,44.12919],[-83.00852,44.06648],[-83.13361,44.06648],[-83.13361,44.00539],[-83.24145,44.00539],[-83.24145,44.9962],[-83.18061,44.9962],[-83.18061,45.0673],[-83.24552,45.0673],[-83.24552,45.12874],[-83.30659,45.12874],[-83.30659,45.25515],[-83.37061,45.25515],[-83.37061,45.31659],[-83.43256,45.31659],[-83.43256,45.37921],[-83.61784,45.37921],[-83.61784,45.44197],[-83.80843,45.44197],[-83.80843,45.50362],[-84.05507,45.50362],[-84.05507,45.56479],[-84.12352,45.56479],[-84.12352,45.62878],[-84.18075,45.62878],[-84.18075,45.69147],[-84.31116,45.69147],[-84.31116,45.93371],[-83.821,45.93371],[-83.821,45.87251],[-83.49681,45.87251],[-83.49681,45.93371],[-83.43381,45.93371],[-83.43381,46.00169],[-83.49627,46.00169],[-83.49627,46.06682],[-83.56,46.06682],[-83.56,46.12616],[-83.99546,46.12616],[-83.99546,46.19317],[-84.05918,46.19317],[-84.05918,46.3815],[-84.11526,46.3815],[-84.11526,46.49536],[-84.05918,46.49536],[-84.05918,46.56827],[-84.25795,46.56827],[-84.25795,46.50512],[-84.30719,46.50512],[-84.30719,46.56827],[-84.44154,46.56827],[-84.44154,46.50453],[-84.99657,46.50453],[-84.99657,46.68429],[-84.92982,46.68429],[-84.92982,46.81808],[-85.31659,46.81808],[-85.31659,46.75358],[-87.55626,46.75358],[-87.55626,47.44074],[-87.68254,47.44074],[-87.68254,47.50356],[-88.25607,47.50356],[-88.25607,47.44337],[-88.44174,47.44337],[-88.44174,47.37899],[-88.50683,47.37899],[-88.50683,47.31539],[-88.63128,47.31539],[-88.63128,47.25398],[-88.75696,47.25398],[-88.75696,47.19347],[-88.88383,47.19347],[-88.88383,47.12847],[-88.94342,47.12847],[-88.94342,47.06621],[-89.07087,47.06621],[-89.07087,47.00268],[-89.25656,47.00268],[-89.25656,46.94108],[-90.36777,46.94108],[-90.36777,47.68448],[-90.307,47.68448],[-90.307,47.74602],[-89.99486,47.74602],[-89.99486,47.80827],[-89.80486,47.80827],[-89.80486,47.87006],[-89.67977,47.87006],[-89.67977,47.93396],[-89.49338,47.93396],[-89.49338,47.9958],[-89.42847,47.9958],[-89.42847,48.06564],[-89.99327,48.06564],[-89.99327,48.1283],[-90.74559,48.1283],[-90.74559,48.18931],[-90.80873,48.18931],[-90.80873,48.25221],[-91.06776,48.25221],[-91.06776,48.19167],[-91.19462,48.19167],[-91.19462,48.1279],[-91.68142,48.1279],[-91.68142,48.2526],[-91.93219,48.2526],[-91.93219,48.31425],[-91.99297,48.31425],[-91.99297,48.37808],[-92.31894,48.37808],[-92.31894,48.25291],[-92.37322,48.25291],[-92.37322,48.31534],[-92.43223,48.31534],[-92.43223,48.44114],[-92.49772,48.44114],[-92.49772,48.50178],[-92.56794,48.50178],[-92.56794,48.43958],[-92.62105,48.43958],[-92.62105,48.56508],[-92.80868,48.56508],[-92.80868,48.62869],[-92.80868,48.62674],[-92.93318,48.62674],[-92.93318,48.69221],[-93.00517,48.69221],[-93.00517,48.6283],[-93.12259,48.6283],[-93.12259,48.69221],[-93.31908,48.69221],[-93.31908,48.62674],[-93.50495,48.62674],[-93.50495,48.56352],[-93.74746,48.56352],[-93.74746,48.62674],[-93.81355,48.62674],[-93.81355,48.68988],[-94.24531,48.68988],[-94.24531,48.75543],[-94.61832,48.75543],[-94.61832,48.94104],[-94.6809,48.94104],[-94.6809,49.00297],[-94.74415,49.00297],[-94.74415,49.25361],[-94.80841,49.25361],[-94.80841,49.37841],[-95.11924,49.37841],[-95.11924,49.44253],[-95.19343,49.44253],[-95.19343,49.00353],[-96.87069,49.00353],[-96.87069,49.06561],[-99.00493,49.06561],[-99.00493,49.00507],[-109.36993,49.00507],[-109.36993,49.06682],[-109.50587,49.06682],[-109.50587,49.00507],[-114.183,49.00507],[-114.183,49.06873],[-114.75787,49.06873],[-114.75787,49.00507],[-115.43373,49.00507],[-115.43373,49.06714],[-116.50627,49.06714],[-116.50627,49.00507],[-117.30895,49.00507],[-117.30895,49.06598],[-119.88295,49.06598],[-119.88295,49.00507],[-120.12086,49.00507],[-120.12086,49.06784],[-121.44516,49.06784],[-121.44516,49.00507],[-121.93118,49.00507],[-121.93118,49.06561],[-122.81748,49.06561],[-122.81748,49.00291],[-122.87952,49.00291],[-122.87952,48.9347],[-122.81746,48.9347],[-122.81746,48.8102],[-122.75389,48.8102],[-122.75389,48.75338],[-122.87129,48.75338],[-122.87129,48.81539],[-123.00554,48.81539],[-123.00554,48.75295],[-123.12969,48.75295],[-123.12969,48.69022],[-123.18382,48.69022],[-123.18382,48.7529],[-123.25493,48.7529]],[[-122.93417,37.75215],[-122.93475,37.6842],[-123.0679,37.6849],[-123.06737,37.74753],[-123.12926,37.74785],[-123.12869,37.81569],[-123.05907,37.81532],[-123.05959,37.75281],[-122.93417,37.75215]],[[-71.62995,41.25409],[-71.49665,41.25414],[-71.49656,41.12297],[-71.62986,41.12291],[-71.62995,41.25409]],[[-70.31843,41.37752],[-70.31834,41.24482],[-70.19066,41.24487],[-70.19062,41.1886],[-69.9336,41.1887],[-69.93373,41.37919],[-69.99507,41.37917],[-69.99511,41.44316],[-70.07078,41.44313],[-70.0707,41.31449],[-70.24617,41.31443],[-70.24621,41.37755],[-70.31843,41.37752]],[[-68.94034,43.94041],[-68.68569,43.9405],[-68.68565,43.87218],[-68.74654,43.87216],[-68.7465,43.81025],[-68.80908,43.81023],[-68.80903,43.74673],[-68.87731,43.7467],[-68.87735,43.81178],[-68.94025,43.81176],[-68.94034,43.94041]],[[-123.12915,49.06451],[-122.99542,49.06451],[-122.99542,48.93432],[-123.12915,48.93432],[-123.12915,49.06451]],[[-82.94071,24.75359],[-82.87194,24.75359],[-82.87194,24.69057],[-82.74462,24.69057],[-82.74462,24.62146],[-82.8088,24.62146],[-82.8088,24.55949],[-82.94071,24.55949],[-82.94071,24.75359]]],description:"Public domain aerial imagery, mostly NAIP",icon:"https://osmlab.github.io/editor-layer-index/sources/north-america/us/USGSTopographicMaps.png"},{id:"USGS-Scanned_Topographic",name:"USGS Topographic Maps",type:"tms",template:"https://caltopo.s3.amazonaws.com/topo/{zoom}/{x}/{y}.png",zoomExtent:[0,16],polygon:[[[-55.99594,52.00107],[-112.02896,52.00107],[-112.03995,56.01308],[-120.00494,56.00592],[-120.01712,60.01202],[-132.00197,60.00239],[-132.01208,63.00193],[-133.96883,63.0005],[-133.9724,63.99225],[-141.04429,63.98726],[-141.06879,69.92046],[-156.24893,71.51583],[-160.44571,70.83527],[-167.08145,68.42906],[-164.08218,67.03914],[-169.01504,65.68269],[-166.57608,64.50778],[-161.82999,64.05006],[-165.08194,63.2603],[-168.02628,59.78623],[-162.53311,59.73089],[-162.35733,58.55905],[-157.83096,58.31753],[-158.00674,57.52404],[-168.22403,53.51022],[-166.55411,53.14277],[-158.77579,54.88541],[-158.6824,55.74964],[-156.55106,56.00848],[-156.15555,56.77466],[-154.70535,56.14337],[-152.07413,57.37035],[-151.62918,58.22653],[-152.00821,58.98056],[-145.9877,60.24741],[-140.38467,59.48634],[-136.53946,57.8061],[-133.79288,54.83483],[-133.33145,53.14277],[-131.46378,51.69838],[-128.52493,51.74602],[-129.79385,50.90159],[-124.56436,47.49786],[-124.03702,45.48627],[-124.6962,42.90428],[-124.49844,40.34146],[-122.80655,37.53929],[-119.99405,33.37085],[-117.24747,32.5412],[-111.13907,31.1977],[-106.70059,31.23529],[-103.20694,28.64618],[-101.84463,29.8158],[-99.20792,26.28744],[-96.79092,25.75432],[-96.92276,27.96911],[-93.47305,29.68226],[-88.94669,28.87732],[-88.6171,30.17736],[-86.2001,30.36713],[-84.96963,29.43379],[-84.09073,30.06333],[-82.97012,28.95426],[-82.97012,27.26824],[-81.25626,25.07956],[-82.09122,24.56105],[-80.06973,24.76073],[-79.85001,27.11188],[-81.27823,30.70777],[-78.99307,33.20554],[-75.03799,35.5983],[-75.85098,37.24252],[-73.74161,40.4586],[-69.89639,41.60224],[-70.68741,43.17629],[-66.93008,44.69516],[-66.53458,43.08007],[-64.20547,43.35229],[-59.50333,45.73221],[-59.51431,46.24762],[-60.0032,46.25901],[-59.99222,47.24506],[-59.00894,47.2376],[-58.99796,47.50267],[-56.51504,47.50267],[-56.52603,46.7477],[-53.99918,46.7477],[-53.9772,46.48358],[-52.49405,46.46354],[-52.50504,48.75361],[-52.99667,48.75451],[-53.01315,49.99551],[-55.00168,50.0061],[-55.03738,53.74721],[-56.00418,53.73421],[-55.99594,52.00107]],[[-59.50127,43.74954],[-60.5024,43.74954],[-60.5024,44],[-59.9984,44],[-59.9984,44.2494],[-59.50127,44.2494],[-59.50127,43.74954]],[[-155.95024,20.49523],[-157.32675,20.49153],[-157.32903,21.23181],[-155.95251,21.23549],[-155.95024,20.49523]],[[-157.64488,21.24845],[-158.28534,21.24674],[-158.2869,21.74996],[-157.64643,21.75167],[-157.64488,21.24845]],[[-156.12602,20.3247],[-154.74617,20.32841],[-154.74174,18.87578],[-156.1216,18.87203],[-156.12602,20.3247]],[[-159.29077,22.24504],[-159.2893,21.76857],[-160.28917,21.76591],[-160.29064,22.24239],[-159.29077,22.24504]]],terms_url:"https://caltopo.com",terms_text:"© Caltopo",icon:"https://osmlab.github.io/editor-layer-index/sources/north-america/us/USGSTopographicMaps.png"},{id:"USSR-Latvia",name:"USSR - Latvia",type:"wms",template:"http://www.gisnet.lv/cgi-bin/topo?FORMAT=image/jpeg&VERSION=1.1.1&service=WMS&REQUEST=GetMap&LAYERS=DTO,DTC,DIVDPTC,PD,VS,DS,PS,M&SRS={proj}&WIDTH={width}&height={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[26.63086,57.56889],[25.16968,58.04882],[22.54395,57.76866],[21.54419,57.53352],[21.01685,56.81892],[21.01685,56.03523],[22.03857,56.38958],[24.71924,56.33481],[26.75171,55.66519],[28.19092,56.13943],[27.78442,57.40946],[26.63086,57.56889]]]},{id:"sjcgis.org-General_Basemap_WM",name:"Vector Streetmap for San Juan County WA",type:"tms",template:"https://sjcgis.org/arcgis/rest/services/Basemaps/General_Basemap_WM/MapServer/tile/{zoom}/{y}/{x}",zoomExtent:[0,19],polygon:[[[-123.27402,48.69297],[-123.00773,48.76726],[-123.00762,48.83158],[-122.7835,48.75842],[-122.6934,48.65852],[-122.76745,48.60361],[-122.74484,48.38708],[-123.24822,48.28353],[-123.11452,48.42261],[-123.21904,48.54857],[-123.27402,48.69297]]],best:true,description:"Public domain street and address data from the San Juan County, WA. Updated at least quarterly."},{id:"vicosa_al",name:"Viçosa AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Vicosa&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.198,-9.42067],[-36.19777,-9.41789],[-36.1978,-9.41528],[-36.19801,-9.41074],[-36.19789,-9.40857],[-36.19793,-9.40637],[-36.19797,-9.40561],[-36.19793,-9.40405],[-36.19799,-9.40312],[-36.19827,-9.40028],[-36.19829,-9.39496],[-36.19789,-9.39169],[-36.19844,-9.38932],[-36.19837,-9.3862],[-36.19794,-9.38167],[-36.19801,-9.37972],[-36.19834,-9.37867],[-36.19832,-9.37698],[-36.19817,-9.37586],[-36.19852,-9.37139],[-36.19822,-9.36239],[-36.19862,-9.35319],[-36.19849,-9.35097],[-36.19857,-9.34852],[-36.1988,-9.34668],[-36.1986,-9.34349],[-36.19877,-9.34084],[-36.19895,-9.33301],[-36.19877,-9.33039],[-36.28958,-9.33114],[-36.28938,-9.33319],[-36.2895,-9.33538],[-36.28925,-9.34124],[-36.28945,-9.34291],[-36.28928,-9.34521],[-36.28897,-9.37311],[-36.28915,-9.37481],[-36.28892,-9.37708],[-36.2889,-9.38541],[-36.28872,-9.38633],[-36.28872,-9.39343],[-36.28887,-9.39558],[-36.28877,-9.40129],[-36.28862,-9.40652],[-36.28872,-9.40715],[-36.28877,-9.42133],[-36.198,-9.42067]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"wien.gv.at-labels",name:"Vienna: Beschriftungen (annotations)",type:"tms",template:"https://maps.wien.gv.at/wmts/beschriftung/normal/google3857/{zoom}/{y}/{x}.png",zoomExtent:[12,19],polygon:[[[16.54475,48.17286],[16.54103,48.17657],[16.54978,48.17675],[16.54665,48.17162],[16.55629,48.16171],[16.55567,48.16446],[16.56161,48.16037],[16.57306,48.16319],[16.57603,48.13522],[16.54301,48.14333],[16.51377,48.15893],[16.4777,48.15744],[16.45536,48.13951],[16.43313,48.13788],[16.43701,48.11994],[16.42291,48.12306],[16.4083,48.11791],[16.40511,48.12198],[16.3246,48.13779],[16.31181,48.11945],[16.29806,48.12896],[16.2711,48.13385],[16.23607,48.13001],[16.2189,48.12377],[16.2181,48.12807],[16.23861,48.13205],[16.23843,48.13716],[16.22081,48.13555],[16.20986,48.14762],[16.22321,48.15318],[16.19798,48.15454],[16.19619,48.16396],[16.18183,48.17112],[16.19981,48.18616],[16.20739,48.20235],[16.20194,48.20479],[16.20962,48.20963],[16.1976,48.21479],[16.19778,48.22288],[16.18517,48.2232],[16.19911,48.22858],[16.19251,48.23671],[16.20677,48.26483],[16.24105,48.24837],[16.24154,48.23832],[16.25662,48.23988],[16.27043,48.25193],[16.26406,48.25492],[16.28556,48.25832],[16.29412,48.26395],[16.28617,48.2667],[16.28901,48.27051],[16.32741,48.27721],[16.34813,48.29048],[16.35351,48.28369],[16.3706,48.2817],[16.36714,48.28685],[16.37787,48.28832],[16.37557,48.29592],[16.37982,48.30201],[16.38536,48.30146],[16.38043,48.31507],[16.39518,48.32257],[16.39412,48.31926],[16.40287,48.31676],[16.41682,48.32253],[16.43803,48.31628],[16.44041,48.29192],[16.47547,48.27501],[16.48123,48.27343],[16.4835,48.27971],[16.48132,48.29351],[16.49645,48.29249],[16.51491,48.28554],[16.5067,48.2736],[16.51285,48.26784],[16.53263,48.2621],[16.54697,48.263],[16.53941,48.24284],[16.55274,48.239],[16.53627,48.20044],[16.54184,48.18206],[16.53631,48.17755],[16.54475,48.17286]]],terms_url:"https://data.wien.gv.at",terms_text:"Stadt Wien",icon:"https://www.wien.gv.at/layout-a/logo/wappen-klein.gif",overlay:true},{id:"wien.gv.at-gp",name:"Vienna: Mehrzweckkarte (general purpose)",type:"tms",template:"https://maps.wien.gv.at/wmts/fmzk/pastell/google3857/{zoom}/{y}/{x}.jpeg",zoomExtent:[10,19],polygon:[[[16.54475,48.17286],[16.54103,48.17657],[16.54978,48.17675],[16.54665,48.17162],[16.55629,48.16171],[16.55567,48.16446],[16.56161,48.16037],[16.57306,48.16319],[16.57603,48.13522],[16.54301,48.14333],[16.51377,48.15893],[16.4777,48.15744],[16.45536,48.13951],[16.43313,48.13788],[16.43701,48.11994],[16.42291,48.12306],[16.4083,48.11791],[16.40511,48.12198],[16.3246,48.13779],[16.31181,48.11945],[16.29806,48.12896],[16.2711,48.13385],[16.23607,48.13001],[16.2189,48.12377],[16.2181,48.12807],[16.23861,48.13205],[16.23843,48.13716],[16.22081,48.13555],[16.20986,48.14762],[16.22321,48.15318],[16.19798,48.15454],[16.19619,48.16396],[16.18183,48.17112],[16.19981,48.18616],[16.20739,48.20235],[16.20194,48.20479],[16.20962,48.20963],[16.1976,48.21479],[16.19778,48.22288],[16.18517,48.2232],[16.19911,48.22858],[16.19251,48.23671],[16.20677,48.26483],[16.24105,48.24837],[16.24154,48.23832],[16.25662,48.23988],[16.27043,48.25193],[16.26406,48.25492],[16.28556,48.25832],[16.29412,48.26395],[16.28617,48.2667],[16.28901,48.27051],[16.32741,48.27721],[16.34813,48.29048],[16.35351,48.28369],[16.3706,48.2817],[16.36714,48.28685],[16.37787,48.28832],[16.37557,48.29592],[16.37982,48.30201],[16.38536,48.30146],[16.38043,48.31507],[16.39518,48.32257],[16.39412,48.31926],[16.40287,48.31676],[16.41682,48.32253],[16.43803,48.31628],[16.44041,48.29192],[16.47547,48.27501],[16.48123,48.27343],[16.4835,48.27971],[16.48132,48.29351],[16.49645,48.29249],[16.51491,48.28554],[16.5067,48.2736],[16.51285,48.26784],[16.53263,48.2621],[16.54697,48.263],[16.53941,48.24284],[16.55274,48.239],[16.53627,48.20044],[16.54184,48.18206],[16.53631,48.17755],[16.54475,48.17286]]],terms_url:"https://data.wien.gv.at",terms_text:"Stadt Wien",icon:"https://www.wien.gv.at/layout-a/logo/wappen-klein.gif"},{id:"wien.gv.at-aerial_image",name:"Vienna: Orthofoto (aerial image)",type:"tms",template:"https://maps.wien.gv.at/wmts/lb/farbe/google3857/{zoom}/{y}/{x}.jpeg",zoomExtent:[10,19],polygon:[[[16.14995,48.10832],[16.14989,48.33315],[16.61873,48.33296],[16.61749,48.10813],[16.46644,48.10819],[16.46644,48.10744],[16.18104,48.10756],[16.18104,48.10831],[16.14995,48.10832]]],terms_url:"https://data.wien.gv.at",terms_text:"Stadt Wien",icon:"https://www.wien.gv.at/layout-a/logo/wappen-klein.gif"},{id:"Ville_de_Nyon-HD-2010",name:"Ville de Nyon - Orthophoto 2010 HD 5cm/pi",type:"tms",template:"http://osmdata.asitvd.ch/tiles/nyon2010/{zoom}/{x}/{y}.png",endDate:"2010-01-01T00:00:00.000Z",startDate:"2010-01-01T00:00:00.000Z",zoomExtent:[14,20],polygon:[[[6.24859,46.38252],[6.24848,46.38715],[6.24378,46.38944],[6.24182,46.39109],[6.2414,46.39159],[6.23919,46.39222],[6.23973,46.39373],[6.2379,46.3946],[6.23713,46.39698],[6.23071,46.40107],[6.22789,46.39903],[6.22326,46.40219],[6.22066,46.40189],[6.21582,46.40462],[6.21393,46.40698],[6.20989,46.40563],[6.20928,46.40528],[6.20985,46.40434],[6.20501,46.40332],[6.20527,46.40104],[6.20906,46.40131],[6.20951,46.4013],[6.2149,46.4008],[6.21154,46.39808],[6.21057,46.3968],[6.20954,46.39449],[6.21229,46.39243],[6.21374,46.39168],[6.21639,46.39079],[6.21296,46.38736],[6.21532,46.38514],[6.21403,46.38424],[6.2126,46.38232],[6.21211,46.38102],[6.21212,46.37992],[6.21231,46.37901],[6.21318,46.37697],[6.21454,46.37494],[6.21359,46.37463],[6.21365,46.37276],[6.22133,46.3699],[6.22752,46.36555],[6.22752,46.36541],[6.23738,46.37356],[6.24404,46.37842],[6.24859,46.38252]]],terms_url:"http://www.nyon.ch/fr/officiel/services-offices/informatique-et-population-776-3911",terms_text:"Ville de Nyon"},{id:"VGIN-BuildingFootprints_WM",name:"Virginia Building Footprints",type:"tms",template:"http://tileify-ags.herokuapp.com/tiles/{zoom}/{x}/{y}?url=https%3A%2F%2Fgismaps.vita.virginia.gov%2Farcgis%2Frest%2Fservices%2FVA_Base_layers%2FVA_Building_Footprints%2FMapServer&transparent=true&layers=show%3A20",endDate:"2018-06-01T00:00:00.000Z",startDate:"2015-05-01T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[-83.64853,36.6023],[-79.9118,36.55819],[-75.90179,36.56701],[-75.8606,36.985],[-75.19867,38.0178],[-76.15448,37.99183],[-76.25336,37.92253],[-76.62689,38.1648],[-76.90704,38.22524],[-77.05536,38.42132],[-77.19818,38.37396],[-77.28333,38.3675],[-77.31628,38.45789],[-77.25586,38.58253],[-77.15698,38.61043],[-77.11853,38.68337],[-77.0636,38.69409],[-77.05811,38.82259],[-77.07458,38.88462],[-77.20367,38.99357],[-77.3822,39.07038],[-77.47833,39.09809],[-77.53876,39.16627],[-77.4646,39.23651],[-77.59918,39.30455],[-77.74475,39.33005],[-77.84637,39.14284],[-78.36273,39.45528],[-78.3847,39.36616],[-78.36548,39.32792],[-78.4671,39.19182],[-78.60168,39.03199],[-78.69232,38.94659],[-78.89282,38.76479],[-78.99719,38.8504],[-79.13727,38.68551],[-79.31854,38.42993],[-79.5108,38.46004],[-79.56299,38.54817],[-79.65637,38.58253],[-79.71954,38.50519],[-79.70856,38.44068],[-79.94476,38.16911],[-80.00519,38.0243],[-80.21942,37.83148],[-80.32379,37.67513],[-80.22766,37.62511],[-80.36224,37.56417],[-80.32928,37.52498],[-80.49408,37.42907],[-80.53253,37.48794],[-80.78522,37.37889],[-80.86487,37.43561],[-80.9198,37.39635],[-80.88135,37.36143],[-81.02692,37.28935],[-81.26038,37.25219],[-81.37024,37.34396],[-81.47736,37.26312],[-81.55426,37.22595],[-81.71906,37.20189],[-81.98273,37.42689],[-81.96899,37.55329],[-82.40845,37.26531],[-82.74078,37.13186],[-82.73529,37.05299],[-82.90283,36.985],[-82.87811,36.90818],[-83.02643,36.85765],[-83.07587,36.85765],[-83.16101,36.74989],[-83.44666,36.69265],[-83.61145,36.64418],[-83.63892,36.63592],[-83.69385,36.61222],[-83.70003,36.6023],[-83.64853,36.6023]]],terms_url:"https://vgin.maps.arcgis.com/home/item.html?id=bcd049dfcdc342a7a08ec81644eeb339",terms_text:"Virginia Geographic Information Network (VGIN)",description:"Virginia Building Footprint Map Service",overlay:true},{id:"VGIN-Imagery_WM",name:"Virginia Imagery Service - Most Recent",type:"tms",template:"http://tileify-ags.herokuapp.com/tiles/{zoom}/{x}/{y}?url=https%3A%2F%2Fgismaps.vita.virginia.gov%2Farcgis%2Frest%2Fservices%2FMostRecentImagery%2FMostRecentImagery_WGS%2FMapServer&transparent=true&layers=show%3A0",endDate:"2018-08-01T00:00:00.000Z",startDate:"2013-04-01T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[-83.64853,36.6023],[-79.9118,36.55819],[-75.90179,36.56701],[-75.8606,36.985],[-75.19867,38.0178],[-76.15448,37.99183],[-76.25336,37.92253],[-76.62689,38.1648],[-76.90704,38.22524],[-77.05536,38.42132],[-77.19818,38.37396],[-77.28333,38.3675],[-77.31628,38.45789],[-77.25586,38.58253],[-77.15698,38.61043],[-77.11853,38.68337],[-77.0636,38.69409],[-77.05811,38.82259],[-77.07458,38.88462],[-77.20367,38.99357],[-77.3822,39.07038],[-77.47833,39.09809],[-77.53876,39.16627],[-77.4646,39.23651],[-77.59918,39.30455],[-77.74475,39.33005],[-77.84637,39.14284],[-78.36273,39.45528],[-78.3847,39.36616],[-78.36548,39.32792],[-78.4671,39.19182],[-78.60168,39.03199],[-78.69232,38.94659],[-78.89282,38.76479],[-78.99719,38.8504],[-79.13727,38.68551],[-79.31854,38.42993],[-79.5108,38.46004],[-79.56299,38.54817],[-79.65637,38.58253],[-79.71954,38.50519],[-79.70856,38.44068],[-79.94476,38.16911],[-80.00519,38.0243],[-80.21942,37.83148],[-80.32379,37.67513],[-80.22766,37.62511],[-80.36224,37.56417],[-80.32928,37.52498],[-80.49408,37.42907],[-80.53253,37.48794],[-80.78522,37.37889],[-80.86487,37.43561],[-80.9198,37.39635],[-80.88135,37.36143],[-81.02692,37.28935],[-81.26038,37.25219],[-81.37024,37.34396],[-81.47736,37.26312],[-81.55426,37.22595],[-81.71906,37.20189],[-81.98273,37.42689],[-81.96899,37.55329],[-82.40845,37.26531],[-82.74078,37.13186],[-82.73529,37.05299],[-82.90283,36.985],[-82.87811,36.90818],[-83.02643,36.85765],[-83.07587,36.85765],[-83.16101,36.74989],[-83.44666,36.69265],[-83.61145,36.64418],[-83.63892,36.63592],[-83.69385,36.61222],[-83.70003,36.6023],[-83.64853,36.6023]]],terms_url:"https://vgin.maps.arcgis.com/home/item.html?id=36386a7e7dae4032a33cb0b83a1711f1",terms_text:"Virginia Geographic Information Network (VGIN)",description:"The most recently available VBMP orthoimagery for all of Virginia."},{id:"VGIN-PropertyLines_WM",name:"Virginia Property Lines",type:"tms",template:"http://tileify-ags.herokuapp.com/tiles/{zoom}/{x}/{y}?url=http%3A%2F%2Fgismaps.vita.virginia.gov%2Farcgis%2Frest%2Fservices%2FVA_Base_layers%2FVA_Parcels%2FMapServer&transparent=true",endDate:"2018-06-01T00:00:00.000Z",startDate:"2015-05-01T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[-83.64853,36.6023],[-79.9118,36.55819],[-75.90179,36.56701],[-75.8606,36.985],[-75.19867,38.0178],[-76.15448,37.99183],[-76.25336,37.92253],[-76.62689,38.1648],[-76.90704,38.22524],[-77.05536,38.42132],[-77.19818,38.37396],[-77.28333,38.3675],[-77.31628,38.45789],[-77.25586,38.58253],[-77.15698,38.61043],[-77.11853,38.68337],[-77.0636,38.69409],[-77.05811,38.82259],[-77.07458,38.88462],[-77.20367,38.99357],[-77.3822,39.07038],[-77.47833,39.09809],[-77.53876,39.16627],[-77.4646,39.23651],[-77.59918,39.30455],[-77.74475,39.33005],[-77.84637,39.14284],[-78.36273,39.45528],[-78.3847,39.36616],[-78.36548,39.32792],[-78.4671,39.19182],[-78.60168,39.03199],[-78.69232,38.94659],[-78.89282,38.76479],[-78.99719,38.8504],[-79.13727,38.68551],[-79.31854,38.42993],[-79.5108,38.46004],[-79.56299,38.54817],[-79.65637,38.58253],[-79.71954,38.50519],[-79.70856,38.44068],[-79.94476,38.16911],[-80.00519,38.0243],[-80.21942,37.83148],[-80.32379,37.67513],[-80.22766,37.62511],[-80.36224,37.56417],[-80.32928,37.52498],[-80.49408,37.42907],[-80.53253,37.48794],[-80.78522,37.37889],[-80.86487,37.43561],[-80.9198,37.39635],[-80.88135,37.36143],[-81.02692,37.28935],[-81.26038,37.25219],[-81.37024,37.34396],[-81.47736,37.26312],[-81.55426,37.22595],[-81.71906,37.20189],[-81.98273,37.42689],[-81.96899,37.55329],[-82.40845,37.26531],[-82.74078,37.13186],[-82.73529,37.05299],[-82.90283,36.985],[-82.87811,36.90818],[-83.02643,36.85765],[-83.07587,36.85765],[-83.16101,36.74989],[-83.44666,36.69265],[-83.61145,36.64418],[-83.63892,36.63592],[-83.69385,36.61222],[-83.70003,36.6023],[-83.64853,36.6023]]],terms_url:"https://vgin.maps.arcgis.com/home/item.html?id=f1dccaf1f42e40cbba791feae2e23690",terms_text:"Virginia Geographic Information Network (VGIN)",description:"A statewide Parcel service showing property ownership outlines where available",overlay:true},{id:"vogis.cnv.at-DGM",name:"VoGIS: DGM (Terrain model)",type:"wms",template:"http://vogis.cnv.at/mapserver/mapserv?map=i_hoehen_und_gelaende_r_wms.map&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=schummerung_50cm_terrain&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[9.96805,47.54631],[9.96809,47.54627],[9.97125,47.54425],[9.96484,47.53803],[9.9684,47.52802],[9.96526,47.52089],[9.99569,47.50278],[9.98736,47.49847],[10.00076,47.48211],[10.02301,47.48411],[10.03743,47.48918],[10.04477,47.48762],[10.05413,47.47589],[10.05347,47.46686],[10.06468,47.46364],[10.06999,47.45595],[10.08057,47.45536],[10.08857,47.46029],[10.09164,47.45893],[10.09385,47.44046],[10.10559,47.42872],[10.09374,47.41688],[10.07418,47.41472],[10.06914,47.41018],[10.08624,47.39952],[10.08284,47.39381],[10.09984,47.35476],[10.11934,47.37561],[10.14169,47.36718],[10.16587,47.36887],[10.16958,47.3713],[10.1694,47.38583],[10.1813,47.38725],[10.18185,47.39243],[10.19508,47.38935],[10.19988,47.38334],[10.21259,47.38039],[10.22705,47.38889],[10.23619,47.38192],[10.23168,47.37897],[10.23716,47.37357],[10.21699,47.35436],[10.2171,47.34988],[10.20424,47.33675],[10.20742,47.33232],[10.19951,47.32646],[10.21113,47.31898],[10.21597,47.31106],[10.21236,47.31122],[10.19913,47.29754],[10.18964,47.29394],[10.17961,47.29603],[10.17208,47.27908],[10.17404,47.27025],[10.17834,47.27011],[10.17449,47.2637],[10.21884,47.25533],[10.22343,47.24983],[10.21087,47.2478],[10.19776,47.23666],[10.20791,47.2328],[10.21428,47.21684],[10.21269,47.20432],[10.19963,47.19539],[10.19951,47.18525],[10.21151,47.17124],[10.2092,47.16537],[10.20851,47.15948],[10.21321,47.1577],[10.2222,47.15323],[10.22166,47.14925],[10.21481,47.14352],[10.20333,47.14215],[10.20887,47.13164],[10.18629,47.12886],[10.18652,47.11946],[10.17288,47.12033],[10.16299,47.11361],[10.15766,47.11426],[10.15442,47.10578],[10.13243,47.08122],[10.13459,47.06392],[10.15085,47.06184],[10.15693,47.04883],[10.14418,47.03355],[10.12326,47.02209],[10.13284,47.01204],[10.15447,47.00545],[10.15961,46.99882],[10.15442,46.99299],[10.16001,46.984],[10.14463,46.98301],[10.13492,46.96584],[10.13501,46.95483],[10.12684,46.9435],[10.09772,46.92676],[10.09954,46.91712],[10.10921,46.90834],[10.10908,46.89431],[10.12497,46.88014],[10.14147,46.87468],[10.13967,46.86217],[10.14506,46.8511],[10.13941,46.84738],[10.12309,46.84848],[10.11912,46.84417],[10.10518,46.8409],[10.09195,46.85143],[10.09265,46.85818],[10.08712,46.86128],[10.05488,46.8617],[10.0509,46.86442],[10.05192,46.87405],[10.03891,46.88611],[10.03221,46.88802],[10.01782,46.90161],[10.00494,46.89889],[9.98243,46.9062],[9.97793,46.91603],[9.96657,46.91222],[9.95907,46.91602],[9.94612,46.91235],[9.93758,46.91324],[9.92153,46.91882],[9.91231,46.92606],[9.90632,46.9253],[9.89449,46.93164],[9.87613,46.93463],[9.88071,46.94011],[9.87657,46.94071],[9.87488,46.95039],[9.87872,46.95707],[9.87073,46.96321],[9.88482,46.98546],[9.8923,46.99036],[9.88878,47.00072],[9.8707,47.00965],[9.87115,47.01306],[9.88035,47.01722],[9.87779,47.02055],[9.85974,47.02321],[9.85273,47.01641],[9.83612,47.01253],[9.82353,47.01986],[9.80756,47.02356],[9.78491,47.03849],[9.74808,47.03692],[9.74185,47.04268],[9.71821,47.04337],[9.70701,47.04805],[9.7076,47.05381],[9.69756,47.05239],[9.68392,47.05765],[9.68184,47.0621],[9.67743,47.06141],[9.65821,47.05818],[9.64506,47.05978],[9.64158,47.05598],[9.63654,47.0517],[9.62633,47.05133],[9.60705,47.06077],[9.6134,47.0695],[9.61153,47.0794],[9.61869,47.07817],[9.62339,47.08258],[9.63346,47.08344],[9.63564,47.09553],[9.62858,47.10756],[9.62083,47.11032],[9.63503,47.12813],[9.62467,47.13265],[9.62258,47.14135],[9.62587,47.1459],[9.62059,47.15164],[9.6089,47.14775],[9.59679,47.16294],[9.57946,47.17116],[9.56456,47.17029],[9.57302,47.1756],[9.57259,47.19079],[9.58032,47.19578],[9.58477,47.20532],[9.5687,47.21968],[9.55851,47.22416],[9.55176,47.22377],[9.56679,47.24288],[9.53073,47.27058],[9.54619,47.28005],[9.55634,47.29829],[9.58805,47.3173],[9.59966,47.3455],[9.61073,47.35571],[9.62446,47.36615],[9.65876,47.36946],[9.67255,47.38021],[9.67311,47.39194],[9.65162,47.40463],[9.64551,47.4312],[9.64512,47.4378],[9.65799,47.44779],[9.65898,47.4522],[9.62234,47.45747],[9.60904,47.47054],[9.60292,47.46198],[9.59514,47.46331],[9.58217,47.48276],[9.5622,47.49592],[9.55057,47.53718],[9.5827,47.53592],[9.60465,47.52952],[9.73478,47.53396],[9.73517,47.54661],[9.74164,47.55499],[9.7471,47.55569],[9.74337,47.55867],[9.75207,47.56747],[9.74806,47.57052],[9.75632,47.57262],[9.75633,47.57963],[9.76197,47.58096],[9.76553,47.58912],[9.76933,47.58739],[9.77697,47.59544],[9.79151,47.59352],[9.79999,47.59611],[9.81414,47.58807],[9.82381,47.5871],[9.82728,47.57997],[9.82079,47.57076],[9.82562,47.55922],[9.8171,47.55333],[9.81579,47.54767],[9.85023,47.54164],[9.85839,47.53388],[9.87451,47.52854],[9.87804,47.53876],[9.87515,47.54343],[9.88125,47.54814],[9.8891,47.54399],[9.89935,47.54475],[9.90666,47.54217],[9.91358,47.53255],[9.92189,47.52964],[9.93352,47.53265],[9.94108,47.53822],[9.9637,47.53472],[9.95883,47.54313],[9.96318,47.54229],[9.96805,47.54631]]],terms_url:"https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm",terms_text:"Datenquelle: Land Vorarlberg – data.vorarlberg.gv.at",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/at/VoGISFlchenwidmungsplan.png"},{id:"vogis.cnv.at-DOM",name:"VoGIS: DOM (Surface model)",type:"wms",template:"http://vogis.cnv.at/mapserver/mapserv?map=i_hoehen_und_gelaende_r_wms.map&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=schummerung_50cm_surface&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[9.96805,47.54631],[9.96809,47.54627],[9.97125,47.54425],[9.96484,47.53803],[9.9684,47.52802],[9.96526,47.52089],[9.99569,47.50278],[9.98736,47.49847],[10.00076,47.48211],[10.02301,47.48411],[10.03743,47.48918],[10.04477,47.48762],[10.05413,47.47589],[10.05347,47.46686],[10.06468,47.46364],[10.06999,47.45595],[10.08057,47.45536],[10.08857,47.46029],[10.09164,47.45893],[10.09385,47.44046],[10.10559,47.42872],[10.09374,47.41688],[10.07418,47.41472],[10.06914,47.41018],[10.08624,47.39952],[10.08284,47.39381],[10.09984,47.35476],[10.11934,47.37561],[10.14169,47.36718],[10.16587,47.36887],[10.16958,47.3713],[10.1694,47.38583],[10.1813,47.38725],[10.18185,47.39243],[10.19508,47.38935],[10.19988,47.38334],[10.21259,47.38039],[10.22705,47.38889],[10.23619,47.38192],[10.23168,47.37897],[10.23716,47.37357],[10.21699,47.35436],[10.2171,47.34988],[10.20424,47.33675],[10.20742,47.33232],[10.19951,47.32646],[10.21113,47.31898],[10.21597,47.31106],[10.21236,47.31122],[10.19913,47.29754],[10.18964,47.29394],[10.17961,47.29603],[10.17208,47.27908],[10.17404,47.27025],[10.17834,47.27011],[10.17449,47.2637],[10.21884,47.25533],[10.22343,47.24983],[10.21087,47.2478],[10.19776,47.23666],[10.20791,47.2328],[10.21428,47.21684],[10.21269,47.20432],[10.19963,47.19539],[10.19951,47.18525],[10.21151,47.17124],[10.2092,47.16537],[10.20851,47.15948],[10.21321,47.1577],[10.2222,47.15323],[10.22166,47.14925],[10.21481,47.14352],[10.20333,47.14215],[10.20887,47.13164],[10.18629,47.12886],[10.18652,47.11946],[10.17288,47.12033],[10.16299,47.11361],[10.15766,47.11426],[10.15442,47.10578],[10.13243,47.08122],[10.13459,47.06392],[10.15085,47.06184],[10.15693,47.04883],[10.14418,47.03355],[10.12326,47.02209],[10.13284,47.01204],[10.15447,47.00545],[10.15961,46.99882],[10.15442,46.99299],[10.16001,46.984],[10.14463,46.98301],[10.13492,46.96584],[10.13501,46.95483],[10.12684,46.9435],[10.09772,46.92676],[10.09954,46.91712],[10.10921,46.90834],[10.10908,46.89431],[10.12497,46.88014],[10.14147,46.87468],[10.13967,46.86217],[10.14506,46.8511],[10.13941,46.84738],[10.12309,46.84848],[10.11912,46.84417],[10.10518,46.8409],[10.09195,46.85143],[10.09265,46.85818],[10.08712,46.86128],[10.05488,46.8617],[10.0509,46.86442],[10.05192,46.87405],[10.03891,46.88611],[10.03221,46.88802],[10.01782,46.90161],[10.00494,46.89889],[9.98243,46.9062],[9.97793,46.91603],[9.96657,46.91222],[9.95907,46.91602],[9.94612,46.91235],[9.93758,46.91324],[9.92153,46.91882],[9.91231,46.92606],[9.90632,46.9253],[9.89449,46.93164],[9.87613,46.93463],[9.88071,46.94011],[9.87657,46.94071],[9.87488,46.95039],[9.87872,46.95707],[9.87073,46.96321],[9.88482,46.98546],[9.8923,46.99036],[9.88878,47.00072],[9.8707,47.00965],[9.87115,47.01306],[9.88035,47.01722],[9.87779,47.02055],[9.85974,47.02321],[9.85273,47.01641],[9.83612,47.01253],[9.82353,47.01986],[9.80756,47.02356],[9.78491,47.03849],[9.74808,47.03692],[9.74185,47.04268],[9.71821,47.04337],[9.70701,47.04805],[9.7076,47.05381],[9.69756,47.05239],[9.68392,47.05765],[9.68184,47.0621],[9.67743,47.06141],[9.65821,47.05818],[9.64506,47.05978],[9.64158,47.05598],[9.63654,47.0517],[9.62633,47.05133],[9.60705,47.06077],[9.6134,47.0695],[9.61153,47.0794],[9.61869,47.07817],[9.62339,47.08258],[9.63346,47.08344],[9.63564,47.09553],[9.62858,47.10756],[9.62083,47.11032],[9.63503,47.12813],[9.62467,47.13265],[9.62258,47.14135],[9.62587,47.1459],[9.62059,47.15164],[9.6089,47.14775],[9.59679,47.16294],[9.57946,47.17116],[9.56456,47.17029],[9.57302,47.1756],[9.57259,47.19079],[9.58032,47.19578],[9.58477,47.20532],[9.5687,47.21968],[9.55851,47.22416],[9.55176,47.22377],[9.56679,47.24288],[9.53073,47.27058],[9.54619,47.28005],[9.55634,47.29829],[9.58805,47.3173],[9.59966,47.3455],[9.61073,47.35571],[9.62446,47.36615],[9.65876,47.36946],[9.67255,47.38021],[9.67311,47.39194],[9.65162,47.40463],[9.64551,47.4312],[9.64512,47.4378],[9.65799,47.44779],[9.65898,47.4522],[9.62234,47.45747],[9.60904,47.47054],[9.60292,47.46198],[9.59514,47.46331],[9.58217,47.48276],[9.5622,47.49592],[9.55057,47.53718],[9.5827,47.53592],[9.60465,47.52952],[9.73478,47.53396],[9.73517,47.54661],[9.74164,47.55499],[9.7471,47.55569],[9.74337,47.55867],[9.75207,47.56747],[9.74806,47.57052],[9.75632,47.57262],[9.75633,47.57963],[9.76197,47.58096],[9.76553,47.58912],[9.76933,47.58739],[9.77697,47.59544],[9.79151,47.59352],[9.79999,47.59611],[9.81414,47.58807],[9.82381,47.5871],[9.82728,47.57997],[9.82079,47.57076],[9.82562,47.55922],[9.8171,47.55333],[9.81579,47.54767],[9.85023,47.54164],[9.85839,47.53388],[9.87451,47.52854],[9.87804,47.53876],[9.87515,47.54343],[9.88125,47.54814],[9.8891,47.54399],[9.89935,47.54475],[9.90666,47.54217],[9.91358,47.53255],[9.92189,47.52964],[9.93352,47.53265],[9.94108,47.53822],[9.9637,47.53472],[9.95883,47.54313],[9.96318,47.54229],[9.96805,47.54631]]],terms_url:"https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm",terms_text:"Datenquelle: Land Vorarlberg – data.vorarlberg.gv.at",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/at/VoGISFlchenwidmungsplan.png"},{id:"vogis.cnv.at-ef2012_12cm",name:"VoGIS: Echtfarbenbild 2012 (12cm)",type:"wms",template:"http://vogis.cnv.at/mapserver/mapserv?map=i_luftbilder_r_wms.map&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ef2012_12cm&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",polygon:[[[9.54367,47.48479],[9.61451,47.45058],[9.61359,47.38272],[9.44246,47.24798],[9.44614,47.096],[9.42866,47.08911],[9.42498,47.01513],[9.85281,47.00196],[9.85741,46.89896],[9.9669,46.88952],[10.04511,46.8499],[10.15828,46.83353],[10.1592,46.89204],[10.14718,46.89248],[10.15115,46.94331],[10.16317,46.94287],[10.1647,46.96238],[10.17852,46.96681],[10.17576,47.10351],[10.22912,47.10226],[10.22084,47.24361],[10.26133,47.41261],[10.12423,47.40576],[10.09387,47.47795],[10.00462,47.50717],[9.98622,47.56121],[9.84361,47.56245],[9.84085,47.60714],[9.53999,47.60652],[9.54367,47.48479]]],terms_url:"https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm",terms_text:"Datenquelle: Land Vorarlberg – data.vorarlberg.gv.at",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/at/VoGISFlchenwidmungsplan.png"},{id:"vogis.cnv.at-ef2015_10cm",name:"VoGIS: Echtfarbenbild 2015 (10cm)",type:"wms",template:"http://vogis.cnv.at/mapserver/mapserv?map=i_luftbilder_r_wms.map&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ef2015_10cm&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",polygon:[[[9.54367,47.48479],[9.61451,47.45058],[9.61359,47.38272],[9.44246,47.24798],[9.44614,47.096],[9.42866,47.08911],[9.42498,47.01513],[9.85281,47.00196],[9.85741,46.89896],[9.9669,46.88952],[10.04511,46.8499],[10.15828,46.83353],[10.1592,46.89204],[10.14718,46.89248],[10.15115,46.94331],[10.16317,46.94287],[10.1647,46.96238],[10.17852,46.96681],[10.17576,47.10351],[10.22912,47.10226],[10.22084,47.24361],[10.26133,47.41261],[10.12423,47.40576],[10.09387,47.47795],[10.00462,47.50717],[9.98622,47.56121],[9.84361,47.56245],[9.84085,47.60714],[9.53999,47.60652],[9.54367,47.48479]]],terms_url:"https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm",terms_text:"Datenquelle: Land Vorarlberg – data.vorarlberg.gv.at",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/at/VoGISFlchenwidmungsplan.png"},{id:"vogis.cnv.at-wi2015_20cm",name:"VoGIS: Echtfarbenbild Winter 2015 (20cm)",type:"wms",template:"http://vogis.cnv.at/mapserver/mapserv?map=i_luftbilder_r_wms.map&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=wi2015_20cm&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",polygon:[[[10.17039,46.82979],[10.17108,46.93644],[10.18413,46.94113],[10.1855,47.10157],[10.23906,47.10437],[10.24283,47.15611],[10.25691,47.18704],[10.24558,47.27597],[10.25313,47.32347],[10.26893,47.32626],[10.26446,47.41102],[10.13194,47.4087],[10.13434,47.46107],[10.11752,47.46153],[10.11889,47.47337],[10.08731,47.47429],[10.08491,47.50724],[10.06843,47.507],[10.0674,47.5215],[10.02345,47.52428],[10.00079,47.57943],[9.84904,47.57757],[9.85042,47.61462],[9.72751,47.61277],[9.7203,47.59089],[9.70347,47.58915],[9.70313,47.54491],[9.68219,47.54491],[9.68047,47.55348],[9.56391,47.54931],[9.56202,47.53958],[9.55172,47.53958],[9.55172,47.53402],[9.52168,47.53471],[9.52701,47.30497],[9.50503,47.30264],[9.50091,47.23368],[9.52357,47.23228],[9.52426,47.16557],[9.54486,47.16405],[9.54383,47.15448],[9.57232,47.15401],[9.57026,47.12809],[9.59018,47.12867],[9.59189,47.10029],[9.57232,47.10017],[9.57713,47.02861],[9.72407,47.03048],[9.72304,47.01749],[9.77454,47.01562],[9.77626,47.00555],[9.79274,47.00391],[9.7948,46.99127],[9.83874,46.99314],[9.84012,46.90349],[9.89024,46.90725],[9.88543,46.88707],[9.95925,46.89141],[9.962,46.87675],[10.0001,46.87862],[9.99667,46.85715],[10.01864,46.85656],[10.02345,46.83073],[10.17039,46.82979]]],terms_url:"https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm",terms_text:"Datenquelle: Land Vorarlberg – data.vorarlberg.gv.at",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/at/VoGISFlchenwidmungsplan.png"},{id:"wroclaw-orto2015",name:"Wrocław: Orthophotomap 2015 (aerial image)",type:"wms",template:"http://gis1.um.wroc.pl/arcgis/services/ogc/OGC_ortofoto_2015/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[0,23],polygon:[[[17.14217,51.12846],[17.15659,51.1499],[17.15933,51.16056],[17.15899,51.17886],[17.14371,51.18155],[17.13024,51.18128],[17.12466,51.17396],[17.11436,51.17746],[17.0778,51.17746],[17.07642,51.1766],[17.07548,51.16825],[17.06698,51.16745],[17.04698,51.17493],[17.03376,51.17729],[17.02741,51.17729],[17.02733,51.18246],[17.02252,51.18816],[17.01299,51.18816],[17.0093,51.18499],[17.00312,51.18504],[17.00261,51.20016],[16.99162,51.20559],[16.97008,51.20763],[16.96424,51.20989],[16.95394,51.20968],[16.94656,51.20586],[16.9233,51.2001],[16.90811,51.21043],[16.89927,51.21027],[16.89292,51.2071],[16.88322,51.2071],[16.88073,51.20489],[16.88047,51.19666],[16.88322,51.19048],[16.87403,51.18719],[16.87026,51.18203],[16.85455,51.18031],[16.8421,51.18488],[16.82434,51.18467],[16.82056,51.17875],[16.82099,51.16373],[16.82502,51.15647],[16.80915,51.15194],[16.80657,51.14613],[16.80648,51.1366],[16.80769,51.13595],[16.81687,51.13601],[16.8161,51.13337],[16.81636,51.12459],[16.82932,51.12329],[16.83266,51.11834],[16.82923,51.11386],[16.82923,51.10993],[16.83215,51.10869],[16.84949,51.10826],[16.85661,51.09899],[16.87901,51.09252],[16.88862,51.09258],[16.89197,51.09667],[16.92107,51.09662],[16.9209,51.09263],[16.91661,51.0812],[16.91686,51.07942],[16.93514,51.07948],[16.93849,51.0736],[16.95248,51.06686],[16.95068,51.05806],[16.95454,51.05369],[16.96188,51.0473],[16.96879,51.04568],[16.98072,51.04584],[16.98424,51.05197],[16.99969,51.04668],[17.00776,51.04422],[17.01973,51.04169],[17.03286,51.0419],[17.03415,51.04673],[17.04509,51.04339],[17.06363,51.04339],[17.07037,51.05286],[17.08363,51.04428],[17.095,51.04368],[17.10633,51.04376],[17.10835,51.04684],[17.10822,51.05377],[17.10226,51.05868],[17.11136,51.0716],[17.12341,51.07179],[17.12299,51.07856],[17.15088,51.07861],[17.17277,51.09344],[17.17277,51.09956],[17.17697,51.10303],[17.17676,51.1092],[17.16363,51.1203],[17.14217,51.12846]]],terms_text:"Urząd Miasta Wrocław",icon:"https://i.imgur.com/PRqROXB.png"},{id:"Zabrze-2011",name:"Zabrze: Orthophotomap 2011 (aerial image)",type:"wms",template:"http://siot.um.zabrze.pl/arcgis/services/UMZ_Ortofoto_2011/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2011-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",zoomExtent:[0,23],polygon:[[[18.74396,50.2753],[18.75586,50.27523],[18.75578,50.27633],[18.74516,50.28105],[18.74609,50.28886],[18.75084,50.28948],[18.74832,50.2957],[18.73379,50.29618],[18.73208,50.31571],[18.73613,50.31646],[18.73882,50.32763],[18.73725,50.33016],[18.73121,50.33169],[18.73054,50.3344],[18.73422,50.3371],[18.73428,50.34097],[18.73866,50.34308],[18.75419,50.34182],[18.75982,50.34624],[18.75438,50.34744],[18.75119,50.34979],[18.74603,50.36876],[18.75705,50.3692],[18.7639,50.36754],[18.77263,50.37628],[18.78436,50.37077],[18.78713,50.37295],[18.79821,50.37048],[18.80466,50.37561],[18.80165,50.37718],[18.80164,50.38222],[18.80509,50.38317],[18.81527,50.38167],[18.81446,50.37515],[18.82183,50.36883],[18.81737,50.36802],[18.82104,50.35843],[18.8159,50.35336],[18.81687,50.35076],[18.82294,50.35156],[18.83281,50.34962],[18.83474,50.3443],[18.84615,50.34448],[18.86293,50.32852],[18.8607,50.32776],[18.85088,50.33191],[18.84578,50.32923],[18.84891,50.32352],[18.83179,50.32028],[18.83192,50.30483],[18.84451,50.30286],[18.84429,50.29627],[18.82282,50.28615],[18.82845,50.28482],[18.82745,50.27972],[18.82322,50.27994],[18.8214,50.27414],[18.81392,50.27309],[18.79981,50.27351],[18.7987,50.2613],[18.7923,50.24641],[18.78261,50.24583],[18.76416,50.25145],[18.75396,50.25669],[18.75004,50.26402],[18.73991,50.26738],[18.73421,50.27084],[18.74396,50.2753]]],terms_text:"Urząd Miasta Zabrza"}];
24698 var presets = {aerialway:{fields:["name","aerialway"],moreFields:["layer"],geometry:["point","vertex","line"],tags:{aerialway:"*"},searchable:false,name:"Aerialway"},aeroway:{icon:"maki-airport",fields:["aeroway"],geometry:["point","vertex","line","area"],tags:{aeroway:"*"},searchable:false,name:"Aeroway"},amenity:{fields:["amenity"],geometry:["point","vertex","line","area"],tags:{amenity:"*"},searchable:false,name:"Amenity"},attraction:{icon:"maki-star",fields:["name","attraction","operator","opening_hours"],moreFields:["opening_hours","fee","payment_multi","address","website","phone","email","fax"],geometry:["point","vertex","line","area"],tags:{attraction:"*"},searchable:false,name:"Attraction"},boundary:{fields:["boundary"],geometry:["line"],tags:{boundary:"*"},searchable:false,name:"Boundary"},building_point:{icon:"maki-home",fields:["{building}"],moreFields:["{building}"],geometry:["point"],tags:{building:"*"},matchScore:0.6,searchable:false,terms:[],name:"Building"},embankment:{geometry:["line"],tags:{embankment:"yes"},name:"Embankment",matchScore:0.2,searchable:false},emergency:{fields:["emergency_combo"],geometry:["point","vertex","area"],tags:{emergency:"*"},searchable:false,name:"Emergency Feature"},highway:{fields:["name","highway"],geometry:["point","vertex","line","area"],tags:{highway:"*"},searchable:false,name:"Highway"},indoor:{fields:["level","indoor_type"],geometry:["point","vertex","line","area"],tags:{indoor:"*"},matchScore:0.8,searchable:false,name:"Indoor Feature"},landuse:{fields:["name","landuse"],geometry:["area"],tags:{landuse:"*"},matchScore:0.9,searchable:false,name:"Land Use"},leisure:{icon:"maki-pitch",fields:["name","leisure"],geometry:["point","vertex","line","area"],tags:{leisure:"*"},searchable:false,name:"Leisure"},man_made:{icon:"temaki-storage_tank",fields:["name","man_made"],moreFields:["material"],geometry:["point","vertex","line","area"],tags:{man_made:"*"},matchScore:0.95,searchable:false,name:"Man Made"},natural:{icon:"maki-natural",fields:["name","natural"],geometry:["point","vertex","line","area"],tags:{natural:"*"},searchable:false,name:"Natural"},place:{fields:["name","place"],geometry:["point","vertex","area"],tags:{place:"*"},searchable:false,name:"Place"},playground:{icon:"maki-playground",fields:["playground"],geometry:["point","vertex","line","area"],tags:{playground:"*"},searchable:false,name:"Playground Equipment"},power:{geometry:["point","vertex","line","area"],tags:{power:"*"},fields:["power"],moreFields:["material"],searchable:false,name:"Power"},railway:{fields:["railway"],geometry:["point","vertex","line","area"],tags:{railway:"*"},searchable:false,name:"Railway"},seamark:{icon:"maki-harbor",fields:["seamark/type"],geometry:["point","vertex","line","area"],tags:{"seamark:type":"*"},searchable:false,name:"Seamark"},tourism:{icon:"maki-attraction",fields:["name","tourism"],geometry:["point","vertex","line","area"],tags:{tourism:"*"},searchable:false,name:"Tourism"},waterway:{fields:["name","waterway"],geometry:["point","vertex","line","area"],tags:{waterway:"*"},searchable:false,name:"Waterway"},address:{fields:["address"],geometry:["point","vertex","area"],tags:{"addr:*":"*"},addTags:{},removeTags:{},reference:{key:"addr"},name:"Address",matchScore:0.15},"advertising/billboard":{fields:["direction","lit"],geometry:["point","vertex","line"],tags:{advertising:"billboard"},name:"Billboard"},"advertising/column":{icon:"temaki-storage_tank",fields:["lit"],geometry:["point","area"],tags:{advertising:"column"},name:"Advertising Column"},"aerialway/station":{icon:"maki-aerialway",geometry:["point","vertex","area"],fields:["aerialway/access","aerialway/summer/access","elevation","building_area"],tags:{aerialway:"station"},matchScore:0.95,name:"Aerialway Station",searchable:false,replacement:"public_transport/station_aerialway"},"aerialway/cable_car":{icon:"fas-tram",geometry:["line"],terms:["tramway","ropeway"],fields:["name","aerialway/occupancy","aerialway/capacity","aerialway/duration","aerialway/heating"],tags:{aerialway:"cable_car"},name:"Cable Car"},"aerialway/chair_lift":{icon:"temaki-chairlift",geometry:["line"],fields:["name","oneway_yes","aerialway/occupancy","aerialway/capacity","aerialway/duration","aerialway/bubble","aerialway/heating"],tags:{aerialway:"chair_lift"},name:"Chair Lift"},"aerialway/drag_lift":{geometry:["line"],fields:["name","aerialway/capacity","aerialway/duration"],tags:{aerialway:"drag_lift"},name:"Drag Lift"},"aerialway/gondola":{icon:"maki-aerialway",geometry:["line"],fields:["name","oneway","aerialway/occupancy","aerialway/capacity","aerialway/duration","aerialway/bubble","aerialway/heating"],tags:{aerialway:"gondola"},name:"Gondola"},"aerialway/goods":{geometry:["line"],fields:["name","aerialway/capacity","aerialway/duration"],tags:{aerialway:"goods"},name:"Goods Aerialway"},"aerialway/j-bar":{geometry:["line"],fields:["name","aerialway/capacity","aerialway/duration"],terms:["jbar"],tags:{aerialway:"j-bar"},name:"J-bar Lift"},"aerialway/magic_carpet":{geometry:["line"],fields:["name","aerialway/capacity","aerialway/duration","aerialway/heating"],tags:{aerialway:"magic_carpet"},name:"Magic Carpet Lift"},"aerialway/mixed_lift":{geometry:["line"],fields:["name","oneway_yes","aerialway/occupancy","aerialway/capacity","aerialway/duration","aerialway/bubble","aerialway/heating"],tags:{aerialway:"mixed_lift"},name:"Mixed Lift"},"aerialway/platter":{geometry:["line"],terms:["button lift","poma lift"],fields:["name","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:["name","oneway_yes","aerialway/capacity","aerialway/duration"],tags:{aerialway:"rope_tow"},name:"Rope Tow Lift"},"aerialway/t-bar":{geometry:["line"],fields:["name","aerialway/capacity","aerialway/duration"],terms:["tbar"],tags:{aerialway:"t-bar"},name:"T-bar Lift"},"aerialway/zip_line":{geometry:["line"],fields:["name","oneway_yes","aerialway/duration","maxweight","access_simple"],terms:["aerial runway","canopy","flying fox","foefie slide","gravity propelled aerial ropeslide","Tyrolean traverse","zip wire","zip-line","zipline","zipwire"],tags:{aerialway:"zip_line"},name:"Zip Line"},"aeroway/aerodrome":{icon:"maki-airport",geometry:["point","area"],fields:["name","iata","icao","operator","internet_access","internet_access/fee","internet_access/ssid"],terms:["aerodrome","aeroway","airplane","airport","jet","plane"],tags:{aeroway:"aerodrome"},matchScore:0.9,name:"Airport"},"aeroway/apron":{icon:"maki-airport",geometry:["area"],terms:["ramp"],fields:["ref","surface"],tags:{aeroway:"apron"},name:"Apron"},"aeroway/gate":{icon:"maki-airport",geometry:["point"],fields:["ref_aeroway_gate"],tags:{aeroway:"gate"},name:"Airport Gate"},"aeroway/hangar":{icon:"fas-warehouse",geometry:["area"],fields:["name","building_area"],tags:{aeroway:"hangar"},addTags:{building:"hangar",aeroway:"hangar"},name:"Hangar"},"aeroway/helipad":{icon:"maki-heliport",geometry:["point","area"],fields:["ref"],terms:["helicopter","helipad","heliport"],tags:{aeroway:"helipad"},name:"Helipad"},"aeroway/jet_bridge":{icon:"temaki-pedestrian",geometry:["line"],fields:["ref_aeroway_gate","width","access_simple","wheelchair"],moreFields:["manufacturer"],terms:["aerobridge","air jetty","airbridge","finger","gangway","jet way","jetway","passenger boarding bridge","PBB","portal","skybridge","terminal gate connector"],tags:{aeroway:"jet_bridge"},addTags:{aeroway:"jet_bridge",highway:"corridor"},matchScore:1.05,name:"Jet Bridge"},"aeroway/runway":{icon:"fas-plane-departure",geometry:["line","area"],terms:["landing strip"],fields:["ref_runway","surface","length","width"],tags:{aeroway:"runway"},name:"Runway"},"aeroway/taxiway":{icon:"fas-plane",geometry:["line"],fields:["ref_taxiway","surface"],tags:{aeroway:"taxiway"},name:"Taxiway"},"aeroway/terminal":{icon:"maki-airport",geometry:["point","area"],terms:["airport","aerodrome"],fields:["name","operator","building_area"],moreFields:["wheelchair","smoking"],tags:{aeroway:"terminal"},name:"Airport Terminal"},"aeroway/windsock":{icon:"fas-wind",geometry:["point","vertex"],fields:["ref","lit","height"],moreFields:["manufacturer"],tags:{aeroway:"windsock"},name:"Windsock"},"allotments/plot":{geometry:["area"],fields:["name","ref"],tags:{allotments:"plot"},reference:{key:"allotments",value:"plot"},name:"Community Garden Plot"},"amenity/bus_station":{icon:"maki-bus",fields:["name","building_area","operator","internet_access","internet_access/fee","internet_access/ssid"],geometry:["point","area"],tags:{amenity:"bus_station"},name:"Bus Station / Terminal",searchable:false,replacement:"public_transport/station_bus"},"amenity/coworking_space":{icon:"maki-commercial",fields:["name","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid"],geometry:["point","area"],tags:{amenity:"coworking_space"},name:"Coworking Space",searchable:false},"amenity/embassy":{icon:"maki-embassy",fields:["name","country","address","building_area"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"embassy"},searchable:false,name:"Embassy"},"amenity/ferry_terminal":{icon:"maki-ferry",fields:["name","network","operator","address","building_area"],geometry:["point","vertex","area"],terms:[],tags:{amenity:"ferry_terminal"},matchScore:0.95,name:"Ferry Station / Terminal",searchable:false,replacement:"public_transport/station_ferry"},"amenity/nursing_home":{icon:"maki-wheelchair",fields:["name","operator","address","building_area","social_facility","social_facility_for","opening_hours","wheelchair"],geometry:["point","area"],tags:{amenity:"nursing_home"},reference:{key:"social_facility",value:"nursing_home"},name:"Nursing Home",searchable:false},"amenity/recycling":{icon:"maki-recycling",fields:["recycling_type","recycling_accepts","collection_times"],geometry:["point","area"],terms:["bin","can","bottle","glass","garbage","rubbish","scrap","trash"],tags:{amenity:"recycling"},name:"Recycling",searchable:false},"amenity/register_office":{icon:"maki-town-hall",fields:["name","address","building_area","opening_hours","operator"],geometry:["point","area"],tags:{amenity:"register_office"},reference:{key:"government",value:"register_office"},name:"Register Office",searchable:false},"amenity/scrapyard":{icon:"maki-car",fields:["name","operator","address","opening_hours"],geometry:["point","area"],tags:{amenity:"scrapyard"},reference:{key:"industrial",value:"scrap_yard"},name:"Scrap Yard",searchable:false},"amenity/swimming_pool":{icon:"fas-swimmer",geometry:["point","vertex","area"],tags:{amenity:"swimming_pool"},reference:{key:"leisure",value:"swimming_pool"},name:"Swimming Pool",searchable:false},"amenity/animal_boarding":{icon:"maki-veterinary",fields:["name","operator","address","building_area","opening_hours","animal_boarding"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["boarding","cat","cattery","dog","horse","kennel","kitten","pet","pet boarding","pet care","pet hotel","puppy","reptile"],tags:{amenity:"animal_boarding"},name:"Animal Boarding Facility"},"amenity/animal_breeding":{icon:"maki-veterinary",fields:["name","operator","address","building_area","opening_hours","animal_breeding"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["breeding","bull","cat","cow","dog","horse","husbandry","kitten","livestock","pet breeding","puppy","reptile"],tags:{amenity:"animal_breeding"},name:"Animal Breeding Facility"},"amenity/animal_shelter":{icon:"maki-veterinary",fields:["name","operator","address","building_area","opening_hours","animal_shelter"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["adoption","aspca","cat","dog","horse","kitten","pet care","pet rescue","puppy","raptor","reptile","rescue","spca"],tags:{amenity:"animal_shelter"},name:"Animal Shelter"},"amenity/arts_centre":{icon:"maki-theatre",fields:["name","address","building_area","opening_hours","website"],moreFields:["email","fax","fee","internet_access","internet_access/fee","internet_access/ssid","payment_multi","phone","website","wheelchair"],geometry:["point","area"],terms:[],tags:{amenity:"arts_centre"},name:"Arts Center"},"amenity/atm":{icon:"maki-bank",fields:["operator","network","cash_in","currency_multi","drive_through"],moreFields:["brand","covered","indoor","lit","name","opening_hours","wheelchair"],geometry:["point","vertex"],terms:["money","cash","machine"],tags:{amenity:"atm"},name:"ATM"},"amenity/bank":{icon:"maki-bank",fields:["name","operator","address","building_area","atm","drive_through"],moreFields:["air_conditioning","currency_multi","email","fax","internet_access","internet_access/fee","internet_access/ssid","opening_hours","phone","website","wheelchair"],geometry:["point","area"],terms:["credit union","check","deposit","fund","investment","repository","reserve","safe","savings","stock","treasury","trust","vault"],tags:{amenity:"bank"},name:"Bank"},"amenity/bar":{icon:"maki-bar",fields:["name","address","building_area","outdoor_seating","brewery"],moreFields:["air_conditioning","email","fax","internet_access","internet_access/fee","internet_access/ssid","microbrewery","opening_hours","payment_multi","phone","smoking","website","wheelchair"],geometry:["point","area"],terms:["dive","beer","bier","booze"],tags:{amenity:"bar"},name:"Bar"},"amenity/bar/lgbtq":{icon:"maki-bar",geometry:["point","area"],terms:["gay bar","lesbian bar","lgbtq bar","lgbt bar","lgb bar"],tags:{amenity:"bar",lgbtq:"primary"},name:"LGBTQ+ Bar"},"amenity/bbq":{icon:"maki-bbq",fields:["covered","fuel","access_simple"],moreFields:["lit"],geometry:["point"],terms:["bbq","grill"],tags:{amenity:"bbq"},name:"Barbecue/Grill"},"amenity/bench":{icon:"temaki-bench",fields:["backrest","material","seats","colour"],moreFields:["access_simple","inscription","lit"],geometry:["point","vertex","line"],terms:["seat"],tags:{amenity:"bench"},name:"Bench"},"amenity/bicycle_parking":{icon:"maki-bicycle",fields:["bicycle_parking","capacity","operator","covered","access_simple","fee","payment_multi_fee"],moreFields:["lit"],geometry:["point","vertex","area"],terms:["bike"],tags:{amenity:"bicycle_parking"},name:"Bicycle Parking"},"amenity/bicycle_parking/building":{icon:"maki-bicycle",fields:["{amenity/bicycle_parking}","opening_hours","building_area"],geometry:["point","vertex","area"],tags:{amenity:"bicycle_parking",bicycle_parking:"building"},reference:{key:"bicycle_parking"},terms:["Multi-Storey Bicycle Park","Multi-Storey Bike Park","Bike Parking Station"],name:"Bicycle Parking Garage"},"amenity/bicycle_parking/lockers":{icon:"maki-bicycle",geometry:["point","vertex","area"],tags:{amenity:"bicycle_parking",bicycle_parking:"lockers"},reference:{key:"bicycle_parking"},terms:["Bike Lockers"],name:"Bicycle Lockers"},"amenity/bicycle_parking/shed":{icon:"maki-bicycle",fields:["{amenity/bicycle_parking}","building_area"],geometry:["point","vertex","area"],tags:{amenity:"bicycle_parking",bicycle_parking:"shed"},reference:{key:"bicycle_parking"},terms:["Bike Shed"],name:"Bicycle Shed"},"amenity/bicycle_rental":{icon:"maki-bicycle",fields:["capacity","network","operator","fee","payment_multi_fee"],moreFields:["opening_hours","address","website","phone","email","fax","wheelchair","covered"],geometry:["point","vertex","area"],terms:["bike"],tags:{amenity:"bicycle_rental"},name:"Bicycle Rental"},"amenity/bicycle_repair_station":{icon:"maki-bicycle",fields:["operator","brand","opening_hours","fee","service/bicycle"],moreFields:["payment_multi_fee","covered"],geometry:["point","vertex"],terms:["bike","repair","chain","pump"],tags:{amenity:"bicycle_repair_station"},name:"Bicycle Repair Tool Stand"},"amenity/biergarten":{icon:"fas-beer",fields:["name","address","building","outdoor_seating","brewery"],moreFields:["{amenity/bar}"],geometry:["point","area"],tags:{amenity:"biergarten"},terms:["beer","bier","booze"],name:"Biergarten"},"amenity/boat_rental":{icon:"temaki-boating",fields:["name","operator","fee","payment_multi_fee"],moreFields:["address","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"boat_rental"},name:"Boat Rental"},"amenity/bureau_de_change":{icon:"maki-bank",fields:["name","operator","payment_multi","currency_multi","address","building_area"],moreFields:["opening_hours","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["bureau de change","money changer"],tags:{amenity:"bureau_de_change"},name:"Currency Exchange"},"amenity/cafe":{icon:"maki-cafe",fields:["name","cuisine","address","building_area","outdoor_seating","internet_access","internet_access/fee"],moreFields:["air_conditioning","bar","capacity","delivery","diet_multi","email","fax","internet_access/ssid","opening_hours","payment_multi","phone","reservation","smoking","takeaway","website","wheelchair"],geometry:["point","area"],terms:["bistro","coffee","tea"],tags:{amenity:"cafe"},name:"Cafe"},"amenity/car_pooling":{icon:"maki-car",fields:["name","operator","capacity","address","opening_hours","lit"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"car_pooling"},name:"Car Pooling"},"amenity/car_rental":{icon:"maki-car-rental",fields:["name","operator","address","opening_hours","payment_multi"],moreFields:["brand","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"car_rental"},name:"Car Rental"},"amenity/car_sharing":{icon:"maki-car",fields:["name","operator","capacity","address","payment_multi","supervised"],moreFields:["lit","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"car_sharing"},name:"Car Sharing"},"amenity/car_wash":{icon:"temaki-car_wash",fields:["name","operator","address","building_area","opening_hours","payment_multi","self_service"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"car_wash"},name:"Car Wash"},"amenity/casino":{icon:"maki-casino",fields:["name","operator","address","building_area","opening_hours","smoking"],moreFields:["air_conditioning","email","fax","internet_access","internet_access/fee","internet_access/ssid","payment_multi","phone","website","wheelchair"],geometry:["point","area"],terms:["gambling","roulette","craps","poker","blackjack"],tags:{amenity:"casino"},name:"Casino"},"amenity/charging_station":{icon:"fas-charging-station",fields:["name","operator","capacity","fee","payment_multi_fee"],geometry:["point"],tags:{amenity:"charging_station"},terms:["EV","Electric Vehicle","Supercharger"],name:"Charging Station"},"amenity/childcare":{icon:"fas-child",fields:["name","operator","address","building_area","opening_hours"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["daycare","orphanage","playgroup"],tags:{amenity:"childcare"},name:"Nursery/Childcare"},"amenity/cinema":{icon:"maki-cinema",fields:["name","address","screen","building_area","opening_hours","payment_multi"],moreFields:["air_conditioning","email","fax","phone","website","wheelchair"],geometry:["point","area"],terms:["drive-in","film","flick","movie","theater","picture","show","screen"],tags:{amenity:"cinema"},name:"Cinema"},"amenity/clinic":{icon:"maki-doctor",fields:["name","operator","healthcare/speciality","address","building_area","opening_hours"],moreFields:["air_conditioning","payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["medical","urgentcare"],tags:{amenity:"clinic"},addTags:{amenity:"clinic",healthcare:"clinic"},reference:{key:"amenity",value:"clinic"},name:"Clinic"},"amenity/clinic/abortion":{icon:"maki-hospital",fields:["name","operator","healthcare/speciality","address","building_area","opening_hours"],geometry:["point","area"],terms:[],tags:{amenity:"clinic",healthcare:"clinic","healthcare:speciality":"abortion"},reference:{key:"amenity",value:"clinic"},name:"Abortion Clinic"},"amenity/clinic/fertility":{icon:"maki-hospital",fields:["name","operator","healthcare/speciality","address","building_area","opening_hours"],geometry:["point","area"],terms:["egg","fertility","reproductive","sperm","ovulation"],tags:{amenity:"clinic",healthcare:"clinic","healthcare:speciality":"fertility"},reference:{key:"amenity",value:"clinic"},name:"Fertility Clinic"},"amenity/clock":{icon:"temaki-clock",fields:["name","support","display","visibility","date","faces"],moreFields:["indoor","lit"],geometry:["point","vertex"],tags:{amenity:"clock"},name:"Clock"},"amenity/clock/sundial":{icon:"temaki-clock",fields:["name","support","visibility","inscription"],moreFields:[],geometry:["point","vertex"],terms:["gnomon","shadow"],tags:{amenity:"clock",display:"sundial"},reference:{key:"display",value:"sundial"},name:"Sundial"},"amenity/college":{icon:"maki-college",fields:["name","operator","address","website","internet_access","internet_access/fee"],moreFields:["religion","denomination","internet_access/ssid","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["university","undergraduate school"],tags:{amenity:"college"},name:"College Grounds"},"amenity/community_centre":{icon:"maki-town-hall",fields:["name","operator","address","building_area"],moreFields:["air_conditioning","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["event","hall"],tags:{amenity:"community_centre"},name:"Community Center"},"amenity/community_centre/lgbtq":{icon:"maki-town-hall",geometry:["point","area"],terms:["lgbtq event","lgbtq hall","lgbt event","lgbt hall","lgb event","lgb hall"],tags:{amenity:"community_centre",lgbtq:"primary"},name:"LGBTQ+ Community Center"},"amenity/compressed_air":{icon:"maki-car",fields:["operator","fee","payment_multi_fee","lit"],geometry:["point","area"],tags:{amenity:"compressed_air"},name:"Compressed Air"},"amenity/conference_centre":{icon:"fas-user-tie",fields:["name","operator","building_area","address","website","internet_access"],moreFields:["air_conditioning","email","fax","internet_access/fee","internet_access/ssid","phone","smoking","wheelchair"],geometry:["point","area"],tags:{amenity:"conference_centre"},terms:["auditorium","conference","exhibition","exposition","lecture"],name:"Convention Center"},"amenity/courthouse":{icon:"fas-gavel",fields:["name","operator","address","building_area"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"courthouse"},name:"Courthouse"},"amenity/crematorium":{icon:"maki-cemetery",fields:["name","website","phone","opening_hours","wheelchair"],moreFields:["address","website","phone","email","fax","wheelchair"],geometry:["area","point"],tags:{amenity:"crematorium"},terms:["cemetery","funeral"],name:"Crematorium"},"amenity/dentist":{icon:"maki-dentist",fields:["name","operator","healthcare/speciality","address","building_area","opening_hours"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["tooth","teeth"],tags:{amenity:"dentist"},addTags:{amenity:"dentist",healthcare:"dentist"},reference:{key:"amenity",value:"dentist"},name:"Dentist"},"amenity/dive_centre":{icon:"temaki-scuba_diving",fields:["name","operator","address","building_area","opening_hours","scuba_diving"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["diving","scuba"],tags:{amenity:"dive_centre"},name:"Dive Center"},"amenity/doctors":{icon:"maki-doctor",fields:["name","operator","healthcare/speciality","address","building_area","opening_hours"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["medic*","physician"],tags:{amenity:"doctors"},addTags:{amenity:"doctors",healthcare:"doctor"},reference:{key:"amenity",value:"doctors"},name:"Doctor"},"amenity/dojo":{icon:"maki-pitch",fields:["name","sport","address","building_area","opening_hours"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["martial arts","dojang"],tags:{amenity:"dojo"},name:"Dojo / Martial Arts Academy"},"amenity/drinking_water":{icon:"maki-drinking-water",fields:["operator","access_simple","fee","payment_multi_fee","wheelchair"],moreFields:["lit","covered"],geometry:["point"],tags:{amenity:"drinking_water"},terms:["potable water source","water fountain","drinking fountain","bubbler","water tap"],name:"Drinking Water"},"amenity/driving_school":{icon:"maki-car",fields:["name","operator","address","building_area","opening_hours"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"driving_school"},name:"Driving School"},"amenity/events_venue":{icon:"fas-users",fields:["name","operator","building_area","address","website","internet_access"],moreFields:["air_conditioning","email","fax","internet_access/fee","internet_access/ssid","phone","smoking","wheelchair"],geometry:["point","area"],tags:{amenity:"events_venue"},terms:["banquet hall","baptism","Bar Mitzvah","Bat Mitzvah","birthdays","celebrations","conferences","confirmation","meetings","parties","party","quinceañera","reunions","weddings"],name:"Events Venue"},"amenity/fast_food":{icon:"maki-fast-food",fields:["name","cuisine","operator","address","building_area","drive_through"],moreFields:["air_conditioning","opening_hours","diet_multi","takeaway","delivery","smoking","capacity","outdoor_seating","internet_access","internet_access/fee","internet_access/ssid","payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"fast_food"},terms:["restaurant","takeaway"],name:"Fast Food"},"amenity/fast_food/ice_cream":{icon:"fas-ice-cream",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"ice_cream"},reference:{key:"cuisine",value:"ice_cream"},name:"Ice Cream Fast Food",searchable:false},"amenity/fast_food/burger":{icon:"maki-fast-food",geometry:["point","area"],terms:["breakfast","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"fast_food",cuisine:"burger"},reference:{key:"cuisine",value:"burger"},name:"Burger Fast Food"},"amenity/fast_food/chicken":{icon:"fas-drumstick-bite",geometry:["point","area"],terms:["breakfast","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"fast_food",cuisine:"chicken"},reference:{key:"cuisine",value:"chicken"},name:"Chicken Fast Food"},"amenity/fast_food/donut":{icon:"temaki-donut",geometry:["point","area"],terms:["breakfast","brunch","cafe","canteen","coffee","dine","diner","donut","doughnut","dining","eat","lunch","table"],tags:{amenity:"fast_food",cuisine:"donut"},reference:{key:"cuisine",value:"donut"},name:"Donut Fast Food"},"amenity/fast_food/fish_and_chips":{icon:"fas-fish",geometry:["point","area"],terms:["breakfast","cafe","café","dine","dining","dinner","drive-in","eat","grill","lunch","table","french fries"],tags:{amenity:"fast_food",cuisine:"fish_and_chips"},reference:{key:"cuisine",value:"fish_and_chips"},name:"Fish & Chips Fast Food"},"amenity/fast_food/kebab":{icon:"maki-restaurant",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"fast_food",cuisine:"kebab"},reference:{key:"cuisine",value:"kebab"},name:"Kebab Fast Food"},"amenity/fast_food/mexican":{icon:"fas-pepper-hot",geometry:["point","area"],terms:["breakfast","dine","dining","dinner","drive-in","eat","grill","lunch","table","tacos","burritos","enchiladas","fajitas","nachos","tortillas","salsa","tamales","quesadillas"],tags:{amenity:"fast_food",cuisine:"mexican"},reference:{key:"cuisine",value:"mexican"},name:"Mexican Fast Food"},"amenity/fast_food/pizza":{icon:"maki-restaurant-pizza",geometry:["point","area"],terms:["dine","dining","dinner","drive-in","eat","lunch","table","deep dish","thin crust","slice"],tags:{amenity:"fast_food",cuisine:"pizza"},reference:{key:"cuisine",value:"pizza"},name:"Pizza Fast Food"},"amenity/fast_food/sandwich":{icon:"maki-restaurant",geometry:["point","area"],terms:["breakfast","cafe","café","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"fast_food",cuisine:"sandwich"},reference:{key:"cuisine",value:"sandwich"},name:"Sandwich Fast Food"},"amenity/fire_station":{icon:"maki-fire-station",fields:["name","operator","address","building_area"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:[],tags:{amenity:"fire_station"},name:"Fire Station"},"amenity/food_court":{icon:"maki-restaurant",fields:["name","operator","address","building_area","opening_hours"],moreFields:["smoking","outdoor_seating","capacity","internet_access","internet_access/fee","internet_access/ssid","diet_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["fast food","restaurant","food"],tags:{amenity:"food_court"},name:"Food Court"},"amenity/fountain":{icon:"temaki-fountain",fields:["name","operator","lit"],geometry:["point","area"],tags:{amenity:"fountain"},name:"Fountain"},"amenity/fuel":{icon:"maki-fuel",fields:["name","brand","operator","address","fuel_multi","self_service"],moreFields:["opening_hours","payment_multi","building","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["petrol","fuel","gasoline","propane","diesel","lng","cng","biodiesel"],tags:{amenity:"fuel"},name:"Gas Station"},"amenity/grave_yard":{icon:"maki-cemetery",fields:["religion","address"],moreFields:["website","phone","email","fax"],geometry:["point","area"],tags:{amenity:"grave_yard"},name:"Graveyard"},"amenity/grit_bin":{icon:"fas-box",fields:["access_simple"],geometry:["point","vertex"],tags:{amenity:"grit_bin"},terms:["salt","sand"],name:"Grit Bin"},"amenity/hospital":{icon:"maki-hospital",fields:["name","operator","healthcare/speciality","address","emergency"],moreFields:["internet_access","internet_access/fee","internet_access/ssid","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["clinic","doctor","emergency room","health","infirmary","institution","sanatorium","sanitarium","sick","surgery","ward"],tags:{amenity:"hospital"},addTags:{amenity:"hospital",healthcare:"hospital"},reference:{key:"amenity",value:"hospital"},name:"Hospital Grounds"},"amenity/hunting_stand":{icon:"temaki-binoculars",fields:["access_simple"],geometry:["point","vertex","area"],terms:["game","gun","lookout","rifle","shoot*","wild","watch"],tags:{amenity:"hunting_stand"},name:"Hunting Stand"},"amenity/ice_cream":{icon:"fas-ice-cream",fields:["name","address","building_area","opening_hours","outdoor_seating"],moreFields:["takeaway","delivery","drive_through","internet_access","internet_access/fee","internet_access/ssid","diet_multi","payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["gelato","sorbet","sherbet","frozen","yogurt"],tags:{amenity:"ice_cream"},name:"Ice Cream Shop"},"amenity/internet_cafe":{icon:"temaki-antenna",fields:["name","operator","address","building_area","internet_access","internet_access/fee","internet_access/ssid"],moreFields:["air_conditioning","opening_hours","smoking","outdoor_seating","payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["cybercafe","taxiphone","teleboutique","coffee","cafe","net","lanhouse"],tags:{amenity:"internet_cafe"},name:"Internet Cafe"},"amenity/kindergarten":{icon:"maki-school",fields:["name","operator","address"],moreFields:["opening_hours","payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["kindergarden","pre-school"],tags:{amenity:"kindergarten"},name:"Preschool/Kindergarten Grounds"},"amenity/language_school":{icon:"maki-school",fields:["name","operator","address","building_area","opening_hours","language_multi"],moreFields:["email","fax","internet_access","internet_access/fee","internet_access/ssid","payment_multi","phone","website","wheelchair"],geometry:["point","area"],terms:["esl"],tags:{amenity:"language_school"},name:"Language School"},"amenity/library":{icon:"maki-library",fields:["name","operator","building_area","address","ref/isil","internet_access","internet_access/fee"],moreFields:["access_simple","air_conditioning","opening_hours","internet_access/ssid","website","phone","email","fax","wheelchair","payment_multi"],geometry:["point","area"],terms:["book"],tags:{amenity:"library"},name:"Library"},"amenity/love_hotel":{icon:"maki-heart",fields:["name","operator","address","building_area","rooms","internet_access","internet_access/fee"],moreFields:["smoking","payment_multi","internet_access/ssid","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"love_hotel"},name:"Love Hotel"},"amenity/marketplace":{icon:"maki-shop",fields:["name","operator","address","building","opening_hours"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"marketplace"},name:"Marketplace"},"amenity/monastery":{icon:"maki-place-of-worship",fields:["name","religion","denomination","address","building_area"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["abbey","basilica","bethel","cathedral","chancel","chantry","chapel","church","fold","house of God","house of prayer","house of worship","minster","mission","monastery","mosque","oratory","parish","sacellum","sanctuary","shrine","synagogue","tabernacle","temple"],tags:{amenity:"monastery"},name:"Monastery Grounds"},"amenity/money_transfer":{icon:"maki-bank",fields:["name","brand","address","building_area","payment_multi","currency_multi"],moreFields:["opening_hours","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["money order","check","bill","currency","finance","wire transfer","cable","person to person","cash to cash","exchange"],tags:{amenity:"money_transfer"},name:"Money Transfer Station"},"amenity/motorcycle_parking":{icon:"fas-motorcycle",fields:["capacity","operator","covered","access_simple"],geometry:["point","vertex","area"],tags:{amenity:"motorcycle_parking"},name:"Motorcycle Parking"},"amenity/music_school":{icon:"maki-school",fields:["name","operator","address","building_area","opening_hours"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["school of music"],tags:{amenity:"music_school"},name:"Music School"},"amenity/nightclub":{icon:"maki-bar",fields:["name","operator","address","building_area","opening_hours","smoking"],moreFields:["air_conditioning","payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"nightclub"},terms:["disco*","night club","dancing","dance club"],name:"Nightclub"},"amenity/nightclub/lgbtq":{icon:"maki-bar",geometry:["point","area"],tags:{amenity:"nightclub",lgbtq:"primary"},terms:["gay nightclub","lesbian nightclub","lgbtq nightclub","lgbt nightclub","lgb nightclub"],name:"LGBTQ+ Nightclub"},"amenity/parking_entrance":{icon:"maki-entrance-alt1",fields:["access_simple","ref"],geometry:["vertex"],tags:{amenity:"parking_entrance"},name:"Parking Garage Entrance/Exit"},"amenity/parking_space":{fields:["capacity"],geometry:["point","vertex","area"],terms:[],tags:{amenity:"parking_space"},matchScore:0.95,name:"Parking Space"},"amenity/parking":{icon:"maki-car",fields:["operator","parking","capacity","access_simple","fee","payment_multi_fee","surface"],moreFields:["address","covered","email","fax","maxstay","name","opening_hours","park_ride","phone","ref","supervised","website","wheelchair"],geometry:["point","vertex","area"],tags:{amenity:"parking"},terms:["automobile parking","car lot","car parking","rv parking","truck parking","vehicle parking"],name:"Parking Lot"},"amenity/parking/multi-storey":{icon:"maki-car",fields:["name","{amenity/parking}","building"],moreFields:["{amenity/parking}","levels","height"],geometry:["area"],tags:{amenity:"parking",parking:"multi-storey"},addTags:{building:"parking",amenity:"parking",parking:"multi-storey"},reference:{key:"parking",value:"multi-storey"},terms:["car","indoor parking","multistorey car park","parkade","parking building","parking deck","parking garage","parking ramp","parking structure"],name:"Multilevel Parking Garage"},"amenity/parking/underground":{icon:"maki-car",fields:["{amenity/parking}","layer"],geometry:["point","vertex","area"],tags:{amenity:"parking",parking:"underground"},addTags:{amenity:"parking",parking:"underground",layer:"-1"},reference:{key:"parking",value:"underground"},terms:["automobile parking","car lot","car parking","rv parking","subsurface parking","truck parking","vehicle parking"],name:"Underground Parking"},"amenity/payment_centre":{icon:"maki-bank",fields:["name","brand","address","building_area","opening_hours","payment_multi"],moreFields:["currency_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["check","tax pay","bill pay","currency","finance","cash","money"],tags:{amenity:"payment_centre"},name:"Payment Center"},"amenity/payment_terminal":{icon:"far-credit-card",fields:["name","brand","address","opening_hours","payment_multi"],moreFields:["currency_multi","wheelchair"],geometry:["point"],terms:["interactive kiosk","ekiosk","atm","bill pay","tax pay","phone pay","finance","cash","money transfer","card"],tags:{amenity:"payment_terminal"},name:"Payment Terminal"},"amenity/pharmacy":{icon:"maki-pharmacy",fields:["name","operator","address","building_area","drive_through","dispensing"],moreFields:["opening_hours","payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"pharmacy"},addTags:{amenity:"pharmacy",healthcare:"pharmacy"},reference:{key:"amenity",value:"pharmacy"},terms:["apothecary","drug store","drugstore","med*","prescription"],name:"Pharmacy Counter"},"amenity/photo_booth":{icon:"fas-person-booth",fields:["name","operator","payment_multi","wheelchair"],geometry:["point","area"],terms:["photobooth","photo","booth","kiosk","camera"],tags:{amenity:"photo_booth"},name:"Photo Booth"},"amenity/place_of_worship":{icon:"maki-place-of-worship",fields:["name","religion","denomination","address","building_area","service_times"],moreFields:["air_conditioning","opening_hours","internet_access","internet_access/ssid","website","phone","email","fax","wheelchair"],geometry:["point","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:"maki-religious-buddhist",fields:["name","religion","denomination","building_area","address","service_times"],geometry:["point","area"],terms:["stupa","vihara","monastery","temple","pagoda","zendo","dojo"],tags:{amenity:"place_of_worship",religion:"buddhist"},reference:{key:"amenity",value:"place_of_worship"},name:"Buddhist Temple"},"amenity/place_of_worship/christian":{icon:"maki-religious-christian",fields:["name","religion","denomination","building_area","address","service_times"],geometry:["point","area"],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"],tags:{amenity:"place_of_worship",religion:"christian"},reference:{key:"amenity",value:"place_of_worship"},name:"Christian Church"},"amenity/place_of_worship/hindu":{icon:"temaki-hinduism",fields:["name","religion","denomination","building_area","address","service_times"],geometry:["point","area"],terms:["kovil","devasthana","mandir","kshetram","alayam","shrine","temple"],tags:{amenity:"place_of_worship",religion:"hindu"},reference:{key:"amenity",value:"place_of_worship"},name:"Hindu Temple"},"amenity/place_of_worship/jewish":{icon:"maki-religious-jewish",fields:["name","religion","denomination","building_area","address","service_times"],geometry:["point","area"],terms:["jewish"],tags:{amenity:"place_of_worship",religion:"jewish"},reference:{key:"amenity",value:"place_of_worship"},name:"Jewish Synagogue"},"amenity/place_of_worship/muslim":{icon:"maki-religious-muslim",fields:["name","religion","denomination","building_area","address","service_times"],geometry:["point","area"],terms:["muslim"],tags:{amenity:"place_of_worship",religion:"muslim"},reference:{key:"amenity",value:"place_of_worship"},name:"Muslim Mosque"},"amenity/place_of_worship/shinto":{icon:"temaki-shinto",fields:["name","religion","denomination","building_area","address","service_times"],geometry:["point","area"],terms:["kami","torii"],tags:{amenity:"place_of_worship",religion:"shinto"},reference:{key:"amenity",value:"place_of_worship"},name:"Shinto Shrine"},"amenity/place_of_worship/sikh":{icon:"temaki-sikhism",fields:["name","religion","denomination","building_area","address","service_times"],geometry:["point","area"],terms:["gurudwara","temple"],tags:{amenity:"place_of_worship",religion:"sikh"},reference:{key:"amenity",value:"place_of_worship"},name:"Sikh Temple"},"amenity/place_of_worship/taoist":{icon:"temaki-taoism",fields:["name","religion","denomination","building_area","address","service_times"],geometry:["point","area"],terms:["daoist","monastery","temple"],tags:{amenity:"place_of_worship",religion:"taoist"},reference:{key:"amenity",value:"place_of_worship"},name:"Taoist Temple"},"amenity/planetarium":{icon:"maki-globe",fields:["name","operator","address","building_area","opening_hours"],moreFields:["air_conditioning","fee","payment_multi_fee","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["museum","astronomy","observatory"],tags:{amenity:"planetarium"},name:"Planetarium"},"amenity/police":{icon:"maki-police",fields:["name","operator","address","building_area","opening_hours"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["badge","constable","constabulary","cop","detective","fed","law","enforcement","officer","patrol"],tags:{amenity:"police"},name:"Police"},"amenity/post_box":{icon:"temaki-post_box",fields:["operator","collection_times","drive_through","ref"],moreFields:["wheelchair"],geometry:["point","vertex"],tags:{amenity:"post_box"},terms:["letter","post"],name:"Mailbox"},"amenity/post_office":{icon:"maki-post",fields:["name","operator","address","building_area","opening_hours"],moreFields:["email","fax","internet_access","internet_access/fee","internet_access/ssid","payment_multi","phone","website","wheelchair"],geometry:["point","area"],terms:["letter","mail"],tags:{amenity:"post_office"},name:"Post Office"},"amenity/prep_school":{icon:"temaki-school",fields:["name","operator","address","building_area","opening_hours"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["academic","ACT","SAT","homework","math","reading","test prep","tutoring","writing"],tags:{amenity:"prep_school"},name:"Test Prep / Tutoring School"},"amenity/prison":{icon:"maki-prison",fields:["name","operator","address"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["cell","jail"],tags:{amenity:"prison"},name:"Prison Grounds"},"amenity/pub":{icon:"maki-beer",fields:["name","address","building_area","opening_hours","smoking","brewery"],moreFields:["air_conditioning","diet_multi","email","fax","internet_access","internet_access/fee","internet_access/ssid","microbrewery","outdoor_seating","payment_multi","phone","website","wheelchair"],geometry:["point","area"],tags:{amenity:"pub"},terms:["alcohol","drink","dive","beer","bier","booze"],name:"Pub"},"amenity/pub/lgbtq":{icon:"maki-beer",geometry:["point","area"],tags:{amenity:"pub",lgbtq:"primary"},terms:["gay pub","lesbian pub","lgbtq pub","lgbt pub","lgb pub"],name:"LGBTQ+ Pub"},"amenity/pub/microbrewery":{icon:"maki-beer",geometry:["point","area"],tags:{amenity:"pub",microbrewery:"yes"},reference:{key:"microbrewery"},terms:["alcohol","drink","dive","beer","bier","booze","craft brewery","microbrewery","small batch brewery"],name:"Brewpub"},"amenity/public_bath":{icon:"maki-water",fields:["name","bath/type","bath/open_air","bath/sand_bath","address","building_area","fee"],moreFields:["email","fax","internet_access","internet_access/fee","internet_access/ssid","opening_hours","payment_multi_fee","phone","website","wheelchair"],geometry:["point","area"],tags:{amenity:"public_bath"},terms:["onsen","foot bath","hot springs"],name:"Public Bath"},"amenity/public_bookcase":{icon:"maki-library",fields:["name","operator","capacity","website","lit"],moreFields:["wheelchair"],geometry:["point","area"],terms:["library","bookcrossing"],tags:{amenity:"public_bookcase"},name:"Public Bookcase"},"amenity/ranger_station":{icon:"maki-ranger-station",fields:["name","operator","address","building_area","opening_hours"],moreFields:["email","fax","internet_access","internet_access/fee","internet_access/ssid","phone","website","wheelchair"],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_centre":{icon:"maki-recycling",fields:["name","operator","address","building","opening_hours","recycling_accepts"],moreFields:["fee","payment_multi_fee","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["bottle","can","dump","glass","garbage","rubbish","scrap","trash"],tags:{amenity:"recycling",recycling_type:"centre"},reference:{key:"recycling_type",value:"*"},name:"Recycling Center"},"amenity/recycling_container":{icon:"maki-recycling",fields:["operator","recycling_accepts","collection_times","material","colour"],moreFields:["covered","indoor","manufacturer"],geometry:["point","area"],terms:["bin","can","bottle","glass","garbage","rubbish","scrap","trash"],tags:{amenity:"recycling",recycling_type:"container"},reference:{key:"amenity",value:"recycling"},name:"Recycling Container"},"amenity/restaurant":{icon:"maki-restaurant",fields:["name","cuisine","address","building_area","opening_hours","phone"],moreFields:["air_conditioning","bar","brewery","capacity","delivery","diet_multi","email","fax","internet_access","internet_access/fee","internet_access/ssid","microbrewery","outdoor_seating","reservation","smoking","stars","takeaway","website","wheelchair"],geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","coffee","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant"},name:"Restaurant"},"amenity/restaurant/american":{icon:"maki-restaurant",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","coffee","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"american"},reference:{key:"cuisine",value:"american"},name:"American Restaurant"},"amenity/restaurant/asian":{icon:"maki-restaurant-noodle",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"asian"},reference:{key:"cuisine",value:"asian"},name:"Asian Restaurant"},"amenity/restaurant/chinese":{icon:"maki-restaurant-noodle",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"chinese"},reference:{key:"cuisine",value:"chinese"},name:"Chinese Restaurant"},"amenity/restaurant/french":{icon:"maki-restaurant",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"french"},reference:{key:"cuisine",value:"french"},name:"French Restaurant"},"amenity/restaurant/german":{icon:"maki-restaurant",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"german"},reference:{key:"cuisine",value:"german"},name:"German Restaurant"},"amenity/restaurant/greek":{icon:"maki-restaurant",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table","gyros","pitas","olives"],tags:{amenity:"restaurant",cuisine:"greek"},reference:{key:"cuisine",value:"greek"},name:"Greek Restaurant"},"amenity/restaurant/indian":{icon:"maki-restaurant",geometry:["point","area"],terms:["bar","breakfast","dine","dining","dinner","drive-in","eat","grill","lunch","table","curry"],tags:{amenity:"restaurant",cuisine:"indian"},reference:{key:"cuisine",value:"indian"},name:"Indian Restaurant"},"amenity/restaurant/italian":{icon:"maki-restaurant",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table","pasta","pizza"],tags:{amenity:"restaurant",cuisine:"italian"},reference:{key:"cuisine",value:"italian"},name:"Italian Restaurant"},"amenity/restaurant/japanese":{icon:"maki-restaurant-noodle",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"japanese"},reference:{key:"cuisine",value:"japanese"},name:"Japanese Restaurant"},"amenity/restaurant/mexican":{icon:"fas-pepper-hot",geometry:["point","area"],terms:["bar","breakfast","dine","dining","dinner","drive-in","eat","grill","lunch","table","tacos","burritos","enchiladas","fajitas","nachos","tortillas","salsa","tamales","quesadillas"],tags:{amenity:"restaurant",cuisine:"mexican"},reference:{key:"cuisine",value:"mexican"},name:"Mexican Restaurant"},"amenity/restaurant/noodle":{icon:"maki-restaurant-noodle",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table","ramen noodles","soup","soba noodles","cellophane noodles","rice noodles"],tags:{amenity:"restaurant",cuisine:"noodle"},reference:{key:"cuisine",value:"noodle"},name:"Noodle Restaurant"},"amenity/restaurant/pizza":{icon:"maki-restaurant-pizza",geometry:["point","area"],terms:["bar","dine","dining","dinner","drive-in","eat","lunch","table","deep dish","thin crust","slice"],tags:{amenity:"restaurant",cuisine:"pizza"},reference:{key:"cuisine",value:"pizza"},name:"Pizza Restaurant"},"amenity/restaurant/seafood":{icon:"maki-restaurant-seafood",geometry:["point","area"],terms:["bar","breakfast","cafe","café","dine","dining","dinner","drive-in","eat","grill","lunch","table","fish","shellfish","molluscs","crustaceans","clams","oysters","lobsters","crab","shrimp","squid","octopus"],tags:{amenity:"restaurant",cuisine:"seafood"},reference:{key:"cuisine",value:"seafood"},name:"Seafood Restaurant"},"amenity/restaurant/steakhouse":{icon:"maki-slaughterhouse",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table","steak house","chop house","beef"],tags:{amenity:"restaurant",cuisine:"steak_house"},reference:{key:"cuisine",value:"steak_house"},name:"Steakhouse"},"amenity/restaurant/sushi":{icon:"fas-fish",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"sushi"},reference:{key:"cuisine",value:"sushi"},name:"Sushi Restaurant"},"amenity/restaurant/thai":{icon:"maki-restaurant-noodle",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"thai"},reference:{key:"cuisine",value:"thai"},name:"Thai Restaurant"},"amenity/restaurant/turkish":{icon:"maki-restaurant",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"turkish"},reference:{key:"cuisine",value:"turkish"},name:"Turkish Restaurant"},"amenity/restaurant/vietnamese":{icon:"maki-restaurant-noodle",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"vietnamese"},reference:{key:"cuisine",value:"vietnamese"},name:"Vietnamese Restaurant"},"amenity/sanitary_dump_station":{icon:"temaki-storage_tank",fields:["operator","access_simple","fee","payment_multi_fee","water_point"],geometry:["point","vertex","area"],terms:["Motor Home","Camper","Sanitary","Dump Station","Elsan","CDP","CTDP","Chemical Toilet"],tags:{amenity:"sanitary_dump_station"},name:"RV Toilet Disposal"},"amenity/school":{icon:"maki-school",fields:["name","operator","address","religion","denomination","website"],moreFields:["internet_access","internet_access/ssid","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["academy","elementary school","middle school","high school"],tags:{amenity:"school"},name:"School Grounds"},"amenity/shelter":{icon:"maki-shelter",fields:["name","shelter_type","building_area","bench","bin"],moreFields:["lit","wheelchair"],geometry:["point","vertex","area"],terms:["lean-to","gazebo","picnic"],tags:{amenity:"shelter"},name:"Shelter"},"amenity/shelter/gazebo":{icon:"maki-shelter",fields:["name","building_area","bench","lit"],geometry:["point","area"],tags:{amenity:"shelter",shelter_type:"gazebo"},name:"Gazebo"},"amenity/shelter/lean_to":{icon:"maki-shelter",fields:["name","operator","building_area"],geometry:["point","area"],tags:{amenity:"shelter",shelter_type:"lean_to"},name:"Lean-To"},"amenity/shelter/picnic_shelter":{icon:"maki-shelter",fields:["name","shelter_type","building_area","lit","bin"],geometry:["point","area"],tags:{amenity:"shelter",shelter_type:"picnic_shelter"},reference:{key:"shelter_type",value:"picnic_shelter"},terms:["pavilion"],name:"Picnic Shelter"},"amenity/shelter/public_transport":{icon:"maki-shelter",fields:["name","shelter_type","building_area","bench","lit"],geometry:["point","area"],terms:["bus stop","metro stop","public transit shelter","public transport shelter","tram stop shelter","waiting"],tags:{amenity:"shelter",shelter_type:"public_transport"},reference:{key:"shelter_type",value:"public_transport"},name:"Transit Shelter"},"amenity/shower":{icon:"fas-shower",fields:["opening_hours","access_simple","fee","payment_multi_fee","supervised","building_area","wheelchair"],moreFields:["address","operator","gender"],geometry:["point","vertex","area"],terms:["rain closet"],tags:{amenity:"shower"},name:"Shower"},"amenity/smoking_area":{icon:"fas-smoking",fields:["name","shelter","bin","bench","opening_hours"],moreFields:["lit","wheelchair","covered"],geometry:["point","vertex","area"],terms:[],tags:{amenity:"smoking_area"},name:"Smoking Area"},"amenity/social_centre":{icon:"fas-handshake",fields:["name","brand","operator","address","building_area"],moreFields:["air_conditioning","email","fax","internet_access","internet_access/fee","internet_access/ssid","phone","website","wheelchair"],geometry:["point","area"],terms:["event","fraternal","fraternity","hall","organization","professional","society","sorority","union","vetern"],tags:{amenity:"social_centre"},name:"Social Center"},"amenity/social_facility":{icon:"temaki-social_facility",fields:["name","operator","address","building_area","social_facility","social_facility_for"],moreFields:["email","fax","internet_access","internet_access/fee","internet_access/ssid","opening_hours","phone","website","wheelchair"],geometry:["point","area"],terms:[],tags:{amenity:"social_facility"},name:"Social Facility"},"amenity/social_facility/ambulatory_care":{icon:"maki-wheelchair",geometry:["point","area"],tags:{amenity:"social_facility",social_facility:"ambulatory_care"},reference:{key:"social_facility",value:"ambulatory_care"},name:"Ambulatory Care"},"amenity/social_facility/food_bank":{icon:"temaki-social_facility",geometry:["point","area"],terms:[],tags:{amenity:"social_facility",social_facility:"food_bank"},reference:{key:"social_facility",value:"food_bank"},name:"Food Bank"},"amenity/social_facility/group_home":{icon:"maki-wheelchair",fields:["{amenity/social_facility}","wheelchair"],geometry:["point","area"],terms:["old","senior","living","care home","assisted living"],tags:{amenity:"social_facility",social_facility:"group_home","social_facility:for":"senior"},reference:{key:"social_facility",value:"group_home"},name:"Elderly Group Home"},"amenity/social_facility/homeless_shelter":{icon:"temaki-social_facility",geometry:["point","area"],terms:["houseless","unhoused","displaced"],tags:{amenity:"social_facility",social_facility:"shelter","social_facility:for":"homeless"},reference:{key:"social_facility",value:"shelter"},name:"Homeless Shelter"},"amenity/social_facility/nursing_home":{icon:"maki-wheelchair",fields:["{amenity/social_facility}","wheelchair"],geometry:["point","area"],terms:["elderly","living","nursing","old","senior","assisted living"],tags:{amenity:"social_facility",social_facility:"nursing_home","social_facility:for":"senior"},reference:{key:"social_facility",value:"nursing_home"},name:"Nursing Home"},"amenity/studio":{icon:"fas-microphone",fields:["name","studio","address","building_area"],moreFields:["internet_access","internet_access/fee","internet_access/ssid","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["recording","radio","television"],tags:{amenity:"studio"},name:"Studio"},"amenity/taxi":{icon:"fas-taxi",fields:["name","operator","capacity"],moreFields:["address","opening_hours","wheelchair"],geometry:["point","vertex","area"],terms:["cab"],tags:{amenity:"taxi"},name:"Taxi Stand"},"amenity/telephone":{icon:"maki-telephone",fields:["operator","phone","fee","payment_multi_fee","booth"],moreFields:["covered","indoor","lit","wheelchair"],geometry:["point","vertex"],tags:{amenity:"telephone"},terms:["phone"],name:"Telephone"},"amenity/theatre":{icon:"maki-theatre",fields:["name","operator","address","building_area"],moreFields:["air_conditioning","internet_access","internet_access/fee","internet_access/ssid","payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["theatre","performance","play","musical"],tags:{amenity:"theatre"},name:"Theater"},"amenity/theatre/type/amphi":{icon:"maki-theatre",fields:["name","operator","address","lit"],geometry:["point","area"],terms:["open air","outdoor","greek","ampi"],tags:{amenity:"theatre","theatre:type":"amphi"},name:"Amphitheatre"},"amenity/toilets":{icon:"maki-toilet",fields:["toilets/disposal","access_simple","gender","diaper","wheelchair","building_area"],moreFields:["fee","opening_hours","operator","payment_multi_fee","toilets/handwashing","toilets/position"],geometry:["point","vertex","area"],terms:["bathroom","restroom","outhouse","privy","head","lavatory","latrine","water closet","WC","W.C."],tags:{amenity:"toilets"},name:"Toilets"},"amenity/toilets/disposal/flush":{icon:"fas-toilet",fields:["toilets/disposal","{amenity/toilets}"],moreFields:["{amenity/toilets}"],geometry:["point","vertex","area"],terms:["bathroom","head","lavatory","privy","restroom","water closet","WC","W.C."],tags:{amenity:"toilets","toilets:disposal":"flush"},reference:{key:"toilets:disposal",value:"flush"},name:"Flush Toilets"},"amenity/toilets/disposal/pitlatrine":{icon:"tnp-2009541",fields:["toilets/disposal","{amenity/toilets}","toilets/handwashing"],moreFields:["{amenity/toilets}"],geometry:["point","vertex","area"],terms:["head","lavatory","long drop","outhouse","pit toilet","privy"],tags:{amenity:"toilets","toilets:disposal":"pitlatrine"},reference:{key:"toilets:disposal",value:"pitlatrine"},name:"Pit Latrine"},"amenity/townhall":{icon:"maki-town-hall",fields:["name","operator","address","building_area"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["village","city","government","courthouse","municipal"],tags:{amenity:"townhall"},name:"Town Hall"},"amenity/toy_library":{icon:"fas-chess-knight",fields:["operator","address","building_area","opening_hours"],moreFields:["website","wheelchair"],geometry:["point","area"],terms:["game","toy"],tags:{amenity:"toy_library"},name:"Toy Library"},"amenity/university":{icon:"maki-college",fields:["{amenity/college}"],moreFields:["{amenity/college}"],geometry:["point","area"],terms:["college","graduate school","PhD program","master's degree program"],tags:{amenity:"university"},name:"University Grounds"},"amenity/vehicle_inspection":{icon:"maki-car",fields:["name","operator","address","building_area","opening_hours"],moreFields:["email","fax","payment_multi","phone","website","wheelchair"],geometry:["point","area"],terms:["car inspection"],tags:{amenity:"vehicle_inspection"},name:"Vehicle Inspection"},"amenity/vending_machine":{icon:"temaki-vending_machine",fields:["vending","operator","payment_multi","currency_multi"],moreFields:["covered","indoor"],geometry:["point"],terms:[],tags:{amenity:"vending_machine"},matchScore:0.9,name:"Vending Machine"},"amenity/vending_machine/cigarettes":{icon:"temaki-vending_machine",geometry:["point"],terms:["cigarette"],tags:{amenity:"vending_machine",vending:"cigarettes"},reference:{key:"vending",value:"cigarettes"},name:"Cigarette Vending Machine"},"amenity/vending_machine/coffee":{icon:"temaki-vending_machine",geometry:["point"],terms:["coffee"],tags:{amenity:"vending_machine",vending:"coffee"},reference:{key:"vending",value:"coffee"},name:"Coffee Vending Machine"},"amenity/vending_machine/condoms":{icon:"temaki-vending_machine",geometry:["point"],terms:["condom"],tags:{amenity:"vending_machine",vending:"condoms"},reference:{key:"vending",value:"condoms"},name:"Condom Vending Machine"},"amenity/vending_machine/drinks":{icon:"temaki-vending_machine",geometry:["point"],terms:["drink","soda","beverage","juice","pop"],tags:{amenity:"vending_machine",vending:"drinks"},reference:{key:"vending",value:"drinks"},name:"Drink Vending Machine"},"amenity/vending_machine/electronics":{icon:"temaki-vending_machine",geometry:["point"],terms:["cable","charger","earbud","headphone","phone","tablet"],tags:{amenity:"vending_machine",vending:"electronics"},reference:{key:"vending",value:"electronics"},name:"Electronics Vending Machine"},"amenity/vending_machine/elongated_coin":{icon:"temaki-vending_machine",geometry:["point"],terms:["coin","crush","elongated","flatten","penny","souvenir"],tags:{amenity:"vending_machine",vending:"elongated_coin"},reference:{key:"vending",value:"elongated_coin"},name:"Flat Coin Vending Machine"},"amenity/vending_machine/excrement_bags":{icon:"temaki-vending_machine",fields:["{amenity/vending_machine}"],geometry:["point"],terms:["excrement bags","poop","waste","dog","animal"],tags:{amenity:"vending_machine",vending:"excrement_bags"},reference:{key:"vending",value:"excrement_bags"},name:"Excrement Bag Dispenser"},"amenity/vending_machine/feminine_hygiene":{icon:"temaki-vending_machine",geometry:["point"],terms:["condom","tampon","pad","woman","women","menstrual hygiene products","personal care"],tags:{amenity:"vending_machine",vending:"feminine_hygiene"},reference:{key:"vending",value:"feminine_hygiene"},name:"Feminine Hygiene Vending Machine"},"amenity/vending_machine/food":{icon:"temaki-vending_machine",geometry:["point"],terms:["food"],tags:{amenity:"vending_machine",vending:"food"},reference:{key:"vending",value:"food"},name:"Food Vending Machine"},"amenity/vending_machine/fuel":{icon:"maki-fuel",geometry:["point"],terms:["petrol","fuel","gasoline","propane","diesel","lng","cng","biodiesel"],tags:{amenity:"vending_machine",vending:"fuel"},reference:{key:"vending",value:"fuel"},name:"Gas Pump",matchScore:0.5},"amenity/vending_machine/ice_cream":{icon:"temaki-vending_machine",geometry:["point"],terms:["chocolate","ice cream","frozen","popsicle","vanilla"],tags:{amenity:"vending_machine",vending:"ice_cream"},reference:{key:"vending",value:"ice_cream"},name:"Ice Cream Vending Machine"},"amenity/vending_machine/newspapers":{icon:"far-newspaper",fields:["vending","operator","fee","payment_multi_fee","currency_multi"],geometry:["point"],terms:["newspaper"],tags:{amenity:"vending_machine",vending:"newspapers"},reference:{key:"vending",value:"newspapers"},name:"Newspaper Vending Machine"},"amenity/vending_machine/parcel_pickup_dropoff":{icon:"temaki-vending_machine",fields:["vending","operator","payment_multi","currency_multi"],geometry:["point"],terms:["mail","parcel","pickup"],tags:{amenity:"vending_machine",vending:"parcel_pickup;parcel_mail_in"},reference:{key:"vending",value:"parcel_pickup;parcel_mail_in"},name:"Parcel Pickup/Dropoff Locker"},"amenity/vending_machine/parcel_pickup":{icon:"temaki-vending_machine",fields:["vending","operator"],geometry:["point"],terms:["amazon","locker","mail","parcel","pickup"],tags:{amenity:"vending_machine",vending:"parcel_pickup"},reference:{key:"vending",value:"parcel_pickup"},name:"Parcel Pickup Locker"},"amenity/vending_machine/parking_tickets":{icon:"temaki-vending_machine",geometry:["point"],terms:["parking","ticket"],tags:{amenity:"vending_machine",vending:"parking_tickets"},reference:{key:"vending",value:"parking_tickets"},matchScore:0.94,name:"Parking Ticket Vending Machine"},"amenity/vending_machine/public_transport_tickets":{icon:"temaki-vending_machine",geometry:["point"],terms:["bus","train","ferry","rail","ticket","transportation"],tags:{amenity:"vending_machine",vending:"public_transport_tickets"},reference:{key:"vending",value:"public_transport_tickets"},name:"Transit Ticket Vending Machine"},"amenity/vending_machine/stamps":{icon:"temaki-vending_machine",geometry:["point"],terms:["mail","postage","stamp"],tags:{amenity:"vending_machine",vending:"stamps"},reference:{key:"vending",value:"stamps"},name:"Postage Vending Machine"},"amenity/vending_machine/sweets":{icon:"temaki-vending_machine",geometry:["point"],terms:["candy","gum","chip","pretzel","cookie","cracker"],tags:{amenity:"vending_machine",vending:"sweets"},reference:{key:"vending",value:"sweets"},name:"Snack Vending Machine"},"amenity/veterinary":{icon:"temaki-veterinary_care",fields:["name","operator","address","building_area","opening_hours"],moreFields:["fee","payment_multi_fee","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["pet clinic","veterinarian","animal hospital","pet doctor"],tags:{amenity:"veterinary"},name:"Veterinary"},"amenity/waste_basket":{icon:"maki-waste-basket",fields:["operator","collection_times","material","colour"],moreFields:["covered","indoor","manufacturer"],geometry:["point","vertex"],tags:{amenity:"waste_basket"},terms:["bin","garbage","rubbish","litter","trash"],name:"Waste Basket"},"amenity/waste_disposal":{icon:"fas-dumpster",fields:["operator","collection_times"],geometry:["point","vertex","area"],tags:{amenity:"waste_disposal"},terms:["garbage","rubbish","litter","trash"],name:"Garbage Dumpster"},"amenity/waste_transfer_station":{icon:"maki-waste-basket",fields:["name","operator","address","opening_hours","fee","payment_multi_fee"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["dump","garbage","recycling","rubbish","scrap","trash"],tags:{amenity:"waste_transfer_station"},name:"Waste Transfer Station"},"amenity/waste/dog_excrement":{icon:"maki-waste-basket",fields:["collection_times"],geometry:["point","vertex","area"],tags:{amenity:"waste_basket",waste:"dog_excrement"},reference:{key:"waste",value:"dog_excrement"},terms:["bin","garbage","rubbish","litter","trash","poo","dog"],name:"Dog Excrement Bin"},"amenity/water_point":{icon:"maki-drinking-water",fields:["operator","fee","payment_multi_fee"],geometry:["area","vertex","point"],tags:{amenity:"water_point"},name:"RV Drinking Water"},"amenity/watering_place":{icon:"maki-drinking-water",fields:["operator","fee","payment_multi_fee"],geometry:["area","vertex","point"],tags:{amenity:"watering_place"},name:"Animal Watering Place"},area:{fields:["name"],geometry:["area"],tags:{area:"yes"},terms:["polygon"],name:"Area",matchScore:0.1},"area/highway":{fields:["name","area/highway","surface"],geometry:["area"],terms:["area:highway","edge of pavement","highway area","highway shape","pavement","road shape","street area"],tags:{"area:highway":"*"},name:"Road Surface"},"attraction/amusement_ride":{icon:"maki-amusement-park",geometry:["point","area"],terms:["theme park","carnival ride"],tags:{attraction:"amusement_ride"},name:"Amusement Ride"},"attraction/animal":{icon:"maki-zoo",fields:["name","operator"],geometry:["point","area"],terms:["amphibian","animal park","aquarium","bear","bird","fish","insect","lion","mammal","monkey","penguin","reptile","safari","theme park","tiger","zoo"],tags:{attraction:"animal"},name:"Animal Enclosure"},"attraction/big_wheel":{icon:"maki-amusement-park",fields:["{attraction}","height"],geometry:["point"],terms:["ferris wheel","theme park","amusement ride"],tags:{attraction:"big_wheel"},name:"Big Wheel"},"attraction/bumper_car":{icon:"maki-car",geometry:["point","area"],terms:["theme park","dodgem cars","autoscooter"],tags:{attraction:"bumper_car"},name:"Bumper Car"},"attraction/bungee_jumping":{icon:"maki-pitch",fields:["{attraction}","height"],geometry:["point","area"],terms:["theme park","bungy jumping","jumping platform"],tags:{attraction:"bungee_jumping"},name:"Bungee Jumping"},"attraction/carousel":{icon:"temaki-amusement_park",fields:["{attraction}","building_area"],geometry:["point","area"],terms:["theme park","roundabout","merry-go-round","galloper","jumper","horseabout","flying horses"],tags:{attraction:"carousel"},name:"Carousel"},"attraction/dark_ride":{icon:"maki-rail-metro",fields:["{attraction}","building_area"],geometry:["point","line","area"],terms:["theme park","ghost train"],tags:{attraction:"dark_ride"},name:"Dark Ride"},"attraction/drop_tower":{icon:"temaki-tower",fields:["{attraction}","height"],geometry:["point","area"],terms:["theme park","amusement ride","gondola","tower","big drop"],tags:{attraction:"drop_tower"},name:"Drop Tower"},"attraction/maze":{icon:"maki-amusement-park",geometry:["point","area"],terms:["theme park","amusement ride","labyrinth"],tags:{attraction:"maze"},name:"Maze"},"attraction/pirate_ship":{icon:"maki-danger",geometry:["point"],terms:["theme park","carnival ride","amusement ride"],tags:{attraction:"pirate_ship"},name:"Pirate Ship"},"attraction/river_rafting":{icon:"maki-ferry",geometry:["point","line"],terms:["theme park","aquatic park","water park","rafting simulator","river rafting ride","river rapids ride"],tags:{attraction:"river_rafting"},name:"River Rafting"},"attraction/roller_coaster":{icon:"maki-amusement-park",geometry:["point","area"],terms:["theme park","amusement ride"],tags:{attraction:"roller_coaster"},name:"Roller Coaster"},"attraction/summer_toboggan":{icon:"temaki-sledding",geometry:["line"],terms:["alpine slide","mountain coaster"],tags:{attraction:"summer_toboggan"},name:"Summer Toboggan"},"attraction/train":{icon:"maki-rail",fields:["{attraction}","fee"],geometry:["point","line"],terms:["theme park","rackless train","road train","Tschu-Tschu train","dotto train","park train"],tags:{attraction:"train"},name:"Tourist Train"},"attraction/water_slide":{icon:"fas-swimmer",fields:["{attraction}","height"],geometry:["line","area"],terms:["theme park","aquatic park","water park","flumes","water chutes","hydroslides"],tags:{attraction:"water_slide"},name:"Water Slide"},barrier:{icon:"maki-roadblock",geometry:["point","vertex","line","area"],tags:{barrier:"*"},fields:["barrier"],name:"Barrier",matchScore:0.4},"barrier/entrance":{icon:"maki-entrance-alt1",geometry:["vertex"],tags:{barrier:"entrance"},name:"Entrance",searchable:false},"barrier/block":{icon:"maki-roadblock",fields:["access","material"],geometry:["point","vertex"],tags:{barrier:"block"},name:"Block"},"barrier/bollard":{icon:"maki-roadblock",fields:["access","material"],geometry:["point","vertex","line"],tags:{barrier:"bollard"},name:"Bollard"},"barrier/border_control":{icon:"maki-roadblock",fields:["access","building_area"],moreFields:["address","website","phone","email","fax"],geometry:["vertex","area"],tags:{barrier:"border_control"},name:"Border Control"},"barrier/cattle_grid":{icon:"maki-barrier",geometry:["vertex"],tags:{barrier:"cattle_grid"},name:"Cattle Grid"},"barrier/chain":{icon:"maki-barrier",fields:["access"],geometry:["vertex","line"],tags:{barrier:"chain"},name:"Chain"},"barrier/city_wall":{icon:"temaki-wall",fields:["height","material"],geometry:["line","area"],tags:{barrier:"city_wall"},name:"City Wall"},"barrier/cycle_barrier":{icon:"maki-roadblock",fields:["access"],geometry:["vertex"],tags:{barrier:"cycle_barrier"},name:"Cycle Barrier"},"barrier/ditch":{icon:"maki-roadblock",geometry:["line","area"],tags:{barrier:"ditch"},name:"Trench",matchScore:0.25},"barrier/fence":{icon:"maki-fence",fields:["fence_type","height","material"],geometry:["line"],tags:{barrier:"fence"},name:"Fence",matchScore:0.25},"barrier/fence/railing":{icon:"temaki-railing",geometry:["line"],tags:{barrier:"fence",fence_type:"railing"},terms:["railing","handrail","guard rail"],name:"Railing",matchScore:0.5},"barrier/gate":{icon:"maki-barrier",fields:["access","opening_hours"],geometry:["vertex","line"],tags:{barrier:"gate"},name:"Gate"},"barrier/guard_rail":{icon:"temaki-guard_rail",fields:["material"],geometry:["line"],tags:{barrier:"guard_rail"},name:"Guard Rail",terms:["guardrail","traffic barrier","crash barrier","median barrier","roadside barrier","Armco barrier"],matchScore:0.75},"barrier/hedge":{fields:["height"],geometry:["line","area"],tags:{barrier:"hedge"},name:"Hedge",matchScore:0.25},"barrier/height_restrictor":{icon:"temaki-car_wash",fields:["maxheight"],geometry:["vertex"],tags:{barrier:"height_restrictor"},name:"Height Restrictor"},"barrier/kerb":{icon:"temaki-kerb-raised",fields:["kerb","tactile_paving","wheelchair"],moreFields:["material"],geometry:["vertex","line"],tags:{barrier:"kerb"},matchScore:0.95,name:"Curb"},"barrier/kerb/flush":{icon:"temaki-kerb-flush",fields:["kerb","{barrier/kerb}"],geometry:["vertex","line"],tags:{kerb:"flush"},addTags:{barrier:"kerb",kerb:"flush"},reference:{key:"kerb",value:"flush"},terms:["even curb","level curb","tactile curb"],name:"Flush Curb"},"barrier/kerb/lowered":{icon:"temaki-kerb-lowered",fields:["kerb","{barrier/kerb}","kerb/height"],geometry:["vertex","line"],tags:{kerb:"lowered"},addTags:{barrier:"kerb",kerb:"lowered"},reference:{key:"kerb",value:"lowered"},terms:["curb cut","curb ramp","kerb ramp","dropped kerb","pram ramp"],name:"Lowered Curb"},"barrier/kerb/raised":{icon:"temaki-kerb-raised",fields:["kerb","{barrier/kerb}","kerb/height"],geometry:["vertex","line"],tags:{kerb:"raised"},addTags:{barrier:"kerb",kerb:"raised"},reference:{key:"kerb",value:"raised"},terms:[],name:"Raised Curb"},"barrier/kerb/rolled":{icon:"temaki-kerb-rolled",fields:["kerb","{barrier/kerb}","kerb/height"],geometry:["vertex","line"],tags:{kerb:"rolled"},addTags:{barrier:"kerb",kerb:"rolled"},reference:{key:"kerb",value:"rolled"},terms:["gutter"],name:"Rolled Curb"},"barrier/kissing_gate":{icon:"maki-barrier",fields:["access"],geometry:["vertex"],tags:{barrier:"kissing_gate"},name:"Kissing Gate"},"barrier/lift_gate":{icon:"maki-roadblock",fields:["access"],geometry:["vertex","line"],tags:{barrier:"lift_gate"},name:"Lift Gate"},"barrier/retaining_wall":{icon:"temaki-wall",fields:["height","material"],geometry:["line","area"],tags:{barrier:"retaining_wall"},name:"Retaining Wall"},"barrier/sally_port":{icon:"fas-dungeon",geometry:["vertex"],tags:{barrier:"sally_port"},terms:["Postern","castle side gate"],name:"Sally Port"},"barrier/stile":{icon:"maki-roadblock",fields:["access"],geometry:["vertex"],tags:{barrier:"stile"},name:"Stile"},"barrier/toll_booth":{icon:"maki-roadblock",fields:["access","building_area","payment_multi","currency_multi"],moreFields:["address","email","fax","opening_hours","phone","website"],geometry:["vertex","area"],tags:{barrier:"toll_booth"},name:"Toll Booth"},"barrier/turnstile":{icon:"maki-roadblock",fields:["access"],geometry:["vertex"],terms:["baffle gate","turnstyle"],tags:{barrier:"turnstile"},name:"Turnstile"},"barrier/wall":{icon:"temaki-wall",fields:["wall","height","material"],geometry:["line","area"],tags:{barrier:"wall"},name:"Wall",matchScore:0.25},"boundary/administrative":{fields:["name","admin_level"],geometry:["line"],tags:{boundary:"administrative"},name:"Administrative Boundary",matchScore:0.5},"bridge/support":{icon:"fas-archway",fields:["bridge/support"],moreFields:["material","seamark/type"],geometry:["point","vertex","area"],tags:{"bridge:support":"*"},name:"Bridge Support"},"bridge/support/pier":{icon:"fas-archway",fields:["bridge/support"],moreFields:["material","seamark/type"],geometry:["point","vertex","area"],tags:{"bridge:support":"pier"},name:"Bridge Pier"},building_part:{icon:"maki-building",fields:["levels","height","building/material","roof/colour"],moreFields:["layer"],geometry:["area"],tags:{"building:part":"*"},matchScore:0.5,terms:["roof","simple 3D buildings"],name:"Building Part"},building:{icon:"maki-home",fields:["name","building","levels","height","address"],moreFields:["architect","building/material","layer","roof/colour","smoking","wheelchair"],geometry:["area"],tags:{building:"*"},matchScore:0.6,terms:[],name:"Building"},"building/bunker":{geometry:["area"],tags:{building:"bunker"},matchScore:0.5,name:"Bunker",searchable:false},"building/entrance":{icon:"maki-entrance-alt1",fields:[],moreFields:[],geometry:["vertex"],tags:{building:"entrance"},name:"Entrance/Exit",searchable:false},"building/train_station":{icon:"maki-building",geometry:["point","vertex","area"],tags:{building:"train_station"},matchScore:0.5,name:"Train Station Building",searchable:false},"building/apartments":{icon:"maki-building",geometry:["area"],tags:{building:"apartments"},matchScore:0.5,name:"Apartment Building"},"building/barn":{icon:"maki-farm",geometry:["area"],tags:{building:"barn"},matchScore:0.5,name:"Barn"},"building/boathouse":{icon:"maki-harbor",geometry:["area"],tags:{building:"boathouse"},matchScore:0.5,terms:[],name:"Boathouse"},"building/bungalow":{icon:"maki-home",geometry:["area"],tags:{building:"bungalow"},terms:["home","detached"],matchScore:0.5,name:"Bungalow"},"building/cabin":{icon:"maki-home",geometry:["area"],tags:{building:"cabin"},matchScore:0.5,name:"Cabin"},"building/carport":{icon:"fas-warehouse",fields:["{building}","capacity"],geometry:["area"],tags:{building:"carport"},matchScore:0.5,terms:["covered parking space","garage","car","porch"],name:"Carport"},"building/cathedral":{icon:"maki-place-of-worship",geometry:["area"],tags:{building:"cathedral"},matchScore:0.5,name:"Cathedral Building"},"building/chapel":{icon:"maki-place-of-worship",geometry:["area"],tags:{building:"chapel"},matchScore:0.5,name:"Chapel Building"},"building/church":{icon:"maki-place-of-worship",geometry:["area"],tags:{building:"church"},matchScore:0.5,name:"Church Building"},"building/civic":{icon:"maki-building",fields:["{building}","smoking"],geometry:["area"],tags:{building:"civic"},matchScore:0.5,name:"Civic Building"},"building/college":{icon:"maki-building",geometry:["area"],terms:["university"],tags:{building:"college"},matchScore:0.5,name:"College Building"},"building/commercial":{icon:"maki-suitcase",fields:["{building}","smoking"],geometry:["area"],tags:{building:"commercial"},matchScore:0.5,name:"Commercial Building"},"building/construction":{icon:"maki-building",geometry:["area"],tags:{building:"construction"},matchScore:0.5,name:"Building Under Construction"},"building/detached":{icon:"maki-home",geometry:["area"],tags:{building:"detached"},terms:["home","single","family","residence","dwelling"],matchScore:0.5,name:"Detached House"},"building/dormitory":{icon:"maki-building",fields:["{building}","smoking"],geometry:["area"],tags:{building:"dormitory"},matchScore:0.5,name:"Dormitory"},"building/farm_auxiliary":{icon:"maki-farm",geometry:["area"],tags:{building:"farm_auxiliary"},matchScore:0.5,name:"Farm Building"},"building/farm":{icon:"maki-farm",geometry:["area"],tags:{building:"farm"},matchScore:0.5,name:"Farm House"},"building/garage":{icon:"fas-warehouse",fields:["{building}","capacity"],geometry:["area"],tags:{building:"garage"},matchScore:0.5,name:"Garage"},"building/garages":{icon:"fas-warehouse",fields:["{building}","capacity"],geometry:["area"],tags:{building:"garages"},matchScore:0.5,name:"Garages"},"building/grandstand":{icon:"maki-building",geometry:["area"],tags:{building:"grandstand"},terms:["tribune","stand","stands","bleachers"],matchScore:0.5,name:"Grandstand"},"building/greenhouse":{icon:"maki-garden-centre",geometry:["area"],tags:{building:"greenhouse"},matchScore:0.5,name:"Greenhouse"},"building/hangar":{icon:"fas-warehouse",fields:["name"],geometry:["area"],tags:{building:"hangar"},matchScore:0.5,name:"Hangar Building"},"building/hospital":{icon:"maki-building",geometry:["area"],tags:{building:"hospital"},matchScore:0.5,name:"Hospital Building"},"building/hotel":{icon:"maki-building",fields:["{building}","smoking"],geometry:["area"],tags:{building:"hotel"},matchScore:0.5,name:"Hotel Building"},"building/house":{icon:"maki-home",geometry:["area"],tags:{building:"house"},terms:["home","family","residence","dwelling"],matchScore:0.5,name:"House"},"building/houseboat":{icon:"maki-home",geometry:["area"],tags:{building:"houseboat"},terms:["home","family","residence","dwelling"],matchScore:0.5,name:"Houseboat"},"building/hut":{icon:"maki-home",geometry:["area"],tags:{building:"hut"},matchScore:0.5,name:"Hut"},"building/industrial":{icon:"maki-industry",geometry:["area"],tags:{building:"industrial"},matchScore:0.5,name:"Industrial Building"},"building/kindergarten":{icon:"maki-building",geometry:["area"],terms:["kindergarden","pre-school"],tags:{building:"kindergarten"},matchScore:0.5,name:"Preschool/Kindergarten Building"},"building/mosque":{icon:"maki-place-of-worship",geometry:["area"],tags:{building:"mosque"},matchScore:0.5,name:"Mosque Building"},"building/pavilion":{icon:"maki-building",fields:["{building}","smoking"],geometry:["area"],terms:["sports"],tags:{building:"pavilion"},matchScore:0.5,name:"Pavilion Building"},"building/public":{icon:"maki-building",fields:["{building}","smoking"],geometry:["area"],tags:{building:"public"},matchScore:0.5,name:"Public Building"},"building/residential":{icon:"maki-residential-community",geometry:["area"],tags:{building:"residential"},matchScore:0.5,name:"Residential Building"},"building/retail":{icon:"maki-commercial",fields:["{building}","smoking"],geometry:["area"],tags:{building:"retail"},matchScore:0.5,name:"Retail Building"},"building/roof":{icon:"maki-shelter",fields:["{building}","layer"],geometry:["area"],tags:{building:"roof"},matchScore:0.5,name:"Roof"},"building/ruins":{icon:"temaki-ruins",geometry:["area"],tags:{building:"ruins"},matchScore:0.5,name:"Building Ruins"},"building/school":{icon:"maki-building",geometry:["area"],terms:["academy","elementary school","middle school","high school"],tags:{building:"school"},matchScore:0.5,name:"School Building"},"building/semidetached_house":{icon:"maki-home",geometry:["area"],tags:{building:"semidetached_house"},terms:["home","double","duplex","twin","family","residence","dwelling"],matchScore:0.5,name:"Semi-Detached House"},"building/service":{icon:"maki-home",geometry:["area"],tags:{building:"service"},matchScore:0.5,name:"Service Building"},"building/shed":{icon:"maki-home",geometry:["area"],tags:{building:"shed"},matchScore:0.5,name:"Shed"},"building/stable":{icon:"maki-horse-riding",geometry:["area"],tags:{building:"stable"},matchScore:0.5,name:"Stable"},"building/stadium":{icon:"maki-stadium",fields:["{building}","smoking"],geometry:["area"],tags:{building:"stadium"},matchScore:0.5,name:"Stadium Building"},"building/static_caravan":{icon:"maki-home",geometry:["area"],tags:{building:"static_caravan"},matchScore:0.5,name:"Static Mobile Home"},"building/temple":{icon:"maki-place-of-worship",geometry:["area"],tags:{building:"temple"},matchScore:0.5,name:"Temple Building"},"building/terrace":{icon:"maki-building",geometry:["area"],tags:{building:"terrace"},terms:["home","terrace","brownstone","family","residence","dwelling"],matchScore:0.5,name:"Row Houses"},"building/transportation":{icon:"maki-building",fields:["{building}","smoking"],geometry:["area"],tags:{building:"transportation"},matchScore:0.5,name:"Transportation Building"},"building/university":{icon:"maki-building",geometry:["area"],terms:["college"],tags:{building:"university"},matchScore:0.5,name:"University Building"},"building/warehouse":{icon:"maki-warehouse",geometry:["area"],tags:{building:"warehouse"},matchScore:0.5,name:"Warehouse"},"camp_site/camp_pitch":{icon:"maki-campsite",fields:["name","ref"],geometry:["point","area"],terms:["tent","rv"],tags:{camp_site:"camp_pitch"},name:"Camp Pitch"},club:{icon:"fas-handshake",fields:["name","club","operator","address","building_area","opening_hours"],moreFields:["access_simple","building/levels_building","height_building","email","fax","internet_access","internet_access/fee","internet_access/ssid","phone","website","wheelchair"],geometry:["point","area"],tags:{club:"*"},terms:["social"],name:"Club"},"club/sport":{icon:"maki-pitch",fields:["name","sport","{club}"],geometry:["point","area"],tags:{club:"sport"},terms:["athletics club","sporting club","sports association","sports society"],name:"Sports Club"},craft:{icon:"temaki-tools",fields:["name","craft","operator","address","building_area","opening_hours"],moreFields:["air_conditioning","building/levels_building","height_building","email","fax","internet_access","internet_access/fee","internet_access/ssid","phone","product","website","wheelchair"],geometry:["point","area"],tags:{craft:"*"},terms:[],name:"Craft"},"craft/jeweler":{icon:"maki-marker-stroked",geometry:["point","area"],tags:{craft:"jeweler"},reference:{key:"shop",value:"jewelry"},name:"Jeweler",searchable:false,replacement:"shop/jewelry"},"craft/locksmith":{icon:"maki-marker-stroked",geometry:["point","area"],tags:{craft:"locksmith"},reference:{key:"shop",value:"locksmith"},name:"Locksmith",searchable:false},"craft/optician":{icon:"maki-marker-stroked",geometry:["point","area"],tags:{craft:"optician"},reference:{key:"shop",value:"optician"},name:"Optician",searchable:false,replacement:"shop/optician"},"craft/tailor":{icon:"maki-clothing-store",geometry:["point","area"],terms:["clothes","suit"],tags:{craft:"tailor"},reference:{key:"shop",value:"tailor"},name:"Tailor",searchable:false},"craft/agricultural_engines":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"agricultural_engines"},name:"Argricultural Engines Mechanic"},"craft/basket_maker":{icon:"maki-art-gallery",geometry:["point","area"],tags:{craft:"basket_maker"},name:"Basket Maker"},"craft/beekeeper":{icon:"maki-farm",geometry:["point","area"],tags:{craft:"beekeeper"},name:"Beekeeper"},"craft/blacksmith":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"blacksmith"},name:"Blacksmith"},"craft/boatbuilder":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"boatbuilder"},matchScore:0.4,name:"Boat Builder"},"craft/bookbinder":{icon:"maki-library",geometry:["point","area"],terms:["book repair"],tags:{craft:"bookbinder"},name:"Bookbinder"},"craft/brewery":{icon:"temaki-storage_tank",fields:["{craft}","product"],geometry:["point","area"],terms:["alcohol","beer","beverage","bier","booze","cider"],tags:{craft:"brewery"},name:"Brewery"},"craft/carpenter":{icon:"temaki-tools",geometry:["point","area"],terms:["woodworker"],tags:{craft:"carpenter"},name:"Carpenter"},"craft/carpet_layer":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"carpet_layer"},name:"Carpet Layer"},"craft/caterer":{icon:"maki-restaurant",fields:["name","cuisine","{craft}"],geometry:["point","area"],tags:{craft:"caterer"},name:"Caterer"},"craft/chimney_sweeper":{icon:"temaki-chimney",geometry:["point","area"],tags:{craft:"chimney_sweeper"},name:"Chimney Sweeper"},"craft/clockmaker":{icon:"temaki-clock",geometry:["point","area"],tags:{craft:"clockmaker"},name:"Clockmaker"},"craft/confectionery":{icon:"maki-confectionery",geometry:["point","area"],terms:["sweet","candy"],tags:{craft:"confectionery"},name:"Candy Maker"},"craft/distillery":{icon:"temaki-storage_tank",fields:["{craft}","product"],geometry:["point","area"],terms:["alcohol","beverage","bourbon","booze","brandy","gin","hooch","liquor","mezcal","moonshine","rum","scotch","spirits","still","tequila","vodka","whiskey","whisky"],tags:{craft:"distillery"},name:"Distillery"},"craft/dressmaker":{icon:"maki-clothing-store",geometry:["point","area"],terms:["seamstress"],tags:{craft:"dressmaker"},name:"Dressmaker"},"craft/electrician":{icon:"temaki-power",geometry:["point","area"],terms:["power","wire"],tags:{craft:"electrician"},name:"Electrician"},"craft/electronics_repair":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"electronics_repair"},name:"Electronics Repair Shop"},"craft/floorer":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"floorer"},name:"Floorer"},"craft/gardener":{icon:"maki-garden-centre",geometry:["point","area"],terms:["landscaper","grounds keeper"],tags:{craft:"gardener"},name:"Gardener"},"craft/glaziery":{icon:"temaki-window",geometry:["point","area"],terms:["glass","stained-glass","window"],tags:{craft:"glaziery"},name:"Glaziery"},"craft/handicraft":{icon:"maki-art-gallery",geometry:["point","area"],tags:{craft:"handicraft"},name:"Handicraft"},"craft/hvac":{icon:"temaki-tools",geometry:["point","area"],terms:["heat*","vent*","air conditioning"],tags:{craft:"hvac"},name:"HVAC"},"craft/insulator":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"insulation"},name:"Insulator"},"craft/joiner":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"joiner"},terms:["furniture"],name:"Joiner"},"craft/key_cutter":{icon:"fas-key",geometry:["point","area"],tags:{craft:"key_cutter"},name:"Key Cutter"},"craft/metal_construction":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"metal_construction"},name:"Metal Construction"},"craft/painter":{icon:"fas-paint-roller",geometry:["point","area"],tags:{craft:"painter"},name:"Painter"},"craft/parquet_layer":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"parquet_layer"},name:"Parquet Layer"},"craft/photographer":{icon:"maki-attraction",geometry:["point","area"],tags:{craft:"photographer"},name:"Photographer"},"craft/photographic_laboratory":{icon:"fas-film",geometry:["point","area"],terms:["film"],tags:{craft:"photographic_laboratory"},name:"Photographic Laboratory"},"craft/plasterer":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"plasterer"},name:"Plasterer"},"craft/plumber":{icon:"temaki-plumber",geometry:["point","area"],terms:["pipe"],tags:{craft:"plumber"},name:"Plumber"},"craft/pottery":{icon:"maki-art-gallery",geometry:["point","area"],terms:["ceramic"],tags:{craft:"pottery"},name:"Pottery"},"craft/rigger":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"rigger"},name:"Rigger"},"craft/roofer":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"roofer"},name:"Roofer"},"craft/saddler":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"saddler"},name:"Saddler"},"craft/sailmaker":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"sailmaker"},name:"Sailmaker"},"craft/sawmill":{icon:"maki-logging",geometry:["point","area"],terms:["lumber"],tags:{craft:"sawmill"},name:"Sawmill"},"craft/scaffolder":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"scaffolder"},name:"Scaffolder"},"craft/sculptor":{icon:"maki-art-gallery",geometry:["point","area"],tags:{craft:"sculptor"},name:"Sculptor"},"craft/shoemaker":{icon:"maki-shoe",geometry:["point","area"],terms:["cobbler"],tags:{craft:"shoemaker"},name:"Shoemaker"},"craft/stonemason":{icon:"temaki-tools",geometry:["point","area"],terms:["masonry"],tags:{craft:"stonemason"},name:"Stonemason"},"craft/tiler":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"tiler"},name:"Tiler"},"craft/tinsmith":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"tinsmith"},name:"Tinsmith"},"craft/upholsterer":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"upholsterer"},name:"Upholsterer"},"craft/watchmaker":{icon:"maki-watch",geometry:["point","area"],tags:{craft:"watchmaker"},name:"Watchmaker"},"craft/window_construction":{icon:"temaki-window",geometry:["point","area"],terms:["glass"],tags:{craft:"window_construction"},name:"Window Construction"},"craft/winery":{icon:"maki-alcohol-shop",geometry:["point","area"],tags:{craft:"winery"},name:"Winery"},"emergency/designated":{fields:["emergency_combo"],geometry:["line"],tags:{emergency:"designated"},terms:[],name:"Emergency Access Designated",searchable:false,matchScore:0.01},"emergency/destination":{fields:["emergency_combo"],geometry:["line"],tags:{emergency:"destination"},terms:[],name:"Emergency Access Destination",searchable:false,matchScore:0.01},"emergency/no":{fields:["emergency_combo"],geometry:["line"],tags:{emergency:"no"},terms:[],name:"Emergency Access No",searchable:false,matchScore:0.01},"emergency/official":{fields:["emergency_combo"],geometry:["line"],tags:{emergency:"official"},terms:[],name:"Emergency Access Official",searchable:false,matchScore:0.01},"emergency/private":{fields:["emergency_combo"],geometry:["line"],tags:{emergency:"private"},terms:[],name:"Emergency Access Private",searchable:false,matchScore:0.01},"emergency/yes":{fields:["emergency_combo"],geometry:["line"],tags:{emergency:"yes"},terms:[],name:"Emergency Access Yes",searchable:false,matchScore:0.01},"emergency/ambulance_station":{icon:"fas-ambulance",fields:["name","operator","building_area","address"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["EMS","EMT","rescue"],tags:{emergency:"ambulance_station"},name:"Ambulance Station"},"emergency/defibrillator":{icon:"maki-defibrillator",fields:["indoor","ref","operator"],geometry:["point","vertex"],terms:["AED"],tags:{emergency:"defibrillator"},name:"Defibrillator"},"emergency/fire_alarm":{icon:"fas-bell",fields:["indoor","ref","operator"],geometry:["point","vertex"],tags:{emergency:"fire_alarm_box"},name:"Fire Alarm Call Box"},"emergency/fire_extinguisher":{icon:"fas-fire-extinguisher",fields:["indoor","ref","operator"],geometry:["point","vertex"],tags:{emergency:"fire_extinguisher"},name:"Fire Extinguisher"},"emergency/fire_hose":{icon:"fas-fire-extinguisher",fields:["indoor","ref","operator"],geometry:["point","vertex"],tags:{emergency:"fire_hose"},name:"Fire Hose"},"emergency/fire_hydrant":{icon:"temaki-fire_hydrant",fields:["ref","fire_hydrant/type","colour","water_source","couplings"],moreFields:["fire_hydrant/pressure","fire_hydrant/diameter","water_volume","survey/date"],geometry:["point","vertex"],terms:["fire plug","fire water well","hydrant"],tags:{emergency:"fire_hydrant"},name:"Fire Hydrant"},"emergency/first_aid_kit":{icon:"fas-medkit",fields:["indoor","ref","operator"],geometry:["point","vertex"],terms:["bandage","first aid","med","med kit","medic*","medkit"],tags:{emergency:"first_aid_kit"},name:"First Aid Kit"},"emergency/life_ring":{icon:"fas-life-ring",fields:["ref","operator"],geometry:["point","vertex"],terms:["life buoy","kisby ring","kisbie ring","perry buoy"],tags:{emergency:"life_ring"},name:"Life Ring"},"emergency/lifeguard":{icon:"fas-life-ring",fields:["ref","operator","building_area","opening_hours"],geometry:["point","area"],terms:["CPR","rescue"],tags:{emergency:"lifeguard"},name:"Lifeguard"},"emergency/phone":{icon:"maki-emergency-phone",fields:["ref","operator","covered","indoor","booth"],geometry:["point","vertex"],tags:{emergency:"phone"},name:"Emergency Phone"},"emergency/siren":{icon:"fas-volume-up",fields:["siren/purpose","siren/type","ref","operator"],geometry:["point","vertex"],terms:["air raid","loud","noise","storm","tornado","warning"],tags:{emergency:"siren"},name:"Siren"},"emergency/water_tank":{icon:"maki-water",fields:["name","ref","operator"],geometry:["point","vertex"],terms:["water tank","cistern","reservoir"],tags:{emergency:"water_tank"},name:"Emergency Water Tank"},entrance:{icon:"maki-entrance-alt1",geometry:["vertex"],terms:["entrance","exit","door"],tags:{entrance:"*"},fields:["entrance","door","access_simple","address"],matchScore:0.8,name:"Entrance/Exit"},ford:{icon:"temaki-pedestrian",geometry:["vertex"],tags:{ford:"yes"},name:"Ford"},"golf/bunker":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"bunker",natural:"sand"},terms:["hazard","bunker"],reference:{key:"golf",value:"bunker"},name:"Sand Trap"},"golf/cartpath":{icon:"temaki-golf_cart",fields:["{golf/path}","maxspeed"],geometry:["line"],tags:{golf:"cartpath"},addTags:{golf:"cartpath",golf_cart:"designated",highway:"service"},reference:{key:"golf",value:"cartpath"},name:"Golf Cartpath"},"golf/driving_range":{icon:"maki-golf",fields:["name","capacity"],geometry:["area"],tags:{golf:"driving_range",landuse:"grass"},reference:{key:"golf",value:"driving_range"},name:"Driving Range"},"golf/fairway":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"fairway",landuse:"grass"},reference:{key:"golf",value:"fairway"},name:"Fairway"},"golf/green":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"green",landuse:"grass",leisure:"pitch",sport:"golf"},reference:{key:"golf",value:"green"},name:"Putting Green"},"golf/hole":{icon:"maki-golf",fields:["name","ref_golf_hole","par","handicap"],geometry:["line"],tags:{golf:"hole"},name:"Golf Hole"},"golf/lateral_water_hazard":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"lateral_water_hazard",natural:"water"},reference:{key:"golf",value:"lateral_water_hazard"},name:"Lateral Water Hazard"},"golf/path":{icon:"maki-golf",fields:["name","surface","width","structure","incline"],geometry:["line"],tags:{golf:"path"},addTags:{golf:"path",highway:"path",foot:"designated"},reference:{key:"golf",value:"path"},name:"Golf Walking Path"},"golf/rough":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"rough",landuse:"grass"},reference:{key:"golf",value:"rough"},name:"Rough"},"golf/tee":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"tee",landuse:"grass"},terms:["teeing ground"],reference:{key:"golf",value:"tee"},name:"Tee Box"},"golf/water_hazard":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"water_hazard",natural:"water"},reference:{key:"golf",value:"water_hazard"},name:"Water Hazard"},healthcare:{icon:"maki-hospital",fields:["name","healthcare","operator","healthcare/speciality","address","building_area"],moreFields:["building/levels_building","height_building","opening_hours","payment_multi","brand","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{healthcare:"*"},terms:["clinic","doctor","disease","health","institution","sick","surgery","wellness"],name:"Healthcare Facility"},"healthcare/alternative":{icon:"maki-hospital",geometry:["point","area"],terms:["acupuncture","anthroposophical","applied kinesiology","aromatherapy","ayurveda","herbalism","homeopathy","hydrotherapy","hypnosis","naturopathy","osteopathy","reflexology","reiki","shiatsu","traditional","tuina","unani"],tags:{healthcare:"alternative"},name:"Alternative Medicine"},"healthcare/alternative/chiropractic":{icon:"maki-hospital",geometry:["point","area"],terms:["back","pain","spine"],tags:{healthcare:"alternative","healthcare:speciality":"chiropractic"},name:"Chiropractor"},"healthcare/audiologist":{icon:"maki-hospital",geometry:["point","area"],terms:["ear","hearing","sound"],tags:{healthcare:"audiologist"},name:"Audiologist"},"healthcare/birthing_center":{icon:"fas-baby",geometry:["point","area"],terms:["baby","childbirth","delivery","labour","labor","pregnancy"],tags:{healthcare:"birthing_center"},name:"Birthing Center"},"healthcare/blood_donation":{icon:"maki-blood-bank",fields:["{healthcare}","blood_components"],geometry:["point","area"],terms:["blood bank","blood donation","blood transfusion","apheresis","plasmapheresis","plateletpheresis","stem cell donation"],tags:{healthcare:"blood_donation"},name:"Blood Donor Center"},"healthcare/hospice":{icon:"maki-hospital",geometry:["point","area"],terms:["terminal","illness"],tags:{healthcare:"hospice"},name:"Hospice"},"healthcare/laboratory":{icon:"fas-vial",fields:["name","operator","website","ref","address","opening_hours"],geometry:["point","area"],terms:["medical_laboratory","medical_lab","blood_check"],tags:{healthcare:"laboratory"},name:"Medical Laboratory"},"healthcare/midwife":{icon:"maki-hospital",geometry:["point","area"],terms:["baby","childbirth","delivery","labour","labor","pregnancy"],tags:{healthcare:"midwife"},name:"Midwife"},"healthcare/occupational_therapist":{icon:"maki-hospital",geometry:["point","area"],terms:["therapist","therapy"],tags:{healthcare:"occupational_therapist"},name:"Occupational Therapist"},"healthcare/optometrist":{icon:"fas-eye",geometry:["point","area"],terms:["eye","glasses","lasik","lenses","vision"],tags:{healthcare:"optometrist"},name:"Optometrist"},"healthcare/physiotherapist":{icon:"temaki-physiotherapist",geometry:["point","area"],terms:["physical","therapist","therapy"],tags:{healthcare:"physiotherapist"},name:"Physiotherapist"},"healthcare/podiatrist":{icon:"maki-hospital",geometry:["point","area"],terms:["foot","feet","nails"],tags:{healthcare:"podiatrist"},name:"Podiatrist"},"healthcare/psychotherapist":{icon:"maki-hospital",geometry:["point","area"],terms:["anxiety","counselor","depression","mental health","mind","suicide","therapist","therapy"],tags:{healthcare:"psychotherapist"},name:"Psychotherapist"},"healthcare/rehabilitation":{icon:"maki-hospital",geometry:["point","area"],terms:["rehab","therapist","therapy"],tags:{healthcare:"rehabilitation"},name:"Rehabilitation Facility"},"healthcare/speech_therapist":{icon:"fas-comment",geometry:["point","area"],terms:["speech","therapist","therapy","voice"],tags:{healthcare:"speech_therapist"},name:"Speech Therapist"},"highway/bus_stop":{icon:"maki-bus",fields:["name","network","operator","bench","shelter"],geometry:["point","vertex"],tags:{highway:"bus_stop"},matchScore:0.95,name:"Bus Stop",searchable:false,replacement:"public_transport/platform/bus_point"},"highway/crossing":{fields:["crossing"],geometry:["vertex"],tags:{highway:"crossing"},searchable:false,matchScore:0.95,name:"Crossing"},"highway/bridleway":{fields:["name","surface","width","structure","access","incline","horse_scale"],moreFields:["covered","dog","lit","maxweight_bridge","smoothness","wheelchair"],icon:"maki-horse-riding",geometry:["line"],tags:{highway:"bridleway"},terms:["bridleway","equestrian","horse","trail"],name:"Bridle Path"},"highway/bus_guideway":{icon:"maki-bus",fields:["name","operator","oneway","structure","covered"],moreFields:["trolley_wire"],geometry:["line"],tags:{highway:"bus_guideway"},addTags:{highway:"bus_guideway",access:"no",bus:"designated"},terms:[],name:"Bus Guideway"},"highway/construction":{icon:"maki-barrier",fields:["name","opening_date","check_date","note","oneway","structure","access"],geometry:["line"],tags:{highway:"construction",access:"no"},terms:["closed","closure","construction"],name:"Road Closed"},"highway/corridor":{icon:"temaki-pedestrian",fields:["name","width","level","access_simple","wheelchair"],moreFields:["covered","indoor","maxheight"],geometry:["line"],tags:{highway:"corridor"},addTags:{highway:"corridor",indoor:"yes"},terms:["gallery","hall","hallway","indoor","passage","passageway"],name:"Indoor Corridor"},"highway/crossing/zebra-raised":{icon:"temaki-pedestrian",fields:["crossing","tactile_paving"],geometry:["vertex"],tags:{highway:"crossing",crossing:"zebra",traffic_calming:"table"},reference:{key:"traffic_calming",value:"table"},terms:["zebra crossing","marked crossing","crosswalk","flat top","hump","speed","slow"],name:"Marked Crosswalk (Raised)",searchable:false},"highway/crossing/zebra":{icon:"temaki-pedestrian",fields:["crossing","tactile_paving"],geometry:["vertex"],tags:{highway:"crossing",crossing:"zebra"},reference:{key:"highway",value:"crossing"},terms:["zebra crossing","marked crossing","crosswalk"],name:"Marked Crosswalk",searchable:false},"highway/crossing/marked-raised":{icon:"temaki-pedestrian",fields:["crossing","tactile_paving"],geometry:["vertex"],tags:{crossing:"marked",traffic_calming:"table"},addTags:{highway:"crossing",crossing:"marked",traffic_calming:"table"},reference:{key:"traffic_calming",value:"table"},terms:["zebra crossing","marked crossing","crosswalk","flat top","hump","speed","slow"],name:"Marked Crosswalk (Raised)"},"highway/crossing/marked":{icon:"temaki-pedestrian",fields:["crossing","tactile_paving"],geometry:["vertex"],tags:{crossing:"marked"},addTags:{highway:"crossing",crossing:"marked"},reference:{key:"highway",value:"crossing"},terms:["zebra crossing","marked crossing","crosswalk"],name:"Marked Crosswalk"},"highway/crossing/unmarked-raised":{icon:"temaki-pedestrian",fields:["crossing","tactile_paving"],geometry:["vertex"],tags:{highway:"crossing",crossing:"unmarked",traffic_calming:"table"},reference:{key:"traffic_calming",value:"table"},terms:["flat top","hump","speed","slow"],name:"Unmarked Crossing (Raised)"},"highway/crossing/unmarked":{icon:"temaki-pedestrian",fields:["crossing","tactile_paving"],geometry:["vertex"],tags:{crossing:"unmarked"},addTags:{highway:"crossing",crossing:"unmarked"},reference:{key:"crossing",value:"unmarked"},terms:[],name:"Unmarked Crossing"},"highway/cycleway":{icon:"maki-bicycle",fields:["name","oneway","surface","width","structure","access","incline"],moreFields:["covered","dog","lit","maxspeed","maxweight_bridge","smoothness","wheelchair"],geometry:["line"],tags:{highway:"cycleway"},terms:["bike path","bicyle path"],matchScore:0.9,name:"Cycle Path"},"highway/cycleway/crossing":{icon:"maki-bicycle",fields:["crossing","access","surface","tactile_paving"],geometry:["line"],tags:{cycleway:"crossing"},addTags:{highway:"cycleway",cycleway:"crossing"},reference:{key:"cycleway",value:"crossing"},searchable:false,matchScore:0.95,name:"Cycle Crossing"},"highway/cycleway/bicycle_foot":{icon:"maki-bicycle",geometry:["line"],tags:{highway:"cycleway",foot:"designated"},addTags:{highway:"cycleway",foot:"designated",bicycle:"designated"},terms:["bicycle and foot path","bike and pedestrian path","green way","greenway","mixed-use trail","multi-use trail","segregated trail"],matchScore:0.95,name:"Cycle & Foot Path"},"highway/cycleway/crossing/marked":{icon:"maki-bicycle",fields:["crossing","access","surface","tactile_paving"],geometry:["line"],tags:{cycleway:"crossing",crossing:"marked"},addTags:{highway:"cycleway",cycleway:"crossing",crossing:"marked"},reference:{key:"cycleway",value:"crossing"},terms:["cycle crosswalk","cycle path crossing","cycleway crossing","bicycle crossing","bike crossing"],name:"Marked Cycle Crossing"},"highway/cycleway/crossing/unmarked":{icon:"maki-bicycle",fields:["crossing","access","surface","tactile_paving"],geometry:["line"],tags:{cycleway:"crossing",crossing:"unmarked"},addTags:{highway:"cycleway",cycleway:"crossing",crossing:"unmarked"},reference:{key:"cycleway",value:"crossing"},terms:["cycle path crossing","cycleway crossing","bicycle crossing","bike crossing"],name:"Unmarked Cycle Crossing"},"highway/elevator":{icon:"temaki-elevator",fields:["access_simple","opening_hours","maxweight","ref","wheelchair"],moreFields:["maxheight"],geometry:["vertex"],tags:{highway:"elevator"},terms:["lift"],name:"Elevator"},"highway/emergency_bay":{icon:"maki-car",geometry:["vertex"],tags:{highway:"emergency_bay"},terms:["Highway Emergency Bay"],name:"Emergency Stopping Place"},"highway/footway":{icon:"temaki-pedestrian",fields:["name","surface","width","structure","access","incline"],moreFields:["covered","dog","lit","maxweight_bridge","smoothness","wheelchair"],geometry:["line"],terms:["hike","hiking","promenade","trackway","trail","walk"],tags:{highway:"footway"},matchScore:0.9,name:"Foot Path"},"highway/footway/crossing":{fields:["crossing","access","surface","tactile_paving"],geometry:["line"],tags:{footway:"crossing"},addTags:{highway:"footway",footway:"crossing"},reference:{key:"footway",value:"crossing"},matchScore:0.95,searchable:false,name:"Pedestrian Crossing"},"highway/footway/zebra-raised":{icon:"temaki-pedestrian",fields:["crossing","access","surface","tactile_paving"],geometry:["line"],tags:{highway:"footway",footway:"crossing",crossing:"zebra",traffic_calming:"table"},reference:{key:"traffic_calming",value:"table"},terms:["zebra crossing","marked crossing","crosswalk","flat top","hump","speed","slow"],name:"Marked Crosswalk (Raised)",searchable:false},"highway/footway/zebra":{icon:"temaki-pedestrian",fields:["crossing","access","surface","tactile_paving"],geometry:["line"],tags:{highway:"footway",footway:"crossing",crossing:"zebra"},reference:{key:"footway",value:"crossing"},terms:["zebra crossing","marked crossing","crosswalk"],name:"Marked Crosswalk",searchable:false},"highway/footway/conveying":{icon:"temaki-pedestrian",fields:["name","conveying","access_simple","lit","width","wheelchair"],geometry:["line"],terms:["moving sidewalk","autwalk","skywalk","travolator","travelator","travellator","conveyor"],tags:{highway:"footway",conveying:"*"},name:"Moving Walkway"},"highway/footway/marked-raised":{icon:"temaki-pedestrian",fields:["crossing","access","surface","tactile_paving"],geometry:["line"],tags:{footway:"crossing",crossing:"marked",traffic_calming:"table"},addTags:{highway:"footway",footway:"crossing",crossing:"marked",traffic_calming:"table"},reference:{key:"traffic_calming",value:"table"},terms:["zebra crossing","marked crossing","crosswalk","flat top","hump","speed","slow"],name:"Marked Crosswalk (Raised)"},"highway/footway/marked":{icon:"temaki-pedestrian",fields:["crossing","access","surface","tactile_paving"],geometry:["line"],tags:{footway:"crossing",crossing:"marked"},addTags:{highway:"footway",footway:"crossing",crossing:"marked"},reference:{key:"footway",value:"crossing"},terms:["marked foot path crossing","marked crossing","marked pedestrian crosswalk","zebra crossing"],name:"Marked Crosswalk"},"highway/footway/sidewalk":{icon:"temaki-pedestrian",geometry:["line"],tags:{footway:"sidewalk"},addTags:{highway:"footway",footway:"sidewalk"},reference:{key:"footway",value:"sidewalk"},terms:["pavement","sidepath"],name:"Sidewalk"},"highway/footway/unmarked-raised":{icon:"temaki-pedestrian",fields:["crossing","access","surface","tactile_paving"],geometry:["line"],tags:{footway:"crossing",crossing:"unmarked",traffic_calming:"table"},addTags:{highway:"footway",footway:"crossing",crossing:"unmarked",traffic_calming:"table"},reference:{key:"traffic_calming",value:"table"},terms:["flat top","hump","speed","slow"],name:"Unmarked Crossing (Raised)"},"highway/footway/unmarked":{icon:"temaki-pedestrian",fields:["crossing","access","surface","tactile_paving"],geometry:["line"],tags:{footway:"crossing",crossing:"unmarked"},addTags:{highway:"footway",footway:"crossing",crossing:"unmarked"},reference:{key:"footway",value:"crossing"},terms:["unmarked foot path crossing","unmarked crosswalk","unmarked pedestrian crossing"],name:"Unmarked Crossing"},"highway/give_way":{icon:"temaki-yield",fields:["direction_vertex"],geometry:["vertex"],tags:{highway:"give_way"},terms:["give way","yield","sign"],name:"Yield Sign"},"highway/living_street":{icon:"iD-highway-living-street",fields:["name","oneway","maxspeed","lanes","surface","structure","access"],moreFields:["covered","cycleway","flood_prone","junction_line","lit","maxheight","maxweight_bridge","oneway/bicycle","smoothness","trolley_wire"],geometry:["line"],tags:{highway:"living_street"},name:"Living Street"},"highway/milestone":{icon:"temaki-milestone",geometry:["point","vertex"],fields:["distance","direction_vertex"],tags:{highway:"milestone"},terms:["mile marker","mile post","mile stone","mileage marker","milemarker","milepost"],name:"Highway Milestone"},"highway/mini_roundabout":{icon:"maki-circle-stroked",geometry:["vertex"],terms:["traffic circle"],tags:{highway:"mini_roundabout"},fields:["direction_clock"],name:"Mini-Roundabout"},"highway/motorway_junction":{icon:"temaki-junction",fields:["ref_highway_junction","name"],geometry:["vertex"],tags:{highway:"motorway_junction"},terms:["exit"],name:"Motorway Junction / Exit"},"highway/motorway_link":{icon:"iD-highway-motorway-link",fields:["destination_oneway","destination/ref_oneway","junction/ref_oneway","oneway","maxspeed","lanes","surface","structure","access"],moreFields:["covered","destination/symbol_oneway","incline","junction_line","lit","maxheight","maxspeed/advisory","maxweight_bridge","name","ref_road_number","smoothness","toll"],geometry:["line"],tags:{highway:"motorway_link"},addTags:{highway:"motorway_link",oneway:"yes"},terms:["exit","ramp","road","street","on ramp","off ramp"],name:"Motorway Link"},"highway/motorway":{icon:"iD-highway-motorway",fields:["name","ref_road_number","oneway_yes","maxspeed","lanes","surface","structure","access"],moreFields:["covered","incline","junction_line","lit","maxheight","maxweight_bridge","minspeed","smoothness","toll"],geometry:["line"],tags:{highway:"motorway"},terms:["autobahn","expressway","freeway","highway","interstate","parkway","road","street","thruway","turnpike"],name:"Motorway"},"highway/passing_place":{icon:"maki-circle-stroked",geometry:["vertex"],tags:{highway:"passing_place"},terms:["turnout, pullout"],name:"Passing Place"},"highway/path":{icon:"iD-other-line",fields:["name","surface","width","structure","access","incline"],moreFields:["wheelchair","lit","smoothness","trail_visibility","sac_scale","maxweight_bridge","mtb/scale","mtb/scale/uphill","mtb/scale/imba","horse_scale","covered","ref","dog"],geometry:["line"],terms:["hike","hiking","trackway","trail","walk"],tags:{highway:"path"},name:"Path"},"highway/pedestrian_area":{icon:"temaki-pedestrian",fields:["name","surface","lit","width","structure","access"],geometry:["area"],tags:{highway:"pedestrian",area:"yes"},terms:["center","centre","plaza","quad","square","walkway"],name:"Pedestrian Area"},"highway/pedestrian_line":{icon:"temaki-pedestrian",fields:["name","surface","lit","width","oneway","structure","access"],moreFields:["covered","incline","maxweight_bridge","smoothness"],geometry:["line"],tags:{highway:"pedestrian"},terms:["center","centre","plaza","quad","square","walkway"],name:"Pedestrian Street"},"highway/primary_link":{icon:"iD-highway-primary-link",fields:["destination_oneway","destination/ref_oneway","oneway","maxspeed","lanes","surface","structure","access"],moreFields:["covered","cycleway","destination/symbol_oneway","flood_prone","incline","junction/ref_oneway","junction_line","lit","maxheight","maxspeed/advisory","maxweight_bridge","name","oneway/bicycle","ref_road_number","smoothness","toll","trolley_wire"],geometry:["line"],tags:{highway:"primary_link"},terms:["on ramp","off ramp","ramp","road","street"],name:"Primary Link"},"highway/primary":{icon:"iD-highway-primary",fields:["name","oneway","maxspeed","lanes","surface","structure","ref_road_number","access"],moreFields:["covered","cycleway","flood_prone","incline","junction_line","lit","maxheight","maxspeed/advisory","maxweight_bridge","oneway/bicycle","smoothness","toll","trolley_wire"],geometry:["line"],tags:{highway:"primary"},terms:["road","street"],name:"Primary Road"},"highway/raceway":{icon:"fas-flag-checkered",fields:["name","oneway","surface","sport_racing_motor","lit","width","lanes","structure"],geometry:["point","line","area"],tags:{highway:"raceway"},addTags:{highway:"raceway",sport:"motor"},terms:["auto*","formula one","kart","motocross","nascar","race*","track"],name:"Racetrack (Motorsport)"},"highway/residential":{icon:"iD-highway-residential",fields:["name","oneway","maxspeed","lanes","surface","structure","access"],moreFields:["covered","cycleway","flood_prone","incline","junction_line","lit","oneway/bicycle","maxheight","maxspeed/advisory","maxweight_bridge","smoothness","trolley_wire"],geometry:["line"],tags:{highway:"residential"},terms:["road","street"],name:"Residential Road"},"highway/rest_area":{icon:"maki-car",fields:["name","operator","opening_hours"],moreFields:["address","website","phone","email","fax","wheelchair"],geometry:["point","vertex","area"],tags:{highway:"rest_area"},terms:["rest stop"],name:"Rest Area"},"highway/road":{icon:"iD-other-line",fields:["highway","{highway/residential}"],moreFields:["{highway/residential}"],geometry:["line"],tags:{highway:"road"},terms:["road","street"],name:"Unknown Road"},"highway/secondary_link":{icon:"iD-highway-secondary-link",fields:["{highway/primary_link}"],moreFields:["{highway/primary_link}"],geometry:["line"],tags:{highway:"secondary_link"},terms:["on ramp","off ramp","ramp","road","street"],name:"Secondary Link"},"highway/secondary":{icon:"iD-highway-secondary",fields:["{highway/primary}"],moreFields:["{highway/primary}"],geometry:["line"],tags:{highway:"secondary"},terms:["road","street"],name:"Secondary Road"},"highway/service":{icon:"iD-highway-service",fields:["name","service","oneway","maxspeed","surface","covered","structure","access"],moreFields:["flood_prone","incline","lanes","lit","maxheight","maxspeed/advisory","maxweight_bridge","oneway/bicycle","trolley_wire"],geometry:["line"],tags:{highway:"service"},terms:["road","street"],matchScore:0.9,name:"Service Road"},"highway/service/alley":{icon:"iD-highway-service",geometry:["line"],tags:{service:"alley"},addTags:{highway:"service",service:"alley"},reference:{key:"service",value:"alley"},name:"Alley"},"highway/service/drive-through":{icon:"iD-highway-service",geometry:["line"],tags:{service:"drive-through"},addTags:{highway:"service",service:"drive-through"},reference:{key:"service",value:"drive-through"},name:"Drive-Through"},"highway/service/driveway":{icon:"iD-highway-service",geometry:["line"],tags:{service:"driveway"},addTags:{highway:"service",service:"driveway"},reference:{key:"service",value:"driveway"},name:"Driveway"},"highway/service/emergency_access":{icon:"iD-highway-service",geometry:["line"],tags:{service:"emergency_access"},addTags:{highway:"service",service:"emergency_access"},reference:{key:"service",value:"emergency_access"},name:"Emergency Access"},"highway/service/parking_aisle":{icon:"iD-highway-service",geometry:["line"],tags:{service:"parking_aisle"},addTags:{highway:"service",service:"parking_aisle"},reference:{key:"service",value:"parking_aisle"},name:"Parking Aisle"},"highway/services":{icon:"maki-car",fields:["{highway/rest_area}"],moreFields:["{highway/rest_area}"],geometry:["point","vertex","area"],tags:{highway:"services"},terms:["services","travel plaza","service station"],name:"Service Area"},"highway/speed_camera":{icon:"maki-attraction",geometry:["point","vertex"],fields:["direction","ref","maxspeed"],tags:{highway:"speed_camera"},terms:[],name:"Speed Camera"},"highway/steps":{icon:"iD-highway-steps",fields:["incline_steps","handrail","step_count","surface","lit","width"],moreFields:["covered","dog","indoor"],geometry:["line"],tags:{highway:"steps"},terms:["stairs","staircase","stairway"],name:"Steps"},"highway/steps/conveying":{icon:"maki-entrance",fields:["name","incline_steps","conveying","access_simple","lit","width","handrail","step_count"],geometry:["line"],terms:["moving staircase","moving stairway","people mover"],tags:{highway:"steps",conveying:"*"},name:"Escalator"},"highway/stop":{icon:"temaki-stop",fields:["stop","direction_vertex"],geometry:["vertex"],tags:{highway:"stop"},terms:["stop","halt","sign"],name:"Stop Sign"},"highway/street_lamp":{icon:"temaki-bulb",geometry:["point","vertex"],tags:{highway:"street_lamp"},fields:["lamp_type","direction","ref"],terms:["streetlight","street light","lamp","light","gaslight"],name:"Street Lamp"},"highway/tertiary_link":{icon:"iD-highway-tertiary-link",fields:["{highway/primary_link}"],moreFields:["{highway/primary_link}"],geometry:["line"],tags:{highway:"tertiary_link"},terms:["on ramp","off ramp","ramp","road","street"],name:"Tertiary Link"},"highway/tertiary":{icon:"iD-highway-tertiary",fields:["{highway/primary}"],moreFields:["{highway/primary}"],geometry:["line"],tags:{highway:"tertiary"},terms:["road","street"],name:"Tertiary Road"},"highway/track":{icon:"fas-truck-monster",fields:["name","tracktype","surface","width","structure","access","incline","smoothness"],moreFields:["covered","flood_prone","horse_scale","maxweight_bridge","mtb/scale","mtb/scale/uphill","mtb/scale/imba"],geometry:["line"],tags:{highway:"track"},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"],name:"Unmaintained Track Road"},"highway/traffic_mirror":{icon:"maki-circle-stroked",geometry:["point","vertex"],fields:["direction"],tags:{highway:"traffic_mirror"},terms:["blind spot","convex","corner","curved","roadside","round","safety","sphere","visibility"],name:"Traffic Mirror"},"highway/traffic_signals":{icon:"temaki-traffic_signals",geometry:["vertex"],tags:{highway:"traffic_signals"},fields:["traffic_signals","traffic_signals/direction"],terms:["light","stoplight","traffic light"],name:"Traffic Signals"},"highway/trailhead":{icon:"fas-hiking",fields:["name","operator","elevation","address","access_simple","fee","payment_multi_fee"],moreFields:["opening_hours"],geometry:["vertex"],tags:{highway:"trailhead"},terms:["hiking","mile zero","mountain biking","mountaineering","trail endpoint","trail start","staging area","trekking"],name:"Trailhead"},"highway/trunk_link":{icon:"iD-highway-trunk-link",fields:["{highway/motorway_link}"],moreFields:["{highway/motorway_link}"],geometry:["line"],tags:{highway:"trunk_link"},terms:["on ramp","off ramp","ramp","road","street"],name:"Trunk Link"},"highway/trunk":{icon:"iD-highway-trunk",fields:["name","ref_road_number","oneway","maxspeed","lanes","surface","structure","access"],moreFields:["covered","incline","junction_line","lit","maxheight","minspeed","maxweight_bridge","smoothness","toll"],geometry:["line"],tags:{highway:"trunk"},terms:["road","street"],name:"Trunk Road"},"highway/turning_circle":{icon:"maki-circle-stroked",geometry:["vertex"],tags:{highway:"turning_circle"},terms:["cul-de-sac"],name:"Turning Circle"},"highway/turning_loop":{icon:"maki-circle",geometry:["vertex"],tags:{highway:"turning_loop"},terms:["cul-de-sac"],name:"Turning Loop (Island)"},"highway/unclassified":{icon:"iD-highway-unclassified",fields:["{highway/residential}"],moreFields:["{highway/residential}"],geometry:["line"],tags:{highway:"unclassified"},terms:["road","street"],name:"Minor/Unclassified Road"},historic:{icon:"temaki-ruins",fields:["historic","inscription"],geometry:["point","vertex","line","area"],tags:{historic:"*"},name:"Historic Site"},"historic/archaeological_site":{icon:"temaki-ruins",fields:["name","site_type","historic/civilization","inscription","access_simple"],geometry:["point","vertex","area"],tags:{historic:"archaeological_site"},name:"Archaeological Site"},"historic/boundary_stone":{icon:"temaki-milestone",fields:["name","inscription"],moreFields:["material"],geometry:["point","vertex"],tags:{historic:"boundary_stone"},name:"Boundary Stone"},"historic/castle":{icon:"maki-castle",fields:["name","castle_type","building_area","historic/civilization","access_simple","start_date"],geometry:["point","area"],tags:{historic:"castle"},name:"Castle"},"historic/castle/fortress":{icon:"maki-castle",fields:["name","building_area","access_simple","start_date"],geometry:["point","area"],reference:{key:"castle_type",value:"fortress"},tags:{historic:"castle",castle_type:"fortress"},terms:["citadel","military"],name:"Historic Fortress"},"historic/castle/palace":{icon:"fas-crown",fields:["name","building_area","access_simple","start_date"],geometry:["point","area"],reference:{key:"castle_type",value:"palace"},tags:{historic:"castle",castle_type:"palace"},terms:["Royal Residence","royal","king","queen"],name:"Palace"},"historic/castle/stately":{icon:"fas-crown",fields:["name","building_area","access_simple","start_date"],geometry:["point","area"],reference:{key:"castle_type",value:"stately"},tags:{historic:"castle",castle_type:"stately"},terms:["Historic Country House","Stately Home","nobility","gentry","representative"],name:"Château"},"historic/city_gate":{icon:"maki-castle",fields:["name","building_area","historic/civilization","start_date"],geometry:["point","area"],tags:{historic:"city_gate"},terms:["Town Gate"],name:"City Gate"},"historic/fort":{icon:"maki-castle",fields:["name","building_area","access_simple","start_date"],geometry:["point","area"],tags:{historic:"fort"},terms:["military"],name:"Historic Fort"},"historic/manor":{icon:"maki-castle",fields:["name","building_area","access_simple","start_date"],geometry:["point","area"],tags:{historic:"manor"},terms:["Mansion","gentry","nobility","estate"],name:"Manor House"},"historic/memorial":{icon:"maki-monument",fields:["name","memorial","inscription","material"],moreFields:["website"],geometry:["point","vertex","area"],terms:["dedicatory","epitaph","remember","remembrance","memory","monument","stolperstein"],tags:{historic:"memorial"},name:"Memorial"},"historic/memorial/plaque":{icon:"maki-monument",fields:["{historic/memorial}","direction"],geometry:["point","vertex"],terms:["dedicatory","epitaph","historical marker","remember","remembrance","memory"],tags:{historic:"memorial",memorial:"plaque"},reference:{key:"memorial",value:"plaque"},name:"Commemorative Plaque"},"historic/monument":{icon:"maki-monument",fields:["name","inscription","access_simple"],moreFields:["material"],geometry:["point","vertex","area"],tags:{historic:"monument"},name:"Monument"},"historic/ruins":{icon:"temaki-ruins",fields:["name","historic/civilization","inscription","access_simple"],geometry:["point","vertex","area"],tags:{historic:"ruins"},name:"Ruins"},"historic/tomb":{icon:"maki-cemetery",fields:["name","tomb","building_area","inscription","access_simple"],geometry:["point","area"],tags:{historic:"tomb"},name:"Tomb"},"historic/wayside_cross":{icon:"maki-religious-christian",fields:["name","inscription"],moreFields:["material"],geometry:["point","vertex","area"],tags:{historic:"wayside_cross"},name:"Wayside Cross"},"historic/wayside_shrine":{icon:"maki-landmark",fields:["name","religion","denomination","inscription","access_simple"],geometry:["point","vertex","area"],tags:{historic:"wayside_shrine"},name:"Wayside Shrine"},"historic/wreck":{icon:"temaki-ruins",fields:["name","access_simple","seamark/wreck/category","historic/wreck/date_sunk","historic/wreck/visible_at_low_tide","historic/wreck/visible_at_high_tide"],moreFields:["seamark/type"],geometry:["point","area"],tags:{historic:"wreck"},addTags:{historic:"wreck","seamark:type":"wreck"},terms:["hull","mast","maritime","remains","ship","boat"],name:"Shipwreck"},"indoor/corridor_line":{fields:["level","name"],geometry:["line"],tags:{indoor:"corridor"},searchable:false,matchScore:1.1,name:"Indoor Corridor",replacement:"highway/corridor"},"indoor/area":{fields:["level","name","ref_room_number","height"],geometry:["area"],tags:{indoor:"area"},terms:["indoor space"],matchScore:0.8,name:"Indoor Area"},"indoor/corridor":{icon:"temaki-pedestrian",fields:["level","name","ref","height"],geometry:["area"],tags:{indoor:"corridor"},terms:["concourse","foyer","hallway","passageway"],matchScore:0.8,name:"Indoor Corridor"},"indoor/door":{icon:"maki-entrance-alt1",fields:["level","ref","door_type","access_simple","width","height"],moreFields:["wheelchair"],geometry:["vertex"],tags:{indoor:"door"},addTags:{indoor:"door",door:"yes"},removeTags:{indoor:"door",door:"*"},terms:["doorframe","doorway","portal","room access","threshold"],name:"Indoor Door"},"indoor/room":{fields:["level","name","ref_room_number","room","height"],geometry:["area"],tags:{indoor:"room"},terms:["antechamber","anteroom","atrium","cell","chamber","concourse","foyer","indoor room","lobby","vestibule"],matchScore:0.8,name:"Room"},"indoor/wall":{icon:"temaki-wall",fields:["level","height"],geometry:["line"],tags:{indoor:"wall"},terms:["indoor barrier","room divider","room partition"],name:"Indoor Wall"},"internet_access/wlan":{icon:"fas-wifi",geometry:["point","area"],fields:["internet_access/fee","internet_access/ssid"],terms:["wi-fi","wifi","hotspot"],tags:{internet_access:"wlan"},matchScore:0.25,name:"Wi-Fi Hotspot"},junction:{icon:"temaki-junction",fields:["name"],geometry:["vertex","area"],tags:{junction:"yes"},name:"Junction"},"junction/circular":{geometry:["vertex","line"],fields:["name"],tags:{junction:"circular"},name:"Traffic Circle",searchable:false},"junction/jughandle":{geometry:["line"],fields:["name"],tags:{junction:"jughandle"},name:"Jughandle",searchable:false},"junction/roundabout":{geometry:["vertex","line"],fields:["name"],tags:{junction:"roundabout"},name:"Roundabout",searchable:false},"landuse/basin":{icon:"maki-water",fields:["name","basin","intermittent_yes"],geometry:["area"],tags:{landuse:"basin"},name:"Basin",searchable:false},"landuse/farm":{icon:"maki-farm",fields:["name","operator","crop"],geometry:["point","area"],tags:{landuse:"farm"},name:"Farmland",searchable:false},"landuse/pond":{icon:"maki-water",fields:["name","intermittent"],geometry:["area"],tags:{landuse:"pond"},name:"Pond",searchable:false},"landuse/reservoir":{icon:"maki-water",fields:["name","intermittent"],geometry:["area"],tags:{landuse:"reservoir"},name:"Reservoir",searchable:false},"landuse/allotments":{icon:"maki-garden-centre",geometry:["area"],fields:["name"],moreFields:["address","website","phone","email","fax"],tags:{landuse:"allotments"},terms:["allotment","garden"],name:"Community Garden"},"landuse/aquaculture":{icon:"maki-aquarium",fields:["name","operator","produce"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"aquaculture"},terms:["fish farm","crustacean","algae","aquafarming","shrimp farm","oyster farm","mariculture","algaculture"],name:"Aquaculture"},"landuse/brownfield":{geometry:["area"],fields:["name"],tags:{landuse:"brownfield"},terms:[],matchScore:0.9,name:"Brownfield"},"landuse/cemetery":{icon:"maki-cemetery",fields:["name","religion","denomination"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"cemetery"},terms:[],name:"Cemetery"},"landuse/churchyard":{icon:"maki-religious-christian",fields:["name","religion","denomination"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"churchyard"},terms:[],name:"Churchyard"},"landuse/commercial":{icon:"maki-suitcase",fields:["name"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"commercial"},terms:[],matchScore:0.9,name:"Commercial Area"},"landuse/construction":{icon:"temaki-tools",fields:["name","construction","operator","opening_date","check_date","note"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"construction"},terms:[],name:"Construction"},"landuse/farmland":{icon:"fas-tractor",fields:["name","operator","crop","produce"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"farmland"},terms:["crop","grow","plant"],name:"Farmland"},"landuse/farmyard":{icon:"maki-farm",fields:["name","operator","crop"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"farmyard"},terms:["crop","grow","plant"],name:"Farmyard"},"landuse/forest":{icon:"maki-park-alt1",fields:["name","leaf_type","leaf_cycle","produce"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"forest"},terms:["cut","forest","forestry","lumber","silviculture","tree"],name:"Managed Forest"},"landuse/garages":{icon:"fas-warehouse",geometry:["area"],fields:["name"],moreFields:["address","website","phone","email","fax"],tags:{landuse:"garages"},terms:[],name:"Garage Landuse"},"landuse/grass":{geometry:["area"],tags:{landuse:"grass"},terms:[],name:"Grass"},"landuse/greenfield":{geometry:["area"],fields:["name"],tags:{landuse:"greenfield"},terms:[],matchScore:0.9,name:"Greenfield"},"landuse/greenhouse_horticulture":{icon:"maki-garden",fields:["name","operator"],moreFields:["address","website","phone","email","fax"],geometry:["area"],terms:["flower","greenhouse","horticulture","grow","vivero"],tags:{landuse:"greenhouse_horticulture"},matchScore:0.9,name:"Greenhouse Horticulture"},"landuse/harbour":{icon:"maki-harbor",fields:["name","operator"],moreFields:["address","website","phone","email","fax"],geometry:["area"],terms:["boat"],tags:{landuse:"harbour"},name:"Harbor"},"landuse/industrial":{icon:"maki-industry",fields:["name","industrial"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"industrial"},terms:[],matchScore:0.9,name:"Industrial Area"},"landuse/industrial/scrap_yard":{icon:"maki-car",fields:["name","operator","address","opening_hours"],geometry:["point","area"],tags:{industrial:"scrap_yard"},addTags:{landuse:"industrial",industrial:"scrap_yard"},reference:{key:"industrial",value:"scrap_yard"},terms:["car","junk","metal","salvage","scrap","u-pull-it","vehicle","wreck","yard"],name:"Scrap Yard"},"landuse/industrial/slaughterhouse":{icon:"maki-slaughterhouse",fields:["name","operator","address","building_area","opening_hours"],geometry:["point","area"],tags:{industrial:"slaughterhouse"},addTags:{landuse:"industrial",industrial:"slaughterhouse"},reference:{key:"industrial",value:"slaughterhouse"},terms:["abattoir","beef","butchery","calf","chicken","cow","killing house","meat","pig","pork","poultry","shambles","stockyard"],name:"Slaughterhouse"},"landuse/landfill":{geometry:["area"],fields:["name"],moreFields:["address","website","phone","email","fax"],tags:{landuse:"landfill"},terms:["dump"],name:"Landfill"},"landuse/meadow":{icon:"maki-garden",geometry:["area"],fields:["name"],tags:{landuse:"meadow"},terms:["grazing","hay field","pasture"],name:"Meadow"},"landuse/military":{icon:"temaki-military",fields:["name"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"military"},terms:[],matchScore:0.9,name:"Military Area"},"landuse/military/airfield":{icon:"tnp-2009265",fields:["name","iata","icao"],geometry:["point","area"],tags:{military:"airfield"},addTags:{aeroway:"aerodrome",landuse:"military",military:"airfield"},reference:{key:"military",value:"airfield"},terms:["aerodrome","aeroway","air force","airplane","airport","army","base","bomb","fight","force","guard","heli*","jet","marine","navy","plane","troop","war"],name:"Military Airfield"},"landuse/military/barracks":{icon:"temaki-military",fields:["name","building_area"],geometry:["point","area"],tags:{military:"barracks"},addTags:{landuse:"military",military:"barracks"},terms:["air force","army","base","fight","force","guard","marine","navy","troop","war"],name:"Barracks"},"landuse/military/bunker":{icon:"temaki-military",fields:["name","bunker_type","building_area"],geometry:["point","area"],tags:{military:"bunker"},addTags:{building:"bunker",landuse:"military",military:"bunker"},terms:["air force","army","base","fight","force","guard","marine","navy","troop","war"],name:"Military Bunker"},"landuse/military/checkpoint":{icon:"maki-barrier",fields:["name"],geometry:["point","vertex","area"],tags:{military:"checkpoint"},addTags:{landuse:"military",military:"checkpoint"},terms:["air force","army","base","force","guard","marine","navy","troop","war"],name:"Checkpoint"},"landuse/military/danger_area":{icon:"maki-danger",fields:["name"],geometry:["point","vertex","area"],tags:{military:"danger_area"},addTags:{landuse:"military",military:"danger_area"},terms:["air force","army","base","blast","bomb","explo*","force","guard","mine","marine","navy","troop","war"],name:"Danger Area"},"landuse/military/naval_base":{icon:"temaki-military",fields:["name"],geometry:["point","area"],tags:{military:"naval_base"},addTags:{landuse:"military",military:"naval_base"},terms:["base","fight","force","guard","marine","navy","ship","sub","troop","war"],name:"Naval Base"},"landuse/military/nuclear_explosion_site":{icon:"maki-danger",fields:["name"],geometry:["point","vertex","area"],tags:{military:"nuclear_explosion_site"},addTags:{landuse:"military",military:"nuclear_explosion_site"},terms:["atom","blast","bomb","detonat*","nuke","site","test"],name:"Nuclear Explosion Site"},"landuse/military/obstacle_course":{icon:"temaki-military",geometry:["point","area"],tags:{military:"obstacle_course"},addTags:{landuse:"military",military:"obstacle_course"},terms:["army","base","force","guard","marine","navy","troop","war"],name:"Obstacle Course"},"landuse/military/office":{icon:"temaki-military",fields:["name","building_area"],geometry:["point","area"],tags:{military:"office"},addTags:{landuse:"military",military:"office"},terms:["air force","army","base","enlist","fight","force","guard","marine","navy","recruit","troop","war"],name:"Military Office"},"landuse/military/range":{icon:"temaki-military",fields:["name"],geometry:["point","area"],tags:{military:"range"},addTags:{landuse:"military",military:"range"},terms:["air force","army","base","fight","fire","force","guard","gun","marine","navy","rifle","shoot*","snip*","train","troop","war"],name:"Military Range"},"landuse/military/training_area":{icon:"temaki-military",fields:["name"],geometry:["point","area"],tags:{military:"training_area"},addTags:{landuse:"military",military:"training_area"},terms:["air force","army","base","fight","fire","force","guard","gun","marine","navy","rifle","shoot*","snip*","train","troop","war"],name:"Training Area"},"landuse/orchard":{icon:"maki-park",fields:["name","operator","trees"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"orchard"},terms:["fruit"],name:"Orchard"},"landuse/plant_nursery":{icon:"maki-garden",fields:["name","operator","plant"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"plant_nursery"},terms:["flower","garden","grow","vivero"],name:"Plant Nursery"},"landuse/quarry":{geometry:["area"],fields:["name","operator","resource"],moreFields:["address","website","phone","email","fax"],tags:{landuse:"quarry"},terms:[],name:"Quarry"},"landuse/railway":{icon:"maki-rail",fields:["operator"],geometry:["area"],tags:{landuse:"railway"},terms:["rail","train","track"],name:"Railway Corridor"},"landuse/recreation_ground":{icon:"maki-pitch",geometry:["area"],fields:["name"],moreFields:["address","website","phone","email","fax"],tags:{landuse:"recreation_ground"},terms:["playing fields"],name:"Recreation Ground"},"landuse/religious":{icon:"maki-place-of-worship",geometry:["area"],fields:["name","religion","denomination"],moreFields:["address","website","phone","email","fax"],tags:{landuse:"religious"},terms:[],name:"Religious Area"},"landuse/residential":{icon:"maki-building",geometry:["area"],tags:{landuse:"residential"},terms:[],matchScore:0.9,name:"Residential Area"},"landuse/residential/apartments":{icon:"maki-building",fields:["name","operator","address"],geometry:["point","area"],tags:{residential:"apartments"},addTags:{landuse:"residential",residential:"apartments"},reference:{key:"residential",value:"apartments"},terms:["flat","residence","tenement"],name:"Apartment Complex"},"landuse/retail":{icon:"maki-commercial",geometry:["area"],fields:["name"],moreFields:["address","website","phone","email","fax"],tags:{landuse:"retail"},matchScore:0.9,name:"Retail Area"},"landuse/vineyard":{fields:["name","operator","grape_variety"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"vineyard"},addTags:{landuse:"vineyard",crop:"grape"},removeTags:{landuse:"vineyard",crop:"grape",grape_variety:"*"},terms:["grape","wine"],name:"Vineyard"},"landuse/winter_sports":{icon:"fas-skiing",geometry:["area"],fields:["name","operator"],moreFields:["address","access_simple","opening_hours"],tags:{landuse:"winter_sports"},terms:["piste area","ski area","ski hill","ski mountain","ski resort","snow board area","snowboard area"],name:"Winter Sports Area"},"leisure/adult_gaming_centre":{icon:"temaki-casino",fields:["{amenity/casino}"],moreFields:["{amenity/casino}"],geometry:["point","area"],terms:["gambling","slot machine"],tags:{leisure:"adult_gaming_centre"},name:"Adult Gaming Center"},"leisure/amusement_arcade":{icon:"maki-gaming",fields:["name","operator","address","building_area"],moreFields:["air_conditioning","opening_hours","payment_multi","smoking","website","phone","email","fax"],geometry:["point","area"],terms:["pay-to-play games","video games","driving simulators","pinball machines"],tags:{leisure:"amusement_arcade"},name:"Amusement Arcade"},"leisure/bandstand":{icon:"maki-music",fields:["name","building_area","operator"],moreFields:["website"],geometry:["point","area"],tags:{leisure:"bandstand"},name:"Bandstand"},"leisure/beach_resort":{icon:"maki-beach",fields:["name","address","opening_hours","fee","payment_multi_fee"],moreFields:["smoking","website","phone","email","fax"],geometry:["point","area"],tags:{leisure:"beach_resort"},name:"Beach Resort"},"leisure/bird_hide":{icon:"temaki-binoculars",fields:["name","building_area","address","opening_hours"],moreFields:["website"],geometry:["point","area"],tags:{leisure:"bird_hide"},terms:["machan","ornithology"],name:"Bird Hide"},"leisure/bleachers":{geometry:["point","area"],tags:{leisure:"bleachers"},terms:["crowd","bench","sports","stand","stands","seat","seating"],name:"Bleachers"},"leisure/bowling_alley":{icon:"temaki-bowling",fields:["name","operator","address","building_area"],moreFields:["air_conditioning","opening_hours","payment_multi","smoking","website","phone","email","fax"],geometry:["point","area"],terms:["bowling center"],tags:{leisure:"bowling_alley"},name:"Bowling Alley"},"leisure/common":{icon:"temaki-pedestrian",fields:["name"],moreFields:["website"],geometry:["point","area"],terms:["open space"],tags:{leisure:"common"},name:"Common"},"leisure/dance":{icon:"maki-music",fields:["name","operator","address","building_area","dance/style"],moreFields:["opening_hours","payment_multi","website","phone","email","fax"],geometry:["point","area"],terms:["ballroom","jive","swing","tango","waltz"],tags:{leisure:"dance"},name:"Dance Hall"},"leisure/dancing_school":{icon:"maki-music",fields:["name","operator","address","building_area","dance/style"],moreFields:["opening_hours","payment_multi","website","phone","email","fax"],geometry:["point","area"],terms:["jive","swing","tango","waltz","dance teaching"],tags:{leisure:"dance","dance:teaching":"yes"},reference:{key:"leisure",value:"dance"},name:"Dance School"},"leisure/disc_golf_course":{icon:"temaki-disc_golf_basket",fields:["name","operator","access_simple","fee","payment_multi_fee","opening_hours"],moreFields:["address","dog","email","fax","lit","phone","website","wheelchair"],geometry:["point","area"],tags:{leisure:"disc_golf_course"},addTags:{leisure:"disc_golf_course",sport:"disc_golf"},terms:["disk golf","frisbee golf","flying disc golf","frolf","ultimate"],name:"Disc Golf Course"},"leisure/dog_park":{icon:"maki-dog-park",fields:["name"],moreFields:["website","phone","email","fax"],geometry:["point","area"],terms:[],tags:{leisure:"dog_park"},name:"Dog Park"},"leisure/firepit":{icon:"maki-fire-station",fields:["access_simple"],geometry:["point","area"],tags:{leisure:"firepit"},terms:["fireplace","campfire"],name:"Firepit"},"leisure/fishing":{icon:"fas-fish",fields:["name","access_simple","fishing"],geometry:["vertex","point","area"],tags:{leisure:"fishing"},terms:["angler"],name:"Fishing Spot"},"leisure/fitness_centre":{icon:"fas-dumbbell",fields:["name","sport","address","building_area"],moreFields:["opening_hours","fee","payment_multi","website","phone","email","fax"],geometry:["point","area"],tags:{leisure:"fitness_centre"},terms:["health","gym","leisure","studio"],name:"Gym / Fitness Center"},"leisure/fitness_centre/yoga":{icon:"maki-pitch",geometry:["point","area"],terms:["studio","asanas","modern yoga","meditation"],tags:{leisure:"fitness_centre",sport:"yoga"},reference:{key:"sport",value:"yoga"},name:"Yoga Studio"},"leisure/fitness_station":{icon:"maki-pitch",fields:["fitness_station","ref"],moreFields:["opening_hours"],geometry:["point","area"],tags:{leisure:"fitness_station"},addTags:{leisure:"fitness_station",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["exercise","fitness","gym","trim trail"],name:"Outdoor Fitness Station"},"leisure/fitness_station/balance_beam":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"balance_beam"},addTags:{leisure:"fitness_station",fitness_station:"balance_beam",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["balance","exercise","fitness","gym","trim trail"],name:"Exercise Balance Beam"},"leisure/fitness_station/box":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"box"},addTags:{leisure:"fitness_station",fitness_station:"box",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["box","exercise","fitness","gym","jump","trim trail"],name:"Exercise Box"},"leisure/fitness_station/horizontal_bar":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"horizontal_bar"},addTags:{leisure:"fitness_station",fitness_station:"horizontal_bar",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["bar","chinup","chin up","exercise","fitness","gym","pullup","pull up","trim trail"],name:"Exercise Horizontal Bar"},"leisure/fitness_station/horizontal_ladder":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"horizontal_ladder"},addTags:{leisure:"fitness_station",fitness_station:"horizontal_ladder",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["bar","chinup","chin up","exercise","fitness","gym","ladder","monkey bars","pullup","pull up","trim trail"],name:"Exercise Monkey Bars"},"leisure/fitness_station/hyperextension":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"hyperextension"},addTags:{leisure:"fitness_station",fitness_station:"hyperextension",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["back","exercise","extension","fitness","gym","roman chair","trim trail"],name:"Hyperextension Station"},"leisure/fitness_station/parallel_bars":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"parallel_bars"},addTags:{leisure:"fitness_station",fitness_station:"parallel_bars",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["bar","dip","exercise","fitness","gym","trim trail"],name:"Parallel Bars"},"leisure/fitness_station/push-up":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"push-up"},addTags:{leisure:"fitness_station",fitness_station:"push-up",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["bar","exercise","fitness","gym","pushup","push up","trim trail"],name:"Push-Up Station"},"leisure/fitness_station/rings":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"rings"},addTags:{leisure:"fitness_station",fitness_station:"rings",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["exercise","fitness","gym","muscle up","pullup","pull up","trim trail"],name:"Exercise Rings"},"leisure/fitness_station/sign":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"sign"},addTags:{leisure:"fitness_station",fitness_station:"sign",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["exercise","fitness","gym","trim trail"],name:"Exercise Instruction Sign"},"leisure/fitness_station/sit-up":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"sit-up"},addTags:{leisure:"fitness_station",fitness_station:"sit-up",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["crunch","exercise","fitness","gym","situp","sit up","trim trail"],name:"Sit-Up Station"},"leisure/fitness_station/stairs":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"stairs"},addTags:{leisure:"fitness_station",fitness_station:"stairs",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["exercise","fitness","gym","steps","trim trail"],name:"Exercise Stairs"},"leisure/garden":{icon:"maki-garden",fields:["name","operator","access_simple","fee","payment_multi_fee"],moreFields:["website","phone","email","fax"],geometry:["point","vertex","area"],tags:{leisure:"garden"},name:"Garden"},"leisure/golf_course":{icon:"maki-golf",fields:["name","operator","address","opening_hours"],moreFields:["payment_multi","website","phone","email","fax"],geometry:["point","area"],terms:["links"],tags:{leisure:"golf_course"},name:"Golf Course"},"leisure/hackerspace":{icon:"fas-code",fields:["name","address","building_area","opening_hours","website","internet_access"],moreFields:["payment_multi","internet_access/fee","internet_access/ssid","smoking","phone","email","fax"],geometry:["point","area"],terms:["makerspace","hackspace","hacklab"],tags:{leisure:"hackerspace"},name:"Hackerspace"},"leisure/horse_riding":{icon:"maki-horse-riding",fields:["name","access_simple","operator","address","building"],moreFields:["opening_hours","payment_multi","website","phone","email","fax"],geometry:["point","area"],terms:["equestrian","stable"],tags:{leisure:"horse_riding"},name:"Horseback Riding Facility"},"leisure/ice_rink":{icon:"fas-skating",fields:["name","seasonal","sport_ice","operator","address","building"],moreFields:["opening_hours","payment_multi","website","phone","email","fax"],geometry:["point","area"],terms:["hockey","skating","curling"],tags:{leisure:"ice_rink"},name:"Ice Rink"},"leisure/marina":{icon:"tnp-2009223",fields:["name","operator","capacity","fee","payment_multi_fee","sanitary_dump_station","power_supply"],moreFields:["address","internet_access","internet_access/fee","internet_access/ssid","seamark/type","website","phone","email","fax"],geometry:["point","vertex","area"],terms:["boat"],tags:{leisure:"marina"},name:"Marina"},"leisure/miniature_golf":{icon:"maki-golf",fields:["name","operator","address","opening_hours","fee","payment_multi_fee"],moreFields:["website","phone","email","fax"],geometry:["point","area"],terms:["crazy golf","mini golf","putt-putt"],tags:{leisure:"miniature_golf"},name:"Miniature Golf"},"leisure/nature_reserve":{icon:"maki-park",geometry:["point","area"],fields:["name","operator","address","opening_hours"],moreFields:["dog","website","phone","email","fax"],tags:{leisure:"nature_reserve"},terms:["protected","wildlife"],name:"Nature Reserve"},"leisure/outdoor_seating":{icon:"maki-picnic-site",geometry:["point","area"],fields:["name","operator"],terms:["al fresco","beer garden","dining","cafe","restaurant","pub","bar","patio"],tags:{leisure:"outdoor_seating"},name:"Outdoor Seating Area"},"leisure/park":{icon:"maki-park",fields:["name","operator","address","opening_hours"],moreFields:["dog","smoking","website","phone","email","fax"],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/picnic_table":{icon:"maki-picnic-site",fields:["material","lit","bench"],geometry:["point"],tags:{leisure:"picnic_table"},terms:["bench"],name:"Picnic Table"},"leisure/picnic_table/chess":{icon:"fas-chess-pawn",geometry:["point"],tags:{leisure:"picnic_table",sport:"chess"},reference:{key:"sport",value:"chess"},terms:["bench","chess board","checkerboard","checkers","chequerboard","game table"],name:"Chess Table"},"leisure/pitch":{icon:"maki-pitch",fields:["name","sport","access_simple","surface","lit"],moreFields:["fee","payment_multi_fee"],geometry:["point","area"],tags:{leisure:"pitch"},terms:["field"],name:"Sport Pitch"},"leisure/pitch/american_football":{icon:"maki-american-football",geometry:["point","area"],tags:{leisure:"pitch",sport:"american_football"},reference:{key:"sport",value:"american_football"},terms:["football","gridiron"],name:"American Football Field"},"leisure/pitch/australian_football":{icon:"maki-american-football",geometry:["point","area"],tags:{leisure:"pitch",sport:"australian_football"},reference:{key:"sport",value:"australian_football"},terms:["Aussie","AFL","football"],name:"Australian Football Field"},"leisure/pitch/badminton":{icon:"maki-tennis",fields:["{leisure/pitch}","access_simple"],geometry:["point","area"],tags:{leisure:"pitch",sport:"badminton"},reference:{key:"sport",value:"badminton"},terms:[],name:"Badminton Court"},"leisure/pitch/baseball":{icon:"maki-baseball",geometry:["point","area"],tags:{leisure:"pitch",sport:"baseball"},reference:{key:"sport",value:"baseball"},terms:[],name:"Baseball Field"},"leisure/pitch/basketball":{icon:"maki-basketball",fields:["name","surface","hoops","lit","access_simple"],geometry:["point","area"],tags:{leisure:"pitch",sport:"basketball"},reference:{key:"sport",value:"basketball"},terms:[],name:"Basketball Court"},"leisure/pitch/beachvolleyball":{icon:"maki-volleyball",geometry:["point","area"],tags:{leisure:"pitch",sport:"beachvolleyball"},addTags:{leisure:"pitch",sport:"beachvolleyball",surface:"sand"},reference:{key:"sport",value:"beachvolleyball"},terms:["volleyball"],name:"Beach Volleyball Court"},"leisure/pitch/boules":{icon:"maki-pitch",fields:["name","boules","{leisure/pitch}"],geometry:["point","area"],tags:{leisure:"pitch",sport:"boules"},reference:{key:"sport",value:"boules"},terms:["bocce","lyonnaise","pétanque"],name:"Boules/Bocce Court"},"leisure/pitch/bowls":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"pitch",sport:"bowls"},reference:{key:"sport",value:"bowls"},terms:[],name:"Bowling Green"},"leisure/pitch/cricket":{icon:"maki-cricket",geometry:["point","area"],tags:{leisure:"pitch",sport:"cricket"},reference:{key:"sport",value:"cricket"},terms:[],name:"Cricket Field"},"leisure/pitch/equestrian":{icon:"maki-horse-riding",fields:["{leisure/pitch}","building"],geometry:["point","area"],tags:{leisure:"pitch",sport:"equestrian"},reference:{key:"sport",value:"equestrian"},terms:["dressage","equestrian","horse","horseback","riding"],name:"Riding Arena"},"leisure/pitch/field_hockey":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"pitch",sport:"field_hockey"},reference:{key:"sport",value:"field_hockey"},terms:["landhockey"],name:"Field Hockey Pitch"},"leisure/pitch/horseshoes":{icon:"temaki-horseshoes",geometry:["point","area"],tags:{leisure:"pitch",sport:"horseshoes"},reference:{key:"sport",value:"horseshoes"},terms:["horse shoes"],name:"Horseshoes Pit"},"leisure/pitch/netball":{icon:"maki-volleyball",geometry:["point","area"],tags:{leisure:"pitch",sport:"netball"},reference:{key:"sport",value:"netball"},terms:[],name:"Netball Court"},"leisure/pitch/rugby_league":{icon:"maki-american-football",geometry:["point","area"],tags:{leisure:"pitch",sport:"rugby_league"},reference:{key:"sport",value:"rugby_league"},terms:[],name:"Rugby League Field"},"leisure/pitch/rugby_union":{icon:"maki-american-football",geometry:["point","area"],tags:{leisure:"pitch",sport:"rugby_union"},reference:{key:"sport",value:"rugby_union"},terms:[],name:"Rugby Union Field"},"leisure/pitch/shuffleboard":{icon:"temaki-shuffleboard",geometry:["point","area"],tags:{leisure:"pitch",sport:"shuffleboard"},reference:{key:"sport",value:"shuffleboard"},terms:["deck shuffleboard","floor shuffleboard"],name:"Shuffleboard Court"},"leisure/pitch/skateboard":{icon:"maki-skateboard",geometry:["point","area"],tags:{leisure:"pitch",sport:"skateboard"},reference:{key:"sport",value:"skateboard"},terms:[],name:"Skate Park"},"leisure/pitch/soccer":{icon:"maki-soccer",geometry:["point","area"],tags:{leisure:"pitch",sport:"soccer"},reference:{key:"sport",value:"soccer"},terms:["football"],name:"Soccer Field"},"leisure/pitch/softball":{icon:"maki-baseball",geometry:["point","area"],tags:{leisure:"pitch",sport:"softball"},reference:{key:"sport",value:"softball"},terms:["softball","diamond"],name:"Softball Field"},"leisure/pitch/table_tennis":{icon:"maki-tennis",fields:["name","lit","access_simple"],geometry:["point","area"],tags:{leisure:"pitch",sport:"table_tennis"},reference:{key:"sport",value:"table_tennis"},terms:["table tennis","ping pong"],name:"Ping Pong Table"},"leisure/pitch/tennis":{icon:"maki-tennis",fields:["{leisure/pitch}","access_simple"],geometry:["point","area"],tags:{leisure:"pitch",sport:"tennis"},reference:{key:"sport",value:"tennis"},terms:[],name:"Tennis Court"},"leisure/pitch/volleyball":{icon:"maki-volleyball",geometry:["point","area"],tags:{leisure:"pitch",sport:"volleyball"},reference:{key:"sport",value:"volleyball"},terms:[],name:"Volleyball Court"},"leisure/playground":{icon:"maki-playground",fields:["name","operator","surface","playground/max_age","playground/min_age","access_simple"],geometry:["point","area"],terms:["jungle gym","play area"],tags:{leisure:"playground"},name:"Playground"},"leisure/resort":{icon:"maki-lodging",fields:["name","operator","resort","address","opening_hours"],moreFields:["access_simple","email","fax","internet_access","internet_access/fee","internet_access/ssid","payment_multi","phone","website"],geometry:["point","area"],tags:{leisure:"resort"},terms:["recreation center","sanatorium","ski and snowboard resort","vacation resort","winter sports resort"],name:"Resort"},"leisure/sauna":{icon:"fas-thermometer-three-quarters",fields:["name","operator","address","opening_hours","access_simple","fee","payment_multi_fee"],moreFields:["website","phone","email","fax"],geometry:["point","area"],tags:{leisure:"sauna"},name:"Sauna"},"leisure/slipway_point":{icon:"maki-slipway",fields:["{leisure/slipway}"],moreFields:["{leisure/slipway}"],geometry:["point","vertex"],terms:["boat launch","boat ramp","boat landing"],tags:{leisure:"slipway"},name:"Slipway"},"leisure/slipway":{icon:"maki-slipway",fields:["name","surface","access_simple","fee","payment_multi_fee","lanes"],moreFields:["lit","opening_hours","seamark/type","width"],geometry:["line"],terms:["boat launch","boat ramp","boat landing"],tags:{leisure:"slipway"},addTags:{leisure:"slipway",highway:"service",service:"slipway"},matchScore:1.1,name:"Slipway"},"leisure/sports_centre":{icon:"maki-pitch",fields:["name","sport","building","address","fee","payment_multi_fee"],moreFields:["opening_hours","website","phone","email","fax"],geometry:["point","area"],tags:{leisure:"sports_centre"},terms:[],name:"Sports Center / Complex"},"leisure/sports_centre/climbing":{icon:"temaki-abseiling",geometry:["point","area"],terms:["abseiling","artificial climbing wall","belaying","bouldering","rock climbing facility","indoor rock wall","rappeling","rock gym","ropes"],tags:{leisure:"sports_centre",sport:"climbing"},reference:{key:"sport",value:"climbing"},name:"Climbing Gym"},"leisure/sports_centre/swimming":{icon:"fas-swimmer",geometry:["point","area"],terms:["dive","water"],tags:{leisure:"sports_centre",sport:"swimming"},reference:{key:"sport",value:"swimming"},name:"Swimming Pool Facility"},"leisure/stadium":{icon:"maki-pitch",fields:["name","sport","address"],moreFields:["website","phone","email","fax"],geometry:["point","area"],tags:{leisure:"stadium"},name:"Stadium"},"leisure/swimming_area":{icon:"fas-swimmer",fields:["name","access_simple","supervised","fee","payment_multi_fee","lit"],moreFields:["opening_hours","operator"],geometry:["area"],terms:["dive","water","aquatics"],tags:{leisure:"swimming_area"},name:"Natural Swimming Area"},"leisure/swimming_pool":{icon:"fas-swimming-pool",fields:["name","access_simple","lit","location_pool","length","swimming_pool"],moreFields:["address","opening_hours","operator"],geometry:["point","area"],terms:["dive","water","aquatics"],tags:{leisure:"swimming_pool"},name:"Swimming Pool"},"leisure/track":{icon:"iD-other-line",fields:["surface","sport_racing_nonmotor","lit","width","lanes"],moreFields:["access","covered","indoor"],geometry:["point","line","area"],tags:{leisure:"track"},terms:["cycle","dog","greyhound","horse","race*","track"],name:"Racetrack (Non-Motorsport)"},"leisure/track/cycling_point":{icon:"maki-bicycle",fields:["{leisure/track/cycling}"],geometry:["point"],tags:{leisure:"track",sport:"cycling"},terms:["bicycle track","bicycling track","cycle racetrack","velodrome"],name:"Cycling Track"},"leisure/track/cycling":{icon:"maki-bicycle",fields:["name","surface","sport_racing_nonmotor","lit","width","lanes"],geometry:["line","area"],tags:{leisure:"track",sport:"cycling"},addTags:{leisure:"track",sport:"cycling",highway:"cycleway"},terms:["bicycle track","bicycling track","cycle racetrack","velodrome"],name:"Cycling Track"},"leisure/track/horse_racing_point":{icon:"maki-horse-riding",fields:["{leisure/track/horse_racing}"],geometry:["point"],tags:{leisure:"track",sport:"horse_racing"},terms:["equestrian race track","horse race betting","horseracing","horsetrack","horse racetrack"],name:"Horse Racing Track"},"leisure/track/horse_racing":{icon:"maki-horse-riding",fields:["name","surface","sport_racing_nonmotor","lit","width","lanes"],geometry:["line","area"],tags:{leisure:"track",sport:"horse_racing"},addTags:{leisure:"track",sport:"horse_racing",highway:"bridleway"},terms:["equestrian race track","horse race betting","horseracing","horsetrack","horse racetrack"],name:"Horse Racing Track"},"leisure/track/running_point":{icon:"maki-pitch",fields:["{leisure/track/running}"],geometry:["point"],tags:{leisure:"track",sport:"running"},terms:["athletics track","decathlon","foot race","long distance running","marathon","middle distance running","racetrack","running","sprint","track","walking"],name:"Running Track"},"leisure/track/running":{icon:"maki-pitch",fields:["name","surface","sport_racing_nonmotor","lit","width","lanes"],geometry:["line","area"],tags:{leisure:"track",sport:"running"},addTags:{leisure:"track",sport:"running",highway:"footway"},terms:["athletics track","decathlon","foot race","long distance running","marathon","middle distance running","racetrack","running","sprint","track","walking"],name:"Running Track"},"leisure/water_park":{icon:"fas-swimmer",fields:["name","operator","address"],moreFields:["payment_multi","brand","website","phone","email","fax"],geometry:["point","area"],terms:["swim","pool","dive"],tags:{leisure:"water_park"},name:"Water Park"},line:{fields:["name"],geometry:["line"],tags:{},terms:["polyline"],name:"Line",matchScore:0.1},"man_made/adit":{icon:"maki-triangle",geometry:["point","area"],fields:["name","operator","resource","direction"],terms:["cave","horizontal mine entrance","tunnel","underground"],tags:{man_made:"adit"},name:"Adit"},"man_made/antenna":{icon:"temaki-antenna",fields:["communication_multi","operator","manufacturer","height"],geometry:["point"],terms:["broadcast","cell phone","cell","communication","mobile phone","radio","television","transmission","tv"],tags:{man_made:"antenna"},name:"Antenna"},"man_made/beacon":{icon:"maki-communications-tower",fields:["name","height"],moreFields:["seamark/type"],geometry:["point","area"],tags:{man_made:"beacon"},name:"Beacon",matchScore:0.5},"man_made/beehive":{icon:"fas-archive",geometry:["point","area"],fields:["ref","operator","seasonal","height","colour"],moreFields:["manufacturer"],terms:["apiary","beekeeper","farm","honey","pollination"],tags:{man_made:"beehive"},name:"Beehive"},"man_made/breakwater":{fields:["material","seamark/type"],geometry:["line","area"],tags:{man_made:"breakwater"},name:"Breakwater"},"man_made/bridge":{icon:"maki-bridge",fields:["name","bridge","layer","maxweight"],moreFields:["manufacturer","material","seamark/type"],geometry:["area"],tags:{man_made:"bridge"},addTags:{man_made:"bridge",layer:"1"},removeTags:{man_made:"bridge",layer:"*"},reference:{key:"man_made",value:"bridge"},name:"Bridge"},"man_made/bunker_silo":{icon:"temaki-silo",fields:["content"],geometry:["point","area"],terms:["Silage","Storage"],tags:{man_made:"bunker_silo"},name:"Bunker Silo"},"man_made/chimney":{icon:"temaki-chimney",fields:["operator","material","height"],geometry:["point","area"],tags:{man_made:"chimney"},name:"Chimney"},"man_made/clearcut":{icon:"maki-logging",geometry:["area"],tags:{man_made:"clearcut"},terms:["cut","forest","lumber","tree","wood"],name:"Clearcut Forest"},"man_made/crane":{icon:"temaki-crane",fields:["operator","manufacturer","height","crane/type"],geometry:["point","line","vertex","area"],tags:{man_made:"crane"},name:"Crane"},"man_made/cross":{icon:"maki-religious-christian",fields:["name","material","height","elevation","inscription","direction"],geometry:["point","vertex"],tags:{man_made:"cross"},name:"Summit Cross"},"man_made/cutline":{icon:"maki-logging",geometry:["line"],tags:{man_made:"cutline"},name:"Cut line"},"man_made/dyke":{geometry:["line"],tags:{man_made:"dyke"},terms:["Dike","Dyke","Floodbank","Stopbank"],name:"Levee"},"man_made/embankment":{geometry:["line"],tags:{man_made:"embankment"},name:"Embankment"},"man_made/flagpole":{icon:"maki-embassy",fields:["operator","flag/type","country","lit","height"],moreFields:["manufacturer","material"],geometry:["point","vertex"],tags:{man_made:"flagpole"},name:"Flagpole"},"man_made/gasometer":{icon:"temaki-storage_tank",fields:["content","building_area"],geometry:["point","area"],terms:["gas holder"],tags:{man_made:"gasometer"},name:"Gasometer"},"man_made/groyne":{fields:["material","seamark/type"],geometry:["line","area"],tags:{man_made:"groyne"},name:"Groyne"},"man_made/lighthouse":{icon:"maki-lighthouse",fields:["name","operator","building_area","height"],moreFields:["address","email","fax","phone","seamark/type","website"],geometry:["point","area"],tags:{man_made:"lighthouse"},addTags:{man_made:"lighthouse","seamark:type":"light_major"},removeTags:{man_made:"lighthouse","seamark:type":"*"},name:"Lighthouse"},"man_made/mast":{icon:"maki-communications-tower",fields:["tower/type","tower/construction","height"],moreFields:["manufacturer","material","communication_multi"],geometry:["point"],terms:["antenna","broadcast tower","cell phone tower","cell tower","communication mast","communication tower","guyed tower","mobile phone tower","radio mast","radio tower","television tower","transmission mast","transmission tower","tv tower"],tags:{man_made:"mast"},name:"Mast"},"man_made/mast/communication":{icon:"maki-communications-tower",fields:["{man_made/mast}","communication_multi"],geometry:["point"],terms:["antenna","broadcast tower","cell phone tower","cell tower","communication mast","communication tower","guyed tower","mobile phone tower","radio mast","radio tower","television tower","transmission mast","transmission tower","tv tower"],tags:{man_made:"mast","tower:type":"communication"},reference:{key:"tower:type",value:"communication"},name:"Communication Mast"},"man_made/mast/communication/mobile_phone":{icon:"maki-communications-tower",geometry:["point"],terms:["antenna","cell mast","cell phone mast","cell phone tower","cell tower","communication mast","communication tower","guyed tower","mobile phone tower","transmission mast","transmission tower"],tags:{man_made:"mast","tower:type":"communication","communication:mobile_phone":"yes"},reference:{key:"communication:mobile_phone",value:"yes"},name:"Mobile Phone Mast"},"man_made/mast/communication/radio":{icon:"maki-communications-tower",geometry:["point"],terms:["antenna","broadcast tower","communication mast","communication tower","guyed tower","radio mast","radio tower","transmission mast","transmission tower"],tags:{man_made:"mast","tower:type":"communication","communication:radio":"yes"},reference:{key:"communication:radio",value:"yes"},name:"Radio Broadcast Mast"},"man_made/mast/communication/television":{icon:"maki-communications-tower",geometry:["point"],terms:["antenna","broadcast tower","communication mast","communication tower","guyed tower","television mast","television tower","transmission mast","transmission tower","tv mast","tv tower"],tags:{man_made:"mast","tower:type":"communication","communication:television":"yes"},reference:{key:"communication:television",value:"yes"},name:"Television Broadcast Mast"},"man_made/mineshaft":{icon:"maki-triangle",geometry:["point","area"],fields:["name","operator","resource"],terms:["cave","mine shaft","tunnel","underground","vertical mine entrance"],tags:{man_made:"mineshaft"},name:"Mineshaft"},"man_made/monitoring_station":{icon:"temaki-antenna",geometry:["point","vertex","area"],fields:["monitoring_multi","operator","manufacturer"],terms:["weather","earthquake","seismology","air","gps"],tags:{man_made:"monitoring_station"},name:"Monitoring Station"},"man_made/observatory":{fields:["name","operator","address","access_simple","building_area"],moreFields:["website","phone","email","fax"],geometry:["point","area"],terms:["astronomical","meteorological"],tags:{man_made:"observatory"},name:"Observatory"},"man_made/petroleum_well":{icon:"temaki-storage_tank",geometry:["point"],terms:["drilling rig","oil derrick","oil drill","oil horse","oil rig","oil pump","petroleum well","pumpjack"],tags:{man_made:"petroleum_well"},name:"Oil Well"},"man_made/pier":{icon:"temaki-pedestrian",fields:["name","surface","floating","width","access","lit"],moreFields:["access","fishing","incline","{highway/footway}"],geometry:["line","area"],terms:["berth","dock","jetty","landing","promenade","wharf"],tags:{man_made:"pier"},addTags:{highway:"footway",man_made:"pier"},name:"Pier"},"man_made/pier/floating":{icon:"temaki-pedestrian",geometry:["line","area"],terms:["berth","dock","jetty","landing","promenade","wharf"],tags:{man_made:"pier",floating:"yes"},addTags:{highway:"footway",man_made:"pier",floating:"yes"},name:"Floating Pier"},"man_made/pipeline":{icon:"iD-pipeline-line",fields:["location","operator","substance","layer"],geometry:["line"],terms:["oil","natural gas","water","sewer","sewage"],tags:{man_made:"pipeline"},name:"Pipeline"},"man_made/pipeline/underground":{icon:"iD-pipeline-line",geometry:["line"],terms:["oil","natural gas","water","sewer","sewage"],tags:{man_made:"pipeline",location:"underground"},addTags:{man_made:"pipeline",location:"underground",layer:"-1"},name:"Underground Pipeline"},"man_made/pumping_station":{icon:"maki-water",geometry:["point","area"],tags:{man_made:"pumping_station"},name:"Pumping Station"},"man_made/silo":{icon:"temaki-silo",fields:["crop","building_area"],geometry:["point","area"],terms:["grain","corn","wheat"],tags:{man_made:"silo"},name:"Silo"},"man_made/storage_tank":{icon:"temaki-storage_tank",fields:["content","operator","material","building_area","height","capacity"],moreFields:["layer","location","manufacturer"],geometry:["point","area"],terms:["water","oil","gas","petrol"],tags:{man_made:"storage_tank"},name:"Storage Tank"},"man_made/storage_tank/water":{icon:"temaki-storage_tank",geometry:["point","area"],terms:["cistern","water tower"],tags:{man_made:"storage_tank",content:"water"},name:"Water Tank"},"man_made/street_cabinet":{icon:"fas-door-closed",geometry:["point","area"],fields:["ref","operator","street_cabinet","height","colour"],terms:["cable tv","monitoring box","technical box","telecommunications","traffic signal controls"],tags:{man_made:"street_cabinet"},name:"Street Cabinet"},"man_made/surveillance":{icon:"maki-attraction",geometry:["point","vertex"],fields:["surveillance","surveillance/type","surveillance/zone","direction"],terms:["anpr","alpr","camera","car plate recognition","cctv","guard","license plate recognition","monitoring","number plate recognition","security","video","webcam"],tags:{man_made:"surveillance"},name:"Surveillance"},"man_made/surveillance/camera":{icon:"maki-attraction",geometry:["point","vertex"],fields:["surveillance","surveillance/type","camera/type","camera/mount","camera/direction","surveillance/zone","contact/webcam"],moreFields:["manufacturer"],terms:["anpr","alpr","camera","car plate recognition","cctv","guard","license plate recognition","monitoring","number plate recognition","security","video","webcam"],tags:{man_made:"surveillance","surveillance:type":"camera"},name:"Surveillance Camera"},"man_made/survey_point":{icon:"maki-monument",fields:["ref"],geometry:["point","vertex"],terms:["trig point","triangulation pillar","trigonometrical station"],tags:{man_made:"survey_point"},name:"Survey Point"},"man_made/tower":{icon:"temaki-tower",fields:["tower/type","tower/construction","height","building_area"],moreFields:["architect"],geometry:["point","area"],tags:{man_made:"tower"},name:"Tower"},"man_made/tower/bell_tower":{icon:"fas-bell",moreFields:["{man_made/tower}","opening_hours"],geometry:["point","area"],terms:["belfry","bell gable","campanile","church tower","klockstapel"],tags:{man_made:"tower","tower:type":"bell_tower"},reference:{key:"tower:type",value:"bell_tower"},name:"Bell Tower"},"man_made/tower/communication":{icon:"temaki-tower",fields:["{man_made/tower}","communication_multi"],geometry:["point","area"],terms:["antenna","broadcast tower","cell phone tower","cell tower","communication mast","communication tower","guyed tower","mobile phone tower","radio mast","radio tower","television tower","transmission mast","transmission tower","tv tower"],tags:{man_made:"tower","tower:type":"communication"},reference:{key:"tower:type",value:"communication"},name:"Communication Tower"},"man_made/tower/defensive":{icon:"maki-castle",geometry:["point","area"],tags:{man_made:"tower","tower:type":"defensive"},reference:{key:"tower:type",value:"defensive"},terms:["Defensive Tower","Castle Tower"],name:"Fortified Tower"},"man_made/tower/minaret":{icon:"temaki-tower",geometry:["point","area"],terms:["Islam","mosque","Muezzin","Muslim"],tags:{man_made:"tower","tower:type":"minaret"},reference:{key:"tower:type",value:"minaret"},name:"Minaret"},"man_made/tower/observation":{icon:"temaki-tower",moreFields:["{man_made/tower}","opening_hours"],geometry:["point","area"],terms:["lookout tower","fire tower"],tags:{man_made:"tower","tower:type":"observation"},reference:{key:"tower:type",value:"observation"},name:"Observation Tower"},"man_made/tunnel":{icon:"tnp-2009642",fields:["name","tunnel","layer","width","length","height"],geometry:["area"],tags:{man_made:"tunnel"},addTags:{man_made:"tunnel",layer:"-1"},removeTags:{man_made:"tunnel",layer:"*"},reference:{key:"man_made",value:"tunnel"},terms:["bore","dig","shaft","underground passage","underpass"],name:"Tunnel"},"man_made/wastewater_plant":{icon:"maki-water",fields:["name","operator","address"],moreFields:["website","phone","email","fax"],geometry:["point","area"],terms:["sewage*","water treatment plant","reclamation plant"],tags:{man_made:"wastewater_plant"},name:"Wastewater Plant"},"man_made/water_tower":{icon:"maki-water",fields:["operator","height"],geometry:["point","area"],tags:{man_made:"water_tower"},name:"Water Tower"},"man_made/water_well":{icon:"maki-water",fields:["operator"],geometry:["point","area"],tags:{man_made:"water_well"},name:"Water Well"},"man_made/water_works":{icon:"maki-water",fields:["name","operator","address"],geometry:["point","area"],tags:{man_made:"water_works"},name:"Water Works"},"man_made/watermill":{icon:"maki-watermill",fields:["building_area"],geometry:["point","area"],terms:["water","wheel","mill"],tags:{man_made:"watermill"},name:"Watermill"},"man_made/windmill":{icon:"maki-windmill",fields:["building_area"],geometry:["point","area"],terms:["wind","wheel","mill"],tags:{man_made:"windmill"},name:"Windmill"},"man_made/works":{icon:"maki-industry",fields:["name","operator","address","building_area","product"],moreFields:["website","phone","email","fax"],geometry:["point","area"],terms:["assembly","build","brewery","car","plant","plastic","processing","manufacture","refinery"],tags:{man_made:"works"},name:"Factory"},manhole:{icon:"maki-circle-stroked",fields:["manhole","operator","label","ref"],geometry:["point","vertex"],tags:{manhole:"*"},addTags:{man_made:"manhole",manhole:"*"},terms:["cover","hole","sewer","sewage","telecom"],name:"Manhole"},"manhole/drain":{icon:"maki-water",fields:["operator","ref"],geometry:["point","vertex"],tags:{manhole:"drain"},addTags:{man_made:"manhole",manhole:"drain"},terms:["cover","drain","hole","rain","sewer","sewage","storm"],name:"Storm Drain"},"manhole/telecom":{icon:"maki-circle-stroked",fields:["operator","ref"],geometry:["point","vertex"],tags:{manhole:"telecom"},addTags:{man_made:"manhole",manhole:"telecom"},terms:["cover","phone","hole","telecom","telephone","bt"],name:"Telecom Manhole"},"natural/bare_rock":{geometry:["area"],tags:{natural:"bare_rock"},terms:["rock"],name:"Bare Rock"},"natural/bay":{icon:"temaki-beach",geometry:["point","line","area"],fields:["name"],tags:{natural:"bay"},terms:[],name:"Bay"},"natural/beach":{icon:"temaki-beach",fields:["surface"],geometry:["point","area"],tags:{natural:"beach"},terms:["shore"],name:"Beach"},"natural/cape":{icon:"temaki-beach",fields:["name","elevation","description"],geometry:["point"],tags:{natural:"cape"},terms:["bay","coastline","erosion","headland","promontory"],name:"Cape"},"natural/cave_entrance":{icon:"maki-triangle",geometry:["point","area"],fields:["name","elevation","access_simple","direction","fee","payment_multi_fee"],tags:{natural:"cave_entrance"},terms:["cavern","hollow","grotto","shelter","cavity"],name:"Cave Entrance"},"natural/cliff":{icon:"maki-triangle",fields:["name","height"],geometry:["point","vertex","line","area"],tags:{natural:"cliff"},terms:["crag","escarpment","rock face","scarp"],name:"Cliff"},"natural/coastline":{geometry:["line"],tags:{natural:"coastline"},terms:["shore"],name:"Coastline"},"natural/fell":{geometry:["area"],tags:{natural:"fell"},terms:[],name:"Fell"},"natural/glacier":{icon:"temaki-snow",geometry:["area"],tags:{natural:"glacier"},terms:["ice","snow"],name:"Glacier"},"natural/grassland":{geometry:["area"],tags:{natural:"grassland"},terms:["prairie","savanna"],name:"Grassland"},"natural/heath":{geometry:["area"],tags:{natural:"heath"},terms:[],name:"Heath"},"natural/mud":{geometry:["area"],tags:{natural:"mud"},terms:["wetland"],name:"Mud"},"natural/peak":{icon:"maki-mountain",fields:["name","elevation"],geometry:["point","vertex"],tags:{natural:"peak"},terms:["acme","aiguille","alp","climax","crest","crown","hill","mount","mountain","pinnacle","summit","tip","top"],name:"Peak"},"natural/reef":{icon:"temaki-beach",geometry:["point","area"],tags:{natural:"reef"},terms:["barrier","coral","ocean","sand","shoal"],name:"Reef"},"natural/ridge":{geometry:["line"],tags:{natural:"ridge"},terms:["crest"],name:"Ridge"},"natural/rock":{icon:"temaki-boulder2",fields:["name"],geometry:["point","area"],tags:{natural:"rock"},terms:["boulder","stone","rock"],name:"Attached Rock / Boulder"},"natural/saddle":{icon:"maki-triangle-stroked",fields:["elevation"],geometry:["point","vertex"],tags:{natural:"saddle"},terms:["pass","mountain pass","top"],name:"Saddle"},"natural/sand":{geometry:["area"],tags:{natural:"sand"},terms:["desert"],name:"Sand"},"natural/scree":{geometry:["area"],tags:{natural:"scree"},terms:["loose rocks"],name:"Scree"},"natural/scrub":{geometry:["area"],tags:{natural:"scrub"},terms:["bush","shrubs"],name:"Scrub"},"natural/shingle":{geometry:["area"],tags:{natural:"shingle"},terms:["beach","gravel","pebbles","riverbed","rounded rock fragments"],name:"Shingle"},"natural/spring":{icon:"maki-water",fields:["name","intermittent"],geometry:["point","vertex"],tags:{natural:"spring"},terms:[],name:"Spring"},"natural/stone":{icon:"temaki-boulder1",fields:["name"],geometry:["point","area"],tags:{natural:"stone"},terms:["boulder","stone","rock"],name:"Unattached Stone / Boulder"},"natural/tree_row":{icon:"maki-park",fields:["leaf_type","leaf_cycle","denotation"],geometry:["line"],tags:{natural:"tree_row"},terms:[],name:"Tree Row"},"natural/tree":{icon:"maki-park",fields:["leaf_type_singular","leaf_cycle_singular","denotation"],geometry:["point","vertex"],tags:{natural:"tree"},terms:[],name:"Tree"},"natural/valley":{icon:"maki-triangle-stroked",fields:["name","elevation","description"],geometry:["vertex","point","line"],tags:{natural:"valley"},terms:["canyon","dale","dell","dene","depression","glen","gorge","gully","gulley","gultch","hollow","ravine","rift","vale"],name:"Valley"},"natural/volcano":{icon:"maki-volcano",fields:["name","elevation","volcano/status","volcano/type"],geometry:["point","vertex"],tags:{natural:"volcano"},terms:["mountain","crater"],name:"Volcano"},"natural/water":{icon:"maki-water",fields:["name","water","intermittent"],moreFields:["fishing","salt","tidal"],geometry:["area"],tags:{natural:"water"},name:"Water"},"natural/water/basin":{icon:"maki-water",fields:["name","basin","intermittent_yes"],geometry:["area"],tags:{natural:"water",water:"basin"},reference:{key:"water",value:"basin"},terms:["detention","drain","overflow","rain","retention"],name:"Basin"},"natural/water/canal":{icon:"iD-waterway-canal",fields:["{natural/water}","salt"],geometry:["area"],tags:{natural:"water",water:"canal"},reference:{key:"water",value:"canal"},name:"Canal"},"natural/water/lake":{icon:"maki-water",fields:["{natural/water}","salt","tidal"],geometry:["area"],tags:{natural:"water",water:"lake"},reference:{key:"water",value:"lake"},terms:["lakelet","loch","mere"],name:"Lake"},"natural/water/moat":{icon:"maki-water",fields:["{natural/water}","salt"],geometry:["area"],tags:{natural:"water",water:"moat"},name:"Moat"},"natural/water/pond":{icon:"maki-water",fields:["{natural/water}","salt"],geometry:["area"],tags:{natural:"water",water:"pond"},reference:{key:"water",value:"pond"},terms:["lakelet","millpond","tarn","pool","mere"],name:"Pond"},"natural/water/reservoir":{icon:"maki-water",geometry:["area"],tags:{natural:"water",water:"reservoir"},reference:{key:"water",value:"reservoir"},name:"Reservoir"},"natural/water/river":{icon:"iD-waterway-river",fields:["{natural/water}","tidal"],geometry:["area"],tags:{natural:"water",water:"river"},reference:{key:"water",value:"river"},terms:["beck","branch","brook","course","creek","estuary","rill","riverbank","rivulet","run","runnel","stream","tributary","watercourse"],name:"River"},"natural/water/stream":{icon:"iD-waterway-stream",fields:["{natural/water}"],geometry:["area"],tags:{natural:"water",water:"stream"},reference:{key:"water",value:"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"],name:"Stream"},"natural/water/wastewater":{icon:"maki-water",geometry:["area"],tags:{natural:"water",water:"wastewater"},reference:{key:"water",value:"wastewater"},terms:["excrement","shit","sewage","wastewater","Settling Basin","Clarifier Basin"],name:"Wastewater Basin"},"natural/wetland":{icon:"maki-wetland",fields:["wetland","salt","tidal"],geometry:["point","area"],tags:{natural:"wetland"},terms:["bog","fen","marsh","mire","moor","muskeg","peatland","quagmire","reedbed","saltmarsh","swamp","tidalflat","wet meadow"],name:"Wetland"},"natural/wood":{icon:"maki-park-alt1",fields:["name","leaf_type","leaf_cycle"],geometry:["point","area"],tags:{natural:"wood"},terms:["tree"],name:"Wood"},"noexit/yes":{icon:"maki-barrier",geometry:["vertex"],terms:["no exit","road end","dead end"],tags:{noexit:"yes"},reference:{key:"noexit",value:"*"},name:"No Exit"},office:{icon:"maki-suitcase",fields:["name","office","address","building_area","opening_hours"],moreFields:["air_conditioning","building/levels_building","height_building","email","fax","internet_access","internet_access/fee","internet_access/ssid","operator","phone","smoking","website","wheelchair"],geometry:["point","vertex","area"],tags:{office:"*"},terms:[],name:"Office"},"office/administrative":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"administrative"},terms:[],searchable:false,name:"Administrative Office",replacement:"office/government"},"office/physician":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"physician"},searchable:false,name:"Physician"},"office/travel_agent":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"travel_agent"},reference:{key:"shop",value:"travel_agency"},terms:[],name:"Travel Agency",searchable:false},"office/accountant":{icon:"temaki-accounting",geometry:["point","area"],tags:{office:"accountant"},terms:[],name:"Accountant Office"},"office/adoption_agency":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"adoption_agency"},terms:[],name:"Adoption Agency"},"office/advertising_agency":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"advertising_agency"},terms:["ad","ad agency","advert agency","advertising","marketing"],name:"Advertising Agency"},"office/architect":{icon:"fas-drafting-compass",geometry:["point","area"],tags:{office:"architect"},terms:[],name:"Architect Office"},"office/association":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"association"},terms:["association","non-profit","nonprofit","organization","society"],name:"Nonprofit Organization Office"},"office/charity":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"charity"},terms:["charitable organization"],name:"Charity Office"},"office/company":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"company"},terms:[],name:"Corporate Office"},"office/coworking":{icon:"maki-suitcase",fields:["{office}","internet_access"],moreFields:["internet_access/fee","internet_access/ssid"],geometry:["point","area"],terms:["coworking","office"],tags:{office:"coworking"},reference:{key:"amenity",value:"coworking_space"},name:"Coworking Space"},"office/diplomatic":{icon:"maki-embassy",fields:["name","diplomatic","country","target","diplomatic/services","{office}"],geometry:["point","area"],tags:{office:"diplomatic"},terms:[],name:"Diplomatic Office"},"office/diplomatic/consulate":{icon:"maki-embassy",fields:["name","consulate","{office/diplomatic}"],geometry:["point","area"],tags:{office:"diplomatic",diplomatic:"consulate"},reference:{key:"diplomatic",value:"consulate"},terms:[],name:"Consulate"},"office/diplomatic/embassy":{icon:"maki-embassy",fields:["name","embassy","{office/diplomatic}"],geometry:["point","area"],tags:{office:"diplomatic",diplomatic:"embassy"},reference:{key:"diplomatic",value:"embassy"},terms:[],name:"Embassy"},"office/diplomatic/liaison":{icon:"maki-embassy",fields:["name","liaison","{office/diplomatic}"],geometry:["point","area"],tags:{office:"diplomatic",diplomatic:"liaison"},reference:{key:"diplomatic",value:"liaison"},terms:[],name:"Liaison Office"},"office/educational_institution":{icon:"maki-school",geometry:["point","area"],tags:{office:"educational_institution"},terms:[],name:"Educational Institution"},"office/employment_agency":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"employment_agency"},terms:["job"],name:"Employment Agency"},"office/energy_supplier":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"energy_supplier"},terms:["electricity","energy company","energy utility","gas utility"],name:"Energy Supplier Office"},"office/estate_agent":{icon:"temaki-real_estate_agency",geometry:["point","area"],tags:{office:"estate_agent"},terms:["real estate"],name:"Real Estate Office"},"office/financial_advisor":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"financial_advisor"},terms:["401k","inheritance","savings","stocks","retirement","wealth management"],name:"Financial Advisor"},"office/financial":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"financial"},terms:[],name:"Financial Office"},"office/forestry":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"forestry"},terms:["forest","ranger"],name:"Forestry Office"},"office/foundation":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"foundation"},terms:[],name:"Foundation Office"},"office/government":{icon:"maki-town-hall",fields:["name","government","{office}"],geometry:["point","area"],tags:{office:"government"},terms:[],name:"Government Office"},"office/government/register_office":{icon:"maki-town-hall",fields:["{office}","operator"],geometry:["point","area"],terms:["clerk","marriage","death","birth","certificate"],tags:{office:"government",government:"register_office"},reference:{key:"government",value:"register_office"},name:"Register Office"},"office/government/tax":{icon:"maki-town-hall",fields:["{office}","operator"],geometry:["point","area"],terms:["fiscal authorities","revenue office","tax office"],tags:{office:"government",government:"tax"},reference:{key:"government",value:"tax"},name:"Tax and Revenue Office"},"office/guide":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"guide"},terms:["dive guide","mountain guide","tour guide"],name:"Tour Guide Office"},"office/insurance":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"insurance"},terms:[],name:"Insurance Office"},"office/it":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"it"},terms:["computer","information","software","technology"],name:"Information Technology Office"},"office/lawyer":{icon:"fas-balance-scale",geometry:["point","area"],tags:{office:"lawyer"},terms:[],name:"Law Office"},"office/lawyer/notary":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"lawyer",lawyer:"notary"},reference:{key:"office",value:"notary"},searchable:false,name:"Notary Office"},"office/moving_company":{icon:"fas-people-carry",geometry:["point","area"],tags:{office:"moving_company"},terms:["relocation"],name:"Moving Company Office"},"office/newspaper":{icon:"fas-newspaper",geometry:["point","area"],tags:{office:"newspaper"},terms:[],name:"Newspaper Office"},"office/ngo":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"ngo"},terms:["ngo","non government","non-government","organization","organisation"],name:"NGO Office"},"office/notary":{icon:"fas-stamp",geometry:["point","area"],tags:{office:"notary"},terms:["clerk","deeds","estate","signature","wills"],name:"Notary Office"},"office/political_party":{icon:"maki-town-hall",geometry:["point","area"],tags:{office:"political_party"},terms:[],name:"Political Party"},"office/private_investigator":{icon:"fas-user-secret",geometry:["point","area"],tags:{office:"private_investigator"},terms:["PI","private eye","private detective"],name:"Private Investigator Office"},"office/quango":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"quango"},terms:["ngo","non government","non-government","organization","organisation","quasi autonomous","quasi-autonomous"],name:"Quasi-NGO Office"},"office/religion":{icon:"maki-suitcase",fields:["{office}","religion","denomination"],geometry:["point","area"],tags:{office:"religion"},terms:[],name:"Religious Office"},"office/research":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"research"},terms:[],name:"Research Office"},"office/surveyor":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"surveyor"},terms:[],name:"Surveyor Office"},"office/tax_advisor":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"tax_advisor"},terms:["tax","tax consultant"],name:"Tax Advisor Office"},"office/telecommunication":{icon:"maki-telephone",geometry:["point","area"],tags:{office:"telecommunication"},terms:["communication","internet","phone","voice"],name:"Telecom Office"},"office/therapist":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"therapist"},terms:["therapy"],name:"Therapist Office"},"office/water_utility":{icon:"maki-suitcase",fields:["{office}","operator"],geometry:["point","area"],tags:{office:"water_utility"},terms:["water board","utility"],name:"Water Utility Office"},"piste/downhill":{icon:"fas-skiing",fields:["name","piste/type","piste/difficulty_downhill","piste/grooming_downhill","oneway","lit"],geometry:["line","area"],terms:["ski","alpine","snowboard","downhill","piste"],tags:{"piste:type":"downhill"},name:"Downhill Piste/Ski Run"},"piste/downhill/halfpipe":{icon:"fas-snowboarding",geometry:["line","area"],terms:["ski","alpine","halfpipe","half pipe","snowboard","downhill","piste"],tags:{"piste:type":"downhill",man_made:"piste:halfpipe"},name:"Halfpipe"},"piste/hike":{icon:"temaki-snow_shoeing",fields:["name","piste/type","piste/difficulty","piste/grooming_hike","oneway","lit"],geometry:["line","area"],terms:["hike","winter hiking","snowshoe","snowshoeing","piste","ski"],tags:{"piste:type":"hike"},name:"Snowshoeing or Winter Hiking Trail"},"piste/ice_skate":{icon:"fas-skating",fields:["name","piste/type","sport_ice","oneway","lit"],geometry:["line","area"],terms:["ice","skating","ski","piste"],tags:{"piste:type":"ice_skate"},name:"Ice Skating Piste"},"piste/nordic":{icon:"fas-skiing-nordic",fields:["name","piste/type","piste/difficulty_nordic","piste/grooming_nordic","oneway","lit"],geometry:["line","area"],terms:["ski","nordic","crosscountry","skating","piste"],tags:{"piste:type":"nordic"},name:"Nordic or Crosscountry Piste/Ski Trail"},"piste/piste":{icon:"fas-skiing",fields:["name","piste/type","piste/difficulty","piste/grooming","oneway","lit"],geometry:["line","area"],terms:["ski","nordic","crosscountry","downhill","alpine","snowboard","skitour","ski touring","sled","luge","sleigh","sledge","ski-joring","husky","horse","winter hiking","snowshoe","snowshoeing","ice","skating"],tags:{"piste:type":"*"},name:"Winter Sport Trails"},"piste/skitour":{icon:"fas-skiing-nordic",fields:["name","piste/type","piste/difficulty_skitour","piste/grooming","oneway","lit"],geometry:["line","area"],terms:["ski","skitour","crosscountry","ski touring","piste"],tags:{"piste:type":"skitour"},name:"Ski Touring Trail"},"piste/sled":{icon:"temaki-sledding",fields:["name","piste/type","piste/difficulty","piste/grooming","oneway","lit"],geometry:["line","area"],terms:["ski","sled","luge","sleigh","sledge","piste"],tags:{"piste:type":"sled"},name:"Sled Piste"},"piste/sleigh":{icon:"fas-sleigh",fields:["name","piste/type","piste/difficulty","piste/grooming","oneway","lit"],geometry:["line","area"],terms:["ski","piste","sled","luge","sleigh","sledge","ski-joring","husky","horse"],tags:{"piste:type":"sleigh"},name:"Sleigh Piste"},"place/farm":{icon:"maki-farm",geometry:["point","area"],fields:["name"],tags:{place:"farm"},name:"Farm",searchable:false},"place/city_block":{icon:"maki-triangle-stroked",fields:["name"],moreFields:["website"],geometry:["point","area"],tags:{place:"city_block"},name:"City Block"},"place/city":{icon:"maki-city",fields:["name","population"],moreFields:["website"],geometry:["point","area"],tags:{place:"city"},name:"City"},"place/hamlet":{icon:"maki-triangle-stroked",fields:["name","population"],moreFields:["website"],geometry:["point","area"],tags:{place:"hamlet"},name:"Hamlet"},"place/island":{icon:"maki-mountain",geometry:["point","area"],fields:["name"],terms:["archipelago","atoll","bar","cay","isle","islet","key","reef"],tags:{place:"island"},name:"Island"},"place/islet":{icon:"maki-mountain",geometry:["point","area"],fields:["name"],terms:["archipelago","atoll","bar","cay","isle","islet","key","reef"],tags:{place:"islet"},name:"Islet"},"place/isolated_dwelling":{icon:"maki-home",geometry:["point","area"],fields:["name"],tags:{place:"isolated_dwelling"},name:"Isolated Dwelling"},"place/locality":{icon:"maki-triangle-stroked",geometry:["point","area"],moreFields:["website"],fields:["name"],tags:{place:"locality"},name:"Locality"},"place/neighbourhood":{icon:"maki-triangle-stroked",fields:["name","population"],moreFields:["website"],geometry:["point","area"],tags:{place:"neighbourhood"},terms:["neighbourhood"],name:"Neighborhood"},"place/plot":{icon:"maki-triangle-stroked",fields:["name"],geometry:["point","area"],tags:{place:"plot"},terms:["tract","land","lot","parcel"],name:"Plot"},"place/quarter":{icon:"maki-triangle-stroked",fields:["name","population"],moreFields:["website"],geometry:["point","area"],tags:{place:"quarter"},terms:["boro","borough","quarter"],name:"Sub-Borough / Quarter"},"place/square":{icon:"temaki-pedestrian",geometry:["point","area"],fields:["name"],moreFields:["website"],tags:{place:"square"},name:"Square"},"place/suburb":{icon:"maki-triangle-stroked",fields:["name","population"],moreFields:["website"],geometry:["point","area"],tags:{place:"suburb"},terms:["boro","borough","quarter"],name:"Borough / Suburb"},"place/town":{icon:"maki-town",fields:["name","population"],moreFields:["website"],geometry:["point","area"],tags:{place:"town"},name:"Town"},"place/village":{icon:"maki-village",fields:["name","population"],moreFields:["website"],geometry:["point","area"],tags:{place:"village"},name:"Village"},"playground/balance_beam":{icon:"maki-playground",geometry:["point","line"],tags:{playground:"balancebeam"},name:"Play Balance Beam"},"playground/basket_spinner":{icon:"maki-playground",geometry:["point"],terms:["basket rotator"],tags:{playground:"basketrotator"},name:"Basket Spinner"},"playground/basket_swing":{icon:"maki-playground",geometry:["point"],tags:{playground:"basketswing"},name:"Basket Swing"},"playground/climbing_frame":{icon:"maki-playground",geometry:["point","area"],tags:{playground:"climbingframe"},name:"Climbing Frame"},"playground/cushion":{icon:"maki-playground",geometry:["point","area"],tags:{playground:"cushion"},name:"Bouncy Cushion"},"playground/horizontal_bar":{icon:"maki-pitch",fields:["height"],geometry:["point"],terms:["high bar"],tags:{playground:"horizontal_bar"},name:"Play Horizontal Bar"},"playground/rocker":{icon:"maki-playground",geometry:["point"],tags:{playground:"springy"},name:"Spring Rider",terms:["spring rocker","springy rocker"]},"playground/roundabout":{icon:"maki-stadium",fields:["bench"],geometry:["point","area"],tags:{playground:"roundabout"},name:"Play Roundabout",terms:["merry-go-round"]},"playground/sandpit":{icon:"maki-playground",geometry:["point","area"],tags:{playground:"sandpit"},name:"Sandpit"},"playground/seesaw":{icon:"maki-playground",geometry:["point"],tags:{playground:"seesaw"},name:"Seesaw"},"playground/slide":{icon:"maki-playground",geometry:["point","line"],tags:{playground:"slide"},name:"Slide"},"playground/structure":{icon:"maki-pitch",geometry:["point","area"],tags:{playground:"structure"},name:"Play Structure"},"playground/swing":{icon:"maki-playground",fields:["capacity","playground/baby","wheelchair"],geometry:["point"],tags:{playground:"swing"},name:"Swing"},"playground/zipwire":{icon:"maki-playground",geometry:["point","line"],tags:{playground:"zipwire"},name:"Zip Wire"},point:{fields:["name"],geometry:["vertex","point"],tags:{},terms:["node","other","vertex","vertices"],name:"Point",matchScore:0.1},"power/sub_station":{icon:"temaki-power",fields:["substation","operator","building","ref"],geometry:["point","area"],tags:{power:"sub_station"},reference:{key:"power",value:"substation"},name:"Substation",searchable:false},"power/cable/underground":{fields:["name","operator","voltage","ref","layer"],geometry:["line"],tags:{power:"cable",location:"underground"},addTags:{power:"cable",location:"underground",layer:"-1"},name:"Underground Power Cable"},"power/generator":{icon:"temaki-power",fields:["operator","generator/source","generator/method","generator/type","generator/output/electricity","ref"],moreFields:["manufacturer"],geometry:["point","vertex","area"],terms:["hydro","solar","turbine","wind"],tags:{power:"generator"},name:"Power Generator"},"power/generator/method/photovoltaic":{icon:"fas-solar-panel",fields:["operator","generator/output/electricity","ref"],moreFields:["manufacturer"],geometry:["point","vertex","area"],terms:["photovoltaic module","PV module","sunlight"],tags:{power:"generator","generator:method":"photovoltaic"},addTags:{power:"generator","generator:source":"solar","generator:method":"photovoltaic","generator:type":"solar_photovoltaic_panel","generator:output:electricity":"yes"},reference:{key:"generator:method",value:"photovoltaic"},name:"Solar Panel"},"power/generator/source/hydro":{icon:"temaki-power",fields:["operator","generator/method","generator/type","generator/output/electricity","ref"],moreFields:["height","manufacturer"],geometry:["point","vertex","area"],terms:["dam","generator","francis turbine","hydroelectricity","kaplan turbine","pelton turbine"],tags:{power:"generator","generator:source":"hydro"},addTags:{power:"generator","generator:source":"hydro","generator:output:electricity":"yes"},reference:{key:"generator:source",value:"hydro"},name:"Water Turbine"},"power/generator/source/nuclear":{icon:"temaki-radiation",fields:["operator","generator/source","generator/method","generator/type","generator/output/electricity","ref"],moreFields:["manufacturer"],geometry:["point","vertex","area"],terms:["fission","generator","nuclear","nuke","reactor"],tags:{power:"generator","generator:source":"nuclear","generator:method":"fission"},reference:{key:"generator:source",value:"nuclear"},name:"Nuclear Reactor"},"power/generator/source/wind":{icon:"temaki-wind_turbine",fields:["operator","generator/type","generator/output/electricity","height","ref"],moreFields:["manufacturer"],geometry:["point","vertex","area"],terms:["generator","turbine","windmill","wind"],tags:{power:"generator","generator:source":"wind","generator:method":"wind_turbine"},reference:{key:"generator:source",value:"wind"},name:"Wind Turbine"},"power/line":{icon:"iD-power-line",fields:["name","operator","voltage","ref","layer"],geometry:["line"],tags:{power:"line"},name:"Power Line"},"power/minor_line":{icon:"iD-power-line",fields:["name","operator","voltage","ref","layer"],geometry:["line"],tags:{power:"minor_line"},name:"Minor Power Line"},"power/plant":{icon:"maki-industry",fields:["name","operator","address","plant/output/electricity","start_date"],geometry:["area"],tags:{power:"plant"},addTags:{power:"plant",landuse:"industrial"},terms:["coal","gas","generat*","hydro","nuclear","power","station"],name:"Power Station Grounds"},"power/pole":{fields:["ref","material","operator","manufacturer"],geometry:["point","vertex"],tags:{power:"pole"},name:"Power Pole"},"power/substation":{icon:"temaki-power",fields:["substation","operator","building","ref"],geometry:["point","area"],tags:{power:"substation"},name:"Substation"},"power/switch":{icon:"temaki-power",fields:["switch","operator","location","cables","voltage","ref"],geometry:["point","vertex"],tags:{power:"switch"},name:"Power Switch"},"power/tower":{fields:["design","ref","material","operator","manufacturer"],geometry:["point","vertex"],terms:["power"],tags:{power:"tower"},name:"High-Voltage Tower"},"power/transformer":{icon:"temaki-power",fields:["ref","operator","transformer","location","rating","devices","phases"],moreFields:["frequency","manufacturer","voltage/primary","voltage/secondary","voltage/tertiary","windings","windings/configuration"],geometry:["point","vertex","area"],tags:{power:"transformer"},name:"Transformer"},"public_transport/platform_point":{icon:"maki-rail",fields:["name","network","operator","departures_board","shelter"],moreFields:["bench","bin","lit","wheelchair"],geometry:["point"],tags:{public_transport:"platform"},terms:["platform","public transit","public transportation","transit","transportation"],name:"Transit Stop / Platform",matchScore:0.2},"public_transport/platform":{icon:"temaki-pedestrian",fields:["ref_platform","network","operator","departures_board","surface"],moreFields:["access","covered","indoor","layer","lit","wheelchair"],geometry:["line","area"],tags:{public_transport:"platform"},addTags:{public_transport:"platform",highway:"footway"},terms:["platform","public transit","public transportation","transit","transportation"],name:"Transit Platform",matchScore:0.2},"public_transport/platform/aerialway_point":{icon:"maki-aerialway",fields:["{public_transport/platform_point}"],moreFields:["{public_transport/platform_point}"],geometry:["point"],tags:{public_transport:"platform",aerialway:"yes"},reference:{key:"public_transport",value:"platform"},terms:["aerialway","cable car","platform","public transit","public transportation","transit","transportation"],searchable:false,name:"Aerialway Stop / Platform"},"public_transport/platform/ferry_point":{icon:"maki-ferry",fields:["{public_transport/platform_point}"],moreFields:["{public_transport/platform_point}"],geometry:["point"],tags:{public_transport:"platform",ferry:"yes"},reference:{key:"public_transport",value:"platform"},terms:["boat","dock","ferry","pier","platform","public transit","public transportation","transit","transportation"],searchable:false,name:"Ferry Stop / Platform"},"public_transport/platform/light_rail_point":{icon:"temaki-light_rail",fields:["{public_transport/platform_point}"],moreFields:["{public_transport/platform_point}"],geometry:["point"],tags:{public_transport:"platform",light_rail:"yes"},reference:{key:"railway",value:"platform"},terms:["electric","light rail","platform","public transit","public transportation","rail","track","tram","trolley","transit","transportation"],searchable:false,name:"Light Rail Stop / Platform"},"public_transport/platform/monorail_point":{icon:"temaki-monorail",fields:["{public_transport/platform_point}"],moreFields:["{public_transport/platform_point}"],geometry:["point"],tags:{public_transport:"platform",monorail:"yes"},reference:{key:"railway",value:"platform"},terms:["monorail","platform","public transit","public transportation","rail","transit","transportation"],searchable:false,name:"Monorail Stop / Platform"},"public_transport/platform/subway_point":{icon:"temaki-subway",fields:["{public_transport/platform_point}"],moreFields:["{public_transport/platform_point}"],geometry:["point"],tags:{public_transport:"platform",subway:"yes"},reference:{key:"railway",value:"platform"},terms:["metro","platform","public transit","public transportation","rail","subway","track","transit","transportation","underground"],searchable:false,name:"Subway Stop / Platform"},"public_transport/platform/train_point":{icon:"maki-rail",fields:["{public_transport/platform_point}"],moreFields:["{public_transport/platform_point}"],geometry:["point"],tags:{public_transport:"platform",train:"yes"},reference:{key:"railway",value:"platform"},terms:["platform","public transit","public transportation","rail","track","train","transit","transportation"],searchable:false,name:"Train Stop / Platform"},"public_transport/platform/tram_point":{icon:"temaki-tram",fields:["{public_transport/platform_point}"],moreFields:["{public_transport/platform_point}"],geometry:["point"],tags:{public_transport:"platform",tram:"yes"},reference:{key:"public_transport",value:"platform"},terms:["electric","light rail","platform","public transit","public transportation","rail","streetcar","track","tram","trolley","transit","transportation"],searchable:false,name:"Tram Stop / Platform"},"public_transport/platform/aerialway":{icon:"temaki-pedestrian",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["line","area"],tags:{public_transport:"platform",aerialway:"yes"},addTags:{public_transport:"platform",aerialway:"yes",highway:"footway"},reference:{key:"public_transport",value:"platform"},terms:["aerialway","cable car","platform","public transit","public transportation","transit","transportation"],name:"Aerialway Platform"},"public_transport/platform/bus_point":{icon:"maki-bus",fields:["{public_transport/platform_point}"],moreFields:["{public_transport/platform_point}"],geometry:["point","vertex"],tags:{public_transport:"platform",bus:"yes"},addTags:{public_transport:"platform",bus:"yes",highway:"bus_stop"},reference:{key:"public_transport",value:"platform"},terms:["bus","platform","public transit","public transportation","transit","transportation"],name:"Bus Stop"},"public_transport/platform/bus":{icon:"temaki-pedestrian",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["line","area"],tags:{public_transport:"platform",bus:"yes"},addTags:{public_transport:"platform",bus:"yes",highway:"footway"},reference:{key:"public_transport",value:"platform"},terms:["bus","platform","public transit","public transportation","transit","transportation"],name:"Bus Platform"},"public_transport/platform/ferry":{icon:"temaki-pedestrian",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["line","area"],tags:{public_transport:"platform",ferry:"yes"},addTags:{public_transport:"platform",ferry:"yes",highway:"footway"},reference:{key:"public_transport",value:"platform"},terms:["boat","dock","ferry","pier","platform","public transit","public transportation","transit","transportation"],name:"Ferry Platform"},"public_transport/platform/light_rail":{icon:"temaki-pedestrian",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["line","area"],tags:{public_transport:"platform",light_rail:"yes"},addTags:{public_transport:"platform",light_rail:"yes",railway:"platform",highway:"footway"},reference:{key:"railway",value:"platform"},terms:["electric","light rail","platform","public transit","public transportation","rail","track","tram","trolley","transit","transportation"],name:"Light Rail Platform"},"public_transport/platform/monorail":{icon:"temaki-pedestrian",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["line","area"],tags:{public_transport:"platform",monorail:"yes"},addTags:{public_transport:"platform",monorail:"yes",railway:"platform",highway:"footway"},reference:{key:"railway",value:"platform"},terms:["monorail","platform","public transit","public transportation","rail","transit","transportation"],name:"Monorail Platform"},"public_transport/platform/subway":{icon:"temaki-pedestrian",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["line","area"],tags:{public_transport:"platform",subway:"yes"},addTags:{public_transport:"platform",subway:"yes",railway:"platform",highway:"footway"},reference:{key:"railway",value:"platform"},terms:["metro","platform","public transit","public transportation","rail","subway","track","transit","transportation","underground"],name:"Subway Platform"},"public_transport/platform/train":{icon:"temaki-pedestrian",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["line","area"],tags:{public_transport:"platform",train:"yes"},addTags:{public_transport:"platform",train:"yes",railway:"platform",highway:"footway"},reference:{key:"railway",value:"platform"},terms:["platform","public transit","public transportation","rail","track","train","transit","transportation"],name:"Train Platform"},"public_transport/platform/tram":{icon:"temaki-pedestrian",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["line","area"],tags:{public_transport:"platform",tram:"yes"},addTags:{public_transport:"platform",tram:"yes",railway:"platform",highway:"footway"},reference:{key:"public_transport",value:"platform"},terms:["electric","light rail","platform","public transit","public transportation","rail","streetcar","track","tram","trolley","transit","transportation"],name:"Tram Platform"},"public_transport/platform/trolleybus_point":{icon:"temaki-trolleybus",fields:["{public_transport/platform_point}"],moreFields:["{public_transport/platform_point}"],geometry:["point","vertex"],tags:{public_transport:"platform",trolleybus:"yes"},addTags:{public_transport:"platform",trolleybus:"yes",highway:"bus_stop"},reference:{key:"public_transport",value:"platform"},terms:["bus","electric","platform","public transit","public transportation","streetcar","trackless","tram","trolley","transit","transportation"],name:"Trolleybus Stop"},"public_transport/platform/trolleybus":{icon:"temaki-pedestrian",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["line","area"],tags:{public_transport:"platform",trolleybus:"yes"},addTags:{public_transport:"platform",trolleybus:"yes",highway:"footway"},reference:{key:"public_transport",value:"platform"},terms:["bus","electric","platform","public transit","public transportation","streetcar","trackless","tram","trolley","transit","transportation"],name:"Trolleybus Platform"},"public_transport/station_aerialway":{icon:"maki-aerialway",fields:["{public_transport/station}","aerialway/access","aerialway/summer/access"],moreFields:["{public_transport/station}"],geometry:["point","vertex","area"],tags:{public_transport:"station",aerialway:"yes"},reference:{key:"aerialway",value:"station"},terms:["aerialway","cable car","public transit","public transportation","station","terminal","transit","transportation"],name:"Aerialway Station"},"public_transport/station_bus":{icon:"maki-bus",fields:["{public_transport/station}"],moreFields:["{public_transport/station}"],geometry:["point","area"],tags:{public_transport:"station",bus:"yes"},addTags:{public_transport:"station",bus:"yes",amenity:"bus_station"},reference:{key:"amenity",value:"bus_station"},terms:["bus","public transit","public transportation","station","terminal","transit","transportation"],name:"Bus Station / Terminal"},"public_transport/station_ferry":{icon:"maki-ferry",fields:["{public_transport/station}"],moreFields:["{public_transport/station}"],geometry:["vertex","point","area"],tags:{public_transport:"station",ferry:"yes"},addTags:{public_transport:"station",ferry:"yes",amenity:"ferry_terminal"},reference:{key:"amenity",value:"ferry_terminal"},terms:["boat","dock","ferry","pier","public transit","public transportation","station","terminal","transit","transportation"],name:"Ferry Station / Terminal"},"public_transport/station_light_rail":{icon:"temaki-light_rail",fields:["{public_transport/station}"],moreFields:["{public_transport/station}"],geometry:["point","area"],tags:{public_transport:"station",light_rail:"yes"},addTags:{public_transport:"station",light_rail:"yes",railway:"station",station:"light_rail"},reference:{key:"station",value:"light_rail"},terms:["electric","light rail","public transit","public transportation","rail","station","terminal","track","tram","trolley","transit","transportation"],name:"Light Rail Station"},"public_transport/station_monorail":{icon:"temaki-monorail",fields:["{public_transport/station}"],moreFields:["{public_transport/station}"],geometry:["point","area"],tags:{public_transport:"station",monorail:"yes"},addTags:{public_transport:"station",monorail:"yes",railway:"station"},reference:{key:"railway",value:"station"},terms:["monorail","public transit","public transportation","rail","station","terminal","transit","transportation"],name:"Monorail Station"},"public_transport/station_subway":{icon:"temaki-subway",fields:["{public_transport/station}"],moreFields:["{public_transport/station}"],geometry:["point","area"],tags:{public_transport:"station",subway:"yes"},addTags:{public_transport:"station",subway:"yes",railway:"station",station:"subway"},reference:{key:"station",value:"subway"},terms:["metro","public transit","public transportation","rail","station","subway","terminal","track","transit","transportation","underground"],name:"Subway Station"},"public_transport/station_train_halt":{icon:"maki-rail",fields:["{public_transport/station}"],moreFields:["{public_transport/station}"],geometry:["point","area"],tags:{public_transport:"station",train:"yes",railway:"halt"},reference:{key:"railway",value:"halt"},terms:["halt","public transit","public transportation","rail","station","track","train","transit","transportation","whistle stop"],name:"Train Station (Halt / Request)"},"public_transport/station_train":{icon:"maki-rail",fields:["{public_transport/station}"],moreFields:["{public_transport/station}"],geometry:["vertex","point","area"],tags:{public_transport:"station",train:"yes"},addTags:{public_transport:"station",train:"yes",railway:"station"},reference:{key:"railway",value:"station"},terms:["public transit","public transportation","rail","station","terminal","track","train","transit","transportation"],name:"Train Station"},"public_transport/station_tram":{icon:"temaki-tram",fields:["{public_transport/station}"],moreFields:["{public_transport/station}"],geometry:["point","area"],tags:{public_transport:"station",tram:"yes"},reference:{key:"public_transport",value:"station"},terms:["electric","light rail","public transit","public transportation","rail","station","streetcar","terminal","track","tram","trolley","transit","transportation"],name:"Tram Station"},"public_transport/station_trolleybus":{icon:"temaki-trolleybus",fields:["{public_transport/station}"],moreFields:["{public_transport/station}"],geometry:["point","area"],tags:{public_transport:"station",trolleybus:"yes"},addTags:{public_transport:"station",trolleybus:"yes",amenity:"bus_station"},reference:{key:"amenity",value:"bus_station"},terms:["bus","electric","public transit","public transportation","station","streetcar","terminal","trackless","tram","trolley","transit","transportation"],name:"Trolleybus Station / Terminal"},"public_transport/station":{icon:"maki-rail",fields:["name","network","operator","address","building_area","internet_access"],moreFields:["air_conditioning","internet_access/fee","internet_access/ssid","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{public_transport:"station"},terms:["public transit","public transportation","station","terminal","transit","transportation"],name:"Transit Station",matchScore:0.2},"public_transport/stop_area":{icon:"iD-relation",fields:["name","ref","network","operator"],geometry:["relation"],tags:{type:"public_transport",public_transport:"stop_area"},reference:{key:"public_transport",value:"stop_area"},name:"Transit Stop Area"},"public_transport/stop_position_aerialway":{icon:"maki-aerialway",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",aerialway:"yes"},reference:{key:"public_transport",value:"stop_position"},terms:["aerialway","cable car","public transit","public transportation","transit","transportation"],name:"Aerialway Stopping Location"},"public_transport/stop_position_bus":{icon:"maki-bus",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",bus:"yes"},reference:{key:"public_transport",value:"stop_position"},terms:["bus","public transit","public transportation","transit","transportation"],name:"Bus Stopping Location"},"public_transport/stop_position_ferry":{icon:"maki-ferry",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",ferry:"yes"},reference:{key:"public_transport",value:"stop_position"},terms:["boat","dock","ferry","pier","public transit","public transportation","transit","transportation"],name:"Ferry Stopping Location"},"public_transport/stop_position_light_rail":{icon:"temaki-light_rail",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",light_rail:"yes"},addTags:{public_transport:"stop_position",light_rail:"yes",railway:"stop"},reference:{key:"railway",value:"stop"},terms:["electric","light rail","public transit","public transportation","rail","track","tram","trolley","transit","transportation"],name:"Light Rail Stopping Location"},"public_transport/stop_position_monorail":{icon:"temaki-monorail",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",monorail:"yes"},addTags:{public_transport:"stop_position",monorail:"yes",railway:"stop"},reference:{key:"railway",value:"stop"},terms:["monorail","public transit","public transportation","rail","transit","transportation"],name:"Monorail Stopping Location"},"public_transport/stop_position_subway":{icon:"temaki-subway",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",subway:"yes"},addTags:{public_transport:"stop_position",subway:"yes",railway:"stop"},reference:{key:"railway",value:"stop"},terms:["metro","public transit","public transportation","rail","subway","track","transit","transportation","underground"],name:"Subway Stopping Location"},"public_transport/stop_position_train":{icon:"maki-rail",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",train:"yes"},addTags:{public_transport:"stop_position",train:"yes",railway:"stop"},reference:{key:"railway",value:"stop"},terms:["public transit","public transportation","rail","track","train","transit","transportation"],name:"Train Stopping Location"},"public_transport/stop_position_tram":{icon:"temaki-tram",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",tram:"yes"},addTags:{public_transport:"stop_position",tram:"yes",railway:"tram_stop"},reference:{key:"public_transport",value:"stop_position"},terms:["electric","light rail","public transit","public transportation","rail","streetcar","track","tram","trolley","transit","transportation"],name:"Tram Stopping Location"},"public_transport/stop_position_trolleybus":{icon:"temaki-trolleybus",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",trolleybus:"yes"},reference:{key:"public_transport",value:"stop_position"},terms:["bus","electric","public transit","public transportation","streetcar","trackless","tram","trolley","transit","transportation"],name:"Trolleybus Stopping Location"},"public_transport/stop_position":{icon:"maki-bus",fields:["name","ref_stop_position","network","operator"],geometry:["vertex"],tags:{public_transport:"stop_position"},terms:["public transit","public transportation","transit","transportation"],name:"Transit Stopping Location",matchScore:0.2},"railway/halt":{icon:"maki-rail",geometry:["point","vertex"],tags:{railway:"halt"},terms:["break","interrupt","rest","wait","interruption"],name:"Train Station (Halt / Request)",searchable:false},"railway/platform":{icon:"temaki-pedestrian",fields:["name","ref_platform","surface","lit","shelter"],geometry:["line","area"],tags:{railway:"platform"},name:"Train Platform",searchable:false,replacement:"public_transport/platform/train"},"railway/station":{icon:"maki-rail",fields:["name","network","operator","address","building_area","internet_access","internet_access/fee","internet_access/ssid"],geometry:["point","vertex","area"],tags:{railway:"station"},terms:["train station","station"],matchScore:0.95,name:"Train Station",searchable:false,replacement:"public_transport/station_train"},"railway/tram_stop":{icon:"temaki-tram",fields:["name","network","operator"],geometry:["vertex"],tags:{railway:"tram_stop"},terms:["light rail","streetcar","tram","trolley"],name:"Tram Stopping Position",searchable:false},"railway/abandoned":{icon:"iD-railway-abandoned",fields:["name","structure","service_rail","usage_rail"],moreFields:["covered"],geometry:["line"],tags:{railway:"abandoned"},terms:[],matchScore:0.85,name:"Abandoned Railway"},"railway/buffer_stop":{icon:"temaki-buffer_stop",geometry:["vertex"],tags:{railway:"buffer_stop"},terms:["stop","halt","buffer"],name:"Buffer Stop"},"railway/construction":{icon:"iD-railway-rail",fields:["name","opening_date","check_date","note","structure","gauge","electrified"],moreFields:["covered","frequency_electrified","highspeed","maxspeed","service_rail","usage_rail","voltage_electrified"],geometry:["line"],tags:{railway:"construction"},name:"Railway Under Construction"},"railway/crossing":{icon:"temaki-pedestrian",geometry:["vertex"],tags:{railway:"crossing"},terms:["crossing","pedestrian crossing","railroad crossing","level crossing","grade crossing","path through railroad","train crossing"],name:"Railway Crossing (Path)"},"railway/derail":{icon:"maki-roadblock",geometry:["vertex"],tags:{railway:"derail"},terms:["derailer"],name:"Railway Derailer"},"railway/disused":{icon:"iD-railway-disused",fields:["operator","structure","service_rail","usage_rail"],moreFields:["covered"],geometry:["line"],tags:{railway:"disused"},terms:[],name:"Disused Railway"},"railway/funicular":{icon:"iD-railway-rail",fields:["name","operator","structure","gauge","service_rail"],moreFields:["covered"],geometry:["line"],terms:["venicular","cliff railway","cable car","cable railway","funicular railway"],tags:{railway:"funicular"},name:"Funicular"},"railway/level_crossing":{icon:"maki-cross",geometry:["vertex"],tags:{railway:"level_crossing"},terms:["crossing","railroad crossing","level crossing","grade crossing","road through railroad","train crossing"],name:"Railway Crossing (Road)"},"railway/light_rail":{icon:"temaki-light_rail",fields:["{railway/rail}"],moreFields:["covered","frequency_electrified","maxspeed","voltage_electrified"],geometry:["line"],tags:{railway:"light_rail"},terms:["light rail","streetcar","trolley"],name:"Light Rail"},"railway/milestone":{icon:"temaki-milestone",geometry:["point","vertex"],fields:["railway/position","direction_vertex"],tags:{railway:"milestone"},terms:["milestone","marker"],name:"Railway Milestone"},"railway/miniature":{icon:"iD-railway-rail",fields:["name","structure","gauge","electrified","service_rail"],moreFields:["covered","frequency_electrified","maxspeed","voltage_electrified"],geometry:["line"],tags:{railway:"miniature"},terms:["rideable miniature railway","narrow gauge railway","minimum gauge railway"],name:"Miniature Railway"},"railway/monorail":{icon:"temaki-monorail",fields:["name","operator","structure","electrified","service_rail","usage_rail"],moreFields:["covered","frequency_electrified","maxspeed","voltage_electrified"],geometry:["line"],tags:{railway:"monorail"},terms:[],name:"Monorail"},"railway/narrow_gauge":{icon:"iD-railway-rail",fields:["{railway/rail}"],moreFields:["covered","frequency_electrified","maxspeed","voltage_electrified"],geometry:["line"],tags:{railway:"narrow_gauge"},terms:["narrow gauge railway","narrow gauge railroad"],name:"Narrow Gauge Rail"},"railway/rail":{icon:"iD-railway-rail",fields:["name","operator","structure","gauge","electrified","service_rail","usage_rail"],moreFields:["covered","frequency_electrified","highspeed","maxspeed","voltage_electrified"],geometry:["line"],tags:{railway:"rail"},terms:["rail line","railroad track","train track"],name:"Rail"},"railway/rail/highspeed":{icon:"iD-railway-rail",geometry:["line"],tags:{railway:"rail",highspeed:"yes"},reference:{key:"highspeed"},terms:["bullet train","fast rail","high speed rail","highspeed rail","HSR"],name:"High-Speed Rail"},"railway/signal":{icon:"temaki-railway_signals",geometry:["point","vertex"],fields:["railway/position","railway/signal/direction","ref"],tags:{railway:"signal"},terms:["signal","lights"],name:"Railway Signal"},"railway/subway_entrance":{icon:"maki-entrance",geometry:["point","vertex"],fields:["name"],tags:{railway:"subway_entrance"},terms:["metro","transit"],name:"Subway Entrance"},"railway/subway":{icon:"temaki-subway",fields:["{railway/rail}"],moreFields:["covered","frequency_electrified","maxspeed","voltage_electrified"],geometry:["line"],tags:{railway:"subway"},terms:["metro","transit"],name:"Subway"},"railway/switch":{icon:"temaki-junction",geometry:["vertex"],tags:{railway:"switch"},terms:["switch","points"],name:"Railway Switch"},"railway/train_wash":{icon:"maki-rail",geometry:["point","vertex","area"],fields:["operator","building_area"],tags:{railway:"wash"},terms:["wash","clean"],name:"Train Wash"},"railway/tram":{icon:"temaki-tram",fields:["{railway/rail}"],moreFields:["covered","frequency_electrified","maxspeed","voltage_electrified"],geometry:["line"],tags:{railway:"tram"},terms:["light rail","streetcar","tram","trolley"],name:"Tram"},relation:{icon:"iD-relation",fields:["name","relation"],geometry:["relation"],tags:{},name:"Relation"},"route/ferry":{icon:"maki-ferry",geometry:["line"],fields:["name","operator","duration","access","to","from"],moreFields:["maxheight","maxweight","opening_hours","wheelchair"],tags:{route:"ferry"},name:"Ferry Route"},"seamark/beacon_isolated_danger":{fields:["ref","operator","seamark/beacon_isolated_danger/shape","seamark/type"],geometry:["point","vertex"],terms:["beacon isolated danger","isolated danger beacon","iala"],tags:{"seamark:type":"beacon_isolated_danger"},name:"Danger Beacon"},"seamark/beacon_lateral":{fields:["ref","operator","seamark/beacon_lateral/colour","seamark/beacon_lateral/category","seamark/beacon_lateral/shape","seamark/beacon_lateral/system","seamark/type"],geometry:["point","vertex"],terms:["lateral beacon","beacon lateral","cevni","channel marker","iala","lateral mark"],tags:{"seamark:type":"beacon_lateral"},name:"Channel Beacon"},"seamark/buoy_lateral":{fields:["ref","operator","seamark/buoy_lateral/colour","seamark/buoy_lateral/category","seamark/buoy_lateral/shape","seamark/buoy_lateral/system","seamark/type"],geometry:["point","vertex"],terms:["lateral buoy","buoy lateral","cevni","channel marker","iala","lateral mark"],tags:{"seamark:type":"buoy_lateral"},name:"Channel Buoy"},"seamark/buoy_lateral/green":{geometry:["point","vertex"],terms:["lateral buoy","buoy lateral","cevni","channel marker","iala","lateral mark"],tags:{"seamark:type":"buoy_lateral","seamark:buoy_lateral:colour":"green"},name:"Green Buoy"},"seamark/buoy_lateral/red":{geometry:["point","vertex"],terms:["lateral buoy","buoy lateral","cevni","channel marker","iala","lateral mark"],tags:{"seamark:type":"buoy_lateral","seamark:buoy_lateral:colour":"red"},name:"Red Buoy"},"seamark/mooring":{fields:["ref","operator","seamark/mooring/category","seamark/type"],geometry:["point"],terms:["dolphin","pile","bollard","buoy","post"],tags:{"seamark:type":"mooring"},name:"Mooring"},shop:{icon:"maki-shop",fields:["name","shop","operator","address","building_area","opening_hours","payment_multi"],moreFields:["air_conditioning","brand","building/levels_building","height_building","currency_multi","email","fax","internet_access","internet_access/fee","internet_access/ssid","phone","second_hand","website","wheelchair"],geometry:["point","area"],tags:{shop:"*"},terms:[],name:"Shop"},"shop/boutique":{icon:"maki-shop",fields:["name","clothes","{shop}"],geometry:["point","area"],tags:{shop:"boutique"},searchable:false,name:"Boutique"},"shop/fashion":{icon:"maki-shop",fields:["name","clothes","{shop}"],geometry:["point","area"],tags:{shop:"fashion"},searchable:false,name:"Fashion Store"},"shop/fishmonger":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"fishmonger"},reference:{key:"shop",value:"seafood"},name:"Fishmonger",searchable:false},"shop/furnace":{icon:"maki-shop",geometry:["point","area"],terms:["oven","stove"],tags:{shop:"furnace"},name:"Furnace Store",searchable:false},"shop/vacant":{icon:"maki-shop",fields:["name","address","building_area"],geometry:["point","area"],tags:{shop:"vacant"},name:"Vacant Shop",searchable:false},"shop/agrarian":{icon:"fas-tractor",fields:["{shop}","agrarian"],geometry:["point","area"],terms:["agricultural inputs","agricultural machines","seeds","pesticides","fertilizer","agricultural tools"],tags:{shop:"agrarian"},name:"Farm Supply Shop"},"shop/alcohol":{icon:"fas-wine-bottle",fields:["{shop}","drive_through"],geometry:["point","area"],terms:["alcohol","beer","booze","wine"],tags:{shop:"alcohol"},name:"Liquor Store"},"shop/anime":{icon:"fas-dragon",geometry:["point","area"],tags:{shop:"anime"},terms:["manga","japan","cosplay","figurine","dakimakura"],name:"Anime Shop"},"shop/antiques":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"antiques"},name:"Antiques Shop"},"shop/appliance":{icon:"maki-shop",geometry:["point","area"],terms:["air conditioner","appliance","dishwasher","dryer","freezer","fridge","grill","kitchen","oven","refrigerator","stove","washer","washing machine"],tags:{shop:"appliance"},name:"Appliance Store"},"shop/art":{icon:"maki-shop",geometry:["point","area"],terms:["art*","exhibit*","gallery"],tags:{shop:"art"},name:"Art Store"},"shop/baby_goods":{icon:"fas-baby-carriage",geometry:["point","area"],tags:{shop:"baby_goods"},name:"Baby Goods Store"},"shop/bag":{icon:"fas-suitcase-rolling",geometry:["point","area"],terms:["handbag","purse"],tags:{shop:"bag"},name:"Bag/Luggage Store"},"shop/bakery":{icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery"},terms:["bread","cakes","rolls"],name:"Bakery"},"shop/bathroom_furnishing":{icon:"fas-bath",geometry:["point","area"],tags:{shop:"bathroom_furnishing"},name:"Bathroom Furnishing Store"},"shop/beauty":{icon:"maki-shop",fields:["{shop}","beauty"],geometry:["point","area"],terms:["spa","salon","tanning"],tags:{shop:"beauty"},name:"Beauty Shop"},"shop/beauty/nails":{icon:"maki-shop",geometry:["point","area"],terms:["manicure","pedicure"],tags:{shop:"beauty",beauty:"nails"},reference:{key:"shop",value:"beauty"},name:"Nail Salon"},"shop/beauty/tanning":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"beauty",beauty:"tanning"},reference:{key:"leisure",value:"tanning_salon"},name:"Tanning Salon"},"shop/bed":{icon:"maki-lodging",geometry:["point","area"],tags:{shop:"bed"},name:"Bedding/Mattress Store"},"shop/beverages":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"beverages"},terms:["drinks"],name:"Beverage Store"},"shop/bicycle":{icon:"maki-bicycle",fields:["{shop}","service/bicycle"],geometry:["point","area"],terms:["bike","repair","tricycle","unicycle"],tags:{shop:"bicycle"},name:"Bicycle Shop"},"shop/boat":{icon:"temaki-boating",geometry:["point","area"],terms:["fishing boat","jetski","motorboat","rowboat","sailboat","vessel","watercraft"],tags:{shop:"boat"},name:"Boat Store"},"shop/bookmaker":{icon:"maki-shop",geometry:["point","area"],terms:["betting","bookie"],tags:{shop:"bookmaker"},name:"Bookmaker"},"shop/books":{icon:"fas-book",fields:["{shop}","internet_access"],moreFields:["{shop}","internet_access/fee","internet_access/ssid"],geometry:["point","area"],tags:{shop:"books"},name:"Book Store"},"shop/butcher":{icon:"fas-bacon",geometry:["point","area"],terms:["chicken","beef","lamb","meat","pork"],tags:{shop:"butcher"},name:"Butcher"},"shop/candles":{icon:"fas-burn",geometry:["point","area"],tags:{shop:"candles"},terms:["wax"],name:"Candle Shop"},"shop/cannabis":{icon:"fas-cannabis",geometry:["point","area"],terms:["420","marijuana","pot","reefer","weed"],tags:{shop:"cannabis"},name:"Cannabis Shop"},"shop/car_parts":{icon:"fas-car-battery",geometry:["point","area"],terms:["automobile","automotive"],tags:{shop:"car_parts"},name:"Car Parts Store"},"shop/car_repair":{icon:"maki-car-repair",fields:["{shop}","service/vehicle"],geometry:["point","area"],terms:["automobile","automotive","garage","service"],tags:{shop:"car_repair"},name:"Car Repair Shop"},"shop/car":{icon:"maki-car",fields:["name","brand","{shop}","second_hand","service/vehicle"],geometry:["point","area"],terms:["automobile","automotive"],tags:{shop:"car"},name:"Car Dealership"},"shop/caravan":{icon:"temaki-rv_park",fields:["name","brand","{shop}","second_hand","service/vehicle"],geometry:["point","area"],tags:{shop:"caravan"},terms:["auto","camper","recreational vehicle"],name:"RV Dealership"},"shop/carpet":{icon:"maki-shop",geometry:["point","area"],terms:["rug"],tags:{shop:"carpet"},name:"Carpet Store"},"shop/catalogue":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"catalogue"},name:"Catalog Shop"},"shop/charity":{icon:"maki-shop",fields:["{shop}","second_hand"],geometry:["point","area"],terms:["thrift","op shop","nonprofit"],tags:{shop:"charity"},name:"Charity Store"},"shop/cheese":{icon:"fas-cheese",geometry:["point","area"],tags:{shop:"cheese"},name:"Cheese Store"},"shop/chemist":{icon:"fas-shopping-basket",geometry:["point","area"],tags:{shop:"chemist"},terms:["apothecary","beauty","drug store","drugstore","gift","hair","med*","pharmacy","prescription","tooth"],name:"Drugstore"},"shop/chocolate":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"chocolate"},terms:["cocoa"],name:"Chocolate Store"},"shop/clothes":{icon:"maki-clothing-store",fields:["name","clothes","{shop}"],geometry:["point","area"],tags:{shop:"clothes"},terms:["blouses","boutique","bras","clothes","dresses","fashion","pants","shirts","shorts","skirts","slacks","socks","suits","underwear"],name:"Clothing Store"},"shop/clothes/underwear":{icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes",clothes:"underwear"},reference:{key:"clothes",value:"underwear"},terms:["boutique","bras","brassieres","briefs","boxers","fashion","lingerie","panties","slips","socks","stockings","underclothes","undergarments","underpants","undies"],name:"Underwear Store"},"shop/coffee":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"coffee"},name:"Coffee Store"},"shop/computer":{icon:"fas-laptop",geometry:["point","area"],tags:{shop:"computer"},terms:["desktop","laptop","hardware","operating system","software"],name:"Computer Store"},"shop/confectionery":{icon:"maki-confectionery",geometry:["point","area"],terms:["sweet"],tags:{shop:"confectionery"},name:"Candy Store"},"shop/convenience":{icon:"fas-shopping-basket",geometry:["point","area"],tags:{shop:"convenience"},name:"Convenience Store"},"shop/copyshop":{icon:"fas-print",geometry:["point","area"],tags:{shop:"copyshop"},terms:["print","scan"],name:"Copy Store"},"shop/cosmetics":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"cosmetics"},terms:["make-up","makeup"],name:"Cosmetics Store"},"shop/country_store":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"country_store"},name:"Country Store"},"shop/craft":{icon:"fas-palette",geometry:["point","area"],tags:{shop:"craft"},terms:["art*","paint*","frame"],name:"Arts and Crafts Store"},"shop/curtain":{icon:"maki-shop",geometry:["point","area"],terms:["drape*","window"],tags:{shop:"curtain"},name:"Curtain Store"},"shop/dairy":{icon:"fas-cheese",geometry:["point","area"],terms:["milk","egg","cheese"],tags:{shop:"dairy"},name:"Dairy Store"},"shop/deli":{icon:"maki-restaurant",geometry:["point","area"],terms:["lunch","meat","sandwich"],tags:{shop:"deli"},name:"Deli"},"shop/department_store":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store"},name:"Department Store"},"shop/doityourself":{icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself"},name:"DIY Store"},"shop/dry_cleaning":{icon:"temaki-clothes_hanger",geometry:["point","area"],tags:{shop:"dry_cleaning"},name:"Dry Cleaner"},"shop/e-cigarette":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"e-cigarette"},terms:["electronic","vape","vaping","vapor"],name:"E-Cigarette Shop"},"shop/electronics":{icon:"fas-plug",geometry:["point","area"],terms:["appliance","audio","blueray","camera","computer","dvd","home theater","radio","speaker","tv","video"],tags:{shop:"electronics"},name:"Electronics Store"},"shop/erotic":{icon:"maki-shop",geometry:["point","area"],terms:["sex","porn"],tags:{shop:"erotic"},name:"Erotic Store"},"shop/erotic/lgbtq":{icon:"maki-shop",geometry:["point","area"],terms:["sex","porn"],tags:{shop:"erotic",lgbtq:"primary"},name:"LGBTQ+ Erotic Store"},"shop/fabric":{icon:"fas-tape",geometry:["point","area"],terms:["sew"],tags:{shop:"fabric"},name:"Fabric Store"},"shop/farm":{icon:"maki-shop",geometry:["point","area"],terms:["farm shop","farm stand"],tags:{shop:"farm"},name:"Produce Stand"},"shop/fireplace":{icon:"maki-shop",geometry:["point","area"],terms:["fireplace","stove","masonry heater"],tags:{shop:"fireplace"},name:"Fireplace Store"},"shop/fishing":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"fishing"},terms:["bait","fishing line","flies","fly","lure","reel","rod","tackle"],name:"Fishing Shop"},"shop/florist":{icon:"maki-florist",geometry:["point","area"],terms:["flower"],tags:{shop:"florist"},name:"Florist"},"shop/frame":{icon:"fas-vector-square",geometry:["point","area"],tags:{shop:"frame"},terms:["art*","paint*","photo*","frame"],name:"Framing Shop"},"shop/frozen_food":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"frozen_food"},name:"Frozen Food"},"shop/fuel":{icon:"maki-shop",fields:["{shop}","fuel_multi"],geometry:["point","area"],tags:{shop:"fuel"},name:"Fuel Shop",matchScore:0.5},"shop/funeral_directors":{icon:"maki-cemetery",fields:["{shop}","religion","denomination"],geometry:["point","area"],terms:["undertaker","memorial home"],tags:{shop:"funeral_directors"},name:"Funeral Home"},"shop/furniture":{icon:"fas-couch",geometry:["point","area"],terms:["chair","sofa","table"],tags:{shop:"furniture"},name:"Furniture Store"},"shop/games":{icon:"fas-dice",geometry:["point","area"],tags:{shop:"games"},terms:["board game","card game","dice game","game shop","live action role-playing game","miniatures wargame","strategy game"],name:"Tabletop Game Store"},"shop/garden_centre":{icon:"maki-garden-centre",geometry:["point","area"],terms:["landscape","mulch","shrub","tree"],tags:{shop:"garden_centre"},name:"Garden Center"},"shop/gas":{icon:"maki-shop",geometry:["point","area"],terms:["cng","lpg","natural gas","propane","refill","tank"],tags:{shop:"gas"},name:"Bottled Gas Shop"},"shop/general":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"general"},terms:["Village Shop"],name:"General Store"},"shop/gift":{icon:"maki-gift",geometry:["point","area"],terms:["souvenir"],tags:{shop:"gift"},name:"Gift Shop"},"shop/greengrocer":{icon:"fas-carrot",geometry:["point","area"],terms:["fruit","produce","vegetable"],tags:{shop:"greengrocer"},name:"Greengrocer"},"shop/hairdresser_supply":{icon:"maki-shop",geometry:["point","area"],terms:["barber","shampoo","conditioner"],tags:{shop:"hairdresser_supply"},name:"Hairdresser Supply Store"},"shop/hairdresser":{icon:"temaki-beauty_salon",geometry:["point","area"],terms:["barber"],tags:{shop:"hairdresser"},name:"Hairdresser"},"shop/hardware":{icon:"temaki-tools",geometry:["point","area"],tags:{shop:"hardware"},name:"Hardware Store"},"shop/health_food":{icon:"maki-shop",geometry:["point","area"],terms:["wholefood","vitamins","vegetarian","vegan"],tags:{shop:"health_food"},name:"Health Food Shop"},"shop/hearing_aids":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"hearing_aids"},name:"Hearing Aids Store"},"shop/herbalist":{icon:"fas-leaf",geometry:["point","area"],tags:{shop:"herbalist"},name:"Herbalist"},"shop/hifi":{icon:"maki-shop",geometry:["point","area"],terms:["audio","hi-fi","high fidelity","stereo","video"],tags:{shop:"hifi"},name:"Hifi Store"},"shop/houseware":{icon:"fas-blender",geometry:["point","area"],terms:["home","household","kitchenware"],tags:{shop:"houseware"},name:"Houseware Store"},"shop/hunting":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"hunting"},terms:["arrows","bows","bullets","crossbows","rifles","traps"],name:"Hunting Shop"},"shop/interior_decoration":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"interior_decoration"},name:"Interior Decoration Store"},"shop/jewelry":{icon:"maki-jewelry-store",geometry:["point","area"],terms:["bracelet","diamond","earrings","gem","gold","jeweler","jewellery","jeweller","necklace","pins","ring","silver"],tags:{shop:"jewelry"},name:"Jewelry Store"},"shop/kiosk":{icon:"maki-shop",fields:["{shop}","levels"],geometry:["point","area"],tags:{shop:"kiosk"},name:"Kiosk"},"shop/kitchen":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"kitchen"},terms:["cabinets","countertops","sinks"],name:"Kitchen Design Store"},"shop/laundry":{icon:"maki-laundry",fields:["{shop}","self_service"],geometry:["point","area"],tags:{shop:"laundry"},name:"Laundry"},"shop/laundry/self_service":{icon:"maki-laundry",geometry:["point","area"],tags:{shop:"laundry",self_service:"yes"},terms:["Coin Laundry","Laundromat","Coin Wash","Launderette","Washateria"],name:"Self-Service Laundry"},"shop/leather":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"leather"},name:"Leather Store"},"shop/lighting":{icon:"far-lightbulb",geometry:["point","area"],terms:["fluorescent lighting","lamps","LEDs","light fixtures","lightbulbs"],tags:{shop:"lighting"},name:"Lighting Store"},"shop/locksmith":{icon:"fas-key",geometry:["point","area"],terms:["key","lockpick"],tags:{shop:"locksmith"},name:"Locksmith"},"shop/lottery":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"lottery"},name:"Lottery Shop"},"shop/mall":{icon:"maki-shop",geometry:["point","area"],terms:["shopping"],tags:{shop:"mall"},name:"Mall"},"shop/massage":{icon:"temaki-spa",geometry:["point","area"],tags:{shop:"massage"},name:"Massage Shop"},"shop/medical_supply":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"medical_supply"},name:"Medical Supply Store"},"shop/mobile_phone":{icon:"fas-mobile-alt",geometry:["point","area"],tags:{shop:"mobile_phone"},name:"Mobile Phone Store"},"shop/money_lender":{icon:"maki-bank",fields:["{shop}","currency_multi"],geometry:["point","area"],tags:{shop:"money_lender"},name:"Money Lender"},"shop/motorcycle_repair":{icon:"fas-motorcycle",fields:["{shop}","service/vehicle"],geometry:["point","area"],terms:["auto","bike","garage","motorcycle","repair","service"],tags:{shop:"motorcycle_repair"},name:"Motorcycle Repair Shop"},"shop/motorcycle":{icon:"fas-motorcycle",fields:["name","brand","{shop}"],geometry:["point","area"],terms:["bike"],tags:{shop:"motorcycle"},name:"Motorcycle Dealership"},"shop/music":{icon:"fas-compact-disc",geometry:["point","area"],terms:["tape casettes","CDs","compact discs","vinyl records"],tags:{shop:"music"},name:"Music Store"},"shop/musical_instrument":{icon:"fas-guitar",geometry:["point","area"],terms:["guitar"],tags:{shop:"musical_instrument"},name:"Musical Instrument Store"},"shop/newsagent":{icon:"fas-newspaper",geometry:["point","area"],tags:{shop:"newsagent"},name:"Newspaper/Magazine Shop"},"shop/nutrition_supplements":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"nutrition_supplements"},name:"Nutrition Supplements Store"},"shop/optician":{icon:"maki-optician",geometry:["point","area"],terms:["eye","glasses"],tags:{shop:"optician"},name:"Optician"},"shop/organic":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"supermarket",organic:"only"},name:"Organic Goods Store"},"shop/outdoor":{icon:"temaki-compass",fields:["{shop}","clothes"],geometry:["point","area"],terms:["camping","climbing","hiking","outfitter","outdoor equipment","outdoor supplies"],tags:{shop:"outdoor"},name:"Outdoors Store"},"shop/outpost":{icon:"maki-shop",geometry:["point","area"],terms:["online","pick up","pickup"],tags:{shop:"outpost"},name:"Online Retailer Outpost"},"shop/paint":{icon:"fas-paint-roller",geometry:["point","area"],tags:{shop:"paint"},name:"Paint Store"},"shop/party":{icon:"fas-mask",geometry:["point","area"],terms:["balloons","costumes","decorations","invitations"],tags:{shop:"party"},name:"Party Supply Store"},"shop/pastry":{icon:"maki-bakery",geometry:["point","area"],tags:{shop:"pastry"},terms:["patisserie","cake shop","cakery"],name:"Pastry Shop"},"shop/pawnbroker":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"pawnbroker"},name:"Pawn Shop"},"shop/perfumery":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"perfumery"},name:"Perfume Store"},"shop/pet_grooming":{icon:"maki-dog-park",geometry:["point","area"],terms:["cat","dog"],tags:{shop:"pet_grooming"},name:"Pet Grooming Store"},"shop/pet":{icon:"maki-dog-park",geometry:["point","area"],terms:["animal","cat","dog","fish","kitten","puppy","reptile"],tags:{shop:"pet"},name:"Pet Store"},"shop/photo":{icon:"fas-camera-retro",geometry:["point","area"],terms:["camera","film"],tags:{shop:"photo"},name:"Photography Store"},"shop/pyrotechnics":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"pyrotechnics"},name:"Fireworks Store"},"shop/radiotechnics":{icon:"fas-microchip",geometry:["point","area"],tags:{shop:"radiotechnics"},terms:["antenna","transistor"],name:"Radio/Electronic Component Store"},"shop/religion":{icon:"maki-shop",fields:["{shop}","religion","denomination"],geometry:["point","area"],tags:{shop:"religion"},name:"Religious Store"},"shop/scuba_diving":{icon:"temaki-scuba_diving",fields:["{shop}","scuba_diving"],geometry:["point","area"],terms:["diving","scuba"],tags:{shop:"scuba_diving"},name:"Scuba Diving Shop"},"shop/seafood":{icon:"maki-shop",geometry:["point","area"],terms:["fishmonger"],tags:{shop:"seafood"},name:"Seafood Shop"},"shop/second_hand":{icon:"maki-shop",fields:["{shop}","second_hand"],geometry:["point","area"],terms:["secondhand","second hand","resale","thrift","used"],tags:{shop:"second_hand"},name:"Consignment/Thrift Store"},"shop/sewing":{icon:"maki-shop",geometry:["point","area"],terms:["haberdashery"],tags:{shop:"sewing"},name:"Sewing Supply Shop"},"shop/shoes":{icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes"},terms:["boots","cleats","clogs","heels","loafers","oxfords","sneakers"],name:"Shoe Store"},"shop/sports":{icon:"fas-futbol",fields:["name","operator","sport","{shop}"],geometry:["point","area"],tags:{shop:"sports"},terms:["athletics"],name:"Sporting Goods Store"},"shop/stationery":{icon:"fas-paperclip",geometry:["point","area"],terms:["card","paper"],tags:{shop:"stationery"},name:"Stationery Store"},"shop/storage_rental":{icon:"fas-warehouse",geometry:["point","area"],tags:{shop:"storage_rental"},terms:["garages"],name:"Storage Rental"},"shop/supermarket":{icon:"maki-grocery",moreFields:["diet_multi","{shop}"],geometry:["point","area"],terms:["grocery","store","shop"],tags:{shop:"supermarket"},name:"Supermarket"},"shop/tailor":{icon:"maki-clothing-store",geometry:["point","area"],terms:["clothes","suit"],tags:{shop:"tailor"},name:"Tailor"},"shop/tattoo":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"tattoo"},terms:["ink"],name:"Tattoo Parlor"},"shop/tea":{icon:"maki-teahouse",geometry:["point","area"],tags:{shop:"tea"},name:"Tea Store"},"shop/ticket":{icon:"fas-ticket-alt",geometry:["point","area"],tags:{shop:"ticket"},terms:["box office"],name:"Ticket Seller"},"shop/tiles":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"tiles"},name:"Tile Shop"},"shop/tobacco":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"tobacco"},terms:["cigarettes","cigars"],name:"Tobacco Shop"},"shop/toys":{icon:"fas-space-shuttle",geometry:["point","area"],tags:{shop:"toys"},terms:["games"],name:"Toy Store"},"shop/trade":{icon:"maki-shop",fields:["name","trade","{shop}"],geometry:["point","area"],tags:{shop:"trade"},name:"Trade Shop"},"shop/travel_agency":{icon:"fas-suitcase",geometry:["point","area"],tags:{shop:"travel_agency"},name:"Travel Agency"},"shop/tyres":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"tyres"},name:"Tire Store"},"shop/vacuum_cleaner":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"vacuum_cleaner"},name:"Vacuum Cleaner Store"},"shop/variety_store":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store"},name:"Variety Store"},"shop/video_games":{icon:"maki-gaming",geometry:["point","area"],tags:{shop:"video_games"},name:"Video Game Store"},"shop/video":{icon:"temaki-movie_rental",geometry:["point","area"],terms:["DVD","VHS","video casette"],tags:{shop:"video"},name:"Video Store"},"shop/watches":{icon:"maki-watch",geometry:["point","area"],tags:{shop:"watches"},name:"Watches Shop"},"shop/water_sports":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"water_sports"},name:"Watersport/Swim Shop"},"shop/water":{icon:"tnp-2009234",geometry:["point","area"],tags:{shop:"water"},name:"Drinking Water Shop"},"shop/weapons":{icon:"maki-shop",geometry:["point","area"],terms:["ammo","gun","knife","knives"],tags:{shop:"weapons"},name:"Weapon Shop"},"shop/wholesale":{icon:"maki-warehouse",fields:["{shop}","wholesale"],geometry:["point","area"],terms:["warehouse club","cash and carry"],tags:{shop:"wholesale"},name:"Wholesale Store"},"shop/window_blind":{icon:"temaki-window",geometry:["point","area"],tags:{shop:"window_blind"},name:"Window Blind Store"},"shop/wine":{icon:"maki-alcohol-shop",geometry:["point","area"],tags:{shop:"wine"},name:"Wine Shop"},tactile_paving:{icon:"temaki-blind",fields:["colour","description"],geometry:["vertex","point","line","area"],tags:{tactile_paving:"*"},matchScore:0.25,terms:["blind path","detectable warning surfaces","tactile ground surface indicators","tactile walking surface indicators","truncated domes","visually impaired path"],name:"Tactile Paving"},"telecom/data_center":{icon:"fas-server",fields:["name","ref","operator","building_area"],moreFields:["address","phone","website"],geometry:["point","area"],tags:{telecom:"data_center"},terms:["computer systems storage","information technology","server farm","the cloud","telecommunications"],name:"Data Center"},"tourism/alpine_hut":{icon:"maki-lodging",fields:["name","operator","address","building_area","internet_access","internet_access/fee","fee","payment_multi_fee"],moreFields:["email","fax","internet_access/ssid","phone","reservation","website","wheelchair"],geometry:["point","area"],terms:["climbing hut"],tags:{tourism:"alpine_hut"},name:"Alpine Hut"},"tourism/apartment":{icon:"maki-lodging",fields:["name","operator","address","building_area","rooms","internet_access","internet_access/fee"],moreFields:["building/levels_building","height_building","email","fax","internet_access/ssid","payment_multi","phone","reservation","smoking","website","wheelchair"],geometry:["point","area"],tags:{tourism:"apartment"},name:"Guest Apartment / Condo"},"tourism/aquarium":{icon:"maki-aquarium",fields:["name","operator","address","building_area","opening_hours"],moreFields:["fee","internet_access","internet_access/fee","internet_access/ssid","payment_multi_fee","smoking","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["fish","sea","water"],tags:{tourism:"aquarium"},name:"Aquarium"},"tourism/artwork":{icon:"maki-art-gallery",fields:["name","artwork_type","artist"],moreFields:["material","website"],geometry:["point","vertex","line","area"],tags:{tourism:"artwork"},terms:["mural","sculpture","statue"],name:"Artwork"},"tourism/artwork/bust":{icon:"fas-user-alt",fields:["name","artist","material"],geometry:["point","vertex"],tags:{tourism:"artwork",artwork_type:"bust"},reference:{key:"artwork_type"},terms:["figure"],name:"Bust"},"tourism/artwork/graffiti":{icon:"maki-art-gallery",fields:["name","artist"],geometry:["point","vertex","line","area"],tags:{tourism:"artwork",artwork_type:"graffiti"},reference:{key:"artwork_type"},terms:["Street Artwork","Guerilla Artwork","Graffiti Artwork"],name:"Graffiti"},"tourism/artwork/installation":{icon:"maki-art-gallery",fields:["name","artist"],geometry:["point","vertex","line","area"],tags:{tourism:"artwork",artwork_type:"installation"},reference:{key:"artwork_type"},terms:["interactive art","intervention art","modern art"],name:"Art Installation"},"tourism/artwork/mural":{icon:"maki-art-gallery",fields:["name","artist"],geometry:["point","vertex","line","area"],tags:{tourism:"artwork",artwork_type:"mural"},reference:{key:"artwork_type",value:"mural"},terms:["fresco","wall painting"],name:"Mural"},"tourism/artwork/sculpture":{icon:"maki-art-gallery",fields:["name","artist","material"],geometry:["point","vertex","line","area"],tags:{tourism:"artwork",artwork_type:"sculpture"},reference:{key:"artwork_type",value:"sculpture"},terms:["statue","figure","carving"],name:"Sculpture"},"tourism/artwork/statue":{icon:"fas-female",fields:["name","artist","material"],geometry:["point","vertex","line","area"],tags:{tourism:"artwork",artwork_type:"statue"},reference:{key:"artwork_type",value:"statue"},terms:["sculpture","figure","carving"],name:"Statue"},"tourism/attraction":{icon:"maki-star",fields:["name","operator","address"],geometry:["point","vertex","line","area"],tags:{tourism:"attraction"},matchScore:0.75,name:"Tourist Attraction"},"tourism/camp_site":{icon:"maki-campsite",fields:["name","operator","address","access_simple","capacity","fee","payment_multi_fee","internet_access","internet_access/fee"],moreFields:["email","fax","internet_access/ssid","phone","power_supply","reservation","sanitary_dump_station","website","wheelchair"],geometry:["point","vertex","area"],terms:["tent","rv"],tags:{tourism:"camp_site"},name:"Campground"},"tourism/caravan_site":{icon:"temaki-rv_park",fields:["name","address","capacity","sanitary_dump_station","power_supply","internet_access","internet_access/fee"],moreFields:["operator","fee","payment_multi_fee","internet_access/ssid","smoking","website","phone","email","fax","wheelchair","reservation"],geometry:["point","vertex","area"],terms:["Motor Home","Camper"],tags:{tourism:"caravan_site"},name:"RV Park"},"tourism/chalet":{icon:"maki-lodging",fields:["name","operator","address","building_area","internet_access","internet_access/fee"],moreFields:["air_conditioning","building/levels_building","height_building","smoking","payment_multi","internet_access/ssid","website","phone","email","fax","wheelchair","reservation"],geometry:["point","area"],terms:["holiday","holiday cottage","holiday home","vacation","vacation home"],tags:{tourism:"chalet"},name:"Holiday Cottage"},"tourism/gallery":{icon:"maki-art-gallery",fields:["name","operator","address","building_area","opening_hours"],moreFields:["internet_access","internet_access/fee","internet_access/ssid","payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["art*","exhibit*","paint*","photo*","sculpt*"],tags:{tourism:"gallery"},name:"Art Gallery"},"tourism/guest_house":{icon:"maki-lodging",fields:["name","operator","guest_house","address","building_area","rooms","internet_access","internet_access/fee"],moreFields:["air_conditioning","building/levels_building","height_building","smoking","payment_multi","internet_access/ssid","website","phone","email","fax","wheelchair","reservation"],geometry:["point","area"],tags:{tourism:"guest_house"},terms:["B&B","Bed and Breakfast"],name:"Guest House"},"tourism/hostel":{icon:"maki-lodging",fields:["{tourism/guest_house}"],moreFields:["{tourism/guest_house}"],geometry:["point","area"],tags:{tourism:"hostel"},name:"Hostel"},"tourism/hotel":{icon:"fas-concierge-bell",fields:["{tourism/motel}"],moreFields:["{tourism/motel}","stars","bar"],geometry:["point","area"],tags:{tourism:"hotel"},name:"Hotel"},"tourism/information":{icon:"maki-information",fields:["information","operator","address","building_area"],geometry:["point","vertex","area"],tags:{tourism:"information"},name:"Information"},"tourism/information/board":{icon:"maki-information",fields:["name","operator","board_type","direction"],geometry:["point","vertex"],tags:{tourism:"information",information:"board"},reference:{key:"information",value:"board"},name:"Information Board"},"tourism/information/guidepost":{icon:"fas-map-signs",fields:["name","elevation","operator","ref"],moreFields:["material"],geometry:["point","vertex"],terms:["signpost"],tags:{tourism:"information",information:"guidepost"},reference:{key:"information",value:"guidepost"},name:"Guidepost"},"tourism/information/map":{icon:"fas-map",fields:["operator","map_type","map_size","direction"],geometry:["point","vertex"],tags:{tourism:"information",information:"map"},reference:{key:"information",value:"map"},name:"Map"},"tourism/information/office":{icon:"maki-information",fields:["name","operator","address","building_area","internet_access","internet_access/fee"],moreFields:["building/levels_building","height_building","email","fax","internet_access/ssid","phone","website","wheelchair"],geometry:["point","vertex","area"],tags:{tourism:"information",information:"office"},reference:{key:"information",value:"office"},name:"Tourist Information Office"},"tourism/information/route_marker":{icon:"maki-information",fields:["ref","operator","colour","material","elevation"],geometry:["point","vertex"],terms:["cairn","painted blaze","route flag","route marker","stone pile","trail blaze","trail post","way marker"],tags:{tourism:"information",information:"route_marker"},reference:{key:"information",value:"route_marker"},name:"Trail Marker"},"tourism/information/terminal":{icon:"maki-information",fields:["operator"],geometry:["point","vertex"],tags:{tourism:"information",information:"terminal"},reference:{key:"information",value:"terminal"},name:"Information Terminal"},"tourism/motel":{icon:"maki-lodging",fields:["name","brand","address","building_area","rooms","internet_access","internet_access/fee"],moreFields:["air_conditioning","building/levels_building","height_building","email","fax","internet_access/ssid","operator","payment_multi","phone","reservation","smoking","website","wheelchair"],geometry:["point","area"],tags:{tourism:"motel"},name:"Motel"},"tourism/museum":{icon:"temaki-museum",fields:["name","operator","address","building_area","opening_hours"],moreFields:["air_conditioning","building/levels_building","height_building","fee","internet_access","internet_access/fee","internet_access/ssid","payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["art*","exhibit*","gallery","foundation","hall","institution","paint*","photo*","sculpt*"],tags:{tourism:"museum"},name:"Museum"},"tourism/picnic_site":{icon:"maki-picnic-site",fields:["name","operator","address","access_simple","capacity"],moreFields:["internet_access","internet_access/fee","internet_access/ssid","smoking","fee","payment_multi_fee","phone","reservation","website","wheelchair"],geometry:["point","vertex","area"],terms:["camp"],tags:{tourism:"picnic_site"},name:"Picnic Site"},"tourism/theme_park":{icon:"maki-amusement-park",fields:["name","operator","address","opening_hours"],moreFields:["internet_access","internet_access/fee","internet_access/ssid","payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{tourism:"theme_park"},name:"Theme Park"},"tourism/trail_riding_station":{icon:"maki-horse-riding",fields:["name","horse_stables","horse_riding","horse_dressage"],moreFields:["internet_access","internet_access/fee","internet_access/ssid","address","opening_hours","website","phone","email","fax"],geometry:["point","area"],tags:{tourism:"trail_riding_station"},name:"Trail Riding Station",matchScore:2},"tourism/viewpoint":{icon:"temaki-binoculars",geometry:["point","vertex"],fields:["direction"],tags:{tourism:"viewpoint"},name:"Viewpoint"},"tourism/wilderness_hut":{icon:"maki-lodging",fields:["name","operator","address","building_area","fee","payment_multi_fee","fireplace"],moreFields:["internet_access","internet_access/fee","internet_access/ssid","reservation","wheelchair"],geometry:["point","area"],terms:["wilderness hut","backcountry hut","bothy"],tags:{tourism:"wilderness_hut"},name:"Wilderness Hut"},"tourism/zoo":{icon:"temaki-zoo",fields:["name","operator","address","opening_hours","fee"],moreFields:["internet_access","internet_access/fee","internet_access/ssid","payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["animal"],tags:{tourism:"zoo"},name:"Zoo"},"tourism/zoo/petting":{icon:"fas-horse",geometry:["point","area"],tags:{tourism:"zoo",zoo:"petting_zoo"},reference:{key:"zoo",value:"petting_zoo"},terms:["Children's Zoo","Children's Farm","Petting Farm","farm animals"],name:"Petting Zoo"},"tourism/zoo/safari":{icon:"temaki-zoo",geometry:["point","area"],tags:{tourism:"zoo",zoo:"safari_park"},reference:{key:"zoo",value:"safari_park"},terms:["Drive-Through Zoo","Drive-In Zoo"],name:"Safari Park"},"tourism/zoo/wildlife":{icon:"fas-frog",geometry:["point","area"],tags:{tourism:"zoo",zoo:"wildlife_park"},reference:{key:"zoo",value:"wildlife_park"},terms:["indigenous animals"],name:"Wildlife Park"},traffic_calming:{icon:"temaki-diamond",fields:["traffic_calming","surface","direction_vertex"],geometry:["vertex","line","area"],tags:{traffic_calming:"*"},terms:["bump","hump","slow","speed"],name:"Traffic Calming"},"traffic_calming/bump":{icon:"temaki-diamond",fields:["surface","direction_vertex"],geometry:["vertex","line"],terms:["hump","speed","slow"],tags:{traffic_calming:"bump"},name:"Speed Bump"},"traffic_calming/chicane":{icon:"temaki-diamond",fields:["surface","direction_vertex"],geometry:["vertex","line","area"],terms:["driveway link","speed","slow"],tags:{traffic_calming:"chicane"},name:"Traffic Chicane"},"traffic_calming/choker":{icon:"temaki-diamond",fields:["surface","direction_vertex"],geometry:["vertex","line","area"],terms:["speed","slow"],tags:{traffic_calming:"choker"},name:"Traffic Choker"},"traffic_calming/cushion":{icon:"temaki-diamond",fields:["surface","direction_vertex"],geometry:["vertex","line"],terms:["bump","hump","speed","slow"],tags:{traffic_calming:"cushion"},name:"Speed Cushion"},"traffic_calming/dip":{icon:"temaki-diamond",fields:["surface","direction_vertex"],geometry:["vertex","line"],terms:["speed","slow"],tags:{traffic_calming:"dip"},name:"Dip"},"traffic_calming/hump":{icon:"temaki-diamond",fields:["surface","direction_vertex"],geometry:["vertex","line"],terms:["bump","speed","slow"],tags:{traffic_calming:"hump"},name:"Speed Hump"},"traffic_calming/island":{icon:"temaki-diamond",fields:["surface"],geometry:["vertex","line","area"],terms:["circle","roundabout","slow"],tags:{traffic_calming:"island"},name:"Traffic Island"},"traffic_calming/rumble_strip":{icon:"temaki-diamond",fields:["direction_vertex"],geometry:["vertex","line"],terms:["audible lines","sleeper lines","growlers"],tags:{traffic_calming:"rumble_strip"},name:"Rumble Strip"},"traffic_calming/table":{icon:"temaki-diamond",fields:["surface","direction_vertex"],geometry:["vertex"],tags:{traffic_calming:"table"},terms:["flat top","hump","speed","slow"],name:"Speed Table"},traffic_sign_vertex:{icon:"maki-square-stroked",fields:["traffic_sign","traffic_sign/direction"],geometry:["vertex"],tags:{traffic_sign:"*"},terms:["road","highway"],name:"Traffic Sign"},traffic_sign:{icon:"fas-directions",fields:["traffic_sign","direction"],geometry:["point"],tags:{traffic_sign:"*"},terms:["road","highway"],name:"Traffic Sign"},"traffic_sign/city_limit_vertex":{icon:"maki-square-stroked",fields:["traffic_sign","traffic_sign/direction","name"],geometry:["vertex"],tags:{traffic_sign:"city_limit"},terms:["town","village","hamlet","boundary","edge","border","road","highway"],name:"City Limit Sign"},"traffic_sign/city_limit":{icon:"maki-square-stroked",fields:["traffic_sign","direction","name"],geometry:["point"],tags:{traffic_sign:"city_limit"},terms:["town","village","hamlet","boundary","edge","border","road","highway"],name:"City Limit Sign"},"traffic_sign/maxspeed_vertex":{icon:"maki-square-stroked",fields:["traffic_sign","traffic_sign/direction","maxspeed"],geometry:["vertex"],tags:{traffic_sign:"maxspeed"},terms:["max speed","maximum speed","road","highway"],name:"Speed Limit Sign"},"traffic_sign/maxspeed":{icon:"maki-square-stroked",fields:["traffic_sign","direction","maxspeed"],geometry:["point"],tags:{traffic_sign:"maxspeed"},terms:["max speed","maximum speed","road","highway"],name:"Speed Limit Sign"},"type/multipolygon":{icon:"iD-multipolygon",geometry:["area","relation"],tags:{type:"multipolygon"},removeTags:{},name:"Multipolygon",searchable:false,matchScore:0.1},"type/boundary":{icon:"iD-boundary",fields:["name","boundary"],geometry:["relation"],tags:{type:"boundary"},name:"Boundary"},"type/boundary/administrative":{icon:"iD-boundary",fields:["name","admin_level"],geometry:["relation"],tags:{type:"boundary",boundary:"administrative"},reference:{key:"boundary",value:"administrative"},name:"Administrative Boundary"},"type/enforcement":{icon:"iD-relation",fields:["name","enforcement"],geometry:["relation"],tags:{type:"enforcement"},name:"Enforcement"},"type/public_transport/stop_area_group":{icon:"iD-relation",fields:["name","ref","network","operator"],geometry:["relation"],tags:{type:"public_transport",public_transport:"stop_area_group"},reference:{key:"public_transport",value:"stop_area_group"},name:"Transit Stop Area Group"},"type/restriction":{icon:"iD-restriction",fields:["restriction","except"],geometry:["relation"],tags:{type:"restriction"},name:"Restriction"},"type/restriction/no_left_turn":{icon:"iD-restriction-no-left-turn",geometry:["relation"],tags:{type:"restriction",restriction:"no_left_turn"},name:"No Left Turn"},"type/restriction/no_right_turn":{icon:"iD-restriction-no-right-turn",geometry:["relation"],tags:{type:"restriction",restriction:"no_right_turn"},name:"No Right Turn"},"type/restriction/no_straight_on":{icon:"iD-restriction-no-straight-on",geometry:["relation"],tags:{type:"restriction",restriction:"no_straight_on"},name:"No Straight On"},"type/restriction/no_u_turn":{icon:"iD-restriction-no-u-turn",geometry:["relation"],tags:{type:"restriction",restriction:"no_u_turn"},name:"No U-turn"},"type/restriction/only_left_turn":{icon:"iD-restriction-only-left-turn",geometry:["relation"],tags:{type:"restriction",restriction:"only_left_turn"},name:"Only Left Turn"},"type/restriction/only_right_turn":{icon:"iD-restriction-only-right-turn",geometry:["relation"],tags:{type:"restriction",restriction:"only_right_turn"},name:"Only Right Turn"},"type/restriction/only_straight_on":{icon:"iD-restriction-only-straight-on",geometry:["relation"],tags:{type:"restriction",restriction:"only_straight_on"},name:"Only Straight On"},"type/restriction/only_u_turn":{icon:"iD-restriction-only-u-turn",geometry:["relation"],tags:{type:"restriction",restriction:"only_u_turn"},name:"Only U-turn"},"type/route_master":{icon:"iD-route-master",fields:["name","route_master","ref","operator","network"],moreFields:["colour","interval","opening_hours","wheelchair"],geometry:["relation"],tags:{type:"route_master"},name:"Route Master"},"type/route":{icon:"iD-route",fields:["name","route","ref_route","operator","network"],geometry:["relation"],tags:{type:"route"},name:"Route"},"type/route/bicycle":{icon:"maki-bicycle",fields:["name","ref_route","network_bicycle","cycle_network","to","from"],geometry:["relation"],tags:{type:"route",route:"bicycle"},name:"Cycle Route"},"type/route/bus":{icon:"maki-bus",fields:["{type/route/train}"],moreFields:["{type/route/train}"],geometry:["relation"],tags:{type:"route",route:"bus"},name:"Bus Route"},"type/route/detour":{icon:"iD-route-detour",fields:["name","ref_route","to","from"],geometry:["relation"],tags:{type:"route",route:"detour"},name:"Detour Route"},"type/route/ferry":{icon:"maki-ferry",fields:["name","ref_route","operator","network","to","from"],moreFields:["interval","maxheight","maxweight","opening_hours","duration","wheelchair"],geometry:["relation"],tags:{type:"route",route:"ferry"},name:"Ferry Route"},"type/route/foot":{icon:"temaki-pedestrian",fields:["name","ref_route","operator","network_foot","to","from"],geometry:["relation"],tags:{type:"route",route:"foot"},name:"Foot Route"},"type/route/hiking":{icon:"fas-hiking",fields:["name","ref_route","operator","network_foot","description","distance","to","from"],geometry:["relation"],tags:{type:"route",route:"hiking"},name:"Hiking Route"},"type/route/horse":{icon:"maki-horse-riding",fields:["name","ref_route","operator","network_horse","description","distance","to","from"],geometry:["relation"],tags:{type:"route",route:"horse"},name:"Riding Route"},"type/route/light_rail":{icon:"temaki-light_rail",fields:["{type/route/train}"],moreFields:["{type/route/train}"],geometry:["relation"],tags:{type:"route",route:"light_rail"},name:"Light Rail Route"},"type/route/monorail":{icon:"temaki-monorail",fields:["{type/route/train}"],moreFields:["{type/route/train}"],geometry:["relation"],tags:{type:"route",route:"monorail"},name:"Monorail Route"},"type/route/pipeline":{icon:"iD-pipeline-line",fields:["name","ref_route","operator","to","from"],geometry:["relation"],tags:{type:"route",route:"pipeline"},name:"Pipeline Route"},"type/route/piste":{icon:"fas-skiing",fields:["name","piste/type","colour","ref_route","operator","to","from"],geometry:["relation"],tags:{type:"route",route:"piste"},name:"Piste/Ski Route"},"type/route/power":{icon:"iD-power-line",fields:["name","ref_route","operator","to","from"],geometry:["relation"],tags:{type:"route",route:"power"},name:"Power Route"},"type/route/road":{icon:"iD-highway-unclassified",fields:["name","ref_route","network_road","to","from"],geometry:["relation"],tags:{type:"route",route:"road"},name:"Road Route"},"type/route/subway":{icon:"temaki-subway",fields:["{type/route/train}"],moreFields:["{type/route/train}"],geometry:["relation"],tags:{type:"route",route:"subway"},name:"Subway Route"},"type/route/train":{icon:"iD-railway-rail",fields:["name","ref_route","operator","network","to","from"],moreFields:["colour","interval","opening_hours","duration","wheelchair"],geometry:["relation"],tags:{type:"route",route:"train"},name:"Train Route"},"type/route/tram":{icon:"temaki-tram",fields:["{type/route/train}"],moreFields:["{type/route/train}"],geometry:["relation"],tags:{type:"route",route:"tram"},name:"Tram Route"},"type/site":{icon:"iD-relation",fields:["name","site"],geometry:["relation"],tags:{type:"site"},name:"Site"},"type/waterway":{icon:"iD-waterway-stream",fields:["name","waterway","ref"],geometry:["relation"],tags:{type:"waterway"},name:"Waterway"},"waterway/riverbank":{icon:"maki-water",geometry:["area"],tags:{waterway:"riverbank"},name:"Riverbank",searchable:false},"waterway/boatyard":{icon:"maki-harbor",fields:["name","operator"],moreFields:["address","website","phone","email","fax","wheelchair"],geometry:["area","vertex","point"],tags:{waterway:"boatyard"},name:"Boatyard"},"waterway/canal":{icon:"iD-waterway-canal",fields:["name","width","intermittent","lock"],moreFields:["fishing","salt","tidal"],geometry:["line"],tags:{waterway:"canal"},name:"Canal"},"waterway/canal/lock":{icon:"iD-waterway-canal",fields:["name","width","lock"],moreFields:["intermittent","salt","tidal"],geometry:["line"],tags:{waterway:"canal",lock:"yes"},name:"Canal Lock"},"waterway/dam":{icon:"maki-dam",geometry:["point","vertex","line","area"],fields:["name"],moreFields:["website"],tags:{waterway:"dam"},name:"Dam"},"waterway/ditch":{icon:"iD-waterway-ditch",fields:["{waterway/drain}"],moreFields:["{waterway/drain}"],geometry:["line"],tags:{waterway:"ditch"},name:"Ditch"},"waterway/dock":{icon:"maki-harbor",fields:["name","dock","operator"],geometry:["area","vertex","point"],terms:["boat","ship","vessel","marine"],tags:{waterway:"dock"},name:"Wet Dock / Dry Dock"},"waterway/drain":{icon:"iD-waterway-ditch",fields:["structure_waterway","intermittent"],moreFields:["covered"],geometry:["line"],tags:{waterway:"drain"},name:"Drain"},"waterway/fuel":{icon:"maki-fuel",fields:["name","operator","address","opening_hours","fuel_multi"],moreFields:["payment_multi","brand","seamark/type","building","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["petrol","gas","diesel","boat"],tags:{waterway:"fuel"},name:"Marine Fuel Station"},"waterway/lock_gate":{icon:"maki-dam",geometry:["vertex","line"],fields:["name","ref","height","material"],tags:{waterway:"lock_gate"},addTags:{waterway:"lock_gate","seamark:type":"gate"},terms:["canal"],name:"Lock Gate"},"waterway/milestone":{icon:"temaki-milestone",fields:["distance","direction_vertex"],moreFields:["seamark/type"],geometry:["point","vertex"],tags:{waterway:"milestone"},terms:["milestone","marker"],name:"Waterway Milestone"},"waterway/river":{icon:"iD-waterway-river",fields:["name","structure_waterway","width","intermittent","tidal"],moreFields:["covered","fishing","salt"],geometry:["line"],terms:["beck","branch","brook","course","creek","estuary","rill","rivulet","run","runnel","stream","tributary","watercourse"],tags:{waterway:"river"},name:"River"},"waterway/sanitary_dump_station":{icon:"temaki-storage_tank",fields:["name","operator","access_simple","fee","payment_multi_fee","water_point"],moreFields:["opening_hours","seamark/type"],geometry:["point","vertex","area"],terms:["Boat","Watercraft","Sanitary","Dump Station","Pumpout","Pump out","Elsan","CDP","CTDP","Chemical Toilet"],tags:{waterway:"sanitary_dump_station"},name:"Marine Toilet Disposal"},"waterway/stream_intermittent":{icon:"iD-waterway-stream",fields:["{waterway/stream}"],moreFields:["{waterway/stream}"],geometry:["line"],terms:["arroyo","beck","branch","brook","burn","course","creek","drift","flood","flow","gully","run","runnel","rush","spate","spritz","tributary","wadi","wash","watercourse"],tags:{waterway:"stream",intermittent:"yes"},reference:{key:"waterway",value:"stream"},name:"Intermittent Stream"},"waterway/stream":{icon:"iD-waterway-stream",fields:["name","structure_waterway","width","intermittent"],moreFields:["covered","fishing","salt","tidal"],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/water_point":{icon:"maki-drinking-water",geometry:["area","vertex","point"],tags:{waterway:"water_point"},name:"Marine Drinking Water"},"waterway/waterfall":{icon:"maki-waterfall",fields:["name","height","width","intermittent"],geometry:["vertex"],terms:["fall"],tags:{waterway:"waterfall"},name:"Waterfall"},"waterway/weir":{icon:"maki-dam",geometry:["vertex","line"],tags:{waterway:"weir"},name:"Weir"},"amenity/bank/ABANCA":{name:"ABANCA",icon:"maki-bank",imageURL:"https://graph.facebook.com/SomosAbanca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9598744",amenity:"bank"},addTags:{amenity:"bank",brand:"ABANCA","brand:wikidata":"Q9598744","brand:wikipedia":"es:Abanca",name:"ABANCA",official_name:"ABANCA Corporación Bancaria"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ABN AMRO":{name:"ABN AMRO",icon:"maki-bank",imageURL:"https://graph.facebook.com/abnamro/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q287471",amenity:"bank"},addTags:{amenity:"bank",brand:"ABN AMRO","brand:wikidata":"Q287471","brand:wikipedia":"en:ABN AMRO",name:"ABN AMRO",official_name:"ABN AMRO Bank N.V.",operator:"ABN AMRO Group","operator:wikidata":"Q17061287","operator:wikipedia":"en:ABN AMRO Group"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ABSA":{name:"ABSA",icon:"maki-bank",imageURL:"https://graph.facebook.com/AbsaSouthAfrica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q331688",amenity:"bank"},addTags:{amenity:"bank",brand:"ABSA","brand:wikidata":"Q331688","brand:wikipedia":"en:ABSA Group Limited",name:"ABSA"},countryCodes:["za"],terms:[],matchScore:2,suggestion:true},"amenity/bank/AIB":{name:"AIB",icon:"maki-bank",imageURL:"https://graph.facebook.com/aib/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1642179",amenity:"bank"},addTags:{amenity:"bank",brand:"AIB","brand:wikidata":"Q1642179","brand:wikipedia":"en:Allied Irish Banks",name:"AIB",official_name:"Allied Irish Banks"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ANZ":{name:"ANZ",icon:"maki-bank",imageURL:"https://graph.facebook.com/ANZAustralia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q714641",amenity:"bank"},addTags:{amenity:"bank",brand:"ANZ","brand:wikidata":"Q714641","brand:wikipedia":"en:Australia and New Zealand Banking Group",name:"ANZ",official_name:"Australia and New Zealand Banking Group Limited"},countryCodes:["au","nz"],terms:["anz bank"],matchScore:2,suggestion:true},"amenity/bank/ASB Bank":{name:"ASB Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/ASBBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q297214",amenity:"bank"},addTags:{amenity:"bank",brand:"ASB Bank","brand:wikidata":"Q297214","brand:wikipedia":"en:ASB Bank",name:"ASB Bank",operator:"Commonwealth Bank of Australia","operator:wikidata":"Q285328","operator:wikipedia":"en:Commonwealth Bank"},countryCodes:["nz"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ATB Financial":{name:"ATB Financial",icon:"maki-bank",imageURL:"https://graph.facebook.com/ATBFinancial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q298762",amenity:"bank"},addTags:{amenity:"bank",brand:"ATB Financial","brand:wikidata":"Q298762","brand:wikipedia":"en:ATB Financial",name:"ATB Financial",official_name:"Alberta Treasury Branches"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/bank/AXA":{name:"AXA",icon:"maki-bank",imageURL:"https://graph.facebook.com/axainsurance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q160054",amenity:"bank"},addTags:{amenity:"bank",brand:"AXA","brand:wikidata":"Q160054","brand:wikipedia":"en:AXA",name:"AXA"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Access Bank":{name:"Access Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/AccessBankPlc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4672418",amenity:"bank"},addTags:{amenity:"bank",brand:"Access Bank","brand:wikidata":"Q4672418","brand:wikipedia":"en:Access Bank plc",name:"Access Bank",operator:"Access Bank Group","operator:wikidata":"Q4672420","operator:wikipedia":"en:Access Bank Group"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Addiko Bank":{name:"Addiko Bank",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAddiko%20Bank%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q27926559",amenity:"bank"},addTags:{amenity:"bank",brand:"Addiko Bank","brand:wikidata":"Q27926559","brand:wikipedia":"en:Addiko Bank",name:"Addiko Bank"},countryCodes:["ba","hr","me","rs","si"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Agrani Bank Limited অগ্রণী ব্যাংক লিমিটেড":{name:"Agrani Bank Limited অগ্রণী ব্যাংক লিমিটেড",icon:"maki-bank",imageURL:"https://graph.facebook.com/AgraniBankLimited/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q517050",amenity:"bank"},addTags:{amenity:"bank",brand:"Agrani Bank Limited অগ্রণী ব্যাংক লিমিটেড","brand:wikidata":"Q517050","brand:wikipedia":"en:Agrani Bank",name:"Agrani Bank Limited অগ্রণী ব্যাংক লিমিটেড","name:en":"Agrani Bank Limited"},countryCodes:["bd"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Agribank (USA)":{name:"Agribank (USA)",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/580476082798923776/6wuC8WL4_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q4693829",amenity:"bank"},addTags:{amenity:"bank",brand:"Agribank","brand:wikidata":"Q4693829","brand:wikipedia":"en:AgriBank",name:"Agribank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Agribank (Vietnam)":{name:"Agribank (Vietnam)",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q1924723",amenity:"bank"},addTags:{amenity:"bank",brand:"Agribank","brand:wikidata":"Q1924723","brand:wikipedia":"vn:Ngân hàng Nông nghiệp và Phát triển Nông thôn Việt Nam",name:"Agribank",official_name:"Ngân hàng Nông nghiệp và Phát triển Nông thôn Việt Nam","official_name:en":"Vietnam Bank for Agriculture and Rural Development"},countryCodes:["vn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Agribank (Zimbabwe)":{name:"Agribank (Zimbabwe)",icon:"maki-bank",imageURL:"https://graph.facebook.com/agribankzim/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4693887",amenity:"bank"},addTags:{amenity:"bank",brand:"Agribank","brand:wikidata":"Q4693887","brand:wikipedia":"en:Agricultural Development Bank of Zimbabwe",name:"Agribank"},countryCodes:["zw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Akbank":{name:"Akbank",icon:"maki-bank",imageURL:"https://graph.facebook.com/Akbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q416624",amenity:"bank"},addTags:{amenity:"bank",brand:"Akbank","brand:wikidata":"Q416624","brand:wikipedia":"en:Akbank",name:"Akbank"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Alior Bank":{name:"Alior Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/AliorBankSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9148395",amenity:"bank"},addTags:{amenity:"bank",brand:"Alior Bank","brand:wikidata":"Q9148395","brand:wikipedia":"pl:Alior Bank",name:"Alior Bank"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Allahabad Bank":{name:"Allahabad Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/AllahabadBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2018840",amenity:"bank"},addTags:{amenity:"bank",brand:"Allahabad Bank","brand:wikidata":"Q2018840","brand:wikipedia":"en:Allahabad Bank",name:"Allahabad Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Allied Bank (Pakistan)":{name:"Allied Bank (Pakistan)",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q4732553",amenity:"bank"},addTags:{amenity:"bank",brand:"Allied Bank","brand:wikidata":"Q4732553","brand:wikipedia":"en:Allied Bank Limited",name:"Allied Bank"},countryCodes:["pk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Allied Bank (defunct bank in Philipiness)":{name:"Allied Bank (defunct bank in Philipiness)",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q4732555",amenity:"bank"},addTags:{amenity:"bank",brand:"Allied Bank","brand:wikidata":"Q4732555","brand:wikipedia":"en:Allied Banking Corporation",name:"Allied Bank"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Alpha Bank":{name:"Alpha Bank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/441617450262491136/GDkx0IIP_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q747394",amenity:"bank"},addTags:{amenity:"bank",brand:"Alpha Bank","brand:wikidata":"Q747394","brand:wikipedia":"en:Alpha Bank",name:"Alpha Bank",operator:"Hellenic Financial Stability Fund","operator:wikidata":"Q19903317","operator:wikipedia":"en:Hellenic Financial Stability Fund"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Andhra Bank":{name:"Andhra Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/official.andhrabank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2003476",amenity:"bank"},addTags:{amenity:"bank",brand:"Andhra Bank","brand:wikidata":"Q2003476","brand:wikipedia":"en:Andhra Bank",name:"Andhra Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Antonveneta":{name:"Antonveneta",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3633689",amenity:"bank"},addTags:{amenity:"bank",brand:"Antonveneta","brand:wikidata":"Q3633689","brand:wikipedia":"en:Banca Antonveneta",name:"Antonveneta"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Apple Bank":{name:"Apple Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/AppleBankfan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4781125",amenity:"bank"},addTags:{amenity:"bank",brand:"Apple Bank","brand:wikidata":"Q4781125","brand:wikipedia":"en:Apple Bank for Savings",name:"Apple Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Argenta":{name:"Argenta",icon:"maki-bank",imageURL:"https://graph.facebook.com/argenta/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q932856",amenity:"bank"},addTags:{amenity:"bank",brand:"Argenta","brand:wikidata":"Q932856","brand:wikipedia":"en:Argenta (bank)",name:"Argenta",operator:"Argenta Group","operator:wikidata":"Q19604341"},countryCodes:["be","lu","nl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Arvest Bank":{name:"Arvest Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/ArvestBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4802393",amenity:"bank"},addTags:{amenity:"bank",brand:"Arvest Bank","brand:wikidata":"Q4802393","brand:wikipedia":"en:Arvest Bank",name:"Arvest Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Asia United Bank":{name:"Asia United Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/AUB.Official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4806482",amenity:"bank"},addTags:{amenity:"bank",brand:"Asia United Bank","brand:wikidata":"Q4806482","brand:wikipedia":"en:Asia United Bank",name:"Asia United Bank"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Askari Bank":{name:"Askari Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/askaribankpakistan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4807137",amenity:"bank"},addTags:{amenity:"bank",brand:"Askari Bank","brand:wikidata":"Q4807137","brand:wikipedia":"en:Askari Bank",name:"Askari Bank"},countryCodes:["pk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Associated Bank":{name:"Associated Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/associatedbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4809155",amenity:"bank"},addTags:{amenity:"bank",brand:"Associated Bank","brand:wikidata":"Q4809155","brand:wikipedia":"en:Associated Banc-Corp",name:"Associated Bank",operator:"Associated Banc-Corp"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Attijariwafa Bank":{name:"Attijariwafa Bank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/689449211050393601/0_NfM1Dp_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q758052",amenity:"bank"},addTags:{amenity:"bank",brand:"Attijariwafa Bank","brand:wikidata":"Q758052","brand:wikipedia":"en:Attijariwafa Bank",name:"Attijariwafa Bank",operator:"Société Nationale d'Investissement","operator:en":"National Investment Company","operator:wikidata":"Q3488506","operator:wikipedia":"en:Société Nationale d'Investissement"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Axis Bank":{name:"Axis Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/axisbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2003549",amenity:"bank"},addTags:{amenity:"bank",brand:"Axis Bank","brand:wikidata":"Q2003549","brand:wikipedia":"en:Axis Bank",name:"Axis Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BAC":{name:"BAC",icon:"maki-bank",imageURL:"https://graph.facebook.com/BACCredomaticSV/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5715556",amenity:"bank"},addTags:{amenity:"bank",brand:"BAC","brand:wikidata":"Q5715556","brand:wikipedia":"en:Banco de América Central",name:"BAC",official_name:"Banco de America Central",operator:"Grupo Aval","operator:en":"Aval Group","operator:wikidata":"Q2053387","operator:wikipedia":"en:Grupo Aval"},terms:[],matchScore:2,suggestion:true},"amenity/bank/BAWAG PSK":{name:"BAWAG PSK",icon:"maki-bank",imageURL:"https://graph.facebook.com/bawag.psk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q379938",amenity:"bank"},addTags:{amenity:"bank",brand:"BAWAG PSK","brand:wikidata":"Q379938","brand:wikipedia":"en:BAWAG P.S.K.",name:"BAWAG PSK"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BB&T":{name:"BB&T",icon:"maki-bank",imageURL:"https://graph.facebook.com/BBTBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q795486",amenity:"bank"},addTags:{amenity:"bank",brand:"BB&T","brand:wikidata":"Q795486","brand:wikipedia":"en:BB&T",name:"BB&T",official_name:"Branch Banking and Trust Company"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BBBank":{name:"BBBank",icon:"maki-bank",imageURL:"https://graph.facebook.com/BBBank.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q795504",amenity:"bank"},addTags:{amenity:"bank",brand:"BBBank","brand:wikidata":"Q795504","brand:wikipedia":"en:BBBank",name:"BBBank",operator:"Baden-Württembergischer Genossenschaftsverband","operator:en":"Baden-Württemberg Cooperative Association","operator:wikidata":"Q798896","operator:wikipedia":"de:Baden-Württembergischer Genossenschaftsverband"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BBVA":{name:"BBVA",icon:"maki-bank",imageURL:"https://graph.facebook.com/GrupoBBVA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806189",amenity:"bank"},addTags:{amenity:"bank",brand:"BBVA","brand:wikidata":"Q806189","brand:wikipedia":"en:Banco Bilbao Vizcaya Argentaria",name:"BBVA",official_name:"Banco Bilbao Vizcaya Argentaria"},terms:[],matchScore:2,suggestion:true},"amenity/bank/BBVA Bancomer":{name:"BBVA Bancomer",icon:"maki-bank",imageURL:"https://graph.facebook.com/BBVABancomer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2876794",amenity:"bank"},addTags:{amenity:"bank",brand:"BBVA Bancomer","brand:wikidata":"Q2876794","brand:wikipedia":"en:BBVA Bancomer",name:"BBVA Bancomer",operator:"BBVA","operator:wikidata":"Q806189","operator:wikipedia":"de:Banco Bilbao Vizcaya Argentaria"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BBVA Compass":{name:"BBVA Compass",icon:"maki-bank",imageURL:"https://graph.facebook.com/bbvacompass/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4835088",amenity:"bank"},addTags:{amenity:"bank",brand:"BBVA Compass","brand:wikidata":"Q4835088","brand:wikipedia":"en:BBVA Compass",name:"BBVA Compass",official_name:"BBVA Compass Bancshares",operator:"BBVA","operator:wikidata":"Q806189","operator:wikipedia":"de:Banco Bilbao Vizcaya Argentaria"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BBVA Continental":{name:"BBVA Continental",icon:"maki-bank",imageURL:"https://graph.facebook.com/BBVAContinental/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4835089",amenity:"bank"},addTags:{amenity:"bank",brand:"BBVA Continental","brand:wikidata":"Q4835089","brand:wikipedia":"en:BBVA Continental",name:"BBVA Continental",operator:"BBVA","operator:wikidata":"Q806189","operator:wikipedia":"de:Banco Bilbao Vizcaya Argentaria"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BBVA Francés":{name:"BBVA Francés",icon:"maki-bank",imageURL:"https://graph.facebook.com/BBVAFrancesArg/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2876788",amenity:"bank"},addTags:{amenity:"bank",brand:"BBVA Francés","brand:en":"BBVA France","brand:fr":"BBVA France","brand:wikidata":"Q2876788","brand:wikipedia":"en:BBVA Francés",name:"BBVA Francés","name:en":"BBVA France","name:fr":"BBVA Francés",operator:"BBVA","operator:wikidata":"Q806189","operator:wikipedia":"de:Banco Bilbao Vizcaya Argentaria"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BCA":{name:"BCA",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/608231074435440640/GlPmkzgL_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q806626",amenity:"bank"},addTags:{amenity:"bank",brand:"BCA","brand:wikidata":"Q806626","brand:wikipedia":"id:Bank Central Asia",name:"BCA",official_name:"Bank Central Asia"},terms:["bank bca"],matchScore:2,suggestion:true},"amenity/bank/BCI":{name:"BCI",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoBci/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2882083",amenity:"bank"},addTags:{amenity:"bank",brand:"BCI","brand:wikidata":"Q2882083","brand:wikipedia":"es:Banco de Crédito e Inversiones",name:"BCI",official_name:"Banco de Crédito e Inversiones","official_name:en":"Bank of Credit and Investments","official_name:es":"Banco de Crédito e Inversiones"},terms:["banco bci"],matchScore:2,suggestion:true},"amenity/bank/BCP (Bolivia)":{name:"BCP (Bolivia)",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogobcp.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q16826675",amenity:"bank"},addTags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q16826675","brand:wikipedia":"es:Banco de Crédito de Bolivia",name:"BCP",official_name:"Banco de Crédito de Bolivia","official_name:en":"Credit Bank of Bolivia","official_name:es":"Banco de Crédito de Bolivia",operator:"Banco de Crédito del Perú","operator:en":"Credit Bank of Peru","operator:es":"Banco de Crédito del Perú","operator:wikidata":"Q4854124","operator:wikipedia":"es:Banco de Crédito del Perú"},countryCodes:["bo"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BCP (France)":{name:"BCP (France)",icon:"maki-bank",imageURL:"https://graph.facebook.com/MaisMillennium/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q118581",amenity:"bank"},addTags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q118581","brand:wikipedia":"pt:Banco Comercial Português",name:"BCP"},countryCodes:["fr"],terms:["banque bcp","bcp"],matchScore:2,suggestion:true},"amenity/bank/BCP (Luxembourg)":{name:"BCP (Luxembourg)",icon:"maki-bank",imageURL:"https://graph.facebook.com/MaisMillennium/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q118581",amenity:"bank"},addTags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q118581","brand:wikipedia":"pt:Banco Comercial Português",name:"BCP"},countryCodes:["lu"],terms:["banque bcp","bcp"],matchScore:2,suggestion:true},"amenity/bank/BCP (Peru)":{name:"BCP (Peru)",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancodecreditobcp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854124",amenity:"bank"},addTags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q4854124","brand:wikipedia":"es:Banco de Crédito del Perú",name:"BCP"},countryCodes:["pe"],terms:["banco de crédito del perú"],matchScore:2,suggestion:true},"amenity/bank/BCR (Banca Comercială Română)":{name:"BCR (Banca Comercială Română)",icon:"maki-bank",imageURL:"https://graph.facebook.com/BCRRomania/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806149",amenity:"bank"},addTags:{amenity:"bank",brand:"BCR","brand:wikidata":"Q806149","brand:wikipedia":"en:Banca Comercială Română",name:"BCR",official_name:"Banca Comercială Română","official_name:en":"Romanian Commercial Bank","official_name:ro":"Banca Comercială Română"},countryCodes:["ro"],terms:["banca comercială română"],matchScore:2,suggestion:true},"amenity/bank/BCR (Costa Rica)":{name:"BCR (Costa Rica)",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoBCR/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6951632",amenity:"bank"},addTags:{amenity:"bank",brand:"BCR","brand:wikidata":"Q6951632","brand:wikipedia":"es:Banco de Costa Rica",name:"BCR",official_name:"Banco de Costa Rica","official_name:en":"Bank of Costa Rica","official_name:es":"Banco de Costa Rica"},countryCodes:["cr"],terms:["banco de costa rica"],matchScore:2,suggestion:true},"amenity/bank/BDO":{name:"BDO",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoBCR/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854129",amenity:"bank"},addTags:{amenity:"bank",brand:"BDO","brand:wikidata":"Q4854129","brand:wikipedia":"en:Banco de Oro",name:"BDO",official_name:"Banco de Oro","official_name:en":"Gold Bank","official_name:es":"Banco de Oro"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BGŻ BNP Paribas":{name:"BGŻ BNP Paribas",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q20744004",amenity:"bank"},addTags:{amenity:"bank",brand:"BGŻ BNP Paribas","brand:wikidata":"Q20744004","brand:wikipedia":"pl:BNP Paribas Bank Polska",name:"BGŻ BNP Paribas",operator:"BNP Paribas","operator:wikidata":"Q499707","operator:wikipedia":"pl:BNP Paribas"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BIAT":{name:"BIAT",icon:"maki-bank",imageURL:"https://graph.facebook.com/BanqueInternationaleArabedeTunisie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q690739",amenity:"bank"},addTags:{amenity:"bank",brand:"BIAT","brand:wikidata":"Q690739","brand:wikipedia":"en:Banque Internationale Arabe de Tunisie",name:"BIAT"},countryCodes:["tn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BMCE Bank":{name:"BMCE Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/bmcebank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2300433",amenity:"bank"},addTags:{amenity:"bank",brand:"BMCE Bank","brand:wikidata":"Q2300433","brand:wikipedia":"ar:البنك المغربي للتجارة الخارجية",name:"BMCE Bank"},terms:["bmce"],matchScore:2,suggestion:true},"amenity/bank/BMCI":{name:"BMCI",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q2883409",amenity:"bank"},addTags:{amenity:"bank",brand:"BMCI","brand:wikidata":"Q2883409","brand:wikipedia":"ar:البنك المغربي للتجارة والصناعة",name:"BMCI",operator:"BNP Paribas","operator:wikidata":"Q499707","operator:wikipedia":"pl:BNP Paribas"},countryCodes:["ma"],terms:["bmci bank"],matchScore:2,suggestion:true},"amenity/bank/BMN":{name:"BMN",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBMN%20nuevo%20logo.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3754900",amenity:"bank"},addTags:{amenity:"bank",brand:"BMN","brand:wikidata":"Q3754900","brand:wikipedia":"es:Banco Mare Nostrum",name:"BMN",official_name:"Banco Mare Nostrum"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BMO":{name:"BMO",icon:"maki-bank",imageURL:"https://graph.facebook.com/BMOcommunity/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806693",amenity:"bank"},addTags:{amenity:"bank",brand:"BMO","brand:wikidata":"Q806693","brand:wikipedia":"en:Bank of Montreal",name:"BMO",official_name:"Bank of Montreal"},countryCodes:["ca","us"],terms:["bmo bank of montreal"],matchScore:2,suggestion:true},"amenity/bank/BMO Harris Bank":{name:"BMO Harris Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/bmoharrisbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4835981",amenity:"bank"},addTags:{amenity:"bank",brand:"BMO Harris Bank","brand:wikidata":"Q4835981","brand:wikipedia":"en:BMO Harris Bank",name:"BMO Harris Bank",operator:"Bank of Montreal","operator:wikidata":"Q806693","operator:wikipedia":"en:Bank of Montreal"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BNA (Algeria)":{name:"BNA (Algeria)",icon:"maki-bank",imageURL:"https://graph.facebook.com/bnalgerie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2883410",amenity:"bank"},addTags:{amenity:"bank",brand:"BNA","brand:wikidata":"Q2883410","brand:wikipedia":"fr:Banque nationale d'Algérie",name:"BNA",official_name:"Banque nationale d'Algérie","official_name:en":"National Bank of Algeria","official_name:fr":"Banque nationale d'Algérie"},countryCodes:["dz"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BNA (Tunisia)":{name:"BNA (Tunisia)",icon:"maki-bank",imageURL:"https://graph.facebook.com/BanqueNationaleAgricole/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2883413",amenity:"bank"},addTags:{amenity:"bank",brand:"BNA","brand:wikidata":"Q2883413","brand:wikipedia":"fr:Banque nationale agricole",name:"BNA"},countryCodes:["tn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BNI":{name:"BNI",icon:"maki-bank",imageURL:"https://graph.facebook.com/BNI/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2882611",amenity:"bank"},addTags:{amenity:"bank",brand:"BNI","brand:wikidata":"Q2882611","brand:wikipedia":"id:Bank Negara Indonesia",name:"BNI",official_name:"Bank Negara Indonesia","official_name:en":"State Bank of Indonesia","official_name:id":"Bank Negara Indonesia"},terms:["bank bni"],matchScore:2,suggestion:true},"amenity/bank/BNL":{name:"BNL",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q2201225",amenity:"bank"},addTags:{amenity:"bank",brand:"BNL","brand:wikidata":"Q2201225","brand:wikipedia":"en:Banca Nazionale del Lavoro",name:"BNL",official_name:"Banca Nazionale del Lavoro","official_name:en":"National Labor Bank","official_name:it":"Banca Nazionale del Lavoro",operator:"BNP Paribas","operator:wikidata":"Q499707","operator:wikipedia":"en:BNP Paribas"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BNP Paribas":{name:"BNP Paribas",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/1129679122182082561/dBPwAfEP_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q499707",amenity:"bank"},addTags:{amenity:"bank",brand:"BNP Paribas","brand:wikidata":"Q499707","brand:wikipedia":"en:BNP Paribas",name:"BNP Paribas"},terms:[],matchScore:2,suggestion:true},"amenity/bank/BNP Paribas Fortis":{name:"BNP Paribas Fortis",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q796827",amenity:"bank"},addTags:{amenity:"bank",brand:"BNP Paribas Fortis","brand:wikidata":"Q796827","brand:wikipedia":"en:BNP Paribas Fortis",name:"BNP Paribas Fortis"},terms:[],matchScore:2,suggestion:true},"amenity/bank/BOC":{name:"BOC",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FChinese%20Bank%20of%20China.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q790068",amenity:"bank"},addTags:{amenity:"bank",brand:"BOC","brand:wikidata":"Q790068","brand:wikipedia":"en:Bank of China",name:"BOC",official_name:"Bank of China"},terms:[],matchScore:2,suggestion:true},"amenity/bank/BPI":{name:"BPI",icon:"maki-bank",imageURL:"https://graph.facebook.com/bpi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2501256",amenity:"bank"},addTags:{amenity:"bank",brand:"BPI","brand:wikidata":"Q2501256","brand:wikipedia":"en:Bank of the Philippine Islands",name:"BPI",official_name:"Bank of the Philippine Islands"},terms:["bank of the philippine islands","bpi family savings bank"],matchScore:2,suggestion:true},"amenity/bank/BRD":{name:"BRD",icon:"maki-bank",imageURL:"https://graph.facebook.com/BRDGroupeSocieteGenerale/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q796927",amenity:"bank"},addTags:{amenity:"bank",brand:"BRD","brand:wikidata":"Q796927","brand:wikipedia":"ro:BRD - Groupe Société Générale",name:"BRD"},countryCodes:["ro"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BRED":{name:"BRED",icon:"maki-bank",imageURL:"https://graph.facebook.com/BRED.Banque.Populaire/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2877455",amenity:"bank"},addTags:{amenity:"bank",brand:"BRED","brand:wikidata":"Q2877455","brand:wikipedia":"fr:BRED Banque populaire",name:"BRED",official_name:"Banque régionale d'escompte et de dépôts","official_name:en":"Regional Discount and Deposit Bank","official_name:fr":"Banque régionale d'escompte et de dépôts",operator:"Groupe BPCE","operator:en":"BPCE Group","operator:fr":"Groupe BPCE","operator:wikidata":"Q806941","operator:wikipedia":"en:Groupe BPCE"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BRI":{name:"BRI",icon:"maki-bank",imageURL:"https://graph.facebook.com/BRIofficialpage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q623042",amenity:"bank"},addTags:{amenity:"bank",brand:"BRI","brand:wikidata":"Q623042","brand:wikipedia":"id:Bank Rakyat Indonesia",name:"BRI",official_name:"Bank Rakyat Indonesia","official_name:en":"People's Bank of Indonesia","official_name:id":"Bank Rakyat Indonesia"},countryCodes:["id"],terms:["bank bri"],matchScore:2,suggestion:true},"amenity/bank/BTN":{name:"BTN",icon:"maki-bank",imageURL:"https://graph.facebook.com/www.btn.co.id/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12474534",amenity:"bank"},addTags:{amenity:"bank",brand:"BTN","brand:en":"BTN","brand:id":"BTN","brand:wikidata":"Q12474534","brand:wikipedia":"id:Bank Tabungan Negara",name:"BTN","name:en":"BTN","name:id":"BTN",official_name:"Bank Tabungan Negara","official_name:en":"State Savings Bank","official_name:id":"Bank Tabungan Negara"},countryCodes:["id"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BW-Bank":{name:"BW-Bank",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBaden-W%C3%BCrttembergische%20Bank%20text%20logo%20black.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q798891",amenity:"bank"},addTags:{amenity:"bank",brand:"BW-Bank","brand:ed":"BW-Bank","brand:en":"BW-Bank","brand:wikidata":"Q798891","brand:wikipedia":"de:Baden-Württembergische Bank",name:"BW-Bank","name:de":"BW-Bank","name:en":"BW-Bank",operator:"Landesbank Baden-Württemberg","operator:de":"Landesbank Baden-Württemberg","operator:en":"Baden-Württemberg Regional Bank","operator:wikidata":"Q451814","operator:wikipedia":"en:Landesbank Baden-Württemberg"},countryCodes:["de"],terms:["baden-württembergische bank"],matchScore:2,suggestion:true},"amenity/bank/Banamex":{name:"Banamex",icon:"maki-bank",imageURL:"https://graph.facebook.com/Citibanamex/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q749474",amenity:"bank"},addTags:{amenity:"bank",brand:"Banamex","brand:wikidata":"Q749474","brand:wikipedia":"en:Grupo Financiero Banamex",name:"Banamex",official_name:"Grupo Financiero Banamex","official_name:en":"Banamex Financial Group","official_name:es":"Grupo Financiero Banamex",operator:"Citigroup","operator:wikidata":"Q219508","operator:wikipedia":"en:Citigroup"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca Intesa":{name:"Banca Intesa",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancaintesa.rs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q647092",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Intesa","brand:wikidata":"Q647092","brand:wikipedia":"en:Banca Intesa",name:"Banca Intesa","name:en":"Intesa Bank","name:it":"Banca Intesa",operator:"Intesa Sanpaolo","operator:en":"Intesa St. Paul","operator:it":"Intesa Sanpaolo","operator:wikidata":"Q1343118","operator:wikipedia":"en:Intesa Sanpaolo"},countryCodes:["it","rs"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca March":{name:"Banca March",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancamarch/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q578252",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca March","brand:wikidata":"Q578252","brand:wikipedia":"en:Banca March",name:"Banca March"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca Popolare di Milano":{name:"Banca Popolare di Milano",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoBPM/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806154",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Popolare di Milano","brand:en":"Popular Bank of Milan","brand:it":"Banca Popolare di Milano","brand:wikidata":"Q806154","brand:wikipedia":"en:Banca Popolare di Milano",name:"Banca Popolare di Milano","name:en":"Popular Bank of Milan","name:it":"Banca Popolare di Milano",operator:"Banco BPM","operator:en":"BPM Bank","operator:it":"Banco BPM","operator:wikidata":"Q27331643","operator:wikipedia":"en:Banco BPM"},countryCodes:["it"],terms:["bpm"],matchScore:2,suggestion:true},"amenity/bank/Banca Popolare di Novara":{name:"Banca Popolare di Novara",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3633742",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Popolare di Novara","brand:en":"Popular Bank of Novara","brand:it":"Banca Popolare di Novara","brand:wikidata":"Q3633742","brand:wikipedia":"en:Banca Popolare di Novara",name:"Banca Popolare di Novara","name:en":"Popular Bank of Novara","name:it":"Banca Popolare di Novara",operator:"Banco BPM","operator:en":"BPM Bank","operator:it":"Banco BPM","operator:wikidata":"Q27331643","operator:wikipedia":"en:Banco BPM"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca Popolare di Sondrio":{name:"Banca Popolare di Sondrio",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q686176",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Popolare di Sondrio","brand:en":"Popular Bank of Sandrio","brand:it":"Banca Popolare di Sondrio","brand:wikidata":"Q686176","brand:wikipedia":"en:Banca Popolare di Sondrio",name:"Banca Popolare di Sondrio","name:en":"Popular Bank of Sandrio","name:it":"Banca Popolare di Sondrio"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca Popolare di Verona":{name:"Banca Popolare di Verona",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3167468",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Popolare di Verona","brand:en":"Popular Bank of Verona","brand:it":"Banca Popolare di Verona","brand:wikidata":"Q3167468","brand:wikipedia":"en:Banca Popolare di Verona",name:"Banca Popolare di Verona","name:en":"Popular Bank of Verona","name:it":"Banca Popolare di Verona",operator:"Banco Popolare","operator:en":"Popular Bank","operator:it":"Banco Popolare","operator:wikidata":"Q806194","operator:wikipedia":"en:Banco Popolare"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca Popolare di Vicenza":{name:"Banca Popolare di Vicenza",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3127200",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Popolare di Vicenza","brand:en":"Popular Bank of Vicenza","brand:it":"Banca Popolare di Vicenza","brand:wikidata":"Q3127200","brand:wikipedia":"en:Banca Popolare di Vicenza",name:"Banca Popolare di Vicenza","name:en":"Popular Bank of Vicena","name:it":"Banca Popolare di Vicenza",operator:"Atlante","operator:en":"Atlas","operator:it":"Atlante","operator:wikidata":"Q25206459","operator:wikipedia":"en:Atlante (private equity fund)"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca Românească":{name:"Banca Românească",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancaRomaneascaOficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854052",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Românească","brand:en":"Romanian Bank","brand:ro":"Banca Românească","brand:wikidata":"Q4854052","brand:wikipedia":"ro:Banca Românească",name:"Banca Românească","name:en":"Popular Bank of Vicena","name:ro":"Banca Românească",operator:"National Bank of Greece","operator:wikidata":"Q1816028","operator:wikipedia":"en:National Bank of Greece"},countryCodes:["ro"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca Sella":{name:"Banca Sella",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancasella/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3633749",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Sella","brand:en":"Sella Bank","brand:it":"Banca Sella","brand:wikidata":"Q3633749","brand:wikipedia":"en:Banca Sella Group",name:"Banca Sella","name:en":"Sella Bank","name:it":"Banca Sella"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca Transilvania":{name:"Banca Transilvania",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancaTransilvania/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806161",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Transilvania","brand:en":"Transilvania Bank","brand:ro":"Banca Transilvania","brand:wikidata":"Q806161","brand:wikipedia":"en:Banca Transilvania",name:"Banca Transilvania","name:en":"Transilvania Bank","name:ro":"Banca Transilvania"},countryCodes:["ro"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bancaribe":{name:"Bancaribe",icon:"maki-bank",imageURL:"https://graph.facebook.com/Bancaribe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5717827",amenity:"bank"},addTags:{amenity:"bank",brand:"Bancaribe","brand:wikidata":"Q5717827","brand:wikipedia":"en:Bancaribe",name:"Bancaribe"},countryCodes:["ve"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco AV Villas":{name:"Banco AV Villas",icon:"maki-bank",imageURL:"https://graph.facebook.com/AVVillas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854068",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco AV Villas","brand:en":"Bank of Villas","brand:es":"Banco AV Villas","brand:wikidata":"Q4854068","brand:wikipedia":"en:Banco AV Villas",name:"Banco AV Villas","name:en":"Bank of Villas","name:es":"Banco AV Villas",operator:"Grupo Aval","operator:en":"Aval Group","operator:pt":"Grupo Aval","operator:wikidata":"Q2053387","operator:wikipedia":"en:Grupo Aval"},countryCodes:["co"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Agrario":{name:"Banco Agrario",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBanco%20Agrario%20de%20Colombia%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q20013358",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Agrario","brand:en":"Agrarian Bank","brand:wikidata":"Q20013358","brand:wikipedia":"es:Banco Agrario de Colombia",name:"Banco Agrario","name:en":"Agrarian Bank","name:es":"Banco Agrario",official_name:"Banco Agrario de Colombia","official_name:en":"Agrarian Bank of Colombia","official_name:es":"Banco Agrario de Colombia"},countryCodes:["co"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Agrario de Colombia":{name:"Banco Agrario de Colombia",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBanco%20Agrario%20de%20Colombia%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q20013358",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Agrario de Colombia","brand:wikidata":"Q20013358","brand:wikipedia":"en:Banco Agrario de Colombia",name:"Banco Agrario de Colombia"},countryCodes:["co"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Azteca":{name:"Banco Azteca",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoAzteca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854076",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Azteca","brand:en":"Aztec Bank","brand:es":"Banco Azteca","brand:wikidata":"Q4854076","brand:wikipedia":"en:Banco Azteca",name:"Banco Azteca","name:en":"Aztec Bank","name:es":"Banco Azteca",operator:"Grupo Elektra","operator:en":"Elektra Group","operator:es":"Grupo Elektra","operator:wikidata":"Q1142753","operator:wikipedia":"en:Grupo Elektra"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco BPM":{name:"Banco BPM",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q27331643",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco BPM","brand:wikidata":"Q27331643","brand:wikipedia":"en:Banco BPM",name:"Banco BPM"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Caja Social":{name:"Banco Caja Social",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoCajaSocial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5717869",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Caja Social","brand:en":"Social Housing Bank","brand:es":"Banco Caja Social","brand:wikidata":"Q5717869","brand:wikipedia":"es:Banco Caja Social",name:"Banco Caja Social","name:en":"Social Housing Bank","name:es":"Banco Caja Social"},countryCodes:["co"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Ciudad":{name:"Banco Ciudad",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q4856204",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Ciudad","brand:en":"City Bank","brand:es":"Banco Ciudad","brand:wikidata":"Q4856204","brand:wikipedia":"en:Bank of the City of Buenos Aires",name:"Banco Ciudad","name:en":"City Bank","name:es":"Banco Ciudad",official_name:"Banco Ciudad de Buenos Aires","official_name:en":"Bank of the City of Buenos Aires","official_name:es":"Banco Ciudad de Buenos Aires"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Continental (Paraguay)":{name:"Banco Continental (Paraguay)",icon:"maki-bank",imageURL:"https://graph.facebook.com/bcontinentalpy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62054564",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Continental","brand:wikidata":"Q62054564",name:"Banco Continental"},countryCodes:["py"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Continental (Peru)":{name:"Banco Continental (Peru)",icon:"maki-bank",imageURL:"https://graph.facebook.com/BBVAContinental/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4835089",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Continental","brand:en":"Continental Bank","brand:es":"Banco Continental","brand:wikidata":"Q4835089","brand:wikipedia":"en:BBVA Continental",name:"Banco Continental","name:en":"Continental Bank","name:es":"Banco Continental"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Estado":{name:"Banco Estado",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoEstado/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5718188",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Estado","brand:en":"State Bank","brand:es":"Banco Estado","brand:wikidata":"Q5718188","brand:wikipedia":"es:Banco del Estado de Chile",name:"Banco Estado","name:en":"State Bank","name:es":"Banco Estado",official_name:"Banco del Estado de Chile","official_name:en":"Bank of the State of Chile","official_name:es":"Banco del Estado de Chile"},countryCodes:["cl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Falabella":{name:"Banco Falabella",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancofalabella/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854088",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Falabella","brand:en":"Falabella Bank","brand:es":"Banco Falabella","brand:wikidata":"Q4854088","brand:wikipedia":"en:Banco Falabella",name:"Banco Falabella","name:en":"Falabella Bank","name:es":"Banco Falabella",operator:"Falabella","operator:es":"Falabella","operator:wikidata":"Q1374824","operator:wikipedia":"en:S.A.C.I. Falabella"},countryCodes:["cl","co","pe"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Fassil":{name:"Banco Fassil",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancofassil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62118592",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Fassil","brand:en":"Fassil Bank","brand:es":"Banco Fassil","brand:wikidata":"Q62118592",name:"Banco Fassil","name:en":"Fassil Bank","name:es":"Banco Fassil"},countryCodes:["bo"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco G&T Continental":{name:"Banco G&T Continental",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/1086265271898202112/jhjR8vK2_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5717949",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco G&T Continental","brand:en":"G&T Continental Bank","brand:es":"Banco G&T Continental","brand:wikidata":"Q5717949","brand:wikipedia":"es:Banco GYT Continental, S.A.",name:"Banco G&T Continental","name:en":"G&T Continental Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco General":{name:"Banco General",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancogeneral/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q27618271",amenity:"bank"},addTags:{amenity:"bank",brand:"BW-Bank","brand:en":"BW-Bank","brand:es":"BW-Bank","brand:wikidata":"Q27618271","brand:wikipedia":"es:Banco General (Panamá)",name:"Banco General","name:en":"General Bank","name:es":"Banco General"},countryCodes:["cr","pa"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Industrial":{name:"Banco Industrial",icon:"maki-bank",imageURL:"https://graph.facebook.com/bindARG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16489444",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Industrial","brand:en":"Industrial Bank","brand:es":"Banco Industrial","brand:wikidata":"Q16489444","brand:wikipedia":"es:Banco Industrial",name:"Banco Industrial","name:en":"Industrial Bank","name:es":"Banco Industrial",operator:"BIND Group"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Internacional (Chile)":{name:"Banco Internacional (Chile)",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/438324350148571136/fCNvpo-F_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q56605586",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Internacional","brand:en":"International Bank","brand:es":"Banco Internacional","brand:wikidata":"Q56605586","brand:wikipedia":"es:Banco Internacional (Chile)",name:"Banco Internacional","name:en":"International Bank","name:es":"Banco Internacional"},countryCodes:["cl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Internacional (Ecuador)":{name:"Banco Internacional (Ecuador)",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoInternacionalEcuador/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806187",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Internacional","brand:en":"International Bank","brand:es":"Banco Internacional","brand:wikidata":"Q806187","brand:wikipedia":"es:Banco Internacional",name:"Banco Internacional","name:en":"International Bank","name:es":"Banco Internacional"},countryCodes:["ec"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Metropolitano":{name:"Banco Metropolitano",icon:"maki-bank",imageURL:"https://graph.facebook.com/BanmetCuba/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62118612",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Metropolitano","brand:en":"Metroplitan Bank","brand:es":"Banco Metropolitano","brand:wikidata":"Q62118612",name:"Banco Metropolitano","name:en":"Metropolitan Bank","name:es":"Banco Metropolitano"},countryCodes:["cu"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Nacional":{name:"Banco Nacional",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q4854104",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Nacional","brand:en":"National Bank","brand:es":"Banco Nacional","brand:wikidata":"Q4854104","brand:wikipedia":"en:Banco Nacional",name:"Banco Nacional","name:en":"National Bank","name:es":"Banco Nacional"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Nación":{name:"Banco Nación",icon:"maki-bank",imageURL:"https://graph.facebook.com/banconacion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2883376",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Nación","brand:en":"Nation Bank","brand:es":"Nation Bank","brand:wikidata":"Q2883376","brand:wikipedia":"en:Banco de la Nación Argentina",name:"Banco Nación","name:en":"Nation Bank","name:es":"Banco Nación",official_name:"Banco de la Nación Argentina","official_name:en":"Bank of the Argentine Nation","official_name:es":"Banco de la Nación Argentina"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Pastor":{name:"Banco Pastor",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20pastor168x78.gif%3Bpv91c0cc0e0080a771.gif&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q806193",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Pastor","brand:en":"Shepherd Bank","brand:es":"Banco Pastor","brand:wikidata":"Q806193","brand:wikipedia":"en:Banco Pastor",name:"Banco Pastor","name:en":"Shepherd Bank","name:es":"Banco Pastor",official_name:"Banco Popular Pastor","official_name:en":"Popular Shepherd Bank","official_name:es":"Banco Popular Pastor",operator:"Popular, Inc.","operator:wikidata":"Q7229656","operator:wikipedia":"en:Popular, Inc."},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Pichincha":{name:"Banco Pichincha",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoPichinchaEcuador/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854135",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Pichincha","brand:en":"Pichincha Bank","brand:es":"Banco Pichincha","brand:wikidata":"Q4854135","brand:wikipedia":"en:Banco Pichincha",name:"Banco Pichincha","name:en":"Pichincha Bank","name:es":"Banco Pichincha",operator:"Grupo Pichincha","operator:wikidata":"Q6440687","operator:wikipedia":"es:Grupo Pichincha"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Popular":{name:"Banco Popular",icon:"maki-bank",imageURL:"https://graph.facebook.com/grupobancopopular/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q537259",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Popular","brand:en":"Popular Bank","brand:es":"Banco Popular","brand:wikidata":"Q537259","brand:wikipedia":"es:Banco Popular Español",name:"Banco Popular","name:en":"Popular Bank","name:es":"Banco Popular",official_name:"Banco Popular Español","official_name:en":"Spanish Popular Bank","official_name:es":"Banco Popular Español",operator:"Banco Santander","operator:wikidata":"Q806215","operator:wikipedia":"en:Banco Santander"},countryCodes:["pr","us","vi"],terms:["popular"],matchScore:2,suggestion:true},"amenity/bank/Banco Popular de Ahorro":{name:"Banco Popular de Ahorro",icon:"maki-bank",imageURL:"https://graph.facebook.com/bpa.cu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62118626",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Popular de Ahorro","brand:en":"Popular Saving Bank","brand:es":"Banco Popular de Ahorro","brand:wikidata":"Q62118626",name:"Banco Popular de Ahorro","name:en":"Popular Saving Bank","name:es":"Banco Popular de Ahorro"},countryCodes:["cu"],terms:["bpa"],matchScore:2,suggestion:true},"amenity/bank/Banco Provincia":{name:"Banco Provincia",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancoprovincia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4856209",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Provincia","brand:en":"Province Bank","brand:es":"Banco Provincia","brand:wikidata":"Q4856209","brand:wikipedia":"es:Banco de la Provincia de Buenos Aires",name:"Banco Provincia","name:en":"Province Bank","name:es":"Banco Provincia",official_name:"Banco de la Provincia de Buenos Aires","official_name:en":"Bank of the Province of Buenos Aires","official_name:es":"Banco de la Provincia de Buenos Aires"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Sabadell":{name:"Banco Sabadell",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancosabadell/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q762330",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Sabadell","brand:en":"Sabadell Bank","brand:es":"Banco Sabadell","brand:wikidata":"Q762330","brand:wikipedia":"es:Banco Sabadell",name:"Banco Sabadell","name:en":"Sabadell Bank","name:es":"Banco Sabadell"},countryCodes:["es"],terms:["banc sabadell","sabadell"],matchScore:2,suggestion:true},"amenity/bank/Banco Santa Fe":{name:"Banco Santa Fe",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoSantaFe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6046871",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Santa Fe","brand:en":"Santa Fe Bank","brand:es":"Banco Santa Fe","brand:wikidata":"Q6046871","brand:wikipedia":"es:Nuevo Banco de Santa Fe",name:"Banco Santa Fe","name:en":"Santa Fe Bank","name:es":"Banco Santa Fe",official_name:"Nuevo Banco de Santa Fe","official_name:en":"New Bank of Santa Fe","official_name:es":"Nuevo Banco de Santa Fe"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Santander":{name:"Banco Santander",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancosantander/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6496310",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Santander","brand:en":"Santander Bank","brand:es":"Banco Santander","brand:wikidata":"Q6496310","brand:wikipedia":"es:Banco Santander",name:"Banco Santander","name:en":"Santander Bank","name:es":"Banco Santander"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Sol (Angola)":{name:"Banco Sol (Angola)",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q62118744",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Sol","brand:pt":"Banco Sol","brand:wikidata":"Q62118744",name:"Banco Sol","name:pt":"Banco Sol"},countryCodes:["ao"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Sol (Bolivia)":{name:"Banco Sol (Bolivia)",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoSolidarioBolivia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62118746",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Sol","brand:pt":"Banco Sol","brand:wikidata":"Q62118746",name:"Banco Sol","name:pt":"Banco Sol"},countryCodes:["bo"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco de Bogotá":{name:"Banco de Bogotá",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancodeBogota/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854122",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco de Bogotá","brand:wikidata":"Q4854122","brand:wikipedia":"es:Banco de Bogotá",name:"Banco de Bogotá"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco de Chile":{name:"Banco de Chile",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancochile.cl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2882085",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco de Chile","brand:wikidata":"Q2882085","brand:wikipedia":"es:Banco de Chile",name:"Banco de Chile"},countryCodes:["cl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco de Desarrollo Banrural":{name:"Banco de Desarrollo Banrural",icon:"maki-bank",imageURL:"https://graph.facebook.com/grupofinancierobanrural/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5719130",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco de Desarrollo Banrural","brand:wikidata":"Q5719130","brand:wikipedia":"es:Banrural",name:"Banco de Desarrollo Banrural"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco de Fomento Angola (BFA)":{name:"Banco de Fomento Angola (BFA)",icon:"maki-bank",imageURL:"https://graph.facebook.com/Banco.BFA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806197",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco de Fomento Angola (BFA)","brand:wikidata":"Q806197","brand:wikipedia":"de:Banco de Fomento Angola",name:"Banco de Fomento Angola (BFA)"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco de Occidente":{name:"Banco de Occidente",icon:"maki-bank",imageURL:"https://graph.facebook.com/BcoOccidente/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854127",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco de Occidente","brand:wikidata":"Q4854127","brand:wikipedia":"es:Banco de Occidente (Colombia)",name:"Banco de Occidente"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco de Venezuela":{name:"Banco de Venezuela",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancodeVenezuelaOficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q517093",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco de Venezuela","brand:wikidata":"Q517093","brand:wikipedia":"es:Banco de Venezuela",name:"Banco de Venezuela"},terms:["de venezuela"],matchScore:2,suggestion:true},"amenity/bank/Banco de la Nación (Argentina)":{name:"Banco de la Nación (Argentina)",icon:"maki-bank",imageURL:"https://graph.facebook.com/banconacion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2883376",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco de la Nación","brand:wikidata":"Q2883376","brand:wikipedia":"en:Banco de la Nación Argentina",name:"Banco de la Nación"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco de la Nación (Peru)":{name:"Banco de la Nación (Peru)",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancodelaNacion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4856206",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco de la Nación","brand:wikidata":"Q4856206","brand:wikipedia":"en:Bank of the Nation (Peru)",name:"Banco de la Nación"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco del Austro":{name:"Banco del Austro",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancodelaustro/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62122344",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco del Austro","brand:wikidata":"Q62122344",name:"Banco del Austro"},countryCodes:["ec"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco di Napoli":{name:"Banco di Napoli",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3633835",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco di Napoli","brand:wikidata":"Q3633835","brand:wikipedia":"en:Banco di Napoli",name:"Banco di Napoli"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco di Sardegna":{name:"Banco di Sardegna",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q806205",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco di Sardegna","brand:wikidata":"Q806205","brand:wikipedia":"en:Banco di Sardegna",name:"Banco di Sardegna"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco do Brasil":{name:"Banco do Brasil",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBanco%20do%20Brasil%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q610817",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco do Brasil","brand:wikidata":"Q610817","brand:wikipedia":"en:Banco do Brasil",name:"Banco do Brasil"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco do Nordeste":{name:"Banco do Nordeste",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20BNB%20(1).svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4854137",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco do Nordeste","brand:wikidata":"Q4854137","brand:wikipedia":"en:Banco do Nordeste",name:"Banco do Nordeste"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bancolombia":{name:"Bancolombia",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBancolombia%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q806206",amenity:"bank"},addTags:{amenity:"bank",brand:"Bancolombia","brand:wikidata":"Q806206","brand:wikipedia":"en:Bancolombia",name:"Bancolombia"},countryCodes:["co"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bancomer":{name:"Bancomer",icon:"maki-bank",imageURL:"https://graph.facebook.com/BBVABancomer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2876794",amenity:"bank"},addTags:{amenity:"bank",brand:"Bancomer","brand:wikidata":"Q2876794","brand:wikipedia":"en:BBVA Bancomer",name:"Bancomer"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bancpost":{name:"Bancpost",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q4854143",amenity:"bank"},addTags:{amenity:"bank",brand:"Bancpost","brand:wikidata":"Q4854143","brand:wikipedia":"ro:Bancpost",name:"Bancpost"},countryCodes:["ro"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banesco":{name:"Banesco",icon:"maki-bank",imageURL:"https://graph.facebook.com/BanescoBancoUniversal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854841",amenity:"bank"},addTags:{amenity:"bank",brand:"Banesco","brand:wikidata":"Q4854841","brand:wikipedia":"en:Banesco",name:"Banesco"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Bangkok Bank":{name:"Bangkok Bank",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Bangkok%20Bank%20Public%20Company%20Limited.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q806483",amenity:"bank"},addTags:{amenity:"bank",brand:"Bangkok Bank","brand:wikidata":"Q806483","brand:wikipedia":"en:Bangkok Bank",name:"Bangkok Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank Al Habib":{name:"Bank Al Habib",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBankalhabiblogo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4034833",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank Al Habib","brand:wikidata":"Q4034833","brand:wikipedia":"ur:بينک الحبيب لمیٹڈ",name:"Bank Al Habib"},countryCodes:["pk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank Alfalah":{name:"Bank Alfalah",icon:"maki-bank",imageURL:"https://graph.facebook.com/BankAlfalahOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4855895",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank Alfalah","brand:wikidata":"Q4855895","brand:wikipedia":"en:Bank Alfalah",name:"Bank Alfalah"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank Austria":{name:"Bank Austria",icon:"maki-bank",imageURL:"https://graph.facebook.com/BankAustria/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q697619",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank Austria","brand:wikidata":"Q697619","brand:wikipedia":"en:Bank Austria",name:"Bank Austria"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank Danamon":{name:"Bank Danamon",icon:"maki-bank",imageURL:"https://graph.facebook.com/DanamonIndonesia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4855913",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank Danamon","brand:wikidata":"Q4855913","brand:wikipedia":"en:Bank Danamon",name:"Bank Danamon"},countryCodes:["id"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank Mandiri":{name:"Bank Mandiri",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBank%20Mandiri%20(1998-2008).svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q806639",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank Mandiri","brand:wikidata":"Q806639","brand:wikipedia":"en:Bank Mandiri",name:"Bank Mandiri"},countryCodes:["id"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank Mandiri Syariah":{name:"Bank Mandiri Syariah",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q12474533",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank Mandiri Syariah","brand:wikidata":"Q12474533","brand:wikipedia":"id:Bank Syariah Mandiri",name:"Bank Mandiri Syariah"},countryCodes:["id"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank Mega":{name:"Bank Mega",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q12474504",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank Mega","brand:wikidata":"Q12474504","brand:wikipedia":"id:Bank Mega",name:"Bank Mega"},countryCodes:["id"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank Muamalat":{name:"Bank Muamalat",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q4855949",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank Muamalat","brand:wikidata":"Q4855949","brand:wikipedia":"en:Bank Muamalat",name:"Bank Muamalat"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank Pekao":{name:"Bank Pekao",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBank%20Pekao%20SA%20Logo%20(2017).svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q806642",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank Pekao","brand:wikidata":"Q806642","brand:wikipedia":"pl:Bank Polska Kasa Opieki",name:"Bank Pekao"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank Rakyat":{name:"Bank Rakyat",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q4855964",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank Rakyat","brand:wikidata":"Q4855964","brand:wikipedia":"ms:Bank Rakyat",name:"Bank Rakyat"},countryCodes:["my"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank of Africa":{name:"Bank of Africa",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q2882627",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank of Africa","brand:wikidata":"Q2882627","brand:wikipedia":"en:Bank of Africa Group",name:"Bank of Africa",short_name:"BOA"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank of America":{name:"Bank of America",icon:"maki-bank",imageURL:"https://graph.facebook.com/BankofAmerica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q487907",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank of America","brand:wikidata":"Q487907","brand:wikipedia":"en:Bank of America",name:"Bank of America"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank of Baroda":{name:"Bank of Baroda",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q2003797",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank of Baroda","brand:wikidata":"Q2003797","brand:wikipedia":"en:Bank of Baroda",name:"Bank of Baroda"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank of Ceylon":{name:"Bank of Ceylon",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q2882652",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank of Ceylon","brand:wikidata":"Q2882652","brand:wikipedia":"en:Bank of Ceylon",name:"Bank of Ceylon"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank of China":{name:"Bank of China",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FChinese%20Bank%20of%20China.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q790068",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank of China","brand:wikidata":"Q790068","brand:wikipedia":"en:Bank of China",name:"Bank of China"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank of Commerce":{name:"Bank of Commerce",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q4856092",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank of Commerce","brand:wikidata":"Q4856092","brand:wikipedia":"en:Bank of Commerce",name:"Bank of Commerce"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank of Cyprus":{name:"Bank of Cyprus",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q806678",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank of Cyprus","brand:wikidata":"Q806678","brand:wikipedia":"en:Bank of Cyprus",name:"Bank of Cyprus"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank of India":{name:"Bank of India",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q2004439",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank of India","brand:wikidata":"Q2004439","brand:wikipedia":"en:Bank of India",name:"Bank of India"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank of Ireland":{name:"Bank of Ireland",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBank-of-Ireland-Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q806689",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank of Ireland","brand:wikidata":"Q806689","brand:wikipedia":"en:Bank of Ireland",name:"Bank of Ireland"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank of Maharashtra":{name:"Bank of Maharashtra",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q2004304",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank of Maharashtra","brand:wikidata":"Q2004304","brand:wikipedia":"en:Bank of Maharashtra",name:"Bank of Maharashtra"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank of Montreal":{name:"Bank of Montreal",icon:"maki-bank",imageURL:"https://graph.facebook.com/BMOcommunity/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806693",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank of Montreal","brand:wikidata":"Q806693","brand:wikipedia":"en:Bank of Montreal",name:"Bank of Montreal"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank of New Zealand":{name:"Bank of New Zealand",icon:"maki-bank",imageURL:"https://graph.facebook.com/BNZBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806687",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank of New Zealand","brand:wikidata":"Q806687","brand:wikipedia":"en:Bank of New Zealand",name:"Bank of New Zealand"},countryCodes:["nz"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank of Scotland":{name:"Bank of Scotland",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankofscotland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q627381",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank of Scotland","brand:wikidata":"Q627381","brand:wikipedia":"en:Bank of Scotland",name:"Bank of Scotland"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank of the West":{name:"Bank of the West",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/1103424843482058752/wb7kFeSw_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q2881919",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank of the West","brand:wikidata":"Q2881919","brand:wikipedia":"en:Bank of the West",name:"Bank of the West"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bankia":{name:"Bankia",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankia.es/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806807",amenity:"bank"},addTags:{amenity:"bank",brand:"Bankia","brand:wikidata":"Q806807","brand:wikipedia":"en:Bankia",name:"Bankia"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bankinter":{name:"Bankinter",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankinter/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806808",amenity:"bank"},addTags:{amenity:"bank",brand:"Bankinter","brand:wikidata":"Q806808","brand:wikipedia":"es:Bankinter",name:"Bankinter"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Banner Bank":{name:"Banner Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/bannerbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4856910",amenity:"bank"},addTags:{amenity:"bank",brand:"Banner Bank","brand:wikidata":"Q4856910","brand:wikipedia":"en:Banner Bank",name:"Banner Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banorte":{name:"Banorte",icon:"maki-bank",imageURL:"https://graph.facebook.com/banorte/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806914",amenity:"bank"},addTags:{amenity:"bank",brand:"Banorte","brand:wikidata":"Q806914","brand:wikipedia":"en:Banorte",name:"Banorte"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banque Atlantique":{name:"Banque Atlantique",icon:"maki-bank",imageURL:"https://graph.facebook.com/BqAtlantiqueOfficiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2882890",amenity:"bank"},addTags:{amenity:"bank",brand:"Banque Atlantique","brand:wikidata":"Q2882890","brand:wikipedia":"en:Atlantic Bank Group",name:"Banque Atlantique"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Banque Laurentienne":{name:"Banque Laurentienne",icon:"maki-bank",imageURL:"https://graph.facebook.com/BLaurentienne/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1360087",amenity:"bank"},addTags:{amenity:"bank",brand:"Banque Laurentienne","brand:wikidata":"Q1360087","brand:wikipedia":"en:Laurentian Bank of Canada",name:"Banque Laurentienne"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banque Nationale (Canada)":{name:"Banque Nationale (Canada)",icon:"maki-bank",imageURL:"https://graph.facebook.com/banquenationale/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q634298",amenity:"bank"},addTags:{amenity:"bank",brand:"Banque Nationale","brand:wikidata":"Q634298","brand:wikipedia":"en:National Bank of Canada",name:"Banque Nationale"},countryCodes:["ca"],terms:["banque nationale du canada","national bank of canada"],matchScore:2,suggestion:true},"amenity/bank/Banque Populaire":{name:"Banque Populaire",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo-BP-VF%2BS.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2883441",amenity:"bank"},addTags:{amenity:"bank",brand:"Banque Populaire","brand:wikidata":"Q2883441","brand:wikipedia":"en:Banque Populaire du Maroc",name:"Banque Populaire"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Banrisul":{name:"Banrisul",icon:"maki-bank",imageURL:"https://graph.facebook.com/banrisul/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4857098",amenity:"bank"},addTags:{amenity:"bank",brand:"Banrisul","brand:wikidata":"Q4857098","brand:wikipedia":"en:Banrisul",name:"Banrisul"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banrural":{name:"Banrural",icon:"maki-bank",imageURL:"https://graph.facebook.com/grupofinancierobanrural/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5719130",amenity:"bank"},addTags:{amenity:"bank",brand:"Banrural","brand:wikidata":"Q5719130","brand:wikipedia":"es:Banrural",name:"Banrural"},countryCodes:["gt","hn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Barclays":{name:"Barclays",icon:"maki-bank",imageURL:"https://graph.facebook.com/BarclaysUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q245343",amenity:"bank"},addTags:{amenity:"bank",brand:"Barclays","brand:wikidata":"Q245343","brand:wikipedia":"en:Barclays",name:"Barclays"},terms:["barclays bank"],matchScore:2,suggestion:true},"amenity/bank/Belfius":{name:"Belfius",icon:"maki-bank",imageURL:"https://graph.facebook.com/belfius/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1956014",amenity:"bank"},addTags:{amenity:"bank",brand:"Belfius","brand:wikidata":"Q1956014","brand:wikipedia":"en:Belfius",name:"Belfius"},countryCodes:["be"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bendigo Bank":{name:"Bendigo Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/BendigoBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4887077",amenity:"bank"},addTags:{amenity:"bank",brand:"Bendigo Bank","brand:wikidata":"Q4887077","brand:wikipedia":"en:Bendigo and Adelaide Bank",name:"Bendigo Bank"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Berliner Volksbank":{name:"Berliner Volksbank",icon:"maki-bank",imageURL:"https://graph.facebook.com/BerlinerVolksbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q821855",amenity:"bank"},addTags:{amenity:"bank",brand:"Berliner Volksbank","brand:wikidata":"Q821855","brand:wikipedia":"de:Berliner Volksbank",name:"Berliner Volksbank"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bicentenario":{name:"Bicentenario",icon:"maki-bank",imageURL:"https://graph.facebook.com/BicentenarioBU/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5728123",amenity:"bank"},addTags:{amenity:"bank",brand:"Bicentenario","brand:wikidata":"Q5728123","brand:wikipedia":"es:Bicentenario Banco Universal",name:"Bicentenario"},countryCodes:["ve"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bicici":{name:"Bicici",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q1667302",amenity:"bank"},addTags:{amenity:"bank",brand:"Bicici","brand:wikidata":"Q1667302","brand:wikipedia":"fr:Banque internationale pour le commerce et l'industrie de la Côte d'Ivoire",name:"Bicici"},countryCodes:["ci"],terms:["agence bicici"],matchScore:2,suggestion:true},"amenity/bank/Bradesco":{name:"Bradesco",icon:"maki-bank",imageURL:"https://graph.facebook.com/bradesco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806181",amenity:"bank"},addTags:{amenity:"bank",brand:"Bradesco","brand:wikidata":"Q806181","brand:wikipedia":"en:Banco Bradesco",name:"Bradesco"},countryCodes:["br"],terms:["banco bradesco"],matchScore:2,suggestion:true},"amenity/bank/Budapest Bank":{name:"Budapest Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/budapestbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q27493463",amenity:"bank"},addTags:{amenity:"bank",brand:"Budapest Bank","brand:wikidata":"Q27493463","brand:wikipedia":"en:Budapest Bank",name:"Budapest Bank"},countryCodes:["hu"],terms:[],matchScore:2,suggestion:true},"amenity/bank/CBAO":{name:"CBAO",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q532104",amenity:"bank"},addTags:{amenity:"bank",brand:"CBAO","brand:wikidata":"Q532104","brand:wikipedia":"fr:CBAO Groupe Attijariwafa bank",name:"CBAO"},terms:[],matchScore:2,suggestion:true},"amenity/bank/CEC Bank":{name:"CEC Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q1023306",amenity:"bank"},addTags:{amenity:"bank",brand:"CEC Bank","brand:wikidata":"Q1023306","brand:wikipedia":"en:CEC Bank",name:"CEC Bank"},countryCodes:["ro"],terms:[],matchScore:2,suggestion:true},"amenity/bank/CIB Bank":{name:"CIB Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/with.cib.hu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q839566",amenity:"bank"},addTags:{amenity:"bank",brand:"CIB Bank","brand:wikidata":"Q839566","brand:wikipedia":"en:CIB Bank",name:"CIB Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/CIBC":{name:"CIBC",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q666694",amenity:"bank"},addTags:{amenity:"bank",brand:"CIBC","brand:wikidata":"Q666694","brand:wikipedia":"en:Canadian Imperial Bank of Commerce",name:"CIBC"},countryCodes:["ca"],terms:["cibc banking centre"],matchScore:2,suggestion:true},"amenity/bank/CIC":{name:"CIC",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCICBanqueLogo.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q746525",amenity:"bank"},addTags:{amenity:"bank",brand:"CIC","brand:wikidata":"Q746525","brand:wikipedia":"en:Crédit Industriel et Commercial",name:"CIC"},terms:[],matchScore:2,suggestion:true},"amenity/bank/CIH Bank":{name:"CIH Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3006220",amenity:"bank"},addTags:{amenity:"bank",brand:"CIH Bank","brand:wikidata":"Q3006220","brand:wikipedia":"en:CIH Bank",name:"CIH Bank"},countryCodes:["ma"],terms:[],matchScore:2,suggestion:true},"amenity/bank/CIMB Bank":{name:"CIMB Bank",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCIMB%20Group%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3045976",amenity:"bank"},addTags:{amenity:"bank",brand:"CIMB Bank","brand:wikidata":"Q3045976","brand:wikipedia":"en:CIMB",name:"CIMB Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/CIMB Niaga":{name:"CIMB Niaga",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCIMB%20Niaga%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5011747",amenity:"bank"},addTags:{amenity:"bank",brand:"CIMB Niaga","brand:wikidata":"Q5011747","brand:wikipedia":"en:CIMB Niaga",name:"CIMB Niaga"},countryCodes:["id"],terms:[],matchScore:2,suggestion:true},"amenity/bank/CNEP":{name:"CNEP",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q2931752",amenity:"bank"},addTags:{amenity:"bank",brand:"CNEP","brand:wikidata":"Q2931752","brand:wikipedia":"fr:CNEP-Banque",name:"CNEP"},countryCodes:["dz"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Caisse Desjardins":{name:"Caisse Desjardins",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FDesjardins%20Group%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2933350",amenity:"bank"},addTags:{amenity:"bank",brand:"Caisse Desjardins","brand:wikidata":"Q2933350","brand:wikipedia":"en:Desjardins Group",name:"Caisse Desjardins"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Caisse d'Épargne":{name:"Caisse d'Épargne",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/963786966771863554/TO9mBEU1_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1547738",amenity:"bank"},addTags:{amenity:"bank",brand:"Caisse d'Épargne","brand:wikidata":"Q1547738","brand:wikipedia":"en:Groupe Caisse d'Épargne",name:"Caisse d'Épargne"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Caixa Econômica Federal (Brazil)":{name:"Caixa Econômica Federal (Brazil)",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCaixa%20Econ%C3%B4mica%20Federal.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q835283",amenity:"bank"},addTags:{amenity:"bank",brand:"Caixa Econômica Federal","brand:wikidata":"Q835283","brand:wikipedia":"pt:Caixa Econômica Federal",name:"Caixa Econômica Federal"},countryCodes:["br"],terms:["caixa","caixabank"],matchScore:2,suggestion:true},"amenity/bank/Caixa Geral de Depósitos":{name:"Caixa Geral de Depósitos",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCaixa%20Geral%20de%20Dep%C3%B3sitos%20logo.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1026044",amenity:"bank"},addTags:{amenity:"bank",brand:"Caixa Geral de Depósitos","brand:wikidata":"Q1026044","brand:wikipedia":"pt:Caixa Geral de Depósitos",name:"Caixa Geral de Depósitos"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Caixabank (Spain)":{name:"Caixabank (Spain)",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20CaixaBank.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q847225",amenity:"bank"},addTags:{amenity:"bank",brand:"Caixabank","brand:wikidata":"Q847225","brand:wikipedia":"en:CaixaBank",name:"Caixabank"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Caja Duero":{name:"Caja Duero",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3821055",amenity:"bank"},addTags:{amenity:"bank",brand:"Caja Duero","brand:wikidata":"Q3821055","brand:wikipedia":"es:Caja Duero",name:"Caja Duero"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Caja España":{name:"Caja España",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q966985",amenity:"bank"},addTags:{amenity:"bank",brand:"Caja España","brand:wikidata":"Q966985","brand:wikipedia":"es:Caja España",name:"Caja España"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Caja Rural":{name:"Caja Rural",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3649971",amenity:"bank"},addTags:{amenity:"bank",brand:"Caja Rural","brand:wikidata":"Q3649971","brand:wikipedia":"es:Caja Rural",name:"Caja Rural"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Caja Rural de Jaén":{name:"Caja Rural de Jaén",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q18720350",amenity:"bank"},addTags:{amenity:"bank",brand:"Caja Rural de Jaén","brand:wikidata":"Q18720350","brand:wikipedia":"es:Caja Rural de Jaén",name:"Caja Rural de Jaén"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/CajaSur":{name:"CajaSur",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3751637",amenity:"bank"},addTags:{amenity:"bank",brand:"CajaSur","brand:wikidata":"Q3751637","brand:wikipedia":"en:CajaSur",name:"CajaSur"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Cajamar":{name:"Cajamar",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q8254971",amenity:"bank"},addTags:{amenity:"bank",brand:"Cajamar","brand:wikidata":"Q8254971","brand:wikipedia":"es:Cajamar",name:"Cajamar"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Canara Bank":{name:"Canara Bank",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCanara%20Bank%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2003777",amenity:"bank"},addTags:{amenity:"bank",brand:"Canara Bank","brand:wikidata":"Q2003777","brand:wikipedia":"en:Canara Bank",name:"Canara Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Capital Bank":{name:"Capital Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5035481",amenity:"bank"},addTags:{amenity:"bank",brand:"Capital Bank","brand:wikidata":"Q5035481","brand:wikipedia":"en:Capital Bank Financial",name:"Capital Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Capital One":{name:"Capital One",icon:"maki-bank",imageURL:"https://graph.facebook.com/capitalone/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1034654",amenity:"bank"},addTags:{amenity:"bank",brand:"Capital One","brand:wikidata":"Q1034654","brand:wikipedia":"en:Capital One",name:"Capital One"},countryCodes:["us"],terms:["capital one bank"],matchScore:2,suggestion:true},"amenity/bank/Carige":{name:"Carige",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3633695",amenity:"bank"},addTags:{amenity:"bank",brand:"Carige","brand:wikidata":"Q3633695","brand:wikipedia":"en:Banca Carige",name:"Carige"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Cariparma":{name:"Cariparma",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q2938832",amenity:"bank"},addTags:{amenity:"bank",brand:"Cariparma","brand:wikidata":"Q2938832","brand:wikipedia":"en:Crédit Agricole Italia",name:"Cariparma"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Carisbo":{name:"Carisbo",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3661937",amenity:"bank"},addTags:{amenity:"bank",brand:"Carisbo","brand:wikidata":"Q3661937","brand:wikipedia":"en:Cassa di Risparmio in Bologna",name:"Carisbo"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Cassa di Risparmio del Veneto":{name:"Cassa di Risparmio del Veneto",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3661909",amenity:"bank"},addTags:{amenity:"bank",brand:"Cassa di Risparmio del Veneto","brand:wikidata":"Q3661909","brand:wikipedia":"en:Cassa di Risparmio del Veneto",name:"Cassa di Risparmio del Veneto"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/CatalunyaCaixa":{name:"CatalunyaCaixa",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20cx%20original.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3750952",amenity:"bank"},addTags:{amenity:"bank",brand:"CatalunyaCaixa","brand:wikidata":"Q3750952","brand:wikipedia":"en:CatalunyaCaixa",name:"CatalunyaCaixa"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Cathay Bank":{name:"Cathay Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q4189507",amenity:"bank"},addTags:{amenity:"bank",brand:"Cathay Bank","brand:wikidata":"Q4189507","brand:wikipedia":"en:Cathay Bank",name:"Cathay Bank"},countryCodes:["cn","tw","us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Central Bank of India":{name:"Central Bank of India",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q2007090",amenity:"bank"},addTags:{amenity:"bank",brand:"Central Bank of India","brand:wikidata":"Q2007090","brand:wikipedia":"en:Central Bank of India",name:"Central Bank of India"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Chase":{name:"Chase",icon:"maki-bank",imageURL:"https://graph.facebook.com/chase/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q524629",amenity:"bank"},addTags:{amenity:"bank",brand:"Chase","brand:wikidata":"Q524629","brand:wikipedia":"en:Chase Bank",name:"Chase"},terms:["chase bank"],matchScore:2,suggestion:true},"amenity/bank/China Bank":{name:"China Bank",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FChina%20Bank%20logo%20wiki.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5100080",amenity:"bank"},addTags:{amenity:"bank",brand:"China Bank","brand:wikidata":"Q5100080","brand:wikipedia":"en:Chinabank",name:"China Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/China Bank Savings":{name:"China Bank Savings",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q18387359",amenity:"bank"},addTags:{amenity:"bank",brand:"China Bank Savings","brand:wikidata":"Q18387359","brand:wikipedia":"en:China Bank Savings",name:"China Bank Savings"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/bank/China Construction Bank":{name:"China Construction Bank",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FChina%20Construction%20Bank%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q26299",amenity:"bank"},addTags:{amenity:"bank",brand:"China Construction Bank","brand:wikidata":"Q26299","brand:wikipedia":"en:China Construction Bank",name:"China Construction Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Citibank":{name:"Citibank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/926109116233166848/xR88n-q7_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q857063",amenity:"bank"},addTags:{amenity:"bank",brand:"Citibank","brand:wikidata":"Q857063","brand:wikipedia":"en:Citibank",name:"Citibank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Citizens Bank":{name:"Citizens Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q25209674",amenity:"bank"},addTags:{amenity:"bank",brand:"Citizens Bank","brand:wikidata":"Q25209674","brand:wikipedia":"en:Citizens Bank (South Bend, Indiana)",name:"Citizens Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/City National Bank (California)":{name:"City National Bank (California)",icon:"maki-bank",imageURL:"https://graph.facebook.com/CityNationalBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5123314",amenity:"bank"},addTags:{amenity:"bank",brand:"City National Bank","brand:wikidata":"Q5123314","brand:wikipedia":"en:City National Bank (California)",name:"City National Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/City National Bank (Florida)":{name:"City National Bank (Florida)",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q16958644",amenity:"bank"},addTags:{amenity:"bank",brand:"City National Bank","brand:wikidata":"Q16958644","brand:wikipedia":"en:City National Bank (Florida)",name:"City National Bank",official_name:"City National Bank of Florida"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Clydesdale Bank":{name:"Clydesdale Bank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/875682015106007042/Ogpdl-Lh_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q971680",amenity:"bank"},addTags:{amenity:"bank",brand:"Clydesdale Bank","brand:wikidata":"Q971680","brand:wikipedia":"en:Clydesdale Bank",name:"Clydesdale Bank"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Columbia Bank (New Jersey)":{name:"Columbia Bank (New Jersey)",icon:"maki-bank",imageURL:"https://graph.facebook.com/columbiabank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62084096",amenity:"bank"},addTags:{amenity:"bank",brand:"Columbia Bank","brand:wikidata":"Q62084096",name:"Columbia Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Columbia Bank (Washington)":{name:"Columbia Bank (Washington)",icon:"maki-bank",imageURL:"https://graph.facebook.com/columbiastatebank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62084089",amenity:"bank"},addTags:{amenity:"bank",brand:"Columbia Bank","brand:wikidata":"Q62084089",name:"Columbia Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Comerica Bank":{name:"Comerica Bank",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FComerica%20Inc.%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1114148",amenity:"bank"},addTags:{amenity:"bank",brand:"Comerica Bank","brand:wikidata":"Q1114148","brand:wikipedia":"en:Comerica",name:"Comerica Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Commercial Bank of Ceylon PLC":{name:"Commercial Bank of Ceylon PLC",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5152468",amenity:"bank"},addTags:{amenity:"bank",brand:"Commercial Bank of Ceylon PLC","brand:wikidata":"Q5152468","brand:wikipedia":"en:Commercial Bank of Ceylon",name:"Commercial Bank of Ceylon PLC"},countryCodes:["lk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Commerzbank":{name:"Commerzbank",icon:"maki-bank",imageURL:"https://graph.facebook.com/commerzbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q157617",amenity:"bank"},addTags:{amenity:"bank",brand:"Commerzbank","brand:wikidata":"Q157617","brand:wikipedia":"en:Commerzbank",name:"Commerzbank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Commonwealth Bank":{name:"Commonwealth Bank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/706619944633389058/8ohO3e8b_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q285328",amenity:"bank"},addTags:{amenity:"bank",brand:"Commonwealth Bank","brand:wikidata":"Q285328","brand:wikipedia":"en:Commonwealth Bank",name:"Commonwealth Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Community Bank":{name:"Community Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/communitybankna/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5154635",amenity:"bank"},addTags:{amenity:"bank",brand:"Community Bank","brand:wikidata":"Q5154635","brand:wikipedia":"en:Community Bank, N.A.",name:"Community Bank"},countryCodes:["de","us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Corporation Bank":{name:"Corporation Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q2003387",amenity:"bank"},addTags:{amenity:"bank",brand:"Corporation Bank","brand:wikidata":"Q2003387","brand:wikipedia":"en:Corporation Bank",name:"Corporation Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Credem":{name:"Credem",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3696881",amenity:"bank"},addTags:{amenity:"bank",brand:"Credem","brand:wikidata":"Q3696881","brand:wikipedia":"en:Credito Emiliano",name:"Credem"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Credicoop":{name:"Credicoop",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo-banco-Credicoop.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4854086",amenity:"bank"},addTags:{amenity:"bank",brand:"Credicoop","brand:wikidata":"Q4854086","brand:wikipedia":"en:Banco Credicoop",name:"Credicoop"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Credit Suisse":{name:"Credit Suisse",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCredit%20Suisse%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q372657",amenity:"bank"},addTags:{amenity:"bank",brand:"Credit Suisse","brand:wikidata":"Q372657","brand:wikipedia":"en:Credit Suisse",name:"Credit Suisse"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Credito Valtellinese":{name:"Credito Valtellinese",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3696888",amenity:"bank"},addTags:{amenity:"bank",brand:"Credito Valtellinese","brand:wikidata":"Q3696888","brand:wikipedia":"en:Credito Valtellinese",name:"Credito Valtellinese"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Crelan":{name:"Crelan",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q389872",amenity:"bank"},addTags:{amenity:"bank",brand:"Crelan","brand:wikidata":"Q389872","brand:wikipedia":"en:Crelan",name:"Crelan"},countryCodes:["be"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Crédit Agricole":{name:"Crédit Agricole",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/1059770497590878208/qL4i_SGK_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q590952",amenity:"bank"},addTags:{amenity:"bank",brand:"Crédit Agricole","brand:wikidata":"Q590952","brand:wikipedia":"fr:Crédit agricole",name:"Crédit Agricole"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Crédit Maritime":{name:"Crédit Maritime",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q17176866",amenity:"bank"},addTags:{amenity:"bank",brand:"Crédit Maritime","brand:wikidata":"Q17176866","brand:wikipedia":"fr:Crédit maritime",name:"Crédit Maritime"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Crédit Mutuel":{name:"Crédit Mutuel",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Cr%C3%A9dit%20Mutuel.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q642627",amenity:"bank"},addTags:{amenity:"bank",brand:"Crédit Mutuel","brand:wikidata":"Q642627","brand:wikipedia":"en:Crédit Mutuel",name:"Crédit Mutuel"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Crédit Mutuel de Bretagne":{name:"Crédit Mutuel de Bretagne",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/668742184938643456/ZHoL5MoD_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q3006236",amenity:"bank"},addTags:{amenity:"bank",brand:"Crédit Mutuel de Bretagne","brand:wikidata":"Q3006236","brand:wikipedia":"fr:Crédit mutuel Arkéa",name:"Crédit Mutuel de Bretagne"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Crédit du Nord":{name:"Crédit du Nord",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3006209",amenity:"bank"},addTags:{amenity:"bank",brand:"Crédit du Nord","brand:wikidata":"Q3006209","brand:wikipedia":"en:Crédit du Nord",name:"Crédit du Nord"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Crédito Agrícola":{name:"Crédito Agrícola",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q10262017",amenity:"bank"},addTags:{amenity:"bank",brand:"Crédito Agrícola","brand:wikidata":"Q10262017","brand:wikipedia":"pt:Crédito Agrícola",name:"Crédito Agrícola"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Cбербанк":{name:"Cбербанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/sberbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q205012",amenity:"bank"},addTags:{amenity:"bank",brand:"Cбербанк","brand:wikidata":"Q205012","brand:wikipedia":"en:Sberbank of Russia",name:"Cбербанк"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Danske Bank":{name:"Danske Bank",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FDanske%20Bank%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1636974",amenity:"bank"},addTags:{amenity:"bank",brand:"Danske Bank","brand:wikidata":"Q1636974","brand:wikipedia":"en:Danske Bank",name:"Danske Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Davivienda":{name:"Davivienda",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5242054",amenity:"bank"},addTags:{amenity:"bank",brand:"Davivienda","brand:wikidata":"Q5242054","brand:wikipedia":"en:Davivienda",name:"Davivienda"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Denizbank":{name:"Denizbank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/794192531588321280/OybdjoEC_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1115064",amenity:"bank"},addTags:{amenity:"bank",brand:"Denizbank","brand:wikidata":"Q1115064","brand:wikipedia":"en:DenizBank",name:"Denizbank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Desjardins":{name:"Desjardins",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FDesjardins%20Group%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2933350",amenity:"bank"},addTags:{amenity:"bank",brand:"Desjardins","brand:wikidata":"Q2933350","brand:wikipedia":"en:Desjardins Group",name:"Desjardins"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Deutsche Bank":{name:"Deutsche Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/DeutscheBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66048",amenity:"bank"},addTags:{amenity:"bank",brand:"Deutsche Bank","brand:wikidata":"Q66048","brand:wikipedia":"en:Deutsche Bank",name:"Deutsche Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Dubai Islamic Bank":{name:"Dubai Islamic Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5310570",amenity:"bank"},addTags:{amenity:"bank",brand:"Dubai Islamic Bank","brand:wikidata":"Q5310570","brand:wikipedia":"en:Dubai Islamic Bank",name:"Dubai Islamic Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/EastWest Bank":{name:"EastWest Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5327595",amenity:"bank"},addTags:{amenity:"bank",brand:"EastWest Bank","brand:wikidata":"Q5327595","brand:wikipedia":"en:EastWest Bank",name:"EastWest Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/EastWest Unibank":{name:"EastWest Unibank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5327595",amenity:"bank"},addTags:{amenity:"bank",brand:"EastWest Unibank","brand:wikidata":"Q5327595","brand:wikipedia":"en:EastWest Bank",name:"EastWest Unibank"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Ecobank":{name:"Ecobank",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FEcobank%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q930225",amenity:"bank"},addTags:{amenity:"bank",brand:"Ecobank","brand:wikidata":"Q930225","brand:wikipedia":"en:Ecobank",name:"Ecobank"},terms:["agence ecobank"],matchScore:2,suggestion:true},"amenity/bank/Emigrant Savings Bank":{name:"Emigrant Savings Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5371104",amenity:"bank"},addTags:{amenity:"bank",brand:"Emigrant Savings Bank","brand:wikidata":"Q5371104","brand:wikipedia":"en:Emigrant Savings Bank",name:"Emigrant Savings Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Emirates NBD":{name:"Emirates NBD",icon:"maki-bank",imageURL:"https://graph.facebook.com/EmiratesNBD/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5372575",amenity:"bank"},addTags:{amenity:"bank",brand:"Emirates NBD","brand:wikidata":"Q5372575","brand:wikipedia":"en:Emirates NBD",name:"Emirates NBD"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Equity Bank (Congo)":{name:"Equity Bank (Congo)",icon:"maki-bank",imageURL:"https://graph.facebook.com/www.equitybank.cd/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21178738",amenity:"bank"},addTags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q21178738","brand:wikipedia":"en:Equity Bank Congo",name:"Equity Bank"},countryCodes:["cd"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Equity Bank (Kenya)":{name:"Equity Bank (Kenya)",icon:"maki-bank",imageURL:"https://graph.facebook.com/KeEquityBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5384664",amenity:"bank"},addTags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q5384664","brand:wikipedia":"en:Equity Bank Kenya Limited",name:"Equity Bank"},countryCodes:["ke"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Equity Bank (Rwanda)":{name:"Equity Bank (Rwanda)",icon:"maki-bank",imageURL:"https://graph.facebook.com/RwEquityBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5384665",amenity:"bank"},addTags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q5384665","brand:wikipedia":"en:Equity Bank Rwanda Limited",name:"Equity Bank"},countryCodes:["rw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Equity Bank (South Sudan)":{name:"Equity Bank (South Sudan)",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5384666",amenity:"bank"},addTags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q5384666","brand:wikipedia":"en:Equity Bank South Sudan Limited",name:"Equity Bank"},countryCodes:["ss"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Equity Bank (Tanzania)":{name:"Equity Bank (Tanzania)",icon:"maki-bank",imageURL:"https://graph.facebook.com/TzEquityBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5384667",amenity:"bank"},addTags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q5384667","brand:wikipedia":"en:Equity Bank Tanzania Limited",name:"Equity Bank"},countryCodes:["tz"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Equity Bank (USA)":{name:"Equity Bank (USA)",icon:"maki-bank",imageURL:"https://graph.facebook.com/equitybankusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62260414",amenity:"bank"},addTags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q62260414",name:"Equity Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Equity Bank (Uganda)":{name:"Equity Bank (Uganda)",icon:"maki-bank",imageURL:"https://graph.facebook.com/UgEquityBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5384668",amenity:"bank"},addTags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q5384668","brand:wikipedia":"en:Equity Bank Uganda Limited",name:"Equity Bank"},countryCodes:["ug"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Erste Bank":{name:"Erste Bank",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FErste%20Bank%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q696867",amenity:"bank"},addTags:{amenity:"bank",brand:"Erste Bank","brand:wikidata":"Q696867","brand:wikipedia":"de:Erste Bank",name:"Erste Bank"},countryCodes:["at","hr","hu"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Eurobank (Greece)":{name:"Eurobank (Greece)",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/928963286518910976/KZD7wKh9_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q951850",amenity:"bank"},addTags:{amenity:"bank",brand:"Eurobank","brand:wikidata":"Q951850","brand:wikipedia":"el:Eurobank",name:"Eurobank"},countryCodes:["gr"],terms:["eurobank ergasias"],matchScore:2,suggestion:true},"amenity/bank/Eurobank (Poland)":{name:"Eurobank (Poland)",icon:"maki-bank",imageURL:"https://graph.facebook.com/eurobanksa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9256201",amenity:"bank"},addTags:{amenity:"bank",brand:"Eurobank","brand:wikidata":"Q9256201","brand:wikipedia":"pl:Euro Bank",name:"Eurobank"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Eurobank (Serbia)":{name:"Eurobank (Serbia)",icon:"maki-bank",imageURL:"https://graph.facebook.com/EurobankSrbija/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5411684",amenity:"bank"},addTags:{amenity:"bank",brand:"Eurobank","brand:wikidata":"Q5411684","brand:wikipedia":"sr:Eurobanka",name:"Eurobank"},countryCodes:["rs"],terms:[],matchScore:2,suggestion:true},"amenity/bank/FNB":{name:"FNB",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3072956",amenity:"bank"},addTags:{amenity:"bank",brand:"FNB","brand:wikidata":"Q3072956","brand:wikipedia":"en:First National Bank (South Africa)",name:"FNB",official_name:"First National Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Faysal Bank":{name:"Faysal Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5439099",amenity:"bank"},addTags:{amenity:"bank",brand:"Faysal Bank","brand:wikidata":"Q5439099","brand:wikipedia":"en:Faysal Bank",name:"Faysal Bank"},countryCodes:["pk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Federal Bank":{name:"Federal Bank",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FFederal%20Bank.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2044983",amenity:"bank"},addTags:{amenity:"bank",brand:"Federal Bank","brand:wikidata":"Q2044983","brand:wikipedia":"en:Federal Bank",name:"Federal Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Fidelity Bank (Ghana)":{name:"Fidelity Bank (Ghana)",icon:"maki-bank",imageURL:"https://graph.facebook.com/fidelitybankgh/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5446778",amenity:"bank"},addTags:{amenity:"bank",brand:"Fidelity Bank","brand:wikidata":"Q5446778","brand:wikipedia":"en:Fidelity Bank Ghana",name:"Fidelity Bank"},countryCodes:["gh"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Fidelity Bank (Nigeria)":{name:"Fidelity Bank (Nigeria)",icon:"maki-bank",imageURL:"https://graph.facebook.com/FidelityBankplc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5446777",amenity:"bank"},addTags:{amenity:"bank",brand:"Fidelity Bank","brand:wikidata":"Q5446777","brand:wikipedia":"en:Fidelity Bank Nigeria",name:"Fidelity Bank"},countryCodes:["ng"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Fidelity Bank (USA)":{name:"Fidelity Bank (USA)",icon:"maki-bank",imageURL:"https://graph.facebook.com/fidelityinvestments/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1411292",amenity:"bank"},addTags:{amenity:"bank",brand:"Fidelity Bank","brand:wikidata":"Q1411292","brand:wikipedia":"en:Fidelity Investments",name:"Fidelity Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Fifth Third Bank":{name:"Fifth Third Bank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/1013779792141914120/FJ0U_8zw_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1411810",amenity:"bank"},addTags:{amenity:"bank",brand:"Fifth Third Bank","brand:wikidata":"Q1411810","brand:wikipedia":"en:Fifth Third Bank",name:"Fifth Third Bank",short_name:"5/3 Bank"},countryCodes:["us"],terms:["5/3","5/3 bank"],matchScore:2,suggestion:true},"amenity/bank/Finansbank":{name:"Finansbank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q1416237",amenity:"bank"},addTags:{amenity:"bank",brand:"Finansbank","brand:wikidata":"Q1416237","brand:wikipedia":"en:Finansbank",name:"Finansbank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/First Bank (Western USA)":{name:"First Bank (Western USA)",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5452217",amenity:"bank"},addTags:{amenity:"bank",brand:"First Bank","brand:wikidata":"Q5452217","brand:wikipedia":"en:FirstBank Holding Co",name:"First Bank",short_name:"1STBank"},countryCodes:["us"],terms:["1stbank"],matchScore:2,suggestion:true},"amenity/bank/First Citizens Bank":{name:"First Citizens Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5452734",amenity:"bank"},addTags:{amenity:"bank",brand:"First Citizens Bank","brand:wikidata":"Q5452734","brand:wikipedia":"en:First Citizens Bank (Trinidad and Tobago)",name:"First Citizens Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/First Financial Bank":{name:"First Financial Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/FirstFinancialBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5453009",amenity:"bank"},addTags:{amenity:"bank",brand:"First Financial Bank","brand:wikidata":"Q5453009","brand:wikipedia":"en:First Financial Bank (Ohio)",name:"First Financial Bank"},countryCodes:["us"],terms:["1st financial bank"],matchScore:2,suggestion:true},"amenity/bank/First Midwest Bank":{name:"First Midwest Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5453331",amenity:"bank"},addTags:{amenity:"bank",brand:"First Midwest Bank","brand:wikidata":"Q5453331","brand:wikipedia":"en:First Midwest Bank",name:"First Midwest Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/First National Bank":{name:"First National Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5426765",amenity:"bank"},addTags:{amenity:"bank",brand:"First National Bank","brand:wikidata":"Q5426765","brand:wikipedia":"en:F.N.B. Corporation",name:"First National Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Frost Bank":{name:"Frost Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5506152",amenity:"bank"},addTags:{amenity:"bank",brand:"Frost Bank","brand:wikidata":"Q5506152","brand:wikipedia":"en:Frost Bank",name:"Frost Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/GCB Bank":{name:"GCB Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q1521346",amenity:"bank"},addTags:{amenity:"bank",brand:"GCB Bank","brand:wikidata":"Q1521346","brand:wikipedia":"en:GCB Bank",name:"GCB Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Galicia":{name:"Galicia",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBanco%20galicia%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5717952",amenity:"bank"},addTags:{amenity:"bank",brand:"Galicia","brand:wikidata":"Q5717952","brand:wikipedia":"es:Banco Galicia",name:"Galicia"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Garanti":{name:"Garanti",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q322962",amenity:"bank"},addTags:{amenity:"bank",brand:"Garanti","brand:wikidata":"Q322962","brand:wikipedia":"en:Garanti Bank",name:"Garanti"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Garanti Bankası":{name:"Garanti Bankası",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q322962",amenity:"bank"},addTags:{amenity:"bank",brand:"Garanti Bankası","brand:wikidata":"Q322962","brand:wikipedia":"en:Garanti Bank",name:"Garanti Bankası"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Getin Bank":{name:"Getin Bank",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FGetin%20Bank%20Logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q9267646",amenity:"bank"},addTags:{amenity:"bank",brand:"Getin Bank","brand:wikidata":"Q9267646","brand:wikipedia":"pl:Getin Bank",name:"Getin Bank"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Great Western Bank":{name:"Great Western Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5600185",amenity:"bank"},addTags:{amenity:"bank",brand:"Great Western Bank","brand:wikidata":"Q5600185","brand:wikipedia":"en:Great Western Bank (1907–present)",name:"Great Western Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Groupama":{name:"Groupama",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3083531",amenity:"bank"},addTags:{amenity:"bank",brand:"Groupama","brand:wikidata":"Q3083531","brand:wikipedia":"en:Groupama",name:"Groupama"},terms:[],matchScore:2,suggestion:true},"amenity/bank/HBL Bank":{name:"HBL Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q1566843",amenity:"bank"},addTags:{amenity:"bank",brand:"HBL Bank","brand:wikidata":"Q1566843","brand:wikipedia":"ur:ایچ بی ایل پاکستان",name:"HBL Bank"},countryCodes:["pk"],terms:["hbl"],matchScore:2,suggestion:true},"amenity/bank/HDFC Bank":{name:"HDFC Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/HDFC.bank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q631047",amenity:"bank"},addTags:{amenity:"bank",brand:"HDFC Bank","brand:wikidata":"Q631047","brand:wikipedia":"en:HDFC Bank",name:"HDFC Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/HNB":{name:"HNB",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3532080",amenity:"bank"},addTags:{amenity:"bank",brand:"HNB","brand:wikidata":"Q3532080","brand:wikipedia":"en:Hatton National Bank",name:"HNB"},terms:[],matchScore:2,suggestion:true},"amenity/bank/HSBC":{name:"HSBC",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/1029690966758895616/3T9gt_mL_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q190464",amenity:"bank"},addTags:{amenity:"bank",brand:"HSBC","brand:wikidata":"Q190464","brand:wikipedia":"en:HSBC",name:"HSBC"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Halifax":{name:"Halifax",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3310164",amenity:"bank"},addTags:{amenity:"bank",brand:"Halifax","brand:wikidata":"Q3310164","brand:wikipedia":"en:Halifax (bank)",name:"Halifax"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Halkbank":{name:"Halkbank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3593818",amenity:"bank"},addTags:{amenity:"bank",brand:"Halkbank","brand:wikidata":"Q3593818","brand:wikipedia":"en:Halkbank a.d.",name:"Halkbank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Handelsbanken":{name:"Handelsbanken",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FHandelsbanken.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1421630",amenity:"bank"},addTags:{amenity:"bank",brand:"Handelsbanken","brand:wikidata":"Q1421630","brand:wikipedia":"en:Handelsbanken",name:"Handelsbanken"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Heritage Bank":{name:"Heritage Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5738690",amenity:"bank"},addTags:{amenity:"bank",brand:"Heritage Bank","brand:wikidata":"Q5738690","brand:wikipedia":"en:Heritage Bank",name:"Heritage Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Hong Leong Bank":{name:"Hong Leong Bank",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FHong%20Leong%20Bank.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4383943",amenity:"bank"},addTags:{amenity:"bank",brand:"Hong Leong Bank","brand:wikidata":"Q4383943","brand:wikipedia":"en:Hong Leong Bank",name:"Hong Leong Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Hrvatska poštanska banka":{name:"Hrvatska poštanska banka",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5923981",amenity:"bank"},addTags:{amenity:"bank",brand:"Hrvatska poštanska banka","brand:wikidata":"Q5923981","brand:wikipedia":"en:Hrvatska poštanska banka",name:"Hrvatska poštanska banka"},countryCodes:["hr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Huntington Bank":{name:"Huntington Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q798819",amenity:"bank"},addTags:{amenity:"bank",brand:"Huntington Bank","brand:wikidata":"Q798819","brand:wikipedia":"en:Huntington Bancshares",name:"Huntington Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/HypoVereinsbank":{name:"HypoVereinsbank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/950681154906095618/sFON4jIk_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q220189",amenity:"bank"},addTags:{amenity:"bank",brand:"HypoVereinsbank","brand:wikidata":"Q220189","brand:wikipedia":"en:HypoVereinsbank",name:"HypoVereinsbank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/ICBC":{name:"ICBC",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FICBC%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q26463",amenity:"bank"},addTags:{amenity:"bank",brand:"ICBC","brand:wikidata":"Q26463","brand:wikipedia":"en:Industrial and Commercial Bank of China",name:"ICBC"},terms:[],matchScore:2,suggestion:true},"amenity/bank/ICICI Bank":{name:"ICICI Bank",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FICICI%20Bank%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1653258",amenity:"bank"},addTags:{amenity:"bank",brand:"ICICI Bank","brand:wikidata":"Q1653258","brand:wikipedia":"en:ICICI Bank",name:"ICICI Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/IDBI Bank":{name:"IDBI Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/IDBIBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3633485",amenity:"bank"},addTags:{amenity:"bank",brand:"IDBI Bank","brand:wikidata":"Q3633485","brand:wikipedia":"en:IDBI Bank",name:"IDBI Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ING":{name:"ING",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FING%20Group%20N.V.%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q645708",amenity:"bank"},addTags:{amenity:"bank",brand:"ING","brand:wikidata":"Q645708","brand:wikipedia":"en:ING Group",name:"ING"},terms:["ing bank"],matchScore:2,suggestion:true},"amenity/bank/ING Bank Śląski":{name:"ING Bank Śląski",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FING%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1410383",amenity:"bank"},addTags:{amenity:"bank",brand:"ING Bank Śląski","brand:wikidata":"Q1410383","brand:wikipedia":"pl:ING Bank Śląski",name:"ING Bank Śląski"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Ibercaja":{name:"Ibercaja",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5907815",amenity:"bank"},addTags:{amenity:"bank",brand:"Ibercaja","brand:wikidata":"Q5907815","brand:wikipedia":"es:Ibercaja",name:"Ibercaja"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Indian Bank":{name:"Indian Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q2003789",amenity:"bank"},addTags:{amenity:"bank",brand:"Indian Bank","brand:wikidata":"Q2003789","brand:wikipedia":"en:Indian Bank",name:"Indian Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Indian Overseas Bank":{name:"Indian Overseas Bank",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FIndian%20Overseas%20Bank%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2003611",amenity:"bank"},addTags:{amenity:"bank",brand:"Indian Overseas Bank","brand:wikidata":"Q2003611","brand:wikipedia":"en:Indian Overseas Bank",name:"Indian Overseas Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Interbank":{name:"Interbank",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FInterbank%20Logo.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2835558",amenity:"bank"},addTags:{amenity:"bank",brand:"Interbank","brand:wikidata":"Q2835558","brand:wikipedia":"es:Banco Interbank",name:"Interbank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Intesa Sanpaolo":{name:"Intesa Sanpaolo",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Sanpaolo.gif&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1343118",amenity:"bank"},addTags:{amenity:"bank",brand:"Intesa Sanpaolo","brand:wikidata":"Q1343118","brand:wikipedia":"it:Intesa Sanpaolo",name:"Intesa Sanpaolo"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Itaú (Brazil)":{name:"Itaú (Brazil)",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FItau.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1424293",amenity:"bank"},addTags:{amenity:"bank",brand:"Itaú Unibanco","brand:wikidata":"Q1424293","brand:wikipedia":"pt:Itaú Unibanco",name:"Itaú"},countryCodes:["br"],terms:["banco itau"],matchScore:2,suggestion:true},"amenity/bank/Itaú (Chile)":{name:"Itaú (Chile)",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FItau.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2423252",amenity:"bank"},addTags:{amenity:"bank",brand:"Itaú Corpbanca","brand:wikidata":"Q2423252","brand:wikipedia":"en:Itaú Corpbanca",name:"Itaú"},countryCodes:["cl"],terms:["banco itau"],matchScore:2,suggestion:true},"amenity/bank/JS Bank":{name:"JS Bank",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FJS%20Bank%20-%20New%20logo%202011%20-%20Copy.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q6108986",amenity:"bank"},addTags:{amenity:"bank",brand:"JS Bank","brand:wikidata":"Q6108986","brand:wikipedia":"en:JS Bank",name:"JS Bank"},countryCodes:["pk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Janata Bank Limited জনতা ব্যাংক লিমিটেড":{name:"Janata Bank Limited জনতা ব্যাংক লিমিটেড",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3347028",amenity:"bank"},addTags:{amenity:"bank",brand:"Janata Bank Limited জনতা ব্যাংক লিমিটেড","brand:wikidata":"Q3347028","brand:wikipedia":"en:Janata Bank",name:"Janata Bank Limited জনতা ব্যাংক লিমিটেড"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Jyske Bank":{name:"Jyske Bank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/1062308131567517702/0I4wgGmc_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q136672",amenity:"bank"},addTags:{amenity:"bank",brand:"Jyske Bank","brand:wikidata":"Q136672","brand:wikipedia":"en:Jyske Bank",name:"Jyske Bank"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/K&H Bank":{name:"K&H Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/dontsokosan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6393834",amenity:"bank"},addTags:{amenity:"bank",brand:"K&H Bank","brand:wikidata":"Q6393834","brand:wikipedia":"en:K&H Bank",name:"K&H Bank"},countryCodes:["hu"],terms:[],matchScore:2,suggestion:true},"amenity/bank/KBC":{name:"KBC",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q941020",amenity:"bank"},addTags:{amenity:"bank",brand:"KBC","brand:wikidata":"Q941020","brand:wikipedia":"en:KBC Bank",name:"KBC"},terms:[],matchScore:2,suggestion:true},"amenity/bank/KBZ Bank":{name:"KBZ Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q6360949",amenity:"bank"},addTags:{amenity:"bank",brand:"KBZ Bank","brand:wikidata":"Q6360949","brand:wikipedia":"en:Kanbawza Bank",name:"KBZ Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Karnataka Bank":{name:"Karnataka Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q2042632",amenity:"bank"},addTags:{amenity:"bank",brand:"Karnataka Bank","brand:wikidata":"Q2042632","brand:wikipedia":"en:Karnataka Bank",name:"Karnataka Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Kasa Stefczyka":{name:"Kasa Stefczyka",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q57624461",amenity:"bank"},addTags:{amenity:"bank",brand:"Kasa Stefczyka","brand:wikidata":"Q57624461",name:"Kasa Stefczyka"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/KeyBank":{name:"KeyBank",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FKeyBank.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1740314",amenity:"bank"},addTags:{amenity:"bank",brand:"KeyBank","brand:wikidata":"Q1740314","brand:wikipedia":"en:KeyBank",name:"KeyBank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Komerční banka":{name:"Komerční banka",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FKomer%C4%8Dn%C3%AD%20banka%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1541079",amenity:"bank"},addTags:{amenity:"bank",brand:"Komerční banka","brand:wikidata":"Q1541079","brand:wikipedia":"en:Komerční banka",name:"Komerční banka"},countryCodes:["cz"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Kotak Mahindra Bank":{name:"Kotak Mahindra Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q2040404",amenity:"bank"},addTags:{amenity:"bank",brand:"Kotak Mahindra Bank","brand:wikidata":"Q2040404","brand:wikipedia":"en:Kotak Mahindra Bank",name:"Kotak Mahindra Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Kutxabank":{name:"Kutxabank",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FKutxabank.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5139377",amenity:"bank"},addTags:{amenity:"bank",brand:"Kutxabank","brand:wikidata":"Q5139377","brand:wikipedia":"en:Kutxabank",name:"Kutxabank"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/LCL":{name:"LCL",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/899663758662017024/JLvGAjAM_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q779722",amenity:"bank"},addTags:{amenity:"bank",brand:"LCL","brand:wikidata":"Q779722","brand:wikipedia":"en:Crédit Lyonnais",name:"LCL"},terms:[],matchScore:2,suggestion:true},"amenity/bank/La Banque Postale":{name:"La Banque Postale",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/877443340551282689/fZlNq46c_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3206431",amenity:"bank"},addTags:{amenity:"bank",brand:"La Banque Postale","brand:wikidata":"Q3206431","brand:wikipedia":"en:La Banque postale",name:"La Banque Postale"},terms:[],matchScore:2,suggestion:true},"amenity/bank/La Caixa":{name:"La Caixa",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FFundaci%C3%B3n%20bancaria%20la%20caixa.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q287753",amenity:"bank"},addTags:{amenity:"bank",brand:"La Caixa","brand:wikidata":"Q287753","brand:wikipedia":"en:La Caixa",name:"La Caixa"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Laboral Kutxa":{name:"Laboral Kutxa",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Laboral%20Kutxa.JPG&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q12052386",amenity:"bank"},addTags:{amenity:"bank",brand:"Laboral Kutxa","brand:wikidata":"Q12052386","brand:wikipedia":"en:Laboral Kutxa",name:"Laboral Kutxa"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Landbank":{name:"Landbank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q6483872",amenity:"bank"},addTags:{amenity:"bank",brand:"Landbank","brand:wikidata":"Q6483872","brand:wikipedia":"en:Land Bank of the Philippines",name:"Landbank"},countryCodes:["ph"],terms:["bangko sa lupa ng pilipinas","land bank of the philippines","lbp"],matchScore:2,suggestion:true},"amenity/bank/Leeds Building Society":{name:"Leeds Building Society",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/882560751629742082/qQgEeneD_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q6515848",amenity:"bank"},addTags:{amenity:"bank",brand:"Leeds Building Society","brand:wikidata":"Q6515848","brand:wikipedia":"en:Leeds Building Society",name:"Leeds Building Society"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Liberbank":{name:"Liberbank",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Liberbank.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2891018",amenity:"bank"},addTags:{amenity:"bank",brand:"Liberbank","brand:wikidata":"Q2891018","brand:wikipedia":"en:Liberbank",name:"Liberbank"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Lloyds Bank":{name:"Lloyds Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q1152847",amenity:"bank"},addTags:{amenity:"bank",brand:"Lloyds Bank","brand:wikidata":"Q1152847","brand:wikipedia":"en:Lloyds Bank",name:"Lloyds Bank"},terms:["lloyds","lloyds tsb"],matchScore:2,suggestion:true},"amenity/bank/M&T Bank":{name:"M&T Bank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/1096422949081341953/zTOinsUb_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q3272257",amenity:"bank"},addTags:{amenity:"bank",brand:"M&T Bank","brand:wikidata":"Q3272257","brand:wikipedia":"en:M&T Bank",name:"M&T Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/MCB":{name:"MCB",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q15982510",amenity:"bank"},addTags:{amenity:"bank",brand:"MCB","brand:wikidata":"Q15982510","brand:wikipedia":"ur:ایم سی بی بینک لمیٹڈ",name:"MCB"},terms:["mcb bank"],matchScore:2,suggestion:true},"amenity/bank/MONETA Money Bank":{name:"MONETA Money Bank",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Moneta%20Money%20Bank.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q24282966",amenity:"bank"},addTags:{amenity:"bank",brand:"MONETA Money Bank","brand:wikidata":"Q24282966","brand:wikipedia":"cs:Moneta Money Bank",name:"MONETA Money Bank"},countryCodes:["cz"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Macro":{name:"Macro",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Banco%20Macro.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2335199",amenity:"bank"},addTags:{amenity:"bank",brand:"Macro","brand:wikidata":"Q2335199","brand:wikipedia":"en:Banco Macro",name:"Macro"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Maybank":{name:"Maybank",icon:"maki-bank",imageURL:"https://graph.facebook.com/Maybank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1364018",amenity:"bank"},addTags:{amenity:"bank",brand:"Maybank","brand:wikidata":"Q1364018","brand:wikipedia":"en:Maybank",name:"Maybank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Meezan Bank":{name:"Meezan Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q6807934",amenity:"bank"},addTags:{amenity:"bank",brand:"Meezan Bank","brand:wikidata":"Q6807934","brand:wikipedia":"en:Meezan Bank",name:"Meezan Bank"},countryCodes:["pk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Mercantil":{name:"Mercantil",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q6818004",amenity:"bank"},addTags:{amenity:"bank",brand:"Mercantil","brand:wikidata":"Q6818004","brand:wikipedia":"en:Mercantil Servicios Financieros",name:"Mercantil"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Mibanco":{name:"Mibanco",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5558589",amenity:"bank"},addTags:{amenity:"bank",brand:"Mibanco","brand:wikidata":"Q5558589","brand:wikipedia":"es:MiBanco",name:"Mibanco"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/bank/MidFirst Bank":{name:"MidFirst Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q17081131",amenity:"bank"},addTags:{amenity:"bank",brand:"MidFirst Bank","brand:wikidata":"Q17081131","brand:wikipedia":"en:MidFirst Bank",name:"MidFirst Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Millennium Bank":{name:"Millennium Bank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/684026097688817664/fg1i7QVc_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q4855947",amenity:"bank"},addTags:{amenity:"bank",brand:"Millennium Bank","brand:wikidata":"Q4855947","brand:wikipedia":"pl:Bank Millennium",name:"Millennium Bank"},countryCodes:["pl"],terms:["bank millennium"],matchScore:2,suggestion:true},"amenity/bank/Millennium bcp":{name:"Millennium bcp",icon:"maki-bank",imageURL:"https://graph.facebook.com/MaisMillennium/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q118581",amenity:"bank"},addTags:{amenity:"bank",brand:"Millennium bcp","brand:wikidata":"Q118581","brand:wikipedia":"pt:Banco Comercial Português",name:"Millennium bcp",official_name:"Banco Comercial Português","official_name:en":"Portuguese Commercial Bank","official_name:es":"Banco Comercial Português"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Monte dei Paschi di Siena":{name:"Monte dei Paschi di Siena",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q46730",amenity:"bank"},addTags:{amenity:"bank",brand:"Monte dei Paschi di Siena","brand:wikidata":"Q46730","brand:wikipedia":"en:Banca Monte dei Paschi di Siena",name:"Monte dei Paschi di Siena"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Montepio":{name:"Montepio",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q1946091",amenity:"bank"},addTags:{amenity:"bank",brand:"Montepio","brand:wikidata":"Q1946091","brand:wikipedia":"en:Montepio (bank)",name:"Montepio"},terms:[],matchScore:2,suggestion:true},"amenity/bank/NAB":{name:"NAB",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q1430985",amenity:"bank"},addTags:{amenity:"bank",brand:"NAB","brand:wikidata":"Q1430985","brand:wikipedia":"en:National Australia Bank",name:"NAB"},terms:[],matchScore:2,suggestion:true},"amenity/bank/NSB":{name:"NSB",icon:"maki-bank",imageURL:"https://graph.facebook.com/NSBSLOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12500189",amenity:"bank"},addTags:{amenity:"bank",brand:"NSB","brand:wikidata":"Q12500189","brand:wikipedia":"en:National Savings Bank (Sri Lanka)",name:"NSB"},countryCodes:["lk"],terms:["national savings bank"],matchScore:2,suggestion:true},"amenity/bank/NatWest":{name:"NatWest",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/1130392887198453761/-d8gnvTW_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q2740021",amenity:"bank"},addTags:{amenity:"bank",brand:"NatWest","brand:wikidata":"Q2740021","brand:wikipedia":"en:NatWest",name:"NatWest"},terms:[],matchScore:2,suggestion:true},"amenity/bank/National Bank":{name:"National Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/banquenationale/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q634298",amenity:"bank"},addTags:{amenity:"bank",brand:"National Bank","brand:wikidata":"Q634298","brand:wikipedia":"en:National Bank of Canada",name:"National Bank",official_name:"National Bank of Canada"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Nationwide":{name:"Nationwide",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/770597713893285888/ItnmL0YM_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q846735",amenity:"bank"},addTags:{amenity:"bank",brand:"Nationwide","brand:wikidata":"Q846735","brand:wikipedia":"en:Nationwide Building Society",name:"Nationwide"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Navy Federal Credit Union":{name:"Navy Federal Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/NavyFederal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6982632",amenity:"bank"},addTags:{amenity:"bank",brand:"Navy Federal Credit Union","brand:wikidata":"Q6982632","brand:wikipedia":"en:Navy Federal Credit Union",name:"Navy Federal Credit Union"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Nedbank":{name:"Nedbank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q2751701",amenity:"bank"},addTags:{amenity:"bank",brand:"Nedbank","brand:wikidata":"Q2751701","brand:wikipedia":"en:Nedbank",name:"Nedbank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Nordea":{name:"Nordea",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FNordea%20logo16.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1123823",amenity:"bank"},addTags:{amenity:"bank",brand:"Nordea","brand:wikidata":"Q1123823","brand:wikipedia":"en:Nordea",name:"Nordea"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Novo Banco":{name:"Novo Banco",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogotipo%20Novo%20Banco.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q17488861",amenity:"bank"},addTags:{amenity:"bank",brand:"Novo Banco","brand:wikidata":"Q17488861","brand:wikipedia":"en:Novo Banco",name:"Novo Banco"},terms:[],matchScore:2,suggestion:true},"amenity/bank/OLB":{name:"OLB",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FOldenburgische%20landesbank%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q879591",amenity:"bank"},addTags:{amenity:"bank",brand:"OLB","brand:wikidata":"Q879591","brand:wikipedia":"en:Oldenburgische Landesbank",name:"OLB"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/bank/OTP":{name:"OTP",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FOtp%20bank%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q912778",amenity:"bank"},addTags:{amenity:"bank",brand:"OTP","brand:wikidata":"Q912778","brand:wikipedia":"en:OTP Bank",name:"OTP"},terms:["otp bank"],matchScore:2,suggestion:true},"amenity/bank/Oberbank":{name:"Oberbank",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FOberbank%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2009139",amenity:"bank"},addTags:{amenity:"bank",brand:"Oberbank","brand:wikidata":"Q2009139","brand:wikipedia":"de:Oberbank",name:"Oberbank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Occidental de Descuento":{name:"Occidental de Descuento",icon:"maki-bank",imageURL:"https://graph.facebook.com/BODOficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854108",amenity:"bank"},addTags:{amenity:"bank",brand:"Occidental de Descuento","brand:wikidata":"Q4854108","brand:wikipedia":"en:Banco Occidental de Descuento",name:"Occidental de Descuento"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Oldenburgische Landesbank":{name:"Oldenburgische Landesbank",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FOldenburgische%20landesbank%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q879591",amenity:"bank"},addTags:{amenity:"bank",brand:"Oldenburgische Landesbank","brand:wikidata":"Q879591","brand:wikipedia":"en:Oldenburgische Landesbank",name:"Oldenburgische Landesbank"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/bank/One Network Bank":{name:"One Network Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q7093019",amenity:"bank"},addTags:{amenity:"bank",brand:"One Network Bank","brand:wikidata":"Q7093019","brand:wikipedia":"en:One Network Bank",name:"One Network Bank",operator:"Banco de Oro","operator:wikidata":"Q4854129","operator:wikipedia":"en:Banco de Oro"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Oriental Bank of Commerce":{name:"Oriental Bank of Commerce",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q367008",amenity:"bank"},addTags:{amenity:"bank",brand:"Oriental Bank of Commerce","brand:wikidata":"Q367008","brand:wikipedia":"en:Oriental Bank of Commerce",name:"Oriental Bank of Commerce"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Osuuspankki":{name:"Osuuspankki",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FOP%20Financial%20Group.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4045597",amenity:"bank"},addTags:{amenity:"bank",brand:"Osuuspankki","brand:wikidata":"Q4045597","brand:wikipedia":"fi:OP (finanssiryhmä)",name:"Osuuspankki"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"amenity/bank/PBZ":{name:"PBZ",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q7246343",amenity:"bank"},addTags:{amenity:"bank",brand:"PBZ","brand:wikidata":"Q7246343","brand:wikipedia":"en:Privredna banka Zagreb",name:"PBZ"},countryCodes:["hr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/PKO BP":{name:"PKO BP",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogotyp%20PKO%20BP.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q578832",amenity:"bank"},addTags:{amenity:"bank",brand:"PKO BP","brand:wikidata":"Q578832","brand:wikipedia":"pl:Powszechna Kasa Oszczędności Bank Polski",name:"PKO BP"},countryCodes:["pl"],terms:["pko bank polski"],matchScore:2,suggestion:true},"amenity/bank/PNB":{name:"PNB",icon:"maki-bank",imageURL:"https://graph.facebook.com/PNBph/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1657971",amenity:"bank"},addTags:{amenity:"bank",brand:"PNB","brand:wikidata":"Q1657971","brand:wikipedia":"en:Philippine National Bank",name:"PNB",official_name:"Philippine National Bank"},countryCodes:["ph"],terms:["philippine national bank"],matchScore:2,suggestion:true},"amenity/bank/PNC Bank":{name:"PNC Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/pncbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q38928",amenity:"bank"},addTags:{amenity:"bank",brand:"PNC Bank","brand:wikidata":"Q38928","brand:wikipedia":"en:PNC Financial Services",name:"PNC Bank"},terms:["pnc"],matchScore:2,suggestion:true},"amenity/bank/PSBank":{name:"PSBank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q7185203",amenity:"bank"},addTags:{amenity:"bank",brand:"PSBank","brand:wikidata":"Q7185203","brand:wikipedia":"en:Philippine Savings Bank",name:"PSBank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Panin Bank":{name:"Panin Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q12502751",amenity:"bank"},addTags:{amenity:"bank",brand:"Panin Bank","brand:wikidata":"Q12502751","brand:wikipedia":"id:Panin Bank",name:"Panin Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Patagonia":{name:"Patagonia",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Banco%20Patagonia.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2882078",amenity:"bank"},addTags:{amenity:"bank",brand:"Patagonia","brand:wikidata":"Q2882078","brand:wikipedia":"en:Banco Patagonia",name:"Patagonia"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Pekao SA":{name:"Pekao SA",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBank%20Pekao%20SA%20Logo%20(2017).svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q806642",amenity:"bank"},addTags:{amenity:"bank",brand:"Pekao SA","brand:wikidata":"Q806642","brand:wikipedia":"pl:Bank Polska Kasa Opieki",name:"Pekao SA"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/People's United Bank":{name:"People's United Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q7165802",amenity:"bank"},addTags:{amenity:"bank",brand:"People's United Bank","brand:wikidata":"Q7165802","brand:wikipedia":"en:People's United Financial",name:"People's United Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Peoples Bank":{name:"Peoples Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q7166050",amenity:"bank"},addTags:{amenity:"bank",brand:"Peoples Bank","brand:wikidata":"Q7166050","brand:wikipedia":"en:Peoples Bank",name:"Peoples Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Piraeus Bank":{name:"Piraeus Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3312",amenity:"bank"},addTags:{amenity:"bank",brand:"Piraeus Bank","brand:wikidata":"Q3312","brand:wikipedia":"en:Piraeus Bank",name:"Piraeus Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Postbank (Bulgaria)":{name:"Postbank (Bulgaria)",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q7234083",amenity:"bank"},addTags:{amenity:"bank",brand:"Postbank","brand:wikidata":"Q7234083","brand:wikipedia":"en:Bulgarian Postbank",name:"Postbank"},countryCodes:["bg"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Postbank (Germany)":{name:"Postbank (Germany)",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FPostbank-Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q708835",amenity:"bank"},addTags:{amenity:"bank",brand:"Postbank","brand:wikidata":"Q708835","brand:wikipedia":"en:Deutsche Postbank",name:"Postbank"},countryCodes:["de"],terms:["postbank finanzcenter"],matchScore:2,suggestion:true},"amenity/bank/Prima banka":{name:"Prima banka",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q13538661",amenity:"bank"},addTags:{amenity:"bank",brand:"Prima banka","brand:wikidata":"Q13538661","brand:wikipedia":"sk:Prima banka Slovensko",name:"Prima banka"},countryCodes:["sk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Provincial":{name:"Provincial",icon:"maki-bank",imageURL:"https://graph.facebook.com/bbvaprovincial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4835087",amenity:"bank"},addTags:{amenity:"bank",brand:"Provincial","brand:wikidata":"Q4835087","brand:wikipedia":"es:BBVA Provincial",name:"Provincial"},countryCodes:["ve"],terms:["bbva provincial"],matchScore:2,suggestion:true},"amenity/bank/Public Bank (Malaysia)":{name:"Public Bank (Malaysia)",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3046561",amenity:"bank"},addTags:{amenity:"bank",brand:"Public Bank","brand:wikidata":"Q3046561","brand:wikipedia":"en:Public Bank Berhad",name:"Public Bank"},terms:["public bank berhad"],matchScore:2,suggestion:true},"amenity/bank/Punjab National Bank":{name:"Punjab National Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/pnbindia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2743499",amenity:"bank"},addTags:{amenity:"bank",brand:"Punjab National Bank","brand:wikidata":"Q2743499","brand:wikipedia":"en:Punjab National Bank",name:"Punjab National Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/RBC":{name:"RBC",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q735261",amenity:"bank"},addTags:{amenity:"bank",brand:"RBC","brand:wikidata":"Q735261","brand:wikipedia":"en:Royal Bank of Canada",name:"RBC",official_name:"Royal Bank of Canada"},terms:["rbc financial group","rbc royal bank","royal bank","royal bank of canada"],matchScore:2,suggestion:true},"amenity/bank/RBS":{name:"RBS",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/1130393457191727105/wuHZFFaL_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q160126",amenity:"bank"},addTags:{amenity:"bank",brand:"RBS","brand:wikidata":"Q160126","brand:wikipedia":"en:Royal Bank of Scotland",name:"RBS",official_name:"Royal Bank of Scotland"},terms:["royal bank of scotland"],matchScore:2,suggestion:true},"amenity/bank/RCBC":{name:"RCBC",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q7339070",amenity:"bank"},addTags:{amenity:"bank",brand:"RCBC","brand:wikidata":"Q7339070","brand:wikipedia":"en:Rizal Commercial Banking Corporation",name:"RCBC",official_name:"Rizal Commercial Banking Corporation"},countryCodes:["ph"],terms:["rcbc savings bank"],matchScore:2,suggestion:true},"amenity/bank/Rabobank":{name:"Rabobank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q252004",amenity:"bank"},addTags:{amenity:"bank",brand:"Rabobank","brand:wikidata":"Q252004","brand:wikipedia":"en:Rabobank",name:"Rabobank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Raiffeisen Polbank":{name:"Raiffeisen Polbank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q9303218",amenity:"bank"},addTags:{amenity:"bank",brand:"Raiffeisen Polbank","brand:wikidata":"Q9303218","brand:wikipedia":"pl:Raiffeisen Bank Polska",name:"Raiffeisen Polbank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Regions Bank":{name:"Regions Bank",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FRegions-Financial-Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q917131",amenity:"bank"},addTags:{amenity:"bank",brand:"Regions Bank","brand:wikidata":"Q917131","brand:wikipedia":"en:Regions Financial Corporation",name:"Regions Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Republic Bank":{name:"Republic Bank",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20of%20Republic%20Bank%20of%20Trinidad%20and%20Tobago.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q7314386",amenity:"bank"},addTags:{amenity:"bank",brand:"Republic Bank","brand:wikidata":"Q7314386","brand:wikipedia":"en:Republic Bank",name:"Republic Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/SEB":{name:"SEB",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSEB%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q975655",amenity:"bank"},addTags:{amenity:"bank",brand:"SEB","brand:wikidata":"Q975655","brand:wikipedia":"en:SEB Group",name:"SEB"},terms:[],matchScore:2,suggestion:true},"amenity/bank/SGBCI":{name:"SGBCI",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3488360",amenity:"bank"},addTags:{amenity:"bank",brand:"SGBCI","brand:wikidata":"Q3488360","brand:wikipedia":"fr:Société générale de banques en Côte d'Ivoire",name:"SGBCI"},countryCodes:["ci"],terms:["agence sgbci"],matchScore:2,suggestion:true},"amenity/bank/SNS Bank":{name:"SNS Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q1857899",amenity:"bank"},addTags:{amenity:"bank",brand:"SNS Bank","brand:wikidata":"Q1857899","brand:wikipedia":"en:De Volksbank",name:"SNS Bank"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Sampath Bank":{name:"Sampath Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q7410095",amenity:"bank"},addTags:{amenity:"bank",brand:"Sampath Bank","brand:wikidata":"Q7410095","brand:wikipedia":"en:Sampath Bank",name:"Sampath Bank"},countryCodes:["lk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Santander":{name:"Santander",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/977265312969232384/7W4a261r_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5835668",amenity:"bank"},addTags:{amenity:"bank",brand:"Santander","brand:wikidata":"Q5835668","brand:wikipedia":"en:Santander Bank",name:"Santander"},terms:["santander consumer bank"],matchScore:2,suggestion:true},"amenity/bank/Santander Río":{name:"Santander Río",icon:"maki-bank",imageURL:"https://graph.facebook.com/SantanderRio/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3385268",amenity:"bank"},addTags:{amenity:"bank",brand:"Santander Río","brand:wikidata":"Q3385268","brand:wikipedia":"es:Banco Santander Río",name:"Santander Río"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Santander Totta":{name:"Santander Totta",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBanco%20Santander%20Logotipo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4854116",amenity:"bank"},addTags:{amenity:"bank",brand:"Santander Totta","brand:wikidata":"Q4854116","brand:wikipedia":"pt:Banco Santander Portugal",name:"Santander Totta"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Sberbank":{name:"Sberbank",icon:"maki-bank",imageURL:"https://graph.facebook.com/sberbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q205012",amenity:"bank"},addTags:{amenity:"bank",brand:"Sberbank","brand:wikidata":"Q205012","brand:wikipedia":"en:Sberbank of Russia",name:"Sberbank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Scotiabank":{name:"Scotiabank",icon:"maki-bank",imageURL:"https://graph.facebook.com/scotiabank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q451476",amenity:"bank"},addTags:{amenity:"bank",brand:"Scotiabank","brand:wikidata":"Q451476","brand:wikipedia":"en:Scotiabank",name:"Scotiabank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Security Bank":{name:"Security Bank",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FThe%20Security%20Bank%20Logo%201.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q7444945",amenity:"bank"},addTags:{amenity:"bank",brand:"Security Bank","brand:wikidata":"Q7444945","brand:wikipedia":"en:Security Bank",name:"Security Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Seylan Bank":{name:"Seylan Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3532083",amenity:"bank"},addTags:{amenity:"bank",brand:"Seylan Bank","brand:wikidata":"Q3532083","brand:wikipedia":"en:Seylan Bank",name:"Seylan Bank"},countryCodes:["lk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Siam Commercial Bank":{name:"Siam Commercial Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/scb.thailand/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2038986",amenity:"bank"},addTags:{amenity:"bank",brand:"Siam Commercial Bank","brand:wikidata":"Q2038986","brand:wikipedia":"en:Siam Commercial Bank",name:"Siam Commercial Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Sicoob":{name:"Sicoob",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q28679754",amenity:"bank"},addTags:{amenity:"bank",brand:"Sicoob","brand:wikidata":"Q28679754","brand:wikipedia":"pt:Sistema de Cooperativas de Crédito do Brasil",name:"Sicoob"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Sicredi":{name:"Sicredi",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3483060",amenity:"bank"},addTags:{amenity:"bank",brand:"Sicredi","brand:wikidata":"Q3483060","brand:wikipedia":"pt:Sistema de Crédito Cooperativo",name:"Sicredi"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Simmons Bank":{name:"Simmons Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/simmonsbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28402389",amenity:"bank"},addTags:{amenity:"bank",brand:"Simmons Bank","brand:wikidata":"Q28402389","brand:wikipedia":"en:Simmons Bank",name:"Simmons Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Slovenská sporiteľňa":{name:"Slovenská sporiteľňa",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q7541907",amenity:"bank"},addTags:{amenity:"bank",brand:"Slovenská sporiteľňa","brand:wikidata":"Q7541907","brand:wikipedia":"en:Slovenská sporiteľňa",name:"Slovenská sporiteľňa"},countryCodes:["sk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Société Générale":{name:"Société Générale",icon:"maki-bank",imageURL:"https://graph.facebook.com/societegenerale/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q270363",amenity:"bank"},addTags:{amenity:"bank",brand:"Société Générale","brand:wikidata":"Q270363","brand:wikipedia":"en:Société Générale",name:"Société Générale"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Sonali Bank":{name:"Sonali Bank",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSonali%20Bank%20logo.JPG&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3350382",amenity:"bank"},addTags:{amenity:"bank",brand:"Sonali Bank","brand:wikidata":"Q3350382","brand:wikipedia":"en:Sonali Bank",name:"Sonali Bank"},terms:["sonali bank limited","sonali bank limited সোনালী ব্যাংক লিমিটেড"],matchScore:2,suggestion:true},"amenity/bank/South Indian Bank":{name:"South Indian Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q2044973",amenity:"bank"},addTags:{amenity:"bank",brand:"South Indian Bank","brand:wikidata":"Q2044973","brand:wikipedia":"en:South Indian Bank",name:"South Indian Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/South State Bank":{name:"South State Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q55633597",amenity:"bank"},addTags:{amenity:"bank",brand:"South State Bank","brand:wikidata":"Q55633597","brand:wikipedia":"en:South State Bank",name:"South State Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Sparda-Bank":{name:"Sparda-Bank",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSparda%20Bank%202003%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2307136",amenity:"bank"},addTags:{amenity:"bank",brand:"Sparda-Bank","brand:wikidata":"Q2307136","brand:wikipedia":"en:Sparda-Bank",name:"Sparda-Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Stanbic Bank":{name:"Stanbic Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q7597999",amenity:"bank"},addTags:{amenity:"bank",brand:"Stanbic Bank","brand:wikidata":"Q7597999","brand:wikipedia":"en:Stanbic Bank",name:"Stanbic Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Standard Bank":{name:"Standard Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q1576610",amenity:"bank"},addTags:{amenity:"bank",brand:"Standard Bank","brand:wikidata":"Q1576610","brand:wikipedia":"en:Standard Bank",name:"Standard Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Standard Chartered":{name:"Standard Chartered",icon:"maki-bank",imageURL:"https://graph.facebook.com/StandardChartered/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q548278",amenity:"bank"},addTags:{amenity:"bank",brand:"Standard Chartered","brand:wikidata":"Q548278","brand:wikipedia":"en:Standard Chartered",name:"Standard Chartered"},terms:["standard chartered bank"],matchScore:2,suggestion:true},"amenity/bank/State Bank of India":{name:"State Bank of India",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FState-Bank-of-India-Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1340361",amenity:"bank"},addTags:{amenity:"bank",brand:"State Bank of India","brand:wikidata":"Q1340361","brand:wikipedia":"en:State Bank of India",name:"State Bank of India"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Summit Bank":{name:"Summit Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q7637775",amenity:"bank"},addTags:{amenity:"bank",brand:"Summit Bank","brand:wikidata":"Q7637775","brand:wikipedia":"en:Summit Bank",name:"Summit Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/SunTrust":{name:"SunTrust",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSunTrust%20Banks%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q181507",amenity:"bank"},addTags:{amenity:"bank",brand:"SunTrust","brand:wikidata":"Q181507","brand:wikipedia":"en:SunTrust Banks",name:"SunTrust"},countryCodes:["us"],terms:["suntrust bank"],matchScore:2,suggestion:true},"amenity/bank/Supervielle":{name:"Supervielle",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSupervielle%20logo14.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5718035",amenity:"bank"},addTags:{amenity:"bank",brand:"Supervielle","brand:wikidata":"Q5718035","brand:wikipedia":"es:Banco Supervielle",name:"Supervielle"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Swedbank":{name:"Swedbank",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSwedbank%20skylt.JPG&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1145493",amenity:"bank"},addTags:{amenity:"bank",brand:"Swedbank","brand:wikidata":"Q1145493","brand:wikipedia":"en:Swedbank",name:"Swedbank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Syndicate Bank":{name:"Syndicate Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q2004088",amenity:"bank"},addTags:{amenity:"bank",brand:"Syndicate Bank","brand:wikidata":"Q2004088","brand:wikipedia":"en:Syndicate Bank",name:"Syndicate Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/TCF Bank":{name:"TCF Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q7669687",amenity:"bank"},addTags:{amenity:"bank",brand:"TCF Bank","brand:wikidata":"Q7669687","brand:wikipedia":"en:TCF Bank",name:"TCF Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/TD Bank":{name:"TD Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q7669891",amenity:"bank"},addTags:{amenity:"bank",brand:"TD Bank","brand:wikidata":"Q7669891","brand:wikipedia":"en:TD Bank, N.A.",name:"TD Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/TD Canada Trust":{name:"TD Canada Trust",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FToronto-Dominion%20Bank%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1080670",amenity:"bank"},addTags:{amenity:"bank",brand:"TD Canada Trust","brand:wikidata":"Q1080670","brand:wikipedia":"en:TD Canada Trust",name:"TD Canada Trust"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/bank/TEB":{name:"TEB",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q7862447",amenity:"bank"},addTags:{amenity:"bank",brand:"TEB","brand:wikidata":"Q7862447","brand:wikipedia":"en:Türk Ekonomi Bankası",name:"TEB"},terms:[],matchScore:2,suggestion:true},"amenity/bank/TSB":{name:"TSB",icon:"maki-bank",imageURL:"https://graph.facebook.com/TSBbankUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7671560",amenity:"bank"},addTags:{amenity:"bank",brand:"TSB","brand:wikidata":"Q7671560","brand:wikipedia":"en:TSB Bank (United Kingdom)",name:"TSB"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Takarékszövetkezet":{name:"Takarékszövetkezet",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q30324674",amenity:"bank"},addTags:{amenity:"bank",brand:"Takarékszövetkezet","brand:wikidata":"Q30324674","brand:wikipedia":"en:TakarékBank",name:"Takarékszövetkezet"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Targobank":{name:"Targobank",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FTargobank%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1455437",amenity:"bank"},addTags:{amenity:"bank",brand:"Targobank","brand:wikidata":"Q1455437","brand:wikipedia":"en:Targobank",name:"Targobank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Tatra banka":{name:"Tatra banka",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FTatra%20banka%20logo.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1718069",amenity:"bank"},addTags:{amenity:"bank",brand:"Tatra banka","brand:wikidata":"Q1718069","brand:wikipedia":"en:Tatra banka",name:"Tatra banka"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Türkiye İş Bankası":{name:"Türkiye İş Bankası",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FT%C3%BCrkiye%20%C4%B0%C5%9F%20Bankas%C4%B1%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q909613",amenity:"bank"},addTags:{amenity:"bank",brand:"Türkiye İş Bankası","brand:wikidata":"Q909613","brand:wikipedia":"en:Türkiye İş Bankası",name:"Türkiye İş Bankası"},terms:[],matchScore:2,suggestion:true},"amenity/bank/U.S. Bank":{name:"U.S. Bank",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FU.S.%20Bancorp%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q739084",amenity:"bank"},addTags:{amenity:"bank",brand:"U.S. Bank","brand:wikidata":"Q739084","brand:wikipedia":"en:U.S. Bancorp",name:"U.S. Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/UBA":{name:"UBA",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q513457",amenity:"bank"},addTags:{amenity:"bank",brand:"UBA","brand:wikidata":"Q513457","brand:wikipedia":"en:United Bank for Africa",name:"UBA"},terms:[],matchScore:2,suggestion:true},"amenity/bank/UBI Banca":{name:"UBI Banca",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q1476162",amenity:"bank"},addTags:{amenity:"bank",brand:"UBI Banca","brand:wikidata":"Q1476162","brand:wikipedia":"en:UBI Banca",name:"UBI Banca"},terms:[],matchScore:2,suggestion:true},"amenity/bank/UBL":{name:"UBL",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q7887504",amenity:"bank"},addTags:{amenity:"bank",brand:"UBL","brand:en":"United Bank Limited Pakistan","brand:wikidata":"Q7887504","brand:wikipedia":"ur:یونائیٹڈ بینک (پاکستان)",name:"UBL","name:en":"United Bank Limited Pakistan"},countryCodes:["pk"],terms:["ubl bank"],matchScore:2,suggestion:true},"amenity/bank/UBS":{name:"UBS",icon:"maki-bank",imageURL:"https://graph.facebook.com/UBSglobal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q193199",amenity:"bank"},addTags:{amenity:"bank",brand:"UBS","brand:wikidata":"Q193199","brand:wikipedia":"en:UBS",name:"UBS"},terms:[],matchScore:2,suggestion:true},"amenity/bank/UCO Bank":{name:"UCO Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q2005310",amenity:"bank"},addTags:{amenity:"bank",brand:"UCO Bank","brand:wikidata":"Q2005310","brand:wikipedia":"en:UCO Bank",name:"UCO Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/UCPB":{name:"UCPB",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FUCPB%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q7887615",amenity:"bank"},addTags:{amenity:"bank",brand:"UCPB","brand:wikidata":"Q7887615","brand:wikipedia":"en:United Coconut Planters Bank",name:"UCPB"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/bank/UOB":{name:"UOB",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FUOB%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2064074",amenity:"bank"},addTags:{amenity:"bank",brand:"UOB","brand:wikidata":"Q2064074","brand:wikipedia":"en:United Overseas Bank",name:"UOB"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Ulster Bank":{name:"Ulster Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q2613366",amenity:"bank"},addTags:{amenity:"bank",brand:"Ulster Bank","brand:wikidata":"Q2613366","brand:wikipedia":"en:Ulster Bank",name:"Ulster Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Umpqua Bank":{name:"Umpqua Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q7881772",amenity:"bank"},addTags:{amenity:"bank",brand:"Umpqua Bank","brand:wikidata":"Q7881772","brand:wikipedia":"en:Umpqua Holdings Corporation",name:"Umpqua Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/UniCredit Bank":{name:"UniCredit Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/UniCreditItalia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q45568",amenity:"bank"},addTags:{amenity:"bank",brand:"UniCredit Bank","brand:wikidata":"Q45568","brand:wikipedia":"en:UniCredit",name:"UniCredit Bank"},terms:["unicredit","unicredit banca"],matchScore:2,suggestion:true},"amenity/bank/Unicaja Banco":{name:"Unicaja Banco",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q2543704",amenity:"bank"},addTags:{amenity:"bank",brand:"Unicaja Banco","brand:wikidata":"Q2543704","brand:wikipedia":"en:Unicaja",name:"Unicaja Banco"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Union Bank of India":{name:"Union Bank of India",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FUnion%20Bank%20of%20India%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2004078",amenity:"bank"},addTags:{amenity:"bank",brand:"Union Bank of India","brand:wikidata":"Q2004078","brand:wikipedia":"en:Union Bank of India",name:"Union Bank of India"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Union Bank (USA)":{name:"Union Bank (USA)",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q1442804",amenity:"bank"},addTags:{alt_name:"UnionBank",amenity:"bank",brand:"Union Bank","brand:wikidata":"Q1442804","brand:wikipedia":"en:MUFG Union Bank",name:"Union Bank"},countryCodes:["us"],terms:["mufg union bank","union bank of california"],matchScore:2,suggestion:true},"amenity/bank/UnionBank (Philippines)":{name:"UnionBank (Philippines)",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FUnionBankPH.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q7885403",amenity:"bank"},addTags:{amenity:"bank",brand:"UnionBank","brand:wikidata":"Q7885403","brand:wikipedia":"en:Union Bank of the Philippines",name:"UnionBank"},countryCodes:["ph"],terms:["union bank of the philippines"],matchScore:2,suggestion:true},"amenity/bank/Vakıfbank":{name:"Vakıfbank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/1116607604568940545/27IKknhk_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q1148521",amenity:"bank"},addTags:{amenity:"bank",brand:"Vakıfbank","brand:wikidata":"Q1148521","brand:wikipedia":"en:VakıfBank",name:"Vakıfbank"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Veneto Banca":{name:"Veneto Banca",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3127221",amenity:"bank"},addTags:{amenity:"bank",brand:"Veneto Banca","brand:wikidata":"Q3127221","brand:wikipedia":"en:Veneto Banca",name:"Veneto Banca"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Vijaya Bank":{name:"Vijaya Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q2003171",amenity:"bank"},addTags:{amenity:"bank",brand:"Vijaya Bank","brand:wikidata":"Q2003171","brand:wikipedia":"en:Vijaya Bank",name:"Vijaya Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Volksbank":{name:"Volksbank",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20of%20German%20Volksbanken%20Raiffeisenbanken.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q695110",amenity:"bank"},addTags:{amenity:"bank",brand:"Volksbank","brand:wikidata":"Q695110","brand:wikipedia":"en:Volksbank",name:"Volksbank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Volksbank Köln Bonn eG":{name:"Volksbank Köln Bonn eG",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q41680844",amenity:"bank"},addTags:{amenity:"bank",brand:"Volksbank Köln Bonn eG","brand:wikidata":"Q41680844","brand:wikipedia":"de:Volksbank Köln Bonn",name:"Volksbank",official_name:"Volksbank Köln Bonn eG"},terms:[],matchScore:2,suggestion:true},"amenity/bank/VÚB":{name:"VÚB",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FVUB.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q12778981",amenity:"bank"},addTags:{amenity:"bank",brand:"VÚB","brand:wikidata":"Q12778981","brand:wikipedia":"en:Všeobecná úverová banka",name:"VÚB"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Washington Federal":{name:"Washington Federal",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FWashington%20Federal%20Logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q7971859",amenity:"bank"},addTags:{amenity:"bank",brand:"Washington Federal","brand:wikidata":"Q7971859","brand:wikipedia":"en:Washington Federal",name:"Washington Federal"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Wells Fargo":{name:"Wells Fargo",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/1088877344624758784/OH8VFkEY_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q744149",amenity:"bank"},addTags:{amenity:"bank",brand:"Wells Fargo","brand:wikidata":"Q744149","brand:wikipedia":"en:Wells Fargo",name:"Wells Fargo"},terms:["wells fargo bank"],matchScore:2,suggestion:true},"amenity/bank/Western Union":{name:"Western Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/WesternUnion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q861042",amenity:"bank"},addTags:{amenity:"bank",brand:"Western Union","brand:wikidata":"Q861042","brand:wikipedia":"en:Western Union",name:"Western Union"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Westpac":{name:"Westpac",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FWestpac%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2031726",amenity:"bank"},addTags:{amenity:"bank",brand:"Westpac","brand:wikidata":"Q2031726","brand:wikipedia":"en:Westpac",name:"Westpac"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Yapı Kredi":{name:"Yapı Kredi",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q8049138",amenity:"bank"},addTags:{amenity:"bank",brand:"Yapı Kredi","brand:wikidata":"Q8049138","brand:wikipedia":"en:Yapı ve Kredi Bankası",name:"Yapı Kredi"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Yorkshire Bank":{name:"Yorkshire Bank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/875682560315097088/YOR4LIIO_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q8055678",amenity:"bank"},addTags:{amenity:"bank",brand:"Yorkshire Bank","brand:wikidata":"Q8055678","brand:wikipedia":"en:Yorkshire Bank",name:"Yorkshire Bank"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Yorkshire Building Society":{name:"Yorkshire Building Society",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q12073381",amenity:"bank"},addTags:{amenity:"bank",brand:"Yorkshire Building Society","brand:wikidata":"Q12073381","brand:wikipedia":"en:Yorkshire Building Society",name:"Yorkshire Building Society"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Zagrebačka banka":{name:"Zagrebačka banka",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FZagreba%C4%8Dka-banka-Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q140381",amenity:"bank"},addTags:{amenity:"bank",brand:"Zagrebačka banka","brand:wikidata":"Q140381","brand:wikipedia":"en:Zagrebačka banka",name:"Zagrebačka banka"},countryCodes:["hr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Zenith Bank":{name:"Zenith Bank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/880350862647980032/mvRee-i3_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5978240",amenity:"bank"},addTags:{amenity:"bank",brand:"Zenith Bank","brand:wikidata":"Q5978240","brand:wikipedia":"en:Zenith Bank",name:"Zenith Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Ziraat Bankası":{name:"Ziraat Bankası",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FZiraat%20Bankas%C4%B1%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q696003",amenity:"bank"},addTags:{amenity:"bank",brand:"Ziraat Bankası","brand:wikidata":"Q696003","brand:wikipedia":"en:Ziraat Bankası",name:"Ziraat Bankası"},terms:[],matchScore:2,suggestion:true},"amenity/bank/mBank":{name:"mBank",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMbank-logo.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1160928",amenity:"bank"},addTags:{amenity:"bank",brand:"mBank","brand:wikidata":"Q1160928","brand:wikipedia":"en:MBank",name:"mBank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/ČSOB":{name:"ČSOB",icon:"maki-bank",imageURL:"https://graph.facebook.com/csob/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q340135",amenity:"bank"},addTags:{amenity:"bank",brand:"ČSOB","brand:wikidata":"Q340135","brand:wikipedia":"en:Československá obchodní banka",name:"ČSOB"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Česká spořitelna":{name:"Česká spořitelna",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCeska%20Sporitelna.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q341100",amenity:"bank"},addTags:{amenity:"bank",brand:"Česká spořitelna","brand:wikidata":"Q341100","brand:wikipedia":"en:Česká spořitelna",name:"Česká spořitelna"},countryCodes:["cz"],terms:[],matchScore:2,suggestion:true},"amenity/bank/İş Bankası":{name:"İş Bankası",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FT%C3%BCrkiye%20%C4%B0%C5%9F%20Bankas%C4%B1%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q909613",amenity:"bank"},addTags:{amenity:"bank",brand:"İş Bankası","brand:wikidata":"Q909613","brand:wikipedia":"en:Türkiye İş Bankası",name:"İş Bankası"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Εθνική Τράπεζα":{name:"Εθνική Τράπεζα",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q1816028",amenity:"bank"},addTags:{amenity:"bank",brand:"Εθνική Τράπεζα","brand:el":"Εθνική Τράπεζα","brand:en":"National Bank of Greece","brand:wikidata":"Q1816028","brand:wikipedia":"en:National Bank of Greece",name:"Εθνική Τράπεζα","name:el":"Εθνική Τράπεζα","name:en":"National Bank of Greece"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Τράπεζα Πειραιώς":{name:"Τράπεζα Πειραιώς",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3312",amenity:"bank"},addTags:{amenity:"bank",brand:"Τράπεζα Πειραιώς","brand:el":"Τράπεζα Πειραιώς","brand:en":"Piraeus Bank","brand:wikidata":"Q3312","brand:wikipedia":"en:Piraeus Bank",name:"Τράπεζα Πειραιώς","name:el":"Τράπεζα Πειραιώς","name:en":"Piraeus Bank"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Авангард":{name:"Авангард",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankavangard/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62122617",amenity:"bank"},addTags:{amenity:"bank",brand:"Авангард","brand:wikidata":"Q62122617",name:"Авангард"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Альфа-Банк":{name:"Альфа-Банк",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/1126053531507621888/L60raYv6_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1377835",amenity:"bank"},addTags:{amenity:"bank",brand:"Альфа-Банк","brand:en":"Alfa-Bank","brand:ru":"Альфа-Банк","brand:wikidata":"Q1377835","brand:wikipedia":"ru:Альфа-банк",name:"Альфа-Банк","name:en":"Alfa-Bank","name:ru":"Альфа-Банк"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Банка ДСК":{name:"Банка ДСК",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5206146",amenity:"bank"},addTags:{amenity:"bank",brand:"Банка ДСК","brand:bg":"Банка ДСК","brand:en":"DSK Bank","brand:wikidata":"Q5206146","brand:wikipedia":"en:DSK Bank",name:"Банка ДСК","name:bg":"Банка ДСК","name:en":"DSK Bank"},countryCodes:["bg"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Белагропромбанк":{name:"Белагропромбанк",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q1991373",amenity:"bank"},addTags:{amenity:"bank",brand:"Белагропромбанк","brand:en":"Belagroprom Bank","brand:wikidata":"Q1991373","brand:wikipedia":"be:Белаграпрамбанк",name:"Белагропромбанк","name:en":"Belagroprom Bank"},countryCodes:["by"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Беларусбанк":{name:"Беларусбанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/asb.belarusbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1997334",amenity:"bank"},addTags:{amenity:"bank",brand:"Беларусбанк","brand:en":"Belarusbank","brand:wikidata":"Q1997334","brand:wikipedia":"en:Belarusbank",name:"Беларусбанк","name:en":"Belarusbank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Белинвестбанк":{name:"Белинвестбанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/belinvestbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4081940",amenity:"bank"},addTags:{amenity:"bank",brand:"Белинвестбанк","brand:wikidata":"Q4081940","brand:wikipedia":"ru:Белинвестбанк",name:"Белинвестбанк"},countryCodes:["by"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Бинбанк":{name:"Бинбанк",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q4086829",amenity:"bank"},addTags:{amenity:"bank",brand:"Бинбанк","brand:en":"B&N Bank","brand:wikidata":"Q4086829","brand:wikipedia":"en:B&N Bank",name:"Бинбанк","name:en":"B&N Bank"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ВТБ":{name:"ВТБ",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/1054295031916453888/lvi_M_Cc_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1549389",amenity:"bank"},addTags:{amenity:"bank",brand:"ВТБ","brand:en":"VTB Bank","brand:wikidata":"Q1549389","brand:wikipedia":"en:VTB Bank",name:"ВТБ","name:en":"VTB Bank"},terms:["втб банк москвы"],matchScore:2,suggestion:true},"amenity/bank/Возрождение":{name:"Возрождение",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q4114952",amenity:"bank"},addTags:{amenity:"bank",brand:"Возрождение","brand:wikidata":"Q4114952","brand:wikipedia":"ru:Возрождение (банк)",name:"Возрождение"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Газпромбанк":{name:"Газпромбанк",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FGazprombank.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1924338",amenity:"bank"},addTags:{amenity:"bank",brand:"Газпромбанк","brand:en":"Gazprombank","brand:wikidata":"Q1924338","brand:wikipedia":"en:Gazprombank",name:"Газпромбанк","name:en":"Gazprombank"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Генбанк":{name:"Генбанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/GENBANK.Crimea/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62122630",amenity:"bank"},addTags:{amenity:"bank",brand:"Генбанк","brand:wikidata":"Q62122630",name:"Генбанк"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Казкоммерцбанк":{name:"Казкоммерцбанк",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FQazkom%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1168179",amenity:"bank"},addTags:{amenity:"bank",brand:"Казкоммерцбанк","brand:en":"Kazkommertsbank","brand:wikidata":"Q1168179","brand:wikipedia":"en:Kazkommertsbank",name:"Казкоммерцбанк","name:en":"Kazkommertsbank"},countryCodes:["kz"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Московский индустриальный банк":{name:"Московский индустриальный банк",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q4304145",amenity:"bank"},addTags:{amenity:"bank",brand:"Московский индустриальный банк","brand:en":"Moscow Industrial Bank","brand:wikidata":"Q4304145","brand:wikipedia":"ru:Московский индустриальный банк",name:"Московский индустриальный банк","name:en":"Moscow Industrial Bank"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Мособлбанк":{name:"Мособлбанк",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q4304446",amenity:"bank"},addTags:{amenity:"bank",brand:"Мособлбанк","brand:en":"Mosobl Bank","brand:wikidata":"Q4304446","brand:wikipedia":"ru:Мособлбанк",name:"Мособлбанк","name:en":"Mosobl Bank"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Народный банк":{name:"Народный банк",icon:"maki-bank",imageURL:"https://graph.facebook.com/halykbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1046186",amenity:"bank"},addTags:{amenity:"bank",brand:"Народный банк","brand:wikidata":"Q1046186","brand:wikipedia":"kk:Қазақстан Халық банкі",name:"Народный банк"},countryCodes:["kg","kz","uz"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ОТП Банк":{name:"ОТП Банк",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FOtp%20bank%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q912778",amenity:"bank"},addTags:{amenity:"bank",brand:"ОТП Банк","brand:en":"OTP Bank","brand:wikidata":"Q912778","brand:wikipedia":"en:OTP Bank",name:"ОТП Банк","name:en":"OTP Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Обединена Българска Банка":{name:"Обединена Българска Банка",icon:"maki-bank",imageURL:"https://graph.facebook.com/UnitedBulgarianBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7887555",amenity:"bank"},addTags:{amenity:"bank",brand:"Обединена Българска Банка","brand:en":"United Bulgarian Bank","brand:wikidata":"Q7887555","brand:wikipedia":"en:United Bulgarian Bank",name:"Обединена Българска Банка","name:en":"United Bulgarian Bank"},countryCodes:["bg"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Открытие":{name:"Открытие",icon:"maki-bank",imageURL:"https://graph.facebook.com/otkritie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4327204",amenity:"bank"},addTags:{amenity:"bank",brand:"Открытие","brand:wikidata":"Q4327204","brand:wikipedia":"ru:Банк «Финансовая корпорация Открытие»",name:"Открытие"},countryCodes:["ru"],terms:["банк открытие"],matchScore:2,suggestion:true},"amenity/bank/Ощадбанк":{name:"Ощадбанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/oschadbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4340839",amenity:"bank"},addTags:{amenity:"bank",brand:"Ощадбанк","brand:en":"State Savings Bank of Ukraine","brand:wikidata":"Q4340839","brand:wikipedia":"uk:Ощадбанк",name:"Ощадбанк","name:en":"State Savings Bank of Ukraine"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ПУМБ":{name:"ПУМБ",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FFUIB%20eng%20300.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4341156",amenity:"bank"},addTags:{amenity:"bank",brand:"ПУМБ","brand:en":"First Ukrainian International Bank","brand:wikidata":"Q4341156","brand:wikipedia":"en:First Ukrainian International Bank",name:"ПУМБ","name:en":"First Ukrainian International Bank"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Почта Банк":{name:"Почта Банк",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q24930461",amenity:"bank"},addTags:{amenity:"bank",brand:"Почта Банк","brand:en":"Post Bank","brand:wikidata":"Q24930461","brand:wikipedia":"en:Post Bank (Russia)",name:"Почта Банк","name:en":"Post Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/ПриватБанк":{name:"ПриватБанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/privatbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1515015",amenity:"bank"},addTags:{amenity:"bank",brand:"ПриватБанк","brand:en":"PrivatBank","brand:wikidata":"Q1515015","brand:wikipedia":"uk:ПриватБанк",name:"ПриватБанк","name:en":"PrivatBank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Приорбанк":{name:"Приорбанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/Priorbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3919658",amenity:"bank"},addTags:{amenity:"bank",brand:"Приорбанк","brand:en":"PriorBank","brand:wikidata":"Q3919658","brand:wikipedia":"be:Пріорбанк",name:"Приорбанк","name:en":"PriorBank"},countryCodes:["by"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Промсвязьбанк":{name:"Промсвязьбанк",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2F%D0%9F%D1%80%D0%BE%D0%BC%D1%81%D0%B2%D1%8F%D0%B7%D1%8C%D0%B1%D0%B0%D0%BD%D0%BA%20logo%20NEW%202008.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q649100",amenity:"bank"},addTags:{amenity:"bank",brand:"Промсвязьбанк","brand:en":"Promsvyazbank","brand:wikidata":"Q649100","brand:wikipedia":"en:Promsvyazbank",name:"Промсвязьбанк","name:en":"Promsvyazbank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/РНКБ":{name:"РНКБ",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q16912944",amenity:"bank"},addTags:{amenity:"bank",brand:"РНКБ","brand:wikidata":"Q16912944","brand:wikipedia":"en:Russian National Commercial Bank",name:"РНКБ"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Райффайзен":{name:"Райффайзен",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q4389244",amenity:"bank"},addTags:{amenity:"bank",brand:"Райффайзен","brand:en":"Raiffeisenbank","brand:wikidata":"Q4389244","brand:wikipedia":"en:Raiffeisenbank (Russia)",name:"Райффайзен","name:en":"Raiffeisenbank"},countryCodes:["ru","ua"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Райффайзен Банк Аваль":{name:"Райффайзен Банк Аваль",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2F%D0%A0%D0%B0%D0%B9%D1%84%D1%84%D0%B0%D0%B9%D0%B7%D0%B5%D0%BD%20%D0%B1%D0%B0%D0%BD%D0%BA%20%D0%90%D0%B2%D0%B0%D0%BB%D1%8C%20(%D0%BB%D0%BE%D0%B3%D0%BE%D1%82%D0%B8%D0%BF).gif&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4389243",amenity:"bank"},addTags:{amenity:"bank",brand:"Райффайзен Банк Аваль","brand:en":"Raiffeisen Bank Aval","brand:wikidata":"Q4389243","brand:wikipedia":"en:Raiffeisen Bank Aval",name:"Райффайзен Банк Аваль","name:en":"Raiffeisen Bank Aval"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Росбанк":{name:"Росбанк",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FRosbank%20logo%20en.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1119857",amenity:"bank"},addTags:{amenity:"bank",brand:"Росбанк","brand:en":"Rosbank","brand:wikidata":"Q1119857","brand:wikipedia":"en:Rosbank",name:"Росбанк","name:en":"Rosbank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Россельхозбанк":{name:"Россельхозбанк",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3920226",amenity:"bank"},addTags:{amenity:"bank",brand:"Россельхозбанк","brand:en":"Rosselkhozbank","brand:wikidata":"Q3920226","brand:wikipedia":"en:Russian Agricultural Bank",name:"Россельхозбанк","name:en":"Rosselkhozbank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Русский Стандарт":{name:"Русский Стандарт",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q4400854",amenity:"bank"},addTags:{amenity:"bank",brand:"Русский Стандарт","brand:en":"Russian Standard Bank","brand:wikidata":"Q4400854","brand:wikipedia":"en:Russian Standard Bank",name:"Русский Стандарт","name:en":"Russian Standard Bank"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Сбербанк":{name:"Сбербанк",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q4378147",amenity:"bank"},addTags:{amenity:"bank",brand:"Сбербанк","brand:en":"Prisbank","brand:wikidata":"Q4378147","brand:wikipedia":"ru:Приднестровский Сбербанк",name:"Сбербанк","name:en":"Prisbank"},terms:["приднестровский сбербанк","сбербанк россии"],matchScore:2,suggestion:true},"amenity/bank/Совкомбанк":{name:"Совкомбанк",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q4426566",amenity:"bank"},addTags:{amenity:"bank",brand:"Совкомбанк","brand:en":"Sovcom Bank","brand:wikidata":"Q4426566","brand:wikipedia":"ru:Совкомбанк",name:"Совкомбанк","name:en":"Sovcom Bank"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/УкрСиббанк":{name:"УкрСиббанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/UKRSIBBANK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1976290",amenity:"bank"},addTags:{amenity:"bank",brand:"УкрСиббанк","brand:en":"UkrSibbank","brand:wikidata":"Q1976290","brand:wikipedia":"en:UkrSibbank",name:"УкрСиббанк","name:en":"UkrSibbank"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Укргазбанк":{name:"Укргазбанк",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FUkrgasbank%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4470692",amenity:"bank"},addTags:{amenity:"bank",brand:"Укргазбанк","brand:en":"Ukrgasbank","brand:wikidata":"Q4470692","brand:wikipedia":"ru:Укргазбанк",name:"Укргазбанк","name:en":"Ukrgasbank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Укрсоцбанк":{name:"Укрсоцбанк",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3547885",amenity:"bank"},addTags:{amenity:"bank",brand:"Укрсоцбанк","brand:en":"Ukrsotsbank","brand:wikidata":"Q3547885","brand:wikipedia":"en:Ukrsotsbank",name:"Укрсоцбанк","name:en":"Ukrsotsbank"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Уралсиб":{name:"Уралсиб",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q4476693",amenity:"bank"},addTags:{amenity:"bank",brand:"Уралсиб","brand:en":"Uralsib bank","brand:wikidata":"Q4476693","brand:wikipedia":"ru:Уралсиб (банк)",name:"Уралсиб","name:en":"Uralsib bank"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Хаан банк":{name:"Хаан банк",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q25632240",amenity:"bank"},addTags:{amenity:"bank",brand:"Хаан банк","brand:wikidata":"Q25632240","brand:wikipedia":"mn:ХААН банк",name:"Хаан банк"},countryCodes:["mn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Хоум Кредит":{name:"Хоум Кредит",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q4500466",amenity:"bank"},addTags:{amenity:"bank",brand:"Хоум Кредит","brand:en":"Home Credit & Finance Bank","brand:wikidata":"Q4500466","brand:wikipedia":"en:Home Credit & Finance Bank",name:"Хоум Кредит","name:en":"Home Credit & Finance Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/בנק הפועלים":{name:"בנק הפועלים",icon:"maki-bank",imageURL:"https://graph.facebook.com/BankHapoalimSocial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2666775",amenity:"bank"},addTags:{amenity:"bank",brand:"בנק הפועלים","brand:en":"Bank Hapoalim","brand:he":"בנק הפועלים","brand:wikidata":"Q2666775","brand:wikipedia":"en:Bank Hapoalim",name:"בנק הפועלים","name:en":"Bank Hapoalim","name:he":"בנק הפועלים"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/bank/בנק לאומי":{name:"בנק לאומי",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q806641",amenity:"bank"},addTags:{amenity:"bank",brand:"בנק לאומי","brand:en":"Bank Leumi","brand:he":"בנק לאומי","brand:wikidata":"Q806641","brand:wikipedia":"en:Bank Leumi",name:"בנק לאומי","name:en":"Bank Leumi","name:he":"בנק לאומי"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک آینده":{name:"بانک آینده",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5938144",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک آینده","brand:en":"Ayandeh Bank","brand:wikidata":"Q5938144","brand:wikipedia":"en:Ayandeh Bank",name:"بانک آینده","name:en":"Ayandeh Bank"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک اقتصاد نوین":{name:"بانک اقتصاد نوین",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5323768",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک اقتصاد نوین","brand:en":"EN Bank","brand:wikidata":"Q5323768","brand:wikipedia":"en:EN Bank",name:"بانک اقتصاد نوین","name:en":"EN Bank"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک انصار":{name:"بانک انصار",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5862675",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک انصار","brand:wikidata":"Q5862675","brand:wikipedia":"fa:بانک انصار",name:"بانک انصار"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک ایران زمین":{name:"بانک ایران زمین",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5934423",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک ایران زمین","brand:wikidata":"Q5934423","brand:wikipedia":"en:Iran Zamin Bank",name:"بانک ایران زمین"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک تجارت":{name:"بانک تجارت",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q7695198",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک تجارت","brand:wikidata":"Q7695198","brand:wikipedia":"en:Tejarat Bank",name:"بانک تجارت"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک توسعه تعاون":{name:"بانک توسعه تعاون",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5684450",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک توسعه تعاون","brand:wikidata":"Q5684450","brand:wikipedia":"fa:بانک توسعه تعاون",name:"بانک توسعه تعاون"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک رفاه":{name:"بانک رفاه",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FRefah-Bank-Logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q7307083",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک رفاه","brand:en":"Refah Bank","brand:wikidata":"Q7307083","brand:wikipedia":"en:Refah Bank",name:"بانک رفاه","name:en":"Refah Bank"},countryCodes:["ir"],terms:["بانک رفاه کارگران"],matchScore:2,suggestion:true},"amenity/bank/بانک سامان":{name:"بانک سامان",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q4117676",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک سامان","brand:en":"Saman Bank","brand:wikidata":"Q4117676","brand:wikipedia":"en:Saman Bank",name:"بانک سامان","name:en":"Saman Bank"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک سرمایه":{name:"بانک سرمایه",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q7424291",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک سرمایه","brand:en":"Sarmayeh Bank","brand:wikidata":"Q7424291","brand:wikipedia":"en:Sarmayeh Bank",name:"بانک سرمایه","name:en":"Sarmayeh Bank"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک سپه":{name:"بانک سپه",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q2882624",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک سپه","brand:en":"Bank Sepah","brand:wikidata":"Q2882624","brand:wikipedia":"en:Bank Sepah",name:"بانک سپه","name:en":"Bank Sepah"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک سینا":{name:"بانک سینا",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q10860246",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک سینا","brand:en":"Sina Bank","brand:wikidata":"Q10860246","brand:wikipedia":"en:Sina Bank",name:"بانک سینا","name:en":"Sina Bank"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک شهر":{name:"بانک شهر",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5941033",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک شهر","brand:en":"Shahr Bank","brand:wikidata":"Q5941033","brand:wikipedia":"fa:بانک شهر",name:"بانک شهر","name:en":"Shahr Bank"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک صادرات":{name:"بانک صادرات",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBank%20Saderat%20Iran%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2882608",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک صادرات","brand:en":"Bank Saderat Iran","brand:wikidata":"Q2882608","brand:wikipedia":"en:Bank Saderat Iran",name:"بانک صادرات","name:en":"Bank Saderat Iran"},terms:["بانک صادرات ایران","صادرات"],matchScore:2,suggestion:true},"amenity/bank/بانک قوامین":{name:"بانک قوامین",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q10860253",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک قوامین","brand:en":"Ghavamin Bank","brand:wikidata":"Q10860253","brand:wikipedia":"en:Ghavamin Bank",name:"بانک قوامین","name:en":"Ghavamin Bank"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک مسکن":{name:"بانک مسکن",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBank%20maskan.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4855942",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک مسکن","brand:en":"Bank Maskan","brand:wikidata":"Q4855942","brand:wikipedia":"en:Bank Maskan",name:"بانک مسکن","name:en":"Bank Maskan"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک ملت":{name:"بانک ملت",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q4855944",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک ملت","brand:en":"Bank Mellat","brand:wikidata":"Q4855944","brand:wikipedia":"en:Bank Mellat",name:"بانک ملت","name:en":"Bank Mellat"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک ملی":{name:"بانک ملی",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q806640",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک ملی","brand:en":"Bank Melli Iran","brand:wikidata":"Q806640","brand:wikipedia":"en:Bank Melli Iran",name:"بانک ملی","name:en":"Bank Melli Iran"},countryCodes:["ir"],terms:["بانک ملی ایران","ملی"],matchScore:2,suggestion:true},"amenity/bank/بانک مهر اقتصاد":{name:"بانک مهر اقتصاد",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5942921",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک مهر اقتصاد","brand:wikidata":"Q5942921","brand:wikipedia":"fa:بانک مهر اقتصاد",name:"بانک مهر اقتصاد","name:en":"Mehr Eqtesad Bank"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک پارسیان":{name:"بانک پارسیان",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q2410404",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک پارسیان","brand:en":"Parsian Bank","brand:wikidata":"Q2410404","brand:wikipedia":"en:Parsian Bank",name:"بانک پارسیان","name:en":"Parsian Bank"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک پاسارگاد":{name:"بانک پاسارگاد",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q4855962",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک پاسارگاد","brand:en":"Bank Pasargad","brand:wikidata":"Q4855962","brand:wikipedia":"en:Bank Pasargad",name:"بانک پاسارگاد","name:en":"Bank Pasargad"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک کشاورزی":{name:"بانک کشاورزی",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q6395007",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک کشاورزی","brand:en":"Bank Keshavarzi Iran","brand:wikidata":"Q6395007","brand:wikipedia":"en:Bank Keshavarzi Iran",name:"بانک کشاورزی","name:en":"Bank Keshavarzi Iran"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/پست بانک":{name:"پست بانک",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q7233625",amenity:"bank"},addTags:{amenity:"bank",brand:"پست بانک","brand:en":"Post Bank of Iran","brand:wikidata":"Q7233625","brand:wikipedia":"en:Post Bank of Iran",name:"پست بانک","name:en":"Post Bank of Iran"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ธนาคารกรุงเทพ":{name:"ธนาคารกรุงเทพ",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Bangkok%20Bank%20Public%20Company%20Limited.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q806483",amenity:"bank"},addTags:{amenity:"bank",brand:"ธนาคารกรุงเทพ","brand:en":"Bangkok Bank","brand:th":"ธนาคารกรุงเทพ","brand:wikidata":"Q806483","brand:wikipedia":"en:Bangkok Bank",name:"ธนาคารกรุงเทพ","name:en":"Bangkok Bank","name:th":"ธนาคารกรุงเทพ"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ธนาคารกรุงไทย":{name:"ธนาคารกรุงไทย",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q962865",amenity:"bank"},addTags:{amenity:"bank",brand:"ธนาคารกรุงไทย","brand:en":"Krung Thai Bank","brand:th":"ธนาคารกรุงไทย","brand:wikidata":"Q962865","brand:wikipedia":"en:Krung Thai Bank",name:"ธนาคารกรุงไทย","name:en":"Krung Thai Bank","name:th":"ธนาคารกรุงไทย"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ธนาคารกสิกรไทย":{name:"ธนาคารกสิกรไทย",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q276557",amenity:"bank"},addTags:{amenity:"bank",brand:"ธนาคารกสิกรไทย","brand:en":"en:Kasikornbank","brand:th":"ธนาคารกสิกรไทย","brand:wikidata":"Q276557","brand:wikipedia":"en:Kasikornbank",name:"ธนาคารกสิกรไทย","name:en":"en:Kasikornbank","name:th":"ธนาคารกสิกรไทย"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ธนาคารออมสิน":{name:"ธนาคารออมสิน",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q6579041",amenity:"bank"},addTags:{amenity:"bank",brand:"ธนาคารออมสิน","brand:en":"Government Savings Bank","brand:th":"ธนาคารออมสิน","brand:wikidata":"Q6579041","brand:wikipedia":"en:Government Savings Bank (Thailand)",name:"ธนาคารออมสิน","name:en":"Government Savings Bank","name:th":"ธนาคารออมสิน"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ธนาคารไทยพาณิชย์":{name:"ธนาคารไทยพาณิชย์",icon:"maki-bank",imageURL:"https://graph.facebook.com/scb.thailand/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2038986",amenity:"bank"},addTags:{amenity:"bank",brand:"ธนาคารไทยพาณิชย์","brand:en":"Siam Commercial Bank","brand:th":"ธนาคารไทยพาณิชย์","brand:wikidata":"Q2038986","brand:wikipedia":"en:Siam Commercial Bank",name:"ธนาคารไทยพาณิชย์","name:en":"Siam Commercial Bank","name:th":"ธนาคารไทยพาณิชย์"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/bank/みずほ銀行":{name:"みずほ銀行",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/902036508672106496/L8rp7WY6_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q2882956",amenity:"bank"},addTags:{amenity:"bank",brand:"みずほ銀行","brand:en":"Mizuho Bank","brand:ja":"みずほ銀行","brand:wikidata":"Q2882956","brand:wikipedia":"en:Mizuho Bank",name:"みずほ銀行","name:en":"Mizuho Bank","name:ja":"みずほ銀行"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ゆうちょ銀行":{name:"ゆうちょ銀行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FJapan%20Post%20Bank%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q907103",amenity:"bank"},addTags:{amenity:"bank",brand:"ゆうちょ銀行","brand:en":"Japan Post Bank","brand:ja":"ゆうちょ銀行","brand:wikidata":"Q907103","brand:wikipedia":"ja:ゆうちょ銀行",name:"ゆうちょ銀行","name:en":"Japan Post Bank","name:ja":"ゆうちょ銀行"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/りそな銀行":{name:"りそな銀行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FResona%20Bank%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11281447",amenity:"bank"},addTags:{amenity:"bank",brand:"りそな銀行","brand:en":"Resona Bank","brand:ja":"りそな銀行","brand:wikidata":"Q11281447","brand:wikipedia":"ja:りそな銀行",name:"りそな銀行","name:en":"Resona Bank","name:ja":"りそな銀行"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/三井住友銀行":{name:"三井住友銀行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSumitomo%20Mitsui%20Banking%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2660418",amenity:"bank"},addTags:{amenity:"bank",brand:"三井住友銀行","brand:en":"Sumitomo Mitsui Banking Corporation","brand:wikidata":"Q2660418","brand:wikipedia":"en:Sumitomo Mitsui Banking Corporation",name:"三井住友銀行","name:en":"Sumitomo Mitsui Banking Corporation"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/三菱東京UFJ銀行":{name:"三菱東京UFJ銀行",icon:"maki-bank",imageURL:"https://graph.facebook.com/bk.mufg.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q988284",amenity:"bank"},addTags:{amenity:"bank",brand:"三菱東京UFJ銀行","brand:en":"MUFG Bank","brand:wikidata":"Q988284","brand:wikipedia":"en:MUFG Bank",name:"三菱東京UFJ銀行","name:en":"MUFG Bank"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/上海商業儲蓄銀行":{name:"上海商業儲蓄銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q4207208",amenity:"bank"},addTags:{amenity:"bank",brand:"上海商業儲蓄銀行","brand:en":"Shanghai Commercial and Savings Bank","brand:wikidata":"Q4207208","brand:wikipedia":"en:Shanghai Commercial and Savings Bank",name:"上海商業儲蓄銀行","name:en":"Shanghai Commercial and Savings Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/中信银行":{name:"中信银行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q38960",amenity:"bank"},addTags:{amenity:"bank",brand:"中信银行","brand:en":"China CITIC Bank","brand:wikidata":"Q38960","brand:wikipedia":"en:China CITIC Bank",name:"中信银行"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/中国农业银行":{name:"中国农业银行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAgricultural%20Bank%20of%20China%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q26298",amenity:"bank"},addTags:{amenity:"bank",brand:"中国农业银行","brand:en":"Agricultural Bank of China","brand:wikidata":"Q26298","brand:wikipedia":"en:Agricultural Bank of China",name:"中国农业银行","name:en":"Agricultural Bank of China"},terms:[],matchScore:2,suggestion:true},"amenity/bank/中国工商银行":{name:"中国工商银行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FICBC%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q26463",amenity:"bank"},addTags:{amenity:"bank",brand:"中国工商银行","brand:en":"Industrial and Commercial Bank of China","brand:wikidata":"Q26463","brand:wikipedia":"en:Industrial and Commercial Bank of China",name:"中国工商银行","name:en":"Industrial and Commercial Bank of China"},terms:[],matchScore:2,suggestion:true},"amenity/bank/中国建设银行":{name:"中国建设银行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FChina%20Construction%20Bank%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q26299",amenity:"bank"},addTags:{amenity:"bank",brand:"中国建设银行","brand:en":"China Construction Bank","brand:wikidata":"Q26299","brand:wikipedia":"en:China Construction Bank",name:"中国建设银行","name:en":"China Construction Bank"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/中国邮政储蓄银行":{name:"中国邮政储蓄银行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FPostal%20Savings%20Bank%20of%20China%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q986744",amenity:"bank"},addTags:{amenity:"bank",brand:"中国邮政储蓄银行","brand:en":"Postal Savings Bank of China","brand:wikidata":"Q986744","brand:wikipedia":"en:Postal Savings Bank of China",name:"中国邮政储蓄银行","name:en":"Postal Savings Bank of China"},terms:[],matchScore:2,suggestion:true},"amenity/bank/中国银行":{name:"中国银行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FChinese%20Bank%20of%20China.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q790068",amenity:"bank"},addTags:{amenity:"bank",brand:"中国银行","brand:en":"Bank of China","brand:wikidata":"Q790068","brand:wikipedia":"en:Bank of China",name:"中国银行","name:en":"Bank of China"},terms:[],matchScore:2,suggestion:true},"amenity/bank/中國信託商業銀行":{name:"中國信託商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5100191",amenity:"bank"},addTags:{amenity:"bank",brand:"中國信託商業銀行","brand:en":"CTBC Bank","brand:wikidata":"Q5100191","brand:wikipedia":"en:CTBC Bank",name:"中國信託商業銀行","name:en":"CTBC Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/交通银行":{name:"交通银行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBank%20of%20Communications%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q806680",amenity:"bank"},addTags:{amenity:"bank",brand:"交通银行","brand:en":"Bank of Communications","brand:wikidata":"Q806680","brand:wikipedia":"en:Bank of Communications",name:"交通银行","name:en":"Bank of Communications"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/京城商業銀行":{name:"京城商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q10883132",amenity:"bank"},addTags:{amenity:"bank",brand:"京城商業銀行","brand:wikidata":"Q10883132","brand:wikipedia":"zh:京城商業銀行",name:"京城商業銀行"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/京都中央信用金庫":{name:"京都中央信用金庫",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q11374844",amenity:"bank"},addTags:{amenity:"bank",brand:"京都中央信用金庫","brand:en":"Kyoto Chuo Shinkin Bank","brand:wikidata":"Q11374844","brand:wikipedia":"jp:京都中央信用金庫",name:"京都中央信用金庫","name:en":"Kyoto Chuo Shinkin Bank"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/京都銀行":{name:"京都銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q11375713",amenity:"bank"},addTags:{amenity:"bank",brand:"京都銀行","brand:en":"Bank of Kyoto","brand:wikidata":"Q11375713","brand:wikipedia":"en:Bank of Kyoto",name:"京都銀行","name:en":"Bank of Kyoto"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/元大商業銀行":{name:"元大商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q10889602",amenity:"bank"},addTags:{amenity:"bank",brand:"元大商業銀行","brand:en":"Yuanta Commercial Bank","brand:wikidata":"Q10889602","brand:wikipedia":"zh:元大商業銀行",name:"元大商業銀行","name:en":"Yuanta Commercial Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/兆豐國際商業銀行":{name:"兆豐國際商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q709757",amenity:"bank"},addTags:{amenity:"bank",brand:"兆豐國際商業銀行","brand:en":"Mega International Commercial Bank","brand:wikidata":"Q709757","brand:wikipedia":"en:Mega International Commercial Bank",name:"兆豐國際商業銀行","name:en":"Mega International Commercial Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/农业银行":{name:"农业银行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAgricultural%20Bank%20of%20China%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q26298",amenity:"bank"},addTags:{amenity:"bank",brand:"农业银行","brand:wikidata":"Q26298","brand:wikipedia":"zh:中国农业银行",name:"农业银行"},terms:[],matchScore:2,suggestion:true},"amenity/bank/北洋銀行":{name:"北洋銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q11402354",amenity:"bank"},addTags:{amenity:"bank",brand:"北洋銀行","brand:en":"North Pacific Bank","brand:wikidata":"Q11402354","brand:wikipedia":"ja:北洋銀行",name:"北洋銀行","name:en":"North Pacific Bank"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/北海道銀行":{name:"北海道銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5878076",amenity:"bank"},addTags:{amenity:"bank",brand:"北海道銀行","brand:en":"Hokkaido Bank","brand:wikidata":"Q5878076","brand:wikipedia":"en:Hokkaido Bank",name:"北海道銀行","name:en":"Hokkaido Bank"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/台中商業銀行":{name:"台中商業銀行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FTcbbank%20headoffice.JPG&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q6136958",amenity:"bank"},addTags:{amenity:"bank",brand:"台中商業銀行","brand:en":"Taichung Bank","brand:wikidata":"Q6136958","brand:wikipedia":"en:Taichung Bank",name:"台中商業銀行","name:en":"Taichung Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/台北富邦商業銀行":{name:"台北富邦商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q697293",amenity:"bank"},addTags:{amenity:"bank",brand:"台北富邦商業銀行","brand:en":"Taipei Fubon Bank","brand:wikidata":"Q697293","brand:wikipedia":"en:Taipei Fubon Bank",name:"台北富邦商業銀行","name:en":"Taipei Fubon Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/台新國際商業銀行":{name:"台新國際商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q7676420",amenity:"bank"},addTags:{amenity:"bank",brand:"台新國際商業銀行","brand:en":"Taishin International Bank","brand:wikidata":"Q7676420","brand:wikipedia":"en:Taishin International Bank",name:"台新國際商業銀行","name:en":"Taishin International Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/合作金庫商業銀行":{name:"合作金庫商業銀行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FDepartment%20of%20Business%2C%20Taiwan%20Cooperative%20Bank%2020171216.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q701540",amenity:"bank"},addTags:{amenity:"bank",brand:"合作金庫商業銀行","brand:en":"Taiwan Cooperative Bank","brand:wikidata":"Q701540","brand:wikipedia":"en:Taiwan Cooperative Bank",name:"合作金庫商業銀行","name:en":"Taiwan Cooperative Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/國泰世華商業銀行":{name:"國泰世華商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q702656",amenity:"bank"},addTags:{amenity:"bank",brand:"國泰世華商業銀行","brand:en":"Cathay United Bank","brand:wikidata":"Q702656","brand:wikipedia":"en:Cathay United Bank",name:"國泰世華商業銀行","name:en":"Cathay United Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/大眾商業銀行":{name:"大眾商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q10937047",amenity:"bank"},addTags:{amenity:"bank",brand:"大眾商業銀行","brand:en":"Ta Chong Commercial Bank","brand:wikidata":"Q10937047","brand:wikipedia":"zh:大眾商業銀行",name:"大眾商業銀行","name:en":"Ta Chong Commercial Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/安泰商業銀行":{name:"安泰商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q10946952",amenity:"bank"},addTags:{amenity:"bank",brand:"安泰商業銀行","brand:en":"Entie Commercial Bank","brand:wikidata":"Q10946952","brand:wikipedia":"zh:安泰商業銀行",name:"安泰商業銀行","name:en":"Entie Commercial Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/工商银行":{name:"工商银行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FICBC%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q26463",amenity:"bank"},addTags:{amenity:"bank",brand:"工商银行","brand:en":"Industrial and Commercial Bank of China","brand:wikidata":"Q26463","brand:wikipedia":"en:Industrial and Commercial Bank of China",name:"工商银行","name:en":"Industrial and Commercial Bank of China"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/建设银行":{name:"建设银行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FChina%20Construction%20Bank%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q26299",amenity:"bank"},addTags:{amenity:"bank",brand:"建设银行","brand:wikidata":"Q26299","brand:wikipedia":"zh:中国建设银行",name:"建设银行"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/彰化商業銀行":{name:"彰化商業銀行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCentral%20Branch%2C%20Chang%20Hwa%20Bank%2020101213.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5071627",amenity:"bank"},addTags:{amenity:"bank",brand:"彰化商業銀行","brand:en":"Chang Hwa Bank","brand:wikidata":"Q5071627","brand:wikipedia":"en:Chang Hwa Bank",name:"彰化商業銀行","name:en":"Chang Hwa Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/招商银行":{name:"招商银行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q1073327",amenity:"bank"},addTags:{amenity:"bank",brand:"招商银行","brand:en":"China Merchants Bank","brand:wikidata":"Q1073327","brand:wikipedia":"en:China Merchants Bank",name:"招商银行","name:en":"China Merchants Bank"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/日本銀行":{name:"日本銀行",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/1695643374/medama_moji_en_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q333101",amenity:"bank"},addTags:{amenity:"bank",brand:"日本銀行","brand:en":"Bank of Japan","brand:wikidata":"Q333101","brand:wikipedia":"ja:日本銀行",name:"日本銀行","name:en":"Bank of Japan"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/板信商業銀行":{name:"板信商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q11104946",amenity:"bank"},addTags:{amenity:"bank",brand:"板信商業銀行","brand:en":"Bank of Panshin","brand:wikidata":"Q11104946","brand:wikipedia":"zh:板信商業銀行",name:"板信商業銀行","name:en":"Bank of Panshin"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/横浜銀行":{name:"横浜銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q2744340",amenity:"bank"},addTags:{amenity:"bank",brand:"横浜銀行","brand:en":"Bank of Yokohama","brand:wikidata":"Q2744340","brand:wikipedia":"en:Bank of Yokohama",name:"横浜銀行","name:en":"Bank of Yokohama"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/永豐商業銀行":{name:"永豐商業銀行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBank%20SinoPac%20logo%2020121103.gif&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4855976",amenity:"bank"},addTags:{amenity:"bank",brand:"永豐商業銀行","brand:en":"Bank SinoPac","brand:wikidata":"Q4855976","brand:wikipedia":"en:Bank SinoPac",name:"永豐商業銀行","name:en":"Bank SinoPac"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/渣打國際商業銀行":{name:"渣打國際商業銀行",icon:"maki-bank",imageURL:"https://graph.facebook.com/StandardCharteredTW/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62267023",amenity:"bank"},addTags:{amenity:"bank",brand:"渣打國際商業銀行","brand:wikidata":"Q62267023",name:"渣打國際商業銀行"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/玉山商業銀行":{name:"玉山商業銀行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FE.SUN%20Bank.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5321663",amenity:"bank"},addTags:{amenity:"bank",brand:"玉山商業銀行","brand:en":"E.SUN Commercial Bank","brand:wikidata":"Q5321663","brand:wikipedia":"en:E.SUN Commercial Bank",name:"玉山商業銀行","name:en":"E.SUN Commercial Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/第一商業銀行":{name:"第一商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q11602128",amenity:"bank"},addTags:{amenity:"bank",brand:"第一商業銀行","brand:en":"First Commercial Bank","brand:wikidata":"Q11602128","brand:wikipedia":"zh:第一商業銀行",name:"第一商業銀行","name:en":"First Commercial Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/聯邦商業銀行":{name:"聯邦商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q15927195",amenity:"bank"},addTags:{amenity:"bank",brand:"聯邦商業銀行","brand:en":"Union Bank of Taiwan","brand:wikidata":"Q15927195","brand:wikipedia":"zh:聯邦商業銀行",name:"聯邦商業銀行","name:en":"Union Bank of Taiwan"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/臺灣中小企業銀行":{name:"臺灣中小企業銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q15913812",amenity:"bank"},addTags:{amenity:"bank",brand:"臺灣中小企業銀行","brand:en":"Taiwan Business Bank","brand:wikidata":"Q15913812","brand:wikipedia":"zh:臺灣中小企業銀行",name:"臺灣中小企業銀行","name:en":"Taiwan Business Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/臺灣土地銀行":{name:"臺灣土地銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q717592",amenity:"bank"},addTags:{amenity:"bank",brand:"臺灣土地銀行","brand:en":"Land Bank of Taiwan","brand:wikidata":"Q717592","brand:wikipedia":"en:Land Bank of Taiwan",name:"臺灣土地銀行","name:en":"Land Bank of Taiwan"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/臺灣新光商業銀行":{name:"臺灣新光商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q15909616",amenity:"bank"},addTags:{amenity:"bank",brand:"臺灣新光商業銀行","brand:en":"Shin Kong Commercial Bank","brand:wikidata":"Q15909616","brand:wikipedia":"zh:臺灣新光商業銀行",name:"臺灣新光商業銀行","name:en":"Shin Kong Commercial Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/臺灣銀行":{name:"臺灣銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q706533",amenity:"bank"},addTags:{amenity:"bank",brand:"臺灣銀行","brand:en":"Bank of Taiwan","brand:wikidata":"Q706533","brand:wikipedia":"en:Bank of Taiwan",name:"臺灣銀行","name:en":"Bank of Taiwan"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/華南商業銀行":{name:"華南商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q11620043",amenity:"bank"},addTags:{amenity:"bank",brand:"華南商業銀行","brand:en":"Hua Nan Commercial Bank","brand:wikidata":"Q11620043","brand:wikipedia":"zh:華南銀行",name:"華南商業銀行","name:en":"Hua Nan Commercial Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/遠東國際商業銀行":{name:"遠東國際商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q15911143",amenity:"bank"},addTags:{amenity:"bank",brand:"遠東國際商業銀行","brand:en":"Far Eastern International Bank","brand:wikidata":"Q15911143","brand:wikipedia":"zh:遠東國際商業銀行",name:"遠東國際商業銀行","name:en":"Far Eastern International Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/陽信商業銀行":{name:"陽信商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q11658759",amenity:"bank"},addTags:{amenity:"bank",brand:"陽信商業銀行","brand:en":"Sunny Commercial Bank","brand:wikidata":"Q11658759","brand:wikipedia":"zh:陽信商業銀行",name:"陽信商業銀行","name:en":"Sunny Commercial Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/静岡銀行":{name:"静岡銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q7499501",amenity:"bank"},addTags:{amenity:"bank",brand:"静岡銀行","brand:en":"Shizuoka Bank","brand:wikidata":"Q7499501","brand:wikipedia":"en:Shizuoka Bank",name:"静岡銀行","name:en":"Shizuoka Bank"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/국민은행":{name:"국민은행",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FKB%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q496606",amenity:"bank"},addTags:{amenity:"bank",brand:"국민은행","brand:en":"KB Kookmin Bank","brand:ko":"국민은행","brand:wikidata":"Q496606","brand:wikipedia":"en:KB Financial Group Inc",name:"국민은행","name:en":"KB Kookmin Bank","name:ko":"국민은행"},countryCodes:["kr"],terms:["국민은행 (gungmin bank)"],matchScore:2,suggestion:true},"amenity/bank/기업은행":{name:"기업은행",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q483855",amenity:"bank"},addTags:{amenity:"bank",brand:"기업은행","brand:en":"Industrial Bank of Korea","brand:ko":"기업은행","brand:wikidata":"Q483855","brand:wikipedia":"en:Industrial Bank of Korea",name:"기업은행","name:en":"Industrial Bank of Korea","name:ko":"기업은행"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/농협":{name:"농협",icon:"maki-bank",imageURL:"https://graph.facebook.com/nhnonghyupbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15283673",amenity:"bank"},addTags:{amenity:"bank",brand:"농협","brand:en":"NH","brand:ko":"농협","brand:wikidata":"Q15283673","brand:wikipedia":"ko:NH농협은행",name:"농협","name:en":"NH","name:ko":"농협"},countryCodes:["kr"],terms:["nh농협은행"],matchScore:2,suggestion:true},"amenity/bank/새마을금고":{name:"새마을금고",icon:"maki-bank",imageURL:"https://graph.facebook.com/kfcc.kr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12600614",amenity:"bank"},addTags:{amenity:"bank",brand:"새마을금고","brand:ko":"새마을금고","brand:wikidata":"Q12600614","brand:wikipedia":"ko:새마을금고",name:"새마을금고","name:ko":"새마을금고"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/신한은행":{name:"신한은행",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q487230",amenity:"bank"},addTags:{amenity:"bank",brand:"신한은행","brand:en":"Sinhan Bank","brand:ko":"신한은행","brand:wikidata":"Q487230","brand:wikipedia":"en:Shinhan Bank",name:"신한은행","name:en":"Sinhan Bank","name:ko":"신한은행"},countryCodes:["kr"],terms:["신한은행 (sinhan bank)"],matchScore:2,suggestion:true},"amenity/bank/우리은행":{name:"우리은행",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q494369",amenity:"bank"},addTags:{amenity:"bank",brand:"우리은행","brand:en":"Woori Bank","brand:ko":"우리은행","brand:wikidata":"Q494369","brand:wikipedia":"en:Woori Bank",name:"우리은행","name:en":"Woori Bank","name:ko":"우리은행"},countryCodes:["kr"],terms:["우리은행 (uri bank)"],matchScore:2,suggestion:true},"amenity/bank/하나은행":{name:"하나은행",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q484047",amenity:"bank"},addTags:{amenity:"bank",brand:"하나은행","brand:en":"Korea Exchange Bank","brand:ko":"하나은행","brand:wikidata":"Q484047","brand:wikipedia":"en:Korea Exchange Bank",name:"하나은행","name:en":"Korea Exchange Bank","name:ko":"하나은행"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"amenity/bicycle_rental/Call a Bike":{name:"Call a Bike",icon:"maki-bicycle",imageURL:"https://graph.facebook.com/callabikesharing/picture?type=large",geometry:["point","vertex","area"],tags:{"brand:wikidata":"Q1060525",amenity:"bicycle_rental"},addTags:{amenity:"bicycle_rental",brand:"Call a Bike","brand:wikidata":"Q1060525","brand:wikipedia":"en:Call a Bike",name:"Call a Bike"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/bicycle_rental/Grid":{name:"Grid",icon:"maki-bicycle",imageURL:"https://graph.facebook.com/Gridbikes/picture?type=large",geometry:["point","vertex","area"],tags:{"brand:wikidata":"Q62104168",amenity:"bicycle_rental"},addTags:{amenity:"bicycle_rental",brand:"Grid","brand:wikidata":"Q62104168",name:"Grid"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bicycle_rental/MiBici":{name:"MiBici",icon:"maki-bicycle",imageURL:"https://graph.facebook.com/MiBiciPublica/picture?type=large",geometry:["point","vertex","area"],tags:{"brand:wikidata":"Q60966987",amenity:"bicycle_rental"},addTags:{amenity:"bicycle_rental",brand:"MiBici","brand:wikidata":"Q60966987","brand:wikipedia":"es:MiBici",name:"MiBici"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"amenity/bicycle_rental/Swapfiets":{name:"Swapfiets",icon:"maki-bicycle",imageURL:"https://graph.facebook.com/Swapfiets/picture?type=large",geometry:["point","vertex","area"],tags:{"brand:wikidata":"Q62104374",amenity:"bicycle_rental"},addTags:{amenity:"bicycle_rental",brand:"Swapfiets","brand:wikidata":"Q62104374",name:"Swapfiets"},countryCodes:["be","de","dk","nl"],terms:[],matchScore:2,suggestion:true},"amenity/bicycle_rental/metropolradruhr":{name:"metropolradruhr",icon:"maki-bicycle",imageURL:"https://graph.facebook.com/nextbike/picture?type=large",geometry:["point","vertex","area"],tags:{"brand:wikidata":"Q62104274",amenity:"bicycle_rental"},addTags:{amenity:"bicycle_rental",brand:"metropolradruhr","brand:wikidata":"Q62104274",name:"metropolradruhr",operator:"nextbike","operator:wikidata":"Q2351279","operator:wikipedia":"en:Nextbike"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/bureau_de_change/Abitab":{name:"Abitab",icon:"maki-bank",imageURL:"https://graph.facebook.com/Abitaboficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16488129",amenity:"bureau_de_change"},addTags:{amenity:"bureau_de_change",brand:"Abitab","brand:wikidata":"Q16488129","brand:wikipedia":"es:Abitab",name:"Abitab"},countryCodes:["uy"],terms:[],matchScore:2,suggestion:true},"amenity/bureau_de_change/CADECA":{name:"CADECA",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q62122716",amenity:"bureau_de_change"},addTags:{amenity:"bureau_de_change",brand:"CADECA","brand:wikidata":"Q62122716",name:"CADECA"},countryCodes:["cu"],terms:[],matchScore:2,suggestion:true},"amenity/bureau_de_change/Travelex":{name:"Travelex",icon:"maki-bank",imageURL:"https://graph.facebook.com/TravelexUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2337964",amenity:"bureau_de_change"},addTags:{amenity:"bureau_de_change",brand:"Travelex","brand:wikidata":"Q2337964","brand:wikipedia":"en:Travelex",name:"Travelex"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/85°C":{name:"85°C",icon:"maki-cafe",imageURL:"https://graph.facebook.com/85CBakeryCafe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4644852",amenity:"cafe"},addTags:{alt_name:"85C",amenity:"cafe",brand:"85°C","brand:wikidata":"Q4644852","brand:wikipedia":"en:85C Bakery Cafe",cuisine:"coffee_shop",name:"85°C",takeaway:"yes"},countryCodes:["au","us"],terms:["85 cafe","85 degrees c","85 degrees celsius","85c bakery cafe","85c daily cafe","85oc"],matchScore:2,suggestion:true},"amenity/cafe/85度C":{name:"85度C",icon:"maki-cafe",imageURL:"https://graph.facebook.com/85CBakeryCafe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4644852",amenity:"cafe"},addTags:{amenity:"cafe",brand:"85度C","brand:en":"85C Bakery Cafe","brand:wikidata":"Q4644852","brand:wikipedia":"en:85C Bakery Cafe",cuisine:"coffee_shop",name:"85度C","name:en":"85C Bakery Cafe",takeaway:"yes"},countryCodes:["cn","tw"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Barista":{name:"Barista",icon:"maki-cafe",imageURL:"https://graph.facebook.com/BaristaCoffeeCompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q644735",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Barista","brand:wikidata":"Q644735","brand:wikipedia":"en:Barista (company)",cuisine:"coffee_shop",name:"Barista",takeaway:"yes"},countryCodes:["in","lk","mv","np"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Bonafide":{name:"Bonafide",icon:"maki-cafe",imageURL:"https://graph.facebook.com/BonafideArgentina/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62122746",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Bonafide","brand:wikidata":"Q62122746",cuisine:"coffee_shop",name:"Bonafide",takeaway:"yes"},countryCodes:["ar","cl"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Cafe Coffee Day":{name:"Cafe Coffee Day",icon:"maki-cafe",imageURL:"https://graph.facebook.com/cafecoffeeday/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5017235",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Cafe Coffee Day","brand:wikidata":"Q5017235","brand:wikipedia":"en:Café Coffee Day",cuisine:"coffee_shop",name:"Cafe Coffee Day",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Caffè Nero":{name:"Caffè Nero",icon:"maki-cafe",imageURL:"https://graph.facebook.com/caffenerous/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q675808",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Caffè Nero","brand:wikidata":"Q675808","brand:wikipedia":"en:Caffè Nero",cuisine:"coffee_shop",name:"Caffè Nero",takeaway:"yes"},terms:["cafe nero"],matchScore:2,suggestion:true},"amenity/cafe/Café Amazon":{name:"Café Amazon",icon:"maki-cafe",imageURL:"https://graph.facebook.com/cafeamazonofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q43247503",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Café Amazon","brand:wikidata":"Q43247503","brand:wikipedia":"en:Café Amazon",cuisine:"coffee_shop",name:"Café Amazon",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Café Martínez":{name:"Café Martínez",icon:"maki-cafe",imageURL:"https://graph.facebook.com/CafeMartinezSitioOficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16540032",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Café Martínez","brand:wikidata":"Q16540032","brand:wikipedia":"es:Café Martínez",cuisine:"coffee_shop",name:"Café Martínez",takeaway:"yes"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Caribou Coffee":{name:"Caribou Coffee",icon:"maki-cafe",imageURL:"https://graph.facebook.com/cariboucoffee/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5039494",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Caribou Coffee","brand:wikidata":"Q5039494","brand:wikipedia":"en:Caribou Coffee",cuisine:"coffee_shop",name:"Caribou Coffee",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Chatime":{name:"Chatime",icon:"maki-cafe",imageURL:"https://graph.facebook.com/ChatimeCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16829306",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Chatime","brand:wikidata":"Q16829306","brand:wikipedia":"en:Chatime",cuisine:"coffee_shop",name:"Chatime",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Coffee Fellows":{name:"Coffee Fellows",icon:"maki-cafe",imageURL:"https://graph.facebook.com/CoffeeFellowsDeutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23461429",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Coffee Fellows","brand:wikidata":"Q23461429","brand:wikipedia":"en:Coffee Fellows",cuisine:"coffee_shop",name:"Coffee Fellows",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Coffee House (Finland)":{name:"Coffee House (Finland)",icon:"maki-cafe",imageURL:"https://graph.facebook.com/raflaamo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11855430",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Coffee House","brand:wikidata":"Q11855430","brand:wikipedia":"fi:Coffee House",cuisine:"coffee_shop",name:"Coffee House",takeaway:"yes"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Coffee Island":{name:"Coffee Island",icon:"maki-cafe",imageURL:"https://graph.facebook.com/CoffeeIslandUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60867333",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Coffee Island","brand:wikidata":"Q60867333","brand:wikipedia":"en:Coffee Island",cuisine:"coffee_shop",name:"Coffee Island",takeaway:"yes"},countryCodes:["cy","gr"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Coffee Time":{name:"Coffee Time",icon:"maki-cafe",imageURL:"https://graph.facebook.com/CoffeeTimeCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5140932",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Coffee Time","brand:wikidata":"Q5140932","brand:wikipedia":"en:Coffee Time",cuisine:"coffee_shop",name:"Coffee Time",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Costa":{name:"Costa",icon:"maki-cafe",imageURL:"https://graph.facebook.com/costacoffee/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q608845",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Costa","brand:wikidata":"Q608845","brand:wikipedia":"en:Costa Coffee",cuisine:"coffee_shop",name:"Costa",takeaway:"yes"},terms:["costa coffee"],matchScore:2,suggestion:true},"amenity/cafe/Country Style":{name:"Country Style",icon:"maki-cafe",imageURL:"https://graph.facebook.com/CountryStyleCDN/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5177435",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Country Style","brand:wikidata":"Q5177435","brand:wikipedia":"en:Country Style",cuisine:"coffee_shop",name:"Country Style",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Cộng Cà Phê":{name:"Cộng Cà Phê",icon:"maki-cafe",imageURL:"https://graph.facebook.com/congcaphe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63864181",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Cộng Cà Phê","brand:wikidata":"Q63864181",cuisine:"coffee_shop;vietnamese",name:"Cộng Cà Phê","name:vi":"Cộng Cà Phê",takeaway:"yes"},countryCodes:["kr","vn"],terms:["cong"],matchScore:2,suggestion:true},"amenity/cafe/Dutch Bros. Coffee":{name:"Dutch Bros. Coffee",icon:"maki-cafe",imageURL:"https://graph.facebook.com/dutchbros/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5317253",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Dutch Bros. Coffee","brand:wikidata":"Q5317253","brand:wikipedia":"en:Dutch Bros. Coffee",cuisine:"coffee_shop",name:"Dutch Bros. Coffee",takeaway:"only"},countryCodes:["us"],terms:["dutch bros","dutch brothers"],matchScore:2,suggestion:true},"amenity/cafe/Espresso House":{name:"Espresso House",icon:"maki-cafe",imageURL:"https://graph.facebook.com/EspressoHouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10489162",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Espresso House","brand:wikidata":"Q10489162","brand:wikipedia":"en:Espresso House",cuisine:"coffee_shop",name:"Espresso House",takeaway:"yes"},countryCodes:["dk","fi","no","se"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Fran's Café":{name:"Fran's Café",icon:"maki-cafe",imageURL:"https://graph.facebook.com/franscafeoficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62075645",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Fran's Café","brand:website":"http://www.franscafe.com.br","brand:wikidata":"Q62075645",cuisine:"coffee_shop",name:"Fran's Café",takeaway:"yes"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Havanna":{name:"Havanna",icon:"maki-cafe",imageURL:"https://graph.facebook.com/HavannaUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2900869",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Havanna","brand:wikidata":"Q2900869","brand:wikipedia":"es:Havanna",cuisine:"coffee_shop",name:"Havanna",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Highlands Coffee":{name:"Highlands Coffee",icon:"maki-cafe",imageURL:"https://graph.facebook.com/highlandscoffeevietnam/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5759361",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Highlands Coffee","brand:wikidata":"Q5759361","brand:wikipedia":"vi:Highlands Coffee",cuisine:"coffee_shop;vietnamese",name:"Highlands Coffee","name:en":"Highlands Coffee",takeaway:"yes"},countryCodes:["vn"],terms:["highlands"],matchScore:2,suggestion:true},"amenity/cafe/Insomnia":{name:"Insomnia",icon:"maki-cafe",imageURL:"https://graph.facebook.com/InsomniaCoffeeCo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6038271",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Insomnia","brand:wikidata":"Q6038271","brand:wikipedia":"en:Insomnia Coffee Company",cuisine:"coffee_shop",name:"Insomnia",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Joe & The Juice":{name:"Joe & The Juice",icon:"maki-cafe",imageURL:"https://graph.facebook.com/joeandthejuice/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q26221514",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Joe & The Juice","brand:wikidata":"Q26221514","brand:wikipedia":"en:Joe & The Juice",cuisine:"coffee_shop",name:"Joe & The Juice",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Le Pain Quotidien":{name:"Le Pain Quotidien",icon:"maki-cafe",imageURL:"https://graph.facebook.com/lepainquotidienusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2046903",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Le Pain Quotidien","brand:wikidata":"Q2046903","brand:wikipedia":"en:Le Pain Quotidien",cuisine:"coffee_shop",name:"Le Pain Quotidien",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Mado":{name:"Mado",icon:"maki-cafe",imageURL:"https://graph.facebook.com/MADOglobal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17116336",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Mado","brand:wikidata":"Q17116336","brand:wikipedia":"en:Mado (food company)",cuisine:"coffee_shop",name:"Mado",takeaway:"yes"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/McCafé":{name:"McCafé",icon:"maki-cafe",imageURL:"https://graph.facebook.com/276517512552782/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3114287",amenity:"cafe"},addTags:{amenity:"cafe",brand:"McCafé","brand:wikidata":"Q3114287","brand:wikipedia":"en:McCafé",cuisine:"coffee_shop",name:"McCafé","operator:wikidata":"Q38076","operator:wikipedia":"en:McDonald's",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Patisserie Valerie":{name:"Patisserie Valerie",icon:"maki-cafe",imageURL:"https://graph.facebook.com/ValerieCafe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22101966",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Patisserie Valerie","brand:wikidata":"Q22101966","brand:wikipedia":"en:Patisserie Valerie",cuisine:"coffee_shop",name:"Patisserie Valerie",takeaway:"yes"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Peet's Coffee":{name:"Peet's Coffee",icon:"maki-cafe",imageURL:"https://graph.facebook.com/peets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1094101",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Peet's Coffee","brand:wikidata":"Q1094101","brand:wikipedia":"en:Peet's Coffee",cuisine:"coffee_shop",name:"Peet's Coffee",takeaway:"yes"},countryCodes:["us"],terms:["peets","peets coffee & tea","peets coffee and tea"],matchScore:2,suggestion:true},"amenity/cafe/Prime":{name:"Prime",icon:"maki-cafe",imageURL:"https://graph.facebook.com/PRIMENATURALFOOD/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62122839",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Prime","brand:wikidata":"Q62122839",cuisine:"coffee_shop",name:"Prime",takeaway:"yes"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Pronto":{name:"Pronto",icon:"maki-cafe",imageURL:"https://graph.facebook.com/pronto.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11336224",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Pronto","brand:wikidata":"Q11336224","brand:wikipedia":"ja:プロントコーポレーション",cuisine:"coffee_shop",name:"Pronto","name:ja":"プロント",takeaway:"yes"},countryCodes:["jp"],terms:["プロント"],matchScore:2,suggestion:true},"amenity/cafe/Pumpkin":{name:"Pumpkin",icon:"maki-cafe",geometry:["point","area"],tags:{"brand:wikidata":"Q27825961",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Pumpkin","brand:wikidata":"Q27825961","brand:wikipedia":"en:Pumpkin Café Shop",cuisine:"coffee_shop",name:"Pumpkin",takeaway:"yes"},countryCodes:["gb"],terms:["pumpkin cafe","pumpkin cafe shop"],matchScore:2,suggestion:true},"amenity/cafe/Second Cup":{name:"Second Cup",icon:"maki-cafe",imageURL:"https://graph.facebook.com/SecondCup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q862180",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Second Cup","brand:wikidata":"Q862180","brand:wikipedia":"en:Second Cup",cuisine:"coffee_shop",name:"Second Cup",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Segafredo":{name:"Segafredo",icon:"maki-cafe",imageURL:"https://graph.facebook.com/SegafredoZanettiItalia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21282762",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Segafredo","brand:wikidata":"Q21282762","brand:wikipedia":"it:Segafredo Zanetti",cuisine:"coffee_shop",name:"Segafredo",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Starbucks":{name:"Starbucks",icon:"maki-cafe",imageURL:"https://graph.facebook.com/Starbucks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q37158",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Starbucks","brand:wikidata":"Q37158","brand:wikipedia":"en:Starbucks",cuisine:"coffee_shop",name:"Starbucks",takeaway:"yes"},terms:["starbucks coffee"],matchScore:2,suggestion:true},"amenity/cafe/The Coffee Bean & Tea Leaf":{name:"The Coffee Bean & Tea Leaf",icon:"maki-cafe",imageURL:"https://graph.facebook.com/thecoffeebean/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1141384",amenity:"cafe"},addTags:{amenity:"cafe",brand:"The Coffee Bean & Tea Leaf","brand:wikidata":"Q1141384","brand:wikipedia":"en:The Coffee Bean & Tea Leaf",cuisine:"coffee_shop",name:"The Coffee Bean & Tea Leaf",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/The Coffee Club":{name:"The Coffee Club",icon:"maki-cafe",imageURL:"https://graph.facebook.com/tccau/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7726599",amenity:"cafe"},addTags:{amenity:"cafe",brand:"The Coffee Club","brand:wikidata":"Q7726599","brand:wikipedia":"en:The Coffee Club",cuisine:"coffee_shop",name:"The Coffee Club",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/The Coffee House (Vietnam)":{name:"The Coffee House (Vietnam)",icon:"maki-cafe",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FThe%20Coffee%20House%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q60775742",amenity:"cafe"},addTags:{amenity:"cafe",brand:"The Coffee House","brand:wikidata":"Q60775742","brand:wikipedia":"en:The Coffee House (coffeehouse chain)",cuisine:"coffee_shop;vietnamese",name:"The Coffee House","name:en":"The Coffee House",takeaway:"yes"},countryCodes:["vn"],terms:["coffee house"],matchScore:2,suggestion:true},"amenity/cafe/Tim Hortons":{name:"Tim Hortons",icon:"maki-cafe",imageURL:"https://graph.facebook.com/TimHortonsUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q175106",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Tim Hortons","brand:wikidata":"Q175106","brand:wikipedia":"en:Tim Hortons",cuisine:"coffee_shop",name:"Tim Hortons",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Traveler's Coffee":{name:"Traveler's Coffee",icon:"maki-cafe",geometry:["point","area"],tags:{"brand:wikidata":"Q4051716",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Traveler's Coffee","brand:wikidata":"Q4051716","brand:wikipedia":"ru:Traveler’s Coffee",cuisine:"coffee_shop",name:"Traveler's Coffee",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Trung Nguyên Coffee":{name:"Trung Nguyên Coffee",icon:"maki-cafe",imageURL:"https://graph.facebook.com/trungnguyenlegend/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3541154",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Trung Nguyên","brand:wikidata":"Q3541154","brand:wikipedia":"vi:Trung Nguyên (công ty)",cuisine:"coffee_shop;vietnamese",name:"Trung Nguyên Coffee","name:en":"Trung Nguyen Coffee","name:vi":"Cà phê Trung Nguyên",takeaway:"yes"},countryCodes:["vn"],terms:["trung nguyen"],matchScore:2,suggestion:true},"amenity/cafe/Wayne's Coffee":{name:"Wayne's Coffee",icon:"maki-cafe",imageURL:"https://graph.facebook.com/WaynesCoffeeInternational/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2637272",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Wayne's Coffee","brand:wikidata":"Q2637272","brand:wikipedia":"en:Wayne's Coffee",cuisine:"coffee_shop",name:"Wayne's Coffee",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Wild Bean Cafe":{name:"Wild Bean Cafe",icon:"maki-cafe",geometry:["point","area"],tags:{"brand:wikidata":"Q61804826",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Wild Bean Cafe","brand:wikidata":"Q61804826",cuisine:"coffee_shop",name:"Wild Bean Cafe",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Даблби":{name:"Даблби",icon:"maki-cafe",imageURL:"https://graph.facebook.com/DoubleBCoffeeTea/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62501686",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Даблби","brand:en":"Double B","brand:wikidata":"Q62501686",cuisine:"coffee_shop",name:"Даблби","name:en":"Double B",takeaway:"yes"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Старбакс":{name:"Старбакс",icon:"maki-cafe",imageURL:"https://graph.facebook.com/Starbucks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q37158",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Старбакс","brand:en":"Starbucks","brand:wikidata":"Q37158","brand:wikipedia":"en:Starbucks",cuisine:"coffee_shop",name:"Старбакс","name:en":"Starbucks",takeaway:"yes"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Шоколадница":{name:"Шоколадница",icon:"maki-cafe",imageURL:"https://graph.facebook.com/shoko.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q30891188",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Шоколадница","brand:en":"Chocolate","brand:wikidata":"Q30891188","brand:wikipedia":"ru:Шоколадница (сеть кофеен)",cuisine:"coffee_shop",name:"Шоколадница","name:en":"Chocolate",takeaway:"yes"},countryCodes:["ru"],terms:["шоколад"],matchScore:2,suggestion:true},"amenity/cafe/Штолле":{name:"Штолле",icon:"maki-cafe",imageURL:"https://graph.facebook.com/stollerussia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62502236",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Штолле","brand:en":"Stolle","brand:wikidata":"Q62502236",cuisine:"coffee_shop",name:"Штолле","name:en":"Stolle",takeaway:"yes"},countryCodes:["by","ru","ua"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/ארומה":{name:"ארומה",icon:"maki-cafe",imageURL:"https://graph.facebook.com/Israel.Aroma/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2909872",amenity:"cafe"},addTags:{amenity:"cafe",brand:"ארומה","brand:en":"Aroma Espresso Bar","brand:he":"ארומה","brand:wikidata":"Q2909872","brand:wikipedia":"en:Aroma Espresso Bar",cuisine:"coffee_shop",name:"ארומה","name:en":"Aroma Espresso Bar","name:he":"ארומה",takeaway:"yes"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/คาเฟ่ อเมซอน":{name:"คาเฟ่ อเมซอน",icon:"maki-cafe",imageURL:"https://graph.facebook.com/cafeamazonofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q43247503",amenity:"cafe"},addTags:{amenity:"cafe",brand:"คาเฟ่ อเมซอน","brand:en":"Café Amazon","brand:th":"คาเฟ่ อเมซอน","brand:wikidata":"Q43247503","brand:wikipedia":"en:Café Amazon",cuisine:"coffee_shop",name:"คาเฟ่ อเมซอน","name:en":"Café Amazon","name:th":"คาเฟ่ อเมซอน",takeaway:"yes"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/エクセルシオール カフェ":{name:"エクセルシオール カフェ",icon:"maki-cafe",geometry:["point","area"],tags:{"brand:wikidata":"Q11289828",amenity:"cafe"},addTags:{amenity:"cafe",brand:"エクセルシオール カフェ","brand:en":"EXCELSIOR CAFFÉ","brand:ja":"エクセルシオール カフェ","brand:wikidata":"Q11289828","brand:wikipedia":"ja:エクセルシオール カフェ",cuisine:"coffee_shop",name:"エクセルシオール カフェ","name:ja":"エクセルシオール カフェ",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/カフェ・ド・クリエ":{name:"カフェ・ド・クリエ",icon:"maki-cafe",imageURL:"https://graph.facebook.com/pokkacreate/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17219077",amenity:"cafe"},addTags:{amenity:"cafe",brand:"カフェ・ド・クリエ","brand:en":"Cafe de CRIE","brand:ja":"カフェ・ド・クリエ","brand:wikidata":"Q17219077","brand:wikipedia":"ja:ポッカクリエイト",cuisine:"coffee_shop",name:"カフェ・ド・クリエ","name:en":"Cafe de CRIE","name:ja":"カフェ・ド・クリエ",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/カフェ・ベローチェ":{name:"カフェ・ベローチェ",icon:"maki-cafe",geometry:["point","area"],tags:{"brand:wikidata":"Q11294597",amenity:"cafe"},addTags:{amenity:"cafe",brand:"カフェ・ベローチェ","brand:en":"CAFFÈ VELOCE","brand:ja":"カフェ・ベローチェ","brand:wikidata":"Q11294597","brand:wikipedia":"ja:カフェ・ベローチェ",cuisine:"coffee_shop",name:"カフェ・ベローチェ","name:en":"CAFFÈ VELOCE","name:ja":"カフェ・ベローチェ",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/コメダ珈琲店":{name:"コメダ珈琲店",icon:"maki-cafe",imageURL:"https://graph.facebook.com/komeda.coffee/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11302679",amenity:"cafe"},addTags:{amenity:"cafe",brand:"コメダ珈琲店","brand:en":"Komeda Coffee Shop","brand:ja":"コメダ珈琲店","brand:wikidata":"Q11302679","brand:wikipedia":"ja:コメダ",cuisine:"coffee_shop",name:"コメダ珈琲店","name:en":"Komeda Coffee Shop","name:ja":"コメダ珈琲店",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/サンマルクカフェ":{name:"サンマルクカフェ",icon:"maki-cafe",geometry:["point","area"],tags:{"brand:wikidata":"Q11305989",amenity:"cafe"},addTags:{amenity:"cafe",brand:"サンマルクカフェ","brand:en":"ST.MARC CAFÉ","brand:ja":"サンマルクカフェ","brand:wikidata":"Q11305989","brand:wikipedia":"ja:サンマルクホールディングス",cuisine:"coffee_shop",name:"サンマルクカフェ","name:en":"ST.MARC CAFÉ","name:ja":"サンマルクカフェ",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/スターバックス":{name:"スターバックス",icon:"maki-cafe",imageURL:"https://graph.facebook.com/Starbucks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q37158",amenity:"cafe"},addTags:{amenity:"cafe",brand:"スターバックス","brand:en":"Starbucks","brand:ja":"スターバックス","brand:wikidata":"Q37158","brand:wikipedia":"ja:スターバックス",cuisine:"coffee_shop",name:"スターバックス","name:en":"Starbucks","name:ja":"スターバックス",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/タリーズコーヒー":{name:"タリーズコーヒー",icon:"maki-cafe",imageURL:"https://graph.facebook.com/TullysCoffeeShops/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3541983",amenity:"cafe"},addTags:{amenity:"cafe",brand:"タリーズコーヒー","brand:en":"Tully's Coffee","brand:ja":"タリーズコーヒー","brand:wikidata":"Q3541983","brand:wikipedia":"en:Tully's Coffee",cuisine:"coffee_shop",name:"タリーズコーヒー","name:en":"Tully's Coffee","name:ja":"タリーズコーヒー",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/ドトールコーヒーショップ":{name:"ドトールコーヒーショップ",icon:"maki-cafe",geometry:["point","area"],tags:{"brand:wikidata":"Q11322732",amenity:"cafe"},addTags:{amenity:"cafe",brand:"ドトールコーヒーショップ","brand:en":"Doutor","brand:ja":"ドトールコーヒーショップ","brand:wikidata":"Q11322732","brand:wikipedia":"ja:ドトールコーヒーショップ",cuisine:"coffee_shop",name:"ドトールコーヒーショップ","name:en":"Doutor Coffee Shop","name:ja":"ドトールコーヒーショップ",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/星巴克":{name:"星巴克",icon:"maki-cafe",imageURL:"https://graph.facebook.com/Starbucks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q37158",amenity:"cafe"},addTags:{amenity:"cafe",brand:"星巴克","brand:en":"Starbucks","brand:wikidata":"Q37158","brand:wikipedia":"zh:星巴克","brand:zh":"星巴克",cuisine:"coffee_shop",name:"星巴克","name:en":"Starbucks","name:zh":"星巴克",takeaway:"yes"},countryCodes:["cn","tw"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/珈琲館":{name:"珈琲館",icon:"maki-cafe",imageURL:"https://graph.facebook.com/kohikancorporation/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11573290",amenity:"cafe"},addTags:{amenity:"cafe",brand:"珈琲館","brand:en":"Kohikan","brand:ja":"珈琲館","brand:wikidata":"Q11573290","brand:wikipedia":"ja:珈琲館",cuisine:"coffee_shop",name:"珈琲館","name:en":"Kohikan","name:ja":"珈琲館",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/스타벅스":{name:"스타벅스",icon:"maki-cafe",imageURL:"https://graph.facebook.com/Starbucks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q37158",amenity:"cafe"},addTags:{amenity:"cafe",brand:"스타벅스","brand:en":"Starbucks","brand:ko":"스타벅스","brand:wikidata":"Q37158","brand:wikipedia":"ko:스타벅스",cuisine:"coffee_shop",name:"스타벅스","name:en":"Starbucks","name:ko":"스타벅스",takeaway:"yes"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"amenity/car_rental/Alamo":{name:"Alamo",icon:"maki-car-rental",imageURL:"https://graph.facebook.com/AlamoRentACar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1429287",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"Alamo","brand:wikidata":"Q1429287","brand:wikipedia":"en:Alamo Rent a Car",name:"Alamo"},terms:[],matchScore:2,suggestion:true},"amenity/car_rental/Avis":{name:"Avis",icon:"maki-car-rental",imageURL:"https://graph.facebook.com/avis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q791136",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"Avis","brand:wikidata":"Q791136","brand:wikipedia":"en:Avis Car Rental",name:"Avis"},terms:[],matchScore:2,suggestion:true},"amenity/car_rental/Budget":{name:"Budget",icon:"maki-car-rental",imageURL:"https://graph.facebook.com/Budget/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1001437",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"Budget","brand:wikidata":"Q1001437","brand:wikipedia":"en:Budget Rent a Car",name:"Budget"},terms:[],matchScore:2,suggestion:true},"amenity/car_rental/Dollar":{name:"Dollar",icon:"maki-car-rental",imageURL:"https://graph.facebook.com/DollarCarRental/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1235661",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"Dollar","brand:wikidata":"Q1235661","brand:wikipedia":"en:Dollar Rent A Car",name:"Dollar"},terms:[],matchScore:2,suggestion:true},"amenity/car_rental/Enterprise":{name:"Enterprise",icon:"maki-car-rental",imageURL:"https://graph.facebook.com/Enterprise/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17085454",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"Enterprise","brand:wikidata":"Q17085454","brand:wikipedia":"en:Enterprise Rent-A-Car",name:"Enterprise"},terms:["enterprise rent-a-car"],matchScore:2,suggestion:true},"amenity/car_rental/Europcar":{name:"Europcar",icon:"maki-car-rental",imageURL:"https://graph.facebook.com/europcar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1376256",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"Europcar","brand:wikidata":"Q1376256","brand:wikipedia":"en:Europcar",name:"Europcar"},terms:[],matchScore:2,suggestion:true},"amenity/car_rental/Hertz":{name:"Hertz",icon:"maki-car-rental",imageURL:"https://graph.facebook.com/hertz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1543874",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"Hertz","brand:wikidata":"Q1543874","brand:wikipedia":"en:The Hertz Corporation",name:"Hertz"},terms:[],matchScore:2,suggestion:true},"amenity/car_rental/Localiza":{name:"Localiza",icon:"maki-car-rental",imageURL:"https://graph.facebook.com/localizahertz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10319490",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"Localiza","brand:wikidata":"Q10319490","brand:wikipedia":"en:Localiza",name:"Localiza"},terms:[],matchScore:2,suggestion:true},"amenity/car_rental/Sixt":{name:"Sixt",icon:"maki-car-rental",imageURL:"https://graph.facebook.com/sixt.rentacar.usa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q705664",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"Sixt","brand:wikidata":"Q705664","brand:wikipedia":"en:Sixt",name:"Sixt"},terms:[],matchScore:2,suggestion:true},"amenity/car_rental/Thrifty":{name:"Thrifty",icon:"maki-car-rental",imageURL:"https://graph.facebook.com/ThriftyCarRental/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2429546",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"Thrifty","brand:wikidata":"Q2429546","brand:wikipedia":"en:Thrifty Car Rental",name:"Thrifty"},terms:[],matchScore:2,suggestion:true},"amenity/car_rental/U-Haul":{name:"U-Haul",icon:"maki-car-rental",imageURL:"https://graph.facebook.com/uhaul/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7862902",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"U-Haul","brand:wikidata":"Q7862902","brand:wikipedia":"en:U-Haul",name:"U-Haul"},terms:[],matchScore:2,suggestion:true},"amenity/car_rental/オリックスレンタカー":{name:"オリックスレンタカー",icon:"maki-car-rental",geometry:["point","area"],tags:{"brand:wikidata":"Q11123021",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"オリックスレンタカー","brand:en":"ORIX Car Rental","brand:ja":"オリックスレンタカー","brand:wikidata":"Q11123021","brand:wikipedia":"ja:オリックスレンタカー",name:"オリックスレンタカー","name:en":"ORIX Car Rental","name:ja":"オリックスレンタカー"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/car_rental/トヨタレンタカー":{name:"トヨタレンタカー",icon:"maki-car-rental",geometry:["point","area"],tags:{"brand:wikidata":"Q11321580",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"トヨタレンタカー","brand:en":"Toyota Rental Car","brand:ja":"トヨタレンタカー","brand:wikidata":"Q11321580","brand:wikipedia":"ja:トヨタレンタリース",name:"トヨタレンタカー","name:en":"Toyota Rental Car","name:ja":"トヨタレンタカー"},countryCodes:["jp"],terms:["トヨタレンタリース"],matchScore:2,suggestion:true},"amenity/car_rental/ニッポンレンタカー":{name:"ニッポンレンタカー",icon:"maki-car-rental",geometry:["point","area"],tags:{"brand:wikidata":"Q11086533",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"ニッポンレンタカー","brand:en":"Nippon Car Rental","brand:ja":"ニッポンレンタカー","brand:wikidata":"Q11086533","brand:wikipedia":"ja:ニッポンレンタカー",name:"ニッポンレンタカー","name:en":"Nippon Car Rental","name:ja":"ニッポンレンタカー"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/car_rental/日産レンタカー":{name:"日産レンタカー",icon:"maki-car-rental",geometry:["point","area"],tags:{"brand:wikidata":"Q11086838",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"日産レンタカー","brand:en":"Nissan Car Rental","brand:ja":"日産レンタカー","brand:wikidata":"Q11086838","brand:wikipedia":"ja:日産レンタカー",name:"日産レンタカー","name:en":"Nissan Car Rental","name:ja":"日産レンタカー"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/car_sharing/Bluely":{name:"Bluely",icon:"maki-car",imageURL:"https://graph.facebook.com/bluely.eu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16039715",amenity:"car_sharing"},addTags:{amenity:"car_sharing",brand:"Bluely","brand:wikidata":"Q16039715","brand:wikipedia":"fr:Bluely",name:"Bluely"},countryCodes:["fr"],terms:["station bluely"],matchScore:2,suggestion:true},"amenity/car_sharing/Enterprise Car Club":{name:"Enterprise Car Club",icon:"maki-car",imageURL:"https://graph.facebook.com/EnterpriseCarClub/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5123055",amenity:"car_sharing"},addTags:{amenity:"car_sharing",brand:"Enterprise Car Club","brand:wikidata":"Q5123055","brand:wikipedia":"en:Enterprise Car Club",name:"Enterprise Car Club"},countryCodes:["gb"],terms:["city car club"],matchScore:2,suggestion:true},"amenity/car_sharing/Zipcar":{name:"Zipcar",icon:"maki-car",imageURL:"https://graph.facebook.com/zipcar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1069924",amenity:"car_sharing"},addTags:{amenity:"car_sharing",brand:"Zipcar","brand:wikidata":"Q1069924","brand:wikipedia":"en:Zipcar",name:"Zipcar"},terms:[],matchScore:2,suggestion:true},"amenity/car_sharing/stadtmobil":{name:"stadtmobil",icon:"maki-car",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FStadtmobil%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2327629",amenity:"car_sharing"},addTags:{amenity:"car_sharing",brand:"stadtmobil","brand:wikidata":"Q2327629","brand:wikipedia":"en:Stadtmobil",name:"stadtmobil"},countryCodes:["de"],terms:["stadtmobil carsharing-station"],matchScore:2,suggestion:true},"amenity/charging_station/Blink":{name:"Blink",icon:"fas-charging-station",imageURL:"https://graph.facebook.com/blinknetwork/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q62065645",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"Blink","brand:wikidata":"Q62065645",name:"Blink"},terms:[],matchScore:2,suggestion:true},"amenity/charging_station/ChargePoint":{name:"ChargePoint",icon:"fas-charging-station",imageURL:"https://graph.facebook.com/ChargePoint/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q5176149",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"ChargePoint","brand:wikidata":"Q5176149","brand:wikipedia":"en:ChargePoint",name:"ChargePoint"},terms:[],matchScore:2,suggestion:true},"amenity/charging_station/E-WALD":{name:"E-WALD",icon:"fas-charging-station",imageURL:"https://graph.facebook.com/E.WALD.emobility/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q61804335",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"E-WALD","brand:wikidata":"Q61804335",name:"E-WALD"},terms:["e-wald ladestation"],matchScore:2,suggestion:true},"amenity/charging_station/Enel":{name:"Enel",icon:"fas-charging-station",imageURL:"https://graph.facebook.com/enelsharing/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q651222",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"Enel","brand:wikidata":"Q651222","brand:wikipedia":"en:Enel",name:"Enel"},countryCodes:["it"],terms:["enel - stazione di ricarica"],matchScore:2,suggestion:true},"amenity/charging_station/Tesla Supercharger":{name:"Tesla Supercharger",icon:"fas-charging-station",imageURL:"https://pbs.twimg.com/profile_images/489192650474414080/4RxZxsud_bigger.png",geometry:["point"],tags:{"brand:wikidata":"Q17089620",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"Tesla Supercharger","brand:wikidata":"Q17089620","brand:wikipedia":"en:Tesla Supercharger",name:"Tesla Supercharger"},terms:[],matchScore:2,suggestion:true},"amenity/charging_station/eVgo":{name:"eVgo",icon:"fas-charging-station",imageURL:"https://graph.facebook.com/160983117271970/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q61803820",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"eVgo","brand:wikidata":"Q61803820",name:"eVgo","operator:wikidata":"Q6955139","operator:wikipedia":"en:NRG Energy"},terms:[],matchScore:2,suggestion:true},"amenity/cinema/109シネマズ":{name:"109シネマズ",icon:"maki-cinema",geometry:["point","area"],tags:{"brand:wikidata":"Q10854269",amenity:"cinema"},addTags:{amenity:"cinema",brand:"109シネマズ","brand:en":"109 Cinemas","brand:ja":"109シネマズ","brand:wikidata":"Q10854269","brand:wikipedia":"ja:109シネマズ",name:"109シネマズ","name:en":"109 Cinemas","name:ja":"109シネマズ",operator:"株式会社 東急レクリエーション","operator:en":"Tokyu Recreation Co., Ltd.","operator:wikidata":"Q11527011","operator:wikipedia":"ja:東急レクリエーション"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/AMC":{name:"AMC",icon:"maki-cinema",imageURL:"https://graph.facebook.com/amctheatres/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q294721",amenity:"cinema"},addTags:{amenity:"cinema",brand:"AMC","brand:wikidata":"Q294721","brand:wikipedia":"en:AMC Theatres",name:"AMC"},terms:[],matchScore:2,suggestion:true},"amenity/cinema/CineStar":{name:"CineStar",icon:"maki-cinema",imageURL:"https://graph.facebook.com/CineStarDE/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q321889",amenity:"cinema"},addTags:{amenity:"cinema",brand:"CineStar","brand:wikidata":"Q321889","brand:wikipedia":"de:Cinestar",name:"CineStar"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Cinema City":{name:"Cinema City",icon:"maki-cinema",imageURL:"https://graph.facebook.com/CinemaCityPoland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q543651",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Cinema City","brand:wikidata":"Q543651","brand:wikipedia":"en:Cinema City International",name:"Cinema City"},terms:[],matchScore:2,suggestion:true},"amenity/cinema/Cinemark":{name:"Cinemark",icon:"maki-cinema",imageURL:"https://graph.facebook.com/cinemarkoficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q707530",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Cinemark","brand:wikidata":"Q707530","brand:wikipedia":"en:Cinemark Theatres",name:"Cinemark"},terms:[],matchScore:2,suggestion:true},"amenity/cinema/Cinemaxx (GermanyAndDenmark)":{name:"Cinemaxx (GermanyAndDenmark)",icon:"maki-cinema",imageURL:"https://graph.facebook.com/cinemaxx/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q881860",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Cinemaxx","brand:wikidata":"Q881860","brand:wikipedia":"de:Cinemaxx;da:CinemaxX",name:"Cinemaxx"},countryCodes:["de","dk"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Cinemaxx (Indonesia)":{name:"Cinemaxx (Indonesia)",icon:"maki-cinema",imageURL:"https://graph.facebook.com/cinemaxxtheater/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19942740",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Cinemaxx","brand:wikidata":"Q19942740","brand:wikipedia":"id:Cinemaxx",name:"Cinemaxx"},countryCodes:["id"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Cinemex":{name:"Cinemex",icon:"maki-cinema",imageURL:"https://graph.facebook.com/Cinemex/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3333072",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Cinemex","brand:wikidata":"Q3333072","brand:wikipedia":"en:Cinemex",name:"Cinemex"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Cineplanet":{name:"Cineplanet",icon:"maki-cinema",imageURL:"https://graph.facebook.com/cineplanet/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5769680",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Cineplanet","brand:wikidata":"Q5769680","brand:wikipedia":"es:Cineplanet",name:"Cineplanet",operator:"Grupo Intercorp","operator:wikidata":"Q23008916","operator:wikipedia":"es:Intercorp"},terms:[],matchScore:2,suggestion:true},"amenity/cinema/Cineplexx":{name:"Cineplexx",icon:"maki-cinema",imageURL:"https://pbs.twimg.com/profile_images/1125406971023306754/aVpG7gAl_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q873340",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Cineplexx","brand:wikidata":"Q873340","brand:wikipedia":"en:Cineplexx Cinemas",name:"Cineplexx"},terms:[],matchScore:2,suggestion:true},"amenity/cinema/Cinepolis":{name:"Cinepolis",icon:"maki-cinema",imageURL:"https://graph.facebook.com/cinepolisbrasil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5686673",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Cinepolis","brand:wikidata":"Q5686673","brand:wikipedia":"en:Cinépolis",name:"Cinepolis"},terms:[],matchScore:2,suggestion:true},"amenity/cinema/Cineworld":{name:"Cineworld",icon:"maki-cinema",imageURL:"https://graph.facebook.com/cineworld/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5120901",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Cineworld","brand:wikidata":"Q5120901","brand:wikipedia":"en:Cineworld",name:"Cineworld"},terms:[],matchScore:2,suggestion:true},"amenity/cinema/MOVIX":{name:"MOVIX",icon:"maki-cinema",geometry:["point","area"],tags:{"brand:wikidata":"Q11532184",amenity:"cinema"},addTags:{amenity:"cinema",brand:"MOVIX","brand:wikidata":"Q11532184","brand:wikipedia":"ja:松竹マルチプレックスシアターズ",name:"MOVIX",official_name:"松竹マルチプレックスシアターズ","official_name:en":"Shochiku Multiplex Theatres",operator:"株式会社松竹マルチプレックスシアターズ","operator:en":"Shochiku Multiplex Theatres, Ltd."},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Multikino":{name:"Multikino",icon:"maki-cinema",imageURL:"https://graph.facebook.com/MultikinoPolska/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1144802",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Multikino","brand:wikidata":"Q1144802","brand:wikipedia":"pl:Multikino",name:"Multikino"},countryCodes:["lt","lv","pl"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Odeon":{name:"Odeon",icon:"maki-cinema",imageURL:"https://graph.facebook.com/ODEON/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6127470",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Odeon","brand:wikidata":"Q6127470","brand:wikipedia":"en:Odeon Cinemas",name:"Odeon"},terms:[],matchScore:2,suggestion:true},"amenity/cinema/TOHOシネマズ":{name:"TOHOシネマズ",icon:"maki-cinema",geometry:["point","area"],tags:{"brand:wikidata":"Q11235261",amenity:"cinema"},addTags:{amenity:"cinema",brand:"TOHOシネマズ","brand:en":"TOHO CINEMAS","brand:ja":"TOHOシネマズ","brand:wikidata":"Q11235261","brand:wikipedia":"ja:TOHOシネマズ",name:"TOHOシネマズ","name:en":"Toho Cinemas","name:ja":"TOHOシネマズ",operator:"TOHOシネマズ株式会社","operator:en":"TOHO CINEMAS LTD."},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/The Space Cinema":{name:"The Space Cinema",icon:"maki-cinema",imageURL:"https://graph.facebook.com/TheSpaceCinema/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3989406",amenity:"cinema"},addTags:{amenity:"cinema",brand:"The Space Cinema","brand:wikidata":"Q3989406","brand:wikipedia":"it:The Space Cinema",name:"The Space Cinema"},countryCodes:["it"],terms:["The Space"],matchScore:2,suggestion:true},"amenity/cinema/Vue (IrelandAndUK)":{name:"Vue (IrelandAndUK)",icon:"maki-cinema",imageURL:"https://graph.facebook.com/VueCinemas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2535134",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Vue","brand:wikidata":"Q2535134","brand:wikipedia":"en:Vue Cinemas",name:"Vue"},countryCodes:["gb","ie"],terms:["vue cinema"],matchScore:2,suggestion:true},"amenity/cinema/Vue (Netherlands)":{name:"Vue (Netherlands)",icon:"maki-cinema",imageURL:"https://graph.facebook.com/vuecinemasnl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2421690",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Vue","brand:wikidata":"Q2421690","brand:wikipedia":"nl:Vue (bioscoopketen)",name:"Vue"},countryCodes:["nl"],terms:["vue cinema"],matchScore:2,suggestion:true},"amenity/cinema/イオンシネマ":{name:"イオンシネマ",icon:"maki-cinema",geometry:["point","area"],tags:{"brand:wikidata":"Q17192792",amenity:"cinema"},addTags:{amenity:"cinema",brand:"イオンシネマ","brand:en":"AEON Cinema","brand:ja":"イオンシネマ","brand:wikidata":"Q17192792","brand:wikipedia":"ja:イオンエンターテイメント",name:"イオンシネマ","name:en":"AEON Cinema","name:ja":"イオンシネマ",operator:"イオンエンターテイメント株式会社","operator:en":"Aeon Entertainment Co., Ltd."},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/ユナイテッド・シネマ":{name:"ユナイテッド・シネマ",icon:"maki-cinema",imageURL:"https://graph.facebook.com/unitedcinemasgroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11345629",amenity:"cinema"},addTags:{amenity:"cinema",brand:"ユナイテッド・シネマ","brand:en":"United Cinemas","brand:ja":"ユナイテッド・シネマ","brand:wikidata":"Q11345629","brand:wikipedia":"ja:ユナイテッド・シネマ",name:"ユナイテッド・シネマ","name:en":"United Cinemas","name:ja":"ユナイテッド・シネマ",operator:"ユナイテッド・シネマ株式会社","operator:en":"UNITED CINEMAS CO., LTD."},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/clinic/DaVita Dialysis":{name:"DaVita Dialysis",icon:"maki-doctor",imageURL:"https://graph.facebook.com/davitakidneycare/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5207184",amenity:"clinic"},addTags:{amenity:"clinic",brand:"DaVita Dialysis","brand:wikidata":"Q5207184",healthcare:"dialysis","healthcare:speciality":"dialysis",name:"DaVita Dialysis"},reference:{key:"amenity",value:"clinic"},countryCodes:["us"],terms:["davita","davita kidney care"],matchScore:2,suggestion:true},"amenity/clinic/Dialysis Clinic":{name:"Dialysis Clinic",icon:"maki-doctor",imageURL:"https://graph.facebook.com/davitakidneycare/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5207184",amenity:"clinic"},addTags:{amenity:"clinic",brand:"Dialysis Clinic","brand:wikidata":"Q5207184","brand:wikipedia":"en:Dialysis Clinic, Inc.",healthcare:"dialysis","healthcare:speciality":"dialysis",name:"Dialysis Clinic",short_name:"DCI"},reference:{key:"amenity",value:"clinic"},countryCodes:["us"],terms:["dci","dialysis clinic inc"],matchScore:2,suggestion:true},"amenity/clinic/Fresenius Kidney Care":{name:"Fresenius Kidney Care",icon:"maki-doctor",imageURL:"https://graph.facebook.com/freseniuskidneycare/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q650259",amenity:"clinic"},addTags:{amenity:"clinic",brand:"Fresenius Kidney Care","brand:wikidata":"Q650259","brand:wikipedia":"en:Fresenius Medical Care",healthcare:"dialysis","healthcare:speciality":"dialysis",name:"Fresenius Kidney Care"},reference:{key:"amenity",value:"clinic"},terms:[],matchScore:2,suggestion:true},"amenity/clinic/Fresenius Medical Care":{name:"Fresenius Medical Care",icon:"maki-doctor",imageURL:"https://graph.facebook.com/freseniuskidneycare/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q650259",amenity:"clinic"},addTags:{amenity:"clinic",brand:"Fresenius Medical Care","brand:wikidata":"Q650259","brand:wikipedia":"en:Fresenius Medical Care",healthcare:"dialysis","healthcare:speciality":"dialysis",name:"Fresenius Medical Care"},reference:{key:"amenity",value:"clinic"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/clinic/Satellite Healthcare":{name:"Satellite Healthcare",icon:"maki-doctor",imageURL:"https://graph.facebook.com/satellitehealthcare/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q50039787",amenity:"clinic"},addTags:{amenity:"clinic",brand:"Satellite Healthcare","brand:wikidata":"Q50039787",healthcare:"dialysis","healthcare:speciality":"dialysis",name:"Satellite Healthcare"},reference:{key:"amenity",value:"clinic"},countryCodes:["us"],terms:["satellite","satellite dialysis"],matchScore:2,suggestion:true},"amenity/dentist/Aspen Dental":{name:"Aspen Dental",icon:"maki-dentist",imageURL:"https://graph.facebook.com/AspenDental/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4807808",amenity:"dentist"},addTags:{amenity:"dentist",brand:"Aspen Dental","brand:wikidata":"Q4807808","brand:wikipedia":"en:Aspen Dental",healthcare:"dentist",name:"Aspen Dental"},reference:{key:"amenity",value:"dentist"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/A&W (Canada)":{name:"A&W (Canada)",icon:"maki-fast-food",imageURL:"https://pbs.twimg.com/profile_images/434046919812214784/sTmhuLO-_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q2818848",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"A&W","brand:wikidata":"Q2818848","brand:wikipedia":"en:A&W (Canada)",cuisine:"burger",name:"A&W",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/A&W (USA)":{name:"A&W (USA)",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/awrestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q277641",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"A&W","brand:wikidata":"Q277641","brand:wikipedia":"en:A&W Restaurants",cuisine:"burger",name:"A&W",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Andok's":{name:"Andok's",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/andokslitsonmanok/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62267166",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Andok's","brand:wikidata":"Q62267166",cuisine:"chicken",name:"Andok's",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Angel's Burger":{name:"Angel's Burger",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/angelsburgerofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62267228",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Angel's Burger","brand:wikidata":"Q62267228",cuisine:"burger",name:"Angel's Burger",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Arby's":{name:"Arby's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/arbys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q630866",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Arby's","brand:wikidata":"Q630866","brand:wikipedia":"en:Arby's",cuisine:"sandwich",name:"Arby's",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Au Bon Pain":{name:"Au Bon Pain",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/aubonpain/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4818942",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Au Bon Pain","brand:wikidata":"Q4818942","brand:wikipedia":"en:Au Bon Pain",cuisine:"sandwich",name:"Au Bon Pain",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["in","th","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Auntie Anne's":{name:"Auntie Anne's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/auntieannespretzels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4822010",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Auntie Anne's","brand:wikidata":"Q4822010","brand:wikipedia":"en:Auntie Anne's",cuisine:"pretzel",name:"Auntie Anne's",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Baja Fresh":{name:"Baja Fresh",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/bajafresh/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2880019",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Baja Fresh","brand:wikidata":"Q2880019","brand:wikipedia":"en:Baja Fresh",cuisine:"mexican",name:"Baja Fresh",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Bembos":{name:"Bembos",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/bembos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q466971",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Bembos","brand:wikidata":"Q466971","brand:wikipedia":"en:Bembos",cuisine:"burger",name:"Bembos",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Bob's":{name:"Bob's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/bobsbrasil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1392113",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Bob's","brand:wikidata":"Q1392113","brand:wikipedia":"en:Bob's",cuisine:"burger",name:"Bob's",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["ao","br","cl","pt"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Bojangles'":{name:"Bojangles'",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/Bojangles1977/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q891163",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Bojangles'","brand:wikidata":"Q891163","brand:wikipedia":"en:Bojangles' Famous Chicken 'n Biscuits",cuisine:"chicken",name:"Bojangles'",official_name:"Bojangles' Famous Chicken 'n Biscuits",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Booster Juice":{name:"Booster Juice",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/boosterjuice/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4943796",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Booster Juice","brand:wikidata":"Q4943796","brand:wikipedia":"en:Booster Juice",cuisine:"juice",name:"Booster Juice",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Boston Market":{name:"Boston Market",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/BostonMarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q603617",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Boston Market","brand:wikidata":"Q603617","brand:wikipedia":"en:Boston Market",cuisine:"american",name:"Boston Market",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/ice_cream/Braum's":{name:"Braum's",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/BraumsIceCreamandDairyStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4958263",amenity:"fast_food",cuisine:"ice_cream"},addTags:{amenity:"fast_food",brand:"Braum's","brand:wikidata":"Q4958263","brand:wikipedia":"en:Braum's",cuisine:"ice_cream",name:"Braum's",shop:"dairy",takeaway:"yes"},reference:{key:"cuisine",value:"ice_cream"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Bruegger's Bagels":{name:"Bruegger's Bagels",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/Brueggers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4978656",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Bruegger's Bagels","brand:wikidata":"Q4978656","brand:wikipedia":"en:Bruegger's",cuisine:"bagel",name:"Bruegger's Bagels",takeaway:"yes"},countryCodes:["us"],terms:["breuger's","breugger's","bruegger's","bruger's","brugger's"],matchScore:2,suggestion:true},"amenity/fast_food/burger/Burger King":{name:"Burger King",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/burgerking/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q177054",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Burger King","brand:wikidata":"Q177054","brand:wikipedia":"en:Burger King",cuisine:"burger",name:"Burger King",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:["burguer king"],matchScore:2,suggestion:true},"amenity/fast_food/burger/Burger Machine":{name:"Burger Machine",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/burgermachineofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4998549",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Burger Machine","brand:wikidata":"Q4998549","brand:wikipedia":"en:Burger Machine",cuisine:"burger",name:"Burger Machine",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/BurgerFi":{name:"BurgerFi",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/BurgerFi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q39045496",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"BurgerFi","brand:wikidata":"Q39045496","brand:wikipedia":"en:BurgerFi",cuisine:"burger",name:"BurgerFi",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Captain D's":{name:"Captain D's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/CaptainDs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5036616",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Captain D's","brand:wikidata":"Q5036616","brand:wikipedia":"en:Captain D's",cuisine:"seafood",name:"Captain D's",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Carl's Jr.":{name:"Carl's Jr.",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/carlsjr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1043486",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Carl's Jr.","brand:wikidata":"Q1043486","brand:wikipedia":"en:Carl's Jr.",cuisine:"burger",name:"Carl's Jr.",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Charleys Philly Steaks":{name:"Charleys Philly Steaks",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/CharleysPhillySteaks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1066777",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Charleys Philly Steaks","brand:wikidata":"Q1066777","brand:wikipedia":"en:Charleys Philly Steaks",cuisine:"sandwich",name:"Charleys Philly Steaks",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:["charleys"],matchScore:2,suggestion:true},"amenity/fast_food/burger/Checkers":{name:"Checkers",icon:"maki-fast-food",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCheckers%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q63919315",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Checkers","brand:wikidata":"Q63919315",cuisine:"burger",name:"Checkers",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Chick-fil-A":{name:"Chick-fil-A",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/ChickfilA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q491516",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Chick-fil-A","brand:wikidata":"Q491516","brand:wikipedia":"en:Chick-fil-A",cuisine:"chicken",name:"Chick-fil-A",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Chicken Express":{name:"Chicken Express",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/chickenexpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5096235",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Chicken Express","brand:wikidata":"Q5096235","brand:wikipedia":"en:Chicken Express",cuisine:"chicken",name:"Chicken Express",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/China Wok":{name:"China Wok",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/ChinaWokPeru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5766542",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"China Wok","brand:wikidata":"Q5766542","brand:wikipedia":"es:China Wok",cuisine:"chinese",name:"China Wok",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Chipotle":{name:"Chipotle",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/chipotle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q465751",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Chipotle","brand:wikidata":"Q465751","brand:wikipedia":"en:Chipotle Mexican Grill",cuisine:"mexican",name:"Chipotle",official_name:"Chipotle Mexican Grill",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},terms:["chipotle mexican grill"],matchScore:2,suggestion:true},"amenity/fast_food/Chopt":{name:"Chopt",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/choptsalad/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17509305",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Chopt","brand:wikidata":"Q17509305","brand:wikipedia":"en:Chopt",cuisine:"salad",name:"Chopt",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Chowking":{name:"Chowking",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/chowkingph/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1076816",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Chowking","brand:wikidata":"Q1076816","brand:wikipedia":"en:Chowking",cuisine:"asian",name:"Chowking",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Church's Chicken":{name:"Church's Chicken",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/churchschicken/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1089932",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Church's Chicken","brand:wikidata":"Q1089932","brand:wikipedia":"en:Church's Chicken",cuisine:"chicken",name:"Church's Chicken",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Cinnabon":{name:"Cinnabon",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/Cinnabon/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1092539",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Cinnabon","brand:website":"https://www.cinnabon.com/","brand:wikidata":"Q1092539","brand:wikipedia":"en:Cinnabon",cuisine:"dessert",name:"Cinnabon",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/CoCo壱番屋":{name:"CoCo壱番屋",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/cocoichicurry/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5986105",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"CoCo壱番屋","brand:en":"Ichibanya","brand:wikidata":"Q5986105","brand:wikipedia":"en:Ichibanya",cuisine:"japanese",name:"CoCo壱番屋","name:en":"Ichibanya",takeaway:"yes"},countryCodes:["cn","jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Cook Out":{name:"Cook Out",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/CookOut/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5166992",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Cook Out","brand:wikidata":"Q5166992","brand:wikipedia":"en:Cook Out (restaurant)",cuisine:"american",name:"Cook Out",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Culver's":{name:"Culver's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/culvers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1143589",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Culver's","brand:wikidata":"Q1143589","brand:wikipedia":"en:Culver's",cuisine:"burger",name:"Culver's",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/ice_cream/DQ Grill & Chill":{name:"DQ Grill & Chill",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/dairyqueen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1141226",amenity:"fast_food",cuisine:"ice_cream;burger"},addTags:{amenity:"fast_food",brand:"DQ Grill & Chill","brand:wikidata":"Q1141226","brand:wikipedia":"en:Dairy Queen",cuisine:"ice_cream;burger",name:"DQ Grill & Chill",takeaway:"yes"},reference:{key:"cuisine",value:"ice_cream"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/ice_cream/Dairy Queen":{name:"Dairy Queen",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/dairyqueen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1141226",amenity:"fast_food",cuisine:"ice_cream;burger"},addTags:{amenity:"fast_food",brand:"Dairy Queen","brand:wikidata":"Q1141226","brand:wikipedia":"en:Dairy Queen",cuisine:"ice_cream;burger",name:"Dairy Queen",takeaway:"yes"},reference:{key:"cuisine",value:"ice_cream"},terms:["dq"],matchScore:2,suggestion:true},"amenity/fast_food/donut/Daylight Donuts":{name:"Daylight Donuts",icon:"temaki-donut",imageURL:"https://graph.facebook.com/DaylightDonutFlourCo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48970508",amenity:"fast_food",cuisine:"donut"},addTags:{amenity:"fast_food",brand:"Daylight Donuts","brand:wikidata":"Q48970508","brand:wikipedia":"en:Daylight Donuts",cuisine:"donut",name:"Daylight Donuts",takeaway:"yes"},reference:{key:"cuisine",value:"donut"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Del Taco":{name:"Del Taco",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/deltaco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1183818",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Del Taco","brand:wikidata":"Q1183818","brand:wikipedia":"en:Del Taco",cuisine:"mexican",name:"Del Taco",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Dig Inn":{name:"Dig Inn",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/diginnmarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28226241",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Dig Inn","brand:wikidata":"Q28226241","brand:wikipedia":"en:Dig Inn",cuisine:"regional",name:"Dig Inn",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Domino's Pizza":{name:"Domino's Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/Dominos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q839466",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Domino's Pizza","brand:wikidata":"Q839466","brand:wikipedia":"en:Domino's Pizza",cuisine:"pizza",name:"Domino's Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:["dominos"],matchScore:2,suggestion:true},"amenity/fast_food/donut/Dunkin' Donuts":{name:"Dunkin' Donuts",icon:"temaki-donut",imageURL:"https://graph.facebook.com/DunkinUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q847743",amenity:"fast_food",cuisine:"donut;coffee"},addTags:{amenity:"fast_food",brand:"Dunkin' Donuts","brand:wikidata":"Q847743","brand:wikipedia":"en:Dunkin' Donuts",cuisine:"donut;coffee",name:"Dunkin' Donuts",takeaway:"yes"},reference:{key:"cuisine",value:"donut"},terms:["dunkin doughnuts"],matchScore:2,suggestion:true},"amenity/fast_food/Einstein Bros. Bagels":{name:"Einstein Bros. Bagels",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/einsteinbros/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5349788",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Einstein Bros. Bagels","brand:wikidata":"Q5349788","brand:wikipedia":"en:Einstein Bros. Bagels",cuisine:"bagel",name:"Einstein Bros. Bagels",takeaway:"yes"},countryCodes:["us"],terms:["einstein bros","einstein brothers","einstein brothers bagels"],matchScore:2,suggestion:true},"amenity/fast_food/mexican/El Pollo Loco":{name:"El Pollo Loco",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/ElPolloLoco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2353849",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"El Pollo Loco","brand:wikidata":"Q2353849","brand:wikipedia":"en:El Pollo Loco",cuisine:"mexican",name:"El Pollo Loco",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Everest":{name:"Everest",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/everest.gr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62273299",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Everest","brand:wikidata":"Q62273299",cuisine:"burger",name:"Everest",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Extreme Pita":{name:"Extreme Pita",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/TheExtremePita/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5422367",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Extreme Pita","brand:wikidata":"Q5422367","brand:wikipedia":"en:Extreme Pita",cuisine:"pita",name:"Extreme Pita",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Fazoli's":{name:"Fazoli's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/Fazolis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1399195",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Fazoli's","brand:wikidata":"Q1399195","brand:wikipedia":"en:Fazoli's",cuisine:"italian",name:"Fazoli's",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Firehouse Subs":{name:"Firehouse Subs",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/firehousesubs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5451873",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Firehouse Subs","brand:wikidata":"Q5451873","brand:wikipedia":"en:Firehouse Subs",cuisine:"sandwich",name:"Firehouse Subs",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Five Guys":{name:"Five Guys",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/fiveguys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1131810",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Five Guys","brand:wikidata":"Q1131810","brand:wikipedia":"en:Five Guys",cuisine:"burger",name:"Five Guys",official_name:"Five Guys Burgers and Fries",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:["five guys burgers and fries"],matchScore:2,suggestion:true},"amenity/fast_food/ice_cream/Freddy's":{name:"Freddy's",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/FreddysUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5496837",amenity:"fast_food",cuisine:"ice_cream;burger"},addTags:{amenity:"fast_food",brand:"Freddy's","brand:wikidata":"Q5496837","brand:wikipedia":"en:Freddy's Frozen Custard & Steakburgers",cuisine:"ice_cream;burger",name:"Freddy's",takeaway:"yes"},reference:{key:"cuisine",value:"ice_cream"},terms:["freddy's frozen custard & steakburgers"],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Freebirds":{name:"Freebirds",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/freebirdsworldburrito/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5500367",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Freebirds","brand:wikidata":"Q5500367","brand:wikipedia":"en:Freebirds World Burrito",cuisine:"mexican",name:"Freebirds",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Gabriel Pizza":{name:"Gabriel Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/gabrielpizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5515791",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Gabriel Pizza","brand:wikidata":"Q5515791","brand:wikipedia":"en:Gabriel Pizza",cuisine:"pizza",name:"Gabriel Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Gold Star Chili":{name:"Gold Star Chili",icon:"maki-fast-food",imageURL:"https://pbs.twimg.com/profile_images/850405811494895617/FZSowiLf_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q16994254",amenity:"fast_food"},addTags:{alt_name:"Gold Star",amenity:"fast_food",brand:"Gold Star Chili","brand:wikidata":"Q16994254","brand:wikipedia":"en:Gold Star Chili",cuisine:"chili",name:"Gold Star Chili",takeaway:"yes"},countryCodes:["us"],terms:["gold star"],matchScore:2,suggestion:true},"amenity/fast_food/Golden Krust Caribbean Bakery & Grill":{name:"Golden Krust Caribbean Bakery & Grill",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/GoldenKrust/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5579615",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Golden Krust Caribbean Bakery & Grill","brand:wikidata":"Q5579615","brand:wikipedia":"en:Golden Krust Caribbean Bakery & Grill",cuisine:"caribbean",name:"Golden Krust",takeaway:"yes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Greenwich":{name:"Greenwich",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/GreenwichPizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2691308",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Greenwich","brand:wikidata":"Q2691308","brand:wikipedia":"en:Greenwich Pizza",cuisine:"pizza",name:"Greenwich",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Habib's":{name:"Habib's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/habibsoficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2504930",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Habib's","brand:wikidata":"Q2504930","brand:wikipedia":"en:Habib's",cuisine:"middle_eastern",name:"Habib's",takeaway:"yes"},countryCodes:["br","mx"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Hallo Pizza":{name:"Hallo Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/Hallo.Pizza.Deutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1571798",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Hallo Pizza","brand:wikidata":"Q1571798","brand:wikipedia":"de:Hallo Pizza",cuisine:"pizza",name:"Hallo Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Hardee's":{name:"Hardee's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/hardees/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1585088",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Hardee's","brand:wikidata":"Q1585088","brand:wikipedia":"en:Hardee's",cuisine:"burger",name:"Hardee's",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Harvey's":{name:"Harvey's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/HarveysCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1466184",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Harvey's","brand:wikidata":"Q1466184","brand:wikipedia":"en:Harvey's",cuisine:"burger",name:"Harvey's",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Hesburger":{name:"Hesburger",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/hesburger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1276832",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Hesburger","brand:wikidata":"Q1276832","brand:wikipedia":"en:Hesburger",cuisine:"burger",name:"Hesburger",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Hot Dog on a Stick":{name:"Hot Dog on a Stick",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/HotDogonaStick/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5909922",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Hot Dog on a Stick","brand:wikidata":"Q5909922","brand:wikipedia":"en:Hot Dog on a Stick",cuisine:"hot_dog",name:"Hot Dog on a Stick",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Hot Head Burritos":{name:"Hot Head Burritos",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/HotHeadBurritos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5910008",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Hot Head Burritos","brand:wikidata":"Q5910008","brand:wikipedia":"en:Hot Head Burritos",cuisine:"mexican",name:"Hot Head Burritos",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:["hot head"],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Hungry Howie's":{name:"Hungry Howie's",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/hungryhowies/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16985303",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Hungry Howie's","brand:wikidata":"Q16985303","brand:wikipedia":"en:Hungry Howie's Pizza",cuisine:"pizza",name:"Hungry Howie's",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:["hungry howies pizza"],matchScore:2,suggestion:true},"amenity/fast_food/burger/Hungry Jacks":{name:"Hungry Jacks",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/HungryJacks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3036373",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Hungry Jacks","brand:wikidata":"Q3036373","brand:wikipedia":"en:Hungry Jack's",cuisine:"burger",name:"Hungry Jacks",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/In-N-Out Burger":{name:"In-N-Out Burger",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/innout/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1205312",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"In-N-Out Burger","brand:wikidata":"Q1205312","brand:wikipedia":"en:In-N-Out Burger",cuisine:"burger",name:"In-N-Out Burger",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Jack in the Box":{name:"Jack in the Box",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/jackinthebox/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1538507",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Jack in the Box","brand:wikidata":"Q1538507","brand:wikipedia":"en:Jack in the Box",cuisine:"burger",name:"Jack in the Box",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Jamba Juice":{name:"Jamba Juice",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/jambajuice/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3088784",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Jamba Juice","brand:wikidata":"Q3088784","brand:wikipedia":"en:Jamba Juice",cuisine:"juice",name:"Jamba Juice",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Jersey Mike's Subs":{name:"Jersey Mike's Subs",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/jerseymikes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6184897",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Jersey Mike's Subs","brand:wikidata":"Q6184897","brand:wikipedia":"en:Jersey Mike's Subs",cuisine:"sandwich",name:"Jersey Mike's Subs",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},terms:["jersey mikes"],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Jimmy John's":{name:"Jimmy John's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/jimmyjohns/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1689380",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Jimmy John's","brand:wikidata":"Q1689380","brand:wikipedia":"en:Jimmy John's",cuisine:"sandwich",name:"Jimmy John's",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Jollibee":{name:"Jollibee",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/JollibeePhilippines/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q37614",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Jollibee","brand:wikidata":"Q37614","brand:wikipedia":"en:Jollibee",cuisine:"burger",name:"Jollibee",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Just Salad":{name:"Just Salad",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/justsalad/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23091823",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Just Salad","brand:wikidata":"Q23091823","brand:wikipedia":"en:Just Salad",cuisine:"salad",name:"Just Salad",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/KFC":{name:"KFC",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/KFC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q524757",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"KFC","brand:wikidata":"Q524757","brand:wikipedia":"en:KFC",cuisine:"chicken",name:"KFC",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},terms:["kentucky fried chicken"],matchScore:2,suggestion:true},"amenity/fast_food/burger/Kochlöffel":{name:"Kochlöffel",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/Kochloeffel.Deutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q315539",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Kochlöffel","brand:wikidata":"Q315539","brand:wikipedia":"en:Kochlöffel",cuisine:"burger",name:"Kochlöffel",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["de","pl","tr"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Kotipizza":{name:"Kotipizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/kotipizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1628625",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Kotipizza","brand:wikidata":"Q1628625","brand:wikipedia":"en:Kotipizza",cuisine:"pizza",name:"Kotipizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/donut/Krispy Kreme":{name:"Krispy Kreme",icon:"temaki-donut",imageURL:"https://graph.facebook.com/KrispyKreme/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1192805",amenity:"fast_food",cuisine:"donut"},addTags:{amenity:"fast_food",brand:"Krispy Kreme","brand:wikidata":"Q1192805","brand:wikipedia":"en:Krispy Kreme",cuisine:"donut",name:"Krispy Kreme",takeaway:"yes"},reference:{key:"cuisine",value:"donut"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Krystal":{name:"Krystal",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/Krystal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q472195",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Krystal","brand:wikidata":"Q472195","brand:wikipedia":"en:Krystal (restaurant)",cuisine:"burger",name:"Krystal",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/L&L Drive-Inn (Hawaii)":{name:"L&L Drive-Inn (Hawaii)",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/hawaiianbarbecue/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6455441",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"L&L Drive-Inn","brand:wikidata":"Q6455441","brand:wikipedia":"en:L&L Hawaiian Barbecue",cuisine:"hawaiian",name:"L&L Drive-Inn",takeaway:"yes"},countryCodes:["us"],terms:["l&l","l&l drive-in"],matchScore:2,suggestion:true},"amenity/fast_food/L&L Hawaiian Barbecue":{name:"L&L Hawaiian Barbecue",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/hawaiianbarbecue/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6455441",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"L&L Hawaiian Barbecue","brand:wikidata":"Q6455441","brand:wikipedia":"en:L&L Hawaiian Barbecue",cuisine:"hawaiian",name:"L&L Hawaiian Barbecue",takeaway:"yes"},terms:["l&l","l&l hawaiian bbq"],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Lee's Sandwiches":{name:"Lee's Sandwiches",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/LeesSandwiches/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6512823",amenity:"fast_food",cuisine:"vietnamese;sandwich"},addTags:{amenity:"fast_food",brand:"Lee's Sandwiches","brand:wikidata":"Q6512823","brand:wikipedia":"en:Lee's Sandwiches",cuisine:"vietnamese;sandwich",name:"Lee's Sandwiches",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Little Caesars":{name:"Little Caesars",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/LittleCaesars/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1393809",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Little Caesars","brand:wikidata":"Q1393809","brand:wikipedia":"en:Little Caesars",cuisine:"pizza",name:"Little Caesars",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:["little caesars pizza"],matchScore:2,suggestion:true},"amenity/fast_food/Long John Silver's":{name:"Long John Silver's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/LongJohnSilvers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1535221",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Long John Silver's","brand:wikidata":"Q1535221","brand:wikipedia":"en:Long John Silver's",cuisine:"seafood",name:"Long John Silver's",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Lotteria":{name:"Lotteria",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/ilovelotteria/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q249525",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Lotteria","brand:wikidata":"Q249525","brand:wikipedia":"en:Lotteria",cuisine:"burger",name:"Lotteria",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Manchu Wok":{name:"Manchu Wok",icon:"maki-fast-food",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FManchu%20Wok%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q6747622",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Manchu Wok","brand:wikidata":"Q6747622","brand:wikipedia":"en:Manchu Wok",cuisine:"chinese",name:"Manchu Wok",takeaway:"yes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Mang Inasal":{name:"Mang Inasal",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/MangInasalPhilippines/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6748573",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Mang Inasal","brand:wikidata":"Q6748573","brand:wikipedia":"en:Mang Inasal",cuisine:"barbecue",name:"Mang Inasal",takeaway:"yes"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Max":{name:"Max",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/maxburgers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1912172",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Max","brand:wikidata":"Q1912172","brand:wikipedia":"en:Max Hamburgers",cuisine:"burger",name:"Max",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/McDonald's":{name:"McDonald's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/mcdonalds/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q38076",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"en:McDonald's",cuisine:"burger",name:"McDonald's",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Mighty Taco":{name:"Mighty Taco",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/MyMightyTaco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6844210",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Mighty Taco","brand:wikidata":"Q6844210","brand:wikipedia":"en:Mighty Taco",cuisine:"mexican",name:"Mighty Taco",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Minute Burger":{name:"Minute Burger",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/MinuteBurger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62273503",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Minute Burger","brand:wikidata":"Q62273503",cuisine:"burger",name:"Minute Burger",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Moe's Southwest Grill":{name:"Moe's Southwest Grill",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/MoesSouthwestGrill/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6889938",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Moe's Southwest Grill","brand:wikidata":"Q6889938","brand:wikipedia":"en:Moe's Southwest Grill",cuisine:"mexican",name:"Moe's Southwest Grill",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Mr. Sub":{name:"Mr. Sub",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/mrsub/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6929225",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Mr. Sub","brand:wikidata":"Q6929225","brand:wikipedia":"en:Mr. Sub",cuisine:"sandwich",name:"Mr. Sub",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/New York Pizza":{name:"New York Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/newyorkpizza.nl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2639128",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"New York Pizza","brand:wikidata":"Q2639128","brand:wikipedia":"nl:New York Pizza",cuisine:"pizza",name:"New York Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Nordsee":{name:"Nordsee",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/NORDSEEDeutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q74866",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Nordsee","brand:wikidata":"Q74866","brand:wikipedia":"en:Nordsee",cuisine:"seafood",name:"Nordsee",takeaway:"yes"},countryCodes:["at","ch","de"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Num Pang":{name:"Num Pang",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/NumPangKitchen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62079702",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Num Pang","brand:wikidata":"Q62079702","brand:wikipedia":"en:Num Pang",cuisine:"cambodian, sandwich",name:"Num Pang",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/O'Tacos":{name:"O'Tacos",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/Otacos.France/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28494040",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"O'Tacos","brand:wikidata":"Q28494040","brand:wikipedia":"en:O'Tacos",cuisine:"mexican",name:"O'Tacos",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Oporto":{name:"Oporto",icon:"maki-fast-food",geometry:["point","area"],tags:{"brand:wikidata":"Q4412342",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Oporto","brand:wikidata":"Q4412342","brand:wikipedia":"en:Oporto (restaurant)",name:"Oporto",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Pal's":{name:"Pal's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/Palsweb/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7126094",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Pal's","brand:wikidata":"Q7126094","brand:wikipedia":"en:Pal's",cuisine:"burger",name:"Pal's",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:["pals sudden service"],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Panago":{name:"Panago",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/panago/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17111672",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Panago","brand:wikidata":"Q17111672","brand:wikipedia":"en:Panago",cuisine:"pizza",name:"Panago",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Panda Express":{name:"Panda Express",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/PandaExpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1358690",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Panda Express","brand:wikidata":"Q1358690","brand:wikipedia":"en:Panda Express",cuisine:"chinese",name:"Panda Express",takeaway:"yes"},terms:["panda"],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Panera Bread":{name:"Panera Bread",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/panerabread/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7130852",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Panera Bread","brand:wikidata":"Q7130852","brand:wikipedia":"en:Panera Bread",cuisine:"sandwich",name:"Panera Bread",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Papa John's":{name:"Papa John's",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/papajohns/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2759586",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Papa John's","brand:wikidata":"Q2759586","brand:wikipedia":"en:Papa John's Pizza",cuisine:"pizza",name:"Papa John's",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:["papa john","papa john pizza","papa johns pizza"],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Papa Murphy's":{name:"Papa Murphy's",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/papamurphyspizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7132349",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Papa Murphy's","brand:wikidata":"Q7132349","brand:wikipedia":"en:Papa Murphy's",cuisine:"pizza",name:"Papa Murphy's",official_name:"Papa Murphy's Take 'N' Bake Pizza",takeaway:"only"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca","us"],terms:["papa murphy","papa murphy pizza","papa murphys pizza"],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Penn Station":{name:"Penn Station",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/pennstation/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7163311",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Penn Station","brand:wikidata":"Q7163311","brand:wikipedia":"en:Penn Station (restaurant)",cuisine:"sandwich",name:"Penn Station",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Philly Pretzel Factory":{name:"Philly Pretzel Factory",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/PhillyPretzel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60097339",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Philly Pretzel Factory","brand:wikidata":"Q60097339",cuisine:"pretzel",name:"Philly Pretzel Factory",takeaway:"yes"},countryCodes:["us"],terms:["philadelphia pretzel factory","philadelphia soft pretzel factory","philly soft pretzel factory"],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Pinulito":{name:"Pinulito",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/elsabordenuestragente/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62273613",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Pinulito","brand:wikidata":"Q62273613",cuisine:"chicken",name:"Pinulito",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["gt"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Pita Pit":{name:"Pita Pit",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/pitapitusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7757289",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Pita Pit","brand:wikidata":"Q7757289","brand:wikipedia":"en:Pita Pit",cuisine:"pita",name:"Pita Pit",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Pizza Hut Delivery":{name:"Pizza Hut Delivery",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/pizzahutus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q191615",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Pizza Hut","brand:wikidata":"Q191615","brand:wikipedia":"en:Pizza Hut",cuisine:"pizza",name:"Pizza Hut Delivery",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Pizza Hut Express":{name:"Pizza Hut Express",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/pizzahutus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q191615",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Pizza Hut","brand:wikidata":"Q191615","brand:wikipedia":"en:Pizza Hut",cuisine:"pizza",name:"Pizza Hut Express",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Pizza Nova":{name:"Pizza Nova",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/PizzaNova/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7199971",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Pizza Nova","brand:wikidata":"Q7199971","brand:wikipedia":"en:Pizza Nova",cuisine:"pizza",name:"Pizza Nova",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Pizza Pizza":{name:"Pizza Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/PizzaPizzaCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1194143",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Pizza Pizza","brand:wikidata":"Q1194143","brand:wikipedia":"en:Pizza Pizza",cuisine:"pizza",name:"Pizza Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Pollo Campero":{name:"Pollo Campero",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/CamperoUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q942741",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Pollo Campero","brand:wikidata":"Q942741","brand:wikipedia":"en:Pollo Campero",cuisine:"chicken",name:"Pollo Campero",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Pollo Granjero (Costa Rica)":{name:"Pollo Granjero (Costa Rica)",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/PolloGranjeroCostaRica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62273665",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Pollo Granjero","brand:wikidata":"Q62273665",cuisine:"chicken",name:"Pollo Granjero",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["cr"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Pollo Granjero (Guatemala)":{name:"Pollo Granjero (Guatemala)",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/PolloGranjeroGuatemala/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62273652",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Pollo Granjero","brand:wikidata":"Q62273652",cuisine:"chicken",name:"Pollo Granjero",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["gt"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Pollo Tropical":{name:"Pollo Tropical",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/PolloTropical/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3395356",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Pollo Tropical","brand:wikidata":"Q3395356","brand:wikipedia":"en:Pollo Tropical",cuisine:"chicken",name:"Pollo Tropical",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Popeyes":{name:"Popeyes",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/PopeyesLouisianaKitchen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1330910",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Popeyes","brand:wikidata":"Q1330910","brand:wikipedia":"en:Popeyes",cuisine:"chicken",name:"Popeyes",official_name:"Popeyes Louisiana Kitchen",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},terms:["popeyes louisiana kitchen"],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Potbelly":{name:"Potbelly",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/potbellysandwichshop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7234777",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Potbelly","brand:wikidata":"Q7234777","brand:wikipedia":"en:Potbelly Sandwich Shop",cuisine:"sandwich",name:"Potbelly",official_name:"Potbelly Sandwich Works",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Pret A Manger":{name:"Pret A Manger",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/pretamangerusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2109109",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Pret A Manger","brand:wikidata":"Q2109109","brand:wikipedia":"en:Pret a Manger",cuisine:"sandwich",name:"Pret A Manger",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Qdoba":{name:"Qdoba",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/qdoba/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1363885",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Qdoba","brand:wikidata":"Q1363885","brand:wikipedia":"en:Qdoba",cuisine:"mexican",name:"Qdoba",official_name:"Qdoba Mexican Grill",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},terms:["qdoba mexican grill"],matchScore:2,suggestion:true},"amenity/fast_food/burger/Quick":{name:"Quick",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/QuickBelgium/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q286494",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Quick","brand:wikidata":"Q286494","brand:wikipedia":"en:Quick (restaurant)",cuisine:"burger",name:"Quick",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Quiznos":{name:"Quiznos",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/Quiznos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1936229",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Quiznos","brand:wikidata":"Q1936229","brand:wikipedia":"en:Quiznos",cuisine:"sandwich",name:"Quiznos",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},terms:["quiznos sub","quiznos subs"],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Raising Cane's":{name:"Raising Cane's",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/RaisingCanesChickenFingers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7285144",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Raising Cane's","brand:wikidata":"Q7285144","brand:wikipedia":"en:Raising Cane's Chicken Fingers",cuisine:"chicken",name:"Raising Cane's",official_name:"Raising Cane's Chicken Fingers",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["us"],terms:["raising canes chicken fingers"],matchScore:2,suggestion:true},"amenity/fast_food/burger/Rally's":{name:"Rally's",icon:"maki-fast-food",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FRally's%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q63919323",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Rally's","brand:wikidata":"Q63919323",cuisine:"burger",name:"Rally's",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Red Rooster":{name:"Red Rooster",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/RedRoosterAU/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q376466",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Red Rooster","brand:wikidata":"Q376466","brand:wikipedia":"en:Red Rooster",cuisine:"chicken",name:"Red Rooster",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Roy Rogers":{name:"Roy Rogers",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/RoyRogersRestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7373311",amenity:"fast_food",cuisine:"burger;sandwich;chicken"},addTags:{amenity:"fast_food",brand:"Roy Rogers","brand:wikidata":"Q7373311","brand:wikipedia":"en:Roy Rogers Restaurants",cuisine:"burger;sandwich;chicken",name:"Roy Rogers",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Sbarro":{name:"Sbarro",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/Sbarro/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2589409",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Sbarro","brand:wikidata":"Q2589409","brand:wikipedia":"en:Sbarro",cuisine:"pizza",name:"Sbarro",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Schlotzsky's":{name:"Schlotzsky's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/Schlotzskys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2244796",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Schlotzsky's","brand:wikidata":"Q2244796","brand:wikipedia":"en:Schlotzsky's",cuisine:"sandwich",name:"Schlotzsky's",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:["schlotzskys deli"],matchScore:2,suggestion:true},"amenity/fast_food/burger/Shake Shack":{name:"Shake Shack",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/shakeshack/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1058722",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Shake Shack","brand:wikidata":"Q1058722","brand:wikipedia":"en:Shake Shack",cuisine:"burger",name:"Shake Shack",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Sibylla":{name:"Sibylla",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/sibyllasverige/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q488643",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Sibylla","brand:wikidata":"Q488643","brand:wikipedia":"en:Sibylla (fast food)",cuisine:"burger",name:"Sibylla",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["fi","se"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Smashburger":{name:"Smashburger",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/smashburger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17061332",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Smashburger","brand:wikidata":"Q17061332","brand:wikipedia":"en:Smashburger",cuisine:"burger",name:"Smashburger",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Smoothie King":{name:"Smoothie King",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/SmoothieKing/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5491421",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Smoothie King","brand:wikidata":"Q5491421","brand:wikipedia":"en:Smoothie King",cuisine:"juice",name:"Smoothie King",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Sonic":{name:"Sonic",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/sonicdrivein/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7561808",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Sonic","brand:wikidata":"Q7561808","brand:wikipedia":"en:Sonic Drive-In",cuisine:"burger",name:"Sonic",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:["sonic drive in"],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Steak Escape":{name:"Steak Escape",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/steakescape/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7605235",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Steak Escape","brand:wikidata":"Q7605235","brand:wikipedia":"en:Steak Escape",cuisine:"sandwich",name:"Steak Escape",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Steers":{name:"Steers",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/OfficialSteers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q56599145",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Steers","brand:wikidata":"Q56599145","brand:wikipedia":"en:Steers",cuisine:"burger",name:"Steers",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Subway":{name:"Subway",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/subway/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q244457",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Subway","brand:wikidata":"Q244457","brand:wikipedia":"en:Subway (restaurant)",cuisine:"sandwich",name:"Subway",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},terms:["subway sandwiches"],matchScore:2,suggestion:true},"amenity/fast_food/burger/Supermac's":{name:"Supermac's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/supermacsofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7643750",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Supermac's","brand:wikidata":"Q7643750","brand:wikipedia":"en:Supermac's",cuisine:"burger",name:"Supermac's",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/TCBY":{name:"TCBY",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/tcby/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7669631",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"TCBY","brand:wikidata":"Q7669631","brand:wikipedia":"en:TCBY",cuisine:"frozen_yogurt",name:"TCBY",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Taco Bell":{name:"Taco Bell",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/tacobell/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q752941",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Taco Bell","brand:wikidata":"Q752941","brand:wikipedia":"en:Taco Bell",cuisine:"tex-mex",name:"Taco Bell",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Taco Bueno":{name:"Taco Bueno",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/buenoheadquarters/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7673958",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Taco Bueno","brand:wikidata":"Q7673958","brand:wikipedia":"en:Taco Bueno",cuisine:"mexican",name:"Taco Bueno",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Taco Cabana":{name:"Taco Cabana",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/TacoCabana/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12070488",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Taco Cabana","brand:wikidata":"Q12070488","brand:wikipedia":"en:Taco Cabana",cuisine:"mexican",name:"Taco Cabana",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Taco Del Mar":{name:"Taco Del Mar",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/tacodelmarcorp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7673972",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Taco Del Mar","brand:wikidata":"Q7673972","brand:wikipedia":"en:Taco del Mar",cuisine:"mexican",name:"Taco Del Mar",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Taco John's":{name:"Taco John's",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/tacojohns/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7673962",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Taco John's","brand:wikidata":"Q7673962","brand:wikipedia":"en:Taco John's",cuisine:"mexican",name:"Taco John's",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Taco Time":{name:"Taco Time",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/tacotime/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7673969",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Taco Time","brand:wikidata":"Q7673969","brand:wikipedia":"en:Taco Time",cuisine:"mexican",name:"Taco Time",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Ted’s Hot Dogs":{name:"Ted’s Hot Dogs",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/TedsHotDogs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7692930",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Ted’s Hot Dogs","brand:wikidata":"Q7692930","brand:wikipedia":"en:Ted's Hot Dogs",cuisine:"sausage",name:"Ted’s Hot Dogs",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Telepizza":{name:"Telepizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/telepizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2699863",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Telepizza","brand:wikidata":"Q2699863","brand:wikipedia":"en:Telepizza",cuisine:"pizza",name:"Telepizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Thai Express (Singapore)":{name:"Thai Express (Singapore)",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/ThaiExpressSG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7709119",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Thai Express","brand:wikidata":"Q7709119","brand:wikipedia":"en:Thai Express",cuisine:"thai",name:"Thai Express",takeaway:"yes"},countryCodes:["sg"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Thaï Express (North America)":{name:"Thaï Express (North America)",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/EatThaiExpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7711610",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Thaï Express","brand:wikidata":"Q7711610","brand:wikipedia":"en:Thaï Express",cuisine:"thai",name:"Thaï Express",takeaway:"yes"},countryCodes:["ca","us"],terms:["thai express"],matchScore:2,suggestion:true},"amenity/fast_food/burger/The Habit Burger Grill":{name:"The Habit Burger Grill",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/habitburger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18158741",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"The Habit Burger Grill","brand:wikidata":"Q18158741","brand:wikipedia":"en:The Habit Burger Grill",cuisine:"burger",name:"The Habit Burger Grill",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:["habit burger","the habit burger"],matchScore:2,suggestion:true},"amenity/fast_food/pizza/The Pizza Company":{name:"The Pizza Company",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/thepizzacompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2413520",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"The Pizza Company","brand:wikidata":"Q2413520","brand:wikipedia":"en:The Pizza Company",cuisine:"pizza",name:"The Pizza Company",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Togo's":{name:"Togo's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/togossandwiches/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3530375",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Togo's","brand:wikidata":"Q3530375","brand:wikipedia":"en:Togo's",cuisine:"sandwich",name:"Togo's",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Veggie Grill":{name:"Veggie Grill",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/veggiegrill/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18636427",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Veggie Grill","brand:wikidata":"Q18636427","brand:wikipedia":"en:Veggie Grill",cuisine:"american","diet:vegan":"only",name:"Veggie Grill",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Wahoo's Fish Taco":{name:"Wahoo's Fish Taco",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/WahoosFishTaco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7959827",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Wahoo's Fish Taco","brand:wikidata":"Q7959827","brand:wikipedia":"en:Wahoo's Fish Taco",cuisine:"seafood",name:"Wahoo's Fish Taco",takeaway:"yes"},countryCodes:["us"],terms:["wahoo's"],matchScore:2,suggestion:true},"amenity/fast_food/burger/Wendy's":{name:"Wendy's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/wendys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q550258",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Wendy's","brand:wikidata":"Q550258","brand:wikipedia":"en:Wendy's",cuisine:"burger",name:"Wendy's",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Whataburger":{name:"Whataburger",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/whataburger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q376627",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Whataburger","brand:wikidata":"Q376627","brand:wikipedia":"en:Whataburger",cuisine:"burger",name:"Whataburger",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Which Wich?":{name:"Which Wich?",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/whichwich/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7993556",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Which Wich?","brand:wikidata":"Q7993556","brand:wikipedia":"en:Which Wich?",cuisine:"sandwich",name:"Which Wich?",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/White Castle":{name:"White Castle",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/WhiteCastle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1244034",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"White Castle","brand:wikidata":"Q1244034","brand:wikipedia":"en:White Castle (restaurant)",cuisine:"burger",name:"White Castle",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Wienerschnitzel":{name:"Wienerschnitzel",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/Wienerschnitzel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q324679",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Wienerschnitzel","brand:wikidata":"Q324679","brand:wikipedia":"en:Wienerschnitzel",cuisine:"hot_dog",name:"Wienerschnitzel",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Wimpy":{name:"Wimpy",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/wimpyrestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2811992",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Wimpy","brand:wikidata":"Q2811992","brand:wikipedia":"en:Wimpy (restaurant)",cuisine:"burger",name:"Wimpy",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Xi'an Famous Foods":{name:"Xi'an Famous Foods",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/xianfoods/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8044020",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Xi'an Famous Foods","brand:wikidata":"Q8044020","brand:wikipedia":"en:Xi'an Famous Foods",cuisine:"chinese",name:"Xi'an Famous Foods",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Zaxby's":{name:"Zaxby's",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/Zaxbys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8067525",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Zaxby's","brand:wikidata":"Q8067525","brand:wikipedia":"en:Zaxby's",cuisine:"chicken",name:"Zaxby's",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/immergrün":{name:"immergrün",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/mein.immergruen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62589254",amenity:"fast_food",cuisine:"sandwich;salad;juice"},addTags:{amenity:"fast_food",brand:"immergrün","brand:wikidata":"Q62589254",cuisine:"sandwich;salad;juice",name:"immergün",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["de"],terms:["immergün"],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Γρηγόρης":{name:"Γρηγόρης",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/gregorys.gr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62273834",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Γρηγόρης","brand:wikidata":"Q62273834",cuisine:"sandwich",name:"Γρηγόρης",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Бургер Кинг":{name:"Бургер Кинг",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/burgerking/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q177054",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Бургер Кинг","brand:en":"Burger King","brand:wikidata":"Q177054","brand:wikipedia":"en:Burger King",cuisine:"burger",name:"Бургер Кинг","name:en":"Burger King",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Крошка Картошка":{name:"Крошка Картошка",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/kartoshka.moscow/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4241838",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Крошка Картошка","brand:wikidata":"Q4241838","brand:wikipedia":"ru:Крошка Картошка",cuisine:"potato",name:"Крошка Картошка",takeaway:"yes"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Макдоналдс":{name:"Макдоналдс",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/mcdonalds/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q38076",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Макдоналдс","brand:en":"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"en:McDonald's",cuisine:"burger",name:"Макдоналдс","name:en":"McDonald's",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Папа Джонс":{name:"Папа Джонс",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/papajohns/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2759586",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Папа Джонс","brand:en":"Papa John's","brand:wikidata":"Q2759586","brand:wikipedia":"ru:Papa John’s",cuisine:"pizza",name:"Папа Джонс","name:en":"Papa John's",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Робин Сдобин":{name:"Робин Сдобин",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/robinsdobin/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62273880",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Робин Сдобин","brand:wikidata":"Q62273880",cuisine:"burger",name:"Робин Сдобин",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Русский Аппетит":{name:"Русский Аппетит",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/Русский-Аппетит-1502979646622576/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62086063",amenity:"fast_food",cuisine:"sandwich;salad;regional"},addTags:{amenity:"fast_food",brand:"Русский Аппетит","brand:wikidata":"Q62086063",cuisine:"sandwich;salad;regional",name:"Русский Аппетит",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Стардог!s":{name:"Стардог!s",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/StardogsOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4439856",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Стардог!s","brand:en":"Stardog!s","brand:wikidata":"Q4439856","brand:wikipedia":"ru:Стардогс",cuisine:"sausage",name:"Стардог!s","name:en":"Stardog!s",takeaway:"yes"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Суши Wok":{name:"Суши Wok",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/sushiwokofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25444754",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Суши Wok","brand:en":"Sushi Wok","brand:wikidata":"Q25444754","brand:wikipedia":"uk:Суши Wok (мережа магазинів)",cuisine:"asian",name:"Суши Wok","name:en":"Sushi Wok",takeaway:"yes"},countryCodes:["ru","ua"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Теремок":{name:"Теремок",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/teremok/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4455593",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Теремок","brand:en":"Teremok","brand:wikidata":"Q4455593","brand:wikipedia":"ru:Теремок (сеть быстрого питания)",cuisine:"crepe;russian",name:"Теремок","name:en":"Teremok",takeaway:"yes"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/מקדונלד'ס":{name:"מקדונלד'ס",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/McDonalds/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12061542",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"מקדונלד'ס","brand:en":"McDonald's","brand:he":"מקדונלד'ס","brand:wikidata":"Q12061542","brand:wikipedia":"en:McDonald's Israel",cuisine:"burger",name:"מקדונלד'ס","name:en":"McDonald's","name:he":"מקדונלד'ס",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/دجاج كنتاكي":{name:"دجاج كنتاكي",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/KFC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q524757",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"دجاج كنتاكي","brand:ar":"دجاج كنتاكي","brand:en":"KFC","brand:wikidata":"Q524757","brand:wikipedia":"ar:دجاج كنتاكي",cuisine:"chicken",name:"دجاج كنتاكي","name:ar":"دجاج كنتاكي","name:en":"KFC",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/ماكدونالدز":{name:"ماكدونالدز",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/mcdonalds/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q38076",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"ماكدونالدز","brand:ar":"ماكدونالدز","brand:en":"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"ar:ماكدونالدز",cuisine:"burger",name:"ماكدونالدز","name:ar":"ماكدونالدز","name:en":"McDonald's",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/かっぱ寿司":{name:"かっぱ寿司",icon:"maki-fast-food",imageURL:"https://abs.twimg.com/sticky/default_profile_images/default_profile_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q11263916",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"かっぱ寿司","brand:en":"Kappazushi","brand:ja":"かっぱ寿司","brand:wikidata":"Q11263916","brand:wikipedia":"ja:かっぱ寿司",cuisine:"sushi",name:"かっぱ寿司","name:en":"Kappazushi","name:ja":"かっぱ寿司",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/かつや":{name:"かつや",icon:"maki-fast-food",geometry:["point","area"],tags:{"brand:wikidata":"Q2855257",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"かつや","brand:en":"Katsuya","brand:ja":"かつや","brand:wikidata":"Q2855257","brand:wikipedia":"ja:かつや",cuisine:"fried_food",name:"かつや","name:en":"Katsuya","name:ja":"かつや","name:ko":"카쯔야","name:zh":"吉豚屋",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/くら寿司":{name:"くら寿司",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/Kurasushi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6445491",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"くら寿司","brand:en":"Kurazushi","brand:ja":"くら寿司","brand:wikidata":"Q6445491","brand:wikipedia":"ja:くら寿司",cuisine:"sushi",name:"くら寿司","name:en":"Kurazushi","name:ja":"くら寿司",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/すき家":{name:"すき家",icon:"maki-fast-food",imageURL:"https://pbs.twimg.com/profile_images/1074928090885672960/nTgKn0jh_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q6137375",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"すき家","brand:en":"Sukiya","brand:ja":"すき家","brand:wikidata":"Q6137375","brand:wikipedia":"ja:すき家",cuisine:"beef_bowl",name:"すき家","name:en":"Sukiya","name:ja":"すき家",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/なか卯":{name:"なか卯",icon:"maki-fast-food",imageURL:"https://pbs.twimg.com/profile_images/999109688582008832/evpixQ34_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11274132",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"なか卯","brand:en":"Nakau","brand:ja":"なか卯","brand:wikidata":"Q11274132","brand:wikipedia":"ja:なか卯",cuisine:"udon",name:"なか卯","name:en":"Nakau","name:ja":"なか卯",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/はま寿司":{name:"はま寿司",icon:"maki-fast-food",geometry:["point","area"],tags:{"brand:wikidata":"Q17220385",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"はま寿司","brand:en":"Hamazushi","brand:ja":"はま寿司","brand:wikidata":"Q17220385","brand:wikipedia":"ja:はま寿司",cuisine:"sushi",name:"はま寿司","name:en":"Hamazushi","name:ja":"はま寿司",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/ほっかほっか亭":{name:"ほっかほっか亭",icon:"maki-fast-food",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FHokka-Hokka%20Tei%20logo.gif&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5878035",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"ほっかほっか亭","brand:en":"Hokka Hokka Tei","brand:ja":"ほっかほっか亭","brand:wikidata":"Q5878035","brand:wikipedia":"ja:ほっかほっか亭",cuisine:"japanese",name:"ほっかほっか亭","name:en":"Hokka Hokka Tei","name:ja":"ほっかほっか亭",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/ほっともっと":{name:"ほっともっと",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/hottomotto/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10850949",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"ほっともっと","brand:en":"Hotto Motto","brand:ja":"ほっともっと","brand:wikidata":"Q10850949","brand:wikipedia":"ja:ほっともっと",cuisine:"japanese",name:"ほっともっと","name:en":"Hotto Motto","name:ja":"ほっともっと",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/ゆで太郎":{name:"ゆで太郎",icon:"maki-fast-food",geometry:["point","area"],tags:{"brand:wikidata":"Q11280824",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"ゆで太郎","brand:en":"Yudetaro","brand:ja":"ゆで太郎","brand:wikidata":"Q11280824","brand:wikipedia":"ja:ゆで太郎",cuisine:"noodle",name:"ゆで太郎","name:en":"Yudetaro","name:ja":"ゆで太郎",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/オリジン弁当":{name:"オリジン弁当",icon:"maki-fast-food",geometry:["point","area"],tags:{"brand:wikidata":"Q11292632",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"オリジン弁当","brand:en":"Origin Bentō","brand:ja":"オリジン弁当","brand:wikidata":"Q11292632","brand:wikipedia":"ja:オリジン東秀",cuisine:"japanese",name:"オリジン弁当","name:en":"Origin Bentō","name:ja":"オリジン弁当",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/ケンタッキーフライドチキン":{name:"ケンタッキーフライドチキン",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/KFC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q524757",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"ケンタッキーフライドチキン","brand:en":"KFC","brand:ja":"ケンタッキーフライドチキン","brand:wikidata":"Q524757","brand:wikipedia":"ja:KFCコーポレーション",cuisine:"chicken",name:"ケンタッキーフライドチキン","name:en":"KFC","name:ja":"ケンタッキーフライドチキン",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/サブウェイ":{name:"サブウェイ",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/subway/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q244457",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"サブウェイ","brand:en":"Subway","brand:ja":"サブウェイ","brand:wikidata":"Q244457","brand:wikipedia":"ja:サブウェイ",cuisine:"sandwich",name:"サブウェイ","name:en":"Subway","name:ja":"サブウェイ",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/スシロー":{name:"スシロー",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/akindosushiro/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11257037",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"スシロー","brand:en":"Sushiro","brand:ja":"スシロー","brand:wikidata":"Q11257037","brand:wikipedia":"ja:あきんどスシロー",cuisine:"sushi",name:"スシロー","name:en":"Sushiro","name:ja":"スシロー","name:zh":"壽司郎",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/ドミノ・ピザ":{name:"ドミノ・ピザ",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/Dominos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q839466",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"ドミノ・ピザ","brand:en":"Domino's Pizza","brand:ja":"ドミノ・ピザ","brand:wikidata":"Q839466","brand:wikipedia":"ja:ドミノ・ピザ",cuisine:"pizza",name:"ドミノ・ピザ","name:en":"Domino's Pizza","name:ja":"ドミノ・ピザ",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/ピザハット":{name:"ピザハット",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/pizzahutus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q191615",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"ピザハット","brand:en":"Pizza Hut","brand:ja":"ピザハット","brand:wikidata":"Q191615","brand:wikipedia":"ja:ピザハット",cuisine:"pizza",name:"ピザハット","name:en":"Pizza Hut","name:ja":"ピザハット",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/ピザ・カリフォルニア":{name:"ピザ・カリフォルニア",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{"brand:wikidata":"Q75324",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"ピザ・カリフォルニア","brand:en":"Pizza California","brand:ja":"ピザ・カリフォルニア","brand:wikidata":"Q75324","brand:wikipedia":"ja:ピザ・カリフォルニア",cuisine:"pizza",name:"ピザ・カリフォルニア","name:en":"Pizza California","name:ja":"ピザ・カリフォルニア",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/ピザーラ":{name:"ピザーラ",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/pizzala.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7199948",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"ピザーラ","brand:en":"Pizza-La","brand:ja":"ピザーラ","brand:wikidata":"Q7199948","brand:wikipedia":"ja:ピザーラ",cuisine:"pizza",name:"ピザーラ","name:en":"Pizza-La","name:ja":"ピザーラ",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/フレッシュネスバーガー":{name:"フレッシュネスバーガー",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/freshness.burger.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5503087",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"フレッシュネスバーガー","brand:en":"Freshness Burger","brand:ja":"フレッシュネスバーガー","brand:wikidata":"Q5503087","brand:wikipedia":"ja:フレッシュネスバーガー",cuisine:"burger",name:"フレッシュネスバーガー","name:en":"Freshness Burger","name:ja":"フレッシュネスバーガー",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/マクドナルド":{name:"マクドナルド",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/mcdonalds/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q38076",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"マクドナルド","brand:en":"McDonald's","brand:ja":"マクドナルド","brand:wikidata":"Q38076","brand:wikipedia":"ja:マクドナルド",cuisine:"burger",name:"マクドナルド","name:en":"McDonald's","name:ja":"マクドナルド",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/donut/ミスタードーナツ":{name:"ミスタードーナツ",icon:"temaki-donut",imageURL:"https://graph.facebook.com/misdo.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1065819",amenity:"fast_food",cuisine:"donut"},addTags:{amenity:"fast_food",brand:"ミスタードーナツ","brand:en":"Mister Donut","brand:ja":"ミスタードーナツ","brand:wikidata":"Q1065819","brand:wikipedia":"en:Mister Donut",cuisine:"donut",name:"ミスタードーナツ","name:en":"Mister Donut","name:ja":"ミスタードーナツ",takeaway:"yes"},reference:{key:"cuisine",value:"donut"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/モスバーガー":{name:"モスバーガー",icon:"maki-fast-food",imageURL:"https://pbs.twimg.com/profile_images/712033394109124608/kVGTqBLR_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1204169",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"モスバーガー","brand:en":"MOS Burger","brand:ja":"モスバーガー","brand:wikidata":"Q1204169","brand:wikipedia":"ja:モスバーガー",cuisine:"burger",name:"モスバーガー","name:en":"MOS Burger","name:ja":"モスバーガー",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/ラーメン二郎":{name:"ラーメン二郎",icon:"maki-fast-food",geometry:["point","area"],tags:{"brand:wikidata":"Q11347765",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"ラーメン二郎","brand:en":"Ramen Jiro","brand:ja":"ラーメン二郎","brand:wikidata":"Q11347765","brand:wikipedia":"ja:ラーメン二郎",cuisine:"ramen",name:"ラーメン二郎","name:en":"Ramen Jiro","name:ja":"ラーメン二郎",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/ロッテリア":{name:"ロッテリア",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/ilovelotteria/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q249525",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"ロッテリア","brand:en":"Lotteria","brand:ja":"ロッテリア","brand:wikidata":"Q249525","brand:wikipedia":"ja:ロッテリア",cuisine:"burger",name:"ロッテリア","name:en":"Lotteria","name:ja":"ロッテリア",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/吉野家":{name:"吉野家",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/tw.yoshinoya/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q776272",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"吉野家","brand:en":"Yoshinoya","brand:ja":"吉野家","brand:wikidata":"Q776272","brand:wikipedia":"ja:吉野家",cuisine:"beef_bowl",name:"吉野家","name:en":"Yoshinoya","name:ja":"吉野家",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/富士そば":{name:"富士そば",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/fujisoba/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11414722",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"富士そば","brand:en":"Fuji Soba","brand:ja":"富士そば","brand:wikidata":"Q11414722","brand:wikipedia":"ja:名代富士そば",cuisine:"soba",name:"富士そば","name:en":"Fuji Soba","name:ja":"富士そば",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/幸楽苑":{name:"幸楽苑",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/Kourakuen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11484003",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"幸楽苑","brand:en":"Kourakuen","brand:ja":"幸楽苑","brand:wikidata":"Q11484003","brand:wikipedia":"ja:幸楽苑",cuisine:"ramen",name:"幸楽苑","name:en":"Kourakuen","name:ja":"幸楽苑",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/摩斯漢堡":{name:"摩斯漢堡",icon:"maki-fast-food",imageURL:"https://pbs.twimg.com/profile_images/712033394109124608/kVGTqBLR_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1204169",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"摩斯漢堡","brand:en":"MOS Burger","brand:wikidata":"Q1204169","brand:wikipedia":"zh:摩斯漢堡","brand:zh":"摩斯漢堡",cuisine:"burger",name:"摩斯漢堡","name:en":"MOS Burger","name:zh":"摩斯漢堡",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["cn","hk","mo","sg","tw"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/日高屋":{name:"日高屋",icon:"maki-fast-food",geometry:["point","area"],tags:{"brand:wikidata":"Q11326050",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"日高屋","brand:en":"Hidakaya","brand:wikidata":"Q11326050","brand:wikipedia":"ja:ハイデイ日高",cuisine:"noodle",name:"日高屋",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/松屋":{name:"松屋",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/matsuyafoods.matsuya/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q848773",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"松屋","brand:en":"Matsuya Foods","brand:wikidata":"Q848773","brand:wikipedia":"ja:松屋フーズ",cuisine:"japanese",name:"松屋","name:en":"Matsuya Foods",takeaway:"yes"},countryCodes:["cn","hk","jp","mo","sg","tw"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/箱根そば":{name:"箱根そば",icon:"maki-fast-food",geometry:["point","area"],tags:{"brand:wikidata":"Q11603345",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"箱根そば","brand:en":"Hakone Soba","brand:ja":"箱根そば","brand:wikidata":"Q11603345","brand:wikipedia":"ja:箱根そば",cuisine:"soba",name:"箱根そば","name:en":"Hakone Soba","name:ja":"箱根そば",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/肯德基":{name:"肯德基",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/KFC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q524757",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"肯德基","brand:en":"KFC","brand:wikidata":"Q524757","brand:wikipedia":"zh:肯德基",cuisine:"chicken",name:"肯德基","name:en":"KFC",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["cn","hk","mo","sg","tw"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/麥當勞":{name:"麥當勞",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/mcdonalds/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q38076",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"麥當勞","brand:en":"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"zh_classical:麥當勞",cuisine:"burger",name:"麥當勞","name:en":"McDonald's",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["hk","mo","tw"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/麦当劳":{name:"麦当劳",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/mcdonalds/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q38076",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"麦当劳","brand:en":"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"zh:麦当劳",cuisine:"burger",name:"麦当劳","name:en":"McDonald's",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["cn","sg"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/롯데리아":{name:"롯데리아",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/ilovelotteria/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q249525",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"롯데리아","brand:en":"Lotteria","brand:ko":"롯데리아","brand:wikidata":"Q249525","brand:wikipedia":"ko:롯데리아",cuisine:"burger",name:"롯데리아","name:en":"Lotteria","name:ko":"롯데리아",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/1-2-3":{name:"1-2-3",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q4545742",amenity:"fuel"},addTags:{amenity:"fuel",brand:"1-2-3","brand:wikidata":"Q4545742","brand:wikipedia":"en:1-2-3 (fuel station)",name:"1-2-3"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/7-Eleven":{name:"7-Eleven",icon:"maki-fuel",imageURL:"https://graph.facebook.com/7ElevenMexico/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q259340",amenity:"fuel"},addTags:{amenity:"fuel",brand:"7-Eleven","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"7-Eleven"},terms:["7-11","seven eleven"],matchScore:2,suggestion:true},"amenity/fuel/76":{name:"76",icon:"maki-fuel",imageURL:"https://graph.facebook.com/76gas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1658320",amenity:"fuel"},addTags:{amenity:"fuel",brand:"76","brand:wikidata":"Q1658320","brand:wikipedia":"en:76 (gas station)",name:"76"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/ABC":{name:"ABC",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q10397504",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ABC","brand:wikidata":"Q10397504","brand:wikipedia":"fi:ABC-ketju",name:"ABC"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/ADNOC":{name:"ADNOC",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAbu%20Dhabi%20National%20Oil%20Company%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q166729",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ADNOC","brand:wikidata":"Q166729","brand:wikipedia":"en:Abu Dhabi National Oil Company",name:"ADNOC"},countryCodes:["ae"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Aegean":{name:"Aegean",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q28146598",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Aegean","brand:wikidata":"Q28146598","brand:wikipedia":"el:Aegean Oil",name:"Aegean"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Afriquia":{name:"Afriquia",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q2829178",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Afriquia","brand:wikidata":"Q2829178","brand:wikipedia":"en:Akwa Group",name:"Afriquia"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Agip":{name:"Agip",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q377915",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Agip","brand:wikidata":"Q377915","brand:wikipedia":"en:Agip",name:"Agip"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Agrola":{name:"Agrola",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAgrola%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q397351",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Agrola","brand:wikidata":"Q397351","brand:wikipedia":"de:Agrola",name:"Agrola"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Alon":{name:"Alon",icon:"maki-fuel",imageURL:"https://graph.facebook.com/alonbrands/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62274304",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Alon","brand:wikidata":"Q62274304",name:"Alon"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Alpet":{name:"Alpet",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ALPETtr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62131561",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Alpet","brand:wikidata":"Q62131561",name:"Alpet"},countryCodes:["al","tr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Api":{name:"Api",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q466043",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Api","brand:wikidata":"Q466043","brand:wikipedia":"en:American Petroleum Institute",name:"Api"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Aral":{name:"Aral",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q565734",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Aral","brand:wikidata":"Q565734","brand:wikipedia":"en:Aral AG",name:"Aral"},countryCodes:["de"],terms:["aral tankstelle"],matchScore:2,suggestion:true},"amenity/fuel/Arco":{name:"Arco",icon:"maki-fuel",imageURL:"https://graph.facebook.com/arco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q304769",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Arco","brand:wikidata":"Q304769","brand:wikipedia":"en:ARCO",name:"Arco"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Asda":{name:"Asda",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Asda/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q297410",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Asda","brand:wikidata":"Q297410","brand:wikipedia":"en:Asda",name:"Asda"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Atem":{name:"Atem",icon:"maki-fuel",imageURL:"https://graph.facebook.com/postosatem/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62332255",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Atem","brand:wikidata":"Q62332255",name:"Atem"},countryCodes:["br"],terms:["posto atem"],matchScore:2,suggestion:true},"amenity/fuel/Auchan":{name:"Auchan",icon:"maki-fuel",imageURL:"https://pbs.twimg.com/profile_images/877095334316576768/bhQDPUWZ_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q758603",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Auchan","brand:wikidata":"Q758603","brand:wikipedia":"en:Auchan",name:"Auchan"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Avanti":{name:"Avanti",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FOmv%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q168238",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Avanti","brand:wikidata":"Q168238","brand:wikipedia":"en:OMV",name:"Avanti"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Avia":{name:"Avia",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAVIA%20International%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q300147",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Avia","brand:wikidata":"Q300147","brand:wikipedia":"de:Avia International",name:"Avia"},terms:["station avia"],matchScore:2,suggestion:true},"amenity/fuel/Avin":{name:"Avin",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q19903165",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Avin","brand:wikidata":"Q19903165","brand:wikipedia":"en:Avin International",name:"Avin"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Axion":{name:"Axion",icon:"maki-fuel",imageURL:"https://graph.facebook.com/AXIONenergyOficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62131749",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Axion","brand:wikidata":"Q62131749",name:"Axion"},countryCodes:["ar","py","uy"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Aytemiz":{name:"Aytemiz",icon:"maki-fuel",imageURL:"https://graph.facebook.com/AytemizOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62274352",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Aytemiz","brand:wikidata":"Q62274352",name:"Aytemiz"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/BEBECO":{name:"BEBECO",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q62274373",amenity:"fuel"},addTags:{amenity:"fuel",brand:"BEBECO","brand:wikidata":"Q62274373",name:"BEBECO"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/BHPetrol":{name:"BHPetrol",icon:"maki-fuel",imageURL:"https://graph.facebook.com/BHP.Petrol/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62274381",amenity:"fuel"},addTags:{amenity:"fuel",brand:"BHPetrol","brand:wikidata":"Q62274381",name:"BHPetrol"},countryCodes:["my"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/BP":{name:"BP",icon:"maki-fuel",imageURL:"https://graph.facebook.com/bp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q152057",amenity:"fuel"},addTags:{amenity:"fuel",brand:"BP","brand:wikidata":"Q152057","brand:wikipedia":"en:BP",name:"BP"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/BR":{name:"BR",icon:"maki-fuel",imageURL:"https://graph.facebook.com/postospetrobras/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4836468",amenity:"fuel"},addTags:{amenity:"fuel",brand:"BR","brand:wikidata":"Q4836468","brand:wikipedia":"pt:Petrobras Distribuidora",name:"BR"},countryCodes:["br"],terms:["br petrobras","petrobras","posto br"],matchScore:2,suggestion:true},"amenity/fuel/Bangchak":{name:"Bangchak",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q6579719",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Bangchak","brand:wikidata":"Q6579719","brand:wikipedia":"zh:曼差石油股份",name:"Bangchak"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Bharat Petroleum":{name:"Bharat Petroleum",icon:"maki-fuel",imageURL:"https://graph.facebook.com/BharatPetroleumcorporation/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q854826",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Bharat Petroleum","brand:wikidata":"Q854826","brand:wikipedia":"en:Bharat Petroleum",name:"Bharat Petroleum"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Biomax":{name:"Biomax",icon:"maki-fuel",imageURL:"https://graph.facebook.com/BiomaxColombia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62274413",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Biomax","brand:wikidata":"Q62274413",name:"Biomax"},countryCodes:["co"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Bliska":{name:"Bliska",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q4016378",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Bliska","brand:wikidata":"Q4016378","brand:wikipedia":"pl:Bliska",name:"Bliska"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/CAMPSA":{name:"CAMPSA",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q1031623",amenity:"fuel"},addTags:{amenity:"fuel",brand:"CAMPSA","brand:wikidata":"Q1031623","brand:wikipedia":"en:Campsa",name:"CAMPSA"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/CEPSA":{name:"CEPSA",icon:"maki-fuel",imageURL:"https://graph.facebook.com/CEPSAespana/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q608819",amenity:"fuel"},addTags:{amenity:"fuel",brand:"CEPSA","brand:wikidata":"Q608819","brand:wikipedia":"en:Cepsa",name:"CEPSA"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Caltex":{name:"Caltex",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q277470",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Caltex","brand:wikidata":"Q277470","brand:wikipedia":"en:Caltex",name:"Caltex"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Canadian Tire Gas+":{name:"Canadian Tire Gas+",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Canadiantire/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1032400",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Canadian Tire","brand:wikidata":"Q1032400","brand:wikipedia":"en:Canadian Tire",name:"Canadian Tire"},terms:["canadian tire","canadian tire gas bar"],matchScore:2,suggestion:true},"amenity/fuel/Carrefour Market":{name:"Carrefour Market",icon:"maki-fuel",imageURL:"https://graph.facebook.com/carrefouritalia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q217599",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Carrefour Market","brand:wikidata":"Q217599","brand:wikipedia":"en:Carrefour",name:"Carrefour Market"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Casey's General Store":{name:"Casey's General Store",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q2940968",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Casey's General Store","brand:wikidata":"Q2940968","brand:wikipedia":"en:Casey's General Stores",name:"Casey's General Store"},terms:["caseys"],matchScore:2,suggestion:true},"amenity/fuel/Cenex":{name:"Cenex",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q5011381",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Cenex","brand:wikidata":"Q5011381","brand:wikipedia":"en:CHS Inc.",name:"Cenex"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Ceypetco":{name:"Ceypetco",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q5065795",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Ceypetco","brand:wikidata":"Q5065795","brand:wikipedia":"en:Ceylon Petroleum Corporation",name:"Ceypetco"},countryCodes:["lk"],terms:["lanka filling station"],matchScore:2,suggestion:true},"amenity/fuel/Chevron":{name:"Chevron",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FChevron%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q319642",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Chevron","brand:wikidata":"Q319642","brand:wikipedia":"en:Chevron Corporation",name:"Chevron"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Circle K":{name:"Circle K",icon:"maki-fuel",imageURL:"https://graph.facebook.com/circlekireland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3268010",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Circle K","brand:wikidata":"Q3268010","brand:wikipedia":"en:Circle K",name:"Circle K"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Citgo":{name:"Citgo",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCitgo%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2974437",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Citgo","brand:wikidata":"Q2974437","brand:wikipedia":"en:Citgo",name:"Citgo"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Clark":{name:"Clark",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q5127157",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Clark","brand:wikidata":"Q5127157","brand:wikipedia":"en:Clark Brands",name:"Clark"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Co-op (Canada)":{name:"Co-op (Canada)",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSaskatoon%20Co-op%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5440676",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Federated Co-operatives","brand:wikidata":"Q5440676","brand:wikipedia":"en:Federated Co-operatives",name:"Co-op"},countryCodes:["ca"],terms:["coop"],matchScore:2,suggestion:true},"amenity/fuel/Coles Express":{name:"Coles Express",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q5144653",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Coles Express","brand:wikidata":"Q5144653","brand:wikipedia":"en:Coles Express",name:"Coles Express"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Conoco":{name:"Conoco",icon:"maki-fuel",imageURL:"https://graph.facebook.com/conoco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1126518",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Conoco","brand:wikidata":"Q1126518","brand:wikipedia":"en:Conoco",name:"Conoco"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Copec":{name:"Copec",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q11681461",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Copec","brand:wikidata":"Q11681461","brand:wikipedia":"en:Empresas Copec",name:"Copec"},countryCodes:["cl"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Copetrol":{name:"Copetrol",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Copetrol/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62274431",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Copetrol","brand:wikidata":"Q62274431",name:"Copetrol"},countryCodes:["py"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Cosmo":{name:"Cosmo",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCosmo%20Oil%20company%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2498318",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Cosmo","brand:wikidata":"Q2498318","brand:wikipedia":"en:Cosmo Oil Company",name:"Cosmo"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Costco Gasoline":{name:"Costco Gasoline",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Costco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q715583",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Costco Gasoline","brand:wikidata":"Q715583","brand:wikipedia":"en:Costco",name:"Costco Gasoline"},countryCodes:["au","ca","mx","us"],terms:["costco","costco gas","costco wholesale"],matchScore:2,suggestion:true},"amenity/fuel/Couche-Tard":{name:"Couche-Tard",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q2836957",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Couche-Tard","brand:wikidata":"Q2836957","brand:wikipedia":"en:Alimentation Couche-Tard",name:"Couche-Tard"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Crevier":{name:"Crevier",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q61743451",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Crevier","brand:wikidata":"Q61743451",name:"Crevier"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Crodux":{name:"Crodux",icon:"maki-fuel",imageURL:"https://graph.facebook.com/croduxhr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62274622",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Crodux","brand:wikidata":"Q62274622",name:"Crodux"},countryCodes:["hr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Cumberland Farms":{name:"Cumberland Farms",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q1143685",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Cumberland Farms","brand:wikidata":"Q1143685","brand:wikipedia":"en:Cumberland Farms",name:"Cumberland Farms"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Delta (Panama & Costa Rica)":{name:"Delta (Panama & Costa Rica)",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PetroleosDelta/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62274638",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Delta","brand:wikidata":"Q62274638",name:"Delta"},countryCodes:["cr","pr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Delta (USA)":{name:"Delta (USA)",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q62274661",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Delta","brand:wikidata":"Q62274661",name:"Delta"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Diamond Shamrock":{name:"Diamond Shamrock",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q16973722",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Diamond Shamrock","brand:wikidata":"Q16973722","brand:wikipedia":"en:Diamond Shamrock",name:"Diamond Shamrock"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Domo":{name:"Domo",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FDOMO%20Gasoline%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5291326",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Domo","brand:wikidata":"Q5291326","brand:wikipedia":"en:Domo Gasoline",name:"Domo"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/EKO (Canada)":{name:"EKO (Canada)",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q3045934",amenity:"fuel"},addTags:{amenity:"fuel",brand:"EKO","brand:wikidata":"Q3045934","brand:wikipedia":"fr:EKO",name:"EKO"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/EKO (Greece)":{name:"EKO (Greece)",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q903198",amenity:"fuel"},addTags:{amenity:"fuel",brand:"EKO","brand:wikidata":"Q903198","brand:wikipedia":"el:Ελληνικά Πετρέλαια",name:"EKO"},countryCodes:["bg","cy","gr","me","mk","rs"],terms:["εκο"],matchScore:2,suggestion:true},"amenity/fuel/ENEOS":{name:"ENEOS",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FJXTG%20Nippon%20Oil%20%26%20Energy%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1640290",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ENEOS","brand:wikidata":"Q1640290","brand:wikipedia":"en:JXTG Nippon Oil & Energy",name:"ENEOS"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Elan":{name:"Elan",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q57980752",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Elan","brand:wikidata":"Q57980752",name:"Elan"},countryCodes:["de","fr","nl"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Engen":{name:"Engen",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q3054251",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Engen","brand:wikidata":"Q3054251","brand:wikipedia":"en:Engen Petroleum",name:"Engen"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Eni":{name:"Eni",icon:"maki-fuel",imageURL:"https://pbs.twimg.com/profile_images/875644564459012097/fsDlSI7T_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q565594",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Eni","brand:wikidata":"Q565594","brand:wikipedia":"en:Eni",name:"Eni"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Erg":{name:"Erg",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FERG%20logo2018.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q739503",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Erg","brand:wikidata":"Q739503","brand:wikipedia":"it:ERG (azienda)",name:"Erg"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Esso":{name:"Esso",icon:"maki-fuel",imageURL:"https://pbs.twimg.com/profile_images/595503093447598080/4ooH4R98_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q867662",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Esso","brand:wikidata":"Q867662","brand:wikipedia":"en:Esso",name:"Esso"},terms:["station esso"],matchScore:2,suggestion:true},"amenity/fuel/Esso Express":{name:"Esso Express",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q2350336",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Esso Express","brand:wikidata":"Q2350336","brand:wikipedia":"nl:Esso Express",name:"Esso Express"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Exxon":{name:"Exxon",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FExxon%20logo%202016.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4781944",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Exxon","brand:wikidata":"Q4781944","brand:wikipedia":"en:Exxon",name:"Exxon"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/F24":{name:"F24",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q12310853",amenity:"fuel"},addTags:{amenity:"fuel",brand:"F24","brand:wikidata":"Q12310853","brand:wikipedia":"da:F24",name:"F24"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Fas Gas":{name:"Fas Gas",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q61743505",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Fas Gas","brand:wikidata":"Q61743505","brand:wikipedia":"en:Parkland Fuel",name:"Fas Gas"},terms:["fas gas plus"],matchScore:2,suggestion:true},"amenity/fuel/Firezone":{name:"Firezone",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q14628080",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Firezone","brand:wikidata":"Q14628080","brand:wikipedia":"nl:Firezone",name:"Firezone"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Flying V":{name:"Flying V",icon:"maki-fuel",imageURL:"https://graph.facebook.com/OfficialFlyingV/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62275048",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Flying V","brand:wikidata":"Q62275048",name:"Flying V"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Freie Tankstelle":{name:"Freie Tankstelle",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q1009104",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Freie Tankstelle","brand:wikidata":"Q1009104","brand:wikipedia":"de:Bundesverband freier Tankstellen",name:"Freie Tankstelle"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/GALP":{name:"GALP",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FGalp.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1492739",amenity:"fuel"},addTags:{amenity:"fuel",brand:"GALP","brand:wikidata":"Q1492739","brand:wikipedia":"en:Galp Energia",name:"GALP"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Gazel":{name:"Gazel",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q62529885",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Gazel","brand:wikidata":"Q62529885",name:"Gazel"},countryCodes:["co","mx","pe"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Gazprom":{name:"Gazprom",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FGazprom%20Avia%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q102673",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Gazprom","brand:wikidata":"Q102673","brand:wikipedia":"en:Gazprom",name:"Gazprom"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/GetGo":{name:"GetGo",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q5553766",amenity:"fuel"},addTags:{amenity:"fuel",brand:"GetGo","brand:wikidata":"Q5553766","brand:wikipedia":"en:GetGo",name:"GetGo"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Glusco":{name:"Glusco",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Glusco.Ukraine/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62284719",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Glusco","brand:wikidata":"Q62284719",name:"Glusco"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Goil":{name:"Goil",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q5555383",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Goil","brand:wikidata":"Q5555383","brand:wikipedia":"en:Ghana Oil Company",name:"Goil"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Gulf":{name:"Gulf",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FGulf%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1296860",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Gulf","brand:wikidata":"Q1296860","brand:wikipedia":"en:Gulf Oil",name:"Gulf"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Gull":{name:"Gull",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q5617739",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Gull","brand:wikidata":"Q5617739","brand:wikipedia":"en:Gull Petroleum",name:"Gull"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/H-E-B Fuel":{name:"H-E-B Fuel",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20of%20the%20HEB%20Grocery%20Company%2C%20LP.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q830621",amenity:"fuel"},addTags:{amenity:"fuel",brand:"H-E-B Fuel","brand:wikidata":"Q830621","brand:wikipedia":"en:H-E-B",name:"H-E-B Fuel"},terms:["h-e-b gas"],matchScore:2,suggestion:true},"amenity/fuel/HEM":{name:"HEM",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FTamoil.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1563517",amenity:"fuel"},addTags:{amenity:"fuel",brand:"HEM","brand:wikidata":"Q1563517","brand:wikipedia":"de:Deutsche Tamoil",name:"HEM"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/HP":{name:"HP",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q1619375",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Hindustan Petroleum","brand:wikidata":"Q1619375","brand:wikipedia":"en:Hindustan Petroleum",name:"HP",official_name:"Hindustan Petroleum"},terms:["hindustan petroleum","hp petrol pump"],matchScore:2,suggestion:true},"amenity/fuel/Harnois":{name:"Harnois",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q61743558",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Harnois","brand:wikidata":"Q61743558",name:"Harnois"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Hess":{name:"Hess",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FHess%20Corporation%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1615684",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Hess","brand:wikidata":"Q1615684","brand:wikipedia":"en:Hess Corporation",name:"Hess"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Hofer":{name:"Hofer",icon:"maki-fuel",imageURL:"https://graph.facebook.com/HOFER.AT/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15815751",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Hofer","brand:wikidata":"Q15815751","brand:wikipedia":"de:Hofer KG",name:"Hofer"},countryCodes:["at","si"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Holiday":{name:"Holiday",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q5880490",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Holiday","brand:wikidata":"Q5880490","brand:wikipedia":"en:Holiday Stationstores",name:"Holiday"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/IES":{name:"IES",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q62287387",amenity:"fuel"},addTags:{amenity:"fuel",brand:"IES","brand:wikidata":"Q62287387",name:"IES"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/IP":{name:"IP",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q646807",amenity:"fuel"},addTags:{amenity:"fuel",brand:"IP","brand:wikidata":"Q646807","brand:wikipedia":"en:Anonima Petroli Italiana",name:"IP"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Indian Oil":{name:"Indian Oil",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FIndian%20Oil%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1289348",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Indian Oil","brand:wikidata":"Q1289348","brand:wikipedia":"en:Indian Oil Corporation",name:"Indian Oil"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Ingo":{name:"Ingo",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q17048617",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Ingo","brand:wikidata":"Q17048617","brand:wikipedia":"en:Ingo (brand)",name:"Ingo"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Intermarché":{name:"Intermarché",icon:"maki-fuel",imageURL:"https://graph.facebook.com/tousuniscontrelaviechere/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3153200",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Intermarché","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",name:"Intermarché"},terms:["intermarché super"],matchScore:2,suggestion:true},"amenity/fuel/Ipiranga":{name:"Ipiranga",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q2081136",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Ipiranga","brand:wikidata":"Q2081136","brand:wikipedia":"pt:Ipiranga (empresa)",name:"Ipiranga"},countryCodes:["br"],terms:["posto ipiranga"],matchScore:2,suggestion:true},"amenity/fuel/Irving":{name:"Irving",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FIrving%20Oil%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1673286",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Irving","brand:wikidata":"Q1673286","brand:wikipedia":"en:Irving Oil",name:"Irving"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/JA-SS":{name:"JA-SS",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q11225213",amenity:"fuel"},addTags:{amenity:"fuel",brand:"JA-SS","brand:wikidata":"Q11225213","brand:wikipedia":"ja:JA-SS",name:"JA-SS"},countryCodes:["jp"],terms:["ja"],matchScore:2,suggestion:true},"amenity/fuel/Jet":{name:"Jet",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q568940",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Jet","brand:wikidata":"Q568940","brand:wikipedia":"en:Jet (brand)",name:"Jet"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Jetti":{name:"Jetti",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Jetti-Petroleum-Inc-1733916930229227/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62288720",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Jetti","brand:wikidata":"Q62288720",name:"Jetti"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Kobil":{name:"Kobil",icon:"maki-fuel",imageURL:"https://graph.facebook.com/kenolkobil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22906119",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Kobil","brand:wikidata":"Q22906119","brand:wikipedia":"en:KenolKobil",name:"Kobil"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Kroger":{name:"Kroger",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Kroger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q153417",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Kroger","brand:wikidata":"Q153417","brand:wikipedia":"en:Kroger",name:"Kroger"},terms:["kroger fuel"],matchScore:2,suggestion:true},"amenity/fuel/Kum & Go":{name:"Kum & Go",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q6443340",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Kum & Go","brand:wikidata":"Q6443340","brand:wikipedia":"en:Kum & Go",name:"Kum & Go"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Kwik Trip":{name:"Kwik Trip",icon:"maki-fuel",imageURL:"https://graph.facebook.com/KwikTrip/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6450420",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Kwik Trip","brand:wikidata":"Q6450420","brand:wikipedia":"en:Kwik Trip",name:"Kwik Trip"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Lotos":{name:"Lotos",icon:"maki-fuel",imageURL:"https://graph.facebook.com/GrupaLOTOS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1256909",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Lotos","brand:wikidata":"Q1256909","brand:wikipedia":"pl:Grupa Lotos",name:"Lotos"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Lotos Optima":{name:"Lotos Optima",icon:"maki-fuel",imageURL:"https://graph.facebook.com/GrupaLOTOS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1256909",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Lotos Optima","brand:wikidata":"Q1256909","brand:wikipedia":"pl:Grupa Lotos",name:"Lotos Optima"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Love's":{name:"Love's",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLove%E2%80%99s%20Travel%20Stops%20%26%20Country%20Stores%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1872496",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Love's","brand:wikidata":"Q1872496","brand:wikipedia":"en:Love's Travel Stops & Country Stores",name:"Love's"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Lukoil":{name:"Lukoil",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLUK%20OIL%20Logo%20kyr.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q329347",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Lukoil","brand:wikidata":"Q329347","brand:wikipedia":"en:Lukoil",name:"Lukoil"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/MEROIL":{name:"MEROIL",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q62292559",amenity:"fuel"},addTags:{amenity:"fuel",brand:"MEROIL","brand:wikidata":"Q62292559",name:"MEROIL"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/MOL":{name:"MOL",icon:"maki-fuel",imageURL:"https://pbs.twimg.com/profile_images/378800000474004977/cf7c3082d7151bad59c596ac0def6604_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q549181",amenity:"fuel"},addTags:{amenity:"fuel",brand:"MOL","brand:wikidata":"Q549181","brand:wikipedia":"en:MOL (company)",name:"MOL"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/MRS":{name:"MRS",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q56274919",amenity:"fuel"},addTags:{amenity:"fuel",brand:"MRS","brand:wikidata":"Q56274919","brand:wikipedia":"en:MRS Oil Nigeria Plc",name:"MRS"},countryCodes:["ng"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Mac's":{name:"Mac's",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q4043527",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Mac's","brand:wikidata":"Q4043527","brand:wikipedia":"en:Mac's Convenience Stores",name:"Mac's"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/MacEwen":{name:"MacEwen",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q61740335",amenity:"fuel"},addTags:{amenity:"fuel",brand:"MacEwen","brand:wikidata":"Q61740335",name:"MacEwen"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Marathon":{name:"Marathon",icon:"maki-fuel",imageURL:"https://graph.facebook.com/MarathonPetroleumCorporation/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q458363",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Marathon","brand:wikidata":"Q458363","brand:wikipedia":"en:Marathon Petroleum",name:"Marathon"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Maverik":{name:"Maverik",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q16974822",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Maverik","brand:wikidata":"Q16974822","brand:wikipedia":"en:FJ Management",name:"Maverik"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Maxol":{name:"Maxol",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q3302837",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Maxol","brand:wikidata":"Q3302837","brand:wikipedia":"en:Maxol",name:"Maxol"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Metano":{name:"Metano",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q62294765",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Metano","brand:wikidata":"Q62294765",name:"Metano"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Migrol":{name:"Migrol",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Migrol.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1747771",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Migrol","brand:wikidata":"Q1747771","brand:wikipedia":"de:Migrol",name:"Migrol"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Mobil":{name:"Mobil",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMobil%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3088656",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Mobil","brand:wikidata":"Q3088656","brand:wikipedia":"en:Mobil",name:"Mobil"},terms:["mobile"],matchScore:2,suggestion:true},"amenity/fuel/Moil":{name:"Moil",icon:"maki-fuel",imageURL:"https://graph.facebook.com/milanpetrol/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62296914",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Moil","brand:wikidata":"Q62296914",name:"Moil"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Morrisons":{name:"Morrisons",icon:"maki-fuel",imageURL:"https://pbs.twimg.com/profile_images/1069883324204769280/cbPhjnwc_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q922344",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Morrisons","brand:wikidata":"Q922344","brand:wikipedia":"en:Morrisons",name:"Morrisons"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Moya":{name:"Moya",icon:"maki-fuel",imageURL:"https://graph.facebook.com/moyastacja/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62297700",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Moya","brand:wikidata":"Q62297700",name:"Moya"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Murphy USA":{name:"Murphy USA",icon:"maki-fuel",imageURL:"https://graph.facebook.com/MurphyUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19604459",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Murphy USA","brand:wikidata":"Q19604459","brand:wikipedia":"en:Murphy USA",name:"Murphy USA"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/NP":{name:"NP",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q7842382",amenity:"fuel"},addTags:{amenity:"fuel",brand:"NP","brand:wikidata":"Q7842382","brand:wikipedia":"en:Trinidad & Tobago National Petroleum Marketing Company Limited",name:"NP"},countryCodes:["tt"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Neste":{name:"Neste",icon:"maki-fuel",imageURL:"https://pbs.twimg.com/profile_images/1015138866095906816/Va1aA79Z_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q616376",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Neste","brand:wikidata":"Q616376","brand:wikipedia":"en:Neste",name:"Neste"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/OIL!":{name:"OIL!",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20OIL!.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2007561",amenity:"fuel"},addTags:{amenity:"fuel",brand:"OIL!","brand:wikidata":"Q2007561","brand:wikipedia":"de:OIL! Tankstellen",name:"OIL!"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/OK":{name:"OK",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q12329785",amenity:"fuel"},addTags:{amenity:"fuel",brand:"OK","brand:wikidata":"Q12329785","brand:wikipedia":"da:OK a.m.b.a.",name:"OK"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/OKQ8":{name:"OKQ8",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q1634762",amenity:"fuel"},addTags:{amenity:"fuel",brand:"OKQ8","brand:wikidata":"Q1634762","brand:wikipedia":"en:Kuwait Petroleum Corporation",name:"OKQ8"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/OMV":{name:"OMV",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FOmv%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q168238",amenity:"fuel"},addTags:{amenity:"fuel",brand:"OMV","brand:wikidata":"Q168238","brand:wikipedia":"en:OMV",name:"OMV"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Oilibya":{name:"Oilibya",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q7081491",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Oilibya","brand:wikidata":"Q7081491","brand:wikipedia":"en:Oilibya",name:"Oilibya","name:ar":"أويليبيا"},terms:["oilibia","oilibiya","oillibia","oilliby","oillibya","oillybia","oilybia","olibya","olybia"],matchScore:2,suggestion:true},"amenity/fuel/Opet":{name:"Opet",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20of%20Opet.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q7072824",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Opet","brand:wikidata":"Q7072824","brand:wikipedia":"en:Opet",name:"Opet"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Orlen":{name:"Orlen",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ORLENOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q971649",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Orlen","brand:wikidata":"Q971649","brand:wikipedia":"en:PKN Orlen",name:"Orlen"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Oxxo":{name:"Oxxo",icon:"maki-fuel",imageURL:"https://graph.facebook.com/OXXOTiendas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1342538",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Oxxo","brand:wikidata":"Q1342538","brand:wikipedia":"es:Oxxo",name:"Oxxo"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/PSO":{name:"PSO",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q2741455",amenity:"fuel"},addTags:{amenity:"fuel",brand:"PSO","brand:wikidata":"Q2741455","brand:wikipedia":"en:Pakistan State Oil",name:"PSO"},terms:["pso petrol pump"],matchScore:2,suggestion:true},"amenity/fuel/PT":{name:"PT",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ptstation/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62298612",amenity:"fuel"},addTags:{amenity:"fuel",brand:"PT","brand:wikidata":"Q62298612",name:"PT"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/PTT":{name:"PTT",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q1810389",amenity:"fuel"},addTags:{amenity:"fuel",brand:"PTT","brand:wikidata":"Q1810389","brand:wikipedia":"en:PTT Public Company Limited",name:"PTT"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/PV Oil":{name:"PV Oil",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q2089536",amenity:"fuel"},addTags:{amenity:"fuel",brand:"PV Oil","brand:wikidata":"Q2089536","brand:wikipedia":"en:Petrovietnam",name:"PV Oil"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Pacific Pride":{name:"Pacific Pride",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q7122637",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Pacific Pride","brand:wikidata":"Q7122637","brand:wikipedia":"en:Pacific Pride",name:"Pacific Pride"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Pecsa":{name:"Pecsa",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PecsaPeru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62299262",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Pecsa","brand:wikidata":"Q62299262",name:"Pecsa"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Pemex":{name:"Pemex",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Petr%C3%B3leos%20Mexicanos.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q871308",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Pemex","brand:wikidata":"Q871308","brand:wikipedia":"en:Pemex",name:"Pemex"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Pertamina":{name:"Pertamina",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FPertamina%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1641044",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Pertamina","brand:wikidata":"Q1641044","brand:wikipedia":"en:Pertamina",name:"Pertamina"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Petro-Canada":{name:"Petro-Canada",icon:"maki-fuel",imageURL:"https://graph.facebook.com/petrocanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1208279",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Petro-Canada","brand:wikidata":"Q1208279","brand:wikipedia":"en:Petro-Canada",name:"Petro-Canada"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Petro-T":{name:"Petro-T",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q61743540",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Petro-T","brand:wikidata":"Q61743540",name:"Petro-T"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/PetroPerú":{name:"PetroPerú",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Petroperu%20vertical%20negativo.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2506390",amenity:"fuel"},addTags:{amenity:"fuel",brand:"PetroPerú","brand:wikidata":"Q2506390","brand:wikipedia":"es:Petroperú",name:"PetroPerú"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Petrochina":{name:"Petrochina",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q503182",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Petrochina","brand:wikidata":"Q503182","brand:wikipedia":"en:PetroChina",name:"Petrochina"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Petroecuador":{name:"Petroecuador",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q1812822",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Petroecuador","brand:wikidata":"Q1812822","brand:wikipedia":"en:Petroecuador",name:"Petroecuador"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Petrol Ofisi":{name:"Petrol Ofisi",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q1278087",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Petrol Ofisi","brand:wikidata":"Q1278087","brand:wikipedia":"en:Petrol Ofisi",name:"Petrol Ofisi"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Petrolimex":{name:"Petrolimex",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q10831598",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Petrolimex","brand:wikidata":"Q10831598","brand:wikipedia":"en:Petrolimex",name:"Petrolimex"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Petrolina":{name:"Petrolina",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q17013948",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Petrolina","brand:wikidata":"Q17013948","brand:wikipedia":"en:Petrolina (company)",name:"Petrolina"},countryCodes:["cy"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Petrom":{name:"Petrom",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q1755034",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Petrom","brand:wikidata":"Q1755034","brand:wikipedia":"en:Petrom",name:"Petrom"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Petron":{name:"Petron",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PetronCorporation/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7179011",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Petron","brand:wikidata":"Q7179011","brand:wikipedia":"en:Petron Corporation",name:"Petron"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Petronas":{name:"Petronas",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FPetronas%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q221692",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Petronas","brand:wikidata":"Q221692","brand:wikipedia":"en:Petronas",name:"Petronas"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Petronor":{name:"Petronor",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q1726547",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Petronor","brand:wikidata":"Q1726547","brand:wikipedia":"es:Petronor",name:"Petronor"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Phillips 66":{name:"Phillips 66",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Phillips66Co/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1656230",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Phillips 66","brand:wikidata":"Q1656230","brand:wikipedia":"en:Phillips 66",name:"Phillips 66"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Phoenix":{name:"Phoenix",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q7186949",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Phoenix","brand:wikidata":"Q7186949","brand:wikipedia":"en:Phoenix Petroleum",name:"Phoenix"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Pilot":{name:"Pilot",icon:"maki-fuel",imageURL:"https://graph.facebook.com/pilottravelcenters/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1434601",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Pilot","brand:wikidata":"Q1434601","brand:wikipedia":"en:Pilot Flying J",name:"Pilot"},countryCodes:["ca","us"],terms:["flying j","pilot flying j"],matchScore:2,suggestion:true},"amenity/fuel/Pioneer":{name:"Pioneer",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q7196684",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Pioneer","brand:wikidata":"Q7196684","brand:wikipedia":"en:Pioneer Energy",name:"Pioneer"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Preem":{name:"Preem",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q598835",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Preem","brand:wikidata":"Q598835","brand:wikipedia":"en:Preem",name:"Preem"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Primax (Ecuador)":{name:"Primax (Ecuador)",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PrimaxEcuador/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62332857",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Primax","brand:wikidata":"Q62332857",name:"Primax"},countryCodes:["ec"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Primax (Peru)":{name:"Primax (Peru)",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PrimaxPeru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62332638",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Primax","brand:wikidata":"Q62332638",name:"Primax"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Prio":{name:"Prio",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PrioEnergy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62530421",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Prio","brand:wikidata":"Q62530421",name:"Prio"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Puma":{name:"Puma",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FPuma%20Energy%20Logo.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q7259769",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Puma","brand:wikidata":"Q7259769","brand:wikipedia":"en:Puma Energy",name:"Puma"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Q1":{name:"Q1",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Q1EnergieAG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62086498",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Q1","brand:wikidata":"Q62086498",name:"Q1",operator:"Q1 Energie AG","operator:wikidata":"Q2121146","operator:wikipedia":"de:Q1 Energie"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Q8":{name:"Q8",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q1634762",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Q8","brand:wikidata":"Q1634762","brand:wikipedia":"en:Kuwait Petroleum Corporation",name:"Q8"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Q8 Easy":{name:"Q8 Easy",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q1806948",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Q8 Easy","brand:wikidata":"Q1806948","brand:wikipedia":"nl:Q8 Easy",name:"Q8 Easy"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Qstar":{name:"Qstar",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q10647961",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Qstar","brand:wikidata":"Q10647961","brand:wikipedia":"sv:Qstar",name:"Qstar"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/QuikTrip":{name:"QuikTrip",icon:"maki-fuel",imageURL:"https://pbs.twimg.com/profile_images/978987077554581504/R7x8NTvv_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7271953",amenity:"fuel"},addTags:{amenity:"fuel",brand:"QuikTrip","brand:wikidata":"Q7271953","brand:wikipedia":"en:QuikTrip",name:"QuikTrip"},terms:["qt"],matchScore:2,suggestion:true},"amenity/fuel/RaceTrac":{name:"RaceTrac",icon:"maki-fuel",imageURL:"https://graph.facebook.com/RaceTrac/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q735942",amenity:"fuel"},addTags:{amenity:"fuel",brand:"RaceTrac","brand:wikidata":"Q735942","brand:wikipedia":"en:RaceTrac",name:"RaceTrac"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Repsol":{name:"Repsol",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20de%20Repsol.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q174747",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Repsol","brand:wikidata":"Q174747","brand:wikipedia":"es:Repsol",name:"Repsol"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Revoil":{name:"Revoil",icon:"maki-fuel",imageURL:"https://graph.facebook.com/revoil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62530755",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Revoil","brand:wikidata":"Q62530755",name:"Revoil"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Rompetrol":{name:"Rompetrol",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo-Rompetrol%20KMG%20colored%20approved.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1788862",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Rompetrol","brand:wikidata":"Q1788862","brand:wikipedia":"en:Rompetrol",name:"Rompetrol"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Royal Farms":{name:"Royal Farms",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q7374169",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Royal Farms","brand:wikidata":"Q7374169","brand:wikipedia":"en:Royal Farms",name:"Royal Farms"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Rubis":{name:"Rubis",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q3446514",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Rubis","brand:wikidata":"Q3446514","brand:wikipedia":"en:Rubis (company)",name:"Rubis"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Safeway":{name:"Safeway",icon:"maki-fuel",imageURL:"https://pbs.twimg.com/profile_images/813782141259497472/inQrmCRf_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1508234",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Safeway","brand:wikidata":"Q1508234","brand:wikipedia":"en:Safeway Inc.",name:"Safeway"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Sainsbury's":{name:"Sainsbury's",icon:"maki-fuel",imageURL:"https://pbs.twimg.com/profile_images/1101419025421225984/xsPc8EfW_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q152096",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Sainsbury's","brand:wikidata":"Q152096","brand:wikipedia":"en:Sainsbury's",name:"Sainsbury's"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Sam's Club":{name:"Sam's Club",icon:"maki-fuel",imageURL:"https://graph.facebook.com/samsclub/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1972120",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Sam's Club","brand:wikidata":"Q1972120","brand:wikipedia":"en:Sam's Club",name:"Sam's Club",operator:"Walmart","operator:wikidata":"Q483551","operator:wikipedia":"en:Walmart"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Sasol":{name:"Sasol",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSasol.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q905998",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Sasol","brand:wikidata":"Q905998","brand:wikipedia":"en:Sasol",name:"Sasol"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Sea Oil":{name:"Sea Oil",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q7389549",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Sea Oil","brand:wikidata":"Q7389549","brand:wikipedia":"en:Seaoil Philippines",name:"Sea Oil"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Sheetz":{name:"Sheetz",icon:"maki-fuel",imageURL:"https://graph.facebook.com/sheetz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7492551",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Sheetz","brand:wikidata":"Q7492551","brand:wikipedia":"en:Sheetz",name:"Sheetz"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Shell":{name:"Shell",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Shell/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q154950",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Shell","brand:wikidata":"Q154950","brand:wikipedia":"en:Royal Dutch Shell",name:"Shell"},terms:["posto shell","shell gas station","shell petrol station","shell station","station shell"],matchScore:2,suggestion:true},"amenity/fuel/Shell Express":{name:"Shell Express",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q2289188",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Shell Express","brand:wikidata":"Q2289188","brand:wikipedia":"nl:Shell Express",name:"Shell Express"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Sinclair":{name:"Sinclair",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSinclair%20gas%20station%20sign.JPG&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1290900",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Sinclair","brand:wikidata":"Q1290900","brand:wikipedia":"en:Sinclair Oil Corporation",name:"Sinclair"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Sinopec":{name:"Sinopec",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Sinopec/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q831445",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Sinopec","brand:wikidata":"Q831445","brand:wikipedia":"en:Sinopec","brand:zh":"中国石化",name:"Sinopec","name:zh":"中国石化"},countryCodes:["cn"],terms:["sinopec fuel"],matchScore:2,suggestion:true},"amenity/fuel/Slovnaft":{name:"Slovnaft",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2F%D0%A1%D0%BB%D0%BE%D0%B2%D0%BD%D0%B0%D1%84%D1%82.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1587563",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Slovnaft","brand:wikidata":"Q1587563","brand:wikipedia":"en:Slovnaft",name:"Slovnaft"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Socar":{name:"Socar",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FState%20Oil%20Company%20of%20Azerbaijan%20Republic%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1622293",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Socar","brand:wikidata":"Q1622293","brand:wikipedia":"en:SOCAR",name:"Socar"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Sokimex":{name:"Sokimex",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q1149575",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Sokimex","brand:wikidata":"Q1149575","brand:wikipedia":"en:Sokimex",name:"Sokimex"},countryCodes:["kh"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Speedway":{name:"Speedway",icon:"maki-fuel",imageURL:"https://graph.facebook.com/SpeedwayStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7575683",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Speedway","brand:wikidata":"Q7575683","brand:wikipedia":"en:Speedway LLC",name:"Speedway"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Sprint":{name:"Sprint",icon:"maki-fuel",imageURL:"https://graph.facebook.com/SprintTankstelle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57588452",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Sprint","brand:wikidata":"Q57588452",name:"Sprint"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/St1":{name:"St1",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSt1%20Logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q7592214",amenity:"fuel"},addTags:{amenity:"fuel",brand:"St1","brand:wikidata":"Q7592214","brand:wikipedia":"en:St1",name:"St1"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Star":{name:"Star",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q2031095",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Star","brand:wikidata":"Q2031095","brand:wikipedia":"de:Orlen Deutschland",name:"Star"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Station Service E. Leclerc":{name:"Station Service E. Leclerc",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FE.Leclerc%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1273376",amenity:"fuel"},addTags:{amenity:"fuel",brand:"E.Leclerc","brand:wikidata":"Q1273376","brand:wikipedia":"fr:E.Leclerc",name:"Station Service E. Leclerc"},terms:["e. leclerc"],matchScore:2,suggestion:true},"amenity/fuel/Statoil":{name:"Statoil",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Equinor/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1776022",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Statoil","brand:wikidata":"Q1776022","brand:wikipedia":"en:Equinor",name:"Statoil"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Stewart's":{name:"Stewart's",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q7615690",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Stewart's","brand:wikidata":"Q7615690","brand:wikipedia":"en:Stewart's Shops",name:"Stewart's"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Sunoco":{name:"Sunoco",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q1423218",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Sunoco","brand:wikidata":"Q1423218","brand:wikipedia":"en:Sunoco",name:"Sunoco"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Super U":{name:"Super U",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ULesCommercants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2529029",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Super U","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Super U"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/TA":{name:"TA",icon:"maki-fuel",imageURL:"https://graph.facebook.com/TravelCentersOfAmerica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7835892",amenity:"fuel"},addTags:{amenity:"fuel",brand:"TA","brand:wikidata":"Q7835892","brand:wikipedia":"en:TravelCenters of America",name:"TA"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Tamoil":{name:"Tamoil",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FTamoil.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q706793",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Tamoil","brand:wikidata":"Q706793","brand:wikipedia":"en:Tamoil",name:"Tamoil"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Tango":{name:"Tango",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q2423920",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Tango","brand:wikidata":"Q2423920","brand:wikipedia":"nl:Tango CV",name:"Tango"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Tanka":{name:"Tanka",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q10690640",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Tanka","brand:wikidata":"Q10690640","brand:wikipedia":"sv:Tanka (bensinstationskedja)",name:"Tanka"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Teboil":{name:"Teboil",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FTeboil%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q7692079",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Teboil","brand:wikidata":"Q7692079","brand:wikipedia":"en:Teboil",name:"Teboil"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Tela":{name:"Tela",icon:"maki-fuel",imageURL:"https://graph.facebook.com/TelaCompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62534875",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Tela","brand:wikidata":"Q62534875",name:"Tela"},countryCodes:["kh"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Tempo":{name:"Tempo",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q62535175",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Tempo","brand:wikidata":"Q62535175",name:"Tempo"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Terpel":{name:"Terpel",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q7703003",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Terpel","brand:wikidata":"Q7703003","brand:wikipedia":"en:Terpel",name:"Terpel"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Tesco":{name:"Tesco",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q17145596",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Tesco","brand:wikidata":"Q17145596","brand:wikipedia":"en:Tesco Corporation",name:"Tesco"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Texaco":{name:"Texaco",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FTexaco%20textlogo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q775060",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Texaco","brand:wikidata":"Q775060","brand:wikipedia":"en:Texaco",name:"Texaco"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Tinq":{name:"Tinq",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q2132028",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Tinq","brand:wikidata":"Q2132028","brand:wikipedia":"nl:Tinq",name:"Tinq"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Topaz":{name:"Topaz",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q7824764",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Topaz","brand:wikidata":"Q7824764","brand:wikipedia":"en:Topaz Energy",name:"Topaz"},countryCodes:["ie"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Total":{name:"Total",icon:"maki-fuel",imageURL:"https://pbs.twimg.com/profile_images/876776431543615489/1QCXAxs1_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q154037",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Total","brand:wikidata":"Q154037","brand:wikipedia":"fr:Total (entreprise)",name:"Total"},terms:["station total"],matchScore:2,suggestion:true},"amenity/fuel/Total Access":{name:"Total Access",icon:"maki-fuel",imageURL:"https://pbs.twimg.com/profile_images/876776431543615489/1QCXAxs1_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q154037",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Total Access","brand:wikidata":"Q154037","brand:wikipedia":"fr:Total (entreprise)",name:"Total Access"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/TotalErg":{name:"TotalErg",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FTotalerg%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3995933",amenity:"fuel"},addTags:{amenity:"fuel",brand:"TotalErg","brand:wikidata":"Q3995933","brand:wikipedia":"it:TotalErg",name:"TotalErg"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Turkey Hill":{name:"Turkey Hill",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q42376970",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Turkey Hill","brand:wikidata":"Q42376970","brand:wikipedia":"en:Turkey Hill Minit Markets",name:"Turkey Hill"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Turmöl":{name:"Turmöl",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20turmoel%20hoch.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1473279",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Turmöl","brand:wikidata":"Q1473279","brand:wikipedia":"de:Turmöl",name:"Turmöl"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/UDF Fuel":{name:"UDF Fuel",icon:"maki-fuel",imageURL:"https://graph.facebook.com/UnitedDairyFarmers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7887677",amenity:"fuel"},addTags:{amenity:"fuel",brand:"United Dairy Farmers","brand:wikidata":"Q7887677","brand:wikipedia":"en:United Dairy Farmers",name:"UDF Fuel",short_name:"UDF"},countryCodes:["us"],terms:["udf","udf fuels","united dairy farmers"],matchScore:2,suggestion:true},"amenity/fuel/Ultramar":{name:"Ultramar",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q3548078",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Ultramar","brand:wikidata":"Q3548078","brand:wikipedia":"en:Ultramar",name:"Ultramar"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/United":{name:"United",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q28224393",amenity:"fuel"},addTags:{amenity:"fuel",brand:"United","brand:wikidata":"Q28224393","brand:wikipedia":"en:United Petroleum",name:"United"},terms:["united petroleum"],matchScore:2,suggestion:true},"amenity/fuel/Uno":{name:"Uno",icon:"maki-fuel",imageURL:"https://graph.facebook.com/UnoGasolineras/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62535574",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Uno","brand:wikidata":"Q62535574",name:"Uno"},countryCodes:["bz","cr","gt","hn","ni","sv"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Uno-X":{name:"Uno-X",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FUno-X%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3362746",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Uno-X","brand:wikidata":"Q3362746","brand:wikipedia":"en:Uno-X",name:"Uno-X"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Valero":{name:"Valero",icon:"maki-fuel",imageURL:"https://graph.facebook.com/valeroenergy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1283291",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Valero","brand:wikidata":"Q1283291","brand:wikipedia":"en:Valero Energy",name:"Valero"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Viada":{name:"Viada",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q12663942",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Viada","brand:wikidata":"Q12663942","brand:wikipedia":"en:Lukoil Baltija",name:"Viada"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Vito":{name:"Vito",icon:"maki-fuel",imageURL:"https://graph.facebook.com/VITOCORSICA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62536473",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Vito","brand:wikidata":"Q62536473",name:"Vito"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/WOG":{name:"WOG",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FWOG%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q12072939",amenity:"fuel"},addTags:{amenity:"fuel",brand:"WOG","brand:wikidata":"Q12072939","brand:wikipedia":"en:WOG (gas stations)",name:"WOG"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Walmart":{name:"Walmart",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q62606411",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Walmart","brand:wikidata":"Q62606411","brand:wikipedia":"en:Walmart",name:"Walmart"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Wawa":{name:"Wawa",icon:"maki-fuel",imageURL:"https://graph.facebook.com/wawa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5936320",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Wawa","brand:wikidata":"Q5936320","brand:wikipedia":"en:Wawa (company)",name:"Wawa"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Westfalen":{name:"Westfalen",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q1411209",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Westfalen","brand:wikidata":"Q1411209","brand:wikipedia":"en:Westfalen AG",name:"Westfalen"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Woolworths Petrol":{name:"Woolworths Petrol",icon:"maki-fuel",imageURL:"https://graph.facebook.com/woolworths/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5023980",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Caltex","brand:wikidata":"Q5023980","brand:wikipedia":"en:Caltex Woolworths",name:"Woolworths Petrol"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/XTR":{name:"XTR",icon:"maki-fuel",imageURL:"https://graph.facebook.com/XTRenergy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62537250",amenity:"fuel"},addTags:{amenity:"fuel",brand:"XTR","brand:wikidata":"Q62537250",name:"XTR"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/YPF":{name:"YPF",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FYpf%20logo13.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2006989",amenity:"fuel"},addTags:{amenity:"fuel",brand:"YPF","brand:wikidata":"Q2006989","brand:wikipedia":"en:YPF",name:"YPF"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Z":{name:"Z",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FZEnergylogo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q8063337",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Z","brand:wikidata":"Q8063337","brand:wikipedia":"en:Z Energy",name:"Z"},countryCodes:["nz"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/bft":{name:"bft",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q1009104",amenity:"fuel"},addTags:{amenity:"fuel",brand:"bft","brand:wikidata":"Q1009104","brand:wikipedia":"de:Bundesverband freier Tankstellen",name:"bft"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/din-X":{name:"din-X",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q10472858",amenity:"fuel"},addTags:{amenity:"fuel",brand:"din-X","brand:wikidata":"Q10472858","brand:wikipedia":"sv:Din-X",name:"din-X"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Авіас":{name:"Авіас",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q12122687",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Авіас","brand:wikidata":"Q12122687","brand:wikipedia":"uk:Мережа АЗС Приват",name:"Авіас"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/БРСМ-Нафта":{name:"БРСМ-Нафта",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q56356523",amenity:"fuel"},addTags:{amenity:"fuel",brand:"БРСМ-Нафта","brand:wikidata":"Q56356523","brand:wikipedia":"uk:БРСМ-Нафта",name:"БРСМ-Нафта"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Башнефть":{name:"Башнефть",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBashneft%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q809985",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Башнефть","brand:en":"Bashneft","brand:wikidata":"Q809985","brand:wikipedia":"en:Bashneft",name:"Башнефть","name:en":"Bashneft"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Белоруснефть":{name:"Белоруснефть",icon:"maki-fuel",imageURL:"https://graph.facebook.com/belorusneft/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4082693",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Белоруснефть","brand:wikidata":"Q4082693","brand:wikipedia":"ru:Белоруснефть",name:"Белоруснефть"},countryCodes:["by"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Газпромнефть":{name:"Газпромнефть",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q1461799",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Газпромнефть","brand:wikidata":"Q1461799","brand:wikipedia":"en:Gazprom Neft",name:"Газпромнефть"},terms:["газпром"],matchScore:2,suggestion:true},"amenity/fuel/Гелиос":{name:"Гелиос",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q62286471",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Гелиос","brand:en":"Helios","brand:wikidata":"Q62286471",name:"Гелиос","name:en":"Helios"},countryCodes:["kz"],terms:["helios"],matchScore:2,suggestion:true},"amenity/fuel/ЕКА":{name:"ЕКА",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q62543029",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ЕКА","brand:wikidata":"Q62543029",name:"ЕКА"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/КЛО":{name:"КЛО",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q60966526",amenity:"fuel"},addTags:{amenity:"fuel",brand:"КЛО","brand:en":"Klo","brand:wikidata":"Q60966526","brand:wikipedia":"ru:КЛО (сеть АЗС)",name:"КЛО","name:en":"Klo"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/КазМунайГаз":{name:"КазМунайГаз",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q1417227",amenity:"fuel"},addTags:{amenity:"fuel",brand:"КазМунайГаз","brand:wikidata":"Q1417227","brand:wikipedia":"en:KazMunayGas",name:"КазМунайГаз"},countryCodes:["kz"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Лукойл":{name:"Лукойл",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLUK%20OIL%20Logo%20kyr.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q329347",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Лукойл","brand:wikidata":"Q329347","brand:wikipedia":"ru:Лукойл",name:"Лукойл"},terms:["лукоил"],matchScore:2,suggestion:true},"amenity/fuel/Макпетрол":{name:"Макпетрол",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q1886438",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Макпетрол","brand:wikidata":"Q1886438","brand:wikipedia":"en:Makpetrol",name:"Макпетрол"},countryCodes:["mk"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/НК Альянс":{name:"НК Альянс",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q4063700",amenity:"fuel"},addTags:{amenity:"fuel",brand:"НК Альянс","brand:wikidata":"Q4063700","brand:wikipedia":"ru:Альянс (компания)",name:"НК Альянс"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Нефтьмагистраль":{name:"Нефтьмагистраль",icon:"maki-fuel",imageURL:"https://graph.facebook.com/neftm.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62544323",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Нефтьмагистраль","brand:en":"Neftmagistral","brand:wikidata":"Q62544323",name:"Нефтьмагистраль","name:en":"Neftmagistral"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/ОККО":{name:"ОККО",icon:"maki-fuel",imageURL:"https://graph.facebook.com/okkoua/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7072617",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ОККО","brand:en":"OKKO","brand:wikidata":"Q7072617","brand:wikipedia":"en:OKKO",name:"ОККО","name:en":"OKKO"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/ОМВ":{name:"ОМВ",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FOmv%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q168238",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ОМВ","brand:wikidata":"Q168238","brand:wikipedia":"en:OMV",name:"ОМВ"},countryCodes:["bg","rs"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/ПТК":{name:"ПТК",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2F%D0%9B%D0%BE%D0%B3%D0%BE%D1%82%D0%B8%D0%BF%20%D0%9F%D0%B5%D1%82%D0%B5%D1%80%D0%B1%D1%83%D1%80%D0%B3%D1%81%D0%BA%D0%BE%D0%B9%20%D1%82%D0%BE%D0%BF%D0%BB%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9%20%D0%BA%D0%BE%D0%BC%D0%BF%D0%B0%D0%BD%D0%B8%D0%B8.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4360193",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ПТК","brand:en":"The Petersburg Fuel Company","brand:wikidata":"Q4360193","brand:wikipedia":"en:Petersburg Fuel Company",name:"ПТК","name:en":"The Petersburg Fuel Company"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Петрол":{name:"Петрол",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q24315",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Петрол","brand:en":"Petrol AD","brand:wikidata":"Q24315","brand:wikipedia":"en:Petrol AD",name:"Петрол","name:en":"Petrol AD"},countryCodes:["bg"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Роснефть":{name:"Роснефть",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FRosneft%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1141123",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Роснефть","brand:en":"Rosneft","brand:wikidata":"Q1141123","brand:wikipedia":"en:Rosneft",name:"Роснефть","name:en":"Rosneft"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Сургутнефтегаз":{name:"Сургутнефтегаз",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSng2.gif&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q680776",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Сургутнефтегаз","brand:en":"Surgutneftegas","brand:wikidata":"Q680776","brand:wikipedia":"en:Surgutneftegas",name:"Сургутнефтегаз","name:en":"Surgutneftegas"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/ТНК":{name:"ТНК",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q2298901",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ТНК","brand:wikidata":"Q2298901","brand:wikipedia":"en:TNK-BP",name:"ТНК"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Татнефть":{name:"Татнефть",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FTatneft%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1616858",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Татнефть","brand:en":"Tatneft","brand:wikidata":"Q1616858","brand:wikipedia":"en:Tatneft",name:"Татнефть","name:en":"Tatneft"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Укрнафта":{name:"Укрнафта",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FUkrnafta.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2447961",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Укрнафта","brand:en":"Ukrnafta","brand:wikidata":"Q2447961","brand:wikipedia":"en:Ukrnafta",name:"Укрнафта","name:en":"Ukrnafta"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/דור אלון":{name:"דור אלון",icon:"maki-fuel",imageURL:"https://graph.facebook.com/dor.alon.il/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16130352",amenity:"fuel"},addTags:{amenity:"fuel",brand:"דור אלון","brand:en":"Dor Alon","brand:he":"דור אלון","brand:wikidata":"Q16130352","brand:wikipedia":"he:דור אלון אנרגיה בישראל (1988)",name:"דור אלון","name:en":"Dor Alon","name:he":"דור אלון"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/סונול":{name:"סונול",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q3701622",amenity:"fuel"},addTags:{amenity:"fuel",brand:"סונול","brand:en":"Sonol","brand:he":"סונול","brand:wikidata":"Q3701622","brand:wikipedia":"en:Sonol",name:"סונול","name:en":"Sonol","name:he":"סונול"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/פז":{name:"פז",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q2211731",amenity:"fuel"},addTags:{amenity:"fuel",brand:"פז","brand:en":"Paz","brand:he":"פז","brand:wikidata":"Q2211731","brand:wikipedia":"en:Paz Oil Company",name:"פז","name:en":"Paz","name:he":"פז"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/ادنوك":{name:"ادنوك",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAbu%20Dhabi%20National%20Oil%20Company%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q166729",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ادنوك","brand:ar":"ادنوك","brand:en":"ADNOC","brand:wikidata":"Q166729","brand:wikipedia":"en:Abu Dhabi National Oil Company",name:"ادنوك","name:ar":"ادنوك","name:en":"ADNOC"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/บางจาก":{name:"บางจาก",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q6579719",amenity:"fuel"},addTags:{amenity:"fuel",brand:"บางจาก","brand:en":"Bangchak","brand:th":"บางจาก","brand:wikidata":"Q6579719","brand:wikipedia":"th:บางจาก คอร์ปอเรชัน",name:"บางจาก","name:en":"Bangchak","name:th":"บางจาก"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/ป.ต.ท.":{name:"ป.ต.ท.",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q1810389",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ป.ต.ท.","brand:en":"PTT","brand:th":"ป.ต.ท.","brand:wikidata":"Q1810389","brand:wikipedia":"th:ปตท.",name:"ป.ต.ท.","name:en":"PTT","name:th":"ป.ต.ท."},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/เชลล์":{name:"เชลล์",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Shell/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q154950",amenity:"fuel"},addTags:{amenity:"fuel",brand:"เชลล์","brand:en":"Shell","brand:th":"เชลล์","brand:wikidata":"Q154950","brand:wikipedia":"en:Royal Dutch Shell",name:"เชลล์","name:en":"Shell","name:th":"เชลล์"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/เอสโซ่":{name:"เอสโซ่",icon:"maki-fuel",imageURL:"https://pbs.twimg.com/profile_images/595503093447598080/4ooH4R98_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q867662",amenity:"fuel"},addTags:{amenity:"fuel",brand:"เอสโซ่","brand:en":"Esso","brand:th":"เอสโซ่","brand:wikidata":"Q867662","brand:wikipedia":"en:Esso",name:"เอสโซ่","name:en":"Esso","name:th":"เอสโซ่"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/エッソ":{name:"エッソ",icon:"maki-fuel",imageURL:"https://pbs.twimg.com/profile_images/595503093447598080/4ooH4R98_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q867662",amenity:"fuel"},addTags:{amenity:"fuel",brand:"エッソ","brand:en":"Esso","brand:ja":"エッソ","brand:wikidata":"Q867662","brand:wikipedia":"en:Esso",name:"エッソ","name:en":"Esso","name:ja":"エッソ"},countryCodes:["jp"],terms:["エッソ石油"],matchScore:2,suggestion:true},"amenity/fuel/エネオス":{name:"エネオス",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FJXTG%20Nippon%20Oil%20%26%20Energy%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1640290",amenity:"fuel"},addTags:{amenity:"fuel",brand:"エネオス","brand:en":"JXTG Nippon Oil & Energy","brand:ja":"エネオス","brand:wikidata":"Q1640290","brand:wikipedia":"en:JXTG Nippon Oil & Energy",name:"エネオス","name:en":"JXTG Nippon Oil & Energy","name:ja":"エネオス"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/コスモ石油":{name:"コスモ石油",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCosmo%20Oil%20company%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2498318",amenity:"fuel"},addTags:{amenity:"fuel",brand:"コスモ石油","brand:en":"Cosmo Oil Company","brand:ja":"コスモ石油","brand:wikidata":"Q2498318","brand:wikipedia":"en:Cosmo Oil Company",name:"コスモ石油","name:en":"Cosmo Oil Company","name:ja":"コスモ石油"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/ゼネラル":{name:"ゼネラル",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FTonenGeneral.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11528048",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ゼネラル","brand:en":"Tonen General","brand:ja":"ゼネラル","brand:wikidata":"Q11528048","brand:wikipedia":"ja:東燃ゼネラル石油",name:"ゼネラル","name:en":"Tonen General","name:ja":"ゼネラル"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/中国石化":{name:"中国石化",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Sinopec/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q831445",amenity:"fuel"},addTags:{amenity:"fuel",brand:"中国石化","brand:en":"Sinopec","brand:wikidata":"Q831445","brand:wikipedia":"en:Sinopec",name:"中国石化","name:en":"Sinopec"},countryCodes:["cn"],terms:["中国石化 Sinopec"],matchScore:2,suggestion:true},"amenity/fuel/中国石油":{name:"中国石油",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q503182",amenity:"fuel"},addTags:{amenity:"fuel",brand:"中国石油","brand:en":"PetroChina","brand:wikidata":"Q503182","brand:wikipedia":"en:PetroChina",name:"中国石油","name:en":"PetroChina"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/出光":{name:"出光",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q2216770",amenity:"fuel"},addTags:{amenity:"fuel",brand:"出光","brand:en":"Idemitsu Kosan","brand:wikidata":"Q2216770","brand:wikipedia":"en:Idemitsu Kosan",name:"出光","name:en":"Idemitsu Kosan"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/台灣中油":{name:"台灣中油",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q21527177",amenity:"fuel"},addTags:{amenity:"fuel",brand:"台灣中油","brand:en":"CPC Corporation, Taiwan","brand:wikidata":"Q21527177","brand:wikipedia":"en:CPC Corporation, Taiwan",name:"台灣中油","name:en":"CPC Corporation, Taiwan"},countryCodes:["tw"],terms:["中油"],matchScore:2,suggestion:true},"amenity/fuel/昭和シェル":{name:"昭和シェル",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q277115",amenity:"fuel"},addTags:{amenity:"fuel",brand:"昭和シェル","brand:en":"Showa Shell Sekiyu","brand:ja":"昭和シェル","brand:wikidata":"Q277115","brand:wikipedia":"en:Showa Shell Sekiyu",name:"昭和シェル","name:en":"Showa Shell Sekiyu","name:ja":"昭和シェル"},countryCodes:["jp"],terms:["昭和シェル石油"],matchScore:2,suggestion:true},"amenity/ice_cream/Baskin-Robbins":{name:"Baskin-Robbins",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/baskinrobbinsUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q584601",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Baskin-Robbins","brand:wikidata":"Q584601","brand:wikipedia":"en:Baskin-Robbins",cuisine:"ice_cream",name:"Baskin-Robbins"},terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Ben & Jerry's":{name:"Ben & Jerry's",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/BenandJerryAustralia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q816412",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Ben & Jerry's","brand:wikidata":"Q816412","brand:wikipedia":"en:Ben & Jerry's",cuisine:"ice_cream",name:"Ben & Jerry's"},terms:["ben and jerrys"],matchScore:2,suggestion:true},"amenity/ice_cream/Cold Stone Creamery":{name:"Cold Stone Creamery",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/coldstonecreamery/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1094923",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Cold Stone Creamery","brand:wikidata":"Q1094923","brand:wikipedia":"en:Cold Stone Creamery",cuisine:"ice_cream",name:"Cold Stone Creamery"},terms:["cold stone"],matchScore:2,suggestion:true},"amenity/ice_cream/D'Onofrio":{name:"D'Onofrio",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/DonofrioDOficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5203166",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"D'Onofrio","brand:wikidata":"Q5203166","brand:wikipedia":"es:D'Onofrio",cuisine:"ice_cream",name:"D'Onofrio"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Freddo":{name:"Freddo",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/FreddoUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28823999",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Freddo","brand:wikidata":"Q28823999","brand:wikipedia":"es:Freddo",cuisine:"ice_cream",name:"Freddo"},terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Graeter's":{name:"Graeter's",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/Graeters/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5592430",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Graeter's","brand:wikidata":"Q5592430","brand:wikipedia":"en:Graeter's",cuisine:"ice_cream",name:"Graeter's",takeaway:"yes"},countryCodes:["us"],terms:["greaters"],matchScore:2,suggestion:true},"amenity/ice_cream/Grido":{name:"Grido",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/GridoHelados/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5885724",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Grido","brand:wikidata":"Q5885724","brand:wikipedia":"es:Grido Helado",cuisine:"ice_cream",name:"Grido"},countryCodes:["ar"],terms:["grido helado"],matchScore:2,suggestion:true},"amenity/ice_cream/Ralph's Italian Ices":{name:"Ralph's Italian Ices",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/RalphsFamous/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62576909",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Ralph's Italian Ices","brand:wikidata":"Q62576909",cuisine:"ice_cream",name:"Ralph's Italian Ices",official_name:"Ralph's Famous Italian Ices"},countryCodes:["us"],terms:["ralphs famous italian ices","ralphs famous italian ices & ice cream","ralphs famous italian ices and ice cream","ralphs italian ice","ralphs italian ices & ice cream","ralphs italian ices and ice cream"],matchScore:2,suggestion:true},"amenity/ice_cream/Rita's Italian Ice":{name:"Rita's Italian Ice",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/RitasItalianIceCompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7336456",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Rita's Italian Ice","brand:wikidata":"Q7336456","brand:wikipedia":"en:Rita's Italian Ice",cuisine:"ice_cream",name:"Rita's Italian Ice"},countryCodes:["us"],terms:["rita's water ice"],matchScore:2,suggestion:true},"amenity/ice_cream/sweetFrog":{name:"sweetFrog",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/sweetfrogfroyo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16952110",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"sweetFrog","brand:wikidata":"Q16952110","brand:wikipedia":"en:Sweet Frog",cuisine:"frozen_yogurt",name:"sweetFrog"},countryCodes:["us"],terms:["sweetfrog frozen yogurt","sweetfrog premium frozen yogurt"],matchScore:2,suggestion:true},"amenity/ice_cream/サーティワンアイスクリーム":{name:"サーティワンアイスクリーム",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/baskinrobbinsUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q584601",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"バスキン・ロビンス","brand:en":"Baskin-Robbins","brand:ja":"バスキン・ロビンス","brand:wikidata":"Q584601","brand:wikipedia":"ja:バスキン・ロビンス",cuisine:"ice_cream",name:"サーティワンアイスクリーム","name:en":"Baskin-Robbins","name:ja":"サーティワンアイスクリーム"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/kindergarten/KinderCare":{name:"KinderCare",icon:"maki-school",imageURL:"https://graph.facebook.com/kindercare/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6410551",amenity:"kindergarten"},addTags:{after_school:"yes",alt_name:"KinderCare Learning Center",amenity:"kindergarten",brand:"KinderCare","brand:wikidata":"Q6410551","brand:wikipedia":"en:KinderCare Learning Centers",fee:"yes","isced:level":"0",max_age:"12",min_age:"6 weeks",name:"KinderCare",nursery:"yes",preschool:"yes"},countryCodes:["us"],terms:["kindercare learning center"],matchScore:2,suggestion:true},"amenity/money_transfer/Express Union":{name:"Express Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/ExpressUnionFinance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3062276",amenity:"money_transfer"},addTags:{amenity:"money_transfer",brand:"Express Union","brand:wikidata":"Q3062276","brand:wikipedia":"fr:Express Union",name:"Express Union"},countryCodes:["td"],terms:[],matchScore:2,suggestion:true},"amenity/money_transfer/Orange Money":{name:"Orange Money",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q16668220",amenity:"money_transfer"},addTags:{amenity:"money_transfer",brand:"Orange Money","brand:wikidata":"Q16668220","brand:wikipedia":"en:Orange Money",name:"Orange Money"},terms:[],matchScore:2,suggestion:true},"amenity/money_transfer/Western Union":{name:"Western Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/WesternUnion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q861042",amenity:"money_transfer"},addTags:{amenity:"money_transfer",brand:"Western Union","brand:wikidata":"Q861042","brand:wikipedia":"en:Western Union",name:"Western Union"},terms:[],matchScore:2,suggestion:true},"amenity/payment_centre/Abitab":{name:"Abitab",icon:"maki-bank",imageURL:"https://graph.facebook.com/Abitaboficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16488129",amenity:"payment_centre"},addTags:{amenity:"payment_centre",brand:"Abitab","brand:wikidata":"Q16488129","brand:wikipedia":"es:Abitab",name:"Abitab"},countryCodes:["uy"],terms:[],matchScore:2,suggestion:true},"amenity/payment_centre/Rapipago":{name:"Rapipago",icon:"maki-bank",imageURL:"https://graph.facebook.com/Rapipago/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6100413",amenity:"payment_centre"},addTags:{amenity:"payment_centre",brand:"Rapipago","brand:wikidata":"Q6100413","brand:wikipedia":"es:Rapipago",name:"Rapipago"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/payment_terminal/Qiwi":{name:"Qiwi",icon:"far-credit-card",imageURL:"https://graph.facebook.com/qiwirussia/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q4047736",amenity:"payment_terminal"},addTags:{amenity:"payment_terminal",brand:"Qiwi","brand:wikidata":"Q4047736","brand:wikipedia":"en:Qiwi",name:"Qiwi"},terms:[],matchScore:2,suggestion:true},"amenity/payment_terminal/ПриватБанк":{name:"ПриватБанк",icon:"far-credit-card",imageURL:"https://graph.facebook.com/privatbank/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q1515015",amenity:"payment_terminal"},addTags:{amenity:"payment_terminal",brand:"ПриватБанк","brand:wikidata":"Q1515015","brand:wikipedia":"en:PrivatBank",name:"ПриватБанк"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/payment_terminal/Элекснет":{name:"Элекснет",icon:"far-credit-card",geometry:["point"],tags:{"brand:wikidata":"Q4530795",amenity:"payment_terminal"},addTags:{amenity:"payment_terminal",brand:"Элекснет","brand:wikidata":"Q4530795","brand:wikipedia":"ru:Элекснет",name:"Элекснет"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/36,6":{name:"36,6",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q226889",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"36,6","brand:wikidata":"Q226889","brand:wikipedia":"ru:36,6 (аптечная сеть)",healthcare:"pharmacy",name:"36,6"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ru"],terms:["аптека 36,6"],matchScore:2,suggestion:true},"amenity/pharmacy/Amcal":{name:"Amcal",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q63367373",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Amcal","brand:wikidata":"Q63367373",healthcare:"pharmacy",name:"Amcal"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["au"],terms:["amcal pharmacy"],matchScore:2,suggestion:true},"amenity/pharmacy/Apollo Pharmacy":{name:"Apollo Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/ApolloPharmacy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62562612",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Apollo Pharmacy","brand:wikidata":"Q62562612",healthcare:"pharmacy",name:"Apollo Pharmacy",operator:"Apollo Hospitals","operator:wikidata":"Q4780321","operator:wikipedia":"en:Apollo Hospitals"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Apotek Hjärtat":{name:"Apotek Hjärtat",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q10416114",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Apotek Hjärtat","brand:wikidata":"Q10416114","brand:wikipedia":"sv:Apotek Hjärtat",healthcare:"pharmacy",name:"Apotek Hjärtat"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Bartell Drugs":{name:"Bartell Drugs",icon:"maki-pharmacy",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBartell%20Drugs%20(logo).gif&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4865152",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Bartell Drugs","brand:wikidata":"Q4865152","brand:wikipedia":"en:Bartell Drugs",healthcare:"pharmacy",name:"Bartell Drugs"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Benavides":{name:"Benavides",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q5435613",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Benavides","brand:wikidata":"Q5435613","brand:wikipedia":"en:Farmacias Benavides",healthcare:"pharmacy",name:"Benavides"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Benu":{name:"Benu",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q62562792",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Benu","brand:wikidata":"Q62562792",healthcare:"pharmacy",name:"Benu"},reference:{key:"amenity",value:"pharmacy"},terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Blooms The Chemist":{name:"Blooms The Chemist",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q63367543",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Blooms The Chemist","brand:wikidata":"Q63367543",healthcare:"pharmacy",name:"Blooms The Chemist",shop:"chemist"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Boots":{name:"Boots",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/bootsuk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6123139",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Boots","brand:wikidata":"Q6123139","brand:wikipedia":"en:Boots UK",healthcare:"pharmacy",name:"Boots"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["gb"],terms:["boots pharmacy"],matchScore:2,suggestion:true},"amenity/pharmacy/Boticas y Salud":{name:"Boticas y Salud",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/Boticas-Salud-844038768993601/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62563126",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Boticas y Salud","brand:wikidata":"Q62563126",healthcare:"pharmacy",name:"Boticas y Salud"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Brookshire Brothers Pharmacy":{name:"Brookshire Brothers Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/BrookshireBros/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4975084",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Brookshire Brothers Pharmacy","brand:wikidata":"Q4975084","brand:wikipedia":"en:Brookshire Brothers",healthcare:"pharmacy",name:"Brookshire Brothers Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/CVS":{name:"CVS",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/CVS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2078880",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"CVS","brand:wikidata":"Q2078880","brand:wikipedia":"en:CVS Pharmacy",healthcare:"pharmacy",name:"CVS"},reference:{key:"amenity",value:"pharmacy"},terms:["cvs pharmacy"],matchScore:2,suggestion:true},"amenity/pharmacy/Camelia":{name:"Camelia",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/camelia.vaistine/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15867413",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Camelia","brand:wikidata":"Q15867413","brand:wikipedia":"lt:Nemuno vaistinė",healthcare:"pharmacy",name:"Camelia"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["lt"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Catena":{name:"Catena",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/FarmaciaCatena/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24035728",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Catena","brand:wikidata":"Q24035728","brand:wikipedia":"ro:Farmacia Catena",healthcare:"pharmacy",name:"Catena"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ro"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Chemist King Discount Pharmacy":{name:"Chemist King Discount Pharmacy",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q63367667",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Chemist King Discount Pharmacy","brand:wikidata":"Q63367667",healthcare:"pharmacy",name:"Chemist King Discount Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["au"],terms:["chemist king","chemist king discount pharmacies"],matchScore:2,suggestion:true},"amenity/pharmacy/Chemist Warehouse":{name:"Chemist Warehouse",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q48782120",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Chemist Warehouse","brand:wikidata":"Q48782120","brand:wikipedia":"en:Chemist Warehouse",healthcare:"pharmacy",name:"Chemist Warehouse"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Clicks":{name:"Clicks",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/ClicksSouthAfrica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62563622",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Clicks","brand:wikidata":"Q62563622",healthcare:"pharmacy",name:"Clicks"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["za"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Costco Pharmacy":{name:"Costco Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/Costco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q715583",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Costco Pharmacy","brand:wikidata":"Q715583","brand:wikipedia":"en:Costco",healthcare:"pharmacy",name:"Costco Pharmacy"},reference:{key:"amenity",value:"pharmacy"},terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Cruz Azul":{name:"Cruz Azul",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/CruzAzul.Farmacias/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62108219",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Cruz Azul","brand:wikidata":"Q62108219",healthcare:"pharmacy",name:"Cruz Azul"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ec"],terms:["farmacias cruz azul"],matchScore:2,suggestion:true},"amenity/pharmacy/Cruz Verde":{name:"Cruz Verde",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/FarmaciasCruzVerde1/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5856071",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Cruz Verde","brand:wikidata":"Q5856071","brand:wikipedia":"es:Farmacias Cruz Verde",healthcare:"pharmacy",name:"Cruz Verde"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["cl"],terms:["farmacias cruz verde"],matchScore:2,suggestion:true},"amenity/pharmacy/Day Lewis Pharmacy":{name:"Day Lewis Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/DayLewisPharmacy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62563772",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Day Lewis Pharmacy","brand:wikidata":"Q62563772",healthcare:"pharmacy",name:"Day Lewis Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Dbam o Zdrowie":{name:"Dbam o Zdrowie",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/dbamozdrowie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62563833",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Dbam o Zdrowie","brand:wikidata":"Q62563833",healthcare:"pharmacy",name:"Dbam o Zdrowie"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Dr. Max":{name:"Dr. Max",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q56317371",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Dr. Max","brand:wikidata":"Q56317371","brand:wikipedia":"fr:Dr.Max",healthcare:"pharmacy",name:"Dr. Max"},reference:{key:"amenity",value:"pharmacy"},terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Droga Raia":{name:"Droga Raia",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q10357101",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Droga Raia","brand:wikidata":"Q10357101","brand:wikipedia":"pt:RaiaDrogasil",healthcare:"pharmacy",name:"Droga Raia"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Drogaria São Paulo":{name:"Drogaria São Paulo",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q5308184",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Drogaria São Paulo","brand:wikidata":"Q5308184","brand:wikipedia":"en:Grupo DPSP",healthcare:"pharmacy",name:"Drogaria São Paulo"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Drogasil":{name:"Drogasil",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q5308185",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Drogasil","brand:wikidata":"Q5308185","brand:wikipedia":"pt:Drogasil",healthcare:"pharmacy",name:"Drogasil",wheelchair:"yes"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Duane Reade":{name:"Duane Reade",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/duanereade/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5310380",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Duane Reade","brand:wikidata":"Q5310380","brand:wikipedia":"en:Duane Reade",healthcare:"pharmacy",name:"Duane Reade"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Eurovaistinė":{name:"Eurovaistinė",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q267205",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Eurovaistinė","brand:wikidata":"Q267205","brand:wikipedia":"en:Euroapotheca",healthcare:"pharmacy",name:"Eurovaistinė"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["lt"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Extrafarma":{name:"Extrafarma",icon:"maki-pharmacy",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FExtrafarma%20Logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q20055480",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Extrafarma","brand:wikidata":"Q20055480","brand:wikipedia":"pt:Extrafarma",healthcare:"pharmacy",name:"Extrafarma"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Familiprix":{name:"Familiprix",icon:"maki-pharmacy",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FFamiliprix.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3064881",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Familiprix","brand:wikidata":"Q3064881","brand:wikipedia":"en:Familiprix",healthcare:"pharmacy",name:"Familiprix"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Farmacenter (Colombia)":{name:"Farmacenter (Colombia)",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/FarmacenterCo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62563928",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Farmacenter","brand:wikidata":"Q62563928",healthcare:"pharmacy",name:"Farmacenter"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["co"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Farmacia Benavides":{name:"Farmacia Benavides",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q5435613",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Farmacia Benavides","brand:wikidata":"Q5435613","brand:wikipedia":"en:Farmacias Benavides",healthcare:"pharmacy",name:"Farmacia Benavides"},reference:{key:"amenity",value:"pharmacy"},terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Farmacia Guadalajara":{name:"Farmacia Guadalajara",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q5435609",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Farmacia Guadalajara","brand:wikidata":"Q5435609","brand:wikipedia":"en:Farmacias Guadalajara",healthcare:"pharmacy",name:"Farmacia Guadalajara"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["mx"],terms:["farmacias guadalajara"],matchScore:2,suggestion:true},"amenity/pharmacy/Farmacias Ahumada":{name:"Farmacias Ahumada",icon:"maki-pharmacy",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FFarmacias%20ahumada.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5856069",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Farmacias Ahumada","brand:wikidata":"Q5856069","brand:wikipedia":"es:Farmacias Ahumada",healthcare:"pharmacy",name:"Farmacias Ahumada"},reference:{key:"amenity",value:"pharmacy"},terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Farmacias Económicas (Ecuador)":{name:"Farmacias Económicas (Ecuador)",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/FarmaciasEconomicasEc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62108380",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Farmacias Económicas","brand:wikidata":"Q62108380",healthcare:"pharmacy",name:"Farmacias Económicas"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ec"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Farmacias Económicas (El Salvador)":{name:"Farmacias Económicas (El Salvador)",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/FarmaciasEconomicas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62108397",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Farmacias Económicas","brand:wikidata":"Q62108397",healthcare:"pharmacy",name:"Farmacias Económicas"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["sv"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Farmacias SalcoBrand":{name:"Farmacias SalcoBrand",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q2877054",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Farmacias SalcoBrand","brand:wikidata":"Q2877054","brand:wikipedia":"es:Farmacias Salcobrand",healthcare:"pharmacy",name:"Farmacias SalcoBrand"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["cl"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Farmacias Similares":{name:"Farmacias Similares",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/DrSimiChile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62564610",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Farmacias Similares","brand:wikidata":"Q62564610",healthcare:"pharmacy",name:"Farmacias Similares"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["cl","gt","mx"],terms:["similares"],matchScore:2,suggestion:true},"amenity/pharmacy/Farmacias del Ahorro":{name:"Farmacias del Ahorro",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/FAhorro/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62086647",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Farmacias del Ahorro","brand:wikidata":"Q62086647",healthcare:"pharmacy",name:"Farmacias del Ahorro"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["mx"],terms:["farmacia del ahorro"],matchScore:2,suggestion:true},"amenity/pharmacy/Farmacias del Dr. Simi":{name:"Farmacias del Dr. Simi",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/DrSimiChile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62564610",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Farmacias del Dr. Simi","brand:wikidata":"Q62564610",healthcare:"pharmacy",name:"Farmacias del Dr. Simi"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["cl","gt","mx"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Farmacity":{name:"Farmacity",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/Farmacity/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5856076",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Farmacity","brand:wikidata":"Q5856076","brand:wikipedia":"es:Farmacity",healthcare:"pharmacy",name:"Farmacity"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ra"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Farmahorro":{name:"Farmahorro",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q20015002",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Farmahorro","brand:wikidata":"Q20015002","brand:wikipedia":"es:Farmahorro",healthcare:"pharmacy",name:"Farmahorro"},reference:{key:"amenity",value:"pharmacy"},terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Farmatodo":{name:"Farmatodo",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q5856092",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Farmatodo","brand:wikidata":"Q5856092","brand:wikipedia":"es:Farmatodo",healthcare:"pharmacy",name:"Farmatodo"},reference:{key:"amenity",value:"pharmacy"},terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Felicia":{name:"Felicia",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/farmaciafelicia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62564805",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Felicia","brand:wikidata":"Q62564805",healthcare:"pharmacy",name:"Felicia"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["md"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Fybeca":{name:"Fybeca",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/fybeca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62564822",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Fybeca","brand:wikidata":"Q62564822",healthcare:"pharmacy",name:"Fybeca"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ec"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Generika":{name:"Generika",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q62564876",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Generika","brand:wikidata":"Q62564876",healthcare:"pharmacy",name:"Generika"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ph"],terms:["generika drugstore"],matchScore:2,suggestion:true},"amenity/pharmacy/Gintarinė vaistinė":{name:"Gintarinė vaistinė",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q15857801",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Gintarinė vaistinė","brand:wikidata":"Q15857801","brand:wikipedia":"lt:Gintarinė vaistinė",healthcare:"pharmacy",name:"Gintarinė vaistinė"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["lt"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Guardian (Asia)":{name:"Guardian (Asia)",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q63371124",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Guardian","brand:wikidata":"Q63371124",healthcare:"pharmacy",name:"Guardian"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["bn","id","kh","my","sg","vn"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Guardian (Australia)":{name:"Guardian (Australia)",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q63367814",amenity:"pharmacy"},addTags:{brand:"Guardian","brand:wikidata":"Q63367814",healthcare:"pharmacy",name:"Guardian"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["au"],terms:["guardian pharmacies","guardian pharmacy"],matchScore:2,suggestion:true},"amenity/pharmacy/H-E-B Pharmacy":{name:"H-E-B Pharmacy",icon:"maki-pharmacy",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20of%20the%20HEB%20Grocery%20Company%2C%20LP.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q830621",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"H-E-B Pharmacy","brand:wikidata":"Q830621","brand:wikipedia":"en:H-E-B",healthcare:"pharmacy",name:"H-E-B Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Hy-Vee Pharmacy":{name:"Hy-Vee Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/HyVee/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1639719",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Hy-Vee Pharmacy","brand:wikidata":"Q1639719","brand:wikipedia":"en:Hy-Vee",healthcare:"pharmacy",name:"Hy-Vee Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Inkafarma":{name:"Inkafarma",icon:"maki-pharmacy",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20de%20Inkafarma.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q10997748",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Inkafarma","brand:wikidata":"Q10997748","brand:wikipedia":"es:Inkafarma",healthcare:"pharmacy",name:"Inkafarma"},reference:{key:"amenity",value:"pharmacy"},terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Jean Coutu":{name:"Jean Coutu",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q3117457",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Jean Coutu","brand:wikidata":"Q3117457","brand:wikipedia":"en:Jean Coutu Group",healthcare:"pharmacy",name:"Jean Coutu"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Kimia Farma":{name:"Kimia Farma",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11264892",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Kimia Farma","brand:wikidata":"Q11264892","brand:wikipedia":"en:Kimia Farma",healthcare:"pharmacy",name:"Kimia Farma"},reference:{key:"amenity",value:"pharmacy"},terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Kinney Drugs":{name:"Kinney Drugs",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q6414090",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Kinney Drugs","brand:wikidata":"Q6414090","brand:wikipedia":"en:Kinney Drugs",healthcare:"pharmacy",name:"Kinney Drugs"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Lloyds Pharmacy":{name:"Lloyds Pharmacy",icon:"maki-pharmacy",imageURL:"https://pbs.twimg.com/profile_images/3785151714/bacbe389277bb2f5477016a7fde79bcd_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q6662870",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Lloyds Pharmacy","brand:wikidata":"Q6662870","brand:wikipedia":"en:LloydsPharmacy",healthcare:"pharmacy",name:"Lloyds Pharmacy"},reference:{key:"amenity",value:"pharmacy"},terms:["lloyds"],matchScore:2,suggestion:true},"amenity/pharmacy/London Drugs":{name:"London Drugs",icon:"maki-pharmacy",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLondon%20Drugs%20Logo%20-%20with%20border.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3258955",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"London Drugs","brand:wikidata":"Q3258955","brand:wikipedia":"en:London Drugs",healthcare:"pharmacy",name:"London Drugs"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Mannings":{name:"Mannings",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q13646560",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Mannings","brand:wikidata":"Q13646560","brand:wikipedia":"en:Mannings",healthcare:"pharmacy",name:"Mannings"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["cn","hk","mo"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Marc's Pharmacy":{name:"Marc's Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/MarcsStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17080259",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Marc's","brand:wikidata":"Q17080259","brand:wikipedia":"en:Marc's",healthcare:"pharmacy",name:"Marc's Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Mercury Drug":{name:"Mercury Drug",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q6818610",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Mercury Drug","brand:wikidata":"Q6818610","brand:wikipedia":"en:Mercury Drug",healthcare:"pharmacy",name:"Mercury Drug"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Mifarma":{name:"Mifarma",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q62564998",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Mifarma","brand:wikidata":"Q62564998",healthcare:"pharmacy",name:"Mifarma"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Multipharma":{name:"Multipharma",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/Multipharma.be/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62565018",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Multipharma","brand:wikidata":"Q62565018",healthcare:"pharmacy",name:"Multipharma"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["be"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Mēness aptieka":{name:"Mēness aptieka",icon:"maki-pharmacy",imageURL:"https://pbs.twimg.com/profile_images/854306359071961089/tyVjOiXp_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q57583051",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Mēness aptieka","brand:wikidata":"Q57583051",healthcare:"pharmacy",name:"Mēness aptieka"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["lv"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Pague Menos":{name:"Pague Menos",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q7124466",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Pague Menos","brand:wikidata":"Q7124466","brand:wikipedia":"pt:Pague Menos",healthcare:"pharmacy",name:"Pague Menos"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["br"],terms:["farmácia pague menos"],matchScore:2,suggestion:true},"amenity/pharmacy/PharmaSave (Australia)":{name:"PharmaSave (Australia)",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q63367906",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"PharmaSave","brand:wikidata":"Q63367906",healthcare:"pharmacy",name:"PharmaSave"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Pharmacie Principale":{name:"Pharmacie Principale",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q1547749",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Pharmacie Principale","brand:wikidata":"Q1547749","brand:wikipedia":"fr:Groupe PP Holding",healthcare:"pharmacy",name:"Pharmacie Principale"},reference:{key:"amenity",value:"pharmacy"},terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Pharmacy 4 Less":{name:"Pharmacy 4 Less",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q63367608",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Pharmacy 4 Less","brand:wikidata":"Q63367608",healthcare:"pharmacy",name:"Pharmacy 4 Less"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Pharmaprix":{name:"Pharmaprix",icon:"maki-pharmacy",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FShoppers-Drug-Mart-Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1820137",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Pharmaprix","brand:wikidata":"Q1820137","brand:wikipedia":"en:Shoppers Drug Mart",healthcare:"pharmacy",name:"Pharmaprix"},reference:{key:"amenity",value:"pharmacy"},terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Pharmasave (Canada)":{name:"Pharmasave (Canada)",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q17093822",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Pharmasave","brand:wikidata":"Q17093822","brand:wikipedia":"en:Pharmasave",healthcare:"pharmacy",name:"Pharmasave"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Priceline Pharmacy":{name:"Priceline Pharmacy",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q7242652",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Priceline Pharmacy","brand:wikidata":"Q7242652","brand:wikipedia":"en:Priceline (Australia)",healthcare:"pharmacy",name:"Priceline Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["au"],terms:["priceline"],matchScore:2,suggestion:true},"amenity/pharmacy/Punto Farma (Colombia)":{name:"Punto Farma (Colombia)",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q62595271",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Punto Farma","brand:wikidata":"Q62595271",healthcare:"pharmacy",name:"Punto Farma"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["co"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Punto Farma (Honduras)":{name:"Punto Farma (Honduras)",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/FarmaciasPuntoFarma/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62595229",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Punto Farma","brand:wikidata":"Q62595229",healthcare:"pharmacy",name:"Punto Farma"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["hn"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Punto Farma (Paraguay)":{name:"Punto Farma (Paraguay)",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/Puntofarmapy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62595220",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Punto Farma","brand:wikidata":"Q62595220",healthcare:"pharmacy",name:"Punto Farma"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["py"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Rexall":{name:"Rexall",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q7319360",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Rexall","brand:wikidata":"Q7319360","brand:wikipedia":"en:Rexall",healthcare:"pharmacy",name:"Rexall"},reference:{key:"amenity",value:"pharmacy"},terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Rite Aid":{name:"Rite Aid",icon:"maki-pharmacy",imageURL:"https://pbs.twimg.com/profile_images/1096082254231613441/2lYTJj1d_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q3433273",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Rite Aid","brand:wikidata":"Q3433273","brand:wikipedia":"en:Rite Aid",healthcare:"pharmacy",name:"Rite Aid"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["us"],terms:["rite aid pharmacy"],matchScore:2,suggestion:true},"amenity/pharmacy/Rose Pharmacy":{name:"Rose Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/RosePharmacyInc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62663208",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Rose Pharmacy","brand:wikidata":"Q62663208",healthcare:"pharmacy",name:"Rose Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Rowlands Pharmacy":{name:"Rowlands Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/RowlandsPharmacy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62663235",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Rowlands Pharmacy","brand:wikidata":"Q62663235",healthcare:"pharmacy",name:"Rowlands Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/SalcoBrand":{name:"SalcoBrand",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q2877054",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"SalcoBrand","brand:wikidata":"Q2877054","brand:wikipedia":"es:Farmacias Salcobrand",healthcare:"pharmacy",name:"SalcoBrand"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["cl"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Sana Sana":{name:"Sana Sana",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/FarmaciasSanaSanaEc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62564499",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Sana Sana","brand:wikidata":"Q62564499",healthcare:"pharmacy",name:"Sana Sana"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ec"],terms:["farmacias sana sana"],matchScore:2,suggestion:true},"amenity/pharmacy/Sensiblu":{name:"Sensiblu",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q12740640",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Sensiblu","brand:wikidata":"Q12740640","brand:wikipedia":"ro:Sensiblu",healthcare:"pharmacy",name:"Sensiblu"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ro"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Shoppers Drug Mart":{name:"Shoppers Drug Mart",icon:"maki-pharmacy",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FShoppers-Drug-Mart-Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1820137",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Shoppers Drug Mart","brand:wikidata":"Q1820137","brand:wikipedia":"en:Shoppers Drug Mart",healthcare:"pharmacy",name:"Shoppers Drug Mart"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/South Star Drug":{name:"South Star Drug",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q7568544",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"South Star Drug","brand:wikidata":"Q7568544","brand:wikipedia":"en:South Star Drug",healthcare:"pharmacy",name:"South Star Drug"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Superdrug":{name:"Superdrug",icon:"maki-pharmacy",imageURL:"https://pbs.twimg.com/profile_images/1010086590536929280/Dy5TpFig_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7643261",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Superdrug","brand:wikidata":"Q7643261","brand:wikipedia":"en:Superdrug",healthcare:"pharmacy",name:"Superdrug"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/São João":{name:"São João",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/farmaciassaojoao/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62663306",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"São João","brand:wikidata":"Q62663306",healthcare:"pharmacy",name:"São João"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/TGP":{name:"TGP",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q61948677",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"The Generics Pharmacy","brand:wikidata":"Q61948677",healthcare:"pharmacy",name:"TGP",official_name:"The Generics Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ph"],terms:["the generics pharmacy"],matchScore:2,suggestion:true},"amenity/pharmacy/TerryWhite Chemmart":{name:"TerryWhite Chemmart",icon:"maki-pharmacy",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FTerry%20White%20Chemists.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q24089773",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"TerryWhite Chemmart","brand:wikidata":"Q24089773","brand:wikipedia":"en:Terry White Chemmart",healthcare:"pharmacy",name:"TerryWhite Chemmart"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["au"],terms:["terrywhite","terrywhite chemist","terrywhite chemists"],matchScore:2,suggestion:true},"amenity/pharmacy/UFS":{name:"UFS",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q63367573",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"UFS","brand:wikidata":"Q63367573",healthcare:"pharmacy",name:"UFS"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["au"],terms:["ufs dispensaries"],matchScore:2,suggestion:true},"amenity/pharmacy/Unichem Pharmacy":{name:"Unichem Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/UnichemNZ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62663379",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Unichem Pharmacy","brand:wikidata":"Q62663379",healthcare:"pharmacy",name:"Unichem Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["nz"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Uniprix":{name:"Uniprix",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q683265",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Uniprix","brand:wikidata":"Q683265","brand:wikipedia":"en:Uniprix",healthcare:"pharmacy",name:"Uniprix"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Walgreens":{name:"Walgreens",icon:"maki-pharmacy",imageURL:"https://pbs.twimg.com/profile_images/875789275668918273/7l9RDOnl_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1591889",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Walgreens","brand:wikidata":"Q1591889","brand:wikipedia":"en:Walgreens",healthcare:"pharmacy",name:"Walgreens"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["us"],terms:["walgreens pharmacy"],matchScore:2,suggestion:true},"amenity/pharmacy/Walmart Pharmacy":{name:"Walmart Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/walmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q483551",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",healthcare:"pharmacy",name:"Walmart Pharmacy",operator:"Walmart","operator:wikidata":"Q483551","operator:wikipedia":"en:Walmart"},reference:{key:"amenity",value:"pharmacy"},terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Watsons":{name:"Watsons",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/WatsonsPH/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7974785",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Watsons","brand:wikidata":"Q7974785","brand:wikipedia":"en:Watsons",healthcare:"pharmacy",name:"Watsons",operator:"A.S. Watson Group","operator:wikidata":"Q4647401","operator:wikipedia":"en:A.S. Watson Group"},reference:{key:"amenity",value:"pharmacy"},terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Well Pharmacy":{name:"Well Pharmacy",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q7726524",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Well Pharmacy","brand:wikidata":"Q7726524","brand:wikipedia":"en:Well Pharmacy",healthcare:"pharmacy",name:"Well Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["gb"],terms:["well"],matchScore:2,suggestion:true},"amenity/pharmacy/Ziko Apteka":{name:"Ziko Apteka",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q63432892",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Ziko Apteka","brand:wikidata":"Q63432892",healthcare:"pharmacy",name:"Ziko Apteka",short_name:"Ziko"},reference:{key:"amenity",value:"pharmacy"},terms:["ziko"],matchScore:2,suggestion:true},"amenity/pharmacy/А5":{name:"А5",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/apteka5/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62663476",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"А5","brand:wikidata":"Q62663476",healthcare:"pharmacy",name:"А5"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Бережная аптека":{name:"Бережная аптека",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/BereznayaApteka/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62664194",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Бережная аптека","brand:wikidata":"Q62664194",healthcare:"pharmacy",name:"Бережная аптека"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Ригла":{name:"Ригла",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q4394431",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Ригла","brand:wikidata":"Q4394431","brand:wikipedia":"ru:Ригла",healthcare:"pharmacy",name:"Ригла"},reference:{key:"amenity",value:"pharmacy"},terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/סופר-פארם":{name:"סופר-פארם",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q13220217",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"סופר-פארם","brand:he":"סופר-פארם","brand:wikidata":"Q13220217","brand:wikipedia":"en:Super-Pharm",healthcare:"pharmacy",name:"סופר-פארם","name:he":"סופר-פארם"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/くすりの福太郎":{name:"くすりの福太郎",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q17214460",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"くすりの福太郎","brand:en":"Kusurino FUKUTARO","brand:ja":"くすりの福太郎","brand:wikidata":"Q17214460","brand:wikipedia":"ja:くすりの福太郎",healthcare:"pharmacy",name:"くすりの福太郎","name:en":"Kusurino Fukutaro","name:ja":"くすりの福太郎"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/ウェルパーク":{name:"ウェルパーク",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11288610",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"ウェルパーク","brand:ja":"ウェルパーク","brand:wikidata":"Q11288610","brand:wikipedia":"ja:ウェルパーク",healthcare:"pharmacy",name:"ウェルパーク","name:en":"Welpark","name:ja":"ウェルパーク"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/ウエルシア":{name:"ウエルシア",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11288684",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"ウエルシア","brand:en":"Welcia","brand:ja":"ウエルシア","brand:wikidata":"Q11288684","brand:wikipedia":"ja:ウエルシアホールディングス",healthcare:"pharmacy",name:"ウエルシア","name:en":"Welcia","name:ja":"ウエルシア"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/ウエルシア薬局":{name:"ウエルシア薬局",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11288687",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"ウエルシア薬局","brand:en":"Welcia Yakkyoku","brand:ja":"ウエルシア薬局","brand:wikidata":"Q11288687","brand:wikipedia":"ja:ウエルシア薬局",healthcare:"pharmacy",name:"ウエルシア薬局","name:en":"Welcia Yakkyoku","name:ja":"ウエルシア薬局"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/カワチ薬品":{name:"カワチ薬品",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11295397",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"カワチ薬品","brand:en":"Cawachi","brand:ja":"カワチ薬品","brand:wikidata":"Q11295397","brand:wikipedia":"ja:カワチ薬品",healthcare:"pharmacy",name:"カワチ薬品","name:en":"Cawachi","name:ja":"カワチ薬品"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/キリン堂":{name:"キリン堂",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11297751",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"キリン堂","brand:en":"Kirindo","brand:ja":"キリン堂","brand:wikidata":"Q11297751","brand:wikipedia":"ja:キリン堂",healthcare:"pharmacy",name:"キリン堂","name:en":"Kirindo","name:ja":"キリン堂"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/クリエイト":{name:"クリエイト",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11299163",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"クリエイト","brand:en":"Create","brand:ja":"クリエイト","brand:wikidata":"Q11299163","brand:wikipedia":"ja:クリエイトSDホールディングス",healthcare:"pharmacy",name:"クリエイト","name:en":"Create","name:ja":"クリエイト"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/ココカラファイン":{name:"ココカラファイン",icon:"maki-pharmacy",imageURL:"https://pbs.twimg.com/profile_images/1050257672753229825/lhBcsYat_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11301948",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"ココカラファイン","brand:ja":"ココカラファイン","brand:wikidata":"Q11301948","brand:wikipedia":"ja:ココカラファイン",healthcare:"pharmacy",name:"ココカラファイン","name:en":"Cocokara Fine","name:ja":"ココカラファイン"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/サンドラッグ":{name:"サンドラッグ",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11305867",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"サンドラッグ","brand:ja":"サンドラッグ","brand:wikidata":"Q11305867","brand:wikipedia":"ja:サンドラッグ",healthcare:"pharmacy",name:"サンドラッグ","name:en":"Sundrug","name:ja":"サンドラッグ"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/スギ薬局":{name:"スギ薬局",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11311460",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"スギ薬局","brand:en":"Sugi Pharmacy","brand:ja":"スギ薬局","brand:wikidata":"Q11311460","brand:wikipedia":"ja:スギ薬局",healthcare:"pharmacy",name:"スギ薬局","name:en":"Sugi Pharmacy","name:ja":"スギ薬局"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/セイジョー":{name:"セイジョー",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11314133",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"セイジョー","brand:en":"Seijo","brand:ja":"セイジョー","brand:wikidata":"Q11314133","brand:wikipedia":"ja:セイジョー",healthcare:"pharmacy",name:"セイジョー","name:en":"Seijo","name:ja":"セイジョー"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/ダイコクドラッグ":{name:"ダイコクドラッグ",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11316754",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"ダイコクドラッグ","brand:en":"Daikoku Drug","brand:ja":"ダイコクドラッグ","brand:wikidata":"Q11316754","brand:wikipedia":"ja:ダイコク",healthcare:"pharmacy",name:"ダイコクドラッグ","name:en":"Daikoku Drug","name:ja":"ダイコクドラッグ"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/ツルハドラッグ":{name:"ツルハドラッグ",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11318826",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"ツルハドラッグ","brand:en":"Tsuruha","brand:ja":"ツルハドラッグ","brand:wikidata":"Q11318826","brand:wikipedia":"ja:ツルハ",healthcare:"pharmacy",name:"ツルハドラッグ","name:en":"Tsuruha","name:ja":"ツルハドラッグ"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/トモズ":{name:"トモズ",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q7820097",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"トモズ","brand:en":"Tomod's","brand:ja":"トモズ","brand:wikidata":"Q7820097","brand:wikipedia":"ja:トモズ",healthcare:"pharmacy",name:"トモズ","name:en":"Tomod's","name:ja":"トモズ"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:["トモズエキスプレス"],matchScore:2,suggestion:true},"amenity/pharmacy/マツモトキヨシ":{name:"マツモトキヨシ",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q8014776",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"マツモトキヨシ","brand:en":"Matsukiyo","brand:ja":"マツモトキヨシ","brand:wikidata":"Q8014776","brand:wikipedia":"ja:マツモトキヨシ",healthcare:"pharmacy",name:"マツモトキヨシ","name:en":"Matsukiyo","name:ja":"マツモトキヨシ"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/post_box/Deutsche Post":{name:"Deutsche Post",icon:"temaki-post_box",imageURL:"https://graph.facebook.com/deutschepost/picture?type=large",geometry:["point","vertex"],tags:{"brand:wikidata":"Q157645",amenity:"post_box"},addTags:{amenity:"post_box",brand:"Deutsche Post","brand:wikidata":"Q157645","brand:wikipedia":"en:Deutsche Post",name:"Deutsche Post"},countryCodes:["de"],terms:["deutsche post ag"],matchScore:2,suggestion:true},"amenity/post_box/USPS":{name:"USPS",icon:"temaki-post_box",imageURL:"https://graph.facebook.com/USPS/picture?type=large",geometry:["point","vertex"],tags:{"brand:wikidata":"Q668687",amenity:"post_box"},addTags:{amenity:"post_box",brand:"USPS","brand:wikidata":"Q668687","brand:wikipedia":"en:United States Postal Service",name:"USPS",operator:"USPS"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Australia Post":{name:"Australia Post",icon:"maki-post",imageURL:"https://pbs.twimg.com/profile_images/1050581738009718785/uXnrUC3X_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1142936",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Australia Post","brand:wikidata":"Q1142936","brand:wikipedia":"en:Australia Post",name:"Australia Post"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/CTT":{name:"CTT",icon:"maki-post",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMacau%20DSC.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q909429",amenity:"post_office"},addTags:{amenity:"post_office",brand:"CTT","brand:wikidata":"Q909429","brand:wikipedia":"en:CTT (Macau)",name:"CTT"},countryCodes:["mo"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Canada Post":{name:"Canada Post",icon:"maki-post",imageURL:"https://graph.facebook.com/canadapost/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1032001",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Canada Post","brand:wikidata":"Q1032001","brand:wikipedia":"en:Canada Post",name:"Canada Post"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Correios":{name:"Correios",icon:"maki-post",imageURL:"https://graph.facebook.com/correiosoficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3375004",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Correios","brand:wikidata":"Q3375004","brand:wikipedia":"en:Correios",name:"Correios"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Correo Argentino":{name:"Correo Argentino",icon:"maki-post",imageURL:"https://graph.facebook.com/CorreoOficialSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4036566",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Correo Argentino","brand:wikidata":"Q4036566","brand:wikipedia":"en:Correo Argentino",name:"Correo Argentino"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Correos de Chile":{name:"Correos de Chile",icon:"maki-post",imageURL:"https://graph.facebook.com/correoschile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5172893",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Correos de Chile","brand:wikidata":"Q5172893","brand:wikipedia":"en:Correos de Chile",name:"Correos de Chile"},countryCodes:["cl"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Correos de Costa Rica":{name:"Correos de Costa Rica",icon:"maki-post",imageURL:"https://graph.facebook.com/CorreosdeCostaRica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5172894",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Correos de Costa Rica","brand:wikidata":"Q5172894","brand:wikipedia":"en:Correos de Costa Rica",name:"Correos de Costa Rica"},countryCodes:["cr"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/DHL":{name:"DHL",icon:"maki-post",imageURL:"https://graph.facebook.com/dhl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q489815",amenity:"post_office"},addTags:{amenity:"post_office",brand:"DHL","brand:wikidata":"Q489815","brand:wikipedia":"en:DHL Express",name:"DHL",operator:"DHL"},terms:["dhl paketshop"],matchScore:2,suggestion:true},"amenity/post_office/DPD Paketshop":{name:"DPD Paketshop",icon:"maki-post",imageURL:"https://graph.facebook.com/350375105088695/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q541030",amenity:"post_office"},addTags:{amenity:"post_office",brand:"DPD Paketshop","brand:wikidata":"Q541030","brand:wikipedia":"en:DPDgroup",name:"DPD Paketshop"},terms:[],matchScore:2,suggestion:true},"amenity/post_office/Deutsche Post":{name:"Deutsche Post",icon:"maki-post",imageURL:"https://graph.facebook.com/deutschepost/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q157645",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Deutsche Post","brand:wikidata":"Q157645","brand:wikipedia":"en:Deutsche Post",name:"Deutsche Post"},countryCodes:["de"],terms:["deutsche post ag","deutsche post filiale"],matchScore:2,suggestion:true},"amenity/post_office/Fancourier":{name:"Fancourier",icon:"maki-post",geometry:["point","area"],tags:{"brand:wikidata":"Q12727984",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Fancourier","brand:wikidata":"Q12727984","brand:wikipedia":"ro:FAN Courier Express",name:"Fancourier"},countryCodes:["ro"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/FedEx":{name:"FedEx",icon:"maki-post",imageURL:"https://graph.facebook.com/FedEx/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q459477",amenity:"post_office"},addTags:{amenity:"post_office",brand:"FedEx","brand:wikidata":"Q459477","brand:wikipedia":"en:FedEx",name:"FedEx"},terms:[],matchScore:2,suggestion:true},"amenity/post_office/Hermes Paketshop":{name:"Hermes Paketshop",icon:"maki-post",geometry:["point","area"],tags:{"brand:wikidata":"Q1613532",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Hermes Paketshop","brand:wikidata":"Q1613532","brand:wikipedia":"en:Hermes Group",name:"Hermes Paketshop"},terms:["hermes"],matchScore:2,suggestion:true},"amenity/post_office/LBC":{name:"LBC",icon:"maki-post",imageURL:"https://graph.facebook.com/LBCexpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17075584",amenity:"post_office"},addTags:{amenity:"post_office",brand:"LBC","brand:wikidata":"Q17075584","brand:wikipedia":"en:LBC Express",name:"LBC"},countryCodes:["ph"],terms:["lbc express"],matchScore:2,suggestion:true},"amenity/post_office/La Poste":{name:"La Poste",icon:"maki-post",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLaurent%20Vincenti%20La%20Poste.JPG&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q373724",amenity:"post_office"},addTags:{amenity:"post_office",brand:"La Poste","brand:wikidata":"Q373724","brand:wikipedia":"fr:La Poste (entreprise française)",name:"La Poste"},terms:[],matchScore:2,suggestion:true},"amenity/post_office/MRW":{name:"MRW",icon:"maki-post",imageURL:"https://graph.facebook.com/mrwespana/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23767821",amenity:"post_office"},addTags:{amenity:"post_office",brand:"MRW","brand:wikidata":"Q23767821","brand:wikipedia":"es:MRW",name:"MRW"},terms:[],matchScore:2,suggestion:true},"amenity/post_office/Oficina de Correos":{name:"Oficina de Correos",icon:"maki-post",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCorreos%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q776605",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Oficina de Correos","brand:wikidata":"Q776605","brand:wikipedia":"es:Correos (España)",name:"Oficina de Correos"},terms:["correos"],matchScore:2,suggestion:true},"amenity/post_office/Poczta Polska":{name:"Poczta Polska",icon:"maki-post",imageURL:"https://graph.facebook.com/pocztapolska/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q168833",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Poczta Polska","brand:wikidata":"Q168833","brand:wikipedia":"pl:Poczta Polska",name:"Poczta Polska"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/PostalAnnex":{name:"PostalAnnex",icon:"maki-post",geometry:["point","area"],tags:{"brand:wikidata":"Q61960357",amenity:"post_office"},addTags:{amenity:"post_office",brand:"PostalAnnex","brand:wikidata":"Q61960357",name:"PostalAnnex"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Poste Italiane":{name:"Poste Italiane",icon:"maki-post",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FPoste-Italiane-Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q495026",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Poste Italiane","brand:wikidata":"Q495026","brand:wikipedia":"en:Poste italiane",name:"Poste Italiane"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Serpost":{name:"Serpost",icon:"maki-post",geometry:["point","area"],tags:{"brand:wikidata":"Q19521863",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Serpost","brand:wikidata":"Q19521863","brand:wikipedia":"es:Servicios Postales del Perú",name:"Serpost"},countryCodes:["pe"],terms:["servicios postales del perú"],matchScore:2,suggestion:true},"amenity/post_office/Slovenská pošta":{name:"Slovenská pošta",icon:"maki-post",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogoSlovakPost.gif&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1191849",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Slovenská pošta","brand:wikidata":"Q1191849","brand:wikipedia":"en:Slovenská pošta",name:"Slovenská pošta"},countryCodes:["sk"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/The UPS Store":{name:"The UPS Store",icon:"maki-post",imageURL:"https://pbs.twimg.com/profile_images/1080841709934780417/MTIJnZHk_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7771029",amenity:"post_office"},addTags:{amenity:"post_office",brand:"The UPS Store","brand:wikidata":"Q7771029","brand:wikipedia":"en:The UPS Store",name:"The UPS Store"},terms:["ups","ups store"],matchScore:2,suggestion:true},"amenity/post_office/US Post Office":{name:"US Post Office",icon:"maki-post",imageURL:"https://graph.facebook.com/USPS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q668687",amenity:"post_office"},addTags:{amenity:"post_office",brand:"US Post Office","brand:wikidata":"Q668687","brand:wikipedia":"en:United States Postal Service",name:"US Post Office",operator:"USPS"},countryCodes:["us"],terms:["united states post office","united states postal service","usps"],matchScore:2,suggestion:true},"amenity/post_office/ΕΛΤΑ":{name:"ΕΛΤΑ",icon:"maki-post",geometry:["point","area"],tags:{"brand:wikidata":"Q1275135",amenity:"post_office"},addTags:{amenity:"post_office",brand:"ΕΛΤΑ","brand:wikidata":"Q1275135","brand:wikipedia":"el:Ελληνικά Ταχυδρομεία",name:"ΕΛΤΑ"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Белпошта":{name:"Белпошта",icon:"maki-post",imageURL:"https://graph.facebook.com/belpost.by/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2662336",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Белпошта","brand:be":"Белпошта","brand:en":"Belposhta","brand:ru":"Белпочта","brand:wikidata":"Q2662336","brand:wikipedia":"be:Белпошта",name:"Белпошта","name:be":"Белпошта","name:en":"Belposhta","name:ru":"Белпочта"},countryCodes:["by"],terms:["белпочта"],matchScore:2,suggestion:true},"amenity/post_office/Казпочта":{name:"Казпочта",icon:"maki-post",imageURL:"https://graph.facebook.com/Kazpost/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q746263",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Казпочта","brand:wikidata":"Q746263","brand:wikipedia":"ru:Казпочта",name:"Казпочта"},countryCodes:["kz"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Нова Пошта":{name:"Нова Пошта",icon:"maki-post",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FNova%20Poshta%202014%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q12133863",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Нова Пошта","brand:wikidata":"Q12133863","brand:wikipedia":"uk:Нова пошта",name:"Нова Пошта"},countryCodes:["ua"],terms:["Нова Пошта №1","Нова Пошта №2","Нова Пошта №3","Нова Пошта №4"],matchScore:2,suggestion:true},"amenity/post_office/Почта России":{name:"Почта России",icon:"maki-post",imageURL:"https://graph.facebook.com/ruspost/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1502763",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Почта России","brand:wikidata":"Q1502763","brand:wikipedia":"ru:Почта России",name:"Почта России"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/СДЭК":{name:"СДЭК",icon:"maki-post",geometry:["point","area"],tags:{"brand:wikidata":"Q28665980",amenity:"post_office"},addTags:{amenity:"post_office",brand:"СДЭК","brand:wikidata":"Q28665980","brand:wikipedia":"ru:СДЭК",name:"СДЭК"},terms:[],matchScore:2,suggestion:true},"amenity/post_office/Укрпошта":{name:"Укрпошта",icon:"maki-post",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FUkrposhta.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2470783",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Укрпошта","brand:wikidata":"Q2470783","brand:wikipedia":"en:Ukrposhta",name:"Укрпошта"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/中国邮政":{name:"中国邮政",icon:"maki-post",geometry:["point","area"],tags:{"brand:wikidata":"Q1066476",amenity:"post_office"},addTags:{amenity:"post_office",brand:"中国邮政","brand:en":"China Post","brand:wikidata":"Q1066476","brand:wikipedia":"en:China Post",name:"中国邮政","name:en":"China Post"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"amenity/prep_school/Huntington Learning Center":{name:"Huntington Learning Center",icon:"temaki-school",imageURL:"https://graph.facebook.com/HuntingtonHelps/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5945399",amenity:"prep_school"},addTags:{amenity:"prep_school",brand:"Huntington Learning Center","brand:wikidata":"Q5945399","brand:wikipedia":"en:Huntington Learning Center",name:"Huntington Learning Center"},countryCodes:["us"],terms:["huntington"],matchScore:2,suggestion:true},"amenity/prep_school/KUMON (Japan)":{name:"KUMON (Japan)",icon:"temaki-school",imageURL:"https://graph.facebook.com/kumon/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q142054",amenity:"prep_school"},addTags:{amenity:"prep_school",brand:"KUMON","brand:wikidata":"Q142054","brand:wikipedia":"ja:日本公文教育研究会",name:"KUMON","name:ja":"公文","name:ja-Hira":"くもん","name:ja-Latn":"KUMON"},countryCodes:["jp"],terms:["くもん","公文"],matchScore:2,suggestion:true},"amenity/prep_school/Kumon (International)":{name:"Kumon (International)",icon:"temaki-school",imageURL:"https://graph.facebook.com/kumon/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q142054",amenity:"prep_school"},addTags:{amenity:"prep_school",brand:"Kumon","brand:wikidata":"Q142054","brand:wikipedia":"en:Kumon",name:"Kumon"},countryCodes:[],terms:["kumon learning center"],matchScore:2,suggestion:true},"amenity/prep_school/Russian School of Mathematics":{name:"Russian School of Mathematics",icon:"temaki-school",imageURL:"https://graph.facebook.com/RussianMath/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7382122",amenity:"prep_school"},addTags:{amenity:"prep_school",brand:"Russian School of Mathematics","brand:wikidata":"Q7382122","brand:wikipedia":"en:Russian School of Mathematics",name:"Russian School of Mathematics"},countryCodes:["us"],terms:["rsm","russian school of math"],matchScore:2,suggestion:true},"amenity/prep_school/Sylvan":{name:"Sylvan",icon:"temaki-school",imageURL:"https://graph.facebook.com/SylvanLearning/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7660663",amenity:"prep_school"},addTags:{alt_name:"Sylvan Learning Center",amenity:"prep_school",brand:"Sylvan","brand:wikidata":"Q7660663","brand:wikipedia":"en:Sylvan Learning",name:"Sylvan"},countryCodes:["us"],terms:["sylvan learning","sylvan learning center"],matchScore:2,suggestion:true},"amenity/public_bookcase/Little Free Library":{name:"Little Free Library",icon:"maki-library",imageURL:"https://graph.facebook.com/LittleFreeLibrary/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6650101",amenity:"public_bookcase"},addTags:{amenity:"public_bookcase",brand:"Little Free Library","brand:wikidata":"Q6650101","brand:wikipedia":"en:Little Free Library",name:"Little Free Library"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/100 Montaditos":{name:"100 Montaditos",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/100MontaditosSpain/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8355805",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"100 Montaditos","brand:wikidata":"Q8355805","brand:wikipedia":"en:Cervecería 100 Montaditos",cuisine:"sandwich",name:"100 Montaditos"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/ASK Italian":{name:"ASK Italian",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/ASKItalian/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4807056",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"ASK Italian","brand:wikidata":"Q4807056","brand:wikipedia":"en:ASK Italian",cuisine:"italian",name:"ASK Italian"},reference:{key:"cuisine",value:"italian"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Applebee's":{name:"Applebee's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/Applebeesmundoe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q621532",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Applebee's Neighborhood Grill & Bar","brand:wikidata":"Q621532","brand:wikipedia":"en:Applebee's",cuisine:"american",name:"Applebee's",official_name:"Applebee's Neighborhood Grill & Bar"},reference:{key:"cuisine",value:"american"},terms:["applebees bar & grill","applebees bar and grill","applebees grill & bar","applebees grill and bar","applebees neighborhood bar & grill","applebees neighborhood bar and grill","applebees neighborhood grill & bar","applebees neighborhood grill and bar"],matchScore:2,suggestion:true},"amenity/restaurant/Autogrill":{name:"Autogrill",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/AutogrillOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q786790",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Autogrill","brand:wikidata":"Q786790","brand:wikipedia":"en:Autogrill",name:"Autogrill"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/BJ's":{name:"BJ's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/BJsRestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4835755",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"BJ's","brand:wikidata":"Q4835755","brand:wikipedia":"en:BJ's Restaurants",cuisine:"american",name:"BJ's",official_name:"BJ's Restaurant & Brewhouse"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/Bella Italia":{name:"Bella Italia",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/bellaitalia.co.uk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4883362",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"Bella Italia","brand:wikidata":"Q4883362","brand:wikipedia":"en:Bella Italia",cuisine:"italian",name:"Bella Italia"},reference:{key:"cuisine",value:"italian"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Big Boy":{name:"Big Boy",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/bigboyrestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4386779",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Big Boy","brand:wikidata":"Q4386779","brand:wikipedia":"en:Big Boy Restaurants",cuisine:"burger",name:"Big Boy",official_name:"Big Boy Restaurant & Bakery"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Black Bear Diner":{name:"Black Bear Diner",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/BlackBearDiner/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4920343",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Black Bear Diner","brand:wikidata":"Q4920343","brand:wikipedia":"en:Black Bear Diner",cuisine:"american",name:"Black Bear Diner"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Blaze Pizza":{name:"Blaze Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/BlazePizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23016666",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Blaze Pizza","brand:wikidata":"Q23016666","brand:wikipedia":"en:Blaze Pizza",cuisine:"pizza",name:"Blaze Pizza"},reference:{key:"cuisine",value:"pizza"},countryCodes:["bh","ca","kw","sa","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Bob Evans":{name:"Bob Evans",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/bobevans/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4932386",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Bob Evans","brand:wikidata":"Q4932386","brand:wikipedia":"en:Bob Evans Restaurants",cuisine:"american",name:"Bob Evans"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/seafood/Bonefish Grill":{name:"Bonefish Grill",icon:"maki-restaurant-seafood",imageURL:"https://graph.facebook.com/bonefishgrill/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4941599",amenity:"restaurant",cuisine:"seafood"},addTags:{amenity:"restaurant",brand:"Bonefish Grill","brand:wikidata":"Q4941599","brand:wikipedia":"en:Bonefish Grill",cuisine:"seafood",name:"Bonefish Grill"},reference:{key:"cuisine",value:"seafood"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Boston Pizza":{name:"Boston Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/BostonPizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q894578",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Boston Pizza","brand:wikidata":"Q894578","brand:wikipedia":"en:Boston Pizza",cuisine:"pizza",name:"Boston Pizza"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/Buca di Beppo":{name:"Buca di Beppo",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/bucadibeppo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4982340",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"Buca di Beppo","brand:wikidata":"Q4982340","brand:wikipedia":"en:Buca di Beppo",cuisine:"italian",name:"Buca di Beppo"},reference:{key:"cuisine",value:"italian"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Buffalo Grill":{name:"Buffalo Grill",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/buffalogrill/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q944655",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Buffalo Grill","brand:wikidata":"Q944655","brand:wikipedia":"en:Buffalo Grill",cuisine:"steak_house",name:"Buffalo Grill"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Buffalo Wild Wings":{name:"Buffalo Wild Wings",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/BuffaloWildWings/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q509255",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Buffalo Wild Wings","brand:wikidata":"Q509255","brand:wikipedia":"en:Buffalo Wild Wings",cuisine:"wings",name:"Buffalo Wild Wings"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Buffalo Wings & Rings":{name:"Buffalo Wings & Rings",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/wingsandrings/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4985900",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Buffalo Wings & Rings","brand:wikidata":"Q4985900","brand:wikipedia":"en:Buffalo Wings & Rings",cuisine:"wings",name:"Buffalo Wings & Rings",takeaway:"yes"},countryCodes:["us"],terms:["buffalo wings and rings"],matchScore:2,suggestion:true},"amenity/restaurant/mexican/Cafe Rio":{name:"Cafe Rio",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/CafeRio/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5017108",amenity:"restaurant",cuisine:"mexican"},addTags:{amenity:"restaurant",brand:"Cafe Rio","brand:wikidata":"Q5017108","brand:wikipedia":"en:Cafe Rio",cuisine:"mexican",name:"Cafe Rio"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/California Pizza Kitchen":{name:"California Pizza Kitchen",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/californiapizzakitchen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15109854",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"California Pizza Kitchen","brand:wikidata":"Q15109854","brand:wikipedia":"en:California Pizza Kitchen",cuisine:"pizza",name:"California Pizza Kitchen"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/Carluccio's":{name:"Carluccio's",icon:"maki-restaurant",imageURL:"https://pbs.twimg.com/profile_images/553567478693908481/BWWI_wgN_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q25111797",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"Carluccio's","brand:wikidata":"Q25111797","brand:wikipedia":"en:Carluccio's Ltd",cuisine:"italian",name:"Carluccio's"},reference:{key:"cuisine",value:"italian"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/Carrabba's Italian Grill":{name:"Carrabba's Italian Grill",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/Carrabbas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5045999",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"Carrabba's Italian Grill","brand:wikidata":"Q5045999","brand:wikipedia":"en:Carrabba's Italian Grill",cuisine:"italian",name:"Carrabba's Italian Grill"},reference:{key:"cuisine",value:"italian"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Cheddar's":{name:"Cheddar's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/CheddarsScratchKitchen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5089187",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Cheddar's","brand:wikidata":"Q5089187","brand:wikipedia":"en:Cheddar's Scratch Kitchen",cuisine:"american",name:"Cheddar's",official_name:"Cheddar's Scratch Kitchen"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/mexican/Chevys":{name:"Chevys",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/ChevysFreshMex/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5094466",amenity:"restaurant",cuisine:"mexican"},addTags:{amenity:"restaurant",brand:"Chevys Fresh Mex","brand:wikidata":"Q5094466","brand:wikipedia":"en:Chevys Fresh Mex",cuisine:"mexican",name:"Chevys",official_name:"Chevys Fresh Mex"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Chili's":{name:"Chili's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/Chilis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1072948",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Chili's","brand:wikidata":"Q1072948","brand:wikipedia":"en:Chili's",cuisine:"tex-mex",name:"Chili's",official_name:"Chili's Grill & Bar"},terms:["chili's grill & bar","chili's grill and bar"],matchScore:2,suggestion:true},"amenity/restaurant/Chiquito":{name:"Chiquito",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/chiquito.restaurant/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5101775",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Chiquito","brand:wikidata":"Q5101775","brand:wikipedia":"en:Chiquito (restaurant)",cuisine:"tex-mex",name:"Chiquito"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Chuck E. Cheese's":{name:"Chuck E. Cheese's",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/OfficialChuckECheeses/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2438391",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Chuck E. Cheese's","brand:wikidata":"Q2438391","brand:wikipedia":"en:Chuck E. Cheese's",cuisine:"pizza",name:"Chuck E. Cheese's"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Cici's Pizza":{name:"Cici's Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/Cicis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2972189",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Cici's Pizza","brand:wikidata":"Q2972189","brand:wikipedia":"en:Cicis",cuisine:"pizza",name:"Cici's Pizza"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Claim Jumper":{name:"Claim Jumper",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/ClaimJumperRestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5125081",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Claim Jumper","brand:wikidata":"Q5125081","brand:wikipedia":"en:Claim Jumper",cuisine:"american",name:"Claim Jumper",operator:"Landry's","operator:wikidata":"Q3217105","operator:wikipedia":"en:Landry's, Inc."},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Cosmo":{name:"Cosmo",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/CosmoRestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5174239",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Cosmo","brand:wikidata":"Q5174239","brand:wikipedia":"en:Cosmo (restaurant)",name:"Cosmo"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/french/Courtepaille":{name:"Courtepaille",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/GrillCourtePaille/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3116688",amenity:"restaurant",cuisine:"french"},addTags:{amenity:"restaurant",brand:"Courtepaille","brand:wikidata":"Q3116688","brand:wikipedia":"fr:Grill Courtepaille",cuisine:"french",name:"Courtepaille"},reference:{key:"cuisine",value:"french"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Cracker Barrel":{name:"Cracker Barrel",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/crackerbarrel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4492609",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Cracker Barrel","brand:wikidata":"Q4492609","brand:wikipedia":"en:Cracker Barrel",cuisine:"american",name:"Cracker Barrel",official_name:"Cracker Barrel Old Country Store",shop:"gift"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Denny's":{name:"Denny's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/dennys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1189695",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Denny's","brand:wikidata":"Q1189695","brand:wikipedia":"en:Denny's",cuisine:"american",name:"Denny's"},reference:{key:"cuisine",value:"american"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Dickey's Barbecue Pit":{name:"Dickey's Barbecue Pit",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/dickeysbarbecuepit/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19880747",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Dickey's Barbecue Pit","brand:wikidata":"Q19880747","brand:wikipedia":"en:Dickey's Barbecue Pit",cuisine:"barbecue",name:"Dickey's Barbecue Pit"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Donatos Pizza":{name:"Donatos Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/DonatosPizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1240741",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Donatos Pizza","brand:wikidata":"Q1240741","brand:wikipedia":"en:Donatos Pizza",cuisine:"pizza",name:"Donatos Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:["donatos"],matchScore:2,suggestion:true},"amenity/restaurant/italian/East Side Mario's":{name:"East Side Mario's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/eastsidemarios/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5329375",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"East Side Mario's","brand:wikidata":"Q5329375","brand:wikipedia":"en:East Side Mario's",cuisine:"italian",name:"East Side Mario's"},reference:{key:"cuisine",value:"italian"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Famous Dave's":{name:"Famous Dave's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/famousdaves/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5433448",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Famous Dave's","brand:wikidata":"Q5433448","brand:wikipedia":"en:Famous Dave's",cuisine:"barbecue",name:"Famous Dave's"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/First Watch":{name:"First Watch",icon:"maki-restaurant",geometry:["point","area"],tags:{"brand:wikidata":"Q5454064",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"First Watch","brand:wikidata":"Q5454064","brand:wikipedia":"en:First Watch (restaurant chain)",cuisine:"american",name:"First Watch"},reference:{key:"cuisine",value:"american"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/french/Flunch":{name:"Flunch",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/flunch/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q629326",amenity:"restaurant",cuisine:"french"},addTags:{amenity:"restaurant",brand:"Flunch","brand:wikidata":"Q629326","brand:wikipedia":"en:Flunch",cuisine:"french",name:"Flunch"},reference:{key:"cuisine",value:"french"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Foster's Hollywood":{name:"Foster's Hollywood",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/fostershollywood/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5864366",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Foster's Hollywood","brand:wikidata":"Q5864366","brand:wikipedia":"en:Foster's Hollywood",cuisine:"american",name:"Foster's Hollywood"},reference:{key:"cuisine",value:"american"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/Frankie & Benny's":{name:"Frankie & Benny's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/frankiebennys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5490892",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"Frankie & Benny's","brand:wikidata":"Q5490892","brand:wikipedia":"en:Frankie & Benny's",cuisine:"italian",name:"Frankie & Benny's"},reference:{key:"cuisine",value:"italian"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Freshii":{name:"Freshii",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/freshii/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5503051",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Freshii","brand:wikidata":"Q5503051","brand:wikipedia":"en:Freshii",cuisine:"salad",name:"Freshii"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Friendly's":{name:"Friendly's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/friendlys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1464513",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Friendly's","brand:wikidata":"Q1464513","brand:wikipedia":"en:Friendly's",cuisine:"american",name:"Friendly's"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Frisch's Big Boy":{name:"Frisch's Big Boy",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/frischsbigboy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5504660",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Frisch's Big Boy","brand:wikidata":"Q5504660","brand:wikipedia":"en:Frisch's",cuisine:"burger",name:"Frisch's Big Boy",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Fuddruckers":{name:"Fuddruckers",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/fuddruckers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5507056",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Fuddruckers","brand:wikidata":"Q5507056","brand:wikipedia":"en:Fuddruckers",cuisine:"burger",name:"Fuddruckers"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Godfather's Pizza":{name:"Godfather's Pizza",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{"brand:wikidata":"Q5576353",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Godfather's Pizza","brand:wikidata":"Q5576353","brand:wikipedia":"en:Godfather's Pizza",cuisine:"pizza",name:"Godfather's Pizza"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Golden Corral":{name:"Golden Corral",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/goldencorral/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4039560",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Golden Corral","brand:wikidata":"Q4039560","brand:wikipedia":"en:Golden Corral",cuisine:"american",name:"Golden Corral"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Gourmet Burger Kitchen":{name:"Gourmet Burger Kitchen",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/gourmetburgerkitchen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5588445",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Gourmet Burger Kitchen","brand:wikidata":"Q5588445","brand:wikipedia":"en:Gourmet Burger Kitchen",cuisine:"burger",name:"Gourmet Burger Kitchen"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Handmade Burger Co.":{name:"Handmade Burger Co.",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/handmadeburgercompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q56154673",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Handmade Burger Co.","brand:wikidata":"Q56154673",cuisine:"burger",name:"Handmade Burger Co."},countryCodes:["gb"],terms:["Handmade Burger Company"],matchScore:2,suggestion:true},"amenity/restaurant/Hans im Glück":{name:"Hans im Glück",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/hansimglueck.burgergrill/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22569868",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Hans im Glück","brand:wikidata":"Q22569868","brand:wikipedia":"de:Hans im Glück (Restaurantkette)",cuisine:"burger",name:"Hans im Glück"},countryCodes:["at","ch","de","sg"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Hard Rock Cafe":{name:"Hard Rock Cafe",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/hardrock/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q918151",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Hard Rock Cafe","brand:wikidata":"Q918151","brand:wikipedia":"en:Hard Rock Cafe",cuisine:"american",name:"Hard Rock Cafe"},reference:{key:"cuisine",value:"american"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Harvester":{name:"Harvester",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/harvesterrestaurant/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5676915",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Harvester","brand:wikidata":"Q5676915","brand:wikipedia":"en:Harvester (restaurant)",cuisine:"american",name:"Harvester"},reference:{key:"cuisine",value:"american"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Hippopotamus":{name:"Hippopotamus",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/Hippopotamus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3136174",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Hippopotamus","brand:wikidata":"Q3136174","brand:wikipedia":"fr:Hippopotamus (restaurant)",cuisine:"steak_house",name:"Hippopotamus"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Hooters":{name:"Hooters",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/hooters/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1025921",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Hooters","brand:wikidata":"Q1025921","brand:wikipedia":"en:Hooters",cuisine:"burger",name:"Hooters"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Huddle House":{name:"Huddle House",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/HuddleHouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5928324",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Huddle House","brand:wikidata":"Q5928324","brand:wikipedia":"en:Huddle House",cuisine:"american",name:"Huddle House"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/IHOP":{name:"IHOP",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/IHOP/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1185675",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"IHOP","brand:wikidata":"Q1185675","brand:wikipedia":"en:IHOP",cuisine:"breakfast;pancake",name:"IHOP"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/IL Патио":{name:"IL Патио",icon:"maki-restaurant",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FRosInter.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4397763",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"IL Патио","brand:wikidata":"Q4397763","brand:wikipedia":"en:Росинтер",cuisine:"american",name:"IL Патио"},reference:{key:"cuisine",value:"american"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Jason's Deli":{name:"Jason's Deli",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/JasonsDeli/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16997641",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Jason's Deli","brand:wikidata":"Q16997641","brand:wikipedia":"en:Jason's Deli",cuisine:"sandwich",name:"Jason's Deli"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Jet's Pizza":{name:"Jet's Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/JetsPizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16997713",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Jet's Pizza","brand:wikidata":"Q16997713","brand:wikipedia":"en:Jet's Pizza",cuisine:"pizza",name:"Jet's Pizza"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/seafood/Joe's Crab Shack":{name:"Joe's Crab Shack",icon:"maki-restaurant-seafood",imageURL:"https://graph.facebook.com/joescrabshack/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6208210",amenity:"restaurant",cuisine:"seafood"},addTags:{amenity:"restaurant",brand:"Joe's Crab Shack","brand:wikidata":"Q6208210","brand:wikipedia":"en:Joe's Crab Shack",cuisine:"seafood",name:"Joe's Crab Shack"},reference:{key:"cuisine",value:"seafood"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/Johnny Carino’s":{name:"Johnny Carino’s",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/carinositalian/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5039637",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"Johnny Carino’s","brand:wikidata":"Q5039637","brand:wikipedia":"en:Carino's Italian",cuisine:"italian",name:"Johnny Carino’s"},reference:{key:"cuisine",value:"italian"},countryCodes:["us"],terms:["carinios"],matchScore:2,suggestion:true},"amenity/restaurant/Johnny Rockets":{name:"Johnny Rockets",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/johnnyrockets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1051593",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Johnny Rockets","brand:wikidata":"Q1051593","brand:wikipedia":"en:Johnny Rockets",cuisine:"burger",name:"Johnny Rockets"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Kelsey's":{name:"Kelsey's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/KelseysRestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6386459",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Kelsey's","brand:wikidata":"Q6386459","brand:wikipedia":"en:Kelseys Original Roadhouse",cuisine:"american",name:"Kelsey's"},reference:{key:"cuisine",value:"american"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Kudu":{name:"Kudu",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/KuduRestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6441777",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Kudu","brand:wikidata":"Q6441777","brand:wikipedia":"en:Kudu (restaurant)",cuisine:"sandwich",name:"Kudu"},countryCodes:["sa"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/La Boucherie":{name:"La Boucherie",icon:"maki-restaurant",geometry:["point","area"],tags:{"brand:wikidata":"Q21427479",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"La Boucherie","brand:wikidata":"Q21427479","brand:wikipedia":"fr:La Boucherie (restaurant)",cuisine:"steak_house",name:"La Boucherie"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/LaRosa's Pizzeria":{name:"LaRosa's Pizzeria",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/LaRosasPizzeria/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6460833",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"LaRosa's Pizzeria","brand:wikidata":"Q6460833","brand:wikipedia":"en:LaRosa's Pizzeria",cuisine:"pizza",name:"LaRosa's Pizzeria",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Logan's Roadhouse":{name:"Logan's Roadhouse",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/Logans.Roadhouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6666872",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Logan's Roadhouse","brand:wikidata":"Q6666872","brand:wikipedia":"en:Logan's Roadhouse",cuisine:"american",name:"Logan's Roadhouse"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/LongHorn Steakhouse":{name:"LongHorn Steakhouse",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/longhornsteakhouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3259007",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"LongHorn Steakhouse","brand:wikidata":"Q3259007","brand:wikipedia":"en:LongHorn Steakhouse",cuisine:"steak_house",name:"LongHorn Steakhouse"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Loving Hut":{name:"Loving Hut",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/LovingHutUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3491655",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Loving Hut","brand:wikidata":"Q3491655","brand:wikipedia":"en:Loving Hut",cuisine:"international","diet:vegan":"only","diet:vegetarian":"only",name:"Loving Hut"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Léon de Bruxelles":{name:"Léon de Bruxelles",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/leondebruxellesofficiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21041507",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Léon de Bruxelles","brand:wikidata":"Q21041507","brand:wikipedia":"en:Léon de Bruxelles",cuisine:"friture",name:"Léon de Bruxelles"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/thai/MK Restaurants":{name:"MK Restaurants",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/mkrestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62075359",amenity:"restaurant",cuisine:"thai"},addTags:{amenity:"restaurant",brand:"MK Restaurants","brand:wikidata":"Q62075359",cuisine:"thai",name:"MK Restaurants"},reference:{key:"cuisine",value:"thai"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/MOD Pizza":{name:"MOD Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/MODPizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19903469",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"MOD Pizza","brand:wikidata":"Q19903469","brand:wikipedia":"en:MOD Pizza",cuisine:"pizza",name:"MOD Pizza"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Marco's Pizza":{name:"Marco's Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/MarcosPizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6757382",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Marco's Pizza","brand:wikidata":"Q6757382","brand:wikipedia":"en:Marco's Pizza",cuisine:"pizza",name:"Marco's Pizza"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/asian/Max's Restaurant":{name:"Max's Restaurant",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/MaxsRestaurantNA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6794477",amenity:"restaurant",cuisine:"asian"},addTags:{amenity:"restaurant",brand:"Max's Restaurant","brand:wikidata":"Q6794477","brand:wikipedia":"en:Max's of Manila",cuisine:"asian",name:"Max's Restaurant"},reference:{key:"cuisine",value:"asian"},countryCodes:["ph"],terms:["maxs of manila"],matchScore:2,suggestion:true},"amenity/restaurant/McAlister's Deli":{name:"McAlister's Deli",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/mcalistersdeli/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17020829",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"McAlister's Deli","brand:wikidata":"Q17020829","brand:wikipedia":"en:McAlister's Deli",cuisine:"sandwich",name:"McAlister's Deli"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Mellow Mushroom":{name:"Mellow Mushroom",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/mellowmushroom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17021360",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Mellow Mushroom","brand:wikidata":"Q17021360","brand:wikipedia":"en:Mellow Mushroom",cuisine:"pizza",name:"Mellow Mushroom"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/french/Mimi's Cafe":{name:"Mimi's Cafe",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/mimiscafe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17022081",amenity:"restaurant",cuisine:"french"},addTags:{amenity:"restaurant",brand:"Mimi's Cafe","brand:wikidata":"Q17022081","brand:wikipedia":"en:Mimi's Cafe",cuisine:"french",name:"Mimi's Cafe"},reference:{key:"cuisine",value:"french"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Mountain Mike's":{name:"Mountain Mike's",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/mountainmikes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6925120",amenity:"restaurant",cuisine:"pizza"},addTags:{alt_name:"Mountain Mike's Pizza",amenity:"restaurant",brand:"Mountain Mike's","brand:wikidata":"Q6925120","brand:wikipedia":"en:Mountain Mike's Pizza",cuisine:"pizza",name:"Mountain Mike's",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:["mountain mike's pizza"],matchScore:2,suggestion:true},"amenity/restaurant/Nando's":{name:"Nando's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/NandosUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3472954",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Nando's","brand:wikidata":"Q3472954","brand:wikipedia":"en:Nando's",cuisine:"chicken;portuguese",name:"Nando's"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Noodles & Company":{name:"Noodles & Company",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/noodlesandcompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7049673",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Noodles & Company","brand:wikidata":"Q7049673","brand:wikipedia":"en:Noodles & Company",cuisine:"pasta",name:"Noodles & Company"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/O'Charley's":{name:"O'Charley's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/ocharleysfans/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7071703",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"O'Charley's","brand:wikidata":"Q7071703","brand:wikipedia":"en:O'Charley's",cuisine:"american",name:"O'Charley's"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/seafood/Ocean Basket":{name:"Ocean Basket",icon:"maki-restaurant-seafood",imageURL:"https://graph.facebook.com/daoceanbasket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62075311",amenity:"restaurant",cuisine:"seafood"},addTags:{amenity:"restaurant",brand:"Ocean Basket","brand:wikidata":"Q62075311",cuisine:"seafood",name:"Ocean Basket"},reference:{key:"cuisine",value:"seafood"},countryCodes:["za"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Old Wild West":{name:"Old Wild West",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/OWWofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25402475",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Old Wild West","brand:wikidata":"Q25402475","brand:wikipedia":"it:Old Wild West",cuisine:"american",name:"Old Wild West"},reference:{key:"cuisine",value:"american"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/Olive Garden":{name:"Olive Garden",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/OliveGarden/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3045312",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"Olive Garden","brand:wikidata":"Q3045312","brand:wikipedia":"en:Olive Garden",cuisine:"italian",name:"Olive Garden"},reference:{key:"cuisine",value:"italian"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/On The Border":{name:"On The Border",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/OnTheBorderMexicanGrillandCantina/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7091305",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"On The Border","brand:wikidata":"Q7091305","brand:wikipedia":"en:On the Border Mexican Grill & Cantina",cuisine:"burger",name:"On The Border",official_name:"On The Border Mexican Grill & Cantina"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Outback Steakhouse":{name:"Outback Steakhouse",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/outback/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1064893",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Outback Steakhouse","brand:wikidata":"Q1064893","brand:wikipedia":"en:Outback Steakhouse",cuisine:"american",name:"Outback Steakhouse"},reference:{key:"cuisine",value:"american"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/asian/P.F. Chang's":{name:"P.F. Chang's",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/pfchangs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5360181",amenity:"restaurant",cuisine:"asian"},addTags:{amenity:"restaurant",brand:"P.F. Chang's","brand:wikidata":"Q5360181","brand:wikipedia":"en:P. F. Chang's China Bistro",cuisine:"asian",name:"P.F. Chang's"},reference:{key:"cuisine",value:"asian"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Pardos Chicken":{name:"Pardos Chicken",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/pardoschicken/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17624435",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Pardos Chicken","brand:wikidata":"Q17624435","brand:wikipedia":"en:Pardos chicken",cuisine:"peruvian",name:"Pardos Chicken"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/asian/Pei Wei":{name:"Pei Wei",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/peiwei/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7160898",amenity:"restaurant",cuisine:"asian"},addTags:{amenity:"restaurant",brand:"Pei Wei","brand:wikidata":"Q7160898","brand:wikipedia":"en:Pei Wei Asian Diner",cuisine:"asian",name:"Pei Wei"},reference:{key:"cuisine",value:"asian"},countryCodes:["us"],terms:["pei wei asian diner"],matchScore:2,suggestion:true},"amenity/restaurant/american/Perkins":{name:"Perkins",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/eatatperkins/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7169056",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Perkins","brand:wikidata":"Q7169056","brand:wikipedia":"en:Perkins Restaurant and Bakery",cuisine:"american",name:"Perkins",official_name:"Perkins Restaurant and Bakery"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/vietnamese/Phở 24":{name:"Phở 24",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/pho24.24giavitinhte/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63863118",amenity:"restaurant",cuisine:"vietnamese;noodle"},addTags:{amenity:"restaurant",brand:"Phở 24","brand:wikidata":"Q63863118",cuisine:"vietnamese;noodle",name:"Phở 24","name:en":"Pho 24","name:vi":"Phở 24"},reference:{key:"cuisine",value:"vietnamese"},countryCodes:["vn"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/vietnamese/Phở Hòa (Branded)":{name:"Phở Hòa (Branded)",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/phohoanoodlesoup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q55629932",amenity:"restaurant",cuisine:"vietnamese;noodle"},addTags:{alt_name:"Phở Hoà","alt_name:en":"Pho Hoa","alt_name:vi":"Phở Hoà",amenity:"restaurant",brand:"Phở Hòa","brand:wikidata":"Q55629932","brand:wikipedia":"en:Phở Hòa",cuisine:"vietnamese;noodle",name:"Phở Hòa","name:vi":"Phở Hòa"},reference:{key:"cuisine",value:"vietnamese"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Pieology Pizzeria":{name:"Pieology Pizzeria",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/pieology/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60746053",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Pieology Pizzeria","brand:wikidata":"Q60746053","brand:wikipedia":"en:Pieology",cuisine:"pizza",name:"Pieology Pizzeria"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:["pieology"],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Pizza Factory":{name:"Pizza Factory",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/pizzafactoryinc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q39054369",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Pizza Factory","brand:wikidata":"Q39054369","brand:wikipedia":"en:Pizza Factory",cuisine:"pizza",name:"Pizza Factory"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Pizza Hut":{name:"Pizza Hut",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/pizzahutus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q191615",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Pizza Hut","brand:wikidata":"Q191615","brand:wikipedia":"en:Pizza Hut",cuisine:"pizza",name:"Pizza Hut"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Pizza Ranch":{name:"Pizza Ranch",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/PizzaRanchRestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7199978",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Pizza Ranch","brand:wikidata":"Q7199978","brand:wikipedia":"en:Pizza Ranch",cuisine:"pizza",name:"Pizza Ranch"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/PizzaExpress":{name:"PizzaExpress",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/pizzaexpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q662845",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"PizzaExpress","brand:wikidata":"Q662845","brand:wikipedia":"en:PizzaExpress",cuisine:"pizza",name:"PizzaExpress"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/french/Poivre Rouge":{name:"Poivre Rouge",icon:"maki-restaurant",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Restaumarch%C3%A9.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q7316076",amenity:"restaurant",cuisine:"french"},addTags:{amenity:"restaurant",brand:"Poivre Rouge","brand:wikidata":"Q7316076","brand:wikipedia":"fr:Poivre Rouge (restauration)",cuisine:"french",name:"Poivre Rouge"},reference:{key:"cuisine",value:"french"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/Prezzo":{name:"Prezzo",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/loveprezzo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7242489",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"Prezzo","brand:wikidata":"Q7242489","brand:wikipedia":"en:Prezzo (restaurant)",cuisine:"italian",name:"Prezzo"},reference:{key:"cuisine",value:"italian"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/seafood/Red Lobster":{name:"Red Lobster",icon:"maki-restaurant-seafood",imageURL:"https://graph.facebook.com/redlobster/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q846301",amenity:"restaurant",cuisine:"seafood"},addTags:{amenity:"restaurant",brand:"Red Lobster","brand:wikidata":"Q846301","brand:wikipedia":"en:Red Lobster",cuisine:"seafood",name:"Red Lobster"},reference:{key:"cuisine",value:"seafood"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Red Robin":{name:"Red Robin",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/RedRobin/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7304886",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Red Robin","brand:wikidata":"Q7304886","brand:wikipedia":"en:Red Robin",cuisine:"burger",name:"Red Robin",official_name:"Red Robin Gourmet Burgers and Brews"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/Romano's Macaroni Grill":{name:"Romano's Macaroni Grill",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/RomanosMacaroniGrill/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7362714",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"Romano's Macaroni Grill","brand:wikidata":"Q7362714","brand:wikipedia":"en:Romano's Macaroni Grill",cuisine:"italian",name:"Romano's Macaroni Grill"},reference:{key:"cuisine",value:"italian"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Round Table Pizza":{name:"Round Table Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/RoundTablePizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7371139",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Round Table Pizza","brand:wikidata":"Q7371139","brand:wikipedia":"en:Round Table Pizza",cuisine:"pizza",name:"Round Table Pizza"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Ruby Tuesday":{name:"Ruby Tuesday",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/rubytuesday/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7376400",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Ruby Tuesday","brand:wikidata":"Q7376400","brand:wikipedia":"en:Ruby Tuesday (restaurant)",cuisine:"american",name:"Ruby Tuesday"},reference:{key:"cuisine",value:"american"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Ruth's Chris Steak House":{name:"Ruth's Chris Steak House",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/RuthsChrisSteakHouseNational/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7382829",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Ruth's Chris Steak House","brand:wikidata":"Q7382829","brand:wikipedia":"en:Ruth's Chris Steak House",cuisine:"american",name:"Ruth's Chris Steak House"},reference:{key:"cuisine",value:"american"},countryCodes:["ca","mx","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Shakey's":{name:"Shakey's",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/shakeyspizzaparlorusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6134929",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Shakey's","brand:wikidata":"Q6134929","brand:wikipedia":"en:Shakey's Pizza",cuisine:"pizza",name:"Shakey's"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Shari's":{name:"Shari's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/SharisPies/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7489612",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Shari's","brand:wikidata":"Q7489612","brand:wikipedia":"en:Shari's Cafe & Pies",cuisine:"american",name:"Shari's"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Shoney's":{name:"Shoney's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/shoneys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7500392",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Shoney's","brand:wikidata":"Q7500392","brand:wikipedia":"en:Shoney's",cuisine:"american",name:"Shoney's"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Sizzler":{name:"Sizzler",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/sizzler/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1848822",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Sizzler","brand:wikidata":"Q1848822","brand:wikipedia":"en:Sizzler",cuisine:"steak_house",name:"Sizzler"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Skyline Chili":{name:"Skyline Chili",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/SkylineChili/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q151224",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Skyline Chili","brand:wikidata":"Q151224","brand:wikipedia":"en:Skyline Chili",cuisine:"chili",name:"Skyline Chili",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Smitty's":{name:"Smitty's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/SmittysRestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7545728",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Smitty's","brand:wikidata":"Q7545728","brand:wikipedia":"en:Smitty's",cuisine:"pancake",name:"Smitty's"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Snappy Tomato Pizza":{name:"Snappy Tomato Pizza",icon:"maki-restaurant-pizza",imageURL:"https://pbs.twimg.com/profile_images/849232685667168256/Wg-1LDp5_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7547352",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Snappy Tomato Pizza","brand:wikidata":"Q7547352","brand:wikipedia":"en:Snappy Tomato Pizza",cuisine:"pizza",name:"Snappy Tomato Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["gb","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Spur":{name:"Spur",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/SpurSteakRanches/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7581546",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Spur","brand:wikidata":"Q7581546","brand:wikipedia":"en:Spur Steak Ranches",cuisine:"steak_house",name:"Spur"},terms:["spur steak ranches"],matchScore:2,suggestion:true},"amenity/restaurant/Steak 'n Shake":{name:"Steak 'n Shake",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/steaknshake/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7605233",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Steak 'n Shake","brand:wikidata":"Q7605233","brand:wikipedia":"en:Steak 'n Shake",cuisine:"burger",name:"Steak 'n Shake"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Sunset Grill":{name:"Sunset Grill",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/SunsetGrillBreakfast/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62112489",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Sunset Grill","brand:wikidata":"Q62112489","brand:wikipedia":"en:Sunset Grill (Canadian restaurant chain)",cuisine:"american",name:"Sunset Grill"},reference:{key:"cuisine",value:"american"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Swiss Chalet":{name:"Swiss Chalet",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/SwissChalet/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2372909",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Swiss Chalet","brand:wikidata":"Q2372909","brand:wikipedia":"en:Swiss Chalet",cuisine:"chicken",name:"Swiss Chalet"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/TGI Friday's":{name:"TGI Friday's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/TGIFridays/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1524184",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"TGI Friday's","brand:wikidata":"Q1524184","brand:wikipedia":"en:TGI Fridays",cuisine:"american",name:"TGI Friday's"},reference:{key:"cuisine",value:"american"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Texas Roadhouse":{name:"Texas Roadhouse",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/texasroadhouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7707945",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Texas Roadhouse","brand:wikidata":"Q7707945","brand:wikipedia":"en:Texas Roadhouse",cuisine:"steak_house",name:"Texas Roadhouse"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/The Cheesecake Factory":{name:"The Cheesecake Factory",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/thecheesecakefactory/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1045842",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"The Cheesecake Factory","brand:wikidata":"Q1045842","brand:wikipedia":"en:The Cheesecake Factory",cuisine:"american",name:"The Cheesecake Factory"},reference:{key:"cuisine",value:"american"},terms:["cheesecake factory"],matchScore:2,suggestion:true},"amenity/restaurant/The Keg":{name:"The Keg",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/thekegsteakhouseandbar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7744066",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"The Keg","brand:wikidata":"Q7744066","brand:wikipedia":"en:The Keg",cuisine:"steak_house",name:"The Keg"},terms:["keg"],matchScore:2,suggestion:true},"amenity/restaurant/The Melting Pot":{name:"The Melting Pot",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/themeltingpotrestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7750948",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"The Melting Pot","brand:wikidata":"Q7750948","brand:wikipedia":"en:The Melting Pot (restaurant)",cuisine:"fondue",name:"The Melting Pot"},terms:["melting pot"],matchScore:2,suggestion:true},"amenity/restaurant/Toby Carvery":{name:"Toby Carvery",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/tobycarvery/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7811777",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Toby Carvery","brand:wikidata":"Q7811777","brand:wikipedia":"en:Toby Carvery",cuisine:"british",name:"Toby Carvery"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/mexican/Toks":{name:"Toks",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/ToksMx/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48835586",amenity:"restaurant",cuisine:"mexican"},addTags:{amenity:"restaurant",brand:"Toks","brand:wikidata":"Q48835586","brand:wikipedia":"en:Toks",cuisine:"mexican",name:"Toks"},reference:{key:"cuisine",value:"mexican"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Tony Roma's":{name:"Tony Roma's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/TonyRomas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2213883",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Tony Roma's","brand:wikidata":"Q2213883","brand:wikipedia":"en:Tony Roma's",cuisine:"barbecue",name:"Tony Roma's"},terms:["tony roma"],matchScore:2,suggestion:true},"amenity/restaurant/italian/Vapiano":{name:"Vapiano",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/Vapiano/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q506252",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"Vapiano","brand:wikidata":"Q506252","brand:wikipedia":"en:Vapiano",cuisine:"italian",name:"Vapiano"},reference:{key:"cuisine",value:"italian"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Village Inn":{name:"Village Inn",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/villageinnrestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7930659",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Village Inn","brand:wikidata":"Q7930659","brand:wikipedia":"en:Village Inn",cuisine:"american",name:"Village Inn"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Vips":{name:"Vips",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/VIPSMX/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48783378",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Vips","brand:wikidata":"Q48783378","brand:wikipedia":"es:Vips",name:"Vips"},countryCodes:["es","mx"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Waffle House":{name:"Waffle House",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/WaffleHouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1701206",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Waffle House","brand:wikidata":"Q1701206","brand:wikipedia":"en:Waffle House",cuisine:"american",name:"Waffle House",opening_hours:"24/7"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/asian/Wagamama":{name:"Wagamama",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/wagamama.spain/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q503715",amenity:"restaurant",cuisine:"asian"},addTags:{amenity:"restaurant",brand:"Wagamama","brand:wikidata":"Q503715","brand:wikipedia":"en:Wagamama",cuisine:"asian",name:"Wagamama"},reference:{key:"cuisine",value:"asian"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/Wasabi":{name:"Wasabi",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/WasabiUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23891278",amenity:"restaurant",cuisine:"japanese"},addTags:{amenity:"restaurant",brand:"Wasabi","brand:wikidata":"Q23891278","brand:wikipedia":"en:Wasabi (restaurant)",cuisine:"japanese",name:"Wasabi"},reference:{key:"cuisine",value:"japanese"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/White Spot":{name:"White Spot",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/whitespot/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7995414",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"White Spot","brand:wikidata":"Q7995414","brand:wikipedia":"en:White Spot",cuisine:"burger",name:"White Spot"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Wingstop":{name:"Wingstop",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/Wingstop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8025339",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Wingstop","brand:wikidata":"Q8025339","brand:wikipedia":"en:Wingstop",cuisine:"wings",name:"Wingstop"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/sushi/YO! Sushi":{name:"YO! Sushi",icon:"fas-fish",imageURL:"https://graph.facebook.com/YOSushi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3105441",amenity:"restaurant",cuisine:"sushi"},addTags:{amenity:"restaurant",brand:"YO! Sushi","brand:wikidata":"Q3105441","brand:wikipedia":"en:YO! Sushi",cuisine:"sushi",name:"YO! Sushi"},reference:{key:"cuisine",value:"sushi"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/Zizzi":{name:"Zizzi",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/wearezizzi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8072944",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"Zizzi","brand:wikidata":"Q8072944","brand:wikipedia":"en:Zizzi",cuisine:"italian",name:"Zizzi"},reference:{key:"cuisine",value:"italian"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/sushi/Планета Суши":{name:"Планета Суши",icon:"fas-fish",imageURL:"https://graph.facebook.com/sushiplanet.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62739250",amenity:"restaurant",cuisine:"sushi"},addTags:{amenity:"restaurant",brand:"Планета Суши","brand:wikidata":"Q62739250",cuisine:"sushi",name:"Планета Суши","name:en":"Planet Sushi"},reference:{key:"cuisine",value:"sushi"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/Тануки":{name:"Тануки",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/tanuki.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62758690",amenity:"restaurant",cuisine:"japanese"},addTags:{amenity:"restaurant",brand:"Тануки","brand:wikidata":"Q62758690",cuisine:"japanese",name:"Тануки","name:en":"Tanuki","name:ru":"Тануки"},reference:{key:"cuisine",value:"japanese"},countryCodes:["kz","ru","ua"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/いきなり!ステーキ":{name:"いきなり!ステーキ",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/ikinari.steak/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21652405",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"いきなり!ステーキ","brand:en":"Ikinari Steak","brand:ja":"いきなり!ステーキ","brand:wikidata":"Q21652405","brand:wikipedia":"ja:いきなり!ステーキ",cuisine:"steak_house",name:"いきなり!ステーキ","name:en":"Ikinari Steak","name:ja":"いきなり!ステーキ"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/はなまるうどん":{name:"はなまるうどん",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/hanamaruudon.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11275674",amenity:"restaurant",cuisine:"japanese;udon"},addTags:{amenity:"restaurant",brand:"はなまるうどん","brand:en":"Hanamarūdon","brand:ja":"はなまるうどん","brand:wikidata":"Q11275674","brand:wikipedia":"ja:はなまるうどん",cuisine:"japanese;udon",name:"はなまるうどん","name:en":"Hanamarūdon","name:ja":"はなまるうどん"},reference:{key:"cuisine",value:"japanese"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/びっくりドンキー":{name:"びっくりドンキー",icon:"maki-restaurant",geometry:["point","area"],tags:{"brand:wikidata":"Q11276815",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"びっくりドンキー","brand:en":"Bikkuri Donkey","brand:ja":"びっくりドンキー","brand:wikidata":"Q11276815","brand:wikipedia":"ja:びっくりドンキー",cuisine:"burger",name:"びっくりドンキー","name:en":"Bikkuri Donkey","name:ja":"びっくりドンキー"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/やよい軒":{name:"やよい軒",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/yayoiphilippines/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11280577",amenity:"restaurant",cuisine:"japanese"},addTags:{amenity:"restaurant",brand:"やよい軒","brand:en":"Yayoiken","brand:ja":"やよい軒","brand:wikidata":"Q11280577","brand:wikipedia":"ja:やよい軒",cuisine:"japanese",name:"やよい軒","name:en":"Yayoiken","name:ja":"やよい軒"},reference:{key:"cuisine",value:"japanese"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/カプリチョーザ":{name:"カプリチョーザ",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/capricciosa.restaurant/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11294660",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"カプリチョーザ","brand:en":"Capricciosa","brand:ja":"カプリチョーザ","brand:wikidata":"Q11294660","brand:wikipedia":"ja:カプリチョーザ",cuisine:"italian",name:"カプリチョーザ","name:en":"Capricciosa","name:ja":"カプリチョーザ"},reference:{key:"cuisine",value:"italian"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/ココス":{name:"ココス",icon:"maki-restaurant-noodle",imageURL:"https://pbs.twimg.com/profile_images/875584429069959169/5l38DoS7_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11301951",amenity:"restaurant",cuisine:"western;japanese"},addTags:{amenity:"restaurant",brand:"ココス","brand:en":"Coco's","brand:ja":"ココス","brand:wikidata":"Q11301951","brand:wikipedia":"ja:ココスジャパン",cuisine:"western;japanese",name:"ココス","name:en":"Coco's","name:ja":"ココス"},reference:{key:"cuisine",value:"japanese"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/サイゼリヤ":{name:"サイゼリヤ",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/Saizeriya4Fun/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q886564",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"サイゼリヤ","brand:en":"Saizeriya","brand:ja":"サイゼリヤ","brand:wikidata":"Q886564","brand:wikipedia":"en:Saizeriya",cuisine:"italian",name:"サイゼリヤ","name:en":"Saizeriya","name:ja":"サイゼリヤ"},reference:{key:"cuisine",value:"italian"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/ジョイフル":{name:"ジョイフル",icon:"maki-restaurant",geometry:["point","area"],tags:{"brand:wikidata":"Q11310517",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"ジョイフル","brand:en":"Joyfull","brand:ja":"ジョイフル","brand:wikidata":"Q11310517","brand:wikipedia":"ja:ジョイフル",cuisine:"western",name:"ジョイフル","name:en":"Joyfull","name:ja":"ジョイフル"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/ジョナサン":{name:"ジョナサン",icon:"maki-restaurant",imageURL:"https://pbs.twimg.com/profile_images/1098912743497711618/uM80VkgK_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11310628",amenity:"restaurant",cuisine:"italian;japanese"},addTags:{amenity:"restaurant",brand:"ジョナサン","brand:en":"Jonathan's","brand:ja":"ジョナサン","brand:wikidata":"Q11310628","brand:wikipedia":"ja:ジョナサン (ファミリーレストラン)",cuisine:"italian;japanese",name:"ジョナサン","name:en":"Jonathan's","name:ja":"ジョナサン"},reference:{key:"cuisine",value:"italian"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/ジョリーパスタ":{name:"ジョリーパスタ",icon:"maki-restaurant",geometry:["point","area"],tags:{"brand:wikidata":"Q10852718",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"ジョリーパスタ","brand:en":"Jolly-Pasta","brand:ja":"ジョリーパスタ","brand:wikidata":"Q10852718","brand:wikipedia":"ja:ジョリーパスタ",cuisine:"pasta",name:"ジョリーパスタ","name:en":"Jolly-Pasta","name:ja":"ジョリーパスタ"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/ステーキガスト":{name:"ステーキガスト",icon:"maki-restaurant",geometry:["point","area"],tags:{"brand:wikidata":"Q11253593",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"ステーキガスト","brand:ja":"ステーキガスト","brand:wikidata":"Q11253593","brand:wikipedia":"ja:すかいらーく",cuisine:"steak",name:"ステーキガスト","name:ja":"ステーキガスト"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/デニーズ":{name:"デニーズ",icon:"maki-restaurant",geometry:["point","area"],tags:{"brand:wikidata":"Q11320661",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"デニーズ","brand:en":"Denny's","brand:ja":"デニーズ","brand:wikidata":"Q11320661","brand:wikipedia":"ja:デニーズ (日本)",name:"デニーズ","name:en":"Denny's","name:ja":"デニーズ"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/バーミヤン":{name:"バーミヤン",icon:"maki-restaurant",imageURL:"https://pbs.twimg.com/profile_images/1098907474789163010/uXiRaQ9S_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11328598",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"バーミヤン","brand:en":"Bamiyan","brand:ja":"バーミヤン","brand:wikidata":"Q11328598","brand:wikipedia":"ja:バーミヤン (レストランチェーン)",name:"バーミヤン","name:en":"Bamiyan","name:ja":"バーミヤン"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/ビッグボーイ":{name:"ビッグボーイ",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/bigboyrestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4386779",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"ビッグボーイ","brand:en":"Big Boy Restaurants","brand:ja":"ビッグボーイ","brand:wikidata":"Q4386779","brand:wikipedia":"en:Big Boy Restaurants",cuisine:"burger",name:"ビッグボーイ","name:en":"Big Boy Restaurants","name:ja":"ビッグボーイ"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/リンガーハット":{name:"リンガーハット",icon:"maki-restaurant-noodle",geometry:["point","area"],tags:{"brand:wikidata":"Q7334856",amenity:"restaurant",cuisine:"japanese"},addTags:{amenity:"restaurant",brand:"リンガーハット","brand:en":"Ringer Hut","brand:ja":"リンガーハット","brand:wikidata":"Q7334856","brand:wikipedia":"en:Ringer Hut",cuisine:"japanese",name:"リンガーハット","name:en":"Ringer Hut","name:ja":"リンガーハット"},reference:{key:"cuisine",value:"japanese"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/ロイヤルホスト":{name:"ロイヤルホスト",icon:"maki-restaurant-noodle",geometry:["point","area"],tags:{"brand:wikidata":"Q11120884",amenity:"restaurant",cuisine:"japanese;italian;french"},addTags:{amenity:"restaurant",brand:"ロイヤルホスト","brand:en":"Royal Host","brand:ja":"ロイヤルホスト","brand:wikidata":"Q11120884","brand:wikipedia":"ja:ロイヤルホスト",cuisine:"japanese;italian;french",name:"ロイヤルホスト","name:en":"Royal Host","name:ja":"ロイヤルホスト"},reference:{key:"cuisine",value:"japanese"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/noodle/丸亀製麺":{name:"丸亀製麺",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/marugame/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10877253",amenity:"restaurant",cuisine:"noodle"},addTags:{amenity:"restaurant",brand:"丸亀製麺","brand:en":"Marugame Seimen","brand:ja":"丸亀製麺","brand:wikidata":"Q10877253","brand:wikipedia":"ja:丸亀製麺",cuisine:"noodle",name:"丸亀製麺","name:en":"Marugame Seimen","name:ja":"丸亀製麺"},reference:{key:"cuisine",value:"noodle"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/八方雲集":{name:"八方雲集",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/8wayTW/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28417381",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"八方雲集","brand:en":"Eight Way","brand:wikidata":"Q28417381","brand:wikipedia":"zh:八方雲集","brand:zh":"八方雲集",name:"八方雲集","name:en":"Eight Way","name:zh":"八方雲集"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/和食さと":{name:"和食さと",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/satorsgroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11304897",amenity:"restaurant",cuisine:"japanese"},addTags:{amenity:"restaurant",brand:"和食さと","brand:en":"Washoku Sato","brand:ja":"和食さと","brand:wikidata":"Q11304897","brand:wikipedia":"ja:SRSホールディングス",cuisine:"japanese",name:"和食さと","name:en":"Washoku Sato","name:ja":"和食さと"},reference:{key:"cuisine",value:"japanese"},countryCodes:["jp"],terms:["さと"],matchScore:2,suggestion:true},"amenity/restaurant/japanese/夢庵":{name:"夢庵",icon:"maki-restaurant-noodle",geometry:["point","area"],tags:{"brand:wikidata":"Q11253593",amenity:"restaurant",cuisine:"japanese"},addTags:{amenity:"restaurant",brand:"夢庵","brand:en":"Yumean","brand:ja":"夢庵","brand:wikidata":"Q11253593","brand:wikipedia":"ja:すかいらーく",cuisine:"japanese",name:"夢庵","name:en":"Yumean","name:ja":"夢庵"},reference:{key:"cuisine",value:"japanese"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/大戸屋":{name:"大戸屋",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/ootoya/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11435522",amenity:"restaurant",cuisine:"japanese"},addTags:{amenity:"restaurant",brand:"大戸屋","brand:en":"Ootoya","brand:ja":"大戸屋","brand:wikidata":"Q11435522","brand:wikipedia":"ja:大戸屋ホールディングス",cuisine:"japanese",name:"大戸屋","name:en":"Ootoya","name:ja":"大戸屋"},reference:{key:"cuisine",value:"japanese"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/大阪王将":{name:"大阪王将",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/osakaohsho/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48743717",amenity:"restaurant",cuisine:"japanese;chinese"},addTags:{amenity:"restaurant",brand:"大阪王将","brand:en":"Osaka Ohsho","brand:ja":"大阪王将","brand:wikidata":"Q48743717","brand:wikipedia":"ja:大阪王将",cuisine:"japanese;chinese",name:"大阪王将","name:en":"Osaka Ohsho","name:ja":"大阪王将"},reference:{key:"cuisine",value:"japanese"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/天下一品":{name:"天下一品",icon:"maki-restaurant",geometry:["point","area"],tags:{"brand:wikidata":"Q11442172",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"天下一品","brand:en":"Tenkaippin","brand:wikidata":"Q11442172","brand:wikipedia":"en:Tenkaippin",cuisine:"ramen",name:"天下一品","name:en":"Tenkaippin"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/安楽亭":{name:"安楽亭",icon:"maki-restaurant",geometry:["point","area"],tags:{"brand:wikidata":"Q11450866",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"安楽亭","brand:en":"Anrakutei","brand:wikidata":"Q11450866","brand:wikipedia":"ja:安楽亭",cuisine:"barbecue",name:"安楽亭","name:en":"Anrakutei"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/木曽路":{name:"木曽路",icon:"maki-restaurant-noodle",geometry:["point","area"],tags:{"brand:wikidata":"Q11518589",amenity:"restaurant",cuisine:"japanese"},addTags:{amenity:"restaurant",brand:"木曽路","brand:wikidata":"Q11518589","brand:wikipedia":"ja:木曽路 (企業)",cuisine:"japanese",name:"木曽路"},reference:{key:"cuisine",value:"japanese"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/永和豆漿":{name:"永和豆漿",icon:"maki-restaurant",geometry:["point","area"],tags:{"brand:wikidata":"Q11131335",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"永和豆漿","brand:en":"Yonghe Soy Milk","brand:wikidata":"Q11131335","brand:wikipedia":"zh:永和豆漿",name:"永和豆漿","name:en":"Yonghe Soy Milk"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/牛角":{name:"牛角",icon:"maki-restaurant",geometry:["point","area"],tags:{"brand:wikidata":"Q11349387",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"牛角","brand:en":"Gyū-Kaku","brand:wikidata":"Q11349387","brand:wikipedia":"en:Gyu-Kaku",cuisine:"barbecue",name:"牛角","name:en":"Gyū-Kaku"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/華屋与兵衛":{name:"華屋与兵衛",icon:"maki-restaurant-noodle",geometry:["point","area"],tags:{"brand:wikidata":"Q11620063",amenity:"restaurant",cuisine:"japanese"},addTags:{amenity:"restaurant",brand:"華屋与兵衛","brand:en":"Hanaya Yohei","brand:ja":"華屋与兵衛","brand:wikidata":"Q11620063","brand:wikipedia":"ja:華屋与兵衛 (レストラン)",cuisine:"japanese",name:"華屋与兵衛","name:en":"Hanaya Yohei","name:ja":"華屋与兵衛",operator:"株式会社ゼンショーホールディングス","operator:en":"Zensho Holdings Co., Ltd.","operator:ja":"株式会社ゼンショーホールディングス","operator:wikidata":"Q8069229","operator:wikipedia":"ja:ゼンショー"},reference:{key:"cuisine",value:"japanese"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/chinese/餃子の王将":{name:"餃子の王将",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/ohshosaiyo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11666805",amenity:"restaurant",cuisine:"chinese;gyoza"},addTags:{amenity:"restaurant",brand:"餃子の王将","brand:en":"Gyoza no Ohsho","brand:ja":"餃子の王将","brand:wikidata":"Q11666805","brand:wikipedia":"en:Gyoza no Ohsho",cuisine:"chinese;gyoza",name:"餃子の王将","name:en":"Gyoza no Ohsho","name:ja":"餃子の王将"},reference:{key:"cuisine",value:"chinese"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/빕스":{name:"빕스",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/ivips/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12599540",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"빕스","brand:en":"VIPS","brand:ko":"빕스","brand:wikidata":"Q12599540","brand:wikipedia":"en:VIPS (restaurant)",name:"빕스","name:en":"VIPS","name:ko":"빕스"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"amenity/social_centre/American Legion Hall":{name:"American Legion Hall",icon:"fas-handshake",imageURL:"https://graph.facebook.com/americanlegionhq/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q468865",amenity:"social_centre"},addTags:{alt_name:"American Legion Hall",amenity:"social_centre",brand:"American Legion","brand:wikidata":"Q468865","brand:wikipedia":"en:American Legion",name:"American Legion Hall","social_centre:for":"veterans"},countryCodes:["us"],terms:["american legion"],matchScore:2,suggestion:true},"amenity/social_centre/Eagles Lodge":{name:"Eagles Lodge",icon:"fas-handshake",imageURL:"https://graph.facebook.com/foegrandaerie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5493810",amenity:"social_centre"},addTags:{alt_name:"Aeries Lodge",amenity:"social_centre",brand:"Fraternal Order of Eagles","brand:wikidata":"Q5493810","brand:wikipedia":"en:Fraternal Order of Eagles",name:"Eagles Lodge",official_name:"Fraternal Order of Eagles"},countryCodes:["us"],terms:["aeries lodge","foe","fraternal order of eagles"],matchScore:2,suggestion:true},"amenity/social_centre/Elks Lodge":{name:"Elks Lodge",icon:"fas-handshake",geometry:["point","area"],tags:{"brand:wikidata":"Q2895789",amenity:"social_centre"},addTags:{amenity:"social_centre",brand:"Benevolent and Protective Order of Elks","brand:wikidata":"Q2895789","brand:wikipedia":"en:Benevolent and Protective Order of Elks",name:"Elks Lodge",official_name:"Benevolent and Protective Order of Elks"},countryCodes:["us"],terms:["benevolent and protective order of elks","bpoe","elks"],matchScore:2,suggestion:true},"amenity/social_centre/Moose Lodge":{name:"Moose Lodge",icon:"fas-handshake",imageURL:"https://graph.facebook.com/heardofmoose/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6908585",amenity:"social_centre"},addTags:{alt_name:"Moose Lodge",amenity:"social_centre",brand:"Loyal Order of Moose","brand:wikidata":"Q6908585","brand:wikipedia":"en:Loyal Order of Moose",name:"Moose Lodge",official_name:"Loyal Order of Moose"},countryCodes:["bm","ca","us"],terms:["loyal order of moose"],matchScore:2,suggestion:true},"amenity/social_centre/Odd Fellows Hall":{name:"Odd Fellows Hall",icon:"fas-handshake",imageURL:"https://graph.facebook.com/IOOFSGL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1425508",amenity:"social_centre"},addTags:{amenity:"social_centre",brand:"Independent Order of Odd Fellows","brand:wikidata":"Q1425508","brand:wikipedia":"en:Independent Order of Odd Fellows",name:"Odd Fellows Hall",official_name:"Independent Order of Odd Fellows"},terms:["independent order of odd fellows","ioof","odd fellow","odd fellows"],matchScore:2,suggestion:true},"amenity/vending_machine/parcel_pickup/Amazon Locker":{name:"Amazon Locker",icon:"temaki-vending_machine",imageURL:"https://graph.facebook.com/amazon/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q16974764",amenity:"vending_machine",vending:"parcel_pickup"},addTags:{amenity:"vending_machine",brand:"Amazon Locker","brand:wikidata":"Q16974764","brand:wikipedia":"en:Amazon Locker",name:"Amazon Locker",vending:"parcel_pickup"},reference:{key:"vending",value:"parcel_pickup"},countryCodes:["de","us"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/public_transport_tickets/Automat ŚKUP":{name:"Automat ŚKUP",icon:"temaki-vending_machine",geometry:["point"],tags:{"brand:wikidata":"Q24945427",amenity:"vending_machine",vending:"public_transport_tickets"},addTags:{amenity:"vending_machine",brand:"Automat ŚKUP","brand:wikidata":"Q24945427","brand:wikipedia":"pl:Śląska Karta Usług Publicznych",name:"Automat ŚKUP",vending:"public_transport_tickets"},reference:{key:"vending",value:"public_transport_tickets"},terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/parcel_pickup_dropoff/DHL Packstation":{name:"DHL Packstation",icon:"temaki-vending_machine",geometry:["point"],tags:{"brand:wikidata":"Q1766703",amenity:"vending_machine",vending:"parcel_pickup;parcel_mail_in"},addTags:{amenity:"vending_machine",brand:"Packstation","brand:wikidata":"Q1766703","brand:wikipedia":"en:Packstation",name:"DHL Packstation",operator:"DHL","operator:wikidata":"Q489815","operator:wikipedia":"en:DHL Express",vending:"parcel_pickup;parcel_mail_in"},reference:{key:"vending",value:"parcel_pickup;parcel_mail_in"},terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/DHL Paketbox":{name:"DHL Paketbox",icon:"temaki-vending_machine",geometry:["point"],tags:{"brand:wikidata":"Q2046604",amenity:"vending_machine"},addTags:{amenity:"vending_machine",brand:"Paketbox","brand:wikidata":"Q2046604","brand:wikipedia":"de:Paketbox",name:"DHL Paketbox",operator:"DHL","operator:wikidata":"Q489815","operator:wikipedia":"de:DHL",vending:"parcel_mail_in"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/excrement_bags/Dog-Station":{name:"Dog-Station",icon:"temaki-vending_machine",geometry:["point"],tags:{"brand:wikidata":"Q63720061",amenity:"vending_machine",vending:"excrement_bags"},addTags:{amenity:"vending_machine",brand:"Dog-Station","brand:wikidata":"Q63720061",name:"Dog-Station",vending:"excrement_bags"},reference:{key:"vending",value:"excrement_bags"},countryCodes:["at","de","dk"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/public_transport_tickets/KKM":{name:"KKM",icon:"temaki-vending_machine",geometry:["point"],tags:{"brand:wikidata":"Q57515549",amenity:"vending_machine",vending:"public_transport_tickets"},addTags:{amenity:"vending_machine",brand:"KKM","brand:wikidata":"Q57515549",name:"KKM",vending:"public_transport_tickets"},reference:{key:"vending",value:"public_transport_tickets"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/parcel_pickup_dropoff/Paczkomat InPost":{name:"Paczkomat InPost",icon:"temaki-vending_machine",imageURL:"https://graph.facebook.com/paczkomaty/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q3182097",amenity:"vending_machine",vending:"parcel_pickup;parcel_mail_in"},addTags:{amenity:"vending_machine",brand:"InPost","brand:wikidata":"Q3182097","brand:wikipedia":"pl:InPost",name:"Paczkomat InPost",vending:"parcel_pickup;parcel_mail_in"},reference:{key:"vending",value:"parcel_pickup;parcel_mail_in"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/parking_tickets/ParkPlus (Calgary)":{name:"ParkPlus (Calgary)",icon:"temaki-vending_machine",imageURL:"https://graph.facebook.com/CalgaryParkingAuthority/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q63719595",amenity:"vending_machine",vending:"parking_tickets"},addTags:{amenity:"vending_machine",brand:"ParkPlus","brand:wikidata":"Q63719595",name:"ParkPlus",vending:"parking_tickets"},reference:{key:"vending",value:"parking_tickets"},terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/Redbox":{name:"Redbox",icon:"temaki-vending_machine",imageURL:"https://graph.facebook.com/redbox/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q7305489",amenity:"vending_machine"},addTags:{amenity:"vending_machine",brand:"Redbox","brand:wikidata":"Q7305489","brand:wikipedia":"en:Redbox",name:"Redbox",vending:"dvd"},terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/excrement_bags/Robidog":{name:"Robidog",icon:"temaki-vending_machine",geometry:["point"],tags:{"brand:wikidata":"Q2159689",amenity:"vending_machine",vending:"excrement_bags"},addTags:{amenity:"vending_machine",brand:"Robidog","brand:wikidata":"Q2159689","brand:wikipedia":"de:Robidog",name:"Robidog",vending:"excrement_bags"},reference:{key:"vending",value:"excrement_bags"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/cigarettes/Tobaccoland":{name:"Tobaccoland",icon:"temaki-vending_machine",geometry:["point"],tags:{"brand:wikidata":"Q1439872",amenity:"vending_machine",vending:"cigarettes"},addTags:{amenity:"vending_machine",brand:"Tobaccoland","brand:wikidata":"Q1439872","brand:wikipedia":"de:Tobaccoland Automatengesellschaft",name:"Tobaccoland",vending:"cigarettes"},reference:{key:"vending",value:"cigarettes"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/drinks/コカ・コーラ":{name:"コカ・コーラ",icon:"temaki-vending_machine",imageURL:"https://pbs.twimg.com/profile_images/1131670878872317957/_hx0-AFB_bigger.png",geometry:["point"],tags:{"brand:wikidata":"Q2813",amenity:"vending_machine",vending:"drinks"},addTags:{amenity:"vending_machine",brand:"コカ・コーラ","brand:en":"Coca-Cola","brand:ja":"コカ・コーラ","brand:wikidata":"Q2813","brand:wikipedia":"ja:コカ・コーラ",drink:"cola",name:"コカ・コーラ","name:en":"Coca-Cola","name:ja":"コカ・コーラ",operator:"Coca Cola Japan Co., Ltd.","operator:wikidata":"Q11506438","operator:wikipedia":"ja:日本コカ・コーラ",vending:"drinks"},reference:{key:"vending",value:"drinks"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/ポッカサッポロ":{name:"ポッカサッポロ",icon:"temaki-vending_machine",geometry:["point"],tags:{"brand:wikidata":"Q7208665",amenity:"vending_machine"},addTags:{amenity:"vending_machine",brand:"ポッカサッポロ","brand:en":"Pokka Sapporo","brand:ja":"ポッカサッポロ","brand:wikidata":"Q7208665","brand:wikipedia":"ja:ポッカサッポロフード&ビバレッジ",name:"ポッカサッポロ","name:en":"Pokka Sapporo","name:ja":"ポッカサッポロ",vending:"water;food"},countryCodes:["jp"],terms:["pokka sapporo"],matchScore:2,suggestion:true},"amenity/veterinary/Banfield Pet Hospital":{name:"Banfield Pet Hospital",icon:"temaki-veterinary_care",imageURL:"https://graph.facebook.com/BanfieldPetHospital/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2882416",amenity:"veterinary"},addTags:{amenity:"veterinary",brand:"Banfield Pet Hospital","brand:wikidata":"Q2882416","brand:wikipedia":"en:Banfield Pet Hospital",name:"Banfield Pet Hospital"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/veterinary/VCA Animal Hospital":{name:"VCA Animal Hospital",icon:"temaki-veterinary_care",imageURL:"https://graph.facebook.com/VCAAnimalHospitals/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7906620",amenity:"veterinary"},addTags:{amenity:"veterinary",brand:"VCA Animal Hospital","brand:wikidata":"Q7906620","brand:wikipedia":"en:VCA Animal Hospitals",name:"VCA Animal Hospital"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/24 Hour Fitness":{name:"24 Hour Fitness",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/24HourFitness/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4631849",leisure:"fitness_centre"},addTags:{brand:"24 Hour Fitness","brand:wikidata":"Q4631849","brand:wikipedia":"en:24 Hour Fitness",leisure:"fitness_centre",name:"24 Hour Fitness"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/Anytime Fitness":{name:"Anytime Fitness",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/anytimefitness/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4778364",leisure:"fitness_centre"},addTags:{brand:"Anytime Fitness","brand:wikidata":"Q4778364","brand:wikipedia":"en:Anytime Fitness",leisure:"fitness_centre",name:"Anytime Fitness"},terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/Basic-Fit":{name:"Basic-Fit",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/BasicFitEspana/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q40165577",leisure:"fitness_centre"},addTags:{brand:"Basic-Fit","brand:wikidata":"Q40165577","brand:wikipedia":"nl:Basic-Fit",leisure:"fitness_centre",name:"Basic-Fit"},countryCodes:["be","es","fr","lu","nl"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/Curves":{name:"Curves",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/Curves/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5196080",leisure:"fitness_centre"},addTags:{brand:"Curves","brand:wikidata":"Q5196080","brand:wikipedia":"en:Curves International",leisure:"fitness_centre",name:"Curves"},terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/Fitness First":{name:"Fitness First",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/FitnessFirstGER/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q127120",leisure:"fitness_centre"},addTags:{brand:"Fitness First","brand:wikidata":"Q127120","brand:wikipedia":"en:Fitness First",leisure:"fitness_centre",name:"Fitness First"},countryCodes:["ae","au","de","gb","ph","th"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/Gold's Gym":{name:"Gold's Gym",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/goldsgym/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1536234",leisure:"fitness_centre"},addTags:{brand:"Gold's Gym","brand:wikidata":"Q1536234","brand:wikipedia":"en:Gold's Gym",leisure:"fitness_centre",name:"Gold's Gym"},countryCodes:["ae","in","ph","us"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/LA Fitness":{name:"LA Fitness",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/LAFitness/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6457180",leisure:"fitness_centre"},addTags:{brand:"LA Fitness","brand:wikidata":"Q6457180","brand:wikipedia":"en:LA Fitness",leisure:"fitness_centre",name:"LA Fitness"},countryCodes:["ca","gb","us"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/McFit":{name:"McFit",icon:"fas-dumbbell",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20McFIT%20GmbH.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q871302",leisure:"fitness_centre"},addTags:{brand:"McFit","brand:wikidata":"Q871302","brand:wikipedia":"en:McFit",leisure:"fitness_centre",name:"McFit"},countryCodes:["at","de","es","it","pl"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/Orangetheory Fitness":{name:"Orangetheory Fitness",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/OrangeTheoryFitness/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25005163",leisure:"fitness_centre"},addTags:{brand:"Orangetheory Fitness","brand:wikidata":"Q25005163","brand:wikipedia":"en:Orangetheory Fitness",leisure:"fitness_centre",name:"Orangetheory Fitness"},countryCodes:["ca","es","us"],terms:["orangetheory"],matchScore:2,suggestion:true},"leisure/fitness_centre/Planet Fitness":{name:"Planet Fitness",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/planetfitness/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7201095",leisure:"fitness_centre"},addTags:{brand:"Planet Fitness","brand:wikidata":"Q7201095","brand:wikipedia":"en:Planet Fitness",leisure:"fitness_centre",name:"Planet Fitness"},countryCodes:["ae","au","ca","cl","cn","co","cr","de","do","es","gb","gt","il","jp","kw","mx","nz","pa","pe","pl","pr","sa","sg","us"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/PureGym":{name:"PureGym",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/puregym/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18345898",leisure:"fitness_centre"},addTags:{brand:"PureGym","brand:wikidata":"Q18345898","brand:wikipedia":"en:PureGym",leisure:"fitness_centre",name:"PureGym"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/Retro Fitness":{name:"Retro Fitness",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/RetroFitness/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61994955",leisure:"fitness_centre"},addTags:{brand:"Retro Fitness","brand:wikidata":"Q61994955",leisure:"fitness_centre",name:"Retro Fitness"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/Snap Fitness":{name:"Snap Fitness",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/SnapFitness247/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7547254",leisure:"fitness_centre"},addTags:{brand:"Snap Fitness","brand:wikidata":"Q7547254","brand:wikipedia":"en:Snap Fitness",leisure:"fitness_centre",name:"Snap Fitness"},terms:[],matchScore:2,suggestion:true},"leisure/sports_centre/YMCA":{name:"YMCA",icon:"maki-pitch",imageURL:"https://graph.facebook.com/YMCA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q157169",leisure:"sports_centre"},addTags:{brand:"YMCA","brand:wikidata":"Q157169","brand:wikipedia":"en:YMCA",leisure:"sports_centre",name:"YMCA"},terms:[],matchScore:2,suggestion:true},"office/estate_agent/Century 21":{name:"Century 21",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/century21/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1054480",office:"estate_agent"},addTags:{brand:"Century 21","brand:wikidata":"Q1054480","brand:wikipedia":"en:Century 21 (real estate)",name:"Century 21",office:"estate_agent"},terms:["century 21 real estate"],matchScore:2,suggestion:true},"office/estate_agent/Coldwell Banker":{name:"Coldwell Banker",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/coldwellbanker/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q738853",office:"estate_agent"},addTags:{brand:"Coldwell Banker","brand:wikidata":"Q738853","brand:wikipedia":"en:Coldwell Banker",name:"Coldwell Banker",office:"estate_agent"},terms:["coldwell banker real estate"],matchScore:2,suggestion:true},"office/estate_agent/RE/MAX":{name:"RE/MAX",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/remax/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q965845",office:"estate_agent"},addTags:{brand:"RE/MAX","brand:wikidata":"Q965845","brand:wikipedia":"en:RE/MAX",name:"RE/MAX",office:"estate_agent"},terms:[],matchScore:2,suggestion:true},"office/financial_advisor/Edward Jones":{name:"Edward Jones",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/edwardjones/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5343830",office:"financial_advisor"},addTags:{alt_name:"Edward Jones Investments",brand:"Edward Jones","brand:wikidata":"Q5343830","brand:wikipedia":"en:Edward Jones Investments",name:"Edward Jones",office:"financial_advisor"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"office/insurance/Allstate":{name:"Allstate",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/Allstate/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2645636",office:"insurance"},addTags:{brand:"Allstate","brand:wikidata":"Q2645636","brand:wikipedia":"en:Allstate",name:"Allstate",office:"insurance"},countryCodes:["us"],terms:["allstate insurance"],matchScore:2,suggestion:true},"office/insurance/American Family Insurance":{name:"American Family Insurance",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/amfam/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4743730",office:"insurance"},addTags:{brand:"American Family Insurance","brand:wikidata":"Q4743730","brand:wikipedia":"en:American Family Insurance",name:"American Family Insurance",office:"insurance"},countryCodes:["us"],terms:["american family","amfam"],matchScore:2,suggestion:true},"office/insurance/Erie Insurance":{name:"Erie Insurance",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/erieinsurance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5388314",office:"insurance"},addTags:{brand:"Erie Insurance","brand:wikidata":"Q5388314","brand:wikipedia":"en:Erie Insurance Group",name:"Erie Insurance",office:"insurance"},countryCodes:["us"],terms:["erie"],matchScore:2,suggestion:true},"office/insurance/Farmers Insurance":{name:"Farmers Insurance",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/FarmersInsurance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1396863",office:"insurance"},addTags:{brand:"Farmers Insurance","brand:wikidata":"Q1396863","brand:wikipedia":"en:Farmers Insurance Group",name:"Farmers Insurance",office:"insurance"},countryCodes:["us"],terms:["farmers"],matchScore:2,suggestion:true},"office/insurance/GEICO":{name:"GEICO",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/geico/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1498689",office:"insurance"},addTags:{brand:"GEICO","brand:wikidata":"Q1498689","brand:wikipedia":"en:GEICO",name:"GEICO",office:"insurance"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"office/insurance/Grange Insurance":{name:"Grange Insurance",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/GrangeInsuranceMarketing/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17183481",office:"insurance"},addTags:{brand:"Grange Insurance","brand:wikidata":"Q17183481","brand:wikipedia":"en:Grange Insurance",name:"Grange Insurance",office:"insurance"},countryCodes:["us"],terms:["grange"],matchScore:2,suggestion:true},"office/insurance/Nationwide":{name:"Nationwide",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/nationwide/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6979886",office:"insurance"},addTags:{brand:"Nationwide","brand:wikidata":"Q6979886","brand:wikipedia":"en:Nationwide Mutual Insurance Company",name:"Nationwide",office:"insurance"},countryCodes:["us"],terms:["nationwide insurance"],matchScore:2,suggestion:true},"office/insurance/Progressive":{name:"Progressive",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/progressive/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7248721",office:"insurance"},addTags:{brand:"Progressive","brand:wikidata":"Q7248721","brand:wikipedia":"en:Progressive Corporation",name:"Progressive",office:"insurance"},countryCodes:["us"],terms:["progressive insurance"],matchScore:2,suggestion:true},"office/insurance/State Farm":{name:"State Farm",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/statefarm/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2007336",office:"insurance"},addTags:{brand:"State Farm","brand:wikidata":"Q2007336","brand:wikipedia":"en:State Farm",name:"State Farm",office:"insurance"},countryCodes:["us"],terms:["state farm insurance"],matchScore:2,suggestion:true},"office/tax_advisor/H&R Block":{name:"H&R Block",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/hrblock/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5627799",office:"tax_advisor"},addTags:{brand:"H&R Block","brand:wikidata":"Q5627799","brand:wikipedia":"en:H&R Block",name:"H&R Block",office:"tax_advisor"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"office/tax_advisor/Jackson Hewitt":{name:"Jackson Hewitt",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/jacksonhewitt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6117132",office:"tax_advisor"},addTags:{alt_name:"Jackson Hewitt Tax Service",brand:"Jackson Hewitt","brand:wikidata":"Q6117132","brand:wikipedia":"en:Jackson Hewitt",name:"Jackson Hewitt",office:"tax_advisor"},countryCodes:["us"],terms:["jackson hewitt tax service"],matchScore:2,suggestion:true},"office/tax_advisor/Liberty Tax":{name:"Liberty Tax",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/libertytax/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6541978",office:"tax_advisor"},addTags:{alt_name:"Liberty Tax Service",brand:"Liberty Tax","brand:wikidata":"Q6541978","brand:wikipedia":"en:Liberty Tax Service",name:"Liberty Tax",office:"tax_advisor"},countryCodes:["us"],terms:["liberty tax service"],matchScore:2,suggestion:true},"shop/alcohol/Alko":{name:"Alko",icon:"fas-wine-bottle",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAlko.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1849187",shop:"alcohol"},addTags:{brand:"Alko","brand:wikidata":"Q1849187","brand:wikipedia":"en:Alko",name:"Alko",shop:"alcohol"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/BC Liquor Store":{name:"BC Liquor Store",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/1302250656/winesplash-icon_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q43079557",shop:"alcohol"},addTags:{brand:"BC Liquor Store","brand:wikidata":"Q43079557","brand:wikipedia":"en:BC Liquor Stores",name:"BC Liquor Store",shop:"alcohol"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/BWS":{name:"BWS",icon:"fas-wine-bottle",geometry:["point","area"],tags:{"brand:wikidata":"Q4836848",shop:"alcohol"},addTags:{brand:"BWS","brand:wikidata":"Q4836848","brand:wikipedia":"en:BWS (liquor retailer)",name:"BWS",shop:"alcohol"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Bargain Booze":{name:"Bargain Booze",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/998956835796205568/21tNi907_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q16971315",shop:"alcohol"},addTags:{brand:"Bargain Booze","brand:wikidata":"Q16971315","brand:wikipedia":"en:Bargain Booze",name:"Bargain Booze",shop:"alcohol"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/BevMo!":{name:"BevMo!",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/1128010188038893568/TCOuuRrD_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q4899308",shop:"alcohol"},addTags:{brand:"BevMo!","brand:wikidata":"Q4899308","brand:wikipedia":"en:BevMo!",name:"BevMo!",shop:"alcohol"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Dan Murphy's":{name:"Dan Murphy's",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/465419847128473601/ybOMjW8-_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q5214075",shop:"alcohol"},addTags:{brand:"Dan Murphy's","brand:wikidata":"Q5214075","brand:wikipedia":"en:Dan Murphy's",name:"Dan Murphy's",shop:"alcohol"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Gall & Gall":{name:"Gall & Gall",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/652468758515068928/dzFqRsLG_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q13639185",shop:"alcohol"},addTags:{brand:"Gall & Gall","brand:wikidata":"Q13639185","brand:wikipedia":"nl:Gall & Gall",name:"Gall & Gall",shop:"alcohol"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/LCBO":{name:"LCBO",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/481885343986102272/mGMV-t--_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q845263",shop:"alcohol"},addTags:{brand:"LCBO","brand:wikidata":"Q845263","brand:wikipedia":"en:Liquor Control Board of Ontario",name:"LCBO",shop:"alcohol"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Liquorland":{name:"Liquorland",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/378800000468322180/92219ed513322ff2f4d6d416dc477704_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q2283837",shop:"alcohol"},addTags:{brand:"Liquorland","brand:wikidata":"Q2283837","brand:wikipedia":"en:Liquorland",name:"Liquorland",operator:"Coles Group","operator:wikidata":"Q1339055","operator:wikipedia":"en:Coles Group",shop:"alcohol"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Nicolas":{name:"Nicolas",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/842779196082573314/AtkEMQlh_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3340012",shop:"alcohol"},addTags:{brand:"Nicolas","brand:wikidata":"Q3340012","brand:wikipedia":"en:Nicolas (wine retailer)",name:"Nicolas",shop:"alcohol"},countryCodes:["be","de","fr","gb","pl"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/SAQ":{name:"SAQ",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/1064657571133308928/zhzEYvxp_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3488077",shop:"alcohol"},addTags:{brand:"SAQ","brand:wikidata":"Q3488077","brand:wikipedia":"en:Société des alcools du Québec",name:"SAQ",shop:"alcohol"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Spec's":{name:"Spec's",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/1130938873150922752/iWHfbRSk_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q7574415",shop:"alcohol"},addTags:{brand:"Spec's","brand:wikidata":"Q7574415","brand:wikipedia":"en:Spec's Wine, Spirits & Finer Foods",name:"Spec's",shop:"alcohol"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Systembolaget":{name:"Systembolaget",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/456046476032872449/mg3NXDpc_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q1476113",shop:"alcohol"},addTags:{brand:"Systembolaget","brand:wikidata":"Q1476113","brand:wikipedia":"en:Systembolaget",name:"Systembolaget",shop:"alcohol"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/The Beer Store":{name:"The Beer Store",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/1112700310441676800/Gyk3rZl6_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q16243674",shop:"alcohol"},addTags:{brand:"The Beer Store","brand:wikidata":"Q16243674","brand:wikipedia":"en:The Beer Store",name:"The Beer Store",shop:"alcohol"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Total Wine":{name:"Total Wine",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/3095579292/69f5115c869a3b0f73bfb7ad25ba2a37_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q7828084",shop:"alcohol"},addTags:{brand:"Total Wine","brand:wikidata":"Q7828084","brand:wikipedia":"en:Total Wine & More",name:"Total Wine",shop:"alcohol"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Virginia ABC":{name:"Virginia ABC",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/981178074137055233/nSvQCkEL_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7934236",shop:"alcohol"},addTags:{brand:"Virginia ABC","brand:wikidata":"Q7934236","brand:wikipedia":"en:Virginia Alcoholic Beverage Control Authority",name:"Virginia ABC",shop:"alcohol"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Бристоль":{name:"Бристоль",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/1106166467274440704/iwQRyG3O_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q59155583",shop:"alcohol"},addTags:{brand:"Бристоль","brand:wikidata":"Q59155583","brand:wikipedia":"ru:Бристоль (сеть магазинов)",name:"Бристоль",shop:"alcohol"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Красное & Белое":{name:"Красное & Белое",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/1116601617699102720/CVI31i0C_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q24933790",shop:"alcohol"},addTags:{brand:"Красное & Белое","brand:en":"Red&White","brand:wikidata":"Q24933790","brand:wikipedia":"en:Krasnoe & Beloe",name:"Красное & Белое","name:en":"Red&White",shop:"alcohol"},countryCodes:["ru"],terms:["красное и белое"],matchScore:2,suggestion:true},"shop/baby_goods/Aubert":{name:"Aubert",icon:"fas-baby-carriage",imageURL:"https://graph.facebook.com/Aubert/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62964657",shop:"baby_goods"},addTags:{brand:"Aubert","brand:wikidata":"Q62964657",name:"Aubert",shop:"baby_goods"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/baby_goods/Babies R Us":{name:"Babies R Us",icon:"fas-baby-carriage",imageURL:"https://graph.facebook.com/babiesrus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17232036",shop:"baby_goods"},addTags:{brand:"Babies R Us","brand:wikidata":"Q17232036",name:"Babies R Us",shop:"baby_goods"},terms:[],matchScore:2,suggestion:true},"shop/baby_goods/BabyOne":{name:"BabyOne",icon:"fas-baby-carriage",imageURL:"https://graph.facebook.com/BabyOne/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57540408",shop:"baby_goods"},addTags:{brand:"BabyOne","brand:wikidata":"Q57540408",name:"BabyOne",shop:"baby_goods"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/baby_goods/Buy Buy Baby":{name:"Buy Buy Baby",icon:"fas-baby-carriage",imageURL:"https://graph.facebook.com/buybuyBABY/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5003352",shop:"baby_goods"},addTags:{brand:"Buy Buy Baby","brand:wikidata":"Q5003352","brand:wikipedia":"en:Buy Buy Baby",name:"Buy Buy Baby",shop:"baby_goods"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/baby_goods/Mothercare":{name:"Mothercare",icon:"fas-baby-carriage",imageURL:"https://graph.facebook.com/mothercareuk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q136738",shop:"baby_goods"},addTags:{brand:"Mothercare","brand:wikidata":"Q136738","brand:wikipedia":"en:Mothercare",name:"Mothercare",shop:"baby_goods"},terms:[],matchScore:2,suggestion:true},"shop/baby_goods/西松屋":{name:"西松屋",icon:"fas-baby-carriage",geometry:["point","area"],tags:{"brand:wikidata":"Q11628761",shop:"baby_goods"},addTags:{brand:"西松屋","brand:en":"Nishimatsuya Chain","brand:ja":"西松屋","brand:wikidata":"Q11628761","brand:wikipedia":"ja:西松屋",name:"西松屋","name:en":"Nishimatsuya Chain","name:ja":"西松屋",shop:"baby_goods"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/bag/Carpisa":{name:"Carpisa",icon:"fas-suitcase-rolling",imageURL:"https://graph.facebook.com/CarpisaOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28035409",shop:"bag"},addTags:{brand:"Carpisa","brand:wikidata":"Q28035409","brand:wikipedia":"en:Carpisa",name:"Carpisa",shop:"bag"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/bag/Coach":{name:"Coach",icon:"fas-suitcase-rolling",imageURL:"https://graph.facebook.com/coach/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q727697",shop:"bag"},addTags:{brand:"Coach","brand:wikidata":"Q727697","brand:wikipedia":"en:Coach New York",name:"Coach",shop:"bag"},countryCodes:["ca","us"],terms:["coach new york","coach ny"],matchScore:2,suggestion:true},"shop/bag/Kipling":{name:"Kipling",icon:"fas-suitcase-rolling",imageURL:"https://graph.facebook.com/KiplingU.S.A/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6414641",shop:"bag"},addTags:{brand:"Kipling","brand:wikidata":"Q6414641","brand:wikipedia":"en:Kipling (brand)",name:"Kipling",shop:"bag"},terms:[],matchScore:2,suggestion:true},"shop/bag/Samsonite":{name:"Samsonite",icon:"fas-suitcase-rolling",imageURL:"https://graph.facebook.com/Samsonite/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1203426",shop:"bag"},addTags:{brand:"Samsonite","brand:wikidata":"Q1203426","brand:wikipedia":"en:Samsonite",name:"Samsonite",shop:"bag"},terms:[],matchScore:2,suggestion:true},"shop/bag/Tumi":{name:"Tumi",icon:"fas-suitcase-rolling",imageURL:"https://graph.facebook.com/TumiTravel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4465402",shop:"bag"},addTags:{brand:"Tumi","brand:wikidata":"Q4465402","brand:wikipedia":"en:Tumi Inc.",name:"Tumi",shop:"bag"},terms:[],matchScore:2,suggestion:true},"shop/bag/Vera Bradley":{name:"Vera Bradley",icon:"fas-suitcase-rolling",imageURL:"https://graph.facebook.com/VeraBradley/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7920749",shop:"bag"},addTags:{brand:"Vera Bradley","brand:wikidata":"Q7920749","brand:wikipedia":"en:Vera Bradley",name:"Vera Bradley",shop:"bag"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Anker":{name:"Anker",icon:"maki-bakery",geometry:["point","area"],tags:{"brand:wikidata":"Q557116",shop:"bakery"},addTags:{brand:"Anker","brand:wikidata":"Q557116","brand:wikipedia":"de:Ankerbrot",name:"Anker",shop:"bakery"},countryCodes:["at","sk"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Awiteks":{name:"Awiteks",icon:"maki-bakery",geometry:["point","area"],tags:{"brand:wikidata":"Q62054190",shop:"bakery"},addTags:{brand:"Awiteks","brand:wikidata":"Q62054190",name:"Awiteks",shop:"bakery"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Backwerk":{name:"Backwerk",icon:"maki-bakery",imageURL:"https://graph.facebook.com/155997891116938/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q798298",shop:"bakery"},addTags:{brand:"BackWerk","brand:wikidata":"Q798298","brand:wikipedia":"de:BackWerk",name:"Backwerk",shop:"bakery"},countryCodes:["at","ch","de","gb","nl"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Bakers Delight":{name:"Bakers Delight",icon:"maki-bakery",geometry:["point","area"],tags:{"brand:wikidata":"Q4849261",shop:"bakery"},addTags:{brand:"Bakers Delight","brand:wikidata":"Q4849261","brand:wikipedia":"en:Bakers Delight",name:"Bakers Delight",shop:"bakery"},countryCodes:["au","ca","nz","us"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Bakker Bart":{name:"Bakker Bart",icon:"maki-bakery",geometry:["point","area"],tags:{"brand:wikidata":"Q2177445",shop:"bakery"},addTags:{brand:"Bakker Bart","brand:wikidata":"Q2177445","brand:wikipedia":"nl:Bakker Bart",name:"Bakker Bart",shop:"bakery"},countryCodes:["be","nl"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Banette":{name:"Banette",icon:"maki-bakery",geometry:["point","area"],tags:{"brand:wikidata":"Q2882405",shop:"bakery"},addTags:{brand:"Banette","brand:wikidata":"Q2882405","brand:wikipedia":"fr:Banette (entreprise)",name:"Banette",shop:"bakery"},terms:[],matchScore:2,suggestion:true},"shop/bakery/Birds":{name:"Birds",icon:"maki-bakery",imageURL:"https://pbs.twimg.com/profile_images/590867289953738753/OftDrPao_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q63001935",shop:"bakery"},addTags:{brand:"Birds","brand:wikidata":"Q63001935","brand:wikipedia":"en:Birds Bakery",name:"Birds",official_name:"Birds Bakery",shop:"bakery"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Bäckerei Fuchs":{name:"Bäckerei Fuchs",icon:"maki-bakery",geometry:["point","area"],tags:{"brand:wikidata":"Q42825993",shop:"bakery"},addTags:{brand:"Bäckerei Fuchs","brand:wikidata":"Q42825993","brand:wikipedia":"de:Harald Fuchs Bäckerei – Konditorei",name:"Bäckerei Fuchs",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Cadera":{name:"Cadera",icon:"maki-bakery",imageURL:"https://graph.facebook.com/Cadera1853/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62086410",shop:"bakery"},addTags:{brand:"Cadera","brand:wikidata":"Q62086410",name:"Cadera",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Cooplands":{name:"Cooplands",icon:"maki-bakery",geometry:["point","area"],tags:{"brand:wikidata":"Q5167971",shop:"bakery"},addTags:{brand:"Cooplands","brand:wikidata":"Q5167971","brand:wikipedia":"en:Cooplands",name:"Cooplands",shop:"bakery"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Dat Backhus":{name:"Dat Backhus",icon:"maki-bakery",imageURL:"https://graph.facebook.com/datbackhus.hamburg/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62093175",shop:"bakery"},addTags:{brand:"Dat Backhus","brand:wikidata":"Q62093175",name:"Dat Backhus",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Der Beck":{name:"Der Beck",icon:"maki-bakery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FDer%20Beck.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1192443",shop:"bakery"},addTags:{brand:"Der Beck","brand:wikidata":"Q1192443","brand:wikipedia":"en:Der Beck",name:"Der Beck",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Ditsch":{name:"Ditsch",icon:"maki-bakery",imageURL:"https://graph.facebook.com/ditsch/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q911573",shop:"bakery"},addTags:{brand:"Ditsch","brand:wikidata":"Q911573","brand:wikipedia":"en:Ditsch",name:"Ditsch",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Fornetti":{name:"Fornetti",icon:"maki-bakery",geometry:["point","area"],tags:{"brand:wikidata":"Q1003020",shop:"bakery"},addTags:{brand:"Fornetti","brand:wikidata":"Q1003020","brand:wikipedia":"en:Fornetti",name:"Fornetti",shop:"bakery"},terms:[],matchScore:2,suggestion:true},"shop/bakery/Goldilocks":{name:"Goldilocks",icon:"maki-bakery",geometry:["point","area"],tags:{"brand:wikidata":"Q5580198",shop:"bakery"},addTags:{brand:"Goldilocks","brand:wikidata":"Q5580198","brand:wikipedia":"en:Goldilocks Bakeshop",name:"Goldilocks",shop:"bakery"},countryCodes:["ca","ph","th","us"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Greggs":{name:"Greggs",icon:"maki-bakery",imageURL:"https://pbs.twimg.com/profile_images/1001837345728016385/86hcMlm8_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3403981",shop:"bakery"},addTags:{brand:"Greggs","brand:wikidata":"Q3403981","brand:wikipedia":"en:Greggs",name:"Greggs",shop:"bakery"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Hofpfisterei":{name:"Hofpfisterei",icon:"maki-bakery",imageURL:"https://graph.facebook.com/hofpfisterei/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1623217",shop:"bakery"},addTags:{brand:"Hofpfisterei","brand:wikidata":"Q1623217","brand:wikipedia":"en:Hofpfisterei",name:"Hofpfisterei",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Ihle":{name:"Ihle",icon:"maki-bakery",geometry:["point","area"],tags:{"brand:wikidata":"Q1626371",shop:"bakery"},addTags:{brand:"Ihle","brand:wikidata":"Q1626371","brand:wikipedia":"de:Landbäckerei Ihle",name:"Ihle",shop:"bakery"},countryCodes:["de"],terms:["landbäckerei ihle"],matchScore:2,suggestion:true},"shop/bakery/K&U Bäckerei":{name:"K&U Bäckerei",icon:"maki-bakery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FKuU-Logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1719433",shop:"bakery"},addTags:{brand:"K&U Bäckerei","brand:wikidata":"Q1719433","brand:wikipedia":"de:K & U Bäckerei",name:"K&U Bäckerei",shop:"bakery"},countryCodes:["de"],terms:["k&u"],matchScore:2,suggestion:true},"shop/bakery/Kamps":{name:"Kamps",icon:"maki-bakery",imageURL:"https://graph.facebook.com/417008548362119/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1723381",shop:"bakery"},addTags:{brand:"Kamps","brand:wikidata":"Q1723381","brand:wikipedia":"de:Kamps (Unternehmen)",name:"Kamps",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/La Mie Câline":{name:"La Mie Câline",icon:"maki-bakery",geometry:["point","area"],tags:{"brand:wikidata":"Q3210704",shop:"bakery"},addTags:{brand:"La Mie Câline","brand:wikidata":"Q3210704","brand:wikipedia":"fr:La Mie câline",name:"La Mie Câline",shop:"bakery"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Le Crobag":{name:"Le Crobag",icon:"maki-bakery",geometry:["point","area"],tags:{"brand:wikidata":"Q1558025",shop:"bakery"},addTags:{brand:"Le Crobag","brand:wikidata":"Q1558025","brand:wikipedia":"de:Le Crobag",name:"Le Crobag",shop:"bakery"},countryCodes:["at","de","pl","ru"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Lila Bäcker":{name:"Lila Bäcker",icon:"maki-bakery",imageURL:"https://pbs.twimg.com/profile_images/1145260042/logo_up_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q57516591",shop:"bakery"},addTags:{brand:"Lila Bäcker","brand:wikidata":"Q57516591",name:"Lila Bäcker",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Löwenbäcker Schaper":{name:"Löwenbäcker Schaper",icon:"maki-bakery",imageURL:"https://graph.facebook.com/LoewenbaeckerSchaper/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62075965",shop:"bakery"},addTags:{brand:"Löwenbäcker Schaper","brand:wikidata":"Q62075965",name:"Löwenbäcker Schaper",shop:"bakery"},countryCodes:["de"],terms:["schaper"],matchScore:2,suggestion:true},"shop/bakery/Marie Blachère":{name:"Marie Blachère",icon:"maki-bakery",imageURL:"https://graph.facebook.com/marieblachereusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62082410",shop:"bakery"},addTags:{brand:"Marie Blachère","brand:wikidata":"Q62082410",name:"Marie Blachère",shop:"bakery"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Mlinar":{name:"Mlinar",icon:"maki-bakery",imageURL:"https://graph.facebook.com/MlinarHrvatska/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62082464",shop:"bakery"},addTags:{brand:"Mlinar","brand:wikidata":"Q62082464",name:"Mlinar",shop:"bakery"},countryCodes:["ba","hr","sl"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Musmanni":{name:"Musmanni",icon:"maki-bakery",geometry:["point","area"],tags:{"brand:wikidata":"Q19382082",shop:"bakery"},addTags:{brand:"Musmanni","brand:wikidata":"Q19382082","brand:wikipedia":"no:Musmanni",name:"Musmanni",shop:"bakery"},countryCodes:["cr"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Nothing Bundt Cakes":{name:"Nothing Bundt Cakes",icon:"maki-bakery",imageURL:"https://graph.facebook.com/nothingbundtcakes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62082526",shop:"bakery"},addTags:{brand:"Nothing Bundt Cakes","brand:wikidata":"Q62082526",name:"Nothing Bundt Cakes",shop:"bakery"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Paul":{name:"Paul",icon:"maki-bakery",imageURL:"https://pbs.twimg.com/profile_images/1104154254699364353/69J1OrZ1_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q3370417",shop:"bakery"},addTags:{brand:"Paul","brand:wikidata":"Q3370417","brand:wikipedia":"en:Paul (bakery)",name:"Paul",shop:"bakery"},terms:[],matchScore:2,suggestion:true},"shop/bakery/Red Ribbon":{name:"Red Ribbon",icon:"maki-bakery",geometry:["point","area"],tags:{"brand:wikidata":"Q7304789",shop:"bakery"},addTags:{brand:"Red Ribbon","brand:wikidata":"Q7304789","brand:wikipedia":"en:Red Ribbon Bakeshop",name:"Red Ribbon",shop:"bakery"},countryCodes:["ph","us"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Ronde des Pains":{name:"Ronde des Pains",icon:"maki-bakery",geometry:["point","area"],tags:{"brand:wikidata":"Q3441707",shop:"bakery"},addTags:{brand:"Ronde des Pains","brand:wikidata":"Q3441707","brand:wikipedia":"fr:Ronde des Pains",name:"Ronde des Pains",shop:"bakery"},countryCodes:["be","fr"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Schäfer's":{name:"Schäfer's",icon:"maki-bakery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSch%C3%A4fers%20Brot%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1464562",shop:"bakery"},addTags:{brand:"Schäfer's","brand:wikidata":"Q1464562","brand:wikipedia":"de:Schäfers Brot",name:"Schäfer's",shop:"bakery"},countryCodes:["de"],terms:["schäfer"],matchScore:2,suggestion:true},"shop/bakery/Sehne":{name:"Sehne",icon:"maki-bakery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSehne%20Backwaren%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1314761",shop:"bakery"},addTags:{brand:"Sehne","brand:wikidata":"Q1314761","brand:wikipedia":"de:Sehne Backwaren",name:"Sehne",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Steinecke":{name:"Steinecke",icon:"maki-bakery",imageURL:"https://graph.facebook.com/brotmeisterei.steinecke/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57516278",shop:"bakery"},addTags:{brand:"Steinecke","brand:wikidata":"Q57516278","brand:wikipedia":"de:Meisterbäckerei Steinecke",name:"Steinecke",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Sternenbäck":{name:"Sternenbäck",icon:"maki-bakery",imageURL:"https://graph.facebook.com/sternenbaeck/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62595021",shop:"bakery"},addTags:{brand:"Sternenbäck","brand:wikidata":"Q62595021",name:"Sternenbäck",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Ströck":{name:"Ströck",icon:"maki-bakery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%204C.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2357607",shop:"bakery"},addTags:{brand:"Ströck","brand:wikidata":"Q2357607","brand:wikipedia":"de:Ströck-Brot",name:"Ströck",shop:"bakery"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Wiener Feinbäcker":{name:"Wiener Feinbäcker",icon:"maki-bakery",geometry:["point","area"],tags:{"brand:wikidata":"Q15854357",shop:"bakery"},addTags:{brand:"Wiener Feinbäcker","brand:wikidata":"Q15854357","brand:wikipedia":"de:Wiener Feinbäckerei Heberer",name:"Wiener Feinbäcker",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/von Allwörden":{name:"von Allwörden",icon:"maki-bakery",imageURL:"https://graph.facebook.com/allwoerden/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60411349",shop:"bakery"},addTags:{brand:"von Allwörden","brand:wikidata":"Q60411349","brand:wikipedia":"nds:Heinrich von Allwörden GmbH",name:"von Allwörden",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/뚜레쥬르":{name:"뚜레쥬르",icon:"maki-bakery",imageURL:"https://graph.facebook.com/TousLesJoursUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3535609",shop:"bakery"},addTags:{brand:"뚜레쥬르","brand:en":"Tous Les Jours","brand:ko":"뚜레쥬르","brand:wikidata":"Q3535609","brand:wikipedia":"ko:뚜레쥬르",name:"뚜레쥬르","name:en":"Tous Les Jours","name:ko":"뚜레쥬르",shop:"bakery"},countryCodes:["kr"],terms:["뚜레주르"],matchScore:2,suggestion:true},"shop/beauty/Bath & Body Works":{name:"Bath & Body Works",icon:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/1077920705352777733/OtRwUUoo_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q810773",shop:"beauty"},addTags:{brand:"Bath & Body Works","brand:wikidata":"Q810773","brand:wikipedia":"en:Bath & Body Works",name:"Bath & Body Works",shop:"beauty"},terms:[],matchScore:2,suggestion:true},"shop/beauty/European Wax Center":{name:"European Wax Center",icon:"maki-shop",geometry:["point","area"],tags:{"brand:wikidata":"Q5413426",shop:"beauty"},addTags:{beauty:"waxing",brand:"European Wax Center","brand:wikidata":"Q5413426","brand:wikipedia":"en:European Wax Center",name:"European Wax Center",shop:"beauty"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/beauty/Indigo Sun":{name:"Indigo Sun",icon:"maki-shop",imageURL:"https://graph.facebook.com/indigosunretail/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63436906",shop:"beauty"},addTags:{beauty:"tanning",brand:"Indigo Sun","brand:wikidata":"Q63436906",name:"Indigo Sun",shop:"beauty"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/beauty/Ulta Beauty":{name:"Ulta Beauty",icon:"maki-shop",imageURL:"https://graph.facebook.com/UltaBeauty/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7880076",shop:"beauty"},addTags:{brand:"Ulta Beauty","brand:wikidata":"Q7880076","brand:wikipedia":"en:Ulta Beauty",name:"Ulta Beauty",shop:"beauty"},countryCodes:["us"],terms:["ulta"],matchScore:2,suggestion:true},"shop/beauty/Yves Rocher":{name:"Yves Rocher",icon:"maki-shop",imageURL:"https://graph.facebook.com/YvesRocherUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28496595",shop:"beauty"},addTags:{brand:"Yves Rocher","brand:wikidata":"Q28496595","brand:wikipedia":"en:Yves Rocher (company)",name:"Yves Rocher",shop:"beauty"},terms:[],matchScore:2,suggestion:true},"shop/bed/Dreams":{name:"Dreams",icon:"maki-lodging",imageURL:"https://graph.facebook.com/dreamsbeds/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5306688",shop:"bed"},addTags:{brand:"Dreams","brand:wikidata":"Q5306688","brand:wikipedia":"en:Dreams (bed retailer)",name:"Dreams",shop:"bed"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/bed/Matratzen Concord":{name:"Matratzen Concord",icon:"maki-lodging",imageURL:"https://graph.facebook.com/MatratzenConcord/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18629057",shop:"bed"},addTags:{brand:"Matratzen Concord","brand:wikidata":"Q18629057","brand:wikipedia":"de:Matratzen Concord",name:"Matratzen Concord",shop:"bed"},countryCodes:["at","ch","de"],terms:[],matchScore:2,suggestion:true},"shop/bed/Mattress Firm":{name:"Mattress Firm",icon:"maki-lodging",imageURL:"https://graph.facebook.com/MattressFirm/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6791878",shop:"bed"},addTags:{brand:"Mattress Firm","brand:wikidata":"Q6791878","brand:wikipedia":"en:Mattress Firm",name:"Mattress Firm",shop:"bed"},countryCodes:["us"],terms:["sleepys"],matchScore:2,suggestion:true},"shop/bed/Mattress Warehouse":{name:"Mattress Warehouse",icon:"maki-lodging",imageURL:"https://graph.facebook.com/mattresswhse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61995079",shop:"bed"},addTags:{brand:"Mattress Warehouse","brand:wikidata":"Q61995079",name:"Mattress Warehouse",shop:"bed"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/bed/Sleep Country":{name:"Sleep Country",icon:"maki-lodging",imageURL:"https://graph.facebook.com/SleepCountryCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7539684",shop:"bed"},addTags:{brand:"Sleep Country","brand:wikidata":"Q7539684","brand:wikipedia":"en:Sleep Country Canada",name:"Sleep Country",shop:"bed"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/bed/Sleep Number":{name:"Sleep Number",icon:"maki-lodging",imageURL:"https://graph.facebook.com/SleepNumber/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7447640",shop:"bed"},addTags:{brand:"Sleep Number","brand:wikidata":"Q7447640","brand:wikipedia":"en:Sleep Number",name:"Sleep Number",shop:"bed"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/beverages/Dursty":{name:"Dursty",icon:"maki-shop",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FDursty%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1267518",shop:"beverages"},addTags:{brand:"Dursty","brand:wikidata":"Q1267518","brand:wikipedia":"de:Dursty Getränkemärkte",name:"Dursty",shop:"beverages"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/beverages/Edeka Getränkemarkt":{name:"Edeka Getränkemarkt",icon:"maki-shop",geometry:["point","area"],tags:{"brand:wikidata":"Q57450576",shop:"beverages"},addTags:{brand:"Edeka Getränkemarkt","brand:wikidata":"Q57450576",name:"Edeka Getränkemarkt",shop:"beverages"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/beverages/Fristo":{name:"Fristo",icon:"maki-shop",geometry:["point","area"],tags:{"brand:wikidata":"Q1465151",shop:"beverages"},addTags:{brand:"Fristo","brand:wikidata":"Q1465151","brand:wikipedia":"de:Fristo",name:"Fristo",shop:"beverages"},countryCodes:["at","de"],terms:["fristo getränkemarkt"],matchScore:2,suggestion:true},"shop/beverages/Getränke Hoffmann":{name:"Getränke Hoffmann",icon:"maki-shop",imageURL:"https://graph.facebook.com/getraenkehoffmann/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19284021",shop:"beverages"},addTags:{brand:"Getränke Hoffmann","brand:wikidata":"Q19284021","brand:wikipedia":"de:Getränke Hoffmann",name:"Getränke Hoffmann",shop:"beverages"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/beverages/Getränkeland":{name:"Getränkeland",icon:"maki-shop",imageURL:"https://graph.facebook.com/Getraenkeland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62594849",shop:"beverages"},addTags:{brand:"Getränkeland","brand:wikidata":"Q62594849",name:"Getränkeland",shop:"beverages"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/beverages/Hol'ab":{name:"Hol'ab",icon:"maki-shop",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20hol%20ab.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q57557270",shop:"beverages"},addTags:{brand:"Hol'ab","brand:wikidata":"Q57557270",name:"Hol'ab",shop:"beverages"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/beverages/Orterer Getränkemarkt":{name:"Orterer Getränkemarkt",icon:"maki-shop",geometry:["point","area"],tags:{"brand:wikidata":"Q23787118",shop:"beverages"},addTags:{brand:"Orterer Getränkemarkt","brand:wikidata":"Q23787118","brand:wikipedia":"de:Orterer Gruppe",name:"Orterer Getränkemarkt",shop:"beverages"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/beverages/Rewe Getränkemarkt":{name:"Rewe Getränkemarkt",icon:"maki-shop",geometry:["point","area"],tags:{"brand:wikidata":"Q57519344",shop:"beverages"},addTags:{brand:"Rewe Getränkemarkt","brand:wikidata":"Q57519344",name:"Rewe Getränkemarkt",shop:"beverages"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/beverages/Trinkgut":{name:"Trinkgut",icon:"maki-shop",imageURL:"https://graph.facebook.com/trinkgut/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2453627",shop:"beverages"},addTags:{brand:"Trinkgut","brand:wikidata":"Q2453627","brand:wikipedia":"de:Trinkgut",name:"Trinkgut",shop:"beverages"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/beverages/清心福全":{name:"清心福全",icon:"maki-shop",imageURL:"https://graph.facebook.com/chingshin1987/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10391229",shop:"beverages"},addTags:{brand:"清心福全","brand:wikidata":"Q10391229","brand:wikipedia":"zh:清心福全冷飲站",name:"清心福全",shop:"beverages"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/bicycle/Evans Cycles":{name:"Evans Cycles",icon:"maki-bicycle",imageURL:"https://graph.facebook.com/evanscycles/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5415901",shop:"bicycle"},addTags:{brand:"Evans Cycles","brand:wikidata":"Q5415901","brand:wikipedia":"en:Evans Cycles",name:"Evans Cycles",shop:"bicycle"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/bicycle/Fri BikeShop":{name:"Fri BikeShop",icon:"maki-bicycle",imageURL:"https://graph.facebook.com/Cykelbutikken/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q26721030",shop:"bicycle"},addTags:{brand:"Fri BikeShop","brand:wikidata":"Q26721030",name:"Fri BikeShop",shop:"bicycle"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"shop/bicycle/Giant":{name:"Giant",icon:"maki-bicycle",imageURL:"https://graph.facebook.com/giantbicycles/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q703557",shop:"bicycle"},addTags:{brand:"Giant","brand:wikidata":"Q703557","brand:wikipedia":"en:Giant Bicycles",name:"Giant",shop:"bicycle"},terms:[],matchScore:2,suggestion:true},"shop/bicycle/サイクルベースあさひ":{name:"サイクルベースあさひ",icon:"maki-bicycle",imageURL:"https://graph.facebook.com/cbasahi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11257202",shop:"bicycle"},addTags:{brand:"サイクルベースあさひ","brand:en":"Cycle Base Asahi","brand:ja":"サイクルベースあさひ","brand:wikidata":"Q11257202","brand:wikipedia":"ja:あさひ (企業)",name:"サイクルベースあさひ","name:en":"Cycle Base Asahi","name:ja":"サイクルベースあさひ",shop:"bicycle"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/bookmaker/Betfred":{name:"Betfred",icon:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/1034363254758359041/dxetDfNN_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4897425",shop:"bookmaker"},addTags:{brand:"Betfred","brand:wikidata":"Q4897425","brand:wikipedia":"en:Betfred",name:"Betfred",shop:"bookmaker"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/bookmaker/Coral":{name:"Coral",icon:"maki-shop",geometry:["point","area"],tags:{"brand:wikidata":"Q54621344",shop:"bookmaker"},addTags:{brand:"Coral","brand:wikidata":"Q54621344","brand:wikipedia":"en:Coral (bookmaker)",name:"Coral",shop:"bookmaker"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/bookmaker/Fortuna":{name:"Fortuna",icon:"maki-shop",geometry:["point","area"],tags:{"brand:wikidata":"Q25857973",shop:"bookmaker"},addTags:{brand:"Fortuna","brand:wikidata":"Q25857973","brand:wikipedia":"en:Fortuna Entertainment Group",name:"Fortuna",shop:"bookmaker"},countryCodes:["cz","hr","pl","ro","sk"],terms:[],matchScore:2,suggestion:true},"shop/bookmaker/Ladbrokes":{name:"Ladbrokes",icon:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/1037325155310161921/6E9Rvy3Y_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1799875",shop:"bookmaker"},addTags:{brand:"Ladbrokes","brand:wikidata":"Q1799875","brand:wikipedia":"en:Ladbrokes Coral",name:"Ladbrokes",shop:"bookmaker"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/bookmaker/Paddy Power":{name:"Paddy Power",icon:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/964533060942299136/XCPfJNxf_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3888718",shop:"bookmaker"},addTags:{brand:"Paddy Power","brand:wikidata":"Q3888718","brand:wikipedia":"en:Paddy Power",name:"Paddy Power",shop:"bookmaker"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/bookmaker/Tipico":{name:"Tipico",icon:"maki-shop",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FTipico%20Unternehmenslogo.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q15851003",shop:"bookmaker"},addTags:{brand:"Tipico","brand:wikidata":"Q15851003","brand:wikipedia":"en:Tipico",name:"Tipico",shop:"bookmaker"},countryCodes:["at","co","de","gi","hr","mt"],terms:[],matchScore:2,suggestion:true},"shop/bookmaker/William Hill":{name:"William Hill",icon:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/797028677733253120/bW9oFXT-_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4053147",shop:"bookmaker"},addTags:{brand:"William Hill","brand:wikidata":"Q4053147","brand:wikipedia":"en:William Hill (bookmaker)",name:"William Hill",shop:"bookmaker"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/bookmaker/ΟΠΑΠ":{name:"ΟΠΑΠ",icon:"maki-shop",geometry:["point","area"],tags:{"brand:wikidata":"Q2007823",shop:"bookmaker"},addTags:{brand:"ΟΠΑΠ","brand:el":"ΟΠΑΠ","brand:en":"OPAP","brand:wikidata":"Q2007823","brand:wikipedia":"en:OPAP",name:"ΟΠΑΠ","name:el":"ΟΠΑΠ","name:en":"OPAP",shop:"bookmaker"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"shop/bookmaker/Лига ставок":{name:"Лига ставок",icon:"maki-shop",geometry:["point","area"],tags:{"brand:wikidata":"Q6545804",shop:"bookmaker"},addTags:{brand:"Лига ставок","brand:en":"Liga Stavok","brand:ru":"Лига ставок","brand:wikidata":"Q6545804","brand:wikipedia":"ru:Лига Ставок",name:"Лига ставок","name:en":"Liga Stavok","name:ru":"Лига ставок",shop:"bookmaker"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/bookmaker/Фонбет":{name:"Фонбет",icon:"maki-shop",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FFonbet%20logo.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q49137910",shop:"bookmaker"},addTags:{brand:"Фонбет","brand:en":"Fonbet","brand:ru":"Фонбет","brand:wikidata":"Q49137910","brand:wikipedia":"ru:Фонбет",name:"Фонбет","name:en":"Fonbet","name:ru":"Фонбет",shop:"bookmaker"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/books/Akademibokhandeln":{name:"Akademibokhandeln",icon:"fas-book",imageURL:"https://graph.facebook.com/Akademibokhandeln/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10403918",shop:"books"},addTags:{brand:"Akademibokhandeln","brand:wikidata":"Q10403918","brand:wikipedia":"sv:Akademibokhandeln",name:"Akademibokhandeln",shop:"books"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/books/Barnes & Noble":{name:"Barnes & Noble",icon:"fas-book",imageURL:"https://graph.facebook.com/barnesandnoble/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q795454",shop:"books"},addTags:{brand:"Barnes & Noble","brand:wikidata":"Q795454","brand:wikipedia":"en:Barnes & Noble",name:"Barnes & Noble",shop:"books"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/books/Books-A-Million":{name:"Books-A-Million",icon:"fas-book",geometry:["point","area"],tags:{"brand:wikidata":"Q4943266",shop:"books"},addTags:{brand:"Books-A-Million","brand:wikidata":"Q4943266","brand:wikipedia":"en:Books-A-Million",name:"Books-A-Million",shop:"books"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/books/Bruna":{name:"Bruna",icon:"fas-book",imageURL:"https://graph.facebook.com/Brunawinkels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3317555",shop:"books"},addTags:{brand:"Bruna","brand:wikidata":"Q3317555","brand:wikipedia":"en:Bruna (company)",name:"Bruna",shop:"books"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/books/Chapters":{name:"Chapters",icon:"fas-book",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FChapters%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5073540",shop:"books"},addTags:{brand:"Chapters","brand:wikidata":"Q5073540","brand:wikipedia":"en:Chapters (bookstore)",name:"Chapters",shop:"books"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/books/Cultura":{name:"Cultura",icon:"fas-book",imageURL:"https://graph.facebook.com/culturafr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3007154",shop:"books"},addTags:{brand:"Cultura","brand:wikidata":"Q3007154","brand:wikipedia":"fr:Cultura",name:"Cultura",shop:"books"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/books/Empik":{name:"Empik",icon:"fas-book",imageURL:"https://graph.facebook.com/empikcom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3045978",shop:"books"},addTags:{brand:"Empik","brand:wikidata":"Q3045978","brand:wikipedia":"pl:Empik",name:"Empik",shop:"books"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/books/Fnac":{name:"Fnac",icon:"fas-book",imageURL:"https://graph.facebook.com/Fnac/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q676585",shop:"books"},addTags:{brand:"Fnac","brand:wikidata":"Q676585","brand:wikipedia":"en:Fnac",name:"Fnac",shop:"books"},countryCodes:["be","ch","es","fr","nl","pt"],terms:[],matchScore:2,suggestion:true},"shop/books/Half Price Books":{name:"Half Price Books",icon:"fas-book",imageURL:"https://graph.facebook.com/halfpricebooks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5641744",shop:"books"},addTags:{brand:"Half Price Books","brand:wikidata":"Q5641744","brand:wikipedia":"en:Half Price Books",name:"Half Price Books",shop:"books"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/books/Hugendubel":{name:"Hugendubel",icon:"fas-book",imageURL:"https://graph.facebook.com/hugendubelbuchhandlungen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1634142",shop:"books"},addTags:{brand:"Hugendubel","brand:wikidata":"Q1634142","brand:wikipedia":"en:Hugendubel",name:"Hugendubel",shop:"books"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/books/Mondadori":{name:"Mondadori",icon:"fas-book",imageURL:"https://graph.facebook.com/GruppoMondadori/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q85355",shop:"books"},addTags:{brand:"Mondadori","brand:wikidata":"Q85355","brand:wikipedia":"en:Arnoldo Mondadori Editore",name:"Mondadori",shop:"books"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/books/National Book Store":{name:"National Book Store",icon:"fas-book",imageURL:"https://graph.facebook.com/nbsalert/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6971094",shop:"books"},addTags:{brand:"National Book Store","brand:wikidata":"Q6971094","brand:wikipedia":"en:National Book Store",name:"National Book Store",shop:"books"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"shop/books/Standaard Boekhandel":{name:"Standaard Boekhandel",icon:"fas-book",imageURL:"https://graph.facebook.com/standaardboekhandel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3496554",shop:"books"},addTags:{brand:"Standaard Boekhandel","brand:wikidata":"Q3496554","brand:wikipedia":"nl:Standaard Boekhandel",name:"Standaard Boekhandel",shop:"books"},countryCodes:["be"],terms:[],matchScore:2,suggestion:true},"shop/books/TSUTAYA":{name:"TSUTAYA",icon:"fas-book",imageURL:"https://pbs.twimg.com/profile_images/1016247734720851968/R9agm3pA_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5193457",shop:"books"},addTags:{brand:"TSUTAYA","brand:wikidata":"Q5193457","brand:wikipedia":"ja:カルチュア・コンビニエンス・クラブ",name:"TSUTAYA",shop:"books"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/books/Thalia":{name:"Thalia",icon:"fas-book",imageURL:"https://graph.facebook.com/thalia.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2408854",shop:"books"},addTags:{brand:"Thalia","brand:wikidata":"Q2408854","brand:wikipedia":"de:Thalia Bücher",name:"Thalia",shop:"books"},countryCodes:["at","ch","de"],terms:[],matchScore:2,suggestion:true},"shop/books/The Works":{name:"The Works",icon:"fas-book",imageURL:"https://graph.facebook.com/TheWorksStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7775853",shop:"books"},addTags:{brand:"The Works","brand:wikidata":"Q7775853","brand:wikipedia":"en:The Works (retailer)",name:"The Works",shop:"books"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/books/Waterstones":{name:"Waterstones",icon:"fas-book",imageURL:"https://graph.facebook.com/waterstones/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q151779",shop:"books"},addTags:{brand:"Waterstones","brand:wikidata":"Q151779","brand:wikipedia":"en:Waterstones",name:"Waterstones",shop:"books"},countryCodes:["be","gb","ie","je","nl"],terms:[],matchScore:2,suggestion:true},"shop/books/Weltbild":{name:"Weltbild",icon:"fas-book",imageURL:"https://graph.facebook.com/weltbild/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q883522",shop:"books"},addTags:{brand:"Weltbild","brand:wikidata":"Q883522","brand:wikipedia":"en:Weltbild Publishing Group",name:"Weltbild",shop:"books"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/books/Буквоед":{name:"Буквоед",icon:"fas-book",imageURL:"https://graph.facebook.com/SuperBookvoed/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4098549",shop:"books"},addTags:{brand:"Буквоед","brand:wikidata":"Q4098549","brand:wikipedia":"ru:Буквоед",name:"Буквоед",shop:"books"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/books/Дом книги":{name:"Дом книги",icon:"fas-book",imageURL:"https://graph.facebook.com/spbdk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48950742",shop:"books"},addTags:{brand:"Дом книги","brand:wikidata":"Q48950742","brand:wikipedia":"ru:Московский дом книги",name:"Дом книги",shop:"books"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/books/Читай-город":{name:"Читай-город",icon:"fas-book",imageURL:"https://graph.facebook.com/chitaigorod/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4516645",shop:"books"},addTags:{brand:"Читай-город","brand:wikidata":"Q4516645","brand:wikipedia":"ru:Читай-город",name:"Читай-город",shop:"books"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/books/あおい書店":{name:"あおい書店",icon:"fas-book",imageURL:"https://graph.facebook.com/aoi.bookstore/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11256783",shop:"books"},addTags:{brand:"あおい書店","brand:en":"AOI","brand:ja":"あおい書店","brand:wikidata":"Q11256783","brand:wikipedia":"ja:あおい書店",name:"あおい書店","name:en":"AOI","name:ja":"あおい書店",shop:"books"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/books/ブックオフ":{name:"ブックオフ",icon:"fas-book",imageURL:"https://graph.facebook.com/bookoffcorporation/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q893011",shop:"books"},addTags:{brand:"ブックオフ","brand:en":"Book Off","brand:ja":"ブックオフ","brand:wikidata":"Q893011","brand:wikipedia":"en:Book Off",name:"ブックオフ","name:en":"Book Off","name:ja":"ブックオフ",shop:"books"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/books/メロンブックス":{name:"メロンブックス",icon:"fas-book",imageURL:"https://pbs.twimg.com/profile_images/877364475304714240/Ael4G2BP_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q10851653",shop:"books"},addTags:{brand:"メロンブックス","brand:en":"Melonbooks","brand:ja":"メロンブックス","brand:wikidata":"Q10851653","brand:wikipedia":"ja:メロンブックス",name:"メロンブックス","name:en":"Melonbooks","name:ja":"メロンブックス",shop:"books"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/books/リブロ":{name:"リブロ",icon:"fas-book",imageURL:"https://pbs.twimg.com/profile_images/624022283103801344/YjAC-2vv_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q6542768",shop:"books"},addTags:{brand:"リブロ","brand:en":"LIBRO","brand:ja":"リブロ","brand:wikidata":"Q6542768","brand:wikipedia":"ja:リブロ",name:"リブロ","name:en":"Libro","name:ja":"リブロ",shop:"books"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/books/三省堂書店":{name:"三省堂書店",icon:"fas-book",imageURL:"https://graph.facebook.com/books.sanseido/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10866539",shop:"books"},addTags:{brand:"三省堂書店","brand:en":"Books Sanseido","brand:ja":"三省堂書店","brand:wikidata":"Q10866539","brand:wikipedia":"ja:三省堂書店",name:"三省堂書店","name:en":"Books Sanseido","name:ja":"三省堂書店",shop:"books"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/books/文教堂":{name:"文教堂",icon:"fas-book",geometry:["point","area"],tags:{"brand:wikidata":"Q11499974",shop:"books"},addTags:{brand:"文教堂","brand:en":"Bunkyodo","brand:ja":"文教堂","brand:wikidata":"Q11499974","brand:wikipedia":"ja:文教堂",name:"文教堂","name:en":"Bunkyodo","name:ja":"文教堂",shop:"books"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/books/新华书店":{name:"新华书店",icon:"fas-book",geometry:["point","area"],tags:{"brand:wikidata":"Q6124193",shop:"books"},addTags:{brand:"新华书店","brand:en":"Xinhua Bookstore","brand:wikidata":"Q6124193","brand:wikipedia":"en:Xinhua Bookstore","brand:zh":"新华书店",name:"新华书店","name:en":"Xinhua Bookstore","name:zh":"新华书店",shop:"books"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"shop/books/未来屋書店":{name:"未来屋書店",icon:"fas-book",imageURL:"https://graph.facebook.com/miraiyashoten/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11519563",shop:"books"},addTags:{brand:"未来屋書店","brand:en":"Miraiya Shoten","brand:ja":"未来屋書店","brand:wikidata":"Q11519563","brand:wikipedia":"ja:未来屋書店",name:"未来屋書店","name:en":"Miraiya Shoten","name:ja":"未来屋書店",shop:"books"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/butcher/Coqivoire":{name:"Coqivoire",icon:"fas-bacon",geometry:["point","area"],tags:{"brand:wikidata":"Q60183284",shop:"butcher"},addTags:{brand:"Coqivoire","brand:wikidata":"Q60183284",butcher:"poultry",name:"Coqivoire",shop:"butcher"},countryCodes:["ci"],terms:[],matchScore:2,suggestion:true},"shop/butcher/Foani":{name:"Foani",icon:"fas-bacon",imageURL:"https://graph.facebook.com/foaniservices/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60183335",shop:"butcher"},addTags:{brand:"Foani","brand:wikidata":"Q60183335",butcher:"poultry",name:"Foani",shop:"butcher"},countryCodes:["ci"],terms:[],matchScore:2,suggestion:true},"shop/butcher/Vinzenzmurr":{name:"Vinzenzmurr",icon:"fas-bacon",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FVinzenzmurr%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2527361",shop:"butcher"},addTags:{brand:"Vinzenzmurr","brand:wikidata":"Q2527361","brand:wikipedia":"de:Vinzenzmurr",name:"Vinzenzmurr",shop:"butcher"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/butcher/Великолукский мясокомбинат":{name:"Великолукский мясокомбинат",icon:"fas-bacon",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2F%D0%92%D0%B5%D0%BB%D0%B8%D0%BA%D0%BE%D0%BB%D1%83%D0%BA%D1%81%D0%BA%D0%B8%D0%B9%20%D0%BC%D1%8F%D1%81%D0%BE%D0%BA%D0%BE%D0%BC%D0%B1%D0%B8%D0%BD%D0%B0%D1%82.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q18401767",shop:"butcher"},addTags:{brand:"Великолукский мясокомбинат","brand:wikidata":"Q18401767","brand:wikipedia":"ru:Великолукский мясокомбинат",name:"Великолукский мясокомбинат",shop:"butcher"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/butcher/Родинна ковбаска":{name:"Родинна ковбаска",icon:"fas-bacon",geometry:["point","area"],tags:{"brand:wikidata":"Q30969660",shop:"butcher"},addTags:{brand:"Родинна ковбаска","brand:en":"Rodynna-kovbaska","brand:wikidata":"Q30969660","brand:wikipedia":"uk:ТзОВ «Барком»",name:"Родинна ковбаска","name:en":"Rodynna-kovbaska",shop:"butcher"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/butcher/肉のハナマサ":{name:"肉のハナマサ",icon:"fas-bacon",geometry:["point","area"],tags:{"brand:wikidata":"Q11326564",shop:"butcher"},addTags:{brand:"ハナマサ","brand:en":"Hanamasa","brand:ja":"ハナマサ","brand:wikidata":"Q11326564","brand:wikipedia":"ja:ハナマサ",butcher:"beef",name:"肉のハナマサ","name:en":"Hanamasa Meat","name:ja":"肉のハナマサ",shop:"butcher"},countryCodes:["jp"],terms:["ハナマサ"],matchScore:2,suggestion:true},"shop/candles/Yankee Candle":{name:"Yankee Candle",icon:"fas-burn",imageURL:"https://graph.facebook.com/Yankeecandle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8048733",shop:"candles"},addTags:{brand:"Yankee Candle","brand:wikidata":"Q8048733","brand:wikipedia":"en:Yankee Candle",name:"Yankee Candle",shop:"candles"},countryCodes:["gb","us"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/Advance Auto Parts":{name:"Advance Auto Parts",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/advanceautoparts/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4686051",shop:"car_parts"},addTags:{brand:"Advance Auto Parts","brand:wikidata":"Q4686051","brand:wikipedia":"en:Advance Auto Parts",name:"Advance Auto Parts",shop:"car_parts"},countryCodes:["ca","pr","us","vi"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/AutoZone":{name:"AutoZone",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/autozone/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4826087",shop:"car_parts"},addTags:{brand:"AutoZone","brand:wikidata":"Q4826087","brand:wikipedia":"en:AutoZone",name:"AutoZone",shop:"car_parts"},countryCodes:["br","mx","us"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/Halfords":{name:"Halfords",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/HalfordsUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3398786",shop:"car_parts"},addTags:{brand:"Halfords","brand:wikidata":"Q3398786","brand:wikipedia":"en:Halfords",name:"Halfords","service:bicycle:retail":"yes",shop:"car_parts"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/NAPA Auto Parts":{name:"NAPA Auto Parts",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/NAPAAUTOPARTS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6970842",shop:"car_parts"},addTags:{brand:"NAPA Auto Parts","brand:wikidata":"Q6970842","brand:wikipedia":"en:National Automotive Parts Association",name:"NAPA Auto Parts",operator:"Genuine Parts Company","operator:wikidata":"Q5533818","operator:wikipedia":"en:Genuine Parts Company",shop:"car_parts"},countryCodes:["ca","mx","us"],terms:["napa"],matchScore:2,suggestion:true},"shop/car_parts/O'Reilly Auto Parts":{name:"O'Reilly Auto Parts",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/oreillyautoparts/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7071951",shop:"car_parts"},addTags:{brand:"O'Reilly Auto Parts","brand:wikidata":"Q7071951","brand:wikipedia":"en:O'Reilly Auto Parts",name:"O'Reilly Auto Parts",shop:"car_parts"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/Repco":{name:"Repco",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/RepcoAusCareers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q173425",shop:"car_parts"},addTags:{brand:"Repco","brand:wikidata":"Q173425","brand:wikipedia":"en:Repco",name:"Repco",shop:"car_parts"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/Supercheap Auto":{name:"Supercheap Auto",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/scauto/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7643119",shop:"car_parts"},addTags:{brand:"Supercheap Auto","brand:wikidata":"Q7643119","brand:wikipedia":"en:Supercheap Auto",name:"Supercheap Auto",shop:"car_parts"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/Автомир":{name:"Автомир",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/avtomir.cars/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4056321",shop:"car_parts"},addTags:{brand:"Автомир","brand:wikidata":"Q4056321","brand:wikipedia":"ru:Автомир (автодилер)",name:"Автомир",shop:"car_parts"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/イエローハット":{name:"イエローハット",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/YellowHatUAE/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11285915",shop:"car_parts"},addTags:{brand:"イエローハット","brand:en":"Yellow Hat","brand:ja":"イエローハット","brand:wikidata":"Q11285915","brand:wikipedia":"ja:イエローハット",name:"イエローハット","name:en":"Yellow Hat","name:ja":"イエローハット",shop:"car_parts"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/オートバックス":{name:"オートバックス",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/autobacs.seven/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7886426",shop:"car_parts"},addTags:{brand:"オートバックス","brand:en":"Autobacs","brand:ja":"オートバックス","brand:wikidata":"Q7886426","brand:wikipedia":"ja:オートバックスセブン",name:"オートバックス","name:en":"Autobacs","name:ja":"オートバックス",shop:"car_parts"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/タイヤ館":{name:"タイヤ館",icon:"fas-car-battery",imageURL:"https://pbs.twimg.com/profile_images/1069402555938037761/aK6lJYjW_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11315808",shop:"car_parts"},addTags:{brand:"タイヤ館","brand:en":"Taiyakan","brand:ja":"タイヤ館","brand:wikidata":"Q11315808","brand:wikipedia":"ja:タイヤ館",name:"タイヤ館","name:en":"Taiyakan","name:ja":"タイヤ館",shop:"car_parts"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/A.T.U":{name:"A.T.U",icon:"maki-car-repair",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAuto-Teile-Unger%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q784721",shop:"car_repair"},addTags:{brand:"A.T.U","brand:wikidata":"Q784721","brand:wikipedia":"de:Auto-Teile-Unger",name:"A.T.U",shop:"car_repair"},countryCodes:["at","de"],terms:["auto-teile-unger"],matchScore:2,suggestion:true},"shop/car_repair/ATS Euromaster":{name:"ATS Euromaster",icon:"maki-car-repair",imageURL:"https://pbs.twimg.com/profile_images/572348690115751936/8zWGjm2u_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q4654920",shop:"car_repair"},addTags:{brand:"ATS Euromaster","brand:wikidata":"Q4654920","brand:wikipedia":"en:ATS Euromaster",name:"ATS Euromaster",shop:"car_repair"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/BestDrive":{name:"BestDrive",icon:"maki-car-repair",geometry:["point","area"],tags:{"brand:wikidata":"Q63057183",shop:"car_repair"},addTags:{brand:"BestDrive","brand:wikidata":"Q63057183",name:"BestDrive",shop:"car_repair"},countryCodes:["cz","fr","sk"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Bosch Car Service":{name:"Bosch Car Service",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/BoschGlobal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q234021",shop:"car_repair"},addTags:{brand:"Bosch Car Service","brand:wikidata":"Q234021","brand:wikipedia":"en:Robert Bosch GmbH",name:"Bosch Car Service",shop:"car_repair"},terms:["bosch service"],matchScore:2,suggestion:true},"shop/car_repair/Brakes Plus":{name:"Brakes Plus",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/BrakesPlus.CompleteAutoService/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62075246",shop:"car_repair"},addTags:{brand:"Brakes Plus","brand:wikidata":"Q62075246",name:"Brakes Plus",shop:"car_repair"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Car-X":{name:"Car-X",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/CarxAuto/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63859189",shop:"car_repair"},addTags:{brand:"Car-X","brand:wikidata":"Q63859189",name:"Car-X",shop:"car_repair"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Carglass":{name:"Carglass",icon:"maki-car-repair",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCarglass-Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1035997",shop:"car_repair"},addTags:{brand:"Carglass","brand:wikidata":"Q1035997","brand:wikipedia":"de:Carglass",name:"Carglass",shop:"car_repair"},terms:[],matchScore:2,suggestion:true},"shop/car_repair/Citroën":{name:"Citroën",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/Citroen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6746",shop:"car_repair"},addTags:{brand:"Citroën","brand:wikidata":"Q6746","brand:wikipedia":"fr:Citroën",name:"Citroën",shop:"car_repair"},terms:[],matchScore:2,suggestion:true},"shop/car_repair/Dekra":{name:"Dekra",icon:"maki-car-repair",geometry:["point","area"],tags:{"brand:wikidata":"Q383711",shop:"car_repair"},addTags:{brand:"Dekra","brand:wikidata":"Q383711","brand:wikipedia":"en:Dekra",name:"Dekra",shop:"car_repair"},countryCodes:["de","fr"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Euromaster":{name:"Euromaster",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/ATSEUROMASTER/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3060668",shop:"car_repair"},addTags:{brand:"Euromaster","brand:wikidata":"Q3060668","brand:wikipedia":"de:Euromaster",name:"Euromaster",shop:"car_repair"},terms:[],matchScore:2,suggestion:true},"shop/car_repair/Feu Vert":{name:"Feu Vert",icon:"maki-car-repair",geometry:["point","area"],tags:{"brand:wikidata":"Q3070922",shop:"car_repair"},addTags:{brand:"Feu Vert","brand:wikidata":"Q3070922","brand:wikipedia":"fr:Feu vert (entreprise)",name:"Feu Vert",shop:"car_repair"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Firestone":{name:"Firestone",icon:"maki-car-repair",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FFirestone.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q420837",shop:"car_repair"},addTags:{brand:"Firestone","brand:wikidata":"Q420837","brand:wikipedia":"en:Firestone Tire and Rubber Company",name:"Firestone",official_name:"Firestone Complete Auto Care",shop:"car_repair"},countryCodes:["ca","cl","us"],terms:["firestone complete auto care"],matchScore:2,suggestion:true},"shop/car_repair/Ford":{name:"Ford",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/ford/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q44294",shop:"car_repair"},addTags:{brand:"Ford","brand:wikidata":"Q44294","brand:wikipedia":"en:Ford Motor Company",name:"Ford",shop:"car_repair"},terms:[],matchScore:2,suggestion:true},"shop/car_repair/Goodyear":{name:"Goodyear",icon:"maki-car-repair",imageURL:"https://pbs.twimg.com/profile_images/954462463201693697/KjS76bom_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q620875",shop:"car_repair"},addTags:{brand:"Goodyear","brand:wikidata":"Q620875","brand:wikipedia":"en:Goodyear Tire and Rubber Company",name:"Goodyear",shop:"car_repair"},countryCodes:["au","ca","cl","pe","us"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Grease Monkey":{name:"Grease Monkey",icon:"maki-car-repair",imageURL:"https://pbs.twimg.com/profile_images/378800000339987868/7c204edba540760550511092472c11a0_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q5598563",shop:"car_repair"},addTags:{brand:"Grease Monkey","brand:wikidata":"Q5598563","brand:wikipedia":"en:Grease Monkey (business)",name:"Grease Monkey",shop:"car_repair"},countryCodes:["cn","us"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Halfords Autocentre":{name:"Halfords Autocentre",icon:"maki-car-repair",imageURL:"https://pbs.twimg.com/profile_images/763666491522879488/IDO6pgKh_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5641894",shop:"car_repair"},addTags:{brand:"Halfords Auocentre","brand:wikidata":"Q5641894","brand:wikipedia":"en:Halfords Autocentre",name:"Halfords Autocentre",shop:"car_repair"},countryCodes:["gb"],terms:["halfords"],matchScore:2,suggestion:true},"shop/car_repair/Jiffy Lube":{name:"Jiffy Lube",icon:"maki-car-repair",geometry:["point","area"],tags:{"brand:wikidata":"Q6192247",shop:"car_repair"},addTags:{brand:"Jiffy Lube","brand:wikidata":"Q6192247","brand:wikipedia":"en:Jiffy Lube",name:"Jiffy Lube",shop:"car_repair"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Kwik Fit":{name:"Kwik Fit",icon:"maki-car-repair",imageURL:"https://pbs.twimg.com/profile_images/725269358449152000/1BFagDRC_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q958053",shop:"car_repair"},addTags:{brand:"Kwik Fit","brand:wikidata":"Q958053","brand:wikipedia":"en:Kwik Fit",name:"Kwik Fit",shop:"car_repair"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Meineke":{name:"Meineke",icon:"maki-car-repair",imageURL:"https://pbs.twimg.com/profile_images/724988942840266755/kpMpvs5I_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q6810159",shop:"car_repair"},addTags:{brand:"Meineke","brand:wikidata":"Q6810159","brand:wikipedia":"en:Meineke Car Care Centers",name:"Meineke",shop:"car_repair"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Mekonomen":{name:"Mekonomen",icon:"maki-car-repair",geometry:["point","area"],tags:{"brand:wikidata":"Q10580079",shop:"car_repair"},addTags:{brand:"Mekonomen","brand:wikidata":"Q10580079","brand:wikipedia":"sv:Mekonomen",name:"Mekonomen",shop:"car_repair"},countryCodes:["dk","no","se"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Midas":{name:"Midas",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/Midas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3312613",shop:"car_repair"},addTags:{brand:"Midas","brand:wikidata":"Q3312613","brand:wikipedia":"en:Midas (automotive service)",name:"Midas",shop:"car_repair"},terms:[],matchScore:2,suggestion:true},"shop/car_repair/Monro Muffler Brake":{name:"Monro Muffler Brake",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/MonroAutoServiceTire/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6902090",shop:"car_repair"},addTags:{brand:"Monro Muffler Brake","brand:wikidata":"Q6902090","brand:wikipedia":"en:Monro Muffler Brake",name:"Monro Muffler Brake",shop:"car_repair"},countryCodes:["us"],terms:["monro"],matchScore:2,suggestion:true},"shop/car_repair/Mr. Lube":{name:"Mr. Lube",icon:"maki-car-repair",imageURL:"https://pbs.twimg.com/profile_images/448587010475692032/6J-h3__O_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q17104067",shop:"car_repair"},addTags:{brand:"Mr. Lube","brand:wikidata":"Q17104067","brand:wikipedia":"en:Mr. Lube",name:"Mr. Lube",shop:"car_repair"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Norauto":{name:"Norauto",icon:"maki-car-repair",geometry:["point","area"],tags:{"brand:wikidata":"Q3317698",shop:"car_repair"},addTags:{brand:"Norauto","brand:wikidata":"Q3317698","brand:wikipedia":"en:Mobivia Groupe",name:"Norauto",shop:"car_repair"},countryCodes:["ar","es","fr","hu","it","pl","pt","ro"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Pep Boys":{name:"Pep Boys",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/pepboysauto/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3375007",shop:"car_repair"},addTags:{brand:"Pep Boys","brand:wikidata":"Q3375007","brand:wikipedia":"en:Pep Boys",name:"Pep Boys",shop:"car_repair"},countryCodes:["pr","us"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Peugeot":{name:"Peugeot",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/Peugeot/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6742",shop:"car_repair"},addTags:{brand:"Peugeot","brand:wikidata":"Q6742","brand:wikipedia":"en:Peugeot",name:"Peugeot",shop:"car_repair"},terms:[],matchScore:2,suggestion:true},"shop/car_repair/Point S":{name:"Point S",icon:"maki-car-repair",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FPointS%204c%20klein.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3393358",shop:"car_repair"},addTags:{brand:"Point S","brand:wikidata":"Q3393358","brand:wikipedia":"fr:Point S",name:"Point S",shop:"car_repair"},terms:[],matchScore:2,suggestion:true},"shop/car_repair/Renault":{name:"Renault",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/Renault/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6686",shop:"car_repair"},addTags:{brand:"Renault","brand:wikidata":"Q6686","brand:wikipedia":"en:Renault",name:"Renault",shop:"car_repair"},terms:["garage renault"],matchScore:2,suggestion:true},"shop/car_repair/Roady":{name:"Roady",icon:"maki-car-repair",geometry:["point","area"],tags:{"brand:wikidata":"Q3434112",shop:"car_repair"},addTags:{brand:"Roady","brand:wikidata":"Q3434112","brand:wikipedia":"en:Roady (Mousquetaires)",name:"Roady",shop:"car_repair"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Safelite AutoGlass":{name:"Safelite AutoGlass",icon:"maki-car-repair",imageURL:"https://pbs.twimg.com/profile_images/941319713149333505/oSj6thH6_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q28797369",shop:"car_repair"},addTags:{brand:"Safelite AutoGlass","brand:wikidata":"Q28797369","brand:wikipedia":"en:Safelite",name:"Safelite AutoGlass",operator:"Belron","operator:wikidata":"Q785614","operator:wikipedia":"en:Belron",shop:"car_repair"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Speedy":{name:"Speedy",icon:"maki-car-repair",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSpeedy%20France%20logo%20officiel.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3492969",shop:"car_repair"},addTags:{brand:"Speedy","brand:wikidata":"Q3492969","brand:wikipedia":"fr:Speedy (entreprise)",name:"Speedy",shop:"car_repair"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Speedy Auto Service":{name:"Speedy Auto Service",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/SpeedyAutoServiceCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22318193",shop:"car_repair"},addTags:{brand:"Speedy Auto Service","brand:wikidata":"Q22318193",name:"Speedy Auto Service",shop:"car_repair"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Toyota":{name:"Toyota",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/toyota/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q53268",shop:"car_repair"},addTags:{brand:"Toyota","brand:wikidata":"Q53268","brand:wikipedia":"en:Toyota",name:"Toyota",shop:"car_repair"},terms:[],matchScore:2,suggestion:true},"shop/car_repair/Tuffy Tire & Auto Service":{name:"Tuffy Tire & Auto Service",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/Tuffy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17125314",shop:"car_repair"},addTags:{brand:"Tuffy Tire & Auto Service","brand:wikidata":"Q17125314","brand:wikipedia":"en:Tuffy Auto Service Centers",name:"Tuffy Tire & Auto Service",shop:"car_repair"},countryCodes:["us"],terms:["tuffy tire and auto service"],matchScore:2,suggestion:true},"shop/car_repair/Valvoline":{name:"Valvoline",icon:"maki-car-repair",geometry:["point","area"],tags:{"brand:wikidata":"Q7912852",shop:"car_repair"},addTags:{brand:"Valvoline","brand:wikidata":"Q7912852","brand:wikipedia":"en:Valvoline Instant Oil Change",name:"Valvoline",shop:"car_repair"},countryCodes:["us"],terms:["valvoline instant oil change"],matchScore:2,suggestion:true},"shop/car_repair/ÖAMTC":{name:"ÖAMTC",icon:"maki-car-repair",geometry:["point","area"],tags:{"brand:wikidata":"Q306057",shop:"car_repair"},addTags:{brand:"ÖAMTC","brand:wikidata":"Q306057","brand:wikipedia":"de:Österreichischer Automobil-, Motorrad- und Touring Club",name:"ÖAMTC",shop:"car_repair"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/car/Audi":{name:"Audi",icon:"maki-car",imageURL:"https://graph.facebook.com/audi.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23317",shop:"car"},addTags:{brand:"Audi","brand:wikidata":"Q23317","brand:wikipedia":"en:Audi",name:"Audi",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/BMW":{name:"BMW",icon:"maki-car",imageURL:"https://graph.facebook.com/BMWGroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q26678",shop:"car"},addTags:{brand:"BMW","brand:wikidata":"Q26678","brand:wikipedia":"en:BMW",name:"BMW",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Chevrolet":{name:"Chevrolet",icon:"maki-car",imageURL:"https://graph.facebook.com/chevrolet/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q29570",shop:"car"},addTags:{brand:"Chevrolet","brand:wikidata":"Q29570","brand:wikipedia":"en:Chevrolet",name:"Chevrolet",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Citroën":{name:"Citroën",icon:"maki-car",imageURL:"https://graph.facebook.com/Citroen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6746",shop:"car"},addTags:{brand:"Citroën","brand:wikidata":"Q6746","brand:wikipedia":"fr:Citroën",name:"Citroën",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Dacia":{name:"Dacia",icon:"maki-car",imageURL:"https://graph.facebook.com/Dacia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q27460",shop:"car"},addTags:{brand:"Dacia","brand:wikidata":"Q27460","brand:wikipedia":"en:Automobile Dacia",name:"Dacia",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Fiat":{name:"Fiat",icon:"maki-car",imageURL:"https://graph.facebook.com/Fiat/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q27597",shop:"car"},addTags:{brand:"Fiat","brand:wikidata":"Q27597","brand:wikipedia":"en:Fiat Automobiles",name:"Fiat",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Ford":{name:"Ford",icon:"maki-car",imageURL:"https://graph.facebook.com/ford/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q44294",shop:"car"},addTags:{brand:"Ford","brand:wikidata":"Q44294","brand:wikipedia":"en:Ford Motor Company",name:"Ford",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Honda":{name:"Honda",icon:"maki-car",imageURL:"https://graph.facebook.com/HondaJP/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9584",shop:"car"},addTags:{brand:"Honda","brand:wikidata":"Q9584","brand:wikipedia":"en:Honda",name:"Honda",shop:"car"},terms:["honda cars"],matchScore:2,suggestion:true},"shop/car/Hyundai":{name:"Hyundai",icon:"maki-car",imageURL:"https://graph.facebook.com/Hyundai/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q55931",shop:"car"},addTags:{brand:"Hyundai","brand:wikidata":"Q55931","brand:wikipedia":"en:Hyundai Motor Company",name:"Hyundai",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Isuzu":{name:"Isuzu",icon:"maki-car",imageURL:"https://graph.facebook.com/isuzumex/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q29803",shop:"car"},addTags:{brand:"Isuzu","brand:wikidata":"Q29803","brand:wikipedia":"en:Isuzu Motors",name:"Isuzu",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Kia":{name:"Kia",icon:"maki-car",imageURL:"https://graph.facebook.com/Kiamotorsworldwide/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q35349",shop:"car"},addTags:{brand:"Kia","brand:wikidata":"Q35349","brand:wikipedia":"en:Kia Motors",name:"Kia",shop:"car"},terms:["kia motors"],matchScore:2,suggestion:true},"shop/car/Land Rover":{name:"Land Rover",icon:"maki-car",imageURL:"https://graph.facebook.com/landroverusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q35907",shop:"car"},addTags:{brand:"Land Rover","brand:wikidata":"Q35907","brand:wikipedia":"en:Land Rover",name:"Land Rover",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Lexus":{name:"Lexus",icon:"maki-car",imageURL:"https://graph.facebook.com/lexus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q35919",shop:"car"},addTags:{brand:"Lexus","brand:wikidata":"Q35919","brand:wikipedia":"en:Lexus",name:"Lexus",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Mazda":{name:"Mazda",icon:"maki-car",imageURL:"https://graph.facebook.com/Mazda.Japan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q35996",shop:"car"},addTags:{brand:"Mazda","brand:wikidata":"Q35996","brand:wikipedia":"en:Mazda",name:"Mazda",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Mercedes-Benz":{name:"Mercedes-Benz",icon:"maki-car",imageURL:"https://graph.facebook.com/MercedesBenz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q36008",shop:"car"},addTags:{brand:"Mercedes-Benz","brand:wikidata":"Q36008","brand:wikipedia":"en:Mercedes-Benz",name:"Mercedes-Benz",shop:"car"},terms:["mercedes"],matchScore:2,suggestion:true},"shop/car/Mitsubishi":{name:"Mitsubishi",icon:"maki-car",imageURL:"https://graph.facebook.com/MitsubishiMotors.en/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q36033",shop:"car"},addTags:{brand:"Mitsubishi","brand:wikidata":"Q36033","brand:wikipedia":"en:Mitsubishi Motors",name:"Mitsubishi",shop:"car"},terms:["mitsubishi motors"],matchScore:2,suggestion:true},"shop/car/Netz":{name:"Netz",icon:"maki-car",geometry:["point","area"],tags:{"brand:wikidata":"Q11325416",shop:"car"},addTags:{brand:"Netz","brand:wikidata":"Q11325416","brand:wikipedia":"ja:ネッツ店",name:"Netz",shop:"car"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/car/Nissan":{name:"Nissan",icon:"maki-car",imageURL:"https://graph.facebook.com/NissanJP/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20165",shop:"car"},addTags:{brand:"Nissan","brand:wikidata":"Q20165","brand:wikipedia":"ja:日産自動車",name:"Nissan",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Opel":{name:"Opel",icon:"maki-car",imageURL:"https://graph.facebook.com/Opel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q40966",shop:"car"},addTags:{brand:"Opel","brand:wikidata":"Q40966","brand:wikipedia":"en:Opel",name:"Opel",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Peugeot":{name:"Peugeot",icon:"maki-car",imageURL:"https://graph.facebook.com/Peugeot/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6742",shop:"car"},addTags:{brand:"Peugeot","brand:wikidata":"Q6742","brand:wikipedia":"en:Peugeot",name:"Peugeot",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Porsche":{name:"Porsche",icon:"maki-car",imageURL:"https://graph.facebook.com/porsche/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q40993",shop:"car"},addTags:{brand:"Porsche","brand:wikidata":"Q40993","brand:wikipedia":"en:Porsche",name:"Porsche",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Renault":{name:"Renault",icon:"maki-car",imageURL:"https://graph.facebook.com/Renault/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6686",shop:"car"},addTags:{brand:"Renault","brand:wikidata":"Q6686","brand:wikipedia":"en:Renault",name:"Renault",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Seat":{name:"Seat",icon:"maki-car",imageURL:"https://graph.facebook.com/SEAT.Official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q188217",shop:"car"},addTags:{brand:"Seat","brand:wikidata":"Q188217","brand:wikipedia":"en:SEAT",name:"Seat",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Skoda":{name:"Skoda",icon:"maki-car",imageURL:"https://graph.facebook.com/skoda/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q29637",shop:"car"},addTags:{brand:"Skoda","brand:wikidata":"Q29637","brand:wikipedia":"en:Škoda Auto",name:"Skoda",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Subaru":{name:"Subaru",icon:"maki-car",imageURL:"https://graph.facebook.com/SUBARU.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q172741",shop:"car"},addTags:{brand:"Subaru","brand:wikidata":"Q172741","brand:wikipedia":"en:Subaru",name:"Subaru",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Suzuki":{name:"Suzuki",icon:"maki-car",imageURL:"https://graph.facebook.com/SuzukiGlobalOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q181642",shop:"car"},addTags:{brand:"Suzuki","brand:wikidata":"Q181642","brand:wikipedia":"en:Suzuki",name:"Suzuki",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Tesla":{name:"Tesla",icon:"maki-car",imageURL:"https://pbs.twimg.com/profile_images/489192650474414080/4RxZxsud_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q478214",shop:"car"},addTags:{brand:"Tesla","brand:wikidata":"Q478214","brand:wikipedia":"en:Tesla, Inc.",name:"Tesla",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Toyota":{name:"Toyota",icon:"maki-car",imageURL:"https://graph.facebook.com/toyota/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q53268",shop:"car"},addTags:{brand:"Toyota","brand:wikidata":"Q53268","brand:wikipedia":"en:Toyota",name:"Toyota",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Volkswagen":{name:"Volkswagen",icon:"maki-car",imageURL:"https://graph.facebook.com/VW/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q246",shop:"car"},addTags:{brand:"Volkswagen","brand:wikidata":"Q246","brand:wikipedia":"en:Volkswagen",name:"Volkswagen",shop:"car"},terms:["vw"],matchScore:2,suggestion:true},"shop/car/Volvo":{name:"Volvo",icon:"maki-car",imageURL:"https://graph.facebook.com/volvocars/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q215293",shop:"car"},addTags:{brand:"Volvo","brand:wikidata":"Q215293","brand:wikipedia":"en:Volvo Cars",name:"Volvo",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/ホンダ":{name:"ホンダ",icon:"maki-car",imageURL:"https://graph.facebook.com/HondaJP/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9584",shop:"car"},addTags:{brand:"ホンダ","brand:en":"Honda","brand:ja":"ホンダ","brand:wikidata":"Q9584","brand:wikipedia":"ja:本田技研工業",name:"ホンダ","name:en":"Honda","name:ja":"ホンダ",shop:"car"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/carpet/Carpetright":{name:"Carpetright",icon:"maki-shop",imageURL:"https://graph.facebook.com/carpetright/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5045782",shop:"carpet"},addTags:{brand:"Carpetright","brand:wikidata":"Q5045782","brand:wikipedia":"en:Carpetright",name:"Carpetright",shop:"carpet"},countryCodes:["be","gb","ie","nl"],terms:[],matchScore:2,suggestion:true},"shop/catalogue/Argos":{name:"Argos",icon:"maki-shop",imageURL:"https://graph.facebook.com/argos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4789707",shop:"catalogue"},addTags:{brand:"Argos","brand:wikidata":"Q4789707","brand:wikipedia":"en:Argos (retailer)",name:"Argos",shop:"catalogue"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/charity/Age UK":{name:"Age UK",icon:"maki-shop",imageURL:"https://graph.facebook.com/ageuk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4691850",shop:"charity"},addTags:{brand:"Age UK","brand:wikidata":"Q4691850","brand:wikipedia":"en:Age UK",name:"Age UK",shop:"charity"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/charity/Barnardo's":{name:"Barnardo's",icon:"maki-shop",imageURL:"https://graph.facebook.com/barnardos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2884670",shop:"charity"},addTags:{brand:"Barnardo's","brand:wikidata":"Q2884670","brand:wikipedia":"en:Barnardo's",name:"Barnardo's",shop:"charity"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/charity/British Heart Foundation":{name:"British Heart Foundation",icon:"maki-shop",imageURL:"https://graph.facebook.com/bhf/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4970039",shop:"charity"},addTags:{brand:"British Heart Foundation","brand:wikidata":"Q4970039","brand:wikipedia":"en:British Heart Foundation",name:"British Heart Foundation",shop:"charity"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/charity/British Red Cross":{name:"British Red Cross",icon:"maki-shop",imageURL:"https://graph.facebook.com/britishredcross/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4970966",shop:"charity"},addTags:{brand:"British Red Cross","brand:wikidata":"Q4970966","brand:wikipedia":"en:British Red Cross",name:"British Red Cross",shop:"charity"},countryCodes:["gb","gg","im"],terms:[],matchScore:2,suggestion:true},"shop/charity/Cancer Research UK":{name:"Cancer Research UK",icon:"maki-shop",imageURL:"https://graph.facebook.com/cancerresearchuk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q326079",shop:"charity"},addTags:{brand:"Cancer Research UK","brand:wikidata":"Q326079","brand:wikipedia":"en:Cancer Research UK",name:"Cancer Research UK",shop:"charity"},countryCodes:["gb","gg"],terms:[],matchScore:2,suggestion:true},"shop/charity/Goodwill":{name:"Goodwill",icon:"maki-shop",imageURL:"https://graph.facebook.com/GoodwillIntl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5583655",shop:"charity"},addTags:{brand:"Goodwill","brand:wikidata":"Q5583655","brand:wikipedia":"en:Goodwill Industries",name:"Goodwill",shop:"charity"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/charity/Mind":{name:"Mind",icon:"maki-shop",imageURL:"https://graph.facebook.com/mindforbettermentalhealth/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3314763",shop:"charity"},addTags:{brand:"Mind","brand:wikidata":"Q3314763","brand:wikipedia":"en:Mind (charity)",name:"Mind",shop:"charity"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/charity/Myrorna":{name:"Myrorna",icon:"maki-shop",imageURL:"https://graph.facebook.com/Myrorna/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10592609",shop:"charity"},addTags:{brand:"Myrorna","brand:wikidata":"Q10592609","brand:wikipedia":"sv:Myrorna",name:"Myrorna",shop:"charity"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/charity/Oxfam":{name:"Oxfam",icon:"maki-shop",imageURL:"https://graph.facebook.com/oxfamGB/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q267941",shop:"charity"},addTags:{brand:"Oxfam","brand:wikidata":"Q267941","brand:wikipedia":"en:Oxfam",name:"Oxfam",shop:"charity"},countryCodes:["be","de","gb","ie","im"],terms:[],matchScore:2,suggestion:true},"shop/charity/RSPCA":{name:"RSPCA",icon:"maki-shop",imageURL:"https://graph.facebook.com/RSPCA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q584819",shop:"charity"},addTags:{brand:"RSPCA","brand:wikidata":"Q584819","brand:wikipedia":"en:Royal Society for the Prevention of Cruelty to Animals",name:"RSPCA",shop:"charity"},countryCodes:["au","gb"],terms:[],matchScore:2,suggestion:true},"shop/charity/Scope":{name:"Scope",icon:"maki-shop",imageURL:"https://graph.facebook.com/Scope/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7434435",shop:"charity"},addTags:{brand:"Scope","brand:wikidata":"Q7434435","brand:wikipedia":"en:Scope (charity)",name:"Scope",shop:"charity"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/charity/Sue Ryder":{name:"Sue Ryder",icon:"maki-shop",imageURL:"https://graph.facebook.com/SueRyderNational/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7634271",shop:"charity"},addTags:{brand:"Sue Ryder","brand:wikidata":"Q7634271","brand:wikipedia":"en:Sue Ryder (charity)",name:"Sue Ryder",shop:"charity"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/charity/The Salvation Army":{name:"The Salvation Army",icon:"maki-shop",imageURL:"https://graph.facebook.com/SalvationArmyUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q188307",shop:"charity"},addTags:{brand:"The Salvation Army","brand:wikidata":"Q188307","brand:wikipedia":"en:The Salvation Army",name:"The Salvation Army",shop:"charity"},countryCodes:["au","ca","gb","us"],terms:["salvation army"],matchScore:2,suggestion:true},"shop/chemist/Bipa":{name:"Bipa",icon:"fas-shopping-basket",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBipa%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q864933",shop:"chemist"},addTags:{brand:"Bipa","brand:wikidata":"Q864933","brand:wikipedia":"de:Bipa",name:"Bipa",shop:"chemist"},countryCodes:["at","hr"],terms:[],matchScore:2,suggestion:true},"shop/chemist/Budnikowsky":{name:"Budnikowsky",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/BUDNI/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1001516",shop:"chemist"},addTags:{brand:"Budnikowsky","brand:wikidata":"Q1001516","brand:wikipedia":"de:Budnikowsky",name:"Budnikowsky",shop:"chemist"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/chemist/Drogeria Natura":{name:"Drogeria Natura",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q9212032",shop:"chemist"},addTags:{brand:"Drogeria Natura","brand:wikidata":"Q9212032","brand:wikipedia":"pl:Drogerie Natura",name:"Drogeria Natura",shop:"chemist"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/chemist/Etos":{name:"Etos",icon:"fas-shopping-basket",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FEtos%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2609459",shop:"chemist"},addTags:{brand:"Etos","brand:wikidata":"Q2609459","brand:wikipedia":"en:Etos",name:"Etos",shop:"chemist"},terms:[],matchScore:2,suggestion:true},"shop/chemist/Kruidvat":{name:"Kruidvat",icon:"fas-shopping-basket",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FKruidvat%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2226366",shop:"chemist"},addTags:{brand:"Kruidvat","brand:wikidata":"Q2226366","brand:wikipedia":"en:Kruidvat",name:"Kruidvat",shop:"chemist"},terms:[],matchScore:2,suggestion:true},"shop/chemist/Matas":{name:"Matas",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q6786143",shop:"chemist"},addTags:{brand:"Matas","brand:wikidata":"Q6786143","brand:wikipedia":"en:Matas (drug store)",name:"Matas",shop:"chemist"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"shop/chemist/Müller":{name:"Müller",icon:"fas-shopping-basket",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Drogerie%20Mueller.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1958759",shop:"chemist"},addTags:{brand:"Müller","brand:wikidata":"Q1958759","brand:wikipedia":"en:Müller (German trade company)",name:"Müller",shop:"chemist"},terms:[],matchScore:2,suggestion:true},"shop/chemist/Rossmann":{name:"Rossmann",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/rossmann.gmbh/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q316004",shop:"chemist"},addTags:{brand:"Rossmann","brand:wikidata":"Q316004","brand:wikipedia":"de:Dirk Rossmann GmbH",name:"Rossmann",shop:"chemist"},terms:[],matchScore:2,suggestion:true},"shop/chemist/Teta":{name:"Teta",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q20860823",shop:"chemist"},addTags:{brand:"Teta","brand:wikidata":"Q20860823","brand:wikipedia":"cs:Teta drogerie",name:"Teta",shop:"chemist"},terms:[],matchScore:2,suggestion:true},"shop/chemist/Trekpleister":{name:"Trekpleister",icon:"fas-shopping-basket",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FTrekpleister%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2551576",shop:"chemist"},addTags:{brand:"Trekpleister","brand:wikidata":"Q2551576","brand:wikipedia":"nl:Trekpleister (drogisterij)",name:"Trekpleister",shop:"chemist"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/chemist/Walgreens":{name:"Walgreens",icon:"fas-shopping-basket",imageURL:"https://pbs.twimg.com/profile_images/875789275668918273/7l9RDOnl_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1591889",shop:"chemist"},addTags:{brand:"Walgreens","brand:wikidata":"Q1591889","brand:wikipedia":"en:Walgreens",name:"Walgreens",shop:"chemist"},countryCodes:["us"],terms:["walgreens pharmacy"],matchScore:2,suggestion:true},"shop/chemist/Watsons":{name:"Watsons",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/WatsonsPH/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7974785",shop:"chemist"},addTags:{brand:"Watsons","brand:wikidata":"Q7974785","brand:wikipedia":"en:Watsons",name:"Watsons",operator:"A.S. Watson Group","operator:wikidata":"Q4647401","operator:wikipedia":"en:A.S. Watson Group",shop:"chemist"},terms:[],matchScore:2,suggestion:true},"shop/chemist/dm":{name:"dm",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/dm.Deutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q266572",shop:"chemist"},addTags:{brand:"dm","brand:wikidata":"Q266572","brand:wikipedia":"en:Dm-drogerie markt",name:"dm",shop:"chemist"},countryCodes:["at","ba","bg","cz","de","hr","hu","it","mk","ro","rs","si","sk"],terms:["dm drogerie markt"],matchScore:2,suggestion:true},"shop/chemist/康是美":{name:"康是美",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q11063876",shop:"chemist"},addTags:{brand:"康是美","brand:wikidata":"Q11063876","brand:wikipedia":"zh:康是美藥妝店",name:"康是美",shop:"chemist"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/chocolate/Cacau Show":{name:"Cacau Show",icon:"maki-shop",imageURL:"https://graph.facebook.com/CacauShow/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9671713",shop:"chocolate"},addTags:{brand:"Cacau Show","brand:wikidata":"Q9671713","brand:wikipedia":"en:Cacau Show",name:"Cacau Show",shop:"chocolate"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"shop/chocolate/Leonidas":{name:"Leonidas",icon:"maki-shop",imageURL:"https://graph.facebook.com/Leonidas.Official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q80335",shop:"chocolate"},addTags:{brand:"Leonidas","brand:wikidata":"Q80335","brand:wikipedia":"en:Leonidas (chocolate maker)",name:"Leonidas",shop:"chocolate"},countryCodes:["be","cz","fr","gb","gr","nl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/AOKI":{name:"AOKI",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q11189480",shop:"clothes"},addTags:{brand:"AOKI","brand:wikidata":"Q11189480","brand:wikipedia":"ja:AOKIホールディングス",clothes:"men",name:"AOKI","name:ja":"アオキ",operator:"株式会社AOKIホールディングス","operator:en":"AOKI Holdings Inc.",shop:"clothes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Abercrombie & Fitch":{name:"Abercrombie & Fitch",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/1090830222302298112/W60h63qk_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q319344",shop:"clothes"},addTags:{brand:"Abercrombie & Fitch","brand:wikidata":"Q319344","brand:wikipedia":"en:Abercrombie & Fitch",clothes:"men;women",name:"Abercrombie & Fitch",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Accessorize":{name:"Accessorize",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/1014248943121813505/qNRJq7zh_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3069980",shop:"clothes"},addTags:{brand:"Accessorize","brand:wikidata":"Q3069980","brand:wikipedia":"en:Monsoon Accessorize",name:"Accessorize",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Ackermans":{name:"Ackermans",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAckermans-Logo.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4674255",shop:"clothes"},addTags:{brand:"Ackermans","brand:wikidata":"Q4674255","brand:wikipedia":"en:Ackermans",name:"Ackermans",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Aeropostale":{name:"Aeropostale",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/1022567836043173895/8EvkF14a_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q794565",shop:"clothes"},addTags:{brand:"Aeropostale","brand:wikidata":"Q794565","brand:wikipedia":"en:Aéropostale (clothing)",clothes:"men;women",name:"Aeropostale",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/American Eagle Outfitters":{name:"American Eagle Outfitters",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/926225107445366786/HNAMY-nG_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q2842931",shop:"clothes"},addTags:{brand:"American Eagle Outfitters","brand:wikidata":"Q2842931","brand:wikipedia":"en:American Eagle Outfitters",clothes:"men;women",name:"American Eagle Outfitters",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Ann Taylor":{name:"Ann Taylor",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/632020433571676162/jq9ErOl5_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4766699",shop:"clothes"},addTags:{brand:"Ann Taylor","brand:wikidata":"Q4766699","brand:wikipedia":"en:Ann Inc.",clothes:"women",name:"Ann Taylor",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Anthropologie":{name:"Anthropologie",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/1013829328205991938/mMkaMqhL_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4773903",shop:"clothes"},addTags:{brand:"Anthropologie","brand:wikidata":"Q4773903","brand:wikipedia":"en:Anthropologie",clothes:"women",name:"Anthropologie",shop:"clothes"},countryCodes:["ca","gb","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Ardene":{name:"Ardene",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FArdene%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2860764",shop:"clothes"},addTags:{brand:"Ardene","brand:wikidata":"Q2860764","brand:wikipedia":"en:Ardene",name:"Ardene",shop:"clothes"},countryCodes:["ca","sn"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Armand Thiery":{name:"Armand Thiery",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q2861975",shop:"clothes"},addTags:{brand:"Armand Thiery","brand:wikidata":"Q2861975","brand:wikipedia":"fr:Armand Thiery",name:"Armand Thiery",shop:"clothes"},countryCodes:["be","fr"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Armani Exchange":{name:"Armani Exchange",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q56045740",shop:"clothes"},addTags:{brand:"Armani Exchange","brand:wikidata":"Q56045740",clothes:"men;women",name:"Armani Exchange","operator:wikidata":"Q2861975","operator:wikipedia":"en:Armani",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Banana Republic":{name:"Banana Republic",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/BananaRepublic/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806085",shop:"clothes"},addTags:{brand:"Banana Republic","brand:wikidata":"Q806085","brand:wikipedia":"en:Banana Republic",clothes:"men;women",name:"Banana Republic",shop:"clothes"},countryCodes:["ca","gb","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Bershka":{name:"Bershka",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/bershka/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q827258",shop:"clothes"},addTags:{brand:"Bershka","brand:wikidata":"Q827258","brand:wikipedia":"en:Bershka",name:"Bershka",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Betty Barclay":{name:"Betty Barclay",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q850250",shop:"clothes"},addTags:{brand:"Betty Barclay","brand:wikidata":"Q850250","brand:wikipedia":"de:Betty Barclay",name:"Betty Barclay",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Big Star":{name:"Big Star",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBig%20Star%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q9171569",shop:"clothes"},addTags:{brand:"Big Star","brand:wikidata":"Q9171569","brand:wikipedia":"pl:Big Star Limited",name:"Big Star",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Bonita":{name:"Bonita",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q892598",shop:"clothes"},addTags:{brand:"Bonita","brand:wikidata":"Q892598","brand:wikipedia":"de:Bonita (Unternehmen)",name:"Bonita",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Bonobo":{name:"Bonobo",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q63682093",shop:"clothes"},addTags:{brand:"Bonobo","brand:wikidata":"Q63682093",clothes:"men;women",name:"Bonobo",shop:"clothes"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Bonobos":{name:"Bonobos",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/bonobos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4942546",shop:"clothes"},addTags:{brand:"Bonobos","brand:wikidata":"Q4942546","brand:wikipedia":"en:Bonobos (apparel)",clothes:"men",name:"Bonobos",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Brice":{name:"Brice",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLOGO%20BRICE%20Noir.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2925067",shop:"clothes"},addTags:{brand:"Brice","brand:wikidata":"Q2925067","brand:wikipedia":"fr:Brice (enseigne)",name:"Brice",shop:"clothes"},countryCodes:["be","fr"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Brooks Brothers":{name:"Brooks Brothers",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/1115302398023614465/o1kNm_G5_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q929722",shop:"clothes"},addTags:{brand:"Brooks Brothers","brand:wikidata":"Q929722","brand:wikipedia":"en:Brooks Brothers",name:"Brooks Brothers",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Buffalo Exchange":{name:"Buffalo Exchange",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/buffaloexchange/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4985721",shop:"clothes"},addTags:{brand:"Buffalo Exchange","brand:wikidata":"Q4985721","brand:wikipedia":"en:Buffalo Exchange",name:"Buffalo Exchange",second_hand:"only",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Burberry":{name:"Burberry",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/1024961047009157121/2xSmZUHV_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q390107",shop:"clothes"},addTags:{brand:"Burberry","brand:wikidata":"Q390107","brand:wikipedia":"en:Burberry",name:"Burberry",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Burlington Coat Factory":{name:"Burlington Coat Factory",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/1131652532697276417/j5NY54aO_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4999220",shop:"clothes"},addTags:{brand:"Burlington Coat Factory","brand:wikidata":"Q4999220","brand:wikipedia":"en:Burlington (department store)",name:"Burlington Coat Factory",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Burton":{name:"Burton",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/966321347923271680/THD9mE6x_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5000795",shop:"clothes"},addTags:{brand:"Burton","brand:wikidata":"Q5000795","brand:wikipedia":"en:Burton (retailer)",name:"Burton",shop:"clothes"},countryCodes:["fr","gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/C&A":{name:"C&A",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FC-und-A-Logo-2011.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q701338",shop:"clothes"},addTags:{brand:"C&A","brand:wikidata":"Q701338","brand:wikipedia":"en:C&A",name:"C&A",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/COS":{name:"COS",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q60772401",shop:"clothes"},addTags:{brand:"COS","brand:wikidata":"Q60772401","brand:wikipedia":"en:COS (clothing)",name:"COS",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Cache Cache":{name:"Cache Cache",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/CacheCacheFrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63064086",shop:"clothes"},addTags:{brand:"Cache Cache","brand:wikidata":"Q63064086",name:"Cache Cache",shop:"clothes"},countryCodes:["fr","it","lu"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Calvin Klein":{name:"Calvin Klein",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/889490770687905792/N8mVqffO_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1068628",shop:"clothes"},addTags:{brand:"Calvin Klein","brand:wikidata":"Q1068628","brand:wikipedia":"en:Calvin Klein (company)",name:"Calvin Klein",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Calzedonia":{name:"Calzedonia",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/calzedonia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1027874",shop:"clothes"},addTags:{brand:"Calzedonia","brand:wikidata":"Q1027874","brand:wikipedia":"en:Calzedonia",name:"Calzedonia",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Camaïeu":{name:"Camaïeu",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q2934647",shop:"clothes"},addTags:{brand:"Camaïeu","brand:wikidata":"Q2934647","brand:wikipedia":"en:Camaïeu (company)",name:"Camaïeu",shop:"clothes"},countryCodes:["be","cz","fr","it","pl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Camp David":{name:"Camp David",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q50540636",shop:"clothes"},addTags:{brand:"Camp David","brand:wikidata":"Q50540636","brand:wikipedia":"en:Camp David (fashion)",name:"Camp David",shop:"clothes"},countryCodes:["at","de","ee","sk"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Carhartt":{name:"Carhartt",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/1130882629887246337/bleprNYj_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q527877",shop:"clothes"},addTags:{brand:"Carhartt","brand:wikidata":"Q527877","brand:wikipedia":"en:Carhartt",name:"Carhartt",shop:"clothes"},countryCodes:["gb","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Caroll":{name:"Caroll",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/carollparis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63063871",shop:"clothes"},addTags:{brand:"Caroll","brand:wikidata":"Q63063871",name:"Caroll",shop:"clothes"},countryCodes:["ch","fr"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Carter's":{name:"Carter's",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q5047083",shop:"clothes"},addTags:{brand:"Carter's","brand:wikidata":"Q5047083","brand:wikipedia":"en:Carter's",name:"Carter's",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Cato":{name:"Cato",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q16956136",shop:"clothes"},addTags:{brand:"Cato","brand:wikidata":"Q16956136","brand:wikipedia":"en:Cato Corporation",name:"Cato",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Celio":{name:"Celio",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20celio%20RVB.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2672003",shop:"clothes"},addTags:{brand:"Celio","brand:wikidata":"Q2672003","brand:wikipedia":"en:Celio (retailer)",name:"Celio",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Charles Vögele":{name:"Charles Vögele",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCharles%20Voegele%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1066326",shop:"clothes"},addTags:{brand:"Charles Vögele","brand:wikidata":"Q1066326","brand:wikipedia":"de:Charles Vögele Holding",name:"Charles Vögele",shop:"clothes"},countryCodes:["at","be","ch","de","hu","nl"],terms:["vögele"],matchScore:2,suggestion:true},"shop/clothes/Charlotte Russe":{name:"Charlotte Russe",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCharlotte%20russe.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5086126",shop:"clothes"},addTags:{brand:"Charlotte Russe","brand:wikidata":"Q5086126","brand:wikipedia":"en:Charlotte Russe (clothing retailer)",name:"Charlotte Russe",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Chico's":{name:"Chico's",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FChico's%20FAS%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5096393",shop:"clothes"},addTags:{brand:"Chico's","brand:wikidata":"Q5096393","brand:wikipedia":"en:Chico's (clothing retailer)",name:"Chico's",shop:"clothes"},countryCodes:["ar","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Christopher & Banks":{name:"Christopher & Banks",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FChristopher%20%26%20Banks%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5111816",shop:"clothes"},addTags:{brand:"Christopher & Banks","brand:wikidata":"Q5111816","brand:wikipedia":"en:Christopher & Banks",name:"Christopher & Banks",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Club Monaco":{name:"Club Monaco",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FClub-monaco-logo.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2979949",shop:"clothes"},addTags:{brand:"Club Monaco","brand:wikidata":"Q2979949","brand:wikipedia":"en:Club Monaco",name:"Club Monaco",shop:"clothes"},countryCodes:["ca","gb","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Colin's":{name:"Colin's",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q28729658",shop:"clothes"},addTags:{brand:"Colin's","brand:wikidata":"Q28729658",name:"Colin's",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Columbia":{name:"Columbia",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/378800000507623403/444cd8e60cf59b6fab58ba06c80c2a6c_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q1112588",shop:"clothes"},addTags:{brand:"Columbia","brand:wikidata":"Q1112588","brand:wikipedia":"en:Columbia Sportswear",name:"Columbia",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Cropp":{name:"Cropp",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q9196793",shop:"clothes"},addTags:{brand:"Cropp","brand:wikidata":"Q9196793","brand:wikipedia":"pl:Cropp",name:"Cropp",shop:"clothes"},countryCodes:["cs","hu","pl","ro","ru","sk","ua"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Cubus":{name:"Cubus",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q3439593",shop:"clothes"},addTags:{brand:"Cubus","brand:wikidata":"Q3439593","brand:wikipedia":"no:Cubus",name:"Cubus",shop:"clothes"},countryCodes:["de","fi","lv","no","pl","se"],terms:[],matchScore:2,suggestion:true},"shop/clothes/DXL Men's Apparel":{name:"DXL Men's Apparel",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q61981830",shop:"clothes"},addTags:{brand:"DXL Men's Apparel","brand:wikidata":"Q61981830",clothes:"oversize;men",name:"DXL Men's Apparel","operator:wikidata":"Q5050852","operator:wikipedia":"en:Destination XL Group",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Damart":{name:"Damart",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q3012602",shop:"clothes"},addTags:{brand:"Damart","brand:wikidata":"Q3012602","brand:wikipedia":"en:Damart",name:"Damart",shop:"clothes"},countryCodes:["be","fr","lu"],terms:[],matchScore:2,suggestion:true},"shop/clothes/David's Bridal":{name:"David's Bridal",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/davidsbridal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5230388",shop:"clothes"},addTags:{brand:"David's Bridal","brand:wikidata":"Q5230388","brand:wikipedia":"en:David's Bridal",name:"David's Bridal",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Desigual":{name:"Desigual",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/1105077887680548864/MXN9rGjm_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q83750",shop:"clothes"},addTags:{brand:"Desigual","brand:wikidata":"Q83750","brand:wikipedia":"en:Desigual",name:"Desigual",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Devred":{name:"Devred",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20DEVRED%201902.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3025542",shop:"clothes"},addTags:{brand:"Devred","brand:wikidata":"Q3025542","brand:wikipedia":"fr:Devred 1902",name:"Devred",shop:"clothes"},countryCodes:["be","fr","ma"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Diesel":{name:"Diesel",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/1059404541618253824/3amvryNj_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q158285",shop:"clothes"},addTags:{brand:"Diesel","brand:wikidata":"Q158285","brand:wikipedia":"en:Diesel (brand)",name:"Diesel",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Diverse":{name:"Diverse",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q11694298",shop:"clothes"},addTags:{brand:"Diverse","brand:wikidata":"Q11694298","brand:wikipedia":"pl:Diverse",name:"Diverse",shop:"clothes"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Dorothy Perkins":{name:"Dorothy Perkins",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/1124235640613351425/ZKhEqGyl_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q5298588",shop:"clothes"},addTags:{brand:"Dorothy Perkins","brand:wikidata":"Q5298588","brand:wikipedia":"en:Dorothy Perkins",name:"Dorothy Perkins",shop:"clothes"},countryCodes:["gb","gg","ie","im"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Dress Barn":{name:"Dress Barn",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FDressBarn%20new%20logo.gif&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5307031",shop:"clothes"},addTags:{brand:"Dress Barn","brand:wikidata":"Q5307031","brand:wikipedia":"en:Ascena Retail Group",name:"Dress Barn",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Dressmann":{name:"Dressmann",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q3357081",shop:"clothes"},addTags:{brand:"Dressmann","brand:wikidata":"Q3357081","brand:wikipedia":"en:Dressmann",name:"Dressmann",shop:"clothes"},countryCodes:["at","fi","no","se"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Eddie Bauer":{name:"Eddie Bauer",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q842174",shop:"clothes"},addTags:{brand:"Eddie Bauer","brand:wikidata":"Q842174","brand:wikipedia":"en:Eddie Bauer",name:"Eddie Bauer",shop:"clothes"},countryCodes:["ca","jp","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Engbers":{name:"Engbers",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FEngbers%20(Unternehmen)%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1290088",shop:"clothes"},addTags:{brand:"Engbers","brand:wikidata":"Q1290088","brand:wikipedia":"de:Engbers",name:"Engbers",shop:"clothes"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Ernsting's family":{name:"Ernsting's family",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Ernstingsfamily/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1361016",shop:"clothes"},addTags:{brand:"Ernsting's family","brand:wikidata":"Q1361016","brand:wikipedia":"de:Ernsting’s family",name:"Ernsting's family",shop:"clothes"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Esprit":{name:"Esprit",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FEsprit%20Logo%20neu.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q532746",shop:"clothes"},addTags:{brand:"Esprit","brand:wikidata":"Q532746","brand:wikipedia":"en:Esprit Holdings",name:"Esprit",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Etam":{name:"Etam",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q3059202",shop:"clothes"},addTags:{brand:"Etam","brand:wikidata":"Q3059202","brand:wikipedia":"en:Etam Développement",name:"Etam",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Express":{name:"Express",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FExpress%2C%20Inc.%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1384784",shop:"clothes"},addTags:{brand:"Express","brand:wikidata":"Q1384784","brand:wikipedia":"en:Express, Inc.",name:"Express",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Fat Face":{name:"Fat Face",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/1055013284485779458/dtR2OyFc_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5437186",shop:"clothes"},addTags:{brand:"Fat Face","brand:wikidata":"Q5437186","brand:wikipedia":"en:Fat Face",name:"Fat Face",shop:"clothes"},countryCodes:["gb","gg","ie"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Forever 21":{name:"Forever 21",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FForever%2021%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1060537",shop:"clothes"},addTags:{brand:"Forever 21","brand:wikidata":"Q1060537","brand:wikipedia":"en:Forever 21",name:"Forever 21",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Free People":{name:"Free People",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/FreePeople/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5499945",shop:"clothes"},addTags:{brand:"Free People","brand:wikidata":"Q5499945","brand:wikipedia":"en:Free People",name:"Free People",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/GU":{name:"GU",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/g.u.japan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5512642",shop:"clothes"},addTags:{brand:"GU","brand:wikidata":"Q5512642","brand:wikipedia":"en:GU (retailer)",name:"GU",shop:"clothes"},countryCodes:["cl","jp","tw"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Gant":{name:"Gant",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/gant/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1493667",shop:"clothes"},addTags:{brand:"Gant","brand:wikidata":"Q1493667","brand:wikipedia":"en:Gant (retailer)",name:"Gant",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Gap":{name:"Gap",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/GapJapan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q420822",shop:"clothes"},addTags:{brand:"Gap","brand:wikidata":"Q420822","brand:wikipedia":"en:Gap Inc.",name:"Gap",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Gerry Weber":{name:"Gerry Weber",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FGerry%20Weber%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q873447",shop:"clothes"},addTags:{brand:"Gerry Weber","brand:wikidata":"Q873447","brand:wikipedia":"en:Gerry Weber",name:"Gerry Weber",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Gina Laura":{name:"Gina Laura",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FGina%20Laura%20Logo.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2700576",shop:"clothes"},addTags:{brand:"Gina Laura","brand:wikidata":"Q2700576","brand:wikipedia":"de:Gina Laura",name:"Gina Laura",shop:"clothes"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Gloria Jeans":{name:"Gloria Jeans",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FGloria%20Jeans.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4139985",shop:"clothes"},addTags:{brand:"Gloria Jeans","brand:wikidata":"Q4139985","brand:wikipedia":"ru:Глория Джинс",name:"Gloria Jeans",shop:"clothes"},countryCodes:["ru","ua"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Gucci":{name:"Gucci",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/GUCCI/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q178516",shop:"clothes"},addTags:{brand:"Gucci","brand:wikidata":"Q178516","brand:wikipedia":"en:Gucci",name:"Gucci",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Guess":{name:"Guess",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Guess.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2470307",shop:"clothes"},addTags:{brand:"Guess","brand:wikidata":"Q2470307","brand:wikipedia":"en:Guess (clothing)",name:"Guess",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Gymboree":{name:"Gymboree",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/1018723545122131968/mBlwxTN2_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4039771",shop:"clothes"},addTags:{brand:"Gymboree","brand:wikidata":"Q4039771","brand:wikipedia":"en:Gymboree",name:"Gymboree",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Gémo":{name:"Gémo",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q3122954",shop:"clothes"},addTags:{brand:"Gémo","brand:wikidata":"Q3122954","brand:wikipedia":"fr:Gémo",name:"Gémo",shop:"clothes"},countryCodes:["be","ch","fr"],terms:[],matchScore:2,suggestion:true},"shop/clothes/H&M":{name:"H&M",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/hmhongkong/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q188326",shop:"clothes"},addTags:{brand:"H&M","brand:wikidata":"Q188326","brand:wikipedia":"en:H&M",name:"H&M",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Hallhuber":{name:"Hallhuber",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FHH%20LOGO%202013.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1571714",shop:"clothes"},addTags:{brand:"Hallhuber","brand:wikidata":"Q1571714","brand:wikipedia":"de:Hallhuber (Bekleidungshaus)",name:"Hallhuber",shop:"clothes"},countryCodes:["at","ch","de","lu","nl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Hanna Andersson":{name:"Hanna Andersson",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q17460802",shop:"clothes"},addTags:{brand:"Hanna Andersson","brand:wikidata":"Q17460802","brand:wikipedia":"en:Hanna Andersson",clothes:"baby;children;women",name:"Hanna Andersson",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Hollister":{name:"Hollister",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/1116351964030341120/DzjEYbxH_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q1257477",shop:"clothes"},addTags:{brand:"Hollister","brand:wikidata":"Q1257477","brand:wikipedia":"en:Hollister Co.",name:"Hollister",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Hot Topic":{name:"Hot Topic",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/hottopic/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9294032",shop:"clothes"},addTags:{brand:"Hot Topic","brand:wikidata":"Q9294032","brand:wikipedia":"en:Hot Topic",name:"Hot Topic",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Hugo Boss":{name:"Hugo Boss",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/981463273836089344/mZoBl9wy_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q491627",shop:"clothes"},addTags:{brand:"Hugo Boss","brand:wikidata":"Q491627","brand:wikipedia":"en:Hugo Boss",name:"Hugo Boss",shop:"clothes"},terms:["boss"],matchScore:2,suggestion:true},"shop/clothes/Hunkemöller":{name:"Hunkemöller",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FHunkemoeller%20Logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2604175",shop:"clothes"},addTags:{brand:"Hunkemöller","brand:wikidata":"Q2604175","brand:wikipedia":"en:Hunkemöller",name:"Hunkemöller",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Intimissimi":{name:"Intimissimi",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/intimissimi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q305404",shop:"clothes"},addTags:{brand:"Intimissimi","brand:wikidata":"Q305404","brand:wikipedia":"en:Intimissimi",clothes:"underwear",name:"Intimissimi",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/JBC":{name:"JBC",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q2671470",shop:"clothes"},addTags:{brand:"JBC","brand:wikidata":"Q2671470","brand:wikipedia":"nl:JBC",name:"JBC",shop:"clothes"},countryCodes:["be","lu"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Jack & Jones":{name:"Jack & Jones",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/2735852177/8e4633c7fe64dadc067689fa0064c9c6_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q6077665",shop:"clothes"},addTags:{brand:"Jack & Jones","brand:wikidata":"Q6077665","brand:wikipedia":"en:Jack & Jones",name:"Jack & Jones",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Jack Wills":{name:"Jack Wills",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/1121360723555299328/6uEb8cP1_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q6115814",shop:"clothes"},addTags:{brand:"Jack Wills","brand:wikidata":"Q6115814","brand:wikipedia":"en:Jack Wills",name:"Jack Wills",shop:"clothes"},countryCodes:["ae","gb","hk","ie","kw","lb","mo","sg","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Jeans Fritz":{name:"Jeans Fritz",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FJeans-Fritz-Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1686071",shop:"clothes"},addTags:{brand:"Jeans Fritz","brand:wikidata":"Q1686071","brand:wikipedia":"de:Jeans Fritz",name:"Jeans Fritz",shop:"clothes"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Jennyfer":{name:"Jennyfer",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q3177174",shop:"clothes"},addTags:{brand:"Jennyfer","brand:wikidata":"Q3177174","brand:wikipedia":"fr:Jennyfer",name:"Jennyfer",shop:"clothes"},countryCodes:["fr","it","lu"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Jet":{name:"Jet",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q61995123",shop:"clothes"},addTags:{brand:"Jet","brand:wikidata":"Q61995123",name:"Jet",shop:"clothes"},countryCodes:["za"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Jigsaw":{name:"Jigsaw",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/InsideJigsaw/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6192383",shop:"clothes"},addTags:{brand:"Jigsaw","brand:wikidata":"Q6192383","brand:wikipedia":"en:Jigsaw (clothing retailer)",name:"Jigsaw",shop:"clothes"},countryCodes:["au","gb","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Jos. A. Bank":{name:"Jos. A. Bank",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/1001953978790313984/rZx5Eh6N_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q6204078",shop:"clothes"},addTags:{brand:"Jos. A. Bank","brand:wikidata":"Q6204078","brand:wikipedia":"en:JoS. A. Bank Clothiers",name:"Jos. A. Bank",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Joules":{name:"Joules",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Joules/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25351738",shop:"clothes"},addTags:{brand:"Joules","brand:wikidata":"Q25351738","brand:wikipedia":"en:Joules (clothing)",name:"Joules",shop:"clothes"},countryCodes:["gb","gg","ie"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Justice":{name:"Justice",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q7857512",shop:"clothes"},addTags:{brand:"Justice","brand:wikidata":"Q7857512","brand:wikipedia":"en:Tween Brands",name:"Justice",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/KappAhl":{name:"KappAhl",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/kappahl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4349016",shop:"clothes"},addTags:{brand:"KappAhl","brand:wikidata":"Q4349016","brand:wikipedia":"sv:Kappahl",name:"KappAhl",shop:"clothes"},countryCodes:["fi","no","pl","se"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Kate Spade New York":{name:"Kate Spade New York",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/katespadeny/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6375797",shop:"clothes"},addTags:{brand:"Kate Spade New York","brand:wikidata":"Q6375797","brand:wikipedia":"en:Kate Spade New York",name:"Kate Spade New York",shop:"clothes"},countryCodes:["ca","us"],terms:["kate spade","kate spade ny"],matchScore:2,suggestion:true},"shop/clothes/KiK":{name:"KiK",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FKiK-Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q883965",shop:"clothes"},addTags:{brand:"KiK","brand:wikidata":"Q883965","brand:wikipedia":"en:KiK",name:"KiK",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Kiabi":{name:"Kiabi",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q3196299",shop:"clothes"},addTags:{brand:"Kiabi","brand:wikidata":"Q3196299","brand:wikipedia":"fr:Kiabi",name:"Kiabi",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/LC Waikiki":{name:"LC Waikiki",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/lcwaikiki/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3205965",shop:"clothes"},addTags:{brand:"LC Waikiki","brand:wikidata":"Q3205965","brand:wikipedia":"fr:LC Waikiki",name:"LC Waikiki",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/La Senza":{name:"La Senza",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/1112757964300083208/j-i4NaSr_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q3212802",shop:"clothes"},addTags:{brand:"La Senza","brand:wikidata":"Q3212802","brand:wikipedia":"en:La Senza",name:"La Senza",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Lacoste":{name:"Lacoste",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Lacoste/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q309031",shop:"clothes"},addTags:{brand:"Lacoste","brand:wikidata":"Q309031","brand:wikipedia":"en:Lacoste",name:"Lacoste",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Lane Bryant":{name:"Lane Bryant",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q6485350",shop:"clothes"},addTags:{brand:"Lane Bryant","brand:wikidata":"Q6485350","brand:wikipedia":"en:Lane Bryant",clothes:"oversize;women",name:"Lane Bryant",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Levi's":{name:"Levi's",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLevi's%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q127962",shop:"clothes"},addTags:{brand:"Levi's","brand:wikidata":"Q127962","brand:wikipedia":"en:Levi Strauss & Co.",clothes:"denim;men;women",name:"Levi's",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Lids":{name:"Lids",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Lids/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19841609",shop:"clothes"},addTags:{brand:"Lids","brand:wikidata":"Q19841609","brand:wikipedia":"en:Lids (store)",clothes:"hats",name:"Lids",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Lindex":{name:"Lindex",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/lindex/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1786717",shop:"clothes"},addTags:{brand:"Lindex","brand:wikidata":"Q1786717","brand:wikipedia":"en:Lindex",name:"Lindex",shop:"clothes"},countryCodes:["cz","ee","fi","no","se","sk"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Loft":{name:"Loft",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/LOFT/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62075137",shop:"clothes"},addTags:{brand:"Loft","brand:wikidata":"Q62075137",clothes:"women",name:"Loft",operator:"Ann Inc.","operator:wikidata":"Q4766699","operator:wikipedia":"en:Ann Inc.",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Louis Vuitton":{name:"Louis Vuitton",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/LouisVuitton/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q191485",shop:"clothes"},addTags:{brand:"Louis Vuitton","brand:wikidata":"Q191485","brand:wikipedia":"en:Louis Vuitton",name:"Louis Vuitton",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/M&Co":{name:"M&Co",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/3060281697/0cf4741ed2fcb2ab442637e226a3d538_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q6711808",shop:"clothes"},addTags:{brand:"M&Co","brand:wikidata":"Q6711808","brand:wikipedia":"en:M&Co.",name:"M&Co",shop:"clothes"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Mango":{name:"Mango",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMango-logo.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q136503",shop:"clothes"},addTags:{brand:"Mango","brand:wikidata":"Q136503","brand:wikipedia":"en:Mango (retailer)",name:"Mango",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Marc O'Polo":{name:"Marc O'Polo",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMarc%20O%E2%80%99Polo%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1892752",shop:"clothes"},addTags:{brand:"Marc O'Polo","brand:wikidata":"Q1892752","brand:wikipedia":"en:Marc O'Polo",name:"Marc O'Polo",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Mark's":{name:"Mark's",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMark's%20Work%20Wearhouse%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q6766373",shop:"clothes"},addTags:{brand:"Mark's","brand:wikidata":"Q6766373","brand:wikipedia":"en:Mark's",name:"Mark's",shop:"clothes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Marks & Spencer":{name:"Marks & Spencer",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/marksandspencerrussia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q714491",shop:"clothes"},addTags:{brand:"Marks & Spencer","brand:wikidata":"Q714491","brand:wikipedia":"en:Marks & Spencer",name:"Marks & Spencer",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Massimo Dutti":{name:"Massimo Dutti",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/massimodutti/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q788231",shop:"clothes"},addTags:{brand:"Massimo Dutti","brand:wikidata":"Q788231","brand:wikipedia":"en:Massimo Dutti",name:"Massimo Dutti",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Matalan":{name:"Matalan",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/1059530620374867970/wCJvqGG5_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q12061509",shop:"clothes"},addTags:{brand:"Matalan","brand:wikidata":"Q12061509","brand:wikipedia":"en:Matalan",name:"Matalan",shop:"clothes"},countryCodes:["ae","gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Maurices":{name:"Maurices",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/maurices/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6793571",shop:"clothes"},addTags:{brand:"Maurices","brand:wikidata":"Q6793571","brand:wikipedia":"en:Maurices",name:"Maurices",shop:"clothes"},countryCodes:["ca","fr","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Max Mara":{name:"Max Mara",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q1151774",shop:"clothes"},addTags:{brand:"Max Mara","brand:wikidata":"Q1151774","brand:wikipedia":"en:Max Mara",name:"Max Mara",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Men's Wearhouse":{name:"Men's Wearhouse",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q57405513",shop:"clothes"},addTags:{brand:"Men's Wearhouse","brand:wikidata":"Q57405513",clothes:"suits",name:"Men's Wearhouse",shop:"clothes"},terms:["mens warehouse"],matchScore:2,suggestion:true},"shop/clothes/Mexx":{name:"Mexx",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMexx%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1837290",shop:"clothes"},addTags:{brand:"Mexx","brand:wikidata":"Q1837290","brand:wikipedia":"en:Mexx",name:"Mexx",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Michael Kors":{name:"Michael Kors",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMichael%20Kors%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q19572998",shop:"clothes"},addTags:{brand:"Michael Kors","brand:wikidata":"Q19572998","brand:wikipedia":"en:Capri Holdings",name:"Michael Kors",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Monsoon":{name:"Monsoon",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/1014248943121813505/qNRJq7zh_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3069980",shop:"clothes"},addTags:{brand:"Monsoon","brand:wikidata":"Q3069980","brand:wikipedia":"en:Monsoon Accessorize",name:"Monsoon",shop:"clothes"},countryCodes:["gb","gg","ie"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Mr Price":{name:"Mr Price",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q6929120",shop:"clothes"},addTags:{brand:"Mr Price","brand:wikidata":"Q6929120","brand:wikipedia":"en:Mr. Price",name:"Mr Price",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/NKD":{name:"NKD",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2F150707%20NKD%20Logog%20Wikipedia.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q927272",shop:"clothes"},addTags:{brand:"NKD","brand:wikidata":"Q927272","brand:wikipedia":"de:NKD",name:"NKD",shop:"clothes"},countryCodes:["at","de","it","si"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Naf Naf":{name:"Naf Naf",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q3334188",shop:"clothes"},addTags:{brand:"Naf Naf","brand:wikidata":"Q3334188","brand:wikipedia":"fr:Naf Naf",name:"Naf Naf",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/New Look":{name:"New Look",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/1057923508460761088/9Gem24tH_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q12063852",shop:"clothes"},addTags:{brand:"New Look","brand:wikidata":"Q12063852","brand:wikipedia":"en:New Look (company)",name:"New Look",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/New Yorker":{name:"New Yorker",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FNew%20Yorker.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q706421",shop:"clothes"},addTags:{brand:"New Yorker","brand:wikidata":"Q706421","brand:wikipedia":"en:New Yorker (clothing)",name:"New Yorker",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Next":{name:"Next",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/1047405356635344896/fbsYbE_N_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q246655",shop:"clothes"},addTags:{brand:"Next","brand:wikidata":"Q246655","brand:wikipedia":"en:Next plc",name:"Next",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Nike":{name:"Nike",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/nike/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q483915",shop:"clothes"},addTags:{brand:"Nike","brand:wikidata":"Q483915","brand:wikipedia":"en:Nike, Inc.",name:"Nike",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Nordstrom Rack":{name:"Nordstrom Rack",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCurrent%20Nordstrom%20Rack%20Logo.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q21463374",shop:"clothes"},addTags:{brand:"Nordstrom Rack","brand:wikidata":"Q21463374","brand:wikipedia":"en:Nordstrom Rack",name:"Nordstrom Rack",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/OVS":{name:"OVS",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/OVS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2042514",shop:"clothes"},addTags:{brand:"OVS","brand:wikidata":"Q2042514","brand:wikipedia":"en:OVS (company)",name:"OVS",shop:"clothes"},countryCodes:["at","ch","fr","it","si"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Okaïdi":{name:"Okaïdi",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q3350027",shop:"clothes"},addTags:{brand:"Okaïdi","brand:wikidata":"Q3350027","brand:wikipedia":"fr:Okaïdi",name:"Okaïdi",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Old Navy":{name:"Old Navy",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FOld%20Navy%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2735242",shop:"clothes"},addTags:{brand:"Old Navy","brand:wikidata":"Q2735242","brand:wikipedia":"en:Old Navy",name:"Old Navy",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Only":{name:"Only",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q61799370",shop:"clothes"},addTags:{brand:"Only","brand:wikidata":"Q61799370",name:"Only","operator:wikidata":"Q28172489","operator:wikipedia":"en:Bestseller (company)",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Orchestra":{name:"Orchestra",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q28042940",shop:"clothes"},addTags:{brand:"Orchestra","brand:wikidata":"Q28042940","brand:wikipedia":"fr:Orchestra Prémaman",name:"Orchestra",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Orsay":{name:"Orsay",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FORSAY.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q883245",shop:"clothes"},addTags:{brand:"Orsay","brand:wikidata":"Q883245","brand:wikipedia":"de:Orsay (Modeunternehmen)",name:"Orsay",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Outfit":{name:"Outfit",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q7112061",shop:"clothes"},addTags:{brand:"Outfit","brand:wikidata":"Q7112061","brand:wikipedia":"en:Outfit (retailer)",name:"Outfit",shop:"clothes"},countryCodes:["de","gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Oysho":{name:"Oysho",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLOGO%20oysho%20wikipedia.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3327046",shop:"clothes"},addTags:{brand:"Oysho","brand:wikidata":"Q3327046","brand:wikipedia":"en:Oysho",name:"Oysho",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/PacSun":{name:"PacSun",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/763503514890842112/oY_iKSnB_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7121857",shop:"clothes"},addTags:{brand:"PacSun","brand:wikidata":"Q7121857","brand:wikipedia":"en:PacSun",name:"PacSun",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Palmers":{name:"Palmers",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FPalmerslogo.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1509985",shop:"clothes"},addTags:{brand:"Palmers","brand:wikidata":"Q1509985","brand:wikipedia":"de:Palmers",name:"Palmers",shop:"clothes"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Peacocks":{name:"Peacocks",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/peacocksclothing/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7157762",shop:"clothes"},addTags:{brand:"Peacocks","brand:wikidata":"Q7157762","brand:wikipedia":"en:Peacocks (clothing)",name:"Peacocks",shop:"clothes"},countryCodes:["cy","gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Peek & Cloppenburg":{name:"Peek & Cloppenburg",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Peek%20%26%20Cloppenburg.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2066959",shop:"clothes"},addTags:{brand:"Peek & Cloppenburg","brand:wikidata":"Q2066959","brand:wikipedia":"en:Peek & Cloppenburg",name:"Peek & Cloppenburg",shop:"clothes"},countryCodes:["at","be","de","nl","pl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Pep":{name:"Pep",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q7166182",shop:"clothes"},addTags:{brand:"Pep","brand:wikidata":"Q7166182","brand:wikipedia":"en:Pep (store)",name:"Pep",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Pepco":{name:"Pepco",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/PEPCOpl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11815580",shop:"clothes"},addTags:{brand:"Pepco","brand:wikidata":"Q11815580","brand:wikipedia":"pl:Pepco",name:"Pepco",shop:"clothes"},countryCodes:["cz","hu","pl","ro","sk"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Petit Bateau":{name:"Petit Bateau",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q3377090",shop:"clothes"},addTags:{brand:"Petit Bateau","brand:wikidata":"Q3377090","brand:wikipedia":"en:Petit Bateau",name:"Petit Bateau",shop:"clothes"},countryCodes:["be","de","fr","gb","it","lu"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Phase Eight":{name:"Phase Eight",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/826031206961647617/L_YJKtfM_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q17020730",shop:"clothes"},addTags:{brand:"Phase Eight","brand:wikidata":"Q17020730","brand:wikipedia":"en:Phase Eight",name:"Phase Eight",shop:"clothes"},countryCodes:["ch","de","gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Pimkie":{name:"Pimkie",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q1758066",shop:"clothes"},addTags:{brand:"Pimkie","brand:wikidata":"Q1758066","brand:wikipedia":"en:Pimkie",name:"Pimkie",shop:"clothes"},countryCodes:["at","be","de","es","fr","it"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Plato's Closet":{name:"Plato's Closet",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/platoscloset/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61779112",shop:"clothes"},addTags:{brand:"Plato's Closet","brand:wikidata":"Q61779112",name:"Plato's Closet",operator:"Winmark","operator:wikidata":"Q28048853","operator:wikipedia":"en:Winmark",second_hand:"only",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Primark":{name:"Primark",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Primark/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q137023",shop:"clothes"},addTags:{brand:"Primark","brand:wikidata":"Q137023","brand:wikipedia":"en:Primark",name:"Primark",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Promod":{name:"Promod",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FPromod-Boutique%20Francaise.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3407429",shop:"clothes"},addTags:{brand:"Promod","brand:wikidata":"Q3407429","brand:wikipedia":"en:Promod",name:"Promod",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Pull & Bear":{name:"Pull & Bear",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/1065168584450674690/8NL1vlQR_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q691029",shop:"clothes"},addTags:{brand:"Pull & Bear","brand:wikidata":"Q691029","brand:wikipedia":"en:Pull&Bear",name:"Pull & Bear",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Puma":{name:"Puma",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/playitagainsports/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7203029",shop:"clothes"},addTags:{brand:"Puma","brand:wikidata":"Q7203029","brand:wikipedia":"en:Puma (brand)",name:"Puma",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Rainbow":{name:"Rainbow",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FRainbow-logo.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q7284708",shop:"clothes"},addTags:{brand:"Rainbow","brand:wikidata":"Q7284708","brand:wikipedia":"en:Rainbow Shops",name:"Rainbow",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Reebok":{name:"Reebok",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/ReebokUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q466183",shop:"clothes"},addTags:{brand:"Reebok","brand:wikidata":"Q466183","brand:wikipedia":"en:Reebok",name:"Reebok",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Reitmans":{name:"Reitmans",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q7310506",shop:"clothes"},addTags:{brand:"Reitmans","brand:wikidata":"Q7310506","brand:wikipedia":"en:Reitmans",name:"Reitmans",shop:"clothes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Reserved":{name:"Reserved",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Reserved/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21809354",shop:"clothes"},addTags:{brand:"Reserved","brand:wikidata":"Q21809354","brand:wikipedia":"en:Reserved",name:"Reserved",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/River Island":{name:"River Island",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/1131447933407252485/bMfTsmgx_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q2670328",shop:"clothes"},addTags:{brand:"River Island","brand:wikidata":"Q2670328","brand:wikipedia":"en:River Island",name:"River Island",shop:"clothes"},countryCodes:["gb","ie","im","nl","pl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Ross":{name:"Ross",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/666413791169503233/rCEE7G_S_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3442791",shop:"clothes"},addTags:{brand:"Ross","brand:wikidata":"Q3442791","brand:wikipedia":"en:Ross Stores",name:"Ross",official_name:"Ross Dress for Less",shop:"clothes"},countryCodes:["us"],terms:["ross dress for less"],matchScore:2,suggestion:true},"shop/clothes/Sela":{name:"Sela",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/sela.shop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62075111",shop:"clothes"},addTags:{brand:"Sela","brand:wikidata":"Q62075111",name:"Sela",shop:"clothes"},countryCodes:["kg","ru"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Sergent Major":{name:"Sergent Major",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/sergent.major.officiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62521738",shop:"clothes"},addTags:{brand:"Sergent Major","brand:wikidata":"Q62521738","brand:wikipedia":"fr:Sergent Major (entreprise)",clothes:"babies;children",name:"Sergent Major",shop:"clothes"},countryCodes:["be","de","es","fr","gb","it"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Sisley":{name:"Sisley",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSisley%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q12054325",shop:"clothes"},addTags:{brand:"Sisley","brand:wikidata":"Q12054325","brand:wikipedia":"cs:Sisley",name:"Sisley",operator:"Benetton Group","operator:wikidata":"Q817139","operator:wikipedia":"en:Benetton Group",shop:"clothes"},countryCodes:["at","ch","de","hr","it","ru"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Springfield":{name:"Springfield",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMarca-springfield.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q958209",shop:"clothes"},addTags:{brand:"Springfield","brand:wikidata":"Q958209","brand:wikipedia":"es:Springfield (cadena de tiendas)",name:"Springfield",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Stefanel":{name:"Stefanel",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Stefanel.Official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2338087",shop:"clothes"},addTags:{brand:"Stefanel","brand:wikidata":"Q2338087","brand:wikipedia":"ro:Stefanel (companie)",name:"Stefanel",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Stradivarius":{name:"Stradivarius",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/1110919224480931841/ptq3UAwr_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q3322945",shop:"clothes"},addTags:{brand:"Stradivarius","brand:wikidata":"Q3322945","brand:wikipedia":"en:Stradivarius (clothing brand)",name:"Stradivarius",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Street One":{name:"Street One",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q61997265",shop:"clothes"},addTags:{brand:"Street One","brand:wikidata":"Q61997265",name:"Street One",operator:"CBR Fashion Holding","operator:wikidata":"Q1022989","operator:wikipedia":"de:CBR Fashion Holding",shop:"clothes"},countryCodes:["at","be","bg","ch","cz","de","dk","es","fi","fr","hr","hu","ie","it","lt","lu","lv","nl","no","pl","ro","se","si","sk"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Suburbia":{name:"Suburbia",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q6134992",shop:"clothes"},addTags:{brand:"Suburbia","brand:wikidata":"Q6134992","brand:wikipedia":"en:Suburbia (department store)",name:"Suburbia",shop:"clothes"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Superdry":{name:"Superdry",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/1021773831546056704/C5cZqYeP_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1684445",shop:"clothes"},addTags:{brand:"Superdry","brand:wikidata":"Q1684445","brand:wikipedia":"en:Superdry",name:"Superdry",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/TJ Maxx":{name:"TJ Maxx",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/578229320994295808/nAHcV1yx_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q10860683",shop:"clothes"},addTags:{brand:"TJ Maxx","brand:wikidata":"Q10860683","brand:wikipedia":"en:TJ Maxx",name:"TJ Maxx",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/TK Maxx":{name:"TK Maxx",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/1078275977426468866/QgWrQjee_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q23823668",shop:"clothes"},addTags:{brand:"TK Maxx","brand:wikidata":"Q23823668","brand:wikipedia":"en:TK Maxx",name:"TK Maxx",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Takko":{name:"Takko",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FTakkoLogo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1371302",shop:"clothes"},addTags:{brand:"Takko","brand:wikidata":"Q1371302","brand:wikipedia":"de:Takko",name:"Takko",shop:"clothes"},countryCodes:["at","cz","de","hu","nl"],terms:["takko fashion"],matchScore:2,suggestion:true},"shop/clothes/Talbots":{name:"Talbots",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/648526811479961600/EcfZDBkl_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q7679064",shop:"clothes"},addTags:{brand:"Talbots","brand:wikidata":"Q7679064","brand:wikipedia":"en:Talbots",name:"Talbots",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Tally Weijl":{name:"Tally Weijl",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FTALLY%20WEiJL%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q689695",shop:"clothes"},addTags:{brand:"Tally Weijl","brand:wikidata":"Q689695","brand:wikipedia":"en:Tally Weijl",name:"Tally Weijl",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Tati":{name:"Tati",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Tati/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3516026",shop:"clothes"},addTags:{brand:"Tati","brand:wikidata":"Q3516026","brand:wikipedia":"fr:Tati (entreprise)",name:"Tati",shop:"clothes"},countryCodes:["dz","fr"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Tezenis":{name:"Tezenis",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/tezenis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28056374",shop:"clothes"},addTags:{brand:"Tezenis","brand:wikidata":"Q28056374",name:"Tezenis",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/The Children's Place":{name:"The Children's Place",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/200694312/Twitter_Logo_TCP_lockup_2995_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3520257",shop:"clothes"},addTags:{brand:"The Children's Place","brand:wikidata":"Q3520257","brand:wikipedia":"en:The Children's Place",name:"The Children's Place",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/The North Face":{name:"The North Face",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/1042076860023275523/9qahAU7A_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q152784",shop:"clothes"},addTags:{brand:"The North Face","brand:wikidata":"Q152784","brand:wikipedia":"en:The North Face",name:"The North Face",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/The Sting":{name:"The Sting",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q2518794",shop:"clothes"},addTags:{brand:"The Sting","brand:wikidata":"Q2518794","brand:wikipedia":"nl:The Sting Companies",name:"The Sting",shop:"clothes"},countryCodes:["be","de","gb","nl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Timberland":{name:"Timberland",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q1539185",shop:"clothes"},addTags:{brand:"Timberland","brand:wikidata":"Q1539185","brand:wikipedia":"en:The Timberland Company",name:"Timberland",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Tom Tailor":{name:"Tom Tailor",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/tomtailor/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q571206",shop:"clothes"},addTags:{brand:"Tom Tailor","brand:wikidata":"Q571206","brand:wikipedia":"en:Tom Tailor",name:"Tom Tailor",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Tommy Bahama":{name:"Tommy Bahama",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/817443720060506113/MAMMKuhr_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3531299",shop:"clothes"},addTags:{brand:"Tommy Bahama","brand:wikidata":"Q3531299","brand:wikipedia":"en:Tommy Bahama",name:"Tommy Bahama",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Tommy Hilfiger":{name:"Tommy Hilfiger",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/1029280250331627520/VUFItzJv_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q634881",shop:"clothes"},addTags:{brand:"Tommy Hilfiger","brand:wikidata":"Q634881","brand:wikipedia":"en:Tommy Hilfiger (company)",name:"Tommy Hilfiger",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Topshop":{name:"Topshop",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/1121788834755125248/dla2FNMm_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q1893576",shop:"clothes"},addTags:{brand:"Topshop","brand:wikidata":"Q1893576","brand:wikipedia":"en:Topshop",name:"Topshop",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Torrid":{name:"Torrid",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q7827120",shop:"clothes"},addTags:{brand:"Torrid","brand:wikidata":"Q7827120","brand:wikipedia":"en:Torrid (clothing retailer)",name:"Torrid",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Triumph":{name:"Triumph",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FTriumph%20International%20Logo%202008.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q671216",shop:"clothes"},addTags:{brand:"Triumph","brand:wikidata":"Q671216","brand:wikipedia":"en:Triumph International",name:"Triumph",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Truworths":{name:"Truworths",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q24233998",shop:"clothes"},addTags:{brand:"Truworths","brand:wikidata":"Q24233998","brand:wikipedia":"en:Truworths",name:"Truworths",shop:"clothes"},countryCodes:["za"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Ulla Popken":{name:"Ulla Popken",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FUlla%20Popken%20neu.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2475146",shop:"clothes"},addTags:{brand:"Ulla Popken","brand:wikidata":"Q2475146","brand:wikipedia":"en:Ulla Popken",name:"Ulla Popken",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Uniqlo":{name:"Uniqlo",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/uniqlo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q26070",shop:"clothes"},addTags:{brand:"Uniqlo","brand:wikidata":"Q26070","brand:wikipedia":"en:Uniqlo",name:"Uniqlo",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/United Colors of Benetton":{name:"United Colors of Benetton",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/BenettonItalia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q817139",shop:"clothes"},addTags:{brand:"United Colors of Benetton","brand:wikidata":"Q817139","brand:wikipedia":"en:Benetton Group",name:"United Colors of Benetton",shop:"clothes"},terms:["benetton"],matchScore:2,suggestion:true},"shop/clothes/Urban Outfitters":{name:"Urban Outfitters",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/761568776471052289/Wv_Cpxbw_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3552193",shop:"clothes"},addTags:{brand:"Urban Outfitters","brand:wikidata":"Q3552193","brand:wikipedia":"en:Urban Outfitters",name:"Urban Outfitters",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Vero Moda":{name:"Vero Moda",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBS%20DK.JPG&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q594721",shop:"clothes"},addTags:{brand:"Vero Moda","brand:wikidata":"Q594721","brand:wikipedia":"en:Bestseller (company)",name:"Vero Moda",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Victoria's Secret":{name:"Victoria's Secret",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/victoriassecret/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q332477",shop:"clothes"},addTags:{brand:"Victoria's Secret","brand:wikidata":"Q332477","brand:wikipedia":"en:Victoria's Secret",clothes:"underwear;women",name:"Victoria's Secret",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Volcom":{name:"Volcom",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Volcom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2021416",shop:"clothes"},addTags:{brand:"Volcom","brand:wikidata":"Q2021416","brand:wikipedia":"en:Volcom",name:"Volcom",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/WE":{name:"WE",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q1987861",shop:"clothes"},addTags:{brand:"WE","brand:wikidata":"Q1987861","brand:wikipedia":"en:WE (clothing)",name:"WE",shop:"clothes"},countryCodes:["be","ch","de","nl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/White House Black Market":{name:"White House Black Market",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FWHBM%20Logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q7994858",shop:"clothes"},addTags:{brand:"White House Black Market","brand:wikidata":"Q7994858","brand:wikipedia":"en:White House Black Market",name:"White House Black Market",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/White Stuff":{name:"White Stuff",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/633617979469524993/ydbUTjT3_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7995442",shop:"clothes"},addTags:{brand:"White Stuff","brand:wikidata":"Q7995442","brand:wikipedia":"en:White Stuff Clothing",name:"White Stuff",shop:"clothes"},countryCodes:["de","dk","gb","gg"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Wibra":{name:"Wibra",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FWibra%20Wallonie%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q943405",shop:"clothes"},addTags:{brand:"Wibra","brand:wikidata":"Q943405","brand:wikipedia":"en:Wibra",name:"Wibra",shop:"clothes"},countryCodes:["be","nl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Winners":{name:"Winners",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Winners/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q845257",shop:"clothes"},addTags:{brand:"Winners","brand:wikidata":"Q845257","brand:wikipedia":"en:Winners",name:"Winners",shop:"clothes"},countryCodes:["ca","es"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Woolworths":{name:"Woolworths",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q8033997",shop:"clothes"},addTags:{brand:"Woolworths","brand:wikidata":"Q8033997","brand:wikipedia":"en:Woolworths Holdings Limited",name:"Woolworths",shop:"clothes"},countryCodes:["za"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Yamamay":{name:"Yamamay",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FYamamay%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2599214",shop:"clothes"},addTags:{brand:"Yamamay","brand:wikidata":"Q2599214","brand:wikipedia":"it:Yamamay",name:"Yamamay",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Zara":{name:"Zara",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/zara/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q147662",shop:"clothes"},addTags:{brand:"Zara","brand:wikidata":"Q147662","brand:wikipedia":"en:Zara (retailer)",name:"Zara",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Zeeman":{name:"Zeeman",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/zeemantextielsupers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q184399",shop:"clothes"},addTags:{brand:"Zeeman","brand:wikidata":"Q184399","brand:wikipedia":"en:Zeeman (store)",name:"Zeeman",shop:"clothes"},countryCodes:["be","de","fr","lu","nl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Zumiez":{name:"Zumiez",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q8075252",shop:"clothes"},addTags:{brand:"Zumiez","brand:wikidata":"Q8075252","brand:wikipedia":"en:Zumiez",name:"Zumiez",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/mister*lady":{name:"mister*lady",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Mister*lady.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q18640136",shop:"clothes"},addTags:{brand:"mister*lady","brand:wikidata":"Q18640136","brand:wikipedia":"de:Mister*lady",name:"mister*lady",shop:"clothes"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/clothes/rue21":{name:"rue21",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/793801428380835840/XsjVskJq_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7377762",shop:"clothes"},addTags:{brand:"rue21","brand:wikidata":"Q7377762","brand:wikipedia":"en:Rue21",name:"rue21",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/s.Oliver":{name:"s.Oliver",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FS.Oliver.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q265056",shop:"clothes"},addTags:{brand:"s.Oliver","brand:wikidata":"Q265056","brand:wikipedia":"en:S.Oliver",name:"s.Oliver",shop:"clothes"},countryCodes:["at","be","de","fr","hr"],terms:[],matchScore:2,suggestion:true},"shop/clothes/しまむら":{name:"しまむら",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q7758173",shop:"clothes"},addTags:{brand:"しまむら","brand:en":"Shimamura","brand:ja":"しまむら","brand:wikidata":"Q7758173","brand:wikipedia":"ja:しまむら",name:"しまむら","name:en":"Shimamura","name:ja":"しまむら",shop:"clothes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/clothes/はるやま":{name:"はるやま",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q11275918",shop:"clothes"},addTags:{brand:"はるやま","brand:en":"Haruyama","brand:ja":"はるやま","brand:wikidata":"Q11275918","brand:wikipedia":"ja:はるやま商事",name:"はるやま","name:en":"Haruyama","name:ja":"はるやま",shop:"clothes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/clothes/ユニクロ":{name:"ユニクロ",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/uniqlo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q26070",shop:"clothes"},addTags:{brand:"ユニクロ","brand:en":"UNIQLO","brand:ja":"ユニクロ","brand:wikidata":"Q26070","brand:wikipedia":"en:Uniqlo",name:"ユニクロ","name:en":"UNIQLO","name:ja":"ユニクロ",shop:"clothes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/clothes/ライトオン":{name:"ライトオン",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/righton.co.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11346416",shop:"clothes"},addTags:{brand:"ライトオン","brand:en":"Right-on","brand:ja":"ライトオン","brand:wikidata":"Q11346416","brand:wikipedia":"ja:ライトオン",name:"ライトオン","name:en":"Right-on","name:ja":"ライトオン",shop:"clothes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/clothes/ワークマン":{name:"ワークマン",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q11351660",shop:"clothes"},addTags:{brand:"ワークマン","brand:en":"Workman","brand:ja":"ワークマン","brand:wikidata":"Q11351660","brand:wikipedia":"ja:ワークマン",name:"ワークマン","name:en":"Workman","name:ja":"ワークマン",shop:"clothes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/clothes/洋服の青山":{name:"洋服の青山",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/AoyamaOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11661241",shop:"clothes"},addTags:{brand:"洋服の青山","brand:en":"Aoyama Tailor","brand:ja":"洋服の青山","brand:wikidata":"Q11661241","brand:wikipedia":"ja:青山商事",name:"洋服の青山","name:en":"Aoyama Tailor","name:ja":"洋服の青山",shop:"clothes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/coffee/Nespresso":{name:"Nespresso",icon:"maki-shop",imageURL:"https://graph.facebook.com/nespresso/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q301301",shop:"coffee"},addTags:{brand:"Nespresso","brand:wikidata":"Q301301","brand:wikipedia":"en:Nespresso",name:"Nespresso",shop:"coffee"},terms:[],matchScore:2,suggestion:true},"shop/coffee/Tchibo":{name:"Tchibo",icon:"maki-shop",imageURL:"https://graph.facebook.com/tchibo.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q564213",shop:"coffee"},addTags:{brand:"Tchibo","brand:wikidata":"Q564213","brand:wikipedia":"de:Tchibo",name:"Tchibo",shop:"coffee"},terms:[],matchScore:2,suggestion:true},"shop/computer/PC World":{name:"PC World",icon:"fas-laptop",imageURL:"https://graph.facebook.com/curryspcworld/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7118727",shop:"computer"},addTags:{brand:"PC World","brand:wikidata":"Q7118727","brand:wikipedia":"en:PC World (retailer)",name:"PC World",shop:"computer"},terms:[],matchScore:2,suggestion:true},"shop/confectionery/Adyar Ananda Bhavan":{name:"Adyar Ananda Bhavan",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/a2b.officialpage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15178238",shop:"confectionery"},addTags:{brand:"Adyar Ananda Bhavan","brand:wikidata":"Q15178238","brand:wikipedia":"en:Adyar Ananda Bhavan",name:"Adyar Ananda Bhavan",shop:"confectionery"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"shop/confectionery/Hemmakvall":{name:"Hemmakvall",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/hemmakvall/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10521791",shop:"confectionery"},addTags:{"brand:wikidata":"Q10521791","brand:wikipedia":"sv:Hemmakväll",name:"Hemmakväll",shop:"confectionery"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/confectionery/Hussel":{name:"Hussel",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/HusselConfiserie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17123688",shop:"confectionery"},addTags:{brand:"Hussel","brand:wikidata":"Q17123688","brand:wikipedia":"de:Hussel",name:"Hussel",shop:"confectionery"},terms:[],matchScore:2,suggestion:true},"shop/confectionery/Jamin":{name:"Jamin",icon:"maki-confectionery",geometry:["point","area"],tags:{"brand:wikidata":"Q2291848",shop:"confectionery"},addTags:{brand:"Jamin","brand:wikidata":"Q2291848","brand:wikipedia":"nl:Jamin",name:"Jamin",shop:"confectionery"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/confectionery/See's Candies":{name:"See's Candies",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/Sees.Candies/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2103510",shop:"confectionery"},addTags:{brand:"See's Candies","brand:wikidata":"Q2103510","brand:wikipedia":"en:See's Candies",name:"See's Candies",shop:"confectionery"},terms:[],matchScore:2,suggestion:true},"shop/confectionery/Thorntons":{name:"Thorntons",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/Thorntons.Official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q683102",shop:"confectionery"},addTags:{brand:"Thorntons","brand:wikidata":"Q683102","brand:wikipedia":"en:Thorntons",name:"Thorntons",shop:"confectionery"},terms:[],matchScore:2,suggestion:true},"shop/confectionery/Вацак":{name:"Вацак",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/Vatsak.KD/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q30966576",shop:"confectionery"},addTags:{brand:"Вацак","brand:wikidata":"Q30966576","brand:wikipedia":"uk:Кондитерський Дім «Вацак»",name:"Вацак",shop:"confectionery"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/confectionery/シャトレーゼ":{name:"シャトレーゼ",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/chateraise.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11307696",shop:"confectionery"},addTags:{brand:"シャトレーゼ","brand:en":"Chateraise","brand:ja":"シャトレーゼ","brand:wikidata":"Q11307696","brand:wikipedia":"ja:シャトレーゼ",name:"シャトレーゼ","name:en":"Chateraise","name:ja":"シャトレーゼ",shop:"confectionery"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/7-Eleven":{name:"7-Eleven",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/7ElevenMexico/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q259340",shop:"convenience"},addTags:{brand:"7-Eleven","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"7-Eleven",shop:"convenience"},terms:["7-11","seven eleven"],matchScore:2,suggestion:true},"shop/convenience/76":{name:"76",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/76gas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1658320",shop:"convenience"},addTags:{brand:"76","brand:wikidata":"Q1658320","brand:wikipedia":"en:76 (gas station)",name:"76",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/8 à Huit":{name:"8 à Huit",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q2818601",shop:"convenience"},addTags:{brand:"8 à Huit","brand:wikidata":"Q2818601","brand:wikipedia":"fr:8 à Huit",name:"8 à Huit",shop:"convenience"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/convenience/99 Speedmart":{name:"99 Speedmart",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/99speedmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62075061",shop:"convenience"},addTags:{brand:"99 Speedmart","brand:wikidata":"Q62075061",name:"99 Speedmart",shop:"convenience"},countryCodes:["br","my","us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/ABC (Hawaii)":{name:"ABC (Hawaii)",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/abcstores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4650251",shop:"convenience"},addTags:{brand:"ABC","brand:wikidata":"Q4650251","brand:wikipedia":"en:ABC Stores (Hawaii)",name:"ABC",shop:"convenience"},countryCodes:["us"],terms:["abc stores"],matchScore:2,suggestion:true},"shop/convenience/Aibė":{name:"Aibė",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q1022952",shop:"convenience"},addTags:{brand:"Aibė","brand:wikidata":"Q1022952","brand:wikipedia":"de:Aibė",name:"Aibė",shop:"convenience"},countryCodes:["lt","lv"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Albert Heijn to go":{name:"Albert Heijn to go",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/albertheijn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1653985",shop:"convenience"},addTags:{brand:"Albert Heijn to go","brand:wikidata":"Q1653985","brand:wikipedia":"en:Albert Heijn",name:"Albert Heijn to go",shop:"convenience"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Alfamidi":{name:"Alfamidi",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/alfamidiku/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12471462",shop:"convenience"},addTags:{brand:"Alfamidi","brand:wikidata":"Q12471462","brand:wikipedia":"id:Alfamidi",name:"Alfamidi",shop:"convenience"},countryCodes:["id"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Aral":{name:"Aral",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q565734",shop:"convenience"},addTags:{brand:"Aral","brand:wikidata":"Q565734","brand:wikipedia":"en:Aral AG",name:"Aral",shop:"convenience"},countryCodes:["de"],terms:["aral tankstelle"],matchScore:2,suggestion:true},"shop/convenience/BP Shop":{name:"BP Shop",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/bp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q152057",shop:"convenience"},addTags:{brand:"BP Shop","brand:wikidata":"Q152057","brand:wikipedia":"en:BP",name:"BP Shop",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Best-one":{name:"Best-one",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q4896532",shop:"convenience"},addTags:{brand:"Best-one","brand:wikidata":"Q4896532","brand:wikipedia":"en:Best-one",name:"Best-one",shop:"convenience"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Buc-ee's":{name:"Buc-ee's",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/bucees/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4982335",shop:"convenience"},addTags:{brand:"Buc-ee's","brand:wikidata":"Q4982335","brand:wikipedia":"en:Buc-ee's",name:"Buc-ee's",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Budgens":{name:"Budgens",icon:"fas-shopping-basket",imageURL:"https://pbs.twimg.com/profile_images/796001828966203392/69ZeL67f_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4985016",shop:"convenience"},addTags:{brand:"Budgens","brand:wikidata":"Q4985016","brand:wikipedia":"en:Budgens",name:"Budgens",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/CBA":{name:"CBA",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/cbaboltok/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q779845",shop:"convenience"},addTags:{brand:"CBA","brand:wikidata":"Q779845","brand:wikipedia":"en:CBA (food retail)",name:"CBA",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/COOP Jednota":{name:"COOP Jednota",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/COOPJednota/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q41629254",shop:"convenience"},addTags:{brand:"COOP Jednota","brand:wikidata":"Q41629254","brand:wikipedia":"sk:COOP Jednota Slovensko",name:"COOP Jednota",shop:"convenience"},countryCodes:["cz","sk"],terms:["jednota"],matchScore:2,suggestion:true},"shop/convenience/Chata Polska":{name:"Chata Polska",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q61994406",shop:"convenience"},addTags:{brand:"Chata Polska","brand:wikidata":"Q61994406",name:"Chata Polska",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Circle K":{name:"Circle K",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/circlekireland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3268010",shop:"convenience"},addTags:{brand:"Circle K","brand:wikidata":"Q3268010","brand:wikipedia":"en:Circle K",name:"Circle K",shop:"convenience"},terms:["ok","ok-mart"],matchScore:2,suggestion:true},"shop/convenience/Co-op (Canada)":{name:"Co-op (Canada)",icon:"fas-shopping-basket",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSaskatoon%20Co-op%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5440676",shop:"convenience"},addTags:{brand:"Federated Co-operatives","brand:wikidata":"Q5440676","brand:wikipedia":"en:Federated Co-operatives",name:"Co-op",shop:"convenience"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Coop Pronto":{name:"Coop Pronto",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q1129777",shop:"convenience"},addTags:{brand:"Coop Pronto","brand:wikidata":"Q1129777","brand:wikipedia":"de:Coop Mineraloel",name:"Coop Pronto",shop:"convenience"},countryCodes:["ch","li"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Coop (Schweiz)":{name:"Coop (Schweiz)",icon:"fas-shopping-basket",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCoop.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q432564",shop:"convenience"},addTags:{brand:"Coop","brand:wikidata":"Q432564","brand:wikipedia":"de:Coop (Schweiz)",name:"Coop",shop:"convenience"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Costcutter":{name:"Costcutter",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/costcutter/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5175072",shop:"convenience"},addTags:{brand:"Costcutter","brand:wikidata":"Q5175072","brand:wikipedia":"en:Costcutter",name:"Costcutter",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Daisy Mart":{name:"Daisy Mart",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q61994934",shop:"convenience"},addTags:{brand:"Daisy Mart","brand:wikidata":"Q61994934",name:"Daisy Mart",shop:"convenience"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Delikatesy Centrum":{name:"Delikatesy Centrum",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q11693824",shop:"convenience"},addTags:{brand:"Delikatesy Centrum","brand:wikidata":"Q11693824","brand:wikipedia":"pl:Delikatesy Centrum",name:"Delikatesy Centrum",shop:"convenience"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/convenience/FamilyMart":{name:"FamilyMart",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/familymart.japan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1191685",shop:"convenience"},addTags:{brand:"FamilyMart","brand:wikidata":"Q1191685","brand:wikipedia":"en:FamilyMart",name:"FamilyMart",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Four Square":{name:"Four Square",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/FourSquareNZ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5475558",shop:"convenience"},addTags:{brand:"Four Square","brand:wikidata":"Q5475558","brand:wikipedia":"en:Four Square (supermarket)",name:"Four Square",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Franprix":{name:"Franprix",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/franprix/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2420096",shop:"convenience"},addTags:{brand:"Franprix","brand:wikidata":"Q2420096","brand:wikipedia":"fr:Franprix",name:"Franprix",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Freshmarket":{name:"Freshmarket",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q16546326",shop:"convenience"},addTags:{brand:"Freshmarket","brand:wikidata":"Q16546326","brand:wikipedia":"pl:Freshmarket",name:"Freshmarket",shop:"convenience"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Groszek":{name:"Groszek",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/Sklepy.Groszek/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9280965",shop:"convenience"},addTags:{brand:"Groszek","brand:wikidata":"Q9280965","brand:wikipedia":"pl:Groszek (sieć sklepów)",name:"Groszek",shop:"convenience"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Hasty Market":{name:"Hasty Market",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q58022603",shop:"convenience"},addTags:{brand:"Hasty Market","brand:wikidata":"Q58022603",name:"Hasty Market",shop:"convenience"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Intermarché Contact":{name:"Intermarché Contact",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/tousuniscontrelaviechere/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3153200",shop:"convenience"},addTags:{brand:"Intermarché Contact","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",name:"Intermarché Contact",shop:"convenience"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Jacksons":{name:"Jacksons",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q6117880",shop:"convenience"},addTags:{brand:"Jacksons","brand:wikidata":"Q6117880","brand:wikipedia":"en:Jacksons Stores",name:"Jacksons",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/K-Market":{name:"K-Market",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/KMarketSuomi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11868562",shop:"convenience"},addTags:{brand:"K-Market","brand:wikidata":"Q11868562","brand:wikipedia":"fi:K-Market",name:"K-Market",shop:"convenience"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Kwik Trip":{name:"Kwik Trip",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/KwikTrip/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6450420",shop:"convenience"},addTags:{brand:"Kwik Trip","brand:wikidata":"Q6450420","brand:wikipedia":"en:Kwik Trip",name:"Kwik Trip",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Lawson":{name:"Lawson",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/lawson.fanpage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1557223",shop:"convenience"},addTags:{brand:"Lawson","brand:wikidata":"Q1557223","brand:wikipedia":"en:Lawson (store)",name:"Lawson",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Lewiatan":{name:"Lewiatan",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/psh.lewiatan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11755396",shop:"convenience"},addTags:{brand:"Lewiatan","brand:wikidata":"Q11755396","brand:wikipedia":"pl:Lewiatan (sieć handlowa)",name:"Lewiatan",shop:"convenience"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Lifestyle Express":{name:"Lifestyle Express",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q61994869",shop:"convenience"},addTags:{brand:"Lifestyle Express","brand:wikidata":"Q61994869",name:"Lifestyle Express",shop:"convenience"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Mace":{name:"Mace",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/maces.stores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17089386",shop:"convenience"},addTags:{brand:"Mace","brand:wikidata":"Q17089386","brand:wikipedia":"en:Mace (shop)",name:"Mace",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Marathon":{name:"Marathon",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/MarathonPetroleumCorporation/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q458363",shop:"convenience"},addTags:{brand:"Marathon","brand:wikidata":"Q458363","brand:wikipedia":"en:Marathon Petroleum",name:"Marathon",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Małpka Express":{name:"Małpka Express",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/malpkaexpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18431946",shop:"convenience"},addTags:{brand:"Małpka Express","brand:wikidata":"Q18431946","brand:wikipedia":"pl:Małpka Express",name:"Małpka Express",shop:"convenience"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/convenience/McColl's":{name:"McColl's",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/YourMcColls/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16997477",shop:"convenience"},addTags:{brand:"McColl's","brand:wikidata":"Q16997477","brand:wikipedia":"en:McColl's",name:"McColl's",shop:"convenience"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Migrolino":{name:"Migrolino",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/migrolino/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q56745088",shop:"convenience"},addTags:{brand:"Migrolino","brand:wikidata":"Q56745088","brand:wikipedia":"de:Migrolino",name:"Migrolino",shop:"convenience"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Ministop":{name:"Ministop",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/MiniStop-374173965530/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1038929",shop:"convenience"},addTags:{brand:"Ministop","brand:wikidata":"Q1038929","brand:wikipedia":"en:Ministop",name:"Ministop",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Mobil Mart":{name:"Mobil Mart",icon:"fas-shopping-basket",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMobil%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3088656",shop:"convenience"},addTags:{brand:"Mobil Mart","brand:wikidata":"Q3088656","brand:wikipedia":"en:Mobil",name:"Mobil Mart",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Nasz Sklep":{name:"Nasz Sklep",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q62070369",shop:"convenience"},addTags:{brand:"Nasz Sklep","brand:wikidata":"Q62070369",name:"Nasz Sklep",shop:"convenience"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/convenience/NewDays":{name:"NewDays",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q11234763",shop:"convenience"},addTags:{alt_name:"ニューデイズ",brand:"NewDays","brand:wikidata":"Q11234763","brand:wikipedia":"ja:NewDays",name:"NewDays",shop:"convenience"},countryCodes:["jp"],terms:["newdays ミニ","ニューデイズ"],matchScore:2,suggestion:true},"shop/convenience/Nisa":{name:"Nisa",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/nisalocally/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16999069",shop:"convenience"},addTags:{brand:"Nisa","brand:wikidata":"Q16999069","brand:wikipedia":"en:Nisa (retailer)",name:"Nisa",shop:"convenience"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Nisa Local":{name:"Nisa Local",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/nisalocally/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16999069",shop:"convenience"},addTags:{brand:"Nisa Local","brand:wikidata":"Q16999069","brand:wikipedia":"en:Nisa (retailer)",name:"Nisa Local",shop:"convenience"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/convenience/OK便利商店":{name:"OK便利商店",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/circlekireland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3268010",shop:"convenience"},addTags:{brand:"OK便利商店","brand:en":"Circle K","brand:wikidata":"Q3268010","brand:wikipedia":"zh:OK便利店",name:"OK便利商店","name:en":"Circle K",shop:"convenience"},countryCodes:["cn","tw"],terms:["ok便利店 circle k"],matchScore:2,suggestion:true},"shop/convenience/On the Run":{name:"On the Run",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/OntheRunUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16931259",shop:"convenience"},addTags:{brand:"On the Run","brand:wikidata":"Q16931259","brand:wikipedia":"en:On the Run (convenience store)",name:"On the Run",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Oxxo":{name:"Oxxo",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/OXXOTiendas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1342538",shop:"convenience"},addTags:{brand:"Oxxo","brand:wikidata":"Q1342538","brand:wikipedia":"es:Oxxo",name:"Oxxo",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Petro-Canada":{name:"Petro-Canada",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/petrocanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1208279",shop:"convenience"},addTags:{brand:"Petro-Canada","brand:wikidata":"Q1208279","brand:wikipedia":"en:Petro-Canada",name:"Petro-Canada",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Plaid Pantry":{name:"Plaid Pantry",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/plaidpantryOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7200591",shop:"convenience"},addTags:{brand:"Plaid Pantry","brand:wikidata":"Q7200591","brand:wikipedia":"en:Plaid Pantry",name:"Plaid Pantry",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Premier":{name:"Premier",icon:"fas-shopping-basket",imageURL:"https://pbs.twimg.com/profile_images/552086468839997441/Ok2vWsQl_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q7240340",shop:"convenience"},addTags:{brand:"Premier","brand:wikidata":"Q7240340","brand:wikipedia":"en:Premier Stores",name:"Premier",shop:"convenience"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Proxi":{name:"Proxi",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q3408522",shop:"convenience"},addTags:{brand:"Proxi","brand:wikidata":"Q3408522","brand:wikipedia":"fr:Proxi",name:"Proxi",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/RaceTrac":{name:"RaceTrac",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/RaceTrac/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q735942",shop:"convenience"},addTags:{brand:"RaceTrac","brand:wikidata":"Q735942","brand:wikipedia":"en:RaceTrac",name:"RaceTrac",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Sainsbury's Local":{name:"Sainsbury's Local",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/sainsburys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q13218434",shop:"convenience"},addTags:{brand:"Sainsbury's Local","brand:wikidata":"Q13218434","brand:wikipedia":"en:Sainsbury's Local",name:"Sainsbury's Local",shop:"convenience"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Sheetz":{name:"Sheetz",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/sheetz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7492551",shop:"convenience"},addTags:{brand:"Sheetz","brand:wikidata":"Q7492551","brand:wikipedia":"en:Sheetz",name:"Sheetz",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Shell Select":{name:"Shell Select",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/Shell/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q154950",shop:"convenience"},addTags:{brand:"Shell Select","brand:wikidata":"Q154950","brand:wikipedia":"en:Royal Dutch Shell",name:"Shell Select",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Siwa":{name:"Siwa",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q11893827",shop:"convenience"},addTags:{brand:"Siwa","brand:wikidata":"Q11893827","brand:wikipedia":"fi:Siwa",name:"Siwa",shop:"convenience"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Spar":{name:"Spar",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/SPARintheUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q610492",shop:"convenience"},addTags:{brand:"Spar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Spar",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Spar Express":{name:"Spar Express",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/SPARintheUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q610492",shop:"convenience"},addTags:{brand:"Spar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Spar Express",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Speedway":{name:"Speedway",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/SpeedwayStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7575683",shop:"convenience"},addTags:{brand:"Speedway","brand:wikidata":"Q7575683","brand:wikipedia":"en:Speedway LLC",name:"Speedway",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Społem":{name:"Społem",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/SpolemSpoldzielczoscSpozywcow/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11826043",shop:"convenience"},addTags:{brand:"Społem","brand:wikidata":"Q11826043","brand:wikipedia":"pl:Powszechna Spółdzielnia Spożywców „Społem”",name:"Społem",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Star Mart":{name:"Star Mart",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q61994857",shop:"convenience"},addTags:{brand:"Star Mart","brand:wikidata":"Q61994857",name:"Star Mart",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Stripes":{name:"Stripes",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/stripesstores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7624135",shop:"convenience"},addTags:{brand:"Stripes","brand:wikidata":"Q7624135","brand:wikipedia":"en:Stripes Convenience Stores",name:"Stripes",shop:"convenience"},countryCodes:["cl","us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Tesco":{name:"Tesco",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/tesco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q487494",shop:"convenience"},addTags:{brand:"Tesco","brand:wikidata":"Q487494","brand:wikipedia":"en:Tesco",name:"Tesco",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Tesco Express":{name:"Tesco Express",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/tesco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q487494",shop:"convenience"},addTags:{brand:"Tesco Express","brand:wikidata":"Q487494","brand:wikipedia":"en:Tesco",name:"Tesco Express",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/The Co-operative Food (UK)":{name:"The Co-operative Food (UK)",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/coopukfood/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3277439",shop:"convenience"},addTags:{brand:"The Co-operative Food","brand:wikidata":"Q3277439","brand:wikipedia":"en:Co-op Food",name:"The Co-operative Food",shop:"convenience"},countryCodes:["gb"],terms:["coop","coop food","cooperative food","the cooperative"],matchScore:2,suggestion:true},"shop/convenience/Tiger Mart":{name:"Tiger Mart",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q57643977",shop:"convenience"},addTags:{brand:"Tiger Mart","brand:wikidata":"Q57643977",name:"Tiger Mart",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/United Dairy Farmers":{name:"United Dairy Farmers",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/UnitedDairyFarmers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7887677",shop:"convenience"},addTags:{amenity:"ice_cream",brand:"United Dairy Farmers","brand:wikidata":"Q7887677","brand:wikipedia":"en:United Dairy Farmers",name:"United Dairy Farmers",shop:"convenience",short_name:"UDF"},countryCodes:["us"],terms:["udf"],matchScore:2,suggestion:true},"shop/convenience/Utile":{name:"Utile",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/ULesCommercants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2529029",shop:"convenience"},addTags:{brand:"Utile","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Utile",shop:"convenience"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/convenience/VinMart+":{name:"VinMart+",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/sieuthivinmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60245505",shop:"convenience"},addTags:{brand:"VinMart","brand:wikidata":"Q60245505","brand:wikipedia":"vi:VinMart",name:"VinMart+",shop:"convenience"},countryCodes:["vn"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Vival":{name:"Vival",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q7937525",shop:"convenience"},addTags:{brand:"Vival","brand:wikidata":"Q7937525","brand:wikipedia":"en:Vival (shop)",name:"Vival",shop:"convenience"},countryCodes:["fr","pe"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Wawa":{name:"Wawa",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/wawa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5936320",shop:"convenience"},addTags:{brand:"Wawa","brand:wikidata":"Q5936320","brand:wikipedia":"en:Wawa (company)",name:"Wawa",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Weltladen":{name:"Weltladen",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q1640782",shop:"convenience"},addTags:{brand:"Weltladen","brand:wikidata":"Q1640782","brand:wikipedia":"de:Weltladen",name:"Weltladen",shop:"convenience"},countryCodes:["at","ch","de"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Woolworths Petrol":{name:"Woolworths Petrol",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/woolworths/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5023980",shop:"convenience"},addTags:{brand:"Caltex","brand:wikidata":"Q5023980","brand:wikipedia":"en:Caltex Woolworths",name:"Woolworths Petrol",shop:"convenience"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/convenience/abc (Poland)":{name:"abc (Poland)",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q11683985",shop:"convenience"},addTags:{brand:"abc","brand:wikidata":"Q11683985","brand:wikipedia":"pl:Abc (sieć handlowa)",name:"abc",shop:"convenience"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/convenience/ampm":{name:"ampm",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/ampm/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q306960",shop:"convenience"},addTags:{brand:"ampm","brand:wikidata":"Q306960","brand:wikipedia":"en:Ampm",name:"ampm",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/miniピアゴ":{name:"miniピアゴ",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q11188499",shop:"convenience"},addTags:{brand:"miniピアゴ","brand:en":"mini Piago","brand:ja":"miniピアゴ","brand:wikidata":"Q11188499","brand:wikipedia":"ja:Miniピアゴ",name:"miniピアゴ","name:en":"mini Piago","name:ja":"miniピアゴ",shop:"convenience"},countryCodes:["jp"],terms:["ミニピアゴ"],matchScore:2,suggestion:true},"shop/convenience/Żabka":{name:"Żabka",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/zabkapolska/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2589061",shop:"convenience"},addTags:{brand:"Żabka","brand:wikidata":"Q2589061","brand:wikipedia":"pl:Żabka (sieć sklepów)",name:"Żabka",shop:"convenience"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/convenience/ВкусВилл":{name:"ВкусВилл",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/izbenka/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57271676",shop:"convenience"},addTags:{brand:"ВкусВилл","brand:wikidata":"Q57271676","brand:wikipedia":"ru:Вкусвилл",name:"ВкусВилл",shop:"convenience"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Гроздь":{name:"Гроздь",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q21638412",shop:"convenience"},addTags:{brand:"Гроздь","brand:wikidata":"Q21638412","brand:wikipedia":"ru:Гроздь (сеть магазинов)",name:"Гроздь",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Доброном":{name:"Доброном",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/Eurooptby/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2565040",shop:"convenience"},addTags:{brand:"Доброном","brand:wikidata":"Q2565040","brand:wikipedia":"be:Eurotorg",name:"Доброном",shop:"convenience"},countryCodes:["by","ru"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Копейка":{name:"Копейка",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q1783878",shop:"convenience"},addTags:{brand:"Копейка","brand:en":"Kopeyka","brand:wikidata":"Q1783878","brand:wikipedia":"en:Kopeyka (supermarket)",name:"Копейка","name:en":"Kopeyka",shop:"convenience"},countryCodes:["by","ru","ua"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Магнит":{name:"Магнит",icon:"fas-shopping-basket",imageURL:"https://pbs.twimg.com/profile_images/1098477357390856192/wILY9KdL_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q940518",shop:"convenience"},addTags:{brand:"Магнит","brand:en":"Magnit","brand:wikidata":"Q940518","brand:wikipedia":"ru:Магнит (сеть магазинов)",name:"Магнит","name:en":"Magnit",shop:"convenience"},terms:["магнит у дома"],matchScore:2,suggestion:true},"shop/convenience/Мария-Ра":{name:"Мария-Ра",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q4281631",shop:"convenience"},addTags:{brand:"Мария-Ра","brand:wikidata":"Q4281631","brand:wikipedia":"ru:Мария-Ра",name:"Мария-Ра",shop:"convenience"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Сельпо":{name:"Сельпо",icon:"fas-shopping-basket",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSilpo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4419434",shop:"convenience"},addTags:{brand:"Сельпо","brand:wikidata":"Q4419434","brand:wikipedia":"ru:Сильпо",name:"Сельпо",shop:"convenience"},countryCodes:["kz","ru"],terms:[],matchScore:2,suggestion:true},"shop/convenience/アンスリー":{name:"アンスリー",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q17192555",shop:"convenience"},addTags:{brand:"アンスリー","brand:en":"Ansuri","brand:ja":"アンスリー","brand:wikidata":"Q17192555","brand:wikipedia":"ja:アンスリー",name:"アンスリー","name:en":"Ansuri","name:ja":"アンスリー",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/サンクス":{name:"サンクス",icon:"fas-shopping-basket",imageURL:"https://pbs.twimg.com/profile_images/875617750923616257/dCryLWcX_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q16141064",shop:"convenience"},addTags:{brand:"サンクス","brand:en":"Sunkus","brand:ja":"サンクス","brand:wikidata":"Q16141064","brand:wikipedia":"ja:サークルKサンクス",name:"サンクス","name:en":"Sunkus","name:ja":"サンクス",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/サークルK":{name:"サークルK",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/circlekireland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3268010",shop:"convenience"},addTags:{brand:"サークルK","brand:en":"Circle K","brand:ja":"サークルK","brand:wikidata":"Q3268010","brand:wikipedia":"en:Circle K",name:"サークルK","name:en":"Circle K","name:ja":"サークルK",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/スリーエフ":{name:"スリーエフ",icon:"fas-shopping-basket",imageURL:"https://pbs.twimg.com/profile_images/875645560073539585/X1oFVQef_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11313419",shop:"convenience"},addTags:{brand:"スリーエフ","brand:en":"Three F","brand:ja":"スリーエフ","brand:wikidata":"Q11313419","brand:wikipedia":"ja:スリーエフ",name:"スリーエフ","name:en":"Three F","name:ja":"スリーエフ",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/セイコーマート":{name:"セイコーマート",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q11314123",shop:"convenience"},addTags:{brand:"セイコーマート","brand:en":"Seicomart","brand:ja":"セイコーマート","brand:wikidata":"Q11314123","brand:wikipedia":"ja:セイコーマート",name:"セイコーマート","name:en":"Seicomart","name:ja":"セイコーマート",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/セブン-イレブン":{name:"セブン-イレブン",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/7ElevenMexico/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q259340",shop:"convenience"},addTags:{brand:"セブン-イレブン","brand:en":"7-Eleven","brand:ja":"セブン-イレブン","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"セブン-イレブン","name:en":"7-Eleven","name:ja":"セブン-イレブン","official_name:en":"Seven-Eleven",operator:"株式会社セブン&アイ・ホールディングス","operator:en":"Seven & I Holdings Co., Ltd.","operator:wikidata":"Q639447","operator:wikipedia":"en:Seven & I Holdings Co.",shop:"convenience"},countryCodes:["jp"],terms:["セブンイレブン(7-11)","セブンイレブン(seven-eleven)"],matchScore:2,suggestion:true},"shop/convenience/セーブオン":{name:"セーブオン",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q11314868",shop:"convenience"},addTags:{brand:"セーブオン","brand:en":"Save On","brand:ja":"セーブオン","brand:wikidata":"Q11314868","brand:wikipedia":"ja:セーブオン",name:"セーブオン","name:en":"Save On","name:ja":"セーブオン",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/デイリーヤマザキ":{name:"デイリーヤマザキ",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q5209392",shop:"convenience"},addTags:{brand:"デイリーヤマザキ","brand:en":"Daily Yamazaki","brand:ja":"デイリーヤマザキ","brand:wikidata":"Q5209392","brand:wikipedia":"en:Daily Yamazaki",name:"デイリーヤマザキ","name:en":"Daily Yamazaki","name:ja":"デイリーヤマザキ",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/ナチュラルローソン":{name:"ナチュラルローソン",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q11323850",shop:"convenience"},addTags:{brand:"ナチュラルローソン","brand:en":"NATURAL LAWSON","brand:ja":"ナチュラルローソン","brand:wikidata":"Q11323850","brand:wikipedia":"ja:ナチュラルローソン",name:"ナチュラルローソン","name:en":"Natural Lawson","name:ja":"ナチュラルローソン",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/ファミリーマート":{name:"ファミリーマート",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/familymart.japan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1191685",shop:"convenience"},addTags:{brand:"ファミリーマート","brand:en":"FamilyMart","brand:ja":"ファミリーマート","brand:wikidata":"Q1191685","brand:wikipedia":"en:FamilyMart",name:"ファミリーマート","name:en":"FamilyMart","name:ja":"ファミリーマート",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/ポプラ":{name:"ポプラ",icon:"fas-shopping-basket",imageURL:"https://pbs.twimg.com/profile_images/826586791058644992/chXkmxnQ_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7229380",shop:"convenience"},addTags:{brand:"ポプラ","brand:en":"Poplar","brand:ja":"ポプラ","brand:wikidata":"Q7229380","brand:wikipedia":"ja:ポプラ (コンビニエンスストア)",name:"ポプラ","name:en":"Poplar","name:ja":"ポプラ",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/ミニストップ":{name:"ミニストップ",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/MiniStop-374173965530/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1038929",shop:"convenience"},addTags:{brand:"ミニストップ","brand:en":"Ministop","brand:ja":"ミニストップ","brand:wikidata":"Q1038929","brand:wikipedia":"ja:ミニストップ",name:"ミニストップ","name:en":"Ministop","name:ja":"ミニストップ",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/ヤマザキショップ":{name:"ヤマザキショップ",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q11345131",shop:"convenience"},addTags:{brand:"ヤマザキショップ","brand:ja":"ヤマザキショップ","brand:wikidata":"Q11345131","brand:wikipedia":"ja:ヤマザキショップ",name:"ヤマザキショップ","name:en":"Yamazaki Shop","name:ja":"ヤマザキショップ",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/ローソン":{name:"ローソン",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/lawson.fanpage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1557223",shop:"convenience"},addTags:{brand:"ローソン","brand:en":"LAWSON","brand:ja":"ローソン","brand:wikidata":"Q1557223","brand:wikipedia":"ja:ローソン",name:"ローソン","name:en":"Lawson","name:ja":"ローソン",shop:"convenience"},countryCodes:["jp"],terms:["ローソン"],matchScore:2,suggestion:true},"shop/convenience/ローソンストア100":{name:"ローソンストア100",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q11350960",shop:"convenience"},addTags:{brand:"ローソンストア100","brand:en":"LAWSON STORE 100","brand:ja":"ローソンストア100","brand:wikidata":"Q11350960","brand:wikipedia":"ja:ローソンストア100",name:"ローソンストア100","name:en":"Lawson Store 100","name:ja":"ローソンストア100",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/ローソン・スリーエフ":{name:"ローソン・スリーエフ",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q24866804",shop:"convenience"},addTags:{brand:"ローソン・スリーエフ","brand:en":"LAWSON・Three F","brand:ja":"ローソン・スリーエフ","brand:wikidata":"Q24866804","brand:wikipedia":"ja:ローソン・スリーエフ",name:"ローソン・スリーエフ","name:en":"Lawson・Three F","name:ja":"ローソン・スリーエフ",operator:"株式会社エル・ティーエフ","operator:en":"L・TF Co., Ltd.",shop:"convenience"},countryCodes:["jp"],terms:["lawson+スリーエフ","ローソン・スリーエフ"],matchScore:2,suggestion:true},"shop/convenience/全家":{name:"全家",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/familymart.japan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1191685",shop:"convenience"},addTags:{brand:"全家","brand:en":"FamilyMart","brand:wikidata":"Q1191685","brand:wikipedia":"en:FamilyMart",name:"全家","name:en":"FamilyMart",shop:"convenience"},countryCodes:["cn","tw"],terms:[],matchScore:2,suggestion:true},"shop/convenience/全家便利商店":{name:"全家便利商店",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q10891564",shop:"convenience"},addTags:{brand:"全家便利商店","brand:wikidata":"Q10891564","brand:wikipedia":"zh:全家便利商店",name:"全家便利商店",shop:"convenience"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/convenience/萊爾富":{name:"萊爾富",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q11326216",shop:"convenience"},addTags:{brand:"萊爾富","brand:wikidata":"Q11326216","brand:wikipedia":"zh:萊爾富",name:"萊爾富",shop:"convenience"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/convenience/세븐일레븐":{name:"세븐일레븐",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/7ElevenMexico/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q259340",shop:"convenience"},addTags:{brand:"세븐일레븐","brand:en":"7-Eleven","brand:ko":"세븐일레븐","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"세븐일레븐","name:en":"7-Eleven","name:ko":"세븐일레븐",shop:"convenience"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"shop/copyshop/FedEx Office":{name:"FedEx Office",icon:"fas-print",imageURL:"https://graph.facebook.com/FedExOffice/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q474379",shop:"copyshop"},addTags:{brand:"FedEx Office","brand:wikidata":"Q474379","brand:wikipedia":"en:FedEx Office",name:"FedEx Office",shop:"copyshop"},countryCodes:["us"],terms:["fedex office print and ship center"],matchScore:2,suggestion:true},"shop/cosmetics/KIKO Milano":{name:"KIKO Milano",icon:"maki-shop",imageURL:"https://graph.facebook.com/KikoMilanoGlobal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3812045",shop:"cosmetics"},addTags:{brand:"KIKO Milano","brand:wikidata":"Q3812045","brand:wikipedia":"it:KIKO",name:"KIKO Milano",shop:"cosmetics"},countryCodes:["be","fr","gb","nl"],terms:["kiko"],matchScore:2,suggestion:true},"shop/cosmetics/Kiehl's":{name:"Kiehl's",icon:"maki-shop",imageURL:"https://graph.facebook.com/KiehlsUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3196447",shop:"cosmetics"},addTags:{brand:"Kiehl's","brand:wikidata":"Q3196447","brand:wikipedia":"en:Kiehl's",name:"Kiehl's",shop:"cosmetics"},countryCodes:["ca","us"],terms:["kiehl's since 1851"],matchScore:2,suggestion:true},"shop/cosmetics/L'Occitane":{name:"L'Occitane",icon:"maki-shop",imageURL:"https://graph.facebook.com/loccitaneusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1880676",shop:"cosmetics"},addTags:{brand:"L'Occitane","brand:wikidata":"Q1880676","brand:wikipedia":"en:L'Occitane en Provence",name:"L'Occitane",shop:"cosmetics"},terms:["l'occitane en provence"],matchScore:2,suggestion:true},"shop/cosmetics/Lush":{name:"Lush",icon:"maki-shop",imageURL:"https://graph.facebook.com/LUSHJAPAN/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1585448",shop:"cosmetics"},addTags:{brand:"Lush","brand:wikidata":"Q1585448","brand:wikipedia":"en:Lush (company)",name:"Lush",shop:"cosmetics"},terms:[],matchScore:2,suggestion:true},"shop/cosmetics/MAC Cosmetics":{name:"MAC Cosmetics",icon:"maki-shop",imageURL:"https://graph.facebook.com/MACcosmetics/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2624442",shop:"cosmetics"},addTags:{brand:"MAC Cosmetics","brand:wikidata":"Q2624442","brand:wikipedia":"en:MAC Cosmetics",name:"MAC Cosmetics",shop:"cosmetics",short_name:"M·A·C"},countryCodes:["ca","de","us"],terms:["mac"],matchScore:2,suggestion:true},"shop/cosmetics/Nocibé":{name:"Nocibé",icon:"maki-shop",imageURL:"https://graph.facebook.com/nocibe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3342592",shop:"cosmetics"},addTags:{brand:"Nocibé","brand:wikidata":"Q3342592","brand:wikipedia":"fr:Nocibé",name:"Nocibé",shop:"cosmetics"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/cosmetics/Origins":{name:"Origins",icon:"maki-shop",imageURL:"https://graph.facebook.com/Origins/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6643229",shop:"cosmetics"},addTags:{brand:"Origins","brand:wikidata":"Q6643229","brand:wikipedia":"en:Origins (cosmetics)",name:"Origins",shop:"cosmetics"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/cosmetics/Sephora":{name:"Sephora",icon:"maki-shop",imageURL:"https://graph.facebook.com/sephora/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2408041",shop:"cosmetics"},addTags:{brand:"Sephora","brand:wikidata":"Q2408041","brand:wikipedia":"en:Sephora",name:"Sephora",shop:"cosmetics"},terms:[],matchScore:2,suggestion:true},"shop/cosmetics/The Body Shop":{name:"The Body Shop",icon:"maki-shop",imageURL:"https://graph.facebook.com/TheBodyShopUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q837851",shop:"cosmetics"},addTags:{brand:"The Body Shop","brand:wikidata":"Q837851","brand:wikipedia":"en:The Body Shop",name:"The Body Shop",shop:"cosmetics"},terms:[],matchScore:2,suggestion:true},"shop/cosmetics/Л'Этуаль":{name:"Л'Этуаль",icon:"maki-shop",imageURL:"https://graph.facebook.com/letoile.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18400706",shop:"cosmetics"},addTags:{brand:"Л'Этуаль","brand:wikidata":"Q18400706","brand:wikipedia":"ru:Л’Этуаль",name:"Л'Этуаль",shop:"cosmetics"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/cosmetics/Магнит Косметик":{name:"Магнит Косметик",icon:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/1098477357390856192/wILY9KdL_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q940518",shop:"cosmetics"},addTags:{brand:"Магнит Косметик","brand:en":"Magnit Cosmetics","brand:wikidata":"Q940518","brand:wikipedia":"ru:Магнит (сеть магазинов)",name:"Магнит Косметик","name:en":"Magnit Cosmetics",shop:"cosmetics"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Atwoods":{name:"Atwoods",icon:"maki-shop",imageURL:"https://graph.facebook.com/Atwoods.Ranch.and.Home.Stores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4818874",shop:"country_store"},addTags:{brand:"Atwoods","brand:wikidata":"Q4818874","brand:wikipedia":"en:Atwoods",name:"Atwoods",shop:"country_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Blain's Farm & Fleet":{name:"Blain's Farm & Fleet",icon:"maki-shop",imageURL:"https://graph.facebook.com/BlainsFarmandFleet/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4923906",shop:"country_store"},addTags:{brand:"Blain's Farm & Fleet","brand:wikidata":"Q4923906","brand:wikipedia":"en:Blain's Farm & Fleet",name:"Blain's Farm & Fleet",shop:"country_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Bomgaars":{name:"Bomgaars",icon:"maki-shop",imageURL:"https://graph.facebook.com/BomgaarsSupply.Corporate/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22059070",shop:"country_store"},addTags:{brand:"Bomgaars","brand:wikidata":"Q22059070","brand:wikipedia":"en:Bomgaars",name:"Bomgaars",shop:"country_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Fleet Farm":{name:"Fleet Farm",icon:"maki-shop",imageURL:"https://graph.facebook.com/fleetfarm/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6859973",shop:"country_store"},addTags:{brand:"Fleet Farm","brand:wikidata":"Q6859973","brand:wikipedia":"en:Fleet Farm",name:"Fleet Farm",shop:"country_store"},countryCodes:["us"],terms:["mills fleet farm"],matchScore:2,suggestion:true},"shop/country_store/Grange Co-op":{name:"Grange Co-op",icon:"maki-shop",imageURL:"https://graph.facebook.com/grangecoop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5595639",shop:"country_store"},addTags:{brand:"Grange Co-op","brand:wikidata":"Q5595639","brand:wikipedia":"en:Grange Cooperative",name:"Grange Co-op",shop:"country_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Home of Economy":{name:"Home of Economy",icon:"maki-shop",imageURL:"https://graph.facebook.com/Homeofeconomy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5889100",shop:"country_store"},addTags:{brand:"Home of Economy","brand:wikidata":"Q5889100","brand:wikipedia":"en:Home of Economy",name:"Home of Economy",shop:"country_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Norbys Farm Fleet":{name:"Norbys Farm Fleet",icon:"maki-shop",imageURL:"https://graph.facebook.com/norbysfarmfleet/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7050461",shop:"country_store"},addTags:{brand:"Norbys Farm Fleet","brand:wikidata":"Q7050461","brand:wikipedia":"en:Norby's Farm Fleet",name:"Norbys Farm Fleet",shop:"country_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Orscheln Farm & Home":{name:"Orscheln Farm & Home",icon:"maki-shop",imageURL:"https://graph.facebook.com/orschelnfarmandhome/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22060331",shop:"country_store"},addTags:{brand:"Orscheln Farm & Home","brand:wikidata":"Q22060331","brand:wikipedia":"en:Orscheln Farm & Home",name:"Orscheln Farm & Home",shop:"country_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Peavey Mart":{name:"Peavey Mart",icon:"maki-shop",imageURL:"https://graph.facebook.com/PeaveyMart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7158483",shop:"country_store"},addTags:{brand:"Peavey Mart","brand:wikidata":"Q7158483","brand:wikipedia":"en:Peavey Mart",name:"Peavey Mart",shop:"country_store"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Rural King":{name:"Rural King",icon:"maki-shop",imageURL:"https://graph.facebook.com/RuralKing/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7380525",shop:"country_store"},addTags:{brand:"Rural King","brand:wikidata":"Q7380525","brand:wikipedia":"en:Rural King",name:"Rural King",shop:"country_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/country_store/TSC Stores":{name:"TSC Stores",icon:"maki-shop",imageURL:"https://graph.facebook.com/TSCStoresCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62720230",shop:"country_store"},addTags:{brand:"TSC Stores","brand:wikidata":"Q62720230",name:"TSC Stores",shop:"country_store"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Theisen's":{name:"Theisen's",icon:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/743446346414227456/6V3KBxMe_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7777850",shop:"country_store"},addTags:{brand:"Theisen's","brand:wikidata":"Q7777850","brand:wikipedia":"en:Theisen's",name:"Theisen's",shop:"country_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Tractor Supply Company":{name:"Tractor Supply Company",icon:"maki-shop",imageURL:"https://graph.facebook.com/TractorSupplyCo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15109925",shop:"country_store"},addTags:{brand:"Tractor Supply Company","brand:wikidata":"Q15109925","brand:wikipedia":"en:Tractor Supply Company",name:"Tractor Supply Company",shop:"country_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Wynnstay":{name:"Wynnstay",icon:"maki-shop",imageURL:"https://graph.facebook.com/WynnstayGroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63016351",shop:"country_store"},addTags:{brand:"Wynnstay","brand:wikidata":"Q63016351",name:"Wynnstay",shop:"country_store"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/craft/Hobby Lobby":{name:"Hobby Lobby",icon:"fas-palette",imageURL:"https://graph.facebook.com/HobbyLobby/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5874938",shop:"craft"},addTags:{brand:"Hobby Lobby","brand:wikidata":"Q5874938","brand:wikipedia":"en:Hobby Lobby",name:"Hobby Lobby",shop:"craft"},countryCodes:["in","us"],terms:[],matchScore:2,suggestion:true},"shop/craft/Hobbycraft":{name:"Hobbycraft",icon:"fas-palette",imageURL:"https://graph.facebook.com/HobbycraftUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16984508",shop:"craft"},addTags:{brand:"Hobbycraft","brand:wikidata":"Q16984508","brand:wikipedia":"en:Hobbycraft",name:"Hobbycraft",shop:"craft"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/craft/Jo-Ann":{name:"Jo-Ann",icon:"fas-palette",imageURL:"https://graph.facebook.com/JoAnn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6203968",shop:"craft"},addTags:{brand:"Jo-Ann","brand:wikidata":"Q6203968","brand:wikipedia":"en:Jo-Ann Stores",name:"Jo-Ann",shop:"craft"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/craft/Michaels":{name:"Michaels",icon:"fas-palette",imageURL:"https://graph.facebook.com/Michaels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6835667",shop:"craft"},addTags:{brand:"Michaels","brand:wikidata":"Q6835667","brand:wikipedia":"en:Michaels",name:"Michaels",shop:"craft"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/deli/ほっともっと":{name:"ほっともっと",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/hottomotto/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10850949",shop:"deli"},addTags:{brand:"ほっともっと","brand:en":"Hotto Motto","brand:ja":"ほっともっと","brand:wikidata":"Q10850949","brand:wikipedia":"ja:ほっともっと",name:"ほっともっと","name:en":"Hotto Motto","name:ja":"ほっともっと",shop:"deli"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/deli/京樽":{name:"京樽",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/kyotaru.sushi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11374503",shop:"deli"},addTags:{brand:"京樽","brand:en":"Kyotaru","brand:ja":"京樽","brand:wikidata":"Q11374503","brand:wikipedia":"ja:京樽",name:"京樽","name:en":"Kyotaru","name:ja":"京樽",shop:"deli"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Barneys New York":{name:"Barneys New York",icon:"maki-shop",imageURL:"https://graph.facebook.com/BarneysNY/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q59465",shop:"department_store"},addTags:{brand:"Barneys New York","brand:wikidata":"Q59465","brand:wikipedia":"en:Barneys New York",name:"Barneys New York",shop:"department_store"},countryCodes:["us"],terms:["barneys"],matchScore:2,suggestion:true},"shop/department_store/Belk":{name:"Belk",icon:"maki-shop",imageURL:"https://graph.facebook.com/Belk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q127428",shop:"department_store"},addTags:{brand:"Belk","brand:wikidata":"Q127428","brand:wikipedia":"en:Belk",name:"Belk",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Bi-Mart":{name:"Bi-Mart",icon:"maki-shop",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBi-Mart.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4902331",shop:"department_store"},addTags:{brand:"Bi-Mart","brand:wikidata":"Q4902331","brand:wikipedia":"en:Bi-Mart",name:"Bi-Mart",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Big Lots":{name:"Big Lots",icon:"maki-shop",imageURL:"https://graph.facebook.com/biglots/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4905973",shop:"department_store"},addTags:{brand:"Big Lots","brand:wikidata":"Q4905973","brand:wikipedia":"en:Big Lots",name:"Big Lots",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Big W":{name:"Big W",icon:"maki-shop",imageURL:"https://graph.facebook.com/BIGWaustralia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4906646",shop:"department_store"},addTags:{brand:"Big W","brand:wikidata":"Q4906646","brand:wikipedia":"en:Big W",name:"Big W",shop:"department_store"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Canadian Tire":{name:"Canadian Tire",icon:"maki-shop",imageURL:"https://graph.facebook.com/Canadiantire/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1032400",shop:"department_store"},addTags:{brand:"Canadian Tire","brand:wikidata":"Q1032400","brand:wikipedia":"en:Canadian Tire",name:"Canadian Tire",shop:"department_store"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Casas Bahia":{name:"Casas Bahia",icon:"maki-shop",imageURL:"https://graph.facebook.com/CasasBahia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5048048",shop:"department_store"},addTags:{brand:"Casas Bahia","brand:wikidata":"Q5048048","brand:wikipedia":"en:Casas Bahia",name:"Casas Bahia",shop:"department_store"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Century 21":{name:"Century 21",icon:"maki-shop",imageURL:"https://graph.facebook.com/century21stores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5063125",shop:"department_store"},addTags:{brand:"Century 21","brand:wikidata":"Q5063125","brand:wikipedia":"en:Century 21 (department store)",name:"Century 21",shop:"department_store"},countryCodes:["us"],terms:["c21"],matchScore:2,suggestion:true},"shop/department_store/Coppel":{name:"Coppel",icon:"maki-shop",imageURL:"https://graph.facebook.com/tiendascoppel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2497795",shop:"department_store"},addTags:{brand:"Coppel","brand:wikidata":"Q2497795","brand:wikipedia":"en:Coppel",name:"Coppel",shop:"department_store"},terms:[],matchScore:2,suggestion:true},"shop/department_store/Debenhams":{name:"Debenhams",icon:"maki-shop",imageURL:"https://graph.facebook.com/Debenhams/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1181484",shop:"department_store"},addTags:{brand:"Debenhams","brand:wikidata":"Q1181484","brand:wikipedia":"en:Debenhams",name:"Debenhams",shop:"department_store"},terms:[],matchScore:2,suggestion:true},"shop/department_store/Dillard's":{name:"Dillard's",icon:"maki-shop",imageURL:"https://graph.facebook.com/Dillards/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q844805",shop:"department_store"},addTags:{brand:"Dillard's","brand:wikidata":"Q844805","brand:wikipedia":"en:Dillard's",name:"Dillard's",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/El Corte Inglés":{name:"El Corte Inglés",icon:"maki-shop",imageURL:"https://graph.facebook.com/elcorteingles/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q623133",shop:"department_store"},addTags:{brand:"El Corte Inglés","brand:wikidata":"Q623133","brand:wikipedia":"en:El Corte Inglés",name:"El Corte Inglés",shop:"department_store"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Falabella":{name:"Falabella",icon:"maki-shop",imageURL:"https://graph.facebook.com/falabellachile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5135229",shop:"department_store"},addTags:{brand:"Falabella","brand:wikidata":"Q5135229","brand:wikipedia":"en:Falabella (retail store)",name:"Falabella",shop:"department_store"},terms:["saga falabella"],matchScore:2,suggestion:true},"shop/department_store/Galeria Kaufhof":{name:"Galeria Kaufhof",icon:"maki-shop",imageURL:"https://graph.facebook.com/GaleriaKarstadtKaufhof/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q322598",shop:"department_store"},addTags:{brand:"Galeria Kaufhof","brand:wikidata":"Q322598","brand:wikipedia":"en:Galeria Kaufhof",name:"Galeria Kaufhof",shop:"department_store"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Giant Tiger":{name:"Giant Tiger",icon:"maki-shop",imageURL:"https://graph.facebook.com/GiantTiger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5558429",shop:"department_store"},addTags:{brand:"Giant Tiger","brand:wikidata":"Q5558429","brand:wikipedia":"en:Giant Tiger",name:"Giant Tiger",shop:"department_store"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Gordmans":{name:"Gordmans",icon:"maki-shop",imageURL:"https://graph.facebook.com/gordmans/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5584725",shop:"department_store"},addTags:{brand:"Gordmans","brand:wikidata":"Q5584725","brand:wikipedia":"en:Gordmans",name:"Gordmans",shop:"department_store"},terms:[],matchScore:2,suggestion:true},"shop/department_store/HEMA":{name:"HEMA",icon:"maki-shop",imageURL:"https://graph.facebook.com/hema/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q903805",shop:"department_store"},addTags:{brand:"HEMA","brand:wikidata":"Q903805","brand:wikipedia":"en:HEMA (store)",name:"HEMA",shop:"department_store"},terms:[],matchScore:2,suggestion:true},"shop/department_store/Harvey Norman":{name:"Harvey Norman",icon:"maki-shop",imageURL:"https://graph.facebook.com/HarveyNormanAU/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4040441",shop:"department_store"},addTags:{brand:"Harvey Norman","brand:wikidata":"Q4040441","brand:wikipedia":"en:Harvey Norman",name:"Harvey Norman",shop:"department_store"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Havan":{name:"Havan",icon:"maki-shop",imageURL:"https://graph.facebook.com/Havanoficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61968827",shop:"department_store"},addTags:{brand:"Havan","brand:wikidata":"Q61968827",name:"Havan",shop:"department_store"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"shop/department_store/JCPenney":{name:"JCPenney",icon:"maki-shop",imageURL:"https://graph.facebook.com/jcp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q920037",shop:"department_store"},addTags:{brand:"JCPenney","brand:wikidata":"Q920037","brand:wikipedia":"en:J. C. Penney",name:"JCPenney",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/John Lewis":{name:"John Lewis",icon:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/1117907267343532035/bNbA3Pv5_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q1918981",shop:"department_store"},addTags:{brand:"John Lewis","brand:wikidata":"Q1918981","brand:wikipedia":"en:John Lewis & Partners",name:"John Lewis",shop:"department_store"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Karstadt":{name:"Karstadt",icon:"maki-shop",imageURL:"https://graph.facebook.com/karstadt1881/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q182910",shop:"department_store"},addTags:{brand:"Karstadt","brand:wikidata":"Q182910","brand:wikipedia":"en:Karstadt",name:"Karstadt",shop:"department_store"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Kmart (Australia)":{name:"Kmart (Australia)",icon:"maki-shop",imageURL:"https://graph.facebook.com/KmartAustralia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6421682",shop:"department_store"},addTags:{brand:"Kmart","brand:wikidata":"Q6421682","brand:wikipedia":"en:Kmart Australia",name:"Kmart",shop:"department_store"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Kmart (USA)":{name:"Kmart (USA)",icon:"maki-shop",imageURL:"https://graph.facebook.com/kmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1753080",shop:"department_store"},addTags:{brand:"Kmart","brand:wikidata":"Q1753080","brand:wikipedia":"en:Kmart",name:"Kmart",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Kohl's":{name:"Kohl's",icon:"maki-shop",imageURL:"https://graph.facebook.com/kohls/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q967265",shop:"department_store"},addTags:{brand:"Kohl's","brand:wikidata":"Q967265","brand:wikipedia":"en:Kohl's",name:"Kohl's",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Lojas Americanas":{name:"Lojas Americanas",icon:"maki-shop",imageURL:"https://graph.facebook.com/lojasamericanas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3064093",shop:"department_store"},addTags:{brand:"Lojas Americanas","brand:wikidata":"Q3064093","brand:wikipedia":"en:Lojas Americanas",name:"Lojas Americanas",shop:"department_store"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Lord & Taylor":{name:"Lord & Taylor",icon:"maki-shop",imageURL:"https://graph.facebook.com/lordandtaylor/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2749082",shop:"department_store"},addTags:{brand:"Lord & Taylor","brand:wikidata":"Q2749082","brand:wikipedia":"en:Lord & Taylor",name:"Lord & Taylor",shop:"department_store"},countryCodes:["us"],terms:["lord and taylor"],matchScore:2,suggestion:true},"shop/department_store/Lotte Department Store":{name:"Lotte Department Store",icon:"maki-shop",imageURL:"https://graph.facebook.com/LOTTEshopping/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q489905",shop:"department_store"},addTags:{brand:"Lotte Department Store","brand:wikidata":"Q489905","brand:wikipedia":"en:Lotte Department Store",name:"Lotte Department Store",shop:"department_store"},terms:["lotte"],matchScore:2,suggestion:true},"shop/department_store/Macy's":{name:"Macy's",icon:"maki-shop",imageURL:"https://graph.facebook.com/Macys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q629269",shop:"department_store"},addTags:{brand:"Macy's","brand:wikidata":"Q629269","brand:wikipedia":"en:Macy's",name:"Macy's",shop:"department_store"},terms:[],matchScore:2,suggestion:true},"shop/department_store/Marks & Spencer":{name:"Marks & Spencer",icon:"maki-shop",imageURL:"https://graph.facebook.com/marksandspencerrussia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q714491",shop:"department_store"},addTags:{brand:"Marks & Spencer","brand:wikidata":"Q714491","brand:wikipedia":"en:Marks & Spencer",name:"Marks & Spencer",shop:"department_store"},terms:[],matchScore:2,suggestion:true},"shop/department_store/Marshalls":{name:"Marshalls",icon:"maki-shop",imageURL:"https://graph.facebook.com/Marshalls/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15903261",shop:"department_store"},addTags:{brand:"Marshalls","brand:wikidata":"Q15903261","brand:wikipedia":"en:Marshalls",name:"Marshalls",shop:"department_store"},terms:[],matchScore:2,suggestion:true},"shop/department_store/Myer":{name:"Myer",icon:"maki-shop",imageURL:"https://graph.facebook.com/myer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1110323",shop:"department_store"},addTags:{brand:"Myer","brand:wikidata":"Q1110323","brand:wikipedia":"en:Myer",name:"Myer",shop:"department_store"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Neiman Marcus":{name:"Neiman Marcus",icon:"maki-shop",imageURL:"https://graph.facebook.com/neimanmarcus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q743497",shop:"department_store"},addTags:{brand:"Neiman Marcus","brand:wikidata":"Q743497","brand:wikipedia":"en:Neiman Marcus",name:"Neiman Marcus",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Nordstrom":{name:"Nordstrom",icon:"maki-shop",imageURL:"https://graph.facebook.com/Nordstrom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q174310",shop:"department_store"},addTags:{brand:"Nordstrom","brand:wikidata":"Q174310","brand:wikipedia":"en:Nordstrom",name:"Nordstrom",shop:"department_store"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Oechsle":{name:"Oechsle",icon:"maki-shop",imageURL:"https://graph.facebook.com/tiendasoechsle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6049096",shop:"department_store"},addTags:{brand:"Oechsle","brand:wikidata":"Q6049096","brand:wikipedia":"es:Oechsle",name:"Oechsle",shop:"department_store"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"shop/department_store/París":{name:"París",icon:"maki-shop",imageURL:"https://graph.facebook.com/TiendasParis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20812805",shop:"department_store"},addTags:{brand:"París","brand:wikidata":"Q20812805","brand:wikipedia":"en:París (retail store)",name:"París",operator:"Cencosud","operator:wikidata":"Q1053372","operator:wikipedia":"en:Cencosud",shop:"department_store"},countryCodes:["cl","pe"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Ripley":{name:"Ripley",icon:"maki-shop",imageURL:"https://graph.facebook.com/ripleychile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3433040",shop:"department_store"},addTags:{brand:"Ripley","brand:wikidata":"Q3433040","brand:wikipedia":"en:Ripley S.A.",name:"Ripley",shop:"department_store"},terms:[],matchScore:2,suggestion:true},"shop/department_store/Saks Fifth Avenue":{name:"Saks Fifth Avenue",icon:"maki-shop",imageURL:"https://graph.facebook.com/saks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2723882",shop:"department_store"},addTags:{brand:"Saks Fifth Avenue","brand:wikidata":"Q2723882","brand:wikipedia":"en:Saks Fifth Avenue",name:"Saks Fifth Avenue",shop:"department_store"},terms:[],matchScore:2,suggestion:true},"shop/department_store/Saks Off 5th":{name:"Saks Off 5th",icon:"maki-shop",imageURL:"https://graph.facebook.com/saks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2723882",shop:"department_store"},addTags:{brand:"Saks Off 5th","brand:wikidata":"Q2723882","brand:wikipedia":"en:Saks Fifth Avenue",name:"Saks Off 5th",shop:"department_store"},terms:[],matchScore:2,suggestion:true},"shop/department_store/Sears":{name:"Sears",icon:"maki-shop",imageURL:"https://graph.facebook.com/sears/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6499202",shop:"department_store"},addTags:{brand:"Sears","brand:wikidata":"Q6499202","brand:wikipedia":"en:Sears",name:"Sears",shop:"department_store"},terms:[],matchScore:2,suggestion:true},"shop/department_store/Shopko":{name:"Shopko",icon:"maki-shop",imageURL:"https://graph.facebook.com/shopko/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7501155",shop:"department_store"},addTags:{brand:"Shopko","brand:wikidata":"Q7501155","brand:wikipedia":"en:Shopko",name:"Shopko",shop:"department_store"},terms:[],matchScore:2,suggestion:true},"shop/department_store/Stein Mart":{name:"Stein Mart",icon:"maki-shop",imageURL:"https://graph.facebook.com/SteinMart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7606770",shop:"department_store"},addTags:{brand:"Stein Mart","brand:wikidata":"Q7606770","brand:wikipedia":"en:Stein Mart",name:"Stein Mart",shop:"department_store"},terms:[],matchScore:2,suggestion:true},"shop/department_store/Target (Australia)":{name:"Target (Australia)",icon:"maki-shop",imageURL:"https://graph.facebook.com/targetaus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7685854",shop:"department_store"},addTags:{brand:"Target","brand:wikidata":"Q7685854","brand:wikipedia":"en:Target Australia",name:"Target",shop:"department_store"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Target (USA)":{name:"Target (USA)",icon:"maki-shop",imageURL:"https://graph.facebook.com/target/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1046951",shop:"department_store"},addTags:{brand:"Target","brand:wikidata":"Q1046951","brand:wikipedia":"en:Target Corporation",name:"Target",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/The Warehouse":{name:"The Warehouse",icon:"maki-shop",imageURL:"https://graph.facebook.com/TheWarehouseNZ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3566291",shop:"department_store"},addTags:{brand:"The Warehouse","brand:wikidata":"Q3566291","brand:wikipedia":"en:The Warehouse Group",name:"The Warehouse",shop:"department_store"},countryCodes:["nz"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Walmart":{name:"Walmart",icon:"maki-shop",imageURL:"https://graph.facebook.com/walmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q483551",shop:"department_store"},addTags:{brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",name:"Walmart",operator:"Walmart","operator:wikidata":"Q483551","operator:wikipedia":"en:Walmart",shop:"department_store"},terms:[],matchScore:2,suggestion:true},"shop/department_store/Woolworth":{name:"Woolworth",icon:"maki-shop",imageURL:"https://graph.facebook.com/WoolworthDeutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q183538",shop:"department_store"},addTags:{brand:"Woolworth","brand:wikidata":"Q183538","brand:wikipedia":"de:Woolworth Deutschland",name:"Woolworth",shop:"department_store"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Åhléns":{name:"Åhléns",icon:"maki-shop",imageURL:"https://graph.facebook.com/ahlens/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q270851",shop:"department_store"},addTags:{brand:"Åhléns","brand:wikidata":"Q270851","brand:wikipedia":"sv:Åhléns",name:"Åhléns",shop:"department_store"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/department_store/東急ハンズ":{name:"東急ハンズ",icon:"maki-shop",imageURL:"https://graph.facebook.com/TokyuHandsInc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q859212",shop:"department_store"},addTags:{brand:"東急ハンズ","brand:en":"Tokyu Hands","brand:ja":"東急ハンズ","brand:wikidata":"Q859212","brand:wikipedia":"ja:東急ハンズ",name:"東急ハンズ","name:en":"Tokyu Hands","name:ja":"東急ハンズ",shop:"department_store"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/department_store/롯데백화점":{name:"롯데백화점",icon:"maki-shop",imageURL:"https://graph.facebook.com/LOTTEshopping/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q489905",shop:"department_store"},addTags:{brand:"롯데백화점","brand:ko":"롯데백화점","brand:wikidata":"Q489905","brand:wikipedia":"ko:롯데백화점",name:"롯데백화점","name:en":"Lotte Department Store","name:ko":"롯데백화점",shop:"department_store"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Ace Hardware":{name:"Ace Hardware",icon:"temaki-tools",imageURL:"https://graph.facebook.com/acehardware/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4672981",shop:"doityourself"},addTags:{brand:"Ace Hardware","brand:wikidata":"Q4672981","brand:wikipedia":"en:Ace Hardware",name:"Ace Hardware",shop:"doityourself"},terms:[],matchScore:2,suggestion:true},"shop/doityourself/B&Q":{name:"B&Q",icon:"temaki-tools",imageURL:"https://graph.facebook.com/bandq/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q707602",shop:"doityourself"},addTags:{brand:"B&Q","brand:wikidata":"Q707602","brand:wikipedia":"en:B&Q",name:"B&Q",shop:"doityourself"},terms:[],matchScore:2,suggestion:true},"shop/doityourself/Bauhaus":{name:"Bauhaus",icon:"temaki-tools",imageURL:"https://graph.facebook.com/137379942944322/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q672043",shop:"doityourself"},addTags:{brand:"Bauhaus","brand:wikidata":"Q672043","brand:wikipedia":"en:Bauhaus (company)",name:"Bauhaus",shop:"doityourself"},terms:[],matchScore:2,suggestion:true},"shop/doityourself/Biltema":{name:"Biltema",icon:"temaki-tools",imageURL:"https://graph.facebook.com/BiltemaSverige/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3355552",shop:"doityourself"},addTags:{brand:"Biltema","brand:wikidata":"Q3355552","brand:wikipedia":"en:Biltema",name:"Biltema",shop:"doityourself"},countryCodes:["dk","fi","no","se"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Brico":{name:"Brico",icon:"temaki-tools",imageURL:"https://graph.facebook.com/brico.be/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2510786",shop:"doityourself"},addTags:{brand:"Brico","brand:wikidata":"Q2510786","brand:wikipedia":"en:Brico",name:"Brico",shop:"doityourself"},terms:[],matchScore:2,suggestion:true},"shop/doityourself/Brico Dépôt":{name:"Brico Dépôt",icon:"temaki-tools",imageURL:"https://graph.facebook.com/BricoDepotFrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2889702",shop:"doityourself"},addTags:{brand:"Brico Dépôt","brand:wikidata":"Q2889702","brand:wikipedia":"en:Brico Dépôt",name:"Brico Dépôt",shop:"doityourself"},terms:[],matchScore:2,suggestion:true},"shop/doityourself/Bricoman":{name:"Bricoman",icon:"temaki-tools",imageURL:"https://graph.facebook.com/BricomanFrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2925142",shop:"doityourself"},addTags:{brand:"Bricoman","brand:wikidata":"Q2925142","brand:wikipedia":"it:Bricoman",name:"Bricoman",shop:"doityourself"},terms:[],matchScore:2,suggestion:true},"shop/doityourself/Bricomarché":{name:"Bricomarché",icon:"temaki-tools",imageURL:"https://graph.facebook.com/Bricomarche/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2925147",shop:"doityourself"},addTags:{brand:"Bricomarché","brand:wikidata":"Q2925147","brand:wikipedia":"en:Bricomarché",name:"Bricomarché",shop:"doityourself"},terms:[],matchScore:2,suggestion:true},"shop/doityourself/Bricorama":{name:"Bricorama",icon:"temaki-tools",imageURL:"https://graph.facebook.com/BricoramaFR/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2925146",shop:"doityourself"},addTags:{brand:"Bricorama","brand:wikidata":"Q2925146","brand:wikipedia":"en:Bricorama",name:"Bricorama",shop:"doityourself"},terms:[],matchScore:2,suggestion:true},"shop/doityourself/Bunnings Warehouse":{name:"Bunnings Warehouse",icon:"temaki-tools",imageURL:"https://pbs.twimg.com/profile_images/1405732718/hammer_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q4997829",shop:"doityourself"},addTags:{brand:"Bunnings Warehouse","brand:wikidata":"Q4997829","brand:wikipedia":"en:Bunnings Warehouse",name:"Bunnings Warehouse",shop:"doityourself"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Castorama":{name:"Castorama",icon:"temaki-tools",imageURL:"https://graph.facebook.com/castorama/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q966971",shop:"doityourself"},addTags:{brand:"Castorama","brand:wikidata":"Q966971","brand:wikipedia":"en:Castorama",name:"Castorama",shop:"doityourself"},terms:[],matchScore:2,suggestion:true},"shop/doityourself/Clas Ohlson":{name:"Clas Ohlson",icon:"temaki-tools",imageURL:"https://graph.facebook.com/clasohlsonsverige/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3356220",shop:"doityourself"},addTags:{brand:"Clas Ohlson","brand:wikidata":"Q3356220","brand:wikipedia":"en:Clas Ohlson",name:"Clas Ohlson",shop:"doityourself"},terms:[],matchScore:2,suggestion:true},"shop/doityourself/Easy":{name:"Easy",icon:"temaki-tools",imageURL:"https://graph.facebook.com/EasyHomecenter/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5331091",shop:"doityourself"},addTags:{brand:"Easy","brand:wikidata":"Q5331091","brand:wikipedia":"en:Easy (store)",name:"Easy",shop:"doityourself"},terms:[],matchScore:2,suggestion:true},"shop/doityourself/Gamma":{name:"Gamma",icon:"temaki-tools",imageURL:"https://graph.facebook.com/gamma.be/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2294120",shop:"doityourself"},addTags:{brand:"Gamma","brand:wikidata":"Q2294120","brand:wikipedia":"en:Gamma (store)",name:"Gamma",shop:"doityourself"},terms:[],matchScore:2,suggestion:true},"shop/doityourself/Globus Baumarkt":{name:"Globus Baumarkt",icon:"temaki-tools",imageURL:"https://graph.facebook.com/Globus.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q457503",shop:"doityourself"},addTags:{brand:"Globus Baumarkt","brand:wikidata":"Q457503","brand:wikipedia":"de:Globus Holding",name:"Globus Baumarkt",shop:"doityourself"},countryCodes:["de","lu"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Hagebaumarkt":{name:"Hagebaumarkt",icon:"temaki-tools",imageURL:"https://graph.facebook.com/hagebau/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1568279",shop:"doityourself"},addTags:{brand:"Hagebaumarkt","brand:wikidata":"Q1568279","brand:wikipedia":"de:Hagebau",name:"Hagebaumarkt",shop:"doityourself"},countryCodes:["at","be","ch","de","es","fr","lu","nl"],terms:["hagebau"],matchScore:2,suggestion:true},"shop/doityourself/Hammer":{name:"Hammer",icon:"temaki-tools",imageURL:"https://graph.facebook.com/hammerzuhause/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q52159668",shop:"doityourself"},addTags:{brand:"Hammer","brand:wikidata":"Q52159668","brand:wikipedia":"de:Hammer (Fachmarktkette)",name:"Hammer",shop:"doityourself"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Hellweg":{name:"Hellweg",icon:"temaki-tools",imageURL:"https://graph.facebook.com/Hellweg.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1603084",shop:"doityourself"},addTags:{brand:"Hellweg","brand:wikidata":"Q1603084","brand:wikipedia":"de:Hellweg (Baumarkt)",name:"Hellweg",shop:"doityourself"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Home Building Centre":{name:"Home Building Centre",icon:"temaki-tools",imageURL:"https://graph.facebook.com/homehardwarestores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3139611",shop:"doityourself"},addTags:{brand:"Home Hardware","brand:wikidata":"Q3139611","brand:wikipedia":"en:Home Hardware",name:"Home Building Centre",shop:"doityourself"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Home Depot":{name:"Home Depot",icon:"temaki-tools",imageURL:"https://graph.facebook.com/homedepot/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q864407",shop:"doityourself"},addTags:{brand:"Home Depot","brand:wikidata":"Q864407","brand:wikipedia":"en:The Home Depot",name:"Home Depot",shop:"doityourself"},countryCodes:["ca","mx","us"],terms:["the home depot"],matchScore:2,suggestion:true},"shop/doityourself/Home Hardware Building Centre":{name:"Home Hardware Building Centre",icon:"temaki-tools",imageURL:"https://graph.facebook.com/homehardwarestores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3139611",shop:"doityourself"},addTags:{brand:"Home Hardware","brand:wikidata":"Q3139611","brand:wikipedia":"en:Home Hardware",name:"Home Hardware Building Centre",shop:"doityourself"},countryCodes:["ca"],terms:["home hardware"],matchScore:2,suggestion:true},"shop/doityourself/Homebase":{name:"Homebase",icon:"temaki-tools",imageURL:"https://graph.facebook.com/homebase/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9293447",shop:"doityourself"},addTags:{brand:"Homebase","brand:wikidata":"Q9293447","brand:wikipedia":"en:Homebase",name:"Homebase",shop:"doityourself"},terms:[],matchScore:2,suggestion:true},"shop/doityourself/Hornbach":{name:"Hornbach",icon:"temaki-tools",imageURL:"https://graph.facebook.com/hornbach.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q685926",shop:"doityourself"},addTags:{brand:"Hornbach","brand:wikidata":"Q685926","brand:wikipedia":"en:Hornbach (retailer)",name:"Hornbach",shop:"doityourself"},terms:[],matchScore:2,suggestion:true},"shop/doityourself/Hubo":{name:"Hubo",icon:"temaki-tools",imageURL:"https://graph.facebook.com/hubo.be/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3142153",shop:"doityourself"},addTags:{brand:"Hubo","brand:wikidata":"Q3142153","brand:wikipedia":"en:Hubo Belgium",name:"Hubo",shop:"doityourself"},terms:[],matchScore:2,suggestion:true},"shop/doityourself/Jewson":{name:"Jewson",icon:"temaki-tools",imageURL:"https://graph.facebook.com/jewsonuk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6190226",shop:"doityourself"},addTags:{brand:"Jewson","brand:wikidata":"Q6190226","brand:wikipedia":"en:Jewson",name:"Jewson",shop:"doityourself"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Karwei":{name:"Karwei",icon:"temaki-tools",imageURL:"https://graph.facebook.com/karwei/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2097480",shop:"doityourself"},addTags:{brand:"Karwei","brand:wikidata":"Q2097480","brand:wikipedia":"en:Karwei",name:"Karwei",shop:"doityourself"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Leroy Merlin":{name:"Leroy Merlin",icon:"temaki-tools",imageURL:"https://graph.facebook.com/leroymerlin/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q889624",shop:"doityourself"},addTags:{brand:"Leroy Merlin","brand:wikidata":"Q889624","brand:wikipedia":"en:Leroy Merlin",name:"Leroy Merlin",shop:"doityourself"},terms:[],matchScore:2,suggestion:true},"shop/doityourself/Lowe's":{name:"Lowe's",icon:"temaki-tools",imageURL:"https://graph.facebook.com/lowes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1373493",shop:"doityourself"},addTags:{brand:"Lowe's","brand:wikidata":"Q1373493","brand:wikipedia":"en:Lowe's",name:"Lowe's",shop:"doityourself"},terms:[],matchScore:2,suggestion:true},"shop/doityourself/Menards":{name:"Menards",icon:"temaki-tools",imageURL:"https://graph.facebook.com/MenardsHomeImprovement/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1639897",shop:"doityourself"},addTags:{brand:"Menards","brand:wikidata":"Q1639897","brand:wikipedia":"en:Menards",name:"Menards",shop:"doityourself"},terms:[],matchScore:2,suggestion:true},"shop/doityourself/Mr.Bricolage":{name:"Mr.Bricolage",icon:"temaki-tools",imageURL:"https://graph.facebook.com/mr.bricolagefrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3141657",shop:"doityourself"},addTags:{brand:"Mr.Bricolage","brand:wikidata":"Q3141657","brand:wikipedia":"fr:Mr Bricolage",name:"Mr.Bricolage",shop:"doityourself"},terms:[],matchScore:2,suggestion:true},"shop/doityourself/OBI":{name:"OBI",icon:"temaki-tools",imageURL:"https://graph.facebook.com/obirussia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q300518",shop:"doityourself"},addTags:{brand:"OBI","brand:wikidata":"Q300518","brand:wikipedia":"en:Obi (store)",name:"OBI",shop:"doityourself"},terms:[],matchScore:2,suggestion:true},"shop/doityourself/Praktiker":{name:"Praktiker",icon:"temaki-tools",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FPraktiker%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q680214",shop:"doityourself"},addTags:{brand:"Praktiker","brand:wikidata":"Q680214","brand:wikipedia":"en:Praktiker",name:"Praktiker",shop:"doityourself"},terms:[],matchScore:2,suggestion:true},"shop/doityourself/Praxis":{name:"Praxis",icon:"temaki-tools",imageURL:"https://graph.facebook.com/praxis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2741995",shop:"doityourself"},addTags:{brand:"Praxis","brand:wikidata":"Q2741995","brand:wikipedia":"nl:Praxis (winkel)",name:"Praxis",shop:"doityourself"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Promart":{name:"Promart",icon:"temaki-tools",imageURL:"https://graph.facebook.com/PROMARTHomecenter/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17626095",shop:"doityourself"},addTags:{brand:"Promart","brand:wikidata":"Q17626095","brand:wikipedia":"en:Promart",name:"Promart",shop:"doityourself"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Rona":{name:"Rona",icon:"temaki-tools",imageURL:"https://graph.facebook.com/ronainc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3415283",shop:"doityourself"},addTags:{brand:"Rona","brand:wikidata":"Q3415283","brand:wikipedia":"en:Rona, Inc.",name:"Rona",shop:"doityourself"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Screwfix":{name:"Screwfix",icon:"temaki-tools",imageURL:"https://graph.facebook.com/Screwfix/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7439115",shop:"doityourself"},addTags:{brand:"Screwfix","brand:wikidata":"Q7439115","brand:wikipedia":"en:Screwfix",name:"Screwfix",shop:"doityourself"},terms:[],matchScore:2,suggestion:true},"shop/doityourself/Sodimac":{name:"Sodimac",icon:"temaki-tools",imageURL:"https://graph.facebook.com/homecenter/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7553274",shop:"doityourself"},addTags:{brand:"Sodimac","brand:wikidata":"Q7553274","brand:wikipedia":"es:Sodimac",name:"Sodimac",shop:"doityourself"},terms:["sodimac constructor"],matchScore:2,suggestion:true},"shop/doityourself/Tekzen":{name:"Tekzen",icon:"temaki-tools",imageURL:"https://graph.facebook.com/tekzenturkiye/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25475379",shop:"doityourself"},addTags:{brand:"Tekzen","brand:wikidata":"Q25475379","brand:wikipedia":"tr:Tekzen",name:"Tekzen",shop:"doityourself"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Toom Baumarkt":{name:"Toom Baumarkt",icon:"temaki-tools",imageURL:"https://graph.facebook.com/192246064148765/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2442970",shop:"doityourself"},addTags:{brand:"Toom Baumarkt","brand:wikidata":"Q2442970","brand:wikipedia":"de:Toom Baumarkt",name:"Toom Baumarkt",shop:"doityourself"},countryCodes:["de"],terms:["toom"],matchScore:2,suggestion:true},"shop/doityourself/Travis Perkins":{name:"Travis Perkins",icon:"temaki-tools",imageURL:"https://graph.facebook.com/TravisPerkinsPlcUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2450664",shop:"doityourself"},addTags:{brand:"Travis Perkins","brand:wikidata":"Q2450664","brand:wikipedia":"en:Travis Perkins",name:"Travis Perkins",shop:"doityourself"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Weldom":{name:"Weldom",icon:"temaki-tools",imageURL:"https://graph.facebook.com/Weldom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16683226",shop:"doityourself"},addTags:{brand:"Weldom","brand:wikidata":"Q16683226","brand:wikipedia":"fr:Weldom",name:"Weldom",shop:"doityourself"},terms:[],matchScore:2,suggestion:true},"shop/doityourself/Wickes":{name:"Wickes",icon:"temaki-tools",imageURL:"https://graph.facebook.com/Wickes.co.uk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7998350",shop:"doityourself"},addTags:{brand:"Wickes","brand:wikidata":"Q7998350","brand:wikipedia":"en:Wickes",name:"Wickes",shop:"doityourself"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/jem & fix":{name:"jem & fix",icon:"temaki-tools",imageURL:"https://graph.facebook.com/jemogfix/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12319200",shop:"doityourself"},addTags:{brand:"jem & fix","brand:wikidata":"Q12319200","brand:wikipedia":"da:Jem & fix",name:"jem & fix",shop:"doityourself"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Леруа Мерлен":{name:"Леруа Мерлен",icon:"temaki-tools",imageURL:"https://graph.facebook.com/leroymerlin/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q889624",shop:"doityourself"},addTags:{brand:"Леруа Мерлен","brand:en":"Leroy Merlin","brand:wikidata":"Q889624","brand:wikipedia":"en:Leroy Merlin",name:"Леруа Мерлен","name:en":"Leroy Merlin",shop:"doityourself"},terms:[],matchScore:2,suggestion:true},"shop/doityourself/カインズホーム":{name:"カインズホーム",icon:"temaki-tools",imageURL:"https://graph.facebook.com/cainzfun/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11293852",shop:"doityourself"},addTags:{brand:"カインズホーム","brand:en":"Cainz Home","brand:ja":"カインズホーム","brand:wikidata":"Q11293852","brand:wikipedia":"ja:カインズ",name:"カインズホーム","name:en":"Cainz Home","name:ja":"カインズホーム",shop:"doityourself"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/コメリ":{name:"コメリ",icon:"temaki-tools",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FKOMERI%20LOGO.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11302690",shop:"doityourself"},addTags:{brand:"コメリ","brand:ja":"コメリ","brand:wikidata":"Q11302690","brand:wikipedia":"ja:コメリ",name:"コメリ","name:en":"Komeri","name:ja":"コメリ",shop:"doityourself"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/コーナン":{name:"コーナン",icon:"temaki-tools",imageURL:"https://graph.facebook.com/kohnan.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11303403",shop:"doityourself"},addTags:{brand:"コーナン","brand:ja":"コーナン","brand:wikidata":"Q11303403","brand:wikipedia":"ja:コーナン",name:"コーナン","name:en":"Kohnan","name:ja":"コーナン",shop:"doityourself"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/dry_cleaning/5àsec":{name:"5àsec",icon:"temaki-clothes_hanger",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%205%C3%A0sec.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2817899",shop:"dry_cleaning"},addTags:{brand:"5àsec","brand:wikidata":"Q2817899","brand:wikipedia":"fr:5àsec",name:"5àsec",shop:"dry_cleaning"},terms:[],matchScore:2,suggestion:true},"shop/dry_cleaning/Martinizing Dry Cleaning":{name:"Martinizing Dry Cleaning",icon:"temaki-clothes_hanger",geometry:["point","area"],tags:{"brand:wikidata":"Q6777169",shop:"dry_cleaning"},addTags:{brand:"Martinizing Dry Cleaning","brand:wikidata":"Q6777169","brand:wikipedia":"en:Martinizing Dry Cleaning",name:"Martinizing Dry Cleaning",shop:"dry_cleaning"},terms:[],matchScore:2,suggestion:true},"shop/dry_cleaning/Диана":{name:"Диана",icon:"temaki-clothes_hanger",imageURL:"https://graph.facebook.com/diana.dryclean/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62105088",shop:"dry_cleaning"},addTags:{brand:"Диана","brand:wikidata":"Q62105088",name:"Диана",shop:"dry_cleaning"},terms:[],matchScore:2,suggestion:true},"shop/dry_cleaning/タカケンサンシャイン":{name:"タカケンサンシャイン",icon:"temaki-clothes_hanger",geometry:["point","area"],tags:{"brand:wikidata":"Q11315914",shop:"dry_cleaning"},addTags:{brand:"タカケンサンシャイン","brand:en":"Takaken Sunshine","brand:ja":"タカケンサンシャイン","brand:wikidata":"Q11315914","brand:wikipedia":"ja:タカケンサンシャイン",name:"タカケンサンシャイン","name:en":"Takaken Sunshine","name:ja":"タカケンサンシャイン",shop:"dry_cleaning"},countryCodes:["jp"],terms:["タカケンクリーング"],matchScore:2,suggestion:true},"shop/dry_cleaning/ホワイト急便":{name:"ホワイト急便",icon:"temaki-clothes_hanger",geometry:["point","area"],tags:{"brand:wikidata":"Q11505557",shop:"dry_cleaning"},addTags:{brand:"ホワイト急便","brand:en":"White Kyuubin","brand:ja":"ホワイト急便","brand:wikidata":"Q11505557","brand:wikipedia":"ja:日本さわやかグループ",name:"ホワイト急便","name:en":"White Kyuubin","name:ja":"ホワイト急便",shop:"dry_cleaning"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/dry_cleaning/白洋舎":{name:"白洋舎",icon:"temaki-clothes_hanger",geometry:["point","area"],tags:{"brand:wikidata":"Q11579995",shop:"dry_cleaning"},addTags:{brand:"白洋舎","brand:en":"Hakuyosha","brand:wikidata":"Q11579995","brand:wikipedia":"ja:白洋舎",name:"白洋舎","name:en":"Hakuyosha",shop:"dry_cleaning"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Apple Store":{name:"Apple Store",icon:"fas-plug",imageURL:"https://graph.facebook.com/apple/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q421253",shop:"electronics"},addTags:{brand:"Apple Store","brand:wikidata":"Q421253","brand:wikipedia":"en:Apple Store",name:"Apple Store",shop:"electronics"},terms:[],matchScore:2,suggestion:true},"shop/electronics/Batteries Plus Bulbs":{name:"Batteries Plus Bulbs",icon:"fas-plug",imageURL:"https://graph.facebook.com/batterieprofessionnelcom-1734242166818176/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17005157",shop:"electronics"},addTags:{brand:"Batteries Plus Bulbs","brand:wikidata":"Q17005157","brand:wikipedia":"en:Batteries Plus Bulbs",name:"Batteries Plus Bulbs",shop:"electronics"},terms:["batteries plus"],matchScore:2,suggestion:true},"shop/electronics/Best Buy":{name:"Best Buy",icon:"fas-plug",imageURL:"https://graph.facebook.com/bestbuy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q533415",shop:"electronics"},addTags:{brand:"Best Buy","brand:wikidata":"Q533415","brand:wikipedia":"en:Best Buy",name:"Best Buy",shop:"electronics"},terms:[],matchScore:2,suggestion:true},"shop/electronics/Boulanger":{name:"Boulanger",icon:"fas-plug",imageURL:"https://graph.facebook.com/Boulanger.Electromenager.Multimedia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2921695",shop:"electronics"},addTags:{brand:"Boulanger","brand:wikidata":"Q2921695","brand:wikipedia":"fr:Boulanger (entreprise)",name:"Boulanger",shop:"electronics"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/electronics/CeX":{name:"CeX",icon:"fas-plug",imageURL:"https://graph.facebook.com/CeX/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5055676",shop:"electronics"},addTags:{brand:"CeX","brand:wikidata":"Q5055676","brand:wikipedia":"en:CeX (company)",name:"CeX",shop:"electronics"},countryCodes:["au","es","gb","ie","in","it","mx","nl","pl","pt"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Currys":{name:"Currys",icon:"fas-plug",imageURL:"https://graph.facebook.com/curryspcworld/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3246464",shop:"electronics"},addTags:{brand:"Currys","brand:wikidata":"Q3246464","brand:wikipedia":"en:Currys",name:"Currys",shop:"electronics"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Currys PC World":{name:"Currys PC World",icon:"fas-plug",imageURL:"https://graph.facebook.com/curryspcworld/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7118727",shop:"electronics"},addTags:{brand:"Currys PC World","brand:wikidata":"Q7118727","brand:wikipedia":"en:PC World (retailer)",name:"Currys PC World",shop:"electronics"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Darty":{name:"Darty",icon:"fas-plug",imageURL:"https://graph.facebook.com/darty/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3117381",shop:"electronics"},addTags:{brand:"Darty","brand:wikidata":"Q3117381","brand:wikipedia":"en:Groupe Fnac Darty",name:"Darty",shop:"electronics"},terms:[],matchScore:2,suggestion:true},"shop/electronics/Elektra":{name:"Elektra",icon:"fas-plug",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMural%20Elektra.JPG&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1142753",shop:"electronics"},addTags:{brand:"Elektra","brand:wikidata":"Q1142753","brand:wikipedia":"es:Grupo Elektra",name:"Elektra",shop:"electronics"},countryCodes:["gt","hn","pa","pe","sv"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Elgiganten":{name:"Elgiganten",icon:"fas-plug",imageURL:"https://graph.facebook.com/elgiganten.dk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17050121",shop:"electronics"},addTags:{brand:"Elgiganten","brand:wikidata":"Q17050121","brand:wikipedia":"en:Elgiganten",name:"Elgiganten",shop:"electronics"},terms:[],matchScore:2,suggestion:true},"shop/electronics/Euronics":{name:"Euronics",icon:"fas-plug",imageURL:"https://graph.facebook.com/EuronicsItalia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q184860",shop:"electronics"},addTags:{brand:"Euronics","brand:wikidata":"Q184860","brand:wikipedia":"en:Euronics",name:"Euronics",shop:"electronics"},terms:[],matchScore:2,suggestion:true},"shop/electronics/Expert":{name:"Expert",icon:"fas-plug",imageURL:"https://graph.facebook.com/expert.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q680990",shop:"electronics"},addTags:{brand:"Expert","brand:wikidata":"Q680990","brand:wikipedia":"en:Expert (company)",name:"Expert",shop:"electronics"},terms:[],matchScore:2,suggestion:true},"shop/electronics/Hartlauer":{name:"Hartlauer",icon:"fas-plug",imageURL:"https://graph.facebook.com/loewennews/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1587223",shop:"electronics"},addTags:{brand:"Hartlauer","brand:wikidata":"Q1587223","brand:wikipedia":"de:Hartlauer",name:"Hartlauer",shop:"electronics"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Interdiscount":{name:"Interdiscount",icon:"fas-plug",imageURL:"https://graph.facebook.com/interdiscount/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1665980",shop:"electronics"},addTags:{brand:"Interdiscount","brand:wikidata":"Q1665980","brand:wikipedia":"de:Interdiscount",name:"Interdiscount",shop:"electronics"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"shop/electronics/JB Hi-Fi":{name:"JB Hi-Fi",icon:"fas-plug",imageURL:"https://graph.facebook.com/JBHiFi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3310113",shop:"electronics"},addTags:{brand:"JB Hi-Fi","brand:wikidata":"Q3310113","brand:wikipedia":"en:JB Hi-Fi",name:"JB Hi-Fi",shop:"electronics"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Kjell & Company":{name:"Kjell & Company",icon:"fas-plug",imageURL:"https://graph.facebook.com/kjellcoSverige/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6419332",shop:"electronics"},addTags:{brand:"Kjell & Company","brand:wikidata":"Q6419332","brand:wikipedia":"en:Kjell & Company",name:"Kjell & Company",shop:"electronics"},countryCodes:["no","se"],terms:["kjell och company"],matchScore:2,suggestion:true},"shop/electronics/Komputronik":{name:"Komputronik",icon:"fas-plug",imageURL:"https://graph.facebook.com/komputronik/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11742085",shop:"electronics"},addTags:{brand:"Komputronik","brand:wikidata":"Q11742085","brand:wikipedia":"pl:Komputronik",name:"Komputronik",shop:"electronics"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/electronics/La Curacao":{name:"La Curacao",icon:"fas-plug",imageURL:"https://graph.facebook.com/CuracaoUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5194599",shop:"electronics"},addTags:{brand:"La Curacao","brand:wikidata":"Q5194599","brand:wikipedia":"en:Curacao (retail store)",name:"La Curacao",shop:"electronics"},terms:[],matchScore:2,suggestion:true},"shop/electronics/Maplin":{name:"Maplin",icon:"fas-plug",imageURL:"https://graph.facebook.com/Maplin/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6754124",shop:"electronics"},addTags:{brand:"Maplin","brand:wikidata":"Q6754124","brand:wikipedia":"en:Maplin (retailer)",name:"Maplin",shop:"electronics"},terms:[],matchScore:2,suggestion:true},"shop/electronics/Media Expert":{name:"Media Expert",icon:"fas-plug",imageURL:"https://graph.facebook.com/mediaexpert/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11776794",shop:"electronics"},addTags:{brand:"Media Expert","brand:wikidata":"Q11776794","brand:wikipedia":"pl:Media Expert",name:"Media Expert",shop:"electronics"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Media Markt":{name:"Media Markt",icon:"fas-plug",imageURL:"https://graph.facebook.com/mediamarkt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2381223",shop:"electronics"},addTags:{brand:"Media Markt","brand:wikidata":"Q2381223","brand:wikipedia":"en:Media Markt",name:"Media Markt",shop:"electronics"},terms:[],matchScore:2,suggestion:true},"shop/electronics/Musimundo":{name:"Musimundo",icon:"fas-plug",imageURL:"https://graph.facebook.com/musimundo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6034719",shop:"electronics"},addTags:{brand:"Musimundo","brand:wikidata":"Q6034719","brand:wikipedia":"es:Musimundo",name:"Musimundo",shop:"electronics"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Neonet":{name:"Neonet",icon:"fas-plug",imageURL:"https://graph.facebook.com/Neonetpl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11790622",shop:"electronics"},addTags:{brand:"Neonet","brand:wikidata":"Q11790622","brand:wikipedia":"pl:Neonet",name:"Neonet",shop:"electronics"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/electronics/RTV Euro AGD":{name:"RTV Euro AGD",icon:"fas-plug",imageURL:"https://graph.facebook.com/rtveuroagd/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7277895",shop:"electronics"},addTags:{brand:"RTV Euro AGD","brand:wikidata":"Q7277895","brand:wikipedia":"pl:RTV Euro AGD",name:"RTV Euro AGD",shop:"electronics"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/electronics/RadioShack":{name:"RadioShack",icon:"fas-plug",imageURL:"https://graph.facebook.com/RadioShack/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1195490",shop:"electronics"},addTags:{brand:"RadioShack","brand:wikidata":"Q1195490","brand:wikipedia":"en:RadioShack",name:"RadioShack",shop:"electronics"},terms:[],matchScore:2,suggestion:true},"shop/electronics/Samsung":{name:"Samsung",icon:"fas-plug",imageURL:"https://graph.facebook.com/SamsungNewsroom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20718",shop:"electronics"},addTags:{brand:"Samsung","brand:wikidata":"Q20718","brand:wikipedia":"en:Samsung Electronics",name:"Samsung",shop:"electronics"},terms:[],matchScore:2,suggestion:true},"shop/electronics/Saturn":{name:"Saturn",icon:"fas-plug",imageURL:"https://graph.facebook.com/SaturnDE/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2543504",shop:"electronics"},addTags:{brand:"Saturn","brand:wikidata":"Q2543504","brand:wikipedia":"en:Saturn (retailer)",name:"Saturn",shop:"electronics"},countryCodes:["at","de","lu","pl"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Sony":{name:"Sony",icon:"fas-plug",imageURL:"https://graph.facebook.com/sony.jpn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q41187",shop:"electronics"},addTags:{brand:"Sony","brand:wikidata":"Q41187","brand:wikipedia":"en:Sony",name:"Sony",shop:"electronics"},terms:[],matchScore:2,suggestion:true},"shop/electronics/Teknikmagasinet":{name:"Teknikmagasinet",icon:"fas-plug",imageURL:"https://graph.facebook.com/TeknikmagasinetNorge/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3357520",shop:"electronics"},addTags:{brand:"Teknikmagasinet","brand:wikidata":"Q3357520","brand:wikipedia":"en:Teknikmagasinet",name:"Teknikmagasinet",shop:"electronics"},countryCodes:["fi","no","se"],terms:[],matchScore:2,suggestion:true},"shop/electronics/The Source":{name:"The Source",icon:"fas-plug",imageURL:"https://graph.facebook.com/thesourcecanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3212934",shop:"electronics"},addTags:{brand:"The Source","brand:wikidata":"Q3212934","brand:wikipedia":"en:The Source (retailer)",name:"The Source",shop:"electronics"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Unieuro":{name:"Unieuro",icon:"fas-plug",imageURL:"https://graph.facebook.com/unieuro/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4004687",shop:"electronics"},addTags:{brand:"Unieuro","brand:wikidata":"Q4004687","brand:wikipedia":"en:Unieuro",name:"Unieuro",shop:"electronics"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Worten":{name:"Worten",icon:"fas-plug",imageURL:"https://graph.facebook.com/WortenES/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10394039",shop:"electronics"},addTags:{brand:"Worten","brand:wikidata":"Q10394039","brand:wikipedia":"pt:Worten",name:"Worten",shop:"electronics"},countryCodes:["es","pt"],terms:[],matchScore:2,suggestion:true},"shop/electronics/М.Видео":{name:"М.Видео",icon:"fas-plug",imageURL:"https://graph.facebook.com/mvideo.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6558800",shop:"electronics"},addTags:{brand:"М.Видео","brand:en":"M.video","brand:wikidata":"Q6558800","brand:wikipedia":"en:M.video",name:"М.Видео","name:en":"M.video",shop:"electronics"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Фокстрот":{name:"Фокстрот",icon:"fas-plug",imageURL:"https://graph.facebook.com/foxtrotinfo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16721578",shop:"electronics"},addTags:{brand:"Фокстрот","brand:wikidata":"Q16721578","brand:wikipedia":"uk:Фокстрот (торгова мережа)",name:"Фокстрот",shop:"electronics"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Эльдорадо":{name:"Эльдорадо",icon:"fas-plug",imageURL:"https://graph.facebook.com/Eldorado.Stores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4531492",shop:"electronics"},addTags:{brand:"Эльдорадо","brand:wikidata":"Q4531492","brand:wikipedia":"ru:Эльдорадо (сеть магазинов)",name:"Эльдорадо",shop:"electronics"},terms:[],matchScore:2,suggestion:true},"shop/electronics/エディオン":{name:"エディオン",icon:"fas-plug",imageURL:"https://graph.facebook.com/edion.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11290252",shop:"electronics"},addTags:{brand:"エディオン","brand:en":"EDION","brand:ja":"エディオン","brand:wikidata":"Q11290252","brand:wikipedia":"ja:エディオン",name:"エディオン","name:en":"EDION","name:ja":"エディオン",shop:"electronics"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/electronics/ケーズデンキ":{name:"ケーズデンキ",icon:"fas-plug",geometry:["point","area"],tags:{"brand:wikidata":"Q6322472",shop:"electronics"},addTags:{brand:"ケーズデンキ","brand:en":"K's Denki","brand:ja":"ケーズデンキ","brand:wikidata":"Q6322472","brand:wikipedia":"ja:ケーズホールディングス",name:"ケーズデンキ","name:en":"K's Denki","name:ja":"ケーズデンキ",shop:"electronics"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/electronics/コジマ":{name:"コジマ",icon:"fas-plug",imageURL:"https://graph.facebook.com/kojima.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11302052",shop:"electronics"},addTags:{brand:"コジマ","brand:en":"Kojima","brand:ja":"コジマ","brand:wikidata":"Q11302052","brand:wikipedia":"ja:コジマ",name:"コジマ","name:en":"Kojima","name:ja":"コジマ",shop:"electronics"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/electronics/ソフマップ":{name:"ソフマップ",icon:"fas-plug",imageURL:"https://pbs.twimg.com/profile_images/1073173217404043266/fIyrfOW-_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7553789",shop:"electronics"},addTags:{brand:"ソフマップ","brand:en":"Sofmap","brand:ja":"ソフマップ","brand:wikidata":"Q7553789","brand:wikipedia":"ja:ソフマップ",name:"ソフマップ","name:en":"Sofmap","name:ja":"ソフマップ",shop:"electronics"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/electronics/ビックカメラ":{name:"ビックカメラ",icon:"fas-plug",imageURL:"https://graph.facebook.com/biccamera.page/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4903531",shop:"electronics"},addTags:{brand:"ビックカメラ","brand:en":"Bic Camera","brand:ja":"ビックカメラ","brand:wikidata":"Q4903531","brand:wikipedia":"ja:ビックカメラ",name:"ビックカメラ","name:en":"Bic Camera","name:ja":"ビックカメラ",shop:"electronics"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/electronics/ヤマダ電機":{name:"ヤマダ電機",icon:"fas-plug",geometry:["point","area"],tags:{"brand:wikidata":"Q1096390",shop:"electronics"},addTags:{brand:"ヤマダ電機","brand:en":"Yamada Denki","brand:ja":"ヤマダ電機","brand:wikidata":"Q1096390","brand:wikipedia":"en:Yamada Denki",name:"ヤマダ電機","name:en":"Yamada Denki","name:ja":"ヤマダ電機",shop:"electronics"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/electronics/全國電子":{name:"全國電子",icon:"fas-plug",imageURL:"https://graph.facebook.com/elifemall.com.tw/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10891540",shop:"electronics"},addTags:{brand:"全國電子","brand:en":"E-life Mall","brand:wikidata":"Q10891540","brand:wikipedia":"zh:全國電子",name:"全國電子","name:en":"E-life Mall",shop:"electronics"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/electronics/燦坤3C":{name:"燦坤3C",icon:"fas-plug",geometry:["point","area"],tags:{"brand:wikidata":"Q11569285",shop:"electronics"},addTags:{brand:"燦坤3C","brand:en":"Tsannkuen 3C","brand:wikidata":"Q11569285","brand:wikipedia":"zh:燦坤",name:"燦坤3C","name:en":"Tsannkuen 3C",shop:"electronics"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/erotic/Ann Summers":{name:"Ann Summers",icon:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/1104069397008789504/jN1FCnL5_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q579524",shop:"erotic"},addTags:{brand:"Ann Summers","brand:wikidata":"Q579524","brand:wikipedia":"en:Ann Summers",name:"Ann Summers",shop:"erotic"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/erotic/Orion":{name:"Orion",icon:"maki-shop",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FNoimage%20pr.gif&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1609577",shop:"erotic"},addTags:{brand:"Orion","brand:wikidata":"Q1609577","brand:wikipedia":"de:Orion (Erotik)",name:"Orion",shop:"erotic"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/fabric/Mondial Tissus":{name:"Mondial Tissus",icon:"fas-tape",imageURL:"https://graph.facebook.com/MondialTissus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17635288",shop:"fabric"},addTags:{brand:"Mondial Tissus","brand:wikidata":"Q17635288","brand:wikipedia":"fr:Mondial Tissus",name:"Mondial Tissus",shop:"fabric"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/florist/Blume 2000":{name:"Blume 2000",icon:"maki-florist",imageURL:"https://graph.facebook.com/Blume2000.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q886166",shop:"florist"},addTags:{brand:"Blume 2000","brand:wikidata":"Q886166","brand:wikipedia":"de:Blume 2000",name:"Blume 2000",shop:"florist"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/florist/Blumen Risse":{name:"Blumen Risse",icon:"maki-florist",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Blumen%20Risse.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q886177",shop:"florist"},addTags:{brand:"Blumen Risse","brand:wikidata":"Q886177","brand:wikipedia":"de:Blumen Risse",name:"Blumen Risse",shop:"florist"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/florist/Interflora":{name:"Interflora",icon:"maki-florist",imageURL:"https://graph.facebook.com/Interflora.France/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q692179",shop:"florist"},addTags:{brand:"Interflora","brand:wikidata":"Q692179","brand:wikipedia":"en:Interflora",name:"Interflora",shop:"florist"},countryCodes:["fr","gb","no","se"],terms:[],matchScore:2,suggestion:true},"shop/florist/Monceau Fleurs":{name:"Monceau Fleurs",icon:"maki-florist",geometry:["point","area"],tags:{"brand:wikidata":"Q17629431",shop:"florist"},addTags:{brand:"Monceau Fleurs","brand:wikidata":"Q17629431","brand:wikipedia":"fr:Emova Group",name:"Monceau Fleurs",shop:"florist"},countryCodes:["be","fr"],terms:[],matchScore:2,suggestion:true},"shop/frozen_food/Picard":{name:"Picard",icon:"maki-shop",imageURL:"https://graph.facebook.com/picardsurgeles/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3382454",shop:"frozen_food"},addTags:{brand:"Picard","brand:wikidata":"Q3382454","brand:wikipedia":"en:Picard Surgelés",name:"Picard",shop:"frozen_food"},terms:[],matchScore:2,suggestion:true},"shop/funeral_directors/PFG":{name:"PFG",icon:"maki-cemetery",geometry:["point","area"],tags:{"brand:wikidata":"Q3396087",shop:"funeral_directors"},addTags:{brand:"PFG","brand:wikidata":"Q3396087","brand:wikipedia":"fr:Pompes funèbres générales",name:"PFG",official_name:"Pompes Funèbres Générales",shop:"funeral_directors"},countryCodes:["fr"],terms:["pompes funèbres générales"],matchScore:2,suggestion:true},"shop/funeral_directors/Roblot":{name:"Roblot",icon:"maki-cemetery",geometry:["point","area"],tags:{"brand:wikidata":"Q63247414",shop:"funeral_directors"},addTags:{brand:"Roblot","brand:wikidata":"Q63247414",name:"Roblot",shop:"funeral_directors"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/funeral_directors/Roc-Eclerc":{name:"Roc-Eclerc",icon:"maki-cemetery",imageURL:"https://graph.facebook.com/grouperoceclerc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62558102",shop:"funeral_directors"},addTags:{brand:"Roc-Eclerc","brand:wikidata":"Q62558102",name:"Roc-Eclerc",shop:"funeral_directors"},terms:[],matchScore:2,suggestion:true},"shop/funeral_directors/The Co-operative Funeralcare":{name:"The Co-operative Funeralcare",icon:"maki-cemetery",imageURL:"https://pbs.twimg.com/profile_images/1034361261193134080/1PfqKyVV_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7726521",shop:"funeral_directors"},addTags:{brand:"The Co-operative Funeralcare","brand:wikidata":"Q7726521","brand:wikipedia":"en:Co-op Funeralcare",name:"The Co-operative Funeralcare",shop:"funeral_directors"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Aaron's":{name:"Aaron's",icon:"fas-couch",imageURL:"https://pbs.twimg.com/profile_images/1112819902178582528/GeuCBPI0_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q10397787",shop:"furniture"},addTags:{brand:"Aaron's","brand:wikidata":"Q10397787","brand:wikipedia":"en:Aaron's, Inc.",name:"Aaron's",shop:"furniture"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/American Signature Furniture":{name:"American Signature Furniture",icon:"fas-couch",imageURL:"https://graph.facebook.com/AmericanSignatureFurnitureUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63859411",shop:"furniture"},addTags:{brand:"American Signature Furniture","brand:wikidata":"Q63859411",name:"American Signature Furniture",shop:"furniture"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Arhaus":{name:"Arhaus",icon:"fas-couch",imageURL:"https://graph.facebook.com/44947264751/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q35689887",shop:"furniture"},addTags:{brand:"Arhaus","brand:wikidata":"Q35689887",name:"Arhaus",shop:"furniture"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Ashley HomeStore":{name:"Ashley HomeStore",icon:"fas-couch",imageURL:"https://pbs.twimg.com/profile_images/793453568288325636/UiWzv4oc_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4805437",shop:"furniture"},addTags:{brand:"Ashley HomeStore","brand:wikidata":"Q4805437","brand:wikipedia":"en:Ashley HomeStore",name:"Ashley Furniture",shop:"furniture"},countryCodes:["ca","us"],terms:["ashley furniture","ashley furniture homestore"],matchScore:2,suggestion:true},"shop/furniture/Black Red White":{name:"Black Red White",icon:"fas-couch",geometry:["point","area"],tags:{"brand:wikidata":"Q4921546",shop:"furniture"},addTags:{brand:"Black Red White","brand:wikidata":"Q4921546","brand:wikipedia":"en:Black Red White",name:"Black Red White",shop:"furniture"},terms:[],matchScore:2,suggestion:true},"shop/furniture/BoConcept":{name:"BoConcept",icon:"fas-couch",imageURL:"https://graph.facebook.com/boconceptusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11338915",shop:"furniture"},addTags:{brand:"BoConcept","brand:wikidata":"Q11338915","brand:wikipedia":"en:BoConcept",name:"BoConcept",shop:"furniture"},terms:[],matchScore:2,suggestion:true},"shop/furniture/Bob’s Discount Furniture":{name:"Bob’s Discount Furniture",icon:"fas-couch",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBob's%20Discount%20Furniture%20Logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4931582",shop:"furniture"},addTags:{brand:"Bob’s Discount Furniture","brand:wikidata":"Q4931582","brand:wikipedia":"en:Bob's Discount Furniture",name:"Bob’s Discount Furniture",shop:"furniture"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Bodzio":{name:"Bodzio",icon:"fas-couch",geometry:["point","area"],tags:{"brand:wikidata":"Q20034845",shop:"furniture"},addTags:{brand:"Bodzio","brand:wikidata":"Q20034845","brand:wikipedia":"pl:Fabryka Mebli Bodzio",name:"Bodzio",shop:"furniture"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/furniture/But":{name:"But",icon:"fas-couch",geometry:["point","area"],tags:{"brand:wikidata":"Q18720442",shop:"furniture"},addTags:{brand:"But","brand:wikidata":"Q18720442","brand:wikipedia":"en:BUT (retailer)",name:"But",shop:"furniture"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Cabinets To Go":{name:"Cabinets To Go",icon:"fas-couch",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCabinets%20To%20Go%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q25245346",shop:"furniture"},addTags:{brand:"Cabinets To Go","brand:wikidata":"Q25245346","brand:wikipedia":"en:Cabinets To Go",name:"Cabinets To Go",shop:"furniture"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Conforama":{name:"Conforama",icon:"fas-couch",imageURL:"https://pbs.twimg.com/profile_images/1122801701830955008/6KvpWuQS_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q541134",shop:"furniture"},addTags:{brand:"Conforama","brand:wikidata":"Q541134","brand:wikipedia":"en:Conforama",name:"Conforama",shop:"furniture"},terms:[],matchScore:2,suggestion:true},"shop/furniture/Crate & Barrel":{name:"Crate & Barrel",icon:"fas-couch",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCrateandBarrelLogo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5182604",shop:"furniture"},addTags:{brand:"Crate & Barrel","brand:wikidata":"Q5182604","brand:wikipedia":"en:Crate & Barrel",name:"Crate & Barrel",shop:"furniture"},terms:["crate and barrel"],matchScore:2,suggestion:true},"shop/furniture/DFS":{name:"DFS",icon:"fas-couch",imageURL:"https://pbs.twimg.com/profile_images/676402722946621440/S5P4YZXG_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5204927",shop:"furniture"},addTags:{brand:"DFS","brand:wikidata":"Q5204927","brand:wikipedia":"en:DFS Furniture",name:"DFS",shop:"furniture"},terms:[],matchScore:2,suggestion:true},"shop/furniture/Dänisches Bettenlager":{name:"Dänisches Bettenlager",icon:"fas-couch",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLOGO%20JYSK.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q138913",shop:"furniture"},addTags:{brand:"Dänisches Bettenlager","brand:wikidata":"Q138913","brand:wikipedia":"en:Jysk (store)",name:"Dänisches Bettenlager",shop:"furniture"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Ethan Allen":{name:"Ethan Allen",icon:"fas-couch",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FEthan%20Allen%20Logo.JPG&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5402870",shop:"furniture"},addTags:{brand:"Ethan Allen","brand:wikidata":"Q5402870","brand:wikipedia":"en:Ethan Allen (furniture company)",name:"Ethan Allen",shop:"furniture"},terms:[],matchScore:2,suggestion:true},"shop/furniture/Fly":{name:"Fly",icon:"fas-couch",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FFly-Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1389184",shop:"furniture"},addTags:{brand:"Fly","brand:wikidata":"Q1389184","brand:wikipedia":"fr:Fly (entreprise)",name:"Fly",shop:"furniture"},terms:[],matchScore:2,suggestion:true},"shop/furniture/Harveys":{name:"Harveys",icon:"fas-couch",imageURL:"https://pbs.twimg.com/profile_images/644090357416873984/nuqIAG7O_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5677754",shop:"furniture"},addTags:{brand:"Harveys","brand:wikidata":"Q5677754","brand:wikipedia":"en:Harveys Furniture",name:"Harveys",shop:"furniture"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Havertys":{name:"Havertys",icon:"fas-couch",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FHavertys-logo-new.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5683881",shop:"furniture"},addTags:{brand:"Havertys","brand:wikidata":"Q5683881","brand:wikipedia":"en:Havertys",name:"Havertys",shop:"furniture"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/IKEA":{name:"IKEA",icon:"fas-couch",imageURL:"https://graph.facebook.com/IKEA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q54078",shop:"furniture"},addTags:{brand:"IKEA","brand:wikidata":"Q54078","brand:wikipedia":"en:IKEA",name:"IKEA",shop:"furniture"},terms:[],matchScore:2,suggestion:true},"shop/furniture/JYSK":{name:"JYSK",icon:"fas-couch",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLOGO%20JYSK.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q138913",shop:"furniture"},addTags:{brand:"JYSK","brand:wikidata":"Q138913","brand:wikipedia":"en:Jysk (store)",name:"JYSK",shop:"furniture"},terms:[],matchScore:2,suggestion:true},"shop/furniture/La-Z-Boy":{name:"La-Z-Boy",icon:"fas-couch",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLa-Z-Boy%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q6391583",shop:"furniture"},addTags:{brand:"La-Z-Boy","brand:wikidata":"Q6391583","brand:wikipedia":"en:La-Z-Boy",name:"La-Z-Boy",shop:"furniture"},terms:[],matchScore:2,suggestion:true},"shop/furniture/Pottery Barn":{name:"Pottery Barn",icon:"fas-couch",geometry:["point","area"],tags:{"brand:wikidata":"Q3400126",shop:"furniture"},addTags:{brand:"Pottery Barn","brand:wikidata":"Q3400126","brand:wikipedia":"en:Pottery Barn",name:"Pottery Barn",shop:"furniture"},countryCodes:["au","ca","mx","ph","us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Raymour & Flanigan":{name:"Raymour & Flanigan",icon:"fas-couch",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FRaymour%20%26%20Flanigan%20logo%202018.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q7299290",shop:"furniture"},addTags:{brand:"Raymour & Flanigan","brand:wikidata":"Q7299290","brand:wikipedia":"en:Raymour & Flanigan",name:"Raymour & Flanigan",shop:"furniture"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Rent-A-Center":{name:"Rent-A-Center",icon:"fas-couch",geometry:["point","area"],tags:{"brand:wikidata":"Q7313497",shop:"furniture"},addTags:{brand:"Rent-A-Center","brand:wikidata":"Q7313497","brand:wikipedia":"en:Rent-A-Center",name:"Rent-A-Center",shop:"furniture"},terms:[],matchScore:2,suggestion:true},"shop/furniture/Restoration Hardware":{name:"Restoration Hardware",icon:"fas-couch",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20RH.gif&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q7316207",shop:"furniture"},addTags:{brand:"Restoration Hardware","brand:wikidata":"Q7316207","brand:wikipedia":"en:Restoration Hardware",name:"Restoration Hardware",shop:"furniture"},terms:[],matchScore:2,suggestion:true},"shop/furniture/Roller":{name:"Roller",icon:"fas-couch",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FROLLER%20Logo.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1621286",shop:"furniture"},addTags:{brand:"Roller","brand:wikidata":"Q1621286","brand:wikipedia":"de:Roller (Möbelhaus)",name:"Roller",shop:"furniture"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Rooms To Go":{name:"Rooms To Go",icon:"fas-couch",geometry:["point","area"],tags:{"brand:wikidata":"Q7366329",shop:"furniture"},addTags:{brand:"Rooms To Go","brand:wikidata":"Q7366329","brand:wikipedia":"en:Rooms To Go",name:"Rooms To Go",shop:"furniture"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/ScS":{name:"ScS",icon:"fas-couch",imageURL:"https://pbs.twimg.com/profile_images/1113810857723609089/CHZevsPZ_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q19654399",shop:"furniture"},addTags:{brand:"ScS","brand:wikidata":"Q19654399","brand:wikipedia":"en:ScS",name:"ScS",shop:"furniture"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/furniture/The Brick":{name:"The Brick",icon:"fas-couch",geometry:["point","area"],tags:{"brand:wikidata":"Q7720000",shop:"furniture"},addTags:{brand:"The Brick","brand:wikidata":"Q7720000","brand:wikipedia":"en:The Brick",name:"The Brick",shop:"furniture"},terms:[],matchScore:2,suggestion:true},"shop/furniture/Urban Barn":{name:"Urban Barn",icon:"fas-couch",geometry:["point","area"],tags:{"brand:wikidata":"Q62515207",shop:"furniture"},addTags:{brand:"Urban Barn","brand:wikidata":"Q62515207",name:"Urban Barn",shop:"furniture"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Value City Furniture":{name:"Value City Furniture",icon:"fas-couch",imageURL:"https://graph.facebook.com/ValueCityFurnitureUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63859417",shop:"furniture"},addTags:{brand:"Value City Furniture","brand:wikidata":"Q63859417",name:"Value City Furniture",shop:"furniture"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Williams-Sonoma":{name:"Williams-Sonoma",icon:"fas-couch",imageURL:"https://pbs.twimg.com/profile_images/811867470206214144/p1nrNSEb_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q2581220",shop:"furniture"},addTags:{brand:"Williams-Sonoma","brand:wikidata":"Q2581220","brand:wikipedia":"en:Williams-Sonoma",name:"Williams-Sonoma",shop:"furniture"},countryCodes:["ca","us"],terms:["william sonoma"],matchScore:2,suggestion:true},"shop/furniture/ニトリ":{name:"ニトリ",icon:"fas-couch",imageURL:"https://pbs.twimg.com/profile_images/911049695601991682/HCnF523x_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q10801453",shop:"furniture"},addTags:{brand:"ニトリ","brand:en":"Nitori","brand:ja":"ニトリ","brand:wikidata":"Q10801453","brand:wikipedia":"en:Nitori",name:"ニトリ","name:en":"Nitori","name:ja":"ニトリ",shop:"furniture"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/games/Games Workshop":{name:"Games Workshop",icon:"fas-dice",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FGames%20Workshop%20Logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q587270",shop:"games"},addTags:{brand:"Games Workshop","brand:wikidata":"Q587270","brand:wikipedia":"en:Games Workshop",name:"Games Workshop",shop:"games"},terms:[],matchScore:2,suggestion:true},"shop/garden_centre/Dehner":{name:"Dehner",icon:"maki-garden-centre",imageURL:"https://graph.facebook.com/dehner/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1183029",shop:"garden_centre"},addTags:{brand:"Dehner","brand:wikidata":"Q1183029","brand:wikipedia":"de:Dehner",name:"Dehner",shop:"garden_centre"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/garden_centre/Gamm Vert":{name:"Gamm Vert",icon:"maki-garden-centre",imageURL:"https://graph.facebook.com/gammvert.officiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3095006",shop:"garden_centre"},addTags:{brand:"Gamm Vert","brand:wikidata":"Q3095006","brand:wikipedia":"fr:Gamm Vert",name:"Gamm Vert",shop:"garden_centre"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/garden_centre/Jardiland":{name:"Jardiland",icon:"maki-garden-centre",imageURL:"https://graph.facebook.com/Jardiland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3162276",shop:"garden_centre"},addTags:{brand:"Jardiland","brand:wikidata":"Q3162276","brand:wikipedia":"fr:Jardiland",name:"Jardiland",shop:"garden_centre"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/garden_centre/Point Vert":{name:"Point Vert",icon:"maki-garden-centre",imageURL:"https://graph.facebook.com/Magasin-Point-Vert-EST-444739795728913/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16661975",shop:"garden_centre"},addTags:{brand:"Point Vert","brand:wikidata":"Q16661975","brand:wikipedia":"fr:Magasin vert",name:"Point Vert",shop:"garden_centre"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/garden_centre/Truffaut":{name:"Truffaut",icon:"maki-garden-centre",geometry:["point","area"],tags:{"brand:wikidata":"Q3162640",shop:"garden_centre"},addTags:{brand:"Truffaut","brand:wikidata":"Q3162640","brand:wikipedia":"fr:Jardineries Truffaut",name:"Truffaut",shop:"garden_centre"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/gas/Airgas":{name:"Airgas",icon:"maki-shop",imageURL:"https://graph.facebook.com/airgasusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q80635",shop:"gas"},addTags:{brand:"Airgas","brand:wikidata":"Q80635","brand:wikipedia":"en:Airgas",name:"Airgas",shop:"gas"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/gift/Card Factory":{name:"Card Factory",icon:"maki-gift",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCardfactorylogo.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5038192",shop:"gift"},addTags:{brand:"Card Factory","brand:wikidata":"Q5038192","brand:wikipedia":"en:Card Factory",name:"Card Factory",shop:"gift"},countryCodes:["gb","im"],terms:[],matchScore:2,suggestion:true},"shop/gift/Clintons":{name:"Clintons",icon:"maki-gift",imageURL:"https://pbs.twimg.com/profile_images/979391762551668736/CpD6EAk9_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5134299",shop:"gift"},addTags:{brand:"Clintons","brand:wikidata":"Q5134299","brand:wikipedia":"en:Clintons",name:"Clintons",shop:"gift"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/gift/Disney Store":{name:"Disney Store",icon:"maki-gift",imageURL:"https://pbs.twimg.com/profile_images/378800000036541261/d457adabeec5508a3fd78d152896f12d_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q1047009",shop:"gift"},addTags:{brand:"Disney Store","brand:wikidata":"Q1047009","brand:wikipedia":"en:Disney Store",name:"Disney Store",operator:"Disney Consumer Products","operator:wikidata":"Q3030410","operator:wikipedia":"en:Disney Consumer Products and Interactive Media",shop:"gift"},countryCodes:["ca","fr","us"],terms:[],matchScore:2,suggestion:true},"shop/gift/Hallmark":{name:"Hallmark",icon:"maki-gift",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FHallmark%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1521910",shop:"gift"},addTags:{brand:"Hallmark","brand:wikidata":"Q1521910","brand:wikipedia":"en:Hallmark Cards",name:"Hallmark",shop:"gift"},terms:[],matchScore:2,suggestion:true},"shop/gift/Nanu-Nana":{name:"Nanu-Nana",icon:"maki-gift",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FNanu%20Nana%20Logo%20500x417%2002.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1720245",shop:"gift"},addTags:{brand:"Nanu-Nana","brand:wikidata":"Q1720245","brand:wikipedia":"de:Nanu-Nana",name:"Nanu-Nana",shop:"gift"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/greengrocer/Produce Junction":{name:"Produce Junction",icon:"fas-carrot",imageURL:"https://graph.facebook.com/ProduceJunction/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60583541",shop:"greengrocer"},addTags:{brand:"Produce Junction","brand:wikidata":"Q60583541",name:"Produce Junction",shop:"greengrocer"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser_supply/Sally Beauty Supply":{name:"Sally Beauty Supply",icon:"maki-shop",imageURL:"https://graph.facebook.com/sallybeauty/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7405065",shop:"hairdresser_supply"},addTags:{brand:"Sally Beauty Supply","brand:wikidata":"Q7405065","brand:wikipedia":"en:Sally Beauty Holdings",name:"Sally Beauty Supply",shop:"hairdresser_supply"},countryCodes:["ca","mx","us"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Camille Albane":{name:"Camille Albane",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/CamilleAlbane.Paris/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62965183",shop:"hairdresser"},addTags:{brand:"Camille Albane","brand:wikidata":"Q62965183",name:"Camille Albane",shop:"hairdresser"},terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Cost Cutters":{name:"Cost Cutters",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/CostCutters/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62029366",shop:"hairdresser"},addTags:{brand:"Cost Cutters","brand:wikidata":"Q62029366",name:"Cost Cutters",shop:"hairdresser"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Dessange":{name:"Dessange",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/DESSANGE.Paris/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62979914",shop:"hairdresser"},addTags:{brand:"Dessange","brand:wikidata":"Q62979914",name:"Dessange",shop:"hairdresser"},terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Fantastic Sams":{name:"Fantastic Sams",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/fantasticsamscutandcolor/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5434222",shop:"hairdresser"},addTags:{brand:"Fantastic Sams","brand:wikidata":"Q5434222","brand:wikipedia":"en:Fantastic Sams",name:"Fantastic Sams",shop:"hairdresser"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/First Choice Haircutters":{name:"First Choice Haircutters",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/SignatureStyleSalons/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5452622",shop:"hairdresser"},addTags:{brand:"First Choice Haircutters","brand:wikidata":"Q5452622","brand:wikipedia":"en:First Choice Haircutters",name:"First Choice Haircutters",shop:"hairdresser"},terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Franck Provost":{name:"Franck Provost",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/franck.provost.paris/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62805922",shop:"hairdresser"},addTags:{brand:"Franck Provost","brand:wikidata":"Q62805922","brand:wikipedia":"fr:Franck Provost (Salons de coiffure)",name:"Franck Provost",shop:"hairdresser"},terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Great Clips":{name:"Great Clips",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/GreatClips/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5598967",shop:"hairdresser"},addTags:{brand:"Great Clips","brand:wikidata":"Q5598967","brand:wikipedia":"en:Great Clips",name:"Great Clips",shop:"hairdresser"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Hair Cuttery":{name:"Hair Cuttery",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/haircuttery/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5639484",shop:"hairdresser"},addTags:{brand:"Hair Cuttery","brand:wikidata":"Q5639484","brand:wikipedia":"en:Hair Cuttery",name:"Hair Cuttery",shop:"hairdresser"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Hair Express":{name:"Hair Express",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/hairexpressfriseur/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57550814",shop:"hairdresser"},addTags:{brand:"Hair Express","brand:wikidata":"Q57550814",name:"Hair Express",shop:"hairdresser"},countryCodes:["de","us"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Hairkiller":{name:"Hairkiller",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/hairkillerDetmold/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q58305998",shop:"hairdresser"},addTags:{brand:"Hairkiller","brand:wikidata":"Q58305998",name:"Hairkiller",shop:"hairdresser"},countryCodes:["at","de","lu"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Klier":{name:"Klier",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/frisoerklier/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1465159",shop:"hairdresser"},addTags:{brand:"Klier","brand:wikidata":"Q1465159","brand:wikipedia":"de:Frisör Klier",name:"Klier",shop:"hairdresser"},terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Klipp":{name:"Klipp",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/klipp.frisoer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1737304",shop:"hairdresser"},addTags:{brand:"Klipp","brand:wikidata":"Q1737304","brand:wikipedia":"de:Klipp Frisör",name:"Klipp",shop:"hairdresser"},terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Sport Clips":{name:"Sport Clips",icon:"temaki-beauty_salon",imageURL:"https://pbs.twimg.com/profile_images/969348279170342913/n2vPf8mc_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7579310",shop:"hairdresser"},addTags:{brand:"Sport Clips","brand:wikidata":"Q7579310",name:"Sport Clips",shop:"hairdresser"},terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Supercuts":{name:"Supercuts",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/Supercuts/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7643239",shop:"hairdresser"},addTags:{brand:"Supercuts","brand:wikidata":"Q7643239","brand:wikipedia":"en:Supercuts",name:"Supercuts",shop:"hairdresser"},terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Tchip":{name:"Tchip",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/TCHIP.Coiffure.Officiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62871250",shop:"hairdresser"},addTags:{brand:"Tchip","brand:wikidata":"Q62871250",name:"Tchip",shop:"hairdresser"},terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Toni & Guy":{name:"Toni & Guy",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/toniandguyworld/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q324784",shop:"hairdresser"},addTags:{brand:"Toni & Guy","brand:wikidata":"Q324784","brand:wikipedia":"en:Toni & Guy",name:"Toni & Guy",shop:"hairdresser"},terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Top Hair":{name:"Top Hair",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/Mein.Friseur.Top.Hair/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62523343",shop:"hairdresser"},addTags:{brand:"Top Hair","brand:wikidata":"Q62523343",name:"Top Hair",shop:"hairdresser"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/hardware/Harbor Freight Tools":{name:"Harbor Freight Tools",icon:"temaki-tools",imageURL:"https://graph.facebook.com/harbor.f.tools/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5654601",shop:"hardware"},addTags:{brand:"Harbor Freight Tools","brand:wikidata":"Q5654601","brand:wikipedia":"en:Harbor Freight Tools",name:"Harbor Freight Tools",shop:"hardware"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/hardware/Home Hardware":{name:"Home Hardware",icon:"temaki-tools",imageURL:"https://graph.facebook.com/homehardwarestores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3139611",shop:"hardware"},addTags:{brand:"Home Hardware","brand:wikidata":"Q3139611","brand:wikipedia":"en:Home Hardware",name:"Home Hardware",shop:"hardware"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/hardware/True Value":{name:"True Value",icon:"temaki-tools",imageURL:"https://graph.facebook.com/TrueValue/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7847545",shop:"hardware"},addTags:{brand:"True Value","brand:wikidata":"Q7847545","brand:wikipedia":"en:True Value",name:"True Value",shop:"hardware"},terms:[],matchScore:2,suggestion:true},"shop/hardware/Würth":{name:"Würth",icon:"temaki-tools",imageURL:"https://graph.facebook.com/wuerth.germany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q679750",shop:"hardware"},addTags:{brand:"Würth","brand:wikidata":"Q679750","brand:wikipedia":"de:Würth-Gruppe",name:"Würth",shop:"hardware"},terms:[],matchScore:2,suggestion:true},"shop/hardware/Мосхозторг":{name:"Мосхозторг",icon:"temaki-tools",imageURL:"https://graph.facebook.com/MosHozTorg/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62499092",shop:"hardware"},addTags:{brand:"Мосхозторг","brand:wikidata":"Q62499092",name:"Мосхозторг",shop:"hardware"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/health_food/Holland & Barrett":{name:"Holland & Barrett",icon:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/1106856523878289408/YgV0vPoe_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q5880870",shop:"health_food"},addTags:{brand:"Holland & Barrett","brand:wikidata":"Q5880870","brand:wikipedia":"en:Holland & Barrett",name:"Holland & Barrett",shop:"health_food"},terms:[],matchScore:2,suggestion:true},"shop/hearing_aids/Amplifon":{name:"Amplifon",icon:"maki-shop",imageURL:"https://graph.facebook.com/AmplifonGroupCareers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q477222",shop:"hearing_aids"},addTags:{brand:"Amplifon","brand:wikidata":"Q477222","brand:wikipedia":"en:Amplifon",name:"Amplifon",shop:"hearing_aids"},terms:[],matchScore:2,suggestion:true},"shop/hearing_aids/Audika":{name:"Audika",icon:"maki-shop",imageURL:"https://graph.facebook.com/audikafrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2870745",shop:"hearing_aids"},addTags:{brand:"Audika","brand:wikidata":"Q2870745","brand:wikipedia":"fr:Audika",name:"Audika",shop:"hearing_aids"},terms:[],matchScore:2,suggestion:true},"shop/hearing_aids/Geers":{name:"Geers",icon:"maki-shop",imageURL:"https://graph.facebook.com/geers.hoerakustik/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1497707",shop:"hearing_aids"},addTags:{brand:"Geers","brand:wikidata":"Q1497707","brand:wikipedia":"de:Geers Hörakustik",name:"Geers",shop:"hearing_aids"},terms:[],matchScore:2,suggestion:true},"shop/hearing_aids/Kind Hörgeräte":{name:"Kind Hörgeräte",icon:"maki-shop",imageURL:"https://graph.facebook.com/kindhoergeraete/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q43598590",shop:"hearing_aids"},addTags:{brand:"Kind Hörgeräte","brand:wikidata":"Q43598590","brand:wikipedia":"de:Kind Hörgeräte",name:"Kind Hörgeräte",shop:"hearing_aids"},countryCodes:["de"],terms:["kind"],matchScore:2,suggestion:true},"shop/hearing_aids/Neuroth":{name:"Neuroth",icon:"maki-shop",imageURL:"https://graph.facebook.com/NeurothAG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15836645",shop:"hearing_aids"},addTags:{brand:"Neuroth","brand:wikidata":"Q15836645","brand:wikipedia":"de:Neuroth AG",name:"Neuroth",shop:"hearing_aids"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/hifi/Bang & Olufsen":{name:"Bang & Olufsen",icon:"maki-shop",imageURL:"https://graph.facebook.com/bangolufsenusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q790020",shop:"hifi"},addTags:{brand:"Bang & Olufsen","brand:wikidata":"Q790020","brand:wikipedia":"en:Bang & Olufsen",name:"Bang & Olufsen",shop:"hifi"},terms:[],matchScore:2,suggestion:true},"shop/houseware/Bed Bath & Beyond":{name:"Bed Bath & Beyond",icon:"fas-blender",imageURL:"https://graph.facebook.com/BedBathAndBeyond/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q813782",shop:"houseware"},addTags:{brand:"Bed Bath & Beyond","brand:wikidata":"Q813782","brand:wikipedia":"en:Bed Bath & Beyond",name:"Bed Bath & Beyond",shop:"houseware"},terms:["bed bath and beyond"],matchScore:2,suggestion:true},"shop/houseware/Blokker":{name:"Blokker",icon:"fas-blender",imageURL:"https://graph.facebook.com/BlokkerNL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q884934",shop:"houseware"},addTags:{brand:"Blokker","brand:wikidata":"Q884934","brand:wikipedia":"en:Blokker Holding",name:"Blokker",shop:"houseware"},terms:[],matchScore:2,suggestion:true},"shop/houseware/Cervera":{name:"Cervera",icon:"fas-blender",imageURL:"https://graph.facebook.com/CerveraAB/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10447179",shop:"houseware"},addTags:{brand:"Cervera","brand:wikidata":"Q10447179","brand:wikipedia":"sv:Cervera (företag)",name:"Cervera",shop:"houseware"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/houseware/HomeGoods":{name:"HomeGoods",icon:"fas-blender",imageURL:"https://graph.facebook.com/Homegoods/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5887941",shop:"houseware"},addTags:{brand:"HomeGoods","brand:wikidata":"Q5887941","brand:wikipedia":"en:HomeGoods",name:"HomeGoods",shop:"houseware"},terms:[],matchScore:2,suggestion:true},"shop/houseware/Lagerhaus":{name:"Lagerhaus",icon:"fas-blender",imageURL:"https://graph.facebook.com/lagerhaus.se/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10553211",shop:"houseware"},addTags:{brand:"Lagerhaus","brand:wikidata":"Q10553211","brand:wikipedia":"sv:Lagerhaus",name:"Lagerhaus",shop:"houseware"},terms:[],matchScore:2,suggestion:true},"shop/houseware/Marskramer":{name:"Marskramer",icon:"fas-blender",imageURL:"https://graph.facebook.com/marskramer.nl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2305917",shop:"houseware"},addTags:{brand:"Marskramer","brand:wikidata":"Q2305917","brand:wikipedia":"nl:Marskramer (warenhuis)",name:"Marskramer",shop:"houseware"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/houseware/Old Time Pottery":{name:"Old Time Pottery",icon:"fas-blender",imageURL:"https://graph.facebook.com/oldtimepottery/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7085222",shop:"houseware"},addTags:{brand:"Old Time Pottery","brand:website":"http://www.oldtimepottery.com","brand:wikidata":"Q7085222","brand:wikipedia":"en:Old Time Pottery",name:"Old Time Pottery",shop:"houseware"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/houseware/Sur La Table":{name:"Sur La Table",icon:"fas-blender",imageURL:"https://graph.facebook.com/SurLaTable/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7645220",shop:"houseware"},addTags:{brand:"Sur La Table","brand:wikidata":"Q7645220","brand:wikipedia":"en:Sur La Table",name:"Sur La Table",shop:"houseware"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/houseware/The Container Store":{name:"The Container Store",icon:"fas-blender",imageURL:"https://graph.facebook.com/containerstore/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7727445",shop:"houseware"},addTags:{brand:"The Container Store","brand:wikidata":"Q7727445","brand:wikipedia":"en:The Container Store",name:"The Container Store",shop:"houseware"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/houseware/Tuesday Morning":{name:"Tuesday Morning",icon:"fas-blender",imageURL:"https://graph.facebook.com/TuesdayMorning/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7851426",shop:"houseware"},addTags:{brand:"Tuesday Morning","brand:wikidata":"Q7851426","brand:wikipedia":"en:Tuesday Morning",name:"Tuesday Morning",shop:"houseware"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/houseware/WMF":{name:"WMF",icon:"fas-blender",imageURL:"https://graph.facebook.com/WMF/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q451423",shop:"houseware"},addTags:{brand:"WMF","brand:wikidata":"Q451423","brand:wikipedia":"en:WMF Group",name:"WMF",shop:"houseware"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/houseware/World Market":{name:"World Market",icon:"fas-blender",imageURL:"https://graph.facebook.com/worldmarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5174750",shop:"interior_decoration"},addTags:{brand:"World Market","brand:wikidata":"Q5174750","brand:wikipedia":"en:Cost Plus World Market",name:"World Market",official_name:"Cost Plus World Market",shop:"interior_decoration"},countryCodes:["us"],terms:["cost plus"],matchScore:2,suggestion:true},"shop/houseware/Xenos":{name:"Xenos",icon:"fas-blender",imageURL:"https://graph.facebook.com/XenosNL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16547960",shop:"houseware"},addTags:{brand:"Xenos","brand:wikidata":"Q16547960","brand:wikipedia":"nl:Xenos",name:"Xenos",shop:"houseware"},countryCodes:["de","nl"],terms:[],matchScore:2,suggestion:true},"shop/interior_decoration/Depot":{name:"Depot",icon:"maki-shop",imageURL:"https://graph.facebook.com/DEPOTonline/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1191740",shop:"interior_decoration"},addTags:{brand:"Depot","brand:wikidata":"Q1191740","brand:wikipedia":"de:Gries Deco Holding",name:"Depot",shop:"interior_decoration"},countryCodes:["at","ch","de"],terms:[],matchScore:2,suggestion:true},"shop/interior_decoration/Hemtex":{name:"Hemtex",icon:"maki-shop",imageURL:"https://graph.facebook.com/hemtex/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10521868",shop:"interior_decoration"},addTags:{brand:"Hemtex","brand:wikidata":"Q10521868","brand:wikipedia":"sv:Hemtex",name:"Hemtex",shop:"interior_decoration"},countryCodes:["ee","fi","se"],terms:[],matchScore:2,suggestion:true},"shop/interior_decoration/Kirkland's":{name:"Kirkland's",icon:"maki-shop",imageURL:"https://graph.facebook.com/Kirklands/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6415714",shop:"interior_decoration"},addTags:{brand:"Kirkland's","brand:wikidata":"Q6415714","brand:wikipedia":"en:Kirkland's",name:"Kirkland's",shop:"interior_decoration"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/interior_decoration/Pier 1 Imports":{name:"Pier 1 Imports",icon:"maki-shop",imageURL:"https://graph.facebook.com/pier1/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7191691",shop:"interior_decoration"},addTags:{brand:"Pier 1 Imports","brand:wikidata":"Q7191691","brand:wikipedia":"en:Pier 1 Imports",name:"Pier 1 Imports",shop:"interior_decoration"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Alex and Ani":{name:"Alex and Ani",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/alexandaniusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16198810",shop:"jewelry"},addTags:{brand:"Alex and Ani","brand:wikidata":"Q16198810","brand:wikipedia":"en:Alex and Ani",name:"Alex and Ani",shop:"jewelry"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Apart":{name:"Apart",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/BizuteriaApart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11686561",shop:"jewelry"},addTags:{brand:"Apart","brand:wikidata":"Q11686561","brand:wikipedia":"pl:Apart",name:"Apart",shop:"jewelry"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Bijou Brigitte":{name:"Bijou Brigitte",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/bijoubrigitte/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q599545",shop:"jewelry"},addTags:{brand:"Bijou Brigitte","brand:wikidata":"Q599545","brand:wikipedia":"de:Bijou Brigitte",name:"Bijou Brigitte",shop:"jewelry"},terms:[],matchScore:2,suggestion:true},"shop/jewelry/Cartier":{name:"Cartier",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/cartier.usa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q538587",shop:"jewelry"},addTags:{brand:"Cartier","brand:wikidata":"Q538587","brand:wikipedia":"en:Cartier (jeweler)",name:"Cartier",shop:"jewelry"},terms:[],matchScore:2,suggestion:true},"shop/jewelry/Christ":{name:"Christ",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/juwelierchrist/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1077957",shop:"jewelry"},addTags:{brand:"Christ","brand:wikidata":"Q1077957","brand:wikipedia":"de:Christ (Juwelier)",name:"Christ",shop:"jewelry"},countryCodes:["ch","de","nl"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Claire's":{name:"Claire's",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/claires/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2974996",shop:"jewelry"},addTags:{brand:"Claire's","brand:wikidata":"Q2974996","brand:wikipedia":"en:Claire's",name:"Claire's",shop:"jewelry"},terms:[],matchScore:2,suggestion:true},"shop/jewelry/Ernest Jones":{name:"Ernest Jones",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/ernestjonesjewellers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5393358",shop:"jewelry"},addTags:{brand:"Ernest Jones","brand:wikidata":"Q5393358","brand:wikipedia":"en:Ernest Jones (retailer)",name:"Ernest Jones",shop:"jewelry"},terms:[],matchScore:2,suggestion:true},"shop/jewelry/Guldfynd":{name:"Guldfynd",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/Guldfynd/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q49099223",shop:"jewelry"},addTags:{brand:"Guldfynd","brand:wikidata":"Q49099223","brand:wikipedia":"sv:Guldfynd",name:"Guldfynd",shop:"jewelry"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/H Samuel":{name:"H Samuel",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/HSamuelTheJeweller/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5628558",shop:"jewelry"},addTags:{brand:"H Samuel","brand:wikidata":"Q5628558","brand:wikipedia":"en:H. Samuel",name:"H Samuel",shop:"jewelry"},terms:[],matchScore:2,suggestion:true},"shop/jewelry/Histoire d'Or":{name:"Histoire d'Or",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/HistoiredOr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62529245",shop:"jewelry"},addTags:{brand:"Histoire d'Or","brand:wikidata":"Q62529245",name:"Histoire d'Or",shop:"jewelry"},countryCodes:["be","fr","it","nl"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/James Avery Jewelry":{name:"James Avery Jewelry",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/JamesAvery/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6129024",shop:"jewelry"},addTags:{brand:"James Avery Jewelry","brand:wikidata":"Q6129024","brand:wikipedia":"en:James Avery Artisan Jewelry",name:"James Avery Jewelry",shop:"jewelry"},terms:[],matchScore:2,suggestion:true},"shop/jewelry/Jared":{name:"Jared",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/JaredTheGalleriaOfJewelry/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62029282",shop:"jewelry"},addTags:{brand:"Jared","brand:wikidata":"Q62029282",name:"Jared",operator:"Sterling Jewelers","operator:wikidata":"Q7611434","operator:wikipedia":"en:Sterling Jewelers",shop:"jewelry"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Julien d'Orcel":{name:"Julien d'Orcel",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/juliendorcel.bijouteries/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62497463",shop:"jewelry"},addTags:{brand:"Julien d'Orcel","brand:wikidata":"Q62497463",name:"Julien d'Orcel",shop:"jewelry"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Kay Jewelers":{name:"Kay Jewelers",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/KayJewelers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62029290",shop:"jewelry"},addTags:{brand:"Kay Jewelers","brand:wikidata":"Q62029290",name:"Kay Jewelers",operator:"Sterling Jewelers","operator:wikidata":"Q7611434","operator:wikipedia":"en:Sterling Jewelers",shop:"jewelry"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/PNJ":{name:"PNJ",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/PNJ.COM.VN/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61129183",shop:"jewelry"},addTags:{brand:"PNJ","brand:wikidata":"Q61129183","brand:wikipedia":"vi:PNJ",name:"PNJ",shop:"jewelry"},terms:[],matchScore:2,suggestion:true},"shop/jewelry/Pandora":{name:"Pandora",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/PANDORA.Japan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2241604",shop:"jewelry"},addTags:{brand:"Pandora","brand:wikidata":"Q2241604","brand:wikipedia":"en:Pandora (jewelry)",name:"Pandora",shop:"jewelry"},terms:[],matchScore:2,suggestion:true},"shop/jewelry/Swarovski":{name:"Swarovski",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/SWAROVSKI.NorthAmerica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q611115",shop:"jewelry"},addTags:{brand:"Swarovski","brand:wikidata":"Q611115","brand:wikipedia":"en:Swarovski",name:"Swarovski",shop:"jewelry"},terms:[],matchScore:2,suggestion:true},"shop/jewelry/Tiffany & Company":{name:"Tiffany & Company",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/Tiffany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1066858",shop:"jewelry"},addTags:{brand:"Tiffany & Company","brand:wikidata":"Q1066858","brand:wikipedia":"en:Tiffany & Co.",name:"Tiffany & Company",official_name:"Tiffany & Co.",shop:"jewelry"},terms:["tiffany","tiffany & co","tiffany and company","tiffany's"],matchScore:2,suggestion:true},"shop/jewelry/Адамас":{name:"Адамас",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/adamas.club/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62393709",shop:"jewelry"},addTags:{brand:"Адамас","brand:wikidata":"Q62393709",name:"Адамас",shop:"jewelry"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/kiosk/Lietuvos spauda":{name:"Lietuvos spauda",icon:"maki-shop",imageURL:"https://graph.facebook.com/narvesen.no/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6514414",shop:"kiosk"},addTags:{brand:"Lietuvos spauda","brand:wikidata":"Q6514414","brand:wikipedia":"lt:Lietuvos spauda",name:"Lietuvos spauda",shop:"kiosk"},countryCodes:["lt"],terms:[],matchScore:2,suggestion:true},"shop/kiosk/Narvesen":{name:"Narvesen",icon:"maki-shop",imageURL:"https://graph.facebook.com/narvesen.no/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6514414",shop:"kiosk"},addTags:{brand:"Narvesen","brand:wikidata":"Q6514414","brand:wikipedia":"en:Narvesen",name:"Narvesen",shop:"kiosk"},terms:[],matchScore:2,suggestion:true},"shop/kiosk/Pressbyrån":{name:"Pressbyrån",icon:"maki-shop",imageURL:"https://graph.facebook.com/Pressbyran/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2489072",shop:"kiosk"},addTags:{brand:"Pressbyrån","brand:wikidata":"Q2489072","brand:wikipedia":"en:Pressbyrån",name:"Pressbyrån",shop:"kiosk"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/kiosk/R-Kioski":{name:"R-Kioski",icon:"maki-shop",imageURL:"https://graph.facebook.com/rkioski/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1571400",shop:"kiosk"},addTags:{brand:"R-Kioski","brand:wikidata":"Q1571400","brand:wikipedia":"en:R-kioski",name:"R-Kioski",shop:"kiosk"},terms:[],matchScore:2,suggestion:true},"shop/kiosk/Ruch":{name:"Ruch",icon:"maki-shop",imageURL:"https://graph.facebook.com/ruch/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1260314",shop:"kiosk"},addTags:{brand:"Ruch","brand:wikidata":"Q1260314","brand:wikipedia":"pl:Ruch (przedsiębiorstwo)",name:"Ruch",shop:"kiosk"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/kiosk/Tisak":{name:"Tisak",icon:"maki-shop",imageURL:"https://graph.facebook.com/tisakmedia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12643627",shop:"kiosk"},addTags:{brand:"Tisak","brand:wikidata":"Q12643627","brand:wikipedia":"hr:Tisak (tvrtka)",name:"Tisak",shop:"kiosk"},terms:[],matchScore:2,suggestion:true},"shop/kiosk/k kiosk":{name:"k kiosk",icon:"maki-shop",imageURL:"https://graph.facebook.com/kkiosk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60381703",shop:"kiosk"},addTags:{brand:"k kiosk","brand:wikidata":"Q60381703","brand:wikipedia":"it:K Kiosk",name:"k kiosk",shop:"kiosk"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"shop/kitchen/Cuisinella":{name:"Cuisinella",icon:"maki-shop",imageURL:"https://graph.facebook.com/CuisinellaFR/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3007012",shop:"kitchen"},addTags:{brand:"Cuisinella","brand:wikidata":"Q3007012","brand:wikipedia":"fr:Cuisinella",name:"Cuisinella",shop:"kitchen"},countryCodes:["fr","tn"],terms:[],matchScore:2,suggestion:true},"shop/kitchen/Mobalpa":{name:"Mobalpa",icon:"maki-shop",geometry:["point","area"],tags:{"brand:wikidata":"Q3317571",shop:"kitchen"},addTags:{brand:"Mobalpa","brand:wikidata":"Q3317571","brand:wikipedia":"fr:Mobalpa",name:"Mobalpa",shop:"kitchen"},countryCodes:["be","fr","gb"],terms:[],matchScore:2,suggestion:true},"shop/kitchen/Schmidt":{name:"Schmidt",icon:"maki-shop",imageURL:"https://graph.facebook.com/Schmidt.HomeDesign/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3487620",shop:"kitchen"},addTags:{brand:"Schmidt","brand:wikidata":"Q3487620","brand:wikipedia":"de:Schmidt Groupe",name:"Schmidt",shop:"kitchen"},countryCodes:["be","es","fr","gb"],terms:[],matchScore:2,suggestion:true},"shop/kitchen/SoCoo'c":{name:"SoCoo'c",icon:"maki-shop",geometry:["point","area"],tags:{"brand:wikidata":"Q62783840",shop:"kitchen"},addTags:{brand:"SoCoo'c","brand:wikidata":"Q62783840","brand:wikipedia":"fr:SoCoo'c",name:"SoCoo'c",shop:"kitchen"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/massage/Massage Envy":{name:"Massage Envy",icon:"temaki-spa",imageURL:"https://graph.facebook.com/MassageEnvy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22922899",shop:"massage"},addTags:{brand:"Massage Envy","brand:wikidata":"Q22922899","brand:wikipedia":"en:Massage Envy",name:"Massage Envy",shop:"massage"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/medical_supply/Pofam-Poznań":{name:"Pofam-Poznań",icon:"maki-shop",geometry:["point","area"],tags:{"brand:wikidata":"Q62057457",shop:"medical_supply"},addTags:{brand:"Pofam-Poznań","brand:wikidata":"Q62057457",name:"Pofam-Poznań",shop:"medical_supply"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/medical_supply/Ортека":{name:"Ортека",icon:"maki-shop",imageURL:"https://graph.facebook.com/orteka.rus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62393660",shop:"medical_supply"},addTags:{brand:"Ортека","brand:wikidata":"Q62393660",name:"Ортека",shop:"medical_supply"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/3 Store":{name:"3 Store",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/ThreeUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q407009",shop:"mobile_phone"},addTags:{brand:"3 Store","brand:wikidata":"Q407009","brand:wikipedia":"en:3 (telecommunications)",name:"3 Store",shop:"mobile_phone"},terms:["3","three","three store"],matchScore:2,suggestion:true},"shop/mobile_phone/AT&T":{name:"AT&T",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/ATT/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q298594",shop:"mobile_phone"},addTags:{brand:"AT&T","brand:wikidata":"Q298594","brand:wikipedia":"en:AT&T Mobility",name:"AT&T",shop:"mobile_phone"},countryCodes:["mx","us"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Bell":{name:"Bell",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/BellCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2894594",shop:"mobile_phone"},addTags:{brand:"Bell","brand:wikidata":"Q2894594","brand:wikipedia":"en:Bell Mobility",name:"Bell",shop:"mobile_phone"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Bitė":{name:"Bitė",icon:"fas-mobile-alt",geometry:["point","area"],tags:{"brand:wikidata":"Q796010",shop:"mobile_phone"},addTags:{brand:"Bitė","brand:wikidata":"Q796010","brand:wikipedia":"lt:Bitės grupė",name:"Bitė",shop:"mobile_phone"},countryCodes:["lt"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Boost Mobile":{name:"Boost Mobile",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/boostmobile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4943790",shop:"mobile_phone"},addTags:{brand:"Boost Mobile","brand:wikidata":"Q4943790","brand:wikipedia":"en:Boost Mobile",name:"Boost Mobile",shop:"mobile_phone"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Carphone Warehouse":{name:"Carphone Warehouse",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/carphonewarehouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q118046",shop:"mobile_phone"},addTags:{brand:"Carphone Warehouse","brand:wikidata":"Q118046","brand:wikipedia":"en:Carphone Warehouse",name:"Carphone Warehouse",shop:"mobile_phone"},countryCodes:["by","gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Claro":{name:"Claro",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/ClaroCol/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1770208",shop:"mobile_phone"},addTags:{brand:"Claro","brand:wikidata":"Q1770208","brand:wikipedia":"en:Claro (company)",name:"Claro",shop:"mobile_phone"},terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Cricket Wireless":{name:"Cricket Wireless",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/cricketwireless/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5184987",shop:"mobile_phone"},addTags:{brand:"Cricket Wireless","brand:wikidata":"Q5184987","brand:wikipedia":"en:Cricket Wireless",name:"Cricket Wireless",shop:"mobile_phone"},countryCodes:["us"],terms:["cricket"],matchScore:2,suggestion:true},"shop/mobile_phone/Digicel":{name:"Digicel",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/digicel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2117506",shop:"mobile_phone"},addTags:{brand:"Digicel","brand:wikidata":"Q2117506","brand:wikipedia":"en:Digicel",name:"Digicel",shop:"mobile_phone"},terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/EE":{name:"EE",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/ee/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5322942",shop:"mobile_phone"},addTags:{brand:"EE","brand:wikidata":"Q5322942","brand:wikipedia":"en:EE Limited",name:"EE",shop:"mobile_phone"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Entel":{name:"Entel",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/entelsa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q450420",shop:"mobile_phone"},addTags:{brand:"Entel","brand:wikidata":"Q450420","brand:wikipedia":"en:Entel (Chile)",name:"Entel",shop:"mobile_phone"},terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Freedom Mobile":{name:"Freedom Mobile",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/frdmmobile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8023931",shop:"mobile_phone"},addTags:{brand:"Freedom Mobile","brand:wikidata":"Q8023931","brand:wikipedia":"en:Freedom Mobile",name:"Freedom Mobile",shop:"mobile_phone"},countryCodes:["ca"],terms:["wind mobile"],matchScore:2,suggestion:true},"shop/mobile_phone/MTN":{name:"MTN",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/MTN/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1813361",shop:"mobile_phone"},addTags:{brand:"MTN","brand:wikidata":"Q1813361","brand:wikipedia":"en:MTN Group",name:"MTN",shop:"mobile_phone"},terms:["agence mtn"],matchScore:2,suggestion:true},"shop/mobile_phone/MetroPCS":{name:"MetroPCS",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/MetroByTMobile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1925685",shop:"mobile_phone"},addTags:{brand:"MetroPCS","brand:wikidata":"Q1925685","brand:wikipedia":"en:Metro by T-Mobile",name:"MetroPCS",shop:"mobile_phone"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Mobilcom Debitel":{name:"Mobilcom Debitel",icon:"fas-mobile-alt",geometry:["point","area"],tags:{"brand:wikidata":"Q344744",shop:"mobile_phone"},addTags:{brand:"Mobilcom Debitel","brand:wikidata":"Q344744","brand:wikipedia":"en:Debitel",name:"Mobilcom Debitel",shop:"mobile_phone"},countryCodes:["de","ir"],terms:["debitel"],matchScore:2,suggestion:true},"shop/mobile_phone/Moov":{name:"Moov",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/moovcotedivoire/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3323637",shop:"mobile_phone"},addTags:{brand:"Moov","brand:wikidata":"Q3323637","brand:wikipedia":"fr:Moov Côte d'Ivoire",name:"Moov",shop:"mobile_phone"},countryCodes:["ci","tg"],terms:["agence moov"],matchScore:2,suggestion:true},"shop/mobile_phone/Movistar":{name:"Movistar",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/movistar.es/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q967735",shop:"mobile_phone"},addTags:{brand:"Movistar","brand:wikidata":"Q967735","brand:wikipedia":"en:Movistar",name:"Movistar",shop:"mobile_phone"},terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/O2":{name:"O2",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/o2uk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7072246",shop:"mobile_phone"},addTags:{brand:"O2","brand:wikidata":"Q7072246","brand:wikipedia":"en:O2 (Ireland)",name:"O2",shop:"mobile_phone"},countryCodes:["cz","de","gb","ie","sk"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Optie1":{name:"Optie1",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/Optie1/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62393564",shop:"mobile_phone"},addTags:{brand:"Optie1","brand:wikidata":"Q62393564",name:"Optie1",shop:"mobile_phone"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Orange":{name:"Orange",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/orange/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1431486",shop:"mobile_phone"},addTags:{brand:"Orange","brand:wikidata":"Q1431486","brand:wikipedia":"fr:Orange (entreprise)",name:"Orange",shop:"mobile_phone"},terms:["agence orange"],matchScore:2,suggestion:true},"shop/mobile_phone/Personal":{name:"Personal",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/personalargentina/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10933021",shop:"mobile_phone"},addTags:{brand:"Personal","brand:wikidata":"Q10933021","brand:wikipedia":"es:Personal (Argentina)",name:"Personal",shop:"mobile_phone"},countryCodes:["ar","py"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Phone House":{name:"Phone House",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/carphonewarehouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q118046",shop:"mobile_phone"},addTags:{brand:"Phone House","brand:wikidata":"Q118046","brand:wikipedia":"en:Carphone Warehouse",name:"Phone House",shop:"mobile_phone"},terms:["the phone house"],matchScore:2,suggestion:true},"shop/mobile_phone/Play":{name:"Play",icon:"fas-mobile-alt",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FPlay%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q7202998",shop:"mobile_phone"},addTags:{brand:"Play","brand:wikidata":"Q7202998","brand:wikipedia":"pl:Play (sieć telefonii komórkowej)",name:"Play",shop:"mobile_phone"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Plus":{name:"Plus",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/plus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7205598",shop:"mobile_phone"},addTags:{brand:"Plus","brand:wikidata":"Q7205598","brand:wikipedia":"pl:Plus (sieć telefonii komórkowej)",name:"Plus",shop:"mobile_phone"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Rogers":{name:"Rogers",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/Rogers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3439663",shop:"mobile_phone"},addTags:{brand:"Rogers","brand:wikidata":"Q3439663","brand:wikipedia":"en:Rogers Wireless",name:"Rogers",shop:"mobile_phone"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/SFR":{name:"SFR",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/SFR/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q218765",shop:"mobile_phone"},addTags:{brand:"SFR","brand:wikidata":"Q218765","brand:wikipedia":"en:SFR",name:"SFR",shop:"mobile_phone"},countryCodes:["fr","lu"],terms:["espace sfr"],matchScore:2,suggestion:true},"shop/mobile_phone/Sprint":{name:"Sprint",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/sprint/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q301965",shop:"mobile_phone"},addTags:{brand:"Sprint","brand:wikidata":"Q301965","brand:wikipedia":"en:Sprint Corporation",name:"Sprint",shop:"mobile_phone"},terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/T-Mobile":{name:"T-Mobile",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/TMobile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q327634",shop:"mobile_phone"},addTags:{brand:"T-Mobile","brand:wikidata":"Q327634","brand:wikipedia":"en:T-Mobile",name:"T-Mobile",shop:"mobile_phone"},terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/TIM":{name:"TIM",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/TimOfficialPage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q144617",shop:"mobile_phone"},addTags:{brand:"TIM","brand:wikidata":"Q144617","brand:wikipedia":"en:Telecom Italia",name:"TIM",shop:"mobile_phone"},countryCodes:["br","it"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Telcel":{name:"Telcel",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/Telcel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3517255",shop:"mobile_phone"},addTags:{brand:"Telcel","brand:wikidata":"Q3517255","brand:wikipedia":"en:Telcel",name:"Telcel",shop:"mobile_phone"},countryCodes:["cu","mx"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Tele2":{name:"Tele2",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/WeAreTele2/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q309865",shop:"mobile_phone"},addTags:{brand:"Tele2","brand:wikidata":"Q309865","brand:wikipedia":"en:Tele2",name:"Tele2",shop:"mobile_phone"},terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Telekom":{name:"Telekom",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/deutschetelekom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9396",shop:"mobile_phone"},addTags:{brand:"Telekom","brand:wikidata":"Q9396","brand:wikipedia":"en:Deutsche Telekom",name:"Telekom",shop:"mobile_phone"},countryCodes:["de","hu","ro","si","sk"],terms:["telekom shop"],matchScore:2,suggestion:true},"shop/mobile_phone/Telenor":{name:"Telenor",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/telenorgroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q845632",shop:"mobile_phone"},addTags:{brand:"Telenor","brand:wikidata":"Q845632","brand:wikipedia":"en:Telenor",name:"Telenor",shop:"mobile_phone"},terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Telstra":{name:"Telstra",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/Telstra/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q721162",shop:"mobile_phone"},addTags:{brand:"Telstra","brand:wikidata":"Q721162","brand:wikipedia":"en:Telstra",name:"Telstra",shop:"mobile_phone"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Telus":{name:"Telus",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/telus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q165858",shop:"mobile_phone"},addTags:{brand:"Telus","brand:wikidata":"Q165858","brand:wikipedia":"en:Telus",name:"Telus",shop:"mobile_phone"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Turkcell":{name:"Turkcell",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/Turkcell/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q283852",shop:"mobile_phone"},addTags:{brand:"Turkcell","brand:wikidata":"Q283852","brand:wikipedia":"en:Turkcell",name:"Turkcell",shop:"mobile_phone"},countryCodes:["cy","tr"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/U.S. Cellular":{name:"U.S. Cellular",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/USCellular/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2466256",shop:"mobile_phone"},addTags:{brand:"U.S. Cellular","brand:wikidata":"Q2466256","brand:wikipedia":"en:U.S. Cellular",name:"U.S. Cellular",shop:"mobile_phone"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Verizon Wireless":{name:"Verizon Wireless",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/verizon/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q919641",shop:"mobile_phone"},addTags:{brand:"Verizon Wireless","brand:wikidata":"Q919641","brand:wikipedia":"en:Verizon Wireless",name:"Verizon Wireless",shop:"mobile_phone"},countryCodes:["us"],terms:["verizon"],matchScore:2,suggestion:true},"shop/mobile_phone/Vodafone":{name:"Vodafone",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/vodafoneUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q122141",shop:"mobile_phone"},addTags:{brand:"Vodafone","brand:wikidata":"Q122141","brand:wikipedia":"en:Vodafone",name:"Vodafone",shop:"mobile_phone"},terms:["vodafone shop"],matchScore:2,suggestion:true},"shop/mobile_phone/WIFI_ETECSA":{name:"WIFI_ETECSA",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/etecsa.cu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q490323",shop:"mobile_phone"},addTags:{brand:"WIFI_ETECSA","brand:wikidata":"Q490323","brand:wikipedia":"es:Empresa de Telecomunicaciones de Cuba",name:"WIFI_ETECSA",shop:"mobile_phone"},countryCodes:["cu"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Wind":{name:"Wind",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/Wind/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q650467",shop:"mobile_phone"},addTags:{brand:"Wind","brand:wikidata":"Q650467","brand:wikipedia":"en:WIND (Italy)",name:"Wind",shop:"mobile_phone"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Yoigo":{name:"Yoigo",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/Yoigo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2630989",shop:"mobile_phone"},addTags:{brand:"Yoigo","brand:wikidata":"Q2630989","brand:wikipedia":"en:Yoigo",name:"Yoigo",shop:"mobile_phone"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/auショップ":{name:"auショップ",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/aubyKDDI/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q307110",shop:"mobile_phone"},addTags:{brand:"au","brand:ja":"au","brand:wikidata":"Q307110","brand:wikipedia":"ja:Au (携帯電話)",name:"auショップ","name:en":"au","name:ja":"auショップ",shop:"mobile_phone"},countryCodes:["jp"],terms:["au"],matchScore:2,suggestion:true},"shop/mobile_phone/Алло":{name:"Алло",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/allo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18683057",shop:"mobile_phone"},addTags:{brand:"Алло","brand:wikidata":"Q18683057","brand:wikipedia":"uk:Алло (торгова мережа)",name:"Алло",shop:"mobile_phone"},countryCodes:["md","ua"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Билайн":{name:"Билайн",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/Beelinerus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q402880",shop:"mobile_phone"},addTags:{brand:"Билайн","brand:en":"Beeline","brand:wikidata":"Q402880","brand:wikipedia":"en:Beeline (brand)",name:"Билайн","name:en":"Beeline",shop:"mobile_phone"},countryCodes:["kg","kz","ru"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Евросеть":{name:"Евросеть",icon:"fas-mobile-alt",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FEuroset.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q65310",shop:"mobile_phone"},addTags:{brand:"Евросеть","brand:en":"Euroset","brand:wikidata":"Q65310","brand:wikipedia":"en:Euroset",name:"Евросеть","name:en":"Euroset",shop:"mobile_phone"},countryCodes:["by","kz","ru","ua"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Київстар":{name:"Київстар",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/kyivstar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2288463",shop:"mobile_phone"},addTags:{brand:"Київстар","brand:en":"Kyivstar","brand:wikidata":"Q2288463","brand:wikipedia":"en:Kyivstar",name:"Київстар","name:en":"Kyivstar",shop:"mobile_phone"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/МТС":{name:"МТС",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/mts/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1368919",shop:"mobile_phone"},addTags:{brand:"МТС","brand:en":"MTS","brand:wikidata":"Q1368919","brand:wikipedia":"en:MTS (network provider)",name:"МТС","name:en":"MTS",shop:"mobile_phone"},countryCodes:["by","ru","ua"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Мегафон":{name:"Мегафон",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/MegaFon.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1720713",shop:"mobile_phone"},addTags:{brand:"Мегафон","brand:en":"MegaFon","brand:wikidata":"Q1720713","brand:wikipedia":"en:MegaFon",name:"Мегафон","name:en":"MegaFon",shop:"mobile_phone"},countryCodes:["ru","tj"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Связной":{name:"Связной",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/svyaznoy.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65371",shop:"mobile_phone"},addTags:{brand:"Связной","brand:en":"Svyaznoy","brand:wikidata":"Q65371","brand:wikipedia":"en:Svyaznoy",name:"Связной","name:en":"Svyaznoy",shop:"mobile_phone"},countryCodes:["by","ru","uz"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Теле2":{name:"Теле2",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/WeAreTele2/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q309865",shop:"mobile_phone"},addTags:{brand:"Теле2","brand:en":"Tele2","brand:wikidata":"Q309865","brand:wikipedia":"en:Tele2",name:"Теле2","name:en":"Tele2",shop:"mobile_phone"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/ソフトバンク":{name:"ソフトバンク",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/SoftBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7553832",shop:"mobile_phone"},addTags:{brand:"ソフトバンク","brand:en":"SoftBank Telecom","brand:ja":"ソフトバンク","brand:wikidata":"Q7553832","brand:wikipedia":"en:SoftBank Telecom",name:"ソフトバンク","name:en":"SoftBank Telecom","name:ja":"ソフトバンク",shop:"mobile_phone"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/ソフトバンクショップ":{name:"ソフトバンクショップ",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/SoftBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11315281",shop:"mobile_phone"},addTags:{brand:"ソフトバンクショップ","brand:en":"SoftBankShop","brand:ja":"ソフトバンクショップ","brand:wikidata":"Q11315281","brand:wikipedia":"ja:ソフトバンクショップ",name:"ソフトバンクショップ","name:en":"SoftBankShop","name:ja":"ソフトバンクショップ",shop:"mobile_phone"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/ドコモショップ":{name:"ドコモショップ",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/docomo.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q853958",shop:"mobile_phone"},addTags:{brand:"ドコモショップ","brand:en":"DoCoMo Shop","brand:ja":"ドコモショップ","brand:wikidata":"Q853958","brand:wikipedia":"ja:NTTドコモ",name:"ドコモショップ","name:en":"DoCoMo Shop","name:ja":"ドコモショップ",shop:"mobile_phone"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/money_lender/Cash Store":{name:"Cash Store",icon:"maki-bank",imageURL:"https://graph.facebook.com/cashstore/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61943411",shop:"money_lender"},addTags:{brand:"Cash Store","brand:wikidata":"Q61943411",name:"Cash Store",shop:"money_lender"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/money_lender/Check Into Cash":{name:"Check Into Cash",icon:"maki-bank",imageURL:"https://graph.facebook.com/checkintocash/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16961246",shop:"money_lender"},addTags:{brand:"Check Into Cash","brand:wikidata":"Q16961246","brand:wikipedia":"en:Check Into Cash",name:"Check Into Cash",shop:"money_lender"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/money_lender/Money Mart":{name:"Money Mart",icon:"maki-bank",imageURL:"https://graph.facebook.com/moneymartusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6899166",shop:"money_lender"},addTags:{brand:"Money Mart","brand:wikidata":"Q6899166","brand:wikipedia":"en:Money Mart",name:"Money Mart",shop:"money_lender"},terms:[],matchScore:2,suggestion:true},"shop/motorcycle/Harley-Davidson":{name:"Harley-Davidson",icon:"fas-motorcycle",imageURL:"https://graph.facebook.com/harley-davidson/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q192814",shop:"motorcycle"},addTags:{brand:"Harley-Davidson","brand:wikidata":"Q192814","brand:wikipedia":"en:Harley-Davidson",name:"Harley-Davidson",shop:"motorcycle"},terms:[],matchScore:2,suggestion:true},"shop/motorcycle/Honda":{name:"Honda",icon:"fas-motorcycle",imageURL:"https://graph.facebook.com/HondaJP/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9584",shop:"motorcycle"},addTags:{brand:"Honda","brand:wikidata":"Q9584","brand:wikipedia":"en:Honda",name:"Honda",shop:"motorcycle"},terms:[],matchScore:2,suggestion:true},"shop/motorcycle/Kawasaki":{name:"Kawasaki",icon:"fas-motorcycle",imageURL:"https://graph.facebook.com/kawasaki/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6379855",shop:"motorcycle"},addTags:{brand:"Kawasaki","brand:wikidata":"Q6379855","brand:wikipedia":"en:Kawasaki motorcycles",name:"Kawasaki",shop:"motorcycle"},terms:[],matchScore:2,suggestion:true},"shop/motorcycle/Motortrade":{name:"Motortrade",icon:"fas-motorcycle",imageURL:"https://graph.facebook.com/MotortradePh/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48803162",shop:"motorcycle"},addTags:{brand:"Motortrade","brand:wikidata":"Q48803162","brand:wikipedia":"en:Motortrade",name:"Motortrade",shop:"motorcycle"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"shop/motorcycle/Suzuki":{name:"Suzuki",icon:"fas-motorcycle",imageURL:"https://graph.facebook.com/SuzukiGlobalOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q181642",shop:"motorcycle"},addTags:{brand:"Suzuki","brand:wikidata":"Q181642","brand:wikipedia":"en:Suzuki",name:"Suzuki",shop:"motorcycle"},terms:[],matchScore:2,suggestion:true},"shop/motorcycle/Yamaha":{name:"Yamaha",icon:"fas-motorcycle",imageURL:"https://graph.facebook.com/yamahamotorusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q158888",shop:"motorcycle"},addTags:{brand:"Yamaha","brand:wikidata":"Q158888","brand:wikipedia":"en:Yamaha Motor Company",name:"Yamaha",shop:"motorcycle"},terms:[],matchScore:2,suggestion:true},"shop/music/HMV":{name:"HMV",icon:"fas-compact-disc",imageURL:"https://graph.facebook.com/hmv/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10854572",shop:"music"},addTags:{brand:"HMV","brand:wikidata":"Q10854572","brand:wikipedia":"en:HMV",name:"HMV",shop:"music"},terms:[],matchScore:2,suggestion:true},"shop/music/TSUTAYA":{name:"TSUTAYA",icon:"fas-compact-disc",imageURL:"https://pbs.twimg.com/profile_images/1016247734720851968/R9agm3pA_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5193457",shop:"music"},addTags:{brand:"TSUTAYA","brand:wikidata":"Q5193457","brand:wikipedia":"ja:カルチュア・コンビニエンス・クラブ",name:"TSUTAYA",shop:"music"},terms:[],matchScore:2,suggestion:true},"shop/musical_instrument/Guitar Center":{name:"Guitar Center",icon:"fas-guitar",imageURL:"https://graph.facebook.com/GuitarCenter/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3622794",shop:"musical_instrument"},addTags:{brand:"Guitar Center","brand:wikidata":"Q3622794","brand:wikipedia":"en:Guitar Center",name:"Guitar Center",shop:"musical_instrument"},terms:[],matchScore:2,suggestion:true},"shop/newsagent/Cigo":{name:"Cigo",icon:"fas-newspaper",imageURL:"https://graph.facebook.com/cigo.nl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391977",shop:"newsagent"},addTags:{brand:"Cigo","brand:wikidata":"Q62391977",name:"Cigo",shop:"newsagent"},countryCodes:["de","nl"],terms:[],matchScore:2,suggestion:true},"shop/newsagent/Kolporter":{name:"Kolporter",icon:"fas-newspaper",geometry:["point","area"],tags:{"brand:wikidata":"Q6427874",shop:"kiosk"},addTags:{brand:"Kolporter","brand:wikidata":"Q6427874","brand:wikipedia":"pl:Kolporter (przedsiębiorstwo)",name:"Kolporter",shop:"kiosk"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/newsagent/Maison de la Presse":{name:"Maison de la Presse",icon:"fas-newspaper",imageURL:"https://graph.facebook.com/260230084083052/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62085960",shop:"newsagent"},addTags:{brand:"Maison de la Presse","brand:wikidata":"Q62085960",name:"Maison de la Presse",shop:"newsagent"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/newsagent/Martin's":{name:"Martin's",icon:"fas-newspaper",imageURL:"https://graph.facebook.com/YourMcColls/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16997477",shop:"newsagent"},addTags:{brand:"Martin's","brand:wikidata":"Q16997477","brand:wikipedia":"en:McColl's",name:"Martin's",shop:"newsagent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/newsagent/Primera":{name:"Primera",icon:"fas-newspaper",imageURL:"https://graph.facebook.com/Primera.nl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2176149",shop:"newsagent"},addTags:{brand:"Primera","brand:wikidata":"Q2176149","brand:wikipedia":"nl:Primera (winkelketen)",name:"Primera",shop:"newsagent"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/newsagent/Relay":{name:"Relay",icon:"fas-newspaper",geometry:["point","area"],tags:{"brand:wikidata":"Q3424298",shop:"newsagent"},addTags:{brand:"Relay","brand:wikidata":"Q3424298","brand:wikipedia":"en:Relay (shop)",name:"Relay",shop:"newsagent"},terms:[],matchScore:2,suggestion:true},"shop/newsagent/WHSmith":{name:"WHSmith",icon:"fas-newspaper",imageURL:"https://graph.facebook.com/WHSmithuk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1548712",shop:"newsagent"},addTags:{brand:"WHSmith","brand:wikidata":"Q1548712","brand:wikipedia":"en:WHSmith",name:"WHSmith",shop:"newsagent"},terms:[],matchScore:2,suggestion:true},"shop/newsagent/k kiosk":{name:"k kiosk",icon:"fas-newspaper",imageURL:"https://graph.facebook.com/kkiosk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60381703",shop:"newsagent"},addTags:{brand:"k kiosk","brand:wikidata":"Q60381703","brand:wikipedia":"it:K Kiosk",name:"k kiosk",shop:"newsagent"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"shop/newsagent/Белсоюзпечать":{name:"Белсоюзпечать",icon:"fas-newspaper",geometry:["point","area"],tags:{"brand:wikidata":"Q4430611",shop:"newsagent"},addTags:{brand:"Белсоюзпечать","brand:wikidata":"Q4430611","brand:wikipedia":"ru:Союзпечать",name:"Белсоюзпечать",shop:"newsagent"},countryCodes:["by"],terms:[],matchScore:2,suggestion:true},"shop/newsagent/Витебскоблсоюзпечать":{name:"Витебскоблсоюзпечать",icon:"fas-newspaper",geometry:["point","area"],tags:{"brand:wikidata":"Q4430611",shop:"newsagent"},addTags:{brand:"Витебскоблсоюзпечать","brand:wikidata":"Q4430611","brand:wikipedia":"ru:Союзпечать",name:"Витебскоблсоюзпечать",shop:"newsagent"},countryCodes:["by"],terms:[],matchScore:2,suggestion:true},"shop/newsagent/Первая полоса":{name:"Первая полоса",icon:"fas-newspaper",geometry:["point","area"],tags:{"brand:wikidata":"Q62736412",shop:"newsagent"},addTags:{brand:"Первая полоса","brand:wikidata":"Q62736412",name:"Первая полоса",shop:"newsagent"},terms:[],matchScore:2,suggestion:true},"shop/newsagent/Союзпечать":{name:"Союзпечать",icon:"fas-newspaper",geometry:["point","area"],tags:{"brand:wikidata":"Q4430611",shop:"newsagent"},addTags:{brand:"Союзпечать","brand:wikidata":"Q4430611","brand:wikipedia":"ru:Союзпечать",name:"Союзпечать",shop:"newsagent"},countryCodes:["by","kz","ru","ua"],terms:[],matchScore:2,suggestion:true},"shop/newsagent/読売新聞":{name:"読売新聞",icon:"fas-newspaper",imageURL:"https://pbs.twimg.com/profile_images/1091035339232227328/elp0X_L6_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q645218",shop:"newsagent"},addTags:{brand:"読売新聞","brand:en":"Yomiuri Shimbun","brand:wikidata":"Q645218","brand:wikipedia":"en:Yomiuri Shimbun",name:"読売新聞","name:en":"Yomiuri Shimbun",shop:"newsagent"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/nutrition_supplements/GNC":{name:"GNC",icon:"maki-shop",imageURL:"https://graph.facebook.com/GNCLiveWell/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4808595",shop:"nutrition_supplements"},addTags:{brand:"GNC","brand:wikidata":"Q4808595","brand:wikipedia":"en:GNC (store)",name:"GNC",shop:"nutrition_supplements"},terms:[],matchScore:2,suggestion:true},"shop/nutrition_supplements/The Vitamin Shoppe":{name:"The Vitamin Shoppe",icon:"maki-shop",imageURL:"https://graph.facebook.com/THEVITAMINSHOPPE/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7772938",shop:"nutrition_supplements"},addTags:{brand:"The Vitamin Shoppe","brand:wikidata":"Q7772938","brand:wikipedia":"en:The Vitamin Shoppe",name:"The Vitamin Shoppe",shop:"nutrition_supplements"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/optician/Alain Afflelou":{name:"Alain Afflelou",icon:"maki-optician",imageURL:"https://graph.facebook.com/AlainAfflelouOptico/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2829511",shop:"optician"},addTags:{brand:"Alain Afflelou","brand:wikidata":"Q2829511","brand:wikipedia":"fr:Alain Afflelou (entreprise)",name:"Alain Afflelou",shop:"optician"},terms:[],matchScore:2,suggestion:true},"shop/optician/America's Best Contacts & Eyeglasses":{name:"America's Best Contacts & Eyeglasses",icon:"maki-optician",imageURL:"https://graph.facebook.com/AmericasBestContactsandEyeglasses/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4742504",shop:"optician"},addTags:{brand:"America's Best Contacts & Eyeglasses","brand:wikidata":"Q4742504","brand:wikipedia":"en:America's Best Contacts & Eyeglasses",name:"America's Best Contacts & Eyeglasses",shop:"optician"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/optician/Apollo-Optik":{name:"Apollo-Optik",icon:"maki-optician",imageURL:"https://graph.facebook.com/ApolloOptik/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q618940",shop:"optician"},addTags:{brand:"Apollo-Optik","brand:wikidata":"Q618940","brand:wikipedia":"de:Apollo-Optik",name:"Apollo-Optik",shop:"optician"},countryCodes:["de"],terms:["apollo"],matchScore:2,suggestion:true},"shop/optician/Atol":{name:"Atol",icon:"maki-optician",imageURL:"https://graph.facebook.com/opticiensatol/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2869542",shop:"optician"},addTags:{brand:"Atol","brand:wikidata":"Q2869542","brand:wikipedia":"fr:Atol (opticien)",name:"Atol",shop:"optician"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/optician/Boots Opticians":{name:"Boots Opticians",icon:"maki-optician",imageURL:"https://graph.facebook.com/BootsUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4944037",shop:"optician"},addTags:{brand:"Boots Opticians","brand:wikidata":"Q4944037","brand:wikipedia":"en:Boots Opticians",name:"Boots Opticians",shop:"optician"},terms:[],matchScore:2,suggestion:true},"shop/optician/Eye Wish":{name:"Eye Wish",icon:"maki-optician",imageURL:"https://graph.facebook.com/EyeWishOpticiens/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391641",shop:"optician"},addTags:{brand:"Eye Wish","brand:wikidata":"Q62391641",name:"Eye Wish",operator:"GrandVision","operator:wikidata":"Q15812731","operator:wikipedia":"nl:GrandVision",shop:"optician"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/optician/Fielmann":{name:"Fielmann",icon:"maki-optician",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2F160506%20Fielmann%20LogoNEU%20pos%20wiki.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q457822",shop:"optician"},addTags:{brand:"Fielmann","brand:wikidata":"Q457822","brand:wikipedia":"en:Fielmann",name:"Fielmann",shop:"optician"},terms:[],matchScore:2,suggestion:true},"shop/optician/General Óptica":{name:"General Óptica",icon:"maki-optician",imageURL:"https://graph.facebook.com/generaloptica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391672",shop:"optician"},addTags:{brand:"General Óptica","brand:wikidata":"Q62391672",name:"General Óptica",shop:"optician"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/optician/Grand Optical":{name:"Grand Optical",icon:"maki-optician",imageURL:"https://graph.facebook.com/grandoptical/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3113677",shop:"optician"},addTags:{brand:"Grand Optical","brand:wikidata":"Q3113677","brand:wikipedia":"fr:Grand Optical",name:"Grand Optical",shop:"optician"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/optician/Générale d'Optique":{name:"Générale d'Optique",icon:"maki-optician",imageURL:"https://graph.facebook.com/generaledoptique/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391701",shop:"optician"},addTags:{brand:"Générale d'Optique","brand:wikidata":"Q62391701",name:"Générale d'Optique",shop:"optician"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/optician/Hakim Optical":{name:"Hakim Optical",icon:"maki-optician",imageURL:"https://graph.facebook.com/HakimOptical/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28232761",shop:"optician"},addTags:{brand:"Hakim Optical","brand:wikidata":"Q28232761","brand:wikipedia":"en:Hakim Optical",name:"Hakim Optical",shop:"optician"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/optician/Hans Anders":{name:"Hans Anders",icon:"maki-optician",imageURL:"https://graph.facebook.com/hansanders.nl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1884976",shop:"optician"},addTags:{brand:"Hans Anders","brand:wikidata":"Q1884976","brand:wikipedia":"nl:Hans Anders",name:"Hans Anders",shop:"optician"},terms:[],matchScore:2,suggestion:true},"shop/optician/Instrumentarium":{name:"Instrumentarium",icon:"maki-optician",imageURL:"https://graph.facebook.com/instru.fi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11864937",shop:"optician"},addTags:{brand:"Instrumentarium","brand:wikidata":"Q11864937","brand:wikipedia":"fi:Instrumentarium",name:"Instrumentarium",shop:"optician"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/optician/Krys":{name:"Krys",icon:"maki-optician",imageURL:"https://graph.facebook.com/Krys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3119538",shop:"optician"},addTags:{brand:"Krys","brand:wikidata":"Q3119538","brand:wikipedia":"fr:Krys Group",name:"Krys",shop:"optician"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/optician/LensCrafters":{name:"LensCrafters",icon:"maki-optician",imageURL:"https://graph.facebook.com/LensCrafters/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6523209",shop:"optician"},addTags:{brand:"LensCrafters","brand:wikidata":"Q6523209","brand:wikipedia":"en:LensCrafters",name:"LensCrafters",shop:"optician"},terms:[],matchScore:2,suggestion:true},"shop/optician/Les Opticiens Mutualistes":{name:"Les Opticiens Mutualistes",icon:"maki-optician",imageURL:"https://graph.facebook.com/lesopticiensmutualistes.officiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18414551",shop:"optician"},addTags:{brand:"Les Opticiens Mutualistes","brand:wikidata":"Q18414551","brand:wikipedia":"fr:Les Opticiens Mutualistes",name:"Les Opticiens Mutualistes",shop:"optician"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/optician/Lissac":{name:"Lissac",icon:"maki-optician",imageURL:"https://graph.facebook.com/lissac.opticien/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63102559",shop:"optician"},addTags:{brand:"Lissac","brand:wikidata":"Q63102559",name:"Lissac",shop:"optician"},terms:[],matchScore:2,suggestion:true},"shop/optician/Multiópticas (Portugal)":{name:"Multiópticas (Portugal)",icon:"maki-optician",imageURL:"https://graph.facebook.com/MultiOpticasPortugal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391722",shop:"optician"},addTags:{brand:"Multiópticas","brand:wikidata":"Q62391722",name:"Multiópticas",shop:"optician"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"shop/optician/Multiópticas (Spain)":{name:"Multiópticas (Spain)",icon:"maki-optician",imageURL:"https://graph.facebook.com/Multiopticas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391719",shop:"optician"},addTags:{brand:"Multiópticas","brand:wikidata":"Q62391719",name:"Multiópticas",shop:"optician"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/optician/Oakley":{name:"Oakley",icon:"maki-optician",imageURL:"https://graph.facebook.com/Oakley/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q161906",shop:"optician"},addTags:{brand:"Oakley","brand:wikidata":"Q161906","brand:wikipedia":"en:Oakley, Inc.",name:"Oakley",shop:"optician"},terms:[],matchScore:2,suggestion:true},"shop/optician/Optic 2000":{name:"Optic 2000",icon:"maki-optician",imageURL:"https://graph.facebook.com/optic2000/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3354445",shop:"optician"},addTags:{brand:"Optic 2000","brand:wikidata":"Q3354445","brand:wikipedia":"fr:Optic 2000",name:"Optic 2000",shop:"optician"},terms:[],matchScore:2,suggestion:true},"shop/optician/Opticalia":{name:"Opticalia",icon:"maki-optician",imageURL:"https://graph.facebook.com/OPTICALIAGRUPO/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62082114",shop:"optician"},addTags:{brand:"Opticalia","brand:wikidata":"Q62082114",name:"Opticalia",shop:"optician"},terms:[],matchScore:2,suggestion:true},"shop/optician/Pearle":{name:"Pearle",icon:"maki-optician",imageURL:"https://graph.facebook.com/pearlevision/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2231148",shop:"optician"},addTags:{brand:"Pearle","brand:wikidata":"Q2231148","brand:wikipedia":"en:Pearle Vision",name:"Pearle",shop:"optician"},terms:["pearle vision"],matchScore:2,suggestion:true},"shop/optician/Specsavers":{name:"Specsavers",icon:"maki-optician",imageURL:"https://graph.facebook.com/Specsavers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2000610",shop:"optician"},addTags:{brand:"Specsavers","brand:wikidata":"Q2000610","brand:wikipedia":"en:Specsavers",name:"Specsavers",shop:"optician"},terms:[],matchScore:2,suggestion:true},"shop/optician/Sunglass Hut":{name:"Sunglass Hut",icon:"maki-optician",imageURL:"https://graph.facebook.com/SunglassHut/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q136311",shop:"optician"},addTags:{brand:"Sunglass Hut","brand:wikidata":"Q136311","brand:wikipedia":"en:Sunglass Hut",name:"Sunglass Hut",shop:"optician"},terms:[],matchScore:2,suggestion:true},"shop/optician/Synoptik":{name:"Synoptik",icon:"maki-optician",imageURL:"https://graph.facebook.com/synoptiksverige/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10687541",shop:"optician"},addTags:{brand:"Synoptik","brand:wikidata":"Q10687541","brand:wikipedia":"sv:Synoptik",name:"Synoptik",shop:"optician"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/optician/Synsam":{name:"Synsam",icon:"maki-optician",imageURL:"https://graph.facebook.com/synsam.se/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12004589",shop:"optician"},addTags:{brand:"Synsam","brand:wikidata":"Q12004589","brand:wikipedia":"sv:Synsam",name:"Synsam",shop:"optician"},countryCodes:["fi","no","se"],terms:[],matchScore:2,suggestion:true},"shop/optician/Target Optical":{name:"Target Optical",icon:"maki-optician",geometry:["point","area"],tags:{"brand:wikidata":"Q19903688",shop:"optician"},addTags:{brand:"Target Optical","brand:wikidata":"Q19903688","brand:wikipedia":"en:Target Optical",name:"Target Optical",shop:"optician"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/optician/Vision Express":{name:"Vision Express",icon:"maki-optician",imageURL:"https://graph.facebook.com/visionexpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7936150",shop:"optician"},addTags:{brand:"Vision Express","brand:wikidata":"Q7936150","brand:wikipedia":"en:Vision Express",name:"Vision Express",shop:"optician"},terms:[],matchScore:2,suggestion:true},"shop/optician/Visionworks":{name:"Visionworks",icon:"maki-optician",imageURL:"https://graph.facebook.com/Visionworks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5422607",shop:"optician"},addTags:{brand:"Visionworks","brand:wikidata":"Q5422607","brand:wikipedia":"en:Visionworks",name:"Visionworks",shop:"optician"},terms:[],matchScore:2,suggestion:true},"shop/optician/แว่นท็อปเจริญ":{name:"แว่นท็อปเจริญ",icon:"maki-optician",imageURL:"https://graph.facebook.com/TopCharoenOpticalOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391732",shop:"optician"},addTags:{brand:"แว่นท็อปเจริญ","brand:th":"แว่นท็อปเจริญ","brand:wikidata":"Q62391732",name:"แว่นท็อปเจริญ","name:th":"แว่นท็อปเจริญ",shop:"optician"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"shop/optician/メガネスーパー":{name:"メガネスーパー",icon:"maki-optician",imageURL:"https://graph.facebook.com/meganesuper/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11343504",shop:"optician"},addTags:{brand:"メガネスーパー","brand:ja":"メガネスーパー","brand:wikidata":"Q11343504","brand:wikipedia":"ja:メガネスーパー",name:"メガネスーパー","name:en":"Meganesuper","name:ja":"メガネスーパー",shop:"optician"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/optician/寶島眼鏡":{name:"寶島眼鏡",icon:"maki-optician",imageURL:"https://graph.facebook.com/formosafans/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391741",shop:"optician"},addTags:{brand:"寶島眼鏡","brand:wikidata":"Q62391741",name:"寶島眼鏡",shop:"optician"},countryCodes:["zh"],terms:[],matchScore:2,suggestion:true},"shop/optician/眼鏡市場":{name:"眼鏡市場",icon:"maki-optician",imageURL:"https://graph.facebook.com/meganeichiba.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11343506",shop:"optician"},addTags:{brand:"眼鏡市場","brand:en":"Megane Ichiba","brand:wikidata":"Q11343506","brand:wikipedia":"ja:メガネトップ",name:"眼鏡市場","name:en":"Megane Ichiba",shop:"optician"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/outdoor/Bass Pro Shops":{name:"Bass Pro Shops",icon:"temaki-compass",imageURL:"https://graph.facebook.com/bassproshops/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4867953",shop:"outdoor"},addTags:{brand:"Bass Pro Shops","brand:wikidata":"Q4867953","brand:wikipedia":"en:Bass Pro Shops",name:"Bass Pro Shops",shop:"outdoor"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/outdoor/Cabela's":{name:"Cabela's",icon:"temaki-compass",imageURL:"https://graph.facebook.com/Cabelas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2793714",shop:"outdoor"},addTags:{brand:"Cabela's","brand:wikidata":"Q2793714","brand:wikipedia":"en:Cabela's",name:"Cabela's",shop:"outdoor"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/outdoor/Jack Wolfskin":{name:"Jack Wolfskin",icon:"temaki-compass",imageURL:"https://graph.facebook.com/JACKWOLFSKINofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q536133",shop:"outdoor"},addTags:{brand:"Jack Wolfskin","brand:wikidata":"Q536133","brand:wikipedia":"en:Jack Wolfskin",name:"Jack Wolfskin",shop:"outdoor"},countryCodes:["ch","de","fr"],terms:[],matchScore:2,suggestion:true},"shop/outdoor/Kathmandu":{name:"Kathmandu",icon:"temaki-compass",imageURL:"https://graph.facebook.com/kathmandu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1736294",shop:"outdoor"},addTags:{brand:"Kathmandu","brand:wikidata":"Q1736294","brand:wikipedia":"en:Kathmandu (company)",name:"Kathmandu",shop:"outdoor"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"shop/outdoor/Mountain Warehouse":{name:"Mountain Warehouse",icon:"temaki-compass",imageURL:"https://graph.facebook.com/MountainWarehouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6925414",shop:"outdoor"},addTags:{brand:"Mountain Warehouse","brand:wikidata":"Q6925414","brand:wikipedia":"en:Mountain Warehouse",name:"Mountain Warehouse",shop:"outdoor"},terms:[],matchScore:2,suggestion:true},"shop/outdoor/REI":{name:"REI",icon:"temaki-compass",imageURL:"https://graph.facebook.com/9062006483/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3414933",shop:"outdoor"},addTags:{brand:"REI","brand:wikidata":"Q3414933","brand:wikipedia":"en:Recreational Equipment, Inc.",name:"REI",shop:"outdoor"},countryCodes:["id","us"],terms:[],matchScore:2,suggestion:true},"shop/outdoor/Sportsman's Warehouse":{name:"Sportsman's Warehouse",icon:"temaki-compass",imageURL:"https://graph.facebook.com/sportsmanswh/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7579979",shop:"outdoor"},addTags:{brand:"Sportsman's Warehouse","brand:wikidata":"Q7579979","brand:wikipedia":"en:Sportsman's Warehouse",name:"Sportsman's Warehouse",shop:"outdoor"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/outdoor/Trespass":{name:"Trespass",icon:"temaki-compass",imageURL:"https://graph.facebook.com/trespass/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17035733",shop:"outdoor"},addTags:{brand:"Trespass","brand:wikidata":"Q17035733","brand:wikipedia":"en:Trespass (clothing)",name:"Trespass",shop:"outdoor"},countryCodes:["fr","gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/outpost/Wildberries":{name:"Wildberries",icon:"maki-shop",imageURL:"https://graph.facebook.com/wildberries.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24933714",shop:"outpost"},addTags:{brand:"Wildberries","brand:wikidata":"Q24933714","brand:wikipedia":"ru:Wildberries",name:"Wildberries",shop:"outpost"},countryCodes:["by","ru"],terms:[],matchScore:2,suggestion:true},"shop/paint/Benjamin Moore":{name:"Benjamin Moore",icon:"fas-paint-roller",geometry:["point","area"],tags:{"brand:wikidata":"Q4889038",shop:"paint"},addTags:{brand:"Benjamin Moore","brand:wikidata":"Q4889038","brand:wikipedia":"en:Benjamin Moore & Co.",name:"Benjamin Moore",shop:"paint"},terms:[],matchScore:2,suggestion:true},"shop/paint/Comex":{name:"Comex",icon:"fas-paint-roller",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FComex.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5151654",shop:"paint"},addTags:{brand:"Comex","brand:wikidata":"Q5151654","brand:wikipedia":"en:Comex Group",name:"Comex",shop:"paint"},terms:[],matchScore:2,suggestion:true},"shop/paint/Jotun":{name:"Jotun",icon:"fas-paint-roller",geometry:["point","area"],tags:{"brand:wikidata":"Q1778870",shop:"paint"},addTags:{brand:"Jotun","brand:wikidata":"Q1778870","brand:wikipedia":"en:Jotun (company)",name:"Jotun",shop:"paint"},terms:[],matchScore:2,suggestion:true},"shop/paint/National Paints":{name:"National Paints",icon:"fas-paint-roller",imageURL:"https://graph.facebook.com/NationalPaints/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62073521",shop:"paint"},addTags:{brand:"National Paints","brand:wikidata":"Q62073521",name:"National Paints",shop:"paint"},terms:[],matchScore:2,suggestion:true},"shop/paint/Sherwin Williams":{name:"Sherwin Williams",icon:"fas-paint-roller",geometry:["point","area"],tags:{"brand:wikidata":"Q48881",shop:"paint"},addTags:{brand:"Sherwin Williams","brand:wikidata":"Q48881","brand:wikipedia":"en:Sherwin-Williams",name:"Sherwin Williams",shop:"paint"},terms:["sherwin williams paints"],matchScore:2,suggestion:true},"shop/party/Party City":{name:"Party City",icon:"fas-mask",imageURL:"https://graph.facebook.com/PartyCity/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7140896",shop:"party"},addTags:{brand:"Party City","brand:wikidata":"Q7140896","brand:wikipedia":"en:Party City",name:"Party City",shop:"party"},terms:[],matchScore:2,suggestion:true},"shop/pastry/Smallcakes":{name:"Smallcakes",icon:"maki-bakery",imageURL:"https://graph.facebook.com/SmallcakesKC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62384749",shop:"pastry"},addTags:{brand:"Smallcakes","brand:wikidata":"Q62384749",name:"Smallcakes",shop:"pastry"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/pawnbroker/Cash Converters":{name:"Cash Converters",icon:"maki-shop",imageURL:"https://graph.facebook.com/CashConvertersUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5048645",shop:"pawnbroker"},addTags:{brand:"Cash Converters","brand:wikidata":"Q5048645","brand:wikipedia":"en:Cash Converters",name:"Cash Converters",shop:"pawnbroker"},terms:[],matchScore:2,suggestion:true},"shop/pawnbroker/Cebuana Lhuillier":{name:"Cebuana Lhuillier",icon:"maki-shop",imageURL:"https://graph.facebook.com/cebuanalhuillierpawnshop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17064661",shop:"pawnbroker"},addTags:{brand:"Cebuana Lhuillier","brand:wikidata":"Q17064661","brand:wikipedia":"en:Cebuana Lhuillier",name:"Cebuana Lhuillier",shop:"pawnbroker"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"shop/pawnbroker/Palawan Pawnshop":{name:"Palawan Pawnshop",icon:"maki-shop",imageURL:"https://graph.facebook.com/palawan.pawnshop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391488",shop:"pawnbroker"},addTags:{brand:"Palawan Pawnshop","brand:wikidata":"Q62391488",name:"Palawan Pawnshop",shop:"pawnbroker"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"shop/pawnbroker/Villarica Pawnshop":{name:"Villarica Pawnshop",icon:"maki-shop",imageURL:"https://graph.facebook.com/155765647803482/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391438",shop:"pawnbroker"},addTags:{brand:"Villarica Pawnshop","brand:wikidata":"Q62391438",name:"Villarica Pawnshop",shop:"pawnbroker"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"shop/perfumery/Douglas":{name:"Douglas",icon:"maki-shop",imageURL:"https://graph.facebook.com/DouglasDeutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2052213",shop:"perfumery"},addTags:{brand:"Douglas","brand:wikidata":"Q2052213","brand:wikipedia":"de:Parfümerie Douglas",name:"Douglas",shop:"perfumery"},terms:[],matchScore:2,suggestion:true},"shop/perfumery/FAnn":{name:"FAnn",icon:"maki-shop",imageURL:"https://graph.facebook.com/FAnn.cz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391353",shop:"perfumery"},addTags:{brand:"FAnn","brand:wikidata":"Q62391353",name:"FAnn",shop:"perfumery"},countryCodes:["cz","sk"],terms:[],matchScore:2,suggestion:true},"shop/perfumery/ICI PARIS XL":{name:"ICI PARIS XL",icon:"maki-shop",imageURL:"https://graph.facebook.com/iciparisxlbe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q769749",shop:"perfumery"},addTags:{brand:"ICI PARIS XL","brand:wikidata":"Q769749","brand:wikipedia":"en:ICI Paris XL",name:"ICI PARIS XL",shop:"perfumery"},countryCodes:["be","lu","nl"],terms:[],matchScore:2,suggestion:true},"shop/perfumery/Marionnaud":{name:"Marionnaud",icon:"maki-shop",imageURL:"https://graph.facebook.com/Marionnaud.France/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1129073",shop:"perfumery"},addTags:{brand:"Marionnaud","brand:wikidata":"Q1129073","brand:wikipedia":"fr:Marionnaud",name:"Marionnaud",shop:"perfumery"},countryCodes:["at","ch","es","fr","it","sk"],terms:[],matchScore:2,suggestion:true},"shop/perfumery/O Boticário":{name:"O Boticário",icon:"maki-shop",imageURL:"https://graph.facebook.com/oboticario/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7073219",shop:"perfumery"},addTags:{brand:"O Boticário","brand:wikidata":"Q7073219","brand:wikipedia":"en:O Boticário",name:"O Boticário",shop:"perfumery"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"shop/pet/Das Futterhaus":{name:"Das Futterhaus",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/futterhaus.deutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1167914",shop:"pet"},addTags:{brand:"Das Futterhaus","brand:wikidata":"Q1167914","brand:wikipedia":"de:Das Futterhaus",name:"Das Futterhaus",shop:"pet"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/pet/Fressnapf":{name:"Fressnapf",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/Fressnapf/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q875796",shop:"pet"},addTags:{brand:"Fressnapf","brand:wikidata":"Q875796","brand:wikipedia":"en:Fressnapf",name:"Fressnapf",shop:"pet"},terms:[],matchScore:2,suggestion:true},"shop/pet/Global Pet Foods":{name:"Global Pet Foods",icon:"maki-dog-park",geometry:["point","area"],tags:{"brand:wikidata":"Q57985699",shop:"pet"},addTags:{brand:"Global Pet Foods","brand:wikidata":"Q57985699",name:"Global Pet Foods",shop:"pet"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/pet/Maxi Zoo":{name:"Maxi Zoo",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/Fressnapf/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q875796",shop:"pet"},addTags:{brand:"Maxi Zoo","brand:wikidata":"Q875796","brand:wikipedia":"en:Fressnapf",name:"Maxi Zoo",shop:"pet"},terms:[],matchScore:2,suggestion:true},"shop/pet/Mud Bay":{name:"Mud Bay",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/mudbay/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q30324179",shop:"pet"},addTags:{brand:"Mud Bay","brand:wikidata":"Q30324179","brand:wikipedia":"en:Mud Bay pet store",name:"Mud Bay",shop:"pet"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/pet/Pet Food Express":{name:"Pet Food Express",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/petfoodexpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7171541",shop:"pet"},addTags:{brand:"Pet Food Express","brand:wikidata":"Q7171541","brand:wikipedia":"en:Pet Food Express",name:"Pet Food Express",shop:"pet"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/pet/Pet Supermarket":{name:"Pet Supermarket",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/PetSupermarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61968363",shop:"pet"},addTags:{brand:"Pet Supermarket","brand:wikidata":"Q61968363",name:"Pet Supermarket",shop:"pet"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/pet/Pet Supplies Plus":{name:"Pet Supplies Plus",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/petsuppliesplus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7171563",shop:"pet"},addTags:{brand:"Pet Supplies Plus","brand:wikidata":"Q7171563","brand:wikipedia":"en:Pet Supplies Plus",name:"Pet Supplies Plus",shop:"pet"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/pet/Pet Valu":{name:"Pet Valu",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/PetValuUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q58009635",shop:"pet"},addTags:{brand:"Pet Valu","brand:wikidata":"Q58009635",name:"Pet Valu",shop:"pet"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/pet/PetSmart":{name:"PetSmart",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/PetSmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3307147",shop:"pet"},addTags:{brand:"PetSmart","brand:wikidata":"Q3307147","brand:wikipedia":"en:PetSmart",name:"PetSmart",shop:"pet"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/pet/Petco":{name:"Petco",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/Petco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7171798",shop:"pet"},addTags:{brand:"Petco","brand:wikidata":"Q7171798","brand:wikipedia":"en:Petco",name:"Petco",shop:"pet"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/pet/Petland":{name:"Petland",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/PetlandUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17111474",shop:"pet"},addTags:{brand:"Petland","brand:wikidata":"Q17111474","brand:wikipedia":"en:Petland",name:"Petland",shop:"pet"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/pet/Petland Discounts":{name:"Petland Discounts",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/petlanddiscount/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7178463",shop:"pet"},addTags:{brand:"Petland Discounts","brand:wikidata":"Q7178463","brand:wikipedia":"en:Petland Discounts",name:"Petland Discounts",shop:"pet"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/pet/Pets at Home":{name:"Pets at Home",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/petsathomeUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7179258",shop:"pet"},addTags:{brand:"Pets at Home","brand:wikidata":"Q7179258","brand:wikipedia":"en:Pets at Home",name:"Pets at Home",shop:"pet"},terms:[],matchScore:2,suggestion:true},"shop/pet/Unleashed":{name:"Unleashed",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/Petco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62122874",shop:"pet"},addTags:{alt_name:"Unleashed by Petco",brand:"Unleashed","brand:wikidata":"Q62122874",name:"Unleashed",operator:"Petco","operator:wikidata":"Q7171798","operator:wikipedia":"en:Petco",shop:"pet"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/pet/Бетховен":{name:"Бетховен",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/zoobethowenclub/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62390798",shop:"pet"},addTags:{brand:"Бетховен","brand:wikidata":"Q62390798",name:"Бетховен",shop:"pet"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/pet/Четыре лапы":{name:"Четыре лапы",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/4laps/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62390783",shop:"pet"},addTags:{brand:"Четыре лапы","brand:wikidata":"Q62390783",name:"Четыре лапы",shop:"pet"},countryCodes:["kz","ru"],terms:[],matchScore:2,suggestion:true},"shop/photo/Kodak Express":{name:"Kodak Express",icon:"fas-camera-retro",imageURL:"https://graph.facebook.com/kodakexpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6425126",shop:"photo"},addTags:{brand:"Kodak Express","brand:wikidata":"Q6425126","brand:wikipedia":"en:Kodak Express",name:"Kodak Express",shop:"photo"},terms:["kodak"],matchScore:2,suggestion:true},"shop/second_hand/Value Village":{name:"Value Village",icon:"maki-shop",imageURL:"https://graph.facebook.com/savers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7428188",shop:"second_hand"},addTags:{brand:"Value Village","brand:wikidata":"Q7428188","brand:wikipedia":"en:Savers",name:"Value Village",shop:"second_hand"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/ABCマート":{name:"ABCマート",icon:"maki-shoe",imageURL:"https://graph.facebook.com/172547912801644/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11188787",shop:"shoes"},addTags:{brand:"ABCマート","brand:ja":"ABCマート","brand:wikidata":"Q11188787","brand:wikipedia":"en:ABC-Mart",name:"ABCマート","name:ja":"ABCマート",shop:"shoes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Aldo":{name:"Aldo",icon:"maki-shoe",imageURL:"https://graph.facebook.com/ALDO/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2832297",shop:"shoes"},addTags:{brand:"Aldo","brand:wikidata":"Q2832297","brand:wikipedia":"en:Aldo Group",name:"Aldo",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/André":{name:"André",icon:"maki-shoe",geometry:["point","area"],tags:{"brand:wikidata":"Q2847114",shop:"shoes"},addTags:{brand:"André","brand:wikidata":"Q2847114","brand:wikipedia":"fr:André (chaussure)",name:"André",shop:"shoes"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Bata":{name:"Bata",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Bata/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q688082",shop:"shoes"},addTags:{brand:"Bata","brand:wikidata":"Q688082","brand:wikipedia":"en:Bata (company)",name:"Bata",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Besson Chaussures":{name:"Besson Chaussures",icon:"maki-shoe",imageURL:"https://graph.facebook.com/besson.chaussures/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2899930",shop:"shoes"},addTags:{brand:"Besson Chaussures","brand:wikidata":"Q2899930","brand:wikipedia":"fr:Besson Chaussures",name:"Besson Chaussures",operator:"Vivarte","operator:wikidata":"Q3561446","operator:wikipedia":"fr:Vivarte",shop:"shoes"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Birkenstock":{name:"Birkenstock",icon:"maki-shoe",imageURL:"https://graph.facebook.com/birkenstock/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q648458",shop:"shoes"},addTags:{brand:"Birkenstock","brand:wikidata":"Q648458","brand:wikipedia":"en:Birkenstock",name:"Birkenstock",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Brantano":{name:"Brantano",icon:"maki-shoe",imageURL:"https://graph.facebook.com/brantano.belgie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4957616",shop:"shoes"},addTags:{brand:"Brantano","brand:wikidata":"Q4957616","brand:wikipedia":"en:Brantano Footwear",name:"Brantano",shop:"shoes"},countryCodes:["be","gb","lu"],terms:[],matchScore:2,suggestion:true},"shop/shoes/CCC":{name:"CCC",icon:"maki-shoe",imageURL:"https://graph.facebook.com/CCC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11788344",shop:"shoes"},addTags:{brand:"CCC","brand:wikidata":"Q11788344","brand:wikipedia":"de:CCC (Unternehmen)",name:"CCC",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Camper":{name:"Camper",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Camper/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1030922",shop:"shoes"},addTags:{brand:"Camper","brand:wikidata":"Q1030922","brand:wikipedia":"en:Camper (company)",name:"Camper",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Chaussea":{name:"Chaussea",icon:"maki-shoe",imageURL:"https://graph.facebook.com/chaussea.fr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62082044",shop:"shoes"},addTags:{brand:"Chaussea","brand:wikidata":"Q62082044",name:"Chaussea",shop:"shoes"},countryCodes:["be","es","fr","lu"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Clarks":{name:"Clarks",icon:"maki-shoe",imageURL:"https://graph.facebook.com/ClarksShoesUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1095857",shop:"shoes"},addTags:{brand:"Clarks","brand:wikidata":"Q1095857","brand:wikipedia":"en:C. & J. Clark",name:"Clarks",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Converse":{name:"Converse",icon:"maki-shoe",imageURL:"https://graph.facebook.com/converse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q319515",shop:"shoes"},addTags:{brand:"Converse","brand:wikidata":"Q319515","brand:wikipedia":"en:Converse (shoe company)",name:"Converse",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Crocs":{name:"Crocs",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Crocs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q926699",shop:"shoes"},addTags:{brand:"Crocs","brand:wikidata":"Q926699","brand:wikipedia":"en:Crocs",name:"Crocs",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/DSW":{name:"DSW",icon:"maki-shoe",imageURL:"https://graph.facebook.com/designerbrands/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5206207",shop:"shoes"},addTags:{brand:"DSW","brand:wikidata":"Q5206207","brand:wikipedia":"en:Designer Brands",name:"DSW",shop:"shoes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Deichmann":{name:"Deichmann",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Deichmann/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q664543",shop:"shoes"},addTags:{brand:"Deichmann","brand:wikidata":"Q664543","brand:wikipedia":"en:Deichmann SE",name:"Deichmann",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Din sko":{name:"Din sko",icon:"maki-shoe",imageURL:"https://graph.facebook.com/dinsko/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10472869",shop:"shoes"},addTags:{brand:"Din sko","brand:wikidata":"Q10472869","brand:wikipedia":"sv:Din sko",name:"Din sko",shop:"shoes"},countryCodes:["no","se"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Dosenbach":{name:"Dosenbach",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Dosenbach.CH/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2677329",shop:"shoes"},addTags:{brand:"Dosenbach","brand:wikidata":"Q2677329","brand:wikipedia":"de:Dosenbach-Ochsner",name:"Dosenbach",shop:"shoes"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Ecco":{name:"Ecco",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Ecco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1280255",shop:"shoes"},addTags:{brand:"Ecco","brand:wikidata":"Q1280255","brand:wikipedia":"en:ECCO",name:"Ecco",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/FLO":{name:"FLO",icon:"maki-shoe",imageURL:"https://graph.facebook.com/FLOShoesGlobal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61994802",shop:"shoes"},addTags:{brand:"FLO","brand:wikidata":"Q61994802",name:"FLO",shop:"shoes"},countryCodes:["al","tr"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Famous Footwear":{name:"Famous Footwear",icon:"maki-shoe",imageURL:"https://graph.facebook.com/famousfootwear/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5433457",shop:"shoes"},addTags:{brand:"Famous Footwear","brand:wikidata":"Q5433457","brand:wikipedia":"en:Famous Footwear",name:"Famous Footwear",shop:"shoes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Foot Locker":{name:"Foot Locker",icon:"maki-shoe",imageURL:"https://graph.facebook.com/footlocker/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63335",shop:"shoes"},addTags:{brand:"Foot Locker","brand:wikidata":"Q63335","brand:wikipedia":"en:Foot Locker",name:"Foot Locker",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Gabor":{name:"Gabor",icon:"maki-shoe",imageURL:"https://graph.facebook.com/gaborshoesag/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1488760",shop:"shoes"},addTags:{brand:"Gabor","brand:wikidata":"Q1488760","brand:wikipedia":"de:Gabor Shoes",name:"Gabor",shop:"shoes"},countryCodes:["de","it"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Geox":{name:"Geox",icon:"maki-shoe",imageURL:"https://graph.facebook.com/GEOX/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q588001",shop:"shoes"},addTags:{brand:"Geox","brand:wikidata":"Q588001","brand:wikipedia":"en:Geox",name:"Geox",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Görtz":{name:"Görtz",icon:"maki-shoe",imageURL:"https://graph.facebook.com/goertz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1559593",shop:"shoes"},addTags:{brand:"Görtz","brand:wikidata":"Q1559593","brand:wikipedia":"de:Ludwig Görtz",name:"Görtz",shop:"shoes"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Humanic":{name:"Humanic",icon:"maki-shoe",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FHumanic%202013.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1636668",shop:"shoes"},addTags:{brand:"Humanic","brand:wikidata":"Q1636668","brand:wikipedia":"en:Humanic",name:"Humanic",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Hush Puppies":{name:"Hush Puppies",icon:"maki-shoe",imageURL:"https://graph.facebook.com/hushpuppiesglobal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1828588",shop:"shoes"},addTags:{brand:"Hush Puppies","brand:wikidata":"Q1828588","brand:wikipedia":"en:Hush Puppies",name:"Hush Puppies",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Johnston & Murphy":{name:"Johnston & Murphy",icon:"maki-shoe",imageURL:"https://graph.facebook.com/johnstonmurphy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6268615",shop:"shoes"},addTags:{brand:"Johnston & Murphy","brand:wikidata":"Q6268615","brand:wikipedia":"en:Johnston & Murphy",name:"Johnston & Murphy",shop:"shoes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Journeys":{name:"Journeys",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Journeys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61994838",shop:"shoes"},addTags:{brand:"Journeys","brand:wikidata":"Q61994838",name:"Journeys",operator:"Genesco","operator:wikidata":"Q5532704","operator:wikipedia":"en:Genesco",shop:"shoes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Kari":{name:"Kari",icon:"maki-shoe",imageURL:"https://graph.facebook.com/shopkari/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q47155680",shop:"shoes"},addTags:{brand:"Kari","brand:wikidata":"Q47155680","brand:wikipedia":"ru:Kari (компания)",name:"Kari",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/La Halle aux Chaussures":{name:"La Halle aux Chaussures",icon:"maki-shoe",imageURL:"https://graph.facebook.com/lahalle.com/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62390731",shop:"shoes"},addTags:{brand:"La Halle aux Chaussures","brand:wikidata":"Q62390731",name:"La Halle aux Chaussures",operator:"Vivarte","operator:wikidata":"Q3561446","operator:wikipedia":"fr:Vivarte",shop:"shoes"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Mephisto":{name:"Mephisto",icon:"maki-shoe",imageURL:"https://graph.facebook.com/mephisto.usa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q822975",shop:"shoes"},addTags:{brand:"Mephisto","brand:wikidata":"Q822975","brand:wikipedia":"fr:Mephisto (chaussure)",name:"Mephisto",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Merrell":{name:"Merrell",icon:"maki-shoe",imageURL:"https://graph.facebook.com/merrell/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1921997",shop:"shoes"},addTags:{brand:"Merrell","brand:wikidata":"Q1921997","brand:wikipedia":"en:Merrell (company)",name:"Merrell",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Minelli":{name:"Minelli",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Minelli/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61994831",shop:"shoes"},addTags:{brand:"Minelli","brand:wikidata":"Q61994831",name:"Minelli",operator:"Vivarte","operator:wikidata":"Q3561446","operator:wikipedia":"fr:Vivarte",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/New Balance":{name:"New Balance",icon:"maki-shoe",imageURL:"https://graph.facebook.com/newbalanceusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q742988",shop:"shoes"},addTags:{brand:"New Balance","brand:wikidata":"Q742988","brand:wikipedia":"en:New Balance",name:"New Balance",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Office":{name:"Office",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Officeshoes1/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7079121",shop:"shoes"},addTags:{brand:"Office","brand:wikidata":"Q7079121","brand:wikipedia":"en:Office Holdings",name:"Office",shop:"shoes"},countryCodes:["de","gb","ie","ro"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Payless ShoeSource":{name:"Payless ShoeSource",icon:"maki-shoe",imageURL:"https://graph.facebook.com/payless/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7156755",shop:"shoes"},addTags:{brand:"Payless ShoeSource","brand:wikidata":"Q7156755","brand:wikipedia":"en:Payless ShoeSource",name:"Payless ShoeSource",shop:"shoes"},terms:["payless"],matchScore:2,suggestion:true},"shop/shoes/Quick Schuh":{name:"Quick Schuh",icon:"maki-shoe",imageURL:"https://graph.facebook.com/quick.schuh/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2123069",shop:"shoes"},addTags:{brand:"Quick Schuh","brand:wikidata":"Q2123069","brand:wikipedia":"de:Quick Schuh",name:"Quick Schuh",shop:"shoes"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Rack Room Shoes":{name:"Rack Room Shoes",icon:"maki-shoe",imageURL:"https://graph.facebook.com/myrackroomshoes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17109937",shop:"shoes"},addTags:{brand:"Rack Room Shoes","brand:wikidata":"Q17109937","brand:wikipedia":"en:Rack Room Shoes",name:"Rack Room Shoes",shop:"shoes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Red Wing":{name:"Red Wing",icon:"maki-shoe",imageURL:"https://graph.facebook.com/RedWingShoes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q934096",shop:"shoes"},addTags:{brand:"Red Wing","brand:wikidata":"Q934096","brand:wikipedia":"en:Red Wing Shoes",name:"Red Wing",shop:"shoes"},countryCodes:["de","gb","nl","us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Reno":{name:"Reno",icon:"maki-shoe",imageURL:"https://graph.facebook.com/RENO/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2144204",shop:"shoes"},addTags:{brand:"Reno","brand:wikidata":"Q2144204","brand:wikipedia":"de:Reno (Schuhhandel)",name:"Reno",shop:"shoes"},countryCodes:["at","ch","de","hu","sk"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Rieker":{name:"Rieker",icon:"maki-shoe",imageURL:"https://graph.facebook.com/riekerofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2152193",shop:"shoes"},addTags:{brand:"Rieker","brand:wikidata":"Q2152193","brand:wikipedia":"en:Rieker Shoes",name:"Rieker",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Rockport":{name:"Rockport",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Rockport/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4048384",shop:"shoes"},addTags:{brand:"Rockport","brand:wikidata":"Q4048384","brand:wikipedia":"en:Rockport (company)",name:"Rockport",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Salamander":{name:"Salamander",icon:"maki-shoe",imageURL:"https://graph.facebook.com/SalamanderCzech/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q878354",shop:"shoes"},addTags:{brand:"Salamander","brand:wikidata":"Q878354","brand:wikipedia":"de:Salamander (Schuhe)",name:"Salamander",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/San Marina":{name:"San Marina",icon:"maki-shoe",imageURL:"https://graph.facebook.com/sanmarina/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3471558",shop:"shoes"},addTags:{brand:"San Marina","brand:wikidata":"Q3471558","brand:wikipedia":"fr:San Marina",name:"San Marina",shop:"shoes"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Scapino":{name:"Scapino",icon:"maki-shoe",imageURL:"https://graph.facebook.com/ScapinoNL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2298792",shop:"shoes"},addTags:{brand:"Scapino","brand:wikidata":"Q2298792","brand:wikipedia":"nl:Scapino (winkelketen)",name:"Scapino",shop:"shoes"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Schuh":{name:"Schuh",icon:"maki-shoe",imageURL:"https://graph.facebook.com/schuhshoes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7432952",shop:"shoes"},addTags:{brand:"Schuh","brand:wikidata":"Q7432952","brand:wikipedia":"en:Schuh",name:"Schuh",shop:"shoes"},countryCodes:["de","gb","gg","ie"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Shoe Carnival":{name:"Shoe Carnival",icon:"maki-shoe",imageURL:"https://graph.facebook.com/ShoeCarnival/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7500007",shop:"shoes"},addTags:{brand:"Shoe Carnival","brand:wikidata":"Q7500007","brand:wikipedia":"en:Shoe Carnival",name:"Shoe Carnival",shop:"shoes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Shoe Zone":{name:"Shoe Zone",icon:"maki-shoe",imageURL:"https://graph.facebook.com/shoezone/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7500016",shop:"shoes"},addTags:{brand:"Shoe Zone","brand:wikidata":"Q7500016","brand:wikipedia":"en:Shoe Zone",name:"Shoe Zone",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Siemes Schuhcenter":{name:"Siemes Schuhcenter",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Schuhcenter.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2800720",shop:"shoes"},addTags:{brand:"Siemes Schuhcenter","brand:wikidata":"Q2800720","brand:wikipedia":"de:Siemes (Unternehmen)",name:"Siemes Schuhcenter",shop:"shoes"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Skechers":{name:"Skechers",icon:"maki-shoe",imageURL:"https://graph.facebook.com/SKECHERS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2945643",shop:"shoes"},addTags:{brand:"Skechers","brand:wikidata":"Q2945643","brand:wikipedia":"en:Skechers",name:"Skechers",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Sperry":{name:"Sperry",icon:"maki-shoe",imageURL:"https://graph.facebook.com/sperry/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7576421",shop:"shoes"},addTags:{brand:"Sperry","brand:wikidata":"Q7576421","brand:wikipedia":"en:Sperry Top-Sider",name:"Sperry",shop:"shoes"},countryCodes:["us"],terms:["sperry top sider"],matchScore:2,suggestion:true},"shop/shoes/Stride Rite":{name:"Stride Rite",icon:"maki-shoe",imageURL:"https://graph.facebook.com/striderite/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2356171",shop:"shoes"},addTags:{brand:"Stride Rite","brand:wikidata":"Q2356171","brand:wikipedia":"en:Stride Rite Corporation",name:"Stride Rite",shop:"shoes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Tamaris":{name:"Tamaris",icon:"maki-shoe",imageURL:"https://graph.facebook.com/tamarisinternational/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61994827",shop:"shoes"},addTags:{brand:"Tamaris","brand:wikidata":"Q61994827",name:"Tamaris",operator:"Wortmann Schuh-Holding","operator:wikidata":"Q1726079","operator:wikipedia":"de:Wortmann Schuh-Holding",shop:"shoes"},countryCodes:["at","be","de","fr","nl"],terms:[],matchScore:2,suggestion:true},"shop/shoes/The Shoe Company":{name:"The Shoe Company",icon:"maki-shoe",imageURL:"https://graph.facebook.com/theshoeco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7763892",shop:"shoes"},addTags:{brand:"The Shoe Company","brand:wikidata":"Q7763892","brand:wikipedia":"en:The Shoe Company",name:"The Shoe Company",shop:"shoes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/shoes/UGG":{name:"UGG",icon:"maki-shoe",imageURL:"https://graph.facebook.com/UGG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1138480",shop:"shoes"},addTags:{brand:"UGG","brand:wikidata":"Q1138480","brand:wikipedia":"en:UGG (brand)",name:"UGG",shop:"shoes"},countryCodes:["au","us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Vans":{name:"Vans",icon:"maki-shoe",imageURL:"https://graph.facebook.com/VANS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1135366",shop:"shoes"},addTags:{brand:"Vans","brand:wikidata":"Q1135366","brand:wikipedia":"en:Vans",name:"Vans",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/vanHaren":{name:"vanHaren",icon:"maki-shoe",imageURL:"https://graph.facebook.com/vanharenschoenen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62390668",shop:"shoes"},addTags:{brand:"vanHaren","brand:wikidata":"Q62390668",name:"vanHaren",shop:"shoes"},countryCodes:["be","nl"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Éram":{name:"Éram",icon:"maki-shoe",imageURL:"https://graph.facebook.com/eram.fr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16684192",shop:"shoes"},addTags:{brand:"Éram","brand:wikidata":"Q16684192","brand:wikipedia":"fr:Éram",name:"Éram",shop:"shoes"},countryCodes:["be","fr"],terms:[],matchScore:2,suggestion:true},"shop/shoes/ЦентрОбувь":{name:"ЦентрОбувь",icon:"maki-shoe",geometry:["point","area"],tags:{"brand:wikidata":"Q4504072",shop:"shoes"},addTags:{brand:"ЦентрОбувь","brand:wikidata":"Q4504072","brand:wikipedia":"ru:ЦентрОбувь",name:"ЦентрОбувь",shop:"shoes"},countryCodes:["by","ru","ua"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Юничел":{name:"Юничел",icon:"maki-shoe",imageURL:"https://graph.facebook.com/unichel.shoes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62390569",shop:"shoes"},addTags:{brand:"Юничел","brand:wikidata":"Q62390569",name:"Юничел",shop:"shoes"},countryCodes:["kz","ru"],terms:[],matchScore:2,suggestion:true},"shop/shoes/東京靴流通センター":{name:"東京靴流通センター",icon:"maki-shoe",imageURL:"https://graph.facebook.com/chiyodafanpage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11318515",shop:"shoes"},addTags:{brand:"東京靴流通センター","brand:en":"Tokyo Shoes Retailing Center","brand:ja":"東京靴流通センター","brand:wikidata":"Q11318515","brand:wikipedia":"ja:チヨダ",name:"東京靴流通センター","name:en":"Tokyo Shoes Retailing Center","name:ja":"東京靴流通センター",shop:"shoes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/sports/Academy Sports + Outdoors":{name:"Academy Sports + Outdoors",icon:"fas-futbol",imageURL:"https://graph.facebook.com/Academy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4671380",shop:"sports"},addTags:{brand:"Academy Sports + Outdoors","brand:wikidata":"Q4671380","brand:wikipedia":"en:Academy Sports + Outdoors",name:"Academy Sports + Outdoors",shop:"sports"},countryCodes:["us"],terms:["academy","academy sports and outdoors"],matchScore:2,suggestion:true},"shop/sports/Adidas":{name:"Adidas",icon:"fas-futbol",imageURL:"https://graph.facebook.com/adidasUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3895",shop:"sports"},addTags:{brand:"Adidas","brand:wikidata":"Q3895","brand:wikipedia":"en:Adidas",name:"Adidas",shop:"sports"},terms:[],matchScore:2,suggestion:true},"shop/sports/Aktiesport":{name:"Aktiesport",icon:"fas-futbol",geometry:["point","area"],tags:{"brand:wikidata":"Q57546889",shop:"sports"},addTags:{brand:"Aktiesport","brand:wikidata":"Q57546889",name:"Aktiesport",shop:"sports"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/sports/American Golf":{name:"American Golf",icon:"fas-futbol",imageURL:"https://graph.facebook.com/americangolf/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62657494",shop:"sports"},addTags:{brand:"American Golf","brand:wikidata":"Q62657494",name:"American Golf",shop:"sports",sport:"golf"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/sports/Big 5 Sporting Goods":{name:"Big 5 Sporting Goods",icon:"fas-futbol",imageURL:"https://graph.facebook.com/Big5SportingGoods/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4904902",shop:"sports"},addTags:{brand:"Big 5 Sporting Goods","brand:wikidata":"Q4904902","brand:wikipedia":"en:Big 5 Sporting Goods",name:"Big 5 Sporting Goods",shop:"sports"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/sports/Centauro":{name:"Centauro",icon:"fas-futbol",imageURL:"https://graph.facebook.com/centauroesporte/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28679561",shop:"sports"},addTags:{brand:"Centauro","brand:wikidata":"Q28679561","brand:wikipedia":"pt:Lojas Centauro",name:"Centauro",shop:"sports"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"shop/sports/Decathlon":{name:"Decathlon",icon:"fas-futbol",imageURL:"https://graph.facebook.com/DecathlonUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q509349",shop:"sports"},addTags:{brand:"Decathlon","brand:wikidata":"Q509349","brand:wikipedia":"en:Decathlon Group",name:"Decathlon",shop:"sports"},terms:[],matchScore:2,suggestion:true},"shop/sports/Dick's Sporting Goods":{name:"Dick's Sporting Goods",icon:"fas-futbol",imageURL:"https://graph.facebook.com/dickssportinggoods/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5272601",shop:"sports"},addTags:{brand:"Dick's Sporting Goods","brand:wikidata":"Q5272601","brand:wikipedia":"en:Dick's Sporting Goods",name:"Dick's Sporting Goods",shop:"sports"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/sports/Hervis":{name:"Hervis",icon:"fas-futbol",imageURL:"https://graph.facebook.com/hervissports.at/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1614816",shop:"sports"},addTags:{brand:"Hervis","brand:wikidata":"Q1614816","brand:wikipedia":"de:Hervis",name:"Hervis",shop:"sports"},countryCodes:["at","cz","de","hr","hu","ro","si"],terms:["hervis sport","hervis sports"],matchScore:2,suggestion:true},"shop/sports/Hibbett Sports":{name:"Hibbett Sports",icon:"fas-futbol",imageURL:"https://graph.facebook.com/HibbettSports/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5750671",shop:"sports"},addTags:{brand:"Hibbett Sports","brand:wikidata":"Q5750671","brand:wikipedia":"en:Hibbett Sports",name:"Hibbett Sports",shop:"sports"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/sports/Intersport":{name:"Intersport",icon:"fas-futbol",imageURL:"https://graph.facebook.com/intersportAT/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q666888",shop:"sports"},addTags:{brand:"Intersport","brand:wikidata":"Q666888","brand:wikipedia":"en:Intersport",name:"Intersport",shop:"sports"},terms:[],matchScore:2,suggestion:true},"shop/sports/JD Sports":{name:"JD Sports",icon:"fas-futbol",imageURL:"https://graph.facebook.com/JDSportsOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6108019",shop:"sports"},addTags:{brand:"JD Sports","brand:wikidata":"Q6108019","brand:wikipedia":"en:JD Sports",name:"JD Sports",shop:"sports"},countryCodes:["de","es","fr","gb","ie","nl"],terms:[],matchScore:2,suggestion:true},"shop/sports/Marathon Sports":{name:"Marathon Sports",icon:"fas-futbol",imageURL:"https://graph.facebook.com/marathonsports/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3027516",shop:"sports"},addTags:{brand:"Marathon Sports","brand:wikidata":"Q3027516","brand:wikipedia":"es:Marathon Sports",name:"Marathon Sports",shop:"sports"},countryCodes:["bo","ec","pe"],terms:[],matchScore:2,suggestion:true},"shop/sports/Martes Sport":{name:"Martes Sport",icon:"fas-futbol",imageURL:"https://graph.facebook.com/sklepmartes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62073490",shop:"sports"},addTags:{brand:"Martes Sport","brand:wikidata":"Q62073490",name:"Martes Sport",shop:"sports"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/sports/Modell’s Sporting Goods":{name:"Modell’s Sporting Goods",icon:"fas-futbol",imageURL:"https://graph.facebook.com/modells/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3317844",shop:"sports"},addTags:{brand:"Modell’s Sporting Goods","brand:wikidata":"Q3317844","brand:wikipedia":"en:Modell's Sporting Goods",name:"Modell’s Sporting Goods",shop:"sports"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/sports/Play It Again Sports":{name:"Play It Again Sports",icon:"fas-futbol",imageURL:"https://graph.facebook.com/playitagainsports/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7203029",shop:"sports"},addTags:{brand:"Play It Again Sports","brand:wikidata":"Q7203029","brand:wikipedia":"en:Play It Again Sports",name:"Play It Again Sports",shop:"sports"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/sports/Sport 2000":{name:"Sport 2000",icon:"fas-futbol",imageURL:"https://graph.facebook.com/SPORT2000France/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q262394",shop:"sports"},addTags:{brand:"Sport 2000","brand:wikidata":"Q262394","brand:wikipedia":"de:Sport 2000",name:"Sport 2000",shop:"sports"},terms:[],matchScore:2,suggestion:true},"shop/sports/Sportisimo":{name:"Sportisimo",icon:"fas-futbol",imageURL:"https://graph.facebook.com/1463426373966592/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q54974273",shop:"sports"},addTags:{brand:"Sportisimo","brand:wikidata":"Q54974273",name:"Sportisimo",shop:"sports"},countryCodes:["cz","sk"],terms:[],matchScore:2,suggestion:true},"shop/sports/Sports Authority":{name:"Sports Authority",icon:"fas-futbol",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSports%20Authority%20logo2011.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q7579688",shop:"sports"},addTags:{brand:"Sports Authority","brand:wikidata":"Q7579688","brand:wikipedia":"en:Sports Authority",name:"Sports Authority",shop:"sports"},terms:[],matchScore:2,suggestion:true},"shop/sports/Sports Direct":{name:"Sports Direct",icon:"fas-futbol",imageURL:"https://graph.facebook.com/SportsDirect/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2913554",shop:"sports"},addTags:{brand:"Sports Direct","brand:wikidata":"Q2913554","brand:wikipedia":"en:Sports Direct",name:"Sports Direct",shop:"sports"},terms:[],matchScore:2,suggestion:true},"shop/sports/Спортмастер":{name:"Спортмастер",icon:"fas-futbol",imageURL:"https://graph.facebook.com/sportmaster.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4438176",shop:"sports"},addTags:{brand:"Спортмастер","brand:en":"Sportmaster","brand:ru":"Спортмастер","brand:wikidata":"Q4438176","brand:wikipedia":"ru:Спортмастер",name:"Спортмастер","name:en":"Sportmaster","name:ru":"Спортмастер",shop:"sports"},countryCodes:["by","kz","ru","ua"],terms:["спортмастер гипер"],matchScore:2,suggestion:true},"shop/stationery/Bureau Vallée":{name:"Bureau Vallée",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/BureauVallee/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18385014",shop:"stationery"},addTags:{brand:"Bureau Vallée","brand:wikidata":"Q18385014","brand:wikipedia":"fr:Bureau Vallée",name:"Bureau Vallée",shop:"stationery"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/stationery/McPaper":{name:"McPaper",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/mcpaperberlin/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1915329",shop:"stationery"},addTags:{brand:"McPaper","brand:wikidata":"Q1915329","brand:wikipedia":"de:McPaper",name:"McPaper",shop:"stationery"},countryCodes:["ch","de"],terms:[],matchScore:2,suggestion:true},"shop/stationery/Office Depot":{name:"Office Depot",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/OfficeDepot/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1337797",shop:"stationery"},addTags:{brand:"Office Depot","brand:wikidata":"Q1337797","brand:wikipedia":"en:Office Depot",name:"Office Depot",shop:"stationery"},terms:[],matchScore:2,suggestion:true},"shop/stationery/OfficeMax":{name:"OfficeMax",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/OfficeDepot/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7079111",shop:"stationery"},addTags:{brand:"OfficeMax","brand:wikidata":"Q7079111","brand:wikipedia":"en:OfficeMax",name:"OfficeMax",shop:"stationery"},terms:[],matchScore:2,suggestion:true},"shop/stationery/Officeworks":{name:"Officeworks",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/officeworks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7079486",shop:"stationery"},addTags:{brand:"Officeworks","brand:wikidata":"Q7079486","brand:wikipedia":"en:Officeworks",name:"Officeworks",shop:"stationery"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/stationery/Pagro":{name:"Pagro",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/pagro.at/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57550022",shop:"stationery"},addTags:{brand:"Pagro","brand:wikidata":"Q57550022",name:"Pagro",shop:"stationery"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/stationery/Paper Source":{name:"Paper Source",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/PaperSource/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25000269",shop:"stationery"},addTags:{brand:"Paper Source","brand:wikidata":"Q25000269","brand:wikipedia":"en:Paper Source",name:"Paper Source",shop:"stationery"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/stationery/Paperchase":{name:"Paperchase",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/paperchase/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7132739",shop:"stationery"},addTags:{brand:"Paperchase","brand:wikidata":"Q7132739","brand:wikipedia":"en:Paperchase",name:"Paperchase",shop:"stationery"},terms:[],matchScore:2,suggestion:true},"shop/stationery/Ryman":{name:"Ryman",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/ryman/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7385188",shop:"stationery"},addTags:{brand:"Ryman","brand:wikidata":"Q7385188","brand:wikipedia":"en:Ryman",name:"Ryman",shop:"stationery"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/stationery/Staples":{name:"Staples",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/staples/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q785943",shop:"stationery"},addTags:{brand:"Staples","brand:wikidata":"Q785943","brand:wikipedia":"en:Staples Inc.",name:"Staples",shop:"stationery"},terms:[],matchScore:2,suggestion:true},"shop/stationery/Комус":{name:"Комус",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/komusclub/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4230314",shop:"stationery"},addTags:{brand:"Комус","brand:en":"Komus","brand:wikidata":"Q4230314","brand:wikipedia":"en:Komus (company)",name:"Комус","name:en":"Komus",shop:"stationery"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/storage_rental/Extra Space Storage":{name:"Extra Space Storage",icon:"fas-warehouse",imageURL:"https://graph.facebook.com/extraspace/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5422162",shop:"storage_rental"},addTags:{brand:"Extra Space Storage","brand:wikidata":"Q5422162","brand:wikipedia":"en:Extra Space Storage",name:"Extra Space Storage",shop:"storage_rental"},countryCodes:["pr","us"],terms:[],matchScore:2,suggestion:true},"shop/storage_rental/Public Storage":{name:"Public Storage",icon:"fas-warehouse",imageURL:"https://graph.facebook.com/PublicStorage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1156045",shop:"storage_rental"},addTags:{brand:"Public Storage","brand:wikidata":"Q1156045","brand:wikipedia":"en:Public Storage",name:"Public Storage",shop:"storage_rental"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/8 à Huit":{name:"8 à Huit",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q2818601",shop:"supermarket"},addTags:{brand:"8 à Huit","brand:wikidata":"Q2818601","brand:wikipedia":"fr:8 à Huit",name:"8 à Huit",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/99 Ranch Market":{name:"99 Ranch Market",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q3600279",shop:"supermarket"},addTags:{brand:"99 Ranch Market","brand:wikidata":"Q3600279","brand:wikipedia":"en:99 Ranch Market",cuisine:"asian",name:"99 Ranch Market","name:en":"99 Ranch Market","name:zh-Hans":"大华超级市场","name:zh-Hant":"大華超級市場",shop:"supermarket"},countryCodes:["us"],terms:["99 ranch","ranch 99"],matchScore:2,suggestion:true},"shop/supermarket/A&O":{name:"A&O",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q3600279",shop:"supermarket"},addTags:{brand:"A&O","brand:wikidata":"Q3600279","brand:wikipedia":"it:A&O",name:"A&O",shop:"supermarket"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/A101":{name:"A101",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/996489765544448000/kwXc3FEH_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q6034496",shop:"supermarket"},addTags:{brand:"A101","brand:wikidata":"Q6034496","brand:wikipedia":"tr:A101",name:"A101",shop:"supermarket"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/AD Delhaize":{name:"AD Delhaize",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Delhaize/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1184173",shop:"supermarket"},addTags:{brand:"AD Delhaize","brand:wikidata":"Q1184173","brand:wikipedia":"fr:Delhaize",name:"AD Delhaize",shop:"supermarket"},countryCodes:["be","lu"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ADEG":{name:"ADEG",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAdeg%20logo%20gruen%202015.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q290211",shop:"supermarket"},addTags:{brand:"ADEG","brand:wikidata":"Q290211","brand:wikipedia":"de:ADEG Österreich",name:"ADEG",shop:"supermarket"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Acme":{name:"Acme",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAcme%20Markets%20lolo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q341975",shop:"supermarket"},addTags:{brand:"Acme","brand:wikidata":"Q341975","brand:wikipedia":"en:Acme Markets",name:"Acme",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Ahorramás":{name:"Ahorramás",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q58221883",shop:"supermarket"},addTags:{brand:"Ahorramás","brand:wikidata":"Q58221883",name:"Ahorramás",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Albert":{name:"Albert",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAlbert%20Logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q9144241",shop:"supermarket"},addTags:{brand:"Albert","brand:wikidata":"Q9144241","brand:wikipedia":"cs:Albert (obchodní řetězec)",name:"Albert",shop:"supermarket"},countryCodes:["cz"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Albert Heijn":{name:"Albert Heijn",icon:"maki-grocery",imageURL:"https://graph.facebook.com/albertheijn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1653985",shop:"supermarket"},addTags:{brand:"Albert Heijn","brand:wikidata":"Q1653985","brand:wikipedia":"nl:Albert Heijn (supermarkt)",name:"Albert Heijn",shop:"supermarket"},countryCodes:["be","nl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Albertsons":{name:"Albertsons",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAlbertsons%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4712282",shop:"supermarket"},addTags:{brand:"Albertsons","brand:wikidata":"Q4712282","brand:wikipedia":"en:Albertsons",name:"Albertsons",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Aldi":{name:"Aldi",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAldiWorldwideLogo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q125054",shop:"supermarket"},addTags:{brand:"Aldi","brand:wikidata":"Q125054","brand:wikipedia":"en:Aldi",name:"Aldi",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Aldi Nord":{name:"Aldi Nord",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FALDI%20Nord%20Logo%202015.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q41171373",shop:"supermarket"},addTags:{brand:"Aldi Nord","brand:wikidata":"Q41171373","brand:wikipedia":"en:Aldi",name:"Aldi Nord",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Aldi Süd":{name:"Aldi Süd",icon:"maki-grocery",imageURL:"https://graph.facebook.com/ALDI.SUED/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q41171672",shop:"supermarket"},addTags:{brand:"Aldi Süd","brand:wikidata":"Q41171672","brand:wikipedia":"en:Aldi",name:"Aldi Süd",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Alfamart":{name:"Alfamart",icon:"maki-grocery",imageURL:"https://graph.facebook.com/alfamartku/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23745600",shop:"supermarket"},addTags:{brand:"Alfamart","brand:wikidata":"Q23745600","brand:wikipedia":"en:Alfamart",name:"Alfamart",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Alimerka":{name:"Alimerka",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/659793335503204352/7J6NiZzm_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q16482738",shop:"supermarket"},addTags:{brand:"Alimerka","brand:wikidata":"Q16482738","brand:wikipedia":"es:Alimerka",name:"Alimerka",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Alnatura":{name:"Alnatura",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAlnatura-Logo-2017.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q876811",shop:"supermarket"},addTags:{brand:"Alnatura","brand:wikidata":"Q876811","brand:wikipedia":"en:Alnatura",name:"Alnatura",organic:"only",shop:"supermarket"},countryCodes:["ch","de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Asda":{name:"Asda",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Asda/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q297410",shop:"supermarket"},addTags:{brand:"Asda","brand:wikidata":"Q297410","brand:wikipedia":"en:Asda",name:"Asda",shop:"supermarket"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Atacadão":{name:"Atacadão",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q2868739",shop:"supermarket"},addTags:{brand:"Atacadão","brand:wikidata":"Q2868739","brand:wikipedia":"en:Atacadão",name:"Atacadão",shop:"supermarket"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Auchan":{name:"Auchan",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/877095334316576768/bhQDPUWZ_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q758603",shop:"supermarket"},addTags:{brand:"Auchan","brand:wikidata":"Q758603","brand:wikipedia":"en:Auchan",name:"Auchan",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/BM":{name:"BM",icon:"maki-grocery",imageURL:"https://graph.facebook.com/BM-Supermercados-147042362658546/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62073462",shop:"supermarket"},addTags:{brand:"BM","brand:wikidata":"Q62073462",name:"BM",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Bi-Lo":{name:"Bi-Lo",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBI%E2%80%A2LO-brand.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4835622",shop:"supermarket"},addTags:{brand:"Bi-Lo","brand:wikidata":"Q4835622","brand:wikipedia":"en:BI-LO (Australia)",name:"Bi-Lo",shop:"supermarket"},countryCodes:["au","us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Biedronka":{name:"Biedronka",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FGda%C5%84sk%20ulica%20Pomorska%2024%20(Biedronka).JPG&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q857182",shop:"supermarket"},addTags:{brand:"Biedronka","brand:wikidata":"Q857182","brand:wikipedia":"pl:Biedronka (sieć handlowa)",name:"Biedronka",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Big Bazaar":{name:"Big Bazaar",icon:"maki-grocery",imageURL:"https://graph.facebook.com/BigBazaar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3631008",shop:"supermarket"},addTags:{brand:"Big Bazaar","brand:wikidata":"Q3631008","brand:wikipedia":"en:Big Bazaar",name:"Big Bazaar",shop:"supermarket"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Big C":{name:"Big C",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q858665",shop:"supermarket"},addTags:{brand:"Big C","brand:wikidata":"Q858665","brand:wikipedia":"en:Big C",name:"Big C",shop:"supermarket"},countryCodes:["th","vn"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Billa":{name:"Billa",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBilla-Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q537781",shop:"supermarket"},addTags:{brand:"Billa","brand:wikidata":"Q537781","brand:wikipedia":"en:Billa (supermarket)",name:"Billa",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Bim":{name:"Bim",icon:"maki-grocery",imageURL:"https://graph.facebook.com/bimturkiye/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1022075",shop:"supermarket"},addTags:{brand:"Bim","brand:wikidata":"Q1022075","brand:wikipedia":"en:Bim (company)",name:"Bim",shop:"supermarket"},countryCodes:["ma","tr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Bingo":{name:"Bingo",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q16842066",shop:"supermarket"},addTags:{brand:"Bingo","brand:wikidata":"Q16842066","brand:wikipedia":"bs:Bingo (kompanija)",name:"Bingo",shop:"supermarket"},countryCodes:["ba"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Bio Company":{name:"Bio Company",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBio%20Company%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q864179",shop:"supermarket"},addTags:{brand:"Bio Company","brand:wikidata":"Q864179","brand:wikipedia":"de:Bio Company",name:"Bio Company",organic:"only",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Biocoop":{name:"Biocoop",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q2904039",shop:"supermarket"},addTags:{brand:"Biocoop","brand:wikidata":"Q2904039","brand:wikipedia":"fr:Biocoop",name:"Biocoop",shop:"supermarket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Bodega Aurrera":{name:"Bodega Aurrera",icon:"maki-grocery",imageURL:"https://graph.facebook.com/BodegaAurrera/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3365858",shop:"supermarket"},addTags:{brand:"Bodega Aurrera","brand:wikidata":"Q3365858","brand:wikipedia":"en:Bodega Aurrerá",name:"Bodega Aurrera",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Bravo":{name:"Bravo",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q16985159",shop:"supermarket"},addTags:{brand:"Bravo","brand:wikidata":"Q16985159","brand:wikipedia":"en:Bravo (supermarket)",name:"Bravo",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Brookshire Brothers":{name:"Brookshire Brothers",icon:"maki-grocery",imageURL:"https://graph.facebook.com/BrookshireBros/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4975084",shop:"supermarket"},addTags:{brand:"Brookshire Brothers","brand:wikidata":"Q4975084","brand:wikipedia":"en:Brookshire Brothers",name:"Brookshire Brothers",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Brookshire's":{name:"Brookshire's",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q4975085",shop:"supermarket"},addTags:{brand:"Brookshire's","brand:wikidata":"Q4975085","brand:wikipedia":"en:Brookshire Grocery Company",name:"Brookshire's",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Budgens":{name:"Budgens",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/796001828966203392/69ZeL67f_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4985016",shop:"supermarket"},addTags:{brand:"Budgens","brand:wikidata":"Q4985016","brand:wikipedia":"en:Budgens",name:"Budgens",shop:"supermarket"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Bulk Barn":{name:"Bulk Barn",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBulk%20Barn%20Logo.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4996466",shop:"supermarket"},addTags:{brand:"Bulk Barn","brand:wikidata":"Q4996466",name:"Bulk Barn",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Bunnpris":{name:"Bunnpris",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q1774634",shop:"supermarket"},addTags:{brand:"Bunnpris","brand:wikidata":"Q1774634","brand:wikipedia":"en:Bunnpris",name:"Bunnpris",shop:"supermarket"},countryCodes:["no"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/C-Town Supermarkets":{name:"C-Town Supermarkets",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q5005929",shop:"supermarket"},addTags:{brand:"C-Town Supermarkets","brand:wikidata":"Q5005929","brand:wikipedia":"en:C-Town Supermarkets",name:"C-Town",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/CBA":{name:"CBA",icon:"maki-grocery",imageURL:"https://graph.facebook.com/cbaboltok/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q779845",shop:"supermarket"},addTags:{brand:"CBA","brand:wikidata":"Q779845","brand:wikipedia":"en:CBA (food retail)",name:"CBA",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/COOP Jednota":{name:"COOP Jednota",icon:"maki-grocery",imageURL:"https://graph.facebook.com/COOPJednota/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q41629254",shop:"supermarket"},addTags:{brand:"COOP Jednota","brand:wikidata":"Q41629254","brand:wikipedia":"sk:COOP Jednota Slovensko",name:"COOP Jednota",shop:"supermarket"},countryCodes:["cz","sk"],terms:["jednota"],matchScore:2,suggestion:true},"shop/supermarket/Caprabo":{name:"Caprabo",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q1980781",shop:"supermarket"},addTags:{brand:"Caprabo","brand:wikidata":"Q1980781","brand:wikipedia":"en:Caprabo",name:"Caprabo",shop:"supermarket"},countryCodes:["ad","es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Cargills Food City":{name:"Cargills Food City",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q58353955",shop:"supermarket"},addTags:{brand:"Cargills Food City","brand:wikidata":"Q58353955",name:"Cargills Food City","operator:wikidata":"Q5039260","operator:wikipedia":"en:Cargills (Ceylon)",shop:"supermarket"},countryCodes:["lk"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Carrefour":{name:"Carrefour",icon:"maki-grocery",imageURL:"https://graph.facebook.com/carrefouritalia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q217599",shop:"supermarket"},addTags:{brand:"Carrefour","brand:wikidata":"Q217599","brand:wikipedia":"fr:Carrefour (enseigne)",name:"Carrefour",operator:"Groupe Carrefour","operator:wikidata":"Q3117359","operator:wikipedia":"fr:Groupe Carrefour",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Carrefour City":{name:"Carrefour City",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q2940187",shop:"supermarket"},addTags:{brand:"Carrefour City","brand:wikidata":"Q2940187","brand:wikipedia":"fr:Carrefour City",name:"Carrefour City",operator:"Groupe Carrefour","operator:wikidata":"Q3117359","operator:wikipedia":"fr:Groupe Carrefour",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Carrefour Contact":{name:"Carrefour Contact",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q2940188",shop:"supermarket"},addTags:{brand:"Carrefour Contact","brand:wikidata":"Q2940188","brand:wikipedia":"fr:Carrefour Contact",name:"Carrefour Contact",operator:"Groupe Carrefour","operator:wikidata":"Q3117359","operator:wikipedia":"fr:Groupe Carrefour",shop:"supermarket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Carrefour Express":{name:"Carrefour Express",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q2940190",shop:"supermarket"},addTags:{brand:"Carrefour Express","brand:wikidata":"Q2940190","brand:wikipedia":"fr:Carrefour Express",name:"Carrefour Express",operator:"Groupe Carrefour","operator:wikidata":"Q3117359","operator:wikipedia":"fr:Groupe Carrefour",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Carrefour Market":{name:"Carrefour Market",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q2689639",shop:"supermarket"},addTags:{brand:"Carrefour Market","brand:wikidata":"Q2689639","brand:wikipedia":"fr:Carrefour Market",name:"Carrefour Market",operator:"Groupe Carrefour","operator:wikidata":"Q3117359","operator:wikipedia":"fr:Groupe Carrefour",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Carulla":{name:"Carulla",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCarulla%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5047480",shop:"supermarket"},addTags:{brand:"Carulla","brand:wikidata":"Q5047480","brand:wikipedia":"en:Carulla",name:"Carulla",shop:"supermarket"},countryCodes:["co"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Centre Commercial E. Leclerc":{name:"Centre Commercial E. Leclerc",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FE.Leclerc%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1273376",shop:"supermarket"},addTags:{brand:"Centre Commercial E. Leclerc","brand:wikidata":"Q1273376","brand:wikipedia":"fr:E.Leclerc",name:"Centre Commercial E. Leclerc",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Chata Polska":{name:"Chata Polska",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q61994406",shop:"supermarket"},addTags:{brand:"Chata Polska","brand:wikidata":"Q61994406",name:"Chata Polska",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Checkers":{name:"Checkers",icon:"maki-grocery",imageURL:"https://graph.facebook.com/checkerssa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5089126",shop:"supermarket"},addTags:{brand:"Checkers","brand:wikidata":"Q5089126","brand:wikipedia":"en:Checkers (supermarket chain)",name:"Checkers",shop:"supermarket"},countryCodes:["bw","na","za"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Chedraui":{name:"Chedraui",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q2961952",shop:"supermarket"},addTags:{brand:"Chedraui","brand:wikidata":"Q2961952","brand:wikipedia":"en:Chedraui",name:"Chedraui",shop:"supermarket"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/City Market":{name:"City Market",icon:"maki-grocery",imageURL:"https://graph.facebook.com/CityMarketGrocery/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5123299",shop:"supermarket"},addTags:{brand:"City Market","brand:wikidata":"Q5123299","brand:wikipedia":"en:City Market (US grocery store chain)",name:"City Market",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Co-op (Canada)":{name:"Co-op (Canada)",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSaskatoon%20Co-op%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5440676",shop:"supermarket"},addTags:{brand:"Federated Co-operatives","brand:wikidata":"Q5440676","brand:wikipedia":"en:Federated Co-operatives",name:"Co-op",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Coles":{name:"Coles",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FColes%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1108172",shop:"supermarket"},addTags:{brand:"Coles","brand:wikidata":"Q1108172","brand:wikipedia":"en:Coles Supermarkets",name:"Coles",shop:"supermarket"},countryCodes:["au","gb"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Colruyt":{name:"Colruyt",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FColruyt%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2363991",shop:"supermarket"},addTags:{brand:"Colruyt","brand:wikidata":"Q2363991","brand:wikipedia":"en:Colruyt (supermarket)",name:"Colruyt",shop:"supermarket"},countryCodes:["be","fr","lu"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Combi":{name:"Combi",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCombi.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1113618",shop:"supermarket"},addTags:{brand:"Combi","brand:wikidata":"Q1113618","brand:wikipedia":"de:Combi (Einkaufsmarkt)",name:"Combi",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Comercial Mexicana":{name:"Comercial Mexicana",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q2985173",shop:"supermarket"},addTags:{brand:"Comercial Mexicana","brand:wikidata":"Q2985173","brand:wikipedia":"en:Comercial Mexicana",name:"Comercial Mexicana",shop:"supermarket"},countryCodes:["mx","us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Conad":{name:"Conad",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q639075",shop:"supermarket"},addTags:{brand:"Conad","brand:wikidata":"Q639075","brand:wikipedia":"it:Conad",name:"Conad",shop:"supermarket"},countryCodes:["al","it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Conad City":{name:"Conad City",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q57543102",shop:"supermarket"},addTags:{brand:"Conad City","brand:wikidata":"Q57543102",name:"Conad City",shop:"supermarket"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Condis":{name:"Condis",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q57417581",shop:"supermarket"},addTags:{brand:"Condis","brand:wikidata":"Q57417581",name:"Condis",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Consum":{name:"Consum",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FConsum%20Cooperativa.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q8350308",shop:"supermarket"},addTags:{brand:"Consum","brand:wikidata":"Q8350308","brand:wikipedia":"es:Consum",name:"Consum",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Continente":{name:"Continente",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogocontinente.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2995683",shop:"supermarket"},addTags:{brand:"Continente","brand:wikidata":"Q2995683","brand:wikipedia":"en:Continente (Supermarket)",name:"Continente",shop:"supermarket"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Coop Prix":{name:"Coop Prix",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCoop%20Prix.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5167705",shop:"supermarket"},addTags:{brand:"Coop Prix","brand:wikidata":"Q5167705","brand:wikipedia":"no:Coop Prix",name:"Coop Prix",shop:"supermarket"},countryCodes:["no"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Coop (Schweiz)":{name:"Coop (Schweiz)",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCoop.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q432564",shop:"supermarket"},addTags:{brand:"Coop","brand:wikidata":"Q432564","brand:wikipedia":"de:Coop (Schweiz)",name:"Coop",shop:"supermarket"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Cora":{name:"Cora",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCora%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q686643",shop:"supermarket"},addTags:{brand:"Cora","brand:wikidata":"Q686643","brand:wikipedia":"en:Cora (hypermarket)",name:"Cora",shop:"supermarket"},countryCodes:["be","fr","lu","ro"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Costcutter":{name:"Costcutter",icon:"maki-grocery",imageURL:"https://graph.facebook.com/costcutter/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5175072",shop:"supermarket"},addTags:{brand:"Costcutter","brand:wikidata":"Q5175072","brand:wikipedia":"en:Costcutter",name:"Costcutter",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Coto":{name:"Coto",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCoto%20superm%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5175411",shop:"supermarket"},addTags:{brand:"Coto","brand:wikidata":"Q5175411","brand:wikipedia":"es:Coto (supermercado)",name:"Coto",shop:"supermarket"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Countdown":{name:"Countdown",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q5176845",shop:"supermarket"},addTags:{brand:"Countdown","brand:wikidata":"Q5176845","brand:wikipedia":"en:Countdown (supermarket)",name:"Countdown",shop:"supermarket"},countryCodes:["nz"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Cub Foods":{name:"Cub Foods",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCub%20Foods.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5191916",shop:"supermarket"},addTags:{brand:"Cub Foods","brand:wikidata":"Q5191916","brand:wikipedia":"en:Cub Foods",name:"Cub Foods",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/D'Agostino":{name:"D'Agostino",icon:"maki-grocery",imageURL:"https://graph.facebook.com/yourdagnyc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20656844",shop:"supermarket"},addTags:{brand:"D'Agostino","brand:wikidata":"Q20656844","brand:wikipedia":"en:D'Agostino Supermarkets",name:"D'Agostino",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/D1":{name:"D1",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q43403418",shop:"supermarket"},addTags:{brand:"D1","brand:wikidata":"Q43403418","brand:wikipedia":"es:Tiendas D1",name:"D1",shop:"supermarket"},countryCodes:["co"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Dagli'Brugsen":{name:"Dagli'Brugsen",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q12307017",shop:"supermarket"},addTags:{brand:"Dagli'Brugsen","brand:wikidata":"Q12307017","brand:wikipedia":"en:Dagli'Brugsen",name:"Dagli'Brugsen",shop:"supermarket"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Deen":{name:"Deen",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q13571727",shop:"supermarket"},addTags:{brand:"Deen","brand:wikidata":"Q13571727","brand:wikipedia":"nl:Deen (supermarkt)",name:"Deen",shop:"supermarket"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Delhaize":{name:"Delhaize",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Delhaize/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1184173",shop:"supermarket"},addTags:{brand:"Delhaize","brand:wikidata":"Q1184173","brand:wikipedia":"fr:Delhaize",name:"Delhaize",shop:"supermarket"},countryCodes:["be","lu"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Delikatesy Centrum":{name:"Delikatesy Centrum",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q11693824",shop:"supermarket"},addTags:{brand:"Delikatesy Centrum","brand:wikidata":"Q11693824","brand:wikipedia":"pl:Delikatesy Centrum",name:"Delikatesy Centrum",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Denner":{name:"Denner",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FDenner%20Logo%202014.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q379911",shop:"supermarket"},addTags:{brand:"Denner","brand:wikidata":"Q379911","brand:wikipedia":"en:Denner (supermarket)",name:"Denner",shop:"supermarket"},countryCodes:["ch","li"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Despar":{name:"Despar",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SPARintheUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q610492",shop:"supermarket"},addTags:{brand:"Spar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Despar",shop:"supermarket"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Despensa Familiar":{name:"Despensa Familiar",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q61994849",shop:"supermarket"},addTags:{brand:"Despensa Familiar","brand:wikidata":"Q61994849",name:"Despensa Familiar",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Dia":{name:"Dia",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/800711981225410560/cuzfS3Pk_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q925132",shop:"supermarket"},addTags:{brand:"Dia","brand:wikidata":"Q925132","brand:wikipedia":"es:Supermercados DIA",name:"Dia",shop:"supermarket"},terms:["supermercado dia"],matchScore:2,suggestion:true},"shop/supermarket/Dia Market":{name:"Dia Market",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/800711981225410560/cuzfS3Pk_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q925132",shop:"supermarket"},addTags:{brand:"Dia Market","brand:wikidata":"Q925132","brand:wikipedia":"es:Supermercados DIA",name:"Dia Market",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Dino":{name:"Dino",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q11694239",shop:"supermarket"},addTags:{brand:"Dino","brand:wikidata":"Q11694239","brand:wikipedia":"pl:Dino Polska",name:"Dino",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Dirk van den Broek":{name:"Dirk van den Broek",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FDirk%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q17502722",shop:"supermarket"},addTags:{brand:"Dirk van den Broek","brand:wikidata":"Q17502722","brand:wikipedia":"en:Dirk (supermarket)",name:"Dirk van den Broek",shop:"supermarket"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Disco (Argentina)":{name:"Disco (Argentina)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/DiscoArgentina/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6135978",shop:"supermarket"},addTags:{brand:"Disco","brand:wikidata":"Q6135978","brand:wikipedia":"es:Disco (supermercado de Argentina)",name:"Disco",shop:"supermarket"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Disco (Uruguay)":{name:"Disco (Uruguay)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/discouruguay/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16636819",shop:"supermarket"},addTags:{brand:"Disco","brand:wikidata":"Q16636819","brand:wikipedia":"es:Disco (supermercado de Uruguay)",name:"Disco",shop:"supermarket"},countryCodes:["uy"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Diska":{name:"Diska",icon:"maki-grocery",imageURL:"https://graph.facebook.com/diskamarkt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62390177",shop:"supermarket"},addTags:{brand:"Diska","brand:wikidata":"Q62390177",name:"Diska",operator:"Edeka","operator:wikidata":"Q701755","operator:wikipedia":"en:Edeka",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Dunnes Stores":{name:"Dunnes Stores",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/839449686054432768/Udhd8DjK_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1266203",shop:"supermarket"},addTags:{brand:"Dunnes Stores","brand:wikidata":"Q1266203","brand:wikipedia":"en:Dunnes Stores",name:"Dunnes Stores",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/E-Center":{name:"E-Center",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Edeka.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q701755",shop:"supermarket"},addTags:{brand:"E-Center","brand:wikidata":"Q701755","brand:wikipedia":"en:Edeka",name:"E-Center",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/E. Leclerc":{name:"E. Leclerc",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FE.Leclerc%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1273376",shop:"supermarket"},addTags:{brand:"E. Leclerc","brand:wikidata":"Q1273376","brand:wikipedia":"en:E.Leclerc",name:"E. Leclerc",shop:"supermarket"},countryCodes:["es","fr","pl","pt"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/E. Leclerc Drive":{name:"E. Leclerc Drive",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FE.Leclerc%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1273376",shop:"supermarket"},addTags:{brand:"E. Leclerc Drive","brand:wikidata":"Q1273376","brand:wikipedia":"fr:E.Leclerc",name:"E. Leclerc Drive",operator:"E.Leclerc","operator:wikidata":"Q1273376","operator:wikipedia":"en:E.Leclerc",shop:"supermarket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/EMTÉ":{name:"EMTÉ",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FEmte%20logo.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3119122",shop:"supermarket"},addTags:{brand:"EMTÉ","brand:wikidata":"Q3119122","brand:wikipedia":"en:EMTÉ",name:"EMTÉ",shop:"supermarket"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Edeka":{name:"Edeka",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Edeka.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q701755",shop:"supermarket"},addTags:{brand:"Edeka","brand:wikidata":"Q701755","brand:wikipedia":"en:Edeka",name:"Edeka",shop:"supermarket"},countryCodes:["de"],terms:["edeka neukauf"],matchScore:2,suggestion:true},"shop/supermarket/Eko":{name:"Eko",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q9251859",shop:"supermarket"},addTags:{brand:"Eko","brand:wikidata":"Q9251859","brand:wikipedia":"pl:Eko Holding",name:"Eko",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Ekom":{name:"Ekom",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q62073442",shop:"supermarket"},addTags:{brand:"Ekom","brand:wikidata":"Q62073442",name:"Ekom",shop:"supermarket"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Ekono":{name:"Ekono",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogotipo%20Ekono.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2842729",shop:"supermarket"},addTags:{brand:"Ekono","brand:wikidata":"Q2842729","brand:wikipedia":"es:Ekono",name:"Ekono",shop:"supermarket"},countryCodes:["cl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Eroski":{name:"Eroski",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q1361349",shop:"supermarket"},addTags:{brand:"Eroski","brand:wikidata":"Q1361349","brand:wikipedia":"en:Eroski",name:"Eroski",shop:"supermarket"},countryCodes:["es","gi"],terms:["charter","eroski center"],matchScore:2,suggestion:true},"shop/supermarket/Esselunga":{name:"Esselunga",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Esselunga/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1059636",shop:"supermarket"},addTags:{brand:"Esselunga","brand:wikidata":"Q1059636","brand:wikipedia":"en:Esselunga",name:"Esselunga",shop:"supermarket"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/EuroSpin":{name:"EuroSpin",icon:"maki-grocery",imageURL:"https://graph.facebook.com/EurospinItaliaSpa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1374674",shop:"supermarket"},addTags:{brand:"EuroSpin","brand:wikidata":"Q1374674","brand:wikipedia":"it:Eurospin",name:"EuroSpin",shop:"supermarket"},countryCodes:["it","si"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Eurospar":{name:"Eurospar",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q12309283",shop:"supermarket"},addTags:{brand:"Eurospar","brand:wikidata":"Q12309283","brand:wikipedia":"da:Eurospar",name:"Eurospar",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Extra":{name:"Extra",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FExtra%20mobillogo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11964085",shop:"supermarket"},addTags:{brand:"Extra","brand:wikidata":"Q11964085","brand:wikipedia":"no:Extra (Coop)",name:"Extra",shop:"supermarket"},terms:["coop extra"],matchScore:2,suggestion:true},"shop/supermarket/Famila":{name:"Famila",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q1395108",shop:"supermarket"},addTags:{brand:"Famila","brand:wikidata":"Q1395108","brand:wikipedia":"de:Famila",name:"Famila",shop:"supermarket"},countryCodes:["de","it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Fareway":{name:"Fareway",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FFareway%20Food%20Stores%2C%20Inc-%20company%20logo-%202014-04-03%2017-22.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5434998",shop:"supermarket"},addTags:{brand:"Fareway","brand:wikidata":"Q5434998","brand:wikipedia":"en:Fareway",name:"Fareway",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Farm Boy":{name:"Farm Boy",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q5435469",shop:"supermarket"},addTags:{brand:"Farm Boy","brand:wikidata":"Q5435469","brand:wikipedia":"en:Farm Boy",name:"Farm Boy",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Farmfoods":{name:"Farmfoods",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FFarmfoods%20Limited%20Logo.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5435841",shop:"supermarket"},addTags:{brand:"Farmfoods","brand:wikidata":"Q5435841","brand:wikipedia":"en:Farmfoods",name:"Farmfoods",shop:"supermarket"},countryCodes:["gb","sk"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Feneberg":{name:"Feneberg",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q5345378",shop:"supermarket"},addTags:{brand:"Feneberg","brand:wikidata":"Q5345378","brand:wikipedia":"de:Feneberg Lebensmittel",name:"Feneberg",shop:"supermarket"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Food 4 Less":{name:"Food 4 Less",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FFood4Less%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5465282",shop:"supermarket"},addTags:{brand:"Food 4 Less","brand:wikidata":"Q5465282","brand:wikipedia":"en:Food 4 Less",name:"Food 4 Less",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Food Basics":{name:"Food Basics",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q5465300",shop:"supermarket"},addTags:{brand:"Food Basics","brand:wikidata":"Q5465300","brand:wikipedia":"en:Food Basics",name:"Food Basics",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Food City":{name:"Food City",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q5465306",shop:"supermarket"},addTags:{brand:"Food City","brand:wikidata":"Q5465306","brand:wikipedia":"en:Food City (Canada)",name:"Food City",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Food Lion":{name:"Food Lion",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q1435950",shop:"supermarket"},addTags:{brand:"Food Lion","brand:wikidata":"Q1435950","brand:wikipedia":"en:Food Lion",name:"Food Lion",shop:"supermarket"},countryCodes:["es","us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/FoodLand (US)":{name:"FoodLand (US)",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q5465271",shop:"supermarket"},addTags:{brand:"FoodLand","brand:wikidata":"Q5465271","brand:wikipedia":"en:FoodLand",name:"FoodLand",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/FoodMaxx":{name:"FoodMaxx",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Foodmaxx/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61894844",shop:"supermarket"},addTags:{brand:"FoodMaxx","brand:wikidata":"Q61894844",name:"FoodMaxx","operator:wikidata":"Q7428009","operator:wikipedia":"en:Save Mart Supermarkets",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Foodland (Australia)":{name:"Foodland (Australia)",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q5465555",shop:"supermarket"},addTags:{brand:"Foodland","brand:wikidata":"Q5465555","brand:wikipedia":"en:Foodland (South Australia)",name:"Foodland",shop:"supermarket"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Foodland (Canada)":{name:"Foodland (Canada)",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q5465554",shop:"supermarket"},addTags:{brand:"Foodland","brand:wikidata":"Q5465554","brand:wikipedia":"en:Foodland (Canada)",name:"Foodland",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Foodland (Hawaii)":{name:"Foodland (Hawaii)",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q5465560",shop:"supermarket"},addTags:{brand:"Foodland","brand:wikidata":"Q5465560","brand:wikipedia":"en:Foodland Hawaii",name:"Foodland",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Foodworks":{name:"Foodworks",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FFoodworks-Logo.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5465579",shop:"supermarket"},addTags:{brand:"Foodworks","brand:wikidata":"Q5465579","brand:wikipedia":"en:Foodworks",name:"Foodworks",shop:"supermarket"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Fred Meyer":{name:"Fred Meyer",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FFred%20Meyer%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5495932",shop:"supermarket"},addTags:{brand:"Fred Meyer","brand:wikidata":"Q5495932","brand:wikipedia":"en:Fred Meyer",name:"Fred Meyer",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/FreshCo":{name:"FreshCo",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FFreshCo%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5502915",shop:"supermarket"},addTags:{brand:"FreshCo","brand:wikidata":"Q5502915","brand:wikipedia":"en:FreshCo",name:"FreshCo",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Froiz":{name:"Froiz",icon:"maki-grocery",imageURL:"https://graph.facebook.com/158051157541336/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17070775",shop:"supermarket"},addTags:{brand:"Froiz","brand:wikidata":"Q17070775","brand:wikipedia":"en:Froiz",name:"Froiz",shop:"supermarket"},countryCodes:["es","pt"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Føtex":{name:"Føtex",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FF%C3%B8tex%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1480395",shop:"supermarket"},addTags:{brand:"Føtex","brand:wikidata":"Q1480395","brand:wikipedia":"en:Føtex",name:"Føtex",shop:"supermarket"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/G20":{name:"G20",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q3504731",shop:"supermarket"},addTags:{brand:"G20","brand:wikidata":"Q3504731","brand:wikipedia":"fr:Supermarchés G20",name:"G20",shop:"supermarket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/GBarbosa":{name:"GBarbosa",icon:"maki-grocery",imageURL:"https://graph.facebook.com/oficialgbarbosa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10287817",shop:"supermarket"},addTags:{brand:"GBarbosa","brand:website":"http://www.gbarbosa.com.br","brand:wikidata":"Q10287817","brand:wikipedia":"pt:GBarbosa",name:"GBarbosa",shop:"supermarket"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Gadis":{name:"Gadis",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q12389151",shop:"supermarket"},addTags:{brand:"Gadis","brand:wikidata":"Q12389151","brand:wikipedia":"gl:Gadisa",name:"Gadis",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Giant Eagle":{name:"Giant Eagle",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FGiantEagle.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1522721",shop:"supermarket"},addTags:{brand:"Giant Eagle","brand:wikidata":"Q1522721","brand:wikipedia":"en:Giant Eagle",name:"Giant Eagle",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Globus":{name:"Globus",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Globus.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q457503",shop:"supermarket"},addTags:{brand:"Globus","brand:wikidata":"Q457503","brand:wikipedia":"en:Globus (hypermarket)",name:"Globus",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Gordon Food Service":{name:"Gordon Food Service",icon:"maki-grocery",imageURL:"https://graph.facebook.com/GordonFoodService/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1538006",shop:"supermarket"},addTags:{brand:"Gordon Food Service","brand:wikidata":"Q1538006","brand:wikipedia":"en:Gordon Food Service",name:"Gordon Food Service",shop:"supermarket"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Grand Frais":{name:"Grand Frais",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q3114675",shop:"supermarket"},addTags:{brand:"Grand Frais","brand:wikidata":"Q3114675","brand:wikipedia":"fr:Grand Frais",name:"Grand Frais",shop:"supermarket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Grocery Outlet":{name:"Grocery Outlet",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FGroceryoutlet%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5609934",shop:"supermarket"},addTags:{brand:"Grocery Outlet","brand:wikidata":"Q5609934","brand:wikipedia":"en:Grocery Outlet",name:"Grocery Outlet",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Groszek":{name:"Groszek",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Sklepy.Groszek/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9280965",shop:"supermarket"},addTags:{brand:"Groszek","brand:wikidata":"Q9280965","brand:wikipedia":"pl:Groszek (sieć sklepów)",name:"Groszek",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Géant Casino":{name:"Géant Casino",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20geant%202015%20rvb.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1380537",shop:"supermarket"},addTags:{brand:"Géant Casino","brand:wikidata":"Q1380537","brand:wikipedia":"en:Géant Casino",name:"Géant Casino",shop:"supermarket"},countryCodes:["cg","fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/H Mart":{name:"H Mart",icon:"maki-grocery",imageURL:"https://graph.facebook.com/hmartofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5636306",shop:"supermarket"},addTags:{"alt_name:ko":"H 마트",brand:"H Mart","brand:wikidata":"Q5636306","brand:wikipedia":"en:H Mart",cuisine:"asian",name:"H Mart","name:en":"H Mart","name:ko":"한아름","name:zh-Hans":"韩亚龙","name:zh-Hant":"韓亞龍",shop:"supermarket"},countryCodes:["ca","gb","us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/H-E-B":{name:"H-E-B",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20of%20the%20HEB%20Grocery%20Company%2C%20LP.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q830621",shop:"supermarket"},addTags:{brand:"H-E-B","brand:wikidata":"Q830621","brand:wikipedia":"en:H-E-B",name:"H-E-B",shop:"supermarket"},countryCodes:["mx","us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/HIT":{name:"HIT",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q1548713",shop:"supermarket"},addTags:{brand:"HIT","brand:wikidata":"Q1548713","brand:wikipedia":"de:HIT Handelsgruppe",name:"HIT",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Hannaford":{name:"Hannaford",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q5648760",shop:"supermarket"},addTags:{brand:"Hannaford","brand:wikidata":"Q5648760","brand:wikipedia":"en:Hannaford Brothers Company",name:"Hannaford",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Harris Teeter":{name:"Harris Teeter",icon:"maki-grocery",imageURL:"https://graph.facebook.com/harristeeter/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5665067",shop:"supermarket"},addTags:{brand:"Harris Teeter","brand:wikidata":"Q5665067","brand:wikipedia":"en:Harris Teeter",name:"Harris Teeter",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Hemköp":{name:"Hemköp",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q10521746",shop:"supermarket"},addTags:{brand:"Hemköp","brand:wikidata":"Q10521746","brand:wikipedia":"sv:Hemköp",name:"Hemköp",shop:"supermarket"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Heron Foods":{name:"Heron Foods",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/589070024230440960/ZBf4EE6m_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q5743472",shop:"supermarket"},addTags:{brand:"Heron Foods","brand:wikidata":"Q5743472","brand:wikipedia":"en:Heron Foods",name:"Heron Foods",shop:"supermarket"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Hofer":{name:"Hofer",icon:"maki-grocery",imageURL:"https://graph.facebook.com/HOFER.AT/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15815751",shop:"supermarket"},addTags:{brand:"Hofer","brand:wikidata":"Q15815751","brand:wikipedia":"de:Hofer KG",name:"Hofer",shop:"supermarket"},countryCodes:["at","si"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Hoogvliet":{name:"Hoogvliet",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q2770647",shop:"supermarket"},addTags:{brand:"Hoogvliet","brand:wikidata":"Q2770647","brand:wikipedia":"nl:Hoogvliet (supermarkt)",name:"Hoogvliet",shop:"supermarket"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Hy-Vee":{name:"Hy-Vee",icon:"maki-grocery",imageURL:"https://graph.facebook.com/HyVee/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1639719",shop:"supermarket"},addTags:{brand:"Hy-Vee","brand:wikidata":"Q1639719","brand:wikipedia":"en:Hy-Vee",name:"Hy-Vee",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Hyper U":{name:"Hyper U",icon:"maki-grocery",imageURL:"https://graph.facebook.com/ULesCommercants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2529029",shop:"supermarket"},addTags:{brand:"Hyper U","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Hyper U",shop:"supermarket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ICA":{name:"ICA",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q1663776",shop:"supermarket"},addTags:{brand:"ICA","brand:wikidata":"Q1663776","brand:wikipedia":"sv:Ica",name:"ICA",shop:"supermarket"},countryCodes:["no","se"],terms:["ica supermarket"],matchScore:2,suggestion:true},"shop/supermarket/ICA Kvantum":{name:"ICA Kvantum",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q1663776",shop:"supermarket"},addTags:{brand:"ICA Kvantum","brand:wikidata":"Q1663776","brand:wikipedia":"sv:Ica",name:"ICA Kvantum",shop:"supermarket"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ICA Maxi":{name:"ICA Maxi",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q1663776",shop:"supermarket"},addTags:{brand:"ICA Maxi","brand:wikidata":"Q1663776","brand:wikipedia":"sv:Ica",name:"ICA Maxi",shop:"supermarket"},countryCodes:["no","se"],terms:["maxi"],matchScore:2,suggestion:true},"shop/supermarket/IDEA":{name:"IDEA",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q23461622",shop:"supermarket"},addTags:{brand:"IDEA","brand:wikidata":"Q23461622","brand:wikipedia":"en:Idea (supermarkets)",name:"IDEA",shop:"supermarket"},countryCodes:["rs"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/IGA":{name:"IGA",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FIGA%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3146662",shop:"supermarket"},addTags:{brand:"IGA","brand:wikidata":"Q3146662","brand:wikipedia":"en:IGA (supermarkets)",name:"IGA",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Iceland":{name:"Iceland",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/998234843736457216/AqtyY1Rc_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q721810",shop:"supermarket"},addTags:{brand:"Iceland","brand:wikidata":"Q721810","brand:wikipedia":"en:Iceland (supermarket)",name:"Iceland",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Ingles":{name:"Ingles",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FIngles%20Markets%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q6032595",shop:"supermarket"},addTags:{brand:"Ingles","brand:wikidata":"Q6032595","brand:wikipedia":"en:Ingles",name:"Ingles",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Intermarché":{name:"Intermarché",icon:"maki-grocery",imageURL:"https://graph.facebook.com/tousuniscontrelaviechere/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3153200",shop:"supermarket"},addTags:{brand:"Intermarché","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",name:"Intermarché",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Intermarché Super":{name:"Intermarché Super",icon:"maki-grocery",imageURL:"https://graph.facebook.com/tousuniscontrelaviechere/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3153200",shop:"supermarket"},addTags:{brand:"Intermarché Super","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",name:"Intermarché Super",shop:"supermarket"},countryCodes:["be","fr","pl","pt"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Interspar":{name:"Interspar",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q15820339",shop:"supermarket"},addTags:{brand:"Interspar","brand:wikidata":"Q15820339","brand:wikipedia":"de:Interspar (Österreich)",name:"Interspar",shop:"supermarket"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Irma":{name:"Irma",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q797150",shop:"supermarket"},addTags:{brand:"Irma","brand:wikidata":"Q797150","brand:wikipedia":"en:Irma (supermarket)",name:"Irma",shop:"supermarket"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Jan Linders":{name:"Jan Linders",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q2200982",shop:"supermarket"},addTags:{brand:"Jan Linders","brand:wikidata":"Q2200982","brand:wikipedia":"nl:Jan Linders Supermarkten",name:"Jan Linders",shop:"supermarket"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Jewel-Osco":{name:"Jewel-Osco",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FJewel%20Osco%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3178470",shop:"supermarket"},addTags:{brand:"Jewel-Osco","brand:wikidata":"Q3178470","brand:wikipedia":"en:Jewel (supermarket)",name:"Jewel-Osco",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Joker":{name:"Joker",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FJoker%20butikkjede%20norgesgruppen%20joker.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q716328",shop:"supermarket"},addTags:{brand:"Joker","brand:wikidata":"Q716328","brand:wikipedia":"en:Joker (store)",name:"Joker",shop:"supermarket"},countryCodes:["no"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Jumbo":{name:"Jumbo",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FJumbo%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2262314",shop:"supermarket"},addTags:{brand:"Jumbo","brand:wikidata":"Q2262314","brand:wikipedia":"en:Jumbo (supermarket)",name:"Jumbo",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/K+K":{name:"K+K",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FK%2BK%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1718009",shop:"supermarket"},addTags:{brand:"K+K","brand:wikidata":"Q1718009","brand:wikipedia":"de:K+K Klaas & Kock",name:"K+K",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Kaufland":{name:"Kaufland",icon:"maki-grocery",imageURL:"https://graph.facebook.com/132476996783723/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q685967",shop:"supermarket"},addTags:{brand:"Kaufland","brand:wikidata":"Q685967","brand:wikipedia":"en:Kaufland",name:"Kaufland",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/King Soopers":{name:"King Soopers",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/829113723746922497/a4882k9S_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q6412065",shop:"supermarket"},addTags:{brand:"King Soopers","brand:wikidata":"Q6412065","brand:wikipedia":"en:King Soopers",name:"King Soopers",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Kiwi":{name:"Kiwi",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q1613639",shop:"supermarket"},addTags:{brand:"Kiwi","brand:wikidata":"Q1613639","brand:wikipedia":"en:Kiwi (store)",name:"Kiwi",shop:"supermarket"},countryCodes:["dk","no"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Kroger":{name:"Kroger",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Kroger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q153417",shop:"supermarket"},addTags:{brand:"Kroger","brand:wikidata":"Q153417","brand:wikipedia":"en:Kroger",name:"Kroger",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Kvickly":{name:"Kvickly",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q7061148",shop:"supermarket"},addTags:{brand:"Kvickly","brand:wikidata":"Q7061148","brand:wikipedia":"en:Kvickly",name:"Kvickly",shop:"supermarket"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/La Anónima":{name:"La Anónima",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSupermercados%20La%20anonima%20logo.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q6135985",shop:"supermarket"},addTags:{brand:"La Anónima","brand:wikidata":"Q6135985","brand:wikipedia":"es:La Anónima",name:"La Anónima",shop:"supermarket"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/La Plaza de DIA":{name:"La Plaza de DIA",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q58904673",shop:"supermarket"},addTags:{brand:"La Plaza de DIA","brand:wikidata":"Q58904673",name:"La Plaza de DIA","operator:wikidata":"Q925132","operator:wikipedia":"es:Supermercados DIA",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/La Vie Claire":{name:"La Vie Claire",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q3213589",shop:"supermarket"},addTags:{brand:"La Vie Claire","brand:wikidata":"Q3213589","brand:wikipedia":"en:La Vie Claire (company)",name:"La Vie Claire",shop:"supermarket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Landi":{name:"Landi",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLandi.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1803010",shop:"supermarket"},addTags:{brand:"Landi","brand:wikidata":"Q1803010","brand:wikipedia":"en:Landi (Unternehmen)",name:"Landi",shop:"supermarket"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Leader Price":{name:"Leader Price",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLeader%20Price%202010%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2181426",shop:"supermarket"},addTags:{brand:"Leader Price","brand:wikidata":"Q2181426","brand:wikipedia":"en:Leader Price",name:"Leader Price",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Lewiatan":{name:"Lewiatan",icon:"maki-grocery",imageURL:"https://graph.facebook.com/psh.lewiatan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11755396",shop:"supermarket"},addTags:{brand:"Lewiatan","brand:wikidata":"Q11755396","brand:wikipedia":"pl:Lewiatan (sieć handlowa)",name:"Lewiatan",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Lider":{name:"Lider",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FL%C3%ADder%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q6711261",shop:"supermarket"},addTags:{brand:"Lider","brand:wikidata":"Q6711261","brand:wikipedia":"es:Líder (supermercado)",name:"Lider",shop:"supermarket"},countryCodes:["cl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Lider Express":{name:"Lider Express",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FL%C3%ADder%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q6711261",shop:"supermarket"},addTags:{brand:"Lider","brand:wikidata":"Q6711261","brand:wikipedia":"es:Líder (supermercado)",name:"Lider Express",shop:"supermarket"},countryCodes:["cl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Lidl":{name:"Lidl",icon:"maki-grocery",imageURL:"https://graph.facebook.com/lidl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q151954",shop:"supermarket"},addTags:{brand:"Lidl","brand:wikidata":"Q151954","brand:wikipedia":"en:Lidl",name:"Lidl",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Lincolnshire Co-op":{name:"Lincolnshire Co-op",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q6551231",shop:"supermarket"},addTags:{brand:"Lincolnshire Co-op","brand:wikidata":"Q6551231","brand:wikipedia":"en:Lincolnshire Co-operative",name:"Lincolnshire Co-op",shop:"supermarket"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Linella":{name:"Linella",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q61085990",shop:"supermarket"},addTags:{brand:"Linella","brand:wikidata":"Q61085990","brand:wikipedia":"ro:Linella",name:"Linella",shop:"supermarket"},countryCodes:["md"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Loblaws":{name:"Loblaws",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q3257626",shop:"supermarket"},addTags:{brand:"Loblaws","brand:wikidata":"Q3257626","brand:wikipedia":"en:Loblaws",name:"Loblaws",shop:"supermarket"},countryCodes:["ca"],terms:["loblaws great food"],matchScore:2,suggestion:true},"shop/supermarket/Lotte Mart":{name:"Lotte Mart",icon:"maki-grocery",imageURL:"https://graph.facebook.com/lottemart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q326715",shop:"supermarket"},addTags:{brand:"Lotte Mart","brand:wikidata":"Q326715","brand:wikipedia":"en:Lotte Mart",name:"Lotte Mart",shop:"supermarket"},countryCodes:["id","kr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Lowe's Market":{name:"Lowe's Market",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q6693107",shop:"supermarket"},addTags:{brand:"Lowe's Market","brand:wikidata":"Q6693107","brand:wikipedia":"en:Lowe's Market",name:"Lowe's Market",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Lowes Foods":{name:"Lowes Foods",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q6693991",shop:"supermarket"},addTags:{brand:"Lowes Foods","brand:wikidata":"Q6693991","brand:wikipedia":"en:Lowes Foods",name:"Lowes Foods",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Lucky":{name:"Lucky",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q6698032",shop:"supermarket"},addTags:{brand:"Lucky","brand:wikidata":"Q6698032","brand:wikipedia":"en:Lucky Stores",name:"Lucky","operator:wikidata":"Q7428009","operator:wikipedia":"en:Save Mart Supermarkets",shop:"supermarket"},countryCodes:["us"],terms:["luckys"],matchScore:2,suggestion:true},"shop/supermarket/Lupa":{name:"Lupa",icon:"maki-grocery",imageURL:"https://graph.facebook.com/LupaSupermercados/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q58044048",shop:"supermarket"},addTags:{brand:"Lupa","brand:wikidata":"Q58044048",name:"Lupa",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/MD":{name:"MD",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q3841263",shop:"supermarket"},addTags:{brand:"MD","brand:wikidata":"Q3841263","brand:wikipedia":"en:MD Discount",name:"MD",shop:"supermarket"},countryCodes:["it"],terms:["md discount"],matchScore:2,suggestion:true},"shop/supermarket/MPREIS":{name:"MPREIS",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMPreis%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q873491",shop:"supermarket"},addTags:{brand:"MPREIS","brand:wikidata":"Q873491","brand:wikipedia":"de:MPreis",name:"MPREIS",shop:"supermarket"},countryCodes:["at","it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Marc's":{name:"Marc's",icon:"maki-grocery",imageURL:"https://graph.facebook.com/MarcsStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17080259",shop:"supermarket"},addTags:{brand:"Marc's","brand:wikidata":"Q17080259","brand:wikipedia":"en:Marc's",name:"Marc's",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Markant":{name:"Markant",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q57523365",shop:"supermarket"},addTags:{brand:"Markant","brand:wikidata":"Q57523365",name:"Markant",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Market Basket":{name:"Market Basket",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMarket%20Basket%20Logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2079198",shop:"supermarket"},addTags:{brand:"Market Basket","brand:wikidata":"Q2079198","brand:wikipedia":"en:Market Basket (New England)",name:"Market Basket",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Marktkauf":{name:"Marktkauf",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMarktkauf.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1533254",shop:"supermarket"},addTags:{brand:"Marktkauf","brand:wikidata":"Q1533254","brand:wikipedia":"de:Marktkauf Holding",name:"Marktkauf",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Martin's Super Markets":{name:"Martin's Super Markets",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q6774803",shop:"supermarket"},addTags:{brand:"Martin's Super Markets","brand:wikidata":"Q6774803","brand:wikipedia":"en:Martin's Super Markets",name:"Martin's Super Markets",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Match":{name:"Match",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q513977",shop:"supermarket"},addTags:{brand:"Match","brand:wikidata":"Q513977","brand:wikipedia":"en:Match (supermarket)",name:"Match",shop:"supermarket"},countryCodes:["be","fr","hu","lu"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Maxi Dia":{name:"Maxi Dia",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/800711981225410560/cuzfS3Pk_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q925132",shop:"supermarket"},addTags:{brand:"Maxi Dia","brand:wikidata":"Q925132","brand:wikipedia":"es:Supermercados DIA",name:"Maxi Dia",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Maxima X":{name:"Maxima X",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMaxima%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1881222",shop:"supermarket"},addTags:{brand:"Maxima X","brand:wikidata":"Q1881222","brand:wikipedia":"en:Maxima Group",name:"Maxima X",shop:"supermarket"},countryCodes:["bg","ee","lt","lv","pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Maxima XX":{name:"Maxima XX",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMaxima%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1881222",shop:"supermarket"},addTags:{brand:"Maxima XX","brand:wikidata":"Q1881222","brand:wikipedia":"en:Maxima Group",name:"Maxima XX",shop:"supermarket"},countryCodes:["bg","ee","lt","lv","pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Maxima XXX":{name:"Maxima XXX",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMaxima%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1881222",shop:"supermarket"},addTags:{brand:"Maxima XXX","brand:wikidata":"Q1881222","brand:wikipedia":"en:Maxima Group",name:"Maxima XXX",shop:"supermarket"},countryCodes:["bg","ee","lt","lv","pl"],terms:["maxima"],matchScore:2,suggestion:true},"shop/supermarket/Maxi (Canada)":{name:"Maxi (Canada)",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q3302441",shop:"supermarket"},addTags:{brand:"Maxi","brand:wikidata":"Q3302441","brand:wikipedia":"en:Maxi (Canadian supermarket)",name:"Maxi",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Maxi (Serbia)":{name:"Maxi (Serbia)",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q6795490",shop:"supermarket"},addTags:{brand:"Maxi","brand:wikidata":"Q6795490","brand:wikipedia":"en:Maxi (Serbian supermarket)",name:"Maxi",shop:"supermarket"},countryCodes:["rs"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Mega Image":{name:"Mega Image",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q6808085",shop:"supermarket"},addTags:{brand:"Mega Image","brand:wikidata":"Q6808085","brand:wikipedia":"en:Mega Image",name:"Mega Image",shop:"supermarket"},countryCodes:["ro"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Mego":{name:"Mego",icon:"maki-grocery",imageURL:"https://graph.facebook.com/mego.lv/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16363314",shop:"supermarket"},addTags:{brand:"Mego","brand:wikidata":"Q16363314","brand:wikipedia":"lv:Mego",name:"Mego",shop:"supermarket"},countryCodes:["lv"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Meijer":{name:"Meijer",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMeijer%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1917753",shop:"supermarket"},addTags:{brand:"Meijer","brand:wikidata":"Q1917753","brand:wikipedia":"en:Meijer",name:"Meijer",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Meny":{name:"Meny",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMeny%20butikkjede%20norgesgruppen%20logo.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q10581720",shop:"supermarket"},addTags:{brand:"Meny","brand:wikidata":"Q10581720","brand:wikipedia":"en:Meny",name:"Meny",shop:"supermarket"},countryCodes:["dk","no"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Mercadona":{name:"Mercadona",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q377705",shop:"supermarket"},addTags:{brand:"Mercadona","brand:wikidata":"Q377705","brand:wikipedia":"en:Mercadona",name:"Mercadona",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Merkur":{name:"Merkur",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Merkur.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1921857",shop:"supermarket"},addTags:{brand:"Merkur","brand:wikidata":"Q1921857","brand:wikipedia":"de:Merkur (Österreich)",name:"Merkur",shop:"supermarket"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Metro (Canada)":{name:"Metro (Canada)",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMetro%20Inc.%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1145669",shop:"supermarket"},addTags:{brand:"Metro","brand:wikidata":"Q1145669","brand:wikipedia":"en:Metro Inc.",name:"Metro",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Metro (Peru)":{name:"Metro (Peru)",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Metro%20Cencosud.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q16640217",shop:"supermarket"},addTags:{brand:"Metro","brand:wikidata":"Q16640217","brand:wikipedia":"en:Tiendas Metro",name:"Metro",operator:"Cencosud","operator:wikidata":"Q1053372","operator:wikipedia":"en:Cencosud",shop:"supermarket"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Migros":{name:"Migros",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMigros.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q680727",shop:"supermarket"},addTags:{brand:"Migros","brand:wikidata":"Q680727","brand:wikipedia":"en:Migros",name:"Migros",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Mila":{name:"Mila",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q48844636",shop:"supermarket"},addTags:{brand:"Mila","brand:wikidata":"Q48844636","brand:wikipedia":"pl:Mila (sieć sklepów)",name:"Mila",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Minipreço":{name:"Minipreço",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q3042224",shop:"supermarket"},addTags:{brand:"Minipreço","brand:wikidata":"Q3042224","brand:wikipedia":"en:Minipreço",name:"Minipreço",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Mix Markt":{name:"Mix Markt",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMIX%20Markt%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q327854",shop:"supermarket"},addTags:{brand:"Mix Markt","brand:wikidata":"Q327854","brand:wikipedia":"de:Mix Markt",name:"Mix Markt",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Monoprix":{name:"Monoprix",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMonoprix%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3321241",shop:"supermarket"},addTags:{brand:"Monoprix","brand:wikidata":"Q3321241","brand:wikipedia":"en:Monoprix",name:"Monoprix",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/More":{name:"More",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q6910891",shop:"supermarket"},addTags:{brand:"More","brand:wikidata":"Q6910891","brand:wikipedia":"en:More (store)",name:"More",shop:"supermarket"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Morrisons":{name:"Morrisons",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/1069883324204769280/cbPhjnwc_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q922344",shop:"supermarket"},addTags:{brand:"Morrisons","brand:wikidata":"Q922344","brand:wikipedia":"en:Morrisons",name:"Morrisons",shop:"supermarket"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Nah & Frisch":{name:"Nah & Frisch",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q1963643",shop:"supermarket"},addTags:{brand:"Nah & Frisch","brand:wikidata":"Q1963643","brand:wikipedia":"de:Nah & Frisch",name:"Nah & Frisch",shop:"supermarket"},countryCodes:["at","de"],terms:["nah und frisch"],matchScore:2,suggestion:true},"shop/supermarket/Nahkauf":{name:"Nahkauf",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q57515238",shop:"supermarket"},addTags:{brand:"Nahkauf","brand:wikidata":"Q57515238",name:"Nahkauf",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Naturalia":{name:"Naturalia",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FNaturalia%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3337081",shop:"supermarket"},addTags:{brand:"Naturalia","brand:wikidata":"Q3337081","brand:wikipedia":"fr:Naturalia",name:"Naturalia",shop:"supermarket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Netto":{name:"Netto",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FGda%C5%84sk%20ulica%20D%C4%85browszczak%C3%B3w%2020%20(logo%20Netto).JPG&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q552652",shop:"supermarket"},addTags:{brand:"Netto","brand:wikidata":"Q552652","brand:wikipedia":"en:Netto (store)",name:"Netto",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Netto Marken-Discount":{name:"Netto Marken-Discount",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FNetto%20Marken-Discount%202018%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q879858",shop:"supermarket"},addTags:{brand:"Netto Marken-Discount","brand:wikidata":"Q879858","brand:wikipedia":"en:Netto Marken-Discount",name:"Netto Marken-Discount",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/New World":{name:"New World",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q7012488",shop:"supermarket"},addTags:{brand:"New World","brand:wikidata":"Q7012488","brand:wikipedia":"en:New World (supermarket)",name:"New World",shop:"supermarket"},countryCodes:["nz"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/No Frills":{name:"No Frills",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q3342407",shop:"supermarket"},addTags:{brand:"No Frills","brand:wikidata":"Q3342407","brand:wikipedia":"en:No Frills (grocery store)",name:"No Frills",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Norfa XL":{name:"Norfa XL",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FNorfa%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1998983",shop:"supermarket"},addTags:{brand:"Norfa XL","brand:wikidata":"Q1998983","brand:wikipedia":"lt:Norfa",name:"Norfa XL",shop:"supermarket"},countryCodes:["lt"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Norma":{name:"Norma",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FNorma%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q450180",shop:"supermarket"},addTags:{brand:"Norma","brand:wikidata":"Q450180","brand:wikipedia":"de:Norma (Handelskette)",name:"Norma",shop:"supermarket"},countryCodes:["at","cz","de","fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Okay":{name:"Okay",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q2159701",shop:"supermarket"},addTags:{brand:"Okay","brand:wikidata":"Q2159701","brand:wikipedia":"fr:OKay",name:"Okay",shop:"supermarket"},countryCodes:["be"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Olímpica":{name:"Olímpica",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q24749847",shop:"supermarket"},addTags:{brand:"Olímpica","brand:wikidata":"Q24749847","brand:wikipedia":"es:Grupo Empresarial Olímpica",name:"Olímpica",shop:"supermarket"},countryCodes:["co"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/PLUS":{name:"PLUS",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q1978981",shop:"supermarket"},addTags:{brand:"PLUS","brand:wikidata":"Q1978981","brand:wikipedia":"nl:PLUS (Nederlandse supermarkt)",name:"PLUS",shop:"supermarket"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/POLOmarket":{name:"POLOmarket",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q11821937",shop:"supermarket"},addTags:{brand:"POLOmarket","brand:wikidata":"Q11821937","brand:wikipedia":"pl:Polomarket",name:"POLOmarket",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Palí":{name:"Palí",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20de%20Walmart%20Mexico%20y%20Centroamerica.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1064887",shop:"supermarket"},addTags:{brand:"Palí","brand:wikidata":"Q1064887","brand:wikipedia":"es:Walmart de México y Centroamérica",name:"Palí",shop:"supermarket"},countryCodes:["cr","ni"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Pam":{name:"Pam",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q3777398",shop:"supermarket"},addTags:{brand:"Pam","brand:wikidata":"Q3777398","brand:wikipedia":"it:Gruppo PAM",name:"Pam",shop:"supermarket"},countryCodes:["ch","it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Pavilions":{name:"Pavilions",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q7155886",shop:"supermarket"},addTags:{brand:"Pavilions","brand:wikidata":"Q7155886","brand:wikipedia":"en:Pavilions (supermarket)",name:"Pavilions",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Penny":{name:"Penny",icon:"maki-grocery",imageURL:"https://graph.facebook.com/PennyDeutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q284688",shop:"supermarket"},addTags:{brand:"Penny","brand:wikidata":"Q284688","brand:wikipedia":"en:Penny (supermarket)",name:"Penny",shop:"supermarket"},countryCodes:["at","cz","de","hu","it","ro"],terms:["penny market","penny markt"],matchScore:2,suggestion:true},"shop/supermarket/Pick 'n Save":{name:"Pick 'n Save",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q7371288",shop:"supermarket"},addTags:{brand:"Pick 'n Save","brand:wikidata":"Q7371288","brand:wikipedia":"en:Roundy's",name:"Pick 'n Save",shop:"supermarket"},countryCodes:["us","za"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Pick n Pay":{name:"Pick n Pay",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q7190735",shop:"supermarket"},addTags:{brand:"Pick n Pay","brand:wikidata":"Q7190735","brand:wikipedia":"en:Pick n Pay Stores",name:"Pick n Pay",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Piggly Wiggly":{name:"Piggly Wiggly",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q3388303",shop:"supermarket"},addTags:{brand:"Piggly Wiggly","brand:wikidata":"Q3388303","brand:wikipedia":"en:Piggly Wiggly",name:"Piggly Wiggly",shop:"supermarket"},countryCodes:["gb","us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Pingo Doce":{name:"Pingo Doce",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FPingo%20Doce%20Advertising%2011%20September%202015.JPG&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1575057",shop:"supermarket"},addTags:{brand:"Pingo Doce","brand:wikidata":"Q1575057","brand:wikipedia":"en:Pingo Doce",name:"Pingo Doce",shop:"supermarket"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Piotr i Paweł":{name:"Piotr i Paweł",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q2096356",shop:"supermarket"},addTags:{brand:"Piotr i Paweł","brand:wikidata":"Q2096356","brand:wikipedia":"pl:Piotr i Paweł",name:"Piotr i Paweł",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Plaza Vea":{name:"Plaza Vea",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q7203672",shop:"supermarket"},addTags:{brand:"Plaza Vea","brand:wikidata":"Q7203672","brand:wikipedia":"en:Plaza Vea",name:"Plaza Vea",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Plodine":{name:"Plodine",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q58040098",shop:"supermarket"},addTags:{brand:"Plodine","brand:wikidata":"Q58040098",name:"Plodine",shop:"supermarket"},countryCodes:["hr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Poiesz":{name:"Poiesz",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q2521700",shop:"supermarket"},addTags:{brand:"Poiesz","brand:wikidata":"Q2521700","brand:wikipedia":"nl:Poiesz Supermarkten",name:"Poiesz",shop:"supermarket"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Price Chopper (Kansas City)":{name:"Price Chopper (Kansas City)",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q7242572",shop:"supermarket"},addTags:{brand:"Price Chopper","brand:wikidata":"Q7242572","brand:wikipedia":"en:Price Chopper (supermarket)",name:"Price Chopper",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Price Chopper (New York)":{name:"Price Chopper (New York)",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q7242574",shop:"supermarket"},addTags:{brand:"Price Chopper","brand:wikidata":"Q7242574","brand:wikipedia":"en:Price Chopper Supermarkets",name:"Price Chopper",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Prix":{name:"Prix",icon:"maki-grocery",imageURL:"https://graph.facebook.com/prixqualitaitaliana/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61994819",shop:"supermarket"},addTags:{brand:"Prix","brand:wikidata":"Q61994819",name:"Prix",shop:"supermarket"},countryCodes:["it"],terms:["prix quality"],matchScore:2,suggestion:true},"shop/supermarket/Profi":{name:"Profi",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q956664",shop:"supermarket"},addTags:{brand:"Profi","brand:wikidata":"Q956664","brand:wikipedia":"en:Profi",name:"Profi",shop:"supermarket"},countryCodes:["be","hu","ro"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Provigo":{name:"Provigo",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q3408306",shop:"supermarket"},addTags:{brand:"Provigo","brand:wikidata":"Q3408306","brand:wikipedia":"en:Provigo",name:"Provigo",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Proxy Delhaize":{name:"Proxy Delhaize",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q14903417",shop:"supermarket"},addTags:{brand:"Proxy Delhaize","brand:wikidata":"Q14903417","brand:wikipedia":"en:Delhaize Group",name:"Proxy Delhaize",shop:"supermarket"},countryCodes:["be","lu"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Publix":{name:"Publix",icon:"maki-grocery",imageURL:"https://graph.facebook.com/publix/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q672170",shop:"supermarket"},addTags:{brand:"Publix","brand:wikidata":"Q672170","brand:wikipedia":"en:Publix",name:"Publix",shop:"supermarket"},countryCodes:["br","us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Punto Simply":{name:"Punto Simply",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q3484790",shop:"supermarket"},addTags:{brand:"Punto Simply","brand:wikidata":"Q3484790","brand:wikipedia":"it:Simply Market",name:"Punto Simply",shop:"supermarket"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Puregold":{name:"Puregold",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q7261170",shop:"supermarket"},addTags:{brand:"Puregold","brand:wikidata":"Q7261170","brand:wikipedia":"en:Puregold",name:"Puregold",shop:"supermarket"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Pão de Açúcar":{name:"Pão de Açúcar",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q3411543",shop:"supermarket"},addTags:{brand:"Pão de Açúcar","brand:wikidata":"Q3411543","brand:wikipedia":"pt:Pão de Açúcar (supermercado brasileiro)",name:"Pão de Açúcar",shop:"supermarket"},countryCodes:["br","pt"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/QFC":{name:"QFC",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q7265425",shop:"supermarket"},addTags:{brand:"QFC","brand:wikidata":"Q7265425","brand:wikipedia":"en:QFC",name:"QFC",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Raley's":{name:"Raley's",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q7286970",shop:"supermarket"},addTags:{brand:"Raley's","brand:wikidata":"Q7286970","brand:wikipedia":"en:Raley's Supermarkets",name:"Raley's",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Ralphs":{name:"Ralphs",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/829113387929972737/Ve6U9Jd9_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3929820",shop:"supermarket"},addTags:{brand:"Ralphs","brand:wikidata":"Q3929820","brand:wikipedia":"en:Ralphs",name:"Ralphs",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Real":{name:"Real",icon:"maki-grocery",imageURL:"https://graph.facebook.com/real/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q698473",shop:"supermarket"},addTags:{brand:"Real","brand:wikidata":"Q698473","brand:wikipedia":"en:Real (hypermarket)",name:"Real",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Real Canadian Superstore":{name:"Real Canadian Superstore",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q7300856",shop:"supermarket"},addTags:{brand:"Real Canadian Superstore","brand:wikidata":"Q7300856","brand:wikipedia":"en:Real Canadian Superstore",name:"Real Canadian Superstore",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Redner's":{name:"Redner's",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q7306166",shop:"supermarket"},addTags:{brand:"Redner's","brand:wikidata":"Q7306166","brand:wikipedia":"en:Redner's Markets",name:"Redner's",shop:"supermarket"},countryCodes:["us"],terms:["redners warehouse market"],matchScore:2,suggestion:true},"shop/supermarket/Reliance Fresh":{name:"Reliance Fresh",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q7311014",shop:"supermarket"},addTags:{brand:"Reliance Fresh","brand:wikidata":"Q7311014","brand:wikipedia":"en:Reliance Fresh",name:"Reliance Fresh",shop:"supermarket"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Rema 1000":{name:"Rema 1000",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FREMA1000.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q28459",shop:"supermarket"},addTags:{brand:"Rema 1000","brand:wikidata":"Q28459","brand:wikipedia":"en:REMA 1000",name:"Rema 1000",shop:"supermarket"},countryCodes:["dk","no"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Rewe":{name:"Rewe",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Rewe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16968817",shop:"supermarket"},addTags:{brand:"Rewe","brand:wikidata":"Q16968817","brand:wikipedia":"en:REWE",name:"Rewe",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Rewe City":{name:"Rewe City",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Rewe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16968817",shop:"supermarket"},addTags:{brand:"Rewe City","brand:wikidata":"Q16968817","brand:wikipedia":"en:REWE",name:"Rewe City",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Rimi":{name:"Rimi",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FRimi%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q7334456",shop:"supermarket"},addTags:{brand:"Rimi","brand:wikidata":"Q7334456","brand:wikipedia":"en:Rimi (Norway)",name:"Rimi",shop:"supermarket"},countryCodes:["ee","lt","lv"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/S-Market":{name:"S-Market",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q11891613",shop:"supermarket"},addTags:{brand:"S-Market","brand:wikidata":"Q11891613","brand:wikipedia":"fi:S-market",name:"S-Market",shop:"supermarket"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Safeway":{name:"Safeway",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/813782141259497472/inQrmCRf_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1508234",shop:"supermarket"},addTags:{brand:"Safeway","brand:wikidata":"Q1508234","brand:wikipedia":"en:Safeway Inc.",name:"Safeway",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Sainsbury's":{name:"Sainsbury's",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/1101419025421225984/xsPc8EfW_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q152096",shop:"supermarket"},addTags:{brand:"Sainsbury's","brand:wikidata":"Q152096","brand:wikipedia":"en:Sainsbury's",name:"Sainsbury's",shop:"supermarket"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Santa Isabel":{name:"Santa Isabel",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q7419620",shop:"supermarket"},addTags:{brand:"Santa Isabel","brand:wikidata":"Q7419620","brand:wikipedia":"es:Santa Isabel (supermercado)",name:"Santa Isabel",shop:"supermarket"},countryCodes:["cl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Save-A-Lot":{name:"Save-A-Lot",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q7427972",shop:"supermarket"},addTags:{brand:"Save-A-Lot","brand:wikidata":"Q7427972","brand:wikipedia":"en:Save-A-Lot",name:"Save-A-Lot",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Save-On-Foods":{name:"Save-On-Foods",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSave%20On%20Foods%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q7427974",shop:"supermarket"},addTags:{brand:"Save-On-Foods","brand:wikidata":"Q7427974","brand:wikipedia":"en:Save-On-Foods",name:"Save-On-Foods",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Schnucks":{name:"Schnucks",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q7431920",shop:"supermarket"},addTags:{brand:"Schnucks","brand:wikidata":"Q7431920","brand:wikipedia":"en:Schnucks",name:"Schnucks",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Shaw's":{name:"Shaw's",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q578387",shop:"supermarket"},addTags:{brand:"Shaw's","brand:wikidata":"Q578387","brand:wikipedia":"en:Shaw's and Star Market",name:"Shaw's",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ShopRite (USA)":{name:"ShopRite (USA)",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/466948326969987072/F66s5ItP_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q7501097",shop:"supermarket"},addTags:{brand:"ShopRite","brand:wikidata":"Q7501097","brand:wikipedia":"en:ShopRite (United States)",name:"ShopRite",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Shoprite (Africa)":{name:"Shoprite (Africa)",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q1857639",shop:"supermarket"},addTags:{brand:"Shoprite","brand:wikidata":"Q1857639","brand:wikipedia":"en:Shoprite (South Africa)",name:"Shoprite",shop:"supermarket"},countryCodes:["ao","bw","cd","gh","ls","mg","mu","mw","mz","na","ng","sz","ug","za","zm"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Shoprite (Isle of Man)":{name:"Shoprite (Isle of Man)",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q7501242",shop:"supermarket"},addTags:{brand:"Shoprite","brand:wikidata":"Q7501242","brand:wikipedia":"en:Shoprite (Isle of Man)",name:"Shoprite",shop:"supermarket"},countryCodes:["im"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Sigma":{name:"Sigma",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q3977979",shop:"supermarket"},addTags:{brand:"Sigma","brand:wikidata":"Q3977979","brand:wikipedia":"it:Supermercati Sigma",name:"Sigma",shop:"supermarket"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Simply Market":{name:"Simply Market",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q3484790",shop:"supermarket"},addTags:{brand:"Simply Market","brand:wikidata":"Q3484790","brand:wikipedia":"en:Simply Market",name:"Simply Market",shop:"supermarket"},terms:["simply"],matchScore:2,suggestion:true},"shop/supermarket/Sky":{name:"Sky",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCoop%20Deutschland%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1129779",shop:"supermarket"},addTags:{brand:"Sky","brand:wikidata":"Q1129779","brand:wikipedia":"de:Coop eG",name:"Sky",shop:"supermarket"},countryCodes:["de","lv","nl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Smith's":{name:"Smith's",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSmithsFoodDrug-logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q7544856",shop:"supermarket"},addTags:{brand:"Smith's","brand:wikidata":"Q7544856","brand:wikipedia":"en:Smith's Food and Drug",name:"Smith's",shop:"supermarket"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Sobeys":{name:"Sobeys",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q1143340",shop:"supermarket"},addTags:{brand:"Sobeys","brand:wikidata":"Q1143340","brand:wikipedia":"en:Sobeys",name:"Sobeys",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Soriana":{name:"Soriana",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogoSoriana.PNG&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q735562",shop:"supermarket"},addTags:{brand:"Soriana","brand:wikidata":"Q735562","brand:wikipedia":"en:Soriana",name:"Soriana",shop:"supermarket"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Spar":{name:"Spar",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SPARintheUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q610492",shop:"supermarket"},addTags:{brand:"Spar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Spar",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Społem":{name:"Społem",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SpolemSpoldzielczoscSpozywcow/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11826043",shop:"supermarket"},addTags:{brand:"Społem","brand:wikidata":"Q11826043","brand:wikipedia":"pl:Powszechna Spółdzielnia Spożywców „Społem”",name:"Społem",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Sprouts Farmers Market":{name:"Sprouts Farmers Market",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SproutsFarmersMarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7581369",shop:"supermarket"},addTags:{brand:"Sprouts Farmers Market","brand:wikidata":"Q7581369","brand:wikipedia":"en:Sprouts Farmers Market",name:"Sprouts Farmers Market",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Stater Bros.":{name:"Stater Bros.",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q7604016",shop:"supermarket"},addTags:{brand:"Stater Bros.","brand:wikidata":"Q7604016","brand:wikipedia":"en:Stater Bros.",name:"Stater Bros.",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Stokrotka":{name:"Stokrotka",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q9345945",shop:"supermarket"},addTags:{brand:"Stokrotka","brand:wikidata":"Q9345945","brand:wikipedia":"pl:Stokrotka (sieć handlowa)",name:"Stokrotka",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Stop & Shop":{name:"Stop & Shop",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/913035570263314432/JnBRkmWC_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3658429",shop:"supermarket"},addTags:{brand:"Stop & Shop","brand:wikidata":"Q3658429","brand:wikipedia":"en:Stop & Shop",name:"Stop & Shop",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Suma":{name:"Suma",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q58012362",shop:"supermarket"},addTags:{brand:"Suma","brand:wikidata":"Q58012362",name:"Suma",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Super C":{name:"Super C",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q3504127",shop:"supermarket"},addTags:{brand:"Super C","brand:wikidata":"Q3504127","brand:wikipedia":"en:Super C (supermarket)",name:"Super C",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Super H Mart":{name:"Super H Mart",icon:"maki-grocery",imageURL:"https://graph.facebook.com/hmartofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5636306",shop:"supermarket"},addTags:{brand:"H Mart","brand:wikidata":"Q5636306","brand:wikipedia":"en:H Mart",cuisine:"asian",name:"Super H Mart",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Super One Foods":{name:"Super One Foods",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q17108733",shop:"supermarket"},addTags:{brand:"Super One Foods","brand:wikidata":"Q17108733","brand:wikipedia":"en:Super One Foods",name:"Super One Foods",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Super U":{name:"Super U",icon:"maki-grocery",imageURL:"https://graph.facebook.com/ULesCommercants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2529029",shop:"supermarket"},addTags:{brand:"Super U","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Super U",shop:"supermarket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/SuperBrugsen":{name:"SuperBrugsen",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSB%20logo%20rektangel%20RGB%20standard.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q12337746",shop:"supermarket"},addTags:{brand:"SuperBrugsen","brand:wikidata":"Q12337746","brand:wikipedia":"en:SuperBrugsen",name:"SuperBrugsen",shop:"supermarket"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/SuperValu":{name:"SuperValu",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q7642081",shop:"supermarket"},addTags:{brand:"SuperValu","brand:wikidata":"Q7642081","brand:wikipedia":"en:SuperValu (Ireland)",name:"SuperValu",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Superama":{name:"Superama",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q6135762",shop:"supermarket"},addTags:{brand:"Superama","brand:wikidata":"Q6135762","brand:wikipedia":"es:Superama",name:"Superama",shop:"supermarket"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Supercor":{name:"Supercor",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q6135841",shop:"supermarket"},addTags:{brand:"Supercor","brand:wikidata":"Q6135841","brand:wikipedia":"es:Supercor",name:"Supercor",shop:"supermarket"},countryCodes:["es","pt"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Supersol":{name:"Supersol",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SupersolSupermercados/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62073427",shop:"supermarket"},addTags:{brand:"Supersol","brand:wikidata":"Q62073427",name:"Supersol",shop:"supermarket"},countryCodes:["ar","es","ma","uy"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Superspar":{name:"Superspar",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SPARintheUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q610492",shop:"supermarket"},addTags:{brand:"Superspar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Superspar",shop:"supermarket"},countryCodes:["es","za"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Tegut":{name:"Tegut",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FTegut%E2%80%A6.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1547993",shop:"supermarket"},addTags:{brand:"Tegut","brand:wikidata":"Q1547993","brand:wikipedia":"en:Tegut",name:"Tegut",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Tesco":{name:"Tesco",icon:"maki-grocery",imageURL:"https://graph.facebook.com/tesco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q487494",shop:"supermarket"},addTags:{brand:"Tesco","brand:wikidata":"Q487494","brand:wikipedia":"en:Tesco",name:"Tesco",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Tesco Express":{name:"Tesco Express",icon:"maki-grocery",imageURL:"https://graph.facebook.com/tesco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q487494",shop:"supermarket"},addTags:{brand:"Tesco Express","brand:wikidata":"Q487494","brand:wikipedia":"en:Tesco",name:"Tesco Express",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Tesco Extra":{name:"Tesco Extra",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q25172225",shop:"supermarket"},addTags:{brand:"Tesco Extra","brand:wikidata":"Q25172225","brand:wikipedia":"en:Tesco Extra",name:"Tesco Extra",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Tesco Metro":{name:"Tesco Metro",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q57551648",shop:"supermarket"},addTags:{brand:"Tesco Metro","brand:wikidata":"Q57551648",name:"Tesco Metro",shop:"supermarket"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/The Co-operative Food (UK)":{name:"The Co-operative Food (UK)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/coopukfood/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3277439",shop:"supermarket"},addTags:{brand:"The Co-operative Food","brand:wikidata":"Q3277439","brand:wikipedia":"en:Co-op Food",name:"The Co-operative Food",shop:"supermarket"},countryCodes:["gb"],terms:["coop","coop food","cooperative food","the cooperative"],matchScore:2,suggestion:true},"shop/supermarket/The Fresh Market":{name:"The Fresh Market",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/791251254337036288/0VUcaeIf_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7735265",shop:"supermarket"},addTags:{brand:"The Fresh Market","brand:wikidata":"Q7735265","brand:wikipedia":"en:The Fresh Market",name:"The Fresh Market",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Todis":{name:"Todis",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Todis%20lungo%20verde.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3992174",shop:"supermarket"},addTags:{brand:"Todis","brand:wikidata":"Q3992174","brand:wikipedia":"it:Todis",name:"Todis",shop:"supermarket"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Tommy":{name:"Tommy",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q12643718",shop:"supermarket"},addTags:{brand:"Tommy","brand:wikidata":"Q12643718","brand:wikipedia":"hr:Tommy",name:"Tommy",shop:"supermarket"},countryCodes:["hr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Top Market":{name:"Top Market",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q9360044",shop:"supermarket"},addTags:{brand:"Top Market","brand:wikidata":"Q9360044","brand:wikipedia":"pl:Top Market",name:"Top Market",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Tops":{name:"Tops",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q7825137",shop:"supermarket"},addTags:{brand:"Tops","brand:wikidata":"Q7825137","brand:wikipedia":"en:Tops Friendly Markets",name:"Tops",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Tottus":{name:"Tottus",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogotipo%20Tottus.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q7828510",shop:"supermarket"},addTags:{brand:"Tottus","brand:wikidata":"Q7828510","brand:wikipedia":"en:Tottus",name:"Tottus",shop:"supermarket"},countryCodes:["cl","pe"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Trader Joe's":{name:"Trader Joe's",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FTrader%20Joes%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q688825",shop:"supermarket"},addTags:{brand:"Trader Joe's","brand:wikidata":"Q688825","brand:wikipedia":"en:Trader Joe's",name:"Trader Joe's",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Treff 3000":{name:"Treff 3000",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Edeka.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q701755",shop:"supermarket"},addTags:{brand:"Treff 3000","brand:wikidata":"Q701755","brand:wikipedia":"de:Edeka",name:"Treff 3000",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Tuodì":{name:"Tuodì",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Dico.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3706995",shop:"supermarket"},addTags:{brand:"Tuodì","brand:wikidata":"Q3706995","brand:wikipedia":"it:Tuodì",name:"Tuodì",shop:"supermarket"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/U Express":{name:"U Express",icon:"maki-grocery",imageURL:"https://graph.facebook.com/ULesCommercants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2529029",shop:"supermarket"},addTags:{brand:"U Express","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"U Express",shop:"supermarket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Unimarc":{name:"Unimarc",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FUnimarc%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q6156244",shop:"supermarket"},addTags:{brand:"Unimarc","brand:wikidata":"Q6156244","brand:wikipedia":"es:Unimarc",name:"Unimarc",shop:"supermarket"},countryCodes:["cl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Unimarkt":{name:"Unimarkt",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FUnimarktLogoNeu.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1169599",shop:"supermarket"},addTags:{brand:"Unimarkt","brand:wikidata":"Q1169599","brand:wikipedia":"de:Unimarkt",name:"Unimarkt",shop:"supermarket"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Vea":{name:"Vea",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q5858167",shop:"supermarket"},addTags:{brand:"Vea","brand:wikidata":"Q5858167","brand:wikipedia":"es:Vea (supermercado)",name:"Vea",shop:"supermarket"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/VinMart":{name:"VinMart",icon:"maki-grocery",imageURL:"https://graph.facebook.com/sieuthivinmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60245505",shop:"supermarket"},addTags:{brand:"VinMart","brand:wikidata":"Q60245505","brand:wikipedia":"vi:VinMart",name:"VinMart",shop:"supermarket"},countryCodes:["vn"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Volg":{name:"Volg",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FVolg.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2530746",shop:"supermarket"},addTags:{brand:"Volg","brand:wikidata":"Q2530746","brand:wikipedia":"de:Volg",name:"Volg",shop:"supermarket"},countryCodes:["ch","li"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Vomar":{name:"Vomar",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q3202837",shop:"supermarket"},addTags:{brand:"Vomar","brand:wikidata":"Q3202837","brand:wikipedia":"nl:Vomar",name:"Vomar",shop:"supermarket"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Vons":{name:"Vons",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FVons%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q7941609",shop:"supermarket"},addTags:{brand:"Vons","brand:wikidata":"Q7941609","brand:wikipedia":"en:Vons",name:"Vons",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Waitrose":{name:"Waitrose",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/1036753874512687104/1ef8sudl_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q771734",shop:"supermarket"},addTags:{brand:"Waitrose","brand:wikidata":"Q771734","brand:wikipedia":"en:Waitrose & Partners",name:"Waitrose",shop:"supermarket"},countryCodes:["gb","je"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Walmart Neighborhood Market":{name:"Walmart Neighborhood Market",icon:"maki-grocery",imageURL:"https://graph.facebook.com/walmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q483551",shop:"supermarket"},addTags:{brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",name:"Walmart Neighborhood Market",operator:"Walmart","operator:wikidata":"Q483551","operator:wikipedia":"en:Walmart",shop:"supermarket"},countryCodes:["ca","mx","us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Walmart Supercenter":{name:"Walmart Supercenter",icon:"maki-grocery",imageURL:"https://graph.facebook.com/walmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q483551",shop:"supermarket"},addTags:{brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",name:"Walmart Supercenter",operator:"Walmart","operator:wikidata":"Q483551","operator:wikipedia":"en:Walmart",shop:"supermarket"},terms:["walmart supercentre"],matchScore:2,suggestion:true},"shop/supermarket/Wasgau":{name:"Wasgau",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q2536857",shop:"supermarket"},addTags:{brand:"Wasgau","brand:wikidata":"Q2536857","brand:wikipedia":"de:Wasgau (Unternehmen)",name:"Wasgau",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Wegmans":{name:"Wegmans",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FWegmansLogo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11288478",shop:"supermarket"},addTags:{brand:"Wegmans","brand:wikidata":"Q11288478","brand:wikipedia":"en:Wegmans",name:"Wegmans",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Weis":{name:"Weis",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q7980370",shop:"supermarket"},addTags:{brand:"Weis","brand:wikidata":"Q7980370","brand:wikipedia":"en:Weis Markets",name:"Weis",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Whole Foods Market":{name:"Whole Foods Market",icon:"maki-grocery",imageURL:"https://graph.facebook.com/WholeFoods/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1809448",shop:"supermarket"},addTags:{brand:"Whole Foods Market","brand:wikidata":"Q1809448","brand:wikipedia":"en:Whole Foods Market",name:"Whole Foods Market",shop:"supermarket"},countryCodes:["ca","gb","us"],terms:["whole foods"],matchScore:2,suggestion:true},"shop/supermarket/Willys":{name:"Willys",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q10720214",shop:"supermarket"},addTags:{brand:"Willys","brand:wikidata":"Q10720214","brand:wikipedia":"sv:Willys",name:"Willys",shop:"supermarket"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/WinCo Foods":{name:"WinCo Foods",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q8023592",shop:"supermarket"},addTags:{brand:"WinCo Foods","brand:wikidata":"Q8023592","brand:wikipedia":"en:WinCo Foods",name:"WinCo Foods",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Winn Dixie":{name:"Winn Dixie",icon:"maki-grocery",imageURL:"https://graph.facebook.com/winndixie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1264366",shop:"supermarket"},addTags:{brand:"Winn Dixie","brand:wikidata":"Q1264366","brand:wikipedia":"en:Winn-Dixie",name:"Winn Dixie",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Woolworths":{name:"Woolworths",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q3249145",shop:"supermarket"},addTags:{brand:"Woolworths","brand:wikidata":"Q3249145","brand:wikipedia":"en:Woolworths Supermarkets",name:"Woolworths",shop:"supermarket"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Your Independent Grocer":{name:"Your Independent Grocer",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q8058833",shop:"supermarket"},addTags:{brand:"Your Independent Grocer","brand:wikidata":"Q8058833","brand:wikipedia":"en:Your Independent Grocer",name:"Your Independent Grocer",shop:"supermarket"},countryCodes:["ca"],terms:["independent"],matchScore:2,suggestion:true},"shop/supermarket/basic":{name:"basic",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBasic%20logo.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q809994",shop:"supermarket"},addTags:{brand:"basic","brand:wikidata":"Q809994","brand:wikipedia":"de:Basic AG",name:"basic",organic:"only",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/denn's Biomarkt":{name:"denn's Biomarkt",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FDenns%20Biomarkt%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q48883773",shop:"supermarket"},addTags:{brand:"denn's Biomarkt","brand:wikidata":"Q48883773","brand:wikipedia":"de:Dennree",name:"denn's Biomarkt",organic:"only",shop:"supermarket"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/fakta":{name:"fakta",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q3172238",shop:"supermarket"},addTags:{brand:"fakta","brand:wikidata":"Q3172238","brand:wikipedia":"en:Fakta",name:"fakta",shop:"supermarket"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Şok":{name:"Şok",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/831881850201194496/HxDzAV5x_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q19613992",shop:"supermarket"},addTags:{brand:"Şok","brand:wikidata":"Q19613992","brand:wikipedia":"tr:Şok (market)",name:"Şok",shop:"supermarket"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ΑΒ Βασιλόπουλος":{name:"ΑΒ Βασιλόπουλος",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q4721807",shop:"supermarket"},addTags:{brand:"ΑΒ Βασιλόπουλος","brand:en":"AB Vassilopoulos","brand:wikidata":"Q4721807","brand:wikipedia":"el:Άλφα Βήτα Βασιλόπουλος",name:"ΑΒ Βασιλόπουλος","name:en":"AB Vassilopoulos",shop:"supermarket"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Γαλαξίας":{name:"Γαλαξίας",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q5518063",shop:"supermarket"},addTags:{brand:"Γαλαξίας","brand:en":"Galaxias","brand:wikidata":"Q5518063","brand:wikipedia":"el:Γαλαξίας (σούπερ μάρκετ)",name:"Γαλαξίας","name:en":"Galaxias",shop:"supermarket"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Μασούτης":{name:"Μασούτης",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q6783887",shop:"supermarket"},addTags:{brand:"Μασούτης","brand:en":"Masoutis","brand:wikidata":"Q6783887","brand:wikipedia":"en:Masoutis",name:"Μασούτης","name:en":"Masoutis",shop:"supermarket"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Σκλαβενίτης":{name:"Σκλαβενίτης",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q7536037",shop:"supermarket"},addTags:{brand:"Σκλαβενίτης","brand:en":"Sklavenitis","brand:wikidata":"Q7536037","brand:wikipedia":"el:Σκλαβενίτης",name:"Σκλαβενίτης","name:en":"Sklavenitis",shop:"supermarket"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Абсолют (Russia)":{name:"Абсолют (Russia)",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q62389597",shop:"supermarket"},addTags:{brand:"Абсолют","brand:wikidata":"Q62389597",name:"Абсолют",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Абсолют (Ukraine)":{name:"Абсолют (Ukraine)",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q62389546",shop:"supermarket"},addTags:{brand:"Абсолют","brand:wikidata":"Q62389546",name:"Абсолют",shop:"supermarket"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Азбука Вкуса":{name:"Азбука Вкуса",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q4058209",shop:"supermarket"},addTags:{brand:"Азбука Вкуса","brand:en":"Azbuka Vkusa","brand:wikidata":"Q4058209","brand:wikipedia":"en:Azbuka Vkusa",name:"Азбука Вкуса","name:en":"Azbuka Vkusa",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Атак":{name:"Атак",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q2868738",shop:"supermarket"},addTags:{brand:"Атак","brand:en":"Atac","brand:wikidata":"Q2868738","brand:wikipedia":"ru:Atac",name:"Атак","name:en":"Atac",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Ашан":{name:"Ашан",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/877095334316576768/bhQDPUWZ_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q758603",shop:"supermarket"},addTags:{brand:"Ашан","brand:en":"Auchan","brand:wikidata":"Q758603","brand:wikipedia":"ru:Auchan",name:"Ашан","name:en":"Auchan",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Брусничка":{name:"Брусничка",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q21656645",shop:"supermarket"},addTags:{brand:"Брусничка","brand:en":"Brusnichka","brand:wikidata":"Q21656645","brand:wikipedia":"uk:Брусничка (торгова мережа)",name:"Брусничка","name:en":"Brusnichka",shop:"supermarket"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Виктория":{name:"Виктория",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q4111046",shop:"supermarket"},addTags:{brand:"Виктория","brand:wikidata":"Q4111046","brand:wikipedia":"ru:Виктория (сеть магазинов)",name:"Виктория",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Виталюр":{name:"Виталюр",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q55663075",shop:"supermarket"},addTags:{brand:"Виталюр","brand:wikidata":"Q55663075","brand:wikipedia":"ru:Виталюр",name:"Виталюр",shop:"supermarket"},countryCodes:["by"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Вопак":{name:"Вопак",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q30966107",shop:"supermarket"},addTags:{brand:"Вопак","brand:en":"Vopak","brand:wikidata":"Q30966107","brand:wikipedia":"uk:Вопак",name:"Вопак","name:en":"Vopak",shop:"supermarket"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Гроздь":{name:"Гроздь",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q21638412",shop:"supermarket"},addTags:{brand:"Гроздь","brand:wikidata":"Q21638412","brand:wikipedia":"ru:Гроздь (сеть магазинов)",name:"Гроздь",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Гулливер":{name:"Гулливер",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q58003470",shop:"supermarket"},addTags:{brand:"Гулливер","brand:wikidata":"Q58003470",name:"Гулливер",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Десяточка":{name:"Десяточка",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q61876182",shop:"supermarket"},addTags:{brand:"Десяточка","brand:en":"Desyatochka","brand:wikidata":"Q61876182",name:"Десяточка",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Дикси":{name:"Дикси",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FDixi.gif&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4161561",shop:"supermarket"},addTags:{brand:"Дикси","brand:en":"Dixy","brand:wikidata":"Q4161561","brand:wikipedia":"ru:Дикси (сеть магазинов)",name:"Дикси",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Евроопт":{name:"Евроопт",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Eurooptby/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2565040",shop:"supermarket"},addTags:{brand:"Евроопт","brand:en":"Euroopt","brand:ru":"Евроопт","brand:wikidata":"Q2565040","brand:wikipedia":"be:Еўрагандаль",name:"Евроопт","name:en":"Euroopt","name:ru":"Евроопт",shop:"supermarket"},terms:["евроопт market"],matchScore:2,suggestion:true},"shop/supermarket/Карусель":{name:"Карусель",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q4216307",shop:"supermarket"},addTags:{brand:"Карусель","brand:en":"Karusel","brand:wikidata":"Q4216307","brand:wikipedia":"ru:Карусель (сеть магазинов)",name:"Карусель","name:en":"Karusel",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Кировский":{name:"Кировский",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q63301903",shop:"supermarket"},addTags:{brand:"Кировский","brand:wikidata":"Q63301903",name:"Кировский",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Командор":{name:"Командор",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q61876152",shop:"supermarket"},addTags:{brand:"Командор","brand:en":"Komandor","brand:wikidata":"Q61876152",name:"Командор",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Красный Яр":{name:"Красный Яр",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q1786753",shop:"supermarket"},addTags:{brand:"Красный Яр","brand:en":"Krasnyj Jar","brand:wikidata":"Q1786753","brand:wikipedia":"ru:Красный Яр",name:"Красный Яр",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Лента":{name:"Лента",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q4258608",shop:"supermarket"},addTags:{brand:"Лента","brand:en":"Lenta","brand:wikidata":"Q4258608","brand:wikipedia":"ru:Лента (сеть магазинов)",name:"Лента","name:en":"Lenta",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Магнит":{name:"Магнит",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/1098477357390856192/wILY9KdL_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q940518",shop:"supermarket"},addTags:{brand:"Магнит","brand:en":"Magnit","brand:wikidata":"Q940518","brand:wikipedia":"ru:Магнит (сеть магазинов)",name:"Магнит","name:en":"Magnit",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Мария-Ра":{name:"Мария-Ра",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q4281631",shop:"supermarket"},addTags:{brand:"Мария-Ра","brand:en":"Maria-ra","brand:wikidata":"Q4281631","brand:wikipedia":"ru:Мария-Ра",name:"Мария-Ра","name:en":"Maria-ra",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Монетка":{name:"Монетка",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q4301704",shop:"supermarket"},addTags:{brand:"Монетка","brand:en":"Monetka","brand:wikidata":"Q4301704","brand:wikipedia":"ru:Монетка (сеть магазинов)",name:"Монетка","name:en":"Monetka",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Народная 7Я семьЯ":{name:"Народная 7Я семьЯ",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2F7Family.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4032436",shop:"supermarket"},addTags:{brand:"Народная 7Я семьЯ","brand:en":"People's 7th Family","brand:wikidata":"Q4032436","brand:wikipedia":"ru:Народная 7Я семья",name:"Народная 7Я семьЯ","name:en":"People's 7th Family",shop:"supermarket"},countryCodes:["ru"],terms:["семья"],matchScore:2,suggestion:true},"shop/supermarket/Перекрёсток":{name:"Перекрёсток",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q1684639",shop:"supermarket"},addTags:{brand:"Перекрёсток","brand:en":"Perekryostok","brand:wikidata":"Q1684639","brand:wikipedia":"en:Perekrestok (supermarket chain)",name:"Перекрёсток",shop:"supermarket"},countryCodes:["ru"],terms:["перекресток"],matchScore:2,suggestion:true},"shop/supermarket/Покупочка":{name:"Покупочка",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q58003270",shop:"supermarket"},addTags:{brand:"Покупочка","brand:wikidata":"Q58003270",name:"Покупочка",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Полушка":{name:"Полушка",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q4371080",shop:"supermarket"},addTags:{brand:"Полушка","brand:en":"Polushka","brand:wikidata":"Q4371080","brand:wikipedia":"ru:Полушка (сеть магазинов)",name:"Полушка","name:en":"Polushka",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Пятёрочка":{name:"Пятёрочка",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q1768969",shop:"supermarket"},addTags:{brand:"Пятёрочка","brand:en":"Pyaterochka","brand:wikidata":"Q1768969","brand:wikipedia":"ru:Пятёрочка",name:"Пятёрочка","name:en":"Pyaterochka",shop:"supermarket"},countryCodes:["ru"],terms:["пятерочка"],matchScore:2,suggestion:true},"shop/supermarket/Радеж":{name:"Радеж",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FRadezh%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4387165",shop:"supermarket"},addTags:{brand:"Радеж","brand:en":"Radezh","brand:wikidata":"Q4387165","brand:wikipedia":"ru:Радеж (торговая сеть)",name:"Радеж","name:en":"Radezh",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Рукавичка":{name:"Рукавичка",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q20092568",shop:"supermarket"},addTags:{brand:"Рукавичка","brand:en":"Rukavychka","brand:wikidata":"Q20092568","brand:wikipedia":"uk:Рукавичка (торгова мережа)",name:"Рукавичка","name:en":"Rukavychka",shop:"supermarket"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Светофор":{name:"Светофор",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q61875920",shop:"supermarket"},addTags:{brand:"Светофор","brand:en":"Svetofor","brand:wikidata":"Q61875920",name:"Светофор",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Семишагофф":{name:"Семишагофф",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q58003374",shop:"supermarket"},addTags:{brand:"Семишагофф","brand:wikidata":"Q58003374",name:"Семишагофф",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Сільпо":{name:"Сільпо",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSilpo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4419434",shop:"supermarket"},addTags:{brand:"Сільпо","brand:en":"Silpo","brand:wikidata":"Q4419434","brand:wikipedia":"en:Silpo",name:"Сільпо","name:en":"Silpo",shop:"supermarket"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Таврия В":{name:"Таврия В",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q61823146",shop:"supermarket"},addTags:{brand:"Таврия В","brand:wikidata":"Q61823146","brand:wikipedia":"uk:Таврія В",name:"Таврия В",shop:"supermarket"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Фора":{name:"Фора",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q12165977",shop:"supermarket"},addTags:{brand:"Фора","brand:en":"Fora","brand:wikidata":"Q12165977","brand:wikipedia":"uk:Фора (мережа магазинів)",name:"Фора","name:en":"Fora",shop:"supermarket"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Фуршет":{name:"Фуршет",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q4493564",shop:"supermarket"},addTags:{brand:"Фуршет","brand:en":"Furshet","brand:wikidata":"Q4493564","brand:wikipedia":"uk:Фуршет (мережа супермаркетів)",name:"Фуршет","name:en":"Furshet",shop:"supermarket"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Эдельвейс":{name:"Эдельвейс",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q57979368",shop:"supermarket"},addTags:{brand:"Эдельвейс","brand:en":"Edelveis","brand:wikidata":"Q57979368",name:"Эдельвейс","name:en":"Edelveis",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/いなげや":{name:"いなげや",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FInageya%20Co.%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q17193392",shop:"supermarket"},addTags:{brand:"いなげや","brand:en":"Inageya","brand:ja":"いなげや","brand:wikidata":"Q17193392","brand:wikipedia":"ja:いなげや",name:"いなげや","name:en":"Inageya","name:ja":"いなげや",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/まいばすけっと":{name:"まいばすけっと",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q11278154",shop:"supermarket"},addTags:{brand:"まいばすけっと","brand:en":"My Basket","brand:ja":"まいばすけっと","brand:wikidata":"Q11278154","brand:wikipedia":"ja:まいばすけっと",name:"まいばすけっと","name:en":"My Basket","name:ja":"まいばすけっと",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/イオン":{name:"イオン",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q11285951",shop:"supermarket"},addTags:{brand:"イオン","brand:en":"AEON","brand:ja":"イオン","brand:wikidata":"Q11285951","brand:wikipedia":"ja:イオン (店舗ブランド)",name:"イオン","name:en":"AEON","name:ja":"イオン",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/イトーヨーカドー":{name:"イトーヨーカドー",icon:"maki-grocery",imageURL:"https://graph.facebook.com/itoyokado/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3088746",shop:"supermarket"},addTags:{brand:"イトーヨーカドー","brand:en":"Ito-Yokado","brand:ja":"イトーヨーカドー","brand:wikidata":"Q3088746","brand:wikipedia":"en:Ito-Yokado",name:"イトーヨーカドー","name:en":"Ito-Yokado","name:ja":"イトーヨーカドー",shop:"supermarket"},countryCodes:["jp"],terms:["イトーヨーカ堂"],matchScore:2,suggestion:true},"shop/supermarket/カスミ":{name:"カスミ",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q11294160",shop:"supermarket"},addTags:{brand:"カスミ","brand:en":"Kasumi","brand:ja":"カスミ","brand:wikidata":"Q11294160","brand:wikipedia":"ja:カスミ",name:"カスミ","name:en":"Kasumi","name:ja":"カスミ",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/バロー":{name:"バロー",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q11328346",shop:"supermarket"},addTags:{brand:"バロー","brand:en":"Valor","brand:ja":"バロー","brand:wikidata":"Q11328346","brand:wikipedia":"ja:バロー (チェーンストア)",name:"バロー","name:en":"Valor","name:ja":"バロー",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/マックスバリュ":{name:"マックスバリュ",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMaxValu.JPG&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1960109",shop:"supermarket"},addTags:{brand:"マックスバリュ","brand:en":"Maxvalu Tokai","brand:ja":"マックスバリュ","brand:wikidata":"Q1960109","brand:wikipedia":"en:MaxValu",name:"マックスバリュ","name:en":"Maxvalu Tokai","name:ja":"マックスバリュ",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/マルエツ":{name:"マルエツ",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q11341197",shop:"supermarket"},addTags:{brand:"マルエツ","brand:en":"Maruetsu","brand:ja":"マルエツ","brand:wikidata":"Q11341197","brand:wikipedia":"ja:マルエツ",name:"マルエツ","name:en":"Maruetsu","name:ja":"マルエツ",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ヤオコー":{name:"ヤオコー",icon:"maki-grocery",imageURL:"https://graph.facebook.com/yaokococoro/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11344967",shop:"supermarket"},addTags:{brand:"ヤオコー","brand:en":"Yaoko","brand:ja":"ヤオコー","brand:wikidata":"Q11344967","brand:wikipedia":"ja:ヤオコー",name:"ヤオコー","name:en":"Yaoko","name:ja":"ヤオコー",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ヨークベニマル":{name:"ヨークベニマル",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FYork%20benimaru%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11346199",shop:"supermarket"},addTags:{brand:"ヨークベニマル","brand:en":"York Benimaru","brand:ja":"ヨークベニマル","brand:wikidata":"Q11346199","brand:wikipedia":"ja:ヨークベニマル",name:"ヨークベニマル","name:en":"York Benimaru","name:ja":"ヨークベニマル",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ヨークマート":{name:"ヨークマート",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q11346201",shop:"supermarket"},addTags:{brand:"ヨークマート","brand:en":"YorkMart","brand:ja":"ヨークマート","brand:wikidata":"Q11346201","brand:wikipedia":"ja:ヨークマート",name:"ヨークマート","name:en":"YorkMart","name:ja":"ヨークマート",operator:"株式会社セブン&アイ・ホールディングス","operator:en":"Seven & I Holdings Co., Ltd.","operator:wikidata":"Q639447","operator:wikipedia":"ja:セブン&アイ・ホールディングス",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ライフ":{name:"ライフ",icon:"maki-grocery",imageURL:"https://graph.facebook.com/lifecorp428/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11346476",shop:"supermarket"},addTags:{brand:"ライフ","brand:en":"Life","brand:ja":"ライフ","brand:wikidata":"Q11346476","brand:wikipedia":"ja:ライフコーポレーション",name:"ライフ","name:en":"Life","name:ja":"ライフ",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/全聯":{name:"全聯",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q7262792",shop:"supermarket"},addTags:{brand:"全聯","brand:en":"Pxmart","brand:wikidata":"Q7262792","brand:wikipedia":"en:PX Mart",name:"全聯","name:en":"Pxmart",shop:"supermarket"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/全聯福利中心":{name:"全聯福利中心",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q7262792",shop:"supermarket"},addTags:{brand:"全聯福利中心","brand:en":"Pxmart","brand:wikidata":"Q7262792","brand:wikipedia":"en:PX Mart",name:"全聯福利中心","name:en":"Pxmart",shop:"supermarket"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/家乐福":{name:"家乐福",icon:"maki-grocery",imageURL:"https://graph.facebook.com/carrefouritalia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q217599",shop:"supermarket"},addTags:{brand:"家乐福","brand:wikidata":"Q217599","brand:wikipedia":"wuu:家乐福",name:"家乐福",shop:"supermarket"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/惠康 Wellcome":{name:"惠康 Wellcome",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FWellcome%20Supermarket.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q706247",shop:"supermarket"},addTags:{brand:"惠康 Wellcome","brand:en":"Wellcome","brand:wikidata":"Q706247","brand:wikipedia":"zh:惠康",name:"惠康 Wellcome","name:en":"Wellcome",shop:"supermarket"},countryCodes:["hk"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/業務スーパー":{name:"業務スーパー",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q11590183",shop:"supermarket"},addTags:{brand:"業務スーパー","brand:en":"Gyōmu sūpā","brand:ja":"業務スーパー","brand:wikidata":"Q11590183","brand:wikipedia":"ja:神戸物産",name:"業務スーパー","name:en":"Gyōmu sūpā","name:ja":"業務スーパー",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/沃尔玛":{name:"沃尔玛",icon:"maki-grocery",imageURL:"https://graph.facebook.com/walmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q483551",shop:"supermarket"},addTags:{brand:"沃尔玛","brand:en":"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"wuu:沃尔玛",name:"沃尔玛","name:en":"Walmart",shop:"supermarket"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/美廉社":{name:"美廉社",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q15914017",shop:"supermarket"},addTags:{brand:"美廉社","brand:en":"Simple Mart","brand:wikidata":"Q15914017","brand:wikipedia":"zh:美廉社",name:"美廉社","name:en":"Simple Mart",shop:"supermarket"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/西友":{name:"西友",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSEIYU%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3108542",shop:"supermarket"},addTags:{brand:"西友","brand:en":"Seiyu Group","brand:wikidata":"Q3108542","brand:wikipedia":"en:Seiyu Group",name:"西友","name:en":"Seiyu Group",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/頂好":{name:"頂好",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FWellcome%20Supermarket.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q706247",shop:"supermarket"},addTags:{brand:"頂好","brand:en":"Wellcome","brand:wikidata":"Q706247","brand:wikipedia":"en:Wellcome",name:"頂好","name:en":"Wellcome",shop:"supermarket"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/頂好超市":{name:"頂好超市",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FWellcome%20Supermarket.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q706247",shop:"supermarket"},addTags:{brand:"頂好超市","brand:en":"Wellcome","brand:wikidata":"Q706247","brand:wikipedia":"en:Wellcome",name:"頂好超市","name:en":"Wellcome",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/롯데마트":{name:"롯데마트",icon:"maki-grocery",imageURL:"https://graph.facebook.com/lottemart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q326715",shop:"supermarket"},addTags:{brand:"롯데마트","brand:ko":"롯데마트","brand:wikidata":"Q326715","brand:wikipedia":"ko:롯데마트",name:"롯데마트","name:en":"Lotte Mart","name:ko":"롯데마트",shop:"supermarket"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/하나로마트":{name:"하나로마트",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q12590611",shop:"supermarket"},addTags:{brand:"하나로마트","brand:en":"Hanaro Mart","brand:ko":"하나로마트","brand:wikidata":"Q12590611","brand:wikipedia":"ko:농협유통",name:"하나로마트","name:ko":"하나로마트",shop:"supermarket"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"shop/tea/T2":{name:"T2",icon:"maki-teahouse",imageURL:"https://graph.facebook.com/T2Tea/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48802134",shop:"tea"},addTags:{brand:"T2","brand:wikidata":"Q48802134","brand:wikipedia":"en:T2 (Australian company)",name:"T2",shop:"tea"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/tea/TeeGschwendner":{name:"TeeGschwendner",icon:"maki-teahouse",imageURL:"https://graph.facebook.com/TeeGschwendner/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2399969",shop:"tea"},addTags:{brand:"TeeGschwendner","brand:wikidata":"Q2399969","brand:wikipedia":"de:TeeGschwendner",name:"TeeGschwendner",shop:"tea"},terms:[],matchScore:2,suggestion:true},"shop/ticket/Boutique Grandes Lignes":{name:"Boutique Grandes Lignes",icon:"fas-ticket-alt",imageURL:"https://graph.facebook.com/SNCFOFFICIEL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q13646",shop:"ticket"},addTags:{brand:"Boutique Grandes Lignes","brand:wikidata":"Q13646","brand:wikipedia":"fr:Société nationale des chemins de fer français",name:"Boutique Grandes Lignes",shop:"ticket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/ticket/DB Reisezentrum":{name:"DB Reisezentrum",icon:"fas-ticket-alt",imageURL:"https://graph.facebook.com/348950735250586/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15842100",shop:"ticket"},addTags:{brand:"DB Reisezentrum","brand:wikidata":"Q15842100","brand:wikipedia":"de:Reisezentrum",name:"DB Reisezentrum",shop:"ticket"},countryCodes:["de"],terms:["reisezentrum"],matchScore:2,suggestion:true},"shop/ticket/Guichet Transilien":{name:"Guichet Transilien",icon:"fas-ticket-alt",imageURL:"https://pbs.twimg.com/profile_images/776102546045865984/-NPGF3eG_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q389554",shop:"ticket"},addTags:{brand:"Guichet Transilien","brand:wikidata":"Q389554","brand:wikipedia":"fr:Transilien",name:"Guichet Transilien",shop:"ticket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/tobacco/Nemzeti Dohánybolt":{name:"Nemzeti Dohánybolt",icon:"maki-shop",geometry:["point","area"],tags:{"brand:wikidata":"Q20639040",shop:"tobacco"},addTags:{brand:"Nemzeti Dohánybolt","brand:wikidata":"Q20639040","brand:wikipedia":"en:Dohánybolt",name:"Nemzeti Dohánybolt",shop:"tobacco"},countryCodes:["hu"],terms:["dohánybolt"],matchScore:2,suggestion:true},"shop/toys/Build-A-Bear Workshop":{name:"Build-A-Bear Workshop",icon:"fas-space-shuttle",imageURL:"https://graph.facebook.com/Buildabear/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1002992",shop:"toys"},addTags:{brand:"Build-A-Bear Workshop","brand:wikidata":"Q1002992","brand:wikipedia":"en:Build-A-Bear Workshop",name:"Build-A-Bear Workshop",shop:"toys"},countryCodes:["ca","gb","us"],terms:["build a bear"],matchScore:2,suggestion:true},"shop/toys/Dráčik":{name:"Dráčik",icon:"fas-space-shuttle",geometry:["point","area"],tags:{"brand:wikidata":"Q57653669",shop:"toys"},addTags:{brand:"Dráčik","brand:wikidata":"Q57653669",name:"Dráčik",shop:"toys"},countryCodes:["cz","sk"],terms:[],matchScore:2,suggestion:true},"shop/toys/Intertoys":{name:"Intertoys",icon:"fas-space-shuttle",imageURL:"https://graph.facebook.com/Intertoys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1891407",shop:"toys"},addTags:{brand:"Intertoys","brand:wikidata":"Q1891407","brand:wikipedia":"nl:Intertoys",name:"Intertoys",shop:"toys"},countryCodes:["be","de","nl"],terms:[],matchScore:2,suggestion:true},"shop/toys/JouéClub":{name:"JouéClub",icon:"fas-space-shuttle",imageURL:"https://graph.facebook.com/JoueClubFr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3187152",shop:"toys"},addTags:{brand:"JouéClub","brand:wikidata":"Q3187152","brand:wikipedia":"fr:JouéClub",name:"JouéClub",shop:"toys"},countryCodes:["ad","fr","it","lb","ma","qa"],terms:[],matchScore:2,suggestion:true},"shop/toys/King Jouet":{name:"King Jouet",icon:"fas-space-shuttle",imageURL:"https://graph.facebook.com/KingJouet/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3197009",shop:"toys"},addTags:{brand:"King Jouet","brand:en":"King Toy","brand:wikidata":"Q3197009","brand:wikipedia":"fr:King Jouet",name:"King Jouet","name:en":"King Toy",shop:"toys"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/toys/La Grande Récré":{name:"La Grande Récré",icon:"fas-space-shuttle",imageURL:"https://graph.facebook.com/lagranderecre/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3209556",shop:"toys"},addTags:{brand:"La Grande Récré","brand:wikidata":"Q3209556","brand:wikipedia":"fr:La Grande Récré (magasin)",name:"La Grande Récré",shop:"toys"},countryCodes:["be","ci","es","fr","ma"],terms:[],matchScore:2,suggestion:true},"shop/toys/Lego":{name:"Lego",icon:"fas-space-shuttle",imageURL:"https://graph.facebook.com/lego/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1063455",shop:"toys"},addTags:{brand:"Lego","brand:wikidata":"Q1063455","brand:wikipedia":"en:The Lego Group",name:"Lego",shop:"toys"},terms:[],matchScore:2,suggestion:true},"shop/toys/Lekia":{name:"Lekia",icon:"fas-space-shuttle",imageURL:"https://graph.facebook.com/lekiasweden/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q56303274",shop:"toys"},addTags:{brand:"Lekia","brand:wikidata":"Q56303274","brand:wikipedia":"sv:Lekia",name:"Lekia",shop:"toys"},countryCodes:["no","se"],terms:[],matchScore:2,suggestion:true},"shop/toys/Maxi Toys":{name:"Maxi Toys",icon:"fas-space-shuttle",imageURL:"https://graph.facebook.com/MaxiToys.FR/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16663879",shop:"toys"},addTags:{brand:"Maxi Toys","brand:wikidata":"Q16663879","brand:wikipedia":"fr:Maxi Toys",name:"Maxi Toys",shop:"toys"},countryCodes:["be","de","fr","it"],terms:[],matchScore:2,suggestion:true},"shop/toys/The Entertainer":{name:"The Entertainer",icon:"fas-space-shuttle",imageURL:"https://graph.facebook.com/TheEntertainerToyShop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7732289",shop:"toys"},addTags:{brand:"The Entertainer","brand:wikidata":"Q7732289","brand:wikipedia":"en:The Entertainer (retailer)",name:"The Entertainer",shop:"toys"},countryCodes:["gb","je"],terms:[],matchScore:2,suggestion:true},"shop/toys/Toys R Us":{name:"Toys R Us",icon:"fas-space-shuttle",imageURL:"https://graph.facebook.com/toysrus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q696334",shop:"toys"},addTags:{brand:"Toys R Us","brand:wikidata":"Q696334","brand:wikipedia":"en:Toys \"R\" Us",name:"Toys R Us",shop:"toys"},terms:[],matchScore:2,suggestion:true},"shop/toys/Детский мир":{name:"Детский мир",icon:"fas-space-shuttle",imageURL:"https://graph.facebook.com/detmir/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16643324",shop:"toys"},addTags:{brand:"Детский мир","brand:en":"Detskiy Mir","brand:wikidata":"Q16643324","brand:wikipedia":"en:Detsky Mir",name:"Детский мир","name:en":"Detskiy Mir",shop:"toys"},countryCodes:["by","kg","kz","ru","ua","uz"],terms:[],matchScore:2,suggestion:true},"shop/toys/Кораблик":{name:"Кораблик",icon:"fas-space-shuttle",imageURL:"https://graph.facebook.com/korablik.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57653416",shop:"toys"},addTags:{brand:"Кораблик","brand:wikidata":"Q57653416",name:"Кораблик",shop:"toys"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/trade/Fastenal":{name:"Fastenal",icon:"maki-shop",imageURL:"https://graph.facebook.com/fastenalcompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3067119",shop:"trade"},addTags:{brand:"Fastenal","brand:wikidata":"Q3067119","brand:wikipedia":"en:Fastenal",name:"Fastenal",shop:"trade"},countryCodes:["ca","pa","pr","us"],terms:[],matchScore:2,suggestion:true},"shop/trade/Grainger":{name:"Grainger",icon:"maki-shop",imageURL:"https://graph.facebook.com/grainger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1627894",shop:"trade"},addTags:{brand:"Grainger","brand:wikidata":"Q1627894","brand:wikipedia":"en:W. W. Grainger",name:"Grainger",shop:"trade"},countryCodes:["ca","us"],terms:["granger","w. w. grainger"],matchScore:2,suggestion:true},"shop/travel_agency/Coral Travel":{name:"Coral Travel",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/coraltravelofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q58011479",shop:"travel_agency"},addTags:{brand:"Coral Travel","brand:wikidata":"Q58011479",name:"Coral Travel",shop:"travel_agency"},countryCodes:["pl","ru","ua"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/D-reizen":{name:"D-reizen",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/dreizenvakanties/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2445498",shop:"travel_agency"},addTags:{brand:"D-reizen","brand:wikidata":"Q2445498","brand:wikipedia":"nl:D-reizen",name:"D-reizen",shop:"travel_agency"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/DER Reisebüro":{name:"DER Reisebüro",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/DER/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q56729186",shop:"travel_agency"},addTags:{brand:"DER Reisebüro","brand:wikidata":"Q56729186","brand:wikipedia":"de:Deutsches Reisebüro",name:"DER Reisebüro",shop:"travel_agency"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/First Reisebüro":{name:"First Reisebüro",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/TUIDeutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q573103",shop:"travel_agency"},addTags:{brand:"First Reisebüro","brand:wikidata":"Q573103","brand:wikipedia":"en:TUI Group",name:"First Reisebüro",shop:"travel_agency"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Flight Centre":{name:"Flight Centre",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/flightcentreAU/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5459202",shop:"travel_agency"},addTags:{brand:"Flight Centre","brand:wikidata":"Q5459202","brand:wikipedia":"en:Flight Centre",name:"Flight Centre",shop:"travel_agency"},terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Halcón Viajes":{name:"Halcón Viajes",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/halconviajes.oficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57591939",shop:"travel_agency"},addTags:{brand:"Halcón Viajes","brand:wikidata":"Q57591939",name:"Halcón Viajes",shop:"travel_agency"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Havas Voyages":{name:"Havas Voyages",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/havas.voyages/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57628091",shop:"travel_agency"},addTags:{brand:"Havas Voyages","brand:wikidata":"Q57628091",name:"Havas Voyages",shop:"travel_agency"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Reiseland":{name:"Reiseland",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/reiseland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q40387610",shop:"travel_agency"},addTags:{brand:"Reiseland","brand:wikidata":"Q40387610","brand:wikipedia":"de:OTTO Reisen",name:"Reiseland",shop:"travel_agency"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Selectour":{name:"Selectour",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/SelectourVoyages/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3478073",shop:"travel_agency"},addTags:{brand:"Selectour","brand:wikidata":"Q3478073","brand:wikipedia":"fr:Selectour",name:"Selectour",shop:"travel_agency"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/TUI":{name:"TUI",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/TUIDeutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q573103",shop:"travel_agency"},addTags:{brand:"TUI","brand:wikidata":"Q573103","brand:wikipedia":"en:TUI Group",name:"TUI",shop:"travel_agency"},terms:["tui reisecenter"],matchScore:2,suggestion:true},"shop/travel_agency/The Co-operative Travel":{name:"The Co-operative Travel",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/cooperativetraveluk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7726526",shop:"travel_agency"},addTags:{brand:"The Co-operative Travel","brand:wikidata":"Q7726526","brand:wikipedia":"en:The Co-operative Travel",name:"The Co-operative Travel",shop:"travel_agency"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Thomas Cook":{name:"Thomas Cook",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/thomascook/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2141800",shop:"travel_agency"},addTags:{brand:"Thomas Cook","brand:wikidata":"Q2141800","brand:wikipedia":"en:Thomas Cook Group",name:"Thomas Cook",shop:"travel_agency"},terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Thomson":{name:"Thomson",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/worldofTUI/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7795876",shop:"travel_agency"},addTags:{brand:"Thomson","brand:wikidata":"Q7795876","brand:wikipedia":"en:TUI UK",name:"Thomson",shop:"travel_agency"},terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Поехали с нами":{name:"Поехали с нами",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/PoehaliSNamiua/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25439141",shop:"travel_agency"},addTags:{brand:"Поехали с нами","brand:wikidata":"Q25439141","brand:wikipedia":"uk:Поїхали з нами",name:"Поехали с нами",shop:"travel_agency"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/tyres/Big O Tires":{name:"Big O Tires",icon:"maki-shop",imageURL:"https://graph.facebook.com/BigOTires/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4906085",shop:"tyres"},addTags:{brand:"Big O Tires","brand:wikidata":"Q4906085","brand:wikipedia":"en:Big O Tires",name:"Big O Tires",shop:"tyres"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/tyres/Bridgestone":{name:"Bridgestone",icon:"maki-shop",imageURL:"https://graph.facebook.com/BridgestoneTires/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q179433",shop:"tyres"},addTags:{brand:"Bridgestone","brand:wikidata":"Q179433","brand:wikipedia":"en:Bridgestone",name:"Bridgestone",shop:"tyres"},terms:[],matchScore:2,suggestion:true},"shop/tyres/Discount Tire":{name:"Discount Tire",icon:"maki-shop",imageURL:"https://graph.facebook.com/DiscountTire/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5281735",shop:"tyres"},addTags:{brand:"Discount Tire","brand:wikidata":"Q5281735","brand:wikipedia":"en:Discount Tire",name:"Discount Tire",shop:"tyres"},terms:[],matchScore:2,suggestion:true},"shop/tyres/Express Oil Change & Tire Engineers":{name:"Express Oil Change & Tire Engineers",icon:"maki-shop",imageURL:"https://graph.facebook.com/expressoil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q39057654",shop:"tyres"},addTags:{brand:"Express Oil Change & Tire Engineers","brand:wikidata":"Q39057654","brand:wikipedia":"en:Express Oil Change & Tire Engineers",name:"Express Oil Change & Tire Engineers",shop:"tyres"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/tyres/Les Schwab Tire Center":{name:"Les Schwab Tire Center",icon:"maki-shop",imageURL:"https://graph.facebook.com/lesschwab/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6529977",shop:"tyres"},addTags:{brand:"Les Schwab Tire Center","brand:wikidata":"Q6529977","brand:wikipedia":"en:Les Schwab Tire Centers",name:"Les Schwab Tire Center",shop:"tyres"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/tyres/Michelin":{name:"Michelin",icon:"maki-shop",imageURL:"https://graph.facebook.com/MichelinSustainableMobility/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q151107",shop:"tyres"},addTags:{brand:"Michelin","brand:wikidata":"Q151107","brand:wikipedia":"en:Michelin",name:"Michelin",shop:"tyres"},terms:[],matchScore:2,suggestion:true},"shop/tyres/Tire Discounters":{name:"Tire Discounters",icon:"maki-shop",imageURL:"https://graph.facebook.com/TireDiscounters/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q29093639",shop:"tyres"},addTags:{brand:"Tire Discounters","brand:wikidata":"Q29093639","brand:wikipedia":"en:Tire Discounters",name:"Tire Discounters",shop:"tyres"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/tyres/Vianor":{name:"Vianor",icon:"maki-shop",imageURL:"https://graph.facebook.com/VianorNorthAmerica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10714920",shop:"tyres"},addTags:{brand:"Vianor","brand:wikidata":"Q10714920","brand:wikipedia":"sv:Vianor",name:"Vianor",shop:"tyres"},terms:[],matchScore:2,suggestion:true},"shop/variety_store/99 Cents Only Stores":{name:"99 Cents Only Stores",icon:"maki-shop",imageURL:"https://graph.facebook.com/99CentsOnly/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4646294",shop:"variety_store"},addTags:{brand:"99 Cents Only Stores","brand:wikidata":"Q4646294","brand:wikipedia":"en:99 Cents Only Stores",name:"99 Cents Only Stores",shop:"variety_store"},countryCodes:["us"],terms:["99 cents only"],matchScore:2,suggestion:true},"shop/variety_store/Action":{name:"Action",icon:"maki-shop",imageURL:"https://graph.facebook.com/actiondotcom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2634111",shop:"variety_store"},addTags:{brand:"Action","brand:wikidata":"Q2634111","brand:wikipedia":"nl:Action (winkel)",name:"Action",shop:"variety_store"},terms:[],matchScore:2,suggestion:true},"shop/variety_store/B&M Bargains":{name:"B&M Bargains",icon:"maki-shop",imageURL:"https://graph.facebook.com/bmstores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4836931",shop:"variety_store"},addTags:{brand:"B&M Bargains","brand:wikidata":"Q4836931","brand:wikipedia":"en:B & M",name:"B&M Bargains",shop:"variety_store"},terms:[],matchScore:2,suggestion:true},"shop/variety_store/Big Bazar":{name:"Big Bazar",icon:"maki-shop",imageURL:"https://graph.facebook.com/bigbazarbv/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15873104",shop:"variety_store"},addTags:{brand:"Big Bazar","brand:wikidata":"Q15873104","brand:wikipedia":"nl:Big Bazar",name:"Big Bazar",shop:"variety_store"},terms:[],matchScore:2,suggestion:true},"shop/variety_store/Dollar General":{name:"Dollar General",icon:"maki-shop",imageURL:"https://graph.facebook.com/dollargeneral/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q145168",shop:"variety_store"},addTags:{brand:"Dollar General","brand:wikidata":"Q145168","brand:wikipedia":"en:Dollar General",name:"Dollar General",shop:"variety_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Dollar Tree":{name:"Dollar Tree",icon:"maki-shop",imageURL:"https://graph.facebook.com/dollartree/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5289230",shop:"variety_store"},addTags:{brand:"Dollar Tree","brand:wikidata":"Q5289230","brand:wikipedia":"en:Dollar Tree",name:"Dollar Tree",shop:"variety_store"},terms:[],matchScore:2,suggestion:true},"shop/variety_store/Dollarama":{name:"Dollarama",icon:"maki-shop",imageURL:"https://graph.facebook.com/415845051799232/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3033947",shop:"variety_store"},addTags:{brand:"Dollarama","brand:wikidata":"Q3033947","brand:wikipedia":"en:Dollarama",name:"Dollarama",shop:"variety_store"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Family Dollar":{name:"Family Dollar",icon:"maki-shop",imageURL:"https://graph.facebook.com/familydollar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5433101",shop:"variety_store"},addTags:{brand:"Family Dollar","brand:wikidata":"Q5433101","brand:wikipedia":"en:Family Dollar",name:"Family Dollar",shop:"variety_store"},terms:[],matchScore:2,suggestion:true},"shop/variety_store/Five Below":{name:"Five Below",icon:"maki-shop",imageURL:"https://graph.facebook.com/FiveBelow/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5455836",shop:"variety_store"},addTags:{brand:"Five Below","brand:wikidata":"Q5455836","brand:wikipedia":"en:Five Below",name:"Five Below",shop:"variety_store"},terms:[],matchScore:2,suggestion:true},"shop/variety_store/Fix Price":{name:"Fix Price",icon:"maki-shop",imageURL:"https://graph.facebook.com/fixprice.russia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4038791",shop:"variety_store"},addTags:{brand:"Fix Price","brand:wikidata":"Q4038791","brand:wikipedia":"ru:Fix Price (сеть магазинов)",name:"Fix Price",shop:"variety_store"},terms:[],matchScore:2,suggestion:true},"shop/variety_store/GiFi":{name:"GiFi",icon:"maki-shop",imageURL:"https://graph.facebook.com/GiFi.Officiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3105439",shop:"variety_store"},addTags:{brand:"GiFi","brand:wikidata":"Q3105439","brand:wikipedia":"fr:Gifi",name:"GiFi",shop:"variety_store"},terms:[],matchScore:2,suggestion:true},"shop/variety_store/Home Bargains":{name:"Home Bargains",icon:"maki-shop",imageURL:"https://graph.facebook.com/homebargains/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5888229",shop:"variety_store"},addTags:{brand:"Home Bargains","brand:wikidata":"Q5888229","brand:wikipedia":"en:Home Bargains",name:"Home Bargains",shop:"variety_store"},terms:[],matchScore:2,suggestion:true},"shop/variety_store/Mäc-Geiz":{name:"Mäc-Geiz",icon:"maki-shop",imageURL:"https://graph.facebook.com/1652809328274529/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1957126",shop:"variety_store"},addTags:{brand:"Mäc-Geiz","brand:wikidata":"Q1957126","brand:wikipedia":"de:Mäc-Geiz",name:"Mäc-Geiz",shop:"variety_store"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/NOZ":{name:"NOZ",icon:"maki-shop",imageURL:"https://graph.facebook.com/UniversNOZ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3345688",shop:"variety_store"},addTags:{brand:"NOZ","brand:wikidata":"Q3345688","brand:wikipedia":"fr:Noz",name:"NOZ",shop:"variety_store"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Poundland":{name:"Poundland",icon:"maki-shop",imageURL:"https://graph.facebook.com/Poundland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1434528",shop:"variety_store"},addTags:{brand:"Poundland","brand:wikidata":"Q1434528","brand:wikipedia":"en:Poundland",name:"Poundland",shop:"variety_store"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Poundstretcher":{name:"Poundstretcher",icon:"maki-shop",imageURL:"https://graph.facebook.com/Poundstretcher/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7235675",shop:"variety_store"},addTags:{brand:"Poundstretcher","brand:wikidata":"Q7235675","brand:wikipedia":"en:Poundstretcher",name:"Poundstretcher",shop:"variety_store"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Poundworld":{name:"Poundworld",icon:"maki-shop",imageURL:"https://graph.facebook.com/PoundWorld/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16967516",shop:"variety_store"},addTags:{brand:"Poundworld","brand:wikidata":"Q16967516","brand:wikipedia":"en:Poundworld",name:"Poundworld",shop:"variety_store"},terms:[],matchScore:2,suggestion:true},"shop/variety_store/Roses":{name:"Roses",icon:"maki-shop",geometry:["point","area"],tags:{"brand:wikidata":"Q7368644",shop:"variety_store"},addTags:{brand:"Roses","brand:wikidata":"Q7368644","brand:wikipedia":"en:Roses (store)",name:"Roses",shop:"variety_store"},terms:[],matchScore:2,suggestion:true},"shop/variety_store/TEDi":{name:"TEDi",icon:"maki-shop",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FTEDi-Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1364603",shop:"variety_store"},addTags:{brand:"TEDi","brand:wikidata":"Q1364603","brand:wikipedia":"de:TEDi",name:"TEDi",shop:"variety_store"},countryCodes:["at","de","es","hr","si","sk"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Tokmanni":{name:"Tokmanni",icon:"maki-shop",imageURL:"https://graph.facebook.com/Tokmanni.fi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q13423470",shop:"variety_store"},addTags:{brand:"Tokmanni","brand:wikidata":"Q13423470","brand:wikipedia":"fi:Tokmanni",name:"Tokmanni",shop:"variety_store"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Wilko":{name:"Wilko",icon:"maki-shop",imageURL:"https://graph.facebook.com/LoveWilko/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8002536",shop:"variety_store"},addTags:{brand:"Wilko","brand:wikidata":"Q8002536","brand:wikipedia":"en:Wilko (retailer)",name:"Wilko",shop:"variety_store"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/キャンドゥ":{name:"キャンドゥ",icon:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/986887047209091072/PPjs7xOK_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11297367",shop:"variety_store"},addTags:{brand:"キャンドゥ","brand:en":"CAN DO","brand:ja":"キャンドゥ","brand:wikidata":"Q11297367","brand:wikipedia":"ja:キャンドゥ",name:"キャンドゥ","name:en":"CAN DO","name:ja":"キャンドゥ",shop:"variety_store"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/セリア":{name:"セリア",icon:"maki-shop",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSeria%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11314509",shop:"variety_store"},addTags:{brand:"セリア","brand:en":"Seria","brand:ja":"セリア","brand:wikidata":"Q11314509","brand:wikipedia":"ja:セリア (100円ショップ)",name:"セリア","name:en":"Seria","name:ja":"セリア",shop:"variety_store"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/ダイソー":{name:"ダイソー",icon:"maki-shop",imageURL:"https://graph.facebook.com/daisojapanusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q866991",shop:"variety_store"},addTags:{brand:"ダイソー","brand:en":"Daiso","brand:ja":"ダイソー","brand:wikidata":"Q866991","brand:wikipedia":"ja:大創産業",name:"ダイソー","name:en":"Daiso","name:ja":"ダイソー",shop:"variety_store"},countryCodes:["jp"],terms:["ザ・ダイソー"],matchScore:2,suggestion:true},"shop/variety_store/ダイレックス":{name:"ダイレックス",icon:"maki-shop",geometry:["point","area"],tags:{"brand:wikidata":"Q11317051",shop:"variety_store"},addTags:{brand:"ダイレックス","brand:en":"Direx","brand:ja":"ダイレックス","brand:wikidata":"Q11317051","brand:wikipedia":"ja:ダイレックス (ディスカウントストア)",name:"ダイレックス","name:en":"Direx","name:ja":"ダイレックス",shop:"variety_store"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/トライアル":{name:"トライアル",icon:"maki-shop",geometry:["point","area"],tags:{"brand:wikidata":"Q11321723",shop:"variety_store"},addTags:{brand:"トライアル","brand:en":"Trial","brand:ja":"トライアル","brand:wikidata":"Q11321723","brand:wikipedia":"ja:トライアルカンパニー",name:"トライアル","name:en":"Trial","name:ja":"トライアル",shop:"variety_store"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/ドン・キホーテ":{name:"ドン・キホーテ",icon:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/1098907826305421312/KCKaI33I_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q1185381",shop:"variety_store"},addTags:{brand:"ドン・キホーテ","brand:en":"Don Quijote","brand:ja":"ドン・キホーテ","brand:wikidata":"Q1185381","brand:wikipedia":"ja:ドン・キホーテ (企業)",name:"ドン・キホーテ","name:en":"Don Quijote","name:ja":"ドン・キホーテ",opening_hours:"24/7",shop:"variety_store",short_name:"ドンキ","short_name:en":"Donki","short_name:ja":"ドンキ"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/video_games/EB Games":{name:"EB Games",icon:"maki-gaming",imageURL:"https://graph.facebook.com/ebgamescanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4993686",shop:"video_games"},addTags:{brand:"EB Games","brand:wikidata":"Q4993686","brand:wikipedia":"en:EB Games",name:"EB Games",shop:"video_games"},terms:[],matchScore:2,suggestion:true},"shop/video_games/Game":{name:"Game",icon:"maki-gaming",imageURL:"https://pbs.twimg.com/profile_images/925661697230163968/GTdV1FP7_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5519813",shop:"video_games"},addTags:{brand:"Game","brand:wikidata":"Q5519813","brand:wikipedia":"en:Game (retailer)",name:"Game",shop:"video_games"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/video_games/GameStop":{name:"GameStop",icon:"maki-gaming",imageURL:"https://graph.facebook.com/GameStop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q202210",shop:"video_games"},addTags:{brand:"GameStop","brand:wikidata":"Q202210","brand:wikipedia":"en:GameStop",name:"GameStop",shop:"video_games"},terms:[],matchScore:2,suggestion:true},"shop/video_games/Micromania":{name:"Micromania",icon:"maki-gaming",imageURL:"https://graph.facebook.com/MicromaniaFr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3312221",shop:"video_games"},addTags:{brand:"Micromania","brand:wikidata":"Q3312221","brand:wikipedia":"en:Micromania (video game retailer)",name:"Micromania",shop:"video_games"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/video/Blockbuster":{name:"Blockbuster",icon:"temaki-movie_rental",imageURL:"https://graph.facebook.com/blockbuster/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q884711",shop:"video"},addTags:{brand:"Blockbuster","brand:wikidata":"Q884711","brand:wikipedia":"en:Blockbuster LLC",name:"Blockbuster",shop:"video"},terms:[],matchScore:2,suggestion:true},"shop/video/Family Video":{name:"Family Video",icon:"temaki-movie_rental",imageURL:"https://graph.facebook.com/FamilyVideo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5433297",shop:"video"},addTags:{brand:"Family Video","brand:wikidata":"Q5433297","brand:wikipedia":"en:Family Video",name:"Family Video",shop:"video"},terms:[],matchScore:2,suggestion:true},"shop/video/TSUTAYA":{name:"TSUTAYA",icon:"temaki-movie_rental",imageURL:"https://pbs.twimg.com/profile_images/1016247734720851968/R9agm3pA_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5193457",shop:"video"},addTags:{brand:"TSUTAYA","brand:wikidata":"Q5193457","brand:wikipedia":"ja:カルチュア・コンビニエンス・クラブ",name:"TSUTAYA",shop:"video"},terms:[],matchScore:2,suggestion:true},"shop/video/ゲオ":{name:"ゲオ",icon:"temaki-movie_rental",imageURL:"https://graph.facebook.com/geomediashop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5533938",shop:"video"},addTags:{brand:"GEO","brand:ja":"GEO","brand:wikidata":"Q5533938","brand:wikipedia":"ja:ゲオ",name:"ゲオ","name:en":"GEO","name:ja":"ゲオ",shop:"video"},countryCodes:["jp"],terms:["geo"],matchScore:2,suggestion:true},"shop/watches/Fossil":{name:"Fossil",icon:"maki-watch",imageURL:"https://graph.facebook.com/Fossil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q356212",shop:"watches"},addTags:{brand:"Fossil","brand:wikidata":"Q356212","brand:wikipedia":"en:Fossil Group",name:"Fossil",shop:"watches"},terms:[],matchScore:2,suggestion:true},"shop/watches/Swatch":{name:"Swatch",icon:"maki-watch",imageURL:"https://graph.facebook.com/SwatchUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q573422",shop:"watches"},addTags:{brand:"Swatch","brand:wikidata":"Q573422","brand:wikipedia":"en:Swatch",name:"Swatch",shop:"watches"},terms:[],matchScore:2,suggestion:true},"shop/wholesale/BJ's Wholesale Club":{name:"BJ's Wholesale Club",icon:"maki-warehouse",imageURL:"https://graph.facebook.com/bjswholesaleclub/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4835754",shop:"wholesale"},addTags:{brand:"BJ's Wholesale Club","brand:wikidata":"Q4835754","brand:wikipedia":"en:BJ's Wholesale Club",name:"BJ's Wholesale Club",operator:"BJ's Wholesale Club",shop:"wholesale"},terms:[],matchScore:2,suggestion:true},"shop/wholesale/Costco":{name:"Costco",icon:"maki-warehouse",imageURL:"https://graph.facebook.com/Costco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q715583",shop:"wholesale"},addTags:{brand:"Costco","brand:wikidata":"Q715583","brand:wikipedia":"en:Costco",name:"Costco",operator:"Costco",shop:"wholesale"},terms:["costco wholesale"],matchScore:2,suggestion:true},"shop/wholesale/Makro":{name:"Makro",icon:"maki-warehouse",imageURL:"https://graph.facebook.com/makrohipermayorista/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q704606",shop:"wholesale"},addTags:{brand:"Makro","brand:wikidata":"Q704606","brand:wikipedia":"en:Makro",name:"Makro",shop:"wholesale"},terms:[],matchScore:2,suggestion:true},"shop/wholesale/Metro":{name:"Metro",icon:"maki-warehouse",imageURL:"https://graph.facebook.com/metro.deutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q13610282",shop:"wholesale"},addTags:{brand:"Metro","brand:wikidata":"Q13610282","brand:wikipedia":"en:Metro Cash and Carry",name:"Metro",shop:"wholesale"},terms:[],matchScore:2,suggestion:true},"shop/wholesale/Sam's Club":{name:"Sam's Club",icon:"maki-warehouse",imageURL:"https://graph.facebook.com/samsclub/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1972120",shop:"wholesale"},addTags:{brand:"Sam's Club","brand:wikidata":"Q1972120","brand:wikipedia":"en:Sam's Club",name:"Sam's Club",operator:"Walmart","operator:wikidata":"Q483551","operator:wikipedia":"en:Walmart",shop:"wholesale"},terms:[],matchScore:2,suggestion:true},"shop/wholesale/コストコ":{name:"コストコ",icon:"maki-warehouse",imageURL:"https://graph.facebook.com/Costco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q715583",shop:"wholesale"},addTags:{brand:"コストコ","brand:en":"Costco","brand:ja":"コストコ","brand:wikidata":"Q715583","brand:wikipedia":"ja:コストコ",name:"コストコ","name:en":"Costco","name:ja":"コストコ",operator:"コストコホールセールジャパン株式会社","operator:en":"Costco Wholesale Japan Co., Ltd.",shop:"wholesale"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/B&B Hôtel":{name:"B&B Hôtel",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/bbhotels.france/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q794939",tourism:"hotel"},addTags:{brand:"B&B Hôtel","brand:wikidata":"Q794939","brand:wikipedia":"en:B&B Hotels",name:"B&B Hôtel",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Best Western":{name:"Best Western",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/BestWestern/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q830334",tourism:"hotel"},addTags:{brand:"Best Western","brand:wikidata":"Q830334","brand:wikipedia":"en:Best Western",name:"Best Western",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Best Western Plus":{name:"Best Western Plus",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/BestWestern/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q830334",tourism:"hotel"},addTags:{brand:"Best Western","brand:wikidata":"Q830334","brand:wikipedia":"en:Best Western",name:"Best Western Plus",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Campanile":{name:"Campanile",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/campanile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2412064",tourism:"hotel"},addTags:{brand:"Campanile","brand:wikidata":"Q2412064","brand:wikipedia":"fr:Campanile (chaîne d'hôtels)",name:"Campanile",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Candlewood Suites":{name:"Candlewood Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/CandlewoodSuites/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5032010",tourism:"hotel"},addTags:{brand:"Candlewood Suites","brand:wikidata":"Q5032010","brand:wikipedia":"en:Candlewood Suites",name:"Candlewood Suites",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Comfort Inn":{name:"Comfort Inn",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/choicehotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1075788",tourism:"hotel"},addTags:{brand:"Comfort Inn","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Comfort Inn",tourism:"hotel"},countryCodes:["ca","gb","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Comfort Inn & Suites":{name:"Comfort Inn & Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/choicehotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1075788",tourism:"hotel"},addTags:{brand:"Comfort Inn & Suites","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Comfort Inn & Suites",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Comfort Suites":{name:"Comfort Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/choicehotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1075788",tourism:"hotel"},addTags:{brand:"Comfort Suites","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Comfort Suites",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Country Inn & Suites":{name:"Country Inn & Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/countryinn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5177332",tourism:"hotel"},addTags:{brand:"Country Inn & Suites","brand:wikidata":"Q5177332","brand:wikipedia":"en:Country Inns & Suites",name:"Country Inn & Suites",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Courtyard by Marriott":{name:"Courtyard by Marriott",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/courtyard/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1053170",tourism:"hotel"},addTags:{brand:"Courtyard by Marriott","brand:wikidata":"Q1053170","brand:wikipedia":"en:Courtyard by Marriott",name:"Courtyard by Marriott",tourism:"hotel"},terms:["courtyard marriott"],matchScore:2,suggestion:true},"tourism/hotel/Crowne Plaza":{name:"Crowne Plaza",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/crowneplaza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2746220",tourism:"hotel"},addTags:{brand:"Crowne Plaza","brand:wikidata":"Q2746220","brand:wikipedia":"en:Crowne Plaza",name:"Crowne Plaza",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Days Inn":{name:"Days Inn",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/DaysInn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1047239",tourism:"hotel"},addTags:{brand:"Days Inn","brand:wikidata":"Q1047239","brand:wikipedia":"en:Days Inn",name:"Days Inn",operator:"Wyndham Hotels and Resorts","operator:wikidata":"Q8040120","operator:wikipedia":"en:Wyndham Hotels and Resorts",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Embassy Suites":{name:"Embassy Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/EmbassySuites/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5369524",tourism:"hotel"},addTags:{brand:"Embassy Suites","brand:wikidata":"Q5369524","brand:wikipedia":"en:Embassy Suites by Hilton",name:"Embassy Suites",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Extended Stay America":{name:"Extended Stay America",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/ExtendedStayAmerica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5421850",tourism:"hotel"},addTags:{brand:"Extended Stay America","brand:wikidata":"Q5421850","brand:wikipedia":"en:Extended Stay America",name:"Extended Stay America",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Fairfield Inn":{name:"Fairfield Inn",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/fairfieldbymarriott/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5430314",tourism:"hotel"},addTags:{brand:"Fairfield Inn","brand:wikidata":"Q5430314","brand:wikipedia":"en:Fairfield Inn by Marriott",name:"Fairfield Inn",tourism:"hotel"},terms:["fairfield inn & suites","fairfield inn and suites"],matchScore:2,suggestion:true},"tourism/hotel/Formule 1":{name:"Formule 1",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/HotelF1/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1630895",tourism:"hotel"},addTags:{brand:"Formule 1","brand:wikidata":"Q1630895","brand:wikipedia":"en:Hotel Formule 1",name:"Formule 1",tourism:"hotel"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Grand Hyatt":{name:"Grand Hyatt",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/hyatt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1425063",tourism:"hotel"},addTags:{brand:"Grand Hyatt","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Grand Hyatt",operator:"Hyatt",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Hampton":{name:"Hampton",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/hamptonbyhilton/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5646230",tourism:"hotel"},addTags:{alt_name:"Hampton Inn",brand:"Hampton","brand:wikidata":"Q5646230","brand:wikipedia":"en:Hampton by Hilton",name:"Hampton",tourism:"hotel"},terms:["hampton inn","hampton inn & suites","hampton inn and suites"],matchScore:2,suggestion:true},"tourism/hotel/Hilton":{name:"Hilton",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/hilton/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q598884",tourism:"hotel"},addTags:{brand:"Hilton","brand:wikidata":"Q598884","brand:wikipedia":"en:Hilton Hotels & Resorts",name:"Hilton",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Hilton Garden Inn":{name:"Hilton Garden Inn",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/HiltonGardenInn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1162859",tourism:"hotel"},addTags:{brand:"Hilton Garden Inn","brand:wikidata":"Q1162859","brand:wikipedia":"en:Hilton Garden Inn",name:"Hilton Garden Inn",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Holiday Inn":{name:"Holiday Inn",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/HolidayInn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2717882",tourism:"hotel"},addTags:{brand:"Holiday Inn","brand:wikidata":"Q2717882","brand:wikipedia":"en:Holiday Inn",name:"Holiday Inn",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Holiday Inn Express":{name:"Holiday Inn Express",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/holidayinnexpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5880423",tourism:"hotel"},addTags:{brand:"Holiday Inn Express","brand:wikidata":"Q5880423","brand:wikipedia":"en:Holiday Inn Express",name:"Holiday Inn Express",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Holiday Inn Express & Suites":{name:"Holiday Inn Express & Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/holidayinnexpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5880423",tourism:"hotel"},addTags:{brand:"Holiday Inn Express & Suites","brand:wikidata":"Q5880423","brand:wikipedia":"en:Holiday Inn Express",name:"Holiday Inn Express & Suites",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Homewood Suites":{name:"Homewood Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/HomewoodSuites/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5890701",tourism:"hotel"},addTags:{brand:"Homewood Suites","brand:wikidata":"Q5890701","brand:wikipedia":"en:Homewood Suites by Hilton",name:"Homewood Suites",tourism:"hotel"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Hyatt":{name:"Hyatt",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/hyatt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1425063",tourism:"hotel"},addTags:{brand:"Hyatt","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Hyatt",operator:"Hyatt",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Hyatt Centric":{name:"Hyatt Centric",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/hyatt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1425063",tourism:"hotel"},addTags:{brand:"Hyatt Centric","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Hyatt Centric",operator:"Hyatt",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Hyatt House":{name:"Hyatt House",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/hyatt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1425063",tourism:"hotel"},addTags:{brand:"Hyatt House","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Hyatt House",operator:"Hyatt",tourism:"hotel"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Hyatt Place":{name:"Hyatt Place",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/hyatt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1425063",tourism:"hotel"},addTags:{brand:"Hyatt","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Hyatt Place",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Hyatt Regency":{name:"Hyatt Regency",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/hyatt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1425063",tourism:"hotel"},addTags:{brand:"Hyatt Regency","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Hyatt Regency",operator:"Hyatt",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Ibis":{name:"Ibis",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/ibishotels.fr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q920166",tourism:"hotel"},addTags:{brand:"Ibis","brand:wikidata":"Q920166","brand:wikipedia":"en:Ibis (hotel)",name:"Ibis",tourism:"hotel"},terms:["hotel ibis","ibis hotel"],matchScore:2,suggestion:true},"tourism/hotel/Ibis Budget":{name:"Ibis Budget",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/ibisbudget.fr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1458135",tourism:"hotel"},addTags:{brand:"Ibis Budget","brand:wikidata":"Q1458135","brand:wikipedia":"en:Ibis Budget",name:"Ibis Budget",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Ibis Styles":{name:"Ibis Styles",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/ibisstyles.fr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3147425",tourism:"hotel"},addTags:{brand:"Ibis Styles","brand:wikidata":"Q3147425","brand:wikipedia":"en:Ibis Styles",name:"Ibis Styles",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Kyriad":{name:"Kyriad",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/kyriadindia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11751808",tourism:"hotel"},addTags:{brand:"Kyriad","brand:wikidata":"Q11751808","brand:wikipedia":"pl:Kyriad",name:"Kyriad",tourism:"hotel"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/La Quinta":{name:"La Quinta",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/laquinta/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6464734",tourism:"hotel"},addTags:{brand:"La Quinta","brand:wikidata":"Q6464734","brand:wikipedia":"en:La Quinta Inns & Suites",name:"La Quinta",operator:"Wyndham Hotels and Resorts","operator:wikidata":"Q8040120","operator:wikipedia":"en:Wyndham Hotels and Resorts",tourism:"hotel"},terms:["la quinta inn & suites","la quinta inn and suites","la quinta inns & suites","la quinta inns and suites"],matchScore:2,suggestion:true},"tourism/hotel/Marriott":{name:"Marriott",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/marriottinternational/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1141173",tourism:"hotel"},addTags:{brand:"Marriott","brand:wikidata":"Q1141173","brand:wikipedia":"en:Marriott International",name:"Marriott",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Mercure":{name:"Mercure",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/MercureHotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1709809",tourism:"hotel"},addTags:{brand:"Mercure","brand:wikidata":"Q1709809","brand:wikipedia":"en:Mercure (hotel)",name:"Mercure",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Novotel":{name:"Novotel",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/Novotelhotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q420545",tourism:"hotel"},addTags:{brand:"Novotel","brand:wikidata":"Q420545","brand:wikipedia":"en:Novotel",name:"Novotel",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Park Hyatt":{name:"Park Hyatt",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/hyatt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1425063",tourism:"hotel"},addTags:{brand:"Park Hyatt","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Park Hyatt",operator:"Hyatt",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Premier Inn":{name:"Premier Inn",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/premierinn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2108626",tourism:"hotel"},addTags:{brand:"Premier Inn","brand:wikidata":"Q2108626","brand:wikipedia":"en:Premier Inn",name:"Premier Inn",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Première Classe":{name:"Première Classe",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/PremiereClasseHotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5964551",tourism:"hotel"},addTags:{brand:"Première Classe","brand:wikidata":"Q5964551","brand:wikipedia":"en:Hôtel Première Classe",name:"Première Classe",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Quality Inn":{name:"Quality Inn",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/choicehotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1075788",tourism:"hotel"},addTags:{brand:"Quality Inn","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Quality Inn",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Quality Inn & Suites":{name:"Quality Inn & Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/choicehotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1075788",tourism:"hotel"},addTags:{brand:"Quality Inn & Suites","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Quality Inn & Suites",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Ramada":{name:"Ramada",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/ramada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1502859",tourism:"hotel"},addTags:{brand:"Ramada","brand:wikidata":"Q1502859","brand:wikipedia":"en:Ramada",name:"Ramada",operator:"Wyndham Hotels and Resorts","operator:wikidata":"Q8040120","operator:wikipedia":"en:Wyndham Hotels and Resorts",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Red Roof Inn":{name:"Red Roof Inn",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/redroofinn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7304949",tourism:"hotel"},addTags:{brand:"Red Roof Inn","brand:wikidata":"Q7304949","brand:wikipedia":"en:Red Roof Inn",name:"Red Roof Inn",tourism:"hotel"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Renaissance Hotel":{name:"Renaissance Hotel",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/RenaissanceHotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2143252",tourism:"hotel"},addTags:{brand:"Renaissance Hotels","brand:wikidata":"Q2143252","brand:wikipedia":"en:Renaissance Hotels",name:"Renaissance Hotel",operator:"Marriott International","operator:wikidata":"Q1141173","operator:wikipedia":"en:Marriott International",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Residence Inn":{name:"Residence Inn",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/residenceinn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7315394",tourism:"hotel"},addTags:{brand:"Residence Inn","brand:wikidata":"Q7315394","brand:wikipedia":"en:Residence Inn by Marriott",name:"Residence Inn",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Sheraton":{name:"Sheraton",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/Sheraton/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q634831",tourism:"hotel"},addTags:{brand:"Sheraton","brand:wikidata":"Q634831","brand:wikipedia":"en:Sheraton Hotels and Resorts",name:"Sheraton",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Sleep Inn":{name:"Sleep Inn",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/choicehotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1075788",tourism:"hotel"},addTags:{brand:"Sleep Inn","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Sleep Inn",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Staybridge Suites":{name:"Staybridge Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/StaybridgeSuites/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7605116",tourism:"hotel"},addTags:{brand:"Staybridge Suites","brand:wikidata":"Q7605116","brand:wikipedia":"en:Staybridge Suites",name:"Staybridge Suites",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Travelodge":{name:"Travelodge",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/Travelodge/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7836087",tourism:"hotel"},addTags:{brand:"Travelodge","brand:wikidata":"Q7836087","brand:wikipedia":"en:Travelodge",name:"Travelodge",operator:"Wyndham Hotels and Resorts","operator:wikidata":"Q8040120","operator:wikipedia":"en:Wyndham Hotels and Resorts",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/W Hotels":{name:"W Hotels",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/WHotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7958488",tourism:"hotel"},addTags:{brand:"W Hotels","brand:wikidata":"Q7958488","brand:wikipedia":"en:W Hotels",name:"W Hotels",short_name:"W",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/東横イン":{name:"東横イン",icon:"fas-concierge-bell",geometry:["point","area"],tags:{"brand:wikidata":"Q1320541",tourism:"hotel"},addTags:{brand:"東横イン","brand:en":"Toyoko Inn","brand:ja":"東横イン","brand:wikidata":"Q1320541","brand:wikipedia":"en:Toyoko Inn",name:"東横イン","name:en":"Toyoko Inn","name:ja":"東横イン",tourism:"hotel"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"tourism/motel/Econo Lodge":{name:"Econo Lodge",icon:"maki-lodging",imageURL:"https://graph.facebook.com/choicehotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5333330",tourism:"motel"},addTags:{brand:"Econo Lodge","brand:wikidata":"Q5333330","brand:wikipedia":"en:Econo Lodge",name:"Econo Lodge",tourism:"motel"},terms:[],matchScore:2,suggestion:true},"tourism/motel/Motel 6":{name:"Motel 6",icon:"maki-lodging",imageURL:"https://graph.facebook.com/motel6/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2188884",tourism:"motel"},addTags:{brand:"Motel 6","brand:wikidata":"Q2188884","brand:wikipedia":"en:Motel 6",name:"Motel 6",tourism:"motel"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"tourism/motel/Rodeway Inn":{name:"Rodeway Inn",icon:"maki-lodging",imageURL:"https://graph.facebook.com/choicehotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7356709",tourism:"motel"},addTags:{brand:"Rodeway Inn","brand:wikidata":"Q7356709","brand:wikipedia":"en:Rodeway Inn",name:"Rodeway Inn",tourism:"motel"},terms:[],matchScore:2,suggestion:true},"tourism/motel/Super 8":{name:"Super 8",icon:"maki-lodging",imageURL:"https://graph.facebook.com/Super8/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5364003",tourism:"motel"},addTags:{brand:"Super 8","brand:wikidata":"Q5364003","brand:wikipedia":"en:Super 8 Motels",name:"Super 8",operator:"Wyndham Hotels and Resorts","operator:wikidata":"Q8040120","operator:wikipedia":"en:Wyndham Hotels and Resorts",tourism:"motel"},terms:[],matchScore:2,suggestion:true}};
24700 var defaults = {area:["category-landuse","category-building","category-water","category-natural","leisure/park","amenity/hospital","amenity/place_of_worship","amenity/cafe","amenity/restaurant","area"],line:["category-road_major","category-road_minor","category-rail","category-path","category-waterway","category-barrier","category-natural","category-utility","line"],point:["category-natural","leisure/park","amenity/hospital","amenity/place_of_worship","amenity/cafe","amenity/restaurant","amenity/fast_food","amenity/bar","amenity/bank","shop/supermarket","point"],vertex:["highway/crossing/marked","highway/crossing/unmarked","railway/level_crossing","highway/traffic_signals","highway/turning_circle","highway/turning_loop","traffic_calming","highway/mini_roundabout","highway/motorway_junction","point"],relation:["category-route","category-restriction","public_transport/stop_area","type/boundary","type/waterway","type/multipolygon","type/enforcement","type/site","relation"]};
24702 var categories = {"category-barrier":{icon:"maki-roadblock",name:"Barrier Features",members:["barrier/fence","barrier/wall","barrier/ditch","barrier/gate","barrier/hedge","barrier/kerb","barrier"]},"category-building":{icon:"maki-building",name:"Building Features",members:["building","building/house","building/apartments","building/garage","building/retail","building/commercial","building/industrial","building/residential"]},"category-golf":{icon:"maki-golf",name:"Golf Features",members:["golf/fairway","golf/green","golf/lateral_water_hazard","golf/rough","golf/bunker","golf/tee","golf/water_hazard","golf/driving_range","golf/hole","golf/cartpath","golf/path"]},"category-landuse":{icon:"maki-landuse",name:"Land Use Features",members:["landuse/residential","landuse/industrial","landuse/commercial","landuse/retail","landuse/farmland","landuse/farmyard","landuse/forest","landuse/meadow","landuse/aquaculture","landuse/cemetery","landuse/military","landuse/religious"]},"category-natural":{icon:"maki-natural",name:"Natural Features",members:["natural/water","natural/wood","natural/scrub","natural/wetland","natural/grassland","natural/heath","natural/bare_rock","natural/beach","natural/cave_entrance","natural/glacier","natural/coastline","natural/tree_row","natural/peak","natural/cliff","natural/beach"]},"category-path":{icon:"temaki-pedestrian",name:"Paths",members:["highway/path","highway/footway","highway/footway/marked","highway/footway/sidewalk","highway/steps","highway/cycleway","highway/bridleway","highway/pedestrian_line"]},"category-rail":{icon:"iD-railway-rail",name:"Rails",members:["railway/rail","railway/disused","railway/tram","railway/subway","railway/narrow_gauge","railway/light_rail","railway/monorail","railway/funicular"]},"category-restriction":{icon:"iD-restriction",name:"Restriction Features",members:["type/restriction/no_left_turn","type/restriction/no_right_turn","type/restriction/no_straight_on","type/restriction/no_u_turn","type/restriction/only_left_turn","type/restriction/only_right_turn","type/restriction/only_straight_on","type/restriction/only_u_turn","type/restriction"]},"category-road_major":{icon:"iD-highway-unclassified",name:"Major Roads",members:["highway/motorway","highway/trunk","highway/primary","highway/secondary","highway/tertiary","highway/motorway_link","highway/trunk_link","highway/primary_link","highway/secondary_link","highway/tertiary_link"]},"category-road_minor":{icon:"iD-highway-unclassified",name:"Minor Roads",members:["highway/unclassified","highway/residential","highway/living_street","highway/service","highway/track"]},"category-road_service":{icon:"iD-highway-service",name:"Service Roads",members:["highway/service","highway/service/parking_aisle","highway/service/driveway","highway/service/alley","highway/service/emergency_access","highway/service/drive-through"]},"category-route":{icon:"iD-route",name:"Route Features",members:["type/route/road","type/route/bicycle","type/route/foot","type/route/hiking","type/route/horse","type/route/piste","type/route/bus","type/route/train","type/route/light_rail","type/route/tram","type/route/subway","type/route/ferry","type/route/power","type/route/pipeline","type/route/detour","type/route_master","type/route"]},"category-utility":{icon:"iD-power-line",name:"Utility Features",members:["power/line","power/minor_line","man_made/pipeline","power/cable/underground"]},"category-water":{icon:"maki-water",name:"Water Bodies",members:["natural/water","natural/water/pond","natural/water/basin","natural/water/lake","natural/water/reservoir"]},"category-waterway":{icon:"iD-waterway-stream",name:"Waterways",members:["waterway/stream","waterway/drain","waterway/river","waterway/canal","waterway/ditch","natural/water/stream","natural/water/river","natural/water/canal"]}};
24704 var fields = {access_simple:{key:"access",type:"combo",label:"Allowed Access",options:["yes","permissive","private","customers","permit","no"]},access:{keys:["access","foot","motor_vehicle","bicycle","horse"],reference:{key:"access"},type:"access",label:"Allowed Access",placeholder:"Not Specified",strings:{types:{access:"All",foot:"Foot",motor_vehicle:"Motor Vehicles",bicycle:"Bicycles",horse:"Horses"},options:{yes:{title:"Allowed",description:"Access allowed by law; a right of way"},no:{title:"Prohibited",description:"Access not allowed to the general public"},permissive:{title:"Permissive",description:"Access allowed until such time as the owner revokes the permission"},"private":{title:"Private",description:"Access allowed only with permission of the owner on an individual basis"},designated:{title:"Designated",description:"Access allowed according to signs or specific local laws"},destination:{title:"Destination",description:"Access allowed only to reach a destination"},dismount:{title:"Dismount",description:"Access allowed but rider must dismount"},permit:{title:"Permit",description:"Access allowed only with a valid permit or license"}}}},address:{type:"address",keys:["addr:block_number","addr:city","addr:block_number","addr:conscriptionnumber","addr:county","addr:country","addr:county","addr:district","addr:floor","addr:hamlet","addr:housename","addr:housenumber","addr:neighbourhood","addr:place","addr:postcode","addr:province","addr:quarter","addr:state","addr:street","addr:subdistrict","addr:suburb","addr:unit"],reference:{key:"addr"},icon:"address",label:"Address",strings:{placeholders:{block_number:"Block Number","block_number!jp":"Block No.",city:"City","city!jp":"City/Town/Village/Tokyo Special Ward","city!vn":"City/Town",conscriptionnumber:"123",country:"Country",county:"County","county!jp":"District",district:"District","district!vn":"Arrondissement/Town/District",floor:"Floor",hamlet:"Hamlet",housename:"Housename",housenumber:"123","housenumber!jp":"Building No./Lot No.",neighbourhood:"Neighbourhood","neighbourhood!jp":"Chōme/Aza/Koaza",place:"Place",postcode:"Postcode",province:"Province","province!jp":"Prefecture",quarter:"Quarter","quarter!jp":"Ōaza/Machi",state:"State",street:"Street",subdistrict:"Subdistrict","subdistrict!vn":"Ward/Commune/Townlet",suburb:"Suburb","suburb!jp":"Ward",unit:"Unit"}}},admin_level:{key:"admin_level",type:"number",minValue:1,label:"Admin Level"},aerialway:{key:"aerialway",type:"typeCombo",label:"Type"},"aerialway/access":{key:"aerialway:access",type:"combo",label:"Access",strings:{options:{entry:"Entry",exit:"Exit",both:"Both"}}},"aerialway/bubble":{key:"aerialway:bubble",type:"check",label:"Bubble"},"aerialway/capacity":{key:"aerialway:capacity",type:"number",minValue:0,label:"Capacity (per hour)",placeholder:"500, 2500, 5000..."},"aerialway/duration":{key:"aerialway:duration",type:"number",minValue:0,label:"Duration (minutes)",placeholder:"1, 2, 3..."},"aerialway/heating":{key:"aerialway:heating",type:"check",label:"Heated"},"aerialway/occupancy":{key:"aerialway:occupancy",type:"number",minValue:0,label:"Occupancy",placeholder:"2, 4, 8..."},"aerialway/summer/access":{key:"aerialway:summer:access",type:"combo",label:"Access (summer)",strings:{options:{entry:"Entry",exit:"Exit",both:"Both"}}},aeroway:{key:"aeroway",type:"typeCombo",label:"Type"},agrarian:{key:"agrarian",type:"semiCombo",label:"Products"},air_conditioning:{key:"air_conditioning",type:"check",label:"Air Conditioning"},amenity:{key:"amenity",type:"typeCombo",label:"Type"},animal_boarding:{key:"animal_boarding",type:"semiCombo",label:"For Animals"},animal_breeding:{key:"animal_breeding",type:"semiCombo",label:"For Animals"},animal_shelter:{key:"animal_shelter",type:"semiCombo",label:"For Animals"},architect:{key:"architect",type:"text",label:"Architect"},"area/highway":{key:"area:highway",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"},attraction:{key:"attraction",type:"typeCombo",label:"Type"},backrest:{key:"backrest",type:"check",label:"Backrest"},bar:{key:"bar",type:"check",label:"Bar"},barrier:{key:"barrier",type:"typeCombo",label:"Type"},basin:{key:"basin",type:"combo",label:"Type"},"bath/open_air":{key:"bath:open_air",label:"Open Air",type:"check"},"bath/sand_bath":{key:"bath:sand_bath",label:"Sand Bath",type:"check"},"bath/type":{key:"bath:type",type:"combo",label:"Specialty",strings:{options:{onsen:"Japanese Onsen",foot_bath:"Foot Bath",hot_spring:"Hot Spring"}}},beauty:{key:"beauty",type:"combo",label:"Beauty Specialty"},bench:{key:"bench",type:"check",label:"Bench"},bicycle_parking:{key:"bicycle_parking",type:"combo",label:"Type"},bin:{key:"bin",type:"check",label:"Waste Bin"},blood_components:{key:"blood:",type:"multiCombo",label:"Blood Components",strings:{options:{whole:"whole blood",plasma:"plasma",platelets:"platelets",stemcells:"stem cell samples"}}},board_type:{key:"board_type",type:"typeCombo",label:"Type"},booth:{key:"booth",type:"combo",label:"Booth",caseSensitive:true},boules:{key:"boules",type:"typeCombo",label:"Type"},boundary:{key:"boundary",type:"combo",label:"Type"},brand:{key:"brand",type:"text",label:"Brand"},brewery:{key:"brewery",type:"semiCombo",label:"Draft Beers"},bridge:{key:"bridge",type:"typeCombo",label:"Type",placeholder:"Default"},"bridge/support":{key:"bridge:support",type:"combo",label:"Type"},building_area:{key:"building",type:"combo","default":"yes",geometry:"area",label:"Building"},building:{key:"building",type:"combo",label:"Building"},"building/levels_building":{key:"building:levels",type:"number",minValue:0,label:"Building Levels",placeholder:"2, 4, 6...",prerequisiteTag:{key:"building",valueNot:"no"}},"building/material":{key:"building:material",type:"combo",label:"Material"},bunker_type:{key:"bunker_type",type:"combo",label:"Type"},cables:{key:"cables",type:"number",minValue:1,label:"Cables",placeholder:"1, 2, 3..."},"camera/direction":{key:"camera:direction",type:"number",label:"Direction (Degrees Clockwise)",placeholder:"45, 90, 180, 270"},"camera/mount":{key:"camera:mount",type:"combo",label:"Camera Mount"},"camera/type":{key:"camera:type",type:"combo",label:"Camera Type",strings:{options:{fixed:"Fixed",panning:"Panning",dome:"Dome"}}},capacity:{key:"capacity",type:"number",minValue:0,label:"Capacity",placeholder:"50, 100, 200..."},cash_in:{key:"cash_in",type:"check",label:"Cash In"},castle_type:{key:"castle_type",type:"combo",label:"Type"},check_date:{key:"check_date",type:"text",label:"Last Checked Date"},clothes:{key:"clothes",type:"semiCombo",label:"Clothes"},club:{key:"club",type:"typeCombo",label:"Type"},collection_times:{key:"collection_times",type:"text",label:"Collection Times"},colour:{key:"colour",type:"text",label:"Color"},comment:{key:"comment",type:"textarea",label:"Changeset Comment",placeholder:"Brief description of your contributions (required)"},communication_multi:{key:"communication:",type:"multiCombo",label:"Communication Types"},construction:{key:"construction",type:"combo",label:"Type"},consulate:{key:"consulate",type:"combo",label:"Type"},"contact/webcam":{key:"contact:webcam",type:"url",icon:"website",label:"Webcam URL",placeholder:"http://example.com/"},content:{key:"content",type:"combo",label:"Content",options:["silage","water","oil","fuel","slurry","gas","manure","sewage"]},conveying:{key:"conveying",type:"typeCombo",label:"Movement Direction",strings:{options:{forward:"Forward",backward:"Backward",reversible:"Reversible"}}},country:{key:"country",type:"combo",label:"Country"},couplings:{key:"couplings",type:"number",minValue:1,label:"Couplings",placeholder:"1, 2, 3..."},covered:{key:"covered",type:"check",label:"Covered"},craft:{key:"craft",type:"typeCombo",label:"Type"},"crane/type":{key:"crane:type",type:"combo",label:"Crane Type",strings:{options:{portal_crane:"Portal Crane","floor-mounted_crane":"Floor-mounted Crane",travel_lift:"Travel Lift"}}},crop:{key:"crop",type:"semiCombo",label:"Crops"},crossing:{key:"crossing",type:"combo",label:"Type"},cuisine:{key:"cuisine",type:"semiCombo",label:"Cuisines"},currency_multi:{key:"currency:",type:"multiCombo",label:"Currency Types"},cutting:{key:"cutting",type:"typeCombo",label:"Type",placeholder:"Default"},cycle_network:{key:"cycle_network",type:"networkCombo",label:"Network"},cycleway:{keys:["cycleway","cycleway:left","cycleway:right"],reference:{key:"cycleway"},type:"cycleway",label:"Bike Lanes",placeholder:"none",strings:{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"}}}},"dance/style":{key:"dance:style",type:"semiCombo",label:"Dance Styles"},date:{key:"date",type:"check",label:"Date"},delivery:{key:"delivery",type:"check",label:"Delivery"},denomination:{key:"denomination",type:"combo",label:"Denomination",prerequisiteTag:{key:"religion"}},denotation:{key:"denotation",type:"combo",label:"Denotation"},departures_board:{key:"departures_board",type:"combo",label:"Departures Board",strings:{options:{yes:"Yes",timetable:"Timetable",realtime:"Realtime",no:"None"}}},description:{key:"description",type:"textarea",label:"Description",universal:true},design:{key:"design",type:"combo",label:"Design"},destination_oneway:{key:"destination",type:"semiCombo",label:"Destinations",prerequisiteTag:{key:"oneway",value:"yes"},snake_case:false},"destination/ref_oneway":{key:"destination:ref",type:"semiCombo",label:"Destination Road Numbers",prerequisiteTag:{key:"oneway",value:"yes"},snake_case:false},"destination/symbol_oneway":{key:"destination:symbol",type:"semiCombo",label:"Destination Symbols",prerequisiteTag:{key:"oneway",value:"yes"}},devices:{key:"devices",type:"number",minValue:0,label:"Devices",placeholder:"1, 2, 3..."},diaper:{key:"diaper",type:"combo",label:"Diaper Changing Available",options:["yes","no","room","1","2","3","4","5"]},diet_multi:{key:"diet:",type:"multiCombo",label:"Diet Types"},diplomatic:{key:"diplomatic",type:"combo",label:"Type"},"diplomatic/services":{key:"diplomatic:services:",type:"multiCombo",label:"Services"},direction_cardinal:{key:"direction",type:"combo",label:"Direction",strings:{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"}}},direction_clock:{key:"direction",type:"combo",label:"Direction",strings:{options:{clockwise:"Clockwise",anticlockwise:"Counterclockwise"}}},direction_vertex:{key:"direction",type:"combo",label:"Direction",strings:{options:{forward:"Forward",backward:"Backward",both:"Both / All"}}},direction:{key:"direction",type:"number",label:"Direction (Degrees Clockwise)",placeholder:"45, 90, 180, 270"},dispensing:{key:"dispensing",type:"check",label:"Dispenses Prescriptions","default":"yes"},display:{key:"display",type:"combo",label:"Display",options:["analog","digital","sundial","unorthodox"]},distance:{key:"distance",type:"text",label:"Distance"},dock:{key:"dock",type:"combo",label:"Type"},dog:{key:"dog",type:"combo",label:"Dogs",strings:{options:{yes:"Allowed",leashed:"Leashed Only",no:"Not Allowed"}}},door_type:{key:"door",type:"typeCombo",label:"Type"},door:{key:"door",type:"combo",label:"Door"},drive_through:{key:"drive_through",type:"check",label:"Drive-Through"},duration:{key:"duration",type:"text",label:"Duration",placeholder:"00:00"},electrified:{key:"electrified",type:"combo",label:"Electrification",placeholder:"Contact Line, Electrified Rail...",strings:{options:{contact_line:"Contact Line",rail:"Electrified Rail",yes:"Yes (unspecified)",no:"No"}}},elevation:{key:"ele",type:"number",icon:"elevation",universal:true,label:"Elevation"},email:{key:"email",type:"email",placeholder:"example@example.com",label:"Email"},embankment:{key:"embankment",type:"typeCombo",label:"Type",placeholder:"Default"},embassy:{key:"embassy",type:"combo",label:"Type"},emergency_combo:{key:"emergency",type:"combo",label:"Type"},emergency:{key:"emergency",type:"check",label:"Emergency"},enforcement:{key:"enforcement",type:"combo",label:"Type"},entrance:{key:"entrance",type:"typeCombo",label:"Type"},except:{key:"except",type:"combo",label:"Exceptions"},faces:{key:"faces",type:"number",minValue:0,label:"Faces"},fax:{key:"fax",type:"tel",label:"Fax",placeholder:"+31 42 123 4567"},fee:{key:"fee",type:"check",label:"Fee"},fence_type:{key:"fence_type",type:"combo",label:"Type"},"fire_hydrant/diameter":{key:"fire_hydrant:diameter",type:"combo",label:"Diameter (mm, in, or letters)",snake_case:false},"fire_hydrant/pressure":{key:"fire_hydrant:pressure",type:"combo",label:"Pressure (bar)",snake_case:false},"fire_hydrant/type":{key:"fire_hydrant:type",type:"combo",label:"Shape",strings:{options:{pillar:"Pillar/Aboveground",underground:"Underground",wall:"Wall",pipe:"Capped Pipe"}}},fireplace:{key:"fireplace",type:"check",label:"Fireplace"},fishing:{key:"fishing",type:"combo",label:"Fishing"},fitness_station:{key:"fitness_station",type:"typeCombo",label:"Equipment Type"},fixme:{key:"fixme",type:"textarea",label:"Fix Me",universal:true},"flag/type":{key:"flag:type",type:"combo",label:"Flag Type"},floating:{key:"floating",type:"check",label:"Floating"},flood_prone:{key:"flood_prone",type:"check",label:"Flood Prone"},ford:{key:"ford",type:"typeCombo",label:"Type",placeholder:"Default"},frequency_electrified:{key:"frequency",type:"combo",label:"Operating Frequency",prerequisiteTag:{key:"electrified",valueNot:"no"}},frequency:{key:"frequency",type:"combo",label:"Operating Frequency"},from:{key:"from",type:"text",label:"From"},fuel_multi:{key:"fuel:",type:"multiCombo",label:"Fuel Types"},fuel:{key:"fuel",type:"combo",label:"Fuel"},gauge:{key:"gauge",type:"combo",label:"Gauge"},gender:{type:"radio",keys:["male","female","unisex"],label:"Gender",placeholder:"Unknown",strings:{options:{male:"Male",female:"Female",unisex:"Unisex"}}},"generator/method":{key:"generator:method",type:"combo",label:"Method"},"generator/output/electricity":{key:"generator:output:electricity",type:"typeCombo",label:"Power Output",placeholder:"50 MW, 100 MW, 200 MW...",snake_case:false},"generator/source":{key:"generator:source",type:"combo",label:"Source"},"generator/type":{key:"generator:type",type:"combo",label:"Type"},government:{key:"government",type:"typeCombo",label:"Type"},grape_variety:{key:"grape_variety",type:"semiCombo",label:"Grape Varieties"},guest_house:{key:"guest_house",type:"combo",label:"Type"},handicap:{key:"handicap",type:"number",label:"Handicap",placeholder:"1-18"},handrail:{key:"handrail",type:"check",label:"Handrail"},hashtags:{key:"hashtags",type:"semiCombo",label:"Suggested Hashtags",placeholder:"#example"},healthcare:{key:"healthcare",type:"typeCombo",label:"Type"},"healthcare/speciality":{key:"healthcare:speciality",type:"semiCombo",reference:{key:"healthcare"},label:"Specialties"},height_building:{key:"height",minValue:0,type:"number",label:"Building Height (Meters)",prerequisiteTag:{key:"building",valueNot:"no"}},height:{key:"height",minValue:0,type:"number",label:"Height (Meters)"},highspeed:{key:"highspeed",type:"check",label:"High-Speed"},highway:{key:"highway",type:"typeCombo",label:"Type"},historic:{key:"historic",type:"typeCombo",label:"Type"},"historic/civilization":{key:"historic:civilization",type:"combo",label:"Historic Civilization"},"historic/wreck/date_sunk":{key:"wreck:date_sunk",type:"text",label:"Date Sunk"},"historic/wreck/visible_at_high_tide":{key:"wreck:visible_at_high_tide",type:"check",label:"Visible At High Tide"},"historic/wreck/visible_at_low_tide":{key:"wreck:visible_at_low_tide",type:"check",label:"Visible At Low Tide"},hoops:{key:"hoops",type:"number",minValue:0,label:"Hoops",placeholder:"1, 2, 4..."},horse_dressage:{key:"sport",type:"check",label:"Dressage Riding",strings:{options:{"undefined":"No",equestrian:"Yes"}},reference:{key:"sport",value:"equestrian"}},horse_riding:{key:"leisure",type:"check",label:"Horseback Riding",strings:{options:{"undefined":"No",horse_riding:"Yes"}},reference:{key:"leisure",value:"horse_riding"}},horse_scale:{key:"horse_scale",type:"combo",label:"Horseback Riding Difficulty",placeholder:"Difficult, Dangerous...",strings:{options:{common:"Easy: No problems or difficulties. (default)",demanding:"Use with caution: Uneven way, occasional difficult passages.",difficult:"Difficult: Way narrow and exposed. May contain obstacles to step over and narrow passages.",critical:"Borderline: Passable only for experienced riders and horses. Major obstacles. Bridges should be examined carefully.",dangerous:"Dangerous: Passable only for very experienced riders and horses and only in good weather. Dismount.",impossible:"Impassable: Way or bridge not passable for horses. Too narrow, insuffient support, obstacles like ladders. Danger of life."}}},horse_stables:{key:"amenity",type:"check",label:"Riding Stable",strings:{options:{"undefined":"No",stables:"Yes"}},reference:{key:"amenity",value:"stables"}},iata:{key:"iata",type:"text",label:"IATA"},icao:{key:"icao",type:"text",label:"ICAO"},incline_steps:{key:"incline",type:"combo",label:"Incline",strings:{options:{up:"Up",down:"Down"}}},incline:{key:"incline",type:"combo",label:"Incline"},indoor_type:{key:"indoor",type:"typeCombo",label:"Type"},indoor:{key:"indoor",type:"check",label:"Indoor"},industrial:{key:"industrial",type:"combo",label:"Type"},information:{key:"information",type:"typeCombo",label:"Type"},inscription:{key:"inscription",type:"textarea",label:"Inscription"},intermittent_yes:{key:"intermittent",type:"check",label:"Intermittent","default":"yes"},intermittent:{key:"intermittent",type:"check",label:"Intermittent"},internet_access:{key:"internet_access",type:"combo",label:"Internet Access",strings:{options:{yes:"Yes",no:"No",wlan:"Wifi",wired:"Wired",terminal:"Terminal"}}},"internet_access/fee":{key:"internet_access:fee",type:"check",label:"Internet Access Fee",prerequisiteTag:{key:"internet_access",valueNot:"no"}},"internet_access/ssid":{key:"internet_access:ssid",type:"text",label:"Wifi Network Name",prerequisiteTag:{key:"internet_access",valueNot:"no"}},interval:{key:"interval",type:"text",label:"Interval"},junction_line:{key:"junction",type:"combo",label:"Junction",strings:{options:{roundabout:"Roundabout",circular:"Traffic Circle",jughandle:"Jughandle"}}},"junction/ref_oneway":{key:"junction:ref",type:"text",label:"Junction Number",prerequisiteTag:{key:"oneway",value:"yes"}},kerb:{key:"kerb",type:"combo",label:"Curb"},"kerb/height":{key:"kerb:height",type:"combo",snake_case:false,label:"Height"},label:{key:"label",type:"textarea",label:"Label"},lamp_type:{key:"lamp_type",type:"combo",label:"Type"},landuse:{key:"landuse",type:"typeCombo",label:"Type"},lanes:{key:"lanes",type:"number",minValue:0,label:"Lanes",placeholder:"1, 2, 3..."},language_multi:{key:"language:",type:"multiCombo",label:"Languages"},layer:{key:"layer",type:"number",label:"Layer",placeholder:"0"},leaf_cycle_singular:{key:"leaf_cycle",type:"combo",label:"Leaf Cycle",strings:{options:{evergreen:"Evergreen",deciduous:"Deciduous",semi_evergreen:"Semi-Evergreen",semi_deciduous:"Semi-Deciduous"}}},leaf_cycle:{key:"leaf_cycle",type:"combo",label:"Leaf Cycle",strings:{options:{evergreen:"Evergreen",deciduous:"Deciduous",semi_evergreen:"Semi-Evergreen",semi_deciduous:"Semi-Deciduous",mixed:"Mixed"}}},leaf_type_singular:{key:"leaf_type",type:"combo",label:"Leaf Type",strings:{options:{broadleaved:"Broadleaved",needleleaved:"Needleleaved",leafless:"Leafless"}}},leaf_type:{key:"leaf_type",type:"combo",label:"Leaf Type",strings:{options:{broadleaved:"Broadleaved",needleleaved:"Needleleaved",mixed:"Mixed",leafless:"Leafless"}}},leisure:{key:"leisure",type:"typeCombo",label:"Type"},length:{key:"length",type:"number",minValue:0,label:"Length (Meters)"},level:{key:"level",type:"combo",label:"Level",universal:true},levels:{key:"building:levels",type:"number",minValue:0,label:"Levels",placeholder:"2, 4, 6..."},liaison:{key:"liaison",type:"combo",label:"Type"},lit:{key:"lit",type:"check",label:"Lit"},location_pool:{key:"location",type:"typeCombo",label:"Location",strings:{options:{outdoor:"Outdoor",indoor:"Indoor",roof:"Rooftop"}}},location:{key:"location",type:"combo",label:"Location"},lock:{key:"lock",type:"check",label:"Lock"},man_made:{key:"man_made",type:"typeCombo",label:"Type"},manhole:{key:"manhole",type:"typeCombo",label:"Type"},manufacturer:{key:"manufacturer",type:"combo",snake_case:false,caseSensitive:true,label:"Manufacturer"},map_size:{key:"map_size",type:"typeCombo",label:"Coverage"},map_type:{key:"map_type",type:"typeCombo",label:"Type"},material:{key:"material",type:"combo",label:"Material"},maxheight:{key:"maxheight",type:"combo",label:"Max Height",placeholder:"4, 4.5, 5, 14'0\", 14'6\", 15'0\"",snake_case:false},maxspeed:{key:"maxspeed",type:"maxspeed",label:"Speed Limit",placeholder:"40, 50, 60..."},"maxspeed/advisory":{key:"maxspeed:advisory",type:"maxspeed",label:"Advisory Speed Limit",placeholder:"40, 50, 60..."},maxstay:{key:"maxstay",type:"combo",label:"Max Stay",options:["15 min","30 min","45 min","1 hr","1.5 hr","2 hr","2.5 hr","3 hr","4 hr","1 day","2 day"],snake_case:false},maxweight_bridge:{key:"maxweight",type:"combo",label:"Max Weight",snake_case:false,prerequisiteTag:{key:"bridge",valueNot:"no"}},maxweight:{key:"maxweight",type:"combo",label:"Max Weight",snake_case:false},memorial:{key:"memorial",type:"typeCombo",label:"Type"},microbrewery:{key:"microbrewery",type:"check",label:"Microbrewery"},minspeed:{key:"minspeed",type:"maxspeed",label:"Minimum Speed Limit",placeholder:"20, 30, 40..."},monitoring_multi:{key:"monitoring:",type:"multiCombo",label:"Monitoring"},"mtb/scale":{key:"mtb:scale",type:"combo",label:"Mountain Biking Difficulty",placeholder:"0, 1, 2, 3...",strings:{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":{key:"mtb:scale:imba",type:"combo",label:"IMBA Trail Difficulty",placeholder:"Easy, Medium, Difficult...",strings:{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":{key:"mtb:scale:uphill",type:"combo",label:"Mountain Biking Uphill Difficulty",placeholder:"0, 1, 2, 3...",strings:{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:{key:"name",type:"localized",label:"Name",universal:true,placeholder:"Common name (if any)"},natural:{key:"natural",type:"typeCombo",label:"Natural"},network_bicycle:{key:"network",type:"combo",label:"Network Type",placeholder:"Local, Regional, National, International",strings:{options:{lcn:"Local",rcn:"Regional",ncn:"National",icn:"International"}}},network_foot:{key:"network",type:"combo",label:"Network Type",placeholder:"Local, Regional, National, International",strings:{options:{lwn:"Local",rwn:"Regional",nwn:"National",iwn:"International"}}},network_horse:{key:"network",type:"combo",label:"Network Type",placeholder:"Local, Regional, National, International",strings:{options:{lhn:"Local",rhn:"Regional",nhn:"National",ihn:"International"}}},network_road:{key:"network",type:"networkCombo",label:"Network"},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_yes:{key:"oneway",type:"onewayCheck",label:"One Way",strings:{options:{"undefined":"Assumed to be Yes",yes:"Yes",no:"No",reversible:"Reversible",alternating:"Alternating"}}},oneway:{key:"oneway",type:"onewayCheck",label:"One Way",strings:{options:{"undefined":"Assumed to be No",yes:"Yes",no:"No",reversible:"Reversible",alternating:"Alternating"}}},"oneway/bicycle":{key:"oneway:bicycle",type:"check",label:"One Way (Bicycles)",prerequisiteTag:{key:"oneway"}},opening_date:{key:"opening_date",type:"text",label:"Expected Opening Date"},opening_hours:{key:"opening_hours",type:"combo",label:"Hours",placeholder:"Unknown",snake_case:false},operator:{key:"operator",type:"text",label:"Operator"},outdoor_seating:{key:"outdoor_seating",type:"check",label:"Outdoor Seating"},par:{key:"par",type:"number",minValue:1,label:"Par",placeholder:"3, 4, 5..."},park_ride:{key:"park_ride",type:"check",label:"Park and Ride"},parking:{key:"parking",type:"combo",label:"Type",strings:{options:{surface:"Surface","multi-storey":"Multilevel",underground:"Underground",sheds:"Sheds",carports:"Carports",garage_boxes:"Garage Boxes",lane:"Roadside Lane"}}},payment_multi_fee:{key:"payment:",type:"multiCombo",label:"Payment Types",prerequisiteTag:{key:"fee",valueNot:"no"}},payment_multi:{key:"payment:",type:"multiCombo",label:"Payment Types"},phases:{key:"phases",type:"number",minValue:1,label:"Phases",placeholder:"1, 2, 3..."},phone:{key:"phone",type:"tel",icon:"maki-telephone",label:"Telephone",placeholder:"+31 42 123 4567"},"piste/difficulty_downhill":{key:"piste:difficulty",type:"combo",label:"Difficulty",placeholder:"Easy, Intermediate, Advanced...",strings:{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/difficulty_nordic":{key:"piste:difficulty",type:"combo",label:"Difficulty",placeholder:"Easy, Intermediate, Advanced...",strings:{options:{novice:"Novice - Flat, no effort needed",easy:"Easy - Soft hills, short steep section",intermediate:"Intermediate - Steep section",advanced:"Advanced - Narrow, steep or icy section, sharp turn",expert:"Expert - Dangerous terrain around"}}},"piste/difficulty_skitour":{key:"piste:difficulty",type:"combo",label:"Difficulty",placeholder:"Easy, Intermediate, Advanced...",strings:{options:{novice:"Novice - L: <30° incline",easy:"Easy - WS: 30-35° incline",intermediate:"Intermediate - ZS: 35-40° incline",advanced:"Advanced - S: 40-45° incline",expert:"Expert - SS: 45–50° incline",freeride:"Freeride - AS: 50–55° incline",extreme:"Extreme - EX: >55° incline"}}},"piste/difficulty":{key:"piste:difficulty",type:"combo",label:"Difficulty",placeholder:"Easy, Intermediate, Advanced...",strings:{options:{novice:"Novice",easy:"Easy",intermediate:"Intermediate",advanced:"Advanced",expert:"Expert",freeride:"Freeride",extreme:"Extreme"}}},"piste/grooming_downhill":{key:"piste:grooming",type:"combo",label:"Grooming",strings:{options:{classic:"Classic",mogul:"Mogul",backcountry:"Backcountry - no grooming"}}},"piste/grooming_hike":{key:"piste:grooming",type:"combo",label:"Grooming",strings:{options:{classic:"Classic - Winter Hiking",backcountry:"Backcountry - Snowshoeing"}}},"piste/grooming_nordic":{key:"piste:grooming",type:"combo",label:"Grooming",strings:{options:{classic:"Classic",backcountry:"Backcountry, no grooming","classic+skating":"Classic and Skating",scooter:"Scooter/Snowmobile",skating:"Skating"}}},"piste/grooming":{key:"piste:grooming",type:"combo",label:"Grooming",strings:{options:{classic:"Classic",mogul:"Mogul",backcountry:"Backcountry","classic+skating":"Classic and Skating",scooter:"Scooter/Snowmobile",skating:"Skating"}}},"piste/type":{key:"piste:type",type:"typeCombo",label:"Type",strings:{options:{downhill:"Downhill",nordic:"Nordic",skitour:"Skitour",sled:"Sled",hike:"Hike",sleigh:"Sleigh",ice_skate:"Ice Skate",snow_park:"Snow Park",playground:"Playground",connection:"Connection"}}},place:{key:"place",type:"typeCombo",label:"Type"},plant:{key:"plant",type:"combo",label:"Plant"},"plant/output/electricity":{key:"plant:output:electricity",type:"text",label:"Power Output",placeholder:"500 MW, 1000 MW, 2000 MW..."},playground:{key:"playground",type:"combo",label:"Type"},"playground/baby":{key:"baby",type:"check",label:"Baby Seat"},"playground/max_age":{key:"max_age",type:"number",minValue:0,label:"Maximum Age"},"playground/min_age":{key:"min_age",type:"number",minValue:0,label:"Minimum Age"},population:{key:"population",type:"text",label:"Population"},power_supply:{key:"power_supply",type:"check",label:"Power Supply"},power:{key:"power",type:"typeCombo",label:"Type"},produce:{key:"produce",type:"semiCombo",label:"Produce"},product:{key:"product",type:"semiCombo",label:"Products"},railway:{key:"railway",type:"typeCombo",label:"Type"},"railway/position":{key:"railway:position",type:"text",placeholder:"Distance to one decimal (123.4)",label:"Milestone Position"},"railway/signal/direction":{key:"railway:signal:direction",type:"combo",label:"Direction",strings:{options:{forward:"Forward",backward:"Backward",both:"Both / All"}}},rating:{key:"rating",type:"combo",label:"Power Rating",snake_case:false},recycling_accepts:{key:"recycling:",type:"multiCombo",label:"Accepts"},recycling_type:{key:"recycling_type",type:"combo",label:"Type",placeholder:"Container, Center",strings:{options:{container:"Container",centre:"Center"}}},ref_aeroway_gate:{key:"ref",type:"text",label:"Gate Number"},ref_golf_hole:{key:"ref",type:"text",label:"Hole Number",placeholder:"1-18"},ref_highway_junction:{key:"ref",type:"text",label:"Junction Number"},ref_platform:{key:"ref",type:"text",label:"Platform Number"},ref_road_number:{key:"ref",type:"text",label:"Road Number"},ref_room_number:{key:"ref",type:"text",label:"Room Number"},ref_route:{key:"ref",type:"text",label:"Route Number"},ref_runway:{key:"ref",type:"text",label:"Runway Number",placeholder:"e.g. 01L/19R"},ref_stop_position:{key:"ref",type:"text",label:"Stop Number"},ref_taxiway:{key:"ref",type:"text",label:"Taxiway Name",placeholder:"e.g. A5"},ref:{key:"ref",type:"text",label:"Reference Code"},"ref/isil":{key:"ref:isil",type:"text",label:"ISIL Code"},relation:{key:"type",type:"combo",label:"Type"},religion:{key:"religion",type:"combo",label:"Religion"},reservation:{key:"reservation",type:"combo",label:"Reservations",strings:{options:{yes:"Accepted",no:"Not Accepted",required:"Required",recommended:"Recommended"}}},resort:{key:"resort",type:"combo",label:"Type"},resource:{key:"resource",type:"semiCombo",label:"Resources"},restriction:{key:"restriction",type:"combo",label:"Type"},restrictions:{type:"restrictions",geometry:"vertex",icon:"iD-restrictions",reference:{rtype:"restriction"},label:"Turn Restrictions"},"roof/colour":{key:"roof:colour",type:"combo",label:"Roof Color"},room:{key:"room",type:"combo",label:"Type"},rooms:{key:"rooms",type:"number",minValue:0,label:"Rooms"},route_master:{key:"route_master",type:"combo",label:"Type"},route:{key:"route",type:"combo",label:"Type"},sac_scale:{key:"sac_scale",type:"combo",label:"Hiking Difficulty",placeholder:"Mountain Hiking, Alpine Hiking...",strings:{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"}}},salt:{key:"salt",type:"check",label:"Salt"},sanitary_dump_station:{key:"sanitary_dump_station",type:"check",label:"Toilet Disposal"},screen:{key:"screen",type:"number",label:"Screens",placeholder:"1, 4, 8…",minValue:0},scuba_diving:{key:"scuba_diving:",type:"multiCombo",label:"Services",options:["repair","courses","rental","filling","air_filling","nitrox_filling","trimix_filling","oxygen_filling"]},"seamark/beacon_isolated_danger/shape":{key:"seamark:beacon_isolated_danger:shape",type:"combo",label:"Shape"},"seamark/beacon_lateral/category":{key:"seamark:beacon_lateral:category",type:"combo",label:"Category",strings:{options:{port:"Port",starboard:"Starboard",waterway_left:"Waterway Left",waterway_right:"Waterway Right",danger_left:"Danger Left",danger_right:"Danger Right"}}},"seamark/beacon_lateral/colour":{key:"seamark:beacon_lateral:colour",type:"combo",label:"Color",strings:{options:{red:"Red",green:"Green",grey:"Grey"}}},"seamark/beacon_lateral/shape":{key:"seamark:beacon_lateral:shape",type:"combo",label:"Shape"},"seamark/beacon_lateral/system":{key:"seamark:beacon_lateral:system",type:"combo",label:"System",strings:{options:{"iala-a":"IALA A","iala-b":"IALA B",cevni:"CEVNI",other:"Other"}}},"seamark/buoy_lateral/category":{key:"seamark:buoy_lateral:category",type:"combo",label:"Category",strings:{options:{port:"Port",starboard:"Starboard",channel_left:"Channel Left",channel_right:"Channel Right",waterway_left:"Waterway Left",waterway_right:"Waterway Right",danger_left:"Danger Left",danger_right:"Danger Right",preferred_channel_port:"Preferred Channel Port",preferred_channel_starboard:"Preferred Channel Starboard"}}},"seamark/buoy_lateral/colour":{key:"seamark:buoy_lateral:colour",type:"combo",label:"Color",strings:{options:{red:"Red",green:"Green","red;white;red;white":"Red-White-Red-White","green;white;green;white":"Green-White-Green-White","red;green;red":"Red-Green-Red","green;red;green":"Green-Red-Green",white:"White",yellow:"Yellow"}}},"seamark/buoy_lateral/shape":{key:"seamark:buoy_lateral:shape",type:"combo",label:"Shape"},"seamark/buoy_lateral/system":{key:"seamark:buoy_lateral:system",type:"combo",label:"System",strings:{options:{"iala-a":"IALA A","iala-b":"IALA B",cevni:"CEVNI",other:"Other"}}},"seamark/mooring/category":{key:"seamark:mooring:category",type:"combo",label:"Category"},"seamark/type":{key:"seamark:type",type:"combo",label:"Seamark"},"seamark/wreck/category":{key:"seamark:wreck:category",type:"combo",label:"Category"},seasonal:{key:"seasonal",type:"check",label:"Seasonal"},seats:{key:"seats",type:"number",minValue:0,label:"Seats",placeholder:"2, 4, 6..."},second_hand:{key:"second_hand",type:"combo",label:"Sells Used",placeholder:"Yes, No, Only",strings:{options:{yes:"Yes",no:"No",only:"Only"}}},self_service:{key:"self_service",type:"check",label:"Self-Service"},service_rail:{key:"service",type:"combo",label:"Service Type",strings:{options:{spur:"Spur",yard:"Yard",siding:"Siding",crossover:"Crossover"}}},service_times:{key:"service_times",type:"text",label:"Service Times"},service:{key:"service",type:"combo",label:"Type",options:["parking_aisle","driveway","alley","emergency_access","drive-through"]},"service/bicycle":{key:"service:bicycle:",type:"multiCombo",label:"Services"},"service/vehicle":{key:"service:vehicle:",type:"multiCombo",label:"Services"},shelter_type:{key:"shelter_type",type:"combo",label:"Type"},shelter:{key:"shelter",type:"check",label:"Shelter"},shop:{key:"shop",type:"typeCombo",label:"Type"},"siren/purpose":{key:"siren:purpose",type:"combo",label:"Purpose"},"siren/type":{key:"siren:type",type:"combo",label:"Type",strings:{options:{pneumatic:"Pneumatic",electronic:"Electronic",other:"Other"}}},site_type:{key:"site_type",type:"combo",label:"Site Type"},site:{key:"site",type:"combo",label:"Type"},smoking:{key:"smoking",type:"combo",label:"Smoking",placeholder:"No, Separated, Yes...",strings:{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:{key:"smoothness",type:"combo",label:"Smoothness",placeholder:"Thin Rollers, Wheels, Off-Road...",strings:{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:{key:"social_facility:for",type:"combo",label:"People Served"},social_facility:{key:"social_facility",type:"combo",label:"Type"},source:{key:"source",type:"semiCombo",icon:"source",universal:true,label:"Sources",snake_case:false,caseSensitive:true,options:["survey","local knowledge","gps","aerial imagery","streetlevel imagery"]},sport_ice:{key:"sport",type:"semiCombo",label:"Sports",options:["ice_skating","ice_hockey","multi","curling","ice_stock"]},sport_racing_motor:{key:"sport",type:"semiCombo",label:"Sports",options:["motor","karting","motocross"]},sport_racing_nonmotor:{key:"sport",type:"semiCombo",label:"Sports",options:["bmx","cycling","dog_racing","horse_racing","running"]},sport:{key:"sport",type:"semiCombo",label:"Sports"},stars:{key:"stars",type:"combo",label:"Stars"},start_date:{key:"start_date",type:"text",universal:true,label:"Start Date"},step_count:{key:"step_count",type:"number",minValue:0,label:"Number of Steps"},stop:{key:"stop",type:"combo",label:"Stop Type",strings:{options:{all:"All Ways",minor:"Minor Road"}}},street_cabinet:{key:"street_cabinet",type:"combo",label:"Type"},structure_waterway:{type:"structureRadio",keys:["tunnel"],label:"Structure",placeholder:"Unknown",strings:{options:{tunnel:"Tunnel"}}},structure:{type:"structureRadio",keys:["bridge","tunnel","embankment","cutting","ford"],label:"Structure",placeholder:"Unknown",strings:{options:{bridge:"Bridge",tunnel:"Tunnel",embankment:"Embankment",cutting:"Cutting",ford:"Ford"}}},studio:{key:"studio",type:"combo",label:"Type"},substance:{key:"substance",type:"combo",label:"Substance"},substation:{key:"substation",type:"typeCombo",label:"Type"},supervised:{key:"supervised",type:"check",label:"Supervised"},support:{key:"support",type:"combo",label:"Support"},surface:{key:"surface",type:"combo",label:"Surface"},surveillance:{key:"surveillance",type:"combo",label:"Surveillance Kind"},"surveillance/type":{key:"surveillance:type",type:"combo",label:"Surveillance Type",strings:{options:{camera:"Camera",guard:"Guard",ALPR:"Automatic License Plate Reader"}}},"surveillance/zone":{key:"surveillance:zone",type:"combo",label:"Surveillance Zone"},"survey/date":{key:"survey:date",type:"text",label:"Last Survey Date"},swimming_pool:{key:"swimming_pool",type:"combo",label:"Type"},"switch":{key:"switch",type:"combo",label:"Type",strings:{options:{mechanical:"Mechanical",circuit_breaker:"Circuit Breaker",disconnector:"Disconnector",earthing:"Earthing"}}},tactile_paving:{key:"tactile_paving",type:"check",label:"Tactile Paving"},takeaway:{key:"takeaway",type:"combo",label:"Takeaway",placeholder:"Yes, No, Takeaway Only...",strings:{options:{yes:"Yes",no:"No",only:"Takeaway Only"}}},target:{key:"target",type:"combo",label:"Target"},tidal:{key:"tidal",type:"check",label:"Tidal"},to:{key:"to",type:"text",label:"To"},"toilets/disposal":{key:"toilets:disposal",type:"combo",label:"Disposal",strings:{options:{flush:"Flush",pitlatrine:"Pit Latrine",chemical:"Chemical",bucket:"Bucket"}}},"toilets/handwashing":{key:"toilets:handwashing",type:"check",label:"Handwashing"},"toilets/position":{key:"toilets:position",type:"semiCombo",label:"Positions"},toll:{key:"toll",type:"check",label:"Toll"},tomb:{key:"tomb",type:"typeCombo",label:"Type"},tourism:{key:"tourism",type:"typeCombo",label:"Type"},"tower/construction":{key:"tower:construction",type:"combo",label:"Construction",placeholder:"Guyed, Lattice, Concealed, ..."},"tower/type":{key:"tower:type",type:"combo",label:"Type"},tracktype:{key:"tracktype",type:"combo",label:"Track Type",placeholder:"Solid, Mostly Solid, Soft...",strings:{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"}}},trade:{key:"trade",type:"typeCombo",label:"Type"},traffic_calming:{key:"traffic_calming",type:"typeCombo",label:"Type"},traffic_sign:{key:"traffic_sign",type:"typeCombo",label:"Traffic Sign"},"traffic_sign/direction":{key:"traffic_sign:direction",type:"combo",label:"Direction",strings:{options:{forward:"Forward",backward:"Backward",both:"Both / All"}}},traffic_signals:{key:"traffic_signals",type:"combo",label:"Type","default":"signal"},"traffic_signals/direction":{key:"traffic_signals:direction",type:"combo",label:"Direction",strings:{options:{forward:"Forward",backward:"Backward",both:"Both / All"}}},trail_visibility:{key:"trail_visibility",type:"combo",label:"Trail Visibility",placeholder:"Excellent, Good, Bad...",strings:{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"}}},transformer:{key:"transformer",type:"combo",label:"Type",strings:{options:{distribution:"Distribution",generator:"Generator",converter:"Converter",traction:"Traction",auto:"Autotransformer",phase_angle_regulator:"Phase Angle Regulator",auxiliary:"Auxiliary",yes:"Unknown"}}},trees:{key:"trees",type:"semiCombo",label:"Trees"},trolley_wire:{key:"trolley_wire",type:"check",label:"Overhead Trolley Wires"},tunnel:{key:"tunnel",type:"typeCombo",label:"Type",placeholder:"Default"},usage_rail:{key:"usage",type:"combo",label:"Usage Type",strings:{options:{main:"Main",branch:"Branch",industrial:"Industrial",military:"Military",test:"Test",tourism:"Tourism"}}},vending:{key:"vending",type:"semiCombo",label:"Types of Goods"},visibility:{key:"visibility",type:"combo",label:"Visibility",strings:{options:{house:"Up to 5m (16ft)",street:"5 to 20m (16 to 65ft)",area:"Over 20m (65ft)"}}},"volcano/status":{key:"volcano:status",type:"combo",label:"Volcano Status",strings:{options:{active:"Active",dormant:"Dormant",extinct:"Extinct"}}},"volcano/type":{key:"volcano:type",type:"combo",label:"Volcano Type",strings:{options:{stratovolcano:"Stratovolcano",shield:"Shield",scoria:"Scoria"}}},voltage_electrified:{key:"voltage",type:"combo",label:"Voltage",prerequisiteTag:{key:"electrified",valueNot:"no"}},voltage:{key:"voltage",type:"combo",label:"Voltage"},"voltage/primary":{key:"voltage:primary",type:"combo",label:"Primary Voltage"},"voltage/secondary":{key:"voltage:secondary",type:"combo",label:"Secondary Voltage"},"voltage/tertiary":{key:"voltage:tertiary",type:"combo",label:"Tertiary Voltage"},wall:{key:"wall",type:"combo",label:"Type"},water_point:{key:"water_point",type:"check",label:"Water Point"},water_source:{key:"water_source","default":"main",type:"combo",label:"Water Source"},water_volume:{key:"water_volume",type:"number",label:"Water Reserve Volume (m³)",snake_case:false},water:{key:"water",type:"combo",label:"Type"},waterway:{key:"waterway",type:"typeCombo",label:"Type"},website:{key:"website",type:"url",icon:"website",placeholder:"https://example.com",label:"Website"},wetland:{key:"wetland",type:"combo",label:"Type"},wheelchair:{key:"wheelchair",type:"radio",options:["yes","limited","no"],icon:"maki-wheelchair",label:"Wheelchair Access"},wholesale:{key:"wholesale",type:"typeCombo",label:"Wholesale"},width:{key:"width",type:"number",minValue:0,label:"Width (Meters)"},wikidata:{key:"wikidata",keys:["wikidata","wikipedia"],type:"wikidata",icon:"wikipedia",universal:true,label:"Wikidata"},wikipedia:{key:"wikipedia",keys:["wikipedia","wikidata"],type:"wikipedia",icon:"wikipedia",universal:true,label:"Wikipedia"},windings:{key:"windings",type:"number",minValue:1,label:"Windings",placeholder:"1, 2, 3..."},"windings/configuration":{key:"windings:configuration",type:"combo",label:"Windings Configuration",strings:{options:{star:"Star / Wye",delta:"Delta","open-delta":"Open Delta",zigzag:"Zig Zag",open:"Open",scott:"Scott",leblanc:"Leblanc"}}}};
24706 var quickselect = createCommonjsModule(function (module, exports) {
24707 (function (global, factory) {
24708 module.exports = factory();
24709 }(commonjsGlobal, (function () {
24710 function quickselect(arr, k, left, right, compare) {
24711 quickselectStep(arr, k, left || 0, right || (arr.length - 1), compare || defaultCompare);
24714 function quickselectStep(arr, k, left, right, compare) {
24716 while (right > left) {
24717 if (right - left > 600) {
24718 var n = right - left + 1;
24719 var m = k - left + 1;
24720 var z = Math.log(n);
24721 var s = 0.5 * Math.exp(2 * z / 3);
24722 var sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);
24723 var newLeft = Math.max(left, Math.floor(k - m * s / n + sd));
24724 var newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));
24725 quickselectStep(arr, k, newLeft, newRight, compare);
24732 swap(arr, left, k);
24733 if (compare(arr[right], t) > 0) swap(arr, left, right);
24739 while (compare(arr[i], t) < 0) i++;
24740 while (compare(arr[j], t) > 0) j--;
24743 if (compare(arr[left], t) === 0) swap(arr, left, j);
24746 swap(arr, j, right);
24749 if (j <= k) left = j + 1;
24750 if (k <= j) right = j - 1;
24754 function swap(arr, i, j) {
24760 function defaultCompare(a, b) {
24761 return a < b ? -1 : a > b ? 1 : 0;
24764 return quickselect;
24769 var rbush_1 = rbush;
24770 var default_1 = rbush;
24774 function rbush(maxEntries, format) {
24775 if (!(this instanceof rbush)) return new rbush(maxEntries, format);
24777 // max entries in a node is 9 by default; min node fill is 40% for best performance
24778 this._maxEntries = Math.max(4, maxEntries || 9);
24779 this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4));
24782 this._initFormat(format);
24788 rbush.prototype = {
24791 return this._all(this.data, []);
24794 search: function (bbox) {
24796 var node = this.data,
24798 toBBox = this.toBBox;
24800 if (!intersects$1(bbox, node)) return result;
24802 var nodesToSearch = [],
24803 i, len, child, childBBox;
24806 for (i = 0, len = node.children.length; i < len; i++) {
24808 child = node.children[i];
24809 childBBox = node.leaf ? toBBox(child) : child;
24811 if (intersects$1(bbox, childBBox)) {
24812 if (node.leaf) result.push(child);
24813 else if (contains$4(bbox, childBBox)) this._all(child, result);
24814 else nodesToSearch.push(child);
24817 node = nodesToSearch.pop();
24823 collides: function (bbox) {
24825 var node = this.data,
24826 toBBox = this.toBBox;
24828 if (!intersects$1(bbox, node)) return false;
24830 var nodesToSearch = [],
24831 i, len, child, childBBox;
24834 for (i = 0, len = node.children.length; i < len; i++) {
24836 child = node.children[i];
24837 childBBox = node.leaf ? toBBox(child) : child;
24839 if (intersects$1(bbox, childBBox)) {
24840 if (node.leaf || contains$4(bbox, childBBox)) return true;
24841 nodesToSearch.push(child);
24844 node = nodesToSearch.pop();
24850 load: function (data) {
24851 if (!(data && data.length)) return this;
24853 if (data.length < this._minEntries) {
24854 for (var i = 0, len = data.length; i < len; i++) {
24855 this.insert(data[i]);
24860 // recursively build the tree with the given data from scratch using OMT algorithm
24861 var node = this._build(data.slice(), 0, data.length - 1, 0);
24863 if (!this.data.children.length) {
24864 // save as is if tree is empty
24867 } else if (this.data.height === node.height) {
24868 // split root if trees have the same height
24869 this._splitRoot(this.data, node);
24872 if (this.data.height < node.height) {
24873 // swap trees if inserted one is bigger
24874 var tmpNode = this.data;
24879 // insert the small tree into the large tree at appropriate level
24880 this._insert(node, this.data.height - node.height - 1, true);
24886 insert: function (item) {
24887 if (item) this._insert(item, this.data.height - 1);
24891 clear: function () {
24892 this.data = createNode([]);
24896 remove: function (item, equalsFn) {
24897 if (!item) return this;
24899 var node = this.data,
24900 bbox = this.toBBox(item),
24903 i, parent, index, goingUp;
24905 // depth-first iterative tree traversal
24906 while (node || path.length) {
24908 if (!node) { // go up
24910 parent = path[path.length - 1];
24915 if (node.leaf) { // check current node
24916 index = findItem(item, node.children, equalsFn);
24918 if (index !== -1) {
24919 // item found, remove the item and condense tree upwards
24920 node.children.splice(index, 1);
24922 this._condense(path);
24927 if (!goingUp && !node.leaf && contains$4(node, bbox)) { // go down
24932 node = node.children[0];
24934 } else if (parent) { // go right
24936 node = parent.children[i];
24939 } else node = null; // nothing found
24945 toBBox: function (item) { return item; },
24947 compareMinX: compareNodeMinX,
24948 compareMinY: compareNodeMinY,
24950 toJSON: function () { return this.data; },
24952 fromJSON: function (data) {
24957 _all: function (node, result) {
24958 var nodesToSearch = [];
24960 if (node.leaf) result.push.apply(result, node.children);
24961 else nodesToSearch.push.apply(nodesToSearch, node.children);
24963 node = nodesToSearch.pop();
24968 _build: function (items, left, right, height) {
24970 var N = right - left + 1,
24971 M = this._maxEntries,
24975 // reached leaf level; return leaf
24976 node = createNode(items.slice(left, right + 1));
24977 calcBBox(node, this.toBBox);
24982 // target height of the bulk-loaded tree
24983 height = Math.ceil(Math.log(N) / Math.log(M));
24985 // target number of root entries to maximize storage utilization
24986 M = Math.ceil(N / Math.pow(M, height - 1));
24989 node = createNode([]);
24991 node.height = height;
24993 // split the items into M mostly square tiles
24995 var N2 = Math.ceil(N / M),
24996 N1 = N2 * Math.ceil(Math.sqrt(M)),
24997 i, j, right2, right3;
24999 multiSelect(items, left, right, N1, this.compareMinX);
25001 for (i = left; i <= right; i += N1) {
25003 right2 = Math.min(i + N1 - 1, right);
25005 multiSelect(items, i, right2, N2, this.compareMinY);
25007 for (j = i; j <= right2; j += N2) {
25009 right3 = Math.min(j + N2 - 1, right2);
25011 // pack each entry recursively
25012 node.children.push(this._build(items, j, right3, height - 1));
25016 calcBBox(node, this.toBBox);
25021 _chooseSubtree: function (bbox, node, level, path) {
25023 var i, len, child, targetNode, area, enlargement, minArea, minEnlargement;
25028 if (node.leaf || path.length - 1 === level) break;
25030 minArea = minEnlargement = Infinity;
25032 for (i = 0, len = node.children.length; i < len; i++) {
25033 child = node.children[i];
25034 area = bboxArea(child);
25035 enlargement = enlargedArea(bbox, child) - area;
25037 // choose entry with the least area enlargement
25038 if (enlargement < minEnlargement) {
25039 minEnlargement = enlargement;
25040 minArea = area < minArea ? area : minArea;
25041 targetNode = child;
25043 } else if (enlargement === minEnlargement) {
25044 // otherwise choose one with the smallest area
25045 if (area < minArea) {
25047 targetNode = child;
25052 node = targetNode || node.children[0];
25058 _insert: function (item, level, isNode) {
25060 var toBBox = this.toBBox,
25061 bbox = isNode ? item : toBBox(item),
25064 // find the best node for accommodating the item, saving all nodes along the path too
25065 var node = this._chooseSubtree(bbox, this.data, level, insertPath);
25067 // put the item into the node
25068 node.children.push(item);
25069 extend$1(node, bbox);
25071 // split on node overflow; propagate upwards if necessary
25072 while (level >= 0) {
25073 if (insertPath[level].children.length > this._maxEntries) {
25074 this._split(insertPath, level);
25079 // adjust bboxes along the insertion path
25080 this._adjustParentBBoxes(bbox, insertPath, level);
25083 // split overflowed node into two
25084 _split: function (insertPath, level) {
25086 var node = insertPath[level],
25087 M = node.children.length,
25088 m = this._minEntries;
25090 this._chooseSplitAxis(node, m, M);
25092 var splitIndex = this._chooseSplitIndex(node, m, M);
25094 var newNode = createNode(node.children.splice(splitIndex, node.children.length - splitIndex));
25095 newNode.height = node.height;
25096 newNode.leaf = node.leaf;
25098 calcBBox(node, this.toBBox);
25099 calcBBox(newNode, this.toBBox);
25101 if (level) insertPath[level - 1].children.push(newNode);
25102 else this._splitRoot(node, newNode);
25105 _splitRoot: function (node, newNode) {
25107 this.data = createNode([node, newNode]);
25108 this.data.height = node.height + 1;
25109 this.data.leaf = false;
25110 calcBBox(this.data, this.toBBox);
25113 _chooseSplitIndex: function (node, m, M) {
25115 var i, bbox1, bbox2, overlap, area, minOverlap, minArea, index;
25117 minOverlap = minArea = Infinity;
25119 for (i = m; i <= M - m; i++) {
25120 bbox1 = distBBox(node, 0, i, this.toBBox);
25121 bbox2 = distBBox(node, i, M, this.toBBox);
25123 overlap = intersectionArea(bbox1, bbox2);
25124 area = bboxArea(bbox1) + bboxArea(bbox2);
25126 // choose distribution with minimum overlap
25127 if (overlap < minOverlap) {
25128 minOverlap = overlap;
25131 minArea = area < minArea ? area : minArea;
25133 } else if (overlap === minOverlap) {
25134 // otherwise choose distribution with minimum area
25135 if (area < minArea) {
25145 // sorts node children by the best axis for split
25146 _chooseSplitAxis: function (node, m, M) {
25148 var compareMinX = node.leaf ? this.compareMinX : compareNodeMinX,
25149 compareMinY = node.leaf ? this.compareMinY : compareNodeMinY,
25150 xMargin = this._allDistMargin(node, m, M, compareMinX),
25151 yMargin = this._allDistMargin(node, m, M, compareMinY);
25153 // if total distributions margin value is minimal for x, sort by minX,
25154 // otherwise it's already sorted by minY
25155 if (xMargin < yMargin) node.children.sort(compareMinX);
25158 // total margin of all possible split distributions where each node is at least m full
25159 _allDistMargin: function (node, m, M, compare) {
25161 node.children.sort(compare);
25163 var toBBox = this.toBBox,
25164 leftBBox = distBBox(node, 0, m, toBBox),
25165 rightBBox = distBBox(node, M - m, M, toBBox),
25166 margin = bboxMargin(leftBBox) + bboxMargin(rightBBox),
25169 for (i = m; i < M - m; i++) {
25170 child = node.children[i];
25171 extend$1(leftBBox, node.leaf ? toBBox(child) : child);
25172 margin += bboxMargin(leftBBox);
25175 for (i = M - m - 1; i >= m; i--) {
25176 child = node.children[i];
25177 extend$1(rightBBox, node.leaf ? toBBox(child) : child);
25178 margin += bboxMargin(rightBBox);
25184 _adjustParentBBoxes: function (bbox, path, level) {
25185 // adjust bboxes along the given tree path
25186 for (var i = level; i >= 0; i--) {
25187 extend$1(path[i], bbox);
25191 _condense: function (path) {
25192 // go through the path, removing empty nodes and updating bboxes
25193 for (var i = path.length - 1, siblings; i >= 0; i--) {
25194 if (path[i].children.length === 0) {
25196 siblings = path[i - 1].children;
25197 siblings.splice(siblings.indexOf(path[i]), 1);
25199 } else this.clear();
25201 } else calcBBox(path[i], this.toBBox);
25205 _initFormat: function (format) {
25206 // data format (minX, minY, maxX, maxY accessors)
25208 // uses eval-type function compilation instead of just accepting a toBBox function
25209 // because the algorithms are very sensitive to sorting functions performance,
25210 // so they should be dead simple and without inner calls
25212 var compareArr = ['return a', ' - b', ';'];
25214 this.compareMinX = new Function('a', 'b', compareArr.join(format[0]));
25215 this.compareMinY = new Function('a', 'b', compareArr.join(format[1]));
25217 this.toBBox = new Function('a',
25218 'return {minX: a' + format[0] +
25219 ', minY: a' + format[1] +
25220 ', maxX: a' + format[2] +
25221 ', maxY: a' + format[3] + '};');
25225 function findItem(item, items, equalsFn) {
25226 if (!equalsFn) return items.indexOf(item);
25228 for (var i = 0; i < items.length; i++) {
25229 if (equalsFn(item, items[i])) return i;
25234 // calculate node's bbox from bboxes of its children
25235 function calcBBox(node, toBBox) {
25236 distBBox(node, 0, node.children.length, toBBox, node);
25239 // min bounding rectangle of node children from k to p-1
25240 function distBBox(node, k, p, toBBox, destNode) {
25241 if (!destNode) destNode = createNode(null);
25242 destNode.minX = Infinity;
25243 destNode.minY = Infinity;
25244 destNode.maxX = -Infinity;
25245 destNode.maxY = -Infinity;
25247 for (var i = k, child; i < p; i++) {
25248 child = node.children[i];
25249 extend$1(destNode, node.leaf ? toBBox(child) : child);
25255 function extend$1(a, b) {
25256 a.minX = Math.min(a.minX, b.minX);
25257 a.minY = Math.min(a.minY, b.minY);
25258 a.maxX = Math.max(a.maxX, b.maxX);
25259 a.maxY = Math.max(a.maxY, b.maxY);
25263 function compareNodeMinX(a, b) { return a.minX - b.minX; }
25264 function compareNodeMinY(a, b) { return a.minY - b.minY; }
25266 function bboxArea(a) { return (a.maxX - a.minX) * (a.maxY - a.minY); }
25267 function bboxMargin(a) { return (a.maxX - a.minX) + (a.maxY - a.minY); }
25269 function enlargedArea(a, b) {
25270 return (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) *
25271 (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY));
25274 function intersectionArea(a, b) {
25275 var minX = Math.max(a.minX, b.minX),
25276 minY = Math.max(a.minY, b.minY),
25277 maxX = Math.min(a.maxX, b.maxX),
25278 maxY = Math.min(a.maxY, b.maxY);
25280 return Math.max(0, maxX - minX) *
25281 Math.max(0, maxY - minY);
25284 function contains$4(a, b) {
25285 return a.minX <= b.minX &&
25286 a.minY <= b.minY &&
25287 b.maxX <= a.maxX &&
25291 function intersects$1(a, b) {
25292 return b.minX <= a.maxX &&
25293 b.minY <= a.maxY &&
25294 b.maxX >= a.minX &&
25298 function createNode(children) {
25300 children: children,
25310 // sort an array so that items come in groups of n unsorted items, with groups sorted between each other;
25311 // combines selection algorithm with binary divide & conquer approach
25313 function multiSelect(arr, left, right, n, compare) {
25314 var stack = [left, right],
25317 while (stack.length) {
25318 right = stack.pop();
25319 left = stack.pop();
25321 if (right - left <= n) continue;
25323 mid = left + Math.ceil((right - left) / n / 2) * n;
25324 quickselect(arr, mid, left, right, compare);
25326 stack.push(left, mid, mid, right);
25329 rbush_1.default = default_1;
25331 var lineclip_1 = lineclip;
25333 lineclip.polyline = lineclip;
25334 lineclip.polygon = polygonclip;
25337 // Cohen-Sutherland line clippign algorithm, adapted to efficiently
25338 // handle polylines rather than just segments
25340 function lineclip(points, bbox, result) {
25342 var len = points.length,
25343 codeA = bitCode(points[0], bbox),
25345 i, a, b, codeB, lastCode;
25347 if (!result) result = [];
25349 for (i = 1; i < len; i++) {
25352 codeB = lastCode = bitCode(b, bbox);
25356 if (!(codeA | codeB)) { // accept
25359 if (codeB !== lastCode) { // segment went outside
25362 if (i < len - 1) { // start a new line
25366 } else if (i === len - 1) {
25371 } else if (codeA & codeB) { // trivial reject
25374 } else if (codeA) { // a outside, intersect with clip edge
25375 a = intersect$1(a, b, codeA, bbox);
25376 codeA = bitCode(a, bbox);
25378 } else { // b outside
25379 b = intersect$1(a, b, codeB, bbox);
25380 codeB = bitCode(b, bbox);
25387 if (part.length) result.push(part);
25392 // Sutherland-Hodgeman polygon clipping algorithm
25394 function polygonclip(points, bbox) {
25396 var result, edge, prev, prevInside, i, p, inside;
25398 // clip against each side of the clip rectangle
25399 for (edge = 1; edge <= 8; edge *= 2) {
25401 prev = points[points.length - 1];
25402 prevInside = !(bitCode(prev, bbox) & edge);
25404 for (i = 0; i < points.length; i++) {
25406 inside = !(bitCode(p, bbox) & edge);
25408 // if segment goes through the clip window, add an intersection
25409 if (inside !== prevInside) result.push(intersect$1(prev, p, edge, bbox));
25411 if (inside) result.push(p); // add a point if it's inside
25414 prevInside = inside;
25419 if (!points.length) break;
25425 // intersect a segment against one of the 4 lines that make up the bbox
25427 function intersect$1(a, b, edge, bbox) {
25428 return edge & 8 ? [a[0] + (b[0] - a[0]) * (bbox[3] - a[1]) / (b[1] - a[1]), bbox[3]] : // top
25429 edge & 4 ? [a[0] + (b[0] - a[0]) * (bbox[1] - a[1]) / (b[1] - a[1]), bbox[1]] : // bottom
25430 edge & 2 ? [bbox[2], a[1] + (b[1] - a[1]) * (bbox[2] - a[0]) / (b[0] - a[0])] : // right
25431 edge & 1 ? [bbox[0], a[1] + (b[1] - a[1]) * (bbox[0] - a[0]) / (b[0] - a[0])] : // left
25435 // bit code reflects the point position relative to the bbox:
25438 // top 1001 1000 1010
25439 // mid 0001 0000 0010
25440 // bottom 0101 0100 0110
25442 function bitCode(p, bbox) {
25445 if (p[0] < bbox[0]) code |= 1; // left
25446 else if (p[0] > bbox[2]) code |= 2; // right
25448 if (p[1] < bbox[1]) code |= 4; // bottom
25449 else if (p[1] > bbox[3]) code |= 8; // top
25454 var whichPolygon_1 = whichPolygon;
25456 function whichPolygon(data) {
25458 for (var i = 0; i < data.features.length; i++) {
25459 var feature = data.features[i];
25460 var coords = feature.geometry.coordinates;
25462 if (feature.geometry.type === 'Polygon') {
25463 bboxes.push(treeItem(coords, feature.properties));
25465 } else if (feature.geometry.type === 'MultiPolygon') {
25466 for (var j = 0; j < coords.length; j++) {
25467 bboxes.push(treeItem(coords[j], feature.properties));
25472 var tree = rbush_1().load(bboxes);
25474 function query(p, multi) {
25476 result = tree.search({
25482 for (var i = 0; i < result.length; i++) {
25483 if (insidePolygon(result[i].coords, p)) {
25485 output.push(result[i].props);
25487 return result[i].props;
25490 return multi && output.length ? output : null;
25494 query.bbox = function queryBBox(bbox) {
25496 var result = tree.search({
25502 for (var i = 0; i < result.length; i++) {
25503 if (polygonIntersectsBBox(result[i].coords, bbox)) {
25504 output.push(result[i].props);
25513 function polygonIntersectsBBox(polygon, bbox) {
25515 (bbox[0] + bbox[2]) / 2,
25516 (bbox[1] + bbox[3]) / 2
25518 if (insidePolygon(polygon, bboxCenter)) return true;
25519 for (var i = 0; i < polygon.length; i++) {
25520 if (lineclip_1(polygon[i], bbox).length > 0) return true;
25525 // ray casting algorithm for detecting if point is in polygon
25526 function insidePolygon(rings, p) {
25527 var inside = false;
25528 for (var i = 0, len = rings.length; i < len; i++) {
25529 var ring = rings[i];
25530 for (var j = 0, len2 = ring.length, k = len2 - 1; j < len2; k = j++) {
25531 if (rayIntersect(p, ring[j], ring[k])) inside = !inside;
25537 function rayIntersect(p, p1, p2) {
25538 return ((p1[1] > p[1]) !== (p2[1] > p[1])) && (p[0] < (p2[0] - p1[0]) * (p[1] - p1[1]) / (p2[1] - p1[1]) + p1[0]);
25541 function treeItem(coords, props) {
25551 for (var i = 0; i < coords[0].length; i++) {
25552 var p = coords[0][i];
25553 item.minX = Math.min(item.minX, p[0]);
25554 item.minY = Math.min(item.minY, p[1]);
25555 item.maxX = Math.max(item.maxX, p[0]);
25556 item.maxY = Math.max(item.maxY, p[1]);
25561 // index the osm-community-index
25562 var ociFeatureCollection = Object.values(features$2).map(function(feature) {
25563 // workaround for which-polygon: only supports `properties`, not `id`
25564 // https://github.com/mapbox/which-polygon/pull/6
25565 feature.properties = {
25567 area: d3_geoArea(feature) // also precompute areas
25575 features: features$2,
25576 resources: resources,
25577 query: whichPolygon_1({
25578 type: 'FeatureCollection',
25579 features: ociFeatureCollection
25582 imagery: dataImagery, //legacy
25585 defaults: defaults,
25586 categories: categories,
25591 // http://2ality.com/2015/01/es6-set-operations.html
25593 // Difference (a \ b): create a set that contains those elements of set a that are not in set b.
25594 // This operation is also sometimes called minus (-).
25595 // var a = [1,2,3];
25596 // var b = [4,3,2];
25597 // utilArrayDifference(a, b)
25599 // utilArrayDifference(b, a)
25601 function utilArrayDifference(a, b) {
25602 var other = new Set(b);
25603 return Array.from(new Set(a))
25604 .filter(function(v) { return !other.has(v); });
25607 // Intersection (a ∩ b): create a set that contains those elements of set a that are also in set b.
25608 // var a = [1,2,3];
25609 // var b = [4,3,2];
25610 // utilArrayIntersection(a, b)
25612 function utilArrayIntersection(a, b) {
25613 var other = new Set(b);
25614 return Array.from(new Set(a))
25615 .filter(function(v) { return other.has(v); });
25618 // Union (a ∪ b): create a set that contains the elements of both set a and set b.
25619 // var a = [1,2,3];
25620 // var b = [4,3,2];
25621 // utilArrayUnion(a, b)
25623 function utilArrayUnion(a, b) {
25624 var result = new Set(a);
25625 b.forEach(function(v) { result.add(v); });
25626 return Array.from(result);
25629 // Returns an Array with all the duplicates removed
25630 // var a = [1,1,2,3,3];
25631 // utilArrayUniq(a)
25633 function utilArrayUniq(a) {
25634 return Array.from(new Set(a));
25638 // Splits array into chunks of given chunk size
25639 // var a = [1,2,3,4,5,6,7];
25640 // utilArrayChunk(a, 3);
25641 // [[1,2,3],[4,5,6],[7]];
25642 function utilArrayChunk(a, chunkSize) {
25643 if (!chunkSize || chunkSize < 0) return [a.slice()];
25645 var result = new Array(Math.ceil(a.length / chunkSize));
25646 return Array.from(result, function(item, i) {
25647 return a.slice(i * chunkSize, i * chunkSize + chunkSize);
25652 // Flattens two level array into a single level
25653 // var a = [[1,2,3],[4,5,6],[7]];
25654 // utilArrayFlatten(a);
25655 // [1,2,3,4,5,6,7];
25656 function utilArrayFlatten(a) {
25657 return a.reduce(function(acc, val) {
25658 return acc.concat(val);
25663 // Groups the items of the Array according to the given key
25664 // `key` can be passed as a property or as a key function
25667 // { type: 'Dog', name: 'Spot' },
25668 // { type: 'Cat', name: 'Tiger' },
25669 // { type: 'Dog', name: 'Rover' },
25670 // { type: 'Cat', name: 'Leo' }
25673 // utilArrayGroupBy(pets, 'type')
25675 // 'Dog': [{type: 'Dog', name: 'Spot'}, {type: 'Dog', name: 'Rover'}],
25676 // 'Cat': [{type: 'Cat', name: 'Tiger'}, {type: 'Cat', name: 'Leo'}]
25679 // utilArrayGroupBy(pets, function(item) { return item.name.length; })
25681 // 3: [{type: 'Cat', name: 'Leo'}],
25682 // 4: [{type: 'Dog', name: 'Spot'}],
25683 // 5: [{type: 'Cat', name: 'Tiger'}, {type: 'Dog', name: 'Rover'}]
25685 function utilArrayGroupBy(a, key) {
25686 return a.reduce(function(acc, item) {
25687 var group = (typeof key === 'function') ? key(item) : item[key];
25688 (acc[group] = acc[group] || []).push(item);
25694 // Returns an Array with all the duplicates removed
25695 // where uniqueness determined by the given key
25696 // `key` can be passed as a property or as a key function
25699 // { type: 'Dog', name: 'Spot' },
25700 // { type: 'Cat', name: 'Tiger' },
25701 // { type: 'Dog', name: 'Rover' },
25702 // { type: 'Cat', name: 'Leo' }
25705 // utilArrayUniqBy(pets, 'type')
25707 // { type: 'Dog', name: 'Spot' },
25708 // { type: 'Cat', name: 'Tiger' }
25711 // utilArrayUniqBy(pets, function(item) { return item.name.length; })
25713 // { type: 'Dog', name: 'Spot' },
25714 // { type: 'Cat', name: 'Tiger' },
25715 // { type: 'Cat', name: 'Leo' }
25717 function utilArrayUniqBy(a, key) {
25718 var seen = new Set();
25719 return a.reduce(function(acc, item) {
25720 var val = (typeof key === 'function') ? key(item) : item[key];
25721 if (val && !seen.has(val)) {
25729 var remove$1 = removeDiacritics;
25731 var replacementList = [
25740 chars: "\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F",
25746 chars: "\u00C6\u01FC\u01E2",
25755 chars: "\uA738\uA73A",
25761 chars: "\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0181",
25764 chars: "\u24b8\uff23\uA73E\u1E08\u0106\u0043\u0108\u010A\u010C\u00C7\u0187\u023B",
25767 chars: "\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018A\u0189\u1D05\uA779",
25773 chars: "\u01F1\u01C4",
25776 chars: "\u01F2\u01C5",
25779 chars: "\u025B\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E\u1D07",
25782 chars: "\uA77C\u24BB\uFF26\u1E1E\u0191\uA77B",
25785 chars: "\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E\u0262",
25788 chars: "\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D",
25791 chars: "\u24BE\uFF29\xCC\xCD\xCE\u0128\u012A\u012C\u0130\xCF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197",
25794 chars: "\u24BF\uFF2A\u0134\u0248\u0237",
25797 chars: "\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2",
25800 chars: "\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780",
25809 chars: "\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C\u03FB",
25812 chars: "\uA7A4\u0220\u24C3\uFF2E\u01F8\u0143\xD1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u019D\uA790\u1D0E",
25821 chars: "\u24C4\uFF2F\xD2\xD3\xD4\u1ED2\u1ED0\u1ED6\u1ED4\xD5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\xD6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\xD8\u01FE\u0186\u019F\uA74A\uA74C",
25836 chars: "\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754",
25839 chars: "\u24C6\uFF31\uA756\uA758\u024A",
25842 chars: "\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782",
25845 chars: "\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784",
25848 chars: "\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786",
25857 chars: "\u24CA\uFF35\xD9\xDA\xDB\u0168\u1E78\u016A\u1E7A\u016C\xDC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244",
25860 chars: "\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245",
25866 chars: "\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72",
25869 chars: "\u24CD\uFF38\u1E8A\u1E8C",
25872 chars: "\u24CE\uFF39\u1EF2\xDD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE",
25875 chars: "\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762",
25878 chars: "\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250\u0251",
25884 chars: "\u00E6\u01FD\u01E3",
25893 chars: "\uA739\uA73B",
25899 chars: "\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253\u0182",
25902 chars: "\uFF43\u24D2\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184",
25905 chars: "\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\u018B\u13E7\u0501\uA7AA",
25911 chars: "\u01F3\u01C6",
25914 chars: "\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u01DD",
25917 chars: "\u24D5\uFF46\u1E1F\u0192",
25935 chars: "\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\uA77F\u1D79",
25938 chars: "\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265",
25944 chars: "\u24D8\uFF49\xEC\xED\xEE\u0129\u012B\u012D\xEF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131",
25947 chars: "\u24D9\uFF4A\u0135\u01F0\u0249",
25950 chars: "\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3",
25953 chars: "\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747\u026D",
25959 chars: "\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F",
25962 chars: "\u24DD\uFF4E\u01F9\u0144\xF1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5\u043B\u0509",
25968 chars: "\u24DE\uFF4F\xF2\xF3\xF4\u1ED3\u1ED1\u1ED7\u1ED5\xF5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\xF6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\xF8\u01FF\uA74B\uA74D\u0275\u0254\u1D11",
25983 chars: "\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755\u03C1",
25986 chars: "\u24E0\uFF51\u024B\uA757\uA759",
25989 chars: "\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783",
25992 chars: "\u24E2\uFF53\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B\u0282",
25998 chars: "\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787",
26007 chars: "\u24E4\uFF55\xF9\xFA\xFB\u0169\u1E79\u016B\u1E7B\u016D\xFC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289",
26010 chars: "\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C",
26016 chars: "\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73",
26019 chars: "\u24E7\uFF58\u1E8B\u1E8D",
26022 chars: "\u24E8\uFF59\u1EF3\xFD\u0177\u1EF9\u0233\u1E8F\xFF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF",
26025 chars: "\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763",
26029 var diacriticsMap = {};
26030 for (var i$1 = 0; i$1 < replacementList.length; i$1 += 1) {
26031 var chars = replacementList[i$1].chars;
26032 for (var j = 0; j < chars.length; j += 1) {
26033 diacriticsMap[chars[j]] = replacementList[i$1].base;
26037 function removeDiacritics(str) {
26038 return str.replace(/[^\u0000-\u007e]/g, function(c) {
26039 return diacriticsMap[c] || c;
26043 var replacementList_1 = replacementList;
26044 var diacriticsMap_1 = diacriticsMap;
26048 replacementList: replacementList_1,
26049 diacriticsMap: diacriticsMap_1
26052 var isArabic_1 = createCommonjsModule(function (module, exports) {
26053 Object.defineProperty(exports, "__esModule", { value: true });
26054 var arabicBlocks = [
26060 [0x10E60, 0x10E7F],
26061 [0x1EC70, 0x1ECBF],
26062 [0x1EE00, 0x1EEFF] // Mathematical Alphabetic symbols https://www.unicode.org/charts/PDF/U1EE00.pdf
26064 function isArabic(char) {
26065 if (char.length > 1) {
26066 // allow the newer chars?
26067 throw new Error('isArabic works on only one-character strings');
26069 var code = char.charCodeAt(0);
26070 for (var i = 0; i < arabicBlocks.length; i++) {
26071 var block = arabicBlocks[i];
26072 if (code >= block[0] && code <= block[1]) {
26078 exports.isArabic = isArabic;
26079 function isMath(char) {
26080 if (char.length > 2) {
26081 // allow the newer chars?
26082 throw new Error('isMath works on only one-character strings');
26084 var code = char.charCodeAt(0);
26085 return (code >= 0x660 && code <= 0x66C);
26087 exports.isMath = isMath;
26090 unwrapExports(isArabic_1);
26091 var isArabic_2 = isArabic_1.isArabic;
26092 var isArabic_3 = isArabic_1.isMath;
26094 var unicodeArabic = createCommonjsModule(function (module, exports) {
26095 Object.defineProperty(exports, "__esModule", { value: true });
26096 var arabicReference = {
26106 "isolated": "\uFE81",
26114 "isolated": "\uFE83",
26122 "isolated": "\uFE87",
26126 "normal": "\u0671",
26127 "isolated": "\uFB50",
26130 "wavy_hamza_above": [
26133 "wavy_hamza_below": [
26141 "indic_two_above": [
26144 "indic_three_above": [
26152 "isolated": "\uFD3D"
26154 "isolated": "\uFE8D",
26164 "three_dots_horizontally_below": [
26167 "dot_below_three_dots_above": [
26170 "three_dots_pointing_upwards_below": [
26173 "three_dots_pointing_upwards_below_two_dots_above": [
26176 "two_dots_below_dot_above": [
26179 "inverted_small_v_below": [
26191 "small_meem_above": [
26194 "isolated": "\uFE8F",
26196 "initial": "\uFE91",
26203 "isolated": "\uFE93",
26213 "three_dots_above_downwards": [
26216 "small_teh_above": [
26219 "isolated": "\uFE95",
26221 "initial": "\uFE97",
26228 "isolated": "\uFE99",
26230 "initial": "\uFE9B",
26237 "two_dots_above": [
26240 "isolated": "\uFE9D",
26242 "initial": "\uFE9F",
26252 "two_dots_vertical_above": [
26255 "three_dots_above": [
26258 "two_dots_above": [
26261 "three_dots_pointing_upwards_below": [
26264 "small_tah_below": [
26267 "small_tah_two_dots": [
26270 "small_tah_above": [
26273 "indic_four_below": [
26276 "isolated": "\uFEA1",
26278 "initial": "\uFEA3",
26285 "isolated": "\uFEA5",
26287 "initial": "\uFEA7",
26300 "dot_below_small_tah": [
26303 "three_dots_above_downwards": [
26306 "four_dots_above": [
26312 "two_dots_vertically_below_small_tah": [
26315 "inverted_small_v_below": [
26318 "three_dots_below": [
26321 "isolated": "\uFEA9",
26328 "isolated": "\uFEAB",
26347 "dot_below_dot_above": [
26350 "two_dots_above": [
26353 "four_dots_above": [
26362 "two_dots_vertically_above": [
26368 "small_tah_two_dots": [
26374 "small_noon_above": [
26377 "isolated": "\uFEAD",
26384 "inverted_v_above": [
26387 "isolated": "\uFEAF",
26394 "dot_below_dot_above": [
26397 "three_dots_below": [
26400 "three_dots_below_three_dots_above": [
26403 "four_dots_above": [
26406 "two_dots_vertically_above": [
26409 "small_tah_two_dots": [
26412 "indic_four_above": [
26418 "isolated": "\uFEB1",
26420 "initial": "\uFEB3",
26430 "isolated": "\uFEB5",
26432 "initial": "\uFEB7",
26439 "two_dots_below": [
26442 "three_dots_above": [
26445 "three_dots_below": [
26448 "isolated": "\uFEB9",
26450 "initial": "\uFEBB",
26460 "isolated": "\uFEBD",
26462 "initial": "\uFEBF",
26469 "three_dots_above": [
26472 "two_dots_above": [
26475 "isolated": "\uFEC1",
26477 "initial": "\uFEC3",
26484 "isolated": "\uFEC5",
26486 "initial": "\uFEC7",
26493 "three_dots_above": [
26496 "two_dots_above": [
26499 "three_dots_pointing_downwards_above": [
26502 "two_dots_vertically_above": [
26505 "three_dots_below": [
26508 "isolated": "\uFEC9",
26510 "initial": "\uFECB",
26520 "isolated": "\uFECD",
26522 "initial": "\uFECF",
26532 "dot_moved_below": [
26538 "three_dots_below": [
26541 "two_dots_below": [
26544 "three_dots_pointing_upwards_below": [
26547 "dot_below_three_dots_above": [
26550 "isolated": "\uFED1",
26552 "initial": "\uFED3",
26565 "three_dots_above": [
26571 "isolated": "\uFED5",
26573 "initial": "\uFED7",
26589 "three_dots_below": [
26592 "two_dots_above": [
26598 "isolated": "\uFED9",
26600 "initial": "\uFEDB",
26613 "three_dots_above": [
26616 "three_dots_below": [
26625 "isolated": "\uFEDD",
26627 "initial": "\uFEDF",
26640 "three_dots_above": [
26643 "isolated": "\uFEE1",
26645 "initial": "\uFEE3",
26658 "three_dots_above": [
26661 "two_dots_below": [
26670 "isolated": "\uFEE5",
26672 "initial": "\uFEE7",
26679 "isolated": "\uFEE9",
26681 "initial": "\uFEEB",
26693 "isolated": "\uFE85",
26703 "two_dots_above": [
26709 "indic_two_above": [
26712 "indic_three_above": [
26718 "isolated": "\uFEED",
26729 "initial": "\uFBE8",
26730 "medial": "\uFBE9",
26731 "isolated": "\uFEEF",
26743 "isolated": "\uFE89",
26745 "initial": "\uFE8B",
26748 "two_dots_below_hamza_above": [
26761 "three_dots_below": [
26764 "two_dots_below_dot_above": [
26767 "two_dots_below_small_noon_above": [
26770 "isolated": "\uFEF1",
26772 "initial": "\uFEF3",
26779 "isolated": "\uFB66",
26781 "initial": "\uFB68",
26788 "isolated": "\uFB5E",
26790 "initial": "\uFB60",
26797 "isolated": "\uFB52",
26799 "initial": "\uFB54",
26806 "small_meem_above": [
26809 "isolated": "\uFB56",
26811 "initial": "\uFB58",
26818 "isolated": "\uFB62",
26820 "initial": "\uFB64",
26827 "isolated": "\uFB5A",
26829 "initial": "\uFB5C",
26836 "isolated": "\uFB76",
26838 "initial": "\uFB78",
26845 "isolated": "\uFB72",
26847 "initial": "\uFB74",
26857 "isolated": "\uFB7A",
26859 "initial": "\uFB7C",
26866 "isolated": "\uFB7E",
26868 "initial": "\uFB80",
26875 "isolated": "\uFB88",
26882 "isolated": "\uFB84",
26889 "isolated": "\uFB82",
26897 "isolated": "\uFB86",
26904 "isolated": "\uFB8C",
26911 "isolated": "\uFB8A",
26918 "isolated": "\uFB6A",
26920 "initial": "\uFB6C",
26927 "isolated": "\uFB6E",
26929 "initial": "\uFB70",
26939 "three_dots_above": [
26942 "three_dots_pointing_upwards_below": [
26945 "isolated": "\uFB8E",
26947 "initial": "\uFB90",
26954 "isolated": "\uFBD3",
26956 "initial": "\uFBD5",
26966 "two_dots_below": [
26969 "three_dots_above": [
26972 "inverted_stroke": [
26975 "isolated": "\uFB92",
26977 "initial": "\uFB94",
26984 "isolated": "\uFB9A",
26986 "initial": "\uFB9C",
26993 "isolated": "\uFB96",
26995 "initial": "\uFB98",
27002 "isolated": "\uFB9E",
27009 "isolated": "\uFBA0",
27011 "initial": "\uFBA2",
27014 "heh doachashmee": {
27018 "isolated": "\uFBAA",
27020 "initial": "\uFBAC",
27031 "isolated": "\uFBA6",
27033 "initial": "\uFBA8",
27036 "teh marbuta goal": {
27045 "isolated": "\uFBE0",
27052 "isolated": "\uFBD9",
27064 "isolated": "\uFBDD"
27066 "isolated": "\uFBD7",
27073 "isolated": "\uFBDB",
27080 "isolated": "\uFBE2",
27087 "isolated": "\uFBDE",
27094 "indic_two_above": [
27097 "indic_three_above": [
27100 "indic_four_above": [
27103 "isolated": "\uFBFC",
27105 "initial": "\uFBFE",
27112 "isolated": "\uFBE4",
27114 "initial": "\uFBE6",
27126 "isolated": "\uFBB0",
27129 "indic_two_above": [
27132 "indic_three_above": [
27135 "isolated": "\uFBAE",
27142 "isolated": "\u06D5",
27149 "isolated": "\uFBA4",
27184 exports.default = arabicReference;
27187 unwrapExports(unicodeArabic);
27189 var unicodeLigatures = createCommonjsModule(function (module, exports) {
27190 Object.defineProperty(exports, "__esModule", { value: true });
27191 var ligatureReference = {
27193 "isolated": "\uFBEA",
27197 "isolated": "\uFBEC",
27201 "isolated": "\uFBEE",
27205 "isolated": "\uFBF0",
27209 "isolated": "\uFBF2",
27213 "isolated": "\uFBF4",
27217 "isolated": "\uFBF6",
27219 "initial": "\uFBF8"
27222 "uighur_kirghiz": {
27223 "isolated": "\uFBF9",
27225 "initial": "\uFBFB"
27227 "isolated": "\uFC03",
27231 "isolated": "\uFC00",
27232 "initial": "\uFC97"
27235 "isolated": "\uFC01",
27236 "initial": "\uFC98"
27239 "isolated": "\uFC02",
27241 "initial": "\uFC9A",
27245 "isolated": "\uFC04",
27249 "isolated": "\uFC05",
27250 "initial": "\uFC9C"
27253 "isolated": "\uFC06",
27254 "initial": "\uFC9D"
27257 "isolated": "\uFC07",
27258 "initial": "\uFC9E"
27261 "isolated": "\uFC08",
27263 "initial": "\uFC9F",
27267 "isolated": "\uFC09",
27271 "isolated": "\uFC0A",
27275 "isolated": "\uFC0B",
27276 "initial": "\uFCA1"
27279 "isolated": "\uFC0C",
27280 "initial": "\uFCA2"
27283 "isolated": "\uFC0D",
27284 "initial": "\uFCA3"
27287 "isolated": "\uFC0E",
27289 "initial": "\uFCA4",
27293 "isolated": "\uFC0F",
27297 "isolated": "\uFC10",
27301 "isolated": "\uFC11"
27304 "isolated": "\uFC12",
27306 "initial": "\uFCA6",
27310 "isolated": "\uFC13",
27314 "isolated": "\uFC14"
27317 "isolated": "\uFC15",
27318 "initial": "\uFCA7"
27321 "isolated": "\uFC16",
27322 "initial": "\uFCA8"
27325 "isolated": "\uFC17",
27326 "initial": "\uFCA9"
27329 "isolated": "\uFC18",
27330 "initial": "\uFCAA"
27333 "isolated": "\uFC19",
27334 "initial": "\uFCAB"
27337 "isolated": "\uFC1A"
27340 "isolated": "\uFC1B",
27341 "initial": "\uFCAC"
27344 "isolated": "\uFC1C",
27345 "initial": "\uFCAD",
27349 "isolated": "\uFC1D",
27350 "initial": "\uFCAE",
27354 "isolated": "\uFC1E",
27355 "initial": "\uFCAF",
27359 "isolated": "\uFC1F",
27360 "initial": "\uFCB0",
27364 "isolated": "\uFC20",
27365 "initial": "\uFCB1"
27368 "isolated": "\uFC21",
27369 "initial": "\uFCB3"
27372 "isolated": "\uFC22",
27373 "initial": "\uFCB4"
27376 "isolated": "\uFC23",
27377 "initial": "\uFCB5"
27380 "isolated": "\uFC24",
27381 "initial": "\uFCB6"
27384 "isolated": "\uFC25",
27385 "initial": "\uFCB7"
27388 "isolated": "\uFC26",
27389 "initial": "\uFCB8"
27392 "isolated": "\uFC27",
27393 "initial": "\uFD33",
27397 "isolated": "\uFC28",
27398 "initial": "\uFCB9",
27402 "isolated": "\uFC29",
27403 "initial": "\uFCBA"
27406 "isolated": "\uFC2A",
27407 "initial": "\uFCBB"
27410 "isolated": "\uFC2B",
27411 "initial": "\uFCBC"
27414 "isolated": "\uFC2C",
27415 "initial": "\uFCBD"
27418 "isolated": "\uFC2D",
27419 "initial": "\uFCBE"
27422 "isolated": "\uFC2E",
27423 "initial": "\uFCBF"
27426 "isolated": "\uFC2F",
27427 "initial": "\uFCC0"
27430 "isolated": "\uFC30",
27431 "initial": "\uFCC1"
27434 "isolated": "\uFC31",
27438 "isolated": "\uFC32",
27442 "isolated": "\uFC33",
27443 "initial": "\uFCC2"
27446 "isolated": "\uFC34",
27447 "initial": "\uFCC3"
27450 "isolated": "\uFC35",
27454 "isolated": "\uFC36",
27458 "isolated": "\uFC37",
27462 "isolated": "\uFC38",
27463 "initial": "\uFCC4"
27466 "isolated": "\uFC39",
27467 "initial": "\uFCC5"
27470 "isolated": "\uFC3A",
27471 "initial": "\uFCC6"
27474 "isolated": "\uFC3B",
27476 "initial": "\uFCC7",
27480 "isolated": "\uFC3C",
27482 "initial": "\uFCC8",
27486 "isolated": "\uFC3D",
27490 "isolated": "\uFC3E",
27494 "isolated": "\uFC3F",
27495 "initial": "\uFCC9"
27498 "isolated": "\uFC40",
27499 "initial": "\uFCCA"
27502 "isolated": "\uFC41",
27503 "initial": "\uFCCB"
27506 "isolated": "\uFC42",
27508 "initial": "\uFCCC",
27512 "isolated": "\uFC43",
27516 "isolated": "\uFC44",
27520 "isolated": "\uFC45",
27521 "initial": "\uFCCE"
27524 "isolated": "\uFC46",
27525 "initial": "\uFCCF"
27528 "isolated": "\uFC47",
27529 "initial": "\uFCD0"
27532 "isolated": "\uFC48",
27534 "initial": "\uFCD1"
27537 "isolated": "\uFC49"
27540 "isolated": "\uFC4A"
27543 "isolated": "\uFC4B",
27544 "initial": "\uFCD2"
27547 "isolated": "\uFC4C",
27548 "initial": "\uFCD3"
27551 "isolated": "\uFC4D",
27552 "initial": "\uFCD4"
27555 "isolated": "\uFC4E",
27557 "initial": "\uFCD5",
27561 "isolated": "\uFC4F",
27565 "isolated": "\uFC50",
27569 "isolated": "\uFC51",
27570 "initial": "\uFCD7"
27573 "isolated": "\uFC52",
27574 "initial": "\uFCD8"
27577 "isolated": "\uFC53"
27580 "isolated": "\uFC54"
27583 "isolated": "\uFC55",
27584 "initial": "\uFCDA"
27587 "isolated": "\uFC56",
27588 "initial": "\uFCDB"
27591 "isolated": "\uFC57",
27592 "initial": "\uFCDC"
27595 "isolated": "\uFC58",
27597 "initial": "\uFCDD",
27601 "isolated": "\uFC59",
27605 "isolated": "\uFC5A",
27609 "isolated": "\uFC5B"
27612 "isolated": "\uFC5C"
27615 "isolated": "\uFC5D",
27619 "isolated": "\uFC5E"
27622 "isolated": "\uFC5F"
27625 "isolated": "\uFC60"
27628 "isolated": "\uFC61"
27631 "isolated": "\uFC62"
27634 "isolated": "\uFC63"
27697 "initial": "\uFC99"
27700 "initial": "\uFC9B",
27704 "initial": "\uFCA0",
27708 "initial": "\uFCA5",
27712 "initial": "\uFCB2"
27715 "initial": "\uFCCD"
27718 "initial": "\uFCD6",
27722 "initial": "\uFCD9"
27725 "initial": "\uFCDE",
27732 "medial": "\uFCE8",
27733 "initial": "\uFD31"
27736 "medial": "\uFCE9",
27737 "isolated": "\uFD0C",
27739 "initial": "\uFD30"
27742 "medial": "\uFCEA",
27743 "initial": "\uFD32"
27745 "\u0640\u064E\u0651": {
27748 "\u0640\u064F\u0651": {
27751 "\u0640\u0650\u0651": {
27755 "isolated": "\uFCF5",
27759 "isolated": "\uFCF6",
27763 "isolated": "\uFCF7",
27767 "isolated": "\uFCF8",
27771 "isolated": "\uFCF9",
27775 "isolated": "\uFCFA",
27779 "isolated": "\uFCFB"
27782 "isolated": "\uFCFC",
27786 "isolated": "\uFCFD",
27790 "isolated": "\uFCFE",
27794 "isolated": "\uFCFF",
27798 "isolated": "\uFD00",
27802 "isolated": "\uFD01",
27806 "isolated": "\uFD02",
27810 "isolated": "\uFD03",
27814 "isolated": "\uFD04",
27818 "isolated": "\uFD05",
27822 "isolated": "\uFD06",
27826 "isolated": "\uFD07",
27830 "isolated": "\uFD08",
27834 "isolated": "\uFD09",
27836 "initial": "\uFD2D",
27840 "isolated": "\uFD0A",
27842 "initial": "\uFD2E",
27846 "isolated": "\uFD0B",
27848 "initial": "\uFD2F",
27852 "isolated": "\uFD0D",
27856 "isolated": "\uFD0E",
27860 "isolated": "\uFD0F",
27864 "isolated": "\uFD10",
27870 "\u062A\u062C\u0645": {
27871 "initial": "\uFD50"
27873 "\u062A\u062D\u062C": {
27875 "initial": "\uFD52"
27877 "\u062A\u062D\u0645": {
27878 "initial": "\uFD53"
27880 "\u062A\u062E\u0645": {
27881 "initial": "\uFD54"
27883 "\u062A\u0645\u062C": {
27884 "initial": "\uFD55"
27886 "\u062A\u0645\u062D": {
27887 "initial": "\uFD56"
27889 "\u062A\u0645\u062E": {
27890 "initial": "\uFD57"
27892 "\u062C\u0645\u062D": {
27894 "initial": "\uFD59"
27896 "\u062D\u0645\u064A": {
27899 "\u062D\u0645\u0649": {
27902 "\u0633\u062D\u062C": {
27903 "initial": "\uFD5C"
27905 "\u0633\u062C\u062D": {
27906 "initial": "\uFD5D"
27908 "\u0633\u062C\u0649": {
27911 "\u0633\u0645\u062D": {
27913 "initial": "\uFD60"
27915 "\u0633\u0645\u062C": {
27916 "initial": "\uFD61"
27918 "\u0633\u0645\u0645": {
27920 "initial": "\uFD63"
27922 "\u0635\u062D\u062D": {
27924 "initial": "\uFD65"
27926 "\u0635\u0645\u0645": {
27928 "initial": "\uFDC5"
27930 "\u0634\u062D\u0645": {
27932 "initial": "\uFD68"
27934 "\u0634\u062C\u064A": {
27937 "\u0634\u0645\u062E": {
27939 "initial": "\uFD6B"
27941 "\u0634\u0645\u0645": {
27943 "initial": "\uFD6D"
27945 "\u0636\u062D\u0649": {
27948 "\u0636\u062E\u0645": {
27950 "initial": "\uFD70"
27952 "\u0636\u0645\u062D": {
27955 "\u0637\u0645\u062D": {
27956 "initial": "\uFD72"
27958 "\u0637\u0645\u0645": {
27959 "initial": "\uFD73"
27961 "\u0637\u0645\u064A": {
27964 "\u0639\u062C\u0645": {
27966 "initial": "\uFDC4"
27968 "\u0639\u0645\u0645": {
27970 "initial": "\uFD77"
27972 "\u0639\u0645\u0649": {
27975 "\u063A\u0645\u0645": {
27978 "\u063A\u0645\u064A": {
27981 "\u063A\u0645\u0649": {
27984 "\u0641\u062E\u0645": {
27986 "initial": "\uFD7D"
27988 "\u0642\u0645\u062D": {
27990 "initial": "\uFDB4"
27992 "\u0642\u0645\u0645": {
27995 "\u0644\u062D\u0645": {
27997 "initial": "\uFDB5"
27999 "\u0644\u062D\u064A": {
28002 "\u0644\u062D\u0649": {
28005 "\u0644\u062C\u062C": {
28006 "initial": "\uFD83",
28009 "\u0644\u062E\u0645": {
28011 "initial": "\uFD86"
28013 "\u0644\u0645\u062D": {
28015 "initial": "\uFD88"
28017 "\u0645\u062D\u062C": {
28018 "initial": "\uFD89"
28020 "\u0645\u062D\u0645": {
28021 "initial": "\uFD8A"
28023 "\u0645\u062D\u064A": {
28026 "\u0645\u062C\u062D": {
28027 "initial": "\uFD8C"
28029 "\u0645\u062C\u0645": {
28030 "initial": "\uFD8D"
28032 "\u0645\u062E\u062C": {
28033 "initial": "\uFD8E"
28035 "\u0645\u062E\u0645": {
28036 "initial": "\uFD8F"
28038 "\u0645\u062C\u062E": {
28039 "initial": "\uFD92"
28041 "\u0647\u0645\u062C": {
28042 "initial": "\uFD93"
28044 "\u0647\u0645\u0645": {
28045 "initial": "\uFD94"
28047 "\u0646\u062D\u0645": {
28048 "initial": "\uFD95"
28050 "\u0646\u062D\u0649": {
28053 "\u0646\u062C\u0645": {
28055 "initial": "\uFD98"
28057 "\u0646\u062C\u0649": {
28060 "\u0646\u0645\u064A": {
28063 "\u0646\u0645\u0649": {
28066 "\u064A\u0645\u0645": {
28068 "initial": "\uFD9D"
28070 "\u0628\u062E\u064A": {
28073 "\u062A\u062C\u064A": {
28076 "\u062A\u062C\u0649": {
28079 "\u062A\u062E\u064A": {
28082 "\u062A\u062E\u0649": {
28085 "\u062A\u0645\u064A": {
28088 "\u062A\u0645\u0649": {
28091 "\u062C\u0645\u064A": {
28094 "\u062C\u062D\u0649": {
28097 "\u062C\u0645\u0649": {
28100 "\u0633\u062E\u0649": {
28103 "\u0635\u062D\u064A": {
28106 "\u0634\u062D\u064A": {
28109 "\u0636\u062D\u064A": {
28112 "\u0644\u062C\u064A": {
28115 "\u0644\u0645\u064A": {
28118 "\u064A\u062D\u064A": {
28121 "\u064A\u062C\u064A": {
28124 "\u064A\u0645\u064A": {
28127 "\u0645\u0645\u064A": {
28130 "\u0642\u0645\u064A": {
28133 "\u0646\u062D\u064A": {
28136 "\u0639\u0645\u064A": {
28139 "\u0643\u0645\u064A": {
28142 "\u0646\u062C\u062D": {
28143 "initial": "\uFDB8",
28146 "\u0645\u062E\u064A": {
28149 "\u0644\u062C\u0645": {
28150 "initial": "\uFDBA",
28153 "\u0643\u0645\u0645": {
28155 "initial": "\uFDC3"
28157 "\u062C\u062D\u064A": {
28160 "\u062D\u062C\u064A": {
28163 "\u0645\u062C\u064A": {
28166 "\u0641\u0645\u064A": {
28169 "\u0628\u062D\u064A": {
28172 "\u0633\u062E\u064A": {
28175 "\u0646\u062C\u064A": {
28179 "isolated": "\uFEF5",
28183 "isolated": "\uFEF7",
28187 "isolated": "\uFEF9",
28191 "isolated": "\uFEFB",
28195 "\u0635\u0644\u06D2": "\uFDF0",
28196 "\u0642\u0644\u06D2": "\uFDF1",
28197 "\u0627\u0644\u0644\u0647": "\uFDF2",
28198 "\u0627\u0643\u0628\u0631": "\uFDF3",
28199 "\u0645\u062D\u0645\u062F": "\uFDF4",
28200 "\u0635\u0644\u0639\u0645": "\uFDF5",
28201 "\u0631\u0633\u0648\u0644": "\uFDF6",
28202 "\u0639\u0644\u064A\u0647": "\uFDF7",
28203 "\u0648\u0633\u0644\u0645": "\uFDF8",
28204 "\u0635\u0644\u0649": "\uFDF9",
28205 "\u0635\u0644\u0649\u0627\u0644\u0644\u0647\u0639\u0644\u064A\u0647\u0648\u0633\u0644\u0645": "\uFDFA",
28206 "\u062C\u0644\u062C\u0644\u0627\u0644\u0647": "\uFDFB",
28207 "\u0631\u06CC\u0627\u0644": "\uFDFC"
28210 exports.default = ligatureReference;
28213 unwrapExports(unicodeLigatures);
28215 var reference = createCommonjsModule(function (module, exports) {
28216 Object.defineProperty(exports, "__esModule", { value: true });
28219 var letterList = Object.keys(unicodeArabic.default);
28220 exports.letterList = letterList;
28221 var ligatureList = Object.keys(unicodeLigatures.default);
28222 exports.ligatureList = ligatureList;
28223 var ligatureWordList = Object.keys(unicodeLigatures.default.words);
28224 exports.ligatureWordList = ligatureWordList;
28225 var lams = '\u0644\u06B5\u06B6\u06B7\u06B8';
28226 exports.lams = lams;
28227 var alefs = '\u0627\u0622\u0623\u0625\u0671\u0672\u0673\u0675\u0773\u0774';
28228 exports.alefs = alefs;
28229 // for (var l = 1; l < lams.length; l++) {
28230 // console.log('-');
28231 // for (var a = 0; a < alefs.length; a++) {
28232 // console.log(a + ': ' + lams[l] + alefs[a]);
28235 var tashkeel = '\u0605\u0640\u0670\u0674\u06DF\u06E7\u06E8';
28236 exports.tashkeel = tashkeel;
28237 function addToTashkeel(start, finish) {
28238 for (var i = start; i <= finish; i++) {
28239 exports.tashkeel = tashkeel += String.fromCharCode(i);
28242 addToTashkeel(0x0610, 0x061A);
28243 addToTashkeel(0x064B, 0x065F);
28244 addToTashkeel(0x06D6, 0x06DC);
28245 addToTashkeel(0x06E0, 0x06E4);
28246 addToTashkeel(0x06EA, 0x06ED);
28247 addToTashkeel(0x08D3, 0x08E1);
28248 addToTashkeel(0x08E3, 0x08FF);
28249 addToTashkeel(0xFE70, 0xFE7F);
28250 var lineBreakers = '\u0627\u0629\u0648\u06C0\u06CF\u06FD\u06FE\u076B\u076C\u0771\u0773\u0774\u0778\u0779\u08E2\u08B1\u08B2\u08B9';
28251 exports.lineBreakers = lineBreakers;
28252 function addToLineBreakers(start, finish) {
28253 for (var i = start; i <= finish; i++) {
28254 exports.lineBreakers = lineBreakers += String.fromCharCode(i);
28257 addToLineBreakers(0x0600, 0x061F); // it's OK to include tashkeel in this range as it is ignored
28258 addToLineBreakers(0x0621, 0x0625);
28259 addToLineBreakers(0x062F, 0x0632);
28260 addToLineBreakers(0x0660, 0x066D); // numerals, math
28261 addToLineBreakers(0x0671, 0x0677);
28262 addToLineBreakers(0x0688, 0x0699);
28263 addToLineBreakers(0x06C3, 0x06CB);
28264 addToLineBreakers(0x06D2, 0x06F9);
28265 addToLineBreakers(0x0759, 0x075B);
28266 addToLineBreakers(0x08AA, 0x08AE);
28267 addToLineBreakers(0xFB50, 0xFDFD); // presentation forms look like they could connect, but never do
28268 // Presentation Forms A includes diacritics but they are meant to stand alone
28269 addToLineBreakers(0xFE80, 0xFEFC); // presentation forms look like they could connect, but never do
28271 addToLineBreakers(0x10E60, 0x10E7F);
28272 addToLineBreakers(0x1EC70, 0x1ECBF);
28273 addToLineBreakers(0x1EE00, 0x1EEFF);
28276 unwrapExports(reference);
28277 var reference_1 = reference.letterList;
28278 var reference_2 = reference.ligatureList;
28279 var reference_3 = reference.ligatureWordList;
28280 var reference_4 = reference.lams;
28281 var reference_5 = reference.alefs;
28282 var reference_6 = reference.tashkeel;
28283 var reference_7 = reference.lineBreakers;
28285 var GlyphSplitter_1 = createCommonjsModule(function (module, exports) {
28286 Object.defineProperty(exports, "__esModule", { value: true });
28289 function GlyphSplitter(word) {
28291 var lastLetter = '';
28292 word.split('').forEach(function (letter) {
28293 if (isArabic_1.isArabic(letter)) {
28294 if (reference.tashkeel.indexOf(letter) > -1) {
28295 letters[letters.length - 1] += letter;
28297 else if (lastLetter.length && ((reference.lams.indexOf(lastLetter) === 0 && reference.alefs.indexOf(letter) > -1) || (reference.lams.indexOf(lastLetter) > 0 && reference.alefs.indexOf(letter) === 0))) {
28299 letters[letters.length - 1] += letter;
28302 letters.push(letter);
28306 letters.push(letter);
28308 if (reference.tashkeel.indexOf(letter) === -1) {
28309 lastLetter = letter;
28314 exports.GlyphSplitter = GlyphSplitter;
28317 unwrapExports(GlyphSplitter_1);
28318 var GlyphSplitter_2 = GlyphSplitter_1.GlyphSplitter;
28320 var BaselineSplitter_1 = createCommonjsModule(function (module, exports) {
28321 Object.defineProperty(exports, "__esModule", { value: true });
28324 function BaselineSplitter(word) {
28326 var lastLetter = '';
28327 word.split('').forEach(function (letter) {
28328 if (isArabic_1.isArabic(letter) && isArabic_1.isArabic(lastLetter)) {
28329 if (lastLetter.length && reference.tashkeel.indexOf(letter) > -1) {
28330 letters[letters.length - 1] += letter;
28332 else if (reference.lineBreakers.indexOf(lastLetter) > -1) {
28333 letters.push(letter);
28336 letters[letters.length - 1] += letter;
28340 letters.push(letter);
28342 if (reference.tashkeel.indexOf(letter) === -1) {
28343 // don't allow tashkeel to hide line break
28344 lastLetter = letter;
28349 exports.BaselineSplitter = BaselineSplitter;
28352 unwrapExports(BaselineSplitter_1);
28353 var BaselineSplitter_2 = BaselineSplitter_1.BaselineSplitter;
28355 var Normalization = createCommonjsModule(function (module, exports) {
28356 Object.defineProperty(exports, "__esModule", { value: true });
28361 function Normal(word, breakPresentationForm) {
28362 // default is to turn initial/isolated/medial/final presentation form to generic
28363 if (typeof breakPresentationForm === 'undefined') {
28364 breakPresentationForm = true;
28366 var returnable = '';
28367 word.split('').forEach(function (letter) {
28368 if (!isArabic_1.isArabic(letter)) {
28369 returnable += letter;
28372 for (var w = 0; w < reference.letterList.length; w++) {
28373 // ok so we are checking this potential lettertron
28374 var letterForms = unicodeArabic.default[reference.letterList[w]];
28375 var versions = Object.keys(letterForms);
28376 for (var v = 0; v < versions.length; v++) {
28377 var localVersion = letterForms[versions[v]];
28378 if (typeof localVersion === 'object' && typeof localVersion.indexOf === 'undefined') {
28379 // look at this embedded object
28380 var embeddedForms = Object.keys(localVersion);
28381 for (var ef = 0; ef < embeddedForms.length; ef++) {
28382 var form = localVersion[embeddedForms[ef]];
28383 if (form === letter || (typeof form === 'object' && form.indexOf && form.indexOf(letter) > -1)) {
28385 // console.log('embedded match');
28386 if (form === letter) {
28388 if (breakPresentationForm && localVersion['normal'] && ['isolated', 'initial', 'medial', 'final'].indexOf(embeddedForms[ef]) > -1) {
28389 // replace presentation form
28390 // console.log('keeping normal form of the letter');
28391 if (typeof localVersion['normal'] === 'object') {
28392 returnable += localVersion['normal'][0];
28395 returnable += localVersion['normal'];
28399 // console.log('keeping this letter');
28400 returnable += letter;
28403 else if (typeof form === 'object' && form.indexOf && form.indexOf(letter) > -1) {
28405 returnable += form[0];
28406 // console.log('added the first letter from the same array');
28412 else if (localVersion === letter) {
28414 if (breakPresentationForm && letterForms['normal'] && ['isolated', 'initial', 'medial', 'final'].indexOf(versions[v]) > -1) {
28415 // replace presentation form
28416 // console.log('keeping normal form of the letter');
28417 if (typeof letterForms['normal'] === 'object') {
28418 returnable += letterForms['normal'][0];
28421 returnable += letterForms['normal'];
28425 // console.log('keeping this letter');
28426 returnable += letter;
28429 else if (typeof localVersion === 'object' && localVersion.indexOf && localVersion.indexOf(letter) > -1) {
28431 returnable += localVersion[0];
28432 // console.log('added the first letter from the same array');
28438 for (var v2 = 0; v2 < reference.ligatureList.length; v2++) {
28439 var normalForm = reference.ligatureList[v2];
28440 if (normalForm !== 'words') {
28441 var ligForms = Object.keys(unicodeLigatures.default[normalForm]);
28442 for (var f = 0; f < ligForms.length; f++) {
28443 if (unicodeLigatures.default[normalForm][ligForms[f]] === letter) {
28444 returnable += normalForm;
28450 // try words ligatures
28451 for (var v3 = 0; v3 < reference.ligatureWordList.length; v3++) {
28452 var normalForm = reference.ligatureWordList[v3];
28453 if (unicodeLigatures.default.words[normalForm] === letter) {
28454 returnable += normalForm;
28458 returnable += letter;
28459 // console.log('kept the letter')
28463 exports.Normal = Normal;
28466 unwrapExports(Normalization);
28467 var Normalization_1 = Normalization.Normal;
28469 var CharShaper_1 = createCommonjsModule(function (module, exports) {
28470 Object.defineProperty(exports, "__esModule", { value: true });
28474 function CharShaper(letter, form) {
28475 if (!isArabic_1.isArabic(letter)) {
28477 throw new Error('Not Arabic');
28479 if (letter === "\u0621") {
28483 for (var w = 0; w < reference.letterList.length; w++) {
28484 // ok so we are checking this potential lettertron
28485 var letterForms = unicodeArabic.default[reference.letterList[w]];
28486 var versions = Object.keys(letterForms);
28487 for (var v = 0; v < versions.length; v++) {
28488 var localVersion = letterForms[versions[v]];
28489 if ((localVersion === letter) ||
28490 (typeof localVersion === 'object' && localVersion.indexOf && localVersion.indexOf(letter) > -1)) {
28491 if (versions.indexOf(form) > -1) {
28492 return letterForms[form];
28495 else if (typeof localVersion === 'object' && typeof localVersion.indexOf === 'undefined') {
28497 var embeddedVersions = Object.keys(localVersion);
28498 for (var ev = 0; ev < embeddedVersions.length; ev++) {
28499 if ((localVersion[embeddedVersions[ev]] === letter) ||
28500 (typeof localVersion[embeddedVersions[ev]] === 'object' && localVersion[embeddedVersions[ev]].indexOf && localVersion[embeddedVersions[ev]].indexOf(letter) > -1)) {
28501 if (embeddedVersions.indexOf(form) > -1) {
28502 return localVersion[form];
28510 exports.CharShaper = CharShaper;
28513 unwrapExports(CharShaper_1);
28514 var CharShaper_2 = CharShaper_1.CharShaper;
28516 var WordShaper_1 = createCommonjsModule(function (module, exports) {
28517 Object.defineProperty(exports, "__esModule", { value: true });
28522 function WordShaper(word) {
28523 var state = 'initial';
28525 for (var w = 0; w < word.length; w++) {
28526 var nextLetter = ' ';
28527 for (var nxw = w + 1; nxw < word.length; nxw++) {
28528 if (!isArabic_1.isArabic(word[nxw])) {
28531 if (reference.tashkeel.indexOf(word[nxw]) === -1) {
28532 nextLetter = word[nxw];
28536 if (!isArabic_1.isArabic(word[w]) || isArabic_1.isMath(word[w])) {
28537 // space or other non-Arabic
28541 else if (reference.tashkeel.indexOf(word[w]) > -1) {
28542 // tashkeel - add without changing state
28545 else if ((nextLetter === ' ') // last Arabic letter in this word
28546 || (reference.lineBreakers.indexOf(word[w]) > -1)) { // the current letter is known to break lines
28547 output += CharShaper_1.CharShaper(word[w], state === 'initial' ? 'isolated' : 'final');
28550 else if (reference.lams.indexOf(word[w]) > -1 && reference.alefs.indexOf(nextLetter) > -1) {
28551 // LA letters - advance an additional letter after this
28552 output += unicodeLigatures.default[word[w] + nextLetter][(state === 'initial' ? 'isolated' : 'final')];
28553 while (word[w] !== nextLetter) {
28559 output += CharShaper_1.CharShaper(word[w], state);
28565 exports.WordShaper = WordShaper;
28568 unwrapExports(WordShaper_1);
28569 var WordShaper_2 = WordShaper_1.WordShaper;
28571 var ParentLetter_1 = createCommonjsModule(function (module, exports) {
28572 Object.defineProperty(exports, "__esModule", { value: true });
28576 function ParentLetter(letter) {
28577 if (!isArabic_1.isArabic(letter)) {
28578 throw new Error('Not an Arabic letter');
28580 for (var w = 0; w < reference.letterList.length; w++) {
28581 // ok so we are checking this potential lettertron
28582 var letterForms = unicodeArabic.default[reference.letterList[w]];
28583 var versions = Object.keys(letterForms);
28584 for (var v = 0; v < versions.length; v++) {
28585 var localVersion = letterForms[versions[v]];
28586 if (typeof localVersion === 'object' && typeof localVersion.indexOf === 'undefined') {
28587 // look at this embedded object
28588 var embeddedForms = Object.keys(localVersion);
28589 for (var ef = 0; ef < embeddedForms.length; ef++) {
28590 var form = localVersion[embeddedForms[ef]];
28591 if (form === letter || (typeof form === 'object' && form.indexOf && form.indexOf(letter) > -1)) {
28593 return localVersion;
28597 else if (localVersion === letter || (typeof localVersion === 'object' && localVersion.indexOf && localVersion.indexOf(letter) > -1)) {
28599 return letterForms;
28605 exports.ParentLetter = ParentLetter;
28606 function GrandparentLetter(letter) {
28607 if (!isArabic_1.isArabic(letter)) {
28608 throw new Error('Not an Arabic letter');
28610 for (var w = 0; w < reference.letterList.length; w++) {
28611 // ok so we are checking this potential lettertron
28612 var letterForms = unicodeArabic.default[reference.letterList[w]];
28613 var versions = Object.keys(letterForms);
28614 for (var v = 0; v < versions.length; v++) {
28615 var localVersion = letterForms[versions[v]];
28616 if (typeof localVersion === 'object' && typeof localVersion.indexOf === 'undefined') {
28617 // look at this embedded object
28618 var embeddedForms = Object.keys(localVersion);
28619 for (var ef = 0; ef < embeddedForms.length; ef++) {
28620 var form = localVersion[embeddedForms[ef]];
28621 if (form === letter || (typeof form === 'object' && form.indexOf && form.indexOf(letter) > -1)) {
28623 return letterForms;
28627 else if (localVersion === letter || (typeof localVersion === 'object' && localVersion.indexOf && localVersion.indexOf(letter) > -1)) {
28629 return letterForms;
28635 exports.GrandparentLetter = GrandparentLetter;
28638 unwrapExports(ParentLetter_1);
28639 var ParentLetter_2 = ParentLetter_1.ParentLetter;
28640 var ParentLetter_3 = ParentLetter_1.GrandparentLetter;
28642 var lib$1 = createCommonjsModule(function (module, exports) {
28643 Object.defineProperty(exports, "__esModule", { value: true });
28645 exports.isArabic = isArabic_1.isArabic;
28647 exports.GlyphSplitter = GlyphSplitter_1.GlyphSplitter;
28649 exports.BaselineSplitter = BaselineSplitter_1.BaselineSplitter;
28651 exports.Normal = Normalization.Normal;
28653 exports.CharShaper = CharShaper_1.CharShaper;
28655 exports.WordShaper = WordShaper_1.WordShaper;
28657 exports.ParentLetter = ParentLetter_1.ParentLetter;
28658 exports.GrandparentLetter = ParentLetter_1.GrandparentLetter;
28661 unwrapExports(lib$1);
28662 var lib_1 = lib$1.isArabic;
28663 var lib_2 = lib$1.GlyphSplitter;
28664 var lib_3 = lib$1.BaselineSplitter;
28665 var lib_4 = lib$1.Normal;
28666 var lib_5 = lib$1.CharShaper;
28667 var lib_6 = lib$1.WordShaper;
28668 var lib_7 = lib$1.ParentLetter;
28669 var lib_8 = lib$1.GrandparentLetter;
28671 // see https://github.com/openstreetmap/iD/pull/3707
28673 var rtlRegex = /[\u0590-\u05FF\u0600-\u06FF\u0780-\u07BF]/;
28675 function fixRTLTextForSvg(inputText) {
28676 var ret = '', rtlBuffer = [];
28677 var arabicRegex = /[\u0600-\u06FF]/g;
28678 var arabicMath = /[\u0660-\u066C]+/g;
28679 var thaanaVowel = /[\u07A6-\u07B0]/;
28680 var hebrewSign = /[\u0591-\u05bd\u05bf\u05c1-\u05c5\u05c7]/;
28682 if (!arabicRegex.test(inputText)) {
28683 // Hebrew or Thaana RTL script
28684 for (var n = 0; n < inputText.length; n++) {
28685 var c = inputText[n];
28686 if ((thaanaVowel.test(c) || hebrewSign.test(c)) && rtlBuffer.length) {
28687 rtlBuffer[rtlBuffer.length - 1] += c;
28688 } else if (rtlRegex.test(c)) {
28690 } else if (c === ' ' && rtlBuffer.length) {
28691 // whitespace within RTL text
28692 rtlBuffer = [rtlBuffer.reverse().join('') + ' '];
28694 // non-RTL character
28695 ret += rtlBuffer.reverse().join('') + c;
28699 ret += rtlBuffer.reverse().join('');
28702 var label = lib_6(inputText).split('').reverse().join('');
28703 // prevent Arabic numbers from being reversed
28704 var numericSwaps = label.match(arabicMath) || [];
28705 for (var i = 0; i < numericSwaps.length; i++) {
28706 if (numericSwaps[i].length > 1) {
28707 label = label.replace(numericSwaps[i], numericSwaps[i].split('').reverse().join(''));
28714 var translations = Object.create(null);
28716 var currentLocale = 'en';
28717 var textDirection = 'ltr';
28719 function setLocale(val) {
28720 if (translations[val] !== undefined) {
28721 currentLocale = val;
28722 } else if (translations[val.split('-')[0]]) {
28723 currentLocale = val.split('-')[0];
28727 function addTranslation(id, value) {
28728 translations[id] = value;
28732 * Given a string identifier, try to find that string in the current
28733 * language, and return it. This function will be called recursively
28734 * with locale `en` if a string can not be found in the requested language.
28736 * @param {string} s string identifier
28737 * @param {object?} o object of token replacements and default string
28738 * @param {string?} loc locale to use
28739 * @returns {string?} locale string
28741 function t(s, o, loc) {
28742 loc = loc || currentLocale;
28746 .map(function (s) { return s.replace(/<TX_DOT>/g, '.'); })
28749 var rep = translations[loc];
28751 while (rep !== undefined && path.length) {
28752 rep = rep[path.pop()];
28755 if (rep !== undefined) {
28758 var variable = '{' + k + '}';
28759 var re = new RegExp(variable, 'g'); // check globally for variables
28760 rep = rep.replace(re, o[k]);
28766 if (loc !== 'en') {
28767 return t(s, o, 'en');
28770 if (o && 'default' in o) {
28774 var missing = 'Missing ' + loc + ' translation: ' + s;
28775 if (typeof console !== 'undefined') console.error(missing); // eslint-disable-line
28781 * Given string 'ltr' or 'rtl', save that setting
28783 * @param {string} dir ltr or rtl
28786 function setTextDirection(dir) {
28787 textDirection = dir;
28792 function utilDetect(force) {
28793 if (detected && !force) return detected;
28796 var ua = navigator.userAgent,
28798 q = utilStringQs(window.location.hash.substring(1));
28800 m = ua.match(/(edge)\/?\s*(\.?\d+(\.\d+)*)/i); // Edge
28802 detected.browser = m[1];
28803 detected.version = m[2];
28805 if (!detected.browser) {
28806 m = ua.match(/Trident\/.*rv:([0-9]{1,}[\.0-9]{0,})/i); // IE11
28808 detected.browser = 'msie';
28809 detected.version = m[1];
28812 if (!detected.browser) {
28813 m = ua.match(/(opr)\/?\s*(\.?\d+(\.\d+)*)/i); // Opera 15+
28815 detected.browser = 'Opera';
28816 detected.version = m[2];
28819 if (!detected.browser) {
28820 m = ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i);
28822 detected.browser = m[1];
28823 detected.version = m[2];
28824 m = ua.match(/version\/([\.\d]+)/i);
28825 if (m !== null) detected.version = m[1];
28828 if (!detected.browser) {
28829 detected.browser = navigator.appName;
28830 detected.version = navigator.appVersion;
28833 // keep major.minor version only..
28834 detected.version = detected.version.split(/\W/).slice(0,2).join('.');
28836 if (detected.browser.toLowerCase() === 'msie') {
28837 detected.ie = true;
28838 detected.browser = 'Internet Explorer';
28839 detected.support = parseFloat(detected.version) >= 11;
28841 detected.ie = false;
28842 detected.support = true;
28845 // Added due to incomplete svg style support. See #715
28846 detected.opera = (detected.browser.toLowerCase() === 'opera' && parseFloat(detected.version) < 15 );
28848 // Set locale based on url param (format 'en-US') or browser lang (default)
28849 if (q.hasOwnProperty('locale')) {
28850 detected.locale = q.locale;
28851 detected.language = q.locale.split('-')[0];
28853 detected.locale = (navigator.language || navigator.userLanguage || 'en-US');
28854 detected.language = detected.locale.split('-')[0];
28856 // Search `navigator.languages` for a better locale. Prefer the first language,
28857 // unless the second language is a culture-specific version of the first one, see #3842
28858 if (navigator.languages && navigator.languages.length > 0) {
28859 var code0 = navigator.languages[0],
28860 parts0 = code0.split('-');
28862 detected.locale = code0;
28863 detected.language = parts0[0];
28865 if (navigator.languages.length > 1 && parts0.length === 1) {
28866 var code1 = navigator.languages[1],
28867 parts1 = code1.split('-');
28869 if (parts1[0] === parts0[0]) {
28870 detected.locale = code1;
28876 // Loaded locale is stored in currentLocale
28877 // return that instead (except in the situation where 'en' might override 'en-US')
28878 var loadedLocale = currentLocale || 'en';
28879 if (loadedLocale !== 'en') {
28880 detected.locale = loadedLocale;
28881 detected.language = detected.locale.split('-')[0];
28884 // detect text direction
28885 var lang = dataLocales[detected.locale];
28886 if ((lang && lang.rtl) || (q.rtl === 'true')) {
28887 detected.textDirection = 'rtl';
28889 detected.textDirection = 'ltr';
28891 setTextDirection(detected.textDirection);
28894 var loc = window.top.location;
28895 var origin = loc.origin;
28896 if (!origin) { // for unpatched IE11
28897 origin = loc.protocol + '//' + loc.hostname + (loc.port ? ':' + loc.port: '');
28900 detected.host = origin + loc.pathname;
28902 detected.filedrop = (window.FileReader && 'ondrop' in window);
28904 detected.download = !(detected.ie || detected.browser.toLowerCase() === 'edge');
28906 detected.cssfilters = !(detected.ie || detected.browser.toLowerCase() === 'edge');
28909 return navigator.userAgent.indexOf(x) !== -1;
28913 detected.os = 'win';
28914 detected.platform = 'Windows';
28916 else if (nav('Mac')) {
28917 detected.os = 'mac';
28918 detected.platform = 'Macintosh';
28920 else if (nav('X11') || nav('Linux')) {
28921 detected.os = 'linux';
28922 detected.platform = 'Linux';
28925 detected.os = 'win';
28926 detected.platform = 'Unknown';
28932 function utilTagText(entity) {
28933 var obj = (entity && entity.tags) || {};
28934 return Object.keys(obj)
28935 .map(function(k) { return k + '=' + obj[k]; })
28940 function utilTagDiff(oldTags, newTags) {
28942 var keys = utilArrayUnion(Object.keys(oldTags), Object.keys(newTags)).sort();
28943 keys.forEach(function(k) {
28944 var oldVal = oldTags[k];
28945 var newVal = newTags[k];
28947 if (oldVal && (!newVal || newVal !== oldVal)) {
28953 display: '- ' + k + '=' + oldVal
28956 if (newVal && (!oldVal || newVal !== oldVal)) {
28962 display: '+ ' + k + '=' + newVal
28970 function utilEntitySelector(ids) {
28971 return ids.length ? '.' + ids.join(',.') : 'nothing';
28975 // returns an selector to select entity ids for:
28976 // - entityIDs passed in
28977 // - shallow descendant entityIDs for any of those entities that are relations
28978 function utilEntityOrMemberSelector(ids, graph) {
28979 var seen = new Set(ids);
28980 ids.forEach(collectShallowDescendants);
28981 return utilEntitySelector(Array.from(seen));
28983 function collectShallowDescendants(id) {
28984 var entity = graph.hasEntity(id);
28985 if (!entity || entity.type !== 'relation') return;
28988 .map(function(member) { return member.id; })
28989 .forEach(function(id) { seen.add(id); });
28994 // returns an selector to select entity ids for:
28995 // - entityIDs passed in
28996 // - deep descendant entityIDs for any of those entities that are relations
28997 function utilEntityOrDeepMemberSelector(ids, graph) {
28998 var seen = new Set();
28999 ids.forEach(collectDeepDescendants);
29000 return utilEntitySelector(Array.from(seen));
29002 function collectDeepDescendants(id) {
29003 if (seen.has(id)) return;
29006 var entity = graph.hasEntity(id);
29007 if (!entity || entity.type !== 'relation') return;
29010 .map(function(member) { return member.id; })
29011 .forEach(collectDeepDescendants); // recurse
29016 // Adds or removes highlight styling for the specified entities
29017 function utilHighlightEntities(ids, highlighted, context) {
29019 .selectAll(utilEntityOrDeepMemberSelector(ids, context.graph()))
29020 .classed('highlighted', highlighted);
29024 // returns an Array that is the union of:
29025 // - nodes for any nodeIDs passed in
29026 // - child nodes of any wayIDs passed in
29027 // - descendant member and child nodes of relationIDs passed in
29028 function utilGetAllNodes(ids, graph) {
29029 var seen = new Set();
29030 var nodes = new Set();
29032 ids.forEach(collectNodes);
29033 return Array.from(nodes);
29035 function collectNodes(id) {
29036 if (seen.has(id)) return;
29039 var entity = graph.hasEntity(id);
29040 if (!entity) return;
29042 if (entity.type === 'node') {
29044 } else if (entity.type === 'way') {
29045 entity.nodes.forEach(collectNodes);
29048 .map(function(member) { return member.id; })
29049 .forEach(collectNodes); // recurse
29055 function utilDisplayName(entity) {
29056 var localizedNameKey = 'name:' + utilDetect().locale.toLowerCase().split('-')[0];
29057 var name = entity.tags[localizedNameKey] || entity.tags.name || '';
29058 var network = entity.tags.cycle_network || entity.tags.network;
29060 if (!name && entity.tags.ref) {
29061 name = entity.tags.ref;
29063 name = network + ' ' + name;
29071 function utilDisplayNameForPath(entity) {
29072 var name = utilDisplayName(entity);
29073 var isFirefox = utilDetect().browser.toLowerCase().indexOf('firefox') > -1;
29075 if (!isFirefox && name && rtlRegex.test(name)) {
29076 name = fixRTLTextForSvg(name);
29083 function utilDisplayType(id) {
29085 n: t('inspector.node'),
29086 w: t('inspector.way'),
29087 r: t('inspector.relation')
29092 function utilDisplayLabel(entity, context) {
29093 var displayName = utilDisplayName(entity);
29095 // use the display name if there is one
29096 return displayName;
29098 var preset = utilPreset(entity, context);
29099 if (preset && preset.name()) {
29100 // use the preset name if there is a match
29101 return preset.name();
29103 // fallback to the display type (node/way/relation)
29104 return utilDisplayType(entity.id);
29108 function utilPreset(entity, context) {
29109 return context.presets().match(entity, context.graph());
29113 function utilEntityRoot(entityType) {
29122 function utilStringQs(str) {
29123 return str.split('&').reduce(function(obj, pair){
29124 var parts = pair.split('=');
29125 if (parts.length === 2) {
29126 obj[parts[0]] = (null === parts[1]) ? '' : decodeURIComponent(parts[1]);
29133 function utilQsString(obj, noencode) {
29134 // encode everything except special characters used in certain hash parameters:
29135 // "/" in map states, ":", ",", {" and "}" in background
29136 function softEncode(s) {
29137 return encodeURIComponent(s).replace(/(%2F|%3A|%2C|%7B|%7D)/g, decodeURIComponent);
29140 return Object.keys(obj).sort().map(function(key) {
29141 return encodeURIComponent(key) + '=' + (
29142 noencode ? softEncode(obj[key]) : encodeURIComponent(obj[key]));
29147 function utilPrefixDOMProperty(property) {
29148 var prefixes = ['webkit', 'ms', 'moz', 'o'];
29150 var n = prefixes.length;
29151 var s = document.body;
29156 property = property.substr(0, 1).toUpperCase() + property.substr(1);
29159 if (prefixes[i] + property in s) {
29160 return prefixes[i] + property;
29168 function utilPrefixCSSProperty(property) {
29169 var prefixes = ['webkit', 'ms', 'Moz', 'O'];
29171 var n = prefixes.length;
29172 var s = document.body.style;
29174 if (property.toLowerCase() in s) {
29175 return property.toLowerCase();
29179 if (prefixes[i] + property in s) {
29180 return '-' + prefixes[i].toLowerCase() + property.replace(/([A-Z])/g, '-$1').toLowerCase();
29188 var transformProperty;
29189 function utilSetTransform(el, x, y, scale) {
29190 var prop = transformProperty = transformProperty || utilPrefixCSSProperty('Transform');
29191 var translate = utilDetect().opera ? 'translate(' + x + 'px,' + y + 'px)'
29192 : 'translate3d(' + x + 'px,' + y + 'px,0)';
29193 return el.style(prop, translate + (scale ? ' scale(' + scale + ')' : ''));
29197 // Calculates Levenshtein distance between two strings
29198 // see: https://en.wikipedia.org/wiki/Levenshtein_distance
29199 // first converts the strings to lowercase and replaces diacritic marks with ascii equivalents.
29200 function utilEditDistance(a, b) {
29201 a = remove$1(a.toLowerCase());
29202 b = remove$1(b.toLowerCase());
29203 if (a.length === 0) return b.length;
29204 if (b.length === 0) return a.length;
29206 for (var i = 0; i <= b.length; i++) { matrix[i] = [i]; }
29207 for (var j = 0; j <= a.length; j++) { matrix[0][j] = j; }
29208 for (i = 1; i <= b.length; i++) {
29209 for (j = 1; j <= a.length; j++) {
29210 if (b.charAt(i-1) === a.charAt(j-1)) {
29211 matrix[i][j] = matrix[i-1][j-1];
29213 matrix[i][j] = Math.min(matrix[i-1][j-1] + 1, // substitution
29214 Math.min(matrix[i][j-1] + 1, // insertion
29215 matrix[i-1][j] + 1)); // deletion
29219 return matrix[b.length][a.length];
29223 // a d3.mouse-alike which
29224 // 1. Only works on HTML elements, not SVG
29225 // 2. Does not cause style recalculation
29226 function utilFastMouse(container) {
29227 var rect = container.getBoundingClientRect();
29228 var rectLeft = rect.left;
29229 var rectTop = rect.top;
29230 var clientLeft = +container.clientLeft;
29231 var clientTop = +container.clientTop;
29233 if (textDirection === 'rtl') {
29236 return function(e) {
29238 e.clientX - rectLeft - clientLeft,
29239 e.clientY - rectTop - clientTop];
29244 function utilAsyncMap(inputs, func, callback) {
29245 var remaining = inputs.length;
29249 inputs.forEach(function(d, i) {
29250 func(d, function done(err, data) {
29254 if (!remaining) callback(errors, results);
29260 // wraps an index to an interval [0..length-1]
29261 function utilWrap(index, length) {
29263 index += Math.ceil(-index/length)*length;
29265 return index % length;
29270 * a replacement for functor
29272 * @param {*} value any value
29273 * @returns {Function} a function that returns that value or the value if it's a function
29275 function utilFunctor(value) {
29276 if (typeof value === 'function') return value;
29277 return function() {
29283 function utilNoAuto(selection) {
29284 var isText = (selection.size() && selection.node().tagName.toLowerCase() === 'textarea');
29287 // assign 'new-password' even for non-password fields to prevent browsers (Chrome) ignoring 'off'
29288 .attr('autocomplete', 'new-password')
29289 .attr('autocorrect', 'off')
29290 .attr('autocapitalize', 'off')
29291 .attr('spellcheck', isText ? 'true' : 'false');
29295 // https://stackoverflow.com/questions/194846/is-there-any-kind-of-hash-code-function-in-javascript
29296 // https://werxltd.com/wp/2010/05/13/javascript-implementation-of-javas-string-hashcode-method/
29297 function utilHashcode(str) {
29299 if (str.length === 0) {
29302 for (var i = 0; i < str.length; i++) {
29303 var char = str.charCodeAt(i);
29304 hash = ((hash << 5) - hash) + char;
29305 hash = hash & hash; // Convert to 32bit integer
29310 function utilCleanTags(tags) {
29312 for (var k in tags) {
29315 if (v !== undefined) {
29316 out[k] = cleanValue(k, v);
29323 function cleanValue(k, v) {
29324 function keepSpaces(k) {
29325 return /_hours|_times|:conditional$/.test(k);
29329 return /^(description|note|fixme)$/.test(k);
29332 if (skip(k)) return v;
29336 .map(function(s) { return s.trim(); })
29337 .join(keepSpaces(k) ? '; ' : ';');
29339 // The code below is not intended to validate websites and emails.
29340 // It is only intended to prevent obvious copy-paste errors. (#2323)
29341 // clean website- and email-like tags
29342 if (k.indexOf('website') !== -1 ||
29343 k.indexOf('email') !== -1 ||
29344 cleaned.indexOf('http') === 0) {
29346 .replace(/[\u200B-\u200F\uFEFF]/g, ''); // strip LRM and other zero width chars
29354 // Like selection.property('value', ...), but avoids no-op value sets,
29355 // which can result in layout/repaint thrashing in some situations.
29356 function utilGetSetValue(selection, value) {
29357 function d3_selection_value(value) {
29358 function valueNull() {
29362 function valueConstant() {
29363 if (this.value !== value) {
29364 this.value = value;
29368 function valueFunction() {
29369 var x = value.apply(this, arguments);
29372 } else if (this.value !== x) {
29377 return value == null
29378 ? valueNull : (typeof value === 'function'
29379 ? valueFunction : valueConstant);
29382 if (arguments.length === 1) {
29383 return selection.property('value');
29386 return selection.each(d3_selection_value(value));
29389 function utilKeybinding(namespace) {
29390 var _keybindings = {};
29393 function testBindings(isCapturing) {
29394 var didMatch = false;
29395 var bindings = Object.keys(_keybindings).map(function(id) { return _keybindings[id]; });
29398 // Most key shortcuts will accept either lower or uppercase ('h' or 'H'),
29399 // so we don't strictly match on the shift key, but we prioritize
29400 // shifted keybindings first, and fallback to unshifted only if no match.
29401 // (This lets us differentiate between '←'/'⇧←' or '⌘Z'/'⌘⇧Z')
29403 // priority match shifted keybindings first
29404 for (i = 0; i < bindings.length; i++) {
29405 binding = bindings[i];
29406 if (!binding.event.modifiers.shiftKey) continue; // no shift
29407 if (!!binding.capture !== isCapturing) continue;
29408 if (matches(binding, true)) {
29409 binding.callback();
29414 // then unshifted keybindings
29415 if (didMatch) return;
29416 for (i = 0; i < bindings.length; i++) {
29417 binding = bindings[i];
29418 if (binding.event.modifiers.shiftKey) continue; // shift
29419 if (!!binding.capture !== isCapturing) continue;
29420 if (matches(binding, false)) {
29421 binding.callback();
29426 function matches(binding, testShift) {
29427 var event$1 = event;
29428 var isMatch = false;
29429 var tryKeyCode = true;
29431 // Prefer a match on `KeyboardEvent.key`
29432 if (event$1.key !== undefined) {
29433 tryKeyCode = (event$1.key.charCodeAt(0) > 255); // outside ISO-Latin-1
29436 if (binding.event.key === undefined) {
29438 } else if (Array.isArray(binding.event.key)) {
29439 if (binding.event.key.map(function(s) { return s.toLowerCase(); }).indexOf(event$1.key.toLowerCase()) === -1)
29442 if (event$1.key.toLowerCase() !== binding.event.key.toLowerCase())
29447 // Fallback match on `KeyboardEvent.keyCode`, can happen if:
29448 // - browser doesn't support `KeyboardEvent.key`
29449 // - `KeyboardEvent.key` is outside ISO-Latin-1 range (cyrillic?)
29450 if (!isMatch && tryKeyCode) {
29451 isMatch = (event$1.keyCode === binding.event.keyCode);
29454 if (!isMatch) return false;
29456 // test modifier keys
29457 if (!(event$1.ctrlKey && event$1.altKey)) { // if both are set, assume AltGr and skip it - #4096
29458 if (event$1.ctrlKey !== binding.event.modifiers.ctrlKey) return false;
29459 if (event$1.altKey !== binding.event.modifiers.altKey) return false;
29461 if (event$1.metaKey !== binding.event.modifiers.metaKey) return false;
29462 if (testShift && event$1.shiftKey !== binding.event.modifiers.shiftKey) return false;
29469 function capture() {
29470 testBindings(true);
29474 function bubble() {
29475 var tagName = d3_select(event.target).node().tagName;
29476 if (tagName === 'INPUT' || tagName === 'SELECT' || tagName === 'TEXTAREA') {
29479 testBindings(false);
29483 function keybinding(selection) {
29484 selection = selection || d3_select(document);
29485 selection.on('keydown.capture.' + namespace, capture, true);
29486 selection.on('keydown.bubble.' + namespace, bubble, false);
29490 // was: keybinding.off()
29491 keybinding.unbind = function(selection) {
29493 selection = selection || d3_select(document);
29494 selection.on('keydown.capture.' + namespace, null);
29495 selection.on('keydown.bubble.' + namespace, null);
29500 keybinding.clear = function() {
29506 // Remove one or more keycode bindings.
29507 keybinding.off = function(codes, capture) {
29508 var arr = utilArrayUniq([].concat(codes));
29510 for (var i = 0; i < arr.length; i++) {
29511 var id = arr[i] + (capture ? '-capture' : '-bubble');
29512 delete _keybindings[id];
29518 // Add one or more keycode bindings.
29519 keybinding.on = function(codes, callback, capture) {
29520 if (typeof callback !== 'function') {
29521 return keybinding.off(codes, capture);
29524 var arr = utilArrayUniq([].concat(codes));
29526 for (var i = 0; i < arr.length; i++) {
29527 var id = arr[i] + (capture ? '-capture' : '-bubble');
29531 callback: callback,
29533 key: undefined, // preferred
29534 keyCode: 0, // fallback
29544 if (_keybindings[id]) {
29545 console.warn('warning: duplicate keybinding for "' + id + '"'); // eslint-disable-line no-console
29548 _keybindings[id] = binding;
29550 var matches = arr[i].toLowerCase().match(/(?:(?:[^+⇧⌃⌥⌘])+|[⇧⌃⌥⌘]|\+\+|^\+$)/g);
29551 for (var j = 0; j < matches.length; j++) {
29552 // Normalise matching errors
29553 if (matches[j] === '++') matches[j] = '+';
29555 if (matches[j] in utilKeybinding.modifierCodes) {
29556 var prop = utilKeybinding.modifierProperties[utilKeybinding.modifierCodes[matches[j]]];
29557 binding.event.modifiers[prop] = true;
29559 binding.event.key = utilKeybinding.keys[matches[j]] || matches[j];
29560 if (matches[j] in utilKeybinding.keyCodes) {
29561 binding.event.keyCode = utilKeybinding.keyCodes[matches[j]];
29576 * See https://github.com/keithamus/jwerty
29579 utilKeybinding.modifierCodes = {
29581 '⇧': 16, shift: 16,
29582 // CTRL key, on Mac: ⌃
29584 // ALT key, on Mac: ⌥ (Alt)
29585 '⌥': 18, alt: 18, option: 18,
29586 // META, on Mac: ⌘ (CMD), on Windows (Win), on Linux (Super)
29587 '⌘': 91, meta: 91, cmd: 91, 'super': 91, win: 91
29590 utilKeybinding.modifierProperties = {
29597 utilKeybinding.keys = {
29598 // Backspace key, on Mac: ⌫ (Backspace)
29599 '⌫': 'Backspace', backspace: 'Backspace',
29600 // Tab Key, on Mac: ⇥ (Tab), on Windows ⇥⇥
29601 '⇥': 'Tab', '⇆': 'Tab', tab: 'Tab',
29603 '↩': 'Enter', 'return': 'Enter', enter: 'Enter', '⌅': 'Enter',
29605 'pause': 'Pause', 'pause-break': 'Pause',
29606 // Caps Lock key, ⇪
29607 '⇪': 'CapsLock', caps: 'CapsLock', 'caps-lock': 'CapsLock',
29608 // Escape key, on Mac: ⎋, on Windows: Esc
29609 '⎋': ['Escape', 'Esc'], escape: ['Escape', 'Esc'], esc: ['Escape', 'Esc'],
29611 space: [' ', 'Spacebar'],
29612 // Page-Up key, or pgup, on Mac: ↖
29613 '↖': 'PageUp', pgup: 'PageUp', 'page-up': 'PageUp',
29614 // Page-Down key, or pgdown, on Mac: ↘
29615 '↘': 'PageDown', pgdown: 'PageDown', 'page-down': 'PageDown',
29616 // END key, on Mac: ⇟
29617 '⇟': 'End', end: 'End',
29618 // HOME key, on Mac: ⇞
29619 '⇞': 'Home', home: 'Home',
29620 // Insert key, or ins
29621 ins: 'Insert', insert: 'Insert',
29622 // Delete key, on Mac: ⌦ (Delete)
29623 '⌦': ['Delete', 'Del'], del: ['Delete', 'Del'], 'delete': ['Delete', 'Del'],
29624 // Left Arrow Key, or ←
29625 '←': ['ArrowLeft', 'Left'], left: ['ArrowLeft', 'Left'], 'arrow-left': ['ArrowLeft', 'Left'],
29626 // Up Arrow Key, or ↑
29627 '↑': ['ArrowUp', 'Up'], up: ['ArrowUp', 'Up'], 'arrow-up': ['ArrowUp', 'Up'],
29628 // Right Arrow Key, or →
29629 '→': ['ArrowRight', 'Right'], right: ['ArrowRight', 'Right'], 'arrow-right': ['ArrowRight', 'Right'],
29630 // Up Arrow Key, or ↓
29631 '↓': ['ArrowDown', 'Down'], down: ['ArrowDown', 'Down'], 'arrow-down': ['ArrowDown', 'Down'],
29632 // odities, stuff for backward compatibility (browsers and code):
29633 // Num-Multiply, or *
29634 '*': ['*', 'Multiply'], star: ['*', 'Multiply'], asterisk: ['*', 'Multiply'], multiply: ['*', 'Multiply'],
29636 '+': ['+', 'Add'], 'plus': ['+', 'Add'],
29637 // Num-Subtract, or -
29638 '-': ['-', 'Subtract'], subtract: ['-', 'Subtract'], 'dash': ['-', 'Subtract'],
29645 // Period, or ., or full-stop
29646 period: '.', 'full-stop': '.',
29647 // Slash, or /, or forward-slash
29648 slash: '/', 'forward-slash': '/',
29649 // Tick, or `, or back-quote
29650 tick: '`', 'back-quote': '`',
29651 // Open bracket, or [
29652 'open-bracket': '[',
29653 // Back slash, or \
29654 'back-slash': '\\',
29655 // Close backet, or ]
29656 'close-bracket': ']',
29657 // Apostrophe, or Quote, or '
29658 quote: '\'', apostrophe: '\'',
29698 utilKeybinding.keyCodes = {
29699 // Backspace key, on Mac: ⌫ (Backspace)
29700 '⌫': 8, backspace: 8,
29701 // Tab Key, on Mac: ⇥ (Tab), on Windows ⇥⇥
29702 '⇥': 9, '⇆': 9, tab: 9,
29704 '↩': 13, 'return': 13, enter: 13, '⌅': 13,
29706 'pause': 19, 'pause-break': 19,
29707 // Caps Lock key, ⇪
29708 '⇪': 20, caps: 20, 'caps-lock': 20,
29709 // Escape key, on Mac: ⎋, on Windows: Esc
29710 '⎋': 27, escape: 27, esc: 27,
29713 // Page-Up key, or pgup, on Mac: ↖
29714 '↖': 33, pgup: 33, 'page-up': 33,
29715 // Page-Down key, or pgdown, on Mac: ↘
29716 '↘': 34, pgdown: 34, 'page-down': 34,
29717 // END key, on Mac: ⇟
29719 // HOME key, on Mac: ⇞
29721 // Insert key, or ins
29722 ins: 45, insert: 45,
29723 // Delete key, on Mac: ⌦ (Delete)
29724 '⌦': 46, del: 46, 'delete': 46,
29725 // Left Arrow Key, or ←
29726 '←': 37, left: 37, 'arrow-left': 37,
29727 // Up Arrow Key, or ↑
29728 '↑': 38, up: 38, 'arrow-up': 38,
29729 // Right Arrow Key, or →
29730 '→': 39, right: 39, 'arrow-right': 39,
29731 // Up Arrow Key, or ↓
29732 '↓': 40, down: 40, 'arrow-down': 40,
29733 // odities, printing characters that come out wrong:
29736 // Num-Multiply, or *
29737 '*': 106, star: 106, asterisk: 106, multiply: 106,
29739 '+': 107, 'plus': 107,
29740 // Num-Subtract, or -
29741 '-': 109, subtract: 109,
29747 ';': 186, semicolon: 186,
29749 '=': 187, 'equals': 187,
29751 ',': 188, comma: 188,
29752 // Dash / Underscore key
29754 // Period, or ., or full-stop
29755 '.': 190, period: 190, 'full-stop': 190,
29756 // Slash, or /, or forward-slash
29757 '/': 191, slash: 191, 'forward-slash': 191,
29758 // Tick, or `, or back-quote
29759 '`': 192, tick: 192, 'back-quote': 192,
29760 // Open bracket, or [
29761 '[': 219, 'open-bracket': 219,
29762 // Back slash, or \
29763 '\\': 220, 'back-slash': 220,
29764 // Close backet, or ]
29765 ']': 221, 'close-bracket': 221,
29766 // Apostrophe, or Quote, or '
29767 '\'': 222, quote: 222, apostrophe: 222
29771 var i$2 = 95, n = 0;
29772 while (++i$2 < 106) {
29773 utilKeybinding.keyCodes['num-' + n] = i$2;
29779 while (++i$2 < 58) {
29780 utilKeybinding.keyCodes[n] = i$2;
29786 while (++i$2 < 136) {
29787 utilKeybinding.keyCodes['f' + n] = i$2;
29793 while (++i$2 < 91) {
29794 utilKeybinding.keyCodes[String.fromCharCode(i$2).toLowerCase()] = i$2;
29797 function utilObjectOmit(obj, omitKeys) {
29798 return Object.keys(obj).reduce(function(result, key) {
29799 if (omitKeys.indexOf(key) === -1) {
29800 result[key] = obj[key]; // keep
29806 // Copies a variable number of methods from source to target.
29807 function utilRebind(target, source) {
29808 var i = 1, n = arguments.length, method;
29810 target[method = arguments[i]] = d3_rebind(target, source, source[method]);
29815 // Method is assumed to be a standard D3 getter-setter:
29816 // If passed with no arguments, gets the value.
29817 // If passed with arguments, sets the value and returns the target.
29818 function d3_rebind(target, source, method) {
29819 return function() {
29820 var value = method.apply(source, arguments);
29821 return value === source ? target : value;
29825 // A per-domain session mutex backed by a cookie and dead man's
29826 // switch. If the session crashes, the mutex will auto-release
29827 // after 5 seconds.
29829 // This accepts a string and returns an object that complies with utilSessionMutexType
29830 function utilSessionMutex(name) {
29835 var expires = new Date();
29836 expires.setSeconds(expires.getSeconds() + 5);
29837 document.cookie = name + '=1; expires=' + expires.toUTCString();
29840 mutex.lock = function () {
29841 if (intervalID) return true;
29842 var cookie = document.cookie.replace(new RegExp('(?:(?:^|.*;)\\s*' + name + '\\s*\\=\\s*([^;]*).*$)|^.*$'), '$1');
29843 if (cookie) return false;
29845 intervalID = window.setInterval(renew, 4000);
29849 mutex.unlock = function () {
29850 if (!intervalID) return;
29851 document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:00 GMT';
29852 clearInterval(intervalID);
29856 mutex.locked = function () {
29857 return !!intervalID;
29863 function utilTiler() {
29864 var _size = [256, 256];
29866 var _tileSize = 256;
29867 var _zoomExtent = [0, 20];
29868 var _translate = [_size[0] / 2, _size[1] / 2];
29870 var _skipNullIsland = false;
29873 function clamp(num, min, max) {
29874 return Math.max(min, Math.min(num, max));
29878 function nearNullIsland(tile) {
29883 var center = Math.pow(2, z - 1);
29884 var width = Math.pow(2, z - 6);
29885 var min = center - (width / 2);
29886 var max = center + (width / 2) - 1;
29887 return x >= min && x <= max && y >= min && y <= max;
29894 var z = geoScaleToZoom(_scale / (2 * Math.PI), _tileSize);
29895 var z0 = clamp(Math.round(z), _zoomExtent[0], _zoomExtent[1]);
29897 var tileMax = Math.pow(2, z0) - 1;
29898 var log2ts = Math.log(_tileSize) * Math.LOG2E;
29899 var k = Math.pow(2, z - z0 + log2ts);
29901 (_translate[0] - _scale / 2) / k,
29902 (_translate[1] - _scale / 2) / k
29905 var cols = d3_range(
29906 clamp(Math.floor(-origin[0]) - _margin, tileMin, tileMax + 1),
29907 clamp(Math.ceil(_size[0] / k - origin[0]) + _margin, tileMin, tileMax + 1)
29909 var rows = d3_range(
29910 clamp(Math.floor(-origin[1]) - _margin, tileMin, tileMax + 1),
29911 clamp(Math.ceil(_size[1] / k - origin[1]) + _margin, tileMin, tileMax + 1)
29915 for (var i = 0; i < rows.length; i++) {
29917 for (var j = 0; j < cols.length; j++) {
29920 if (i >= _margin && i <= rows.length - _margin &&
29921 j >= _margin && j <= cols.length - _margin) {
29922 tiles.unshift([x, y, z0]); // tiles in view at beginning
29924 tiles.push([x, y, z0]); // tiles in margin at the end
29929 tiles.translate = origin;
29937 * getTiles() returns an array of tiles that cover the map view
29939 tiler.getTiles = function(projection) {
29941 projection.scale() * Math.PI - projection.translate()[0],
29942 projection.scale() * Math.PI - projection.translate()[1]
29946 .size(projection.clipExtent()[1])
29947 .scale(projection.scale() * 2 * Math.PI)
29948 .translate(projection.translate());
29950 var tiles = tiler();
29951 var ts = tiles.scale;
29954 .map(function(tile) {
29955 if (_skipNullIsland && nearNullIsland(tile)) {
29958 var x = tile[0] * ts - origin[0];
29959 var y = tile[1] * ts - origin[1];
29961 id: tile.toString(),
29964 projection.invert([x, y + ts]),
29965 projection.invert([x + ts, y])
29968 }).filter(Boolean);
29973 * getGeoJSON() returns a FeatureCollection for debugging tiles
29975 tiler.getGeoJSON = function(projection) {
29976 var features = tiler.getTiles(projection).map(function(tile) {
29985 coordinates: [ tile.extent.polygon() ]
29991 type: 'FeatureCollection',
29997 tiler.tileSize = function(val) {
29998 if (!arguments.length) return _tileSize;
30004 tiler.zoomExtent = function(val) {
30005 if (!arguments.length) return _zoomExtent;
30011 tiler.size = function(val) {
30012 if (!arguments.length) return _size;
30018 tiler.scale = function(val) {
30019 if (!arguments.length) return _scale;
30025 tiler.translate = function(val) {
30026 if (!arguments.length) return _translate;
30032 // number to extend the rows/columns beyond those covering the viewport
30033 tiler.margin = function(val) {
30034 if (!arguments.length) return _margin;
30040 tiler.skipNullIsland = function(val) {
30041 if (!arguments.length) return _skipNullIsland;
30042 _skipNullIsland = val;
30050 function utilTriggerEvent(target, type) {
30051 target.each(function() {
30052 var evt = document.createEvent('HTMLEvents');
30053 evt.initEvent(type, true, true);
30054 this.dispatchEvent(evt);
30058 function osmEntity(attrs) {
30059 // For prototypal inheritance.
30060 if (this instanceof osmEntity) return;
30062 // Create the appropriate subtype.
30063 if (attrs && attrs.type) {
30064 return osmEntity[attrs.type].apply(this, arguments);
30065 } else if (attrs && attrs.id) {
30066 return osmEntity[osmEntity.id.type(attrs.id)].apply(this, arguments);
30069 // Initialize a generic Entity (used only in tests).
30070 return (new osmEntity()).initialize(arguments);
30074 osmEntity.id = function(type) {
30075 return osmEntity.id.fromOSM(type, osmEntity.id.next[type]--);
30079 osmEntity.id.next = {
30080 changeset: -1, node: -1, way: -1, relation: -1
30084 osmEntity.id.fromOSM = function(type, id) {
30085 return type[0] + id;
30089 osmEntity.id.toOSM = function(id) {
30090 return id.slice(1);
30094 osmEntity.id.type = function(id) {
30095 return { 'c': 'changeset', 'n': 'node', 'w': 'way', 'r': 'relation' }[id[0]];
30099 // A function suitable for use as the second argument to d3.selection#data().
30100 osmEntity.key = function(entity) {
30101 return entity.id + 'v' + (entity.v || 0);
30104 var _deprecatedTagValuesByKey;
30106 osmEntity.deprecatedTagValuesByKey = function() {
30107 if (!_deprecatedTagValuesByKey) {
30108 _deprecatedTagValuesByKey = {};
30109 dataDeprecated.forEach(function(d) {
30110 var oldKeys = Object.keys(d.old);
30111 if (oldKeys.length === 1) {
30112 var oldKey = oldKeys[0];
30113 var oldValue = d.old[oldKey];
30114 if (oldValue !== '*') {
30115 if (!_deprecatedTagValuesByKey[oldKey]) {
30116 _deprecatedTagValuesByKey[oldKey] = [oldValue];
30118 _deprecatedTagValuesByKey[oldKey].push(oldValue);
30124 return _deprecatedTagValuesByKey;
30128 osmEntity.prototype = {
30133 initialize: function(sources) {
30134 for (var i = 0; i < sources.length; ++i) {
30135 var source = sources[i];
30136 for (var prop in source) {
30137 if (Object.prototype.hasOwnProperty.call(source, prop)) {
30138 if (source[prop] === undefined) {
30141 this[prop] = source[prop];
30147 if (!this.id && this.type) {
30148 this.id = osmEntity.id(this.type);
30150 if (!this.hasOwnProperty('visible')) {
30151 this.visible = true;
30158 copy: function(resolver, copies) {
30159 if (copies[this.id])
30160 return copies[this.id];
30162 var copy = osmEntity(this, { id: undefined, user: undefined, version: undefined });
30163 copies[this.id] = copy;
30169 osmId: function() {
30170 return osmEntity.id.toOSM(this.id);
30174 isNew: function() {
30175 return this.osmId() < 0;
30179 update: function(attrs) {
30180 return osmEntity(this, attrs, { v: 1 + (this.v || 0) });
30184 mergeTags: function(tags) {
30185 var merged = Object.assign({}, this.tags); // shallow copy
30186 var changed = false;
30187 for (var k in tags) {
30188 var t1 = merged[k];
30193 } else if (t1 !== t2) {
30195 merged[k] = utilArrayUnion(t1.split(/;\s*/), t2.split(/;\s*/)).join(';');
30198 return changed ? this.update({ tags: merged }) : this;
30202 intersects: function(extent, resolver) {
30203 return this.extent(resolver).intersects(extent);
30207 hasNonGeometryTags: function() {
30208 return Object.keys(this.tags).some(function(k) { return k !== 'area'; });
30211 hasParentRelations: function(resolver) {
30212 return resolver.parentRelations(this).length > 0;
30215 hasInterestingTags: function() {
30216 return Object.keys(this.tags).some(osmIsInterestingTag);
30219 hasWikidata: function() {
30220 return !!this.tags.wikidata || !!this.tags['brand:wikidata'];
30223 isHighwayIntersection: function() {
30227 isDegenerate: function() {
30231 deprecatedTags: function() {
30232 var tags = this.tags;
30234 // if there are no tags, none can be deprecated
30235 if (Object.keys(tags).length === 0) return [];
30237 var deprecated = [];
30238 dataDeprecated.forEach(function(d) {
30239 var matchesDeprecatedTags = Object.keys(d.old).every(function(key) {
30240 if (!tags[key]) return false;
30241 if (d.old[key] === '*') return true;
30243 var vals = tags[key].split(';').filter(Boolean);
30244 if (vals.length === 0) {
30246 } else if (vals.length > 1) {
30247 return vals.indexOf(d.old[key]) !== -1;
30249 if (tags[key] === d.old[key]) {
30250 if (d.old[key] === d.replace[key]) {
30251 return !Object.keys(d.replace).every(function(key) {
30252 return tags[key] === d.replace[key];
30261 if (matchesDeprecatedTags) {
30262 deprecated.push(d);
30270 function osmLanes(entity) {
30271 if (entity.type !== 'way') return null;
30272 if (!entity.tags.highway) return null;
30274 var tags = entity.tags;
30275 var isOneWay = entity.isOneWay();
30276 var laneCount = getLaneCount(tags, isOneWay);
30277 var maxspeed = parseMaxspeed(tags);
30279 var laneDirections = parseLaneDirections(tags, isOneWay, laneCount);
30280 var forward = laneDirections.forward;
30281 var backward = laneDirections.backward;
30282 var bothways = laneDirections.bothways;
30284 // parse the piped string 'x|y|z' format
30285 var turnLanes = {};
30286 turnLanes.unspecified = parseTurnLanes(tags['turn:lanes']);
30287 turnLanes.forward = parseTurnLanes(tags['turn:lanes:forward']);
30288 turnLanes.backward = parseTurnLanes(tags['turn:lanes:backward']);
30290 var maxspeedLanes = {};
30291 maxspeedLanes.unspecified = parseMaxspeedLanes(tags['maxspeed:lanes'], maxspeed);
30292 maxspeedLanes.forward = parseMaxspeedLanes(tags['maxspeed:lanes:forward'], maxspeed);
30293 maxspeedLanes.backward = parseMaxspeedLanes(tags['maxspeed:lanes:backward'], maxspeed);
30296 psvLanes.unspecified = parseMiscLanes(tags['psv:lanes']);
30297 psvLanes.forward = parseMiscLanes(tags['psv:lanes:forward']);
30298 psvLanes.backward = parseMiscLanes(tags['psv:lanes:backward']);
30301 busLanes.unspecified = parseMiscLanes(tags['bus:lanes']);
30302 busLanes.forward = parseMiscLanes(tags['bus:lanes:forward']);
30303 busLanes.backward = parseMiscLanes(tags['bus:lanes:backward']);
30305 var taxiLanes = {};
30306 taxiLanes.unspecified = parseMiscLanes(tags['taxi:lanes']);
30307 taxiLanes.forward = parseMiscLanes(tags['taxi:lanes:forward']);
30308 taxiLanes.backward = parseMiscLanes(tags['taxi:lanes:backward']);
30311 hovLanes.unspecified = parseMiscLanes(tags['hov:lanes']);
30312 hovLanes.forward = parseMiscLanes(tags['hov:lanes:forward']);
30313 hovLanes.backward = parseMiscLanes(tags['hov:lanes:backward']);
30316 hgvLanes.unspecified = parseMiscLanes(tags['hgv:lanes']);
30317 hgvLanes.forward = parseMiscLanes(tags['hgv:lanes:forward']);
30318 hgvLanes.backward = parseMiscLanes(tags['hgv:lanes:backward']);
30320 var bicyclewayLanes = {};
30321 bicyclewayLanes.unspecified = parseBicycleWay(tags['bicycleway:lanes']);
30322 bicyclewayLanes.forward = parseBicycleWay(tags['bicycleway:lanes:forward']);
30323 bicyclewayLanes.backward = parseBicycleWay(tags['bicycleway:lanes:backward']);
30331 // map forward/backward/unspecified of each lane type to lanesObj
30332 mapToLanesObj(lanesObj, turnLanes, 'turnLane');
30333 mapToLanesObj(lanesObj, maxspeedLanes, 'maxspeed');
30334 mapToLanesObj(lanesObj, psvLanes, 'psv');
30335 mapToLanesObj(lanesObj, busLanes, 'bus');
30336 mapToLanesObj(lanesObj, taxiLanes, 'taxi');
30337 mapToLanesObj(lanesObj, hovLanes, 'hov');
30338 mapToLanesObj(lanesObj, hgvLanes, 'hgv');
30339 mapToLanesObj(lanesObj, bicyclewayLanes, 'bicycleway');
30346 backward: backward,
30347 bothways: bothways,
30348 turnLanes: turnLanes,
30349 maxspeed: maxspeed,
30350 maxspeedLanes: maxspeedLanes,
30351 psvLanes: psvLanes,
30352 busLanes: busLanes,
30353 taxiLanes: taxiLanes,
30354 hovLanes: hovLanes,
30355 hgvLanes: hgvLanes,
30356 bicyclewayLanes: bicyclewayLanes
30363 function getLaneCount(tags, isOneWay) {
30366 count = parseInt(tags.lanes, 10);
30373 switch (tags.highway) {
30376 count = isOneWay ? 2 : 4;
30379 count = isOneWay ? 1 : 2;
30387 function parseMaxspeed(tags) {
30388 var maxspeed = tags.maxspeed;
30389 if (!maxspeed) return;
30391 var maxspeedRegex = /^([0-9][\.0-9]+?)(?:[ ]?(?:km\/h|kmh|kph|mph|knots))?$/;
30392 if (!maxspeedRegex.test(maxspeed)) return;
30394 return parseInt(maxspeed, 10);
30398 function parseLaneDirections(tags, isOneWay, laneCount) {
30399 var forward = parseInt(tags['lanes:forward'], 10);
30400 var backward = parseInt(tags['lanes:backward'], 10);
30401 var bothways = parseInt(tags['lanes:both_ways'], 10) > 0 ? 1 : 0;
30403 if (parseInt(tags.oneway, 10) === -1) {
30406 backward = laneCount;
30408 else if (isOneWay) {
30409 forward = laneCount;
30413 else if (isNaN(forward) && isNaN(backward)) {
30414 backward = Math.floor((laneCount - bothways) / 2);
30415 forward = laneCount - bothways - backward;
30417 else if (isNaN(forward)) {
30418 if (backward > laneCount - bothways) {
30419 backward = laneCount - bothways;
30421 forward = laneCount - bothways - backward;
30423 else if (isNaN(backward)) {
30424 if (forward > laneCount - bothways) {
30425 forward = laneCount - bothways;
30427 backward = laneCount - bothways - forward;
30431 backward: backward,
30437 function parseTurnLanes(tag){
30440 var validValues = [
30441 'left', 'slight_left', 'sharp_left', 'through', 'right', 'slight_right',
30442 'sharp_right', 'reverse', 'merge_to_left', 'merge_to_right', 'none'
30445 return tag.split('|')
30446 .map(function (s) {
30447 if (s === '') s = 'none';
30448 return s.split(';')
30449 .map(function (d) {
30450 return validValues.indexOf(d) === -1 ? 'unknown': d;
30456 function parseMaxspeedLanes(tag, maxspeed) {
30459 return tag.split('|')
30460 .map(function (s) {
30461 if (s === 'none') return s;
30462 var m = parseInt(s, 10);
30463 if (s === '' || m === maxspeed) return null;
30464 return isNaN(m) ? 'unknown': m;
30469 function parseMiscLanes(tag) {
30472 var validValues = [
30473 'yes', 'no', 'designated'
30476 return tag.split('|')
30477 .map(function (s) {
30478 if (s === '') s = 'no';
30479 return validValues.indexOf(s) === -1 ? 'unknown': s;
30484 function parseBicycleWay(tag) {
30487 var validValues = [
30488 'yes', 'no', 'designated', 'lane'
30491 return tag.split('|')
30492 .map(function (s) {
30493 if (s === '') s = 'no';
30494 return validValues.indexOf(s) === -1 ? 'unknown': s;
30499 function mapToLanesObj(lanesObj, data, key) {
30500 if (data.forward) data.forward.forEach(function(l, i) {
30501 if (!lanesObj.forward[i]) lanesObj.forward[i] = {};
30502 lanesObj.forward[i][key] = l;
30504 if (data.backward) data.backward.forEach(function(l, i) {
30505 if (!lanesObj.backward[i]) lanesObj.backward[i] = {};
30506 lanesObj.backward[i][key] = l;
30508 if (data.unspecified) data.unspecified.forEach(function(l, i) {
30509 if (!lanesObj.unspecified[i]) lanesObj.unspecified[i] = {};
30510 lanesObj.unspecified[i][key] = l;
30514 function osmWay() {
30515 if (!(this instanceof osmWay)) {
30516 return (new osmWay()).initialize(arguments);
30517 } else if (arguments.length) {
30518 this.initialize(arguments);
30523 osmEntity.way = osmWay;
30525 osmWay.prototype = Object.create(osmEntity.prototype);
30528 Object.assign(osmWay.prototype, {
30533 copy: function(resolver, copies) {
30534 if (copies[this.id]) return copies[this.id];
30536 var copy = osmEntity.prototype.copy.call(this, resolver, copies);
30538 var nodes = this.nodes.map(function(id) {
30539 return resolver.entity(id).copy(resolver, copies).id;
30542 copy = copy.update({ nodes: nodes });
30543 copies[this.id] = copy;
30549 extent: function(resolver) {
30550 return resolver.transient(this, 'extent', function() {
30551 var extent = geoExtent();
30552 for (var i = 0; i < this.nodes.length; i++) {
30553 var node = resolver.hasEntity(this.nodes[i]);
30555 extent._extend(node.extent());
30563 first: function() {
30564 return this.nodes[0];
30569 return this.nodes[this.nodes.length - 1];
30573 contains: function(node) {
30574 return this.nodes.indexOf(node) >= 0;
30578 affix: function(node) {
30579 if (this.nodes[0] === node) return 'prefix';
30580 if (this.nodes[this.nodes.length - 1] === node) return 'suffix';
30584 layer: function() {
30585 // explicit layer tag, clamp between -10, 10..
30586 if (isFinite(this.tags.layer)) {
30587 return Math.max(-10, Math.min(+(this.tags.layer), 10));
30590 // implied layer tag..
30591 if (this.tags.covered === 'yes') return -1;
30592 if (this.tags.location === 'overground') return 1;
30593 if (this.tags.location === 'underground') return -1;
30594 if (this.tags.location === 'underwater') return -10;
30596 if (this.tags.power === 'line') return 10;
30597 if (this.tags.power === 'minor_line') return 10;
30598 if (this.tags.aerialway) return 10;
30599 if (this.tags.bridge) return 1;
30600 if (this.tags.cutting) return -1;
30601 if (this.tags.tunnel) return -1;
30602 if (this.tags.waterway) return -1;
30603 if (this.tags.man_made === 'pipeline') return -10;
30604 if (this.tags.boundary) return -10;
30609 isOneWay: function() {
30610 // explicit oneway tag..
30615 'reversible': true,
30616 'alternating': true,
30620 if (values[this.tags.oneway] !== undefined) {
30621 return values[this.tags.oneway];
30624 // implied oneway tag..
30625 for (var key in this.tags) {
30626 if (key in osmOneWayTags && (this.tags[key] in osmOneWayTags[key]))
30632 // Some identifier for tag that implies that this way is "sided",
30633 // i.e. the right side is the 'inside' (e.g. the right side of a
30634 // natural=cliff is lower).
30635 sidednessIdentifier: function() {
30636 for (var key in this.tags) {
30637 var value = this.tags[key];
30638 if (key in osmRightSideIsInsideTags && (value in osmRightSideIsInsideTags[key])) {
30639 if (osmRightSideIsInsideTags[key][value] === true) {
30642 // if the map's value is something other than a
30643 // literal true, we should use it so we can
30644 // special case some keys (e.g. natural=coastline
30645 // is handled differently to other naturals).
30646 return osmRightSideIsInsideTags[key][value];
30654 isSided: function() {
30655 if (this.tags.two_sided === 'yes') {
30659 return this.sidednessIdentifier() !== null;
30662 lanes: function() {
30663 return osmLanes(this);
30667 isClosed: function() {
30668 return this.nodes.length > 1 && this.first() === this.last();
30672 isConvex: function(resolver) {
30673 if (!this.isClosed() || this.isDegenerate()) return null;
30675 var nodes = utilArrayUniq(resolver.childNodes(this));
30676 var coords = nodes.map(function(n) { return n.loc; });
30680 for (var i = 0; i < coords.length; i++) {
30681 var o = coords[(i+1) % coords.length];
30683 var b = coords[(i+2) % coords.length];
30684 var res = geoVecCross(a, b, o);
30686 curr = (res > 0) ? 1 : (res < 0) ? -1 : 0;
30689 } else if (prev && curr !== prev) {
30697 // returns an object with the tag that implies this is an area, if any
30698 tagSuggestingArea: function() {
30699 if (this.tags.area === 'yes') return { area: 'yes' };
30700 if (this.tags.area === 'no') return null;
30702 // `highway` and `railway` are typically linear features, but there
30703 // are a few exceptions that should be treated as areas, even in the
30704 // absence of a proper `area=yes` or `areaKeys` tag.. see #4194
30718 var returnTags = {};
30719 for (var key in this.tags) {
30720 if (key in osmAreaKeys && !(this.tags[key] in osmAreaKeys[key])) {
30721 returnTags[key] = this.tags[key];
30724 if (key in lineKeys && this.tags[key] in lineKeys[key]) {
30725 returnTags[key] = this.tags[key];
30732 isArea: function() {
30733 if (this.tags.area === 'yes')
30735 if (!this.isClosed() || this.tags.area === 'no')
30737 return this.tagSuggestingArea() !== null;
30741 isDegenerate: function() {
30742 return (new Set(this.nodes).size < (this.isArea() ? 3 : 2));
30746 areAdjacent: function(n1, n2) {
30747 for (var i = 0; i < this.nodes.length; i++) {
30748 if (this.nodes[i] === n1) {
30749 if (this.nodes[i - 1] === n2) return true;
30750 if (this.nodes[i + 1] === n2) return true;
30757 geometry: function(graph) {
30758 return graph.transient(this, 'geometry', function() {
30759 return this.isArea() ? 'area' : 'line';
30764 // If this way is not closed, append the beginning node to the end of the nodelist to close it.
30765 close: function() {
30766 if (this.isClosed() || !this.nodes.length) return this;
30768 var nodes = this.nodes.slice();
30769 nodes = nodes.filter(noRepeatNodes);
30770 nodes.push(nodes[0]);
30771 return this.update({ nodes: nodes });
30775 // If this way is closed, remove any connector nodes from the end of the nodelist to unclose it.
30776 unclose: function() {
30777 if (!this.isClosed()) return this;
30779 var nodes = this.nodes.slice();
30780 var connector = this.first();
30781 var i = nodes.length - 1;
30783 // remove trailing connectors..
30784 while (i > 0 && nodes.length > 1 && nodes[i] === connector) {
30785 nodes.splice(i, 1);
30786 i = nodes.length - 1;
30789 nodes = nodes.filter(noRepeatNodes);
30790 return this.update({ nodes: nodes });
30794 // Adds a node (id) in front of the node which is currently at position index.
30795 // If index is undefined, the node will be added to the end of the way for linear ways,
30796 // or just before the final connecting node for circular ways.
30797 // Consecutive duplicates are eliminated including existing ones.
30798 // Circularity is always preserved when adding a node.
30799 addNode: function(id, index) {
30800 var nodes = this.nodes.slice();
30801 var isClosed = this.isClosed();
30802 var max = isClosed ? nodes.length - 1 : nodes.length;
30804 if (index === undefined) {
30808 if (index < 0 || index > max) {
30809 throw new RangeError('index ' + index + ' out of range 0..' + max);
30812 // If this is a closed way, remove all connector nodes except the first one
30813 // (there may be duplicates) and adjust index if necessary..
30815 var connector = this.first();
30817 // leading connectors..
30819 while (i < nodes.length && nodes.length > 2 && nodes[i] === connector) {
30820 nodes.splice(i, 1);
30821 if (index > i) index--;
30824 // trailing connectors..
30825 i = nodes.length - 1;
30826 while (i > 0 && nodes.length > 1 && nodes[i] === connector) {
30827 nodes.splice(i, 1);
30828 if (index > i) index--;
30829 i = nodes.length - 1;
30833 nodes.splice(index, 0, id);
30834 nodes = nodes.filter(noRepeatNodes);
30836 // If the way was closed before, append a connector node to keep it closed..
30837 if (isClosed && (nodes.length === 1 || nodes[0] !== nodes[nodes.length - 1])) {
30838 nodes.push(nodes[0]);
30841 return this.update({ nodes: nodes });
30845 // Replaces the node which is currently at position index with the given node (id).
30846 // Consecutive duplicates are eliminated including existing ones.
30847 // Circularity is preserved when updating a node.
30848 updateNode: function(id, index) {
30849 var nodes = this.nodes.slice();
30850 var isClosed = this.isClosed();
30851 var max = nodes.length - 1;
30853 if (index === undefined || index < 0 || index > max) {
30854 throw new RangeError('index ' + index + ' out of range 0..' + max);
30857 // If this is a closed way, remove all connector nodes except the first one
30858 // (there may be duplicates) and adjust index if necessary..
30860 var connector = this.first();
30862 // leading connectors..
30864 while (i < nodes.length && nodes.length > 2 && nodes[i] === connector) {
30865 nodes.splice(i, 1);
30866 if (index > i) index--;
30869 // trailing connectors..
30870 i = nodes.length - 1;
30871 while (i > 0 && nodes.length > 1 && nodes[i] === connector) {
30872 nodes.splice(i, 1);
30873 if (index === i) index = 0; // update leading connector instead
30874 i = nodes.length - 1;
30878 nodes.splice(index, 1, id);
30879 nodes = nodes.filter(noRepeatNodes);
30881 // If the way was closed before, append a connector node to keep it closed..
30882 if (isClosed && (nodes.length === 1 || nodes[0] !== nodes[nodes.length - 1])) {
30883 nodes.push(nodes[0]);
30886 return this.update({nodes: nodes});
30890 // Replaces each occurrence of node id needle with replacement.
30891 // Consecutive duplicates are eliminated including existing ones.
30892 // Circularity is preserved.
30893 replaceNode: function(needleID, replacementID) {
30894 var nodes = this.nodes.slice();
30895 var isClosed = this.isClosed();
30897 for (var i = 0; i < nodes.length; i++) {
30898 if (nodes[i] === needleID) {
30899 nodes[i] = replacementID;
30903 nodes = nodes.filter(noRepeatNodes);
30905 // If the way was closed before, append a connector node to keep it closed..
30906 if (isClosed && (nodes.length === 1 || nodes[0] !== nodes[nodes.length - 1])) {
30907 nodes.push(nodes[0]);
30910 return this.update({nodes: nodes});
30914 // Removes each occurrence of node id.
30915 // Consecutive duplicates are eliminated including existing ones.
30916 // Circularity is preserved.
30917 removeNode: function(id) {
30918 var nodes = this.nodes.slice();
30919 var isClosed = this.isClosed();
30922 .filter(function(node) { return node !== id; })
30923 .filter(noRepeatNodes);
30925 // If the way was closed before, append a connector node to keep it closed..
30926 if (isClosed && (nodes.length === 1 || nodes[0] !== nodes[nodes.length - 1])) {
30927 nodes.push(nodes[0]);
30930 return this.update({nodes: nodes});
30934 asJXON: function(changeset_id) {
30937 '@id': this.osmId(),
30938 '@version': this.version || 0,
30939 nd: this.nodes.map(function(id) {
30940 return { keyAttributes: { ref: osmEntity.id.toOSM(id) } };
30942 tag: Object.keys(this.tags).map(function(k) {
30943 return { keyAttributes: { k: k, v: this.tags[k] } };
30947 if (changeset_id) {
30948 r.way['@changeset'] = changeset_id;
30954 asGeoJSON: function(resolver) {
30955 return resolver.transient(this, 'GeoJSON', function() {
30956 var coordinates = resolver.childNodes(this)
30957 .map(function(n) { return n.loc; });
30959 if (this.isArea() && this.isClosed()) {
30962 coordinates: [coordinates]
30966 type: 'LineString',
30967 coordinates: coordinates
30974 area: function(resolver) {
30975 return resolver.transient(this, 'area', function() {
30976 var nodes = resolver.childNodes(this);
30980 coordinates: [ nodes.map(function(n) { return n.loc; }) ]
30983 if (!this.isClosed() && nodes.length) {
30984 json.coordinates[0].push(nodes[0].loc);
30987 var area = d3_geoArea(json);
30989 // Heuristic for detecting counterclockwise winding order. Assumes
30990 // that OpenStreetMap polygons are not hemisphere-spanning.
30991 if (area > 2 * Math.PI) {
30992 json.coordinates[0] = json.coordinates[0].reverse();
30993 area = d3_geoArea(json);
30996 return isNaN(area) ? 0 : area;
31002 // Filter function to eliminate consecutive duplicates.
31003 function noRepeatNodes(node, i, arr) {
31004 return i === 0 || node !== arr[i - 1];
31007 // "Old" multipolyons, previously known as "simple" multipolygons, are as follows:
31009 // 1. Relation tagged with `type=multipolygon` and no interesting tags.
31010 // 2. One and only one member with the `outer` role. Must be a way with interesting tags.
31011 // 3. No members without a role.
31013 // Old multipolygons are no longer recommended but are still rendered as areas by iD.
31015 function osmOldMultipolygonOuterMemberOfRelation(entity, graph) {
31016 if (entity.type !== 'relation' ||
31017 !entity.isMultipolygon()
31018 || Object.keys(entity.tags).filter(osmIsInterestingTag).length > 1) {
31023 for (var memberIndex in entity.members) {
31024 var member = entity.members[memberIndex];
31025 if (!member.role || member.role === 'outer') {
31026 if (outerMember) return false;
31027 if (member.type !== 'way') return false;
31028 if (!graph.hasEntity(member.id)) return false;
31030 outerMember = graph.entity(member.id);
31032 if (Object.keys(outerMember.tags).filter(osmIsInterestingTag).length === 0) {
31038 return outerMember;
31041 // For fixing up rendering of multipolygons with tags on the outer member.
31042 // https://github.com/openstreetmap/iD/issues/613
31043 function osmIsOldMultipolygonOuterMember(entity, graph) {
31044 if (entity.type !== 'way' || Object.keys(entity.tags).filter(osmIsInterestingTag).length === 0)
31047 var parents = graph.parentRelations(entity);
31048 if (parents.length !== 1)
31051 var parent = parents[0];
31052 if (!parent.isMultipolygon() || Object.keys(parent.tags).filter(osmIsInterestingTag).length > 1)
31055 var members = parent.members, member;
31056 for (var i = 0; i < members.length; i++) {
31057 member = members[i];
31058 if (member.id === entity.id && member.role && member.role !== 'outer')
31059 return false; // Not outer member
31060 if (member.id !== entity.id && (!member.role || member.role === 'outer'))
31061 return false; // Not a simple multipolygon
31068 function osmOldMultipolygonOuterMember(entity, graph) {
31069 if (entity.type !== 'way')
31072 var parents = graph.parentRelations(entity);
31073 if (parents.length !== 1)
31076 var parent = parents[0];
31077 if (!parent.isMultipolygon() || Object.keys(parent.tags).filter(osmIsInterestingTag).length > 1)
31080 var members = parent.members, member, outerMember;
31081 for (var i = 0; i < members.length; i++) {
31082 member = members[i];
31083 if (!member.role || member.role === 'outer') {
31085 return false; // Not a simple multipolygon
31086 outerMember = member;
31093 var outerEntity = graph.hasEntity(outerMember.id);
31094 if (!outerEntity || !Object.keys(outerEntity.tags).filter(osmIsInterestingTag).length)
31097 return outerEntity;
31101 // Join `toJoin` array into sequences of connecting ways.
31103 // Segments which share identical start/end nodes will, as much as possible,
31104 // be connected with each other.
31106 // The return value is a nested array. Each constituent array contains elements
31107 // of `toJoin` which have been determined to connect.
31109 // Each consitituent array also has a `nodes` property whose value is an
31110 // ordered array of member nodes, with appropriate order reversal and
31111 // start/end coordinate de-duplication.
31113 // Members of `toJoin` must have, at minimum, `type` and `id` properties.
31114 // Thus either an array of `osmWay`s or a relation member array may be used.
31116 // If an member is an `osmWay`, its tags and childnodes may be reversed via
31117 // `actionReverse` in the output.
31119 // The returned sequences array also has an `actions` array property, containing
31120 // any reversal actions that should be applied to the graph, should the calling
31121 // code attempt to actually join the given ways.
31123 // Incomplete members (those for which `graph.hasEntity(element.id)` returns
31124 // false) and non-way members are ignored.
31126 function osmJoinWays(toJoin, graph) {
31127 function resolve(member) {
31128 return graph.childNodes(graph.entity(member.id));
31131 function reverse(item) {
31132 var action = actionReverse(item.id, { reverseOneway: true });
31133 sequences.actions.push(action);
31134 return (item instanceof osmWay) ? action(graph).entity(item.id) : item;
31137 // make a copy containing only the items to join
31138 toJoin = toJoin.filter(function(member) {
31139 return member.type === 'way' && graph.hasEntity(member.id);
31142 // Are the things we are joining relation members or `osmWays`?
31143 // If `osmWays`, skip the "prefer a forward path" code below (see #4872)
31145 var joinAsMembers = true;
31146 for (i = 0; i < toJoin.length; i++) {
31147 if (toJoin[i] instanceof osmWay) {
31148 joinAsMembers = false;
31153 var sequences = [];
31154 sequences.actions = [];
31156 while (toJoin.length) {
31157 // start a new sequence
31158 var item = toJoin.shift();
31159 var currWays = [item];
31160 var currNodes = resolve(item).slice();
31161 var doneSequence = false;
31164 while (toJoin.length && !doneSequence) {
31165 var start = currNodes[0];
31166 var end = currNodes[currNodes.length - 1];
31170 // Find the next way/member to join.
31171 for (i = 0; i < toJoin.length; i++) {
31173 nodes = resolve(item);
31175 // (for member ordering only, not way ordering - see #4872)
31176 // Strongly prefer to generate a forward path that preserves the order
31177 // of the members array. For multipolygons and most relations, member
31178 // order does not matter - but for routes, it does. (see #4589)
31179 // If we started this sequence backwards (i.e. next member way attaches to
31180 // the start node and not the end node), reverse the initial way before continuing.
31181 if (joinAsMembers && currWays.length === 1 && nodes[0] !== end && nodes[nodes.length - 1] !== end &&
31182 (nodes[nodes.length - 1] === start || nodes[0] === start)
31184 currWays[0] = reverse(currWays[0]);
31185 currNodes.reverse();
31186 start = currNodes[0];
31187 end = currNodes[currNodes.length - 1];
31190 if (nodes[0] === end) {
31191 fn = currNodes.push; // join to end
31192 nodes = nodes.slice(1);
31194 } else if (nodes[nodes.length - 1] === end) {
31195 fn = currNodes.push; // join to end
31196 nodes = nodes.slice(0, -1).reverse();
31197 item = reverse(item);
31199 } else if (nodes[nodes.length - 1] === start) {
31200 fn = currNodes.unshift; // join to beginning
31201 nodes = nodes.slice(0, -1);
31203 } else if (nodes[0] === start) {
31204 fn = currNodes.unshift; // join to beginning
31205 nodes = nodes.slice(1).reverse();
31206 item = reverse(item);
31213 if (!nodes) { // couldn't find a joinable way/member
31214 doneSequence = true;
31218 fn.apply(currWays, [item]);
31219 fn.apply(currNodes, nodes);
31221 toJoin.splice(i, 1);
31224 currWays.nodes = currNodes;
31225 sequences.push(currWays);
31231 function actionAddMember(relationId, member, memberIndex, insertPair) {
31233 return function action(graph) {
31234 var relation = graph.entity(relationId);
31236 // There are some special rules for Public Transport v2 routes.
31237 var isPTv2 = /stop|platform/.test(member.role);
31239 if ((isNaN(memberIndex) || insertPair) && member.type === 'way' && !isPTv2) {
31240 // Try to perform sensible inserts based on how the ways join together
31241 graph = addWayMember(relation, graph);
31243 // see https://wiki.openstreetmap.org/wiki/Public_transport#Service_routes
31244 // Stops and Platforms for PTv2 should be ordered first.
31245 // hack: We do not currently have the ability to place them in the exactly correct order.
31246 if (isPTv2 && isNaN(memberIndex)) {
31250 graph = graph.replace(relation.addMember(member, memberIndex));
31257 // Add a way member into the relation "wherever it makes sense".
31258 // In this situation we were not supplied a memberIndex.
31259 function addWayMember(relation, graph) {
31260 var groups, tempWay, item, i, j, k;
31262 // remove PTv2 stops and platforms before doing anything.
31263 var PTv2members = [];
31265 for (i = 0; i < relation.members.length; i++) {
31266 var m = relation.members[i];
31267 if (/stop|platform/.test(m.role)) {
31268 PTv2members.push(m);
31273 relation = relation.update({ members: members });
31277 // We're adding a member that must stay paired with an existing member.
31278 // (This feature is used by `actionSplit`)
31280 // This is tricky because the members may exist multiple times in the
31281 // member list, and with different A-B/B-A ordering and different roles.
31282 // (e.g. a bus route that loops out and back - #4589).
31284 // Replace the existing member with a temporary way,
31285 // so that `osmJoinWays` can treat the pair like a single way.
31286 tempWay = osmWay({ id: 'wTemp', nodes: insertPair.nodes });
31287 graph = graph.replace(tempWay);
31288 var tempMember = { id: tempWay.id, type: 'way', role: member.role };
31289 var tempRelation = relation.replaceMember({id: insertPair.originalID}, tempMember, true);
31290 groups = utilArrayGroupBy(tempRelation.members, 'type');
31291 groups.way = groups.way || [];
31294 // Add the member anywhere, one time. Just push and let `osmJoinWays` decide where to put it.
31295 groups = utilArrayGroupBy(relation.members, 'type');
31296 groups.way = groups.way || [];
31297 groups.way.push(member);
31300 members = withIndex(groups.way);
31301 var joined = osmJoinWays(members, graph);
31303 // `joined` might not contain all of the way members,
31304 // But will contain only the completed (downloaded) members
31305 for (i = 0; i < joined.length; i++) {
31306 var segment = joined[i];
31307 var nodes = segment.nodes.slice();
31308 var startIndex = segment[0].index;
31310 // j = array index in `members` where this segment starts
31311 for (j = 0; j < members.length; j++) {
31312 if (members[j].index === startIndex) {
31317 // k = each member in segment
31318 for (k = 0; k < segment.length; k++) {
31320 var way = graph.entity(item.id);
31322 // If this is a paired item, generate members in correct order and role
31323 if (tempWay && item.id === tempWay.id) {
31324 if (nodes[0].id === insertPair.nodes[0]) {
31326 { id: insertPair.originalID, type: 'way', role: item.role },
31327 { id: insertPair.insertedID, type: 'way', role: item.role }
31331 { id: insertPair.insertedID, type: 'way', role: item.role },
31332 { id: insertPair.originalID, type: 'way', role: item.role }
31337 // reorder `members` if necessary
31339 if (j+k >= members.length || item.index !== members[j+k].index) {
31340 moveMember(members, item.index, j+k);
31344 nodes.splice(0, way.nodes.length - 1);
31349 graph = graph.remove(tempWay);
31352 // Final pass: skip dead items, split pairs, remove index properties
31353 var wayMembers = [];
31354 for (i = 0; i < members.length; i++) {
31356 if (item.index === -1) continue;
31359 wayMembers.push(item.pair[0]);
31360 wayMembers.push(item.pair[1]);
31362 wayMembers.push(utilObjectOmit(item, ['index']));
31366 // Put stops and platforms first, then nodes, ways, relations
31367 // This is recommended for Public Transport v2 routes:
31368 // see https://wiki.openstreetmap.org/wiki/Public_transport#Service_routes
31369 var newMembers = PTv2members.concat( (groups.node || []), wayMembers, (groups.relation || []) );
31371 return graph.replace(relation.update({ members: newMembers }));
31374 // `moveMember()` changes the `members` array in place by splicing
31375 // the item with `.index = findIndex` to where it belongs,
31376 // and marking the old position as "dead" with `.index = -1`
31380 // members 0 1 2 3 4 5 6 7 8 9 keep 5 in j+k
31384 // members 0 1 2 3 4 5 6 7 8 9 move 4 to j+k
31385 // members 0 1 2 3 x 5 4 6 7 8 9 moved
31389 // members 0 1 2 3 x 5 4 6 7 8 9 move 7 to j+k
31390 // members 0 1 2 3 x 5 4 7 6 x 8 9 moved
31394 // members 0 1 2 3 x 5 4 7 6 x 8 9 keep 6 in j+k
31396 function moveMember(arr, findIndex, toIndex) {
31397 for (var i = 0; i < arr.length; i++) {
31398 if (arr[i].index === findIndex) {
31403 var item = Object.assign({}, arr[i]); // shallow copy
31404 arr[i].index = -1; // mark as dead
31405 item.index = toIndex;
31406 arr.splice(toIndex, 0, item);
31410 // This is the same as `Relation.indexedMembers`,
31411 // Except we don't want to index all the members, only the ways
31412 function withIndex(arr) {
31413 var result = new Array(arr.length);
31414 for (var i = 0; i < arr.length; i++) {
31415 result[i] = Object.assign({}, arr[i]); // shallow copy
31416 result[i].index = i;
31424 function actionAddMidpoint(midpoint, node) {
31425 return function(graph) {
31426 graph = graph.replace(node.move(midpoint.loc));
31428 var parents = utilArrayIntersection(
31429 graph.parentWays(graph.entity(midpoint.edge[0])),
31430 graph.parentWays(graph.entity(midpoint.edge[1]))
31433 parents.forEach(function(way) {
31434 for (var i = 0; i < way.nodes.length - 1; i++) {
31435 if (geoEdgeEqual([way.nodes[i], way.nodes[i + 1]], midpoint.edge)) {
31436 graph = graph.replace(graph.entity(way.id).addNode(node.id, i + 1));
31438 // Add only one midpoint on doubled-back segments,
31439 // turning them into self-intersections.
31449 // https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/AddNodeToWayAction.as
31450 function actionAddVertex(wayId, nodeId, index) {
31451 return function(graph) {
31452 return graph.replace(graph.entity(wayId).addNode(nodeId, index));
31456 function actionChangeMember(relationId, member, memberIndex) {
31457 return function(graph) {
31458 return graph.replace(graph.entity(relationId).updateMember(member, memberIndex));
31462 function actionChangePreset(entityID, oldPreset, newPreset, skipFieldDefaults) {
31463 return function action(graph) {
31464 var entity = graph.entity(entityID);
31465 var geometry = entity.geometry(graph);
31466 var tags = entity.tags;
31468 if (oldPreset) tags = oldPreset.unsetTags(tags, geometry);
31469 if (newPreset) tags = newPreset.setTags(tags, geometry, skipFieldDefaults);
31471 return graph.replace(entity.update({tags: tags}));
31475 function actionChangeTags(entityId, tags) {
31476 return function(graph) {
31477 var entity = graph.entity(entityId);
31478 return graph.replace(entity.update({tags: tags}));
31482 function osmNode() {
31483 if (!(this instanceof osmNode)) {
31484 return (new osmNode()).initialize(arguments);
31485 } else if (arguments.length) {
31486 this.initialize(arguments);
31490 osmEntity.node = osmNode;
31492 osmNode.prototype = Object.create(osmEntity.prototype);
31494 Object.assign(osmNode.prototype, {
31498 extent: function() {
31499 return new geoExtent(this.loc);
31503 geometry: function(graph) {
31504 return graph.transient(this, 'geometry', function() {
31505 return graph.isPoi(this) ? 'point' : 'vertex';
31510 move: function(loc) {
31511 return this.update({loc: loc});
31515 isDegenerate: function() {
31517 Array.isArray(this.loc) && this.loc.length === 2 &&
31518 this.loc[0] >= -180 && this.loc[0] <= 180 &&
31519 this.loc[1] >= -90 && this.loc[1] <= 90
31524 // Inspect tags and geometry to determine which direction(s) this node/vertex points
31525 directions: function(resolver, projection) {
31529 // which tag to use?
31530 if (this.isHighwayIntersection(resolver) && (this.tags.stop || '').toLowerCase() === 'all') {
31531 // all-way stop tag on a highway intersection
31534 // generic direction tag
31535 val = (this.tags.direction || '').toLowerCase();
31537 // better suffix-style direction tag
31538 var re = /:direction$/i;
31539 var keys = Object.keys(this.tags);
31540 for (i = 0; i < keys.length; i++) {
31541 if (re.test(keys[i])) {
31542 val = this.tags[keys[i]].toLowerCase();
31548 if (val === '') return [];
31552 northnortheast: 22, nne: 22,
31553 northeast: 45, ne: 45,
31554 eastnortheast: 67, ene: 67,
31556 eastsoutheast: 112, ese: 112,
31557 southeast: 135, se: 135,
31558 southsoutheast: 157, sse: 157,
31559 south: 180, s: 180,
31560 southsouthwest: 202, ssw: 202,
31561 southwest: 225, sw: 225,
31562 westsouthwest: 247, wsw: 247,
31564 westnorthwest: 292, wnw: 292,
31565 northwest: 315, nw: 315,
31566 northnorthwest: 337, nnw: 337
31570 var values = val.split(';');
31573 values.forEach(function(v) {
31574 // swap cardinal for numeric directions
31575 if (cardinal[v] !== undefined) {
31579 // numeric direction - just add to results
31580 if (v !== '' && !isNaN(+v)) {
31585 // string direction - inspect parent ways
31587 (this.tags['traffic_sign:backward'] || v === 'backward' || v === 'both' || v === 'all');
31589 (this.tags['traffic_sign:forward'] || v === 'forward' || v === 'both' || v === 'all');
31591 if (!lookForward && !lookBackward) return;
31594 resolver.parentWays(this).forEach(function(parent) {
31595 var nodes = parent.nodes;
31596 for (i = 0; i < nodes.length; i++) {
31597 if (nodes[i] === this.id) { // match current entity
31598 if (lookForward && i > 0) {
31599 nodeIds[nodes[i - 1]] = true; // look back to prev node
31601 if (lookBackward && i < nodes.length - 1) {
31602 nodeIds[nodes[i + 1]] = true; // look ahead to next node
31608 Object.keys(nodeIds).forEach(function(nodeId) {
31609 // +90 because geoAngle returns angle from X axis, not Y (north)
31611 (geoAngle(this, resolver.entity(nodeId), projection) * (180 / Math.PI)) + 90
31617 return utilArrayUniq(results);
31621 isEndpoint: function(resolver) {
31622 return resolver.transient(this, 'isEndpoint', function() {
31624 return resolver.parentWays(this).filter(function(parent) {
31625 return !parent.isClosed() && !!parent.affix(id);
31631 isConnected: function(resolver) {
31632 return resolver.transient(this, 'isConnected', function() {
31633 var parents = resolver.parentWays(this);
31635 function isLine(entity) {
31636 return entity.geometry(resolver) === 'line' &&
31637 entity.hasInterestingTags();
31640 // vertex is connected to multiple parent lines
31641 if (parents.length > 1 && parents.some(isLine)) {
31644 } else if (parents.length === 1) {
31645 var way = parents[0];
31646 var nodes = way.nodes.slice();
31647 if (way.isClosed()) { nodes.pop(); } // ignore connecting node if closed
31649 // return true if vertex appears multiple times (way is self intersecting)
31650 return nodes.indexOf(this.id) !== nodes.lastIndexOf(this.id);
31658 isIntersection: function(resolver) {
31659 return resolver.transient(this, 'isIntersection', function() {
31660 return resolver.parentWays(this).filter(function(parent) {
31661 return (parent.tags.highway ||
31662 parent.tags.waterway ||
31663 parent.tags.railway ||
31664 parent.tags.aeroway) &&
31665 parent.geometry(resolver) === 'line';
31671 isHighwayIntersection: function(resolver) {
31672 return resolver.transient(this, 'isHighwayIntersection', function() {
31673 return resolver.parentWays(this).filter(function(parent) {
31674 return parent.tags.highway && parent.geometry(resolver) === 'line';
31680 isOnAddressLine: function(resolver) {
31681 return resolver.transient(this, 'isOnAddressLine', function() {
31682 return resolver.parentWays(this).filter(function(parent) {
31683 return parent.tags.hasOwnProperty('addr:interpolation') &&
31684 parent.geometry(resolver) === 'line';
31690 asJXON: function(changeset_id) {
31693 '@id': this.osmId(),
31694 '@lon': this.loc[0],
31695 '@lat': this.loc[1],
31696 '@version': (this.version || 0),
31697 tag: Object.keys(this.tags).map(function(k) {
31698 return { keyAttributes: { k: k, v: this.tags[k] } };
31702 if (changeset_id) r.node['@changeset'] = changeset_id;
31707 asGeoJSON: function() {
31710 coordinates: this.loc
31715 function actionCircularize(wayId, projection, maxAngle) {
31716 maxAngle = (maxAngle || 20) * Math.PI / 180;
31719 var action = function(graph, t) {
31720 if (t === null || !isFinite(t)) t = 1;
31721 t = Math.min(Math.max(+t, 0), 1);
31723 var way = graph.entity(wayId);
31724 var origNodes = {};
31726 graph.childNodes(way).forEach(function(node) {
31727 if (!origNodes[node.id]) origNodes[node.id] = node;
31730 if (!way.isConvex(graph)) {
31731 graph = action.makeConvex(graph);
31734 var nodes = utilArrayUniq(graph.childNodes(way));
31735 var keyNodes = nodes.filter(function(n) { return graph.parentWays(n).length !== 1; });
31736 var points = nodes.map(function(n) { return projection(n.loc); });
31737 var keyPoints = keyNodes.map(function(n) { return projection(n.loc); });
31738 var centroid = (points.length === 2) ? geoVecInterp(points[0], points[1], 0.5) : d3_polygonCentroid(points);
31739 var radius = d3_median(points, function(p) { return geoVecLength(centroid, p); });
31740 var sign = d3_polygonArea(points) > 0 ? 1 : -1;
31743 // we need atleast two key nodes for the algorithm to work
31744 if (!keyNodes.length) {
31745 keyNodes = [nodes[0]];
31746 keyPoints = [points[0]];
31749 if (keyNodes.length === 1) {
31750 var index = nodes.indexOf(keyNodes[0]);
31751 var oppositeIndex = Math.floor((index + nodes.length / 2) % nodes.length);
31753 keyNodes.push(nodes[oppositeIndex]);
31754 keyPoints.push(points[oppositeIndex]);
31757 // key points and nodes are those connected to the ways,
31758 // they are projected onto the circle, inbetween nodes are moved
31759 // to constant intervals between key nodes, extra inbetween nodes are
31760 // added if necessary.
31761 for (i = 0; i < keyPoints.length; i++) {
31762 var nextKeyNodeIndex = (i + 1) % keyNodes.length;
31763 var startNode = keyNodes[i];
31764 var endNode = keyNodes[nextKeyNodeIndex];
31765 var startNodeIndex = nodes.indexOf(startNode);
31766 var endNodeIndex = nodes.indexOf(endNode);
31767 var numberNewPoints = -1;
31768 var indexRange = endNodeIndex - startNodeIndex;
31769 var nearNodes = {};
31770 var inBetweenNodes = [];
31771 var startAngle, endAngle, totalAngle, eachAngle;
31772 var angle, loc, node, origNode;
31774 if (indexRange < 0) {
31775 indexRange += nodes.length;
31778 // position this key node
31779 var distance = geoVecLength(centroid, keyPoints[i]) || 1e-4;
31781 centroid[0] + (keyPoints[i][0] - centroid[0]) / distance * radius,
31782 centroid[1] + (keyPoints[i][1] - centroid[1]) / distance * radius
31784 loc = projection.invert(keyPoints[i]);
31785 node = keyNodes[i];
31786 origNode = origNodes[node.id];
31787 node = node.move(geoVecInterp(origNode.loc, loc, t));
31788 graph = graph.replace(node);
31790 // figure out the between delta angle we want to match to
31791 startAngle = Math.atan2(keyPoints[i][1] - centroid[1], keyPoints[i][0] - centroid[0]);
31792 endAngle = Math.atan2(keyPoints[nextKeyNodeIndex][1] - centroid[1], keyPoints[nextKeyNodeIndex][0] - centroid[0]);
31793 totalAngle = endAngle - startAngle;
31795 // detects looping around -pi/pi
31796 if (totalAngle * sign > 0) {
31797 totalAngle = -sign * (2 * Math.PI - Math.abs(totalAngle));
31802 eachAngle = totalAngle / (indexRange + numberNewPoints);
31803 } while (Math.abs(eachAngle) > maxAngle);
31806 // move existing nodes
31807 for (j = 1; j < indexRange; j++) {
31808 angle = startAngle + j * eachAngle;
31809 loc = projection.invert([
31810 centroid[0] + Math.cos(angle) * radius,
31811 centroid[1] + Math.sin(angle) * radius
31814 node = nodes[(j + startNodeIndex) % nodes.length];
31815 origNode = origNodes[node.id];
31816 nearNodes[node.id] = angle;
31818 node = node.move(geoVecInterp(origNode.loc, loc, t));
31819 graph = graph.replace(node);
31822 // add new inbetween nodes if necessary
31823 for (j = 0; j < numberNewPoints; j++) {
31824 angle = startAngle + (indexRange + j) * eachAngle;
31825 loc = projection.invert([
31826 centroid[0] + Math.cos(angle) * radius,
31827 centroid[1] + Math.sin(angle) * radius
31830 // choose a nearnode to use as the original
31831 var min = Infinity;
31832 for (var nodeId in nearNodes) {
31833 var nearAngle = nearNodes[nodeId];
31834 var dist = Math.abs(nearAngle - angle);
31837 origNode = origNodes[nodeId];
31841 node = osmNode({ loc: geoVecInterp(origNode.loc, loc, t) });
31842 graph = graph.replace(node);
31844 nodes.splice(endNodeIndex + j, 0, node);
31845 inBetweenNodes.push(node.id);
31848 // Check for other ways that share these keyNodes..
31849 // If keyNodes are adjacent in both ways,
31850 // we can add inBetween nodes to that shared way too..
31851 if (indexRange === 1 && inBetweenNodes.length) {
31852 var startIndex1 = way.nodes.lastIndexOf(startNode.id);
31853 var endIndex1 = way.nodes.lastIndexOf(endNode.id);
31854 var wayDirection1 = (endIndex1 - startIndex1);
31855 if (wayDirection1 < -1) { wayDirection1 = 1; }
31857 var parentWays = graph.parentWays(keyNodes[i]);
31858 for (j = 0; j < parentWays.length; j++) {
31859 var sharedWay = parentWays[j];
31860 if (sharedWay === way) continue;
31862 if (sharedWay.areAdjacent(startNode.id, endNode.id)) {
31863 var startIndex2 = sharedWay.nodes.lastIndexOf(startNode.id);
31864 var endIndex2 = sharedWay.nodes.lastIndexOf(endNode.id);
31865 var wayDirection2 = (endIndex2 - startIndex2);
31866 var insertAt = endIndex2;
31867 if (wayDirection2 < -1) { wayDirection2 = 1; }
31869 if (wayDirection1 !== wayDirection2) {
31870 inBetweenNodes.reverse();
31871 insertAt = startIndex2;
31873 for (k = 0; k < inBetweenNodes.length; k++) {
31874 sharedWay = sharedWay.addNode(inBetweenNodes[k], insertAt + k);
31876 graph = graph.replace(sharedWay);
31883 // update the way to have all the new nodes
31884 ids = nodes.map(function(n) { return n.id; });
31887 way = way.update({nodes: ids});
31888 graph = graph.replace(way);
31894 action.makeConvex = function(graph) {
31895 var way = graph.entity(wayId);
31896 var nodes = utilArrayUniq(graph.childNodes(way));
31897 var points = nodes.map(function(n) { return projection(n.loc); });
31898 var sign = d3_polygonArea(points) > 0 ? 1 : -1;
31899 var hull = d3_polygonHull(points);
31902 // D3 convex hulls go counterclockwise..
31908 for (i = 0; i < hull.length - 1; i++) {
31909 var startIndex = points.indexOf(hull[i]);
31910 var endIndex = points.indexOf(hull[i+1]);
31911 var indexRange = (endIndex - startIndex);
31913 if (indexRange < 0) {
31914 indexRange += nodes.length;
31917 // move interior nodes to the surface of the convex hull..
31918 for (j = 1; j < indexRange; j++) {
31919 var point = geoVecInterp(hull[i], hull[i+1], j / indexRange);
31920 var node = nodes[(j + startIndex) % nodes.length].move(projection.invert(point));
31921 graph = graph.replace(node);
31928 action.disabled = function(graph) {
31929 if (!graph.entity(wayId).isClosed()) {
31930 return 'not_closed';
31935 action.transitionable = true;
31941 // https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/DeleteWayAction.as
31942 function actionDeleteWay(wayID) {
31944 function canDeleteNode(node, graph) {
31945 // don't delete nodes still attached to ways or relations
31946 if (graph.parentWays(node).length ||
31947 graph.parentRelations(node).length) return false;
31949 var geometries = osmNodeGeometriesForTags(node.tags);
31950 // don't delete if this node can be a standalone point
31951 if (geometries.point) return false;
31952 // delete if this node only be a vertex
31953 if (geometries.vertex) return true;
31955 // iD doesn't know if this should be a point or vertex,
31956 // so only delete if there are no interesting tags
31957 return !node.hasInterestingTags();
31961 var action = function(graph) {
31962 var way = graph.entity(wayID);
31964 graph.parentRelations(way).forEach(function(parent) {
31965 parent = parent.removeMembersWithID(wayID);
31966 graph = graph.replace(parent);
31968 if (parent.isDegenerate()) {
31969 graph = actionDeleteRelation(parent.id)(graph);
31973 (new Set(way.nodes)).forEach(function(nodeID) {
31974 graph = graph.replace(way.removeNode(nodeID));
31976 var node = graph.entity(nodeID);
31977 if (canDeleteNode(node, graph)) {
31978 graph = graph.remove(node);
31982 return graph.remove(way);
31989 function actionDeleteMultiple(ids) {
31991 way: actionDeleteWay,
31992 node: actionDeleteNode,
31993 relation: actionDeleteRelation
31997 var action = function(graph) {
31998 ids.forEach(function(id) {
31999 if (graph.hasEntity(id)) { // It may have been deleted aready.
32000 graph = actions[graph.entity(id).type](id)(graph);
32011 // https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/DeleteRelationAction.as
32012 function actionDeleteRelation(relationID, allowUntaggedMembers) {
32014 function canDeleteEntity(entity, graph) {
32015 return !graph.parentWays(entity).length &&
32016 !graph.parentRelations(entity).length &&
32017 (!entity.hasInterestingTags() && !allowUntaggedMembers);
32021 var action = function(graph) {
32022 var relation = graph.entity(relationID);
32024 graph.parentRelations(relation)
32025 .forEach(function(parent) {
32026 parent = parent.removeMembersWithID(relationID);
32027 graph = graph.replace(parent);
32029 if (parent.isDegenerate()) {
32030 graph = actionDeleteRelation(parent.id)(graph);
32034 var memberIDs = utilArrayUniq(relation.members.map(function(m) { return m.id; }));
32035 memberIDs.forEach(function(memberID) {
32036 graph = graph.replace(relation.removeMembersWithID(memberID));
32038 var entity = graph.entity(memberID);
32039 if (canDeleteEntity(entity, graph)) {
32040 graph = actionDeleteMultiple([memberID])(graph);
32044 return graph.remove(relation);
32051 // https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/DeleteNodeAction.as
32052 function actionDeleteNode(nodeId) {
32053 var action = function(graph) {
32054 var node = graph.entity(nodeId);
32056 graph.parentWays(node)
32057 .forEach(function(parent) {
32058 parent = parent.removeNode(nodeId);
32059 graph = graph.replace(parent);
32061 if (parent.isDegenerate()) {
32062 graph = actionDeleteWay(parent.id)(graph);
32066 graph.parentRelations(node)
32067 .forEach(function(parent) {
32068 parent = parent.removeMembersWithID(nodeId);
32069 graph = graph.replace(parent);
32071 if (parent.isDegenerate()) {
32072 graph = actionDeleteRelation(parent.id)(graph);
32076 return graph.remove(node);
32083 // Connect the ways at the given nodes.
32085 // First choose a node to be the survivor, with preference given
32086 // to an existing (not new) node.
32088 // Tags and relation memberships of of non-surviving nodes are merged
32089 // to the survivor.
32091 // This is the inverse of `iD.actionDisconnect`.
32094 // https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/MergeNodesAction.as
32095 // https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/actions/MergeNodesAction.java
32097 function actionConnect(nodeIDs) {
32098 var action = function(graph) {
32104 // Choose a survivor node, prefer an existing (not new) node - #4974
32105 for (i = 0; i < nodeIDs.length; i++) {
32106 survivor = graph.entity(nodeIDs[i]);
32107 if (survivor.version) break; // found one
32110 // Replace all non-surviving nodes with the survivor and merge tags.
32111 for (i = 0; i < nodeIDs.length; i++) {
32112 node = graph.entity(nodeIDs[i]);
32113 if (node.id === survivor.id) continue;
32115 parents = graph.parentWays(node);
32116 for (j = 0; j < parents.length; j++) {
32117 if (!parents[j].areAdjacent(node.id, survivor.id)) {
32118 graph = graph.replace(parents[j].replaceNode(node.id, survivor.id));
32122 parents = graph.parentRelations(node);
32123 for (j = 0; j < parents.length; j++) {
32124 graph = graph.replace(parents[j].replaceMember(node, survivor));
32127 survivor = survivor.mergeTags(node.tags);
32128 graph = actionDeleteNode(node.id)(graph);
32131 graph = graph.replace(survivor);
32137 action.disabled = function(graph) {
32139 var restrictionIDs = [];
32142 var relations, relation, role;
32145 // Choose a survivor node, prefer an existing (not new) node - #4974
32146 for (i = 0; i < nodeIDs.length; i++) {
32147 survivor = graph.entity(nodeIDs[i]);
32148 if (survivor.version) break; // found one
32151 // 1. disable if the nodes being connected have conflicting relation roles
32152 for (i = 0; i < nodeIDs.length; i++) {
32153 node = graph.entity(nodeIDs[i]);
32154 relations = graph.parentRelations(node);
32156 for (j = 0; j < relations.length; j++) {
32157 relation = relations[j];
32158 role = relation.memberById(node.id).role || '';
32160 // if this node is a via node in a restriction, remember for later
32161 if (relation.hasFromViaTo()) {
32162 restrictionIDs.push(relation.id);
32165 if (seen[relation.id] !== undefined && seen[relation.id] !== role) {
32168 seen[relation.id] = role;
32173 // gather restrictions for parent ways
32174 for (i = 0; i < nodeIDs.length; i++) {
32175 node = graph.entity(nodeIDs[i]);
32177 var parents = graph.parentWays(node);
32178 for (j = 0; j < parents.length; j++) {
32179 var parent = parents[j];
32180 relations = graph.parentRelations(parent);
32182 for (k = 0; k < relations.length; k++) {
32183 relation = relations[k];
32184 if (relation.hasFromViaTo()) {
32185 restrictionIDs.push(relation.id);
32192 // test restrictions
32193 restrictionIDs = utilArrayUniq(restrictionIDs);
32194 for (i = 0; i < restrictionIDs.length; i++) {
32195 relation = graph.entity(restrictionIDs[i]);
32196 if (!relation.isComplete(graph)) continue;
32198 var memberWays = relation.members
32199 .filter(function(m) { return m.type === 'way'; })
32200 .map(function(m) { return graph.entity(m.id); });
32202 memberWays = utilArrayUniq(memberWays);
32203 var f = relation.memberByRole('from');
32204 var t = relation.memberByRole('to');
32205 var isUturn = (f.id === t.id);
32207 // 2a. disable if connection would damage a restriction
32208 // (a key node is a node at the junction of ways)
32209 var nodes = { from: [], via: [], to: [], keyfrom: [], keyto: [] };
32210 for (j = 0; j < relation.members.length; j++) {
32211 collectNodes(relation.members[j], nodes);
32214 nodes.keyfrom = utilArrayUniq(nodes.keyfrom.filter(hasDuplicates));
32215 nodes.keyto = utilArrayUniq(nodes.keyto.filter(hasDuplicates));
32217 var filter = keyNodeFilter(nodes.keyfrom, nodes.keyto);
32218 nodes.from = nodes.from.filter(filter);
32219 nodes.via = nodes.via.filter(filter);
32220 nodes.to = nodes.to.filter(filter);
32222 var connectFrom = false;
32223 var connectVia = false;
32224 var connectTo = false;
32225 var connectKeyFrom = false;
32226 var connectKeyTo = false;
32228 for (j = 0; j < nodeIDs.length; j++) {
32229 var n = nodeIDs[j];
32230 if (nodes.from.indexOf(n) !== -1) { connectFrom = true; }
32231 if (nodes.via.indexOf(n) !== -1) { connectVia = true; }
32232 if (nodes.to.indexOf(n) !== -1) { connectTo = true; }
32233 if (nodes.keyfrom.indexOf(n) !== -1) { connectKeyFrom = true; }
32234 if (nodes.keyto.indexOf(n) !== -1) { connectKeyTo = true; }
32236 if (connectFrom && connectTo && !isUturn) { return 'restriction'; }
32237 if (connectFrom && connectVia) { return 'restriction'; }
32238 if (connectTo && connectVia) { return 'restriction'; }
32240 // connecting to a key node -
32241 // if both nodes are on a member way (i.e. part of the turn restriction),
32242 // the connecting node must be adjacent to the key node.
32243 if (connectKeyFrom || connectKeyTo) {
32244 if (nodeIDs.length !== 2) { return 'restriction'; }
32248 for (j = 0; j < memberWays.length; j++) {
32249 way = memberWays[j];
32250 if (way.contains(nodeIDs[0])) { n0 = nodeIDs[0]; }
32251 if (way.contains(nodeIDs[1])) { n1 = nodeIDs[1]; }
32254 if (n0 && n1) { // both nodes are part of the restriction
32256 for (j = 0; j < memberWays.length; j++) {
32257 way = memberWays[j];
32258 if (way.areAdjacent(n0, n1)) {
32264 return 'restriction';
32269 // 2b. disable if nodes being connected will destroy a member way in a restriction
32270 // (to test, make a copy and try actually connecting the nodes)
32271 for (j = 0; j < memberWays.length; j++) {
32272 way = memberWays[j].update({}); // make copy
32273 for (k = 0; k < nodeIDs.length; k++) {
32274 if (nodeIDs[k] === survivor.id) continue;
32276 if (way.areAdjacent(nodeIDs[k], survivor.id)) {
32277 way = way.removeNode(nodeIDs[k]);
32279 way = way.replaceNode(nodeIDs[k], survivor.id);
32282 if (way.isDegenerate()) {
32283 return 'restriction';
32291 // if a key node appears multiple times (indexOf !== lastIndexOf) it's a FROM-VIA or TO-VIA junction
32292 function hasDuplicates(n, i, arr) {
32293 return arr.indexOf(n) !== arr.lastIndexOf(n);
32296 function keyNodeFilter(froms, tos) {
32297 return function(n) {
32298 return froms.indexOf(n) === -1 && tos.indexOf(n) === -1;
32302 function collectNodes(member, collection) {
32303 var entity = graph.hasEntity(member.id);
32304 if (!entity) return;
32306 var role = member.role || '';
32307 if (!collection[role]) {
32308 collection[role] = [];
32311 if (member.type === 'node') {
32312 collection[role].push(member.id);
32313 if (role === 'via') {
32314 collection.keyfrom.push(member.id);
32315 collection.keyto.push(member.id);
32318 } else if (member.type === 'way') {
32319 collection[role].push.apply(collection[role], entity.nodes);
32320 if (role === 'from' || role === 'via') {
32321 collection.keyfrom.push(entity.first());
32322 collection.keyfrom.push(entity.last());
32324 if (role === 'to' || role === 'via') {
32325 collection.keyto.push(entity.first());
32326 collection.keyto.push(entity.last());
32336 function actionCopyEntities(ids, fromGraph) {
32340 var action = function(graph) {
32341 ids.forEach(function(id) {
32342 fromGraph.entity(id).copy(fromGraph, _copies);
32345 for (var id in _copies) {
32346 graph = graph.replace(_copies[id]);
32353 action.copies = function() {
32361 function actionDeleteMember(relationId, memberIndex) {
32362 return function(graph) {
32363 var relation = graph.entity(relationId)
32364 .removeMember(memberIndex);
32366 graph = graph.replace(relation);
32368 if (relation.isDegenerate())
32369 graph = actionDeleteRelation(relation.id)(graph);
32375 function actionDiscardTags(difference) {
32377 return function(graph) {
32378 function discardTags(entity) {
32380 var keys = Object.keys(entity.tags);
32381 var discarded = false;
32383 for (var i = 0; i < keys.length; i++) {
32385 if (dataDiscarded[k] || !entity.tags[k]) {
32388 tags[k] = entity.tags[k];
32393 graph = graph.replace(entity.update({ tags: tags }));
32397 difference.modified().forEach(discardTags);
32398 difference.created().forEach(discardTags);
32404 // Disconect the ways at the given node.
32406 // Optionally, disconnect only the given ways.
32408 // For testing convenience, accepts an ID to assign to the (first) new node.
32409 // Normally, this will be undefined and the way will automatically
32410 // be assigned a new ID.
32412 // This is the inverse of `iD.actionConnect`.
32415 // https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/UnjoinNodeAction.as
32416 // https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/actions/UnGlueAction.java
32418 function actionDisconnect(nodeId, newNodeId) {
32422 var action = function(graph) {
32423 var node = graph.entity(nodeId);
32424 var connections = action.connections(graph);
32426 connections.forEach(function(connection) {
32427 var way = graph.entity(connection.wayID);
32428 var newNode = osmNode({id: newNodeId, loc: node.loc, tags: node.tags});
32430 graph = graph.replace(newNode);
32431 if (connection.index === 0 && way.isArea()) {
32432 // replace shared node with shared node..
32433 graph = graph.replace(way.replaceNode(way.nodes[0], newNode.id));
32434 } else if (way.isClosed() && connection.index === way.nodes.length - 1) {
32435 // replace closing node with new new node..
32436 graph = graph.replace(way.unclose().addNode(newNode.id));
32438 // replace shared node with multiple new nodes..
32439 graph = graph.replace(way.updateNode(newNode.id, connection.index));
32447 action.connections = function(graph) {
32448 var candidates = [];
32449 var keeping = false;
32450 var parentWays = graph.parentWays(graph.entity(nodeId));
32452 parentWays.forEach(function(way) {
32453 if (wayIds && wayIds.indexOf(way.id) === -1) {
32457 if (way.isArea() && (way.nodes[0] === nodeId)) {
32458 candidates.push({ wayID: way.id, index: 0 });
32460 way.nodes.forEach(function(waynode, index) {
32461 if (waynode === nodeId) {
32462 if (way.isClosed() && parentWays.length > 1 && wayIds && wayIds.indexOf(way.id) !== -1 && index === way.nodes.length-1) {
32465 candidates.push({ wayID: way.id, index: index });
32471 return keeping ? candidates : candidates.slice(1);
32475 action.disabled = function(graph) {
32476 var connections = action.connections(graph);
32477 if (connections.length === 0)
32478 return 'not_connected';
32480 var parentWays = graph.parentWays(graph.entity(nodeId));
32481 var seenRelationIds = {};
32482 var sharedRelation;
32484 parentWays.forEach(function(way) {
32485 var relations = graph.parentRelations(way);
32486 relations.forEach(function(relation) {
32487 if (relation.id in seenRelationIds) {
32489 if (wayIds.indexOf(way.id) !== -1 ||
32490 wayIds.indexOf(seenRelationIds[relation.id]) !== -1) {
32491 sharedRelation = relation;
32494 sharedRelation = relation;
32497 seenRelationIds[relation.id] = way.id;
32502 if (sharedRelation)
32507 action.limitWays = function(val) {
32508 if (!arguments.length) return wayIds;
32517 function actionExtract(entityID, projection) {
32519 var extractedNodeID;
32521 var action = function(graph) {
32522 var entity = graph.entity(entityID);
32524 if (entity.type === 'node') {
32525 return extractFromNode(entity, graph);
32528 return extractFromArea(entity, graph);
32531 function extractFromNode(node, graph) {
32533 extractedNodeID = node.id;
32535 // Create a new node to replace the one we will detach
32536 var replacement = osmNode({ loc: node.loc });
32537 graph = graph.replace(replacement);
32539 // Process each way in turn, updating the graph as we go
32540 graph = graph.parentWays(node)
32541 .reduce(function(accGraph, parentWay) {
32542 return accGraph.replace(parentWay.replaceNode(entityID, replacement.id));
32545 // Process any relations too
32546 return graph.parentRelations(node)
32547 .reduce(function(accGraph, parentRel) {
32548 return accGraph.replace(parentRel.replaceMember(node, replacement));
32552 function extractFromArea(entity, graph) {
32554 var keysToCopyAndRetain = ['source', 'wheelchair'];
32555 var keysToRetain = ['type'];
32556 var buildingKeysToRetain = ['architect', 'building', 'height', 'layer'];
32558 var centroid = d3_geoPath(projection).centroid(entity.asGeoJSON(graph, true));
32560 var isBuilding = entity.tags.building;
32562 var areaTags = Object.assign({}, entity.tags); // shallow copy
32563 var pointTags = {};
32564 for (var key in areaTags) {
32566 if (keysToRetain.indexOf(key) !== -1) {
32571 // don't transfer building-related tags
32572 if (buildingKeysToRetain.indexOf(key) !== -1 ||
32573 key.match(/^building:.{1,}/) ||
32574 key.match(/^roof:.{1,}/)) continue;
32577 // copy the tag from the area to the point
32578 pointTags[key] = areaTags[key];
32580 // leave addresses and some other tags so they're on both features
32581 if (keysToCopyAndRetain.indexOf(key) !== -1 || key.match(/^addr:.{1,}/)) {
32585 // remove the tag from the area
32586 delete areaTags[key];
32590 // ensure that the area keeps the area geometry
32591 areaTags.area = 'yes';
32594 var replacement = osmNode({ loc: centroid, tags: pointTags });
32595 graph = graph.replace(replacement);
32597 extractedNodeID = replacement.id;
32599 return graph.replace(entity.update({tags: areaTags}));
32602 action.getExtractedNodeID = function() {
32603 return extractedNodeID;
32606 action.disabled = function(graph) {
32607 var entity = graph.entity(entityID);
32609 if (entity.type === 'node') {
32610 var parentRels = graph.parentRelations(entity);
32611 for (var i = 0; i < parentRels.length; i++) {
32612 var relation = parentRels[i];
32613 if (!relation.hasFromViaTo()) continue;
32615 for (var j = 0; j < relation.members.length; j++) {
32616 var m = relation.members[j];
32617 if (m.id === entityID && (m.role === 'via' || m.role === 'location_hint')) {
32618 return 'restriction';
32631 // Join ways at the end node they share.
32633 // This is the inverse of `iD.actionSplit`.
32636 // https://github.com/systemed/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/MergeWaysAction.as
32637 // https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/actions/CombineWayAction.java
32639 function actionJoin(ids) {
32641 function groupEntitiesByGeometry(graph) {
32642 var entities = ids.map(function(id) { return graph.entity(id); });
32643 return Object.assign(
32645 utilArrayGroupBy(entities, function(entity) { return entity.geometry(graph); })
32650 var action = function(graph) {
32651 var ways = ids.map(graph.entity, graph);
32652 var survivorID = ways[0].id;
32654 // if any of the ways are sided (e.g. coastline, cliff, kerb)
32655 // sort them first so they establish the overall order - #6033
32656 ways.sort(function(a, b) {
32657 var aSided = a.isSided();
32658 var bSided = b.isSided();
32659 return (aSided && !bSided) ? -1
32660 : (bSided && !aSided) ? 1
32664 // Prefer to keep an existing way.
32665 for (var i = 0; i < ways.length; i++) {
32666 if (!ways[i].isNew()) {
32667 survivorID = ways[i].id;
32672 var sequences = osmJoinWays(ways, graph);
32673 var joined = sequences[0];
32675 // We might need to reverse some of these ways before joining them. #4688
32676 // `joined.actions` property will contain any actions we need to apply.
32677 graph = sequences.actions.reduce(function(g, action) { return action(g); }, graph);
32679 var survivor = graph.entity(survivorID);
32680 survivor = survivor.update({ nodes: joined.nodes.map(function(n) { return n.id; }) });
32681 graph = graph.replace(survivor);
32683 joined.forEach(function(way) {
32684 if (way.id === survivorID) return;
32686 graph.parentRelations(way).forEach(function(parent) {
32687 graph = graph.replace(parent.replaceMember(way, survivor));
32690 survivor = survivor.mergeTags(way.tags);
32692 graph = graph.replace(survivor);
32693 graph = actionDeleteWay(way.id)(graph);
32700 action.disabled = function(graph) {
32701 var geometries = groupEntitiesByGeometry(graph);
32702 if (ids.length < 2 || ids.length !== geometries.line.length) {
32703 return 'not_eligible';
32706 var joined = osmJoinWays(ids.map(graph.entity, graph), graph);
32707 if (joined.length > 1) {
32708 return 'not_adjacent';
32711 // Loop through all combinations of path-pairs
32712 // to check potential intersections between all pairs
32713 for (var i = 0; i < ids.length - 1; i++) {
32714 for (var j = i + 1; j < ids.length; j++) {
32715 var path1 = graph.childNodes(graph.entity(ids[i]))
32716 .map(function(e) { return e.loc; });
32717 var path2 = graph.childNodes(graph.entity(ids[j]))
32718 .map(function(e) { return e.loc; });
32719 var intersections = geoPathIntersections(path1, path2);
32721 // Check if intersections are just nodes lying on top of
32722 // each other/the line, as opposed to crossing it
32723 var common = utilArrayIntersection(
32724 joined[0].nodes.map(function(n) { return n.loc.toString(); }),
32725 intersections.map(function(n) { return n.toString(); })
32727 if (common.length !== intersections.length) {
32728 return 'paths_intersect';
32733 var nodeIds = joined[0].nodes.map(function(n) { return n.id; }).slice(1, -1);
32736 var conflicting = false;
32738 joined[0].forEach(function(way) {
32739 var parents = graph.parentRelations(way);
32740 parents.forEach(function(parent) {
32741 if (parent.isRestriction() && parent.members.some(function(m) { return nodeIds.indexOf(m.id) >= 0; })) {
32746 for (var k in way.tags) {
32747 if (!(k in tags)) {
32748 tags[k] = way.tags[k];
32749 } else if (tags[k] && osmIsInterestingTag(k) && tags[k] !== way.tags[k]) {
32750 conflicting = true;
32756 return 'restriction';
32760 return 'conflicting_tags';
32768 function actionMerge(ids) {
32770 function groupEntitiesByGeometry(graph) {
32771 var entities = ids.map(function(id) { return graph.entity(id); });
32772 return Object.assign(
32773 { point: [], area: [], line: [], relation: [] },
32774 utilArrayGroupBy(entities, function(entity) { return entity.geometry(graph); })
32779 var action = function(graph) {
32780 var geometries = groupEntitiesByGeometry(graph);
32781 var target = geometries.area[0] || geometries.line[0];
32782 var points = geometries.point;
32784 points.forEach(function(point) {
32785 target = target.mergeTags(point.tags);
32786 graph = graph.replace(target);
32788 graph.parentRelations(point).forEach(function(parent) {
32789 graph = graph.replace(parent.replaceMember(point, target));
32792 var nodes = utilArrayUniq(graph.childNodes(target));
32793 var removeNode = point;
32795 for (var i = 0; i < nodes.length; i++) {
32796 var node = nodes[i];
32797 if (graph.parentWays(node).length > 1 ||
32798 graph.parentRelations(node).length ||
32799 node.hasInterestingTags()) {
32803 // Found an uninteresting child node on the target way.
32804 // Move orig point into its place to preserve point's history. #3683
32805 graph = graph.replace(point.update({ tags: {}, loc: node.loc }));
32806 target = target.replaceNode(node.id, point.id);
32807 graph = graph.replace(target);
32812 graph = graph.remove(removeNode);
32819 action.disabled = function(graph) {
32820 var geometries = groupEntitiesByGeometry(graph);
32821 if (geometries.point.length === 0 ||
32822 (geometries.area.length + geometries.line.length) !== 1 ||
32823 geometries.relation.length !== 0) {
32824 return 'not_eligible';
32832 // `actionMergeNodes` is just a combination of:
32834 // 1. move all the nodes to a common location
32835 // 2. `actionConnect` them
32837 function actionMergeNodes(nodeIDs, loc) {
32839 // If there is a single "interesting" node, use that as the location.
32840 // Otherwise return the average location of all the nodes.
32841 function chooseLoc(graph) {
32842 if (!nodeIDs.length) return null;
32844 var interestingCount = 0;
32845 var interestingLoc;
32847 for (var i = 0; i < nodeIDs.length; i++) {
32848 var node = graph.entity(nodeIDs[i]);
32849 if (node.hasInterestingTags()) {
32850 interestingLoc = (++interestingCount === 1) ? node.loc : null;
32852 sum = geoVecAdd(sum, node.loc);
32855 return interestingLoc || geoVecScale(sum, 1 / nodeIDs.length);
32859 var action = function(graph) {
32860 if (nodeIDs.length < 2) return graph;
32863 toLoc = chooseLoc(graph);
32866 for (var i = 0; i < nodeIDs.length; i++) {
32867 var node = graph.entity(nodeIDs[i]);
32868 if (node.loc !== toLoc) {
32869 graph = graph.replace(node.move(toLoc));
32873 return actionConnect(nodeIDs)(graph);
32877 action.disabled = function(graph) {
32878 if (nodeIDs.length < 2) return 'not_eligible';
32880 for (var i = 0; i < nodeIDs.length; i++) {
32881 var entity = graph.entity(nodeIDs[i]);
32882 if (entity.type !== 'node') return 'not_eligible';
32885 return actionConnect(nodeIDs).disabled(graph);
32891 function osmChangeset() {
32892 if (!(this instanceof osmChangeset)) {
32893 return (new osmChangeset()).initialize(arguments);
32894 } else if (arguments.length) {
32895 this.initialize(arguments);
32900 osmEntity.changeset = osmChangeset;
32902 osmChangeset.prototype = Object.create(osmEntity.prototype);
32904 Object.assign(osmChangeset.prototype, {
32909 extent: function() {
32910 return new geoExtent();
32914 geometry: function() {
32915 return 'changeset';
32919 asJXON: function() {
32923 tag: Object.keys(this.tags).map(function(k) {
32924 return { '@k': k, '@v': this.tags[k] };
32934 // Generate [osmChange](http://wiki.openstreetmap.org/wiki/OsmChange)
32935 // XML. Returns a string.
32936 osmChangeJXON: function(changes) {
32937 var changeset_id = this.id;
32939 function nest(x, order) {
32941 for (var i = 0; i < x.length; i++) {
32942 var tagName = Object.keys(x[i])[0];
32943 if (!groups[tagName]) groups[tagName] = [];
32944 groups[tagName].push(x[i][tagName]);
32947 order.forEach(function(o) {
32948 if (groups[o]) ordered[o] = groups[o];
32954 // sort relations in a changeset by dependencies
32955 function sort(changes) {
32957 // find a referenced relation in the current changeset
32958 function resolve(item) {
32959 return relations.find(function(relation) {
32960 return item.keyAttributes.type === 'relation'
32961 && item.keyAttributes.ref === relation['@id'];
32965 // a new item is an item that has not been already processed
32966 function isNew(item) {
32967 return !sorted[ item['@id'] ] && !processing.find(function(proc) {
32968 return proc['@id'] === item['@id'];
32972 var processing = [];
32974 var relations = changes.relation;
32976 if (!relations) return changes;
32978 for (var i = 0; i < relations.length; i++) {
32979 var relation = relations[i];
32981 // skip relation if already sorted
32982 if (!sorted[relation['@id']]) {
32983 processing.push(relation);
32986 while (processing.length > 0) {
32987 var next = processing[0],
32988 deps = next.member.map(resolve).filter(Boolean).filter(isNew);
32989 if (deps.length === 0) {
32990 sorted[next['@id']] = next;
32991 processing.shift();
32993 processing = deps.concat(processing);
32998 changes.relation = Object.values(sorted);
33002 function rep(entity) {
33003 return entity.asJXON(changeset_id);
33009 '@generator': 'iD',
33010 'create': sort(nest(changes.created.map(rep), ['node', 'way', 'relation'])),
33011 'modify': nest(changes.modified.map(rep), ['node', 'way', 'relation']),
33012 'delete': Object.assign(nest(changes.deleted.map(rep), ['relation', 'way', 'node']), { '@if-unused': true })
33018 asGeoJSON: function() {
33024 function osmNote() {
33025 if (!(this instanceof osmNote)) {
33026 return (new osmNote()).initialize(arguments);
33027 } else if (arguments.length) {
33028 this.initialize(arguments);
33033 osmNote.id = function() {
33034 return osmNote.id.next--;
33038 osmNote.id.next = -1;
33041 Object.assign(osmNote.prototype, {
33045 initialize: function(sources) {
33046 for (var i = 0; i < sources.length; ++i) {
33047 var source = sources[i];
33048 for (var prop in source) {
33049 if (Object.prototype.hasOwnProperty.call(source, prop)) {
33050 if (source[prop] === undefined) {
33053 this[prop] = source[prop];
33060 this.id = osmNote.id() + ''; // as string
33066 extent: function() {
33067 return new geoExtent(this.loc);
33070 update: function(attrs) {
33071 return osmNote(this, attrs); // {v: 1 + (this.v || 0)}
33074 isNew: function() {
33075 return this.id < 0;
33078 move: function(loc) {
33079 return this.update({ loc: loc });
33084 function osmRelation() {
33085 if (!(this instanceof osmRelation)) {
33086 return (new osmRelation()).initialize(arguments);
33087 } else if (arguments.length) {
33088 this.initialize(arguments);
33093 osmEntity.relation = osmRelation;
33095 osmRelation.prototype = Object.create(osmEntity.prototype);
33098 osmRelation.creationOrder = function(a, b) {
33099 var aId = parseInt(osmEntity.id.toOSM(a.id), 10);
33100 var bId = parseInt(osmEntity.id.toOSM(b.id), 10);
33102 if (aId < 0 || bId < 0) return aId - bId;
33107 Object.assign(osmRelation.prototype, {
33112 copy: function(resolver, copies) {
33113 if (copies[this.id]) return copies[this.id];
33115 var copy = osmEntity.prototype.copy.call(this, resolver, copies);
33117 var members = this.members.map(function(member) {
33118 return Object.assign({}, member, { id: resolver.entity(member.id).copy(resolver, copies).id });
33121 copy = copy.update({members: members});
33122 copies[this.id] = copy;
33128 extent: function(resolver, memo) {
33129 return resolver.transient(this, 'extent', function() {
33130 if (memo && memo[this.id]) return geoExtent();
33132 memo[this.id] = true;
33134 var extent = geoExtent();
33135 for (var i = 0; i < this.members.length; i++) {
33136 var member = resolver.hasEntity(this.members[i].id);
33138 extent._extend(member.extent(resolver, memo));
33146 geometry: function(graph) {
33147 return graph.transient(this, 'geometry', function() {
33148 return this.isMultipolygon() ? 'area' : 'relation';
33153 isDegenerate: function() {
33154 return this.members.length === 0;
33158 // Return an array of members, each extended with an 'index' property whose value
33159 // is the member index.
33160 indexedMembers: function() {
33161 var result = new Array(this.members.length);
33162 for (var i = 0; i < this.members.length; i++) {
33163 result[i] = Object.assign({}, this.members[i], {index: i});
33169 // Return the first member with the given role. A copy of the member object
33170 // is returned, extended with an 'index' property whose value is the member index.
33171 memberByRole: function(role) {
33172 for (var i = 0; i < this.members.length; i++) {
33173 if (this.members[i].role === role) {
33174 return Object.assign({}, this.members[i], {index: i});
33179 // Same as memberByRole, but returns all members with the given role
33180 membersByRole: function(role) {
33182 for (var i = 0; i < this.members.length; i++) {
33183 if (this.members[i].role === role) {
33184 result.push(Object.assign({}, this.members[i], {index: i}));
33190 // Return the first member with the given id. A copy of the member object
33191 // is returned, extended with an 'index' property whose value is the member index.
33192 memberById: function(id) {
33193 for (var i = 0; i < this.members.length; i++) {
33194 if (this.members[i].id === id) {
33195 return Object.assign({}, this.members[i], {index: i});
33201 // Return the first member with the given id and role. A copy of the member object
33202 // is returned, extended with an 'index' property whose value is the member index.
33203 memberByIdAndRole: function(id, role) {
33204 for (var i = 0; i < this.members.length; i++) {
33205 if (this.members[i].id === id && this.members[i].role === role) {
33206 return Object.assign({}, this.members[i], {index: i});
33212 addMember: function(member, index) {
33213 var members = this.members.slice();
33214 members.splice(index === undefined ? members.length : index, 0, member);
33215 return this.update({members: members});
33219 updateMember: function(member, index) {
33220 var members = this.members.slice();
33221 members.splice(index, 1, Object.assign({}, members[index], member));
33222 return this.update({members: members});
33226 removeMember: function(index) {
33227 var members = this.members.slice();
33228 members.splice(index, 1);
33229 return this.update({members: members});
33233 removeMembersWithID: function(id) {
33234 var members = this.members.filter(function(m) { return m.id !== id; });
33235 return this.update({members: members});
33238 moveMember: function(fromIndex, toIndex) {
33239 var members = this.members.slice();
33240 members.splice(toIndex, 0, members.splice(fromIndex, 1)[0]);
33241 return this.update({members: members});
33245 // Wherever a member appears with id `needle.id`, replace it with a member
33246 // with id `replacement.id`, type `replacement.type`, and the original role,
33247 // By default, adding a duplicate member (by id and role) is prevented.
33248 // Return an updated relation.
33249 replaceMember: function(needle, replacement, keepDuplicates) {
33250 if (!this.memberById(needle.id)) return this;
33254 for (var i = 0; i < this.members.length; i++) {
33255 var member = this.members[i];
33256 if (member.id !== needle.id) {
33257 members.push(member);
33258 } else if (keepDuplicates || !this.memberByIdAndRole(replacement.id, member.role)) {
33259 members.push({ id: replacement.id, type: replacement.type, role: member.role });
33263 return this.update({ members: members });
33267 asJXON: function(changeset_id) {
33270 '@id': this.osmId(),
33271 '@version': this.version || 0,
33272 member: this.members.map(function(member) {
33277 ref: osmEntity.id.toOSM(member.id)
33281 tag: Object.keys(this.tags).map(function(k) {
33282 return { keyAttributes: { k: k, v: this.tags[k] } };
33286 if (changeset_id) {
33287 r.relation['@changeset'] = changeset_id;
33293 asGeoJSON: function(resolver) {
33294 return resolver.transient(this, 'GeoJSON', function () {
33295 if (this.isMultipolygon()) {
33297 type: 'MultiPolygon',
33298 coordinates: this.multipolygon(resolver)
33302 type: 'FeatureCollection',
33303 properties: this.tags,
33304 features: this.members.map(function (member) {
33305 return Object.assign({role: member.role}, resolver.entity(member.id).asGeoJSON(resolver));
33313 area: function(resolver) {
33314 return resolver.transient(this, 'area', function() {
33315 return d3_geoArea(this.asGeoJSON(resolver));
33320 isMultipolygon: function() {
33321 return this.tags.type === 'multipolygon';
33325 isComplete: function(resolver) {
33326 for (var i = 0; i < this.members.length; i++) {
33327 if (!resolver.hasEntity(this.members[i].id)) {
33335 hasFromViaTo: function() {
33337 this.members.some(function(m) { return m.role === 'from'; }) &&
33338 this.members.some(function(m) { return m.role === 'via'; }) &&
33339 this.members.some(function(m) { return m.role === 'to'; })
33344 isRestriction: function() {
33345 return !!(this.tags.type && this.tags.type.match(/^restriction:?/));
33349 isValidRestriction: function() {
33350 if (!this.isRestriction()) return false;
33352 var froms = this.members.filter(function(m) { return m.role === 'from'; });
33353 var vias = this.members.filter(function(m) { return m.role === 'via'; });
33354 var tos = this.members.filter(function(m) { return m.role === 'to'; });
33356 if (froms.length !== 1 && this.tags.restriction !== 'no_entry') return false;
33357 if (froms.some(function(m) { return m.type !== 'way'; })) return false;
33359 if (tos.length !== 1 && this.tags.restriction !== 'no_exit') return false;
33360 if (tos.some(function(m) { return m.type !== 'way'; })) return false;
33362 if (vias.length === 0) return false;
33363 if (vias.length > 1 && vias.some(function(m) { return m.type !== 'way'; })) return false;
33369 // Returns an array [A0, ... An], each Ai being an array of node arrays [Nds0, ... Ndsm],
33370 // where Nds0 is an outer ring and subsequent Ndsi's (if any i > 0) being inner rings.
33372 // This corresponds to the structure needed for rendering a multipolygon path using a
33373 // `evenodd` fill rule, as well as the structure of a GeoJSON MultiPolygon geometry.
33375 // In the case of invalid geometries, this function will still return a result which
33376 // includes the nodes of all way members, but some Nds may be unclosed and some inner
33377 // rings not matched with the intended outer ring.
33379 multipolygon: function(resolver) {
33380 var outers = this.members.filter(function(m) { return 'outer' === (m.role || 'outer'); });
33381 var inners = this.members.filter(function(m) { return 'inner' === m.role; });
33383 outers = osmJoinWays(outers, resolver);
33384 inners = osmJoinWays(inners, resolver);
33386 outers = outers.map(function(outer) {
33387 return outer.nodes.map(function(node) { return node.loc; });
33389 inners = inners.map(function(inner) {
33390 return inner.nodes.map(function(node) { return node.loc; });
33393 var result = outers.map(function(o) {
33394 // Heuristic for detecting counterclockwise winding order. Assumes
33395 // that OpenStreetMap polygons are not hemisphere-spanning.
33396 return [d3_geoArea({ type: 'Polygon', coordinates: [o] }) > 2 * Math.PI ? o.reverse() : o];
33399 function findOuter(inner) {
33402 for (o = 0; o < outers.length; o++) {
33404 if (geoPolygonContainsPolygon(outer, inner))
33408 for (o = 0; o < outers.length; o++) {
33410 if (geoPolygonIntersectsPolygon(outer, inner, false))
33415 for (var i = 0; i < inners.length; i++) {
33416 var inner = inners[i];
33418 if (d3_geoArea({ type: 'Polygon', coordinates: [inner] }) < 2 * Math.PI) {
33419 inner = inner.reverse();
33422 var o = findOuter(inners[i]);
33423 if (o !== undefined) {
33424 result[o].push(inners[i]);
33426 result.push([inners[i]]); // Invalid geometry
33434 var services = {improveOSM:{errorTypes:{ow:{icon:"fas-long-arrow-alt-right",category:"routing"},"mr-both":{icon:"maki-car",category:"geometry"},"mr-parking":{icon:"maki-parking",category:"geometry"},"mr-path":{icon:"maki-shoe",category:"geometry"},"mr-road":{icon:"maki-car",category:"geometry"},tr:{icon:"temaki-junction",category:"routing"}}},keepRight:{errorTypes:{}}};
33436 function qaError() {
33437 if (!(this instanceof qaError)) {
33438 return (new qaError()).initialize(arguments);
33439 } else if (arguments.length) {
33440 this.initialize(arguments);
33444 // Generic handling for services without nice IDs
33445 qaError.id = function() {
33446 return qaError.id.next--;
33449 qaError.id.next = -1;
33451 Object.assign(qaError.prototype, {
33454 // All errors need a position
33457 // These should be passed in, used to retrieve from qa_errors.json
33461 initialize: function(sources) {
33462 for (var i = 0; i < sources.length; ++i) {
33463 var source = sources[i];
33464 for (var prop in source) {
33465 if (Object.prototype.hasOwnProperty.call(source, prop)) {
33466 if (source[prop] === undefined) {
33469 this[prop] = source[prop];
33475 // Extract common error information from data
33476 if (this.service && this.error_type) {
33477 var serviceInfo = services[this.service];
33480 var errInfo = serviceInfo.errorTypes[this.error_type];
33483 this.icon = errInfo.icon;
33484 this.category = errInfo.category;
33489 // All errors must have an ID for selection
33491 this.id = qaError.id() + ''; // as string
33497 update: function(attrs) {
33498 return qaError(this, attrs); // {v: 1 + (this.v || 0)}
33502 // Split a way at the given node.
33504 // Optionally, split only the given ways, if multiple ways share
33507 // This is the inverse of `iD.actionJoin`.
33509 // For testing convenience, accepts an ID to assign to the new way.
33510 // Normally, this will be undefined and the way will automatically
33511 // be assigned a new ID.
33514 // https://github.com/systemed/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/SplitWayAction.as
33516 function actionSplit(nodeId, newWayIds) {
33519 // If the way is closed, we need to search for a partner node
33520 // to split the way at.
33522 // The following looks for a node that is both far away from
33523 // the initial node in terms of way segment length and nearby
33524 // in terms of beeline-distance. This assures that areas get
33525 // split on the most "natural" points (independent of the number
33527 // For example: bone-shaped areas get split across their waist
33528 // line, circles across the diameter.
33529 function splitArea(nodes, idxA, graph) {
33530 var lengths = new Array(nodes.length);
33536 function wrap(index) {
33537 return utilWrap(index, nodes.length);
33540 function dist(nA, nB) {
33541 var locA = graph.entity(nA).loc;
33542 var locB = graph.entity(nB).loc;
33543 var epsilon = 1e-6;
33544 return (locA && locB) ? geoSphericalDistance(locA, locB) : epsilon;
33547 // calculate lengths
33549 for (i = wrap(idxA + 1); i !== idxA; i = wrap(i + 1)) {
33550 length += dist(nodes[i], nodes[wrap(i - 1)]);
33551 lengths[i] = length;
33555 for (i = wrap(idxA - 1); i !== idxA; i = wrap(i - 1)) {
33556 length += dist(nodes[i], nodes[wrap(i + 1)]);
33557 if (length < lengths[i]) {
33558 lengths[i] = length;
33562 // determine best opposite node to split
33563 for (i = 0; i < nodes.length; i++) {
33564 var cost = lengths[i] / dist(nodes[idxA], nodes[i]);
33575 function split(graph, wayA, newWayId) {
33576 var wayB = osmWay({ id: newWayId, tags: wayA.tags }); // `wayB` is the NEW way
33577 var origNodes = wayA.nodes.slice();
33580 var isArea = wayA.isArea();
33581 var isOuter = osmIsOldMultipolygonOuterMember(wayA, graph);
33583 if (wayA.isClosed()) {
33584 var nodes = wayA.nodes.slice(0, -1);
33585 var idxA = nodes.indexOf(nodeId);
33586 var idxB = splitArea(nodes, idxA, graph);
33589 nodesA = nodes.slice(idxA).concat(nodes.slice(0, idxB + 1));
33590 nodesB = nodes.slice(idxB, idxA + 1);
33592 nodesA = nodes.slice(idxA, idxB + 1);
33593 nodesB = nodes.slice(idxB).concat(nodes.slice(0, idxA + 1));
33596 var idx = wayA.nodes.indexOf(nodeId, 1);
33597 nodesA = wayA.nodes.slice(0, idx + 1);
33598 nodesB = wayA.nodes.slice(idx);
33601 wayA = wayA.update({ nodes: nodesA });
33602 wayB = wayB.update({ nodes: nodesB });
33604 graph = graph.replace(wayA);
33605 graph = graph.replace(wayB);
33607 graph.parentRelations(wayA).forEach(function(relation) {
33610 // Turn restrictions - make sure:
33611 // 1. Splitting a FROM/TO way - only `wayA` OR `wayB` remains in relation
33612 // (whichever one is connected to the VIA node/ways)
33613 // 2. Splitting a VIA way - `wayB` remains in relation as a VIA way
33614 if (relation.hasFromViaTo()) {
33615 var f = relation.memberByRole('from');
33616 var v = relation.membersByRole('via');
33617 var t = relation.memberByRole('to');
33620 // 1. split a FROM/TO
33621 if (f.id === wayA.id || t.id === wayA.id) {
33623 if (v.length === 1 && v[0].type === 'node') { // check via node
33624 keepB = wayB.contains(v[0].id);
33625 } else { // check via way(s)
33626 for (i = 0; i < v.length; i++) {
33627 if (v[i].type === 'way') {
33628 var wayVia = graph.hasEntity(v[i].id);
33629 if (wayVia && utilArrayIntersection(wayB.nodes, wayVia.nodes).length) {
33638 relation = relation.replaceMember(wayA, wayB);
33639 graph = graph.replace(relation);
33644 for (i = 0; i < v.length; i++) {
33645 if (v[i].type === 'way' && v[i].id === wayA.id) {
33651 graph = actionAddMember(relation.id, member, v[i].index + 1)(graph);
33657 // All other relations (Routes, Multipolygons, etc):
33658 // 1. Both `wayA` and `wayB` remain in the relation
33659 // 2. But must be inserted as a pair (see `actionAddMember` for details)
33661 if (relation === isOuter) {
33662 graph = graph.replace(relation.mergeTags(wayA.tags));
33663 graph = graph.replace(wayA.update({ tags: {} }));
33664 graph = graph.replace(wayB.update({ tags: {} }));
33670 role: relation.memberById(wayA.id).role
33674 originalID: wayA.id,
33675 insertedID: wayB.id,
33679 graph = actionAddMember(relation.id, member, undefined, insertPair)(graph);
33683 if (!isOuter && isArea) {
33684 var multipolygon = osmRelation({
33685 tags: Object.assign({}, wayA.tags, { type: 'multipolygon' }),
33687 { id: wayA.id, role: 'outer', type: 'way' },
33688 { id: wayB.id, role: 'outer', type: 'way' }
33692 graph = graph.replace(multipolygon);
33693 graph = graph.replace(wayA.update({ tags: {} }));
33694 graph = graph.replace(wayB.update({ tags: {} }));
33701 var action = function(graph) {
33702 var candidates = action.ways(graph);
33703 for (var i = 0; i < candidates.length; i++) {
33704 graph = split(graph, candidates[i], newWayIds && newWayIds[i]);
33710 action.ways = function(graph) {
33711 var node = graph.entity(nodeId);
33712 var parents = graph.parentWays(node);
33713 var hasLines = parents.some(function(parent) {
33714 return parent.geometry(graph) === 'line';
33717 return parents.filter(function(parent) {
33718 if (_wayIDs && _wayIDs.indexOf(parent.id) === -1)
33721 if (!_wayIDs && hasLines && parent.geometry(graph) !== 'line')
33724 if (parent.isClosed()) {
33728 for (var i = 1; i < parent.nodes.length - 1; i++) {
33729 if (parent.nodes[i] === nodeId) {
33739 action.disabled = function(graph) {
33740 var candidates = action.ways(graph);
33741 if (candidates.length === 0 || (_wayIDs && _wayIDs.length !== candidates.length)) {
33742 return 'not_eligible';
33747 action.limitWays = function(val) {
33748 if (!arguments.length) return _wayIDs;
33757 function coreGraph(other, mutable) {
33758 if (!(this instanceof coreGraph)) return new coreGraph(other, mutable);
33760 if (other instanceof coreGraph) {
33761 var base = other.base();
33762 this.entities = Object.assign(Object.create(base.entities), other.entities);
33763 this._parentWays = Object.assign(Object.create(base.parentWays), other._parentWays);
33764 this._parentRels = Object.assign(Object.create(base.parentRels), other._parentRels);
33767 this.entities = Object.create({});
33768 this._parentWays = Object.create({});
33769 this._parentRels = Object.create({});
33770 this.rebase(other || [], [this]);
33773 this.transients = {};
33774 this._childNodes = {};
33775 this.frozen = !mutable;
33779 coreGraph.prototype = {
33781 hasEntity: function(id) {
33782 return this.entities[id];
33786 entity: function(id) {
33787 var entity = this.entities[id];
33789 //https://github.com/openstreetmap/iD/issues/3973#issuecomment-307052376
33791 entity = this.entities.__proto__[id]; // eslint-disable-line no-proto
33795 throw new Error('entity ' + id + ' not found');
33801 transient: function(entity, key, fn) {
33802 var id = entity.id;
33803 var transients = this.transients[id] || (this.transients[id] = {});
33805 if (transients[key] !== undefined) {
33806 return transients[key];
33809 transients[key] = fn.call(entity);
33811 return transients[key];
33815 parentWays: function(entity) {
33816 var parents = this._parentWays[entity.id];
33819 parents.forEach(function(id) {
33820 result.push(this.entity(id));
33827 isPoi: function(entity) {
33828 var parents = this._parentWays[entity.id];
33829 return !parents || parents.size === 0;
33833 isShared: function(entity) {
33834 var parents = this._parentWays[entity.id];
33835 return parents && parents.size > 1;
33839 parentRelations: function(entity) {
33840 var parents = this._parentRels[entity.id];
33843 parents.forEach(function(id) {
33844 result.push(this.entity(id));
33850 parentMultipolygons: function(entity) {
33851 return this.parentRelations(entity).filter(function(relation) {
33852 return relation.isMultipolygon();
33857 childNodes: function(entity) {
33858 if (this._childNodes[entity.id]) return this._childNodes[entity.id];
33859 if (!entity.nodes) return [];
33862 for (var i = 0; i < entity.nodes.length; i++) {
33863 nodes[i] = this.entity(entity.nodes[i]);
33866 this._childNodes[entity.id] = nodes;
33867 return this._childNodes[entity.id];
33873 'entities': Object.getPrototypeOf(this.entities),
33874 'parentWays': Object.getPrototypeOf(this._parentWays),
33875 'parentRels': Object.getPrototypeOf(this._parentRels)
33880 // Unlike other graph methods, rebase mutates in place. This is because it
33881 // is used only during the history operation that merges newly downloaded
33882 // data into each state. To external consumers, it should appear as if the
33883 // graph always contained the newly downloaded data.
33884 rebase: function(entities, stack, force) {
33885 var base = this.base();
33888 for (i = 0; i < entities.length; i++) {
33889 var entity = entities[i];
33891 if (!entity.visible || (!force && base.entities[entity.id]))
33894 // Merging data into the base graph
33895 base.entities[entity.id] = entity;
33896 this._updateCalculated(undefined, entity, base.parentWays, base.parentRels);
33898 // Restore provisionally-deleted nodes that are discovered to have an extant parent
33899 if (entity.type === 'way') {
33900 for (j = 0; j < entity.nodes.length; j++) {
33901 id = entity.nodes[j];
33902 for (k = 1; k < stack.length; k++) {
33903 var ents = stack[k].entities;
33904 if (ents.hasOwnProperty(id) && ents[id] === undefined) {
33912 for (i = 0; i < stack.length; i++) {
33913 stack[i]._updateRebased();
33918 _updateRebased: function() {
33919 var base = this.base();
33921 Object.keys(this._parentWays).forEach(function(child) {
33922 if (base.parentWays[child]) {
33923 base.parentWays[child].forEach(function(id) {
33924 if (!this.entities.hasOwnProperty(id)) {
33925 this._parentWays[child].add(id);
33931 Object.keys(this._parentRels).forEach(function(child) {
33932 if (base.parentRels[child]) {
33933 base.parentRels[child].forEach(function(id) {
33934 if (!this.entities.hasOwnProperty(id)) {
33935 this._parentRels[child].add(id);
33941 this.transients = {};
33943 // this._childNodes is not updated, under the assumption that
33944 // ways are always downloaded with their child nodes.
33948 // Updates calculated properties (parentWays, parentRels) for the specified change
33949 _updateCalculated: function(oldentity, entity, parentWays, parentRels) {
33950 parentWays = parentWays || this._parentWays;
33951 parentRels = parentRels || this._parentRels;
33953 var type = entity && entity.type || oldentity && oldentity.type;
33954 var removed, added, i;
33956 if (type === 'way') { // Update parentWays
33957 if (oldentity && entity) {
33958 removed = utilArrayDifference(oldentity.nodes, entity.nodes);
33959 added = utilArrayDifference(entity.nodes, oldentity.nodes);
33960 } else if (oldentity) {
33961 removed = oldentity.nodes;
33963 } else if (entity) {
33965 added = entity.nodes;
33967 for (i = 0; i < removed.length; i++) {
33968 // make a copy of prototype property, store as own property, and update..
33969 parentWays[removed[i]] = new Set(parentWays[removed[i]]);
33970 parentWays[removed[i]].delete(oldentity.id);
33972 for (i = 0; i < added.length; i++) {
33973 // make a copy of prototype property, store as own property, and update..
33974 parentWays[added[i]] = new Set(parentWays[added[i]]);
33975 parentWays[added[i]].add(entity.id);
33978 } else if (type === 'relation') { // Update parentRels
33979 if (oldentity && entity) {
33980 removed = utilArrayDifference(oldentity.members, entity.members);
33981 added = utilArrayDifference(entity.members, oldentity.members);
33982 } else if (oldentity) {
33983 removed = oldentity.members;
33985 } else if (entity) {
33987 added = entity.members;
33989 for (i = 0; i < removed.length; i++) {
33990 // make a copy of prototype property, store as own property, and update..
33991 parentRels[removed[i].id] = new Set(parentRels[removed[i].id]);
33992 parentRels[removed[i].id].delete(oldentity.id);
33994 for (i = 0; i < added.length; i++) {
33995 // make a copy of prototype property, store as own property, and update..
33996 parentRels[added[i].id] = new Set(parentRels[added[i].id]);
33997 parentRels[added[i].id].add(entity.id);
34003 replace: function(entity) {
34004 if (this.entities[entity.id] === entity) return this;
34006 return this.update(function() {
34007 this._updateCalculated(this.entities[entity.id], entity);
34008 this.entities[entity.id] = entity;
34013 remove: function(entity) {
34014 return this.update(function() {
34015 this._updateCalculated(entity, undefined);
34016 this.entities[entity.id] = undefined;
34021 revert: function(id) {
34022 var baseEntity = this.base().entities[id];
34023 var headEntity = this.entities[id];
34024 if (headEntity === baseEntity) return this;
34026 return this.update(function() {
34027 this._updateCalculated(headEntity, baseEntity);
34028 delete this.entities[id];
34033 update: function() {
34034 var graph = this.frozen ? coreGraph(this, true) : this;
34035 for (var i = 0; i < arguments.length; i++) {
34036 arguments[i].call(graph, graph);
34039 if (this.frozen) graph.frozen = true;
34045 // Obliterates any existing entities
34046 load: function(entities) {
34047 var base = this.base();
34048 this.entities = Object.create(base.entities);
34050 for (var i in entities) {
34051 this.entities[i] = entities[i];
34052 this._updateCalculated(base.entities[i], this.entities[i]);
34059 function osmTurn(turn) {
34060 if (!(this instanceof osmTurn)) {
34061 return new osmTurn(turn);
34063 Object.assign(this, turn);
34067 function osmIntersection(graph, startVertexId, maxDistance) {
34068 maxDistance = maxDistance || 30; // in meters
34069 var vgraph = coreGraph(); // virtual graph
34073 function memberOfRestriction(entity) {
34074 return graph.parentRelations(entity)
34075 .some(function(r) { return r.isRestriction(); });
34078 function isRoad(way) {
34079 if (way.isArea() || way.isDegenerate()) return false;
34082 'motorway_link': true,
34084 'trunk_link': true,
34086 'primary_link': true,
34088 'secondary_link': true,
34090 'tertiary_link': true,
34091 'residential': true,
34092 'unclassified': true,
34093 'living_street': true,
34098 return roads[way.tags.highway];
34102 var startNode = graph.entity(startVertexId);
34103 var checkVertices = [startNode];
34106 var vertexIds = [];
34116 // `actions` will store whatever actions must be performed to satisfy
34117 // preconditions for adding a turn restriction to this intersection.
34118 // - Remove any existing degenerate turn restrictions (missing from/to, etc)
34119 // - Reverse oneways so that they are drawn in the forward direction
34120 // - Split ways on key vertices
34124 // STEP 1: walk the graph outwards from starting vertex to search
34125 // for more key vertices and ways to include in the intersection..
34127 while (checkVertices.length) {
34128 vertex = checkVertices.pop();
34130 // check this vertex for parent ways that are roads
34131 checkWays = graph.parentWays(vertex);
34132 var hasWays = false;
34133 for (i = 0; i < checkWays.length; i++) {
34134 way = checkWays[i];
34135 if (!isRoad(way) && !memberOfRestriction(way)) continue;
34137 ways.push(way); // it's a road, or it's already in a turn restriction
34140 // check the way's children for more key vertices
34141 nodes = utilArrayUniq(graph.childNodes(way));
34142 for (j = 0; j < nodes.length; j++) {
34144 if (node === vertex) continue; // same thing
34145 if (vertices.indexOf(node) !== -1) continue; // seen it already
34146 if (geoSphericalDistance(node.loc, startNode.loc) > maxDistance) continue; // too far from start
34148 // a key vertex will have parents that are also roads
34149 var hasParents = false;
34150 parents = graph.parentWays(node);
34151 for (k = 0; k < parents.length; k++) {
34152 parent = parents[k];
34153 if (parent === way) continue; // same thing
34154 if (ways.indexOf(parent) !== -1) continue; // seen it already
34155 if (!isRoad(parent)) continue; // not a road
34161 checkVertices.push(node);
34167 vertices.push(vertex);
34171 vertices = utilArrayUniq(vertices);
34172 ways = utilArrayUniq(ways);
34175 // STEP 2: Build a virtual graph containing only the entities in the intersection..
34176 // Everything done after this step should act on the virtual graph
34177 // Any actions that must be performed later to the main graph go in `actions` array
34178 ways.forEach(function(way) {
34179 graph.childNodes(way).forEach(function(node) {
34180 vgraph = vgraph.replace(node);
34183 vgraph = vgraph.replace(way);
34185 graph.parentRelations(way).forEach(function(relation) {
34186 if (relation.isRestriction()) {
34187 if (relation.isValidRestriction(graph)) {
34188 vgraph = vgraph.replace(relation);
34189 } else if (relation.isComplete(graph)) {
34190 actions.push(actionDeleteRelation(relation.id));
34197 // STEP 3: Force all oneways to be drawn in the forward direction
34198 ways.forEach(function(w) {
34199 var way = vgraph.entity(w.id);
34200 if (way.tags.oneway === '-1') {
34201 var action = actionReverse(way.id, { reverseOneway: true });
34202 actions.push(action);
34203 vgraph = action(vgraph);
34208 // STEP 4: Split ways on key vertices
34209 var origCount = osmEntity.id.next.way;
34210 vertices.forEach(function(v) {
34211 // This is an odd way to do it, but we need to find all the ways that
34212 // will be split here, then split them one at a time to ensure that these
34213 // actions can be replayed on the main graph exactly in the same order.
34214 // (It is unintuitive, but the order of ways returned from graph.parentWays()
34215 // is arbitrary, depending on how the main graph and vgraph were built)
34216 var splitAll = actionSplit(v.id);
34217 if (!splitAll.disabled(vgraph)) {
34218 splitAll.ways(vgraph).forEach(function(way) {
34219 var splitOne = actionSplit(v.id).limitWays([way.id]);
34220 actions.push(splitOne);
34221 vgraph = splitOne(vgraph);
34226 // In here is where we should also split the intersection at nearby junction.
34227 // for https://github.com/mapbox/iD-internal/issues/31
34228 // nearbyVertices.forEach(function(v) {
34231 // Reasons why we reset the way id count here:
34232 // 1. Continuity with way ids created by the splits so that we can replay
34233 // these actions later if the user decides to create a turn restriction
34234 // 2. Avoids churning way ids just by hovering over a vertex
34235 // and displaying the turn restriction editor
34236 osmEntity.id.next.way = origCount;
34239 // STEP 5: Update arrays to point to vgraph entities
34240 vertexIds = vertices.map(function(v) { return v.id; });
34244 vertexIds.forEach(function(id) {
34245 var vertex = vgraph.entity(id);
34246 var parents = vgraph.parentWays(vertex);
34247 vertices.push(vertex);
34248 ways = ways.concat(parents);
34251 vertices = utilArrayUniq(vertices);
34252 ways = utilArrayUniq(ways);
34254 vertexIds = vertices.map(function(v) { return v.id; });
34255 wayIds = ways.map(function(w) { return w.id; });
34258 // STEP 6: Update the ways with some metadata that will be useful for
34259 // walking the intersection graph later and rendering turn arrows.
34261 function withMetadata(way, vertexIds) {
34262 var __oneWay = way.isOneWay();
34264 // which affixes are key vertices?
34265 var __first = (vertexIds.indexOf(way.first()) !== -1);
34266 var __last = (vertexIds.indexOf(way.last()) !== -1);
34268 // what roles is this way eligible for?
34269 var __via = (__first && __last);
34270 var __from = ((__first && !__oneWay) || __last);
34271 var __to = (__first || (__last && !__oneWay));
34273 return way.update({
34284 wayIds.forEach(function(id) {
34285 var way = withMetadata(vgraph.entity(id), vertexIds);
34286 vgraph = vgraph.replace(way);
34291 // STEP 7: Simplify - This is an iterative process where we:
34292 // 1. Find trivial vertices with only 2 parents
34293 // 2. trim off the leaf way from those vertices and remove from vgraph
34296 var removeWayIds = [];
34297 var removeVertexIds = [];
34301 checkVertices = vertexIds.slice();
34303 for (i = 0; i < checkVertices.length; i++) {
34304 var vertexId = checkVertices[i];
34305 vertex = vgraph.hasEntity(vertexId);
34308 if (vertexIds.indexOf(vertexId) !== -1) {
34309 vertexIds.splice(vertexIds.indexOf(vertexId), 1); // stop checking this one
34311 removeVertexIds.push(vertexId);
34315 parents = vgraph.parentWays(vertex);
34316 if (parents.length < 3) {
34317 if (vertexIds.indexOf(vertexId) !== -1) {
34318 vertexIds.splice(vertexIds.indexOf(vertexId), 1); // stop checking this one
34322 if (parents.length === 2) { // vertex with 2 parents is trivial
34323 var a = parents[0];
34324 var b = parents[1];
34325 var aIsLeaf = a && !a.__via;
34326 var bIsLeaf = b && !b.__via;
34327 var leaf, survivor;
34329 if (aIsLeaf && !bIsLeaf) {
34332 } else if (!aIsLeaf && bIsLeaf) {
34337 if (leaf && survivor) {
34338 survivor = withMetadata(survivor, vertexIds); // update survivor way
34339 vgraph = vgraph.replace(survivor).remove(leaf); // update graph
34340 removeWayIds.push(leaf.id);
34345 parents = vgraph.parentWays(vertex);
34347 if (parents.length < 2) { // vertex is no longer a key vertex
34348 if (vertexIds.indexOf(vertexId) !== -1) {
34349 vertexIds.splice(vertexIds.indexOf(vertexId), 1); // stop checking this one
34351 removeVertexIds.push(vertexId);
34355 if (parents.length < 1) { // vertex is no longer attached to anything
34356 vgraph = vgraph.remove(vertex);
34360 } while (keepGoing);
34363 vertices = vertices
34364 .filter(function(vertex) { return removeVertexIds.indexOf(vertex.id) === -1; })
34365 .map(function(vertex) { return vgraph.entity(vertex.id); });
34367 .filter(function(way) { return removeWayIds.indexOf(way.id) === -1; })
34368 .map(function(way) { return vgraph.entity(way.id); });
34371 // OK! Here is our intersection..
34372 var intersection = {
34375 vertices: vertices,
34381 // Get all the valid turns through this intersection given a starting way id.
34382 // This operates on the virtual graph for everything.
34384 // Basically, walk through all possible paths from starting way,
34385 // honoring the existing turn restrictions as we go (watch out for loops!)
34387 // For each path found, generate and return a `osmTurn` datastructure.
34389 intersection.turns = function(fromWayId, maxViaWay) {
34390 if (!fromWayId) return [];
34391 if (!maxViaWay) maxViaWay = 0;
34393 var vgraph = intersection.graph;
34394 var keyVertexIds = intersection.vertices.map(function(v) { return v.id; });
34396 var start = vgraph.entity(fromWayId);
34397 if (!start || !(start.__from || start.__via)) return [];
34399 // maxViaWay=0 from-*-to (0 vias)
34400 // maxViaWay=1 from-*-via-*-to (1 via max)
34401 // maxViaWay=2 from-*-via-*-via-*-to (2 vias max)
34402 var maxPathLength = (maxViaWay * 2) + 3;
34409 // traverse the intersection graph and find all the valid paths
34410 function step(entity, currPath, currRestrictions, matchedRestriction) {
34411 currPath = (currPath || []).slice(); // shallow copy
34412 if (currPath.length >= maxPathLength) return;
34413 currPath.push(entity.id);
34414 currRestrictions = (currRestrictions || []).slice(); // shallow copy
34417 if (entity.type === 'node') {
34418 var parents = vgraph.parentWays(entity);
34421 // which ways can we step into?
34422 for (i = 0; i < parents.length; i++) {
34423 var way = parents[i];
34425 // if next way is a oneway incoming to this vertex, skip
34426 if (way.__oneWay && way.nodes[0] !== entity.id) continue;
34428 // if we have seen it before (allowing for an initial u-turn), skip
34429 if (currPath.indexOf(way.id) !== -1 && currPath.length >= 3) continue;
34431 // Check all "current" restrictions (where we've already walked the `FROM`)
34432 var restrict = undefined;
34433 for (j = 0; j < currRestrictions.length; j++) {
34434 var restriction = currRestrictions[j];
34435 var f = restriction.memberByRole('from');
34436 var v = restriction.membersByRole('via');
34437 var t = restriction.memberByRole('to');
34438 var isOnly = /^only_/.test(restriction.tags.restriction);
34440 // Does the current path match this turn restriction?
34441 var matchesFrom = (f.id === fromWayId);
34442 var matchesViaTo = false;
34443 var isAlongOnlyPath = false;
34445 if (t.id === way.id) { // match TO
34447 if (v.length === 1 && v[0].type === 'node') { // match VIA node
34448 matchesViaTo = (v[0].id === entity.id && (
34449 (matchesFrom && currPath.length === 2) ||
34450 (!matchesFrom && currPath.length > 2)
34453 } else { // match all VIA ways
34455 for (k = 2; k < currPath.length; k +=2 ) { // k = 2 skips FROM
34456 pathVias.push(currPath[k]); // (path goes way-node-way...)
34458 var restrictionVias = [];
34459 for (k = 0; k < v.length; k++) {
34460 if (v[k].type === 'way') {
34461 restrictionVias.push(v[k].id);
34464 var diff = utilArrayDifference(pathVias, restrictionVias);
34465 matchesViaTo = !diff.length;
34468 } else if (isOnly) {
34469 for (k = 0; k < v.length; k++) {
34470 // way doesn't match TO, but is one of the via ways along the path of an "only"
34471 if (v[k].type === 'way' && v[k].id === way.id) {
34472 isAlongOnlyPath = true;
34478 if (matchesViaTo) {
34480 restrict = { id: restriction.id, direct: matchesFrom, from: f.id, only: true, end: true };
34482 restrict = { id: restriction.id, direct: matchesFrom, from: f.id, no: true, end: true };
34484 } else { // indirect - caused by a different nearby restriction
34485 if (isAlongOnlyPath) {
34486 restrict = { id: restriction.id, direct: false, from: f.id, only: true, end: false };
34487 } else if (isOnly) {
34488 restrict = { id: restriction.id, direct: false, from: f.id, no: true, end: true };
34492 // stop looking if we find a "direct" restriction (matching FROM, VIA, TO)
34493 if (restrict && restrict.direct)
34497 nextWays.push({ way: way, restrict: restrict });
34500 nextWays.forEach(function(nextWay) {
34501 step(nextWay.way, currPath, currRestrictions, nextWay.restrict);
34505 } else { // entity.type === 'way'
34506 if (currPath.length >= 3) { // this is a "complete" path..
34507 var turnPath = currPath.slice(); // shallow copy
34509 // an indirect restriction - only include the partial path (starting at FROM)
34510 if (matchedRestriction && matchedRestriction.direct === false) {
34511 for (i = 0; i < turnPath.length; i++) {
34512 if (turnPath[i] === matchedRestriction.from) {
34513 turnPath = turnPath.slice(i);
34519 var turn = pathToTurn(turnPath);
34521 if (matchedRestriction) {
34522 turn.restrictionID = matchedRestriction.id;
34523 turn.no = matchedRestriction.no;
34524 turn.only = matchedRestriction.only;
34525 turn.direct = matchedRestriction.direct;
34527 turns.push(osmTurn(turn));
34530 if (currPath[0] === currPath[2]) return; // if we made a u-turn - stop here
34533 if (matchedRestriction && matchedRestriction.end) return; // don't advance any further
34535 // which nodes can we step into?
34536 var n1 = vgraph.entity(entity.first());
34537 var n2 = vgraph.entity(entity.last());
34538 var dist = geoSphericalDistance(n1.loc, n2.loc);
34539 var nextNodes = [];
34541 if (currPath.length > 1) {
34542 if (dist > maxDistance) return; // the next node is too far
34543 if (!entity.__via) return; // this way is a leaf / can't be a via
34546 if (!entity.__oneWay && // bidirectional..
34547 keyVertexIds.indexOf(n1.id) !== -1 && // key vertex..
34548 currPath.indexOf(n1.id) === -1) { // haven't seen it yet..
34549 nextNodes.push(n1); // can advance to first node
34551 if (keyVertexIds.indexOf(n2.id) !== -1 && // key vertex..
34552 currPath.indexOf(n2.id) === -1) { // haven't seen it yet..
34553 nextNodes.push(n2); // can advance to last node
34556 nextNodes.forEach(function(nextNode) {
34557 // gather restrictions FROM this way
34558 var fromRestrictions = vgraph.parentRelations(entity).filter(function(r) {
34559 if (!r.isRestriction()) return false;
34561 var f = r.memberByRole('from');
34562 if (!f || f.id !== entity.id) return false;
34564 var isOnly = /^only_/.test(r.tags.restriction);
34565 if (!isOnly) return true;
34567 // `only_` restrictions only matter along the direction of the VIA - #4849
34568 var isOnlyVia = false;
34569 var v = r.membersByRole('via');
34570 if (v.length === 1 && v[0].type === 'node') { // via node
34571 isOnlyVia = (v[0].id === nextNode.id);
34572 } else { // via way(s)
34573 for (var i = 0; i < v.length; i++) {
34574 if (v[i].type !== 'way') continue;
34575 var viaWay = vgraph.entity(v[i].id);
34576 if (viaWay.first() === nextNode.id || viaWay.last() === nextNode.id) {
34585 step(nextNode, currPath, currRestrictions.concat(fromRestrictions), false);
34591 // assumes path is alternating way-node-way of odd length
34592 function pathToTurn(path) {
34593 if (path.length < 3) return;
34594 var fromWayId, fromNodeId, fromVertexId;
34595 var toWayId, toNodeId, toVertexId;
34596 var viaWayIds, viaNodeId, isUturn;
34598 fromWayId = path[0];
34599 toWayId = path[path.length - 1];
34601 if (path.length === 3 && fromWayId === toWayId) { // u turn
34602 var way = vgraph.entity(fromWayId);
34603 if (way.__oneWay) return null;
34606 viaNodeId = fromVertexId = toVertexId = path[1];
34607 fromNodeId = toNodeId = adjacentNode(fromWayId, viaNodeId);
34611 fromVertexId = path[1];
34612 fromNodeId = adjacentNode(fromWayId, fromVertexId);
34613 toVertexId = path[path.length - 2];
34614 toNodeId = adjacentNode(toWayId, toVertexId);
34616 if (path.length === 3) {
34617 viaNodeId = path[1];
34619 viaWayIds = path.filter(function(entityId) { return entityId[0] === 'w'; });
34620 viaWayIds = viaWayIds.slice(1, viaWayIds.length - 1); // remove first, last
34625 key: path.join('_'),
34627 from: { node: fromNodeId, way: fromWayId, vertex: fromVertexId },
34628 via: { node: viaNodeId, ways: viaWayIds },
34629 to: { node: toNodeId, way: toWayId, vertex: toVertexId },
34634 function adjacentNode(wayId, affixId) {
34635 var nodes = vgraph.entity(wayId).nodes;
34636 return affixId === nodes[0] ? nodes[1] : nodes[nodes.length - 2];
34642 return intersection;
34646 function osmInferRestriction(graph, turn, projection) {
34647 var fromWay = graph.entity(turn.from.way);
34648 var fromNode = graph.entity(turn.from.node);
34649 var fromVertex = graph.entity(turn.from.vertex);
34650 var toWay = graph.entity(turn.to.way);
34651 var toNode = graph.entity(turn.to.node);
34652 var toVertex = graph.entity(turn.to.vertex);
34654 var fromOneWay = (fromWay.tags.oneway === 'yes');
34655 var toOneWay = (toWay.tags.oneway === 'yes');
34656 var angle = (geoAngle(fromVertex, fromNode, projection) -
34657 geoAngle(toVertex, toNode, projection)) * 180 / Math.PI;
34662 if (fromNode === toNode)
34663 return 'no_u_turn';
34664 if ((angle < 23 || angle > 336) && fromOneWay && toOneWay)
34665 return 'no_u_turn'; // wider tolerance for u-turn if both ways are oneway
34666 if ((angle < 40 || angle > 319) && fromOneWay && toOneWay && turn.from.vertex !== turn.to.vertex)
34667 return 'no_u_turn'; // even wider tolerance for u-turn if there is a via way (from !== to)
34669 return 'no_right_turn';
34671 return 'no_left_turn';
34673 return 'no_straight_on';
34676 function actionMergePolygon(ids, newRelationId) {
34678 function groupEntities(graph) {
34679 var entities = ids.map(function (id) { return graph.entity(id); });
34680 var geometryGroups = utilArrayGroupBy(entities, function(entity) {
34681 if (entity.type === 'way' && entity.isClosed()) {
34682 return 'closedWay';
34683 } else if (entity.type === 'relation' && entity.isMultipolygon()) {
34684 return 'multipolygon';
34690 return Object.assign(
34691 { closedWay: [], multipolygon: [], other: [] },
34697 var action = function(graph) {
34698 var entities = groupEntities(graph);
34700 // An array representing all the polygons that are part of the multipolygon.
34702 // Each element is itself an array of objects with an id property, and has a
34703 // locs property which is an array of the locations forming the polygon.
34704 var polygons = entities.multipolygon.reduce(function(polygons, m) {
34705 return polygons.concat(osmJoinWays(m.members, graph));
34706 }, []).concat(entities.closedWay.map(function(d) {
34707 var member = [{id: d.id}];
34708 member.nodes = graph.childNodes(d);
34712 // contained is an array of arrays of boolean values,
34713 // where contained[j][k] is true iff the jth way is
34714 // contained by the kth way.
34715 var contained = polygons.map(function(w, i) {
34716 return polygons.map(function(d, n) {
34717 if (i === n) return null;
34718 return geoPolygonContainsPolygon(
34719 d.nodes.map(function(n) { return n.loc; }),
34720 w.nodes.map(function(n) { return n.loc; })
34725 // Sort all polygons as either outer or inner ways
34729 while (polygons.length) {
34730 extractUncontained(polygons);
34731 polygons = polygons.filter(isContained);
34732 contained = contained.filter(isContained).map(filterContained);
34735 function isContained(d, i) {
34736 return contained[i].some(function(val) { return val; });
34739 function filterContained(d) {
34740 return d.filter(isContained);
34743 function extractUncontained(polygons) {
34744 polygons.forEach(function(d, i) {
34745 if (!isContained(d, i)) {
34746 d.forEach(function(member) {
34750 role: outer ? 'outer' : 'inner'
34758 // Move all tags to one relation
34759 var relation = entities.multipolygon[0] ||
34760 osmRelation({ id: newRelationId, tags: { type: 'multipolygon' }});
34762 entities.multipolygon.slice(1).forEach(function(m) {
34763 relation = relation.mergeTags(m.tags);
34764 graph = graph.remove(m);
34767 entities.closedWay.forEach(function(way) {
34768 function isThisOuter(m) {
34769 return m.id === way.id && m.role !== 'inner';
34771 if (members.some(isThisOuter)) {
34772 relation = relation.mergeTags(way.tags);
34773 graph = graph.replace(way.update({ tags: {} }));
34777 return graph.replace(relation.update({
34779 tags: utilObjectOmit(relation.tags, ['area'])
34784 action.disabled = function(graph) {
34785 var entities = groupEntities(graph);
34786 if (entities.other.length > 0 ||
34787 entities.closedWay.length + entities.multipolygon.length < 2)
34788 return 'not_eligible';
34789 if (!entities.multipolygon.every(function(r) { return r.isComplete(graph); }))
34790 return 'incomplete_relation';
34797 var isArray$3 = Array.isArray;
34798 var keyList = Object.keys;
34799 var hasProp = Object.prototype.hasOwnProperty;
34801 var fastDeepEqual = function equal(a, b) {
34802 if (a === b) return true;
34804 if (a && b && typeof a == 'object' && typeof b == 'object') {
34805 var arrA = isArray$3(a)
34806 , arrB = isArray$3(b)
34811 if (arrA && arrB) {
34813 if (length != b.length) return false;
34814 for (i = length; i-- !== 0;)
34815 if (!equal(a[i], b[i])) return false;
34819 if (arrA != arrB) return false;
34821 var dateA = a instanceof Date
34822 , dateB = b instanceof Date;
34823 if (dateA != dateB) return false;
34824 if (dateA && dateB) return a.getTime() == b.getTime();
34826 var regexpA = a instanceof RegExp
34827 , regexpB = b instanceof RegExp;
34828 if (regexpA != regexpB) return false;
34829 if (regexpA && regexpB) return a.toString() == b.toString();
34831 var keys = keyList(a);
34832 length = keys.length;
34834 if (length !== keyList(b).length)
34837 for (i = length; i-- !== 0;)
34838 if (!hasProp.call(b, keys[i])) return false;
34840 for (i = length; i-- !== 0;) {
34842 if (!equal(a[key], b[key])) return false;
34848 return a!==a && b!==b;
34851 // Text diff algorithm following Hunt and McIlroy 1976.
34852 // J. W. Hunt and M. D. McIlroy, An algorithm for differential file
34853 // comparison, Bell Telephone Laboratories CSTR #41 (1976)
34854 // http://www.cs.dartmouth.edu/~doug/
34856 // Expects two arrays of strings.
34857 function LCS(file1, file2) {
34858 var equivalenceClasses;
34863 var c, i, j, jX, r, s;
34865 equivalenceClasses = {};
34866 for (j = 0; j < file2.length; j++) {
34868 if (equivalenceClasses[line]) {
34869 equivalenceClasses[line].push(j);
34871 equivalenceClasses[line] = [j];
34876 { file1index: -1, file2index: -1, chain: null }
34879 for (i = 0; i < file1.length; i++) {
34881 file2indices = equivalenceClasses[line] || [];
34886 for (jX = 0; jX < file2indices.length; jX++) {
34887 j = file2indices[jX];
34889 for (s = r; s < candidates.length; s++) {
34890 if ((candidates[s].file2index < j) && ((s === candidates.length - 1) || (candidates[s + 1].file2index > j))) {
34895 if (s < candidates.length) {
34896 newCandidate = { file1index: i, file2index: j, chain: candidates[s] };
34897 if (r === candidates.length) {
34898 candidates.push(c);
34904 if (r === candidates.length) {
34905 break; // no point in examining further (j)s
34913 // At this point, we know the LCS: it's in the reverse of the
34914 // linked-list through .chain of candidates[candidates.length - 1].
34916 return candidates[candidates.length - 1];
34920 // We apply the LCS to give a simple representation of the
34921 // offsets and lengths of mismatched chunks in the input
34922 // files. This is used by diff3MergeIndices below.
34923 function diffIndices(file1, file2) {
34925 var tail1 = file1.length;
34926 var tail2 = file2.length;
34928 for (var candidate = LCS(file1, file2);
34929 candidate !== null;
34930 candidate = candidate.chain)
34932 var mismatchLength1 = tail1 - candidate.file1index - 1;
34933 var mismatchLength2 = tail2 - candidate.file2index - 1;
34934 tail1 = candidate.file1index;
34935 tail2 = candidate.file2index;
34937 if (mismatchLength1 || mismatchLength2) {
34939 file1: [tail1 + 1, mismatchLength1],
34940 file2: [tail2 + 1, mismatchLength2]
34950 // Given three files, A, O, and B, where both A and B are
34951 // independently derived from O, returns a fairly complicated
34952 // internal representation of merge decisions it's taken. The
34953 // interested reader may wish to consult
34955 // Sanjeev Khanna, Keshav Kunal, and Benjamin C. Pierce.
34956 // 'A Formal Investigation of ' In Arvind and Prasad,
34957 // editors, Foundations of Software Technology and Theoretical
34958 // Computer Science (FSTTCS), December 2007.
34960 // (http://www.cis.upenn.edu/~bcpierce/papers/diff3-short.pdf)
34961 function diff3MergeIndices(a, o, b) {
34963 var m1 = diffIndices(o, a);
34964 var m2 = diffIndices(o, b);
34967 function addHunk(h, side) {
34968 hunks.push([h.file1[0], side, h.file1[1], h.file2[0], h.file2[1]]);
34970 for (i = 0; i < m1.length; i++) { addHunk(m1[i], 0); }
34971 for (i = 0; i < m2.length; i++) { addHunk(m2[i], 2); }
34972 hunks.sort(function (x, y) { return x[0] - y[0]; });
34975 var commonOffset = 0;
34976 function copyCommon(targetOffset) {
34977 if (targetOffset > commonOffset) {
34978 result.push([1, commonOffset, targetOffset - commonOffset]);
34979 commonOffset = targetOffset;
34983 for (var hunkIndex = 0; hunkIndex < hunks.length; hunkIndex++) {
34984 var firstHunkIndex = hunkIndex;
34985 var hunk = hunks[hunkIndex];
34986 var regionLhs = hunk[0];
34987 var regionRhs = regionLhs + hunk[2];
34988 while (hunkIndex < hunks.length - 1) {
34989 var maybeOverlapping = hunks[hunkIndex + 1];
34990 var maybeLhs = maybeOverlapping[0];
34991 if (maybeLhs > regionRhs) {
34994 regionRhs = Math.max(regionRhs, maybeLhs + maybeOverlapping[2]);
34998 copyCommon(regionLhs);
34999 if (firstHunkIndex === hunkIndex) {
35000 // The 'overlap' was only one hunk long, meaning that
35001 // there's no conflict here. Either a and o were the
35002 // same, or b and o were the same.
35004 result.push([hunk[1], hunk[3], hunk[4]]);
35007 // A proper conflict. Determine the extents of the
35008 // regions involved from a, o and b. Effectively merge
35009 // all the hunks on the left into one giant hunk, and
35010 // do the same for the right; then, correct for skew
35011 // in the regions of o that each side changed, and
35012 // report appropriate spans for the three sides.
35014 0: [a.length, -1, o.length, -1],
35015 2: [b.length, -1, o.length, -1]
35017 for (i = firstHunkIndex; i <= hunkIndex; i++) {
35019 var side = hunk[1];
35020 var r = regions[side];
35021 var oLhs = hunk[0];
35022 var oRhs = oLhs + hunk[2];
35023 var abLhs = hunk[3];
35024 var abRhs = abLhs + hunk[4];
35025 r[0] = Math.min(abLhs, r[0]);
35026 r[1] = Math.max(abRhs, r[1]);
35027 r[2] = Math.min(oLhs, r[2]);
35028 r[3] = Math.max(oRhs, r[3]);
35030 var aLhs = regions[0][0] + (regionLhs - regions[0][2]);
35031 var aRhs = regions[0][1] + (regionRhs - regions[0][3]);
35032 var bLhs = regions[2][0] + (regionLhs - regions[2][2]);
35033 var bRhs = regions[2][1] + (regionRhs - regions[2][3]);
35036 regionLhs, regionRhs - regionLhs,
35037 bLhs, bRhs - bLhs]);
35039 commonOffset = regionRhs;
35042 copyCommon(o.length);
35047 // Applies the output of diff3MergeIndices to actually
35048 // construct the merged file; the returned result alternates
35049 // between 'ok' and 'conflict' blocks.
35050 function diff3Merge(a, o, b, excludeFalseConflicts) {
35052 var files = [a, o, b];
35053 var indices = diff3MergeIndices(a, o, b);
35056 function flushOk() {
35057 if (okLines.length) {
35058 result.push({ok: okLines});
35062 function pushOk(xs) {
35063 for (var j = 0; j < xs.length; j++) {
35064 okLines.push(xs[j]);
35068 function isTrueConflict(rec) {
35069 if (rec[2] !== rec[6]) return true;
35072 for (var j = 0; j < rec[2]; j++) {
35073 if (a[j + aoff] !== b[j + boff]) {
35080 for (var i = 0; i < indices.length; i++) {
35081 var x = indices[i];
35084 if (excludeFalseConflicts && !isTrueConflict(x)) {
35085 pushOk(files[0].slice(x[1], x[1] + x[2]));
35090 a: a.slice(x[1], x[1] + x[2]),
35092 o: o.slice(x[3], x[3] + x[4]),
35094 b: b.slice(x[5], x[5] + x[6]),
35100 pushOk(files[side].slice(x[1], x[1] + x[2]));
35108 function actionMergeRemoteChanges(id, localGraph, remoteGraph, formatUser) {
35109 var _option = 'safe'; // 'safe', 'force_local', 'force_remote'
35110 var _conflicts = [];
35114 return (typeof formatUser === 'function') ? formatUser(d) : d;
35118 function mergeLocation(remote, target) {
35119 function pointEqual(a, b) {
35120 var epsilon = 1e-6;
35121 return (Math.abs(a[0] - b[0]) < epsilon) && (Math.abs(a[1] - b[1]) < epsilon);
35124 if (_option === 'force_local' || pointEqual(target.loc, remote.loc)) {
35127 if (_option === 'force_remote') {
35128 return target.update({loc: remote.loc});
35131 _conflicts.push(t('merge_remote_changes.conflict.location', { user: user(remote.user) }));
35136 function mergeNodes(base, remote, target) {
35137 if (_option === 'force_local' || fastDeepEqual(target.nodes, remote.nodes)) {
35140 if (_option === 'force_remote') {
35141 return target.update({nodes: remote.nodes});
35144 var ccount = _conflicts.length;
35145 var o = base.nodes || [];
35146 var a = target.nodes || [];
35147 var b = remote.nodes || [];
35149 var hunks = diff3Merge(a, o, b, true);
35151 for (var i = 0; i < hunks.length; i++) {
35152 var hunk = hunks[i];
35154 nodes.push.apply(nodes, hunk.ok);
35156 // for all conflicts, we can assume c.a !== c.b
35157 // because `diff3Merge` called with `true` option to exclude false conflicts..
35158 var c = hunk.conflict;
35159 if (fastDeepEqual(c.o, c.a)) { // only changed remotely
35160 nodes.push.apply(nodes, c.b);
35161 } else if (fastDeepEqual(c.o, c.b)) { // only changed locally
35162 nodes.push.apply(nodes, c.a);
35163 } else { // changed both locally and remotely
35164 _conflicts.push(t('merge_remote_changes.conflict.nodelist', { user: user(remote.user) }));
35170 return (_conflicts.length === ccount) ? target.update({nodes: nodes}) : target;
35174 function mergeChildren(targetWay, children, updates, graph) {
35175 function isUsed(node, targetWay) {
35176 var hasInterestingParent = graph.parentWays(node)
35177 .some(function(way) { return way.id !== targetWay.id; });
35179 return node.hasInterestingTags() ||
35180 hasInterestingParent ||
35181 graph.parentRelations(node).length > 0;
35184 var ccount = _conflicts.length;
35186 for (var i = 0; i < children.length; i++) {
35187 var id = children[i];
35188 var node = graph.hasEntity(id);
35190 // remove unused childNodes..
35191 if (targetWay.nodes.indexOf(id) === -1) {
35192 if (node && !isUsed(node, targetWay)) {
35193 updates.removeIds.push(id);
35198 // restore used childNodes..
35199 var local = localGraph.hasEntity(id);
35200 var remote = remoteGraph.hasEntity(id);
35203 if (_option === 'force_remote' && remote && remote.visible) {
35204 updates.replacements.push(remote);
35206 } else if (_option === 'force_local' && local) {
35207 target = osmEntity(local);
35209 target = target.update({ version: remote.version });
35211 updates.replacements.push(target);
35213 } else if (_option === 'safe' && local && remote && local.version !== remote.version) {
35214 target = osmEntity(local, { version: remote.version });
35215 if (remote.visible) {
35216 target = mergeLocation(remote, target);
35218 _conflicts.push(t('merge_remote_changes.conflict.deleted', { user: user(remote.user) }));
35221 if (_conflicts.length !== ccount) break;
35222 updates.replacements.push(target);
35230 function updateChildren(updates, graph) {
35231 for (var i = 0; i < updates.replacements.length; i++) {
35232 graph = graph.replace(updates.replacements[i]);
35234 if (updates.removeIds.length) {
35235 graph = actionDeleteMultiple(updates.removeIds)(graph);
35241 function mergeMembers(remote, target) {
35242 if (_option === 'force_local' || fastDeepEqual(target.members, remote.members)) {
35245 if (_option === 'force_remote') {
35246 return target.update({members: remote.members});
35249 _conflicts.push(t('merge_remote_changes.conflict.memberlist', { user: user(remote.user) }));
35254 function mergeTags(base, remote, target) {
35255 if (_option === 'force_local' || fastDeepEqual(target.tags, remote.tags)) {
35258 if (_option === 'force_remote') {
35259 return target.update({tags: remote.tags});
35262 var ccount = _conflicts.length;
35263 var o = base.tags || {};
35264 var a = target.tags || {};
35265 var b = remote.tags || {};
35266 var keys = utilArrayUnion(utilArrayUnion(Object.keys(o), Object.keys(a)), Object.keys(b))
35267 .filter(function(k) { return !dataDiscarded[k]; });
35268 var tags = Object.assign({}, a); // shallow copy
35269 var changed = false;
35271 for (var i = 0; i < keys.length; i++) {
35274 if (o[k] !== b[k] && a[k] !== b[k]) { // changed remotely..
35275 if (o[k] !== a[k]) { // changed locally..
35276 _conflicts.push(t('merge_remote_changes.conflict.tags',
35277 { tag: k, local: a[k], remote: b[k], user: user(remote.user) }));
35279 } else { // unchanged locally, accept remote change..
35280 if (b.hasOwnProperty(k)) {
35290 return (changed && _conflicts.length === ccount) ? target.update({tags: tags}) : target;
35294 // `graph.base()` is the common ancestor of the two graphs.
35295 // `localGraph` contains user's edits up to saving
35296 // `remoteGraph` contains remote edits to modified nodes
35297 // `graph` must be a descendent of `localGraph` and may include
35298 // some conflict resolution actions performed on it.
35300 // --- ... --- `localGraph` -- ... -- `graph`
35302 // `graph.base()` --- ... --- `remoteGraph`
35304 var action = function(graph) {
35305 var updates = { replacements: [], removeIds: [] };
35306 var base = graph.base().entities[id];
35307 var local = localGraph.entity(id);
35308 var remote = remoteGraph.entity(id);
35309 var target = osmEntity(local, { version: remote.version });
35312 if (!remote.visible) {
35313 if (_option === 'force_remote') {
35314 return actionDeleteMultiple([id])(graph);
35316 } else if (_option === 'force_local') {
35317 if (target.type === 'way') {
35318 target = mergeChildren(target, utilArrayUniq(local.nodes), updates, graph);
35319 graph = updateChildren(updates, graph);
35321 return graph.replace(target);
35324 _conflicts.push(t('merge_remote_changes.conflict.deleted', { user: user(remote.user) }));
35325 return graph; // do nothing
35330 if (target.type === 'node') {
35331 target = mergeLocation(remote, target);
35333 } else if (target.type === 'way') {
35334 // pull in any child nodes that may not be present locally..
35335 graph.rebase(remoteGraph.childNodes(remote), [graph], false);
35336 target = mergeNodes(base, remote, target);
35337 target = mergeChildren(target, utilArrayUnion(local.nodes, remote.nodes), updates, graph);
35339 } else if (target.type === 'relation') {
35340 target = mergeMembers(remote, target);
35343 target = mergeTags(base, remote, target);
35345 if (!_conflicts.length) {
35346 graph = updateChildren(updates, graph).replace(target);
35353 action.withOption = function(opt) {
35359 action.conflicts = function() {
35367 // https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/command/MoveCommand.java
35368 // https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/MoveNodeAction.as
35369 function actionMove(moveIDs, tryDelta, projection, cache) {
35370 var _delta = tryDelta;
35372 function setupCache(graph) {
35373 function canMove(nodeID) {
35374 // Allow movement of any node that is in the selectedIDs list..
35375 if (moveIDs.indexOf(nodeID) !== -1) return true;
35377 // Allow movement of a vertex where 2 ways meet..
35378 var parents = graph.parentWays(graph.entity(nodeID));
35379 if (parents.length < 3) return true;
35381 // Restrict movement of a vertex where >2 ways meet, unless all parentWays are moving too..
35382 var parentsMoving = parents.every(function(way) { return cache.moving[way.id]; });
35383 if (!parentsMoving) delete cache.moving[nodeID];
35385 return parentsMoving;
35388 function cacheEntities(ids) {
35389 for (var i = 0; i < ids.length; i++) {
35391 if (cache.moving[id]) continue;
35392 cache.moving[id] = true;
35394 var entity = graph.hasEntity(id);
35395 if (!entity) continue;
35397 if (entity.type === 'node') {
35398 cache.nodes.push(id);
35399 cache.startLoc[id] = entity.loc;
35400 } else if (entity.type === 'way') {
35401 cache.ways.push(id);
35402 cacheEntities(entity.nodes);
35404 cacheEntities(entity.members.map(function(member) {
35411 function cacheIntersections(ids) {
35412 function isEndpoint(way, id) {
35413 return !way.isClosed() && !!way.affix(id);
35416 for (var i = 0; i < ids.length; i++) {
35419 // consider only intersections with 1 moved and 1 unmoved way.
35420 var childNodes = graph.childNodes(graph.entity(id));
35421 for (var j = 0; j < childNodes.length; j++) {
35422 var node = childNodes[j];
35423 var parents = graph.parentWays(node);
35424 if (parents.length !== 2) continue;
35426 var moved = graph.entity(id);
35427 var unmoved = null;
35428 for (var k = 0; k < parents.length; k++) {
35429 var way = parents[k];
35430 if (!cache.moving[way.id]) {
35435 if (!unmoved) continue;
35437 // exclude ways that are overly connected..
35438 if (utilArrayIntersection(moved.nodes, unmoved.nodes).length > 2) continue;
35439 if (moved.isArea() || unmoved.isArea()) continue;
35441 cache.intersections.push({
35444 unmovedId: unmoved.id,
35445 movedIsEP: isEndpoint(moved, node.id),
35446 unmovedIsEP: isEndpoint(unmoved, node.id)
35458 cache.intersections = [];
35459 cache.replacedVertex = {};
35460 cache.startLoc = {};
35464 cacheEntities(moveIDs);
35465 cacheIntersections(cache.ways);
35466 cache.nodes = cache.nodes.filter(canMove);
35473 // Place a vertex where the moved vertex used to be, to preserve way shape..
35482 // * node '*' added to preserve shape
35484 // / b ---- e way `b,e` moved here:
35489 function replaceMovedVertex(nodeId, wayId, graph, delta) {
35490 var way = graph.entity(wayId);
35491 var moved = graph.entity(nodeId);
35492 var movedIndex = way.nodes.indexOf(nodeId);
35493 var len, prevIndex, nextIndex;
35495 if (way.isClosed()) {
35496 len = way.nodes.length - 1;
35497 prevIndex = (movedIndex + len - 1) % len;
35498 nextIndex = (movedIndex + len + 1) % len;
35500 len = way.nodes.length;
35501 prevIndex = movedIndex - 1;
35502 nextIndex = movedIndex + 1;
35505 var prev = graph.hasEntity(way.nodes[prevIndex]);
35506 var next = graph.hasEntity(way.nodes[nextIndex]);
35508 // Don't add orig vertex at endpoint..
35509 if (!prev || !next) return graph;
35511 var key = wayId + '_' + nodeId;
35512 var orig = cache.replacedVertex[key];
35515 cache.replacedVertex[key] = orig;
35516 cache.startLoc[orig.id] = cache.startLoc[nodeId];
35521 start = projection(cache.startLoc[nodeId]);
35522 end = projection.invert(geoVecAdd(start, delta));
35524 end = cache.startLoc[nodeId];
35526 orig = orig.move(end);
35528 var angle = Math.abs(geoAngle(orig, prev, projection) -
35529 geoAngle(orig, next, projection)) * 180 / Math.PI;
35531 // Don't add orig vertex if it would just make a straight line..
35532 if (angle > 175 && angle < 185) return graph;
35534 // moving forward or backward along way?
35535 var p1 = [prev.loc, orig.loc, moved.loc, next.loc].map(projection);
35536 var p2 = [prev.loc, moved.loc, orig.loc, next.loc].map(projection);
35537 var d1 = geoPathLength(p1);
35538 var d2 = geoPathLength(p2);
35539 var insertAt = (d1 <= d2) ? movedIndex : nextIndex;
35541 // moving around closed loop?
35542 if (way.isClosed() && insertAt === 0) insertAt = len;
35544 way = way.addNode(orig.id, insertAt);
35545 return graph.replace(orig).replace(way);
35549 // Remove duplicate vertex that might have been added by
35550 // replaceMovedVertex. This is done after the unzorro checks.
35551 function removeDuplicateVertices(wayId, graph) {
35552 var way = graph.entity(wayId);
35553 var epsilon = 1e-6;
35556 function isInteresting(node, graph) {
35557 return graph.parentWays(node).length > 1 ||
35558 graph.parentRelations(node).length ||
35559 node.hasInterestingTags();
35562 for (var i = 0; i < way.nodes.length; i++) {
35563 curr = graph.entity(way.nodes[i]);
35565 if (prev && curr && geoVecEqual(prev.loc, curr.loc, epsilon)) {
35566 if (!isInteresting(prev, graph)) {
35567 way = way.removeNode(prev.id);
35568 graph = graph.replace(way).remove(prev);
35569 } else if (!isInteresting(curr, graph)) {
35570 way = way.removeNode(curr.id);
35571 graph = graph.replace(way).remove(curr);
35582 // Reorder nodes around intersections that have moved..
35584 // Start: way1.nodes: b,e (moving)
35585 // a - b - c ----- d way2.nodes: a,b,c,d (static)
35587 // e isEP1: true, isEP2, false
35589 // way1 `b,e` moved here:
35590 // a ----- c = b - d
35594 // reorder nodes way1.nodes: b,e
35595 // a ----- c - b - d way2.nodes: a,c,b,d
35599 function unZorroIntersection(intersection, graph) {
35600 var vertex = graph.entity(intersection.nodeId);
35601 var way1 = graph.entity(intersection.movedId);
35602 var way2 = graph.entity(intersection.unmovedId);
35603 var isEP1 = intersection.movedIsEP;
35604 var isEP2 = intersection.unmovedIsEP;
35606 // don't move the vertex if it is the endpoint of both ways.
35607 if (isEP1 && isEP2) return graph;
35609 var nodes1 = graph.childNodes(way1).filter(function(n) { return n !== vertex; });
35610 var nodes2 = graph.childNodes(way2).filter(function(n) { return n !== vertex; });
35612 if (way1.isClosed() && way1.first() === vertex.id) nodes1.push(nodes1[0]);
35613 if (way2.isClosed() && way2.first() === vertex.id) nodes2.push(nodes2[0]);
35615 var edge1 = !isEP1 && geoChooseEdge(nodes1, projection(vertex.loc), projection);
35616 var edge2 = !isEP2 && geoChooseEdge(nodes2, projection(vertex.loc), projection);
35619 // snap vertex to nearest edge (or some point between them)..
35620 if (!isEP1 && !isEP2) {
35621 var epsilon = 1e-6, maxIter = 10;
35622 for (var i = 0; i < maxIter; i++) {
35623 loc = geoVecInterp(edge1.loc, edge2.loc, 0.5);
35624 edge1 = geoChooseEdge(nodes1, projection(loc), projection);
35625 edge2 = geoChooseEdge(nodes2, projection(loc), projection);
35626 if (Math.abs(edge1.distance - edge2.distance) < epsilon) break;
35628 } else if (!isEP1) {
35634 graph = graph.replace(vertex.move(loc));
35636 // if zorro happened, reorder nodes..
35637 if (!isEP1 && edge1.index !== way1.nodes.indexOf(vertex.id)) {
35638 way1 = way1.removeNode(vertex.id).addNode(vertex.id, edge1.index);
35639 graph = graph.replace(way1);
35641 if (!isEP2 && edge2.index !== way2.nodes.indexOf(vertex.id)) {
35642 way2 = way2.removeNode(vertex.id).addNode(vertex.id, edge2.index);
35643 graph = graph.replace(way2);
35650 function cleanupIntersections(graph) {
35651 for (var i = 0; i < cache.intersections.length; i++) {
35652 var obj = cache.intersections[i];
35653 graph = replaceMovedVertex(obj.nodeId, obj.movedId, graph, _delta);
35654 graph = replaceMovedVertex(obj.nodeId, obj.unmovedId, graph, null);
35655 graph = unZorroIntersection(obj, graph);
35656 graph = removeDuplicateVertices(obj.movedId, graph);
35657 graph = removeDuplicateVertices(obj.unmovedId, graph);
35664 // check if moving way endpoint can cross an unmoved way, if so limit delta..
35665 function limitDelta(graph) {
35666 function moveNode(loc) {
35667 return geoVecAdd(projection(loc), _delta);
35670 for (var i = 0; i < cache.intersections.length; i++) {
35671 var obj = cache.intersections[i];
35673 // Don't limit movement if this is vertex joins 2 endpoints..
35674 if (obj.movedIsEP && obj.unmovedIsEP) continue;
35675 // Don't limit movement if this vertex is not an endpoint anyway..
35676 if (!obj.movedIsEP) continue;
35678 var node = graph.entity(obj.nodeId);
35679 var start = projection(node.loc);
35680 var end = geoVecAdd(start, _delta);
35681 var movedNodes = graph.childNodes(graph.entity(obj.movedId));
35682 var movedPath = movedNodes.map(function(n) { return moveNode(n.loc); });
35683 var unmovedNodes = graph.childNodes(graph.entity(obj.unmovedId));
35684 var unmovedPath = unmovedNodes.map(function(n) { return projection(n.loc); });
35685 var hits = geoPathIntersections(movedPath, unmovedPath);
35687 for (var j = 0; i < hits.length; i++) {
35688 if (geoVecEqual(hits[j], end)) continue;
35689 var edge = geoChooseEdge(unmovedNodes, end, projection);
35690 _delta = geoVecSubtract(projection(edge.loc), start);
35696 var action = function(graph) {
35697 if (_delta[0] === 0 && _delta[1] === 0) return graph;
35701 if (cache.intersections.length) {
35705 for (var i = 0; i < cache.nodes.length; i++) {
35706 var node = graph.entity(cache.nodes[i]);
35707 var start = projection(node.loc);
35708 var end = geoVecAdd(start, _delta);
35709 graph = graph.replace(node.move(projection.invert(end)));
35712 if (cache.intersections.length) {
35713 graph = cleanupIntersections(graph);
35720 action.delta = function() {
35728 function actionMoveMember(relationId, fromIndex, toIndex) {
35729 return function(graph) {
35730 return graph.replace(graph.entity(relationId).moveMember(fromIndex, toIndex));
35734 function actionMoveNode(nodeID, toLoc) {
35736 var action = function(graph, t) {
35737 if (t === null || !isFinite(t)) t = 1;
35738 t = Math.min(Math.max(+t, 0), 1);
35740 var node = graph.entity(nodeID);
35741 return graph.replace(
35742 node.move(geoVecInterp(node.loc, toLoc, t))
35746 action.transitionable = true;
35751 function actionNoop() {
35752 return function(graph) {
35757 function actionOrthogonalize(wayID, projection, vertexID, degThresh, ep) {
35758 var epsilon = ep || 1e-4;
35759 var threshold = degThresh || 13; // degrees within right or straight to alter
35761 // We test normalized dot products so we can compare as cos(angle)
35762 var lowerThreshold = Math.cos((90 - threshold) * Math.PI / 180);
35763 var upperThreshold = Math.cos(threshold * Math.PI / 180);
35766 var action = function(graph, t) {
35767 if (t === null || !isFinite(t)) t = 1;
35768 t = Math.min(Math.max(+t, 0), 1);
35770 var way = graph.entity(wayID);
35771 way = way.removeNode(''); // sanity check - remove any consecutive duplicates
35773 if (way.tags.nonsquare) {
35774 var tags = Object.assign({}, way.tags);
35775 // since we're squaring, remove indication that this is physically unsquare
35776 delete tags.nonsquare;
35777 way = way.update({tags: tags});
35780 graph = graph.replace(way);
35782 var isClosed = way.isClosed();
35783 var nodes = graph.childNodes(way).slice(); // shallow copy
35784 if (isClosed) nodes.pop();
35786 if (vertexID !== undefined) {
35787 nodes = nodeSubset(nodes, vertexID, isClosed);
35788 if (nodes.length !== 3) return graph;
35791 // note: all geometry functions here use the unclosed node/point/coord list
35793 var nodeCount = {};
35795 var corner = { i: 0, dotp: 1 };
35796 var node, point, loc, score, motions, i, j;
35798 for (i = 0; i < nodes.length; i++) {
35800 nodeCount[node.id] = (nodeCount[node.id] || 0) + 1;
35801 points.push({ id: node.id, coord: projection(node.loc) });
35805 if (points.length === 3) { // move only one vertex for right triangle
35806 for (i = 0; i < 1000; i++) {
35807 motions = points.map(calcMotion);
35809 points[corner.i].coord = geoVecAdd(points[corner.i].coord, motions[corner.i]);
35810 score = corner.dotp;
35811 if (score < epsilon) {
35816 node = graph.entity(nodes[corner.i].id);
35817 loc = projection.invert(points[corner.i].coord);
35818 graph = graph.replace(node.move(geoVecInterp(node.loc, loc, t)));
35821 var straights = [];
35822 var simplified = [];
35824 // Remove points from nearly straight sections..
35825 // This produces a simplified shape to orthogonalize
35826 for (i = 0; i < points.length; i++) {
35829 if (isClosed || (i > 0 && i < points.length - 1)) {
35830 var a = points[(i - 1 + points.length) % points.length];
35831 var b = points[(i + 1) % points.length];
35832 dotp = Math.abs(geoOrthoNormalizedDotProduct(a.coord, b.coord, point.coord));
35835 if (dotp > upperThreshold) {
35836 straights.push(point);
35838 simplified.push(point);
35842 // Orthogonalize the simplified shape
35843 var bestPoints = clonePoints(simplified);
35844 var originalPoints = clonePoints(simplified);
35847 for (i = 0; i < 1000; i++) {
35848 motions = simplified.map(calcMotion);
35850 for (j = 0; j < motions.length; j++) {
35851 simplified[j].coord = geoVecAdd(simplified[j].coord, motions[j]);
35853 var newScore = geoOrthoCalcScore(simplified, isClosed, epsilon, threshold);
35854 if (newScore < score) {
35855 bestPoints = clonePoints(simplified);
35858 if (score < epsilon) {
35863 var bestCoords = bestPoints.map(function(p) { return p.coord; });
35864 if (isClosed) bestCoords.push(bestCoords[0]);
35866 // move the nodes that should move
35867 for (i = 0; i < bestPoints.length; i++) {
35868 point = bestPoints[i];
35869 if (!geoVecEqual(originalPoints[i].coord, point.coord)) {
35870 node = graph.entity(point.id);
35871 loc = projection.invert(point.coord);
35872 graph = graph.replace(node.move(geoVecInterp(node.loc, loc, t)));
35876 // move the nodes along straight segments
35877 for (i = 0; i < straights.length; i++) {
35878 point = straights[i];
35879 if (nodeCount[point.id] > 1) continue; // skip self-intersections
35881 node = graph.entity(point.id);
35884 graph.parentWays(node).length === 1 &&
35885 graph.parentRelations(node).length === 0 &&
35886 !node.hasInterestingTags()
35888 // remove uninteresting points..
35889 graph = actionDeleteNode(node.id)(graph);
35892 // move interesting points to the nearest edge..
35893 var choice = geoVecProject(point.coord, bestCoords);
35895 loc = projection.invert(choice.target);
35896 graph = graph.replace(node.move(geoVecInterp(node.loc, loc, t)));
35905 function clonePoints(array) {
35906 return array.map(function(p) {
35907 return { id: p.id, coord: [p.coord[0], p.coord[1]] };
35912 function calcMotion(point, i, array) {
35913 // don't try to move the endpoints of a non-closed way.
35914 if (!isClosed && (i === 0 || i === array.length - 1)) return [0, 0];
35915 // don't try to move a node that appears more than once (self intersection)
35916 if (nodeCount[array[i].id] > 1) return [0, 0];
35918 var a = array[(i - 1 + array.length) % array.length].coord;
35919 var origin = point.coord;
35920 var b = array[(i + 1) % array.length].coord;
35921 var p = geoVecSubtract(a, origin);
35922 var q = geoVecSubtract(b, origin);
35924 var scale = 2 * Math.min(geoVecLength(p), geoVecLength(q));
35925 p = geoVecNormalize(p);
35926 q = geoVecNormalize(q);
35928 var dotp = (p[0] * q[0] + p[1] * q[1]);
35929 var val = Math.abs(dotp);
35931 if (val < lowerThreshold) { // nearly orthogonal
35934 var vec = geoVecNormalize(geoVecAdd(p, q));
35935 return geoVecScale(vec, 0.1 * dotp * scale);
35938 return [0, 0]; // do nothing
35943 // if we are only orthogonalizing one vertex,
35944 // get that vertex and the previous and next
35945 function nodeSubset(nodes, vertexID, isClosed) {
35946 var first = isClosed ? 0 : 1;
35947 var last = isClosed ? nodes.length : nodes.length - 1;
35949 for (var i = first; i < last; i++) {
35950 if (nodes[i].id === vertexID) {
35952 nodes[(i - 1 + nodes.length) % nodes.length],
35954 nodes[(i + 1) % nodes.length]
35963 action.disabled = function(graph) {
35964 var way = graph.entity(wayID);
35965 way = way.removeNode(''); // sanity check - remove any consecutive duplicates
35966 graph = graph.replace(way);
35968 var isClosed = way.isClosed();
35969 var nodes = graph.childNodes(way).slice(); // shallow copy
35970 if (isClosed) nodes.pop();
35972 var allowStraightAngles = false;
35973 if (vertexID !== undefined) {
35974 allowStraightAngles = true;
35975 nodes = nodeSubset(nodes, vertexID, isClosed);
35976 if (nodes.length !== 3) return 'end_vertex';
35979 var coords = nodes.map(function(n) { return projection(n.loc); });
35980 var score = geoOrthoCanOrthogonalize(coords, isClosed, epsilon, threshold, allowStraightAngles);
35982 if (score === null) {
35983 return 'not_squarish';
35984 } else if (score === 0) {
35985 return 'square_enough';
35992 action.transitionable = true;
35997 // `actionRestrictTurn` creates a turn restriction relation.
35999 // `turn` must be an `osmTurn` object
36000 // see osm/intersection.js, pathToTurn()
36002 // This specifies a restriction of type `restriction` when traveling from
36003 // `turn.from.way` toward `turn.to.way` via `turn.via.node` OR `turn.via.ways`.
36004 // (The action does not check that these entities form a valid intersection.)
36006 // From, to, and via ways should be split before calling this action.
36007 // (old versions of the code would split the ways here, but we no longer do it)
36009 // For testing convenience, accepts a restrictionID to assign to the new
36010 // relation. Normally, this will be undefined and the relation will
36011 // automatically be assigned a new ID.
36013 function actionRestrictTurn(turn, restrictionType, restrictionID) {
36015 return function(graph) {
36016 var fromWay = graph.entity(turn.from.way);
36017 var toWay = graph.entity(turn.to.way);
36018 var viaNode = turn.via.node && graph.entity(turn.via.node);
36019 var viaWays = turn.via.ways && turn.via.ways.map(function(id) { return graph.entity(id); });
36022 members.push({ id: fromWay.id, type: 'way', role: 'from' });
36025 members.push({ id: viaNode.id, type: 'node', role: 'via' });
36026 } else if (viaWays) {
36027 viaWays.forEach(function(viaWay) {
36028 members.push({ id: viaWay.id, type: 'way', role: 'via' });
36032 members.push({ id: toWay.id, type: 'way', role: 'to' });
36034 return graph.replace(osmRelation({
36037 type: 'restriction',
36038 restriction: restrictionType
36045 function actionRevert(id) {
36046 var action = function(graph) {
36047 var entity = graph.hasEntity(id),
36048 base = graph.base().entities[id];
36050 if (entity && !base) { // entity will be removed..
36051 if (entity.type === 'node') {
36052 graph.parentWays(entity)
36053 .forEach(function(parent) {
36054 parent = parent.removeNode(id);
36055 graph = graph.replace(parent);
36057 if (parent.isDegenerate()) {
36058 graph = actionDeleteWay(parent.id)(graph);
36063 graph.parentRelations(entity)
36064 .forEach(function(parent) {
36065 parent = parent.removeMembersWithID(id);
36066 graph = graph.replace(parent);
36068 if (parent.isDegenerate()) {
36069 graph = actionDeleteRelation(parent.id)(graph);
36074 return graph.revert(id);
36080 function actionRotate(rotateIds, pivot, angle, projection) {
36082 var action = function(graph) {
36083 return graph.update(function(graph) {
36084 utilGetAllNodes(rotateIds, graph).forEach(function(node) {
36085 var point = geoRotate([projection(node.loc)], angle, pivot)[0];
36086 graph = graph.replace(node.move(projection.invert(point)));
36094 /* Align nodes along their common axis */
36095 function actionStraightenNodes(nodeIDs, projection) {
36097 function positionAlongWay(a, o, b) {
36098 return geoVecDot(a, b, o) / geoVecDot(b, b, o);
36102 var action = function(graph, t) {
36103 if (t === null || !isFinite(t)) t = 1;
36104 t = Math.min(Math.max(+t, 0), 1);
36106 var nodes = nodeIDs.map(function(id) { return graph.entity(id); });
36107 var points = nodes.map(function(n) { return projection(n.loc); });
36108 var ssr = geoGetSmallestSurroundingRectangle(points);
36110 // Choose line pq = axis of symmetry.
36111 // The shape's surrounding rectangle has 2 axes of symmetry.
36112 // Snap points to the long axis
36113 var p1 = [(ssr.poly[0][0] + ssr.poly[1][0]) / 2, (ssr.poly[0][1] + ssr.poly[1][1]) / 2 ];
36114 var q1 = [(ssr.poly[2][0] + ssr.poly[3][0]) / 2, (ssr.poly[2][1] + ssr.poly[3][1]) / 2 ];
36115 var p2 = [(ssr.poly[3][0] + ssr.poly[4][0]) / 2, (ssr.poly[3][1] + ssr.poly[4][1]) / 2 ];
36116 var q2 = [(ssr.poly[1][0] + ssr.poly[2][0]) / 2, (ssr.poly[1][1] + ssr.poly[2][1]) / 2 ];
36119 var isLong = (geoVecLength(p1, q1) > geoVecLength(p2, q2));
36128 // Move points onto line pq
36129 for (var i = 0; i < points.length; i++) {
36130 var node = nodes[i];
36131 var point = points[i];
36132 var u = positionAlongWay(point, p, q);
36133 var point2 = geoVecInterp(p, q, u);
36134 var loc2 = projection.invert(point2);
36135 graph = graph.replace(node.move(geoVecInterp(node.loc, loc2, t)));
36142 action.disabled = function() {
36147 action.transitionable = true;
36154 * Based on https://github.com/openstreetmap/potlatch2/net/systemeD/potlatch2/tools/Straighten.as
36156 function actionStraightenWay(selectedIDs, projection) {
36158 function positionAlongWay(a, o, b) {
36159 return geoVecDot(a, b, o) / geoVecDot(b, b, o);
36162 // Return all selected ways as a continuous, ordered array of nodes
36163 function allNodes(graph) {
36165 var startNodes = [];
36167 var remainingWays = [];
36168 var selectedWays = selectedIDs.filter(function(w) {
36169 return graph.entity(w).type === 'way';
36171 var selectedNodes = selectedIDs.filter(function(n) {
36172 return graph.entity(n).type === 'node';
36175 for (var i = 0; i < selectedWays.length; i++) {
36176 var way = graph.entity(selectedWays[i]);
36177 nodes = way.nodes.slice(0);
36178 remainingWays.push(nodes);
36179 startNodes.push(nodes[0]);
36180 endNodes.push(nodes[nodes.length-1]);
36183 // Remove duplicate end/startNodes (duplicate nodes cannot be at the line end,
36184 // and need to be removed so currNode difference calculation below works)
36185 // i.e. ["n-1", "n-1", "n-2"] => ["n-2"]
36186 startNodes = startNodes.filter(function(n) {
36187 return startNodes.indexOf(n) === startNodes.lastIndexOf(n);
36189 endNodes = endNodes.filter(function(n) {
36190 return endNodes.indexOf(n) === endNodes.lastIndexOf(n);
36193 // Choose the initial endpoint to start from
36194 var currNode = utilArrayDifference(startNodes, endNodes)
36195 .concat(utilArrayDifference(endNodes, startNodes))[0];
36199 // Create nested function outside of loop to avoid "function in loop" lint error
36200 var getNextWay = function(currNode, remainingWays) {
36201 return remainingWays.filter(function(way) {
36202 return way[0] === currNode || way[way.length-1] === currNode;
36206 // Add nodes to end of nodes array, until all ways are added
36207 while (remainingWays.length) {
36208 nextWay = getNextWay(currNode, remainingWays);
36209 remainingWays = utilArrayDifference(remainingWays, [nextWay]);
36211 if (nextWay[0] !== currNode) {
36214 nodes = nodes.concat(nextWay);
36215 currNode = nodes[nodes.length-1];
36218 // If user selected 2 nodes to straighten between, then slice nodes array to those nodes
36219 if (selectedNodes.length === 2) {
36220 var startNodeIdx = nodes.indexOf(selectedNodes[0]);
36221 var endNodeIdx = nodes.indexOf(selectedNodes[1]);
36222 var sortedStartEnd = [startNodeIdx, endNodeIdx];
36224 sortedStartEnd.sort(function(a, b) { return a - b; });
36225 nodes = nodes.slice(sortedStartEnd[0], sortedStartEnd[1]+1);
36228 return nodes.map(function(n) { return graph.entity(n); });
36232 var action = function(graph, t) {
36233 if (t === null || !isFinite(t)) t = 1;
36234 t = Math.min(Math.max(+t, 0), 1);
36236 var nodes = allNodes(graph);
36237 var points = nodes.map(function(n) { return projection(n.loc); });
36238 var startPoint = points[0];
36239 var endPoint = points[points.length-1];
36243 for (i = 1; i < points.length-1; i++) {
36244 var node = nodes[i];
36245 var point = points[i];
36247 if (t < 1 || graph.parentWays(node).length > 1 ||
36248 graph.parentRelations(node).length ||
36249 node.hasInterestingTags()
36251 var u = positionAlongWay(point, startPoint, endPoint);
36252 var p = geoVecInterp(startPoint, endPoint, u);
36253 var loc2 = projection.invert(p);
36254 graph = graph.replace(node.move(geoVecInterp(node.loc, loc2, t)));
36258 if (toDelete.indexOf(node) === -1) {
36259 toDelete.push(node);
36264 for (i = 0; i < toDelete.length; i++) {
36265 graph = actionDeleteNode(toDelete[i].id)(graph);
36272 action.disabled = function(graph) {
36273 // check way isn't too bendy
36274 var nodes = allNodes(graph);
36275 var points = nodes.map(function(n) { return projection(n.loc); });
36276 var startPoint = points[0];
36277 var endPoint = points[points.length-1];
36278 var threshold = 0.2 * geoVecLength(startPoint, endPoint);
36281 if (threshold === 0) {
36282 return 'too_bendy';
36285 for (i = 1; i < points.length - 1; i++) {
36286 var point = points[i];
36287 var u = positionAlongWay(point, startPoint, endPoint);
36288 var p = geoVecInterp(startPoint, endPoint, u);
36289 var dist = geoVecLength(p, point);
36291 // to bendy if point is off by 20% of total start/end distance in projected space
36292 if (isNaN(dist) || dist > threshold) {
36293 return 'too_bendy';
36298 action.transitionable = true;
36304 // `actionUnrestrictTurn` deletes a turn restriction relation.
36306 // `turn` must be an `osmTurn` object with a `restrictionID` property.
36307 // see osm/intersection.js, pathToTurn()
36309 function actionUnrestrictTurn(turn) {
36310 return function(graph) {
36311 return actionDeleteRelation(turn.restrictionID)(graph);
36315 /* Reflect the given area around its axis of symmetry */
36316 function actionReflect(reflectIds, projection) {
36317 var _useLongAxis = true;
36320 var action = function(graph, t) {
36321 if (t === null || !isFinite(t)) t = 1;
36322 t = Math.min(Math.max(+t, 0), 1);
36324 var nodes = utilGetAllNodes(reflectIds, graph);
36325 var points = nodes.map(function(n) { return projection(n.loc); });
36326 var ssr = geoGetSmallestSurroundingRectangle(points);
36328 // Choose line pq = axis of symmetry.
36329 // The shape's surrounding rectangle has 2 axes of symmetry.
36330 // Reflect across the longer axis by default.
36331 var p1 = [(ssr.poly[0][0] + ssr.poly[1][0]) / 2, (ssr.poly[0][1] + ssr.poly[1][1]) / 2 ];
36332 var q1 = [(ssr.poly[2][0] + ssr.poly[3][0]) / 2, (ssr.poly[2][1] + ssr.poly[3][1]) / 2 ];
36333 var p2 = [(ssr.poly[3][0] + ssr.poly[4][0]) / 2, (ssr.poly[3][1] + ssr.poly[4][1]) / 2 ];
36334 var q2 = [(ssr.poly[1][0] + ssr.poly[2][0]) / 2, (ssr.poly[1][1] + ssr.poly[2][1]) / 2 ];
36337 var isLong = (geoVecLength(p1, q1) > geoVecLength(p2, q2));
36338 if ((_useLongAxis && isLong) || (!_useLongAxis && !isLong)) {
36346 // reflect c across pq
36347 // http://math.stackexchange.com/questions/65503/point-reflection-over-a-line
36348 var dx = q[0] - p[0];
36349 var dy = q[1] - p[1];
36350 var a = (dx * dx - dy * dy) / (dx * dx + dy * dy);
36351 var b = 2 * dx * dy / (dx * dx + dy * dy);
36352 for (var i = 0; i < nodes.length; i++) {
36353 var node = nodes[i];
36354 var c = projection(node.loc);
36356 a * (c[0] - p[0]) + b * (c[1] - p[1]) + p[0],
36357 b * (c[0] - p[0]) - a * (c[1] - p[1]) + p[1]
36359 var loc2 = projection.invert(c2);
36360 node = node.move(geoVecInterp(node.loc, loc2, t));
36361 graph = graph.replace(node);
36368 action.useLongAxis = function(val) {
36369 if (!arguments.length) return _useLongAxis;
36370 _useLongAxis = val;
36375 action.transitionable = true;
36381 function actionUpgradeTags(entityId, oldTags, replaceTags) {
36383 return function(graph) {
36384 var entity = graph.entity(entityId);
36385 var tags = Object.assign({}, entity.tags); // shallow copy
36389 for (var oldTagKey in oldTags) {
36390 if (oldTags[oldTagKey] === '*') {
36391 transferValue = tags[oldTagKey];
36392 delete tags[oldTagKey];
36394 var vals = tags[oldTagKey].split(';').filter(Boolean);
36395 var oldIndex = vals.indexOf(oldTags[oldTagKey]);
36396 if (vals.length === 1 || oldIndex === -1) {
36397 delete tags[oldTagKey];
36399 if (replaceTags && replaceTags[oldTagKey]) {
36400 // replacing a value within a semicolon-delimited value, note the index
36401 semiIndex = oldIndex;
36403 vals.splice(oldIndex, 1);
36404 tags[oldTagKey] = vals.join(';');
36410 for (var replaceKey in replaceTags) {
36411 var replaceValue = replaceTags[replaceKey];
36412 if (replaceValue === '*') {
36413 if (tags[replaceKey]) {
36414 // any value is okay and there already
36415 // is one, so don't update it
36418 // otherwise assume `yes` is okay
36419 tags[replaceKey] = 'yes';
36421 } else if (replaceValue === '$1') {
36422 tags[replaceKey] = transferValue;
36424 if (tags[replaceKey] && oldTags[replaceKey] && semiIndex !== undefined) {
36425 // don't override preexisting values
36426 var existingVals = tags[replaceKey].split(';').filter(Boolean);
36427 if (existingVals.indexOf(replaceValue) === -1) {
36428 existingVals.splice(semiIndex, 0, replaceValue);
36429 tags[replaceKey] = existingVals.join(';');
36432 tags[replaceKey] = replaceValue;
36438 return graph.replace(entity.update({ tags: tags }));
36442 function behaviorEdit(context) {
36444 function behavior() {
36446 .minzoom(context.minEditableZoom());
36450 behavior.off = function() {
36459 The hover behavior adds the `.hover` class on mouseover to all elements to which
36460 the identical datum is bound, and removes it on mouseout.
36462 The :hover pseudo-class is insufficient for iD's purposes because a datum's visual
36463 representation may consist of several elements scattered throughout the DOM hierarchy.
36464 Only one of these elements can have the :hover pseudo-class, but all of them will
36465 have the .hover class.
36467 function behaviorHover(context) {
36468 var dispatch$1 = dispatch('hover');
36469 var _selection = d3_select(null);
36470 var _newNodeId = null;
36471 var _initialNodeID = null;
36478 function keydown() {
36479 if (_altDisables && event.keyCode === utilKeybinding.modifierCodes.alt) {
36480 _selection.selectAll('.hover')
36481 .classed('hover-suppressed', true)
36482 .classed('hover', false);
36485 .classed('hover-disabled', true);
36487 dispatch$1.call('hover', this, null);
36493 if (_altDisables && event.keyCode === utilKeybinding.modifierCodes.alt) {
36494 _selection.selectAll('.hover-suppressed')
36495 .classed('hover-suppressed', false)
36496 .classed('hover', true);
36499 .classed('hover-disabled', false);
36501 dispatch$1.call('hover', this, _target ? _target.id : null);
36506 function behavior(selection) {
36507 _selection = selection;
36509 if (_initialNodeID) {
36510 _newNodeId = _initialNodeID;
36511 _initialNodeID = null;
36517 .on('mouseover.hover', mouseover)
36518 .on('mouseout.hover', mouseout)
36519 .on('mousedown.hover', mousedown);
36522 .on('keydown.hover', keydown)
36523 .on('keyup.hover', keyup);
36526 function mouseover() {
36527 if (_buttonDown) return;
36528 var target = event.target;
36529 enter(target ? target.__data__ : null);
36533 function mouseout() {
36534 if (_buttonDown) return;
36535 var target = event.relatedTarget;
36536 enter(target ? target.__data__ : null);
36540 function mousedown() {
36541 _buttonDown = true;
36543 .on('mouseup.hover', mouseup, true);
36547 function mouseup() {
36548 _buttonDown = false;
36550 .on('mouseup.hover', null, true);
36553 function allowsVertex(d) {
36554 return d.geometry(context.graph()) === 'vertex' || context.presets().allowsVertex(d, context.graph());
36557 function modeAllowsHover(target) {
36558 var mode = context.mode();
36559 if (mode.id === 'add-point') {
36560 return mode.preset.matchGeometry('vertex') ||
36561 (target.type !== 'way' && target.geometry(context.graph()) !== 'vertex');
36566 function enter(datum) {
36567 if (datum === _target) return;
36570 _selection.selectAll('.hover')
36571 .classed('hover', false);
36572 _selection.selectAll('.hover-suppressed')
36573 .classed('hover-suppressed', false);
36575 // What are we hovering over?
36576 var entity, selector;
36577 if (datum && datum.__featurehash__) {
36579 selector = '.data' + datum.__featurehash__;
36581 } else if (datum instanceof qaError) {
36583 selector = '.' + datum.service + '.error_id-' + datum.id;
36585 } else if (datum instanceof osmNote) {
36587 selector = '.note-' + datum.id;
36589 } else if (datum instanceof osmEntity) {
36591 selector = '.' + entity.id;
36592 if (entity.type === 'relation') {
36593 entity.members.forEach(function(member) { selector += ', .' + member.id; });
36595 } else if (datum && datum.properties && (datum.properties.entity instanceof osmEntity)) {
36596 entity = datum.properties.entity;
36597 selector = '.' + entity.id;
36598 if (entity.type === 'relation') {
36599 entity.members.forEach(function(member) { selector += ', .' + member.id; });
36603 var mode = context.mode();
36605 // Update hover state and dispatch event
36606 if (entity && entity.id !== _newNodeId) {
36607 // If drawing a way, don't hover on a node that was just placed. #3974
36609 if ((mode.id === 'draw-line' || mode.id === 'draw-area') && !_newNodeId && entity.type === 'node') {
36610 _newNodeId = entity.id;
36614 var suppressed = (_altDisables && event && event.altKey) ||
36615 (entity.type === 'node' && _ignoreVertex && !allowsVertex(entity)) ||
36616 !modeAllowsHover(entity);
36617 _selection.selectAll(selector)
36618 .classed(suppressed ? 'hover-suppressed' : 'hover', true);
36620 dispatch$1.call('hover', this, !suppressed && entity);
36623 dispatch$1.call('hover', this, null);
36629 behavior.off = function(selection) {
36630 selection.selectAll('.hover')
36631 .classed('hover', false);
36632 selection.selectAll('.hover-suppressed')
36633 .classed('hover-suppressed', false);
36635 .classed('hover-disabled', false);
36638 .on('mouseover.hover', null)
36639 .on('mouseout.hover', null)
36640 .on('mousedown.hover', null);
36643 .on('keydown.hover', null)
36644 .on('keyup.hover', null);
36648 behavior.altDisables = function(val) {
36649 if (!arguments.length) return _altDisables;
36650 _altDisables = val;
36654 behavior.ignoreVertex = function(val) {
36655 if (!arguments.length) return _ignoreVertex;
36656 _ignoreVertex = val;
36660 behavior.initialNodeID = function(nodeId) {
36661 _initialNodeID = nodeId;
36665 return utilRebind(behavior, dispatch$1, 'on');
36668 function refresh(selection, node) {
36669 var cr = node.getBoundingClientRect();
36670 var prop = [cr.width, cr.height];
36671 selection.property('__dimensions__', prop);
36675 function utilGetDimensions(selection, force) {
36676 if (!selection || selection.empty()) {
36679 var node = selection.node(),
36680 cached = selection.property('__dimensions__');
36681 return (!cached || force) ? refresh(selection, node) : cached;
36685 function utilSetDimensions(selection, dimensions) {
36686 if (!selection || selection.empty()) {
36689 var node = selection.node();
36690 if (dimensions === null) {
36691 refresh(selection, node);
36695 .property('__dimensions__', [dimensions[0], dimensions[1]])
36696 .attr('width', dimensions[0])
36697 .attr('height', dimensions[1]);
36700 function behaviorTail() {
36703 var tooltipSize = [0, 0];
36704 var selectionSize = [0, 0];
36708 function behavior(selection) {
36709 if (!_text) return;
36712 .on('resize.tail', function() { selectionSize = utilGetDimensions(selection); });
36714 container = d3_select(document.body)
36716 .style('display', 'none')
36717 .attr('class', 'tail tooltip-inner');
36719 container.append('div')
36723 .on('mousemove.tail', mousemove)
36724 .on('mouseenter.tail', mouseenter)
36725 .on('mouseleave.tail', mouseleave);
36728 .on('mousemove.tail', mousemove);
36730 tooltipSize = utilGetDimensions(container);
36731 selectionSize = utilGetDimensions(selection);
36735 container.style('display', 'block');
36736 tooltipSize = utilGetDimensions(container);
36740 function mousemove() {
36741 if (container.style('display') === 'none') show();
36742 var xoffset = ((event.clientX + tooltipSize[0] + xmargin) > selectionSize[0]) ?
36743 -tooltipSize[0] - xmargin : xmargin;
36744 container.classed('left', xoffset > 0);
36745 utilSetTransform(container, event.clientX + xoffset, event.clientY);
36749 function mouseleave() {
36750 if (event.relatedTarget !== container.node()) {
36751 container.style('display', 'none');
36756 function mouseenter() {
36757 if (event.relatedTarget !== container.node()) {
36764 behavior.off = function(selection) {
36765 if (!_text) return;
36768 .on('mousemove.tail', null)
36772 .on('mousemove.tail', null)
36773 .on('mouseenter.tail', null)
36774 .on('mouseleave.tail', null);
36777 .on('resize.tail', null);
36781 behavior.text = function(val) {
36782 if (!arguments.length) return _text;
36791 var _usedTails = {};
36792 var _disableSpace = false;
36793 var _lastSpace = null;
36796 function behaviorDraw(context) {
36797 var dispatch$1 = dispatch(
36798 'move', 'click', 'clickWay', 'clickNode', 'undo', 'cancel', 'finish'
36801 var keybinding = utilKeybinding('draw');
36803 var _hover = behaviorHover(context).altDisables(true).ignoreVertex(true)
36804 .on('hover', context.ui().sidebar.hover);
36805 var tail = behaviorTail();
36806 var edit = behaviorEdit(context);
36808 var closeTolerance = 4;
36809 var tolerance = 12;
36810 var _mouseLeave = false;
36811 var _lastMouse = null;
36815 // - `mode/drag_node.js` `datum()`
36817 var mode = context.mode();
36818 var isNote = mode && (mode.id.indexOf('note') !== -1);
36819 if (event.altKey || isNote) return {};
36822 if (event.type === 'keydown') {
36823 element = _lastMouse && _lastMouse.target;
36825 element = event.target;
36828 // When drawing, snap only to touch targets..
36829 // (this excludes area fills and active drawing elements)
36830 var d = element.__data__;
36831 return (d && d.properties && d.properties.target) ? d : {};
36835 function mousedown() {
36838 var p = context.container().node();
36839 return touchId !== null ? d3_touches(p).filter(function(p) {
36840 return p.identifier === touchId;
36841 })[0] : d3_mouse(p);
36844 var element = d3_select(this);
36845 var touchId = event.touches ? event.changedTouches[0].identifier : null;
36846 var t1 = +new Date();
36849 element.on('mousemove.draw', null);
36851 d3_select(window).on('mouseup.draw', function() {
36852 var t2 = +new Date();
36854 var dist = geoVecLength(p1, p2);
36856 element.on('mousemove.draw', mousemove);
36857 d3_select(window).on('mouseup.draw', null);
36859 if (dist < closeTolerance || (dist < tolerance && (t2 - t1) < 500)) {
36860 // Prevent a quick second click
36861 d3_select(window).on('click.draw-block', function() {
36862 event.stopPropagation();
36865 context.map().dblclickEnable(false);
36867 window.setTimeout(function() {
36868 context.map().dblclickEnable(true);
36869 d3_select(window).on('click.draw-block', null);
36878 function mousemove() {
36879 _lastMouse = event;
36880 dispatch$1.call('move', this, datum());
36884 function mouseenter() {
36885 _mouseLeave = false;
36889 function mouseleave() {
36890 _mouseLeave = true;
36893 function allowsVertex(d) {
36894 return d.geometry(context.graph()) === 'vertex' || context.presets().allowsVertex(d, context.graph());
36898 // - `mode/drag_node.js` `doMode()`
36899 // - `behavior/draw.js` `click()`
36900 // - `behavior/draw_way.js` `move()`
36903 var target = d && d.properties && d.properties.entity;
36905 var mode = context.mode();
36907 if (target && target.type === 'node' && allowsVertex(target)) { // Snap to a node
36908 dispatch$1.call('clickNode', this, target, d);
36911 } else if (target && target.type === 'way' && (mode.id !== 'add-point' || mode.preset.matchGeometry('vertex'))) { // Snap to a way
36912 var choice = geoChooseEdge(
36913 context.childNodes(target), context.mouse(), context.projection, context.activeID()
36916 var edge = [target.nodes[choice.index - 1], target.nodes[choice.index]];
36917 dispatch$1.call('clickWay', this, choice.loc, edge, d);
36920 } else if (mode.id !== 'add-point' || mode.preset.matchGeometry('point')) {
36921 dispatch$1.call('click', this, context.map().mouseCoordinates(), d);
36928 event.preventDefault();
36929 event.stopPropagation();
36931 var currSpace = context.mouse();
36932 if (_disableSpace && _lastSpace) {
36933 var dist = geoVecLength(_lastSpace, currSpace);
36934 if (dist > tolerance) {
36935 _disableSpace = false;
36939 if (_disableSpace || _mouseLeave || !_lastMouse) return;
36941 // user must move mouse or release space bar to allow another click
36942 _lastSpace = currSpace;
36943 _disableSpace = true;
36945 d3_select(window).on('keyup.space-block', function() {
36946 event.preventDefault();
36947 event.stopPropagation();
36948 _disableSpace = false;
36949 d3_select(window).on('keyup.space-block', null);
36956 function backspace() {
36957 event.preventDefault();
36958 dispatch$1.call('undo');
36963 event.preventDefault();
36964 dispatch$1.call('cancel');
36969 event.preventDefault();
36970 dispatch$1.call('finish');
36974 function behavior(selection) {
36975 context.install(_hover);
36976 context.install(edit);
36978 if (!context.inIntro() && !_usedTails[tail.text()]) {
36979 context.install(tail);
36983 .on('⌫', backspace)
36987 .on('space', space)
36988 .on('⌥space', space);
36991 .on('mouseenter.draw', mouseenter)
36992 .on('mouseleave.draw', mouseleave)
36993 .on('mousedown.draw', mousedown)
36994 .on('mousemove.draw', mousemove);
36996 d3_select(document)
37003 behavior.off = function(selection) {
37004 context.ui().sidebar.hover.cancel();
37005 context.uninstall(_hover);
37006 context.uninstall(edit);
37008 if (!context.inIntro() && !_usedTails[tail.text()]) {
37009 context.uninstall(tail);
37010 _usedTails[tail.text()] = true;
37014 .on('mouseenter.draw', null)
37015 .on('mouseleave.draw', null)
37016 .on('mousedown.draw', null)
37017 .on('mousemove.draw', null);
37020 .on('mouseup.draw', null);
37021 // note: keyup.space-block, click.draw-block should remain
37023 d3_select(document)
37024 .call(keybinding.unbind);
37028 behavior.tail = function(_) {
37033 behavior.hover = function() {
37038 return utilRebind(behavior, dispatch$1, 'on');
37041 function behaviorBreathe() {
37042 var duration = 800;
37044 var selector = '.selected.shadow, .selected .shadow';
37045 var _selected = d3_select(null);
37052 function ratchetyInterpolator(a, b, steps, units) {
37055 var sample = quantize()
37057 .range(d3_quantize(d3_interpolateNumber(a, b), steps));
37059 return function(t) {
37060 return String(sample(t)) + (units || '');
37065 function reset(selection) {
37067 .style('stroke-opacity', null)
37068 .style('stroke-width', null)
37069 .style('fill-opacity', null)
37074 function setAnimationParams(transition, fromTo) {
37075 var toFrom = (fromTo === 'from' ? 'to' : 'from');
37078 .styleTween('stroke-opacity', function(d) {
37079 return ratchetyInterpolator(
37080 _params[d.id][toFrom].opacity,
37081 _params[d.id][fromTo].opacity,
37085 .styleTween('stroke-width', function(d) {
37086 return ratchetyInterpolator(
37087 _params[d.id][toFrom].width,
37088 _params[d.id][fromTo].width,
37093 .styleTween('fill-opacity', function(d) {
37094 return ratchetyInterpolator(
37095 _params[d.id][toFrom].opacity,
37096 _params[d.id][fromTo].opacity,
37100 .styleTween('r', function(d) {
37101 return ratchetyInterpolator(
37102 _params[d.id][toFrom].width,
37103 _params[d.id][fromTo].width,
37111 function calcAnimationParams(selection) {
37114 .each(function(d) {
37115 var s = d3_select(this);
37116 var tag = s.node().tagName;
37117 var p = {'from': {}, 'to': {}};
37121 // determine base opacity and width
37122 if (tag === 'circle') {
37123 opacity = parseFloat(s.style('fill-opacity') || 0.5);
37124 width = parseFloat(s.style('r') || 15.5);
37126 opacity = parseFloat(s.style('stroke-opacity') || 0.7);
37127 width = parseFloat(s.style('stroke-width') || 10);
37130 // calculate from/to interpolation params..
37132 p.from.opacity = opacity * 0.6;
37133 p.to.opacity = opacity * 1.25;
37134 p.from.width = width * 0.7;
37135 p.to.width = width * (tag === 'circle' ? 1.5 : 1);
37141 function run(surface, fromTo) {
37142 var toFrom = (fromTo === 'from' ? 'to' : 'from');
37143 var currSelected = surface.selectAll(selector);
37144 var currClassed = surface.attr('class');
37146 if (_done || currSelected.empty()) {
37147 _selected.call(reset);
37151 if (!fastDeepEqual(currSelected.data(), _selected.data()) || currClassed !== _classed) {
37152 _selected.call(reset);
37153 _classed = currClassed;
37154 _selected = currSelected.call(calcAnimationParams);
37159 .duration(duration)
37160 .call(setAnimationParams, fromTo)
37161 .on('end', function() {
37162 surface.call(run, toFrom);
37167 function behavior(surface) {
37169 _timer = timer(function() {
37170 // wait for elements to actually become selected
37171 if (surface.selectAll(selector).empty()) {
37175 surface.call(run, 'from');
37182 behavior.off = function() {
37196 // Translate a MacOS key command into the appropriate Windows/Linux equivalent.
37197 // For example, ⌘Z -> Ctrl+Z
37198 var uiCmd = function (code) {
37199 var detected = utilDetect();
37201 if (detected.os === 'mac') {
37205 if (detected.os === 'win') {
37206 if (code === '⌘⇧Z') return 'Ctrl+Y';
37218 for (var i = 0; i < code.length; i++) {
37219 if (code[i] in replacements) {
37220 result += replacements[code[i]] + (i < code.length - 1 ? '+' : '');
37230 // return a display-focused string for a given keyboard code
37231 uiCmd.display = function(code) {
37232 if (code.length !== 1) return code;
37234 var detected = utilDetect();
37235 var mac = (detected.os === 'mac');
37236 var replacements = {
37237 '⌘': mac ? '⌘ ' + t('shortcuts.key.cmd') : t('shortcuts.key.ctrl'),
37238 '⇧': mac ? '⇧ ' + t('shortcuts.key.shift') : t('shortcuts.key.shift'),
37239 '⌥': mac ? '⌥ ' + t('shortcuts.key.option') : t('shortcuts.key.alt'),
37240 '⌃': mac ? '⌃ ' + t('shortcuts.key.ctrl') : t('shortcuts.key.ctrl'),
37241 '⌫': mac ? '⌫ ' + t('shortcuts.key.delete') : t('shortcuts.key.backspace'),
37242 '⌦': mac ? '⌦ ' + t('shortcuts.key.del') : t('shortcuts.key.del'),
37243 '↖': mac ? '↖ ' + t('shortcuts.key.pgup') : t('shortcuts.key.pgup'),
37244 '↘': mac ? '↘ ' + t('shortcuts.key.pgdn') : t('shortcuts.key.pgdn'),
37245 '⇞': mac ? '⇞ ' + t('shortcuts.key.home') : t('shortcuts.key.home'),
37246 '⇟': mac ? '⇟ ' + t('shortcuts.key.end') : t('shortcuts.key.end'),
37247 '↵': mac ? '↵ ' + t('shortcuts.key.return') : t('shortcuts.key.enter'),
37248 '⎋': mac ? '⎋ ' + t('shortcuts.key.esc') : t('shortcuts.key.esc'),
37251 return replacements[code] || code;
37254 function behaviorCopy(context) {
37256 function groupEntities(ids, graph) {
37257 var entities = ids.map(function (id) { return graph.entity(id); });
37258 return Object.assign(
37259 { relation: [], way: [], node: [] },
37260 utilArrayGroupBy(entities, 'type')
37265 function getDescendants(id, graph, descendants) {
37266 var entity = graph.entity(id);
37269 descendants = descendants || {};
37271 if (entity.type === 'relation') {
37272 children = entity.members.map(function(m) { return m.id; });
37273 } else if (entity.type === 'way') {
37274 children = entity.nodes;
37279 for (var i = 0; i < children.length; i++) {
37280 if (!descendants[children[i]]) {
37281 descendants[children[i]] = true;
37282 descendants = getDescendants(children[i], graph, descendants);
37286 return descendants;
37290 function getSelectionText() {
37291 return window.getSelection().toString();
37295 function doCopy() {
37296 if (!getSelectionText()) {
37297 event.preventDefault();
37300 var graph = context.graph();
37301 var selected = groupEntities(context.selectedIDs(), graph);
37307 for (i = 0; i < selected.relation.length; i++) {
37308 entity = selected.relation[i];
37309 if (!skip[entity.id] && entity.isComplete(graph)) {
37310 canCopy.push(entity.id);
37311 skip = getDescendants(entity.id, graph, skip);
37314 for (i = 0; i < selected.way.length; i++) {
37315 entity = selected.way[i];
37316 if (!skip[entity.id]) {
37317 canCopy.push(entity.id);
37318 skip = getDescendants(entity.id, graph, skip);
37321 for (i = 0; i < selected.node.length; i++) {
37322 entity = selected.node[i];
37323 if (!skip[entity.id]) {
37324 canCopy.push(entity.id);
37328 context.copyIDs(canCopy);
37332 function behavior() {
37333 context.keybinding().on(uiCmd('⌘C'), doCopy);
37337 behavior.off = function() {
37338 context.keybinding().off(uiCmd('⌘C'));
37348 function uiFlash() {
37349 var _duration = 2000;
37350 var _iconName = '#iD-icon-no';
37351 var _iconClass = 'disabled';
37358 _flashTimer.stop();
37361 d3_select('#footer-wrap')
37362 .attr('class', 'footer-hide');
37363 d3_select('#flash-wrap')
37364 .attr('class', 'footer-show');
37366 var content = d3_select('#flash-wrap').selectAll('.flash-content')
37370 var contentEnter = content.enter()
37372 .attr('class', 'flash-content');
37374 var iconEnter = contentEnter
37376 .attr('class', 'flash-icon')
37378 .attr('transform', 'translate(10,10)');
37386 .attr('transform', 'translate(-7,-7)')
37387 .attr('width', '14')
37388 .attr('height', '14');
37392 .attr('class', 'flash-text');
37397 .merge(contentEnter);
37400 .selectAll('.flash-icon')
37401 .attr('class', 'flash-icon ' + (_iconClass || ''));
37404 .selectAll('.flash-icon use')
37405 .attr('xlink:href', _iconName);
37408 .selectAll('.flash-text')
37409 .attr('class', 'flash-text ' + (_textClass || ''))
37413 _flashTimer = d3_timeout(function() {
37414 _flashTimer = null;
37415 d3_select('#footer-wrap')
37416 .attr('class', 'footer-show');
37417 d3_select('#flash-wrap')
37418 .attr('class', 'footer-hide');
37425 flash.duration = function(_) {
37426 if (!arguments.length) return _duration;
37431 flash.text = function(_) {
37432 if (!arguments.length) return _text;
37437 flash.textClass = function(_) {
37438 if (!arguments.length) return _textClass;
37443 flash.iconName = function(_) {
37444 if (!arguments.length) return _iconName;
37449 flash.iconClass = function(_) {
37450 if (!arguments.length) return _iconClass;
37458 /* Creates a keybinding behavior for an operation */
37459 function behaviorOperation(context) {
37462 function keypress() {
37463 event.preventDefault();
37464 var disabled = _operation.disabled();
37470 .iconName('#iD-operation-' + _operation.id)
37471 .iconClass('operation disabled')
37472 .text(_operation.tooltip);
37479 .iconName('#iD-operation-' + _operation.id)
37480 .iconClass('operation')
37481 .text(_operation.annotation() || _operation.title);
37489 function behavior() {
37490 if (_operation && _operation.available()) {
37491 context.keybinding()
37492 .on(_operation.keys, keypress);
37499 behavior.off = function() {
37500 context.keybinding()
37501 .off(_operation.keys);
37505 behavior.which = function (_) {
37506 if (!arguments.length) return _operation;
37515 function operationCircularize(selectedIDs, context) {
37516 var entityID = selectedIDs[0];
37517 var entity = context.entity(entityID);
37518 var extent = entity.extent(context.graph());
37519 var geometry = context.geometry(entityID);
37520 var action = actionCircularize(entityID, context.projection);
37521 var nodes = utilGetAllNodes(selectedIDs, context.graph());
37522 var coords = nodes.map(function(n) { return n.loc; });
37524 var operation = function() {
37525 context.perform(action, operation.annotation());
37527 window.setTimeout(function() {
37528 context.validator().validate();
37529 }, 300); // after any transition
37533 operation.available = function() {
37534 return selectedIDs.length === 1 &&
37535 entity.type === 'way' &&
37536 new Set(entity.nodes).size > 1;
37540 // don't cache this because the visible extent could change
37541 operation.disabled = function() {
37542 var actionDisabled = action.disabled(context.graph());
37543 if (actionDisabled) {
37544 return actionDisabled;
37545 } else if (extent.percentContainedIn(context.extent()) < 0.8) {
37546 return 'too_large';
37547 } else if (someMissing()) {
37548 return 'not_downloaded';
37549 } else if (selectedIDs.some(context.hasHiddenConnections)) {
37550 return 'connected_to_hidden';
37556 function someMissing() {
37557 if (context.inIntro()) return false;
37558 var osm = context.connection();
37560 var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
37561 if (missing.length) {
37562 missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
37571 operation.tooltip = function() {
37572 var disable = operation.disabled();
37574 t('operations.circularize.' + disable) :
37575 t('operations.circularize.description.' + geometry);
37579 operation.annotation = function() {
37580 return t('operations.circularize.annotation.' + geometry);
37584 operation.id = 'circularize';
37585 operation.keys = [t('operations.circularize.key')];
37586 operation.title = t('operations.circularize.title');
37587 operation.behavior = behaviorOperation(context).which(operation);
37592 function operationDelete(selectedIDs, context) {
37593 var multi = (selectedIDs.length === 1 ? 'single' : 'multiple');
37594 var action = actionDeleteMultiple(selectedIDs);
37595 var nodes = utilGetAllNodes(selectedIDs, context.graph());
37596 var coords = nodes.map(function(n) { return n.loc; });
37597 var extent = nodes.reduce(function(extent, node) {
37598 return extent.extend(node.extent(context.graph()));
37602 var operation = function() {
37603 var nextSelectedID;
37604 var nextSelectedLoc;
37606 if (selectedIDs.length === 1) {
37607 var id = selectedIDs[0];
37608 var entity = context.entity(id);
37609 var geometry = context.geometry(id);
37610 var parents = context.graph().parentWays(entity);
37611 var parent = parents[0];
37613 // Select the next closest node in the way.
37614 if (geometry === 'vertex') {
37615 var nodes = parent.nodes;
37616 var i = nodes.indexOf(id);
37620 } else if (i === nodes.length - 1) {
37623 var a = geoSphericalDistance(entity.loc, context.entity(nodes[i - 1]).loc);
37624 var b = geoSphericalDistance(entity.loc, context.entity(nodes[i + 1]).loc);
37625 i = a < b ? i - 1 : i + 1;
37628 nextSelectedID = nodes[i];
37629 nextSelectedLoc = context.entity(nextSelectedID).loc;
37633 context.perform(action, operation.annotation());
37634 context.validator().validate();
37636 if (nextSelectedID && nextSelectedLoc) {
37637 if (context.hasEntity(nextSelectedID)) {
37638 context.enter(modeSelect(context, [nextSelectedID]).follow(true));
37640 context.map().centerEase(nextSelectedLoc);
37641 context.enter(modeBrowse(context));
37644 context.enter(modeBrowse(context));
37650 operation.available = function() {
37655 operation.disabled = function() {
37656 if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) {
37657 return 'too_large';
37658 } else if (someMissing()) {
37659 return 'not_downloaded';
37660 } else if (selectedIDs.some(context.hasHiddenConnections)) {
37661 return 'connected_to_hidden';
37662 } else if (selectedIDs.some(protectedMember)) {
37663 return 'part_of_relation';
37664 } else if (selectedIDs.some(incompleteRelation)) {
37665 return 'incomplete_relation';
37666 } else if (selectedIDs.some(hasWikidataTag)) {
37667 return 'has_wikidata_tag';
37673 function someMissing() {
37674 if (context.inIntro()) return false;
37675 var osm = context.connection();
37677 var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
37678 if (missing.length) {
37679 missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
37686 function hasWikidataTag(id) {
37687 var entity = context.entity(id);
37688 return entity.tags.wikidata && entity.tags.wikidata.trim().length > 0;
37691 function incompleteRelation(id) {
37692 var entity = context.entity(id);
37693 return entity.type === 'relation' && !entity.isComplete(context.graph());
37696 function protectedMember(id) {
37697 var entity = context.entity(id);
37698 if (entity.type !== 'way') return false;
37700 var parents = context.graph().parentRelations(entity);
37701 for (var i = 0; i < parents.length; i++) {
37702 var parent = parents[i];
37703 var type = parent.tags.type;
37704 var role = parent.memberById(id).role || 'outer';
37705 if (type === 'route' || type === 'boundary' || (type === 'multipolygon' && role === 'outer')) {
37714 operation.tooltip = function() {
37715 var disable = operation.disabled();
37717 t('operations.delete.' + disable + '.' + multi) :
37718 t('operations.delete.description' + '.' + multi);
37722 operation.annotation = function() {
37723 return selectedIDs.length === 1 ?
37724 t('operations.delete.annotation.' + context.geometry(selectedIDs[0])) :
37725 t('operations.delete.annotation.multiple', { n: selectedIDs.length });
37729 operation.id = 'delete';
37730 operation.keys = [uiCmd('⌘⌫'), uiCmd('⌘⌦'), uiCmd('⌦')];
37731 operation.title = t('operations.delete.title');
37732 operation.behavior = behaviorOperation(context).which(operation);
37737 function operationOrthogonalize(selectedIDs, context) {
37741 var action = chooseAction();
37742 var nodes = utilGetAllNodes(selectedIDs, context.graph());
37743 var coords = nodes.map(function(n) { return n.loc; });
37746 function chooseAction() {
37747 if (selectedIDs.length !== 1) return null;
37749 _entityID = selectedIDs[0];
37750 _entity = context.entity(_entityID);
37751 _geometry = context.geometry(_entityID);
37753 // square a line/area
37754 if (_entity.type === 'way' && new Set(_entity.nodes).size > 2 ) {
37755 return actionOrthogonalize(_entityID, context.projection);
37757 // square a single vertex
37758 } else if (_geometry === 'vertex') {
37759 var graph = context.graph();
37760 var parents = graph.parentWays(_entity);
37761 if (parents.length === 1) {
37762 var way = parents[0];
37763 if (way.nodes.indexOf(_entityID) !== -1) {
37764 return actionOrthogonalize(way.id, context.projection, _entityID);
37773 var operation = function() {
37774 if (!action) return;
37776 context.perform(action, operation.annotation());
37778 window.setTimeout(function() {
37779 context.validator().validate();
37780 }, 300); // after any transition
37784 operation.available = function() {
37785 return Boolean(action);
37789 // don't cache this because the visible extent could change
37790 operation.disabled = function() {
37791 if (!action) return '';
37793 var actionDisabled = action.disabled(context.graph());
37794 if (actionDisabled) {
37795 return actionDisabled;
37796 } else if (_geometry !== 'vertex' &&
37797 _entity.extent(context.graph()).percentContainedIn(context.extent()) < 0.8) {
37798 return 'too_large';
37799 } else if (someMissing()) {
37800 return 'not_downloaded';
37801 } else if (selectedIDs.some(context.hasHiddenConnections)) {
37802 return 'connected_to_hidden';
37808 function someMissing() {
37809 if (context.inIntro()) return false;
37810 var osm = context.connection();
37812 var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
37813 if (missing.length) {
37814 missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
37823 operation.tooltip = function() {
37824 var disable = operation.disabled();
37826 t('operations.orthogonalize.' + disable) :
37827 t('operations.orthogonalize.description.' + _geometry);
37831 operation.annotation = function() {
37832 return t('operations.orthogonalize.annotation.' + _geometry);
37836 operation.id = 'orthogonalize';
37837 operation.keys = [t('operations.orthogonalize.key')];
37838 operation.title = t('operations.orthogonalize.title');
37839 operation.behavior = behaviorOperation(context).which(operation);
37844 function operationReflectShort(selectedIDs, context) {
37845 return operationReflect(selectedIDs, context, 'short');
37849 function operationReflectLong(selectedIDs, context) {
37850 return operationReflect(selectedIDs, context, 'long');
37854 function operationReflect(selectedIDs, context, axis) {
37855 axis = axis || 'long';
37856 var multi = (selectedIDs.length === 1 ? 'single' : 'multiple');
37857 var nodes = utilGetAllNodes(selectedIDs, context.graph());
37858 var coords = nodes.map(function(n) { return n.loc; });
37859 var extent = nodes.reduce(function(extent, node) {
37860 return extent.extend(node.extent(context.graph()));
37864 var operation = function() {
37865 var action = actionReflect(selectedIDs, context.projection)
37866 .useLongAxis(Boolean(axis === 'long'));
37868 context.perform(action, operation.annotation());
37870 window.setTimeout(function() {
37871 context.validator().validate();
37872 }, 300); // after any transition
37876 operation.available = function() {
37877 return nodes.length >= 3;
37881 // don't cache this because the visible extent could change
37882 operation.disabled = function() {
37883 if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) {
37884 return 'too_large';
37885 } else if (someMissing()) {
37886 return 'not_downloaded';
37887 } else if (selectedIDs.some(context.hasHiddenConnections)) {
37888 return 'connected_to_hidden';
37889 } else if (selectedIDs.some(incompleteRelation)) {
37890 return 'incomplete_relation';
37896 function someMissing() {
37897 if (context.inIntro()) return false;
37898 var osm = context.connection();
37900 var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
37901 if (missing.length) {
37902 missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
37909 function incompleteRelation(id) {
37910 var entity = context.entity(id);
37911 return entity.type === 'relation' && !entity.isComplete(context.graph());
37916 operation.tooltip = function() {
37917 var disable = operation.disabled();
37919 t('operations.reflect.' + disable + '.' + multi) :
37920 t('operations.reflect.description.' + axis + '.' + multi);
37924 operation.annotation = function() {
37925 return t('operations.reflect.annotation.' + axis + '.' + multi);
37929 operation.id = 'reflect-' + axis;
37930 operation.keys = [t('operations.reflect.key.' + axis)];
37931 operation.title = t('operations.reflect.title.' + axis);
37932 operation.behavior = behaviorOperation(context).which(operation);
37937 function operationMove(selectedIDs, context) {
37938 var multi = (selectedIDs.length === 1 ? 'single' : 'multiple');
37939 var nodes = utilGetAllNodes(selectedIDs, context.graph());
37940 var coords = nodes.map(function(n) { return n.loc; });
37941 var extent = nodes.reduce(function(extent, node) {
37942 return extent.extend(node.extent(context.graph()));
37946 var operation = function() {
37947 context.enter(modeMove(context, selectedIDs));
37951 operation.available = function() {
37952 return selectedIDs.length > 1 ||
37953 context.entity(selectedIDs[0]).type !== 'node';
37957 operation.disabled = function() {
37958 if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) {
37959 return 'too_large';
37960 } else if (someMissing()) {
37961 return 'not_downloaded';
37962 } else if (selectedIDs.some(context.hasHiddenConnections)) {
37963 return 'connected_to_hidden';
37964 } else if (selectedIDs.some(incompleteRelation)) {
37965 return 'incomplete_relation';
37971 function someMissing() {
37972 if (context.inIntro()) return false;
37973 var osm = context.connection();
37975 var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
37976 if (missing.length) {
37977 missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
37984 function incompleteRelation(id) {
37985 var entity = context.entity(id);
37986 return entity.type === 'relation' && !entity.isComplete(context.graph());
37991 operation.tooltip = function() {
37992 var disable = operation.disabled();
37994 t('operations.move.' + disable + '.' + multi) :
37995 t('operations.move.description.' + multi);
37999 operation.annotation = function() {
38000 return selectedIDs.length === 1 ?
38001 t('operations.move.annotation.' + context.geometry(selectedIDs[0])) :
38002 t('operations.move.annotation.multiple');
38006 operation.id = 'move';
38007 operation.keys = [t('operations.move.key')];
38008 operation.title = t('operations.move.title');
38009 operation.behavior = behaviorOperation(context).which(operation);
38014 function modeRotate(context, entityIDs) {
38020 var keybinding = utilKeybinding('rotate');
38022 behaviorEdit(context),
38023 operationCircularize(entityIDs, context).behavior,
38024 operationDelete(entityIDs, context).behavior,
38025 operationMove(entityIDs, context).behavior,
38026 operationOrthogonalize(entityIDs, context).behavior,
38027 operationReflectLong(entityIDs, context).behavior,
38028 operationReflectShort(entityIDs, context).behavior
38030 var annotation = entityIDs.length === 1 ?
38031 t('operations.rotate.annotation.' + context.geometry(entityIDs[0])) :
38032 t('operations.rotate.annotation.multiple');
38036 var _prevTransform;
38040 function doRotate() {
38042 if (context.graph() !== _prevGraph) {
38043 fn = context.perform;
38045 fn = context.replace;
38048 // projection changed, recalculate _pivot
38049 var projection = context.projection;
38050 var currTransform = projection.transform();
38051 if (!_prevTransform ||
38052 currTransform.k !== _prevTransform.k ||
38053 currTransform.x !== _prevTransform.x ||
38054 currTransform.y !== _prevTransform.y) {
38056 var nodes = utilGetAllNodes(entityIDs, context.graph());
38057 var points = nodes.map(function(n) { return projection(n.loc); });
38059 if (points.length === 1) { // degenerate case
38060 _pivot = points[0];
38061 } else if (points.length === 2) {
38062 _pivot = geoVecInterp(points[0], points[1], 0.5);
38064 _pivot = d3_polygonCentroid(d3_polygonHull(points));
38066 _prevAngle = undefined;
38070 var currMouse = context.mouse();
38071 var currAngle = Math.atan2(currMouse[1] - _pivot[1], currMouse[0] - _pivot[0]);
38073 if (typeof _prevAngle === 'undefined') _prevAngle = currAngle;
38074 var delta = currAngle - _prevAngle;
38076 fn(actionRotate(entityIDs, _pivot, delta, projection));
38078 _prevTransform = currTransform;
38079 _prevAngle = currAngle;
38080 _prevGraph = context.graph();
38084 function finish() {
38085 event.stopPropagation();
38086 context.replace(actionNoop(), annotation);
38087 context.enter(modeSelect(context, entityIDs));
38091 function cancel() {
38093 context.enter(modeSelect(context, entityIDs));
38097 function undone() {
38098 context.enter(modeBrowse(context));
38102 mode.enter = function() {
38103 context.features().forceVisible(entityIDs);
38105 behaviors.forEach(context.install);
38108 .on('mousemove.rotate', doRotate)
38109 .on('click.rotate', finish);
38112 .on('undone.rotate', undone);
38118 d3_select(document)
38123 mode.exit = function() {
38124 behaviors.forEach(context.uninstall);
38127 .on('mousemove.rotate', null)
38128 .on('click.rotate', null);
38131 .on('undone.rotate', null);
38133 d3_select(document)
38134 .call(keybinding.unbind);
38136 context.features().forceVisible([]);
38140 mode.selectedIDs = function() {
38141 if (!arguments.length) return entityIDs;
38150 function operationRotate(selectedIDs, context) {
38151 var multi = (selectedIDs.length === 1 ? 'single' : 'multiple');
38152 var nodes = utilGetAllNodes(selectedIDs, context.graph());
38153 var coords = nodes.map(function(n) { return n.loc; });
38154 var extent = nodes.reduce(function(extent, node) {
38155 return extent.extend(node.extent(context.graph()));
38159 var operation = function() {
38160 context.enter(modeRotate(context, selectedIDs));
38164 operation.available = function() {
38165 return nodes.length >= 2;
38169 operation.disabled = function() {
38171 if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) {
38172 return 'too_large';
38173 } else if (someMissing()) {
38174 return 'not_downloaded';
38175 } else if (selectedIDs.some(context.hasHiddenConnections)) {
38176 return 'connected_to_hidden';
38177 } else if (selectedIDs.some(incompleteRelation)) {
38178 return 'incomplete_relation';
38184 function someMissing() {
38185 if (context.inIntro()) return false;
38186 var osm = context.connection();
38188 var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
38189 if (missing.length) {
38190 missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
38197 function incompleteRelation(id) {
38198 var entity = context.entity(id);
38199 return entity.type === 'relation' && !entity.isComplete(context.graph());
38204 operation.tooltip = function() {
38205 var disable = operation.disabled();
38207 t('operations.rotate.' + disable + '.' + multi) :
38208 t('operations.rotate.description.' + multi);
38212 operation.annotation = function() {
38213 return selectedIDs.length === 1 ?
38214 t('operations.rotate.annotation.' + context.geometry(selectedIDs[0])) :
38215 t('operations.rotate.annotation.multiple');
38219 operation.id = 'rotate';
38220 operation.keys = [t('operations.rotate.key')];
38221 operation.title = t('operations.rotate.title');
38222 operation.behavior = behaviorOperation(context).which(operation);
38227 function modeMove(context, entityIDs, baseGraph) {
38233 var keybinding = utilKeybinding('move');
38235 behaviorEdit(context),
38236 operationCircularize(entityIDs, context).behavior,
38237 operationDelete(entityIDs, context).behavior,
38238 operationOrthogonalize(entityIDs, context).behavior,
38239 operationReflectLong(entityIDs, context).behavior,
38240 operationReflectShort(entityIDs, context).behavior,
38241 operationRotate(entityIDs, context).behavior
38243 var annotation = entityIDs.length === 1 ?
38244 t('operations.move.annotation.' + context.geometry(entityIDs[0])) :
38245 t('operations.move.annotation.multiple');
38250 var _nudgeInterval;
38253 function doMove(nudge) {
38254 nudge = nudge || [0, 0];
38257 if (_prevGraph !== context.graph()) {
38259 _origin = context.map().mouseCoordinates();
38260 fn = context.perform;
38262 fn = context.overwrite;
38265 var currMouse = context.mouse();
38266 var origMouse = context.projection(_origin);
38267 var delta = geoVecSubtract(geoVecSubtract(currMouse, origMouse), nudge);
38269 fn(actionMove(entityIDs, delta, context.projection, _cache));
38270 _prevGraph = context.graph();
38274 function startNudge(nudge) {
38275 if (_nudgeInterval) window.clearInterval(_nudgeInterval);
38276 _nudgeInterval = window.setInterval(function() {
38277 context.pan(nudge);
38283 function stopNudge() {
38284 if (_nudgeInterval) {
38285 window.clearInterval(_nudgeInterval);
38286 _nudgeInterval = null;
38293 var nudge = geoViewportEdge(context.mouse(), context.map().dimensions());
38302 function finish() {
38303 event.stopPropagation();
38304 context.replace(actionNoop(), annotation);
38305 context.enter(modeSelect(context, entityIDs));
38310 function cancel() {
38312 while (context.graph() !== baseGraph) context.pop();
38313 context.enter(modeBrowse(context));
38316 context.enter(modeSelect(context, entityIDs));
38322 function undone() {
38323 context.enter(modeBrowse(context));
38327 mode.enter = function() {
38328 _origin = context.map().mouseCoordinates();
38332 context.features().forceVisible(entityIDs);
38334 behaviors.forEach(context.install);
38337 .on('mousemove.move', move)
38338 .on('click.move', finish);
38341 .on('undone.move', undone);
38347 d3_select(document)
38352 mode.exit = function() {
38355 behaviors.forEach(function(behavior) {
38356 context.uninstall(behavior);
38360 .on('mousemove.move', null)
38361 .on('click.move', null);
38364 .on('undone.move', null);
38366 d3_select(document)
38367 .call(keybinding.unbind);
38369 context.features().forceVisible([]);
38373 mode.selectedIDs = function() {
38374 if (!arguments.length) return entityIDs;
38383 function behaviorPaste(context) {
38385 function doPaste() {
38386 event.preventDefault();
38388 var baseGraph = context.graph();
38389 var mouse = context.mouse();
38390 var projection = context.projection;
38391 var viewport = geoExtent(projection.clipExtent()).polygon();
38393 if (!geoPointInPolygon(mouse, viewport)) return;
38395 var extent = geoExtent();
38396 var oldIDs = context.copyIDs();
38397 var oldGraph = context.copyGraph();
38400 if (!oldIDs.length) return;
38402 var action = actionCopyEntities(oldIDs, oldGraph);
38403 context.perform(action);
38405 var copies = action.copies();
38406 var originals = new Set();
38407 Object.values(copies).forEach(function(entity) { originals.add(entity.id); });
38409 for (var id in copies) {
38410 var oldEntity = oldGraph.entity(id);
38411 var newEntity = copies[id];
38413 extent._extend(oldEntity.extent(oldGraph));
38415 // Exclude child nodes from newIDs if their parent way was also copied.
38416 var parents = context.graph().parentWays(newEntity);
38417 var parentCopied = parents.some(function(parent) {
38418 return originals.has(parent.id);
38421 if (!parentCopied) {
38422 newIDs.push(newEntity.id);
38426 // Put pasted objects where mouse pointer is..
38427 var center = projection(extent.center());
38428 var delta = geoVecSubtract(mouse, center);
38430 context.perform(actionMove(newIDs, delta, projection));
38431 context.enter(modeMove(context, newIDs, baseGraph));
38435 function behavior() {
38436 context.keybinding().on(uiCmd('⌘V'), doPaste);
38441 behavior.off = function() {
38442 context.keybinding().off(uiCmd('⌘V'));
38450 `behaviorDrag` is like `d3_behavior.drag`, with the following differences:
38452 * The `origin` function is expected to return an [x, y] tuple rather than an
38454 * The events are `start`, `move`, and `end`.
38455 (https://github.com/mbostock/d3/issues/563)
38456 * The `start` event is not dispatched until the first cursor movement occurs.
38457 (https://github.com/mbostock/d3/pull/368)
38458 * The `move` event has a `point` and `delta` [x, y] tuple properties rather
38459 than `x`, `y`, `dx`, and `dy` properties.
38460 * The `end` event is not dispatched if no movement occurs.
38461 * An `off` function is available that unbinds the drag's internal event handlers.
38464 function behaviorDrag() {
38465 var dispatch$1 = dispatch('start', 'move', 'end');
38466 var _origin = null;
38467 var _selector = '';
38473 var d3_event_userSelectProperty = utilPrefixCSSProperty('UserSelect');
38474 var d3_event_userSelectSuppress = function() {
38475 var selection$1 = selection();
38476 var select = selection$1.style(d3_event_userSelectProperty);
38477 selection$1.style(d3_event_userSelectProperty, 'none');
38478 return function() {
38479 selection$1.style(d3_event_userSelectProperty, select);
38484 function d3_eventCancel() {
38485 event.stopPropagation();
38486 event.preventDefault();
38490 function eventOf(thiz, argumentz) {
38491 return function(e1) {
38492 e1.target = behavior;
38493 customEvent(e1, dispatch$1.apply, dispatch$1, [e1.type, thiz, argumentz]);
38498 function dragstart() {
38500 _event = eventOf(_target, arguments);
38502 var eventTarget = event.target;
38503 var touchId = event.touches ? event.changedTouches[0].identifier : null;
38505 var startOrigin = point();
38506 var started = false;
38507 var selectEnable = d3_event_userSelectSuppress(touchId !== null ? 'drag-' + touchId : 'drag');
38510 .on(touchId !== null ? 'touchmove.drag-' + touchId : 'mousemove.drag', dragmove)
38511 .on(touchId !== null ? 'touchend.drag-' + touchId : 'mouseup.drag', dragend, true);
38514 offset = _origin.apply(_target, arguments);
38515 offset = [offset[0] - startOrigin[0], offset[1] - startOrigin[1]];
38520 if (touchId === null) {
38521 event.stopPropagation();
38526 var p = _surface || _target.parentNode;
38527 return touchId !== null ? d3_touches(p).filter(function(p) {
38528 return p.identifier === touchId;
38529 })[0] : d3_mouse(p);
38533 function dragmove() {
38535 var dx = p[0] - startOrigin[0];
38536 var dy = p[1] - startOrigin[1];
38538 if (dx === 0 && dy === 0)
38546 _event({ type: 'start' });
38550 point: [p[0] + offset[0], p[1] + offset[1]],
38557 function dragend() {
38559 _event({ type: 'end' });
38562 if (event.target === eventTarget) {
38564 .on('click.drag', click, true);
38569 .on(touchId !== null ? 'touchmove.drag-' + touchId : 'mousemove.drag', null)
38570 .on(touchId !== null ? 'touchend.drag-' + touchId : 'mouseup.drag', null);
38579 .on('click.drag', null);
38584 function behavior(selection) {
38585 var matchesSelector = utilPrefixDOMProperty('matchesSelector');
38586 var delegate = dragstart;
38589 delegate = function() {
38591 var target = event.target;
38592 for (; target && target !== root; target = target.parentNode) {
38593 var datum = target.__data__;
38595 var entity = datum instanceof osmNote ? datum
38596 : datum && datum.properties && datum.properties.entity;
38598 if (entity && target[matchesSelector](_selector)) {
38599 return dragstart.call(target, entity);
38606 .on('mousedown.drag' + _selector, delegate)
38607 .on('touchstart.drag' + _selector, delegate);
38611 behavior.off = function(selection) {
38613 .on('mousedown.drag' + _selector, null)
38614 .on('touchstart.drag' + _selector, null);
38618 behavior.selector = function(_) {
38619 if (!arguments.length) return _selector;
38625 behavior.origin = function(_) {
38626 if (!arguments.length) return _origin;
38632 behavior.cancel = function() {
38634 .on('mousemove.drag', null)
38635 .on('mouseup.drag', null);
38640 behavior.target = function() {
38641 if (!arguments.length) return _target;
38642 _target = arguments[0];
38643 _event = eventOf(_target, Array.prototype.slice.call(arguments, 1));
38648 behavior.surface = function() {
38649 if (!arguments.length) return _surface;
38650 _surface = arguments[0];
38655 return utilRebind(behavior, dispatch$1, 'on');
38658 function modeDragNode(context) {
38663 var hover = behaviorHover(context).altDisables(true)
38664 .on('hover', context.ui().sidebar.hover);
38665 var edit = behaviorEdit(context);
38667 var _nudgeInterval;
38668 var _restoreSelectedIDs = [];
38669 var _wasMidpoint = false;
38670 var _isCancelled = false;
38676 function startNudge(entity, nudge) {
38677 if (_nudgeInterval) window.clearInterval(_nudgeInterval);
38678 _nudgeInterval = window.setInterval(function() {
38679 context.pan(nudge);
38680 doMove(entity, nudge);
38685 function stopNudge() {
38686 if (_nudgeInterval) {
38687 window.clearInterval(_nudgeInterval);
38688 _nudgeInterval = null;
38693 function moveAnnotation(entity) {
38694 return t('operations.move.annotation.' + entity.geometry(context.graph()));
38698 function connectAnnotation(nodeEntity, targetEntity) {
38699 var nodeGeometry = nodeEntity.geometry(context.graph());
38700 var targetGeometry = targetEntity.geometry(context.graph());
38701 if (nodeGeometry === 'vertex' && targetGeometry === 'vertex') {
38702 var nodeParentWayIDs = context.graph().parentWays(nodeEntity);
38703 var targetParentWayIDs = context.graph().parentWays(targetEntity);
38704 var sharedParentWays = utilArrayIntersection(nodeParentWayIDs, targetParentWayIDs);
38705 // if both vertices are part of the same way
38706 if (sharedParentWays.length !== 0) {
38707 // if the nodes are next to each other, they are merged
38708 if (sharedParentWays[0].areAdjacent(nodeEntity.id, targetEntity.id)) {
38709 return t('operations.connect.annotation.from_vertex.to_adjacent_vertex');
38711 return t('operations.connect.annotation.from_vertex.to_sibling_vertex');
38714 return t('operations.connect.annotation.from_' + nodeGeometry + '.to_' + targetGeometry);
38718 function shouldSnapToNode(target) {
38719 if (!_activeEntity) return false;
38720 return _activeEntity.geometry(context.graph()) !== 'vertex' ||
38721 (target.geometry(context.graph()) === 'vertex' || context.presets().allowsVertex(target, context.graph()));
38725 function origin(entity) {
38726 return context.projection(entity.loc);
38730 function keydown() {
38731 if (event.keyCode === utilKeybinding.modifierCodes.alt) {
38732 if (context.surface().classed('nope')) {
38734 .classed('nope-suppressed', true);
38737 .classed('nope', false)
38738 .classed('nope-disabled', true);
38744 if (event.keyCode === utilKeybinding.modifierCodes.alt) {
38745 if (context.surface().classed('nope-suppressed')) {
38747 .classed('nope', true);
38750 .classed('nope-suppressed', false)
38751 .classed('nope-disabled', false);
38756 function start(entity) {
38757 _wasMidpoint = entity.type === 'midpoint';
38758 var hasHidden = context.features().hasHiddenConnections(entity, context.graph());
38759 _isCancelled = event.sourceEvent.shiftKey || hasHidden;
38762 if (_isCancelled) {
38766 .text(t('modes.drag_node.connected_to_hidden'))();
38768 return drag.cancel();
38771 if (_wasMidpoint) {
38772 var midpoint = entity;
38773 entity = osmNode();
38774 context.perform(actionAddMidpoint(midpoint, entity));
38775 entity = context.entity(entity.id); // get post-action entity
38777 var vertex = context.surface().selectAll('.' + entity.id);
38778 drag.target(vertex.node(), entity);
38781 context.perform(actionNoop());
38784 _activeEntity = entity;
38785 _startLoc = entity.loc;
38787 hover.ignoreVertex(entity.geometry(context.graph()) === 'vertex');
38789 context.surface().selectAll('.' + _activeEntity.id)
38790 .classed('active', true);
38792 context.enter(mode);
38797 // - `behavior/draw.js` `datum()`
38799 var event$1 = event && event.sourceEvent;
38800 if (!event$1 || event$1.altKey) {
38803 // When dragging, snap only to touch targets..
38804 // (this excludes area fills and active drawing elements)
38805 var d = event$1.target.__data__;
38806 return (d && d.properties && d.properties.target) ? d : {};
38811 function doMove(entity, nudge) {
38812 nudge = nudge || [0, 0];
38814 var currPoint = (event && event.point) || context.projection(_lastLoc);
38815 var currMouse = geoVecSubtract(currPoint, nudge);
38816 var loc = context.projection.invert(currMouse);
38818 if (!_nudgeInterval) { // If not nudging at the edge of the viewport, try to snap..
38820 // - `mode/drag_node.js` `doMode()`
38821 // - `behavior/draw.js` `click()`
38822 // - `behavior/draw_way.js` `move()`
38824 var target = d && d.properties && d.properties.entity;
38825 var targetLoc = target && target.loc;
38826 var targetNodes = d && d.properties && d.properties.nodes;
38829 if (targetLoc) { // snap to node/vertex - a point target with `.loc`
38830 if (shouldSnapToNode(target)) {
38834 } else if (targetNodes) { // snap to way - a line target with `.nodes`
38835 edge = geoChooseEdge(targetNodes, context.mouse(), context.projection, end.id);
38843 actionMoveNode(entity.id, loc)
38846 // Below here: validations
38847 var isInvalid = false;
38849 // Check if this connection to `target` could cause relations to break..
38851 isInvalid = hasRelationConflict(entity, target, edge, context.graph());
38854 // Check if this drag causes the geometry to break..
38856 isInvalid = hasInvalidGeometry(entity, context.graph());
38860 var nope = context.surface().classed('nope');
38861 if (isInvalid === 'relation' || isInvalid === 'restriction') {
38862 if (!nope) { // about to nope - show hint
38865 .text(t('operations.connect.' + isInvalid,
38866 { relation: context.presets().item('type/restriction').name() }
38870 if (nope) { // about to un-nope, remove hint
38878 var nopeDisabled = context.surface().classed('nope-disabled');
38879 if (nopeDisabled) {
38881 .classed('nope', false)
38882 .classed('nope-suppressed', isInvalid);
38885 .classed('nope', isInvalid)
38886 .classed('nope-suppressed', false);
38893 // Uses `actionConnect.disabled()` to know whether this connection is ok..
38894 function hasRelationConflict(entity, target, edge, graph) {
38895 var testGraph = graph.update(); // copy
38897 // if snapping to way - add midpoint there and consider that the target..
38899 var midpoint = osmNode();
38900 var action = actionAddMidpoint({
38902 edge: [target.nodes[edge.index - 1], target.nodes[edge.index]]
38905 testGraph = action(testGraph);
38909 // can we connect to it?
38910 var ids = [entity.id, target.id];
38911 return actionConnect(ids).disabled(testGraph);
38915 function hasInvalidGeometry(entity, graph) {
38916 var parents = graph.parentWays(entity);
38919 for (i = 0; i < parents.length; i++) {
38920 var parent = parents[i];
38922 var activeIndex = null; // which multipolygon ring contains node being dragged
38924 // test any parent multipolygons for valid geometry
38925 var relations = graph.parentRelations(parent);
38926 for (j = 0; j < relations.length; j++) {
38927 if (!relations[j].isMultipolygon()) continue;
38929 var rings = osmJoinWays(relations[j].members, graph);
38931 // find active ring and test it for self intersections
38932 for (k = 0; k < rings.length; k++) {
38933 nodes = rings[k].nodes;
38934 if (nodes.find(function(n) { return n.id === entity.id; })) {
38936 if (geoHasSelfIntersections(nodes, entity.id)) {
38940 rings[k].coords = nodes.map(function(n) { return n.loc; });
38943 // test active ring for intersections with other rings in the multipolygon
38944 for (k = 0; k < rings.length; k++) {
38945 if (k === activeIndex) continue;
38947 // make sure active ring doesnt cross passive rings
38948 if (geoHasLineIntersections(rings[activeIndex].nodes, rings[k].nodes, entity.id)) {
38955 // If we still haven't tested this node's parent way for self-intersections.
38956 // (because it's not a member of a multipolygon), test it now.
38957 if (activeIndex === null) {
38958 nodes = parent.nodes.map(function(nodeID) { return graph.entity(nodeID); });
38959 if (nodes.length && geoHasSelfIntersections(nodes, entity.id)) {
38970 function move(entity) {
38971 if (_isCancelled) return;
38972 event.sourceEvent.stopPropagation();
38974 context.surface().classed('nope-disabled', event.sourceEvent.altKey);
38976 _lastLoc = context.projection.invert(event.point);
38979 var nudge = geoViewportEdge(event.point, context.map().dimensions());
38981 startNudge(entity, nudge);
38987 function end(entity) {
38988 if (_isCancelled) return;
38991 var nope = (d && d.properties && d.properties.nope) || context.surface().classed('nope');
38992 var target = d && d.properties && d.properties.entity; // entity to snap to
38994 if (nope) { // bounce back
38996 _actionBounceBack(entity.id, _startLoc)
38999 } else if (target && target.type === 'way') {
39000 var choice = geoChooseEdge(context.childNodes(target), context.mouse(), context.projection, entity.id);
39002 actionAddMidpoint({
39004 edge: [target.nodes[choice.index - 1], target.nodes[choice.index]]
39006 connectAnnotation(entity, target)
39009 } else if (target && target.type === 'node' && shouldSnapToNode(target)) {
39011 actionConnect([target.id, entity.id]),
39012 connectAnnotation(entity, target)
39015 } else if (_wasMidpoint) {
39018 t('operations.add.annotation.vertex')
39024 moveAnnotation(entity)
39028 var reselection = _restoreSelectedIDs.filter(function(id) {
39029 return context.graph().hasEntity(id);
39032 if (reselection.length) {
39033 context.enter(modeSelect(context, reselection));
39035 context.enter(modeBrowse(context));
39040 function _actionBounceBack(nodeID, toLoc) {
39041 var moveNode = actionMoveNode(nodeID, toLoc);
39042 var action = function(graph, t) {
39043 // last time through, pop off the bounceback perform.
39044 // it will then overwrite the initial perform with a moveNode that does nothing
39045 if (t === 1) context.pop();
39046 return moveNode(graph, t);
39048 action.transitionable = true;
39053 function cancel() {
39055 context.enter(modeBrowse(context));
39059 var drag = behaviorDrag()
39060 .selector('.layer-touch.points .target')
39061 .surface(d3_select('#map').node())
39063 .on('start', start)
39068 mode.enter = function() {
39069 context.install(hover);
39070 context.install(edit);
39073 .on('keydown.drawWay', keydown)
39074 .on('keyup.drawWay', keyup);
39077 .on('undone.drag-node', cancel);
39081 mode.exit = function() {
39082 context.ui().sidebar.hover.cancel();
39083 context.uninstall(hover);
39084 context.uninstall(edit);
39087 .on('keydown.hover', null)
39088 .on('keyup.hover', null);
39091 .on('undone.drag-node', null);
39093 _activeEntity = null;
39096 .classed('nope', false)
39097 .classed('nope-suppressed', false)
39098 .classed('nope-disabled', false)
39099 .selectAll('.active')
39100 .classed('active', false);
39106 mode.selectedIDs = function() {
39107 if (!arguments.length) return _activeEntity ? [_activeEntity.id] : [];
39113 mode.activeID = function() {
39114 if (!arguments.length) return _activeEntity && _activeEntity.id;
39120 mode.restoreSelectedIDs = function(_) {
39121 if (!arguments.length) return _restoreSelectedIDs;
39122 _restoreSelectedIDs = _;
39127 mode.behavior = drag;
39133 var localizeStrings = {"this node":"this_node","this way":"this_way","this relation":"this_relation","this one-way":"this_oneway","this highway":"this_highway","this railway":"this_railway","this waterway":"this_waterway","this cycleway":"this_cycleway","this footpath":"this_footpath","this cycleway/footpath":"this_cycleway_footpath","this riverbank":"this_riverbank","this crossing":"this_crossing","this railway crossing":"this_railway_crossing","this bridge":"this_bridge","this tunnel":"this_tunnel","this boundary":"this_boundary","this turn-restriction":"this_turn_restriction","this roundabout":"this_roundabout","this mini-roundabout":"this_mini_roundabout","this track":"this_track","this feature":"this_feature",highway:"highway",railway:"railway",waterway:"waterway",cycleway:"cycleway",cycleway_footpath:"cycleway/footpath",riverbank:"riverbank",place_of_worship:"place_of_worship",pub:"pub",restaurant:"restaurant",school:"school",university:"university",hospital:"hospital",library:"library",theatre:"theatre",courthouse:"courthouse",bank:"bank",cinema:"cinema",pharmacy:"pharmacy",cafe:"cafe",fast_food:"fast_food",fuel:"fuel",from:"from",to:"to","left-hand":"left_hand","right-hand":"right_hand"};
39134 var errorTypes = {"20":{title:"multiple nodes on the same spot",severity:"warning",description:"There is more than one node in this spot. Offending node IDs: $1",IDs:["20"],regex:"IDs: ((?:#\\d+,?)+)"},"30":{title:"non-closed_areas",severity:"error",description:"This way is tagged with '$1' and should be closed-loop.",IDs:["this",""],regex:"(this way) is tagged with '(.+)'"},"40":{title:"dead-ended one-ways",severity:"error",description:"The first node (id $1) of this one-way is not connected to any other way",IDs:["n","this"],regex:"\\(id (\\d+)\\) of (this one-way)"},"41":{title:"",severity:"error",description:"The last node (id $1) of this one-way is not connected to any other way",IDs:["n","this"],regex:"\\(id (\\d+)\\) of (this one-way)"},"42":{title:"",severity:"error",description:"This node cannot be reached because one-ways only lead away from here",IDs:["this"],regex:"(this node)"},"43":{title:"",severity:"error",description:"You cannot escape from this node because one-ways only lead to here",IDs:["this"],regex:"(this node)"},"50":{title:"almost-junctions",severity:"error",description:"This node is very close but not connected to way #$1",IDs:["this","w"],regex:"(this node) is very close but not connected to way #(\\d+)"},"60":{title:"deprecated tags",severity:"warning",description:"This $1 uses deprecated tag $2. Please use $3 instead!",IDs:["this","",""],regex:"(this (?:node|way|relation)) uses deprecated tag '(.+)'\\. Please use "(.+)""},"70":{title:"missing tags",severity:"error",description:"This $1 has an empty tag: $2",IDs:["this",""],regex:"(this (?:node|way|relation)) has an empty tag: "(.+)=""},"71":{title:"",severity:"error",description:"This way has no tags",IDs:["this"],regex:"(this way)"},"72":{title:"",severity:"error",description:"This node is not member of any way and does not have any tags",IDs:["this"],regex:"(this node)"},"73":{title:"",severity:"error",description:"This way has a $1 tag but no highway tag",IDs:["this",""],regex:"(this way) has a (.+) tag"},"74":{title:"missing tags",severity:"error",description:"This $1 has an empty tag: $2",IDs:["this",""],regex:"(this (?:node|way|relation)) has an empty tag: "(.+)=""},"75":{description:"This (node|way|relation) has a name \\((.+)\\) but no other tag",IDs:["this",""],regex:"(this (?:node|way|relation)) has a name \\((.+)\\)"},"90":{title:"motorways without ref",severity:"error",description:"This way is tagged as motorway and therefore needs a ref nat_ref or int_ref tag",IDs:["this"],regex:"(this way)"},"100":{title:"places of worship without religion",severity:"error",description:"This $1 is tagged as place of worship and therefore needs a religion tag",IDs:["this"],regex:"(this (?:node|way|relation))"},"110":{title:"point of interest without name",severity:"error",description:"This node is tagged as $1 and therefore needs a name tag",IDs:["this",""],regex:"(this (?:node|way|relation)) is tagged as (.+) and"},"120":{title:"ways without nodes",severity:"error",description:"This way has just one single node",IDs:["this"],regex:"(this way)"},"130":{title:"floating islands",severity:"error",description:"This way is not connected to the rest of the map",IDs:["this"],regex:"(this way)"},"150":{title:"railway crossing without tag",severity:"error",description:"This crossing of a highway and a railway needs to be tagged as railway=crossing or railway=level_crossing",IDs:["this"],regex:"(this crossing)"},"160":{title:"wrongly used railway tag",severity:"error",description:"There are ways in different layers coming together in this railway crossing. There are ways tagged as tunnel or bridge coming together in this railway crossing",IDs:["this"],regex:"(this railway crossing)"},"170":{title:"FIXME tagged items",severity:"error",description:"This feature has a FIXME tag: (.*)",IDs:["this"],regex:"(this feature) has a FIXME tag: (.*)"},"180":{title:"relations without type",severity:"error",description:"This relation has no type tag which is mandatory for relations",IDs:["this"],regex:"(this relation)"},"190":{title:"intersections without junctions",severity:"error",description:"This $1 intersects the $2 #$3 but there is no junction node",IDs:["this","","w"],regex:"(this .+) intersects the (.+) #(\\d+)"},"200":{title:"overlapping ways",severity:"error",description:"This $1 overlaps the $2 #$3",IDs:["this","","w"],regex:"(this .+) overlaps the (.+) #(\\d+)"},"210":{title:"loopings",severity:"error",description:"These errors contain self intersecting ways"},"211":{title:"",severity:"error",description:"This way contains more than one node at least twice. Nodes are $1.",IDs:["this","211"],regex:"(this way) contains more than one node at least twice. Nodes are ((?:#\\d+(?:, )?)+)\\."},"212":{title:"",severity:"error",description:"This way has only two different nodes and contains one of them more than once",IDs:["this"],regex:"(this way)"},"220":{title:"misspelled tags",severity:"error",description:"This $1 is tagged '$2' where $3 looks like $4",regex:"(this (?:node|way|relation)) is tagged '(.+)' where "(.+)" looks like "(.+)""},"221":{title:"",severity:"error",description:"The key of this $1's tag is 'key': $2",regex:"(this (?:node|way|relation))\\'s tag is \\'key\\': (.+)"},"230":{title:"layer conflicts",severity:"error",description:"This node is a junction of ways on different layers.",IDs:["this"],regex:"(this node)"},"231":{title:"mixed layers intersection",severity:"error",description:"This node is a junction of ways on different layers: $1",IDs:["this","231"],regex:"(this node) is a junction of ways on different layers: (.+)"},"232":{title:"strange layers",severity:"error",description:"This $1 is tagged with layer $2. This need not be an error, but it looks strange",IDs:["this",""],regex:"(this (?:bridge|tunnel)) is tagged with layer (-?\\d+)\\."},"270":{title:"motorways connected directly",severity:"error",description:"This node is a junction of a motorway and a highway other than motorway, motorway_link, trunk, rest_area or construction. Service or unclassified is only valid if it has access=no/private or it leads to a motorway service area or if it is a service=parking_aisle.",IDs:["this"],regex:"(this node)"},"280":{title:"boundaries",severity:"error",description:"Administrative Boundaries can be expressed either by tagging ways or by adding them to a relation. They should be closed-loop sequences of ways, they must not self-intersect or split and they must have a name and an admin_level."},"281":{title:"missing name",severity:"error",description:"This boundary has no name",IDs:["this"],regex:"(this boundary)"},"282":{title:"missing admin level",severity:"error",description:"The boundary of $1 has no (?:valid numeric)?admin_level",regex:"of (.+) has"},"283":{title:"no closed loop",severity:"error",description:"The boundary of $1 is not closed-loop",regex:"boundary of (.+) is"},"284":{title:"splitting boundary",severity:"error",description:"The boundary of $1 splits here",regex:"boundary of (.+) splits"},"285":{title:"admin_level too high",severity:"error",description:"This boundary-way has admin_level $1 but belongs to a relation with lower admin_level (higher priority); it should have the lowest admin_level of all relations",IDs:["this",""],regex:"(this boundary)-way has admin_level (-?\\d+) but"},"290":{title:"restrictions",severity:"error",description:"Analyses all relations tagged type=restriction or following variations type=restriction:hgv type=restriction:caravan type=restriction:motorcar type=restriction:bus type=restriction:agricultural type=restriction:motorcycle type=restriction:bicycle and type=restriction:hazmat"},"291":{title:"missing type",severity:"error",description:"This turn-restriction has no (?:known )?restriction type",IDs:["this"],regex:"(this turn-restriction) has"},"292":{title:"missing from way",severity:"error",description:"This turn-restriction needs exactly one from member. This one has $1",IDs:["this",""],regex:"(this turn-restriction) needs.+has (\\d+)"},"293":{title:"missing to way",severity:"error",description:"This turn-restriction needs exactly one to member. This one has $1",IDs:["this",""],regex:"(this turn-restriction) needs.+has (\\d+)"},"294":{title:"from or to not a way",severity:"error",description:"From- and To-members of this turn-restriction need to be ways. $1",IDs:["this","294"],regex:"(this turn-restriction)~.+ways\\. ((?:(?:from|to) (?:node|relation) #\\d+,?)+)"},"295":{title:"via is not on the way ends",severity:"error",description:"via (node #$1) is not the first or the last member of (from|to) (way #$3)",IDs:["this","n","","w"],regex:"(this turn-restriction)~via \\(node #(\\d+)\\).+ of (from|to) \\(way #(\\d+)\\)"},"296":{title:"wrong restriction angle",severity:"error",description:"This turn-restriction type is $1, but angle is $2 degrees. Maybe the restriction type is not appropriate?",IDs:["this","",""],regex:"(this turn-restriction)~.+is (\\w+), but angle is (-?\\d+)"},"297":{title:"wrong direction of to member",severity:"error",description:"wrong direction of to way $1",IDs:["this","w"],regex:"(this turn-restriction)~.+to way (\\d+)"},"298":{title:"already restricted by oneway",severity:"error",description:"entry already prohibited by oneway tag on $1",IDs:["this","w"],regex:"(this turn-restriction)~.+tag on (\\d+)"},"300":{title:"missing maxspeed",severity:"warning",description:"This highway is missing a maxspeed tag",IDs:["this"],regex:"(this highway)"},"310":{title:"roundabouts",severity:"error",description:"Analyses ways with tag junction=roundabout. More then one way can form a roundabout. It supports tag oneway=-1"},"311":{title:"not closed loop",severity:"error",description:"This way is part of a roundabout but is not closed-loop. (split carriageways approaching a roundabout should not be tagged as roundabout)",IDs:["this"],regex:"(this way)"},"312":{title:"wrong direction",severity:"error",description:"If this ((?:mini_)?roundabout) is in a country with (left|right)-hand traffic then its orientation goes the wrong way around",IDs:["this",""],regex:"(this (?:mini_)?roundabout) is in a country with ((?:left|right)-hand)"},"313":{title:"faintly connected",severity:"error",description:"This roundabout has only $1 other roads connected. Roundabouts typically have three",IDs:["this",""],regex:"(this roundabout) has only (\\d) other"},"320":{title:"*_link connections",severity:"error",description:"This way is tagged as highway=$1_link but doesn't have a connection to any other $1 or $1_link",IDs:["this","","","",""],regex:"(this way) is tagged as (highway=.+) but doesn't have a connection to any other (.+) or (.+)"},"350":{title:"bridge-tags",severity:"error",description:"This bridge does not have a tag in common with its surrounding ways that shows the purpose of this bridge. There should be one of these tags: (.+)",NOTE:"Group can be arbitrary list of form: key=value,key=value,key=value...",IDs:["this",""],regex:"(this bridge).*tags: (.+)"},"360":{title:"language unknown",severity:"warning",description:"It would be nice if this (node|way|relation) had an additional tag 'name:XX=(.+)' where XX shows the language of its name '\\2'",IDs:["this",""],regex:"(this (?:node|way|relation)) had an additional tag 'name:XX=(.+)' where"},"370":{title:"doubled places",severity:"error",description:"This node has tags in common with the surrounding way #$1 ((?:\\(including the name '.+'\\) )?)and seems to be redundand",IDs:["this","w","370"],regex:"(this node) has tags in common with the surrounding way #(\\d+) ((?:\\(including the name '.+'\\) )?)and"},"380":{title:"non-physical use of sport-tag",severity:"error",description:"This way is tagged sport=$1 but has no physical tag like e.g. leisure, building, amenity or highway",IDs:["this",""],regex:"(this way) is tagged (sport=.+) but"},"390":{title:"missing tracktype",severity:"warning",description:"This track doesn''t have a tracktype",IDs:["this"],regex:"(this track)"},"400":{title:"geometry glitches",severity:"error",description:""},"401":{title:"missing turn restriction",severity:"error",description:"ways $1 and $2 join in a very sharp angle here and there is no oneway tag or turn restriction that prevents turning( from way (\\1|\\2) to (\\1|\\2))?",IDs:["w","w"],regex:"ways (\\d+) and (\\d+) join"},"402":{title:"impossible angles",severity:"error",description:"this way bends in a very sharp angle here",IDs:["this"],regex:"(this way)"},"410":{title:"website",severity:"error",description:"Web pages are analyzed. Web page is defined by any of the following tags website=* url=* website:mobile=* contact:website=* contact:url=* image=* source:website=* or source:url=*"},"411":{title:"http error",severity:"error",description:"The URL (<a target=_blank href=$1>$1</a>) cannot be opened (HTTP status code $2)",IDs:["this","url",""],regex:"(this feature)~.+ href=([^>]+)>.+ code (\\d+)\\)"},"412":{title:"domain hijacking",severity:"error",description:"Possible domain squatting: <a target=_blank href=$1>$1</a>. Suspicious text is: \"$2\"",IDs:["this","url",""],regex:"(this feature)~.+ href=([^>]+)>.+ is: "(.+)""},"413":{title:"non-match",severity:"error",description:"Content of the URL (<a target=_blank href=$1>$1</a>) did not contain these keywords: ($2)",IDs:["this","url",""],regex:"(this feature)~.+ href=([^>]+)>.+ keywords: \\((.+)\\)"}};
39136 var tiler = utilTiler();
39137 var dispatch$1 = dispatch('loaded');
39141 var _krUrlRoot = 'https://www.keepright.at/';
39144 // no 20 - multiple node on same spot - these are mostly boundaries overlapping roads
39145 30, 40, 50, 60, 70, 90, 100, 110, 120, 130, 150, 160, 170, 180,
39146 190, 191, 192, 193, 194, 195, 196, 197, 198,
39147 200, 201, 202, 203, 204, 205, 206, 207, 208, 210, 220,
39148 230, 231, 232, 270, 280, 281, 282, 283, 284, 285,
39149 290, 291, 292, 293, 294, 295, 296, 297, 298, 300, 310, 311, 312, 313,
39150 320, 350, 360, 370, 380, 390, 400, 401, 402, 410, 411, 412, 413
39154 function abortRequest(controller) {
39156 controller.abort();
39160 function abortUnwantedRequests(cache, tiles) {
39161 Object.keys(cache.inflightTile).forEach(function(k) {
39162 var wanted = tiles.find(function(tile) { return k === tile.id; });
39164 abortRequest(cache.inflightTile[k]);
39165 delete cache.inflightTile[k];
39171 function encodeErrorRtree(d) {
39172 return { minX: d.loc[0], minY: d.loc[1], maxX: d.loc[0], maxY: d.loc[1], data: d };
39176 // replace or remove error from rtree
39177 function updateRtree(item, replace) {
39178 _krCache.rtree.remove(item, function isEql(a, b) {
39179 return a.data.id === b.data.id;
39183 _krCache.rtree.insert(item);
39188 function tokenReplacements(d) {
39189 if (!(d instanceof qaError)) return;
39191 var htmlRegex = new RegExp(/<\/[a-z][\s\S]*>/);
39192 var replacements = {};
39194 var errorTemplate = errorTypes[d.which_type];
39195 if (!errorTemplate) {
39196 /* eslint-disable no-console */
39197 console.log('No Template: ', d.which_type);
39198 console.log(' ', d.description);
39199 /* eslint-enable no-console */
39203 // some descriptions are just fixed text
39204 if (!errorTemplate.regex) return;
39206 // regex pattern should match description with variable details captured
39207 var errorRegex = new RegExp(errorTemplate.regex, 'i');
39208 var errorMatch = errorRegex.exec(d.description);
39210 /* eslint-disable no-console */
39211 console.log('Unmatched: ', d.which_type);
39212 console.log(' ', d.description);
39213 console.log(' ', errorRegex);
39214 /* eslint-enable no-console */
39218 for (var i = 1; i < errorMatch.length; i++) { // skip first
39219 var capture = errorMatch[i];
39222 idType = 'IDs' in errorTemplate ? errorTemplate.IDs[i-1] : '';
39223 if (idType && capture) { // link IDs if present in the capture
39224 capture = parseError(capture, idType);
39225 } else if (htmlRegex.test(capture)) { // escape any html in non-IDs
39226 capture = '\\' + capture + '\\';
39228 var compare = capture.toLowerCase();
39229 if (localizeStrings[compare]) { // some replacement strings can be localized
39230 capture = t('QA.keepRight.error_parts.' + localizeStrings[compare]);
39234 replacements['var' + i] = capture;
39237 return replacements;
39241 function parseError(capture, idType) {
39242 var compare = capture.toLowerCase();
39243 if (localizeStrings[compare]) { // some replacement strings can be localized
39244 capture = t('QA.keepRight.error_parts.' + localizeStrings[compare]);
39248 // link a string like "this node"
39250 capture = linkErrorObject(capture);
39254 capture = linkURL(capture);
39257 // link an entity ID
39261 capture = linkEntity(idType + capture);
39264 // some errors have more complex ID lists/variance
39266 capture = parse20(capture);
39269 capture = parse211(capture);
39272 capture = parse231(capture);
39275 capture = parse294(capture);
39278 capture = parse370(capture);
39285 function linkErrorObject(d) {
39286 return '<a class="error_object_link">' + d + '</a>';
39289 function linkEntity(d) {
39290 return '<a class="error_entity_link">' + d + '</a>';
39293 function linkURL(d) {
39294 return '<a class="kr_external_link" target="_blank" href="' + d + '">' + d + '</a>';
39297 // arbitrary node list of form: #ID, #ID, #ID...
39298 function parse211(capture) {
39300 var items = capture.split(', ');
39302 items.forEach(function(item) {
39303 // ID has # at the front
39304 var id = linkEntity('n' + item.slice(1));
39308 return newList.join(', ');
39311 // arbitrary way list of form: #ID(layer),#ID(layer),#ID(layer)...
39312 function parse231(capture) {
39314 // unfortunately 'layer' can itself contain commas, so we split on '),'
39315 var items = capture.split('),');
39317 items.forEach(function(item) {
39318 var match = item.match(/\#(\d+)\((.+)\)?/);
39319 if (match !== null && match.length > 2) {
39320 newList.push(linkEntity('w' + match[1]) + ' ' +
39321 t('QA.keepRight.errorTypes.231.layer', { layer: match[2] })
39326 return newList.join(', ');
39329 // arbitrary node/relation list of form: from node #ID,to relation #ID,to node #ID...
39330 function parse294(capture) {
39332 var items = capture.split(',');
39334 items.forEach(function(item) {
39339 // item of form "from/to node/relation #ID"
39340 item = item.split(' ');
39342 // to/from role is more clear in quotes
39343 role = '"' + item[0] + '"';
39345 // first letter of node/relation provides the type
39346 idType = item[1].slice(0,1);
39348 // ID has # at the front
39349 id = item[2].slice(1);
39350 id = linkEntity(idType + id);
39352 item = [role, item[1], id].join(' ');
39353 newList.push(item);
39356 return newList.join(', ');
39359 // may or may not include the string "(including the name 'name')"
39360 function parse370(capture) {
39361 if (!capture) return '';
39363 var match = capture.match(/\(including the name (\'.+\')\)/);
39364 if (match !== null && match.length) {
39365 return t('QA.keepRight.errorTypes.370.including_the_name', { name: match[1] });
39370 // arbitrary node list of form: #ID,#ID,#ID...
39371 function parse20(capture) {
39373 var items = capture.split(',');
39375 items.forEach(function(item) {
39376 // ID has # at the front
39377 var id = linkEntity('n' + item.slice(1));
39381 return newList.join(', ');
39386 var serviceKeepRight = {
39392 this.event = utilRebind(this, dispatch$1, 'on');
39395 reset: function() {
39397 Object.values(_krCache.inflightTile).forEach(abortRequest);
39411 // KeepRight API: http://osm.mueschelsoft.de/keepright/interfacing.php
39412 loadErrors: function(projection) {
39413 var options = { format: 'geojson' };
39414 var rules = _krRuleset.join();
39416 // determine the needed tiles to cover the view
39418 .zoomExtent([_krZoom, _krZoom])
39419 .getTiles(projection);
39421 // abort inflight requests that are no longer needed
39422 abortUnwantedRequests(_krCache, tiles);
39424 // issue new requests..
39425 tiles.forEach(function(tile) {
39426 if (_krCache.loadedTile[tile.id] || _krCache.inflightTile[tile.id]) return;
39428 var rect = tile.extent.rectangle();
39429 var params = Object.assign({}, options, { left: rect[0], bottom: rect[3], right: rect[2], top: rect[1] });
39430 var url = _krUrlRoot + 'export.php?' + utilQsString(params) + '&ch=' + rules;
39432 var controller = new AbortController();
39433 _krCache.inflightTile[tile.id] = controller;
39435 d3_json(url, { signal: controller.signal })
39436 .then(function(data) {
39437 delete _krCache.inflightTile[tile.id];
39438 _krCache.loadedTile[tile.id] = true;
39439 if (!data || !data.features || !data.features.length) {
39440 throw new Error('No Data');
39443 data.features.forEach(function(feature) {
39444 var loc = feature.geometry.coordinates;
39445 var props = feature.properties;
39447 // if there is a parent, save its error type e.g.:
39448 // Error 191 = "highway-highway"
39449 // Error 190 = "intersections without junctions" (parent)
39450 var errorType = props.error_type;
39451 var errorTemplate = errorTypes[errorType];
39452 var parentErrorType = (Math.floor(errorType / 10) * 10).toString();
39454 // try to handle error type directly, fallback to parent error type.
39455 var whichType = errorTemplate ? errorType : parentErrorType;
39456 var whichTemplate = errorTypes[whichType];
39458 // Rewrite a few of the errors at this point..
39459 // This is done to make them easier to linkify and translate.
39460 switch (whichType) {
39462 props.description = 'This feature has a FIXME tag: ' + props.description;
39466 props.description = props.description.replace('A turn-', 'This turn-');
39473 props.description = 'This turn-restriction~' + props.description;
39476 props.description = 'This highway is missing a maxspeed tag';
39481 props.description = 'This feature~' + props.description;
39485 // - move markers slightly so it doesn't obscure the geometry,
39486 // - then move markers away from other coincident markers
39487 var coincident = false;
39489 // first time, move marker up. after that, move marker right.
39490 var delta = coincident ? [0.00001, 0] : [0, 0.00001];
39491 loc = geoVecAdd(loc, delta);
39492 var bbox = geoExtent(loc).bbox();
39493 coincident = _krCache.rtree.search(bbox).length;
39494 } while (coincident);
39496 var d = new qaError({
39499 service: 'keepRight',
39500 error_type: errorType,
39501 // Extra values for this service
39502 id: props.error_id,
39503 comment: props.comment || null,
39504 description: props.description || '',
39505 error_id: props.error_id,
39506 which_type: whichType,
39507 parent_error_type: parentErrorType,
39508 severity: whichTemplate.severity || 'error',
39509 object_id: props.object_id,
39510 object_type: props.object_type,
39511 schema: props.schema,
39515 d.replacements = tokenReplacements(d);
39517 _krCache.data[d.id] = d;
39518 _krCache.rtree.insert(encodeErrorRtree(d));
39521 dispatch$1.call('loaded');
39523 .catch(function() {
39524 delete _krCache.inflightTile[tile.id];
39525 _krCache.loadedTile[tile.id] = true;
39532 postKeepRightUpdate: function(d, callback) {
39533 if (_krCache.inflightPost[d.id]) {
39534 return callback({ message: 'Error update already inflight', status: -2 }, d);
39538 var params = { schema: d.schema, id: d.error_id };
39541 params.st = d.state;
39543 if (d.newComment !== undefined) {
39544 params.co = d.newComment;
39547 // NOTE: This throws a CORS err, but it seems successful.
39548 // We don't care too much about the response, so this is fine.
39549 var url = _krUrlRoot + 'comment.php?' + utilQsString(params);
39551 var controller = new AbortController();
39552 _krCache.inflightPost[d.id] = controller;
39554 fetch(url, { method: 'POST', signal: controller.signal })
39555 .then(function(response) {
39556 delete _krCache.inflightPost[d.id];
39557 if (!response.ok) {
39558 throw new Error(response.status + ' ' + response.statusText);
39561 if (d.state === 'ignore') { // ignore permanently (false positive)
39562 that.removeError(d);
39564 } else if (d.state === 'ignore_t') { // ignore temporarily (error fixed)
39565 that.removeError(d);
39566 _krCache.closed[d.schema + ':' + d.error_id] = true;
39569 d = that.replaceError(d.update({
39570 comment: d.newComment,
39571 newComment: undefined,
39576 if (callback) callback(null, d);
39578 .catch(function(err) {
39579 delete _krCache.inflightPost[d.id];
39580 if (callback) callback(err.message);
39585 // get all cached errors covering the viewport
39586 getErrors: function(projection) {
39587 var viewport = projection.clipExtent();
39588 var min = [viewport[0][0], viewport[1][1]];
39589 var max = [viewport[1][0], viewport[0][1]];
39590 var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
39592 return _krCache.rtree.search(bbox).map(function(d) {
39598 // get a single error from the cache
39599 getError: function(id) {
39600 return _krCache.data[id];
39604 // replace a single error in the cache
39605 replaceError: function(error) {
39606 if (!(error instanceof qaError) || !error.id) return;
39608 _krCache.data[error.id] = error;
39609 updateRtree(encodeErrorRtree(error), true); // true = replace
39614 // remove a single error from the cache
39615 removeError: function(error) {
39616 if (!(error instanceof qaError) || !error.id) return;
39618 delete _krCache.data[error.id];
39619 updateRtree(encodeErrorRtree(error), false); // false = remove
39623 errorURL: function(error) {
39624 return _krUrlRoot + 'report_map.php?schema=' + error.schema + '&error=' + error.id;
39628 // Get an array of errors closed during this session.
39629 // Used to populate `closed:keepright` changeset tag
39630 getClosedIDs: function() {
39631 return Object.keys(_krCache.closed).sort();
39636 var tiler$1 = utilTiler();
39637 var dispatch$2 = dispatch('loaded');
39642 var _impOsmUrls = {
39643 ow: 'https://directionofflow.skobbler.net/directionOfFlowService',
39644 mr: 'https://missingroads.skobbler.net/missingGeoService',
39645 tr: 'https://turnrestrictionservice.skobbler.net/turnRestrictionService'
39648 function abortRequest$1(i) {
39649 Object.values(i).forEach(function(controller) {
39651 controller.abort();
39656 function abortUnwantedRequests$1(cache, tiles) {
39657 Object.keys(cache.inflightTile).forEach(function(k) {
39658 var wanted = tiles.find(function(tile) { return k === tile.id; });
39660 abortRequest$1(cache.inflightTile[k]);
39661 delete cache.inflightTile[k];
39667 function encodeErrorRtree$1(d) {
39668 return { minX: d.loc[0], minY: d.loc[1], maxX: d.loc[0], maxY: d.loc[1], data: d };
39672 // replace or remove error from rtree
39673 function updateRtree$1(item, replace) {
39674 _erCache.rtree.remove(item, function isEql(a, b) {
39675 return a.data.id === b.data.id;
39679 _erCache.rtree.insert(item);
39683 function linkErrorObject(d) {
39684 return '<a class="error_object_link">' + d + '</a>';
39687 function linkEntity(d) {
39688 return '<a class="error_entity_link">' + d + '</a>';
39691 function pointAverage(points) {
39692 if (points.length) {
39693 var sum = points.reduce(function(acc, point) {
39694 return geoVecAdd(acc, [point.lon, point.lat]);
39696 return geoVecScale(sum, 1 / points.length);
39702 function relativeBearing(p1, p2) {
39703 var angle = Math.atan2(p2.lon - p1.lon, p2.lat - p1.lat);
39705 angle += 2 * Math.PI;
39709 return angle * 180 / Math.PI;
39712 // Assuming range [0,360)
39713 function cardinalDirection(bearing) {
39714 var dir = 45 * Math.round(bearing / 45);
39727 return t('QA.improveOSM.directions.' + compass[dir]);
39730 // Errors shouldn't obscure eachother
39731 function preventCoincident(loc, bumpUp) {
39732 var coincident = false;
39734 // first time, move marker up. after that, move marker right.
39735 var delta = coincident ? [0.00001, 0] : (bumpUp ? [0, 0.00001] : [0, 0]);
39736 loc = geoVecAdd(loc, delta);
39737 var bbox = geoExtent(loc).bbox();
39738 coincident = _erCache.rtree.search(bbox).length;
39739 } while (coincident);
39744 var serviceImproveOSM = {
39750 this.event = utilRebind(this, dispatch$2, 'on');
39753 reset: function() {
39755 Object.values(_erCache.inflightTile).forEach(abortRequest$1);
39767 loadErrors: function(projection) {
39771 zoom: '19' // Use a high zoom so that clusters aren't returned
39774 // determine the needed tiles to cover the view
39775 var tiles = tiler$1
39776 .zoomExtent([_erZoom, _erZoom])
39777 .getTiles(projection);
39779 // abort inflight requests that are no longer needed
39780 abortUnwantedRequests$1(_erCache, tiles);
39782 // issue new requests..
39783 tiles.forEach(function(tile) {
39784 if (_erCache.loadedTile[tile.id] || _erCache.inflightTile[tile.id]) return;
39786 var rect = tile.extent.rectangle();
39787 var params = Object.assign({}, options, { east: rect[0], south: rect[3], west: rect[2], north: rect[1] });
39789 // 3 separate requests to store for each tile
39792 Object.keys(_impOsmUrls).forEach(function(k) {
39793 var v = _impOsmUrls[k];
39794 // We exclude WATER from missing geometry as it doesn't seem useful
39795 // We use most confident one-way and turn restrictions only, still have false positives
39796 var kParams = Object.assign({},
39798 (k === 'mr') ? { type: 'PARKING,ROAD,BOTH,PATH' } : { confidenceLevel: 'C1' }
39800 var url = v + '/search?' + utilQsString(kParams);
39802 var controller = new AbortController();
39803 requests[k] = controller;
39805 d3_json(url, { signal: controller.signal })
39806 .then(function(data) {
39807 delete _erCache.inflightTile[tile.id][k];
39808 if (!Object.keys(_erCache.inflightTile[tile.id]).length) {
39809 delete _erCache.inflightTile[tile.id];
39810 _erCache.loadedTile[tile.id] = true;
39813 // Road segments at high zoom == oneways
39814 if (data.roadSegments) {
39815 data.roadSegments.forEach(function(feature) {
39816 // Position error at the approximate middle of the segment
39817 var points = feature.points;
39818 var mid = points.length / 2;
39821 // Even number of points, find midpoint of the middle two
39822 // Odd number of points, use position of very middle point
39823 if (mid % 1 === 0) {
39824 loc = pointAverage([points[mid - 1], points[mid]]);
39826 mid = points[Math.floor(mid)];
39827 loc = [mid.lon, mid.lat];
39830 // One-ways can land on same segment in opposite direction
39831 loc = preventCoincident(loc, false);
39833 var d = new qaError({
39834 // Info required for every error
39836 service: 'improveOSM',
39838 // Extra details needed for this service
39840 identifier: { // this is used to post changes to the error
39841 wayId: feature.wayId,
39842 fromNodeId: feature.fromNodeId,
39843 toNodeId: feature.toNodeId
39845 object_id: feature.wayId,
39846 object_type: 'way',
39847 status: feature.status
39850 // Variables used in the description
39852 percentage: feature.percentOfTrips,
39853 num_trips: feature.numberOfTrips,
39854 highway: linkErrorObject(t('QA.keepRight.error_parts.highway')),
39855 from_node: linkEntity('n' + feature.fromNodeId),
39856 to_node: linkEntity('n' + feature.toNodeId)
39859 _erCache.data[d.id] = d;
39860 _erCache.rtree.insert(encodeErrorRtree$1(d));
39864 // Tiles at high zoom == missing roads
39866 data.tiles.forEach(function(feature) {
39867 var geoType = feature.type.toLowerCase();
39869 // Average of recorded points should land on the missing geometry
39870 // Missing geometry could happen to land on another error
39871 var loc = pointAverage(feature.points);
39872 loc = preventCoincident(loc, false);
39874 var d = new qaError({
39875 // Info required for every error
39877 service: 'improveOSM',
39878 error_type: k + '-' + geoType,
39879 // Extra details needed for this service
39881 identifier: { x: feature.x, y: feature.y },
39882 status: feature.status
39886 num_trips: feature.numberOfTrips,
39887 geometry_type: t('QA.improveOSM.geometry_types.' + geoType)
39890 // -1 trips indicates data came from a 3rd party
39891 if (feature.numberOfTrips === -1) {
39892 d.desc = t('QA.improveOSM.error_types.mr.description_alt', d.replacements);
39895 _erCache.data[d.id] = d;
39896 _erCache.rtree.insert(encodeErrorRtree$1(d));
39900 // Entities at high zoom == turn restrictions
39901 if (data.entities) {
39902 data.entities.forEach(function(feature) {
39903 // Turn restrictions could be missing at same junction
39904 // We also want to bump the error up so node is accessible
39905 var loc = feature.point;
39906 loc = preventCoincident([loc.lon, loc.lat], true);
39908 // Elements are presented in a strange way
39909 var ids = feature.id.split(',');
39910 var from_way = ids[0];
39911 var via_node = ids[3];
39912 var to_way = ids[2].split(':')[1];
39914 var d = new qaError({
39915 // Info required for every error
39917 service: 'improveOSM',
39919 // Extra details needed for this service
39921 identifier: feature.id,
39922 object_id: via_node,
39923 object_type: 'node',
39924 status: feature.status
39927 // Travel direction along from_way clarifies the turn restriction
39928 var p1 = feature.segments[0].points[0];
39929 var p2 = feature.segments[0].points[1];
39931 var dir_of_travel = cardinalDirection(relativeBearing(p1, p2));
39933 // Variables used in the description
39935 num_passed: feature.numberOfPasses,
39936 num_trips: feature.segments[0].numberOfTrips,
39937 turn_restriction: feature.turnType.toLowerCase(),
39938 from_way: linkEntity('w' + from_way),
39939 to_way: linkEntity('w' + to_way),
39940 travel_direction: dir_of_travel,
39941 junction: linkErrorObject(t('QA.keepRight.error_parts.this_node'))
39944 _erCache.data[d.id] = d;
39945 _erCache.rtree.insert(encodeErrorRtree$1(d));
39946 dispatch$2.call('loaded');
39950 .catch(function() {
39951 delete _erCache.inflightTile[tile.id][k];
39952 if (!Object.keys(_erCache.inflightTile[tile.id]).length) {
39953 delete _erCache.inflightTile[tile.id];
39954 _erCache.loadedTile[tile.id] = true;
39959 _erCache.inflightTile[tile.id] = requests;
39963 getComments: function(d, callback) {
39964 // If comments already retrieved no need to do so again
39965 if (d.comments !== undefined) {
39966 if (callback) callback({}, d);
39970 var key = d.error_key;
39973 if (key === 'ow') {
39974 qParams = d.identifier;
39975 } else if (key === 'mr') {
39976 qParams.tileX = d.identifier.x;
39977 qParams.tileY = d.identifier.y;
39978 } else if (key === 'tr') {
39979 qParams.targetId = d.identifier;
39982 var url = _impOsmUrls[key] + '/retrieveComments?' + utilQsString(qParams);
39986 .then(function(data) {
39987 // comments are served newest to oldest
39988 var comments = data.comments ? data.comments.reverse() : [];
39989 that.replaceError(d.update({ comments: comments }));
39990 if (callback) callback(null, d);
39992 .catch(function(err) {
39993 if (callback) callback(err.message);
39997 postUpdate: function(d, callback) {
39998 if (!serviceOsm.authenticated()) { // Username required in payload
39999 return callback({ message: 'Not Authenticated', status: -3}, d);
40001 if (_erCache.inflightPost[d.id]) {
40002 return callback({ message: 'Error update already inflight', status: -2 }, d);
40007 // Payload can only be sent once username is established
40008 serviceOsm.userDetails(sendPayload);
40010 function sendPayload(err, user) {
40011 if (err) { return callback(err, d); }
40013 var key = d.error_key;
40014 var url = _impOsmUrls[key] + '/comment';
40016 username: user.display_name
40019 // Each error type has different data for identification
40020 if (key === 'ow') {
40021 payload.roadSegments = [ d.identifier ];
40022 } else if (key === 'mr') {
40023 payload.tiles = [ d.identifier ];
40024 } else if (key === 'tr') {
40025 payload.targetIds = [ d.identifier ];
40028 if (d.newStatus !== undefined) {
40029 payload.status = d.newStatus;
40030 payload.text = 'status changed';
40033 // Comment take place of default text
40034 if (d.newComment !== undefined) {
40035 payload.text = d.newComment;
40038 var controller = new AbortController();
40039 _erCache.inflightPost[d.id] = controller;
40043 signal: controller.signal,
40044 body: JSON.stringify(payload)
40047 d3_json(url, options)
40049 delete _erCache.inflightPost[d.id];
40051 // Just a comment, update error in cache
40052 if (d.newStatus === undefined) {
40053 var now = new Date();
40054 var comments = d.comments ? d.comments : [];
40057 username: payload.username,
40058 text: payload.text,
40059 timestamp: now.getTime() / 1000
40062 that.replaceError(d.update({
40063 comments: comments,
40064 newComment: undefined
40067 that.removeError(d);
40068 if (d.newStatus === 'SOLVED') {
40069 // No pretty identifier, so we just use coordinates
40070 var closedID = d.loc[1].toFixed(5) + '/' + d.loc[0].toFixed(5);
40071 _erCache.closed[key + ':' + closedID] = true;
40074 if (callback) callback(null, d);
40076 .catch(function(err) {
40077 delete _erCache.inflightPost[d.id];
40078 if (callback) callback(err.message);
40084 // get all cached errors covering the viewport
40085 getErrors: function(projection) {
40086 var viewport = projection.clipExtent();
40087 var min = [viewport[0][0], viewport[1][1]];
40088 var max = [viewport[1][0], viewport[0][1]];
40089 var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
40091 return _erCache.rtree.search(bbox).map(function(d) {
40096 // get a single error from the cache
40097 getError: function(id) {
40098 return _erCache.data[id];
40101 // replace a single error in the cache
40102 replaceError: function(error) {
40103 if (!(error instanceof qaError) || !error.id) return;
40105 _erCache.data[error.id] = error;
40106 updateRtree$1(encodeErrorRtree$1(error), true); // true = replace
40110 // remove a single error from the cache
40111 removeError: function(error) {
40112 if (!(error instanceof qaError) || !error.id) return;
40114 delete _erCache.data[error.id];
40115 updateRtree$1(encodeErrorRtree$1(error), false); // false = remove
40118 // Used to populate `closed:improveosm` changeset tag
40119 getClosedIDs: function() {
40120 return Object.keys(_erCache.closed).sort();
40125 A standalone SVG element that contains only a `defs` sub-element. To be
40126 used once globally, since defs IDs must be unique within a document.
40128 function svgDefs(context) {
40130 function drawDefs(selection) {
40131 var defs = selection.append('defs');
40136 .attr('id', 'oneway-marker')
40137 .attr('viewBox', '0 0 10 5')
40140 .attr('markerWidth', 2)
40141 .attr('markerHeight', 2)
40142 .attr('markerUnits', 'strokeWidth')
40143 .attr('orient', 'auto')
40145 .attr('class', 'oneway-marker-path')
40146 .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')
40147 .attr('stroke', 'none')
40148 .attr('fill', '#000')
40149 .attr('opacity', '0.75');
40151 // SVG markers have to be given a colour where they're defined
40152 // (they can't inherit it from the line they're attached to),
40153 // so we need to manually define markers for each color of tag
40154 // (also, it's slightly nicer if we can control the
40155 // positioning for different tags)
40156 function addSidedMarker(name, color, offset) {
40159 .attr('id', 'sided-marker-' + name)
40160 .attr('viewBox', '0 0 2 2')
40162 .attr('refY', -offset)
40163 .attr('markerWidth', 1.5)
40164 .attr('markerHeight', 1.5)
40165 .attr('markerUnits', 'strokeWidth')
40166 .attr('orient', 'auto')
40168 .attr('class', 'sided-marker-path sided-marker-' + name + '-path')
40169 .attr('d', 'M 0,0 L 1,1 L 2,0 z')
40170 .attr('stroke', 'none')
40171 .attr('fill', color);
40173 addSidedMarker('natural', 'rgb(140, 208, 95)', 0);
40174 // for a coastline, the arrows are (somewhat unintuitively) on
40175 // the water side, so let's color them blue (with a gap) to
40176 // give a stronger indication
40177 addSidedMarker('coastline', '#77dede', 1);
40178 // barriers have a dashed line, and separating the triangle
40179 // from the line visually suits that
40180 addSidedMarker('barrier', '#ddd', 1);
40181 addSidedMarker('man_made', '#fff', 0);
40185 .attr('id', 'viewfield-marker')
40186 .attr('viewBox', '0 0 16 16')
40189 .attr('markerWidth', 4)
40190 .attr('markerHeight', 4)
40191 .attr('markerUnits', 'strokeWidth')
40192 .attr('orient', 'auto')
40194 .attr('class', 'viewfield-marker-path')
40195 .attr('d', 'M 6,14 C 8,13.4 8,13.4 10,14 L 16,3 C 12,0 4,0 0,3 z')
40196 .attr('fill', '#333')
40197 .attr('fill-opacity', '0.75')
40198 .attr('stroke', '#fff')
40199 .attr('stroke-width', '0.5px')
40200 .attr('stroke-opacity', '0.75');
40204 .attr('id', 'viewfield-marker-wireframe')
40205 .attr('viewBox', '0 0 16 16')
40208 .attr('markerWidth', 4)
40209 .attr('markerHeight', 4)
40210 .attr('markerUnits', 'strokeWidth')
40211 .attr('orient', 'auto')
40213 .attr('class', 'viewfield-marker-path')
40214 .attr('d', 'M 6,14 C 8,13.4 8,13.4 10,14 L 16,3 C 12,0 4,0 0,3 z')
40215 .attr('fill', 'none')
40216 .attr('stroke', '#fff')
40217 .attr('stroke-width', '0.5px')
40218 .attr('stroke-opacity', '0.75');
40221 var patterns = defs.selectAll('pattern')
40223 // pattern name, pattern image name
40225 ['construction', 'construction'],
40226 ['cemetery', 'cemetery'],
40227 ['cemetery_christian', 'cemetery_christian'],
40228 ['cemetery_buddhist', 'cemetery_buddhist'],
40229 ['cemetery_muslim', 'cemetery_muslim'],
40230 ['cemetery_jewish', 'cemetery_jewish'],
40231 ['farmland', 'farmland'],
40232 ['farmyard', 'farmyard'],
40233 ['forest', 'forest'],
40234 ['forest_broadleaved', 'forest_broadleaved'],
40235 ['forest_needleleaved', 'forest_needleleaved'],
40236 ['forest_leafless', 'forest_leafless'],
40237 ['grass', 'grass'],
40238 ['landfill', 'landfill'],
40239 ['meadow', 'grass'],
40240 ['orchard', 'orchard'],
40242 ['quarry', 'quarry'],
40243 ['scrub', 'bushes'],
40244 ['vineyard', 'vineyard'],
40245 ['water_standing', 'lines'],
40246 ['waves', 'waves'],
40247 ['wetland', 'wetland'],
40248 ['wetland_marsh', 'wetland_marsh'],
40249 ['wetland_swamp', 'wetland_swamp'],
40250 ['wetland_bog', 'wetland_bog'],
40251 ['wetland_reedbed', 'wetland_reedbed']
40255 .attr('id', function (d) { return 'pattern-' + d[0]; })
40257 .attr('height', 32)
40258 .attr('patternUnits', 'userSpaceOnUse');
40265 .attr('height', 32)
40266 .attr('class', function (d) { return 'pattern-color-' + d[0]; });
40273 .attr('height', 32)
40274 .attr('xlink:href', function (d) {
40275 return context.imagePath('pattern/' + d[1] + '.png');
40279 defs.selectAll('clipPath')
40280 .data([12, 18, 20, 32, 45])
40282 .append('clipPath')
40283 .attr('id', function (d) { return 'clip-square-' + d; })
40287 .attr('width', function (d) { return d; })
40288 .attr('height', function (d) { return d; });
40290 // add symbol spritesheets
40292 .call(drawDefs.addSprites, [
40293 'iD-sprite', 'maki-sprite', 'temaki-sprite', 'fa-sprite', 'tnp-sprite', 'community-sprite'
40298 drawDefs.addSprites = function(selection, ids, overrideColors) {
40299 var spritesheets = selection.selectAll('.spritesheet');
40300 var currData = spritesheets.data();
40301 var data = utilArrayUniq(currData.concat(ids));
40307 .attr('class', function(d) { return 'spritesheet spritesheet-' + d; })
40308 .each(function(d) {
40309 var url = context.imagePath(d + '.svg');
40310 var node = d3_select(this).node();
40313 .then(function(svg) {
40315 d3_select(svg.documentElement).attr('id', d).node()
40317 if (overrideColors && d !== 'iD-sprite') { // allow icon colors to be overridden..
40318 d3_select(node).selectAll('path')
40319 .attr('fill', 'currentColor');
40322 .catch(function() {
40332 /* global Mapillary:false */
40335 var apibase = 'https://a.mapillary.com/v3/';
40336 var viewercss = 'mapillary-js/mapillary.min.css';
40337 var viewerjs = 'mapillary-js/mapillary.min.js';
40338 var clientId = 'NzNRM2otQkR2SHJzaXJmNmdQWVQ0dzo1ZWYyMmYwNjdmNDdlNmVi';
40339 var maxResults = 1000;
40341 var tiler$2 = utilTiler().zoomExtent([tileZoom, tileZoom]).skipNullIsland(true);
40342 var dispatch$3 = dispatch('loadedImages', 'loadedSigns', 'bearingChanged');
40343 var _mlyFallback = false;
40346 var _mlySelectedImage;
40350 function abortRequest$2(controller) {
40351 controller.abort();
40355 function maxPageAtZoom(z) {
40356 if (z < 15) return 2;
40357 if (z === 15) return 5;
40358 if (z === 16) return 10;
40359 if (z === 17) return 20;
40360 if (z === 18) return 40;
40361 if (z > 18) return 80;
40365 function loadTiles(which, url, projection) {
40366 var currZoom = Math.floor(geoScaleToZoom(projection.scale()));
40367 var tiles = tiler$2.getTiles(projection);
40369 // abort inflight requests that are no longer needed
40370 var cache = _mlyCache[which];
40371 Object.keys(cache.inflight).forEach(function(k) {
40372 var wanted = tiles.find(function(tile) { return k.indexOf(tile.id + ',') === 0; });
40374 abortRequest$2(cache.inflight[k]);
40375 delete cache.inflight[k];
40379 tiles.forEach(function(tile) {
40380 loadNextTilePage(which, currZoom, url, tile);
40385 function loadNextTilePage(which, currZoom, url, tile) {
40386 var cache = _mlyCache[which];
40387 var rect = tile.extent.rectangle();
40388 var maxPages = maxPageAtZoom(currZoom);
40389 var nextPage = cache.nextPage[tile.id] || 0;
40390 var nextURL = cache.nextURL[tile.id] || url +
40392 per_page: maxResults,
40394 client_id: clientId,
40395 bbox: [rect[0], rect[1], rect[2], rect[3]].join(','),
40398 if (nextPage > maxPages) return;
40400 var id = tile.id + ',' + String(nextPage);
40401 if (cache.loaded[id] || cache.inflight[id]) return;
40403 var controller = new AbortController();
40404 cache.inflight[id] = controller;
40408 signal: controller.signal,
40409 headers: { 'Content-Type': 'application/json' }
40412 fetch(nextURL, options)
40413 .then(function(response) {
40414 if (!response.ok) {
40415 throw new Error(response.status + ' ' + response.statusText);
40417 var linkHeader = response.headers.get('Link');
40419 var pagination = parsePagination(linkHeader);
40420 if (pagination.next) {
40421 cache.nextURL[tile.id] = pagination.next;
40424 return response.json();
40426 .then(function(data) {
40427 cache.loaded[id] = true;
40428 delete cache.inflight[id];
40429 if (!data || !data.features || !data.features.length) {
40430 throw new Error('No Data');
40433 var features = data.features.map(function(feature) {
40434 var loc = feature.geometry.coordinates;
40437 // An image (shown as a green dot on the map) is a single street photo with extra
40438 // information such as location, camera angle (CA), camera model, and so on.
40439 // Each image feature is a GeoJSON Point
40440 if (which === 'images') {
40443 key: feature.properties.key,
40444 ca: feature.properties.ca,
40445 captured_at: feature.properties.captured_at,
40446 captured_by: feature.properties.username,
40447 pano: feature.properties.pano
40450 cache.forImageKey[d.key] = d; // cache imageKey -> image
40452 // Mapillary organizes images as sequences. A sequence of images are continuously captured
40453 // by a user at a give time. Sequences are shown on the map as green lines.
40454 // Each sequence feature is a GeoJSON LineString
40455 } else if (which === 'sequences') {
40456 var sequenceKey = feature.properties.key;
40457 cache.lineString[sequenceKey] = feature; // cache sequenceKey -> lineString
40458 feature.properties.coordinateProperties.image_keys.forEach(function(imageKey) {
40459 cache.forImageKey[imageKey] = sequenceKey; // cache imageKey -> sequenceKey
40461 return false; // because no `d` data worth loading into an rbush
40463 // An image detection is a semantic pixel area on an image. The area could indicate
40464 // sky, trees, sidewalk in the image. A detection can be a polygon, a bounding box, or a point.
40465 // Each image_detection feature is a GeoJSON Point (located where the image was taken)
40466 } else if (which === 'image_detections') {
40468 key: feature.properties.key,
40469 image_key: feature.properties.image_key,
40470 value: feature.properties.value,
40471 package: feature.properties.package,
40472 shape: feature.properties.shape
40475 // cache imageKey -> image_detections
40476 if (!cache.forImageKey[d.image_key]) {
40477 cache.forImageKey[d.image_key] = [];
40479 cache.forImageKey[d.image_key].push(d);
40480 return false; // because no `d` data worth loading into an rbush
40483 // A map feature is a real world object that can be shown on a map. It could be any object
40484 // recognized from images, manually added in images, or added on the map.
40485 // Each map feature is a GeoJSON Point (located where the feature is)
40486 } else if (which === 'map_features') {
40489 key: feature.properties.key,
40490 value: feature.properties.value,
40491 package: feature.properties.package,
40492 detections: feature.properties.detections
40497 minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1], data: d
40500 }).filter(Boolean);
40502 if (cache.rtree && features) {
40503 cache.rtree.load(features);
40506 if (data.features.length === maxResults) { // more pages to load
40507 cache.nextPage[tile.id] = nextPage + 1;
40508 loadNextTilePage(which, currZoom, url, tile);
40510 cache.nextPage[tile.id] = Infinity; // no more pages to load
40513 if (which === 'images' || which === 'sequences') {
40514 dispatch$3.call('loadedImages');
40515 } else if (which === 'map_features') {
40516 dispatch$3.call('loadedSigns');
40519 .catch(function() {
40520 cache.loaded[id] = true;
40521 delete cache.inflight[id];
40525 // extract links to pages of API results
40526 function parsePagination(links) {
40527 return links.split(',').map(function(rel) {
40528 var elements = rel.split(';');
40529 if (elements.length === 2) {
40531 /<(.+)>/.exec(elements[0])[1],
40532 /rel="(.+)"/.exec(elements[1])[1]
40537 }).reduce(function(pagination, val) {
40538 pagination[val[1]] = val[0];
40544 // partition viewport into higher zoom tiles
40545 function partitionViewport(projection) {
40546 var z = geoScaleToZoom(projection.scale());
40547 var z2 = (Math.ceil(z * 2) / 2) + 2.5; // round to next 0.5 and add 2.5
40548 var tiler = utilTiler().zoomExtent([z2, z2]);
40550 return tiler.getTiles(projection)
40551 .map(function(tile) { return tile.extent; });
40555 // no more than `limit` results per partition.
40556 function searchLimited(limit, projection, rtree) {
40557 limit = limit || 5;
40559 return partitionViewport(projection)
40560 .reduce(function(result, extent) {
40561 var found = rtree.search(extent.bbox())
40563 .map(function(d) { return d.data; });
40565 return (found.length ? result.concat(found) : result);
40571 var serviceMapillary = {
40578 this.event = utilRebind(this, dispatch$3, 'on');
40581 reset: function() {
40583 Object.values(_mlyCache.images.inflight).forEach(abortRequest$2);
40584 Object.values(_mlyCache.image_detections.inflight).forEach(abortRequest$2);
40585 Object.values(_mlyCache.map_features.inflight).forEach(abortRequest$2);
40586 Object.values(_mlyCache.sequences.inflight).forEach(abortRequest$2);
40590 images: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, rtree: rbush_1(), forImageKey: {} },
40591 image_detections: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, forImageKey: {} },
40592 map_features: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, rtree: rbush_1() },
40593 sequences: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, rtree: rbush_1(), forImageKey: {}, lineString: {} }
40596 _mlySelectedImage = null;
40601 images: function(projection) {
40603 return searchLimited(limit, projection, _mlyCache.images.rtree);
40607 signs: function(projection) {
40609 return searchLimited(limit, projection, _mlyCache.map_features.rtree);
40613 cachedImage: function(imageKey) {
40614 return _mlyCache.images.forImageKey[imageKey];
40618 sequences: function(projection) {
40619 var viewport = projection.clipExtent();
40620 var min = [viewport[0][0], viewport[1][1]];
40621 var max = [viewport[1][0], viewport[0][1]];
40622 var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
40623 var sequenceKeys = {};
40625 // all sequences for images in viewport
40626 _mlyCache.images.rtree.search(bbox)
40627 .forEach(function(d) {
40628 var sequenceKey = _mlyCache.sequences.forImageKey[d.data.key];
40630 sequenceKeys[sequenceKey] = true;
40634 // Return lineStrings for the sequences
40635 return Object.keys(sequenceKeys).map(function(sequenceKey) {
40636 return _mlyCache.sequences.lineString[sequenceKey];
40641 signsSupported: function() {
40646 loadImages: function(projection) {
40647 loadTiles('images', apibase + 'images?', projection);
40648 loadTiles('sequences', apibase + 'sequences?', projection);
40652 loadSigns: function(projection) {
40653 // if we are looking at signs, we'll actually need to fetch images too
40654 loadTiles('images', apibase + 'images?', projection);
40655 loadTiles('map_features', apibase + 'map_features?layers=trafficsigns&min_nbr_image_detections=1&', projection);
40656 loadTiles('image_detections', apibase + 'image_detections?layers=trafficsigns&', projection);
40660 loadViewer: function(context) {
40662 var wrap = d3_select('#photoviewer').selectAll('.mly-wrapper')
40668 .attr('class', 'photo-wrapper mly-wrapper')
40669 .classed('hide', true);
40671 // load mapillary-viewercss
40672 d3_select('head').selectAll('#mapillary-viewercss')
40676 .attr('id', 'mapillary-viewercss')
40677 .attr('rel', 'stylesheet')
40678 .attr('href', context.asset(viewercss));
40680 // load mapillary-viewerjs
40681 d3_select('head').selectAll('#mapillary-viewerjs')
40685 .attr('id', 'mapillary-viewerjs')
40686 .attr('src', context.asset(viewerjs));
40688 // load mapillary signs sprite
40689 var defs = context.container().select('defs');
40690 defs.call(svgDefs(context).addSprites, ['mapillary-sprite'], false /* don't override colors */ );
40692 // Register viewer resize handler
40693 context.ui().photoviewer.on('resize', function() {
40695 _mlyViewer.resize();
40701 showViewer: function() {
40702 var wrap = d3_select('#photoviewer')
40703 .classed('hide', false);
40705 var isHidden = wrap.selectAll('.photo-wrapper.mly-wrapper.hide').size();
40707 if (isHidden && _mlyViewer) {
40709 .selectAll('.photo-wrapper:not(.mly-wrapper)')
40710 .classed('hide', true);
40713 .selectAll('.photo-wrapper.mly-wrapper')
40714 .classed('hide', false);
40716 _mlyViewer.resize();
40723 hideViewer: function() {
40724 _mlySelectedImage = null;
40726 if (!_mlyFallback && _mlyViewer) {
40727 _mlyViewer.getComponent('sequence').stop();
40730 var viewer = d3_select('#photoviewer');
40731 if (!viewer.empty()) viewer.datum(null);
40734 .classed('hide', true)
40735 .selectAll('.photo-wrapper')
40736 .classed('hide', true);
40738 d3_selectAll('.viewfield-group, .sequence, .icon-sign')
40739 .classed('currentView', false);
40741 return this.setStyles(null, true);
40745 parsePagination: parsePagination,
40748 updateViewer: function(imageKey, context) {
40749 if (!imageKey) return this;
40752 this.initViewer(imageKey, context);
40754 _mlyViewer.moveToKey(imageKey)
40755 .catch(function(e) { console.error('mly3', e); }); // eslint-disable-line no-console
40762 initViewer: function(imageKey, context) {
40764 if (window.Mapillary && imageKey) {
40766 baseImageSize: 320,
40774 // Disable components requiring WebGL support
40775 if (!Mapillary.isSupported() && Mapillary.isFallbackSupported()) {
40776 _mlyFallback = true;
40785 image: true, // fallback
40786 navigation: true // fallback
40790 _mlyViewer = new Mapillary.Viewer('mly', clientId, null, opts);
40791 _mlyViewer.on('nodechanged', nodeChanged);
40792 _mlyViewer.on('bearingchanged', bearingChanged);
40793 _mlyViewer.moveToKey(imageKey)
40794 .catch(function(e) { console.error('mly3', e); }); // eslint-disable-line no-console
40797 // nodeChanged: called after the viewer has changed images and is ready.
40799 // There is some logic here to batch up clicks into a _mlyClicks array
40800 // because the user might click on a lot of markers quickly and nodechanged
40801 // may be called out of order asychronously.
40803 // Clicks are added to the array in `selectedImage` and removed here.
40805 function nodeChanged(node) {
40806 if (!_mlyFallback) {
40807 _mlyViewer.getComponent('tag').removeAll(); // remove previous detections
40810 var clicks = _mlyClicks;
40811 var index = clicks.indexOf(node.key);
40812 var selectedKey = _mlySelectedImage && _mlySelectedImage.key;
40814 if (index > -1) { // `nodechanged` initiated from clicking on a marker..
40815 clicks.splice(index, 1); // remove the click
40816 // If `node.key` matches the current _mlySelectedImage, call `selectImage()`
40817 // one more time to update the detections and attribution..
40818 if (node.key === selectedKey) {
40819 that.selectImage(_mlySelectedImage, node.key, true);
40821 } else { // `nodechanged` initiated from the Mapillary viewer controls..
40822 var loc = node.computedLatLon ? [node.computedLatLon.lon, node.computedLatLon.lat] : [node.latLon.lon, node.latLon.lat];
40823 context.map().centerEase(loc);
40824 that.selectImage(undefined, node.key, true);
40828 function bearingChanged(e) {
40829 dispatch$3.call('bearingChanged', undefined, e);
40834 // Pass the image datum itself in `d` or the `imageKey` string.
40835 // This allows images to be selected from places that dont have access
40836 // to the full image datum (like the street signs layer or the js viewer)
40837 selectImage: function(d, imageKey, fromViewer) {
40838 if (!d && imageKey) {
40839 // If the user clicked on something that's not an image marker, we
40840 // might get in here.. Cache lookup can fail, e.g. if the user
40841 // clicked a streetsign, but images are loading slowly asynchronously.
40842 // We'll try to carry on anyway if there is no datum. There just
40843 // might be a delay before user sees detections, captured_at, etc.
40844 d = _mlyCache.images.forImageKey[imageKey];
40847 _mlySelectedImage = d;
40848 var viewer = d3_select('#photoviewer');
40849 if (!viewer.empty()) viewer.datum(d);
40851 imageKey = (d && d.key) || imageKey;
40852 if (!fromViewer && imageKey) {
40853 _mlyClicks.push(imageKey);
40856 this.setStyles(null, true);
40858 // if signs signs are shown, highlight the ones that appear in this image
40859 d3_selectAll('.layer-mapillary-signs .icon-sign')
40860 .classed('currentView', function(d) {
40861 return d.detections.some(function(detection) {
40862 return detection.image_key === imageKey;
40867 this.updateDetections(d);
40874 getSelectedImage: function() {
40875 return _mlySelectedImage;
40879 getSequenceKeyForImage: function(d) {
40880 var imageKey = d && d.key;
40881 return imageKey && _mlyCache.sequences.forImageKey[imageKey];
40885 // Updates the currently highlighted sequence and selected bubble.
40886 // Reset is only necessary when interacting with the viewport because
40887 // this implicitly changes the currently selected bubble/sequence
40888 setStyles: function(hovered, reset) {
40889 if (reset) { // reset all layers
40890 d3_selectAll('.viewfield-group')
40891 .classed('highlighted', false)
40892 .classed('hovered', false)
40893 .classed('currentView', false);
40895 d3_selectAll('.sequence')
40896 .classed('highlighted', false)
40897 .classed('currentView', false);
40900 var hoveredImageKey = hovered && hovered.key;
40901 var hoveredSequenceKey = this.getSequenceKeyForImage(hovered);
40902 var hoveredLineString = hoveredSequenceKey && _mlyCache.sequences.lineString[hoveredSequenceKey];
40903 var hoveredImageKeys = (hoveredLineString && hoveredLineString.properties.coordinateProperties.image_keys) || [];
40905 var viewer = d3_select('#photoviewer');
40906 var selected = viewer.empty() ? undefined : viewer.datum();
40907 var selectedImageKey = selected && selected.key;
40908 var selectedSequenceKey = this.getSequenceKeyForImage(selected);
40909 var selectedLineString = selectedSequenceKey && _mlyCache.sequences.lineString[selectedSequenceKey];
40910 var selectedImageKeys = (selectedLineString && selectedLineString.properties.coordinateProperties.image_keys) || [];
40912 // highlight sibling viewfields on either the selected or the hovered sequences
40913 var highlightedImageKeys = utilArrayUnion(hoveredImageKeys, selectedImageKeys);
40915 d3_selectAll('.layer-mapillary .viewfield-group')
40916 .classed('highlighted', function(d) { return highlightedImageKeys.indexOf(d.key) !== -1; })
40917 .classed('hovered', function(d) { return d.key === hoveredImageKey; })
40918 .classed('currentView', function(d) { return d.key === selectedImageKey; });
40920 d3_selectAll('.layer-mapillary .sequence')
40921 .classed('highlighted', function(d) { return d.properties.key === hoveredSequenceKey; })
40922 .classed('currentView', function(d) { return d.properties.key === selectedSequenceKey; });
40924 // update viewfields if needed
40925 d3_selectAll('.viewfield-group .viewfield')
40926 .attr('d', viewfieldPath);
40928 function viewfieldPath() {
40929 var d = this.parentNode.__data__;
40930 if (d.pano && d.key !== selectedImageKey) {
40931 return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
40933 return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
40941 updateDetections: function(d) {
40942 if (!_mlyViewer || _mlyFallback) return;
40944 var imageKey = d && d.key;
40945 if (!imageKey) return;
40947 var detections = _mlyCache.image_detections.forImageKey[imageKey] || [];
40948 detections.forEach(function(data) {
40949 var tag = makeTag(data);
40951 var tagComponent = _mlyViewer.getComponent('tag');
40952 tagComponent.add([tag]);
40956 function makeTag(data) {
40957 var valueParts = data.value.split('--');
40958 if (valueParts.length !== 3) return;
40960 var text = valueParts[1].replace(/-/g, ' ');
40963 // Currently only two shapes <Polygon|Point>
40964 if (data.shape.type === 'Polygon') {
40965 var polygonGeometry = new Mapillary
40967 .PolygonGeometry(data.shape.coordinates[0]);
40969 tag = new Mapillary.TagComponent.OutlineTag(
40974 textColor: 0xffff00,
40975 lineColor: 0xffff00,
40977 fillColor: 0xffff00,
40982 } else if (data.shape.type === 'Point') {
40983 var pointGeometry = new Mapillary
40985 .PointGeometry(data.shape.coordinates[0]);
40987 tag = new Mapillary.TagComponent.SpotTag(
40993 textColor: 0xffff00
41003 cache: function() {
41009 function validationIssue(attrs) {
41010 this.type = attrs.type; // required - name of rule that created the issue (e.g. 'missing_tag')
41011 this.subtype = attrs.subtype; // optional - category of the issue within the type (e.g. 'relation_type' under 'missing_tag')
41012 this.severity = attrs.severity; // required - 'warning' or 'error'
41013 this.message = attrs.message; // required - function returning localized string
41014 this.reference = attrs.reference; // optional - function(selection) to render reference information
41015 this.entityIds = attrs.entityIds; // optional - array of IDs of entities involved in the issue
41016 this.loc = attrs.loc; // optional - [lon, lat] to zoom in on to see the issue
41017 this.data = attrs.data; // optional - object containing extra data for the fixes
41018 this.fixes = attrs.fixes || []; // optional - array of validationIssueFix objects
41019 this.hash = attrs.hash; // optional - string to further differentiate the issue
41021 this.id = generateID.apply(this); // generated - see below
41022 this.autoFix = null; // generated - if autofix exists, will be set below
41024 // A unique, deterministic string hash.
41025 // Issues with identical id values are considered identical.
41026 function generateID() {
41027 var parts = [this.type];
41029 if (this.hash) { // subclasses can pass in their own differentiator
41030 parts.push(this.hash);
41033 if (this.subtype) {
41034 parts.push(this.subtype);
41037 // include the entities this issue is for
41038 // (sort them so the id is deterministic)
41039 if (this.entityIds) {
41040 var entityKeys = this.entityIds.slice().sort();
41041 parts.push.apply(parts, entityKeys);
41044 return parts.join(':');
41047 this.extent = function(resolver) {
41049 return geoExtent(this.loc);
41051 if (this.entityIds && this.entityIds.length) {
41052 return this.entityIds.reduce(function(extent, entityId) {
41053 return extent.extend(resolver.entity(entityId).extent(resolver));
41060 if (this.fixes) { // add a reference in the fixes to the issue for use in fix actions
41061 for (var i = 0; i < this.fixes.length; i++) {
41062 var fix = this.fixes[i];
41064 if (fix.autoArgs) {
41065 this.autoFix = fix;
41072 function validationIssueFix(attrs) {
41073 this.title = attrs.title; // Required
41074 this.onClick = attrs.onClick; // Required
41075 this.icon = attrs.icon; // Optional - shows 'iD-icon-wrench' if not set
41076 this.entityIds = attrs.entityIds || []; // Optional - Used for hover-higlighting.
41077 this.autoArgs = attrs.autoArgs; // Optional - pass [actions, annotation] arglist if this fix can automatically run
41079 this.issue = null; // Generated link - added by ValidationIssue constructor
41082 var buildRuleChecks = function() {
41084 equals: function (equals) {
41085 return function(tags) {
41086 return Object.keys(equals).every(function(k) {
41087 return equals[k] === tags[k];
41091 notEquals: function (notEquals) {
41092 return function(tags) {
41093 return Object.keys(notEquals).some(function(k) {
41094 return notEquals[k] !== tags[k];
41098 absence: function(absence) {
41099 return function(tags) {
41100 return Object.keys(tags).indexOf(absence) === -1;
41103 presence: function(presence) {
41104 return function(tags) {
41105 return Object.keys(tags).indexOf(presence) > -1;
41108 greaterThan: function(greaterThan) {
41109 var key = Object.keys(greaterThan)[0];
41110 var value = greaterThan[key];
41112 return function(tags) {
41113 return tags[key] > value;
41116 greaterThanEqual: function(greaterThanEqual) {
41117 var key = Object.keys(greaterThanEqual)[0];
41118 var value = greaterThanEqual[key];
41120 return function(tags) {
41121 return tags[key] >= value;
41124 lessThan: function(lessThan) {
41125 var key = Object.keys(lessThan)[0];
41126 var value = lessThan[key];
41128 return function(tags) {
41129 return tags[key] < value;
41132 lessThanEqual: function(lessThanEqual) {
41133 var key = Object.keys(lessThanEqual)[0];
41134 var value = lessThanEqual[key];
41136 return function(tags) {
41137 return tags[key] <= value;
41140 positiveRegex: function(positiveRegex) {
41141 var tagKey = Object.keys(positiveRegex)[0];
41142 var expression = positiveRegex[tagKey].join('|');
41143 var regex = new RegExp(expression);
41145 return function(tags) {
41146 return regex.test(tags[tagKey]);
41149 negativeRegex: function(negativeRegex) {
41150 var tagKey = Object.keys(negativeRegex)[0];
41151 var expression = negativeRegex[tagKey].join('|');
41152 var regex = new RegExp(expression);
41154 return function(tags) {
41155 return !regex.test(tags[tagKey]);
41161 var buildLineKeys = function() {
41177 var serviceMapRules = {
41179 this._ruleChecks = buildRuleChecks();
41180 this._validationRules = [];
41181 this._areaKeys = osmAreaKeys;
41182 this._lineKeys = buildLineKeys();
41185 // list of rules only relevant to tag checks...
41186 filterRuleChecks: function(selector) {
41187 var _ruleChecks = this._ruleChecks;
41188 return Object.keys(selector).reduce(function(rules, key) {
41189 if (['geometry', 'error', 'warning'].indexOf(key) === -1) {
41190 rules.push(_ruleChecks[key](selector[key]));
41196 // builds tagMap from mapcss-parse selector object...
41197 buildTagMap: function(selector) {
41198 var getRegexValues = function(regexes) {
41199 return regexes.map(function(regex) {
41200 return regex.replace(/\$|\^/g, '');
41204 var tagMap = Object.keys(selector).reduce(function (expectedTags, key) {
41206 var isRegex = /regex/gi.test(key);
41207 var isEqual = /equals/gi.test(key);
41209 if (isRegex || isEqual) {
41210 Object.keys(selector[key]).forEach(function(selectorKey) {
41211 values = isEqual ? [selector[key][selectorKey]] : getRegexValues(selector[key][selectorKey]);
41213 if (expectedTags.hasOwnProperty(selectorKey)) {
41214 values = values.concat(expectedTags[selectorKey]);
41217 expectedTags[selectorKey] = values;
41220 } else if (/(greater|less)Than(Equal)?|presence/g.test(key)) {
41221 var tagKey = /presence/.test(key) ? selector[key] : Object.keys(selector[key])[0];
41223 values = [selector[key][tagKey]];
41225 if (expectedTags.hasOwnProperty(tagKey)) {
41226 values = values.concat(expectedTags[tagKey]);
41229 expectedTags[tagKey] = values;
41232 return expectedTags;
41238 // inspired by osmWay#isArea()
41239 inferGeometry: function(tagMap) {
41240 var _lineKeys = this._lineKeys;
41241 var _areaKeys = this._areaKeys;
41243 var isAreaKeyBlackList = function(key) {
41244 return utilArrayIntersection(tagMap[key], Object.keys(_areaKeys[key])).length > 0;
41246 var isLineKeysWhiteList = function(key) {
41247 return utilArrayIntersection(tagMap[key], Object.keys(_lineKeys[key])).length > 0;
41250 if (tagMap.hasOwnProperty('area')) {
41251 if (tagMap.area.indexOf('yes') > -1) {
41254 if (tagMap.area.indexOf('no') > -1) {
41259 for (var key in tagMap) {
41260 if (key in _areaKeys && !isAreaKeyBlackList(key)) {
41263 if (key in _lineKeys && isLineKeysWhiteList(key)) {
41271 // adds from mapcss-parse selector check...
41272 addRule: function(selector) {
41274 // checks relevant to mapcss-selector
41275 checks: this.filterRuleChecks(selector),
41276 // true if all conditions for a tag error are true..
41277 matches: function(entity) {
41278 return this.checks.every(function(check) {
41279 return check(entity.tags);
41282 // borrowed from Way#isArea()
41283 inferredGeometry: this.inferGeometry(this.buildTagMap(selector), this._areaKeys),
41284 geometryMatches: function(entity, graph) {
41285 if (entity.type === 'node' || entity.type === 'relation') {
41286 return selector.geometry === entity.type;
41287 } else if (entity.type === 'way') {
41288 return this.inferredGeometry === entity.geometry(graph);
41291 // when geometries match and tag matches are present, return a warning...
41292 findIssues: function (entity, graph, issues) {
41293 if (this.geometryMatches(entity, graph) && this.matches(entity)) {
41294 var severity = Object.keys(selector).indexOf('error') > -1
41297 var message = selector[severity];
41298 issues.push(new validationIssue({
41300 severity: severity,
41301 message: function() {
41304 entityIds: [entity.id]
41309 this._validationRules.push(rule);
41312 clearRules: function() { this._validationRules = []; },
41314 // returns validationRules...
41315 validationRules: function() { return this._validationRules; },
41317 // returns ruleChecks
41318 ruleChecks: function() { return this._ruleChecks; }
41321 var apibase$1 = 'https://nominatim.openstreetmap.org/';
41322 var _inflight = {};
41323 var _nominatimCache;
41326 var serviceNominatim = {
41330 _nominatimCache = rbush_1();
41333 reset: function() {
41334 Object.values(_inflight).forEach(function(controller) { controller.abort(); });
41336 _nominatimCache = rbush_1();
41340 countryCode: function (location, callback) {
41341 this.reverse(location, function(err, result) {
41343 return callback(err);
41344 } else if (result.address) {
41345 return callback(null, result.address.country_code);
41347 return callback('Unable to geocode', null);
41353 reverse: function (loc, callback) {
41354 var cached = _nominatimCache.search(
41355 { minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1] }
41358 if (cached.length > 0) {
41359 if (callback) callback(null, cached[0].data);
41363 var params = { zoom: 13, format: 'json', addressdetails: 1, lat: loc[1], lon: loc[0] };
41364 var url = apibase$1 + 'reverse?' + utilQsString(params);
41366 if (_inflight[url]) return;
41367 var controller = new AbortController();
41368 _inflight[url] = controller;
41370 d3_json(url, { signal: controller.signal })
41371 .then(function(result) {
41372 delete _inflight[url];
41373 if (result && result.error) {
41374 throw new Error(result.error);
41376 var extent = geoExtent(loc).padByMeters(200);
41377 _nominatimCache.insert(Object.assign(extent.bbox(), {data: result}));
41378 if (callback) callback(null, result);
41380 .catch(function(err) {
41381 delete _inflight[url];
41382 if (err.name === 'AbortError') return;
41383 if (callback) callback(err.message);
41388 search: function (val, callback) {
41389 var searchVal = encodeURIComponent(val);
41390 var url = apibase$1 + 'search/' + searchVal + '?limit=10&format=json';
41392 if (_inflight[url]) return;
41393 var controller = new AbortController();
41394 _inflight[url] = controller;
41396 d3_json(url, { signal: controller.signal })
41397 .then(function(result) {
41398 delete _inflight[url];
41399 if (result && result.error) {
41400 throw new Error(result.error);
41402 if (callback) callback(null, result);
41404 .catch(function(err) {
41405 delete _inflight[url];
41406 if (err.name === 'AbortError') return;
41407 if (callback) callback(err.message);
41413 var apibase$2 = 'https://openstreetcam.org';
41414 var maxResults$1 = 1000;
41415 var tileZoom$1 = 14;
41416 var tiler$3 = utilTiler().zoomExtent([tileZoom$1, tileZoom$1]).skipNullIsland(true);
41417 var dispatch$4 = dispatch('loadedImages');
41418 var imgZoom = d3_zoom()
41419 .extent([[0, 0], [320, 240]])
41420 .translateExtent([[0, 0], [320, 240]])
41421 .scaleExtent([1, 15])
41422 .on('zoom', zoomPan);
41424 var _oscSelectedImage;
41427 function abortRequest$3(controller) {
41428 controller.abort();
41432 function maxPageAtZoom$1(z) {
41433 if (z < 15) return 2;
41434 if (z === 15) return 5;
41435 if (z === 16) return 10;
41436 if (z === 17) return 20;
41437 if (z === 18) return 40;
41438 if (z > 18) return 80;
41442 function loadTiles$1(which, url, projection) {
41443 var currZoom = Math.floor(geoScaleToZoom(projection.scale()));
41444 var tiles = tiler$3.getTiles(projection);
41446 // abort inflight requests that are no longer needed
41447 var cache = _oscCache[which];
41448 Object.keys(cache.inflight).forEach(function(k) {
41449 var wanted = tiles.find(function(tile) { return k.indexOf(tile.id + ',') === 0; });
41451 abortRequest$3(cache.inflight[k]);
41452 delete cache.inflight[k];
41456 tiles.forEach(function(tile) {
41457 loadNextTilePage$1(which, currZoom, url, tile);
41462 function loadNextTilePage$1(which, currZoom, url, tile) {
41463 var cache = _oscCache[which];
41464 var bbox = tile.extent.bbox();
41465 var maxPages = maxPageAtZoom$1(currZoom);
41466 var nextPage = cache.nextPage[tile.id] || 1;
41467 var params = utilQsString({
41470 // client_id: clientId,
41471 bbTopLeft: [bbox.maxY, bbox.minX].join(','),
41472 bbBottomRight: [bbox.minY, bbox.maxX].join(',')
41475 if (nextPage > maxPages) return;
41477 var id = tile.id + ',' + String(nextPage);
41478 if (cache.loaded[id] || cache.inflight[id]) return;
41480 var controller = new AbortController();
41481 cache.inflight[id] = controller;
41485 signal: controller.signal,
41487 headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
41490 d3_json(url, options)
41491 .then(function(data) {
41492 cache.loaded[id] = true;
41493 delete cache.inflight[id];
41494 if (!data || !data.currentPageItems || !data.currentPageItems.length) {
41495 throw new Error('No Data');
41498 var features = data.currentPageItems.map(function(item) {
41499 var loc = [+item.lng, +item.lat];
41502 if (which === 'images') {
41507 captured_at: (item.shot_date || item.date_added),
41508 captured_by: item.username,
41509 imagePath: item.lth_name,
41510 sequence_id: item.sequence_id,
41511 sequence_index: +item.sequence_index
41514 // cache sequence info
41515 var seq = _oscCache.sequences[d.sequence_id];
41517 seq = { rotation: 0, images: [] };
41518 _oscCache.sequences[d.sequence_id] = seq;
41520 seq.images[d.sequence_index] = d;
41524 minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1], data: d
41528 cache.rtree.load(features);
41530 if (data.currentPageItems.length === maxResults$1) { // more pages to load
41531 cache.nextPage[tile.id] = nextPage + 1;
41532 loadNextTilePage$1(which, currZoom, url, tile);
41534 cache.nextPage[tile.id] = Infinity; // no more pages to load
41537 if (which === 'images') {
41538 dispatch$4.call('loadedImages');
41541 .catch(function() {
41542 cache.loaded[id] = true;
41543 delete cache.inflight[id];
41548 // partition viewport into higher zoom tiles
41549 function partitionViewport$1(projection) {
41550 var z = geoScaleToZoom(projection.scale());
41551 var z2 = (Math.ceil(z * 2) / 2) + 2.5; // round to next 0.5 and add 2.5
41552 var tiler = utilTiler().zoomExtent([z2, z2]);
41554 return tiler.getTiles(projection)
41555 .map(function(tile) { return tile.extent; });
41559 // no more than `limit` results per partition.
41560 function searchLimited$1(limit, projection, rtree) {
41561 limit = limit || 5;
41563 return partitionViewport$1(projection)
41564 .reduce(function(result, extent) {
41565 var found = rtree.search(extent.bbox())
41567 .map(function(d) { return d.data; });
41569 return (found.length ? result.concat(found) : result);
41574 function zoomPan() {
41575 var t = event.transform;
41576 d3_select('#photoviewer .osc-image-wrap')
41577 .call(utilSetTransform, t.x, t.y, t.k);
41581 var serviceOpenstreetcam = {
41588 this.event = utilRebind(this, dispatch$4, 'on');
41591 reset: function() {
41593 Object.values(_oscCache.images.inflight).forEach(abortRequest$3);
41597 images: { inflight: {}, loaded: {}, nextPage: {}, rtree: rbush_1() },
41601 _oscSelectedImage = null;
41605 images: function(projection) {
41607 return searchLimited$1(limit, projection, _oscCache.images.rtree);
41611 sequences: function(projection) {
41612 var viewport = projection.clipExtent();
41613 var min = [viewport[0][0], viewport[1][1]];
41614 var max = [viewport[1][0], viewport[0][1]];
41615 var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
41616 var sequenceKeys = {};
41618 // all sequences for images in viewport
41619 _oscCache.images.rtree.search(bbox)
41620 .forEach(function(d) { sequenceKeys[d.data.sequence_id] = true; });
41622 // make linestrings from those sequences
41623 var lineStrings = [];
41624 Object.keys(sequenceKeys)
41625 .forEach(function(sequenceKey) {
41626 var seq = _oscCache.sequences[sequenceKey];
41627 var images = seq && seq.images;
41630 type: 'LineString',
41631 coordinates: images.map(function (d) { return d.loc; }).filter(Boolean),
41632 properties: { key: sequenceKey }
41636 return lineStrings;
41640 loadImages: function(projection) {
41641 var url = apibase$2 + '/1.0/list/nearby-photos/';
41642 loadTiles$1('images', url, projection);
41646 loadViewer: function(context) {
41650 var wrap = d3_select('#photoviewer').selectAll('.osc-wrapper')
41653 var wrapEnter = wrap.enter()
41655 .attr('class', 'photo-wrapper osc-wrapper')
41656 .classed('hide', true)
41658 .on('dblclick.zoom', null);
41662 .attr('class', 'photo-attribution fillD');
41664 var controlsEnter = wrapEnter
41666 .attr('class', 'photo-controls-wrap')
41668 .attr('class', 'photo-controls');
41672 .on('click.back', step(-1))
41677 .on('click.rotate-ccw', rotate(-90))
41682 .on('click.rotate-cw', rotate(90))
41687 .on('click.forward', step(1))
41692 .attr('class', 'osc-image-wrap');
41695 // Register viewer resize handler
41696 context.ui().photoviewer.on('resize', function(dimensions) {
41697 imgZoom = d3_zoom()
41698 .extent([[0, 0], dimensions])
41699 .translateExtent([[0, 0], dimensions])
41700 .scaleExtent([1, 15])
41701 .on('zoom', zoomPan);
41705 function rotate(deg) {
41706 return function() {
41707 if (!_oscSelectedImage) return;
41708 var sequenceKey = _oscSelectedImage.sequence_id;
41709 var sequence = _oscCache.sequences[sequenceKey];
41710 if (!sequence) return;
41712 var r = sequence.rotation || 0;
41715 if (r > 180) r -= 360;
41716 if (r < -180) r += 360;
41717 sequence.rotation = r;
41719 var wrap = d3_select('#photoviewer .osc-wrapper');
41724 .call(imgZoom.transform, identity$8);
41726 wrap.selectAll('.osc-image')
41729 .style('transform', 'rotate(' + r + 'deg)');
41733 function step(stepBy) {
41734 return function() {
41735 if (!_oscSelectedImage) return;
41736 var sequenceKey = _oscSelectedImage.sequence_id;
41737 var sequence = _oscCache.sequences[sequenceKey];
41738 if (!sequence) return;
41740 var nextIndex = _oscSelectedImage.sequence_index + stepBy;
41741 var nextImage = sequence.images[nextIndex];
41742 if (!nextImage) return;
41744 context.map().centerEase(nextImage.loc);
41747 .selectImage(nextImage)
41748 .updateViewer(nextImage);
41754 showViewer: function() {
41755 var viewer = d3_select('#photoviewer')
41756 .classed('hide', false);
41758 var isHidden = viewer.selectAll('.photo-wrapper.osc-wrapper.hide').size();
41762 .selectAll('.photo-wrapper:not(.osc-wrapper)')
41763 .classed('hide', true);
41766 .selectAll('.photo-wrapper.osc-wrapper')
41767 .classed('hide', false);
41774 hideViewer: function() {
41775 _oscSelectedImage = null;
41777 var viewer = d3_select('#photoviewer');
41778 if (!viewer.empty()) viewer.datum(null);
41781 .classed('hide', true)
41782 .selectAll('.photo-wrapper')
41783 .classed('hide', true);
41785 d3_selectAll('.viewfield-group, .sequence, .icon-sign')
41786 .classed('currentView', false);
41788 return this.setStyles(null, true);
41792 updateViewer: function(d) {
41793 var wrap = d3_select('#photoviewer .osc-wrapper');
41794 var imageWrap = wrap.selectAll('.osc-image-wrap');
41795 var attribution = wrap.selectAll('.photo-attribution').html('');
41800 .call(imgZoom.transform, identity$8);
41803 .selectAll('.osc-image')
41807 var sequence = _oscCache.sequences[d.sequence_id];
41808 var r = (sequence && sequence.rotation) || 0;
41812 .attr('class', 'osc-image')
41813 .attr('src', apibase$2 + '/' + d.imagePath)
41814 .style('transform', 'rotate(' + r + 'deg)');
41816 if (d.captured_by) {
41819 .attr('class', 'captured_by')
41820 .attr('target', '_blank')
41821 .attr('href', 'https://openstreetcam.org/user/' + encodeURIComponent(d.captured_by))
41822 .text('@' + d.captured_by);
41829 if (d.captured_at) {
41832 .attr('class', 'captured_at')
41833 .text(localeDateString(d.captured_at));
41842 .attr('class', 'image-link')
41843 .attr('target', '_blank')
41844 .attr('href', 'https://openstreetcam.org/details/' + d.sequence_id + '/' + d.sequence_index)
41845 .text('openstreetcam.org');
41851 function localeDateString(s) {
41852 if (!s) return null;
41853 var detected = utilDetect();
41854 var options = { day: 'numeric', month: 'short', year: 'numeric' };
41855 var d = new Date(s);
41856 if (isNaN(d.getTime())) return null;
41857 return d.toLocaleDateString(detected.locale, options);
41862 selectImage: function(d) {
41863 _oscSelectedImage = d;
41864 var viewer = d3_select('#photoviewer');
41865 if (!viewer.empty()) viewer.datum(d);
41867 this.setStyles(null, true);
41869 d3_selectAll('.icon-sign')
41870 .classed('currentView', false);
41876 getSelectedImage: function() {
41877 return _oscSelectedImage;
41881 getSequenceKeyForImage: function(d) {
41882 return d && d.sequence_id;
41886 // Updates the currently highlighted sequence and selected bubble.
41887 // Reset is only necessary when interacting with the viewport because
41888 // this implicitly changes the currently selected bubble/sequence
41889 setStyles: function(hovered, reset) {
41890 if (reset) { // reset all layers
41891 d3_selectAll('.viewfield-group')
41892 .classed('highlighted', false)
41893 .classed('hovered', false)
41894 .classed('currentView', false);
41896 d3_selectAll('.sequence')
41897 .classed('highlighted', false)
41898 .classed('currentView', false);
41901 var hoveredImageKey = hovered && hovered.key;
41902 var hoveredSequenceKey = this.getSequenceKeyForImage(hovered);
41903 var hoveredSequence = hoveredSequenceKey && _oscCache.sequences[hoveredSequenceKey];
41904 var hoveredImageKeys = (hoveredSequence && hoveredSequence.images.map(function (d) { return d.key; })) || [];
41906 var viewer = d3_select('#photoviewer');
41907 var selected = viewer.empty() ? undefined : viewer.datum();
41908 var selectedImageKey = selected && selected.key;
41909 var selectedSequenceKey = this.getSequenceKeyForImage(selected);
41910 var selectedSequence = selectedSequenceKey && _oscCache.sequences[selectedSequenceKey];
41911 var selectedImageKeys = (selectedSequence && selectedSequence.images.map(function (d) { return d.key; })) || [];
41913 // highlight sibling viewfields on either the selected or the hovered sequences
41914 var highlightedImageKeys = utilArrayUnion(hoveredImageKeys, selectedImageKeys);
41916 d3_selectAll('.layer-openstreetcam .viewfield-group')
41917 .classed('highlighted', function(d) { return highlightedImageKeys.indexOf(d.key) !== -1; })
41918 .classed('hovered', function(d) { return d.key === hoveredImageKey; })
41919 .classed('currentView', function(d) { return d.key === selectedImageKey; });
41921 d3_selectAll('.layer-openstreetcam .sequence')
41922 .classed('highlighted', function(d) { return d.properties.key === hoveredSequenceKey; })
41923 .classed('currentView', function(d) { return d.properties.key === selectedSequenceKey; });
41925 // update viewfields if needed
41926 d3_selectAll('.viewfield-group .viewfield')
41927 .attr('d', viewfieldPath);
41929 function viewfieldPath() {
41930 var d = this.parentNode.__data__;
41931 if (d.pano && d.key !== selectedImageKey) {
41932 return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
41934 return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
41942 cache: function() {
41949 * Checks if `value` is the
41950 * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
41951 * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
41957 * @param {*} value The value to check.
41958 * @returns {boolean} Returns `true` if `value` is an object, else `false`.
41964 * _.isObject([1, 2, 3]);
41967 * _.isObject(_.noop);
41970 * _.isObject(null);
41973 function isObject$1(value) {
41974 var type = typeof value;
41975 return value != null && (type == 'object' || type == 'function');
41978 /** Detect free variable `global` from Node.js. */
41979 var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
41981 /** Detect free variable `self`. */
41982 var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
41984 /** Used as a reference to the global object. */
41985 var root$3 = freeGlobal || freeSelf || Function('return this')();
41988 * Gets the timestamp of the number of milliseconds that have elapsed since
41989 * the Unix epoch (1 January 1970 00:00:00 UTC).
41995 * @returns {number} Returns the timestamp.
41998 * _.defer(function(stamp) {
41999 * console.log(_.now() - stamp);
42001 * // => Logs the number of milliseconds it took for the deferred invocation.
42003 var now$1 = function() {
42004 return root$3.Date.now();
42007 /** Built-in value references. */
42008 var Symbol$1 = root$3.Symbol;
42010 /** Used for built-in method references. */
42011 var objectProto = Object.prototype;
42013 /** Used to check objects for own properties. */
42014 var hasOwnProperty$1 = objectProto.hasOwnProperty;
42017 * Used to resolve the
42018 * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
42021 var nativeObjectToString = objectProto.toString;
42023 /** Built-in value references. */
42024 var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : undefined;
42027 * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
42030 * @param {*} value The value to query.
42031 * @returns {string} Returns the raw `toStringTag`.
42033 function getRawTag(value) {
42034 var isOwn = hasOwnProperty$1.call(value, symToStringTag),
42035 tag = value[symToStringTag];
42038 value[symToStringTag] = undefined;
42039 var unmasked = true;
42042 var result = nativeObjectToString.call(value);
42045 value[symToStringTag] = tag;
42047 delete value[symToStringTag];
42053 /** Used for built-in method references. */
42054 var objectProto$1 = Object.prototype;
42057 * Used to resolve the
42058 * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
42061 var nativeObjectToString$1 = objectProto$1.toString;
42064 * Converts `value` to a string using `Object.prototype.toString`.
42067 * @param {*} value The value to convert.
42068 * @returns {string} Returns the converted string.
42070 function objectToString(value) {
42071 return nativeObjectToString$1.call(value);
42074 /** `Object#toString` result references. */
42075 var nullTag = '[object Null]',
42076 undefinedTag = '[object Undefined]';
42078 /** Built-in value references. */
42079 var symToStringTag$1 = Symbol$1 ? Symbol$1.toStringTag : undefined;
42082 * The base implementation of `getTag` without fallbacks for buggy environments.
42085 * @param {*} value The value to query.
42086 * @returns {string} Returns the `toStringTag`.
42088 function baseGetTag(value) {
42089 if (value == null) {
42090 return value === undefined ? undefinedTag : nullTag;
42092 return (symToStringTag$1 && symToStringTag$1 in Object(value))
42094 : objectToString(value);
42098 * Checks if `value` is object-like. A value is object-like if it's not `null`
42099 * and has a `typeof` result of "object".
42105 * @param {*} value The value to check.
42106 * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
42109 * _.isObjectLike({});
42112 * _.isObjectLike([1, 2, 3]);
42115 * _.isObjectLike(_.noop);
42118 * _.isObjectLike(null);
42121 function isObjectLike(value) {
42122 return value != null && typeof value == 'object';
42125 /** `Object#toString` result references. */
42126 var symbolTag = '[object Symbol]';
42129 * Checks if `value` is classified as a `Symbol` primitive or object.
42135 * @param {*} value The value to check.
42136 * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
42139 * _.isSymbol(Symbol.iterator);
42142 * _.isSymbol('abc');
42145 function isSymbol$2(value) {
42146 return typeof value == 'symbol' ||
42147 (isObjectLike(value) && baseGetTag(value) == symbolTag);
42150 /** Used as references for various `Number` constants. */
42153 /** Used to match leading and trailing whitespace. */
42154 var reTrim = /^\s+|\s+$/g;
42156 /** Used to detect bad signed hexadecimal string values. */
42157 var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
42159 /** Used to detect binary string values. */
42160 var reIsBinary = /^0b[01]+$/i;
42162 /** Used to detect octal string values. */
42163 var reIsOctal = /^0o[0-7]+$/i;
42165 /** Built-in method references without a dependency on `root`. */
42166 var freeParseInt = parseInt;
42169 * Converts `value` to a number.
42175 * @param {*} value The value to process.
42176 * @returns {number} Returns the number.
42182 * _.toNumber(Number.MIN_VALUE);
42185 * _.toNumber(Infinity);
42188 * _.toNumber('3.2');
42191 function toNumber(value) {
42192 if (typeof value == 'number') {
42195 if (isSymbol$2(value)) {
42198 if (isObject$1(value)) {
42199 var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
42200 value = isObject$1(other) ? (other + '') : other;
42202 if (typeof value != 'string') {
42203 return value === 0 ? value : +value;
42205 value = value.replace(reTrim, '');
42206 var isBinary = reIsBinary.test(value);
42207 return (isBinary || reIsOctal.test(value))
42208 ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
42209 : (reIsBadHex.test(value) ? NAN : +value);
42212 /** Error message constants. */
42213 var FUNC_ERROR_TEXT = 'Expected a function';
42215 /* Built-in method references for those with the same name as other `lodash` methods. */
42216 var nativeMax = Math.max,
42217 nativeMin = Math.min;
42220 * Creates a debounced function that delays invoking `func` until after `wait`
42221 * milliseconds have elapsed since the last time the debounced function was
42222 * invoked. The debounced function comes with a `cancel` method to cancel
42223 * delayed `func` invocations and a `flush` method to immediately invoke them.
42224 * Provide `options` to indicate whether `func` should be invoked on the
42225 * leading and/or trailing edge of the `wait` timeout. The `func` is invoked
42226 * with the last arguments provided to the debounced function. Subsequent
42227 * calls to the debounced function return the result of the last `func`
42230 * **Note:** If `leading` and `trailing` options are `true`, `func` is
42231 * invoked on the trailing edge of the timeout only if the debounced function
42232 * is invoked more than once during the `wait` timeout.
42234 * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
42235 * until to the next tick, similar to `setTimeout` with a timeout of `0`.
42237 * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
42238 * for details over the differences between `_.debounce` and `_.throttle`.
42243 * @category Function
42244 * @param {Function} func The function to debounce.
42245 * @param {number} [wait=0] The number of milliseconds to delay.
42246 * @param {Object} [options={}] The options object.
42247 * @param {boolean} [options.leading=false]
42248 * Specify invoking on the leading edge of the timeout.
42249 * @param {number} [options.maxWait]
42250 * The maximum time `func` is allowed to be delayed before it's invoked.
42251 * @param {boolean} [options.trailing=true]
42252 * Specify invoking on the trailing edge of the timeout.
42253 * @returns {Function} Returns the new debounced function.
42256 * // Avoid costly calculations while the window size is in flux.
42257 * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
42259 * // Invoke `sendMail` when clicked, debouncing subsequent calls.
42260 * jQuery(element).on('click', _.debounce(sendMail, 300, {
42262 * 'trailing': false
42265 * // Ensure `batchLog` is invoked once after 1 second of debounced calls.
42266 * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
42267 * var source = new EventSource('/stream');
42268 * jQuery(source).on('message', debounced);
42270 * // Cancel the trailing debounced invocation.
42271 * jQuery(window).on('popstate', debounced.cancel);
42273 function debounce(func, wait, options) {
42280 lastInvokeTime = 0,
42285 if (typeof func != 'function') {
42286 throw new TypeError(FUNC_ERROR_TEXT);
42288 wait = toNumber(wait) || 0;
42289 if (isObject$1(options)) {
42290 leading = !!options.leading;
42291 maxing = 'maxWait' in options;
42292 maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
42293 trailing = 'trailing' in options ? !!options.trailing : trailing;
42296 function invokeFunc(time) {
42297 var args = lastArgs,
42298 thisArg = lastThis;
42300 lastArgs = lastThis = undefined;
42301 lastInvokeTime = time;
42302 result = func.apply(thisArg, args);
42306 function leadingEdge(time) {
42307 // Reset any `maxWait` timer.
42308 lastInvokeTime = time;
42309 // Start the timer for the trailing edge.
42310 timerId = setTimeout(timerExpired, wait);
42311 // Invoke the leading edge.
42312 return leading ? invokeFunc(time) : result;
42315 function remainingWait(time) {
42316 var timeSinceLastCall = time - lastCallTime,
42317 timeSinceLastInvoke = time - lastInvokeTime,
42318 timeWaiting = wait - timeSinceLastCall;
42321 ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)
42325 function shouldInvoke(time) {
42326 var timeSinceLastCall = time - lastCallTime,
42327 timeSinceLastInvoke = time - lastInvokeTime;
42329 // Either this is the first call, activity has stopped and we're at the
42330 // trailing edge, the system time has gone backwards and we're treating
42331 // it as the trailing edge, or we've hit the `maxWait` limit.
42332 return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||
42333 (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));
42336 function timerExpired() {
42337 var time = now$1();
42338 if (shouldInvoke(time)) {
42339 return trailingEdge(time);
42341 // Restart the timer.
42342 timerId = setTimeout(timerExpired, remainingWait(time));
42345 function trailingEdge(time) {
42346 timerId = undefined;
42348 // Only invoke if we have `lastArgs` which means `func` has been
42349 // debounced at least once.
42350 if (trailing && lastArgs) {
42351 return invokeFunc(time);
42353 lastArgs = lastThis = undefined;
42357 function cancel() {
42358 if (timerId !== undefined) {
42359 clearTimeout(timerId);
42361 lastInvokeTime = 0;
42362 lastArgs = lastCallTime = lastThis = timerId = undefined;
42366 return timerId === undefined ? result : trailingEdge(now$1());
42369 function debounced() {
42370 var time = now$1(),
42371 isInvoking = shouldInvoke(time);
42373 lastArgs = arguments;
42375 lastCallTime = time;
42378 if (timerId === undefined) {
42379 return leadingEdge(lastCallTime);
42382 // Handle invocations in a tight loop.
42383 timerId = setTimeout(timerExpired, wait);
42384 return invokeFunc(lastCallTime);
42387 if (timerId === undefined) {
42388 timerId = setTimeout(timerExpired, wait);
42392 debounced.cancel = cancel;
42393 debounced.flush = flush;
42397 /** Error message constants. */
42398 var FUNC_ERROR_TEXT$1 = 'Expected a function';
42401 * Creates a throttled function that only invokes `func` at most once per
42402 * every `wait` milliseconds. The throttled function comes with a `cancel`
42403 * method to cancel delayed `func` invocations and a `flush` method to
42404 * immediately invoke them. Provide `options` to indicate whether `func`
42405 * should be invoked on the leading and/or trailing edge of the `wait`
42406 * timeout. The `func` is invoked with the last arguments provided to the
42407 * throttled function. Subsequent calls to the throttled function return the
42408 * result of the last `func` invocation.
42410 * **Note:** If `leading` and `trailing` options are `true`, `func` is
42411 * invoked on the trailing edge of the timeout only if the throttled function
42412 * is invoked more than once during the `wait` timeout.
42414 * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
42415 * until to the next tick, similar to `setTimeout` with a timeout of `0`.
42417 * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
42418 * for details over the differences between `_.throttle` and `_.debounce`.
42423 * @category Function
42424 * @param {Function} func The function to throttle.
42425 * @param {number} [wait=0] The number of milliseconds to throttle invocations to.
42426 * @param {Object} [options={}] The options object.
42427 * @param {boolean} [options.leading=true]
42428 * Specify invoking on the leading edge of the timeout.
42429 * @param {boolean} [options.trailing=true]
42430 * Specify invoking on the trailing edge of the timeout.
42431 * @returns {Function} Returns the new throttled function.
42434 * // Avoid excessively updating the position while scrolling.
42435 * jQuery(window).on('scroll', _.throttle(updatePosition, 100));
42437 * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.
42438 * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });
42439 * jQuery(element).on('click', throttled);
42441 * // Cancel the trailing throttled invocation.
42442 * jQuery(window).on('popstate', throttled.cancel);
42444 function throttle(func, wait, options) {
42445 var leading = true,
42448 if (typeof func != 'function') {
42449 throw new TypeError(FUNC_ERROR_TEXT$1);
42451 if (isObject$1(options)) {
42452 leading = 'leading' in options ? !!options.leading : leading;
42453 trailing = 'trailing' in options ? !!options.trailing : trailing;
42455 return debounce(func, wait, {
42456 'leading': leading,
42458 'trailing': trailing
42462 var hashes = createCommonjsModule(function (module, exports) {
42464 * jshashes - https://github.com/h2non/jshashes
42465 * Released under the "New BSD" license
42467 * Algorithms specification:
42469 * MD5 - http://www.ietf.org/rfc/rfc1321.txt
42470 * RIPEMD-160 - http://homes.esat.kuleuven.be/~bosselae/ripemd160.html
42471 * SHA1 - http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf
42472 * SHA256 - http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf
42473 * SHA512 - http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf
42474 * HMAC - http://www.ietf.org/rfc/rfc2104.txt
42479 function utf8Encode(str) {
42480 var x, y, output = '',
42484 if (str && str.length) {
42486 while ((i += 1) < l) {
42487 /* Decode utf-16 surrogate pairs */
42488 x = str.charCodeAt(i);
42489 y = i + 1 < l ? str.charCodeAt(i + 1) : 0;
42490 if (0xD800 <= x && x <= 0xDBFF && 0xDC00 <= y && y <= 0xDFFF) {
42491 x = 0x10000 + ((x & 0x03FF) << 10) + (y & 0x03FF);
42494 /* Encode output as utf-8 */
42496 output += String.fromCharCode(x);
42497 } else if (x <= 0x7FF) {
42498 output += String.fromCharCode(0xC0 | ((x >>> 6) & 0x1F),
42499 0x80 | (x & 0x3F));
42500 } else if (x <= 0xFFFF) {
42501 output += String.fromCharCode(0xE0 | ((x >>> 12) & 0x0F),
42502 0x80 | ((x >>> 6) & 0x3F),
42503 0x80 | (x & 0x3F));
42504 } else if (x <= 0x1FFFFF) {
42505 output += String.fromCharCode(0xF0 | ((x >>> 18) & 0x07),
42506 0x80 | ((x >>> 12) & 0x3F),
42507 0x80 | ((x >>> 6) & 0x3F),
42508 0x80 | (x & 0x3F));
42515 function utf8Decode(str) {
42516 var i, ac, c1, c2, c3, arr = [],
42518 i = ac = c1 = c2 = c3 = 0;
42520 if (str && str.length) {
42525 c1 = str.charCodeAt(i);
42528 arr[ac] = String.fromCharCode(c1);
42530 } else if (c1 > 191 && c1 < 224) {
42531 c2 = str.charCodeAt(i + 1);
42532 arr[ac] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));
42535 c2 = str.charCodeAt(i + 1);
42536 c3 = str.charCodeAt(i + 2);
42537 arr[ac] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
42542 return arr.join('');
42546 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
42547 * to work around bugs in some JS interpreters.
42550 function safe_add(x, y) {
42551 var lsw = (x & 0xFFFF) + (y & 0xFFFF),
42552 msw = (x >> 16) + (y >> 16) + (lsw >> 16);
42553 return (msw << 16) | (lsw & 0xFFFF);
42557 * Bitwise rotate a 32-bit number to the left.
42560 function bit_rol(num, cnt) {
42561 return (num << cnt) | (num >>> (32 - cnt));
42565 * Convert a raw string to a hex string
42568 function rstr2hex(input, hexcase) {
42569 var hex_tab = hexcase ? '0123456789ABCDEF' : '0123456789abcdef',
42573 for (; i < l; i += 1) {
42574 x = input.charCodeAt(i);
42575 output += hex_tab.charAt((x >>> 4) & 0x0F) + hex_tab.charAt(x & 0x0F);
42581 * Convert an array of big-endian words to a string
42584 function binb2rstr(input) {
42585 var i, l = input.length * 32,
42587 for (i = 0; i < l; i += 8) {
42588 output += String.fromCharCode((input[i >> 5] >>> (24 - i % 32)) & 0xFF);
42594 * Convert an array of little-endian words to a string
42597 function binl2rstr(input) {
42598 var i, l = input.length * 32,
42600 for (i = 0; i < l; i += 8) {
42601 output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF);
42607 * Convert a raw string to an array of little-endian words
42608 * Characters >255 have their high-byte silently ignored.
42611 function rstr2binl(input) {
42612 var i, l = input.length * 8,
42613 output = Array(input.length >> 2),
42614 lo = output.length;
42615 for (i = 0; i < lo; i += 1) {
42618 for (i = 0; i < l; i += 8) {
42619 output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (i % 32);
42625 * Convert a raw string to an array of big-endian words
42626 * Characters >255 have their high-byte silently ignored.
42629 function rstr2binb(input) {
42630 var i, l = input.length * 8,
42631 output = Array(input.length >> 2),
42632 lo = output.length;
42633 for (i = 0; i < lo; i += 1) {
42636 for (i = 0; i < l; i += 8) {
42637 output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (24 - i % 32);
42643 * Convert a raw string to an arbitrary string encoding
42646 function rstr2any(input, encoding) {
42647 var divisor = encoding.length,
42648 remainders = Array(),
42649 i, q, x, ld, quotient, dividend, output, full_length;
42651 /* Convert to an array of 16-bit big-endian values, forming the dividend */
42652 dividend = Array(Math.ceil(input.length / 2));
42653 ld = dividend.length;
42654 for (i = 0; i < ld; i += 1) {
42655 dividend[i] = (input.charCodeAt(i * 2) << 8) | input.charCodeAt(i * 2 + 1);
42659 * Repeatedly perform a long division. The binary array forms the dividend,
42660 * the length of the encoding is the divisor. Once computed, the quotient
42661 * forms the dividend for the next step. We stop when the dividend is zerHashes.
42662 * All remainders are stored for later use.
42664 while (dividend.length > 0) {
42665 quotient = Array();
42667 for (i = 0; i < dividend.length; i += 1) {
42668 x = (x << 16) + dividend[i];
42669 q = Math.floor(x / divisor);
42671 if (quotient.length > 0 || q > 0) {
42672 quotient[quotient.length] = q;
42675 remainders[remainders.length] = x;
42676 dividend = quotient;
42679 /* Convert the remainders to the output string */
42681 for (i = remainders.length - 1; i >= 0; i--) {
42682 output += encoding.charAt(remainders[i]);
42685 /* Append leading zero equivalents */
42686 full_length = Math.ceil(input.length * 8 / (Math.log(encoding.length) / Math.log(2)));
42687 for (i = output.length; i < full_length; i += 1) {
42688 output = encoding[0] + output;
42694 * Convert a raw string to a base-64 string
42697 function rstr2b64(input, b64pad) {
42698 var tab = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',
42700 len = input.length,
42702 b64pad = b64pad || '=';
42703 for (i = 0; i < len; i += 3) {
42704 triplet = (input.charCodeAt(i) << 16) | (i + 1 < len ? input.charCodeAt(i + 1) << 8 : 0) | (i + 2 < len ? input.charCodeAt(i + 2) : 0);
42705 for (j = 0; j < 4; j += 1) {
42706 if (i * 8 + j * 6 > input.length * 8) {
42709 output += tab.charAt((triplet >>> 6 * (3 - j)) & 0x3F);
42718 * @property {String} version
42727 Base64: function() {
42728 // private properties
42729 var tab = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',
42730 pad = '=', // default pad according with the RFC standard
42731 utf8 = true; // by default enable UTF-8 support encoding
42733 // public method for encoding
42734 this.encode = function(input) {
42737 len = input.length;
42740 input = (utf8) ? utf8Encode(input) : input;
42742 for (i = 0; i < len; i += 3) {
42743 triplet = (input.charCodeAt(i) << 16) | (i + 1 < len ? input.charCodeAt(i + 1) << 8 : 0) | (i + 2 < len ? input.charCodeAt(i + 2) : 0);
42744 for (j = 0; j < 4; j += 1) {
42745 if (i * 8 + j * 6 > len * 8) {
42748 output += tab.charAt((triplet >>> 6 * (3 - j)) & 0x3F);
42755 // public method for decoding
42756 this.decode = function(input) {
42757 // var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
42758 var i, o1, o2, o3, h1, h2, h3, h4, bits, ac,
42766 input = input.replace(new RegExp('\\' + pad, 'gi'), ''); // use '='
42769 do { // unpack four hexets into three octets using index points in b64
42770 h1 = tab.indexOf(input.charAt(i += 1));
42771 h2 = tab.indexOf(input.charAt(i += 1));
42772 h3 = tab.indexOf(input.charAt(i += 1));
42773 h4 = tab.indexOf(input.charAt(i += 1));
42775 bits = h1 << 18 | h2 << 12 | h3 << 6 | h4;
42777 o1 = bits >> 16 & 0xff;
42778 o2 = bits >> 8 & 0xff;
42783 arr[ac] = String.fromCharCode(o1);
42784 } else if (h4 === 64) {
42785 arr[ac] = String.fromCharCode(o1, o2);
42787 arr[ac] = String.fromCharCode(o1, o2, o3);
42789 } while (i < input.length);
42791 dec = arr.join('');
42792 dec = (utf8) ? utf8Decode(dec) : dec;
42797 // set custom pad string
42798 this.setPad = function(str) {
42802 // set custom tab string characters
42803 this.setTab = function(str) {
42807 this.setUTF8 = function(bool) {
42808 if (typeof bool === 'boolean') {
42816 * CRC-32 calculation
42820 * @param {String} str Input String
42823 CRC32: function(str) {
42828 str = utf8Encode(str);
42831 '00000000 77073096 EE0E612C 990951BA 076DC419 706AF48F E963A535 9E6495A3 0EDB8832 ',
42832 '79DCB8A4 E0D5E91E 97D2D988 09B64C2B 7EB17CBD E7B82D07 90BF1D91 1DB71064 6AB020F2 F3B97148 ',
42833 '84BE41DE 1ADAD47D 6DDDE4EB F4D4B551 83D385C7 136C9856 646BA8C0 FD62F97A 8A65C9EC 14015C4F ',
42834 '63066CD9 FA0F3D63 8D080DF5 3B6E20C8 4C69105E D56041E4 A2677172 3C03E4D1 4B04D447 D20D85FD ',
42835 'A50AB56B 35B5A8FA 42B2986C DBBBC9D6 ACBCF940 32D86CE3 45DF5C75 DCD60DCF ABD13D59 26D930AC ',
42836 '51DE003A C8D75180 BFD06116 21B4F4B5 56B3C423 CFBA9599 B8BDA50F 2802B89E 5F058808 C60CD9B2 ',
42837 'B10BE924 2F6F7C87 58684C11 C1611DAB B6662D3D 76DC4190 01DB7106 98D220BC EFD5102A 71B18589 ',
42838 '06B6B51F 9FBFE4A5 E8B8D433 7807C9A2 0F00F934 9609A88E E10E9818 7F6A0DBB 086D3D2D 91646C97 ',
42839 'E6635C01 6B6B51F4 1C6C6162 856530D8 F262004E 6C0695ED 1B01A57B 8208F4C1 F50FC457 65B0D9C6 ',
42840 '12B7E950 8BBEB8EA FCB9887C 62DD1DDF 15DA2D49 8CD37CF3 FBD44C65 4DB26158 3AB551CE A3BC0074 ',
42841 'D4BB30E2 4ADFA541 3DD895D7 A4D1C46D D3D6F4FB 4369E96A 346ED9FC AD678846 DA60B8D0 44042D73 ',
42842 '33031DE5 AA0A4C5F DD0D7CC9 5005713C 270241AA BE0B1010 C90C2086 5768B525 206F85B3 B966D409 ',
42843 'CE61E49F 5EDEF90E 29D9C998 B0D09822 C7D7A8B4 59B33D17 2EB40D81 B7BD5C3B C0BA6CAD EDB88320 ',
42844 '9ABFB3B6 03B6E20C 74B1D29A EAD54739 9DD277AF 04DB2615 73DC1683 E3630B12 94643B84 0D6D6A3E ',
42845 '7A6A5AA8 E40ECF0B 9309FF9D 0A00AE27 7D079EB1 F00F9344 8708A3D2 1E01F268 6906C2FE F762575D ',
42846 '806567CB 196C3671 6E6B06E7 FED41B76 89D32BE0 10DA7A5A 67DD4ACC F9B9DF6F 8EBEEFF9 17B7BE43 ',
42847 '60B08ED5 D6D6A3E8 A1D1937E 38D8C2C4 4FDFF252 D1BB67F1 A6BC5767 3FB506DD 48B2364B D80D2BDA ',
42848 'AF0A1B4C 36034AF6 41047A60 DF60EFC3 A867DF55 316E8EEF 4669BE79 CB61B38C BC66831A 256FD2A0 ',
42849 '5268E236 CC0C7795 BB0B4703 220216B9 5505262F C5BA3BBE B2BD0B28 2BB45A92 5CB36A04 C2D7FFA7 ',
42850 'B5D0CF31 2CD99E8B 5BDEAE1D 9B64C2B0 EC63F226 756AA39C 026D930A 9C0906A9 EB0E363F 72076785 ',
42851 '05005713 95BF4A82 E2B87A14 7BB12BAE 0CB61B38 92D28E9B E5D5BE0D 7CDCEFB7 0BDBDF21 86D3D2D4 ',
42852 'F1D4E242 68DDB3F8 1FDA836E 81BE16CD F6B9265B 6FB077E1 18B74777 88085AE6 FF0F6A70 66063BCA ',
42853 '11010B5C 8F659EFF F862AE69 616BFFD3 166CCF45 A00AE278 D70DD2EE 4E048354 3903B3C2 A7672661 ',
42854 'D06016F7 4969474D 3E6E77DB AED16A4A D9D65ADC 40DF0B66 37D83BF0 A9BCAE53 DEBB9EC5 47B2CF7F ',
42855 '30B5FFE9 BDBDF21C CABAC28A 53B39330 24B4A3A6 BAD03605 CDD70693 54DE5729 23D967BF B3667A2E ',
42856 'C4614AB8 5D681B02 2A6F2B94 B40BBE37 C30C8EA1 5A05DF1B 2D02EF8D'
42860 for (i = 0, iTop = str.length; i < iTop; i += 1) {
42861 y = (crc ^ str.charCodeAt(i)) & 0xFF;
42862 x = '0x' + table.substr(y * 9, 8);
42863 crc = (crc >>> 8) ^ x;
42865 // always return a positive number (that's what >>> 0 does)
42866 return (crc ^ (-1)) >>> 0;
42872 * @param {Object} [config]
42874 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
42875 * Digest Algorithm, as defined in RFC 1321.
42876 * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
42877 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
42878 * See <http://pajhome.org.uk/crypt/md5> for more infHashes.
42880 MD5: function(options) {
42882 * Private config properties. You may need to tweak these to be compatible with
42883 * the server-side, but the defaults work in most cases.
42884 * See {@link Hashes.MD5#method-setUpperCase} and {@link Hashes.SHA1#method-setUpperCase}
42886 var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, // hexadecimal output case format. false - lowercase; true - uppercase
42887 b64pad = (options && typeof options.pad === 'string') ? options.pad : '=', // base-64 pad character. Defaults to '=' for strict RFC compliance
42888 utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true; // enable/disable utf8 encoding
42890 // privileged (public) methods
42891 this.hex = function(s) {
42892 return rstr2hex(rstr(s, utf8), hexcase);
42894 this.b64 = function(s) {
42895 return rstr2b64(rstr(s), b64pad);
42897 this.any = function(s, e) {
42898 return rstr2any(rstr(s, utf8), e);
42900 this.raw = function(s) {
42901 return rstr(s, utf8);
42903 this.hex_hmac = function(k, d) {
42904 return rstr2hex(rstr_hmac(k, d), hexcase);
42906 this.b64_hmac = function(k, d) {
42907 return rstr2b64(rstr_hmac(k, d), b64pad);
42909 this.any_hmac = function(k, d, e) {
42910 return rstr2any(rstr_hmac(k, d), e);
42913 * Perform a simple self-test to see if the VM is working
42914 * @return {String} Hexadecimal hash sample
42916 this.vm_test = function() {
42917 return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72';
42920 * Enable/disable uppercase hexadecimal returned string
42922 * @return {Object} this
42924 this.setUpperCase = function(a) {
42925 if (typeof a === 'boolean') {
42931 * Defines a base64 pad string
42932 * @param {String} Pad
42933 * @return {Object} this
42935 this.setPad = function(a) {
42936 b64pad = a || b64pad;
42940 * Defines a base64 pad string
42942 * @return {Object} [this]
42944 this.setUTF8 = function(a) {
42945 if (typeof a === 'boolean') {
42954 * Calculate the MD5 of a raw string
42958 s = (utf8) ? utf8Encode(s) : s;
42959 return binl2rstr(binl(rstr2binl(s), s.length * 8));
42963 * Calculate the HMAC-MD5, of a key and some data (raw strings)
42966 function rstr_hmac(key, data) {
42967 var bkey, ipad, opad, hash, i;
42969 key = (utf8) ? utf8Encode(key) : key;
42970 data = (utf8) ? utf8Encode(data) : data;
42971 bkey = rstr2binl(key);
42972 if (bkey.length > 16) {
42973 bkey = binl(bkey, key.length * 8);
42976 ipad = Array(16), opad = Array(16);
42977 for (i = 0; i < 16; i += 1) {
42978 ipad[i] = bkey[i] ^ 0x36363636;
42979 opad[i] = bkey[i] ^ 0x5C5C5C5C;
42981 hash = binl(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
42982 return binl2rstr(binl(opad.concat(hash), 512 + 128));
42986 * Calculate the MD5 of an array of little-endian words, and a bit length.
42989 function binl(x, len) {
42990 var i, olda, oldb, oldc, oldd,
42996 /* append padding */
42997 x[len >> 5] |= 0x80 << ((len) % 32);
42998 x[(((len + 64) >>> 9) << 4) + 14] = len;
43000 for (i = 0; i < x.length; i += 16) {
43006 a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936);
43007 d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586);
43008 c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819);
43009 b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330);
43010 a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897);
43011 d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426);
43012 c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341);
43013 b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983);
43014 a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416);
43015 d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417);
43016 c = md5_ff(c, d, a, b, x[i + 10], 17, -42063);
43017 b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162);
43018 a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682);
43019 d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101);
43020 c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290);
43021 b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329);
43023 a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510);
43024 d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632);
43025 c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713);
43026 b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302);
43027 a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691);
43028 d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083);
43029 c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335);
43030 b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848);
43031 a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438);
43032 d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690);
43033 c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961);
43034 b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501);
43035 a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467);
43036 d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784);
43037 c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473);
43038 b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734);
43040 a = md5_hh(a, b, c, d, x[i + 5], 4, -378558);
43041 d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463);
43042 c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562);
43043 b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556);
43044 a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060);
43045 d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353);
43046 c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632);
43047 b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640);
43048 a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174);
43049 d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222);
43050 c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979);
43051 b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189);
43052 a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487);
43053 d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835);
43054 c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520);
43055 b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651);
43057 a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844);
43058 d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415);
43059 c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905);
43060 b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055);
43061 a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571);
43062 d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606);
43063 c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523);
43064 b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799);
43065 a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359);
43066 d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744);
43067 c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380);
43068 b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649);
43069 a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070);
43070 d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379);
43071 c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259);
43072 b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551);
43074 a = safe_add(a, olda);
43075 b = safe_add(b, oldb);
43076 c = safe_add(c, oldc);
43077 d = safe_add(d, oldd);
43079 return Array(a, b, c, d);
43083 * These functions implement the four basic operations the algorithm uses.
43086 function md5_cmn(q, a, b, x, s, t) {
43087 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b);
43090 function md5_ff(a, b, c, d, x, s, t) {
43091 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
43094 function md5_gg(a, b, c, d, x, s, t) {
43095 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
43098 function md5_hh(a, b, c, d, x, s, t) {
43099 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
43102 function md5_ii(a, b, c, d, x, s, t) {
43103 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
43108 * @class Hashes.SHA1
43109 * @param {Object} [config]
43112 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined in FIPS 180-1
43113 * Version 2.2 Copyright Paul Johnston 2000 - 2009.
43114 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
43115 * See http://pajhome.org.uk/crypt/md5 for details.
43117 SHA1: function(options) {
43119 * Private config properties. You may need to tweak these to be compatible with
43120 * the server-side, but the defaults work in most cases.
43121 * See {@link Hashes.MD5#method-setUpperCase} and {@link Hashes.SHA1#method-setUpperCase}
43123 var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, // hexadecimal output case format. false - lowercase; true - uppercase
43124 b64pad = (options && typeof options.pad === 'string') ? options.pad : '=', // base-64 pad character. Defaults to '=' for strict RFC compliance
43125 utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true; // enable/disable utf8 encoding
43128 this.hex = function(s) {
43129 return rstr2hex(rstr(s, utf8), hexcase);
43131 this.b64 = function(s) {
43132 return rstr2b64(rstr(s, utf8), b64pad);
43134 this.any = function(s, e) {
43135 return rstr2any(rstr(s, utf8), e);
43137 this.raw = function(s) {
43138 return rstr(s, utf8);
43140 this.hex_hmac = function(k, d) {
43141 return rstr2hex(rstr_hmac(k, d));
43143 this.b64_hmac = function(k, d) {
43144 return rstr2b64(rstr_hmac(k, d), b64pad);
43146 this.any_hmac = function(k, d, e) {
43147 return rstr2any(rstr_hmac(k, d), e);
43150 * Perform a simple self-test to see if the VM is working
43151 * @return {String} Hexadecimal hash sample
43154 this.vm_test = function() {
43155 return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72';
43158 * @description Enable/disable uppercase hexadecimal returned string
43160 * @return {Object} this
43163 this.setUpperCase = function(a) {
43164 if (typeof a === 'boolean') {
43170 * @description Defines a base64 pad string
43171 * @param {string} Pad
43172 * @return {Object} this
43175 this.setPad = function(a) {
43176 b64pad = a || b64pad;
43180 * @description Defines a base64 pad string
43182 * @return {Object} this
43185 this.setUTF8 = function(a) {
43186 if (typeof a === 'boolean') {
43195 * Calculate the SHA-512 of a raw string
43199 s = (utf8) ? utf8Encode(s) : s;
43200 return binb2rstr(binb(rstr2binb(s), s.length * 8));
43204 * Calculate the HMAC-SHA1 of a key and some data (raw strings)
43207 function rstr_hmac(key, data) {
43208 var bkey, ipad, opad, i, hash;
43209 key = (utf8) ? utf8Encode(key) : key;
43210 data = (utf8) ? utf8Encode(data) : data;
43211 bkey = rstr2binb(key);
43213 if (bkey.length > 16) {
43214 bkey = binb(bkey, key.length * 8);
43216 ipad = Array(16), opad = Array(16);
43217 for (i = 0; i < 16; i += 1) {
43218 ipad[i] = bkey[i] ^ 0x36363636;
43219 opad[i] = bkey[i] ^ 0x5C5C5C5C;
43221 hash = binb(ipad.concat(rstr2binb(data)), 512 + data.length * 8);
43222 return binb2rstr(binb(opad.concat(hash), 512 + 160));
43226 * Calculate the SHA-1 of an array of big-endian words, and a bit length
43229 function binb(x, len) {
43230 var i, j, t, olda, oldb, oldc, oldd, olde,
43238 /* append padding */
43239 x[len >> 5] |= 0x80 << (24 - len % 32);
43240 x[((len + 64 >> 9) << 4) + 15] = len;
43242 for (i = 0; i < x.length; i += 16) {
43249 for (j = 0; j < 80; j += 1) {
43253 w[j] = bit_rol(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1);
43255 t = safe_add(safe_add(bit_rol(a, 5), sha1_ft(j, b, c, d)),
43256 safe_add(safe_add(e, w[j]), sha1_kt(j)));
43259 c = bit_rol(b, 30);
43264 a = safe_add(a, olda);
43265 b = safe_add(b, oldb);
43266 c = safe_add(c, oldc);
43267 d = safe_add(d, oldd);
43268 e = safe_add(e, olde);
43270 return Array(a, b, c, d, e);
43274 * Perform the appropriate triplet combination function for the current
43278 function sha1_ft(t, b, c, d) {
43280 return (b & c) | ((~b) & d);
43286 return (b & c) | (b & d) | (c & d);
43292 * Determine the appropriate additive constant for the current iteration
43295 function sha1_kt(t) {
43296 return (t < 20) ? 1518500249 : (t < 40) ? 1859775393 :
43297 (t < 60) ? -1894007588 : -899497514;
43301 * @class Hashes.SHA256
43304 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined in FIPS 180-2
43305 * Version 2.2 Copyright Angel Marin, Paul Johnston 2000 - 2009.
43306 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
43307 * See http://pajhome.org.uk/crypt/md5 for details.
43308 * Also http://anmar.eu.org/projects/jssha2/
43310 SHA256: function(options) {
43312 * Private properties configuration variables. You may need to tweak these to be compatible with
43313 * the server-side, but the defaults work in most cases.
43314 * @see this.setUpperCase() method
43315 * @see this.setPad() method
43317 var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, // hexadecimal output case format. false - lowercase; true - uppercase */
43318 b64pad = (options && typeof options.pad === 'string') ? options.pad : '=',
43319 /* base-64 pad character. Default '=' for strict RFC compliance */
43320 utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true,
43321 /* enable/disable utf8 encoding */
43324 /* privileged (public) methods */
43325 this.hex = function(s) {
43326 return rstr2hex(rstr(s, utf8));
43328 this.b64 = function(s) {
43329 return rstr2b64(rstr(s, utf8), b64pad);
43331 this.any = function(s, e) {
43332 return rstr2any(rstr(s, utf8), e);
43334 this.raw = function(s) {
43335 return rstr(s, utf8);
43337 this.hex_hmac = function(k, d) {
43338 return rstr2hex(rstr_hmac(k, d));
43340 this.b64_hmac = function(k, d) {
43341 return rstr2b64(rstr_hmac(k, d), b64pad);
43343 this.any_hmac = function(k, d, e) {
43344 return rstr2any(rstr_hmac(k, d), e);
43347 * Perform a simple self-test to see if the VM is working
43348 * @return {String} Hexadecimal hash sample
43351 this.vm_test = function() {
43352 return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72';
43355 * Enable/disable uppercase hexadecimal returned string
43357 * @return {Object} this
43360 this.setUpperCase = function(a) {
43361 if (typeof a === 'boolean') {
43367 * @description Defines a base64 pad string
43368 * @param {string} Pad
43369 * @return {Object} this
43372 this.setPad = function(a) {
43373 b64pad = a || b64pad;
43377 * Defines a base64 pad string
43379 * @return {Object} this
43382 this.setUTF8 = function(a) {
43383 if (typeof a === 'boolean') {
43392 * Calculate the SHA-512 of a raw string
43395 function rstr(s, utf8) {
43396 s = (utf8) ? utf8Encode(s) : s;
43397 return binb2rstr(binb(rstr2binb(s), s.length * 8));
43401 * Calculate the HMAC-sha256 of a key and some data (raw strings)
43404 function rstr_hmac(key, data) {
43405 key = (utf8) ? utf8Encode(key) : key;
43406 data = (utf8) ? utf8Encode(data) : data;
43408 bkey = rstr2binb(key),
43412 if (bkey.length > 16) {
43413 bkey = binb(bkey, key.length * 8);
43416 for (; i < 16; i += 1) {
43417 ipad[i] = bkey[i] ^ 0x36363636;
43418 opad[i] = bkey[i] ^ 0x5C5C5C5C;
43421 hash = binb(ipad.concat(rstr2binb(data)), 512 + data.length * 8);
43422 return binb2rstr(binb(opad.concat(hash), 512 + 256));
43426 * Main sha256 function, with its support functions
43429 function sha256_S(X, n) {
43430 return (X >>> n) | (X << (32 - n));
43433 function sha256_R(X, n) {
43437 function sha256_Ch(x, y, z) {
43438 return ((x & y) ^ ((~x) & z));
43441 function sha256_Maj(x, y, z) {
43442 return ((x & y) ^ (x & z) ^ (y & z));
43445 function sha256_Sigma0256(x) {
43446 return (sha256_S(x, 2) ^ sha256_S(x, 13) ^ sha256_S(x, 22));
43449 function sha256_Sigma1256(x) {
43450 return (sha256_S(x, 6) ^ sha256_S(x, 11) ^ sha256_S(x, 25));
43453 function sha256_Gamma0256(x) {
43454 return (sha256_S(x, 7) ^ sha256_S(x, 18) ^ sha256_R(x, 3));
43457 function sha256_Gamma1256(x) {
43458 return (sha256_S(x, 17) ^ sha256_S(x, 19) ^ sha256_R(x, 10));
43462 1116352408, 1899447441, -1245643825, -373957723, 961987163, 1508970993, -1841331548, -1424204075, -670586216, 310598401, 607225278, 1426881987,
43463 1925078388, -2132889090, -1680079193, -1046744716, -459576895, -272742522,
43464 264347078, 604807628, 770255983, 1249150122, 1555081692, 1996064986, -1740746414, -1473132947, -1341970488, -1084653625, -958395405, -710438585,
43465 113926993, 338241895, 666307205, 773529912, 1294757372, 1396182291,
43466 1695183700, 1986661051, -2117940946, -1838011259, -1564481375, -1474664885, -1035236496, -949202525, -778901479, -694614492, -200395387, 275423344,
43467 430227734, 506948616, 659060556, 883997877, 958139571, 1322822218,
43468 1537002063, 1747873779, 1955562222, 2024104815, -2067236844, -1933114872, -1866530822, -1538233109, -1090935817, -965641998
43471 function binb(m, l) {
43472 var HASH = [1779033703, -1150833019, 1013904242, -1521486534,
43473 1359893119, -1694144372, 528734635, 1541459225
43475 var W = new Array(64);
43476 var a, b, c, d, e, f, g, h;
43479 /* append padding */
43480 m[l >> 5] |= 0x80 << (24 - l % 32);
43481 m[((l + 64 >> 9) << 4) + 15] = l;
43483 for (i = 0; i < m.length; i += 16) {
43493 for (j = 0; j < 64; j += 1) {
43497 W[j] = safe_add(safe_add(safe_add(sha256_Gamma1256(W[j - 2]), W[j - 7]),
43498 sha256_Gamma0256(W[j - 15])), W[j - 16]);
43501 T1 = safe_add(safe_add(safe_add(safe_add(h, sha256_Sigma1256(e)), sha256_Ch(e, f, g)),
43502 sha256_K[j]), W[j]);
43503 T2 = safe_add(sha256_Sigma0256(a), sha256_Maj(a, b, c));
43507 e = safe_add(d, T1);
43511 a = safe_add(T1, T2);
43514 HASH[0] = safe_add(a, HASH[0]);
43515 HASH[1] = safe_add(b, HASH[1]);
43516 HASH[2] = safe_add(c, HASH[2]);
43517 HASH[3] = safe_add(d, HASH[3]);
43518 HASH[4] = safe_add(e, HASH[4]);
43519 HASH[5] = safe_add(f, HASH[5]);
43520 HASH[6] = safe_add(g, HASH[6]);
43521 HASH[7] = safe_add(h, HASH[7]);
43529 * @class Hashes.SHA512
43532 * A JavaScript implementation of the Secure Hash Algorithm, SHA-512, as defined in FIPS 180-2
43533 * Version 2.2 Copyright Anonymous Contributor, Paul Johnston 2000 - 2009.
43534 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
43535 * See http://pajhome.org.uk/crypt/md5 for details.
43537 SHA512: function(options) {
43539 * Private properties configuration variables. You may need to tweak these to be compatible with
43540 * the server-side, but the defaults work in most cases.
43541 * @see this.setUpperCase() method
43542 * @see this.setPad() method
43544 var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false,
43545 /* hexadecimal output case format. false - lowercase; true - uppercase */
43546 b64pad = (options && typeof options.pad === 'string') ? options.pad : '=',
43547 /* base-64 pad character. Default '=' for strict RFC compliance */
43548 utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true,
43549 /* enable/disable utf8 encoding */
43552 /* privileged (public) methods */
43553 this.hex = function(s) {
43554 return rstr2hex(rstr(s));
43556 this.b64 = function(s) {
43557 return rstr2b64(rstr(s), b64pad);
43559 this.any = function(s, e) {
43560 return rstr2any(rstr(s), e);
43562 this.raw = function(s) {
43563 return rstr(s, utf8);
43565 this.hex_hmac = function(k, d) {
43566 return rstr2hex(rstr_hmac(k, d));
43568 this.b64_hmac = function(k, d) {
43569 return rstr2b64(rstr_hmac(k, d), b64pad);
43571 this.any_hmac = function(k, d, e) {
43572 return rstr2any(rstr_hmac(k, d), e);
43575 * Perform a simple self-test to see if the VM is working
43576 * @return {String} Hexadecimal hash sample
43579 this.vm_test = function() {
43580 return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72';
43583 * @description Enable/disable uppercase hexadecimal returned string
43585 * @return {Object} this
43588 this.setUpperCase = function(a) {
43589 if (typeof a === 'boolean') {
43595 * @description Defines a base64 pad string
43596 * @param {string} Pad
43597 * @return {Object} this
43600 this.setPad = function(a) {
43601 b64pad = a || b64pad;
43605 * @description Defines a base64 pad string
43607 * @return {Object} this
43610 this.setUTF8 = function(a) {
43611 if (typeof a === 'boolean') {
43617 /* private methods */
43620 * Calculate the SHA-512 of a raw string
43624 s = (utf8) ? utf8Encode(s) : s;
43625 return binb2rstr(binb(rstr2binb(s), s.length * 8));
43628 * Calculate the HMAC-SHA-512 of a key and some data (raw strings)
43631 function rstr_hmac(key, data) {
43632 key = (utf8) ? utf8Encode(key) : key;
43633 data = (utf8) ? utf8Encode(data) : data;
43636 bkey = rstr2binb(key),
43640 if (bkey.length > 32) {
43641 bkey = binb(bkey, key.length * 8);
43644 for (; i < 32; i += 1) {
43645 ipad[i] = bkey[i] ^ 0x36363636;
43646 opad[i] = bkey[i] ^ 0x5C5C5C5C;
43649 hash = binb(ipad.concat(rstr2binb(data)), 1024 + data.length * 8);
43650 return binb2rstr(binb(opad.concat(hash), 1024 + 512));
43654 * Calculate the SHA-512 of an array of big-endian dwords, and a bit length
43657 function binb(x, len) {
43660 hash = new Array(16),
43661 //Initial hash values
43663 new int64(0x6a09e667, -205731576),
43664 new int64(-1150833019, -2067093701),
43665 new int64(0x3c6ef372, -23791573),
43666 new int64(-1521486534, 0x5f1d36f1),
43667 new int64(0x510e527f, -1377402159),
43668 new int64(-1694144372, 0x2b3e6c1f),
43669 new int64(0x1f83d9ab, -79577749),
43670 new int64(0x5be0cd19, 0x137e2179)
43672 T1 = new int64(0, 0),
43673 T2 = new int64(0, 0),
43674 a = new int64(0, 0),
43675 b = new int64(0, 0),
43676 c = new int64(0, 0),
43677 d = new int64(0, 0),
43678 e = new int64(0, 0),
43679 f = new int64(0, 0),
43680 g = new int64(0, 0),
43681 h = new int64(0, 0),
43682 //Temporary variables not specified by the document
43683 s0 = new int64(0, 0),
43684 s1 = new int64(0, 0),
43685 Ch = new int64(0, 0),
43686 Maj = new int64(0, 0),
43687 r1 = new int64(0, 0),
43688 r2 = new int64(0, 0),
43689 r3 = new int64(0, 0);
43691 if (sha512_k === undefined) {
43694 new int64(0x428a2f98, -685199838), new int64(0x71374491, 0x23ef65cd),
43695 new int64(-1245643825, -330482897), new int64(-373957723, -2121671748),
43696 new int64(0x3956c25b, -213338824), new int64(0x59f111f1, -1241133031),
43697 new int64(-1841331548, -1357295717), new int64(-1424204075, -630357736),
43698 new int64(-670586216, -1560083902), new int64(0x12835b01, 0x45706fbe),
43699 new int64(0x243185be, 0x4ee4b28c), new int64(0x550c7dc3, -704662302),
43700 new int64(0x72be5d74, -226784913), new int64(-2132889090, 0x3b1696b1),
43701 new int64(-1680079193, 0x25c71235), new int64(-1046744716, -815192428),
43702 new int64(-459576895, -1628353838), new int64(-272742522, 0x384f25e3),
43703 new int64(0xfc19dc6, -1953704523), new int64(0x240ca1cc, 0x77ac9c65),
43704 new int64(0x2de92c6f, 0x592b0275), new int64(0x4a7484aa, 0x6ea6e483),
43705 new int64(0x5cb0a9dc, -1119749164), new int64(0x76f988da, -2096016459),
43706 new int64(-1740746414, -295247957), new int64(-1473132947, 0x2db43210),
43707 new int64(-1341970488, -1728372417), new int64(-1084653625, -1091629340),
43708 new int64(-958395405, 0x3da88fc2), new int64(-710438585, -1828018395),
43709 new int64(0x6ca6351, -536640913), new int64(0x14292967, 0xa0e6e70),
43710 new int64(0x27b70a85, 0x46d22ffc), new int64(0x2e1b2138, 0x5c26c926),
43711 new int64(0x4d2c6dfc, 0x5ac42aed), new int64(0x53380d13, -1651133473),
43712 new int64(0x650a7354, -1951439906), new int64(0x766a0abb, 0x3c77b2a8),
43713 new int64(-2117940946, 0x47edaee6), new int64(-1838011259, 0x1482353b),
43714 new int64(-1564481375, 0x4cf10364), new int64(-1474664885, -1136513023),
43715 new int64(-1035236496, -789014639), new int64(-949202525, 0x654be30),
43716 new int64(-778901479, -688958952), new int64(-694614492, 0x5565a910),
43717 new int64(-200395387, 0x5771202a), new int64(0x106aa070, 0x32bbd1b8),
43718 new int64(0x19a4c116, -1194143544), new int64(0x1e376c08, 0x5141ab53),
43719 new int64(0x2748774c, -544281703), new int64(0x34b0bcb5, -509917016),
43720 new int64(0x391c0cb3, -976659869), new int64(0x4ed8aa4a, -482243893),
43721 new int64(0x5b9cca4f, 0x7763e373), new int64(0x682e6ff3, -692930397),
43722 new int64(0x748f82ee, 0x5defb2fc), new int64(0x78a5636f, 0x43172f60),
43723 new int64(-2067236844, -1578062990), new int64(-1933114872, 0x1a6439ec),
43724 new int64(-1866530822, 0x23631e28), new int64(-1538233109, -561857047),
43725 new int64(-1090935817, -1295615723), new int64(-965641998, -479046869),
43726 new int64(-903397682, -366583396), new int64(-779700025, 0x21c0c207),
43727 new int64(-354779690, -840897762), new int64(-176337025, -294727304),
43728 new int64(0x6f067aa, 0x72176fba), new int64(0xa637dc5, -1563912026),
43729 new int64(0x113f9804, -1090974290), new int64(0x1b710b35, 0x131c471b),
43730 new int64(0x28db77f5, 0x23047d84), new int64(0x32caab7b, 0x40c72493),
43731 new int64(0x3c9ebe0a, 0x15c9bebc), new int64(0x431d67c4, -1676669620),
43732 new int64(0x4cc5d4be, -885112138), new int64(0x597f299c, -60457430),
43733 new int64(0x5fcb6fab, 0x3ad6faec), new int64(0x6c44198c, 0x4a475817)
43737 for (i = 0; i < 80; i += 1) {
43738 W[i] = new int64(0, 0);
43741 // append padding to the source string. The format is described in the FIPS.
43742 x[len >> 5] |= 0x80 << (24 - (len & 0x1f));
43743 x[((len + 128 >> 10) << 5) + 31] = len;
43745 for (i = 0; i < l; i += 32) { //32 dwords is the block size
43746 int64copy(a, H[0]);
43747 int64copy(b, H[1]);
43748 int64copy(c, H[2]);
43749 int64copy(d, H[3]);
43750 int64copy(e, H[4]);
43751 int64copy(f, H[5]);
43752 int64copy(g, H[6]);
43753 int64copy(h, H[7]);
43755 for (j = 0; j < 16; j += 1) {
43756 W[j].h = x[i + 2 * j];
43757 W[j].l = x[i + 2 * j + 1];
43760 for (j = 16; j < 80; j += 1) {
43762 int64rrot(r1, W[j - 2], 19);
43763 int64revrrot(r2, W[j - 2], 29);
43764 int64shr(r3, W[j - 2], 6);
43765 s1.l = r1.l ^ r2.l ^ r3.l;
43766 s1.h = r1.h ^ r2.h ^ r3.h;
43768 int64rrot(r1, W[j - 15], 1);
43769 int64rrot(r2, W[j - 15], 8);
43770 int64shr(r3, W[j - 15], 7);
43771 s0.l = r1.l ^ r2.l ^ r3.l;
43772 s0.h = r1.h ^ r2.h ^ r3.h;
43774 int64add4(W[j], s1, W[j - 7], s0, W[j - 16]);
43777 for (j = 0; j < 80; j += 1) {
43779 Ch.l = (e.l & f.l) ^ (~e.l & g.l);
43780 Ch.h = (e.h & f.h) ^ (~e.h & g.h);
43783 int64rrot(r1, e, 14);
43784 int64rrot(r2, e, 18);
43785 int64revrrot(r3, e, 9);
43786 s1.l = r1.l ^ r2.l ^ r3.l;
43787 s1.h = r1.h ^ r2.h ^ r3.h;
43790 int64rrot(r1, a, 28);
43791 int64revrrot(r2, a, 2);
43792 int64revrrot(r3, a, 7);
43793 s0.l = r1.l ^ r2.l ^ r3.l;
43794 s0.h = r1.h ^ r2.h ^ r3.h;
43797 Maj.l = (a.l & b.l) ^ (a.l & c.l) ^ (b.l & c.l);
43798 Maj.h = (a.h & b.h) ^ (a.h & c.h) ^ (b.h & c.h);
43800 int64add5(T1, h, s1, Ch, sha512_k[j], W[j]);
43801 int64add(T2, s0, Maj);
43806 int64add(e, d, T1);
43810 int64add(a, T1, T2);
43812 int64add(H[0], H[0], a);
43813 int64add(H[1], H[1], b);
43814 int64add(H[2], H[2], c);
43815 int64add(H[3], H[3], d);
43816 int64add(H[4], H[4], e);
43817 int64add(H[5], H[5], f);
43818 int64add(H[6], H[6], g);
43819 int64add(H[7], H[7], h);
43822 //represent the hash as an array of 32-bit dwords
43823 for (i = 0; i < 8; i += 1) {
43824 hash[2 * i] = H[i].h;
43825 hash[2 * i + 1] = H[i].l;
43830 //A constructor for 64-bit numbers
43832 function int64(h, l) {
43835 //this.toString = int64toString;
43838 //Copies src into dst, assuming both are 64-bit numbers
43840 function int64copy(dst, src) {
43845 //Right-rotates a 64-bit number by shift
43846 //Won't handle cases of shift>=32
43847 //The function revrrot() is for that
43849 function int64rrot(dst, x, shift) {
43850 dst.l = (x.l >>> shift) | (x.h << (32 - shift));
43851 dst.h = (x.h >>> shift) | (x.l << (32 - shift));
43854 //Reverses the dwords of the source and then rotates right by shift.
43855 //This is equivalent to rotation by 32+shift
43857 function int64revrrot(dst, x, shift) {
43858 dst.l = (x.h >>> shift) | (x.l << (32 - shift));
43859 dst.h = (x.l >>> shift) | (x.h << (32 - shift));
43862 //Bitwise-shifts right a 64-bit number by shift
43863 //Won't handle shift>=32, but it's never needed in SHA512
43865 function int64shr(dst, x, shift) {
43866 dst.l = (x.l >>> shift) | (x.h << (32 - shift));
43867 dst.h = (x.h >>> shift);
43870 //Adds two 64-bit numbers
43871 //Like the original implementation, does not rely on 32-bit operations
43873 function int64add(dst, x, y) {
43874 var w0 = (x.l & 0xffff) + (y.l & 0xffff);
43875 var w1 = (x.l >>> 16) + (y.l >>> 16) + (w0 >>> 16);
43876 var w2 = (x.h & 0xffff) + (y.h & 0xffff) + (w1 >>> 16);
43877 var w3 = (x.h >>> 16) + (y.h >>> 16) + (w2 >>> 16);
43878 dst.l = (w0 & 0xffff) | (w1 << 16);
43879 dst.h = (w2 & 0xffff) | (w3 << 16);
43882 //Same, except with 4 addends. Works faster than adding them one by one.
43884 function int64add4(dst, a, b, c, d) {
43885 var w0 = (a.l & 0xffff) + (b.l & 0xffff) + (c.l & 0xffff) + (d.l & 0xffff);
43886 var w1 = (a.l >>> 16) + (b.l >>> 16) + (c.l >>> 16) + (d.l >>> 16) + (w0 >>> 16);
43887 var w2 = (a.h & 0xffff) + (b.h & 0xffff) + (c.h & 0xffff) + (d.h & 0xffff) + (w1 >>> 16);
43888 var w3 = (a.h >>> 16) + (b.h >>> 16) + (c.h >>> 16) + (d.h >>> 16) + (w2 >>> 16);
43889 dst.l = (w0 & 0xffff) | (w1 << 16);
43890 dst.h = (w2 & 0xffff) | (w3 << 16);
43893 //Same, except with 5 addends
43895 function int64add5(dst, a, b, c, d, e) {
43896 var w0 = (a.l & 0xffff) + (b.l & 0xffff) + (c.l & 0xffff) + (d.l & 0xffff) + (e.l & 0xffff),
43897 w1 = (a.l >>> 16) + (b.l >>> 16) + (c.l >>> 16) + (d.l >>> 16) + (e.l >>> 16) + (w0 >>> 16),
43898 w2 = (a.h & 0xffff) + (b.h & 0xffff) + (c.h & 0xffff) + (d.h & 0xffff) + (e.h & 0xffff) + (w1 >>> 16),
43899 w3 = (a.h >>> 16) + (b.h >>> 16) + (c.h >>> 16) + (d.h >>> 16) + (e.h >>> 16) + (w2 >>> 16);
43900 dst.l = (w0 & 0xffff) | (w1 << 16);
43901 dst.h = (w2 & 0xffff) | (w3 << 16);
43905 * @class Hashes.RMD160
43907 * @param {Object} [config]
43909 * A JavaScript implementation of the RIPEMD-160 Algorithm
43910 * Version 2.2 Copyright Jeremy Lin, Paul Johnston 2000 - 2009.
43911 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
43912 * See http://pajhome.org.uk/crypt/md5 for details.
43913 * Also http://www.ocf.berkeley.edu/~jjlin/jsotp/
43915 RMD160: function(options) {
43917 * Private properties configuration variables. You may need to tweak these to be compatible with
43918 * the server-side, but the defaults work in most cases.
43919 * @see this.setUpperCase() method
43920 * @see this.setPad() method
43922 var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false,
43923 /* hexadecimal output case format. false - lowercase; true - uppercase */
43924 b64pad = (options && typeof options.pad === 'string') ? options.pa : '=',
43925 /* base-64 pad character. Default '=' for strict RFC compliance */
43926 utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true,
43927 /* enable/disable utf8 encoding */
43929 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
43930 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
43931 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
43932 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
43933 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
43936 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
43937 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
43938 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
43939 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
43940 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
43943 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
43944 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
43945 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
43946 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
43947 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
43950 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
43951 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
43952 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
43953 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
43954 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
43957 /* privileged (public) methods */
43958 this.hex = function(s) {
43959 return rstr2hex(rstr(s, utf8));
43961 this.b64 = function(s) {
43962 return rstr2b64(rstr(s, utf8), b64pad);
43964 this.any = function(s, e) {
43965 return rstr2any(rstr(s, utf8), e);
43967 this.raw = function(s) {
43968 return rstr(s, utf8);
43970 this.hex_hmac = function(k, d) {
43971 return rstr2hex(rstr_hmac(k, d));
43973 this.b64_hmac = function(k, d) {
43974 return rstr2b64(rstr_hmac(k, d), b64pad);
43976 this.any_hmac = function(k, d, e) {
43977 return rstr2any(rstr_hmac(k, d), e);
43980 * Perform a simple self-test to see if the VM is working
43981 * @return {String} Hexadecimal hash sample
43984 this.vm_test = function() {
43985 return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72';
43988 * @description Enable/disable uppercase hexadecimal returned string
43990 * @return {Object} this
43993 this.setUpperCase = function(a) {
43994 if (typeof a === 'boolean') {
44000 * @description Defines a base64 pad string
44001 * @param {string} Pad
44002 * @return {Object} this
44005 this.setPad = function(a) {
44006 if (typeof a !== 'undefined') {
44012 * @description Defines a base64 pad string
44014 * @return {Object} this
44017 this.setUTF8 = function(a) {
44018 if (typeof a === 'boolean') {
44024 /* private methods */
44027 * Calculate the rmd160 of a raw string
44031 s = (utf8) ? utf8Encode(s) : s;
44032 return binl2rstr(binl(rstr2binl(s), s.length * 8));
44036 * Calculate the HMAC-rmd160 of a key and some data (raw strings)
44039 function rstr_hmac(key, data) {
44040 key = (utf8) ? utf8Encode(key) : key;
44041 data = (utf8) ? utf8Encode(data) : data;
44043 bkey = rstr2binl(key),
44047 if (bkey.length > 16) {
44048 bkey = binl(bkey, key.length * 8);
44051 for (i = 0; i < 16; i += 1) {
44052 ipad[i] = bkey[i] ^ 0x36363636;
44053 opad[i] = bkey[i] ^ 0x5C5C5C5C;
44055 hash = binl(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
44056 return binl2rstr(binl(opad.concat(hash), 512 + 160));
44060 * Convert an array of little-endian words to a string
44063 function binl2rstr(input) {
44064 var i, output = '',
44065 l = input.length * 32;
44066 for (i = 0; i < l; i += 8) {
44067 output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF);
44073 * Calculate the RIPE-MD160 of an array of little-endian words, and a bit length.
44076 function binl(x, len) {
44083 A1, B1, C1, D1, E1,
44084 A2, B2, C2, D2, E2;
44086 /* append padding */
44087 x[len >> 5] |= 0x80 << (len % 32);
44088 x[(((len + 64) >>> 9) << 4) + 14] = len;
44091 for (i = 0; i < l; i += 16) {
44097 for (j = 0; j <= 79; j += 1) {
44098 T = safe_add(A1, rmd160_f(j, B1, C1, D1));
44099 T = safe_add(T, x[i + rmd160_r1[j]]);
44100 T = safe_add(T, rmd160_K1(j));
44101 T = safe_add(bit_rol(T, rmd160_s1[j]), E1);
44104 D1 = bit_rol(C1, 10);
44107 T = safe_add(A2, rmd160_f(79 - j, B2, C2, D2));
44108 T = safe_add(T, x[i + rmd160_r2[j]]);
44109 T = safe_add(T, rmd160_K2(j));
44110 T = safe_add(bit_rol(T, rmd160_s2[j]), E2);
44113 D2 = bit_rol(C2, 10);
44118 T = safe_add(h1, safe_add(C1, D2));
44119 h1 = safe_add(h2, safe_add(D1, E2));
44120 h2 = safe_add(h3, safe_add(E1, A2));
44121 h3 = safe_add(h4, safe_add(A1, B2));
44122 h4 = safe_add(h0, safe_add(B1, C2));
44125 return [h0, h1, h2, h3, h4];
44128 // specific algorithm methods
44130 function rmd160_f(j, x, y, z) {
44131 return (0 <= j && j <= 15) ? (x ^ y ^ z) :
44132 (16 <= j && j <= 31) ? (x & y) | (~x & z) :
44133 (32 <= j && j <= 47) ? (x | ~y) ^ z :
44134 (48 <= j && j <= 63) ? (x & z) | (y & ~z) :
44135 (64 <= j && j <= 79) ? x ^ (y | ~z) :
44136 'rmd160_f: j out of range';
44139 function rmd160_K1(j) {
44140 return (0 <= j && j <= 15) ? 0x00000000 :
44141 (16 <= j && j <= 31) ? 0x5a827999 :
44142 (32 <= j && j <= 47) ? 0x6ed9eba1 :
44143 (48 <= j && j <= 63) ? 0x8f1bbcdc :
44144 (64 <= j && j <= 79) ? 0xa953fd4e :
44145 'rmd160_K1: j out of range';
44148 function rmd160_K2(j) {
44149 return (0 <= j && j <= 15) ? 0x50a28be6 :
44150 (16 <= j && j <= 31) ? 0x5c4dd124 :
44151 (32 <= j && j <= 47) ? 0x6d703ef3 :
44152 (48 <= j && j <= 63) ? 0x7a6d76e9 :
44153 (64 <= j && j <= 79) ? 0x00000000 :
44154 'rmd160_K2: j out of range';
44160 (function(window, undefined$1) {
44161 var freeExports = false;
44163 freeExports = exports;
44164 if (exports && typeof commonjsGlobal === 'object' && commonjsGlobal && commonjsGlobal === commonjsGlobal.global) {
44165 window = commonjsGlobal;
44169 if (typeof undefined$1 === 'function' && typeof undefined$1.amd === 'object' && undefined$1.amd) {
44170 // define as an anonymous module, so, through path mapping, it can be aliased
44171 undefined$1(function() {
44174 } else if (freeExports) {
44175 // in Node.js or RingoJS v0.8.0+
44176 if (module && module.exports === freeExports) {
44177 module.exports = Hashes;
44179 // in Narwhal or RingoJS v0.7.0-
44181 freeExports.Hashes = Hashes;
44184 // in a browser or Rhino
44185 window.Hashes = Hashes;
44191 var immutable = extend$2;
44193 var hasOwnProperty$2 = Object.prototype.hasOwnProperty;
44195 function extend$2() {
44198 for (var i = 0; i < arguments.length; i++) {
44199 var source = arguments[i];
44201 for (var key in source) {
44202 if (hasOwnProperty$2.call(source, key)) {
44203 target[key] = source[key];
44211 var sha1 = new hashes.SHA1();
44215 ohauth.qsString = function(obj) {
44216 return Object.keys(obj).sort().map(function(key) {
44217 return ohauth.percentEncode(key) + '=' +
44218 ohauth.percentEncode(obj[key]);
44222 ohauth.stringQs = function(str) {
44223 return str.split('&').filter(function (pair) {
44224 return pair !== '';
44225 }).reduce(function(obj, pair){
44226 var parts = pair.split('=');
44227 obj[decodeURIComponent(parts[0])] = (null === parts[1]) ?
44228 '' : decodeURIComponent(parts[1]);
44233 ohauth.rawxhr = function(method, url, data, headers, callback) {
44234 var xhr = new XMLHttpRequest(),
44235 twoHundred = /^20\d$/;
44236 xhr.onreadystatechange = function() {
44237 if (4 === xhr.readyState && 0 !== xhr.status) {
44238 if (twoHundred.test(xhr.status)) callback(null, xhr);
44239 else return callback(xhr, null);
44242 xhr.onerror = function(e) { return callback(e, null); };
44243 xhr.open(method, url, true);
44244 for (var h in headers) xhr.setRequestHeader(h, headers[h]);
44249 ohauth.xhr = function(method, url, auth, data, options, callback) {
44250 var headers = (options && options.header) || {
44251 'Content-Type': 'application/x-www-form-urlencoded'
44253 headers.Authorization = 'OAuth ' + ohauth.authHeader(auth);
44254 return ohauth.rawxhr(method, url, data, headers, callback);
44257 ohauth.nonce = function() {
44258 for (var o = ''; o.length < 6;) {
44259 o += '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'[Math.floor(Math.random() * 61)];
44264 ohauth.authHeader = function(obj) {
44265 return Object.keys(obj).sort().map(function(key) {
44266 return encodeURIComponent(key) + '="' + encodeURIComponent(obj[key]) + '"';
44270 ohauth.timestamp = function() { return ~~((+new Date()) / 1000); };
44272 ohauth.percentEncode = function(s) {
44273 return encodeURIComponent(s)
44274 .replace(/\!/g, '%21').replace(/\'/g, '%27')
44275 .replace(/\*/g, '%2A').replace(/\(/g, '%28').replace(/\)/g, '%29');
44278 ohauth.baseString = function(method, url, params) {
44279 if (params.oauth_signature) delete params.oauth_signature;
44282 ohauth.percentEncode(url),
44283 ohauth.percentEncode(ohauth.qsString(params))].join('&');
44286 ohauth.signature = function(oauth_secret, token_secret, baseString) {
44287 return sha1.b64_hmac(
44288 ohauth.percentEncode(oauth_secret) + '&' +
44289 ohauth.percentEncode(token_secret),
44294 * Takes an options object for configuration (consumer_key,
44295 * consumer_secret, version, signature_method, token, token_secret)
44296 * and returns a function that generates the Authorization header
44299 * The returned function takes these parameters:
44300 * - method: GET/POST/...
44301 * - uri: full URI with protocol, port, path and query string
44302 * - extra_params: any extra parameters (that are passed in the POST data),
44303 * can be an object or a from-urlencoded string.
44305 * Returned function returns full OAuth header with "OAuth" string in it.
44308 ohauth.headerGenerator = function(options) {
44309 options = options || {};
44310 var consumer_key = options.consumer_key || '',
44311 consumer_secret = options.consumer_secret || '',
44312 signature_method = options.signature_method || 'HMAC-SHA1',
44313 version = options.version || '1.0',
44314 token = options.token || '',
44315 token_secret = options.token_secret || '';
44317 return function(method, uri, extra_params) {
44318 method = method.toUpperCase();
44319 if (typeof extra_params === 'string' && extra_params.length > 0) {
44320 extra_params = ohauth.stringQs(extra_params);
44323 var uri_parts = uri.split('?', 2),
44324 base_uri = uri_parts[0];
44326 var query_params = uri_parts.length === 2 ?
44327 ohauth.stringQs(uri_parts[1]) : {};
44329 var oauth_params = {
44330 oauth_consumer_key: consumer_key,
44331 oauth_signature_method: signature_method,
44332 oauth_version: version,
44333 oauth_timestamp: ohauth.timestamp(),
44334 oauth_nonce: ohauth.nonce()
44337 if (token) oauth_params.oauth_token = token;
44339 var all_params = immutable({}, oauth_params, query_params, extra_params),
44340 base_str = ohauth.baseString(method, base_uri, all_params);
44342 oauth_params.oauth_signature = ohauth.signature(consumer_secret, token_secret, base_str);
44344 return 'OAuth ' + ohauth.authHeader(oauth_params);
44348 var ohauth_1 = ohauth;
44350 var resolveUrl = createCommonjsModule(function (module, exports) {
44351 // Copyright 2014 Simon Lydell
44352 // X11 (“MIT”) Licensed. (See LICENSE.)
44354 void (function(root, factory) {
44356 module.exports = factory();
44358 }(commonjsGlobal, function() {
44360 function resolveUrl(/* ...urls */) {
44361 var numUrls = arguments.length;
44363 if (numUrls === 0) {
44364 throw new Error("resolveUrl requires at least one argument; got none.")
44367 var base = document.createElement("base");
44368 base.href = arguments[0];
44370 if (numUrls === 1) {
44374 var head = document.getElementsByTagName("head")[0];
44375 head.insertBefore(base, head.firstChild);
44377 var a = document.createElement("a");
44380 for (var index = 1; index < numUrls; index++) {
44381 a.href = arguments[index];
44383 base.href = resolved;
44386 head.removeChild(base);
44396 var assign$2 = make_assign();
44397 var create$7 = make_create();
44398 var trim$1 = make_trim();
44399 var Global = (typeof window !== 'undefined' ? window : commonjsGlobal);
44411 isFunction: isFunction$2,
44412 isObject: isObject$2,
44416 function make_assign() {
44417 if (Object.assign) {
44418 return Object.assign
44420 return function shimAssign(obj, props1, props2, etc) {
44421 for (var i = 1; i < arguments.length; i++) {
44422 each(Object(arguments[i]), function(val, key) {
44431 function make_create() {
44432 if (Object.create) {
44433 return function create(obj, assignProps1, assignProps2, etc) {
44434 var assignArgsList = slice$b(arguments, 1);
44435 return assign$2.apply(this, [Object.create(obj)].concat(assignArgsList))
44438 function F() {} // eslint-disable-line no-inner-declarations
44439 return function create(obj, assignProps1, assignProps2, etc) {
44440 var assignArgsList = slice$b(arguments, 1);
44442 return assign$2.apply(this, [new F()].concat(assignArgsList))
44447 function make_trim() {
44448 if (String.prototype.trim) {
44449 return function trim(str) {
44450 return String.prototype.trim.call(str)
44453 return function trim(str) {
44454 return str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '')
44459 function bind$3(obj, fn) {
44460 return function() {
44461 return fn.apply(obj, Array.prototype.slice.call(arguments, 0))
44465 function slice$b(arr, index) {
44466 return Array.prototype.slice.call(arr, index || 0)
44469 function each(obj, fn) {
44470 pluck(obj, function(val, key) {
44476 function map$5(obj, fn) {
44477 var res = (isList(obj) ? [] : {});
44478 pluck(obj, function(v, k) {
44485 function pluck(obj, fn) {
44487 for (var i=0; i<obj.length; i++) {
44488 if (fn(obj[i], i)) {
44493 for (var key in obj) {
44494 if (obj.hasOwnProperty(key)) {
44495 if (fn(obj[key], key)) {
44503 function isList(val) {
44504 return (val != null && typeof val != 'function' && typeof val.length == 'number')
44507 function isFunction$2(val) {
44508 return val && {}.toString.call(val) === '[object Function]'
44511 function isObject$2(val) {
44512 return val && {}.toString.call(val) === '[object Object]'
44515 var slice$c = util.slice;
44516 var pluck$1 = util.pluck;
44517 var each$1 = util.each;
44518 var bind$4 = util.bind;
44519 var create$8 = util.create;
44520 var isList$1 = util.isList;
44521 var isFunction$3 = util.isFunction;
44522 var isObject$3 = util.isObject;
44524 var storeEngine = {
44525 createStore: createStore
44532 // get returns the value of the given key. If that value
44533 // is undefined, it returns optionalDefaultValue instead.
44534 get: function(key, optionalDefaultValue) {
44535 var data = this.storage.read(this._namespacePrefix + key);
44536 return this._deserialize(data, optionalDefaultValue)
44539 // set will store the given value at key and returns value.
44540 // Calling set with value === undefined is equivalent to calling remove.
44541 set: function(key, value) {
44542 if (value === undefined) {
44543 return this.remove(key)
44545 this.storage.write(this._namespacePrefix + key, this._serialize(value));
44549 // remove deletes the key and value stored at the given key.
44550 remove: function(key) {
44551 this.storage.remove(this._namespacePrefix + key);
44554 // each will call the given callback once for each key-value pair
44556 each: function(callback) {
44558 this.storage.each(function(val, namespacedKey) {
44559 callback.call(self, self._deserialize(val), (namespacedKey || '').replace(self._namespaceRegexp, ''));
44563 // clearAll will remove all the stored key-value pairs in this store.
44564 clearAll: function() {
44565 this.storage.clearAll();
44568 // additional functionality that can't live in plugins
44569 // ---------------------------------------------------
44571 // hasNamespace returns true if this store instance has the given namespace.
44572 hasNamespace: function(namespace) {
44573 return (this._namespacePrefix == '__storejs_'+namespace+'_')
44576 // createStore creates a store.js instance with the first
44577 // functioning storage in the list of storage candidates,
44578 // and applies the the given mixins to the instance.
44579 createStore: function() {
44580 return createStore.apply(this, arguments)
44583 addPlugin: function(plugin) {
44584 this._addPlugin(plugin);
44587 namespace: function(namespace) {
44588 return createStore(this.storage, this.plugins, namespace)
44593 var _console = (typeof console == 'undefined' ? null : console);
44594 if (!_console) { return }
44595 var fn = (_console.warn ? _console.warn : _console.log);
44596 fn.apply(_console, arguments);
44599 function createStore(storages, plugins, namespace) {
44603 if (storages && !isList$1(storages)) {
44604 storages = [storages];
44606 if (plugins && !isList$1(plugins)) {
44607 plugins = [plugins];
44610 var namespacePrefix = (namespace ? '__storejs_'+namespace+'_' : '');
44611 var namespaceRegexp = (namespace ? new RegExp('^'+namespacePrefix) : null);
44612 var legalNamespaces = /^[a-zA-Z0-9_\-]*$/; // alpha-numeric + underscore and dash
44613 if (!legalNamespaces.test(namespace)) {
44614 throw new Error('store.js namespaces can only have alphanumerics + underscores and dashes')
44617 var _privateStoreProps = {
44618 _namespacePrefix: namespacePrefix,
44619 _namespaceRegexp: namespaceRegexp,
44621 _testStorage: function(storage) {
44623 var testStr = '__storejs__test__';
44624 storage.write(testStr, testStr);
44625 var ok = (storage.read(testStr) === testStr);
44626 storage.remove(testStr);
44633 _assignPluginFnProp: function(pluginFnProp, propName) {
44634 var oldFn = this[propName];
44635 this[propName] = function pluginFn() {
44636 var args = slice$c(arguments, 0);
44639 // super_fn calls the old function which was overwritten by
44641 function super_fn() {
44642 if (!oldFn) { return }
44643 each$1(arguments, function(arg, i) {
44646 return oldFn.apply(self, args)
44649 // Give mixing function access to super_fn by prefixing all mixin function
44650 // arguments with super_fn.
44651 var newFnArgs = [super_fn].concat(args);
44653 return pluginFnProp.apply(self, newFnArgs)
44657 _serialize: function(obj) {
44658 return JSON.stringify(obj)
44661 _deserialize: function(strVal, defaultVal) {
44662 if (!strVal) { return defaultVal }
44663 // It is possible that a raw string value has been previously stored
44664 // in a storage without using store.js, meaning it will be a raw
44665 // string value instead of a JSON serialized string. By defaulting
44666 // to the raw string value in case of a JSON parse error, we allow
44667 // for past stored values to be forwards-compatible with store.js
44669 try { val = JSON.parse(strVal); }
44670 catch(e) { val = strVal; }
44672 return (val !== undefined ? val : defaultVal)
44675 _addStorage: function(storage) {
44676 if (this.enabled) { return }
44677 if (this._testStorage(storage)) {
44678 this.storage = storage;
44679 this.enabled = true;
44683 _addPlugin: function(plugin) {
44686 // If the plugin is an array, then add all plugins in the array.
44687 // This allows for a plugin to depend on other plugins.
44688 if (isList$1(plugin)) {
44689 each$1(plugin, function(plugin) {
44690 self._addPlugin(plugin);
44695 // Keep track of all plugins we've seen so far, so that we
44696 // don't add any of them twice.
44697 var seenPlugin = pluck$1(this.plugins, function(seenPlugin) {
44698 return (plugin === seenPlugin)
44703 this.plugins.push(plugin);
44705 // Check that the plugin is properly formed
44706 if (!isFunction$3(plugin)) {
44707 throw new Error('Plugins must be function values that return objects')
44710 var pluginProperties = plugin.call(this);
44711 if (!isObject$3(pluginProperties)) {
44712 throw new Error('Plugins must return an object of function properties')
44715 // Add the plugin function properties to this store instance.
44716 each$1(pluginProperties, function(pluginFnProp, propName) {
44717 if (!isFunction$3(pluginFnProp)) {
44718 throw new Error('Bad plugin property: '+propName+' from plugin '+plugin.name+'. Plugins should only return functions.')
44720 self._assignPluginFnProp(pluginFnProp, propName);
44724 // Put deprecated properties in the private API, so as to not expose it to accidential
44725 // discovery through inspection of the store object.
44727 // Deprecated: addStorage
44728 addStorage: function(storage) {
44729 _warn('store.addStorage(storage) is deprecated. Use createStore([storages])');
44730 this._addStorage(storage);
44734 var store = create$8(_privateStoreProps, storeAPI, {
44738 each$1(store, function(prop, propName) {
44739 if (isFunction$3(prop)) {
44740 store.raw[propName] = bind$4(store, prop);
44743 each$1(storages, function(storage) {
44744 store._addStorage(storage);
44746 each$1(plugins, function(plugin) {
44747 store._addPlugin(plugin);
44752 var Global$1 = util.Global;
44754 var localStorage_1 = {
44755 name: 'localStorage',
44760 clearAll: clearAll,
44763 function localStorage$1() {
44764 return Global$1.localStorage
44767 function read(key) {
44768 return localStorage$1().getItem(key)
44771 function write(key, data) {
44772 return localStorage$1().setItem(key, data)
44775 function each$2(fn) {
44776 for (var i = localStorage$1().length - 1; i >= 0; i--) {
44777 var key = localStorage$1().key(i);
44778 fn(read(key), key);
44782 function remove$2(key) {
44783 return localStorage$1().removeItem(key)
44786 function clearAll() {
44787 return localStorage$1().clear()
44790 // oldFF-globalStorage provides storage for Firefox
44791 // versions 6 and 7, where no localStorage, etc
44795 var Global$2 = util.Global;
44797 var oldFFGlobalStorage = {
44798 name: 'oldFF-globalStorage',
44803 clearAll: clearAll$1,
44806 var globalStorage = Global$2.globalStorage;
44808 function read$1(key) {
44809 return globalStorage[key]
44812 function write$1(key, data) {
44813 globalStorage[key] = data;
44816 function each$3(fn) {
44817 for (var i = globalStorage.length - 1; i >= 0; i--) {
44818 var key = globalStorage.key(i);
44819 fn(globalStorage[key], key);
44823 function remove$3(key) {
44824 return globalStorage.removeItem(key)
44827 function clearAll$1() {
44828 each$3(function(key, _) {
44829 delete globalStorage[key];
44833 // oldIE-userDataStorage provides storage for Internet Explorer
44834 // versions 6 and 7, where no localStorage, sessionStorage, etc
44838 var Global$3 = util.Global;
44840 var oldIEUserDataStorage = {
44841 name: 'oldIE-userDataStorage',
44846 clearAll: clearAll$2,
44849 var storageName = 'storejs';
44850 var doc = Global$3.document;
44851 var _withStorageEl = _makeIEStorageElFunction();
44852 var disable = (Global$3.navigator ? Global$3.navigator.userAgent : '').match(/ (MSIE 8|MSIE 9|MSIE 10)\./); // MSIE 9.x, MSIE 10.x
44854 function write$2(unfixedKey, data) {
44855 if (disable) { return }
44856 var fixedKey = fixKey(unfixedKey);
44857 _withStorageEl(function(storageEl) {
44858 storageEl.setAttribute(fixedKey, data);
44859 storageEl.save(storageName);
44863 function read$2(unfixedKey) {
44864 if (disable) { return }
44865 var fixedKey = fixKey(unfixedKey);
44867 _withStorageEl(function(storageEl) {
44868 res = storageEl.getAttribute(fixedKey);
44873 function each$4(callback) {
44874 _withStorageEl(function(storageEl) {
44875 var attributes = storageEl.XMLDocument.documentElement.attributes;
44876 for (var i=attributes.length-1; i>=0; i--) {
44877 var attr = attributes[i];
44878 callback(storageEl.getAttribute(attr.name), attr.name);
44883 function remove$4(unfixedKey) {
44884 var fixedKey = fixKey(unfixedKey);
44885 _withStorageEl(function(storageEl) {
44886 storageEl.removeAttribute(fixedKey);
44887 storageEl.save(storageName);
44891 function clearAll$2() {
44892 _withStorageEl(function(storageEl) {
44893 var attributes = storageEl.XMLDocument.documentElement.attributes;
44894 storageEl.load(storageName);
44895 for (var i=attributes.length-1; i>=0; i--) {
44896 storageEl.removeAttribute(attributes[i].name);
44898 storageEl.save(storageName);
44905 // In IE7, keys cannot start with a digit or contain certain chars.
44906 // See https://github.com/marcuswestin/store.js/issues/40
44907 // See https://github.com/marcuswestin/store.js/issues/83
44908 var forbiddenCharsRegex = new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]", "g");
44909 function fixKey(key) {
44910 return key.replace(/^\d/, '___$&').replace(forbiddenCharsRegex, '___')
44913 function _makeIEStorageElFunction() {
44914 if (!doc || !doc.documentElement || !doc.documentElement.addBehavior) {
44917 var scriptTag = 'script',
44922 // Since #userData storage applies only to specific paths, we need to
44923 // somehow link our data to a specific path. We choose /favicon.ico
44924 // as a pretty safe option, since all browsers already make a request to
44925 // this URL anyway and being a 404 will not hurt us here. We wrap an
44926 // iframe pointing to the favicon in an ActiveXObject(htmlfile) object
44927 // (see: http://msdn.microsoft.com/en-us/library/aa752574(v=VS.85).aspx)
44928 // since the iframe access rules appear to allow direct access and
44929 // manipulation of the document element, even for a 404 page. This
44930 // document can be used instead of the current document (which would
44931 // have been limited to the current path) to perform #userData storage.
44933 /* global ActiveXObject */
44934 storageContainer = new ActiveXObject('htmlfile');
44935 storageContainer.open();
44936 storageContainer.write('<'+scriptTag+'>document.w=window</'+scriptTag+'><iframe src="/favicon.ico"></iframe>');
44937 storageContainer.close();
44938 storageOwner = storageContainer.w.frames[0].document;
44939 storageEl = storageOwner.createElement('div');
44941 // somehow ActiveXObject instantiation failed (perhaps some special
44942 // security settings or otherwse), fall back to per-path storage
44943 storageEl = doc.createElement('div');
44944 storageOwner = doc.body;
44947 return function(storeFunction) {
44948 var args = [].slice.call(arguments, 0);
44949 args.unshift(storageEl);
44950 // See http://msdn.microsoft.com/en-us/library/ms531081(v=VS.85).aspx
44951 // and http://msdn.microsoft.com/en-us/library/ms531424(v=VS.85).aspx
44952 storageOwner.appendChild(storageEl);
44953 storageEl.addBehavior('#default#userData');
44954 storageEl.load(storageName);
44955 storeFunction.apply(this, args);
44956 storageOwner.removeChild(storageEl);
44961 // cookieStorage is useful Safari private browser mode, where localStorage
44962 // doesn't work but cookies do. This implementation is adopted from
44963 // https://developer.mozilla.org/en-US/docs/Web/API/Storage/LocalStorage
44966 var Global$4 = util.Global;
44967 var trim$2 = util.trim;
44969 var cookieStorage = {
44970 name: 'cookieStorage',
44975 clearAll: clearAll$3,
44978 var doc$1 = Global$4.document;
44980 function read$3(key) {
44981 if (!key || !_has(key)) { return null }
44982 var regexpStr = "(?:^|.*;\\s*)" +
44983 escape(key).replace(/[\-\.\+\*]/g, "\\$&") +
44984 "\\s*\\=\\s*((?:[^;](?!;))*[^;]?).*";
44985 return unescape(doc$1.cookie.replace(new RegExp(regexpStr), "$1"))
44988 function each$5(callback) {
44989 var cookies = doc$1.cookie.split(/; ?/g);
44990 for (var i = cookies.length - 1; i >= 0; i--) {
44991 if (!trim$2(cookies[i])) {
44994 var kvp = cookies[i].split('=');
44995 var key = unescape(kvp[0]);
44996 var val = unescape(kvp[1]);
44997 callback(val, key);
45001 function write$3(key, data) {
45002 if(!key) { return }
45003 doc$1.cookie = escape(key) + "=" + escape(data) + "; expires=Tue, 19 Jan 2038 03:14:07 GMT; path=/";
45006 function remove$5(key) {
45007 if (!key || !_has(key)) {
45010 doc$1.cookie = escape(key) + "=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/";
45013 function clearAll$3() {
45014 each$5(function(_, key) {
45019 function _has(key) {
45020 return (new RegExp("(?:^|;\\s*)" + escape(key).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=")).test(doc$1.cookie)
45023 var Global$5 = util.Global;
45025 var sessionStorage_1 = {
45026 name: 'sessionStorage',
45031 clearAll: clearAll$4
45034 function sessionStorage() {
45035 return Global$5.sessionStorage
45038 function read$4(key) {
45039 return sessionStorage().getItem(key)
45042 function write$4(key, data) {
45043 return sessionStorage().setItem(key, data)
45046 function each$6(fn) {
45047 for (var i = sessionStorage().length - 1; i >= 0; i--) {
45048 var key = sessionStorage().key(i);
45049 fn(read$4(key), key);
45053 function remove$6(key) {
45054 return sessionStorage().removeItem(key)
45057 function clearAll$4() {
45058 return sessionStorage().clear()
45061 // memoryStorage is a useful last fallback to ensure that the store
45062 // is functions (meaning store.get(), store.set(), etc will all function).
45063 // However, stored values will not persist when the browser navigates to
45064 // a new page or reloads the current page.
45066 var memoryStorage_1 = {
45067 name: 'memoryStorage',
45072 clearAll: clearAll$5,
45075 var memoryStorage = {};
45077 function read$5(key) {
45078 return memoryStorage[key]
45081 function write$5(key, data) {
45082 memoryStorage[key] = data;
45085 function each$7(callback) {
45086 for (var key in memoryStorage) {
45087 if (memoryStorage.hasOwnProperty(key)) {
45088 callback(memoryStorage[key], key);
45093 function remove$7(key) {
45094 delete memoryStorage[key];
45097 function clearAll$5(key) {
45098 memoryStorage = {};
45102 // Listed in order of usage preference
45104 oldFFGlobalStorage,
45105 oldIEUserDataStorage,
45111 /* eslint-disable */
45116 // NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
45117 // See http://www.JSON.org/js.html
45118 // This code should be minified before deployment.
45119 // See http://javascript.crockford.com/jsmin.html
45121 // USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
45124 // This file creates a global JSON object containing two methods: stringify
45125 // and parse. This file provides the ES5 JSON capability to ES3 systems.
45126 // If a project might run on IE8 or earlier, then this file should be included.
45127 // This file does nothing on ES5 systems.
45129 // JSON.stringify(value, replacer, space)
45130 // value any JavaScript value, usually an object or array.
45131 // replacer an optional parameter that determines how object
45132 // values are stringified for objects. It can be a
45133 // function or an array of strings.
45134 // space an optional parameter that specifies the indentation
45135 // of nested structures. If it is omitted, the text will
45136 // be packed without extra whitespace. If it is a number,
45137 // it will specify the number of spaces to indent at each
45138 // level. If it is a string (such as "\t" or " "),
45139 // it contains the characters used to indent at each level.
45140 // This method produces a JSON text from a JavaScript value.
45141 // When an object value is found, if the object contains a toJSON
45142 // method, its toJSON method will be called and the result will be
45143 // stringified. A toJSON method does not serialize: it returns the
45144 // value represented by the name/value pair that should be serialized,
45145 // or undefined if nothing should be serialized. The toJSON method
45146 // will be passed the key associated with the value, and this will be
45147 // bound to the value.
45149 // For example, this would serialize Dates as ISO strings.
45151 // Date.prototype.toJSON = function (key) {
45153 // // Format integers to have at least two digits.
45158 // return this.getUTCFullYear() + "-" +
45159 // f(this.getUTCMonth() + 1) + "-" +
45160 // f(this.getUTCDate()) + "T" +
45161 // f(this.getUTCHours()) + ":" +
45162 // f(this.getUTCMinutes()) + ":" +
45163 // f(this.getUTCSeconds()) + "Z";
45166 // You can provide an optional replacer method. It will be passed the
45167 // key and value of each member, with this bound to the containing
45168 // object. The value that is returned from your method will be
45169 // serialized. If your method returns undefined, then the member will
45170 // be excluded from the serialization.
45172 // If the replacer parameter is an array of strings, then it will be
45173 // used to select the members to be serialized. It filters the results
45174 // such that only members with keys listed in the replacer array are
45177 // Values that do not have JSON representations, such as undefined or
45178 // functions, will not be serialized. Such values in objects will be
45179 // dropped; in arrays they will be replaced with null. You can use
45180 // a replacer function to replace those with JSON values.
45182 // JSON.stringify(undefined) returns undefined.
45184 // The optional space parameter produces a stringification of the
45185 // value that is filled with line breaks and indentation to make it
45188 // If the space parameter is a non-empty string, then that string will
45189 // be used for indentation. If the space parameter is a number, then
45190 // the indentation will be that many spaces.
45194 // text = JSON.stringify(["e", {pluribus: "unum"}]);
45195 // // text is '["e",{"pluribus":"unum"}]'
45197 // text = JSON.stringify(["e", {pluribus: "unum"}], null, "\t");
45198 // // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
45200 // text = JSON.stringify([new Date()], function (key, value) {
45201 // return this[key] instanceof Date
45202 // ? "Date(" + this[key] + ")"
45205 // // text is '["Date(---current time---)"]'
45207 // JSON.parse(text, reviver)
45208 // This method parses a JSON text to produce an object or array.
45209 // It can throw a SyntaxError exception.
45211 // The optional reviver parameter is a function that can filter and
45212 // transform the results. It receives each of the keys and values,
45213 // and its return value is used instead of the original value.
45214 // If it returns what it received, then the structure is not modified.
45215 // If it returns undefined then the member is deleted.
45219 // // Parse the text. Values that look like ISO date strings will
45220 // // be converted to Date objects.
45222 // myData = JSON.parse(text, function (key, value) {
45224 // if (typeof value === "string") {
45226 // /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
45228 // return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
45235 // myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
45237 // if (typeof value === "string" &&
45238 // value.slice(0, 5) === "Date(" &&
45239 // value.slice(-1) === ")") {
45240 // d = new Date(value.slice(5, -1));
45248 // This is a reference implementation. You are free to copy, modify, or
45256 JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
45257 getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
45258 lastIndex, length, parse, prototype, push, replace, slice, stringify,
45259 test, toJSON, toString, valueOf
45263 // Create a JSON object only if one does not already exist. We create the
45264 // methods in a closure to avoid creating global variables.
45266 if (typeof JSON !== "object") {
45272 var rx_one = /^[\],:{}\s]*$/;
45273 var rx_two = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g;
45274 var rx_three = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g;
45275 var rx_four = /(?:^|:|,)(?:\s*\[)+/g;
45276 var rx_escapable = /[\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
45277 var rx_dangerous = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
45280 // Format integers to have at least two digits.
45286 function this_value() {
45287 return this.valueOf();
45290 if (typeof Date.prototype.toJSON !== "function") {
45292 Date.prototype.toJSON = function () {
45294 return isFinite(this.valueOf())
45295 ? this.getUTCFullYear() + "-" +
45296 f(this.getUTCMonth() + 1) + "-" +
45297 f(this.getUTCDate()) + "T" +
45298 f(this.getUTCHours()) + ":" +
45299 f(this.getUTCMinutes()) + ":" +
45300 f(this.getUTCSeconds()) + "Z"
45304 Boolean.prototype.toJSON = this_value;
45305 Number.prototype.toJSON = this_value;
45306 String.prototype.toJSON = this_value;
45315 function quote(string) {
45317 // If the string contains no control characters, no quote characters, and no
45318 // backslash characters, then we can safely slap some quotes around it.
45319 // Otherwise we must also replace the offending characters with safe escape
45322 rx_escapable.lastIndex = 0;
45323 return rx_escapable.test(string)
45324 ? "\"" + string.replace(rx_escapable, function (a) {
45326 return typeof c === "string"
45328 : "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4);
45330 : "\"" + string + "\"";
45334 function str(key, holder) {
45336 // Produce a string from holder[key].
45338 var i; // The loop counter.
45339 var k; // The member key.
45340 var v; // The member value.
45344 var value = holder[key];
45346 // If the value has a toJSON method, call it to obtain a replacement value.
45348 if (value && typeof value === "object" &&
45349 typeof value.toJSON === "function") {
45350 value = value.toJSON(key);
45353 // If we were called with a replacer function, then call the replacer to
45354 // obtain a replacement value.
45356 if (typeof rep === "function") {
45357 value = rep.call(holder, key, value);
45360 // What happens next depends on the value's type.
45362 switch (typeof value) {
45364 return quote(value);
45368 // JSON numbers must be finite. Encode non-finite numbers as null.
45370 return isFinite(value)
45377 // If the value is a boolean or null, convert it to a string. Note:
45378 // typeof null does not produce "null". The case is included here in
45379 // the remote chance that this gets fixed someday.
45381 return String(value);
45383 // If the type is "object", we might be dealing with an object or an array or
45388 // Due to a specification blunder in ECMAScript, typeof null is "object",
45389 // so watch out for that case.
45395 // Make an array to hold the partial results of stringifying this object value.
45400 // Is the value an array?
45402 if (Object.prototype.toString.apply(value) === "[object Array]") {
45404 // The value is an array. Stringify every element. Use null as a placeholder
45405 // for non-JSON values.
45407 length = value.length;
45408 for (i = 0; i < length; i += 1) {
45409 partial[i] = str(i, value) || "null";
45412 // Join all of the elements together, separated with commas, and wrap them in
45415 v = partial.length === 0
45418 ? "[\n" + gap + partial.join(",\n" + gap) + "\n" + mind + "]"
45419 : "[" + partial.join(",") + "]";
45424 // If the replacer is an array, use it to select the members to be stringified.
45426 if (rep && typeof rep === "object") {
45427 length = rep.length;
45428 for (i = 0; i < length; i += 1) {
45429 if (typeof rep[i] === "string") {
45433 partial.push(quote(k) + (
45443 // Otherwise, iterate through all of the keys in the object.
45446 if (Object.prototype.hasOwnProperty.call(value, k)) {
45449 partial.push(quote(k) + (
45459 // Join all of the member texts together, separated with commas,
45460 // and wrap them in braces.
45462 v = partial.length === 0
45465 ? "{\n" + gap + partial.join(",\n" + gap) + "\n" + mind + "}"
45466 : "{" + partial.join(",") + "}";
45472 // If the JSON object does not yet have a stringify method, give it one.
45474 if (typeof JSON.stringify !== "function") {
45475 meta = { // table of character substitutions
45484 JSON.stringify = function (value, replacer, space) {
45486 // The stringify method takes a value and an optional replacer, and an optional
45487 // space parameter, and returns a JSON text. The replacer can be a function
45488 // that can replace values, or an array of strings that will select the keys.
45489 // A default replacer method can be provided. Use of the space parameter can
45490 // produce text that is more easily readable.
45496 // If the space parameter is a number, make an indent string containing that
45499 if (typeof space === "number") {
45500 for (i = 0; i < space; i += 1) {
45504 // If the space parameter is a string, it will be used as the indent string.
45506 } else if (typeof space === "string") {
45510 // If there is a replacer, it must be a function or an array.
45511 // Otherwise, throw an error.
45514 if (replacer && typeof replacer !== "function" &&
45515 (typeof replacer !== "object" ||
45516 typeof replacer.length !== "number")) {
45517 throw new Error("JSON.stringify");
45520 // Make a fake root object containing our value under the key of "".
45521 // Return the result of stringifying the value.
45523 return str("", {"": value});
45528 // If the JSON object does not yet have a parse method, give it one.
45530 if (typeof JSON.parse !== "function") {
45531 JSON.parse = function (text, reviver) {
45533 // The parse method takes a text and an optional reviver function, and returns
45534 // a JavaScript value if the text is a valid JSON text.
45538 function walk(holder, key) {
45540 // The walk method is used to recursively walk the resulting structure so
45541 // that modifications can be made.
45545 var value = holder[key];
45546 if (value && typeof value === "object") {
45548 if (Object.prototype.hasOwnProperty.call(value, k)) {
45549 v = walk(value, k);
45550 if (v !== undefined) {
45558 return reviver.call(holder, key, value);
45562 // Parsing happens in four stages. In the first stage, we replace certain
45563 // Unicode characters with escape sequences. JavaScript handles many characters
45564 // incorrectly, either silently deleting them, or treating them as line endings.
45566 text = String(text);
45567 rx_dangerous.lastIndex = 0;
45568 if (rx_dangerous.test(text)) {
45569 text = text.replace(rx_dangerous, function (a) {
45571 ("0000" + a.charCodeAt(0).toString(16)).slice(-4);
45575 // In the second stage, we run the text against regular expressions that look
45576 // for non-JSON patterns. We are especially concerned with "()" and "new"
45577 // because they can cause invocation, and "=" because it can cause mutation.
45578 // But just to be safe, we want to reject all unexpected forms.
45580 // We split the second stage into 4 regexp operations in order to work around
45581 // crippling inefficiencies in IE's and Safari's regexp engines. First we
45582 // replace the JSON backslash pairs with "@" (a non-JSON character). Second, we
45583 // replace all simple value tokens with "]" characters. Third, we delete all
45584 // open brackets that follow a colon or comma or that begin the text. Finally,
45585 // we look to see that the remaining characters are only whitespace or "]" or
45586 // "," or ":" or "{" or "}". If that is so, then the text is safe for eval.
45591 .replace(rx_two, "@")
45592 .replace(rx_three, "]")
45593 .replace(rx_four, "")
45597 // In the third stage we use the eval function to compile the text into a
45598 // JavaScript structure. The "{" operator is subject to a syntactic ambiguity
45599 // in JavaScript: it can begin a block or an object literal. We wrap the text
45600 // in parens to eliminate the ambiguity.
45602 j = eval("(" + text + ")");
45604 // In the optional fourth stage, we recursively walk the new structure, passing
45605 // each name/value pair to a reviver function for possible transformation.
45607 return (typeof reviver === "function")
45608 ? walk({"": j}, "")
45612 // If the text is not JSON parseable, then a SyntaxError is thrown.
45614 throw new SyntaxError("JSON.parse");
45619 var json2 = json2Plugin;
45621 function json2Plugin() {
45626 var plugins = [json2];
45628 var store_legacy = storeEngine.createStore(all, plugins);
45632 // This code is only compatible with IE10+ because the [XDomainRequest](http://bit.ly/LfO7xo)
45633 // object, IE<10's idea of [CORS](http://en.wikipedia.org/wiki/Cross-origin_resource_sharing),
45634 // does not support custom headers, which this uses everywhere.
45635 var osmAuth = function(o) {
45639 // authenticated users will also have a request token secret, but it's
45640 // not used in transactions with the server
45641 oauth.authenticated = function() {
45642 return !!(token('oauth_token') && token('oauth_token_secret'));
45645 oauth.logout = function() {
45646 token('oauth_token', '');
45647 token('oauth_token_secret', '');
45648 token('oauth_request_token_secret', '');
45652 // TODO: detect lack of click event
45653 oauth.authenticate = function(callback) {
45654 if (oauth.authenticated()) return callback();
45658 // ## Getting a request token
45659 var params = timenonce(getAuth(o)),
45660 url = o.url + '/oauth/request_token';
45662 params.oauth_signature = ohauth_1.signature(
45663 o.oauth_secret, '',
45664 ohauth_1.baseString('POST', url, params));
45666 if (!o.singlepage) {
45667 // Create a 600x550 popup window in the center of the screen
45668 var w = 600, h = 550,
45670 ['width', w], ['height', h],
45671 ['left', screen.width / 2 - w / 2],
45672 ['top', screen.height / 2 - h / 2]].map(function(x) {
45673 return x.join('=');
45675 popup = window.open('about:blank', 'oauth_window', settings);
45678 // Request a request token. When this is complete, the popup
45679 // window is redirected to OSM's authorization page.
45680 ohauth_1.xhr('POST', url, params, null, {}, reqTokenDone);
45683 function reqTokenDone(err, xhr) {
45685 if (err) return callback(err);
45686 var resp = ohauth_1.stringQs(xhr.response);
45687 token('oauth_request_token_secret', resp.oauth_token_secret);
45688 var authorize_url = o.url + '/oauth/authorize?' + ohauth_1.qsString({
45689 oauth_token: resp.oauth_token,
45690 oauth_callback: resolveUrl(o.landing)
45693 if (o.singlepage) {
45694 location.href = authorize_url;
45696 popup.location = authorize_url;
45700 // Called by a function in a landing page, in the popup window. The
45701 // window closes itself.
45702 window.authComplete = function(token) {
45703 var oauth_token = ohauth_1.stringQs(token.split('?')[1]);
45704 get_access_token(oauth_token.oauth_token);
45705 delete window.authComplete;
45708 // ## Getting an request token
45710 // At this point we have an `oauth_token`, brought in from a function
45711 // call on a landing page popup.
45712 function get_access_token(oauth_token) {
45713 var url = o.url + '/oauth/access_token',
45714 params = timenonce(getAuth(o)),
45715 request_token_secret = token('oauth_request_token_secret');
45716 params.oauth_token = oauth_token;
45717 params.oauth_signature = ohauth_1.signature(
45719 request_token_secret,
45720 ohauth_1.baseString('POST', url, params));
45722 // ## Getting an access token
45724 // The final token required for authentication. At this point
45725 // we have a `request token secret`
45726 ohauth_1.xhr('POST', url, params, null, {}, accessTokenDone);
45730 function accessTokenDone(err, xhr) {
45732 if (err) return callback(err);
45733 var access_token = ohauth_1.stringQs(xhr.response);
45734 token('oauth_token', access_token.oauth_token);
45735 token('oauth_token_secret', access_token.oauth_token_secret);
45736 callback(null, oauth);
45740 oauth.bootstrapToken = function(oauth_token, callback) {
45741 // ## Getting an request token
45742 // At this point we have an `oauth_token`, brought in from a function
45743 // call on a landing page popup.
45744 function get_access_token(oauth_token) {
45745 var url = o.url + '/oauth/access_token',
45746 params = timenonce(getAuth(o)),
45747 request_token_secret = token('oauth_request_token_secret');
45748 params.oauth_token = oauth_token;
45749 params.oauth_signature = ohauth_1.signature(
45751 request_token_secret,
45752 ohauth_1.baseString('POST', url, params));
45754 // ## Getting an access token
45755 // The final token required for authentication. At this point
45756 // we have a `request token secret`
45757 ohauth_1.xhr('POST', url, params, null, {}, accessTokenDone);
45761 function accessTokenDone(err, xhr) {
45763 if (err) return callback(err);
45764 var access_token = ohauth_1.stringQs(xhr.response);
45765 token('oauth_token', access_token.oauth_token);
45766 token('oauth_token_secret', access_token.oauth_token_secret);
45767 callback(null, oauth);
45770 get_access_token(oauth_token);
45775 // A single XMLHttpRequest wrapper that does authenticated calls if the
45776 // user has logged in.
45777 oauth.xhr = function(options, callback) {
45778 if (!oauth.authenticated()) {
45780 return oauth.authenticate(run);
45782 callback('not authenticated', null);
45790 var params = timenonce(getAuth(o)),
45791 oauth_token_secret = token('oauth_token_secret'),
45792 url = (options.prefix !== false) ? o.url + options.path : options.path,
45793 url_parts = url.replace(/#.*$/, '').split('?', 2),
45794 base_url = url_parts[0],
45795 query = (url_parts.length === 2) ? url_parts[1] : '';
45797 // https://tools.ietf.org/html/rfc5849#section-3.4.1.3.1
45798 if ((!options.options || !options.options.header ||
45799 options.options.header['Content-Type'] === 'application/x-www-form-urlencoded') &&
45801 params = immutable(params, ohauth_1.stringQs(options.content));
45804 params.oauth_token = token('oauth_token');
45805 params.oauth_signature = ohauth_1.signature(
45807 oauth_token_secret,
45808 ohauth_1.baseString(options.method, base_url, immutable(params, ohauth_1.stringQs(query)))
45811 return ohauth_1.xhr(options.method, url, params, options.content, options.options, done);
45814 function done(err, xhr) {
45815 if (err) return callback(err);
45816 else if (xhr.responseXML) return callback(err, xhr.responseXML);
45817 else return callback(err, xhr.response);
45821 // pre-authorize this object, if we can just get a token and token_secret
45823 oauth.preauth = function(c) {
45825 if (c.oauth_token) token('oauth_token', c.oauth_token);
45826 if (c.oauth_token_secret) token('oauth_token_secret', c.oauth_token_secret);
45830 oauth.options = function(_) {
45831 if (!arguments.length) return o;
45834 o.url = o.url || 'https://www.openstreetmap.org';
45835 o.landing = o.landing || 'land.html';
45836 o.singlepage = o.singlepage || false;
45838 // Optional loading and loading-done functions for nice UI feedback.
45839 // by default, no-ops
45840 o.loading = o.loading || function() {};
45841 o.done = o.done || function() {};
45843 return oauth.preauth(o);
45846 // 'stamp' an authentication object from `getAuth()`
45847 // with a [nonce](http://en.wikipedia.org/wiki/Cryptographic_nonce)
45849 function timenonce(o) {
45850 o.oauth_timestamp = ohauth_1.timestamp();
45851 o.oauth_nonce = ohauth_1.nonce();
45855 // get/set tokens. These are prefixed with the base URL so that `osm-auth`
45856 // can be used with multiple APIs and the keys in `localStorage`
45860 if (store_legacy.enabled) {
45861 token = function (x, y) {
45862 if (arguments.length === 1) return store_legacy.get(o.url + x);
45863 else if (arguments.length === 2) return store_legacy.set(o.url + x, y);
45867 token = function (x, y) {
45868 if (arguments.length === 1) return storage[o.url + x];
45869 else if (arguments.length === 2) return storage[o.url + x] = y;
45873 // Get an authentication object. If you just add and remove properties
45874 // from a single object, you'll need to use `delete` to make sure that
45875 // it doesn't contain undesired properties for authentication
45876 function getAuth(o) {
45878 oauth_consumer_key: o.oauth_consumer_key,
45879 oauth_signature_method: 'HMAC-SHA1'
45883 // potentially pre-authorize
45889 var JXON = new (function () {
45891 sValueProp = 'keyValue', sAttributesProp = 'keyAttributes', sAttrPref = '@', /* you can customize these values */
45892 aCache = [], rIsNull = /^\s*$/, rIsBool = /^(?:true|false)$/i;
45894 function parseText (sValue) {
45895 if (rIsNull.test(sValue)) { return null; }
45896 if (rIsBool.test(sValue)) { return sValue.toLowerCase() === 'true'; }
45897 if (isFinite(sValue)) { return parseFloat(sValue); }
45898 if (isFinite(Date.parse(sValue))) { return new Date(sValue); }
45902 function EmptyTree () { }
45903 EmptyTree.prototype.toString = function () { return 'null'; };
45904 EmptyTree.prototype.valueOf = function () { return null; };
45906 function objectify (vValue) {
45907 return vValue === null ? new EmptyTree() : vValue instanceof Object ? vValue : new vValue.constructor(vValue);
45910 function createObjTree (oParentNode, nVerb, bFreeze, bNesteAttr) {
45912 nLevelStart = aCache.length, bChildren = oParentNode.hasChildNodes(),
45913 bAttributes = oParentNode.hasAttributes(), bHighVerb = Boolean(nVerb & 2);
45916 sProp, vContent, nLength = 0, sCollectedTxt = '',
45917 vResult = bHighVerb ? {} : /* put here the default value for empty nodes: */ true;
45920 for (var oNode, nItem = 0; nItem < oParentNode.childNodes.length; nItem++) {
45921 oNode = oParentNode.childNodes.item(nItem);
45922 if (oNode.nodeType === 4) { sCollectedTxt += oNode.nodeValue; } /* nodeType is 'CDATASection' (4) */
45923 else if (oNode.nodeType === 3) { sCollectedTxt += oNode.nodeValue.trim(); } /* nodeType is 'Text' (3) */
45924 else if (oNode.nodeType === 1 && !oNode.prefix) { aCache.push(oNode); } /* nodeType is 'Element' (1) */
45928 var nLevelEnd = aCache.length, vBuiltVal = parseText(sCollectedTxt);
45930 if (!bHighVerb && (bChildren || bAttributes)) { vResult = nVerb === 0 ? objectify(vBuiltVal) : {}; }
45932 for (var nElId = nLevelStart; nElId < nLevelEnd; nElId++) {
45933 sProp = aCache[nElId].nodeName.toLowerCase();
45934 vContent = createObjTree(aCache[nElId], nVerb, bFreeze, bNesteAttr);
45935 if (vResult.hasOwnProperty(sProp)) {
45936 if (vResult[sProp].constructor !== Array) { vResult[sProp] = [vResult[sProp]]; }
45937 vResult[sProp].push(vContent);
45939 vResult[sProp] = vContent;
45946 nAttrLen = oParentNode.attributes.length,
45947 sAPrefix = bNesteAttr ? '' : sAttrPref, oAttrParent = bNesteAttr ? {} : vResult;
45949 for (var oAttrib, nAttrib = 0; nAttrib < nAttrLen; nLength++, nAttrib++) {
45950 oAttrib = oParentNode.attributes.item(nAttrib);
45951 oAttrParent[sAPrefix + oAttrib.name.toLowerCase()] = parseText(oAttrib.value.trim());
45955 if (bFreeze) { Object.freeze(oAttrParent); }
45956 vResult[sAttributesProp] = oAttrParent;
45957 nLength -= nAttrLen - 1;
45961 if (nVerb === 3 || (nVerb === 2 || nVerb === 1 && nLength > 0) && sCollectedTxt) {
45962 vResult[sValueProp] = vBuiltVal;
45963 } else if (!bHighVerb && nLength === 0 && sCollectedTxt) {
45964 vResult = vBuiltVal;
45967 if (bFreeze && (bHighVerb || nLength > 0)) { Object.freeze(vResult); }
45969 aCache.length = nLevelStart;
45974 function loadObjTree (oXMLDoc, oParentEl, oParentObj) {
45975 var vValue, oChild;
45977 if (oParentObj instanceof String || oParentObj instanceof Number || oParentObj instanceof Boolean) {
45978 oParentEl.appendChild(oXMLDoc.createTextNode(oParentObj.toString())); /* verbosity level is 0 */
45979 } else if (oParentObj.constructor === Date) {
45980 oParentEl.appendChild(oXMLDoc.createTextNode(oParentObj.toGMTString()));
45983 for (var sName in oParentObj) {
45984 vValue = oParentObj[sName];
45985 if (isFinite(sName) || vValue instanceof Function) { continue; } /* verbosity level is 0 */
45986 if (sName === sValueProp) {
45987 if (vValue !== null && vValue !== true) { oParentEl.appendChild(oXMLDoc.createTextNode(vValue.constructor === Date ? vValue.toGMTString() : String(vValue))); }
45988 } else if (sName === sAttributesProp) { /* verbosity level is 3 */
45989 for (var sAttrib in vValue) { oParentEl.setAttribute(sAttrib, vValue[sAttrib]); }
45990 } else if (sName.charAt(0) === sAttrPref) {
45991 oParentEl.setAttribute(sName.slice(1), vValue);
45992 } else if (vValue.constructor === Array) {
45993 for (var nItem = 0; nItem < vValue.length; nItem++) {
45994 oChild = oXMLDoc.createElement(sName);
45995 loadObjTree(oXMLDoc, oChild, vValue[nItem]);
45996 oParentEl.appendChild(oChild);
45999 oChild = oXMLDoc.createElement(sName);
46000 if (vValue instanceof Object) {
46001 loadObjTree(oXMLDoc, oChild, vValue);
46002 } else if (vValue !== null && vValue !== true) {
46003 oChild.appendChild(oXMLDoc.createTextNode(vValue.toString()));
46005 oParentEl.appendChild(oChild);
46010 this.build = function (oXMLParent, nVerbosity /* optional */, bFreeze /* optional */, bNesteAttributes /* optional */) {
46011 var _nVerb = arguments.length > 1 && typeof nVerbosity === 'number' ? nVerbosity & 3 : /* put here the default verbosity level: */ 1;
46012 return createObjTree(oXMLParent, _nVerb, bFreeze || false, arguments.length > 3 ? bNesteAttributes : _nVerb === 3);
46015 this.unbuild = function (oObjTree) {
46016 var oNewDoc = document.implementation.createDocument('', '', null);
46017 loadObjTree(oNewDoc, oNewDoc, oObjTree);
46021 this.stringify = function (oObjTree) {
46022 return (new XMLSerializer()).serializeToString(JXON.unbuild(oObjTree));
46026 // var myObject = JXON.build(doc);
46027 // we got our javascript object! try: alert(JSON.stringify(myObject));
46029 // var newDoc = JXON.unbuild(myObject);
46030 // we got our Document instance! try: alert((new XMLSerializer()).serializeToString(newDoc));
46032 var tiler$4 = utilTiler();
46033 var dispatch$5 = dispatch('authLoading', 'authDone', 'change', 'loading', 'loaded', 'loadedNotes');
46034 var urlroot = 'https://www.openstreetmap.org';
46035 var oauth = osmAuth({
46037 oauth_consumer_key: '5A043yRSEugj4DJ5TljuapfnrflWDte8jTOcWLlT',
46038 oauth_secret: 'aB3jKq1TRsCOUrfOIZ6oQMEDmv2ptV76PA54NGLL',
46039 loading: authLoading,
46043 var _blacklists = ['.*\.google(apis)?\..*/(vt|kh)[\?/].*([xyz]=.*){3}.*'];
46044 var _tileCache = { toLoad: {}, loaded: {}, inflight: {}, seen: {}, rtree: rbush_1() };
46045 var _noteCache = { toLoad: {}, loaded: {}, inflight: {}, inflightPost: {}, note: {}, closed: {}, rtree: rbush_1() };
46046 var _userCache = { toLoad: {}, user: {} };
46047 var _changeset = {};
46049 var _deferred = new Set();
46050 var _connectionID = 1;
46051 var _tileZoom = 16;
46052 var _noteZoom = 12;
46053 var _rateLimitError;
46054 var _userChangesets;
46059 function authLoading() {
46060 dispatch$5.call('authLoading');
46064 function authDone() {
46065 dispatch$5.call('authDone');
46069 function abortRequest$4(controllerOrXHR) {
46070 if (controllerOrXHR) {
46071 controllerOrXHR.abort();
46076 function hasInflightRequests(cache) {
46077 return Object.keys(cache.inflight).length;
46081 function abortUnwantedRequests$2(cache, visibleTiles) {
46082 Object.keys(cache.inflight).forEach(function(k) {
46083 if (cache.toLoad[k]) return;
46084 if (visibleTiles.find(function(tile) { return k === tile.id; })) return;
46086 abortRequest$4(cache.inflight[k]);
46087 delete cache.inflight[k];
46092 function getLoc(attrs) {
46093 var lon = attrs.lon && attrs.lon.value;
46094 var lat = attrs.lat && attrs.lat.value;
46095 return [parseFloat(lon), parseFloat(lat)];
46099 function getNodes(obj) {
46100 var elems = obj.getElementsByTagName('nd');
46101 var nodes = new Array(elems.length);
46102 for (var i = 0, l = elems.length; i < l; i++) {
46103 nodes[i] = 'n' + elems[i].attributes.ref.value;
46109 function getTags(obj) {
46110 var elems = obj.getElementsByTagName('tag');
46112 for (var i = 0, l = elems.length; i < l; i++) {
46113 var attrs = elems[i].attributes;
46114 tags[attrs.k.value] = attrs.v.value;
46121 function getMembers(obj) {
46122 var elems = obj.getElementsByTagName('member');
46123 var members = new Array(elems.length);
46124 for (var i = 0, l = elems.length; i < l; i++) {
46125 var attrs = elems[i].attributes;
46127 id: attrs.type.value[0] + attrs.ref.value,
46128 type: attrs.type.value,
46129 role: attrs.role.value
46136 function getVisible(attrs) {
46137 return (!attrs.visible || attrs.visible.value !== 'false');
46141 function parseComments(comments) {
46142 var parsedComments = [];
46144 // for each comment
46145 for (var i = 0; i < comments.length; i++) {
46146 var comment = comments[i];
46147 if (comment.nodeName === 'comment') {
46148 var childNodes = comment.childNodes;
46149 var parsedComment = {};
46151 for (var j = 0; j < childNodes.length; j++) {
46152 var node = childNodes[j];
46153 var nodeName = node.nodeName;
46154 if (nodeName === '#text') continue;
46155 parsedComment[nodeName] = node.textContent;
46157 if (nodeName === 'uid') {
46158 var uid = node.textContent;
46159 if (uid && !_userCache.user[uid]) {
46160 _userCache.toLoad[uid] = true;
46165 if (parsedComment) {
46166 parsedComments.push(parsedComment);
46170 return parsedComments;
46174 function encodeNoteRtree(note) {
46186 node: function nodeData(obj, uid) {
46187 var attrs = obj.attributes;
46188 return new osmNode({
46190 visible: getVisible(attrs),
46191 version: attrs.version.value,
46192 changeset: attrs.changeset && attrs.changeset.value,
46193 timestamp: attrs.timestamp && attrs.timestamp.value,
46194 user: attrs.user && attrs.user.value,
46195 uid: attrs.uid && attrs.uid.value,
46196 loc: getLoc(attrs),
46201 way: function wayData(obj, uid) {
46202 var attrs = obj.attributes;
46203 return new osmWay({
46205 visible: getVisible(attrs),
46206 version: attrs.version.value,
46207 changeset: attrs.changeset && attrs.changeset.value,
46208 timestamp: attrs.timestamp && attrs.timestamp.value,
46209 user: attrs.user && attrs.user.value,
46210 uid: attrs.uid && attrs.uid.value,
46211 tags: getTags(obj),
46212 nodes: getNodes(obj),
46216 relation: function relationData(obj, uid) {
46217 var attrs = obj.attributes;
46218 return new osmRelation({
46220 visible: getVisible(attrs),
46221 version: attrs.version.value,
46222 changeset: attrs.changeset && attrs.changeset.value,
46223 timestamp: attrs.timestamp && attrs.timestamp.value,
46224 user: attrs.user && attrs.user.value,
46225 uid: attrs.uid && attrs.uid.value,
46226 tags: getTags(obj),
46227 members: getMembers(obj)
46231 note: function parseNote(obj, uid) {
46232 var attrs = obj.attributes;
46233 var childNodes = obj.childNodes;
46237 props.loc = getLoc(attrs);
46239 // if notes are coincident, move them apart slightly
46240 var coincident = false;
46241 var epsilon = 0.00001;
46244 props.loc = geoVecAdd(props.loc, [epsilon, epsilon]);
46246 var bbox = geoExtent(props.loc).bbox();
46247 coincident = _noteCache.rtree.search(bbox).length;
46248 } while (coincident);
46250 // parse note contents
46251 for (var i = 0; i < childNodes.length; i++) {
46252 var node = childNodes[i];
46253 var nodeName = node.nodeName;
46254 if (nodeName === '#text') continue;
46256 // if the element is comments, parse the comments
46257 if (nodeName === 'comments') {
46258 props[nodeName] = parseComments(node.childNodes);
46260 props[nodeName] = node.textContent;
46264 var note = new osmNote(props);
46265 var item = encodeNoteRtree(note);
46266 _noteCache.note[note.id] = note;
46267 _noteCache.rtree.insert(item);
46272 user: function parseUser(obj, uid) {
46273 var attrs = obj.attributes;
46276 display_name: attrs.display_name && attrs.display_name.value,
46277 account_created: attrs.account_created && attrs.account_created.value,
46278 changesets_count: 0
46281 var img = obj.getElementsByTagName('img');
46282 if (img && img[0] && img[0].getAttribute('href')) {
46283 user.image_url = img[0].getAttribute('href');
46286 var changesets = obj.getElementsByTagName('changesets');
46287 if (changesets && changesets[0] && changesets[0].getAttribute('count')) {
46288 user.changesets_count = changesets[0].getAttribute('count');
46291 _userCache.user[uid] = user;
46292 delete _userCache.toLoad[uid];
46298 function parseXML(xml, callback, options) {
46299 options = Object.assign({ skipSeen: true }, options);
46300 if (!xml || !xml.childNodes) {
46301 return callback({ message: 'No XML', status: -1 });
46304 var root = xml.childNodes[0];
46305 var children = root.childNodes;
46307 var handle = window.requestIdleCallback(function() {
46310 for (var i = 0; i < children.length; i++) {
46311 result = parseChild(children[i]);
46312 if (result) results.push(result);
46314 callback(null, results);
46317 _deferred.add(handle);
46320 function parseChild(child) {
46321 var parser = parsers[child.nodeName];
46322 if (!parser) return null;
46325 if (child.nodeName === 'user') {
46326 uid = child.attributes.id.value;
46327 if (options.skipSeen && _userCache.user[uid]) {
46328 delete _userCache.toLoad[uid];
46332 } else if (child.nodeName === 'note') {
46333 uid = child.getElementsByTagName('id')[0].textContent;
46336 uid = osmEntity.id.fromOSM(child.nodeName, child.attributes.id.value);
46337 if (options.skipSeen) {
46338 if (_tileCache.seen[uid]) return null; // avoid reparsing a "seen" entity
46339 _tileCache.seen[uid] = true;
46343 return parser(child, uid);
46348 // replace or remove note from rtree
46349 function updateRtree$2(item, replace) {
46350 _noteCache.rtree.remove(item, function isEql(a, b) { return a.data.id === b.data.id; });
46353 _noteCache.rtree.insert(item);
46358 function wrapcb(thisArg, callback, cid) {
46359 return function(err, result) {
46361 // 400 Bad Request, 401 Unauthorized, 403 Forbidden..
46362 if (err.status === 400 || err.status === 401 || err.status === 403) {
46365 return callback.call(thisArg, err);
46367 } else if (thisArg.getConnectionId() !== cid) {
46368 return callback.call(thisArg, { message: 'Connection Switched', status: -1 });
46371 return callback.call(thisArg, err, result);
46380 utilRebind(this, dispatch$5, 'on');
46384 reset: function() {
46385 Array.from(_deferred).forEach(function(handle) {
46386 window.cancelIdleCallback(handle);
46387 _deferred.delete(handle);
46391 _userChangesets = undefined;
46392 _userDetails = undefined;
46393 _rateLimitError = undefined;
46395 Object.values(_tileCache.inflight).forEach(abortRequest$4);
46396 Object.values(_noteCache.inflight).forEach(abortRequest$4);
46397 Object.values(_noteCache.inflightPost).forEach(abortRequest$4);
46398 if (_changeset.inflight) abortRequest$4(_changeset.inflight);
46400 _tileCache = { toLoad: {}, loaded: {}, inflight: {}, seen: {}, rtree: rbush_1() };
46401 _noteCache = { toLoad: {}, loaded: {}, inflight: {}, inflightPost: {}, note: {}, closed: {}, rtree: rbush_1() };
46402 _userCache = { toLoad: {}, user: {} };
46409 getConnectionId: function() {
46410 return _connectionID;
46414 changesetURL: function(changesetID) {
46415 return urlroot + '/changeset/' + changesetID;
46419 changesetsURL: function(center, zoom) {
46420 var precision = Math.max(0, Math.ceil(Math.log(zoom) / Math.LN2));
46421 return urlroot + '/history#map=' +
46422 Math.floor(zoom) + '/' +
46423 center[1].toFixed(precision) + '/' +
46424 center[0].toFixed(precision);
46428 entityURL: function(entity) {
46429 return urlroot + '/' + entity.type + '/' + entity.osmId();
46433 historyURL: function(entity) {
46434 return urlroot + '/' + entity.type + '/' + entity.osmId() + '/history';
46438 userURL: function(username) {
46439 return urlroot + '/user/' + username;
46443 noteURL: function(note) {
46444 return urlroot + '/note/' + note.id;
46448 noteReportURL: function(note) {
46449 return urlroot + '/reports/new?reportable_type=Note&reportable_id=' + note.id;
46453 // Generic method to load data from the OSM API
46454 // Can handle either auth or unauth calls.
46455 loadFromAPI: function(path, callback, options) {
46456 options = Object.assign({ skipSeen: true }, options);
46458 var cid = _connectionID;
46460 function done(err, xml) {
46461 if (that.getConnectionId() !== cid) {
46462 if (callback) callback({ message: 'Connection Switched', status: -1 });
46466 var isAuthenticated = that.authenticated();
46468 // 400 Bad Request, 401 Unauthorized, 403 Forbidden
46469 // Logout and retry the request..
46470 if (isAuthenticated && err && err.status &&
46471 (err.status === 400 || err.status === 401 || err.status === 403)) {
46473 that.loadFromAPI(path, callback, options);
46475 // else, no retry..
46477 // 509 Bandwidth Limit Exceeded, 429 Too Many Requests
46478 // Set the rateLimitError flag and trigger a warning..
46479 if (!isAuthenticated && !_rateLimitError && err && err.status &&
46480 (err.status === 509 || err.status === 429)) {
46481 _rateLimitError = err;
46482 dispatch$5.call('change');
46487 return callback(err);
46489 return parseXML(xml, callback, options);
46495 if (this.authenticated()) {
46496 return oauth.xhr({ method: 'GET', path: path }, done);
46498 var url = urlroot + path;
46499 var controller = new AbortController();
46500 d3_xml(url, { signal: controller.signal })
46501 .then(function(data) {
46504 .catch(function(err) {
46505 if (err.name === 'AbortError') return;
46506 // d3-fetch includes status in the error message,
46507 // but we can't access the response itself
46508 // https://github.com/d3/d3-fetch/issues/27
46509 var match = err.message.match(/^\d{3}/);
46511 done({ status: +match[0], statusText: err.message });
46521 // Load a single entity by id (ways and relations use the `/full` call)
46522 // GET /api/0.6/node/#id
46523 // GET /api/0.6/[way|relation]/#id/full
46524 loadEntity: function(id, callback) {
46525 var type = osmEntity.id.type(id);
46526 var osmID = osmEntity.id.toOSM(id);
46527 var options = { skipSeen: false };
46530 '/api/0.6/' + type + '/' + osmID + (type !== 'node' ? '/full' : ''),
46531 function(err, entities) {
46532 if (callback) callback(err, { data: entities });
46539 // Load a single entity with a specific version
46540 // GET /api/0.6/[node|way|relation]/#id/#version
46541 loadEntityVersion: function(id, version, callback) {
46542 var type = osmEntity.id.type(id);
46543 var osmID = osmEntity.id.toOSM(id);
46544 var options = { skipSeen: false };
46547 '/api/0.6/' + type + '/' + osmID + '/' + version,
46548 function(err, entities) {
46549 if (callback) callback(err, { data: entities });
46556 // Load multiple entities in chunks
46557 // (note: callback may be called multiple times)
46558 // GET /api/0.6/[nodes|ways|relations]?#parameters
46559 loadMultiple: function(ids, callback) {
46561 var groups = utilArrayGroupBy(utilArrayUniq(ids), osmEntity.id.type);
46563 Object.keys(groups).forEach(function(k) {
46564 var type = k + 's'; // nodes, ways, relations
46565 var osmIDs = groups[k].map(function(id) { return osmEntity.id.toOSM(id); });
46566 var options = { skipSeen: false };
46568 utilArrayChunk(osmIDs, 150).forEach(function(arr) {
46570 '/api/0.6/' + type + '?' + type + '=' + arr.join(),
46571 function(err, entities) {
46572 if (callback) callback(err, { data: entities });
46581 // Create, upload, and close a changeset
46582 // PUT /api/0.6/changeset/create
46583 // POST /api/0.6/changeset/#id/upload
46584 // PUT /api/0.6/changeset/#id/close
46585 putChangeset: function(changeset, changes, callback) {
46586 var cid = _connectionID;
46588 if (_changeset.inflight) {
46589 return callback({ message: 'Changeset already inflight', status: -2 }, changeset);
46591 } else if (_changeset.open) { // reuse existing open changeset..
46592 return createdChangeset.call(this, null, _changeset.open);
46594 } else { // Open a new changeset..
46597 path: '/api/0.6/changeset/create',
46598 options: { header: { 'Content-Type': 'text/xml' } },
46599 content: JXON.stringify(changeset.asJXON())
46601 _changeset.inflight = oauth.xhr(
46603 wrapcb(this, createdChangeset, cid)
46608 function createdChangeset(err, changesetID) {
46609 _changeset.inflight = null;
46610 if (err) { return callback(err, changeset); }
46612 _changeset.open = changesetID;
46613 changeset = changeset.update({ id: changesetID });
46615 // Upload the changeset..
46618 path: '/api/0.6/changeset/' + changesetID + '/upload',
46619 options: { header: { 'Content-Type': 'text/xml' } },
46620 content: JXON.stringify(changeset.osmChangeJXON(changes))
46622 _changeset.inflight = oauth.xhr(
46624 wrapcb(this, uploadedChangeset, cid)
46629 function uploadedChangeset(err) {
46630 _changeset.inflight = null;
46631 if (err) return callback(err, changeset);
46633 // Upload was successful, safe to call the callback.
46634 // Add delay to allow for postgres replication #1646 #2678
46635 window.setTimeout(function() { callback(null, changeset); }, 2500);
46636 _changeset.open = null;
46638 // At this point, we don't really care if the connection was switched..
46639 // Only try to close the changeset if we're still talking to the same server.
46640 if (this.getConnectionId() === cid) {
46641 // Still attempt to close changeset, but ignore response because #2667
46644 path: '/api/0.6/changeset/' + changeset.id + '/close',
46645 options: { header: { 'Content-Type': 'text/xml' } }
46646 }, function() { return true; });
46652 // Load multiple users in chunks
46653 // (note: callback may be called multiple times)
46654 // GET /api/0.6/users?users=#id1,#id2,...,#idn
46655 loadUsers: function(uids, callback) {
46659 utilArrayUniq(uids).forEach(function(uid) {
46660 if (_userCache.user[uid]) {
46661 delete _userCache.toLoad[uid];
46662 cached.push(_userCache.user[uid]);
46668 if (cached.length || !this.authenticated()) {
46669 callback(undefined, cached);
46670 if (!this.authenticated()) return; // require auth
46673 utilArrayChunk(toLoad, 150).forEach(function(arr) {
46675 { method: 'GET', path: '/api/0.6/users?users=' + arr.join() },
46676 wrapcb(this, done, _connectionID)
46680 function done(err, xml) {
46681 if (err) { return callback(err); }
46683 var options = { skipSeen: true };
46684 return parseXML(xml, function(err, results) {
46686 return callback(err);
46688 return callback(undefined, results);
46695 // Load a given user by id
46696 // GET /api/0.6/user/#id
46697 loadUser: function(uid, callback) {
46698 if (_userCache.user[uid] || !this.authenticated()) { // require auth
46699 delete _userCache.toLoad[uid];
46700 return callback(undefined, _userCache.user[uid]);
46704 { method: 'GET', path: '/api/0.6/user/' + uid },
46705 wrapcb(this, done, _connectionID)
46708 function done(err, xml) {
46709 if (err) { return callback(err); }
46711 var options = { skipSeen: true };
46712 return parseXML(xml, function(err, results) {
46714 return callback(err);
46716 return callback(undefined, results[0]);
46723 // Load the details of the logged-in user
46724 // GET /api/0.6/user/details
46725 userDetails: function(callback) {
46726 if (_userDetails) { // retrieve cached
46727 return callback(undefined, _userDetails);
46731 { method: 'GET', path: '/api/0.6/user/details' },
46732 wrapcb(this, done, _connectionID)
46735 function done(err, xml) {
46736 if (err) { return callback(err); }
46738 var options = { skipSeen: false };
46739 return parseXML(xml, function(err, results) {
46741 return callback(err);
46743 _userDetails = results[0];
46744 return callback(undefined, _userDetails);
46751 // Load previous changesets for the logged in user
46752 // GET /api/0.6/changesets?user=#id
46753 userChangesets: function(callback) {
46754 if (_userChangesets) { // retrieve cached
46755 return callback(undefined, _userChangesets);
46759 wrapcb(this, gotDetails, _connectionID)
46763 function gotDetails(err, user) {
46764 if (err) { return callback(err); }
46767 { method: 'GET', path: '/api/0.6/changesets?user=' + user.id },
46768 wrapcb(this, done, _connectionID)
46772 function done(err, xml) {
46773 if (err) { return callback(err); }
46775 _userChangesets = Array.prototype.map.call(
46776 xml.getElementsByTagName('changeset'),
46777 function (changeset) { return { tags: getTags(changeset) }; }
46778 ).filter(function (changeset) {
46779 var comment = changeset.tags.comment;
46780 return comment && comment !== '';
46783 return callback(undefined, _userChangesets);
46788 // Fetch the status of the OSM API
46789 // GET /api/capabilities
46790 status: function(callback) {
46791 var url = urlroot + '/api/capabilities';
46792 var errback = wrapcb(this, done, _connectionID);
46794 .then(function(data) { errback(null, data); })
46795 .catch(function(err) { errback(err.message); });
46797 function done(err, xml) {
46798 if (err) { return callback(err); }
46800 // update blacklists
46801 var elements = xml.getElementsByTagName('blacklist');
46803 for (var i = 0; i < elements.length; i++) {
46804 var regex = elements[i].getAttribute('regex'); // needs unencode?
46806 regexes.push(regex);
46809 if (regexes.length) {
46810 _blacklists = regexes;
46813 if (_rateLimitError) {
46814 return callback(_rateLimitError, 'rateLimited');
46816 var apiStatus = xml.getElementsByTagName('status');
46817 var val = apiStatus[0].getAttribute('api');
46818 return callback(undefined, val);
46824 // Load data (entities) from the API in tiles
46825 // GET /api/0.6/map?bbox=
46826 loadTiles: function(projection, callback) {
46829 // determine the needed tiles to cover the view
46830 var tiles = tiler$4.zoomExtent([_tileZoom, _tileZoom]).getTiles(projection);
46832 // abort inflight requests that are no longer needed
46833 var hadRequests = hasInflightRequests(_tileCache);
46834 abortUnwantedRequests$2(_tileCache, tiles);
46835 if (hadRequests && !hasInflightRequests(_tileCache)) {
46836 dispatch$5.call('loaded'); // stop the spinner
46839 // issue new requests..
46840 tiles.forEach(function(tile) {
46841 this.loadTile(tile, callback);
46846 // Load a single data tile
46847 // GET /api/0.6/map?bbox=
46848 loadTile: function(tile, callback) {
46850 if (_tileCache.loaded[tile.id] || _tileCache.inflight[tile.id]) return;
46852 if (!hasInflightRequests(_tileCache)) {
46853 dispatch$5.call('loading'); // start the spinner
46856 var path = '/api/0.6/map?bbox=';
46857 var options = { skipSeen: true };
46859 _tileCache.inflight[tile.id] = this.loadFromAPI(
46860 path + tile.extent.toParam(),
46861 function(err, parsed) {
46862 delete _tileCache.inflight[tile.id];
46864 delete _tileCache.toLoad[tile.id];
46865 _tileCache.loaded[tile.id] = true;
46866 var bbox = tile.extent.bbox();
46868 _tileCache.rtree.insert(bbox);
46871 callback(err, Object.assign({ data: parsed }, tile));
46873 if (!hasInflightRequests(_tileCache)) {
46874 dispatch$5.call('loaded'); // stop the spinner
46882 isDataLoaded: function(loc) {
46883 var bbox = { minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1] };
46884 return _tileCache.rtree.collides(bbox);
46888 // load the tile that covers the given `loc`
46889 loadTileAtLoc: function(loc, callback) {
46890 // Back off if the toLoad queue is filling up.. re #6417
46891 // (Currently `loadTileAtLoc` requests are considered low priority - used by operations to
46892 // let users safely edit geometries which extend to unloaded tiles. We can drop some.)
46893 if (Object.keys(_tileCache.toLoad).length > 50) return;
46895 var k = geoZoomToScale(_tileZoom + 1);
46896 var offset = geoRawMercator().scale(k)(loc);
46897 var projection = geoRawMercator().transform({ k: k, x: -offset[0], y: -offset[1] });
46898 var tiles = tiler$4.zoomExtent([_tileZoom, _tileZoom]).getTiles(projection);
46900 tiles.forEach(function(tile) {
46901 if (_tileCache.toLoad[tile.id] || _tileCache.loaded[tile.id] || _tileCache.inflight[tile.id]) return;
46903 _tileCache.toLoad[tile.id] = true;
46904 this.loadTile(tile, callback);
46909 // Load notes from the API in tiles
46910 // GET /api/0.6/notes?bbox=
46911 loadNotes: function(projection, noteOptions) {
46912 noteOptions = Object.assign({ limit: 10000, closed: 7 }, noteOptions);
46916 var path = '/api/0.6/notes?limit=' + noteOptions.limit + '&closed=' + noteOptions.closed + '&bbox=';
46917 var throttleLoadUsers = throttle(function() {
46918 var uids = Object.keys(_userCache.toLoad);
46919 if (!uids.length) return;
46920 that.loadUsers(uids, function() {}); // eagerly load user details
46923 // determine the needed tiles to cover the view
46924 var tiles = tiler$4.zoomExtent([_noteZoom, _noteZoom]).getTiles(projection);
46926 // abort inflight requests that are no longer needed
46927 abortUnwantedRequests$2(_noteCache, tiles);
46929 // issue new requests..
46930 tiles.forEach(function(tile) {
46931 if (_noteCache.loaded[tile.id] || _noteCache.inflight[tile.id]) return;
46933 var options = { skipSeen: false };
46934 _noteCache.inflight[tile.id] = that.loadFromAPI(
46935 path + tile.extent.toParam(),
46937 delete _noteCache.inflight[tile.id];
46939 _noteCache.loaded[tile.id] = true;
46941 throttleLoadUsers();
46942 dispatch$5.call('loadedNotes');
46951 // POST /api/0.6/notes?params
46952 postNoteCreate: function(note, callback) {
46953 if (!this.authenticated()) {
46954 return callback({ message: 'Not Authenticated', status: -3 }, note);
46956 if (_noteCache.inflightPost[note.id]) {
46957 return callback({ message: 'Note update already inflight', status: -2 }, note);
46960 if (!note.loc[0] || !note.loc[1] || !note.newComment) return; // location & description required
46962 var comment = note.newComment;
46963 if (note.newCategory && note.newCategory !== 'None') { comment += ' #' + note.newCategory; }
46965 var path = '/api/0.6/notes?' + utilQsString({ lon: note.loc[0], lat: note.loc[1], text: comment });
46967 _noteCache.inflightPost[note.id] = oauth.xhr(
46968 { method: 'POST', path: path },
46969 wrapcb(this, done, _connectionID)
46973 function done(err, xml) {
46974 delete _noteCache.inflightPost[note.id];
46975 if (err) { return callback(err); }
46977 // we get the updated note back, remove from caches and reparse..
46978 this.removeNote(note);
46980 var options = { skipSeen: false };
46981 return parseXML(xml, function(err, results) {
46983 return callback(err);
46985 return callback(undefined, results[0]);
46993 // POST /api/0.6/notes/#id/comment?text=comment
46994 // POST /api/0.6/notes/#id/close?text=comment
46995 // POST /api/0.6/notes/#id/reopen?text=comment
46996 postNoteUpdate: function(note, newStatus, callback) {
46997 if (!this.authenticated()) {
46998 return callback({ message: 'Not Authenticated', status: -3 }, note);
47000 if (_noteCache.inflightPost[note.id]) {
47001 return callback({ message: 'Note update already inflight', status: -2 }, note);
47005 if (note.status !== 'closed' && newStatus === 'closed') {
47007 } else if (note.status !== 'open' && newStatus === 'open') {
47010 action = 'comment';
47011 if (!note.newComment) return; // when commenting, comment required
47014 var path = '/api/0.6/notes/' + note.id + '/' + action;
47015 if (note.newComment) {
47016 path += '?' + utilQsString({ text: note.newComment });
47019 _noteCache.inflightPost[note.id] = oauth.xhr(
47020 { method: 'POST', path: path },
47021 wrapcb(this, done, _connectionID)
47025 function done(err, xml) {
47026 delete _noteCache.inflightPost[note.id];
47027 if (err) { return callback(err); }
47029 // we get the updated note back, remove from caches and reparse..
47030 this.removeNote(note);
47032 // update closed note cache - used to populate `closed:note` changeset tag
47033 if (action === 'close') {
47034 _noteCache.closed[note.id] = true;
47035 } else if (action === 'reopen') {
47036 delete _noteCache.closed[note.id];
47039 var options = { skipSeen: false };
47040 return parseXML(xml, function(err, results) {
47042 return callback(err);
47044 return callback(undefined, results[0]);
47051 switch: function(options) {
47052 urlroot = options.urlroot;
47054 oauth.options(Object.assign({
47056 loading: authLoading,
47061 this.userChangesets(function() {}); // eagerly load user details/changesets
47062 dispatch$5.call('change');
47067 toggle: function(val) {
47073 isChangesetInflight: function() {
47074 return !!_changeset.inflight;
47078 // get/set cached data
47079 // This is used to save/restore the state when entering/exiting the walkthrough
47080 // Also used for testing purposes.
47081 caches: function(obj) {
47082 function cloneCache(source) {
47084 Object.keys(source).forEach(function(k) {
47085 if (k === 'rtree') {
47086 target.rtree = rbush_1().fromJSON(source.rtree.toJSON()); // clone rbush
47087 } else if (k === 'note') {
47089 Object.keys(source.note).forEach(function(id) {
47090 target.note[id] = osmNote(source.note[id]); // copy notes
47093 target[k] = JSON.parse(JSON.stringify(source[k])); // clone deep
47099 if (!arguments.length) {
47101 tile: cloneCache(_tileCache),
47102 note: cloneCache(_noteCache),
47103 user: cloneCache(_userCache)
47107 // access caches directly for testing (e.g., loading notes rtree)
47108 if (obj === 'get') {
47117 _tileCache = obj.tile;
47118 _tileCache.inflight = {};
47121 _noteCache = obj.note;
47122 _noteCache.inflight = {};
47123 _noteCache.inflightPost = {};
47126 _userCache = obj.user;
47133 logout: function() {
47134 _userChangesets = undefined;
47135 _userDetails = undefined;
47137 dispatch$5.call('change');
47142 authenticated: function() {
47143 return oauth.authenticated();
47147 authenticate: function(callback) {
47149 var cid = _connectionID;
47150 _userChangesets = undefined;
47151 _userDetails = undefined;
47153 function done(err, res) {
47155 if (callback) callback(err);
47158 if (that.getConnectionId() !== cid) {
47159 if (callback) callback({ message: 'Connection Switched', status: -1 });
47162 _rateLimitError = undefined;
47163 dispatch$5.call('change');
47164 if (callback) callback(err, res);
47165 that.userChangesets(function() {}); // eagerly load user details/changesets
47168 return oauth.authenticate(done);
47172 imageryBlacklists: function() {
47173 return _blacklists;
47177 tileZoom: function(val) {
47178 if (!arguments.length) return _tileZoom;
47184 // get all cached notes covering the viewport
47185 notes: function(projection) {
47186 var viewport = projection.clipExtent();
47187 var min = [viewport[0][0], viewport[1][1]];
47188 var max = [viewport[1][0], viewport[0][1]];
47189 var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
47191 return _noteCache.rtree.search(bbox)
47192 .map(function(d) { return d.data; });
47196 // get a single note from the cache
47197 getNote: function(id) {
47198 return _noteCache.note[id];
47202 // remove a single note from the cache
47203 removeNote: function(note) {
47204 if (!(note instanceof osmNote) || !note.id) return;
47206 delete _noteCache.note[note.id];
47207 updateRtree$2(encodeNoteRtree(note), false); // false = remove
47211 // replace a single note in the cache
47212 replaceNote: function(note) {
47213 if (!(note instanceof osmNote) || !note.id) return;
47215 _noteCache.note[note.id] = note;
47216 updateRtree$2(encodeNoteRtree(note), true); // true = replace
47221 // Get an array of note IDs closed during this session.
47222 // Used to populate `closed:note` changeset tag
47223 getClosedIDs: function() {
47224 return Object.keys(_noteCache.closed).sort();
47229 var apibase$3 = 'https://wiki.openstreetmap.org/w/api.php';
47230 var _inflight$1 = {};
47231 var _wikibaseCache = {};
47232 var _localeIDs = { en: false };
47235 var debouncedRequest = debounce(request, 500, { leading: false });
47237 function request(url, callback) {
47238 if (_inflight$1[url]) return;
47239 var controller = new AbortController();
47240 _inflight$1[url] = controller;
47242 d3_json(url, { signal: controller.signal })
47243 .then(function(result) {
47244 delete _inflight$1[url];
47245 if (callback) callback(null, result);
47247 .catch(function(err) {
47248 delete _inflight$1[url];
47249 if (err.name === 'AbortError') return;
47250 if (callback) callback(err.message);
47256 * Get the best string value from the descriptions/labels result
47257 * Note that if mediawiki doesn't recognize language code, it will return all values.
47258 * In that case, fallback to use English.
47259 * @param values object - either descriptions or labels
47260 * @param langCode String
47261 * @returns localized string
47263 function localizedToString(values, langCode) {
47265 values = values[langCode] || values.en;
47267 return values ? values.value : '';
47271 var serviceOsmWikibase = {
47275 _wikibaseCache = {};
47280 reset: function() {
47281 Object.values(_inflight$1).forEach(function(controller) { controller.abort(); });
47287 * Get the best value for the property, or undefined if not found
47288 * @param entity object from wikibase
47289 * @param property string e.g. 'P4' for image
47290 * @param langCode string e.g. 'fr' for French
47292 claimToValue: function(entity, property, langCode) {
47293 if (!entity.claims[property]) return undefined;
47294 var locale = _localeIDs[langCode];
47295 var preferredPick, localePick;
47297 entity.claims[property].forEach(function(stmt) {
47298 // If exists, use value limited to the needed language (has a qualifier P26 = locale)
47299 // Or if not found, use the first value with the "preferred" rank
47300 if (!preferredPick && stmt.rank === 'preferred') {
47301 preferredPick = stmt;
47303 if (locale && stmt.qualifiers && stmt.qualifiers.P26 &&
47304 stmt.qualifiers.P26[0].datavalue.value.id === locale
47310 var result = localePick || preferredPick;
47312 var datavalue = result.mainsnak.datavalue;
47313 return datavalue.type === 'wikibase-entityid' ? datavalue.value.id : datavalue.value;
47321 * Convert monolingual property into a key-value object (language -> value)
47322 * @param entity object from wikibase
47323 * @param property string e.g. 'P31' for monolingual wiki page title
47325 monolingualClaimToValueObj: function(entity, property) {
47326 if (!entity || !entity.claims[property]) return undefined;
47328 return entity.claims[property].reduce(function(acc, obj) {
47329 var value = obj.mainsnak.datavalue.value;
47330 acc[value.language] = value.text;
47336 toSitelink: function(key, value) {
47337 var result = value ? ('Tag:' + key + '=' + value) : 'Key:' + key;
47338 return result.replace(/_/g, ' ').trim();
47343 // Pass params object of the form:
47346 // value: 'string',
47347 // rtype: 'string',
47348 // langCode: 'string'
47351 getEntity: function(params, callback) {
47352 var doRequest = params.debounce ? debouncedRequest : request;
47356 var rtypeSitelink = params.rtype ? ('Relation:' + params.rtype).replace(/_/g, ' ').trim() : false;
47357 var keySitelink = params.key ? this.toSitelink(params.key) : false;
47358 var tagSitelink = (params.key && params.value) ? this.toSitelink(params.key, params.value) : false;
47359 var localeSitelink;
47361 if (params.langCode && _localeIDs[params.langCode] === undefined) {
47362 // If this is the first time we are asking about this locale,
47363 // fetch corresponding entity (if it exists), and cache it.
47364 // If there is no such entry, cache `false` value to avoid re-requesting it.
47365 localeSitelink = ('Locale:' + params.langCode).replace(/_/g, ' ').trim();
47366 titles.push(localeSitelink);
47369 if (rtypeSitelink) {
47370 if (_wikibaseCache[rtypeSitelink]) {
47371 result.rtype = _wikibaseCache[rtypeSitelink];
47373 titles.push(rtypeSitelink);
47378 if (_wikibaseCache[keySitelink]) {
47379 result.key = _wikibaseCache[keySitelink];
47381 titles.push(keySitelink);
47386 if (_wikibaseCache[tagSitelink]) {
47387 result.tag = _wikibaseCache[tagSitelink];
47389 titles.push(tagSitelink);
47393 if (!titles.length) {
47394 // Nothing to do, we already had everything in the cache
47395 return callback(null, result);
47398 // Requesting just the user language code
47399 // If backend recognizes the code, it will perform proper fallbacks,
47400 // and the result will contain the requested code. If not, all values are returned:
47401 // {"zh-tw":{"value":"...","language":"zh-tw","source-language":"zh-hant"}
47402 // {"pt-br":{"value":"...","language":"pt","for-language":"pt-br"}}
47404 action: 'wbgetentities',
47406 titles: titles.join('|'),
47407 languages: params.langCode,
47408 languagefallback: 1,
47411 // There is an MW Wikibase API bug https://phabricator.wikimedia.org/T212069
47412 // We shouldn't use v1 until it gets fixed, but should switch to it afterwards
47413 // formatversion: 2,
47416 var url = apibase$3 + '?' + utilQsString(obj);
47417 doRequest(url, function(err, d) {
47420 } else if (!d.success || d.error) {
47421 callback(d.error.messages.map(function(v) { return v.html['*']; }).join('<br>'));
47423 var localeID = false;
47424 Object.values(d.entities).forEach(function(res) {
47425 if (res.missing !== '') {
47426 // Simplify access to the localized values
47427 res.description = localizedToString(res.descriptions, params.langCode);
47428 res.label = localizedToString(res.labels, params.langCode);
47430 var title = res.sitelinks.wiki.title;
47431 if (title === rtypeSitelink) {
47432 _wikibaseCache[rtypeSitelink] = res;
47433 result.rtype = res;
47434 } else if (title === keySitelink) {
47435 _wikibaseCache[keySitelink] = res;
47437 } else if (title === tagSitelink) {
47438 _wikibaseCache[tagSitelink] = res;
47440 } else if (title === localeSitelink) {
47443 console.log('Unexpected title ' + title); // eslint-disable-line no-console
47448 if (localeSitelink) {
47449 // If locale ID is not found, store false to prevent repeated queries
47450 that.addLocale(params.langCode, localeID);
47453 callback(null, result);
47460 // Pass params object of the form:
47462 // key: 'string', // required
47463 // value: 'string' // optional
47467 // rtype: 'rtype' // relation type (e.g. 'multipolygon')
47470 // Get an result object used to display tag documentation
47472 // title: 'string',
47473 // description: 'string',
47474 // editURL: 'string',
47475 // imageURL: 'string',
47476 // wiki: { title: 'string', text: 'string', url: 'string' }
47479 getDocs: function(params, callback) {
47481 var langCode = utilDetect().locale.toLowerCase();
47482 params.langCode = langCode;
47484 this.getEntity(params, function(err, data) {
47490 var entity = data.rtype || data.tag || data.key;
47492 callback('No entity');
47498 title: entity.title,
47499 description: entity.description,
47500 editURL: 'https://wiki.openstreetmap.org/wiki/' + entity.title
47504 if (entity.claims) {
47506 var image = that.claimToValue(entity, 'P4', langCode);
47508 imageroot = 'https://commons.wikimedia.org/w/index.php';
47510 image = that.claimToValue(entity, 'P28', langCode);
47512 imageroot = 'https://wiki.openstreetmap.org/w/index.php';
47515 if (imageroot && image) {
47516 result.imageURL = imageroot + '?' + utilQsString({
47517 title: 'Special:Redirect/file/' + image,
47523 // Try to get a wiki page from tag data item first, followed by the corresponding key data item.
47524 // If neither tag nor key data item contain a wiki page in the needed language nor English,
47525 // get the first found wiki page from either the tag or the key item.
47526 var rtypeWiki = that.monolingualClaimToValueObj(data.rtype, 'P31');
47527 var tagWiki = that.monolingualClaimToValueObj(data.tag, 'P31');
47528 var keyWiki = that.monolingualClaimToValueObj(data.key, 'P31');
47530 // If exact language code does not exist, try to find the first part before the '-'
47531 // BUG: in some cases, a more elaborate fallback logic might be needed
47532 var langPrefix = langCode.split('-', 2)[0];
47534 // use the first acceptable wiki page
47536 getWikiInfo(rtypeWiki, langCode, 'inspector.wiki_reference') ||
47537 getWikiInfo(rtypeWiki, langPrefix, 'inspector.wiki_reference') ||
47538 getWikiInfo(rtypeWiki, 'en', 'inspector.wiki_en_reference') ||
47539 getWikiInfo(tagWiki, langCode, 'inspector.wiki_reference') ||
47540 getWikiInfo(tagWiki, langPrefix, 'inspector.wiki_reference') ||
47541 getWikiInfo(tagWiki, 'en', 'inspector.wiki_en_reference') ||
47542 getWikiInfo(keyWiki, langCode, 'inspector.wiki_reference') ||
47543 getWikiInfo(keyWiki, langPrefix, 'inspector.wiki_reference') ||
47544 getWikiInfo(keyWiki, 'en', 'inspector.wiki_en_reference');
47546 callback(null, result);
47549 // Helper method to get wiki info if a given language exists
47550 function getWikiInfo(wiki, langCode, tKey) {
47551 if (wiki && wiki[langCode]) {
47553 title: wiki[langCode],
47555 url: 'https://wiki.openstreetmap.org/wiki/' + wiki[langCode]
47563 addLocale: function(langCode, qid) {
47564 // Makes it easier to unit test
47565 _localeIDs[langCode] = qid;
47569 apibase: function(val) {
47570 if (!arguments.length) return apibase$3;
47577 var jsonpCache = {};
47578 window.jsonpCache = jsonpCache;
47580 function jsonpRequest(url, callback) {
47582 abort: function() {}
47585 if (window.JSONP_FIX) {
47586 if (window.JSONP_DELAY === 0) {
47587 callback(window.JSONP_FIX);
47589 var t = window.setTimeout(function() {
47590 callback(window.JSONP_FIX);
47591 }, window.JSONP_DELAY || 0);
47593 request.abort = function() { window.clearTimeout(t); };
47600 var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
47603 while (++i < 15) c += chars.charAt(Math.floor(Math.random() * 52));
47607 function create(url) {
47608 var e = url.match(/callback=(\w+)/);
47609 var c = e ? e[1] : rand();
47611 jsonpCache[c] = function(data) {
47612 if (jsonpCache[c]) {
47618 function finalize() {
47619 delete jsonpCache[c];
47623 request.abort = finalize;
47624 return 'jsonpCache.' + c;
47627 var cb = create(url);
47629 var script = d3_select('head')
47631 .attr('type', 'text/javascript')
47632 .attr('src', url.replace(/(\{|%7B)callback(\}|%7D)/, cb));
47637 var q = createCommonjsModule(function (module, exports) {
47638 // vim:ts=4:sts=4:sw=4:
47641 * Copyright 2009-2017 Kris Kowal under the terms of the MIT
47642 * license found at https://github.com/kriskowal/q/blob/v1/LICENSE
47644 * With parts by Tyler Close
47645 * Copyright 2007-2009 Tyler Close under the terms of the MIT X license found
47646 * at http://www.opensource.org/licenses/mit-license.html
47647 * Forked at ref_send.js version: 2009-05-11
47649 * With parts by Mark Miller
47650 * Copyright (C) 2011 Google Inc.
47652 * Licensed under the Apache License, Version 2.0 (the "License");
47653 * you may not use this file except in compliance with the License.
47654 * You may obtain a copy of the License at
47656 * http://www.apache.org/licenses/LICENSE-2.0
47658 * Unless required by applicable law or agreed to in writing, software
47659 * distributed under the License is distributed on an "AS IS" BASIS,
47660 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
47661 * See the License for the specific language governing permissions and
47662 * limitations under the License.
47666 (function (definition) {
47668 // This file will function properly as a <script> tag, or a module
47669 // using CommonJS and NodeJS or RequireJS module formats. In
47670 // Common/Node/RequireJS, the module exports the Q API and when
47671 // executed as a simple <script>, it creates a Q global instead.
47674 if (typeof bootstrap === "function") {
47675 bootstrap("promise", definition);
47679 module.exports = definition();
47686 var hasStacks = false;
47690 hasStacks = !!e.stack;
47693 // All code after this point will be filtered from stack traces reported
47695 var qStartingLine = captureLine();
47700 // used for fallback in "allResolved"
47701 var noop = function () {};
47703 // Use the fastest possible means to execute a task in a future turn
47704 // of the event loop.
47705 var nextTick =(function () {
47706 // linked list of tasks (single, with head node)
47707 var head = {task: void 0, next: null};
47709 var flushing = false;
47710 var requestTick = void 0;
47711 var isNodeJS = false;
47712 // queue for late tasks, used by unhandled rejection tracking
47713 var laterQueue = [];
47716 /* jshint loopfunc: true */
47719 while (head.next) {
47722 head.task = void 0;
47723 domain = head.domain;
47726 head.domain = void 0;
47729 runSingle(task, domain);
47732 while (laterQueue.length) {
47733 task = laterQueue.pop();
47738 // runs a single function in the async queue
47739 function runSingle(task, domain) {
47745 // In node, uncaught exceptions are considered fatal errors.
47746 // Re-throw them synchronously to interrupt flushing!
47748 // Ensure continuation if the uncaught exception is suppressed
47749 // listening "uncaughtException" events (as domains does).
47750 // Continue in next event to avoid tick recursion.
47754 setTimeout(flush, 0);
47762 // In browsers, uncaught exceptions are not fatal.
47763 // Re-throw them asynchronously to avoid slow-downs.
47764 setTimeout(function () {
47775 nextTick = function (task) {
47776 tail = tail.next = {
47778 domain: isNodeJS && process.domain,
47788 if (typeof process === "object" &&
47789 process.toString() === "[object process]" && process.nextTick) {
47790 // Ensure Q is in a real Node environment, with a `process.nextTick`.
47791 // To see through fake Node environments:
47792 // * Mocha test runner - exposes a `process` global without a `nextTick`
47793 // * Browserify - exposes a `process.nexTick` function that uses
47794 // `setTimeout`. In this case `setImmediate` is preferred because
47795 // it is faster. Browserify's `process.toString()` yields
47796 // "[object Object]", while in a real Node environment
47797 // `process.toString()` yields "[object process]".
47800 requestTick = function () {
47801 process.nextTick(flush);
47804 } else if (typeof setImmediate === "function") {
47805 // In IE10, Node.js 0.9+, or https://github.com/NobleJS/setImmediate
47806 if (typeof window !== "undefined") {
47807 requestTick = setImmediate.bind(window, flush);
47809 requestTick = function () {
47810 setImmediate(flush);
47814 } else if (typeof MessageChannel !== "undefined") {
47816 // http://www.nonblocking.io/2011/06/windownexttick.html
47817 var channel = new MessageChannel();
47818 // At least Safari Version 6.0.5 (8536.30.1) intermittently cannot create
47819 // working message ports the first time a page loads.
47820 channel.port1.onmessage = function () {
47821 requestTick = requestPortTick;
47822 channel.port1.onmessage = flush;
47825 var requestPortTick = function () {
47826 // Opera requires us to provide a message payload, regardless of
47827 // whether we use it.
47828 channel.port2.postMessage(0);
47830 requestTick = function () {
47831 setTimeout(flush, 0);
47837 requestTick = function () {
47838 setTimeout(flush, 0);
47841 // runs a task after all other tasks have been run
47842 // this is useful for unhandled rejection tracking that needs to happen
47843 // after all `then`d tasks have been run.
47844 nextTick.runAfter = function (task) {
47845 laterQueue.push(task);
47854 // Attempt to make generics safe in the face of downstream
47856 // There is no situation where this is necessary.
47857 // If you need a security guarantee, these primordials need to be
47858 // deeply frozen anyway, and if you don’t need a security guarantee,
47859 // this is just plain paranoid.
47860 // However, this **might** have the nice side-effect of reducing the size of
47861 // the minified code by reducing x.call() to merely x()
47862 // See Mark Miller’s explanation of what this does.
47863 // http://wiki.ecmascript.org/doku.php?id=conventions:safe_meta_programming
47864 var call = Function.call;
47865 function uncurryThis(f) {
47866 return function () {
47867 return call.apply(f, arguments);
47870 // This is equivalent, but slower:
47871 // uncurryThis = Function_bind.bind(Function_bind.call);
47872 // http://jsperf.com/uncurrythis
47874 var array_slice = uncurryThis(Array.prototype.slice);
47876 var array_reduce = uncurryThis(
47877 Array.prototype.reduce || function (callback, basis) {
47879 length = this.length;
47880 // concerning the initial value, if one is not provided
47881 if (arguments.length === 1) {
47882 // seek to the first value in the array, accounting
47883 // for the possibility that is is a sparse array
47885 if (index in this) {
47886 basis = this[index++];
47889 if (++index >= length) {
47890 throw new TypeError();
47895 for (; index < length; index++) {
47896 // account for the possibility that the array is sparse
47897 if (index in this) {
47898 basis = callback(basis, this[index], index);
47905 var array_indexOf = uncurryThis(
47906 Array.prototype.indexOf || function (value) {
47907 // not a very good shim, but good enough for our one use of it
47908 for (var i = 0; i < this.length; i++) {
47909 if (this[i] === value) {
47917 var array_map = uncurryThis(
47918 Array.prototype.map || function (callback, thisp) {
47921 array_reduce(self, function (undefined$1, value, index) {
47922 collect.push(callback.call(thisp, value, index, self));
47928 var object_create = Object.create || function (prototype) {
47929 function Type() { }
47930 Type.prototype = prototype;
47934 var object_defineProperty = Object.defineProperty || function (obj, prop, descriptor) {
47935 obj[prop] = descriptor.value;
47939 var object_hasOwnProperty = uncurryThis(Object.prototype.hasOwnProperty);
47941 var object_keys = Object.keys || function (object) {
47943 for (var key in object) {
47944 if (object_hasOwnProperty(object, key)) {
47951 var object_toString = uncurryThis(Object.prototype.toString);
47953 function isObject(value) {
47954 return value === Object(value);
47957 // generator related shims
47959 // FIXME: Remove this function once ES6 generators are in SpiderMonkey.
47960 function isStopIteration(exception) {
47962 object_toString(exception) === "[object StopIteration]" ||
47963 exception instanceof QReturnValue
47967 // FIXME: Remove this helper and Q.return once ES6 generators are in
47970 if (typeof ReturnValue !== "undefined") {
47971 QReturnValue = ReturnValue;
47973 QReturnValue = function (value) {
47974 this.value = value;
47978 // long stack traces
47980 var STACK_JUMP_SEPARATOR = "From previous event:";
47982 function makeStackTraceLong(error, promise) {
47983 // If possible, transform the error stack trace by removing Node and Q
47984 // cruft, then concatenating with the stack trace of `promise`. See #57.
47987 typeof error === "object" &&
47992 for (var p = promise; !!p; p = p.source) {
47993 if (p.stack && (!error.__minimumStackCounter__ || error.__minimumStackCounter__ > p.stackCounter)) {
47994 object_defineProperty(error, "__minimumStackCounter__", {value: p.stackCounter, configurable: true});
47995 stacks.unshift(p.stack);
47998 stacks.unshift(error.stack);
48000 var concatedStacks = stacks.join("\n" + STACK_JUMP_SEPARATOR + "\n");
48001 var stack = filterStackString(concatedStacks);
48002 object_defineProperty(error, "stack", {value: stack, configurable: true});
48006 function filterStackString(stackString) {
48007 var lines = stackString.split("\n");
48008 var desiredLines = [];
48009 for (var i = 0; i < lines.length; ++i) {
48010 var line = lines[i];
48012 if (!isInternalFrame(line) && !isNodeFrame(line) && line) {
48013 desiredLines.push(line);
48016 return desiredLines.join("\n");
48019 function isNodeFrame(stackLine) {
48020 return stackLine.indexOf("(module.js:") !== -1 ||
48021 stackLine.indexOf("(node.js:") !== -1;
48024 function getFileNameAndLineNumber(stackLine) {
48025 // Named functions: "at functionName (filename:lineNumber:columnNumber)"
48026 // In IE10 function name can have spaces ("Anonymous function") O_o
48027 var attempt1 = /at .+ \((.+):(\d+):(?:\d+)\)$/.exec(stackLine);
48029 return [attempt1[1], Number(attempt1[2])];
48032 // Anonymous functions: "at filename:lineNumber:columnNumber"
48033 var attempt2 = /at ([^ ]+):(\d+):(?:\d+)$/.exec(stackLine);
48035 return [attempt2[1], Number(attempt2[2])];
48038 // Firefox style: "function@filename:lineNumber or @filename:lineNumber"
48039 var attempt3 = /.*@(.+):(\d+)$/.exec(stackLine);
48041 return [attempt3[1], Number(attempt3[2])];
48045 function isInternalFrame(stackLine) {
48046 var fileNameAndLineNumber = getFileNameAndLineNumber(stackLine);
48048 if (!fileNameAndLineNumber) {
48052 var fileName = fileNameAndLineNumber[0];
48053 var lineNumber = fileNameAndLineNumber[1];
48055 return fileName === qFileName &&
48056 lineNumber >= qStartingLine &&
48057 lineNumber <= qEndingLine;
48060 // discover own file name and line number range for filtering stack
48062 function captureLine() {
48070 var lines = e.stack.split("\n");
48071 var firstLine = lines[0].indexOf("@") > 0 ? lines[1] : lines[2];
48072 var fileNameAndLineNumber = getFileNameAndLineNumber(firstLine);
48073 if (!fileNameAndLineNumber) {
48077 qFileName = fileNameAndLineNumber[0];
48078 return fileNameAndLineNumber[1];
48082 function deprecate(callback, name, alternative) {
48083 return function () {
48084 if (typeof console !== "undefined" &&
48085 typeof console.warn === "function") {
48086 console.warn(name + " is deprecated, use " + alternative +
48087 " instead.", new Error("").stack);
48089 return callback.apply(callback, arguments);
48094 // beginning of real work
48097 * Constructs a promise for an immediate reference, passes promises through, or
48098 * coerces promises from different systems.
48099 * @param value immediate reference or promise
48101 function Q(value) {
48102 // If the object is already a Promise, return it directly. This enables
48103 // the resolve function to both be used to created references from objects,
48104 // but to tolerably coerce non-promises to promises.
48105 if (value instanceof Promise) {
48109 // assimilate thenables
48110 if (isPromiseAlike(value)) {
48111 return coerce(value);
48113 return fulfill(value);
48119 * Performs a task in a future turn of the event loop.
48120 * @param {Function} task
48122 Q.nextTick = nextTick;
48125 * Controls whether or not long stack traces will be on
48127 Q.longStackSupport = false;
48130 * The counter is used to determine the stopping point for building
48131 * long stack traces. In makeStackTraceLong we walk backwards through
48132 * the linked list of promises, only stacks which were created before
48133 * the rejection are concatenated.
48135 var longStackCounter = 1;
48137 // enable long stacks if Q_DEBUG is set
48138 if (typeof process === "object" && process && process.env && process.env.Q_DEBUG) {
48139 Q.longStackSupport = true;
48143 * Constructs a {promise, resolve, reject} object.
48145 * `resolve` is a callback to invoke with a more resolved value for the
48146 * promise. To fulfill the promise, invoke `resolve` with any value that is
48147 * not a thenable. To reject the promise, invoke `resolve` with a rejected
48148 * thenable, or invoke `reject` with the reason directly. To resolve the
48149 * promise to another thenable, thus putting it in the same state, invoke
48150 * `resolve` with that other thenable.
48154 // if "messages" is an "Array", that indicates that the promise has not yet
48155 // been resolved. If it is "undefined", it has been resolved. Each
48156 // element of the messages array is itself an array of complete arguments to
48157 // forward to the resolved promise. We coerce the resolution value to a
48158 // promise using the `resolve` function because it handles both fully
48159 // non-thenable values and other thenables gracefully.
48160 var messages = [], progressListeners = [], resolvedPromise;
48162 var deferred = object_create(defer.prototype);
48163 var promise = object_create(Promise.prototype);
48165 promise.promiseDispatch = function (resolve, op, operands) {
48166 var args = array_slice(arguments);
48168 messages.push(args);
48169 if (op === "when" && operands[1]) { // progress operand
48170 progressListeners.push(operands[1]);
48173 Q.nextTick(function () {
48174 resolvedPromise.promiseDispatch.apply(resolvedPromise, args);
48180 promise.valueOf = function () {
48184 var nearerValue = nearer(resolvedPromise);
48185 if (isPromise(nearerValue)) {
48186 resolvedPromise = nearerValue; // shorten chain
48188 return nearerValue;
48191 promise.inspect = function () {
48192 if (!resolvedPromise) {
48193 return { state: "pending" };
48195 return resolvedPromise.inspect();
48198 if (Q.longStackSupport && hasStacks) {
48202 // NOTE: don't try to use `Error.captureStackTrace` or transfer the
48203 // accessor around; that causes memory leaks as per GH-111. Just
48204 // reify the stack trace as a string ASAP.
48206 // At the same time, cut off the first line; it's always just
48207 // "[object Promise]\n", as per the `toString`.
48208 promise.stack = e.stack.substring(e.stack.indexOf("\n") + 1);
48209 promise.stackCounter = longStackCounter++;
48213 // NOTE: we do the checks for `resolvedPromise` in each method, instead of
48214 // consolidating them into `become`, since otherwise we'd create new
48215 // promises with the lines `become(whatever(value))`. See e.g. GH-252.
48217 function become(newPromise) {
48218 resolvedPromise = newPromise;
48220 if (Q.longStackSupport && hasStacks) {
48221 // Only hold a reference to the new promise if long stacks
48222 // are enabled to reduce memory usage
48223 promise.source = newPromise;
48226 array_reduce(messages, function (undefined$1, message) {
48227 Q.nextTick(function () {
48228 newPromise.promiseDispatch.apply(newPromise, message);
48233 progressListeners = void 0;
48236 deferred.promise = promise;
48237 deferred.resolve = function (value) {
48238 if (resolvedPromise) {
48245 deferred.fulfill = function (value) {
48246 if (resolvedPromise) {
48250 become(fulfill(value));
48252 deferred.reject = function (reason) {
48253 if (resolvedPromise) {
48257 become(reject(reason));
48259 deferred.notify = function (progress) {
48260 if (resolvedPromise) {
48264 array_reduce(progressListeners, function (undefined$1, progressListener) {
48265 Q.nextTick(function () {
48266 progressListener(progress);
48275 * Creates a Node-style callback that will resolve or reject the deferred
48277 * @returns a nodeback
48279 defer.prototype.makeNodeResolver = function () {
48281 return function (error, value) {
48283 self.reject(error);
48284 } else if (arguments.length > 2) {
48285 self.resolve(array_slice(arguments, 1));
48287 self.resolve(value);
48293 * @param resolver {Function} a function that returns nothing and accepts
48294 * the resolve, reject, and notify functions for a deferred.
48295 * @returns a promise that may be resolved with the given resolve and reject
48296 * functions, or rejected by a thrown exception in resolver
48298 Q.Promise = promise; // ES6
48299 Q.promise = promise;
48300 function promise(resolver) {
48301 if (typeof resolver !== "function") {
48302 throw new TypeError("resolver must be a function.");
48304 var deferred = defer();
48306 resolver(deferred.resolve, deferred.reject, deferred.notify);
48308 deferred.reject(reason);
48310 return deferred.promise;
48313 promise.race = race; // ES6
48314 promise.all = all; // ES6
48315 promise.reject = reject; // ES6
48316 promise.resolve = Q; // ES6
48318 // XXX experimental. This method is a way to denote that a local value is
48319 // serializable and should be immediately dispatched to a remote upon request,
48320 // instead of passing a reference.
48321 Q.passByCopy = function (object) {
48323 //passByCopies.set(object, true);
48327 Promise.prototype.passByCopy = function () {
48329 //passByCopies.set(object, true);
48334 * If two promises eventually fulfill to the same value, promises that value,
48335 * but otherwise rejects.
48338 * @returns {Any*} a promise for x and y if they are the same, but a rejection
48342 Q.join = function (x, y) {
48343 return Q(x).join(y);
48346 Promise.prototype.join = function (that) {
48347 return Q([this, that]).spread(function (x, y) {
48349 // TODO: "===" should be Object.is or equiv
48352 throw new Error("Q can't join: not the same: " + x + " " + y);
48358 * Returns a promise for the first of an array of promises to become settled.
48359 * @param answers {Array[Any*]} promises to race
48360 * @returns {Any*} the first promise to be settled
48363 function race(answerPs) {
48364 return promise(function (resolve, reject) {
48365 // Switch to this once we can assume at least ES5
48366 // answerPs.forEach(function (answerP) {
48367 // Q(answerP).then(resolve, reject);
48369 // Use this in the meantime
48370 for (var i = 0, len = answerPs.length; i < len; i++) {
48371 Q(answerPs[i]).then(resolve, reject);
48376 Promise.prototype.race = function () {
48377 return this.then(Q.race);
48381 * Constructs a Promise with a promise descriptor object and optional fallback
48382 * function. The descriptor contains methods like when(rejected), get(name),
48383 * set(name, value), post(name, args), and delete(name), which all
48384 * return either a value, a promise for a value, or a rejection. The fallback
48385 * accepts the operation name, a resolver, and any further arguments that would
48386 * have been forwarded to the appropriate method above had a method been
48387 * provided with the proper name. The API makes no guarantees about the nature
48388 * of the returned object, apart from that it is usable whereever promises are
48391 Q.makePromise = Promise;
48392 function Promise(descriptor, fallback, inspect) {
48393 if (fallback === void 0) {
48394 fallback = function (op) {
48395 return reject(new Error(
48396 "Promise does not support operation: " + op
48400 if (inspect === void 0) {
48401 inspect = function () {
48402 return {state: "unknown"};
48406 var promise = object_create(Promise.prototype);
48408 promise.promiseDispatch = function (resolve, op, args) {
48411 if (descriptor[op]) {
48412 result = descriptor[op].apply(promise, args);
48414 result = fallback.call(promise, op, args);
48416 } catch (exception) {
48417 result = reject(exception);
48424 promise.inspect = inspect;
48426 // XXX deprecated `valueOf` and `exception` support
48428 var inspected = inspect();
48429 if (inspected.state === "rejected") {
48430 promise.exception = inspected.reason;
48433 promise.valueOf = function () {
48434 var inspected = inspect();
48435 if (inspected.state === "pending" ||
48436 inspected.state === "rejected") {
48439 return inspected.value;
48446 Promise.prototype.toString = function () {
48447 return "[object Promise]";
48450 Promise.prototype.then = function (fulfilled, rejected, progressed) {
48452 var deferred = defer();
48453 var done = false; // ensure the untrusted promise makes at most a
48454 // single call to one of the callbacks
48456 function _fulfilled(value) {
48458 return typeof fulfilled === "function" ? fulfilled(value) : value;
48459 } catch (exception) {
48460 return reject(exception);
48464 function _rejected(exception) {
48465 if (typeof rejected === "function") {
48466 makeStackTraceLong(exception, self);
48468 return rejected(exception);
48469 } catch (newException) {
48470 return reject(newException);
48473 return reject(exception);
48476 function _progressed(value) {
48477 return typeof progressed === "function" ? progressed(value) : value;
48480 Q.nextTick(function () {
48481 self.promiseDispatch(function (value) {
48487 deferred.resolve(_fulfilled(value));
48488 }, "when", [function (exception) {
48494 deferred.resolve(_rejected(exception));
48498 // Progress propagator need to be attached in the current tick.
48499 self.promiseDispatch(void 0, "when", [void 0, function (value) {
48503 newValue = _progressed(value);
48514 deferred.notify(newValue);
48518 return deferred.promise;
48521 Q.tap = function (promise, callback) {
48522 return Q(promise).tap(callback);
48526 * Works almost like "finally", but not called for rejections.
48527 * Original resolution value is passed through callback unaffected.
48528 * Callback may return a promise that will be awaited for.
48529 * @param {Function} callback
48530 * @returns {Q.Promise}
48534 * .tap(console.log)
48537 Promise.prototype.tap = function (callback) {
48538 callback = Q(callback);
48540 return this.then(function (value) {
48541 return callback.fcall(value).thenResolve(value);
48546 * Registers an observer on a promise.
48550 * 1. that fulfilled and rejected will be called only once.
48551 * 2. that either the fulfilled callback or the rejected callback will be
48552 * called, but not both.
48553 * 3. that fulfilled and rejected will not be called in this turn.
48555 * @param value promise or immediate reference to observe
48556 * @param fulfilled function to be called with the fulfilled value
48557 * @param rejected function to be called with the rejection exception
48558 * @param progressed function to be called on any progress notifications
48559 * @return promise for the return value from the invoked callback
48562 function when(value, fulfilled, rejected, progressed) {
48563 return Q(value).then(fulfilled, rejected, progressed);
48566 Promise.prototype.thenResolve = function (value) {
48567 return this.then(function () { return value; });
48570 Q.thenResolve = function (promise, value) {
48571 return Q(promise).thenResolve(value);
48574 Promise.prototype.thenReject = function (reason) {
48575 return this.then(function () { throw reason; });
48578 Q.thenReject = function (promise, reason) {
48579 return Q(promise).thenReject(reason);
48583 * If an object is not a promise, it is as "near" as possible.
48584 * If a promise is rejected, it is as "near" as possible too.
48585 * If it’s a fulfilled promise, the fulfillment value is nearer.
48586 * If it’s a deferred promise and the deferred has been resolved, the
48587 * resolution is "nearer".
48589 * @returns most resolved (nearest) form of the object
48592 // XXX should we re-do this?
48594 function nearer(value) {
48595 if (isPromise(value)) {
48596 var inspected = value.inspect();
48597 if (inspected.state === "fulfilled") {
48598 return inspected.value;
48605 * @returns whether the given object is a promise.
48606 * Otherwise it is a fulfilled value.
48608 Q.isPromise = isPromise;
48609 function isPromise(object) {
48610 return object instanceof Promise;
48613 Q.isPromiseAlike = isPromiseAlike;
48614 function isPromiseAlike(object) {
48615 return isObject(object) && typeof object.then === "function";
48619 * @returns whether the given object is a pending promise, meaning not
48620 * fulfilled or rejected.
48622 Q.isPending = isPending;
48623 function isPending(object) {
48624 return isPromise(object) && object.inspect().state === "pending";
48627 Promise.prototype.isPending = function () {
48628 return this.inspect().state === "pending";
48632 * @returns whether the given object is a value or fulfilled
48635 Q.isFulfilled = isFulfilled;
48636 function isFulfilled(object) {
48637 return !isPromise(object) || object.inspect().state === "fulfilled";
48640 Promise.prototype.isFulfilled = function () {
48641 return this.inspect().state === "fulfilled";
48645 * @returns whether the given object is a rejected promise.
48647 Q.isRejected = isRejected;
48648 function isRejected(object) {
48649 return isPromise(object) && object.inspect().state === "rejected";
48652 Promise.prototype.isRejected = function () {
48653 return this.inspect().state === "rejected";
48656 //// BEGIN UNHANDLED REJECTION TRACKING
48658 // This promise library consumes exceptions thrown in handlers so they can be
48659 // handled by a subsequent promise. The exceptions get added to this array when
48660 // they are created, and removed when they are handled. Note that in ES6 or
48661 // shimmed environments, this would naturally be a `Set`.
48662 var unhandledReasons = [];
48663 var unhandledRejections = [];
48664 var reportedUnhandledRejections = [];
48665 var trackUnhandledRejections = true;
48667 function resetUnhandledRejections() {
48668 unhandledReasons.length = 0;
48669 unhandledRejections.length = 0;
48671 if (!trackUnhandledRejections) {
48672 trackUnhandledRejections = true;
48676 function trackRejection(promise, reason) {
48677 if (!trackUnhandledRejections) {
48680 if (typeof process === "object" && typeof process.emit === "function") {
48681 Q.nextTick.runAfter(function () {
48682 if (array_indexOf(unhandledRejections, promise) !== -1) {
48683 process.emit("unhandledRejection", reason, promise);
48684 reportedUnhandledRejections.push(promise);
48689 unhandledRejections.push(promise);
48690 if (reason && typeof reason.stack !== "undefined") {
48691 unhandledReasons.push(reason.stack);
48693 unhandledReasons.push("(no stack) " + reason);
48697 function untrackRejection(promise) {
48698 if (!trackUnhandledRejections) {
48702 var at = array_indexOf(unhandledRejections, promise);
48704 if (typeof process === "object" && typeof process.emit === "function") {
48705 Q.nextTick.runAfter(function () {
48706 var atReport = array_indexOf(reportedUnhandledRejections, promise);
48707 if (atReport !== -1) {
48708 process.emit("rejectionHandled", unhandledReasons[at], promise);
48709 reportedUnhandledRejections.splice(atReport, 1);
48713 unhandledRejections.splice(at, 1);
48714 unhandledReasons.splice(at, 1);
48718 Q.resetUnhandledRejections = resetUnhandledRejections;
48720 Q.getUnhandledReasons = function () {
48721 // Make a copy so that consumers can't interfere with our internal state.
48722 return unhandledReasons.slice();
48725 Q.stopUnhandledRejectionTracking = function () {
48726 resetUnhandledRejections();
48727 trackUnhandledRejections = false;
48730 resetUnhandledRejections();
48732 //// END UNHANDLED REJECTION TRACKING
48735 * Constructs a rejected promise.
48736 * @param reason value describing the failure
48739 function reject(reason) {
48740 var rejection = Promise({
48741 "when": function (rejected) {
48742 // note that the error has been handled
48744 untrackRejection(this);
48746 return rejected ? rejected(reason) : this;
48748 }, function fallback() {
48750 }, function inspect() {
48751 return { state: "rejected", reason: reason };
48754 // Note that the reason has not been handled.
48755 trackRejection(rejection, reason);
48761 * Constructs a fulfilled promise for an immediate reference.
48762 * @param value immediate reference
48764 Q.fulfill = fulfill;
48765 function fulfill(value) {
48767 "when": function () {
48770 "get": function (name) {
48771 return value[name];
48773 "set": function (name, rhs) {
48776 "delete": function (name) {
48777 delete value[name];
48779 "post": function (name, args) {
48780 // Mark Miller proposes that post with no name should apply a
48781 // promised function.
48782 if (name === null || name === void 0) {
48783 return value.apply(void 0, args);
48785 return value[name].apply(value, args);
48788 "apply": function (thisp, args) {
48789 return value.apply(thisp, args);
48791 "keys": function () {
48792 return object_keys(value);
48794 }, void 0, function inspect() {
48795 return { state: "fulfilled", value: value };
48800 * Converts thenables to Q promises.
48801 * @param promise thenable promise
48802 * @returns a Q promise
48804 function coerce(promise) {
48805 var deferred = defer();
48806 Q.nextTick(function () {
48808 promise.then(deferred.resolve, deferred.reject, deferred.notify);
48809 } catch (exception) {
48810 deferred.reject(exception);
48813 return deferred.promise;
48817 * Annotates an object such that it will never be
48818 * transferred away from this process over any promise
48819 * communication channel.
48821 * @returns promise a wrapping of that object that
48822 * additionally responds to the "isDef" message
48823 * without a rejection.
48826 function master(object) {
48828 "isDef": function () {}
48829 }, function fallback(op, args) {
48830 return dispatch(object, op, args);
48832 return Q(object).inspect();
48837 * Spreads the values of a promised array of arguments into the
48838 * fulfillment callback.
48839 * @param fulfilled callback that receives variadic arguments from the
48841 * @param rejected callback that receives the exception if the promise
48843 * @returns a promise for the return value or thrown exception of
48847 function spread(value, fulfilled, rejected) {
48848 return Q(value).spread(fulfilled, rejected);
48851 Promise.prototype.spread = function (fulfilled, rejected) {
48852 return this.all().then(function (array) {
48853 return fulfilled.apply(void 0, array);
48858 * The async function is a decorator for generator functions, turning
48859 * them into asynchronous generators. Although generators are only part
48860 * of the newest ECMAScript 6 drafts, this code does not cause syntax
48861 * errors in older engines. This code should continue to work and will
48862 * in fact improve over time as the language improves.
48864 * ES6 generators are currently part of V8 version 3.19 with the
48865 * --harmony-generators runtime flag enabled. SpiderMonkey has had them
48866 * for longer, but under an older Python-inspired form. This function
48867 * works on both kinds of generators.
48869 * Decorates a generator function such that:
48870 * - it may yield promises
48871 * - execution will continue when that promise is fulfilled
48872 * - the value of the yield expression will be the fulfilled value
48873 * - it returns a promise for the return value (when the generator
48875 * - the decorated function returns a promise for the return value
48876 * of the generator or the first rejected promise among those
48878 * - if an error is thrown in the generator, it propagates through
48879 * every following yield until it is caught, or until it escapes
48880 * the generator function altogether, and is translated into a
48881 * rejection for the promise returned by the decorated generator.
48884 function async(makeGenerator) {
48885 return function () {
48886 // when verb is "send", arg is a value
48887 // when verb is "throw", arg is an exception
48888 function continuer(verb, arg) {
48891 // Until V8 3.19 / Chromium 29 is released, SpiderMonkey is the only
48892 // engine that has a deployed base of browsers that support generators.
48893 // However, SM's generators use the Python-inspired semantics of
48894 // outdated ES6 drafts. We would like to support ES6, but we'd also
48895 // like to make it possible to use generators in deployed browsers, so
48896 // we also support Python-style generators. At some point we can remove
48899 if (typeof StopIteration === "undefined") {
48902 result = generator[verb](arg);
48903 } catch (exception) {
48904 return reject(exception);
48907 return Q(result.value);
48909 return when(result.value, callback, errback);
48912 // SpiderMonkey Generators
48913 // FIXME: Remove this case when SM does ES6 generators.
48915 result = generator[verb](arg);
48916 } catch (exception) {
48917 if (isStopIteration(exception)) {
48918 return Q(exception.value);
48920 return reject(exception);
48923 return when(result, callback, errback);
48926 var generator = makeGenerator.apply(this, arguments);
48927 var callback = continuer.bind(continuer, "next");
48928 var errback = continuer.bind(continuer, "throw");
48934 * The spawn function is a small wrapper around async that immediately
48935 * calls the generator and also ends the promise chain, so that any
48936 * unhandled errors are thrown instead of forwarded to the error
48937 * handler. This is useful because it's extremely common to run
48938 * generators at the top-level to work with libraries.
48941 function spawn(makeGenerator) {
48942 Q.done(Q.async(makeGenerator)());
48945 // FIXME: Remove this interface once ES6 generators are in SpiderMonkey.
48947 * Throws a ReturnValue exception to stop an asynchronous generator.
48949 * This interface is a stop-gap measure to support generator return
48950 * values in older Firefox/SpiderMonkey. In browsers that support ES6
48951 * generators like Chromium 29, just use "return" in your generator
48954 * @param value the return value for the surrounding generator
48955 * @throws ReturnValue exception with the value.
48958 * Q.async(function* () {
48959 * var foo = yield getFooPromise();
48960 * var bar = yield getBarPromise();
48961 * return foo + bar;
48963 * // Older SpiderMonkey style
48964 * Q.async(function () {
48965 * var foo = yield getFooPromise();
48966 * var bar = yield getBarPromise();
48967 * Q.return(foo + bar);
48970 Q["return"] = _return;
48971 function _return(value) {
48972 throw new QReturnValue(value);
48976 * The promised function decorator ensures that any promise arguments
48977 * are settled and passed as values (`this` is also settled and passed
48978 * as a value). It will also ensure that the result of a function is
48979 * always a promise.
48982 * var add = Q.promised(function (a, b) {
48987 * @param {function} callback The function to decorate
48988 * @returns {function} a function that has been decorated.
48990 Q.promised = promised;
48991 function promised(callback) {
48992 return function () {
48993 return spread([this, all(arguments)], function (self, args) {
48994 return callback.apply(self, args);
49000 * sends a message to a value in a future turn
49001 * @param object* the recipient
49002 * @param op the name of the message operation, e.g., "when",
49003 * @param args further arguments to be forwarded to the operation
49004 * @returns result {Promise} a promise for the result of the operation
49006 Q.dispatch = dispatch;
49007 function dispatch(object, op, args) {
49008 return Q(object).dispatch(op, args);
49011 Promise.prototype.dispatch = function (op, args) {
49013 var deferred = defer();
49014 Q.nextTick(function () {
49015 self.promiseDispatch(deferred.resolve, op, args);
49017 return deferred.promise;
49021 * Gets the value of a property in a future turn.
49022 * @param object promise or immediate reference for target object
49023 * @param name name of property to get
49024 * @return promise for the property value
49026 Q.get = function (object, key) {
49027 return Q(object).dispatch("get", [key]);
49030 Promise.prototype.get = function (key) {
49031 return this.dispatch("get", [key]);
49035 * Sets the value of a property in a future turn.
49036 * @param object promise or immediate reference for object object
49037 * @param name name of property to set
49038 * @param value new value of property
49039 * @return promise for the return value
49041 Q.set = function (object, key, value) {
49042 return Q(object).dispatch("set", [key, value]);
49045 Promise.prototype.set = function (key, value) {
49046 return this.dispatch("set", [key, value]);
49050 * Deletes a property in a future turn.
49051 * @param object promise or immediate reference for target object
49052 * @param name name of property to delete
49053 * @return promise for the return value
49055 Q.del = // XXX legacy
49056 Q["delete"] = function (object, key) {
49057 return Q(object).dispatch("delete", [key]);
49060 Promise.prototype.del = // XXX legacy
49061 Promise.prototype["delete"] = function (key) {
49062 return this.dispatch("delete", [key]);
49066 * Invokes a method in a future turn.
49067 * @param object promise or immediate reference for target object
49068 * @param name name of method to invoke
49069 * @param value a value to post, typically an array of
49070 * invocation arguments for promises that
49071 * are ultimately backed with `resolve` values,
49072 * as opposed to those backed with URLs
49073 * wherein the posted value can be any
49074 * JSON serializable object.
49075 * @return promise for the return value
49077 // bound locally because it is used by other methods
49078 Q.mapply = // XXX As proposed by "Redsandro"
49079 Q.post = function (object, name, args) {
49080 return Q(object).dispatch("post", [name, args]);
49083 Promise.prototype.mapply = // XXX As proposed by "Redsandro"
49084 Promise.prototype.post = function (name, args) {
49085 return this.dispatch("post", [name, args]);
49089 * Invokes a method in a future turn.
49090 * @param object promise or immediate reference for target object
49091 * @param name name of method to invoke
49092 * @param ...args array of invocation arguments
49093 * @return promise for the return value
49095 Q.send = // XXX Mark Miller's proposed parlance
49096 Q.mcall = // XXX As proposed by "Redsandro"
49097 Q.invoke = function (object, name /*...args*/) {
49098 return Q(object).dispatch("post", [name, array_slice(arguments, 2)]);
49101 Promise.prototype.send = // XXX Mark Miller's proposed parlance
49102 Promise.prototype.mcall = // XXX As proposed by "Redsandro"
49103 Promise.prototype.invoke = function (name /*...args*/) {
49104 return this.dispatch("post", [name, array_slice(arguments, 1)]);
49108 * Applies the promised function in a future turn.
49109 * @param object promise or immediate reference for target function
49110 * @param args array of application arguments
49112 Q.fapply = function (object, args) {
49113 return Q(object).dispatch("apply", [void 0, args]);
49116 Promise.prototype.fapply = function (args) {
49117 return this.dispatch("apply", [void 0, args]);
49121 * Calls the promised function in a future turn.
49122 * @param object promise or immediate reference for target function
49123 * @param ...args array of application arguments
49126 Q.fcall = function (object /* ...args*/) {
49127 return Q(object).dispatch("apply", [void 0, array_slice(arguments, 1)]);
49130 Promise.prototype.fcall = function (/*...args*/) {
49131 return this.dispatch("apply", [void 0, array_slice(arguments)]);
49135 * Binds the promised function, transforming return values into a fulfilled
49136 * promise and thrown errors into a rejected one.
49137 * @param object promise or immediate reference for target function
49138 * @param ...args array of application arguments
49140 Q.fbind = function (object /*...args*/) {
49141 var promise = Q(object);
49142 var args = array_slice(arguments, 1);
49143 return function fbound() {
49144 return promise.dispatch("apply", [
49146 args.concat(array_slice(arguments))
49150 Promise.prototype.fbind = function (/*...args*/) {
49151 var promise = this;
49152 var args = array_slice(arguments);
49153 return function fbound() {
49154 return promise.dispatch("apply", [
49156 args.concat(array_slice(arguments))
49162 * Requests the names of the owned properties of a promised
49163 * object in a future turn.
49164 * @param object promise or immediate reference for target object
49165 * @return promise for the keys of the eventually settled object
49167 Q.keys = function (object) {
49168 return Q(object).dispatch("keys", []);
49171 Promise.prototype.keys = function () {
49172 return this.dispatch("keys", []);
49176 * Turns an array of promises into a promise for an array. If any of
49177 * the promises gets rejected, the whole array is rejected immediately.
49178 * @param {Array*} an array (or promise for an array) of values (or
49179 * promises for values)
49180 * @returns a promise for an array of the corresponding values
49183 // http://wiki.ecmascript.org/doku.php?id=strawman:concurrency&rev=1308776521#allfulfilled
49185 function all(promises) {
49186 return when(promises, function (promises) {
49187 var pendingCount = 0;
49188 var deferred = defer();
49189 array_reduce(promises, function (undefined$1, promise, index) {
49192 isPromise(promise) &&
49193 (snapshot = promise.inspect()).state === "fulfilled"
49195 promises[index] = snapshot.value;
49201 promises[index] = value;
49202 if (--pendingCount === 0) {
49203 deferred.resolve(promises);
49207 function (progress) {
49208 deferred.notify({ index: index, value: progress });
49213 if (pendingCount === 0) {
49214 deferred.resolve(promises);
49216 return deferred.promise;
49220 Promise.prototype.all = function () {
49225 * Returns the first resolved promise of an array. Prior rejected promises are
49226 * ignored. Rejects only if all promises are rejected.
49227 * @param {Array*} an array containing values or promises for values
49228 * @returns a promise fulfilled with the value of the first resolved promise,
49229 * or a rejected promise if all promises are rejected.
49233 function any(promises) {
49234 if (promises.length === 0) {
49235 return Q.resolve();
49238 var deferred = Q.defer();
49239 var pendingCount = 0;
49240 array_reduce(promises, function (prev, current, index) {
49241 var promise = promises[index];
49245 when(promise, onFulfilled, onRejected, onProgress);
49246 function onFulfilled(result) {
49247 deferred.resolve(result);
49249 function onRejected(err) {
49251 if (pendingCount === 0) {
49252 var rejection = err || new Error("" + err);
49254 rejection.message = ("Q can't get fulfillment value from any promise, all " +
49255 "promises were rejected. Last error message: " + rejection.message);
49257 deferred.reject(rejection);
49260 function onProgress(progress) {
49268 return deferred.promise;
49271 Promise.prototype.any = function () {
49276 * Waits for all promises to be settled, either fulfilled or
49277 * rejected. This is distinct from `all` since that would stop
49278 * waiting at the first rejection. The promise returned by
49279 * `allResolved` will never be rejected.
49280 * @param promises a promise for an array (or an array) of promises
49282 * @return a promise for an array of promises
49284 Q.allResolved = deprecate(allResolved, "allResolved", "allSettled");
49285 function allResolved(promises) {
49286 return when(promises, function (promises) {
49287 promises = array_map(promises, Q);
49288 return when(all(array_map(promises, function (promise) {
49289 return when(promise, noop, noop);
49296 Promise.prototype.allResolved = function () {
49297 return allResolved(this);
49301 * @see Promise#allSettled
49303 Q.allSettled = allSettled;
49304 function allSettled(promises) {
49305 return Q(promises).allSettled();
49309 * Turns an array of promises into a promise for an array of their states (as
49310 * returned by `inspect`) when they have all settled.
49311 * @param {Array[Any*]} values an array (or promise for an array) of values (or
49312 * promises for values)
49313 * @returns {Array[State]} an array of states for the respective values.
49315 Promise.prototype.allSettled = function () {
49316 return this.then(function (promises) {
49317 return all(array_map(promises, function (promise) {
49318 promise = Q(promise);
49319 function regardless() {
49320 return promise.inspect();
49322 return promise.then(regardless, regardless);
49328 * Captures the failure of a promise, giving an oportunity to recover
49329 * with a callback. If the given promise is fulfilled, the returned
49330 * promise is fulfilled.
49331 * @param {Any*} promise for something
49332 * @param {Function} callback to fulfill the returned promise if the
49333 * given promise is rejected
49334 * @returns a promise for the return value of the callback
49336 Q.fail = // XXX legacy
49337 Q["catch"] = function (object, rejected) {
49338 return Q(object).then(void 0, rejected);
49341 Promise.prototype.fail = // XXX legacy
49342 Promise.prototype["catch"] = function (rejected) {
49343 return this.then(void 0, rejected);
49347 * Attaches a listener that can respond to progress notifications from a
49348 * promise's originating deferred. This listener receives the exact arguments
49349 * passed to ``deferred.notify``.
49350 * @param {Any*} promise for something
49351 * @param {Function} callback to receive any progress notifications
49352 * @returns the given promise, unchanged
49354 Q.progress = progress;
49355 function progress(object, progressed) {
49356 return Q(object).then(void 0, void 0, progressed);
49359 Promise.prototype.progress = function (progressed) {
49360 return this.then(void 0, void 0, progressed);
49364 * Provides an opportunity to observe the settling of a promise,
49365 * regardless of whether the promise is fulfilled or rejected. Forwards
49366 * the resolution to the returned promise when the callback is done.
49367 * The callback can return a promise to defer completion.
49368 * @param {Any*} promise
49369 * @param {Function} callback to observe the resolution of the given
49370 * promise, takes no arguments.
49371 * @returns a promise for the resolution of the given promise when
49374 Q.fin = // XXX legacy
49375 Q["finally"] = function (object, callback) {
49376 return Q(object)["finally"](callback);
49379 Promise.prototype.fin = // XXX legacy
49380 Promise.prototype["finally"] = function (callback) {
49381 if (!callback || typeof callback.apply !== "function") {
49382 throw new Error("Q can't apply finally callback");
49384 callback = Q(callback);
49385 return this.then(function (value) {
49386 return callback.fcall().then(function () {
49389 }, function (reason) {
49390 // TODO attempt to recycle the rejection with "this".
49391 return callback.fcall().then(function () {
49398 * Terminates a chain of promises, forcing rejections to be
49399 * thrown as exceptions.
49400 * @param {Any*} promise at the end of a chain of promises
49403 Q.done = function (object, fulfilled, rejected, progress) {
49404 return Q(object).done(fulfilled, rejected, progress);
49407 Promise.prototype.done = function (fulfilled, rejected, progress) {
49408 var onUnhandledError = function (error) {
49409 // forward to a future turn so that ``when``
49410 // does not catch it and turn it into a rejection.
49411 Q.nextTick(function () {
49412 makeStackTraceLong(error, promise);
49421 // Avoid unnecessary `nextTick`ing via an unnecessary `when`.
49422 var promise = fulfilled || rejected || progress ?
49423 this.then(fulfilled, rejected, progress) :
49426 if (typeof process === "object" && process && process.domain) {
49427 onUnhandledError = process.domain.bind(onUnhandledError);
49430 promise.then(void 0, onUnhandledError);
49434 * Causes a promise to be rejected if it does not get fulfilled before
49435 * some milliseconds time out.
49436 * @param {Any*} promise
49437 * @param {Number} milliseconds timeout
49438 * @param {Any*} custom error message or Error object (optional)
49439 * @returns a promise for the resolution of the given promise if it is
49440 * fulfilled before the timeout, otherwise rejected.
49442 Q.timeout = function (object, ms, error) {
49443 return Q(object).timeout(ms, error);
49446 Promise.prototype.timeout = function (ms, error) {
49447 var deferred = defer();
49448 var timeoutId = setTimeout(function () {
49449 if (!error || "string" === typeof error) {
49450 error = new Error(error || "Timed out after " + ms + " ms");
49451 error.code = "ETIMEDOUT";
49453 deferred.reject(error);
49456 this.then(function (value) {
49457 clearTimeout(timeoutId);
49458 deferred.resolve(value);
49459 }, function (exception) {
49460 clearTimeout(timeoutId);
49461 deferred.reject(exception);
49462 }, deferred.notify);
49464 return deferred.promise;
49468 * Returns a promise for the given value (or promised value), some
49469 * milliseconds after it resolved. Passes rejections immediately.
49470 * @param {Any*} promise
49471 * @param {Number} milliseconds
49472 * @returns a promise for the resolution of the given promise after milliseconds
49473 * time has elapsed since the resolution of the given promise.
49474 * If the given promise rejects, that is passed immediately.
49476 Q.delay = function (object, timeout) {
49477 if (timeout === void 0) {
49481 return Q(object).delay(timeout);
49484 Promise.prototype.delay = function (timeout) {
49485 return this.then(function (value) {
49486 var deferred = defer();
49487 setTimeout(function () {
49488 deferred.resolve(value);
49490 return deferred.promise;
49495 * Passes a continuation to a Node function, which is called with the given
49496 * arguments provided as an array, and returns a promise.
49498 * Q.nfapply(FS.readFile, [__filename])
49499 * .then(function (content) {
49503 Q.nfapply = function (callback, args) {
49504 return Q(callback).nfapply(args);
49507 Promise.prototype.nfapply = function (args) {
49508 var deferred = defer();
49509 var nodeArgs = array_slice(args);
49510 nodeArgs.push(deferred.makeNodeResolver());
49511 this.fapply(nodeArgs).fail(deferred.reject);
49512 return deferred.promise;
49516 * Passes a continuation to a Node function, which is called with the given
49517 * arguments provided individually, and returns a promise.
49519 * Q.nfcall(FS.readFile, __filename)
49520 * .then(function (content) {
49524 Q.nfcall = function (callback /*...args*/) {
49525 var args = array_slice(arguments, 1);
49526 return Q(callback).nfapply(args);
49529 Promise.prototype.nfcall = function (/*...args*/) {
49530 var nodeArgs = array_slice(arguments);
49531 var deferred = defer();
49532 nodeArgs.push(deferred.makeNodeResolver());
49533 this.fapply(nodeArgs).fail(deferred.reject);
49534 return deferred.promise;
49538 * Wraps a NodeJS continuation passing function and returns an equivalent
49539 * version that returns a promise.
49541 * Q.nfbind(FS.readFile, __filename)("utf-8")
49542 * .then(console.log)
49546 Q.denodeify = function (callback /*...args*/) {
49547 if (callback === undefined) {
49548 throw new Error("Q can't wrap an undefined function");
49550 var baseArgs = array_slice(arguments, 1);
49551 return function () {
49552 var nodeArgs = baseArgs.concat(array_slice(arguments));
49553 var deferred = defer();
49554 nodeArgs.push(deferred.makeNodeResolver());
49555 Q(callback).fapply(nodeArgs).fail(deferred.reject);
49556 return deferred.promise;
49560 Promise.prototype.nfbind =
49561 Promise.prototype.denodeify = function (/*...args*/) {
49562 var args = array_slice(arguments);
49563 args.unshift(this);
49564 return Q.denodeify.apply(void 0, args);
49567 Q.nbind = function (callback, thisp /*...args*/) {
49568 var baseArgs = array_slice(arguments, 2);
49569 return function () {
49570 var nodeArgs = baseArgs.concat(array_slice(arguments));
49571 var deferred = defer();
49572 nodeArgs.push(deferred.makeNodeResolver());
49574 return callback.apply(thisp, arguments);
49576 Q(bound).fapply(nodeArgs).fail(deferred.reject);
49577 return deferred.promise;
49581 Promise.prototype.nbind = function (/*thisp, ...args*/) {
49582 var args = array_slice(arguments, 0);
49583 args.unshift(this);
49584 return Q.nbind.apply(void 0, args);
49588 * Calls a method of a Node-style object that accepts a Node-style
49589 * callback with a given array of arguments, plus a provided callback.
49590 * @param object an object that has the named method
49591 * @param {String} name name of the method of object
49592 * @param {Array} args arguments to pass to the method; the callback
49593 * will be provided by Q and appended to these arguments.
49594 * @returns a promise for the value or error
49596 Q.nmapply = // XXX As proposed by "Redsandro"
49597 Q.npost = function (object, name, args) {
49598 return Q(object).npost(name, args);
49601 Promise.prototype.nmapply = // XXX As proposed by "Redsandro"
49602 Promise.prototype.npost = function (name, args) {
49603 var nodeArgs = array_slice(args || []);
49604 var deferred = defer();
49605 nodeArgs.push(deferred.makeNodeResolver());
49606 this.dispatch("post", [name, nodeArgs]).fail(deferred.reject);
49607 return deferred.promise;
49611 * Calls a method of a Node-style object that accepts a Node-style
49612 * callback, forwarding the given variadic arguments, plus a provided
49613 * callback argument.
49614 * @param object an object that has the named method
49615 * @param {String} name name of the method of object
49616 * @param ...args arguments to pass to the method; the callback will
49617 * be provided by Q and appended to these arguments.
49618 * @returns a promise for the value or error
49620 Q.nsend = // XXX Based on Mark Miller's proposed "send"
49621 Q.nmcall = // XXX Based on "Redsandro's" proposal
49622 Q.ninvoke = function (object, name /*...args*/) {
49623 var nodeArgs = array_slice(arguments, 2);
49624 var deferred = defer();
49625 nodeArgs.push(deferred.makeNodeResolver());
49626 Q(object).dispatch("post", [name, nodeArgs]).fail(deferred.reject);
49627 return deferred.promise;
49630 Promise.prototype.nsend = // XXX Based on Mark Miller's proposed "send"
49631 Promise.prototype.nmcall = // XXX Based on "Redsandro's" proposal
49632 Promise.prototype.ninvoke = function (name /*...args*/) {
49633 var nodeArgs = array_slice(arguments, 1);
49634 var deferred = defer();
49635 nodeArgs.push(deferred.makeNodeResolver());
49636 this.dispatch("post", [name, nodeArgs]).fail(deferred.reject);
49637 return deferred.promise;
49641 * If a function would like to support both Node continuation-passing-style and
49642 * promise-returning-style, it can end its internal promise chain with
49643 * `nodeify(nodeback)`, forwarding the optional nodeback argument. If the user
49644 * elects to use a nodeback, the result will be sent there. If they do not
49645 * pass a nodeback, they will receive the result promise.
49646 * @param object a result (or a promise for a result)
49647 * @param {Function} nodeback a Node.js-style callback
49648 * @returns either the promise or nothing
49650 Q.nodeify = nodeify;
49651 function nodeify(object, nodeback) {
49652 return Q(object).nodeify(nodeback);
49655 Promise.prototype.nodeify = function (nodeback) {
49657 this.then(function (value) {
49658 Q.nextTick(function () {
49659 nodeback(null, value);
49661 }, function (error) {
49662 Q.nextTick(function () {
49671 Q.noConflict = function() {
49672 throw new Error("Q.noConflict only works when Q is used as a global");
49675 // All code before this point will be filtered from stack traces.
49676 var qEndingLine = captureLine();
49683 var bubbleApi = 'https://dev.virtualearth.net/mapcontrol/HumanScaleServices/GetBubbles.ashx?';
49684 var streetsideImagesApi = 'https://t.ssl.ak.tiles.virtualearth.net/tiles/';
49685 var bubbleAppKey = 'AuftgJsO0Xs8Ts4M1xZUQJQXJNsvmh3IV8DkNieCiy3tCwCUMq76-WpkrBtNAuEm';
49686 var pannellumViewerCSS = 'pannellum-streetside/pannellum.css';
49687 var pannellumViewerJS = 'pannellum-streetside/pannellum.js';
49688 var maxResults$2 = 2000;
49689 var tileZoom$2 = 16.5;
49690 var tiler$5 = utilTiler().zoomExtent([tileZoom$2, tileZoom$2]).skipNullIsland(true);
49691 var dispatch$6 = dispatch('loadedBubbles', 'viewerChanged');
49692 var minHfov = 10; // zoom in degrees: 20, 10, 5
49693 var maxHfov = 90; // zoom out degrees
49694 var defaultHfov = 45;
49696 var _hires = false;
49697 var _resolution = 512; // higher numbers are slower - 512, 1024, 2048, 4096
49698 var _currScene = 0;
49700 var _pannellumViewer;
49702 var _dataUrlArray = [];
49708 function abortRequest$5(i) {
49714 * localeTimeStamp().
49716 function localeTimestamp(s) {
49717 if (!s) return null;
49718 var detected = utilDetect();
49719 var options = { day: 'numeric', month: 'short', year: 'numeric' };
49720 var d = new Date(s);
49721 if (isNaN(d.getTime())) return null;
49722 return d.toLocaleString(detected.locale, options);
49727 * loadTiles() wraps the process of generating tiles and then fetching image points for each tile.
49729 function loadTiles$2(which, url, projection, margin) {
49730 var tiles = tiler$5.margin(margin).getTiles(projection);
49732 // abort inflight requests that are no longer needed
49733 var cache = _ssCache[which];
49734 Object.keys(cache.inflight).forEach(function(k) {
49735 var wanted = tiles.find(function(tile) { return k.indexOf(tile.id + ',') === 0; });
49737 abortRequest$5(cache.inflight[k]);
49738 delete cache.inflight[k];
49742 tiles.forEach(function (tile) {
49743 loadNextTilePage$2(which, url, tile);
49748 * loadNextTilePage() load data for the next tile page in line.
49750 function loadNextTilePage$2(which, url, tile) {
49751 var cache = _ssCache[which];
49752 var nextPage = cache.nextPage[tile.id] || 0;
49753 var id = tile.id + ',' + String(nextPage);
49754 if (cache.loaded[id] || cache.inflight[id]) return;
49756 cache.inflight[id] = getBubbles(url, tile, function(bubbles) {
49757 cache.loaded[id] = true;
49758 delete cache.inflight[id];
49759 if (!bubbles) return;
49761 // [].shift() removes the first element, some statistics info, not a bubble point
49764 var features = bubbles.map(function(bubble) {
49765 if (cache.points[bubble.id]) return null; // skip duplicates
49767 var loc = [bubble.lo, bubble.la];
49772 captured_at: bubble.cd,
49773 captured_by: 'microsoft',
49774 // nbn: bubble.nbn,
49775 // pbn: bubble.pbn,
49778 pr: bubble.pr, // previous
49779 ne: bubble.ne, // next
49784 cache.points[bubble.id] = d;
49786 // a sequence starts here
49787 if (bubble.pr === undefined) {
49788 cache.leaders.push(bubble.id);
49792 minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1], data: d
49795 }).filter(Boolean);
49797 cache.rtree.load(features);
49799 connectSequences();
49801 if (which === 'bubbles') {
49802 dispatch$6.call('loadedBubbles');
49808 // call this sometimes to connect the bubbles into sequences
49809 function connectSequences() {
49810 var cache = _ssCache.bubbles;
49811 var keepLeaders = [];
49813 for (var i = 0; i < cache.leaders.length; i++) {
49814 var bubble = cache.points[cache.leaders[i]];
49817 // try to make a sequence.. use the key of the leader bubble.
49818 var sequence = { key: bubble.key, bubbles: [] };
49819 var complete = false;
49822 sequence.bubbles.push(bubble);
49823 seen[bubble.key] = true;
49825 if (bubble.ne === undefined) {
49828 bubble = cache.points[bubble.ne]; // advance to next
49830 } while (bubble && !seen[bubble.key] && !complete);
49834 _ssCache.sequences[sequence.key] = sequence;
49836 // assign bubbles to the sequence
49837 for (var j = 0; j < sequence.bubbles.length; j++) {
49838 sequence.bubbles[j].sequenceKey = sequence.key;
49841 // create a GeoJSON LineString
49842 sequence.geojson = {
49843 type: 'LineString',
49844 properties: { key: sequence.key },
49845 coordinates: sequence.bubbles.map(function (d) { return d.loc; })
49849 keepLeaders.push(cache.leaders[i]);
49853 // couldn't complete these, save for later
49854 cache.leaders = keepLeaders;
49858 * getBubbles() handles the request to the server for a tile extent of 'bubbles' (streetside image locations).
49860 function getBubbles(url, tile, callback) {
49861 var rect = tile.extent.rectangle();
49862 var urlForRequest = url + utilQsString({
49868 appkey: bubbleAppKey,
49869 jsCallback: '{callback}'
49872 return jsonpRequest(urlForRequest, function (data) {
49873 if (!data || data.error) {
49882 // partition viewport into higher zoom tiles
49883 function partitionViewport$2(projection) {
49884 var z = geoScaleToZoom(projection.scale());
49885 var z2 = (Math.ceil(z * 2) / 2) + 2.5; // round to next 0.5 and add 2.5
49886 var tiler = utilTiler().zoomExtent([z2, z2]);
49888 return tiler.getTiles(projection)
49889 .map(function(tile) { return tile.extent; });
49893 // no more than `limit` results per partition.
49894 function searchLimited$2(limit, projection, rtree) {
49895 limit = limit || 5;
49897 return partitionViewport$2(projection)
49898 .reduce(function(result, extent) {
49899 var found = rtree.search(extent.bbox())
49901 .map(function(d) { return d.data; });
49903 return (found.length ? result.concat(found) : result);
49911 function getImage(imgInfo) {
49912 var response = q.defer();
49913 var img = new Image();
49915 img.onload = function() {
49916 var canvas = document.getElementById('canvas' + imgInfo.face);
49917 var ctx = canvas.getContext('2d');
49918 ctx.drawImage(img, imgInfo.x, imgInfo.y);
49919 response.resolve({imgInfo:imgInfo, status: 'ok'});
49921 img.onerror = function() {
49922 response.resolve({data: imgInfo, status: 'error'});
49924 img.setAttribute('crossorigin', '');
49925 img.src = imgInfo.url;
49927 return response.promise;
49934 function loadCanvas(imgInfoGroup) {
49935 var response = q.defer();
49936 var getImagePromises = imgInfoGroup.map(function(imgInfo) {
49937 return getImage(imgInfo);
49940 q.all(getImagePromises).then(function(data) {
49941 var canvas = document.getElementById('canvas' + data[0].imgInfo.face);
49942 switch (data[0].imgInfo.face) {
49944 _dataUrlArray[0] = canvas.toDataURL('image/jpeg', 1.0);
49947 _dataUrlArray[1] = canvas.toDataURL('image/jpeg', 1.0);
49950 _dataUrlArray[2] = canvas.toDataURL('image/jpeg', 1.0);
49953 _dataUrlArray[3] = canvas.toDataURL('image/jpeg', 1.0);
49956 _dataUrlArray[4] = canvas.toDataURL('image/jpeg', 1.0);
49959 _dataUrlArray[5] = canvas.toDataURL('image/jpeg', 1.0);
49962 response.resolve({status:'loadCanvas for face ' + data[0].imgInfo.face + 'ok'});
49965 return response.promise;
49969 function setupCanvas(selection, reset) {
49971 selection.selectAll('#divForCanvasWork')
49975 // Add the Streetside working canvases. These are used for 'stitching', or combining,
49976 // multiple images for each of the six faces, before passing to the Pannellum control as DataUrls
49977 selection.selectAll('#divForCanvasWork')
49981 .attr('id', 'divForCanvasWork')
49982 .attr('display', 'none')
49983 .selectAll('canvas')
49984 .data(['canvas01', 'canvas02', 'canvas03', 'canvas10', 'canvas11', 'canvas12'])
49987 .attr('id', function(d) { return d; })
49988 .attr('width', _resolution)
49989 .attr('height', _resolution);
49996 function processFaces(imgFaceInfoGroups) {
49997 var response = q.defer();
49998 var loadCanvasPromises = imgFaceInfoGroups.map(function(faceImgGroup) {
49999 return loadCanvas(faceImgGroup);
50002 q.all(loadCanvasPromises).then(function() {
50003 response.resolve({status: 'processFaces done'});
50006 return response.promise;
50011 function qkToXY(qk) {
50015 for (var i = qk.length; i > 0; i--) {
50017 x += (+(key === '1' || key === '3')) * scale;
50018 y += (+(key === '2' || key === '3')) * scale;
50025 function getQuadKeys() {
50026 var dim = _resolution / 256;
50031 '0000','0001','0010','0011','0100','0101','0110','0111', '1000','1001','1010','1011','1100','1101','1110','1111',
50032 '0002','0003','0012','0013','0102','0103','0112','0113', '1002','1003','1012','1013','1102','1103','1112','1113',
50033 '0020','0021','0030','0031','0120','0121','0130','0131', '1020','1021','1030','1031','1120','1121','1130','1131',
50034 '0022','0023','0032','0033','0122','0123','0132','0133', '1022','1023','1032','1033','1122','1123','1132','1133',
50035 '0200','0201','0210','0211','0300','0301','0310','0311', '1200','1201','1210','1211','1300','1301','1310','1311',
50036 '0202','0203','0212','0213','0302','0303','0312','0313', '1202','1203','1212','1213','1302','1303','1312','1313',
50037 '0220','0221','0230','0231','0320','0321','0330','0331', '1220','1221','1230','1231','1320','1321','1330','1331',
50038 '0222','0223','0232','0233','0322','0323','0332','0333', '1222','1223','1232','1233','1322','1323','1332','1333',
50040 '2000','2001','2010','2011','2100','2101','2110','2111', '3000','3001','3010','3011','3100','3101','3110','3111',
50041 '2002','2003','2012','2013','2102','2103','2112','2113', '3002','3003','3012','3013','3102','3103','3112','3113',
50042 '2020','2021','2030','2031','2120','2121','2130','2131', '3020','3021','3030','3031','3120','3121','3130','3131',
50043 '2022','2023','2032','2033','2122','2123','2132','2133', '3022','3023','3032','3033','3122','3123','3132','3133',
50044 '2200','2201','2210','2211','2300','2301','2310','2311', '3200','3201','3210','3211','3300','3301','3310','3311',
50045 '2202','2203','2212','2213','2302','2303','2312','2313', '3202','3203','3212','3213','3302','3303','3312','3313',
50046 '2220','2221','2230','2231','2320','2321','2330','2331', '3220','3221','3230','3231','3320','3321','3330','3331',
50047 '2222','2223','2232','2233','2322','2323','2332','2333', '3222','3223','3232','3233','3322','3323','3332','3333'
50050 } else if (dim === 8) {
50052 '000','001','010','011', '100','101','110','111',
50053 '002','003','012','013', '102','103','112','113',
50054 '020','021','030','031', '120','121','130','131',
50055 '022','023','032','033', '122','123','132','133',
50057 '200','201','210','211', '300','301','310','311',
50058 '202','203','212','213', '302','303','312','313',
50059 '220','221','230','231', '320','321','330','331',
50060 '222','223','232','233', '322','323','332','333'
50063 } else if (dim === 4) {
50065 '00','01', '10','11',
50066 '02','03', '12','13',
50068 '20','21', '30','31',
50069 '22','23', '32','33'
50072 } else { // dim === 2
50084 var serviceStreetside = {
50086 * init() initialize streetside.
50088 init: function () {
50093 this.event = utilRebind(this, dispatch$6, 'on');
50097 * reset() reset the cache.
50099 reset: function () {
50101 Object.values(_ssCache.bubbles.inflight).forEach(abortRequest$5);
50105 bubbles: { inflight: {}, loaded: {}, nextPage: {}, rtree: rbush_1(), points: {}, leaders: [] },
50113 bubbles: function (projection) {
50115 return searchLimited$2(limit, projection, _ssCache.bubbles.rtree);
50119 sequences: function(projection) {
50120 var viewport = projection.clipExtent();
50121 var min = [viewport[0][0], viewport[1][1]];
50122 var max = [viewport[1][0], viewport[0][1]];
50123 var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
50127 // all sequences for bubbles in viewport
50128 _ssCache.bubbles.rtree.search(bbox)
50129 .forEach(function(d) {
50130 var key = d.data.sequenceKey;
50131 if (key && !seen[key]) {
50133 results.push(_ssCache.sequences[key].geojson);
50144 loadBubbles: function (projection, margin) {
50145 // by default: request 2 nearby tiles so we can connect sequences.
50146 if (margin === undefined) margin = 2;
50148 loadTiles$2('bubbles', bubbleApi, projection, margin);
50152 viewer: function() {
50153 return _pannellumViewer;
50157 initViewer: function () {
50158 if (!window.pannellum) return;
50159 if (_pannellumViewer) return;
50161 var sceneID = ++_currScene + '';
50163 'default': { firstScene: sceneID },
50166 options.scenes[sceneID] = _sceneOptions;
50168 _pannellumViewer = window.pannellum.viewer('viewer-streetside', options);
50171 .on('mousedown', function() {
50172 d3_select(window).on('mousemove.pannellum', function() {
50173 dispatch$6.call('viewerChanged');
50176 .on('mouseup', function() {
50177 d3_select(window).on('mousemove.pannellum', null);
50178 // continue dispatching events for a few seconds, in case viewer has inertia.
50179 var t = timer(function(elapsed) {
50180 dispatch$6.call('viewerChanged');
50181 if (elapsed > 2000) {
50190 * loadViewer() create the streeside viewer.
50192 loadViewer: function (context) {
50195 // create ms-wrapper, a photo wrapper class
50196 var wrap = d3_select('#photoviewer').selectAll('.ms-wrapper')
50199 // inject ms-wrapper into the photoviewer div
50200 // (used by all to house each custom photo viewer)
50201 var wrapEnter = wrap.enter()
50204 .attr('class', 'photo-wrapper ms-wrapper')
50205 .classed('hide', true);
50207 // inject div to support streetside viewer (pannellum) and attribution line
50210 .attr('id', 'viewer-streetside')
50212 .attr('class', 'photo-attribution fillD');
50214 var controlsEnter = wrapEnter
50216 .attr('class', 'photo-controls-wrap')
50218 .attr('class', 'photo-controls');
50222 .on('click.back', step(-1))
50227 .on('click.forward', step(1))
50231 // create working canvas for stitching together images
50234 .call(setupCanvas, true);
50236 // load streetside pannellum viewer css
50237 d3_select('head').selectAll('#streetside-viewercss')
50241 .attr('id', 'streetside-viewercss')
50242 .attr('rel', 'stylesheet')
50243 .attr('href', context.asset(pannellumViewerCSS));
50245 // load streetside pannellum viewer js
50246 d3_select('head').selectAll('#streetside-viewerjs')
50250 .attr('id', 'streetside-viewerjs')
50251 .attr('src', context.asset(pannellumViewerJS));
50254 // Register viewer resize handler
50255 context.ui().photoviewer.on('resize', function() {
50256 if (_pannellumViewer) {
50257 _pannellumViewer.resize();
50262 function step(stepBy) {
50263 return function() {
50264 var viewer = d3_select('#photoviewer');
50265 var selected = viewer.empty() ? undefined : viewer.datum();
50266 if (!selected) return;
50268 var nextID = (stepBy === 1 ? selected.ne : selected.pr);
50269 var yaw = _pannellumViewer.getYaw();
50270 var ca = selected.ca + yaw;
50271 var origin = selected.loc;
50273 // construct a search trapezoid pointing out from current bubble
50276 origin[0] + geoMetersToLon(meters / 5, origin[1]),
50280 origin[0] + geoMetersToLon(meters / 2, origin[1]),
50281 origin[1] + geoMetersToLat(meters)
50284 origin[0] - geoMetersToLon(meters / 2, origin[1]),
50285 origin[1] + geoMetersToLat(meters)
50288 origin[0] - geoMetersToLon(meters / 5, origin[1]),
50292 var poly = [p1, p2, p3, p4, p1];
50294 // rotate it to face forward/backward
50295 var angle = (stepBy === 1 ? ca : ca + 180) * (Math.PI / 180);
50296 poly = geoRotate(poly, -angle, origin);
50298 var extent = poly.reduce(function(extent, point) {
50299 return extent.extend(geoExtent(point));
50302 // find nearest other bubble in the search polygon
50303 var minDist = Infinity;
50304 _ssCache.bubbles.rtree.search(extent.bbox())
50305 .forEach(function(d) {
50306 if (d.data.key === selected.key) return;
50307 if (!geoPointInPolygon(d.data.loc, poly)) return;
50309 var dist = geoVecLength(d.data.loc, selected.loc);
50310 var theta = selected.ca - d.data.ca;
50311 var minTheta = Math.min(Math.abs(theta), 360 - Math.abs(theta));
50312 if (minTheta > 20) {
50313 dist += 5; // penalize distance if camera angles don't match
50316 if (dist < minDist) {
50317 nextID = d.data.key;
50322 var nextBubble = nextID && _ssCache.bubbles.points[nextID];
50323 if (!nextBubble) return;
50325 context.map().centerEase(nextBubble.loc);
50327 that.selectImage(nextBubble)
50328 .then(function(r) {
50329 if (r.status === 'ok') {
50330 _sceneOptions.yaw = yaw;
50341 showViewer: function (yaw) {
50342 if (!_sceneOptions) return;
50344 if (yaw !== undefined) {
50345 _sceneOptions.yaw = yaw;
50348 if (!_pannellumViewer) {
50351 // make a new scene
50352 var sceneID = ++_currScene + '';
50354 .addScene(sceneID, _sceneOptions)
50355 .loadScene(sceneID);
50357 // remove previous scene
50358 if (_currScene > 2) {
50359 sceneID = (_currScene - 1) + '';
50361 .removeScene(sceneID);
50365 var wrap = d3_select('#photoviewer')
50366 .classed('hide', false);
50368 var isHidden = wrap.selectAll('.photo-wrapper.ms-wrapper.hide').size();
50372 .selectAll('.photo-wrapper:not(.ms-wrapper)')
50373 .classed('hide', true);
50376 .selectAll('.photo-wrapper.ms-wrapper')
50377 .classed('hide', false);
50386 hideViewer: function () {
50387 var viewer = d3_select('#photoviewer');
50388 if (!viewer.empty()) viewer.datum(null);
50391 .classed('hide', true)
50392 .selectAll('.photo-wrapper')
50393 .classed('hide', true);
50395 d3_selectAll('.viewfield-group, .sequence, .icon-sign')
50396 .classed('currentView', false);
50398 return this.setStyles(null, true);
50404 selectImage: function (d) {
50405 var response = q.defer();
50408 var viewer = d3_select('#photoviewer');
50409 if (!viewer.empty()) viewer.datum(d);
50411 this.setStyles(null, true);
50413 var wrap = d3_select('#photoviewer .ms-wrapper');
50414 var attribution = wrap.selectAll('.photo-attribution').html('');
50416 wrap.selectAll('.pnlm-load-box') // display "loading.."
50417 .style('display', 'block');
50420 response.resolve({status: 'ok'});
50421 return response.promise;
50424 var line1 = attribution
50426 .attr('class', 'attribution-row');
50428 // Add hires checkbox
50431 .attr('class', 'streetside-hires');
50435 .attr('type', 'checkbox')
50436 .attr('id', 'streetside-hires-input')
50437 .property('checked', _hires)
50438 .on('click', function() {
50439 event.stopPropagation();
50442 _resolution = _hires ? 1024 : 512;
50443 wrap.call(setupCanvas, true);
50446 yaw: _pannellumViewer.getYaw(),
50447 pitch: _pannellumViewer.getPitch(),
50448 hfov: _pannellumViewer.getHfov()
50451 that.selectImage(d)
50452 .then(function(r) {
50453 if (r.status === 'ok') {
50454 _sceneOptions = Object.assign(_sceneOptions, viewstate);
50462 .text(t('streetside.hires'));
50465 var captureInfo = line1
50467 .attr('class', 'attribution-capture-info');
50469 // Add capture date
50470 if (d.captured_by) {
50471 var yyyy = (new Date()).getFullYear();
50475 .attr('class', 'captured_by')
50476 .attr('target', '_blank')
50477 .attr('href', 'https://www.microsoft.com/en-us/maps/streetside')
50478 .text('©' + yyyy + ' Microsoft');
50485 if (d.captured_at) {
50488 .attr('class', 'captured_at')
50489 .text(localeTimestamp(d.captured_at));
50493 var line2 = attribution
50495 .attr('class', 'attribution-row');
50499 .attr('class', 'image-view-link')
50500 .attr('target', '_blank')
50501 .attr('href', 'https://www.bing.com/maps?cp=' + d.loc[1] + '~' + d.loc[0] +
50502 '&lvl=17&dir=' + d.ca + '&style=x&v=2&sV=1')
50503 .text(t('streetside.view_on_bing'));
50507 .attr('class', 'image-report-link')
50508 .attr('target', '_blank')
50509 .attr('href', 'https://www.bing.com/maps/privacyreport/streetsideprivacyreport?bubbleid=' + encodeURIComponent(d.key) +
50510 '&focus=photo&lat=' + d.loc[1] + '&lng=' + d.loc[0] + '&z=17')
50511 .text(t('streetside.report'));
50514 var bubbleIdQuadKey = d.key.toString(4);
50515 var paddingNeeded = 16 - bubbleIdQuadKey.length;
50516 for (var i = 0; i < paddingNeeded; i++) {
50517 bubbleIdQuadKey = '0' + bubbleIdQuadKey;
50519 var imgUrlPrefix = streetsideImagesApi + 'hs' + bubbleIdQuadKey;
50520 var imgUrlSuffix = '.jpg?g=6338&n=z';
50522 // Cubemap face code order matters here: front=01, right=02, back=03, left=10, up=11, down=12
50523 var faceKeys = ['01','02','03','10','11','12'];
50525 // Map images to cube faces
50526 var quadKeys = getQuadKeys();
50527 var faces = faceKeys.map(function(faceKey) {
50528 return quadKeys.map(function(quadKey) {
50529 var xy = qkToXY(quadKey);
50532 url: imgUrlPrefix + faceKey + quadKey + imgUrlSuffix,
50539 processFaces(faces).then(function() {
50541 showFullscreenCtrl: false,
50559 response.resolve({status: 'ok'});
50562 return response.promise;
50566 getSequenceKeyForBubble: function(d) {
50567 return d && d.sequenceKey;
50571 // Updates the currently highlighted sequence and selected bubble.
50572 // Reset is only necessary when interacting with the viewport because
50573 // this implicitly changes the currently selected bubble/sequence
50574 setStyles: function (hovered, reset) {
50575 if (reset) { // reset all layers
50576 d3_selectAll('.viewfield-group')
50577 .classed('highlighted', false)
50578 .classed('hovered', false)
50579 .classed('currentView', false);
50581 d3_selectAll('.sequence')
50582 .classed('highlighted', false)
50583 .classed('currentView', false);
50586 var hoveredBubbleKey = hovered && hovered.key;
50587 var hoveredSequenceKey = this.getSequenceKeyForBubble(hovered);
50588 var hoveredSequence = hoveredSequenceKey && _ssCache.sequences[hoveredSequenceKey];
50589 var hoveredBubbleKeys = (hoveredSequence && hoveredSequence.bubbles.map(function (d) { return d.key; })) || [];
50591 var viewer = d3_select('#photoviewer');
50592 var selected = viewer.empty() ? undefined : viewer.datum();
50593 var selectedBubbleKey = selected && selected.key;
50594 var selectedSequenceKey = this.getSequenceKeyForBubble(selected);
50595 var selectedSequence = selectedSequenceKey && _ssCache.sequences[selectedSequenceKey];
50596 var selectedBubbleKeys = (selectedSequence && selectedSequence.bubbles.map(function (d) { return d.key; })) || [];
50598 // highlight sibling viewfields on either the selected or the hovered sequences
50599 var highlightedBubbleKeys = utilArrayUnion(hoveredBubbleKeys, selectedBubbleKeys);
50601 d3_selectAll('.layer-streetside-images .viewfield-group')
50602 .classed('highlighted', function (d) { return highlightedBubbleKeys.indexOf(d.key) !== -1; })
50603 .classed('hovered', function (d) { return d.key === hoveredBubbleKey; })
50604 .classed('currentView', function (d) { return d.key === selectedBubbleKey; });
50606 d3_selectAll('.layer-streetside-images .sequence')
50607 .classed('highlighted', function (d) { return d.properties.key === hoveredSequenceKey; })
50608 .classed('currentView', function (d) { return d.properties.key === selectedSequenceKey; });
50610 // update viewfields if needed
50611 d3_selectAll('.viewfield-group .viewfield')
50612 .attr('d', viewfieldPath);
50614 function viewfieldPath() {
50615 var d = this.parentNode.__data__;
50616 if (d.pano && d.key !== selectedBubbleKey) {
50617 return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
50619 return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
50629 cache: function () {
50634 var apibase$4 = 'https://taginfo.openstreetmap.org/api/4/';
50635 var _inflight$2 = {};
50636 var _popularKeys = {};
50637 var _taginfoCache = {};
50640 point: 'count_nodes',
50641 vertex: 'count_nodes',
50642 area: 'count_ways',
50645 var tag_sort_members = {
50646 point: 'count_node_members',
50647 vertex: 'count_node_members',
50648 area: 'count_way_members',
50649 line: 'count_way_members',
50650 relation: 'count_relation_members'
50652 var tag_filters = {
50658 var tag_members_fractions = {
50659 point: 'count_node_members_fraction',
50660 vertex: 'count_node_members_fraction',
50661 area: 'count_way_members_fraction',
50662 line: 'count_way_members_fraction',
50663 relation: 'count_relation_members_fraction'
50667 function sets(params, n, o) {
50668 if (params.geometry && o[params.geometry]) {
50669 params[n] = o[params.geometry];
50675 function setFilter(params) {
50676 return sets(params, 'filter', tag_filters);
50680 function setSort(params) {
50681 return sets(params, 'sortname', tag_sorts);
50685 function setSortMembers(params) {
50686 return sets(params, 'sortname', tag_sort_members);
50690 function clean(params) {
50691 return utilObjectOmit(params, ['geometry', 'debounce']);
50695 function filterKeys(type) {
50696 var count_type = type ? 'count_' + type : 'count_all';
50697 return function(d) {
50698 return parseFloat(d[count_type]) > 2500 || d.in_wiki;
50703 function filterMultikeys(prefix) {
50704 return function(d) {
50705 // d.key begins with prefix, and d.key contains no additional ':'s
50706 var re = new RegExp('^' + prefix + '(.*)$');
50707 var matches = d.key.match(re) || [];
50708 return (matches.length === 2 && matches[1].indexOf(':') === -1);
50713 function filterValues(allowUpperCase) {
50714 return function(d) {
50715 if (d.value.match(/[;,]/) !== null) return false; // exclude some punctuation
50716 if (!allowUpperCase && d.value.match(/[A-Z*]/) !== null) return false; // exclude uppercase letters
50717 return parseFloat(d.fraction) > 0.0;
50722 function filterRoles(geometry) {
50723 return function(d) {
50724 if (d.role === '') return false; // exclude empty role
50725 if (d.role.match(/[A-Z*;,]/) !== null) return false; // exclude uppercase letters and some punctuation
50726 return parseFloat(d[tag_members_fractions[geometry]]) > 0.0;
50731 function valKey(d) {
50739 function valKeyDescription(d) {
50742 title: d.description || d.value
50747 function roleKey(d) {
50755 // sort keys with ':' lower than keys without ':'
50756 function sortKeys(a, b) {
50757 return (a.key.indexOf(':') === -1 && b.key.indexOf(':') !== -1) ? -1
50758 : (a.key.indexOf(':') !== -1 && b.key.indexOf(':') === -1) ? 1
50763 var debouncedRequest$1 = debounce(request$1, 300, { leading: false });
50765 function request$1(url, params, exactMatch, callback, loaded) {
50766 if (_inflight$2[url]) return;
50768 if (checkCache(url, params, exactMatch, callback)) return;
50770 var controller = new AbortController();
50771 _inflight$2[url] = controller;
50773 d3_json(url, { signal: controller.signal })
50774 .then(function(result) {
50775 delete _inflight$2[url];
50776 if (loaded) loaded(null, result);
50778 .catch(function(err) {
50779 delete _inflight$2[url];
50780 if (err.name === 'AbortError') return;
50781 if (loaded) loaded(err.message);
50786 function checkCache(url, params, exactMatch, callback) {
50787 var rp = params.rp || 25;
50788 var testQuery = params.query || '';
50792 var hit = _taginfoCache[testUrl];
50794 // exact match, or shorter match yielding fewer than max results (rp)
50795 if (hit && (url === testUrl || hit.length < rp)) {
50796 callback(null, hit);
50800 // don't try to shorten the query
50801 if (exactMatch || !testQuery.length) return false;
50803 // do shorten the query to see if we already have a cached result
50804 // that has returned fewer than max results (rp)
50805 testQuery = testQuery.slice(0, -1);
50806 testUrl = url.replace(/&query=(.*?)&/, '&query=' + testQuery + '&');
50807 } while (testQuery.length >= 0);
50813 var serviceTaginfo = {
50817 _taginfoCache = {};
50819 postal_code: true // #5377
50822 // Fetch popular keys. We'll exclude these from `values`
50823 // lookups because they stress taginfo, and they aren't likely
50824 // to yield meaningful autocomplete results.. see #3955
50827 sortname: 'values_all',
50831 lang: currentLocale
50833 this.keys(params, function(err, data) {
50835 data.forEach(function(d) {
50836 if (d.value === 'opening_hours') return; // exception
50837 _popularKeys[d.value] = true;
50843 reset: function() {
50844 Object.values(_inflight$2).forEach(function(controller) { controller.abort(); });
50849 keys: function(params, callback) {
50850 var doRequest = params.debounce ? debouncedRequest$1 : request$1;
50851 params = clean(setSort(params));
50852 params = Object.assign({
50854 sortname: 'count_all',
50857 lang: currentLocale
50860 var url = apibase$4 + 'keys/all?' + utilQsString(params);
50861 doRequest(url, params, false, callback, function(err, d) {
50865 var f = filterKeys(params.filter);
50866 var result = d.data.filter(f).sort(sortKeys).map(valKey);
50867 _taginfoCache[url] = result;
50868 callback(null, result);
50874 multikeys: function(params, callback) {
50875 var doRequest = params.debounce ? debouncedRequest$1 : request$1;
50876 params = clean(setSort(params));
50877 params = Object.assign({
50879 sortname: 'count_all',
50882 lang: currentLocale
50885 var prefix = params.query;
50886 var url = apibase$4 + 'keys/all?' + utilQsString(params);
50887 doRequest(url, params, true, callback, function(err, d) {
50891 var f = filterMultikeys(prefix);
50892 var result = d.data.filter(f).map(valKey);
50893 _taginfoCache[url] = result;
50894 callback(null, result);
50900 values: function(params, callback) {
50901 // Exclude popular keys from values lookups.. see #3955
50902 var key = params.key;
50903 if (key && _popularKeys[key]) {
50904 callback(null, []);
50908 var doRequest = params.debounce ? debouncedRequest$1 : request$1;
50909 params = clean(setSort(setFilter(params)));
50910 params = Object.assign({
50912 sortname: 'count_all',
50915 lang: currentLocale
50918 var url = apibase$4 + 'key/values?' + utilQsString(params);
50919 doRequest(url, params, false, callback, function(err, d) {
50923 // In most cases we prefer taginfo value results with lowercase letters.
50924 // A few OSM keys expect values to contain uppercase values (see #3377).
50925 // This is not an exhaustive list (e.g. `name` also has uppercase values)
50926 // but these are the fields where taginfo value lookup is most useful.
50927 var re = /network|taxon|genus|species|brand|grape_variety|royal_cypher|listed_status|booth|rating|stars|:output|_hours|_times|_ref|manufacturer/;
50928 var allowUpperCase = re.test(params.key);
50929 var f = filterValues(allowUpperCase);
50931 var result = d.data.filter(f).map(valKeyDescription);
50932 _taginfoCache[url] = result;
50933 callback(null, result);
50939 roles: function(params, callback) {
50940 var doRequest = params.debounce ? debouncedRequest$1 : request$1;
50941 var geometry = params.geometry;
50942 params = clean(setSortMembers(params));
50943 params = Object.assign({
50945 sortname: 'count_all_members',
50948 lang: currentLocale
50951 var url = apibase$4 + 'relation/roles?' + utilQsString(params);
50952 doRequest(url, params, true, callback, function(err, d) {
50956 var f = filterRoles(geometry);
50957 var result = d.data.filter(f).map(roleKey);
50958 _taginfoCache[url] = result;
50959 callback(null, result);
50965 docs: function(params, callback) {
50966 var doRequest = params.debounce ? debouncedRequest$1 : request$1;
50967 params = clean(setSort(params));
50969 var path = 'key/wiki_pages?';
50970 if (params.value) {
50971 path = 'tag/wiki_pages?';
50972 } else if (params.rtype) {
50973 path = 'relation/wiki_pages?';
50976 var url = apibase$4 + path + utilQsString(params);
50977 doRequest(url, params, true, callback, function(err, d) {
50981 _taginfoCache[url] = d.data;
50982 callback(null, d.data);
50988 apibase: function(_) {
50989 if (!arguments.length) return apibase$4;
50996 var helpers = createCommonjsModule(function (module, exports) {
50997 Object.defineProperty(exports, "__esModule", { value: true });
51002 * Earth Radius used with the Harvesine formula and approximates using a spherical (non-ellipsoid) Earth.
51004 * @memberof helpers
51007 exports.earthRadius = 6371008.8;
51009 * Unit of measurement factors using a spherical (non-ellipsoid) earth radius.
51011 * @memberof helpers
51014 exports.factors = {
51015 centimeters: exports.earthRadius * 100,
51016 centimetres: exports.earthRadius * 100,
51017 degrees: exports.earthRadius / 111325,
51018 feet: exports.earthRadius * 3.28084,
51019 inches: exports.earthRadius * 39.370,
51020 kilometers: exports.earthRadius / 1000,
51021 kilometres: exports.earthRadius / 1000,
51022 meters: exports.earthRadius,
51023 metres: exports.earthRadius,
51024 miles: exports.earthRadius / 1609.344,
51025 millimeters: exports.earthRadius * 1000,
51026 millimetres: exports.earthRadius * 1000,
51027 nauticalmiles: exports.earthRadius / 1852,
51029 yards: exports.earthRadius / 1.0936,
51032 * Units of measurement factors based on 1 meter.
51034 * @memberof helpers
51037 exports.unitsFactors = {
51040 degrees: 1 / 111325,
51043 kilometers: 1 / 1000,
51044 kilometres: 1 / 1000,
51047 miles: 1 / 1609.344,
51050 nauticalmiles: 1 / 1852,
51051 radians: 1 / exports.earthRadius,
51055 * Area of measurement factors based on 1 square meter.
51057 * @memberof helpers
51060 exports.areaFactors = {
51061 acres: 0.000247105,
51062 centimeters: 10000,
51063 centimetres: 10000,
51064 feet: 10.763910417,
51065 inches: 1550.003100006,
51066 kilometers: 0.000001,
51067 kilometres: 0.000001,
51071 millimeters: 1000000,
51072 millimetres: 1000000,
51073 yards: 1.195990046,
51076 * Wraps a GeoJSON {@link Geometry} in a GeoJSON {@link Feature}.
51079 * @param {Geometry} geometry input geometry
51080 * @param {Object} [properties={}] an Object of key-value pairs to add as properties
51081 * @param {Object} [options={}] Optional Parameters
51082 * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
51083 * @param {string|number} [options.id] Identifier associated with the Feature
51084 * @returns {Feature} a GeoJSON Feature
51088 * "coordinates": [110, 50]
51091 * var feature = turf.feature(geometry);
51095 function feature(geom, properties, options) {
51096 if (options === void 0) { options = {}; }
51097 var feat = { type: "Feature" };
51098 if (options.id === 0 || options.id) {
51099 feat.id = options.id;
51101 if (options.bbox) {
51102 feat.bbox = options.bbox;
51104 feat.properties = properties || {};
51105 feat.geometry = geom;
51108 exports.feature = feature;
51110 * Creates a GeoJSON {@link Geometry} from a Geometry string type & coordinates.
51111 * For GeometryCollection type use `helpers.geometryCollection`
51114 * @param {string} type Geometry Type
51115 * @param {Array<any>} coordinates Coordinates
51116 * @param {Object} [options={}] Optional Parameters
51117 * @returns {Geometry} a GeoJSON Geometry
51119 * var type = "Point";
51120 * var coordinates = [110, 50];
51121 * var geometry = turf.geometry(type, coordinates);
51124 function geometry(type, coordinates, options) {
51125 if (options === void 0) { options = {}; }
51127 case "Point": return point(coordinates).geometry;
51128 case "LineString": return lineString(coordinates).geometry;
51129 case "Polygon": return polygon(coordinates).geometry;
51130 case "MultiPoint": return multiPoint(coordinates).geometry;
51131 case "MultiLineString": return multiLineString(coordinates).geometry;
51132 case "MultiPolygon": return multiPolygon(coordinates).geometry;
51133 default: throw new Error(type + " is invalid");
51136 exports.geometry = geometry;
51138 * Creates a {@link Point} {@link Feature} from a Position.
51141 * @param {Array<number>} coordinates longitude, latitude position (each in decimal degrees)
51142 * @param {Object} [properties={}] an Object of key-value pairs to add as properties
51143 * @param {Object} [options={}] Optional Parameters
51144 * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
51145 * @param {string|number} [options.id] Identifier associated with the Feature
51146 * @returns {Feature<Point>} a Point feature
51148 * var point = turf.point([-75.343, 39.984]);
51152 function point(coordinates, properties, options) {
51153 if (options === void 0) { options = {}; }
51156 coordinates: coordinates,
51158 return feature(geom, properties, options);
51160 exports.point = point;
51162 * Creates a {@link Point} {@link FeatureCollection} from an Array of Point coordinates.
51165 * @param {Array<Array<number>>} coordinates an array of Points
51166 * @param {Object} [properties={}] Translate these properties to each Feature
51167 * @param {Object} [options={}] Optional Parameters
51168 * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north]
51169 * associated with the FeatureCollection
51170 * @param {string|number} [options.id] Identifier associated with the FeatureCollection
51171 * @returns {FeatureCollection<Point>} Point Feature
51173 * var points = turf.points([
51181 function points(coordinates, properties, options) {
51182 if (options === void 0) { options = {}; }
51183 return featureCollection(coordinates.map(function (coords) {
51184 return point(coords, properties);
51187 exports.points = points;
51189 * Creates a {@link Polygon} {@link Feature} from an Array of LinearRings.
51192 * @param {Array<Array<Array<number>>>} coordinates an array of LinearRings
51193 * @param {Object} [properties={}] an Object of key-value pairs to add as properties
51194 * @param {Object} [options={}] Optional Parameters
51195 * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
51196 * @param {string|number} [options.id] Identifier associated with the Feature
51197 * @returns {Feature<Polygon>} Polygon Feature
51199 * var polygon = turf.polygon([[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]], { name: 'poly1' });
51203 function polygon(coordinates, properties, options) {
51204 if (options === void 0) { options = {}; }
51205 for (var _i = 0, coordinates_1 = coordinates; _i < coordinates_1.length; _i++) {
51206 var ring = coordinates_1[_i];
51207 if (ring.length < 4) {
51208 throw new Error("Each LinearRing of a Polygon must have 4 or more Positions.");
51210 for (var j = 0; j < ring[ring.length - 1].length; j++) {
51211 // Check if first point of Polygon contains two numbers
51212 if (ring[ring.length - 1][j] !== ring[0][j]) {
51213 throw new Error("First and last Position are not equivalent.");
51219 coordinates: coordinates,
51221 return feature(geom, properties, options);
51223 exports.polygon = polygon;
51225 * Creates a {@link Polygon} {@link FeatureCollection} from an Array of Polygon coordinates.
51228 * @param {Array<Array<Array<Array<number>>>>} coordinates an array of Polygon coordinates
51229 * @param {Object} [properties={}] an Object of key-value pairs to add as properties
51230 * @param {Object} [options={}] Optional Parameters
51231 * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
51232 * @param {string|number} [options.id] Identifier associated with the FeatureCollection
51233 * @returns {FeatureCollection<Polygon>} Polygon FeatureCollection
51235 * var polygons = turf.polygons([
51236 * [[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]],
51237 * [[[-15, 42], [-14, 46], [-12, 41], [-17, 44], [-15, 42]]],
51242 function polygons(coordinates, properties, options) {
51243 if (options === void 0) { options = {}; }
51244 return featureCollection(coordinates.map(function (coords) {
51245 return polygon(coords, properties);
51248 exports.polygons = polygons;
51250 * Creates a {@link LineString} {@link Feature} from an Array of Positions.
51253 * @param {Array<Array<number>>} coordinates an array of Positions
51254 * @param {Object} [properties={}] an Object of key-value pairs to add as properties
51255 * @param {Object} [options={}] Optional Parameters
51256 * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
51257 * @param {string|number} [options.id] Identifier associated with the Feature
51258 * @returns {Feature<LineString>} LineString Feature
51260 * var linestring1 = turf.lineString([[-24, 63], [-23, 60], [-25, 65], [-20, 69]], {name: 'line 1'});
51261 * var linestring2 = turf.lineString([[-14, 43], [-13, 40], [-15, 45], [-10, 49]], {name: 'line 2'});
51266 function lineString(coordinates, properties, options) {
51267 if (options === void 0) { options = {}; }
51268 if (coordinates.length < 2) {
51269 throw new Error("coordinates must be an array of two or more positions");
51272 type: "LineString",
51273 coordinates: coordinates,
51275 return feature(geom, properties, options);
51277 exports.lineString = lineString;
51279 * Creates a {@link LineString} {@link FeatureCollection} from an Array of LineString coordinates.
51281 * @name lineStrings
51282 * @param {Array<Array<Array<number>>>} coordinates an array of LinearRings
51283 * @param {Object} [properties={}] an Object of key-value pairs to add as properties
51284 * @param {Object} [options={}] Optional Parameters
51285 * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north]
51286 * associated with the FeatureCollection
51287 * @param {string|number} [options.id] Identifier associated with the FeatureCollection
51288 * @returns {FeatureCollection<LineString>} LineString FeatureCollection
51290 * var linestrings = turf.lineStrings([
51291 * [[-24, 63], [-23, 60], [-25, 65], [-20, 69]],
51292 * [[-14, 43], [-13, 40], [-15, 45], [-10, 49]]
51297 function lineStrings(coordinates, properties, options) {
51298 if (options === void 0) { options = {}; }
51299 return featureCollection(coordinates.map(function (coords) {
51300 return lineString(coords, properties);
51303 exports.lineStrings = lineStrings;
51305 * Takes one or more {@link Feature|Features} and creates a {@link FeatureCollection}.
51307 * @name featureCollection
51308 * @param {Feature[]} features input features
51309 * @param {Object} [options={}] Optional Parameters
51310 * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
51311 * @param {string|number} [options.id] Identifier associated with the Feature
51312 * @returns {FeatureCollection} FeatureCollection of Features
51314 * var locationA = turf.point([-75.343, 39.984], {name: 'Location A'});
51315 * var locationB = turf.point([-75.833, 39.284], {name: 'Location B'});
51316 * var locationC = turf.point([-75.534, 39.123], {name: 'Location C'});
51318 * var collection = turf.featureCollection([
51326 function featureCollection(features, options) {
51327 if (options === void 0) { options = {}; }
51328 var fc = { type: "FeatureCollection" };
51330 fc.id = options.id;
51332 if (options.bbox) {
51333 fc.bbox = options.bbox;
51335 fc.features = features;
51338 exports.featureCollection = featureCollection;
51340 * Creates a {@link Feature<MultiLineString>} based on a
51341 * coordinate array. Properties can be added optionally.
51343 * @name multiLineString
51344 * @param {Array<Array<Array<number>>>} coordinates an array of LineStrings
51345 * @param {Object} [properties={}] an Object of key-value pairs to add as properties
51346 * @param {Object} [options={}] Optional Parameters
51347 * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
51348 * @param {string|number} [options.id] Identifier associated with the Feature
51349 * @returns {Feature<MultiLineString>} a MultiLineString feature
51350 * @throws {Error} if no coordinates are passed
51352 * var multiLine = turf.multiLineString([[[0,0],[10,10]]]);
51356 function multiLineString(coordinates, properties, options) {
51357 if (options === void 0) { options = {}; }
51359 type: "MultiLineString",
51360 coordinates: coordinates,
51362 return feature(geom, properties, options);
51364 exports.multiLineString = multiLineString;
51366 * Creates a {@link Feature<MultiPoint>} based on a
51367 * coordinate array. Properties can be added optionally.
51370 * @param {Array<Array<number>>} coordinates an array of Positions
51371 * @param {Object} [properties={}] an Object of key-value pairs to add as properties
51372 * @param {Object} [options={}] Optional Parameters
51373 * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
51374 * @param {string|number} [options.id] Identifier associated with the Feature
51375 * @returns {Feature<MultiPoint>} a MultiPoint feature
51376 * @throws {Error} if no coordinates are passed
51378 * var multiPt = turf.multiPoint([[0,0],[10,10]]);
51382 function multiPoint(coordinates, properties, options) {
51383 if (options === void 0) { options = {}; }
51385 type: "MultiPoint",
51386 coordinates: coordinates,
51388 return feature(geom, properties, options);
51390 exports.multiPoint = multiPoint;
51392 * Creates a {@link Feature<MultiPolygon>} based on a
51393 * coordinate array. Properties can be added optionally.
51395 * @name multiPolygon
51396 * @param {Array<Array<Array<Array<number>>>>} coordinates an array of Polygons
51397 * @param {Object} [properties={}] an Object of key-value pairs to add as properties
51398 * @param {Object} [options={}] Optional Parameters
51399 * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
51400 * @param {string|number} [options.id] Identifier associated with the Feature
51401 * @returns {Feature<MultiPolygon>} a multipolygon feature
51402 * @throws {Error} if no coordinates are passed
51404 * var multiPoly = turf.multiPolygon([[[[0,0],[0,10],[10,10],[10,0],[0,0]]]]);
51409 function multiPolygon(coordinates, properties, options) {
51410 if (options === void 0) { options = {}; }
51412 type: "MultiPolygon",
51413 coordinates: coordinates,
51415 return feature(geom, properties, options);
51417 exports.multiPolygon = multiPolygon;
51419 * Creates a {@link Feature<GeometryCollection>} based on a
51420 * coordinate array. Properties can be added optionally.
51422 * @name geometryCollection
51423 * @param {Array<Geometry>} geometries an array of GeoJSON Geometries
51424 * @param {Object} [properties={}] an Object of key-value pairs to add as properties
51425 * @param {Object} [options={}] Optional Parameters
51426 * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
51427 * @param {string|number} [options.id] Identifier associated with the Feature
51428 * @returns {Feature<GeometryCollection>} a GeoJSON GeometryCollection Feature
51430 * var pt = turf.geometry("Point", [100, 0]);
51431 * var line = turf.geometry("LineString", [[101, 0], [102, 1]]);
51432 * var collection = turf.geometryCollection([pt, line]);
51436 function geometryCollection(geometries, properties, options) {
51437 if (options === void 0) { options = {}; }
51439 type: "GeometryCollection",
51440 geometries: geometries,
51442 return feature(geom, properties, options);
51444 exports.geometryCollection = geometryCollection;
51446 * Round number to precision
51448 * @param {number} num Number
51449 * @param {number} [precision=0] Precision
51450 * @returns {number} rounded number
51452 * turf.round(120.4321)
51455 * turf.round(120.4321, 2)
51458 function round(num, precision) {
51459 if (precision === void 0) { precision = 0; }
51460 if (precision && !(precision >= 0)) {
51461 throw new Error("precision must be a positive number");
51463 var multiplier = Math.pow(10, precision || 0);
51464 return Math.round(num * multiplier) / multiplier;
51466 exports.round = round;
51468 * Convert a distance measurement (assuming a spherical Earth) from radians to a more friendly unit.
51469 * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet
51471 * @name radiansToLength
51472 * @param {number} radians in radians across the sphere
51473 * @param {string} [units="kilometers"] can be degrees, radians, miles, or kilometers inches, yards, metres,
51474 * meters, kilometres, kilometers.
51475 * @returns {number} distance
51477 function radiansToLength(radians, units) {
51478 if (units === void 0) { units = "kilometers"; }
51479 var factor = exports.factors[units];
51481 throw new Error(units + " units is invalid");
51483 return radians * factor;
51485 exports.radiansToLength = radiansToLength;
51487 * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into radians
51488 * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet
51490 * @name lengthToRadians
51491 * @param {number} distance in real units
51492 * @param {string} [units="kilometers"] can be degrees, radians, miles, or kilometers inches, yards, metres,
51493 * meters, kilometres, kilometers.
51494 * @returns {number} radians
51496 function lengthToRadians(distance, units) {
51497 if (units === void 0) { units = "kilometers"; }
51498 var factor = exports.factors[units];
51500 throw new Error(units + " units is invalid");
51502 return distance / factor;
51504 exports.lengthToRadians = lengthToRadians;
51506 * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into degrees
51507 * Valid units: miles, nauticalmiles, inches, yards, meters, metres, centimeters, kilometres, feet
51509 * @name lengthToDegrees
51510 * @param {number} distance in real units
51511 * @param {string} [units="kilometers"] can be degrees, radians, miles, or kilometers inches, yards, metres,
51512 * meters, kilometres, kilometers.
51513 * @returns {number} degrees
51515 function lengthToDegrees(distance, units) {
51516 return radiansToDegrees(lengthToRadians(distance, units));
51518 exports.lengthToDegrees = lengthToDegrees;
51520 * Converts any bearing angle from the north line direction (positive clockwise)
51521 * and returns an angle between 0-360 degrees (positive clockwise), 0 being the north line
51523 * @name bearingToAzimuth
51524 * @param {number} bearing angle, between -180 and +180 degrees
51525 * @returns {number} angle between 0 and 360 degrees
51527 function bearingToAzimuth(bearing) {
51528 var angle = bearing % 360;
51534 exports.bearingToAzimuth = bearingToAzimuth;
51536 * Converts an angle in radians to degrees
51538 * @name radiansToDegrees
51539 * @param {number} radians angle in radians
51540 * @returns {number} degrees between 0 and 360 degrees
51542 function radiansToDegrees(radians) {
51543 var degrees = radians % (2 * Math.PI);
51544 return degrees * 180 / Math.PI;
51546 exports.radiansToDegrees = radiansToDegrees;
51548 * Converts an angle in degrees to radians
51550 * @name degreesToRadians
51551 * @param {number} degrees angle between 0 and 360 degrees
51552 * @returns {number} angle in radians
51554 function degreesToRadians(degrees) {
51555 var radians = degrees % 360;
51556 return radians * Math.PI / 180;
51558 exports.degreesToRadians = degreesToRadians;
51560 * Converts a length to the requested unit.
51561 * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet
51563 * @param {number} length to be converted
51564 * @param {Units} [originalUnit="kilometers"] of the length
51565 * @param {Units} [finalUnit="kilometers"] returned unit
51566 * @returns {number} the converted length
51568 function convertLength(length, originalUnit, finalUnit) {
51569 if (originalUnit === void 0) { originalUnit = "kilometers"; }
51570 if (finalUnit === void 0) { finalUnit = "kilometers"; }
51571 if (!(length >= 0)) {
51572 throw new Error("length must be a positive number");
51574 return radiansToLength(lengthToRadians(length, originalUnit), finalUnit);
51576 exports.convertLength = convertLength;
51578 * Converts a area to the requested unit.
51579 * Valid units: kilometers, kilometres, meters, metres, centimetres, millimeters, acres, miles, yards, feet, inches
51580 * @param {number} area to be converted
51581 * @param {Units} [originalUnit="meters"] of the distance
51582 * @param {Units} [finalUnit="kilometers"] returned unit
51583 * @returns {number} the converted distance
51585 function convertArea(area, originalUnit, finalUnit) {
51586 if (originalUnit === void 0) { originalUnit = "meters"; }
51587 if (finalUnit === void 0) { finalUnit = "kilometers"; }
51588 if (!(area >= 0)) {
51589 throw new Error("area must be a positive number");
51591 var startFactor = exports.areaFactors[originalUnit];
51592 if (!startFactor) {
51593 throw new Error("invalid original units");
51595 var finalFactor = exports.areaFactors[finalUnit];
51596 if (!finalFactor) {
51597 throw new Error("invalid final units");
51599 return (area / startFactor) * finalFactor;
51601 exports.convertArea = convertArea;
51605 * @param {*} num Number to validate
51606 * @returns {boolean} true/false
51608 * turf.isNumber(123)
51610 * turf.isNumber('foo')
51613 function isNumber(num) {
51614 return !isNaN(num) && num !== null && !Array.isArray(num) && !/^\s*$/.test(num);
51616 exports.isNumber = isNumber;
51620 * @param {*} input variable to validate
51621 * @returns {boolean} true/false
51623 * turf.isObject({elevation: 10})
51625 * turf.isObject('foo')
51628 function isObject(input) {
51629 return (!!input) && (input.constructor === Object);
51631 exports.isObject = isObject;
51636 * @param {Array<number>} bbox BBox to validate
51638 * @throws Error if BBox is not valid
51640 * validateBBox([-180, -40, 110, 50])
51642 * validateBBox([-180, -40])
51644 * validateBBox('Foo')
51648 * validateBBox(null)
51650 * validateBBox(undefined)
51653 function validateBBox(bbox) {
51655 throw new Error("bbox is required");
51657 if (!Array.isArray(bbox)) {
51658 throw new Error("bbox must be an Array");
51660 if (bbox.length !== 4 && bbox.length !== 6) {
51661 throw new Error("bbox must be an Array of 4 or 6 numbers");
51663 bbox.forEach(function (num) {
51664 if (!isNumber(num)) {
51665 throw new Error("bbox must only contain numbers");
51669 exports.validateBBox = validateBBox;
51674 * @param {string|number} id Id to validate
51676 * @throws Error if Id is not valid
51678 * validateId([-180, -40, 110, 50])
51680 * validateId([-180, -40])
51682 * validateId('Foo')
51688 * validateId(undefined)
51691 function validateId(id) {
51693 throw new Error("id is required");
51695 if (["string", "number"].indexOf(typeof id) === -1) {
51696 throw new Error("id must be a number or a string");
51699 exports.validateId = validateId;
51700 // Deprecated methods
51701 function radians2degrees() {
51702 throw new Error("method has been renamed to `radiansToDegrees`");
51704 exports.radians2degrees = radians2degrees;
51705 function degrees2radians() {
51706 throw new Error("method has been renamed to `degreesToRadians`");
51708 exports.degrees2radians = degrees2radians;
51709 function distanceToDegrees() {
51710 throw new Error("method has been renamed to `lengthToDegrees`");
51712 exports.distanceToDegrees = distanceToDegrees;
51713 function distanceToRadians() {
51714 throw new Error("method has been renamed to `lengthToRadians`");
51716 exports.distanceToRadians = distanceToRadians;
51717 function radiansToDistance() {
51718 throw new Error("method has been renamed to `radiansToLength`");
51720 exports.radiansToDistance = radiansToDistance;
51721 function bearingToAngle() {
51722 throw new Error("method has been renamed to `bearingToAzimuth`");
51724 exports.bearingToAngle = bearingToAngle;
51725 function convertDistance() {
51726 throw new Error("method has been renamed to `convertLength`");
51728 exports.convertDistance = convertDistance;
51731 unwrapExports(helpers);
51732 var helpers_1 = helpers.earthRadius;
51733 var helpers_2 = helpers.factors;
51734 var helpers_3 = helpers.unitsFactors;
51735 var helpers_4 = helpers.areaFactors;
51736 var helpers_5 = helpers.feature;
51737 var helpers_6 = helpers.geometry;
51738 var helpers_7 = helpers.point;
51739 var helpers_8 = helpers.points;
51740 var helpers_9 = helpers.polygon;
51741 var helpers_10 = helpers.polygons;
51742 var helpers_11 = helpers.lineString;
51743 var helpers_12 = helpers.lineStrings;
51744 var helpers_13 = helpers.featureCollection;
51745 var helpers_14 = helpers.multiLineString;
51746 var helpers_15 = helpers.multiPoint;
51747 var helpers_16 = helpers.multiPolygon;
51748 var helpers_17 = helpers.geometryCollection;
51749 var helpers_18 = helpers.round;
51750 var helpers_19 = helpers.radiansToLength;
51751 var helpers_20 = helpers.lengthToRadians;
51752 var helpers_21 = helpers.lengthToDegrees;
51753 var helpers_22 = helpers.bearingToAzimuth;
51754 var helpers_23 = helpers.radiansToDegrees;
51755 var helpers_24 = helpers.degreesToRadians;
51756 var helpers_25 = helpers.convertLength;
51757 var helpers_26 = helpers.convertArea;
51758 var helpers_27 = helpers.isNumber;
51759 var helpers_28 = helpers.isObject;
51760 var helpers_29 = helpers.validateBBox;
51761 var helpers_30 = helpers.validateId;
51762 var helpers_31 = helpers.radians2degrees;
51763 var helpers_32 = helpers.degrees2radians;
51764 var helpers_33 = helpers.distanceToDegrees;
51765 var helpers_34 = helpers.distanceToRadians;
51766 var helpers_35 = helpers.radiansToDistance;
51767 var helpers_36 = helpers.bearingToAngle;
51768 var helpers_37 = helpers.convertDistance;
51770 var invariant = createCommonjsModule(function (module, exports) {
51771 Object.defineProperty(exports, "__esModule", { value: true });
51774 * Unwrap a coordinate from a Point Feature, Geometry or a single coordinate.
51777 * @param {Array<number>|Geometry<Point>|Feature<Point>} coord GeoJSON Point or an Array of numbers
51778 * @returns {Array<number>} coordinates
51780 * var pt = turf.point([10, 10]);
51782 * var coord = turf.getCoord(pt);
51785 function getCoord(coord) {
51787 throw new Error("coord is required");
51789 if (!Array.isArray(coord)) {
51790 if (coord.type === "Feature" && coord.geometry !== null && coord.geometry.type === "Point") {
51791 return coord.geometry.coordinates;
51793 if (coord.type === "Point") {
51794 return coord.coordinates;
51797 if (Array.isArray(coord) && coord.length >= 2 && !Array.isArray(coord[0]) && !Array.isArray(coord[1])) {
51800 throw new Error("coord must be GeoJSON Point or an Array of numbers");
51802 exports.getCoord = getCoord;
51804 * Unwrap coordinates from a Feature, Geometry Object or an Array
51807 * @param {Array<any>|Geometry|Feature} coords Feature, Geometry Object or an Array
51808 * @returns {Array<any>} coordinates
51810 * var poly = turf.polygon([[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]);
51812 * var coords = turf.getCoords(poly);
51813 * //= [[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]
51815 function getCoords(coords) {
51816 if (Array.isArray(coords)) {
51820 if (coords.type === "Feature") {
51821 if (coords.geometry !== null) {
51822 return coords.geometry.coordinates;
51827 if (coords.coordinates) {
51828 return coords.coordinates;
51831 throw new Error("coords must be GeoJSON Feature, Geometry Object or an Array");
51833 exports.getCoords = getCoords;
51835 * Checks if coordinates contains a number
51837 * @name containsNumber
51838 * @param {Array<any>} coordinates GeoJSON Coordinates
51839 * @returns {boolean} true if Array contains a number
51841 function containsNumber(coordinates) {
51842 if (coordinates.length > 1 && helpers.isNumber(coordinates[0]) && helpers.isNumber(coordinates[1])) {
51845 if (Array.isArray(coordinates[0]) && coordinates[0].length) {
51846 return containsNumber(coordinates[0]);
51848 throw new Error("coordinates must only contain numbers");
51850 exports.containsNumber = containsNumber;
51852 * Enforce expectations about types of GeoJSON objects for Turf.
51854 * @name geojsonType
51855 * @param {GeoJSON} value any GeoJSON object
51856 * @param {string} type expected GeoJSON type
51857 * @param {string} name name of calling function
51858 * @throws {Error} if value is not the expected type.
51860 function geojsonType(value, type, name) {
51861 if (!type || !name) {
51862 throw new Error("type and name required");
51864 if (!value || value.type !== type) {
51865 throw new Error("Invalid input to " + name + ": must be a " + type + ", given " + value.type);
51868 exports.geojsonType = geojsonType;
51870 * Enforce expectations about types of {@link Feature} inputs for Turf.
51871 * Internally this uses {@link geojsonType} to judge geometry types.
51874 * @param {Feature} feature a feature with an expected geometry type
51875 * @param {string} type expected GeoJSON type
51876 * @param {string} name name of calling function
51877 * @throws {Error} error if value is not the expected type.
51879 function featureOf(feature, type, name) {
51881 throw new Error("No feature passed");
51884 throw new Error(".featureOf() requires a name");
51886 if (!feature || feature.type !== "Feature" || !feature.geometry) {
51887 throw new Error("Invalid input to " + name + ", Feature with geometry required");
51889 if (!feature.geometry || feature.geometry.type !== type) {
51890 throw new Error("Invalid input to " + name + ": must be a " + type + ", given " + feature.geometry.type);
51893 exports.featureOf = featureOf;
51895 * Enforce expectations about types of {@link FeatureCollection} inputs for Turf.
51896 * Internally this uses {@link geojsonType} to judge geometry types.
51898 * @name collectionOf
51899 * @param {FeatureCollection} featureCollection a FeatureCollection for which features will be judged
51900 * @param {string} type expected GeoJSON type
51901 * @param {string} name name of calling function
51902 * @throws {Error} if value is not the expected type.
51904 function collectionOf(featureCollection, type, name) {
51905 if (!featureCollection) {
51906 throw new Error("No featureCollection passed");
51909 throw new Error(".collectionOf() requires a name");
51911 if (!featureCollection || featureCollection.type !== "FeatureCollection") {
51912 throw new Error("Invalid input to " + name + ", FeatureCollection required");
51914 for (var _i = 0, _a = featureCollection.features; _i < _a.length; _i++) {
51915 var feature = _a[_i];
51916 if (!feature || feature.type !== "Feature" || !feature.geometry) {
51917 throw new Error("Invalid input to " + name + ", Feature with geometry required");
51919 if (!feature.geometry || feature.geometry.type !== type) {
51920 throw new Error("Invalid input to " + name + ": must be a " + type + ", given " + feature.geometry.type);
51924 exports.collectionOf = collectionOf;
51926 * Get Geometry from Feature or Geometry Object
51928 * @param {Feature|Geometry} geojson GeoJSON Feature or Geometry Object
51929 * @returns {Geometry|null} GeoJSON Geometry Object
51930 * @throws {Error} if geojson is not a Feature or Geometry Object
51933 * "type": "Feature",
51934 * "properties": {},
51937 * "coordinates": [110, 40]
51940 * var geom = turf.getGeom(point)
51941 * //={"type": "Point", "coordinates": [110, 40]}
51943 function getGeom(geojson) {
51944 if (geojson.type === "Feature") {
51945 return geojson.geometry;
51949 exports.getGeom = getGeom;
51951 * Get GeoJSON object's type, Geometry type is prioritize.
51953 * @param {GeoJSON} geojson GeoJSON object
51954 * @param {string} [name="geojson"] name of the variable to display in error message
51955 * @returns {string} GeoJSON type
51958 * "type": "Feature",
51959 * "properties": {},
51962 * "coordinates": [110, 40]
51965 * var geom = turf.getType(point)
51968 function getType(geojson, name) {
51969 if (geojson.type === "FeatureCollection") {
51970 return "FeatureCollection";
51972 if (geojson.type === "GeometryCollection") {
51973 return "GeometryCollection";
51975 if (geojson.type === "Feature" && geojson.geometry !== null) {
51976 return geojson.geometry.type;
51978 return geojson.type;
51980 exports.getType = getType;
51983 unwrapExports(invariant);
51984 var invariant_1 = invariant.getCoord;
51985 var invariant_2 = invariant.getCoords;
51986 var invariant_3 = invariant.containsNumber;
51987 var invariant_4 = invariant.geojsonType;
51988 var invariant_5 = invariant.featureOf;
51989 var invariant_6 = invariant.collectionOf;
51990 var invariant_7 = invariant.getGeom;
51991 var invariant_8 = invariant.getType;
51993 var lineclip_1$1 = lineclip$1;
51994 var default_1$1 = lineclip$1;
51996 lineclip$1.polyline = lineclip$1;
51997 lineclip$1.polygon = polygonclip$1;
52000 // Cohen-Sutherland line clippign algorithm, adapted to efficiently
52001 // handle polylines rather than just segments
52003 function lineclip$1(points, bbox, result) {
52005 var len = points.length,
52006 codeA = bitCode$1(points[0], bbox),
52008 i, a, b, codeB, lastCode;
52010 if (!result) result = [];
52012 for (i = 1; i < len; i++) {
52015 codeB = lastCode = bitCode$1(b, bbox);
52019 if (!(codeA | codeB)) { // accept
52022 if (codeB !== lastCode) { // segment went outside
52025 if (i < len - 1) { // start a new line
52029 } else if (i === len - 1) {
52034 } else if (codeA & codeB) { // trivial reject
52037 } else if (codeA) { // a outside, intersect with clip edge
52038 a = intersect$2(a, b, codeA, bbox);
52039 codeA = bitCode$1(a, bbox);
52041 } else { // b outside
52042 b = intersect$2(a, b, codeB, bbox);
52043 codeB = bitCode$1(b, bbox);
52050 if (part.length) result.push(part);
52055 // Sutherland-Hodgeman polygon clipping algorithm
52057 function polygonclip$1(points, bbox) {
52059 var result, edge, prev, prevInside, i, p, inside;
52061 // clip against each side of the clip rectangle
52062 for (edge = 1; edge <= 8; edge *= 2) {
52064 prev = points[points.length - 1];
52065 prevInside = !(bitCode$1(prev, bbox) & edge);
52067 for (i = 0; i < points.length; i++) {
52069 inside = !(bitCode$1(p, bbox) & edge);
52071 // if segment goes through the clip window, add an intersection
52072 if (inside !== prevInside) result.push(intersect$2(prev, p, edge, bbox));
52074 if (inside) result.push(p); // add a point if it's inside
52077 prevInside = inside;
52082 if (!points.length) break;
52088 // intersect a segment against one of the 4 lines that make up the bbox
52090 function intersect$2(a, b, edge, bbox) {
52091 return edge & 8 ? [a[0] + (b[0] - a[0]) * (bbox[3] - a[1]) / (b[1] - a[1]), bbox[3]] : // top
52092 edge & 4 ? [a[0] + (b[0] - a[0]) * (bbox[1] - a[1]) / (b[1] - a[1]), bbox[1]] : // bottom
52093 edge & 2 ? [bbox[2], a[1] + (b[1] - a[1]) * (bbox[2] - a[0]) / (b[0] - a[0])] : // right
52094 edge & 1 ? [bbox[0], a[1] + (b[1] - a[1]) * (bbox[0] - a[0]) / (b[0] - a[0])] : // left
52098 // bit code reflects the point position relative to the bbox:
52101 // top 1001 1000 1010
52102 // mid 0001 0000 0010
52103 // bottom 0101 0100 0110
52105 function bitCode$1(p, bbox) {
52108 if (p[0] < bbox[0]) code |= 1; // left
52109 else if (p[0] > bbox[2]) code |= 2; // right
52111 if (p[1] < bbox[1]) code |= 4; // bottom
52112 else if (p[1] > bbox[3]) code |= 8; // top
52116 lineclip_1$1.default = default_1$1;
52118 var bboxClip_1 = createCommonjsModule(function (module, exports) {
52119 var __importStar = (commonjsGlobal && commonjsGlobal.__importStar) || function (mod) {
52120 if (mod && mod.__esModule) return mod;
52122 if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
52123 result["default"] = mod;
52126 Object.defineProperty(exports, "__esModule", { value: true });
52129 var lineclip = __importStar(lineclip_1$1);
52131 * Takes a {@link Feature} and a bbox and clips the feature to the bbox using
52132 * [lineclip](https://github.com/mapbox/lineclip).
52133 * May result in degenerate edges when clipping Polygons.
52136 * @param {Feature<LineString|MultiLineString|Polygon|MultiPolygon>} feature feature to clip to the bbox
52137 * @param {BBox} bbox extent in [minX, minY, maxX, maxY] order
52138 * @returns {Feature<LineString|MultiLineString|Polygon|MultiPolygon>} clipped Feature
52140 * var bbox = [0, 0, 10, 10];
52141 * var poly = turf.polygon([[[2, 2], [8, 4], [12, 8], [3, 7], [2, 2]]]);
52143 * var clipped = turf.bboxClip(poly, bbox);
52146 * var addToMap = [bbox, poly, clipped]
52148 function bboxClip(feature, bbox) {
52149 var geom = invariant.getGeom(feature);
52150 var type = geom.type;
52151 var properties = feature.type === "Feature" ? feature.properties : {};
52152 var coords = geom.coordinates;
52155 case "MultiLineString":
52157 if (type === "LineString") {
52160 coords.forEach(function (line) {
52161 lineclip.polyline(line, bbox, lines_1);
52163 if (lines_1.length === 1) {
52164 return helpers.lineString(lines_1[0], properties);
52166 return helpers.multiLineString(lines_1, properties);
52168 return helpers.polygon(clipPolygon(coords, bbox), properties);
52169 case "MultiPolygon":
52170 return helpers.multiPolygon(coords.map(function (poly) {
52171 return clipPolygon(poly, bbox);
52174 throw new Error("geometry " + type + " not supported");
52177 exports.default = bboxClip;
52178 function clipPolygon(rings, bbox) {
52180 for (var _i = 0, rings_1 = rings; _i < rings_1.length; _i++) {
52181 var ring = rings_1[_i];
52182 var clipped = lineclip.polygon(ring, bbox);
52183 if (clipped.length > 0) {
52184 if (clipped[0][0] !== clipped[clipped.length - 1][0] || clipped[0][1] !== clipped[clipped.length - 1][1]) {
52185 clipped.push(clipped[0]);
52187 if (clipped.length >= 4) {
52188 outRings.push(clipped);
52196 var turf_bboxClip = unwrapExports(bboxClip_1);
52198 var fastJsonStableStringify = function (data, opts) {
52199 if (!opts) opts = {};
52200 if (typeof opts === 'function') opts = { cmp: opts };
52201 var cycles = (typeof opts.cycles === 'boolean') ? opts.cycles : false;
52203 var cmp = opts.cmp && (function (f) {
52204 return function (node) {
52205 return function (a, b) {
52206 var aobj = { key: a, value: node[a] };
52207 var bobj = { key: b, value: node[b] };
52208 return f(aobj, bobj);
52214 return (function stringify (node) {
52215 if (node && node.toJSON && typeof node.toJSON === 'function') {
52216 node = node.toJSON();
52219 if (node === undefined) return;
52220 if (typeof node == 'number') return isFinite(node) ? '' + node : 'null';
52221 if (typeof node !== 'object') return JSON.stringify(node);
52224 if (Array.isArray(node)) {
52226 for (i = 0; i < node.length; i++) {
52228 out += stringify(node[i]) || 'null';
52233 if (node === null) return 'null';
52235 if (seen.indexOf(node) !== -1) {
52236 if (cycles) return JSON.stringify('__cycle__');
52237 throw new TypeError('Converting circular structure to JSON');
52240 var seenIndex = seen.push(node) - 1;
52241 var keys = Object.keys(node).sort(cmp && cmp(node));
52243 for (i = 0; i < keys.length; i++) {
52245 var value = stringify(node[key]);
52247 if (!value) continue;
52248 if (out) out += ',';
52249 out += JSON.stringify(key) + ':' + value;
52251 seen.splice(seenIndex, 1);
52252 return '{' + out + '}';
52256 var martinez_umd = createCommonjsModule(function (module, exports) {
52259 * Martinez polygon clipping algorithm, does boolean operation on polygons (multipolygons, polygons with holes etc): intersection, union, difference, xor
52261 * @author Alex Milevski <info@w8r.name>
52266 (function (global, factory) {
52268 }(commonjsGlobal, (function (exports) {
52269 function DEFAULT_COMPARE (a, b) { return a > b ? 1 : a < b ? -1 : 0; }
52271 var SplayTree = function SplayTree(compare, noDuplicates) {
52272 if ( compare === void 0 ) compare = DEFAULT_COMPARE;
52273 if ( noDuplicates === void 0 ) noDuplicates = false;
52275 this._compare = compare;
52278 this._noDuplicates = !!noDuplicates;
52281 var prototypeAccessors = { size: { configurable: true } };
52284 SplayTree.prototype.rotateLeft = function rotateLeft (x) {
52288 if (y.left) { y.left.parent = x; }
52289 y.parent = x.parent;
52292 if (!x.parent) { this._root = y; }
52293 else if (x === x.parent.left) { x.parent.left = y; }
52294 else { x.parent.right = y; }
52295 if (y) { y.left = x; }
52300 SplayTree.prototype.rotateRight = function rotateRight (x) {
52304 if (y.right) { y.right.parent = x; }
52305 y.parent = x.parent;
52308 if (!x.parent) { this._root = y; }
52309 else if(x === x.parent.left) { x.parent.left = y; }
52310 else { x.parent.right = y; }
52311 if (y) { y.right = x; }
52316 SplayTree.prototype._splay = function _splay (x) {
52322 if (p.left === x) { this$1.rotateRight(p); }
52323 else { this$1.rotateLeft(p); }
52324 } else if (p.left === x && p.parent.left === p) {
52325 this$1.rotateRight(p.parent);
52326 this$1.rotateRight(p);
52327 } else if (p.right === x && p.parent.right === p) {
52328 this$1.rotateLeft(p.parent);
52329 this$1.rotateLeft(p);
52330 } else if (p.left === x && p.parent.right === p) {
52331 this$1.rotateRight(p);
52332 this$1.rotateLeft(p);
52334 this$1.rotateLeft(p);
52335 this$1.rotateRight(p);
52341 SplayTree.prototype.splay = function splay (x) {
52344 var p, gp, ggp, l, r;
52350 if (gp && gp.parent) {
52352 if (ggp.left === gp) { ggp.left= x; }
52353 else { ggp.right = x; }
52360 l = x.left; r = x.right;
52362 if (x === p.left) { // left
52364 if (gp.left === p) {
52368 gp.left.parent = gp;
52369 } else { gp.left = null; }
52378 } else { gp.right = null; }
52387 } else { p.left = null; }
52393 if (gp.right === p) {
52397 gp.right.parent = gp;
52398 } else { gp.right = null; }
52407 } else { gp.left = null; }
52416 } else { p.right = null; }
52425 SplayTree.prototype.replace = function replace (u, v) {
52426 if (!u.parent) { this._root = v; }
52427 else if (u === u.parent.left) { u.parent.left = v; }
52428 else { u.parent.right = v; }
52429 if (v) { v.parent = u.parent; }
52433 SplayTree.prototype.minNode = function minNode (u) {
52434 if ( u === void 0 ) u = this._root;
52436 if (u) { while (u.left) { u = u.left; } }
52441 SplayTree.prototype.maxNode = function maxNode (u) {
52442 if ( u === void 0 ) u = this._root;
52444 if (u) { while (u.right) { u = u.right; } }
52449 SplayTree.prototype.insert = function insert (key, data) {
52450 var z = this._root;
52452 var comp = this._compare;
52455 if (this._noDuplicates) {
52458 cmp = comp(z.key, key);
52459 if (cmp === 0) { return; }
52460 else if (comp(z.key, key) < 0) { z = z.right; }
52461 else { z = z.left; }
52466 if (comp(z.key, key) < 0) { z = z.right; }
52467 else { z = z.left; }
52471 z = { key: key, data: data, left: null, right: null, parent: p };
52473 if (!p) { this._root = z; }
52474 else if (comp(p.key, z.key) < 0) { p.right = z; }
52475 else { p.left= z; }
52483 SplayTree.prototype.find = function find (key) {
52484 var z = this._root;
52485 var comp = this._compare;
52487 var cmp = comp(z.key, key);
52488 if (cmp < 0) { z = z.right; }
52489 else if (cmp > 0) { z = z.left; }
52496 * Whether the tree contains a node with the given key
52498 * @return {boolean} true/false
52500 SplayTree.prototype.contains = function contains (key) {
52501 var node = this._root;
52502 var comparator = this._compare;
52504 var cmp = comparator(key, node.key);
52505 if (cmp === 0) { return true; }
52506 else if (cmp < 0) { node = node.left; }
52507 else { node = node.right; }
52514 SplayTree.prototype.remove = function remove (key) {
52515 var z = this.find(key);
52517 if (!z) { return false; }
52521 if (!z.left) { this.replace(z, z.right); }
52522 else if (!z.right) { this.replace(z, z.left); }
52524 var y = this.minNode(z.right);
52525 if (y.parent !== z) {
52526 this.replace(y, y.right);
52528 y.right.parent = y;
52530 this.replace(z, y);
52540 SplayTree.prototype.removeNode = function removeNode (z) {
52541 if (!z) { return false; }
52545 if (!z.left) { this.replace(z, z.right); }
52546 else if (!z.right) { this.replace(z, z.left); }
52548 var y = this.minNode(z.right);
52549 if (y.parent !== z) {
52550 this.replace(y, y.right);
52552 y.right.parent = y;
52554 this.replace(z, y);
52564 SplayTree.prototype.erase = function erase (key) {
52565 var z = this.find(key);
52566 if (!z) { return; }
52576 sMax = this.maxNode(s);
52581 if (s) { sMax.right = t; }
52582 else { this._root = t; }
52590 * Removes and returns the node with smallest key
52593 SplayTree.prototype.pop = function pop () {
52594 var node = this._root, returnValue = null;
52596 while (node.left) { node = node.left; }
52597 returnValue = { key: node.key, data: node.data };
52598 this.remove(node.key);
52600 return returnValue;
52604 /* eslint-disable class-methods-use-this */
52608 * @param{Node} node
52611 SplayTree.prototype.next = function next (node) {
52612 var successor = node;
52614 if (successor.right) {
52615 successor = successor.right;
52616 while (successor && successor.left) { successor = successor.left; }
52618 successor = node.parent;
52619 while (successor && successor.right === node) {
52620 node = successor; successor = successor.parent;
52630 * @param{Node} node
52633 SplayTree.prototype.prev = function prev (node) {
52634 var predecessor = node;
52636 if (predecessor.left) {
52637 predecessor = predecessor.left;
52638 while (predecessor && predecessor.right) { predecessor = predecessor.right; }
52640 predecessor = node.parent;
52641 while (predecessor && predecessor.left === node) {
52642 node = predecessor;
52643 predecessor = predecessor.parent;
52647 return predecessor;
52649 /* eslint-enable class-methods-use-this */
52653 * @param{forEachCallback} callback
52654 * @return {SplayTree}
52656 SplayTree.prototype.forEach = function forEach (callback) {
52657 var current = this._root;
52658 var s = [], done = false, i = 0;
52661 // Reach the left most Node of the current Node
52663 // Place pointer to a tree node on the stack
52664 // before traversing the node's left subtree
52666 current = current.left;
52668 // BackTrack from the empty subtree and visit the Node
52669 // at the top of the stack; however, if the stack is
52670 // empty you are done
52671 if (s.length > 0) {
52673 callback(current, i++);
52675 // We have visited the node and its left
52676 // subtree. Now, it's right subtree's turn
52677 current = current.right;
52678 } else { done = true; }
52686 * Walk key range from `low` to `high`. Stops if `fn` returns a value.
52689 * @param{Function} fn
52691 * @return {SplayTree}
52693 SplayTree.prototype.range = function range (low, high, fn, ctx) {
52697 var compare = this._compare;
52698 var node = this._root, cmp;
52700 while (Q.length !== 0 || node) {
52706 cmp = compare(node.key, high);
52709 } else if (compare(node.key, low) >= 0) {
52710 if (fn.call(ctx, node)) { return this$1; } // stop if smth is returned
52719 * Returns all keys in order
52720 * @return {Array<Key>}
52722 SplayTree.prototype.keys = function keys () {
52723 var current = this._root;
52724 var s = [], r = [], done = false;
52729 current = current.left;
52731 if (s.length > 0) {
52733 r.push(current.key);
52734 current = current.right;
52735 } else { done = true; }
52743 * Returns `data` fields of all nodes in order.
52744 * @return {Array<Value>}
52746 SplayTree.prototype.values = function values () {
52747 var current = this._root;
52748 var s = [], r = [], done = false;
52753 current = current.left;
52755 if (s.length > 0) {
52757 r.push(current.data);
52758 current = current.right;
52759 } else { done = true; }
52767 * Returns node at given index
52768 * @param{number} index
52771 SplayTree.prototype.at = function at (index) {
52772 // removed after a consideration, more misleading than useful
52773 // index = index % this.size;
52774 // if (index < 0) index = this.size - index;
52776 var current = this._root;
52777 var s = [], done = false, i = 0;
52782 current = current.left;
52784 if (s.length > 0) {
52786 if (i === index) { return current; }
52788 current = current.right;
52789 } else { done = true; }
52796 * Bulk-load items. Both array have to be same size
52797 * @param{Array<Key>} keys
52798 * @param{Array<Value>}[values]
52799 * @param{Boolean} [presort=false] Pre-sort keys and values, using
52800 * tree's comparator. Sorting is done
52802 * @return {AVLTree}
52804 SplayTree.prototype.load = function load (keys, values, presort) {
52805 if ( keys === void 0 ) keys = [];
52806 if ( values === void 0 ) values = [];
52807 if ( presort === void 0 ) presort = false;
52809 if (this._size !== 0) { throw new Error('bulk-load: tree is not empty'); }
52810 var size = keys.length;
52811 if (presort) { sort(keys, values, 0, size - 1, this._compare); }
52812 this._root = loadRecursive(null, keys, values, 0, size);
52818 SplayTree.prototype.min = function min () {
52819 var node = this.minNode(this._root);
52820 if (node) { return node.key; }
52821 else { return null; }
52825 SplayTree.prototype.max = function max () {
52826 var node = this.maxNode(this._root);
52827 if (node) { return node.key; }
52828 else { return null; }
52831 SplayTree.prototype.isEmpty = function isEmpty () { return this._root === null; };
52832 prototypeAccessors.size.get = function () { return this._size; };
52836 * Create a tree and load it with items
52837 * @param{Array<Key>} keys
52838 * @param{Array<Value>?} [values]
52840 * @param{Function?} [comparator]
52841 * @param{Boolean?} [presort=false] Pre-sort keys and values, using
52842 * tree's comparator. Sorting is done
52844 * @param{Boolean?} [noDuplicates=false] Allow duplicates
52845 * @return {SplayTree}
52847 SplayTree.createTree = function createTree (keys, values, comparator, presort, noDuplicates) {
52848 return new SplayTree(comparator, noDuplicates).load(keys, values, presort);
52851 Object.defineProperties( SplayTree.prototype, prototypeAccessors );
52854 function loadRecursive (parent, keys, values, start, end) {
52855 var size = end - start;
52857 var middle = start + Math.floor(size / 2);
52858 var key = keys[middle];
52859 var data = values[middle];
52860 var node = { key: key, data: data, parent: parent };
52861 node.left = loadRecursive(node, keys, values, start, middle);
52862 node.right = loadRecursive(node, keys, values, middle + 1, end);
52869 function sort(keys, values, left, right, compare) {
52870 if (left >= right) { return; }
52872 var pivot = keys[(left + right) >> 1];
52877 do { i++; } while (compare(keys[i], pivot) < 0);
52878 do { j--; } while (compare(keys[j], pivot) > 0);
52879 if (i >= j) { break; }
52886 values[i] = values[j];
52890 sort(keys, values, left, j, compare);
52891 sort(keys, values, j + 1, right, compare);
52895 var NON_CONTRIBUTING = 1;
52896 var SAME_TRANSITION = 2;
52897 var DIFFERENT_TRANSITION = 3;
52899 var INTERSECTION = 0;
52901 var DIFFERENCE = 2;
52905 * @param {SweepEvent} event
52906 * @param {SweepEvent} prev
52907 * @param {Operation} operation
52909 function computeFields (event, prev, operation) {
52910 // compute inOut and otherInOut fields
52911 if (prev === null) {
52912 event.inOut = false;
52913 event.otherInOut = true;
52915 // previous line segment in sweepline belongs to the same polygon
52917 if (event.isSubject === prev.isSubject) {
52918 event.inOut = !prev.inOut;
52919 event.otherInOut = prev.otherInOut;
52921 // previous line segment in sweepline belongs to the clipping polygon
52923 event.inOut = !prev.otherInOut;
52924 event.otherInOut = prev.isVertical() ? !prev.inOut : prev.inOut;
52927 // compute prevInResult field
52929 event.prevInResult = (!inResult(prev, operation) || prev.isVertical())
52930 ? prev.prevInResult : prev;
52934 // check if the line segment belongs to the Boolean operation
52935 event.inResult = inResult(event, operation);
52939 /* eslint-disable indent */
52940 function inResult(event, operation) {
52941 switch (event.type) {
52943 switch (operation) {
52945 return !event.otherInOut;
52947 return event.otherInOut;
52949 // return (event.isSubject && !event.otherInOut) ||
52950 // (!event.isSubject && event.otherInOut);
52951 return (event.isSubject && event.otherInOut) ||
52952 (!event.isSubject && !event.otherInOut);
52957 case SAME_TRANSITION:
52958 return operation === INTERSECTION || operation === UNION;
52959 case DIFFERENT_TRANSITION:
52960 return operation === DIFFERENCE;
52961 case NON_CONTRIBUTING:
52966 /* eslint-enable indent */
52968 var SweepEvent = function SweepEvent (point, left, otherEvent, isSubject, edgeType) {
52971 * Is left endpoint?
52977 * @type {Array.<Number>}
52979 this.point = point;
52982 * Other edge reference
52983 * @type {SweepEvent}
52985 this.otherEvent = otherEvent;
52988 * Belongs to source or clipping polygon
52991 this.isSubject = isSubject;
52994 * Edge contribution type
52997 this.type = edgeType || NORMAL;
53001 * In-out transition for the sweepline crossing polygon
53004 this.inOut = false;
53010 this.otherInOut = false;
53013 * Previous event in result?
53014 * @type {SweepEvent}
53016 this.prevInResult = null;
53019 * Does event belong to result?
53022 this.inResult = false;
53030 this.resultInOut = false;
53032 this.isExteriorRing = true;
53037 * @param{Array.<Number>}p
53038 * @return {Boolean}
53040 SweepEvent.prototype.isBelow = function isBelow (p) {
53041 var p0 = this.point, p1 = this.otherEvent.point;
53043 ? (p0[0] - p[0]) * (p1[1] - p[1]) - (p1[0] - p[0]) * (p0[1] - p[1]) > 0
53044 // signedArea(this.point, this.otherEvent.point, p) > 0 :
53045 : (p1[0] - p[0]) * (p0[1] - p[1]) - (p0[0] - p[0]) * (p1[1] - p[1]) > 0;
53046 //signedArea(this.otherEvent.point, this.point, p) > 0;
53051 * @param{Array.<Number>}p
53052 * @return {Boolean}
53054 SweepEvent.prototype.isAbove = function isAbove (p) {
53055 return !this.isBelow(p);
53060 * @return {Boolean}
53062 SweepEvent.prototype.isVertical = function isVertical () {
53063 return this.point[0] === this.otherEvent.point[0];
53067 SweepEvent.prototype.clone = function clone () {
53068 var copy = new SweepEvent(
53069 this.point, this.left, this.otherEvent, this.isSubject, this.type);
53071 copy.inResult = this.inResult;
53072 copy.prevInResult = this.prevInResult;
53073 copy.isExteriorRing = this.isExteriorRing;
53074 copy.inOut = this.inOut;
53075 copy.otherInOut = this.otherInOut;
53080 function equals(p1, p2) {
53081 if (p1[0] === p2[0]) {
53082 if (p1[1] === p2[1]) {
53091 // const EPSILON = 1e-9;
53092 // const abs = Math.abs;
53093 // TODO https://github.com/w8r/martinez/issues/6#issuecomment-262847164
53094 // Precision problem.
53096 // module.exports = function equals(p1, p2) {
53097 // return abs(p1[0] - p2[0]) <= EPSILON && abs(p1[1] - p2[1]) <= EPSILON;
53101 * Signed area of the triangle (p0, p1, p2)
53102 * @param {Array.<Number>} p0
53103 * @param {Array.<Number>} p1
53104 * @param {Array.<Number>} p2
53107 function signedArea(p0, p1, p2) {
53108 return (p0[0] - p2[0]) * (p1[1] - p2[1]) - (p1[0] - p2[0]) * (p0[1] - p2[1]);
53112 * @param {SweepEvent} e1
53113 * @param {SweepEvent} e2
53116 function compareEvents(e1, e2) {
53120 // Different x-coordinate
53121 if (p1[0] > p2[0]) { return 1; }
53122 if (p1[0] < p2[0]) { return -1; }
53124 // Different points, but same x-coordinate
53125 // Event with lower y-coordinate is processed first
53126 if (p1[1] !== p2[1]) { return p1[1] > p2[1] ? 1 : -1; }
53128 return specialCases(e1, e2, p1, p2);
53132 /* eslint-disable no-unused-vars */
53133 function specialCases(e1, e2, p1, p2) {
53134 // Same coordinates, but one is a left endpoint and the other is
53135 // a right endpoint. The right endpoint is processed first
53136 if (e1.left !== e2.left)
53137 { return e1.left ? 1 : -1; }
53139 // const p2 = e1.otherEvent.point, p3 = e2.otherEvent.point;
53140 // const sa = (p1[0] - p3[0]) * (p2[1] - p3[1]) - (p2[0] - p3[0]) * (p1[1] - p3[1])
53141 // Same coordinates, both events
53142 // are left endpoints or right endpoints.
53144 if (signedArea(p1, e1.otherEvent.point, e2.otherEvent.point) !== 0) {
53145 // the event associate to the bottom segment is processed first
53146 return (!e1.isBelow(e2.otherEvent.point)) ? 1 : -1;
53149 return (!e1.isSubject && e2.isSubject) ? 1 : -1;
53151 /* eslint-enable no-unused-vars */
53154 * @param {SweepEvent} se
53155 * @param {Array.<Number>} p
53156 * @param {Queue} queue
53159 function divideSegment(se, p, queue) {
53160 var r = new SweepEvent(p, false, se, se.isSubject);
53161 var l = new SweepEvent(p, true, se.otherEvent, se.isSubject);
53163 /* eslint-disable no-console */
53164 if (equals(se.point, se.otherEvent.point)) {
53166 console.warn('what is that, a collapsed segment?', se);
53168 /* eslint-enable no-console */
53170 r.contourId = l.contourId = se.contourId;
53172 // avoid a rounding error. The left event would be processed after the right event
53173 if (compareEvents(l, se.otherEvent) > 0) {
53174 se.otherEvent.left = true;
53178 // avoid a rounding error. The left event would be processed after the right event
53179 // if (compareEvents(se, r) > 0) {}
53181 se.otherEvent.otherEvent = l;
53190 //const EPS = 1e-9;
53193 * Finds the magnitude of the cross product of two vectors (if we pretend
53194 * they're in three dimensions)
53196 * @param {Object} a First vector
53197 * @param {Object} b Second vector
53199 * @returns {Number} The magnitude of the cross product
53201 function crossProduct(a, b) {
53202 return (a[0] * b[1]) - (a[1] * b[0]);
53206 * Finds the dot product of two vectors.
53208 * @param {Object} a First vector
53209 * @param {Object} b Second vector
53211 * @returns {Number} The dot product
53213 function dotProduct(a, b) {
53214 return (a[0] * b[0]) + (a[1] * b[1]);
53218 * Finds the intersection (if any) between two line segments a and b, given the
53219 * line segments' end points a1, a2 and b1, b2.
53221 * This algorithm is based on Schneider and Eberly.
53222 * http://www.cimec.org.ar/~ncalvo/Schneider_Eberly.pdf
53225 * @param {Array.<Number>} a1 point of first line
53226 * @param {Array.<Number>} a2 point of first line
53227 * @param {Array.<Number>} b1 point of second line
53228 * @param {Array.<Number>} b2 point of second line
53229 * @param {Boolean=} noEndpointTouch whether to skip single touchpoints
53230 * (meaning connected segments) as
53232 * @returns {Array.<Array.<Number>>|Null} If the lines intersect, the point of
53233 * intersection. If they overlap, the two end points of the overlapping segment.
53236 function intersection (a1, a2, b1, b2, noEndpointTouch) {
53237 // The algorithm expects our lines in the form P + sd, where P is a point,
53238 // s is on the interval [0, 1], and d is a vector.
53239 // We are passed two points. P can be the first point of each pair. The
53240 // vector, then, could be thought of as the distance (in x and y components)
53241 // from the first point to the second point.
53242 // So first, let's make our vectors:
53243 var va = [a2[0] - a1[0], a2[1] - a1[1]];
53244 var vb = [b2[0] - b1[0], b2[1] - b1[1]];
53245 // We also define a function to convert back to regular point form:
53247 /* eslint-disable arrow-body-style */
53249 function toPoint(p, s, d) {
53256 /* eslint-enable arrow-body-style */
53258 // The rest is pretty much a straight port of the algorithm.
53259 var e = [b1[0] - a1[0], b1[1] - a1[1]];
53260 var kross = crossProduct(va, vb);
53261 var sqrKross = kross * kross;
53262 var sqrLenA = dotProduct(va, va);
53263 //const sqrLenB = dotProduct(vb, vb);
53265 // Check for line intersection. This works because of the properties of the
53266 // cross product -- specifically, two vectors are parallel if and only if the
53267 // cross product is the 0 vector. The full calculation involves relative error
53268 // to account for possible very small line segments. See Schneider & Eberly
53270 if (sqrKross > 0/* EPS * sqrLenB * sqLenA */) {
53271 // If they're not parallel, then (because these are line segments) they
53272 // still might not actually intersect. This code checks that the
53273 // intersection point of the lines is actually on both line segments.
53274 var s = crossProduct(e, vb) / kross;
53275 if (s < 0 || s > 1) {
53276 // not on line segment a
53279 var t = crossProduct(e, va) / kross;
53280 if (t < 0 || t > 1) {
53281 // not on line segment b
53284 if (s === 0 || s === 1) {
53285 // on an endpoint of line segment a
53286 return noEndpointTouch ? null : [toPoint(a1, s, va)];
53288 if (t === 0 || t === 1) {
53289 // on an endpoint of line segment b
53290 return noEndpointTouch ? null : [toPoint(b1, t, vb)];
53292 return [toPoint(a1, s, va)];
53295 // If we've reached this point, then the lines are either parallel or the
53296 // same, but the segments could overlap partially or fully, or not at all.
53297 // So we need to find the overlap, if any. To do that, we can use e, which is
53298 // the (vector) difference between the two initial points. If this is parallel
53299 // with the line itself, then the two lines are the same line, and there will
53301 //const sqrLenE = dotProduct(e, e);
53302 kross = crossProduct(e, va);
53303 sqrKross = kross * kross;
53305 if (sqrKross > 0 /* EPS * sqLenB * sqLenE */) {
53306 // Lines are just parallel, not the same. No overlap.
53310 var sa = dotProduct(va, e) / sqrLenA;
53311 var sb = sa + dotProduct(va, vb) / sqrLenA;
53312 var smin = Math.min(sa, sb);
53313 var smax = Math.max(sa, sb);
53315 // this is, essentially, the FindIntersection acting on floats from
53316 // Schneider & Eberly, just inlined into this function.
53317 if (smin <= 1 && smax >= 0) {
53319 // overlap on an end point
53321 return noEndpointTouch ? null : [toPoint(a1, smin > 0 ? smin : 0, va)];
53325 return noEndpointTouch ? null : [toPoint(a1, smax < 1 ? smax : 1, va)];
53328 if (noEndpointTouch && smin === 0 && smax === 1) { return null; }
53330 // There's overlap on a segment -- two points of intersection. Return both.
53332 toPoint(a1, smin > 0 ? smin : 0, va),
53333 toPoint(a1, smax < 1 ? smax : 1, va)
53341 * @param {SweepEvent} se1
53342 * @param {SweepEvent} se2
53343 * @param {Queue} queue
53346 function possibleIntersection (se1, se2, queue) {
53347 // that disallows self-intersecting polygons,
53348 // did cost us half a day, so I'll leave it
53350 // if (se1.isSubject === se2.isSubject) return;
53351 var inter = intersection(
53352 se1.point, se1.otherEvent.point,
53353 se2.point, se2.otherEvent.point
53356 var nintersections = inter ? inter.length : 0;
53357 if (nintersections === 0) { return 0; } // no intersection
53359 // the line segments intersect at an endpoint of both line segments
53360 if ((nintersections === 1) &&
53361 (equals(se1.point, se2.point) ||
53362 equals(se1.otherEvent.point, se2.otherEvent.point))) {
53366 if (nintersections === 2 && se1.isSubject === se2.isSubject) {
53367 // if(se1.contourId === se2.contourId){
53368 // console.warn('Edges of the same polygon overlap',
53369 // se1.point, se1.otherEvent.point, se2.point, se2.otherEvent.point);
53371 //throw new Error('Edges of the same polygon overlap');
53375 // The line segments associated to se1 and se2 intersect
53376 if (nintersections === 1) {
53378 // if the intersection point is not an endpoint of se1
53379 if (!equals(se1.point, inter[0]) && !equals(se1.otherEvent.point, inter[0])) {
53380 divideSegment(se1, inter[0], queue);
53383 // if the intersection point is not an endpoint of se2
53384 if (!equals(se2.point, inter[0]) && !equals(se2.otherEvent.point, inter[0])) {
53385 divideSegment(se2, inter[0], queue);
53390 // The line segments associated to se1 and se2 overlap
53392 var leftCoincide = false;
53393 var rightCoincide = false;
53395 if (equals(se1.point, se2.point)) {
53396 leftCoincide = true; // linked
53397 } else if (compareEvents(se1, se2) === 1) {
53398 events.push(se2, se1);
53400 events.push(se1, se2);
53403 if (equals(se1.otherEvent.point, se2.otherEvent.point)) {
53404 rightCoincide = true;
53405 } else if (compareEvents(se1.otherEvent, se2.otherEvent) === 1) {
53406 events.push(se2.otherEvent, se1.otherEvent);
53408 events.push(se1.otherEvent, se2.otherEvent);
53411 if ((leftCoincide && rightCoincide) || leftCoincide) {
53412 // both line segments are equal or share the left endpoint
53413 se2.type = NON_CONTRIBUTING;
53414 se1.type = (se2.inOut === se1.inOut)
53415 ? SAME_TRANSITION : DIFFERENT_TRANSITION;
53417 if (leftCoincide && !rightCoincide) {
53418 // honestly no idea, but changing events selection from [2, 1]
53419 // to [0, 1] fixes the overlapping self-intersecting polygons issue
53420 divideSegment(events[1].otherEvent, events[0].point, queue);
53425 // the line segments share the right endpoint
53426 if (rightCoincide) {
53427 divideSegment(events[0], events[1].point, queue);
53431 // no line segment includes totally the other one
53432 if (events[0] !== events[3].otherEvent) {
53433 divideSegment(events[0], events[1].point, queue);
53434 divideSegment(events[1], events[2].point, queue);
53438 // one line segment includes the other one
53439 divideSegment(events[0], events[1].point, queue);
53440 divideSegment(events[3].otherEvent, events[2].point, queue);
53446 * @param {SweepEvent} le1
53447 * @param {SweepEvent} le2
53450 function compareSegments(le1, le2) {
53451 if (le1 === le2) { return 0; }
53453 // Segments are not collinear
53454 if (signedArea(le1.point, le1.otherEvent.point, le2.point) !== 0 ||
53455 signedArea(le1.point, le1.otherEvent.point, le2.otherEvent.point) !== 0) {
53457 // If they share their left endpoint use the right endpoint to sort
53458 if (equals(le1.point, le2.point)) { return le1.isBelow(le2.otherEvent.point) ? -1 : 1; }
53460 // Different left endpoint: use the left endpoint to sort
53461 if (le1.point[0] === le2.point[0]) { return le1.point[1] < le2.point[1] ? -1 : 1; }
53463 // has the line segment associated to e1 been inserted
53464 // into S after the line segment associated to e2 ?
53465 if (compareEvents(le1, le2) === 1) { return le2.isAbove(le1.point) ? -1 : 1; }
53467 // The line segment associated to e2 has been inserted
53468 // into S after the line segment associated to e1
53469 return le1.isBelow(le2.point) ? -1 : 1;
53472 if (le1.isSubject === le2.isSubject) { // same polygon
53473 var p1 = le1.point, p2 = le2.point;
53474 if (p1[0] === p2[0] && p1[1] === p2[1]/*equals(le1.point, le2.point)*/) {
53475 p1 = le1.otherEvent.point; p2 = le2.otherEvent.point;
53476 if (p1[0] === p2[0] && p1[1] === p2[1]) { return 0; }
53477 else { return le1.contourId > le2.contourId ? 1 : -1; }
53479 } else { // Segments are collinear, but belong to separate polygons
53480 return le1.isSubject ? -1 : 1;
53483 return compareEvents(le1, le2) === 1 ? 1 : -1;
53486 function subdivide(eventQueue, subject, clipping, sbbox, cbbox, operation) {
53487 var sweepLine = new SplayTree(compareSegments);
53488 var sortedEvents = [];
53490 var rightbound = Math.min(sbbox[2], cbbox[2]);
53492 var prev, next, begin;
53494 while (eventQueue.length !== 0) {
53495 var event = eventQueue.pop();
53496 sortedEvents.push(event);
53498 // optimization by bboxes for intersection and difference goes here
53499 if ((operation === INTERSECTION && event.point[0] > rightbound) ||
53500 (operation === DIFFERENCE && event.point[0] > sbbox[2])) {
53505 next = prev = sweepLine.insert(event);
53506 begin = sweepLine.minNode();
53508 if (prev !== begin) { prev = sweepLine.prev(prev); }
53509 else { prev = null; }
53511 next = sweepLine.next(next);
53513 var prevEvent = prev ? prev.key : null;
53514 var prevprevEvent = (void 0);
53515 computeFields(event, prevEvent, operation);
53517 if (possibleIntersection(event, next.key, eventQueue) === 2) {
53518 computeFields(event, prevEvent, operation);
53519 computeFields(event, next.key, operation);
53524 if (possibleIntersection(prev.key, event, eventQueue) === 2) {
53525 var prevprev = prev;
53526 if (prevprev !== begin) { prevprev = sweepLine.prev(prevprev); }
53527 else { prevprev = null; }
53529 prevprevEvent = prevprev ? prevprev.key : null;
53530 computeFields(prevEvent, prevprevEvent, operation);
53531 computeFields(event, prevEvent, operation);
53535 event = event.otherEvent;
53536 next = prev = sweepLine.find(event);
53538 if (prev && next) {
53540 if (prev !== begin) { prev = sweepLine.prev(prev); }
53541 else { prev = null; }
53543 next = sweepLine.next(next);
53544 sweepLine.remove(event);
53546 if (next && prev) {
53547 possibleIntersection(prev.key, next.key, eventQueue);
53552 return sortedEvents;
53556 * @param {Array.<SweepEvent>} sortedEvents
53557 * @return {Array.<SweepEvent>}
53559 function orderEvents(sortedEvents) {
53560 var event, i, len, tmp;
53561 var resultEvents = [];
53562 for (i = 0, len = sortedEvents.length; i < len; i++) {
53563 event = sortedEvents[i];
53564 if ((event.left && event.inResult) ||
53565 (!event.left && event.otherEvent.inResult)) {
53566 resultEvents.push(event);
53569 // Due to overlapping edges the resultEvents array can be not wholly sorted
53570 var sorted = false;
53573 for (i = 0, len = resultEvents.length; i < len; i++) {
53574 if ((i + 1) < len &&
53575 compareEvents(resultEvents[i], resultEvents[i + 1]) === 1) {
53576 tmp = resultEvents[i];
53577 resultEvents[i] = resultEvents[i + 1];
53578 resultEvents[i + 1] = tmp;
53585 for (i = 0, len = resultEvents.length; i < len; i++) {
53586 event = resultEvents[i];
53590 // imagine, the right event is found in the beginning of the queue,
53591 // when his left counterpart is not marked yet
53592 for (i = 0, len = resultEvents.length; i < len; i++) {
53593 event = resultEvents[i];
53596 event.pos = event.otherEvent.pos;
53597 event.otherEvent.pos = tmp;
53601 return resultEvents;
53606 * @param {Number} pos
53607 * @param {Array.<SweepEvent>} resultEvents
53608 * @param {Object>} processed
53611 function nextPos(pos, resultEvents, processed, origIndex) {
53613 var newPos = pos + 1;
53614 var length = resultEvents.length;
53616 p = resultEvents[pos].point;
53618 if (newPos < length)
53619 { p1 = resultEvents[newPos].point; }
53622 // while in range and not the current one by value
53623 while (newPos < length && p1[0] === p[0] && p1[1] === p[1]) {
53624 if (!processed[newPos]) {
53629 p1 = resultEvents[newPos].point;
53634 while (processed[newPos] && newPos >= origIndex) {
53642 * @param {Array.<SweepEvent>} sortedEvents
53643 * @return {Array.<*>} polygons
53645 function connectEdges(sortedEvents, operation) {
53647 var resultEvents = orderEvents(sortedEvents);
53649 // "false"-filled array
53650 var processed = {};
53654 for (i = 0, len = resultEvents.length; i < len; i++) {
53655 if (processed[i]) { continue; }
53656 var contour = [[]];
53658 if (!resultEvents[i].isExteriorRing) {
53659 if (operation === DIFFERENCE && !resultEvents[i].isSubject && result.length === 0) {
53660 result.push(contour);
53661 } else if (result.length === 0) {
53662 result.push([[contour]]);
53664 result[result.length - 1].push(contour[0]);
53666 } else if (operation === DIFFERENCE && !resultEvents[i].isSubject && result.length > 1) {
53667 result[result.length - 1].push(contour[0]);
53669 result.push(contour);
53672 var ringId = result.length - 1;
53675 var initial = resultEvents[i].point;
53676 contour[0].push(initial);
53679 event = resultEvents[pos];
53680 processed[pos] = true;
53683 event.resultInOut = false;
53684 event.contourId = ringId;
53686 event.otherEvent.resultInOut = true;
53687 event.otherEvent.contourId = ringId;
53691 processed[pos] = true;
53692 contour[0].push(resultEvents[pos].point);
53693 pos = nextPos(pos, resultEvents, processed, i);
53696 pos = pos === -1 ? i : pos;
53698 event = resultEvents[pos];
53699 processed[pos] = processed[event.pos] = true;
53700 event.otherEvent.resultInOut = true;
53701 event.otherEvent.contourId = ringId;
53704 // Handle if the result is a polygon (eg not multipoly)
53705 // Commented it again, let's see what do we mean by that
53706 // if (result.length === 1) result = result[0];
53710 var tinyqueue = TinyQueue;
53711 var default_1 = TinyQueue;
53713 function TinyQueue(data, compare) {
53716 if (!(this instanceof TinyQueue)) { return new TinyQueue(data, compare); }
53718 this.data = data || [];
53719 this.length = this.data.length;
53720 this.compare = compare || defaultCompare;
53722 if (this.length > 0) {
53723 for (var i = (this.length >> 1) - 1; i >= 0; i--) { this$1._down(i); }
53727 function defaultCompare(a, b) {
53728 return a < b ? -1 : a > b ? 1 : 0;
53731 TinyQueue.prototype = {
53733 push: function (item) {
53734 this.data.push(item);
53736 this._up(this.length - 1);
53740 if (this.length === 0) { return undefined; }
53742 var top = this.data[0];
53745 if (this.length > 0) {
53746 this.data[0] = this.data[this.length];
53754 peek: function () {
53755 return this.data[0];
53758 _up: function (pos) {
53759 var data = this.data;
53760 var compare = this.compare;
53761 var item = data[pos];
53764 var parent = (pos - 1) >> 1;
53765 var current = data[parent];
53766 if (compare(item, current) >= 0) { break; }
53767 data[pos] = current;
53774 _down: function (pos) {
53777 var data = this.data;
53778 var compare = this.compare;
53779 var halfLength = this.length >> 1;
53780 var item = data[pos];
53782 while (pos < halfLength) {
53783 var left = (pos << 1) + 1;
53784 var right = left + 1;
53785 var best = data[left];
53787 if (right < this$1.length && compare(data[right], best) < 0) {
53789 best = data[right];
53791 if (compare(best, item) >= 0) { break; }
53800 tinyqueue.default = default_1;
53802 var max = Math.max;
53803 var min = Math.min;
53808 function processPolygon(contourOrHole, isSubject, depth, Q, bbox, isExteriorRing) {
53809 var i, len, s1, s2, e1, e2;
53810 for (i = 0, len = contourOrHole.length - 1; i < len; i++) {
53811 s1 = contourOrHole[i];
53812 s2 = contourOrHole[i + 1];
53813 e1 = new SweepEvent(s1, false, undefined, isSubject);
53814 e2 = new SweepEvent(s2, false, e1, isSubject);
53815 e1.otherEvent = e2;
53817 if (s1[0] === s2[0] && s1[1] === s2[1]) {
53818 continue; // skip collapsed edges, or it breaks
53821 e1.contourId = e2.contourId = depth;
53822 if (!isExteriorRing) {
53823 e1.isExteriorRing = false;
53824 e2.isExteriorRing = false;
53826 if (compareEvents(e1, e2) > 0) {
53832 var x = s1[0], y = s1[1];
53833 bbox[0] = min(bbox[0], x);
53834 bbox[1] = min(bbox[1], y);
53835 bbox[2] = max(bbox[2], x);
53836 bbox[3] = max(bbox[3], y);
53838 // Pushing it so the queue is sorted from left to right,
53839 // with object on the left having the highest priority.
53846 function fillQueue(subject, clipping, sbbox, cbbox, operation) {
53847 var eventQueue = new tinyqueue(null, compareEvents);
53848 var polygonSet, isExteriorRing, i, ii, j, jj; //, k, kk;
53850 for (i = 0, ii = subject.length; i < ii; i++) {
53851 polygonSet = subject[i];
53852 for (j = 0, jj = polygonSet.length; j < jj; j++) {
53853 isExteriorRing = j === 0;
53854 if (isExteriorRing) { contourId++; }
53855 processPolygon(polygonSet[j], true, contourId, eventQueue, sbbox, isExteriorRing);
53859 for (i = 0, ii = clipping.length; i < ii; i++) {
53860 polygonSet = clipping[i];
53861 for (j = 0, jj = polygonSet.length; j < jj; j++) {
53862 isExteriorRing = j === 0;
53863 if (operation === DIFFERENCE) { isExteriorRing = false; }
53864 if (isExteriorRing) { contourId++; }
53865 processPolygon(polygonSet[j], false, contourId, eventQueue, cbbox, isExteriorRing);
53875 function trivialOperation(subject, clipping, operation) {
53877 if (subject.length * clipping.length === 0) {
53878 if (operation === INTERSECTION) {
53880 } else if (operation === DIFFERENCE) {
53882 } else if (operation === UNION ||
53883 operation === XOR) {
53884 result = (subject.length === 0) ? clipping : subject;
53891 function compareBBoxes(subject, clipping, sbbox, cbbox, operation) {
53893 if (sbbox[0] > cbbox[2] ||
53894 cbbox[0] > sbbox[2] ||
53895 sbbox[1] > cbbox[3] ||
53896 cbbox[1] > sbbox[3]) {
53897 if (operation === INTERSECTION) {
53899 } else if (operation === DIFFERENCE) {
53901 } else if (operation === UNION ||
53902 operation === XOR) {
53903 result = subject.concat(clipping);
53910 function boolean(subject, clipping, operation) {
53911 if (typeof subject[0][0][0] === 'number') {
53912 subject = [subject];
53914 if (typeof clipping[0][0][0] === 'number') {
53915 clipping = [clipping];
53917 var trivial = trivialOperation(subject, clipping, operation);
53919 return trivial === EMPTY ? null : trivial;
53921 var sbbox = [Infinity, Infinity, -Infinity, -Infinity];
53922 var cbbox = [Infinity, Infinity, -Infinity, -Infinity];
53924 //console.time('fill queue');
53925 var eventQueue = fillQueue(subject, clipping, sbbox, cbbox, operation);
53926 //console.timeEnd('fill queue');
53928 trivial = compareBBoxes(subject, clipping, sbbox, cbbox, operation);
53930 return trivial === EMPTY ? null : trivial;
53932 //console.time('subdivide edges');
53933 var sortedEvents = subdivide(eventQueue, subject, clipping, sbbox, cbbox, operation);
53934 //console.timeEnd('subdivide edges');
53936 //console.time('connect vertices');
53937 var result = connectEdges(sortedEvents, operation);
53938 //console.timeEnd('connect vertices');
53942 function union (subject, clipping) {
53943 return boolean(subject, clipping, UNION);
53946 function diff (subject, clipping) {
53947 return boolean(subject, clipping, DIFFERENCE);
53950 function xor (subject, clipping){
53951 return boolean(subject, clipping, XOR);
53954 function intersection$1 (subject, clipping) {
53955 return boolean(subject, clipping, INTERSECTION);
53961 var operations = { UNION: UNION, DIFFERENCE: DIFFERENCE, INTERSECTION: INTERSECTION, XOR: XOR };
53963 exports.union = union;
53964 exports.diff = diff;
53966 exports.intersection = intersection$1;
53967 exports.operations = operations;
53969 Object.defineProperty(exports, '__esModule', { value: true });
53975 var martinez = unwrapExports(martinez_umd);
53977 var read$6 = function (buffer, offset, isLE, mLen, nBytes) {
53979 var eLen = (nBytes * 8) - mLen - 1;
53980 var eMax = (1 << eLen) - 1;
53981 var eBias = eMax >> 1;
53983 var i = isLE ? (nBytes - 1) : 0;
53984 var d = isLE ? -1 : 1;
53985 var s = buffer[offset + i];
53989 e = s & ((1 << (-nBits)) - 1);
53992 for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}
53994 m = e & ((1 << (-nBits)) - 1);
53997 for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}
54001 } else if (e === eMax) {
54002 return m ? NaN : ((s ? -1 : 1) * Infinity)
54004 m = m + Math.pow(2, mLen);
54007 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
54010 var write$6 = function (buffer, value, offset, isLE, mLen, nBytes) {
54012 var eLen = (nBytes * 8) - mLen - 1;
54013 var eMax = (1 << eLen) - 1;
54014 var eBias = eMax >> 1;
54015 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0);
54016 var i = isLE ? 0 : (nBytes - 1);
54017 var d = isLE ? 1 : -1;
54018 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0;
54020 value = Math.abs(value);
54022 if (isNaN(value) || value === Infinity) {
54023 m = isNaN(value) ? 1 : 0;
54026 e = Math.floor(Math.log(value) / Math.LN2);
54027 if (value * (c = Math.pow(2, -e)) < 1) {
54031 if (e + eBias >= 1) {
54034 value += rt * Math.pow(2, 1 - eBias);
54036 if (value * c >= 2) {
54041 if (e + eBias >= eMax) {
54044 } else if (e + eBias >= 1) {
54045 m = ((value * c) - 1) * Math.pow(2, mLen);
54048 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);
54053 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
54055 e = (e << mLen) | m;
54057 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
54059 buffer[offset + i - d] |= s * 128;
54071 function Pbf(buf) {
54072 this.buf = ArrayBuffer.isView && ArrayBuffer.isView(buf) ? buf : new Uint8Array(buf || 0);
54075 this.length = this.buf.length;
54078 Pbf.Varint = 0; // varint: int32, int64, uint32, uint64, sint32, sint64, bool, enum
54079 Pbf.Fixed64 = 1; // 64-bit: double, fixed64, sfixed64
54080 Pbf.Bytes = 2; // length-delimited: string, bytes, embedded messages, packed repeated fields
54081 Pbf.Fixed32 = 5; // 32-bit: float, fixed32, sfixed32
54083 var SHIFT_LEFT_32 = (1 << 16) * (1 << 16),
54084 SHIFT_RIGHT_32 = 1 / SHIFT_LEFT_32;
54088 destroy: function() {
54092 // === READING =================================================================
54094 readFields: function(readField, result, end) {
54095 end = end || this.length;
54097 while (this.pos < end) {
54098 var val = this.readVarint(),
54100 startPos = this.pos;
54102 this.type = val & 0x7;
54103 readField(tag, result, this);
54105 if (this.pos === startPos) this.skip(val);
54110 readMessage: function(readField, result) {
54111 return this.readFields(readField, result, this.readVarint() + this.pos);
54114 readFixed32: function() {
54115 var val = readUInt32(this.buf, this.pos);
54120 readSFixed32: function() {
54121 var val = readInt32(this.buf, this.pos);
54126 // 64-bit int handling is based on github.com/dpw/node-buffer-more-ints (MIT-licensed)
54128 readFixed64: function() {
54129 var val = readUInt32(this.buf, this.pos) + readUInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32;
54134 readSFixed64: function() {
54135 var val = readUInt32(this.buf, this.pos) + readInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32;
54140 readFloat: function() {
54141 var val = ieee754.read(this.buf, this.pos, true, 23, 4);
54146 readDouble: function() {
54147 var val = ieee754.read(this.buf, this.pos, true, 52, 8);
54152 readVarint: function(isSigned) {
54153 var buf = this.buf,
54156 b = buf[this.pos++]; val = b & 0x7f; if (b < 0x80) return val;
54157 b = buf[this.pos++]; val |= (b & 0x7f) << 7; if (b < 0x80) return val;
54158 b = buf[this.pos++]; val |= (b & 0x7f) << 14; if (b < 0x80) return val;
54159 b = buf[this.pos++]; val |= (b & 0x7f) << 21; if (b < 0x80) return val;
54160 b = buf[this.pos]; val |= (b & 0x0f) << 28;
54162 return readVarintRemainder(val, isSigned, this);
54165 readVarint64: function() { // for compatibility with v2.0.1
54166 return this.readVarint(true);
54169 readSVarint: function() {
54170 var num = this.readVarint();
54171 return num % 2 === 1 ? (num + 1) / -2 : num / 2; // zigzag encoding
54174 readBoolean: function() {
54175 return Boolean(this.readVarint());
54178 readString: function() {
54179 var end = this.readVarint() + this.pos,
54180 str = readUtf8(this.buf, this.pos, end);
54185 readBytes: function() {
54186 var end = this.readVarint() + this.pos,
54187 buffer = this.buf.subarray(this.pos, end);
54192 // verbose for performance reasons; doesn't affect gzipped size
54194 readPackedVarint: function(arr, isSigned) {
54195 if (this.type !== Pbf.Bytes) return arr.push(this.readVarint(isSigned));
54196 var end = readPackedEnd(this);
54198 while (this.pos < end) arr.push(this.readVarint(isSigned));
54201 readPackedSVarint: function(arr) {
54202 if (this.type !== Pbf.Bytes) return arr.push(this.readSVarint());
54203 var end = readPackedEnd(this);
54205 while (this.pos < end) arr.push(this.readSVarint());
54208 readPackedBoolean: function(arr) {
54209 if (this.type !== Pbf.Bytes) return arr.push(this.readBoolean());
54210 var end = readPackedEnd(this);
54212 while (this.pos < end) arr.push(this.readBoolean());
54215 readPackedFloat: function(arr) {
54216 if (this.type !== Pbf.Bytes) return arr.push(this.readFloat());
54217 var end = readPackedEnd(this);
54219 while (this.pos < end) arr.push(this.readFloat());
54222 readPackedDouble: function(arr) {
54223 if (this.type !== Pbf.Bytes) return arr.push(this.readDouble());
54224 var end = readPackedEnd(this);
54226 while (this.pos < end) arr.push(this.readDouble());
54229 readPackedFixed32: function(arr) {
54230 if (this.type !== Pbf.Bytes) return arr.push(this.readFixed32());
54231 var end = readPackedEnd(this);
54233 while (this.pos < end) arr.push(this.readFixed32());
54236 readPackedSFixed32: function(arr) {
54237 if (this.type !== Pbf.Bytes) return arr.push(this.readSFixed32());
54238 var end = readPackedEnd(this);
54240 while (this.pos < end) arr.push(this.readSFixed32());
54243 readPackedFixed64: function(arr) {
54244 if (this.type !== Pbf.Bytes) return arr.push(this.readFixed64());
54245 var end = readPackedEnd(this);
54247 while (this.pos < end) arr.push(this.readFixed64());
54250 readPackedSFixed64: function(arr) {
54251 if (this.type !== Pbf.Bytes) return arr.push(this.readSFixed64());
54252 var end = readPackedEnd(this);
54254 while (this.pos < end) arr.push(this.readSFixed64());
54258 skip: function(val) {
54259 var type = val & 0x7;
54260 if (type === Pbf.Varint) while (this.buf[this.pos++] > 0x7f) {}
54261 else if (type === Pbf.Bytes) this.pos = this.readVarint() + this.pos;
54262 else if (type === Pbf.Fixed32) this.pos += 4;
54263 else if (type === Pbf.Fixed64) this.pos += 8;
54264 else throw new Error('Unimplemented type: ' + type);
54267 // === WRITING =================================================================
54269 writeTag: function(tag, type) {
54270 this.writeVarint((tag << 3) | type);
54273 realloc: function(min) {
54274 var length = this.length || 16;
54276 while (length < this.pos + min) length *= 2;
54278 if (length !== this.length) {
54279 var buf = new Uint8Array(length);
54282 this.length = length;
54286 finish: function() {
54287 this.length = this.pos;
54289 return this.buf.subarray(0, this.length);
54292 writeFixed32: function(val) {
54294 writeInt32(this.buf, val, this.pos);
54298 writeSFixed32: function(val) {
54300 writeInt32(this.buf, val, this.pos);
54304 writeFixed64: function(val) {
54306 writeInt32(this.buf, val & -1, this.pos);
54307 writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4);
54311 writeSFixed64: function(val) {
54313 writeInt32(this.buf, val & -1, this.pos);
54314 writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4);
54318 writeVarint: function(val) {
54321 if (val > 0xfffffff || val < 0) {
54322 writeBigVarint(val, this);
54328 this.buf[this.pos++] = val & 0x7f | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;
54329 this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;
54330 this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;
54331 this.buf[this.pos++] = (val >>> 7) & 0x7f;
54334 writeSVarint: function(val) {
54335 this.writeVarint(val < 0 ? -val * 2 - 1 : val * 2);
54338 writeBoolean: function(val) {
54339 this.writeVarint(Boolean(val));
54342 writeString: function(str) {
54344 this.realloc(str.length * 4);
54346 this.pos++; // reserve 1 byte for short string length
54348 var startPos = this.pos;
54349 // write the string directly to the buffer and see how much was written
54350 this.pos = writeUtf8(this.buf, str, this.pos);
54351 var len = this.pos - startPos;
54353 if (len >= 0x80) makeRoomForExtraLength(startPos, len, this);
54355 // finally, write the message length in the reserved place and restore the position
54356 this.pos = startPos - 1;
54357 this.writeVarint(len);
54361 writeFloat: function(val) {
54363 ieee754.write(this.buf, val, this.pos, true, 23, 4);
54367 writeDouble: function(val) {
54369 ieee754.write(this.buf, val, this.pos, true, 52, 8);
54373 writeBytes: function(buffer) {
54374 var len = buffer.length;
54375 this.writeVarint(len);
54377 for (var i = 0; i < len; i++) this.buf[this.pos++] = buffer[i];
54380 writeRawMessage: function(fn, obj) {
54381 this.pos++; // reserve 1 byte for short message length
54383 // write the message directly to the buffer and see how much was written
54384 var startPos = this.pos;
54386 var len = this.pos - startPos;
54388 if (len >= 0x80) makeRoomForExtraLength(startPos, len, this);
54390 // finally, write the message length in the reserved place and restore the position
54391 this.pos = startPos - 1;
54392 this.writeVarint(len);
54396 writeMessage: function(tag, fn, obj) {
54397 this.writeTag(tag, Pbf.Bytes);
54398 this.writeRawMessage(fn, obj);
54401 writePackedVarint: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedVarint, arr); },
54402 writePackedSVarint: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedSVarint, arr); },
54403 writePackedBoolean: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedBoolean, arr); },
54404 writePackedFloat: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedFloat, arr); },
54405 writePackedDouble: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedDouble, arr); },
54406 writePackedFixed32: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedFixed32, arr); },
54407 writePackedSFixed32: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedSFixed32, arr); },
54408 writePackedFixed64: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedFixed64, arr); },
54409 writePackedSFixed64: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedSFixed64, arr); },
54411 writeBytesField: function(tag, buffer) {
54412 this.writeTag(tag, Pbf.Bytes);
54413 this.writeBytes(buffer);
54415 writeFixed32Field: function(tag, val) {
54416 this.writeTag(tag, Pbf.Fixed32);
54417 this.writeFixed32(val);
54419 writeSFixed32Field: function(tag, val) {
54420 this.writeTag(tag, Pbf.Fixed32);
54421 this.writeSFixed32(val);
54423 writeFixed64Field: function(tag, val) {
54424 this.writeTag(tag, Pbf.Fixed64);
54425 this.writeFixed64(val);
54427 writeSFixed64Field: function(tag, val) {
54428 this.writeTag(tag, Pbf.Fixed64);
54429 this.writeSFixed64(val);
54431 writeVarintField: function(tag, val) {
54432 this.writeTag(tag, Pbf.Varint);
54433 this.writeVarint(val);
54435 writeSVarintField: function(tag, val) {
54436 this.writeTag(tag, Pbf.Varint);
54437 this.writeSVarint(val);
54439 writeStringField: function(tag, str) {
54440 this.writeTag(tag, Pbf.Bytes);
54441 this.writeString(str);
54443 writeFloatField: function(tag, val) {
54444 this.writeTag(tag, Pbf.Fixed32);
54445 this.writeFloat(val);
54447 writeDoubleField: function(tag, val) {
54448 this.writeTag(tag, Pbf.Fixed64);
54449 this.writeDouble(val);
54451 writeBooleanField: function(tag, val) {
54452 this.writeVarintField(tag, Boolean(val));
54456 function readVarintRemainder(l, s, p) {
54460 b = buf[p.pos++]; h = (b & 0x70) >> 4; if (b < 0x80) return toNum(l, h, s);
54461 b = buf[p.pos++]; h |= (b & 0x7f) << 3; if (b < 0x80) return toNum(l, h, s);
54462 b = buf[p.pos++]; h |= (b & 0x7f) << 10; if (b < 0x80) return toNum(l, h, s);
54463 b = buf[p.pos++]; h |= (b & 0x7f) << 17; if (b < 0x80) return toNum(l, h, s);
54464 b = buf[p.pos++]; h |= (b & 0x7f) << 24; if (b < 0x80) return toNum(l, h, s);
54465 b = buf[p.pos++]; h |= (b & 0x01) << 31; if (b < 0x80) return toNum(l, h, s);
54467 throw new Error('Expected varint not more than 10 bytes');
54470 function readPackedEnd(pbf) {
54471 return pbf.type === Pbf.Bytes ?
54472 pbf.readVarint() + pbf.pos : pbf.pos + 1;
54475 function toNum(low, high, isSigned) {
54477 return high * 0x100000000 + (low >>> 0);
54480 return ((high >>> 0) * 0x100000000) + (low >>> 0);
54483 function writeBigVarint(val, pbf) {
54487 low = (val % 0x100000000) | 0;
54488 high = (val / 0x100000000) | 0;
54490 low = ~(-val % 0x100000000);
54491 high = ~(-val / 0x100000000);
54493 if (low ^ 0xffffffff) {
54494 low = (low + 1) | 0;
54497 high = (high + 1) | 0;
54501 if (val >= 0x10000000000000000 || val < -0x10000000000000000) {
54502 throw new Error('Given varint doesn\'t fit into 10 bytes');
54507 writeBigVarintLow(low, high, pbf);
54508 writeBigVarintHigh(high, pbf);
54511 function writeBigVarintLow(low, high, pbf) {
54512 pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
54513 pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
54514 pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
54515 pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
54516 pbf.buf[pbf.pos] = low & 0x7f;
54519 function writeBigVarintHigh(high, pbf) {
54520 var lsb = (high & 0x07) << 4;
54522 pbf.buf[pbf.pos++] |= lsb | ((high >>>= 3) ? 0x80 : 0); if (!high) return;
54523 pbf.buf[pbf.pos++] = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;
54524 pbf.buf[pbf.pos++] = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;
54525 pbf.buf[pbf.pos++] = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;
54526 pbf.buf[pbf.pos++] = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;
54527 pbf.buf[pbf.pos++] = high & 0x7f;
54530 function makeRoomForExtraLength(startPos, len, pbf) {
54532 len <= 0x3fff ? 1 :
54533 len <= 0x1fffff ? 2 :
54534 len <= 0xfffffff ? 3 : Math.floor(Math.log(len) / (Math.LN2 * 7));
54536 // if 1 byte isn't enough for encoding message length, shift the data to the right
54537 pbf.realloc(extraLen);
54538 for (var i = pbf.pos - 1; i >= startPos; i--) pbf.buf[i + extraLen] = pbf.buf[i];
54541 function writePackedVarint(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeVarint(arr[i]); }
54542 function writePackedSVarint(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSVarint(arr[i]); }
54543 function writePackedFloat(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeFloat(arr[i]); }
54544 function writePackedDouble(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeDouble(arr[i]); }
54545 function writePackedBoolean(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeBoolean(arr[i]); }
54546 function writePackedFixed32(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeFixed32(arr[i]); }
54547 function writePackedSFixed32(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSFixed32(arr[i]); }
54548 function writePackedFixed64(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeFixed64(arr[i]); }
54549 function writePackedSFixed64(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSFixed64(arr[i]); }
54551 // Buffer code below from https://github.com/feross/buffer, MIT-licensed
54553 function readUInt32(buf, pos) {
54554 return ((buf[pos]) |
54555 (buf[pos + 1] << 8) |
54556 (buf[pos + 2] << 16)) +
54557 (buf[pos + 3] * 0x1000000);
54560 function writeInt32(buf, val, pos) {
54562 buf[pos + 1] = (val >>> 8);
54563 buf[pos + 2] = (val >>> 16);
54564 buf[pos + 3] = (val >>> 24);
54567 function readInt32(buf, pos) {
54568 return ((buf[pos]) |
54569 (buf[pos + 1] << 8) |
54570 (buf[pos + 2] << 16)) +
54571 (buf[pos + 3] << 24);
54574 function readUtf8(buf, pos, end) {
54580 var c = null; // codepoint
54581 var bytesPerSequence =
54586 if (i + bytesPerSequence > end) break;
54590 if (bytesPerSequence === 1) {
54594 } else if (bytesPerSequence === 2) {
54596 if ((b1 & 0xC0) === 0x80) {
54597 c = (b0 & 0x1F) << 0x6 | (b1 & 0x3F);
54602 } else if (bytesPerSequence === 3) {
54605 if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80) {
54606 c = (b0 & 0xF) << 0xC | (b1 & 0x3F) << 0x6 | (b2 & 0x3F);
54607 if (c <= 0x7FF || (c >= 0xD800 && c <= 0xDFFF)) {
54611 } else if (bytesPerSequence === 4) {
54615 if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {
54616 c = (b0 & 0xF) << 0x12 | (b1 & 0x3F) << 0xC | (b2 & 0x3F) << 0x6 | (b3 & 0x3F);
54617 if (c <= 0xFFFF || c >= 0x110000) {
54625 bytesPerSequence = 1;
54627 } else if (c > 0xFFFF) {
54629 str += String.fromCharCode(c >>> 10 & 0x3FF | 0xD800);
54630 c = 0xDC00 | c & 0x3FF;
54633 str += String.fromCharCode(c);
54634 i += bytesPerSequence;
54640 function writeUtf8(buf, str, pos) {
54641 for (var i = 0, c, lead; i < str.length; i++) {
54642 c = str.charCodeAt(i); // code point
54644 if (c > 0xD7FF && c < 0xE000) {
54653 c = lead - 0xD800 << 10 | c - 0xDC00 | 0x10000;
54657 if (c > 0xDBFF || (i + 1 === str.length)) {
54677 buf[pos++] = c >> 0x6 | 0xC0;
54680 buf[pos++] = c >> 0xC | 0xE0;
54682 buf[pos++] = c >> 0x12 | 0xF0;
54683 buf[pos++] = c >> 0xC & 0x3F | 0x80;
54685 buf[pos++] = c >> 0x6 & 0x3F | 0x80;
54687 buf[pos++] = c & 0x3F | 0x80;
54693 var pointGeometry = Point;
54696 * A standalone point geometry with useful accessor, comparison, and
54697 * modification methods.
54700 * @param {Number} x the x-coordinate. this could be longitude or screen
54701 * pixels, or any other sort of unit.
54702 * @param {Number} y the y-coordinate. this could be latitude or screen
54703 * pixels, or any other sort of unit.
54705 * var point = new Point(-77, 38);
54707 function Point(x, y) {
54712 Point.prototype = {
54715 * Clone this point, returning a new point that can be modified
54716 * without affecting the old one.
54717 * @return {Point} the clone
54719 clone: function() { return new Point(this.x, this.y); },
54722 * Add this point's x & y coordinates to another point,
54723 * yielding a new point.
54724 * @param {Point} p the other point
54725 * @return {Point} output point
54727 add: function(p) { return this.clone()._add(p); },
54730 * Subtract this point's x & y coordinates to from point,
54731 * yielding a new point.
54732 * @param {Point} p the other point
54733 * @return {Point} output point
54735 sub: function(p) { return this.clone()._sub(p); },
54738 * Multiply this point's x & y coordinates by point,
54739 * yielding a new point.
54740 * @param {Point} p the other point
54741 * @return {Point} output point
54743 multByPoint: function(p) { return this.clone()._multByPoint(p); },
54746 * Divide this point's x & y coordinates by point,
54747 * yielding a new point.
54748 * @param {Point} p the other point
54749 * @return {Point} output point
54751 divByPoint: function(p) { return this.clone()._divByPoint(p); },
54754 * Multiply this point's x & y coordinates by a factor,
54755 * yielding a new point.
54756 * @param {Point} k factor
54757 * @return {Point} output point
54759 mult: function(k) { return this.clone()._mult(k); },
54762 * Divide this point's x & y coordinates by a factor,
54763 * yielding a new point.
54764 * @param {Point} k factor
54765 * @return {Point} output point
54767 div: function(k) { return this.clone()._div(k); },
54770 * Rotate this point around the 0, 0 origin by an angle a,
54772 * @param {Number} a angle to rotate around, in radians
54773 * @return {Point} output point
54775 rotate: function(a) { return this.clone()._rotate(a); },
54778 * Rotate this point around p point by an angle a,
54780 * @param {Number} a angle to rotate around, in radians
54781 * @param {Point} p Point to rotate around
54782 * @return {Point} output point
54784 rotateAround: function(a,p) { return this.clone()._rotateAround(a,p); },
54787 * Multiply this point by a 4x1 transformation matrix
54788 * @param {Array<Number>} m transformation matrix
54789 * @return {Point} output point
54791 matMult: function(m) { return this.clone()._matMult(m); },
54794 * Calculate this point but as a unit vector from 0, 0, meaning
54795 * that the distance from the resulting point to the 0, 0
54796 * coordinate will be equal to 1 and the angle from the resulting
54797 * point to the 0, 0 coordinate will be the same as before.
54798 * @return {Point} unit vector point
54800 unit: function() { return this.clone()._unit(); },
54803 * Compute a perpendicular point, where the new y coordinate
54804 * is the old x coordinate and the new x coordinate is the old y
54805 * coordinate multiplied by -1
54806 * @return {Point} perpendicular point
54808 perp: function() { return this.clone()._perp(); },
54811 * Return a version of this point with the x & y coordinates
54812 * rounded to integers.
54813 * @return {Point} rounded point
54815 round: function() { return this.clone()._round(); },
54818 * Return the magitude of this point: this is the Euclidean
54819 * distance from the 0, 0 coordinate to this point's x and y
54821 * @return {Number} magnitude
54824 return Math.sqrt(this.x * this.x + this.y * this.y);
54828 * Judge whether this point is equal to another point, returning
54830 * @param {Point} other the other point
54831 * @return {boolean} whether the points are equal
54833 equals: function(other) {
54834 return this.x === other.x &&
54835 this.y === other.y;
54839 * Calculate the distance from this point to another point
54840 * @param {Point} p the other point
54841 * @return {Number} distance
54843 dist: function(p) {
54844 return Math.sqrt(this.distSqr(p));
54848 * Calculate the distance from this point to another point,
54849 * without the square root step. Useful if you're comparing
54850 * relative distances.
54851 * @param {Point} p the other point
54852 * @return {Number} distance
54854 distSqr: function(p) {
54855 var dx = p.x - this.x,
54857 return dx * dx + dy * dy;
54861 * Get the angle from the 0, 0 coordinate to this point, in radians
54863 * @return {Number} angle
54865 angle: function() {
54866 return Math.atan2(this.y, this.x);
54870 * Get the angle from this point to another point, in radians
54871 * @param {Point} b the other point
54872 * @return {Number} angle
54874 angleTo: function(b) {
54875 return Math.atan2(this.y - b.y, this.x - b.x);
54879 * Get the angle between this point and another point, in radians
54880 * @param {Point} b the other point
54881 * @return {Number} angle
54883 angleWith: function(b) {
54884 return this.angleWithSep(b.x, b.y);
54888 * Find the angle of the two vectors, solving the formula for
54889 * the cross product a x b = |a||b|sin(θ) for θ.
54890 * @param {Number} x the x-coordinate
54891 * @param {Number} y the y-coordinate
54892 * @return {Number} the angle in radians
54894 angleWithSep: function(x, y) {
54896 this.x * y - this.y * x,
54897 this.x * x + this.y * y);
54900 _matMult: function(m) {
54901 var x = m[0] * this.x + m[1] * this.y,
54902 y = m[2] * this.x + m[3] * this.y;
54908 _add: function(p) {
54914 _sub: function(p) {
54920 _mult: function(k) {
54926 _div: function(k) {
54932 _multByPoint: function(p) {
54938 _divByPoint: function(p) {
54944 _unit: function() {
54945 this._div(this.mag());
54949 _perp: function() {
54956 _rotate: function(angle) {
54957 var cos = Math.cos(angle),
54958 sin = Math.sin(angle),
54959 x = cos * this.x - sin * this.y,
54960 y = sin * this.x + cos * this.y;
54966 _rotateAround: function(angle, p) {
54967 var cos = Math.cos(angle),
54968 sin = Math.sin(angle),
54969 x = p.x + cos * (this.x - p.x) - sin * (this.y - p.y),
54970 y = p.y + sin * (this.x - p.x) + cos * (this.y - p.y);
54976 _round: function() {
54977 this.x = Math.round(this.x);
54978 this.y = Math.round(this.y);
54984 * Construct a point from an array if necessary, otherwise if the input
54985 * is already a Point, or an unknown type, return it unchanged
54986 * @param {Array<Number>|Point|*} a any kind of input value
54987 * @return {Point} constructed point, or passed-through value.
54990 * var point = Point.convert([0, 1]);
54991 * // is equivalent to
54992 * var point = new Point(0, 1);
54994 Point.convert = function (a) {
54995 if (a instanceof Point) {
54998 if (Array.isArray(a)) {
54999 return new Point(a[0], a[1]);
55004 var vectortilefeature = VectorTileFeature;
55006 function VectorTileFeature(pbf, end, extent, keys, values) {
55008 this.properties = {};
55009 this.extent = extent;
55014 this._geometry = -1;
55016 this._values = values;
55018 pbf.readFields(readFeature, this, end);
55021 function readFeature(tag, feature, pbf) {
55022 if (tag == 1) feature.id = pbf.readVarint();
55023 else if (tag == 2) readTag(pbf, feature);
55024 else if (tag == 3) feature.type = pbf.readVarint();
55025 else if (tag == 4) feature._geometry = pbf.pos;
55028 function readTag(pbf, feature) {
55029 var end = pbf.readVarint() + pbf.pos;
55031 while (pbf.pos < end) {
55032 var key = feature._keys[pbf.readVarint()],
55033 value = feature._values[pbf.readVarint()];
55034 feature.properties[key] = value;
55038 VectorTileFeature.types = ['Unknown', 'Point', 'LineString', 'Polygon'];
55040 VectorTileFeature.prototype.loadGeometry = function() {
55041 var pbf = this._pbf;
55042 pbf.pos = this._geometry;
55044 var end = pbf.readVarint() + pbf.pos,
55052 while (pbf.pos < end) {
55054 var cmdLen = pbf.readVarint();
55055 cmd = cmdLen & 0x7;
55056 length = cmdLen >> 3;
55061 if (cmd === 1 || cmd === 2) {
55062 x += pbf.readSVarint();
55063 y += pbf.readSVarint();
55065 if (cmd === 1) { // moveTo
55066 if (line) lines.push(line);
55070 line.push(new pointGeometry(x, y));
55072 } else if (cmd === 7) {
55074 // Workaround for https://github.com/mapbox/mapnik-vector-tile/issues/90
55076 line.push(line[0].clone()); // closePolygon
55080 throw new Error('unknown command ' + cmd);
55084 if (line) lines.push(line);
55089 VectorTileFeature.prototype.bbox = function() {
55090 var pbf = this._pbf;
55091 pbf.pos = this._geometry;
55093 var end = pbf.readVarint() + pbf.pos,
55103 while (pbf.pos < end) {
55105 var cmdLen = pbf.readVarint();
55106 cmd = cmdLen & 0x7;
55107 length = cmdLen >> 3;
55112 if (cmd === 1 || cmd === 2) {
55113 x += pbf.readSVarint();
55114 y += pbf.readSVarint();
55115 if (x < x1) x1 = x;
55116 if (x > x2) x2 = x;
55117 if (y < y1) y1 = y;
55118 if (y > y2) y2 = y;
55120 } else if (cmd !== 7) {
55121 throw new Error('unknown command ' + cmd);
55125 return [x1, y1, x2, y2];
55128 VectorTileFeature.prototype.toGeoJSON = function(x, y, z) {
55129 var size = this.extent * Math.pow(2, z),
55130 x0 = this.extent * x,
55131 y0 = this.extent * y,
55132 coords = this.loadGeometry(),
55133 type = VectorTileFeature.types[this.type],
55136 function project(line) {
55137 for (var j = 0; j < line.length; j++) {
55138 var p = line[j], y2 = 180 - (p.y + y0) * 360 / size;
55140 (p.x + x0) * 360 / size - 180,
55141 360 / Math.PI * Math.atan(Math.exp(y2 * Math.PI / 180)) - 90
55146 switch (this.type) {
55149 for (i = 0; i < coords.length; i++) {
55150 points[i] = coords[i][0];
55157 for (i = 0; i < coords.length; i++) {
55158 project(coords[i]);
55163 coords = classifyRings(coords);
55164 for (i = 0; i < coords.length; i++) {
55165 for (j = 0; j < coords[i].length; j++) {
55166 project(coords[i][j]);
55172 if (coords.length === 1) {
55173 coords = coords[0];
55175 type = 'Multi' + type;
55182 coordinates: coords
55184 properties: this.properties
55187 if ('id' in this) {
55188 result.id = this.id;
55194 // classifies an array of rings into polygons with outer rings and holes
55196 function classifyRings(rings) {
55197 var len = rings.length;
55199 if (len <= 1) return [rings];
55205 for (var i = 0; i < len; i++) {
55206 var area = signedArea(rings[i]);
55207 if (area === 0) continue;
55209 if (ccw === undefined) ccw = area < 0;
55211 if (ccw === area < 0) {
55212 if (polygon) polygons.push(polygon);
55213 polygon = [rings[i]];
55216 polygon.push(rings[i]);
55219 if (polygon) polygons.push(polygon);
55224 function signedArea(ring) {
55226 for (var i = 0, len = ring.length, j = len - 1, p1, p2; i < len; j = i++) {
55229 sum += (p2.x - p1.x) * (p1.y + p2.y);
55234 var vectortilelayer = VectorTileLayer;
55236 function VectorTileLayer(pbf, end) {
55240 this.extent = 4096;
55247 this._features = [];
55249 pbf.readFields(readLayer, this, end);
55251 this.length = this._features.length;
55254 function readLayer(tag, layer, pbf) {
55255 if (tag === 15) layer.version = pbf.readVarint();
55256 else if (tag === 1) layer.name = pbf.readString();
55257 else if (tag === 5) layer.extent = pbf.readVarint();
55258 else if (tag === 2) layer._features.push(pbf.pos);
55259 else if (tag === 3) layer._keys.push(pbf.readString());
55260 else if (tag === 4) layer._values.push(readValueMessage(pbf));
55263 function readValueMessage(pbf) {
55265 end = pbf.readVarint() + pbf.pos;
55267 while (pbf.pos < end) {
55268 var tag = pbf.readVarint() >> 3;
55270 value = tag === 1 ? pbf.readString() :
55271 tag === 2 ? pbf.readFloat() :
55272 tag === 3 ? pbf.readDouble() :
55273 tag === 4 ? pbf.readVarint64() :
55274 tag === 5 ? pbf.readVarint() :
55275 tag === 6 ? pbf.readSVarint() :
55276 tag === 7 ? pbf.readBoolean() : null;
55282 // return feature `i` from this layer as a `VectorTileFeature`
55283 VectorTileLayer.prototype.feature = function(i) {
55284 if (i < 0 || i >= this._features.length) throw new Error('feature index out of bounds');
55286 this._pbf.pos = this._features[i];
55288 var end = this._pbf.readVarint() + this._pbf.pos;
55289 return new vectortilefeature(this._pbf, end, this.extent, this._keys, this._values);
55292 var vectortile = VectorTile;
55294 function VectorTile(pbf, end) {
55295 this.layers = pbf.readFields(readTile, {}, end);
55298 function readTile(tag, layers, pbf) {
55300 var layer = new vectortilelayer(pbf, pbf.readVarint() + pbf.pos);
55301 if (layer.length) layers[layer.name] = layer;
55305 var VectorTile$1 = vectortile;
55306 var VectorTileFeature$1 = vectortilefeature;
55307 var VectorTileLayer$1 = vectortilelayer;
55310 VectorTile: VectorTile$1,
55311 VectorTileFeature: VectorTileFeature$1,
55312 VectorTileLayer: VectorTileLayer$1
55315 var tiler$6 = utilTiler().tileSize(512).margin(1);
55316 var dispatch$7 = dispatch('loadedData');
55320 function abortRequest$6(controller) {
55321 controller.abort();
55325 function vtToGeoJSON(data, tile, mergeCache) {
55326 var vectorTile$1 = new vectorTile.VectorTile(new pbf(data));
55327 var layers = Object.keys(vectorTile$1.layers);
55328 if (!Array.isArray(layers)) { layers = [layers]; }
55331 layers.forEach(function(layerID) {
55332 var layer = vectorTile$1.layers[layerID];
55334 for (var i = 0; i < layer.length; i++) {
55335 var feature = layer.feature(i).toGeoJSON(tile.xyz[0], tile.xyz[1], tile.xyz[2]);
55336 var geometry = feature.geometry;
55338 // Treat all Polygons as MultiPolygons
55339 if (geometry.type === 'Polygon') {
55340 geometry.type = 'MultiPolygon';
55341 geometry.coordinates = [geometry.coordinates];
55344 // Clip to tile bounds
55345 if (geometry.type === 'MultiPolygon') {
55346 var isClipped = false;
55347 var featureClip = turf_bboxClip(feature, tile.extent.rectangle());
55348 if (!fastDeepEqual(feature.geometry, featureClip.geometry)) {
55349 // feature = featureClip;
55352 if (!feature.geometry.coordinates.length) continue; // not actually on this tile
55353 if (!feature.geometry.coordinates[0].length) continue; // not actually on this tile
55356 // Generate some unique IDs and add some metadata
55357 var featurehash = utilHashcode(fastJsonStableStringify(feature));
55358 var propertyhash = utilHashcode(fastJsonStableStringify(feature.properties || {}));
55359 feature.__layerID__ = layerID.replace(/[^_a-zA-Z0-9\-]/g, '_');
55360 feature.__featurehash__ = featurehash;
55361 feature.__propertyhash__ = propertyhash;
55362 features.push(feature);
55364 // Clipped Polygons at same zoom with identical properties can get merged
55365 if (isClipped && geometry.type === 'MultiPolygon') {
55366 var merged = mergeCache[propertyhash];
55367 if (merged && merged.length) {
55368 var other = merged[0];
55369 var coords = martinez.union(
55370 feature.geometry.coordinates, other.geometry.coordinates
55373 if (!coords || !coords.length) {
55374 continue; // something failed in martinez union
55377 merged.push(feature);
55378 for (var j = 0; j < merged.length; j++) { // all these features get...
55379 merged[j].geometry.coordinates = coords; // same coords
55380 merged[j].__featurehash__ = featurehash; // same hash, so deduplication works
55383 mergeCache[propertyhash] = [feature];
55394 function loadTile(source, tile) {
55395 if (source.loaded[tile.id] || source.inflight[tile.id]) return;
55397 var url = source.template
55398 .replace('{x}', tile.xyz[0])
55399 .replace('{y}', tile.xyz[1])
55400 // TMS-flipped y coordinate
55401 .replace(/\{[t-]y\}/, Math.pow(2, tile.xyz[2]) - tile.xyz[1] - 1)
55402 .replace(/\{z(oom)?\}/, tile.xyz[2])
55403 .replace(/\{switch:([^}]+)\}/, function(s, r) {
55404 var subdomains = r.split(',');
55405 return subdomains[(tile.xyz[0] + tile.xyz[1]) % subdomains.length];
55409 var controller = new AbortController();
55410 source.inflight[tile.id] = controller;
55412 fetch(url, { signal: controller.signal })
55413 .then(function(response) {
55414 if (!response.ok) {
55415 throw new Error(response.status + ' ' + response.statusText);
55417 source.loaded[tile.id] = [];
55418 delete source.inflight[tile.id];
55419 return response.arrayBuffer();
55421 .then(function(data) {
55423 throw new Error('No Data');
55426 var z = tile.xyz[2];
55427 if (!source.canMerge[z]) {
55428 source.canMerge[z] = {}; // initialize mergeCache
55431 source.loaded[tile.id] = vtToGeoJSON(data, tile, source.canMerge[z]);
55432 dispatch$7.call('loadedData');
55434 .catch(function() {
55435 source.loaded[tile.id] = [];
55436 delete source.inflight[tile.id];
55441 var serviceVectorTile = {
55448 this.event = utilRebind(this, dispatch$7, 'on');
55452 reset: function() {
55453 for (var sourceID in _vtCache) {
55454 var source = _vtCache[sourceID];
55455 if (source && source.inflight) {
55456 Object.values(source.inflight).forEach(abortRequest$6);
55464 addSource: function(sourceID, template) {
55465 _vtCache[sourceID] = { template: template, inflight: {}, loaded: {}, canMerge: {} };
55466 return _vtCache[sourceID];
55470 data: function(sourceID, projection) {
55471 var source = _vtCache[sourceID];
55472 if (!source) return [];
55474 var tiles = tiler$6.getTiles(projection);
55478 for (var i = 0; i < tiles.length; i++) {
55479 var features = source.loaded[tiles[i].id];
55480 if (!features || !features.length) continue;
55482 for (var j = 0; j < features.length; j++) {
55483 var feature = features[j];
55484 var hash = feature.__featurehash__;
55485 if (seen[hash]) continue;
55488 // return a shallow copy, because the hash may change
55489 // later if this feature gets merged with another
55490 results.push(Object.assign({}, feature)); // shallow copy
55498 loadTiles: function(sourceID, template, projection) {
55499 var source = _vtCache[sourceID];
55501 source = this.addSource(sourceID, template);
55504 var tiles = tiler$6.getTiles(projection);
55506 // abort inflight requests that are no longer needed
55507 Object.keys(source.inflight).forEach(function(k) {
55508 var wanted = tiles.find(function(tile) { return k === tile.id; });
55510 abortRequest$6(source.inflight[k]);
55511 delete source.inflight[k];
55515 tiles.forEach(function(tile) {
55516 loadTile(source, tile);
55521 cache: function() {
55527 var apibase$5 = 'https://www.wikidata.org/w/api.php?';
55528 var _wikidataCache = {};
55531 var serviceWikidata = {
55533 init: function() {},
55535 reset: function() {
55536 _wikidataCache = {};
55540 // Search for Wikidata items matching the query
55541 itemsForSearchQuery: function(query, callback) {
55543 if (callback) callback('No query', {});
55547 var url = apibase$5 + utilQsString({
55548 action: 'wbsearchentities',
55553 language: this.languagesToQuery()[0],
55559 .then(function(result) {
55560 if (result && result.error) {
55561 throw new Error(result.error);
55563 if (callback) callback(null, result.search || {});
55565 .catch(function(err) {
55566 if (callback) callback(err.message, {});
55571 // Given a Wikipedia language and article title,
55572 // return an array of corresponding Wikidata entities.
55573 itemsByTitle: function(lang, title, callback) {
55575 if (callback) callback('No title', {});
55579 lang = lang || 'en';
55580 var url = apibase$5 + utilQsString({
55581 action: 'wbgetentities',
55584 sites: lang.replace(/-/g, '_') + 'wiki',
55586 languages: 'en', // shrink response by filtering to one language
55591 .then(function(result) {
55592 if (result && result.error) {
55593 throw new Error(result.error);
55595 if (callback) callback(null, result.entities || {});
55597 .catch(function(err) {
55598 if (callback) callback(err.message, {});
55603 languagesToQuery: function() {
55604 return utilArrayUniq([
55605 currentLocale.toLowerCase(),
55606 currentLocale.split('-', 2)[0].toLowerCase(),
55612 entityByQID: function(qid, callback) {
55614 callback('No qid', {});
55617 if (_wikidataCache[qid]) {
55618 if (callback) callback(null, _wikidataCache[qid]);
55622 var langs = this.languagesToQuery();
55623 var url = apibase$5 + utilQsString({
55624 action: 'wbgetentities',
55628 props: 'labels|descriptions|claims|sitelinks',
55629 sitefilter: langs.map(function(d) { return d + 'wiki'; }).join('|'),
55630 languages: langs.join('|'),
55631 languagefallback: 1,
55636 .then(function(result) {
55637 if (result && result.error) {
55638 throw new Error(result.error);
55640 if (callback) callback(null, result.entities[qid] || {});
55642 .catch(function(err) {
55643 if (callback) callback(err.message, {});
55648 // Pass `params` object of the form:
55650 // qid: 'string' // brand wikidata (e.g. 'Q37158')
55653 // Get an result object used to display tag documentation
55655 // title: 'string',
55656 // description: 'string',
55657 // editURL: 'string',
55658 // imageURL: 'string',
55659 // wiki: { title: 'string', text: 'string', url: 'string' }
55662 getDocs: function(params, callback) {
55663 var langs = this.languagesToQuery();
55664 this.entityByQID(params.qid, function(err, entity) {
55665 if (err || !entity) {
55666 callback(err || 'No entity');
55672 if (entity.descriptions && Object.keys(entity.descriptions).length > 0) {
55673 description = entity.descriptions[Object.keys(entity.descriptions)[0]].value;
55679 description: description,
55680 editURL: 'https://www.wikidata.org/wiki/' + entity.id
55684 if (entity.claims) {
55685 var imageroot = 'https://commons.wikimedia.org/w/index.php';
55686 var props = ['P154','P18']; // logo image, image
55688 for (i = 0; i < props.length; i++) {
55689 prop = entity.claims[props[i]];
55690 if (prop && Object.keys(prop).length > 0) {
55691 image = prop[Object.keys(prop)[0]].mainsnak.datavalue.value;
55693 result.imageURL = imageroot + '?' + utilQsString({
55694 title: 'Special:Redirect/file/' + image,
55703 if (entity.sitelinks) {
55704 var englishLocale = (currentLocale.split('-', 2)[0].toLowerCase() === 'en');
55706 // must be one of these that we requested..
55707 for (i = 0; i < langs.length; i++) { // check each, in order of preference
55708 var w = langs[i] + 'wiki';
55709 if (entity.sitelinks[w]) {
55710 var title = entity.sitelinks[w].title;
55711 var tKey = 'inspector.wiki_reference';
55712 if (!englishLocale && langs[i] === 'en') { // user's currentLocale isn't English but
55713 tKey = 'inspector.wiki_en_reference'; // we are sending them to enwiki anyway..
55719 url: 'https://' + langs[i] + '.wikipedia.org/wiki/' + title.replace(/ /g, '_')
55726 callback(null, result);
55732 var endpoint = 'https://en.wikipedia.org/w/api.php?';
55734 var serviceWikipedia = {
55736 init: function() {},
55737 reset: function() {},
55740 search: function(lang, query, callback) {
55742 if (callback) callback('No Query', []);
55746 lang = lang || 'en';
55747 var url = endpoint.replace('en', lang) +
55752 srinfo: 'suggestion',
55759 .then(function(result) {
55760 if (result && result.error) {
55761 throw new Error(result.error);
55762 } else if (!result || !result.query || !result.query.search) {
55763 throw new Error('No Results');
55766 var titles = result.query.search.map(function(d) { return d.title; });
55767 callback(null, titles);
55770 .catch(function(err) {
55771 if (callback) callback(err, []);
55776 suggestions: function(lang, query, callback) {
55778 if (callback) callback('', []);
55782 lang = lang || 'en';
55783 var url = endpoint.replace('en', lang) +
55785 action: 'opensearch',
55794 .then(function(result) {
55795 if (result && result.error) {
55796 throw new Error(result.error);
55797 } else if (!result || result.length < 2) {
55798 throw new Error('No Results');
55800 if (callback) callback(null, result[1] || []);
55802 .catch(function(err) {
55803 if (callback) callback(err.message, []);
55808 translations: function(lang, title, callback) {
55810 if (callback) callback('No Title');
55814 var url = endpoint.replace('en', lang) +
55825 .then(function(result) {
55826 if (result && result.error) {
55827 throw new Error(result.error);
55828 } else if (!result || !result.query || !result.query.pages) {
55829 throw new Error('No Results');
55832 var list = result.query.pages[Object.keys(result.query.pages)[0]];
55833 var translations = {};
55834 if (list && list.langlinks) {
55835 list.langlinks.forEach(function(d) { translations[d.lang] = d['*']; });
55837 callback(null, translations);
55840 .catch(function(err) {
55841 if (callback) callback(err.message);
55848 geocoder: serviceNominatim,
55849 keepRight: serviceKeepRight,
55850 improveOSM: serviceImproveOSM,
55851 mapillary: serviceMapillary,
55852 openstreetcam: serviceOpenstreetcam,
55854 osmWikibase: serviceOsmWikibase,
55855 maprules: serviceMapRules,
55856 streetside: serviceStreetside,
55857 taginfo: serviceTaginfo,
55858 vectorTile: serviceVectorTile,
55859 wikidata: serviceWikidata,
55860 wikipedia: serviceWikipedia
55863 function svgIcon(name, svgklass, useklass) {
55864 return function drawIcon(selection) {
55865 selection.selectAll('svg.icon')
55869 .attr('class', 'icon ' + (svgklass || ''))
55871 .attr('xlink:href', name)
55872 .attr('class', useklass);
55876 function uiNoteComments() {
55880 function noteComments(selection) {
55881 if (_note.isNew()) return; // don't draw .comments-container
55883 var comments = selection.selectAll('.comments-container')
55886 comments = comments.enter()
55888 .attr('class', 'comments-container')
55891 var commentEnter = comments.selectAll('.comment')
55892 .data(_note.comments)
55895 .attr('class', 'comment');
55899 .attr('class', function(d) { return 'comment-avatar user-' + d.uid; })
55900 .call(svgIcon('#iD-icon-avatar', 'comment-avatar-icon'));
55902 var mainEnter = commentEnter
55904 .attr('class', 'comment-main');
55906 var metadataEnter = mainEnter
55908 .attr('class', 'comment-metadata');
55912 .attr('class', 'comment-author')
55913 .each(function(d) {
55914 var selection = d3_select(this);
55915 var osm = services$1.osm;
55916 if (osm && d.user) {
55917 selection = selection
55919 .attr('class', 'comment-author-link')
55920 .attr('href', osm.userURL(d.user))
55921 .attr('tabindex', -1)
55922 .attr('target', '_blank');
55925 .text(function(d) { return d.user || t('note.anonymous'); });
55930 .attr('class', 'comment-date')
55931 .text(function(d) {
55932 return t('note.status.' + d.action, { when: localeDateString(d.date) });
55937 .attr('class', 'comment-text')
55938 .html(function(d) { return d.html; });
55941 .call(replaceAvatars);
55945 function replaceAvatars(selection) {
55946 var osm = services$1.osm;
55949 var uids = {}; // gather uids in the comment thread
55950 _note.comments.forEach(function(d) {
55951 if (d.uid) uids[d.uid] = true;
55954 Object.keys(uids).forEach(function(uid) {
55955 osm.loadUser(uid, function(err, user) {
55956 if (!user || !user.image_url) return;
55958 selection.selectAll('.comment-avatar.user-' + uid)
55961 .attr('class', 'icon comment-avatar-icon')
55962 .attr('src', user.image_url)
55963 .attr('alt', user.display_name);
55969 function localeDateString(s) {
55970 if (!s) return null;
55971 var detected = utilDetect();
55972 var options = { day: 'numeric', month: 'short', year: 'numeric' };
55973 s = s.replace(/-/g, '/'); // fix browser-specific Date() issues
55974 var d = new Date(s);
55975 if (isNaN(d.getTime())) return null;
55976 return d.toLocaleDateString(detected.locale, options);
55980 noteComments.note = function(val) {
55981 if (!arguments.length) return _note;
55983 return noteComments;
55987 return noteComments;
55990 function uiNoteHeader() {
55994 function noteHeader(selection) {
55995 var header = selection.selectAll('.note-header')
55997 (_note ? [_note] : []),
55998 function(d) { return d.status + d.id; }
56004 var headerEnter = header.enter()
56006 .attr('class', 'note-header');
56008 var iconEnter = headerEnter
56010 .attr('class', function(d) { return 'note-header-icon ' + d.status; })
56011 .classed('new', function(d) { return d.id < 0; });
56015 .attr('class', 'preset-icon-28')
56016 .call(svgIcon('#iD-icon-note', 'note-fill'));
56018 iconEnter.each(function(d) {
56019 var statusIcon = '#iD-icon-' + (d.id < 0 ? 'plus' : (d.status === 'open' ? 'close' : 'apply'));
56022 .attr('class', 'note-icon-annotation')
56023 .call(svgIcon(statusIcon, 'icon-annotation'));
56028 .attr('class', 'note-header-label')
56029 .text(function(d) {
56030 if (_note.isNew()) { return t('note.new'); }
56031 return t('note.note') + ' ' + d.id + ' ' +
56032 (d.status === 'closed' ? t('note.closed') : '');
56037 noteHeader.note = function(val) {
56038 if (!arguments.length) return _note;
56047 function uiNoteReport() {
56050 function noteReport(selection) {
56052 if (services$1.osm && (_note instanceof osmNote) && (!_note.isNew())) {
56053 url = services$1.osm.noteReportURL(_note);
56056 var link = selection.selectAll('.note-report')
56057 .data(url ? [url] : []);
56064 var linkEnter = link.enter()
56066 .attr('class', 'note-report')
56067 .attr('target', '_blank')
56068 .attr('href', function(d) { return d; })
56069 .call(svgIcon('#iD-icon-out-link', 'inline'));
56073 .text(t('note.report'));
56077 noteReport.note = function(val) {
56078 if (!arguments.length) return _note;
56086 var _tooltipID = 0;
56088 function tooltip(klass) {
56089 var _id = _tooltipID++;
56090 var tooltip = function(selection) {
56091 selection.each(setup);
56093 var _animation = utilFunctor(false);
56094 var _title = function() {
56095 var title = this.getAttribute('data-original-title');
56099 title = this.getAttribute('title');
56100 this.removeAttribute('title');
56101 this.setAttribute('data-original-title', title);
56105 var _html = utilFunctor(false);
56106 var _placement = utilFunctor('top');
56109 tooltip.title = function(val) {
56110 if (arguments.length) {
56111 _title = utilFunctor(val);
56119 tooltip.html = function(val) {
56120 if (arguments.length) {
56121 _html = utilFunctor(val);
56129 tooltip.placement = function(val) {
56130 if (arguments.length) {
56131 _placement = utilFunctor(val);
56139 tooltip.show = function(selection) {
56140 selection.each(show);
56144 tooltip.hide = function(selection) {
56145 selection.each(hide);
56149 tooltip.toggle = function(selection) {
56150 selection.each(toggle);
56154 tooltip.destroy = function(selection, selector) {
56155 // by default, just destroy the current tooltip
56156 selector = selector || '.tooltip-' + _id;
56159 .on('mouseenter.tooltip', null)
56160 .on('mouseleave.tooltip', null)
56161 .attr('title', function() {
56162 return this.getAttribute('data-original-title') || this.getAttribute('title');
56164 .attr('data-original-title', null)
56165 .selectAll(selector)
56170 tooltip.destroyAny = function(selection) {
56171 selection.call(tooltip.destroy, '.tooltip');
56174 var isTouchEvent = false;
56177 var root = d3_select(this);
56178 var animate = _animation.apply(this, arguments);
56179 var tip = root.selectAll('.tooltip-' + _id)
56182 var enter = tip.enter()
56184 .attr('class', 'tooltip tooltip-' + _id + ' ' + (klass ? klass : ''));
56188 .attr('class', 'tooltip-arrow');
56192 .attr('class', 'tooltip-inner');
56198 tip.classed('fade', true);
56201 var place = _placement.apply(this, arguments);
56202 tip.classed(place, true);
56204 root.on('touchstart.tooltip', function() {
56205 // hack to avoid showing tooltips upon touch input
56206 isTouchEvent = true;
56208 root.on('mouseenter.tooltip', show);
56209 root.on('mouseleave.tooltip', hide);
56214 if (isTouchEvent) {
56215 isTouchEvent = false;
56218 var root = d3_select(this);
56219 var content = _title.apply(this, arguments);
56220 var tip = root.selectAll('.tooltip-' + _id);
56222 if (tip.empty()) { // tooltip was removed somehow, put it back
56223 root.call(tooltip.destroy);
56225 tip = root.selectAll('.tooltip-' + _id);
56228 tip.classed('in', true);
56229 var markup = _html.apply(this, arguments);
56231 tip.selectAll('.tooltip-inner')[markup ? 'html' : 'text'](content);
56232 var place = _placement.apply(this, arguments);
56233 var outer = getPosition(root.node());
56234 var inner = getPosition(tip.node());
56239 pos = { x: outer.x + (outer.w - inner.w) / 2, y: outer.y - inner.h };
56242 pos = { x: outer.x + outer.w, y: outer.y + (outer.h - inner.h) / 2 };
56245 pos = { x: outer.x - inner.w, y: outer.y + (outer.h - inner.h) / 2 };
56248 pos = { x: outer.x + (outer.w - inner.w) / 2, y: outer.y + outer.h };
56253 tip.style('left', ~~pos.x + 'px').style('top', ~~pos.y + 'px');
56255 tip.style('left', null).style('top', null);
56258 this.tooltipVisible = true;
56261 function getPosition(node) {
56262 var mode = d3_select(node).style('position');
56263 if (mode === 'absolute' || mode === 'static') {
56265 x: node.offsetLeft,
56267 w: node.offsetWidth,
56268 h: node.offsetHeight
56274 w: node.offsetWidth,
56275 h: node.offsetHeight
56283 d3_select(this).selectAll('.tooltip-' + _id).classed('in', false);
56284 this.tooltipVisible = false;
56288 function toggle() {
56289 if (this.tooltipVisible) {
56290 hide.apply(this, arguments);
56292 show.apply(this, arguments);
56300 function uiQuickLinks() {
56304 function quickLinks(selection) {
56305 var container = selection.selectAll('.quick-links')
56308 container = container.enter()
56310 .attr('class', 'quick-links')
56313 var items = container.selectAll('.quick-link')
56314 .data(_choices, function(d) { return d.id; });
56321 .attr('class', function(d) { return 'quick-link quick-link-' + d.id; })
56323 .text(function(d) { return t(d.label); })
56324 .each(function(d) {
56325 if (typeof d.tooltip !== 'function') return;
56327 .call(tooltip().html(true).title(d.tooltip).placement('bottom'));
56329 .on('click', function(d) {
56330 if (typeof d.click !== 'function') return;
56331 event.preventDefault();
56337 // val should be an array of choices like:
56340 // label: 'translation.key',
56341 // tooltip: function(d),
56342 // click: function(d)
56344 quickLinks.choices = function(val) {
56345 if (!arguments.length) return _choices;
56354 function uiTooltipHtml(text, key, heading) {
56358 s += '<div class="tooltip-heading"><span>' + heading + '</span></div>';
56361 s += '<div class="tooltip-text"><span>' + text + '</span></div>';
56364 s += '<div class="keyhint-wrap"><span>' + t('tooltip_keyhint') + '</span>' +
56365 '<span class="keyhint">' + key + '</span></div>';
56371 function uiViewOnOSM(context) {
56372 var _what; // an osmEntity or osmNote
56375 function viewOnOSM(selection) {
56377 if (_what instanceof osmEntity) {
56378 url = context.connection().entityURL(_what);
56379 } else if (_what instanceof osmNote) {
56380 url = context.connection().noteURL(_what);
56383 var data = ((!_what || _what.isNew()) ? [] : [_what]);
56384 var link = selection.selectAll('.view-on-osm')
56385 .data(data, function(d) { return d.id; });
56392 var linkEnter = link.enter()
56394 .attr('class', 'view-on-osm')
56395 .attr('target', '_blank')
56397 .call(svgIcon('#iD-icon-out-link', 'inline'));
56401 .text(t('inspector.view_on_osm'));
56405 viewOnOSM.what = function(_) {
56406 if (!arguments.length) return _what;
56414 function uiNoteEditor(context) {
56415 var dispatch$1 = dispatch('change');
56416 var quickLinks = uiQuickLinks();
56417 var noteComments = uiNoteComments();
56418 var noteHeader = uiNoteHeader();
56420 // var formFields = uiFormFields(context);
56426 function noteEditor(selection) {
56430 label: 'inspector.zoom_to.title',
56431 tooltip: function() {
56432 return uiTooltipHtml(t('inspector.zoom_to.tooltip_note'), t('inspector.zoom_to.key'));
56434 click: function zoomTo() {
56435 context.mode().zoomToSelected();
56440 var header = selection.selectAll('.header')
56443 var headerEnter = header.enter()
56445 .attr('class', 'header fillL');
56449 .attr('class', 'fr note-editor-close')
56450 .on('click', function() {
56451 context.enter(modeBrowse(context));
56453 .call(svgIcon('#iD-icon-close'));
56457 .text(t('note.title'));
56460 var body = selection.selectAll('.body')
56463 body = body.enter()
56465 .attr('class', 'body')
56468 var editor = body.selectAll('.note-editor')
56473 .attr('class', 'modal-section note-editor')
56475 .call(noteHeader.note(_note))
56476 .call(quickLinks.choices(choices))
56477 .call(noteComments.note(_note))
56478 .call(noteSaveSection);
56481 var footer = selection.selectAll('.footer')
56486 .attr('class', 'footer')
56488 .call(uiViewOnOSM(context).what(_note))
56489 .call(uiNoteReport(context).note(_note));
56492 // rerender the note editor on any auth change
56493 var osm = services$1.osm;
56495 osm.on('change.note-save', function() {
56496 selection.call(noteEditor);
56502 function noteSaveSection(selection) {
56503 var isSelected = (_note && _note.id === context.selectedNoteID());
56504 var noteSave = selection.selectAll('.note-save')
56505 .data((isSelected ? [_note] : []), function(d) { return d.status + d.id; });
56512 var noteSaveEnter = noteSave.enter()
56514 .attr('class', 'note-save save-section cf');
56516 // // if new note, show categories to pick from
56517 // if (_note.isNew()) {
56518 // var presets = context.presets();
56520 // // NOTE: this key isn't a age and therefore there is no documentation (yet)
56522 // uiField(context, presets.field('category'), null, { show: true, revert: false }),
56525 // _fieldsArr.forEach(function(field) {
56527 // .on('change', changeCategory);
56532 // .attr('class', 'note-category')
56533 // .call(formFields.fieldsArr(_fieldsArr));
56536 // function changeCategory() {
56537 // // NOTE: perhaps there is a better way to get value
56538 // var val = d3_select('input[name=\'category\']:checked').property('__data__') || undefined;
56540 // // store the unsaved category with the note itself
56541 // _note = _note.update({ newCategory: val });
56542 // var osm = services.osm;
56544 // osm.replaceNote(_note); // update note cache
56547 // .call(noteSaveButtons);
56552 .attr('class', '.note-save-header')
56554 return _note.isNew() ? t('note.newDescription') : t('note.newComment');
56558 .append('textarea')
56559 .attr('class', 'new-comment-input')
56560 .attr('placeholder', t('note.inputPlaceholder'))
56561 .attr('maxlength', 1000)
56562 .property('value', function(d) { return d.newComment; })
56564 .on('keydown.note-input', keydown)
56565 .on('input.note-input', changeInput)
56566 .on('blur.note-input', changeInput);
56569 noteSave = noteSaveEnter
56572 .call(noteSaveButtons);
56575 // fast submit if user presses cmd+enter
56576 function keydown() {
56577 if (!(event.keyCode === 13 && event.metaKey)) return;
56579 var osm = services$1.osm;
56582 var hasAuth = osm.authenticated();
56583 if (!hasAuth) return;
56585 if (!_note.newComment) return;
56587 event.preventDefault();
56590 .on('keydown.note-input', null);
56592 // focus on button and submit
56593 window.setTimeout(function() {
56594 if (_note.isNew()) {
56595 noteSave.selectAll('.save-button').node().focus();
56598 noteSave.selectAll('.comment-button').node().focus();
56599 clickComment(_note);
56605 function changeInput() {
56606 var input = d3_select(this);
56607 var val = input.property('value').trim() || undefined;
56609 // store the unsaved comment with the note itself
56610 _note = _note.update({ newComment: val });
56612 var osm = services$1.osm;
56614 osm.replaceNote(_note); // update note cache
56618 .call(noteSaveButtons);
56623 function userDetails(selection) {
56624 var detailSection = selection.selectAll('.detail-section')
56627 detailSection = detailSection.enter()
56629 .attr('class', 'detail-section')
56630 .merge(detailSection);
56632 var osm = services$1.osm;
56635 // Add warning if user is not logged in
56636 var hasAuth = osm.authenticated();
56637 var authWarning = detailSection.selectAll('.auth-warning')
56638 .data(hasAuth ? [] : [0]);
56643 .style('opacity', 0)
56646 var authEnter = authWarning.enter()
56647 .insert('div', '.tag-reference-body')
56648 .attr('class', 'field-warning auth-warning')
56649 .style('opacity', 0);
56652 .call(svgIcon('#iD-icon-alert', 'inline'));
56656 .text(t('note.login'));
56660 .attr('target', '_blank')
56661 .call(svgIcon('#iD-icon-out-link', 'inline'))
56664 .on('click.note-login', function() {
56665 event.preventDefault();
56666 osm.authenticate();
56672 .style('opacity', 1);
56675 var prose = detailSection.selectAll('.note-save-prose')
56676 .data(hasAuth ? [0] : []);
56681 prose = prose.enter()
56683 .attr('class', 'note-save-prose')
56684 .text(t('note.upload_explanation'))
56687 osm.userDetails(function(err, user) {
56690 var userLink = d3_select(document.createElement('div'));
56692 if (user.image_url) {
56695 .attr('src', user.image_url)
56696 .attr('class', 'icon pre-text user-icon');
56701 .attr('class', 'user-info')
56702 .text(user.display_name)
56703 .attr('href', osm.userURL(user.display_name))
56704 .attr('tabindex', -1)
56705 .attr('target', '_blank');
56708 .html(t('note.upload_explanation_with_user', { user: userLink.html() }));
56713 function noteSaveButtons(selection) {
56714 var osm = services$1.osm;
56715 var hasAuth = osm && osm.authenticated();
56717 var isSelected = (_note && _note.id === context.selectedNoteID());
56718 var buttonSection = selection.selectAll('.buttons')
56719 .data((isSelected ? [_note] : []), function(d) { return d.status + d.id; });
56722 buttonSection.exit()
56726 var buttonEnter = buttonSection.enter()
56728 .attr('class', 'buttons');
56730 if (_note.isNew()) {
56733 .attr('class', 'button cancel-button secondary-action')
56734 .text(t('confirm.cancel'));
56738 .attr('class', 'button save-button action')
56739 .text(t('note.save'));
56744 .attr('class', 'button status-button action');
56748 .attr('class', 'button comment-button action')
56749 .text(t('note.comment'));
56754 buttonSection = buttonSection
56755 .merge(buttonEnter);
56757 buttonSection.select('.cancel-button') // select and propagate data
56758 .on('click.cancel', clickCancel);
56760 buttonSection.select('.save-button') // select and propagate data
56761 .attr('disabled', isSaveDisabled)
56762 .on('click.save', clickSave);
56764 buttonSection.select('.status-button') // select and propagate data
56765 .attr('disabled', (hasAuth ? null : true))
56766 .text(function(d) {
56767 var action = (d.status === 'open' ? 'close' : 'open');
56768 var andComment = (d.newComment ? '_comment' : '');
56769 return t('note.' + action + andComment);
56771 .on('click.status', clickStatus);
56773 buttonSection.select('.comment-button') // select and propagate data
56774 .attr('disabled', isSaveDisabled)
56775 .on('click.comment', clickComment);
56778 function isSaveDisabled(d) {
56779 return (hasAuth && d.status === 'open' && d.newComment) ? null : true;
56785 function clickCancel(d) {
56786 this.blur(); // avoid keeping focus on the button - #4641
56787 var osm = services$1.osm;
56791 context.enter(modeBrowse(context));
56792 dispatch$1.call('change');
56796 function clickSave(d) {
56797 this.blur(); // avoid keeping focus on the button - #4641
56798 var osm = services$1.osm;
56800 osm.postNoteCreate(d, function(err, note) {
56801 dispatch$1.call('change', note);
56807 function clickStatus(d) {
56808 this.blur(); // avoid keeping focus on the button - #4641
56809 var osm = services$1.osm;
56811 var setStatus = (d.status === 'open' ? 'closed' : 'open');
56812 osm.postNoteUpdate(d, setStatus, function(err, note) {
56813 dispatch$1.call('change', note);
56818 function clickComment(d) {
56819 this.blur(); // avoid keeping focus on the button - #4641
56820 var osm = services$1.osm;
56822 osm.postNoteUpdate(d, d.status, function(err, note) {
56823 dispatch$1.call('change', note);
56829 noteEditor.note = function(val) {
56830 if (!arguments.length) return _note;
56836 return utilRebind(noteEditor, dispatch$1, 'on');
56839 function modeSelectNote(context, selectedNoteID) {
56845 var osm = services$1.osm;
56846 var keybinding = utilKeybinding('select-note');
56847 var noteEditor = uiNoteEditor(context)
56848 .on('change', function() {
56849 context.map().pan([0,0]); // trigger a redraw
56850 var note = checkSelectedID();
56852 context.ui().sidebar
56853 .show(noteEditor.note(note));
56857 behaviorBreathe(context),
56858 behaviorHover(context),
56859 behaviorSelect(context),
56860 behaviorLasso(context),
56861 modeDragNode(context).behavior,
56862 modeDragNote(context).behavior
56865 var newFeature = false;
56868 function checkSelectedID() {
56870 var note = osm.getNote(selectedNoteID);
56872 context.enter(modeBrowse(context));
56878 // class the note as selected, or return to browse mode if the note is gone
56879 function selectNote(drawn) {
56880 if (!checkSelectedID()) return;
56882 var selection = context.surface().selectAll('.layer-notes .note-' + selectedNoteID);
56884 if (selection.empty()) {
56885 // Return to browse mode if selected DOM elements have
56886 // disappeared because the user moved them out of view..
56887 var source = event && event.type === 'zoom' && event.sourceEvent;
56888 if (drawn && source && (source.type === 'mousemove' || source.type === 'touchmove')) {
56889 context.enter(modeBrowse(context));
56894 .classed('selected', true);
56896 context.selectedNoteID(selectedNoteID);
56902 if (d3_select('.combobox').size()) return;
56903 context.enter(modeBrowse(context));
56907 mode.zoomToSelected = function() {
56909 var note = osm.getNote(selectedNoteID);
56911 context.map().centerZoomEase(note.loc, 20);
56916 mode.newFeature = function(val) {
56917 if (!arguments.length) return newFeature;
56923 mode.enter = function() {
56924 var note = checkSelectedID();
56927 behaviors.forEach(context.install);
56930 .on(t('inspector.zoom_to.key'), mode.zoomToSelected)
56931 .on('⎋', esc, true);
56933 d3_select(document)
56938 var sidebar = context.ui().sidebar;
56939 sidebar.show(noteEditor.note(note));
56941 // expand the sidebar, avoid obscuring the note if needed
56942 sidebar.expand(sidebar.intersects(note.extent()));
56945 .on('drawn.select', selectNote);
56949 mode.exit = function() {
56950 behaviors.forEach(context.uninstall);
56952 d3_select(document)
56953 .call(keybinding.unbind);
56956 .selectAll('.layer-notes .selected')
56957 .classed('selected hover', false);
56960 .on('drawn.select', null);
56962 context.ui().sidebar
56965 context.selectedNoteID(null);
56972 function modeDragNote(context) {
56978 var edit = behaviorEdit(context);
56980 var _nudgeInterval;
56982 var _note; // most current note.. dragged note may have stale datum.
56985 function startNudge(nudge) {
56986 if (_nudgeInterval) window.clearInterval(_nudgeInterval);
56987 _nudgeInterval = window.setInterval(function() {
56988 context.pan(nudge);
56994 function stopNudge() {
56995 if (_nudgeInterval) {
56996 window.clearInterval(_nudgeInterval);
56997 _nudgeInterval = null;
57002 function origin(note) {
57003 return context.projection(note.loc);
57007 function start(note) {
57009 var osm = services$1.osm;
57011 // Get latest note from cache.. The marker may have a stale datum bound to it
57012 // and dragging it around can sometimes delete the users note comment.
57013 _note = osm.getNote(_note.id);
57016 context.surface().selectAll('.note-' + _note.id)
57017 .classed('active', true);
57019 context.perform(actionNoop());
57020 context.enter(mode);
57021 context.selectedNoteID(_note.id);
57026 event.sourceEvent.stopPropagation();
57027 _lastLoc = context.projection.invert(event.point);
57030 var nudge = geoViewportEdge(event.point, context.map().dimensions());
57039 function doMove(nudge) {
57040 nudge = nudge || [0, 0];
57042 var currPoint = (event && event.point) || context.projection(_lastLoc);
57043 var currMouse = geoVecSubtract(currPoint, nudge);
57044 var loc = context.projection.invert(currMouse);
57046 _note = _note.move(loc);
57048 var osm = services$1.osm;
57050 osm.replaceNote(_note); // update note cache
57053 context.replace(actionNoop()); // trigger redraw
57058 context.replace(actionNoop()); // trigger redraw
57061 .selectedNoteID(_note.id)
57062 .enter(modeSelectNote(context, _note.id));
57066 var drag = behaviorDrag()
57067 .selector('.layer-touch.markers .target.note.new')
57068 .surface(d3_select('#map').node())
57070 .on('start', start)
57075 mode.enter = function() {
57076 context.install(edit);
57080 mode.exit = function() {
57081 context.ui().sidebar.hover.cancel();
57082 context.uninstall(edit);
57085 .selectAll('.active')
57086 .classed('active', false);
57091 mode.behavior = drag;
57096 function uiDataHeader() {
57100 function dataHeader(selection) {
57101 var header = selection.selectAll('.data-header')
57103 (_datum ? [_datum] : []),
57104 function(d) { return d.__featurehash__; }
57110 var headerEnter = header.enter()
57112 .attr('class', 'data-header');
57114 var iconEnter = headerEnter
57116 .attr('class', 'data-header-icon');
57120 .attr('class', 'preset-icon-28')
57121 .call(svgIcon('#iD-icon-data', 'note-fill'));
57125 .attr('class', 'data-header-label')
57126 .text(t('map_data.layers.custom.title'));
57130 dataHeader.datum = function(val) {
57131 if (!arguments.length) return _datum;
57140 // This code assumes that the combobox values will not have duplicate entries.
57141 // It is keyed on the `value` of the entry. Data should be an array of objects like:
57143 // value: 'display text', // required
57144 // title: 'hover text' // optional
57147 var _comboHideTimerID;
57149 function uiCombobox(context, klass) {
57150 var dispatch$1 = dispatch('accept', 'cancel');
57151 var container = context.container();
57153 var _suggestions = [];
57156 var _selected = null;
57157 var _canAutocomplete = true;
57158 var _caseSensitive = false;
57159 var _cancelFetch = false;
57163 var _fetcher = function(val, cb) {
57164 cb(_data.filter(function(d) {
57168 .indexOf(val.toLowerCase()) !== -1;
57172 var combobox = function(input, attachTo) {
57173 if (!input || input.empty()) return;
57176 .classed('combobox-input', true)
57177 .on('focus.combo-input', focus)
57178 .on('blur.combo-input', blur)
57179 .on('keydown.combo-input', keydown)
57180 .on('keyup.combo-input', keyup)
57181 .on('input.combo-input', change)
57182 .on('mousedown.combo-input', mousedown)
57184 var parent = this.parentNode;
57185 var sibling = this.nextSibling;
57187 d3_select(parent).selectAll('.combobox-caret')
57188 .filter(function(d) { return d === input.node(); })
57189 .data([input.node()])
57191 .insert('div', function() { return sibling; })
57192 .attr('class', 'combobox-caret')
57193 .on('mousedown.combo-caret', function() {
57194 event.preventDefault(); // don't steal focus from input
57195 input.node().focus(); // focus the input as if it was clicked
57198 .on('mouseup.combo-caret', function() {
57199 event.preventDefault(); // don't steal focus from input
57205 function mousedown() {
57206 if (event.button !== 0) return; // left click only
57207 _tDown = +new Date();
57210 var start = input.property('selectionStart');
57211 var end = input.property('selectionEnd');
57212 if (start !== end) {
57213 var val = utilGetSetValue(input);
57214 input.node().setSelectionRange(val.length, val.length);
57218 input.on('mouseup.combo-input', mouseup);
57222 function mouseup() {
57223 input.on('mouseup.combo-input', null);
57224 if (event.button !== 0) return; // left click only
57225 if (input.node() !== document.activeElement) return; // exit if this input is not focused
57227 var start = input.property('selectionStart');
57228 var end = input.property('selectionEnd');
57229 if (start !== end) return; // exit if user is selecting
57231 // not showing or showing for a different field - try to show it.
57232 var combo = container.selectAll('.combobox');
57233 if (combo.empty() || combo.datum() !== input.node()) {
57234 var tOrig = _tDown;
57235 window.setTimeout(function() {
57236 if (tOrig !== _tDown) return; // exit if user double clicked
57237 fetchComboData('', function() {
57250 fetchComboData(''); // prefetch values (may warm taginfo cache)
57255 _comboHideTimerID = window.setTimeout(hide, 75);
57260 hide(); // remove any existing
57263 .insert('div', ':first-child')
57264 .datum(input.node())
57265 .attr('class', 'combobox' + (klass ? ' combobox-' + klass : ''))
57266 .style('position', 'absolute')
57267 .style('display', 'block')
57268 .style('left', '0px')
57269 .on('mousedown.combo-container', function () {
57270 // prevent moving focus out of the input field
57271 event.preventDefault();
57275 .on('scroll.combo-scroll', render, true);
57280 if (_comboHideTimerID) {
57281 window.clearTimeout(_comboHideTimerID);
57282 _comboHideTimerID = undefined;
57285 container.selectAll('.combobox')
57289 .on('scroll.combo-scroll', null);
57293 function keydown() {
57294 var shown = !container.selectAll('.combobox').empty();
57295 var tagName = input.node() ? input.node().tagName.toLowerCase() : '';
57297 switch (event.keyCode) {
57298 case 8: // ⌫ Backspace
57299 case 46: // ⌦ Delete
57300 event.stopPropagation();
57303 input.on('input.combo-input', function() {
57304 var start = input.property('selectionStart');
57305 input.node().setSelectionRange(start, start);
57306 input.on('input.combo-input', change);
57314 case 13: // ↩ Return
57315 event.preventDefault();
57316 event.stopPropagation();
57319 case 38: // ↑ Up arrow
57320 if (tagName === 'textarea' && !shown) return;
57321 event.preventDefault();
57322 if (tagName === 'input' && !shown) {
57328 case 40: // ↓ Down arrow
57329 if (tagName === 'textarea' && !shown) return;
57330 event.preventDefault();
57331 if (tagName === 'input' && !shown) {
57341 switch (event.keyCode) {
57342 case 27: // ⎋ Escape
57346 case 13: // ↩ Return
57353 // Called whenever the input value is changed (e.g. on typing)
57354 function change() {
57355 fetchComboData(value(), function() {
57357 var val = input.property('value');
57359 if (_suggestions.length) {
57360 if (input.property('selectionEnd') === val.length) {
57361 _selected = tryAutocomplete();
57370 var combo = container.selectAll('.combobox');
57371 if (combo.empty()) {
57383 // Called when the user presses up/down arrows to navigate the list
57384 function nav(dir) {
57385 if (_suggestions.length) {
57386 // try to determine previously selected index..
57388 for (var i = 0; i < _suggestions.length; i++) {
57389 if (_selected && _suggestions[i].value === _selected) {
57395 // pick new _selected
57396 index = Math.max(Math.min(index + dir, _suggestions.length - 1), 0);
57397 _selected = _suggestions[index].value;
57398 input.property('value', _selected);
57406 function ensureVisible() {
57407 var combo = container.selectAll('.combobox');
57408 if (combo.empty()) return;
57410 var containerRect = container.node().getBoundingClientRect();
57411 var comboRect = combo.node().getBoundingClientRect();
57413 if (comboRect.bottom > containerRect.bottom) {
57414 var node = attachTo ? attachTo.node() : input.node();
57415 node.scrollIntoView({ behavior: 'instant', block: 'center' });
57419 // https://stackoverflow.com/questions/11039885/scrollintoview-causing-the-whole-page-to-move
57420 var selected = combo.selectAll('.combobox-option.selected').node();
57422 selected.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
57428 var value = input.property('value');
57429 var start = input.property('selectionStart');
57430 var end = input.property('selectionEnd');
57432 if (start && end) {
57433 value = value.substring(0, start);
57440 function fetchComboData(v, cb) {
57441 _cancelFetch = false;
57443 _fetcher.call(input, v, function(results) {
57444 // already chose a value, don't overwrite or autocomplete it
57445 if (_cancelFetch) return;
57447 _suggestions = results;
57448 results.forEach(function(d) { _fetched[d.value] = d; });
57457 function tryAutocomplete() {
57458 if (!_canAutocomplete) return;
57460 var val = _caseSensitive ? value() : value().toLowerCase();
57463 // Don't autocomplete if user is typing a number - #4935
57464 if (!isNaN(parseFloat(val)) && isFinite(val)) return;
57466 var bestIndex = -1;
57467 for (var i = 0; i < _suggestions.length; i++) {
57468 var suggestion = _suggestions[i].value;
57469 var compare = _caseSensitive ? suggestion : suggestion.toLowerCase();
57471 // if search string matches suggestion exactly, pick it..
57472 if (compare === val) {
57476 // otherwise lock in the first result that starts with the search string..
57477 } else if (bestIndex === -1 && compare.indexOf(val) === 0) {
57482 if (bestIndex !== -1) {
57483 var bestVal = _suggestions[bestIndex].value;
57484 input.property('value', bestVal);
57485 input.node().setSelectionRange(val.length, bestVal.length);
57491 function render() {
57492 if (_suggestions.length < _minItems || document.activeElement !== input.node()) {
57497 var shown = !container.selectAll('.combobox').empty();
57498 if (!shown) return;
57500 var combo = container.selectAll('.combobox');
57501 var options = combo.selectAll('.combobox-option')
57502 .data(_suggestions, function(d) { return d.value; });
57510 .attr('class', 'combobox-option')
57511 .attr('title', function(d) { return d.title; })
57512 .text(function(d) { return d.display || d.value; })
57514 .classed('selected', function(d) { return d.value === _selected; })
57515 .on('click.combo-option', accept)
57518 var node = attachTo ? attachTo.node() : input.node();
57519 var rect = node.getBoundingClientRect();
57522 .style('left', (rect.left + 5) + 'px')
57523 .style('width', (rect.width - 10) + 'px')
57524 .style('top', rect.height + rect.top + 'px');
57528 // Dispatches an 'accept' event
57529 // Then hides the combobox.
57530 function accept(d) {
57531 _cancelFetch = true;
57532 var thiz = input.node();
57534 if (d) { // user clicked on a suggestion
57535 utilGetSetValue(input, d.value); // replace field contents
57536 utilTriggerEvent(input, 'change');
57539 // clear (and keep) selection
57540 var val = utilGetSetValue(input);
57541 thiz.setSelectionRange(val.length, val.length);
57544 dispatch$1.call('accept', thiz, d, val);
57549 // Dispatches an 'cancel' event
57550 // Then hides the combobox.
57551 function cancel() {
57552 _cancelFetch = true;
57553 var thiz = input.node();
57555 // clear (and remove) selection, and replace field contents
57556 var val = utilGetSetValue(input);
57557 var start = input.property('selectionStart');
57558 var end = input.property('selectionEnd');
57559 val = val.slice(0, start) + val.slice(end);
57560 utilGetSetValue(input, val);
57561 thiz.setSelectionRange(val.length, val.length);
57563 dispatch$1.call('cancel', thiz);
57570 combobox.canAutocomplete = function(val) {
57571 if (!arguments.length) return _canAutocomplete;
57572 _canAutocomplete = val;
57576 combobox.caseSensitive = function(val) {
57577 if (!arguments.length) return _caseSensitive;
57578 _caseSensitive = val;
57582 combobox.data = function(val) {
57583 if (!arguments.length) return _data;
57588 combobox.fetcher = function(val) {
57589 if (!arguments.length) return _fetcher;
57594 combobox.minItems = function(val) {
57595 if (!arguments.length) return _minItems;
57601 return utilRebind(combobox, dispatch$1, 'on');
57605 uiCombobox.off = function(input) {
57607 .on('focus.combo-input', null)
57608 .on('blur.combo-input', null)
57609 .on('keydown.combo-input', null)
57610 .on('keyup.combo-input', null)
57611 .on('input.combo-input', null)
57612 .on('mousedown.combo-input', null)
57613 .on('mouseup.combo-input', null);
57617 .on('scroll.combo-scroll', null);
57620 // toggles the visibility of ui elements, using a combination of the
57621 // hide class, which sets display=none, and a d3 transition for opacity.
57622 // this will cause blinking when called repeatedly, so check that the
57623 // value actually changes between calls.
57624 function uiToggle(show, callback) {
57625 return function(selection) {
57627 .style('opacity', show ? 0 : 1)
57628 .classed('hide', false)
57630 .style('opacity', show ? 1 : 0)
57631 .on('end', function() {
57633 .classed('hide', !show)
57634 .style('opacity', null);
57635 if (callback) callback.apply(this);
57640 function uiDisclosure(context, key, expandedDefault) {
57641 var dispatch$1 = dispatch('toggled');
57642 var _preference = (context.storage('disclosure.' + key + '.expanded'));
57643 var _expanded = (_preference === null ? !!expandedDefault : (_preference === 'true'));
57645 var _updatePreference = true;
57646 var _content = function () {};
57649 var disclosure = function(selection) {
57650 var hideToggle = selection.selectAll('.hide-toggle-' + key)
57654 var hideToggleEnter = hideToggle.enter()
57657 .attr('class', 'hide-toggle hide-toggle-' + key)
57658 .call(svgIcon('', 'pre-text', 'hide-toggle-icon'));
57662 .attr('class', 'hide-toggle-text');
57665 hideToggle = hideToggleEnter
57666 .merge(hideToggle);
57669 .on('click', toggle)
57670 .classed('expanded', _expanded);
57672 hideToggle.selectAll('.hide-toggle-text')
57675 hideToggle.selectAll('.hide-toggle-icon')
57676 .attr('xlink:href', _expanded ? '#iD-icon-down'
57677 : (textDirection === 'rtl') ? '#iD-icon-backward' : '#iD-icon-forward'
57681 var wrap = selection.selectAll('.disclosure-wrap')
57685 wrap = wrap.enter()
57687 .attr('class', 'disclosure-wrap disclosure-wrap-' + key)
57689 .classed('hide', !_expanded);
57697 function toggle() {
57698 event.preventDefault();
57700 _expanded = !_expanded;
57702 if (_updatePreference) {
57703 context.storage('disclosure.' + key + '.expanded', _expanded);
57707 .classed('expanded', _expanded);
57709 hideToggle.selectAll('.hide-toggle-icon')
57710 .attr('xlink:href', _expanded ? '#iD-icon-down'
57711 : (textDirection === 'rtl') ? '#iD-icon-backward' : '#iD-icon-forward'
57715 .call(uiToggle(_expanded));
57722 dispatch$1.call('toggled', this, _expanded);
57727 disclosure.title = function(val) {
57728 if (!arguments.length) return _title;
57734 disclosure.expanded = function(val) {
57735 if (!arguments.length) return _expanded;
57741 disclosure.updatePreference = function(val) {
57742 if (!arguments.length) return _updatePreference;
57743 _updatePreference = val;
57748 disclosure.content = function(val) {
57749 if (!arguments.length) return _content;
57755 return utilRebind(disclosure, dispatch$1, 'on');
57758 // Pass `which` object of the form:
57760 // key: 'string', // required
57761 // value: 'string' // optional
57765 // rtype: 'string' // relation type (e.g. 'multipolygon')
57769 // qid: 'string' // brand wikidata (e.g. 'Q37158')
57772 function uiTagReference(what) {
57773 var wikibase = what.qid ? services$1.wikidata : services$1.osmWikibase;
57774 var tagReference = {};
57776 var _button = d3_select(null);
57777 var _body = d3_select(null);
57783 if (!wikibase) return;
57786 .classed('tag-reference-loading', true);
57788 wikibase.getDocs(what, gotDocs);
57792 function gotDocs(err, docs) {
57795 if (!docs || !docs.title) {
57798 .attr('class', 'tag-reference-description')
57799 .text(t('inspector.no_documentation_key'));
57804 if (docs.imageURL) {
57807 .attr('class', 'tag-reference-wiki-image')
57808 .attr('src', docs.imageURL)
57809 .on('load', function() { done(); })
57810 .on('error', function() { d3_select(this).remove(); done(); });
57817 .attr('class', 'tag-reference-description')
57818 .text(docs.description || t('inspector.no_documentation_key'))
57820 .attr('class', 'tag-reference-edit')
57821 .attr('target', '_blank')
57822 .attr('tabindex', -1)
57823 .attr('title', t('inspector.edit_reference'))
57824 .attr('href', docs.editURL)
57825 .call(svgIcon('#iD-icon-edit', 'inline'));
57830 .attr('class', 'tag-reference-link')
57831 .attr('target', '_blank')
57832 .attr('tabindex', -1)
57833 .attr('href', docs.wiki.url)
57834 .call(svgIcon('#iD-icon-out-link', 'inline'))
57836 .text(t(docs.wiki.text));
57839 // Add link to info about "good changeset comments" - #2923
57840 if (what.key === 'comment') {
57843 .attr('class', 'tag-reference-comment-link')
57844 .attr('target', '_blank')
57845 .attr('tabindex', -1)
57846 .call(svgIcon('#iD-icon-out-link', 'inline'))
57847 .attr('href', t('commit.about_changeset_comments_link'))
57849 .text(t('commit.about_changeset_comments'));
57858 .classed('tag-reference-loading', false);
57861 .classed('expanded', true)
57864 .style('max-height', '200px')
57865 .style('opacity', '1');
57869 _button.selectAll('svg.icon use').each(function() {
57870 var iconUse = d3_select(this);
57871 if (iconUse.attr('href') === '#iD-icon-info') {
57872 iconUse.attr('href', '#iD-icon-info-filled');
57882 .style('max-height', '0px')
57883 .style('opacity', '0')
57884 .on('end', function () {
57885 _body.classed('expanded', false);
57890 _button.selectAll('svg.icon use').each(function() {
57891 var iconUse = d3_select(this);
57892 if (iconUse.attr('href') === '#iD-icon-info-filled') {
57893 iconUse.attr('href', '#iD-icon-info');
57900 tagReference.button = function(selection, klass, iconName) {
57901 _button = selection.selectAll('.tag-reference-button')
57904 _button = _button.enter()
57906 .attr('class', 'tag-reference-button ' + klass)
57907 .attr('title', t('icons.information'))
57908 .attr('tabindex', -1)
57909 .call(svgIcon('#iD-icon-' + (iconName || 'inspect')))
57913 .on('click', function () {
57914 event.stopPropagation();
57915 event.preventDefault();
57916 this.blur(); // avoid keeping focus on the button - #4641
57919 } else if (_loaded) {
57928 tagReference.body = function(selection) {
57929 var itemID = what.qid || what.rtype || (what.key + '-' + what.value);
57930 _body = selection.selectAll('.tag-reference-body')
57931 .data([itemID], function(d) { return d; });
57936 _body = _body.enter()
57938 .attr('class', 'tag-reference-body')
57939 .style('max-height', '0')
57940 .style('opacity', '0')
57943 if (_showing === false) {
57949 tagReference.showing = function(val) {
57950 if (!arguments.length) return _showing;
57952 return tagReference;
57956 return tagReference;
57959 function uiRawTagEditor(context) {
57960 var taginfo = services$1.taginfo;
57961 var dispatch$1 = dispatch('change');
57962 var availableViews = [
57963 { id: 'text', icon: '#fas-i-cursor' },
57964 { id: 'list', icon: '#fas-th-list' }
57967 var _tagView = (context.storage('raw-tag-editor-view') || 'list'); // 'list, 'text'
57968 var _readOnlyTags = [];
57969 var _indexedKeys = [];
57970 var _showBlank = false;
57971 var _updatePreference = true;
57972 var _expanded = false;
57973 var _pendingChange = null;
57980 function rawTagEditor(selection) {
57981 var count = Object.keys(_tags).filter(function(d) { return d; }).length;
57983 var disclosure = uiDisclosure(context, 'raw_tag_editor', false)
57984 .title(t('inspector.all_tags') + ' (' + count + ')')
57985 .on('toggled', toggled)
57986 .updatePreference(_updatePreference)
57989 // Sometimes we want to force the raw_tag_editor to be opened/closed..
57990 // When undefined, uiDisclosure will use the user's stored preference.
57991 if (_expanded !== undefined) {
57992 disclosure.expanded(_expanded);
57995 selection.call(disclosure);
57997 function toggled(expanded) {
57998 _expanded = expanded;
58000 selection.node().parentNode.scrollTop += 200;
58006 function content(wrap) {
58007 // When switching to a different entity or changing the state (hover/select)
58008 // reorder the keys alphabetically.
58009 // We trigger this by emptying the `_indexedKeys` array, then it will be rebuilt here.
58010 // Otherwise leave their order alone - #5857, #5927
58011 var all = Object.keys(_tags).sort();
58012 var known = _indexedKeys.map(function(t) { return t.key; });
58013 var missing = utilArrayDifference(all, known);
58014 for (var i = 0; i < missing.length; i++) {
58015 _indexedKeys.push({ index: _indexedKeys.length, key: missing[i] });
58018 // assemble row data, excluding any deleted tags
58019 var rowData = _indexedKeys.map(function(row) {
58020 var v = _tags[row.key];
58021 return (v === undefined) ? null : Object.assign(row, { value: v });
58022 }).filter(Boolean);
58024 // append blank row last, if necessary
58025 if (!_indexedKeys.length || _showBlank) {
58026 _showBlank = false;
58027 rowData.push({ index: _indexedKeys.length, key: '', value: '' });
58032 var options = wrap.selectAll('.raw-tag-options')
58035 var optionsEnter = options.enter()
58037 .attr('class', 'raw-tag-options');
58039 var optionEnter = optionsEnter.selectAll('.raw-tag-option')
58040 .data(availableViews, function(d) { return d.id; })
58045 .attr('class', function(d) {
58046 return 'raw-tag-option raw-tag-option-' + d.id + (_tagView === d.id ? ' selected' : '');
58048 .attr('title', function(d) { return d.id; })
58049 .on('click', function(d) {
58051 context.storage('raw-tag-editor-view', d.id);
58053 wrap.selectAll('.raw-tag-option')
58054 .classed('selected', function(datum) { return datum === d; });
58056 wrap.selectAll('.tag-text')
58057 .classed('hide', (d.id !== 'text'))
58058 .each(setTextareaHeight);
58060 wrap.selectAll('.tag-list, .add-row')
58061 .classed('hide', (d.id !== 'list'));
58063 .each(function(d) {
58065 .call(svgIcon(d.icon));
58070 var textData = rowsToText(rowData);
58071 var textarea = wrap.selectAll('.tag-text')
58074 textarea = textarea.enter()
58075 .append('textarea')
58076 .attr('class', 'tag-text' + (_tagView !== 'text' ? ' hide' : ''))
58078 .attr('spellcheck', 'false')
58082 .call(utilGetSetValue, textData)
58083 .each(setTextareaHeight)
58084 .on('input', setTextareaHeight)
58085 .on('blur', textChanged)
58086 .on('change', textChanged);
58088 // If All Fields section is hidden, focus textarea and put cursor at end..
58089 var fieldsExpanded = d3_select('.hide-toggle-preset_fields.expanded').size();
58090 if (_state !== 'hover' && _tagView === 'text' && !fieldsExpanded) {
58091 var element = textarea.node();
58093 element.setSelectionRange(textData.length, textData.length);
58098 var list = wrap.selectAll('.tag-list')
58101 list = list.enter()
58103 .attr('class', 'tag-list' + (_tagView !== 'list' ? ' hide' : ''))
58107 // Container for the Add button
58108 var addRowEnter = wrap.selectAll('.add-row')
58112 .attr('class', 'add-row' + (_tagView !== 'list' ? ' hide' : ''));
58116 .attr('class', 'add-tag')
58117 .call(svgIcon('#iD-icon-plus', 'light'))
58118 .on('click', addTag);
58122 .attr('class', 'space-value'); // preserve space
58126 .attr('class', 'space-buttons'); // preserve space
58130 var items = list.selectAll('.tag-row')
58131 .data(rowData, function(d) { return d.key; });
58139 var itemsEnter = items.enter()
58141 .attr('class', 'tag-row')
58142 .classed('readonly', isReadOnly);
58144 var innerWrap = itemsEnter.append('div')
58145 .attr('class', 'inner-wrap');
58149 .attr('class', 'key-wrap')
58151 .property('type', 'text')
58152 .attr('class', 'key')
58153 .attr('maxlength', 255)
58155 .on('blur', keyChange)
58156 .on('change', keyChange);
58160 .attr('class', 'value-wrap')
58162 .property('type', 'text')
58163 .attr('class', 'value')
58164 .attr('maxlength', 255)
58166 .on('blur', valueChange)
58167 .on('change', valueChange)
58168 .on('keydown.push-more', pushMore);
58172 .attr('tabindex', -1)
58173 .attr('class', 'form-field-button remove')
58174 .attr('title', t('icons.remove'))
58175 .call(svgIcon('#iD-operation-delete'));
58181 .sort(function(a, b) { return a.index - b.index; });
58184 .each(function(d) {
58185 var row = d3_select(this);
58186 var key = row.select('input.key'); // propagate bound data
58187 var value = row.select('input.value'); // propagate bound data
58189 if (_entityID && taginfo && _state !== 'hover') {
58190 bindTypeahead(key, value);
58193 var isRelation = (_entityID && context.entity(_entityID).type === 'relation');
58196 if (isRelation && d.key === 'type') {
58197 reference = uiTagReference({ rtype: d.value }, context);
58199 reference = uiTagReference({ key: d.key, value: d.value }, context);
58202 if (_state === 'hover') {
58203 reference.showing(false);
58206 row.select('.inner-wrap') // propagate bound data
58207 .call(reference.button);
58209 row.call(reference.body);
58211 row.select('button.remove'); // propagate bound data
58214 items.selectAll('input.key')
58215 .attr('title', function(d) { return d.key; })
58216 .call(utilGetSetValue, function(d) { return d.key; })
58217 .property('disabled', isReadOnly);
58219 items.selectAll('input.value')
58220 .attr('title', function(d) { return d.value; })
58221 .call(utilGetSetValue, function(d) { return d.value; })
58222 .property('disabled', isReadOnly);
58224 items.selectAll('button.remove')
58225 .on('mousedown', removeTag); // 'click' fires too late - #5878
58229 function isReadOnly(d) {
58230 for (var i = 0; i < _readOnlyTags.length; i++) {
58231 if (d.key.match(_readOnlyTags[i]) !== null) {
58239 function setTextareaHeight() {
58240 if (_tagView !== 'text') return;
58242 var selection = d3_select(this);
58243 selection.style('height', null);
58244 selection.style('height', selection.node().scrollHeight + 5 + 'px');
58248 function stringify(s) {
58249 return JSON.stringify(s).slice(1, -1); // without leading/trailing "
58252 function unstringify(s) {
58255 if (s.length < 1 || s.charAt(0) !== '"') {
58258 if (s.length < 2 || s.charAt(s.length - 1) !== '"' ||
58259 (s.charAt(s.length - 1) === '"' && s.charAt(s.length - 2) === '\\')
58263 return JSON.parse(leading + s + trailing);
58267 function rowsToText(rows) {
58269 .filter(function(row) { return row.key && row.key.trim() !== ''; })
58270 .map(function(row) { return stringify(row.key) + '=' + stringify(row.value); })
58273 return _state === 'hover' ? str : str + '\n';
58277 function textChanged() {
58278 var newText = this.value.trim();
58280 newText.split('\n').forEach(function(row) {
58281 var m = row.match(/^\s*([^=]+)=(.*)$/);
58283 var k = unstringify(m[1].trim());
58284 var v = unstringify(m[2].trim());
58289 var tagDiff = utilTagDiff(_tags, newTags);
58290 if (!tagDiff.length) return;
58292 _pendingChange = _pendingChange || {};
58294 tagDiff.forEach(function(change) {
58295 if (isReadOnly({ key: change.key })) return;
58297 if (change.type === '-') {
58298 _pendingChange[change.key] = undefined;
58299 } else if (change.type === '+') {
58300 _pendingChange[change.key] = change.newVal || '';
58308 function pushMore() {
58309 if (event.keyCode === 9 && !event.shiftKey &&
58310 list.selectAll('li:last-child input.value').node() === this) {
58316 function bindTypeahead(key, value) {
58317 if (isReadOnly(key.datum())) return;
58319 var geometry = context.geometry(_entityID);
58321 key.call(uiCombobox(context, 'tag-key')
58322 .fetcher(function(value, callback) {
58325 geometry: geometry,
58327 }, function(err, data) {
58329 var filtered = data.filter(function(d) { return _tags[d.value] === undefined; });
58330 callback(sort(value, filtered));
58335 value.call(uiCombobox(context, 'tag-value')
58336 .fetcher(function(value, callback) {
58339 key: utilGetSetValue(key),
58340 geometry: geometry,
58342 }, function(err, data) {
58343 if (!err) callback(sort(value, data));
58348 function sort(value, data) {
58349 var sameletter = [];
58351 for (var i = 0; i < data.length; i++) {
58352 if (data[i].value.substring(0, value.length) === value) {
58353 sameletter.push(data[i]);
58355 other.push(data[i]);
58358 return sameletter.concat(other);
58363 function unbind() {
58364 var row = d3_select(this);
58366 row.selectAll('input.key')
58367 .call(uiCombobox.off);
58369 row.selectAll('input.value')
58370 .call(uiCombobox.off);
58374 function keyChange(d) {
58376 var kNew = this.value.trim();
58377 var row = this.parentNode.parentNode;
58378 var inputVal = d3_select(row).selectAll('input.value');
58379 var vNew = utilGetSetValue(inputVal);
58381 // allow no change if the key should be readonly
58382 if (isReadOnly({ key: kNew })) {
58387 // switch focus if key is already in use
58388 if (kNew && kNew !== kOld) {
58389 if (_tags[kNew] !== undefined) { // new key is already in use
58390 this.value = kOld; // reset the key
58391 list.selectAll('input.value')
58392 .each(function(d) {
58393 if (d.key === kNew) { // send focus to that other value combo instead
58394 var input = d3_select(this).node();
58403 _pendingChange = _pendingChange || {};
58405 // exit if we are currently about to delete this row anyway - #6366
58406 if (_pendingChange.hasOwnProperty(d.key) && _pendingChange[d.key] === undefined) return;
58409 _pendingChange[kOld] = undefined;
58412 _pendingChange[kNew] = vNew;
58414 d.key = kNew; // update datum to avoid exit/enter on tag update
58418 utilGetSetValue(inputVal, vNew);
58423 function valueChange(d) {
58424 if (isReadOnly(d)) return;
58426 _pendingChange = _pendingChange || {};
58428 // exit if we are currently about to delete this row anyway - #6366
58429 if (_pendingChange.hasOwnProperty(d.key) && _pendingChange[d.key] === undefined) return;
58431 _pendingChange[d.key] = this.value;
58436 function removeTag(d) {
58437 if (isReadOnly(d)) return;
58439 if (d.key === '') { // removing the blank row
58440 _showBlank = false;
58444 // remove from indexedKeys too, so that if the user puts it back,
58445 // it will be sorted to the end and not back to its original position
58446 _indexedKeys = _indexedKeys.filter(function(row) { return row.key !== d.key; });
58448 _pendingChange = _pendingChange || {};
58449 _pendingChange[d.key] = undefined;
58455 function addTag() {
58456 // Delay render in case this click is blurring an edited combo.
58457 // Without the setTimeout, the `content` render would wipe out the pending tag change.
58458 window.setTimeout(function() {
58461 list.selectAll('li:last-child input.key').node().focus();
58466 function scheduleChange() {
58467 // Delay change in case this change is blurring an edited combo. - #5878
58468 window.setTimeout(function() {
58469 dispatch$1.call('change', this, _pendingChange);
58470 _pendingChange = null;
58477 rawTagEditor.state = function(val) {
58478 if (!arguments.length) return _state;
58479 if (_state !== val) {
58483 return rawTagEditor;
58487 rawTagEditor.preset = function(val) {
58488 if (!arguments.length) return _preset;
58490 if (_preset.isFallback()) {
58492 _updatePreference = false;
58494 _expanded = undefined;
58495 _updatePreference = true;
58497 return rawTagEditor;
58501 rawTagEditor.tags = function(val) {
58502 if (!arguments.length) return _tags;
58504 return rawTagEditor;
58508 rawTagEditor.entityID = function(val) {
58509 if (!arguments.length) return _entityID;
58510 if (_entityID !== val) {
58514 return rawTagEditor;
58518 rawTagEditor.expanded = function(val) {
58519 if (!arguments.length) return _expanded;
58521 _updatePreference = false;
58522 return rawTagEditor;
58526 // pass an array of regular expressions to test against the tag key
58527 rawTagEditor.readOnlyTags = function(val) {
58528 if (!arguments.length) return _readOnlyTags;
58529 _readOnlyTags = val;
58530 return rawTagEditor;
58534 return utilRebind(rawTagEditor, dispatch$1, 'on');
58537 function uiDataEditor(context) {
58538 var dataHeader = uiDataHeader();
58539 var quickLinks = uiQuickLinks();
58540 var rawTagEditor = uiRawTagEditor(context);
58544 function dataEditor(selection) {
58548 label: 'inspector.zoom_to.title',
58549 tooltip: function() {
58550 return uiTooltipHtml(t('inspector.zoom_to.tooltip_data'), t('inspector.zoom_to.key'));
58552 click: function zoomTo() {
58553 context.mode().zoomToSelected();
58558 var header = selection.selectAll('.header')
58561 var headerEnter = header.enter()
58563 .attr('class', 'header fillL');
58567 .attr('class', 'fr data-editor-close')
58568 .on('click', function() {
58569 context.enter(modeBrowse(context));
58571 .call(svgIcon('#iD-icon-close'));
58575 .text(t('map_data.title'));
58578 var body = selection.selectAll('.body')
58581 body = body.enter()
58583 .attr('class', 'body')
58586 var editor = body.selectAll('.data-editor')
58592 .attr('class', 'modal-section data-editor')
58594 .call(dataHeader.datum(_datum))
58595 .call(quickLinks.choices(choices));
58597 var rte = body.selectAll('.raw-tag-editor')
58603 .attr('class', 'raw-tag-editor inspector-inner data-editor')
58607 .readOnlyTags([/./])
58608 .tags((_datum && _datum.properties) || {})
58611 .selectAll('textarea.tag-text')
58612 .property('disabled', true)
58613 .classed('readonly', true);
58617 dataEditor.datum = function(val) {
58618 if (!arguments.length) return _datum;
58627 function modeSelectData(context, selectedDatum) {
58633 var keybinding = utilKeybinding('select-data');
58634 var dataEditor = uiDataEditor(context);
58637 behaviorBreathe(context),
58638 behaviorHover(context),
58639 behaviorSelect(context),
58640 behaviorLasso(context),
58641 modeDragNode(context).behavior,
58642 modeDragNote(context).behavior
58646 // class the data as selected, or return to browse mode if the data is gone
58647 function selectData(drawn) {
58648 var selection = context.surface().selectAll('.layer-mapdata .data' + selectedDatum.__featurehash__);
58650 if (selection.empty()) {
58651 // Return to browse mode if selected DOM elements have
58652 // disappeared because the user moved them out of view..
58653 var source = event && event.type === 'zoom' && event.sourceEvent;
58654 if (drawn && source && (source.type === 'mousemove' || source.type === 'touchmove')) {
58655 context.enter(modeBrowse(context));
58658 selection.classed('selected', true);
58664 if (d3_select('.combobox').size()) return;
58665 context.enter(modeBrowse(context));
58669 mode.zoomToSelected = function() {
58670 var extent = geoExtent(d3_geoBounds(selectedDatum));
58671 context.map().centerZoomEase(extent.center(), context.map().trimmedExtentZoom(extent));
58675 mode.enter = function() {
58676 behaviors.forEach(context.install);
58679 .on(t('inspector.zoom_to.key'), mode.zoomToSelected)
58680 .on('⎋', esc, true);
58682 d3_select(document)
58687 var sidebar = context.ui().sidebar;
58688 sidebar.show(dataEditor.datum(selectedDatum));
58690 // expand the sidebar, avoid obscuring the data if needed
58691 var extent = geoExtent(d3_geoBounds(selectedDatum));
58692 sidebar.expand(sidebar.intersects(extent));
58695 .on('drawn.select-data', selectData);
58699 mode.exit = function() {
58700 behaviors.forEach(context.uninstall);
58702 d3_select(document)
58703 .call(keybinding.unbind);
58706 .selectAll('.layer-mapdata .selected')
58707 .classed('selected hover', false);
58710 .on('drawn.select-data', null);
58712 context.ui().sidebar
58720 function uiImproveOsmComments() {
58724 function errorComments(selection) {
58725 // make the div immediately so it appears above the buttons
58726 var comments = selection.selectAll('.comments-container')
58729 comments = comments.enter()
58731 .attr('class', 'comments-container')
58734 // must retrieve comments from API before they can be displayed
58735 services$1.improveOSM.getComments(_error, function(err, d) {
58736 if (!d.comments) { return; } // nothing to do here
58738 var commentEnter = comments.selectAll('.comment')
58742 .attr('class', 'comment');
58746 .attr('class', 'comment-avatar')
58747 .call(svgIcon('#iD-icon-avatar', 'comment-avatar-icon'));
58749 var mainEnter = commentEnter
58751 .attr('class', 'comment-main');
58753 var metadataEnter = mainEnter
58755 .attr('class', 'comment-metadata');
58759 .attr('class', 'comment-author')
58760 .each(function(d) {
58761 var selection = d3_select(this);
58762 var osm = services$1.osm;
58763 if (osm && d.username) {
58764 selection = selection
58766 .attr('class', 'comment-author-link')
58767 .attr('href', osm.userURL(d.username))
58768 .attr('tabindex', -1)
58769 .attr('target', '_blank');
58772 .text(function(d) { return d.username; });
58777 .attr('class', 'comment-date')
58778 .text(function(d) {
58779 return t('note.status.commented', { when: localeDateString(d.timestamp) });
58784 .attr('class', 'comment-text')
58786 .text(function(d) { return d.text; });
58790 function localeDateString(s) {
58791 if (!s) return null;
58792 var detected = utilDetect();
58793 var options = { day: 'numeric', month: 'short', year: 'numeric' };
58794 var d = new Date(s * 1000); // timestamp is served in seconds, date takes ms
58795 if (isNaN(d.getTime())) return null;
58796 return d.toLocaleDateString(detected.locale, options);
58799 errorComments.error = function(val) {
58800 if (!arguments.length) return _error;
58802 return errorComments;
58805 return errorComments;
58808 function uiImproveOsmDetails(context) {
58812 function errorDetail(d) {
58813 var unknown = t('inspector.unknown');
58815 if (!d) return unknown;
58817 if (d.desc) return d.desc;
58819 var errorType = d.error_key;
58820 var et = en.QA.improveOSM.error_types[errorType];
58823 if (et && et.description) {
58824 detail = t('QA.improveOSM.error_types.' + errorType + '.description', d.replacements);
58833 function improveOsmDetails(selection) {
58834 var details = selection.selectAll('.error-details')
58836 (_error ? [_error] : []),
58837 function(d) { return d.id + '-' + (d.status || 0); }
58843 var detailsEnter = details.enter()
58845 .attr('class', 'error-details error-details-container');
58849 var descriptionEnter = detailsEnter
58851 .attr('class', 'error-details-description');
58855 .text(function() { return t('QA.keepRight.detail_description'); });
58859 .attr('class', 'error-details-description-text')
58860 .html(errorDetail);
58862 // If there are entity links in the error message..
58863 var relatedEntities = [];
58864 descriptionEnter.selectAll('.error_entity_link, .error_object_link')
58866 var link = d3_select(this);
58867 var isObjectLink = link.classed('error_object_link');
58868 var entityID = isObjectLink ?
58869 (utilEntityRoot(_error.object_type) + _error.object_id)
58870 : this.textContent;
58871 var entity = context.hasEntity(entityID);
58873 relatedEntities.push(entityID);
58875 // Add click handler
58877 .on('mouseover', function() {
58878 context.surface().selectAll(utilEntityOrMemberSelector([entityID], context.graph()))
58879 .classed('hover', true);
58881 .on('mouseout', function() {
58882 context.surface().selectAll('.hover')
58883 .classed('hover', false);
58885 .on('click', function() {
58886 event.preventDefault();
58887 var osmlayer = context.layers().layer('osm');
58888 if (!osmlayer.enabled()) {
58889 osmlayer.enabled(true);
58892 context.map().centerZoom(_error.loc, 20);
58895 context.enter(modeSelect(context, [entityID]));
58897 context.loadEntity(entityID, function() {
58898 context.enter(modeSelect(context, [entityID]));
58903 // Replace with friendly name if possible
58904 // (The entity may not yet be loaded into the graph)
58906 var name = utilDisplayName(entity); // try to use common name
58908 if (!name && !isObjectLink) {
58909 var preset = context.presets().match(entity, context.graph());
58910 name = preset && !preset.isFallback() && preset.name(); // fallback to preset name
58914 this.innerText = name;
58919 // Don't hide entities related to this error - #5880
58920 context.features().forceVisible(relatedEntities);
58924 improveOsmDetails.error = function(val) {
58925 if (!arguments.length) return _error;
58927 return improveOsmDetails;
58931 return improveOsmDetails;
58934 function uiImproveOsmHeader() {
58938 function errorTitle(d) {
58939 var unknown = t('inspector.unknown');
58941 if (!d) return unknown;
58942 var errorType = d.error_key;
58943 var et = en.QA.improveOSM.error_types[errorType];
58945 if (et && et.title) {
58946 return t('QA.improveOSM.error_types.' + errorType + '.title');
58953 function improveOsmHeader(selection) {
58954 var header = selection.selectAll('.error-header')
58956 (_error ? [_error] : []),
58957 function(d) { return d.id + '-' + (d.status || 0); }
58963 var headerEnter = header.enter()
58965 .attr('class', 'error-header');
58967 var iconEnter = headerEnter
58969 .attr('class', 'error-header-icon')
58970 .classed('new', function(d) { return d.id < 0; });
58972 var svgEnter = iconEnter
58974 .attr('width', '20px')
58975 .attr('height', '30px')
58976 .attr('viewbox', '0 0 20 30')
58977 .attr('class', function(d) {
58982 'error_id-' + d.id,
58983 'error_type-' + d.error_type,
58984 'category-' + d.category
58990 .attr('fill', 'currentColor')
58991 .attr('class', 'qa_error-fill')
58992 .attr('points', '16,3 4,3 1,6 1,17 4,20 7,20 10,27 13,20 16,20 19,17.033 19,6');
58996 .attr('class', 'icon-annotation')
58997 .attr('width', '11px')
58998 .attr('height', '11px')
58999 .attr('transform', 'translate(4.5, 7)')
59000 .attr('xlink:href', function(d) {
59001 var picon = d.icon;
59006 var isMaki = /^maki-/.test(picon);
59007 return '#' + picon + (isMaki ? '-11' : '');
59013 .attr('class', 'error-header-label')
59018 improveOsmHeader.error = function(val) {
59019 if (!arguments.length) return _error;
59021 return improveOsmHeader;
59025 return improveOsmHeader;
59028 function uiImproveOsmEditor(context) {
59029 var dispatch$1 = dispatch('change');
59030 var errorDetails = uiImproveOsmDetails(context);
59031 var errorComments = uiImproveOsmComments(context);
59032 var errorHeader = uiImproveOsmHeader(context);
59033 var quickLinks = uiQuickLinks();
59038 function improveOsmEditor(selection) {
59042 label: 'inspector.zoom_to.title',
59043 tooltip: function() {
59044 return uiTooltipHtml(t('inspector.zoom_to.tooltip_issue'), t('inspector.zoom_to.key'));
59046 click: function zoomTo() {
59047 context.mode().zoomToSelected();
59052 var header = selection.selectAll('.header')
59055 var headerEnter = header.enter()
59057 .attr('class', 'header fillL');
59061 .attr('class', 'fr error-editor-close')
59062 .on('click', function() {
59063 context.enter(modeBrowse(context));
59065 .call(svgIcon('#iD-icon-close'));
59069 .text(t('QA.improveOSM.title'));
59072 var body = selection.selectAll('.body')
59075 body = body.enter()
59077 .attr('class', 'body')
59080 var editor = body.selectAll('.error-editor')
59085 .attr('class', 'modal-section error-editor')
59087 .call(errorHeader.error(_error))
59088 .call(quickLinks.choices(choices))
59089 .call(errorDetails.error(_error))
59090 .call(errorComments.error(_error))
59091 .call(improveOsmSaveSection);
59094 function improveOsmSaveSection(selection) {
59095 var isSelected = (_error && _error.id === context.selectedErrorID());
59096 var isShown = (_error && (isSelected || _error.newComment || _error.comment));
59097 var saveSection = selection.selectAll('.error-save')
59099 (isShown ? [_error] : []),
59100 function(d) { return d.id + '-' + (d.status || 0); }
59108 var saveSectionEnter = saveSection.enter()
59110 .attr('class', 'error-save save-section cf');
59114 .attr('class', '.error-save-header')
59115 .text(t('note.newComment'));
59118 .append('textarea')
59119 .attr('class', 'new-comment-input')
59120 .attr('placeholder', t('QA.keepRight.comment_placeholder'))
59121 .attr('maxlength', 1000)
59122 .property('value', function(d) { return d.newComment; })
59124 .on('input', changeInput)
59125 .on('blur', changeInput);
59128 saveSection = saveSectionEnter
59129 .merge(saveSection)
59130 .call(errorSaveButtons);
59132 function changeInput() {
59133 var input = d3_select(this);
59134 var val = input.property('value').trim();
59140 // store the unsaved comment with the error itself
59141 _error = _error.update({ newComment: val });
59143 var errorService = services$1.improveOSM;
59144 if (errorService) {
59145 errorService.replaceError(_error);
59149 .call(errorSaveButtons);
59153 function errorSaveButtons(selection) {
59154 var isSelected = (_error && _error.id === context.selectedErrorID());
59155 var buttonSection = selection.selectAll('.buttons')
59156 .data((isSelected ? [_error] : []), function(d) { return d.status + d.id; });
59159 buttonSection.exit()
59163 var buttonEnter = buttonSection.enter()
59165 .attr('class', 'buttons');
59169 .attr('class', 'button comment-button action')
59170 .text(t('QA.keepRight.save_comment'));
59174 .attr('class', 'button close-button action');
59178 .attr('class', 'button ignore-button action');
59182 buttonSection = buttonSection
59183 .merge(buttonEnter);
59185 buttonSection.select('.comment-button')
59186 .attr('disabled', function(d) {
59187 return d.newComment === undefined ? true : null;
59189 .on('click.comment', function(d) {
59190 this.blur(); // avoid keeping focus on the button - #4641
59191 var errorService = services$1.improveOSM;
59192 if (errorService) {
59193 errorService.postUpdate(d, function(err, error) {
59194 dispatch$1.call('change', error);
59199 buttonSection.select('.close-button')
59200 .text(function(d) {
59201 var andComment = (d.newComment !== undefined ? '_comment' : '');
59202 return t('QA.keepRight.close' + andComment);
59204 .on('click.close', function(d) {
59205 this.blur(); // avoid keeping focus on the button - #4641
59206 var errorService = services$1.improveOSM;
59207 if (errorService) {
59208 d.newStatus = 'SOLVED';
59209 errorService.postUpdate(d, function(err, error) {
59210 dispatch$1.call('change', error);
59215 buttonSection.select('.ignore-button')
59216 .text(function(d) {
59217 var andComment = (d.newComment !== undefined ? '_comment' : '');
59218 return t('QA.keepRight.ignore' + andComment);
59220 .on('click.ignore', function(d) {
59221 this.blur(); // avoid keeping focus on the button - #4641
59222 var errorService = services$1.improveOSM;
59223 if (errorService) {
59224 d.newStatus = 'INVALID';
59225 errorService.postUpdate(d, function(err, error) {
59226 dispatch$1.call('change', error);
59232 improveOsmEditor.error = function(val) {
59233 if (!arguments.length) return _error;
59235 return improveOsmEditor;
59239 return utilRebind(improveOsmEditor, dispatch$1, 'on');
59242 function uiKeepRightDetails(context) {
59246 function errorDetail(d) {
59247 var unknown = t('inspector.unknown');
59249 if (!d) return unknown;
59250 var errorType = d.error_type;
59251 var parentErrorType = d.parent_error_type;
59253 var et = en.QA.keepRight.errorTypes[errorType];
59254 var pt = en.QA.keepRight.errorTypes[parentErrorType];
59257 if (et && et.description) {
59258 detail = t('QA.keepRight.errorTypes.' + errorType + '.description', d.replacements);
59259 } else if (pt && pt.description) {
59260 detail = t('QA.keepRight.errorTypes.' + parentErrorType + '.description', d.replacements);
59269 function keepRightDetails(selection) {
59270 var details = selection.selectAll('.error-details')
59272 (_error ? [_error] : []),
59273 function(d) { return d.id + '-' + (d.status || 0); }
59279 var detailsEnter = details.enter()
59281 .attr('class', 'error-details error-details-container');
59285 var descriptionEnter = detailsEnter
59287 .attr('class', 'error-details-description');
59291 .text(function() { return t('QA.keepRight.detail_description'); });
59295 .attr('class', 'error-details-description-text')
59296 .html(errorDetail);
59298 // If there are entity links in the error message..
59299 var relatedEntities = [];
59300 descriptionEnter.selectAll('.error_entity_link, .error_object_link')
59302 var link = d3_select(this);
59303 var isObjectLink = link.classed('error_object_link');
59304 var entityID = isObjectLink ?
59305 (utilEntityRoot(_error.object_type) + _error.object_id)
59306 : this.textContent;
59307 var entity = context.hasEntity(entityID);
59309 relatedEntities.push(entityID);
59311 // Add click handler
59313 .on('mouseover', function() {
59314 context.surface().selectAll(utilEntityOrMemberSelector([entityID], context.graph()))
59315 .classed('hover', true);
59317 .on('mouseout', function() {
59318 context.surface().selectAll('.hover')
59319 .classed('hover', false);
59321 .on('click', function() {
59322 event.preventDefault();
59323 var osmlayer = context.layers().layer('osm');
59324 if (!osmlayer.enabled()) {
59325 osmlayer.enabled(true);
59328 context.map().centerZoomEase(_error.loc, 20);
59331 context.enter(modeSelect(context, [entityID]));
59333 context.loadEntity(entityID, function() {
59334 context.enter(modeSelect(context, [entityID]));
59339 // Replace with friendly name if possible
59340 // (The entity may not yet be loaded into the graph)
59342 var name = utilDisplayName(entity); // try to use common name
59344 if (!name && !isObjectLink) {
59345 var preset = context.presets().match(entity, context.graph());
59346 name = preset && !preset.isFallback() && preset.name(); // fallback to preset name
59350 this.innerText = name;
59355 // Don't hide entities related to this error - #5880
59356 context.features().forceVisible(relatedEntities);
59360 keepRightDetails.error = function(val) {
59361 if (!arguments.length) return _error;
59363 return keepRightDetails;
59367 return keepRightDetails;
59370 function uiKeepRightHeader() {
59374 function errorTitle(d) {
59375 var unknown = t('inspector.unknown');
59377 if (!d) return unknown;
59378 var errorType = d.error_type;
59379 var parentErrorType = d.parent_error_type;
59381 var et = en.QA.keepRight.errorTypes[errorType];
59382 var pt = en.QA.keepRight.errorTypes[parentErrorType];
59384 if (et && et.title) {
59385 return t('QA.keepRight.errorTypes.' + errorType + '.title');
59386 } else if (pt && pt.title) {
59387 return t('QA.keepRight.errorTypes.' + parentErrorType + '.title');
59394 function keepRightHeader(selection) {
59395 var header = selection.selectAll('.error-header')
59397 (_error ? [_error] : []),
59398 function(d) { return d.id + '-' + (d.status || 0); }
59404 var headerEnter = header.enter()
59406 .attr('class', 'error-header');
59408 var iconEnter = headerEnter
59410 .attr('class', 'error-header-icon')
59411 .classed('new', function(d) { return d.id < 0; });
59415 .attr('class', function(d) {
59416 return 'preset-icon-28 qa_error ' + d.service + ' error_id-' + d.id + ' error_type-' + d.parent_error_type;
59418 .call(svgIcon('#iD-icon-bolt', 'qa_error-fill'));
59422 .attr('class', 'error-header-label')
59427 keepRightHeader.error = function(val) {
59428 if (!arguments.length) return _error;
59430 return keepRightHeader;
59434 return keepRightHeader;
59437 function uiViewOnKeepRight() {
59438 var _error; // a keepright error
59441 function viewOnKeepRight(selection) {
59443 if (services$1.keepRight && (_error instanceof qaError)) {
59444 url = services$1.keepRight.errorURL(_error);
59447 var link = selection.selectAll('.view-on-keepRight')
59448 .data(url ? [url] : []);
59455 var linkEnter = link.enter()
59457 .attr('class', 'view-on-keepRight')
59458 .attr('target', '_blank')
59459 .attr('href', function(d) { return d; })
59460 .call(svgIcon('#iD-icon-out-link', 'inline'));
59464 .text(t('inspector.view_on_keepRight'));
59468 viewOnKeepRight.what = function(val) {
59469 if (!arguments.length) return _error;
59471 return viewOnKeepRight;
59474 return viewOnKeepRight;
59477 function uiKeepRightEditor(context) {
59478 var dispatch$1 = dispatch('change');
59479 var keepRightDetails = uiKeepRightDetails(context);
59480 var keepRightHeader = uiKeepRightHeader(context);
59481 var quickLinks = uiQuickLinks();
59486 function keepRightEditor(selection) {
59490 label: 'inspector.zoom_to.title',
59491 tooltip: function() {
59492 return uiTooltipHtml(t('inspector.zoom_to.tooltip_issue'), t('inspector.zoom_to.key'));
59494 click: function zoomTo() {
59495 context.mode().zoomToSelected();
59500 var header = selection.selectAll('.header')
59503 var headerEnter = header.enter()
59505 .attr('class', 'header fillL');
59509 .attr('class', 'fr error-editor-close')
59510 .on('click', function() {
59511 context.enter(modeBrowse(context));
59513 .call(svgIcon('#iD-icon-close'));
59517 .text(t('QA.keepRight.title'));
59520 var body = selection.selectAll('.body')
59523 body = body.enter()
59525 .attr('class', 'body')
59528 var editor = body.selectAll('.error-editor')
59533 .attr('class', 'modal-section error-editor')
59535 .call(keepRightHeader.error(_error))
59536 .call(quickLinks.choices(choices))
59537 .call(keepRightDetails.error(_error))
59538 .call(keepRightSaveSection);
59541 var footer = selection.selectAll('.footer')
59546 .attr('class', 'footer')
59548 .call(uiViewOnKeepRight(context).what(_error));
59552 function keepRightSaveSection(selection) {
59553 var isSelected = (_error && _error.id === context.selectedErrorID());
59554 var isShown = (_error && (isSelected || _error.newComment || _error.comment));
59555 var saveSection = selection.selectAll('.error-save')
59557 (isShown ? [_error] : []),
59558 function(d) { return d.id + '-' + (d.status || 0); }
59566 var saveSectionEnter = saveSection.enter()
59568 .attr('class', 'error-save save-section cf');
59572 .attr('class', '.error-save-header')
59573 .text(t('QA.keepRight.comment'));
59576 .append('textarea')
59577 .attr('class', 'new-comment-input')
59578 .attr('placeholder', t('QA.keepRight.comment_placeholder'))
59579 .attr('maxlength', 1000)
59580 .property('value', function(d) { return d.newComment || d.comment; })
59582 .on('input', changeInput)
59583 .on('blur', changeInput);
59586 saveSection = saveSectionEnter
59587 .merge(saveSection)
59588 .call(keepRightSaveButtons);
59591 function changeInput() {
59592 var input = d3_select(this);
59593 var val = input.property('value').trim();
59595 if (val === _error.comment) {
59599 // store the unsaved comment with the error itself
59600 _error = _error.update({ newComment: val });
59602 var keepRight = services$1.keepRight;
59604 keepRight.replaceError(_error); // update keepright cache
59608 .call(keepRightSaveButtons);
59613 function keepRightSaveButtons(selection) {
59614 var isSelected = (_error && _error.id === context.selectedErrorID());
59615 var buttonSection = selection.selectAll('.buttons')
59616 .data((isSelected ? [_error] : []), function(d) { return d.status + d.id; });
59619 buttonSection.exit()
59623 var buttonEnter = buttonSection.enter()
59625 .attr('class', 'buttons');
59629 .attr('class', 'button comment-button action')
59630 .text(t('QA.keepRight.save_comment'));
59634 .attr('class', 'button close-button action');
59638 .attr('class', 'button ignore-button action');
59642 buttonSection = buttonSection
59643 .merge(buttonEnter);
59645 buttonSection.select('.comment-button') // select and propagate data
59646 .attr('disabled', function(d) {
59647 return d.newComment === undefined ? true : null;
59649 .on('click.comment', function(d) {
59650 this.blur(); // avoid keeping focus on the button - #4641
59651 var keepRight = services$1.keepRight;
59653 keepRight.postKeepRightUpdate(d, function(err, error) {
59654 dispatch$1.call('change', error);
59659 buttonSection.select('.close-button') // select and propagate data
59660 .text(function(d) {
59661 var andComment = (d.newComment !== undefined ? '_comment' : '');
59662 return t('QA.keepRight.close' + andComment);
59664 .on('click.close', function(d) {
59665 this.blur(); // avoid keeping focus on the button - #4641
59666 var keepRight = services$1.keepRight;
59668 d.state = 'ignore_t'; // ignore temporarily (error fixed)
59669 keepRight.postKeepRightUpdate(d, function(err, error) {
59670 dispatch$1.call('change', error);
59675 buttonSection.select('.ignore-button') // select and propagate data
59676 .text(function(d) {
59677 var andComment = (d.newComment !== undefined ? '_comment' : '');
59678 return t('QA.keepRight.ignore' + andComment);
59680 .on('click.ignore', function(d) {
59681 this.blur(); // avoid keeping focus on the button - #4641
59682 var keepRight = services$1.keepRight;
59684 d.state = 'ignore'; // ignore permanently (false positive)
59685 keepRight.postKeepRightUpdate(d, function(err, error) {
59686 dispatch$1.call('change', error);
59693 keepRightEditor.error = function(val) {
59694 if (!arguments.length) return _error;
59696 return keepRightEditor;
59700 return utilRebind(keepRightEditor, dispatch$1, 'on');
59703 function modeSelectError(context, selectedErrorID, selectedErrorService) {
59705 id: 'select-error',
59709 var keybinding = utilKeybinding('select-error');
59711 var errorService = services$1[selectedErrorService];
59713 switch (selectedErrorService) {
59715 errorEditor = uiImproveOsmEditor(context)
59716 .on('change', function() {
59717 context.map().pan([0,0]); // trigger a redraw
59718 var error = checkSelectedID();
59719 if (!error) return;
59720 context.ui().sidebar
59721 .show(errorEditor.error(error));
59725 errorEditor = uiKeepRightEditor(context)
59726 .on('change', function() {
59727 context.map().pan([0,0]); // trigger a redraw
59728 var error = checkSelectedID();
59729 if (!error) return;
59730 context.ui().sidebar
59731 .show(errorEditor.error(error));
59738 behaviorBreathe(context),
59739 behaviorHover(context),
59740 behaviorSelect(context),
59741 behaviorLasso(context),
59742 modeDragNode(context).behavior,
59743 modeDragNote(context).behavior
59747 function checkSelectedID() {
59748 if (!errorService) return;
59749 var error = errorService.getError(selectedErrorID);
59751 context.enter(modeBrowse(context));
59757 mode.zoomToSelected = function() {
59758 if (!errorService) return;
59759 var error = errorService.getError(selectedErrorID);
59761 context.map().centerZoomEase(error.loc, 20);
59766 mode.enter = function() {
59767 var error = checkSelectedID();
59768 if (!error) return;
59770 behaviors.forEach(context.install);
59772 .on(t('inspector.zoom_to.key'), mode.zoomToSelected)
59773 .on('⎋', esc, true);
59775 d3_select(document)
59780 var sidebar = context.ui().sidebar;
59781 sidebar.show(errorEditor.error(error));
59784 .on('drawn.select-error', selectError);
59787 // class the error as selected, or return to browse mode if the error is gone
59788 function selectError(drawn) {
59789 if (!checkSelectedID()) return;
59791 var selection = context.surface()
59792 .selectAll('.error_id-' + selectedErrorID + '.' + selectedErrorService);
59794 if (selection.empty()) {
59795 // Return to browse mode if selected DOM elements have
59796 // disappeared because the user moved them out of view..
59797 var source = event && event.type === 'zoom' && event.sourceEvent;
59798 if (drawn && source && (source.type === 'mousemove' || source.type === 'touchmove')) {
59799 context.enter(modeBrowse(context));
59804 .classed('selected', true);
59806 context.selectedErrorID(selectedErrorID);
59811 if (d3_select('.combobox').size()) return;
59812 context.enter(modeBrowse(context));
59817 mode.exit = function() {
59818 behaviors.forEach(context.uninstall);
59820 d3_select(document)
59821 .call(keybinding.unbind);
59824 .selectAll('.qa_error.selected')
59825 .classed('selected hover', false);
59828 .on('drawn.select-error', null);
59830 context.ui().sidebar
59833 context.selectedErrorID(null);
59834 context.features().forceVisible([]);
59841 function behaviorSelect(context) {
59842 // legacy option to show menu on every click
59843 var isShowAlways = +context.storage('edit-menu-show-always') === 1;
59845 var _lastMouse = null;
59846 var _suppressMenu = true;
59851 return d3_mouse(context.container().node());
59855 function keydown() {
59857 if (e && e.shiftKey) {
59859 .classed('behavior-multiselect', true);
59862 if (e && e.keyCode === 93) { // context menu
59863 e.preventDefault();
59864 e.stopPropagation();
59871 if (!e || !e.shiftKey) {
59873 .classed('behavior-multiselect', false);
59877 if (e && e.keyCode === 93) { // context menu
59878 e.preventDefault();
59879 e.stopPropagation();
59885 function mousedown() {
59890 .on('mouseup.select', mouseup, true);
59892 _suppressMenu = !isShowAlways;
59896 function mousemove() {
59898 _lastMouse = event;
59903 function mouseup() {
59908 function contextmenu() {
59910 e.preventDefault();
59911 e.stopPropagation();
59913 if (!+e.clientX && !+e.clientY) {
59915 e.sourceEvent = _lastMouse;
59924 _suppressMenu = false;
59931 .on('mouseup.select', null, true);
59935 var dist = geoVecLength(_p1, p2);
59937 if (dist > tolerance) return;
59939 // Defer processing the click,
59940 // because this click may trigger a blur event,
59941 // and the blur event may trigger a tag change,
59942 // and we really want that tag change to go to the already selected entity
59943 // and not the one that we are about to select with the click #6028, #5878
59944 // (Be very careful entering modeSelect anywhere that might also blur a field!)
59945 var datum = event.target.__data__ || (_lastMouse && _lastMouse.target.__data__);
59946 var isMultiselect = event.shiftKey || d3_select('#surface .lasso').node();
59947 window.setTimeout(function() {
59948 processClick(datum, isMultiselect);
59949 }, 20); // delay > whatever raw_tag_editor.js `scheduleChange` does (10ms).
59953 function processClick(datum, isMultiselect) {
59954 var mode = context.mode();
59956 var entity = datum && datum.properties && datum.properties.entity;
59957 if (entity) datum = entity;
59959 if (datum && datum.type === 'midpoint') {
59960 datum = datum.parents[0];
59963 if (datum instanceof osmEntity) { // clicked an entity..
59964 var selectedIDs = context.selectedIDs();
59965 context.selectedNoteID(null);
59966 context.selectedErrorID(null);
59968 if (!isMultiselect) {
59969 if (selectedIDs.length > 1 && (!_suppressMenu && !isShowAlways)) {
59970 // multiple things already selected, just show the menu...
59971 mode.suppressMenu(false).reselect();
59973 // select a single thing..
59974 context.enter(modeSelect(context, [datum.id]).suppressMenu(_suppressMenu));
59978 if (selectedIDs.indexOf(datum.id) !== -1) {
59979 // clicked entity is already in the selectedIDs list..
59980 if (!_suppressMenu && !isShowAlways) {
59981 // don't deselect clicked entity, just show the menu.
59982 mode.suppressMenu(false).reselect();
59984 // deselect clicked entity, then reenter select mode or return to browse mode..
59985 selectedIDs = selectedIDs.filter(function(id) { return id !== datum.id; });
59986 context.enter(selectedIDs.length ? modeSelect(context, selectedIDs) : modeBrowse(context));
59989 // clicked entity is not in the selected list, add it..
59990 selectedIDs = selectedIDs.concat([datum.id]);
59991 context.enter(modeSelect(context, selectedIDs).suppressMenu(_suppressMenu));
59995 } else if (datum && datum.__featurehash__ && !isMultiselect) { // clicked Data..
59997 .selectedNoteID(null)
59998 .enter(modeSelectData(context, datum));
60000 } else if (datum instanceof osmNote && !isMultiselect) { // clicked a Note..
60002 .selectedNoteID(datum.id)
60003 .enter(modeSelectNote(context, datum.id));
60005 } else if (datum instanceof qaError & !isMultiselect) { // clicked an external QA error
60007 .selectedErrorID(datum.id)
60008 .enter(modeSelectError(context, datum.id, datum.service));
60010 } else { // clicked nothing..
60011 context.selectedNoteID(null);
60012 context.selectedErrorID(null);
60013 if (!isMultiselect && mode.id !== 'browse') {
60014 context.enter(modeBrowse(context));
60018 // reset for next time..
60019 _suppressMenu = true;
60023 function behavior(selection) {
60025 _suppressMenu = true;
60029 .on('keydown.select', keydown)
60030 .on('keyup.select', keyup)
60031 .on('contextmenu.select-window', function() {
60032 // Edge and IE really like to show the contextmenu on the
60033 // menubar when user presses a keyboard menu button
60034 // even after we've already preventdefaulted the key event.
60036 if (+e.clientX === 0 && +e.clientY === 0) {
60037 event.preventDefault();
60038 event.stopPropagation();
60043 .on('mousedown.select', mousedown)
60044 .on('mousemove.select', mousemove)
60045 .on('contextmenu.select', contextmenu);
60047 if (event && event.shiftKey) {
60049 .classed('behavior-multiselect', true);
60054 behavior.off = function(selection) {
60056 .on('keydown.select', null)
60057 .on('keyup.select', null)
60058 .on('contextmenu.select-window', null)
60059 .on('mouseup.select', null, true);
60062 .on('mousedown.select', null)
60063 .on('mousemove.select', null)
60064 .on('contextmenu.select', null);
60067 .classed('behavior-multiselect', false);
60074 function behaviorDrawWay(context, wayID, index, mode, startGraph, baselineGraph) {
60076 var origWay = context.entity(wayID);
60078 var annotation = t((origWay.isDegenerate() ?
60079 'operations.start.annotation.' :
60080 'operations.continue.annotation.') + context.geometry(wayID)
60083 var behavior = behaviorDraw(context);
60084 behavior.hover().initialNodeID(index ? origWay.nodes[index] :
60085 (origWay.isClosed() ? origWay.nodes[origWay.nodes.length - 2] : origWay.nodes[origWay.nodes.length - 1]));
60087 var _tempEdits = 0;
60089 var end = osmNode({ loc: context.map().mouseCoordinates() });
60091 // Push an annotated state for undo to return back to.
60092 // We must make sure to remove this edit later.
60093 context.pauseChangeDispatch();
60094 context.perform(actionNoop(), annotation);
60097 // Add the drawing node to the graph.
60098 // We must make sure to remove this edit later.
60099 context.perform(_actionAddDrawNode());
60101 context.resumeChangeDispatch();
60104 function keydown() {
60105 if (event.keyCode === utilKeybinding.modifierCodes.alt) {
60106 if (context.surface().classed('nope')) {
60108 .classed('nope-suppressed', true);
60111 .classed('nope', false)
60112 .classed('nope-disabled', true);
60118 if (event.keyCode === utilKeybinding.modifierCodes.alt) {
60119 if (context.surface().classed('nope-suppressed')) {
60121 .classed('nope', true);
60124 .classed('nope-suppressed', false)
60125 .classed('nope-disabled', false);
60130 function allowsVertex(d) {
60131 return d.geometry(context.graph()) === 'vertex' || context.presets().allowsVertex(d, context.graph());
60136 // - `mode/drag_node.js` `doMode()`
60137 // - `behavior/draw.js` `click()`
60138 // - `behavior/draw_way.js` `move()`
60139 function move(datum) {
60140 context.surface().classed('nope-disabled', event.altKey);
60142 var targetLoc = datum && datum.properties && datum.properties.entity && allowsVertex(datum.properties.entity) && datum.properties.entity.loc;
60143 var targetNodes = datum && datum.properties && datum.properties.nodes;
60144 var loc = context.map().mouseCoordinates();
60146 if (targetLoc) { // snap to node/vertex - a point target with `.loc`
60149 } else if (targetNodes) { // snap to way - a line target with `.nodes`
60150 var choice = geoChooseEdge(targetNodes, context.mouse(), context.projection, end.id);
60156 context.replace(actionMoveNode(end.id, loc));
60157 end = context.entity(end.id);
60158 checkGeometry(false);
60162 // Check whether this edit causes the geometry to break.
60163 // If so, class the surface with a nope cursor.
60164 // `finishDraw` - Only checks the relevant line segments if finishing drawing
60165 function checkGeometry(finishDraw) {
60166 var nopeDisabled = context.surface().classed('nope-disabled');
60167 var isInvalid = isInvalidGeometry(end, context.graph(), finishDraw);
60169 if (nopeDisabled) {
60171 .classed('nope', false)
60172 .classed('nope-suppressed', isInvalid);
60175 .classed('nope', isInvalid)
60176 .classed('nope-suppressed', false);
60181 function isInvalidGeometry(entity, graph, finishDraw) {
60182 var parents = graph.parentWays(entity);
60184 for (var i = 0; i < parents.length; i++) {
60185 var parent = parents[i];
60186 var nodes = graph.childNodes(parent).slice(); // shallow copy
60188 if (origWay.isClosed()) { // Check if Area
60190 if (nodes.length < 3) return false;
60191 nodes.splice(-2, 1);
60192 entity = nodes[nodes.length-2];
60202 if (geoHasSelfIntersections(nodes, entity.id)) {
60211 function undone() {
60212 context.pauseChangeDispatch();
60213 // Undo popped the history back to the initial annotated no-op edit.
60214 _tempEdits = 0; // We will deal with the temp edits here
60215 context.pop(1); // Remove initial no-op edit
60217 if (context.graph() === baselineGraph) { // We've undone back to the beginning
60218 // baselineGraph may be behind startGraph if this way was added rather than continued
60219 resetToStartGraph();
60220 context.resumeChangeDispatch();
60221 context.enter(modeSelect(context, [wayID]));
60223 // Remove whatever segment was drawn previously and continue drawing
60225 context.resumeChangeDispatch();
60226 context.enter(mode);
60231 function setActiveElements() {
60232 context.surface().selectAll('.' + end.id)
60233 .classed('active', true);
60237 function resetToStartGraph() {
60238 while (context.graph() !== startGraph) {
60244 var drawWay = function(surface) {
60247 .on('click', drawWay.add)
60248 .on('clickWay', drawWay.addWay)
60249 .on('clickNode', drawWay.addNode)
60250 .on('undo', context.undo)
60251 .on('cancel', drawWay.cancel)
60252 .on('finish', drawWay.finish);
60255 .on('keydown.drawWay', keydown)
60256 .on('keyup.drawWay', keyup);
60259 .dblclickEnable(false)
60260 .on('drawn.draw', setActiveElements);
60262 setActiveElements();
60264 surface.call(behavior);
60267 .on('undone.draw', undone);
60271 drawWay.off = function(surface) {
60272 // Drawing was interrupted unexpectedly.
60273 // This can happen if the user changes modes,
60274 // clicks geolocate button, a hashchange event occurs, etc.
60276 context.pauseChangeDispatch();
60277 context.pop(_tempEdits);
60278 resetToStartGraph();
60279 context.resumeChangeDispatch();
60283 .on('drawn.draw', null);
60285 surface.call(behavior.off)
60286 .selectAll('.active')
60287 .classed('active', false);
60290 .classed('nope', false)
60291 .classed('nope-suppressed', false)
60292 .classed('nope-disabled', false);
60295 .on('keydown.hover', null)
60296 .on('keyup.hover', null);
60299 .on('undone.draw', null);
60303 function _actionAddDrawNode() {
60304 return function(graph) {
60307 .replace(origWay.addNode(end.id, index));
60312 function _actionReplaceDrawNode(newNode) {
60313 return function(graph) {
60315 .replace(origWay.addNode(newNode.id, index))
60321 // Accept the current position of the drawing node and continue drawing.
60322 drawWay.add = function(loc, d) {
60323 if ((d && d.properties && d.properties.nope) || context.surface().classed('nope')) {
60324 return; // can't click here
60327 context.pauseChangeDispatch();
60328 context.pop(_tempEdits);
60332 _actionAddDrawNode(),
60336 context.resumeChangeDispatch();
60337 checkGeometry(false); // finishDraw = false
60338 context.enter(mode);
60342 // Connect the way to an existing way.
60343 drawWay.addWay = function(loc, edge, d) {
60344 if ((d && d.properties && d.properties.nope) || context.surface().classed('nope')) {
60345 return; // can't click here
60348 context.pauseChangeDispatch();
60349 context.pop(_tempEdits);
60353 _actionAddDrawNode(),
60354 actionAddMidpoint({ loc: loc, edge: edge }, end),
60358 context.resumeChangeDispatch();
60359 checkGeometry(false); // finishDraw = false
60360 context.enter(mode);
60364 // Connect the way to an existing node and continue drawing.
60365 drawWay.addNode = function(node, d) {
60366 if ((d && d.properties && d.properties.nope) || context.surface().classed('nope')) {
60367 return; // can't click here
60370 context.pauseChangeDispatch();
60371 context.pop(_tempEdits);
60375 _actionReplaceDrawNode(node),
60379 context.resumeChangeDispatch();
60380 checkGeometry(false); // finishDraw = false
60381 context.enter(mode);
60385 // Finish the draw operation, removing the temporary edits.
60386 // If the way has enough nodes to be valid, it's selected.
60387 // Otherwise, delete everything and return to browse mode.
60388 drawWay.finish = function() {
60389 checkGeometry(true); // finishDraw = true
60390 if (context.surface().classed('nope')) {
60391 return; // can't click here
60394 context.pauseChangeDispatch();
60395 context.pop(_tempEdits);
60398 var way = context.hasEntity(wayID);
60399 if (!way || way.isDegenerate()) {
60404 context.resumeChangeDispatch();
60406 window.setTimeout(function() {
60407 context.map().dblclickEnable(true);
60410 var isNewFeature = !mode.isContinuing;
60411 context.enter(modeSelect(context, [wayID]).newFeature(isNewFeature));
60415 // Cancel the draw operation, delete everything, and return to browse mode.
60416 drawWay.cancel = function() {
60417 context.pauseChangeDispatch();
60418 context.pop(_tempEdits);
60421 resetToStartGraph();
60422 context.resumeChangeDispatch();
60424 window.setTimeout(function() {
60425 context.map().dblclickEnable(true);
60429 .classed('nope', false)
60430 .classed('nope-disabled', false)
60431 .classed('nope-suppressed', false);
60433 context.enter(modeBrowse(context));
60437 drawWay.activeID = function() {
60438 if (!arguments.length) return end.id;
60444 drawWay.tail = function(text) {
60445 behavior.tail(text);
60453 function modeDrawLine(context, wayID, startGraph, baselineGraph, button, affix, continuing) {
60461 mode.wayID = wayID;
60463 mode.isContinuing = continuing;
60465 mode.enter = function() {
60466 var way = context.entity(wayID);
60467 var index = (affix === 'prefix') ? 0 : undefined;
60468 var headID = (affix === 'prefix') ? way.first() : way.last();
60470 behavior = behaviorDrawWay(context, wayID, index, mode, startGraph, baselineGraph)
60471 .tail(t('modes.draw_line.tail'));
60473 var addNode = behavior.addNode;
60474 behavior.addNode = function(node, d) {
60475 if (node.id === headID) {
60482 context.install(behavior);
60486 mode.exit = function() {
60487 context.uninstall(behavior);
60491 mode.selectedIDs = function() {
60496 mode.activeID = function() {
60497 return (behavior && behavior.activeID()) || [];
60503 function operationContinue(selectedIDs, context) {
60504 var graph = context.graph();
60505 var entities = selectedIDs.map(function(id) { return graph.entity(id); });
60506 var geometries = Object.assign(
60507 { line: [], vertex: [] },
60508 utilArrayGroupBy(entities, function(entity) { return entity.geometry(graph); })
60510 var vertex = geometries.vertex[0];
60513 function candidateWays() {
60514 return graph.parentWays(vertex).filter(function(parent) {
60515 return parent.geometry(graph) === 'line' &&
60516 !parent.isClosed() &&
60517 parent.affix(vertex.id) &&
60518 (geometries.line.length === 0 || geometries.line[0] === parent);
60523 var operation = function() {
60524 var candidate = candidateWays()[0];
60526 modeDrawLine(context, candidate.id, context.graph(), context.graph(), 'line', candidate.affix(vertex.id), true)
60531 operation.available = function() {
60532 return geometries.vertex.length === 1 &&
60533 geometries.line.length <= 1 &&
60534 !context.features().hasHiddenConnections(vertex, context.graph());
60538 operation.disabled = function() {
60539 var candidates = candidateWays();
60540 if (candidates.length === 0) {
60541 return 'not_eligible';
60542 } else if (candidates.length > 1) {
60550 operation.tooltip = function() {
60551 var disable = operation.disabled();
60553 t('operations.continue.' + disable) :
60554 t('operations.continue.description');
60558 operation.annotation = function() {
60559 return t('operations.continue.annotation.line');
60563 operation.id = 'continue';
60564 operation.keys = [t('operations.continue.key')];
60565 operation.title = t('operations.continue.title');
60566 operation.behavior = behaviorOperation(context).which(operation);
60571 function operationDisconnect(selectedIDs, context) {
60572 var vertexIDs = [];
60577 selectedIDs.forEach(function(id) {
60578 if (context.geometry(id) === 'vertex') {
60579 vertexIDs.push(id);
60580 } else if (context.entity(id).type === 'way'){
60587 var disconnectingWayID = (vertexIDs.length === 0 && wayIDs.length === 1 && wayIDs[0]);
60588 var extent, nodes, coords;
60590 if (disconnectingWayID) { // disconnecting a way
60591 var way = context.entity(disconnectingWayID);
60592 extent = way.extent(context.graph());
60593 nodes = utilGetAllNodes([disconnectingWayID], context.graph());
60594 coords = nodes.map(function(n) { return n.loc; });
60596 way.nodes.forEach(function(vertexID) {
60597 var action = actionDisconnect(vertexID).limitWays(wayIDs);
60598 if (action.disabled(context.graph()) !== 'not_connected') {
60599 actions.push(action);
60603 } else { // disconnecting a vertex
60604 vertexIDs.forEach(function(vertexID) {
60605 var action = actionDisconnect(vertexID);
60607 if (wayIDs.length > 0) {
60608 var waysIDsForVertex = wayIDs.filter(function(wayID) {
60609 var way = context.entity(wayID);
60610 return way.nodes.indexOf(vertexID) !== -1;
60612 action.limitWays(waysIDsForVertex);
60614 actions.push(action);
60619 var operation = function() {
60620 context.perform(function(graph) {
60621 return actions.reduce(function(graph, action) { return action(graph); }, graph);
60622 }, operation.annotation());
60624 context.validator().validate();
60628 operation.available = function() {
60629 if (actions.length === 0) return false;
60630 if (otherIDs.length !== 0) return false;
60632 if (vertexIDs.length !== 0 && wayIDs.length !== 0 && !wayIDs.every(function(wayID) {
60633 return vertexIDs.some(function(vertexID) {
60634 var way = context.entity(wayID);
60635 return way.nodes.indexOf(vertexID) !== -1;
60643 operation.disabled = function() {
60645 for (var actionIndex in actions) {
60646 reason = actions[actionIndex].disabled(context.graph());
60647 if (reason) return reason;
60650 if (disconnectingWayID && extent.percentContainedIn(context.extent()) < 0.8) {
60651 return 'too_large.single';
60652 } else if (disconnectingWayID && someMissing()) {
60653 return 'not_downloaded';
60654 } else if (selectedIDs.some(context.hasHiddenConnections)) {
60655 return 'connected_to_hidden';
60661 function someMissing() {
60662 if (context.inIntro()) return false;
60663 var osm = context.connection();
60665 var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
60666 if (missing.length) {
60667 missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
60676 operation.tooltip = function() {
60677 var disable = operation.disabled();
60679 return t('operations.disconnect.' + disable);
60681 if (disconnectingWayID) {
60682 return t('operations.disconnect.' + context.geometry(disconnectingWayID) + '.description');
60684 return t('operations.disconnect.description');
60688 operation.annotation = function() {
60689 return t('operations.disconnect.annotation');
60693 operation.id = 'disconnect';
60694 operation.keys = [t('operations.disconnect.key')];
60695 operation.title = t('operations.disconnect.title');
60696 operation.behavior = behaviorOperation(context).which(operation);
60701 function operationDowngrade(selectedIDs, context) {
60702 var affectedFeatureCount = 0;
60705 setDowngradeTypeForEntityIDs();
60707 var multi = affectedFeatureCount === 1 ? 'single' : 'multiple';
60709 function setDowngradeTypeForEntityIDs() {
60710 for (var i in selectedIDs) {
60711 var entityID = selectedIDs[i];
60712 var type = downgradeTypeForEntityID(entityID);
60714 affectedFeatureCount += 1;
60715 if (downgradeType && type !== downgradeType) {
60716 downgradeType = 'building_address';
60718 downgradeType = type;
60724 function downgradeTypeForEntityID(entityID) {
60725 var graph = context.graph();
60726 var entity = graph.entity(entityID);
60727 var preset = context.presets().match(entity, graph);
60729 if (preset.isFallback()) return null;
60731 if (entity.type === 'node' &&
60732 preset.id !== 'address' &&
60733 Object.keys(entity.tags).some(function(key) {
60734 return key.match(/^addr:.{1,}/);
60739 if (entity.geometry(graph) === 'area' &&
60740 entity.tags.building &&
60741 !preset.tags.building) {
60749 var buildingKeysToKeep = ['architect', 'building', 'height', 'layer', 'source', 'type', 'wheelchair'];
60750 var addressKeysToKeep = ['source'];
60752 var operation = function () {
60753 context.perform(function(graph) {
60755 for (var i in selectedIDs) {
60756 var entityID = selectedIDs[i];
60757 var type = downgradeTypeForEntityID(entityID);
60758 if (!type) continue;
60760 var tags = Object.assign({}, graph.entity(entityID).tags); // shallow copy
60761 for (var key in tags) {
60762 if (type === 'address' && addressKeysToKeep.indexOf(key) !== -1) continue;
60763 if (type === 'building') {
60764 if (buildingKeysToKeep.indexOf(key) !== -1 ||
60765 key.match(/^building:.{1,}/) ||
60766 key.match(/^roof:.{1,}/)) continue;
60768 // keep address tags for buildings too
60769 if (key.match(/^addr:.{1,}/)) continue;
60773 graph = actionChangeTags(entityID, tags)(graph);
60776 }, operation.annotation());
60778 context.validator().validate();
60780 // refresh the select mode to enable the delete operation
60781 context.enter(modeSelect(context, selectedIDs));
60785 operation.available = function () {
60786 return downgradeType;
60790 operation.disabled = function () {
60791 if (selectedIDs.some(hasWikidataTag)) {
60792 return 'has_wikidata_tag';
60796 function hasWikidataTag(id) {
60797 var entity = context.entity(id);
60798 return entity.tags.wikidata && entity.tags.wikidata.trim().length > 0;
60803 operation.tooltip = function () {
60804 var disable = operation.disabled();
60806 t('operations.downgrade.' + disable + '.' + multi) :
60807 t('operations.downgrade.description.' + downgradeType);
60811 operation.annotation = function () {
60813 if (downgradeType === 'building_address') {
60814 suffix = 'multiple';
60816 suffix = downgradeType + '.' + multi;
60818 return t('operations.downgrade.annotation.' + suffix, { n: affectedFeatureCount});
60822 operation.id = 'downgrade';
60823 operation.keys = [uiCmd('⌘⌫'), uiCmd('⌘⌦'), uiCmd('⌦')];
60824 operation.title = t('operations.downgrade.title');
60825 operation.behavior = behaviorOperation(context).which(operation);
60831 function operationExtract(selectedIDs, context) {
60832 var entityID = selectedIDs.length && selectedIDs[0];
60833 var action = actionExtract(entityID, context.projection);
60835 var geometry = entityID && context.geometry(entityID);
60836 var extent = geometry === 'area' && context.entity(entityID).extent(context.graph());
60839 var operation = function () {
60840 context.perform(action); // do the extract
60841 context.validator().validate();
60843 var extractedNodeID = action.getExtractedNodeID();
60845 var mouse = context.map().mouseCoordinates();
60846 if (mouse.some(isNaN)) {
60850 // move detached node to the mouse location (transitioned)
60851 context.perform(actionMoveNode(extractedNodeID, mouse));
60853 // after transition completes, put at final mouse location and enter move mode.
60854 window.setTimeout(function() {
60855 mouse = context.map().mouseCoordinates();
60856 context.replace(actionMoveNode(extractedNodeID, mouse));
60861 function enterMoveMode() {
60862 var baseGraph = context.graph();
60863 context.enter(modeMove(context, [extractedNodeID], baseGraph));
60868 operation.available = function () {
60869 if (selectedIDs.length !== 1) return false;
60871 var graph = context.graph();
60872 var entity = graph.hasEntity(entityID);
60873 if (!entity) return false;
60875 if (!entity.hasInterestingTags()) return false;
60877 if (geometry === 'area') {
60878 var preset = context.presets().match(entity, graph);
60879 return preset.geometry.indexOf('point') !== -1;
60882 return entity.type === 'node' && graph.parentWays(entity).length > 0;
60886 operation.disabled = function () {
60887 var reason = action.disabled(context.graph());
60890 } else if (geometry === 'vertex' && selectedIDs.some(context.hasHiddenConnections)) {
60891 return 'connected_to_hidden';
60892 } else if (extent && extent.area() && extent.percentContainedIn(context.extent()) < 0.8) {
60893 return 'too_large';
60900 operation.tooltip = function () {
60901 var disableReason = operation.disabled();
60902 if (disableReason) {
60903 return t('operations.extract.' + disableReason + '.' + geometry + '.single',
60904 { relation: context.presets().item('type/restriction').name() });
60906 return t('operations.extract.description.' + geometry + '.single');
60911 operation.annotation = function () {
60912 return t('operations.extract.annotation.single');
60916 operation.id = 'extract';
60917 operation.keys = [t('operations.extract.key')];
60918 operation.title = t('operations.extract.title');
60919 operation.behavior = behaviorOperation(context).which(operation);
60925 function operationMerge(selectedIDs, context) {
60927 function updatePresetTags(newGraph, ids) {
60929 var newEntity = newGraph.hasEntity(id);
60931 if (!newEntity) return;
60932 var newPreset = context.presets().match(newEntity, newGraph);
60933 context.replace(actionChangePreset(id, null, newPreset), operation.annotation());
60937 var join = actionJoin(selectedIDs);
60938 var merge = actionMerge(selectedIDs);
60939 var mergePolygon = actionMergePolygon(selectedIDs);
60940 var mergeNodes = actionMergeNodes(selectedIDs);
60943 var operation = function() {
60947 if (!join.disabled(context.graph())) {
60948 doUpdateTags = false;
60950 } else if (!merge.disabled(context.graph())) {
60951 doUpdateTags = true;
60953 } else if (!mergePolygon.disabled(context.graph())) {
60954 doUpdateTags = false;
60955 action = mergePolygon;
60957 doUpdateTags = true;
60958 action = mergeNodes;
60961 context.perform(action, operation.annotation());
60963 var ids = selectedIDs.filter(function(id) {
60964 var entity = context.hasEntity(id);
60965 return entity && entity.type !== 'node';
60968 // if we merged tags, rematch preset to update tags if necessary (#3851)
60969 if (doUpdateTags) {
60970 updatePresetTags(context.graph(), ids);
60973 context.validator().validate();
60974 context.enter(modeSelect(context, ids));
60978 operation.available = function() {
60979 return selectedIDs.length >= 2;
60983 operation.disabled = function() {
60984 return join.disabled(context.graph()) &&
60985 merge.disabled(context.graph()) &&
60986 mergePolygon.disabled(context.graph()) &&
60987 mergeNodes.disabled(context.graph());
60991 operation.tooltip = function() {
60992 var j = join.disabled(context.graph()); // 'not_eligible', 'not_adjacent', 'restriction', 'conflicting_tags'
60993 var m = merge.disabled(context.graph()); // 'not_eligible'
60994 var p = mergePolygon.disabled(context.graph()); // 'not_eligible', 'incomplete_relation'
60995 var n = mergeNodes.disabled(context.graph()); // 'not_eligible', 'relation', 'restriction'
60997 // disabled for one of various reasons
60998 if (j && m && p && n) {
60999 if (j === 'restriction' || n === 'restriction') {
61000 return t('operations.merge.restriction',
61001 { relation: context.presets().item('type/restriction').name() });
61003 } else if (p === 'incomplete_relation') {
61004 return t('operations.merge.incomplete_relation');
61006 } else if (n === 'relation') {
61007 return t('operations.merge.relation');
61010 return t('operations.merge.' + j);
61014 return t('operations.merge.description');
61019 operation.annotation = function() {
61020 return t('operations.merge.annotation', { n: selectedIDs.length });
61024 operation.id = 'merge';
61025 operation.keys = [t('operations.merge.key')];
61026 operation.title = t('operations.merge.title');
61027 operation.behavior = behaviorOperation(context).which(operation);
61032 function operationReverse(selectedIDs, context) {
61033 var entityID = selectedIDs[0];
61035 var operation = function() {
61036 context.perform(actionReverse(entityID), operation.annotation());
61037 context.validator().validate();
61041 operation.available = function() {
61042 return selectedIDs.length === 1 && context.geometry(entityID) === 'line';
61046 operation.disabled = function() {
61051 operation.tooltip = function() {
61052 return t('operations.reverse.description');
61056 operation.annotation = function() {
61057 return t('operations.reverse.annotation');
61061 operation.id = 'reverse';
61062 operation.keys = [t('operations.reverse.key')];
61063 operation.title = t('operations.reverse.title');
61064 operation.behavior = behaviorOperation(context).which(operation);
61069 function operationSplit(selectedIDs, context) {
61070 var vertices = selectedIDs
61071 .filter(function(id) { return context.geometry(id) === 'vertex'; });
61072 var entityID = vertices[0];
61073 var action = actionSplit(entityID);
61076 if (vertices.length === 1) {
61077 if (entityID && selectedIDs.length > 1) {
61078 var ids = selectedIDs.filter(function(id) { return id !== entityID; });
61079 action.limitWays(ids);
61081 ways = action.ways(context.graph());
61085 var operation = function() {
61086 var difference = context.perform(action, operation.annotation());
61087 context.enter(modeSelect(context, difference.extantIDs()));
61091 operation.available = function() {
61092 return vertices.length === 1;
61096 operation.disabled = function() {
61097 var reason = action.disabled(context.graph());
61100 } else if (selectedIDs.some(context.hasHiddenConnections)) {
61101 return 'connected_to_hidden';
61108 operation.tooltip = function() {
61109 var disable = operation.disabled();
61111 return t('operations.split.' + disable);
61112 } else if (ways.length === 1) {
61113 return t('operations.split.description.' + context.geometry(ways[0].id));
61115 return t('operations.split.description.multiple');
61120 operation.annotation = function() {
61121 return ways.length === 1 ?
61122 t('operations.split.annotation.' + context.geometry(ways[0].id)) :
61123 t('operations.split.annotation.multiple', { n: ways.length });
61127 operation.id = 'split';
61128 operation.keys = [t('operations.split.key')];
61129 operation.title = t('operations.split.title');
61130 operation.behavior = behaviorOperation(context).which(operation);
61135 function operationStraighten(selectedIDs, context) {
61136 var wayIDs = selectedIDs.filter(function(id) { return id.charAt(0) === 'w'; });
61137 var nodeIDs = selectedIDs.filter(function(id) { return id.charAt(0) === 'n'; });
61139 var nodes = utilGetAllNodes(selectedIDs, context.graph());
61140 var coords = nodes.map(function(n) { return n.loc; });
61141 var action = chooseAction();
61145 function chooseAction() {
61146 // straighten selected nodes
61147 if (wayIDs.length === 0 && nodeIDs.length > 2) {
61148 geometry = 'points';
61149 return actionStraightenNodes(nodeIDs, context.projection);
61151 // straighten selected ways (possibly between range of 2 selected nodes)
61152 } else if (wayIDs.length > 0 && (nodeIDs.length === 0 || nodeIDs.length === 2)) {
61153 var startNodeIDs = [];
61154 var endNodeIDs = [];
61156 for (var i = 0; i < selectedIDs.length; i++) {
61157 var entity = context.entity(selectedIDs[i]);
61158 if (entity.type === 'node') {
61160 } else if (entity.type !== 'way' || entity.isClosed()) {
61161 return false; // exit early, can't straighten these
61164 startNodeIDs.push(entity.first());
61165 endNodeIDs.push(entity.last());
61168 // Remove duplicate end/startNodeIDs (duplicate nodes cannot be at the line end)
61169 startNodeIDs = startNodeIDs.filter(function(n) {
61170 return startNodeIDs.indexOf(n) === startNodeIDs.lastIndexOf(n);
61172 endNodeIDs = endNodeIDs.filter(function(n) {
61173 return endNodeIDs.indexOf(n) === endNodeIDs.lastIndexOf(n);
61176 // Ensure all ways are connected (i.e. only 2 unique endpoints/startpoints)
61177 if (utilArrayDifference(startNodeIDs, endNodeIDs).length +
61178 utilArrayDifference(endNodeIDs, startNodeIDs).length !== 2) return false;
61180 // Ensure path contains at least 3 unique nodes
61181 var wayNodeIDs = utilGetAllNodes(wayIDs, context.graph())
61182 .map(function(node) { return node.id; });
61183 if (wayNodeIDs.length <= 2) return false;
61185 // If range of 2 selected nodes is supplied, ensure nodes lie on the selected path
61186 if (nodeIDs.length === 2 && (
61187 wayNodeIDs.indexOf(nodeIDs[0]) === -1 || wayNodeIDs.indexOf(nodeIDs[1]) === -1
61191 return actionStraightenWay(selectedIDs, context.projection);
61198 function operation() {
61199 if (!action) return;
61201 context.perform(action, operation.annotation());
61203 window.setTimeout(function() {
61204 context.validator().validate();
61205 }, 300); // after any transition
61209 operation.available = function() {
61210 return Boolean(action);
61214 operation.disabled = function() {
61215 var reason = action.disabled(context.graph());
61218 } else if (someMissing()) {
61219 return 'not_downloaded';
61220 } else if (selectedIDs.some(context.hasHiddenConnections)) {
61221 return 'connected_to_hidden';
61227 function someMissing() {
61228 if (context.inIntro()) return false;
61229 var osm = context.connection();
61231 var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
61232 if (missing.length) {
61233 missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
61242 operation.tooltip = function() {
61243 var disable = operation.disabled();
61245 t('operations.straighten.' + disable) :
61246 t('operations.straighten.description.' + geometry);
61250 operation.annotation = function() {
61251 return t('operations.straighten.annotation.' + geometry);
61255 operation.id = 'straighten';
61256 operation.keys = [t('operations.straighten.key')];
61257 operation.title = t('operations.straighten.title');
61258 operation.behavior = behaviorOperation(context).which(operation);
61265 var Operations = /*#__PURE__*/Object.freeze({
61266 operationCircularize: operationCircularize,
61267 operationContinue: operationContinue,
61268 operationDelete: operationDelete,
61269 operationDisconnect: operationDisconnect,
61270 operationDowngrade: operationDowngrade,
61271 operationExtract: operationExtract,
61272 operationMerge: operationMerge,
61273 operationMove: operationMove,
61274 operationOrthogonalize: operationOrthogonalize,
61275 operationReflectShort: operationReflectShort,
61276 operationReflectLong: operationReflectLong,
61277 operationReverse: operationReverse,
61278 operationRotate: operationRotate,
61279 operationSplit: operationSplit,
61280 operationStraighten: operationStraighten
61283 function uiEditMenu(context, operations) {
61285 var center = [0, 0];
61286 var offset = [0, 0];
61289 var p = 8; // top padding
61290 var m = 4; // top margin
61291 var h = 15; // height of icon
61292 var vpBottomMargin = 45; // viewport bottom margin
61293 var vpSideMargin = 35; // viewport side margin
61294 var buttonWidth = 44;
61295 var buttonHeight = (2 * p + h);
61296 var menuWidth = buttonWidth;
61297 var menuHeight = (2 * m) + operations.length * buttonHeight;
61298 var menuSideMargin = 10;
61299 var tooltipWidth = 200;
61300 var tooltipHeight = 200; // a reasonable guess, real height depends on tooltip contents
61303 var editMenu = function (selection) {
61304 if (!operations.length) return;
61306 selection.node().parentNode.focus();
61308 var isRTL = textDirection === 'rtl';
61309 var viewport = context.surfaceRect();
61311 if (!isRTL && (center[0] + menuSideMargin + menuWidth) > (viewport.width - vpSideMargin)) {
61312 // menu is going left-to-right and near right viewport edge, go left instead
61314 } else if (isRTL && (center[0] - menuSideMargin - menuWidth) < vpSideMargin) {
61315 // menu is going right-to-left and near left viewport edge, go right instead
61319 offset[0] = (isRTL ? -1 * (menuSideMargin + menuWidth) : menuSideMargin);
61321 if (center[1] + menuHeight > (viewport.height - vpBottomMargin)) {
61322 // menu is near bottom viewport edge, shift upwards
61323 offset[1] = -1 * (center[1] + menuHeight - viewport.height + vpBottomMargin);
61326 var origin = geoVecAdd(center, offset);
61330 .attr('class', 'edit-menu')
61331 .attr('transform', 'translate(' + origin + ')')
61332 .attr('opacity', 0);
61336 .attr('opacity', 1);
61340 .attr('class', 'edit-menu-background')
61344 .attr('width', menuWidth)
61345 .attr('height', menuHeight)
61346 .attr('stroke-linecap', 'round');
61349 var buttons = menu.selectAll('.edit-menu-item')
61353 var buttonsEnter = buttons.enter()
61355 .attr('class', function (d) { return 'edit-menu-item edit-menu-item-' + d.id; })
61356 .attr('transform', function(d, i) {
61357 return 'translate(' + geoVecFloor([0, m + i * buttonHeight]).join(',') + ')';
61363 .attr('width', buttonWidth)
61364 .attr('height', buttonHeight)
61365 .on('click', click)
61366 .on('mousedown', mousedown)
61367 .on('mouseover', mouseover)
61368 .on('mouseout', mouseout);
61372 .attr('width', '20')
61373 .attr('height', '20')
61374 .attr('transform', function () { return 'translate(' + [2 * p, 5] + ')'; })
61375 .attr('xlink:href', function (d) { return '#iD-operation-' + d.id; });
61378 buttons = buttonsEnter
61380 .classed('disabled', function(d) { return d.disabled(); });
61383 tooltip = d3_select('#id-container')
61385 .attr('class', 'tooltip-inner edit-menu-tooltip');
61388 function click(operation) {
61389 event.stopPropagation();
61390 if (operation.disabled()) return;
61395 function mousedown() {
61396 event.stopPropagation(); // https://github.com/openstreetmap/iD/issues/1869
61399 function mouseover(d, i) {
61403 tipX = viewport.left + origin[0] + menuSideMargin + menuWidth;
61405 tipX = viewport.left + origin[0] - 4 - tooltipWidth;
61408 if (tipX + tooltipWidth > viewport.right) {
61409 // tip is going left-to-right and near right viewport edge, go left instead
61410 tipX = viewport.left + origin[0] - 4 - tooltipWidth;
61411 } else if (tipX < viewport.left) {
61412 // tip is going right-to-left and near left viewport edge, go right instead
61413 tipX = viewport.left + origin[0] + menuSideMargin + menuWidth;
61416 tipY = viewport.top + origin[1] + (i * buttonHeight);
61417 if (tipY + tooltipHeight > viewport.bottom) {
61418 // tip is near bottom viewport edge, shift upwards
61419 tipY -= tipY + tooltipHeight - viewport.bottom;
61423 .style('left', tipX + 'px')
61424 .style('top', tipY + 'px')
61425 .style('display', 'block')
61426 .html(uiTooltipHtml(d.tooltip(), d.keys[0], d.title));
61428 // update disabled again, just in case tooltip and disabled state disagree
61429 // https://github.com/openstreetmap/iD/issues/6296#issuecomment-489259027
61430 d3_select(this.parentNode)
61431 .classed('disabled', d.disabled());
61435 function mouseout() {
61436 tooltip.style('display', 'none');
61441 editMenu.close = function () {
61444 .style('pointer-events', 'none')
61446 .attr('opacity', 0)
61456 editMenu.center = function(val) {
61457 if (!arguments.length) return center;
61466 function uiSelectionList(context, selectedIDs) {
61468 function selectEntity(entity) {
61469 context.enter(modeSelect(context, [entity.id]));
61473 function deselectEntity(entity) {
61474 event.stopPropagation();
61475 var index = selectedIDs.indexOf(entity.id);
61477 selectedIDs.splice(index, 1);
61479 context.enter(modeSelect(context, selectedIDs));
61483 function selectionList(selection) {
61484 selection.classed('selection-list-pane', true);
61486 var header = selection
61488 .attr('class', 'header fillL cf');
61492 .text(t('inspector.multiselect'));
61494 var listWrap = selection
61496 .attr('class', 'inspector-body');
61498 var list = listWrap
61500 .attr('class', 'feature-list cf');
61504 .on('change.selectionList', function(difference) {
61505 if (difference) drawList();
61511 function drawList() {
61512 var entities = selectedIDs
61513 .map(function(id) { return context.hasEntity(id); })
61514 .filter(function(entity) { return entity; });
61516 var items = list.selectAll('.feature-list-item')
61517 .data(entities, osmEntity.key);
61523 var enter = items.enter()
61525 .attr('class', 'feature-list-item')
61526 .on('click', selectEntity);
61529 .each(function(d) {
61530 d3_select(this).on('mouseover', function() {
61531 utilHighlightEntities([d.id], true, context);
61533 d3_select(this).on('mouseout', function() {
61534 utilHighlightEntities([d.id], false, context);
61540 .attr('class', 'label');
61544 .attr('class', 'close')
61545 .on('click', deselectEntity)
61546 .call(svgIcon('#iD-icon-close'));
61550 .attr('class', 'entity-geom-icon')
61551 .call(svgIcon('', 'pre-text'));
61555 .attr('class', 'entity-type');
61559 .attr('class', 'entity-name');
61562 items = items.merge(enter);
61564 items.selectAll('.entity-geom-icon use')
61565 .attr('href', function() {
61566 var entity = this.parentNode.parentNode.__data__;
61567 return '#iD-icon-' + context.geometry(entity.id);
61570 items.selectAll('.entity-type')
61571 .text(function(entity) { return context.presets().match(entity, context.graph()).name(); });
61573 items.selectAll('.entity-name')
61574 .text(function(entity) { return utilDisplayName(entity); });
61578 return selectionList;
61581 function uiRadialMenu(context, operations) {
61583 var center = [0, 0];
61587 var radialMenu = function(selection) {
61588 if (!operations.length) return;
61590 selection.node().parentNode.focus();
61592 function click(operation) {
61593 event.stopPropagation();
61594 if (operation.disabled()) return;
61596 radialMenu.close();
61601 .attr('class', 'radial-menu')
61602 .attr('transform', 'translate(' + center + ')')
61603 .attr('opacity', 0);
61607 .attr('opacity', 1);
61610 var a = Math.PI / 4;
61611 var a0 = -Math.PI / 4;
61612 var a1 = a0 + (operations.length - 1) * a;
61616 .attr('class', 'radial-menu-background')
61617 .attr('d', 'M' + r * Math.sin(a0) + ',' +
61619 ' A' + r + ',' + r + ' 0 ' + (operations.length > 5 ? '1' : '0') + ',0 ' +
61620 (r * Math.sin(a1) + 1e-3) + ',' +
61621 (r * Math.cos(a1) + 1e-3)) // Force positive-length path (#1305)
61622 .attr('stroke-width', 50)
61623 .attr('stroke-linecap', 'round');
61625 var button = menu.selectAll()
61629 .attr('class', function(d) { return 'radial-menu-item radial-menu-item-' + d.id; })
61630 .classed('disabled', function(d) { return d.disabled(); })
61631 .attr('transform', function(d, i) {
61632 return 'translate(' + geoVecFloor([
61633 r * Math.sin(a0 + i * a),
61634 r * Math.cos(a0 + i * a)]).join(',') + ')';
61640 .on('click', click)
61641 .on('mousedown', mousedown)
61642 .on('mouseover', mouseover)
61643 .on('mouseout', mouseout);
61647 .attr('transform', 'translate(-10,-10)')
61648 .attr('width', '20')
61649 .attr('height', '20')
61650 .attr('xlink:href', function(d) { return '#iD-operation-' + d.id; });
61652 tooltip = d3_select(document.body)
61654 .attr('class', 'tooltip-inner radial-menu-tooltip');
61656 function mousedown() {
61657 event.stopPropagation(); // https://github.com/openstreetmap/iD/issues/1869
61660 function mouseover(d, i) {
61661 var rect = context.surfaceRect();
61662 var angle = a0 + i * a;
61663 var top = rect.top + (r + 25) * Math.cos(angle) + center[1] + 'px';
61664 var left = rect.left + (r + 25) * Math.sin(angle) + center[0] + 'px';
61665 var bottom = rect.height - (r + 25) * Math.cos(angle) - center[1] + 'px';
61666 var right = rect.width - (r + 25) * Math.sin(angle) - center[0] + 'px';
61669 .style('top', null)
61670 .style('left', null)
61671 .style('bottom', null)
61672 .style('right', null)
61673 .style('display', 'block')
61674 .html(uiTooltipHtml(d.tooltip(), d.keys[0]));
61678 .style('right', right)
61679 .style('top', top);
61680 } else if (i >= 4) {
61682 .style('left', left)
61683 .style('bottom', bottom);
61686 .style('left', left)
61687 .style('top', top);
61691 function mouseout() {
61692 tooltip.style('display', 'none');
61697 radialMenu.close = function() {
61700 .style('pointer-events', 'none')
61702 .attr('opacity', 0)
61712 radialMenu.center = function(_) {
61713 if (!arguments.length) return center;
61722 var _relatedParent;
61725 function modeSelect(context, selectedIDs) {
61731 var keybinding = utilKeybinding('select');
61733 behaviorCopy(context),
61734 behaviorPaste(context),
61735 behaviorBreathe(context),
61736 behaviorHover(context),
61737 behaviorSelect(context),
61738 behaviorLasso(context),
61739 modeDragNode(context).restoreSelectedIDs(selectedIDs).behavior,
61740 modeDragNote(context).behavior
61743 var _timeout = null;
61744 var _newFeature = false;
61745 var _suppressMenu = true;
61746 var _follow = false;
61749 var wrap = context.container()
61750 .select('.inspector-wrap');
61753 function singular() {
61754 if (selectedIDs && selectedIDs.length === 1) {
61755 return context.hasEntity(selectedIDs[0]);
61760 function checkSelectedIDs() {
61762 if (Array.isArray(selectedIDs)) {
61763 ids = selectedIDs.filter(function(id) {
61764 return context.hasEntity(id);
61771 context.enter(modeBrowse(context));
61773 return !!ids.length;
61777 // find the common parent ways for nextVertex, previousVertex
61778 function commonParents() {
61779 var graph = context.graph();
61780 var commonParents = [];
61782 for (var i = 0; i < selectedIDs.length; i++) {
61783 var entity = context.hasEntity(selectedIDs[i]);
61784 if (!entity || entity.geometry(graph) !== 'vertex') {
61785 return []; // selection includes some not vertexes
61788 var currParents = graph.parentWays(entity).map(function(w) { return w.id; });
61789 if (!commonParents.length) {
61790 commonParents = currParents;
61794 commonParents = utilArrayIntersection(commonParents, currParents);
61795 if (!commonParents.length) {
61800 return commonParents;
61804 function singularParent() {
61805 var parents = commonParents();
61806 if (!parents || parents.length === 0) {
61807 _relatedParent = null;
61811 // relatedParent is used when we visit a vertex with multiple
61812 // parents, and we want to remember which parent line we started on.
61814 if (parents.length === 1) {
61815 _relatedParent = parents[0]; // remember this parent for later
61816 return _relatedParent;
61819 if (parents.indexOf(_relatedParent) !== -1) {
61820 return _relatedParent; // prefer the previously seen parent
61827 function closeMenu() {
61829 context.surface().call(editMenu.close);
61834 function positionMenu() {
61835 if (!editMenu) return;
61837 var entity = singular();
61838 if (entity && context.geometry(entity.id) === 'relation') {
61839 _suppressMenu = true;
61841 var point = context.mouse();
61842 var viewport = geoExtent(context.projection.clipExtent()).polygon();
61844 if (point && geoPointInPolygon(point, viewport)) {
61845 editMenu.center(point);
61847 _suppressMenu = true;
61853 function showMenu() {
61856 context.surface().call(editMenu);
61861 function toggleMenu() {
61862 // deprecation warning - Radial Menu to be removed in iD v3
61863 if (d3_select('.edit-menu, .radial-menu').empty()) {
61872 mode.selectedIDs = function() {
61873 return selectedIDs;
61877 mode.zoomToSelected = function() {
61878 var entity = singular();
61880 context.map().zoomToEase(entity);
61885 mode.reselect = function() {
61886 if (!checkSelectedIDs()) return;
61888 var surfaceNode = context.surface().node();
61889 if (surfaceNode.focus) { // FF doesn't support it
61890 surfaceNode.focus();
61894 if (!_suppressMenu) {
61900 mode.newFeature = function(val) {
61901 if (!arguments.length) return _newFeature;
61907 mode.suppressMenu = function(val) {
61908 if (!arguments.length) return _suppressMenu;
61909 _suppressMenu = val;
61914 mode.follow = function(val) {
61915 if (!arguments.length) return _follow;
61921 mode.enter = function() {
61922 if (!checkSelectedIDs()) return;
61924 context.features().forceVisible(selectedIDs);
61926 var operations = Object.values(Operations)
61927 .map(function(o) { return o(selectedIDs, context); })
61928 .filter(function(o) { return o.available() && o.id !== 'delete' && o.id !== 'downgrade'; });
61930 var downgradeOperation = operationDowngrade(selectedIDs, context);
61931 // don't allow delete if downgrade is available
61932 var lastOperation = !context.inIntro() && downgradeOperation.available() ? downgradeOperation : operationDelete(selectedIDs, context);
61934 // deprecation warning - Radial Menu to be removed in iD v3
61935 var isRadialMenu = context.storage('edit-menu-style') === 'radial';
61936 if (isRadialMenu) {
61937 operations = operations.slice(0,7);
61938 operations.unshift(lastOperation);
61940 operations.push(lastOperation);
61943 operations.forEach(function(operation) {
61944 if (operation.behavior) {
61945 behaviors.push(operation.behavior);
61949 behaviors.forEach(context.install);
61952 .on(t('inspector.zoom_to.key'), mode.zoomToSelected)
61953 .on(['[', 'pgup'], previousVertex)
61954 .on([']', 'pgdown'], nextVertex)
61955 .on(['{', uiCmd('⌘['), 'home'], firstVertex)
61956 .on(['}', uiCmd('⌘]'), 'end'], lastVertex)
61957 .on(['\\', 'pause'], nextParent)
61958 .on('⎋', esc, true)
61959 .on('space', toggleMenu);
61961 d3_select(document)
61965 // deprecation warning - Radial Menu to be removed in iD v3
61966 editMenu = isRadialMenu
61967 ? uiRadialMenu(context, operations)
61968 : uiEditMenu(context, operations);
61970 context.ui().sidebar
61971 .select(singular() ? singular().id : null, _newFeature);
61974 .on('undone.select', update)
61975 .on('redone.select', update);
61978 .on('move.select', closeMenu)
61979 .on('drawn.select', selectElements);
61982 .on('dblclick.select', dblclick);
61987 if (selectedIDs.length > 1) {
61988 var entities = uiSelectionList(context, selectedIDs);
61989 context.ui().sidebar.show(entities);
61993 var extent = geoExtent();
61994 var graph = context.graph();
61995 selectedIDs.forEach(function(id) {
61996 var entity = context.entity(id);
61997 extent._extend(entity.extent(graph));
62000 var loc = extent.center();
62001 context.map().centerEase(loc);
62002 } else if (singular() && singular().type === 'way') {
62003 context.map().pan([0,0]); // full redraw, to adjust z-sorting #2914
62006 _timeout = window.setTimeout(function() {
62008 if (!_suppressMenu) {
62011 }, 270); /* after any centerEase completes */
62014 function update() {
62016 checkSelectedIDs();
62020 function dblclick() {
62021 var target = d3_select(event.target);
62023 var datum = target.datum();
62024 var entity = datum && datum.properties && datum.properties.entity;
62025 if (!entity) return;
62027 if (entity instanceof osmWay && target.classed('target')) {
62028 var choice = geoChooseEdge(context.childNodes(entity), context.mouse(), context.projection);
62029 var prev = entity.nodes[choice.index - 1];
62030 var next = entity.nodes[choice.index];
62033 actionAddMidpoint({ loc: choice.loc, edge: [prev, next] }, osmNode()),
62034 t('operations.add.annotation.vertex')
62037 event.preventDefault();
62038 event.stopPropagation();
62040 } else if (entity.type === 'midpoint') {
62042 actionAddMidpoint({ loc: entity.loc, edge: entity.edge }, osmNode()),
62043 t('operations.add.annotation.vertex'));
62045 event.preventDefault();
62046 event.stopPropagation();
62051 function selectElements(drawn) {
62052 if (!checkSelectedIDs()) return;
62054 var surface = context.surface();
62055 var entity = singular();
62057 if (entity && context.geometry(entity.id) === 'relation') {
62058 _suppressMenu = true;
62062 surface.selectAll('.related')
62063 .classed('related', false);
62066 if (_relatedParent) {
62067 surface.selectAll(utilEntitySelector([_relatedParent]))
62068 .classed('related', true);
62071 var selection = context.surface()
62072 .selectAll(utilEntityOrMemberSelector(selectedIDs, context.graph()));
62074 if (selection.empty()) {
62075 // Return to browse mode if selected DOM elements have
62076 // disappeared because the user moved them out of view..
62077 var source = event && event.type === 'zoom' && event.sourceEvent;
62078 if (drawn && source && (source.type === 'mousemove' || source.type === 'touchmove')) {
62079 context.enter(modeBrowse(context));
62083 .classed('selected', true);
62089 if (d3_select('.combobox').size()) return;
62090 context.enter(modeBrowse(context));
62094 function firstVertex() {
62095 event.preventDefault();
62096 var entity = singular();
62097 var parent = singularParent();
62100 if (entity && entity.type === 'way') {
62102 } else if (parent) {
62103 way = context.entity(parent);
62108 modeSelect(context, [way.first()]).follow(true)
62114 function lastVertex() {
62115 event.preventDefault();
62116 var entity = singular();
62117 var parent = singularParent();
62120 if (entity && entity.type === 'way') {
62122 } else if (parent) {
62123 way = context.entity(parent);
62128 modeSelect(context, [way.last()]).follow(true)
62134 function previousVertex() {
62135 event.preventDefault();
62136 var parent = singularParent();
62137 if (!parent) return;
62139 var way = context.entity(parent);
62140 var length = way.nodes.length;
62141 var curr = way.nodes.indexOf(selectedIDs[0]);
62146 } else if (way.isClosed()) {
62147 index = length - 2;
62150 if (index !== -1) {
62152 modeSelect(context, [way.nodes[index]]).follow(true)
62158 function nextVertex() {
62159 event.preventDefault();
62160 var parent = singularParent();
62161 if (!parent) return;
62163 var way = context.entity(parent);
62164 var length = way.nodes.length;
62165 var curr = way.nodes.indexOf(selectedIDs[0]);
62168 if (curr < length - 1) {
62170 } else if (way.isClosed()) {
62174 if (index !== -1) {
62176 modeSelect(context, [way.nodes[index]]).follow(true)
62182 function nextParent() {
62183 event.preventDefault();
62184 var parents = commonParents();
62185 if (!parents || parents.length < 2) return;
62187 var index = parents.indexOf(_relatedParent);
62188 if (index < 0 || index > parents.length - 2) {
62189 _relatedParent = parents[0];
62191 _relatedParent = parents[index + 1];
62194 var surface = context.surface();
62195 surface.selectAll('.related')
62196 .classed('related', false);
62198 if (_relatedParent) {
62199 surface.selectAll(utilEntitySelector([_relatedParent]))
62200 .classed('related', true);
62206 mode.exit = function() {
62207 if (_timeout) window.clearTimeout(_timeout);
62209 behaviors.forEach(context.uninstall);
62211 d3_select(document)
62212 .call(keybinding.unbind);
62215 editMenu = undefined;
62218 .on('undone.select', null)
62219 .on('redone.select', null);
62221 var surface = context.surface();
62224 .on('dblclick.select', null);
62227 .selectAll('.selected')
62228 .classed('selected', false);
62231 .selectAll('.related')
62232 .classed('related', false);
62234 context.map().on('drawn.select', null);
62235 context.ui().sidebar.hide();
62236 context.features().forceVisible([]);
62238 var entity = singular();
62239 if (_newFeature && entity && entity.type === 'relation' &&
62241 Object.keys(entity.tags).length === 0 &&
62242 // no parent relations
62243 context.graph().parentRelations(entity).length === 0 &&
62244 // no members or one member with no role
62245 (entity.members.length === 0 || (entity.members.length === 1 && !entity.members[0].role))
62247 // the user added this relation but didn't edit it at all, so just delete it
62248 var deleteAction = actionDeleteRelation(entity.id, true /* don't delete untagged members */);
62249 context.perform(deleteAction, t('operations.delete.annotation.relation'));
62257 function uiLasso(context) {
62258 var group, polygon;
62260 lasso.coordinates = [];
62262 function lasso(selection) {
62263 context.container()
62264 .classed('lasso', true);
62268 .attr('class', 'lasso hide');
62272 .attr('class', 'lasso-path');
62275 .call(uiToggle(true));
62281 polygon.data([lasso.coordinates])
62282 .attr('d', function(d) { return 'M' + d.join(' L') + ' Z'; });
62287 lasso.extent = function () {
62288 return lasso.coordinates.reduce(function(extent, point) {
62289 return extent.extend(geoExtent(point));
62294 lasso.p = function(_) {
62295 if (!arguments.length) return lasso;
62296 lasso.coordinates.push(_);
62302 lasso.close = function() {
62304 group.call(uiToggle(false, function() {
62305 d3_select(this).remove();
62308 context.container().classed('lasso', false);
62315 function behaviorLasso(context) {
62317 var behavior = function(selection) {
62321 function mousedown() {
62322 var button = 0; // left
62323 if (event.button === button && event.shiftKey === true) {
62327 .on('mousemove.lasso', mousemove)
62328 .on('mouseup.lasso', mouseup);
62330 event.stopPropagation();
62335 function mousemove() {
62337 lasso = uiLasso(context);
62338 context.surface().call(lasso);
62341 lasso.p(context.mouse());
62345 function normalize(a, b) {
62347 [Math.min(a[0], b[0]), Math.min(a[1], b[1])],
62348 [Math.max(a[0], b[0]), Math.max(a[1], b[1])]
62353 function lassoed() {
62354 if (!lasso) return [];
62356 var graph = context.graph();
62357 var bounds = lasso.extent().map(context.projection.invert);
62358 var extent = geoExtent(normalize(bounds[0], bounds[1]));
62360 var intersects = context.intersects(extent).filter(function(entity) {
62361 return entity.type === 'node' &&
62362 geoPointInPolygon(context.projection(entity.loc), lasso.coordinates) &&
62363 !context.features().isHidden(entity, graph, entity.geometry(graph));
62366 return intersects.map(function(entity) { return entity.id; });
62370 function mouseup() {
62372 .on('mousemove.lasso', null)
62373 .on('mouseup.lasso', null);
62375 if (!lasso) return;
62377 var ids = lassoed();
62381 context.enter(modeSelect(context, ids));
62386 .on('mousedown.lasso', mousedown);
62390 behavior.off = function(selection) {
62391 selection.on('mousedown.lasso', null);
62398 function modeBrowse(context) {
62402 title: t('modes.browse.title'),
62403 description: t('modes.browse.description')
62407 behaviorPaste(context),
62408 behaviorHover(context).on('hover', context.ui().sidebar.hover),
62409 behaviorSelect(context),
62410 behaviorLasso(context),
62411 modeDragNode(context).behavior,
62412 modeDragNote(context).behavior
62416 mode.enter = function() {
62417 behaviors.forEach(context.install);
62419 // Get focus on the body.
62420 if (document.activeElement && document.activeElement.blur) {
62421 document.activeElement.blur();
62425 context.ui().sidebar.show(sidebar);
62427 context.ui().sidebar.select(null);
62432 mode.exit = function() {
62433 context.ui().sidebar.hover.cancel();
62434 behaviors.forEach(context.uninstall);
62437 context.ui().sidebar.hide();
62442 mode.sidebar = function(_) {
62443 if (!arguments.length) return sidebar;
62452 function behaviorAddWay(context) {
62453 var dispatch$1 = dispatch('start', 'startFromWay', 'startFromNode');
62454 var draw = behaviorDraw(context);
62456 function behavior(surface) {
62457 draw.on('click', function() { dispatch$1.apply('start', this, arguments); })
62458 .on('clickWay', function() { dispatch$1.apply('startFromWay', this, arguments); })
62459 .on('clickNode', function() { dispatch$1.apply('startFromNode', this, arguments); })
62460 .on('cancel', behavior.cancel)
62461 .on('finish', behavior.cancel);
62464 .dblclickEnable(false);
62466 surface.call(draw);
62470 behavior.off = function(surface) {
62471 surface.call(draw.off);
62475 behavior.cancel = function() {
62476 window.setTimeout(function() {
62477 context.map().dblclickEnable(true);
62480 context.enter(modeBrowse(context));
62484 behavior.tail = function(text) {
62490 return utilRebind(behavior, dispatch$1, 'on');
62493 function behaviorHash(context) {
62494 var s0 = null; // cached window.location.hash
62495 var lat = 90 - 1e-8; // allowable latitude range
62498 var parser = function(map, s) {
62499 var q = utilStringQs(s);
62500 var args = (q.map || '').split('/').map(Number);
62502 if (args.length < 3 || args.some(isNaN)) {
62503 return true; // replace bogus hash
62505 } else if (s !== formatter(map).slice(1)) { // hash has changed
62506 var mode = context.mode();
62507 var dist = geoSphericalDistance(map.center(), [args[2], args[1]]);
62510 // Don't allow the hash location to change too much while drawing
62511 // This can happen if the user accidently hit the back button. #3996
62512 if (mode && mode.id.match(/^draw/) !== null && dist > maxdist) {
62513 context.enter(modeBrowse(context));
62516 map.centerZoom([args[2], Math.min(lat, Math.max(-lat, args[1]))], args[0]);
62521 var formatter = function(map) {
62522 var center = map.center();
62523 var zoom = map.zoom();
62524 var precision = Math.max(0, Math.ceil(Math.log(zoom) / Math.LN2));
62525 var q = utilObjectOmit(utilStringQs(window.location.hash.substring(1)),
62526 ['comment', 'source', 'hashtags', 'walkthrough']
62528 var newParams = {};
62531 var selected = context.selectedIDs().filter(function(id) {
62532 return !context.entity(id).isNew();
62534 if (selected.length) {
62535 newParams.id = selected.join(',');
62538 newParams.map = zoom.toFixed(2) +
62539 '/' + center[1].toFixed(precision) +
62540 '/' + center[0].toFixed(precision);
62542 return '#' + utilQsString(Object.assign(q, newParams), true);
62546 function update() {
62547 if (context.inIntro()) return;
62548 var s1 = formatter(context.map());
62550 window.location.replace(s0 = s1); // don't recenter the map!
62555 var throttledUpdate = throttle(update, 500);
62558 function hashchange() {
62559 if (window.location.hash === s0) return; // ignore spurious hashchange events
62560 if (parser(context.map(), (s0 = window.location.hash).substring(1))) {
62561 update(); // replace bogus hash
62566 function behavior() {
62568 .on('move.hash', throttledUpdate);
62571 .on('enter.hash', throttledUpdate);
62574 .on('hashchange.hash', hashchange);
62576 if (window.location.hash) {
62577 var q = utilStringQs(window.location.hash.substring(1));
62580 context.zoomToEntity(q.id.split(',')[0], !q.map);
62584 context.storage('comment', q.comment);
62585 context.storage('commentDate', Date.now());
62589 context.storage('source', q.source);
62590 context.storage('commentDate', Date.now());
62594 context.storage('hashtags', q.hashtags);
62597 if (q.walkthrough === 'true') {
62598 behavior.startWalkthrough = true;
62604 behavior.hadHash = true;
62610 behavior.off = function() {
62611 throttledUpdate.cancel();
62614 .on('move.hash', null);
62617 .on('enter.hash', null);
62620 .on('hashchange.hash', null);
62622 window.location.hash = '';
62630 iD.coreDifference represents the difference between two graphs.
62631 It knows how to calculate the set of entities that were
62632 created, modified, or deleted, and also contains the logic
62633 for recursively extending a difference to the complete set
62634 of entities that will require a redraw, taking into account
62635 child and parent relationships.
62637 function coreDifference(base, head) {
62639 var _didChange = {}; // 'addition', 'deletion', 'geometry', 'properties'
62642 function checkEntityID(id) {
62643 var h = head.entities[id];
62644 var b = base.entities[id];
62646 if (h === b) return;
62647 if (_changes[id]) return;
62650 _changes[id] = { base: b, head: h };
62651 _didChange.deletion = true;
62655 _changes[id] = { base: b, head: h };
62656 _didChange.addition = true;
62661 if (h.members && b.members && !fastDeepEqual(h.members, b.members)) {
62662 _changes[id] = { base: b, head: h };
62663 _didChange.geometry = true;
62664 _didChange.properties = true;
62667 if (h.loc && b.loc && !geoVecEqual(h.loc, b.loc)) {
62668 _changes[id] = { base: b, head: h };
62669 _didChange.geometry = true;
62671 if (h.nodes && b.nodes && !fastDeepEqual(h.nodes, b.nodes)) {
62672 _changes[id] = { base: b, head: h };
62673 _didChange.geometry = true;
62675 if (h.tags && b.tags && !fastDeepEqual(h.tags, b.tags)) {
62676 _changes[id] = { base: b, head: h };
62677 _didChange.properties = true;
62682 Object.keys(head.entities).forEach(checkEntityID);
62683 Object.keys(base.entities).forEach(checkEntityID);
62686 _diff.length = function length() {
62687 return Object.keys(_changes).length;
62691 _diff.changes = function changes() {
62695 _diff.didChange = _didChange;
62698 // pass true to include affected relation members
62699 _diff.extantIDs = function extantIDs(includeRelMembers) {
62700 var result = new Set();
62701 Object.keys(_changes).forEach(function(id) {
62702 if (_changes[id].head) {
62706 var h = _changes[id].head;
62707 var b = _changes[id].base;
62708 var entity = h || b;
62710 if (includeRelMembers && entity.type === 'relation') {
62711 var mh = h ? h.members.map(function(m) { return m.id; }) : [];
62712 var mb = b ? b.members.map(function(m) { return m.id; }) : [];
62713 utilArrayUnion(mh, mb).forEach(function(memberID) {
62714 if (head.hasEntity(memberID)) {
62715 result.add(memberID);
62721 return Array.from(result);
62725 _diff.modified = function modified() {
62727 Object.values(_changes).forEach(function(change) {
62728 if (change.base && change.head) {
62729 result.push(change.head);
62736 _diff.created = function created() {
62738 Object.values(_changes).forEach(function(change) {
62739 if (!change.base && change.head) {
62740 result.push(change.head);
62747 _diff.deleted = function deleted() {
62749 Object.values(_changes).forEach(function(change) {
62750 if (change.base && !change.head) {
62751 result.push(change.base);
62758 _diff.summary = function summary() {
62761 var keys = Object.keys(_changes);
62762 for (var i = 0; i < keys.length; i++) {
62763 var change = _changes[keys[i]];
62765 if (change.head && change.head.geometry(head) !== 'vertex') {
62766 addEntity(change.head, head, change.base ? 'modified' : 'created');
62768 } else if (change.base && change.base.geometry(base) !== 'vertex') {
62769 addEntity(change.base, base, 'deleted');
62771 } else if (change.base && change.head) { // modified vertex
62772 var moved = !fastDeepEqual(change.base.loc, change.head.loc);
62773 var retagged = !fastDeepEqual(change.base.tags, change.head.tags);
62776 addParents(change.head);
62779 if (retagged || (moved && change.head.hasInterestingTags())) {
62780 addEntity(change.head, head, 'modified');
62783 } else if (change.head && change.head.hasInterestingTags()) { // created vertex
62784 addEntity(change.head, head, 'created');
62786 } else if (change.base && change.base.hasInterestingTags()) { // deleted vertex
62787 addEntity(change.base, base, 'deleted');
62791 return Object.values(relevant);
62794 function addEntity(entity, graph, changeType) {
62795 relevant[entity.id] = {
62798 changeType: changeType
62802 function addParents(entity) {
62803 var parents = head.parentWays(entity);
62804 for (var j = parents.length - 1; j >= 0; j--) {
62805 var parent = parents[j];
62806 if (!(parent.id in relevant)) {
62807 addEntity(parent, head, 'modified');
62814 // returns complete set of entities that require a redraw
62815 // (optionally within given `extent`)
62816 _diff.complete = function complete(extent) {
62820 for (id in _changes) {
62821 change = _changes[id];
62823 var h = change.head;
62824 var b = change.base;
62825 var entity = h || b;
62829 (!h || !h.intersects(extent, head)) &&
62830 (!b || !b.intersects(extent, base)))
62835 if (entity.type === 'way') {
62836 var nh = h ? h.nodes : [];
62837 var nb = b ? b.nodes : [];
62840 diff = utilArrayDifference(nh, nb);
62841 for (i = 0; i < diff.length; i++) {
62842 result[diff[i]] = head.hasEntity(diff[i]);
62845 diff = utilArrayDifference(nb, nh);
62846 for (i = 0; i < diff.length; i++) {
62847 result[diff[i]] = head.hasEntity(diff[i]);
62851 if (entity.type === 'relation' && entity.isMultipolygon()) {
62852 var mh = h ? h.members.map(function(m) { return m.id; }) : [];
62853 var mb = b ? b.members.map(function(m) { return m.id; }) : [];
62854 var ids = utilArrayUnion(mh, mb);
62855 for (i = 0; i < ids.length; i++) {
62856 var member = head.hasEntity(ids[i]);
62857 if (!member) continue; // not downloaded
62858 if (extent && !member.intersects(extent, head)) continue; // not visible
62859 result[ids[i]] = member;
62863 addParents(head.parentWays(entity), result);
62864 addParents(head.parentRelations(entity), result);
62870 function addParents(parents, result) {
62871 for (var i = 0; i < parents.length; i++) {
62872 var parent = parents[i];
62873 if (parent.id in result) continue;
62875 result[parent.id] = parent;
62876 addParents(head.parentRelations(parent), result);
62885 function coreTree(head) {
62886 var rtree = rbush_1();
62891 function entityBBox(entity) {
62892 var bbox = entity.extent(head).bbox();
62893 bbox.id = entity.id;
62894 bboxes[entity.id] = bbox;
62899 function updateParents(entity, insertions, memo) {
62900 head.parentWays(entity).forEach(function(way) {
62901 if (bboxes[way.id]) {
62902 rtree.remove(bboxes[way.id]);
62903 insertions[way.id] = way;
62905 updateParents(way, insertions, memo);
62908 head.parentRelations(entity).forEach(function(relation) {
62909 if (memo[entity.id]) return;
62910 memo[entity.id] = true;
62911 if (bboxes[relation.id]) {
62912 rtree.remove(bboxes[relation.id]);
62913 insertions[relation.id] = relation;
62915 updateParents(relation, insertions, memo);
62920 tree.rebase = function(entities, force) {
62921 var insertions = {};
62923 for (var i = 0; i < entities.length; i++) {
62924 var entity = entities[i];
62925 if (!entity.visible) continue;
62927 if (head.entities.hasOwnProperty(entity.id) || bboxes[entity.id]) {
62930 } else if (bboxes[entity.id]) {
62931 rtree.remove(bboxes[entity.id]);
62935 insertions[entity.id] = entity;
62936 updateParents(entity, insertions, {});
62939 rtree.load(Object.values(insertions).map(entityBBox));
62945 tree.intersects = function(extent, graph) {
62946 if (graph !== head) {
62947 var diff = coreDifference(head, graph);
62948 var changed = diff.didChange;
62950 if (changed.addition || changed.deletion || changed.geometry) {
62951 var insertions = {};
62954 if (changed.deletion) {
62955 diff.deleted().forEach(function(entity) {
62956 rtree.remove(bboxes[entity.id]);
62957 delete bboxes[entity.id];
62961 if (changed.geometry) {
62962 diff.modified().forEach(function(entity) {
62963 rtree.remove(bboxes[entity.id]);
62964 insertions[entity.id] = entity;
62965 updateParents(entity, insertions, {});
62969 if (changed.addition) {
62970 diff.created().forEach(function(entity) {
62971 insertions[entity.id] = entity;
62975 rtree.load(Object.values(insertions).map(entityBBox));
62979 return rtree.search(extent.bbox())
62980 .map(function(bbox) { return graph.entity(bbox.id); });
62987 function uiModal(selection, blocking) {
62988 var keybinding = utilKeybinding('modal');
62989 var previous = selection.select('div.modal');
62990 var animate = previous.empty();
62992 previous.transition()
62994 .style('opacity', 0)
62997 var shaded = selection
62999 .attr('class', 'shaded')
63000 .style('opacity', 0);
63002 shaded.close = function() {
63006 .style('opacity',0)
63012 .style('top','0px');
63014 d3_select(document)
63015 .call(keybinding.unbind);
63021 .attr('class', 'modal fillL');
63024 shaded.on('click.remove-modal', function() {
63025 if (event.target === this) {
63030 modal.append('button')
63031 .attr('class', 'close')
63032 .on('click', shaded.close)
63033 .call(svgIcon('#iD-icon-close'));
63036 .on('⌫', shaded.close)
63037 .on('⎋', shaded.close);
63039 d3_select(document)
63045 .attr('class', 'content');
63048 shaded.transition().style('opacity', 1);
63050 shaded.style('opacity', 1);
63057 function uiLoading(context) {
63058 var _modalSelection = d3_select(null);
63060 var _blocking = false;
63063 var loading = function(selection) {
63064 _modalSelection = uiModal(selection, _blocking);
63066 var loadertext = _modalSelection.select('.content')
63067 .classed('loading-modal', true)
63069 .attr('class', 'modal-section fillL');
63073 .attr('class', 'loader')
63074 .attr('src', context.imagePath('loader-white.gif'));
63080 _modalSelection.select('button.close')
63081 .attr('class', 'hide');
63087 loading.message = function(_) {
63088 if (!arguments.length) return _message;
63094 loading.blocking = function(_) {
63095 if (!arguments.length) return _blocking;
63101 loading.close = function() {
63102 _modalSelection.remove();
63109 function coreHistory(context) {
63110 var dispatch$1 = dispatch('change', 'merge', 'restore', 'undone', 'redone');
63111 var lock = utilSessionMutex('lock');
63112 var duration = 150;
63113 var _imageryUsed = [];
63114 var _photoOverlaysUsed = [];
63115 var _checkpoints = {};
63122 // internal _act, accepts list of actions and eased time
63123 function _act(actions, t) {
63124 actions = Array.prototype.slice.call(actions);
63127 if (typeof actions[actions.length - 1] !== 'function') {
63128 annotation = actions.pop();
63131 var graph = _stack[_index].graph;
63132 for (var i = 0; i < actions.length; i++) {
63133 graph = actions[i](graph, t);
63138 annotation: annotation,
63139 imageryUsed: _imageryUsed,
63140 photoOverlaysUsed: _photoOverlaysUsed,
63141 transform: context.projection.transform(),
63142 selectedIDs: context.selectedIDs()
63147 // internal _perform with eased time
63148 function _perform(args, t) {
63149 var previous = _stack[_index].graph;
63150 _stack = _stack.slice(0, _index + 1);
63151 var actionResult = _act(args, t);
63152 _stack.push(actionResult);
63154 return change(previous);
63158 // internal _replace with eased time
63159 function _replace(args, t) {
63160 var previous = _stack[_index].graph;
63161 // assert(_index == _stack.length - 1)
63162 var actionResult = _act(args, t);
63163 _stack[_index] = actionResult;
63164 return change(previous);
63168 // internal _overwrite with eased time
63169 function _overwrite(args, t) {
63170 var previous = _stack[_index].graph;
63175 _stack = _stack.slice(0, _index + 1);
63176 var actionResult = _act(args, t);
63177 _stack.push(actionResult);
63179 return change(previous);
63183 // determine difference and dispatch a change event
63184 function change(previous) {
63185 var difference = coreDifference(previous, history.graph());
63186 if (!_pausedGraph) {
63187 dispatch$1.call('change', this, difference);
63193 // iD uses namespaced keys so multiple installations do not conflict
63194 function getKey(n) {
63195 return 'iD_' + window.location.origin + '_' + n;
63201 graph: function() {
63202 return _stack[_index].graph;
63212 return _stack[0].graph;
63216 merge: function(entities, extent) {
63217 var stack = _stack.map(function(state) { return state.graph; });
63218 _stack[0].graph.rebase(entities, stack, false);
63219 _tree.rebase(entities, false);
63221 dispatch$1.call('merge', this, entities);
63225 perform: function() {
63226 // complete any transition already in progress
63227 d3_select(document).interrupt('history.perform');
63229 var transitionable = false;
63230 var action0 = arguments[0];
63232 if (arguments.length === 1 ||
63233 (arguments.length === 2 && (typeof arguments[1] !== 'function'))) {
63234 transitionable = !!action0.transitionable;
63237 if (transitionable) {
63238 var origArguments = arguments;
63239 d3_select(document)
63240 .transition('history.perform')
63241 .duration(duration)
63243 .tween('history.tween', function() {
63244 return function(t) {
63245 if (t < 1) _overwrite([action0], t);
63248 .on('start', function() {
63249 _perform([action0], 0);
63251 .on('end interrupt', function() {
63252 _overwrite(origArguments, 1);
63256 return _perform(arguments);
63261 replace: function() {
63262 d3_select(document).interrupt('history.perform');
63263 return _replace(arguments, 1);
63267 // Same as calling pop and then perform
63268 overwrite: function() {
63269 d3_select(document).interrupt('history.perform');
63270 return _overwrite(arguments, 1);
63275 d3_select(document).interrupt('history.perform');
63277 var previous = _stack[_index].graph;
63278 if (isNaN(+n) || +n < 0) {
63281 while (n-- > 0 && _index > 0) {
63285 return change(previous);
63289 // Back to the previous annotated state or _index = 0.
63291 d3_select(document).interrupt('history.perform');
63293 var previousStack = _stack[_index];
63294 var previous = previousStack.graph;
63295 while (_index > 0) {
63297 if (_stack[_index].annotation) break;
63300 dispatch$1.call('undone', this, _stack[_index], previousStack);
63301 return change(previous);
63305 // Forward to the next annotated state.
63307 d3_select(document).interrupt('history.perform');
63309 var previousStack = _stack[_index];
63310 var previous = previousStack.graph;
63311 var tryIndex = _index;
63312 while (tryIndex < _stack.length - 1) {
63314 if (_stack[tryIndex].annotation) {
63316 dispatch$1.call('redone', this, _stack[_index], previousStack);
63321 return change(previous);
63325 pauseChangeDispatch: function() {
63326 if (!_pausedGraph) {
63327 _pausedGraph = _stack[_index].graph;
63332 resumeChangeDispatch: function() {
63333 if (_pausedGraph) {
63334 var previous = _pausedGraph;
63335 _pausedGraph = null;
63336 return change(previous);
63341 undoAnnotation: function() {
63344 if (_stack[i].annotation) return _stack[i].annotation;
63350 redoAnnotation: function() {
63351 var i = _index + 1;
63352 while (i <= _stack.length - 1) {
63353 if (_stack[i].annotation) return _stack[i].annotation;
63359 intersects: function(extent) {
63360 return _tree.intersects(extent, _stack[_index].graph);
63364 difference: function() {
63365 var base = _stack[0].graph;
63366 var head = _stack[_index].graph;
63367 return coreDifference(base, head);
63371 changes: function(action) {
63372 var base = _stack[0].graph;
63373 var head = _stack[_index].graph;
63376 head = action(head);
63379 var difference = coreDifference(base, head);
63382 modified: difference.modified(),
63383 created: difference.created(),
63384 deleted: difference.deleted()
63389 hasChanges: function() {
63390 return this.difference().length() > 0;
63394 imageryUsed: function(sources) {
63396 _imageryUsed = sources;
63400 _stack.slice(1, _index + 1).forEach(function(state) {
63401 state.imageryUsed.forEach(function(source) {
63402 if (source !== 'Custom') {
63407 return Array.from(s);
63412 photoOverlaysUsed: function(sources) {
63414 _photoOverlaysUsed = sources;
63418 _stack.slice(1, _index + 1).forEach(function(state) {
63419 state.photoOverlaysUsed.forEach(function(photoOverlay) {
63420 s.add(photoOverlay);
63423 return Array.from(s);
63428 // save the current history state
63429 checkpoint: function(key) {
63430 _checkpoints[key] = {
63438 // restore history state to a given checkpoint or reset completely
63439 reset: function(key) {
63440 if (key !== undefined && _checkpoints.hasOwnProperty(key)) {
63441 _stack = _checkpoints[key].stack;
63442 _index = _checkpoints[key].index;
63444 _stack = [{graph: coreGraph()}];
63446 _tree = coreTree(_stack[0].graph);
63449 dispatch$1.call('change');
63454 // `toIntroGraph()` is used to export the intro graph used by the walkthrough.
63457 // 1. Start the walkthrough.
63458 // 2. Get to a "free editing" tutorial step
63459 // 3. Make your edits to the walkthrough map
63460 // 4. In your browser dev console run:
63461 // `id.history().toIntroGraph()`
63462 // 5. This outputs stringified JSON to the browser console
63463 // 6. Copy it to `data/intro_graph.json` and prettify it in your code editor
63464 toIntroGraph: function() {
63465 var nextID = { n: 0, r: 0, w: 0 };
63467 var graph = this.graph();
63468 var baseEntities = {};
63470 // clone base entities..
63471 Object.values(graph.base().entities).forEach(function(entity) {
63472 var copy = copyIntroEntity(entity);
63473 baseEntities[copy.id] = copy;
63476 // replace base entities with head entities..
63477 Object.keys(graph.entities).forEach(function(id) {
63478 var entity = graph.entities[id];
63480 var copy = copyIntroEntity(entity);
63481 baseEntities[copy.id] = copy;
63483 delete baseEntities[id];
63487 // swap temporary for permanent ids..
63488 Object.values(baseEntities).forEach(function(entity) {
63489 if (Array.isArray(entity.nodes)) {
63490 entity.nodes = entity.nodes.map(function(node) {
63491 return permIDs[node] || node;
63494 if (Array.isArray(entity.members)) {
63495 entity.members = entity.members.map(function(member) {
63496 member.id = permIDs[member.id] || member.id;
63502 return JSON.stringify({ dataIntroGraph: baseEntities });
63505 function copyIntroEntity(source) {
63506 var copy = utilObjectOmit(source, ['type', 'user', 'v', 'version', 'visible']);
63508 // Note: the copy is no longer an osmEntity, so it might not have `tags`
63509 if (copy.tags && !Object.keys(copy.tags)) {
63513 if (Array.isArray(copy.loc)) {
63514 copy.loc[0] = +copy.loc[0].toFixed(6);
63515 copy.loc[1] = +copy.loc[1].toFixed(6);
63518 var match = source.id.match(/([nrw])-\d*/); // temporary id
63519 if (match !== null) {
63520 var nrw = match[1];
63522 do { permID = nrw + (++nextID[nrw]); }
63523 while (baseEntities.hasOwnProperty(permID));
63525 copy.id = permIDs[source.id] = permID;
63532 toJSON: function() {
63533 if (!this.hasChanges()) return;
63535 var allEntities = {};
63536 var baseEntities = {};
63537 var base = _stack[0];
63539 var s = _stack.map(function(i) {
63543 Object.keys(i.graph.entities).forEach(function(id) {
63544 var entity = i.graph.entities[id];
63546 var key = osmEntity.key(entity);
63547 allEntities[key] = entity;
63548 modified.push(key);
63553 // make sure that the originals of changed or deleted entities get merged
63554 // into the base of the _stack after restoring the data from JSON.
63555 if (id in base.graph.entities) {
63556 baseEntities[id] = base.graph.entities[id];
63558 if (entity && entity.nodes) {
63559 // get originals of pre-existing child nodes
63560 entity.nodes.forEach(function(nodeID) {
63561 if (nodeID in base.graph.entities) {
63562 baseEntities[nodeID] = base.graph.entities[nodeID];
63566 // get originals of parent entities too
63567 var baseParents = base.graph._parentWays[id];
63569 baseParents.forEach(function(parentID) {
63570 if (parentID in base.graph.entities) {
63571 baseEntities[parentID] = base.graph.entities[parentID];
63579 if (modified.length) x.modified = modified;
63580 if (deleted.length) x.deleted = deleted;
63581 if (i.imageryUsed) x.imageryUsed = i.imageryUsed;
63582 if (i.photoOverlaysUsed) x.photoOverlaysUsed = i.photoOverlaysUsed;
63583 if (i.annotation) x.annotation = i.annotation;
63584 if (i.transform) x.transform = i.transform;
63585 if (i.selectedIDs) x.selectedIDs = i.selectedIDs;
63590 return JSON.stringify({
63592 entities: Object.values(allEntities),
63593 baseEntities: Object.values(baseEntities),
63595 nextIDs: osmEntity.id.next,
63601 fromJSON: function(json, loadChildNodes) {
63602 var h = JSON.parse(json);
63603 var loadComplete = true;
63605 osmEntity.id.next = h.nextIDs;
63608 if (h.version === 2 || h.version === 3) {
63609 var allEntities = {};
63611 h.entities.forEach(function(entity) {
63612 allEntities[osmEntity.key(entity)] = osmEntity(entity);
63615 if (h.version === 3) {
63616 // This merges originals for changed entities into the base of
63617 // the _stack even if the current _stack doesn't have them (for
63618 // example when iD has been restarted in a different region)
63619 var baseEntities = h.baseEntities.map(function(d) { return osmEntity(d); });
63620 var stack = _stack.map(function(state) { return state.graph; });
63621 _stack[0].graph.rebase(baseEntities, stack, true);
63622 _tree.rebase(baseEntities, true);
63624 // When we restore a modified way, we also need to fetch any missing
63625 // childnodes that would normally have been downloaded with it.. #2142
63626 if (loadChildNodes) {
63627 var osm = context.connection();
63628 var baseWays = baseEntities
63629 .filter(function(e) { return e.type === 'way'; });
63630 var nodeIDs = baseWays
63631 .reduce(function(acc, way) { return utilArrayUnion(acc, way.nodes); }, []);
63632 var missing = nodeIDs
63633 .filter(function(n) { return !_stack[0].graph.hasEntity(n); });
63635 if (missing.length && osm) {
63636 loadComplete = false;
63637 context.redrawEnable(false);
63639 var loading = uiLoading(context).blocking(true);
63640 context.container().call(loading);
63642 var childNodesLoaded = function(err, result) {
63644 var visibleGroups = utilArrayGroupBy(result.data, 'visible');
63645 var visibles = visibleGroups.true || []; // alive nodes
63646 var invisibles = visibleGroups.false || []; // deleted nodes
63648 if (visibles.length) {
63649 var visibleIDs = visibles.map(function(entity) { return entity.id; });
63650 var stack = _stack.map(function(state) { return state.graph; });
63651 missing = utilArrayDifference(missing, visibleIDs);
63652 _stack[0].graph.rebase(visibles, stack, true);
63653 _tree.rebase(visibles, true);
63656 // fetch older versions of nodes that were deleted..
63657 invisibles.forEach(function(entity) {
63658 osm.loadEntityVersion(entity.id, +entity.version - 1, childNodesLoaded);
63662 if (err || !missing.length) {
63664 context.redrawEnable(true);
63665 dispatch$1.call('change');
63666 dispatch$1.call('restore', this);
63670 osm.loadMultiple(missing, childNodesLoaded);
63675 _stack = h.stack.map(function(d) {
63676 var entities = {}, entity;
63679 d.modified.forEach(function(key) {
63680 entity = allEntities[key];
63681 entities[entity.id] = entity;
63686 d.deleted.forEach(function(id) {
63687 entities[id] = undefined;
63692 graph: coreGraph(_stack[0].graph).load(entities),
63693 annotation: d.annotation,
63694 imageryUsed: d.imageryUsed,
63695 photoOverlaysUsed: d.photoOverlaysUsed,
63696 transform: d.transform,
63697 selectedIDs: d.selectedIDs
63701 } else { // original version
63702 _stack = h.stack.map(function(d) {
63705 for (var i in d.entities) {
63706 var entity = d.entities[i];
63707 entities[i] = entity === 'undefined' ? undefined : osmEntity(entity);
63710 d.graph = coreGraph(_stack[0].graph).load(entities);
63715 var transform = _stack[_index].transform;
63717 context.map().transformEase(transform, 0); // 0 = immediate, no easing
63720 if (loadComplete) {
63721 dispatch$1.call('change');
63722 dispatch$1.call('restore', this);
63730 if (lock.locked()) context.storage(getKey('saved_history'), history.toJSON() || null);
63735 clearSaved: function() {
63736 context.debouncedSave.cancel();
63737 if (lock.locked()) context.storage(getKey('saved_history'), null);
63743 return lock.lock();
63747 unlock: function() {
63752 // is iD not open in another window and it detects that
63753 // there's a history stored in localStorage that's recoverable?
63754 restorableChanges: function() {
63755 return lock.locked() && !!context.storage(getKey('saved_history'));
63759 // load history from a version stored in localStorage
63760 restore: function() {
63761 if (!lock.locked()) return;
63763 var json = context.storage(getKey('saved_history'));
63764 if (json) history.fromJSON(json, true);
63775 return utilRebind(history, dispatch$1, 'on');
63779 * Look for roads that can be connected to other roads with a short extension
63781 function validationAlmostJunction() {
63782 var type = 'almost_junction';
63785 function isHighway(entity) {
63786 return entity.type === 'way' &&
63787 osmRoutableHighwayTagValues[entity.tags.highway];
63790 function isTaggedAsNotContinuing(node) {
63791 return node.tags.noexit === 'yes' ||
63792 node.tags.amenity === 'parking_entrance' ||
63793 (node.tags.entrance && node.tags.entrance !== 'no');
63797 var validation = function checkAlmostJunction(entity, context) {
63798 if (!isHighway(entity)) return [];
63799 if (entity.isDegenerate()) return [];
63801 var graph = context.graph();
63802 var tree = context.history().tree();
63805 var extendableNodeInfos = findConnectableEndNodesByExtension(entity);
63806 extendableNodeInfos.forEach(function(extendableNodeInfo) {
63807 var node = extendableNodeInfo.node;
63808 var edgeHighway = graph.entity(extendableNodeInfo.wid);
63810 var fixes = [new validationIssueFix({
63811 icon: 'iD-icon-abutment',
63812 title: t('issues.fix.connect_features.title'),
63813 onClick: function() {
63814 var endNodeId = this.issue.entityIds[1];
63815 var endNode = context.entity(endNodeId);
63816 var targetEdge = this.issue.data.edge;
63817 var crossLoc = this.issue.data.cross_loc;
63818 var edgeNodes = [context.entity(targetEdge[0]), context.entity(targetEdge[1])];
63819 var closestNodeInfo = geoSphericalClosestNode(edgeNodes, crossLoc);
63821 var annotation = t('issues.fix.connect_almost_junction.annotation');
63822 // already a point nearby, just connect to that
63823 if (closestNodeInfo.distance < 0.75) {
63825 actionMergeNodes([closestNodeInfo.node.id, endNode.id], closestNodeInfo.node.loc),
63828 // else add the end node to the edge way
63831 actionAddMidpoint({loc: crossLoc, edge: targetEdge}, endNode),
63838 if (Object.keys(node.tags).length === 0) {
63839 // node has no tags, suggest noexit fix
63840 fixes.push(new validationIssueFix({
63841 icon: 'maki-barrier',
63842 title: t('issues.fix.tag_as_disconnected.title'),
63843 onClick: function() {
63844 var nodeID = this.issue.entityIds[1];
63846 actionChangeTags(nodeID, { noexit: 'yes' }),
63847 t('issues.fix.tag_as_disconnected.annotation')
63853 issues.push(new validationIssue({
63855 severity: 'warning',
63856 message: function() {
63857 var entity1 = context.hasEntity(this.entityIds[0]);
63858 if (this.entityIds[0] === this.entityIds[2]) {
63859 return entity1 ? t('issues.almost_junction.self.message', {
63860 feature: utilDisplayLabel(entity1, context)
63863 var entity2 = context.hasEntity(this.entityIds[2]);
63864 return (entity1 && entity2) ? t('issues.almost_junction.message', {
63865 feature: utilDisplayLabel(entity1, context),
63866 feature2: utilDisplayLabel(entity2, context)
63870 reference: showReference,
63871 entityIds: [entity.id, node.id, edgeHighway.id],
63872 loc: extendableNodeInfo.node.loc,
63873 hash: JSON.stringify(extendableNodeInfo.node.loc),
63875 edge: extendableNodeInfo.edge,
63876 cross_loc: extendableNodeInfo.cross_loc
63885 function showReference(selection) {
63886 selection.selectAll('.issue-reference')
63890 .attr('class', 'issue-reference')
63891 .text(t('issues.almost_junction.highway-highway.reference'));
63895 function isExtendableCandidate(node, way) {
63896 // can not accurately test vertices on tiles not downloaded from osm - #5938
63897 var osm = context.connection();
63898 if (osm && !osm.isDataLoaded(node.loc)) {
63901 if (isTaggedAsNotContinuing(node) || graph.parentWays(node).length !== 1) {
63905 var occurences = 0;
63906 for (var index in way.nodes) {
63907 if (way.nodes[index] === node.id) {
63909 if (occurences > 1) {
63918 function findConnectableEndNodesByExtension(way) {
63920 if (way.isClosed()) return results;
63923 var indices = [0, way.nodes.length - 1];
63924 indices.forEach(function(nodeIndex) {
63925 var nodeID = way.nodes[nodeIndex];
63926 var node = graph.entity(nodeID);
63928 if (!isExtendableCandidate(node, way)) return;
63930 var connectionInfo = canConnectByExtend(way, nodeIndex);
63931 if (!connectionInfo) return;
63933 testNodes = graph.childNodes(way).slice(); // shallow copy
63934 testNodes[nodeIndex] = testNodes[nodeIndex].move(connectionInfo.cross_loc);
63936 // don't flag issue if connecting the ways would cause self-intersection
63937 if (geoHasSelfIntersections(testNodes, nodeID)) return;
63939 results.push(connectionInfo);
63945 function hasTag(tags, key) {
63946 return tags[key] !== undefined && tags[key] !== 'no';
63949 function canConnectWays(way, way2) {
63951 // allow self-connections
63952 if (way.id === way2.id) return true;
63954 // if one is bridge or tunnel, both must be bridge or tunnel
63955 if ((hasTag(way.tags, 'bridge') || hasTag(way2.tags, 'bridge')) &&
63956 !(hasTag(way.tags, 'bridge') && hasTag(way2.tags, 'bridge'))) return false;
63957 if ((hasTag(way.tags, 'tunnel') || hasTag(way2.tags, 'tunnel')) &&
63958 !(hasTag(way.tags, 'tunnel') && hasTag(way2.tags, 'tunnel'))) return false;
63960 // must have equivalent layers and levels
63961 var layer1 = way.tags.layer || '0',
63962 layer2 = way2.tags.layer || '0';
63963 if (layer1 !== layer2) return false;
63965 var level1 = way.tags.level || '0',
63966 level2 = way2.tags.level || '0';
63967 if (level1 !== level2) return false;
63973 function canConnectByExtend(way, endNodeIdx) {
63974 var EXTEND_TH_METERS = 5;
63975 var tipNid = way.nodes[endNodeIdx]; // the 'tip' node for extension point
63976 var midNid = endNodeIdx === 0 ? way.nodes[1] : way.nodes[way.nodes.length - 2]; // the other node of the edge
63977 var tipNode = graph.entity(tipNid);
63978 var midNode = graph.entity(midNid);
63979 var lon = tipNode.loc[0];
63980 var lat = tipNode.loc[1];
63981 var lon_range = geoMetersToLon(EXTEND_TH_METERS, lat) / 2;
63982 var lat_range = geoMetersToLat(EXTEND_TH_METERS) / 2;
63983 var queryExtent = geoExtent([
63984 [lon - lon_range, lat - lat_range],
63985 [lon + lon_range, lat + lat_range]
63988 // first, extend the edge of [midNode -> tipNode] by EXTEND_TH_METERS and find the "extended tip" location
63989 var edgeLen = geoSphericalDistance(midNode.loc, tipNode.loc);
63990 var t = EXTEND_TH_METERS / edgeLen + 1.0;
63991 var extTipLoc = geoVecInterp(midNode.loc, tipNode.loc, t);
63993 // then, check if the extension part [tipNode.loc -> extTipLoc] intersects any other ways
63994 var intersected = tree.intersects(queryExtent, graph);
63995 for (var i = 0; i < intersected.length; i++) {
63996 var way2 = intersected[i];
63998 if (!isHighway(way2)) continue;
64000 if (!canConnectWays(way, way2)) continue;
64002 for (var j = 0; j < way2.nodes.length - 1; j++) {
64003 var nAid = way2.nodes[j],
64004 nBid = way2.nodes[j + 1];
64006 if (nAid === tipNid || nBid === tipNid) continue;
64008 var nA = graph.entity(nAid),
64009 nB = graph.entity(nBid);
64010 var crossLoc = geoLineIntersection([tipNode.loc, extTipLoc], [nA.loc, nB.loc]);
64015 edge: [nA.id, nB.id],
64016 cross_loc: crossLoc
64025 validation.type = type;
64030 function validationCloseNodes() {
64031 var type = 'close_nodes';
64033 var pointThresholdMeters = 0.2;
64035 var defaultWayThresholdMeters = 0.2;
64036 // expect some features to be mapped with higher levels of detail
64037 var indoorThresholdMeters = 0.01;
64038 var buildingThresholdMeters = 0.05;
64039 var pathThresholdMeters = 0.1;
64041 function featureTypeForWay(way, graph) {
64043 if (way.tags.boundary && way.tags.boundary !== 'no') return 'boundary';
64044 if (way.tags.indoor && way.tags.indoor !== 'no') return 'indoor';
64045 if ((way.tags.building && way.tags.building !== 'no') ||
64046 (way.tags['building:part'] && way.tags['building:part'] !== 'no')) return 'building';
64047 if (osmPathHighwayTagValues[way.tags.highway]) return 'path';
64049 var parentRelations = graph.parentRelations(way);
64050 for (var i in parentRelations) {
64051 var relation = parentRelations[i];
64053 if (relation.tags.type === 'boundary') return 'boundary';
64055 if (relation.isMultipolygon()) {
64056 if (relation.tags.indoor && relation.tags.indoor !== 'no') return 'indoor';
64057 if ((relation.tags.building && relation.tags.building !== 'no') ||
64058 (relation.tags['building:part'] && relation.tags['building:part'] !== 'no')) return 'building';
64065 function shouldCheckWay(way, context) {
64067 // don't flag issues where merging would create degenerate ways
64068 if (way.nodes.length <= 2 ||
64069 (way.isClosed() && way.nodes.length <= 4)) return false;
64071 var featureType = featureTypeForWay(way, context.graph());
64072 if (featureType === 'boundary') return false;
64074 var bbox = way.extent(context.graph()).bbox();
64075 var hypotenuseMeters = geoSphericalDistance([bbox.minX, bbox.minY], [bbox.maxX, bbox.maxY]);
64076 // don't flag close nodes in very small ways
64077 if (hypotenuseMeters < 1.5) return false;
64082 function getIssuesForWay(way, context) {
64083 if (!shouldCheckWay(way, context)) return [];
64086 nodes = context.graph().childNodes(way);
64087 for (var i = 0; i < nodes.length - 1; i++) {
64088 var node1 = nodes[i];
64089 var node2 = nodes[i+1];
64091 var issue = getWayIssueIfAny(node1, node2, way, context);
64092 if (issue) issues.push(issue);
64097 function getIssuesForVertex(node, parentWays, context) {
64100 function checkForCloseness(node1, node2, way) {
64101 var issue = getWayIssueIfAny(node1, node2, way, context);
64102 if (issue) issues.push(issue);
64105 for (var i = 0; i < parentWays.length; i++) {
64106 var parentWay = parentWays[i];
64108 if (!shouldCheckWay(parentWay, context)) continue;
64110 var lastIndex = parentWay.nodes.length - 1;
64111 for (var j = 0; j < parentWay.nodes.length; j++) {
64113 if (parentWay.nodes[j-1] === node.id) {
64114 checkForCloseness(node, context.entity(parentWay.nodes[j]), parentWay);
64117 if (j !== lastIndex) {
64118 if (parentWay.nodes[j+1] === node.id) {
64119 checkForCloseness(context.entity(parentWay.nodes[j]), node, parentWay);
64127 function getIssuesForDetachedPoint(node, context) {
64131 var lon = node.loc[0];
64132 var lat = node.loc[1];
64133 var lon_range = geoMetersToLon(pointThresholdMeters, lat) / 2;
64134 var lat_range = geoMetersToLat(pointThresholdMeters) / 2;
64135 var queryExtent = geoExtent([
64136 [lon - lon_range, lat - lat_range],
64137 [lon + lon_range, lat + lat_range]
64140 var intersected = context.history().tree().intersects(queryExtent, context.graph());
64141 for (var j = 0; j < intersected.length; j++) {
64142 var nearby = intersected[j];
64144 if (nearby.id === node.id) continue;
64145 if (nearby.type !== 'node' || nearby.geometry(context.graph()) !== 'point') continue;
64147 if (nearby.loc === node.loc ||
64148 geoSphericalDistance(node.loc, nearby.loc) < pointThresholdMeters) {
64150 issues.push(new validationIssue({
64152 severity: 'warning',
64153 message: function() {
64154 var entity = context.hasEntity(this.entityIds[0]),
64155 entity2 = context.hasEntity(this.entityIds[1]);
64156 return (entity && entity2) ? t('issues.close_nodes.detached.message', {
64157 feature: utilDisplayLabel(entity, context),
64158 feature2: utilDisplayLabel(entity2, context)
64161 reference: showReference,
64162 entityIds: [node.id, nearby.id],
64164 new validationIssueFix({
64165 icon: 'iD-operation-disconnect',
64166 title: t('issues.fix.move_points_apart.title')
64175 function showReference(selection) {
64176 var referenceText = t('issues.close_nodes.detached.reference');
64177 selection.selectAll('.issue-reference')
64181 .attr('class', 'issue-reference')
64182 .text(referenceText);
64186 function getIssuesForNode(node, context) {
64187 var parentWays = context.graph().parentWays(node);
64188 if (parentWays.length) {
64189 return getIssuesForVertex(node, parentWays, context);
64191 return getIssuesForDetachedPoint(node, context);
64195 function getWayIssueIfAny(node1, node2, way, context) {
64196 if (node1.id === node2.id ||
64197 (node1.hasInterestingTags() && node2.hasInterestingTags())) {
64201 if (node1.loc !== node2.loc) {
64203 var featureType = featureTypeForWay(way, context.graph());
64204 var threshold = defaultWayThresholdMeters;
64205 if (featureType === 'indoor') threshold = indoorThresholdMeters;
64206 else if (featureType === 'building') threshold = buildingThresholdMeters;
64207 else if (featureType === 'path') threshold = pathThresholdMeters;
64209 var distance = geoSphericalDistance(node1.loc, node2.loc);
64210 if (distance > threshold) return null;
64213 return new validationIssue({
64215 severity: 'warning',
64216 message: function() {
64217 var entity = context.hasEntity(this.entityIds[0]);
64218 return entity ? t('issues.close_nodes.message', { way: utilDisplayLabel(entity, context) }) : '';
64220 reference: showReference,
64221 entityIds: [way.id, node1.id, node2.id],
64224 new validationIssueFix({
64225 icon: 'iD-icon-plus',
64226 title: t('issues.fix.merge_points.title'),
64227 onClick: function() {
64228 var entityIds = this.issue.entityIds;
64229 var action = actionMergeNodes([entityIds[1], entityIds[2]]);
64230 context.perform(action, t('issues.fix.merge_close_vertices.annotation'));
64233 new validationIssueFix({
64234 icon: 'iD-operation-disconnect',
64235 title: t('issues.fix.move_points_apart.title')
64240 function showReference(selection) {
64241 var referenceText = t('issues.close_nodes.reference');
64242 selection.selectAll('.issue-reference')
64246 .attr('class', 'issue-reference')
64247 .text(referenceText);
64252 var validation = function(entity, context) {
64253 if (entity.type === 'node') {
64254 return getIssuesForNode(entity, context);
64255 } else if (entity.type === 'way') {
64256 return getIssuesForWay(entity, context);
64262 validation.type = type;
64267 function validationCrossingWays() {
64268 var type = 'crossing_ways';
64271 Avoid duplicate work by cacheing issues. The same issues live under two paths.
64274 w-456: [{issue1}, {issue2}…]
64277 w-123: [{issue1}, {issue2}…]
64281 var _issueCache = {};
64283 // returns the way or its parent relation, whichever has a useful feature type
64284 function getFeatureWithFeatureTypeTagsForWay(way, graph) {
64285 if (getFeatureTypeForTags(way.tags) === null) {
64286 // if the way doesn't match a feature type, check its parent relations
64287 var parentRels = graph.parentRelations(way);
64288 for (var i = 0; i < parentRels.length; i++) {
64289 var rel = parentRels[i];
64290 if (getFeatureTypeForTags(rel.tags) !== null) {
64299 function hasTag(tags, key) {
64300 return tags[key] !== undefined && tags[key] !== 'no';
64303 function tagsImplyIndoors(tags) {
64304 return hasTag(tags, 'level') || tags.highway === 'corridor';
64307 function allowsStructures(featureType) {
64308 return allowsBridge(featureType) || allowsTunnel(featureType);
64310 function allowsBridge(featureType) {
64311 return featureType === 'highway' || featureType === 'railway' || featureType === 'waterway';
64313 function allowsTunnel(featureType) {
64314 return featureType === 'highway' || featureType === 'railway' || featureType === 'waterway';
64316 function canCover(featureType) {
64317 return featureType === 'building';
64321 function getFeatureTypeForCrossingCheck(way, graph) {
64322 var tags = getFeatureWithFeatureTypeTagsForWay(way, graph).tags;
64323 return getFeatureTypeForTags(tags);
64327 var ignoredBuildings = {
64328 demolished: true, dismantled: true, proposed: true, razed: true
64332 function getFeatureTypeForTags(tags) {
64333 if (hasTag(tags, 'building') && !ignoredBuildings[tags.building]) return 'building';
64335 // don't check non-building areas
64336 if (hasTag(tags, 'area')) return null;
64338 if (hasTag(tags, 'highway') && osmRoutableHighwayTagValues[tags.highway]) return 'highway';
64339 if (hasTag(tags, 'railway') && osmRailwayTrackTagValues[tags.railway]) return 'railway';
64340 if (hasTag(tags, 'waterway') && osmFlowingWaterwayTagValues[tags.waterway]) return 'waterway';
64346 function isLegitCrossing(way1, featureType1, way2, featureType2) {
64347 var tags1 = way1.tags;
64348 var tags2 = way2.tags;
64350 // assume 0 by default
64351 var level1 = tags1.level || '0';
64352 var level2 = tags2.level || '0';
64354 if (tagsImplyIndoors(tags1) && tagsImplyIndoors(tags2) && level1 !== level2) {
64355 // assume features don't interact if they're indoor on different levels
64359 // assume 0 by default; don't use way.layer() since we account for structures here
64360 var layer1 = tags1.layer || '0';
64361 var layer2 = tags2.layer || '0';
64363 if (allowsBridge(featureType1) && allowsBridge(featureType2)) {
64364 if (hasTag(tags1, 'bridge') && !hasTag(tags2, 'bridge')) return true;
64365 if (!hasTag(tags1, 'bridge') && hasTag(tags2, 'bridge')) return true;
64366 // crossing bridges must use different layers
64367 if (hasTag(tags1, 'bridge') && hasTag(tags2, 'bridge') && layer1 !== layer2) return true;
64368 } else if (allowsBridge(featureType1) && hasTag(tags1, 'bridge')) return true;
64369 else if (allowsBridge(featureType2) && hasTag(tags2, 'bridge')) return true;
64371 if (allowsTunnel(featureType1) && allowsTunnel(featureType2)) {
64372 if (hasTag(tags1, 'tunnel') && !hasTag(tags2, 'tunnel')) return true;
64373 if (!hasTag(tags1, 'tunnel') && hasTag(tags2, 'tunnel')) return true;
64374 // crossing tunnels must use different layers
64375 if (hasTag(tags1, 'tunnel') && hasTag(tags2, 'tunnel') && layer1 !== layer2) return true;
64376 } else if (allowsTunnel(featureType1) && hasTag(tags1, 'tunnel')) return true;
64377 else if (allowsTunnel(featureType2) && hasTag(tags2, 'tunnel')) return true;
64379 if (canCover(featureType1) && canCover(featureType2)) {
64380 if (hasTag(tags1, 'covered') && !hasTag(tags2, 'covered')) return true;
64381 if (!hasTag(tags1, 'covered') && hasTag(tags2, 'covered')) return true;
64382 // crossing covered features that can themselves cover must use different layers
64383 if (hasTag(tags1, 'covered') && hasTag(tags2, 'covered') && layer1 !== layer2) return true;
64384 } else if (canCover(featureType1) && hasTag(tags2, 'covered')) return true;
64385 else if (canCover(featureType2) && hasTag(tags1, 'covered')) return true;
64387 // don't flag crossing waterways and pier/highways
64388 if (featureType1 === 'waterway' && featureType2 === 'highway' && tags2.man_made === 'pier') return true;
64389 if (featureType2 === 'waterway' && featureType1 === 'highway' && tags1.man_made === 'pier') return true;
64391 if (!allowsStructures(featureType1) && !allowsStructures(featureType2)) {
64392 // if no structures are applicable, the layers must be different
64393 if (layer1 !== layer2) return true;
64399 // highway values for which we shouldn't recommend connecting to waterways
64400 var highwaysDisallowingFords = {
64401 motorway: true, motorway_link: true, trunk: true, trunk_link: true,
64402 primary: true, primary_link: true, secondary: true, secondary_link: true
64404 var nonCrossingHighways = { track: true };
64406 function tagsForConnectionNodeIfAllowed(entity1, entity2) {
64407 var featureType1 = getFeatureTypeForTags(entity1.tags);
64408 var featureType2 = getFeatureTypeForTags(entity2.tags);
64409 if (featureType1 === featureType2) {
64410 if (featureType1 === 'highway') {
64411 var entity1IsPath = osmPathHighwayTagValues[entity1.tags.highway];
64412 var entity2IsPath = osmPathHighwayTagValues[entity2.tags.highway];
64413 if ((entity1IsPath || entity2IsPath) && entity1IsPath !== entity2IsPath) {
64414 // one feature is a path but not both
64416 var roadFeature = entity1IsPath ? entity2 : entity1;
64417 if (nonCrossingHighways[roadFeature.tags.highway]) {
64418 // don't mark path connections with certain roads as crossings
64421 var pathFeature = entity1IsPath ? entity1 : entity2;
64422 if (['marked', 'unmarked'].indexOf(pathFeature.tags.crossing) !== -1) {
64423 // if the path is a crossing, match the crossing type
64424 return { highway: 'crossing', crossing: pathFeature.tags.crossing };
64426 // don't add a `crossing` subtag to ambiguous crossings
64427 return { highway: 'crossing' };
64431 if (featureType1 === 'waterway') return {};
64432 if (featureType1 === 'railway') return {};
64435 var featureTypes = [featureType1, featureType2];
64436 if (featureTypes.indexOf('highway') !== -1) {
64437 if (featureTypes.indexOf('railway') !== -1) {
64438 if (osmPathHighwayTagValues[entity1.tags.highway] ||
64439 osmPathHighwayTagValues[entity2.tags.highway]) {
64440 // path-rail connections use this tag
64441 return { railway: 'crossing' };
64443 // road-rail connections use this tag
64444 return { railway: 'level_crossing' };
64448 if (featureTypes.indexOf('waterway') !== -1) {
64449 // do not allow fords on structures
64450 if (hasTag(entity1.tags, 'tunnel') && hasTag(entity2.tags, 'tunnel')) return null;
64451 if (hasTag(entity1.tags, 'bridge') && hasTag(entity2.tags, 'bridge')) return null;
64453 if (highwaysDisallowingFords[entity1.tags.highway] ||
64454 highwaysDisallowingFords[entity2.tags.highway]) {
64455 // do not allow fords on major highways
64458 return { ford: 'yes' };
64466 function findCrossingsByWay(way1, graph, tree) {
64467 var edgeCrossInfos = [];
64468 if (way1.type !== 'way') return edgeCrossInfos;
64470 var way1FeatureType = getFeatureTypeForCrossingCheck(way1, graph);
64471 if (way1FeatureType === null) return edgeCrossInfos;
64473 var checkedSingleCrossingWays = {};
64475 // declare vars ahead of time to reduce garbage collection
64476 var i, j, nodeIndex;
64478 var n1, n2, nA, nB;
64479 var segment1, segment2;
64481 var intersected, way2, way2FeatureType, way2Nodes;
64482 var way1Nodes = graph.childNodes(way1);
64483 var comparedWays = {};
64484 for (i = 0; i < way1Nodes.length - 1; i++) {
64486 n2 = way1Nodes[i + 1];
64487 extent = geoExtent([
64489 Math.min(n1.loc[0], n2.loc[0]),
64490 Math.min(n1.loc[1], n2.loc[1])
64493 Math.max(n1.loc[0], n2.loc[0]),
64494 Math.max(n1.loc[1], n2.loc[1])
64498 intersected = tree.intersects(extent, graph);
64499 for (j = 0; j < intersected.length; j++) {
64500 way2 = intersected[j];
64502 if (way2.type !== 'way') continue;
64504 // don't check for self-intersection in this validation
64505 if (way2.id === way1.id) continue;
64507 // skip if this way was already checked and only one issue is needed
64508 if (checkedSingleCrossingWays[way2.id]) continue;
64510 // don't re-check previously checked features
64511 if (_issueCache[way1.id] && _issueCache[way1.id][way2.id]) continue;
64513 // mark this way as checked even if there are no crossings
64514 comparedWays[way2.id] = true;
64516 // only check crossing highway, waterway, building, and railway
64517 way2FeatureType = getFeatureTypeForCrossingCheck(way2, graph);
64518 if (way2FeatureType === null ||
64519 isLegitCrossing(way1, way1FeatureType, way2, way2FeatureType)) {
64523 // create only one issue for building crossings
64524 oneOnly = way1FeatureType === 'building' || way2FeatureType === 'building';
64525 segment1 = [n1.loc, n2.loc];
64527 way2Nodes = graph.childNodes(way2);
64528 for (nodeIndex = 0; nodeIndex < way2Nodes.length - 1; nodeIndex++) {
64529 nA = way2Nodes[nodeIndex];
64530 nB = way2Nodes[nodeIndex + 1];
64531 if (nA.id === n1.id || nA.id === n2.id ||
64532 nB.id === n1.id || nB.id === n2.id) {
64533 // n1 or n2 is a connection node; skip
64536 segment2 = [nA.loc, nB.loc];
64537 var point = geoLineIntersection(segment1, segment2);
64539 edgeCrossInfos.push({
64540 ways: [way1, way2],
64541 featureTypes: [way1FeatureType, way2FeatureType],
64542 edges: [[n1.id, n2.id], [nA.id, nB.id]],
64546 checkedSingleCrossingWays[way2.id] = true;
64553 for (var way2ID in comparedWays) {
64554 if (!_issueCache[way1.id]) _issueCache[way1.id] = {};
64555 if (!_issueCache[way1.id][way2ID]) _issueCache[way1.id][way2ID] = [];
64556 if (!_issueCache[way2ID]) _issueCache[way2ID] = {};
64557 if (!_issueCache[way2ID][way1.id]) _issueCache[way2ID][way1.id] = [];
64559 return edgeCrossInfos;
64563 function waysToCheck(entity, context) {
64564 if (!getFeatureTypeForTags(entity.tags)) {
64567 if (entity.type === 'way') {
64569 } else if (entity.type === 'relation' &&
64570 entity.isMultipolygon() &&
64571 // only check multipolygons if they are buildings
64572 hasTag(entity.tags, 'building')) {
64573 return entity.members.reduce(function(array, member) {
64574 if (member.type === 'way' &&
64575 //(member.role === 'outer' || member.role === 'inner') &&
64576 context.hasEntity(member.id)) {
64577 var entity = context.entity(member.id);
64578 array.push(entity);
64587 var validation = function checkCrossingWays(entity, context) {
64588 var graph = context.graph();
64589 var tree = context.history().tree();
64591 var ways = waysToCheck(entity, context);
64594 // declare these here to reduce garbage collection
64595 var wayIndex, crossingIndex, key, crossings, crossing, issue;
64596 for (wayIndex in ways) {
64597 var way = ways[wayIndex];
64598 crossings = findCrossingsByWay(way, graph, tree);
64599 for (crossingIndex in crossings) {
64600 crossing = crossings[crossingIndex];
64601 var way2 = crossing.ways[1];
64602 issue = createIssue(crossing, context);
64603 // cache the issues for each way
64604 _issueCache[way.id][way2.id].push(issue);
64605 _issueCache[way2.id][way.id].push(issue);
64607 for (key in _issueCache[way.id]) {
64608 issues = issues.concat(_issueCache[way.id][key]);
64615 function createIssue(crossing, context) {
64616 var graph = context.graph();
64618 // use the entities with the tags that define the feature type
64619 var entities = crossing.ways.sort(function(entity1, entity2) {
64620 var type1 = getFeatureTypeForCrossingCheck(entity1, graph);
64621 var type2 = getFeatureTypeForCrossingCheck(entity2, graph);
64622 if (type1 === type2) {
64623 return utilDisplayLabel(entity1, context) > utilDisplayLabel(entity2, context);
64624 } else if (type1 === 'waterway') {
64626 } else if (type2 === 'waterway') {
64629 return type1 < type2;
64631 entities = entities.map(function(way) {
64632 return getFeatureWithFeatureTypeTagsForWay(way, graph);
64635 var connectionTags = tagsForConnectionNodeIfAllowed(entities[0], entities[1]);
64637 var featureType1 = crossing.featureTypes[0];
64638 var featureType2 = crossing.featureTypes[1];
64640 var isCrossingIndoors = tagsImplyIndoors(entities[0].tags) && tagsImplyIndoors(entities[1].tags);
64641 var isCrossingTunnels = allowsTunnel(featureType1) && hasTag(entities[0].tags, 'tunnel') &&
64642 allowsTunnel(featureType2) && hasTag(entities[1].tags, 'tunnel');
64643 var isCrossingBridges = allowsBridge(featureType1) && hasTag(entities[0].tags, 'bridge') &&
64644 allowsBridge(featureType2) && hasTag(entities[1].tags, 'bridge');
64646 var crossingTypeID;
64648 if (isCrossingIndoors) {
64649 crossingTypeID = 'indoor-indoor';
64650 } else if (isCrossingTunnels) {
64651 crossingTypeID = 'tunnel-tunnel';
64652 } else if (isCrossingBridges) {
64653 crossingTypeID = 'bridge-bridge';
64655 crossingTypeID = crossing.featureTypes.sort().join('-');
64657 if (connectionTags && (isCrossingIndoors || isCrossingTunnels || isCrossingBridges)) {
64658 crossingTypeID += '_connectable';
64662 if (connectionTags) {
64663 fixes.push(makeConnectWaysFix(context));
64666 var useFixIcon = 'iD-icon-layers';
64668 if (isCrossingIndoors) {
64669 useFixID = 'use_different_levels';
64670 } else if (isCrossingTunnels || isCrossingBridges) {
64671 useFixID = 'use_different_layers';
64672 // don't recommend bridges for waterways even though they're okay
64673 } else if ((allowsBridge(featureType1) && featureType1 !== 'waterway') ||
64674 (allowsBridge(featureType2) && featureType2 !== 'waterway')) {
64675 useFixID = 'use_bridge_or_tunnel';
64676 useFixIcon = 'maki-bridge';
64677 } else if (allowsTunnel(featureType1) || allowsTunnel(featureType2)) {
64678 useFixID = 'use_tunnel';
64680 useFixID = 'use_different_layers';
64682 if (useFixID === 'use_different_layers') {
64683 fixes.push(makeChangeLayerFix('higher', context));
64684 fixes.push(makeChangeLayerFix('lower', context));
64686 fixes.push(new validationIssueFix({
64688 title: t('issues.fix.' + useFixID + '.title')
64691 fixes.push(new validationIssueFix({
64692 icon: 'iD-operation-move',
64693 title: t('issues.fix.reposition_features.title')
64696 return new validationIssue({
64698 severity: 'warning',
64699 message: function() {
64700 var entity1 = context.hasEntity(this.entityIds[0]),
64701 entity2 = context.hasEntity(this.entityIds[1]);
64702 return (entity1 && entity2) ? t('issues.crossing_ways.message', {
64703 feature: utilDisplayLabel(entity1, context),
64704 feature2: utilDisplayLabel(entity2, context)
64707 reference: showReference,
64708 entityIds: entities.map(function(entity) {
64712 edges: crossing.edges,
64713 connectionTags: connectionTags
64715 // differentiate based on the loc since two ways can cross multiple times
64716 hash: JSON.stringify(crossing.crossPoint) +
64717 // if the edges change then so does the fix
64718 JSON.stringify(crossing.edges) +
64719 // ensure the correct connection tags are added in the fix
64720 JSON.stringify(connectionTags),
64721 loc: crossing.crossPoint,
64725 function showReference(selection) {
64726 selection.selectAll('.issue-reference')
64730 .attr('class', 'issue-reference')
64731 .text(t('issues.crossing_ways.' + crossingTypeID + '.reference'));
64735 function makeConnectWaysFix(context) {
64736 return new validationIssueFix({
64737 icon: 'iD-icon-crossing',
64738 title: t('issues.fix.connect_features.title'),
64739 onClick: function() {
64740 var loc = this.issue.loc;
64741 var connectionTags = this.issue.data.connectionTags;
64742 var edges = this.issue.data.edges;
64745 function actionConnectCrossingWays(graph) {
64746 // create the new node for the points
64747 var node = osmNode({ loc: loc, tags: connectionTags });
64748 graph = graph.replace(node);
64750 var nodesToMerge = [node.id];
64751 var mergeThresholdInMeters = 0.75;
64753 edges.forEach(function(edge) {
64754 var edgeNodes = [graph.entity(edge[0]), graph.entity(edge[1])];
64755 var closestNodeInfo = geoSphericalClosestNode(edgeNodes, loc);
64756 // if there is already a point nearby, use that
64757 if (closestNodeInfo.distance < mergeThresholdInMeters) {
64758 nodesToMerge.push(closestNodeInfo.node.id);
64759 // else add the new node to the way
64761 graph = actionAddMidpoint({loc: loc, edge: edge}, node)(graph);
64765 if (nodesToMerge.length > 1) {
64766 // if we're using nearby nodes, merge them with the new node
64767 graph = actionMergeNodes(nodesToMerge, loc)(graph);
64772 t('issues.fix.connect_crossing_features.annotation')
64778 function makeChangeLayerFix(higherOrLower, context) {
64779 return new validationIssueFix({
64780 icon: 'iD-icon-' + (higherOrLower === 'higher' ? 'up' : 'down'),
64781 title: t('issues.fix.tag_this_as_' + higherOrLower + '.title'),
64782 onClick: function() {
64784 var mode = context.mode();
64785 if (!mode || mode.id !== 'select') return;
64787 var selectedIDs = mode.selectedIDs();
64788 if (selectedIDs.length !== 1) return;
64790 var selectedID = selectedIDs[0];
64791 if (!this.issue.entityIds.some(function(entityId) {
64792 return entityId === selectedID;
64795 var entity = context.hasEntity(selectedID);
64796 if (!entity) return;
64798 var tags = Object.assign({}, entity.tags); // shallow copy
64799 var layer = tags.layer && Number(tags.layer);
64800 if (layer && !isNaN(layer)) {
64801 if (higherOrLower === 'higher') {
64807 if (higherOrLower === 'higher') {
64813 tags.layer = layer;
64815 actionChangeTags(entity.id, tags),
64816 t('operations.change_tags.annotation')
64822 validation.reset = function() {
64826 validation.type = type;
64831 function validationDisconnectedWay() {
64832 var type = 'disconnected_way';
64834 function isTaggedAsHighway(entity) {
64835 return osmRoutableHighwayTagValues[entity.tags.highway];
64838 var validation = function checkDisconnectedWay(entity, context) {
64839 var graph = context.graph();
64841 var routingIslandWays = routingIslandForEntity(entity);
64842 if (!routingIslandWays) return [];
64846 var isSingle = routingIslandWays.size === 1;
64850 if (entity.type === 'way' && !entity.isClosed()) {
64851 var firstID = entity.first();
64852 var lastID = entity.last();
64854 var first = context.entity(firstID);
64855 if (first.tags.noexit !== 'yes') {
64856 fixes.push(new validationIssueFix({
64857 icon: 'iD-operation-continue-left',
64858 title: t('issues.fix.continue_from_start.title'),
64859 entityIds: [firstID],
64860 onClick: function() {
64861 var wayId = this.issue.entityIds[0];
64862 var way = context.entity(wayId);
64863 var vertexId = this.entityIds[0];
64864 var vertex = context.entity(vertexId);
64865 continueDrawing(way, vertex, context);
64869 var last = context.entity(lastID);
64870 if (last.tags.noexit !== 'yes') {
64871 fixes.push(new validationIssueFix({
64872 icon: 'iD-operation-continue',
64873 title: t('issues.fix.continue_from_end.title'),
64874 entityIds: [lastID],
64875 onClick: function() {
64876 var wayId = this.issue.entityIds[0];
64877 var way = context.entity(wayId);
64878 var vertexId = this.entityIds[0];
64879 var vertex = context.entity(vertexId);
64880 continueDrawing(way, vertex, context);
64886 fixes.push(new validationIssueFix({
64887 title: t('issues.fix.connect_feature.title')
64891 if (!operationDelete([entity.id], context).disabled()) {
64892 fixes.push(new validationIssueFix({
64893 icon: 'iD-operation-delete',
64894 title: t('issues.fix.delete_feature.title'),
64895 entityIds: [entity.id],
64896 onClick: function() {
64897 var id = this.issue.entityIds[0];
64898 var operation = operationDelete([id], context);
64899 if (!operation.disabled()) {
64906 fixes.push(new validationIssueFix({
64907 title: t('issues.fix.connect_features.title')
64911 return [new validationIssue({
64913 severity: 'warning',
64914 message: function() {
64915 if (this.entityIds.length === 1) {
64916 var entity = context.hasEntity(this.entityIds[0]);
64917 return entity ? t('issues.disconnected_way.highway.message', { highway: utilDisplayLabel(entity, context) }) : '';
64919 return t('issues.disconnected_way.routable.message.multiple', { count: this.entityIds.length.toString() });
64921 reference: showReference,
64922 entityIds: Array.from(routingIslandWays).map(function(way) { return way.id; }),
64927 function showReference(selection) {
64928 selection.selectAll('.issue-reference')
64932 .attr('class', 'issue-reference')
64933 .text(t('issues.disconnected_way.routable.reference'));
64936 function routingIslandForEntity(entity) {
64938 if (entity.type !== 'way') return null;
64940 if (!isRoutableWay(entity, true)) return null;
64942 var waysToCheck = [entity];
64943 var routingIsland = new Set([entity]);
64945 while (waysToCheck.length) {
64946 var wayToCheck = waysToCheck.pop();
64947 var childNodes = graph.childNodes(wayToCheck);
64948 for (var i in childNodes) {
64949 var vertex = childNodes[i];
64950 var result = isConnectedVertex(vertex, routingIsland);
64951 if (result === true) {
64953 } else if (result === false) {
64956 result.forEach(function(connectedWay) {
64957 if (!routingIsland.has(connectedWay)) {
64958 routingIsland.add(connectedWay);
64959 waysToCheck.push(connectedWay);
64965 return routingIsland;
64968 function isConnectedVertex(vertex, routingIslandWays) {
64969 // assume ways overlapping unloaded tiles are connected to the wider road network - #5938
64970 var osm = context.connection();
64971 if (osm && !osm.isDataLoaded(vertex.loc)) return true;
64973 // entrances are considered connected
64974 if (vertex.tags.entrance &&
64975 vertex.tags.entrance !== 'no') return true;
64976 if (vertex.tags.amenity === 'parking_entrance') return true;
64978 var parentsWays = graph.parentWays(vertex);
64980 // standalone vertex
64981 if (parentsWays.length === 1) return false;
64983 var connectedWays = new Set();
64985 for (var i in parentsWays) {
64986 var parentWay = parentsWays[i];
64988 // ignore any way we've already accounted for
64989 if (routingIslandWays.has(parentWay)) continue;
64991 if (isRoutableWay(parentWay, false)) connectedWays.add(parentWay);
64994 if (connectedWays.size) return connectedWays;
64999 function isRoutableWay(way, ignoreInnerWays) {
65000 if (isTaggedAsHighway(way) || way.tags.route === 'ferry') return true;
65002 return graph.parentRelations(way).some(function(parentRelation) {
65003 if (parentRelation.tags.type === 'route' &&
65004 parentRelation.tags.route === 'ferry') return true;
65006 if (parentRelation.isMultipolygon() &&
65007 isTaggedAsHighway(parentRelation) &&
65008 (!ignoreInnerWays || parentRelation.memberById(way.id).role !== 'inner')) return true;
65012 function continueDrawing(way, vertex) {
65013 // make sure the vertex is actually visible and editable
65014 var map = context.map();
65015 if (!map.editable() || !map.trimmedExtent().contains(vertex.loc)) {
65016 map.zoomToEase(vertex);
65020 modeDrawLine(context, way.id, context.graph(), context.graph(), 'line', way.affix(vertex.id), true)
65026 validation.type = type;
65031 function validationFixmeTag() {
65032 var type = 'fixme_tag';
65035 var validation = function checkFixmeTag(entity, context) {
65037 if (!entity.tags.fixme) return [];
65039 // don't flag fixmes on features added by the user
65040 if (entity.version === undefined) return [];
65042 if (entity.v !== undefined) {
65043 var baseEntity = context.history().base().hasEntity(entity.id);
65044 // don't flag fixmes added by the user on existing features
65045 if (!baseEntity || !baseEntity.tags.fixme) return [];
65048 return [new validationIssue({
65050 severity: 'warning',
65051 message: function() {
65052 var entity = context.hasEntity(this.entityIds[0]);
65053 return entity ? t('issues.fixme_tag.message', { feature: utilDisplayLabel(entity, context) }) : '';
65055 reference: showReference,
65056 entityIds: [entity.id]
65059 function showReference(selection) {
65060 selection.selectAll('.issue-reference')
65064 .attr('class', 'issue-reference')
65065 .text(t('issues.fixme_tag.reference'));
65069 validation.type = type;
65074 var brands = {"amenity/bank|ABANCA":{countryCodes:["es"],tags:{amenity:"bank",brand:"ABANCA","brand:wikidata":"Q9598744","brand:wikipedia":"es:Abanca",name:"ABANCA",official_name:"ABANCA Corporación Bancaria"}},"amenity/bank|ABN AMRO":{countryCodes:["nl"],tags:{amenity:"bank",brand:"ABN AMRO","brand:wikidata":"Q287471","brand:wikipedia":"en:ABN AMRO",name:"ABN AMRO",official_name:"ABN AMRO Bank N.V.",operator:"ABN AMRO Group","operator:wikidata":"Q17061287","operator:wikipedia":"en:ABN AMRO Group"}},"amenity/bank|ABSA":{countryCodes:["za"],tags:{amenity:"bank",brand:"ABSA","brand:wikidata":"Q331688","brand:wikipedia":"en:ABSA Group Limited",name:"ABSA"}},"amenity/bank|AIB":{countryCodes:["gb","ie"],tags:{amenity:"bank",brand:"AIB","brand:wikidata":"Q1642179","brand:wikipedia":"en:Allied Irish Banks",name:"AIB",official_name:"Allied Irish Banks"}},"amenity/bank|ANZ":{countryCodes:["au","nz"],matchNames:["anz bank"],tags:{amenity:"bank",brand:"ANZ","brand:wikidata":"Q714641","brand:wikipedia":"en:Australia and New Zealand Banking Group",name:"ANZ",official_name:"Australia and New Zealand Banking Group Limited"}},"amenity/bank|ASB Bank":{countryCodes:["nz"],tags:{amenity:"bank",brand:"ASB Bank","brand:wikidata":"Q297214","brand:wikipedia":"en:ASB Bank",name:"ASB Bank",operator:"Commonwealth Bank of Australia","operator:wikidata":"Q285328","operator:wikipedia":"en:Commonwealth Bank"}},"amenity/bank|ATB Financial":{countryCodes:["ca"],tags:{amenity:"bank",brand:"ATB Financial","brand:wikidata":"Q298762","brand:wikipedia":"en:ATB Financial",name:"ATB Financial",official_name:"Alberta Treasury Branches"}},"amenity/bank|AXA":{tags:{amenity:"bank",brand:"AXA","brand:wikidata":"Q160054","brand:wikipedia":"en:AXA",name:"AXA"}},"amenity/bank|Access Bank":{tags:{amenity:"bank",brand:"Access Bank","brand:wikidata":"Q4672418","brand:wikipedia":"en:Access Bank plc",name:"Access Bank",operator:"Access Bank Group","operator:wikidata":"Q4672420","operator:wikipedia":"en:Access Bank Group"}},"amenity/bank|Addiko Bank":{countryCodes:["ba","hr","me","rs","si"],tags:{amenity:"bank",brand:"Addiko Bank","brand:wikidata":"Q27926559","brand:wikipedia":"en:Addiko Bank",name:"Addiko Bank"}},"amenity/bank|Agrani Bank Limited অগ্রণী ব্যাংক লিমিটেড":{countryCodes:["bd"],tags:{amenity:"bank",brand:"Agrani Bank Limited অগ্রণী ব্যাংক লিমিটেড","brand:wikidata":"Q517050","brand:wikipedia":"en:Agrani Bank",name:"Agrani Bank Limited অগ্রণী ব্যাংক লিমিটেড","name:en":"Agrani Bank Limited"}},"amenity/bank|Agribank~(USA)":{countryCodes:["us"],tags:{amenity:"bank",brand:"Agribank","brand:wikidata":"Q4693829","brand:wikipedia":"en:AgriBank",name:"Agribank"}},"amenity/bank|Agribank~(Vietnam)":{countryCodes:["vn"],tags:{amenity:"bank",brand:"Agribank","brand:wikidata":"Q1924723","brand:wikipedia":"vn:Ngân hàng Nông nghiệp và Phát triển Nông thôn Việt Nam",name:"Agribank",official_name:"Ngân hàng Nông nghiệp và Phát triển Nông thôn Việt Nam","official_name:en":"Vietnam Bank for Agriculture and Rural Development"}},"amenity/bank|Agribank~(Zimbabwe)":{countryCodes:["zw"],tags:{amenity:"bank",brand:"Agribank","brand:wikidata":"Q4693887","brand:wikipedia":"en:Agricultural Development Bank of Zimbabwe",name:"Agribank"}},"amenity/bank|Akbank":{countryCodes:["tr"],tags:{amenity:"bank",brand:"Akbank","brand:wikidata":"Q416624","brand:wikipedia":"en:Akbank",name:"Akbank"}},"amenity/bank|Alior Bank":{countryCodes:["pl"],tags:{amenity:"bank",brand:"Alior Bank","brand:wikidata":"Q9148395","brand:wikipedia":"pl:Alior Bank",name:"Alior Bank"}},"amenity/bank|Allahabad Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"Allahabad Bank","brand:wikidata":"Q2018840","brand:wikipedia":"en:Allahabad Bank",name:"Allahabad Bank"}},"amenity/bank|Allied Bank~(Pakistan)":{countryCodes:["pk"],tags:{amenity:"bank",brand:"Allied Bank","brand:wikidata":"Q4732553","brand:wikipedia":"en:Allied Bank Limited",name:"Allied Bank"}},"amenity/bank|Allied Bank~(defunct bank in Philipiness)":{countryCodes:["ph"],tags:{amenity:"bank",brand:"Allied Bank","brand:wikidata":"Q4732555","brand:wikipedia":"en:Allied Banking Corporation",name:"Allied Bank"}},"amenity/bank|Alpha Bank":{tags:{amenity:"bank",brand:"Alpha Bank","brand:wikidata":"Q747394","brand:wikipedia":"en:Alpha Bank",name:"Alpha Bank",operator:"Hellenic Financial Stability Fund","operator:wikidata":"Q19903317","operator:wikipedia":"en:Hellenic Financial Stability Fund"}},"amenity/bank|Andhra Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"Andhra Bank","brand:wikidata":"Q2003476","brand:wikipedia":"en:Andhra Bank",name:"Andhra Bank"}},"amenity/bank|Antonveneta":{countryCodes:["it"],tags:{amenity:"bank",brand:"Antonveneta","brand:wikidata":"Q3633689","brand:wikipedia":"en:Banca Antonveneta",name:"Antonveneta"}},"amenity/bank|Apple Bank":{countryCodes:["us"],nomatch:["shop/electronics|Apple Store"],tags:{amenity:"bank",brand:"Apple Bank","brand:wikidata":"Q4781125","brand:wikipedia":"en:Apple Bank for Savings",name:"Apple Bank"}},"amenity/bank|Argenta":{countryCodes:["be","lu","nl"],tags:{amenity:"bank",brand:"Argenta","brand:wikidata":"Q932856","brand:wikipedia":"en:Argenta (bank)",name:"Argenta",operator:"Argenta Group","operator:wikidata":"Q19604341"}},"amenity/bank|Arvest Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Arvest Bank","brand:wikidata":"Q4802393","brand:wikipedia":"en:Arvest Bank",name:"Arvest Bank"}},"amenity/bank|Asia United Bank":{countryCodes:["ph"],tags:{amenity:"bank",brand:"Asia United Bank","brand:wikidata":"Q4806482","brand:wikipedia":"en:Asia United Bank",name:"Asia United Bank"}},"amenity/bank|Askari Bank":{countryCodes:["pk"],tags:{amenity:"bank",brand:"Askari Bank","brand:wikidata":"Q4807137","brand:wikipedia":"en:Askari Bank",name:"Askari Bank"}},"amenity/bank|Associated Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Associated Bank","brand:wikidata":"Q4809155","brand:wikipedia":"en:Associated Banc-Corp",name:"Associated Bank",operator:"Associated Banc-Corp"}},"amenity/bank|Attijariwafa Bank":{tags:{amenity:"bank",brand:"Attijariwafa Bank","brand:wikidata":"Q758052","brand:wikipedia":"en:Attijariwafa Bank",name:"Attijariwafa Bank",operator:"Société Nationale d'Investissement","operator:en":"National Investment Company","operator:wikidata":"Q3488506","operator:wikipedia":"en:Société Nationale d'Investissement"}},"amenity/bank|Axis Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"Axis Bank","brand:wikidata":"Q2003549","brand:wikipedia":"en:Axis Bank",name:"Axis Bank"}},"amenity/bank|BAC":{tags:{amenity:"bank",brand:"BAC","brand:wikidata":"Q5715556","brand:wikipedia":"en:Banco de América Central",name:"BAC",official_name:"Banco de America Central",operator:"Grupo Aval","operator:en":"Aval Group","operator:wikidata":"Q2053387","operator:wikipedia":"en:Grupo Aval"}},"amenity/bank|BAWAG PSK":{countryCodes:["at"],tags:{amenity:"bank",brand:"BAWAG PSK","brand:wikidata":"Q379938","brand:wikipedia":"en:BAWAG P.S.K.",name:"BAWAG PSK"}},"amenity/bank|BB&T":{countryCodes:["us"],tags:{amenity:"bank",brand:"BB&T","brand:wikidata":"Q795486","brand:wikipedia":"en:BB&T",name:"BB&T",official_name:"Branch Banking and Trust Company"}},"amenity/bank|BBBank":{countryCodes:["de"],tags:{amenity:"bank",brand:"BBBank","brand:wikidata":"Q795504","brand:wikipedia":"en:BBBank",name:"BBBank",operator:"Baden-Württembergischer Genossenschaftsverband","operator:en":"Baden-Württemberg Cooperative Association","operator:wikidata":"Q798896","operator:wikipedia":"de:Baden-Württembergischer Genossenschaftsverband"}},"amenity/bank|BBVA":{tags:{amenity:"bank",brand:"BBVA","brand:wikidata":"Q806189","brand:wikipedia":"en:Banco Bilbao Vizcaya Argentaria",name:"BBVA",official_name:"Banco Bilbao Vizcaya Argentaria"}},"amenity/bank|BBVA Bancomer":{countryCodes:["mx"],tags:{amenity:"bank",brand:"BBVA Bancomer","brand:wikidata":"Q2876794","brand:wikipedia":"en:BBVA Bancomer",name:"BBVA Bancomer",operator:"BBVA","operator:wikidata":"Q806189","operator:wikipedia":"de:Banco Bilbao Vizcaya Argentaria"}},"amenity/bank|BBVA Compass":{countryCodes:["us"],tags:{amenity:"bank",brand:"BBVA Compass","brand:wikidata":"Q4835088","brand:wikipedia":"en:BBVA Compass",name:"BBVA Compass",official_name:"BBVA Compass Bancshares",operator:"BBVA","operator:wikidata":"Q806189","operator:wikipedia":"de:Banco Bilbao Vizcaya Argentaria"}},"amenity/bank|BBVA Continental":{countryCodes:["pe"],tags:{amenity:"bank",brand:"BBVA Continental","brand:wikidata":"Q4835089","brand:wikipedia":"en:BBVA Continental",name:"BBVA Continental",operator:"BBVA","operator:wikidata":"Q806189","operator:wikipedia":"de:Banco Bilbao Vizcaya Argentaria"}},"amenity/bank|BBVA Francés":{countryCodes:["ar"],tags:{amenity:"bank",brand:"BBVA Francés","brand:en":"BBVA France","brand:fr":"BBVA France","brand:wikidata":"Q2876788","brand:wikipedia":"en:BBVA Francés",name:"BBVA Francés","name:en":"BBVA France","name:fr":"BBVA Francés",operator:"BBVA","operator:wikidata":"Q806189","operator:wikipedia":"de:Banco Bilbao Vizcaya Argentaria"}},"amenity/bank|BCA":{matchNames:["bank bca"],tags:{amenity:"bank",brand:"BCA","brand:wikidata":"Q806626","brand:wikipedia":"id:Bank Central Asia",name:"BCA",official_name:"Bank Central Asia"}},"amenity/bank|BCI":{matchNames:["banco bci"],tags:{amenity:"bank",brand:"BCI","brand:wikidata":"Q2882083","brand:wikipedia":"es:Banco de Crédito e Inversiones",name:"BCI",official_name:"Banco de Crédito e Inversiones","official_name:en":"Bank of Credit and Investments","official_name:es":"Banco de Crédito e Inversiones"}},"amenity/bank|BCP~(Bolivia)":{countryCodes:["bo"],nomatch:["amenity/bank|BCP~(France)","amenity/bank|BCP~(Luxembourg)","amenity/bank|BCP~(Peru)"],tags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q16826675","brand:wikipedia":"es:Banco de Crédito de Bolivia",name:"BCP",official_name:"Banco de Crédito de Bolivia","official_name:en":"Credit Bank of Bolivia","official_name:es":"Banco de Crédito de Bolivia",operator:"Banco de Crédito del Perú","operator:en":"Credit Bank of Peru","operator:es":"Banco de Crédito del Perú","operator:wikidata":"Q4854124","operator:wikipedia":"es:Banco de Crédito del Perú"}},"amenity/bank|BCP~(France)":{countryCodes:["fr"],matchNames:["banque bcp","bcp"],nomatch:["amenity/bank|BCP~(Bolivia)","amenity/bank|BCP~(Luxembourg)","amenity/bank|BCP~(Peru)"],tags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q118581","brand:wikipedia":"pt:Banco Comercial Português",name:"BCP"}},"amenity/bank|BCP~(Luxembourg)":{countryCodes:["lu"],matchNames:["banque bcp","bcp"],nomatch:["amenity/bank|BCP~(Bolivia)","amenity/bank|BCP~(France)","amenity/bank|BCP~(Peru)"],tags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q118581","brand:wikipedia":"pt:Banco Comercial Português",name:"BCP"}},"amenity/bank|BCP~(Peru)":{countryCodes:["pe"],matchNames:["banco de crédito del perú"],nomatch:["amenity/bank|BCP~(Bolivia)","amenity/bank|BCP~(France)","amenity/bank|BCP~(Luxembourg)"],tags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q4854124","brand:wikipedia":"es:Banco de Crédito del Perú",name:"BCP"}},"amenity/bank|BCR~(Banca Comercială Română)":{countryCodes:["ro"],matchNames:["banca comercială română"],tags:{amenity:"bank",brand:"BCR","brand:wikidata":"Q806149","brand:wikipedia":"en:Banca Comercială Română",name:"BCR",official_name:"Banca Comercială Română","official_name:en":"Romanian Commercial Bank","official_name:ro":"Banca Comercială Română"}},"amenity/bank|BCR~(Costa Rica)":{countryCodes:["cr"],matchNames:["banco de costa rica"],tags:{amenity:"bank",brand:"BCR","brand:wikidata":"Q6951632","brand:wikipedia":"es:Banco de Costa Rica",name:"BCR",official_name:"Banco de Costa Rica","official_name:en":"Bank of Costa Rica","official_name:es":"Banco de Costa Rica"}},"amenity/bank|BDO":{countryCodes:["ph"],tags:{amenity:"bank",brand:"BDO","brand:wikidata":"Q4854129","brand:wikipedia":"en:Banco de Oro",name:"BDO",official_name:"Banco de Oro","official_name:en":"Gold Bank","official_name:es":"Banco de Oro"}},"amenity/bank|BGŻ BNP Paribas":{countryCodes:["pl"],tags:{amenity:"bank",brand:"BGŻ BNP Paribas","brand:wikidata":"Q20744004","brand:wikipedia":"pl:BNP Paribas Bank Polska",name:"BGŻ BNP Paribas",operator:"BNP Paribas","operator:wikidata":"Q499707","operator:wikipedia":"pl:BNP Paribas"}},"amenity/bank|BIAT":{countryCodes:["tn"],tags:{amenity:"bank",brand:"BIAT","brand:wikidata":"Q690739","brand:wikipedia":"en:Banque Internationale Arabe de Tunisie",name:"BIAT"}},"amenity/bank|BMCE Bank":{matchNames:["bmce"],tags:{amenity:"bank",brand:"BMCE Bank","brand:wikidata":"Q2300433","brand:wikipedia":"ar:البنك المغربي للتجارة الخارجية",name:"BMCE Bank"}},"amenity/bank|BMCI":{countryCodes:["ma"],matchNames:["bmci bank"],tags:{amenity:"bank",brand:"BMCI","brand:wikidata":"Q2883409","brand:wikipedia":"ar:البنك المغربي للتجارة والصناعة",name:"BMCI",operator:"BNP Paribas","operator:wikidata":"Q499707","operator:wikipedia":"pl:BNP Paribas"}},"amenity/bank|BMN":{countryCodes:["es"],tags:{amenity:"bank",brand:"BMN","brand:wikidata":"Q3754900","brand:wikipedia":"es:Banco Mare Nostrum",name:"BMN",official_name:"Banco Mare Nostrum"}},"amenity/bank|BMO":{countryCodes:["ca","us"],matchNames:["bmo bank of montreal"],tags:{amenity:"bank",brand:"BMO","brand:wikidata":"Q806693","brand:wikipedia":"en:Bank of Montreal",name:"BMO",official_name:"Bank of Montreal"}},"amenity/bank|BMO Harris Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"BMO Harris Bank","brand:wikidata":"Q4835981","brand:wikipedia":"en:BMO Harris Bank",name:"BMO Harris Bank",operator:"Bank of Montreal","operator:wikidata":"Q806693","operator:wikipedia":"en:Bank of Montreal"}},"amenity/bank|BNA~(Algeria)":{countryCodes:["dz"],tags:{amenity:"bank",brand:"BNA","brand:wikidata":"Q2883410","brand:wikipedia":"fr:Banque nationale d'Algérie",name:"BNA",official_name:"Banque nationale d'Algérie","official_name:en":"National Bank of Algeria","official_name:fr":"Banque nationale d'Algérie"}},"amenity/bank|BNA~(Tunisia)":{countryCodes:["tn"],tags:{amenity:"bank",brand:"BNA","brand:wikidata":"Q2883413","brand:wikipedia":"fr:Banque nationale agricole",name:"BNA"}},"amenity/bank|BNI":{matchNames:["bank bni"],tags:{amenity:"bank",brand:"BNI","brand:wikidata":"Q2882611","brand:wikipedia":"id:Bank Negara Indonesia",name:"BNI",official_name:"Bank Negara Indonesia","official_name:en":"State Bank of Indonesia","official_name:id":"Bank Negara Indonesia"}},"amenity/bank|BNL":{countryCodes:["it"],tags:{amenity:"bank",brand:"BNL","brand:wikidata":"Q2201225","brand:wikipedia":"en:Banca Nazionale del Lavoro",name:"BNL",official_name:"Banca Nazionale del Lavoro","official_name:en":"National Labor Bank","official_name:it":"Banca Nazionale del Lavoro",operator:"BNP Paribas","operator:wikidata":"Q499707","operator:wikipedia":"en:BNP Paribas"}},"amenity/bank|BNP Paribas":{tags:{amenity:"bank",brand:"BNP Paribas","brand:wikidata":"Q499707","brand:wikipedia":"en:BNP Paribas",name:"BNP Paribas"}},"amenity/bank|BNP Paribas Fortis":{tags:{amenity:"bank",brand:"BNP Paribas Fortis","brand:wikidata":"Q796827","brand:wikipedia":"en:BNP Paribas Fortis",name:"BNP Paribas Fortis"}},"amenity/bank|BOC":{tags:{amenity:"bank",brand:"BOC","brand:wikidata":"Q790068","brand:wikipedia":"en:Bank of China",name:"BOC",official_name:"Bank of China"}},"amenity/bank|BPI":{matchNames:["bank of the philippine islands","bpi family savings bank"],tags:{amenity:"bank",brand:"BPI","brand:wikidata":"Q2501256","brand:wikipedia":"en:Bank of the Philippine Islands",name:"BPI",official_name:"Bank of the Philippine Islands"}},"amenity/bank|BRD":{countryCodes:["ro"],tags:{amenity:"bank",brand:"BRD","brand:wikidata":"Q796927","brand:wikipedia":"ro:BRD - Groupe Société Générale",name:"BRD"}},"amenity/bank|BRED":{countryCodes:["fr"],tags:{amenity:"bank",brand:"BRED","brand:wikidata":"Q2877455","brand:wikipedia":"fr:BRED Banque populaire",name:"BRED",official_name:"Banque régionale d'escompte et de dépôts","official_name:en":"Regional Discount and Deposit Bank","official_name:fr":"Banque régionale d'escompte et de dépôts",operator:"Groupe BPCE","operator:en":"BPCE Group","operator:fr":"Groupe BPCE","operator:wikidata":"Q806941","operator:wikipedia":"en:Groupe BPCE"}},"amenity/bank|BRI":{countryCodes:["id"],matchNames:["bank bri"],tags:{amenity:"bank",brand:"BRI","brand:wikidata":"Q623042","brand:wikipedia":"id:Bank Rakyat Indonesia",name:"BRI",official_name:"Bank Rakyat Indonesia","official_name:en":"People's Bank of Indonesia","official_name:id":"Bank Rakyat Indonesia"}},"amenity/bank|BTN":{countryCodes:["id"],tags:{amenity:"bank",brand:"BTN","brand:en":"BTN","brand:id":"BTN","brand:wikidata":"Q12474534","brand:wikipedia":"id:Bank Tabungan Negara",name:"BTN","name:en":"BTN","name:id":"BTN",official_name:"Bank Tabungan Negara","official_name:en":"State Savings Bank","official_name:id":"Bank Tabungan Negara"}},"amenity/bank|BW-Bank":{countryCodes:["de"],matchNames:["baden-württembergische bank"],tags:{amenity:"bank",brand:"BW-Bank","brand:ed":"BW-Bank","brand:en":"BW-Bank","brand:wikidata":"Q798891","brand:wikipedia":"de:Baden-Württembergische Bank",name:"BW-Bank","name:de":"BW-Bank","name:en":"BW-Bank",operator:"Landesbank Baden-Württemberg","operator:de":"Landesbank Baden-Württemberg","operator:en":"Baden-Württemberg Regional Bank","operator:wikidata":"Q451814","operator:wikipedia":"en:Landesbank Baden-Württemberg"}},"amenity/bank|Banamex":{countryCodes:["mx"],tags:{amenity:"bank",brand:"Banamex","brand:wikidata":"Q749474","brand:wikipedia":"en:Grupo Financiero Banamex",name:"Banamex",official_name:"Grupo Financiero Banamex","official_name:en":"Banamex Financial Group","official_name:es":"Grupo Financiero Banamex",operator:"Citigroup","operator:wikidata":"Q219508","operator:wikipedia":"en:Citigroup"}},"amenity/bank|Banca Intesa":{countryCodes:["it","rs"],tags:{amenity:"bank",brand:"Banca Intesa","brand:wikidata":"Q647092","brand:wikipedia":"en:Banca Intesa",name:"Banca Intesa","name:en":"Intesa Bank","name:it":"Banca Intesa",operator:"Intesa Sanpaolo","operator:en":"Intesa St. Paul","operator:it":"Intesa Sanpaolo","operator:wikidata":"Q1343118","operator:wikipedia":"en:Intesa Sanpaolo"}},"amenity/bank|Banca March":{countryCodes:["es"],tags:{amenity:"bank",brand:"Banca March","brand:wikidata":"Q578252","brand:wikipedia":"en:Banca March",name:"Banca March"}},"amenity/bank|Banca Popolare di Milano":{countryCodes:["it"],matchNames:["bpm"],tags:{amenity:"bank",brand:"Banca Popolare di Milano","brand:en":"Popular Bank of Milan","brand:it":"Banca Popolare di Milano","brand:wikidata":"Q806154","brand:wikipedia":"en:Banca Popolare di Milano",name:"Banca Popolare di Milano","name:en":"Popular Bank of Milan","name:it":"Banca Popolare di Milano",operator:"Banco BPM","operator:en":"BPM Bank","operator:it":"Banco BPM","operator:wikidata":"Q27331643","operator:wikipedia":"en:Banco BPM"}},"amenity/bank|Banca Popolare di Novara":{countryCodes:["it"],tags:{amenity:"bank",brand:"Banca Popolare di Novara","brand:en":"Popular Bank of Novara","brand:it":"Banca Popolare di Novara","brand:wikidata":"Q3633742","brand:wikipedia":"en:Banca Popolare di Novara",name:"Banca Popolare di Novara","name:en":"Popular Bank of Novara","name:it":"Banca Popolare di Novara",operator:"Banco BPM","operator:en":"BPM Bank","operator:it":"Banco BPM","operator:wikidata":"Q27331643","operator:wikipedia":"en:Banco BPM"}},"amenity/bank|Banca Popolare di Sondrio":{countryCodes:["it"],tags:{amenity:"bank",brand:"Banca Popolare di Sondrio","brand:en":"Popular Bank of Sandrio","brand:it":"Banca Popolare di Sondrio","brand:wikidata":"Q686176","brand:wikipedia":"en:Banca Popolare di Sondrio",name:"Banca Popolare di Sondrio","name:en":"Popular Bank of Sandrio","name:it":"Banca Popolare di Sondrio"}},"amenity/bank|Banca Popolare di Verona":{countryCodes:["it"],tags:{amenity:"bank",brand:"Banca Popolare di Verona","brand:en":"Popular Bank of Verona","brand:it":"Banca Popolare di Verona","brand:wikidata":"Q3167468","brand:wikipedia":"en:Banca Popolare di Verona",name:"Banca Popolare di Verona","name:en":"Popular Bank of Verona","name:it":"Banca Popolare di Verona",operator:"Banco Popolare","operator:en":"Popular Bank","operator:it":"Banco Popolare","operator:wikidata":"Q806194","operator:wikipedia":"en:Banco Popolare"}},"amenity/bank|Banca Popolare di Vicenza":{countryCodes:["it"],tags:{amenity:"bank",brand:"Banca Popolare di Vicenza","brand:en":"Popular Bank of Vicenza","brand:it":"Banca Popolare di Vicenza","brand:wikidata":"Q3127200","brand:wikipedia":"en:Banca Popolare di Vicenza",name:"Banca Popolare di Vicenza","name:en":"Popular Bank of Vicena","name:it":"Banca Popolare di Vicenza",operator:"Atlante","operator:en":"Atlas","operator:it":"Atlante","operator:wikidata":"Q25206459","operator:wikipedia":"en:Atlante (private equity fund)"}},"amenity/bank|Banca Românească":{countryCodes:["ro"],tags:{amenity:"bank",brand:"Banca Românească","brand:en":"Romanian Bank","brand:ro":"Banca Românească","brand:wikidata":"Q4854052","brand:wikipedia":"ro:Banca Românească",name:"Banca Românească","name:en":"Popular Bank of Vicena","name:ro":"Banca Românească",operator:"National Bank of Greece","operator:wikidata":"Q1816028","operator:wikipedia":"en:National Bank of Greece"}},"amenity/bank|Banca Sella":{countryCodes:["it"],tags:{amenity:"bank",brand:"Banca Sella","brand:en":"Sella Bank","brand:it":"Banca Sella","brand:wikidata":"Q3633749","brand:wikipedia":"en:Banca Sella Group",name:"Banca Sella","name:en":"Sella Bank","name:it":"Banca Sella"}},"amenity/bank|Banca Transilvania":{countryCodes:["ro"],tags:{amenity:"bank",brand:"Banca Transilvania","brand:en":"Transilvania Bank","brand:ro":"Banca Transilvania","brand:wikidata":"Q806161","brand:wikipedia":"en:Banca Transilvania",name:"Banca Transilvania","name:en":"Transilvania Bank","name:ro":"Banca Transilvania"}},"amenity/bank|Bancaribe":{countryCodes:["ve"],tags:{amenity:"bank",brand:"Bancaribe","brand:wikidata":"Q5717827","brand:wikipedia":"en:Bancaribe",name:"Bancaribe"}},"amenity/bank|Banco AV Villas":{countryCodes:["co"],tags:{amenity:"bank",brand:"Banco AV Villas","brand:en":"Bank of Villas","brand:es":"Banco AV Villas","brand:wikidata":"Q4854068","brand:wikipedia":"en:Banco AV Villas",name:"Banco AV Villas","name:en":"Bank of Villas","name:es":"Banco AV Villas",operator:"Grupo Aval","operator:en":"Aval Group","operator:pt":"Grupo Aval","operator:wikidata":"Q2053387","operator:wikipedia":"en:Grupo Aval"}},"amenity/bank|Banco Agrario":{countryCodes:["co"],tags:{amenity:"bank",brand:"Banco Agrario","brand:en":"Agrarian Bank","brand:wikidata":"Q20013358","brand:wikipedia":"es:Banco Agrario de Colombia",name:"Banco Agrario","name:en":"Agrarian Bank","name:es":"Banco Agrario",official_name:"Banco Agrario de Colombia","official_name:en":"Agrarian Bank of Colombia","official_name:es":"Banco Agrario de Colombia"}},"amenity/bank|Banco Agrario de Colombia":{countryCodes:["co"],tags:{amenity:"bank",brand:"Banco Agrario de Colombia","brand:wikidata":"Q20013358","brand:wikipedia":"en:Banco Agrario de Colombia",name:"Banco Agrario de Colombia"}},"amenity/bank|Banco Azteca":{tags:{amenity:"bank",brand:"Banco Azteca","brand:en":"Aztec Bank","brand:es":"Banco Azteca","brand:wikidata":"Q4854076","brand:wikipedia":"en:Banco Azteca",name:"Banco Azteca","name:en":"Aztec Bank","name:es":"Banco Azteca",operator:"Grupo Elektra","operator:en":"Elektra Group","operator:es":"Grupo Elektra","operator:wikidata":"Q1142753","operator:wikipedia":"en:Grupo Elektra"}},"amenity/bank|Banco BPM":{countryCodes:["it"],tags:{amenity:"bank",brand:"Banco BPM","brand:wikidata":"Q27331643","brand:wikipedia":"en:Banco BPM",name:"Banco BPM"}},"amenity/bank|Banco Caja Social":{countryCodes:["co"],tags:{amenity:"bank",brand:"Banco Caja Social","brand:en":"Social Housing Bank","brand:es":"Banco Caja Social","brand:wikidata":"Q5717869","brand:wikipedia":"es:Banco Caja Social",name:"Banco Caja Social","name:en":"Social Housing Bank","name:es":"Banco Caja Social"}},"amenity/bank|Banco Ciudad":{countryCodes:["ar"],tags:{amenity:"bank",brand:"Banco Ciudad","brand:en":"City Bank","brand:es":"Banco Ciudad","brand:wikidata":"Q4856204","brand:wikipedia":"en:Bank of the City of Buenos Aires",name:"Banco Ciudad","name:en":"City Bank","name:es":"Banco Ciudad",official_name:"Banco Ciudad de Buenos Aires","official_name:en":"Bank of the City of Buenos Aires","official_name:es":"Banco Ciudad de Buenos Aires"}},"amenity/bank|Banco Continental~(Paraguay)":{countryCodes:["py"],tags:{amenity:"bank",brand:"Banco Continental","brand:wikidata":"Q62054564",name:"Banco Continental"}},"amenity/bank|Banco Continental~(Peru)":{countryCodes:["pe"],tags:{amenity:"bank",brand:"Banco Continental","brand:en":"Continental Bank","brand:es":"Banco Continental","brand:wikidata":"Q4835089","brand:wikipedia":"en:BBVA Continental",name:"Banco Continental","name:en":"Continental Bank","name:es":"Banco Continental"}},"amenity/bank|Banco Estado":{countryCodes:["cl"],tags:{amenity:"bank",brand:"Banco Estado","brand:en":"State Bank","brand:es":"Banco Estado","brand:wikidata":"Q5718188","brand:wikipedia":"es:Banco del Estado de Chile",name:"Banco Estado","name:en":"State Bank","name:es":"Banco Estado",official_name:"Banco del Estado de Chile","official_name:en":"Bank of the State of Chile","official_name:es":"Banco del Estado de Chile"}},"amenity/bank|Banco Falabella":{countryCodes:["cl","co","pe"],nomatch:["shop/department_store|Falabella"],tags:{amenity:"bank",brand:"Banco Falabella","brand:en":"Falabella Bank","brand:es":"Banco Falabella","brand:wikidata":"Q4854088","brand:wikipedia":"en:Banco Falabella",name:"Banco Falabella","name:en":"Falabella Bank","name:es":"Banco Falabella",operator:"Falabella","operator:es":"Falabella","operator:wikidata":"Q1374824","operator:wikipedia":"en:S.A.C.I. Falabella"}},"amenity/bank|Banco Fassil":{countryCodes:["bo"],tags:{amenity:"bank",brand:"Banco Fassil","brand:en":"Fassil Bank","brand:es":"Banco Fassil","brand:wikidata":"Q62118592",name:"Banco Fassil","name:en":"Fassil Bank","name:es":"Banco Fassil"}},"amenity/bank|Banco G&T Continental":{tags:{amenity:"bank",brand:"Banco G&T Continental","brand:en":"G&T Continental Bank","brand:es":"Banco G&T Continental","brand:wikidata":"Q5717949","brand:wikipedia":"es:Banco GYT Continental, S.A.",name:"Banco G&T Continental","name:en":"G&T Continental Bank"}},"amenity/bank|Banco General":{countryCodes:["cr","pa"],tags:{amenity:"bank",brand:"BW-Bank","brand:en":"BW-Bank","brand:es":"BW-Bank","brand:wikidata":"Q27618271","brand:wikipedia":"es:Banco General (Panamá)",name:"Banco General","name:en":"General Bank","name:es":"Banco General"}},"amenity/bank|Banco Industrial":{tags:{amenity:"bank",brand:"Banco Industrial","brand:en":"Industrial Bank","brand:es":"Banco Industrial","brand:wikidata":"Q16489444","brand:wikipedia":"es:Banco Industrial",name:"Banco Industrial","name:en":"Industrial Bank","name:es":"Banco Industrial",operator:"BIND Group"}},"amenity/bank|Banco Internacional~(Chile)":{countryCodes:["cl"],tags:{amenity:"bank",brand:"Banco Internacional","brand:en":"International Bank","brand:es":"Banco Internacional","brand:wikidata":"Q56605586","brand:wikipedia":"es:Banco Internacional (Chile)",name:"Banco Internacional","name:en":"International Bank","name:es":"Banco Internacional"}},"amenity/bank|Banco Internacional~(Ecuador)":{countryCodes:["ec"],tags:{amenity:"bank",brand:"Banco Internacional","brand:en":"International Bank","brand:es":"Banco Internacional","brand:wikidata":"Q806187","brand:wikipedia":"es:Banco Internacional",name:"Banco Internacional","name:en":"International Bank","name:es":"Banco Internacional"}},"amenity/bank|Banco Metropolitano":{countryCodes:["cu"],tags:{amenity:"bank",brand:"Banco Metropolitano","brand:en":"Metroplitan Bank","brand:es":"Banco Metropolitano","brand:wikidata":"Q62118612",name:"Banco Metropolitano","name:en":"Metropolitan Bank","name:es":"Banco Metropolitano"}},"amenity/bank|Banco Nacional":{countryCodes:["br"],tags:{amenity:"bank",brand:"Banco Nacional","brand:en":"National Bank","brand:es":"Banco Nacional","brand:wikidata":"Q4854104","brand:wikipedia":"en:Banco Nacional",name:"Banco Nacional","name:en":"National Bank","name:es":"Banco Nacional"}},"amenity/bank|Banco Nación":{countryCodes:["ar"],tags:{amenity:"bank",brand:"Banco Nación","brand:en":"Nation Bank","brand:es":"Nation Bank","brand:wikidata":"Q2883376","brand:wikipedia":"en:Banco de la Nación Argentina",name:"Banco Nación","name:en":"Nation Bank","name:es":"Banco Nación",official_name:"Banco de la Nación Argentina","official_name:en":"Bank of the Argentine Nation","official_name:es":"Banco de la Nación Argentina"}},"amenity/bank|Banco Pastor":{countryCodes:["es"],tags:{amenity:"bank",brand:"Banco Pastor","brand:en":"Shepherd Bank","brand:es":"Banco Pastor","brand:wikidata":"Q806193","brand:wikipedia":"en:Banco Pastor",name:"Banco Pastor","name:en":"Shepherd Bank","name:es":"Banco Pastor",official_name:"Banco Popular Pastor","official_name:en":"Popular Shepherd Bank","official_name:es":"Banco Popular Pastor",operator:"Popular, Inc.","operator:wikidata":"Q7229656","operator:wikipedia":"en:Popular, Inc."}},"amenity/bank|Banco Pichincha":{tags:{amenity:"bank",brand:"Banco Pichincha","brand:en":"Pichincha Bank","brand:es":"Banco Pichincha","brand:wikidata":"Q4854135","brand:wikipedia":"en:Banco Pichincha",name:"Banco Pichincha","name:en":"Pichincha Bank","name:es":"Banco Pichincha",operator:"Grupo Pichincha","operator:wikidata":"Q6440687","operator:wikipedia":"es:Grupo Pichincha"}},"amenity/bank|Banco Popular":{countryCodes:["pr","us","vi"],matchNames:["popular"],tags:{amenity:"bank",brand:"Banco Popular","brand:en":"Popular Bank","brand:es":"Banco Popular","brand:wikidata":"Q537259","brand:wikipedia":"es:Banco Popular Español",name:"Banco Popular","name:en":"Popular Bank","name:es":"Banco Popular",official_name:"Banco Popular Español","official_name:en":"Spanish Popular Bank","official_name:es":"Banco Popular Español",operator:"Banco Santander","operator:wikidata":"Q806215","operator:wikipedia":"en:Banco Santander"}},"amenity/bank|Banco Popular de Ahorro":{countryCodes:["cu"],matchNames:["bpa"],tags:{amenity:"bank",brand:"Banco Popular de Ahorro","brand:en":"Popular Saving Bank","brand:es":"Banco Popular de Ahorro","brand:wikidata":"Q62118626",name:"Banco Popular de Ahorro","name:en":"Popular Saving Bank","name:es":"Banco Popular de Ahorro"}},"amenity/bank|Banco Provincia":{countryCodes:["ar"],tags:{amenity:"bank",brand:"Banco Provincia","brand:en":"Province Bank","brand:es":"Banco Provincia","brand:wikidata":"Q4856209","brand:wikipedia":"es:Banco de la Provincia de Buenos Aires",name:"Banco Provincia","name:en":"Province Bank","name:es":"Banco Provincia",official_name:"Banco de la Provincia de Buenos Aires","official_name:en":"Bank of the Province of Buenos Aires","official_name:es":"Banco de la Provincia de Buenos Aires"}},"amenity/bank|Banco Sabadell":{countryCodes:["es"],matchNames:["banc sabadell","sabadell"],tags:{amenity:"bank",brand:"Banco Sabadell","brand:en":"Sabadell Bank","brand:es":"Banco Sabadell","brand:wikidata":"Q762330","brand:wikipedia":"es:Banco Sabadell",name:"Banco Sabadell","name:en":"Sabadell Bank","name:es":"Banco Sabadell"}},"amenity/bank|Banco Santa Fe":{countryCodes:["ar"],tags:{amenity:"bank",brand:"Banco Santa Fe","brand:en":"Santa Fe Bank","brand:es":"Banco Santa Fe","brand:wikidata":"Q6046871","brand:wikipedia":"es:Nuevo Banco de Santa Fe",name:"Banco Santa Fe","name:en":"Santa Fe Bank","name:es":"Banco Santa Fe",official_name:"Nuevo Banco de Santa Fe","official_name:en":"New Bank of Santa Fe","official_name:es":"Nuevo Banco de Santa Fe"}},"amenity/bank|Banco Santander":{nomatch:["amenity/bank|Santander"],tags:{amenity:"bank",brand:"Banco Santander","brand:en":"Santander Bank","brand:es":"Banco Santander","brand:wikidata":"Q6496310","brand:wikipedia":"es:Banco Santander",name:"Banco Santander","name:en":"Santander Bank","name:es":"Banco Santander"}},"amenity/bank|Banco Sol~(Angola)":{countryCodes:["ao"],tags:{amenity:"bank",brand:"Banco Sol","brand:pt":"Banco Sol","brand:wikidata":"Q62118744",name:"Banco Sol","name:pt":"Banco Sol"}},"amenity/bank|Banco Sol~(Bolivia)":{countryCodes:["bo"],tags:{amenity:"bank",brand:"Banco Sol","brand:pt":"Banco Sol","brand:wikidata":"Q62118746",name:"Banco Sol","name:pt":"Banco Sol"}},"amenity/bank|Banco Unión":{countryCodes:["bo"],nomatch:["amenity/bank|UnionBank","amenity/money_transfer|Express Union"],tags:{amenity:"bank",brand:"Banco Unión",name:"Banco Unión"}},"amenity/bank|Banco de Bogotá":{tags:{amenity:"bank",brand:"Banco de Bogotá","brand:wikidata":"Q4854122","brand:wikipedia":"es:Banco de Bogotá",name:"Banco de Bogotá"}},"amenity/bank|Banco de Chile":{countryCodes:["cl"],tags:{amenity:"bank",brand:"Banco de Chile","brand:wikidata":"Q2882085","brand:wikipedia":"es:Banco de Chile",name:"Banco de Chile"}},"amenity/bank|Banco de Desarrollo Banrural":{tags:{amenity:"bank",brand:"Banco de Desarrollo Banrural","brand:wikidata":"Q5719130","brand:wikipedia":"es:Banrural",name:"Banco de Desarrollo Banrural"}},"amenity/bank|Banco de Fomento Angola (BFA)":{tags:{amenity:"bank",brand:"Banco de Fomento Angola (BFA)","brand:wikidata":"Q806197","brand:wikipedia":"de:Banco de Fomento Angola",name:"Banco de Fomento Angola (BFA)"}},"amenity/bank|Banco de Occidente":{tags:{amenity:"bank",brand:"Banco de Occidente","brand:wikidata":"Q4854127","brand:wikipedia":"es:Banco de Occidente (Colombia)",name:"Banco de Occidente"}},"amenity/bank|Banco de Venezuela":{matchNames:["de venezuela"],tags:{amenity:"bank",brand:"Banco de Venezuela","brand:wikidata":"Q517093","brand:wikipedia":"es:Banco de Venezuela",name:"Banco de Venezuela"}},"amenity/bank|Banco de la Nación~(Argentina)":{countryCodes:["ar"],tags:{amenity:"bank",brand:"Banco de la Nación","brand:wikidata":"Q2883376","brand:wikipedia":"en:Banco de la Nación Argentina",name:"Banco de la Nación"}},"amenity/bank|Banco de la Nación~(Peru)":{countryCodes:["pe"],tags:{amenity:"bank",brand:"Banco de la Nación","brand:wikidata":"Q4856206","brand:wikipedia":"en:Bank of the Nation (Peru)",name:"Banco de la Nación"}},"amenity/bank|Banco del Austro":{countryCodes:["ec"],tags:{amenity:"bank",brand:"Banco del Austro","brand:wikidata":"Q62122344",name:"Banco del Austro"}},"amenity/bank|Banco di Napoli":{countryCodes:["it"],tags:{amenity:"bank",brand:"Banco di Napoli","brand:wikidata":"Q3633835","brand:wikipedia":"en:Banco di Napoli",name:"Banco di Napoli"}},"amenity/bank|Banco di Sardegna":{countryCodes:["it"],tags:{amenity:"bank",brand:"Banco di Sardegna","brand:wikidata":"Q806205","brand:wikipedia":"en:Banco di Sardegna",name:"Banco di Sardegna"}},"amenity/bank|Banco do Brasil":{tags:{amenity:"bank",brand:"Banco do Brasil","brand:wikidata":"Q610817","brand:wikipedia":"en:Banco do Brasil",name:"Banco do Brasil"}},"amenity/bank|Banco do Nordeste":{countryCodes:["br"],tags:{amenity:"bank",brand:"Banco do Nordeste","brand:wikidata":"Q4854137","brand:wikipedia":"en:Banco do Nordeste",name:"Banco do Nordeste"}},"amenity/bank|Bancolombia":{countryCodes:["co"],tags:{amenity:"bank",brand:"Bancolombia","brand:wikidata":"Q806206","brand:wikipedia":"en:Bancolombia",name:"Bancolombia"}},"amenity/bank|Bancomer":{countryCodes:["mx"],tags:{amenity:"bank",brand:"Bancomer","brand:wikidata":"Q2876794","brand:wikipedia":"en:BBVA Bancomer",name:"Bancomer"}},"amenity/bank|Bancpost":{countryCodes:["ro"],nomatch:["amenity/bank|Postbank"],tags:{amenity:"bank",brand:"Bancpost","brand:wikidata":"Q4854143","brand:wikipedia":"ro:Bancpost",name:"Bancpost"}},"amenity/bank|Banesco":{tags:{amenity:"bank",brand:"Banesco","brand:wikidata":"Q4854841","brand:wikipedia":"en:Banesco",name:"Banesco"}},"amenity/bank|Bangkok Bank":{tags:{amenity:"bank",brand:"Bangkok Bank","brand:wikidata":"Q806483","brand:wikipedia":"en:Bangkok Bank",name:"Bangkok Bank"}},"amenity/bank|Bank Al Habib":{countryCodes:["pk"],tags:{amenity:"bank",brand:"Bank Al Habib","brand:wikidata":"Q4034833","brand:wikipedia":"ur:بينک الحبيب لمیٹڈ",name:"Bank Al Habib"}},"amenity/bank|Bank Alfalah":{tags:{amenity:"bank",brand:"Bank Alfalah","brand:wikidata":"Q4855895","brand:wikipedia":"en:Bank Alfalah",name:"Bank Alfalah"}},"amenity/bank|Bank Austria":{tags:{amenity:"bank",brand:"Bank Austria","brand:wikidata":"Q697619","brand:wikipedia":"en:Bank Austria",name:"Bank Austria"}},"amenity/bank|Bank Danamon":{countryCodes:["id"],tags:{amenity:"bank",brand:"Bank Danamon","brand:wikidata":"Q4855913","brand:wikipedia":"en:Bank Danamon",name:"Bank Danamon"}},"amenity/bank|Bank Mandiri":{countryCodes:["id"],tags:{amenity:"bank",brand:"Bank Mandiri","brand:wikidata":"Q806639","brand:wikipedia":"en:Bank Mandiri",name:"Bank Mandiri"}},"amenity/bank|Bank Mandiri Syariah":{countryCodes:["id"],tags:{amenity:"bank",brand:"Bank Mandiri Syariah","brand:wikidata":"Q12474533","brand:wikipedia":"id:Bank Syariah Mandiri",name:"Bank Mandiri Syariah"}},"amenity/bank|Bank Mega":{countryCodes:["id"],tags:{amenity:"bank",brand:"Bank Mega","brand:wikidata":"Q12474504","brand:wikipedia":"id:Bank Mega",name:"Bank Mega"}},"amenity/bank|Bank Muamalat":{tags:{amenity:"bank",brand:"Bank Muamalat","brand:wikidata":"Q4855949","brand:wikipedia":"en:Bank Muamalat",name:"Bank Muamalat"}},"amenity/bank|Bank Pekao":{countryCodes:["pl"],tags:{amenity:"bank",brand:"Bank Pekao","brand:wikidata":"Q806642","brand:wikipedia":"pl:Bank Polska Kasa Opieki",name:"Bank Pekao"}},"amenity/bank|Bank Rakyat":{countryCodes:["my"],tags:{amenity:"bank",brand:"Bank Rakyat","brand:wikidata":"Q4855964","brand:wikipedia":"ms:Bank Rakyat",name:"Bank Rakyat"}},"amenity/bank|Bank of Africa":{tags:{amenity:"bank",brand:"Bank of Africa","brand:wikidata":"Q2882627","brand:wikipedia":"en:Bank of Africa Group",name:"Bank of Africa",short_name:"BOA"}},"amenity/bank|Bank of America":{tags:{amenity:"bank",brand:"Bank of America","brand:wikidata":"Q487907","brand:wikipedia":"en:Bank of America",name:"Bank of America"}},"amenity/bank|Bank of Baroda":{tags:{amenity:"bank",brand:"Bank of Baroda","brand:wikidata":"Q2003797","brand:wikipedia":"en:Bank of Baroda",name:"Bank of Baroda"}},"amenity/bank|Bank of Ceylon":{tags:{amenity:"bank",brand:"Bank of Ceylon","brand:wikidata":"Q2882652","brand:wikipedia":"en:Bank of Ceylon",name:"Bank of Ceylon"}},"amenity/bank|Bank of China":{tags:{amenity:"bank",brand:"Bank of China","brand:wikidata":"Q790068","brand:wikipedia":"en:Bank of China",name:"Bank of China"}},"amenity/bank|Bank of Commerce":{tags:{amenity:"bank",brand:"Bank of Commerce","brand:wikidata":"Q4856092","brand:wikipedia":"en:Bank of Commerce",name:"Bank of Commerce"}},"amenity/bank|Bank of Cyprus":{tags:{amenity:"bank",brand:"Bank of Cyprus","brand:wikidata":"Q806678","brand:wikipedia":"en:Bank of Cyprus",name:"Bank of Cyprus"}},"amenity/bank|Bank of India":{tags:{amenity:"bank",brand:"Bank of India","brand:wikidata":"Q2004439","brand:wikipedia":"en:Bank of India",name:"Bank of India"}},"amenity/bank|Bank of Ireland":{tags:{amenity:"bank",brand:"Bank of Ireland","brand:wikidata":"Q806689","brand:wikipedia":"en:Bank of Ireland",name:"Bank of Ireland"}},"amenity/bank|Bank of Maharashtra":{countryCodes:["in"],tags:{amenity:"bank",brand:"Bank of Maharashtra","brand:wikidata":"Q2004304","brand:wikipedia":"en:Bank of Maharashtra",name:"Bank of Maharashtra"}},"amenity/bank|Bank of Montreal":{tags:{amenity:"bank",brand:"Bank of Montreal","brand:wikidata":"Q806693","brand:wikipedia":"en:Bank of Montreal",name:"Bank of Montreal"}},"amenity/bank|Bank of New Zealand":{countryCodes:["nz"],tags:{amenity:"bank",brand:"Bank of New Zealand","brand:wikidata":"Q806687","brand:wikipedia":"en:Bank of New Zealand",name:"Bank of New Zealand"}},"amenity/bank|Bank of Scotland":{countryCodes:["gb"],tags:{amenity:"bank",brand:"Bank of Scotland","brand:wikidata":"Q627381","brand:wikipedia":"en:Bank of Scotland",name:"Bank of Scotland"}},"amenity/bank|Bank of the West":{countryCodes:["us"],tags:{amenity:"bank",brand:"Bank of the West","brand:wikidata":"Q2881919","brand:wikipedia":"en:Bank of the West",name:"Bank of the West"}},"amenity/bank|Bankia":{countryCodes:["es"],tags:{amenity:"bank",brand:"Bankia","brand:wikidata":"Q806807","brand:wikipedia":"en:Bankia",name:"Bankia"}},"amenity/bank|Bankinter":{nomatch:["amenity/bank|Interbank"],tags:{amenity:"bank",brand:"Bankinter","brand:wikidata":"Q806808","brand:wikipedia":"es:Bankinter",name:"Bankinter"}},"amenity/bank|Banner Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Banner Bank","brand:wikidata":"Q4856910","brand:wikipedia":"en:Banner Bank",name:"Banner Bank"}},"amenity/bank|Banorte":{countryCodes:["mx"],tags:{amenity:"bank",brand:"Banorte","brand:wikidata":"Q806914","brand:wikipedia":"en:Banorte",name:"Banorte"}},"amenity/bank|Banque Atlantique":{tags:{amenity:"bank",brand:"Banque Atlantique","brand:wikidata":"Q2882890","brand:wikipedia":"en:Atlantic Bank Group",name:"Banque Atlantique"}},"amenity/bank|Banque Laurentienne":{countryCodes:["ca"],tags:{amenity:"bank",brand:"Banque Laurentienne","brand:wikidata":"Q1360087","brand:wikipedia":"en:Laurentian Bank of Canada",name:"Banque Laurentienne"}},"amenity/bank|Banque Nationale~(Canada)":{countryCodes:["ca"],matchNames:["banque nationale du canada","national bank of canada"],tags:{amenity:"bank",brand:"Banque Nationale","brand:wikidata":"Q634298","brand:wikipedia":"en:National Bank of Canada",name:"Banque Nationale"}},"amenity/bank|Banque Populaire":{tags:{amenity:"bank",brand:"Banque Populaire","brand:wikidata":"Q2883441","brand:wikipedia":"en:Banque Populaire du Maroc",name:"Banque Populaire"}},"amenity/bank|Banrisul":{countryCodes:["br"],tags:{amenity:"bank",brand:"Banrisul","brand:wikidata":"Q4857098","brand:wikipedia":"en:Banrisul",name:"Banrisul"}},"amenity/bank|Banrural":{countryCodes:["gt","hn"],tags:{amenity:"bank",brand:"Banrural","brand:wikidata":"Q5719130","brand:wikipedia":"es:Banrural",name:"Banrural"}},"amenity/bank|Barclays":{matchNames:["barclays bank"],tags:{amenity:"bank",brand:"Barclays","brand:wikidata":"Q245343","brand:wikipedia":"en:Barclays",name:"Barclays"}},"amenity/bank|Bcc":{tags:{amenity:"bank",brand:"Bcc",name:"Bcc"}},"amenity/bank|Belfius":{countryCodes:["be"],tags:{amenity:"bank",brand:"Belfius","brand:wikidata":"Q1956014","brand:wikipedia":"en:Belfius",name:"Belfius"}},"amenity/bank|Bendigo Bank":{countryCodes:["au"],tags:{amenity:"bank",brand:"Bendigo Bank","brand:wikidata":"Q4887077","brand:wikipedia":"en:Bendigo and Adelaide Bank",name:"Bendigo Bank"}},"amenity/bank|Berliner Volksbank":{countryCodes:["de"],tags:{amenity:"bank",brand:"Berliner Volksbank","brand:wikidata":"Q821855","brand:wikipedia":"de:Berliner Volksbank",name:"Berliner Volksbank"}},"amenity/bank|Bicentenario":{countryCodes:["ve"],tags:{amenity:"bank",brand:"Bicentenario","brand:wikidata":"Q5728123","brand:wikipedia":"es:Bicentenario Banco Universal",name:"Bicentenario"}},"amenity/bank|Bicici":{countryCodes:["ci"],matchNames:["agence bicici"],tags:{amenity:"bank",brand:"Bicici","brand:wikidata":"Q1667302","brand:wikipedia":"fr:Banque internationale pour le commerce et l'industrie de la Côte d'Ivoire",name:"Bicici"}},"amenity/bank|Bradesco":{countryCodes:["br"],matchNames:["banco bradesco"],tags:{amenity:"bank",brand:"Bradesco","brand:wikidata":"Q806181","brand:wikipedia":"en:Banco Bradesco",name:"Bradesco"}},"amenity/bank|Budapest Bank":{countryCodes:["hu"],tags:{amenity:"bank",brand:"Budapest Bank","brand:wikidata":"Q27493463","brand:wikipedia":"en:Budapest Bank",name:"Budapest Bank"}},"amenity/bank|CBAO":{tags:{amenity:"bank",brand:"CBAO","brand:wikidata":"Q532104","brand:wikipedia":"fr:CBAO Groupe Attijariwafa bank",name:"CBAO"}},"amenity/bank|CEC Bank":{countryCodes:["ro"],tags:{amenity:"bank",brand:"CEC Bank","brand:wikidata":"Q1023306","brand:wikipedia":"en:CEC Bank",name:"CEC Bank"}},"amenity/bank|CIB Bank":{tags:{amenity:"bank",brand:"CIB Bank","brand:wikidata":"Q839566","brand:wikipedia":"en:CIB Bank",name:"CIB Bank"}},"amenity/bank|CIBC":{countryCodes:["ca"],matchNames:["cibc banking centre"],tags:{amenity:"bank",brand:"CIBC","brand:wikidata":"Q666694","brand:wikipedia":"en:Canadian Imperial Bank of Commerce",name:"CIBC"}},"amenity/bank|CIC":{tags:{amenity:"bank",brand:"CIC","brand:wikidata":"Q746525","brand:wikipedia":"en:Crédit Industriel et Commercial",name:"CIC"}},"amenity/bank|CIH Bank":{countryCodes:["ma"],tags:{amenity:"bank",brand:"CIH Bank","brand:wikidata":"Q3006220","brand:wikipedia":"en:CIH Bank",name:"CIH Bank"}},"amenity/bank|CIMB Bank":{tags:{amenity:"bank",brand:"CIMB Bank","brand:wikidata":"Q3045976","brand:wikipedia":"en:CIMB",name:"CIMB Bank"}},"amenity/bank|CIMB Niaga":{countryCodes:["id"],tags:{amenity:"bank",brand:"CIMB Niaga","brand:wikidata":"Q5011747","brand:wikipedia":"en:CIMB Niaga",name:"CIMB Niaga"}},"amenity/bank|CNEP":{countryCodes:["dz"],tags:{amenity:"bank",brand:"CNEP","brand:wikidata":"Q2931752","brand:wikipedia":"fr:CNEP-Banque",name:"CNEP"}},"amenity/bank|Caisse Desjardins":{countryCodes:["ca"],tags:{amenity:"bank",brand:"Caisse Desjardins","brand:wikidata":"Q2933350","brand:wikipedia":"en:Desjardins Group",name:"Caisse Desjardins"}},"amenity/bank|Caisse d'Épargne":{tags:{amenity:"bank",brand:"Caisse d'Épargne","brand:wikidata":"Q1547738","brand:wikipedia":"en:Groupe Caisse d'Épargne",name:"Caisse d'Épargne"}},"amenity/bank|Caixa Econômica Federal~(Brazil)":{countryCodes:["br"],matchNames:["caixa","caixabank"],nomatch:["amenity/bank|Caixabank~(Spain)"],tags:{amenity:"bank",brand:"Caixa Econômica Federal","brand:wikidata":"Q835283","brand:wikipedia":"pt:Caixa Econômica Federal",name:"Caixa Econômica Federal"}},"amenity/bank|Caixa Geral de Depósitos":{tags:{amenity:"bank",brand:"Caixa Geral de Depósitos","brand:wikidata":"Q1026044","brand:wikipedia":"pt:Caixa Geral de Depósitos",name:"Caixa Geral de Depósitos"}},"amenity/bank|Caixabank~(Spain)":{countryCodes:["es"],nomatch:["amenity/bank|Caixa Econômica Federal~(Brazil)"],tags:{amenity:"bank",brand:"Caixabank","brand:wikidata":"Q847225","brand:wikipedia":"en:CaixaBank",name:"Caixabank"}},"amenity/bank|Caja Duero":{countryCodes:["es"],tags:{amenity:"bank",brand:"Caja Duero","brand:wikidata":"Q3821055","brand:wikipedia":"es:Caja Duero",name:"Caja Duero"}},"amenity/bank|Caja España":{countryCodes:["es"],tags:{amenity:"bank",brand:"Caja España","brand:wikidata":"Q966985","brand:wikipedia":"es:Caja España",name:"Caja España"}},"amenity/bank|Caja Rural":{tags:{amenity:"bank",brand:"Caja Rural","brand:wikidata":"Q3649971","brand:wikipedia":"es:Caja Rural",name:"Caja Rural"}},"amenity/bank|Caja Rural de Jaén":{countryCodes:["es"],tags:{amenity:"bank",brand:"Caja Rural de Jaén","brand:wikidata":"Q18720350","brand:wikipedia":"es:Caja Rural de Jaén",name:"Caja Rural de Jaén"}},"amenity/bank|CajaSur":{countryCodes:["es"],tags:{amenity:"bank",brand:"CajaSur","brand:wikidata":"Q3751637","brand:wikipedia":"en:CajaSur",name:"CajaSur"}},"amenity/bank|Cajamar":{countryCodes:["es"],tags:{amenity:"bank",brand:"Cajamar","brand:wikidata":"Q8254971","brand:wikipedia":"es:Cajamar",name:"Cajamar"}},"amenity/bank|Canara Bank":{tags:{amenity:"bank",brand:"Canara Bank","brand:wikidata":"Q2003777","brand:wikipedia":"en:Canara Bank",name:"Canara Bank"}},"amenity/bank|Capital Bank":{tags:{amenity:"bank",brand:"Capital Bank","brand:wikidata":"Q5035481","brand:wikipedia":"en:Capital Bank Financial",name:"Capital Bank"}},"amenity/bank|Capital One":{countryCodes:["us"],matchNames:["capital one bank"],tags:{amenity:"bank",brand:"Capital One","brand:wikidata":"Q1034654","brand:wikipedia":"en:Capital One",name:"Capital One"}},"amenity/bank|Carige":{countryCodes:["it"],tags:{amenity:"bank",brand:"Carige","brand:wikidata":"Q3633695","brand:wikipedia":"en:Banca Carige",name:"Carige"}},"amenity/bank|Cariparma":{countryCodes:["it"],tags:{amenity:"bank",brand:"Cariparma","brand:wikidata":"Q2938832","brand:wikipedia":"en:Crédit Agricole Italia",name:"Cariparma"}},"amenity/bank|Carisbo":{countryCodes:["it"],tags:{amenity:"bank",brand:"Carisbo","brand:wikidata":"Q3661937","brand:wikipedia":"en:Cassa di Risparmio in Bologna",name:"Carisbo"}},"amenity/bank|Cassa di Risparmio del Veneto":{countryCodes:["it"],tags:{amenity:"bank",brand:"Cassa di Risparmio del Veneto","brand:wikidata":"Q3661909","brand:wikipedia":"en:Cassa di Risparmio del Veneto",name:"Cassa di Risparmio del Veneto"}},"amenity/bank|CatalunyaCaixa":{countryCodes:["es"],tags:{amenity:"bank",brand:"CatalunyaCaixa","brand:wikidata":"Q3750952","brand:wikipedia":"en:CatalunyaCaixa",name:"CatalunyaCaixa"}},"amenity/bank|Cathay Bank":{countryCodes:["cn","tw","us"],tags:{amenity:"bank",brand:"Cathay Bank","brand:wikidata":"Q4189507","brand:wikipedia":"en:Cathay Bank",name:"Cathay Bank"}},"amenity/bank|Central Bank":{tags:{amenity:"bank",brand:"Central Bank",name:"Central Bank"}},"amenity/bank|Central Bank of India":{countryCodes:["in"],tags:{amenity:"bank",brand:"Central Bank of India","brand:wikidata":"Q2007090","brand:wikipedia":"en:Central Bank of India",name:"Central Bank of India"}},"amenity/bank|Chase":{matchNames:["chase bank"],tags:{amenity:"bank",brand:"Chase","brand:wikidata":"Q524629","brand:wikipedia":"en:Chase Bank",name:"Chase"}},"amenity/bank|China Bank":{tags:{amenity:"bank",brand:"China Bank","brand:wikidata":"Q5100080","brand:wikipedia":"en:Chinabank",name:"China Bank"}},"amenity/bank|China Bank Savings":{countryCodes:["ph"],tags:{amenity:"bank",brand:"China Bank Savings","brand:wikidata":"Q18387359","brand:wikipedia":"en:China Bank Savings",name:"China Bank Savings"}},"amenity/bank|China Construction Bank":{tags:{amenity:"bank",brand:"China Construction Bank","brand:wikidata":"Q26299","brand:wikipedia":"en:China Construction Bank",name:"China Construction Bank"}},"amenity/bank|Citibank":{tags:{amenity:"bank",brand:"Citibank","brand:wikidata":"Q857063","brand:wikipedia":"en:Citibank",name:"Citibank"}},"amenity/bank|Citizens Bank":{tags:{amenity:"bank",brand:"Citizens Bank","brand:wikidata":"Q25209674","brand:wikipedia":"en:Citizens Bank (South Bend, Indiana)",name:"Citizens Bank"}},"amenity/bank|City National Bank~(California)":{countryCodes:["us"],tags:{amenity:"bank",brand:"City National Bank","brand:wikidata":"Q5123314","brand:wikipedia":"en:City National Bank (California)",name:"City National Bank"}},"amenity/bank|City National Bank~(Florida)":{countryCodes:["us"],tags:{amenity:"bank",brand:"City National Bank","brand:wikidata":"Q16958644","brand:wikipedia":"en:City National Bank (Florida)",name:"City National Bank",official_name:"City National Bank of Florida"}},"amenity/bank|Clydesdale Bank":{countryCodes:["gb"],tags:{amenity:"bank",brand:"Clydesdale Bank","brand:wikidata":"Q971680","brand:wikipedia":"en:Clydesdale Bank",name:"Clydesdale Bank"}},"amenity/bank|Columbia Bank~(New Jersey)":{countryCodes:["us"],nomatch:["amenity/bank|Columbia Bank~(Washington)","shop/clothes|Columbia"],tags:{amenity:"bank",brand:"Columbia Bank","brand:wikidata":"Q62084096",name:"Columbia Bank"}},"amenity/bank|Columbia Bank~(Washington)":{countryCodes:["us"],nomatch:["amenity/bank|Columbia Bank~(New Jersey)","shop/clothes|Columbia"],tags:{amenity:"bank",brand:"Columbia Bank","brand:wikidata":"Q62084089",name:"Columbia Bank"}},"amenity/bank|Comerica Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Comerica Bank","brand:wikidata":"Q1114148","brand:wikipedia":"en:Comerica",name:"Comerica Bank"}},"amenity/bank|Commerce Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Commerce Bank",name:"Commerce Bank"}},"amenity/bank|Commercial Bank":{tags:{amenity:"bank",brand:"Commercial Bank",name:"Commercial Bank"}},"amenity/bank|Commercial Bank of Ceylon PLC":{countryCodes:["lk"],tags:{amenity:"bank",brand:"Commercial Bank of Ceylon PLC","brand:wikidata":"Q5152468","brand:wikipedia":"en:Commercial Bank of Ceylon",name:"Commercial Bank of Ceylon PLC"}},"amenity/bank|Commerzbank":{tags:{amenity:"bank",brand:"Commerzbank","brand:wikidata":"Q157617","brand:wikipedia":"en:Commerzbank",name:"Commerzbank"}},"amenity/bank|Commonwealth Bank":{tags:{amenity:"bank",brand:"Commonwealth Bank","brand:wikidata":"Q285328","brand:wikipedia":"en:Commonwealth Bank",name:"Commonwealth Bank"}},"amenity/bank|Community Bank":{countryCodes:["de","us"],tags:{amenity:"bank",brand:"Community Bank","brand:wikidata":"Q5154635","brand:wikipedia":"en:Community Bank, N.A.",name:"Community Bank"}},"amenity/bank|Corporation Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"Corporation Bank","brand:wikidata":"Q2003387","brand:wikipedia":"en:Corporation Bank",name:"Corporation Bank"}},"amenity/bank|Credem":{countryCodes:["it"],tags:{amenity:"bank",brand:"Credem","brand:wikidata":"Q3696881","brand:wikipedia":"en:Credito Emiliano",name:"Credem"}},"amenity/bank|Credicoop":{tags:{amenity:"bank",brand:"Credicoop","brand:wikidata":"Q4854086","brand:wikipedia":"en:Banco Credicoop",name:"Credicoop"}},"amenity/bank|Credit Suisse":{tags:{amenity:"bank",brand:"Credit Suisse","brand:wikidata":"Q372657","brand:wikipedia":"en:Credit Suisse",name:"Credit Suisse"}},"amenity/bank|Credito Valtellinese":{countryCodes:["it"],tags:{amenity:"bank",brand:"Credito Valtellinese","brand:wikidata":"Q3696888","brand:wikipedia":"en:Credito Valtellinese",name:"Credito Valtellinese"}},"amenity/bank|Crelan":{countryCodes:["be"],tags:{amenity:"bank",brand:"Crelan","brand:wikidata":"Q389872","brand:wikipedia":"en:Crelan",name:"Crelan"}},"amenity/bank|Crédit Agricole":{tags:{amenity:"bank",brand:"Crédit Agricole","brand:wikidata":"Q590952","brand:wikipedia":"fr:Crédit agricole",name:"Crédit Agricole"}},"amenity/bank|Crédit Maritime":{countryCodes:["fr"],tags:{amenity:"bank",brand:"Crédit Maritime","brand:wikidata":"Q17176866","brand:wikipedia":"fr:Crédit maritime",name:"Crédit Maritime"}},"amenity/bank|Crédit Mutuel":{tags:{amenity:"bank",brand:"Crédit Mutuel","brand:wikidata":"Q642627","brand:wikipedia":"en:Crédit Mutuel",name:"Crédit Mutuel"}},"amenity/bank|Crédit Mutuel de Bretagne":{countryCodes:["fr"],tags:{amenity:"bank",brand:"Crédit Mutuel de Bretagne","brand:wikidata":"Q3006236","brand:wikipedia":"fr:Crédit mutuel Arkéa",name:"Crédit Mutuel de Bretagne"}},"amenity/bank|Crédit du Nord":{tags:{amenity:"bank",brand:"Crédit du Nord","brand:wikidata":"Q3006209","brand:wikipedia":"en:Crédit du Nord",name:"Crédit du Nord"}},"amenity/bank|Crédito Agrícola":{tags:{amenity:"bank",brand:"Crédito Agrícola","brand:wikidata":"Q10262017","brand:wikipedia":"pt:Crédito Agrícola",name:"Crédito Agrícola"}},"amenity/bank|Cбербанк":{tags:{amenity:"bank",brand:"Cбербанк","brand:wikidata":"Q205012","brand:wikipedia":"en:Sberbank of Russia",name:"Cбербанк"}},"amenity/bank|Danske Bank":{tags:{amenity:"bank",brand:"Danske Bank","brand:wikidata":"Q1636974","brand:wikipedia":"en:Danske Bank",name:"Danske Bank"}},"amenity/bank|Davivienda":{tags:{amenity:"bank",brand:"Davivienda","brand:wikidata":"Q5242054","brand:wikipedia":"en:Davivienda",name:"Davivienda"}},"amenity/bank|Denizbank":{tags:{amenity:"bank",brand:"Denizbank","brand:wikidata":"Q1115064","brand:wikipedia":"en:DenizBank",name:"Denizbank"}},"amenity/bank|Desjardins":{countryCodes:["ca"],tags:{amenity:"bank",brand:"Desjardins","brand:wikidata":"Q2933350","brand:wikipedia":"en:Desjardins Group",name:"Desjardins"}},"amenity/bank|Deutsche Bank":{tags:{amenity:"bank",brand:"Deutsche Bank","brand:wikidata":"Q66048","brand:wikipedia":"en:Deutsche Bank",name:"Deutsche Bank"}},"amenity/bank|Dubai Islamic Bank":{tags:{amenity:"bank",brand:"Dubai Islamic Bank","brand:wikidata":"Q5310570","brand:wikipedia":"en:Dubai Islamic Bank",name:"Dubai Islamic Bank"}},"amenity/bank|EastWest Bank":{tags:{amenity:"bank",brand:"EastWest Bank","brand:wikidata":"Q5327595","brand:wikipedia":"en:EastWest Bank",name:"EastWest Bank"}},"amenity/bank|EastWest Unibank":{countryCodes:["ph"],tags:{amenity:"bank",brand:"EastWest Unibank","brand:wikidata":"Q5327595","brand:wikipedia":"en:EastWest Bank",name:"EastWest Unibank"}},"amenity/bank|Ecobank":{matchNames:["agence ecobank"],tags:{amenity:"bank",brand:"Ecobank","brand:wikidata":"Q930225","brand:wikipedia":"en:Ecobank",name:"Ecobank"}},"amenity/bank|Emigrant Savings Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Emigrant Savings Bank","brand:wikidata":"Q5371104","brand:wikipedia":"en:Emigrant Savings Bank",name:"Emigrant Savings Bank"}},"amenity/bank|Emirates NBD":{tags:{amenity:"bank",brand:"Emirates NBD","brand:wikidata":"Q5372575","brand:wikipedia":"en:Emirates NBD",name:"Emirates NBD"}},"amenity/bank|Equity Bank~(Congo)":{countryCodes:["cd"],tags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q21178738","brand:wikipedia":"en:Equity Bank Congo",name:"Equity Bank"}},"amenity/bank|Equity Bank~(Kenya)":{countryCodes:["ke"],tags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q5384664","brand:wikipedia":"en:Equity Bank Kenya Limited",name:"Equity Bank"}},"amenity/bank|Equity Bank~(Rwanda)":{countryCodes:["rw"],tags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q5384665","brand:wikipedia":"en:Equity Bank Rwanda Limited",name:"Equity Bank"}},"amenity/bank|Equity Bank~(South Sudan)":{countryCodes:["ss"],tags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q5384666","brand:wikipedia":"en:Equity Bank South Sudan Limited",name:"Equity Bank"}},"amenity/bank|Equity Bank~(Tanzania)":{countryCodes:["tz"],tags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q5384667","brand:wikipedia":"en:Equity Bank Tanzania Limited",name:"Equity Bank"}},"amenity/bank|Equity Bank~(USA)":{countryCodes:["us"],tags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q62260414",name:"Equity Bank"}},"amenity/bank|Equity Bank~(Uganda)":{countryCodes:["ug"],tags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q5384668","brand:wikipedia":"en:Equity Bank Uganda Limited",name:"Equity Bank"}},"amenity/bank|Erste Bank":{countryCodes:["at","hr","hu"],tags:{amenity:"bank",brand:"Erste Bank","brand:wikidata":"Q696867","brand:wikipedia":"de:Erste Bank",name:"Erste Bank"}},"amenity/bank|Eurobank~(Greece)":{countryCodes:["gr"],matchNames:["eurobank ergasias"],tags:{amenity:"bank",brand:"Eurobank","brand:wikidata":"Q951850","brand:wikipedia":"el:Eurobank",name:"Eurobank"}},"amenity/bank|Eurobank~(Poland)":{countryCodes:["pl"],tags:{amenity:"bank",brand:"Eurobank","brand:wikidata":"Q9256201","brand:wikipedia":"pl:Euro Bank",name:"Eurobank"}},"amenity/bank|Eurobank~(Serbia)":{countryCodes:["rs"],tags:{amenity:"bank",brand:"Eurobank","brand:wikidata":"Q5411684","brand:wikipedia":"sr:Eurobanka",name:"Eurobank"}},"amenity/bank|FNB":{tags:{amenity:"bank",brand:"FNB","brand:wikidata":"Q3072956","brand:wikipedia":"en:First National Bank (South Africa)",name:"FNB",official_name:"First National Bank"}},"amenity/bank|Faysal Bank":{countryCodes:["pk"],tags:{amenity:"bank",brand:"Faysal Bank","brand:wikidata":"Q5439099","brand:wikipedia":"en:Faysal Bank",name:"Faysal Bank"}},"amenity/bank|Federal Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"Federal Bank","brand:wikidata":"Q2044983","brand:wikipedia":"en:Federal Bank",name:"Federal Bank"}},"amenity/bank|Fidelity Bank~(Ghana)":{countryCodes:["gh"],tags:{amenity:"bank",brand:"Fidelity Bank","brand:wikidata":"Q5446778","brand:wikipedia":"en:Fidelity Bank Ghana",name:"Fidelity Bank"}},"amenity/bank|Fidelity Bank~(Nigeria)":{countryCodes:["ng"],tags:{amenity:"bank",brand:"Fidelity Bank","brand:wikidata":"Q5446777","brand:wikipedia":"en:Fidelity Bank Nigeria",name:"Fidelity Bank"}},"amenity/bank|Fidelity Bank~(USA)":{countryCodes:["us"],tags:{amenity:"bank",brand:"Fidelity Bank","brand:wikidata":"Q1411292","brand:wikipedia":"en:Fidelity Investments",name:"Fidelity Bank"}},"amenity/bank|Fifth Third Bank":{countryCodes:["us"],matchNames:["5/3","5/3 bank"],tags:{amenity:"bank",brand:"Fifth Third Bank","brand:wikidata":"Q1411810","brand:wikipedia":"en:Fifth Third Bank",name:"Fifth Third Bank",short_name:"5/3 Bank"}},"amenity/bank|Finansbank":{tags:{amenity:"bank",brand:"Finansbank","brand:wikidata":"Q1416237","brand:wikipedia":"en:Finansbank",name:"Finansbank"}},"amenity/bank|First Bank~(Western USA)":{countryCodes:["us"],matchNames:["1stbank"],tags:{amenity:"bank",brand:"First Bank","brand:wikidata":"Q5452217","brand:wikipedia":"en:FirstBank Holding Co",name:"First Bank",short_name:"1STBank"}},"amenity/bank|First Citizens Bank":{tags:{amenity:"bank",brand:"First Citizens Bank","brand:wikidata":"Q5452734","brand:wikipedia":"en:First Citizens Bank (Trinidad and Tobago)",name:"First Citizens Bank"}},"amenity/bank|First Financial Bank":{countryCodes:["us"],matchNames:["1st financial bank"],tags:{amenity:"bank",brand:"First Financial Bank","brand:wikidata":"Q5453009","brand:wikipedia":"en:First Financial Bank (Ohio)",name:"First Financial Bank"}},"amenity/bank|First Midwest Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"First Midwest Bank","brand:wikidata":"Q5453331","brand:wikipedia":"en:First Midwest Bank",name:"First Midwest Bank"}},"amenity/bank|First National Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"First National Bank","brand:wikidata":"Q5426765","brand:wikipedia":"en:F.N.B. Corporation",name:"First National Bank"}},"amenity/bank|First State Bank":{tags:{amenity:"bank",brand:"First State Bank",name:"First State Bank"}},"amenity/bank|Frost Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Frost Bank","brand:wikidata":"Q5506152","brand:wikipedia":"en:Frost Bank",name:"Frost Bank"}},"amenity/bank|Fulton Bank":{tags:{amenity:"bank",brand:"Fulton Bank",name:"Fulton Bank"}},"amenity/bank|GCB Bank":{tags:{amenity:"bank",brand:"GCB Bank","brand:wikidata":"Q1521346","brand:wikipedia":"en:GCB Bank",name:"GCB Bank"}},"amenity/bank|Galicia":{countryCodes:["ar"],tags:{amenity:"bank",brand:"Galicia","brand:wikidata":"Q5717952","brand:wikipedia":"es:Banco Galicia",name:"Galicia"}},"amenity/bank|Garanti":{countryCodes:["tr"],tags:{amenity:"bank",brand:"Garanti","brand:wikidata":"Q322962","brand:wikipedia":"en:Garanti Bank",name:"Garanti"}},"amenity/bank|Garanti Bankası":{tags:{amenity:"bank",brand:"Garanti Bankası","brand:wikidata":"Q322962","brand:wikipedia":"en:Garanti Bank",name:"Garanti Bankası"}},"amenity/bank|Getin Bank":{countryCodes:["pl"],tags:{amenity:"bank",brand:"Getin Bank","brand:wikidata":"Q9267646","brand:wikipedia":"pl:Getin Bank",name:"Getin Bank"}},"amenity/bank|Great Western Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Great Western Bank","brand:wikidata":"Q5600185","brand:wikipedia":"en:Great Western Bank (1907–present)",name:"Great Western Bank"}},"amenity/bank|Groupama":{tags:{amenity:"bank",brand:"Groupama","brand:wikidata":"Q3083531","brand:wikipedia":"en:Groupama",name:"Groupama"}},"amenity/bank|HBL Bank":{countryCodes:["pk"],matchNames:["hbl"],tags:{amenity:"bank",brand:"HBL Bank","brand:wikidata":"Q1566843","brand:wikipedia":"ur:ایچ بی ایل پاکستان",name:"HBL Bank"}},"amenity/bank|HDFC Bank":{tags:{amenity:"bank",brand:"HDFC Bank","brand:wikidata":"Q631047","brand:wikipedia":"en:HDFC Bank",name:"HDFC Bank"}},"amenity/bank|HNB":{tags:{amenity:"bank",brand:"HNB","brand:wikidata":"Q3532080","brand:wikipedia":"en:Hatton National Bank",name:"HNB"}},"amenity/bank|HSBC":{tags:{amenity:"bank",brand:"HSBC","brand:wikidata":"Q190464","brand:wikipedia":"en:HSBC",name:"HSBC"}},"amenity/bank|Halifax":{tags:{amenity:"bank",brand:"Halifax","brand:wikidata":"Q3310164","brand:wikipedia":"en:Halifax (bank)",name:"Halifax"}},"amenity/bank|Halkbank":{tags:{amenity:"bank",brand:"Halkbank","brand:wikidata":"Q3593818","brand:wikipedia":"en:Halkbank a.d.",name:"Halkbank"}},"amenity/bank|Handelsbanken":{tags:{amenity:"bank",brand:"Handelsbanken","brand:wikidata":"Q1421630","brand:wikipedia":"en:Handelsbanken",name:"Handelsbanken"}},"amenity/bank|Heritage Bank":{tags:{amenity:"bank",brand:"Heritage Bank","brand:wikidata":"Q5738690","brand:wikipedia":"en:Heritage Bank",name:"Heritage Bank"}},"amenity/bank|Hong Leong Bank":{tags:{amenity:"bank",brand:"Hong Leong Bank","brand:wikidata":"Q4383943","brand:wikipedia":"en:Hong Leong Bank",name:"Hong Leong Bank"}},"amenity/bank|Hrvatska poštanska banka":{countryCodes:["hr"],tags:{amenity:"bank",brand:"Hrvatska poštanska banka","brand:wikidata":"Q5923981","brand:wikipedia":"en:Hrvatska poštanska banka",name:"Hrvatska poštanska banka"}},"amenity/bank|Huntington Bank":{tags:{amenity:"bank",brand:"Huntington Bank","brand:wikidata":"Q798819","brand:wikipedia":"en:Huntington Bancshares",name:"Huntington Bank"}},"amenity/bank|HypoVereinsbank":{tags:{amenity:"bank",brand:"HypoVereinsbank","brand:wikidata":"Q220189","brand:wikipedia":"en:HypoVereinsbank",name:"HypoVereinsbank"}},"amenity/bank|ICBC":{tags:{amenity:"bank",brand:"ICBC","brand:wikidata":"Q26463","brand:wikipedia":"en:Industrial and Commercial Bank of China",name:"ICBC"}},"amenity/bank|ICICI Bank":{tags:{amenity:"bank",brand:"ICICI Bank","brand:wikidata":"Q1653258","brand:wikipedia":"en:ICICI Bank",name:"ICICI Bank"}},"amenity/bank|IDBI Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"IDBI Bank","brand:wikidata":"Q3633485","brand:wikipedia":"en:IDBI Bank",name:"IDBI Bank"}},"amenity/bank|ING":{matchNames:["ing bank"],tags:{amenity:"bank",brand:"ING","brand:wikidata":"Q645708","brand:wikipedia":"en:ING Group",name:"ING"}},"amenity/bank|ING Bank Śląski":{countryCodes:["pl"],tags:{amenity:"bank",brand:"ING Bank Śląski","brand:wikidata":"Q1410383","brand:wikipedia":"pl:ING Bank Śląski",name:"ING Bank Śląski"}},"amenity/bank|Ibercaja":{countryCodes:["es"],tags:{amenity:"bank",brand:"Ibercaja","brand:wikidata":"Q5907815","brand:wikipedia":"es:Ibercaja",name:"Ibercaja"}},"amenity/bank|Indian Bank":{tags:{amenity:"bank",brand:"Indian Bank","brand:wikidata":"Q2003789","brand:wikipedia":"en:Indian Bank",name:"Indian Bank"}},"amenity/bank|Indian Overseas Bank":{tags:{amenity:"bank",brand:"Indian Overseas Bank","brand:wikidata":"Q2003611","brand:wikipedia":"en:Indian Overseas Bank",name:"Indian Overseas Bank"}},"amenity/bank|Interbank":{nomatch:["amenity/bank|Bankinter"],tags:{amenity:"bank",brand:"Interbank","brand:wikidata":"Q2835558","brand:wikipedia":"es:Banco Interbank",name:"Interbank"}},"amenity/bank|Intesa Sanpaolo":{tags:{amenity:"bank",brand:"Intesa Sanpaolo","brand:wikidata":"Q1343118","brand:wikipedia":"it:Intesa Sanpaolo",name:"Intesa Sanpaolo"}},"amenity/bank|Itaú~(Brazil)":{countryCodes:["br"],matchNames:["banco itau"],nomatch:["amenity/bank|Itaú~(Brazil)"],tags:{amenity:"bank",brand:"Itaú Unibanco","brand:wikidata":"Q1424293","brand:wikipedia":"pt:Itaú Unibanco",name:"Itaú"}},"amenity/bank|Itaú~(Chile)":{countryCodes:["cl"],matchNames:["banco itau"],nomatch:["amenity/bank|Itaú~(Chile)"],tags:{amenity:"bank",brand:"Itaú Corpbanca","brand:wikidata":"Q2423252","brand:wikipedia":"en:Itaú Corpbanca",name:"Itaú"}},"amenity/bank|JS Bank":{countryCodes:["pk"],tags:{amenity:"bank",brand:"JS Bank","brand:wikidata":"Q6108986","brand:wikipedia":"en:JS Bank",name:"JS Bank"}},"amenity/bank|Janata Bank Limited জনতা ব্যাংক লিমিটেড":{tags:{amenity:"bank",brand:"Janata Bank Limited জনতা ব্যাংক লিমিটেড","brand:wikidata":"Q3347028","brand:wikipedia":"en:Janata Bank",name:"Janata Bank Limited জনতা ব্যাংক লিমিটেড"}},"amenity/bank|Jyske Bank":{countryCodes:["dk"],tags:{amenity:"bank",brand:"Jyske Bank","brand:wikidata":"Q136672","brand:wikipedia":"en:Jyske Bank",name:"Jyske Bank"}},"amenity/bank|K&H Bank":{countryCodes:["hu"],tags:{amenity:"bank",brand:"K&H Bank","brand:wikidata":"Q6393834","brand:wikipedia":"en:K&H Bank",name:"K&H Bank"}},"amenity/bank|KBC":{tags:{amenity:"bank",brand:"KBC","brand:wikidata":"Q941020","brand:wikipedia":"en:KBC Bank",name:"KBC"}},"amenity/bank|KBZ Bank":{tags:{amenity:"bank",brand:"KBZ Bank","brand:wikidata":"Q6360949","brand:wikipedia":"en:Kanbawza Bank",name:"KBZ Bank"}},"amenity/bank|Karnataka Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"Karnataka Bank","brand:wikidata":"Q2042632","brand:wikipedia":"en:Karnataka Bank",name:"Karnataka Bank"}},"amenity/bank|Kasa Stefczyka":{countryCodes:["pl"],tags:{amenity:"bank",brand:"Kasa Stefczyka","brand:wikidata":"Q57624461",name:"Kasa Stefczyka"}},"amenity/bank|KeyBank":{countryCodes:["us"],tags:{amenity:"bank",brand:"KeyBank","brand:wikidata":"Q1740314","brand:wikipedia":"en:KeyBank",name:"KeyBank"}},"amenity/bank|Komerční banka":{countryCodes:["cz"],tags:{amenity:"bank",brand:"Komerční banka","brand:wikidata":"Q1541079","brand:wikipedia":"en:Komerční banka",name:"Komerční banka"}},"amenity/bank|Kotak Mahindra Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"Kotak Mahindra Bank","brand:wikidata":"Q2040404","brand:wikipedia":"en:Kotak Mahindra Bank",name:"Kotak Mahindra Bank"}},"amenity/bank|Kutxabank":{countryCodes:["es"],tags:{amenity:"bank",brand:"Kutxabank","brand:wikidata":"Q5139377","brand:wikipedia":"en:Kutxabank",name:"Kutxabank"}},"amenity/bank|Kuveyt Türk":{countryCodes:["tr"],tags:{amenity:"bank",brand:"Kuveyt Türk",name:"Kuveyt Türk"}},"amenity/bank|LCL":{tags:{amenity:"bank",brand:"LCL","brand:wikidata":"Q779722","brand:wikipedia":"en:Crédit Lyonnais",name:"LCL"}},"amenity/bank|La Banque Postale":{tags:{amenity:"bank",brand:"La Banque Postale","brand:wikidata":"Q3206431","brand:wikipedia":"en:La Banque postale",name:"La Banque Postale"}},"amenity/bank|La Caixa":{countryCodes:["es"],tags:{amenity:"bank",brand:"La Caixa","brand:wikidata":"Q287753","brand:wikipedia":"en:La Caixa",name:"La Caixa"}},"amenity/bank|Laboral Kutxa":{countryCodes:["es"],tags:{amenity:"bank",brand:"Laboral Kutxa","brand:wikidata":"Q12052386","brand:wikipedia":"en:Laboral Kutxa",name:"Laboral Kutxa"}},"amenity/bank|Landbank":{countryCodes:["ph"],matchNames:["bangko sa lupa ng pilipinas","land bank of the philippines","lbp"],tags:{amenity:"bank",brand:"Landbank","brand:wikidata":"Q6483872","brand:wikipedia":"en:Land Bank of the Philippines",name:"Landbank"}},"amenity/bank|Leeds Building Society":{countryCodes:["gb"],tags:{amenity:"bank",brand:"Leeds Building Society","brand:wikidata":"Q6515848","brand:wikipedia":"en:Leeds Building Society",name:"Leeds Building Society"}},"amenity/bank|Liberbank":{countryCodes:["es"],tags:{amenity:"bank",brand:"Liberbank","brand:wikidata":"Q2891018","brand:wikipedia":"en:Liberbank",name:"Liberbank"}},"amenity/bank|Liberty Bank":{nomatch:["amenity/fuel|Liberty"],tags:{amenity:"bank",brand:"Liberty Bank",name:"Liberty Bank"}},"amenity/bank|Lloyds Bank":{matchNames:["lloyds","lloyds tsb"],tags:{amenity:"bank",brand:"Lloyds Bank","brand:wikidata":"Q1152847","brand:wikipedia":"en:Lloyds Bank",name:"Lloyds Bank"}},"amenity/bank|M&T Bank":{tags:{amenity:"bank",brand:"M&T Bank","brand:wikidata":"Q3272257","brand:wikipedia":"en:M&T Bank",name:"M&T Bank"}},"amenity/bank|MCB":{matchNames:["mcb bank"],tags:{amenity:"bank",brand:"MCB","brand:wikidata":"Q15982510","brand:wikipedia":"ur:ایم سی بی بینک لمیٹڈ",name:"MCB"}},"amenity/bank|MONETA Money Bank":{countryCodes:["cz"],tags:{amenity:"bank",brand:"MONETA Money Bank","brand:wikidata":"Q24282966","brand:wikipedia":"cs:Moneta Money Bank",name:"MONETA Money Bank"}},"amenity/bank|Macro":{tags:{amenity:"bank",brand:"Macro","brand:wikidata":"Q2335199","brand:wikipedia":"en:Banco Macro",name:"Macro"}},"amenity/bank|Maybank":{tags:{amenity:"bank",brand:"Maybank","brand:wikidata":"Q1364018","brand:wikipedia":"en:Maybank",name:"Maybank"}},"amenity/bank|Meezan Bank":{countryCodes:["pk"],tags:{amenity:"bank",brand:"Meezan Bank","brand:wikidata":"Q6807934","brand:wikipedia":"en:Meezan Bank",name:"Meezan Bank"}},"amenity/bank|Mercantil":{tags:{amenity:"bank",brand:"Mercantil","brand:wikidata":"Q6818004","brand:wikipedia":"en:Mercantil Servicios Financieros",name:"Mercantil"}},"amenity/bank|Metrobank":{tags:{amenity:"bank",brand:"Metrobank",name:"Metrobank"}},"amenity/bank|Mibanco":{countryCodes:["pe"],tags:{amenity:"bank",brand:"Mibanco","brand:wikidata":"Q5558589","brand:wikipedia":"es:MiBanco",name:"Mibanco"}},"amenity/bank|MidFirst Bank":{tags:{amenity:"bank",brand:"MidFirst Bank","brand:wikidata":"Q17081131","brand:wikipedia":"en:MidFirst Bank",name:"MidFirst Bank"}},"amenity/bank|Millennium Bank":{countryCodes:["pl"],matchNames:["bank millennium"],tags:{amenity:"bank",brand:"Millennium Bank","brand:wikidata":"Q4855947","brand:wikipedia":"pl:Bank Millennium",name:"Millennium Bank"}},"amenity/bank|Millennium bcp":{countryCodes:["pt"],tags:{amenity:"bank",brand:"Millennium bcp","brand:wikidata":"Q118581","brand:wikipedia":"pt:Banco Comercial Português",name:"Millennium bcp",official_name:"Banco Comercial Português","official_name:en":"Portuguese Commercial Bank","official_name:es":"Banco Comercial Português"}},"amenity/bank|Monte dei Paschi di Siena":{tags:{amenity:"bank",brand:"Monte dei Paschi di Siena","brand:wikidata":"Q46730","brand:wikipedia":"en:Banca Monte dei Paschi di Siena",name:"Monte dei Paschi di Siena"}},"amenity/bank|Montepio":{tags:{amenity:"bank",brand:"Montepio","brand:wikidata":"Q1946091","brand:wikipedia":"en:Montepio (bank)",name:"Montepio"}},"amenity/bank|NAB":{tags:{amenity:"bank",brand:"NAB","brand:wikidata":"Q1430985","brand:wikipedia":"en:National Australia Bank",name:"NAB"}},"amenity/bank|NSB":{countryCodes:["lk"],matchNames:["national savings bank"],tags:{amenity:"bank",brand:"NSB","brand:wikidata":"Q12500189","brand:wikipedia":"en:National Savings Bank (Sri Lanka)",name:"NSB"}},"amenity/bank|NatWest":{tags:{amenity:"bank",brand:"NatWest","brand:wikidata":"Q2740021","brand:wikipedia":"en:NatWest",name:"NatWest"}},"amenity/bank|National Bank":{countryCodes:["ca"],tags:{amenity:"bank",brand:"National Bank","brand:wikidata":"Q634298","brand:wikipedia":"en:National Bank of Canada",name:"National Bank",official_name:"National Bank of Canada"}},"amenity/bank|Nationwide":{nomatch:["office/insurance|Nationwide"],tags:{amenity:"bank",brand:"Nationwide","brand:wikidata":"Q846735","brand:wikipedia":"en:Nationwide Building Society",name:"Nationwide"}},"amenity/bank|Navy Federal Credit Union":{tags:{amenity:"bank",brand:"Navy Federal Credit Union","brand:wikidata":"Q6982632","brand:wikipedia":"en:Navy Federal Credit Union",name:"Navy Federal Credit Union"}},"amenity/bank|Nedbank":{tags:{amenity:"bank",brand:"Nedbank","brand:wikidata":"Q2751701","brand:wikipedia":"en:Nedbank",name:"Nedbank"}},"amenity/bank|Nordea":{tags:{amenity:"bank",brand:"Nordea","brand:wikidata":"Q1123823","brand:wikipedia":"en:Nordea",name:"Nordea"}},"amenity/bank|Novo Banco":{tags:{amenity:"bank",brand:"Novo Banco","brand:wikidata":"Q17488861","brand:wikipedia":"en:Novo Banco",name:"Novo Banco"}},"amenity/bank|OLB":{countryCodes:["de"],tags:{amenity:"bank",brand:"OLB","brand:wikidata":"Q879591","brand:wikipedia":"en:Oldenburgische Landesbank",name:"OLB"}},"amenity/bank|OTP":{matchNames:["otp bank"],tags:{amenity:"bank",brand:"OTP","brand:wikidata":"Q912778","brand:wikipedia":"en:OTP Bank",name:"OTP"}},"amenity/bank|Oberbank":{tags:{amenity:"bank",brand:"Oberbank","brand:wikidata":"Q2009139","brand:wikipedia":"de:Oberbank",name:"Oberbank"}},"amenity/bank|Occidental de Descuento":{tags:{amenity:"bank",brand:"Occidental de Descuento","brand:wikidata":"Q4854108","brand:wikipedia":"en:Banco Occidental de Descuento",name:"Occidental de Descuento"}},"amenity/bank|Oldenburgische Landesbank":{countryCodes:["de"],tags:{amenity:"bank",brand:"Oldenburgische Landesbank","brand:wikidata":"Q879591","brand:wikipedia":"en:Oldenburgische Landesbank",name:"Oldenburgische Landesbank"}},"amenity/bank|One Network Bank":{countryCodes:["ph"],tags:{amenity:"bank",brand:"One Network Bank","brand:wikidata":"Q7093019","brand:wikipedia":"en:One Network Bank",name:"One Network Bank",operator:"Banco de Oro","operator:wikidata":"Q4854129","operator:wikipedia":"en:Banco de Oro"}},"amenity/bank|Oriental Bank of Commerce":{countryCodes:["in"],tags:{amenity:"bank",brand:"Oriental Bank of Commerce","brand:wikidata":"Q367008","brand:wikipedia":"en:Oriental Bank of Commerce",name:"Oriental Bank of Commerce"}},"amenity/bank|Osuuspankki":{countryCodes:["fi"],tags:{amenity:"bank",brand:"Osuuspankki","brand:wikidata":"Q4045597","brand:wikipedia":"fi:OP (finanssiryhmä)",name:"Osuuspankki"}},"amenity/bank|PBZ":{countryCodes:["hr"],tags:{amenity:"bank",brand:"PBZ","brand:wikidata":"Q7246343","brand:wikipedia":"en:Privredna banka Zagreb",name:"PBZ"}},"amenity/bank|PKO BP":{countryCodes:["pl"],matchNames:["pko bank polski"],tags:{amenity:"bank",brand:"PKO BP","brand:wikidata":"Q578832","brand:wikipedia":"pl:Powszechna Kasa Oszczędności Bank Polski",name:"PKO BP"}},"amenity/bank|PNB":{countryCodes:["ph"],matchNames:["philippine national bank"],tags:{amenity:"bank",brand:"PNB","brand:wikidata":"Q1657971","brand:wikipedia":"en:Philippine National Bank",name:"PNB",official_name:"Philippine National Bank"}},"amenity/bank|PNC Bank":{matchNames:["pnc"],tags:{amenity:"bank",brand:"PNC Bank","brand:wikidata":"Q38928","brand:wikipedia":"en:PNC Financial Services",name:"PNC Bank"}},"amenity/bank|PSBank":{tags:{amenity:"bank",brand:"PSBank","brand:wikidata":"Q7185203","brand:wikipedia":"en:Philippine Savings Bank",name:"PSBank"}},"amenity/bank|Panin Bank":{tags:{amenity:"bank",brand:"Panin Bank","brand:wikidata":"Q12502751","brand:wikipedia":"id:Panin Bank",name:"Panin Bank"}},"amenity/bank|Patagonia":{countryCodes:["ar"],tags:{amenity:"bank",brand:"Patagonia","brand:wikidata":"Q2882078","brand:wikipedia":"en:Banco Patagonia",name:"Patagonia"}},"amenity/bank|Pekao SA":{countryCodes:["pl"],tags:{amenity:"bank",brand:"Pekao SA","brand:wikidata":"Q806642","brand:wikipedia":"pl:Bank Polska Kasa Opieki",name:"Pekao SA"}},"amenity/bank|People's United Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"People's United Bank","brand:wikidata":"Q7165802","brand:wikipedia":"en:People's United Financial",name:"People's United Bank"}},"amenity/bank|Peoples Bank":{tags:{amenity:"bank",brand:"Peoples Bank","brand:wikidata":"Q7166050","brand:wikipedia":"en:Peoples Bank",name:"Peoples Bank"}},"amenity/bank|Piraeus Bank":{tags:{amenity:"bank",brand:"Piraeus Bank","brand:wikidata":"Q3312","brand:wikipedia":"en:Piraeus Bank",name:"Piraeus Bank"}},"amenity/bank|Postbank~(Bulgaria)":{countryCodes:["bg"],nomatch:["amenity/bank|Bancpost"],tags:{amenity:"bank",brand:"Postbank","brand:wikidata":"Q7234083","brand:wikipedia":"en:Bulgarian Postbank",name:"Postbank"}},"amenity/bank|Postbank~(Germany)":{countryCodes:["de"],matchNames:["postbank finanzcenter"],nomatch:["amenity/bank|Bancpost"],tags:{amenity:"bank",brand:"Postbank","brand:wikidata":"Q708835","brand:wikipedia":"en:Deutsche Postbank",name:"Postbank"}},"amenity/bank|Prima banka":{countryCodes:["sk"],tags:{amenity:"bank",brand:"Prima banka","brand:wikidata":"Q13538661","brand:wikipedia":"sk:Prima banka Slovensko",name:"Prima banka"}},"amenity/bank|Provincial":{countryCodes:["ve"],matchNames:["bbva provincial"],tags:{amenity:"bank",brand:"Provincial","brand:wikidata":"Q4835087","brand:wikipedia":"es:BBVA Provincial",name:"Provincial"}},"amenity/bank|Public Bank~(Malaysia)":{matchNames:["public bank berhad"],tags:{amenity:"bank",brand:"Public Bank","brand:wikidata":"Q3046561","brand:wikipedia":"en:Public Bank Berhad",name:"Public Bank"}},"amenity/bank|Punjab National Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"Punjab National Bank","brand:wikidata":"Q2743499","brand:wikipedia":"en:Punjab National Bank",name:"Punjab National Bank"}},"amenity/bank|RBC":{matchNames:["rbc financial group","rbc royal bank","royal bank","royal bank of canada"],tags:{amenity:"bank",brand:"RBC","brand:wikidata":"Q735261","brand:wikipedia":"en:Royal Bank of Canada",name:"RBC",official_name:"Royal Bank of Canada"}},"amenity/bank|RBS":{matchNames:["royal bank of scotland"],tags:{amenity:"bank",brand:"RBS","brand:wikidata":"Q160126","brand:wikipedia":"en:Royal Bank of Scotland",name:"RBS",official_name:"Royal Bank of Scotland"}},"amenity/bank|RCBC":{countryCodes:["ph"],matchNames:["rcbc savings bank"],tags:{amenity:"bank",brand:"RCBC","brand:wikidata":"Q7339070","brand:wikipedia":"en:Rizal Commercial Banking Corporation",name:"RCBC",official_name:"Rizal Commercial Banking Corporation"}},"amenity/bank|Rabobank":{tags:{amenity:"bank",brand:"Rabobank","brand:wikidata":"Q252004","brand:wikipedia":"en:Rabobank",name:"Rabobank"}},"amenity/bank|Raiffeisen Polbank":{tags:{amenity:"bank",brand:"Raiffeisen Polbank","brand:wikidata":"Q9303218","brand:wikipedia":"pl:Raiffeisen Bank Polska",name:"Raiffeisen Polbank"}},"amenity/bank|Raiffeisenbank":{matchNames:["raiffeisen","raiffeisenkasse"],nomatch:["amenity/fuel|Raiffeisen"],tags:{amenity:"bank",brand:"Raiffeisenbank",name:"Raiffeisenbank"}},"amenity/bank|Regions Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Regions Bank","brand:wikidata":"Q917131","brand:wikipedia":"en:Regions Financial Corporation",name:"Regions Bank"}},"amenity/bank|Republic Bank":{tags:{amenity:"bank",brand:"Republic Bank","brand:wikidata":"Q7314386","brand:wikipedia":"en:Republic Bank",name:"Republic Bank"}},"amenity/bank|República":{tags:{amenity:"bank",brand:"República",name:"República"}},"amenity/bank|SC제일은행":{countryCodes:["kr"],tags:{amenity:"bank",brand:"SC제일은행","brand:ko":"SC제일은행",name:"SC제일은행","name:ko":"SC제일은행"}},"amenity/bank|SEB":{tags:{amenity:"bank",brand:"SEB","brand:wikidata":"Q975655","brand:wikipedia":"en:SEB Group",name:"SEB"}},"amenity/bank|SGBCI":{countryCodes:["ci"],matchNames:["agence sgbci"],tags:{amenity:"bank",brand:"SGBCI","brand:wikidata":"Q3488360","brand:wikipedia":"fr:Société générale de banques en Côte d'Ivoire",name:"SGBCI"}},"amenity/bank|SNS Bank":{countryCodes:["nl"],tags:{amenity:"bank",brand:"SNS Bank","brand:wikidata":"Q1857899","brand:wikipedia":"en:De Volksbank",name:"SNS Bank"}},"amenity/bank|Sampath Bank":{countryCodes:["lk"],tags:{amenity:"bank",brand:"Sampath Bank","brand:wikidata":"Q7410095","brand:wikipedia":"en:Sampath Bank",name:"Sampath Bank"}},"amenity/bank|Santander":{matchNames:["santander consumer bank"],nomatch:["amenity/bank|Banco Santander"],tags:{amenity:"bank",brand:"Santander","brand:wikidata":"Q5835668","brand:wikipedia":"en:Santander Bank",name:"Santander"}},"amenity/bank|Santander Río":{countryCodes:["ar"],tags:{amenity:"bank",brand:"Santander Río","brand:wikidata":"Q3385268","brand:wikipedia":"es:Banco Santander Río",name:"Santander Río"}},"amenity/bank|Santander Totta":{tags:{amenity:"bank",brand:"Santander Totta","brand:wikidata":"Q4854116","brand:wikipedia":"pt:Banco Santander Portugal",name:"Santander Totta"}},"amenity/bank|Sberbank":{tags:{amenity:"bank",brand:"Sberbank","brand:wikidata":"Q205012","brand:wikipedia":"en:Sberbank of Russia",name:"Sberbank"}},"amenity/bank|Scotiabank":{tags:{amenity:"bank",brand:"Scotiabank","brand:wikidata":"Q451476","brand:wikipedia":"en:Scotiabank",name:"Scotiabank"}},"amenity/bank|Security Bank":{tags:{amenity:"bank",brand:"Security Bank","brand:wikidata":"Q7444945","brand:wikipedia":"en:Security Bank",name:"Security Bank"}},"amenity/bank|Seylan Bank":{countryCodes:["lk"],tags:{amenity:"bank",brand:"Seylan Bank","brand:wikidata":"Q3532083","brand:wikipedia":"en:Seylan Bank",name:"Seylan Bank"}},"amenity/bank|Siam Commercial Bank":{tags:{amenity:"bank",brand:"Siam Commercial Bank","brand:wikidata":"Q2038986","brand:wikipedia":"en:Siam Commercial Bank",name:"Siam Commercial Bank"}},"amenity/bank|Sicoob":{countryCodes:["br"],tags:{amenity:"bank",brand:"Sicoob","brand:wikidata":"Q28679754","brand:wikipedia":"pt:Sistema de Cooperativas de Crédito do Brasil",name:"Sicoob"}},"amenity/bank|Sicredi":{tags:{amenity:"bank",brand:"Sicredi","brand:wikidata":"Q3483060","brand:wikipedia":"pt:Sistema de Crédito Cooperativo",name:"Sicredi"}},"amenity/bank|Simmons Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Simmons Bank","brand:wikidata":"Q28402389","brand:wikipedia":"en:Simmons Bank",name:"Simmons Bank"}},"amenity/bank|Slovenská sporiteľňa":{countryCodes:["sk"],tags:{amenity:"bank",brand:"Slovenská sporiteľňa","brand:wikidata":"Q7541907","brand:wikipedia":"en:Slovenská sporiteľňa",name:"Slovenská sporiteľňa"}},"amenity/bank|Société Générale":{tags:{amenity:"bank",brand:"Société Générale","brand:wikidata":"Q270363","brand:wikipedia":"en:Société Générale",name:"Société Générale"}},"amenity/bank|Sonali Bank":{matchNames:["sonali bank limited","sonali bank limited সোনালী ব্যাংক লিমিটেড"],tags:{amenity:"bank",brand:"Sonali Bank","brand:wikidata":"Q3350382","brand:wikipedia":"en:Sonali Bank",name:"Sonali Bank"}},"amenity/bank|South Indian Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"South Indian Bank","brand:wikidata":"Q2044973","brand:wikipedia":"en:South Indian Bank",name:"South Indian Bank"}},"amenity/bank|South State Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"South State Bank","brand:wikidata":"Q55633597","brand:wikipedia":"en:South State Bank",name:"South State Bank"}},"amenity/bank|Sparda-Bank":{tags:{amenity:"bank",brand:"Sparda-Bank","brand:wikidata":"Q2307136","brand:wikipedia":"en:Sparda-Bank",name:"Sparda-Bank"}},"amenity/bank|Stanbic Bank":{tags:{amenity:"bank",brand:"Stanbic Bank","brand:wikidata":"Q7597999","brand:wikipedia":"en:Stanbic Bank",name:"Stanbic Bank"}},"amenity/bank|Standard Bank":{tags:{amenity:"bank",brand:"Standard Bank","brand:wikidata":"Q1576610","brand:wikipedia":"en:Standard Bank",name:"Standard Bank"}},"amenity/bank|Standard Chartered":{matchNames:["standard chartered bank"],tags:{amenity:"bank",brand:"Standard Chartered","brand:wikidata":"Q548278","brand:wikipedia":"en:Standard Chartered",name:"Standard Chartered"}},"amenity/bank|State Bank of India":{tags:{amenity:"bank",brand:"State Bank of India","brand:wikidata":"Q1340361","brand:wikipedia":"en:State Bank of India",name:"State Bank of India"}},"amenity/bank|Summit Bank":{tags:{amenity:"bank",brand:"Summit Bank","brand:wikidata":"Q7637775","brand:wikipedia":"en:Summit Bank",name:"Summit Bank"}},"amenity/bank|SunTrust":{countryCodes:["us"],matchNames:["suntrust bank"],tags:{amenity:"bank",brand:"SunTrust","brand:wikidata":"Q181507","brand:wikipedia":"en:SunTrust Banks",name:"SunTrust"}},"amenity/bank|Supervielle":{countryCodes:["ar"],tags:{amenity:"bank",brand:"Supervielle","brand:wikidata":"Q5718035","brand:wikipedia":"es:Banco Supervielle",name:"Supervielle"}},"amenity/bank|Swedbank":{tags:{amenity:"bank",brand:"Swedbank","brand:wikidata":"Q1145493","brand:wikipedia":"en:Swedbank",name:"Swedbank"}},"amenity/bank|Syndicate Bank":{tags:{amenity:"bank",brand:"Syndicate Bank","brand:wikidata":"Q2004088","brand:wikipedia":"en:Syndicate Bank",name:"Syndicate Bank"}},"amenity/bank|TCF Bank":{tags:{amenity:"bank",brand:"TCF Bank","brand:wikidata":"Q7669687","brand:wikipedia":"en:TCF Bank",name:"TCF Bank"}},"amenity/bank|TD Bank":{tags:{amenity:"bank",brand:"TD Bank","brand:wikidata":"Q7669891","brand:wikipedia":"en:TD Bank, N.A.",name:"TD Bank"}},"amenity/bank|TD Canada Trust":{countryCodes:["ca"],tags:{amenity:"bank",brand:"TD Canada Trust","brand:wikidata":"Q1080670","brand:wikipedia":"en:TD Canada Trust",name:"TD Canada Trust"}},"amenity/bank|TEB":{tags:{amenity:"bank",brand:"TEB","brand:wikidata":"Q7862447","brand:wikipedia":"en:Türk Ekonomi Bankası",name:"TEB"}},"amenity/bank|TSB":{tags:{amenity:"bank",brand:"TSB","brand:wikidata":"Q7671560","brand:wikipedia":"en:TSB Bank (United Kingdom)",name:"TSB"}},"amenity/bank|Takarékszövetkezet":{tags:{amenity:"bank",brand:"Takarékszövetkezet","brand:wikidata":"Q30324674","brand:wikipedia":"en:TakarékBank",name:"Takarékszövetkezet"}},"amenity/bank|Targobank":{tags:{amenity:"bank",brand:"Targobank","brand:wikidata":"Q1455437","brand:wikipedia":"en:Targobank",name:"Targobank"}},"amenity/bank|Tatra banka":{tags:{amenity:"bank",brand:"Tatra banka","brand:wikidata":"Q1718069","brand:wikipedia":"en:Tatra banka",name:"Tatra banka"}},"amenity/bank|Türkiye İş Bankası":{tags:{amenity:"bank",brand:"Türkiye İş Bankası","brand:wikidata":"Q909613","brand:wikipedia":"en:Türkiye İş Bankası",name:"Türkiye İş Bankası"}},"amenity/bank|U.S. Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"U.S. Bank","brand:wikidata":"Q739084","brand:wikipedia":"en:U.S. Bancorp",name:"U.S. Bank"}},"amenity/bank|UBA":{tags:{amenity:"bank",brand:"UBA","brand:wikidata":"Q513457","brand:wikipedia":"en:United Bank for Africa",name:"UBA"}},"amenity/bank|UBI Banca":{tags:{amenity:"bank",brand:"UBI Banca","brand:wikidata":"Q1476162","brand:wikipedia":"en:UBI Banca",name:"UBI Banca"}},"amenity/bank|UBL":{countryCodes:["pk"],matchNames:["ubl bank"],tags:{amenity:"bank",brand:"UBL","brand:en":"United Bank Limited Pakistan","brand:wikidata":"Q7887504","brand:wikipedia":"ur:یونائیٹڈ بینک (پاکستان)",name:"UBL","name:en":"United Bank Limited Pakistan"}},"amenity/bank|UBS":{tags:{amenity:"bank",brand:"UBS","brand:wikidata":"Q193199","brand:wikipedia":"en:UBS",name:"UBS"}},"amenity/bank|UCO Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"UCO Bank","brand:wikidata":"Q2005310","brand:wikipedia":"en:UCO Bank",name:"UCO Bank"}},"amenity/bank|UCPB":{countryCodes:["ph"],tags:{amenity:"bank",brand:"UCPB","brand:wikidata":"Q7887615","brand:wikipedia":"en:United Coconut Planters Bank",name:"UCPB"}},"amenity/bank|UOB":{tags:{amenity:"bank",brand:"UOB","brand:wikidata":"Q2064074","brand:wikipedia":"en:United Overseas Bank",name:"UOB"}},"amenity/bank|Ulster Bank":{tags:{amenity:"bank",brand:"Ulster Bank","brand:wikidata":"Q2613366","brand:wikipedia":"en:Ulster Bank",name:"Ulster Bank"}},"amenity/bank|Umpqua Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Umpqua Bank","brand:wikidata":"Q7881772","brand:wikipedia":"en:Umpqua Holdings Corporation",name:"Umpqua Bank"}},"amenity/bank|UniCredit Bank":{matchNames:["unicredit","unicredit banca"],tags:{amenity:"bank",brand:"UniCredit Bank","brand:wikidata":"Q45568","brand:wikipedia":"en:UniCredit",name:"UniCredit Bank"}},"amenity/bank|Unicaja Banco":{countryCodes:["es"],tags:{amenity:"bank",brand:"Unicaja Banco","brand:wikidata":"Q2543704","brand:wikipedia":"en:Unicaja",name:"Unicaja Banco"}},"amenity/bank|Union Bank of India":{countryCodes:["in"],tags:{amenity:"bank",brand:"Union Bank of India","brand:wikidata":"Q2004078","brand:wikipedia":"en:Union Bank of India",name:"Union Bank of India"}},"amenity/bank|Union Bank~(USA)":{countryCodes:["us"],matchNames:["mufg union bank","union bank of california"],nomatch:["amenity/bank|Banco Unión","amenity/money_transfer|Express Union"],tags:{alt_name:"UnionBank",amenity:"bank",brand:"Union Bank","brand:wikidata":"Q1442804","brand:wikipedia":"en:MUFG Union Bank",name:"Union Bank"}},"amenity/bank|UnionBank~(Philippines)":{countryCodes:["ph"],matchNames:["union bank of the philippines"],nomatch:["amenity/bank|Banco Unión","amenity/money_transfer|Express Union"],tags:{amenity:"bank",brand:"UnionBank","brand:wikidata":"Q7885403","brand:wikipedia":"en:Union Bank of the Philippines",name:"UnionBank"}},"amenity/bank|United Bank":{nomatch:["amenity/fuel|United"],tags:{amenity:"bank",brand:"United Bank",name:"United Bank"}},"amenity/bank|Vakıfbank":{countryCodes:["tr"],tags:{amenity:"bank",brand:"Vakıfbank","brand:wikidata":"Q1148521","brand:wikipedia":"en:VakıfBank",name:"Vakıfbank"}},"amenity/bank|Veneto Banca":{tags:{amenity:"bank",brand:"Veneto Banca","brand:wikidata":"Q3127221","brand:wikipedia":"en:Veneto Banca",name:"Veneto Banca"}},"amenity/bank|Vijaya Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"Vijaya Bank","brand:wikidata":"Q2003171","brand:wikipedia":"en:Vijaya Bank",name:"Vijaya Bank"}},"amenity/bank|Volksbank":{tags:{amenity:"bank",brand:"Volksbank","brand:wikidata":"Q695110","brand:wikipedia":"en:Volksbank",name:"Volksbank"}},"amenity/bank|Volksbank Köln Bonn eG":{tags:{amenity:"bank",brand:"Volksbank Köln Bonn eG","brand:wikidata":"Q41680844","brand:wikipedia":"de:Volksbank Köln Bonn",name:"Volksbank",official_name:"Volksbank Köln Bonn eG"}},"amenity/bank|VÚB":{tags:{amenity:"bank",brand:"VÚB","brand:wikidata":"Q12778981","brand:wikipedia":"en:Všeobecná úverová banka",name:"VÚB"}},"amenity/bank|Washington Federal":{countryCodes:["us"],tags:{amenity:"bank",brand:"Washington Federal","brand:wikidata":"Q7971859","brand:wikipedia":"en:Washington Federal",name:"Washington Federal"}},"amenity/bank|Wells Fargo":{matchNames:["wells fargo bank"],tags:{amenity:"bank",brand:"Wells Fargo","brand:wikidata":"Q744149","brand:wikipedia":"en:Wells Fargo",name:"Wells Fargo"}},"amenity/bank|Western Union":{nomatch:["amenity/money_transfer|Western Union"],tags:{amenity:"bank",brand:"Western Union","brand:wikidata":"Q861042","brand:wikipedia":"en:Western Union",name:"Western Union"}},"amenity/bank|Westpac":{tags:{amenity:"bank",brand:"Westpac","brand:wikidata":"Q2031726","brand:wikipedia":"en:Westpac",name:"Westpac"}},"amenity/bank|Yapı Kredi":{countryCodes:["tr"],tags:{amenity:"bank",brand:"Yapı Kredi","brand:wikidata":"Q8049138","brand:wikipedia":"en:Yapı ve Kredi Bankası",name:"Yapı Kredi"}},"amenity/bank|Yorkshire Bank":{countryCodes:["gb"],tags:{amenity:"bank",brand:"Yorkshire Bank","brand:wikidata":"Q8055678","brand:wikipedia":"en:Yorkshire Bank",name:"Yorkshire Bank"}},"amenity/bank|Yorkshire Building Society":{tags:{amenity:"bank",brand:"Yorkshire Building Society","brand:wikidata":"Q12073381","brand:wikipedia":"en:Yorkshire Building Society",name:"Yorkshire Building Society"}},"amenity/bank|Zagrebačka banka":{countryCodes:["hr"],tags:{amenity:"bank",brand:"Zagrebačka banka","brand:wikidata":"Q140381","brand:wikipedia":"en:Zagrebačka banka",name:"Zagrebačka banka"}},"amenity/bank|Zenith Bank":{tags:{amenity:"bank",brand:"Zenith Bank","brand:wikidata":"Q5978240","brand:wikipedia":"en:Zenith Bank",name:"Zenith Bank"}},"amenity/bank|Ziraat Bankası":{tags:{amenity:"bank",brand:"Ziraat Bankası","brand:wikidata":"Q696003","brand:wikipedia":"en:Ziraat Bankası",name:"Ziraat Bankası"}},"amenity/bank|mBank":{tags:{amenity:"bank",brand:"mBank","brand:wikidata":"Q1160928","brand:wikipedia":"en:MBank",name:"mBank"}},"amenity/bank|ČSOB":{tags:{amenity:"bank",brand:"ČSOB","brand:wikidata":"Q340135","brand:wikipedia":"en:Československá obchodní banka",name:"ČSOB"}},"amenity/bank|Česká spořitelna":{countryCodes:["cz"],tags:{amenity:"bank",brand:"Česká spořitelna","brand:wikidata":"Q341100","brand:wikipedia":"en:Česká spořitelna",name:"Česká spořitelna"}},"amenity/bank|İş Bankası":{countryCodes:["tr"],tags:{amenity:"bank",brand:"İş Bankası","brand:wikidata":"Q909613","brand:wikipedia":"en:Türkiye İş Bankası",name:"İş Bankası"}},"amenity/bank|Εθνική Τράπεζα":{countryCodes:["gr"],tags:{amenity:"bank",brand:"Εθνική Τράπεζα","brand:el":"Εθνική Τράπεζα","brand:en":"National Bank of Greece","brand:wikidata":"Q1816028","brand:wikipedia":"en:National Bank of Greece",name:"Εθνική Τράπεζα","name:el":"Εθνική Τράπεζα","name:en":"National Bank of Greece"}},"amenity/bank|Πειραιώς":{tags:{amenity:"bank",brand:"Πειραιώς",name:"Πειραιώς"}},"amenity/bank|Τράπεζα Πειραιώς":{countryCodes:["gr"],tags:{amenity:"bank",brand:"Τράπεζα Πειραιώς","brand:el":"Τράπεζα Πειραιώς","brand:en":"Piraeus Bank","brand:wikidata":"Q3312","brand:wikipedia":"en:Piraeus Bank",name:"Τράπεζα Πειραιώς","name:el":"Τράπεζα Πειραιώς","name:en":"Piraeus Bank"}},"amenity/bank|А-Банк":{tags:{amenity:"bank",brand:"А-Банк",name:"А-Банк"}},"amenity/bank|Авангард":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Авангард","brand:wikidata":"Q62122617",name:"Авангард"}},"amenity/bank|Альфа-Банк":{tags:{amenity:"bank",brand:"Альфа-Банк","brand:en":"Alfa-Bank","brand:ru":"Альфа-Банк","brand:wikidata":"Q1377835","brand:wikipedia":"ru:Альфа-банк",name:"Альфа-Банк","name:en":"Alfa-Bank","name:ru":"Альфа-Банк"}},"amenity/bank|БПС-Сбербанк":{tags:{amenity:"bank",brand:"БПС-Сбербанк",name:"БПС-Сбербанк"}},"amenity/bank|Банк Дабрабыт":{tags:{amenity:"bank",brand:"Банк Дабрабыт",name:"Банк Дабрабыт"}},"amenity/bank|Банка ДСК":{countryCodes:["bg"],tags:{amenity:"bank",brand:"Банка ДСК","brand:bg":"Банка ДСК","brand:en":"DSK Bank","brand:wikidata":"Q5206146","brand:wikipedia":"en:DSK Bank",name:"Банка ДСК","name:bg":"Банка ДСК","name:en":"DSK Bank"}},"amenity/bank|Белагропромбанк":{countryCodes:["by"],tags:{amenity:"bank",brand:"Белагропромбанк","brand:en":"Belagroprom Bank","brand:wikidata":"Q1991373","brand:wikipedia":"be:Белаграпрамбанк",name:"Белагропромбанк","name:en":"Belagroprom Bank"}},"amenity/bank|Беларусбанк":{tags:{amenity:"bank",brand:"Беларусбанк","brand:en":"Belarusbank","brand:wikidata":"Q1997334","brand:wikipedia":"en:Belarusbank",name:"Беларусбанк","name:en":"Belarusbank"}},"amenity/bank|Белинвестбанк":{countryCodes:["by"],tags:{amenity:"bank",brand:"Белинвестбанк","brand:wikidata":"Q4081940","brand:wikipedia":"ru:Белинвестбанк",name:"Белинвестбанк"}},"amenity/bank|Бинбанк":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Бинбанк","brand:en":"B&N Bank","brand:wikidata":"Q4086829","brand:wikipedia":"en:B&N Bank",name:"Бинбанк","name:en":"B&N Bank"}},"amenity/bank|ВТБ":{matchNames:["втб банк москвы"],tags:{amenity:"bank",brand:"ВТБ","brand:en":"VTB Bank","brand:wikidata":"Q1549389","brand:wikipedia":"en:VTB Bank",name:"ВТБ","name:en":"VTB Bank"}},"amenity/bank|Возрождение":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Возрождение","brand:wikidata":"Q4114952","brand:wikipedia":"ru:Возрождение (банк)",name:"Возрождение"}},"amenity/bank|Газпромбанк":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Газпромбанк","brand:en":"Gazprombank","brand:wikidata":"Q1924338","brand:wikipedia":"en:Gazprombank",name:"Газпромбанк","name:en":"Gazprombank"}},"amenity/bank|Генбанк":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Генбанк","brand:wikidata":"Q62122630",name:"Генбанк"}},"amenity/bank|Казкоммерцбанк":{countryCodes:["kz"],tags:{amenity:"bank",brand:"Казкоммерцбанк","brand:en":"Kazkommertsbank","brand:wikidata":"Q1168179","brand:wikipedia":"en:Kazkommertsbank",name:"Казкоммерцбанк","name:en":"Kazkommertsbank"}},"amenity/bank|Московский индустриальный банк":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Московский индустриальный банк","brand:en":"Moscow Industrial Bank","brand:wikidata":"Q4304145","brand:wikipedia":"ru:Московский индустриальный банк",name:"Московский индустриальный банк","name:en":"Moscow Industrial Bank"}},"amenity/bank|Мособлбанк":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Мособлбанк","brand:en":"Mosobl Bank","brand:wikidata":"Q4304446","brand:wikipedia":"ru:Мособлбанк",name:"Мособлбанк","name:en":"Mosobl Bank"}},"amenity/bank|Народный банк":{countryCodes:["kg","kz","uz"],tags:{amenity:"bank",brand:"Народный банк","brand:wikidata":"Q1046186","brand:wikipedia":"kk:Қазақстан Халық банкі",name:"Народный банк"}},"amenity/bank|ОТП Банк":{tags:{amenity:"bank",brand:"ОТП Банк","brand:en":"OTP Bank","brand:wikidata":"Q912778","brand:wikipedia":"en:OTP Bank",name:"ОТП Банк","name:en":"OTP Bank"}},"amenity/bank|Обединена Българска Банка":{countryCodes:["bg"],tags:{amenity:"bank",brand:"Обединена Българска Банка","brand:en":"United Bulgarian Bank","brand:wikidata":"Q7887555","brand:wikipedia":"en:United Bulgarian Bank",name:"Обединена Българска Банка","name:en":"United Bulgarian Bank"}},"amenity/bank|Открытие":{countryCodes:["ru"],matchNames:["банк открытие"],tags:{amenity:"bank",brand:"Открытие","brand:wikidata":"Q4327204","brand:wikipedia":"ru:Банк «Финансовая корпорация Открытие»",name:"Открытие"}},"amenity/bank|Ощадбанк":{countryCodes:["ua"],tags:{amenity:"bank",brand:"Ощадбанк","brand:en":"State Savings Bank of Ukraine","brand:wikidata":"Q4340839","brand:wikipedia":"uk:Ощадбанк",name:"Ощадбанк","name:en":"State Savings Bank of Ukraine"}},"amenity/bank|ПУМБ":{countryCodes:["ua"],tags:{amenity:"bank",brand:"ПУМБ","brand:en":"First Ukrainian International Bank","brand:wikidata":"Q4341156","brand:wikipedia":"en:First Ukrainian International Bank",name:"ПУМБ","name:en":"First Ukrainian International Bank"}},"amenity/bank|Почта Банк":{tags:{amenity:"bank",brand:"Почта Банк","brand:en":"Post Bank","brand:wikidata":"Q24930461","brand:wikipedia":"en:Post Bank (Russia)",name:"Почта Банк","name:en":"Post Bank"}},"amenity/bank|Пощенска банка":{tags:{amenity:"bank",brand:"Пощенска банка",name:"Пощенска банка"}},"amenity/bank|ПриватБанк":{tags:{amenity:"bank",brand:"ПриватБанк","brand:en":"PrivatBank","brand:wikidata":"Q1515015","brand:wikipedia":"uk:ПриватБанк",name:"ПриватБанк","name:en":"PrivatBank"}},"amenity/bank|Приорбанк":{countryCodes:["by"],tags:{amenity:"bank",brand:"Приорбанк","brand:en":"PriorBank","brand:wikidata":"Q3919658","brand:wikipedia":"be:Пріорбанк",name:"Приорбанк","name:en":"PriorBank"}},"amenity/bank|Промсвязьбанк":{tags:{amenity:"bank",brand:"Промсвязьбанк","brand:en":"Promsvyazbank","brand:wikidata":"Q649100","brand:wikipedia":"en:Promsvyazbank",name:"Промсвязьбанк","name:en":"Promsvyazbank"}},"amenity/bank|РНКБ":{tags:{amenity:"bank",brand:"РНКБ","brand:wikidata":"Q16912944","brand:wikipedia":"en:Russian National Commercial Bank",name:"РНКБ"}},"amenity/bank|Райффайзен":{countryCodes:["ru","ua"],tags:{amenity:"bank",brand:"Райффайзен","brand:en":"Raiffeisenbank","brand:wikidata":"Q4389244","brand:wikipedia":"en:Raiffeisenbank (Russia)",name:"Райффайзен","name:en":"Raiffeisenbank"}},"amenity/bank|Райффайзен Банк Аваль":{countryCodes:["ua"],tags:{amenity:"bank",brand:"Райффайзен Банк Аваль","brand:en":"Raiffeisen Bank Aval","brand:wikidata":"Q4389243","brand:wikipedia":"en:Raiffeisen Bank Aval",name:"Райффайзен Банк Аваль","name:en":"Raiffeisen Bank Aval"}},"amenity/bank|Росбанк":{tags:{amenity:"bank",brand:"Росбанк","brand:en":"Rosbank","brand:wikidata":"Q1119857","brand:wikipedia":"en:Rosbank",name:"Росбанк","name:en":"Rosbank"}},"amenity/bank|Россельхозбанк":{tags:{amenity:"bank",brand:"Россельхозбанк","brand:en":"Rosselkhozbank","brand:wikidata":"Q3920226","brand:wikipedia":"en:Russian Agricultural Bank",name:"Россельхозбанк","name:en":"Rosselkhozbank"}},"amenity/bank|Русский Стандарт":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Русский Стандарт","brand:en":"Russian Standard Bank","brand:wikidata":"Q4400854","brand:wikipedia":"en:Russian Standard Bank",name:"Русский Стандарт","name:en":"Russian Standard Bank"}},"amenity/bank|Сбербанк":{matchNames:["приднестровский сбербанк","сбербанк россии"],tags:{amenity:"bank",brand:"Сбербанк","brand:en":"Prisbank","brand:wikidata":"Q4378147","brand:wikipedia":"ru:Приднестровский Сбербанк",name:"Сбербанк","name:en":"Prisbank"}},"amenity/bank|Совкомбанк":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Совкомбанк","brand:en":"Sovcom Bank","brand:wikidata":"Q4426566","brand:wikipedia":"ru:Совкомбанк",name:"Совкомбанк","name:en":"Sovcom Bank"}},"amenity/bank|УкрСиббанк":{countryCodes:["ua"],tags:{amenity:"bank",brand:"УкрСиббанк","brand:en":"UkrSibbank","brand:wikidata":"Q1976290","brand:wikipedia":"en:UkrSibbank",name:"УкрСиббанк","name:en":"UkrSibbank"}},"amenity/bank|Укргазбанк":{tags:{amenity:"bank",brand:"Укргазбанк","brand:en":"Ukrgasbank","brand:wikidata":"Q4470692","brand:wikipedia":"ru:Укргазбанк",name:"Укргазбанк","name:en":"Ukrgasbank"}},"amenity/bank|Укрсоцбанк":{countryCodes:["ua"],tags:{amenity:"bank",brand:"Укрсоцбанк","brand:en":"Ukrsotsbank","brand:wikidata":"Q3547885","brand:wikipedia":"en:Ukrsotsbank",name:"Укрсоцбанк","name:en":"Ukrsotsbank"}},"amenity/bank|Уралсиб":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Уралсиб","brand:en":"Uralsib bank","brand:wikidata":"Q4476693","brand:wikipedia":"ru:Уралсиб (банк)",name:"Уралсиб","name:en":"Uralsib bank"}},"amenity/bank|Хаан банк":{countryCodes:["mn"],tags:{amenity:"bank",brand:"Хаан банк","brand:wikidata":"Q25632240","brand:wikipedia":"mn:ХААН банк",name:"Хаан банк"}},"amenity/bank|Хоум Кредит":{tags:{amenity:"bank",brand:"Хоум Кредит","brand:en":"Home Credit & Finance Bank","brand:wikidata":"Q4500466","brand:wikipedia":"en:Home Credit & Finance Bank",name:"Хоум Кредит","name:en":"Home Credit & Finance Bank"}},"amenity/bank|בנק הפועלים":{countryCodes:["il"],tags:{amenity:"bank",brand:"בנק הפועלים","brand:en":"Bank Hapoalim","brand:he":"בנק הפועלים","brand:wikidata":"Q2666775","brand:wikipedia":"en:Bank Hapoalim",name:"בנק הפועלים","name:en":"Bank Hapoalim","name:he":"בנק הפועלים"}},"amenity/bank|בנק לאומי":{countryCodes:["il"],tags:{amenity:"bank",brand:"בנק לאומי","brand:en":"Bank Leumi","brand:he":"בנק לאומי","brand:wikidata":"Q806641","brand:wikipedia":"en:Bank Leumi",name:"בנק לאומי","name:en":"Bank Leumi","name:he":"בנק לאומי"}},"amenity/bank|بانک آینده":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک آینده","brand:en":"Ayandeh Bank","brand:wikidata":"Q5938144","brand:wikipedia":"en:Ayandeh Bank",name:"بانک آینده","name:en":"Ayandeh Bank"}},"amenity/bank|بانک اقتصاد نوین":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک اقتصاد نوین","brand:en":"EN Bank","brand:wikidata":"Q5323768","brand:wikipedia":"en:EN Bank",name:"بانک اقتصاد نوین","name:en":"EN Bank"}},"amenity/bank|بانک انصار":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک انصار","brand:wikidata":"Q5862675","brand:wikipedia":"fa:بانک انصار",name:"بانک انصار"}},"amenity/bank|بانک ایران زمین":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک ایران زمین","brand:wikidata":"Q5934423","brand:wikipedia":"en:Iran Zamin Bank",name:"بانک ایران زمین"}},"amenity/bank|بانک تجارت":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک تجارت","brand:wikidata":"Q7695198","brand:wikipedia":"en:Tejarat Bank",name:"بانک تجارت"}},"amenity/bank|بانک توسعه تعاون":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک توسعه تعاون","brand:wikidata":"Q5684450","brand:wikipedia":"fa:بانک توسعه تعاون",name:"بانک توسعه تعاون"}},"amenity/bank|بانک رفاه":{countryCodes:["ir"],matchNames:["بانک رفاه کارگران"],tags:{amenity:"bank",brand:"بانک رفاه","brand:en":"Refah Bank","brand:wikidata":"Q7307083","brand:wikipedia":"en:Refah Bank",name:"بانک رفاه","name:en":"Refah Bank"}},"amenity/bank|بانک سامان":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک سامان","brand:en":"Saman Bank","brand:wikidata":"Q4117676","brand:wikipedia":"en:Saman Bank",name:"بانک سامان","name:en":"Saman Bank"}},"amenity/bank|بانک سرمایه":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک سرمایه","brand:en":"Sarmayeh Bank","brand:wikidata":"Q7424291","brand:wikipedia":"en:Sarmayeh Bank",name:"بانک سرمایه","name:en":"Sarmayeh Bank"}},"amenity/bank|بانک سپه":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک سپه","brand:en":"Bank Sepah","brand:wikidata":"Q2882624","brand:wikipedia":"en:Bank Sepah",name:"بانک سپه","name:en":"Bank Sepah"}},"amenity/bank|بانک سینا":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک سینا","brand:en":"Sina Bank","brand:wikidata":"Q10860246","brand:wikipedia":"en:Sina Bank",name:"بانک سینا","name:en":"Sina Bank"}},"amenity/bank|بانک شهر":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک شهر","brand:en":"Shahr Bank","brand:wikidata":"Q5941033","brand:wikipedia":"fa:بانک شهر",name:"بانک شهر","name:en":"Shahr Bank"}},"amenity/bank|بانک صادرات":{matchNames:["بانک صادرات ایران","صادرات"],tags:{amenity:"bank",brand:"بانک صادرات","brand:en":"Bank Saderat Iran","brand:wikidata":"Q2882608","brand:wikipedia":"en:Bank Saderat Iran",name:"بانک صادرات","name:en":"Bank Saderat Iran"}},"amenity/bank|بانک قوامین":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک قوامین","brand:en":"Ghavamin Bank","brand:wikidata":"Q10860253","brand:wikipedia":"en:Ghavamin Bank",name:"بانک قوامین","name:en":"Ghavamin Bank"}},"amenity/bank|بانک مسکن":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک مسکن","brand:en":"Bank Maskan","brand:wikidata":"Q4855942","brand:wikipedia":"en:Bank Maskan",name:"بانک مسکن","name:en":"Bank Maskan"}},"amenity/bank|بانک ملت":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک ملت","brand:en":"Bank Mellat","brand:wikidata":"Q4855944","brand:wikipedia":"en:Bank Mellat",name:"بانک ملت","name:en":"Bank Mellat"}},"amenity/bank|بانک ملی":{countryCodes:["ir"],matchNames:["بانک ملی ایران","ملی"],tags:{amenity:"bank",brand:"بانک ملی","brand:en":"Bank Melli Iran","brand:wikidata":"Q806640","brand:wikipedia":"en:Bank Melli Iran",name:"بانک ملی","name:en":"Bank Melli Iran"}},"amenity/bank|بانک مهر اقتصاد":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک مهر اقتصاد","brand:wikidata":"Q5942921","brand:wikipedia":"fa:بانک مهر اقتصاد",name:"بانک مهر اقتصاد","name:en":"Mehr Eqtesad Bank"}},"amenity/bank|بانک پارسیان":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک پارسیان","brand:en":"Parsian Bank","brand:wikidata":"Q2410404","brand:wikipedia":"en:Parsian Bank",name:"بانک پارسیان","name:en":"Parsian Bank"}},"amenity/bank|بانک پاسارگاد":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک پاسارگاد","brand:en":"Bank Pasargad","brand:wikidata":"Q4855962","brand:wikipedia":"en:Bank Pasargad",name:"بانک پاسارگاد","name:en":"Bank Pasargad"}},"amenity/bank|بانک کشاورزی":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک کشاورزی","brand:en":"Bank Keshavarzi Iran","brand:wikidata":"Q6395007","brand:wikipedia":"en:Bank Keshavarzi Iran",name:"بانک کشاورزی","name:en":"Bank Keshavarzi Iran"}},"amenity/bank|پست بانک":{countryCodes:["ir"],tags:{amenity:"bank",brand:"پست بانک","brand:en":"Post Bank of Iran","brand:wikidata":"Q7233625","brand:wikipedia":"en:Post Bank of Iran",name:"پست بانک","name:en":"Post Bank of Iran"}},"amenity/bank|ธนาคารกรุงเทพ":{countryCodes:["th"],tags:{amenity:"bank",brand:"ธนาคารกรุงเทพ","brand:en":"Bangkok Bank","brand:th":"ธนาคารกรุงเทพ","brand:wikidata":"Q806483","brand:wikipedia":"en:Bangkok Bank",name:"ธนาคารกรุงเทพ","name:en":"Bangkok Bank","name:th":"ธนาคารกรุงเทพ"}},"amenity/bank|ธนาคารกรุงไทย":{countryCodes:["th"],tags:{amenity:"bank",brand:"ธนาคารกรุงไทย","brand:en":"Krung Thai Bank","brand:th":"ธนาคารกรุงไทย","brand:wikidata":"Q962865","brand:wikipedia":"en:Krung Thai Bank",name:"ธนาคารกรุงไทย","name:en":"Krung Thai Bank","name:th":"ธนาคารกรุงไทย"}},"amenity/bank|ธนาคารกสิกรไทย":{countryCodes:["th"],tags:{amenity:"bank",brand:"ธนาคารกสิกรไทย","brand:en":"en:Kasikornbank","brand:th":"ธนาคารกสิกรไทย","brand:wikidata":"Q276557","brand:wikipedia":"en:Kasikornbank",name:"ธนาคารกสิกรไทย","name:en":"en:Kasikornbank","name:th":"ธนาคารกสิกรไทย"}},"amenity/bank|ธนาคารออมสิน":{countryCodes:["th"],tags:{amenity:"bank",brand:"ธนาคารออมสิน","brand:en":"Government Savings Bank","brand:th":"ธนาคารออมสิน","brand:wikidata":"Q6579041","brand:wikipedia":"en:Government Savings Bank (Thailand)",name:"ธนาคารออมสิน","name:en":"Government Savings Bank","name:th":"ธนาคารออมสิน"}},"amenity/bank|ธนาคารไทยพาณิชย์":{countryCodes:["th"],tags:{amenity:"bank",brand:"ธนาคารไทยพาณิชย์","brand:en":"Siam Commercial Bank","brand:th":"ธนาคารไทยพาณิชย์","brand:wikidata":"Q2038986","brand:wikipedia":"en:Siam Commercial Bank",name:"ธนาคารไทยพาณิชย์","name:en":"Siam Commercial Bank","name:th":"ธนาคารไทยพาณิชย์"}},"amenity/bank|みずほ銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"みずほ銀行","brand:en":"Mizuho Bank","brand:ja":"みずほ銀行","brand:wikidata":"Q2882956","brand:wikipedia":"en:Mizuho Bank",name:"みずほ銀行","name:en":"Mizuho Bank","name:ja":"みずほ銀行"}},"amenity/bank|ゆうちょ銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"ゆうちょ銀行","brand:en":"Japan Post Bank","brand:ja":"ゆうちょ銀行","brand:wikidata":"Q907103","brand:wikipedia":"ja:ゆうちょ銀行",name:"ゆうちょ銀行","name:en":"Japan Post Bank","name:ja":"ゆうちょ銀行"}},"amenity/bank|りそな銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"りそな銀行","brand:en":"Resona Bank","brand:ja":"りそな銀行","brand:wikidata":"Q11281447","brand:wikipedia":"ja:りそな銀行",name:"りそな銀行","name:en":"Resona Bank","name:ja":"りそな銀行"}},"amenity/bank|三井住友銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"三井住友銀行","brand:en":"Sumitomo Mitsui Banking Corporation","brand:wikidata":"Q2660418","brand:wikipedia":"en:Sumitomo Mitsui Banking Corporation",name:"三井住友銀行","name:en":"Sumitomo Mitsui Banking Corporation"}},"amenity/bank|三菱東京UFJ銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"三菱東京UFJ銀行","brand:en":"MUFG Bank","brand:wikidata":"Q988284","brand:wikipedia":"en:MUFG Bank",name:"三菱東京UFJ銀行","name:en":"MUFG Bank"}},"amenity/bank|上海商業儲蓄銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"上海商業儲蓄銀行","brand:en":"Shanghai Commercial and Savings Bank","brand:wikidata":"Q4207208","brand:wikipedia":"en:Shanghai Commercial and Savings Bank",name:"上海商業儲蓄銀行","name:en":"Shanghai Commercial and Savings Bank"}},"amenity/bank|中信银行":{countryCodes:["cn"],tags:{amenity:"bank",brand:"中信银行","brand:en":"China CITIC Bank","brand:wikidata":"Q38960","brand:wikipedia":"en:China CITIC Bank",name:"中信银行"}},"amenity/bank|中国农业银行":{tags:{amenity:"bank",brand:"中国农业银行","brand:en":"Agricultural Bank of China","brand:wikidata":"Q26298","brand:wikipedia":"en:Agricultural Bank of China",name:"中国农业银行","name:en":"Agricultural Bank of China"}},"amenity/bank|中国工商银行":{tags:{amenity:"bank",brand:"中国工商银行","brand:en":"Industrial and Commercial Bank of China","brand:wikidata":"Q26463","brand:wikipedia":"en:Industrial and Commercial Bank of China",name:"中国工商银行","name:en":"Industrial and Commercial Bank of China"}},"amenity/bank|中国建设银行":{countryCodes:["cn"],tags:{amenity:"bank",brand:"中国建设银行","brand:en":"China Construction Bank","brand:wikidata":"Q26299","brand:wikipedia":"en:China Construction Bank",name:"中国建设银行","name:en":"China Construction Bank"}},"amenity/bank|中国邮政储蓄银行":{tags:{amenity:"bank",brand:"中国邮政储蓄银行","brand:en":"Postal Savings Bank of China","brand:wikidata":"Q986744","brand:wikipedia":"en:Postal Savings Bank of China",name:"中国邮政储蓄银行","name:en":"Postal Savings Bank of China"}},"amenity/bank|中国银行":{tags:{amenity:"bank",brand:"中国银行","brand:en":"Bank of China","brand:wikidata":"Q790068","brand:wikipedia":"en:Bank of China",name:"中国银行","name:en":"Bank of China"}},"amenity/bank|中國信託商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"中國信託商業銀行","brand:en":"CTBC Bank","brand:wikidata":"Q5100191","brand:wikipedia":"en:CTBC Bank",name:"中國信託商業銀行","name:en":"CTBC Bank"}},"amenity/bank|交通银行":{countryCodes:["cn"],tags:{amenity:"bank",brand:"交通银行","brand:en":"Bank of Communications","brand:wikidata":"Q806680","brand:wikipedia":"en:Bank of Communications",name:"交通银行","name:en":"Bank of Communications"}},"amenity/bank|京城商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"京城商業銀行","brand:wikidata":"Q10883132","brand:wikipedia":"zh:京城商業銀行",name:"京城商業銀行"}},"amenity/bank|京都中央信用金庫":{countryCodes:["jp"],tags:{amenity:"bank",brand:"京都中央信用金庫","brand:en":"Kyoto Chuo Shinkin Bank","brand:wikidata":"Q11374844","brand:wikipedia":"jp:京都中央信用金庫",name:"京都中央信用金庫","name:en":"Kyoto Chuo Shinkin Bank"}},"amenity/bank|京都銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"京都銀行","brand:en":"Bank of Kyoto","brand:wikidata":"Q11375713","brand:wikipedia":"en:Bank of Kyoto",name:"京都銀行","name:en":"Bank of Kyoto"}},"amenity/bank|元大商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"元大商業銀行","brand:en":"Yuanta Commercial Bank","brand:wikidata":"Q10889602","brand:wikipedia":"zh:元大商業銀行",name:"元大商業銀行","name:en":"Yuanta Commercial Bank"}},"amenity/bank|兆豐國際商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"兆豐國際商業銀行","brand:en":"Mega International Commercial Bank","brand:wikidata":"Q709757","brand:wikipedia":"en:Mega International Commercial Bank",name:"兆豐國際商業銀行","name:en":"Mega International Commercial Bank"}},"amenity/bank|农业银行":{tags:{amenity:"bank",brand:"农业银行","brand:wikidata":"Q26298","brand:wikipedia":"zh:中国农业银行",name:"农业银行"}},"amenity/bank|北洋銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"北洋銀行","brand:en":"North Pacific Bank","brand:wikidata":"Q11402354","brand:wikipedia":"ja:北洋銀行",name:"北洋銀行","name:en":"North Pacific Bank"}},"amenity/bank|北海道銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"北海道銀行","brand:en":"Hokkaido Bank","brand:wikidata":"Q5878076","brand:wikipedia":"en:Hokkaido Bank",name:"北海道銀行","name:en":"Hokkaido Bank"}},"amenity/bank|台中商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"台中商業銀行","brand:en":"Taichung Bank","brand:wikidata":"Q6136958","brand:wikipedia":"en:Taichung Bank",name:"台中商業銀行","name:en":"Taichung Bank"}},"amenity/bank|台北富邦商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"台北富邦商業銀行","brand:en":"Taipei Fubon Bank","brand:wikidata":"Q697293","brand:wikipedia":"en:Taipei Fubon Bank",name:"台北富邦商業銀行","name:en":"Taipei Fubon Bank"}},"amenity/bank|台新國際商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"台新國際商業銀行","brand:en":"Taishin International Bank","brand:wikidata":"Q7676420","brand:wikipedia":"en:Taishin International Bank",name:"台新國際商業銀行","name:en":"Taishin International Bank"}},"amenity/bank|合作金庫商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"合作金庫商業銀行","brand:en":"Taiwan Cooperative Bank","brand:wikidata":"Q701540","brand:wikipedia":"en:Taiwan Cooperative Bank",name:"合作金庫商業銀行","name:en":"Taiwan Cooperative Bank"}},"amenity/bank|國泰世華商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"國泰世華商業銀行","brand:en":"Cathay United Bank","brand:wikidata":"Q702656","brand:wikipedia":"en:Cathay United Bank",name:"國泰世華商業銀行","name:en":"Cathay United Bank"}},"amenity/bank|大眾商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"大眾商業銀行","brand:en":"Ta Chong Commercial Bank","brand:wikidata":"Q10937047","brand:wikipedia":"zh:大眾商業銀行",name:"大眾商業銀行","name:en":"Ta Chong Commercial Bank"}},"amenity/bank|安泰商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"安泰商業銀行","brand:en":"Entie Commercial Bank","brand:wikidata":"Q10946952","brand:wikipedia":"zh:安泰商業銀行",name:"安泰商業銀行","name:en":"Entie Commercial Bank"}},"amenity/bank|工商银行":{countryCodes:["cn"],tags:{amenity:"bank",brand:"工商银行","brand:en":"Industrial and Commercial Bank of China","brand:wikidata":"Q26463","brand:wikipedia":"en:Industrial and Commercial Bank of China",name:"工商银行","name:en":"Industrial and Commercial Bank of China"}},"amenity/bank|常陽銀行":{tags:{amenity:"bank",brand:"常陽銀行",name:"常陽銀行"}},"amenity/bank|建设银行":{countryCodes:["cn"],tags:{amenity:"bank",brand:"建设银行","brand:wikidata":"Q26299","brand:wikipedia":"zh:中国建设银行",name:"建设银行"}},"amenity/bank|彰化商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"彰化商業銀行","brand:en":"Chang Hwa Bank","brand:wikidata":"Q5071627","brand:wikipedia":"en:Chang Hwa Bank",name:"彰化商業銀行","name:en":"Chang Hwa Bank"}},"amenity/bank|招商银行":{countryCodes:["cn"],tags:{amenity:"bank",brand:"招商银行","brand:en":"China Merchants Bank","brand:wikidata":"Q1073327","brand:wikipedia":"en:China Merchants Bank",name:"招商银行","name:en":"China Merchants Bank"}},"amenity/bank|日本銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"日本銀行","brand:en":"Bank of Japan","brand:wikidata":"Q333101","brand:wikipedia":"ja:日本銀行",name:"日本銀行","name:en":"Bank of Japan"}},"amenity/bank|板信商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"板信商業銀行","brand:en":"Bank of Panshin","brand:wikidata":"Q11104946","brand:wikipedia":"zh:板信商業銀行",name:"板信商業銀行","name:en":"Bank of Panshin"}},"amenity/bank|横浜銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"横浜銀行","brand:en":"Bank of Yokohama","brand:wikidata":"Q2744340","brand:wikipedia":"en:Bank of Yokohama",name:"横浜銀行","name:en":"Bank of Yokohama"}},"amenity/bank|永豐商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"永豐商業銀行","brand:en":"Bank SinoPac","brand:wikidata":"Q4855976","brand:wikipedia":"en:Bank SinoPac",name:"永豐商業銀行","name:en":"Bank SinoPac"}},"amenity/bank|渣打國際商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"渣打國際商業銀行","brand:wikidata":"Q62267023",name:"渣打國際商業銀行"}},"amenity/bank|玉山商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"玉山商業銀行","brand:en":"E.SUN Commercial Bank","brand:wikidata":"Q5321663","brand:wikipedia":"en:E.SUN Commercial Bank",name:"玉山商業銀行","name:en":"E.SUN Commercial Bank"}},"amenity/bank|第一商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"第一商業銀行","brand:en":"First Commercial Bank","brand:wikidata":"Q11602128","brand:wikipedia":"zh:第一商業銀行",name:"第一商業銀行","name:en":"First Commercial Bank"}},"amenity/bank|聯邦商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"聯邦商業銀行","brand:en":"Union Bank of Taiwan","brand:wikidata":"Q15927195","brand:wikipedia":"zh:聯邦商業銀行",name:"聯邦商業銀行","name:en":"Union Bank of Taiwan"}},"amenity/bank|臺灣中小企業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"臺灣中小企業銀行","brand:en":"Taiwan Business Bank","brand:wikidata":"Q15913812","brand:wikipedia":"zh:臺灣中小企業銀行",name:"臺灣中小企業銀行","name:en":"Taiwan Business Bank"}},"amenity/bank|臺灣土地銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"臺灣土地銀行","brand:en":"Land Bank of Taiwan","brand:wikidata":"Q717592","brand:wikipedia":"en:Land Bank of Taiwan",name:"臺灣土地銀行","name:en":"Land Bank of Taiwan"}},"amenity/bank|臺灣新光商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"臺灣新光商業銀行","brand:en":"Shin Kong Commercial Bank","brand:wikidata":"Q15909616","brand:wikipedia":"zh:臺灣新光商業銀行",name:"臺灣新光商業銀行","name:en":"Shin Kong Commercial Bank"}},"amenity/bank|臺灣銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"臺灣銀行","brand:en":"Bank of Taiwan","brand:wikidata":"Q706533","brand:wikipedia":"en:Bank of Taiwan",name:"臺灣銀行","name:en":"Bank of Taiwan"}},"amenity/bank|華南商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"華南商業銀行","brand:en":"Hua Nan Commercial Bank","brand:wikidata":"Q11620043","brand:wikipedia":"zh:華南銀行",name:"華南商業銀行","name:en":"Hua Nan Commercial Bank"}},"amenity/bank|遠東國際商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"遠東國際商業銀行","brand:en":"Far Eastern International Bank","brand:wikidata":"Q15911143","brand:wikipedia":"zh:遠東國際商業銀行",name:"遠東國際商業銀行","name:en":"Far Eastern International Bank"}},"amenity/bank|陽信商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"陽信商業銀行","brand:en":"Sunny Commercial Bank","brand:wikidata":"Q11658759","brand:wikipedia":"zh:陽信商業銀行",name:"陽信商業銀行","name:en":"Sunny Commercial Bank"}},"amenity/bank|静岡銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"静岡銀行","brand:en":"Shizuoka Bank","brand:wikidata":"Q7499501","brand:wikipedia":"en:Shizuoka Bank",name:"静岡銀行","name:en":"Shizuoka Bank"}},"amenity/bank|국민은행":{countryCodes:["kr"],matchNames:["국민은행 (gungmin bank)"],tags:{amenity:"bank",brand:"국민은행","brand:en":"KB Kookmin Bank","brand:ko":"국민은행","brand:wikidata":"Q496606","brand:wikipedia":"en:KB Financial Group Inc",name:"국민은행","name:en":"KB Kookmin Bank","name:ko":"국민은행"}},"amenity/bank|기업은행":{countryCodes:["kr"],tags:{amenity:"bank",brand:"기업은행","brand:en":"Industrial Bank of Korea","brand:ko":"기업은행","brand:wikidata":"Q483855","brand:wikipedia":"en:Industrial Bank of Korea",name:"기업은행","name:en":"Industrial Bank of Korea","name:ko":"기업은행"}},"amenity/bank|농협":{countryCodes:["kr"],matchNames:["nh농협은행"],tags:{amenity:"bank",brand:"농협","brand:en":"NH","brand:ko":"농협","brand:wikidata":"Q15283673","brand:wikipedia":"ko:NH농협은행",name:"농협","name:en":"NH","name:ko":"농협"}},"amenity/bank|새마을금고":{countryCodes:["kr"],tags:{amenity:"bank",brand:"새마을금고","brand:ko":"새마을금고","brand:wikidata":"Q12600614","brand:wikipedia":"ko:새마을금고",name:"새마을금고","name:ko":"새마을금고"}},"amenity/bank|신한은행":{countryCodes:["kr"],matchNames:["신한은행 (sinhan bank)"],tags:{amenity:"bank",brand:"신한은행","brand:en":"Sinhan Bank","brand:ko":"신한은행","brand:wikidata":"Q487230","brand:wikipedia":"en:Shinhan Bank",name:"신한은행","name:en":"Sinhan Bank","name:ko":"신한은행"}},"amenity/bank|우리은행":{countryCodes:["kr"],matchNames:["우리은행 (uri bank)"],tags:{amenity:"bank",brand:"우리은행","brand:en":"Woori Bank","brand:ko":"우리은행","brand:wikidata":"Q494369","brand:wikipedia":"en:Woori Bank",name:"우리은행","name:en":"Woori Bank","name:ko":"우리은행"}},"amenity/bank|하나은행":{countryCodes:["kr"],tags:{amenity:"bank",brand:"하나은행","brand:en":"Korea Exchange Bank","brand:ko":"하나은행","brand:wikidata":"Q484047","brand:wikipedia":"en:Korea Exchange Bank",name:"하나은행","name:en":"Korea Exchange Bank","name:ko":"하나은행"}},"amenity/bicycle_rental|Call a Bike":{countryCodes:["de"],tags:{amenity:"bicycle_rental",brand:"Call a Bike","brand:wikidata":"Q1060525","brand:wikipedia":"en:Call a Bike",name:"Call a Bike"}},"amenity/bicycle_rental|Grid":{countryCodes:["us"],tags:{amenity:"bicycle_rental",brand:"Grid","brand:wikidata":"Q62104168",name:"Grid"}},"amenity/bicycle_rental|MiBici":{countryCodes:["mx"],tags:{amenity:"bicycle_rental",brand:"MiBici","brand:wikidata":"Q60966987","brand:wikipedia":"es:MiBici",name:"MiBici"}},"amenity/bicycle_rental|NextBike":{tags:{amenity:"bicycle_rental",brand:"NextBike",name:"NextBike"}},"amenity/bicycle_rental|Swapfiets":{countryCodes:["be","de","dk","nl"],tags:{amenity:"bicycle_rental",brand:"Swapfiets","brand:wikidata":"Q62104374",name:"Swapfiets"}},"amenity/bicycle_rental|metropolradruhr":{countryCodes:["de"],tags:{amenity:"bicycle_rental",brand:"metropolradruhr","brand:wikidata":"Q62104274",name:"metropolradruhr",operator:"nextbike","operator:wikidata":"Q2351279","operator:wikipedia":"en:Nextbike"}},"amenity/bureau_de_change|Abitab":{countryCodes:["uy"],tags:{amenity:"bureau_de_change",brand:"Abitab","brand:wikidata":"Q16488129","brand:wikipedia":"es:Abitab",name:"Abitab"}},"amenity/bureau_de_change|CADECA":{countryCodes:["cu"],tags:{amenity:"bureau_de_change",brand:"CADECA","brand:wikidata":"Q62122716",name:"CADECA"}},"amenity/bureau_de_change|Money Exchange":{tags:{amenity:"bureau_de_change",brand:"Money Exchange",name:"Money Exchange"}},"amenity/bureau_de_change|Travelex":{tags:{amenity:"bureau_de_change",brand:"Travelex","brand:wikidata":"Q2337964","brand:wikipedia":"en:Travelex",name:"Travelex"}},"amenity/cafe|85°C":{countryCodes:["au","us"],matchNames:["85 cafe","85 degrees c","85 degrees celsius","85c bakery cafe","85c daily cafe","85oc"],tags:{alt_name:"85C",amenity:"cafe",brand:"85°C","brand:wikidata":"Q4644852","brand:wikipedia":"en:85C Bakery Cafe",cuisine:"coffee_shop",name:"85°C",takeaway:"yes"}},"amenity/cafe|85度C":{countryCodes:["cn","tw"],tags:{amenity:"cafe",brand:"85度C","brand:en":"85C Bakery Cafe","brand:wikidata":"Q4644852","brand:wikipedia":"en:85C Bakery Cafe",cuisine:"coffee_shop",name:"85度C","name:en":"85C Bakery Cafe",takeaway:"yes"}},"amenity/cafe|Barista":{countryCodes:["in","lk","mv","np"],tags:{amenity:"cafe",brand:"Barista","brand:wikidata":"Q644735","brand:wikipedia":"en:Barista (company)",cuisine:"coffee_shop",name:"Barista",takeaway:"yes"}},"amenity/cafe|Bonafide":{countryCodes:["ar","cl"],tags:{amenity:"cafe",brand:"Bonafide","brand:wikidata":"Q62122746",cuisine:"coffee_shop",name:"Bonafide",takeaway:"yes"}},"amenity/cafe|Cafe Coffee Day":{tags:{amenity:"cafe",brand:"Cafe Coffee Day","brand:wikidata":"Q5017235","brand:wikipedia":"en:Café Coffee Day",cuisine:"coffee_shop",name:"Cafe Coffee Day",takeaway:"yes"}},"amenity/cafe|Caffè Nero":{matchNames:["cafe nero"],tags:{amenity:"cafe",brand:"Caffè Nero","brand:wikidata":"Q675808","brand:wikipedia":"en:Caffè Nero",cuisine:"coffee_shop",name:"Caffè Nero",takeaway:"yes"}},"amenity/cafe|Café Amazon":{tags:{amenity:"cafe",brand:"Café Amazon","brand:wikidata":"Q43247503","brand:wikipedia":"en:Café Amazon",cuisine:"coffee_shop",name:"Café Amazon",takeaway:"yes"}},"amenity/cafe|Café Martínez":{countryCodes:["ar"],tags:{amenity:"cafe",brand:"Café Martínez","brand:wikidata":"Q16540032","brand:wikipedia":"es:Café Martínez",cuisine:"coffee_shop",name:"Café Martínez",takeaway:"yes"}},"amenity/cafe|Café de Paris":{tags:{amenity:"cafe",brand:"Café de Paris",cuisine:"coffee_shop",name:"Café de Paris",takeaway:"yes"}},"amenity/cafe|Cappuccino":{tags:{amenity:"cafe",brand:"Cappuccino",cuisine:"coffee_shop",name:"Cappuccino",takeaway:"yes"}},"amenity/cafe|Caribou Coffee":{tags:{amenity:"cafe",brand:"Caribou Coffee","brand:wikidata":"Q5039494","brand:wikipedia":"en:Caribou Coffee",cuisine:"coffee_shop",name:"Caribou Coffee",takeaway:"yes"}},"amenity/cafe|Chatime":{tags:{amenity:"cafe",brand:"Chatime","brand:wikidata":"Q16829306","brand:wikipedia":"en:Chatime",cuisine:"coffee_shop",name:"Chatime",takeaway:"yes"}},"amenity/cafe|Coffee Bean":{tags:{amenity:"cafe",brand:"Coffee Bean",cuisine:"coffee_shop",name:"Coffee Bean",takeaway:"yes"}},"amenity/cafe|Coffee Culture":{tags:{amenity:"cafe",brand:"Coffee Culture",cuisine:"coffee_shop",name:"Coffee Culture",takeaway:"yes"}},"amenity/cafe|Coffee Fellows":{tags:{amenity:"cafe",brand:"Coffee Fellows","brand:wikidata":"Q23461429","brand:wikipedia":"en:Coffee Fellows",cuisine:"coffee_shop",name:"Coffee Fellows",takeaway:"yes"}},"amenity/cafe|Coffee House~(Finland)":{countryCodes:["fi"],nomatch:["amenity/cafe|The Coffee House~(Vietnam)"],tags:{amenity:"cafe",brand:"Coffee House","brand:wikidata":"Q11855430","brand:wikipedia":"fi:Coffee House",cuisine:"coffee_shop",name:"Coffee House",takeaway:"yes"}},"amenity/cafe|Coffee Island":{countryCodes:["cy","gr"],tags:{amenity:"cafe",brand:"Coffee Island","brand:wikidata":"Q60867333","brand:wikipedia":"en:Coffee Island",cuisine:"coffee_shop",name:"Coffee Island",takeaway:"yes"}},"amenity/cafe|Coffee Time":{tags:{amenity:"cafe",brand:"Coffee Time","brand:wikidata":"Q5140932","brand:wikipedia":"en:Coffee Time",cuisine:"coffee_shop",name:"Coffee Time",takeaway:"yes"}},"amenity/cafe|Costa":{matchNames:["costa coffee"],tags:{amenity:"cafe",brand:"Costa","brand:wikidata":"Q608845","brand:wikipedia":"en:Costa Coffee",cuisine:"coffee_shop",name:"Costa",takeaway:"yes"}},"amenity/cafe|Country Style":{tags:{amenity:"cafe",brand:"Country Style","brand:wikidata":"Q5177435","brand:wikipedia":"en:Country Style",cuisine:"coffee_shop",name:"Country Style",takeaway:"yes"}},"amenity/cafe|Cộng Cà Phê":{countryCodes:["kr","vn"],matchNames:["cong"],tags:{amenity:"cafe",brand:"Cộng Cà Phê","brand:wikidata":"Q63864181",cuisine:"coffee_shop;vietnamese",name:"Cộng Cà Phê","name:vi":"Cộng Cà Phê",takeaway:"yes"}},"amenity/cafe|Dolce Vita":{tags:{amenity:"cafe",brand:"Dolce Vita",cuisine:"coffee_shop",name:"Dolce Vita",takeaway:"yes"}},"amenity/cafe|Dutch Bros. Coffee":{countryCodes:["us"],matchNames:["dutch bros","dutch brothers"],tags:{amenity:"cafe",brand:"Dutch Bros. Coffee","brand:wikidata":"Q5317253","brand:wikipedia":"en:Dutch Bros. Coffee",cuisine:"coffee_shop",name:"Dutch Bros. Coffee",takeaway:"only"}},"amenity/cafe|Espresso House":{countryCodes:["dk","fi","no","se"],tags:{amenity:"cafe",brand:"Espresso House","brand:wikidata":"Q10489162","brand:wikipedia":"en:Espresso House",cuisine:"coffee_shop",name:"Espresso House",takeaway:"yes"}},"amenity/cafe|Fran's Café":{countryCodes:["br"],tags:{amenity:"cafe",brand:"Fran's Café","brand:website":"http://www.franscafe.com.br","brand:wikidata":"Q62075645",cuisine:"coffee_shop",name:"Fran's Café",takeaway:"yes"}},"amenity/cafe|Havanna":{tags:{amenity:"cafe",brand:"Havanna","brand:wikidata":"Q2900869","brand:wikipedia":"es:Havanna",cuisine:"coffee_shop",name:"Havanna",takeaway:"yes"}},"amenity/cafe|Highlands Coffee":{countryCodes:["vn"],matchNames:["highlands"],tags:{amenity:"cafe",brand:"Highlands Coffee","brand:wikidata":"Q5759361","brand:wikipedia":"vi:Highlands Coffee",cuisine:"coffee_shop;vietnamese",name:"Highlands Coffee","name:en":"Highlands Coffee",takeaway:"yes"}},"amenity/cafe|Insomnia":{tags:{amenity:"cafe",brand:"Insomnia","brand:wikidata":"Q6038271","brand:wikipedia":"en:Insomnia Coffee Company",cuisine:"coffee_shop",name:"Insomnia",takeaway:"yes"}},"amenity/cafe|Joe & The Juice":{tags:{amenity:"cafe",brand:"Joe & The Juice","brand:wikidata":"Q26221514","brand:wikipedia":"en:Joe & The Juice",cuisine:"coffee_shop",name:"Joe & The Juice",takeaway:"yes"}},"amenity/cafe|Le Pain Quotidien":{tags:{amenity:"cafe",brand:"Le Pain Quotidien","brand:wikidata":"Q2046903","brand:wikipedia":"en:Le Pain Quotidien",cuisine:"coffee_shop",name:"Le Pain Quotidien",takeaway:"yes"}},"amenity/cafe|Mado":{countryCodes:["tr"],tags:{amenity:"cafe",brand:"Mado","brand:wikidata":"Q17116336","brand:wikipedia":"en:Mado (food company)",cuisine:"coffee_shop",name:"Mado",takeaway:"yes"}},"amenity/cafe|McCafé":{tags:{amenity:"cafe",brand:"McCafé","brand:wikidata":"Q3114287","brand:wikipedia":"en:McCafé",cuisine:"coffee_shop",name:"McCafé","operator:wikidata":"Q38076","operator:wikipedia":"en:McDonald's",takeaway:"yes"}},"amenity/cafe|Mikel":{tags:{amenity:"cafe",brand:"Mikel",cuisine:"coffee_shop",name:"Mikel",takeaway:"yes"}},"amenity/cafe|Patisserie Valerie":{countryCodes:["gb"],tags:{amenity:"cafe",brand:"Patisserie Valerie","brand:wikidata":"Q22101966","brand:wikipedia":"en:Patisserie Valerie",cuisine:"coffee_shop",name:"Patisserie Valerie",takeaway:"yes"}},"amenity/cafe|Peet's Coffee":{countryCodes:["us"],matchNames:["peets","peets coffee & tea","peets coffee and tea"],tags:{amenity:"cafe",brand:"Peet's Coffee","brand:wikidata":"Q1094101","brand:wikipedia":"en:Peet's Coffee",cuisine:"coffee_shop",name:"Peet's Coffee",takeaway:"yes"}},"amenity/cafe|Prime":{countryCodes:["ru"],tags:{amenity:"cafe",brand:"Prime","brand:wikidata":"Q62122839",cuisine:"coffee_shop",name:"Prime",takeaway:"yes"}},"amenity/cafe|Pronto":{countryCodes:["jp"],matchNames:["プロント"],nomatch:["shop/convenience|Coop Pronto"],tags:{amenity:"cafe",brand:"Pronto","brand:wikidata":"Q11336224","brand:wikipedia":"ja:プロントコーポレーション",cuisine:"coffee_shop",name:"Pronto","name:ja":"プロント",takeaway:"yes"}},"amenity/cafe|Pumpkin":{countryCodes:["gb"],matchNames:["pumpkin cafe","pumpkin cafe shop"],tags:{amenity:"cafe",brand:"Pumpkin","brand:wikidata":"Q27825961","brand:wikipedia":"en:Pumpkin Café Shop",cuisine:"coffee_shop",name:"Pumpkin",takeaway:"yes"}},"amenity/cafe|Second Cup":{tags:{amenity:"cafe",brand:"Second Cup","brand:wikidata":"Q862180","brand:wikipedia":"en:Second Cup",cuisine:"coffee_shop",name:"Second Cup",takeaway:"yes"}},"amenity/cafe|Segafredo":{tags:{amenity:"cafe",brand:"Segafredo","brand:wikidata":"Q21282762","brand:wikipedia":"it:Segafredo Zanetti",cuisine:"coffee_shop",name:"Segafredo",takeaway:"yes"}},"amenity/cafe|Starbucks":{matchNames:["starbucks coffee"],tags:{amenity:"cafe",brand:"Starbucks","brand:wikidata":"Q37158","brand:wikipedia":"en:Starbucks",cuisine:"coffee_shop",name:"Starbucks",takeaway:"yes"}},"amenity/cafe|The Coffee Bean & Tea Leaf":{tags:{amenity:"cafe",brand:"The Coffee Bean & Tea Leaf","brand:wikidata":"Q1141384","brand:wikipedia":"en:The Coffee Bean & Tea Leaf",cuisine:"coffee_shop",name:"The Coffee Bean & Tea Leaf",takeaway:"yes"}},"amenity/cafe|The Coffee Club":{tags:{amenity:"cafe",brand:"The Coffee Club","brand:wikidata":"Q7726599","brand:wikipedia":"en:The Coffee Club",cuisine:"coffee_shop",name:"The Coffee Club",takeaway:"yes"}},"amenity/cafe|The Coffee House~(Vietnam)":{countryCodes:["vn"],matchNames:["coffee house"],nomatch:["amenity/cafe|Coffee House~(Finland)"],tags:{amenity:"cafe",brand:"The Coffee House","brand:wikidata":"Q60775742","brand:wikipedia":"en:The Coffee House (coffeehouse chain)",cuisine:"coffee_shop;vietnamese",name:"The Coffee House","name:en":"The Coffee House",takeaway:"yes"}},"amenity/cafe|Tim Hortons":{tags:{amenity:"cafe",brand:"Tim Hortons","brand:wikidata":"Q175106","brand:wikipedia":"en:Tim Hortons",cuisine:"coffee_shop",name:"Tim Hortons",takeaway:"yes"}},"amenity/cafe|Traveler's Coffee":{tags:{amenity:"cafe",brand:"Traveler's Coffee","brand:wikidata":"Q4051716","brand:wikipedia":"ru:Traveler’s Coffee",cuisine:"coffee_shop",name:"Traveler's Coffee",takeaway:"yes"}},"amenity/cafe|Trung Nguyên Coffee":{countryCodes:["vn"],matchNames:["trung nguyen"],tags:{amenity:"cafe",brand:"Trung Nguyên","brand:wikidata":"Q3541154","brand:wikipedia":"vi:Trung Nguyên (công ty)",cuisine:"coffee_shop;vietnamese",name:"Trung Nguyên Coffee","name:en":"Trung Nguyen Coffee","name:vi":"Cà phê Trung Nguyên",takeaway:"yes"}},"amenity/cafe|Wayne's Coffee":{tags:{amenity:"cafe",brand:"Wayne's Coffee","brand:wikidata":"Q2637272","brand:wikipedia":"en:Wayne's Coffee",cuisine:"coffee_shop",name:"Wayne's Coffee",takeaway:"yes"}},"amenity/cafe|Wild Bean Cafe":{tags:{amenity:"cafe",brand:"Wild Bean Cafe","brand:wikidata":"Q61804826",cuisine:"coffee_shop",name:"Wild Bean Cafe",takeaway:"yes"}},"amenity/cafe|Берёзка":{tags:{amenity:"cafe",brand:"Берёзка",cuisine:"coffee_shop",name:"Берёзка",takeaway:"yes"}},"amenity/cafe|Виктория":{tags:{amenity:"cafe",brand:"Виктория",cuisine:"coffee_shop",name:"Виктория",takeaway:"yes"}},"amenity/cafe|Гурман":{tags:{amenity:"cafe",brand:"Гурман",cuisine:"coffee_shop",name:"Гурман",takeaway:"yes"}},"amenity/cafe|Даблби":{countryCodes:["ru"],tags:{amenity:"cafe",brand:"Даблби","brand:en":"Double B","brand:wikidata":"Q62501686",cuisine:"coffee_shop",name:"Даблби","name:en":"Double B",takeaway:"yes"}},"amenity/cafe|Лакомка":{tags:{amenity:"cafe",brand:"Лакомка",cuisine:"coffee_shop",name:"Лакомка",takeaway:"yes"}},"amenity/cafe|Оазис":{tags:{amenity:"cafe",brand:"Оазис","brand:en":"Oasis",cuisine:"coffee_shop",name:"Оазис","name:en":"Oasis",takeaway:"yes"}},"amenity/cafe|Сказка":{tags:{amenity:"cafe",brand:"Сказка",cuisine:"coffee_shop",name:"Сказка",takeaway:"yes"}},"amenity/cafe|Смак":{matchTags:["shop/convenience"],tags:{amenity:"cafe",brand:"Смак","brand:en":"Taste",cuisine:"coffee_shop",name:"Смак","name:en":"Taste",takeaway:"yes"}},"amenity/cafe|Старбакс":{countryCodes:["ru"],tags:{amenity:"cafe",brand:"Старбакс","brand:en":"Starbucks","brand:wikidata":"Q37158","brand:wikipedia":"en:Starbucks",cuisine:"coffee_shop",name:"Старбакс","name:en":"Starbucks",takeaway:"yes"}},"amenity/cafe|Транзит":{countryCodes:["kz","ru","ua"],tags:{amenity:"cafe",brand:"Транзит",cuisine:"coffee_shop",name:"Транзит",takeaway:"yes"}},"amenity/cafe|Фортуна":{tags:{amenity:"cafe",brand:"Фортуна",cuisine:"coffee_shop",name:"Фортуна",takeaway:"yes"}},"amenity/cafe|Хуторок":{tags:{amenity:"cafe",brand:"Хуторок",cuisine:"coffee_shop",name:"Хуторок",takeaway:"yes"}},"amenity/cafe|Шоколадница":{countryCodes:["ru"],matchNames:["шоколад"],tags:{amenity:"cafe",brand:"Шоколадница","brand:en":"Chocolate","brand:wikidata":"Q30891188","brand:wikipedia":"ru:Шоколадница (сеть кофеен)",cuisine:"coffee_shop",name:"Шоколадница","name:en":"Chocolate",takeaway:"yes"}},"amenity/cafe|Штолле":{countryCodes:["by","ru","ua"],tags:{amenity:"cafe",brand:"Штолле","brand:en":"Stolle","brand:wikidata":"Q62502236",cuisine:"coffee_shop",name:"Штолле","name:en":"Stolle",takeaway:"yes"}},"amenity/cafe|ארומה":{countryCodes:["il"],tags:{amenity:"cafe",brand:"ארומה","brand:en":"Aroma Espresso Bar","brand:he":"ארומה","brand:wikidata":"Q2909872","brand:wikipedia":"en:Aroma Espresso Bar",cuisine:"coffee_shop",name:"ארומה","name:en":"Aroma Espresso Bar","name:he":"ארומה",takeaway:"yes"}},"amenity/cafe|คาเฟ่ อเมซอน":{countryCodes:["th"],tags:{amenity:"cafe",brand:"คาเฟ่ อเมซอน","brand:en":"Café Amazon","brand:th":"คาเฟ่ อเมซอน","brand:wikidata":"Q43247503","brand:wikipedia":"en:Café Amazon",cuisine:"coffee_shop",name:"คาเฟ่ อเมซอน","name:en":"Café Amazon","name:th":"คาเฟ่ อเมซอน",takeaway:"yes"}},"amenity/cafe|エクセルシオール カフェ":{countryCodes:["jp"],tags:{amenity:"cafe",brand:"エクセルシオール カフェ","brand:en":"EXCELSIOR CAFFÉ","brand:ja":"エクセルシオール カフェ","brand:wikidata":"Q11289828","brand:wikipedia":"ja:エクセルシオール カフェ",cuisine:"coffee_shop",name:"エクセルシオール カフェ","name:ja":"エクセルシオール カフェ",takeaway:"yes"}},"amenity/cafe|カフェ・ド・クリエ":{countryCodes:["jp"],tags:{amenity:"cafe",brand:"カフェ・ド・クリエ","brand:en":"Cafe de CRIE","brand:ja":"カフェ・ド・クリエ","brand:wikidata":"Q17219077","brand:wikipedia":"ja:ポッカクリエイト",cuisine:"coffee_shop",name:"カフェ・ド・クリエ","name:en":"Cafe de CRIE","name:ja":"カフェ・ド・クリエ",takeaway:"yes"}},"amenity/cafe|カフェ・ベローチェ":{countryCodes:["jp"],tags:{amenity:"cafe",brand:"カフェ・ベローチェ","brand:en":"CAFFÈ VELOCE","brand:ja":"カフェ・ベローチェ","brand:wikidata":"Q11294597","brand:wikipedia":"ja:カフェ・ベローチェ",cuisine:"coffee_shop",name:"カフェ・ベローチェ","name:en":"CAFFÈ VELOCE","name:ja":"カフェ・ベローチェ",takeaway:"yes"}},"amenity/cafe|コメダ珈琲店":{countryCodes:["jp"],tags:{amenity:"cafe",brand:"コメダ珈琲店","brand:en":"Komeda Coffee Shop","brand:ja":"コメダ珈琲店","brand:wikidata":"Q11302679","brand:wikipedia":"ja:コメダ",cuisine:"coffee_shop",name:"コメダ珈琲店","name:en":"Komeda Coffee Shop","name:ja":"コメダ珈琲店",takeaway:"yes"}},"amenity/cafe|サンマルクカフェ":{countryCodes:["jp"],tags:{amenity:"cafe",brand:"サンマルクカフェ","brand:en":"ST.MARC CAFÉ","brand:ja":"サンマルクカフェ","brand:wikidata":"Q11305989","brand:wikipedia":"ja:サンマルクホールディングス",cuisine:"coffee_shop",name:"サンマルクカフェ","name:en":"ST.MARC CAFÉ","name:ja":"サンマルクカフェ",takeaway:"yes"}},"amenity/cafe|スターバックス":{countryCodes:["jp"],tags:{amenity:"cafe",brand:"スターバックス","brand:en":"Starbucks","brand:ja":"スターバックス","brand:wikidata":"Q37158","brand:wikipedia":"ja:スターバックス",cuisine:"coffee_shop",name:"スターバックス","name:en":"Starbucks","name:ja":"スターバックス",takeaway:"yes"}},"amenity/cafe|スターバックスコーヒー":{countryCodes:["jp"],tags:{amenity:"cafe",brand:"スターバックスコーヒー","brand:ja":"スターバックスコーヒー",cuisine:"coffee_shop",name:"スターバックスコーヒー","name:ja":"スターバックスコーヒー",takeaway:"yes"}},"amenity/cafe|タリーズコーヒー":{countryCodes:["jp"],tags:{amenity:"cafe",brand:"タリーズコーヒー","brand:en":"Tully's Coffee","brand:ja":"タリーズコーヒー","brand:wikidata":"Q3541983","brand:wikipedia":"en:Tully's Coffee",cuisine:"coffee_shop",name:"タリーズコーヒー","name:en":"Tully's Coffee","name:ja":"タリーズコーヒー",takeaway:"yes"}},"amenity/cafe|ドトールコーヒーショップ":{countryCodes:["jp"],tags:{amenity:"cafe",brand:"ドトールコーヒーショップ","brand:en":"Doutor","brand:ja":"ドトールコーヒーショップ","brand:wikidata":"Q11322732","brand:wikipedia":"ja:ドトールコーヒーショップ",cuisine:"coffee_shop",name:"ドトールコーヒーショップ","name:en":"Doutor Coffee Shop","name:ja":"ドトールコーヒーショップ",takeaway:"yes"}},"amenity/cafe|星巴克":{countryCodes:["cn","tw"],tags:{amenity:"cafe",brand:"星巴克","brand:en":"Starbucks","brand:wikidata":"Q37158","brand:wikipedia":"zh:星巴克","brand:zh":"星巴克",cuisine:"coffee_shop",name:"星巴克","name:en":"Starbucks","name:zh":"星巴克",takeaway:"yes"}},"amenity/cafe|珈琲館":{countryCodes:["jp"],tags:{amenity:"cafe",brand:"珈琲館","brand:en":"Kohikan","brand:ja":"珈琲館","brand:wikidata":"Q11573290","brand:wikipedia":"ja:珈琲館",cuisine:"coffee_shop",name:"珈琲館","name:en":"Kohikan","name:ja":"珈琲館",takeaway:"yes"}},"amenity/cafe|스타벅스":{countryCodes:["kr"],tags:{amenity:"cafe",brand:"스타벅스","brand:en":"Starbucks","brand:ko":"스타벅스","brand:wikidata":"Q37158","brand:wikipedia":"ko:스타벅스",cuisine:"coffee_shop",name:"스타벅스","name:en":"Starbucks","name:ko":"스타벅스",takeaway:"yes"}},"amenity/car_rental|Alamo":{tags:{amenity:"car_rental",brand:"Alamo","brand:wikidata":"Q1429287","brand:wikipedia":"en:Alamo Rent a Car",name:"Alamo"}},"amenity/car_rental|Avis":{tags:{amenity:"car_rental",brand:"Avis","brand:wikidata":"Q791136","brand:wikipedia":"en:Avis Car Rental",name:"Avis"}},"amenity/car_rental|Budget":{tags:{amenity:"car_rental",brand:"Budget","brand:wikidata":"Q1001437","brand:wikipedia":"en:Budget Rent a Car",name:"Budget"}},"amenity/car_rental|Dollar":{tags:{amenity:"car_rental",brand:"Dollar","brand:wikidata":"Q1235661","brand:wikipedia":"en:Dollar Rent A Car",name:"Dollar"}},"amenity/car_rental|Enterprise":{matchNames:["enterprise rent-a-car"],tags:{amenity:"car_rental",brand:"Enterprise","brand:wikidata":"Q17085454","brand:wikipedia":"en:Enterprise Rent-A-Car",name:"Enterprise"}},"amenity/car_rental|Europcar":{tags:{amenity:"car_rental",brand:"Europcar","brand:wikidata":"Q1376256","brand:wikipedia":"en:Europcar",name:"Europcar"}},"amenity/car_rental|Hertz":{tags:{amenity:"car_rental",brand:"Hertz","brand:wikidata":"Q1543874","brand:wikipedia":"en:The Hertz Corporation",name:"Hertz"}},"amenity/car_rental|Localiza":{tags:{amenity:"car_rental",brand:"Localiza","brand:wikidata":"Q10319490","brand:wikipedia":"en:Localiza",name:"Localiza"}},"amenity/car_rental|National":{nomatch:["amenity/bank|National Bank"],tags:{amenity:"car_rental",brand:"National",name:"National"}},"amenity/car_rental|Sixt":{tags:{amenity:"car_rental",brand:"Sixt","brand:wikidata":"Q705664","brand:wikipedia":"en:Sixt",name:"Sixt"}},"amenity/car_rental|Thrifty":{tags:{amenity:"car_rental",brand:"Thrifty","brand:wikidata":"Q2429546","brand:wikipedia":"en:Thrifty Car Rental",name:"Thrifty"}},"amenity/car_rental|U-Haul":{tags:{amenity:"car_rental",brand:"U-Haul","brand:wikidata":"Q7862902","brand:wikipedia":"en:U-Haul",name:"U-Haul"}},"amenity/car_rental|オリックスレンタカー":{countryCodes:["jp"],tags:{amenity:"car_rental",brand:"オリックスレンタカー","brand:en":"ORIX Car Rental","brand:ja":"オリックスレンタカー","brand:wikidata":"Q11123021","brand:wikipedia":"ja:オリックスレンタカー",name:"オリックスレンタカー","name:en":"ORIX Car Rental","name:ja":"オリックスレンタカー"}},"amenity/car_rental|トヨタレンタカー":{countryCodes:["jp"],matchNames:["トヨタレンタリース"],tags:{amenity:"car_rental",brand:"トヨタレンタカー","brand:en":"Toyota Rental Car","brand:ja":"トヨタレンタカー","brand:wikidata":"Q11321580","brand:wikipedia":"ja:トヨタレンタリース",name:"トヨタレンタカー","name:en":"Toyota Rental Car","name:ja":"トヨタレンタカー"}},"amenity/car_rental|ニッポンレンタカー":{countryCodes:["jp"],tags:{amenity:"car_rental",brand:"ニッポンレンタカー","brand:en":"Nippon Car Rental","brand:ja":"ニッポンレンタカー","brand:wikidata":"Q11086533","brand:wikipedia":"ja:ニッポンレンタカー",name:"ニッポンレンタカー","name:en":"Nippon Car Rental","name:ja":"ニッポンレンタカー"}},"amenity/car_rental|日産レンタカー":{countryCodes:["jp"],tags:{amenity:"car_rental",brand:"日産レンタカー","brand:en":"Nissan Car Rental","brand:ja":"日産レンタカー","brand:wikidata":"Q11086838","brand:wikipedia":"ja:日産レンタカー",name:"日産レンタカー","name:en":"Nissan Car Rental","name:ja":"日産レンタカー"}},"amenity/car_sharing|Bluely":{countryCodes:["fr"],matchNames:["station bluely"],tags:{amenity:"car_sharing",brand:"Bluely","brand:wikidata":"Q16039715","brand:wikipedia":"fr:Bluely",name:"Bluely"}},"amenity/car_sharing|Enterprise Car Club":{countryCodes:["gb"],matchNames:["city car club"],tags:{amenity:"car_sharing",brand:"Enterprise Car Club","brand:wikidata":"Q5123055","brand:wikipedia":"en:Enterprise Car Club",name:"Enterprise Car Club"}},"amenity/car_sharing|Zipcar":{tags:{amenity:"car_sharing",brand:"Zipcar","brand:wikidata":"Q1069924","brand:wikipedia":"en:Zipcar",name:"Zipcar"}},"amenity/car_sharing|stadtmobil":{countryCodes:["de"],matchNames:["stadtmobil carsharing-station"],tags:{amenity:"car_sharing",brand:"stadtmobil","brand:wikidata":"Q2327629","brand:wikipedia":"en:Stadtmobil",name:"stadtmobil"}},"amenity/charging_station|Blink":{tags:{amenity:"charging_station",brand:"Blink","brand:wikidata":"Q62065645",name:"Blink"}},"amenity/charging_station|ChargePoint":{tags:{amenity:"charging_station",brand:"ChargePoint","brand:wikidata":"Q5176149","brand:wikipedia":"en:ChargePoint",name:"ChargePoint"}},"amenity/charging_station|E-WALD":{matchNames:["e-wald ladestation"],tags:{amenity:"charging_station",brand:"E-WALD","brand:wikidata":"Q61804335",name:"E-WALD"}},"amenity/charging_station|Enel":{countryCodes:["it"],matchNames:["enel - stazione di ricarica"],tags:{amenity:"charging_station",brand:"Enel","brand:wikidata":"Q651222","brand:wikipedia":"en:Enel",name:"Enel"}},"amenity/charging_station|Tesla Supercharger":{tags:{amenity:"charging_station",brand:"Tesla Supercharger","brand:wikidata":"Q17089620","brand:wikipedia":"en:Tesla Supercharger",name:"Tesla Supercharger"}},"amenity/charging_station|bike-energy Ladestation":{tags:{amenity:"charging_station",brand:"bike-energy Ladestation",name:"bike-energy Ladestation"}},"amenity/charging_station|eVgo":{tags:{amenity:"charging_station",brand:"eVgo","brand:wikidata":"Q61803820",name:"eVgo","operator:wikidata":"Q6955139","operator:wikipedia":"en:NRG Energy"}},"amenity/cinema|109シネマズ":{countryCodes:["jp"],tags:{amenity:"cinema",brand:"109シネマズ","brand:en":"109 Cinemas","brand:ja":"109シネマズ","brand:wikidata":"Q10854269","brand:wikipedia":"ja:109シネマズ",name:"109シネマズ","name:en":"109 Cinemas","name:ja":"109シネマズ",operator:"株式会社 東急レクリエーション","operator:en":"Tokyu Recreation Co., Ltd.","operator:wikidata":"Q11527011","operator:wikipedia":"ja:東急レクリエーション"}},"amenity/cinema|AMC":{tags:{amenity:"cinema",brand:"AMC","brand:wikidata":"Q294721","brand:wikipedia":"en:AMC Theatres",name:"AMC"}},"amenity/cinema|CineStar":{countryCodes:["de"],tags:{amenity:"cinema",brand:"CineStar","brand:wikidata":"Q321889","brand:wikipedia":"de:Cinestar",name:"CineStar"}},"amenity/cinema|Cinema City":{tags:{amenity:"cinema",brand:"Cinema City","brand:wikidata":"Q543651","brand:wikipedia":"en:Cinema City International",name:"Cinema City"}},"amenity/cinema|Cinemark":{tags:{amenity:"cinema",brand:"Cinemark","brand:wikidata":"Q707530","brand:wikipedia":"en:Cinemark Theatres",name:"Cinemark"}},"amenity/cinema|Cinemaxx~(GermanyAndDenmark)":{countryCodes:["de","dk"],nomatch:["amenity/cinema|Cinemaxx~(Indonesia)"],tags:{amenity:"cinema",brand:"Cinemaxx","brand:wikidata":"Q881860","brand:wikipedia":"de:Cinemaxx;da:CinemaxX",name:"Cinemaxx"}},"amenity/cinema|Cinemaxx~(Indonesia)":{countryCodes:["id"],nomatch:["amenity/cinema|Cinemaxx~(GermanyAndDenmark)"],tags:{amenity:"cinema",brand:"Cinemaxx","brand:wikidata":"Q19942740","brand:wikipedia":"id:Cinemaxx",name:"Cinemaxx"}},"amenity/cinema|Cinemex":{countryCodes:["mx"],tags:{amenity:"cinema",brand:"Cinemex","brand:wikidata":"Q3333072","brand:wikipedia":"en:Cinemex",name:"Cinemex"}},"amenity/cinema|Cineplanet":{tags:{amenity:"cinema",brand:"Cineplanet","brand:wikidata":"Q5769680","brand:wikipedia":"es:Cineplanet",name:"Cineplanet",operator:"Grupo Intercorp","operator:wikidata":"Q23008916","operator:wikipedia":"es:Intercorp"}},"amenity/cinema|Cineplexx":{tags:{amenity:"cinema",brand:"Cineplexx","brand:wikidata":"Q873340","brand:wikipedia":"en:Cineplexx Cinemas",name:"Cineplexx"}},"amenity/cinema|Cinepolis":{tags:{amenity:"cinema",brand:"Cinepolis","brand:wikidata":"Q5686673","brand:wikipedia":"en:Cinépolis",name:"Cinepolis"}},"amenity/cinema|Cineworld":{tags:{amenity:"cinema",brand:"Cineworld","brand:wikidata":"Q5120901","brand:wikipedia":"en:Cineworld",name:"Cineworld"}},"amenity/cinema|MOVIX":{countryCodes:["jp"],tags:{amenity:"cinema",brand:"MOVIX","brand:wikidata":"Q11532184","brand:wikipedia":"ja:松竹マルチプレックスシアターズ",name:"MOVIX",official_name:"松竹マルチプレックスシアターズ","official_name:en":"Shochiku Multiplex Theatres",operator:"株式会社松竹マルチプレックスシアターズ","operator:en":"Shochiku Multiplex Theatres, Ltd."}},"amenity/cinema|Multikino":{countryCodes:["lt","lv","pl"],tags:{amenity:"cinema",brand:"Multikino","brand:wikidata":"Q1144802","brand:wikipedia":"pl:Multikino",name:"Multikino"}},"amenity/cinema|Odeon":{tags:{amenity:"cinema",brand:"Odeon","brand:wikidata":"Q6127470","brand:wikipedia":"en:Odeon Cinemas",name:"Odeon"}},"amenity/cinema|TOHOシネマズ":{countryCodes:["jp"],tags:{amenity:"cinema",brand:"TOHOシネマズ","brand:en":"TOHO CINEMAS","brand:ja":"TOHOシネマズ","brand:wikidata":"Q11235261","brand:wikipedia":"ja:TOHOシネマズ",name:"TOHOシネマズ","name:en":"Toho Cinemas","name:ja":"TOHOシネマズ",operator:"TOHOシネマズ株式会社","operator:en":"TOHO CINEMAS LTD."}},"amenity/cinema|The Space Cinema":{countryCodes:["it"],matchNames:["The Space"],tags:{amenity:"cinema",brand:"The Space Cinema","brand:wikidata":"Q3989406","brand:wikipedia":"it:The Space Cinema",name:"The Space Cinema"}},"amenity/cinema|Vue~(IrelandAndUK)":{countryCodes:["gb","ie"],matchNames:["vue cinema"],nomatch:["amenity/cinema|Vue~(Netherlands)"],tags:{amenity:"cinema",brand:"Vue","brand:wikidata":"Q2535134","brand:wikipedia":"en:Vue Cinemas",name:"Vue"}},"amenity/cinema|Vue~(Netherlands)":{countryCodes:["nl"],matchNames:["vue cinema"],nomatch:["amenity/cinema|Vue~(IrelandAndUK)"],tags:{amenity:"cinema",brand:"Vue","brand:wikidata":"Q2421690","brand:wikipedia":"nl:Vue (bioscoopketen)",name:"Vue"}},"amenity/cinema|イオンシネマ":{countryCodes:["jp"],tags:{amenity:"cinema",brand:"イオンシネマ","brand:en":"AEON Cinema","brand:ja":"イオンシネマ","brand:wikidata":"Q17192792","brand:wikipedia":"ja:イオンエンターテイメント",name:"イオンシネマ","name:en":"AEON Cinema","name:ja":"イオンシネマ",operator:"イオンエンターテイメント株式会社","operator:en":"Aeon Entertainment Co., Ltd."}},"amenity/cinema|ユナイテッド・シネマ":{countryCodes:["jp"],tags:{amenity:"cinema",brand:"ユナイテッド・シネマ","brand:en":"United Cinemas","brand:ja":"ユナイテッド・シネマ","brand:wikidata":"Q11345629","brand:wikipedia":"ja:ユナイテッド・シネマ",name:"ユナイテッド・シネマ","name:en":"United Cinemas","name:ja":"ユナイテッド・シネマ",operator:"ユナイテッド・シネマ株式会社","operator:en":"UNITED CINEMAS CO., LTD."}},"amenity/clinic|DaVita Dialysis":{countryCodes:["us"],matchNames:["davita","davita kidney care"],tags:{amenity:"clinic",brand:"DaVita Dialysis","brand:wikidata":"Q5207184",healthcare:"dialysis","healthcare:speciality":"dialysis",name:"DaVita Dialysis"}},"amenity/clinic|Dialysis Clinic":{countryCodes:["us"],matchNames:["dci","dialysis clinic inc"],tags:{amenity:"clinic",brand:"Dialysis Clinic","brand:wikidata":"Q5207184","brand:wikipedia":"en:Dialysis Clinic, Inc.",healthcare:"dialysis","healthcare:speciality":"dialysis",name:"Dialysis Clinic",short_name:"DCI"}},"amenity/clinic|Fresenius Kidney Care":{tags:{amenity:"clinic",brand:"Fresenius Kidney Care","brand:wikidata":"Q650259","brand:wikipedia":"en:Fresenius Medical Care",healthcare:"dialysis","healthcare:speciality":"dialysis",name:"Fresenius Kidney Care"}},"amenity/clinic|Fresenius Medical Care":{countryCodes:["us"],tags:{amenity:"clinic",brand:"Fresenius Medical Care","brand:wikidata":"Q650259","brand:wikipedia":"en:Fresenius Medical Care",healthcare:"dialysis","healthcare:speciality":"dialysis",name:"Fresenius Medical Care"}},"amenity/clinic|Satellite Healthcare":{countryCodes:["us"],matchNames:["satellite","satellite dialysis"],tags:{amenity:"clinic",brand:"Satellite Healthcare","brand:wikidata":"Q50039787",healthcare:"dialysis","healthcare:speciality":"dialysis",name:"Satellite Healthcare"}},"amenity/dentist|Aspen Dental":{countryCodes:["us"],matchTags:["healthcare/dentist"],tags:{amenity:"dentist",brand:"Aspen Dental","brand:wikidata":"Q4807808","brand:wikipedia":"en:Aspen Dental",healthcare:"dentist",name:"Aspen Dental"}},"amenity/dentist|Dentix":{tags:{amenity:"dentist",brand:"Dentix",name:"Dentix"}},"amenity/dentist|Gentle Dental":{tags:{amenity:"dentist",brand:"Gentle Dental",name:"Gentle Dental"}},"amenity/dentist|Vitaldent":{tags:{amenity:"dentist",brand:"Vitaldent",name:"Vitaldent"}},"amenity/fast_food|A&W~(Canada)":{countryCodes:["ca"],nomatch:["amenity/fast_food|A&W~(USA)"],tags:{amenity:"fast_food",brand:"A&W","brand:wikidata":"Q2818848","brand:wikipedia":"en:A&W (Canada)",cuisine:"burger",name:"A&W",takeaway:"yes"}},"amenity/fast_food|A&W~(USA)":{countryCodes:["us"],nomatch:["amenity/fast_food|A&W~(Canada)"],tags:{amenity:"fast_food",brand:"A&W","brand:wikidata":"Q277641","brand:wikipedia":"en:A&W Restaurants",cuisine:"burger",name:"A&W",takeaway:"yes"}},"amenity/fast_food|Andok's":{countryCodes:["ph"],tags:{amenity:"fast_food",brand:"Andok's","brand:wikidata":"Q62267166",cuisine:"chicken",name:"Andok's",takeaway:"yes"}},"amenity/fast_food|Angel's Burger":{countryCodes:["ph"],tags:{amenity:"fast_food",brand:"Angel's Burger","brand:wikidata":"Q62267228",cuisine:"burger",name:"Angel's Burger",takeaway:"yes"}},"amenity/fast_food|Arby's":{tags:{amenity:"fast_food",brand:"Arby's","brand:wikidata":"Q630866","brand:wikipedia":"en:Arby's",cuisine:"sandwich",name:"Arby's",takeaway:"yes"}},"amenity/fast_food|Au Bon Pain":{countryCodes:["in","th","us"],tags:{amenity:"fast_food",brand:"Au Bon Pain","brand:wikidata":"Q4818942","brand:wikipedia":"en:Au Bon Pain",cuisine:"sandwich",name:"Au Bon Pain",takeaway:"yes"}},"amenity/fast_food|Auntie Anne's":{countryCodes:["us"],matchTags:["shop/bakery"],tags:{amenity:"fast_food",brand:"Auntie Anne's","brand:wikidata":"Q4822010","brand:wikipedia":"en:Auntie Anne's",cuisine:"pretzel",name:"Auntie Anne's",takeaway:"yes"}},"amenity/fast_food|Baja Fresh":{tags:{amenity:"fast_food",brand:"Baja Fresh","brand:wikidata":"Q2880019","brand:wikipedia":"en:Baja Fresh",cuisine:"mexican",name:"Baja Fresh",takeaway:"yes"}},"amenity/fast_food|Bembos":{countryCodes:["pe"],tags:{amenity:"fast_food",brand:"Bembos","brand:wikidata":"Q466971","brand:wikipedia":"en:Bembos",cuisine:"burger",name:"Bembos",takeaway:"yes"}},"amenity/fast_food|Bob's":{countryCodes:["ao","br","cl","pt"],tags:{amenity:"fast_food",brand:"Bob's","brand:wikidata":"Q1392113","brand:wikipedia":"en:Bob's",cuisine:"burger",name:"Bob's",takeaway:"yes"}},"amenity/fast_food|Bojangles'":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Bojangles'","brand:wikidata":"Q891163","brand:wikipedia":"en:Bojangles' Famous Chicken 'n Biscuits",cuisine:"chicken",name:"Bojangles'",official_name:"Bojangles' Famous Chicken 'n Biscuits",takeaway:"yes"}},"amenity/fast_food|Booster Juice":{tags:{amenity:"fast_food",brand:"Booster Juice","brand:wikidata":"Q4943796","brand:wikipedia":"en:Booster Juice",cuisine:"juice",name:"Booster Juice",takeaway:"yes"}},"amenity/fast_food|Boston Market":{tags:{amenity:"fast_food",brand:"Boston Market","brand:wikidata":"Q603617","brand:wikipedia":"en:Boston Market",cuisine:"american",name:"Boston Market",takeaway:"yes"}},"amenity/fast_food|Braum's":{countryCodes:["us"],matchTags:["shop/dairy"],tags:{amenity:"fast_food",brand:"Braum's","brand:wikidata":"Q4958263","brand:wikipedia":"en:Braum's",cuisine:"ice_cream",name:"Braum's",shop:"dairy",takeaway:"yes"}},"amenity/fast_food|Bruegger's Bagels":{countryCodes:["us"],matchNames:["breuger's","breugger's","bruegger's","bruger's","brugger's"],tags:{amenity:"fast_food",brand:"Bruegger's Bagels","brand:wikidata":"Q4978656","brand:wikipedia":"en:Bruegger's",cuisine:"bagel",name:"Bruegger's Bagels",takeaway:"yes"}},"amenity/fast_food|Burger King":{matchNames:["burguer king"],tags:{amenity:"fast_food",brand:"Burger King","brand:wikidata":"Q177054","brand:wikipedia":"en:Burger King",cuisine:"burger",name:"Burger King",takeaway:"yes"}},"amenity/fast_food|Burger Machine":{countryCodes:["ph"],tags:{amenity:"fast_food",brand:"Burger Machine","brand:wikidata":"Q4998549","brand:wikipedia":"en:Burger Machine",cuisine:"burger",name:"Burger Machine",takeaway:"yes"}},"amenity/fast_food|BurgerFi":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"BurgerFi","brand:wikidata":"Q39045496","brand:wikipedia":"en:BurgerFi",cuisine:"burger",name:"BurgerFi",takeaway:"yes"}},"amenity/fast_food|Captain D's":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Captain D's","brand:wikidata":"Q5036616","brand:wikipedia":"en:Captain D's",cuisine:"seafood",name:"Captain D's",takeaway:"yes"}},"amenity/fast_food|Carl's Jr.":{tags:{amenity:"fast_food",brand:"Carl's Jr.","brand:wikidata":"Q1043486","brand:wikipedia":"en:Carl's Jr.",cuisine:"burger",name:"Carl's Jr.",takeaway:"yes"}},"amenity/fast_food|Charleys Philly Steaks":{countryCodes:["us"],matchNames:["charleys"],tags:{amenity:"fast_food",brand:"Charleys Philly Steaks","brand:wikidata":"Q1066777","brand:wikipedia":"en:Charleys Philly Steaks",cuisine:"sandwich",name:"Charleys Philly Steaks",takeaway:"yes"}},"amenity/fast_food|Checkers":{nomatch:["shop/supermarket|Checkers"],tags:{amenity:"fast_food",brand:"Checkers","brand:wikidata":"Q63919315",cuisine:"burger",name:"Checkers",takeaway:"yes"}},"amenity/fast_food|Chick-fil-A":{tags:{amenity:"fast_food",brand:"Chick-fil-A","brand:wikidata":"Q491516","brand:wikipedia":"en:Chick-fil-A",cuisine:"chicken",name:"Chick-fil-A",takeaway:"yes"}},"amenity/fast_food|Chicken Express":{tags:{amenity:"fast_food",brand:"Chicken Express","brand:wikidata":"Q5096235","brand:wikipedia":"en:Chicken Express",cuisine:"chicken",name:"Chicken Express",takeaway:"yes"}},"amenity/fast_food|China Wok":{tags:{amenity:"fast_food",brand:"China Wok","brand:wikidata":"Q5766542","brand:wikipedia":"es:China Wok",cuisine:"chinese",name:"China Wok",takeaway:"yes"}},"amenity/fast_food|Chipotle":{matchNames:["chipotle mexican grill"],tags:{amenity:"fast_food",brand:"Chipotle","brand:wikidata":"Q465751","brand:wikipedia":"en:Chipotle Mexican Grill",cuisine:"mexican",name:"Chipotle",official_name:"Chipotle Mexican Grill",takeaway:"yes"}},"amenity/fast_food|Chopt":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Chopt","brand:wikidata":"Q17509305","brand:wikipedia":"en:Chopt",cuisine:"salad",name:"Chopt",takeaway:"yes"}},"amenity/fast_food|Chowking":{tags:{amenity:"fast_food",brand:"Chowking","brand:wikidata":"Q1076816","brand:wikipedia":"en:Chowking",cuisine:"asian",name:"Chowking",takeaway:"yes"}},"amenity/fast_food|Church's Chicken":{tags:{amenity:"fast_food",brand:"Church's Chicken","brand:wikidata":"Q1089932","brand:wikipedia":"en:Church's Chicken",cuisine:"chicken",name:"Church's Chicken",takeaway:"yes"}},"amenity/fast_food|Cinnabon":{matchTags:["shop/bakery","shop/confectionery","shop/pastry"],tags:{amenity:"fast_food",brand:"Cinnabon","brand:website":"https://www.cinnabon.com/","brand:wikidata":"Q1092539","brand:wikipedia":"en:Cinnabon",cuisine:"dessert",name:"Cinnabon",takeaway:"yes"}},"amenity/fast_food|CoCo壱番屋":{countryCodes:["cn","jp"],tags:{amenity:"fast_food",brand:"CoCo壱番屋","brand:en":"Ichibanya","brand:wikidata":"Q5986105","brand:wikipedia":"en:Ichibanya",cuisine:"japanese",name:"CoCo壱番屋","name:en":"Ichibanya",takeaway:"yes"}},"amenity/fast_food|Cofix":{tags:{amenity:"fast_food",brand:"Cofix",name:"Cofix",takeaway:"yes"}},"amenity/fast_food|Cook Out":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Cook Out","brand:wikidata":"Q5166992","brand:wikipedia":"en:Cook Out (restaurant)",cuisine:"american",name:"Cook Out",takeaway:"yes"}},"amenity/fast_food|Culver's":{tags:{amenity:"fast_food",brand:"Culver's","brand:wikidata":"Q1143589","brand:wikipedia":"en:Culver's",cuisine:"burger",name:"Culver's",takeaway:"yes"}},"amenity/fast_food|DQ Grill & Chill":{nomatch:["amenity/fast_food|Dairy Queen"],tags:{amenity:"fast_food",brand:"DQ Grill & Chill","brand:wikidata":"Q1141226","brand:wikipedia":"en:Dairy Queen",cuisine:"ice_cream;burger",name:"DQ Grill & Chill",takeaway:"yes"}},"amenity/fast_food|Dairy Queen":{matchNames:["dq"],nomatch:["amenity/fast_food|DQ Grill & Chill"],tags:{amenity:"fast_food",brand:"Dairy Queen","brand:wikidata":"Q1141226","brand:wikipedia":"en:Dairy Queen",cuisine:"ice_cream;burger",name:"Dairy Queen",takeaway:"yes"}},"amenity/fast_food|Daylight Donuts":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Daylight Donuts","brand:wikidata":"Q48970508","brand:wikipedia":"en:Daylight Donuts",cuisine:"donut",name:"Daylight Donuts",takeaway:"yes"}},"amenity/fast_food|Del Taco":{tags:{amenity:"fast_food",brand:"Del Taco","brand:wikidata":"Q1183818","brand:wikipedia":"en:Del Taco",cuisine:"mexican",name:"Del Taco",takeaway:"yes"}},"amenity/fast_food|Dig Inn":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Dig Inn","brand:wikidata":"Q28226241","brand:wikipedia":"en:Dig Inn",cuisine:"regional",name:"Dig Inn",takeaway:"yes"}},"amenity/fast_food|Domino's Pizza":{matchNames:["dominos"],tags:{amenity:"fast_food",brand:"Domino's Pizza","brand:wikidata":"Q839466","brand:wikipedia":"en:Domino's Pizza",cuisine:"pizza",name:"Domino's Pizza",takeaway:"yes"}},"amenity/fast_food|Dunkin' Donuts":{matchNames:["dunkin doughnuts"],matchTags:["shop/bakery"],tags:{amenity:"fast_food",brand:"Dunkin' Donuts","brand:wikidata":"Q847743","brand:wikipedia":"en:Dunkin' Donuts",cuisine:"donut;coffee",name:"Dunkin' Donuts",takeaway:"yes"}},"amenity/fast_food|Einstein Bros. Bagels":{countryCodes:["us"],matchNames:["einstein bros","einstein brothers","einstein brothers bagels"],tags:{amenity:"fast_food",brand:"Einstein Bros. Bagels","brand:wikidata":"Q5349788","brand:wikipedia":"en:Einstein Bros. Bagels",cuisine:"bagel",name:"Einstein Bros. Bagels",takeaway:"yes"}},"amenity/fast_food|El Pollo Loco":{tags:{amenity:"fast_food",brand:"El Pollo Loco","brand:wikidata":"Q2353849","brand:wikipedia":"en:El Pollo Loco",cuisine:"mexican",name:"El Pollo Loco",takeaway:"yes"}},"amenity/fast_food|Everest":{countryCodes:["gr"],tags:{amenity:"fast_food",brand:"Everest","brand:wikidata":"Q62273299",cuisine:"burger",name:"Everest",takeaway:"yes"}},"amenity/fast_food|Extreme Pita":{tags:{amenity:"fast_food",brand:"Extreme Pita","brand:wikidata":"Q5422367","brand:wikipedia":"en:Extreme Pita",cuisine:"pita",name:"Extreme Pita",takeaway:"yes"}},"amenity/fast_food|Fazoli's":{tags:{amenity:"fast_food",brand:"Fazoli's","brand:wikidata":"Q1399195","brand:wikipedia":"en:Fazoli's",cuisine:"italian",name:"Fazoli's",takeaway:"yes"}},"amenity/fast_food|Firehouse Subs":{countryCodes:["ca","us"],tags:{amenity:"fast_food",brand:"Firehouse Subs","brand:wikidata":"Q5451873","brand:wikipedia":"en:Firehouse Subs",cuisine:"sandwich",name:"Firehouse Subs",takeaway:"yes"}},"amenity/fast_food|Five Guys":{matchNames:["five guys burgers and fries"],tags:{amenity:"fast_food",brand:"Five Guys","brand:wikidata":"Q1131810","brand:wikipedia":"en:Five Guys",cuisine:"burger",name:"Five Guys",official_name:"Five Guys Burgers and Fries",takeaway:"yes"}},"amenity/fast_food|Freddy's":{matchNames:["freddy's frozen custard & steakburgers"],tags:{amenity:"fast_food",brand:"Freddy's","brand:wikidata":"Q5496837","brand:wikipedia":"en:Freddy's Frozen Custard & Steakburgers",cuisine:"ice_cream;burger",name:"Freddy's",takeaway:"yes"}},"amenity/fast_food|Freebirds":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Freebirds","brand:wikidata":"Q5500367","brand:wikipedia":"en:Freebirds World Burrito",cuisine:"mexican",name:"Freebirds",takeaway:"yes"}},"amenity/fast_food|Gabriel Pizza":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Gabriel Pizza","brand:wikidata":"Q5515791","brand:wikipedia":"en:Gabriel Pizza",cuisine:"pizza",name:"Gabriel Pizza",takeaway:"yes"}},"amenity/fast_food|Gino's Pizza":{tags:{amenity:"fast_food",brand:"Gino's Pizza",cuisine:"pizza",name:"Gino's Pizza",takeaway:"yes"}},"amenity/fast_food|Gold Star Chili":{countryCodes:["us"],matchNames:["gold star"],tags:{alt_name:"Gold Star",amenity:"fast_food",brand:"Gold Star Chili","brand:wikidata":"Q16994254","brand:wikipedia":"en:Gold Star Chili",cuisine:"chili",name:"Gold Star Chili",takeaway:"yes"}},"amenity/fast_food|Golden Krust Caribbean Bakery & Grill":{countryCodes:["ca","us"],tags:{amenity:"fast_food",brand:"Golden Krust Caribbean Bakery & Grill","brand:wikidata":"Q5579615","brand:wikipedia":"en:Golden Krust Caribbean Bakery & Grill",cuisine:"caribbean",name:"Golden Krust",takeaway:"yes"}},"amenity/fast_food|Greenwich":{tags:{amenity:"fast_food",brand:"Greenwich","brand:wikidata":"Q2691308","brand:wikipedia":"en:Greenwich Pizza",cuisine:"pizza",name:"Greenwich",takeaway:"yes"}},"amenity/fast_food|Habib's":{countryCodes:["br","mx"],tags:{amenity:"fast_food",brand:"Habib's","brand:wikidata":"Q2504930","brand:wikipedia":"en:Habib's",cuisine:"middle_eastern",name:"Habib's",takeaway:"yes"}},"amenity/fast_food|Hallo Pizza":{countryCodes:["de"],tags:{amenity:"fast_food",brand:"Hallo Pizza","brand:wikidata":"Q1571798","brand:wikipedia":"de:Hallo Pizza",cuisine:"pizza",name:"Hallo Pizza",takeaway:"yes"}},"amenity/fast_food|Hardee's":{tags:{amenity:"fast_food",brand:"Hardee's","brand:wikidata":"Q1585088","brand:wikipedia":"en:Hardee's",cuisine:"burger",name:"Hardee's",takeaway:"yes"}},"amenity/fast_food|Harvey's":{countryCodes:["ca"],nomatch:["shop/furniture|Harveys"],tags:{amenity:"fast_food",brand:"Harvey's","brand:wikidata":"Q1466184","brand:wikipedia":"en:Harvey's",cuisine:"burger",name:"Harvey's",takeaway:"yes"}},"amenity/fast_food|Hesburger":{tags:{amenity:"fast_food",brand:"Hesburger","brand:wikidata":"Q1276832","brand:wikipedia":"en:Hesburger",cuisine:"burger",name:"Hesburger",takeaway:"yes"}},"amenity/fast_food|Hot Dog on a Stick":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Hot Dog on a Stick","brand:wikidata":"Q5909922","brand:wikipedia":"en:Hot Dog on a Stick",cuisine:"hot_dog",name:"Hot Dog on a Stick",takeaway:"yes"}},"amenity/fast_food|Hot Head Burritos":{countryCodes:["us"],matchNames:["hot head"],tags:{amenity:"fast_food",brand:"Hot Head Burritos","brand:wikidata":"Q5910008","brand:wikipedia":"en:Hot Head Burritos",cuisine:"mexican",name:"Hot Head Burritos",takeaway:"yes"}},"amenity/fast_food|Hungry Howie's":{countryCodes:["us"],matchNames:["hungry howies pizza"],tags:{amenity:"fast_food",brand:"Hungry Howie's","brand:wikidata":"Q16985303","brand:wikipedia":"en:Hungry Howie's Pizza",cuisine:"pizza",name:"Hungry Howie's",takeaway:"yes"}},"amenity/fast_food|Hungry Jacks":{countryCodes:["au"],tags:{amenity:"fast_food",brand:"Hungry Jacks","brand:wikidata":"Q3036373","brand:wikipedia":"en:Hungry Jack's",cuisine:"burger",name:"Hungry Jacks",takeaway:"yes"}},"amenity/fast_food|In-N-Out Burger":{tags:{amenity:"fast_food",brand:"In-N-Out Burger","brand:wikidata":"Q1205312","brand:wikipedia":"en:In-N-Out Burger",cuisine:"burger",name:"In-N-Out Burger",takeaway:"yes"}},"amenity/fast_food|Jack in the Box":{tags:{amenity:"fast_food",brand:"Jack in the Box","brand:wikidata":"Q1538507","brand:wikipedia":"en:Jack in the Box",cuisine:"burger",name:"Jack in the Box",takeaway:"yes"}},"amenity/fast_food|Jamba Juice":{tags:{amenity:"fast_food",brand:"Jamba Juice","brand:wikidata":"Q3088784","brand:wikipedia":"en:Jamba Juice",cuisine:"juice",name:"Jamba Juice",takeaway:"yes"}},"amenity/fast_food|Jersey Mike's Subs":{matchNames:["jersey mikes"],tags:{amenity:"fast_food",brand:"Jersey Mike's Subs","brand:wikidata":"Q6184897","brand:wikipedia":"en:Jersey Mike's Subs",cuisine:"sandwich",name:"Jersey Mike's Subs",takeaway:"yes"}},"amenity/fast_food|Jimmy John's":{tags:{amenity:"fast_food",brand:"Jimmy John's","brand:wikidata":"Q1689380","brand:wikipedia":"en:Jimmy John's",cuisine:"sandwich",name:"Jimmy John's",takeaway:"yes"}},"amenity/fast_food|Jollibee":{tags:{amenity:"fast_food",brand:"Jollibee","brand:wikidata":"Q37614","brand:wikipedia":"en:Jollibee",cuisine:"burger",name:"Jollibee",takeaway:"yes"}},"amenity/fast_food|Just Salad":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Just Salad","brand:wikidata":"Q23091823","brand:wikipedia":"en:Just Salad",cuisine:"salad",name:"Just Salad",takeaway:"yes"}},"amenity/fast_food|KFC":{matchNames:["kentucky fried chicken"],tags:{amenity:"fast_food",brand:"KFC","brand:wikidata":"Q524757","brand:wikipedia":"en:KFC",cuisine:"chicken",name:"KFC",takeaway:"yes"}},"amenity/fast_food|Kochlöffel":{countryCodes:["de","pl","tr"],tags:{amenity:"fast_food",brand:"Kochlöffel","brand:wikidata":"Q315539","brand:wikipedia":"en:Kochlöffel",cuisine:"burger",name:"Kochlöffel",takeaway:"yes"}},"amenity/fast_food|Kotipizza":{countryCodes:["fi"],tags:{amenity:"fast_food",brand:"Kotipizza","brand:wikidata":"Q1628625","brand:wikipedia":"en:Kotipizza",cuisine:"pizza",name:"Kotipizza",takeaway:"yes"}},"amenity/fast_food|Krispy Kreme":{tags:{amenity:"fast_food",brand:"Krispy Kreme","brand:wikidata":"Q1192805","brand:wikipedia":"en:Krispy Kreme",cuisine:"donut",name:"Krispy Kreme",takeaway:"yes"}},"amenity/fast_food|Krystal":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Krystal","brand:wikidata":"Q472195","brand:wikipedia":"en:Krystal (restaurant)",cuisine:"burger",name:"Krystal",takeaway:"yes"}},"amenity/fast_food|L&L Drive-Inn~(Hawaii)":{countryCodes:["us"],matchNames:["l&l","l&l drive-in"],tags:{amenity:"fast_food",brand:"L&L Drive-Inn","brand:wikidata":"Q6455441","brand:wikipedia":"en:L&L Hawaiian Barbecue",cuisine:"hawaiian",name:"L&L Drive-Inn",takeaway:"yes"}},"amenity/fast_food|L&L Hawaiian Barbecue":{matchNames:["l&l","l&l hawaiian bbq"],tags:{amenity:"fast_food",brand:"L&L Hawaiian Barbecue","brand:wikidata":"Q6455441","brand:wikipedia":"en:L&L Hawaiian Barbecue",cuisine:"hawaiian",name:"L&L Hawaiian Barbecue",takeaway:"yes"}},"amenity/fast_food|Lee's Sandwiches":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Lee's Sandwiches","brand:wikidata":"Q6512823","brand:wikipedia":"en:Lee's Sandwiches",cuisine:"vietnamese;sandwich",name:"Lee's Sandwiches",takeaway:"yes"}},"amenity/fast_food|Little Caesars":{matchNames:["little caesars pizza"],tags:{amenity:"fast_food",brand:"Little Caesars","brand:wikidata":"Q1393809","brand:wikipedia":"en:Little Caesars",cuisine:"pizza",name:"Little Caesars",takeaway:"yes"}},"amenity/fast_food|Long John Silver's":{tags:{amenity:"fast_food",brand:"Long John Silver's","brand:wikidata":"Q1535221","brand:wikipedia":"en:Long John Silver's",cuisine:"seafood",name:"Long John Silver's",takeaway:"yes"}},"amenity/fast_food|Lotteria":{tags:{amenity:"fast_food",brand:"Lotteria","brand:wikidata":"Q249525","brand:wikipedia":"en:Lotteria",cuisine:"burger",name:"Lotteria",takeaway:"yes"}},"amenity/fast_food|Manchu Wok":{countryCodes:["ca","us"],tags:{amenity:"fast_food",brand:"Manchu Wok","brand:wikidata":"Q6747622","brand:wikipedia":"en:Manchu Wok",cuisine:"chinese",name:"Manchu Wok",takeaway:"yes"}},"amenity/fast_food|Mang Inasal":{countryCodes:["ph"],tags:{amenity:"fast_food",brand:"Mang Inasal","brand:wikidata":"Q6748573","brand:wikipedia":"en:Mang Inasal",cuisine:"barbecue",name:"Mang Inasal",takeaway:"yes"}},"amenity/fast_food|Marmaris":{tags:{amenity:"fast_food",brand:"Marmaris",name:"Marmaris",takeaway:"yes"}},"amenity/fast_food|Max":{tags:{amenity:"fast_food",brand:"Max","brand:wikidata":"Q1912172","brand:wikipedia":"en:Max Hamburgers",cuisine:"burger",name:"Max",takeaway:"yes"}},"amenity/fast_food|McDonald's":{tags:{amenity:"fast_food",brand:"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"en:McDonald's",cuisine:"burger",name:"McDonald's",takeaway:"yes"}},"amenity/fast_food|Mighty Taco":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Mighty Taco","brand:wikidata":"Q6844210","brand:wikipedia":"en:Mighty Taco",cuisine:"mexican",name:"Mighty Taco",takeaway:"yes"}},"amenity/fast_food|Minute Burger":{countryCodes:["ph"],tags:{amenity:"fast_food",brand:"Minute Burger","brand:wikidata":"Q62273503",cuisine:"burger",name:"Minute Burger",takeaway:"yes"}},"amenity/fast_food|Moe's Southwest Grill":{tags:{amenity:"fast_food",brand:"Moe's Southwest Grill","brand:wikidata":"Q6889938","brand:wikipedia":"en:Moe's Southwest Grill",cuisine:"mexican",name:"Moe's Southwest Grill",takeaway:"yes"}},"amenity/fast_food|Mr. Sub":{tags:{amenity:"fast_food",brand:"Mr. Sub","brand:wikidata":"Q6929225","brand:wikipedia":"en:Mr. Sub",cuisine:"sandwich",name:"Mr. Sub",takeaway:"yes"}},"amenity/fast_food|New York Pizza":{countryCodes:["nl"],tags:{amenity:"fast_food",brand:"New York Pizza","brand:wikidata":"Q2639128","brand:wikipedia":"nl:New York Pizza",cuisine:"pizza",name:"New York Pizza",takeaway:"yes"}},"amenity/fast_food|Nordsee":{countryCodes:["at","ch","de"],tags:{amenity:"fast_food",brand:"Nordsee","brand:wikidata":"Q74866","brand:wikipedia":"en:Nordsee",cuisine:"seafood",name:"Nordsee",takeaway:"yes"}},"amenity/fast_food|Num Pang":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Num Pang","brand:wikidata":"Q62079702","brand:wikipedia":"en:Num Pang",cuisine:"cambodian, sandwich",name:"Num Pang",takeaway:"yes"}},"amenity/fast_food|O'Tacos":{tags:{amenity:"fast_food",brand:"O'Tacos","brand:wikidata":"Q28494040","brand:wikipedia":"en:O'Tacos",cuisine:"mexican",name:"O'Tacos",takeaway:"yes"}},"amenity/fast_food|Oporto":{tags:{amenity:"fast_food",brand:"Oporto","brand:wikidata":"Q4412342","brand:wikipedia":"en:Oporto (restaurant)",name:"Oporto",takeaway:"yes"}},"amenity/fast_food|Pal's":{countryCodes:["us"],matchNames:["pals sudden service"],tags:{amenity:"fast_food",brand:"Pal's","brand:wikidata":"Q7126094","brand:wikipedia":"en:Pal's",cuisine:"burger",name:"Pal's",takeaway:"yes"}},"amenity/fast_food|Panago":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Panago","brand:wikidata":"Q17111672","brand:wikipedia":"en:Panago",cuisine:"pizza",name:"Panago",takeaway:"yes"}},"amenity/fast_food|Panda Express":{matchNames:["panda"],tags:{amenity:"fast_food",brand:"Panda Express","brand:wikidata":"Q1358690","brand:wikipedia":"en:Panda Express",cuisine:"chinese",name:"Panda Express",takeaway:"yes"}},"amenity/fast_food|Panera Bread":{tags:{amenity:"fast_food",brand:"Panera Bread","brand:wikidata":"Q7130852","brand:wikipedia":"en:Panera Bread",cuisine:"sandwich",name:"Panera Bread",takeaway:"yes"}},"amenity/fast_food|Papa John's":{matchNames:["papa john","papa john pizza","papa johns pizza"],tags:{amenity:"fast_food",brand:"Papa John's","brand:wikidata":"Q2759586","brand:wikipedia":"en:Papa John's Pizza",cuisine:"pizza",name:"Papa John's",takeaway:"yes"}},"amenity/fast_food|Papa Murphy's":{countryCodes:["ca","us"],matchNames:["papa murphy","papa murphy pizza","papa murphys pizza"],tags:{amenity:"fast_food",brand:"Papa Murphy's","brand:wikidata":"Q7132349","brand:wikipedia":"en:Papa Murphy's",cuisine:"pizza",name:"Papa Murphy's",official_name:"Papa Murphy's Take 'N' Bake Pizza",takeaway:"only"}},"amenity/fast_food|Penn Station":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Penn Station","brand:wikidata":"Q7163311","brand:wikipedia":"en:Penn Station (restaurant)",cuisine:"sandwich",name:"Penn Station",takeaway:"yes"}},"amenity/fast_food|Philly Pretzel Factory":{countryCodes:["us"],matchNames:["philadelphia pretzel factory","philadelphia soft pretzel factory","philly soft pretzel factory"],matchTags:["shop/bakery"],tags:{amenity:"fast_food",brand:"Philly Pretzel Factory","brand:wikidata":"Q60097339",cuisine:"pretzel",name:"Philly Pretzel Factory",takeaway:"yes"}},"amenity/fast_food|Pinulito":{countryCodes:["gt"],tags:{amenity:"fast_food",brand:"Pinulito","brand:wikidata":"Q62273613",cuisine:"chicken",name:"Pinulito",takeaway:"yes"}},"amenity/fast_food|Pita Pit":{tags:{amenity:"fast_food",brand:"Pita Pit","brand:wikidata":"Q7757289","brand:wikipedia":"en:Pita Pit",cuisine:"pita",name:"Pita Pit",takeaway:"yes"}},"amenity/fast_food|Pizza Hut Delivery":{tags:{amenity:"fast_food",brand:"Pizza Hut","brand:wikidata":"Q191615","brand:wikipedia":"en:Pizza Hut",cuisine:"pizza",name:"Pizza Hut Delivery",takeaway:"yes"}},"amenity/fast_food|Pizza Hut Express":{nomatch:["amenity/restaurant|Pizza Hut"],tags:{amenity:"fast_food",brand:"Pizza Hut","brand:wikidata":"Q191615","brand:wikipedia":"en:Pizza Hut",cuisine:"pizza",name:"Pizza Hut Express",takeaway:"yes"}},"amenity/fast_food|Pizza King":{tags:{amenity:"fast_food",brand:"Pizza King",cuisine:"pizza",name:"Pizza King",takeaway:"yes"}},"amenity/fast_food|Pizza Nova":{tags:{amenity:"fast_food",brand:"Pizza Nova","brand:wikidata":"Q7199971","brand:wikipedia":"en:Pizza Nova",cuisine:"pizza",name:"Pizza Nova",takeaway:"yes"}},"amenity/fast_food|Pizza Pizza":{tags:{amenity:"fast_food",brand:"Pizza Pizza","brand:wikidata":"Q1194143","brand:wikipedia":"en:Pizza Pizza",cuisine:"pizza",name:"Pizza Pizza",takeaway:"yes"}},"amenity/fast_food|Pollo Campero":{tags:{amenity:"fast_food",brand:"Pollo Campero","brand:wikidata":"Q942741","brand:wikipedia":"en:Pollo Campero",cuisine:"chicken",name:"Pollo Campero",takeaway:"yes"}},"amenity/fast_food|Pollo Granjero~(Costa Rica)":{countryCodes:["cr"],tags:{amenity:"fast_food",brand:"Pollo Granjero","brand:wikidata":"Q62273665",cuisine:"chicken",name:"Pollo Granjero",takeaway:"yes"}},"amenity/fast_food|Pollo Granjero~(Guatemala)":{countryCodes:["gt"],tags:{amenity:"fast_food",brand:"Pollo Granjero","brand:wikidata":"Q62273652",cuisine:"chicken",name:"Pollo Granjero",takeaway:"yes"}},"amenity/fast_food|Pollo Tropical":{tags:{amenity:"fast_food",brand:"Pollo Tropical","brand:wikidata":"Q3395356","brand:wikipedia":"en:Pollo Tropical",cuisine:"chicken",name:"Pollo Tropical",takeaway:"yes"}},"amenity/fast_food|Popeyes":{matchNames:["popeyes louisiana kitchen"],tags:{amenity:"fast_food",brand:"Popeyes","brand:wikidata":"Q1330910","brand:wikipedia":"en:Popeyes",cuisine:"chicken",name:"Popeyes",official_name:"Popeyes Louisiana Kitchen",takeaway:"yes"}},"amenity/fast_food|Potbelly":{tags:{amenity:"fast_food",brand:"Potbelly","brand:wikidata":"Q7234777","brand:wikipedia":"en:Potbelly Sandwich Shop",cuisine:"sandwich",name:"Potbelly",official_name:"Potbelly Sandwich Works",takeaway:"yes"}},"amenity/fast_food|Pret A Manger":{tags:{amenity:"fast_food",brand:"Pret A Manger","brand:wikidata":"Q2109109","brand:wikipedia":"en:Pret a Manger",cuisine:"sandwich",name:"Pret A Manger",takeaway:"yes"}},"amenity/fast_food|Qdoba":{matchNames:["qdoba mexican grill"],tags:{amenity:"fast_food",brand:"Qdoba","brand:wikidata":"Q1363885","brand:wikipedia":"en:Qdoba",cuisine:"mexican",name:"Qdoba",official_name:"Qdoba Mexican Grill",takeaway:"yes"}},"amenity/fast_food|Quick":{tags:{amenity:"fast_food",brand:"Quick","brand:wikidata":"Q286494","brand:wikipedia":"en:Quick (restaurant)",cuisine:"burger",name:"Quick",takeaway:"yes"}},"amenity/fast_food|Quiznos":{matchNames:["quiznos sub","quiznos subs"],tags:{amenity:"fast_food",brand:"Quiznos","brand:wikidata":"Q1936229","brand:wikipedia":"en:Quiznos",cuisine:"sandwich",name:"Quiznos",takeaway:"yes"}},"amenity/fast_food|Raising Cane's":{countryCodes:["us"],matchNames:["raising canes chicken fingers"],tags:{amenity:"fast_food",brand:"Raising Cane's","brand:wikidata":"Q7285144","brand:wikipedia":"en:Raising Cane's Chicken Fingers",cuisine:"chicken",name:"Raising Cane's",official_name:"Raising Cane's Chicken Fingers",takeaway:"yes"}},"amenity/fast_food|Rally's":{tags:{amenity:"fast_food",brand:"Rally's","brand:wikidata":"Q63919323",cuisine:"burger",name:"Rally's",takeaway:"yes"}},"amenity/fast_food|Red Rooster":{countryCodes:["au"],tags:{amenity:"fast_food",brand:"Red Rooster","brand:wikidata":"Q376466","brand:wikipedia":"en:Red Rooster",cuisine:"chicken",name:"Red Rooster",takeaway:"yes"}},"amenity/fast_food|Roy Rogers":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Roy Rogers","brand:wikidata":"Q7373311","brand:wikipedia":"en:Roy Rogers Restaurants",cuisine:"burger;sandwich;chicken",name:"Roy Rogers",takeaway:"yes"}},"amenity/fast_food|Sbarro":{tags:{amenity:"fast_food",brand:"Sbarro","brand:wikidata":"Q2589409","brand:wikipedia":"en:Sbarro",cuisine:"pizza",name:"Sbarro",takeaway:"yes"}},"amenity/fast_food|Schlotzsky's":{countryCodes:["us"],matchNames:["schlotzskys deli"],tags:{amenity:"fast_food",brand:"Schlotzsky's","brand:wikidata":"Q2244796","brand:wikipedia":"en:Schlotzsky's",cuisine:"sandwich",name:"Schlotzsky's",takeaway:"yes"}},"amenity/fast_food|Shake Shack":{tags:{amenity:"fast_food",brand:"Shake Shack","brand:wikidata":"Q1058722","brand:wikipedia":"en:Shake Shack",cuisine:"burger",name:"Shake Shack",takeaway:"yes"}},"amenity/fast_food|Sibylla":{countryCodes:["fi","se"],tags:{amenity:"fast_food",brand:"Sibylla","brand:wikidata":"Q488643","brand:wikipedia":"en:Sibylla (fast food)",cuisine:"burger",name:"Sibylla",takeaway:"yes"}},"amenity/fast_food|Smashburger":{tags:{amenity:"fast_food",brand:"Smashburger","brand:wikidata":"Q17061332","brand:wikipedia":"en:Smashburger",cuisine:"burger",name:"Smashburger",takeaway:"yes"}},"amenity/fast_food|Smoothie King":{tags:{amenity:"fast_food",brand:"Smoothie King","brand:wikidata":"Q5491421","brand:wikipedia":"en:Smoothie King",cuisine:"juice",name:"Smoothie King",takeaway:"yes"}},"amenity/fast_food|Sonic":{matchNames:["sonic drive in"],nomatch:["amenity/fuel|Sonic"],tags:{amenity:"fast_food",brand:"Sonic","brand:wikidata":"Q7561808","brand:wikipedia":"en:Sonic Drive-In",cuisine:"burger",name:"Sonic",takeaway:"yes"}},"amenity/fast_food|Steak Escape":{tags:{amenity:"fast_food",brand:"Steak Escape","brand:wikidata":"Q7605235","brand:wikipedia":"en:Steak Escape",cuisine:"sandwich",name:"Steak Escape",takeaway:"yes"}},"amenity/fast_food|Steers":{tags:{amenity:"fast_food",brand:"Steers","brand:wikidata":"Q56599145","brand:wikipedia":"en:Steers",cuisine:"burger",name:"Steers",takeaway:"yes"}},"amenity/fast_food|Subway":{matchNames:["subway sandwiches"],tags:{amenity:"fast_food",brand:"Subway","brand:wikidata":"Q244457","brand:wikipedia":"en:Subway (restaurant)",cuisine:"sandwich",name:"Subway",takeaway:"yes"}},"amenity/fast_food|Supermac's":{countryCodes:["gb","ie"],tags:{amenity:"fast_food",brand:"Supermac's","brand:wikidata":"Q7643750","brand:wikipedia":"en:Supermac's",cuisine:"burger",name:"Supermac's",takeaway:"yes"}},"amenity/fast_food|TCBY":{tags:{amenity:"fast_food",brand:"TCBY","brand:wikidata":"Q7669631","brand:wikipedia":"en:TCBY",cuisine:"frozen_yogurt",name:"TCBY",takeaway:"yes"}},"amenity/fast_food|Taco Bell":{tags:{amenity:"fast_food",brand:"Taco Bell","brand:wikidata":"Q752941","brand:wikipedia":"en:Taco Bell",cuisine:"tex-mex",name:"Taco Bell",takeaway:"yes"}},"amenity/fast_food|Taco Bueno":{tags:{amenity:"fast_food",brand:"Taco Bueno","brand:wikidata":"Q7673958","brand:wikipedia":"en:Taco Bueno",cuisine:"mexican",name:"Taco Bueno",takeaway:"yes"}},"amenity/fast_food|Taco Cabana":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Taco Cabana","brand:wikidata":"Q12070488","brand:wikipedia":"en:Taco Cabana",cuisine:"mexican",name:"Taco Cabana",takeaway:"yes"}},"amenity/fast_food|Taco Del Mar":{tags:{amenity:"fast_food",brand:"Taco Del Mar","brand:wikidata":"Q7673972","brand:wikipedia":"en:Taco del Mar",cuisine:"mexican",name:"Taco Del Mar",takeaway:"yes"}},"amenity/fast_food|Taco John's":{tags:{amenity:"fast_food",brand:"Taco John's","brand:wikidata":"Q7673962","brand:wikipedia":"en:Taco John's",cuisine:"mexican",name:"Taco John's",takeaway:"yes"}},"amenity/fast_food|Taco Time":{tags:{amenity:"fast_food",brand:"Taco Time","brand:wikidata":"Q7673969","brand:wikipedia":"en:Taco Time",cuisine:"mexican",name:"Taco Time",takeaway:"yes"}},"amenity/fast_food|Ted’s Hot Dogs":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Ted’s Hot Dogs","brand:wikidata":"Q7692930","brand:wikipedia":"en:Ted's Hot Dogs",cuisine:"sausage",name:"Ted’s Hot Dogs",takeaway:"yes"}},"amenity/fast_food|Telepizza":{tags:{amenity:"fast_food",brand:"Telepizza","brand:wikidata":"Q2699863","brand:wikipedia":"en:Telepizza",cuisine:"pizza",name:"Telepizza",takeaway:"yes"}},"amenity/fast_food|Texas Chicken":{tags:{amenity:"fast_food",brand:"Texas Chicken",cuisine:"chicken",name:"Texas Chicken",takeaway:"yes"}},"amenity/fast_food|Thai Express~(Singapore)":{countryCodes:["sg"],nomatch:["amenity/fast_food|Thaï Express~(North America)"],tags:{amenity:"fast_food",brand:"Thai Express","brand:wikidata":"Q7709119","brand:wikipedia":"en:Thai Express",cuisine:"thai",name:"Thai Express",takeaway:"yes"}},"amenity/fast_food|Thaï Express~(North America)":{countryCodes:["ca","us"],matchNames:["thai express"],nomatch:["amenity/fast_food|Thai Express~(Singapore)"],tags:{amenity:"fast_food",brand:"Thaï Express","brand:wikidata":"Q7711610","brand:wikipedia":"en:Thaï Express",cuisine:"thai",name:"Thaï Express",takeaway:"yes"}},"amenity/fast_food|The Habit Burger Grill":{countryCodes:["us"],matchNames:["habit burger","the habit burger"],tags:{amenity:"fast_food",brand:"The Habit Burger Grill","brand:wikidata":"Q18158741","brand:wikipedia":"en:The Habit Burger Grill",cuisine:"burger",name:"The Habit Burger Grill",takeaway:"yes"}},"amenity/fast_food|The Pizza Company":{tags:{amenity:"fast_food",brand:"The Pizza Company","brand:wikidata":"Q2413520","brand:wikipedia":"en:The Pizza Company",cuisine:"pizza",name:"The Pizza Company",takeaway:"yes"}},"amenity/fast_food|Togo's":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Togo's","brand:wikidata":"Q3530375","brand:wikipedia":"en:Togo's",cuisine:"sandwich",name:"Togo's",takeaway:"yes"}},"amenity/fast_food|Veggie Grill":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Veggie Grill","brand:wikidata":"Q18636427","brand:wikipedia":"en:Veggie Grill",cuisine:"american","diet:vegan":"only",name:"Veggie Grill",takeaway:"yes"}},"amenity/fast_food|Wahoo's Fish Taco":{countryCodes:["us"],matchNames:["wahoo's"],tags:{amenity:"fast_food",brand:"Wahoo's Fish Taco","brand:wikidata":"Q7959827","brand:wikipedia":"en:Wahoo's Fish Taco",cuisine:"seafood",name:"Wahoo's Fish Taco",takeaway:"yes"}},"amenity/fast_food|Wendy's":{tags:{amenity:"fast_food",brand:"Wendy's","brand:wikidata":"Q550258","brand:wikipedia":"en:Wendy's",cuisine:"burger",name:"Wendy's",takeaway:"yes"}},"amenity/fast_food|Whataburger":{tags:{amenity:"fast_food",brand:"Whataburger","brand:wikidata":"Q376627","brand:wikipedia":"en:Whataburger",cuisine:"burger",name:"Whataburger",takeaway:"yes"}},"amenity/fast_food|Which Wich?":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Which Wich?","brand:wikidata":"Q7993556","brand:wikipedia":"en:Which Wich?",cuisine:"sandwich",name:"Which Wich?",takeaway:"yes"}},"amenity/fast_food|White Castle":{tags:{amenity:"fast_food",brand:"White Castle","brand:wikidata":"Q1244034","brand:wikipedia":"en:White Castle (restaurant)",cuisine:"burger",name:"White Castle",takeaway:"yes"}},"amenity/fast_food|Wienerschnitzel":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Wienerschnitzel","brand:wikidata":"Q324679","brand:wikipedia":"en:Wienerschnitzel",cuisine:"hot_dog",name:"Wienerschnitzel",takeaway:"yes"}},"amenity/fast_food|Wimpy":{tags:{amenity:"fast_food",brand:"Wimpy","brand:wikidata":"Q2811992","brand:wikipedia":"en:Wimpy (restaurant)",cuisine:"burger",name:"Wimpy",takeaway:"yes"}},"amenity/fast_food|Xi'an Famous Foods":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Xi'an Famous Foods","brand:wikidata":"Q8044020","brand:wikipedia":"en:Xi'an Famous Foods",cuisine:"chinese",name:"Xi'an Famous Foods",takeaway:"yes"}},"amenity/fast_food|Zaxby's":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Zaxby's","brand:wikidata":"Q8067525","brand:wikipedia":"en:Zaxby's",cuisine:"chicken",name:"Zaxby's",takeaway:"yes"}},"amenity/fast_food|immergrün":{countryCodes:["de"],matchNames:["immergün"],tags:{amenity:"fast_food",brand:"immergrün","brand:wikidata":"Q62589254",cuisine:"sandwich;salad;juice",name:"immergün",takeaway:"yes"}},"amenity/fast_food|Γρηγόρης":{countryCodes:["gr"],tags:{amenity:"fast_food",brand:"Γρηγόρης","brand:wikidata":"Q62273834",cuisine:"sandwich",name:"Γρηγόρης",takeaway:"yes"}},"amenity/fast_food|Бургер Кинг":{tags:{amenity:"fast_food",brand:"Бургер Кинг","brand:en":"Burger King","brand:wikidata":"Q177054","brand:wikipedia":"en:Burger King",cuisine:"burger",name:"Бургер Кинг","name:en":"Burger King",takeaway:"yes"}},"amenity/fast_food|Домино’c Пицца":{tags:{amenity:"fast_food",brand:"Домино’c Пицца",name:"Домино’c Пицца",takeaway:"yes"}},"amenity/fast_food|Крошка Картошка":{countryCodes:["ru"],tags:{amenity:"fast_food",brand:"Крошка Картошка","brand:wikidata":"Q4241838","brand:wikipedia":"ru:Крошка Картошка",cuisine:"potato",name:"Крошка Картошка",takeaway:"yes"}},"amenity/fast_food|Макдоналдс":{tags:{amenity:"fast_food",brand:"Макдоналдс","brand:en":"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"en:McDonald's",cuisine:"burger",name:"Макдоналдс","name:en":"McDonald's",takeaway:"yes"}},"amenity/fast_food|Папа Джонс":{tags:{amenity:"fast_food",brand:"Папа Джонс","brand:en":"Papa John's","brand:wikidata":"Q2759586","brand:wikipedia":"ru:Papa John’s",cuisine:"pizza",name:"Папа Джонс","name:en":"Papa John's",takeaway:"yes"}},"amenity/fast_food|Робин Сдобин":{countryCodes:["ru"],tags:{amenity:"fast_food",brand:"Робин Сдобин","brand:wikidata":"Q62273880",cuisine:"burger",name:"Робин Сдобин",takeaway:"yes"}},"amenity/fast_food|Русский Аппетит":{countryCodes:["ru"],tags:{amenity:"fast_food",brand:"Русский Аппетит","brand:wikidata":"Q62086063",cuisine:"sandwich;salad;regional",name:"Русский Аппетит",takeaway:"yes"}},"amenity/fast_food|Стардог!s":{countryCodes:["ru"],tags:{amenity:"fast_food",brand:"Стардог!s","brand:en":"Stardog!s","brand:wikidata":"Q4439856","brand:wikipedia":"ru:Стардогс",cuisine:"sausage",name:"Стардог!s","name:en":"Stardog!s",takeaway:"yes"}},"amenity/fast_food|Суши Wok":{countryCodes:["ru","ua"],matchTags:["shop/convenience"],tags:{amenity:"fast_food",brand:"Суши Wok","brand:en":"Sushi Wok","brand:wikidata":"Q25444754","brand:wikipedia":"uk:Суши Wok (мережа магазинів)",cuisine:"asian",name:"Суши Wok","name:en":"Sushi Wok",takeaway:"yes"}},"amenity/fast_food|Теремок":{countryCodes:["ru"],matchTags:["shop/convenience"],tags:{amenity:"fast_food",brand:"Теремок","brand:en":"Teremok","brand:wikidata":"Q4455593","brand:wikipedia":"ru:Теремок (сеть быстрого питания)",cuisine:"crepe;russian",name:"Теремок","name:en":"Teremok",takeaway:"yes"}},"amenity/fast_food|מקדונלד'ס":{countryCodes:["il"],tags:{amenity:"fast_food",brand:"מקדונלד'ס","brand:en":"McDonald's","brand:he":"מקדונלד'ס","brand:wikidata":"Q12061542","brand:wikipedia":"en:McDonald's Israel",cuisine:"burger",name:"מקדונלד'ס","name:en":"McDonald's","name:he":"מקדונלד'ס",takeaway:"yes"}},"amenity/fast_food|دجاج كنتاكي":{tags:{amenity:"fast_food",brand:"دجاج كنتاكي","brand:ar":"دجاج كنتاكي","brand:en":"KFC","brand:wikidata":"Q524757","brand:wikipedia":"ar:دجاج كنتاكي",cuisine:"chicken",name:"دجاج كنتاكي","name:ar":"دجاج كنتاكي","name:en":"KFC",takeaway:"yes"}},"amenity/fast_food|ماكدونالدز":{tags:{amenity:"fast_food",brand:"ماكدونالدز","brand:ar":"ماكدونالدز","brand:en":"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"ar:ماكدونالدز",cuisine:"burger",name:"ماكدونالدز","name:ar":"ماكدونالدز","name:en":"McDonald's",takeaway:"yes"}},"amenity/fast_food|かっぱ寿司":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"かっぱ寿司","brand:en":"Kappazushi","brand:ja":"かっぱ寿司","brand:wikidata":"Q11263916","brand:wikipedia":"ja:かっぱ寿司",cuisine:"sushi",name:"かっぱ寿司","name:en":"Kappazushi","name:ja":"かっぱ寿司",takeaway:"yes"}},"amenity/fast_food|かつや":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"かつや","brand:en":"Katsuya","brand:ja":"かつや","brand:wikidata":"Q2855257","brand:wikipedia":"ja:かつや",cuisine:"fried_food",name:"かつや","name:en":"Katsuya","name:ja":"かつや","name:ko":"카쯔야","name:zh":"吉豚屋",takeaway:"yes"}},"amenity/fast_food|くら寿司":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"くら寿司","brand:en":"Kurazushi","brand:ja":"くら寿司","brand:wikidata":"Q6445491","brand:wikipedia":"ja:くら寿司",cuisine:"sushi",name:"くら寿司","name:en":"Kurazushi","name:ja":"くら寿司",takeaway:"yes"}},"amenity/fast_food|すき家":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"すき家","brand:en":"Sukiya","brand:ja":"すき家","brand:wikidata":"Q6137375","brand:wikipedia":"ja:すき家",cuisine:"beef_bowl",name:"すき家","name:en":"Sukiya","name:ja":"すき家",takeaway:"yes"}},"amenity/fast_food|なか卯":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"なか卯","brand:en":"Nakau","brand:ja":"なか卯","brand:wikidata":"Q11274132","brand:wikipedia":"ja:なか卯",cuisine:"udon",name:"なか卯","name:en":"Nakau","name:ja":"なか卯",takeaway:"yes"}},"amenity/fast_food|はま寿司":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"はま寿司","brand:en":"Hamazushi","brand:ja":"はま寿司","brand:wikidata":"Q17220385","brand:wikipedia":"ja:はま寿司",cuisine:"sushi",name:"はま寿司","name:en":"Hamazushi","name:ja":"はま寿司",takeaway:"yes"}},"amenity/fast_food|ほっかほっか亭":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"ほっかほっか亭","brand:en":"Hokka Hokka Tei","brand:ja":"ほっかほっか亭","brand:wikidata":"Q5878035","brand:wikipedia":"ja:ほっかほっか亭",cuisine:"japanese",name:"ほっかほっか亭","name:en":"Hokka Hokka Tei","name:ja":"ほっかほっか亭",takeaway:"yes"}},"amenity/fast_food|ほっともっと":{countryCodes:["jp"],nomatch:["shop/deli|ほっともっと"],tags:{amenity:"fast_food",brand:"ほっともっと","brand:en":"Hotto Motto","brand:ja":"ほっともっと","brand:wikidata":"Q10850949","brand:wikipedia":"ja:ほっともっと",cuisine:"japanese",name:"ほっともっと","name:en":"Hotto Motto","name:ja":"ほっともっと",takeaway:"yes"}},"amenity/fast_food|ゆで太郎":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"ゆで太郎","brand:en":"Yudetaro","brand:ja":"ゆで太郎","brand:wikidata":"Q11280824","brand:wikipedia":"ja:ゆで太郎",cuisine:"noodle",name:"ゆで太郎","name:en":"Yudetaro","name:ja":"ゆで太郎",takeaway:"yes"}},"amenity/fast_food|オリジン弁当":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"オリジン弁当","brand:en":"Origin Bentō","brand:ja":"オリジン弁当","brand:wikidata":"Q11292632","brand:wikipedia":"ja:オリジン東秀",cuisine:"japanese",name:"オリジン弁当","name:en":"Origin Bentō","name:ja":"オリジン弁当",takeaway:"yes"}},"amenity/fast_food|ケンタッキーフライドチキン":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"ケンタッキーフライドチキン","brand:en":"KFC","brand:ja":"ケンタッキーフライドチキン","brand:wikidata":"Q524757","brand:wikipedia":"ja:KFCコーポレーション",cuisine:"chicken",name:"ケンタッキーフライドチキン","name:en":"KFC","name:ja":"ケンタッキーフライドチキン",takeaway:"yes"}},"amenity/fast_food|サブウェイ":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"サブウェイ","brand:en":"Subway","brand:ja":"サブウェイ","brand:wikidata":"Q244457","brand:wikipedia":"ja:サブウェイ",cuisine:"sandwich",name:"サブウェイ","name:en":"Subway","name:ja":"サブウェイ",takeaway:"yes"}},"amenity/fast_food|スシロー":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"スシロー","brand:en":"Sushiro","brand:ja":"スシロー","brand:wikidata":"Q11257037","brand:wikipedia":"ja:あきんどスシロー",cuisine:"sushi",name:"スシロー","name:en":"Sushiro","name:ja":"スシロー","name:zh":"壽司郎",takeaway:"yes"}},"amenity/fast_food|ドミノ・ピザ":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"ドミノ・ピザ","brand:en":"Domino's Pizza","brand:ja":"ドミノ・ピザ","brand:wikidata":"Q839466","brand:wikipedia":"ja:ドミノ・ピザ",cuisine:"pizza",name:"ドミノ・ピザ","name:en":"Domino's Pizza","name:ja":"ドミノ・ピザ",takeaway:"yes"}},"amenity/fast_food|ピザハット":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"ピザハット","brand:en":"Pizza Hut","brand:ja":"ピザハット","brand:wikidata":"Q191615","brand:wikipedia":"ja:ピザハット",cuisine:"pizza",name:"ピザハット","name:en":"Pizza Hut","name:ja":"ピザハット",takeaway:"yes"}},"amenity/fast_food|ピザ・カリフォルニア":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"ピザ・カリフォルニア","brand:en":"Pizza California","brand:ja":"ピザ・カリフォルニア","brand:wikidata":"Q75324","brand:wikipedia":"ja:ピザ・カリフォルニア",cuisine:"pizza",name:"ピザ・カリフォルニア","name:en":"Pizza California","name:ja":"ピザ・カリフォルニア",takeaway:"yes"}},"amenity/fast_food|ピザーラ":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"ピザーラ","brand:en":"Pizza-La","brand:ja":"ピザーラ","brand:wikidata":"Q7199948","brand:wikipedia":"ja:ピザーラ",cuisine:"pizza",name:"ピザーラ","name:en":"Pizza-La","name:ja":"ピザーラ",takeaway:"yes"}},"amenity/fast_food|フレッシュネスバーガー":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"フレッシュネスバーガー","brand:en":"Freshness Burger","brand:ja":"フレッシュネスバーガー","brand:wikidata":"Q5503087","brand:wikipedia":"ja:フレッシュネスバーガー",cuisine:"burger",name:"フレッシュネスバーガー","name:en":"Freshness Burger","name:ja":"フレッシュネスバーガー",takeaway:"yes"}},"amenity/fast_food|マクドナルド":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"マクドナルド","brand:en":"McDonald's","brand:ja":"マクドナルド","brand:wikidata":"Q38076","brand:wikipedia":"ja:マクドナルド",cuisine:"burger",name:"マクドナルド","name:en":"McDonald's","name:ja":"マクドナルド",takeaway:"yes"}},"amenity/fast_food|ミスタードーナツ":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"ミスタードーナツ","brand:en":"Mister Donut","brand:ja":"ミスタードーナツ","brand:wikidata":"Q1065819","brand:wikipedia":"en:Mister Donut",cuisine:"donut",name:"ミスタードーナツ","name:en":"Mister Donut","name:ja":"ミスタードーナツ",takeaway:"yes"}},"amenity/fast_food|モスバーガー":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"モスバーガー","brand:en":"MOS Burger","brand:ja":"モスバーガー","brand:wikidata":"Q1204169","brand:wikipedia":"ja:モスバーガー",cuisine:"burger",name:"モスバーガー","name:en":"MOS Burger","name:ja":"モスバーガー",takeaway:"yes"}},"amenity/fast_food|ラーメン二郎":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"ラーメン二郎","brand:en":"Ramen Jiro","brand:ja":"ラーメン二郎","brand:wikidata":"Q11347765","brand:wikipedia":"ja:ラーメン二郎",cuisine:"ramen",name:"ラーメン二郎","name:en":"Ramen Jiro","name:ja":"ラーメン二郎",takeaway:"yes"}},"amenity/fast_food|ロッテリア":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"ロッテリア","brand:en":"Lotteria","brand:ja":"ロッテリア","brand:wikidata":"Q249525","brand:wikipedia":"ja:ロッテリア",cuisine:"burger",name:"ロッテリア","name:en":"Lotteria","name:ja":"ロッテリア",takeaway:"yes"}},"amenity/fast_food|吉野家":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"吉野家","brand:en":"Yoshinoya","brand:ja":"吉野家","brand:wikidata":"Q776272","brand:wikipedia":"ja:吉野家",cuisine:"beef_bowl",name:"吉野家","name:en":"Yoshinoya","name:ja":"吉野家",takeaway:"yes"}},"amenity/fast_food|富士そば":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"富士そば","brand:en":"Fuji Soba","brand:ja":"富士そば","brand:wikidata":"Q11414722","brand:wikipedia":"ja:名代富士そば",cuisine:"soba",name:"富士そば","name:en":"Fuji Soba","name:ja":"富士そば",takeaway:"yes"}},"amenity/fast_food|幸楽苑":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"幸楽苑","brand:en":"Kourakuen","brand:ja":"幸楽苑","brand:wikidata":"Q11484003","brand:wikipedia":"ja:幸楽苑",cuisine:"ramen",name:"幸楽苑","name:en":"Kourakuen","name:ja":"幸楽苑",takeaway:"yes"}},"amenity/fast_food|摩斯漢堡":{countryCodes:["cn","hk","mo","sg","tw"],tags:{amenity:"fast_food",brand:"摩斯漢堡","brand:en":"MOS Burger","brand:wikidata":"Q1204169","brand:wikipedia":"zh:摩斯漢堡","brand:zh":"摩斯漢堡",cuisine:"burger",name:"摩斯漢堡","name:en":"MOS Burger","name:zh":"摩斯漢堡",takeaway:"yes"}},"amenity/fast_food|日高屋":{tags:{amenity:"fast_food",brand:"日高屋","brand:en":"Hidakaya","brand:wikidata":"Q11326050","brand:wikipedia":"ja:ハイデイ日高",cuisine:"noodle",name:"日高屋",takeaway:"yes"}},"amenity/fast_food|松屋":{countryCodes:["cn","hk","jp","mo","sg","tw"],tags:{amenity:"fast_food",brand:"松屋","brand:en":"Matsuya Foods","brand:wikidata":"Q848773","brand:wikipedia":"ja:松屋フーズ",cuisine:"japanese",name:"松屋","name:en":"Matsuya Foods",takeaway:"yes"}},"amenity/fast_food|箱根そば":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"箱根そば","brand:en":"Hakone Soba","brand:ja":"箱根そば","brand:wikidata":"Q11603345","brand:wikipedia":"ja:箱根そば",cuisine:"soba",name:"箱根そば","name:en":"Hakone Soba","name:ja":"箱根そば",takeaway:"yes"}},"amenity/fast_food|肯德基":{countryCodes:["cn","hk","mo","sg","tw"],tags:{amenity:"fast_food",brand:"肯德基","brand:en":"KFC","brand:wikidata":"Q524757","brand:wikipedia":"zh:肯德基",cuisine:"chicken",name:"肯德基","name:en":"KFC",takeaway:"yes"}},"amenity/fast_food|麥當勞":{countryCodes:["hk","mo","tw"],tags:{amenity:"fast_food",brand:"麥當勞","brand:en":"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"zh_classical:麥當勞",cuisine:"burger",name:"麥當勞","name:en":"McDonald's",takeaway:"yes"}},"amenity/fast_food|麦当劳":{countryCodes:["cn","sg"],tags:{amenity:"fast_food",brand:"麦当劳","brand:en":"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"zh:麦当劳",cuisine:"burger",name:"麦当劳","name:en":"McDonald's",takeaway:"yes"}},"amenity/fast_food|롯데리아":{countryCodes:["kr"],tags:{amenity:"fast_food",brand:"롯데리아","brand:en":"Lotteria","brand:ko":"롯데리아","brand:wikidata":"Q249525","brand:wikipedia":"ko:롯데리아",cuisine:"burger",name:"롯데리아","name:en":"Lotteria","name:ko":"롯데리아",takeaway:"yes"}},"amenity/fast_food|맘스터치":{countryCodes:["kr"],tags:{amenity:"fast_food",brand:"맘스터치","brand:ko":"맘스터치",cuisine:"burger",name:"맘스터치","name:ko":"맘스터치",takeaway:"yes"}},"amenity/fast_food|맥도날드":{countryCodes:["kr"],tags:{amenity:"fast_food",brand:"맥도날드","brand:ko":"맥도날드",name:"맥도날드","name:ko":"맥도날드",takeaway:"yes"}},"amenity/fuel|1-2-3":{tags:{amenity:"fuel",brand:"1-2-3","brand:wikidata":"Q4545742","brand:wikipedia":"en:1-2-3 (fuel station)",name:"1-2-3"}},"amenity/fuel|7-Eleven":{matchNames:["7-11","seven eleven"],nomatch:["shop/convenience|7-Eleven"],tags:{amenity:"fuel",brand:"7-Eleven","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"7-Eleven"}},"amenity/fuel|76":{nomatch:["shop/convenience|76"],tags:{amenity:"fuel",brand:"76","brand:wikidata":"Q1658320","brand:wikipedia":"en:76 (gas station)",name:"76"}},"amenity/fuel|ABC":{countryCodes:["fi"],nomatch:["shop/convenience|ABC"],tags:{amenity:"fuel",brand:"ABC","brand:wikidata":"Q10397504","brand:wikipedia":"fi:ABC-ketju",name:"ABC"}},"amenity/fuel|ADNOC":{countryCodes:["ae"],tags:{amenity:"fuel",brand:"ADNOC","brand:wikidata":"Q166729","brand:wikipedia":"en:Abu Dhabi National Oil Company",name:"ADNOC"}},"amenity/fuel|ANP":{tags:{amenity:"fuel",brand:"ANP",name:"ANP"}},"amenity/fuel|Aegean":{countryCodes:["gr"],tags:{amenity:"fuel",brand:"Aegean","brand:wikidata":"Q28146598","brand:wikipedia":"el:Aegean Oil",name:"Aegean"}},"amenity/fuel|Afriquia":{tags:{amenity:"fuel",brand:"Afriquia","brand:wikidata":"Q2829178","brand:wikipedia":"en:Akwa Group",name:"Afriquia"}},"amenity/fuel|Agil":{tags:{amenity:"fuel",brand:"Agil",name:"Agil"}},"amenity/fuel|Agip":{tags:{amenity:"fuel",brand:"Agip","brand:wikidata":"Q377915","brand:wikipedia":"en:Agip",name:"Agip"}},"amenity/fuel|Agrola":{tags:{amenity:"fuel",brand:"Agrola","brand:wikidata":"Q397351","brand:wikipedia":"de:Agrola",name:"Agrola"}},"amenity/fuel|Alon":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Alon","brand:wikidata":"Q62274304",name:"Alon"}},"amenity/fuel|Alpet":{countryCodes:["al","tr"],tags:{amenity:"fuel",brand:"Alpet","brand:wikidata":"Q62131561",name:"Alpet"}},"amenity/fuel|Api":{tags:{amenity:"fuel",brand:"Api","brand:wikidata":"Q466043","brand:wikipedia":"en:American Petroleum Institute",name:"Api"}},"amenity/fuel|Aral":{countryCodes:["de"],matchNames:["aral tankstelle"],nomatch:["shop/convenience|Aral"],tags:{amenity:"fuel",brand:"Aral","brand:wikidata":"Q565734","brand:wikipedia":"en:Aral AG",name:"Aral"}},"amenity/fuel|Arco":{tags:{amenity:"fuel",brand:"Arco","brand:wikidata":"Q304769","brand:wikipedia":"en:ARCO",name:"Arco"}},"amenity/fuel|Asda":{countryCodes:["gb"],nomatch:["shop/supermarket|ASDA","shop/supermarket|Asda"],tags:{amenity:"fuel",brand:"Asda","brand:wikidata":"Q297410","brand:wikipedia":"en:Asda",name:"Asda"}},"amenity/fuel|Atem":{countryCodes:["br"],matchNames:["posto atem"],tags:{amenity:"fuel",brand:"Atem","brand:wikidata":"Q62332255",name:"Atem"}},"amenity/fuel|Auchan":{nomatch:["shop/supermarket|Auchan"],tags:{amenity:"fuel",brand:"Auchan","brand:wikidata":"Q758603","brand:wikipedia":"en:Auchan",name:"Auchan"}},"amenity/fuel|Avanti":{countryCodes:["at"],tags:{amenity:"fuel",brand:"Avanti","brand:wikidata":"Q168238","brand:wikipedia":"en:OMV",name:"Avanti"}},"amenity/fuel|Avia":{matchNames:["station avia"],tags:{amenity:"fuel",brand:"Avia","brand:wikidata":"Q300147","brand:wikipedia":"de:Avia International",name:"Avia"}},"amenity/fuel|Avin":{countryCodes:["gr"],tags:{amenity:"fuel",brand:"Avin","brand:wikidata":"Q19903165","brand:wikipedia":"en:Avin International",name:"Avin"}},"amenity/fuel|Axion":{countryCodes:["ar","py","uy"],tags:{amenity:"fuel",brand:"Axion","brand:wikidata":"Q62131749",name:"Axion"}},"amenity/fuel|Aytemiz":{countryCodes:["tr"],tags:{amenity:"fuel",brand:"Aytemiz","brand:wikidata":"Q62274352",name:"Aytemiz"}},"amenity/fuel|BEBECO":{countryCodes:["ch"],tags:{amenity:"fuel",brand:"BEBECO","brand:wikidata":"Q62274373",name:"BEBECO"}},"amenity/fuel|BHPetrol":{countryCodes:["my"],tags:{amenity:"fuel",brand:"BHPetrol","brand:wikidata":"Q62274381",name:"BHPetrol"}},"amenity/fuel|BP":{nomatch:["shop/convenience|BP Shop"],tags:{amenity:"fuel",brand:"BP","brand:wikidata":"Q152057","brand:wikipedia":"en:BP",name:"BP"}},"amenity/fuel|BR":{countryCodes:["br"],matchNames:["br petrobras","petrobras","posto br"],tags:{amenity:"fuel",brand:"BR","brand:wikidata":"Q4836468","brand:wikipedia":"pt:Petrobras Distribuidora",name:"BR"}},"amenity/fuel|Bangchak":{tags:{amenity:"fuel",brand:"Bangchak","brand:wikidata":"Q6579719","brand:wikipedia":"zh:曼差石油股份",name:"Bangchak"}},"amenity/fuel|Bharat Petroleum":{countryCodes:["in"],tags:{amenity:"fuel",brand:"Bharat Petroleum","brand:wikidata":"Q854826","brand:wikipedia":"en:Bharat Petroleum",name:"Bharat Petroleum"}},"amenity/fuel|Biomax":{countryCodes:["co"],tags:{amenity:"fuel",brand:"Biomax","brand:wikidata":"Q62274413",name:"Biomax"}},"amenity/fuel|Bliska":{countryCodes:["pl"],tags:{amenity:"fuel",brand:"Bliska","brand:wikidata":"Q4016378","brand:wikipedia":"pl:Bliska",name:"Bliska"}},"amenity/fuel|CAMPSA":{countryCodes:["es"],tags:{amenity:"fuel",brand:"CAMPSA","brand:wikidata":"Q1031623","brand:wikipedia":"en:Campsa",name:"CAMPSA"}},"amenity/fuel|CEPSA":{tags:{amenity:"fuel",brand:"CEPSA","brand:wikidata":"Q608819","brand:wikipedia":"en:Cepsa",name:"CEPSA"}},"amenity/fuel|Caltex":{tags:{amenity:"fuel",brand:"Caltex","brand:wikidata":"Q277470","brand:wikipedia":"en:Caltex",name:"Caltex"}},"amenity/fuel|Canadian Tire Gas+":{matchNames:["canadian tire","canadian tire gas bar"],nomatch:["shop/department_store|Canadian Tire"],tags:{amenity:"fuel",brand:"Canadian Tire","brand:wikidata":"Q1032400","brand:wikipedia":"en:Canadian Tire",name:"Canadian Tire"}},"amenity/fuel|Carrefour":{tags:{amenity:"fuel",brand:"Carrefour",name:"Carrefour"}},"amenity/fuel|Carrefour Market":{nomatch:["shop/supermarket|Carrefour Market"],tags:{amenity:"fuel",brand:"Carrefour Market","brand:wikidata":"Q217599","brand:wikipedia":"en:Carrefour",name:"Carrefour Market"}},"amenity/fuel|Casey's General Store":{matchNames:["caseys"],nomatch:["shop/convenience|Casey's General Store"],tags:{amenity:"fuel",brand:"Casey's General Store","brand:wikidata":"Q2940968","brand:wikipedia":"en:Casey's General Stores",name:"Casey's General Store"}},"amenity/fuel|Casino":{tags:{amenity:"fuel",brand:"Casino",name:"Casino"}},"amenity/fuel|Cenex":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Cenex","brand:wikidata":"Q5011381","brand:wikipedia":"en:CHS Inc.",name:"Cenex"}},"amenity/fuel|Ceypetco":{countryCodes:["lk"],matchNames:["lanka filling station"],tags:{amenity:"fuel",brand:"Ceypetco","brand:wikidata":"Q5065795","brand:wikipedia":"en:Ceylon Petroleum Corporation",name:"Ceypetco"}},"amenity/fuel|Chevron":{nomatch:["shop/convenience|Chevron"],tags:{amenity:"fuel",brand:"Chevron","brand:wikidata":"Q319642","brand:wikipedia":"en:Chevron Corporation",name:"Chevron"}},"amenity/fuel|Circle K":{nomatch:["shop/convenience|Circle K"],tags:{amenity:"fuel",brand:"Circle K","brand:wikidata":"Q3268010","brand:wikipedia":"en:Circle K",name:"Circle K"}},"amenity/fuel|Citgo":{nomatch:["shop/convenience|Citgo"],tags:{amenity:"fuel",brand:"Citgo","brand:wikidata":"Q2974437","brand:wikipedia":"en:Citgo",name:"Citgo"}},"amenity/fuel|Clark":{tags:{amenity:"fuel",brand:"Clark","brand:wikidata":"Q5127157","brand:wikipedia":"en:Clark Brands",name:"Clark"}},"amenity/fuel|Classic":{tags:{amenity:"fuel",brand:"Classic",name:"Classic"}},"amenity/fuel|Co-op~(Canada)":{countryCodes:["ca"],matchNames:["coop"],nomatch:["shop/convenience|Co-op~(Canada)","shop/convenience|Coop~(Schweiz)","shop/convenience|The Co-operative Food~(UK)","shop/supermarket|Co-op~(Canada)","shop/supermarket|Coop~(Schweiz)","shop/supermarket|The Co-operative Food~(UK)"],tags:{amenity:"fuel",brand:"Federated Co-operatives","brand:wikidata":"Q5440676","brand:wikipedia":"en:Federated Co-operatives",name:"Co-op"}},"amenity/fuel|Coles Express":{countryCodes:["au"],nomatch:["shop/convenience|Coles Express"],tags:{amenity:"fuel",brand:"Coles Express","brand:wikidata":"Q5144653","brand:wikipedia":"en:Coles Express",name:"Coles Express"}},"amenity/fuel|Conoco":{tags:{amenity:"fuel",brand:"Conoco","brand:wikidata":"Q1126518","brand:wikipedia":"en:Conoco",name:"Conoco"}},"amenity/fuel|Copec":{countryCodes:["cl"],tags:{amenity:"fuel",brand:"Copec","brand:wikidata":"Q11681461","brand:wikipedia":"en:Empresas Copec",name:"Copec"}},"amenity/fuel|Copetrol":{countryCodes:["py"],tags:{amenity:"fuel",brand:"Copetrol","brand:wikidata":"Q62274431",name:"Copetrol"}},"amenity/fuel|Cosmo":{countryCodes:["jp"],tags:{amenity:"fuel",brand:"Cosmo","brand:wikidata":"Q2498318","brand:wikipedia":"en:Cosmo Oil Company",name:"Cosmo"}},"amenity/fuel|Costco Gasoline":{countryCodes:["au","ca","mx","us"],matchNames:["costco","costco gas","costco wholesale"],nomatch:["amenity/pharmacy|Costco Pharmacy","shop/wholesale|Costco"],tags:{amenity:"fuel",brand:"Costco Gasoline","brand:wikidata":"Q715583","brand:wikipedia":"en:Costco",name:"Costco Gasoline"}},"amenity/fuel|Couche-Tard":{countryCodes:["ca"],nomatch:["shop/convenience|Couche-Tard"],tags:{amenity:"fuel",brand:"Couche-Tard","brand:wikidata":"Q2836957","brand:wikipedia":"en:Alimentation Couche-Tard",name:"Couche-Tard"}},"amenity/fuel|Crevier":{countryCodes:["ca"],tags:{amenity:"fuel",brand:"Crevier","brand:wikidata":"Q61743451",name:"Crevier"}},"amenity/fuel|Crodux":{countryCodes:["hr"],tags:{amenity:"fuel",brand:"Crodux","brand:wikidata":"Q62274622",name:"Crodux"}},"amenity/fuel|Cumberland Farms":{countryCodes:["us"],nomatch:["shop/convenience|Cumberland Farms"],tags:{amenity:"fuel",brand:"Cumberland Farms","brand:wikidata":"Q1143685","brand:wikipedia":"en:Cumberland Farms",name:"Cumberland Farms"}},"amenity/fuel|Delta~(Panama & Costa Rica)":{countryCodes:["cr","pr"],tags:{amenity:"fuel",brand:"Delta","brand:wikidata":"Q62274638",name:"Delta"}},"amenity/fuel|Delta~(USA)":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Delta","brand:wikidata":"Q62274661",name:"Delta"}},"amenity/fuel|Depot Tela":{tags:{amenity:"fuel",brand:"Depot Tela",name:"Depot Tela"}},"amenity/fuel|Diamond Shamrock":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Diamond Shamrock","brand:wikidata":"Q16973722","brand:wikipedia":"en:Diamond Shamrock",name:"Diamond Shamrock"}},"amenity/fuel|Domo":{countryCodes:["ca"],tags:{amenity:"fuel",brand:"Domo","brand:wikidata":"Q5291326","brand:wikipedia":"en:Domo Gasoline",name:"Domo"}},"amenity/fuel|EKO~(Canada)":{countryCodes:["ca"],nomatch:["amenity/fuel|EKO~(Greece)","shop/supermarket|Eko"],tags:{amenity:"fuel",brand:"EKO","brand:wikidata":"Q3045934","brand:wikipedia":"fr:EKO",name:"EKO"}},"amenity/fuel|EKO~(Greece)":{countryCodes:["bg","cy","gr","me","mk","rs"],matchNames:["εκο"],nomatch:["amenity/fuel|EKO~(Canada)","shop/supermarket|Eko"],tags:{amenity:"fuel",brand:"EKO","brand:wikidata":"Q903198","brand:wikipedia":"el:Ελληνικά Πετρέλαια",name:"EKO"}},"amenity/fuel|ENEOS":{countryCodes:["jp"],tags:{amenity:"fuel",brand:"ENEOS","brand:wikidata":"Q1640290","brand:wikipedia":"en:JXTG Nippon Oil & Energy",name:"ENEOS"}},"amenity/fuel|Elan":{countryCodes:["de","fr","nl"],tags:{amenity:"fuel",brand:"Elan","brand:wikidata":"Q57980752",name:"Elan"}},"amenity/fuel|Engen":{tags:{amenity:"fuel",brand:"Engen","brand:wikidata":"Q3054251","brand:wikipedia":"en:Engen Petroleum",name:"Engen"}},"amenity/fuel|Eni":{tags:{amenity:"fuel",brand:"Eni","brand:wikidata":"Q565594","brand:wikipedia":"en:Eni",name:"Eni"}},"amenity/fuel|Erg":{tags:{amenity:"fuel",brand:"Erg","brand:wikidata":"Q739503","brand:wikipedia":"it:ERG (azienda)",name:"Erg"}},"amenity/fuel|Esso":{matchNames:["station esso"],nomatch:["amenity/fuel|Esso Express","shop/convenience|Esso"],tags:{amenity:"fuel",brand:"Esso","brand:wikidata":"Q867662","brand:wikipedia":"en:Esso",name:"Esso"}},"amenity/fuel|Esso Express":{nomatch:["amenity/fuel|Esso"],tags:{amenity:"fuel",brand:"Esso Express","brand:wikidata":"Q2350336","brand:wikipedia":"nl:Esso Express",name:"Esso Express"}},"amenity/fuel|Exxon":{tags:{amenity:"fuel",brand:"Exxon","brand:wikidata":"Q4781944","brand:wikipedia":"en:Exxon",name:"Exxon"}},"amenity/fuel|F24":{countryCodes:["dk"],tags:{amenity:"fuel",brand:"F24","brand:wikidata":"Q12310853","brand:wikipedia":"da:F24",name:"F24"}},"amenity/fuel|Fas Gas":{matchNames:["fas gas plus"],tags:{amenity:"fuel",brand:"Fas Gas","brand:wikidata":"Q61743505","brand:wikipedia":"en:Parkland Fuel",name:"Fas Gas"}},"amenity/fuel|Firezone":{countryCodes:["nl"],tags:{amenity:"fuel",brand:"Firezone","brand:wikidata":"Q14628080","brand:wikipedia":"nl:Firezone",name:"Firezone"}},"amenity/fuel|Flying V":{countryCodes:["ph"],tags:{amenity:"fuel",brand:"Flying V","brand:wikidata":"Q62275048",name:"Flying V"}},"amenity/fuel|Freie Tankstelle":{countryCodes:["de"],tags:{amenity:"fuel",brand:"Freie Tankstelle","brand:wikidata":"Q1009104","brand:wikipedia":"de:Bundesverband freier Tankstellen",name:"Freie Tankstelle"}},"amenity/fuel|GALP":{tags:{amenity:"fuel",brand:"GALP","brand:wikidata":"Q1492739","brand:wikipedia":"en:Galp Energia",name:"GALP"}},"amenity/fuel|Gazel":{countryCodes:["co","mx","pe"],tags:{amenity:"fuel",brand:"Gazel","brand:wikidata":"Q62529885",name:"Gazel"}},"amenity/fuel|Gazprom":{tags:{amenity:"fuel",brand:"Gazprom","brand:wikidata":"Q102673","brand:wikipedia":"en:Gazprom",name:"Gazprom"}},"amenity/fuel|GetGo":{countryCodes:["us"],tags:{amenity:"fuel",brand:"GetGo","brand:wikidata":"Q5553766","brand:wikipedia":"en:GetGo",name:"GetGo"}},"amenity/fuel|Giant":{nomatch:["shop/bicycle|Giant"],tags:{amenity:"fuel",brand:"Giant",name:"Giant"}},"amenity/fuel|Glusco":{countryCodes:["ua"],tags:{amenity:"fuel",brand:"Glusco","brand:wikidata":"Q62284719",name:"Glusco"}},"amenity/fuel|Goil":{tags:{amenity:"fuel",brand:"Goil","brand:wikidata":"Q5555383","brand:wikipedia":"en:Ghana Oil Company",name:"Goil"}},"amenity/fuel|Gulf":{tags:{amenity:"fuel",brand:"Gulf","brand:wikidata":"Q1296860","brand:wikipedia":"en:Gulf Oil",name:"Gulf"}},"amenity/fuel|Gull":{tags:{amenity:"fuel",brand:"Gull","brand:wikidata":"Q5617739","brand:wikipedia":"en:Gull Petroleum",name:"Gull"}},"amenity/fuel|H-E-B Fuel":{matchNames:["h-e-b gas"],nomatch:["shop/supermarket|H-E-B"],tags:{amenity:"fuel",brand:"H-E-B Fuel","brand:wikidata":"Q830621","brand:wikipedia":"en:H-E-B",name:"H-E-B Fuel"}},"amenity/fuel|HEM":{countryCodes:["de"],tags:{amenity:"fuel",brand:"HEM","brand:wikidata":"Q1563517","brand:wikipedia":"de:Deutsche Tamoil",name:"HEM"}},"amenity/fuel|HP":{matchNames:["hindustan petroleum","hp petrol pump"],tags:{amenity:"fuel",brand:"Hindustan Petroleum","brand:wikidata":"Q1619375","brand:wikipedia":"en:Hindustan Petroleum",name:"HP",official_name:"Hindustan Petroleum"}},"amenity/fuel|Harnois":{countryCodes:["ca"],tags:{amenity:"fuel",brand:"Harnois","brand:wikidata":"Q61743558",name:"Harnois"}},"amenity/fuel|Hess":{tags:{amenity:"fuel",brand:"Hess","brand:wikidata":"Q1615684","brand:wikipedia":"en:Hess Corporation",name:"Hess"}},"amenity/fuel|Hofer":{countryCodes:["at","si"],nomatch:["shop/supermarket|Hofer"],tags:{amenity:"fuel",brand:"Hofer","brand:wikidata":"Q15815751","brand:wikipedia":"de:Hofer KG",name:"Hofer"}},"amenity/fuel|Holiday":{countryCodes:["us"],nomatch:["shop/convenience|Holiday"],tags:{amenity:"fuel",brand:"Holiday","brand:wikidata":"Q5880490","brand:wikipedia":"en:Holiday Stationstores",name:"Holiday"}},"amenity/fuel|Husky":{countryCodes:["ca"],nomatch:["shop/convenience|Husky"],tags:{amenity:"fuel",brand:"Husky",name:"Husky"}},"amenity/fuel|IES":{countryCodes:["it"],tags:{amenity:"fuel",brand:"IES","brand:wikidata":"Q62287387",name:"IES"}},"amenity/fuel|IP":{tags:{amenity:"fuel",brand:"IP","brand:wikidata":"Q646807","brand:wikipedia":"en:Anonima Petroli Italiana",name:"IP"}},"amenity/fuel|Indian Oil":{tags:{amenity:"fuel",brand:"Indian Oil","brand:wikidata":"Q1289348","brand:wikipedia":"en:Indian Oil Corporation",name:"Indian Oil"}},"amenity/fuel|Indian Oil Petrol Pump":{tags:{amenity:"fuel",brand:"Indian Oil Petrol Pump",name:"Indian Oil Petrol Pump"}},"amenity/fuel|Ingo":{tags:{amenity:"fuel",brand:"Ingo","brand:wikidata":"Q17048617","brand:wikipedia":"en:Ingo (brand)",name:"Ingo"}},"amenity/fuel|Intermarché":{matchNames:["intermarché super"],nomatch:["shop/supermarket|Intermarché"],tags:{amenity:"fuel",brand:"Intermarché","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",name:"Intermarché"}},"amenity/fuel|Ipiranga":{countryCodes:["br"],matchNames:["posto ipiranga"],tags:{amenity:"fuel",brand:"Ipiranga","brand:wikidata":"Q2081136","brand:wikipedia":"pt:Ipiranga (empresa)",name:"Ipiranga"}},"amenity/fuel|Irving":{nomatch:["shop/convenience|Irving"],tags:{amenity:"fuel",brand:"Irving","brand:wikidata":"Q1673286","brand:wikipedia":"en:Irving Oil",name:"Irving"}},"amenity/fuel|JA-SS":{countryCodes:["jp"],matchNames:["ja"],tags:{amenity:"fuel",brand:"JA-SS","brand:wikidata":"Q11225213","brand:wikipedia":"ja:JA-SS",name:"JA-SS"}},"amenity/fuel|Jet":{nomatch:["shop/clothes|Jet"],tags:{amenity:"fuel",brand:"Jet","brand:wikidata":"Q568940","brand:wikipedia":"en:Jet (brand)",name:"Jet"}},"amenity/fuel|Jetti":{countryCodes:["ph"],tags:{amenity:"fuel",brand:"Jetti","brand:wikidata":"Q62288720",name:"Jetti"}},"amenity/fuel|Kangaroo":{nomatch:["shop/convenience|Kangaroo"],tags:{amenity:"fuel",brand:"Kangaroo",name:"Kangaroo"}},"amenity/fuel|Kobil":{tags:{amenity:"fuel",brand:"Kobil","brand:wikidata":"Q22906119","brand:wikipedia":"en:KenolKobil",name:"Kobil"}},"amenity/fuel|Kroger":{matchNames:["kroger fuel"],nomatch:["shop/supermarket|Kroger"],tags:{amenity:"fuel",brand:"Kroger","brand:wikidata":"Q153417","brand:wikipedia":"en:Kroger",name:"Kroger"}},"amenity/fuel|Kum & Go":{countryCodes:["us"],nomatch:["shop/convenience|Kum & Go"],tags:{amenity:"fuel",brand:"Kum & Go","brand:wikidata":"Q6443340","brand:wikipedia":"en:Kum & Go",name:"Kum & Go"}},"amenity/fuel|Kwik Fill":{tags:{amenity:"fuel",brand:"Kwik Fill",name:"Kwik Fill"}},"amenity/fuel|Kwik Trip":{nomatch:["shop/convenience|Kwik Trip"],tags:{amenity:"fuel",brand:"Kwik Trip","brand:wikidata":"Q6450420","brand:wikipedia":"en:Kwik Trip",name:"Kwik Trip"}},"amenity/fuel|Liberty":{nomatch:["amenity/bank|Liberty Bank"],tags:{amenity:"fuel",brand:"Liberty",name:"Liberty"}},"amenity/fuel|Lotos":{countryCodes:["pl"],nomatch:["amenity/fuel|Lotos Optima"],tags:{amenity:"fuel",brand:"Lotos","brand:wikidata":"Q1256909","brand:wikipedia":"pl:Grupa Lotos",name:"Lotos"}},"amenity/fuel|Lotos Optima":{countryCodes:["pl"],nomatch:["amenity/fuel|Lotos"],tags:{amenity:"fuel",brand:"Lotos Optima","brand:wikidata":"Q1256909","brand:wikipedia":"pl:Grupa Lotos",name:"Lotos Optima"}},"amenity/fuel|Love's":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Love's","brand:wikidata":"Q1872496","brand:wikipedia":"en:Love's Travel Stops & Country Stores",name:"Love's"}},"amenity/fuel|Lukoil":{tags:{amenity:"fuel",brand:"Lukoil","brand:wikidata":"Q329347","brand:wikipedia":"en:Lukoil",name:"Lukoil"}},"amenity/fuel|MEROIL":{countryCodes:["es"],tags:{amenity:"fuel",brand:"MEROIL","brand:wikidata":"Q62292559",name:"MEROIL"}},"amenity/fuel|MOL":{tags:{amenity:"fuel",brand:"MOL","brand:wikidata":"Q549181","brand:wikipedia":"en:MOL (company)",name:"MOL"}},"amenity/fuel|MRS":{countryCodes:["ng"],tags:{amenity:"fuel",brand:"MRS","brand:wikidata":"Q56274919","brand:wikipedia":"en:MRS Oil Nigeria Plc",name:"MRS"}},"amenity/fuel|Mac's":{countryCodes:["ca"],nomatch:["shop/convenience|Mac's"],tags:{amenity:"fuel",brand:"Mac's","brand:wikidata":"Q4043527","brand:wikipedia":"en:Mac's Convenience Stores",name:"Mac's"}},"amenity/fuel|MacEwen":{countryCodes:["ca"],tags:{amenity:"fuel",brand:"MacEwen","brand:wikidata":"Q61740335",name:"MacEwen"}},"amenity/fuel|Marathon":{nomatch:["shop/convenience|Marathon"],tags:{amenity:"fuel",brand:"Marathon","brand:wikidata":"Q458363","brand:wikipedia":"en:Marathon Petroleum",name:"Marathon"}},"amenity/fuel|Maverik":{countryCodes:["us"],nomatch:["shop/convenience|Maverik"],tags:{amenity:"fuel",brand:"Maverik","brand:wikidata":"Q16974822","brand:wikipedia":"en:FJ Management",name:"Maverik"}},"amenity/fuel|Maxol":{tags:{amenity:"fuel",brand:"Maxol","brand:wikidata":"Q3302837","brand:wikipedia":"en:Maxol",name:"Maxol"}},"amenity/fuel|Metano":{countryCodes:["it"],tags:{amenity:"fuel",brand:"Metano","brand:wikidata":"Q62294765",name:"Metano"}},"amenity/fuel|Migrol":{countryCodes:["ch"],tags:{amenity:"fuel",brand:"Migrol","brand:wikidata":"Q1747771","brand:wikipedia":"de:Migrol",name:"Migrol"}},"amenity/fuel|Mobil":{matchNames:["mobile"],nomatch:["shop/convenience|Mobil Mart"],tags:{amenity:"fuel",brand:"Mobil","brand:wikidata":"Q3088656","brand:wikipedia":"en:Mobil",name:"Mobil"}},"amenity/fuel|Moil":{countryCodes:["tr"],tags:{amenity:"fuel",brand:"Moil","brand:wikidata":"Q62296914",name:"Moil"}},"amenity/fuel|Morrisons":{countryCodes:["gb"],nomatch:["shop/supermarket|Morrisons"],tags:{amenity:"fuel",brand:"Morrisons","brand:wikidata":"Q922344","brand:wikipedia":"en:Morrisons",name:"Morrisons"}},"amenity/fuel|Moya":{countryCodes:["pl"],tags:{amenity:"fuel",brand:"Moya","brand:wikidata":"Q62297700",name:"Moya"}},"amenity/fuel|Murphy USA":{tags:{amenity:"fuel",brand:"Murphy USA","brand:wikidata":"Q19604459","brand:wikipedia":"en:Murphy USA",name:"Murphy USA"}},"amenity/fuel|N1":{countryCodes:["is"],tags:{amenity:"fuel",brand:"N1",name:"N1"}},"amenity/fuel|NP":{countryCodes:["tt"],tags:{amenity:"fuel",brand:"NP","brand:wikidata":"Q7842382","brand:wikipedia":"en:Trinidad & Tobago National Petroleum Marketing Company Limited",name:"NP"}},"amenity/fuel|Neste":{tags:{amenity:"fuel",brand:"Neste","brand:wikidata":"Q616376","brand:wikipedia":"en:Neste",name:"Neste"}},"amenity/fuel|OIL!":{tags:{amenity:"fuel",brand:"OIL!","brand:wikidata":"Q2007561","brand:wikipedia":"de:OIL! Tankstellen",name:"OIL!"}},"amenity/fuel|OK":{countryCodes:["dk"],tags:{amenity:"fuel",brand:"OK","brand:wikidata":"Q12329785","brand:wikipedia":"da:OK a.m.b.a.",name:"OK"}},"amenity/fuel|OKQ8":{tags:{amenity:"fuel",brand:"OKQ8","brand:wikidata":"Q1634762","brand:wikipedia":"en:Kuwait Petroleum Corporation",name:"OKQ8"}},"amenity/fuel|OMV":{tags:{amenity:"fuel",brand:"OMV","brand:wikidata":"Q168238","brand:wikipedia":"en:OMV",name:"OMV"}},"amenity/fuel|Oilibya":{matchNames:["oilibia","oilibiya","oillibia","oilliby","oillibya","oillybia","oilybia","olibya","olybia"],tags:{amenity:"fuel",brand:"Oilibya","brand:wikidata":"Q7081491","brand:wikipedia":"en:Oilibya",name:"Oilibya","name:ar":"أويليبيا"}},"amenity/fuel|Olerex":{tags:{amenity:"fuel",brand:"Olerex",name:"Olerex"}},"amenity/fuel|Opet":{countryCodes:["tr"],tags:{amenity:"fuel",brand:"Opet","brand:wikidata":"Q7072824","brand:wikipedia":"en:Opet",name:"Opet"}},"amenity/fuel|Orlen":{nomatch:["shop/convenience|Orlen"],tags:{amenity:"fuel",brand:"Orlen","brand:wikidata":"Q971649","brand:wikipedia":"en:PKN Orlen",name:"Orlen"}},"amenity/fuel|Oxxo":{nomatch:["shop/convenience|Oxxo"],tags:{amenity:"fuel",brand:"Oxxo","brand:wikidata":"Q1342538","brand:wikipedia":"es:Oxxo",name:"Oxxo"}},"amenity/fuel|PSO":{matchNames:["pso petrol pump"],tags:{amenity:"fuel",brand:"PSO","brand:wikidata":"Q2741455","brand:wikipedia":"en:Pakistan State Oil",name:"PSO"}},"amenity/fuel|PT":{countryCodes:["th"],tags:{amenity:"fuel",brand:"PT","brand:wikidata":"Q62298612",name:"PT"}},"amenity/fuel|PTT":{tags:{amenity:"fuel",brand:"PTT","brand:wikidata":"Q1810389","brand:wikipedia":"en:PTT Public Company Limited",name:"PTT"}},"amenity/fuel|PV Oil":{tags:{amenity:"fuel",brand:"PV Oil","brand:wikidata":"Q2089536","brand:wikipedia":"en:Petrovietnam",name:"PV Oil"}},"amenity/fuel|Pacific Pride":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Pacific Pride","brand:wikidata":"Q7122637","brand:wikipedia":"en:Pacific Pride",name:"Pacific Pride"}},"amenity/fuel|Pecsa":{countryCodes:["pe"],tags:{amenity:"fuel",brand:"Pecsa","brand:wikidata":"Q62299262",name:"Pecsa"}},"amenity/fuel|Pemex":{tags:{amenity:"fuel",brand:"Pemex","brand:wikidata":"Q871308","brand:wikipedia":"en:Pemex",name:"Pemex"}},"amenity/fuel|Pertamina":{tags:{amenity:"fuel",brand:"Pertamina","brand:wikidata":"Q1641044","brand:wikipedia":"en:Pertamina",name:"Pertamina"}},"amenity/fuel|Petro":{tags:{amenity:"fuel",brand:"Petro",name:"Petro"}},"amenity/fuel|Petro-Canada":{countryCodes:["ca"],nomatch:["shop/convenience|Petro-Canada"],tags:{amenity:"fuel",brand:"Petro-Canada","brand:wikidata":"Q1208279","brand:wikipedia":"en:Petro-Canada",name:"Petro-Canada"}},"amenity/fuel|Petro-T":{tags:{amenity:"fuel",brand:"Petro-T","brand:wikidata":"Q61743540",name:"Petro-T"}},"amenity/fuel|PetroPerú":{countryCodes:["pe"],tags:{amenity:"fuel",brand:"PetroPerú","brand:wikidata":"Q2506390","brand:wikipedia":"es:Petroperú",name:"PetroPerú"}},"amenity/fuel|Petrochina":{countryCodes:["cn"],tags:{amenity:"fuel",brand:"Petrochina","brand:wikidata":"Q503182","brand:wikipedia":"en:PetroChina",name:"Petrochina"}},"amenity/fuel|Petroecuador":{tags:{amenity:"fuel",brand:"Petroecuador","brand:wikidata":"Q1812822","brand:wikipedia":"en:Petroecuador",name:"Petroecuador"}},"amenity/fuel|Petrol Ofisi":{tags:{amenity:"fuel",brand:"Petrol Ofisi","brand:wikidata":"Q1278087","brand:wikipedia":"en:Petrol Ofisi",name:"Petrol Ofisi"}},"amenity/fuel|Petrolimex":{tags:{amenity:"fuel",brand:"Petrolimex","brand:wikidata":"Q10831598","brand:wikipedia":"en:Petrolimex",name:"Petrolimex"}},"amenity/fuel|Petrolina":{countryCodes:["cy"],tags:{amenity:"fuel",brand:"Petrolina","brand:wikidata":"Q17013948","brand:wikipedia":"en:Petrolina (company)",name:"Petrolina"}},"amenity/fuel|Petrom":{tags:{amenity:"fuel",brand:"Petrom","brand:wikidata":"Q1755034","brand:wikipedia":"en:Petrom",name:"Petrom"}},"amenity/fuel|Petron":{countryCodes:["ph"],tags:{amenity:"fuel",brand:"Petron","brand:wikidata":"Q7179011","brand:wikipedia":"en:Petron Corporation",name:"Petron"}},"amenity/fuel|Petronas":{tags:{amenity:"fuel",brand:"Petronas","brand:wikidata":"Q221692","brand:wikipedia":"en:Petronas",name:"Petronas"}},"amenity/fuel|Petronor":{tags:{amenity:"fuel",brand:"Petronor","brand:wikidata":"Q1726547","brand:wikipedia":"es:Petronor",name:"Petronor"}},"amenity/fuel|Phillips 66":{tags:{amenity:"fuel",brand:"Phillips 66","brand:wikidata":"Q1656230","brand:wikipedia":"en:Phillips 66",name:"Phillips 66"}},"amenity/fuel|Phoenix":{countryCodes:["ph"],tags:{amenity:"fuel",brand:"Phoenix","brand:wikidata":"Q7186949","brand:wikipedia":"en:Phoenix Petroleum",name:"Phoenix"}},"amenity/fuel|Pilot":{countryCodes:["ca","us"],matchNames:["flying j","pilot flying j"],tags:{amenity:"fuel",brand:"Pilot","brand:wikidata":"Q1434601","brand:wikipedia":"en:Pilot Flying J",name:"Pilot"}},"amenity/fuel|Pioneer":{countryCodes:["ca"],tags:{amenity:"fuel",brand:"Pioneer","brand:wikidata":"Q7196684","brand:wikipedia":"en:Pioneer Energy",name:"Pioneer"}},"amenity/fuel|Preem":{tags:{amenity:"fuel",brand:"Preem","brand:wikidata":"Q598835","brand:wikipedia":"en:Preem",name:"Preem"}},"amenity/fuel|Primax~(Ecuador)":{countryCodes:["ec"],tags:{amenity:"fuel",brand:"Primax","brand:wikidata":"Q62332857",name:"Primax"}},"amenity/fuel|Primax~(Peru)":{countryCodes:["pe"],tags:{amenity:"fuel",brand:"Primax","brand:wikidata":"Q62332638",name:"Primax"}},"amenity/fuel|Prio":{countryCodes:["pt"],tags:{amenity:"fuel",brand:"Prio","brand:wikidata":"Q62530421",name:"Prio"}},"amenity/fuel|Puma":{nomatch:["shop/clothes|Puma"],tags:{amenity:"fuel",brand:"Puma","brand:wikidata":"Q7259769","brand:wikipedia":"en:Puma Energy",name:"Puma"}},"amenity/fuel|Q1":{countryCodes:["de"],tags:{amenity:"fuel",brand:"Q1","brand:wikidata":"Q62086498",name:"Q1",operator:"Q1 Energie AG","operator:wikidata":"Q2121146","operator:wikipedia":"de:Q1 Energie"}},"amenity/fuel|Q8":{tags:{amenity:"fuel",brand:"Q8","brand:wikidata":"Q1634762","brand:wikipedia":"en:Kuwait Petroleum Corporation",name:"Q8"}},"amenity/fuel|Q8 Easy":{tags:{amenity:"fuel",brand:"Q8 Easy","brand:wikidata":"Q1806948","brand:wikipedia":"nl:Q8 Easy",name:"Q8 Easy"}},"amenity/fuel|Qstar":{countryCodes:["se"],tags:{amenity:"fuel",brand:"Qstar","brand:wikidata":"Q10647961","brand:wikipedia":"sv:Qstar",name:"Qstar"}},"amenity/fuel|QuikTrip":{matchNames:["qt"],nomatch:["shop/convenience|QuikTrip"],tags:{amenity:"fuel",brand:"QuikTrip","brand:wikidata":"Q7271953","brand:wikipedia":"en:QuikTrip",name:"QuikTrip"}},"amenity/fuel|RaceTrac":{nomatch:["shop/convenience|RaceTrac"],tags:{amenity:"fuel",brand:"RaceTrac","brand:wikidata":"Q735942","brand:wikipedia":"en:RaceTrac",name:"RaceTrac"}},"amenity/fuel|Raiffeisen":{nomatch:["amenity/bank|Raiffeisenbank"],tags:{amenity:"fuel",brand:"Raiffeisen",name:"Raiffeisen"}},"amenity/fuel|Repsol":{tags:{amenity:"fuel",brand:"Repsol","brand:wikidata":"Q174747","brand:wikipedia":"es:Repsol",name:"Repsol"}},"amenity/fuel|Revoil":{countryCodes:["gr"],tags:{amenity:"fuel",brand:"Revoil","brand:wikidata":"Q62530755",name:"Revoil"}},"amenity/fuel|Rompetrol":{tags:{amenity:"fuel",brand:"Rompetrol","brand:wikidata":"Q1788862","brand:wikipedia":"en:Rompetrol",name:"Rompetrol"}},"amenity/fuel|Royal Farms":{countryCodes:["us"],nomatch:["shop/convenience|Royal Farms"],tags:{amenity:"fuel",brand:"Royal Farms","brand:wikidata":"Q7374169","brand:wikipedia":"en:Royal Farms",name:"Royal Farms"}},"amenity/fuel|Rubis":{tags:{amenity:"fuel",brand:"Rubis","brand:wikidata":"Q3446514","brand:wikipedia":"en:Rubis (company)",name:"Rubis"}},"amenity/fuel|SK주유소":{countryCodes:["kr"],tags:{amenity:"fuel",brand:"SK주유소","brand:ko":"SK주유소",name:"SK주유소","name:ko":"SK주유소"}},"amenity/fuel|SP":{tags:{amenity:"fuel",brand:"SP",name:"SP"}},"amenity/fuel|Safeway":{nomatch:["shop/supermarket|Safeway"],tags:{amenity:"fuel",brand:"Safeway","brand:wikidata":"Q1508234","brand:wikipedia":"en:Safeway Inc.",name:"Safeway"}},"amenity/fuel|Sainsbury's":{countryCodes:["gb"],nomatch:["shop/supermarket|Sainsbury's"],tags:{amenity:"fuel",brand:"Sainsbury's","brand:wikidata":"Q152096","brand:wikipedia":"en:Sainsbury's",name:"Sainsbury's"}},"amenity/fuel|Sam's Club":{nomatch:["shop/wholesale|Sam's Club"],tags:{amenity:"fuel",brand:"Sam's Club","brand:wikidata":"Q1972120","brand:wikipedia":"en:Sam's Club",name:"Sam's Club",operator:"Walmart","operator:wikidata":"Q483551","operator:wikipedia":"en:Walmart"}},"amenity/fuel|Sasol":{tags:{amenity:"fuel",brand:"Sasol","brand:wikidata":"Q905998","brand:wikipedia":"en:Sasol",name:"Sasol"}},"amenity/fuel|Sea Oil":{countryCodes:["ph"],tags:{amenity:"fuel",brand:"Sea Oil","brand:wikidata":"Q7389549","brand:wikipedia":"en:Seaoil Philippines",name:"Sea Oil"}},"amenity/fuel|Sheetz":{nomatch:["shop/convenience|Sheetz"],tags:{amenity:"fuel",brand:"Sheetz","brand:wikidata":"Q7492551","brand:wikipedia":"en:Sheetz",name:"Sheetz"}},"amenity/fuel|Shell":{matchNames:["posto shell","shell gas station","shell petrol station","shell station","station shell"],nomatch:["amenity/fuel|Shell Express","shop/convenience|Shell Select"],tags:{amenity:"fuel",brand:"Shell","brand:wikidata":"Q154950","brand:wikipedia":"en:Royal Dutch Shell",name:"Shell"}},"amenity/fuel|Shell Express":{nomatch:["amenity/fuel|Shell","shop/convenience|Shell Select"],tags:{amenity:"fuel",brand:"Shell Express","brand:wikidata":"Q2289188","brand:wikipedia":"nl:Shell Express",name:"Shell Express"}},"amenity/fuel|Sinclair":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Sinclair","brand:wikidata":"Q1290900","brand:wikipedia":"en:Sinclair Oil Corporation",name:"Sinclair"}},"amenity/fuel|Sinopec":{countryCodes:["cn"],matchNames:["sinopec fuel"],tags:{amenity:"fuel",brand:"Sinopec","brand:wikidata":"Q831445","brand:wikipedia":"en:Sinopec","brand:zh":"中国石化",name:"Sinopec","name:zh":"中国石化"}},"amenity/fuel|Slovnaft":{tags:{amenity:"fuel",brand:"Slovnaft","brand:wikidata":"Q1587563","brand:wikipedia":"en:Slovnaft",name:"Slovnaft"}},"amenity/fuel|Socar":{tags:{amenity:"fuel",brand:"Socar","brand:wikidata":"Q1622293","brand:wikipedia":"en:SOCAR",name:"Socar"}},"amenity/fuel|Sokimex":{countryCodes:["kh"],tags:{amenity:"fuel",brand:"Sokimex","brand:wikidata":"Q1149575","brand:wikipedia":"en:Sokimex",name:"Sokimex"}},"amenity/fuel|Sonic":{nomatch:["amenity/fast_food|Sonic"],tags:{amenity:"fuel",brand:"Sonic",name:"Sonic"}},"amenity/fuel|Speedway":{nomatch:["shop/convenience|Speedway"],tags:{amenity:"fuel",brand:"Speedway","brand:wikidata":"Q7575683","brand:wikipedia":"en:Speedway LLC",name:"Speedway"}},"amenity/fuel|Sprint":{countryCodes:["de"],nomatch:["shop/mobile_phone|Sprint"],tags:{amenity:"fuel",brand:"Sprint","brand:wikidata":"Q57588452",name:"Sprint"}},"amenity/fuel|St1":{tags:{amenity:"fuel",brand:"St1","brand:wikidata":"Q7592214","brand:wikipedia":"en:St1",name:"St1"}},"amenity/fuel|Star":{countryCodes:["de"],tags:{amenity:"fuel",brand:"Star","brand:wikidata":"Q2031095","brand:wikipedia":"de:Orlen Deutschland",name:"Star"}},"amenity/fuel|Star Oil":{tags:{amenity:"fuel",brand:"Star Oil",name:"Star Oil"}},"amenity/fuel|Station Service E. Leclerc":{matchNames:["e. leclerc"],tags:{amenity:"fuel",brand:"E.Leclerc","brand:wikidata":"Q1273376","brand:wikipedia":"fr:E.Leclerc",name:"Station Service E. Leclerc"}},"amenity/fuel|Statoil":{tags:{amenity:"fuel",brand:"Statoil","brand:wikidata":"Q1776022","brand:wikipedia":"en:Equinor",name:"Statoil"}},"amenity/fuel|Stewart's":{countryCodes:["us"],nomatch:["shop/convenience|Stewart's"],tags:{amenity:"fuel",brand:"Stewart's","brand:wikidata":"Q7615690","brand:wikipedia":"en:Stewart's Shops",name:"Stewart's"}},"amenity/fuel|Sunoco":{nomatch:["shop/convenience|Sunoco"],tags:{amenity:"fuel",brand:"Sunoco","brand:wikidata":"Q1423218","brand:wikipedia":"en:Sunoco",name:"Sunoco"}},"amenity/fuel|Super U":{countryCodes:["fr"],nomatch:["shop/convenience|Utile","shop/supermarket|Hyper U","shop/supermarket|Super U","shop/supermarket|U Express"],tags:{amenity:"fuel",brand:"Super U","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Super U"}},"amenity/fuel|Susco":{tags:{amenity:"fuel",brand:"Susco",name:"Susco"}},"amenity/fuel|TA":{countryCodes:["us"],tags:{amenity:"fuel",brand:"TA","brand:wikidata":"Q7835892","brand:wikipedia":"en:TravelCenters of America",name:"TA"}},"amenity/fuel|Tamoil":{tags:{amenity:"fuel",brand:"Tamoil","brand:wikidata":"Q706793","brand:wikipedia":"en:Tamoil",name:"Tamoil"}},"amenity/fuel|Tango":{tags:{amenity:"fuel",brand:"Tango","brand:wikidata":"Q2423920","brand:wikipedia":"nl:Tango CV",name:"Tango"}},"amenity/fuel|Tanka":{countryCodes:["se"],tags:{amenity:"fuel",brand:"Tanka","brand:wikidata":"Q10690640","brand:wikipedia":"sv:Tanka (bensinstationskedja)",name:"Tanka"}},"amenity/fuel|Teboil":{tags:{amenity:"fuel",brand:"Teboil","brand:wikidata":"Q7692079","brand:wikipedia":"en:Teboil",name:"Teboil"}},"amenity/fuel|Tela":{countryCodes:["kh"],tags:{amenity:"fuel",brand:"Tela","brand:wikidata":"Q62534875",name:"Tela"}},"amenity/fuel|Tempo":{countryCodes:["ca"],tags:{amenity:"fuel",brand:"Tempo","brand:wikidata":"Q62535175",name:"Tempo"}},"amenity/fuel|Terpel":{tags:{amenity:"fuel",brand:"Terpel","brand:wikidata":"Q7703003","brand:wikipedia":"en:Terpel",name:"Terpel"}},"amenity/fuel|Tesco":{nomatch:["shop/convenience|Tesco"],tags:{amenity:"fuel",brand:"Tesco","brand:wikidata":"Q17145596","brand:wikipedia":"en:Tesco Corporation",name:"Tesco"}},"amenity/fuel|Texaco":{nomatch:["shop/convenience|Texaco"],tags:{amenity:"fuel",brand:"Texaco","brand:wikidata":"Q775060","brand:wikipedia":"en:Texaco",name:"Texaco"}},"amenity/fuel|Tinq":{countryCodes:["nl"],tags:{amenity:"fuel",brand:"Tinq","brand:wikidata":"Q2132028","brand:wikipedia":"nl:Tinq",name:"Tinq"}},"amenity/fuel|Topaz":{countryCodes:["ie"],tags:{amenity:"fuel",brand:"Topaz","brand:wikidata":"Q7824764","brand:wikipedia":"en:Topaz Energy",name:"Topaz"}},"amenity/fuel|Total":{matchNames:["station total"],nomatch:["shop/convenience|Total"],tags:{amenity:"fuel",brand:"Total","brand:wikidata":"Q154037","brand:wikipedia":"fr:Total (entreprise)",name:"Total"}},"amenity/fuel|Total Access":{tags:{amenity:"fuel",brand:"Total Access","brand:wikidata":"Q154037","brand:wikipedia":"fr:Total (entreprise)",name:"Total Access"}},"amenity/fuel|TotalErg":{tags:{amenity:"fuel",brand:"TotalErg","brand:wikidata":"Q3995933","brand:wikipedia":"it:TotalErg",name:"TotalErg"}},"amenity/fuel|Turkey Hill":{countryCodes:["us"],nomatch:["shop/convenience|Turkey Hill"],tags:{amenity:"fuel",brand:"Turkey Hill","brand:wikidata":"Q42376970","brand:wikipedia":"en:Turkey Hill Minit Markets",name:"Turkey Hill"}},"amenity/fuel|Turmöl":{tags:{amenity:"fuel",brand:"Turmöl","brand:wikidata":"Q1473279","brand:wikipedia":"de:Turmöl",name:"Turmöl"}},"amenity/fuel|UDF Fuel":{countryCodes:["us"],matchNames:["udf","udf fuels","united dairy farmers"],nomatch:["shop/convenience|United Dairy Farmers"],tags:{amenity:"fuel",brand:"United Dairy Farmers","brand:wikidata":"Q7887677","brand:wikipedia":"en:United Dairy Farmers",name:"UDF Fuel",short_name:"UDF"}},"amenity/fuel|Ultramar":{nomatch:["shop/convenience|Ultramar"],tags:{amenity:"fuel",brand:"Ultramar","brand:wikidata":"Q3548078","brand:wikipedia":"en:Ultramar",name:"Ultramar"}},"amenity/fuel|United":{matchNames:["united petroleum"],nomatch:["amenity/bank|United Bank"],tags:{amenity:"fuel",brand:"United","brand:wikidata":"Q28224393","brand:wikipedia":"en:United Petroleum",name:"United"}},"amenity/fuel|Uno":{countryCodes:["bz","cr","gt","hn","ni","sv"],tags:{amenity:"fuel",brand:"Uno","brand:wikidata":"Q62535574",name:"Uno"}},"amenity/fuel|Uno-X":{countryCodes:["dk"],tags:{amenity:"fuel",brand:"Uno-X","brand:wikidata":"Q3362746","brand:wikipedia":"en:Uno-X",name:"Uno-X"}},"amenity/fuel|Valero":{nomatch:["shop/convenience|Valero"],tags:{amenity:"fuel",brand:"Valero","brand:wikidata":"Q1283291","brand:wikipedia":"en:Valero Energy",name:"Valero"}},"amenity/fuel|Viada":{tags:{amenity:"fuel",brand:"Viada","brand:wikidata":"Q12663942","brand:wikipedia":"en:Lukoil Baltija",name:"Viada"}},"amenity/fuel|Vito":{countryCodes:["fr"],tags:{amenity:"fuel",brand:"Vito","brand:wikidata":"Q62536473",name:"Vito"}},"amenity/fuel|WOG":{tags:{amenity:"fuel",brand:"WOG","brand:wikidata":"Q12072939","brand:wikipedia":"en:WOG (gas stations)",name:"WOG"}},"amenity/fuel|Walmart":{nomatch:["shop/department_store|Walmart","shop/supermarket|Walmart Neighborhood Market","shop/supermarket|Walmart Supercenter"],tags:{amenity:"fuel",brand:"Walmart","brand:wikidata":"Q62606411","brand:wikipedia":"en:Walmart",name:"Walmart"}},"amenity/fuel|Wawa":{nomatch:["shop/convenience|Wawa"],tags:{amenity:"fuel",brand:"Wawa","brand:wikidata":"Q5936320","brand:wikipedia":"en:Wawa (company)",name:"Wawa"}},"amenity/fuel|Westfalen":{countryCodes:["de"],tags:{amenity:"fuel",brand:"Westfalen","brand:wikidata":"Q1411209","brand:wikipedia":"en:Westfalen AG",name:"Westfalen"}},"amenity/fuel|Woolworths Petrol":{countryCodes:["au"],nomatch:["shop/convenience|Woolworths Petrol"],tags:{amenity:"fuel",brand:"Caltex","brand:wikidata":"Q5023980","brand:wikipedia":"en:Caltex Woolworths",name:"Woolworths Petrol"}},"amenity/fuel|XTR":{countryCodes:["ca"],tags:{amenity:"fuel",brand:"XTR","brand:wikidata":"Q62537250",name:"XTR"}},"amenity/fuel|YPF":{tags:{amenity:"fuel",brand:"YPF","brand:wikidata":"Q2006989","brand:wikipedia":"en:YPF",name:"YPF"}},"amenity/fuel|Z":{countryCodes:["nz"],nomatch:["shop/clothes|Z"],tags:{amenity:"fuel",brand:"Z","brand:wikidata":"Q8063337","brand:wikipedia":"en:Z Energy",name:"Z"}},"amenity/fuel|bft":{countryCodes:["de"],tags:{amenity:"fuel",brand:"bft","brand:wikidata":"Q1009104","brand:wikipedia":"de:Bundesverband freier Tankstellen",name:"bft"}},"amenity/fuel|din-X":{countryCodes:["se"],tags:{amenity:"fuel",brand:"din-X","brand:wikidata":"Q10472858","brand:wikipedia":"sv:Din-X",name:"din-X"}},"amenity/fuel|Авіас":{countryCodes:["ua"],tags:{amenity:"fuel",brand:"Авіас","brand:wikidata":"Q12122687","brand:wikipedia":"uk:Мережа АЗС Приват",name:"Авіас"}},"amenity/fuel|БРСМ-Нафта":{countryCodes:["ua"],tags:{amenity:"fuel",brand:"БРСМ-Нафта","brand:wikidata":"Q56356523","brand:wikipedia":"uk:БРСМ-Нафта",name:"БРСМ-Нафта"}},"amenity/fuel|Башнефть":{countryCodes:["ru"],tags:{amenity:"fuel",brand:"Башнефть","brand:en":"Bashneft","brand:wikidata":"Q809985","brand:wikipedia":"en:Bashneft",name:"Башнефть","name:en":"Bashneft"}},"amenity/fuel|Белоруснефть":{countryCodes:["by"],tags:{amenity:"fuel",brand:"Белоруснефть","brand:wikidata":"Q4082693","brand:wikipedia":"ru:Белоруснефть",name:"Белоруснефть"}},"amenity/fuel|Газпромнефть":{matchNames:["газпром"],tags:{amenity:"fuel",brand:"Газпромнефть","brand:wikidata":"Q1461799","brand:wikipedia":"en:Gazprom Neft",name:"Газпромнефть"}},"amenity/fuel|Гелиос":{countryCodes:["kz"],matchNames:["helios"],tags:{amenity:"fuel",brand:"Гелиос","brand:en":"Helios","brand:wikidata":"Q62286471",name:"Гелиос","name:en":"Helios"}},"amenity/fuel|ЕКА":{countryCodes:["ru"],tags:{amenity:"fuel",brand:"ЕКА","brand:wikidata":"Q62543029",name:"ЕКА"}},"amenity/fuel|КЛО":{countryCodes:["ua"],tags:{amenity:"fuel",brand:"КЛО","brand:en":"Klo","brand:wikidata":"Q60966526","brand:wikipedia":"ru:КЛО (сеть АЗС)",name:"КЛО","name:en":"Klo"}},"amenity/fuel|КазМунайГаз":{countryCodes:["kz"],nomatch:["shop/convenience|КазМунайГаз"],tags:{amenity:"fuel",brand:"КазМунайГаз","brand:wikidata":"Q1417227","brand:wikipedia":"en:KazMunayGas",name:"КазМунайГаз"}},"amenity/fuel|Лукойл":{matchNames:["лукоил"],nomatch:["shop/convenience|Лукойл"],tags:{amenity:"fuel",brand:"Лукойл","brand:wikidata":"Q329347","brand:wikipedia":"ru:Лукойл",name:"Лукойл"}},"amenity/fuel|Макпетрол":{countryCodes:["mk"],tags:{amenity:"fuel",brand:"Макпетрол","brand:wikidata":"Q1886438","brand:wikipedia":"en:Makpetrol",name:"Макпетрол"}},"amenity/fuel|НК Альянс":{countryCodes:["ru"],tags:{amenity:"fuel",brand:"НК Альянс","brand:wikidata":"Q4063700","brand:wikipedia":"ru:Альянс (компания)",name:"НК Альянс"}},"amenity/fuel|Нефтьмагистраль":{countryCodes:["ru"],tags:{amenity:"fuel",brand:"Нефтьмагистраль","brand:en":"Neftmagistral","brand:wikidata":"Q62544323",name:"Нефтьмагистраль","name:en":"Neftmagistral"}},"amenity/fuel|ОККО":{countryCodes:["ua"],tags:{amenity:"fuel",brand:"ОККО","brand:en":"OKKO","brand:wikidata":"Q7072617","brand:wikipedia":"en:OKKO",name:"ОККО","name:en":"OKKO"}},"amenity/fuel|ОМВ":{countryCodes:["bg","rs"],tags:{amenity:"fuel",brand:"ОМВ","brand:wikidata":"Q168238","brand:wikipedia":"en:OMV",name:"ОМВ"}},"amenity/fuel|ПТК":{tags:{amenity:"fuel",brand:"ПТК","brand:en":"The Petersburg Fuel Company","brand:wikidata":"Q4360193","brand:wikipedia":"en:Petersburg Fuel Company",name:"ПТК","name:en":"The Petersburg Fuel Company"}},"amenity/fuel|Петрол":{countryCodes:["bg"],tags:{amenity:"fuel",brand:"Петрол","brand:en":"Petrol AD","brand:wikidata":"Q24315","brand:wikipedia":"en:Petrol AD",name:"Петрол","name:en":"Petrol AD"}},"amenity/fuel|Роснефть":{tags:{amenity:"fuel",brand:"Роснефть","brand:en":"Rosneft","brand:wikidata":"Q1141123","brand:wikipedia":"en:Rosneft",name:"Роснефть","name:en":"Rosneft"}},"amenity/fuel|Сургутнефтегаз":{tags:{amenity:"fuel",brand:"Сургутнефтегаз","brand:en":"Surgutneftegas","brand:wikidata":"Q680776","brand:wikipedia":"en:Surgutneftegas",name:"Сургутнефтегаз","name:en":"Surgutneftegas"}},"amenity/fuel|ТНК":{tags:{amenity:"fuel",brand:"ТНК","brand:wikidata":"Q2298901","brand:wikipedia":"en:TNK-BP",name:"ТНК"}},"amenity/fuel|Татнефтепродукт":{countryCodes:["ru"],tags:{amenity:"fuel",brand:"Татнефтепродукт",name:"Татнефтепродукт",operator:"ТАИФ","operator:wikidata":"Q4448860","operator:wikipedia":"en:ТАИФ"}},"amenity/fuel|Татнефть":{tags:{amenity:"fuel",brand:"Татнефть","brand:en":"Tatneft","brand:wikidata":"Q1616858","brand:wikipedia":"en:Tatneft",name:"Татнефть","name:en":"Tatneft"}},"amenity/fuel|Укрнафта":{tags:{amenity:"fuel",brand:"Укрнафта","brand:en":"Ukrnafta","brand:wikidata":"Q2447961","brand:wikipedia":"en:Ukrnafta",name:"Укрнафта","name:en":"Ukrnafta"}},"amenity/fuel|דור אלון":{countryCodes:["il"],tags:{amenity:"fuel",brand:"דור אלון","brand:en":"Dor Alon","brand:he":"דור אלון","brand:wikidata":"Q16130352","brand:wikipedia":"he:דור אלון אנרגיה בישראל (1988)",name:"דור אלון","name:en":"Dor Alon","name:he":"דור אלון"}},"amenity/fuel|סונול":{countryCodes:["il"],tags:{amenity:"fuel",brand:"סונול","brand:en":"Sonol","brand:he":"סונול","brand:wikidata":"Q3701622","brand:wikipedia":"en:Sonol",name:"סונול","name:en":"Sonol","name:he":"סונול"}},"amenity/fuel|פז":{countryCodes:["il"],tags:{amenity:"fuel",brand:"פז","brand:en":"Paz","brand:he":"פז","brand:wikidata":"Q2211731","brand:wikipedia":"en:Paz Oil Company",name:"פז","name:en":"Paz","name:he":"פז"}},"amenity/fuel|ادنوك":{tags:{amenity:"fuel",brand:"ادنوك","brand:ar":"ادنوك","brand:en":"ADNOC","brand:wikidata":"Q166729","brand:wikipedia":"en:Abu Dhabi National Oil Company",name:"ادنوك","name:ar":"ادنوك","name:en":"ADNOC"}},"amenity/fuel|บางจาก":{countryCodes:["th"],tags:{amenity:"fuel",brand:"บางจาก","brand:en":"Bangchak","brand:th":"บางจาก","brand:wikidata":"Q6579719","brand:wikipedia":"th:บางจาก คอร์ปอเรชัน",name:"บางจาก","name:en":"Bangchak","name:th":"บางจาก"}},"amenity/fuel|ป.ต.ท.":{countryCodes:["th"],tags:{amenity:"fuel",brand:"ป.ต.ท.","brand:en":"PTT","brand:th":"ป.ต.ท.","brand:wikidata":"Q1810389","brand:wikipedia":"th:ปตท.",name:"ป.ต.ท.","name:en":"PTT","name:th":"ป.ต.ท."}},"amenity/fuel|เชลล์":{countryCodes:["th"],tags:{amenity:"fuel",brand:"เชลล์","brand:en":"Shell","brand:th":"เชลล์","brand:wikidata":"Q154950","brand:wikipedia":"en:Royal Dutch Shell",name:"เชลล์","name:en":"Shell","name:th":"เชลล์"}},"amenity/fuel|เอสโซ่":{countryCodes:["th"],tags:{amenity:"fuel",brand:"เอสโซ่","brand:en":"Esso","brand:th":"เอสโซ่","brand:wikidata":"Q867662","brand:wikipedia":"en:Esso",name:"เอสโซ่","name:en":"Esso","name:th":"เอสโซ่"}},"amenity/fuel|エッソ":{countryCodes:["jp"],matchNames:["エッソ石油"],tags:{amenity:"fuel",brand:"エッソ","brand:en":"Esso","brand:ja":"エッソ","brand:wikidata":"Q867662","brand:wikipedia":"en:Esso",name:"エッソ","name:en":"Esso","name:ja":"エッソ"}},"amenity/fuel|エネオス":{countryCodes:["jp"],tags:{amenity:"fuel",brand:"エネオス","brand:en":"JXTG Nippon Oil & Energy","brand:ja":"エネオス","brand:wikidata":"Q1640290","brand:wikipedia":"en:JXTG Nippon Oil & Energy",name:"エネオス","name:en":"JXTG Nippon Oil & Energy","name:ja":"エネオス"}},"amenity/fuel|コスモ石油":{countryCodes:["jp"],tags:{amenity:"fuel",brand:"コスモ石油","brand:en":"Cosmo Oil Company","brand:ja":"コスモ石油","brand:wikidata":"Q2498318","brand:wikipedia":"en:Cosmo Oil Company",name:"コスモ石油","name:en":"Cosmo Oil Company","name:ja":"コスモ石油"}},"amenity/fuel|ゼネラル":{countryCodes:["jp"],tags:{amenity:"fuel",brand:"ゼネラル","brand:en":"Tonen General","brand:ja":"ゼネラル","brand:wikidata":"Q11528048","brand:wikipedia":"ja:東燃ゼネラル石油",name:"ゼネラル","name:en":"Tonen General","name:ja":"ゼネラル"}},"amenity/fuel|中国石化":{countryCodes:["cn"],matchNames:["中国石化 Sinopec"],tags:{amenity:"fuel",brand:"中国石化","brand:en":"Sinopec","brand:wikidata":"Q831445","brand:wikipedia":"en:Sinopec",name:"中国石化","name:en":"Sinopec"}},"amenity/fuel|中国石油":{tags:{amenity:"fuel",brand:"中国石油","brand:en":"PetroChina","brand:wikidata":"Q503182","brand:wikipedia":"en:PetroChina",name:"中国石油","name:en":"PetroChina"}},"amenity/fuel|出光":{countryCodes:["jp"],tags:{amenity:"fuel",brand:"出光","brand:en":"Idemitsu Kosan","brand:wikidata":"Q2216770","brand:wikipedia":"en:Idemitsu Kosan",name:"出光","name:en":"Idemitsu Kosan"}},"amenity/fuel|台灣中油":{countryCodes:["tw"],matchNames:["中油"],tags:{amenity:"fuel",brand:"台灣中油","brand:en":"CPC Corporation, Taiwan","brand:wikidata":"Q21527177","brand:wikipedia":"en:CPC Corporation, Taiwan",name:"台灣中油","name:en":"CPC Corporation, Taiwan"}},"amenity/fuel|昭和シェル":{countryCodes:["jp"],matchNames:["昭和シェル石油"],tags:{amenity:"fuel",brand:"昭和シェル","brand:en":"Showa Shell Sekiyu","brand:ja":"昭和シェル","brand:wikidata":"Q277115","brand:wikipedia":"en:Showa Shell Sekiyu",name:"昭和シェル","name:en":"Showa Shell Sekiyu","name:ja":"昭和シェル"}},"amenity/ice_cream|Baskin-Robbins":{tags:{amenity:"ice_cream",brand:"Baskin-Robbins","brand:wikidata":"Q584601","brand:wikipedia":"en:Baskin-Robbins",cuisine:"ice_cream",name:"Baskin-Robbins"}},"amenity/ice_cream|Ben & Jerry's":{matchNames:["ben and jerrys"],tags:{amenity:"ice_cream",brand:"Ben & Jerry's","brand:wikidata":"Q816412","brand:wikipedia":"en:Ben & Jerry's",cuisine:"ice_cream",name:"Ben & Jerry's"}},"amenity/ice_cream|Cold Stone Creamery":{matchNames:["cold stone"],tags:{amenity:"ice_cream",brand:"Cold Stone Creamery","brand:wikidata":"Q1094923","brand:wikipedia":"en:Cold Stone Creamery",cuisine:"ice_cream",name:"Cold Stone Creamery"}},"amenity/ice_cream|D'Onofrio":{countryCodes:["pe"],tags:{amenity:"ice_cream",brand:"D'Onofrio","brand:wikidata":"Q5203166","brand:wikipedia":"es:D'Onofrio",cuisine:"ice_cream",name:"D'Onofrio"}},"amenity/ice_cream|Freddo":{tags:{amenity:"ice_cream",brand:"Freddo","brand:wikidata":"Q28823999","brand:wikipedia":"es:Freddo",cuisine:"ice_cream",name:"Freddo"}},"amenity/ice_cream|Graeter's":{countryCodes:["us"],matchNames:["greaters"],tags:{amenity:"ice_cream",brand:"Graeter's","brand:wikidata":"Q5592430","brand:wikipedia":"en:Graeter's",cuisine:"ice_cream",name:"Graeter's",takeaway:"yes"}},"amenity/ice_cream|Grido":{countryCodes:["ar"],matchNames:["grido helado"],tags:{amenity:"ice_cream",brand:"Grido","brand:wikidata":"Q5885724","brand:wikipedia":"es:Grido Helado",cuisine:"ice_cream",name:"Grido"}},"amenity/ice_cream|La Michoacana":{tags:{amenity:"ice_cream",brand:"La Michoacana",name:"La Michoacana"}},"amenity/ice_cream|Ralph's Italian Ices":{countryCodes:["us"],matchNames:["ralphs famous italian ices","ralphs famous italian ices & ice cream","ralphs famous italian ices and ice cream","ralphs italian ice","ralphs italian ices & ice cream","ralphs italian ices and ice cream"],tags:{amenity:"ice_cream",brand:"Ralph's Italian Ices","brand:wikidata":"Q62576909",cuisine:"ice_cream",name:"Ralph's Italian Ices",official_name:"Ralph's Famous Italian Ices"}},"amenity/ice_cream|Rita's Italian Ice":{countryCodes:["us"],matchNames:["rita's water ice"],tags:{amenity:"ice_cream",brand:"Rita's Italian Ice","brand:wikidata":"Q7336456","brand:wikipedia":"en:Rita's Italian Ice",cuisine:"ice_cream",name:"Rita's Italian Ice"}},"amenity/ice_cream|sweetFrog":{countryCodes:["us"],matchNames:["sweetfrog frozen yogurt","sweetfrog premium frozen yogurt"],tags:{amenity:"ice_cream",brand:"sweetFrog","brand:wikidata":"Q16952110","brand:wikipedia":"en:Sweet Frog",cuisine:"frozen_yogurt",name:"sweetFrog"}},"amenity/ice_cream|サーティワンアイスクリーム":{countryCodes:["jp"],tags:{amenity:"ice_cream",brand:"バスキン・ロビンス","brand:en":"Baskin-Robbins","brand:ja":"バスキン・ロビンス","brand:wikidata":"Q584601","brand:wikipedia":"ja:バスキン・ロビンス",cuisine:"ice_cream",name:"サーティワンアイスクリーム","name:en":"Baskin-Robbins","name:ja":"サーティワンアイスクリーム"}},"amenity/kindergarten|KinderCare":{countryCodes:["us"],matchNames:["kindercare learning center"],tags:{after_school:"yes",alt_name:"KinderCare Learning Center",amenity:"kindergarten",brand:"KinderCare","brand:wikidata":"Q6410551","brand:wikipedia":"en:KinderCare Learning Centers",fee:"yes","isced:level":"0",max_age:"12",min_age:"6 weeks",name:"KinderCare",nursery:"yes",preschool:"yes"}},"amenity/money_transfer|Express Union":{countryCodes:["td"],matchTags:["amenity/bank"],nomatch:["amenity/bank|Banco Unión","amenity/bank|UnionBank"],tags:{amenity:"money_transfer",brand:"Express Union","brand:wikidata":"Q3062276","brand:wikipedia":"fr:Express Union",name:"Express Union"}},"amenity/money_transfer|Orange Money":{tags:{amenity:"money_transfer",brand:"Orange Money","brand:wikidata":"Q16668220","brand:wikipedia":"en:Orange Money",name:"Orange Money"}},"amenity/money_transfer|Western Union":{matchTags:["amenity/bureau_de_change"],nomatch:["amenity/bank|Western Union"],tags:{amenity:"money_transfer",brand:"Western Union","brand:wikidata":"Q861042","brand:wikipedia":"en:Western Union",name:"Western Union"}},"amenity/payment_centre|Abitab":{countryCodes:["uy"],tags:{amenity:"payment_centre",brand:"Abitab","brand:wikidata":"Q16488129","brand:wikipedia":"es:Abitab",name:"Abitab"}},"amenity/payment_centre|Rapipago":{countryCodes:["ar"],tags:{amenity:"payment_centre",brand:"Rapipago","brand:wikidata":"Q6100413","brand:wikipedia":"es:Rapipago",name:"Rapipago"}},"amenity/payment_terminal|Qiwi":{tags:{amenity:"payment_terminal",brand:"Qiwi","brand:wikidata":"Q4047736","brand:wikipedia":"en:Qiwi",name:"Qiwi"}},"amenity/payment_terminal|ПриватБанк":{countryCodes:["ua"],tags:{amenity:"payment_terminal",brand:"ПриватБанк","brand:wikidata":"Q1515015","brand:wikipedia":"en:PrivatBank",name:"ПриватБанк"}},"amenity/payment_terminal|Сбербанк":{tags:{amenity:"payment_terminal",brand:"Сбербанк",name:"Сбербанк"}},"amenity/payment_terminal|Элекснет":{countryCodes:["ru"],tags:{amenity:"payment_terminal",brand:"Элекснет","brand:wikidata":"Q4530795","brand:wikipedia":"ru:Элекснет",name:"Элекснет"}},"amenity/pharmacy|36,6":{countryCodes:["ru"],matchNames:["аптека 36,6"],tags:{amenity:"pharmacy",brand:"36,6","brand:wikidata":"Q226889","brand:wikipedia":"ru:36,6 (аптечная сеть)",healthcare:"pharmacy",name:"36,6"}},"amenity/pharmacy|Amavita":{tags:{amenity:"pharmacy",brand:"Amavita",healthcare:"pharmacy",name:"Amavita"}},"amenity/pharmacy|Amcal":{countryCodes:["au"],matchNames:["amcal pharmacy"],tags:{amenity:"pharmacy",brand:"Amcal","brand:wikidata":"Q63367373",healthcare:"pharmacy",name:"Amcal"}},"amenity/pharmacy|Apollo Pharmacy":{countryCodes:["in"],nomatch:["shop/optician|Apollo-Optik"],tags:{amenity:"pharmacy",brand:"Apollo Pharmacy","brand:wikidata":"Q62562612",healthcare:"pharmacy",name:"Apollo Pharmacy",operator:"Apollo Hospitals","operator:wikidata":"Q4780321","operator:wikipedia":"en:Apollo Hospitals"}},"amenity/pharmacy|Apotek Hjärtat":{countryCodes:["se"],tags:{amenity:"pharmacy",brand:"Apotek Hjärtat","brand:wikidata":"Q10416114","brand:wikipedia":"sv:Apotek Hjärtat",healthcare:"pharmacy",name:"Apotek Hjärtat"}},"amenity/pharmacy|Bartell Drugs":{countryCodes:["us"],tags:{amenity:"pharmacy",brand:"Bartell Drugs","brand:wikidata":"Q4865152","brand:wikipedia":"en:Bartell Drugs",healthcare:"pharmacy",name:"Bartell Drugs"}},"amenity/pharmacy|Benavides":{countryCodes:["mx"],tags:{amenity:"pharmacy",brand:"Benavides","brand:wikidata":"Q5435613","brand:wikipedia":"en:Farmacias Benavides",healthcare:"pharmacy",name:"Benavides"}},"amenity/pharmacy|Benu":{tags:{amenity:"pharmacy",brand:"Benu","brand:wikidata":"Q62562792",healthcare:"pharmacy",name:"Benu"}},"amenity/pharmacy|Blooms The Chemist":{countryCodes:["au"],tags:{amenity:"pharmacy",brand:"Blooms The Chemist","brand:wikidata":"Q63367543",healthcare:"pharmacy",name:"Blooms The Chemist",shop:"chemist"}},"amenity/pharmacy|Boots":{countryCodes:["gb"],matchNames:["boots pharmacy"],nomatch:["shop/chemist|Boots"],tags:{amenity:"pharmacy",brand:"Boots","brand:wikidata":"Q6123139","brand:wikipedia":"en:Boots UK",healthcare:"pharmacy",name:"Boots"}},"amenity/pharmacy|Boticas y Salud":{countryCodes:["pe"],tags:{amenity:"pharmacy",brand:"Boticas y Salud","brand:wikidata":"Q62563126",healthcare:"pharmacy",name:"Boticas y Salud"}},"amenity/pharmacy|Brookshire Brothers Pharmacy":{countryCodes:["us"],tags:{amenity:"pharmacy",brand:"Brookshire Brothers Pharmacy","brand:wikidata":"Q4975084","brand:wikipedia":"en:Brookshire Brothers",healthcare:"pharmacy",name:"Brookshire Brothers Pharmacy"}},"amenity/pharmacy|Brookshire's Pharmacy":{tags:{amenity:"pharmacy",brand:"Brookshire's Pharmacy",healthcare:"pharmacy",name:"Brookshire's Pharmacy"}},"amenity/pharmacy|CVS":{matchNames:["cvs pharmacy"],nomatch:["shop/chemist|CVS"],tags:{amenity:"pharmacy",brand:"CVS","brand:wikidata":"Q2078880","brand:wikipedia":"en:CVS Pharmacy",healthcare:"pharmacy",name:"CVS"}},"amenity/pharmacy|Camelia":{countryCodes:["lt"],tags:{amenity:"pharmacy",brand:"Camelia","brand:wikidata":"Q15867413","brand:wikipedia":"lt:Nemuno vaistinė",healthcare:"pharmacy",name:"Camelia"}},"amenity/pharmacy|Catena":{countryCodes:["ro"],tags:{amenity:"pharmacy",brand:"Catena","brand:wikidata":"Q24035728","brand:wikipedia":"ro:Farmacia Catena",healthcare:"pharmacy",name:"Catena"}},"amenity/pharmacy|Chemist King Discount Pharmacy":{countryCodes:["au"],matchNames:["chemist king","chemist king discount pharmacies"],tags:{amenity:"pharmacy",brand:"Chemist King Discount Pharmacy","brand:wikidata":"Q63367667",healthcare:"pharmacy",name:"Chemist King Discount Pharmacy"}},"amenity/pharmacy|Chemist Warehouse":{countryCodes:["au","nz"],tags:{amenity:"pharmacy",brand:"Chemist Warehouse","brand:wikidata":"Q48782120","brand:wikipedia":"en:Chemist Warehouse",healthcare:"pharmacy",name:"Chemist Warehouse"}},"amenity/pharmacy|Clicks":{countryCodes:["za"],tags:{amenity:"pharmacy",brand:"Clicks","brand:wikidata":"Q62563622",healthcare:"pharmacy",name:"Clicks"}},"amenity/pharmacy|Costco Pharmacy":{nomatch:["amenity/fuel|Costco Gasoline","shop/wholesale|Costco"],tags:{amenity:"pharmacy",brand:"Costco Pharmacy","brand:wikidata":"Q715583","brand:wikipedia":"en:Costco",healthcare:"pharmacy",name:"Costco Pharmacy"}},"amenity/pharmacy|Cruz Azul":{countryCodes:["ec"],matchNames:["farmacias cruz azul"],tags:{amenity:"pharmacy",brand:"Cruz Azul","brand:wikidata":"Q62108219",healthcare:"pharmacy",name:"Cruz Azul"}},"amenity/pharmacy|Cruz Verde":{countryCodes:["cl"],matchNames:["farmacias cruz verde"],tags:{amenity:"pharmacy",brand:"Cruz Verde","brand:wikidata":"Q5856071","brand:wikipedia":"es:Farmacias Cruz Verde",healthcare:"pharmacy",name:"Cruz Verde"}},"amenity/pharmacy|Day Lewis Pharmacy":{countryCodes:["gb"],tags:{amenity:"pharmacy",brand:"Day Lewis Pharmacy","brand:wikidata":"Q62563772",healthcare:"pharmacy",name:"Day Lewis Pharmacy"}},"amenity/pharmacy|Dbam o Zdrowie":{countryCodes:["pl"],tags:{amenity:"pharmacy",brand:"Dbam o Zdrowie","brand:wikidata":"Q62563833",healthcare:"pharmacy",name:"Dbam o Zdrowie"}},"amenity/pharmacy|Dr. Max":{tags:{amenity:"pharmacy",brand:"Dr. Max","brand:wikidata":"Q56317371","brand:wikipedia":"fr:Dr.Max",healthcare:"pharmacy",name:"Dr. Max"}},"amenity/pharmacy|Droga Raia":{countryCodes:["br"],tags:{amenity:"pharmacy",brand:"Droga Raia","brand:wikidata":"Q10357101","brand:wikipedia":"pt:RaiaDrogasil",healthcare:"pharmacy",name:"Droga Raia"}},"amenity/pharmacy|Drogaria São Paulo":{countryCodes:["br"],tags:{amenity:"pharmacy",brand:"Drogaria São Paulo","brand:wikidata":"Q5308184","brand:wikipedia":"en:Grupo DPSP",healthcare:"pharmacy",name:"Drogaria São Paulo"}},"amenity/pharmacy|Drogasil":{countryCodes:["br"],tags:{amenity:"pharmacy",brand:"Drogasil","brand:wikidata":"Q5308185","brand:wikipedia":"pt:Drogasil",healthcare:"pharmacy",name:"Drogasil",wheelchair:"yes"}},"amenity/pharmacy|Duane Reade":{countryCodes:["us"],tags:{amenity:"pharmacy",brand:"Duane Reade","brand:wikidata":"Q5310380","brand:wikipedia":"en:Duane Reade",healthcare:"pharmacy",name:"Duane Reade"}},"amenity/pharmacy|Eurovaistinė":{countryCodes:["lt"],tags:{amenity:"pharmacy",brand:"Eurovaistinė","brand:wikidata":"Q267205","brand:wikipedia":"en:Euroapotheca",healthcare:"pharmacy",name:"Eurovaistinė"}},"amenity/pharmacy|Extrafarma":{countryCodes:["br"],tags:{amenity:"pharmacy",brand:"Extrafarma","brand:wikidata":"Q20055480","brand:wikipedia":"pt:Extrafarma",healthcare:"pharmacy",name:"Extrafarma"}},"amenity/pharmacy|Familiprix":{countryCodes:["ca"],tags:{amenity:"pharmacy",brand:"Familiprix","brand:wikidata":"Q3064881","brand:wikipedia":"en:Familiprix",healthcare:"pharmacy",name:"Familiprix"}},"amenity/pharmacy|Farmacenter~(Colombia)":{countryCodes:["co"],tags:{amenity:"pharmacy",brand:"Farmacenter","brand:wikidata":"Q62563928",healthcare:"pharmacy",name:"Farmacenter"}},"amenity/pharmacy|Farmacenter~(Paraguay)":{countryCodes:["py"],tags:{amenity:"pharmacy",brand:"Farmacenter","brand:wikidata":"",healthcare:"pharmacy",name:"Farmacenter"}},"amenity/pharmacy|Farmacia Benavides":{tags:{amenity:"pharmacy",brand:"Farmacia Benavides","brand:wikidata":"Q5435613","brand:wikipedia":"en:Farmacias Benavides",healthcare:"pharmacy",name:"Farmacia Benavides"}},"amenity/pharmacy|Farmacia Familiei":{tags:{amenity:"pharmacy",brand:"Farmacia Familiei",healthcare:"pharmacy",name:"Farmacia Familiei"}},"amenity/pharmacy|Farmacia Guadalajara":{countryCodes:["mx"],matchNames:["farmacias guadalajara"],tags:{amenity:"pharmacy",brand:"Farmacia Guadalajara","brand:wikidata":"Q5435609","brand:wikipedia":"en:Farmacias Guadalajara",healthcare:"pharmacy",name:"Farmacia Guadalajara"}},"amenity/pharmacy|Farmacias Ahumada":{tags:{amenity:"pharmacy",brand:"Farmacias Ahumada","brand:wikidata":"Q5856069","brand:wikipedia":"es:Farmacias Ahumada",healthcare:"pharmacy",name:"Farmacias Ahumada"}},"amenity/pharmacy|Farmacias Económicas~(Ecuador)":{countryCodes:["ec"],tags:{amenity:"pharmacy",brand:"Farmacias Económicas","brand:wikidata":"Q62108380",healthcare:"pharmacy",name:"Farmacias Económicas"}},"amenity/pharmacy|Farmacias Económicas~(El Salvador)":{countryCodes:["sv"],tags:{amenity:"pharmacy",brand:"Farmacias Económicas","brand:wikidata":"Q62108397",healthcare:"pharmacy",name:"Farmacias Económicas"}},"amenity/pharmacy|Farmacias SalcoBrand":{countryCodes:["cl"],tags:{amenity:"pharmacy",brand:"Farmacias SalcoBrand","brand:wikidata":"Q2877054","brand:wikipedia":"es:Farmacias Salcobrand",healthcare:"pharmacy",name:"Farmacias SalcoBrand"}},"amenity/pharmacy|Farmacias Similares":{countryCodes:["cl","gt","mx"],matchNames:["similares"],tags:{amenity:"pharmacy",brand:"Farmacias Similares","brand:wikidata":"Q62564610",healthcare:"pharmacy",name:"Farmacias Similares"}},"amenity/pharmacy|Farmacias del Ahorro":{countryCodes:["mx"],matchNames:["farmacia del ahorro"],tags:{amenity:"pharmacy",brand:"Farmacias del Ahorro","brand:wikidata":"Q62086647",healthcare:"pharmacy",name:"Farmacias del Ahorro"}},"amenity/pharmacy|Farmacias del Dr. Simi":{countryCodes:["cl","gt","mx"],tags:{amenity:"pharmacy",brand:"Farmacias del Dr. Simi","brand:wikidata":"Q62564610",healthcare:"pharmacy",name:"Farmacias del Dr. Simi"}},"amenity/pharmacy|Farmacity":{countryCodes:["ra"],tags:{amenity:"pharmacy",brand:"Farmacity","brand:wikidata":"Q5856076","brand:wikipedia":"es:Farmacity",healthcare:"pharmacy",name:"Farmacity"}},"amenity/pharmacy|Farmacorp":{countryCodes:["bo"],tags:{amenity:"pharmacy",brand:"Farmacorp",healthcare:"pharmacy",name:"Farmacorp"}},"amenity/pharmacy|Farmahorro":{tags:{amenity:"pharmacy",brand:"Farmahorro","brand:wikidata":"Q20015002","brand:wikipedia":"es:Farmahorro",healthcare:"pharmacy",name:"Farmahorro"}},"amenity/pharmacy|Farmatodo":{tags:{amenity:"pharmacy",brand:"Farmatodo","brand:wikidata":"Q5856092","brand:wikipedia":"es:Farmatodo",healthcare:"pharmacy",name:"Farmatodo"}},"amenity/pharmacy|Felicia":{countryCodes:["md"],tags:{amenity:"pharmacy",brand:"Felicia","brand:wikidata":"Q62564805",healthcare:"pharmacy",name:"Felicia"}},"amenity/pharmacy|Fybeca":{countryCodes:["ec"],tags:{amenity:"pharmacy",brand:"Fybeca","brand:wikidata":"Q62564822",healthcare:"pharmacy",name:"Fybeca"}},"amenity/pharmacy|Generika":{countryCodes:["ph"],matchNames:["generika drugstore"],tags:{amenity:"pharmacy",brand:"Generika","brand:wikidata":"Q62564876",healthcare:"pharmacy",name:"Generika"}},"amenity/pharmacy|Gintarinė vaistinė":{countryCodes:["lt"],tags:{amenity:"pharmacy",brand:"Gintarinė vaistinė","brand:wikidata":"Q15857801","brand:wikipedia":"lt:Gintarinė vaistinė",healthcare:"pharmacy",name:"Gintarinė vaistinė"}},"amenity/pharmacy|Guardian~(Asia)":{countryCodes:["bn","id","kh","my","sg","vn"],tags:{amenity:"pharmacy",brand:"Guardian","brand:wikidata":"Q63371124",healthcare:"pharmacy",name:"Guardian"}},"amenity/pharmacy|Guardian~(Australia)":{countryCodes:["au"],matchNames:["guardian pharmacies","guardian pharmacy"],tags:{brand:"Guardian","brand:wikidata":"Q63367814",healthcare:"pharmacy",name:"Guardian"}},"amenity/pharmacy|H-E-B Pharmacy":{countryCodes:["us"],tags:{amenity:"pharmacy",brand:"H-E-B Pharmacy","brand:wikidata":"Q830621","brand:wikipedia":"en:H-E-B",healthcare:"pharmacy",name:"H-E-B Pharmacy"}},"amenity/pharmacy|Hy-Vee Pharmacy":{countryCodes:["us"],tags:{amenity:"pharmacy",brand:"Hy-Vee Pharmacy","brand:wikidata":"Q1639719","brand:wikipedia":"en:Hy-Vee",healthcare:"pharmacy",name:"Hy-Vee Pharmacy"}},"amenity/pharmacy|Inkafarma":{tags:{amenity:"pharmacy",brand:"Inkafarma","brand:wikidata":"Q10997748","brand:wikipedia":"es:Inkafarma",healthcare:"pharmacy",name:"Inkafarma"}},"amenity/pharmacy|Jean Coutu":{countryCodes:["ca"],tags:{amenity:"pharmacy",brand:"Jean Coutu","brand:wikidata":"Q3117457","brand:wikipedia":"en:Jean Coutu Group",healthcare:"pharmacy",name:"Jean Coutu"}},"amenity/pharmacy|Kimia Farma":{tags:{amenity:"pharmacy",brand:"Kimia Farma","brand:wikidata":"Q11264892","brand:wikipedia":"en:Kimia Farma",healthcare:"pharmacy",name:"Kimia Farma"}},"amenity/pharmacy|Kinney Drugs":{countryCodes:["us"],tags:{amenity:"pharmacy",brand:"Kinney Drugs","brand:wikidata":"Q6414090","brand:wikipedia":"en:Kinney Drugs",healthcare:"pharmacy",name:"Kinney Drugs"}},"amenity/pharmacy|Kroger Pharmacy":{tags:{amenity:"pharmacy",brand:"Kroger Pharmacy",healthcare:"pharmacy",name:"Kroger Pharmacy"}},"amenity/pharmacy|Kronans Apotek":{tags:{amenity:"pharmacy",brand:"Kronans Apotek",healthcare:"pharmacy",name:"Kronans Apotek"}},"amenity/pharmacy|Lloyds Pharmacy":{matchNames:["lloyds"],tags:{amenity:"pharmacy",brand:"Lloyds Pharmacy","brand:wikidata":"Q6662870","brand:wikipedia":"en:LloydsPharmacy",healthcare:"pharmacy",name:"Lloyds Pharmacy"}},"amenity/pharmacy|London Drugs":{countryCodes:["ca"],tags:{amenity:"pharmacy",brand:"London Drugs","brand:wikidata":"Q3258955","brand:wikipedia":"en:London Drugs",healthcare:"pharmacy",name:"London Drugs"}},"amenity/pharmacy|Mannings":{countryCodes:["cn","hk","mo"],tags:{amenity:"pharmacy",brand:"Mannings","brand:wikidata":"Q13646560","brand:wikipedia":"en:Mannings",healthcare:"pharmacy",name:"Mannings"}},"amenity/pharmacy|Marc's Pharmacy":{countryCodes:["us"],nomatch:["shop/supermarket|Marc's"],tags:{amenity:"pharmacy",brand:"Marc's","brand:wikidata":"Q17080259","brand:wikipedia":"en:Marc's",healthcare:"pharmacy",name:"Marc's Pharmacy"}},"amenity/pharmacy|Mercury Drug":{countryCodes:["ph"],tags:{amenity:"pharmacy",brand:"Mercury Drug","brand:wikidata":"Q6818610","brand:wikipedia":"en:Mercury Drug",healthcare:"pharmacy",name:"Mercury Drug"}},"amenity/pharmacy|Mifarma":{countryCodes:["pe"],tags:{amenity:"pharmacy",brand:"Mifarma","brand:wikidata":"Q62564998",healthcare:"pharmacy",name:"Mifarma"}},"amenity/pharmacy|Multipharma":{countryCodes:["be"],tags:{amenity:"pharmacy",brand:"Multipharma","brand:wikidata":"Q62565018",healthcare:"pharmacy",name:"Multipharma"}},"amenity/pharmacy|Mēness aptieka":{countryCodes:["lv"],tags:{amenity:"pharmacy",brand:"Mēness aptieka","brand:wikidata":"Q57583051",healthcare:"pharmacy",name:"Mēness aptieka"}},"amenity/pharmacy|Pague Menos":{countryCodes:["br"],matchNames:["farmácia pague menos"],tags:{amenity:"pharmacy",brand:"Pague Menos","brand:wikidata":"Q7124466","brand:wikipedia":"pt:Pague Menos",healthcare:"pharmacy",name:"Pague Menos"}},"amenity/pharmacy|Panvel":{countryCodes:["br"],tags:{amenity:"pharmacy",brand:"Panvel","brand:wikipedia":"pt:Panvel","branf:wikidata":"Q10344254",healthcare:"pharmacy",name:"Panvel"}},"amenity/pharmacy|PharmaSave~(Australia)":{countryCodes:["au"],nomatch:["amenity/pharmacy|Pharmasave~(Canada)"],tags:{amenity:"pharmacy",brand:"PharmaSave","brand:wikidata":"Q63367906",healthcare:"pharmacy",name:"PharmaSave"}},"amenity/pharmacy|Pharmacie Principale":{tags:{amenity:"pharmacy",brand:"Pharmacie Principale","brand:wikidata":"Q1547749","brand:wikipedia":"fr:Groupe PP Holding",healthcare:"pharmacy",name:"Pharmacie Principale"}},"amenity/pharmacy|Pharmacy 4 Less":{countryCodes:["au"],tags:{amenity:"pharmacy",brand:"Pharmacy 4 Less","brand:wikidata":"Q63367608",healthcare:"pharmacy",name:"Pharmacy 4 Less"}},"amenity/pharmacy|Pharmaprix":{tags:{amenity:"pharmacy",brand:"Pharmaprix","brand:wikidata":"Q1820137","brand:wikipedia":"en:Shoppers Drug Mart",healthcare:"pharmacy",name:"Pharmaprix"}},"amenity/pharmacy|Pharmasave~(Canada)":{countryCodes:["ca"],nomatch:["amenity/pharmacy|Pharmasave~(Australia)"],tags:{amenity:"pharmacy",brand:"Pharmasave","brand:wikidata":"Q17093822","brand:wikipedia":"en:Pharmasave",healthcare:"pharmacy",name:"Pharmasave"}},"amenity/pharmacy|Priceline Pharmacy":{countryCodes:["au"],matchNames:["priceline"],tags:{amenity:"pharmacy",brand:"Priceline Pharmacy","brand:wikidata":"Q7242652","brand:wikipedia":"en:Priceline (Australia)",healthcare:"pharmacy",name:"Priceline Pharmacy"}},"amenity/pharmacy|Punto Farma~(Colombia)":{countryCodes:["co"],tags:{amenity:"pharmacy",brand:"Punto Farma","brand:wikidata":"Q62595271",healthcare:"pharmacy",name:"Punto Farma"}},"amenity/pharmacy|Punto Farma~(Honduras)":{countryCodes:["hn"],tags:{amenity:"pharmacy",brand:"Punto Farma","brand:wikidata":"Q62595229",healthcare:"pharmacy",name:"Punto Farma"}},"amenity/pharmacy|Punto Farma~(Paraguay)":{countryCodes:["py"],tags:{amenity:"pharmacy",brand:"Punto Farma","brand:wikidata":"Q62595220",healthcare:"pharmacy",name:"Punto Farma"}},"amenity/pharmacy|Rexall":{tags:{amenity:"pharmacy",brand:"Rexall","brand:wikidata":"Q7319360","brand:wikipedia":"en:Rexall",healthcare:"pharmacy",name:"Rexall"}},"amenity/pharmacy|Rite Aid":{countryCodes:["us"],matchNames:["rite aid pharmacy"],nomatch:["shop/chemist|Rite Aid"],tags:{amenity:"pharmacy",brand:"Rite Aid","brand:wikidata":"Q3433273","brand:wikipedia":"en:Rite Aid",healthcare:"pharmacy",name:"Rite Aid"}},"amenity/pharmacy|Rose Pharmacy":{countryCodes:["ph"],tags:{amenity:"pharmacy",brand:"Rose Pharmacy","brand:wikidata":"Q62663208",healthcare:"pharmacy",name:"Rose Pharmacy"}},"amenity/pharmacy|Rowlands Pharmacy":{countryCodes:["gb"],tags:{amenity:"pharmacy",brand:"Rowlands Pharmacy","brand:wikidata":"Q62663235",healthcare:"pharmacy",name:"Rowlands Pharmacy"}},"amenity/pharmacy|SalcoBrand":{countryCodes:["cl"],tags:{amenity:"pharmacy",brand:"SalcoBrand","brand:wikidata":"Q2877054","brand:wikipedia":"es:Farmacias Salcobrand",healthcare:"pharmacy",name:"SalcoBrand"}},"amenity/pharmacy|Sana Sana":{countryCodes:["ec"],matchNames:["farmacias sana sana"],tags:{amenity:"pharmacy",brand:"Sana Sana","brand:wikidata":"Q62564499",healthcare:"pharmacy",name:"Sana Sana"}},"amenity/pharmacy|Sensiblu":{countryCodes:["ro"],tags:{amenity:"pharmacy",brand:"Sensiblu","brand:wikidata":"Q12740640","brand:wikipedia":"ro:Sensiblu",healthcare:"pharmacy",name:"Sensiblu"}},"amenity/pharmacy|Shoppers Drug Mart":{countryCodes:["ca"],tags:{amenity:"pharmacy",brand:"Shoppers Drug Mart","brand:wikidata":"Q1820137","brand:wikipedia":"en:Shoppers Drug Mart",healthcare:"pharmacy",name:"Shoppers Drug Mart"}},"amenity/pharmacy|South Star Drug":{countryCodes:["ph"],tags:{amenity:"pharmacy",brand:"South Star Drug","brand:wikidata":"Q7568544","brand:wikipedia":"en:South Star Drug",healthcare:"pharmacy",name:"South Star Drug"}},"amenity/pharmacy|Superdrug":{countryCodes:["gb"],nomatch:["shop/chemist|Superdrug"],tags:{amenity:"pharmacy",brand:"Superdrug","brand:wikidata":"Q7643261","brand:wikipedia":"en:Superdrug",healthcare:"pharmacy",name:"Superdrug"}},"amenity/pharmacy|São João":{countryCodes:["br"],tags:{amenity:"pharmacy",brand:"São João","brand:wikidata":"Q62663306",healthcare:"pharmacy",name:"São João"}},"amenity/pharmacy|TGP":{countryCodes:["ph"],matchNames:["the generics pharmacy"],tags:{amenity:"pharmacy",brand:"The Generics Pharmacy","brand:wikidata":"Q61948677",healthcare:"pharmacy",name:"TGP",official_name:"The Generics Pharmacy"}},"amenity/pharmacy|TerryWhite Chemmart":{countryCodes:["au"],matchNames:["terrywhite","terrywhite chemist","terrywhite chemists"],tags:{amenity:"pharmacy",brand:"TerryWhite Chemmart","brand:wikidata":"Q24089773","brand:wikipedia":"en:Terry White Chemmart",healthcare:"pharmacy",name:"TerryWhite Chemmart"}},"amenity/pharmacy|UFS":{countryCodes:["au"],matchNames:["ufs dispensaries"],tags:{amenity:"pharmacy",brand:"UFS","brand:wikidata":"Q63367573",healthcare:"pharmacy",name:"UFS"}},"amenity/pharmacy|Unichem Pharmacy":{countryCodes:["nz"],tags:{amenity:"pharmacy",brand:"Unichem Pharmacy","brand:wikidata":"Q62663379",healthcare:"pharmacy",name:"Unichem Pharmacy"}},"amenity/pharmacy|Uniprix":{countryCodes:["ca"],tags:{amenity:"pharmacy",brand:"Uniprix","brand:wikidata":"Q683265","brand:wikipedia":"en:Uniprix",healthcare:"pharmacy",name:"Uniprix"}},"amenity/pharmacy|Walgreens":{countryCodes:["us"],matchNames:["walgreens pharmacy"],nomatch:["shop/chemist|Walgreens"],tags:{amenity:"pharmacy",brand:"Walgreens","brand:wikidata":"Q1591889","brand:wikipedia":"en:Walgreens",healthcare:"pharmacy",name:"Walgreens"}},"amenity/pharmacy|Walmart Pharmacy":{tags:{amenity:"pharmacy",brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",healthcare:"pharmacy",name:"Walmart Pharmacy",operator:"Walmart","operator:wikidata":"Q483551","operator:wikipedia":"en:Walmart"}},"amenity/pharmacy|Watsons":{nomatch:["shop/chemist|Watsons"],tags:{amenity:"pharmacy",brand:"Watsons","brand:wikidata":"Q7974785","brand:wikipedia":"en:Watsons",healthcare:"pharmacy",name:"Watsons",operator:"A.S. Watson Group","operator:wikidata":"Q4647401","operator:wikipedia":"en:A.S. Watson Group"}},"amenity/pharmacy|Well Pharmacy":{countryCodes:["gb"],matchNames:["well"],tags:{amenity:"pharmacy",brand:"Well Pharmacy","brand:wikidata":"Q7726524","brand:wikipedia":"en:Well Pharmacy",healthcare:"pharmacy",name:"Well Pharmacy"}},"amenity/pharmacy|Ziko Apteka":{matchNames:["ziko"],tags:{amenity:"pharmacy",brand:"Ziko Apteka","brand:wikidata":"Q63432892",healthcare:"pharmacy",name:"Ziko Apteka",short_name:"Ziko"}},"amenity/pharmacy|Φαρμακειο":{tags:{amenity:"pharmacy",brand:"Φαρμακειο",healthcare:"pharmacy",name:"Φαρμακειο"}},"amenity/pharmacy|А5":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"А5","brand:wikidata":"Q62663476",healthcare:"pharmacy",name:"А5"}},"amenity/pharmacy|Бережная аптека":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Бережная аптека","brand:wikidata":"Q62664194",healthcare:"pharmacy",name:"Бережная аптека"}},"amenity/pharmacy|Будь здоров":{countryCodes:["ru","ua"],tags:{amenity:"pharmacy",brand:"Будь здоров",healthcare:"pharmacy",name:"Будь здоров"}},"amenity/pharmacy|Вита":{tags:{amenity:"pharmacy",brand:"Вита",healthcare:"pharmacy",name:"Вита"}},"amenity/pharmacy|Горздрав":{tags:{amenity:"pharmacy",brand:"Горздрав",healthcare:"pharmacy",name:"Горздрав"}},"amenity/pharmacy|Добрая аптека":{tags:{amenity:"pharmacy",brand:"Добрая аптека",healthcare:"pharmacy",name:"Добрая аптека"}},"amenity/pharmacy|Живика":{tags:{amenity:"pharmacy",brand:"Живика",healthcare:"pharmacy",name:"Живика"}},"amenity/pharmacy|Здоровье":{tags:{amenity:"pharmacy",brand:"Здоровье",healthcare:"pharmacy",name:"Здоровье"}},"amenity/pharmacy|Зеленая аптека":{tags:{amenity:"pharmacy",brand:"Зеленая аптека",healthcare:"pharmacy",name:"Зеленая аптека"}},"amenity/pharmacy|Имплозия":{tags:{amenity:"pharmacy",brand:"Имплозия",healthcare:"pharmacy",name:"Имплозия"}},"amenity/pharmacy|Классика":{tags:{amenity:"pharmacy",brand:"Классика",healthcare:"pharmacy",name:"Классика"}},"amenity/pharmacy|Ладушка":{tags:{amenity:"pharmacy",brand:"Ладушка",healthcare:"pharmacy",name:"Ладушка"}},"amenity/pharmacy|Максавит":{tags:{amenity:"pharmacy",brand:"Максавит",healthcare:"pharmacy",name:"Максавит"}},"amenity/pharmacy|Марешки":{tags:{amenity:"pharmacy",brand:"Марешки",healthcare:"pharmacy",name:"Марешки"}},"amenity/pharmacy|Мед-сервіс":{tags:{amenity:"pharmacy",brand:"Мед-сервіс",healthcare:"pharmacy",name:"Мед-сервіс"}},"amenity/pharmacy|Мелодия здоровья":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Мелодия здоровья",healthcare:"pharmacy",name:"Мелодия здоровья"}},"amenity/pharmacy|Невис":{tags:{amenity:"pharmacy",brand:"Невис",healthcare:"pharmacy",name:"Невис"}},"amenity/pharmacy|Норма":{tags:{amenity:"pharmacy",brand:"Норма",healthcare:"pharmacy",name:"Норма"}},"amenity/pharmacy|Озерки":{tags:{amenity:"pharmacy",brand:"Озерки",healthcare:"pharmacy",name:"Озерки"}},"amenity/pharmacy|Панацея":{tags:{amenity:"pharmacy",brand:"Панацея",healthcare:"pharmacy",name:"Панацея"}},"amenity/pharmacy|Первая помощь":{tags:{amenity:"pharmacy",brand:"Первая помощь",healthcare:"pharmacy",name:"Первая помощь"}},"amenity/pharmacy|Планета здоровья":{tags:{amenity:"pharmacy",brand:"Планета здоровья",healthcare:"pharmacy",name:"Планета здоровья"}},"amenity/pharmacy|Подорожник":{tags:{amenity:"pharmacy",brand:"Подорожник",healthcare:"pharmacy",name:"Подорожник"}},"amenity/pharmacy|Радуга":{tags:{amenity:"pharmacy",brand:"Радуга",healthcare:"pharmacy",name:"Радуга"}},"amenity/pharmacy|Ригла":{tags:{amenity:"pharmacy",brand:"Ригла","brand:wikidata":"Q4394431","brand:wikipedia":"ru:Ригла",healthcare:"pharmacy",name:"Ригла"}},"amenity/pharmacy|Семейная":{tags:{amenity:"pharmacy",brand:"Семейная",healthcare:"pharmacy",name:"Семейная"}},"amenity/pharmacy|Семейная аптека":{tags:{amenity:"pharmacy",brand:"Семейная аптека",healthcare:"pharmacy",name:"Семейная аптека"}},"amenity/pharmacy|Социальная аптека":{tags:{amenity:"pharmacy",brand:"Социальная аптека",healthcare:"pharmacy",name:"Социальная аптека"}},"amenity/pharmacy|Столички":{tags:{amenity:"pharmacy",brand:"Столички",healthcare:"pharmacy",name:"Столички"}},"amenity/pharmacy|Фармакопейка":{tags:{amenity:"pharmacy",brand:"Фармакопейка",healthcare:"pharmacy",name:"Фармакопейка"}},"amenity/pharmacy|Фармакор":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Фармакор",healthcare:"pharmacy",name:"Фармакор"}},"amenity/pharmacy|Фармація":{tags:{amenity:"pharmacy",brand:"Фармація",healthcare:"pharmacy",name:"Фармація"}},"amenity/pharmacy|Фармленд":{tags:{amenity:"pharmacy",brand:"Фармленд",healthcare:"pharmacy",name:"Фармленд"}},"amenity/pharmacy|Центральная аптека":{tags:{amenity:"pharmacy",brand:"Центральная аптека",healthcare:"pharmacy",name:"Центральная аптека"}},"amenity/pharmacy|סופר-פארם":{countryCodes:["il"],tags:{amenity:"pharmacy",brand:"סופר-פארם","brand:he":"סופר-פארם","brand:wikidata":"Q13220217","brand:wikipedia":"en:Super-Pharm",healthcare:"pharmacy",name:"סופר-פארם","name:he":"סופר-פארם"}},"amenity/pharmacy|くすりの福太郎":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"くすりの福太郎","brand:en":"Kusurino FUKUTARO","brand:ja":"くすりの福太郎","brand:wikidata":"Q17214460","brand:wikipedia":"ja:くすりの福太郎",healthcare:"pharmacy",name:"くすりの福太郎","name:en":"Kusurino Fukutaro","name:ja":"くすりの福太郎"}},"amenity/pharmacy|さくら薬局":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"さくら薬局","brand:ja":"さくら薬局",healthcare:"pharmacy",name:"さくら薬局","name:ja":"さくら薬局"}},"amenity/pharmacy|ウェルパーク":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"ウェルパーク","brand:ja":"ウェルパーク","brand:wikidata":"Q11288610","brand:wikipedia":"ja:ウェルパーク",healthcare:"pharmacy",name:"ウェルパーク","name:en":"Welpark","name:ja":"ウェルパーク"}},"amenity/pharmacy|ウエルシア":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"ウエルシア","brand:en":"Welcia","brand:ja":"ウエルシア","brand:wikidata":"Q11288684","brand:wikipedia":"ja:ウエルシアホールディングス",healthcare:"pharmacy",name:"ウエルシア","name:en":"Welcia","name:ja":"ウエルシア"}},"amenity/pharmacy|ウエルシア薬局":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"ウエルシア薬局","brand:en":"Welcia Yakkyoku","brand:ja":"ウエルシア薬局","brand:wikidata":"Q11288687","brand:wikipedia":"ja:ウエルシア薬局",healthcare:"pharmacy",name:"ウエルシア薬局","name:en":"Welcia Yakkyoku","name:ja":"ウエルシア薬局"}},"amenity/pharmacy|カワチ薬品":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"カワチ薬品","brand:en":"Cawachi","brand:ja":"カワチ薬品","brand:wikidata":"Q11295397","brand:wikipedia":"ja:カワチ薬品",healthcare:"pharmacy",name:"カワチ薬品","name:en":"Cawachi","name:ja":"カワチ薬品"}},"amenity/pharmacy|キリン堂":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"キリン堂","brand:en":"Kirindo","brand:ja":"キリン堂","brand:wikidata":"Q11297751","brand:wikipedia":"ja:キリン堂",healthcare:"pharmacy",name:"キリン堂","name:en":"Kirindo","name:ja":"キリン堂"}},"amenity/pharmacy|クリエイト":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"クリエイト","brand:en":"Create","brand:ja":"クリエイト","brand:wikidata":"Q11299163","brand:wikipedia":"ja:クリエイトSDホールディングス",healthcare:"pharmacy",name:"クリエイト","name:en":"Create","name:ja":"クリエイト"}},"amenity/pharmacy|クリエイトSD":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"クリエイトSD","brand:ja":"クリエイトSD",healthcare:"pharmacy",name:"クリエイトSD","name:ja":"クリエイトSD"}},"amenity/pharmacy|ココカラファイン":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"ココカラファイン","brand:ja":"ココカラファイン","brand:wikidata":"Q11301948","brand:wikipedia":"ja:ココカラファイン",healthcare:"pharmacy",name:"ココカラファイン","name:en":"Cocokara Fine","name:ja":"ココカラファイン"}},"amenity/pharmacy|サツドラ":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"サツドラ","brand:ja":"サツドラ",healthcare:"pharmacy",name:"サツドラ","name:ja":"サツドラ"}},"amenity/pharmacy|サンドラッグ":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"サンドラッグ","brand:ja":"サンドラッグ","brand:wikidata":"Q11305867","brand:wikipedia":"ja:サンドラッグ",healthcare:"pharmacy",name:"サンドラッグ","name:en":"Sundrug","name:ja":"サンドラッグ"}},"amenity/pharmacy|スギ薬局":{countryCodes:["jp"],nomatch:["shop/chemist|スギ薬局"],tags:{amenity:"pharmacy",brand:"スギ薬局","brand:en":"Sugi Pharmacy","brand:ja":"スギ薬局","brand:wikidata":"Q11311460","brand:wikipedia":"ja:スギ薬局",healthcare:"pharmacy",name:"スギ薬局","name:en":"Sugi Pharmacy","name:ja":"スギ薬局"}},"amenity/pharmacy|セイジョー":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"セイジョー","brand:en":"Seijo","brand:ja":"セイジョー","brand:wikidata":"Q11314133","brand:wikipedia":"ja:セイジョー",healthcare:"pharmacy",name:"セイジョー","name:en":"Seijo","name:ja":"セイジョー"}},"amenity/pharmacy|ダイコクドラッグ":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"ダイコクドラッグ","brand:en":"Daikoku Drug","brand:ja":"ダイコクドラッグ","brand:wikidata":"Q11316754","brand:wikipedia":"ja:ダイコク",healthcare:"pharmacy",name:"ダイコクドラッグ","name:en":"Daikoku Drug","name:ja":"ダイコクドラッグ"}},"amenity/pharmacy|ツルハドラッグ":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"ツルハドラッグ","brand:en":"Tsuruha","brand:ja":"ツルハドラッグ","brand:wikidata":"Q11318826","brand:wikipedia":"ja:ツルハ",healthcare:"pharmacy",name:"ツルハドラッグ","name:en":"Tsuruha","name:ja":"ツルハドラッグ"}},"amenity/pharmacy|トモズ":{countryCodes:["jp"],matchNames:["トモズエキスプレス"],tags:{amenity:"pharmacy",brand:"トモズ","brand:en":"Tomod's","brand:ja":"トモズ","brand:wikidata":"Q7820097","brand:wikipedia":"ja:トモズ",healthcare:"pharmacy",name:"トモズ","name:en":"Tomod's","name:ja":"トモズ"}},"amenity/pharmacy|ドラッグセイムス":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"ドラッグセイムス","brand:ja":"ドラッグセイムス",healthcare:"pharmacy",name:"ドラッグセイムス","name:ja":"ドラッグセイムス"}},"amenity/pharmacy|マツモトキヨシ":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"マツモトキヨシ","brand:en":"Matsukiyo","brand:ja":"マツモトキヨシ","brand:wikidata":"Q8014776","brand:wikipedia":"ja:マツモトキヨシ",healthcare:"pharmacy",name:"マツモトキヨシ","name:en":"Matsukiyo","name:ja":"マツモトキヨシ"}},"amenity/pharmacy|丁丁藥局":{nomatch:["shop/chemist|丁丁藥局"],tags:{amenity:"pharmacy",brand:"丁丁藥局",healthcare:"pharmacy",name:"丁丁藥局"}},"amenity/pharmacy|屈臣氏":{nomatch:["shop/chemist|屈臣氏"],tags:{amenity:"pharmacy",brand:"屈臣氏",healthcare:"pharmacy",name:"屈臣氏"}},"amenity/post_box|Deutsche Post":{countryCodes:["de"],matchNames:["deutsche post ag"],nomatch:["amenity/post_office|Deutsche Post"],tags:{amenity:"post_box",brand:"Deutsche Post","brand:wikidata":"Q157645","brand:wikipedia":"en:Deutsche Post",name:"Deutsche Post"}},"amenity/post_box|USPS":{countryCodes:["us"],nomatch:["amenity/post_office|USPS"],tags:{amenity:"post_box",brand:"USPS","brand:wikidata":"Q668687","brand:wikipedia":"en:United States Postal Service",name:"USPS",operator:"USPS"}},"amenity/post_box|差出箱13号":{tags:{amenity:"post_box",brand:"差出箱13号",name:"差出箱13号"}},"amenity/post_box|郵便ポスト":{countryCodes:["jp"],tags:{amenity:"post_box",brand:"郵便ポスト","brand:ja":"郵便ポスト",name:"郵便ポスト","name:ja":"郵便ポスト"}},"amenity/post_office|Australia Post":{countryCodes:["au"],tags:{amenity:"post_office",brand:"Australia Post","brand:wikidata":"Q1142936","brand:wikipedia":"en:Australia Post",name:"Australia Post"}},"amenity/post_office|CTT":{countryCodes:["mo"],tags:{amenity:"post_office",brand:"CTT","brand:wikidata":"Q909429","brand:wikipedia":"en:CTT (Macau)",name:"CTT"}},"amenity/post_office|Canada Post":{countryCodes:["ca"],tags:{amenity:"post_office",brand:"Canada Post","brand:wikidata":"Q1032001","brand:wikipedia":"en:Canada Post",name:"Canada Post"}},"amenity/post_office|Chilexpress":{tags:{amenity:"post_office",brand:"Chilexpress",name:"Chilexpress"}},"amenity/post_office|Correios":{countryCodes:["br"],tags:{amenity:"post_office",brand:"Correios","brand:wikidata":"Q3375004","brand:wikipedia":"en:Correios",name:"Correios"}},"amenity/post_office|Correo Argentino":{countryCodes:["ar"],tags:{amenity:"post_office",brand:"Correo Argentino","brand:wikidata":"Q4036566","brand:wikipedia":"en:Correo Argentino",name:"Correo Argentino"}},"amenity/post_office|Correos de Chile":{countryCodes:["cl"],tags:{amenity:"post_office",brand:"Correos de Chile","brand:wikidata":"Q5172893","brand:wikipedia":"en:Correos de Chile",name:"Correos de Chile"}},"amenity/post_office|Correos de Costa Rica":{countryCodes:["cr"],tags:{amenity:"post_office",brand:"Correos de Costa Rica","brand:wikidata":"Q5172894","brand:wikipedia":"en:Correos de Costa Rica",name:"Correos de Costa Rica"}},"amenity/post_office|Correos de México":{tags:{amenity:"post_office",brand:"Correos de México",name:"Correos de México"}},"amenity/post_office|DHL":{matchNames:["dhl paketshop"],tags:{amenity:"post_office",brand:"DHL","brand:wikidata":"Q489815","brand:wikipedia":"en:DHL Express",name:"DHL",operator:"DHL"}},"amenity/post_office|DPD Paketshop":{tags:{amenity:"post_office",brand:"DPD Paketshop","brand:wikidata":"Q541030","brand:wikipedia":"en:DPDgroup",name:"DPD Paketshop"}},"amenity/post_office|Deutsche Post":{countryCodes:["de"],matchNames:["deutsche post ag","deutsche post filiale"],tags:{amenity:"post_office",brand:"Deutsche Post","brand:wikidata":"Q157645","brand:wikipedia":"en:Deutsche Post",name:"Deutsche Post"}},"amenity/post_office|Fancourier":{countryCodes:["ro"],tags:{amenity:"post_office",brand:"Fancourier","brand:wikidata":"Q12727984","brand:wikipedia":"ro:FAN Courier Express",name:"Fancourier"}},"amenity/post_office|FedEx":{tags:{amenity:"post_office",brand:"FedEx","brand:wikidata":"Q459477","brand:wikipedia":"en:FedEx",name:"FedEx"}},"amenity/post_office|Hermes Paketshop":{matchNames:["hermes"],tags:{amenity:"post_office",brand:"Hermes Paketshop","brand:wikidata":"Q1613532","brand:wikipedia":"en:Hermes Group",name:"Hermes Paketshop"}},"amenity/post_office|LBC":{countryCodes:["ph"],matchNames:["lbc express"],tags:{amenity:"post_office",brand:"LBC","brand:wikidata":"Q17075584","brand:wikipedia":"en:LBC Express",name:"LBC"}},"amenity/post_office|La Poste":{tags:{amenity:"post_office",brand:"La Poste","brand:wikidata":"Q373724","brand:wikipedia":"fr:La Poste (entreprise française)",name:"La Poste"}},"amenity/post_office|MRW":{tags:{amenity:"post_office",brand:"MRW","brand:wikidata":"Q23767821","brand:wikipedia":"es:MRW",name:"MRW"}},"amenity/post_office|OCA":{tags:{amenity:"post_office",brand:"OCA",name:"OCA"}},"amenity/post_office|Oficina de Correos":{matchNames:["correos"],tags:{amenity:"post_office",brand:"Oficina de Correos","brand:wikidata":"Q776605","brand:wikipedia":"es:Correos (España)",name:"Oficina de Correos"}},"amenity/post_office|PTT":{tags:{amenity:"post_office",brand:"PTT",name:"PTT"}},"amenity/post_office|Poczta Polska":{countryCodes:["pl"],tags:{amenity:"post_office",brand:"Poczta Polska","brand:wikidata":"Q168833","brand:wikipedia":"pl:Poczta Polska",name:"Poczta Polska"}},"amenity/post_office|PostalAnnex":{countryCodes:["us"],matchTags:["shop/post_office"],tags:{amenity:"post_office",brand:"PostalAnnex","brand:wikidata":"Q61960357",name:"PostalAnnex"}},"amenity/post_office|Poste Italiane":{countryCodes:["it"],tags:{amenity:"post_office",brand:"Poste Italiane","brand:wikidata":"Q495026","brand:wikipedia":"en:Poste italiane",name:"Poste Italiane"}},"amenity/post_office|Serpost":{countryCodes:["pe"],matchNames:["servicios postales del perú"],matchTags:["shop/post_office"],tags:{amenity:"post_office",brand:"Serpost","brand:wikidata":"Q19521863","brand:wikipedia":"es:Servicios Postales del Perú",name:"Serpost"}},"amenity/post_office|Servientrega":{tags:{amenity:"post_office",brand:"Servientrega",name:"Servientrega"}},"amenity/post_office|Slovenská pošta":{countryCodes:["sk"],tags:{amenity:"post_office",brand:"Slovenská pošta","brand:wikidata":"Q1191849","brand:wikipedia":"en:Slovenská pošta",name:"Slovenská pošta"}},"amenity/post_office|The UPS Store":{matchNames:["ups","ups store"],matchTags:["shop/copyshop"],tags:{amenity:"post_office",brand:"The UPS Store","brand:wikidata":"Q7771029","brand:wikipedia":"en:The UPS Store",name:"The UPS Store"}},"amenity/post_office|US Post Office":{countryCodes:["us"],matchNames:["united states post office","united states postal service","usps"],tags:{amenity:"post_office",brand:"US Post Office","brand:wikidata":"Q668687","brand:wikipedia":"en:United States Postal Service",name:"US Post Office",operator:"USPS"}},"amenity/post_office|ΕΛΤΑ":{countryCodes:["gr"],tags:{amenity:"post_office",brand:"ΕΛΤΑ","brand:wikidata":"Q1275135","brand:wikipedia":"el:Ελληνικά Ταχυδρομεία",name:"ΕΛΤΑ"}},"amenity/post_office|Белпошта":{countryCodes:["by"],matchNames:["белпочта"],tags:{amenity:"post_office",brand:"Белпошта","brand:be":"Белпошта","brand:en":"Belposhta","brand:ru":"Белпочта","brand:wikidata":"Q2662336","brand:wikipedia":"be:Белпошта",name:"Белпошта","name:be":"Белпошта","name:en":"Belposhta","name:ru":"Белпочта"}},"amenity/post_office|Казпочта":{countryCodes:["kz"],tags:{amenity:"post_office",brand:"Казпочта","brand:wikidata":"Q746263","brand:wikipedia":"ru:Казпочта",name:"Казпочта"}},"amenity/post_office|Нова Пошта":{countryCodes:["ua"],matchNames:["Нова Пошта №1","Нова Пошта №2","Нова Пошта №3","Нова Пошта №4"],tags:{amenity:"post_office",brand:"Нова Пошта","brand:wikidata":"Q12133863","brand:wikipedia":"uk:Нова пошта",name:"Нова Пошта"}},"amenity/post_office|Почта России":{countryCodes:["ru"],tags:{amenity:"post_office",brand:"Почта России","brand:wikidata":"Q1502763","brand:wikipedia":"ru:Почта России",name:"Почта России"}},"amenity/post_office|СДЭК":{tags:{amenity:"post_office",brand:"СДЭК","brand:wikidata":"Q28665980","brand:wikipedia":"ru:СДЭК",name:"СДЭК"}},"amenity/post_office|Укрпошта":{countryCodes:["ua"],tags:{amenity:"post_office",brand:"Укрпошта","brand:wikidata":"Q2470783","brand:wikipedia":"en:Ukrposhta",name:"Укрпошта"}},"amenity/post_office|中国邮政":{countryCodes:["cn"],tags:{amenity:"post_office",brand:"中国邮政","brand:en":"China Post","brand:wikidata":"Q1066476","brand:wikipedia":"en:China Post",name:"中国邮政","name:en":"China Post"}},"amenity/prep_school|Huntington Learning Center":{countryCodes:["us"],matchNames:["huntington"],tags:{amenity:"prep_school",brand:"Huntington Learning Center","brand:wikidata":"Q5945399","brand:wikipedia":"en:Huntington Learning Center",name:"Huntington Learning Center"}},"amenity/prep_school|KUMON~(Japan)":{countryCodes:["jp"],matchNames:["くもん","公文"],tags:{amenity:"prep_school",brand:"KUMON","brand:wikidata":"Q142054","brand:wikipedia":"ja:日本公文教育研究会",name:"KUMON","name:ja":"公文","name:ja-Hira":"くもん","name:ja-Latn":"KUMON"}},"amenity/prep_school|Kumon~(International)":{countryCodes:[],matchNames:["kumon learning center"],tags:{amenity:"prep_school",brand:"Kumon","brand:wikidata":"Q142054","brand:wikipedia":"en:Kumon",name:"Kumon"}},"amenity/prep_school|Russian School of Mathematics":{countryCodes:["us"],matchNames:["rsm","russian school of math"],tags:{amenity:"prep_school",brand:"Russian School of Mathematics","brand:wikidata":"Q7382122","brand:wikipedia":"en:Russian School of Mathematics",name:"Russian School of Mathematics"}},"amenity/prep_school|Sylvan":{countryCodes:["us"],matchNames:["sylvan learning","sylvan learning center"],tags:{alt_name:"Sylvan Learning Center",amenity:"prep_school",brand:"Sylvan","brand:wikidata":"Q7660663","brand:wikipedia":"en:Sylvan Learning",name:"Sylvan"}},"amenity/public_bookcase|Little Free Library":{tags:{amenity:"public_bookcase",brand:"Little Free Library","brand:wikidata":"Q6650101","brand:wikipedia":"en:Little Free Library",name:"Little Free Library"}},"amenity/public_bookcase|Offener Bücherschrank":{tags:{amenity:"public_bookcase",brand:"Offener Bücherschrank",name:"Offener Bücherschrank"}},"amenity/restaurant|100 Montaditos":{tags:{amenity:"restaurant",brand:"100 Montaditos","brand:wikidata":"Q8355805","brand:wikipedia":"en:Cervecería 100 Montaditos",cuisine:"sandwich",name:"100 Montaditos"}},"amenity/restaurant|ASK Italian":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"ASK Italian","brand:wikidata":"Q4807056","brand:wikipedia":"en:ASK Italian",cuisine:"italian",name:"ASK Italian"}},"amenity/restaurant|Applebee's":{matchNames:["applebees bar & grill","applebees bar and grill","applebees grill & bar","applebees grill and bar","applebees neighborhood bar & grill","applebees neighborhood bar and grill","applebees neighborhood grill & bar","applebees neighborhood grill and bar"],tags:{amenity:"restaurant",brand:"Applebee's Neighborhood Grill & Bar","brand:wikidata":"Q621532","brand:wikipedia":"en:Applebee's",cuisine:"american",name:"Applebee's",official_name:"Applebee's Neighborhood Grill & Bar"}},"amenity/restaurant|Autogrill":{tags:{amenity:"restaurant",brand:"Autogrill","brand:wikidata":"Q786790","brand:wikipedia":"en:Autogrill",name:"Autogrill"}},"amenity/restaurant|BJ's":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"BJ's","brand:wikidata":"Q4835755","brand:wikipedia":"en:BJ's Restaurants",cuisine:"american",name:"BJ's",official_name:"BJ's Restaurant & Brewhouse"}},"amenity/restaurant|Bella Italia":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"Bella Italia","brand:wikidata":"Q4883362","brand:wikipedia":"en:Bella Italia",cuisine:"italian",name:"Bella Italia"}},"amenity/restaurant|Big Boy":{tags:{amenity:"restaurant",brand:"Big Boy","brand:wikidata":"Q4386779","brand:wikipedia":"en:Big Boy Restaurants",cuisine:"burger",name:"Big Boy",official_name:"Big Boy Restaurant & Bakery"}},"amenity/restaurant|Black Bear Diner":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Black Bear Diner","brand:wikidata":"Q4920343","brand:wikipedia":"en:Black Bear Diner",cuisine:"american",name:"Black Bear Diner"}},"amenity/restaurant|Blaze Pizza":{countryCodes:["bh","ca","kw","sa","us"],tags:{amenity:"restaurant",brand:"Blaze Pizza","brand:wikidata":"Q23016666","brand:wikipedia":"en:Blaze Pizza",cuisine:"pizza",name:"Blaze Pizza"}},"amenity/restaurant|Bob Evans":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Bob Evans","brand:wikidata":"Q4932386","brand:wikipedia":"en:Bob Evans Restaurants",cuisine:"american",name:"Bob Evans"}},"amenity/restaurant|Bonefish Grill":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Bonefish Grill","brand:wikidata":"Q4941599","brand:wikipedia":"en:Bonefish Grill",cuisine:"seafood",name:"Bonefish Grill"}},"amenity/restaurant|Boston Pizza":{tags:{amenity:"restaurant",brand:"Boston Pizza","brand:wikidata":"Q894578","brand:wikipedia":"en:Boston Pizza",cuisine:"pizza",name:"Boston Pizza"}},"amenity/restaurant|Buca di Beppo":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Buca di Beppo","brand:wikidata":"Q4982340","brand:wikipedia":"en:Buca di Beppo",cuisine:"italian",name:"Buca di Beppo"}},"amenity/restaurant|Buffalo Grill":{tags:{amenity:"restaurant",brand:"Buffalo Grill","brand:wikidata":"Q944655","brand:wikipedia":"en:Buffalo Grill",cuisine:"steak_house",name:"Buffalo Grill"}},"amenity/restaurant|Buffalo Wild Wings":{tags:{amenity:"restaurant",brand:"Buffalo Wild Wings","brand:wikidata":"Q509255","brand:wikipedia":"en:Buffalo Wild Wings",cuisine:"wings",name:"Buffalo Wild Wings"}},"amenity/restaurant|Buffalo Wings & Rings":{countryCodes:["us"],matchNames:["buffalo wings and rings"],tags:{amenity:"restaurant",brand:"Buffalo Wings & Rings","brand:wikidata":"Q4985900","brand:wikipedia":"en:Buffalo Wings & Rings",cuisine:"wings",name:"Buffalo Wings & Rings",takeaway:"yes"}},"amenity/restaurant|Cafe Rio":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Cafe Rio","brand:wikidata":"Q5017108","brand:wikipedia":"en:Cafe Rio",cuisine:"mexican",name:"Cafe Rio"}},"amenity/restaurant|California Pizza Kitchen":{tags:{amenity:"restaurant",brand:"California Pizza Kitchen","brand:wikidata":"Q15109854","brand:wikipedia":"en:California Pizza Kitchen",cuisine:"pizza",name:"California Pizza Kitchen"}},"amenity/restaurant|Campanile":{tags:{amenity:"restaurant",brand:"Campanile",name:"Campanile"}},"amenity/restaurant|Carluccio's":{tags:{amenity:"restaurant",brand:"Carluccio's","brand:wikidata":"Q25111797","brand:wikipedia":"en:Carluccio's Ltd",cuisine:"italian",name:"Carluccio's"}},"amenity/restaurant|Carrabba's Italian Grill":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Carrabba's Italian Grill","brand:wikidata":"Q5045999","brand:wikipedia":"en:Carrabba's Italian Grill",cuisine:"italian",name:"Carrabba's Italian Grill"}},"amenity/restaurant|Cheddar's":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Cheddar's","brand:wikidata":"Q5089187","brand:wikipedia":"en:Cheddar's Scratch Kitchen",cuisine:"american",name:"Cheddar's",official_name:"Cheddar's Scratch Kitchen"}},"amenity/restaurant|Chevys":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Chevys Fresh Mex","brand:wikidata":"Q5094466","brand:wikipedia":"en:Chevys Fresh Mex",cuisine:"mexican",name:"Chevys",official_name:"Chevys Fresh Mex"}},"amenity/restaurant|Chili's":{matchNames:["chili's grill & bar","chili's grill and bar"],tags:{amenity:"restaurant",brand:"Chili's","brand:wikidata":"Q1072948","brand:wikipedia":"en:Chili's",cuisine:"tex-mex",name:"Chili's",official_name:"Chili's Grill & Bar"}},"amenity/restaurant|Chiquito":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"Chiquito","brand:wikidata":"Q5101775","brand:wikipedia":"en:Chiquito (restaurant)",cuisine:"tex-mex",name:"Chiquito"}},"amenity/restaurant|Chuck E. Cheese's":{countryCodes:["ca","us"],tags:{amenity:"restaurant",brand:"Chuck E. Cheese's","brand:wikidata":"Q2438391","brand:wikipedia":"en:Chuck E. Cheese's",cuisine:"pizza",name:"Chuck E. Cheese's"}},"amenity/restaurant|Cici's Pizza":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Cici's Pizza","brand:wikidata":"Q2972189","brand:wikipedia":"en:Cicis",cuisine:"pizza",name:"Cici's Pizza"}},"amenity/restaurant|Claim Jumper":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Claim Jumper","brand:wikidata":"Q5125081","brand:wikipedia":"en:Claim Jumper",cuisine:"american",name:"Claim Jumper",operator:"Landry's","operator:wikidata":"Q3217105","operator:wikipedia":"en:Landry's, Inc."}},"amenity/restaurant|Cosmo":{countryCodes:["gb","ie"],tags:{amenity:"restaurant",brand:"Cosmo","brand:wikidata":"Q5174239","brand:wikipedia":"en:Cosmo (restaurant)",name:"Cosmo"}},"amenity/restaurant|Courtepaille":{tags:{amenity:"restaurant",brand:"Courtepaille","brand:wikidata":"Q3116688","brand:wikipedia":"fr:Grill Courtepaille",cuisine:"french",name:"Courtepaille"}},"amenity/restaurant|Cracker Barrel":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Cracker Barrel","brand:wikidata":"Q4492609","brand:wikipedia":"en:Cracker Barrel",cuisine:"american",name:"Cracker Barrel",official_name:"Cracker Barrel Old Country Store",shop:"gift"}},"amenity/restaurant|Denny's":{tags:{amenity:"restaurant",brand:"Denny's","brand:wikidata":"Q1189695","brand:wikipedia":"en:Denny's",cuisine:"american",name:"Denny's"}},"amenity/restaurant|Dickey's Barbecue Pit":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Dickey's Barbecue Pit","brand:wikidata":"Q19880747","brand:wikipedia":"en:Dickey's Barbecue Pit",cuisine:"barbecue",name:"Dickey's Barbecue Pit"}},"amenity/restaurant|Dolce Vita":{tags:{amenity:"restaurant",brand:"Dolce Vita",name:"Dolce Vita"}},"amenity/restaurant|Donatos Pizza":{countryCodes:["us"],matchNames:["donatos"],tags:{amenity:"restaurant",brand:"Donatos Pizza","brand:wikidata":"Q1240741","brand:wikipedia":"en:Donatos Pizza",cuisine:"pizza",name:"Donatos Pizza",takeaway:"yes"}},"amenity/restaurant|East Side Mario's":{countryCodes:["ca"],tags:{amenity:"restaurant",brand:"East Side Mario's","brand:wikidata":"Q5329375","brand:wikipedia":"en:East Side Mario's",cuisine:"italian",name:"East Side Mario's"}},"amenity/restaurant|Famous Dave's":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Famous Dave's","brand:wikidata":"Q5433448","brand:wikipedia":"en:Famous Dave's",cuisine:"barbecue",name:"Famous Dave's"}},"amenity/restaurant|First Watch":{tags:{amenity:"restaurant",brand:"First Watch","brand:wikidata":"Q5454064","brand:wikipedia":"en:First Watch (restaurant chain)",cuisine:"american",name:"First Watch"}},"amenity/restaurant|Flunch":{countryCodes:["fr"],tags:{amenity:"restaurant",brand:"Flunch","brand:wikidata":"Q629326","brand:wikipedia":"en:Flunch",cuisine:"french",name:"Flunch"}},"amenity/restaurant|Foster's Hollywood":{countryCodes:["es"],tags:{amenity:"restaurant",brand:"Foster's Hollywood","brand:wikidata":"Q5864366","brand:wikipedia":"en:Foster's Hollywood",cuisine:"american",name:"Foster's Hollywood"}},"amenity/restaurant|Frankie & Benny's":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"Frankie & Benny's","brand:wikidata":"Q5490892","brand:wikipedia":"en:Frankie & Benny's",cuisine:"italian",name:"Frankie & Benny's"}},"amenity/restaurant|Freshii":{tags:{amenity:"restaurant",brand:"Freshii","brand:wikidata":"Q5503051","brand:wikipedia":"en:Freshii",cuisine:"salad",name:"Freshii"}},"amenity/restaurant|Friendly's":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Friendly's","brand:wikidata":"Q1464513","brand:wikipedia":"en:Friendly's",cuisine:"american",name:"Friendly's"}},"amenity/restaurant|Frisch's Big Boy":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Frisch's Big Boy","brand:wikidata":"Q5504660","brand:wikipedia":"en:Frisch's",cuisine:"burger",name:"Frisch's Big Boy",takeaway:"yes"}},"amenity/restaurant|Fuddruckers":{tags:{amenity:"restaurant",brand:"Fuddruckers","brand:wikidata":"Q5507056","brand:wikipedia":"en:Fuddruckers",cuisine:"burger",name:"Fuddruckers"}},"amenity/restaurant|Garba":{tags:{amenity:"restaurant",brand:"Garba",name:"Garba"}},"amenity/restaurant|Garbadrome":{countryCodes:["ci"],tags:{amenity:"restaurant",brand:"Garbadrome",name:"Garbadrome"}},"amenity/restaurant|Godfather's Pizza":{tags:{amenity:"restaurant",brand:"Godfather's Pizza","brand:wikidata":"Q5576353","brand:wikipedia":"en:Godfather's Pizza",cuisine:"pizza",name:"Godfather's Pizza"}},"amenity/restaurant|Golden Corral":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Golden Corral","brand:wikidata":"Q4039560","brand:wikipedia":"en:Golden Corral",cuisine:"american",name:"Golden Corral"}},"amenity/restaurant|Gourmet Burger Kitchen":{tags:{amenity:"restaurant",brand:"Gourmet Burger Kitchen","brand:wikidata":"Q5588445","brand:wikipedia":"en:Gourmet Burger Kitchen",cuisine:"burger",name:"Gourmet Burger Kitchen"}},"amenity/restaurant|Gusto":{tags:{amenity:"restaurant",brand:"Gusto",name:"Gusto"}},"amenity/restaurant|Handmade Burger Co.":{countryCodes:["gb"],matchNames:["Handmade Burger Company"],tags:{amenity:"restaurant",brand:"Handmade Burger Co.","brand:wikidata":"Q56154673",cuisine:"burger",name:"Handmade Burger Co."}},"amenity/restaurant|Hans im Glück":{countryCodes:["at","ch","de","sg"],tags:{amenity:"restaurant",brand:"Hans im Glück","brand:wikidata":"Q22569868","brand:wikipedia":"de:Hans im Glück (Restaurantkette)",cuisine:"burger",name:"Hans im Glück"}},"amenity/restaurant|Hard Rock Cafe":{tags:{amenity:"restaurant",brand:"Hard Rock Cafe","brand:wikidata":"Q918151","brand:wikipedia":"en:Hard Rock Cafe",cuisine:"american",name:"Hard Rock Cafe"}},"amenity/restaurant|Harvester":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"Harvester","brand:wikidata":"Q5676915","brand:wikipedia":"en:Harvester (restaurant)",cuisine:"american",name:"Harvester"}},"amenity/restaurant|Hippopotamus":{countryCodes:["fr"],tags:{amenity:"restaurant",brand:"Hippopotamus","brand:wikidata":"Q3136174","brand:wikipedia":"fr:Hippopotamus (restaurant)",cuisine:"steak_house",name:"Hippopotamus"}},"amenity/restaurant|Hooters":{tags:{amenity:"restaurant",brand:"Hooters","brand:wikidata":"Q1025921","brand:wikipedia":"en:Hooters",cuisine:"burger",name:"Hooters"}},"amenity/restaurant|Huddle House":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Huddle House","brand:wikidata":"Q5928324","brand:wikipedia":"en:Huddle House",cuisine:"american",name:"Huddle House"}},"amenity/restaurant|IHOP":{tags:{amenity:"restaurant",brand:"IHOP","brand:wikidata":"Q1185675","brand:wikipedia":"en:IHOP",cuisine:"breakfast;pancake",name:"IHOP"}},"amenity/restaurant|IL Патио":{countryCodes:["ru"],tags:{amenity:"restaurant",brand:"IL Патио","brand:wikidata":"Q4397763","brand:wikipedia":"en:Росинтер",cuisine:"american",name:"IL Патио"}},"amenity/restaurant|Il Giardino":{tags:{amenity:"restaurant",brand:"Il Giardino",name:"Il Giardino"}},"amenity/restaurant|Jason's Deli":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Jason's Deli","brand:wikidata":"Q16997641","brand:wikipedia":"en:Jason's Deli",cuisine:"sandwich",name:"Jason's Deli"}},"amenity/restaurant|Jet's Pizza":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Jet's Pizza","brand:wikidata":"Q16997713","brand:wikipedia":"en:Jet's Pizza",cuisine:"pizza",name:"Jet's Pizza"}},"amenity/restaurant|Joe's Crab Shack":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Joe's Crab Shack","brand:wikidata":"Q6208210","brand:wikipedia":"en:Joe's Crab Shack",cuisine:"seafood",name:"Joe's Crab Shack"}},"amenity/restaurant|Johnny Carino’s":{countryCodes:["us"],matchNames:["carinios"],tags:{amenity:"restaurant",brand:"Johnny Carino’s","brand:wikidata":"Q5039637","brand:wikipedia":"en:Carino's Italian",cuisine:"italian",name:"Johnny Carino’s"}},"amenity/restaurant|Johnny Rockets":{tags:{amenity:"restaurant",brand:"Johnny Rockets","brand:wikidata":"Q1051593","brand:wikipedia":"en:Johnny Rockets",cuisine:"burger",name:"Johnny Rockets"}},"amenity/restaurant|Kelsey's":{countryCodes:["ca"],tags:{amenity:"restaurant",brand:"Kelsey's","brand:wikidata":"Q6386459","brand:wikipedia":"en:Kelseys Original Roadhouse",cuisine:"american",name:"Kelsey's"}},"amenity/restaurant|Koliba":{tags:{amenity:"restaurant",brand:"Koliba",name:"Koliba"}},"amenity/restaurant|Kudu":{countryCodes:["sa"],tags:{amenity:"restaurant",brand:"Kudu","brand:wikidata":"Q6441777","brand:wikipedia":"en:Kudu (restaurant)",cuisine:"sandwich",name:"Kudu"}},"amenity/restaurant|La Boucherie":{countryCodes:["fr"],tags:{amenity:"restaurant",brand:"La Boucherie","brand:wikidata":"Q21427479","brand:wikipedia":"fr:La Boucherie (restaurant)",cuisine:"steak_house",name:"La Boucherie"}},"amenity/restaurant|LaRosa's Pizzeria":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"LaRosa's Pizzeria","brand:wikidata":"Q6460833","brand:wikipedia":"en:LaRosa's Pizzeria",cuisine:"pizza",name:"LaRosa's Pizzeria",takeaway:"yes"}},"amenity/restaurant|Lemongrass":{tags:{amenity:"restaurant",brand:"Lemongrass",name:"Lemongrass"}},"amenity/restaurant|Logan's Roadhouse":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Logan's Roadhouse","brand:wikidata":"Q6666872","brand:wikipedia":"en:Logan's Roadhouse",cuisine:"american",name:"Logan's Roadhouse"}},"amenity/restaurant|LongHorn Steakhouse":{tags:{amenity:"restaurant",brand:"LongHorn Steakhouse","brand:wikidata":"Q3259007","brand:wikipedia":"en:LongHorn Steakhouse",cuisine:"steak_house",name:"LongHorn Steakhouse"}},"amenity/restaurant|Los Arcos":{tags:{amenity:"restaurant",brand:"Los Arcos",name:"Los Arcos"}},"amenity/restaurant|Loving Hut":{tags:{amenity:"restaurant",brand:"Loving Hut","brand:wikidata":"Q3491655","brand:wikipedia":"en:Loving Hut",cuisine:"international","diet:vegan":"only","diet:vegetarian":"only",name:"Loving Hut"}},"amenity/restaurant|Léon de Bruxelles":{countryCodes:["fr"],tags:{amenity:"restaurant",brand:"Léon de Bruxelles","brand:wikidata":"Q21041507","brand:wikipedia":"en:Léon de Bruxelles",cuisine:"friture",name:"Léon de Bruxelles"}},"amenity/restaurant|MK Restaurants":{tags:{amenity:"restaurant",brand:"MK Restaurants","brand:wikidata":"Q62075359",cuisine:"thai",name:"MK Restaurants"}},"amenity/restaurant|MOD Pizza":{tags:{amenity:"restaurant",brand:"MOD Pizza","brand:wikidata":"Q19903469","brand:wikipedia":"en:MOD Pizza",cuisine:"pizza",name:"MOD Pizza"}},"amenity/restaurant|Marco's Pizza":{tags:{amenity:"restaurant",brand:"Marco's Pizza","brand:wikidata":"Q6757382","brand:wikipedia":"en:Marco's Pizza",cuisine:"pizza",name:"Marco's Pizza"}},"amenity/restaurant|Max's Restaurant":{countryCodes:["ph"],matchNames:["maxs of manila"],tags:{amenity:"restaurant",brand:"Max's Restaurant","brand:wikidata":"Q6794477","brand:wikipedia":"en:Max's of Manila",cuisine:"asian",name:"Max's Restaurant"}},"amenity/restaurant|McAlister's Deli":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"McAlister's Deli","brand:wikidata":"Q17020829","brand:wikipedia":"en:McAlister's Deli",cuisine:"sandwich",name:"McAlister's Deli"}},"amenity/restaurant|Mellow Mushroom":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Mellow Mushroom","brand:wikidata":"Q17021360","brand:wikipedia":"en:Mellow Mushroom",cuisine:"pizza",name:"Mellow Mushroom"}},"amenity/restaurant|Mimi's Cafe":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Mimi's Cafe","brand:wikidata":"Q17022081","brand:wikipedia":"en:Mimi's Cafe",cuisine:"french",name:"Mimi's Cafe"}},"amenity/restaurant|Mountain Mike's":{countryCodes:["us"],matchNames:["mountain mike's pizza"],tags:{alt_name:"Mountain Mike's Pizza",amenity:"restaurant",brand:"Mountain Mike's","brand:wikidata":"Q6925120","brand:wikipedia":"en:Mountain Mike's Pizza",cuisine:"pizza",name:"Mountain Mike's",takeaway:"yes"}},"amenity/restaurant|Nando's":{tags:{amenity:"restaurant",brand:"Nando's","brand:wikidata":"Q3472954","brand:wikipedia":"en:Nando's",cuisine:"chicken;portuguese",name:"Nando's"}},"amenity/restaurant|Noodles & Company":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Noodles & Company","brand:wikidata":"Q7049673","brand:wikipedia":"en:Noodles & Company",cuisine:"pasta",name:"Noodles & Company"}},"amenity/restaurant|Norky's":{tags:{amenity:"restaurant",brand:"Norky's",cuisine:"peruvian",name:"Norky's"}},"amenity/restaurant|O'Charley's":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"O'Charley's","brand:wikidata":"Q7071703","brand:wikipedia":"en:O'Charley's",cuisine:"american",name:"O'Charley's"}},"amenity/restaurant|Ocean Basket":{countryCodes:["za"],tags:{amenity:"restaurant",brand:"Ocean Basket","brand:wikidata":"Q62075311",cuisine:"seafood",name:"Ocean Basket"}},"amenity/restaurant|Old Chicago":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Old Chicago",cuisine:"pizza",name:"Old Chicago"}},"amenity/restaurant|Old Wild West":{countryCodes:["it"],tags:{amenity:"restaurant",brand:"Old Wild West","brand:wikidata":"Q25402475","brand:wikipedia":"it:Old Wild West",cuisine:"american",name:"Old Wild West"}},"amenity/restaurant|Olive Garden":{tags:{amenity:"restaurant",brand:"Olive Garden","brand:wikidata":"Q3045312","brand:wikipedia":"en:Olive Garden",cuisine:"italian",name:"Olive Garden"}},"amenity/restaurant|On The Border":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"On The Border","brand:wikidata":"Q7091305","brand:wikipedia":"en:On the Border Mexican Grill & Cantina",cuisine:"burger",name:"On The Border",official_name:"On The Border Mexican Grill & Cantina"}},"amenity/restaurant|Outback Steakhouse":{tags:{amenity:"restaurant",brand:"Outback Steakhouse","brand:wikidata":"Q1064893","brand:wikipedia":"en:Outback Steakhouse",cuisine:"american",name:"Outback Steakhouse"}},"amenity/restaurant|P.F. Chang's":{tags:{amenity:"restaurant",brand:"P.F. Chang's","brand:wikidata":"Q5360181","brand:wikipedia":"en:P. F. Chang's China Bistro",cuisine:"asian",name:"P.F. Chang's"}},"amenity/restaurant|Pardos Chicken":{countryCodes:["pe"],tags:{amenity:"restaurant",brand:"Pardos Chicken","brand:wikidata":"Q17624435","brand:wikipedia":"en:Pardos chicken",cuisine:"peruvian",name:"Pardos Chicken"}},"amenity/restaurant|Pei Wei":{countryCodes:["us"],matchNames:["pei wei asian diner"],tags:{amenity:"restaurant",brand:"Pei Wei","brand:wikidata":"Q7160898","brand:wikipedia":"en:Pei Wei Asian Diner",cuisine:"asian",name:"Pei Wei"}},"amenity/restaurant|Perkins":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Perkins","brand:wikidata":"Q7169056","brand:wikipedia":"en:Perkins Restaurant and Bakery",cuisine:"american",name:"Perkins",official_name:"Perkins Restaurant and Bakery"}},"amenity/restaurant|Phở 24":{countryCodes:["vn"],tags:{amenity:"restaurant",brand:"Phở 24","brand:wikidata":"Q63863118",cuisine:"vietnamese;noodle",name:"Phở 24","name:en":"Pho 24","name:vi":"Phở 24"}},"amenity/restaurant|Phở Hòa~(Branded)":{tags:{alt_name:"Phở Hoà","alt_name:en":"Pho Hoa","alt_name:vi":"Phở Hoà",amenity:"restaurant",brand:"Phở Hòa","brand:wikidata":"Q55629932","brand:wikipedia":"en:Phở Hòa",cuisine:"vietnamese;noodle",name:"Phở Hòa","name:vi":"Phở Hòa"}},"amenity/restaurant|Pieology Pizzeria":{countryCodes:["us"],matchNames:["pieology"],tags:{amenity:"restaurant",brand:"Pieology Pizzeria","brand:wikidata":"Q60746053","brand:wikipedia":"en:Pieology",cuisine:"pizza",name:"Pieology Pizzeria"}},"amenity/restaurant|Pizza Factory":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Pizza Factory","brand:wikidata":"Q39054369","brand:wikipedia":"en:Pizza Factory",cuisine:"pizza",name:"Pizza Factory"}},"amenity/restaurant|Pizza Hut":{nomatch:["amenity/fast_food|Pizza Hut Express"],tags:{amenity:"restaurant",brand:"Pizza Hut","brand:wikidata":"Q191615","brand:wikipedia":"en:Pizza Hut",cuisine:"pizza",name:"Pizza Hut"}},"amenity/restaurant|Pizza Ranch":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Pizza Ranch","brand:wikidata":"Q7199978","brand:wikipedia":"en:Pizza Ranch",cuisine:"pizza",name:"Pizza Ranch"}},"amenity/restaurant|PizzaExpress":{tags:{amenity:"restaurant",brand:"PizzaExpress","brand:wikidata":"Q662845","brand:wikipedia":"en:PizzaExpress",cuisine:"pizza",name:"PizzaExpress"}},"amenity/restaurant|Poivre Rouge":{countryCodes:["fr"],tags:{amenity:"restaurant",brand:"Poivre Rouge","brand:wikidata":"Q7316076","brand:wikipedia":"fr:Poivre Rouge (restauration)",cuisine:"french",name:"Poivre Rouge"}},"amenity/restaurant|Prezzo":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"Prezzo","brand:wikidata":"Q7242489","brand:wikipedia":"en:Prezzo (restaurant)",cuisine:"italian",name:"Prezzo"}},"amenity/restaurant|Red Lobster":{tags:{amenity:"restaurant",brand:"Red Lobster","brand:wikidata":"Q846301","brand:wikipedia":"en:Red Lobster",cuisine:"seafood",name:"Red Lobster"}},"amenity/restaurant|Red Robin":{tags:{amenity:"restaurant",brand:"Red Robin","brand:wikidata":"Q7304886","brand:wikipedia":"en:Red Robin",cuisine:"burger",name:"Red Robin",official_name:"Red Robin Gourmet Burgers and Brews"}},"amenity/restaurant|Romano's Macaroni Grill":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Romano's Macaroni Grill","brand:wikidata":"Q7362714","brand:wikipedia":"en:Romano's Macaroni Grill",cuisine:"italian",name:"Romano's Macaroni Grill"}},"amenity/restaurant|Round Table Pizza":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Round Table Pizza","brand:wikidata":"Q7371139","brand:wikipedia":"en:Round Table Pizza",cuisine:"pizza",name:"Round Table Pizza"}},"amenity/restaurant|Ruby Tuesday":{tags:{amenity:"restaurant",brand:"Ruby Tuesday","brand:wikidata":"Q7376400","brand:wikipedia":"en:Ruby Tuesday (restaurant)",cuisine:"american",name:"Ruby Tuesday"}},"amenity/restaurant|Ruth's Chris Steak House":{countryCodes:["ca","mx","us"],tags:{amenity:"restaurant",brand:"Ruth's Chris Steak House","brand:wikidata":"Q7382829","brand:wikipedia":"en:Ruth's Chris Steak House",cuisine:"american",name:"Ruth's Chris Steak House"}},"amenity/restaurant|Shakey's":{tags:{amenity:"restaurant",brand:"Shakey's","brand:wikidata":"Q6134929","brand:wikipedia":"en:Shakey's Pizza",cuisine:"pizza",name:"Shakey's"}},"amenity/restaurant|Shari's":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Shari's","brand:wikidata":"Q7489612","brand:wikipedia":"en:Shari's Cafe & Pies",cuisine:"american",name:"Shari's"}},"amenity/restaurant|Shoney's":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Shoney's","brand:wikidata":"Q7500392","brand:wikipedia":"en:Shoney's",cuisine:"american",name:"Shoney's"}},"amenity/restaurant|Sizzler":{tags:{amenity:"restaurant",brand:"Sizzler","brand:wikidata":"Q1848822","brand:wikipedia":"en:Sizzler",cuisine:"steak_house",name:"Sizzler"}},"amenity/restaurant|Skyline Chili":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Skyline Chili","brand:wikidata":"Q151224","brand:wikipedia":"en:Skyline Chili",cuisine:"chili",name:"Skyline Chili",takeaway:"yes"}},"amenity/restaurant|Smitty's":{countryCodes:["ca","us"],tags:{amenity:"restaurant",brand:"Smitty's","brand:wikidata":"Q7545728","brand:wikipedia":"en:Smitty's",cuisine:"pancake",name:"Smitty's"}},"amenity/restaurant|Snappy Tomato Pizza":{countryCodes:["gb","us"],tags:{amenity:"restaurant",brand:"Snappy Tomato Pizza","brand:wikidata":"Q7547352","brand:wikipedia":"en:Snappy Tomato Pizza",cuisine:"pizza",name:"Snappy Tomato Pizza",takeaway:"yes"}},"amenity/restaurant|Spur":{matchNames:["spur steak ranches"],tags:{amenity:"restaurant",brand:"Spur","brand:wikidata":"Q7581546","brand:wikipedia":"en:Spur Steak Ranches",cuisine:"steak_house",name:"Spur"}},"amenity/restaurant|Steak 'n Shake":{tags:{amenity:"restaurant",brand:"Steak 'n Shake","brand:wikidata":"Q7605233","brand:wikipedia":"en:Steak 'n Shake",cuisine:"burger",name:"Steak 'n Shake"}},"amenity/restaurant|Sunset Grill":{countryCodes:["ca","us"],tags:{amenity:"restaurant",brand:"Sunset Grill","brand:wikidata":"Q62112489","brand:wikipedia":"en:Sunset Grill (Canadian restaurant chain)",cuisine:"american",name:"Sunset Grill"}},"amenity/restaurant|Swiss Chalet":{countryCodes:["ca"],tags:{amenity:"restaurant",brand:"Swiss Chalet","brand:wikidata":"Q2372909","brand:wikipedia":"en:Swiss Chalet",cuisine:"chicken",name:"Swiss Chalet"}},"amenity/restaurant|TGI Friday's":{tags:{amenity:"restaurant",brand:"TGI Friday's","brand:wikidata":"Q1524184","brand:wikipedia":"en:TGI Fridays",cuisine:"american",name:"TGI Friday's"}},"amenity/restaurant|Texas Roadhouse":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Texas Roadhouse","brand:wikidata":"Q7707945","brand:wikipedia":"en:Texas Roadhouse",cuisine:"steak_house",name:"Texas Roadhouse"}},"amenity/restaurant|The Cheesecake Factory":{matchNames:["cheesecake factory"],tags:{amenity:"restaurant",brand:"The Cheesecake Factory","brand:wikidata":"Q1045842","brand:wikipedia":"en:The Cheesecake Factory",cuisine:"american",name:"The Cheesecake Factory"}},"amenity/restaurant|The Keg":{matchNames:["keg"],tags:{amenity:"restaurant",brand:"The Keg","brand:wikidata":"Q7744066","brand:wikipedia":"en:The Keg",cuisine:"steak_house",name:"The Keg"}},"amenity/restaurant|The Melting Pot":{matchNames:["melting pot"],tags:{amenity:"restaurant",brand:"The Melting Pot","brand:wikidata":"Q7750948","brand:wikipedia":"en:The Melting Pot (restaurant)",cuisine:"fondue",name:"The Melting Pot"}},"amenity/restaurant|Toby Carvery":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"Toby Carvery","brand:wikidata":"Q7811777","brand:wikipedia":"en:Toby Carvery",cuisine:"british",name:"Toby Carvery"}},"amenity/restaurant|Toks":{countryCodes:["mx"],tags:{amenity:"restaurant",brand:"Toks","brand:wikidata":"Q48835586","brand:wikipedia":"en:Toks",cuisine:"mexican",name:"Toks"}},"amenity/restaurant|Tony Roma's":{matchNames:["tony roma"],tags:{amenity:"restaurant",brand:"Tony Roma's","brand:wikidata":"Q2213883","brand:wikipedia":"en:Tony Roma's",cuisine:"barbecue",name:"Tony Roma's"}},"amenity/restaurant|Vapiano":{tags:{amenity:"restaurant",brand:"Vapiano","brand:wikidata":"Q506252","brand:wikipedia":"en:Vapiano",cuisine:"italian",name:"Vapiano"}},"amenity/restaurant|Village Inn":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Village Inn","brand:wikidata":"Q7930659","brand:wikipedia":"en:Village Inn",cuisine:"american",name:"Village Inn"}},"amenity/restaurant|Vips":{countryCodes:["es","mx"],tags:{amenity:"restaurant",brand:"Vips","brand:wikidata":"Q48783378","brand:wikipedia":"es:Vips",name:"Vips"}},"amenity/restaurant|Waffle House":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Waffle House","brand:wikidata":"Q1701206","brand:wikipedia":"en:Waffle House",cuisine:"american",name:"Waffle House",opening_hours:"24/7"}},"amenity/restaurant|Wagamama":{tags:{amenity:"restaurant",brand:"Wagamama","brand:wikidata":"Q503715","brand:wikipedia":"en:Wagamama",cuisine:"asian",name:"Wagamama"}},"amenity/restaurant|Wasabi":{tags:{amenity:"restaurant",brand:"Wasabi","brand:wikidata":"Q23891278","brand:wikipedia":"en:Wasabi (restaurant)",cuisine:"japanese",name:"Wasabi"}},"amenity/restaurant|White Spot":{tags:{amenity:"restaurant",brand:"White Spot","brand:wikidata":"Q7995414","brand:wikipedia":"en:White Spot",cuisine:"burger",name:"White Spot"}},"amenity/restaurant|Wingstop":{tags:{amenity:"restaurant",brand:"Wingstop","brand:wikidata":"Q8025339","brand:wikipedia":"en:Wingstop",cuisine:"wings",name:"Wingstop"}},"amenity/restaurant|YO! Sushi":{tags:{amenity:"restaurant",brand:"YO! Sushi","brand:wikidata":"Q3105441","brand:wikipedia":"en:YO! Sushi",cuisine:"sushi",name:"YO! Sushi"}},"amenity/restaurant|Zizzi":{tags:{amenity:"restaurant",brand:"Zizzi","brand:wikidata":"Q8072944","brand:wikipedia":"en:Zizzi",cuisine:"italian",name:"Zizzi"}},"amenity/restaurant|Евразия":{tags:{amenity:"restaurant",brand:"Евразия",name:"Евразия"}},"amenity/restaurant|Планета Суши":{tags:{amenity:"restaurant",brand:"Планета Суши","brand:wikidata":"Q62739250",cuisine:"sushi",name:"Планета Суши","name:en":"Planet Sushi"}},"amenity/restaurant|Тануки":{countryCodes:["kz","ru","ua"],tags:{amenity:"restaurant",brand:"Тануки","brand:wikidata":"Q62758690",cuisine:"japanese",name:"Тануки","name:en":"Tanuki","name:ru":"Тануки"}},"amenity/restaurant|Якитория":{tags:{amenity:"restaurant",brand:"Якитория",name:"Якитория"}},"amenity/restaurant|いきなり!ステーキ":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"いきなり!ステーキ","brand:en":"Ikinari Steak","brand:ja":"いきなり!ステーキ","brand:wikidata":"Q21652405","brand:wikipedia":"ja:いきなり!ステーキ",cuisine:"steak_house",name:"いきなり!ステーキ","name:en":"Ikinari Steak","name:ja":"いきなり!ステーキ"}},"amenity/restaurant|はなまるうどん":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"はなまるうどん","brand:en":"Hanamarūdon","brand:ja":"はなまるうどん","brand:wikidata":"Q11275674","brand:wikipedia":"ja:はなまるうどん",cuisine:"japanese;udon",name:"はなまるうどん","name:en":"Hanamarūdon","name:ja":"はなまるうどん"}},"amenity/restaurant|びっくりドンキー":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"びっくりドンキー","brand:en":"Bikkuri Donkey","brand:ja":"びっくりドンキー","brand:wikidata":"Q11276815","brand:wikipedia":"ja:びっくりドンキー",cuisine:"burger",name:"びっくりドンキー","name:en":"Bikkuri Donkey","name:ja":"びっくりドンキー"}},"amenity/restaurant|やよい軒":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"やよい軒","brand:en":"Yayoiken","brand:ja":"やよい軒","brand:wikidata":"Q11280577","brand:wikipedia":"ja:やよい軒",cuisine:"japanese",name:"やよい軒","name:en":"Yayoiken","name:ja":"やよい軒"}},"amenity/restaurant|カプリチョーザ":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"カプリチョーザ","brand:en":"Capricciosa","brand:ja":"カプリチョーザ","brand:wikidata":"Q11294660","brand:wikipedia":"ja:カプリチョーザ",cuisine:"italian",name:"カプリチョーザ","name:en":"Capricciosa","name:ja":"カプリチョーザ"}},"amenity/restaurant|ガスト":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"ガスト","brand:en":"Gusto","brand:ja":"ガスト",cuisine:"western;japanese",name:"ガスト","name:en":"Gusto","name:ja":"ガスト"}},"amenity/restaurant|ココス":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"ココス","brand:en":"Coco's","brand:ja":"ココス","brand:wikidata":"Q11301951","brand:wikipedia":"ja:ココスジャパン",cuisine:"western;japanese",name:"ココス","name:en":"Coco's","name:ja":"ココス"}},"amenity/restaurant|サイゼリヤ":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"サイゼリヤ","brand:en":"Saizeriya","brand:ja":"サイゼリヤ","brand:wikidata":"Q886564","brand:wikipedia":"en:Saizeriya",cuisine:"italian",name:"サイゼリヤ","name:en":"Saizeriya","name:ja":"サイゼリヤ"}},"amenity/restaurant|ジョイフル":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"ジョイフル","brand:en":"Joyfull","brand:ja":"ジョイフル","brand:wikidata":"Q11310517","brand:wikipedia":"ja:ジョイフル",cuisine:"western",name:"ジョイフル","name:en":"Joyfull","name:ja":"ジョイフル"}},"amenity/restaurant|ジョナサン":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"ジョナサン","brand:en":"Jonathan's","brand:ja":"ジョナサン","brand:wikidata":"Q11310628","brand:wikipedia":"ja:ジョナサン (ファミリーレストラン)",cuisine:"italian;japanese",name:"ジョナサン","name:en":"Jonathan's","name:ja":"ジョナサン"}},"amenity/restaurant|ジョリーパスタ":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"ジョリーパスタ","brand:en":"Jolly-Pasta","brand:ja":"ジョリーパスタ","brand:wikidata":"Q10852718","brand:wikipedia":"ja:ジョリーパスタ",cuisine:"pasta",name:"ジョリーパスタ","name:en":"Jolly-Pasta","name:ja":"ジョリーパスタ"}},"amenity/restaurant|ステーキガスト":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"ステーキガスト","brand:ja":"ステーキガスト","brand:wikidata":"Q11253593","brand:wikipedia":"ja:すかいらーく",cuisine:"steak",name:"ステーキガスト","name:ja":"ステーキガスト"}},"amenity/restaurant|デニーズ":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"デニーズ","brand:en":"Denny's","brand:ja":"デニーズ","brand:wikidata":"Q11320661","brand:wikipedia":"ja:デニーズ (日本)",name:"デニーズ","name:en":"Denny's","name:ja":"デニーズ"}},"amenity/restaurant|バーミヤン":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"バーミヤン","brand:en":"Bamiyan","brand:ja":"バーミヤン","brand:wikidata":"Q11328598","brand:wikipedia":"ja:バーミヤン (レストランチェーン)",name:"バーミヤン","name:en":"Bamiyan","name:ja":"バーミヤン"}},"amenity/restaurant|ビッグボーイ":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"ビッグボーイ","brand:en":"Big Boy Restaurants","brand:ja":"ビッグボーイ","brand:wikidata":"Q4386779","brand:wikipedia":"en:Big Boy Restaurants",cuisine:"burger",name:"ビッグボーイ","name:en":"Big Boy Restaurants","name:ja":"ビッグボーイ"}},"amenity/restaurant|リンガーハット":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"リンガーハット","brand:en":"Ringer Hut","brand:ja":"リンガーハット","brand:wikidata":"Q7334856","brand:wikipedia":"en:Ringer Hut",cuisine:"japanese",name:"リンガーハット","name:en":"Ringer Hut","name:ja":"リンガーハット"}},"amenity/restaurant|ロイヤルホスト":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"ロイヤルホスト","brand:en":"Royal Host","brand:ja":"ロイヤルホスト","brand:wikidata":"Q11120884","brand:wikipedia":"ja:ロイヤルホスト",cuisine:"japanese;italian;french",name:"ロイヤルホスト","name:en":"Royal Host","name:ja":"ロイヤルホスト"}},"amenity/restaurant|丸亀製麺":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"丸亀製麺","brand:en":"Marugame Seimen","brand:ja":"丸亀製麺","brand:wikidata":"Q10877253","brand:wikipedia":"ja:丸亀製麺",cuisine:"noodle",name:"丸亀製麺","name:en":"Marugame Seimen","name:ja":"丸亀製麺"}},"amenity/restaurant|八方雲集":{tags:{amenity:"restaurant",brand:"八方雲集","brand:en":"Eight Way","brand:wikidata":"Q28417381","brand:wikipedia":"zh:八方雲集","brand:zh":"八方雲集",name:"八方雲集","name:en":"Eight Way","name:zh":"八方雲集"}},"amenity/restaurant|和食さと":{countryCodes:["jp"],matchNames:["さと"],tags:{amenity:"restaurant",brand:"和食さと","brand:en":"Washoku Sato","brand:ja":"和食さと","brand:wikidata":"Q11304897","brand:wikipedia":"ja:SRSホールディングス",cuisine:"japanese",name:"和食さと","name:en":"Washoku Sato","name:ja":"和食さと"}},"amenity/restaurant|夢庵":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"夢庵","brand:en":"Yumean","brand:ja":"夢庵","brand:wikidata":"Q11253593","brand:wikipedia":"ja:すかいらーく",cuisine:"japanese",name:"夢庵","name:en":"Yumean","name:ja":"夢庵"}},"amenity/restaurant|大戸屋":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"大戸屋","brand:en":"Ootoya","brand:ja":"大戸屋","brand:wikidata":"Q11435522","brand:wikipedia":"ja:大戸屋ホールディングス",cuisine:"japanese",name:"大戸屋","name:en":"Ootoya","name:ja":"大戸屋"}},"amenity/restaurant|大阪王将":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"大阪王将","brand:en":"Osaka Ohsho","brand:ja":"大阪王将","brand:wikidata":"Q48743717","brand:wikipedia":"ja:大阪王将",cuisine:"japanese;chinese",name:"大阪王将","name:en":"Osaka Ohsho","name:ja":"大阪王将"}},"amenity/restaurant|天下一品":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"天下一品","brand:en":"Tenkaippin","brand:wikidata":"Q11442172","brand:wikipedia":"en:Tenkaippin",cuisine:"ramen",name:"天下一品","name:en":"Tenkaippin"}},"amenity/restaurant|安楽亭":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"安楽亭","brand:en":"Anrakutei","brand:wikidata":"Q11450866","brand:wikipedia":"ja:安楽亭",cuisine:"barbecue",name:"安楽亭","name:en":"Anrakutei"}},"amenity/restaurant|木曽路":{tags:{amenity:"restaurant",brand:"木曽路","brand:wikidata":"Q11518589","brand:wikipedia":"ja:木曽路 (企業)",cuisine:"japanese",name:"木曽路"}},"amenity/restaurant|永和豆漿":{countryCodes:["tw"],tags:{amenity:"restaurant",brand:"永和豆漿","brand:en":"Yonghe Soy Milk","brand:wikidata":"Q11131335","brand:wikipedia":"zh:永和豆漿",name:"永和豆漿","name:en":"Yonghe Soy Milk"}},"amenity/restaurant|牛角":{tags:{amenity:"restaurant",brand:"牛角","brand:en":"Gyū-Kaku","brand:wikidata":"Q11349387","brand:wikipedia":"en:Gyu-Kaku",cuisine:"barbecue",name:"牛角","name:en":"Gyū-Kaku"}},"amenity/restaurant|華屋与兵衛":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"華屋与兵衛","brand:en":"Hanaya Yohei","brand:ja":"華屋与兵衛","brand:wikidata":"Q11620063","brand:wikipedia":"ja:華屋与兵衛 (レストラン)",cuisine:"japanese",name:"華屋与兵衛","name:en":"Hanaya Yohei","name:ja":"華屋与兵衛",operator:"株式会社ゼンショーホールディングス","operator:en":"Zensho Holdings Co., Ltd.","operator:ja":"株式会社ゼンショーホールディングス","operator:wikidata":"Q8069229","operator:wikipedia":"ja:ゼンショー"}},"amenity/restaurant|餃子の王将":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"餃子の王将","brand:en":"Gyoza no Ohsho","brand:ja":"餃子の王将","brand:wikidata":"Q11666805","brand:wikipedia":"en:Gyoza no Ohsho",cuisine:"chinese;gyoza",name:"餃子の王将","name:en":"Gyoza no Ohsho","name:ja":"餃子の王将"}},"amenity/restaurant|바다횟집":{countryCodes:["kr"],tags:{amenity:"restaurant",brand:"바다횟집","brand:ko":"바다횟집",name:"바다횟집","name:ko":"바다횟집"}},"amenity/restaurant|빕스":{countryCodes:["kr"],tags:{amenity:"restaurant",brand:"빕스","brand:en":"VIPS","brand:ko":"빕스","brand:wikidata":"Q12599540","brand:wikipedia":"en:VIPS (restaurant)",name:"빕스","name:en":"VIPS","name:ko":"빕스"}},"amenity/social_centre|American Legion Hall":{countryCodes:["us"],matchNames:["american legion"],tags:{alt_name:"American Legion Hall",amenity:"social_centre",brand:"American Legion","brand:wikidata":"Q468865","brand:wikipedia":"en:American Legion",name:"American Legion Hall","social_centre:for":"veterans"}},"amenity/social_centre|Eagles Lodge":{countryCodes:["us"],matchNames:["aeries lodge","foe","fraternal order of eagles"],tags:{alt_name:"Aeries Lodge",amenity:"social_centre",brand:"Fraternal Order of Eagles","brand:wikidata":"Q5493810","brand:wikipedia":"en:Fraternal Order of Eagles",name:"Eagles Lodge",official_name:"Fraternal Order of Eagles"}},"amenity/social_centre|Elks Lodge":{countryCodes:["us"],matchNames:["benevolent and protective order of elks","bpoe","elks"],tags:{amenity:"social_centre",brand:"Benevolent and Protective Order of Elks","brand:wikidata":"Q2895789","brand:wikipedia":"en:Benevolent and Protective Order of Elks",name:"Elks Lodge",official_name:"Benevolent and Protective Order of Elks"}},"amenity/social_centre|Moose Lodge":{countryCodes:["bm","ca","us"],matchNames:["loyal order of moose"],tags:{alt_name:"Moose Lodge",amenity:"social_centre",brand:"Loyal Order of Moose","brand:wikidata":"Q6908585","brand:wikipedia":"en:Loyal Order of Moose",name:"Moose Lodge",official_name:"Loyal Order of Moose"}},"amenity/social_centre|Odd Fellows Hall":{matchNames:["independent order of odd fellows","ioof","odd fellow","odd fellows"],tags:{amenity:"social_centre",brand:"Independent Order of Odd Fellows","brand:wikidata":"Q1425508","brand:wikipedia":"en:Independent Order of Odd Fellows",name:"Odd Fellows Hall",official_name:"Independent Order of Odd Fellows"}},"amenity/vending_machine|Amazon Locker":{countryCodes:["de","us"],tags:{amenity:"vending_machine",brand:"Amazon Locker","brand:wikidata":"Q16974764","brand:wikipedia":"en:Amazon Locker",name:"Amazon Locker",vending:"parcel_pickup"}},"amenity/vending_machine|Automat na jizdenky MHD":{tags:{amenity:"vending_machine",brand:"Automat na jizdenky MHD",name:"Automat na jizdenky MHD"}},"amenity/vending_machine|Automat ŚKUP":{tags:{amenity:"vending_machine",brand:"Automat ŚKUP","brand:wikidata":"Q24945427","brand:wikipedia":"pl:Śląska Karta Usług Publicznych",name:"Automat ŚKUP",vending:"public_transport_tickets"}},"amenity/vending_machine|BKK-automata":{tags:{amenity:"vending_machine",brand:"BKK-automata",name:"BKK-automata"}},"amenity/vending_machine|DHL Packstation":{matchTags:["amenity/post_box"],tags:{amenity:"vending_machine",brand:"Packstation","brand:wikidata":"Q1766703","brand:wikipedia":"en:Packstation",name:"DHL Packstation",operator:"DHL","operator:wikidata":"Q489815","operator:wikipedia":"en:DHL Express",vending:"parcel_pickup;parcel_mail_in"}},"amenity/vending_machine|DHL Paketbox":{countryCodes:["de"],tags:{amenity:"vending_machine",brand:"Paketbox","brand:wikidata":"Q2046604","brand:wikipedia":"de:Paketbox",name:"DHL Paketbox",operator:"DHL","operator:wikidata":"Q489815","operator:wikipedia":"de:DHL",vending:"parcel_mail_in"}},"amenity/vending_machine|Dog-Station":{countryCodes:["at","de","dk"],tags:{amenity:"vending_machine",brand:"Dog-Station","brand:wikidata":"Q63720061",name:"Dog-Station",vending:"excrement_bags"}},"amenity/vending_machine|KKM":{countryCodes:["pl"],tags:{amenity:"vending_machine",brand:"KKM","brand:wikidata":"Q57515549",name:"KKM",vending:"public_transport_tickets"}},"amenity/vending_machine|Paczkomat InPost":{countryCodes:["pl"],tags:{amenity:"vending_machine",brand:"InPost","brand:wikidata":"Q3182097","brand:wikipedia":"pl:InPost",name:"Paczkomat InPost",vending:"parcel_pickup;parcel_mail_in"}},"amenity/vending_machine|ParkPlus~(Calgary)":{tags:{amenity:"vending_machine",brand:"ParkPlus","brand:wikidata":"Q63719595",name:"ParkPlus",vending:"parking_tickets"}},"amenity/vending_machine|Redbox":{tags:{amenity:"vending_machine",brand:"Redbox","brand:wikidata":"Q7305489","brand:wikipedia":"en:Redbox",name:"Redbox",vending:"dvd"}},"amenity/vending_machine|Robidog":{countryCodes:["ch"],tags:{amenity:"vending_machine",brand:"Robidog","brand:wikidata":"Q2159689","brand:wikipedia":"de:Robidog",name:"Robidog",vending:"excrement_bags"}},"amenity/vending_machine|Tobaccoland":{countryCodes:["de"],tags:{amenity:"vending_machine",brand:"Tobaccoland","brand:wikidata":"Q1439872","brand:wikipedia":"de:Tobaccoland Automatengesellschaft",name:"Tobaccoland",vending:"cigarettes"}},"amenity/vending_machine|VVO Fahrausweise":{countryCodes:["de"],tags:{amenity:"vending_machine",brand:"VVO Fahrausweise",name:"VVO Fahrausweise",operator:"Verkehrsverbund Oberelbe","operator:wikidata":"Q1426445","operator:wikipedia":"en:Verkehrsverbund Oberelbe",vending:"public_transport_tickets"}},"amenity/vending_machine|Ключ здоровья":{countryCodes:["ru"],matchTags:["shop/water"],tags:{amenity:"vending_machine",brand:"Ключ здоровья",name:"Ключ здоровья",vending:"water"}},"amenity/vending_machine|コカ・コーラ":{countryCodes:["jp"],tags:{amenity:"vending_machine",brand:"コカ・コーラ","brand:en":"Coca-Cola","brand:ja":"コカ・コーラ","brand:wikidata":"Q2813","brand:wikipedia":"ja:コカ・コーラ",drink:"cola",name:"コカ・コーラ","name:en":"Coca-Cola","name:ja":"コカ・コーラ",operator:"Coca Cola Japan Co., Ltd.","operator:wikidata":"Q11506438","operator:wikipedia":"ja:日本コカ・コーラ",vending:"drinks"}},"amenity/vending_machine|ポッカサッポロ":{countryCodes:["jp"],matchNames:["pokka sapporo"],tags:{amenity:"vending_machine",brand:"ポッカサッポロ","brand:en":"Pokka Sapporo","brand:ja":"ポッカサッポロ","brand:wikidata":"Q7208665","brand:wikipedia":"ja:ポッカサッポロフード&ビバレッジ",name:"ポッカサッポロ","name:en":"Pokka Sapporo","name:ja":"ポッカサッポロ",vending:"water;food"}},"amenity/veterinary|Banfield Pet Hospital":{countryCodes:["us"],tags:{amenity:"veterinary",brand:"Banfield Pet Hospital","brand:wikidata":"Q2882416","brand:wikipedia":"en:Banfield Pet Hospital",name:"Banfield Pet Hospital"}},"amenity/veterinary|VCA Animal Hospital":{countryCodes:["ca","us"],tags:{amenity:"veterinary",brand:"VCA Animal Hospital","brand:wikidata":"Q7906620","brand:wikipedia":"en:VCA Animal Hospitals",name:"VCA Animal Hospital"}},"leisure/fitness_centre|24 Hour Fitness":{countryCodes:["us"],tags:{brand:"24 Hour Fitness","brand:wikidata":"Q4631849","brand:wikipedia":"en:24 Hour Fitness",leisure:"fitness_centre",name:"24 Hour Fitness"}},"leisure/fitness_centre|Anytime Fitness":{tags:{brand:"Anytime Fitness","brand:wikidata":"Q4778364","brand:wikipedia":"en:Anytime Fitness",leisure:"fitness_centre",name:"Anytime Fitness"}},"leisure/fitness_centre|Basic-Fit":{countryCodes:["be","es","fr","lu","nl"],tags:{brand:"Basic-Fit","brand:wikidata":"Q40165577","brand:wikipedia":"nl:Basic-Fit",leisure:"fitness_centre",name:"Basic-Fit"}},"leisure/fitness_centre|Curves":{tags:{brand:"Curves","brand:wikidata":"Q5196080","brand:wikipedia":"en:Curves International",leisure:"fitness_centre",name:"Curves"}},"leisure/fitness_centre|Fitness First":{countryCodes:["ae","au","de","gb","ph","th"],tags:{brand:"Fitness First","brand:wikidata":"Q127120","brand:wikipedia":"en:Fitness First",leisure:"fitness_centre",name:"Fitness First"}},"leisure/fitness_centre|Gold's Gym":{countryCodes:["ae","in","ph","us"],tags:{brand:"Gold's Gym","brand:wikidata":"Q1536234","brand:wikipedia":"en:Gold's Gym",leisure:"fitness_centre",name:"Gold's Gym"}},"leisure/fitness_centre|LA Fitness":{countryCodes:["ca","gb","us"],tags:{brand:"LA Fitness","brand:wikidata":"Q6457180","brand:wikipedia":"en:LA Fitness",leisure:"fitness_centre",name:"LA Fitness"}},"leisure/fitness_centre|McFit":{countryCodes:["at","de","es","it","pl"],tags:{brand:"McFit","brand:wikidata":"Q871302","brand:wikipedia":"en:McFit",leisure:"fitness_centre",name:"McFit"}},"leisure/fitness_centre|Orangetheory Fitness":{countryCodes:["ca","es","us"],matchNames:["orangetheory"],tags:{brand:"Orangetheory Fitness","brand:wikidata":"Q25005163","brand:wikipedia":"en:Orangetheory Fitness",leisure:"fitness_centre",name:"Orangetheory Fitness"}},"leisure/fitness_centre|Planet Fitness":{countryCodes:["ae","au","ca","cl","cn","co","cr","de","do","es","gb","gt","il","jp","kw","mx","nz","pa","pe","pl","pr","sa","sg","us"],tags:{brand:"Planet Fitness","brand:wikidata":"Q7201095","brand:wikipedia":"en:Planet Fitness",leisure:"fitness_centre",name:"Planet Fitness"}},"leisure/fitness_centre|PureGym":{countryCodes:["gb"],tags:{brand:"PureGym","brand:wikidata":"Q18345898","brand:wikipedia":"en:PureGym",leisure:"fitness_centre",name:"PureGym"}},"leisure/fitness_centre|Retro Fitness":{countryCodes:["us"],tags:{brand:"Retro Fitness","brand:wikidata":"Q61994955",leisure:"fitness_centre",name:"Retro Fitness"}},"leisure/fitness_centre|Snap Fitness":{tags:{brand:"Snap Fitness","brand:wikidata":"Q7547254","brand:wikipedia":"en:Snap Fitness",leisure:"fitness_centre",name:"Snap Fitness"}},"leisure/fitness_centre|clever fit":{countryCodes:["at","ch","de"],tags:{brand:"clever fit",leisure:"fitness_centre",name:"clever fit"}},"leisure/sports_centre|YMCA":{tags:{brand:"YMCA","brand:wikidata":"Q157169","brand:wikipedia":"en:YMCA",leisure:"sports_centre",name:"YMCA"}},"office/estate_agent|Century 21":{matchNames:["century 21 real estate"],nomatch:["shop/department_store|Century 21"],tags:{brand:"Century 21","brand:wikidata":"Q1054480","brand:wikipedia":"en:Century 21 (real estate)",name:"Century 21",office:"estate_agent"}},"office/estate_agent|Coldwell Banker":{matchNames:["coldwell banker real estate"],tags:{brand:"Coldwell Banker","brand:wikidata":"Q738853","brand:wikipedia":"en:Coldwell Banker",name:"Coldwell Banker",office:"estate_agent"}},"office/estate_agent|RE/MAX":{tags:{brand:"RE/MAX","brand:wikidata":"Q965845","brand:wikipedia":"en:RE/MAX",name:"RE/MAX",office:"estate_agent"}},"office/financial_advisor|Edward Jones":{countryCodes:["ca","us"],matchTags:["office/financial"],tags:{alt_name:"Edward Jones Investments",brand:"Edward Jones","brand:wikidata":"Q5343830","brand:wikipedia":"en:Edward Jones Investments",name:"Edward Jones",office:"financial_advisor"}},"office/insurance|Allstate":{countryCodes:["us"],matchNames:["allstate insurance"],tags:{brand:"Allstate","brand:wikidata":"Q2645636","brand:wikipedia":"en:Allstate",name:"Allstate",office:"insurance"}},"office/insurance|American Family Insurance":{countryCodes:["us"],matchNames:["american family","amfam"],tags:{brand:"American Family Insurance","brand:wikidata":"Q4743730","brand:wikipedia":"en:American Family Insurance",name:"American Family Insurance",office:"insurance"}},"office/insurance|Erie Insurance":{countryCodes:["us"],matchNames:["erie"],tags:{brand:"Erie Insurance","brand:wikidata":"Q5388314","brand:wikipedia":"en:Erie Insurance Group",name:"Erie Insurance",office:"insurance"}},"office/insurance|Farmers Insurance":{countryCodes:["us"],matchNames:["farmers"],tags:{brand:"Farmers Insurance","brand:wikidata":"Q1396863","brand:wikipedia":"en:Farmers Insurance Group",name:"Farmers Insurance",office:"insurance"}},"office/insurance|GEICO":{countryCodes:["us"],tags:{brand:"GEICO","brand:wikidata":"Q1498689","brand:wikipedia":"en:GEICO",name:"GEICO",office:"insurance"}},"office/insurance|Grange Insurance":{countryCodes:["us"],matchNames:["grange"],tags:{brand:"Grange Insurance","brand:wikidata":"Q17183481","brand:wikipedia":"en:Grange Insurance",name:"Grange Insurance",office:"insurance"}},"office/insurance|Nationwide":{countryCodes:["us"],matchNames:["nationwide insurance"],nomatch:["amenity/bank|Nationwide"],tags:{brand:"Nationwide","brand:wikidata":"Q6979886","brand:wikipedia":"en:Nationwide Mutual Insurance Company",name:"Nationwide",office:"insurance"}},"office/insurance|Progressive":{countryCodes:["us"],matchNames:["progressive insurance"],tags:{brand:"Progressive","brand:wikidata":"Q7248721","brand:wikipedia":"en:Progressive Corporation",name:"Progressive",office:"insurance"}},"office/insurance|State Farm":{countryCodes:["us"],matchNames:["state farm insurance"],tags:{brand:"State Farm","brand:wikidata":"Q2007336","brand:wikipedia":"en:State Farm",name:"State Farm",office:"insurance"}},"office/tax_advisor|H&R Block":{countryCodes:["us"],tags:{brand:"H&R Block","brand:wikidata":"Q5627799","brand:wikipedia":"en:H&R Block",name:"H&R Block",office:"tax_advisor"}},"office/tax_advisor|Jackson Hewitt":{countryCodes:["us"],matchNames:["jackson hewitt tax service"],tags:{alt_name:"Jackson Hewitt Tax Service",brand:"Jackson Hewitt","brand:wikidata":"Q6117132","brand:wikipedia":"en:Jackson Hewitt",name:"Jackson Hewitt",office:"tax_advisor"}},"office/tax_advisor|Liberty Tax":{countryCodes:["us"],matchNames:["liberty tax service"],tags:{alt_name:"Liberty Tax Service",brand:"Liberty Tax","brand:wikidata":"Q6541978","brand:wikipedia":"en:Liberty Tax Service",name:"Liberty Tax",office:"tax_advisor"}},"shop/alcohol|Alko":{countryCodes:["fi"],tags:{brand:"Alko","brand:wikidata":"Q1849187","brand:wikipedia":"en:Alko",name:"Alko",shop:"alcohol"}},"shop/alcohol|BC Liquor Store":{countryCodes:["ca"],tags:{brand:"BC Liquor Store","brand:wikidata":"Q43079557","brand:wikipedia":"en:BC Liquor Stores",name:"BC Liquor Store",shop:"alcohol"}},"shop/alcohol|BWS":{countryCodes:["au"],tags:{brand:"BWS","brand:wikidata":"Q4836848","brand:wikipedia":"en:BWS (liquor retailer)",name:"BWS",shop:"alcohol"}},"shop/alcohol|Bargain Booze":{countryCodes:["gb"],tags:{brand:"Bargain Booze","brand:wikidata":"Q16971315","brand:wikipedia":"en:Bargain Booze",name:"Bargain Booze",shop:"alcohol"}},"shop/alcohol|BevMo!":{countryCodes:["us"],tags:{brand:"BevMo!","brand:wikidata":"Q4899308","brand:wikipedia":"en:BevMo!",name:"BevMo!",shop:"alcohol"}},"shop/alcohol|Cellarbrations":{countryCodes:["au"],tags:{brand:"Cellarbrations",name:"Cellarbrations",operator:"Metcash","operator:wikidata":"Q23073728","operator:wikipedia":"en:Metcash",shop:"alcohol"}},"shop/alcohol|Dan Murphy's":{countryCodes:["au"],tags:{brand:"Dan Murphy's","brand:wikidata":"Q5214075","brand:wikipedia":"en:Dan Murphy's",name:"Dan Murphy's",shop:"alcohol"}},"shop/alcohol|Gall & Gall":{countryCodes:["nl"],tags:{brand:"Gall & Gall","brand:wikidata":"Q13639185","brand:wikipedia":"nl:Gall & Gall",name:"Gall & Gall",shop:"alcohol"}},"shop/alcohol|LCBO":{countryCodes:["ca"],tags:{brand:"LCBO","brand:wikidata":"Q845263","brand:wikipedia":"en:Liquor Control Board of Ontario",name:"LCBO",shop:"alcohol"}},"shop/alcohol|Liquor Depot":{countryCodes:["ca"],tags:{brand:"Liquor Depot",name:"Liquor Depot",shop:"alcohol"}},"shop/alcohol|Liquorland":{countryCodes:["au"],tags:{brand:"Liquorland","brand:wikidata":"Q2283837","brand:wikipedia":"en:Liquorland",name:"Liquorland",operator:"Coles Group","operator:wikidata":"Q1339055","operator:wikipedia":"en:Coles Group",shop:"alcohol"}},"shop/alcohol|Mitra":{countryCodes:["nl"],tags:{brand:"Mitra",name:"Mitra",shop:"alcohol"}},"shop/alcohol|Nicolas":{countryCodes:["be","de","fr","gb","pl"],tags:{brand:"Nicolas","brand:wikidata":"Q3340012","brand:wikipedia":"en:Nicolas (wine retailer)",name:"Nicolas",shop:"alcohol"}},"shop/alcohol|SAQ":{countryCodes:["ca"],tags:{brand:"SAQ","brand:wikidata":"Q3488077","brand:wikipedia":"en:Société des alcools du Québec",name:"SAQ",shop:"alcohol"}},"shop/alcohol|Spec's":{countryCodes:["us"],tags:{brand:"Spec's","brand:wikidata":"Q7574415","brand:wikipedia":"en:Spec's Wine, Spirits & Finer Foods",name:"Spec's",shop:"alcohol"}},"shop/alcohol|Super Liquor":{countryCodes:["nz"],tags:{brand:"Super Liquor",name:"Super Liquor",shop:"alcohol"}},"shop/alcohol|Systembolaget":{countryCodes:["se"],tags:{brand:"Systembolaget","brand:wikidata":"Q1476113","brand:wikipedia":"en:Systembolaget",name:"Systembolaget",shop:"alcohol"}},"shop/alcohol|The Beer Store":{countryCodes:["ca"],tags:{brand:"The Beer Store","brand:wikidata":"Q16243674","brand:wikipedia":"en:The Beer Store",name:"The Beer Store",shop:"alcohol"}},"shop/alcohol|Thirsty Camel":{countryCodes:["au"],tags:{brand:"Thirsty Camel",name:"Thirsty Camel",shop:"alcohol"}},"shop/alcohol|Total Wine":{countryCodes:["us"],tags:{brand:"Total Wine","brand:wikidata":"Q7828084","brand:wikipedia":"en:Total Wine & More",name:"Total Wine",shop:"alcohol"}},"shop/alcohol|Virginia ABC":{countryCodes:["us"],tags:{brand:"Virginia ABC","brand:wikidata":"Q7934236","brand:wikipedia":"en:Virginia Alcoholic Beverage Control Authority",name:"Virginia ABC",shop:"alcohol"}},"shop/alcohol|Алкомаркет":{countryCodes:["kz"],tags:{brand:"Алкомаркет",name:"Алкомаркет",shop:"alcohol"}},"shop/alcohol|Ароматный мир":{countryCodes:["ru"],tags:{brand:"Ароматный мир",name:"Ароматный мир",shop:"alcohol"}},"shop/alcohol|Бристоль":{countryCodes:["ru"],matchTags:["shop/convenience"],tags:{brand:"Бристоль","brand:wikidata":"Q59155583","brand:wikipedia":"ru:Бристоль (сеть магазинов)",name:"Бристоль",shop:"alcohol"}},"shop/alcohol|Винлаб":{countryCodes:["ru"],tags:{brand:"Винлаб",name:"Винлаб",operator:"Белуга Групп","operator:wikidata":"Q4420254","operator:wikipedia":"ru:Белуга Групп",shop:"alcohol"}},"shop/alcohol|Горилка":{countryCodes:["kz","ru"],tags:{brand:"Горилка",name:"Горилка",shop:"alcohol"}},"shop/alcohol|Градус":{countryCodes:["ru","ua"],tags:{brand:"Градус",name:"Градус",shop:"alcohol"}},"shop/alcohol|Градусы":{countryCodes:["ru"],tags:{brand:"Градусы",name:"Градусы",shop:"alcohol"}},"shop/alcohol|Красное & Белое":{countryCodes:["ru"],matchNames:["красное и белое"],tags:{brand:"Красное & Белое","brand:en":"Red&White","brand:wikidata":"Q24933790","brand:wikipedia":"en:Krasnoe & Beloe",name:"Красное & Белое","name:en":"Red&White",shop:"alcohol"}},"shop/alcohol|Кристалл":{countryCodes:["by","ru"],matchTags:["shop/convenience"],tags:{brand:"Кристалл",name:"Кристалл",shop:"alcohol"}},"shop/alcohol|Лион":{countryCodes:["ru"],tags:{brand:"Лион",name:"Лион",shop:"alcohol"}},"shop/alcohol|Норман":{countryCodes:["ru"],tags:{brand:"Норман",name:"Норман",shop:"alcohol"}},"shop/alcohol|Отдохни":{countryCodes:["ru"],tags:{brand:"Отдохни",name:"Отдохни",shop:"alcohol"}},"shop/alcohol|カクヤス":{countryCodes:["jp"],tags:{brand:"カクヤス","brand:ja":"カクヤス",name:"カクヤス","name:ja":"カクヤス",shop:"alcohol"}},"shop/baby_goods|Aubert":{countryCodes:["fr"],tags:{brand:"Aubert","brand:wikidata":"Q62964657",name:"Aubert",shop:"baby_goods"}},"shop/baby_goods|Babies R Us":{tags:{brand:"Babies R Us","brand:wikidata":"Q17232036",name:"Babies R Us",shop:"baby_goods"}},"shop/baby_goods|BabyOne":{countryCodes:["de"],tags:{brand:"BabyOne","brand:wikidata":"Q57540408",name:"BabyOne",shop:"baby_goods"}},"shop/baby_goods|Buy Buy Baby":{countryCodes:["ca","us"],tags:{brand:"Buy Buy Baby","brand:wikidata":"Q5003352","brand:wikipedia":"en:Buy Buy Baby",name:"Buy Buy Baby",shop:"baby_goods"}},"shop/baby_goods|Mothercare":{tags:{brand:"Mothercare","brand:wikidata":"Q136738","brand:wikipedia":"en:Mothercare",name:"Mothercare",shop:"baby_goods"}},"shop/baby_goods|西松屋":{countryCodes:["jp"],matchTags:["shop/clothes"],tags:{brand:"西松屋","brand:en":"Nishimatsuya Chain","brand:ja":"西松屋","brand:wikidata":"Q11628761","brand:wikipedia":"ja:西松屋",name:"西松屋","name:en":"Nishimatsuya Chain","name:ja":"西松屋",shop:"baby_goods"}},"shop/bag|Carpisa":{countryCodes:["it"],tags:{brand:"Carpisa","brand:wikidata":"Q28035409","brand:wikipedia":"en:Carpisa",name:"Carpisa",shop:"bag"}},"shop/bag|Coach":{countryCodes:["ca","us"],matchNames:["coach new york","coach ny"],tags:{brand:"Coach","brand:wikidata":"Q727697","brand:wikipedia":"en:Coach New York",name:"Coach",shop:"bag"}},"shop/bag|Kipling":{tags:{brand:"Kipling","brand:wikidata":"Q6414641","brand:wikipedia":"en:Kipling (brand)",name:"Kipling",shop:"bag"}},"shop/bag|Samsonite":{tags:{brand:"Samsonite","brand:wikidata":"Q1203426","brand:wikipedia":"en:Samsonite",name:"Samsonite",shop:"bag"}},"shop/bag|Tumi":{tags:{brand:"Tumi","brand:wikidata":"Q4465402","brand:wikipedia":"en:Tumi Inc.",name:"Tumi",shop:"bag"}},"shop/bag|Vera Bradley":{countryCodes:["us"],tags:{brand:"Vera Bradley","brand:wikidata":"Q7920749","brand:wikipedia":"en:Vera Bradley",name:"Vera Bradley",shop:"bag"}},"shop/bakery|AILI":{countryCodes:["cn"],tags:{brand:"AILI",name:"AILI",shop:"bakery"}},"shop/bakery|Anker":{countryCodes:["at","sk"],tags:{brand:"Anker","brand:wikidata":"Q557116","brand:wikipedia":"de:Ankerbrot",name:"Anker",shop:"bakery"}},"shop/bakery|Awiteks":{countryCodes:["pl"],tags:{brand:"Awiteks","brand:wikidata":"Q62054190",name:"Awiteks",shop:"bakery"}},"shop/bakery|Backwerk":{countryCodes:["at","ch","de","gb","nl"],tags:{brand:"BackWerk","brand:wikidata":"Q798298","brand:wikipedia":"de:BackWerk",name:"Backwerk",shop:"bakery"}},"shop/bakery|Bakers Delight":{countryCodes:["au","ca","nz","us"],tags:{brand:"Bakers Delight","brand:wikidata":"Q4849261","brand:wikipedia":"en:Bakers Delight",name:"Bakers Delight",shop:"bakery"}},"shop/bakery|Bakker Bart":{countryCodes:["be","nl"],tags:{brand:"Bakker Bart","brand:wikidata":"Q2177445","brand:wikipedia":"nl:Bakker Bart",name:"Bakker Bart",shop:"bakery"}},"shop/bakery|Banette":{tags:{brand:"Banette","brand:wikidata":"Q2882405","brand:wikipedia":"fr:Banette (entreprise)",name:"Banette",shop:"bakery"}},"shop/bakery|Birds":{countryCodes:["gb"],tags:{brand:"Birds","brand:wikidata":"Q63001935","brand:wikipedia":"en:Birds Bakery",name:"Birds",official_name:"Birds Bakery",shop:"bakery"}},"shop/bakery|Bäckerei Fuchs":{countryCodes:["de"],tags:{brand:"Bäckerei Fuchs","brand:wikidata":"Q42825993","brand:wikipedia":"de:Harald Fuchs Bäckerei – Konditorei",name:"Bäckerei Fuchs",shop:"bakery"}},"shop/bakery|Bäckerei Schmidt":{countryCodes:["de"],tags:{brand:"Bäckerei Schmidt",name:"Bäckerei Schmidt",shop:"bakery"}},"shop/bakery|Bäckerei Schneider":{countryCodes:["de"],tags:{brand:"Bäckerei Schneider",name:"Bäckerei Schneider",shop:"bakery"}},"shop/bakery|Büsch":{countryCodes:["de"],tags:{brand:"Büsch",name:"Büsch",shop:"bakery"}},"shop/bakery|Cadera":{countryCodes:["de"],tags:{brand:"Cadera","brand:wikidata":"Q62086410",name:"Cadera",shop:"bakery"}},"shop/bakery|Cooplands":{countryCodes:["gb"],tags:{brand:"Cooplands","brand:wikidata":"Q5167971","brand:wikipedia":"en:Cooplands",name:"Cooplands",shop:"bakery"}},"shop/bakery|Dat Backhus":{countryCodes:["de"],tags:{brand:"Dat Backhus","brand:wikidata":"Q62093175",name:"Dat Backhus",shop:"bakery"}},"shop/bakery|Der Beck":{countryCodes:["de"],tags:{brand:"Der Beck","brand:wikidata":"Q1192443","brand:wikipedia":"en:Der Beck",name:"Der Beck",shop:"bakery"}},"shop/bakery|Der Mann":{countryCodes:["at"],tags:{brand:"Der Mann",name:"Der Mann",shop:"bakery"}},"shop/bakery|Ditsch":{countryCodes:["de"],matchTags:["amenity/fast_food"],tags:{brand:"Ditsch","brand:wikidata":"Q911573","brand:wikipedia":"en:Ditsch",name:"Ditsch",shop:"bakery"}},"shop/bakery|Fischer":{countryCodes:["be","fr"],tags:{brand:"Fischer",name:"Fischer",shop:"bakery"}},"shop/bakery|Fornetti":{tags:{brand:"Fornetti","brand:wikidata":"Q1003020","brand:wikipedia":"en:Fornetti",name:"Fornetti",shop:"bakery"}},"shop/bakery|Goeken backen":{countryCodes:["de"],tags:{brand:"Goeken backen",name:"Goeken backen",shop:"bakery"}},"shop/bakery|Goldilocks":{countryCodes:["ca","ph","th","us"],tags:{brand:"Goldilocks","brand:wikidata":"Q5580198","brand:wikipedia":"en:Goldilocks Bakeshop",name:"Goldilocks",shop:"bakery"}},"shop/bakery|Granier":{countryCodes:["es"],tags:{brand:"Granier",name:"Granier",shop:"bakery"}},"shop/bakery|Greggs":{countryCodes:["gb"],matchTags:["amenity/fast_food"],tags:{brand:"Greggs","brand:wikidata":"Q3403981","brand:wikipedia":"en:Greggs",name:"Greggs",shop:"bakery"}},"shop/bakery|Hert":{countryCodes:["pl"],tags:{brand:"Hert",name:"Hert",shop:"bakery"}},"shop/bakery|Hinnerbäcker":{countryCodes:["de"],tags:{brand:"Hinnerbäcker",name:"Hinnerbäcker",shop:"bakery"}},"shop/bakery|Hofpfisterei":{countryCodes:["de"],tags:{brand:"Hofpfisterei","brand:wikidata":"Q1623217","brand:wikipedia":"en:Hofpfisterei",name:"Hofpfisterei",shop:"bakery"}},"shop/bakery|Ihle":{countryCodes:["de"],matchNames:["landbäckerei ihle"],tags:{brand:"Ihle","brand:wikidata":"Q1626371","brand:wikipedia":"de:Landbäckerei Ihle",name:"Ihle",shop:"bakery"}},"shop/bakery|Julie's Bakeshop":{countryCodes:["ph"],tags:{brand:"Julie's Bakeshop",name:"Julie's Bakeshop",shop:"bakery"}},"shop/bakery|K&U Bäckerei":{countryCodes:["de"],matchNames:["k&u"],tags:{brand:"K&U Bäckerei","brand:wikidata":"Q1719433","brand:wikipedia":"de:K & U Bäckerei",name:"K&U Bäckerei",shop:"bakery"}},"shop/bakery|Kamps":{countryCodes:["de"],tags:{brand:"Kamps","brand:wikidata":"Q1723381","brand:wikipedia":"de:Kamps (Unternehmen)",name:"Kamps",shop:"bakery"}},"shop/bakery|La Mie Câline":{countryCodes:["fr"],tags:{brand:"La Mie Câline","brand:wikidata":"Q3210704","brand:wikipedia":"fr:La Mie câline",name:"La Mie Câline",shop:"bakery"}},"shop/bakery|Le Crobag":{countryCodes:["at","de","pl","ru"],tags:{brand:"Le Crobag","brand:wikidata":"Q1558025","brand:wikipedia":"de:Le Crobag",name:"Le Crobag",shop:"bakery"}},"shop/bakery|Le Fournil":{tags:{brand:"Le Fournil",name:"Le Fournil",shop:"bakery"}},"shop/bakery|Lila Bäcker":{countryCodes:["de"],tags:{brand:"Lila Bäcker","brand:wikidata":"Q57516591",name:"Lila Bäcker",shop:"bakery"}},"shop/bakery|Lipóti Pékség":{countryCodes:["hu"],tags:{brand:"Lipóti Pékség",name:"Lipóti Pékség",shop:"bakery"}},"shop/bakery|Löwenbäcker Schaper":{countryCodes:["de"],matchNames:["schaper"],tags:{brand:"Löwenbäcker Schaper","brand:wikidata":"Q62075965",name:"Löwenbäcker Schaper",shop:"bakery"}},"shop/bakery|Marie Blachère":{countryCodes:["fr"],tags:{brand:"Marie Blachère","brand:wikidata":"Q62082410",name:"Marie Blachère",shop:"bakery"}},"shop/bakery|Mlinar":{countryCodes:["ba","hr","sl"],tags:{brand:"Mlinar","brand:wikidata":"Q62082464",name:"Mlinar",shop:"bakery"}},"shop/bakery|Musmanni":{countryCodes:["cr"],tags:{brand:"Musmanni","brand:wikidata":"Q19382082","brand:wikipedia":"no:Musmanni",name:"Musmanni",shop:"bakery"}},"shop/bakery|Nothing Bundt Cakes":{countryCodes:["ca","us"],tags:{brand:"Nothing Bundt Cakes","brand:wikidata":"Q62082526",name:"Nothing Bundt Cakes",shop:"bakery"}},"shop/bakery|Nur Hier":{countryCodes:["de"],tags:{brand:"Nur Hier",name:"Nur Hier",shop:"bakery"}},"shop/bakery|Oebel":{countryCodes:["de"],tags:{brand:"Oebel",name:"Oebel",shop:"bakery"}},"shop/bakery|Pan de Manila":{countryCodes:["ph"],tags:{brand:"Pan de Manila",name:"Pan de Manila",shop:"bakery"}},"shop/bakery|Paul":{tags:{brand:"Paul","brand:wikidata":"Q3370417","brand:wikipedia":"en:Paul (bakery)",name:"Paul",shop:"bakery"}},"shop/bakery|Red Ribbon":{countryCodes:["ph","us"],tags:{brand:"Red Ribbon","brand:wikidata":"Q7304789","brand:wikipedia":"en:Red Ribbon Bakeshop",name:"Red Ribbon",shop:"bakery"}},"shop/bakery|Ronde des Pains":{countryCodes:["be","fr"],tags:{brand:"Ronde des Pains","brand:wikidata":"Q3441707","brand:wikipedia":"fr:Ronde des Pains",name:"Ronde des Pains",shop:"bakery"}},"shop/bakery|Schäfer's":{countryCodes:["de"],matchNames:["schäfer"],tags:{brand:"Schäfer's","brand:wikidata":"Q1464562","brand:wikipedia":"de:Schäfers Brot",name:"Schäfer's",shop:"bakery"}},"shop/bakery|Sehne":{countryCodes:["de"],tags:{brand:"Sehne","brand:wikidata":"Q1314761","brand:wikipedia":"de:Sehne Backwaren",name:"Sehne",shop:"bakery"}},"shop/bakery|Steinecke":{countryCodes:["de"],tags:{brand:"Steinecke","brand:wikidata":"Q57516278","brand:wikipedia":"de:Meisterbäckerei Steinecke",name:"Steinecke",shop:"bakery"}},"shop/bakery|Sternenbäck":{countryCodes:["de"],tags:{brand:"Sternenbäck","brand:wikidata":"Q62595021",name:"Sternenbäck",shop:"bakery"}},"shop/bakery|Ströck":{countryCodes:["at"],tags:{brand:"Ströck","brand:wikidata":"Q2357607","brand:wikipedia":"de:Ströck-Brot",name:"Ströck",shop:"bakery"}},"shop/bakery|Wiener Feinbäcker":{countryCodes:["de"],tags:{brand:"Wiener Feinbäcker","brand:wikidata":"Q15854357","brand:wikipedia":"de:Wiener Feinbäckerei Heberer",name:"Wiener Feinbäcker",shop:"bakery"}},"shop/bakery|von Allwörden":{countryCodes:["de"],tags:{brand:"von Allwörden","brand:wikidata":"Q60411349","brand:wikipedia":"nds:Heinrich von Allwörden GmbH",name:"von Allwörden",shop:"bakery"}},"shop/bakery|Булочная Ф. Вольчека":{countryCodes:["ru"],tags:{brand:"Булочная Ф. Вольчека",name:"Булочная Ф. Вольчека",shop:"bakery"}},"shop/bakery|Кулиничи":{countryCodes:["ua"],tags:{brand:"Кулиничи",name:"Кулиничи",shop:"bakery"}},"shop/bakery|Кулиничі":{countryCodes:["ua"],tags:{brand:"Кулиничі",name:"Кулиничі",shop:"bakery"}},"shop/bakery|뚜레쥬르":{countryCodes:["kr"],matchNames:["뚜레주르"],tags:{brand:"뚜레쥬르","brand:en":"Tous Les Jours","brand:ko":"뚜레쥬르","brand:wikidata":"Q3535609","brand:wikipedia":"ko:뚜레쥬르",name:"뚜레쥬르","name:en":"Tous Les Jours","name:ko":"뚜레쥬르",shop:"bakery"}},"shop/bakery|파리바게뜨":{countryCodes:["kr"],tags:{brand:"파리바게뜨","brand:ko":"파리바게뜨",name:"파리바게뜨","name:ko":"파리바게뜨",shop:"bakery"}},"shop/bakery|파리바게트":{countryCodes:["kr"],tags:{brand:"파리바게트","brand:ko":"파리바게트",name:"파리바게트","name:ko":"파리바게트",shop:"bakery"}},"shop/beauty|Bath & Body Works":{tags:{brand:"Bath & Body Works","brand:wikidata":"Q810773","brand:wikipedia":"en:Bath & Body Works",name:"Bath & Body Works",shop:"beauty"}},"shop/beauty|Coiffure Dame":{tags:{brand:"Coiffure Dame",name:"Coiffure Dame",shop:"beauty"}},"shop/beauty|European Wax Center":{countryCodes:["us"],tags:{beauty:"waxing",brand:"European Wax Center","brand:wikidata":"Q5413426","brand:wikipedia":"en:European Wax Center",name:"European Wax Center",shop:"beauty"}},"shop/beauty|Hollywood Nails":{tags:{beauty:"nails",brand:"Hollywood Nails",name:"Hollywood Nails",shop:"beauty"}},"shop/beauty|Indigo Sun":{countryCodes:["gb"],tags:{beauty:"tanning",brand:"Indigo Sun","brand:wikidata":"Q63436906",name:"Indigo Sun",shop:"beauty"}},"shop/beauty|Ulta Beauty":{countryCodes:["us"],matchNames:["ulta"],tags:{brand:"Ulta Beauty","brand:wikidata":"Q7880076","brand:wikipedia":"en:Ulta Beauty",name:"Ulta Beauty",shop:"beauty"}},"shop/beauty|Yves Rocher":{matchTags:["shop/chemist","shop/cosmetics"],tags:{brand:"Yves Rocher","brand:wikidata":"Q28496595","brand:wikipedia":"en:Yves Rocher (company)",name:"Yves Rocher",shop:"beauty"}},"shop/bed|Dreams":{countryCodes:["gb"],tags:{brand:"Dreams","brand:wikidata":"Q5306688","brand:wikipedia":"en:Dreams (bed retailer)",name:"Dreams",shop:"bed"}},"shop/bed|Matratzen Concord":{countryCodes:["at","ch","de"],tags:{brand:"Matratzen Concord","brand:wikidata":"Q18629057","brand:wikipedia":"de:Matratzen Concord",name:"Matratzen Concord",shop:"bed"}},"shop/bed|Mattress Firm":{countryCodes:["us"],matchNames:["sleepys"],tags:{brand:"Mattress Firm","brand:wikidata":"Q6791878","brand:wikipedia":"en:Mattress Firm",name:"Mattress Firm",shop:"bed"}},"shop/bed|Mattress Warehouse":{countryCodes:["us"],tags:{brand:"Mattress Warehouse","brand:wikidata":"Q61995079",name:"Mattress Warehouse",shop:"bed"}},"shop/bed|Sleep Country":{countryCodes:["ca"],tags:{brand:"Sleep Country","brand:wikidata":"Q7539684","brand:wikipedia":"en:Sleep Country Canada",name:"Sleep Country",shop:"bed"}},"shop/bed|Sleep Number":{countryCodes:["us"],tags:{brand:"Sleep Number","brand:wikidata":"Q7447640","brand:wikipedia":"en:Sleep Number",name:"Sleep Number",shop:"bed"}},"shop/beverages|50嵐":{countryCodes:["cn","tw"],tags:{brand:"50嵐",name:"50嵐",shop:"beverages"}},"shop/beverages|Dursty":{countryCodes:["de"],tags:{brand:"Dursty","brand:wikidata":"Q1267518","brand:wikipedia":"de:Dursty Getränkemärkte",name:"Dursty",shop:"beverages"}},"shop/beverages|Edeka Getränkemarkt":{countryCodes:["de"],tags:{brand:"Edeka Getränkemarkt","brand:wikidata":"Q57450576",name:"Edeka Getränkemarkt",shop:"beverages"}},"shop/beverages|Fristo":{countryCodes:["at","de"],matchNames:["fristo getränkemarkt"],tags:{brand:"Fristo","brand:wikidata":"Q1465151","brand:wikipedia":"de:Fristo",name:"Fristo",shop:"beverages"}},"shop/beverages|Getränke Hoffmann":{countryCodes:["de"],tags:{brand:"Getränke Hoffmann","brand:wikidata":"Q19284021","brand:wikipedia":"de:Getränke Hoffmann",name:"Getränke Hoffmann",shop:"beverages"}},"shop/beverages|Getränkeland":{countryCodes:["de"],tags:{brand:"Getränkeland","brand:wikidata":"Q62594849",name:"Getränkeland",shop:"beverages"}},"shop/beverages|Hol'ab":{countryCodes:["de"],tags:{brand:"Hol'ab","brand:wikidata":"Q57557270",name:"Hol'ab",shop:"beverages"}},"shop/beverages|Orterer Getränkemarkt":{countryCodes:["de"],tags:{brand:"Orterer Getränkemarkt","brand:wikidata":"Q23787118","brand:wikipedia":"de:Orterer Gruppe",name:"Orterer Getränkemarkt",shop:"beverages"}},"shop/beverages|Rewe Getränkemarkt":{countryCodes:["de"],tags:{brand:"Rewe Getränkemarkt","brand:wikidata":"Q57519344",name:"Rewe Getränkemarkt",shop:"beverages"}},"shop/beverages|Trinkgut":{countryCodes:["de"],tags:{brand:"Trinkgut","brand:wikidata":"Q2453627","brand:wikipedia":"de:Trinkgut",name:"Trinkgut",shop:"beverages"}},"shop/beverages|清心福全":{countryCodes:["tw"],tags:{brand:"清心福全","brand:wikidata":"Q10391229","brand:wikipedia":"zh:清心福全冷飲站",name:"清心福全",shop:"beverages"}},"shop/beverages|茶湯會":{countryCodes:["tw"],tags:{brand:"茶湯會",name:"茶湯會",shop:"beverages"}},"shop/bicycle|Evans Cycles":{countryCodes:["gb"],tags:{brand:"Evans Cycles","brand:wikidata":"Q5415901","brand:wikipedia":"en:Evans Cycles",name:"Evans Cycles",shop:"bicycle"}},"shop/bicycle|Fri BikeShop":{countryCodes:["dk"],tags:{brand:"Fri BikeShop","brand:wikidata":"Q26721030",name:"Fri BikeShop",shop:"bicycle"}},"shop/bicycle|Giant":{nomatch:["amenity/fuel|Giant","shop/supermarket|Giant"],tags:{brand:"Giant","brand:wikidata":"Q703557","brand:wikipedia":"en:Giant Bicycles",name:"Giant",shop:"bicycle"}},"shop/bicycle|サイクルベースあさひ":{countryCodes:["jp"],tags:{brand:"サイクルベースあさひ","brand:en":"Cycle Base Asahi","brand:ja":"サイクルベースあさひ","brand:wikidata":"Q11257202","brand:wikipedia":"ja:あさひ (企業)",name:"サイクルベースあさひ","name:en":"Cycle Base Asahi","name:ja":"サイクルベースあさひ",shop:"bicycle"}},"shop/bookmaker|Betfred":{countryCodes:["gb"],tags:{brand:"Betfred","brand:wikidata":"Q4897425","brand:wikipedia":"en:Betfred",name:"Betfred",shop:"bookmaker"}},"shop/bookmaker|Coral":{countryCodes:["gb"],tags:{brand:"Coral","brand:wikidata":"Q54621344","brand:wikipedia":"en:Coral (bookmaker)",name:"Coral",shop:"bookmaker"}},"shop/bookmaker|Fortuna":{countryCodes:["cz","hr","pl","ro","sk"],tags:{brand:"Fortuna","brand:wikidata":"Q25857973","brand:wikipedia":"en:Fortuna Entertainment Group",name:"Fortuna",shop:"bookmaker"}},"shop/bookmaker|Ladbrokes":{countryCodes:["gb"],tags:{brand:"Ladbrokes","brand:wikidata":"Q1799875","brand:wikipedia":"en:Ladbrokes Coral",name:"Ladbrokes",shop:"bookmaker"}},"shop/bookmaker|Paddy Power":{countryCodes:["gb","ie"],tags:{brand:"Paddy Power","brand:wikidata":"Q3888718","brand:wikipedia":"en:Paddy Power",name:"Paddy Power",shop:"bookmaker"}},"shop/bookmaker|Tipico":{countryCodes:["at","co","de","gi","hr","mt"],tags:{brand:"Tipico","brand:wikidata":"Q15851003","brand:wikipedia":"en:Tipico",name:"Tipico",shop:"bookmaker"}},"shop/bookmaker|William Hill":{countryCodes:["gb"],tags:{brand:"William Hill","brand:wikidata":"Q4053147","brand:wikipedia":"en:William Hill (bookmaker)",name:"William Hill",shop:"bookmaker"}},"shop/bookmaker|ΟΠΑΠ":{countryCodes:["gr"],tags:{brand:"ΟΠΑΠ","brand:el":"ΟΠΑΠ","brand:en":"OPAP","brand:wikidata":"Q2007823","brand:wikipedia":"en:OPAP",name:"ΟΠΑΠ","name:el":"ΟΠΑΠ","name:en":"OPAP",shop:"bookmaker"}},"shop/bookmaker|Лига ставок":{countryCodes:["ru"],tags:{brand:"Лига ставок","brand:en":"Liga Stavok","brand:ru":"Лига ставок","brand:wikidata":"Q6545804","brand:wikipedia":"ru:Лига Ставок",name:"Лига ставок","name:en":"Liga Stavok","name:ru":"Лига ставок",shop:"bookmaker"}},"shop/bookmaker|Фонбет":{countryCodes:["ru"],tags:{brand:"Фонбет","brand:en":"Fonbet","brand:ru":"Фонбет","brand:wikidata":"Q49137910","brand:wikipedia":"ru:Фонбет",name:"Фонбет","name:en":"Fonbet","name:ru":"Фонбет",shop:"bookmaker"}},"shop/books|Akademibokhandeln":{countryCodes:["se"],tags:{brand:"Akademibokhandeln","brand:wikidata":"Q10403918","brand:wikipedia":"sv:Akademibokhandeln",name:"Akademibokhandeln",shop:"books"}},"shop/books|Barnes & Noble":{countryCodes:["us"],tags:{brand:"Barnes & Noble","brand:wikidata":"Q795454","brand:wikipedia":"en:Barnes & Noble",name:"Barnes & Noble",shop:"books"}},"shop/books|Books-A-Million":{countryCodes:["us"],tags:{brand:"Books-A-Million","brand:wikidata":"Q4943266","brand:wikipedia":"en:Books-A-Million",name:"Books-A-Million",shop:"books"}},"shop/books|Bruna":{countryCodes:["nl"],tags:{brand:"Bruna","brand:wikidata":"Q3317555","brand:wikipedia":"en:Bruna (company)",name:"Bruna",shop:"books"}},"shop/books|Chapters":{countryCodes:["ca","us"],tags:{brand:"Chapters","brand:wikidata":"Q5073540","brand:wikipedia":"en:Chapters (bookstore)",name:"Chapters",shop:"books"}},"shop/books|Cultura":{countryCodes:["fr"],tags:{brand:"Cultura","brand:wikidata":"Q3007154","brand:wikipedia":"fr:Cultura",name:"Cultura",shop:"books"}},"shop/books|Empik":{countryCodes:["pl"],tags:{brand:"Empik","brand:wikidata":"Q3045978","brand:wikipedia":"pl:Empik",name:"Empik",shop:"books"}},"shop/books|Fnac":{countryCodes:["be","ch","es","fr","nl","pt"],tags:{brand:"Fnac","brand:wikidata":"Q676585","brand:wikipedia":"en:Fnac",name:"Fnac",shop:"books"}},"shop/books|Half Price Books":{countryCodes:["us"],tags:{brand:"Half Price Books","brand:wikidata":"Q5641744","brand:wikipedia":"en:Half Price Books",name:"Half Price Books",shop:"books"}},"shop/books|Hugendubel":{countryCodes:["de"],tags:{brand:"Hugendubel","brand:wikidata":"Q1634142","brand:wikipedia":"en:Hugendubel",name:"Hugendubel",shop:"books"}},"shop/books|Mondadori":{countryCodes:["it"],tags:{brand:"Mondadori","brand:wikidata":"Q85355","brand:wikipedia":"en:Arnoldo Mondadori Editore",name:"Mondadori",shop:"books"}},"shop/books|National Book Store":{countryCodes:["ph"],tags:{brand:"National Book Store","brand:wikidata":"Q6971094","brand:wikipedia":"en:National Book Store",name:"National Book Store",shop:"books"}},"shop/books|Standaard Boekhandel":{countryCodes:["be"],tags:{brand:"Standaard Boekhandel","brand:wikidata":"Q3496554","brand:wikipedia":"nl:Standaard Boekhandel",name:"Standaard Boekhandel",shop:"books"}},"shop/books|TSUTAYA":{countryCodes:["jp"],nomatch:["shop/music|TSUTAYA","shop/video|TSUTAYA"],tags:{brand:"TSUTAYA","brand:wikidata":"Q5193457","brand:wikipedia":"ja:カルチュア・コンビニエンス・クラブ",name:"TSUTAYA",shop:"books"}},"shop/books|Thalia":{countryCodes:["at","ch","de"],tags:{brand:"Thalia","brand:wikidata":"Q2408854","brand:wikipedia":"de:Thalia Bücher",name:"Thalia",shop:"books"}},"shop/books|The Works":{countryCodes:["gb","ie"],tags:{brand:"The Works","brand:wikidata":"Q7775853","brand:wikipedia":"en:The Works (retailer)",name:"The Works",shop:"books"}},"shop/books|Waterstones":{countryCodes:["be","gb","ie","je","nl"],tags:{brand:"Waterstones","brand:wikidata":"Q151779","brand:wikipedia":"en:Waterstones",name:"Waterstones",shop:"books"}},"shop/books|Weltbild":{countryCodes:["de"],tags:{brand:"Weltbild","brand:wikidata":"Q883522","brand:wikipedia":"en:Weltbild Publishing Group",name:"Weltbild",shop:"books"}},"shop/books|Буквоед":{countryCodes:["ru"],tags:{brand:"Буквоед","brand:wikidata":"Q4098549","brand:wikipedia":"ru:Буквоед",name:"Буквоед",shop:"books"}},"shop/books|Дом книги":{countryCodes:["ru"],tags:{brand:"Дом книги","brand:wikidata":"Q48950742","brand:wikipedia":"ru:Московский дом книги",name:"Дом книги",shop:"books"}},"shop/books|Читай-город":{countryCodes:["ru"],tags:{brand:"Читай-город","brand:wikidata":"Q4516645","brand:wikipedia":"ru:Читай-город",name:"Читай-город",shop:"books"}},"shop/books|あおい書店":{countryCodes:["jp"],tags:{brand:"あおい書店","brand:en":"AOI","brand:ja":"あおい書店","brand:wikidata":"Q11256783","brand:wikipedia":"ja:あおい書店",name:"あおい書店","name:en":"AOI","name:ja":"あおい書店",shop:"books"}},"shop/books|ブックオフ":{countryCodes:["jp"],tags:{brand:"ブックオフ","brand:en":"Book Off","brand:ja":"ブックオフ","brand:wikidata":"Q893011","brand:wikipedia":"en:Book Off",name:"ブックオフ","name:en":"Book Off","name:ja":"ブックオフ",shop:"books"}},"shop/books|メロンブックス":{countryCodes:["jp"],tags:{brand:"メロンブックス","brand:en":"Melonbooks","brand:ja":"メロンブックス","brand:wikidata":"Q10851653","brand:wikipedia":"ja:メロンブックス",name:"メロンブックス","name:en":"Melonbooks","name:ja":"メロンブックス",shop:"books"}},"shop/books|リブロ":{countryCodes:["jp"],tags:{brand:"リブロ","brand:en":"LIBRO","brand:ja":"リブロ","brand:wikidata":"Q6542768","brand:wikipedia":"ja:リブロ",name:"リブロ","name:en":"Libro","name:ja":"リブロ",shop:"books"}},"shop/books|三省堂書店":{countryCodes:["jp"],tags:{brand:"三省堂書店","brand:en":"Books Sanseido","brand:ja":"三省堂書店","brand:wikidata":"Q10866539","brand:wikipedia":"ja:三省堂書店",name:"三省堂書店","name:en":"Books Sanseido","name:ja":"三省堂書店",shop:"books"}},"shop/books|文教堂":{countryCodes:["jp"],tags:{brand:"文教堂","brand:en":"Bunkyodo","brand:ja":"文教堂","brand:wikidata":"Q11499974","brand:wikipedia":"ja:文教堂",name:"文教堂","name:en":"Bunkyodo","name:ja":"文教堂",shop:"books"}},"shop/books|新华书店":{countryCodes:["cn"],tags:{brand:"新华书店","brand:en":"Xinhua Bookstore","brand:wikidata":"Q6124193","brand:wikipedia":"en:Xinhua Bookstore","brand:zh":"新华书店",name:"新华书店","name:en":"Xinhua Bookstore","name:zh":"新华书店",shop:"books"}},"shop/books|未来屋書店":{countryCodes:["jp"],tags:{brand:"未来屋書店","brand:en":"Miraiya Shoten","brand:ja":"未来屋書店","brand:wikidata":"Q11519563","brand:wikipedia":"ja:未来屋書店",name:"未来屋書店","name:en":"Miraiya Shoten","name:ja":"未来屋書店",shop:"books"}},"shop/butcher|Coqivoire":{countryCodes:["ci"],tags:{brand:"Coqivoire","brand:wikidata":"Q60183284",butcher:"poultry",name:"Coqivoire",shop:"butcher"}},"shop/butcher|Fleischerei Richter":{countryCodes:["de"],tags:{brand:"Fleischerei Richter",name:"Fleischerei Richter",shop:"butcher"}},"shop/butcher|Foani":{countryCodes:["ci"],tags:{brand:"Foani","brand:wikidata":"Q60183335",butcher:"poultry",name:"Foani",shop:"butcher"}},"shop/butcher|Gzella":{countryCodes:["pl"],tags:{brand:"Gzella",name:"Gzella",shop:"butcher"}},"shop/butcher|Vinzenzmurr":{countryCodes:["de"],tags:{brand:"Vinzenzmurr","brand:wikidata":"Q2527361","brand:wikipedia":"de:Vinzenzmurr",name:"Vinzenzmurr",shop:"butcher"}},"shop/butcher|Ариант":{countryCodes:["ru"],tags:{brand:"Ариант",name:"Ариант",shop:"butcher"}},"shop/butcher|Великолукский мясокомбинат":{countryCodes:["ru"],tags:{brand:"Великолукский мясокомбинат","brand:wikidata":"Q18401767","brand:wikipedia":"ru:Великолукский мясокомбинат",name:"Великолукский мясокомбинат",shop:"butcher"}},"shop/butcher|Мясницкий ряд":{countryCodes:["ru"],tags:{brand:"Мясницкий ряд",name:"Мясницкий ряд",shop:"butcher"}},"shop/butcher|Наша Ряба":{countryCodes:["ua"],tags:{brand:"Наша Ряба",name:"Наша Ряба",shop:"butcher"}},"shop/butcher|Родинна ковбаска":{countryCodes:["ua"],tags:{brand:"Родинна ковбаска","brand:en":"Rodynna-kovbaska","brand:wikidata":"Q30969660","brand:wikipedia":"uk:ТзОВ «Барком»",name:"Родинна ковбаска","name:en":"Rodynna-kovbaska",shop:"butcher"}},"shop/butcher|肉のハナマサ":{countryCodes:["jp"],matchNames:["ハナマサ"],tags:{brand:"ハナマサ","brand:en":"Hanamasa","brand:ja":"ハナマサ","brand:wikidata":"Q11326564","brand:wikipedia":"ja:ハナマサ",butcher:"beef",name:"肉のハナマサ","name:en":"Hanamasa Meat","name:ja":"肉のハナマサ",shop:"butcher"}},"shop/candles|Yankee Candle":{countryCodes:["gb","us"],tags:{brand:"Yankee Candle","brand:wikidata":"Q8048733","brand:wikipedia":"en:Yankee Candle",name:"Yankee Candle",shop:"candles"}},"shop/car_parts|Advance Auto Parts":{countryCodes:["ca","pr","us","vi"],tags:{brand:"Advance Auto Parts","brand:wikidata":"Q4686051","brand:wikipedia":"en:Advance Auto Parts",name:"Advance Auto Parts",shop:"car_parts"}},"shop/car_parts|AutoZone":{countryCodes:["br","mx","us"],tags:{brand:"AutoZone","brand:wikidata":"Q4826087","brand:wikipedia":"en:AutoZone",name:"AutoZone",shop:"car_parts"}},"shop/car_parts|Brezan":{countryCodes:["be","nl"],tags:{brand:"Brezan",name:"Brezan",shop:"car_parts"}},"shop/car_parts|Halfords":{countryCodes:["gb","ie"],matchTags:["shop/bicycle"],nomatch:["shop/car_repair|Halfords Autocentre"],tags:{brand:"Halfords","brand:wikidata":"Q3398786","brand:wikipedia":"en:Halfords",name:"Halfords","service:bicycle:retail":"yes",shop:"car_parts"}},"shop/car_parts|Lubrificantes":{tags:{brand:"Lubrificantes",name:"Lubrificantes",shop:"car_parts"}},"shop/car_parts|NAPA Auto Parts":{countryCodes:["ca","mx","us"],matchNames:["napa"],tags:{brand:"NAPA Auto Parts","brand:wikidata":"Q6970842","brand:wikipedia":"en:National Automotive Parts Association",name:"NAPA Auto Parts",operator:"Genuine Parts Company","operator:wikidata":"Q5533818","operator:wikipedia":"en:Genuine Parts Company",shop:"car_parts"}},"shop/car_parts|Norauto":{tags:{brand:"Norauto",name:"Norauto",shop:"car_parts"}},"shop/car_parts|O'Reilly Auto Parts":{countryCodes:["us"],tags:{brand:"O'Reilly Auto Parts","brand:wikidata":"Q7071951","brand:wikipedia":"en:O'Reilly Auto Parts",name:"O'Reilly Auto Parts",shop:"car_parts"}},"shop/car_parts|Repco":{countryCodes:["au","nz"],tags:{brand:"Repco","brand:wikidata":"Q173425","brand:wikipedia":"en:Repco",name:"Repco",shop:"car_parts"}},"shop/car_parts|Supercheap Auto":{countryCodes:["au","nz"],tags:{brand:"Supercheap Auto","brand:wikidata":"Q7643119","brand:wikipedia":"en:Supercheap Auto",name:"Supercheap Auto",shop:"car_parts"}},"shop/car_parts|Tokić":{countryCodes:["ba","hr"],tags:{brand:"Tokić",name:"Tokić",shop:"car_parts"}},"shop/car_parts|Автомир":{countryCodes:["ru"],tags:{brand:"Автомир","brand:wikidata":"Q4056321","brand:wikipedia":"ru:Автомир (автодилер)",name:"Автомир",shop:"car_parts"}},"shop/car_parts|Армтек":{countryCodes:["ru"],tags:{brand:"Армтек",name:"Армтек",shop:"car_parts"}},"shop/car_parts|イエローハット":{countryCodes:["jp"],tags:{brand:"イエローハット","brand:en":"Yellow Hat","brand:ja":"イエローハット","brand:wikidata":"Q11285915","brand:wikipedia":"ja:イエローハット",name:"イエローハット","name:en":"Yellow Hat","name:ja":"イエローハット",shop:"car_parts"}},"shop/car_parts|オートバックス":{countryCodes:["jp"],tags:{brand:"オートバックス","brand:en":"Autobacs","brand:ja":"オートバックス","brand:wikidata":"Q7886426","brand:wikipedia":"ja:オートバックスセブン",name:"オートバックス","name:en":"Autobacs","name:ja":"オートバックス",shop:"car_parts"}},"shop/car_parts|タイヤ館":{countryCodes:["jp"],tags:{brand:"タイヤ館","brand:en":"Taiyakan","brand:ja":"タイヤ館","brand:wikidata":"Q11315808","brand:wikipedia":"ja:タイヤ館",name:"タイヤ館","name:en":"Taiyakan","name:ja":"タイヤ館",shop:"car_parts"}},"shop/car_repair|A.T.U":{countryCodes:["at","de"],matchNames:["auto-teile-unger"],tags:{brand:"A.T.U","brand:wikidata":"Q784721","brand:wikipedia":"de:Auto-Teile-Unger",name:"A.T.U",shop:"car_repair"}},"shop/car_repair|ATS Euromaster":{countryCodes:["gb"],tags:{brand:"ATS Euromaster","brand:wikidata":"Q4654920","brand:wikipedia":"en:ATS Euromaster",name:"ATS Euromaster",shop:"car_repair"}},"shop/car_repair|BestDrive":{countryCodes:["cz","fr","sk"],tags:{brand:"BestDrive","brand:wikidata":"Q63057183",name:"BestDrive",shop:"car_repair"}},"shop/car_repair|Bosch Car Service":{matchNames:["bosch service"],tags:{brand:"Bosch Car Service","brand:wikidata":"Q234021","brand:wikipedia":"en:Robert Bosch GmbH",name:"Bosch Car Service",shop:"car_repair"}},"shop/car_repair|Brakes Plus":{countryCodes:["us"],tags:{brand:"Brakes Plus","brand:wikidata":"Q62075246",name:"Brakes Plus",shop:"car_repair"}},"shop/car_repair|Car-X":{countryCodes:["us"],tags:{brand:"Car-X","brand:wikidata":"Q63859189",name:"Car-X",shop:"car_repair"}},"shop/car_repair|Carglass":{tags:{brand:"Carglass","brand:wikidata":"Q1035997","brand:wikipedia":"de:Carglass",name:"Carglass",shop:"car_repair"}},"shop/car_repair|Citroën":{nomatch:["shop/car|Citroën"],tags:{brand:"Citroën","brand:wikidata":"Q6746","brand:wikipedia":"fr:Citroën",name:"Citroën",shop:"car_repair"}},"shop/car_repair|Dekra":{countryCodes:["de","fr"],tags:{brand:"Dekra","brand:wikidata":"Q383711","brand:wikipedia":"en:Dekra",name:"Dekra",shop:"car_repair"}},"shop/car_repair|Euromaster":{tags:{brand:"Euromaster","brand:wikidata":"Q3060668","brand:wikipedia":"de:Euromaster",name:"Euromaster",shop:"car_repair"}},"shop/car_repair|Feu Vert":{countryCodes:["fr"],tags:{brand:"Feu Vert","brand:wikidata":"Q3070922","brand:wikipedia":"fr:Feu vert (entreprise)",name:"Feu Vert",shop:"car_repair"}},"shop/car_repair|Firestone":{countryCodes:["ca","cl","us"],matchNames:["firestone complete auto care"],tags:{brand:"Firestone","brand:wikidata":"Q420837","brand:wikipedia":"en:Firestone Tire and Rubber Company",name:"Firestone",official_name:"Firestone Complete Auto Care",shop:"car_repair"}},"shop/car_repair|Ford":{nomatch:["shop/car|Ford"],tags:{brand:"Ford","brand:wikidata":"Q44294","brand:wikipedia":"en:Ford Motor Company",name:"Ford",shop:"car_repair"}},"shop/car_repair|Goodyear":{countryCodes:["au","ca","cl","pe","us"],tags:{brand:"Goodyear","brand:wikidata":"Q620875","brand:wikipedia":"en:Goodyear Tire and Rubber Company",name:"Goodyear",shop:"car_repair"}},"shop/car_repair|Grease Monkey":{countryCodes:["cn","us"],tags:{brand:"Grease Monkey","brand:wikidata":"Q5598563","brand:wikipedia":"en:Grease Monkey (business)",name:"Grease Monkey",shop:"car_repair"}},"shop/car_repair|Halfords Autocentre":{countryCodes:["gb"],matchNames:["halfords"],nomatch:["shop/car_parts|Halfords"],tags:{brand:"Halfords Auocentre","brand:wikidata":"Q5641894","brand:wikipedia":"en:Halfords Autocentre",name:"Halfords Autocentre",shop:"car_repair"}},"shop/car_repair|Jiffy Lube":{countryCodes:["ca","us"],tags:{brand:"Jiffy Lube","brand:wikidata":"Q6192247","brand:wikipedia":"en:Jiffy Lube",name:"Jiffy Lube",shop:"car_repair"}},"shop/car_repair|Kwik Fit":{countryCodes:["gb","ie"],tags:{brand:"Kwik Fit","brand:wikidata":"Q958053","brand:wikipedia":"en:Kwik Fit",name:"Kwik Fit",shop:"car_repair"}},"shop/car_repair|Meineke":{countryCodes:["us"],tags:{brand:"Meineke","brand:wikidata":"Q6810159","brand:wikipedia":"en:Meineke Car Care Centers",name:"Meineke",shop:"car_repair"}},"shop/car_repair|Mekonomen":{countryCodes:["dk","no","se"],tags:{brand:"Mekonomen","brand:wikidata":"Q10580079","brand:wikipedia":"sv:Mekonomen",name:"Mekonomen",shop:"car_repair"}},"shop/car_repair|Midas":{tags:{brand:"Midas","brand:wikidata":"Q3312613","brand:wikipedia":"en:Midas (automotive service)",name:"Midas",shop:"car_repair"}},"shop/car_repair|Monro Muffler Brake":{countryCodes:["us"],matchNames:["monro"],tags:{brand:"Monro Muffler Brake","brand:wikidata":"Q6902090","brand:wikipedia":"en:Monro Muffler Brake",name:"Monro Muffler Brake",shop:"car_repair"}},"shop/car_repair|Mr. Lube":{countryCodes:["ca"],tags:{brand:"Mr. Lube","brand:wikidata":"Q17104067","brand:wikipedia":"en:Mr. Lube",name:"Mr. Lube",shop:"car_repair"}},"shop/car_repair|Norauto":{countryCodes:["ar","es","fr","hu","it","pl","pt","ro"],tags:{brand:"Norauto","brand:wikidata":"Q3317698","brand:wikipedia":"en:Mobivia Groupe",name:"Norauto",shop:"car_repair"}},"shop/car_repair|Pep Boys":{countryCodes:["pr","us"],tags:{brand:"Pep Boys","brand:wikidata":"Q3375007","brand:wikipedia":"en:Pep Boys",name:"Pep Boys",shop:"car_repair"}},"shop/car_repair|Peugeot":{nomatch:["shop/car|Peugeot"],tags:{brand:"Peugeot","brand:wikidata":"Q6742","brand:wikipedia":"en:Peugeot",name:"Peugeot",shop:"car_repair"}},"shop/car_repair|Pit Stop":{tags:{brand:"Pit Stop",name:"Pit Stop",shop:"car_repair"}},"shop/car_repair|Point S":{tags:{brand:"Point S","brand:wikidata":"Q3393358","brand:wikipedia":"fr:Point S",name:"Point S",shop:"car_repair"}},"shop/car_repair|Renault":{matchNames:["garage renault"],nomatch:["shop/car|Renault"],tags:{brand:"Renault","brand:wikidata":"Q6686","brand:wikipedia":"en:Renault",name:"Renault",shop:"car_repair"}},"shop/car_repair|Roady":{countryCodes:["fr"],tags:{brand:"Roady","brand:wikidata":"Q3434112","brand:wikipedia":"en:Roady (Mousquetaires)",name:"Roady",shop:"car_repair"}},"shop/car_repair|Safelite AutoGlass":{countryCodes:["us"],tags:{brand:"Safelite AutoGlass","brand:wikidata":"Q28797369","brand:wikipedia":"en:Safelite",name:"Safelite AutoGlass",operator:"Belron","operator:wikidata":"Q785614","operator:wikipedia":"en:Belron",shop:"car_repair"}},"shop/car_repair|Sears Auto Center":{countryCodes:["mx","us"],tags:{brand:"Sears Auto Center",name:"Sears Auto Center",shop:"car_repair"}},"shop/car_repair|Speedy":{countryCodes:["fr"],nomatch:["shop/car_repair|Speedy Auto Service"],tags:{brand:"Speedy","brand:wikidata":"Q3492969","brand:wikipedia":"fr:Speedy (entreprise)",name:"Speedy",shop:"car_repair"}},"shop/car_repair|Speedy Auto Service":{countryCodes:["ca"],nomatch:["shop/car_repair|Speedy"],tags:{brand:"Speedy Auto Service","brand:wikidata":"Q22318193",name:"Speedy Auto Service",shop:"car_repair"}},"shop/car_repair|Taller Mecanico":{tags:{brand:"Taller Mecanico",name:"Taller Mecanico",shop:"car_repair"}},"shop/car_repair|Toyota":{nomatch:["shop/car|Toyota"],tags:{brand:"Toyota","brand:wikidata":"Q53268","brand:wikipedia":"en:Toyota",name:"Toyota",shop:"car_repair"}},"shop/car_repair|Tuffy Tire & Auto Service":{countryCodes:["us"],matchNames:["tuffy tire and auto service"],tags:{brand:"Tuffy Tire & Auto Service","brand:wikidata":"Q17125314","brand:wikipedia":"en:Tuffy Auto Service Centers",name:"Tuffy Tire & Auto Service",shop:"car_repair"}},"shop/car_repair|Valvoline":{countryCodes:["us"],matchNames:["valvoline instant oil change"],tags:{brand:"Valvoline","brand:wikidata":"Q7912852","brand:wikipedia":"en:Valvoline Instant Oil Change",name:"Valvoline",shop:"car_repair"}},"shop/car_repair|ÖAMTC":{countryCodes:["at"],tags:{brand:"ÖAMTC","brand:wikidata":"Q306057","brand:wikipedia":"de:Österreichischer Automobil-, Motorrad- und Touring Club",name:"ÖAMTC",shop:"car_repair"}},"shop/car_repair|СТО":{tags:{brand:"СТО",name:"СТО",shop:"car_repair"}},"shop/car|Audi":{tags:{brand:"Audi","brand:wikidata":"Q23317","brand:wikipedia":"en:Audi",name:"Audi",shop:"car"}},"shop/car|BMW":{tags:{brand:"BMW","brand:wikidata":"Q26678","brand:wikipedia":"en:BMW",name:"BMW",shop:"car"}},"shop/car|Chevrolet":{tags:{brand:"Chevrolet","brand:wikidata":"Q29570","brand:wikipedia":"en:Chevrolet",name:"Chevrolet",shop:"car"}},"shop/car|Citroën":{nomatch:["shop/car_repair|Citroën"],tags:{brand:"Citroën","brand:wikidata":"Q6746","brand:wikipedia":"fr:Citroën",name:"Citroën",shop:"car"}},"shop/car|Dacia":{tags:{brand:"Dacia","brand:wikidata":"Q27460","brand:wikipedia":"en:Automobile Dacia",name:"Dacia",shop:"car"}},"shop/car|Fiat":{tags:{brand:"Fiat","brand:wikidata":"Q27597","brand:wikipedia":"en:Fiat Automobiles",name:"Fiat",shop:"car"}},"shop/car|Ford":{nomatch:["shop/car_repair|Ford"],tags:{brand:"Ford","brand:wikidata":"Q44294","brand:wikipedia":"en:Ford Motor Company",name:"Ford",shop:"car"}},"shop/car|Honda":{matchNames:["honda cars"],nomatch:["shop/motorcycle|Honda"],tags:{brand:"Honda","brand:wikidata":"Q9584","brand:wikipedia":"en:Honda",name:"Honda",shop:"car"}},"shop/car|Hyundai":{tags:{brand:"Hyundai","brand:wikidata":"Q55931","brand:wikipedia":"en:Hyundai Motor Company",name:"Hyundai",shop:"car"}},"shop/car|Isuzu":{tags:{brand:"Isuzu","brand:wikidata":"Q29803","brand:wikipedia":"en:Isuzu Motors",name:"Isuzu",shop:"car"}},"shop/car|Kia":{matchNames:["kia motors"],tags:{brand:"Kia","brand:wikidata":"Q35349","brand:wikipedia":"en:Kia Motors",name:"Kia",shop:"car"}},"shop/car|Land Rover":{tags:{brand:"Land Rover","brand:wikidata":"Q35907","brand:wikipedia":"en:Land Rover",name:"Land Rover",shop:"car"}},"shop/car|Lexus":{tags:{brand:"Lexus","brand:wikidata":"Q35919","brand:wikipedia":"en:Lexus",name:"Lexus",shop:"car"}},"shop/car|Mazda":{tags:{brand:"Mazda","brand:wikidata":"Q35996","brand:wikipedia":"en:Mazda",name:"Mazda",shop:"car"}},"shop/car|Mercedes-Benz":{matchNames:["mercedes"],tags:{brand:"Mercedes-Benz","brand:wikidata":"Q36008","brand:wikipedia":"en:Mercedes-Benz",name:"Mercedes-Benz",shop:"car"}},"shop/car|Mitsubishi":{matchNames:["mitsubishi motors"],tags:{brand:"Mitsubishi","brand:wikidata":"Q36033","brand:wikipedia":"en:Mitsubishi Motors",name:"Mitsubishi",shop:"car"}},"shop/car|Netz":{countryCodes:["jp"],tags:{brand:"Netz","brand:wikidata":"Q11325416","brand:wikipedia":"ja:ネッツ店",name:"Netz",shop:"car"}},"shop/car|Nissan":{tags:{brand:"Nissan","brand:wikidata":"Q20165","brand:wikipedia":"ja:日産自動車",name:"Nissan",shop:"car"}},"shop/car|Opel":{tags:{brand:"Opel","brand:wikidata":"Q40966","brand:wikipedia":"en:Opel",name:"Opel",shop:"car"}},"shop/car|Peugeot":{nomatch:["shop/car_repair|Peugeot"],tags:{brand:"Peugeot","brand:wikidata":"Q6742","brand:wikipedia":"en:Peugeot",name:"Peugeot",shop:"car"}},"shop/car|Porsche":{tags:{brand:"Porsche","brand:wikidata":"Q40993","brand:wikipedia":"en:Porsche",name:"Porsche",shop:"car"}},"shop/car|Renault":{nomatch:["shop/car_repair|Renault"],tags:{brand:"Renault","brand:wikidata":"Q6686","brand:wikipedia":"en:Renault",name:"Renault",shop:"car"}},"shop/car|Seat":{tags:{brand:"Seat","brand:wikidata":"Q188217","brand:wikipedia":"en:SEAT",name:"Seat",shop:"car"}},"shop/car|Skoda":{tags:{brand:"Skoda","brand:wikidata":"Q29637","brand:wikipedia":"en:Škoda Auto",name:"Skoda",shop:"car"}},"shop/car|Subaru":{tags:{brand:"Subaru","brand:wikidata":"Q172741","brand:wikipedia":"en:Subaru",name:"Subaru",shop:"car"}},"shop/car|Suzuki":{nomatch:["shop/motorcycle|Suzuki"],tags:{brand:"Suzuki","brand:wikidata":"Q181642","brand:wikipedia":"en:Suzuki",name:"Suzuki",shop:"car"}},"shop/car|Tesla":{tags:{brand:"Tesla","brand:wikidata":"Q478214","brand:wikipedia":"en:Tesla, Inc.",name:"Tesla",shop:"car"}},"shop/car|Toyota":{nomatch:["shop/car_repair|Toyota"],tags:{brand:"Toyota","brand:wikidata":"Q53268","brand:wikipedia":"en:Toyota",name:"Toyota",shop:"car"}},"shop/car|Volkswagen":{matchNames:["vw"],tags:{brand:"Volkswagen","brand:wikidata":"Q246","brand:wikipedia":"en:Volkswagen",name:"Volkswagen",shop:"car"}},"shop/car|Volvo":{tags:{brand:"Volvo","brand:wikidata":"Q215293","brand:wikipedia":"en:Volvo Cars",name:"Volvo",shop:"car"}},"shop/car|ダイハツ":{countryCodes:["jp"],tags:{brand:"ダイハツ","brand:ja":"ダイハツ",name:"ダイハツ","name:ja":"ダイハツ",shop:"car"}},"shop/car|ホンダ":{countryCodes:["jp"],tags:{brand:"ホンダ","brand:en":"Honda","brand:ja":"ホンダ","brand:wikidata":"Q9584","brand:wikipedia":"ja:本田技研工業",name:"ホンダ","name:en":"Honda","name:ja":"ホンダ",shop:"car"}},"shop/carpet|Carpetright":{countryCodes:["be","gb","ie","nl"],tags:{brand:"Carpetright","brand:wikidata":"Q5045782","brand:wikipedia":"en:Carpetright",name:"Carpetright",shop:"carpet"}},"shop/catalogue|Argos":{countryCodes:["gb","ie"],matchTags:["shop/department_store"],tags:{brand:"Argos","brand:wikidata":"Q4789707","brand:wikipedia":"en:Argos (retailer)",name:"Argos",shop:"catalogue"}},"shop/charity|Age UK":{countryCodes:["gb"],tags:{brand:"Age UK","brand:wikidata":"Q4691850","brand:wikipedia":"en:Age UK",name:"Age UK",shop:"charity"}},"shop/charity|Barnardo's":{countryCodes:["gb","ie"],tags:{brand:"Barnardo's","brand:wikidata":"Q2884670","brand:wikipedia":"en:Barnardo's",name:"Barnardo's",shop:"charity"}},"shop/charity|British Heart Foundation":{countryCodes:["gb"],tags:{brand:"British Heart Foundation","brand:wikidata":"Q4970039","brand:wikipedia":"en:British Heart Foundation",name:"British Heart Foundation",shop:"charity"}},"shop/charity|British Red Cross":{countryCodes:["gb","gg","im"],tags:{brand:"British Red Cross","brand:wikidata":"Q4970966","brand:wikipedia":"en:British Red Cross",name:"British Red Cross",shop:"charity"}},"shop/charity|Cancer Research UK":{countryCodes:["gb","gg"],tags:{brand:"Cancer Research UK","brand:wikidata":"Q326079","brand:wikipedia":"en:Cancer Research UK",name:"Cancer Research UK",shop:"charity"}},"shop/charity|Goodwill":{countryCodes:["ca","us"],matchTags:["shop/clothes","shop/second_hand"],tags:{brand:"Goodwill","brand:wikidata":"Q5583655","brand:wikipedia":"en:Goodwill Industries",name:"Goodwill",shop:"charity"}},"shop/charity|Mind":{countryCodes:["gb"],tags:{brand:"Mind","brand:wikidata":"Q3314763","brand:wikipedia":"en:Mind (charity)",name:"Mind",shop:"charity"}},"shop/charity|Myrorna":{countryCodes:["se"],matchTags:["shop/clothes","shop/second_hand"],tags:{brand:"Myrorna","brand:wikidata":"Q10592609","brand:wikipedia":"sv:Myrorna",name:"Myrorna",shop:"charity"}},"shop/charity|Oxfam":{countryCodes:["be","de","gb","ie","im"],tags:{brand:"Oxfam","brand:wikidata":"Q267941","brand:wikipedia":"en:Oxfam",name:"Oxfam",shop:"charity"}},"shop/charity|RSPCA":{countryCodes:["au","gb"],tags:{brand:"RSPCA","brand:wikidata":"Q584819","brand:wikipedia":"en:Royal Society for the Prevention of Cruelty to Animals",name:"RSPCA",shop:"charity"}},"shop/charity|Scope":{countryCodes:["gb"],tags:{brand:"Scope","brand:wikidata":"Q7434435","brand:wikipedia":"en:Scope (charity)",name:"Scope",shop:"charity"}},"shop/charity|Sue Ryder":{countryCodes:["gb","ie"],tags:{brand:"Sue Ryder","brand:wikidata":"Q7634271","brand:wikipedia":"en:Sue Ryder (charity)",name:"Sue Ryder",shop:"charity"}},"shop/charity|The Salvation Army":{countryCodes:["au","ca","gb","us"],matchNames:["salvation army"],tags:{brand:"The Salvation Army","brand:wikidata":"Q188307","brand:wikipedia":"en:The Salvation Army",name:"The Salvation Army",shop:"charity"}},"shop/chemist|101 Drogerie":{tags:{brand:"101 Drogerie",name:"101 Drogerie",shop:"chemist"}},"shop/chemist|7 Дней":{countryCodes:["ru"],tags:{brand:"7 Дней",name:"7 Дней",shop:"chemist"}},"shop/chemist|Acqua & Sapone":{countryCodes:["it"],tags:{brand:"Acqua & Sapone",name:"Acqua & Sapone",shop:"chemist"}},"shop/chemist|Bipa":{countryCodes:["at","hr"],tags:{brand:"Bipa","brand:wikidata":"Q864933","brand:wikipedia":"de:Bipa",name:"Bipa",shop:"chemist"}},"shop/chemist|Boots":{nomatch:["amenity/pharmacy|Boots"],tags:{brand:"Boots",name:"Boots",shop:"chemist"}},"shop/chemist|Budnikowsky":{countryCodes:["de"],tags:{brand:"Budnikowsky","brand:wikidata":"Q1001516","brand:wikipedia":"de:Budnikowsky",name:"Budnikowsky",shop:"chemist"}},"shop/chemist|CVS":{nomatch:["amenity/pharmacy|CVS"],tags:{brand:"CVS",name:"CVS",shop:"chemist"}},"shop/chemist|Drogeria Natura":{countryCodes:["pl"],tags:{brand:"Drogeria Natura","brand:wikidata":"Q9212032","brand:wikipedia":"pl:Drogerie Natura",name:"Drogeria Natura",shop:"chemist"}},"shop/chemist|Etos":{tags:{brand:"Etos","brand:wikidata":"Q2609459","brand:wikipedia":"en:Etos",name:"Etos",shop:"chemist"}},"shop/chemist|Hebe":{tags:{brand:"Hebe",name:"Hebe",shop:"chemist"}},"shop/chemist|Holland & Barrett":{tags:{brand:"Holland & Barrett",name:"Holland & Barrett",shop:"chemist"}},"shop/chemist|Kruidvat":{tags:{brand:"Kruidvat","brand:wikidata":"Q2226366","brand:wikipedia":"en:Kruidvat",name:"Kruidvat",shop:"chemist"}},"shop/chemist|Matas":{countryCodes:["dk"],tags:{brand:"Matas","brand:wikidata":"Q6786143","brand:wikipedia":"en:Matas (drug store)",name:"Matas",shop:"chemist"}},"shop/chemist|Müller":{tags:{brand:"Müller","brand:wikidata":"Q1958759","brand:wikipedia":"en:Müller (German trade company)",name:"Müller",shop:"chemist"}},"shop/chemist|Rite Aid":{nomatch:["amenity/pharmacy|Rite Aid"],tags:{brand:"Rite Aid",name:"Rite Aid",shop:"chemist"}},"shop/chemist|Rossmann":{tags:{brand:"Rossmann","brand:wikidata":"Q316004","brand:wikipedia":"de:Dirk Rossmann GmbH",name:"Rossmann",shop:"chemist"}},"shop/chemist|Superdrug":{nomatch:["amenity/pharmacy|Superdrug"],tags:{brand:"Superdrug",name:"Superdrug",shop:"chemist"}},"shop/chemist|Teta":{tags:{brand:"Teta","brand:wikidata":"Q20860823","brand:wikipedia":"cs:Teta drogerie",name:"Teta",shop:"chemist"}},"shop/chemist|Tigotà":{tags:{brand:"Tigotà",name:"Tigotà",shop:"chemist"}},"shop/chemist|Trekpleister":{countryCodes:["nl"],tags:{brand:"Trekpleister","brand:wikidata":"Q2551576","brand:wikipedia":"nl:Trekpleister (drogisterij)",name:"Trekpleister",shop:"chemist"}},"shop/chemist|Walgreens":{countryCodes:["us"],matchNames:["walgreens pharmacy"],tags:{brand:"Walgreens","brand:wikidata":"Q1591889","brand:wikipedia":"en:Walgreens",name:"Walgreens",shop:"chemist"}},"shop/chemist|Watsons":{matchTags:["shop/cosmetics"],nomatch:["amenity/pharmacy|Watsons"],tags:{brand:"Watsons","brand:wikidata":"Q7974785","brand:wikipedia":"en:Watsons",name:"Watsons",operator:"A.S. Watson Group","operator:wikidata":"Q4647401","operator:wikipedia":"en:A.S. Watson Group",shop:"chemist"}},"shop/chemist|dm":{countryCodes:["at","ba","bg","cz","de","hr","hu","it","mk","ro","rs","si","sk"],matchNames:["dm drogerie markt"],tags:{brand:"dm","brand:wikidata":"Q266572","brand:wikipedia":"en:Dm-drogerie markt",name:"dm",shop:"chemist"}},"shop/chemist|Бытовая химия":{tags:{brand:"Бытовая химия",name:"Бытовая химия",shop:"chemist"}},"shop/chemist|Мила":{tags:{brand:"Мила",name:"Мила",shop:"chemist"}},"shop/chemist|Новэкс":{tags:{brand:"Новэкс",name:"Новэкс",shop:"chemist"}},"shop/chemist|Остров чистоты":{tags:{brand:"Остров чистоты",name:"Остров чистоты",shop:"chemist"}},"shop/chemist|Рубль Бум":{countryCodes:["ru"],tags:{brand:"Рубль Бум",name:"Рубль Бум",shop:"chemist"}},"shop/chemist|Улыбка радуги":{tags:{brand:"Улыбка радуги",name:"Улыбка радуги",shop:"chemist"}},"shop/chemist|スギ薬局":{countryCodes:["jp"],nomatch:["amenity/pharmacy|スギ薬局"],tags:{brand:"スギ薬局","brand:ja":"スギ薬局",name:"スギ薬局","name:ja":"スギ薬局",shop:"chemist"}},"shop/chemist|丁丁藥局":{nomatch:["amenity/pharmacy|丁丁藥局"],tags:{brand:"丁丁藥局",name:"丁丁藥局",shop:"chemist"}},"shop/chemist|屈臣氏":{nomatch:["amenity/pharmacy|屈臣氏"],tags:{brand:"屈臣氏",name:"屈臣氏",shop:"chemist"}},"shop/chemist|康是美":{countryCodes:["tw"],tags:{brand:"康是美","brand:wikidata":"Q11063876","brand:wikipedia":"zh:康是美藥妝店",name:"康是美",shop:"chemist"}},"shop/chocolate|Cacau Show":{countryCodes:["br"],tags:{brand:"Cacau Show","brand:wikidata":"Q9671713","brand:wikipedia":"en:Cacau Show",name:"Cacau Show",shop:"chocolate"}},"shop/chocolate|Jeff de Bruges":{countryCodes:["cz","fr","gb"],tags:{brand:"Jeff de Bruges",name:"Jeff de Bruges",shop:"chocolate"}},"shop/chocolate|Leonidas":{countryCodes:["be","cz","fr","gb","gr","nl"],tags:{brand:"Leonidas","brand:wikidata":"Q80335","brand:wikipedia":"en:Leonidas (chocolate maker)",name:"Leonidas",shop:"chocolate"}},"shop/clothes|AOKI":{countryCodes:["jp"],tags:{brand:"AOKI","brand:wikidata":"Q11189480","brand:wikipedia":"ja:AOKIホールディングス",clothes:"men",name:"AOKI","name:ja":"アオキ",operator:"株式会社AOKIホールディングス","operator:en":"AOKI Holdings Inc.",shop:"clothes"}},"shop/clothes|AWG":{countryCodes:["bg","de"],tags:{brand:"AWG",name:"AWG",shop:"clothes"}},"shop/clothes|Abercrombie & Fitch":{tags:{brand:"Abercrombie & Fitch","brand:wikidata":"Q319344","brand:wikipedia":"en:Abercrombie & Fitch",clothes:"men;women",name:"Abercrombie & Fitch",shop:"clothes"}},"shop/clothes|Accessorize":{tags:{brand:"Accessorize","brand:wikidata":"Q3069980","brand:wikipedia":"en:Monsoon Accessorize",name:"Accessorize",shop:"clothes"}},"shop/clothes|Ackermans":{tags:{brand:"Ackermans","brand:wikidata":"Q4674255","brand:wikipedia":"en:Ackermans",name:"Ackermans",shop:"clothes"}},"shop/clothes|Adler":{countryCodes:["at","de","lu"],tags:{brand:"Adler",name:"Adler",shop:"clothes"}},"shop/clothes|Aeropostale":{tags:{brand:"Aeropostale","brand:wikidata":"Q794565","brand:wikipedia":"en:Aéropostale (clothing)",clothes:"men;women",name:"Aeropostale",shop:"clothes"}},"shop/clothes|American Eagle Outfitters":{countryCodes:["ca","us"],tags:{brand:"American Eagle Outfitters","brand:wikidata":"Q2842931","brand:wikipedia":"en:American Eagle Outfitters",clothes:"men;women",name:"American Eagle Outfitters",shop:"clothes"}},"shop/clothes|Ann Taylor":{countryCodes:["ca","us"],tags:{brand:"Ann Taylor","brand:wikidata":"Q4766699","brand:wikipedia":"en:Ann Inc.",clothes:"women",name:"Ann Taylor",shop:"clothes"}},"shop/clothes|Anthropologie":{countryCodes:["ca","gb","us"],tags:{brand:"Anthropologie","brand:wikidata":"Q4773903","brand:wikipedia":"en:Anthropologie",clothes:"women",name:"Anthropologie",shop:"clothes"}},"shop/clothes|Ardene":{countryCodes:["ca","sn"],tags:{brand:"Ardene","brand:wikidata":"Q2860764","brand:wikipedia":"en:Ardene",name:"Ardene",shop:"clothes"}},"shop/clothes|Armand Thiery":{countryCodes:["be","fr"],tags:{brand:"Armand Thiery","brand:wikidata":"Q2861975","brand:wikipedia":"fr:Armand Thiery",name:"Armand Thiery",shop:"clothes"}},"shop/clothes|Armani Exchange":{countryCodes:["us"],tags:{brand:"Armani Exchange","brand:wikidata":"Q56045740",clothes:"men;women",name:"Armani Exchange","operator:wikidata":"Q2861975","operator:wikipedia":"en:Armani",shop:"clothes"}},"shop/clothes|Banana Republic":{countryCodes:["ca","gb","us"],tags:{brand:"Banana Republic","brand:wikidata":"Q806085","brand:wikipedia":"en:Banana Republic",clothes:"men;women",name:"Banana Republic",shop:"clothes"}},"shop/clothes|Bench":{tags:{brand:"Bench",name:"Bench",shop:"clothes"}},"shop/clothes|Bershka":{tags:{brand:"Bershka","brand:wikidata":"Q827258","brand:wikipedia":"en:Bershka",name:"Bershka",shop:"clothes"}},"shop/clothes|Betty Barclay":{tags:{brand:"Betty Barclay","brand:wikidata":"Q850250","brand:wikipedia":"de:Betty Barclay",name:"Betty Barclay",shop:"clothes"}},"shop/clothes|Big Star":{tags:{brand:"Big Star","brand:wikidata":"Q9171569","brand:wikipedia":"pl:Big Star Limited",name:"Big Star",shop:"clothes"}},"shop/clothes|Bonita":{tags:{brand:"Bonita","brand:wikidata":"Q892598","brand:wikipedia":"de:Bonita (Unternehmen)",name:"Bonita",shop:"clothes"}},"shop/clothes|Bonobo":{countryCodes:["fr"],nomatch:["shop/clothes|Bonobos"],tags:{brand:"Bonobo","brand:wikidata":"Q63682093",clothes:"men;women",name:"Bonobo",shop:"clothes"}},"shop/clothes|Bonobos":{countryCodes:["us"],nomatch:["shop/clothes|Bonobo"],tags:{brand:"Bonobos","brand:wikidata":"Q4942546","brand:wikipedia":"en:Bonobos (apparel)",clothes:"men",name:"Bonobos",shop:"clothes"}},"shop/clothes|Brice":{countryCodes:["be","fr"],tags:{brand:"Brice","brand:wikidata":"Q2925067","brand:wikipedia":"fr:Brice (enseigne)",name:"Brice",shop:"clothes"}},"shop/clothes|Bristol":{countryCodes:["nl"],tags:{brand:"Bristol",name:"Bristol",shop:"clothes"}},"shop/clothes|Brooks Brothers":{tags:{brand:"Brooks Brothers","brand:wikidata":"Q929722","brand:wikipedia":"en:Brooks Brothers",name:"Brooks Brothers",shop:"clothes"}},"shop/clothes|Buckle":{countryCodes:["np","us"],tags:{brand:"Buckle",name:"Buckle",shop:"clothes"}},"shop/clothes|Buffalo Exchange":{countryCodes:["us"],matchTags:["shop/second_hand"],tags:{brand:"Buffalo Exchange","brand:wikidata":"Q4985721","brand:wikipedia":"en:Buffalo Exchange",name:"Buffalo Exchange",second_hand:"only",shop:"clothes"}},"shop/clothes|Burberry":{tags:{brand:"Burberry","brand:wikidata":"Q390107","brand:wikipedia":"en:Burberry",name:"Burberry",shop:"clothes"}},"shop/clothes|Burlington Coat Factory":{countryCodes:["us"],tags:{brand:"Burlington Coat Factory","brand:wikidata":"Q4999220","brand:wikipedia":"en:Burlington (department store)",name:"Burlington Coat Factory",shop:"clothes"}},"shop/clothes|Burton":{countryCodes:["fr","gb"],tags:{brand:"Burton","brand:wikidata":"Q5000795","brand:wikipedia":"en:Burton (retailer)",name:"Burton",shop:"clothes"}},"shop/clothes|C&A":{tags:{brand:"C&A","brand:wikidata":"Q701338","brand:wikipedia":"en:C&A",name:"C&A",shop:"clothes"}},"shop/clothes|COS":{tags:{brand:"COS","brand:wikidata":"Q60772401","brand:wikipedia":"en:COS (clothing)",name:"COS",shop:"clothes"}},"shop/clothes|Cache Cache":{countryCodes:["fr","it","lu"],tags:{brand:"Cache Cache","brand:wikidata":"Q63064086",name:"Cache Cache",shop:"clothes"}},"shop/clothes|Calvin Klein":{tags:{brand:"Calvin Klein","brand:wikidata":"Q1068628","brand:wikipedia":"en:Calvin Klein (company)",name:"Calvin Klein",shop:"clothes"}},"shop/clothes|Calzedonia":{tags:{brand:"Calzedonia","brand:wikidata":"Q1027874","brand:wikipedia":"en:Calzedonia",name:"Calzedonia",shop:"clothes"}},"shop/clothes|Camaïeu":{countryCodes:["be","cz","fr","it","pl"],tags:{brand:"Camaïeu","brand:wikidata":"Q2934647","brand:wikipedia":"en:Camaïeu (company)",name:"Camaïeu",shop:"clothes"}},"shop/clothes|Camp David":{countryCodes:["at","de","ee","sk"],tags:{brand:"Camp David","brand:wikidata":"Q50540636","brand:wikipedia":"en:Camp David (fashion)",name:"Camp David",shop:"clothes"}},"shop/clothes|Carhartt":{countryCodes:["gb","us"],tags:{brand:"Carhartt","brand:wikidata":"Q527877","brand:wikipedia":"en:Carhartt",name:"Carhartt",shop:"clothes"}},"shop/clothes|Carlings":{countryCodes:["fi","no","se"],tags:{brand:"Carlings",name:"Carlings",shop:"clothes"}},"shop/clothes|Caroll":{countryCodes:["ch","fr"],tags:{brand:"Caroll","brand:wikidata":"Q63063871",name:"Caroll",shop:"clothes"}},"shop/clothes|Carter's":{tags:{brand:"Carter's","brand:wikidata":"Q5047083","brand:wikipedia":"en:Carter's",name:"Carter's",shop:"clothes"}},"shop/clothes|Cato":{countryCodes:["us"],tags:{brand:"Cato","brand:wikidata":"Q16956136","brand:wikipedia":"en:Cato Corporation",name:"Cato",shop:"clothes"}},"shop/clothes|Cecil":{countryCodes:["at","de","nl"],tags:{brand:"Cecil",name:"Cecil",shop:"clothes"}},"shop/clothes|Celio":{tags:{brand:"Celio","brand:wikidata":"Q2672003","brand:wikipedia":"en:Celio (retailer)",name:"Celio",shop:"clothes"}},"shop/clothes|Charles Vögele":{countryCodes:["at","be","ch","de","hu","nl"],matchNames:["vögele"],tags:{brand:"Charles Vögele","brand:wikidata":"Q1066326","brand:wikipedia":"de:Charles Vögele Holding",name:"Charles Vögele",shop:"clothes"}},"shop/clothes|Charlotte Russe":{countryCodes:["us"],tags:{brand:"Charlotte Russe","brand:wikidata":"Q5086126","brand:wikipedia":"en:Charlotte Russe (clothing retailer)",name:"Charlotte Russe",shop:"clothes"}},"shop/clothes|Chico's":{countryCodes:["ar","us"],tags:{brand:"Chico's","brand:wikidata":"Q5096393","brand:wikipedia":"en:Chico's (clothing retailer)",name:"Chico's",shop:"clothes"}},"shop/clothes|Christopher & Banks":{countryCodes:["us"],tags:{brand:"Christopher & Banks","brand:wikidata":"Q5111816","brand:wikipedia":"en:Christopher & Banks",name:"Christopher & Banks",shop:"clothes"}},"shop/clothes|Club Monaco":{countryCodes:["ca","gb","us"],tags:{brand:"Club Monaco","brand:wikidata":"Q2979949","brand:wikipedia":"en:Club Monaco",name:"Club Monaco",shop:"clothes"}},"shop/clothes|Colin's":{tags:{brand:"Colin's","brand:wikidata":"Q28729658",name:"Colin's",shop:"clothes"}},"shop/clothes|Colloseum":{countryCodes:["at","de"],tags:{brand:"Colloseum",name:"Colloseum",shop:"clothes"}},"shop/clothes|Columbia":{nomatch:["amenity/bank|Columbia Bank"],tags:{brand:"Columbia","brand:wikidata":"Q1112588","brand:wikipedia":"en:Columbia Sportswear",name:"Columbia",shop:"clothes"}},"shop/clothes|Cropp":{countryCodes:["cs","hu","pl","ro","ru","sk","ua"],tags:{brand:"Cropp","brand:wikidata":"Q9196793","brand:wikipedia":"pl:Cropp",name:"Cropp",shop:"clothes"}},"shop/clothes|Cubus":{countryCodes:["de","fi","lv","no","pl","se"],tags:{brand:"Cubus","brand:wikidata":"Q3439593","brand:wikipedia":"no:Cubus",name:"Cubus",shop:"clothes"}},"shop/clothes|DXL Men's Apparel":{countryCodes:["us"],tags:{brand:"DXL Men's Apparel","brand:wikidata":"Q61981830",clothes:"oversize;men",name:"DXL Men's Apparel","operator:wikidata":"Q5050852","operator:wikipedia":"en:Destination XL Group",shop:"clothes"}},"shop/clothes|Damart":{countryCodes:["be","fr","lu"],tags:{brand:"Damart","brand:wikidata":"Q3012602","brand:wikipedia":"en:Damart",name:"Damart",shop:"clothes"}},"shop/clothes|David's Bridal":{countryCodes:["ca","us"],tags:{brand:"David's Bridal","brand:wikidata":"Q5230388","brand:wikipedia":"en:David's Bridal",name:"David's Bridal",shop:"clothes"}},"shop/clothes|Desigual":{tags:{brand:"Desigual","brand:wikidata":"Q83750","brand:wikipedia":"en:Desigual",name:"Desigual",shop:"clothes"}},"shop/clothes|Devred":{countryCodes:["be","fr","ma"],tags:{brand:"Devred","brand:wikidata":"Q3025542","brand:wikipedia":"fr:Devred 1902",name:"Devred",shop:"clothes"}},"shop/clothes|Didi":{countryCodes:["be","nl"],tags:{brand:"Didi",name:"Didi",shop:"clothes"}},"shop/clothes|Diesel":{tags:{brand:"Diesel","brand:wikidata":"Q158285","brand:wikipedia":"en:Diesel (brand)",name:"Diesel",shop:"clothes"}},"shop/clothes|Diverse":{countryCodes:["pl"],tags:{brand:"Diverse","brand:wikidata":"Q11694298","brand:wikipedia":"pl:Diverse",name:"Diverse",shop:"clothes"}},"shop/clothes|Dorothy Perkins":{countryCodes:["gb","gg","ie","im"],tags:{brand:"Dorothy Perkins","brand:wikidata":"Q5298588","brand:wikipedia":"en:Dorothy Perkins",name:"Dorothy Perkins",shop:"clothes"}},"shop/clothes|Dress Barn":{tags:{brand:"Dress Barn","brand:wikidata":"Q5307031","brand:wikipedia":"en:Ascena Retail Group",name:"Dress Barn",shop:"clothes"}},"shop/clothes|Dressmann":{countryCodes:["at","fi","no","se"],tags:{brand:"Dressmann","brand:wikidata":"Q3357081","brand:wikipedia":"en:Dressmann",name:"Dressmann",shop:"clothes"}},"shop/clothes|Eddie Bauer":{countryCodes:["ca","jp","us"],tags:{brand:"Eddie Bauer","brand:wikidata":"Q842174","brand:wikipedia":"en:Eddie Bauer",name:"Eddie Bauer",shop:"clothes"}},"shop/clothes|Edgars":{tags:{brand:"Edgars",name:"Edgars",operator:"Edcon","operator:wikidata":"Q5335743","operator:wikipedia":"en:Edcon",shop:"clothes"}},"shop/clothes|Engbers":{countryCodes:["at","de"],tags:{brand:"Engbers","brand:wikidata":"Q1290088","brand:wikipedia":"de:Engbers",name:"Engbers",shop:"clothes"}},"shop/clothes|Ernsting's family":{countryCodes:["at","de"],tags:{brand:"Ernsting's family","brand:wikidata":"Q1361016","brand:wikipedia":"de:Ernsting’s family",name:"Ernsting's family",shop:"clothes"}},"shop/clothes|Esprit":{tags:{brand:"Esprit","brand:wikidata":"Q532746","brand:wikipedia":"en:Esprit Holdings",name:"Esprit",shop:"clothes"}},"shop/clothes|Etam":{tags:{brand:"Etam","brand:wikidata":"Q3059202","brand:wikipedia":"en:Etam Développement",name:"Etam",shop:"clothes"}},"shop/clothes|Express":{nomatch:["shop/convenience|Express"],tags:{brand:"Express","brand:wikidata":"Q1384784","brand:wikipedia":"en:Express, Inc.",name:"Express",shop:"clothes"}},"shop/clothes|Fat Face":{countryCodes:["gb","gg","ie"],tags:{brand:"Fat Face","brand:wikidata":"Q5437186","brand:wikipedia":"en:Fat Face",name:"Fat Face",shop:"clothes"}},"shop/clothes|Forever 21":{tags:{brand:"Forever 21","brand:wikidata":"Q1060537","brand:wikipedia":"en:Forever 21",name:"Forever 21",shop:"clothes"}},"shop/clothes|Free People":{countryCodes:["ca","us"],tags:{brand:"Free People","brand:wikidata":"Q5499945","brand:wikipedia":"en:Free People",name:"Free People",shop:"clothes"}},"shop/clothes|Fussl":{countryCodes:["at","de"],tags:{brand:"Fussl",name:"Fussl",shop:"clothes"}},"shop/clothes|GU":{countryCodes:["cl","jp","tw"],tags:{brand:"GU","brand:wikidata":"Q5512642","brand:wikipedia":"en:GU (retailer)",name:"GU",shop:"clothes"}},"shop/clothes|Gant":{tags:{brand:"Gant","brand:wikidata":"Q1493667","brand:wikipedia":"en:Gant (retailer)",name:"Gant",shop:"clothes"}},"shop/clothes|Gap":{tags:{brand:"Gap","brand:wikidata":"Q420822","brand:wikipedia":"en:Gap Inc.",name:"Gap",shop:"clothes"}},"shop/clothes|Gerry Weber":{tags:{brand:"Gerry Weber","brand:wikidata":"Q873447","brand:wikipedia":"en:Gerry Weber",name:"Gerry Weber",shop:"clothes"}},"shop/clothes|Gina Laura":{countryCodes:["at","de"],tags:{brand:"Gina Laura","brand:wikidata":"Q2700576","brand:wikipedia":"de:Gina Laura",name:"Gina Laura",shop:"clothes"}},"shop/clothes|Gloria Jeans":{countryCodes:["ru","ua"],tags:{brand:"Gloria Jeans","brand:wikidata":"Q4139985","brand:wikipedia":"ru:Глория Джинс",name:"Gloria Jeans",shop:"clothes"}},"shop/clothes|Gucci":{tags:{brand:"Gucci","brand:wikidata":"Q178516","brand:wikipedia":"en:Gucci",name:"Gucci",shop:"clothes"}},"shop/clothes|Guess":{tags:{brand:"Guess","brand:wikidata":"Q2470307","brand:wikipedia":"en:Guess (clothing)",name:"Guess",shop:"clothes"}},"shop/clothes|Gymboree":{countryCodes:["ca","us"],tags:{brand:"Gymboree","brand:wikidata":"Q4039771","brand:wikipedia":"en:Gymboree",name:"Gymboree",shop:"clothes"}},"shop/clothes|Gémo":{countryCodes:["be","ch","fr"],tags:{brand:"Gémo","brand:wikidata":"Q3122954","brand:wikipedia":"fr:Gémo",name:"Gémo",shop:"clothes"}},"shop/clothes|H&M":{tags:{brand:"H&M","brand:wikidata":"Q188326","brand:wikipedia":"en:H&M",name:"H&M",shop:"clothes"}},"shop/clothes|Hallhuber":{countryCodes:["at","ch","de","lu","nl"],tags:{brand:"Hallhuber","brand:wikidata":"Q1571714","brand:wikipedia":"de:Hallhuber (Bekleidungshaus)",name:"Hallhuber",shop:"clothes"}},"shop/clothes|Hanna Andersson":{countryCodes:["us"],tags:{brand:"Hanna Andersson","brand:wikidata":"Q17460802","brand:wikipedia":"en:Hanna Andersson",clothes:"baby;children;women",name:"Hanna Andersson",shop:"clothes"}},"shop/clothes|Hollister":{tags:{brand:"Hollister","brand:wikidata":"Q1257477","brand:wikipedia":"en:Hollister Co.",name:"Hollister",shop:"clothes"}},"shop/clothes|Hot Topic":{countryCodes:["ca","us"],tags:{brand:"Hot Topic","brand:wikidata":"Q9294032","brand:wikipedia":"en:Hot Topic",name:"Hot Topic",shop:"clothes"}},"shop/clothes|House":{tags:{brand:"House",name:"House",shop:"clothes"}},"shop/clothes|Hugo Boss":{matchNames:["boss"],tags:{brand:"Hugo Boss","brand:wikidata":"Q491627","brand:wikipedia":"en:Hugo Boss",name:"Hugo Boss",shop:"clothes"}},"shop/clothes|Humana":{tags:{brand:"Humana",name:"Humana",shop:"clothes"}},"shop/clothes|Hunkemöller":{tags:{brand:"Hunkemöller","brand:wikidata":"Q2604175","brand:wikipedia":"en:Hunkemöller",name:"Hunkemöller",shop:"clothes"}},"shop/clothes|Intimissimi":{tags:{brand:"Intimissimi","brand:wikidata":"Q305404","brand:wikipedia":"en:Intimissimi",clothes:"underwear",name:"Intimissimi",shop:"clothes"}},"shop/clothes|J. Crew":{countryCodes:["ca","gb","us"],tags:{brand:"J. Crew",name:"J. Crew",shop:"clothes"}},"shop/clothes|JBC":{countryCodes:["be","lu"],tags:{brand:"JBC","brand:wikidata":"Q2671470","brand:wikipedia":"nl:JBC",name:"JBC",shop:"clothes"}},"shop/clothes|Jack & Jones":{tags:{brand:"Jack & Jones","brand:wikidata":"Q6077665","brand:wikipedia":"en:Jack & Jones",name:"Jack & Jones",shop:"clothes"}},"shop/clothes|Jack Wills":{countryCodes:["ae","gb","hk","ie","kw","lb","mo","sg","us"],tags:{brand:"Jack Wills","brand:wikidata":"Q6115814","brand:wikipedia":"en:Jack Wills",name:"Jack Wills",shop:"clothes"}},"shop/clothes|Jeans Centre":{countryCodes:["nl"],tags:{brand:"Jeans Centre",name:"Jeans Centre",shop:"clothes"}},"shop/clothes|Jeans Fritz":{countryCodes:["de"],tags:{brand:"Jeans Fritz","brand:wikidata":"Q1686071","brand:wikipedia":"de:Jeans Fritz",name:"Jeans Fritz",shop:"clothes"}},"shop/clothes|Jennyfer":{countryCodes:["fr","it","lu"],tags:{brand:"Jennyfer","brand:wikidata":"Q3177174","brand:wikipedia":"fr:Jennyfer",name:"Jennyfer",shop:"clothes"}},"shop/clothes|Jet":{countryCodes:["za"],nomatch:["amenity/fuel|Jet"],tags:{brand:"Jet","brand:wikidata":"Q61995123",name:"Jet",shop:"clothes"}},"shop/clothes|Jigsaw":{countryCodes:["au","gb","us"],tags:{brand:"Jigsaw","brand:wikidata":"Q6192383","brand:wikipedia":"en:Jigsaw (clothing retailer)",name:"Jigsaw",shop:"clothes"}},"shop/clothes|Jos. A. Bank":{countryCodes:["us"],tags:{brand:"Jos. A. Bank","brand:wikidata":"Q6204078","brand:wikipedia":"en:JoS. A. Bank Clothiers",name:"Jos. A. Bank",shop:"clothes"}},"shop/clothes|Joules":{countryCodes:["gb","gg","ie"],tags:{brand:"Joules","brand:wikidata":"Q25351738","brand:wikipedia":"en:Joules (clothing)",name:"Joules",shop:"clothes"}},"shop/clothes|Jules":{countryCodes:["be","fr","it"],tags:{brand:"Jules",name:"Jules",shop:"clothes"}},"shop/clothes|Justice":{countryCodes:["ca","us"],tags:{brand:"Justice","brand:wikidata":"Q7857512","brand:wikipedia":"en:Tween Brands",name:"Justice",shop:"clothes"}},"shop/clothes|KappAhl":{countryCodes:["fi","no","pl","se"],tags:{brand:"KappAhl","brand:wikidata":"Q4349016","brand:wikipedia":"sv:Kappahl",name:"KappAhl",shop:"clothes"}},"shop/clothes|Kate Spade New York":{countryCodes:["ca","us"],matchNames:["kate spade","kate spade ny"],tags:{brand:"Kate Spade New York","brand:wikidata":"Q6375797","brand:wikipedia":"en:Kate Spade New York",name:"Kate Spade New York",shop:"clothes"}},"shop/clothes|KiK":{tags:{brand:"KiK","brand:wikidata":"Q883965","brand:wikipedia":"en:KiK",name:"KiK",shop:"clothes"}},"shop/clothes|Kiabi":{tags:{brand:"Kiabi","brand:wikidata":"Q3196299","brand:wikipedia":"fr:Kiabi",name:"Kiabi",shop:"clothes"}},"shop/clothes|LC Waikiki":{tags:{brand:"LC Waikiki","brand:wikidata":"Q3205965","brand:wikipedia":"fr:LC Waikiki",name:"LC Waikiki",shop:"clothes"}},"shop/clothes|La Halle":{countryCodes:["ch","fr"],tags:{brand:"La Halle",name:"La Halle",shop:"clothes"}},"shop/clothes|La Senza":{tags:{brand:"La Senza","brand:wikidata":"Q3212802","brand:wikipedia":"en:La Senza",name:"La Senza",shop:"clothes"}},"shop/clothes|Lacoste":{tags:{brand:"Lacoste","brand:wikidata":"Q309031","brand:wikipedia":"en:Lacoste",name:"Lacoste",shop:"clothes"}},"shop/clothes|Lane Bryant":{countryCodes:["us"],tags:{brand:"Lane Bryant","brand:wikidata":"Q6485350","brand:wikipedia":"en:Lane Bryant",clothes:"oversize;women",name:"Lane Bryant",shop:"clothes"}},"shop/clothes|Levi's":{tags:{brand:"Levi's","brand:wikidata":"Q127962","brand:wikipedia":"en:Levi Strauss & Co.",clothes:"denim;men;women",name:"Levi's",shop:"clothes"}},"shop/clothes|Lids":{countryCodes:["ca","us"],tags:{brand:"Lids","brand:wikidata":"Q19841609","brand:wikipedia":"en:Lids (store)",clothes:"hats",name:"Lids",shop:"clothes"}},"shop/clothes|Lindex":{countryCodes:["cz","ee","fi","no","se","sk"],tags:{brand:"Lindex","brand:wikidata":"Q1786717","brand:wikipedia":"en:Lindex",name:"Lindex",shop:"clothes"}},"shop/clothes|Loft":{tags:{brand:"Loft","brand:wikidata":"Q62075137",clothes:"women",name:"Loft",operator:"Ann Inc.","operator:wikidata":"Q4766699","operator:wikipedia":"en:Ann Inc.",shop:"clothes"}},"shop/clothes|Louis Vuitton":{tags:{brand:"Louis Vuitton","brand:wikidata":"Q191485","brand:wikipedia":"en:Louis Vuitton",name:"Louis Vuitton",shop:"clothes"}},"shop/clothes|Lululemon":{countryCodes:["au","ca","us"],tags:{brand:"Lululemon",name:"Lululemon",shop:"clothes"}},"shop/clothes|M&Co":{countryCodes:["gb"],tags:{brand:"M&Co","brand:wikidata":"Q6711808","brand:wikipedia":"en:M&Co.",name:"M&Co",shop:"clothes"}},"shop/clothes|MS Mode":{countryCodes:["be","de","fr","lu","nl"],tags:{brand:"MS Mode",name:"MS Mode",shop:"clothes"}},"shop/clothes|Mango":{tags:{brand:"Mango","brand:wikidata":"Q136503","brand:wikipedia":"en:Mango (retailer)",name:"Mango",shop:"clothes"}},"shop/clothes|Marc O'Polo":{tags:{brand:"Marc O'Polo","brand:wikidata":"Q1892752","brand:wikipedia":"en:Marc O'Polo",name:"Marc O'Polo",shop:"clothes"}},"shop/clothes|Mark Formelle":{countryCodes:["by","kz","ru"],tags:{brand:"Mark Formelle",name:"Mark Formelle",shop:"clothes"}},"shop/clothes|Mark's":{countryCodes:["ca"],tags:{brand:"Mark's","brand:wikidata":"Q6766373","brand:wikipedia":"en:Mark's",name:"Mark's",shop:"clothes"}},"shop/clothes|Marks & Spencer":{tags:{brand:"Marks & Spencer","brand:wikidata":"Q714491","brand:wikipedia":"en:Marks & Spencer",name:"Marks & Spencer",shop:"clothes"}},"shop/clothes|Massimo Dutti":{tags:{brand:"Massimo Dutti","brand:wikidata":"Q788231","brand:wikipedia":"en:Massimo Dutti",name:"Massimo Dutti",shop:"clothes"}},"shop/clothes|Matalan":{countryCodes:["ae","gb"],tags:{brand:"Matalan","brand:wikidata":"Q12061509","brand:wikipedia":"en:Matalan",name:"Matalan",shop:"clothes"}},"shop/clothes|Maurices":{countryCodes:["ca","fr","us"],tags:{brand:"Maurices","brand:wikidata":"Q6793571","brand:wikipedia":"en:Maurices",name:"Maurices",shop:"clothes"}},"shop/clothes|Max Mara":{tags:{brand:"Max Mara","brand:wikidata":"Q1151774","brand:wikipedia":"en:Max Mara",name:"Max Mara",shop:"clothes"}},"shop/clothes|Men's Wearhouse":{matchNames:["mens warehouse"],tags:{brand:"Men's Wearhouse","brand:wikidata":"Q57405513",clothes:"suits",name:"Men's Wearhouse",shop:"clothes"}},"shop/clothes|Mexx":{tags:{brand:"Mexx","brand:wikidata":"Q1837290","brand:wikipedia":"en:Mexx",name:"Mexx",shop:"clothes"}},"shop/clothes|Michael Kors":{tags:{brand:"Michael Kors","brand:wikidata":"Q19572998","brand:wikipedia":"en:Capri Holdings",name:"Michael Kors",shop:"clothes"}},"shop/clothes|Miller & Monroe":{countryCodes:["at","de","nl"],tags:{brand:"Miller & Monroe",name:"Miller & Monroe",shop:"clothes"}},"shop/clothes|Mim":{countryCodes:["fr","it"],tags:{brand:"Mim",name:"Mim",shop:"clothes"}},"shop/clothes|Miss Etam":{countryCodes:["nl"],tags:{brand:"Miss Etam",name:"Miss Etam",shop:"clothes"}},"shop/clothes|Mohito":{tags:{brand:"Mohito",name:"Mohito",shop:"clothes"}},"shop/clothes|Monsoon":{countryCodes:["gb","gg","ie"],tags:{brand:"Monsoon","brand:wikidata":"Q3069980","brand:wikipedia":"en:Monsoon Accessorize",name:"Monsoon",shop:"clothes"}},"shop/clothes|Motherhood Maternity":{countryCodes:["ca","us"],tags:{brand:"Motherhood Maternity",clothes:"maternity",name:"Motherhood Maternity",operator:"Destination Maternity","operator:wikipedia":"en:Destination Maternity",shop:"clothes"}},"shop/clothes|Motivi":{tags:{brand:"Motivi",name:"Motivi",shop:"clothes"}},"shop/clothes|Mr Price":{tags:{brand:"Mr Price","brand:wikidata":"Q6929120","brand:wikipedia":"en:Mr. Price",name:"Mr Price",shop:"clothes"}},"shop/clothes|NKD":{countryCodes:["at","de","it","si"],tags:{brand:"NKD","brand:wikidata":"Q927272","brand:wikipedia":"de:NKD",name:"NKD",shop:"clothes"}},"shop/clothes|Naf Naf":{tags:{brand:"Naf Naf","brand:wikidata":"Q3334188","brand:wikipedia":"fr:Naf Naf",name:"Naf Naf",shop:"clothes"}},"shop/clothes|New Look":{tags:{brand:"New Look","brand:wikidata":"Q12063852","brand:wikipedia":"en:New Look (company)",name:"New Look",shop:"clothes"}},"shop/clothes|New Yorker":{tags:{brand:"New Yorker","brand:wikidata":"Q706421","brand:wikipedia":"en:New Yorker (clothing)",name:"New Yorker",shop:"clothes"}},"shop/clothes|Next":{tags:{brand:"Next","brand:wikidata":"Q246655","brand:wikipedia":"en:Next plc",name:"Next",shop:"clothes"}},"shop/clothes|Nike":{matchTags:["shop/shoes","shop/sports"],tags:{brand:"Nike","brand:wikidata":"Q483915","brand:wikipedia":"en:Nike, Inc.",name:"Nike",shop:"clothes"}},"shop/clothes|Nordstrom Rack":{countryCodes:["ca","us"],tags:{brand:"Nordstrom Rack","brand:wikidata":"Q21463374","brand:wikipedia":"en:Nordstrom Rack",name:"Nordstrom Rack",shop:"clothes"}},"shop/clothes|OVS":{countryCodes:["at","ch","fr","it","si"],tags:{brand:"OVS","brand:wikidata":"Q2042514","brand:wikipedia":"en:OVS (company)",name:"OVS",shop:"clothes"}},"shop/clothes|Oasis":{tags:{brand:"Oasis",name:"Oasis",shop:"clothes"}},"shop/clothes|Okaïdi":{tags:{brand:"Okaïdi","brand:wikidata":"Q3350027","brand:wikipedia":"fr:Okaïdi",name:"Okaïdi",shop:"clothes"}},"shop/clothes|Old Navy":{tags:{brand:"Old Navy","brand:wikidata":"Q2735242","brand:wikipedia":"en:Old Navy",name:"Old Navy",shop:"clothes"}},"shop/clothes|Only":{tags:{brand:"Only","brand:wikidata":"Q61799370",name:"Only","operator:wikidata":"Q28172489","operator:wikipedia":"en:Bestseller (company)",shop:"clothes"}},"shop/clothes|Orchestra":{tags:{brand:"Orchestra","brand:wikidata":"Q28042940","brand:wikipedia":"fr:Orchestra Prémaman",name:"Orchestra",shop:"clothes"}},"shop/clothes|Original Marines":{countryCodes:["it"],tags:{brand:"Original Marines",name:"Original Marines",shop:"clothes"}},"shop/clothes|Orsay":{tags:{brand:"Orsay","brand:wikidata":"Q883245","brand:wikipedia":"de:Orsay (Modeunternehmen)",name:"Orsay",shop:"clothes"}},"shop/clothes|Outfit":{countryCodes:["de","gb"],tags:{brand:"Outfit","brand:wikidata":"Q7112061","brand:wikipedia":"en:Outfit (retailer)",name:"Outfit",shop:"clothes"}},"shop/clothes|Oysho":{tags:{brand:"Oysho","brand:wikidata":"Q3327046","brand:wikipedia":"en:Oysho",name:"Oysho",shop:"clothes"}},"shop/clothes|PacSun":{countryCodes:["us"],tags:{brand:"PacSun","brand:wikidata":"Q7121857","brand:wikipedia":"en:PacSun",name:"PacSun",shop:"clothes"}},"shop/clothes|Palmers":{countryCodes:["at","de"],tags:{brand:"Palmers","brand:wikidata":"Q1509985","brand:wikipedia":"de:Palmers",name:"Palmers",shop:"clothes"}},"shop/clothes|Peacocks":{countryCodes:["cy","gb"],tags:{brand:"Peacocks","brand:wikidata":"Q7157762","brand:wikipedia":"en:Peacocks (clothing)",name:"Peacocks",shop:"clothes"}},"shop/clothes|Peek & Cloppenburg":{countryCodes:["at","be","de","nl","pl"],tags:{brand:"Peek & Cloppenburg","brand:wikidata":"Q2066959","brand:wikipedia":"en:Peek & Cloppenburg",name:"Peek & Cloppenburg",shop:"clothes"}},"shop/clothes|Pep":{tags:{brand:"Pep","brand:wikidata":"Q7166182","brand:wikipedia":"en:Pep (store)",name:"Pep",shop:"clothes"}},"shop/clothes|Pepco":{countryCodes:["cz","hu","pl","ro","sk"],matchTags:["shop/variety_store"],tags:{brand:"Pepco","brand:wikidata":"Q11815580","brand:wikipedia":"pl:Pepco",name:"Pepco",shop:"clothes"}},"shop/clothes|Petit Bateau":{countryCodes:["be","de","fr","gb","it","lu"],tags:{brand:"Petit Bateau","brand:wikidata":"Q3377090","brand:wikipedia":"en:Petit Bateau",name:"Petit Bateau",shop:"clothes"}},"shop/clothes|Phase Eight":{countryCodes:["ch","de","gb"],tags:{brand:"Phase Eight","brand:wikidata":"Q17020730","brand:wikipedia":"en:Phase Eight",name:"Phase Eight",shop:"clothes"}},"shop/clothes|Pierre Cardin":{tags:{brand:"Pierre Cardin",name:"Pierre Cardin",shop:"clothes"}},"shop/clothes|Pimkie":{countryCodes:["at","be","de","es","fr","it"],tags:{brand:"Pimkie","brand:wikidata":"Q1758066","brand:wikipedia":"en:Pimkie",name:"Pimkie",shop:"clothes"}},"shop/clothes|Plato's Closet":{countryCodes:["ca","us"],tags:{brand:"Plato's Closet","brand:wikidata":"Q61779112",name:"Plato's Closet",operator:"Winmark","operator:wikidata":"Q28048853","operator:wikipedia":"en:Winmark",second_hand:"only",shop:"clothes"}},"shop/clothes|Polo Ralph Lauren":{tags:{brand:"Polo Ralph Lauren",name:"Polo Ralph Lauren",shop:"clothes"}},"shop/clothes|Primark":{tags:{brand:"Primark","brand:wikidata":"Q137023","brand:wikipedia":"en:Primark",name:"Primark",shop:"clothes"}},"shop/clothes|Promod":{tags:{brand:"Promod","brand:wikidata":"Q3407429","brand:wikipedia":"en:Promod",name:"Promod",shop:"clothes"}},"shop/clothes|Pull & Bear":{tags:{brand:"Pull & Bear","brand:wikidata":"Q691029","brand:wikipedia":"en:Pull&Bear",name:"Pull & Bear",shop:"clothes"}},"shop/clothes|Puma":{matchTags:["shop/sports"],nomatch:["amenity/fuel|Puma"],tags:{brand:"Puma","brand:wikidata":"Q7203029","brand:wikipedia":"en:Puma (brand)",name:"Puma",shop:"clothes"}},"shop/clothes|Quicksilver":{tags:{brand:"Quicksilver",name:"Quicksilver",shop:"clothes"}},"shop/clothes|Rainbow":{tags:{brand:"Rainbow","brand:wikidata":"Q7284708","brand:wikipedia":"en:Rainbow Shops",name:"Rainbow",shop:"clothes"}},"shop/clothes|Reebok":{matchTags:["shop/shoes","shop/sports"],tags:{brand:"Reebok","brand:wikidata":"Q466183","brand:wikipedia":"en:Reebok",name:"Reebok",shop:"clothes"}},"shop/clothes|Reitmans":{countryCodes:["ca"],tags:{brand:"Reitmans","brand:wikidata":"Q7310506","brand:wikipedia":"en:Reitmans",name:"Reitmans",shop:"clothes"}},"shop/clothes|Reserved":{tags:{brand:"Reserved","brand:wikidata":"Q21809354","brand:wikipedia":"en:Reserved",name:"Reserved",shop:"clothes"}},"shop/clothes|River Island":{countryCodes:["gb","ie","im","nl","pl"],tags:{brand:"River Island","brand:wikidata":"Q2670328","brand:wikipedia":"en:River Island",name:"River Island",shop:"clothes"}},"shop/clothes|Ross":{countryCodes:["us"],matchNames:["ross dress for less"],tags:{brand:"Ross","brand:wikidata":"Q3442791","brand:wikipedia":"en:Ross Stores",name:"Ross",official_name:"Ross Dress for Less",shop:"clothes"}},"shop/clothes|Sandro":{tags:{brand:"Sandro",name:"Sandro",shop:"clothes"}},"shop/clothes|Scotch & Soda":{tags:{brand:"Scotch & Soda",name:"Scotch & Soda",shop:"clothes"}},"shop/clothes|Sela":{countryCodes:["kg","ru"],tags:{brand:"Sela","brand:wikidata":"Q62075111",name:"Sela",shop:"clothes"}},"shop/clothes|Select":{tags:{brand:"Select",name:"Select",shop:"clothes"}},"shop/clothes|Sergent Major":{countryCodes:["be","de","es","fr","gb","it"],tags:{brand:"Sergent Major","brand:wikidata":"Q62521738","brand:wikipedia":"fr:Sergent Major (entreprise)",clothes:"babies;children",name:"Sergent Major",shop:"clothes"}},"shop/clothes|Shoeby":{countryCodes:["nl"],tags:{brand:"Shoeby",name:"Shoeby",shop:"clothes"}},"shop/clothes|Sinsay":{tags:{brand:"Sinsay",name:"Sinsay",shop:"clothes"}},"shop/clothes|Sisley":{countryCodes:["at","ch","de","hr","it","ru"],tags:{brand:"Sisley","brand:wikidata":"Q12054325","brand:wikipedia":"cs:Sisley",name:"Sisley",operator:"Benetton Group","operator:wikidata":"Q817139","operator:wikipedia":"en:Benetton Group",shop:"clothes"}},"shop/clothes|Springfield":{tags:{brand:"Springfield","brand:wikidata":"Q958209","brand:wikipedia":"es:Springfield (cadena de tiendas)",name:"Springfield",shop:"clothes"}},"shop/clothes|Stefanel":{tags:{brand:"Stefanel","brand:wikidata":"Q2338087","brand:wikipedia":"ro:Stefanel (companie)",name:"Stefanel",shop:"clothes"}},"shop/clothes|Steps":{tags:{brand:"Steps",name:"Steps",operator:"FNG Group","operator:wikidata":"Q15875120","operator:wikipedia":"nl:FNG Group",shop:"clothes"}},"shop/clothes|Stradivarius":{tags:{brand:"Stradivarius","brand:wikidata":"Q3322945","brand:wikipedia":"en:Stradivarius (clothing brand)",name:"Stradivarius",shop:"clothes"}},"shop/clothes|Street One":{countryCodes:["at","be","bg","ch","cz","de","dk","es","fi","fr","hr","hu","ie","it","lt","lu","lv","nl","no","pl","ro","se","si","sk"],tags:{brand:"Street One","brand:wikidata":"Q61997265",name:"Street One",operator:"CBR Fashion Holding","operator:wikidata":"Q1022989","operator:wikipedia":"de:CBR Fashion Holding",shop:"clothes"}},"shop/clothes|Suburbia":{countryCodes:["mx"],tags:{brand:"Suburbia","brand:wikidata":"Q6134992","brand:wikipedia":"en:Suburbia (department store)",name:"Suburbia",shop:"clothes"}},"shop/clothes|Superdry":{tags:{brand:"Superdry","brand:wikidata":"Q1684445","brand:wikipedia":"en:Superdry",name:"Superdry",shop:"clothes"}},"shop/clothes|TJ Maxx":{countryCodes:["us"],tags:{brand:"TJ Maxx","brand:wikidata":"Q10860683","brand:wikipedia":"en:TJ Maxx",name:"TJ Maxx",shop:"clothes"}},"shop/clothes|TK Maxx":{tags:{brand:"TK Maxx","brand:wikidata":"Q23823668","brand:wikipedia":"en:TK Maxx",name:"TK Maxx",shop:"clothes"}},"shop/clothes|Takko":{countryCodes:["at","cz","de","hu","nl"],matchNames:["takko fashion"],tags:{brand:"Takko","brand:wikidata":"Q1371302","brand:wikipedia":"de:Takko",name:"Takko",shop:"clothes"}},"shop/clothes|Talbots":{countryCodes:["ca","us"],tags:{brand:"Talbots","brand:wikidata":"Q7679064","brand:wikipedia":"en:Talbots",name:"Talbots",shop:"clothes"}},"shop/clothes|Tally Weijl":{tags:{brand:"Tally Weijl","brand:wikidata":"Q689695","brand:wikipedia":"en:Tally Weijl",name:"Tally Weijl",shop:"clothes"}},"shop/clothes|Tati":{countryCodes:["dz","fr"],tags:{brand:"Tati","brand:wikidata":"Q3516026","brand:wikipedia":"fr:Tati (entreprise)",name:"Tati",shop:"clothes"}},"shop/clothes|Terranova":{tags:{brand:"Terranova",name:"Terranova",shop:"clothes"}},"shop/clothes|Tezenis":{tags:{brand:"Tezenis","brand:wikidata":"Q28056374",name:"Tezenis",shop:"clothes"}},"shop/clothes|The Children's Place":{countryCodes:["ca","us"],tags:{brand:"The Children's Place","brand:wikidata":"Q3520257","brand:wikipedia":"en:The Children's Place",name:"The Children's Place",shop:"clothes"}},"shop/clothes|The North Face":{tags:{brand:"The North Face","brand:wikidata":"Q152784","brand:wikipedia":"en:The North Face",name:"The North Face",shop:"clothes"}},"shop/clothes|The Sting":{countryCodes:["be","de","gb","nl"],tags:{brand:"The Sting","brand:wikidata":"Q2518794","brand:wikipedia":"nl:The Sting Companies",name:"The Sting",shop:"clothes"}},"shop/clothes|Timberland":{matchTags:["shop/shoes"],tags:{brand:"Timberland","brand:wikidata":"Q1539185","brand:wikipedia":"en:The Timberland Company",name:"Timberland",shop:"clothes"}},"shop/clothes|Tom Tailor":{tags:{brand:"Tom Tailor","brand:wikidata":"Q571206","brand:wikipedia":"en:Tom Tailor",name:"Tom Tailor",shop:"clothes"}},"shop/clothes|Tommy Bahama":{countryCodes:["ca","us"],tags:{brand:"Tommy Bahama","brand:wikidata":"Q3531299","brand:wikipedia":"en:Tommy Bahama",name:"Tommy Bahama",shop:"clothes"}},"shop/clothes|Tommy Hilfiger":{tags:{brand:"Tommy Hilfiger","brand:wikidata":"Q634881","brand:wikipedia":"en:Tommy Hilfiger (company)",name:"Tommy Hilfiger",shop:"clothes"}},"shop/clothes|Top Secret":{countryCodes:["fr","pl","ru"],tags:{brand:"Top Secret",name:"Top Secret",shop:"clothes"}},"shop/clothes|Topshop":{tags:{brand:"Topshop","brand:wikidata":"Q1893576","brand:wikipedia":"en:Topshop",name:"Topshop",shop:"clothes"}},"shop/clothes|Torrid":{countryCodes:["us"],tags:{brand:"Torrid","brand:wikidata":"Q7827120","brand:wikipedia":"en:Torrid (clothing retailer)",name:"Torrid",shop:"clothes"}},"shop/clothes|Triumph":{tags:{brand:"Triumph","brand:wikidata":"Q671216","brand:wikipedia":"en:Triumph International",name:"Triumph",shop:"clothes"}},"shop/clothes|Truworths":{countryCodes:["za"],tags:{brand:"Truworths","brand:wikidata":"Q24233998","brand:wikipedia":"en:Truworths",name:"Truworths",shop:"clothes"}},"shop/clothes|Ulla Popken":{tags:{brand:"Ulla Popken","brand:wikidata":"Q2475146","brand:wikipedia":"en:Ulla Popken",name:"Ulla Popken",shop:"clothes"}},"shop/clothes|Uniqlo":{tags:{brand:"Uniqlo","brand:wikidata":"Q26070","brand:wikipedia":"en:Uniqlo",name:"Uniqlo",shop:"clothes"}},"shop/clothes|United Colors of Benetton":{matchNames:["benetton"],tags:{brand:"United Colors of Benetton","brand:wikidata":"Q817139","brand:wikipedia":"en:Benetton Group",name:"United Colors of Benetton",shop:"clothes"}},"shop/clothes|Urban Outfitters":{tags:{brand:"Urban Outfitters","brand:wikidata":"Q3552193","brand:wikipedia":"en:Urban Outfitters",name:"Urban Outfitters",shop:"clothes"}},"shop/clothes|Vero Moda":{tags:{brand:"Vero Moda","brand:wikidata":"Q594721","brand:wikipedia":"en:Bestseller (company)",name:"Vero Moda",shop:"clothes"}},"shop/clothes|Victoria's Secret":{tags:{brand:"Victoria's Secret","brand:wikidata":"Q332477","brand:wikipedia":"en:Victoria's Secret",clothes:"underwear;women",name:"Victoria's Secret",shop:"clothes"}},"shop/clothes|Volcom":{tags:{brand:"Volcom","brand:wikidata":"Q2021416","brand:wikipedia":"en:Volcom",name:"Volcom",shop:"clothes"}},"shop/clothes|WE":{countryCodes:["be","ch","de","nl"],tags:{brand:"WE","brand:wikidata":"Q1987861","brand:wikipedia":"en:WE (clothing)",name:"WE",shop:"clothes"}},"shop/clothes|White House Black Market":{countryCodes:["ca","us"],tags:{brand:"White House Black Market","brand:wikidata":"Q7994858","brand:wikipedia":"en:White House Black Market",name:"White House Black Market",shop:"clothes"}},"shop/clothes|White Stuff":{countryCodes:["de","dk","gb","gg"],tags:{brand:"White Stuff","brand:wikidata":"Q7995442","brand:wikipedia":"en:White Stuff Clothing",name:"White Stuff",shop:"clothes"}},"shop/clothes|Wibra":{countryCodes:["be","nl"],tags:{brand:"Wibra","brand:wikidata":"Q943405","brand:wikipedia":"en:Wibra",name:"Wibra",shop:"clothes"}},"shop/clothes|Winners":{countryCodes:["ca","es"],tags:{brand:"Winners","brand:wikidata":"Q845257","brand:wikipedia":"en:Winners",name:"Winners",shop:"clothes"}},"shop/clothes|Wolford":{countryCodes:["at","de","fr","gb","it","nl"],tags:{brand:"Wolford",name:"Wolford",shop:"clothes"}},"shop/clothes|Woolworths":{countryCodes:["za"],nomatch:["shop/supermarket|Woolworths"],tags:{brand:"Woolworths","brand:wikidata":"Q8033997","brand:wikipedia":"en:Woolworths Holdings Limited",name:"Woolworths",shop:"clothes"}},"shop/clothes|Yamamay":{tags:{brand:"Yamamay","brand:wikidata":"Q2599214","brand:wikipedia":"it:Yamamay",name:"Yamamay",shop:"clothes"}},"shop/clothes|Z":{nomatch:["amenity/fuel|Z"],tags:{brand:"Z",clothes:"babies;children",name:"Z",shop:"clothes"}},"shop/clothes|Zara":{tags:{brand:"Zara","brand:wikidata":"Q147662","brand:wikipedia":"en:Zara (retailer)",name:"Zara",shop:"clothes"}},"shop/clothes|Zeeman":{countryCodes:["be","de","fr","lu","nl"],tags:{brand:"Zeeman","brand:wikidata":"Q184399","brand:wikipedia":"en:Zeeman (store)",name:"Zeeman",shop:"clothes"}},"shop/clothes|Zumiez":{countryCodes:["ca","us"],tags:{brand:"Zumiez","brand:wikidata":"Q8075252","brand:wikipedia":"en:Zumiez",name:"Zumiez",shop:"clothes"}},"shop/clothes|mister*lady":{countryCodes:["at","de"],tags:{brand:"mister*lady","brand:wikidata":"Q18640136","brand:wikipedia":"de:Mister*lady",name:"mister*lady",shop:"clothes"}},"shop/clothes|rue21":{countryCodes:["us"],tags:{brand:"rue21","brand:wikidata":"Q7377762","brand:wikipedia":"en:Rue21",name:"rue21",shop:"clothes"}},"shop/clothes|s.Oliver":{countryCodes:["at","be","de","fr","hr"],tags:{brand:"s.Oliver","brand:wikidata":"Q265056","brand:wikipedia":"en:S.Oliver",name:"s.Oliver",shop:"clothes"}},"shop/clothes|Липненски":{countryCodes:["bg"],tags:{brand:"Липненски",name:"Липненски",shop:"clothes"}},"shop/clothes|Московская ярмарка":{countryCodes:["ru","ua"],tags:{brand:"Московская ярмарка",name:"Московская ярмарка",shop:"clothes"}},"shop/clothes|Смешные цены":{countryCodes:["kz","ru"],tags:{brand:"Смешные цены",name:"Смешные цены",shop:"clothes"}},"shop/clothes|しまむら":{countryCodes:["jp"],tags:{brand:"しまむら","brand:en":"Shimamura","brand:ja":"しまむら","brand:wikidata":"Q7758173","brand:wikipedia":"ja:しまむら",name:"しまむら","name:en":"Shimamura","name:ja":"しまむら",shop:"clothes"}},"shop/clothes|はるやま":{countryCodes:["jp"],tags:{brand:"はるやま","brand:en":"Haruyama","brand:ja":"はるやま","brand:wikidata":"Q11275918","brand:wikipedia":"ja:はるやま商事",name:"はるやま","name:en":"Haruyama","name:ja":"はるやま",shop:"clothes"}},"shop/clothes|コナカ":{countryCodes:["jp"],tags:{brand:"コナカ","brand:ja":"コナカ",name:"コナカ","name:ja":"コナカ",shop:"clothes"}},"shop/clothes|ユニクロ":{countryCodes:["jp"],tags:{brand:"ユニクロ","brand:en":"UNIQLO","brand:ja":"ユニクロ","brand:wikidata":"Q26070","brand:wikipedia":"en:Uniqlo",name:"ユニクロ","name:en":"UNIQLO","name:ja":"ユニクロ",shop:"clothes"}},"shop/clothes|ライトオン":{countryCodes:["jp"],tags:{brand:"ライトオン","brand:en":"Right-on","brand:ja":"ライトオン","brand:wikidata":"Q11346416","brand:wikipedia":"ja:ライトオン",name:"ライトオン","name:en":"Right-on","name:ja":"ライトオン",shop:"clothes"}},"shop/clothes|ワークマン":{countryCodes:["jp"],tags:{brand:"ワークマン","brand:en":"Workman","brand:ja":"ワークマン","brand:wikidata":"Q11351660","brand:wikipedia":"ja:ワークマン",name:"ワークマン","name:en":"Workman","name:ja":"ワークマン",shop:"clothes"}},"shop/clothes|洋服の青山":{countryCodes:["jp"],tags:{brand:"洋服の青山","brand:en":"Aoyama Tailor","brand:ja":"洋服の青山","brand:wikidata":"Q11661241","brand:wikipedia":"ja:青山商事",name:"洋服の青山","name:en":"Aoyama Tailor","name:ja":"洋服の青山",shop:"clothes"}},"shop/coffee|Nespresso":{tags:{brand:"Nespresso","brand:wikidata":"Q301301","brand:wikipedia":"en:Nespresso",name:"Nespresso",shop:"coffee"}},"shop/coffee|Tchibo":{matchTags:["shop/convenience"],tags:{brand:"Tchibo","brand:wikidata":"Q564213","brand:wikipedia":"de:Tchibo",name:"Tchibo",shop:"coffee"}},"shop/computer|DNS":{tags:{brand:"DNS",name:"DNS",shop:"computer"}},"shop/computer|PC World":{tags:{brand:"PC World","brand:wikidata":"Q7118727","brand:wikipedia":"en:PC World (retailer)",name:"PC World",shop:"computer"}},"shop/computer|ДНС":{tags:{brand:"ДНС",name:"ДНС",shop:"computer"}},"shop/confectionery|Adyar Ananda Bhavan":{countryCodes:["in"],matchTags:["amenity/restaurant"],tags:{brand:"Adyar Ananda Bhavan","brand:wikidata":"Q15178238","brand:wikipedia":"en:Adyar Ananda Bhavan",name:"Adyar Ananda Bhavan",shop:"confectionery"}},"shop/confectionery|Hemmakvall":{countryCodes:["se"],tags:{"brand:wikidata":"Q10521791","brand:wikipedia":"sv:Hemmakväll",name:"Hemmakväll",shop:"confectionery"}},"shop/confectionery|Hussel":{tags:{brand:"Hussel","brand:wikidata":"Q17123688","brand:wikipedia":"de:Hussel",name:"Hussel",shop:"confectionery"}},"shop/confectionery|Jamin":{countryCodes:["nl"],tags:{brand:"Jamin","brand:wikidata":"Q2291848","brand:wikipedia":"nl:Jamin",name:"Jamin",shop:"confectionery"}},"shop/confectionery|See's Candies":{tags:{brand:"See's Candies","brand:wikidata":"Q2103510","brand:wikipedia":"en:See's Candies",name:"See's Candies",shop:"confectionery"}},"shop/confectionery|T. SN":{tags:{brand:"T. SN",name:"T. SN",shop:"confectionery"}},"shop/confectionery|Thorntons":{tags:{brand:"Thorntons","brand:wikidata":"Q683102","brand:wikipedia":"en:Thorntons",name:"Thorntons",shop:"confectionery"}},"shop/confectionery|Вацак":{countryCodes:["ua"],tags:{brand:"Вацак","brand:wikidata":"Q30966576","brand:wikipedia":"uk:Кондитерський Дім «Вацак»",name:"Вацак",shop:"confectionery"}},"shop/confectionery|シャトレーゼ":{countryCodes:["jp"],tags:{brand:"シャトレーゼ","brand:en":"Chateraise","brand:ja":"シャトレーゼ","brand:wikidata":"Q11307696","brand:wikipedia":"ja:シャトレーゼ",name:"シャトレーゼ","name:en":"Chateraise","name:ja":"シャトレーゼ",shop:"confectionery"}},"shop/confectionery|不二家":{tags:{brand:"不二家",name:"不二家",shop:"confectionery"}},"shop/convenience|24 часа":{tags:{brand:"24 часа",name:"24 часа",shop:"convenience"}},"shop/convenience|7-Eleven":{matchNames:["7-11","seven eleven"],matchTags:["shop/supermarket"],nomatch:["amenity/fuel|7-Eleven"],tags:{brand:"7-Eleven","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"7-Eleven",shop:"convenience"}},"shop/convenience|76":{nomatch:["amenity/fuel|76"],tags:{brand:"76","brand:wikidata":"Q1658320","brand:wikipedia":"en:76 (gas station)",name:"76",shop:"convenience"}},"shop/convenience|8 à Huit":{countryCodes:["fr"],nomatch:["shop/supermarket|8 à Huit"],tags:{brand:"8 à Huit","brand:wikidata":"Q2818601","brand:wikipedia":"fr:8 à Huit",name:"8 à Huit",shop:"convenience"}},"shop/convenience|99 Speedmart":{countryCodes:["br","my","us"],tags:{brand:"99 Speedmart","brand:wikidata":"Q62075061",name:"99 Speedmart",shop:"convenience"}},"shop/convenience|ABC~(Hawaii)":{countryCodes:["us"],matchNames:["abc stores"],nomatch:["amenity/fuel|ABC"],tags:{brand:"ABC","brand:wikidata":"Q4650251","brand:wikipedia":"en:ABC Stores (Hawaii)",name:"ABC",shop:"convenience"}},"shop/convenience|Aibė":{countryCodes:["lt","lv"],tags:{brand:"Aibė","brand:wikidata":"Q1022952","brand:wikipedia":"de:Aibė",name:"Aibė",shop:"convenience"}},"shop/convenience|Albert Heijn to go":{countryCodes:["nl"],tags:{brand:"Albert Heijn to go","brand:wikidata":"Q1653985","brand:wikipedia":"en:Albert Heijn",name:"Albert Heijn to go",shop:"convenience"}},"shop/convenience|Alfamart":{tags:{brand:"Alfamart",name:"Alfamart",shop:"convenience"}},"shop/convenience|Alfamidi":{countryCodes:["id"],tags:{brand:"Alfamidi","brand:wikidata":"Q12471462","brand:wikipedia":"id:Alfamidi",name:"Alfamidi",shop:"convenience"}},"shop/convenience|Almacén":{tags:{brand:"Almacén",name:"Almacén",shop:"convenience"}},"shop/convenience|Aral":{countryCodes:["de"],matchNames:["aral tankstelle"],matchTags:["shop/kiosk"],nomatch:["amenity/fuel|Aral"],tags:{brand:"Aral","brand:wikidata":"Q565734","brand:wikipedia":"en:Aral AG",name:"Aral",shop:"convenience"}},"shop/convenience|BP Shop":{nomatch:["amenity/fuel|BP"],tags:{brand:"BP Shop","brand:wikidata":"Q152057","brand:wikipedia":"en:BP",name:"BP Shop",shop:"convenience"}},"shop/convenience|Best-one":{countryCodes:["gb"],tags:{brand:"Best-one","brand:wikidata":"Q4896532","brand:wikipedia":"en:Best-one",name:"Best-one",shop:"convenience"}},"shop/convenience|Bonjour":{tags:{brand:"Bonjour",name:"Bonjour",shop:"convenience"}},"shop/convenience|Buc-ee's":{countryCodes:["us"],tags:{brand:"Buc-ee's","brand:wikidata":"Q4982335","brand:wikipedia":"en:Buc-ee's",name:"Buc-ee's",shop:"convenience"}},"shop/convenience|Budgens":{nomatch:["shop/supermarket|Budgens"],tags:{brand:"Budgens","brand:wikidata":"Q4985016","brand:wikipedia":"en:Budgens",name:"Budgens",shop:"convenience"}},"shop/convenience|CBA":{tags:{brand:"CBA","brand:wikidata":"Q779845","brand:wikipedia":"en:CBA (food retail)",name:"CBA",shop:"convenience"}},"shop/convenience|COOP Jednota":{countryCodes:["cz","sk"],matchNames:["jednota"],nomatch:["shop/supermarket|COOP Jednota"],tags:{brand:"COOP Jednota","brand:wikidata":"Q41629254","brand:wikipedia":"sk:COOP Jednota Slovensko",name:"COOP Jednota",shop:"convenience"}},"shop/convenience|CU":{countryCodes:["kr"],tags:{brand:"CU",name:"CU",shop:"convenience"}},"shop/convenience|Carrefour Express":{nomatch:["amenity/fuel|Carrefour","shop/supermarket|Carrefour"],tags:{brand:"Carrefour Express",name:"Carrefour Express",shop:"convenience"}},"shop/convenience|Casey's General Store":{nomatch:["amenity/fuel|Casey's General Store"],tags:{brand:"Casey's General Store",name:"Casey's General Store",shop:"convenience"}},"shop/convenience|Casino":{tags:{brand:"Casino",name:"Casino",shop:"convenience"}},"shop/convenience|Casino Shop":{countryCodes:["fr"],tags:{brand:"Casino Shop",name:"Casino Shop",shop:"convenience"}},"shop/convenience|Centra":{tags:{brand:"Centra",name:"Centra",shop:"convenience"}},"shop/convenience|Central Convenience Store":{tags:{brand:"Central Convenience Store",name:"Central Convenience Store",shop:"convenience"}},"shop/convenience|Chata Polska":{nomatch:["shop/supermarket|Chata Polska"],tags:{brand:"Chata Polska","brand:wikidata":"Q61994406",name:"Chata Polska",shop:"convenience"}},"shop/convenience|Cheers":{tags:{brand:"Cheers",name:"Cheers",shop:"convenience"}},"shop/convenience|Chevron":{nomatch:["amenity/fuel|Chevron"],tags:{brand:"Chevron",name:"Chevron",shop:"convenience"}},"shop/convenience|Circle K":{matchNames:["ok","ok-mart"],nomatch:["amenity/fuel|Circle K"],tags:{brand:"Circle K","brand:wikidata":"Q3268010","brand:wikipedia":"en:Circle K",name:"Circle K",shop:"convenience"}},"shop/convenience|Citgo":{nomatch:["amenity/fuel|Citgo"],tags:{brand:"Citgo",name:"Citgo",shop:"convenience"}},"shop/convenience|Co-op~(Canada)":{countryCodes:["ca"],nomatch:["amenity/fuel|Co-op~(Canada)","shop/convenience|Coop~(Schweiz)","shop/convenience|The Co-operative Food~(UK)","shop/supermarket|Co-op~(Canada)","shop/supermarket|Coop~(Schweiz)","shop/supermarket|The Co-operative Food~(UK)"],tags:{brand:"Federated Co-operatives","brand:wikidata":"Q5440676","brand:wikipedia":"en:Federated Co-operatives",name:"Co-op",shop:"convenience"}},"shop/convenience|CocciMarket":{countryCodes:["fr"],tags:{brand:"CocciMarket",name:"CocciMarket",operator:"Codifrance","operator:wikidata":"Q2981692","operator:wikipedia":"fr:Codifrance",shop:"convenience"}},"shop/convenience|Coles Express":{nomatch:["amenity/fuel|Coles Express"],tags:{brand:"Coles Express",name:"Coles Express",shop:"convenience"}},"shop/convenience|Coop Pronto":{countryCodes:["ch","li"],nomatch:["amenity/cafe|Pronto"],tags:{brand:"Coop Pronto","brand:wikidata":"Q1129777","brand:wikipedia":"de:Coop Mineraloel",name:"Coop Pronto",shop:"convenience"}},"shop/convenience|Coop~(Schweiz)":{countryCodes:["ch"],nomatch:["amenity/fuel|Co-op~(Canada)","shop/convenience|Co-op~(Canada)","shop/convenience|The Co-operative Food~(UK)","shop/supermarket|Co-op~(Canada)","shop/supermarket|Coop~(Schweiz)","shop/supermarket|The Co-operative Food~(UK)"],tags:{brand:"Coop","brand:wikidata":"Q432564","brand:wikipedia":"de:Coop (Schweiz)",name:"Coop",shop:"convenience"}},"shop/convenience|Costcutter":{nomatch:["shop/supermarket|Costcutter"],tags:{brand:"Costcutter","brand:wikidata":"Q5175072","brand:wikipedia":"en:Costcutter",name:"Costcutter",shop:"convenience"}},"shop/convenience|Couche-Tard":{nomatch:["amenity/fuel|Couche-Tard"],tags:{brand:"Couche-Tard",name:"Couche-Tard",shop:"convenience"}},"shop/convenience|Cumberland Farms":{nomatch:["amenity/fuel|Cumberland Farms"],tags:{brand:"Cumberland Farms",name:"Cumberland Farms",shop:"convenience"}},"shop/convenience|Daisy Mart":{countryCodes:["ca"],tags:{brand:"Daisy Mart","brand:wikidata":"Q61994934",name:"Daisy Mart",shop:"convenience"}},"shop/convenience|Delikatesy Centrum":{countryCodes:["pl"],nomatch:["shop/supermarket|Delikatesy Centrum"],tags:{brand:"Delikatesy Centrum","brand:wikidata":"Q11693824","brand:wikipedia":"pl:Delikatesy Centrum",name:"Delikatesy Centrum",shop:"convenience"}},"shop/convenience|Express":{nomatch:["shop/clothes|Express"],tags:{brand:"Express",name:"Express",shop:"convenience"}},"shop/convenience|ExtraMile":{countryCodes:["us"],tags:{brand:"ExtraMile",name:"ExtraMile",operator:"Chevron","operator:wikidata":"Q319642","operator:wikipedia":"en:Chevron Corporation",shop:"convenience"}},"shop/convenience|FamilyMart":{tags:{brand:"FamilyMart","brand:wikidata":"Q1191685","brand:wikipedia":"en:FamilyMart",name:"FamilyMart",shop:"convenience"}},"shop/convenience|Food Mart":{tags:{brand:"Food Mart",name:"Food Mart",shop:"convenience"}},"shop/convenience|Four Square":{tags:{brand:"Four Square","brand:wikidata":"Q5475558","brand:wikipedia":"en:Four Square (supermarket)",name:"Four Square",shop:"convenience"}},"shop/convenience|Franprix":{matchTags:["shop/supermarket"],tags:{brand:"Franprix","brand:wikidata":"Q2420096","brand:wikipedia":"fr:Franprix",name:"Franprix",shop:"convenience"}},"shop/convenience|Fresh":{tags:{brand:"Fresh",name:"Fresh",shop:"convenience"}},"shop/convenience|Freshmarket":{countryCodes:["pl"],tags:{brand:"Freshmarket","brand:wikidata":"Q16546326","brand:wikipedia":"pl:Freshmarket",name:"Freshmarket",shop:"convenience"}},"shop/convenience|GS25":{tags:{brand:"GS25",name:"GS25",shop:"convenience"}},"shop/convenience|Groszek":{countryCodes:["pl"],nomatch:["shop/supermarket|Groszek"],tags:{brand:"Groszek","brand:wikidata":"Q9280965","brand:wikipedia":"pl:Groszek (sieć sklepów)",name:"Groszek",shop:"convenience"}},"shop/convenience|Hasty Market":{countryCodes:["ca"],tags:{brand:"Hasty Market","brand:wikidata":"Q58022603",name:"Hasty Market",shop:"convenience"}},"shop/convenience|Holiday":{nomatch:["amenity/fuel|Holiday"],tags:{brand:"Holiday",name:"Holiday",shop:"convenience"}},"shop/convenience|Hruška":{nomatch:["shop/supermarket|Hruška"],tags:{brand:"Hruška",name:"Hruška",shop:"convenience"}},"shop/convenience|Husky":{nomatch:["amenity/fuel|Husky"],tags:{brand:"Husky",name:"Husky",shop:"convenience"}},"shop/convenience|Indomaret":{tags:{brand:"Indomaret",name:"Indomaret",shop:"convenience"}},"shop/convenience|Indomart":{countryCodes:["id"],tags:{brand:"Indomart",name:"Indomart",shop:"convenience"}},"shop/convenience|Intermarché Contact":{countryCodes:["fr"],matchTags:["shop/supermarket"],tags:{brand:"Intermarché Contact","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",name:"Intermarché Contact",shop:"convenience"}},"shop/convenience|Irving":{nomatch:["amenity/fuel|Irving"],tags:{brand:"Irving",name:"Irving",shop:"convenience"}},"shop/convenience|Jacksons":{countryCodes:["us"],tags:{brand:"Jacksons","brand:wikidata":"Q6117880","brand:wikipedia":"en:Jacksons Stores",name:"Jacksons",shop:"convenience"}},"shop/convenience|Jiffy":{tags:{brand:"Jiffy",name:"Jiffy",shop:"convenience"}},"shop/convenience|Joker":{tags:{brand:"Joker",name:"Joker",shop:"convenience"}},"shop/convenience|K-Market":{countryCodes:["fi"],matchTags:["shop/supermarket"],tags:{brand:"K-Market","brand:wikidata":"Q11868562","brand:wikipedia":"fi:K-Market",name:"K-Market",shop:"convenience"}},"shop/convenience|Kangaroo":{nomatch:["amenity/fuel|Kangaroo"],tags:{brand:"Kangaroo",name:"Kangaroo",shop:"convenience"}},"shop/convenience|Kangaroo Express":{countryCodes:["us"],tags:{brand:"Kangaroo Express",name:"Kangaroo Express",shop:"convenience"}},"shop/convenience|Konzum":{tags:{brand:"Konzum",name:"Konzum",shop:"convenience"}},"shop/convenience|Kum & Go":{nomatch:["amenity/fuel|Kum & Go"],tags:{brand:"Kum & Go",name:"Kum & Go",shop:"convenience"}},"shop/convenience|Kwik Trip":{nomatch:["amenity/fuel|Kwik Trip"],tags:{brand:"Kwik Trip","brand:wikidata":"Q6450420","brand:wikipedia":"en:Kwik Trip",name:"Kwik Trip",shop:"convenience"}},"shop/convenience|Lawson":{tags:{brand:"Lawson","brand:wikidata":"Q1557223","brand:wikipedia":"en:Lawson (store)",name:"Lawson",shop:"convenience"}},"shop/convenience|Lewiatan":{countryCodes:["pl"],nomatch:["shop/supermarket|Lewiatan"],tags:{brand:"Lewiatan","brand:wikidata":"Q11755396","brand:wikipedia":"pl:Lewiatan (sieć handlowa)",name:"Lewiatan",shop:"convenience"}},"shop/convenience|Lifestyle Express":{countryCodes:["gb"],tags:{brand:"Lifestyle Express","brand:wikidata":"Q61994869",name:"Lifestyle Express",shop:"convenience"}},"shop/convenience|Londis":{tags:{brand:"Londis",name:"Londis",shop:"convenience"}},"shop/convenience|M&S Simply Food":{tags:{brand:"M&S Simply Food",name:"M&S Simply Food",shop:"convenience"}},"shop/convenience|Mac's":{nomatch:["amenity/fuel|Mac's"],tags:{brand:"Mac's",name:"Mac's",shop:"convenience"}},"shop/convenience|Mace":{tags:{brand:"Mace","brand:wikidata":"Q17089386","brand:wikipedia":"en:Mace (shop)",name:"Mace",shop:"convenience"}},"shop/convenience|Marathon":{nomatch:["amenity/fuel|Marathon"],tags:{brand:"Marathon","brand:wikidata":"Q458363","brand:wikipedia":"en:Marathon Petroleum",name:"Marathon",shop:"convenience"}},"shop/convenience|Maverik":{nomatch:["amenity/fuel|Maverik"],tags:{brand:"Maverik",name:"Maverik",shop:"convenience"}},"shop/convenience|Maxikiosco":{countryCodes:["ar","uy"],tags:{brand:"Maxikiosco",name:"Maxikiosco",shop:"convenience"}},"shop/convenience|Małpka Express":{countryCodes:["pl"],tags:{brand:"Małpka Express","brand:wikidata":"Q18431946","brand:wikipedia":"pl:Małpka Express",name:"Małpka Express",shop:"convenience"}},"shop/convenience|McColl's":{countryCodes:["gb"],matchTags:["shop/newsagent"],tags:{brand:"McColl's","brand:wikidata":"Q16997477","brand:wikipedia":"en:McColl's",name:"McColl's",shop:"convenience"}},"shop/convenience|Mercator":{tags:{brand:"Mercator",name:"Mercator",shop:"convenience"}},"shop/convenience|Migrolino":{countryCodes:["ch"],tags:{brand:"Migrolino","brand:wikidata":"Q56745088","brand:wikipedia":"de:Migrolino",name:"Migrolino",shop:"convenience"}},"shop/convenience|Ministop":{tags:{brand:"Ministop","brand:wikidata":"Q1038929","brand:wikipedia":"en:Ministop",name:"Ministop",shop:"convenience"}},"shop/convenience|Mlin i pekare":{countryCodes:["hr"],tags:{brand:"Mlin i pekare",name:"Mlin i pekare",shop:"convenience"}},"shop/convenience|Mobil Mart":{nomatch:["amenity/fuel|Mobil"],tags:{brand:"Mobil Mart","brand:wikidata":"Q3088656","brand:wikipedia":"en:Mobil",name:"Mobil Mart",shop:"convenience"}},"shop/convenience|Nasz Sklep":{countryCodes:["pl"],tags:{brand:"Nasz Sklep","brand:wikidata":"Q62070369",name:"Nasz Sklep",shop:"convenience"}},"shop/convenience|NewDays":{countryCodes:["jp"],matchNames:["newdays ミニ","ニューデイズ"],tags:{alt_name:"ニューデイズ",brand:"NewDays","brand:wikidata":"Q11234763","brand:wikipedia":"ja:NewDays",name:"NewDays",shop:"convenience"}},"shop/convenience|Nisa":{countryCodes:["gb"],tags:{brand:"Nisa","brand:wikidata":"Q16999069","brand:wikipedia":"en:Nisa (retailer)",name:"Nisa",shop:"convenience"}},"shop/convenience|Nisa Local":{countryCodes:["gb"],tags:{brand:"Nisa Local","brand:wikidata":"Q16999069","brand:wikipedia":"en:Nisa (retailer)",name:"Nisa Local",shop:"convenience"}},"shop/convenience|OK Market":{countryCodes:["cl"],tags:{brand:"OK Market",name:"OK Market",shop:"convenience"}},"shop/convenience|OK便利商店":{countryCodes:["cn","tw"],matchNames:["ok便利店 circle k"],tags:{brand:"OK便利商店","brand:en":"Circle K","brand:wikidata":"Q3268010","brand:wikipedia":"zh:OK便利店",name:"OK便利商店","name:en":"Circle K",shop:"convenience"}},"shop/convenience|Odido":{countryCodes:["pl"],tags:{brand:"Odido",name:"Odido",shop:"convenience"}},"shop/convenience|On the Run":{tags:{brand:"On the Run","brand:wikidata":"Q16931259","brand:wikipedia":"en:On the Run (convenience store)",name:"On the Run",shop:"convenience"}},"shop/convenience|One Stop":{tags:{brand:"One Stop",name:"One Stop",shop:"convenience"}},"shop/convenience|Orlen":{nomatch:["amenity/fuel|Orlen"],tags:{brand:"Orlen",name:"Orlen",shop:"convenience"}},"shop/convenience|Oxxo":{matchTags:["shop/supermarket"],nomatch:["amenity/fuel|Oxxo"],tags:{brand:"Oxxo","brand:wikidata":"Q1342538","brand:wikipedia":"es:Oxxo",name:"Oxxo",shop:"convenience"}},"shop/convenience|Petit Casino":{matchTags:["shop/supermarket"],tags:{brand:"Petit Casino",name:"Petit Casino",shop:"convenience"}},"shop/convenience|Petro-Canada":{nomatch:["amenity/fuel|Petro-Canada"],tags:{brand:"Petro-Canada","brand:wikidata":"Q1208279","brand:wikipedia":"en:Petro-Canada",name:"Petro-Canada",shop:"convenience"}},"shop/convenience|Plaid Pantry":{countryCodes:["us"],tags:{brand:"Plaid Pantry","brand:wikidata":"Q7200591","brand:wikipedia":"en:Plaid Pantry",name:"Plaid Pantry",shop:"convenience"}},"shop/convenience|Premier":{countryCodes:["gb"],tags:{brand:"Premier","brand:wikidata":"Q7240340","brand:wikipedia":"en:Premier Stores",name:"Premier",shop:"convenience"}},"shop/convenience|Proxi":{matchTags:["shop/supermarket"],tags:{brand:"Proxi","brand:wikidata":"Q3408522","brand:wikipedia":"fr:Proxi",name:"Proxi",shop:"convenience"}},"shop/convenience|Proxy":{countryCodes:["fr"],tags:{brand:"Proxy",name:"Proxy",shop:"convenience"}},"shop/convenience|Quick Stop":{tags:{brand:"Quick Stop",name:"Quick Stop",shop:"convenience"}},"shop/convenience|QuickChek":{countryCodes:["us"],tags:{brand:"QuickChek",name:"QuickChek",shop:"convenience"}},"shop/convenience|QuikTrip":{nomatch:["amenity/fuel|QuikTrip"],tags:{brand:"QuikTrip",name:"QuikTrip",shop:"convenience"}},"shop/convenience|RaceTrac":{countryCodes:["us"],nomatch:["amenity/fuel|RaceTrac"],tags:{brand:"RaceTrac","brand:wikidata":"Q735942","brand:wikipedia":"en:RaceTrac",name:"RaceTrac",shop:"convenience"}},"shop/convenience|Royal Farms":{nomatch:["amenity/fuel|Royal Farms"],tags:{brand:"Royal Farms",name:"Royal Farms",shop:"convenience"}},"shop/convenience|Sainsbury's Local":{countryCodes:["gb"],matchTags:["shop/supermarket"],tags:{brand:"Sainsbury's Local","brand:wikidata":"Q13218434","brand:wikipedia":"en:Sainsbury's Local",name:"Sainsbury's Local",shop:"convenience"}},"shop/convenience|Select":{tags:{brand:"Select",name:"Select",shop:"convenience"}},"shop/convenience|Sheetz":{nomatch:["amenity/fuel|Sheetz"],tags:{brand:"Sheetz","brand:wikidata":"Q7492551","brand:wikipedia":"en:Sheetz",name:"Sheetz",shop:"convenience"}},"shop/convenience|Shell Select":{nomatch:["amenity/fuel|Shell","amenity/fuel|Shell Express"],tags:{brand:"Shell Select","brand:wikidata":"Q154950","brand:wikipedia":"en:Royal Dutch Shell",name:"Shell Select",shop:"convenience"}},"shop/convenience|Shop & Go":{tags:{brand:"Shop & Go",name:"Shop & Go",shop:"convenience"}},"shop/convenience|Siwa":{countryCodes:["fi"],tags:{brand:"Siwa","brand:wikidata":"Q11893827","brand:wikipedia":"fi:Siwa",name:"Siwa",shop:"convenience"}},"shop/convenience|Spar":{nomatch:["shop/convenience|Spar Express","shop/supermarket|Spar"],tags:{brand:"Spar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Spar",shop:"convenience"}},"shop/convenience|Spar Express":{matchTags:["shop/supermarket"],nomatch:["shop/convenience|Spar","shop/supermarket|Spar"],tags:{brand:"Spar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Spar Express",shop:"convenience"}},"shop/convenience|Speedway":{nomatch:["amenity/fuel|Speedway"],tags:{brand:"Speedway","brand:wikidata":"Q7575683","brand:wikipedia":"en:Speedway LLC",name:"Speedway",shop:"convenience"}},"shop/convenience|Społem":{nomatch:["shop/supermarket|Społem"],tags:{brand:"Społem","brand:wikidata":"Q11826043","brand:wikipedia":"pl:Powszechna Spółdzielnia Spożywców „Społem”",name:"Społem",shop:"convenience"}},"shop/convenience|Star Mart":{tags:{brand:"Star Mart","brand:wikidata":"Q61994857",name:"Star Mart",shop:"convenience"}},"shop/convenience|Stewart's":{nomatch:["amenity/fuel|Stewart's"],tags:{brand:"Stewart's",name:"Stewart's",shop:"convenience"}},"shop/convenience|Stripes":{countryCodes:["cl","us"],tags:{brand:"Stripes","brand:wikidata":"Q7624135","brand:wikipedia":"en:Stripes Convenience Stores",name:"Stripes",shop:"convenience"}},"shop/convenience|Studenac":{tags:{brand:"Studenac",name:"Studenac",shop:"convenience"}},"shop/convenience|Sunoco":{nomatch:["amenity/fuel|Sunoco"],tags:{brand:"Sunoco",name:"Sunoco",shop:"convenience"}},"shop/convenience|Supérette":{tags:{brand:"Supérette",name:"Supérette",shop:"convenience"}},"shop/convenience|Słoneczko":{countryCodes:["pl"],tags:{brand:"Słoneczko",name:"Słoneczko",shop:"convenience"}},"shop/convenience|Tesco":{nomatch:["amenity/fuel|Tesco","shop/convenience|Tesco Express"],tags:{brand:"Tesco","brand:wikidata":"Q487494","brand:wikipedia":"en:Tesco",name:"Tesco",shop:"convenience"}},"shop/convenience|Tesco Express":{nomatch:["amenity/fuel|Tesco"],tags:{brand:"Tesco Express","brand:wikidata":"Q487494","brand:wikipedia":"en:Tesco",name:"Tesco Express",shop:"convenience"}},"shop/convenience|Tesco Lotus Express":{countryCodes:["th"],tags:{brand:"Tesco Lotus Express",name:"Tesco Lotus Express",shop:"convenience"}},"shop/convenience|Texaco":{nomatch:["amenity/fuel|Texaco"],tags:{brand:"Texaco",name:"Texaco",shop:"convenience"}},"shop/convenience|The Co-operative Food~(UK)":{countryCodes:["gb"],matchNames:["coop","coop food","cooperative food","the cooperative"],nomatch:["amenity/fuel|Co-op~(Canada)","shop/convenience|Co-op~(Canada)","shop/convenience|Coop~(Schweiz)","shop/supermarket|Co-op~(Canada)","shop/supermarket|Coop~(Schweiz)","shop/supermarket|The Co-operative Food~(UK)"],tags:{brand:"The Co-operative Food","brand:wikidata":"Q3277439","brand:wikipedia":"en:Co-op Food",name:"The Co-operative Food",shop:"convenience"}},"shop/convenience|Tiendita":{tags:{brand:"Tiendita",name:"Tiendita",shop:"convenience"}},"shop/convenience|Tiger Mart":{tags:{brand:"Tiger Mart","brand:wikidata":"Q57643977",name:"Tiger Mart",shop:"convenience"}},"shop/convenience|Total":{nomatch:["amenity/fuel|Total"],tags:{brand:"Total",name:"Total",shop:"convenience"}},"shop/convenience|Turkey Hill":{nomatch:["amenity/fuel|Turkey Hill"],tags:{brand:"Turkey Hill",name:"Turkey Hill",shop:"convenience"}},"shop/convenience|Ultramar":{nomatch:["amenity/fuel|Ultramar"],tags:{brand:"Ultramar",name:"Ultramar",shop:"convenience"}},"shop/convenience|United Dairy Farmers":{countryCodes:["us"],matchNames:["udf"],matchTags:["amenity/ice_cream","shop/ice_cream"],nomatch:["amenity/fuel|United Dairy Farmers"],tags:{amenity:"ice_cream",brand:"United Dairy Farmers","brand:wikidata":"Q7887677","brand:wikipedia":"en:United Dairy Farmers",name:"United Dairy Farmers",shop:"convenience",short_name:"UDF"}},"shop/convenience|Utile":{countryCodes:["fr"],matchTags:["shop/supermarket"],nomatch:["amenity/fuel|Super U","shop/supermarket|Hyper U","shop/supermarket|Super U","shop/supermarket|U Express"],tags:{brand:"Utile","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Utile",shop:"convenience"}},"shop/convenience|Valero":{nomatch:["amenity/fuel|Valero"],tags:{brand:"Valero",name:"Valero",shop:"convenience"}},"shop/convenience|VinMart+":{countryCodes:["vn"],nomatch:["shop/supermarket|VinMart"],tags:{brand:"VinMart","brand:wikidata":"Q60245505","brand:wikipedia":"vi:VinMart",name:"VinMart+",shop:"convenience"}},"shop/convenience|Vival":{countryCodes:["fr","pe"],matchTags:["shop/supermarket"],tags:{brand:"Vival","brand:wikidata":"Q7937525","brand:wikipedia":"en:Vival (shop)",name:"Vival",shop:"convenience"}},"shop/convenience|Volg":{tags:{brand:"Volg",name:"Volg",shop:"convenience"}},"shop/convenience|Wawa":{nomatch:["amenity/fuel|Wawa"],tags:{brand:"Wawa","brand:wikidata":"Q5936320","brand:wikipedia":"en:Wawa (company)",name:"Wawa",shop:"convenience"}},"shop/convenience|Weltladen":{countryCodes:["at","ch","de"],tags:{brand:"Weltladen","brand:wikidata":"Q1640782","brand:wikipedia":"de:Weltladen",name:"Weltladen",shop:"convenience"}},"shop/convenience|Woolworths Petrol":{countryCodes:["au"],nomatch:["amenity/fuel|Woolworths Petrol"],tags:{brand:"Caltex","brand:wikidata":"Q5023980","brand:wikipedia":"en:Caltex Woolworths",name:"Woolworths Petrol",shop:"convenience"}},"shop/convenience|abc~(Poland)":{countryCodes:["pl"],matchTags:["shop/supermarket"],nomatch:["amenity/fuel|ABC"],tags:{brand:"abc","brand:wikidata":"Q11683985","brand:wikipedia":"pl:Abc (sieć handlowa)",name:"abc",shop:"convenience"}},"shop/convenience|ampm":{tags:{brand:"ampm","brand:wikidata":"Q306960","brand:wikipedia":"en:Ampm",name:"ampm",shop:"convenience"}},"shop/convenience|miniピアゴ":{countryCodes:["jp"],matchNames:["ミニピアゴ"],tags:{brand:"miniピアゴ","brand:en":"mini Piago","brand:ja":"miniピアゴ","brand:wikidata":"Q11188499","brand:wikipedia":"ja:Miniピアゴ",name:"miniピアゴ","name:en":"mini Piago","name:ja":"miniピアゴ",shop:"convenience"}},"shop/convenience|Żabka":{countryCodes:["pl"],tags:{brand:"Żabka","brand:wikidata":"Q2589061","brand:wikipedia":"pl:Żabka (sieć sklepów)",name:"Żabka",shop:"convenience"}},"shop/convenience|АВ Daily":{countryCodes:["ru"],tags:{brand:"АВ Daily",name:"АВ Daily",shop:"convenience"}},"shop/convenience|АТБ":{tags:{brand:"АТБ",name:"АТБ",shop:"convenience"}},"shop/convenience|Абсолют":{tags:{brand:"Абсолют",name:"Абсолют",shop:"convenience"}},"shop/convenience|Авоська":{tags:{brand:"Авоська",name:"Авоська",shop:"convenience"}},"shop/convenience|Агрокомплекс":{countryCodes:["ru"],tags:{brand:"Агрокомплекс",name:"Агрокомплекс",shop:"convenience"}},"shop/convenience|Альянс":{countryCodes:["by","kg","ru","ua"],tags:{brand:"Альянс",name:"Альянс",shop:"convenience"}},"shop/convenience|Апельсин":{countryCodes:["by","kg","kz","ru","ua"],tags:{brand:"Апельсин",name:"Апельсин",shop:"convenience"}},"shop/convenience|Ассорти":{countryCodes:["by","kg","kz","ru","ua"],tags:{brand:"Ассорти",name:"Ассорти",shop:"convenience"}},"shop/convenience|Березка":{countryCodes:["by","kz","ru","ua"],tags:{brand:"Березка",name:"Березка",shop:"convenience"}},"shop/convenience|Береке":{countryCodes:["kg","kz"],tags:{brand:"Береке",name:"Береке",shop:"convenience"}},"shop/convenience|Берёзка":{tags:{brand:"Берёзка",name:"Берёзка",shop:"convenience"}},"shop/convenience|Бриз":{countryCodes:["by","kz","ru","ua"],tags:{brand:"Бриз",name:"Бриз",shop:"convenience"}},"shop/convenience|Валентина":{countryCodes:["by","kz","ru","ua"],tags:{brand:"Валентина",name:"Валентина",shop:"convenience"}},"shop/convenience|Везунчик":{countryCodes:["ru","ua"],tags:{brand:"Везунчик",name:"Везунчик",shop:"convenience"}},"shop/convenience|Верный":{tags:{brand:"Верный",name:"Верный",shop:"convenience"}},"shop/convenience|ВкусВилл":{countryCodes:["ru"],tags:{brand:"ВкусВилл","brand:wikidata":"Q57271676","brand:wikipedia":"ru:Вкусвилл",name:"ВкусВилл",shop:"convenience"}},"shop/convenience|Гастроном":{tags:{brand:"Гастроном",name:"Гастроном",shop:"convenience"}},"shop/convenience|Гермес":{tags:{brand:"Гермес",name:"Гермес",shop:"convenience"}},"shop/convenience|Гроздь":{nomatch:["shop/supermarketk|Гроздь"],tags:{brand:"Гроздь","brand:wikidata":"Q21638412","brand:wikipedia":"ru:Гроздь (сеть магазинов)",name:"Гроздь",shop:"convenience"}},"shop/convenience|Гурман":{tags:{brand:"Гурман",name:"Гурман",shop:"convenience"}},"shop/convenience|Доброном":{countryCodes:["by","ru"],tags:{brand:"Доброном","brand:wikidata":"Q2565040","brand:wikipedia":"be:Eurotorg",name:"Доброном",shop:"convenience"}},"shop/convenience|Добрый":{countryCodes:["by","ru"],tags:{brand:"Добрый",name:"Добрый",shop:"convenience"}},"shop/convenience|Дружба":{countryCodes:["by","ru","ua"],tags:{brand:"Дружба",name:"Дружба",shop:"convenience"}},"shop/convenience|Елена":{tags:{brand:"Елена",name:"Елена",shop:"convenience"}},"shop/convenience|Ермолино":{countryCodes:["ru","ua"],tags:{brand:"Ермолино",name:"Ермолино",shop:"convenience"}},"shop/convenience|Ивушка":{countryCodes:["by","ru"],tags:{brand:"Ивушка",name:"Ивушка",shop:"convenience"}},"shop/convenience|КазМунайГаз":{nomatch:["amenity/fuel|КазМунайГаз"],tags:{brand:"КазМунайГаз",name:"КазМунайГаз",shop:"convenience"}},"shop/convenience|Каштан":{countryCodes:["by","ru","ua"],tags:{brand:"Каштан",name:"Каштан",shop:"convenience"}},"shop/convenience|Квартал":{tags:{brand:"Квартал",name:"Квартал",shop:"convenience"}},"shop/convenience|Кооператор":{countryCodes:["by","kz","ru","ua"],tags:{brand:"Кооператор",name:"Кооператор",shop:"convenience"}},"shop/convenience|Копеечка":{countryCodes:["by","ru","ua"],tags:{brand:"Копеечка",name:"Копеечка",shop:"convenience"}},"shop/convenience|Копейка":{countryCodes:["by","ru","ua"],tags:{brand:"Копейка","brand:en":"Kopeyka","brand:wikidata":"Q1783878","brand:wikipedia":"en:Kopeyka (supermarket)",name:"Копейка","name:en":"Kopeyka",shop:"convenience"}},"shop/convenience|Корзинка":{countryCodes:["by","kz","ru","ua"],tags:{brand:"Корзинка",name:"Корзинка",shop:"convenience"}},"shop/convenience|Кулинария":{tags:{brand:"Кулинария",name:"Кулинария",shop:"convenience"}},"shop/convenience|Лакомка":{tags:{brand:"Лакомка",name:"Лакомка",shop:"convenience"}},"shop/convenience|Лукойл":{nomatch:["amenity/fuel|Лукойл"],tags:{brand:"Лукойл",name:"Лукойл",shop:"convenience"}},"shop/convenience|Луч":{countryCodes:["by","kz","ru","ua"],tags:{brand:"Луч",name:"Луч",shop:"convenience"}},"shop/convenience|Любава":{countryCodes:["by","kz","ru","ua"],tags:{brand:"Любава",name:"Любава",shop:"convenience"}},"shop/convenience|Магазин":{tags:{brand:"Магазин",name:"Магазин",shop:"convenience"}},"shop/convenience|Магнит":{matchNames:["магнит у дома"],nomatch:["shop/cosmetics|Магнит Косметик","shop/supermarket|Магнит"],tags:{brand:"Магнит","brand:en":"Magnit","brand:wikidata":"Q940518","brand:wikipedia":"ru:Магнит (сеть магазинов)",name:"Магнит","name:en":"Magnit",shop:"convenience"}},"shop/convenience|Мария-Ра":{countryCodes:["ru"],nomatch:["shop/supermarket|Мария-Ра"],tags:{brand:"Мария-Ра","brand:wikidata":"Q4281631","brand:wikipedia":"ru:Мария-Ра",name:"Мария-Ра",shop:"convenience"}},"shop/convenience|Маяк":{countryCodes:["kz","ru","ua"],tags:{brand:"Маяк",name:"Маяк",shop:"convenience"}},"shop/convenience|Меркурий":{tags:{brand:"Меркурий",name:"Меркурий",shop:"convenience"}},"shop/convenience|Монетка":{tags:{brand:"Монетка",name:"Монетка",shop:"convenience"}},"shop/convenience|Мрія":{countryCodes:["ua"],tags:{brand:"Мрія",name:"Мрія",shop:"convenience"}},"shop/convenience|Ника":{countryCodes:["by","kz","ru","ua"],tags:{brand:"Ника",name:"Ника",shop:"convenience"}},"shop/convenience|Оазис":{tags:{brand:"Оазис",name:"Оазис",shop:"convenience"}},"shop/convenience|Околица":{countryCodes:["by","kz","ru","ua"],tags:{brand:"Околица",name:"Околица",shop:"convenience"}},"shop/convenience|Парус":{countryCodes:["by","kz","ru","ua"],tags:{brand:"Парус",name:"Парус",shop:"convenience"}},"shop/convenience|Пеликан":{countryCodes:["by","ru"],tags:{brand:"Пеликан",name:"Пеликан",shop:"convenience"}},"shop/convenience|Радуга":{tags:{brand:"Радуга",name:"Радуга",shop:"convenience"}},"shop/convenience|Русь":{countryCodes:["kz","ru","ua"],tags:{brand:"Русь",name:"Русь",shop:"convenience"}},"shop/convenience|Сельпо":{countryCodes:["kz","ru"],tags:{brand:"Сельпо","brand:wikidata":"Q4419434","brand:wikipedia":"ru:Сильпо",name:"Сельпо",shop:"convenience"}},"shop/convenience|Сказка":{tags:{brand:"Сказка",name:"Сказка",shop:"convenience"}},"shop/convenience|Солнышко":{countryCodes:["kz","ru","ua"],tags:{brand:"Солнышко",name:"Солнышко",shop:"convenience"}},"shop/convenience|Тройка":{countryCodes:["kz","ru","ua"],tags:{brand:"Тройка",name:"Тройка",shop:"convenience"}},"shop/convenience|У Палыча":{countryCodes:["ru"],tags:{brand:"У Палыча",name:"У Палыча",shop:"convenience"}},"shop/convenience|Фасоль":{countryCodes:["ru","ua"],tags:{brand:"Фасоль",name:"Фасоль",shop:"convenience"}},"shop/convenience|Фортуна":{tags:{brand:"Фортуна",name:"Фортуна",shop:"convenience"}},"shop/convenience|Хуторок":{tags:{brand:"Хуторок",name:"Хуторок",shop:"convenience"}},"shop/convenience|Эдем":{countryCodes:["by","ru","ua"],tags:{brand:"Эдем",name:"Эдем",shop:"convenience"}},"shop/convenience|Юбилейный":{countryCodes:["by","kz","ru"],tags:{brand:"Юбилейный",name:"Юбилейный",shop:"convenience"}},"shop/convenience|Ярче":{countryCodes:["ru"],tags:{brand:"Ярче",name:"Ярче",shop:"convenience"}},"shop/convenience|アンスリー":{countryCodes:["jp"],tags:{brand:"アンスリー","brand:en":"Ansuri","brand:ja":"アンスリー","brand:wikidata":"Q17192555","brand:wikipedia":"ja:アンスリー",name:"アンスリー","name:en":"Ansuri","name:ja":"アンスリー",shop:"convenience"}},"shop/convenience|サンクス":{countryCodes:["jp"],tags:{brand:"サンクス","brand:en":"Sunkus","brand:ja":"サンクス","brand:wikidata":"Q16141064","brand:wikipedia":"ja:サークルKサンクス",name:"サンクス","name:en":"Sunkus","name:ja":"サンクス",shop:"convenience"}},"shop/convenience|サークルK":{countryCodes:["jp"],tags:{brand:"サークルK","brand:en":"Circle K","brand:ja":"サークルK","brand:wikidata":"Q3268010","brand:wikipedia":"en:Circle K",name:"サークルK","name:en":"Circle K","name:ja":"サークルK",shop:"convenience"}},"shop/convenience|スリーエフ":{countryCodes:["jp"],tags:{brand:"スリーエフ","brand:en":"Three F","brand:ja":"スリーエフ","brand:wikidata":"Q11313419","brand:wikipedia":"ja:スリーエフ",name:"スリーエフ","name:en":"Three F","name:ja":"スリーエフ",shop:"convenience"}},"shop/convenience|セイコーマート":{countryCodes:["jp"],tags:{brand:"セイコーマート","brand:en":"Seicomart","brand:ja":"セイコーマート","brand:wikidata":"Q11314123","brand:wikipedia":"ja:セイコーマート",name:"セイコーマート","name:en":"Seicomart","name:ja":"セイコーマート",shop:"convenience"}},"shop/convenience|セブン-イレブン":{countryCodes:["jp"],matchNames:["セブンイレブン(7-11)","セブンイレブン(seven-eleven)"],tags:{brand:"セブン-イレブン","brand:en":"7-Eleven","brand:ja":"セブン-イレブン","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"セブン-イレブン","name:en":"7-Eleven","name:ja":"セブン-イレブン","official_name:en":"Seven-Eleven",operator:"株式会社セブン&アイ・ホールディングス","operator:en":"Seven & I Holdings Co., Ltd.","operator:wikidata":"Q639447","operator:wikipedia":"en:Seven & I Holdings Co.",shop:"convenience"}},"shop/convenience|セーブオン":{countryCodes:["jp"],tags:{brand:"セーブオン","brand:en":"Save On","brand:ja":"セーブオン","brand:wikidata":"Q11314868","brand:wikipedia":"ja:セーブオン",name:"セーブオン","name:en":"Save On","name:ja":"セーブオン",shop:"convenience"}},"shop/convenience|デイリーヤマザキ":{countryCodes:["jp"],tags:{brand:"デイリーヤマザキ","brand:en":"Daily Yamazaki","brand:ja":"デイリーヤマザキ","brand:wikidata":"Q5209392","brand:wikipedia":"en:Daily Yamazaki",name:"デイリーヤマザキ","name:en":"Daily Yamazaki","name:ja":"デイリーヤマザキ",shop:"convenience"}},"shop/convenience|ナチュラルローソン":{countryCodes:["jp"],tags:{brand:"ナチュラルローソン","brand:en":"NATURAL LAWSON","brand:ja":"ナチュラルローソン","brand:wikidata":"Q11323850","brand:wikipedia":"ja:ナチュラルローソン",name:"ナチュラルローソン","name:en":"Natural Lawson","name:ja":"ナチュラルローソン",shop:"convenience"}},"shop/convenience|ファミリーマート":{countryCodes:["jp"],tags:{brand:"ファミリーマート","brand:en":"FamilyMart","brand:ja":"ファミリーマート","brand:wikidata":"Q1191685","brand:wikipedia":"en:FamilyMart",name:"ファミリーマート","name:en":"FamilyMart","name:ja":"ファミリーマート",shop:"convenience"}},"shop/convenience|ポプラ":{countryCodes:["jp"],tags:{brand:"ポプラ","brand:en":"Poplar","brand:ja":"ポプラ","brand:wikidata":"Q7229380","brand:wikipedia":"ja:ポプラ (コンビニエンスストア)",name:"ポプラ","name:en":"Poplar","name:ja":"ポプラ",shop:"convenience"}},"shop/convenience|ミニストップ":{countryCodes:["jp"],tags:{brand:"ミニストップ","brand:en":"Ministop","brand:ja":"ミニストップ","brand:wikidata":"Q1038929","brand:wikipedia":"ja:ミニストップ",name:"ミニストップ","name:en":"Ministop","name:ja":"ミニストップ",shop:"convenience"}},"shop/convenience|ヤマザキショップ":{countryCodes:["jp"],tags:{brand:"ヤマザキショップ","brand:ja":"ヤマザキショップ","brand:wikidata":"Q11345131","brand:wikipedia":"ja:ヤマザキショップ",name:"ヤマザキショップ","name:en":"Yamazaki Shop","name:ja":"ヤマザキショップ",shop:"convenience"}},"shop/convenience|ローソン":{countryCodes:["jp"],matchNames:["ローソン"],tags:{brand:"ローソン","brand:en":"LAWSON","brand:ja":"ローソン","brand:wikidata":"Q1557223","brand:wikipedia":"ja:ローソン",name:"ローソン","name:en":"Lawson","name:ja":"ローソン",shop:"convenience"}},"shop/convenience|ローソンストア100":{countryCodes:["jp"],tags:{brand:"ローソンストア100","brand:en":"LAWSON STORE 100","brand:ja":"ローソンストア100","brand:wikidata":"Q11350960","brand:wikipedia":"ja:ローソンストア100",name:"ローソンストア100","name:en":"Lawson Store 100","name:ja":"ローソンストア100",shop:"convenience"}},"shop/convenience|ローソン・スリーエフ":{countryCodes:["jp"],matchNames:["lawson+スリーエフ","ローソン・スリーエフ"],tags:{brand:"ローソン・スリーエフ","brand:en":"LAWSON・Three F","brand:ja":"ローソン・スリーエフ","brand:wikidata":"Q24866804","brand:wikipedia":"ja:ローソン・スリーエフ",name:"ローソン・スリーエフ","name:en":"Lawson・Three F","name:ja":"ローソン・スリーエフ",operator:"株式会社エル・ティーエフ","operator:en":"L・TF Co., Ltd.",shop:"convenience"}},"shop/convenience|全家":{countryCodes:["cn","tw"],tags:{brand:"全家","brand:en":"FamilyMart","brand:wikidata":"Q1191685","brand:wikipedia":"en:FamilyMart",name:"全家","name:en":"FamilyMart",shop:"convenience"}},"shop/convenience|全家便利商店":{countryCodes:["tw"],tags:{brand:"全家便利商店","brand:wikidata":"Q10891564","brand:wikipedia":"zh:全家便利商店",name:"全家便利商店",shop:"convenience"}},"shop/convenience|萊爾富":{countryCodes:["tw"],tags:{brand:"萊爾富","brand:wikidata":"Q11326216","brand:wikipedia":"zh:萊爾富",name:"萊爾富",shop:"convenience"}},"shop/convenience|미니스톱":{countryCodes:["kr"],tags:{brand:"미니스톱","brand:ko":"미니스톱",name:"미니스톱","name:ko":"미니스톱",shop:"convenience"}},"shop/convenience|세븐일레븐":{countryCodes:["kr"],tags:{brand:"세븐일레븐","brand:en":"7-Eleven","brand:ko":"세븐일레븐","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"세븐일레븐","name:en":"7-Eleven","name:ko":"세븐일레븐",shop:"convenience"}},"shop/copyshop|Epicier":{tags:{brand:"Epicier",name:"Epicier",shop:"copyshop"}},"shop/copyshop|FedEx Office":{countryCodes:["us"],matchNames:["fedex office print and ship center"],matchTags:["amenity/post_office"],tags:{brand:"FedEx Office","brand:wikidata":"Q474379","brand:wikipedia":"en:FedEx Office",name:"FedEx Office",shop:"copyshop"}},"shop/copyshop|Photocopie":{tags:{brand:"Photocopie",name:"Photocopie",shop:"copyshop"}},"shop/cosmetics|Eva":{countryCodes:["ru","ua"],tags:{brand:"Eva",name:"Eva",shop:"cosmetics"}},"shop/cosmetics|KIKO Milano":{countryCodes:["be","fr","gb","nl"],matchNames:["kiko"],tags:{brand:"KIKO Milano","brand:wikidata":"Q3812045","brand:wikipedia":"it:KIKO",name:"KIKO Milano",shop:"cosmetics"}},"shop/cosmetics|Kiehl's":{countryCodes:["ca","us"],matchNames:["kiehl's since 1851"],tags:{brand:"Kiehl's","brand:wikidata":"Q3196447","brand:wikipedia":"en:Kiehl's",name:"Kiehl's",shop:"cosmetics"}},"shop/cosmetics|L'Occitane":{matchNames:["l'occitane en provence"],tags:{brand:"L'Occitane","brand:wikidata":"Q1880676","brand:wikipedia":"en:L'Occitane en Provence",name:"L'Occitane",shop:"cosmetics"}},"shop/cosmetics|Lush":{tags:{brand:"Lush","brand:wikidata":"Q1585448","brand:wikipedia":"en:Lush (company)",name:"Lush",shop:"cosmetics"}},"shop/cosmetics|MAC Cosmetics":{countryCodes:["ca","de","us"],matchNames:["mac"],tags:{brand:"MAC Cosmetics","brand:wikidata":"Q2624442","brand:wikipedia":"en:MAC Cosmetics",name:"MAC Cosmetics",shop:"cosmetics",short_name:"M·A·C"}},"shop/cosmetics|Mixit":{countryCodes:["by","kz","ru"],tags:{brand:"Mixit",name:"Mixit",shop:"cosmetics"}},"shop/cosmetics|Nocibé":{countryCodes:["fr"],tags:{brand:"Nocibé","brand:wikidata":"Q3342592","brand:wikipedia":"fr:Nocibé",name:"Nocibé",shop:"cosmetics"}},"shop/cosmetics|Origins":{countryCodes:["us"],tags:{brand:"Origins","brand:wikidata":"Q6643229","brand:wikipedia":"en:Origins (cosmetics)",name:"Origins",shop:"cosmetics"}},"shop/cosmetics|Rituals":{tags:{brand:"Rituals",name:"Rituals",shop:"cosmetics"}},"shop/cosmetics|Sephora":{tags:{brand:"Sephora","brand:wikidata":"Q2408041","brand:wikipedia":"en:Sephora",name:"Sephora",shop:"cosmetics"}},"shop/cosmetics|The Body Shop":{matchTags:["shop/beauty","shop/chemist"],tags:{brand:"The Body Shop","brand:wikidata":"Q837851","brand:wikipedia":"en:The Body Shop",name:"The Body Shop",shop:"cosmetics"}},"shop/cosmetics|Vente de Cosmétique":{countryCodes:["ci"],tags:{brand:"Vente de Cosmétique",name:"Vente de Cosmétique",shop:"cosmetics"}},"shop/cosmetics|Л'Этуаль":{countryCodes:["ru"],tags:{brand:"Л'Этуаль","brand:wikidata":"Q18400706","brand:wikipedia":"ru:Л’Этуаль",name:"Л'Этуаль",shop:"cosmetics"}},"shop/cosmetics|Магнит Косметик":{countryCodes:["ru"],matchTags:["shop/chemist"],nomatch:["shop/convenience|Магнит","shop/supermarket|Магнит"],tags:{brand:"Магнит Косметик","brand:en":"Magnit Cosmetics","brand:wikidata":"Q940518","brand:wikipedia":"ru:Магнит (сеть магазинов)",name:"Магнит Косметик","name:en":"Magnit Cosmetics",shop:"cosmetics"}},"shop/cosmetics|Подружка":{countryCodes:["ru","ua"],tags:{brand:"Подружка",name:"Подружка",shop:"cosmetics"}},"shop/cosmetics|Чистый дом":{countryCodes:["ru","ua"],tags:{brand:"Чистый дом",name:"Чистый дом",shop:"cosmetics"}},"shop/country_store|Atwoods":{countryCodes:["us"],tags:{brand:"Atwoods","brand:wikidata":"Q4818874","brand:wikipedia":"en:Atwoods",name:"Atwoods",shop:"country_store"}},"shop/country_store|Blain's Farm & Fleet":{countryCodes:["us"],matchTags:["shop/department_store"],tags:{brand:"Blain's Farm & Fleet","brand:wikidata":"Q4923906","brand:wikipedia":"en:Blain's Farm & Fleet",name:"Blain's Farm & Fleet",shop:"country_store"}},"shop/country_store|Bomgaars":{countryCodes:["us"],tags:{brand:"Bomgaars","brand:wikidata":"Q22059070","brand:wikipedia":"en:Bomgaars",name:"Bomgaars",shop:"country_store"}},"shop/country_store|Fleet Farm":{countryCodes:["us"],matchNames:["mills fleet farm"],tags:{brand:"Fleet Farm","brand:wikidata":"Q6859973","brand:wikipedia":"en:Fleet Farm",name:"Fleet Farm",shop:"country_store"}},"shop/country_store|Grange Co-op":{countryCodes:["us"],tags:{brand:"Grange Co-op","brand:wikidata":"Q5595639","brand:wikipedia":"en:Grange Cooperative",name:"Grange Co-op",shop:"country_store"}},"shop/country_store|Home of Economy":{countryCodes:["us"],tags:{brand:"Home of Economy","brand:wikidata":"Q5889100","brand:wikipedia":"en:Home of Economy",name:"Home of Economy",shop:"country_store"}},"shop/country_store|Norbys Farm Fleet":{countryCodes:["us"],tags:{brand:"Norbys Farm Fleet","brand:wikidata":"Q7050461","brand:wikipedia":"en:Norby's Farm Fleet",name:"Norbys Farm Fleet",shop:"country_store"}},"shop/country_store|Orscheln Farm & Home":{countryCodes:["us"],tags:{brand:"Orscheln Farm & Home","brand:wikidata":"Q22060331","brand:wikipedia":"en:Orscheln Farm & Home",name:"Orscheln Farm & Home",shop:"country_store"}},"shop/country_store|Peavey Mart":{countryCodes:["ca"],tags:{brand:"Peavey Mart","brand:wikidata":"Q7158483","brand:wikipedia":"en:Peavey Mart",name:"Peavey Mart",shop:"country_store"}},"shop/country_store|Rural King":{countryCodes:["us"],tags:{brand:"Rural King","brand:wikidata":"Q7380525","brand:wikipedia":"en:Rural King",name:"Rural King",shop:"country_store"}},"shop/country_store|TSC Stores":{countryCodes:["ca"],tags:{brand:"TSC Stores","brand:wikidata":"Q62720230",name:"TSC Stores",shop:"country_store"}},"shop/country_store|Theisen's":{countryCodes:["us"],tags:{brand:"Theisen's","brand:wikidata":"Q7777850","brand:wikipedia":"en:Theisen's",name:"Theisen's",shop:"country_store"}},"shop/country_store|Tractor Supply Company":{countryCodes:["us"],tags:{brand:"Tractor Supply Company","brand:wikidata":"Q15109925","brand:wikipedia":"en:Tractor Supply Company",name:"Tractor Supply Company",shop:"country_store"}},"shop/country_store|Wynnstay":{countryCodes:["gb"],tags:{brand:"Wynnstay","brand:wikidata":"Q63016351",name:"Wynnstay",shop:"country_store"}},"shop/craft|Hobby Lobby":{countryCodes:["in","us"],tags:{brand:"Hobby Lobby","brand:wikidata":"Q5874938","brand:wikipedia":"en:Hobby Lobby",name:"Hobby Lobby",shop:"craft"}},"shop/craft|Hobbycraft":{countryCodes:["gb"],matchTags:["shop/art"],tags:{brand:"Hobbycraft","brand:wikidata":"Q16984508","brand:wikipedia":"en:Hobbycraft",name:"Hobbycraft",shop:"craft"}},"shop/craft|Jo-Ann":{countryCodes:["us"],tags:{brand:"Jo-Ann","brand:wikidata":"Q6203968","brand:wikipedia":"en:Jo-Ann Stores",name:"Jo-Ann",shop:"craft"}},"shop/craft|Michaels":{countryCodes:["ca","us"],tags:{brand:"Michaels","brand:wikidata":"Q6835667","brand:wikipedia":"en:Michaels",name:"Michaels",shop:"craft"}},"shop/deli|ほっともっと":{countryCodes:["jp"],nomatch:["amenity/fast_food|ほっともっと"],tags:{brand:"ほっともっと","brand:en":"Hotto Motto","brand:ja":"ほっともっと","brand:wikidata":"Q10850949","brand:wikipedia":"ja:ほっともっと",name:"ほっともっと","name:en":"Hotto Motto","name:ja":"ほっともっと",shop:"deli"}},"shop/deli|京樽":{countryCodes:["jp"],matchTags:["amenity/fast_food"],tags:{brand:"京樽","brand:en":"Kyotaru","brand:ja":"京樽","brand:wikidata":"Q11374503","brand:wikipedia":"ja:京樽",name:"京樽","name:en":"Kyotaru","name:ja":"京樽",shop:"deli"}},"shop/department_store|Barneys New York":{countryCodes:["us"],matchNames:["barneys"],tags:{brand:"Barneys New York","brand:wikidata":"Q59465","brand:wikipedia":"en:Barneys New York",name:"Barneys New York",shop:"department_store"}},"shop/department_store|Belk":{countryCodes:["us"],tags:{brand:"Belk","brand:wikidata":"Q127428","brand:wikipedia":"en:Belk",name:"Belk",shop:"department_store"}},"shop/department_store|Bi-Mart":{countryCodes:["us"],tags:{brand:"Bi-Mart","brand:wikidata":"Q4902331","brand:wikipedia":"en:Bi-Mart",name:"Bi-Mart",shop:"department_store"}},"shop/department_store|Big Lots":{countryCodes:["us"],matchTags:["shop/variety_store"],tags:{brand:"Big Lots","brand:wikidata":"Q4905973","brand:wikipedia":"en:Big Lots",name:"Big Lots",shop:"department_store"}},"shop/department_store|Big W":{countryCodes:["au"],tags:{brand:"Big W","brand:wikidata":"Q4906646","brand:wikipedia":"en:Big W",name:"Big W",shop:"department_store"}},"shop/department_store|Canadian Tire":{countryCodes:["ca"],matchTags:["shop/doityourself"],nomatch:["amenity/fuel|Canadian Tire"],tags:{brand:"Canadian Tire","brand:wikidata":"Q1032400","brand:wikipedia":"en:Canadian Tire",name:"Canadian Tire",shop:"department_store"}},"shop/department_store|Casas Bahia":{countryCodes:["br"],tags:{brand:"Casas Bahia","brand:wikidata":"Q5048048","brand:wikipedia":"en:Casas Bahia",name:"Casas Bahia",shop:"department_store"}},"shop/department_store|Century 21":{countryCodes:["us"],matchNames:["c21"],nomatch:["office/estate_agent|Century 21"],tags:{brand:"Century 21","brand:wikidata":"Q5063125","brand:wikipedia":"en:Century 21 (department store)",name:"Century 21",shop:"department_store"}},"shop/department_store|Coppel":{tags:{brand:"Coppel","brand:wikidata":"Q2497795","brand:wikipedia":"en:Coppel",name:"Coppel",shop:"department_store"}},"shop/department_store|Debenhams":{tags:{brand:"Debenhams","brand:wikidata":"Q1181484","brand:wikipedia":"en:Debenhams",name:"Debenhams",shop:"department_store"}},"shop/department_store|Dillard's":{countryCodes:["us"],tags:{brand:"Dillard's","brand:wikidata":"Q844805","brand:wikipedia":"en:Dillard's",name:"Dillard's",shop:"department_store"}},"shop/department_store|El Corte Inglés":{countryCodes:["es"],tags:{brand:"El Corte Inglés","brand:wikidata":"Q623133","brand:wikipedia":"en:El Corte Inglés",name:"El Corte Inglés",shop:"department_store"}},"shop/department_store|Falabella":{matchNames:["saga falabella"],nomatch:["amenity/bank|Banco Falabella"],tags:{brand:"Falabella","brand:wikidata":"Q5135229","brand:wikipedia":"en:Falabella (retail store)",name:"Falabella",shop:"department_store"}},"shop/department_store|Galeria Kaufhof":{countryCodes:["de"],tags:{brand:"Galeria Kaufhof","brand:wikidata":"Q322598","brand:wikipedia":"en:Galeria Kaufhof",name:"Galeria Kaufhof",shop:"department_store"}},"shop/department_store|Giant Tiger":{countryCodes:["ca"],tags:{brand:"Giant Tiger","brand:wikidata":"Q5558429","brand:wikipedia":"en:Giant Tiger",name:"Giant Tiger",shop:"department_store"}},"shop/department_store|Gordmans":{tags:{brand:"Gordmans","brand:wikidata":"Q5584725","brand:wikipedia":"en:Gordmans",name:"Gordmans",shop:"department_store"}},"shop/department_store|HEMA":{tags:{brand:"HEMA","brand:wikidata":"Q903805","brand:wikipedia":"en:HEMA (store)",name:"HEMA",shop:"department_store"}},"shop/department_store|Harvey Norman":{countryCodes:["au","nz"],tags:{brand:"Harvey Norman","brand:wikidata":"Q4040441","brand:wikipedia":"en:Harvey Norman",name:"Harvey Norman",shop:"department_store"}},"shop/department_store|Havan":{countryCodes:["br"],tags:{brand:"Havan","brand:wikidata":"Q61968827",name:"Havan",shop:"department_store"}},"shop/department_store|JCPenney":{countryCodes:["us"],tags:{brand:"JCPenney","brand:wikidata":"Q920037","brand:wikipedia":"en:J. C. Penney",name:"JCPenney",shop:"department_store"}},"shop/department_store|John Lewis":{countryCodes:["gb"],tags:{brand:"John Lewis","brand:wikidata":"Q1918981","brand:wikipedia":"en:John Lewis & Partners",name:"John Lewis",shop:"department_store"}},"shop/department_store|Karstadt":{countryCodes:["de"],tags:{brand:"Karstadt","brand:wikidata":"Q182910","brand:wikipedia":"en:Karstadt",name:"Karstadt",shop:"department_store"}},"shop/department_store|Kmart~(Australia)":{countryCodes:["au"],matchTags:["shop/supermarket"],nomatch:["shop/department_store|Kmart~(USA)"],tags:{brand:"Kmart","brand:wikidata":"Q6421682","brand:wikipedia":"en:Kmart Australia",name:"Kmart",shop:"department_store"}},"shop/department_store|Kmart~(USA)":{countryCodes:["us"],matchTags:["shop/supermarket"],nomatch:["shop/department_store|Kmart~(Australia)"],tags:{brand:"Kmart","brand:wikidata":"Q1753080","brand:wikipedia":"en:Kmart",name:"Kmart",shop:"department_store"}},"shop/department_store|Kohl's":{countryCodes:["us"],matchTags:["shop/clothes"],tags:{brand:"Kohl's","brand:wikidata":"Q967265","brand:wikipedia":"en:Kohl's",name:"Kohl's",shop:"department_store"}},"shop/department_store|Lojas Americanas":{countryCodes:["br"],tags:{brand:"Lojas Americanas","brand:wikidata":"Q3064093","brand:wikipedia":"en:Lojas Americanas",name:"Lojas Americanas",shop:"department_store"}},"shop/department_store|Lord & Taylor":{countryCodes:["us"],matchNames:["lord and taylor"],tags:{brand:"Lord & Taylor","brand:wikidata":"Q2749082","brand:wikipedia":"en:Lord & Taylor",name:"Lord & Taylor",shop:"department_store"}},"shop/department_store|Lotte Department Store":{matchNames:["lotte"],tags:{brand:"Lotte Department Store","brand:wikidata":"Q489905","brand:wikipedia":"en:Lotte Department Store",name:"Lotte Department Store",shop:"department_store"}},"shop/department_store|Macy's":{tags:{brand:"Macy's","brand:wikidata":"Q629269","brand:wikipedia":"en:Macy's",name:"Macy's",shop:"department_store"}},"shop/department_store|Marks & Spencer":{tags:{brand:"Marks & Spencer","brand:wikidata":"Q714491","brand:wikipedia":"en:Marks & Spencer",name:"Marks & Spencer",shop:"department_store"}},"shop/department_store|Marshalls":{matchTags:["shop/clothes"],tags:{brand:"Marshalls","brand:wikidata":"Q15903261","brand:wikipedia":"en:Marshalls",name:"Marshalls",shop:"department_store"}},"shop/department_store|Myer":{countryCodes:["au"],tags:{brand:"Myer","brand:wikidata":"Q1110323","brand:wikipedia":"en:Myer",name:"Myer",shop:"department_store"}},"shop/department_store|Neiman Marcus":{countryCodes:["us"],tags:{brand:"Neiman Marcus","brand:wikidata":"Q743497","brand:wikipedia":"en:Neiman Marcus",name:"Neiman Marcus",shop:"department_store"}},"shop/department_store|Nordstrom":{countryCodes:["ca","us"],tags:{brand:"Nordstrom","brand:wikidata":"Q174310","brand:wikipedia":"en:Nordstrom",name:"Nordstrom",shop:"department_store"}},"shop/department_store|Oechsle":{countryCodes:["pe"],tags:{brand:"Oechsle","brand:wikidata":"Q6049096","brand:wikipedia":"es:Oechsle",name:"Oechsle",shop:"department_store"}},"shop/department_store|París":{countryCodes:["cl","pe"],matchTags:["shop/clothes"],tags:{brand:"París","brand:wikidata":"Q20812805","brand:wikipedia":"en:París (retail store)",name:"París",operator:"Cencosud","operator:wikidata":"Q1053372","operator:wikipedia":"en:Cencosud",shop:"department_store"}},"shop/department_store|Ripley":{tags:{brand:"Ripley","brand:wikidata":"Q3433040","brand:wikipedia":"en:Ripley S.A.",name:"Ripley",shop:"department_store"}},"shop/department_store|Saks Fifth Avenue":{tags:{brand:"Saks Fifth Avenue","brand:wikidata":"Q2723882","brand:wikipedia":"en:Saks Fifth Avenue",name:"Saks Fifth Avenue",shop:"department_store"}},"shop/department_store|Saks Off 5th":{tags:{brand:"Saks Off 5th","brand:wikidata":"Q2723882","brand:wikipedia":"en:Saks Fifth Avenue",name:"Saks Off 5th",shop:"department_store"}},"shop/department_store|Sears":{tags:{brand:"Sears","brand:wikidata":"Q6499202","brand:wikipedia":"en:Sears",name:"Sears",shop:"department_store"}},"shop/department_store|Shopko":{tags:{brand:"Shopko","brand:wikidata":"Q7501155","brand:wikipedia":"en:Shopko",name:"Shopko",shop:"department_store"}},"shop/department_store|Stein Mart":{matchTags:["shop/clothes"],tags:{brand:"Stein Mart","brand:wikidata":"Q7606770","brand:wikipedia":"en:Stein Mart",name:"Stein Mart",shop:"department_store"}},"shop/department_store|Target~(Australia)":{countryCodes:["au"],matchTags:["shop/supermarket"],nomatch:["shop/department_store|Target~(USA)"],tags:{brand:"Target","brand:wikidata":"Q7685854","brand:wikipedia":"en:Target Australia",name:"Target",shop:"department_store"}},"shop/department_store|Target~(USA)":{countryCodes:["us"],matchTags:["shop/supermarket"],nomatch:["shop/department_store|Target~(Australia)"],tags:{brand:"Target","brand:wikidata":"Q1046951","brand:wikipedia":"en:Target Corporation",name:"Target",shop:"department_store"}},"shop/department_store|The Warehouse":{countryCodes:["nz"],tags:{brand:"The Warehouse","brand:wikidata":"Q3566291","brand:wikipedia":"en:The Warehouse Group",name:"The Warehouse",shop:"department_store"}},"shop/department_store|Walmart":{matchTags:["shop/supermarket"],tags:{brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",name:"Walmart",operator:"Walmart","operator:wikidata":"Q483551","operator:wikipedia":"en:Walmart",shop:"department_store"}},"shop/department_store|Woolworth":{countryCodes:["de"],tags:{brand:"Woolworth","brand:wikidata":"Q183538","brand:wikipedia":"de:Woolworth Deutschland",name:"Woolworth",shop:"department_store"}},"shop/department_store|Åhléns":{countryCodes:["se"],tags:{brand:"Åhléns","brand:wikidata":"Q270851","brand:wikipedia":"sv:Åhléns",name:"Åhléns",shop:"department_store"}},"shop/department_store|Épicerie":{tags:{brand:"Épicerie",name:"Épicerie",shop:"department_store"}},"shop/department_store|Евроопт Market":{tags:{brand:"Евроопт Market",name:"Евроопт Market",shop:"department_store"}},"shop/department_store|Евроопт Минимаркет":{tags:{brand:"Евроопт Минимаркет",name:"Евроопт Минимаркет",shop:"department_store"}},"shop/department_store|東急ハンズ":{countryCodes:["jp"],tags:{brand:"東急ハンズ","brand:en":"Tokyu Hands","brand:ja":"東急ハンズ","brand:wikidata":"Q859212","brand:wikipedia":"ja:東急ハンズ",name:"東急ハンズ","name:en":"Tokyu Hands","name:ja":"東急ハンズ",shop:"department_store"}},"shop/department_store|롯데백화점":{countryCodes:["kr"],tags:{brand:"롯데백화점","brand:ko":"롯데백화점","brand:wikidata":"Q489905","brand:wikipedia":"ko:롯데백화점",name:"롯데백화점","name:en":"Lotte Department Store","name:ko":"롯데백화점",shop:"department_store"}},"shop/doityourself|Ace Hardware":{tags:{brand:"Ace Hardware","brand:wikidata":"Q4672981","brand:wikipedia":"en:Ace Hardware",name:"Ace Hardware",shop:"doityourself"}},"shop/doityourself|B&Q":{tags:{brand:"B&Q","brand:wikidata":"Q707602","brand:wikipedia":"en:B&Q",name:"B&Q",shop:"doityourself"}},"shop/doityourself|Bauhaus":{tags:{brand:"Bauhaus","brand:wikidata":"Q672043","brand:wikipedia":"en:Bauhaus (company)",name:"Bauhaus",shop:"doityourself"}},"shop/doityourself|Biltema":{countryCodes:["dk","fi","no","se"],tags:{brand:"Biltema","brand:wikidata":"Q3355552","brand:wikipedia":"en:Biltema",name:"Biltema",shop:"doityourself"}},"shop/doityourself|Brico":{tags:{brand:"Brico","brand:wikidata":"Q2510786","brand:wikipedia":"en:Brico",name:"Brico",shop:"doityourself"}},"shop/doityourself|Brico Dépôt":{tags:{brand:"Brico Dépôt","brand:wikidata":"Q2889702","brand:wikipedia":"en:Brico Dépôt",name:"Brico Dépôt",shop:"doityourself"}},"shop/doityourself|Bricoman":{tags:{brand:"Bricoman","brand:wikidata":"Q2925142","brand:wikipedia":"it:Bricoman",name:"Bricoman",shop:"doityourself"}},"shop/doityourself|Bricomarché":{tags:{brand:"Bricomarché","brand:wikidata":"Q2925147","brand:wikipedia":"en:Bricomarché",name:"Bricomarché",shop:"doityourself"}},"shop/doityourself|Bricorama":{tags:{brand:"Bricorama","brand:wikidata":"Q2925146","brand:wikipedia":"en:Bricorama",name:"Bricorama",shop:"doityourself"}},"shop/doityourself|Bunnings Warehouse":{countryCodes:["au","nz"],tags:{brand:"Bunnings Warehouse","brand:wikidata":"Q4997829","brand:wikipedia":"en:Bunnings Warehouse",name:"Bunnings Warehouse",shop:"doityourself"}},"shop/doityourself|Castorama":{tags:{brand:"Castorama","brand:wikidata":"Q966971","brand:wikipedia":"en:Castorama",name:"Castorama",shop:"doityourself"}},"shop/doityourself|Chausson Matériaux":{tags:{brand:"Chausson Matériaux",name:"Chausson Matériaux",shop:"doityourself"}},"shop/doityourself|Clas Ohlson":{tags:{brand:"Clas Ohlson","brand:wikidata":"Q3356220","brand:wikipedia":"en:Clas Ohlson",name:"Clas Ohlson",shop:"doityourself"}},"shop/doityourself|Easy":{tags:{brand:"Easy","brand:wikidata":"Q5331091","brand:wikipedia":"en:Easy (store)",name:"Easy",shop:"doityourself"}},"shop/doityourself|Gamma":{tags:{brand:"Gamma","brand:wikidata":"Q2294120","brand:wikipedia":"en:Gamma (store)",name:"Gamma",shop:"doityourself"}},"shop/doityourself|Gedimat":{tags:{brand:"Gedimat",name:"Gedimat",shop:"doityourself"}},"shop/doityourself|Globus Baumarkt":{countryCodes:["de","lu"],tags:{brand:"Globus Baumarkt","brand:wikidata":"Q457503","brand:wikipedia":"de:Globus Holding",name:"Globus Baumarkt",shop:"doityourself"}},"shop/doityourself|Hagebaumarkt":{countryCodes:["at","be","ch","de","es","fr","lu","nl"],matchNames:["hagebau"],tags:{brand:"Hagebaumarkt","brand:wikidata":"Q1568279","brand:wikipedia":"de:Hagebau",name:"Hagebaumarkt",shop:"doityourself"}},"shop/doityourself|Hammer":{countryCodes:["de"],tags:{brand:"Hammer","brand:wikidata":"Q52159668","brand:wikipedia":"de:Hammer (Fachmarktkette)",name:"Hammer",shop:"doityourself"}},"shop/doityourself|Hellweg":{countryCodes:["at","de"],tags:{brand:"Hellweg","brand:wikidata":"Q1603084","brand:wikipedia":"de:Hellweg (Baumarkt)",name:"Hellweg",shop:"doityourself"}},"shop/doityourself|Home Building Centre":{countryCodes:["ca"],nomatch:["shop/hardware|Home Hardware Building Centre"],tags:{brand:"Home Hardware","brand:wikidata":"Q3139611","brand:wikipedia":"en:Home Hardware",name:"Home Building Centre",shop:"doityourself"}},"shop/doityourself|Home Depot":{countryCodes:["ca","mx","us"],matchNames:["the home depot"],tags:{brand:"Home Depot","brand:wikidata":"Q864407","brand:wikipedia":"en:The Home Depot",name:"Home Depot",shop:"doityourself"}},"shop/doityourself|Home Hardware Building Centre":{countryCodes:["ca"],matchNames:["home hardware"],nomatch:["shop/hardware|Home Hardware"],tags:{brand:"Home Hardware","brand:wikidata":"Q3139611","brand:wikipedia":"en:Home Hardware",name:"Home Hardware Building Centre",shop:"doityourself"}},"shop/doityourself|Homebase":{tags:{brand:"Homebase","brand:wikidata":"Q9293447","brand:wikipedia":"en:Homebase",name:"Homebase",shop:"doityourself"}},"shop/doityourself|Hornbach":{tags:{brand:"Hornbach","brand:wikidata":"Q685926","brand:wikipedia":"en:Hornbach (retailer)",name:"Hornbach",shop:"doityourself"}},"shop/doityourself|Hubo":{tags:{brand:"Hubo","brand:wikidata":"Q3142153","brand:wikipedia":"en:Hubo Belgium",name:"Hubo",shop:"doityourself"}},"shop/doityourself|Jewson":{countryCodes:["gb"],tags:{brand:"Jewson","brand:wikidata":"Q6190226","brand:wikipedia":"en:Jewson",name:"Jewson",shop:"doityourself"}},"shop/doityourself|Karwei":{countryCodes:["nl"],tags:{brand:"Karwei","brand:wikidata":"Q2097480","brand:wikipedia":"en:Karwei",name:"Karwei",shop:"doityourself"}},"shop/doityourself|Leroy Merlin":{tags:{brand:"Leroy Merlin","brand:wikidata":"Q889624","brand:wikipedia":"en:Leroy Merlin",name:"Leroy Merlin",shop:"doityourself"}},"shop/doityourself|Lowe's":{tags:{brand:"Lowe's","brand:wikidata":"Q1373493","brand:wikipedia":"en:Lowe's",name:"Lowe's",shop:"doityourself"}},"shop/doityourself|Menards":{tags:{brand:"Menards","brand:wikidata":"Q1639897","brand:wikipedia":"en:Menards",name:"Menards",shop:"doityourself"}},"shop/doityourself|Mr.Bricolage":{tags:{brand:"Mr.Bricolage","brand:wikidata":"Q3141657","brand:wikipedia":"fr:Mr Bricolage",name:"Mr.Bricolage",shop:"doityourself"}},"shop/doityourself|OBI":{tags:{brand:"OBI","brand:wikidata":"Q300518","brand:wikipedia":"en:Obi (store)",name:"OBI",shop:"doityourself"}},"shop/doityourself|Point P":{tags:{brand:"Point P",name:"Point P",shop:"doityourself"}},"shop/doityourself|Praktiker":{tags:{brand:"Praktiker","brand:wikidata":"Q680214","brand:wikipedia":"en:Praktiker",name:"Praktiker",shop:"doityourself"}},"shop/doityourself|Praxis":{countryCodes:["nl"],tags:{brand:"Praxis","brand:wikidata":"Q2741995","brand:wikipedia":"nl:Praxis (winkel)",name:"Praxis",shop:"doityourself"}},"shop/doityourself|Promart":{countryCodes:["pe"],tags:{brand:"Promart","brand:wikidata":"Q17626095","brand:wikipedia":"en:Promart",name:"Promart",shop:"doityourself"}},"shop/doityourself|Rona":{countryCodes:["ca"],tags:{brand:"Rona","brand:wikidata":"Q3415283","brand:wikipedia":"en:Rona, Inc.",name:"Rona",shop:"doityourself"}},"shop/doityourself|Screwfix":{tags:{brand:"Screwfix","brand:wikidata":"Q7439115","brand:wikipedia":"en:Screwfix",name:"Screwfix",shop:"doityourself"}},"shop/doityourself|Sodimac":{matchNames:["sodimac constructor"],tags:{brand:"Sodimac","brand:wikidata":"Q7553274","brand:wikipedia":"es:Sodimac",name:"Sodimac",shop:"doityourself"}},"shop/doityourself|Sonderpreis Baumarkt":{countryCodes:["de"],tags:{brand:"Sonderpreis Baumarkt",name:"Sonderpreis Baumarkt",shop:"doityourself"}},"shop/doityourself|Tekzen":{countryCodes:["tr"],tags:{brand:"Tekzen","brand:wikidata":"Q25475379","brand:wikipedia":"tr:Tekzen",name:"Tekzen",shop:"doityourself"}},"shop/doityourself|Toom Baumarkt":{countryCodes:["de"],matchNames:["toom"],tags:{brand:"Toom Baumarkt","brand:wikidata":"Q2442970","brand:wikipedia":"de:Toom Baumarkt",name:"Toom Baumarkt",shop:"doityourself"}},"shop/doityourself|Travis Perkins":{countryCodes:["gb"],tags:{brand:"Travis Perkins","brand:wikidata":"Q2450664","brand:wikipedia":"en:Travis Perkins",name:"Travis Perkins",shop:"doityourself"}},"shop/doityourself|Weldom":{tags:{brand:"Weldom","brand:wikidata":"Q16683226","brand:wikipedia":"fr:Weldom",name:"Weldom",shop:"doityourself"}},"shop/doityourself|Wickes":{countryCodes:["gb"],tags:{brand:"Wickes","brand:wikidata":"Q7998350","brand:wikipedia":"en:Wickes",name:"Wickes",shop:"doityourself"}},"shop/doityourself|jem & fix":{countryCodes:["dk"],tags:{brand:"jem & fix","brand:wikidata":"Q12319200","brand:wikipedia":"da:Jem & fix",name:"jem & fix",shop:"doityourself"}},"shop/doityourself|Леруа Мерлен":{tags:{brand:"Леруа Мерлен","brand:en":"Leroy Merlin","brand:wikidata":"Q889624","brand:wikipedia":"en:Leroy Merlin",name:"Леруа Мерлен","name:en":"Leroy Merlin",shop:"doityourself"}},"shop/doityourself|Мастер":{tags:{brand:"Мастер",name:"Мастер",shop:"doityourself"}},"shop/doityourself|カインズホーム":{countryCodes:["jp"],tags:{brand:"カインズホーム","brand:en":"Cainz Home","brand:ja":"カインズホーム","brand:wikidata":"Q11293852","brand:wikipedia":"ja:カインズ",name:"カインズホーム","name:en":"Cainz Home","name:ja":"カインズホーム",shop:"doityourself"}},"shop/doityourself|コメリ":{countryCodes:["jp"],tags:{brand:"コメリ","brand:ja":"コメリ","brand:wikidata":"Q11302690","brand:wikipedia":"ja:コメリ",name:"コメリ","name:en":"Komeri","name:ja":"コメリ",shop:"doityourself"}},"shop/doityourself|コーナン":{countryCodes:["jp"],tags:{brand:"コーナン","brand:ja":"コーナン","brand:wikidata":"Q11303403","brand:wikipedia":"ja:コーナン",name:"コーナン","name:en":"Kohnan","name:ja":"コーナン",shop:"doityourself"}},"shop/doityourself|ナフコ":{countryCodes:["jp"],tags:{brand:"ナフコ","brand:ja":"ナフコ",name:"ナフコ","name:ja":"ナフコ",shop:"doityourself"}},"shop/doors|Юркас":{tags:{brand:"Юркас",name:"Юркас",shop:"doors"}},"shop/dry_cleaning|5àsec":{tags:{brand:"5àsec","brand:wikidata":"Q2817899","brand:wikipedia":"fr:5àsec",name:"5àsec",shop:"dry_cleaning"}},"shop/dry_cleaning|Martinizing Dry Cleaning":{tags:{brand:"Martinizing Dry Cleaning","brand:wikidata":"Q6777169","brand:wikipedia":"en:Martinizing Dry Cleaning",name:"Martinizing Dry Cleaning",shop:"dry_cleaning"}},"shop/dry_cleaning|Диана":{tags:{brand:"Диана","brand:wikidata":"Q62105088",name:"Диана",shop:"dry_cleaning"}},"shop/dry_cleaning|タカケンサンシャイン":{countryCodes:["jp"],matchNames:["タカケンクリーング"],tags:{brand:"タカケンサンシャイン","brand:en":"Takaken Sunshine","brand:ja":"タカケンサンシャイン","brand:wikidata":"Q11315914","brand:wikipedia":"ja:タカケンサンシャイン",name:"タカケンサンシャイン","name:en":"Takaken Sunshine","name:ja":"タカケンサンシャイン",shop:"dry_cleaning"}},"shop/dry_cleaning|ホワイト急便":{countryCodes:["jp"],tags:{brand:"ホワイト急便","brand:en":"White Kyuubin","brand:ja":"ホワイト急便","brand:wikidata":"Q11505557","brand:wikipedia":"ja:日本さわやかグループ",name:"ホワイト急便","name:en":"White Kyuubin","name:ja":"ホワイト急便",shop:"dry_cleaning"}},"shop/dry_cleaning|白洋舎":{countryCodes:["jp"],tags:{brand:"白洋舎","brand:en":"Hakuyosha","brand:wikidata":"Q11579995","brand:wikipedia":"ja:白洋舎",name:"白洋舎","name:en":"Hakuyosha",shop:"dry_cleaning"}},"shop/electronics|Apple Store":{nomatch:["amenity/bank|Apple Bank"],tags:{brand:"Apple Store","brand:wikidata":"Q421253","brand:wikipedia":"en:Apple Store",name:"Apple Store",shop:"electronics"}},"shop/electronics|BCC":{nomatch:["amenity/bank|Bcc"],tags:{brand:"BCC",name:"BCC",shop:"electronics"}},"shop/electronics|Batteries Plus Bulbs":{matchNames:["batteries plus"],tags:{brand:"Batteries Plus Bulbs","brand:wikidata":"Q17005157","brand:wikipedia":"en:Batteries Plus Bulbs",name:"Batteries Plus Bulbs",shop:"electronics"}},"shop/electronics|Best Buy":{tags:{brand:"Best Buy","brand:wikidata":"Q533415","brand:wikipedia":"en:Best Buy",name:"Best Buy",shop:"electronics"}},"shop/electronics|Boulanger":{countryCodes:["fr"],tags:{brand:"Boulanger","brand:wikidata":"Q2921695","brand:wikipedia":"fr:Boulanger (entreprise)",name:"Boulanger",shop:"electronics"}},"shop/electronics|CeX":{countryCodes:["au","es","gb","ie","in","it","mx","nl","pl","pt"],tags:{brand:"CeX","brand:wikidata":"Q5055676","brand:wikipedia":"en:CeX (company)",name:"CeX",shop:"electronics"}},"shop/electronics|Currys":{countryCodes:["gb","ie"],tags:{brand:"Currys","brand:wikidata":"Q3246464","brand:wikipedia":"en:Currys",name:"Currys",shop:"electronics"}},"shop/electronics|Currys PC World":{countryCodes:["gb","ie"],tags:{brand:"Currys PC World","brand:wikidata":"Q7118727","brand:wikipedia":"en:PC World (retailer)",name:"Currys PC World",shop:"electronics"}},"shop/electronics|DNS":{tags:{brand:"DNS",name:"DNS",shop:"electronics"}},"shop/electronics|Darty":{tags:{brand:"Darty","brand:wikidata":"Q3117381","brand:wikipedia":"en:Groupe Fnac Darty",name:"Darty",shop:"electronics"}},"shop/electronics|Elektra":{countryCodes:["gt","hn","pa","pe","sv"],tags:{brand:"Elektra","brand:wikidata":"Q1142753","brand:wikipedia":"es:Grupo Elektra",name:"Elektra",shop:"electronics"}},"shop/electronics|Elgiganten":{tags:{brand:"Elgiganten","brand:wikidata":"Q17050121","brand:wikipedia":"en:Elgiganten",name:"Elgiganten",shop:"electronics"}},"shop/electronics|Euronics":{tags:{brand:"Euronics","brand:wikidata":"Q184860","brand:wikipedia":"en:Euronics",name:"Euronics",shop:"electronics"}},"shop/electronics|Expert":{tags:{brand:"Expert","brand:wikidata":"Q680990","brand:wikipedia":"en:Expert (company)",name:"Expert",shop:"electronics"}},"shop/electronics|Hartlauer":{countryCodes:["at"],tags:{brand:"Hartlauer","brand:wikidata":"Q1587223","brand:wikipedia":"de:Hartlauer",name:"Hartlauer",shop:"electronics"}},"shop/electronics|Interdiscount":{countryCodes:["ch"],tags:{brand:"Interdiscount","brand:wikidata":"Q1665980","brand:wikipedia":"de:Interdiscount",name:"Interdiscount",shop:"electronics"}},"shop/electronics|JB Hi-Fi":{countryCodes:["au","nz"],tags:{brand:"JB Hi-Fi","brand:wikidata":"Q3310113","brand:wikipedia":"en:JB Hi-Fi",name:"JB Hi-Fi",shop:"electronics"}},"shop/electronics|Kjell & Company":{countryCodes:["no","se"],matchNames:["kjell och company"],tags:{brand:"Kjell & Company","brand:wikidata":"Q6419332","brand:wikipedia":"en:Kjell & Company",name:"Kjell & Company",shop:"electronics"}},"shop/electronics|Komputronik":{countryCodes:["pl"],tags:{brand:"Komputronik","brand:wikidata":"Q11742085","brand:wikipedia":"pl:Komputronik",name:"Komputronik",shop:"electronics"}},"shop/electronics|La Curacao":{tags:{brand:"La Curacao","brand:wikidata":"Q5194599","brand:wikipedia":"en:Curacao (retail store)",name:"La Curacao",shop:"electronics"}},"shop/electronics|Maplin":{tags:{brand:"Maplin","brand:wikidata":"Q6754124","brand:wikipedia":"en:Maplin (retailer)",name:"Maplin",shop:"electronics"}},"shop/electronics|Media Expert":{countryCodes:["pl"],tags:{brand:"Media Expert","brand:wikidata":"Q11776794","brand:wikipedia":"pl:Media Expert",name:"Media Expert",shop:"electronics"}},"shop/electronics|Media Markt":{tags:{brand:"Media Markt","brand:wikidata":"Q2381223","brand:wikipedia":"en:Media Markt",name:"Media Markt",shop:"electronics"}},"shop/electronics|Medimax":{tags:{brand:"Medimax",name:"Medimax",operator:"ElectronicPartner","operator:wikidata":"Q1326008","operator:wikipedia":"de:ElectronicPartner",shop:"electronics"}},"shop/electronics|Musimundo":{countryCodes:["ar"],tags:{brand:"Musimundo","brand:wikidata":"Q6034719","brand:wikipedia":"es:Musimundo",name:"Musimundo",shop:"electronics"}},"shop/electronics|Neonet":{countryCodes:["pl"],tags:{brand:"Neonet","brand:wikidata":"Q11790622","brand:wikipedia":"pl:Neonet",name:"Neonet",shop:"electronics"}},"shop/electronics|Power":{tags:{brand:"Power",name:"Power",shop:"electronics"}},"shop/electronics|RTV Euro AGD":{countryCodes:["pl"],tags:{brand:"RTV Euro AGD","brand:wikidata":"Q7277895","brand:wikipedia":"pl:RTV Euro AGD",name:"RTV Euro AGD",shop:"electronics"}},"shop/electronics|RadioShack":{tags:{brand:"RadioShack","brand:wikidata":"Q1195490","brand:wikipedia":"en:RadioShack",name:"RadioShack",shop:"electronics"}},"shop/electronics|Samsung":{tags:{brand:"Samsung","brand:wikidata":"Q20718","brand:wikipedia":"en:Samsung Electronics",name:"Samsung",shop:"electronics"}},"shop/electronics|Saturn":{countryCodes:["at","de","lu","pl"],tags:{brand:"Saturn","brand:wikidata":"Q2543504","brand:wikipedia":"en:Saturn (retailer)",name:"Saturn",shop:"electronics"}},"shop/electronics|Sony":{tags:{brand:"Sony","brand:wikidata":"Q41187","brand:wikipedia":"en:Sony",name:"Sony",shop:"electronics"}},"shop/electronics|Teknikmagasinet":{countryCodes:["fi","no","se"],tags:{brand:"Teknikmagasinet","brand:wikidata":"Q3357520","brand:wikipedia":"en:Teknikmagasinet",name:"Teknikmagasinet",shop:"electronics"}},"shop/electronics|The Source":{countryCodes:["ca"],tags:{brand:"The Source","brand:wikidata":"Q3212934","brand:wikipedia":"en:The Source (retailer)",name:"The Source",shop:"electronics"}},"shop/electronics|Trony":{tags:{brand:"Trony",name:"Trony",shop:"electronics"}},"shop/electronics|Unieuro":{countryCodes:["it"],tags:{brand:"Unieuro","brand:wikidata":"Q4004687","brand:wikipedia":"en:Unieuro",name:"Unieuro",shop:"electronics"}},"shop/electronics|Worten":{countryCodes:["es","pt"],tags:{brand:"Worten","brand:wikidata":"Q10394039","brand:wikipedia":"pt:Worten",name:"Worten",shop:"electronics"}},"shop/electronics|М.Видео":{countryCodes:["ru"],tags:{brand:"М.Видео","brand:en":"M.video","brand:wikidata":"Q6558800","brand:wikipedia":"en:M.video",name:"М.Видео","name:en":"M.video",shop:"electronics"}},"shop/electronics|Фокстрот":{countryCodes:["ua"],tags:{brand:"Фокстрот","brand:wikidata":"Q16721578","brand:wikipedia":"uk:Фокстрот (торгова мережа)",name:"Фокстрот",shop:"electronics"}},"shop/electronics|Эксперт":{tags:{brand:"Эксперт",name:"Эксперт",shop:"electronics"}},"shop/electronics|Эльдорадо":{tags:{brand:"Эльдорадо","brand:wikidata":"Q4531492","brand:wikipedia":"ru:Эльдорадо (сеть магазинов)",name:"Эльдорадо",shop:"electronics"}},"shop/electronics|エディオン":{countryCodes:["jp"],tags:{brand:"エディオン","brand:en":"EDION","brand:ja":"エディオン","brand:wikidata":"Q11290252","brand:wikipedia":"ja:エディオン",name:"エディオン","name:en":"EDION","name:ja":"エディオン",shop:"electronics"}},"shop/electronics|ケーズデンキ":{countryCodes:["jp"],matchTags:["shop/appliance"],tags:{brand:"ケーズデンキ","brand:en":"K's Denki","brand:ja":"ケーズデンキ","brand:wikidata":"Q6322472","brand:wikipedia":"ja:ケーズホールディングス",name:"ケーズデンキ","name:en":"K's Denki","name:ja":"ケーズデンキ",shop:"electronics"}},"shop/electronics|コジマ":{countryCodes:["jp"],tags:{brand:"コジマ","brand:en":"Kojima","brand:ja":"コジマ","brand:wikidata":"Q11302052","brand:wikipedia":"ja:コジマ",name:"コジマ","name:en":"Kojima","name:ja":"コジマ",shop:"electronics"}},"shop/electronics|ソフマップ":{countryCodes:["jp"],tags:{brand:"ソフマップ","brand:en":"Sofmap","brand:ja":"ソフマップ","brand:wikidata":"Q7553789","brand:wikipedia":"ja:ソフマップ",name:"ソフマップ","name:en":"Sofmap","name:ja":"ソフマップ",shop:"electronics"}},"shop/electronics|ビックカメラ":{countryCodes:["jp"],tags:{brand:"ビックカメラ","brand:en":"Bic Camera","brand:ja":"ビックカメラ","brand:wikidata":"Q4903531","brand:wikipedia":"ja:ビックカメラ",name:"ビックカメラ","name:en":"Bic Camera","name:ja":"ビックカメラ",shop:"electronics"}},"shop/electronics|ヤマダ電機":{countryCodes:["jp"],tags:{brand:"ヤマダ電機","brand:en":"Yamada Denki","brand:ja":"ヤマダ電機","brand:wikidata":"Q1096390","brand:wikipedia":"en:Yamada Denki",name:"ヤマダ電機","name:en":"Yamada Denki","name:ja":"ヤマダ電機",shop:"electronics"}},"shop/electronics|全國電子":{countryCodes:["tw"],tags:{brand:"全國電子","brand:en":"E-life Mall","brand:wikidata":"Q10891540","brand:wikipedia":"zh:全國電子",name:"全國電子","name:en":"E-life Mall",shop:"electronics"}},"shop/electronics|燦坤3C":{countryCodes:["tw"],tags:{brand:"燦坤3C","brand:en":"Tsannkuen 3C","brand:wikidata":"Q11569285","brand:wikipedia":"zh:燦坤",name:"燦坤3C","name:en":"Tsannkuen 3C",shop:"electronics"}},"shop/erotic|Ann Summers":{countryCodes:["gb","ie"],tags:{brand:"Ann Summers","brand:wikidata":"Q579524","brand:wikipedia":"en:Ann Summers",name:"Ann Summers",shop:"erotic"}},"shop/erotic|Orion":{countryCodes:["at","de"],tags:{brand:"Orion","brand:wikidata":"Q1609577","brand:wikipedia":"de:Orion (Erotik)",name:"Orion",shop:"erotic"}},"shop/fabric|Mondial Tissus":{countryCodes:["fr"],matchTags:["shop/curtain","shop/department_store"],tags:{brand:"Mondial Tissus","brand:wikidata":"Q17635288","brand:wikipedia":"fr:Mondial Tissus",name:"Mondial Tissus",shop:"fabric"}},"shop/florist|Blume 2000":{countryCodes:["de"],tags:{brand:"Blume 2000","brand:wikidata":"Q886166","brand:wikipedia":"de:Blume 2000",name:"Blume 2000",shop:"florist"}},"shop/florist|Blumen Risse":{countryCodes:["de"],tags:{brand:"Blumen Risse","brand:wikidata":"Q886177","brand:wikipedia":"de:Blumen Risse",name:"Blumen Risse",shop:"florist"}},"shop/florist|Interflora":{countryCodes:["fr","gb","no","se"],tags:{brand:"Interflora","brand:wikidata":"Q692179","brand:wikipedia":"en:Interflora",name:"Interflora",shop:"florist"}},"shop/florist|Monceau Fleurs":{countryCodes:["be","fr"],tags:{brand:"Monceau Fleurs","brand:wikidata":"Q17629431","brand:wikipedia":"fr:Emova Group",name:"Monceau Fleurs",shop:"florist"}},"shop/florist|Мосцветторг":{countryCodes:["ru"],tags:{brand:"Мосцветторг",name:"Мосцветторг",shop:"florist"}},"shop/frozen_food|Picard":{tags:{brand:"Picard","brand:wikidata":"Q3382454","brand:wikipedia":"en:Picard Surgelés",name:"Picard",shop:"frozen_food"}},"shop/funeral_directors|PFG":{countryCodes:["fr"],matchNames:["pompes funèbres générales"],tags:{brand:"PFG","brand:wikidata":"Q3396087","brand:wikipedia":"fr:Pompes funèbres générales",name:"PFG",official_name:"Pompes Funèbres Générales",shop:"funeral_directors"}},"shop/funeral_directors|Roblot":{countryCodes:["fr"],tags:{brand:"Roblot","brand:wikidata":"Q63247414",name:"Roblot",shop:"funeral_directors"}},"shop/funeral_directors|Roc-Eclerc":{tags:{brand:"Roc-Eclerc","brand:wikidata":"Q62558102",name:"Roc-Eclerc",shop:"funeral_directors"}},"shop/funeral_directors|The Co-operative Funeralcare":{countryCodes:["gb"],tags:{brand:"The Co-operative Funeralcare","brand:wikidata":"Q7726521","brand:wikipedia":"en:Co-op Funeralcare",name:"The Co-operative Funeralcare",shop:"funeral_directors"}},"shop/furniture|Aaron's":{countryCodes:["ca","us"],tags:{brand:"Aaron's","brand:wikidata":"Q10397787","brand:wikipedia":"en:Aaron's, Inc.",name:"Aaron's",shop:"furniture"}},"shop/furniture|American Signature Furniture":{countryCodes:["us"],tags:{brand:"American Signature Furniture","brand:wikidata":"Q63859411",name:"American Signature Furniture",shop:"furniture"}},"shop/furniture|Arhaus":{countryCodes:["us"],tags:{brand:"Arhaus","brand:wikidata":"Q35689887",name:"Arhaus",shop:"furniture"}},"shop/furniture|Ashley HomeStore":{countryCodes:["ca","us"],matchNames:["ashley furniture","ashley furniture homestore"],tags:{brand:"Ashley HomeStore","brand:wikidata":"Q4805437","brand:wikipedia":"en:Ashley HomeStore",name:"Ashley Furniture",shop:"furniture"}},"shop/furniture|Black Red White":{tags:{brand:"Black Red White","brand:wikidata":"Q4921546","brand:wikipedia":"en:Black Red White",name:"Black Red White",shop:"furniture"}},"shop/furniture|BoConcept":{tags:{brand:"BoConcept","brand:wikidata":"Q11338915","brand:wikipedia":"en:BoConcept",name:"BoConcept",shop:"furniture"}},"shop/furniture|Bob’s Discount Furniture":{countryCodes:["us"],tags:{brand:"Bob’s Discount Furniture","brand:wikidata":"Q4931582","brand:wikipedia":"en:Bob's Discount Furniture",name:"Bob’s Discount Furniture",shop:"furniture"}},"shop/furniture|Bodzio":{countryCodes:["pl"],tags:{brand:"Bodzio","brand:wikidata":"Q20034845","brand:wikipedia":"pl:Fabryka Mebli Bodzio",name:"Bodzio",shop:"furniture"}},"shop/furniture|But":{countryCodes:["fr"],tags:{brand:"But","brand:wikidata":"Q18720442","brand:wikipedia":"en:BUT (retailer)",name:"But",shop:"furniture"}},"shop/furniture|Cabinets To Go":{countryCodes:["us"],tags:{brand:"Cabinets To Go","brand:wikidata":"Q25245346","brand:wikipedia":"en:Cabinets To Go",name:"Cabinets To Go",shop:"furniture"}},"shop/furniture|Casa":{matchTags:["shop/interior_decoration"],tags:{brand:"Casa",name:"Casa",shop:"furniture"}},"shop/furniture|Conforama":{tags:{brand:"Conforama","brand:wikidata":"Q541134","brand:wikipedia":"en:Conforama",name:"Conforama",shop:"furniture"}},"shop/furniture|Crate & Barrel":{matchNames:["crate and barrel"],tags:{brand:"Crate & Barrel","brand:wikidata":"Q5182604","brand:wikipedia":"en:Crate & Barrel",name:"Crate & Barrel",shop:"furniture"}},"shop/furniture|DFS":{tags:{brand:"DFS","brand:wikidata":"Q5204927","brand:wikipedia":"en:DFS Furniture",name:"DFS",shop:"furniture"}},"shop/furniture|Dänisches Bettenlager":{countryCodes:["at","de"],matchTags:["shop/bed"],tags:{brand:"Dänisches Bettenlager","brand:wikidata":"Q138913","brand:wikipedia":"en:Jysk (store)",name:"Dänisches Bettenlager",shop:"furniture"}},"shop/furniture|Ethan Allen":{tags:{brand:"Ethan Allen","brand:wikidata":"Q5402870","brand:wikipedia":"en:Ethan Allen (furniture company)",name:"Ethan Allen",shop:"furniture"}},"shop/furniture|Fly":{tags:{brand:"Fly","brand:wikidata":"Q1389184","brand:wikipedia":"fr:Fly (entreprise)",name:"Fly",shop:"furniture"}},"shop/furniture|Harveys":{countryCodes:["gb"],nomatch:["amenity/fast_food|Harvey's"],tags:{brand:"Harveys","brand:wikidata":"Q5677754","brand:wikipedia":"en:Harveys Furniture",name:"Harveys",shop:"furniture"}},"shop/furniture|Havertys":{countryCodes:["us"],tags:{brand:"Havertys","brand:wikidata":"Q5683881","brand:wikipedia":"en:Havertys",name:"Havertys",shop:"furniture"}},"shop/furniture|IKEA":{tags:{brand:"IKEA","brand:wikidata":"Q54078","brand:wikipedia":"en:IKEA",name:"IKEA",shop:"furniture"}},"shop/furniture|JYSK":{tags:{brand:"JYSK","brand:wikidata":"Q138913","brand:wikipedia":"en:Jysk (store)",name:"JYSK",shop:"furniture"}},"shop/furniture|Kwantum":{countryCodes:["nl"],tags:{brand:"Kwantum",name:"Kwantum",shop:"furniture"}},"shop/furniture|La-Z-Boy":{tags:{brand:"La-Z-Boy","brand:wikidata":"Q6391583","brand:wikipedia":"en:La-Z-Boy",name:"La-Z-Boy",shop:"furniture"}},"shop/furniture|Leen Bakker":{tags:{brand:"Leen Bakker",name:"Leen Bakker",shop:"furniture"}},"shop/furniture|Maisons du Monde":{tags:{brand:"Maisons du Monde",name:"Maisons du Monde",shop:"furniture"}},"shop/furniture|Möbelix":{tags:{brand:"Möbelix",name:"Möbelix",shop:"furniture"}},"shop/furniture|Pottery Barn":{countryCodes:["au","ca","mx","ph","us"],tags:{brand:"Pottery Barn","brand:wikidata":"Q3400126","brand:wikipedia":"en:Pottery Barn",name:"Pottery Barn",shop:"furniture"}},"shop/furniture|Raymour & Flanigan":{countryCodes:["us"],tags:{brand:"Raymour & Flanigan","brand:wikidata":"Q7299290","brand:wikipedia":"en:Raymour & Flanigan",name:"Raymour & Flanigan",shop:"furniture"}},"shop/furniture|Rent-A-Center":{tags:{brand:"Rent-A-Center","brand:wikidata":"Q7313497","brand:wikipedia":"en:Rent-A-Center",name:"Rent-A-Center",shop:"furniture"}},"shop/furniture|Restoration Hardware":{tags:{brand:"Restoration Hardware","brand:wikidata":"Q7316207","brand:wikipedia":"en:Restoration Hardware",name:"Restoration Hardware",shop:"furniture"}},"shop/furniture|Roche Bobois":{tags:{brand:"Roche Bobois",name:"Roche Bobois",shop:"furniture"}},"shop/furniture|Roller":{countryCodes:["de"],tags:{brand:"Roller","brand:wikidata":"Q1621286","brand:wikipedia":"de:Roller (Möbelhaus)",name:"Roller",shop:"furniture"}},"shop/furniture|Rooms To Go":{countryCodes:["us"],tags:{brand:"Rooms To Go","brand:wikidata":"Q7366329","brand:wikipedia":"en:Rooms To Go",name:"Rooms To Go",shop:"furniture"}},"shop/furniture|ScS":{countryCodes:["gb"],tags:{brand:"ScS","brand:wikidata":"Q19654399","brand:wikipedia":"en:ScS",name:"ScS",shop:"furniture"}},"shop/furniture|The Brick":{tags:{brand:"The Brick","brand:wikidata":"Q7720000","brand:wikipedia":"en:The Brick",name:"The Brick",shop:"furniture"}},"shop/furniture|Urban Barn":{countryCodes:["ca"],tags:{brand:"Urban Barn","brand:wikidata":"Q62515207",name:"Urban Barn",shop:"furniture"}},"shop/furniture|Value City Furniture":{countryCodes:["us"],tags:{brand:"Value City Furniture","brand:wikidata":"Q63859417",name:"Value City Furniture",shop:"furniture"}},"shop/furniture|Williams-Sonoma":{countryCodes:["ca","us"],matchNames:["william sonoma"],tags:{brand:"Williams-Sonoma","brand:wikidata":"Q2581220","brand:wikipedia":"en:Williams-Sonoma",name:"Williams-Sonoma",shop:"furniture"}},"shop/furniture|İstikbal":{countryCodes:["tr"],tags:{brand:"İstikbal",name:"İstikbal",shop:"furniture"}},"shop/furniture|Много мебели":{tags:{brand:"Много мебели",name:"Много мебели",shop:"furniture"}},"shop/furniture|ニトリ":{countryCodes:["jp"],tags:{brand:"ニトリ","brand:en":"Nitori","brand:ja":"ニトリ","brand:wikidata":"Q10801453","brand:wikipedia":"en:Nitori",name:"ニトリ","name:en":"Nitori","name:ja":"ニトリ",shop:"furniture"}},"shop/games|Games Workshop":{tags:{brand:"Games Workshop","brand:wikidata":"Q587270","brand:wikipedia":"en:Games Workshop",name:"Games Workshop",shop:"games"}},"shop/garden_centre|Dehner":{countryCodes:["at","de"],tags:{brand:"Dehner","brand:wikidata":"Q1183029","brand:wikipedia":"de:Dehner",name:"Dehner",shop:"garden_centre"}},"shop/garden_centre|Gamm Vert":{countryCodes:["fr"],tags:{brand:"Gamm Vert","brand:wikidata":"Q3095006","brand:wikipedia":"fr:Gamm Vert",name:"Gamm Vert",shop:"garden_centre"}},"shop/garden_centre|Jardiland":{countryCodes:["fr"],tags:{brand:"Jardiland","brand:wikidata":"Q3162276","brand:wikipedia":"fr:Jardiland",name:"Jardiland",shop:"garden_centre"}},"shop/garden_centre|Point Vert":{countryCodes:["fr"],tags:{brand:"Point Vert","brand:wikidata":"Q16661975","brand:wikipedia":"fr:Magasin vert",name:"Point Vert",shop:"garden_centre"}},"shop/garden_centre|Truffaut":{countryCodes:["fr"],tags:{brand:"Truffaut","brand:wikidata":"Q3162640","brand:wikipedia":"fr:Jardineries Truffaut",name:"Truffaut",shop:"garden_centre"}},"shop/garden_centre|Welkoop":{countryCodes:["nl"],tags:{brand:"Welkoop",name:"Welkoop",shop:"garden_centre"}},"shop/gas|Airgas":{countryCodes:["us"],matchTags:["amenity/fuel","shop/fuel","shop/trade"],tags:{brand:"Airgas","brand:wikidata":"Q80635","brand:wikipedia":"en:Airgas",name:"Airgas",shop:"gas"}},"shop/gift|Card Factory":{countryCodes:["gb","im"],tags:{brand:"Card Factory","brand:wikidata":"Q5038192","brand:wikipedia":"en:Card Factory",name:"Card Factory",shop:"gift"}},"shop/gift|Clintons":{countryCodes:["gb"],tags:{brand:"Clintons","brand:wikidata":"Q5134299","brand:wikipedia":"en:Clintons",name:"Clintons",shop:"gift"}},"shop/gift|Disney Store":{countryCodes:["ca","fr","us"],tags:{brand:"Disney Store","brand:wikidata":"Q1047009","brand:wikipedia":"en:Disney Store",name:"Disney Store",operator:"Disney Consumer Products","operator:wikidata":"Q3030410","operator:wikipedia":"en:Disney Consumer Products and Interactive Media",shop:"gift"}},"shop/gift|Hallmark":{tags:{brand:"Hallmark","brand:wikidata":"Q1521910","brand:wikipedia":"en:Hallmark Cards",name:"Hallmark",shop:"gift"}},"shop/gift|Nanu-Nana":{countryCodes:["at","de"],tags:{brand:"Nanu-Nana","brand:wikidata":"Q1720245","brand:wikipedia":"de:Nanu-Nana",name:"Nanu-Nana",shop:"gift"}},"shop/gift|Wereldwinkel":{countryCodes:["be","nl"],tags:{brand:"Wereldwinkel",name:"Wereldwinkel",shop:"gift"}},"shop/greengrocer|Produce Junction":{countryCodes:["us"],tags:{brand:"Produce Junction","brand:wikidata":"Q60583541",name:"Produce Junction",shop:"greengrocer"}},"shop/hairdresser_supply|Sally Beauty Supply":{countryCodes:["ca","mx","us"],tags:{brand:"Sally Beauty Supply","brand:wikidata":"Q7405065","brand:wikipedia":"en:Sally Beauty Holdings",name:"Sally Beauty Supply",shop:"hairdresser_supply"}},"shop/hairdresser|Camille Albane":{tags:{brand:"Camille Albane","brand:wikidata":"Q62965183",name:"Camille Albane",shop:"hairdresser"}},"shop/hairdresser|Coiff&Co":{tags:{brand:"Coiff&Co",name:"Coiff&Co",shop:"hairdresser"}},"shop/hairdresser|Cost Cutters":{countryCodes:["us"],tags:{brand:"Cost Cutters","brand:wikidata":"Q62029366",name:"Cost Cutters",shop:"hairdresser"}},"shop/hairdresser|Dessange":{tags:{brand:"Dessange","brand:wikidata":"Q62979914",name:"Dessange",shop:"hairdresser"}},"shop/hairdresser|Fantastic Sams":{countryCodes:["us"],tags:{brand:"Fantastic Sams","brand:wikidata":"Q5434222","brand:wikipedia":"en:Fantastic Sams",name:"Fantastic Sams",shop:"hairdresser"}},"shop/hairdresser|First Choice Haircutters":{tags:{brand:"First Choice Haircutters","brand:wikidata":"Q5452622","brand:wikipedia":"en:First Choice Haircutters",name:"First Choice Haircutters",shop:"hairdresser"}},"shop/hairdresser|Franck Provost":{tags:{brand:"Franck Provost","brand:wikidata":"Q62805922","brand:wikipedia":"fr:Franck Provost (Salons de coiffure)",name:"Franck Provost",shop:"hairdresser"}},"shop/hairdresser|Great Clips":{countryCodes:["ca","us"],tags:{brand:"Great Clips","brand:wikidata":"Q5598967","brand:wikipedia":"en:Great Clips",name:"Great Clips",shop:"hairdresser"}},"shop/hairdresser|Hair Cuttery":{countryCodes:["us"],tags:{brand:"Hair Cuttery","brand:wikidata":"Q5639484","brand:wikipedia":"en:Hair Cuttery",name:"Hair Cuttery",shop:"hairdresser"}},"shop/hairdresser|Hair Express":{countryCodes:["de","us"],tags:{brand:"Hair Express","brand:wikidata":"Q57550814",name:"Hair Express",shop:"hairdresser"}},"shop/hairdresser|Hair Studio":{tags:{brand:"Hair Studio",name:"Hair Studio",shop:"hairdresser"}},"shop/hairdresser|Hairkiller":{countryCodes:["at","de","lu"],tags:{brand:"Hairkiller","brand:wikidata":"Q58305998",name:"Hairkiller",shop:"hairdresser"}},"shop/hairdresser|Jean Louis David":{tags:{brand:"Jean Louis David",name:"Jean Louis David",shop:"hairdresser"}},"shop/hairdresser|Kirpykla":{countryCodes:["lt"],tags:{brand:"Kirpykla",name:"Kirpykla",shop:"hairdresser"}},"shop/hairdresser|Klier":{tags:{brand:"Klier","brand:wikidata":"Q1465159","brand:wikipedia":"de:Frisör Klier",name:"Klier",shop:"hairdresser"}},"shop/hairdresser|Klipp":{tags:{brand:"Klipp","brand:wikidata":"Q1737304","brand:wikipedia":"de:Klipp Frisör",name:"Klipp",shop:"hairdresser"}},"shop/hairdresser|Marco Aldany":{tags:{brand:"Marco Aldany",name:"Marco Aldany",shop:"hairdresser"}},"shop/hairdresser|Sport Clips":{tags:{brand:"Sport Clips","brand:wikidata":"Q7579310",name:"Sport Clips",shop:"hairdresser"}},"shop/hairdresser|Super Cut":{tags:{brand:"Super Cut",name:"Super Cut",shop:"hairdresser"}},"shop/hairdresser|Supercuts":{tags:{brand:"Supercuts","brand:wikidata":"Q7643239","brand:wikipedia":"en:Supercuts",name:"Supercuts",shop:"hairdresser"}},"shop/hairdresser|Tchip":{tags:{brand:"Tchip","brand:wikidata":"Q62871250",name:"Tchip",shop:"hairdresser"}},"shop/hairdresser|Toni & Guy":{tags:{brand:"Toni & Guy","brand:wikidata":"Q324784","brand:wikipedia":"en:Toni & Guy",name:"Toni & Guy",shop:"hairdresser"}},"shop/hairdresser|Top Hair":{countryCodes:["de"],tags:{brand:"Top Hair","brand:wikidata":"Q62523343",name:"Top Hair",shop:"hairdresser"}},"shop/hairdresser|Виктория":{tags:{brand:"Виктория",name:"Виктория",shop:"hairdresser"}},"shop/hairdresser|Елена":{tags:{brand:"Елена",name:"Елена",shop:"hairdresser"}},"shop/hairdresser|Каприз":{tags:{brand:"Каприз",name:"Каприз",shop:"hairdresser"}},"shop/hairdresser|Фея":{tags:{brand:"Фея",name:"Фея",shop:"hairdresser"}},"shop/hairdresser|Шарм":{tags:{brand:"Шарм",name:"Шарм",shop:"hairdresser"}},"shop/hardware|220 вольт":{countryCodes:["by","ru","ua"],tags:{brand:"220 вольт",name:"220 вольт",shop:"hardware"}},"shop/hardware|Harbor Freight Tools":{countryCodes:["us"],tags:{brand:"Harbor Freight Tools","brand:wikidata":"Q5654601","brand:wikipedia":"en:Harbor Freight Tools",name:"Harbor Freight Tools",shop:"hardware"}},"shop/hardware|Home Hardware":{countryCodes:["ca"],nomatch:["shop/doityourself|Home Hardware Building Centre"],tags:{brand:"Home Hardware","brand:wikidata":"Q3139611","brand:wikipedia":"en:Home Hardware",name:"Home Hardware",shop:"hardware"}},"shop/hardware|True Value":{tags:{brand:"True Value","brand:wikidata":"Q7847545","brand:wikipedia":"en:True Value",name:"True Value",shop:"hardware"}},"shop/hardware|Würth":{tags:{brand:"Würth","brand:wikidata":"Q679750","brand:wikipedia":"de:Würth-Gruppe",name:"Würth",shop:"hardware"}},"shop/hardware|Мосхозторг":{countryCodes:["ru"],tags:{brand:"Мосхозторг","brand:wikidata":"Q62499092",name:"Мосхозторг",shop:"hardware"}},"shop/hardware|Хозяин":{countryCodes:["by","ru","ua"],tags:{brand:"Хозяин",name:"Хозяин",shop:"hardware"}},"shop/health_food|Holland & Barrett":{tags:{brand:"Holland & Barrett","brand:wikidata":"Q5880870","brand:wikipedia":"en:Holland & Barrett",name:"Holland & Barrett",shop:"health_food"}},"shop/hearing_aids|Amplifon":{tags:{brand:"Amplifon","brand:wikidata":"Q477222","brand:wikipedia":"en:Amplifon",name:"Amplifon",shop:"hearing_aids"}},"shop/hearing_aids|Audika":{tags:{brand:"Audika","brand:wikidata":"Q2870745","brand:wikipedia":"fr:Audika",name:"Audika",shop:"hearing_aids"}},"shop/hearing_aids|Beter Horen":{tags:{brand:"Beter Horen",name:"Beter Horen",shop:"hearing_aids"}},"shop/hearing_aids|Geers":{tags:{brand:"Geers","brand:wikidata":"Q1497707","brand:wikipedia":"de:Geers Hörakustik",name:"Geers",shop:"hearing_aids"}},"shop/hearing_aids|Kind Hörgeräte":{countryCodes:["de"],matchNames:["kind"],tags:{brand:"Kind Hörgeräte","brand:wikidata":"Q43598590","brand:wikipedia":"de:Kind Hörgeräte",name:"Kind Hörgeräte",shop:"hearing_aids"}},"shop/hearing_aids|Neuroth":{countryCodes:["at","de"],tags:{brand:"Neuroth","brand:wikidata":"Q15836645","brand:wikipedia":"de:Neuroth AG",name:"Neuroth",shop:"hearing_aids"}},"shop/hifi|Bang & Olufsen":{tags:{brand:"Bang & Olufsen","brand:wikidata":"Q790020","brand:wikipedia":"en:Bang & Olufsen",name:"Bang & Olufsen",shop:"hifi"}},"shop/hobby|アニメイト":{countryCodes:["jp"],tags:{brand:"アニメイト","brand:ja":"アニメイト",name:"アニメイト","name:ja":"アニメイト",shop:"hobby"}},"shop/houseware|Bed Bath & Beyond":{matchNames:["bed bath and beyond"],matchTags:["shop/department_store"],tags:{brand:"Bed Bath & Beyond","brand:wikidata":"Q813782","brand:wikipedia":"en:Bed Bath & Beyond",name:"Bed Bath & Beyond",shop:"houseware"}},"shop/houseware|Blokker":{tags:{brand:"Blokker","brand:wikidata":"Q884934","brand:wikipedia":"en:Blokker Holding",name:"Blokker",shop:"houseware"}},"shop/houseware|Cervera":{countryCodes:["se"],tags:{brand:"Cervera","brand:wikidata":"Q10447179","brand:wikipedia":"sv:Cervera (företag)",name:"Cervera",shop:"houseware"}},"shop/houseware|HomeGoods":{tags:{brand:"HomeGoods","brand:wikidata":"Q5887941","brand:wikipedia":"en:HomeGoods",name:"HomeGoods",shop:"houseware"}},"shop/houseware|Lagerhaus":{matchTags:["shop/doityourself"],tags:{brand:"Lagerhaus","brand:wikidata":"Q10553211","brand:wikipedia":"sv:Lagerhaus",name:"Lagerhaus",shop:"houseware"}},"shop/houseware|Marskramer":{countryCodes:["nl"],tags:{brand:"Marskramer","brand:wikidata":"Q2305917","brand:wikipedia":"nl:Marskramer (warenhuis)",name:"Marskramer",shop:"houseware"}},"shop/houseware|Old Time Pottery":{countryCodes:["us"],tags:{brand:"Old Time Pottery","brand:website":"http://www.oldtimepottery.com","brand:wikidata":"Q7085222","brand:wikipedia":"en:Old Time Pottery",name:"Old Time Pottery",shop:"houseware"}},"shop/houseware|Sur La Table":{countryCodes:["us"],tags:{brand:"Sur La Table","brand:wikidata":"Q7645220","brand:wikipedia":"en:Sur La Table",name:"Sur La Table",shop:"houseware"}},"shop/houseware|The Container Store":{countryCodes:["us"],tags:{brand:"The Container Store","brand:wikidata":"Q7727445","brand:wikipedia":"en:The Container Store",name:"The Container Store",shop:"houseware"}},"shop/houseware|Tuesday Morning":{countryCodes:["us"],matchTags:["shop/convenience","shop/department_store","shop/gift","shop/variety_store"],tags:{brand:"Tuesday Morning","brand:wikidata":"Q7851426","brand:wikipedia":"en:Tuesday Morning",name:"Tuesday Morning",shop:"houseware"}},"shop/houseware|WMF":{countryCodes:["at","de"],tags:{brand:"WMF","brand:wikidata":"Q451423","brand:wikipedia":"en:WMF Group",name:"WMF",shop:"houseware"}},"shop/houseware|World Market":{countryCodes:["us"],matchNames:["cost plus"],matchTags:["shop/department_store","shop/furniture","shop/supermarket"],tags:{brand:"World Market","brand:wikidata":"Q5174750","brand:wikipedia":"en:Cost Plus World Market",name:"World Market",official_name:"Cost Plus World Market",shop:"interior_decoration"}},"shop/houseware|Xenos":{countryCodes:["de","nl"],tags:{brand:"Xenos","brand:wikidata":"Q16547960","brand:wikipedia":"nl:Xenos",name:"Xenos",shop:"houseware"}},"shop/houseware|Еврочехол":{tags:{brand:"Еврочехол",name:"Еврочехол",shop:"houseware"}},"shop/interior_decoration|Depot":{countryCodes:["at","ch","de"],tags:{brand:"Depot","brand:wikidata":"Q1191740","brand:wikipedia":"de:Gries Deco Holding",name:"Depot",shop:"interior_decoration"}},"shop/interior_decoration|Hemtex":{countryCodes:["ee","fi","se"],tags:{brand:"Hemtex","brand:wikidata":"Q10521868","brand:wikipedia":"sv:Hemtex",name:"Hemtex",shop:"interior_decoration"}},"shop/interior_decoration|Kirkland's":{countryCodes:["us"],matchTags:["shop/department_store"],tags:{brand:"Kirkland's","brand:wikidata":"Q6415714","brand:wikipedia":"en:Kirkland's",name:"Kirkland's",shop:"interior_decoration"}},"shop/interior_decoration|Pier 1 Imports":{countryCodes:["ca","us"],matchTags:["shop/furniture"],tags:{brand:"Pier 1 Imports","brand:wikidata":"Q7191691","brand:wikipedia":"en:Pier 1 Imports",name:"Pier 1 Imports",shop:"interior_decoration"}},"shop/jewelry|585":{tags:{brand:"585",name:"585",shop:"jewelry"}},"shop/jewelry|Alex and Ani":{countryCodes:["us"],tags:{brand:"Alex and Ani","brand:wikidata":"Q16198810","brand:wikipedia":"en:Alex and Ani",name:"Alex and Ani",shop:"jewelry"}},"shop/jewelry|Apart":{countryCodes:["pl"],tags:{brand:"Apart","brand:wikidata":"Q11686561","brand:wikipedia":"pl:Apart",name:"Apart",shop:"jewelry"}},"shop/jewelry|Bijou Brigitte":{tags:{brand:"Bijou Brigitte","brand:wikidata":"Q599545","brand:wikipedia":"de:Bijou Brigitte",name:"Bijou Brigitte",shop:"jewelry"}},"shop/jewelry|Bijouterie":{tags:{brand:"Bijouterie",name:"Bijouterie",shop:"jewelry"}},"shop/jewelry|Cartier":{tags:{brand:"Cartier","brand:wikidata":"Q538587","brand:wikipedia":"en:Cartier (jeweler)",name:"Cartier",shop:"jewelry"}},"shop/jewelry|Christ":{countryCodes:["ch","de","nl"],tags:{brand:"Christ","brand:wikidata":"Q1077957","brand:wikipedia":"de:Christ (Juwelier)",name:"Christ",shop:"jewelry"}},"shop/jewelry|Claire's":{matchTags:["shop/clothes"],tags:{brand:"Claire's","brand:wikidata":"Q2974996","brand:wikipedia":"en:Claire's",name:"Claire's",shop:"jewelry"}},"shop/jewelry|Ernest Jones":{tags:{brand:"Ernest Jones","brand:wikidata":"Q5393358","brand:wikipedia":"en:Ernest Jones (retailer)",name:"Ernest Jones",shop:"jewelry"}},"shop/jewelry|Guldfynd":{countryCodes:["se"],tags:{brand:"Guldfynd","brand:wikidata":"Q49099223","brand:wikipedia":"sv:Guldfynd",name:"Guldfynd",shop:"jewelry"}},"shop/jewelry|H Samuel":{tags:{brand:"H Samuel","brand:wikidata":"Q5628558","brand:wikipedia":"en:H. Samuel",name:"H Samuel",shop:"jewelry"}},"shop/jewelry|Histoire d'Or":{countryCodes:["be","fr","it","nl"],tags:{brand:"Histoire d'Or","brand:wikidata":"Q62529245",name:"Histoire d'Or",shop:"jewelry"}},"shop/jewelry|James Avery Jewelry":{tags:{brand:"James Avery Jewelry","brand:wikidata":"Q6129024","brand:wikipedia":"en:James Avery Artisan Jewelry",name:"James Avery Jewelry",shop:"jewelry"}},"shop/jewelry|Jared":{countryCodes:["us"],tags:{brand:"Jared","brand:wikidata":"Q62029282",name:"Jared",operator:"Sterling Jewelers","operator:wikidata":"Q7611434","operator:wikipedia":"en:Sterling Jewelers",shop:"jewelry"}},"shop/jewelry|Julien d'Orcel":{countryCodes:["fr"],tags:{brand:"Julien d'Orcel","brand:wikidata":"Q62497463",name:"Julien d'Orcel",shop:"jewelry"}},"shop/jewelry|Kay Jewelers":{countryCodes:["us"],tags:{brand:"Kay Jewelers","brand:wikidata":"Q62029290",name:"Kay Jewelers",operator:"Sterling Jewelers","operator:wikidata":"Q7611434","operator:wikipedia":"en:Sterling Jewelers",shop:"jewelry"}},"shop/jewelry|PNJ":{tags:{brand:"PNJ","brand:wikidata":"Q61129183","brand:wikipedia":"vi:PNJ",name:"PNJ",shop:"jewelry"}},"shop/jewelry|Pandora":{tags:{brand:"Pandora","brand:wikidata":"Q2241604","brand:wikipedia":"en:Pandora (jewelry)",name:"Pandora",shop:"jewelry"}},"shop/jewelry|Swarovski":{tags:{brand:"Swarovski","brand:wikidata":"Q611115","brand:wikipedia":"en:Swarovski",name:"Swarovski",shop:"jewelry"}},"shop/jewelry|Tiffany & Company":{matchNames:["tiffany","tiffany & co","tiffany and company","tiffany's"],tags:{brand:"Tiffany & Company","brand:wikidata":"Q1066858","brand:wikipedia":"en:Tiffany & Co.",name:"Tiffany & Company",official_name:"Tiffany & Co.",shop:"jewelry"}},"shop/jewelry|Адамас":{countryCodes:["ru"],tags:{brand:"Адамас","brand:wikidata":"Q62393709",name:"Адамас",shop:"jewelry"}},"shop/jewelry|Золотая мечта":{tags:{brand:"Золотая мечта",name:"Золотая мечта",shop:"jewelry"}},"shop/kiosk|Lietuvos spauda":{countryCodes:["lt"],tags:{brand:"Lietuvos spauda","brand:wikidata":"Q6514414","brand:wikipedia":"lt:Lietuvos spauda",name:"Lietuvos spauda",shop:"kiosk"}},"shop/kiosk|Narvesen":{tags:{brand:"Narvesen","brand:wikidata":"Q6514414","brand:wikipedia":"en:Narvesen",name:"Narvesen",shop:"kiosk"}},"shop/kiosk|Pressbyrån":{countryCodes:["se"],tags:{brand:"Pressbyrån","brand:wikidata":"Q2489072","brand:wikipedia":"en:Pressbyrån",name:"Pressbyrån",shop:"kiosk"}},"shop/kiosk|R-Kioski":{tags:{brand:"R-Kioski","brand:wikidata":"Q1571400","brand:wikipedia":"en:R-kioski",name:"R-Kioski",shop:"kiosk"}},"shop/kiosk|Ruch":{countryCodes:["pl"],tags:{brand:"Ruch","brand:wikidata":"Q1260314","brand:wikipedia":"pl:Ruch (przedsiębiorstwo)",name:"Ruch",shop:"kiosk"}},"shop/kiosk|Tisak":{tags:{brand:"Tisak","brand:wikidata":"Q12643627","brand:wikipedia":"hr:Tisak (tvrtka)",name:"Tisak",shop:"kiosk"}},"shop/kiosk|k kiosk":{countryCodes:["ch"],nomatch:["shop/newsagent|k kiosk"],tags:{brand:"k kiosk","brand:wikidata":"Q60381703","brand:wikipedia":"it:K Kiosk",name:"k kiosk",shop:"kiosk"}},"shop/kiosk|Роспечать":{tags:{brand:"Роспечать",name:"Роспечать",shop:"kiosk"}},"shop/kitchen|Cuisinella":{countryCodes:["fr","tn"],tags:{brand:"Cuisinella","brand:wikidata":"Q3007012","brand:wikipedia":"fr:Cuisinella",name:"Cuisinella",shop:"kitchen"}},"shop/kitchen|Ixina":{tags:{brand:"Ixina",name:"Ixina",shop:"kitchen"}},"shop/kitchen|Mobalpa":{countryCodes:["be","fr","gb"],tags:{brand:"Mobalpa","brand:wikidata":"Q3317571","brand:wikipedia":"fr:Mobalpa",name:"Mobalpa",shop:"kitchen"}},"shop/kitchen|Schmidt":{countryCodes:["be","es","fr","gb"],tags:{brand:"Schmidt","brand:wikidata":"Q3487620","brand:wikipedia":"de:Schmidt Groupe",name:"Schmidt",shop:"kitchen"}},"shop/kitchen|SoCoo'c":{countryCodes:["fr"],tags:{brand:"SoCoo'c","brand:wikidata":"Q62783840","brand:wikipedia":"fr:SoCoo'c",name:"SoCoo'c",shop:"kitchen"}},"shop/massage|Massage Envy":{countryCodes:["us"],tags:{brand:"Massage Envy","brand:wikidata":"Q22922899","brand:wikipedia":"en:Massage Envy",name:"Massage Envy",shop:"massage"}},"shop/medical_supply|Pofam-Poznań":{countryCodes:["pl"],tags:{brand:"Pofam-Poznań","brand:wikidata":"Q62057457",name:"Pofam-Poznań",shop:"medical_supply"}},"shop/medical_supply|Ортека":{countryCodes:["ru"],tags:{brand:"Ортека","brand:wikidata":"Q62393660",name:"Ортека",shop:"medical_supply"}},"shop/mobile_phone|3 Store":{matchNames:["3","three","three store"],tags:{brand:"3 Store","brand:wikidata":"Q407009","brand:wikipedia":"en:3 (telecommunications)",name:"3 Store",shop:"mobile_phone"}},"shop/mobile_phone|AT&T":{countryCodes:["mx","us"],tags:{brand:"AT&T","brand:wikidata":"Q298594","brand:wikipedia":"en:AT&T Mobility",name:"AT&T",shop:"mobile_phone"}},"shop/mobile_phone|Bell":{countryCodes:["ca"],tags:{brand:"Bell","brand:wikidata":"Q2894594","brand:wikipedia":"en:Bell Mobility",name:"Bell",shop:"mobile_phone"}},"shop/mobile_phone|Bitė":{countryCodes:["lt"],tags:{brand:"Bitė","brand:wikidata":"Q796010","brand:wikipedia":"lt:Bitės grupė",name:"Bitė",shop:"mobile_phone"}},"shop/mobile_phone|Boost Mobile":{countryCodes:["us"],tags:{brand:"Boost Mobile","brand:wikidata":"Q4943790","brand:wikipedia":"en:Boost Mobile",name:"Boost Mobile",shop:"mobile_phone"}},"shop/mobile_phone|Bouygues Telecom":{countryCodes:["fr"],tags:{brand:"Bouygues Telecom",name:"Bouygues Telecom",shop:"mobile_phone"}},"shop/mobile_phone|Carphone Warehouse":{countryCodes:["by","gb","ie"],tags:{brand:"Carphone Warehouse","brand:wikidata":"Q118046","brand:wikipedia":"en:Carphone Warehouse",name:"Carphone Warehouse",shop:"mobile_phone"}},"shop/mobile_phone|Claro":{tags:{brand:"Claro","brand:wikidata":"Q1770208","brand:wikipedia":"en:Claro (company)",name:"Claro",shop:"mobile_phone"}},"shop/mobile_phone|Cricket Wireless":{countryCodes:["us"],matchNames:["cricket"],tags:{brand:"Cricket Wireless","brand:wikidata":"Q5184987","brand:wikipedia":"en:Cricket Wireless",name:"Cricket Wireless",shop:"mobile_phone"}},"shop/mobile_phone|Digicel":{tags:{brand:"Digicel","brand:wikidata":"Q2117506","brand:wikipedia":"en:Digicel",name:"Digicel",shop:"mobile_phone"}},"shop/mobile_phone|EE":{countryCodes:["gb"],tags:{brand:"EE","brand:wikidata":"Q5322942","brand:wikipedia":"en:EE Limited",name:"EE",shop:"mobile_phone"}},"shop/mobile_phone|Entel":{tags:{brand:"Entel","brand:wikidata":"Q450420","brand:wikipedia":"en:Entel (Chile)",name:"Entel",shop:"mobile_phone"}},"shop/mobile_phone|Fido":{countryCodes:["ca"],tags:{brand:"Fido",name:"Fido",shop:"mobile_phone"}},"shop/mobile_phone|Freedom Mobile":{countryCodes:["ca"],matchNames:["wind mobile"],tags:{brand:"Freedom Mobile","brand:wikidata":"Q8023931","brand:wikipedia":"en:Freedom Mobile",name:"Freedom Mobile",shop:"mobile_phone"}},"shop/mobile_phone|MTN":{matchNames:["agence mtn"],matchTags:["office/telecommunication"],tags:{brand:"MTN","brand:wikidata":"Q1813361","brand:wikipedia":"en:MTN Group",name:"MTN",shop:"mobile_phone"}},"shop/mobile_phone|MetroPCS":{countryCodes:["us"],tags:{brand:"MetroPCS","brand:wikidata":"Q1925685","brand:wikipedia":"en:Metro by T-Mobile",name:"MetroPCS",shop:"mobile_phone"}},"shop/mobile_phone|Mobilcom Debitel":{countryCodes:["de","ir"],matchNames:["debitel"],tags:{brand:"Mobilcom Debitel","brand:wikidata":"Q344744","brand:wikipedia":"en:Debitel",name:"Mobilcom Debitel",shop:"mobile_phone"}},"shop/mobile_phone|Moov":{countryCodes:["ci","tg"],matchNames:["agence moov"],matchTags:["office/telecommunication"],tags:{brand:"Moov","brand:wikidata":"Q3323637","brand:wikipedia":"fr:Moov Côte d'Ivoire",name:"Moov",shop:"mobile_phone"}},"shop/mobile_phone|Movistar":{tags:{brand:"Movistar","brand:wikidata":"Q967735","brand:wikipedia":"en:Movistar",name:"Movistar",shop:"mobile_phone"}},"shop/mobile_phone|O2":{countryCodes:["cz","de","gb","ie","sk"],tags:{brand:"O2","brand:wikidata":"Q7072246","brand:wikipedia":"en:O2 (Ireland)",name:"O2",shop:"mobile_phone"}},"shop/mobile_phone|Optie1":{countryCodes:["nl"],tags:{brand:"Optie1","brand:wikidata":"Q62393564",name:"Optie1",shop:"mobile_phone"}},"shop/mobile_phone|Orange":{matchNames:["agence orange"],matchTags:["office/telecommunication"],tags:{brand:"Orange","brand:wikidata":"Q1431486","brand:wikipedia":"fr:Orange (entreprise)",name:"Orange",shop:"mobile_phone"}},"shop/mobile_phone|Personal":{countryCodes:["ar","py"],tags:{brand:"Personal","brand:wikidata":"Q10933021","brand:wikipedia":"es:Personal (Argentina)",name:"Personal",shop:"mobile_phone"}},"shop/mobile_phone|Phone House":{matchNames:["the phone house"],tags:{brand:"Phone House","brand:wikidata":"Q118046","brand:wikipedia":"en:Carphone Warehouse",name:"Phone House",shop:"mobile_phone"}},"shop/mobile_phone|Play":{countryCodes:["pl"],tags:{brand:"Play","brand:wikidata":"Q7202998","brand:wikipedia":"pl:Play (sieć telefonii komórkowej)",name:"Play",shop:"mobile_phone"}},"shop/mobile_phone|Plus":{countryCodes:["pl"],nomatch:["shop/supermarket|PLUS"],tags:{brand:"Plus","brand:wikidata":"Q7205598","brand:wikipedia":"pl:Plus (sieć telefonii komórkowej)",name:"Plus",shop:"mobile_phone"}},"shop/mobile_phone|Rogers":{countryCodes:["ca"],tags:{brand:"Rogers","brand:wikidata":"Q3439663","brand:wikipedia":"en:Rogers Wireless",name:"Rogers",shop:"mobile_phone"}},"shop/mobile_phone|SFR":{countryCodes:["fr","lu"],matchNames:["espace sfr"],tags:{brand:"SFR","brand:wikidata":"Q218765","brand:wikipedia":"en:SFR",name:"SFR",shop:"mobile_phone"}},"shop/mobile_phone|Sprint":{nomatch:["amenity/fuel|Sprint"],tags:{brand:"Sprint","brand:wikidata":"Q301965","brand:wikipedia":"en:Sprint Corporation",name:"Sprint",shop:"mobile_phone"}},"shop/mobile_phone|T-Mobile":{tags:{brand:"T-Mobile","brand:wikidata":"Q327634","brand:wikipedia":"en:T-Mobile",name:"T-Mobile",shop:"mobile_phone"}},"shop/mobile_phone|TIM":{countryCodes:["br","it"],tags:{brand:"TIM","brand:wikidata":"Q144617","brand:wikipedia":"en:Telecom Italia",name:"TIM",shop:"mobile_phone"}},"shop/mobile_phone|Telcel":{countryCodes:["cu","mx"],tags:{brand:"Telcel","brand:wikidata":"Q3517255","brand:wikipedia":"en:Telcel",name:"Telcel",shop:"mobile_phone"}},"shop/mobile_phone|Tele2":{tags:{brand:"Tele2","brand:wikidata":"Q309865","brand:wikipedia":"en:Tele2",name:"Tele2",shop:"mobile_phone"}},"shop/mobile_phone|Telekom":{countryCodes:["de","hu","ro","si","sk"],matchNames:["telekom shop"],tags:{brand:"Telekom","brand:wikidata":"Q9396","brand:wikipedia":"en:Deutsche Telekom",name:"Telekom",shop:"mobile_phone"}},"shop/mobile_phone|Telenor":{tags:{brand:"Telenor","brand:wikidata":"Q845632","brand:wikipedia":"en:Telenor",name:"Telenor",shop:"mobile_phone"}},"shop/mobile_phone|Telia":{countryCodes:["dk","fi","lt","no","se"],tags:{brand:"Telia",name:"Telia",shop:"mobile_phone"}},"shop/mobile_phone|Telstra":{countryCodes:["au"],tags:{brand:"Telstra","brand:wikidata":"Q721162","brand:wikipedia":"en:Telstra",name:"Telstra",shop:"mobile_phone"}},"shop/mobile_phone|Telus":{countryCodes:["ca"],tags:{brand:"Telus","brand:wikidata":"Q165858","brand:wikipedia":"en:Telus",name:"Telus",shop:"mobile_phone"}},"shop/mobile_phone|Turkcell":{countryCodes:["cy","tr"],tags:{brand:"Turkcell","brand:wikidata":"Q283852","brand:wikipedia":"en:Turkcell",name:"Turkcell",shop:"mobile_phone"}},"shop/mobile_phone|U.S. Cellular":{countryCodes:["us"],tags:{brand:"U.S. Cellular","brand:wikidata":"Q2466256","brand:wikipedia":"en:U.S. Cellular",name:"U.S. Cellular",shop:"mobile_phone"}},"shop/mobile_phone|Verizon Wireless":{countryCodes:["us"],matchNames:["verizon"],tags:{brand:"Verizon Wireless","brand:wikidata":"Q919641","brand:wikipedia":"en:Verizon Wireless",name:"Verizon Wireless",shop:"mobile_phone"}},"shop/mobile_phone|Vivo":{tags:{brand:"Vivo",name:"Vivo",shop:"mobile_phone"}},"shop/mobile_phone|Vodafone":{matchNames:["vodafone shop"],tags:{brand:"Vodafone","brand:wikidata":"Q122141","brand:wikipedia":"en:Vodafone",name:"Vodafone",shop:"mobile_phone"}},"shop/mobile_phone|WIFI_ETECSA":{countryCodes:["cu"],tags:{brand:"WIFI_ETECSA","brand:wikidata":"Q490323","brand:wikipedia":"es:Empresa de Telecomunicaciones de Cuba",name:"WIFI_ETECSA",shop:"mobile_phone"}},"shop/mobile_phone|Wind":{countryCodes:["it"],tags:{brand:"Wind","brand:wikidata":"Q650467","brand:wikipedia":"en:WIND (Italy)",name:"Wind",shop:"mobile_phone"}},"shop/mobile_phone|Yoigo":{countryCodes:["es"],tags:{brand:"Yoigo","brand:wikidata":"Q2630989","brand:wikipedia":"en:Yoigo",name:"Yoigo",shop:"mobile_phone"}},"shop/mobile_phone|auショップ":{countryCodes:["jp"],matchNames:["au"],tags:{brand:"au","brand:ja":"au","brand:wikidata":"Q307110","brand:wikipedia":"ja:Au (携帯電話)",name:"auショップ","name:en":"au","name:ja":"auショップ",shop:"mobile_phone"}},"shop/mobile_phone|Алло":{countryCodes:["md","ua"],tags:{brand:"Алло","brand:wikidata":"Q18683057","brand:wikipedia":"uk:Алло (торгова мережа)",name:"Алло",shop:"mobile_phone"}},"shop/mobile_phone|Билайн":{countryCodes:["kg","kz","ru"],tags:{brand:"Билайн","brand:en":"Beeline","brand:wikidata":"Q402880","brand:wikipedia":"en:Beeline (brand)",name:"Билайн","name:en":"Beeline",shop:"mobile_phone"}},"shop/mobile_phone|Евросеть":{countryCodes:["by","kz","ru","ua"],tags:{brand:"Евросеть","brand:en":"Euroset","brand:wikidata":"Q65310","brand:wikipedia":"en:Euroset",name:"Евросеть","name:en":"Euroset",shop:"mobile_phone"}},"shop/mobile_phone|Київстар":{countryCodes:["ua"],tags:{brand:"Київстар","brand:en":"Kyivstar","brand:wikidata":"Q2288463","brand:wikipedia":"en:Kyivstar",name:"Київстар","name:en":"Kyivstar",shop:"mobile_phone"}},"shop/mobile_phone|МТС":{countryCodes:["by","ru","ua"],tags:{brand:"МТС","brand:en":"MTS","brand:wikidata":"Q1368919","brand:wikipedia":"en:MTS (network provider)",name:"МТС","name:en":"MTS",shop:"mobile_phone"}},"shop/mobile_phone|Мегафон":{countryCodes:["ru","tj"],tags:{brand:"Мегафон","brand:en":"MegaFon","brand:wikidata":"Q1720713","brand:wikipedia":"en:MegaFon",name:"Мегафон","name:en":"MegaFon",shop:"mobile_phone"}},"shop/mobile_phone|Связной":{countryCodes:["by","ru","uz"],tags:{brand:"Связной","brand:en":"Svyaznoy","brand:wikidata":"Q65371","brand:wikipedia":"en:Svyaznoy",name:"Связной","name:en":"Svyaznoy",shop:"mobile_phone"}},"shop/mobile_phone|Теле2":{countryCodes:["ru"],tags:{brand:"Теле2","brand:en":"Tele2","brand:wikidata":"Q309865","brand:wikipedia":"en:Tele2",name:"Теле2","name:en":"Tele2",shop:"mobile_phone"}},"shop/mobile_phone|ソフトバンク":{countryCodes:["jp"],tags:{brand:"ソフトバンク","brand:en":"SoftBank Telecom","brand:ja":"ソフトバンク","brand:wikidata":"Q7553832","brand:wikipedia":"en:SoftBank Telecom",name:"ソフトバンク","name:en":"SoftBank Telecom","name:ja":"ソフトバンク",shop:"mobile_phone"}},"shop/mobile_phone|ソフトバンクショップ":{countryCodes:["jp"],tags:{brand:"ソフトバンクショップ","brand:en":"SoftBankShop","brand:ja":"ソフトバンクショップ","brand:wikidata":"Q11315281","brand:wikipedia":"ja:ソフトバンクショップ",name:"ソフトバンクショップ","name:en":"SoftBankShop","name:ja":"ソフトバンクショップ",shop:"mobile_phone"}},"shop/mobile_phone|ドコモショップ":{countryCodes:["jp"],tags:{brand:"ドコモショップ","brand:en":"DoCoMo Shop","brand:ja":"ドコモショップ","brand:wikidata":"Q853958","brand:wikipedia":"ja:NTTドコモ",name:"ドコモショップ","name:en":"DoCoMo Shop","name:ja":"ドコモショップ",shop:"mobile_phone"}},"shop/mobile_phone|ワイモバイル":{countryCodes:["jp"],tags:{brand:"ワイモバイル","brand:ja":"ワイモバイル",name:"ワイモバイル","name:ja":"ワイモバイル",shop:"mobile_phone"}},"shop/money_lender|Cash Store":{countryCodes:["us"],tags:{brand:"Cash Store","brand:wikidata":"Q61943411",name:"Cash Store",shop:"money_lender"}},"shop/money_lender|Check Into Cash":{countryCodes:["us"],tags:{brand:"Check Into Cash","brand:wikidata":"Q16961246","brand:wikipedia":"en:Check Into Cash",name:"Check Into Cash",shop:"money_lender"}},"shop/money_lender|Money Mart":{tags:{brand:"Money Mart","brand:wikidata":"Q6899166","brand:wikipedia":"en:Money Mart",name:"Money Mart",shop:"money_lender"}},"shop/motorcycle|Harley-Davidson":{tags:{brand:"Harley-Davidson","brand:wikidata":"Q192814","brand:wikipedia":"en:Harley-Davidson",name:"Harley-Davidson",shop:"motorcycle"}},"shop/motorcycle|Honda":{nomatch:["shop/car|Honda"],tags:{brand:"Honda","brand:wikidata":"Q9584","brand:wikipedia":"en:Honda",name:"Honda",shop:"motorcycle"}},"shop/motorcycle|Kawasaki":{tags:{brand:"Kawasaki","brand:wikidata":"Q6379855","brand:wikipedia":"en:Kawasaki motorcycles",name:"Kawasaki",shop:"motorcycle"}},"shop/motorcycle|Motortrade":{countryCodes:["ph"],tags:{brand:"Motortrade","brand:wikidata":"Q48803162","brand:wikipedia":"en:Motortrade",name:"Motortrade",shop:"motorcycle"}},"shop/motorcycle|Suzuki":{nomatch:["shop/car|Suzuki"],tags:{brand:"Suzuki","brand:wikidata":"Q181642","brand:wikipedia":"en:Suzuki",name:"Suzuki",shop:"motorcycle"}},"shop/motorcycle|Yamaha":{tags:{brand:"Yamaha","brand:wikidata":"Q158888","brand:wikipedia":"en:Yamaha Motor Company",name:"Yamaha",shop:"motorcycle"}},"shop/motorcycle|レッドバロン":{countryCodes:["jp"],tags:{brand:"レッドバロン","brand:ja":"レッドバロン",name:"レッドバロン","name:ja":"レッドバロン",shop:"motorcycle"}},"shop/music|HMV":{tags:{brand:"HMV","brand:wikidata":"Q10854572","brand:wikipedia":"en:HMV",name:"HMV",shop:"music"}},"shop/music|TSUTAYA":{nomatch:["shop/books|TSUTAYA","shop/video|TSUTAYA"],tags:{brand:"TSUTAYA","brand:wikidata":"Q5193457","brand:wikipedia":"ja:カルチュア・コンビニエンス・クラブ",name:"TSUTAYA",shop:"music"}},"shop/musical_instrument|Guitar Center":{tags:{brand:"Guitar Center","brand:wikidata":"Q3622794","brand:wikipedia":"en:Guitar Center",name:"Guitar Center",shop:"musical_instrument"}},"shop/newsagent|Cigo":{countryCodes:["de","nl"],tags:{brand:"Cigo","brand:wikidata":"Q62391977",name:"Cigo",shop:"newsagent"}},"shop/newsagent|Hudson News":{tags:{brand:"Hudson News",name:"Hudson News",shop:"newsagent"}},"shop/newsagent|Kolporter":{countryCodes:["pl"],matchTags:["shop/kiosk"],tags:{brand:"Kolporter","brand:wikidata":"Q6427874","brand:wikipedia":"pl:Kolporter (przedsiębiorstwo)",name:"Kolporter",shop:"kiosk"}},"shop/newsagent|Maison de la Presse":{countryCodes:["fr"],matchTags:["shop/books"],tags:{brand:"Maison de la Presse","brand:wikidata":"Q62085960",name:"Maison de la Presse",shop:"newsagent"}},"shop/newsagent|Martin's":{countryCodes:["gb"],matchTags:["shop/convenience"],tags:{brand:"Martin's","brand:wikidata":"Q16997477","brand:wikipedia":"en:McColl's",name:"Martin's",shop:"newsagent"}},"shop/newsagent|Primera":{countryCodes:["nl"],tags:{brand:"Primera","brand:wikidata":"Q2176149","brand:wikipedia":"nl:Primera (winkelketen)",name:"Primera",shop:"newsagent"}},"shop/newsagent|Relay":{matchTags:["shop/kiosk"],tags:{brand:"Relay","brand:wikidata":"Q3424298","brand:wikipedia":"en:Relay (shop)",name:"Relay",shop:"newsagent"}},"shop/newsagent|WHSmith":{matchTags:["shop/books","shop/kiosk"],tags:{brand:"WHSmith","brand:wikidata":"Q1548712","brand:wikipedia":"en:WHSmith",name:"WHSmith",shop:"newsagent"}},"shop/newsagent|k kiosk":{countryCodes:["ch"],nomatch:["shop/kiosk|k kiosk"],tags:{brand:"k kiosk","brand:wikidata":"Q60381703","brand:wikipedia":"it:K Kiosk",name:"k kiosk",shop:"newsagent"}},"shop/newsagent|Белсоюзпечать":{countryCodes:["by"],matchTags:["shop/kiosk"],nomatch:["shop/newsagent|Витебскоблсоюзпечать","shop/newsagent|Союзпечать"],tags:{brand:"Белсоюзпечать","brand:wikidata":"Q4430611","brand:wikipedia":"ru:Союзпечать",name:"Белсоюзпечать",shop:"newsagent"}},"shop/newsagent|Витебскоблсоюзпечать":{countryCodes:["by"],matchTags:["shop/kiosk"],nomatch:["shop/newsagent|Белсоюзпечать","shop/newsagent|Союзпечать"],tags:{brand:"Витебскоблсоюзпечать","brand:wikidata":"Q4430611","brand:wikipedia":"ru:Союзпечать",name:"Витебскоблсоюзпечать",shop:"newsagent"}},"shop/newsagent|Первая полоса":{tags:{brand:"Первая полоса","brand:wikidata":"Q62736412",name:"Первая полоса",shop:"newsagent"}},"shop/newsagent|Роспечать":{tags:{brand:"Роспечать",name:"Роспечать",shop:"newsagent"}},"shop/newsagent|Союзпечать":{countryCodes:["by","kz","ru","ua"],matchTags:["shop/kiosk"],nomatch:["shop/newsagent|Белсоюзпечать","shop/newsagent|Витебскоблсоюзпечать"],tags:{brand:"Союзпечать","brand:wikidata":"Q4430611","brand:wikipedia":"ru:Союзпечать",name:"Союзпечать",shop:"newsagent"}},"shop/newsagent|読売新聞":{countryCodes:["jp"],tags:{brand:"読売新聞","brand:en":"Yomiuri Shimbun","brand:wikidata":"Q645218","brand:wikipedia":"en:Yomiuri Shimbun",name:"読売新聞","name:en":"Yomiuri Shimbun",shop:"newsagent"}},"shop/nutrition_supplements|GNC":{tags:{brand:"GNC","brand:wikidata":"Q4808595","brand:wikipedia":"en:GNC (store)",name:"GNC",shop:"nutrition_supplements"}},"shop/nutrition_supplements|The Vitamin Shoppe":{countryCodes:["us"],tags:{brand:"The Vitamin Shoppe","brand:wikidata":"Q7772938","brand:wikipedia":"en:The Vitamin Shoppe",name:"The Vitamin Shoppe",shop:"nutrition_supplements"}},"shop/optician|Alain Afflelou":{tags:{brand:"Alain Afflelou","brand:wikidata":"Q2829511","brand:wikipedia":"fr:Alain Afflelou (entreprise)",name:"Alain Afflelou",shop:"optician"}},"shop/optician|America's Best Contacts & Eyeglasses":{countryCodes:["us"],tags:{brand:"America's Best Contacts & Eyeglasses","brand:wikidata":"Q4742504","brand:wikipedia":"en:America's Best Contacts & Eyeglasses",name:"America's Best Contacts & Eyeglasses",shop:"optician"}},"shop/optician|Apollo-Optik":{countryCodes:["de"],matchNames:["apollo"],nomatch:["amenity/pharmacy|Apollo Pharmacy"],tags:{brand:"Apollo-Optik","brand:wikidata":"Q618940","brand:wikipedia":"de:Apollo-Optik",name:"Apollo-Optik",shop:"optician"}},"shop/optician|Atol":{countryCodes:["fr"],tags:{brand:"Atol","brand:wikidata":"Q2869542","brand:wikipedia":"fr:Atol (opticien)",name:"Atol",shop:"optician"}},"shop/optician|Boots Opticians":{tags:{brand:"Boots Opticians","brand:wikidata":"Q4944037","brand:wikipedia":"en:Boots Opticians",name:"Boots Opticians",shop:"optician"}},"shop/optician|Die Brille":{tags:{brand:"Die Brille",name:"Die Brille",shop:"optician"}},"shop/optician|Eye Wish":{countryCodes:["nl"],tags:{brand:"Eye Wish","brand:wikidata":"Q62391641",name:"Eye Wish",operator:"GrandVision","operator:wikidata":"Q15812731","operator:wikipedia":"nl:GrandVision",shop:"optician"}},"shop/optician|Fielmann":{tags:{brand:"Fielmann","brand:wikidata":"Q457822","brand:wikipedia":"en:Fielmann",name:"Fielmann",shop:"optician"}},"shop/optician|GMO":{countryCodes:["cl","co","ec","pe"],tags:{brand:"GMO",name:"GMO",shop:"optician"}},"shop/optician|General Óptica":{countryCodes:["es"],tags:{brand:"General Óptica","brand:wikidata":"Q62391672",name:"General Óptica",shop:"optician"}},"shop/optician|Grand Optical":{countryCodes:["fr"],tags:{brand:"Grand Optical","brand:wikidata":"Q3113677","brand:wikipedia":"fr:Grand Optical",name:"Grand Optical",shop:"optician"}},"shop/optician|Générale d'Optique":{countryCodes:["fr"],tags:{brand:"Générale d'Optique","brand:wikidata":"Q62391701",name:"Générale d'Optique",shop:"optician"}},"shop/optician|Hakim Optical":{countryCodes:["ca"],tags:{brand:"Hakim Optical","brand:wikidata":"Q28232761","brand:wikipedia":"en:Hakim Optical",name:"Hakim Optical",shop:"optician"}},"shop/optician|Hans Anders":{tags:{brand:"Hans Anders","brand:wikidata":"Q1884976","brand:wikipedia":"nl:Hans Anders",name:"Hans Anders",shop:"optician"}},"shop/optician|Instrumentarium":{countryCodes:["fi"],tags:{brand:"Instrumentarium","brand:wikidata":"Q11864937","brand:wikipedia":"fi:Instrumentarium",name:"Instrumentarium",shop:"optician"}},"shop/optician|Krys":{countryCodes:["fr"],tags:{brand:"Krys","brand:wikidata":"Q3119538","brand:wikipedia":"fr:Krys Group",name:"Krys",shop:"optician"}},"shop/optician|LensCrafters":{tags:{brand:"LensCrafters","brand:wikidata":"Q6523209","brand:wikipedia":"en:LensCrafters",name:"LensCrafters",shop:"optician"}},"shop/optician|Les Opticiens Mutualistes":{countryCodes:["fr"],tags:{brand:"Les Opticiens Mutualistes","brand:wikidata":"Q18414551","brand:wikipedia":"fr:Les Opticiens Mutualistes",name:"Les Opticiens Mutualistes",shop:"optician"}},"shop/optician|Lissac":{tags:{brand:"Lissac","brand:wikidata":"Q63102559",name:"Lissac",shop:"optician"}},"shop/optician|Multiópticas~(Portugal)":{countryCodes:["pt"],tags:{brand:"Multiópticas","brand:wikidata":"Q62391722",name:"Multiópticas",shop:"optician"}},"shop/optician|Multiópticas~(Spain)":{countryCodes:["es"],tags:{brand:"Multiópticas","brand:wikidata":"Q62391719",name:"Multiópticas",shop:"optician"}},"shop/optician|Oakley":{matchTags:["shop/sports"],tags:{brand:"Oakley","brand:wikidata":"Q161906","brand:wikipedia":"en:Oakley, Inc.",name:"Oakley",shop:"optician"}},"shop/optician|Optic 2000":{tags:{brand:"Optic 2000","brand:wikidata":"Q3354445","brand:wikipedia":"fr:Optic 2000",name:"Optic 2000",shop:"optician"}},"shop/optician|Opticalia":{tags:{brand:"Opticalia","brand:wikidata":"Q62082114",name:"Opticalia",shop:"optician"}},"shop/optician|Pearle":{matchNames:["pearle vision"],tags:{brand:"Pearle","brand:wikidata":"Q2231148","brand:wikipedia":"en:Pearle Vision",name:"Pearle",shop:"optician"}},"shop/optician|Specsavers":{tags:{brand:"Specsavers","brand:wikidata":"Q2000610","brand:wikipedia":"en:Specsavers",name:"Specsavers",shop:"optician"}},"shop/optician|Sunglass Hut":{tags:{brand:"Sunglass Hut","brand:wikidata":"Q136311","brand:wikipedia":"en:Sunglass Hut",name:"Sunglass Hut",shop:"optician"}},"shop/optician|Synoptik":{countryCodes:["se"],tags:{brand:"Synoptik","brand:wikidata":"Q10687541","brand:wikipedia":"sv:Synoptik",name:"Synoptik",shop:"optician"}},"shop/optician|Synsam":{countryCodes:["fi","no","se"],tags:{brand:"Synsam","brand:wikidata":"Q12004589","brand:wikipedia":"sv:Synsam",name:"Synsam",shop:"optician"}},"shop/optician|Target Optical":{countryCodes:["us"],tags:{brand:"Target Optical","brand:wikidata":"Q19903688","brand:wikipedia":"en:Target Optical",name:"Target Optical",shop:"optician"}},"shop/optician|Vision Express":{tags:{brand:"Vision Express","brand:wikidata":"Q7936150","brand:wikipedia":"en:Vision Express",name:"Vision Express",shop:"optician"}},"shop/optician|Visionworks":{tags:{brand:"Visionworks","brand:wikidata":"Q5422607","brand:wikipedia":"en:Visionworks",name:"Visionworks",shop:"optician"}},"shop/optician|Оптимист Оптика":{countryCodes:["ru"],tags:{brand:"Оптимист Оптика",name:"Оптимист Оптика",shop:"optician"}},"shop/optician|แว่นท็อปเจริญ":{countryCodes:["th"],tags:{brand:"แว่นท็อปเจริญ","brand:th":"แว่นท็อปเจริญ","brand:wikidata":"Q62391732",name:"แว่นท็อปเจริญ","name:th":"แว่นท็อปเจริญ",shop:"optician"}},"shop/optician|メガネストアー":{countryCodes:["jp"],tags:{brand:"メガネストアー","brand:ja":"メガネストアー",name:"メガネストアー","name:ja":"メガネストアー",shop:"optician"}},"shop/optician|メガネスーパー":{countryCodes:["jp"],tags:{brand:"メガネスーパー","brand:ja":"メガネスーパー","brand:wikidata":"Q11343504","brand:wikipedia":"ja:メガネスーパー",name:"メガネスーパー","name:en":"Meganesuper","name:ja":"メガネスーパー",shop:"optician"}},"shop/optician|寶島眼鏡":{countryCodes:["zh"],tags:{brand:"寶島眼鏡","brand:wikidata":"Q62391741",name:"寶島眼鏡",shop:"optician"}},"shop/optician|眼鏡市場":{countryCodes:["jp"],tags:{brand:"眼鏡市場","brand:en":"Megane Ichiba","brand:wikidata":"Q11343506","brand:wikipedia":"ja:メガネトップ",name:"眼鏡市場","name:en":"Megane Ichiba",shop:"optician"}},"shop/outdoor|Bass Pro Shops":{countryCodes:["ca","us"],tags:{brand:"Bass Pro Shops","brand:wikidata":"Q4867953","brand:wikipedia":"en:Bass Pro Shops",name:"Bass Pro Shops",shop:"outdoor"}},"shop/outdoor|Cabela's":{countryCodes:["ca","us"],tags:{brand:"Cabela's","brand:wikidata":"Q2793714","brand:wikipedia":"en:Cabela's",name:"Cabela's",shop:"outdoor"}},"shop/outdoor|Jack Wolfskin":{countryCodes:["ch","de","fr"],matchTags:["shop/clothes"],tags:{brand:"Jack Wolfskin","brand:wikidata":"Q536133","brand:wikipedia":"en:Jack Wolfskin",name:"Jack Wolfskin",shop:"outdoor"}},"shop/outdoor|Kathmandu":{countryCodes:["au","nz"],tags:{brand:"Kathmandu","brand:wikidata":"Q1736294","brand:wikipedia":"en:Kathmandu (company)",name:"Kathmandu",shop:"outdoor"}},"shop/outdoor|Mountain Warehouse":{tags:{brand:"Mountain Warehouse","brand:wikidata":"Q6925414","brand:wikipedia":"en:Mountain Warehouse",name:"Mountain Warehouse",shop:"outdoor"}},"shop/outdoor|REI":{countryCodes:["id","us"],tags:{brand:"REI","brand:wikidata":"Q3414933","brand:wikipedia":"en:Recreational Equipment, Inc.",name:"REI",shop:"outdoor"}},"shop/outdoor|Sportsman's Warehouse":{countryCodes:["us"],tags:{brand:"Sportsman's Warehouse","brand:wikidata":"Q7579979","brand:wikipedia":"en:Sportsman's Warehouse",name:"Sportsman's Warehouse",shop:"outdoor"}},"shop/outdoor|Trespass":{countryCodes:["fr","gb","ie"],tags:{brand:"Trespass","brand:wikidata":"Q17035733","brand:wikipedia":"en:Trespass (clothing)",name:"Trespass",shop:"outdoor"}},"shop/outpost|Wildberries":{countryCodes:["by","ru"],matchTags:["shop/clothes"],tags:{brand:"Wildberries","brand:wikidata":"Q24933714","brand:wikipedia":"ru:Wildberries",name:"Wildberries",shop:"outpost"}},"shop/paint|Benjamin Moore":{tags:{brand:"Benjamin Moore","brand:wikidata":"Q4889038","brand:wikipedia":"en:Benjamin Moore & Co.",name:"Benjamin Moore",shop:"paint"}},"shop/paint|Comex":{tags:{brand:"Comex","brand:wikidata":"Q5151654","brand:wikipedia":"en:Comex Group",name:"Comex",shop:"paint"}},"shop/paint|Jotun":{tags:{brand:"Jotun","brand:wikidata":"Q1778870","brand:wikipedia":"en:Jotun (company)",name:"Jotun",shop:"paint"}},"shop/paint|National Paints":{tags:{brand:"National Paints","brand:wikidata":"Q62073521",name:"National Paints",shop:"paint"}},"shop/paint|Sherwin Williams":{matchNames:["sherwin williams paints"],tags:{brand:"Sherwin Williams","brand:wikidata":"Q48881","brand:wikipedia":"en:Sherwin-Williams",name:"Sherwin Williams",shop:"paint"}},"shop/party|Party City":{tags:{brand:"Party City","brand:wikidata":"Q7140896","brand:wikipedia":"en:Party City",name:"Party City",shop:"party"}},"shop/pastry|Smallcakes":{countryCodes:["us"],matchTags:["shop/bakery"],tags:{brand:"Smallcakes","brand:wikidata":"Q62384749",name:"Smallcakes",shop:"pastry"}},"shop/pawnbroker|Cash Converters":{tags:{brand:"Cash Converters","brand:wikidata":"Q5048645","brand:wikipedia":"en:Cash Converters",name:"Cash Converters",shop:"pawnbroker"}},"shop/pawnbroker|Cebuana Lhuillier":{countryCodes:["ph"],tags:{brand:"Cebuana Lhuillier","brand:wikidata":"Q17064661","brand:wikipedia":"en:Cebuana Lhuillier",name:"Cebuana Lhuillier",shop:"pawnbroker"}},"shop/pawnbroker|Loombard":{tags:{brand:"Loombard",name:"Loombard",shop:"pawnbroker"}},"shop/pawnbroker|M Lhuillier":{tags:{brand:"M Lhuillier",name:"M Lhuillier",shop:"pawnbroker"}},"shop/pawnbroker|Palawan Pawnshop":{countryCodes:["ph"],tags:{brand:"Palawan Pawnshop","brand:wikidata":"Q62391488",name:"Palawan Pawnshop",shop:"pawnbroker"}},"shop/pawnbroker|RD Pawnshop":{tags:{brand:"RD Pawnshop",name:"RD Pawnshop",shop:"pawnbroker"}},"shop/pawnbroker|Villarica Pawnshop":{countryCodes:["ph"],tags:{brand:"Villarica Pawnshop","brand:wikidata":"Q62391438",name:"Villarica Pawnshop",shop:"pawnbroker"}},"shop/pawnbroker|Скарбниця":{tags:{brand:"Скарбниця",name:"Скарбниця",shop:"pawnbroker"}},"shop/perfumery|Douglas":{matchTags:["shop/beauty","shop/chemist","shop/cosmetics"],tags:{brand:"Douglas","brand:wikidata":"Q2052213","brand:wikipedia":"de:Parfümerie Douglas",name:"Douglas",shop:"perfumery"}},"shop/perfumery|FAnn":{countryCodes:["cz","sk"],tags:{brand:"FAnn","brand:wikidata":"Q62391353",name:"FAnn",shop:"perfumery"}},"shop/perfumery|ICI PARIS XL":{countryCodes:["be","lu","nl"],tags:{brand:"ICI PARIS XL","brand:wikidata":"Q769749","brand:wikipedia":"en:ICI Paris XL",name:"ICI PARIS XL",shop:"perfumery"}},"shop/perfumery|Marionnaud":{countryCodes:["at","ch","es","fr","it","sk"],matchTags:["shop/beauty","shop/cosmetics"],tags:{brand:"Marionnaud","brand:wikidata":"Q1129073","brand:wikipedia":"fr:Marionnaud",name:"Marionnaud",shop:"perfumery"}},"shop/perfumery|O Boticário":{countryCodes:["br"],tags:{brand:"O Boticário","brand:wikidata":"Q7073219","brand:wikipedia":"en:O Boticário",name:"O Boticário",shop:"perfumery"}},"shop/pet|Das Futterhaus":{countryCodes:["at","de"],tags:{brand:"Das Futterhaus","brand:wikidata":"Q1167914","brand:wikipedia":"de:Das Futterhaus",name:"Das Futterhaus",shop:"pet"}},"shop/pet|Fressnapf":{tags:{brand:"Fressnapf","brand:wikidata":"Q875796","brand:wikipedia":"en:Fressnapf",name:"Fressnapf",shop:"pet"}},"shop/pet|Global Pet Foods":{countryCodes:["ca"],tags:{brand:"Global Pet Foods","brand:wikidata":"Q57985699",name:"Global Pet Foods",shop:"pet"}},"shop/pet|Maxi Zoo":{tags:{brand:"Maxi Zoo","brand:wikidata":"Q875796","brand:wikipedia":"en:Fressnapf",name:"Maxi Zoo",shop:"pet"}},"shop/pet|Mud Bay":{countryCodes:["us"],tags:{brand:"Mud Bay","brand:wikidata":"Q30324179","brand:wikipedia":"en:Mud Bay pet store",name:"Mud Bay",shop:"pet"}},"shop/pet|Pet Food Express":{countryCodes:["us"],tags:{brand:"Pet Food Express","brand:wikidata":"Q7171541","brand:wikipedia":"en:Pet Food Express",name:"Pet Food Express",shop:"pet"}},"shop/pet|Pet Supermarket":{countryCodes:["us"],tags:{brand:"Pet Supermarket","brand:wikidata":"Q61968363",name:"Pet Supermarket",shop:"pet"}},"shop/pet|Pet Supplies Plus":{countryCodes:["us"],tags:{brand:"Pet Supplies Plus","brand:wikidata":"Q7171563","brand:wikipedia":"en:Pet Supplies Plus",name:"Pet Supplies Plus",shop:"pet"}},"shop/pet|Pet Valu":{countryCodes:["ca","us"],tags:{brand:"Pet Valu","brand:wikidata":"Q58009635",name:"Pet Valu",shop:"pet"}},"shop/pet|PetSmart":{countryCodes:["ca","us"],tags:{brand:"PetSmart","brand:wikidata":"Q3307147","brand:wikipedia":"en:PetSmart",name:"PetSmart",shop:"pet"}},"shop/pet|Petco":{countryCodes:["us"],tags:{brand:"Petco","brand:wikidata":"Q7171798","brand:wikipedia":"en:Petco",name:"Petco",shop:"pet"}},"shop/pet|Petland":{countryCodes:["us"],tags:{brand:"Petland","brand:wikidata":"Q17111474","brand:wikipedia":"en:Petland",name:"Petland",shop:"pet"}},"shop/pet|Petland Discounts":{countryCodes:["us"],tags:{brand:"Petland Discounts","brand:wikidata":"Q7178463","brand:wikipedia":"en:Petland Discounts",name:"Petland Discounts",shop:"pet"}},"shop/pet|Pets at Home":{tags:{brand:"Pets at Home","brand:wikidata":"Q7179258","brand:wikipedia":"en:Pets at Home",name:"Pets at Home",shop:"pet"}},"shop/pet|Unleashed":{countryCodes:["us"],tags:{alt_name:"Unleashed by Petco",brand:"Unleashed","brand:wikidata":"Q62122874",name:"Unleashed",operator:"Petco","operator:wikidata":"Q7171798","operator:wikipedia":"en:Petco",shop:"pet"}},"shop/pet|Бетховен":{countryCodes:["ru"],tags:{brand:"Бетховен","brand:wikidata":"Q62390798",name:"Бетховен",shop:"pet"}},"shop/pet|Четыре лапы":{countryCodes:["kz","ru"],tags:{brand:"Четыре лапы","brand:wikidata":"Q62390783",name:"Четыре лапы",shop:"pet"}},"shop/photo|Kodak Express":{matchNames:["kodak"],tags:{brand:"Kodak Express","brand:wikidata":"Q6425126","brand:wikipedia":"en:Kodak Express",name:"Kodak Express",shop:"photo"}},"shop/photo|Max Spielmann":{countryCodes:["gb"],tags:{brand:"Max Spielmann",name:"Max Spielmann",shop:"photo"}},"shop/photo|カメラのキタムラ":{countryCodes:["jp"],tags:{brand:"カメラのキタムラ","brand:ja":"カメラのキタムラ",name:"カメラのキタムラ","name:ja":"カメラのキタムラ",shop:"photo"}},"shop/second_hand|Value Village":{countryCodes:["ca","us"],tags:{brand:"Value Village","brand:wikidata":"Q7428188","brand:wikipedia":"en:Savers",name:"Value Village",shop:"second_hand"}},"shop/shoes|ABCマート":{countryCodes:["jp"],tags:{brand:"ABCマート","brand:ja":"ABCマート","brand:wikidata":"Q11188787","brand:wikipedia":"en:ABC-Mart",name:"ABCマート","name:ja":"ABCマート",shop:"shoes"}},"shop/shoes|Aldo":{tags:{brand:"Aldo","brand:wikidata":"Q2832297","brand:wikipedia":"en:Aldo Group",name:"Aldo",shop:"shoes"}},"shop/shoes|André":{countryCodes:["fr"],tags:{brand:"André","brand:wikidata":"Q2847114","brand:wikipedia":"fr:André (chaussure)",name:"André",shop:"shoes"}},"shop/shoes|Bata":{tags:{brand:"Bata","brand:wikidata":"Q688082","brand:wikipedia":"en:Bata (company)",name:"Bata",shop:"shoes"}},"shop/shoes|Belwest":{countryCodes:["by","ru"],tags:{brand:"Belwest",name:"Belwest",shop:"shoes"}},"shop/shoes|Besson Chaussures":{countryCodes:["fr"],tags:{brand:"Besson Chaussures","brand:wikidata":"Q2899930","brand:wikipedia":"fr:Besson Chaussures",name:"Besson Chaussures",operator:"Vivarte","operator:wikidata":"Q3561446","operator:wikipedia":"fr:Vivarte",shop:"shoes"}},"shop/shoes|Birkenstock":{tags:{brand:"Birkenstock","brand:wikidata":"Q648458","brand:wikipedia":"en:Birkenstock",name:"Birkenstock",shop:"shoes"}},"shop/shoes|Brantano":{countryCodes:["be","gb","lu"],tags:{brand:"Brantano","brand:wikidata":"Q4957616","brand:wikipedia":"en:Brantano Footwear",name:"Brantano",shop:"shoes"}},"shop/shoes|CCC":{tags:{brand:"CCC","brand:wikidata":"Q11788344","brand:wikipedia":"de:CCC (Unternehmen)",name:"CCC",shop:"shoes"}},"shop/shoes|Camper":{tags:{brand:"Camper","brand:wikidata":"Q1030922","brand:wikipedia":"en:Camper (company)",name:"Camper",shop:"shoes"}},"shop/shoes|Chaussea":{countryCodes:["be","es","fr","lu"],tags:{brand:"Chaussea","brand:wikidata":"Q62082044",name:"Chaussea",shop:"shoes"}},"shop/shoes|Clarks":{tags:{brand:"Clarks","brand:wikidata":"Q1095857","brand:wikipedia":"en:C. & J. Clark",name:"Clarks",shop:"shoes"}},"shop/shoes|Converse":{tags:{brand:"Converse","brand:wikidata":"Q319515","brand:wikipedia":"en:Converse (shoe company)",name:"Converse",shop:"shoes"}},"shop/shoes|Crocs":{tags:{brand:"Crocs","brand:wikidata":"Q926699","brand:wikipedia":"en:Crocs",name:"Crocs",shop:"shoes"}},"shop/shoes|DSW":{countryCodes:["ca","us"],tags:{brand:"DSW","brand:wikidata":"Q5206207","brand:wikipedia":"en:Designer Brands",name:"DSW",shop:"shoes"}},"shop/shoes|Deichmann":{tags:{brand:"Deichmann","brand:wikidata":"Q664543","brand:wikipedia":"en:Deichmann SE",name:"Deichmann",shop:"shoes"}},"shop/shoes|Din sko":{countryCodes:["no","se"],tags:{brand:"Din sko","brand:wikidata":"Q10472869","brand:wikipedia":"sv:Din sko",name:"Din sko",shop:"shoes"}},"shop/shoes|Dosenbach":{countryCodes:["ch"],tags:{brand:"Dosenbach","brand:wikidata":"Q2677329","brand:wikipedia":"de:Dosenbach-Ochsner",name:"Dosenbach",shop:"shoes"}},"shop/shoes|Ecco":{tags:{brand:"Ecco","brand:wikidata":"Q1280255","brand:wikipedia":"en:ECCO",name:"Ecco",shop:"shoes"}},"shop/shoes|FLO":{countryCodes:["al","tr"],tags:{brand:"FLO","brand:wikidata":"Q61994802",name:"FLO",shop:"shoes"}},"shop/shoes|Famous Footwear":{countryCodes:["us"],tags:{brand:"Famous Footwear","brand:wikidata":"Q5433457","brand:wikipedia":"en:Famous Footwear",name:"Famous Footwear",shop:"shoes"}},"shop/shoes|Foot Locker":{tags:{brand:"Foot Locker","brand:wikidata":"Q63335","brand:wikipedia":"en:Foot Locker",name:"Foot Locker",shop:"shoes"}},"shop/shoes|Gabor":{countryCodes:["de","it"],tags:{brand:"Gabor","brand:wikidata":"Q1488760","brand:wikipedia":"de:Gabor Shoes",name:"Gabor",shop:"shoes"}},"shop/shoes|Geox":{tags:{brand:"Geox","brand:wikidata":"Q588001","brand:wikipedia":"en:Geox",name:"Geox",shop:"shoes"}},"shop/shoes|Görtz":{countryCodes:["de"],tags:{brand:"Görtz","brand:wikidata":"Q1559593","brand:wikipedia":"de:Ludwig Görtz",name:"Görtz",shop:"shoes"}},"shop/shoes|Humanic":{tags:{brand:"Humanic","brand:wikidata":"Q1636668","brand:wikipedia":"en:Humanic",name:"Humanic",shop:"shoes"}},"shop/shoes|Hush Puppies":{tags:{brand:"Hush Puppies","brand:wikidata":"Q1828588","brand:wikipedia":"en:Hush Puppies",name:"Hush Puppies",shop:"shoes"}},"shop/shoes|Johnston & Murphy":{countryCodes:["ca","us"],tags:{brand:"Johnston & Murphy","brand:wikidata":"Q6268615","brand:wikipedia":"en:Johnston & Murphy",name:"Johnston & Murphy",shop:"shoes"}},"shop/shoes|Journeys":{countryCodes:["ca","us"],tags:{brand:"Journeys","brand:wikidata":"Q61994838",name:"Journeys",operator:"Genesco","operator:wikidata":"Q5532704","operator:wikipedia":"en:Genesco",shop:"shoes"}},"shop/shoes|Kari":{tags:{brand:"Kari","brand:wikidata":"Q47155680","brand:wikipedia":"ru:Kari (компания)",name:"Kari",shop:"shoes"}},"shop/shoes|La Halle aux Chaussures":{countryCodes:["fr"],tags:{brand:"La Halle aux Chaussures","brand:wikidata":"Q62390731",name:"La Halle aux Chaussures",operator:"Vivarte","operator:wikidata":"Q3561446","operator:wikipedia":"fr:Vivarte",shop:"shoes"}},"shop/shoes|Mephisto":{tags:{brand:"Mephisto","brand:wikidata":"Q822975","brand:wikipedia":"fr:Mephisto (chaussure)",name:"Mephisto",shop:"shoes"}},"shop/shoes|Merrell":{tags:{brand:"Merrell","brand:wikidata":"Q1921997","brand:wikipedia":"en:Merrell (company)",name:"Merrell",shop:"shoes"}},"shop/shoes|Minelli":{tags:{brand:"Minelli","brand:wikidata":"Q61994831",name:"Minelli",operator:"Vivarte","operator:wikidata":"Q3561446","operator:wikipedia":"fr:Vivarte",shop:"shoes"}},"shop/shoes|New Balance":{tags:{brand:"New Balance","brand:wikidata":"Q742988","brand:wikipedia":"en:New Balance",name:"New Balance",shop:"shoes"}},"shop/shoes|Office":{countryCodes:["de","gb","ie","ro"],tags:{brand:"Office","brand:wikidata":"Q7079121","brand:wikipedia":"en:Office Holdings",name:"Office",shop:"shoes"}},"shop/shoes|Payless ShoeSource":{matchNames:["payless"],tags:{brand:"Payless ShoeSource","brand:wikidata":"Q7156755","brand:wikipedia":"en:Payless ShoeSource",name:"Payless ShoeSource",shop:"shoes"}},"shop/shoes|Quick Schuh":{countryCodes:["at","de"],tags:{brand:"Quick Schuh","brand:wikidata":"Q2123069","brand:wikipedia":"de:Quick Schuh",name:"Quick Schuh",shop:"shoes"}},"shop/shoes|Rack Room Shoes":{countryCodes:["us"],tags:{brand:"Rack Room Shoes","brand:wikidata":"Q17109937","brand:wikipedia":"en:Rack Room Shoes",name:"Rack Room Shoes",shop:"shoes"}},"shop/shoes|Red Wing":{countryCodes:["de","gb","nl","us"],tags:{brand:"Red Wing","brand:wikidata":"Q934096","brand:wikipedia":"en:Red Wing Shoes",name:"Red Wing",shop:"shoes"}},"shop/shoes|Reno":{countryCodes:["at","ch","de","hu","sk"],tags:{brand:"Reno","brand:wikidata":"Q2144204","brand:wikipedia":"de:Reno (Schuhhandel)",name:"Reno",shop:"shoes"}},"shop/shoes|Respect":{countryCodes:["by","ru","ua"],tags:{brand:"Respect",name:"Respect",shop:"shoes"}},"shop/shoes|Rieker":{tags:{brand:"Rieker","brand:wikidata":"Q2152193","brand:wikipedia":"en:Rieker Shoes",name:"Rieker",shop:"shoes"}},"shop/shoes|Rockport":{tags:{brand:"Rockport","brand:wikidata":"Q4048384","brand:wikipedia":"en:Rockport (company)",name:"Rockport",shop:"shoes"}},"shop/shoes|Salamander":{tags:{brand:"Salamander","brand:wikidata":"Q878354","brand:wikipedia":"de:Salamander (Schuhe)",name:"Salamander",shop:"shoes"}},"shop/shoes|San Marina":{countryCodes:["fr"],tags:{brand:"San Marina","brand:wikidata":"Q3471558","brand:wikipedia":"fr:San Marina",name:"San Marina",shop:"shoes"}},"shop/shoes|Scapino":{countryCodes:["nl"],tags:{brand:"Scapino","brand:wikidata":"Q2298792","brand:wikipedia":"nl:Scapino (winkelketen)",name:"Scapino",shop:"shoes"}},"shop/shoes|Schuh":{countryCodes:["de","gb","gg","ie"],tags:{brand:"Schuh","brand:wikidata":"Q7432952","brand:wikipedia":"en:Schuh",name:"Schuh",shop:"shoes"}},"shop/shoes|Shoe Carnival":{countryCodes:["us"],tags:{brand:"Shoe Carnival","brand:wikidata":"Q7500007","brand:wikipedia":"en:Shoe Carnival",name:"Shoe Carnival",shop:"shoes"}},"shop/shoes|Shoe Zone":{tags:{brand:"Shoe Zone","brand:wikidata":"Q7500016","brand:wikipedia":"en:Shoe Zone",name:"Shoe Zone",shop:"shoes"}},"shop/shoes|Siemes Schuhcenter":{countryCodes:["de"],tags:{brand:"Siemes Schuhcenter","brand:wikidata":"Q2800720","brand:wikipedia":"de:Siemes (Unternehmen)",name:"Siemes Schuhcenter",shop:"shoes"}},"shop/shoes|Skechers":{tags:{brand:"Skechers","brand:wikidata":"Q2945643","brand:wikipedia":"en:Skechers",name:"Skechers",shop:"shoes"}},"shop/shoes|Snipes":{countryCodes:["at","ch","de","nl"],tags:{brand:"Snipes",name:"Snipes",shop:"shoes"}},"shop/shoes|Sperry":{countryCodes:["us"],matchNames:["sperry top sider"],tags:{brand:"Sperry","brand:wikidata":"Q7576421","brand:wikipedia":"en:Sperry Top-Sider",name:"Sperry",shop:"shoes"}},"shop/shoes|Stride Rite":{countryCodes:["us"],tags:{brand:"Stride Rite","brand:wikidata":"Q2356171","brand:wikipedia":"en:Stride Rite Corporation",name:"Stride Rite",shop:"shoes"}},"shop/shoes|Tamaris":{countryCodes:["at","be","de","fr","nl"],tags:{brand:"Tamaris","brand:wikidata":"Q61994827",name:"Tamaris",operator:"Wortmann Schuh-Holding","operator:wikidata":"Q1726079","operator:wikipedia":"de:Wortmann Schuh-Holding",shop:"shoes"}},"shop/shoes|The Shoe Company":{countryCodes:["ca"],tags:{brand:"The Shoe Company","brand:wikidata":"Q7763892","brand:wikipedia":"en:The Shoe Company",name:"The Shoe Company",shop:"shoes"}},"shop/shoes|UGG":{countryCodes:["au","us"],tags:{brand:"UGG","brand:wikidata":"Q1138480","brand:wikipedia":"en:UGG (brand)",name:"UGG",shop:"shoes"}},"shop/shoes|Vans":{matchTags:["shop/clothes"],tags:{brand:"Vans","brand:wikidata":"Q1135366","brand:wikipedia":"en:Vans",name:"Vans",shop:"shoes"}},"shop/shoes|vanHaren":{countryCodes:["be","nl"],tags:{brand:"vanHaren","brand:wikidata":"Q62390668",name:"vanHaren",shop:"shoes"}},"shop/shoes|Éram":{countryCodes:["be","fr"],tags:{brand:"Éram","brand:wikidata":"Q16684192","brand:wikipedia":"fr:Éram",name:"Éram",shop:"shoes"}},"shop/shoes|Марко":{tags:{brand:"Марко",name:"Марко",shop:"shoes"}},"shop/shoes|ЦентрОбувь":{countryCodes:["by","ru","ua"],tags:{brand:"ЦентрОбувь","brand:wikidata":"Q4504072","brand:wikipedia":"ru:ЦентрОбувь",name:"ЦентрОбувь",shop:"shoes"}},"shop/shoes|Юничел":{countryCodes:["kz","ru"],tags:{brand:"Юничел","brand:wikidata":"Q62390569",name:"Юничел",shop:"shoes"}},"shop/shoes|東京靴流通センター":{countryCodes:["jp"],tags:{brand:"東京靴流通センター","brand:en":"Tokyo Shoes Retailing Center","brand:ja":"東京靴流通センター","brand:wikidata":"Q11318515","brand:wikipedia":"ja:チヨダ",name:"東京靴流通センター","name:en":"Tokyo Shoes Retailing Center","name:ja":"東京靴流通センター",shop:"shoes"}},"shop/sports|Academy Sports + Outdoors":{countryCodes:["us"],matchNames:["academy","academy sports and outdoors"],matchTags:["shop/outdoor"],tags:{brand:"Academy Sports + Outdoors","brand:wikidata":"Q4671380","brand:wikipedia":"en:Academy Sports + Outdoors",name:"Academy Sports + Outdoors",shop:"sports"}},"shop/sports|Adidas":{matchTags:["shop/clothes","shop/shoes"],tags:{brand:"Adidas","brand:wikidata":"Q3895","brand:wikipedia":"en:Adidas",name:"Adidas",shop:"sports"}},"shop/sports|Aktiesport":{countryCodes:["nl"],tags:{brand:"Aktiesport","brand:wikidata":"Q57546889",name:"Aktiesport",shop:"sports"}},"shop/sports|American Golf":{countryCodes:["gb","ie"],matchTags:["shop/golf"],tags:{brand:"American Golf","brand:wikidata":"Q62657494",name:"American Golf",shop:"sports",sport:"golf"}},"shop/sports|Big 5 Sporting Goods":{countryCodes:["us"],tags:{brand:"Big 5 Sporting Goods","brand:wikidata":"Q4904902","brand:wikipedia":"en:Big 5 Sporting Goods",name:"Big 5 Sporting Goods",shop:"sports"}},"shop/sports|Centauro":{countryCodes:["br"],tags:{brand:"Centauro","brand:wikidata":"Q28679561","brand:wikipedia":"pt:Lojas Centauro",name:"Centauro",shop:"sports"}},"shop/sports|Decathlon":{tags:{brand:"Decathlon","brand:wikidata":"Q509349","brand:wikipedia":"en:Decathlon Group",name:"Decathlon",shop:"sports"}},"shop/sports|Dick's Sporting Goods":{countryCodes:["us"],tags:{brand:"Dick's Sporting Goods","brand:wikidata":"Q5272601","brand:wikipedia":"en:Dick's Sporting Goods",name:"Dick's Sporting Goods",shop:"sports"}},"shop/sports|Hervis":{countryCodes:["at","cz","de","hr","hu","ro","si"],matchNames:["hervis sport","hervis sports"],tags:{brand:"Hervis","brand:wikidata":"Q1614816","brand:wikipedia":"de:Hervis",name:"Hervis",shop:"sports"}},"shop/sports|Hibbett Sports":{countryCodes:["us"],tags:{brand:"Hibbett Sports","brand:wikidata":"Q5750671","brand:wikipedia":"en:Hibbett Sports",name:"Hibbett Sports",shop:"sports"}},"shop/sports|Intersport":{tags:{brand:"Intersport","brand:wikidata":"Q666888","brand:wikipedia":"en:Intersport",name:"Intersport",shop:"sports"}},"shop/sports|JD Sports":{countryCodes:["de","es","fr","gb","ie","nl"],tags:{brand:"JD Sports","brand:wikidata":"Q6108019","brand:wikipedia":"en:JD Sports",name:"JD Sports",shop:"sports"}},"shop/sports|Marathon Sports":{countryCodes:["bo","ec","pe"],tags:{brand:"Marathon Sports","brand:wikidata":"Q3027516","brand:wikipedia":"es:Marathon Sports",name:"Marathon Sports",shop:"sports"}},"shop/sports|Martes Sport":{countryCodes:["pl"],tags:{brand:"Martes Sport","brand:wikidata":"Q62073490",name:"Martes Sport",shop:"sports"}},"shop/sports|Modell’s Sporting Goods":{countryCodes:["us"],tags:{brand:"Modell’s Sporting Goods","brand:wikidata":"Q3317844","brand:wikipedia":"en:Modell's Sporting Goods",name:"Modell’s Sporting Goods",shop:"sports"}},"shop/sports|Play It Again Sports":{countryCodes:["ca","us"],tags:{brand:"Play It Again Sports","brand:wikidata":"Q7203029","brand:wikipedia":"en:Play It Again Sports",name:"Play It Again Sports",shop:"sports"}},"shop/sports|Sport 2000":{tags:{brand:"Sport 2000","brand:wikidata":"Q262394","brand:wikipedia":"de:Sport 2000",name:"Sport 2000",shop:"sports"}},"shop/sports|Sportisimo":{countryCodes:["cz","sk"],tags:{brand:"Sportisimo","brand:wikidata":"Q54974273",name:"Sportisimo",shop:"sports"}},"shop/sports|Sports Authority":{tags:{brand:"Sports Authority","brand:wikidata":"Q7579688","brand:wikipedia":"en:Sports Authority",name:"Sports Authority",shop:"sports"}},"shop/sports|Sports Direct":{tags:{brand:"Sports Direct","brand:wikidata":"Q2913554","brand:wikipedia":"en:Sports Direct",name:"Sports Direct",shop:"sports"}},"shop/sports|Спортмастер":{countryCodes:["by","kz","ru","ua"],matchNames:["спортмастер гипер"],tags:{brand:"Спортмастер","brand:en":"Sportmaster","brand:ru":"Спортмастер","brand:wikidata":"Q4438176","brand:wikipedia":"ru:Спортмастер",name:"Спортмастер","name:en":"Sportmaster","name:ru":"Спортмастер",shop:"sports"}},"shop/stationery|Buffetti":{tags:{brand:"Buffetti",name:"Buffetti",shop:"stationery"}},"shop/stationery|Bureau Vallée":{countryCodes:["fr"],tags:{brand:"Bureau Vallée","brand:wikidata":"Q18385014","brand:wikipedia":"fr:Bureau Vallée",name:"Bureau Vallée",shop:"stationery"}},"shop/stationery|McPaper":{countryCodes:["ch","de"],tags:{brand:"McPaper","brand:wikidata":"Q1915329","brand:wikipedia":"de:McPaper",name:"McPaper",shop:"stationery"}},"shop/stationery|Office Depot":{tags:{brand:"Office Depot","brand:wikidata":"Q1337797","brand:wikipedia":"en:Office Depot",name:"Office Depot",shop:"stationery"}},"shop/stationery|OfficeMax":{tags:{brand:"OfficeMax","brand:wikidata":"Q7079111","brand:wikipedia":"en:OfficeMax",name:"OfficeMax",shop:"stationery"}},"shop/stationery|Officeworks":{countryCodes:["au"],tags:{brand:"Officeworks","brand:wikidata":"Q7079486","brand:wikipedia":"en:Officeworks",name:"Officeworks",shop:"stationery"}},"shop/stationery|Pagro":{countryCodes:["at"],tags:{brand:"Pagro","brand:wikidata":"Q57550022",name:"Pagro",shop:"stationery"}},"shop/stationery|Paper Source":{countryCodes:["us"],tags:{brand:"Paper Source","brand:wikidata":"Q25000269","brand:wikipedia":"en:Paper Source",name:"Paper Source",shop:"stationery"}},"shop/stationery|Paperchase":{tags:{brand:"Paperchase","brand:wikidata":"Q7132739","brand:wikipedia":"en:Paperchase",name:"Paperchase",shop:"stationery"}},"shop/stationery|Ryman":{countryCodes:["gb"],tags:{brand:"Ryman","brand:wikidata":"Q7385188","brand:wikipedia":"en:Ryman",name:"Ryman",shop:"stationery"}},"shop/stationery|Staples":{matchTags:["shop/office_supplies"],tags:{brand:"Staples","brand:wikidata":"Q785943","brand:wikipedia":"en:Staples Inc.",name:"Staples",shop:"stationery"}},"shop/stationery|Комус":{countryCodes:["ru"],tags:{brand:"Комус","brand:en":"Komus","brand:wikidata":"Q4230314","brand:wikipedia":"en:Komus (company)",name:"Комус","name:en":"Komus",shop:"stationery"}},"shop/storage_rental|Extra Space Storage":{countryCodes:["pr","us"],tags:{brand:"Extra Space Storage","brand:wikidata":"Q5422162","brand:wikipedia":"en:Extra Space Storage",name:"Extra Space Storage",shop:"storage_rental"}},"shop/storage_rental|Public Storage":{tags:{brand:"Public Storage","brand:wikidata":"Q1156045","brand:wikipedia":"en:Public Storage",name:"Public Storage",shop:"storage_rental"}},"shop/supermarket|8 à Huit":{nomatch:["shop/convenience|8 à Huit"],tags:{brand:"8 à Huit","brand:wikidata":"Q2818601","brand:wikipedia":"fr:8 à Huit",name:"8 à Huit",shop:"supermarket"}},"shop/supermarket|99 Ranch Market":{countryCodes:["us"],matchNames:["99 ranch","ranch 99"],tags:{brand:"99 Ranch Market","brand:wikidata":"Q3600279","brand:wikipedia":"en:99 Ranch Market",cuisine:"asian",name:"99 Ranch Market","name:en":"99 Ranch Market","name:zh-Hans":"大华超级市场","name:zh-Hant":"大華超級市場",shop:"supermarket"}},"shop/supermarket|A&O":{countryCodes:["it"],tags:{brand:"A&O","brand:wikidata":"Q3600279","brand:wikipedia":"it:A&O",name:"A&O",shop:"supermarket"}},"shop/supermarket|A101":{countryCodes:["tr"],tags:{brand:"A101","brand:wikidata":"Q6034496","brand:wikipedia":"tr:A101",name:"A101",shop:"supermarket"}},"shop/supermarket|AD Delhaize":{countryCodes:["be","lu"],tags:{brand:"AD Delhaize","brand:wikidata":"Q1184173","brand:wikipedia":"fr:Delhaize",name:"AD Delhaize",shop:"supermarket"}},"shop/supermarket|ADEG":{countryCodes:["at"],tags:{brand:"ADEG","brand:wikidata":"Q290211","brand:wikipedia":"de:ADEG Österreich",name:"ADEG",shop:"supermarket"}},"shop/supermarket|Acme":{countryCodes:["us"],tags:{brand:"Acme","brand:wikidata":"Q341975","brand:wikipedia":"en:Acme Markets",name:"Acme",shop:"supermarket"}},"shop/supermarket|Ahorramás":{countryCodes:["es"],tags:{brand:"Ahorramás","brand:wikidata":"Q58221883",name:"Ahorramás",shop:"supermarket"}},"shop/supermarket|Albert":{countryCodes:["cz"],tags:{brand:"Albert","brand:wikidata":"Q9144241","brand:wikipedia":"cs:Albert (obchodní řetězec)",name:"Albert",shop:"supermarket"}},"shop/supermarket|Albert Heijn":{countryCodes:["be","nl"],tags:{brand:"Albert Heijn","brand:wikidata":"Q1653985","brand:wikipedia":"nl:Albert Heijn (supermarkt)",name:"Albert Heijn",shop:"supermarket"}},"shop/supermarket|Albertsons":{countryCodes:["us"],tags:{brand:"Albertsons","brand:wikidata":"Q4712282","brand:wikipedia":"en:Albertsons",name:"Albertsons",shop:"supermarket"}},"shop/supermarket|Alcampo":{countryCodes:["es"],tags:{brand:"Alcampo",name:"Alcampo",shop:"supermarket"}},"shop/supermarket|Aldi":{tags:{brand:"Aldi","brand:wikidata":"Q125054","brand:wikipedia":"en:Aldi",name:"Aldi",shop:"supermarket"}},"shop/supermarket|Aldi Nord":{countryCodes:["de"],tags:{brand:"Aldi Nord","brand:wikidata":"Q41171373","brand:wikipedia":"en:Aldi",name:"Aldi Nord",shop:"supermarket"}},"shop/supermarket|Aldi Süd":{countryCodes:["de"],tags:{brand:"Aldi Süd","brand:wikidata":"Q41171672","brand:wikipedia":"en:Aldi",name:"Aldi Süd",shop:"supermarket"}},"shop/supermarket|Alfamart":{tags:{brand:"Alfamart","brand:wikidata":"Q23745600","brand:wikipedia":"en:Alfamart",name:"Alfamart",shop:"supermarket"}},"shop/supermarket|Alimerka":{countryCodes:["es"],tags:{brand:"Alimerka","brand:wikidata":"Q16482738","brand:wikipedia":"es:Alimerka",name:"Alimerka",shop:"supermarket"}},"shop/supermarket|Alnatura":{countryCodes:["ch","de"],tags:{brand:"Alnatura","brand:wikidata":"Q876811","brand:wikipedia":"en:Alnatura",name:"Alnatura",organic:"only",shop:"supermarket"}},"shop/supermarket|Ara":{countryCodes:["co"],tags:{brand:"Ara",name:"Ara",shop:"supermarket"}},"shop/supermarket|Asda":{countryCodes:["gb"],nomatch:["amenity/fuel|Asda"],tags:{brand:"Asda","brand:wikidata":"Q297410","brand:wikipedia":"en:Asda",name:"Asda",shop:"supermarket"}},"shop/supermarket|Atacadão":{countryCodes:["br"],tags:{brand:"Atacadão","brand:wikidata":"Q2868739","brand:wikipedia":"en:Atacadão",name:"Atacadão",shop:"supermarket"}},"shop/supermarket|Auchan":{nomatch:["amenity/fuel|Auchan"],tags:{brand:"Auchan","brand:wikidata":"Q758603","brand:wikipedia":"en:Auchan",name:"Auchan",shop:"supermarket"}},"shop/supermarket|Auchan Drive":{countryCodes:["fr","lu"],tags:{brand:"Auchan Drive",name:"Auchan Drive",shop:"supermarket"}},"shop/supermarket|BM":{tags:{brand:"BM","brand:wikidata":"Q62073462",name:"BM",shop:"supermarket"}},"shop/supermarket|Bi-Lo":{countryCodes:["au","us"],tags:{brand:"Bi-Lo","brand:wikidata":"Q4835622","brand:wikipedia":"en:BI-LO (Australia)",name:"Bi-Lo",shop:"supermarket"}},"shop/supermarket|Biedronka":{countryCodes:["pl"],tags:{brand:"Biedronka","brand:wikidata":"Q857182","brand:wikipedia":"pl:Biedronka (sieć handlowa)",name:"Biedronka",shop:"supermarket"}},"shop/supermarket|Big Bazaar":{countryCodes:["in"],tags:{brand:"Big Bazaar","brand:wikidata":"Q3631008","brand:wikipedia":"en:Big Bazaar",name:"Big Bazaar",shop:"supermarket"}},"shop/supermarket|Big C":{countryCodes:["th","vn"],tags:{brand:"Big C","brand:wikidata":"Q858665","brand:wikipedia":"en:Big C",name:"Big C",shop:"supermarket"}},"shop/supermarket|Billa":{tags:{brand:"Billa","brand:wikidata":"Q537781","brand:wikipedia":"en:Billa (supermarket)",name:"Billa",shop:"supermarket"}},"shop/supermarket|Bim":{countryCodes:["ma","tr"],tags:{brand:"Bim","brand:wikidata":"Q1022075","brand:wikipedia":"en:Bim (company)",name:"Bim",shop:"supermarket"}},"shop/supermarket|Bingo":{countryCodes:["ba"],tags:{brand:"Bingo","brand:wikidata":"Q16842066","brand:wikipedia":"bs:Bingo (kompanija)",name:"Bingo",shop:"supermarket"}},"shop/supermarket|Bio C' Bon":{countryCodes:["es","fr"],tags:{brand:"Bio C' Bon",name:"Bio C' Bon",shop:"supermarket"}},"shop/supermarket|Bio Company":{countryCodes:["de"],tags:{brand:"Bio Company","brand:wikidata":"Q864179","brand:wikipedia":"de:Bio Company",name:"Bio Company",organic:"only",shop:"supermarket"}},"shop/supermarket|Biocoop":{countryCodes:["fr"],tags:{brand:"Biocoop","brand:wikidata":"Q2904039","brand:wikipedia":"fr:Biocoop",name:"Biocoop",shop:"supermarket"}},"shop/supermarket|Bodega Aurrera":{tags:{brand:"Bodega Aurrera","brand:wikidata":"Q3365858","brand:wikipedia":"en:Bodega Aurrerá",name:"Bodega Aurrera",shop:"supermarket"}},"shop/supermarket|Bodega Aurrera Express":{countryCodes:["mx"],tags:{brand:"Bodega Aurrera Express",name:"Bodega Aurrera Express",shop:"supermarket"}},"shop/supermarket|Bonpreu":{countryCodes:["es"],tags:{brand:"Bonpreu",name:"Bonpreu",shop:"supermarket"}},"shop/supermarket|Bravo":{countryCodes:["us"],tags:{brand:"Bravo","brand:wikidata":"Q16985159","brand:wikipedia":"en:Bravo (supermarket)",name:"Bravo",shop:"supermarket"}},"shop/supermarket|Brookshire Brothers":{countryCodes:["us"],tags:{brand:"Brookshire Brothers","brand:wikidata":"Q4975084","brand:wikipedia":"en:Brookshire Brothers",name:"Brookshire Brothers",shop:"supermarket"}},"shop/supermarket|Brookshire's":{countryCodes:["us"],tags:{brand:"Brookshire's","brand:wikidata":"Q4975085","brand:wikipedia":"en:Brookshire Grocery Company",name:"Brookshire's",shop:"supermarket"}},"shop/supermarket|Budgens":{countryCodes:["gb"],nomatch:["shop/convenience|Budgens"],tags:{brand:"Budgens","brand:wikidata":"Q4985016","brand:wikipedia":"en:Budgens",name:"Budgens",shop:"supermarket"}},"shop/supermarket|Bulk Barn":{countryCodes:["ca"],tags:{brand:"Bulk Barn","brand:wikidata":"Q4996466",name:"Bulk Barn",shop:"supermarket"}},"shop/supermarket|Bunnpris":{countryCodes:["no"],tags:{brand:"Bunnpris","brand:wikidata":"Q1774634","brand:wikipedia":"en:Bunnpris",name:"Bunnpris",shop:"supermarket"}},"shop/supermarket|C-Town Supermarkets":{countryCodes:["us"],tags:{brand:"C-Town Supermarkets","brand:wikidata":"Q5005929","brand:wikipedia":"en:C-Town Supermarkets",name:"C-Town",shop:"supermarket"}},"shop/supermarket|CBA":{tags:{brand:"CBA","brand:wikidata":"Q779845","brand:wikipedia":"en:CBA (food retail)",name:"CBA",shop:"supermarket"}},"shop/supermarket|COOP Jednota":{countryCodes:["cz","sk"],matchNames:["jednota"],nomatch:["shop/convenience|COOP Jednota"],tags:{brand:"COOP Jednota","brand:wikidata":"Q41629254","brand:wikipedia":"sk:COOP Jednota Slovensko",name:"COOP Jednota",shop:"supermarket"}},"shop/supermarket|Caprabo":{countryCodes:["ad","es"],tags:{brand:"Caprabo","brand:wikidata":"Q1980781","brand:wikipedia":"en:Caprabo",name:"Caprabo",shop:"supermarket"}},"shop/supermarket|Cargills Food City":{countryCodes:["lk"],tags:{brand:"Cargills Food City","brand:wikidata":"Q58353955",name:"Cargills Food City","operator:wikidata":"Q5039260","operator:wikipedia":"en:Cargills (Ceylon)",shop:"supermarket"}},"shop/supermarket|Carrefour":{nomatch:["amenity/fuel|Carrefour","shop/convenience|Carrefour Express","shop/supermarket|Carrefour Express"],tags:{brand:"Carrefour","brand:wikidata":"Q217599","brand:wikipedia":"fr:Carrefour (enseigne)",name:"Carrefour",operator:"Groupe Carrefour","operator:wikidata":"Q3117359","operator:wikipedia":"fr:Groupe Carrefour",shop:"supermarket"}},"shop/supermarket|Carrefour City":{matchTags:["shop/convenience"],tags:{brand:"Carrefour City","brand:wikidata":"Q2940187","brand:wikipedia":"fr:Carrefour City",name:"Carrefour City",operator:"Groupe Carrefour","operator:wikidata":"Q3117359","operator:wikipedia":"fr:Groupe Carrefour",shop:"supermarket"}},"shop/supermarket|Carrefour Contact":{countryCodes:["fr"],tags:{brand:"Carrefour Contact","brand:wikidata":"Q2940188","brand:wikipedia":"fr:Carrefour Contact",name:"Carrefour Contact",operator:"Groupe Carrefour","operator:wikidata":"Q3117359","operator:wikipedia":"fr:Groupe Carrefour",shop:"supermarket"}},"shop/supermarket|Carrefour Express":{tags:{brand:"Carrefour Express","brand:wikidata":"Q2940190","brand:wikipedia":"fr:Carrefour Express",name:"Carrefour Express",operator:"Groupe Carrefour","operator:wikidata":"Q3117359","operator:wikipedia":"fr:Groupe Carrefour",shop:"supermarket"}},"shop/supermarket|Carrefour Market":{nomatch:["shop/fuel|Carrefour Market"],tags:{brand:"Carrefour Market","brand:wikidata":"Q2689639","brand:wikipedia":"fr:Carrefour Market",name:"Carrefour Market",operator:"Groupe Carrefour","operator:wikidata":"Q3117359","operator:wikipedia":"fr:Groupe Carrefour",shop:"supermarket"}},"shop/supermarket|Carulla":{countryCodes:["co"],tags:{brand:"Carulla","brand:wikidata":"Q5047480","brand:wikipedia":"en:Carulla",name:"Carulla",shop:"supermarket"}},"shop/supermarket|Casino":{tags:{brand:"Casino",name:"Casino",shop:"supermarket"}},"shop/supermarket|Centra":{tags:{brand:"Centra",name:"Centra",shop:"supermarket"}},"shop/supermarket|Centre Commercial E. Leclerc":{tags:{brand:"Centre Commercial E. Leclerc","brand:wikidata":"Q1273376","brand:wikipedia":"fr:E.Leclerc",name:"Centre Commercial E. Leclerc",shop:"supermarket"}},"shop/supermarket|Chata Polska":{countryCodes:["pl"],nomatch:["shop/convenience|Chata Polska"],tags:{brand:"Chata Polska","brand:wikidata":"Q61994406",name:"Chata Polska",shop:"supermarket"}},"shop/supermarket|Checkers":{countryCodes:["bw","na","za"],nomatch:["amenity/fast_food|Checkers"],tags:{brand:"Checkers","brand:wikidata":"Q5089126","brand:wikipedia":"en:Checkers (supermarket chain)",name:"Checkers",shop:"supermarket"}},"shop/supermarket|Chedraui":{countryCodes:["mx"],tags:{brand:"Chedraui","brand:wikidata":"Q2961952","brand:wikipedia":"en:Chedraui",name:"Chedraui",shop:"supermarket"}},"shop/supermarket|City Market":{tags:{brand:"City Market","brand:wikidata":"Q5123299","brand:wikipedia":"en:City Market (US grocery store chain)",name:"City Market",shop:"supermarket"}},"shop/supermarket|Co-op~(Canada)":{countryCodes:["ca"],nomatch:["amenity/fuel|Co-op~(Canada)","shop/convenience|Co-op~(Canada)","shop/convenience|Coop~(Schweiz)","shop/convenience|The Co-operative Food~(UK)","shop/supermarket|Coop~(Schweiz)","shop/supermarket|The Co-operative Food~(UK)"],tags:{brand:"Federated Co-operatives","brand:wikidata":"Q5440676","brand:wikipedia":"en:Federated Co-operatives",name:"Co-op",shop:"supermarket"}},"shop/supermarket|Coles":{countryCodes:["au","gb"],tags:{brand:"Coles","brand:wikidata":"Q1108172","brand:wikipedia":"en:Coles Supermarkets",name:"Coles",shop:"supermarket"}},"shop/supermarket|Colruyt":{countryCodes:["be","fr","lu"],tags:{brand:"Colruyt","brand:wikidata":"Q2363991","brand:wikipedia":"en:Colruyt (supermarket)",name:"Colruyt",shop:"supermarket"}},"shop/supermarket|Combi":{countryCodes:["de"],tags:{brand:"Combi","brand:wikidata":"Q1113618","brand:wikipedia":"de:Combi (Einkaufsmarkt)",name:"Combi",shop:"supermarket"}},"shop/supermarket|Comercial Mexicana":{countryCodes:["mx","us"],tags:{brand:"Comercial Mexicana","brand:wikidata":"Q2985173","brand:wikipedia":"en:Comercial Mexicana",name:"Comercial Mexicana",shop:"supermarket"}},"shop/supermarket|Conad":{countryCodes:["al","it"],tags:{brand:"Conad","brand:wikidata":"Q639075","brand:wikipedia":"it:Conad",name:"Conad",shop:"supermarket"}},"shop/supermarket|Conad City":{countryCodes:["it"],tags:{brand:"Conad City","brand:wikidata":"Q57543102",name:"Conad City",shop:"supermarket"}},"shop/supermarket|Condis":{countryCodes:["es"],tags:{brand:"Condis","brand:wikidata":"Q57417581",name:"Condis",shop:"supermarket"}},"shop/supermarket|Consum":{countryCodes:["es"],tags:{brand:"Consum","brand:wikidata":"Q8350308","brand:wikipedia":"es:Consum",name:"Consum",shop:"supermarket"}},"shop/supermarket|Continente":{countryCodes:["pt"],tags:{brand:"Continente","brand:wikidata":"Q2995683","brand:wikipedia":"en:Continente (Supermarket)",name:"Continente",shop:"supermarket"}},"shop/supermarket|Coop Konsum":{countryCodes:["se"],tags:{brand:"Coop Konsum",name:"Coop Konsum",shop:"supermarket"}},"shop/supermarket|Coop Prix":{countryCodes:["no"],tags:{brand:"Coop Prix","brand:wikidata":"Q5167705","brand:wikipedia":"no:Coop Prix",name:"Coop Prix",shop:"supermarket"}},"shop/supermarket|Coop~(Schweiz)":{countryCodes:["ch"],nomatch:["amenity/fuel|Co-op~(Canada)","shop/convenience|Co-op~(Canada)","shop/convenience|Coop~(Schweiz)","shop/convenience|The Co-operative Food~(UK)","shop/supermarket|Co-op~(Canada)","shop/supermarket|The Co-operative Food~(UK)"],tags:{brand:"Coop","brand:wikidata":"Q432564","brand:wikipedia":"de:Coop (Schweiz)",name:"Coop",shop:"supermarket"}},"shop/supermarket|Cora":{countryCodes:["be","fr","lu","ro"],tags:{brand:"Cora","brand:wikidata":"Q686643","brand:wikipedia":"en:Cora (hypermarket)",name:"Cora",shop:"supermarket"}},"shop/supermarket|Costcutter":{nomatch:["shop/convenience|Costcutter"],tags:{brand:"Costcutter","brand:wikidata":"Q5175072","brand:wikipedia":"en:Costcutter",name:"Costcutter",shop:"supermarket"}},"shop/supermarket|Coto":{countryCodes:["ar"],tags:{brand:"Coto","brand:wikidata":"Q5175411","brand:wikipedia":"es:Coto (supermercado)",name:"Coto",shop:"supermarket"}},"shop/supermarket|Countdown":{countryCodes:["nz"],tags:{brand:"Countdown","brand:wikidata":"Q5176845","brand:wikipedia":"en:Countdown (supermarket)",name:"Countdown",shop:"supermarket"}},"shop/supermarket|Covirán":{countryCodes:["es","pt"],tags:{brand:"Covirán",name:"Covirán",shop:"supermarket"}},"shop/supermarket|Crai":{countryCodes:["ch","it"],tags:{brand:"Crai",name:"Crai",shop:"supermarket"}},"shop/supermarket|Cub Foods":{countryCodes:["us"],tags:{brand:"Cub Foods","brand:wikidata":"Q5191916","brand:wikipedia":"en:Cub Foods",name:"Cub Foods",shop:"supermarket"}},"shop/supermarket|D'Agostino":{countryCodes:["us"],tags:{brand:"D'Agostino","brand:wikidata":"Q20656844","brand:wikipedia":"en:D'Agostino Supermarkets",name:"D'Agostino",shop:"supermarket"}},"shop/supermarket|D1":{countryCodes:["co"],tags:{brand:"D1","brand:wikidata":"Q43403418","brand:wikipedia":"es:Tiendas D1",name:"D1",shop:"supermarket"}},"shop/supermarket|Dagli'Brugsen":{countryCodes:["dk"],tags:{brand:"Dagli'Brugsen","brand:wikidata":"Q12307017","brand:wikipedia":"en:Dagli'Brugsen",name:"Dagli'Brugsen",shop:"supermarket"}},"shop/supermarket|Decò":{countryCodes:["it"],tags:{brand:"Decò",name:"Decò",shop:"supermarket"}},"shop/supermarket|Deen":{countryCodes:["nl"],tags:{brand:"Deen","brand:wikidata":"Q13571727","brand:wikipedia":"nl:Deen (supermarkt)",name:"Deen",shop:"supermarket"}},"shop/supermarket|Delhaize":{countryCodes:["be","lu"],tags:{brand:"Delhaize","brand:wikidata":"Q1184173","brand:wikipedia":"fr:Delhaize",name:"Delhaize",shop:"supermarket"}},"shop/supermarket|Delikatesy Centrum":{countryCodes:["pl"],nomatch:["shop/convenience|Delikatesy Centrum"],tags:{brand:"Delikatesy Centrum","brand:wikidata":"Q11693824","brand:wikipedia":"pl:Delikatesy Centrum",name:"Delikatesy Centrum",shop:"supermarket"}},"shop/supermarket|Denner":{countryCodes:["ch","li"],tags:{brand:"Denner","brand:wikidata":"Q379911","brand:wikipedia":"en:Denner (supermarket)",name:"Denner",shop:"supermarket"}},"shop/supermarket|Despar":{countryCodes:["it"],tags:{brand:"Spar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Despar",shop:"supermarket"}},"shop/supermarket|Despensa Familiar":{tags:{brand:"Despensa Familiar","brand:wikidata":"Q61994849",name:"Despensa Familiar",shop:"supermarket"}},"shop/supermarket|Dia":{matchNames:["supermercado dia"],tags:{brand:"Dia","brand:wikidata":"Q925132","brand:wikipedia":"es:Supermercados DIA",name:"Dia",shop:"supermarket"}},"shop/supermarket|Dia Market":{tags:{brand:"Dia Market","brand:wikidata":"Q925132","brand:wikipedia":"es:Supermercados DIA",name:"Dia Market",shop:"supermarket"}},"shop/supermarket|Dino":{countryCodes:["pl"],tags:{brand:"Dino","brand:wikidata":"Q11694239","brand:wikipedia":"pl:Dino Polska",name:"Dino",shop:"supermarket"}},"shop/supermarket|Dirk van den Broek":{countryCodes:["nl"],tags:{brand:"Dirk van den Broek","brand:wikidata":"Q17502722","brand:wikipedia":"en:Dirk (supermarket)",name:"Dirk van den Broek",shop:"supermarket"}},"shop/supermarket|Disco~(Argentina)":{countryCodes:["ar"],tags:{brand:"Disco","brand:wikidata":"Q6135978","brand:wikipedia":"es:Disco (supermercado de Argentina)",name:"Disco",shop:"supermarket"}},"shop/supermarket|Disco~(Uruguay)":{countryCodes:["uy"],tags:{brand:"Disco","brand:wikidata":"Q16636819","brand:wikipedia":"es:Disco (supermercado de Uruguay)",name:"Disco",shop:"supermarket"}},"shop/supermarket|Diska":{countryCodes:["de"],tags:{brand:"Diska","brand:wikidata":"Q62390177",name:"Diska",operator:"Edeka","operator:wikidata":"Q701755","operator:wikipedia":"en:Edeka",shop:"supermarket"}},"shop/supermarket|Dunnes Stores":{tags:{brand:"Dunnes Stores","brand:wikidata":"Q1266203","brand:wikipedia":"en:Dunnes Stores",name:"Dunnes Stores",shop:"supermarket"}},"shop/supermarket|E-Center":{countryCodes:["de"],tags:{brand:"E-Center","brand:wikidata":"Q701755","brand:wikipedia":"en:Edeka",name:"E-Center",shop:"supermarket"}},"shop/supermarket|E. Leclerc":{countryCodes:["es","fr","pl","pt"],tags:{brand:"E. Leclerc","brand:wikidata":"Q1273376","brand:wikipedia":"en:E.Leclerc",name:"E. Leclerc",shop:"supermarket"}},"shop/supermarket|E. Leclerc Drive":{countryCodes:["fr"],tags:{brand:"E. Leclerc Drive","brand:wikidata":"Q1273376","brand:wikipedia":"fr:E.Leclerc",name:"E. Leclerc Drive",operator:"E.Leclerc","operator:wikidata":"Q1273376","operator:wikipedia":"en:E.Leclerc",shop:"supermarket"}},"shop/supermarket|EMTÉ":{countryCodes:["nl"],tags:{brand:"EMTÉ","brand:wikidata":"Q3119122","brand:wikipedia":"en:EMTÉ",name:"EMTÉ",shop:"supermarket"}},"shop/supermarket|Edeka":{countryCodes:["de"],matchNames:["edeka neukauf"],tags:{brand:"Edeka","brand:wikidata":"Q701755","brand:wikipedia":"en:Edeka",name:"Edeka",shop:"supermarket"}},"shop/supermarket|Eko":{countryCodes:["pl"],nomatch:["amenity/fuel|EKO~(Canada)","amenity/fuel|EKO~(Greece)"],tags:{brand:"Eko","brand:wikidata":"Q9251859","brand:wikipedia":"pl:Eko Holding",name:"Eko",shop:"supermarket"}},"shop/supermarket|Ekom":{countryCodes:["it"],tags:{brand:"Ekom","brand:wikidata":"Q62073442",name:"Ekom",shop:"supermarket"}},"shop/supermarket|Ekono":{countryCodes:["cl"],tags:{brand:"Ekono","brand:wikidata":"Q2842729","brand:wikipedia":"es:Ekono",name:"Ekono",shop:"supermarket"}},"shop/supermarket|Eroski":{countryCodes:["es","gi"],matchNames:["charter","eroski center"],tags:{brand:"Eroski","brand:wikidata":"Q1361349","brand:wikipedia":"en:Eroski",name:"Eroski",shop:"supermarket"}},"shop/supermarket|Eroski City":{countryCodes:["es"],tags:{brand:"Eroski City",name:"Eroski City",shop:"supermarket"}},"shop/supermarket|Esselunga":{countryCodes:["it"],tags:{brand:"Esselunga","brand:wikidata":"Q1059636","brand:wikipedia":"en:Esselunga",name:"Esselunga",shop:"supermarket"}},"shop/supermarket|EuroSpin":{countryCodes:["it","si"],tags:{brand:"EuroSpin","brand:wikidata":"Q1374674","brand:wikipedia":"it:Eurospin",name:"EuroSpin",shop:"supermarket"}},"shop/supermarket|Eurospar":{tags:{brand:"Eurospar","brand:wikidata":"Q12309283","brand:wikipedia":"da:Eurospar",name:"Eurospar",shop:"supermarket"}},"shop/supermarket|Extra":{matchNames:["coop extra"],matchTags:["shop/convenience"],tags:{brand:"Extra","brand:wikidata":"Q11964085","brand:wikipedia":"no:Extra (Coop)",name:"Extra",shop:"supermarket"}},"shop/supermarket|Famila":{countryCodes:["de","it"],tags:{brand:"Famila","brand:wikidata":"Q1395108","brand:wikipedia":"de:Famila",name:"Famila",shop:"supermarket"}},"shop/supermarket|Fareway":{countryCodes:["us"],tags:{brand:"Fareway","brand:wikidata":"Q5434998","brand:wikipedia":"en:Fareway",name:"Fareway",shop:"supermarket"}},"shop/supermarket|Farm Boy":{countryCodes:["ca"],matchTags:["shop/greengrocer"],tags:{brand:"Farm Boy","brand:wikidata":"Q5435469","brand:wikipedia":"en:Farm Boy",name:"Farm Boy",shop:"supermarket"}},"shop/supermarket|Farmfoods":{countryCodes:["gb","sk"],tags:{brand:"Farmfoods","brand:wikidata":"Q5435841","brand:wikipedia":"en:Farmfoods",name:"Farmfoods",shop:"supermarket"}},"shop/supermarket|Feneberg":{countryCodes:["at","de"],tags:{brand:"Feneberg","brand:wikidata":"Q5345378","brand:wikipedia":"de:Feneberg Lebensmittel",name:"Feneberg",shop:"supermarket"}},"shop/supermarket|Food 4 Less":{tags:{brand:"Food 4 Less","brand:wikidata":"Q5465282","brand:wikipedia":"en:Food 4 Less",name:"Food 4 Less",shop:"supermarket"}},"shop/supermarket|Food Basics":{tags:{brand:"Food Basics","brand:wikidata":"Q5465300","brand:wikipedia":"en:Food Basics",name:"Food Basics",shop:"supermarket"}},"shop/supermarket|Food City":{tags:{brand:"Food City","brand:wikidata":"Q5465306","brand:wikipedia":"en:Food City (Canada)",name:"Food City",shop:"supermarket"}},"shop/supermarket|Food Lion":{countryCodes:["es","us"],tags:{brand:"Food Lion","brand:wikidata":"Q1435950","brand:wikipedia":"en:Food Lion",name:"Food Lion",shop:"supermarket"}},"shop/supermarket|FoodLand~(US)":{countryCodes:["us"],nomatch:["shop/supermarket|Foodland~(Australia)","shop/supermarket|Foodland~(Canada)","shop/supermarket|Foodland~(Hawaii)"],tags:{brand:"FoodLand","brand:wikidata":"Q5465271","brand:wikipedia":"en:FoodLand",name:"FoodLand",shop:"supermarket"}},"shop/supermarket|FoodMaxx":{countryCodes:["us"],tags:{brand:"FoodMaxx","brand:wikidata":"Q61894844",name:"FoodMaxx","operator:wikidata":"Q7428009","operator:wikipedia":"en:Save Mart Supermarkets",shop:"supermarket"}},"shop/supermarket|Foodland~(Australia)":{countryCodes:["au"],nomatch:["shop/supermarket|Foodland~(Canada)","shop/supermarket|Foodland~(Hawaii)","shop/supermarket|Foodland~(US)"],tags:{brand:"Foodland","brand:wikidata":"Q5465555","brand:wikipedia":"en:Foodland (South Australia)",name:"Foodland",shop:"supermarket"}},"shop/supermarket|Foodland~(Canada)":{countryCodes:["ca"],nomatch:["shop/supermarket|Foodland~(Australia)","shop/supermarket|Foodland~(Hawaii)","shop/supermarket|Foodland~(US)"],tags:{brand:"Foodland","brand:wikidata":"Q5465554","brand:wikipedia":"en:Foodland (Canada)",name:"Foodland",shop:"supermarket"}},"shop/supermarket|Foodland~(Hawaii)":{countryCodes:["us"],nomatch:["shop/supermarket|Foodland~(Australia)","shop/supermarket|Foodland~(Canada)","shop/supermarket|Foodland~(US)"],tags:{brand:"Foodland","brand:wikidata":"Q5465560","brand:wikipedia":"en:Foodland Hawaii",name:"Foodland",shop:"supermarket"}},"shop/supermarket|Foodworks":{countryCodes:["au"],tags:{brand:"Foodworks","brand:wikidata":"Q5465579","brand:wikipedia":"en:Foodworks",name:"Foodworks",shop:"supermarket"}},"shop/supermarket|Fred Meyer":{countryCodes:["us"],matchTags:["shop/department_store"],tags:{brand:"Fred Meyer","brand:wikidata":"Q5495932","brand:wikipedia":"en:Fred Meyer",name:"Fred Meyer",shop:"supermarket"}},"shop/supermarket|Fresh Market":{tags:{brand:"Fresh Market",name:"Fresh Market",shop:"supermarket"}},"shop/supermarket|FreshCo":{countryCodes:["ca"],tags:{brand:"FreshCo","brand:wikidata":"Q5502915","brand:wikipedia":"en:FreshCo",name:"FreshCo",shop:"supermarket"}},"shop/supermarket|Froiz":{countryCodes:["es","pt"],tags:{brand:"Froiz","brand:wikidata":"Q17070775","brand:wikipedia":"en:Froiz",name:"Froiz",shop:"supermarket"}},"shop/supermarket|Føtex":{countryCodes:["dk"],tags:{brand:"Føtex","brand:wikidata":"Q1480395","brand:wikipedia":"en:Føtex",name:"Føtex",shop:"supermarket"}},"shop/supermarket|G20":{countryCodes:["fr"],tags:{brand:"G20","brand:wikidata":"Q3504731","brand:wikipedia":"fr:Supermarchés G20",name:"G20",shop:"supermarket"}},"shop/supermarket|GBarbosa":{countryCodes:["br"],tags:{brand:"GBarbosa","brand:website":"http://www.gbarbosa.com.br","brand:wikidata":"Q10287817","brand:wikipedia":"pt:GBarbosa",name:"GBarbosa",shop:"supermarket"}},"shop/supermarket|GS25":{tags:{brand:"GS25",name:"GS25",shop:"supermarket"}},"shop/supermarket|Gadis":{countryCodes:["es"],tags:{brand:"Gadis","brand:wikidata":"Q12389151","brand:wikipedia":"gl:Gadisa",name:"Gadis",shop:"supermarket"}},"shop/supermarket|Giant":{nomatch:["shop/bicycle|Giant"],tags:{brand:"Giant",name:"Giant",shop:"supermarket"}},"shop/supermarket|Giant Eagle":{countryCodes:["us"],tags:{brand:"Giant Eagle","brand:wikidata":"Q1522721","brand:wikipedia":"en:Giant Eagle",name:"Giant Eagle",shop:"supermarket"}},"shop/supermarket|Globus":{tags:{brand:"Globus","brand:wikidata":"Q457503","brand:wikipedia":"en:Globus (hypermarket)",name:"Globus",shop:"supermarket"}},"shop/supermarket|Gordon Food Service":{countryCodes:["ca","us"],tags:{brand:"Gordon Food Service","brand:wikidata":"Q1538006","brand:wikipedia":"en:Gordon Food Service",name:"Gordon Food Service",shop:"supermarket"}},"shop/supermarket|Grand Frais":{countryCodes:["fr"],tags:{brand:"Grand Frais","brand:wikidata":"Q3114675","brand:wikipedia":"fr:Grand Frais",name:"Grand Frais",shop:"supermarket"}},"shop/supermarket|Grocery Outlet":{tags:{brand:"Grocery Outlet","brand:wikidata":"Q5609934","brand:wikipedia":"en:Grocery Outlet",name:"Grocery Outlet",shop:"supermarket"}},"shop/supermarket|Groszek":{countryCodes:["pl"],nomatch:["shop/convenience|Groszek"],tags:{brand:"Groszek","brand:wikidata":"Q9280965","brand:wikipedia":"pl:Groszek (sieć sklepów)",name:"Groszek",shop:"supermarket"}},"shop/supermarket|Géant Casino":{countryCodes:["cg","fr"],tags:{brand:"Géant Casino","brand:wikidata":"Q1380537","brand:wikipedia":"en:Géant Casino",name:"Géant Casino",shop:"supermarket"}},"shop/supermarket|H Mart":{countryCodes:["ca","gb","us"],tags:{"alt_name:ko":"H 마트",brand:"H Mart","brand:wikidata":"Q5636306","brand:wikipedia":"en:H Mart",cuisine:"asian",name:"H Mart","name:en":"H Mart","name:ko":"한아름","name:zh-Hans":"韩亚龙","name:zh-Hant":"韓亞龍",shop:"supermarket"}},"shop/supermarket|H-E-B":{countryCodes:["mx","us"],tags:{brand:"H-E-B","brand:wikidata":"Q830621","brand:wikipedia":"en:H-E-B",name:"H-E-B",shop:"supermarket"}},"shop/supermarket|HIT":{countryCodes:["de"],tags:{brand:"HIT","brand:wikidata":"Q1548713","brand:wikipedia":"de:HIT Handelsgruppe",name:"HIT",shop:"supermarket"}},"shop/supermarket|Hannaford":{countryCodes:["us"],tags:{brand:"Hannaford","brand:wikidata":"Q5648760","brand:wikipedia":"en:Hannaford Brothers Company",name:"Hannaford",shop:"supermarket"}},"shop/supermarket|Harris Teeter":{countryCodes:["us"],tags:{brand:"Harris Teeter","brand:wikidata":"Q5665067","brand:wikipedia":"en:Harris Teeter",name:"Harris Teeter",shop:"supermarket"}},"shop/supermarket|Hemköp":{countryCodes:["se"],tags:{brand:"Hemköp","brand:wikidata":"Q10521746","brand:wikipedia":"sv:Hemköp",name:"Hemköp",shop:"supermarket"}},"shop/supermarket|Heron Foods":{countryCodes:["gb"],tags:{brand:"Heron Foods","brand:wikidata":"Q5743472","brand:wikipedia":"en:Heron Foods",name:"Heron Foods",shop:"supermarket"}},"shop/supermarket|Hofer":{countryCodes:["at","si"],nomatch:["amenity/fuel|Hofer"],tags:{brand:"Hofer","brand:wikidata":"Q15815751","brand:wikipedia":"de:Hofer KG",name:"Hofer",shop:"supermarket"}},"shop/supermarket|Hoogvliet":{countryCodes:["nl"],tags:{brand:"Hoogvliet","brand:wikidata":"Q2770647","brand:wikipedia":"nl:Hoogvliet (supermarkt)",name:"Hoogvliet",shop:"supermarket"}},"shop/supermarket|Hruška":{nomatch:["shop/convenience|Hruška"],tags:{brand:"Hruška",name:"Hruška",shop:"supermarket"}},"shop/supermarket|Hy-Vee":{countryCodes:["us"],tags:{brand:"Hy-Vee","brand:wikidata":"Q1639719","brand:wikipedia":"en:Hy-Vee",name:"Hy-Vee",shop:"supermarket"}},"shop/supermarket|Hyper U":{countryCodes:["fr"],nomatch:["amenity/fuel|Super U","shop/convenience|Utile","shop/supermarket|Super U","shop/supermarket|U Express"],tags:{brand:"Hyper U","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Hyper U",shop:"supermarket"}},"shop/supermarket|ICA":{countryCodes:["no","se"],matchNames:["ica supermarket"],nomatch:["shop/supermarket|ICA Kvantum","shop/supermarket|ICA Maxi"],tags:{brand:"ICA","brand:wikidata":"Q1663776","brand:wikipedia":"sv:Ica",name:"ICA",shop:"supermarket"}},"shop/supermarket|ICA Kvantum":{countryCodes:["se"],nomatch:["shop/supermarket|ICA","shop/supermarket|ICA Maxi"],tags:{brand:"ICA Kvantum","brand:wikidata":"Q1663776","brand:wikipedia":"sv:Ica",name:"ICA Kvantum",shop:"supermarket"}},"shop/supermarket|ICA Maxi":{countryCodes:["no","se"],matchNames:["maxi"],nomatch:["shop/supermarket|ICA","shop/supermarket|ICA Kvantum"],tags:{brand:"ICA Maxi","brand:wikidata":"Q1663776","brand:wikipedia":"sv:Ica",name:"ICA Maxi",shop:"supermarket"}},"shop/supermarket|IDEA":{countryCodes:["rs"],tags:{brand:"IDEA","brand:wikidata":"Q23461622","brand:wikipedia":"en:Idea (supermarkets)",name:"IDEA",shop:"supermarket"}},"shop/supermarket|IGA":{tags:{brand:"IGA","brand:wikidata":"Q3146662","brand:wikipedia":"en:IGA (supermarkets)",name:"IGA",shop:"supermarket"}},"shop/supermarket|Iceland":{tags:{brand:"Iceland","brand:wikidata":"Q721810","brand:wikipedia":"en:Iceland (supermarket)",name:"Iceland",shop:"supermarket"}},"shop/supermarket|Indomaret":{tags:{brand:"Indomaret",name:"Indomaret",shop:"supermarket"}},"shop/supermarket|Ingles":{countryCodes:["us"],tags:{brand:"Ingles","brand:wikidata":"Q6032595","brand:wikipedia":"en:Ingles",name:"Ingles",shop:"supermarket"}},"shop/supermarket|Intermarché":{tags:{brand:"Intermarché","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",name:"Intermarché",shop:"supermarket"}},"shop/supermarket|Intermarché Super":{countryCodes:["be","fr","pl","pt"],tags:{brand:"Intermarché Super","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",name:"Intermarché Super",shop:"supermarket"}},"shop/supermarket|Interspar":{countryCodes:["at"],tags:{brand:"Interspar","brand:wikidata":"Q15820339","brand:wikipedia":"de:Interspar (Österreich)",name:"Interspar",shop:"supermarket"}},"shop/supermarket|Irma":{countryCodes:["dk"],tags:{brand:"Irma","brand:wikidata":"Q797150","brand:wikipedia":"en:Irma (supermarket)",name:"Irma",shop:"supermarket"}},"shop/supermarket|Jan Linders":{countryCodes:["nl"],tags:{brand:"Jan Linders","brand:wikidata":"Q2200982","brand:wikipedia":"nl:Jan Linders Supermarkten",name:"Jan Linders",shop:"supermarket"}},"shop/supermarket|Jewel-Osco":{countryCodes:["us"],tags:{brand:"Jewel-Osco","brand:wikidata":"Q3178470","brand:wikipedia":"en:Jewel (supermarket)",name:"Jewel-Osco",shop:"supermarket"}},"shop/supermarket|Joker":{countryCodes:["no"],tags:{brand:"Joker","brand:wikidata":"Q716328","brand:wikipedia":"en:Joker (store)",name:"Joker",shop:"supermarket"}},"shop/supermarket|Jumbo":{tags:{brand:"Jumbo","brand:wikidata":"Q2262314","brand:wikipedia":"en:Jumbo (supermarket)",name:"Jumbo",shop:"supermarket"}},"shop/supermarket|K+K":{countryCodes:["de"],tags:{brand:"K+K","brand:wikidata":"Q1718009","brand:wikipedia":"de:K+K Klaas & Kock",name:"K+K",shop:"supermarket"}},"shop/supermarket|Kaufland":{tags:{brand:"Kaufland","brand:wikidata":"Q685967","brand:wikipedia":"en:Kaufland",name:"Kaufland",shop:"supermarket"}},"shop/supermarket|King Soopers":{countryCodes:["us"],tags:{brand:"King Soopers","brand:wikidata":"Q6412065","brand:wikipedia":"en:King Soopers",name:"King Soopers",shop:"supermarket"}},"shop/supermarket|Kiwi":{countryCodes:["dk","no"],tags:{brand:"Kiwi","brand:wikidata":"Q1613639","brand:wikipedia":"en:Kiwi (store)",name:"Kiwi",shop:"supermarket"}},"shop/supermarket|Konsum":{countryCodes:["de","ee","se"],tags:{brand:"Konsum",name:"Konsum",shop:"supermarket"}},"shop/supermarket|Konzum":{tags:{brand:"Konzum",name:"Konzum",shop:"supermarket"}},"shop/supermarket|Kroger":{nomatch:["amenity/fuel|Kroger"],tags:{brand:"Kroger","brand:wikidata":"Q153417","brand:wikipedia":"en:Kroger",name:"Kroger",shop:"supermarket"}},"shop/supermarket|Kvickly":{countryCodes:["dk"],tags:{brand:"Kvickly","brand:wikidata":"Q7061148","brand:wikipedia":"en:Kvickly",name:"Kvickly",shop:"supermarket"}},"shop/supermarket|La Anónima":{countryCodes:["ar"],tags:{brand:"La Anónima","brand:wikidata":"Q6135985","brand:wikipedia":"es:La Anónima",name:"La Anónima",shop:"supermarket"}},"shop/supermarket|La Plaza de DIA":{countryCodes:["es"],tags:{brand:"La Plaza de DIA","brand:wikidata":"Q58904673",name:"La Plaza de DIA","operator:wikidata":"Q925132","operator:wikipedia":"es:Supermercados DIA",shop:"supermarket"}},"shop/supermarket|La Vie Claire":{countryCodes:["fr"],tags:{brand:"La Vie Claire","brand:wikidata":"Q3213589","brand:wikipedia":"en:La Vie Claire (company)",name:"La Vie Claire",shop:"supermarket"}},"shop/supermarket|Landi":{countryCodes:["ch"],tags:{brand:"Landi","brand:wikidata":"Q1803010","brand:wikipedia":"en:Landi (Unternehmen)",name:"Landi",shop:"supermarket"}},"shop/supermarket|Leader Price":{tags:{brand:"Leader Price","brand:wikidata":"Q2181426","brand:wikipedia":"en:Leader Price",name:"Leader Price",shop:"supermarket"}},"shop/supermarket|Leclerc Drive":{countryCodes:["fr"],tags:{brand:"Leclerc Drive",name:"Leclerc Drive",shop:"supermarket"}},"shop/supermarket|Lewiatan":{countryCodes:["pl"],nomatch:["shop/convenience|Lewiatan"],tags:{brand:"Lewiatan","brand:wikidata":"Q11755396","brand:wikipedia":"pl:Lewiatan (sieć handlowa)",name:"Lewiatan",shop:"supermarket"}},"shop/supermarket|Lider":{countryCodes:["cl"],nomatch:["shop/supermarket|Lider Express"],tags:{brand:"Lider","brand:wikidata":"Q6711261","brand:wikipedia":"es:Líder (supermercado)",name:"Lider",shop:"supermarket"}},"shop/supermarket|Lider Express":{countryCodes:["cl"],nomatch:["shop/supermarket|Lider"],tags:{brand:"Lider","brand:wikidata":"Q6711261","brand:wikipedia":"es:Líder (supermercado)",name:"Lider Express",shop:"supermarket"}},"shop/supermarket|Lidl":{tags:{brand:"Lidl","brand:wikidata":"Q151954","brand:wikipedia":"en:Lidl",name:"Lidl",shop:"supermarket"}},"shop/supermarket|Lincolnshire Co-op":{countryCodes:["gb"],tags:{brand:"Lincolnshire Co-op","brand:wikidata":"Q6551231","brand:wikipedia":"en:Lincolnshire Co-operative",name:"Lincolnshire Co-op",shop:"supermarket"}},"shop/supermarket|Linella":{countryCodes:["md"],tags:{brand:"Linella","brand:wikidata":"Q61085990","brand:wikipedia":"ro:Linella",name:"Linella",shop:"supermarket"}},"shop/supermarket|Loblaws":{countryCodes:["ca"],matchNames:["loblaws great food"],tags:{brand:"Loblaws","brand:wikidata":"Q3257626","brand:wikipedia":"en:Loblaws",name:"Loblaws",shop:"supermarket"}},"shop/supermarket|Londis":{tags:{brand:"Londis",name:"Londis",shop:"supermarket"}},"shop/supermarket|Lotte Mart":{countryCodes:["id","kr"],tags:{brand:"Lotte Mart","brand:wikidata":"Q326715","brand:wikipedia":"en:Lotte Mart",name:"Lotte Mart",shop:"supermarket"}},"shop/supermarket|Lowe's Market":{countryCodes:["us"],tags:{brand:"Lowe's Market","brand:wikidata":"Q6693107","brand:wikipedia":"en:Lowe's Market",name:"Lowe's Market",shop:"supermarket"}},"shop/supermarket|Lowes Foods":{countryCodes:["us"],tags:{brand:"Lowes Foods","brand:wikidata":"Q6693991","brand:wikipedia":"en:Lowes Foods",name:"Lowes Foods",shop:"supermarket"}},"shop/supermarket|Lucky":{countryCodes:["us"],matchNames:["luckys"],tags:{brand:"Lucky","brand:wikidata":"Q6698032","brand:wikipedia":"en:Lucky Stores",name:"Lucky","operator:wikidata":"Q7428009","operator:wikipedia":"en:Save Mart Supermarkets",shop:"supermarket"}},"shop/supermarket|Lupa":{countryCodes:["es"],tags:{brand:"Lupa","brand:wikidata":"Q58044048",name:"Lupa",shop:"supermarket"}},"shop/supermarket|M&S Simply Food":{tags:{brand:"M&S Simply Food",name:"M&S Simply Food",shop:"supermarket"}},"shop/supermarket|MD":{countryCodes:["it"],matchNames:["md discount"],tags:{brand:"MD","brand:wikidata":"Q3841263","brand:wikipedia":"en:MD Discount",name:"MD",shop:"supermarket"}},"shop/supermarket|MPREIS":{countryCodes:["at","it"],tags:{brand:"MPREIS","brand:wikidata":"Q873491","brand:wikipedia":"de:MPreis",name:"MPREIS",shop:"supermarket"}},"shop/supermarket|Marc's":{countryCodes:["us"],nomatch:["amenity/pharmacy|Marc's"],tags:{brand:"Marc's","brand:wikidata":"Q17080259","brand:wikipedia":"en:Marc's",name:"Marc's",shop:"supermarket"}},"shop/supermarket|Markant":{countryCodes:["de"],tags:{brand:"Markant","brand:wikidata":"Q57523365",name:"Markant",shop:"supermarket"}},"shop/supermarket|Market Basket":{tags:{brand:"Market Basket","brand:wikidata":"Q2079198","brand:wikipedia":"en:Market Basket (New England)",name:"Market Basket",shop:"supermarket"}},"shop/supermarket|Marktkauf":{countryCodes:["de"],tags:{brand:"Marktkauf","brand:wikidata":"Q1533254","brand:wikipedia":"de:Marktkauf Holding",name:"Marktkauf",shop:"supermarket"}},"shop/supermarket|Martin's Super Markets":{countryCodes:["us"],tags:{brand:"Martin's Super Markets","brand:wikidata":"Q6774803","brand:wikipedia":"en:Martin's Super Markets",name:"Martin's Super Markets",shop:"supermarket"}},"shop/supermarket|Match":{countryCodes:["be","fr","hu","lu"],tags:{brand:"Match","brand:wikidata":"Q513977","brand:wikipedia":"en:Match (supermarket)",name:"Match",shop:"supermarket"}},"shop/supermarket|Maxi Dia":{countryCodes:["es"],tags:{brand:"Maxi Dia","brand:wikidata":"Q925132","brand:wikipedia":"es:Supermercados DIA",name:"Maxi Dia",shop:"supermarket"}},"shop/supermarket|Maxima X":{countryCodes:["bg","ee","lt","lv","pl"],nomatch:["shop/supermarket|Maxima XX","shop/supermarket|Maxima XXX"],tags:{brand:"Maxima X","brand:wikidata":"Q1881222","brand:wikipedia":"en:Maxima Group",name:"Maxima X",shop:"supermarket"}},"shop/supermarket|Maxima XX":{countryCodes:["bg","ee","lt","lv","pl"],nomatch:["shop/supermarket|Maxima X","shop/supermarket|Maxima XXX"],tags:{brand:"Maxima XX","brand:wikidata":"Q1881222","brand:wikipedia":"en:Maxima Group",name:"Maxima XX",shop:"supermarket"}},"shop/supermarket|Maxima XXX":{countryCodes:["bg","ee","lt","lv","pl"],matchNames:["maxima"],nomatch:["shop/supermarket|Maxima X","shop/supermarket|Maxima XX"],tags:{brand:"Maxima XXX","brand:wikidata":"Q1881222","brand:wikipedia":"en:Maxima Group",name:"Maxima XXX",shop:"supermarket"}},"shop/supermarket|Maxi~(Canada)":{countryCodes:["ca"],nomatch:["shop/supermarket|Maxi~(Serbia)"],tags:{brand:"Maxi","brand:wikidata":"Q3302441","brand:wikipedia":"en:Maxi (Canadian supermarket)",name:"Maxi",shop:"supermarket"}},"shop/supermarket|Maxi~(Serbia)":{countryCodes:["rs"],nomatch:["shop/supermarket|Maxi~(Canada)"],tags:{brand:"Maxi","brand:wikidata":"Q6795490","brand:wikipedia":"en:Maxi (Serbian supermarket)",name:"Maxi",shop:"supermarket"}},"shop/supermarket|Mega Image":{countryCodes:["ro"],tags:{brand:"Mega Image","brand:wikidata":"Q6808085","brand:wikipedia":"en:Mega Image",name:"Mega Image",shop:"supermarket"}},"shop/supermarket|Mego":{countryCodes:["lv"],tags:{brand:"Mego","brand:wikidata":"Q16363314","brand:wikipedia":"lv:Mego",name:"Mego",shop:"supermarket"}},"shop/supermarket|Meijer":{countryCodes:["us"],tags:{brand:"Meijer","brand:wikidata":"Q1917753","brand:wikipedia":"en:Meijer",name:"Meijer",shop:"supermarket"}},"shop/supermarket|Meny":{countryCodes:["dk","no"],tags:{brand:"Meny","brand:wikidata":"Q10581720","brand:wikipedia":"en:Meny",name:"Meny",shop:"supermarket"}},"shop/supermarket|Mercadona":{tags:{brand:"Mercadona","brand:wikidata":"Q377705","brand:wikipedia":"en:Mercadona",name:"Mercadona",shop:"supermarket"}},"shop/supermarket|Mercator":{tags:{brand:"Mercator",name:"Mercator",shop:"supermarket"}},"shop/supermarket|Merkur":{countryCodes:["at"],tags:{brand:"Merkur","brand:wikidata":"Q1921857","brand:wikipedia":"de:Merkur (Österreich)",name:"Merkur",shop:"supermarket"}},"shop/supermarket|Metro~(Canada)":{countryCodes:["ca"],nomatch:["shop/wholesale|Metro"],tags:{brand:"Metro","brand:wikidata":"Q1145669","brand:wikipedia":"en:Metro Inc.",name:"Metro",shop:"supermarket"}},"shop/supermarket|Metro~(Peru)":{countryCodes:["pe"],nomatch:["shop/wholesale|Metro"],tags:{brand:"Metro","brand:wikidata":"Q16640217","brand:wikipedia":"en:Tiendas Metro",name:"Metro",operator:"Cencosud","operator:wikidata":"Q1053372","operator:wikipedia":"en:Cencosud",shop:"supermarket"}},"shop/supermarket|Migros":{tags:{brand:"Migros","brand:wikidata":"Q680727","brand:wikipedia":"en:Migros",name:"Migros",shop:"supermarket"}},"shop/supermarket|Mila":{countryCodes:["pl"],tags:{brand:"Mila","brand:wikidata":"Q48844636","brand:wikipedia":"pl:Mila (sieć sklepów)",name:"Mila",shop:"supermarket"}},"shop/supermarket|Minipreço":{tags:{brand:"Minipreço","brand:wikidata":"Q3042224","brand:wikipedia":"en:Minipreço",name:"Minipreço",shop:"supermarket"}},"shop/supermarket|Mix Markt":{countryCodes:["de"],tags:{brand:"Mix Markt","brand:wikidata":"Q327854","brand:wikipedia":"de:Mix Markt",name:"Mix Markt",shop:"supermarket"}},"shop/supermarket|Monoprix":{tags:{brand:"Monoprix","brand:wikidata":"Q3321241","brand:wikipedia":"en:Monoprix",name:"Monoprix",shop:"supermarket"}},"shop/supermarket|More":{countryCodes:["in"],tags:{brand:"More","brand:wikidata":"Q6910891","brand:wikipedia":"en:More (store)",name:"More",shop:"supermarket"}},"shop/supermarket|Morrisons":{countryCodes:["gb"],nomatch:["amenity/fuel|Morrisons"],tags:{brand:"Morrisons","brand:wikidata":"Q922344","brand:wikipedia":"en:Morrisons",name:"Morrisons",shop:"supermarket"}},"shop/supermarket|NP":{matchNames:["np-markt"],nomatch:["amenity/fuel|NP"],tags:{brand:"NP",name:"NP",shop:"supermarket"}},"shop/supermarket|Nah & Frisch":{countryCodes:["at","de"],matchNames:["nah und frisch"],tags:{brand:"Nah & Frisch","brand:wikidata":"Q1963643","brand:wikipedia":"de:Nah & Frisch",name:"Nah & Frisch",shop:"supermarket"}},"shop/supermarket|Nahkauf":{countryCodes:["de"],tags:{brand:"Nahkauf","brand:wikidata":"Q57515238",name:"Nahkauf",shop:"supermarket"}},"shop/supermarket|Natural Grocers":{countryCodes:["us"],tags:{brand:"Natural Grocers",name:"Natural Grocers",shop:"supermarket"}},"shop/supermarket|Naturalia":{countryCodes:["fr"],tags:{brand:"Naturalia","brand:wikidata":"Q3337081","brand:wikipedia":"fr:Naturalia",name:"Naturalia",shop:"supermarket"}},"shop/supermarket|Netto":{tags:{brand:"Netto","brand:wikidata":"Q552652","brand:wikipedia":"en:Netto (store)",name:"Netto",shop:"supermarket"}},"shop/supermarket|Netto Marken-Discount":{countryCodes:["de"],tags:{brand:"Netto Marken-Discount","brand:wikidata":"Q879858","brand:wikipedia":"en:Netto Marken-Discount",name:"Netto Marken-Discount",shop:"supermarket"}},"shop/supermarket|New World":{countryCodes:["nz"],tags:{brand:"New World","brand:wikidata":"Q7012488","brand:wikipedia":"en:New World (supermarket)",name:"New World",shop:"supermarket"}},"shop/supermarket|No Frills":{countryCodes:["ca"],tags:{brand:"No Frills","brand:wikidata":"Q3342407","brand:wikipedia":"en:No Frills (grocery store)",name:"No Frills",shop:"supermarket"}},"shop/supermarket|Norfa XL":{countryCodes:["lt"],tags:{brand:"Norfa XL","brand:wikidata":"Q1998983","brand:wikipedia":"lt:Norfa",name:"Norfa XL",shop:"supermarket"}},"shop/supermarket|Norma":{countryCodes:["at","cz","de","fr"],tags:{brand:"Norma","brand:wikidata":"Q450180","brand:wikipedia":"de:Norma (Handelskette)",name:"Norma",shop:"supermarket"}},"shop/supermarket|Okay":{countryCodes:["be"],tags:{brand:"Okay","brand:wikidata":"Q2159701","brand:wikipedia":"fr:OKay",name:"Okay",shop:"supermarket"}},"shop/supermarket|Olímpica":{countryCodes:["co"],tags:{brand:"Olímpica","brand:wikidata":"Q24749847","brand:wikipedia":"es:Grupo Empresarial Olímpica",name:"Olímpica",shop:"supermarket"}},"shop/supermarket|PLUS":{countryCodes:["nl"],nomatch:["shop/mobile_phone|Plus"],tags:{brand:"PLUS","brand:wikidata":"Q1978981","brand:wikipedia":"nl:PLUS (Nederlandse supermarkt)",name:"PLUS",shop:"supermarket"}},"shop/supermarket|POLOmarket":{countryCodes:["pl"],tags:{brand:"POLOmarket","brand:wikidata":"Q11821937","brand:wikipedia":"pl:Polomarket",name:"POLOmarket",shop:"supermarket"}},"shop/supermarket|Palí":{countryCodes:["cr","ni"],tags:{brand:"Palí","brand:wikidata":"Q1064887","brand:wikipedia":"es:Walmart de México y Centroamérica",name:"Palí",shop:"supermarket"}},"shop/supermarket|Pam":{countryCodes:["ch","it"],tags:{brand:"Pam","brand:wikidata":"Q3777398","brand:wikipedia":"it:Gruppo PAM",name:"Pam",shop:"supermarket"}},"shop/supermarket|Pavilions":{countryCodes:["us"],tags:{brand:"Pavilions","brand:wikidata":"Q7155886","brand:wikipedia":"en:Pavilions (supermarket)",name:"Pavilions",shop:"supermarket"}},"shop/supermarket|Penny":{countryCodes:["at","cz","de","hu","it","ro"],matchNames:["penny market","penny markt"],tags:{brand:"Penny","brand:wikidata":"Q284688","brand:wikipedia":"en:Penny (supermarket)",name:"Penny",shop:"supermarket"}},"shop/supermarket|Pick 'n Save":{countryCodes:["us","za"],tags:{brand:"Pick 'n Save","brand:wikidata":"Q7371288","brand:wikipedia":"en:Roundy's",name:"Pick 'n Save",shop:"supermarket"}},"shop/supermarket|Pick n Pay":{tags:{brand:"Pick n Pay","brand:wikidata":"Q7190735","brand:wikipedia":"en:Pick n Pay Stores",name:"Pick n Pay",shop:"supermarket"}},"shop/supermarket|Piggly Wiggly":{countryCodes:["gb","us"],tags:{brand:"Piggly Wiggly","brand:wikidata":"Q3388303","brand:wikipedia":"en:Piggly Wiggly",name:"Piggly Wiggly",shop:"supermarket"}},"shop/supermarket|Pingo Doce":{countryCodes:["pt"],tags:{brand:"Pingo Doce","brand:wikidata":"Q1575057","brand:wikipedia":"en:Pingo Doce",name:"Pingo Doce",shop:"supermarket"}},"shop/supermarket|Piotr i Paweł":{countryCodes:["pl"],tags:{brand:"Piotr i Paweł","brand:wikidata":"Q2096356","brand:wikipedia":"pl:Piotr i Paweł",name:"Piotr i Paweł",shop:"supermarket"}},"shop/supermarket|Plaza Vea":{tags:{brand:"Plaza Vea","brand:wikidata":"Q7203672","brand:wikipedia":"en:Plaza Vea",name:"Plaza Vea",shop:"supermarket"}},"shop/supermarket|Plodine":{countryCodes:["hr"],tags:{brand:"Plodine","brand:wikidata":"Q58040098",name:"Plodine",shop:"supermarket"}},"shop/supermarket|Poiesz":{countryCodes:["nl"],tags:{brand:"Poiesz","brand:wikidata":"Q2521700","brand:wikipedia":"nl:Poiesz Supermarkten",name:"Poiesz",shop:"supermarket"}},"shop/supermarket|Price Chopper~(Kansas City)":{countryCodes:["us"],nomatch:["shop/supermarket|Price Chopper~(New York)"],tags:{brand:"Price Chopper","brand:wikidata":"Q7242572","brand:wikipedia":"en:Price Chopper (supermarket)",name:"Price Chopper",shop:"supermarket"}},"shop/supermarket|Price Chopper~(New York)":{countryCodes:["us"],nomatch:["shop/supermarket|Price Chopper~(Kansas City)"],tags:{brand:"Price Chopper","brand:wikidata":"Q7242574","brand:wikipedia":"en:Price Chopper Supermarkets",name:"Price Chopper",shop:"supermarket"}},"shop/supermarket|Prix":{countryCodes:["it"],matchNames:["prix quality"],tags:{brand:"Prix","brand:wikidata":"Q61994819",name:"Prix",shop:"supermarket"}},"shop/supermarket|Profi":{countryCodes:["be","hu","ro"],tags:{brand:"Profi","brand:wikidata":"Q956664","brand:wikipedia":"en:Profi",name:"Profi",shop:"supermarket"}},"shop/supermarket|Profi City":{countryCodes:["ro"],tags:{brand:"Profi City",name:"Profi City",shop:"supermarket"}},"shop/supermarket|Provigo":{countryCodes:["ca"],tags:{brand:"Provigo","brand:wikidata":"Q3408306","brand:wikipedia":"en:Provigo",name:"Provigo",shop:"supermarket"}},"shop/supermarket|Proxy Delhaize":{countryCodes:["be","lu"],tags:{brand:"Proxy Delhaize","brand:wikidata":"Q14903417","brand:wikipedia":"en:Delhaize Group",name:"Proxy Delhaize",shop:"supermarket"}},"shop/supermarket|Publix":{countryCodes:["br","us"],tags:{brand:"Publix","brand:wikidata":"Q672170","brand:wikipedia":"en:Publix",name:"Publix",shop:"supermarket"}},"shop/supermarket|Punto Simply":{countryCodes:["it"],tags:{brand:"Punto Simply","brand:wikidata":"Q3484790","brand:wikipedia":"it:Simply Market",name:"Punto Simply",shop:"supermarket"}},"shop/supermarket|Puregold":{countryCodes:["ph"],tags:{brand:"Puregold","brand:wikidata":"Q7261170","brand:wikipedia":"en:Puregold",name:"Puregold",shop:"supermarket"}},"shop/supermarket|Pão de Açúcar":{countryCodes:["br","pt"],tags:{brand:"Pão de Açúcar","brand:wikidata":"Q3411543","brand:wikipedia":"pt:Pão de Açúcar (supermercado brasileiro)",name:"Pão de Açúcar",shop:"supermarket"}},"shop/supermarket|QFC":{countryCodes:["us"],tags:{brand:"QFC","brand:wikidata":"Q7265425","brand:wikipedia":"en:QFC",name:"QFC",shop:"supermarket"}},"shop/supermarket|Raley's":{countryCodes:["us"],tags:{brand:"Raley's","brand:wikidata":"Q7286970","brand:wikipedia":"en:Raley's Supermarkets",name:"Raley's",shop:"supermarket"}},"shop/supermarket|Ralphs":{countryCodes:["us"],tags:{brand:"Ralphs","brand:wikidata":"Q3929820","brand:wikipedia":"en:Ralphs",name:"Ralphs",shop:"supermarket"}},"shop/supermarket|Real":{tags:{brand:"Real","brand:wikidata":"Q698473","brand:wikipedia":"en:Real (hypermarket)",name:"Real",shop:"supermarket"}},"shop/supermarket|Real Canadian Superstore":{countryCodes:["ca"],tags:{brand:"Real Canadian Superstore","brand:wikidata":"Q7300856","brand:wikipedia":"en:Real Canadian Superstore",name:"Real Canadian Superstore",shop:"supermarket"}},"shop/supermarket|Redner's":{countryCodes:["us"],matchNames:["redners warehouse market"],tags:{brand:"Redner's","brand:wikidata":"Q7306166","brand:wikipedia":"en:Redner's Markets",name:"Redner's",shop:"supermarket"}},"shop/supermarket|Reliance Fresh":{countryCodes:["in"],tags:{brand:"Reliance Fresh","brand:wikidata":"Q7311014","brand:wikipedia":"en:Reliance Fresh",name:"Reliance Fresh",shop:"supermarket"}},"shop/supermarket|Rema 1000":{countryCodes:["dk","no"],tags:{brand:"Rema 1000","brand:wikidata":"Q28459","brand:wikipedia":"en:REMA 1000",name:"Rema 1000",shop:"supermarket"}},"shop/supermarket|Rewe":{countryCodes:["de"],nomatch:["shop/supermarket|Rewe City"],tags:{brand:"Rewe","brand:wikidata":"Q16968817","brand:wikipedia":"en:REWE",name:"Rewe",shop:"supermarket"}},"shop/supermarket|Rewe City":{countryCodes:["de"],nomatch:["shop/supermarket|Rewe"],tags:{brand:"Rewe City","brand:wikidata":"Q16968817","brand:wikipedia":"en:REWE",name:"Rewe City",shop:"supermarket"}},"shop/supermarket|Rimi":{countryCodes:["ee","lt","lv"],tags:{brand:"Rimi","brand:wikidata":"Q7334456","brand:wikipedia":"en:Rimi (Norway)",name:"Rimi",shop:"supermarket"}},"shop/supermarket|S-Market":{countryCodes:["fi"],tags:{brand:"S-Market","brand:wikidata":"Q11891613","brand:wikipedia":"fi:S-market",name:"S-Market",shop:"supermarket"}},"shop/supermarket|Safeway":{nomatch:["amenity/fuel|Safeway"],tags:{brand:"Safeway","brand:wikidata":"Q1508234","brand:wikipedia":"en:Safeway Inc.",name:"Safeway",shop:"supermarket"}},"shop/supermarket|Sainsbury's":{countryCodes:["gb"],nomatch:["amenity/fuel|Sainsbury's"],tags:{brand:"Sainsbury's","brand:wikidata":"Q152096","brand:wikipedia":"en:Sainsbury's",name:"Sainsbury's",shop:"supermarket"}},"shop/supermarket|Santa Isabel":{countryCodes:["cl"],tags:{brand:"Santa Isabel","brand:wikidata":"Q7419620","brand:wikipedia":"es:Santa Isabel (supermercado)",name:"Santa Isabel",shop:"supermarket"}},"shop/supermarket|Save-A-Lot":{tags:{brand:"Save-A-Lot","brand:wikidata":"Q7427972","brand:wikipedia":"en:Save-A-Lot",name:"Save-A-Lot",shop:"supermarket"}},"shop/supermarket|Save-On-Foods":{countryCodes:["ca"],tags:{brand:"Save-On-Foods","brand:wikidata":"Q7427974","brand:wikipedia":"en:Save-On-Foods",name:"Save-On-Foods",shop:"supermarket"}},"shop/supermarket|Schnucks":{countryCodes:["us"],tags:{brand:"Schnucks","brand:wikidata":"Q7431920","brand:wikipedia":"en:Schnucks",name:"Schnucks",shop:"supermarket"}},"shop/supermarket|Shaw's":{countryCodes:["us"],tags:{brand:"Shaw's","brand:wikidata":"Q578387","brand:wikipedia":"en:Shaw's and Star Market",name:"Shaw's",shop:"supermarket"}},"shop/supermarket|ShopRite~(USA)":{countryCodes:["us"],nomatch:["shop/supermarket|Shoprite~(Africa)","shop/supermarket|Shoprite~(Isle of Man)"],tags:{brand:"ShopRite","brand:wikidata":"Q7501097","brand:wikipedia":"en:ShopRite (United States)",name:"ShopRite",shop:"supermarket"}},"shop/supermarket|Shoprite~(Africa)":{countryCodes:["ao","bw","cd","gh","ls","mg","mu","mw","mz","na","ng","sz","ug","za","zm"],nomatch:["shop/supermarket|ShopRite~(USA)","shop/supermarket|Shoprite~(Isle of Man)"],tags:{brand:"Shoprite","brand:wikidata":"Q1857639","brand:wikipedia":"en:Shoprite (South Africa)",name:"Shoprite",shop:"supermarket"}},"shop/supermarket|Shoprite~(Isle of Man)":{countryCodes:["im"],nomatch:["shop/supermarket|ShopRite~(USA)","shop/supermarket|Shoprite~(Africa)"],tags:{brand:"Shoprite","brand:wikidata":"Q7501242","brand:wikipedia":"en:Shoprite (Isle of Man)",name:"Shoprite",shop:"supermarket"}},"shop/supermarket|Sigma":{countryCodes:["it"],tags:{brand:"Sigma","brand:wikidata":"Q3977979","brand:wikipedia":"it:Supermercati Sigma",name:"Sigma",shop:"supermarket"}},"shop/supermarket|Simply Market":{matchNames:["simply"],tags:{brand:"Simply Market","brand:wikidata":"Q3484790","brand:wikipedia":"en:Simply Market",name:"Simply Market",shop:"supermarket"}},"shop/supermarket|Sky":{countryCodes:["de","lv","nl"],tags:{brand:"Sky","brand:wikidata":"Q1129779","brand:wikipedia":"de:Coop eG",name:"Sky",shop:"supermarket"}},"shop/supermarket|Smart & Final":{countryCodes:["mx","us"],tags:{brand:"Smart & Final",name:"Smart & Final",shop:"supermarket"}},"shop/supermarket|Smith's":{countryCodes:["ca","us"],nomatch:["amenity/fuel|Smith's"],tags:{brand:"Smith's","brand:wikidata":"Q7544856","brand:wikipedia":"en:Smith's Food and Drug",name:"Smith's",shop:"supermarket"}},"shop/supermarket|Sobeys":{countryCodes:["ca"],tags:{brand:"Sobeys","brand:wikidata":"Q1143340","brand:wikipedia":"en:Sobeys",name:"Sobeys",shop:"supermarket"}},"shop/supermarket|Soriana":{countryCodes:["mx"],tags:{brand:"Soriana","brand:wikidata":"Q735562","brand:wikipedia":"en:Soriana",name:"Soriana",shop:"supermarket"}},"shop/supermarket|Spar":{nomatch:["shop/convenience|Spar","shop/convenience|Spar Express"],tags:{brand:"Spar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Spar",shop:"supermarket"}},"shop/supermarket|Społem":{nomatch:["shop/convenience|Społem"],tags:{brand:"Społem","brand:wikidata":"Q11826043","brand:wikipedia":"pl:Powszechna Spółdzielnia Spożywców „Społem”",name:"Społem",shop:"supermarket"}},"shop/supermarket|Sprouts Farmers Market":{countryCodes:["us"],tags:{brand:"Sprouts Farmers Market","brand:wikidata":"Q7581369","brand:wikipedia":"en:Sprouts Farmers Market",name:"Sprouts Farmers Market",shop:"supermarket"}},"shop/supermarket|Stater Bros.":{countryCodes:["us"],tags:{brand:"Stater Bros.","brand:wikidata":"Q7604016","brand:wikipedia":"en:Stater Bros.",name:"Stater Bros.",shop:"supermarket"}},"shop/supermarket|Stokrotka":{countryCodes:["pl"],tags:{brand:"Stokrotka","brand:wikidata":"Q9345945","brand:wikipedia":"pl:Stokrotka (sieć handlowa)",name:"Stokrotka",shop:"supermarket"}},"shop/supermarket|Stop & Shop":{tags:{brand:"Stop & Shop","brand:wikidata":"Q3658429","brand:wikipedia":"en:Stop & Shop",name:"Stop & Shop",shop:"supermarket"}},"shop/supermarket|Studenac":{tags:{brand:"Studenac",name:"Studenac",shop:"supermarket"}},"shop/supermarket|Suma":{countryCodes:["es"],tags:{brand:"Suma","brand:wikidata":"Q58012362",name:"Suma",shop:"supermarket"}},"shop/supermarket|Super 1 Foods":{countryCodes:["us"],tags:{brand:"Super 1 Foods",name:"Super 1 Foods","operator:wikidata":"Q4975085","operator:wikipedia":"en:Brookshire Grocery Company",shop:"supermarket"}},"shop/supermarket|Super C":{tags:{brand:"Super C","brand:wikidata":"Q3504127","brand:wikipedia":"en:Super C (supermarket)",name:"Super C",shop:"supermarket"}},"shop/supermarket|Super H Mart":{countryCodes:["us"],tags:{brand:"H Mart","brand:wikidata":"Q5636306","brand:wikipedia":"en:H Mart",cuisine:"asian",name:"Super H Mart",shop:"supermarket"}},"shop/supermarket|Super One Foods":{countryCodes:["us"],tags:{brand:"Super One Foods","brand:wikidata":"Q17108733","brand:wikipedia":"en:Super One Foods",name:"Super One Foods",shop:"supermarket"}},"shop/supermarket|Super U":{countryCodes:["fr"],nomatch:["amenity/fuel|Super U","shop/convenience|Utile","shop/supermarket|Hyper U","shop/supermarket|U Express"],tags:{brand:"Super U","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Super U",shop:"supermarket"}},"shop/supermarket|SuperBrugsen":{countryCodes:["dk"],tags:{brand:"SuperBrugsen","brand:wikidata":"Q12337746","brand:wikipedia":"en:SuperBrugsen",name:"SuperBrugsen",shop:"supermarket"}},"shop/supermarket|SuperValu":{tags:{brand:"SuperValu","brand:wikidata":"Q7642081","brand:wikipedia":"en:SuperValu (Ireland)",name:"SuperValu",shop:"supermarket"}},"shop/supermarket|Superama":{countryCodes:["mx"],tags:{brand:"Superama","brand:wikidata":"Q6135762","brand:wikipedia":"es:Superama",name:"Superama",shop:"supermarket"}},"shop/supermarket|Supercor":{countryCodes:["es","pt"],tags:{brand:"Supercor","brand:wikidata":"Q6135841","brand:wikipedia":"es:Supercor",name:"Supercor",shop:"supermarket"}},"shop/supermarket|Supersol":{countryCodes:["ar","es","ma","uy"],tags:{brand:"Supersol","brand:wikidata":"Q62073427",name:"Supersol",shop:"supermarket"}},"shop/supermarket|Superspar":{countryCodes:["es","za"],tags:{brand:"Superspar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Superspar",shop:"supermarket"}},"shop/supermarket|Tegut":{countryCodes:["de"],tags:{brand:"Tegut","brand:wikidata":"Q1547993","brand:wikipedia":"en:Tegut",name:"Tegut",shop:"supermarket"}},"shop/supermarket|Tesco":{nomatch:["shop/convenience|Tesco Express","shop/supermarket|Tesco Express"],tags:{brand:"Tesco","brand:wikidata":"Q487494","brand:wikipedia":"en:Tesco",name:"Tesco",shop:"supermarket"}},"shop/supermarket|Tesco Express":{tags:{brand:"Tesco Express","brand:wikidata":"Q487494","brand:wikipedia":"en:Tesco",name:"Tesco Express",shop:"supermarket"}},"shop/supermarket|Tesco Extra":{tags:{brand:"Tesco Extra","brand:wikidata":"Q25172225","brand:wikipedia":"en:Tesco Extra",name:"Tesco Extra",shop:"supermarket"}},"shop/supermarket|Tesco Lotus":{countryCodes:["th"],nomatch:["shop/convenience|Tesco Lotus Express"],tags:{brand:"Tesco Lotus",name:"Tesco Lotus",shop:"supermarket"}},"shop/supermarket|Tesco Metro":{countryCodes:["gb"],tags:{brand:"Tesco Metro","brand:wikidata":"Q57551648",name:"Tesco Metro",shop:"supermarket"}},"shop/supermarket|The Co-operative Food~(UK)":{countryCodes:["gb"],matchNames:["coop","coop food","cooperative food","the cooperative"],nomatch:["amenity/fuel|Co-op~(Canada)","shop/convenience|Co-op~(Canada)","shop/convenience|Coop~(Schweiz)","shop/convenience|The Co-operative Food~(UK)","shop/supermarket|Co-op~(Canada)","shop/supermarket|Coop~(Schweiz)"],tags:{brand:"The Co-operative Food","brand:wikidata":"Q3277439","brand:wikipedia":"en:Co-op Food",name:"The Co-operative Food",shop:"supermarket"}},"shop/supermarket|The Fresh Market":{countryCodes:["us"],tags:{brand:"The Fresh Market","brand:wikidata":"Q7735265","brand:wikipedia":"en:The Fresh Market",name:"The Fresh Market",shop:"supermarket"}},"shop/supermarket|Todis":{countryCodes:["it"],tags:{brand:"Todis","brand:wikidata":"Q3992174","brand:wikipedia":"it:Todis",name:"Todis",shop:"supermarket"}},"shop/supermarket|Tommy":{countryCodes:["hr"],tags:{brand:"Tommy","brand:wikidata":"Q12643718","brand:wikipedia":"hr:Tommy",name:"Tommy",shop:"supermarket"}},"shop/supermarket|Top Market":{countryCodes:["pl"],tags:{brand:"Top Market","brand:wikidata":"Q9360044","brand:wikipedia":"pl:Top Market",name:"Top Market",shop:"supermarket"}},"shop/supermarket|Tops":{countryCodes:["us"],tags:{brand:"Tops","brand:wikidata":"Q7825137","brand:wikipedia":"en:Tops Friendly Markets",name:"Tops",shop:"supermarket"}},"shop/supermarket|Tottus":{countryCodes:["cl","pe"],tags:{brand:"Tottus","brand:wikidata":"Q7828510","brand:wikipedia":"en:Tottus",name:"Tottus",shop:"supermarket"}},"shop/supermarket|Trader Joe's":{countryCodes:["us"],tags:{brand:"Trader Joe's","brand:wikidata":"Q688825","brand:wikipedia":"en:Trader Joe's",name:"Trader Joe's",shop:"supermarket"}},"shop/supermarket|Treff 3000":{countryCodes:["de"],tags:{brand:"Treff 3000","brand:wikidata":"Q701755","brand:wikipedia":"de:Edeka",name:"Treff 3000",shop:"supermarket"}},"shop/supermarket|Tuodì":{countryCodes:["it"],tags:{brand:"Tuodì","brand:wikidata":"Q3706995","brand:wikipedia":"it:Tuodì",name:"Tuodì",shop:"supermarket"}},"shop/supermarket|U Express":{countryCodes:["fr"],nomatch:["amenity/fuel|Super U","shop/convenience|Utile","shop/supermarket|Hyper U","shop/supermarket|Super U"],tags:{brand:"U Express","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"U Express",shop:"supermarket"}},"shop/supermarket|Unimarc":{countryCodes:["cl"],tags:{brand:"Unimarc","brand:wikidata":"Q6156244","brand:wikipedia":"es:Unimarc",name:"Unimarc",shop:"supermarket"}},"shop/supermarket|Unimarkt":{countryCodes:["at"],tags:{brand:"Unimarkt","brand:wikidata":"Q1169599","brand:wikipedia":"de:Unimarkt",name:"Unimarkt",shop:"supermarket"}},"shop/supermarket|Vea":{countryCodes:["ar"],tags:{brand:"Vea","brand:wikidata":"Q5858167","brand:wikipedia":"es:Vea (supermercado)",name:"Vea",shop:"supermarket"}},"shop/supermarket|VinMart":{countryCodes:["vn"],matchTags:["shop/department_store"],nomatch:["shop/convenience|VinMart+"],tags:{brand:"VinMart","brand:wikidata":"Q60245505","brand:wikipedia":"vi:VinMart",name:"VinMart",shop:"supermarket"}},"shop/supermarket|Volg":{countryCodes:["ch","li"],tags:{brand:"Volg","brand:wikidata":"Q2530746","brand:wikipedia":"de:Volg",name:"Volg",shop:"supermarket"}},"shop/supermarket|Vomar":{countryCodes:["nl"],tags:{brand:"Vomar","brand:wikidata":"Q3202837","brand:wikipedia":"nl:Vomar",name:"Vomar",shop:"supermarket"}},"shop/supermarket|Vons":{countryCodes:["us"],tags:{brand:"Vons","brand:wikidata":"Q7941609","brand:wikipedia":"en:Vons",name:"Vons",shop:"supermarket"}},"shop/supermarket|Waitrose":{countryCodes:["gb","je"],tags:{brand:"Waitrose","brand:wikidata":"Q771734","brand:wikipedia":"en:Waitrose & Partners",name:"Waitrose",shop:"supermarket"}},"shop/supermarket|Walmart Neighborhood Market":{countryCodes:["ca","mx","us"],tags:{brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",name:"Walmart Neighborhood Market",operator:"Walmart","operator:wikidata":"Q483551","operator:wikipedia":"en:Walmart",shop:"supermarket"}},"shop/supermarket|Walmart Supercenter":{matchNames:["walmart supercentre"],matchTags:["shop/department_store"],tags:{brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",name:"Walmart Supercenter",operator:"Walmart","operator:wikidata":"Q483551","operator:wikipedia":"en:Walmart",shop:"supermarket"}},"shop/supermarket|Wasgau":{countryCodes:["de"],tags:{brand:"Wasgau","brand:wikidata":"Q2536857","brand:wikipedia":"de:Wasgau (Unternehmen)",name:"Wasgau",shop:"supermarket"}},"shop/supermarket|Wegmans":{countryCodes:["us"],tags:{brand:"Wegmans","brand:wikidata":"Q11288478","brand:wikipedia":"en:Wegmans",name:"Wegmans",shop:"supermarket"}},"shop/supermarket|Weis":{countryCodes:["us"],tags:{brand:"Weis","brand:wikidata":"Q7980370","brand:wikipedia":"en:Weis Markets",name:"Weis",shop:"supermarket"}},"shop/supermarket|Whole Foods Market":{countryCodes:["ca","gb","us"],matchNames:["whole foods"],tags:{brand:"Whole Foods Market","brand:wikidata":"Q1809448","brand:wikipedia":"en:Whole Foods Market",name:"Whole Foods Market",shop:"supermarket"}},"shop/supermarket|Willys":{countryCodes:["se"],tags:{brand:"Willys","brand:wikidata":"Q10720214","brand:wikipedia":"sv:Willys",name:"Willys",shop:"supermarket"}},"shop/supermarket|WinCo Foods":{countryCodes:["us"],tags:{brand:"WinCo Foods","brand:wikidata":"Q8023592","brand:wikipedia":"en:WinCo Foods",name:"WinCo Foods",shop:"supermarket"}},"shop/supermarket|Winn Dixie":{countryCodes:["us"],tags:{brand:"Winn Dixie","brand:wikidata":"Q1264366","brand:wikipedia":"en:Winn-Dixie",name:"Winn Dixie",shop:"supermarket"}},"shop/supermarket|Woolworths":{countryCodes:["au"],nomatch:["shop/clothes|Woolworths"],tags:{brand:"Woolworths","brand:wikidata":"Q3249145","brand:wikipedia":"en:Woolworths Supermarkets",name:"Woolworths",shop:"supermarket"}},"shop/supermarket|Your Independent Grocer":{countryCodes:["ca"],matchNames:["independent"],tags:{brand:"Your Independent Grocer","brand:wikidata":"Q8058833","brand:wikipedia":"en:Your Independent Grocer",name:"Your Independent Grocer",shop:"supermarket"}},"shop/supermarket|basic":{countryCodes:["de"],tags:{brand:"basic","brand:wikidata":"Q809994","brand:wikipedia":"de:Basic AG",name:"basic",organic:"only",shop:"supermarket"}},"shop/supermarket|denn's Biomarkt":{countryCodes:["at","de"],tags:{brand:"denn's Biomarkt","brand:wikidata":"Q48883773","brand:wikipedia":"de:Dennree",name:"denn's Biomarkt",organic:"only",shop:"supermarket"}},"shop/supermarket|fakta":{countryCodes:["dk"],tags:{brand:"fakta","brand:wikidata":"Q3172238","brand:wikipedia":"en:Fakta",name:"fakta",shop:"supermarket"}},"shop/supermarket|Şok":{countryCodes:["tr"],tags:{brand:"Şok","brand:wikidata":"Q19613992","brand:wikipedia":"tr:Şok (market)",name:"Şok",shop:"supermarket"}},"shop/supermarket|ΑΒ Βασιλόπουλος":{countryCodes:["gr"],tags:{brand:"ΑΒ Βασιλόπουλος","brand:en":"AB Vassilopoulos","brand:wikidata":"Q4721807","brand:wikipedia":"el:Άλφα Βήτα Βασιλόπουλος",name:"ΑΒ Βασιλόπουλος","name:en":"AB Vassilopoulos",shop:"supermarket"}},"shop/supermarket|Γαλαξίας":{countryCodes:["gr"],tags:{brand:"Γαλαξίας","brand:en":"Galaxias","brand:wikidata":"Q5518063","brand:wikipedia":"el:Γαλαξίας (σούπερ μάρκετ)",name:"Γαλαξίας","name:en":"Galaxias",shop:"supermarket"}},"shop/supermarket|Μασούτης":{countryCodes:["gr"],tags:{brand:"Μασούτης","brand:en":"Masoutis","brand:wikidata":"Q6783887","brand:wikipedia":"en:Masoutis",name:"Μασούτης","name:en":"Masoutis",shop:"supermarket"}},"shop/supermarket|Σκλαβενίτης":{countryCodes:["gr"],tags:{brand:"Σκλαβενίτης","brand:en":"Sklavenitis","brand:wikidata":"Q7536037","brand:wikipedia":"el:Σκλαβενίτης",name:"Σκλαβενίτης","name:en":"Sklavenitis",shop:"supermarket"}},"shop/supermarket|АТБ":{tags:{brand:"АТБ",name:"АТБ",shop:"supermarket"}},"shop/supermarket|Абсолют~(Russia)":{countryCodes:["ru"],tags:{brand:"Абсолют","brand:wikidata":"Q62389597",name:"Абсолют",shop:"supermarket"}},"shop/supermarket|Абсолют~(Ukraine)":{countryCodes:["ua"],tags:{brand:"Абсолют","brand:wikidata":"Q62389546",name:"Абсолют",shop:"supermarket"}},"shop/supermarket|Авоська":{tags:{brand:"Авоська",name:"Авоська",shop:"supermarket"}},"shop/supermarket|Азбука Вкуса":{countryCodes:["ru"],tags:{brand:"Азбука Вкуса","brand:en":"Azbuka Vkusa","brand:wikidata":"Q4058209","brand:wikipedia":"en:Azbuka Vkusa",name:"Азбука Вкуса","name:en":"Azbuka Vkusa",shop:"supermarket"}},"shop/supermarket|Атак":{countryCodes:["ru"],tags:{brand:"Атак","brand:en":"Atac","brand:wikidata":"Q2868738","brand:wikipedia":"ru:Atac",name:"Атак","name:en":"Atac",shop:"supermarket"}},"shop/supermarket|Ашан":{tags:{brand:"Ашан","brand:en":"Auchan","brand:wikidata":"Q758603","brand:wikipedia":"ru:Auchan",name:"Ашан","name:en":"Auchan",shop:"supermarket"}},"shop/supermarket|Байрам":{tags:{brand:"Байрам",name:"Байрам",shop:"supermarket"}},"shop/supermarket|Брусничка":{countryCodes:["ua"],tags:{brand:"Брусничка","brand:en":"Brusnichka","brand:wikidata":"Q21656645","brand:wikipedia":"uk:Брусничка (торгова мережа)",name:"Брусничка","name:en":"Brusnichka",shop:"supermarket"}},"shop/supermarket|Верный":{tags:{brand:"Верный",name:"Верный",shop:"supermarket"}},"shop/supermarket|Виктория":{countryCodes:["ru"],matchTags:["shop/convenience"],nomatch:["amenity/cafe|Виктория","shop/hairdresser|Виктория"],tags:{brand:"Виктория","brand:wikidata":"Q4111046","brand:wikipedia":"ru:Виктория (сеть магазинов)",name:"Виктория",shop:"supermarket"}},"shop/supermarket|Виталюр":{countryCodes:["by"],tags:{brand:"Виталюр","brand:wikidata":"Q55663075","brand:wikipedia":"ru:Виталюр",name:"Виталюр",shop:"supermarket"}},"shop/supermarket|Вопак":{countryCodes:["ua"],tags:{brand:"Вопак","brand:en":"Vopak","brand:wikidata":"Q30966107","brand:wikipedia":"uk:Вопак",name:"Вопак","name:en":"Vopak",shop:"supermarket"}},"shop/supermarket|Гастроном":{tags:{brand:"Гастроном",name:"Гастроном",shop:"supermarket"}},"shop/supermarket|Гроздь":{nomatch:["shop/convenience|Гроздь"],tags:{brand:"Гроздь","brand:wikidata":"Q21638412","brand:wikipedia":"ru:Гроздь (сеть магазинов)",name:"Гроздь",shop:"supermarket"}},"shop/supermarket|Гулливер":{countryCodes:["ru"],tags:{brand:"Гулливер","brand:wikidata":"Q58003470",name:"Гулливер",shop:"supermarket"}},"shop/supermarket|Десяточка":{countryCodes:["ru"],tags:{brand:"Десяточка","brand:en":"Desyatochka","brand:wikidata":"Q61876182",name:"Десяточка",shop:"supermarket"}},"shop/supermarket|Дикси":{countryCodes:["ru"],matchTags:["shop/convenience"],tags:{brand:"Дикси","brand:en":"Dixy","brand:wikidata":"Q4161561","brand:wikipedia":"ru:Дикси (сеть магазинов)",name:"Дикси",shop:"supermarket"}},"shop/supermarket|Евроопт":{matchNames:["евроопт market"],matchTags:["shop/convenience"],tags:{brand:"Евроопт","brand:en":"Euroopt","brand:ru":"Евроопт","brand:wikidata":"Q2565040","brand:wikipedia":"be:Еўрагандаль",name:"Евроопт","name:en":"Euroopt","name:ru":"Евроопт",shop:"supermarket"}},"shop/supermarket|Евроопт Super":{tags:{brand:"Евроопт Super",name:"Евроопт Super",shop:"supermarket"}},"shop/supermarket|Караван":{tags:{brand:"Караван",name:"Караван",shop:"supermarket"}},"shop/supermarket|Карусель":{countryCodes:["ru"],tags:{brand:"Карусель","brand:en":"Karusel","brand:wikidata":"Q4216307","brand:wikipedia":"ru:Карусель (сеть магазинов)",name:"Карусель","name:en":"Karusel",shop:"supermarket"}},"shop/supermarket|Квартал":{tags:{brand:"Квартал",name:"Квартал",shop:"supermarket"}},"shop/supermarket|Кировский":{matchTags:["shop/convenience"],tags:{brand:"Кировский","brand:wikidata":"Q63301903",name:"Кировский",shop:"supermarket"}},"shop/supermarket|Командор":{countryCodes:["ru"],tags:{brand:"Командор","brand:en":"Komandor","brand:wikidata":"Q61876152",name:"Командор",shop:"supermarket"}},"shop/supermarket|Красный Яр":{countryCodes:["ru"],tags:{brand:"Красный Яр","brand:en":"Krasnyj Jar","brand:wikidata":"Q1786753","brand:wikipedia":"ru:Красный Яр",name:"Красный Яр",shop:"supermarket"}},"shop/supermarket|Лента":{countryCodes:["ru"],tags:{brand:"Лента","brand:en":"Lenta","brand:wikidata":"Q4258608","brand:wikipedia":"ru:Лента (сеть магазинов)",name:"Лента","name:en":"Lenta",shop:"supermarket"}},"shop/supermarket|Магазин":{tags:{brand:"Магазин",name:"Магазин",shop:"supermarket"}},"shop/supermarket|Магнит":{matchTags:["shop/department_store"],nomatch:["shop/convenience|Магнит","shop/cosmetics|Магнит Косметик"],tags:{brand:"Магнит","brand:en":"Magnit","brand:wikidata":"Q940518","brand:wikipedia":"ru:Магнит (сеть магазинов)",name:"Магнит","name:en":"Magnit",shop:"supermarket"}},"shop/supermarket|Магнит у дома":{tags:{brand:"Магнит у дома",name:"Магнит у дома",shop:"supermarket"}},"shop/supermarket|Магнолия":{countryCodes:["ru"],matchTags:["shop/convenience"],tags:{brand:"Магнолия","brand:wikipedia":"ru:Магнолия (сеть магазинов)",name:"Магнолия",shop:"supermarket"}},"shop/supermarket|Мария-Ра":{countryCodes:["ru"],nomatch:["shop/convenience|Мария-Ра"],tags:{brand:"Мария-Ра","brand:en":"Maria-ra","brand:wikidata":"Q4281631","brand:wikipedia":"ru:Мария-Ра",name:"Мария-Ра","name:en":"Maria-ra",shop:"supermarket"}},"shop/supermarket|Мираторг":{tags:{brand:"Мираторг",name:"Мираторг",shop:"supermarket"}},"shop/supermarket|Монетка":{countryCodes:["ru"],tags:{brand:"Монетка","brand:en":"Monetka","brand:wikidata":"Q4301704","brand:wikipedia":"ru:Монетка (сеть магазинов)",name:"Монетка","name:en":"Monetka",shop:"supermarket"}},"shop/supermarket|Народная 7Я семьЯ":{countryCodes:["ru"],matchNames:["семья"],tags:{brand:"Народная 7Я семьЯ","brand:en":"People's 7th Family","brand:wikidata":"Q4032436","brand:wikipedia":"ru:Народная 7Я семья",name:"Народная 7Я семьЯ","name:en":"People's 7th Family",shop:"supermarket"}},"shop/supermarket|Перекрёсток":{countryCodes:["ru"],matchNames:["перекресток"],matchTags:["shop/convenience"],tags:{brand:"Перекрёсток","brand:en":"Perekryostok","brand:wikidata":"Q1684639","brand:wikipedia":"en:Perekrestok (supermarket chain)",name:"Перекрёсток",shop:"supermarket"}},"shop/supermarket|Покупочка":{countryCodes:["ru"],tags:{brand:"Покупочка","brand:wikidata":"Q58003270",name:"Покупочка",shop:"supermarket"}},"shop/supermarket|Полушка":{countryCodes:["ru"],tags:{brand:"Полушка","brand:en":"Polushka","brand:wikidata":"Q4371080","brand:wikipedia":"ru:Полушка (сеть магазинов)",name:"Полушка","name:en":"Polushka",shop:"supermarket"}},"shop/supermarket|Пятёрочка":{countryCodes:["ru"],matchNames:["пятерочка"],matchTags:["shop/convenience"],tags:{brand:"Пятёрочка","brand:en":"Pyaterochka","brand:wikidata":"Q1768969","brand:wikipedia":"ru:Пятёрочка",name:"Пятёрочка","name:en":"Pyaterochka",shop:"supermarket"}},"shop/supermarket|Радеж":{countryCodes:["ru"],tags:{brand:"Радеж","brand:en":"Radezh","brand:wikidata":"Q4387165","brand:wikipedia":"ru:Радеж (торговая сеть)",name:"Радеж","name:en":"Radezh",shop:"supermarket"}},"shop/supermarket|Рублёвский":{tags:{brand:"Рублёвский",name:"Рублёвский",shop:"supermarket"}},"shop/supermarket|Рукавичка":{countryCodes:["ua"],tags:{brand:"Рукавичка","brand:en":"Rukavychka","brand:wikidata":"Q20092568","brand:wikipedia":"uk:Рукавичка (торгова мережа)",name:"Рукавичка","name:en":"Rukavychka",shop:"supermarket"}},"shop/supermarket|Светофор":{countryCodes:["ru"],tags:{brand:"Светофор","brand:en":"Svetofor","brand:wikidata":"Q61875920",name:"Светофор",shop:"supermarket"}},"shop/supermarket|Семишагофф":{countryCodes:["ru"],tags:{brand:"Семишагофф","brand:wikidata":"Q58003374",name:"Семишагофф",shop:"supermarket"}},"shop/supermarket|Сільпо":{countryCodes:["ua"],tags:{brand:"Сільпо","brand:en":"Silpo","brand:wikidata":"Q4419434","brand:wikipedia":"en:Silpo",name:"Сільпо","name:en":"Silpo",shop:"supermarket"}},"shop/supermarket|Таврия В":{countryCodes:["ua"],tags:{brand:"Таврия В","brand:wikidata":"Q61823146","brand:wikipedia":"uk:Таврія В",name:"Таврия В",shop:"supermarket"}},"shop/supermarket|Фора":{countryCodes:["ua"],tags:{brand:"Фора","brand:en":"Fora","brand:wikidata":"Q12165977","brand:wikipedia":"uk:Фора (мережа магазинів)",name:"Фора","name:en":"Fora",shop:"supermarket"}},"shop/supermarket|Фуршет":{countryCodes:["ua"],tags:{brand:"Фуршет","brand:en":"Furshet","brand:wikidata":"Q4493564","brand:wikipedia":"uk:Фуршет (мережа супермаркетів)",name:"Фуршет","name:en":"Furshet",shop:"supermarket"}},"shop/supermarket|Эдельвейс":{countryCodes:["ru"],tags:{brand:"Эдельвейс","brand:en":"Edelveis","brand:wikidata":"Q57979368",name:"Эдельвейс","name:en":"Edelveis",shop:"supermarket"}},"shop/supermarket|いなげや":{countryCodes:["jp"],tags:{brand:"いなげや","brand:en":"Inageya","brand:ja":"いなげや","brand:wikidata":"Q17193392","brand:wikipedia":"ja:いなげや",name:"いなげや","name:en":"Inageya","name:ja":"いなげや",shop:"supermarket"}},"shop/supermarket|まいばすけっと":{countryCodes:["jp"],tags:{brand:"まいばすけっと","brand:en":"My Basket","brand:ja":"まいばすけっと","brand:wikidata":"Q11278154","brand:wikipedia":"ja:まいばすけっと",name:"まいばすけっと","name:en":"My Basket","name:ja":"まいばすけっと",shop:"supermarket"}},"shop/supermarket|イオン":{countryCodes:["jp"],tags:{brand:"イオン","brand:en":"AEON","brand:ja":"イオン","brand:wikidata":"Q11285951","brand:wikipedia":"ja:イオン (店舗ブランド)",name:"イオン","name:en":"AEON","name:ja":"イオン",shop:"supermarket"}},"shop/supermarket|イトーヨーカドー":{countryCodes:["jp"],matchNames:["イトーヨーカ堂"],tags:{brand:"イトーヨーカドー","brand:en":"Ito-Yokado","brand:ja":"イトーヨーカドー","brand:wikidata":"Q3088746","brand:wikipedia":"en:Ito-Yokado",name:"イトーヨーカドー","name:en":"Ito-Yokado","name:ja":"イトーヨーカドー",shop:"supermarket"}},"shop/supermarket|カスミ":{countryCodes:["jp"],tags:{brand:"カスミ","brand:en":"Kasumi","brand:ja":"カスミ","brand:wikidata":"Q11294160","brand:wikipedia":"ja:カスミ",name:"カスミ","name:en":"Kasumi","name:ja":"カスミ",shop:"supermarket"}},"shop/supermarket|コープ":{countryCodes:["jp"],tags:{brand:"コープ","brand:ja":"コープ",name:"コープ","name:ja":"コープ",shop:"supermarket"}},"shop/supermarket|バロー":{countryCodes:["jp"],tags:{brand:"バロー","brand:en":"Valor","brand:ja":"バロー","brand:wikidata":"Q11328346","brand:wikipedia":"ja:バロー (チェーンストア)",name:"バロー","name:en":"Valor","name:ja":"バロー",shop:"supermarket"}},"shop/supermarket|マックスバリュ":{countryCodes:["jp"],tags:{brand:"マックスバリュ","brand:en":"Maxvalu Tokai","brand:ja":"マックスバリュ","brand:wikidata":"Q1960109","brand:wikipedia":"en:MaxValu",name:"マックスバリュ","name:en":"Maxvalu Tokai","name:ja":"マックスバリュ",shop:"supermarket"}},"shop/supermarket|マルエツ":{countryCodes:["jp"],tags:{brand:"マルエツ","brand:en":"Maruetsu","brand:ja":"マルエツ","brand:wikidata":"Q11341197","brand:wikipedia":"ja:マルエツ",name:"マルエツ","name:en":"Maruetsu","name:ja":"マルエツ",shop:"supermarket"}},"shop/supermarket|ヤオコー":{countryCodes:["jp"],tags:{brand:"ヤオコー","brand:en":"Yaoko","brand:ja":"ヤオコー","brand:wikidata":"Q11344967","brand:wikipedia":"ja:ヤオコー",name:"ヤオコー","name:en":"Yaoko","name:ja":"ヤオコー",shop:"supermarket"}},"shop/supermarket|ヨークベニマル":{countryCodes:["jp"],tags:{brand:"ヨークベニマル","brand:en":"York Benimaru","brand:ja":"ヨークベニマル","brand:wikidata":"Q11346199","brand:wikipedia":"ja:ヨークベニマル",name:"ヨークベニマル","name:en":"York Benimaru","name:ja":"ヨークベニマル",shop:"supermarket"}},"shop/supermarket|ヨークマート":{countryCodes:["jp"],tags:{brand:"ヨークマート","brand:en":"YorkMart","brand:ja":"ヨークマート","brand:wikidata":"Q11346201","brand:wikipedia":"ja:ヨークマート",name:"ヨークマート","name:en":"YorkMart","name:ja":"ヨークマート",operator:"株式会社セブン&アイ・ホールディングス","operator:en":"Seven & I Holdings Co., Ltd.","operator:wikidata":"Q639447","operator:wikipedia":"ja:セブン&アイ・ホールディングス",shop:"supermarket"}},"shop/supermarket|ライフ":{countryCodes:["jp"],tags:{brand:"ライフ","brand:en":"Life","brand:ja":"ライフ","brand:wikidata":"Q11346476","brand:wikipedia":"ja:ライフコーポレーション",name:"ライフ","name:en":"Life","name:ja":"ライフ",shop:"supermarket"}},"shop/supermarket|全聯":{countryCodes:["tw"],tags:{brand:"全聯","brand:en":"Pxmart","brand:wikidata":"Q7262792","brand:wikipedia":"en:PX Mart",name:"全聯","name:en":"Pxmart",shop:"supermarket"}},"shop/supermarket|全聯福利中心":{countryCodes:["tw"],tags:{brand:"全聯福利中心","brand:en":"Pxmart","brand:wikidata":"Q7262792","brand:wikipedia":"en:PX Mart",name:"全聯福利中心","name:en":"Pxmart",shop:"supermarket"}},"shop/supermarket|家乐福":{countryCodes:["cn"],tags:{brand:"家乐福","brand:wikidata":"Q217599","brand:wikipedia":"wuu:家乐福",name:"家乐福",shop:"supermarket"}},"shop/supermarket|惠康 Wellcome":{countryCodes:["hk"],tags:{brand:"惠康 Wellcome","brand:en":"Wellcome","brand:wikidata":"Q706247","brand:wikipedia":"zh:惠康",name:"惠康 Wellcome","name:en":"Wellcome",shop:"supermarket"}},"shop/supermarket|業務スーパー":{countryCodes:["jp"],tags:{brand:"業務スーパー","brand:en":"Gyōmu sūpā","brand:ja":"業務スーパー","brand:wikidata":"Q11590183","brand:wikipedia":"ja:神戸物産",name:"業務スーパー","name:en":"Gyōmu sūpā","name:ja":"業務スーパー",shop:"supermarket"}},"shop/supermarket|沃尔玛":{countryCodes:["cn"],tags:{brand:"沃尔玛","brand:en":"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"wuu:沃尔玛",name:"沃尔玛","name:en":"Walmart",shop:"supermarket"}},"shop/supermarket|美廉社":{countryCodes:["tw"],tags:{brand:"美廉社","brand:en":"Simple Mart","brand:wikidata":"Q15914017","brand:wikipedia":"zh:美廉社",name:"美廉社","name:en":"Simple Mart",shop:"supermarket"}},"shop/supermarket|西友":{countryCodes:["jp"],tags:{brand:"西友","brand:en":"Seiyu Group","brand:wikidata":"Q3108542","brand:wikipedia":"en:Seiyu Group",name:"西友","name:en":"Seiyu Group",shop:"supermarket"}},"shop/supermarket|頂好":{countryCodes:["tw"],tags:{brand:"頂好","brand:en":"Wellcome","brand:wikidata":"Q706247","brand:wikipedia":"en:Wellcome",name:"頂好","name:en":"Wellcome",shop:"supermarket"}},"shop/supermarket|頂好超市":{tags:{brand:"頂好超市","brand:en":"Wellcome","brand:wikidata":"Q706247","brand:wikipedia":"en:Wellcome",name:"頂好超市","name:en":"Wellcome",shop:"supermarket"}},"shop/supermarket|롯데마트":{countryCodes:["kr"],tags:{brand:"롯데마트","brand:ko":"롯데마트","brand:wikidata":"Q326715","brand:wikipedia":"ko:롯데마트",name:"롯데마트","name:en":"Lotte Mart","name:ko":"롯데마트",shop:"supermarket"}},"shop/supermarket|우리마트":{countryCodes:["kr"],tags:{brand:"우리마트","brand:ko":"우리마트",name:"우리마트","name:ko":"우리마트",shop:"supermarket"}},"shop/supermarket|하나로마트":{countryCodes:["kr"],tags:{brand:"하나로마트","brand:en":"Hanaro Mart","brand:ko":"하나로마트","brand:wikidata":"Q12590611","brand:wikipedia":"ko:농협유통",name:"하나로마트","name:ko":"하나로마트",shop:"supermarket"}},"shop/tea|T2":{countryCodes:["au"],tags:{brand:"T2","brand:wikidata":"Q48802134","brand:wikipedia":"en:T2 (Australian company)",name:"T2",shop:"tea"}},"shop/tea|TeeGschwendner":{tags:{brand:"TeeGschwendner","brand:wikidata":"Q2399969","brand:wikipedia":"de:TeeGschwendner",name:"TeeGschwendner",shop:"tea"}},"shop/ticket|Boutique Grandes Lignes":{countryCodes:["fr"],tags:{brand:"Boutique Grandes Lignes","brand:wikidata":"Q13646","brand:wikipedia":"fr:Société nationale des chemins de fer français",name:"Boutique Grandes Lignes",shop:"ticket"}},"shop/ticket|DB Reisezentrum":{countryCodes:["de"],matchNames:["reisezentrum"],tags:{brand:"DB Reisezentrum","brand:wikidata":"Q15842100","brand:wikipedia":"de:Reisezentrum",name:"DB Reisezentrum",shop:"ticket"}},"shop/ticket|Guichet Transilien":{countryCodes:["fr"],tags:{brand:"Guichet Transilien","brand:wikidata":"Q389554","brand:wikipedia":"fr:Transilien",name:"Guichet Transilien",shop:"ticket"}},"shop/tobacco|Nemzeti Dohánybolt":{countryCodes:["hu"],matchNames:["dohánybolt"],matchTags:["shop/kiosk"],tags:{brand:"Nemzeti Dohánybolt","brand:wikidata":"Q20639040","brand:wikipedia":"en:Dohánybolt",name:"Nemzeti Dohánybolt",shop:"tobacco"}},"shop/toys|Build-A-Bear Workshop":{countryCodes:["ca","gb","us"],matchNames:["build a bear"],tags:{brand:"Build-A-Bear Workshop","brand:wikidata":"Q1002992","brand:wikipedia":"en:Build-A-Bear Workshop",name:"Build-A-Bear Workshop",shop:"toys"}},"shop/toys|Dráčik":{countryCodes:["cz","sk"],tags:{brand:"Dráčik","brand:wikidata":"Q57653669",name:"Dráčik",shop:"toys"}},"shop/toys|Intertoys":{countryCodes:["be","de","nl"],tags:{brand:"Intertoys","brand:wikidata":"Q1891407","brand:wikipedia":"nl:Intertoys",name:"Intertoys",shop:"toys"}},"shop/toys|JouéClub":{countryCodes:["ad","fr","it","lb","ma","qa"],tags:{brand:"JouéClub","brand:wikidata":"Q3187152","brand:wikipedia":"fr:JouéClub",name:"JouéClub",shop:"toys"}},"shop/toys|King Jouet":{countryCodes:["fr"],tags:{brand:"King Jouet","brand:en":"King Toy","brand:wikidata":"Q3197009","brand:wikipedia":"fr:King Jouet",name:"King Jouet","name:en":"King Toy",shop:"toys"}},"shop/toys|La Grande Récré":{countryCodes:["be","ci","es","fr","ma"],tags:{brand:"La Grande Récré","brand:wikidata":"Q3209556","brand:wikipedia":"fr:La Grande Récré (magasin)",name:"La Grande Récré",shop:"toys"}},"shop/toys|Lego":{tags:{brand:"Lego","brand:wikidata":"Q1063455","brand:wikipedia":"en:The Lego Group",name:"Lego",shop:"toys"}},"shop/toys|Lekia":{countryCodes:["no","se"],tags:{brand:"Lekia","brand:wikidata":"Q56303274","brand:wikipedia":"sv:Lekia",name:"Lekia",shop:"toys"}},"shop/toys|Maxi Toys":{countryCodes:["be","de","fr","it"],tags:{brand:"Maxi Toys","brand:wikidata":"Q16663879","brand:wikipedia":"fr:Maxi Toys",name:"Maxi Toys",shop:"toys"}},"shop/toys|The Entertainer":{countryCodes:["gb","je"],tags:{brand:"The Entertainer","brand:wikidata":"Q7732289","brand:wikipedia":"en:The Entertainer (retailer)",name:"The Entertainer",shop:"toys"}},"shop/toys|Toys R Us":{tags:{brand:"Toys R Us","brand:wikidata":"Q696334","brand:wikipedia":"en:Toys \"R\" Us",name:"Toys R Us",shop:"toys"}},"shop/toys|Бегемотик":{countryCodes:["ru"],tags:{brand:"Бегемотик",name:"Бегемотик",shop:"toys"}},"shop/toys|Детский мир":{countryCodes:["by","kg","kz","ru","ua","uz"],tags:{brand:"Детский мир","brand:en":"Detskiy Mir","brand:wikidata":"Q16643324","brand:wikipedia":"en:Detsky Mir",name:"Детский мир","name:en":"Detskiy Mir",shop:"toys"}},"shop/toys|Кораблик":{countryCodes:["ru"],tags:{brand:"Кораблик","brand:wikidata":"Q57653416",name:"Кораблик",shop:"toys"}},"shop/trade|Fastenal":{countryCodes:["ca","pa","pr","us"],matchTags:["shop/doityourself","shop/hardware"],tags:{brand:"Fastenal","brand:wikidata":"Q3067119","brand:wikipedia":"en:Fastenal",name:"Fastenal",shop:"trade"}},"shop/trade|Grainger":{countryCodes:["ca","us"],matchNames:["granger","w. w. grainger"],matchTags:["shop/doityourself","shop/hardware"],tags:{brand:"Grainger","brand:wikidata":"Q1627894","brand:wikipedia":"en:W. W. Grainger",name:"Grainger",shop:"trade"}},"shop/travel_agency|Coral Travel":{countryCodes:["pl","ru","ua"],tags:{brand:"Coral Travel","brand:wikidata":"Q58011479",name:"Coral Travel",shop:"travel_agency"}},"shop/travel_agency|D-reizen":{countryCodes:["nl"],tags:{brand:"D-reizen","brand:wikidata":"Q2445498","brand:wikipedia":"nl:D-reizen",name:"D-reizen",shop:"travel_agency"}},"shop/travel_agency|DER Reisebüro":{countryCodes:["de"],tags:{brand:"DER Reisebüro","brand:wikidata":"Q56729186","brand:wikipedia":"de:Deutsches Reisebüro",name:"DER Reisebüro",shop:"travel_agency"}},"shop/travel_agency|First Reisebüro":{countryCodes:["de"],tags:{brand:"First Reisebüro","brand:wikidata":"Q573103","brand:wikipedia":"en:TUI Group",name:"First Reisebüro",shop:"travel_agency"}},"shop/travel_agency|Flight Centre":{tags:{brand:"Flight Centre","brand:wikidata":"Q5459202","brand:wikipedia":"en:Flight Centre",name:"Flight Centre",shop:"travel_agency"}},"shop/travel_agency|Halcón Viajes":{countryCodes:["es"],tags:{brand:"Halcón Viajes","brand:wikidata":"Q57591939",name:"Halcón Viajes",shop:"travel_agency"}},"shop/travel_agency|Havas Voyages":{countryCodes:["fr"],tags:{brand:"Havas Voyages","brand:wikidata":"Q57628091",name:"Havas Voyages",shop:"travel_agency"}},"shop/travel_agency|Reiseland":{countryCodes:["de"],tags:{brand:"Reiseland","brand:wikidata":"Q40387610","brand:wikipedia":"de:OTTO Reisen",name:"Reiseland",shop:"travel_agency"}},"shop/travel_agency|Selectour":{countryCodes:["fr"],tags:{brand:"Selectour","brand:wikidata":"Q3478073","brand:wikipedia":"fr:Selectour",name:"Selectour",shop:"travel_agency"}},"shop/travel_agency|TUI":{matchNames:["tui reisecenter"],tags:{brand:"TUI","brand:wikidata":"Q573103","brand:wikipedia":"en:TUI Group",name:"TUI",shop:"travel_agency"}},"shop/travel_agency|The Co-operative Travel":{countryCodes:["gb"],tags:{brand:"The Co-operative Travel","brand:wikidata":"Q7726526","brand:wikipedia":"en:The Co-operative Travel",name:"The Co-operative Travel",shop:"travel_agency"}},"shop/travel_agency|Thomas Cook":{tags:{brand:"Thomas Cook","brand:wikidata":"Q2141800","brand:wikipedia":"en:Thomas Cook Group",name:"Thomas Cook",shop:"travel_agency"}},"shop/travel_agency|Thomson":{tags:{brand:"Thomson","brand:wikidata":"Q7795876","brand:wikipedia":"en:TUI UK",name:"Thomson",shop:"travel_agency"}},"shop/travel_agency|Поехали с нами":{countryCodes:["ua"],tags:{brand:"Поехали с нами","brand:wikidata":"Q25439141","brand:wikipedia":"uk:Поїхали з нами",name:"Поехали с нами",shop:"travel_agency"}},"shop/tyres|Big O Tires":{countryCodes:["ca","us"],tags:{brand:"Big O Tires","brand:wikidata":"Q4906085","brand:wikipedia":"en:Big O Tires",name:"Big O Tires",shop:"tyres"}},"shop/tyres|Bridgestone":{tags:{brand:"Bridgestone","brand:wikidata":"Q179433","brand:wikipedia":"en:Bridgestone",name:"Bridgestone",shop:"tyres"}},"shop/tyres|Discount Tire":{tags:{brand:"Discount Tire","brand:wikidata":"Q5281735","brand:wikipedia":"en:Discount Tire",name:"Discount Tire",shop:"tyres"}},"shop/tyres|Express Oil Change & Tire Engineers":{countryCodes:["us"],tags:{brand:"Express Oil Change & Tire Engineers","brand:wikidata":"Q39057654","brand:wikipedia":"en:Express Oil Change & Tire Engineers",name:"Express Oil Change & Tire Engineers",shop:"tyres"}},"shop/tyres|Les Schwab Tire Center":{countryCodes:["us"],tags:{brand:"Les Schwab Tire Center","brand:wikidata":"Q6529977","brand:wikipedia":"en:Les Schwab Tire Centers",name:"Les Schwab Tire Center",shop:"tyres"}},"shop/tyres|Michelin":{tags:{brand:"Michelin","brand:wikidata":"Q151107","brand:wikipedia":"en:Michelin",name:"Michelin",shop:"tyres"}},"shop/tyres|Tire Discounters":{countryCodes:["us"],tags:{brand:"Tire Discounters","brand:wikidata":"Q29093639","brand:wikipedia":"en:Tire Discounters",name:"Tire Discounters",shop:"tyres"}},"shop/tyres|Vianor":{tags:{brand:"Vianor","brand:wikidata":"Q10714920","brand:wikipedia":"sv:Vianor",name:"Vianor",shop:"tyres"}},"shop/variety_store|99 Cents Only Stores":{countryCodes:["us"],matchNames:["99 cents only"],matchTags:["shop/convenience","shop/department_store","shop/supermarket"],tags:{brand:"99 Cents Only Stores","brand:wikidata":"Q4646294","brand:wikipedia":"en:99 Cents Only Stores",name:"99 Cents Only Stores",shop:"variety_store"}},"shop/variety_store|Action":{matchTags:["shop/supermarket"],tags:{brand:"Action","brand:wikidata":"Q2634111","brand:wikipedia":"nl:Action (winkel)",name:"Action",shop:"variety_store"}},"shop/variety_store|B&M Bargains":{tags:{brand:"B&M Bargains","brand:wikidata":"Q4836931","brand:wikipedia":"en:B & M",name:"B&M Bargains",shop:"variety_store"}},"shop/variety_store|Big Bazar":{tags:{brand:"Big Bazar","brand:wikidata":"Q15873104","brand:wikipedia":"nl:Big Bazar",name:"Big Bazar",shop:"variety_store"}},"shop/variety_store|Centrakor":{countryCodes:["fr"],tags:{brand:"Centrakor",name:"Centrakor",shop:"variety_store"}},"shop/variety_store|Dollar General":{countryCodes:["us"],matchTags:["shop/convenience","shop/department_store","shop/supermarket"],tags:{brand:"Dollar General","brand:wikidata":"Q145168","brand:wikipedia":"en:Dollar General",name:"Dollar General",shop:"variety_store"}},"shop/variety_store|Dollar Tree":{matchTags:["shop/convenience","shop/department_store","shop/supermarket"],tags:{brand:"Dollar Tree","brand:wikidata":"Q5289230","brand:wikipedia":"en:Dollar Tree",name:"Dollar Tree",shop:"variety_store"}},"shop/variety_store|Dollarama":{countryCodes:["ca"],tags:{brand:"Dollarama","brand:wikidata":"Q3033947","brand:wikipedia":"en:Dollarama",name:"Dollarama",shop:"variety_store"}},"shop/variety_store|Family Dollar":{matchTags:["shop/convenience","shop/department_store","shop/supermarket"],tags:{brand:"Family Dollar","brand:wikidata":"Q5433101","brand:wikipedia":"en:Family Dollar",name:"Family Dollar",shop:"variety_store"}},"shop/variety_store|Five Below":{tags:{brand:"Five Below","brand:wikidata":"Q5455836","brand:wikipedia":"en:Five Below",name:"Five Below",shop:"variety_store"}},"shop/variety_store|Fix Price":{tags:{brand:"Fix Price","brand:wikidata":"Q4038791","brand:wikipedia":"ru:Fix Price (сеть магазинов)",name:"Fix Price",shop:"variety_store"}},"shop/variety_store|GiFi":{tags:{brand:"GiFi","brand:wikidata":"Q3105439","brand:wikipedia":"fr:Gifi",name:"GiFi",shop:"variety_store"}},"shop/variety_store|Home Bargains":{matchTags:["shop/supermarket"],tags:{brand:"Home Bargains","brand:wikidata":"Q5888229","brand:wikipedia":"en:Home Bargains",name:"Home Bargains",shop:"variety_store"}},"shop/variety_store|Mäc-Geiz":{countryCodes:["de"],tags:{brand:"Mäc-Geiz","brand:wikidata":"Q1957126","brand:wikipedia":"de:Mäc-Geiz",name:"Mäc-Geiz",shop:"variety_store"}},"shop/variety_store|NOZ":{countryCodes:["fr"],tags:{brand:"NOZ","brand:wikidata":"Q3345688","brand:wikipedia":"fr:Noz",name:"NOZ",shop:"variety_store"}},"shop/variety_store|Poundland":{countryCodes:["gb"],tags:{brand:"Poundland","brand:wikidata":"Q1434528","brand:wikipedia":"en:Poundland",name:"Poundland",shop:"variety_store"}},"shop/variety_store|Poundstretcher":{countryCodes:["gb"],tags:{brand:"Poundstretcher","brand:wikidata":"Q7235675","brand:wikipedia":"en:Poundstretcher",name:"Poundstretcher",shop:"variety_store"}},"shop/variety_store|Poundworld":{tags:{brand:"Poundworld","brand:wikidata":"Q16967516","brand:wikipedia":"en:Poundworld",name:"Poundworld",shop:"variety_store"}},"shop/variety_store|Roses":{tags:{brand:"Roses","brand:wikidata":"Q7368644","brand:wikipedia":"en:Roses (store)",name:"Roses",shop:"variety_store"}},"shop/variety_store|TEDi":{countryCodes:["at","de","es","hr","si","sk"],tags:{brand:"TEDi","brand:wikidata":"Q1364603","brand:wikipedia":"de:TEDi",name:"TEDi",shop:"variety_store"}},"shop/variety_store|Tokmanni":{countryCodes:["fi"],tags:{brand:"Tokmanni","brand:wikidata":"Q13423470","brand:wikipedia":"fi:Tokmanni",name:"Tokmanni",shop:"variety_store"}},"shop/variety_store|Wilko":{countryCodes:["gb"],tags:{brand:"Wilko","brand:wikidata":"Q8002536","brand:wikipedia":"en:Wilko (retailer)",name:"Wilko",shop:"variety_store"}},"shop/variety_store|キャンドゥ":{countryCodes:["jp"],tags:{brand:"キャンドゥ","brand:en":"CAN DO","brand:ja":"キャンドゥ","brand:wikidata":"Q11297367","brand:wikipedia":"ja:キャンドゥ",name:"キャンドゥ","name:en":"CAN DO","name:ja":"キャンドゥ",shop:"variety_store"}},"shop/variety_store|セリア":{countryCodes:["jp"],tags:{brand:"セリア","brand:en":"Seria","brand:ja":"セリア","brand:wikidata":"Q11314509","brand:wikipedia":"ja:セリア (100円ショップ)",name:"セリア","name:en":"Seria","name:ja":"セリア",shop:"variety_store"}},"shop/variety_store|ダイソー":{countryCodes:["jp"],matchNames:["ザ・ダイソー"],tags:{brand:"ダイソー","brand:en":"Daiso","brand:ja":"ダイソー","brand:wikidata":"Q866991","brand:wikipedia":"ja:大創産業",name:"ダイソー","name:en":"Daiso","name:ja":"ダイソー",shop:"variety_store"}},"shop/variety_store|ダイレックス":{countryCodes:["jp"],matchTags:["shop/supermarket"],tags:{brand:"ダイレックス","brand:en":"Direx","brand:ja":"ダイレックス","brand:wikidata":"Q11317051","brand:wikipedia":"ja:ダイレックス (ディスカウントストア)",name:"ダイレックス","name:en":"Direx","name:ja":"ダイレックス",shop:"variety_store"}},"shop/variety_store|トライアル":{countryCodes:["jp"],matchTags:["shop/supermarket"],tags:{brand:"トライアル","brand:en":"Trial","brand:ja":"トライアル","brand:wikidata":"Q11321723","brand:wikipedia":"ja:トライアルカンパニー",name:"トライアル","name:en":"Trial","name:ja":"トライアル",shop:"variety_store"}},"shop/variety_store|ドン・キホーテ":{countryCodes:["jp"],matchTags:["shop/supermarket"],tags:{brand:"ドン・キホーテ","brand:en":"Don Quijote","brand:ja":"ドン・キホーテ","brand:wikidata":"Q1185381","brand:wikipedia":"ja:ドン・キホーテ (企業)",name:"ドン・キホーテ","name:en":"Don Quijote","name:ja":"ドン・キホーテ",opening_hours:"24/7",shop:"variety_store",short_name:"ドンキ","short_name:en":"Donki","short_name:ja":"ドンキ"}},"shop/video_games|EB Games":{tags:{brand:"EB Games","brand:wikidata":"Q4993686","brand:wikipedia":"en:EB Games",name:"EB Games",shop:"video_games"}},"shop/video_games|Game":{countryCodes:["gb"],tags:{brand:"Game","brand:wikidata":"Q5519813","brand:wikipedia":"en:Game (retailer)",name:"Game",shop:"video_games"}},"shop/video_games|GameStop":{tags:{brand:"GameStop","brand:wikidata":"Q202210","brand:wikipedia":"en:GameStop",name:"GameStop",shop:"video_games"}},"shop/video_games|Micromania":{countryCodes:["fr"],tags:{brand:"Micromania","brand:wikidata":"Q3312221","brand:wikipedia":"en:Micromania (video game retailer)",name:"Micromania",shop:"video_games"}},"shop/video|Blockbuster":{tags:{brand:"Blockbuster","brand:wikidata":"Q884711","brand:wikipedia":"en:Blockbuster LLC",name:"Blockbuster",shop:"video"}},"shop/video|Family Video":{tags:{brand:"Family Video","brand:wikidata":"Q5433297","brand:wikipedia":"en:Family Video",name:"Family Video",shop:"video"}},"shop/video|TSUTAYA":{nomatch:["shop/books|TSUTAYA","shop/music|TSUTAYA"],tags:{brand:"TSUTAYA","brand:wikidata":"Q5193457","brand:wikipedia":"ja:カルチュア・コンビニエンス・クラブ",name:"TSUTAYA",shop:"video"}},"shop/video|ゲオ":{countryCodes:["jp"],matchNames:["geo"],tags:{brand:"GEO","brand:ja":"GEO","brand:wikidata":"Q5533938","brand:wikipedia":"ja:ゲオ",name:"ゲオ","name:en":"GEO","name:ja":"ゲオ",shop:"video"}},"shop/watches|Fossil":{tags:{brand:"Fossil","brand:wikidata":"Q356212","brand:wikipedia":"en:Fossil Group",name:"Fossil",shop:"watches"}},"shop/watches|Swatch":{tags:{brand:"Swatch","brand:wikidata":"Q573422","brand:wikipedia":"en:Swatch",name:"Swatch",shop:"watches"}},"shop/wholesale|BJ's Wholesale Club":{matchTags:["shop/department_store"],tags:{brand:"BJ's Wholesale Club","brand:wikidata":"Q4835754","brand:wikipedia":"en:BJ's Wholesale Club",name:"BJ's Wholesale Club",operator:"BJ's Wholesale Club",shop:"wholesale"}},"shop/wholesale|Costco":{matchNames:["costco wholesale"],matchTags:["shop/department_store"],nomatch:["amenity/fuel|Costco Gasoline","amenity/pharmacy|Costco Pharmacy"],tags:{brand:"Costco","brand:wikidata":"Q715583","brand:wikipedia":"en:Costco",name:"Costco",operator:"Costco",shop:"wholesale"}},"shop/wholesale|Makro":{matchTags:["shop/department_store"],tags:{brand:"Makro","brand:wikidata":"Q704606","brand:wikipedia":"en:Makro",name:"Makro",shop:"wholesale"}},"shop/wholesale|Metro":{matchTags:["shop/department_store"],nomatch:["amenity/bank|Metrobank","shop/supermarket|Metro~(Canada)"],tags:{brand:"Metro","brand:wikidata":"Q13610282","brand:wikipedia":"en:Metro Cash and Carry",name:"Metro",shop:"wholesale"}},"shop/wholesale|Sam's Club":{matchTags:["shop/department_store"],nomatch:["amenity/fuel|Sam's Club"],tags:{brand:"Sam's Club","brand:wikidata":"Q1972120","brand:wikipedia":"en:Sam's Club",name:"Sam's Club",operator:"Walmart","operator:wikidata":"Q483551","operator:wikipedia":"en:Walmart",shop:"wholesale"}},"shop/wholesale|コストコ":{countryCodes:["jp"],matchTags:["shop/department_store"],tags:{brand:"コストコ","brand:en":"Costco","brand:ja":"コストコ","brand:wikidata":"Q715583","brand:wikipedia":"ja:コストコ",name:"コストコ","name:en":"Costco","name:ja":"コストコ",operator:"コストコホールセールジャパン株式会社","operator:en":"Costco Wholesale Japan Co., Ltd.",shop:"wholesale"}},"tourism/hotel|B&B Hôtel":{tags:{brand:"B&B Hôtel","brand:wikidata":"Q794939","brand:wikipedia":"en:B&B Hotels",name:"B&B Hôtel",tourism:"hotel"}},"tourism/hotel|Best Western":{nomatch:["tourism/hotel|Best Western Plus"],tags:{brand:"Best Western","brand:wikidata":"Q830334","brand:wikipedia":"en:Best Western",name:"Best Western",tourism:"hotel"}},"tourism/hotel|Best Western Plus":{nomatch:["tourism/hotel|Best Western"],tags:{brand:"Best Western","brand:wikidata":"Q830334","brand:wikipedia":"en:Best Western",name:"Best Western Plus",tourism:"hotel"}},"tourism/hotel|Campanile":{nomatch:["amenity/restaurant|Campanile"],tags:{brand:"Campanile","brand:wikidata":"Q2412064","brand:wikipedia":"fr:Campanile (chaîne d'hôtels)",name:"Campanile",tourism:"hotel"}},"tourism/hotel|Candlewood Suites":{tags:{brand:"Candlewood Suites","brand:wikidata":"Q5032010","brand:wikipedia":"en:Candlewood Suites",name:"Candlewood Suites",tourism:"hotel"}},"tourism/hotel|Comfort Inn":{countryCodes:["ca","gb","us"],nomatch:["tourism/hotel|Comfort Suites"],tags:{brand:"Comfort Inn","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Comfort Inn",tourism:"hotel"}},"tourism/hotel|Comfort Inn & Suites":{tags:{brand:"Comfort Inn & Suites","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Comfort Inn & Suites",tourism:"hotel"}},"tourism/hotel|Comfort Suites":{nomatch:["tourism/hotel|Comfort Inn"],tags:{brand:"Comfort Suites","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Comfort Suites",tourism:"hotel"}},"tourism/hotel|Country Inn & Suites":{tags:{brand:"Country Inn & Suites","brand:wikidata":"Q5177332","brand:wikipedia":"en:Country Inns & Suites",name:"Country Inn & Suites",tourism:"hotel"}},"tourism/hotel|Courtyard by Marriott":{matchNames:["courtyard marriott"],tags:{brand:"Courtyard by Marriott","brand:wikidata":"Q1053170","brand:wikipedia":"en:Courtyard by Marriott",name:"Courtyard by Marriott",tourism:"hotel"}},"tourism/hotel|Crowne Plaza":{tags:{brand:"Crowne Plaza","brand:wikidata":"Q2746220","brand:wikipedia":"en:Crowne Plaza",name:"Crowne Plaza",tourism:"hotel"}},"tourism/hotel|Days Inn":{tags:{brand:"Days Inn","brand:wikidata":"Q1047239","brand:wikipedia":"en:Days Inn",name:"Days Inn",operator:"Wyndham Hotels and Resorts","operator:wikidata":"Q8040120","operator:wikipedia":"en:Wyndham Hotels and Resorts",tourism:"hotel"}},"tourism/hotel|Embassy Suites":{tags:{brand:"Embassy Suites","brand:wikidata":"Q5369524","brand:wikipedia":"en:Embassy Suites by Hilton",name:"Embassy Suites",tourism:"hotel"}},"tourism/hotel|Extended Stay America":{tags:{brand:"Extended Stay America","brand:wikidata":"Q5421850","brand:wikipedia":"en:Extended Stay America",name:"Extended Stay America",tourism:"hotel"}},"tourism/hotel|Fairfield Inn":{matchNames:["fairfield inn & suites","fairfield inn and suites"],tags:{brand:"Fairfield Inn","brand:wikidata":"Q5430314","brand:wikipedia":"en:Fairfield Inn by Marriott",name:"Fairfield Inn",tourism:"hotel"}},"tourism/hotel|Formule 1":{countryCodes:["fr"],tags:{brand:"Formule 1","brand:wikidata":"Q1630895","brand:wikipedia":"en:Hotel Formule 1",name:"Formule 1",tourism:"hotel"}},"tourism/hotel|Grand Hyatt":{tags:{brand:"Grand Hyatt","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Grand Hyatt",operator:"Hyatt",tourism:"hotel"}},"tourism/hotel|Hampton":{matchNames:["hampton inn","hampton inn & suites","hampton inn and suites"],tags:{alt_name:"Hampton Inn",brand:"Hampton","brand:wikidata":"Q5646230","brand:wikipedia":"en:Hampton by Hilton",name:"Hampton",tourism:"hotel"}},"tourism/hotel|Hilton":{tags:{brand:"Hilton","brand:wikidata":"Q598884","brand:wikipedia":"en:Hilton Hotels & Resorts",name:"Hilton",tourism:"hotel"}},"tourism/hotel|Hilton Garden Inn":{tags:{brand:"Hilton Garden Inn","brand:wikidata":"Q1162859","brand:wikipedia":"en:Hilton Garden Inn",name:"Hilton Garden Inn",tourism:"hotel"}},"tourism/hotel|Holiday Inn":{nomatch:["tourism/hotel|Holiday Inn Express"],tags:{brand:"Holiday Inn","brand:wikidata":"Q2717882","brand:wikipedia":"en:Holiday Inn",name:"Holiday Inn",tourism:"hotel"}},"tourism/hotel|Holiday Inn Express":{nomatch:["tourism/hotel|Holiday Inn"],tags:{brand:"Holiday Inn Express","brand:wikidata":"Q5880423","brand:wikipedia":"en:Holiday Inn Express",name:"Holiday Inn Express",tourism:"hotel"}},"tourism/hotel|Holiday Inn Express & Suites":{tags:{brand:"Holiday Inn Express & Suites","brand:wikidata":"Q5880423","brand:wikipedia":"en:Holiday Inn Express",name:"Holiday Inn Express & Suites",tourism:"hotel"}},"tourism/hotel|Homewood Suites":{countryCodes:["ca","us"],tags:{brand:"Homewood Suites","brand:wikidata":"Q5890701","brand:wikipedia":"en:Homewood Suites by Hilton",name:"Homewood Suites",tourism:"hotel"}},"tourism/hotel|Hyatt":{tags:{brand:"Hyatt","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Hyatt",operator:"Hyatt",tourism:"hotel"}},"tourism/hotel|Hyatt Centric":{tags:{brand:"Hyatt Centric","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Hyatt Centric",operator:"Hyatt",tourism:"hotel"}},"tourism/hotel|Hyatt House":{countryCodes:["us"],tags:{brand:"Hyatt House","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Hyatt House",operator:"Hyatt",tourism:"hotel"}},"tourism/hotel|Hyatt Place":{tags:{brand:"Hyatt","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Hyatt Place",tourism:"hotel"}},"tourism/hotel|Hyatt Regency":{tags:{brand:"Hyatt Regency","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Hyatt Regency",operator:"Hyatt",tourism:"hotel"}},"tourism/hotel|Ibis":{matchNames:["hotel ibis","ibis hotel"],tags:{brand:"Ibis","brand:wikidata":"Q920166","brand:wikipedia":"en:Ibis (hotel)",name:"Ibis",tourism:"hotel"}},"tourism/hotel|Ibis Budget":{tags:{brand:"Ibis Budget","brand:wikidata":"Q1458135","brand:wikipedia":"en:Ibis Budget",name:"Ibis Budget",tourism:"hotel"}},"tourism/hotel|Ibis Styles":{tags:{brand:"Ibis Styles","brand:wikidata":"Q3147425","brand:wikipedia":"en:Ibis Styles",name:"Ibis Styles",tourism:"hotel"}},"tourism/hotel|Kyriad":{countryCodes:["fr"],tags:{brand:"Kyriad","brand:wikidata":"Q11751808","brand:wikipedia":"pl:Kyriad",name:"Kyriad",tourism:"hotel"}},"tourism/hotel|La Quinta":{matchNames:["la quinta inn & suites","la quinta inn and suites","la quinta inns & suites","la quinta inns and suites"],tags:{brand:"La Quinta","brand:wikidata":"Q6464734","brand:wikipedia":"en:La Quinta Inns & Suites",name:"La Quinta",operator:"Wyndham Hotels and Resorts","operator:wikidata":"Q8040120","operator:wikipedia":"en:Wyndham Hotels and Resorts",tourism:"hotel"}},"tourism/hotel|Marriott":{tags:{brand:"Marriott","brand:wikidata":"Q1141173","brand:wikipedia":"en:Marriott International",name:"Marriott",tourism:"hotel"}},"tourism/hotel|Mercure":{tags:{brand:"Mercure","brand:wikidata":"Q1709809","brand:wikipedia":"en:Mercure (hotel)",name:"Mercure",tourism:"hotel"}},"tourism/hotel|Novotel":{tags:{brand:"Novotel","brand:wikidata":"Q420545","brand:wikipedia":"en:Novotel",name:"Novotel",tourism:"hotel"}},"tourism/hotel|Park Hyatt":{tags:{brand:"Park Hyatt","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Park Hyatt",operator:"Hyatt",tourism:"hotel"}},"tourism/hotel|Premier Inn":{tags:{brand:"Premier Inn","brand:wikidata":"Q2108626","brand:wikipedia":"en:Premier Inn",name:"Premier Inn",tourism:"hotel"}},"tourism/hotel|Première Classe":{tags:{brand:"Première Classe","brand:wikidata":"Q5964551","brand:wikipedia":"en:Hôtel Première Classe",name:"Première Classe",tourism:"hotel"}},"tourism/hotel|Quality Inn":{tags:{brand:"Quality Inn","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Quality Inn",tourism:"hotel"}},"tourism/hotel|Quality Inn & Suites":{tags:{brand:"Quality Inn & Suites","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Quality Inn & Suites",tourism:"hotel"}},"tourism/hotel|Ramada":{tags:{brand:"Ramada","brand:wikidata":"Q1502859","brand:wikipedia":"en:Ramada",name:"Ramada",operator:"Wyndham Hotels and Resorts","operator:wikidata":"Q8040120","operator:wikipedia":"en:Wyndham Hotels and Resorts",tourism:"hotel"}},"tourism/hotel|Red Roof Inn":{countryCodes:["us"],tags:{brand:"Red Roof Inn","brand:wikidata":"Q7304949","brand:wikipedia":"en:Red Roof Inn",name:"Red Roof Inn",tourism:"hotel"}},"tourism/hotel|Renaissance Hotel":{tags:{brand:"Renaissance Hotels","brand:wikidata":"Q2143252","brand:wikipedia":"en:Renaissance Hotels",name:"Renaissance Hotel",operator:"Marriott International","operator:wikidata":"Q1141173","operator:wikipedia":"en:Marriott International",tourism:"hotel"}},"tourism/hotel|Residence Inn":{tags:{brand:"Residence Inn","brand:wikidata":"Q7315394","brand:wikipedia":"en:Residence Inn by Marriott",name:"Residence Inn",tourism:"hotel"}},"tourism/hotel|Sheraton":{tags:{brand:"Sheraton","brand:wikidata":"Q634831","brand:wikipedia":"en:Sheraton Hotels and Resorts",name:"Sheraton",tourism:"hotel"}},"tourism/hotel|Sleep Inn":{tags:{brand:"Sleep Inn","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Sleep Inn",tourism:"hotel"}},"tourism/hotel|Staybridge Suites":{tags:{brand:"Staybridge Suites","brand:wikidata":"Q7605116","brand:wikipedia":"en:Staybridge Suites",name:"Staybridge Suites",tourism:"hotel"}},"tourism/hotel|Travelodge":{tags:{brand:"Travelodge","brand:wikidata":"Q7836087","brand:wikipedia":"en:Travelodge",name:"Travelodge",operator:"Wyndham Hotels and Resorts","operator:wikidata":"Q8040120","operator:wikipedia":"en:Wyndham Hotels and Resorts",tourism:"hotel"}},"tourism/hotel|W Hotels":{tags:{brand:"W Hotels","brand:wikidata":"Q7958488","brand:wikipedia":"en:W Hotels",name:"W Hotels",short_name:"W",tourism:"hotel"}},"tourism/hotel|東横イン":{countryCodes:["jp"],tags:{brand:"東横イン","brand:en":"Toyoko Inn","brand:ja":"東横イン","brand:wikidata":"Q1320541","brand:wikipedia":"en:Toyoko Inn",name:"東横イン","name:en":"Toyoko Inn","name:ja":"東横イン",tourism:"hotel"}},"tourism/motel|Econo Lodge":{tags:{brand:"Econo Lodge","brand:wikidata":"Q5333330","brand:wikipedia":"en:Econo Lodge",name:"Econo Lodge",tourism:"motel"}},"tourism/motel|Motel 6":{countryCodes:["ca","us"],tags:{brand:"Motel 6","brand:wikidata":"Q2188884","brand:wikipedia":"en:Motel 6",name:"Motel 6",tourism:"motel"}},"tourism/motel|Rodeway Inn":{tags:{brand:"Rodeway Inn","brand:wikidata":"Q7356709","brand:wikipedia":"en:Rodeway Inn",name:"Rodeway Inn",tourism:"motel"}},"tourism/motel|Super 8":{tags:{brand:"Super 8","brand:wikidata":"Q5364003","brand:wikipedia":"en:Super 8 Motels",name:"Super 8",operator:"Wyndham Hotels and Resorts","operator:wikidata":"Q8040120","operator:wikipedia":"en:Wyndham Hotels and Resorts",tourism:"motel"}}};
65079 var keepTags = ["^amenity/bank$","^amenity/bicycle_rental$","^amenity/bureau_de_change$","^amenity/cafe$","^amenity/car_rental$","^amenity/car_sharing$","^amenity/charging_station$","^amenity/cinema$","^amenity/dentist$","^amenity/fast_food$","^amenity/fuel$","^amenity/ice_cream$","^amenity/money_transfer$","^amenity/payment_(centre|terminal)$","^amenity/pharmacy$","^amenity/post_(box|office)$","^amenity/public_bookcase$","^amenity/restaurant$","^amenity/social_(centre|facility)$","^amenity/vending_machine$","^amenity/veterinary$","^leisure/fitness_centre$","^shop/(?!(yes|no|gas|convenience;gas|laundry|lottery|mall))","^tourism/(h|m)otel$"];
65080 var discardKeys = ["^amenity/bank\\|(bank zachodni|bz) wbk$","^amenity/bank\\|.*sparkasse.*$","^amenity/bank\\|bank spółdzielczy$","^amenity/bank\\|pko$","^amenity/bank\\|volks- und raiffeisenbank$","^amenity/bank\\|volksbank( |-)raiffeisenbank$","^amenity/bank\\|vr( |-)bank$","^amenity/cafe\\|(kiosque(\\sà)?\\scafé|caf(e|é)\\sexpress|встреча|рандеву|чайхана|жемчужина)$","^amenity/cinema\\|октябрь$","^amenity/fast_food\\|(ali\\sbaba|antalya|asia\\s(bistro|imbiss|wok)|berlin\\sdöner|city\\s(grill|pizza)|kfc/taco\\sbell)$","^amenity/fast_food\\|(pizza\\s(house|time))$","^amenity/fuel\\|gnv|gpl|posto|spbu|جایگاه\\scng$","^amenity/pharmacy\\|(adler|bahnhof|brunnen|burg|bären|engel|hirsch|hubertus|kur|linden|löwen)(-| )?apotheke$","^amenity/pharmacy\\|(centrum|farm(a|á)cia\\s(central(e)?|comunale))$","^amenity/pharmacy\\|(marien|markt|neue|park|rathaus|rats|rosen|schloss|sonnen|stadt|stern)(-| )?apotheke$","^amenity/pharmacy\\|(айболит|арніка)$","^amenity/pharmacy\\|pharmacie\\s(centrale|comunale|de\\s(l'hôtel\\sde\\sville|la\\s(gare|mairie|poste))|du\\s(centre|marché|parc))$","^amenity/restaurant\\|((da|la|las|el)\\s|delphi|deutsches\\shaus|dionysos|dorfkrug|europa|frohsinn|((gasthaus|schwarzer)\\s)?adler)","^amenity/restaurant\\|(ali\\sbaba|adria|akropolis|aroma|asia|athen|athos|bahnhof|bamboo|bären|bella\\s(vista|napoli)|belvedere)","^amenity/restaurant\\|(canteen|cantina|capri|carpe\\sdiem|casa\\s?(blanca|mia)|casino|china\\s(buffet|garden|house|king|star|town|wok))","^amenity/restaurant\\|(gasthaus\\slöwen|golden\\sdragon|great\\swall|grüner\\sbaum|hellas|hirsch(en)?|hong\\skong|ichiban|jade\\sgarden)","^amenity/restaurant\\|(jägerhof|kirchenwirt|kreta|kreuz|krone|l'|lamm|le\\sbistrot|linde|lindenhof|little\\s(italy|india)|los\\samigos)","^amenity/restaurant\\|(lotus|löwen|maharaja|mamma\\smia|mandarin|marco\\spolo|mediterraneo|mensa|milano|mykonos|mythos|namaste|napoli)","^amenity/restaurant\\|(new\\schina|oasis|ochsen|olympia|osaka|paradise|parrilla|peking|pho|pinocchio)","^amenity/restaurant\\|(pizza\\shouse|pizz(a|e)ria|pizza\\sking|pomodoro|portofino|poseidon|ratskeller|rhodos|ristorante\\s)","^amenity/restaurant\\|(roma|rose|rössl(e|i)|saffron|saigon|sakura|san\\smarco|santorini|schützenhaus|shalimar|shanghai|sonne|sphinx)","^amenity/restaurant\\|(sportheim|sternen|syrtaki|taj\\smahal|taste\\sof\\sindia|the\\skitchen|toscana|tokyo|traube)","^amenity/restaurant\\|(waldschänke|wok|zorbas|(zum|zur)\\s)","^amenity/social_facility\\|dom pomocy społecznej$","^amenity/social_facility\\|maison de retraite$","^amenity/social_facility\\|safe haven$","^shop/(convenience|kiosk)\\|(777|bp|esso|exxon|mobil|shell)$","^shop/bakery\\|(bäckerei\\s)?müller","^shop/bakery\\|backshop$","^shop/bakery\\|schneider$","^shop/butcher\\|butcher$","^shop/clothes\\|трикотаж$","^shop/convenience\\|(августина|весна|визит|ветеран|домашний)$","^shop/convenience\\|(калинка|колобок|колос(ок)?|ласточка|лидер|любимый|людмила|люкс)$","^shop/convenience\\|(мечта|мираж|белорусские продукты|продукты 24|натали|надежда)$","^shop/convenience\\|(олимп|престиж|подсолнух|росинка|ромашка|родник|родны кут|рассвет)$","^shop/convenience\\|(семейный|спутник|солнечный|светлана)$","^shop/convenience\\|(южный|эконом|шанс|чайка|центральный|хороший|фаворит|татьяна)$","^shop/convenience\\|milk bar$","^shop/convenience\\|юлия$","^shop/florist\\|мир цветов$","^shop/frame\\|rumah\\spenduduk$","^shop/hairdresser\\|haarwerk$","^shop/hairdresser\\|стиль|локон$","^shop/hardware\\|(всё для дома|1000 мелочей)$","^shop/money_transfer|mobil(e)?\\smoney$","^shop/optician\\|vision\\splus$","^shop/supermarket\\|famiglia cooperativa$","^shop/supermarket\\|семейный$","^shop/tailor\\|couture\\s?(dame|homme|mixte)?$","^tourism/(h|m)otel\\|budget inn$","^tourism/hotel\\|(belvedere|krone|victoria)","^tourism/hotel\\|(central|city|europa|grand|palace|park|royal)\\s?hotel$","^tourism/hotel\\|h(o|ô)tel\\s(astoria|central|europa|krone|panorama|plaza|royal|victoria|(zur\\s)?post|de france)$"];
65081 var discardNames = ["\\(historical\\)","^((drummed|independent) )?(cng|filling|fuel|gas|lpg|petrol)(\\s(station|pump))?$","^((le|the) )?salo(o)?n( de)?( coiffure| fryzjerski| beauté)?( homme| dame)?$","^((горячий|свежий) )?хлеб(ница)?$","^((разливное|живое) )?пиво$","^(beer|convenience|corner|general|liquor|variety)(\\sstore)?$","^(bureau de |)change$","^(buzón\\sde\\s)?correos$","^(cl(i|í)nica )?dental$","^(cl(i|í)nica )?veterinari(a|o)$","^(clinique )?vétérinaire$","^(coffee|pet|vulcanizing|gift)(\\sshop)?$","^(hof|dorf)laden$","^(h|m)otel$","^(sklep )?(spożywcz(y|o))(-przemysłowy)?$","^(strom|milch)tankstelle$","^(the )?barber(ia|shop|\\sshop)?$","^(é|e)pic(erie|ier)$","^(агзс|азс|мережа азс приват|магазин при азс)$","^(газовая\\s)?заправка$","^(летнее )?кафе(терий)?$","^(парикмахерская|персона|перукарня)$","^(проездные )?билет(ы)?$","^(свежее )?мяс(ной|о)$","^(спец|детская|женская)?\\s?одежда$","^agencja pocztowa$","^alimentación$","^alimentar(a|i)$","^alimentation\\sgénérale$","^alte (apotheke|post)$","^apotek(a|et)$","^apotheke( am markt)?$","^apteka$","^atelier de couture$","^atm$","^auto serwis$","^baguette$","^bakery$","^bakkal$","^bank$","^baqala$","^bar (centrale|kafe)$","^bar$","^barbea?r(i|í)a$","^bazar$","^benzina$","^berber$","^bike sharing$","^biletomat$","^bistro$","^blumen(laden)?$","^bo(u)?tique$","^bodega$","^borrachar(i|í)a$","^botica$","^botiller(i|í)a$","^boucherie(\\scharcuterie)?$","^boulangerie(\\sp(a|â)tisserie)?$","^bread$","^briefkasten$","^bureau de poste$","^bäckerei$","^büfé$","^cabinet dentaire$","^caf(e|é) de(s)? (la )?(place|sports|gare)$","^caf(e|é)(t(e|é)r(i|í)a)?( )?(central)?$","^cajero\\sautomatico\\sbancared$","^carnicer(i|í)a$","^central$","^centro naturista$","^chifa$","^chinese restaurant$","^cine(ma)?$","^cleaners$","^co-operative$","^coffee$","^coiff(eur|ure)( homme)?$","^colmado$","^comedor$","^comida china$","^commercial hotel$","^consultorio (dental|odontologico)$","^credit union$","^currency exchange$","^d(ö|o)ner(\\skebab)?$","^delikatesy$","^dental(\\s(clinic|surgery))?$","^dentist(a|e)?$","^drinks$","^droguer(i|í)a$","^dép(ô|o)t de gaz$","^dépanneur$","^eczane$","^edicola$","^eiscaf(e|é)(\\s(dolomiti|venezia))?$","^eisdiele","^el árbol$","^estanco$","^euroshop$","^exchange$","^fagyizó$","^family dentistry$","^farm(a|à|á)ci(a|à|á|e)$","^fast food$","^ferramenta$","^ferreter(i|í)a$","^figaro$","^fish (and|&) chips$","^fleuriste$","^florărie$","^food court$","^fotocopias$","^fri(t|z)erie$","^fris(eu|ö)r$","^frituur$","^frutería$","^fryzjer$","^funeraria$","^game$","^garage\\s?(moto|auto)?$","^gasoline(ra)?$","^gast(haus|hof)\\s(krone|(zur)\\s(linde|post))?$","^getränkemarkt$","^gimnasio( municipal)?$","^gomer(i|í)a$","^gym(nase|nasium)?$","^gyógyszertár$","^haar(genau|monie|scharf)$","^hair\\s?(design|lounge|salon|dresser)$","^hardware$","^home\\sutensils$","^hospedaje$","^húsbolt$","^imbiss$","^indipend\\.$","^internet cafe$","^istanbul(\\skebab)?$","^kaf(e|é)$","^kantine$","^kantor pos$","^kantor$","^kebab(ai|\\shouse)?$","^kios(co|k|ko|que)?$","^kisbolt$","^kitchen$","^księgarnia$","^kwiaciarnia$","^kwiaty$","^kулинария$","^ladestation$","^librairie$","^librer(i|í)a$","^libro$","^licorer(i|í)a$","^ljekarna$","^lombard$","^lot 1$","^lubricentro$","^lékárna$","^maceller(i|í)a$","^magazin","^mailbox$","^maison$","^market$","^mercado( municipal)?$","^mercerie$","^mini\\s?(abc|market|mart|mercado|pump)","^máquina de tickets$","^mécanique$","^nagelstudio$","^nails$","^no name$","^obuwie$","^odontologia$","^oplaadpunt$","^opti(c|k)a$","^optical center$","^optyk$","^outlet$","^pa(r|cz)komat$","^pac?k(etbox|station)$","^padaria$","^panader(i|í)a$","^pancake house$","^panificio$","^panorama$","^papeler(i|í)a$","^parafarmacia$","^parduotuvė$","^parkscheinautomat$","^parquímetro$","^peluquer(i|í)a$","^pharmac(ie|y)$","^piekarnia$","^piscine$","^pizz(eri)?a$","^po(s|š)t(a|e|o)$","^poczta$","^poissonnerie$","^post\\s?(agentur|filiale|partner|office|stelle)?$","^potraviny$","^prehrana$","^pressing$","^pulper(i|í)a$","^punkt apteczny$","^quin?cai?llerie$","^quiosco$","^rent a car$","^repuestos automotrices$","^restaurant(e)?(\\suniversit(ário|aire))?$","^rzeźnik$","^sale$","^salle (omnisport|polyvalente)$","^salão de beleza$","^sari-sari store$","^sb\\stank$","^second\\shand$","^shops?$","^sklep$","^smíšené zboží$","^snacks?$","^souvenir(s)?( shop)?$","^spätkauf$","^stacja (benzynowa|paliw)$","^stadium$","^stadtbäckerei$","^station service$","^steak house$","^stores?$","^super ?america","^super\\s?m(arket|ercado)$","^sushi(\\s(bar|shop))?$","^taba(c|k)(os|chi)?(\\strafi(k|c))?$","^tabac\\spresse$","^tabaccher(i|í)a$","^tacos$","^taller( mecánico)?$","^tankstelle$","^tattoo$","^taverna$","^tea stall$","^tesha$","^tienda(\\sde\\s(barrio|abarrotes))?$","^toko pakaian$","^trafik(a)?$","^trattoria$","^trinkhalle$","^télécentre$","^ufficio postale$","^urząd pocztowy$","^vegyesbolt$","^venezia$","^verduler(i|í)a$","^večerka$","^virágbolt$","^vulcanizare$","^warung$","^warzywniak$","^windmill$","^wulkanizacja$","^zahnarzt$","^zigarettenautomat$","^zöldséges$","^änderungsschneiderei$","^élelmiszer(bolt)?$","^φαρμακείο$","^авто(рынок|ремонт|сервис|электрик|запчасти(ни)?)?$","^автома(г|газин|стерская)?$","^автосервис\\+шиномонтаж$","^аптека","^аптечный (пункт|склад)$","^ателье$","^бассейн$","^бистро$","^булочная$","^буфет$","^ветеринарная клиника$","^ветлечебница$","^вс(е|ё) для дома$","^вулканизация$","^газ$","^главпочтамт$","^гостиница$","^детский дом$","^закусочная$","^замена масла$","^золото(й)?$","^зоо(магазин|товары)$","^игрушки$","^канцтовары$","^каравай$","^касса$","^квіти$","^киоск$","^книги$","^кофе(йня|\\sхауз)$","^крамниця$","^купец$","^ломбард$","^маркет$","^меб(ель|лі)$","^метан$","^минимаркет|мини-маркет$","^мороженое$","^мясная лавка$","^обувь$","^овощи(\\sи\\s|-)фрукты$","^октан$","^оптика$","^орхидея$","^памятники$","^пекарня$","^пельменная$","^печать$","^пиццерия$","^по(чт|шт|щ)а$","^подарки$","^почтовое отделение$","^пресса$","^продукт(ы|и)?$","^продуктовый( магазин)?$","^промтовары$","^пропан$","^ремонт\\sобуви$","^ресторан$","^ритуал(ьные услуги)?$","^рыб(а|олов)$","^салон красоты$","^сантехника$","^семена$","^социальный участковый$","^спорт(зал|комплекс|товары)$","^столовая$","^стоматолог","^строитель$","^стройматериалы$","^сувениры$","^супермаркет$","^табак(ерка)?$","^ткани$","^товары для дома$","^универ(маг|сам)$","^уют$","^фармация$","^фрукты и овощи$","^химчистка$","^хинкальная$","^хоз(товары|яюшка)$","^хүнсний дэлгүүр$","^цвет(овик|очный|ы)(\\sмагазин)?$","^церковная( лавка)?$","^чайхана$","^ша(ве|у)рма$","^шашлычная$","^шиномонтаж$","^דלק$","^اداره پست$","^باشگاه بدنسازی$","^بانک$","^بقال(ة)?$","^حلاق$","^داروخانه شبانه روزی$","^داروخانه$","^رستوران$","^سوپر\\s?مارکت$","^صيدلية$","^قصابی$","^محط(ه|ة) وقود$","^مخبز(ة)?$","^مطعم$","^مقهى$","^مكتب البريد$","^میوه فروشی$","^نان\\s?(سنگک|بربری|لواش)?$","^نانوایی\\s?(سنگک|بربری|لواش)?ی?$","^پمپ (بنزین|گاز)$","^მარკეტი( \\(market\\))?","^カフェ$","^ポスト$","^体育館$","^加油站$","^珈琲館$","^自動販売機$","^自販機$","^郵局$","^食堂$"];
65083 keepTags: keepTags,
65084 discardKeys: discardKeys,
65085 discardNames: discardNames
65088 // ES5 for iD, for now
65091 // remove spaces, punctuation, diacritics
65092 var simplify = function simplify(str) {
65093 return diacritics.remove(
65094 str.replace(/[\s\-=_!"#%&'*{},.\/:;?\(\)\[\]@\\$\^*+<>~`’\u00a1\u00a7\u00b6\u00b7\u00bf\u037e\u0387\u055a-\u055f\u0589\u05c0\u05c3\u05c6\u05f3\u05f4\u0609\u060a\u060c\u060d\u061b\u061e\u061f\u066a-\u066d\u06d4\u0700-\u070d\u07f7-\u07f9\u0830-\u083e\u085e\u0964\u0965\u0970\u0af0\u0df4\u0e4f\u0e5a\u0e5b\u0f04-\u0f12\u0f14\u0f85\u0fd0-\u0fd4\u0fd9\u0fda\u104a-\u104f\u10fb\u1360-\u1368\u166d\u166e\u16eb-\u16ed\u1735\u1736\u17d4-\u17d6\u17d8-\u17da\u1800-\u1805\u1807-\u180a\u1944\u1945\u1a1e\u1a1f\u1aa0-\u1aa6\u1aa8-\u1aad\u1b5a-\u1b60\u1bfc-\u1bff\u1c3b-\u1c3f\u1c7e\u1c7f\u1cc0-\u1cc7\u1cd3\u2016\u2017\u2020-\u2027\u2030-\u2038\u203b-\u203e\u2041-\u2043\u2047-\u2051\u2053\u2055-\u205e\u2cf9-\u2cfc\u2cfe\u2cff\u2d70\u2e00\u2e01\u2e06-\u2e08\u2e0b\u2e0e-\u2e16\u2e18\u2e19\u2e1b\u2e1e\u2e1f\u2e2a-\u2e2e\u2e30-\u2e39\u3001-\u3003\u303d\u30fb\ua4fe\ua4ff\ua60d-\ua60f\ua673\ua67e\ua6f2-\ua6f7\ua874-\ua877\ua8ce\ua8cf\ua8f8-\ua8fa\ua92e\ua92f\ua95f\ua9c1-\ua9cd\ua9de\ua9df\uaa5c-\uaa5f\uaade\uaadf\uaaf0\uaaf1\uabeb\ufe10-\ufe16\ufe19\ufe30\ufe45\ufe46\ufe49-\ufe4c\ufe50-\ufe52\ufe54-\ufe57\ufe5f-\ufe61\ufe68\ufe6a\ufe6b\uff01-\uff03\uff05-\uff07\uff0a\uff0c\uff0e\uff0f\uff1a\uff1b\uff1f\uff20\uff3c\uff61\uff64\uff65]+/g,'')
65099 // ES5 for iD, for now
65102 // toParts - split a name-suggestion-index key into parts
65104 // kvnd: "amenity/fast_food|Thaï Express~(North America)",
65105 // kvn: "amenity/fast_food|Thaï Express",
65106 // kv: "amenity/fast_food",
65109 // n: "Thaï Express",
65110 // d: "(North America)",
65111 // nsimple: "thaiexpress",
65112 // kvnnsimple: "amenity/fast_food|thaiexpress"
65114 var to_parts = function toParts(kvnd) {
65118 var kvndparts = kvnd.split('~', 2);
65119 if (kvndparts.length > 1) parts.d = kvndparts[1];
65121 parts.kvn = kvndparts[0];
65122 var kvnparts = parts.kvn.split('|', 2);
65123 if (kvnparts.length > 1) parts.n = kvnparts[1];
65125 parts.kv = kvnparts[0];
65126 var kvparts = parts.kv.split('/', 2);
65127 parts.k = kvparts[0];
65128 parts.v = kvparts[1];
65130 parts.nsimple = simplify(parts.n);
65131 parts.kvnsimple = parts.kv + '|' + parts.nsimple;
65135 var matchGroups = {beauty:["shop/beauty","shop/hairdresser_supply"],beverages:["shop/alcohol","shop/beverages"],confectionery:["shop/candy","shop/chocolate","shop/confectionery"],convenience:["shop/beauty","shop/chemist","shop/convenience","shop/cosmetics"],electronics:["shop/computer","shop/electronics","shop/hifi","shop/mobile","shop/mobile_phone"],fitness:["leisure/fitness_centre","leisure/fitness_center","leisure/sports_centre","leisure/sports_center"],food:["amenity/cafe","amenity/fast_food","amenity/ice_cream","amenity/restaurant","shop/tea","shop/coffee"],fuel:["amenity/fuel","shop/gas","shop/convenience;gas","shop/gas;convenience"],hardware:["shop/doityourself","shop/hardware"],houseware:["shop/houseware","shop/interior_decoration"],lodging:["tourism/hotel","tourism/motel"],money_transfer:["amenity/money_transfer","shop/money_transfer"],outdoor:["shop/outdoor","shop/sports"],parts:["shop/car_parts","shop/car_repair","shop/tires","shop/tyres"],vending:["amenity/vending_machine","shop/vending_machine"],wholesale:["shop/supermarket","shop/wholesale"]};
65136 var match_groups = {
65137 matchGroups: matchGroups
65140 var match_groups$1 = /*#__PURE__*/Object.freeze({
65141 matchGroups: matchGroups,
65142 'default': match_groups
65145 var require$$0 = getCjsExportFromNamespace(match_groups$1);
65147 // ES5 for iD, for now
65151 var matchGroups$1 = require$$0.matchGroups;
65154 var matcher$1 = function() {
65155 var _warnings = []; // array of match conflict pairs
65156 var _ambiguous = {};
65157 var _matchIndex = {};
65160 // Create an index of all the keys/simplenames for fast matching
65161 matcher.buildMatchIndex = function(brands) {
65162 Object.keys(brands).forEach(function(kvnd) {
65163 var obj = brands[kvnd];
65164 var parts = to_parts(kvnd);
65166 var matchTags = (obj.matchTags || [])
65167 .map(function(s) { return s.toLowerCase(); });
65168 var matchNames = (obj.matchNames || [])
65170 var nomatches = (obj.nomatch || [])
65171 .map(function(kvnd) { return to_parts(kvnd).kvnsimple; });
65173 var match_kv = [parts.kv].concat(matchTags);
65174 var match_nsimple = [parts.nsimple].concat(matchNames);
65176 match_kv.forEach(function(kv) {
65177 match_nsimple.forEach(function(nsimple) {
65178 var test = kv + nsimple;
65179 if (nomatches.some(function(s) { return s === test; })) {
65180 console.log('WARNING match/nomatch conflict for ' + test);
65185 // fixme: duplicates will overwrite the single entry (ok for now)
65186 if (!_ambiguous[kv]) _ambiguous[kv] = {};
65187 _ambiguous[kv][nsimple] = parts;
65189 // duplicates are a problem in matchIndex, warn if we detect it
65190 if (!_matchIndex[kv]) _matchIndex[kv] = {};
65191 var m = _matchIndex[kv][nsimple];
65192 if (m) { // there already is a match for this
65193 _warnings.push([m.kvnd, kvnd + ' ("' + nsimple + '")']);
65195 _matchIndex[kv][nsimple] = parts;
65204 // pass a `key`, `value`, `name` and return the best match
65205 matcher.matchKVN = function(key, value, name) {
65206 return matcher.matchParts(to_parts(key + '/' + value + '|' + name));
65209 // pass a parts object and return the best match
65210 matcher.matchParts = function(parts) {
65212 var inGroup = false;
65214 // fixme: we currently return a single match for ambiguous
65215 match = _ambiguous[parts.kv] && _ambiguous[parts.kv][parts.nsimple];
65216 if (match) return match;
65218 // try to return an exact match
65219 match = _matchIndex[parts.kv] && _matchIndex[parts.kv][parts.nsimple];
65220 if (match) return match;
65222 // look in match groups
65223 for (var mg in matchGroups$1) {
65224 var matchGroup = matchGroups$1[mg];
65228 for (var i = 0; i < matchGroup.length; i++) {
65229 var otherkv = matchGroup[i].toLowerCase();
65231 inGroup = (otherkv === parts.kv);
65234 // fixme: we currently return a single match for ambiguous
65235 match = _ambiguous[otherkv] && _ambiguous[otherkv][parts.nsimple];
65238 match = _matchIndex[otherkv] && _matchIndex[otherkv][parts.nsimple];
65241 if (inGroup && match) {
65251 matcher.getWarnings = function() {
65261 function validationGenericName() {
65262 var type = 'generic_name';
65264 // known list of generic names (e.g. "bar")
65265 var discardNamesRegexes = filters.discardNames.map(function(discardName) {
65266 return new RegExp(discardName, 'i');
65269 var keysToTestForGenericValues = ['amenity', 'building', 'leisure', 'man_made', 'shop', 'tourism'];
65271 function isGenericName(entity) {
65272 var name = entity.tags.name;
65273 if (!name) return false;
65274 name = name.toLowerCase();
65278 // test if the name is just the key or tag value (e.g. "park")
65279 for (i = 0; i < keysToTestForGenericValues.length; i++) {
65280 key = keysToTestForGenericValues[i];
65281 val = entity.tags[key];
65283 val = val.toLowerCase();
65284 if (key === name ||
65286 key.replace(/\_/g, ' ') === name ||
65287 val.replace(/\_/g, ' ') === name) {
65288 return entity.tags.name;
65293 // test if the name is otherwise generic
65294 for (i = 0; i < discardNamesRegexes.length; i++) {
65295 if (discardNamesRegexes[i].test(name)) {
65296 return entity.tags.name;
65304 var validation = function checkGenericName(entity, context) {
65305 var generic = isGenericName(entity);
65306 if (!generic) return [];
65308 return [new validationIssue({
65310 severity: 'warning',
65311 message: function() {
65312 var entity = context.hasEntity(this.entityIds[0]);
65313 if (!entity) return '';
65314 var preset = utilPreset(entity, context);
65315 return t('issues.generic_name.message', { feature: preset.name(), name: generic });
65317 reference: showReference,
65318 entityIds: [entity.id],
65321 new validationIssueFix({
65322 icon: 'iD-operation-delete',
65323 title: t('issues.fix.remove_generic_name.title'),
65324 onClick: function() {
65325 var entityId = this.issue.entityIds[0];
65326 var entity = context.entity(entityId);
65327 var tags = Object.assign({}, entity.tags); // shallow copy
65330 actionChangeTags(entityId, tags),
65331 t('issues.fix.remove_generic_name.annotation')
65339 function showReference(selection) {
65340 selection.selectAll('.issue-reference')
65344 .attr('class', 'issue-reference')
65345 .text(t('issues.generic_name.reference'));
65349 validation.type = type;
65354 function validationImpossibleOneway() {
65355 var type = 'impossible_oneway';
65357 function typeForWay(way, context) {
65358 if (way.geometry(context.graph()) !== 'line') return null;
65360 if (osmRoutableHighwayTagValues[way.tags.highway]) return 'highway';
65361 if (osmFlowingWaterwayTagValues[way.tags.waterway]) return 'waterway';
65365 function isOneway(way) {
65366 if (way.tags.oneway === 'yes') return true;
65367 if (way.tags.oneway) return false;
65369 for (var key in way.tags) {
65370 if (osmOneWayTags[key] && osmOneWayTags[key][way.tags[key]]) {
65377 function continueDrawing(way, vertex, context) {
65378 // make sure the vertex is actually visible and editable
65379 var map = context.map();
65380 if (!map.editable() || !map.trimmedExtent().contains(vertex.loc)) {
65381 map.zoomToEase(vertex);
65385 modeDrawLine(context, way.id, context.graph(), context.graph(), 'line', way.affix(vertex.id), true)
65389 function nodeOccursMoreThanOnce(way, nodeID) {
65390 var occurences = 0;
65391 for (var index in way.nodes) {
65392 if (way.nodes[index] === nodeID) {
65394 if (occurences > 1) return true;
65400 function isConnectedViaOtherTypes(context, way, node) {
65402 var wayType = typeForWay(way, context);
65404 if (wayType === 'highway') {
65405 // entrances are considered connected
65406 if (node.tags.entrance && node.tags.entrance !== 'no') return true;
65407 if (node.tags.amenity === 'parking_entrance') return true;
65408 } else if (wayType === 'waterway') {
65409 if (node.id === way.first()) {
65410 // multiple waterways may start at the same spring
65411 if (node.tags.natural === 'spring') return true;
65413 // multiple waterways may end at the same drain
65414 if (node.tags.manhole === 'drain') return true;
65418 return context.graph().parentWays(node).some(function(parentWay) {
65419 if (parentWay.id === way.id) return false;
65421 if (wayType === 'highway') {
65423 // allow connections to highway areas
65424 if (parentWay.geometry(context.graph()) === 'area' &&
65425 osmRoutableHighwayTagValues[parentWay.tags.highway]) return true;
65427 // count connections to ferry routes as connected
65428 if (parentWay.tags.route === 'ferry') return true;
65430 return context.graph().parentRelations(parentWay).some(function(parentRelation) {
65431 if (parentRelation.tags.type === 'route' &&
65432 parentRelation.tags.route === 'ferry') return true;
65434 // allow connections to highway multipolygons
65435 return parentRelation.isMultipolygon() && osmRoutableHighwayTagValues[parentRelation.tags.highway];
65437 } else if (wayType === 'waterway') {
65438 // multiple waterways may start or end at a water body at the same node
65439 if (parentWay.tags.natural === 'water' ||
65440 parentWay.tags.natural === 'coastline') return true;
65446 function issuesForNode(context, way, nodeID) {
65448 var isFirst = nodeID === way.first();
65450 var wayType = typeForWay(way, context);
65452 // ignore if this way is self-connected at this node
65453 if (nodeOccursMoreThanOnce(way, nodeID)) return [];
65455 var osm = context.connection();
65456 if (!osm) return [];
65458 var node = context.hasEntity(nodeID);
65460 // ignore if this node or its tile are unloaded
65461 if (!node || !osm.isDataLoaded(node.loc)) return [];
65463 if (isConnectedViaOtherTypes(context, way, node)) return [];
65465 var attachedWaysOfSameType = context.graph().parentWays(node).filter(function(parentWay) {
65466 if (parentWay.id === way.id) return false;
65467 return typeForWay(parentWay, context) === wayType;
65470 // assume it's okay for waterways to start or end disconnected for now
65471 if (wayType === 'waterway' && attachedWaysOfSameType.length === 0) return [];
65473 var attachedOneways = attachedWaysOfSameType.filter(function(attachedWay) {
65474 return isOneway(attachedWay);
65477 // ignore if the way is connected to some non-oneway features
65478 if (attachedOneways.length < attachedWaysOfSameType.length) return [];
65480 if (attachedOneways.length) {
65481 var connectedEndpointsOkay = attachedOneways.some(function(attachedOneway) {
65482 if ((isFirst ? attachedOneway.first() : attachedOneway.last()) !== nodeID) return true;
65483 if (nodeOccursMoreThanOnce(attachedOneway, nodeID)) return true;
65486 if (connectedEndpointsOkay) return [];
65491 if (attachedOneways.length) {
65492 fixes.push(new validationIssueFix({
65493 icon: 'iD-operation-reverse',
65494 title: t('issues.fix.reverse_feature.title'),
65495 entityIds: [way.id],
65496 onClick: function() {
65497 var id = this.issue.entityIds[0];
65498 context.perform(actionReverse(id), t('operations.reverse.annotation'));
65502 if (node.tags.noexit !== 'yes') {
65503 fixes.push(new validationIssueFix({
65504 icon: 'iD-operation-continue' + (isFirst ? '-left' : ''),
65505 title: t('issues.fix.continue_from_' + (isFirst ? 'start' : 'end') + '.title'),
65506 onClick: function() {
65507 var entityID = this.issue.entityIds[0];
65508 var vertexID = this.issue.entityIds[1];
65509 var way = context.entity(entityID);
65510 var vertex = context.entity(vertexID);
65511 continueDrawing(way, vertex, context);
65516 var placement = isFirst ? 'start' : 'end',
65517 messageID = wayType + '.',
65518 referenceID = wayType + '.';
65520 if (wayType === 'waterway') {
65521 messageID += 'connected.' + placement;
65522 referenceID += 'connected';
65524 messageID += placement;
65525 referenceID += placement;
65528 return [new validationIssue({
65531 severity: 'warning',
65532 message: function() {
65533 var entity = context.hasEntity(this.entityIds[0]);
65534 return entity ? t('issues.impossible_oneway.' + messageID + '.message', {
65535 feature: utilDisplayLabel(entity, context)
65538 reference: getReference(referenceID),
65539 entityIds: [way.id, node.id],
65543 function getReference(referenceID) {
65544 return function showReference(selection) {
65545 selection.selectAll('.issue-reference')
65549 .attr('class', 'issue-reference')
65550 .text(t('issues.impossible_oneway.' + referenceID + '.reference'));
65555 var validation = function checkImpossibleOneway(entity, context) {
65557 if (entity.type !== 'way' || entity.geometry(context.graph()) !== 'line') return [];
65559 if (entity.isClosed()) return [];
65561 if (!typeForWay(entity, context)) return [];
65563 if (!isOneway(entity)) return [];
65565 var firstIssues = issuesForNode(context, entity, entity.first());
65566 var lastIssues = issuesForNode(context, entity, entity.last());
65568 return firstIssues.concat(lastIssues);
65572 validation.type = type;
65577 function validationIncompatibleSource() {
65578 var type = 'incompatible_source';
65579 var invalidSources = [{id:'google', regex:'google'}];
65581 var validation = function checkIncompatibleSource(entity, context) {
65584 if (entity.tags && entity.tags.source) {
65585 invalidSources.forEach(function(invalidSource) {
65586 var pattern = new RegExp(invalidSource.regex, 'i');
65588 if (entity.tags.source.match(pattern)) {
65589 issues.push(new validationIssue({
65591 severity: 'warning',
65592 message: function() {
65593 var entity = context.hasEntity(this.entityIds[0]);
65594 return entity ? t('issues.incompatible_source.' + invalidSource.id + '.feature.message', {
65595 feature: utilDisplayLabel(entity, context)
65598 reference: getReference(invalidSource.id),
65599 entityIds: [entity.id],
65601 new validationIssueFix({
65602 title: t('issues.fix.remove_proprietary_data.title')
65613 function getReference(id) {
65614 return function showReference(selection) {
65615 selection.selectAll('.issue-reference')
65619 .attr('class', 'issue-reference')
65620 .text(t('issues.incompatible_source.' + id + '.reference'));
65625 validation.type = type;
65630 function validationMaprules() {
65631 var type = 'maprules';
65633 var validation = function checkMaprules(entity, context) {
65634 if (!services$1.maprules) return [];
65636 var graph = context.graph();
65637 var rules = services$1.maprules.validationRules();
65640 for (var i = 0; i < rules.length; i++) {
65641 var rule = rules[i];
65642 rule.findIssues(entity, graph, issues);
65649 validation.type = type;
65654 function validationMissingRole() {
65655 var type = 'missing_role';
65657 var validation = function checkMissingRole(entity, context) {
65659 if (entity.type === 'way') {
65660 context.graph().parentRelations(entity).forEach(function(relation) {
65661 if (!relation.isMultipolygon()) return;
65663 var member = relation.memberById(entity.id);
65664 if (member && isMissingRole(member)) {
65665 issues.push(makeIssue(entity, relation, member, context));
65668 } else if (entity.type === 'relation' && entity.isMultipolygon()) {
65669 entity.indexedMembers().forEach(function(member) {
65670 var way = context.hasEntity(member.id);
65671 if (way && isMissingRole(member)) {
65672 issues.push(makeIssue(way, entity, member, context));
65681 function isMissingRole(member) {
65682 return !member.role || !member.role.trim().length;
65686 function makeIssue(way, relation, member, context) {
65687 return new validationIssue({
65689 severity: 'warning',
65690 message: function() {
65691 var member = context.hasEntity(this.entityIds[1]),
65692 relation = context.hasEntity(this.entityIds[0]);
65693 return (member && relation) ? t('issues.missing_role.message', {
65694 member: utilDisplayLabel(member, context),
65695 relation: utilDisplayLabel(relation, context)
65698 reference: showReference,
65699 entityIds: [relation.id, way.id],
65703 hash: member.index.toString(),
65705 makeAddRoleFix('inner', context),
65706 makeAddRoleFix('outer', context),
65707 new validationIssueFix({
65708 icon: 'iD-operation-delete',
65709 title: t('issues.fix.remove_from_relation.title'),
65710 onClick: function() {
65712 actionDeleteMember(this.issue.entityIds[0], this.issue.data.member.index),
65713 t('operations.delete_member.annotation')
65721 function showReference(selection) {
65722 selection.selectAll('.issue-reference')
65726 .attr('class', 'issue-reference')
65727 .text(t('issues.missing_role.multipolygon.reference'));
65732 function makeAddRoleFix(role, context) {
65733 return new validationIssueFix({
65734 title: t('issues.fix.set_as_' + role + '.title'),
65735 onClick: function() {
65736 var oldMember = this.issue.data.member;
65737 var member = { id: this.issue.entityIds[1], type: oldMember.type, role: role };
65739 actionChangeMember(this.issue.entityIds[0], member, oldMember.index),
65740 t('operations.change_role.annotation')
65746 validation.type = type;
65751 function validationMissingTag() {
65752 var type = 'missing_tag';
65755 function hasDescriptiveTags(entity) {
65756 var keys = Object.keys(entity.tags)
65757 .filter(function(k) {
65758 if (k === 'area' || k === 'name') {
65761 return osmIsInterestingTag(k);
65765 if (entity.type === 'relation' && keys.length === 1) {
65766 return entity.tags.type !== 'multipolygon';
65768 return keys.length > 0;
65772 function isUnknownRoad(entity) {
65773 return entity.type === 'way' && entity.tags.highway === 'road';
65776 function isUntypedRelation(entity) {
65777 return entity.type === 'relation' && !entity.tags.type;
65781 var validation = function checkMissingTag(entity, context) {
65782 var graph = context.graph();
65784 // ignore vertex features and relation members
65785 if (entity.geometry(graph) === 'vertex' || entity.hasParentRelations(graph)) {
65791 if (Object.keys(entity.tags).length === 0) {
65793 } else if (!hasDescriptiveTags(entity)) {
65794 subtype = 'descriptive';
65795 } else if (isUntypedRelation(entity)) {
65796 subtype = 'relation_type';
65797 } else if (isUnknownRoad(entity)) {
65798 subtype = 'highway_classification';
65801 if (!subtype) return [];
65803 var selectFixType = subtype === 'highway_classification' ? 'select_road_type' : 'select_preset';
65806 new validationIssueFix({
65807 icon: 'iD-icon-search',
65808 title: t('issues.fix.' + selectFixType + '.title'),
65809 onClick: function() {
65810 context.ui().sidebar.showPresetList();
65815 // can always delete if the user created it in the first place..
65816 var canDelete = (entity.version === undefined || entity.v !== undefined);
65818 // otherwise check with operationDelete whether we can delete this entity
65820 canDelete = !operationDelete([entity.id], context).disabled();
65825 new validationIssueFix({
65826 icon: 'iD-operation-delete',
65827 title: t('issues.fix.delete_feature.title'),
65828 onClick: function() {
65829 var id = this.issue.entityIds[0];
65830 var operation = operationDelete([id], context);
65831 if (!operation.disabled()) {
65839 var messageID = subtype === 'highway_classification' ? 'unknown_road' : 'missing_tag.' + subtype;
65840 var referenceID = subtype === 'highway_classification' ? 'unknown_road' : 'missing_tag';
65842 var severity = (canDelete && subtype !== 'highway_classification') ? 'error' : 'warning';
65844 return [new validationIssue({
65847 severity: severity,
65848 message: function() {
65849 var entity = context.hasEntity(this.entityIds[0]);
65850 return entity ? t('issues.' + messageID + '.message', {
65851 feature: utilDisplayLabel(entity, context)
65854 reference: showReference,
65855 entityIds: [entity.id],
65860 function showReference(selection) {
65861 selection.selectAll('.issue-reference')
65865 .attr('class', 'issue-reference')
65866 .text(t('issues.' + referenceID + '.reference'));
65871 validation.type = type;
65876 function validationOutdatedTags() {
65877 var type = 'outdated_tags';
65879 // initialize name-suggestion-index matcher
65880 var nsiMatcher = matcher$1();
65881 nsiMatcher.buildMatchIndex(brands$1.brands);
65882 var nsiKeys = ['amenity', 'shop', 'tourism', 'leisure', 'office'];
65886 Object.keys(brands$1.brands).forEach(function(kvnd) {
65887 var brand = brands$1.brands[kvnd];
65888 var wd = brand.tags['brand:wikidata'];
65889 var wp = brand.tags['brand:wikipedia'];
65890 if (wd) { allWD[wd] = kvnd; }
65891 if (wp) { allWP[wp] = kvnd; }
65895 function oldTagIssues(entity, context) {
65896 var graph = context.graph();
65897 var oldTags = Object.assign({}, entity.tags); // shallow copy
65898 var preset = context.presets().match(entity, graph);
65899 var explicitPresetUpgrade = preset.replacement;
65900 var subtype = 'deprecated_tags';
65902 // upgrade preset..
65903 if (preset.replacement) {
65904 var newPreset = context.presets().item(preset.replacement);
65905 graph = actionChangePreset(entity.id, preset, newPreset, true)(graph); // true = skip field defaults
65906 entity = graph.entity(entity.id);
65907 preset = newPreset;
65911 var deprecatedTags = entity.deprecatedTags();
65912 if (deprecatedTags.length) {
65913 deprecatedTags.forEach(function(tag) {
65914 graph = actionUpgradeTags(entity.id, tag.old, tag.replace)(graph);
65916 entity = graph.entity(entity.id);
65919 // add missing addTags..
65920 var newTags = Object.assign({}, entity.tags); // shallow copy
65921 if (preset.tags !== preset.addTags) {
65922 Object.keys(preset.addTags).forEach(function(k) {
65924 newTags[k] = preset.addTags[k];
65925 if (!explicitPresetUpgrade) {
65926 subtype = 'incomplete_tags';
65932 // Do `wikidata` or `wikipedia` identify this entity as a brand? #6416
65933 // If so, these tags can be swapped to `brand:wikidata`/`brand:wikipedia`
65935 if (newTags.wikidata) { // try matching `wikidata`
65936 isBrand = allWD[newTags.wikidata];
65938 if (!isBrand && newTags.wikipedia) { // fallback to `wikipedia`
65939 isBrand = allWP[newTags.wikipedia];
65941 if (isBrand && !newTags.office) { // but avoid doing this for corporate offices
65942 if (newTags.wikidata) {
65943 newTags['brand:wikidata'] = newTags.wikidata;
65944 delete newTags.wikidata;
65946 if (newTags.wikipedia) {
65947 newTags['brand:wikipedia'] = newTags.wikipedia;
65948 delete newTags.wikipedia;
65950 // I considered setting `name` and other tags here, but they aren't unique per wikidata
65951 // (Q2759586 -> in USA "Papa John's", in Russia "Папа Джонс")
65952 // So users will really need to use a preset or assign `name` themselves.
65955 // try key/value|name match against name-suggestion-index
65956 if (newTags.name) {
65957 for (var i = 0; i < nsiKeys.length; i++) {
65958 var k = nsiKeys[i];
65959 if (!newTags[k]) continue;
65961 var match = nsiMatcher.matchKVN(k, newTags[k], newTags.name);
65962 if (!match) continue;
65964 // for now skip ambiguous matches (like Target~(USA) vs Target~(Australia))
65965 if (match.d) continue;
65967 var brand = brands$1.brands[match.kvnd];
65968 if (brand && brand.tags['brand:wikidata']) {
65969 Object.assign(newTags, brand.tags);
65977 var tagDiff = utilTagDiff(oldTags, newTags);
65978 if (!tagDiff.length) return [];
65980 var prefix = subtype === 'incomplete_tags' ? 'incomplete.' : '';
65982 return [new validationIssue({
65985 severity: 'warning',
65986 message: showMessage,
65987 reference: showReference,
65988 entityIds: [entity.id],
65989 hash: JSON.stringify(tagDiff),
65991 new validationIssueFix({
65992 autoArgs: [doUpgrade, t('issues.fix.upgrade_tags.annotation')],
65993 title: t('issues.fix.upgrade_tags.title'),
65994 onClick: function() {
65995 context.perform(doUpgrade, t('issues.fix.upgrade_tags.annotation'));
66002 function doUpgrade(graph) {
66003 var currEntity = context.hasEntity(entity.id);
66004 if (!currEntity) return graph;
66006 var newTags = Object.assign({}, currEntity.tags); // shallow copy
66007 tagDiff.forEach(function(diff) {
66008 if (diff.type === '-') {
66009 delete newTags[diff.key];
66010 } else if (diff.type === '+') {
66011 newTags[diff.key] = diff.newVal;
66015 return actionChangeTags(currEntity.id, newTags)(graph);
66019 function showMessage() {
66020 var currEntity = context.hasEntity(entity.id);
66021 if (!currEntity) return '';
66023 return t('issues.outdated_tags.' + prefix + 'message',
66024 { feature: utilDisplayLabel(currEntity, context) }
66029 function showReference(selection) {
66030 var enter = selection.selectAll('.issue-reference')
66036 .attr('class', 'issue-reference')
66037 .text(t('issues.outdated_tags.' + prefix + 'reference'));
66041 .text(t('issues.suggested'));
66045 .attr('class', 'tagDiff-table')
66046 .selectAll('.tagDiff-row')
66050 .attr('class', 'tagDiff-row')
66052 .attr('class', function(d) {
66053 var klass = d.type === '+' ? 'add' : 'remove';
66054 return 'tagDiff-cell tagDiff-cell-' + klass;
66056 .text(function(d) { return d.display; });
66061 function oldMultipolygonIssues(entity, context) {
66062 var graph = context.graph();
66064 var multipolygon, outerWay;
66065 if (entity.type === 'relation') {
66066 outerWay = osmOldMultipolygonOuterMemberOfRelation(entity, graph);
66067 multipolygon = entity;
66068 } else if (entity.type === 'way') {
66069 multipolygon = osmIsOldMultipolygonOuterMember(entity, graph);
66075 if (!multipolygon || !outerWay) return [];
66077 return [new validationIssue({
66079 subtype: 'old_multipolygon',
66080 severity: 'warning',
66081 message: showMessage,
66082 reference: showReference,
66083 entityIds: [outerWay.id, multipolygon.id],
66085 new validationIssueFix({
66086 autoArgs: [doUpgrade, t('issues.fix.move_tags.annotation')],
66087 title: t('issues.fix.move_tags.title'),
66088 onClick: function() {
66089 context.perform(doUpgrade, t('issues.fix.move_tags.annotation'));
66096 function doUpgrade(graph) {
66097 var currMultipolygon = context.hasEntity(multipolygon.id);
66098 var currOuterWay = context.hasEntity(outerWay.id);
66099 if (!currMultipolygon || !currOuterWay) return graph;
66101 currMultipolygon = currMultipolygon.mergeTags(currOuterWay.tags);
66102 graph = graph.replace(currMultipolygon);
66103 return actionChangeTags(currOuterWay.id, {})(graph);
66107 function showMessage() {
66108 var currMultipolygon = context.hasEntity(multipolygon.id);
66109 if (!currMultipolygon) return '';
66111 return t('issues.old_multipolygon.message',
66112 { multipolygon: utilDisplayLabel(currMultipolygon, context) }
66117 function showReference(selection) {
66118 selection.selectAll('.issue-reference')
66122 .attr('class', 'issue-reference')
66123 .text(t('issues.old_multipolygon.reference'));
66128 var validation = function checkOutdatedTags(entity, context) {
66129 var issues = oldMultipolygonIssues(entity, context);
66130 if (!issues.length) issues = oldTagIssues(entity, context);
66135 validation.type = type;
66140 function validationPrivateData() {
66141 var type = 'private_data';
66143 // assume that some buildings are private
66144 var privateBuildingValues = {
66150 semidetached_house: true,
66151 static_caravan: true
66154 // but they might be public if they have one of these other tags
66165 // these tags may contain personally identifying info
66166 var personalTags = {
66167 'contact:email': true,
66168 'contact:fax': true,
66169 'contact:phone': true,
66176 var validation = function checkPrivateData(entity, context) {
66177 var tags = entity.tags;
66178 if (!tags.building || !privateBuildingValues[tags.building]) return [];
66181 for (var k in tags) {
66182 if (publicKeys[k]) return []; // probably a public feature
66183 if (!personalTags[k]) {
66184 keepTags[k] = tags[k];
66188 var tagDiff = utilTagDiff(tags, keepTags);
66189 if (!tagDiff.length) return [];
66191 var fixID = tagDiff.length === 1 ? 'remove_tag' : 'remove_tags';
66193 return [new validationIssue({
66195 severity: 'warning',
66196 message: showMessage,
66197 reference: showReference,
66198 entityIds: [entity.id],
66200 new validationIssueFix({
66201 icon: 'iD-operation-delete',
66202 title: t('issues.fix.' + fixID + '.title'),
66203 onClick: function() {
66204 context.perform(doUpgrade, t('issues.fix.upgrade_tags.annotation'));
66211 function doUpgrade(graph) {
66212 var currEntity = context.hasEntity(entity.id);
66213 if (!currEntity) return graph;
66215 var newTags = Object.assign({}, currEntity.tags); // shallow copy
66216 tagDiff.forEach(function(diff) {
66217 if (diff.type === '-') {
66218 delete newTags[diff.key];
66219 } else if (diff.type === '+') {
66220 newTags[diff.key] = diff.newVal;
66224 return actionChangeTags(currEntity.id, newTags)(graph);
66228 function showMessage() {
66229 var currEntity = context.hasEntity(this.entityIds[0]);
66230 if (!currEntity) return '';
66232 return t('issues.private_data.contact.message',
66233 { feature: utilDisplayLabel(currEntity, context) }
66238 function showReference(selection) {
66239 var enter = selection.selectAll('.issue-reference')
66245 .attr('class', 'issue-reference')
66246 .text(t('issues.private_data.reference'));
66250 .text(t('issues.suggested'));
66254 .attr('class', 'tagDiff-table')
66255 .selectAll('.tagDiff-row')
66259 .attr('class', 'tagDiff-row')
66261 .attr('class', function(d) {
66262 var klass = d.type === '+' ? 'add' : 'remove';
66263 return 'tagDiff-cell tagDiff-cell-' + klass;
66265 .text(function(d) { return d.display; });
66270 validation.type = type;
66275 function validationTagSuggestsArea() {
66276 var type = 'tag_suggests_area';
66279 var validation = function checkTagSuggestsArea(entity, context) {
66280 if (entity.type !== 'way' || entity.isClosed()) return [];
66282 var tagSuggestingArea = entity.tagSuggestingArea();
66283 if (!tagSuggestingArea) {
66287 if (context.presets().matchTags(tagSuggestingArea, 'line') ===
66288 context.presets().matchTags(tagSuggestingArea, 'area')) {
66289 // these tags also allow lines and making this an area wouldn't matter
66293 var tagText = utilTagText({ tags: tagSuggestingArea });
66296 var connectEndpointsOnClick;
66298 // must have at least three nodes to close this automatically
66299 if (entity.nodes.length >= 3) {
66300 var nodes = context.graph().childNodes(entity), testNodes;
66301 var firstToLastDistanceMeters = geoSphericalDistance(nodes[0].loc, nodes[nodes.length-1].loc);
66303 // if the distance is very small, attempt to merge the endpoints
66304 if (firstToLastDistanceMeters < 0.75) {
66305 testNodes = nodes.slice(); // shallow copy
66307 testNodes.push(testNodes[0]);
66308 // make sure this will not create a self-intersection
66309 if (!geoHasSelfIntersections(testNodes, testNodes[0].id)) {
66310 connectEndpointsOnClick = function() {
66311 var way = context.entity(this.issue.entityIds[0]);
66313 actionMergeNodes([way.nodes[0], way.nodes[way.nodes.length-1]], nodes[0].loc),
66314 t('issues.fix.connect_endpoints.annotation')
66320 if (!connectEndpointsOnClick) {
66321 // if the points were not merged, attempt to close the way
66322 testNodes = nodes.slice(); // shallow copy
66323 testNodes.push(testNodes[0]);
66324 // make sure this will not create a self-intersection
66325 if (!geoHasSelfIntersections(testNodes, testNodes[0].id)) {
66326 connectEndpointsOnClick = function() {
66327 var wayId = this.issue.entityIds[0];
66328 var way = context.entity(wayId);
66329 var nodeId = way.nodes[0];
66330 var index = way.nodes.length;
66332 actionAddVertex(wayId, nodeId, index),
66333 t('issues.fix.connect_endpoints.annotation')
66340 fixes.push(new validationIssueFix({
66341 title: t('issues.fix.connect_endpoints.title'),
66342 onClick: connectEndpointsOnClick
66345 fixes.push(new validationIssueFix({
66346 icon: 'iD-operation-delete',
66347 title: t('issues.fix.remove_tag.title'),
66348 onClick: function() {
66349 var entityId = this.issue.entityIds[0];
66350 var entity = context.entity(entityId);
66351 var tags = Object.assign({}, entity.tags); // shallow copy
66352 for (var key in tagSuggestingArea) {
66356 actionChangeTags(entityId, tags),
66357 t('issues.fix.remove_tag.annotation')
66362 return [new validationIssue({
66364 severity: 'warning',
66365 message: function() {
66366 var entity = context.hasEntity(this.entityIds[0]);
66367 return entity ? t('issues.tag_suggests_area.message', {
66368 feature: utilDisplayLabel(entity, context),
66372 reference: showReference,
66373 entityIds: [entity.id],
66374 hash: JSON.stringify(tagSuggestingArea),
66379 function showReference(selection) {
66380 selection.selectAll('.issue-reference')
66384 .attr('class', 'issue-reference')
66385 .text(t('issues.tag_suggests_area.reference'));
66389 validation.type = type;
66394 function validationUnsquareWay() {
66395 var type = 'unsquare_way';
66396 var DEFAULT_DEG_THRESHOLD = 5; // see also issues.js
66398 // use looser epsilon for detection to reduce warnings of buildings that are essentially square already
66399 var epsilon = 0.05;
66400 var nodeThreshold = 10;
66402 function isBuilding(entity, graph) {
66403 if (entity.type !== 'way' || entity.geometry(graph) !== 'area') return false;
66404 return entity.tags.building && entity.tags.building !== 'no';
66408 var validation = function checkUnsquareWay(entity, context) {
66409 var graph = context.graph();
66410 if (!isBuilding(entity, graph)) return [];
66412 // don't flag ways marked as physically unsquare
66413 if (entity.tags.nonsquare === 'yes') return [];
66415 var isClosed = entity.isClosed();
66416 if (!isClosed) return []; // this building has bigger problems
66418 // don't flag ways with lots of nodes since they are likely detail-mapped
66419 var nodes = context.childNodes(entity).slice(); // shallow copy
66420 if (nodes.length > nodeThreshold + 1) return []; // +1 because closing node appears twice
66422 // ignore if not all nodes are fully downloaded
66423 var osm = context.connection();
66424 if (!osm || nodes.some(function(node) { return !osm.isDataLoaded(node.loc); })) return [];
66426 // don't flag connected ways to avoid unresolvable unsquare loops
66427 var hasConnectedSquarableWays = nodes.some(function(node) {
66428 return graph.parentWays(node).some(function(way) {
66429 if (way.id === entity.id) return false;
66430 if (isBuilding(way, graph)) return true;
66431 return graph.parentRelations(way).some(function(parentRelation) {
66432 return parentRelation.isMultipolygon() &&
66433 parentRelation.tags.building &&
66434 parentRelation.tags.building !== 'no';
66438 if (hasConnectedSquarableWays) return [];
66441 // user-configurable square threshold
66442 var storedDegreeThreshold = context.storage('validate-square-degrees');
66443 var degreeThreshold = isNaN(storedDegreeThreshold) ? DEFAULT_DEG_THRESHOLD : parseFloat(storedDegreeThreshold);
66445 var points = nodes.map(function(node) { return context.projection(node.loc); });
66446 if (!geoOrthoCanOrthogonalize(points, isClosed, epsilon, degreeThreshold, true)) return [];
66449 // don't allow autosquaring features linked to wikidata
66450 if (!entity.tags.wikidata) {
66451 // use same degree threshold as for detection
66452 var autoAction = actionOrthogonalize(entity.id, context.projection, undefined, degreeThreshold);
66453 autoAction.transitionable = false; // when autofixing, do it instantly
66454 autoArgs = [autoAction, t('operations.orthogonalize.annotation.area')];
66457 return [new validationIssue({
66459 severity: 'warning',
66460 message: function() {
66461 var entity = context.hasEntity(this.entityIds[0]);
66462 return entity ? t('issues.unsquare_way.message', { feature: utilDisplayLabel(entity, context) }) : '';
66464 reference: showReference,
66465 entityIds: [entity.id],
66466 hash: JSON.stringify(autoArgs !== undefined) + degreeThreshold,
66468 new validationIssueFix({
66469 icon: 'iD-operation-orthogonalize',
66470 title: t('issues.fix.square_feature.title'),
66471 autoArgs: autoArgs,
66472 onClick: function(completionHandler) {
66473 var entityId = this.issue.entityIds[0];
66474 // use same degree threshold as for detection
66476 actionOrthogonalize(entityId, context.projection, undefined, degreeThreshold),
66477 t('operations.orthogonalize.annotation.area')
66479 // run after the squaring transition (currently 150ms)
66480 window.setTimeout(function() { completionHandler(); }, 175);
66483 new validationIssueFix({
66484 title: t('issues.fix.tag_as_unsquare.title'),
66485 onClick: function() {
66486 var entityId = this.issue.entityIds[0];
66487 var entity = context.entity(entityId);
66488 var tags = Object.assign({}, entity.tags); // shallow copy
66489 tags.nonsquare = 'yes';
66491 actionChangeTags(entityId, tags),
66492 t('issues.fix.tag_as_unsquare.annotation')
66499 function showReference(selection) {
66500 selection.selectAll('.issue-reference')
66504 .attr('class', 'issue-reference')
66505 .text(t('issues.unsquare_way.buildings.reference'));
66509 validation.type = type;
66516 var Validations = /*#__PURE__*/Object.freeze({
66517 validationAlmostJunction: validationAlmostJunction,
66518 validationCloseNodes: validationCloseNodes,
66519 validationCrossingWays: validationCrossingWays,
66520 validationDisconnectedWay: validationDisconnectedWay,
66521 validationFixmeTag: validationFixmeTag,
66522 validationGenericName: validationGenericName,
66523 validationImpossibleOneway: validationImpossibleOneway,
66524 validationIncompatibleSource: validationIncompatibleSource,
66525 validationMaprules: validationMaprules,
66526 validationMissingRole: validationMissingRole,
66527 validationMissingTag: validationMissingTag,
66528 validationOutdatedTags: validationOutdatedTags,
66529 validationPrivateData: validationPrivateData,
66530 validationTagSuggestsArea: validationTagSuggestsArea,
66531 validationUnsquareWay: validationUnsquareWay
66534 function coreValidator(context) {
66535 var dispatch$1 = dispatch('validated', 'focusedIssue');
66536 var validator = utilRebind({}, dispatch$1, 'on');
66539 var _disabledRules = {};
66541 var _ignoredIssueIDs = {}; // issue.id -> true
66542 var _issuesByIssueID = {}; // issue.id -> issue
66543 var _issuesByEntityID = {}; // entity.id -> set(issue.id)
66544 var _validatedGraph = null;
66545 var _deferred = new Set();
66548 // initialize the validator rulesets
66550 validator.init = function() {
66551 Object.values(Validations).forEach(function(validation) {
66552 if (typeof validation !== 'function') return;
66554 var fn = validation();
66559 var disabledRules = context.storage('validate-disabledRules');
66560 if (disabledRules) {
66561 disabledRules.split(',')
66562 .forEach(function(key) { _disabledRules[key] = true; });
66568 // clear caches, called whenever iD resets after a save
66570 validator.reset = function() {
66571 Array.from(_deferred).forEach(function(handle) {
66572 window.cancelIdleCallback(handle);
66573 _deferred.delete(handle);
66577 _ignoredIssueIDs = {};
66578 _issuesByIssueID = {};
66579 _issuesByEntityID = {};
66580 _validatedGraph = null;
66582 for (var key in _rules) {
66583 if (typeof _rules[key].reset === 'function') {
66584 _rules[key].reset(); // 'crossing_ways' is the only one like this
66589 validator.resetIgnoredIssues = function() {
66590 _ignoredIssueIDs = {};
66592 dispatch$1.call('validated');
66596 // when the user changes the squaring thereshold, rerun this on all buildings
66597 validator.changeSquareThreshold = function() {
66598 var checkUnsquareWay = _rules.unsquare_way;
66599 if (typeof checkUnsquareWay !== 'function') return;
66601 // uncache existing
66602 Object.values(_issuesByIssueID)
66603 .filter(function(issue) { return issue.type === 'unsquare_way'; })
66604 .forEach(function(issue) {
66605 var entityId = issue.entityIds[0]; // always 1 entity for unsquare way
66606 if (_issuesByEntityID[entityId]) {
66607 _issuesByEntityID[entityId].delete(issue.id);
66609 delete _issuesByIssueID[issue.id];
66612 var buildings = context.intersects(geoExtent([-180,-90],[180, 90])) // everywhere
66613 .filter(function(entity) {
66614 return entity.type === 'way' && entity.tags.building && entity.tags.building !== 'no';
66617 // rerun for all buildings
66618 buildings.forEach(function(entity) {
66619 var detected = checkUnsquareWay(entity, context);
66620 if (detected.length !== 1) return;
66622 var issue = detected[0];
66623 var ignoreFix = new validationIssueFix({
66624 title: t('issues.fix.ignore_issue.title'),
66625 icon: 'iD-icon-close',
66626 onClick: function() {
66627 ignoreIssue(this.issue.id);
66630 ignoreFix.type = 'ignore';
66631 ignoreFix.issue = issue;
66632 issue.fixes.push(ignoreFix);
66634 if (!_issuesByEntityID[entity.id]) {
66635 _issuesByEntityID[entity.id] = new Set();
66637 _issuesByEntityID[entity.id].add(issue.id);
66638 _issuesByIssueID[issue.id] = issue;
66641 dispatch$1.call('validated');
66646 // what: 'all', // 'all' or 'edited'
66647 // where: 'all', // 'all' or 'visible'
66648 // includeIgnored: false // true, false, or 'only'
66649 // includeDisabledRules: false // true, false, or 'only'
66651 validator.getIssues = function(options) {
66652 var opts = Object.assign({ what: 'all', where: 'all', includeIgnored: false, includeDisabledRules: false }, options);
66653 var issues = Object.values(_issuesByIssueID);
66654 var changes = context.history().difference().changes();
66655 var view = context.map().extent();
66657 return issues.filter(function(issue) {
66658 if (opts.includeDisabledRules === 'only' && !_disabledRules[issue.type]) return false;
66659 if (!opts.includeDisabledRules && _disabledRules[issue.type]) return false;
66661 if (opts.includeIgnored === 'only' && !_ignoredIssueIDs[issue.id]) return false;
66662 if (!opts.includeIgnored && _ignoredIssueIDs[issue.id]) return false;
66664 // Sanity check: This issue may be for an entity that not longer exists.
66665 // If we detect this, uncache and return false so it is not included..
66666 var entityIds = issue.entityIds || [];
66667 for (var i = 0; i < entityIds.length; i++) {
66668 var entityId = entityIds[i];
66669 if (!context.hasEntity(entityId)) {
66670 delete _issuesByEntityID[entityId];
66671 delete _issuesByIssueID[issue.id];
66676 if (opts.what === 'edited') {
66677 var isEdited = entityIds.some(function(entityId) { return changes[entityId]; });
66678 if (entityIds.length && !isEdited) return false;
66681 if (opts.where === 'visible') {
66682 var extent = issue.extent(context.graph());
66683 if (!view.intersects(extent)) return false;
66690 validator.focusIssue = function(issue) {
66691 var extent = issue.extent(context.graph());
66694 var setZoom = Math.max(context.map().zoom(), 19);
66695 context.map().unobscuredCenterZoomEase(extent.center(), setZoom);
66697 // select the first entity
66698 if (issue.entityIds && issue.entityIds.length) {
66699 window.setTimeout(function() {
66700 var ids = issue.entityIds;
66701 context.enter(modeSelect(context, [ids[0]]));
66702 dispatch$1.call('focusedIssue', this, issue);
66703 }, 250); // after ease
66709 validator.getIssuesBySeverity = function(options) {
66710 var groups = utilArrayGroupBy(validator.getIssues(options), 'severity');
66711 groups.error = groups.error || [];
66712 groups.warning = groups.warning || [];
66717 validator.getEntityIssues = function(entityID, options) {
66718 var issueIDs = _issuesByEntityID[entityID];
66719 if (!issueIDs) return [];
66721 var opts = options || {};
66723 return Array.from(issueIDs)
66724 .map(function(id) { return _issuesByIssueID[id]; })
66725 .filter(function(issue) {
66726 if (opts.includeDisabledRules === 'only' && !_disabledRules[issue.type]) return false;
66727 if (!opts.includeDisabledRules && _disabledRules[issue.type]) return false;
66729 if (opts.includeIgnored === 'only' && !_ignoredIssueIDs[issue.id]) return false;
66730 if (!opts.includeIgnored && _ignoredIssueIDs[issue.id]) return false;
66737 validator.getRuleKeys = function() {
66738 return Object.keys(_rules)
66739 .filter(function(key) { return key !== 'maprules'; })
66740 .sort(function(key1, key2) {
66741 // alphabetize by localized title
66742 return t('issues.' + key1 + '.title') < t('issues.' + key2 + '.title') ? -1 : 1;
66747 validator.isRuleEnabled = function(key) {
66748 return !_disabledRules[key];
66752 validator.toggleRule = function(key) {
66753 if (_disabledRules[key]) {
66754 delete _disabledRules[key];
66756 _disabledRules[key] = true;
66759 context.storage('validate-disabledRules', Object.keys(_disabledRules).join(','));
66760 validator.validate();
66764 validator.disableRules = function(keys) {
66765 _disabledRules = {};
66766 keys.forEach(function(k) {
66767 _disabledRules[k] = true;
66770 context.storage('validate-disabledRules', Object.keys(_disabledRules).join(','));
66771 validator.validate();
66776 // Remove a single entity and all its related issues from the caches
66778 function uncacheEntityID(entityID) {
66779 var issueIDs = _issuesByEntityID[entityID];
66780 if (!issueIDs) return;
66782 issueIDs.forEach(function(issueID) {
66783 var issue = _issuesByIssueID[issueID];
66785 // When multiple entities are involved (e.g. crossing_ways),
66786 // remove this issue from the other entity caches too..
66787 var entityIds = issue.entityIds || [];
66788 entityIds.forEach(function(other) {
66789 if (other !== entityID) {
66790 if (_issuesByEntityID[other]) {
66791 _issuesByEntityID[other].delete(issueID);
66797 delete _issuesByIssueID[issueID];
66800 delete _issuesByEntityID[entityID];
66804 function ignoreIssue(id) {
66805 _ignoredIssueIDs[id] = true;
66810 // Run validation on a single entity
66812 function validateEntity(entity) {
66813 var entityIssues = [];
66816 // runs validation and appends resulting issues,
66817 // returning true if validation passed without issue
66818 function runValidation(key) {
66819 if (ran[key]) return true;
66821 var fn = _rules[key];
66822 if (typeof fn !== 'function') {
66823 console.error('no such validation rule = ' + key); // eslint-disable-line no-console
66828 var detected = fn(entity, context);
66829 detected.forEach(function(issue) {
66830 var hasIgnoreFix = issue.fixes && issue.fixes.length && issue.fixes[issue.fixes.length - 1].type === 'ignore';
66831 if (issue.severity === 'warning' && !hasIgnoreFix) {
66832 var ignoreFix = new validationIssueFix({
66833 title: t('issues.fix.ignore_issue.title'),
66834 icon: 'iD-icon-close',
66835 onClick: function() {
66836 ignoreIssue(this.issue.id);
66839 ignoreFix.type = 'ignore';
66840 ignoreFix.issue = issue;
66841 issue.fixes.push(ignoreFix);
66844 entityIssues = entityIssues.concat(detected);
66846 return !detected.length;
66849 // run some validations manually to control the order and to skip some
66851 runValidation('missing_role');
66853 if (entity.type === 'relation') {
66854 if (!runValidation('outdated_tags')) {
66855 // don't flag missing tags if they are on the outer way
66856 ran.missing_tag = true;
66860 runValidation('missing_tag');
66862 runValidation('outdated_tags');
66864 runValidation('crossing_ways');
66865 runValidation('almost_junction');
66867 // only check impossible_oneway if no disconnected_way issues
66868 if (runValidation('disconnected_way')) {
66869 runValidation('impossible_oneway');
66871 ran.impossible_oneway = true;
66874 runValidation('tag_suggests_area');
66876 // run all rules not yet run
66877 Object.keys(_rules).forEach(runValidation);
66879 return entityIssues;
66882 function entityIDsToValidate(entityIDs, graph) {
66883 var processedIDs = new Set();
66884 return entityIDs.reduce(function(acc, entityID) {
66885 // keep redundancy check separate from `acc` because an `entityID`
66886 // could have been added to `acc` as a related entity through an earlier pass
66887 if (processedIDs.has(entityID)) return acc;
66888 processedIDs.add(entityID);
66890 var entity = graph.hasEntity(entityID);
66891 if (!entity) return acc;
66895 var checkParentRels = [entity];
66897 if (entity.type === 'node') { // include parent ways
66898 graph.parentWays(entity).forEach(function(parentWay) {
66899 acc.add(parentWay.id);
66900 checkParentRels.push(parentWay);
66902 } else if (entity.type === 'relation') { // include members
66903 entity.members.forEach(function(member) {
66904 acc.add(member.id);
66906 } else if (entity.type === 'way') { // include connected ways
66907 entity.nodes.forEach(function(nodeID) {
66908 graph._parentWays[nodeID].forEach(function(wayID) {
66914 checkParentRels.forEach(function(entity) { // include parent relations
66915 if (entity.type !== 'relation') { // but not super-relations
66916 graph.parentRelations(entity).forEach(function(parentRelation) {
66917 acc.add(parentRelation.id);
66928 // Run validation for several entities, supplied `entityIDs`
66930 function validateEntities(entityIDs) {
66932 // clear caches for existing issues related to these entities
66933 entityIDs.forEach(uncacheEntityID);
66935 // detect new issues and update caches
66936 entityIDs.forEach(function(entityID) {
66937 var entity = context.graph().hasEntity(entityID);
66938 // don't validate deleted entities
66939 if (!entity) return;
66941 var issues = validateEntity(entity);
66942 issues.forEach(function(issue) {
66943 var entityIds = issue.entityIds || [];
66944 entityIds.forEach(function(entityId) {
66945 if (!_issuesByEntityID[entityId]) {
66946 _issuesByEntityID[entityId] = new Set();
66948 _issuesByEntityID[entityId].add(issue.id);
66950 _issuesByIssueID[issue.id] = issue;
66954 dispatch$1.call('validated');
66959 // Validates anything that has changed since the last time it was run.
66960 // Also updates the "validatedGraph" to be the current graph
66961 // and dispatches a `validated` event when finished.
66963 validator.validate = function() {
66964 var currGraph = context.graph();
66965 _validatedGraph = _validatedGraph || context.history().base();
66966 if (currGraph === _validatedGraph) {
66967 dispatch$1.call('validated');
66970 var oldGraph = _validatedGraph;
66971 var difference = coreDifference(oldGraph, currGraph);
66972 _validatedGraph = currGraph;
66974 for (var key in _rules) {
66975 if (typeof _rules[key].reset === 'function') {
66976 _rules[key].reset(); // 'crossing_ways' is the only one like this
66980 var createdAndModifiedEntityIDs = difference.extantIDs(true); // created/modified (true = w/relation members)
66981 var entityIDsToCheck = entityIDsToValidate(createdAndModifiedEntityIDs, currGraph);
66983 // "validate" deleted entities in order to update their related entities
66984 // (e.g. deleting the only highway connected to a road should create a disconnected highway issue)
66985 var deletedEntityIDs = difference.deleted().map(function(entity) { return entity.id; });
66986 var entityIDsToCheckForDeleted = entityIDsToValidate(deletedEntityIDs, oldGraph);
66989 entityIDsToCheckForDeleted.forEach(entityIDsToCheck.add, entityIDsToCheck);
66991 validateEntities(entityIDsToCheck); // dispatches 'validated'
66995 // WHEN TO RUN VALIDATION:
66996 // When graph changes:
66998 .on('restore.validator', validator.validate) // restore saved history
66999 .on('undone.validator', validator.validate) // undo
67000 .on('redone.validator', validator.validate); // redo
67001 // but not on 'change' (e.g. while drawing)
67003 // When user chages editing modes:
67005 .on('exit.validator', validator.validate);
67007 // When merging fetched data:
67009 .on('merge.validator', function(entities) {
67010 if (!entities) return;
67011 var handle = window.requestIdleCallback(function() {
67012 var ids = entities.map(function(entity) { return entity.id; });
67013 validateEntities(entityIDsToValidate(ids, context.graph()));
67015 _deferred.add(handle);
67022 function presetCollection(collection) {
67023 var maxSearchResults = 50;
67027 collection: collection,
67030 item: function(id) {
67031 return this.collection.find(function(d) {
67032 return d.id === id;
67036 index: function(id) {
67037 return this.collection.findIndex(function(d) {
67038 return d.id === id;
67042 matchGeometry: function(geometry) {
67043 return presetCollection(this.collection.filter(function(d) {
67044 return d.matchGeometry(geometry);
67048 matchAnyGeometry: function(geometries) {
67049 return presetCollection(this.collection.filter(function(d) {
67050 return geometries.some(function(geometry) {
67051 return d.matchGeometry(geometry);
67056 fallback: function(geometry) {
67058 if (id === 'vertex') id = 'point';
67059 return this.item(id);
67062 search: function(value, geometry, countryCode) {
67063 if (!value) return this;
67065 value = value.toLowerCase().trim();
67067 // match at name beginning or just after a space (e.g. "office" -> match "Law Office")
67068 function leading(a) {
67069 var index = a.indexOf(value);
67070 return index === 0 || a[index - 1] === ' ';
67073 // match at name beginning only
67074 function leadingStrict(a) {
67075 var index = a.indexOf(value);
67076 return index === 0;
67079 function sortNames(a, b) {
67080 var aCompare = (a.suggestion ? a.originalName : a.name()).toLowerCase();
67081 var bCompare = (b.suggestion ? b.originalName : b.name()).toLowerCase();
67083 // priority if search string matches preset name exactly - #4325
67084 if (value === aCompare) return -1;
67085 if (value === bCompare) return 1;
67087 // priority for higher matchScore
67088 var i = b.originalScore - a.originalScore;
67089 if (i !== 0) return i;
67091 // priority if search string appears earlier in preset name
67092 i = aCompare.indexOf(value) - bCompare.indexOf(value);
67093 if (i !== 0) return i;
67095 // priority for shorter preset names
67096 return aCompare.length - bCompare.length;
67099 var pool = this.collection;
67101 pool = pool.filter(function(a) {
67102 if (!a.countryCodes) return true;
67103 return a.countryCodes.indexOf(countryCode) !== -1;
67106 var searchable = pool.filter(function(a) {
67107 return a.searchable !== false && a.suggestion !== true;
67109 var suggestions = pool.filter(function(a) {
67110 return a.suggestion === true;
67113 // matches value to preset.name
67114 var leading_name = searchable
67115 .filter(function(a) {
67116 return leading(a.name().toLowerCase());
67117 }).sort(sortNames);
67119 // matches value to preset.terms values
67120 var leading_terms = searchable
67121 .filter(function(a) {
67122 return (a.terms() || []).some(leading);
67125 // matches value to preset.tags values
67126 var leading_tag_values = searchable
67127 .filter(function(a) {
67128 return Object.values(a.tags || {})
67129 .filter(function(val) { return val !== '*'; })
67133 var leading_suggestions = suggestions
67134 .filter(function(a) {
67135 return leadingStrict(a.originalName.toLowerCase());
67136 }).sort(sortNames);
67138 // finds close matches to value in preset.name
67139 var similar_name = searchable
67141 return { preset: a, dist: utilEditDistance(value, a.name()) };
67142 }).filter(function(a) {
67143 return a.dist + Math.min(value.length - a.preset.name().length, 0) < 3;
67144 }).sort(function(a, b) {
67145 return a.dist - b.dist;
67146 }).map(function(a) {
67150 // finds close matches to value in preset.terms
67151 var similar_terms = searchable
67152 .filter(function(a) {
67153 return (a.terms() || []).some(function(b) {
67154 return utilEditDistance(value, b) + Math.min(value.length - b.length, 0) < 3;
67158 var similar_suggestions = suggestions
67160 return { preset: a, dist: utilEditDistance(value, a.originalName.toLowerCase()) };
67161 }).filter(function(a) {
67162 return a.dist + Math.min(value.length - a.preset.originalName.length, 0) < 1;
67163 }).sort(function(a, b) {
67164 return a.dist - b.dist;
67165 }).map(function(a) {
67169 var results = leading_name.concat(
67170 leading_suggestions,
67172 leading_tag_values,
67174 similar_suggestions,
67176 ).slice(0, maxSearchResults - 1);
67179 if (typeof geometry === 'string') {
67180 results.push(presets.fallback(geometry));
67182 geometry.forEach(function(geom) {
67183 results.push(presets.fallback(geom));
67188 return presetCollection(utilArrayUniq(results));
67196 function presetCategory(id, category, all) {
67197 category = Object.assign({}, category); // shallow copy
67202 category.members = presetCollection(category.members.map(function(id) {
67203 return all.item(id);
67207 category.geometry = category.members.collection.reduce(function(geometries, preset) {
67208 for (var index in preset.geometry) {
67209 var geometry = preset.geometry[index];
67210 if (geometries.indexOf(geometry) === -1) {
67211 geometries.push(geometry);
67218 category.matchGeometry = function(geometry) {
67219 return category.geometry.indexOf(geometry) >= 0;
67223 category.matchScore = function() {
67228 category.name = function() {
67229 return t('presets.categories.' + id + '.name', {'default': id});
67233 category.terms = function() {
67241 function presetField(id, field) {
67242 field = Object.assign({}, field); // shallow copy
67246 // for use in classes, element ids, css selectors
67247 field.safeid = id.replace(/[^_a-zA-Z0-9\-]/g, '_');
67249 field.matchGeometry = function(geometry) {
67250 return !field.geometry || field.geometry === geometry;
67254 field.t = function(scope, options) {
67255 return t('presets.fields.' + id + '.' + scope, options);
67259 field.label = function() {
67260 return field.overrideLabel || field.t('label', {'default': id});
67264 var placeholder = field.placeholder;
67265 field.placeholder = function() {
67266 return field.t('placeholder', {'default': placeholder});
67273 function presetPreset(id, preset, fields, visible, rawPresets) {
67274 preset = Object.assign({}, preset); // shallow copy
67278 preset.parentPresetID = function() {
67279 var endIndex = preset.id.lastIndexOf('/');
67280 if (endIndex < 0) return null;
67282 return preset.id.substring(0, endIndex);
67286 // For a preset without fields, use the fields of the parent preset.
67287 // Replace {preset} placeholders with the fields of the specified presets.
67288 function resolveFieldInheritance() {
67290 // Skip `fields` for the keys which define the preset.
67291 // These are usually `typeCombo` fields like `shop=*`
67292 function shouldInheritFieldWithID(fieldID) {
67293 var f = fields[fieldID];
67295 if (preset.tags[f.key] !== undefined &&
67296 // inherit anyway if multiple values are allowed or just a checkbox
67297 f.type !== 'multiCombo' && f.type !== 'semiCombo' && f.type !== 'check') {
67304 // returns an array of field IDs to inherit from the given presetID, if found
67305 function inheritedFieldIDs(presetID, prop) {
67306 if (!presetID) return null;
67308 var inheritPreset = rawPresets[presetID];
67309 if (!inheritPreset) return null;
67311 var inheritFieldIDs = inheritPreset[prop] || [];
67313 if (prop === 'fields') {
67314 inheritFieldIDs = inheritFieldIDs.filter(shouldInheritFieldWithID);
67317 return inheritFieldIDs;
67321 ['fields', 'moreFields'].forEach(function(prop) {
67323 if (preset[prop] && preset[prop].length) { // fields were defined
67324 preset[prop].forEach(function(fieldID) {
67325 var match = fieldID.match(/\{(.*)\}/);
67326 if (match !== null) { // presetID wrapped in braces {}
67327 var inheritIDs = inheritedFieldIDs(match[1], prop);
67328 if (inheritIDs !== null) {
67329 fieldIDs = fieldIDs.concat(inheritIDs);
67331 /* eslint-disable no-console */
67332 console.log('Cannot resolve presetID ' + match[0] +
67333 ' found in ' + preset.id + ' ' + prop);
67334 /* eslint-enable no-console */
67337 fieldIDs.push(fieldID); // no braces - just a normal field
67341 } else { // no fields defined, so use the parent's if possible
67342 fieldIDs = inheritedFieldIDs(preset.parentPresetID(), prop);
67344 // resolve duplicate fields
67345 fieldIDs = utilArrayUniq(fieldIDs);
67347 // update this preset with the results
67348 preset[prop] = fieldIDs;
67350 // update the raw object to allow for multiple levels of inheritance
67351 rawPresets[preset.id][prop] = fieldIDs;
67356 resolveFieldInheritance();
67359 preset.fields = (preset.fields || []).map(getFields);
67360 preset.moreFields = (preset.moreFields || []).map(getFields);
67361 preset.geometry = (preset.geometry || []);
67363 visible = visible || false;
67365 function getFields(f) {
67370 preset.matchGeometry = function(geometry) {
67371 return preset.geometry.indexOf(geometry) >= 0;
67375 preset.originalScore = preset.matchScore || 1;
67378 preset.matchScore = function(entityTags) {
67379 var tags = preset.tags;
67382 for (var t in tags) {
67383 if (entityTags[t] === tags[t]) {
67384 score += preset.originalScore;
67385 } else if (tags[t] === '*' && t in entityTags) {
67386 score += preset.originalScore / 2;
67395 var _textCache = {};
67397 preset.t = function(scope, options) {
67398 var textID = 'presets.presets.' + id + '.' + scope;
67400 if (_textCache[textID]) return _textCache[textID];
67402 var text = t(textID, options);
67403 _textCache[textID] = text;
67408 preset.originalName = preset.name || '';
67411 preset.name = function() {
67412 if (preset.suggestion) {
67413 var path = id.split('/');
67414 path.pop(); // remove brand name
67415 // NOTE: insert an en-dash, not a hypen (to avoid conflict with fr - nl names in Brussels etc)
67416 return preset.originalName + ' – ' + t('presets.presets.' + path.join('/') + '.name');
67418 return preset.t('name', { 'default': preset.originalName });
67422 preset.originalTerms = (preset.terms || []).join();
67425 preset.terms = function() {
67426 return preset.t('terms', { 'default': preset.originalTerms }).toLowerCase().trim().split(/\s*,+\s*/);
67430 preset.isFallback = function() {
67431 var tagCount = Object.keys(preset.tags).length;
67432 return tagCount === 0 || (tagCount === 1 && preset.tags.hasOwnProperty('area'));
67435 preset.visible = function(val) {
67436 if (!arguments.length) return visible;
67442 var reference = preset.reference || {};
67443 preset.reference = function(geometry) {
67444 // Lookup documentation on Wikidata...
67445 var qid = preset.tags.wikidata || preset.tags['brand:wikidata'] || preset.tags['operator:wikidata'];
67447 return { qid: qid };
67450 // Lookup documentation on OSM Wikibase...
67451 var key = reference.key || Object.keys(utilObjectOmit(preset.tags, 'name'))[0];
67452 var value = reference.value || preset.tags[key];
67454 if (geometry === 'relation' && key === 'type') {
67455 if (value in preset.tags) {
67457 value = preset.tags[key];
67459 return { rtype: value };
67463 if (value === '*') {
67464 return { key: key };
67466 return { key: key, value: value };
67471 preset.removeTags = preset.removeTags || preset.addTags || preset.tags || {};
67472 preset.unsetTags = function(tags, geometry) {
67473 tags = utilObjectOmit(tags, Object.keys(preset.removeTags));
67475 for (var f in preset.fields) {
67476 var field = preset.fields[f];
67477 if (field.matchGeometry(geometry) && field.default === tags[field.key]) {
67478 delete tags[field.key];
67487 preset.addTags = preset.addTags || preset.tags || {};
67488 preset.setTags = function(tags, geometry, skipFieldDefaults) {
67489 var addTags = preset.addTags;
67492 tags = Object.assign({}, tags); // shallow copy
67494 for (k in addTags) {
67495 if (addTags[k] === '*') {
67498 tags[k] = addTags[k];
67502 // Add area=yes if necessary.
67503 // This is necessary if the geometry is already an area (e.g. user drew an area) AND any of:
67504 // 1. chosen preset could be either an area or a line (`barrier=city_wall`)
67505 // 2. chosen preset doesn't have a key in osmAreaKeys (`railway=station`)
67506 if (!addTags.hasOwnProperty('area')) {
67508 if (geometry === 'area') {
67509 var needsAreaTag = true;
67510 if (preset.geometry.indexOf('line') === -1) {
67511 for (k in addTags) {
67512 if (k in osmAreaKeys) {
67513 needsAreaTag = false;
67518 if (needsAreaTag) {
67523 if (geometry && !skipFieldDefaults) {
67524 for (var f in preset.fields) {
67525 var field = preset.fields[f];
67526 if (field.matchGeometry(geometry) && field.key && !tags[field.key] && field.default) {
67527 tags[field.key] = field.default;
67539 function presetIndex(context) {
67540 // a presetCollection with methods for
67541 // loading new data and returning defaults
67543 var dispatch$1 = dispatch('recentsChange', 'favoritePreset');
67545 var all = presetCollection([]);
67546 var _defaults = { area: all, line: all, point: all, vertex: all, relation: all };
67548 var _universal = [];
67549 var _favorites, _recents;
67551 // Index of presets by (geometry, tag key).
67560 all.match = function(entity, resolver) {
67561 return resolver.transient(entity, 'presetMatch', function() {
67562 var geometry = entity.geometry(resolver);
67564 // Treat entities on addr:interpolation lines as points, not vertices - #3241
67565 if (geometry === 'vertex' && entity.isOnAddressLine(resolver)) {
67566 geometry = 'point';
67569 return all.matchTags(entity.tags, geometry);
67573 all.matchTags = function(tags, geometry) {
67576 var geometryMatches = _index[geometry];
67580 for (var k in tags) {
67581 // If any part of an address is present,
67582 // allow fallback to "Address" preset - #4353
67583 if (/^addr:/.test(k) && geometryMatches['addr:*']) {
67584 address = geometryMatches['addr:*'][0];
67587 var keyMatches = geometryMatches[k];
67588 if (!keyMatches) continue;
67590 for (var i = 0; i < keyMatches.length; i++) {
67591 var score = keyMatches[i].matchScore(tags);
67592 if (score > best) {
67594 match = keyMatches[i];
67600 if (address && (!match || match.isFallback())) {
67603 return match || all.fallback(geometry);
67606 all.allowsVertex = function(entity, resolver) {
67607 if (entity.type !== 'node') return false;
67608 if (Object.keys(entity.tags).length === 0) return true;
67610 return resolver.transient(entity, 'vertexMatch', function() {
67611 // address lines allow vertices to act as standalone points
67612 if (entity.isOnAddressLine(resolver)) return true;
67614 var geometries = osmNodeGeometriesForTags(entity.tags);
67615 if (geometries.vertex) return true;
67616 if (geometries.point) return false;
67617 // allow vertices for unspecified points
67623 // Because of the open nature of tagging, iD will never have a complete
67624 // list of tags used in OSM, so we want it to have logic like "assume
67625 // that a closed way with an amenity tag is an area, unless the amenity
67626 // is one of these specific types". This function computes a structure
67627 // that allows testing of such conditions, based on the presets designated
67628 // as as supporting (or not supporting) the area geometry.
67630 // The returned object L is a whitelist/blacklist of tags. A closed way
67631 // with a tag (k, v) is considered to be an area if `k in L && !(v in L[k])`
67632 // (see `Way#isArea()`). In other words, the keys of L form the whitelist,
67633 // and the subkeys form the blacklist.
67634 all.areaKeys = function() {
67636 var ignore = ['barrier', 'highway', 'footway', 'railway', 'type']; // probably a line..
67638 // ignore name-suggestion-index and deprecated presets
67639 var presets = all.collection.filter(function(p) {
67640 return !p.suggestion && !p.replacement;
67644 presets.forEach(function(d) {
67645 for (var key in d.tags) break;
67647 if (ignore.indexOf(key) !== -1) return;
67649 if (d.geometry.indexOf('area') !== -1) { // probably an area..
67650 areaKeys[key] = areaKeys[key] || {};
67655 presets.forEach(function(d) {
67656 for (var key in d.tags) break;
67658 if (ignore.indexOf(key) !== -1) return;
67660 var value = d.tags[key];
67661 if (key in areaKeys && // probably an area...
67662 d.geometry.indexOf('line') !== -1 && // but sometimes a line
67664 areaKeys[key][value] = true;
67671 all.pointTags = function() {
67672 return all.collection.reduce(function(pointTags, d) {
67673 // ignore name-suggestion-index, deprecated, and generic presets
67674 if (d.suggestion || d.replacement || d.searchable === false) return pointTags;
67676 // only care about the primary tag
67677 for (var key in d.tags) break;
67678 if (!key) return pointTags;
67680 // if this can be a point
67681 if (d.geometry.indexOf('point') !== -1) {
67682 pointTags[key] = pointTags[key] || {};
67683 pointTags[key][d.tags[key]] = true;
67689 all.vertexTags = function() {
67690 return all.collection.reduce(function(vertexTags, d) {
67691 // ignore name-suggestion-index, deprecated, and generic presets
67692 if (d.suggestion || d.replacement || d.searchable === false) return vertexTags;
67694 // only care about the primary tag
67695 for (var key in d.tags) break;
67696 if (!key) return vertexTags;
67698 // if this can be a vertex
67699 if (d.geometry.indexOf('vertex') !== -1) {
67700 vertexTags[key] = vertexTags[key] || {};
67701 vertexTags[key][d.tags[key]] = true;
67707 all.build = function(d, visible) {
67709 Object.keys(d.fields).forEach(function(id) {
67710 var f = d.fields[id];
67711 _fields[id] = presetField(id, f);
67713 _universal.push(_fields[id]);
67719 var rawPresets = d.presets;
67720 Object.keys(d.presets).forEach(function(id) {
67721 var p = d.presets[id];
67722 var existing = all.index(id);
67723 if (existing !== -1) {
67724 all.collection[existing] = presetPreset(id, p, _fields, visible, rawPresets);
67726 all.collection.push(presetPreset(id, p, _fields, visible, rawPresets));
67731 if (d.categories) {
67732 Object.keys(d.categories).forEach(function(id) {
67733 var c = d.categories[id];
67734 var existing = all.index(id);
67735 if (existing !== -1) {
67736 all.collection[existing] = presetCategory(id, c, all);
67738 all.collection.push(presetCategory(id, c, all));
67744 var getItem = (all.item).bind(all);
67746 area: presetCollection(d.defaults.area.map(getItem)),
67747 line: presetCollection(d.defaults.line.map(getItem)),
67748 point: presetCollection(d.defaults.point.map(getItem)),
67749 vertex: presetCollection(d.defaults.vertex.map(getItem)),
67750 relation: presetCollection(d.defaults.relation.map(getItem))
67754 for (var i = 0; i < all.collection.length; i++) {
67755 var preset = all.collection[i];
67756 var geometry = preset.geometry;
67758 for (var j = 0; j < geometry.length; j++) {
67759 var g = _index[geometry[j]];
67760 for (var k in preset.tags) {
67761 (g[k] = g[k] || []).push(preset);
67768 all.init = function() {
67769 all.collection = [];
67774 _index = { point: {}, vertex: {}, line: {}, area: {}, relation: {} };
67776 return all.build(data.presets, true);
67780 all.reset = function() {
67781 all.collection = [];
67782 _defaults = { area: all, line: all, point: all, vertex: all, relation: all };
67788 // Index of presets by (geometry, tag key).
67800 all.fromExternal = function(external, done) {
67803 .then(function(externalPresets) {
67804 all.build(data.presets, false); // make default presets hidden to begin
67805 all.build(externalPresets, true); // make the external visible
67807 .catch(function() {
67810 .finally(function() {
67815 all.field = function(id) {
67816 return _fields[id];
67819 all.universal = function() {
67823 all.defaults = function(geometry, n) {
67825 if (!context.inIntro()) {
67826 rec = all.recent().matchGeometry(geometry).collection.slice(0, 4);
67828 var def = utilArrayUniq(rec.concat(_defaults[geometry].collection)).slice(0, n - 1);
67829 return presetCollection(utilArrayUniq(rec.concat(def).concat(all.fallback(geometry))));
67832 all.recent = function() {
67833 return presetCollection(utilArrayUniq(all.getRecents().map(function(d) {
67838 function RibbonItem(preset, geometry, source) {
67840 item.preset = preset;
67841 item.geometry = geometry;
67842 item.source = source;
67844 item.isFavorite = function() {
67845 return item.source === 'favorite';
67847 item.isRecent = function() {
67848 return item.source === 'recent';
67850 item.matches = function(preset, geometry) {
67851 return item.preset.id === preset.id && item.geometry === geometry;
67853 item.minified = function() {
67855 pID: item.preset.id,
67856 geom: item.geometry
67862 function ribbonItemForMinified(d, source) {
67863 if (d && d.pID && d.geom) {
67864 var preset = all.item(d.pID);
67865 if (!preset) return null;
67868 // treat point and vertex features as one geometry
67869 if (geom === 'vertex') geom = 'point';
67871 // iD's presets could have changed since this was saved,
67872 // so make sure it's still valid.
67873 if (preset.matchGeometry(geom) || (geom === 'point' && preset.matchGeometry('vertex'))) {
67874 return RibbonItem(preset, geom, source);
67880 function setFavorites(items) {
67881 _favorites = items;
67882 var minifiedItems = items.map(function(d) { return d.minified(); });
67883 context.storage('preset_favorites', JSON.stringify(minifiedItems));
67886 dispatch$1.call('favoritePreset');
67889 all.getFavorites = function() {
67891 // fetch from local storage
67892 _favorites = (JSON.parse(context.storage('preset_favorites')) || [
67893 // use the generic presets as the default favorites
67894 { pID: 'point', geom: 'point'},
67895 { pID: 'line', geom: 'line'},
67896 { pID: 'area', geom: 'area'}
67897 ]).reduce(function(output, d) {
67898 var item = ribbonItemForMinified(d, 'favorite');
67899 if (item) output.push(item);
67906 function setRecents(items) {
67908 var minifiedItems = items.map(function(d) { return d.minified(); });
67909 context.storage('preset_recents', JSON.stringify(minifiedItems));
67911 dispatch$1.call('recentsChange');
67914 all.getRecents = function() {
67916 // fetch from local storage
67917 _recents = (JSON.parse(context.storage('preset_recents')) || [])
67918 .reduce(function(output, d) {
67919 var item = ribbonItemForMinified(d, 'recent');
67920 if (item) output.push(item);
67927 all.toggleFavorite = function(preset, geometry) {
67928 geometry = all.fallback(geometry).id;
67929 var favs = all.getFavorites();
67930 var favorite = all.favoriteMatching(preset, geometry);
67932 favs.splice(favs.indexOf(favorite), 1);
67934 // only allow 10 favorites
67935 if (favs.length === 10) {
67936 // remove the last favorite (last in, first out)
67940 favs.push(RibbonItem(preset, geometry, 'favorite'));
67942 setFavorites(favs);
67945 all.removeFavorite = function(preset, geometry) {
67946 geometry = all.fallback(geometry).id;
67947 var item = all.favoriteMatching(preset, geometry);
67949 var items = all.getFavorites();
67950 items.splice(items.indexOf(item), 1);
67951 setFavorites(items);
67955 all.removeRecent = function(preset, geometry) {
67956 var item = all.recentMatching(preset, geometry);
67958 var items = all.getRecents();
67959 items.splice(items.indexOf(item), 1);
67964 all.favoriteMatching = function(preset, geometry) {
67965 geometry = all.fallback(geometry).id;
67966 var favs = all.getFavorites();
67967 for (var index in favs) {
67968 if (favs[index].matches(preset, geometry)) {
67969 return favs[index];
67974 all.recentMatching = function(preset, geometry) {
67975 geometry = all.fallback(geometry).id;
67976 var items = all.getRecents();
67977 for (var index in items) {
67978 if (items[index].matches(preset, geometry)) {
67979 return items[index];
67985 all.moveItem = function(items, fromIndex, toIndex) {
67986 if (fromIndex === toIndex ||
67987 fromIndex < 0 || toIndex < 0 ||
67988 fromIndex >= items.length || toIndex >= items.length) return null;
67989 items.splice(toIndex, 0, items.splice(fromIndex, 1)[0]);
67993 all.moveFavorite = function(fromIndex, toIndex) {
67994 var items = all.moveItem(all.getFavorites(), fromIndex, toIndex);
67995 if (items) setFavorites(items);
67998 all.moveRecent = function(item, beforeItem) {
67999 var recents = all.getRecents();
68000 var fromIndex = recents.indexOf(item);
68001 var toIndex = recents.indexOf(beforeItem);
68002 var items = all.moveItem(recents, fromIndex, toIndex);
68003 if (items) setRecents(items);
68006 all.setMostRecent = function(preset, geometry) {
68007 if (context.inIntro()) return;
68008 if (preset.searchable === false) return;
68010 geometry = all.fallback(geometry).id;
68012 var items = all.getRecents();
68013 var item = all.recentMatching(preset, geometry);
68015 items.splice(items.indexOf(item), 1);
68017 item = RibbonItem(preset, geometry, 'recent');
68019 // allow 30 recents
68020 if (items.length === 30) {
68021 // remove the last favorite (first in, first out)
68025 items.unshift(item);
68029 return utilRebind(all, dispatch$1, 'on');
68032 function localeDateString(s) {
68033 if (!s) return null;
68034 var detected = utilDetect();
68035 var options = { day: 'numeric', month: 'short', year: 'numeric' };
68036 var d = new Date(s);
68037 if (isNaN(d.getTime())) return null;
68038 return d.toLocaleDateString(detected.locale, options);
68041 function vintageRange(vintage) {
68043 if (vintage.start || vintage.end) {
68044 s = (vintage.start || '?');
68045 if (vintage.start !== vintage.end) {
68046 s += ' - ' + (vintage.end || '?');
68053 function rendererBackgroundSource(data) {
68054 var source = Object.assign({}, data); // shallow copy
68055 var offset = [0, 0];
68056 var name = source.name;
68057 var description = source.description;
68058 var best = !!source.best;
68059 var template = source.template;
68061 source.tileSize = data.tileSize || 256;
68062 source.zoomExtent = data.zoomExtent || [0, 22];
68063 source.overzoom = data.overzoom !== false;
68065 source.offset = function(_) {
68066 if (!arguments.length) return offset;
68072 source.nudge = function(val, zoomlevel) {
68073 offset[0] += val[0] / Math.pow(2, zoomlevel);
68074 offset[1] += val[1] / Math.pow(2, zoomlevel);
68079 source.name = function() {
68080 var id_safe = source.id.replace(/\./g, '<TX_DOT>');
68081 return t('imagery.' + id_safe + '.name', { default: name });
68085 source.description = function() {
68086 var id_safe = source.id.replace(/\./g, '<TX_DOT>');
68087 return t('imagery.' + id_safe + '.description', { default: description });
68091 source.best = function() {
68096 source.area = function() {
68097 if (!data.polygon) return Number.MAX_VALUE; // worldwide
68098 var area = d3_geoArea({ type: 'MultiPolygon', coordinates: [ data.polygon ] });
68099 return isNaN(area) ? 0 : area;
68103 source.imageryUsed = function() {
68104 return name || source.id;
68108 source.template = function(_) {
68109 if (!arguments.length) return template;
68110 if (source.id === 'custom') template = _;
68115 source.url = function(coord) {
68116 if (this.type === 'wms') {
68117 var tileToProjectedCoords = (function(x, y, z) {
68118 //polyfill for IE11, PhantomJS
68119 var sinh = Math.sinh || function(x) {
68120 var y = Math.exp(x);
68121 return (y - 1 / y) / 2;
68124 var zoomSize = Math.pow(2, z);
68125 var lon = x / zoomSize * Math.PI * 2 - Math.PI;
68126 var lat = Math.atan(sinh(Math.PI * (1 - 2 * y / zoomSize)));
68128 switch (this.projection) {
68131 x: lon * 180 / Math.PI,
68132 y: lat * 180 / Math.PI
68134 default: // EPSG:3857 and synonyms
68135 var mercCoords = mercatorRaw(lon, lat);
68137 x: 20037508.34 / Math.PI * mercCoords[0],
68138 y: 20037508.34 / Math.PI * mercCoords[1]
68143 var tileSize = this.tileSize;
68144 var projection = this.projection;
68145 var minXmaxY = tileToProjectedCoords(coord[0], coord[1], coord[2]);
68146 var maxXminY = tileToProjectedCoords(coord[0]+1, coord[1]+1, coord[2]);
68147 return template.replace(/\{(\w+)\}/g, function (token, key) {
68155 return projection.replace(/^EPSG:/, '');
68157 return minXmaxY.x + ',' + maxXminY.y + ',' + maxXminY.x + ',' + minXmaxY.y;
68172 .replace('{x}', coord[0])
68173 .replace('{y}', coord[1])
68174 // TMS-flipped y coordinate
68175 .replace(/\{[t-]y\}/, Math.pow(2, coord[2]) - coord[1] - 1)
68176 .replace(/\{z(oom)?\}/, coord[2])
68177 .replace(/\{switch:([^}]+)\}/, function(s, r) {
68178 var subdomains = r.split(',');
68179 return subdomains[(coord[0] + coord[1]) % subdomains.length];
68181 .replace('{u}', function() {
68183 for (var zoom = coord[2]; zoom > 0; zoom--) {
68185 var mask = 1 << (zoom - 1);
68186 if ((coord[0] & mask) !== 0) b++;
68187 if ((coord[1] & mask) !== 0) b += 2;
68195 source.validZoom = function(z) {
68196 return source.zoomExtent[0] <= z &&
68197 (source.overzoom || source.zoomExtent[1] > z);
68201 source.isLocatorOverlay = function() {
68202 return source.id === 'mapbox_locator_overlay';
68206 /* hides a source from the list, but leaves it available for use */
68207 source.isHidden = function() {
68208 return source.id === 'DigitalGlobe-Premium-vintage' ||
68209 source.id === 'DigitalGlobe-Standard-vintage';
68213 source.copyrightNotices = function() {};
68216 source.getMetadata = function(center, tileCoord, callback) {
68218 start: localeDateString(source.startDate),
68219 end: localeDateString(source.endDate)
68221 vintage.range = vintageRange(vintage);
68223 var metadata = { vintage: vintage };
68224 callback(null, metadata);
68232 rendererBackgroundSource.Bing = function(data, dispatch) {
68233 // http://msdn.microsoft.com/en-us/library/ff701716.aspx
68234 // http://msdn.microsoft.com/en-us/library/ff701701.aspx
68236 data.template = 'https://ecn.t{switch:0,1,2,3}.tiles.virtualearth.net/tiles/a{u}.jpeg?g=587&mkt=en-gb&n=z';
68238 var bing = rendererBackgroundSource(data);
68239 // var key = 'Arzdiw4nlOJzRwOz__qailc8NiR31Tt51dN2D7cm57NrnceZnCpgOkmJhNpGoppU'; // P2, JOSM, etc
68240 var key = 'Ak5oTE46TUbjRp08OFVcGpkARErDobfpuyNKa-W2mQ8wbt1K1KL8p1bIRwWwcF-Q'; // iD
68243 var url = 'https://dev.virtualearth.net/REST/v1/Imagery/Metadata/Aerial?include=ImageryProviders&key=' + key;
68246 var providers = [];
68249 .then(function(json) {
68250 providers = json.resourceSets[0].resources[0].imageryProviders.map(function(provider) {
68252 attribution: provider.attribution,
68253 areas: provider.coverageAreas.map(function(area) {
68255 zoom: [area.zoomMin, area.zoomMax],
68256 extent: geoExtent([area.bbox[1], area.bbox[0]], [area.bbox[3], area.bbox[2]])
68261 dispatch.call('change');
68263 .catch(function() {
68268 bing.copyrightNotices = function(zoom, extent) {
68269 zoom = Math.min(zoom, 21);
68270 return providers.filter(function(provider) {
68271 return provider.areas.some(function(area) {
68272 return extent.intersects(area.extent) &&
68273 area.zoom[0] <= zoom &&
68274 area.zoom[1] >= zoom;
68276 }).map(function(provider) {
68277 return provider.attribution;
68282 bing.getMetadata = function(center, tileCoord, callback) {
68283 var tileID = tileCoord.slice(0, 3).join('/');
68284 var zoom = Math.min(tileCoord[2], 21);
68285 var centerPoint = center[1] + ',' + center[0]; // lat,lng
68286 var url = 'https://dev.virtualearth.net/REST/v1/Imagery/Metadata/Aerial/' + centerPoint +
68287 '?zl=' + zoom + '&key=' + key;
68289 if (inflight[tileID]) return;
68291 if (!cache[tileID]) {
68292 cache[tileID] = {};
68294 if (cache[tileID] && cache[tileID].metadata) {
68295 return callback(null, cache[tileID].metadata);
68298 inflight[tileID] = true;
68300 .then(function(result) {
68301 delete inflight[tileID];
68303 throw new Error('Unknown Error');
68306 start: localeDateString(result.resourceSets[0].resources[0].vintageStart),
68307 end: localeDateString(result.resourceSets[0].resources[0].vintageEnd)
68309 vintage.range = vintageRange(vintage);
68311 var metadata = { vintage: vintage };
68312 cache[tileID].metadata = metadata;
68313 if (callback) callback(null, metadata);
68315 .catch(function(err) {
68316 delete inflight[tileID];
68317 if (callback) callback(err.message);
68322 bing.terms_url = 'https://blog.openstreetmap.org/2010/11/30/microsoft-imagery-details';
68330 rendererBackgroundSource.Esri = function(data) {
68331 // in addition to using the tilemap at zoom level 20, overzoom real tiles - #4327 (deprecated technique, but it works)
68332 if (data.template.match(/blankTile/) === null) {
68333 data.template = data.template + '?blankTile=false';
68336 var esri = rendererBackgroundSource(data);
68341 // use a tilemap service to set maximum zoom for esri tiles dynamically
68342 // https://developers.arcgis.com/documentation/tiled-elevation-service/
68343 esri.fetchTilemap = function(center) {
68344 // skip if we have already fetched a tilemap within 5km
68345 if (_prevCenter && geoSphericalDistance(center, _prevCenter) < 5000) return;
68346 _prevCenter = center;
68348 // tiles are available globally to zoom level 19, afterward they may or may not be present
68351 // first generate a random url using the template
68352 var dummyUrl = esri.url([1,2,3]);
68354 // calculate url z/y/x from the lat/long of the center of the map
68355 var x = (Math.floor((center[0] + 180) / 360 * Math.pow(2, z)));
68356 var y = (Math.floor((1 - Math.log(Math.tan(center[1] * Math.PI / 180) + 1 / Math.cos(center[1] * Math.PI / 180)) / Math.PI) / 2 * Math.pow(2, z)));
68358 // fetch an 8x8 grid to leverage cache
68359 var tilemapUrl = dummyUrl.replace(/tile\/[0-9]+\/[0-9]+\/[0-9]+\?blankTile=false/, 'tilemap') + '/' + z + '/' + y + '/' + x + '/8/8';
68361 // make the request and introspect the response from the tilemap server
68362 d3_json(tilemapUrl)
68363 .then(function(tilemap) {
68365 throw new Error('Unknown Error');
68367 var hasTiles = true;
68368 for (var i = 0; i < tilemap.data.length; i++) {
68369 // 0 means an individual tile in the grid doesn't exist
68370 if (!tilemap.data[i]) {
68376 // if any tiles are missing at level 20 we restrict maxZoom to 19
68377 esri.zoomExtent[1] = (hasTiles ? 22 : 19);
68379 .catch(function() {
68385 esri.getMetadata = function(center, tileCoord, callback) {
68386 var tileID = tileCoord.slice(0, 3).join('/');
68387 var zoom = Math.min(tileCoord[2], esri.zoomExtent[1]);
68388 var centerPoint = center[0] + ',' + center[1]; // long, lat (as it should be)
68389 var unknown = t('info_panels.background.unknown');
68394 if (inflight[tileID]) return;
68397 case (zoom >= 20 && esri.id === 'EsriWorldImageryClarity'):
68410 metadataLayer = 99;
68414 // build up query using the layer appropriate to the current zoom
68415 if (esri.id === 'EsriWorldImagery') {
68416 url = 'https://services.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/';
68417 } else if (esri.id === 'EsriWorldImageryClarity') {
68418 url = 'https://serviceslab.arcgisonline.com/arcgis/rest/services/Clarity_World_Imagery/MapServer/';
68421 url += metadataLayer + '/query?returnGeometry=false&geometry=' + centerPoint + '&inSR=4326&geometryType=esriGeometryPoint&outFields=*&f=json';
68423 if (!cache[tileID]) {
68424 cache[tileID] = {};
68426 if (cache[tileID] && cache[tileID].metadata) {
68427 return callback(null, cache[tileID].metadata);
68430 // accurate metadata is only available >= 13
68431 if (metadataLayer === 99) {
68440 description: unknown,
68441 resolution: unknown,
68445 callback(null, metadata);
68448 inflight[tileID] = true;
68450 .then(function(result) {
68451 delete inflight[tileID];
68453 throw new Error('Unknown Error');
68454 } else if (result.features && result.features.length < 1) {
68455 throw new Error('No Results');
68456 } else if (result.error && result.error.message) {
68457 throw new Error(result.error.message);
68460 // pass through the discrete capture date from metadata
68461 var captureDate = localeDateString(result.features[0].attributes.SRC_DATE2);
68463 start: captureDate,
68469 source: clean(result.features[0].attributes.NICE_NAME),
68470 description: clean(result.features[0].attributes.NICE_DESC),
68471 resolution: clean(result.features[0].attributes.SRC_RES),
68472 accuracy: clean(result.features[0].attributes.SRC_ACC)
68475 // append units - meters
68476 if (isFinite(metadata.resolution)) {
68477 metadata.resolution += ' m';
68479 if (isFinite(metadata.accuracy)) {
68480 metadata.accuracy += ' m';
68483 cache[tileID].metadata = metadata;
68484 if (callback) callback(null, metadata);
68486 .catch(function(err) {
68487 delete inflight[tileID];
68488 if (callback) callback(err.message);
68493 function clean(val) {
68494 return String(val).trim() || unknown;
68502 rendererBackgroundSource.None = function() {
68503 var source = rendererBackgroundSource({ id: 'none', template: '' });
68506 source.name = function() {
68507 return t('background.none');
68511 source.imageryUsed = function() {
68516 source.area = function() {
68517 return -1; // sources in background pane are sorted by area
68525 rendererBackgroundSource.Custom = function(template) {
68526 var source = rendererBackgroundSource({ id: 'custom', template: template });
68529 source.name = function() {
68530 return t('background.custom');
68534 source.imageryUsed = function() {
68535 return 'Custom (' + source.template() + ')';
68539 source.area = function() {
68540 return -2; // sources in background pane are sorted by area
68547 function rendererTileLayer(context) {
68548 var transformProp = utilPrefixCSSProperty('Transform');
68549 var tiler = utilTiler();
68551 var _tileSize = 256;
68559 function tileSizeAtZoom(d, z) {
68560 var EPSILON = 0.002; // close seams
68561 return ((_tileSize * Math.pow(2, z - d[2])) / _tileSize) + EPSILON;
68565 function atZoom(t, distance) {
68566 var power = Math.pow(2, distance);
68568 Math.floor(t[0] * power),
68569 Math.floor(t[1] * power),
68575 function lookUp(d) {
68576 for (var up = -1; up > -d[2]; up--) {
68577 var tile = atZoom(d, up);
68578 if (_cache[_source.url(tile)] !== false) {
68585 function uniqueBy(a, n) {
68588 for (var i = 0; i < a.length; i++) {
68589 if (seen[a[i][n]] === undefined) {
68591 seen[a[i][n]] = true;
68598 function addSource(d) {
68599 d.push(_source.url(d));
68604 // Update tiles based on current state of `projection`.
68605 function background(selection) {
68606 _zoom = geoScaleToZoom(_projection.scale(), _tileSize);
68611 _source.offset()[0] * Math.pow(2, _zoom),
68612 _source.offset()[1] * Math.pow(2, _zoom)
68615 pixelOffset = [0, 0];
68619 _projection.translate()[0] + pixelOffset[0],
68620 _projection.translate()[1] + pixelOffset[1]
68624 .scale(_projection.scale() * 2 * Math.PI)
68625 .translate(translate);
68628 _projection.scale() * Math.PI - translate[0],
68629 _projection.scale() * Math.PI - translate[1]
68636 // Derive the tiles onscreen, remove those offscreen and position them.
68637 // Important that this part not depend on `_projection` because it's
68638 // rentered when tiles load/error (see #644).
68639 function render(selection) {
68640 if (!_source) return;
68642 var showDebug = context.getDebug('tile') && !_source.overlay;
68644 if (_source.validZoom(_zoom)) {
68645 tiler.skipNullIsland(!!_source.overlay);
68647 tiler().forEach(function(d) {
68649 if (d[3] === '') return;
68650 if (typeof d[3] !== 'string') return; // Workaround for #2295
68652 if (_cache[d[3]] === false && lookUp(d)) {
68653 requests.push(addSource(lookUp(d)));
68657 requests = uniqueBy(requests, 3).filter(function(r) {
68658 // don't re-request tiles which have failed in the past
68659 return _cache[r[3]] !== false;
68664 _cache[d[3]] = true;
68668 .classed('tile-loaded', true);
68672 function error(d) {
68673 _cache[d[3]] = false;
68681 function imageTransform(d) {
68682 var ts = _tileSize * Math.pow(2, _zoom - d[2]);
68683 var scale = tileSizeAtZoom(d, _zoom);
68684 return 'translate(' +
68685 ((d[0] * ts) - _tileOrigin[0]) + 'px,' +
68686 ((d[1] * ts) - _tileOrigin[1]) + 'px) ' +
68687 'scale(' + scale + ',' + scale + ')';
68690 function tileCenter(d) {
68691 var ts = _tileSize * Math.pow(2, _zoom - d[2]);
68693 ((d[0] * ts) - _tileOrigin[0] + (ts / 2)),
68694 ((d[1] * ts) - _tileOrigin[1] + (ts / 2))
68698 function debugTransform(d) {
68699 var coord = tileCenter(d);
68700 return 'translate(' + coord[0] + 'px,' + coord[1] + 'px)';
68704 // Pick a representative tile near the center of the viewport
68705 // (This is useful for sampling the imagery vintage)
68706 var dims = tiler.size();
68707 var mapCenter = [dims[0] / 2, dims[1] / 2];
68708 var minDist = Math.max(dims[0], dims[1]);
68711 requests.forEach(function(d) {
68712 var c = tileCenter(d);
68713 var dist = geoVecLength(c, mapCenter);
68714 if (dist < minDist) {
68721 var image = selection.selectAll('img')
68722 .data(requests, function(d) { return d[3]; });
68725 .style(transformProp, imageTransform)
68726 .classed('tile-removing', true)
68727 .classed('tile-center', false)
68729 var tile = d3_select(this);
68730 window.setTimeout(function() {
68731 if (tile.classed('tile-removing')) {
68739 .attr('class', 'tile')
68740 .attr('src', function(d) { return d[3]; })
68741 .on('error', error)
68744 .style(transformProp, imageTransform)
68745 .classed('tile-debug', showDebug)
68746 .classed('tile-removing', false)
68747 .classed('tile-center', function(d) { return d === nearCenter; });
68751 var debug = selection.selectAll('.tile-label-debug')
68752 .data(showDebug ? requests : [], function(d) { return d[3]; });
68758 var debugEnter = debug.enter()
68760 .attr('class', 'tile-label-debug');
68764 .attr('class', 'tile-label-debug-coord');
68768 .attr('class', 'tile-label-debug-vintage');
68770 debug = debug.merge(debugEnter);
68773 .style(transformProp, debugTransform);
68776 .selectAll('.tile-label-debug-coord')
68777 .text(function(d) { return d[2] + ' / ' + d[0] + ' / ' + d[1]; });
68780 .selectAll('.tile-label-debug-vintage')
68781 .each(function(d) {
68782 var span = d3_select(this);
68783 var center = context.projection.invert(tileCenter(d));
68784 _source.getMetadata(center, d, function(err, result) {
68785 span.text((result && result.vintage && result.vintage.range) ||
68786 t('info_panels.background.vintage') + ': ' + t('info_panels.background.unknown')
68795 background.projection = function(val) {
68796 if (!arguments.length) return _projection;
68802 background.dimensions = function(val) {
68803 if (!arguments.length) return tiler.size();
68809 background.source = function(val) {
68810 if (!arguments.length) return _source;
68812 _tileSize = _source.tileSize;
68814 tiler.tileSize(_source.tileSize).zoomExtent(_source.zoomExtent);
68822 function rendererBackground(context) {
68823 var dispatch$1 = dispatch('change');
68824 var detected = utilDetect();
68825 var baseLayer = rendererTileLayer(context).projection(context.projection);
68826 var _isValid = true;
68827 var _overlayLayers = [];
68828 var _backgroundSources = [];
68829 var _brightness = 1;
68831 var _saturation = 1;
68832 var _sharpness = 1;
68835 function background(selection) {
68836 // If we are displaying an Esri basemap at high zoom,
68837 // check its tilemap to see how high the zoom can go
68838 if (context.map().zoom() > 18) {
68839 var basemap = baseLayer.source();
68840 if (basemap && /^EsriWorldImagery/.test(basemap.id)) {
68841 var center = context.map().center();
68842 basemap.fetchTilemap(center);
68846 // Is the imagery valid here? - #4827
68847 var sources = background.sources(context.map().extent());
68848 var wasValid = _isValid;
68849 _isValid = !!sources
68850 .filter(function(d) { return d === baseLayer.source(); }).length;
68852 if (wasValid !== _isValid) { // change in valid status
68853 background.updateImagery();
68857 var baseFilter = '';
68858 if (detected.cssfilters) {
68859 if (_brightness !== 1) {
68860 baseFilter += 'brightness(' + _brightness + ')';
68862 if (_contrast !== 1) {
68863 baseFilter += 'contrast(' + _contrast + ')';
68865 if (_saturation !== 1) {
68866 baseFilter += 'saturate(' + _saturation + ')';
68868 if (_sharpness < 1) { // gaussian blur
68869 var blur = d3_interpolateNumber(0.5, 5)(1 - _sharpness);
68870 baseFilter += 'blur(' + blur + 'px)';
68874 var base = selection.selectAll('.layer-background')
68877 base = base.enter()
68878 .insert('div', '.layer-data')
68879 .attr('class', 'layer layer-background')
68882 if (detected.cssfilters) {
68883 base.style('filter', baseFilter || null);
68885 base.style('opacity', _brightness);
68889 var imagery = base.selectAll('.layer-imagery')
68894 .attr('class', 'layer layer-imagery')
68899 var maskFilter = '';
68900 var mixBlendMode = '';
68901 if (detected.cssfilters && _sharpness > 1) { // apply unsharp mask
68902 mixBlendMode = 'overlay';
68903 maskFilter = 'saturate(0) blur(3px) invert(1)';
68905 var contrast = _sharpness - 1;
68906 maskFilter += ' contrast(' + contrast + ')';
68908 var brightness = d3_interpolateNumber(1, 0.85)(_sharpness - 1);
68909 maskFilter += ' brightness(' + brightness + ')';
68912 var mask = base.selectAll('.layer-unsharp-mask')
68913 .data(detected.cssfilters && _sharpness > 1 ? [0] : []);
68920 .attr('class', 'layer layer-mask layer-unsharp-mask')
68923 .style('filter', maskFilter || null)
68924 .style('mix-blend-mode', mixBlendMode || null);
68927 var overlays = selection.selectAll('.layer-overlay')
68928 .data(_overlayLayers, function(d) { return d.source().name(); });
68934 .insert('div', '.layer-data')
68935 .attr('class', 'layer layer-overlay')
68937 .each(function(layer) { d3_select(this).call(layer); });
68941 background.updateImagery = function() {
68942 var b = baseLayer.source();
68943 if (context.inIntro() || !b) return;
68945 var o = _overlayLayers
68946 .filter(function (d) { return !d.source().isLocatorOverlay() && !d.source().isHidden(); })
68947 .map(function (d) { return d.source().id; })
68950 var meters = geoOffsetToMeters(b.offset());
68951 var epsilon = 0.01;
68952 var x = +meters[0].toFixed(2);
68953 var y = +meters[1].toFixed(2);
68954 var q = utilStringQs(window.location.hash.substring(1));
68957 if (id === 'custom') {
68958 id = 'custom:' + b.template();
68964 delete q.background;
68973 if (Math.abs(x) > epsilon || Math.abs(y) > epsilon) {
68974 q.offset = x + ',' + y;
68979 if (!window.mocha) {
68980 window.location.replace('#' + utilQsString(q, true));
68983 var imageryUsed = [];
68984 var photoOverlaysUsed = [];
68986 var current = b.imageryUsed();
68987 if (current && _isValid) {
68988 imageryUsed.push(current);
68992 .filter(function (d) { return !d.source().isLocatorOverlay() && !d.source().isHidden(); })
68993 .forEach(function (d) { imageryUsed.push(d.source().imageryUsed()); });
68995 var data = context.layers().layer('data');
68996 if (data && data.enabled() && data.hasData()) {
68997 imageryUsed.push(data.getSrc());
69000 var photoOverlayLayers = {
69001 streetside: 'Bing Streetside',
69002 mapillary: 'Mapillary Images',
69003 'mapillary-signs': 'Mapillary Signs',
69004 openstreetcam: 'OpenStreetCam Images'
69007 for (var layerID in photoOverlayLayers) {
69008 var layer = context.layers().layer(layerID);
69009 if (layer && layer.enabled()) {
69010 photoOverlaysUsed.push(layerID);
69011 imageryUsed.push(photoOverlayLayers[layerID]);
69015 context.history().photoOverlaysUsed(photoOverlaysUsed);
69016 context.history().imageryUsed(imageryUsed);
69020 background.sources = function(extent) {
69021 if (!data.imagery || !data.imagery.query) return []; // called before init()?
69024 var matchImagery = data.imagery.query.bbox(extent.rectangle(), true) || [];
69025 matchImagery.forEach(function(d) { matchIDs[d.id] = true; });
69027 return _backgroundSources.filter(function(source) {
69028 return matchIDs[source.id] || !source.polygon; // no polygon = worldwide
69033 background.dimensions = function(d) {
69035 baseLayer.dimensions(d);
69037 _overlayLayers.forEach(function(layer) {
69038 layer.dimensions(d);
69043 background.baseLayerSource = function(d) {
69044 if (!arguments.length) return baseLayer.source();
69046 // test source against OSM imagery blacklists..
69047 var osm = context.connection();
69048 if (!osm) return background;
69050 var blacklists = context.connection().imageryBlacklists();
69051 var template = d.template();
69056 for (var i = 0; i < blacklists.length; i++) {
69058 regex = new RegExp(blacklists[i]);
69059 fail = regex.test(template);
69067 // ensure at least one test was run.
69069 regex = new RegExp('.*\.google(apis)?\..*/(vt|kh)[\?/].*([xyz]=.*){3}.*');
69070 fail = regex.test(template);
69073 baseLayer.source(!fail ? d : background.findSource('none'));
69074 dispatch$1.call('change');
69075 background.updateImagery();
69080 background.findSource = function(id) {
69081 return _backgroundSources.find(function(d) {
69082 return d.id && d.id === id;
69087 background.bing = function() {
69088 background.baseLayerSource(background.findSource('Bing'));
69092 background.showsLayer = function(d) {
69093 return d.id === baseLayer.source().id ||
69094 _overlayLayers.some(function(layer) { return d.id === layer.source().id; });
69098 background.overlayLayerSources = function() {
69099 return _overlayLayers.map(function (l) { return l.source(); });
69103 background.toggleOverlayLayer = function(d) {
69105 for (var i = 0; i < _overlayLayers.length; i++) {
69106 layer = _overlayLayers[i];
69107 if (layer.source() === d) {
69108 _overlayLayers.splice(i, 1);
69109 dispatch$1.call('change');
69110 background.updateImagery();
69115 layer = rendererTileLayer(context)
69117 .projection(context.projection)
69118 .dimensions(baseLayer.dimensions()
69121 _overlayLayers.push(layer);
69122 dispatch$1.call('change');
69123 background.updateImagery();
69127 background.nudge = function(d, zoom) {
69128 baseLayer.source().nudge(d, zoom);
69129 dispatch$1.call('change');
69130 background.updateImagery();
69135 background.offset = function(d) {
69136 if (!arguments.length) return baseLayer.source().offset();
69137 baseLayer.source().offset(d);
69138 dispatch$1.call('change');
69139 background.updateImagery();
69144 background.brightness = function(d) {
69145 if (!arguments.length) return _brightness;
69147 if (context.mode()) dispatch$1.call('change');
69152 background.contrast = function(d) {
69153 if (!arguments.length) return _contrast;
69155 if (context.mode()) dispatch$1.call('change');
69160 background.saturation = function(d) {
69161 if (!arguments.length) return _saturation;
69163 if (context.mode()) dispatch$1.call('change');
69168 background.sharpness = function(d) {
69169 if (!arguments.length) return _sharpness;
69171 if (context.mode()) dispatch$1.call('change');
69176 background.init = function() {
69177 function parseMap(qmap) {
69178 if (!qmap) return false;
69179 var args = qmap.split('/').map(Number);
69180 if (args.length < 3 || args.some(isNaN)) return false;
69181 return geoExtent([args[2], args[1]]);
69184 var q = utilStringQs(window.location.hash.substring(1));
69185 var requested = q.background || q.layer;
69186 var extent = parseMap(q.map);
69191 data.imagery = data.imagery || [];
69192 data.imagery.features = {};
69194 // build efficient index and querying for data.imagery
69195 var features = data.imagery.map(function(source) {
69196 if (!source.polygon) return null;
69198 // Add an extra array nest to each element in `source.polygon`
69199 // so the rings are not treated as a bunch of holes:
69200 // what we have: [ [[outer],[hole],[hole]] ]
69201 // what we want: [ [[outer]],[[outer]],[[outer]] ]
69202 var rings = source.polygon.map(function(ring) { return [ring]; });
69206 properties: { id: source.id },
69207 geometry: { type: 'MultiPolygon', coordinates: rings }
69210 data.imagery.features[source.id] = feature;
69213 }).filter(Boolean);
69215 data.imagery.query = whichPolygon_1({
69216 type: 'FeatureCollection',
69221 // Add all the available imagery sources
69222 _backgroundSources = data.imagery.map(function(source) {
69223 if (source.type === 'bing') {
69224 return rendererBackgroundSource.Bing(source, dispatch$1);
69225 } else if (/^EsriWorldImagery/.test(source.id)) {
69226 return rendererBackgroundSource.Esri(source);
69228 return rendererBackgroundSource(source);
69232 first = _backgroundSources.length && _backgroundSources[0];
69235 _backgroundSources.unshift(rendererBackgroundSource.None());
69238 var template = context.storage('background-custom-template') || '';
69239 var custom = rendererBackgroundSource.Custom(template);
69240 _backgroundSources.unshift(custom);
69243 // Decide which background layer to display
69244 if (!requested && extent) {
69245 best = this.sources(extent).find(function(s) { return s.best(); });
69247 if (requested && requested.indexOf('custom:') === 0) {
69248 template = requested.replace(/^custom:/, '');
69249 background.baseLayerSource(custom.template(template));
69250 context.storage('background-custom-template', template);
69252 background.baseLayerSource(
69253 background.findSource(requested) ||
69255 background.findSource(context.storage('background-last-used')) ||
69256 background.findSource('Bing') ||
69258 background.findSource('none')
69262 var locator = _backgroundSources.find(function(d) {
69263 return d.overlay && d.default;
69267 background.toggleOverlayLayer(locator);
69270 var overlays = (q.overlays || '').split(',');
69271 overlays.forEach(function(overlay) {
69272 overlay = background.findSource(overlay);
69274 background.toggleOverlayLayer(overlay);
69279 var gpx = context.layers().layer('data');
69281 gpx.url(q.gpx, '.gpx');
69286 var offset = q.offset.replace(/;/g, ',').split(',').map(function(n) {
69287 return !isNaN(n) && n;
69290 if (offset.length === 2) {
69291 background.offset(geoMetersToOffset(offset));
69297 return utilRebind(background, dispatch$1, 'on');
69300 function rendererFeatures(context) {
69301 var dispatch$1 = dispatch('change', 'redraw');
69302 var features = utilRebind({}, dispatch$1, 'on');
69303 var _deferred = new Set();
69305 var traffic_roads = {
69307 'motorway_link': true,
69309 'trunk_link': true,
69311 'primary_link': true,
69313 'secondary_link': true,
69315 'tertiary_link': true,
69316 'residential': true,
69317 'unclassified': true,
69318 'living_street': true
69321 var service_roads = {
69333 'pedestrian': true,
69337 var past_futures = {
69339 'construction': true,
69341 'dismantled': true,
69344 'demolished': true,
69345 'obliterated': true
69348 var _cullFactor = 1;
69354 var _forceVisible = {};
69357 function update() {
69358 if (!window.mocha) {
69359 var q = utilStringQs(window.location.hash.substring(1));
69360 var disabled = features.disabled();
69361 if (disabled.length) {
69362 q.disable_features = disabled.join(',');
69364 delete q.disable_features;
69366 window.location.replace('#' + utilQsString(q, true));
69367 context.storage('disabled-features', disabled.join(','));
69369 _hidden = features.hidden();
69370 dispatch$1.call('change');
69371 dispatch$1.call('redraw');
69375 function defineRule(k, filter, max) {
69376 var isEnabled = true;
69381 enabled: isEnabled, // whether the user wants it enabled..
69383 currentMax: (max || Infinity),
69384 defaultMax: (max || Infinity),
69385 enable: function() { this.enabled = true; this.currentMax = this.defaultMax; },
69386 disable: function() { this.enabled = false; this.currentMax = 0; },
69387 hidden: function() {
69388 return !context.editable() ||
69389 (this.count === 0 && !this.enabled) ||
69390 this.count > this.currentMax * _cullFactor;
69392 autoHidden: function() { return this.hidden() && this.currentMax > 0; }
69397 defineRule('points', function isPoint(tags, geometry) {
69398 return geometry === 'point';
69401 defineRule('traffic_roads', function isTrafficRoad(tags) {
69402 return traffic_roads[tags.highway];
69405 defineRule('service_roads', function isServiceRoad(tags) {
69406 return service_roads[tags.highway];
69409 defineRule('paths', function isPath(tags) {
69410 return paths[tags.highway];
69413 defineRule('buildings', function isBuilding(tags) {
69415 (!!tags.building && tags.building !== 'no') ||
69416 tags.parking === 'multi-storey' ||
69417 tags.parking === 'sheds' ||
69418 tags.parking === 'carports' ||
69419 tags.parking === 'garage_boxes'
69423 defineRule('building_parts', function isBuildingPart(tags) {
69424 return tags['building:part'];
69427 defineRule('indoor', function isIndoor(tags) {
69428 return tags.indoor;
69431 defineRule('landuse', function isLanduse(tags, geometry) {
69432 return geometry === 'area' &&
69433 !_rules.buildings.filter(tags) &&
69434 !_rules.building_parts.filter(tags) &&
69435 !_rules.indoor.filter(tags) &&
69436 !_rules.water.filter(tags) &&
69437 !_rules.pistes.filter(tags);
69440 defineRule('boundaries', function isBoundary(tags) {
69444 traffic_roads[tags.highway] ||
69445 service_roads[tags.highway] ||
69446 paths[tags.highway] ||
69456 defineRule('water', function isWater(tags) {
69459 tags.natural === 'water' ||
69460 tags.natural === 'coastline' ||
69461 tags.natural === 'bay' ||
69462 tags.landuse === 'pond' ||
69463 tags.landuse === 'basin' ||
69464 tags.landuse === 'reservoir' ||
69465 tags.landuse === 'salt_pond'
69469 defineRule('rail', function isRail(tags) {
69472 tags.landuse === 'railway'
69474 traffic_roads[tags.highway] ||
69475 service_roads[tags.highway] ||
69476 paths[tags.highway]
69480 defineRule('pistes', function isPiste(tags) {
69481 return tags['piste:type'];
69484 defineRule('aerialways', function isPiste(tags) {
69485 return tags.aerialway &&
69486 tags.aerialway !== 'yes' &&
69487 tags.aerialway !== 'station';
69490 defineRule('power', function isPower(tags) {
69491 return !!tags.power;
69494 // contains a past/future tag, but not in active use as a road/path/cycleway/etc..
69495 defineRule('past_future', function isPastFuture(tags) {
69497 traffic_roads[tags.highway] ||
69498 service_roads[tags.highway] ||
69499 paths[tags.highway]
69500 ) { return false; }
69502 var strings = Object.keys(tags);
69504 for (var i = 0; i < strings.length; i++) {
69505 var s = strings[i];
69506 if (past_futures[s] || past_futures[tags[s]]) { return true; }
69511 // Lines or areas that don't match another feature filter.
69512 // IMPORTANT: The 'others' feature must be the last one defined,
69513 // so that code in getMatches can skip this test if `hasMatch = true`
69514 defineRule('others', function isOther(tags, geometry) {
69515 return (geometry === 'line' || geometry === 'area');
69520 features.features = function() {
69525 features.keys = function() {
69530 features.enabled = function(k) {
69531 if (!arguments.length) {
69532 return _keys.filter(function(k) { return _rules[k].enabled; });
69534 return _rules[k] && _rules[k].enabled;
69538 features.disabled = function(k) {
69539 if (!arguments.length) {
69540 return _keys.filter(function(k) { return !_rules[k].enabled; });
69542 return _rules[k] && !_rules[k].enabled;
69546 features.hidden = function(k) {
69547 if (!arguments.length) {
69548 return _keys.filter(function(k) { return _rules[k].hidden(); });
69550 return _rules[k] && _rules[k].hidden();
69554 features.autoHidden = function(k) {
69555 if (!arguments.length) {
69556 return _keys.filter(function(k) { return _rules[k].autoHidden(); });
69558 return _rules[k] && _rules[k].autoHidden();
69562 features.enable = function(k) {
69563 if (_rules[k] && !_rules[k].enabled) {
69564 _rules[k].enable();
69569 features.enableAll = function() {
69570 var didEnable = false;
69571 for (var k in _rules) {
69572 if (!_rules[k].enabled) {
69574 _rules[k].enable();
69577 if (didEnable) update();
69581 features.disable = function(k) {
69582 if (_rules[k] && _rules[k].enabled) {
69583 _rules[k].disable();
69588 features.disableAll = function() {
69589 var didDisable = false;
69590 for (var k in _rules) {
69591 if (_rules[k].enabled) {
69593 _rules[k].disable();
69596 if (didDisable) update();
69600 features.toggle = function(k) {
69602 (function(f) { return f.enabled ? f.disable() : f.enable(); }(_rules[k]));
69608 features.resetStats = function() {
69609 for (var i = 0; i < _keys.length; i++) {
69610 _rules[_keys[i]].count = 0;
69612 dispatch$1.call('change');
69616 features.gatherStats = function(d, resolver, dimensions) {
69617 var needsRedraw = false;
69618 var types = utilArrayGroupBy(d, 'type');
69619 var entities = [].concat(types.relation || [], types.way || [], types.node || []);
69620 var currHidden, geometry, matches, i, j;
69622 for (i = 0; i < _keys.length; i++) {
69623 _rules[_keys[i]].count = 0;
69626 // adjust the threshold for point/building culling based on viewport size..
69627 // a _cullFactor of 1 corresponds to a 1000x1000px viewport..
69628 _cullFactor = dimensions[0] * dimensions[1] / 1000000;
69630 for (i = 0; i < entities.length; i++) {
69631 geometry = entities[i].geometry(resolver);
69632 matches = Object.keys(features.getMatches(entities[i], resolver, geometry));
69633 for (j = 0; j < matches.length; j++) {
69634 _rules[matches[j]].count++;
69638 currHidden = features.hidden();
69639 if (currHidden !== _hidden) {
69640 _hidden = currHidden;
69641 needsRedraw = true;
69642 dispatch$1.call('change');
69645 return needsRedraw;
69649 features.stats = function() {
69650 for (var i = 0; i < _keys.length; i++) {
69651 _stats[_keys[i]] = _rules[_keys[i]].count;
69658 features.clear = function(d) {
69659 for (var i = 0; i < d.length; i++) {
69660 features.clearEntity(d[i]);
69665 features.clearEntity = function(entity) {
69666 delete _cache[osmEntity.key(entity)];
69670 features.reset = function() {
69671 Array.from(_deferred).forEach(function(handle) {
69672 window.cancelIdleCallback(handle);
69673 _deferred.delete(handle);
69679 // only certain relations are worth checking
69680 function relationShouldBeChecked(relation) {
69681 // multipolygon features have `area` geometry and aren't checked here
69682 return relation.tags.type === 'boundary';
69685 features.getMatches = function(entity, resolver, geometry) {
69686 if (geometry === 'vertex' ||
69687 (geometry === 'relation' && !relationShouldBeChecked(entity))) return {};
69689 var ent = osmEntity.key(entity);
69690 if (!_cache[ent]) {
69694 if (!_cache[ent].matches) {
69696 var hasMatch = false;
69698 for (var i = 0; i < _keys.length; i++) {
69699 if (_keys[i] === 'others') {
69700 if (hasMatch) continue;
69703 // 1. is a way that hasn't matched other 'interesting' feature rules,
69704 if (entity.type === 'way') {
69705 var parents = features.getParents(entity, resolver, geometry);
69707 // 2a. belongs only to a single multipolygon relation
69708 if ((parents.length === 1 && parents[0].isMultipolygon()) ||
69709 // 2b. or belongs only to boundary relations
69710 (parents.length > 0 && parents.every(function(parent) { return parent.tags.type === 'boundary'; }))) {
69712 // ...then match whatever feature rules the parent relation has matched.
69713 // see #2548, #2887
69716 // For this to work, getMatches must be called on relations before ways.
69718 var pkey = osmEntity.key(parents[0]);
69719 if (_cache[pkey] && _cache[pkey].matches) {
69720 matches = Object.assign({}, _cache[pkey].matches); // shallow copy
69727 if (_rules[_keys[i]].filter(entity.tags, geometry)) {
69728 matches[_keys[i]] = hasMatch = true;
69731 _cache[ent].matches = matches;
69734 return _cache[ent].matches;
69738 features.getParents = function(entity, resolver, geometry) {
69739 if (geometry === 'point') return [];
69741 var ent = osmEntity.key(entity);
69742 if (!_cache[ent]) {
69746 if (!_cache[ent].parents) {
69748 if (geometry === 'vertex') {
69749 parents = resolver.parentWays(entity);
69750 } else { // 'line', 'area', 'relation'
69751 parents = resolver.parentRelations(entity);
69753 _cache[ent].parents = parents;
69755 return _cache[ent].parents;
69759 features.isHiddenPreset = function(preset, geometry) {
69760 if (!_hidden.length) return false;
69761 if (!preset.tags) return false;
69763 var test = preset.setTags({}, geometry);
69764 for (var key in _rules) {
69765 if (_rules[key].filter(test, geometry)) {
69766 if (_hidden.indexOf(key) !== -1) {
69776 features.isHiddenFeature = function(entity, resolver, geometry) {
69777 if (!_hidden.length) return false;
69778 if (!entity.version) return false;
69779 if (_forceVisible[entity.id]) return false;
69781 var matches = Object.keys(features.getMatches(entity, resolver, geometry));
69782 return matches.length && matches.every(function(k) { return features.hidden(k); });
69786 features.isHiddenChild = function(entity, resolver, geometry) {
69787 if (!_hidden.length) return false;
69788 if (!entity.version || geometry === 'point') return false;
69789 if (_forceVisible[entity.id]) return false;
69791 var parents = features.getParents(entity, resolver, geometry);
69792 if (!parents.length) return false;
69794 for (var i = 0; i < parents.length; i++) {
69795 if (!features.isHidden(parents[i], resolver, parents[i].geometry(resolver))) {
69803 features.hasHiddenConnections = function(entity, resolver) {
69804 if (!_hidden.length) return false;
69806 var childNodes, connections;
69807 if (entity.type === 'midpoint') {
69808 childNodes = [resolver.entity(entity.edge[0]), resolver.entity(entity.edge[1])];
69811 childNodes = entity.nodes ? resolver.childNodes(entity) : [];
69812 connections = features.getParents(entity, resolver, entity.geometry(resolver));
69815 // gather ways connected to child nodes..
69816 connections = childNodes.reduce(function(result, e) {
69817 return resolver.isShared(e) ? utilArrayUnion(result, resolver.parentWays(e)) : result;
69820 return connections.some(function(e) {
69821 return features.isHidden(e, resolver, e.geometry(resolver));
69826 features.isHidden = function(entity, resolver, geometry) {
69827 if (!_hidden.length) return false;
69828 if (!entity.version) return false;
69830 var fn = (geometry === 'vertex' ? features.isHiddenChild : features.isHiddenFeature);
69831 return fn(entity, resolver, geometry);
69835 features.filter = function(d, resolver) {
69836 if (!_hidden.length) return d;
69839 for (var i = 0; i < d.length; i++) {
69841 if (!features.isHidden(entity, resolver, entity.geometry(resolver))) {
69842 result.push(entity);
69849 features.forceVisible = function(entityIDs) {
69850 if (!arguments.length) return Object.keys(_forceVisible);
69852 _forceVisible = {};
69853 for (var i = 0; i < entityIDs.length; i++) {
69854 _forceVisible[entityIDs[i]] = true;
69855 var entity = context.hasEntity(entityIDs[i]);
69856 if (entity && entity.type === 'relation') {
69857 // also show relation members (one level deep)
69858 for (var j in entity.members) {
69859 _forceVisible[entity.members[j].id] = true;
69867 features.init = function() {
69868 var storage = context.storage('disabled-features');
69870 var storageDisabled = storage.replace(/;/g, ',').split(',');
69871 storageDisabled.forEach(features.disable);
69874 var q = utilStringQs(window.location.hash.substring(1));
69875 if (q.disable_features) {
69876 var hashDisabled = q.disable_features.replace(/;/g, ',').split(',');
69877 hashDisabled.forEach(features.disable);
69882 // warm up the feature matching cache upon merging fetched data
69883 context.history().on('merge.features', function(newEntities) {
69884 if (!newEntities) return;
69885 var handle = window.requestIdleCallback(function() {
69886 var graph = context.graph();
69887 var types = utilArrayGroupBy(newEntities, 'type');
69888 // ensure that getMatches is called on relations before ways
69889 var entities = [].concat(types.relation || [], types.way || [], types.node || []);
69890 for (var i = 0; i < entities.length; i++) {
69891 var geometry = entities[i].geometry(graph);
69892 features.getMatches(entities[i], graph, geometry);
69895 _deferred.add(handle);
69902 // Touch targets control which other vertices we can drag a vertex onto.
69904 // - the activeID - nope
69905 // - 1 away (adjacent) to the activeID - yes (vertices will be merged)
69906 // - 2 away from the activeID - nope (would create a self intersecting segment)
69907 // - all others on a linear way - yes
69908 // - all others on a closed way - nope (would create a self intersecting polygon)
69911 // 0 = active vertex - no touch/connect
69912 // 1 = passive vertex - yes touch/connect
69913 // 2 = adjacent vertex - yes but pay attention segmenting a line here
69915 function svgPassiveVertex(node, graph, activeID) {
69916 if (!activeID) return 1;
69917 if (activeID === node.id) return 0;
69919 var parents = graph.parentWays(node);
69921 for (var i = 0; i < parents.length; i++) {
69922 var nodes = parents[i].nodes;
69923 var isClosed = parents[i].isClosed();
69924 for (var j = 0; j < nodes.length; j++) { // find this vertex, look nearby
69925 if (nodes[j] === node.id) {
69931 if (isClosed) { // wraparound if needed
69932 var max = nodes.length - 1;
69933 if (ix1 < 0) ix1 = max + ix1;
69934 if (ix2 < 0) ix2 = max + ix2;
69935 if (ix3 > max) ix3 = ix3 - max;
69936 if (ix4 > max) ix4 = ix4 - max;
69939 if (nodes[ix1] === activeID) return 0; // no - prevent self intersect
69940 else if (nodes[ix2] === activeID) return 2; // ok - adjacent
69941 else if (nodes[ix3] === activeID) return 2; // ok - adjacent
69942 else if (nodes[ix4] === activeID) return 0; // no - prevent self intersect
69943 else if (isClosed && nodes.indexOf(activeID) !== -1) return 0; // no - prevent self intersect
69952 function svgMarkerSegments(projection, graph, dt,
69955 return function(entity) {
69959 var clip = d3_geoIdentity().clipExtent(projection.clipExtent()).stream;
69960 var coordinates = graph.childNodes(entity).map(function(n) { return n.loc; });
69963 if (shouldReverse(entity)) {
69964 coordinates.reverse();
69968 type: 'LineString',
69969 coordinates: coordinates
69970 }, projection.stream(clip({
69971 lineStart: function() {},
69972 lineEnd: function() { a = null; },
69973 point: function(x, y) {
69977 var span = geoVecLength(a, b) - offset;
69980 var heading = geoVecAngle(a, b);
69981 var dx = dt * Math.cos(heading);
69982 var dy = dt * Math.sin(heading);
69984 a[0] + offset * Math.cos(heading),
69985 a[1] + offset * Math.sin(heading)
69988 // gather coordinates
69989 var coord = [a, p];
69990 for (span -= dt; span >= 0; span -= dt) {
69991 p = geoVecAdd(p, [dx, dy]);
69996 // generate svg paths
70000 for (j = 0; j < coord.length; j++) {
70001 segment += (j === 0 ? 'M' : 'L') + coord[j][0] + ',' + coord[j][1];
70003 segments.push({ id: entity.id, index: i++, d: segment });
70005 if (bothDirections(entity)) {
70007 for (j = coord.length - 1; j >= 0; j--) {
70008 segment += (j === coord.length - 1 ? 'M' : 'L') + coord[j][0] + ',' + coord[j][1];
70010 segments.push({ id: entity.id, index: i++, d: segment });
70026 function svgPath(projection, graph, isArea) {
70028 // Explanation of magic numbers:
70029 // "padding" here allows space for strokes to extend beyond the viewport,
70030 // so that the stroke isn't drawn along the edge of the viewport when
70031 // the shape is clipped.
70033 // When drawing lines, pad viewport by 5px.
70034 // When drawing areas, pad viewport by 65px in each direction to allow
70035 // for 60px area fill stroke (see ".fill-partial path.fill" css rule)
70038 var padding = isArea ? 65 : 5;
70039 var viewport = projection.clipExtent();
70040 var paddedExtent = [
70041 [viewport[0][0] - padding, viewport[0][1] - padding],
70042 [viewport[1][0] + padding, viewport[1][1] + padding]
70044 var clip = d3_geoIdentity().clipExtent(paddedExtent).stream;
70045 var project = projection.stream;
70046 var path = d3_geoPath()
70047 .projection({stream: function(output) { return project(clip(output)); }});
70049 var svgpath = function(entity) {
70050 if (entity.id in cache) {
70051 return cache[entity.id];
70053 return cache[entity.id] = path(entity.asGeoJSON(graph));
70057 svgpath.geojson = function(d) {
70058 if (d.__featurehash__ !== undefined) {
70059 if (d.__featurehash__ in cache) {
70060 return cache[d.__featurehash__];
70062 return cache[d.__featurehash__] = path(d);
70073 function svgPointTransform(projection) {
70074 var svgpoint = function(entity) {
70075 // http://jsperf.com/short-array-join
70076 var pt = projection(entity.loc);
70077 return 'translate(' + pt[0] + ',' + pt[1] + ')';
70080 svgpoint.geojson = function(d) {
70081 return svgpoint(d.properties.entity);
70088 function svgRelationMemberTags(graph) {
70089 return function(entity) {
70090 var tags = entity.tags;
70091 var shouldCopyMultipolygonTags = !entity.hasInterestingTags();
70092 graph.parentRelations(entity).forEach(function(relation) {
70093 var type = relation.tags.type;
70094 if ((type === 'multipolygon' && shouldCopyMultipolygonTags) || type === 'boundary') {
70095 tags = Object.assign({}, relation.tags, tags);
70103 function svgSegmentWay(way, graph, activeID) {
70104 // When there is no activeID, we can memoize this expensive computation
70105 if (activeID === undefined) {
70106 return graph.transient(way, 'waySegments', getWaySegments);
70108 return getWaySegments();
70111 function getWaySegments() {
70112 var isActiveWay = (way.nodes.indexOf(activeID) !== -1);
70113 var features = { passive: [], active: [] };
70118 for (var i = 0; i < way.nodes.length; i++) {
70119 node = graph.entity(way.nodes[i]);
70120 type = svgPassiveVertex(node, graph, activeID);
70121 end = { node: node, type: type };
70123 if (start.type !== undefined) {
70124 if (start.node.id === activeID || end.node.id === activeID) ; else if (isActiveWay && (start.type === 2 || end.type === 2)) { // one adjacent vertex
70125 pushActive(start, end, i);
70126 } else if (start.type === 0 && end.type === 0) { // both active vertices
70127 pushActive(start, end, i);
70129 pushPassive(start, end, i);
70138 function pushActive(start, end, index) {
70139 features.active.push({
70141 id: way.id + '-' + index + '-nope',
70146 nodes: [start.node, end.node],
70150 type: 'LineString',
70151 coordinates: [start.node.loc, end.node.loc]
70156 function pushPassive(start, end, index) {
70157 features.passive.push({
70159 id: way.id + '-' + index,
70163 nodes: [start.node, end.node],
70167 type: 'LineString',
70168 coordinates: [start.node.loc, end.node.loc]
70175 function svgTagClasses() {
70177 'building', 'highway', 'railway', 'waterway', 'aeroway', 'aerialway',
70178 'piste:type', 'boundary', 'power', 'amenity', 'natural', 'landuse',
70179 'leisure', 'military', 'place', 'man_made', 'route', 'attraction',
70180 'building:part', 'indoor'
70183 'proposed', 'construction', 'disused', 'abandoned', 'dismantled',
70184 'razed', 'demolished', 'obliterated', 'intermittent'
70186 var secondaries = [
70187 'oneway', 'bridge', 'tunnel', 'embankment', 'cutting', 'barrier',
70188 'surface', 'tracktype', 'footway', 'crossing', 'service', 'sport',
70189 'public_transport', 'location', 'parking', 'golf', 'type', 'leisure',
70190 'man_made', 'indoor'
70192 var _tags = function(entity) { return entity.tags; };
70195 var tagClasses = function(selection) {
70196 selection.each(function tagClassesEach(entity) {
70197 var value = this.className;
70199 if (value.baseVal !== undefined) {
70200 value = value.baseVal;
70203 var t = _tags(entity);
70205 var computed = tagClasses.getClassesString(t, value, entity);
70207 if (computed !== value) {
70208 d3_select(this).attr('class', computed);
70214 tagClasses.getClassesString = function(t, value, entity) {
70215 var primary, status;
70218 // in some situations we want to render perimeter strokes a certain way
70219 var overrideGeometry;
70220 if (/\bstroke\b/.test(value)) {
70221 if (!!t.barrier && t.barrier !== 'no') {
70222 overrideGeometry = 'line';
70223 } else if (t.type === 'multipolygon' && !entity.hasInterestingTags()) {
70224 overrideGeometry = 'area';
70228 // preserve base classes (nothing with `tag-`)
70229 var classes = value.trim().split(/\s+/)
70230 .filter(function(klass) {
70231 return klass.length && !/^tag-/.test(klass);
70233 .map(function(klass) { // special overrides for some perimeter strokes
70234 return (klass === 'line' || klass === 'area') ? (overrideGeometry || klass) : klass;
70237 // pick at most one primary classification tag..
70238 for (i = 0; i < primaries.length; i++) {
70241 if (!v || v === 'no') continue;
70243 if (k === 'piste:type') { // avoid a ':' in the class name
70245 } else if (k === 'building:part') { // avoid a ':' in the class name
70246 k = 'building_part';
70250 if (statuses.indexOf(v) !== -1) { // e.g. `railway=abandoned`
70252 classes.push('tag-' + k);
70254 classes.push('tag-' + k);
70255 classes.push('tag-' + k + '-' + v);
70261 // add at most one status tag, only if relates to primary tag..
70263 for (i = 0; i < statuses.length; i++) {
70266 if (!v || v === 'no') continue;
70268 if (v === 'yes') { // e.g. `railway=rail + abandoned=yes`
70271 else if (primary && primary === v) { // e.g. `railway=rail + abandoned=railway`
70273 } else if (!primary && primaries.indexOf(v) !== -1) { // e.g. `abandoned=railway`
70276 classes.push('tag-' + v);
70277 } // else ignore e.g. `highway=path + abandoned=railway`
70284 classes.push('tag-status');
70285 classes.push('tag-status-' + status);
70288 // add any secondary tags
70289 for (i = 0; i < secondaries.length; i++) {
70290 k = secondaries[i];
70292 if (!v || v === 'no' || k === primary) continue;
70293 classes.push('tag-' + k);
70294 classes.push('tag-' + k + '-' + v);
70297 // For highways, look for surface tagging..
70298 if (primary === 'highway' || primary === 'aeroway') {
70299 var paved = (t.highway !== 'track');
70302 if (k in osmPavedTags) {
70303 paved = !!osmPavedTags[k][v];
70308 classes.push('tag-unpaved');
70312 // If this is a wikidata-tagged item, add a class for that..
70313 if (t.wikidata || t['brand:wikidata']) {
70314 classes.push('tag-wikidata');
70317 return classes.join(' ').trim();
70321 tagClasses.tags = function(val) {
70322 if (!arguments.length) return _tags;
70330 function svgAreas(projection, context) {
70331 // Patterns only work in Firefox when set directly on element.
70332 // (This is not a bug: https://bugzilla.mozilla.org/show_bug.cgi?id=750632)
70334 // tag - pattern name
70336 // tag - value - pattern name
70338 // tag - value - rules (optional tag-values, pattern name)
70339 // (matches earlier rules first, so fallback should be last entry)
70341 grave_yard: 'cemetery',
70342 fountain: 'water_standing'
70346 { religion: 'christian', pattern: 'cemetery_christian' },
70347 { religion: 'buddhist', pattern: 'cemetery_buddhist' },
70348 { religion: 'muslim', pattern: 'cemetery_muslim' },
70349 { religion: 'jewish', pattern: 'cemetery_jewish' },
70350 { pattern: 'cemetery' }
70352 construction: 'construction',
70353 farmland: 'farmland',
70354 farmyard: 'farmyard',
70356 { leaf_type: 'broadleaved', pattern: 'forest_broadleaved' },
70357 { leaf_type: 'needleleaved', pattern: 'forest_needleleaved' },
70358 { leaf_type: 'leafless', pattern: 'forest_leafless' },
70359 { pattern: 'forest' } // same as 'leaf_type:mixed'
70361 grave_yard: 'cemetery',
70363 landfill: 'landfill',
70365 military: 'construction',
70366 orchard: 'orchard',
70368 vineyard: 'vineyard'
70372 grassland: 'grass',
70376 { water: 'pond', pattern: 'pond' },
70377 { water: 'reservoir', pattern: 'water_standing' },
70378 { pattern: 'waves' }
70381 { wetland: 'marsh', pattern: 'wetland_marsh' },
70382 { wetland: 'swamp', pattern: 'wetland_swamp' },
70383 { wetland: 'bog', pattern: 'wetland_bog' },
70384 { wetland: 'reedbed', pattern: 'wetland_reedbed' },
70385 { pattern: 'wetland' }
70388 { leaf_type: 'broadleaved', pattern: 'forest_broadleaved' },
70389 { leaf_type: 'needleleaved', pattern: 'forest_needleleaved' },
70390 { leaf_type: 'leafless', pattern: 'forest_leafless' },
70391 { pattern: 'forest' } // same as 'leaf_type:mixed'
70396 { surface: 'grass', pattern: 'grass' },
70399 { surface: 'grass', pattern: 'grass' },
70402 { surface: 'grass', pattern: 'grass' },
70407 function setPattern(entity) {
70408 // Skip pattern filling if this is a building (buildings don't get patterns applied)
70409 if (entity.tags.building && entity.tags.building !== 'no') {
70410 this.style.fill = this.style.stroke = '';
70414 for (var tag in patterns) {
70415 var entityValue = entity.tags[tag];
70416 if (!entityValue) continue;
70418 if (typeof patterns[tag] === 'string') { // extra short syntax (just tag) - pattern name
70419 this.style.fill = this.style.stroke = 'url("#pattern-' + patterns[tag] + '")';
70422 var values = patterns[tag];
70423 for (var value in values) {
70424 if (entityValue !== value) continue;
70426 var rules = values[value];
70427 if (typeof rules === 'string') { // short syntax - pattern name
70428 this.style.fill = this.style.stroke = 'url("#pattern-' + rules + '")';
70430 } else { // long syntax - rule array
70431 for (var ruleKey in rules) {
70432 var rule = rules[ruleKey];
70435 for (var criterion in rule) {
70436 if (criterion !== 'pattern') { // reserved for pattern name
70437 // The only rule is a required tag-value pair
70438 var v = entity.tags[criterion];
70439 if (!v || v !== rule[criterion]) {
70447 this.style.fill = this.style.stroke = 'url("#pattern-' + rule.pattern + '")';
70456 this.style.fill = this.style.stroke = '';
70460 function drawTargets(selection, graph, entities, filter) {
70461 var targetClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
70462 var nopeClass = context.getDebug('target') ? 'red ' : 'nocolor ';
70463 var getPath = svgPath(projection).geojson;
70464 var activeID = context.activeID();
70466 // The targets and nopes will be MultiLineString sub-segments of the ways
70467 var data = { targets: [], nopes: [] };
70469 entities.forEach(function(way) {
70470 var features = svgSegmentWay(way, graph, activeID);
70471 data.targets.push.apply(data.targets, features.passive);
70472 data.nopes.push.apply(data.nopes, features.active);
70476 // Targets allow hover and vertex snapping
70477 var targetData = data.targets.filter(getPath);
70478 var targets = selection.selectAll('.area.target-allowed')
70479 .filter(function(d) { return filter(d.properties.entity); })
70480 .data(targetData, function key(d) { return d.id; });
70490 .attr('d', getPath)
70491 .attr('class', function(d) { return 'way area target target-allowed ' + targetClass + d.id; });
70495 var nopeData = data.nopes.filter(getPath);
70496 var nopes = selection.selectAll('.area.target-nope')
70497 .filter(function(d) { return filter(d.properties.entity); })
70498 .data(nopeData, function key(d) { return d.id; });
70508 .attr('d', getPath)
70509 .attr('class', function(d) { return 'way area target target-nope ' + nopeClass + d.id; });
70513 function drawAreas(selection, graph, entities, filter) {
70514 var path = svgPath(projection, graph, true);
70518 for (var i = 0; i < entities.length; i++) {
70519 var entity = entities[i];
70520 if (entity.geometry(graph) !== 'area') continue;
70522 multipolygon = osmIsOldMultipolygonOuterMember(entity, graph);
70523 if (multipolygon) {
70524 areas[multipolygon.id] = {
70525 entity: multipolygon.mergeTags(entity.tags),
70526 area: Math.abs(entity.area(graph))
70528 } else if (!areas[entity.id]) {
70529 areas[entity.id] = {
70531 area: Math.abs(entity.area(graph))
70536 var fills = Object.values(areas).filter(function hasPath(a) { return path(a.entity); });
70537 fills.sort(function areaSort(a, b) { return b.area - a.area; });
70538 fills = fills.map(function(a) { return a.entity; });
70540 var strokes = fills.filter(function(area) { return area.type === 'way'; });
70549 var clipPaths = context.surface().selectAll('defs').selectAll('.clipPath-osm')
70551 .data(data.clip, osmEntity.key);
70556 var clipPathsEnter = clipPaths.enter()
70557 .append('clipPath')
70558 .attr('class', 'clipPath-osm')
70559 .attr('id', function(entity) { return entity.id + '-clippath'; });
70564 clipPaths.merge(clipPathsEnter)
70569 var drawLayer = selection.selectAll('.layer-osm.areas');
70570 var touchLayer = selection.selectAll('.layer-touch.areas');
70573 var areagroup = drawLayer
70574 .selectAll('g.areagroup')
70575 .data(['fill', 'shadow', 'stroke']);
70577 areagroup = areagroup.enter()
70579 .attr('class', function(d) { return 'areagroup area-' + d; })
70582 var paths = areagroup
70585 .data(function(layer) { return data[layer]; }, osmEntity.key);
70591 var fillpaths = selection.selectAll('.area-fill path.area').nodes();
70592 var bisect = d3_bisector(function(node) { return -node.__data__.area(graph); }).left;
70594 function sortedByArea(entity) {
70595 if (this._parent.__data__ === 'fill') {
70596 return fillpaths[bisect(fillpaths, -entity.area(graph))];
70600 paths = paths.enter()
70601 .insert('path', sortedByArea)
70603 .each(function(entity) {
70604 var layer = this.parentNode.__data__;
70605 this.setAttribute('class', entity.type + ' area ' + layer + ' ' + entity.id);
70607 if (layer === 'fill') {
70608 this.setAttribute('clip-path', 'url(#' + entity.id + '-clippath)');
70609 setPattern.call(this, entity);
70612 .call(svgTagClasses())
70616 // Draw touch targets..
70618 .call(drawTargets, graph, data.stroke, filter);
70624 //[4] NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
70625 //[4a] NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
70626 //[5] Name ::= NameStartChar (NameChar)*
70627 var nameStartChar = /[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/;//\u10000-\uEFFFF
70628 var nameChar = new RegExp("[\\-\\.0-9"+nameStartChar.source.slice(1,-1)+"\\u00B7\\u0300-\\u036F\\u203F-\\u2040]");
70629 var tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\:'+nameStartChar.source+nameChar.source+'*)?$');
70630 //var tagNamePattern = /^[a-zA-Z_][\w\-\.]*(?:\:[a-zA-Z_][\w\-\.]*)?$/
70631 //var handlers = 'resolveEntity,getExternalSubset,characters,endDocument,endElement,endPrefixMapping,ignorableWhitespace,processingInstruction,setDocumentLocator,skippedEntity,startDocument,startElement,startPrefixMapping,notationDecl,unparsedEntityDecl,error,fatalError,warning,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,comment,endCDATA,endDTD,endEntity,startCDATA,startDTD,startEntity'.split(',')
70633 //S_TAG, S_ATTR, S_EQ, S_ATTR_NOQUOT_VALUE
70634 //S_ATTR_SPACE, S_ATTR_END, S_TAG_SPACE, S_TAG_CLOSE
70635 var S_TAG = 0;//tag name offerring
70636 var S_ATTR = 1;//attr name offerring
70637 var S_ATTR_SPACE=2;//attr name end and space offer
70638 var S_EQ = 3;//=space?
70639 var S_ATTR_NOQUOT_VALUE = 4;//attr value(no quot value only)
70640 var S_ATTR_END = 5;//attr value end and no space(quot end)
70641 var S_TAG_SPACE = 6;//(attr value end || tag end ) && (space offer)
70642 var S_TAG_CLOSE = 7;//closed el<el />
70644 function XMLReader(){
70648 XMLReader.prototype = {
70649 parse:function(source,defaultNSMap,entityMap){
70650 var domBuilder = this.domBuilder;
70651 domBuilder.startDocument();
70652 _copy(defaultNSMap ,defaultNSMap = {});
70653 parse(source,defaultNSMap,entityMap,
70654 domBuilder,this.errorHandler);
70655 domBuilder.endDocument();
70658 function parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){
70659 function fixedFromCharCode(code) {
70660 // String.prototype.fromCharCode does not supports
70661 // > 2 bytes unicode chars directly
70662 if (code > 0xffff) {
70664 var surrogate1 = 0xd800 + (code >> 10)
70665 , surrogate2 = 0xdc00 + (code & 0x3ff);
70667 return String.fromCharCode(surrogate1, surrogate2);
70669 return String.fromCharCode(code);
70672 function entityReplacer(a){
70673 var k = a.slice(1,-1);
70674 if(k in entityMap){
70675 return entityMap[k];
70676 }else if(k.charAt(0) === '#'){
70677 return fixedFromCharCode(parseInt(k.substr(1).replace('x','0x')))
70679 errorHandler.error('entity not found:'+a);
70683 function appendText(end){//has some bugs
70685 var xt = source.substring(start,end).replace(/&#?\w+;/g,entityReplacer);
70686 locator&&position(start);
70687 domBuilder.characters(xt,0,end-start);
70691 function position(p,m){
70692 while(p>=lineEnd && (m = linePattern.exec(source))){
70693 lineStart = m.index;
70694 lineEnd = lineStart + m[0].length;
70695 locator.lineNumber++;
70696 //console.log('line++:',locator,startPos,endPos)
70698 locator.columnNumber = p-lineStart+1;
70702 var linePattern = /.*(?:\r\n?|\n)|.*$/g;
70703 var locator = domBuilder.locator;
70705 var parseStack = [{currentNSMap:defaultNSMapCopy}];
70710 var tagStart = source.indexOf('<',start);
70712 if(!source.substr(start).match(/^\s*$/)){
70713 var doc = domBuilder.doc;
70714 var text = doc.createTextNode(source.substr(start));
70715 doc.appendChild(text);
70716 domBuilder.currentElement = text;
70720 if(tagStart>start){
70721 appendText(tagStart);
70723 switch(source.charAt(tagStart+1)){
70725 var end = source.indexOf('>',tagStart+3);
70726 var tagName = source.substring(tagStart+2,end);
70727 var config = parseStack.pop();
70730 tagName = source.substring(tagStart+2).replace(/[\s<].*/,'');
70731 //console.error('#@@@@@@'+tagName)
70732 errorHandler.error("end tag name: "+tagName+' is not complete:'+config.tagName);
70733 end = tagStart+1+tagName.length;
70734 }else if(tagName.match(/\s</)){
70735 tagName = tagName.replace(/[\s<].*/,'');
70736 errorHandler.error("end tag name: "+tagName+' maybe not complete');
70737 end = tagStart+1+tagName.length;
70739 //console.error(parseStack.length,parseStack)
70740 //console.error(config);
70741 var localNSMap = config.localNSMap;
70742 var endMatch = config.tagName == tagName;
70743 var endIgnoreCaseMach = endMatch || config.tagName&&config.tagName.toLowerCase() == tagName.toLowerCase();
70744 if(endIgnoreCaseMach){
70745 domBuilder.endElement(config.uri,config.localName,tagName);
70747 for(var prefix in localNSMap){
70748 domBuilder.endPrefixMapping(prefix) ;
70752 errorHandler.fatalError("end tag name: "+tagName+' is not match the current start tagName:'+config.tagName );
70755 parseStack.push(config);
70761 case '?':// <?...?>
70762 locator&&position(tagStart);
70763 end = parseInstruction(source,tagStart,domBuilder);
70765 case '!':// <!doctype,<![CDATA,<!--
70766 locator&&position(tagStart);
70767 end = parseDCC(source,tagStart,domBuilder,errorHandler);
70770 locator&&position(tagStart);
70771 var el = new ElementAttributes();
70772 var currentNSMap = parseStack[parseStack.length-1].currentNSMap;
70774 var end = parseElementStartPart(source,tagStart,el,currentNSMap,entityReplacer,errorHandler);
70775 var len = el.length;
70778 if(!el.closed && fixSelfClosed(source,end,el.tagName,closeMap)){
70780 if(!entityMap.nbsp){
70781 errorHandler.warning('unclosed xml attribute');
70784 if(locator && len){
70785 var locator2 = copyLocator(locator,{});
70786 //try{//attribute position fixed
70787 for(var i = 0;i<len;i++){
70789 position(a.offset);
70790 a.locator = copyLocator(locator,{});
70792 //}catch(e){console.error('@@@@@'+e)}
70793 domBuilder.locator = locator2;
70794 if(appendElement(el,domBuilder,currentNSMap)){
70795 parseStack.push(el);
70797 domBuilder.locator = locator;
70799 if(appendElement(el,domBuilder,currentNSMap)){
70800 parseStack.push(el);
70806 if(el.uri === 'http://www.w3.org/1999/xhtml' && !el.closed){
70807 end = parseHtmlSpecialContent(source,end,el.tagName,entityReplacer,domBuilder);
70813 errorHandler.error('element parse error: '+e);
70814 //errorHandler.error('element parse error: '+e);
70821 //TODO: 这里有可能sax回退,有位置错误风险
70822 appendText(Math.max(tagStart,start)+1);
70826 function copyLocator(f,t){
70827 t.lineNumber = f.lineNumber;
70828 t.columnNumber = f.columnNumber;
70833 * @see #appendElement(source,elStartEnd,el,selfClosed,entityReplacer,domBuilder,parseStack);
70834 * @return end of the elementStartPart(end of elementEndPart for selfClosed el)
70836 function parseElementStartPart(source,start,el,currentNSMap,entityReplacer,errorHandler){
70840 var s = S_TAG;//status
70842 var c = source.charAt(p);
70845 if(s === S_ATTR){//attrName
70846 attrName = source.slice(start,p);
70848 }else if(s === S_ATTR_SPACE){
70851 //fatalError: equal must after attrName or space after attrName
70852 throw new Error('attribute equal must after attrName');
70857 if(s === S_EQ || s === S_ATTR //|| s == S_ATTR_SPACE
70860 errorHandler.warning('attribute value must after "="');
70861 attrName = source.slice(start,p);
70864 p = source.indexOf(c,start);
70866 value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer);
70867 el.add(attrName,value,start-1);
70870 //fatalError: no end quot match
70871 throw new Error('attribute value no end \''+c+'\' match');
70873 }else if(s == S_ATTR_NOQUOT_VALUE){
70874 value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer);
70875 //console.log(attrName,value,start,p)
70876 el.add(attrName,value,start);
70878 errorHandler.warning('attribute "'+attrName+'" missed start quot('+c+')!!');
70882 //fatalError: no equal before
70883 throw new Error('attribute value must after "="');
70889 el.setTagName(source.slice(start,p));
70895 case S_ATTR_NOQUOT_VALUE:
70901 throw new Error("attribute invalid close char('/')")
70904 case ''://end document
70905 //throw new Error('unexpected end of input')
70906 errorHandler.error('unexpected end of input');
70908 el.setTagName(source.slice(start,p));
70914 el.setTagName(source.slice(start,p));
70919 case S_ATTR_NOQUOT_VALUE://Compatible state
70921 value = source.slice(start,p);
70922 if(value.slice(-1) === '/'){
70924 value = value.slice(0,-1);
70927 if(s === S_ATTR_SPACE){
70930 if(s == S_ATTR_NOQUOT_VALUE){
70931 errorHandler.warning('attribute "'+value+'" missed quot(")!!');
70932 el.add(attrName,value.replace(/&#?\w+;/g,entityReplacer),start);
70934 if(currentNSMap[''] !== 'http://www.w3.org/1999/xhtml' || !value.match(/^(?:disabled|checked|selected)$/i)){
70935 errorHandler.warning('attribute "'+value+'" missed value!! "'+value+'" instead!!');
70937 el.add(value,value,start);
70941 throw new Error('attribute value missed!!');
70943 // console.log(tagName,tagNamePattern,tagNamePattern.test(tagName))
70945 /*xml space '\x20' | #x9 | #xD | #xA; */
70949 if(c<= ' '){//space
70952 el.setTagName(source.slice(start,p));//tagName
70956 attrName = source.slice(start,p);
70959 case S_ATTR_NOQUOT_VALUE:
70960 var value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer);
70961 errorHandler.warning('attribute "'+value+'" missed quot(")!!');
70962 el.add(attrName,value,start);
70966 //case S_TAG_SPACE:
70968 //case S_ATTR_SPACE:
70970 //case S_TAG_CLOSE:
70974 //S_TAG, S_ATTR, S_EQ, S_ATTR_NOQUOT_VALUE
70975 //S_ATTR_SPACE, S_ATTR_END, S_TAG_SPACE, S_TAG_CLOSE
70977 //case S_TAG:void();break;
70978 //case S_ATTR:void();break;
70979 //case S_ATTR_NOQUOT_VALUE:void();break;
70981 var tagName = el.tagName;
70982 if(currentNSMap[''] !== 'http://www.w3.org/1999/xhtml' || !attrName.match(/^(?:disabled|checked|selected)$/i)){
70983 errorHandler.warning('attribute "'+attrName+'" missed value!! "'+attrName+'" instead2!!');
70985 el.add(attrName,attrName,start);
70990 errorHandler.warning('attribute space is required"'+attrName+'"!!');
70996 s = S_ATTR_NOQUOT_VALUE;
71000 throw new Error("elements closed character '/' and '>' must be connected to");
71003 }//end outer switch
71004 //console.log('p++',p)
71009 * @return true if has new namespace define
71011 function appendElement(el,domBuilder,currentNSMap){
71012 var tagName = el.tagName;
71013 var localNSMap = null;
71014 //var currentNSMap = parseStack[parseStack.length-1].currentNSMap;
71018 var qName = a.qName;
71019 var value = a.value;
71020 var nsp = qName.indexOf(':');
71022 var prefix = a.prefix = qName.slice(0,nsp);
71023 var localName = qName.slice(nsp+1);
71024 var nsPrefix = prefix === 'xmlns' && localName;
71028 nsPrefix = qName === 'xmlns' && '';
71030 //can not set prefix,because prefix !== ''
71031 a.localName = localName ;
71032 //prefix == null for no ns prefix attribute
71033 if(nsPrefix !== false){//hack!!
71034 if(localNSMap == null){
71036 //console.log(currentNSMap,0)
71037 _copy(currentNSMap,currentNSMap={});
71038 //console.log(currentNSMap,1)
71040 currentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;
71041 a.uri = 'http://www.w3.org/2000/xmlns/';
71042 domBuilder.startPrefixMapping(nsPrefix, value);
71048 var prefix = a.prefix;
71049 if(prefix){//no prefix attribute has no namespace
71050 if(prefix === 'xml'){
71051 a.uri = 'http://www.w3.org/XML/1998/namespace';
71052 }if(prefix !== 'xmlns'){
71053 a.uri = currentNSMap[prefix || ''];
71055 //{console.log('###'+a.qName,domBuilder.locator.systemId+'',currentNSMap,a.uri)}
71059 var nsp = tagName.indexOf(':');
71061 prefix = el.prefix = tagName.slice(0,nsp);
71062 localName = el.localName = tagName.slice(nsp+1);
71064 prefix = null;//important!!
71065 localName = el.localName = tagName;
71067 //no prefix element has default namespace
71068 var ns = el.uri = currentNSMap[prefix || ''];
71069 domBuilder.startElement(ns,localName,tagName,el);
71070 //endPrefixMapping and startPrefixMapping have not any help for dom builder
71071 //localNSMap = null
71073 domBuilder.endElement(ns,localName,tagName);
71075 for(prefix in localNSMap){
71076 domBuilder.endPrefixMapping(prefix);
71080 el.currentNSMap = currentNSMap;
71081 el.localNSMap = localNSMap;
71082 //parseStack.push(el);
71086 function parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){
71087 if(/^(?:script|textarea)$/i.test(tagName)){
71088 var elEndStart = source.indexOf('</'+tagName+'>',elStartEnd);
71089 var text = source.substring(elStartEnd+1,elEndStart);
71090 if(/[&<]/.test(text)){
71091 if(/^script$/i.test(tagName)){
71092 //if(!/\]\]>/.test(text)){
71093 //lexHandler.startCDATA();
71094 domBuilder.characters(text,0,text.length);
71095 //lexHandler.endCDATA();
71098 }//}else{//text area
71099 text = text.replace(/&#?\w+;/g,entityReplacer);
71100 domBuilder.characters(text,0,text.length);
71106 return elStartEnd+1;
71108 function fixSelfClosed(source,elStartEnd,tagName,closeMap){
71109 //if(tagName in closeMap){
71110 var pos = closeMap[tagName];
71112 //console.log(tagName)
71113 pos = source.lastIndexOf('</'+tagName+'>');
71114 if(pos<elStartEnd){//忘记闭合
71115 pos = source.lastIndexOf('</'+tagName);
71117 closeMap[tagName] =pos;
71119 return pos<elStartEnd;
71122 function _copy(source,target){
71123 for(var n in source){target[n] = source[n];}
71125 function parseDCC(source,start,domBuilder,errorHandler){//sure start with '<!'
71126 var next= source.charAt(start+2);
71129 if(source.charAt(start + 3) === '-'){
71130 var end = source.indexOf('-->',start+4);
71131 //append comment source.substring(4,end)//<!--
71133 domBuilder.comment(source,start+4,end-start-4);
71136 errorHandler.error("Unclosed comment");
71144 if(source.substr(start+3,6) == 'CDATA['){
71145 var end = source.indexOf(']]>',start+9);
71146 domBuilder.startCDATA();
71147 domBuilder.characters(source,start+9,end-start-9);
71148 domBuilder.endCDATA();
71152 //startDTD(java.lang.String name, java.lang.String publicId, java.lang.String systemId)
71153 var matchs = split(source,start);
71154 var len = matchs.length;
71155 if(len>1 && /!doctype/i.test(matchs[0][0])){
71156 var name = matchs[1][0];
71157 var pubid = len>3 && /^public$/i.test(matchs[2][0]) && matchs[3][0];
71158 var sysid = len>4 && matchs[4][0];
71159 var lastMatch = matchs[len-1];
71160 domBuilder.startDTD(name,pubid && pubid.replace(/^(['"])(.*?)\1$/,'$2'),
71161 sysid && sysid.replace(/^(['"])(.*?)\1$/,'$2'));
71162 domBuilder.endDTD();
71164 return lastMatch.index+lastMatch[0].length
71172 function parseInstruction(source,start,domBuilder){
71173 var end = source.indexOf('?>',start);
71175 var match = source.substring(start,end).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/);
71177 var len = match[0].length;
71178 domBuilder.processingInstruction(match[1], match[2]) ;
71190 function ElementAttributes(source){
71193 ElementAttributes.prototype = {
71194 setTagName:function(tagName){
71195 if(!tagNamePattern.test(tagName)){
71196 throw new Error('invalid tagName:'+tagName)
71198 this.tagName = tagName;
71200 add:function(qName,value,offset){
71201 if(!tagNamePattern.test(qName)){
71202 throw new Error('invalid attribute:'+qName)
71204 this[this.length++] = {qName:qName,value:value,offset:offset};
71207 getLocalName:function(i){return this[i].localName},
71208 getLocator:function(i){return this[i].locator},
71209 getQName:function(i){return this[i].qName},
71210 getURI:function(i){return this[i].uri},
71211 getValue:function(i){return this[i].value}
71212 // ,getIndex:function(uri, localName)){
71219 // getValue:function(){return this.getValue(this.getIndex.apply(this,arguments))},
71220 // getType:function(uri,localName){}
71221 // getType:function(i){},
71227 function _set_proto_(thiz,parent){
71228 thiz.__proto__ = parent;
71231 if(!(_set_proto_({},_set_proto_.prototype) instanceof _set_proto_)){
71232 _set_proto_ = function(thiz,parent){
71233 function p(){} p.prototype = parent;
71235 for(parent in thiz){
71236 p[parent] = thiz[parent];
71242 function split(source,start){
71245 var reg = /'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g;
71246 reg.lastIndex = start;
71247 reg.exec(source);//skip <
71248 while(match = reg.exec(source)){
71250 if(match[1])return buf;
71254 var XMLReader_1 = XMLReader;
71257 XMLReader: XMLReader_1
71262 * Object DOMException
71263 * @see http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html
71264 * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html
71267 function copy$3(src,dest){
71273 ^\w+\.prototype\.([_\w]+)\s*=\s*((?:.*\{\s*?[\r\n][\s\S]*?^})|\S.*?(?=[;\r\n]));?
71274 ^\w+\.prototype\.([_\w]+)\s*=\s*(\S.*?(?=[;\r\n]));?
71276 function _extends(Class,Super){
71277 var pt = Class.prototype;
71279 var ppt = Object.create(Super.prototype);
71280 pt.__proto__ = ppt;
71282 if(!(pt instanceof Super)){
71283 function t(){} t.prototype = Super.prototype;
71286 Class.prototype = pt = t;
71288 if(pt.constructor != Class){
71289 if(typeof Class != 'function'){
71290 console.error("unknow Class:"+Class);
71292 pt.constructor = Class;
71295 var htmlns = 'http://www.w3.org/1999/xhtml' ;
71298 var ELEMENT_NODE = NodeType.ELEMENT_NODE = 1;
71299 var ATTRIBUTE_NODE = NodeType.ATTRIBUTE_NODE = 2;
71300 var TEXT_NODE = NodeType.TEXT_NODE = 3;
71301 var CDATA_SECTION_NODE = NodeType.CDATA_SECTION_NODE = 4;
71302 var ENTITY_REFERENCE_NODE = NodeType.ENTITY_REFERENCE_NODE = 5;
71303 var ENTITY_NODE = NodeType.ENTITY_NODE = 6;
71304 var PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7;
71305 var COMMENT_NODE = NodeType.COMMENT_NODE = 8;
71306 var DOCUMENT_NODE = NodeType.DOCUMENT_NODE = 9;
71307 var DOCUMENT_TYPE_NODE = NodeType.DOCUMENT_TYPE_NODE = 10;
71308 var DOCUMENT_FRAGMENT_NODE = NodeType.DOCUMENT_FRAGMENT_NODE = 11;
71309 var NOTATION_NODE = NodeType.NOTATION_NODE = 12;
71312 var ExceptionCode = {};
71313 var ExceptionMessage = {};
71314 var INDEX_SIZE_ERR = ExceptionCode.INDEX_SIZE_ERR = ((ExceptionMessage[1]="Index size error"),1);
71315 var DOMSTRING_SIZE_ERR = ExceptionCode.DOMSTRING_SIZE_ERR = ((ExceptionMessage[2]="DOMString size error"),2);
71316 var HIERARCHY_REQUEST_ERR = ExceptionCode.HIERARCHY_REQUEST_ERR = ((ExceptionMessage[3]="Hierarchy request error"),3);
71317 var WRONG_DOCUMENT_ERR = ExceptionCode.WRONG_DOCUMENT_ERR = ((ExceptionMessage[4]="Wrong document"),4);
71318 var INVALID_CHARACTER_ERR = ExceptionCode.INVALID_CHARACTER_ERR = ((ExceptionMessage[5]="Invalid character"),5);
71319 var NO_DATA_ALLOWED_ERR = ExceptionCode.NO_DATA_ALLOWED_ERR = ((ExceptionMessage[6]="No data allowed"),6);
71320 var NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]="No modification allowed"),7);
71321 var NOT_FOUND_ERR = ExceptionCode.NOT_FOUND_ERR = ((ExceptionMessage[8]="Not found"),8);
71322 var NOT_SUPPORTED_ERR = ExceptionCode.NOT_SUPPORTED_ERR = ((ExceptionMessage[9]="Not supported"),9);
71323 var INUSE_ATTRIBUTE_ERR = ExceptionCode.INUSE_ATTRIBUTE_ERR = ((ExceptionMessage[10]="Attribute in use"),10);
71325 var INVALID_STATE_ERR = ExceptionCode.INVALID_STATE_ERR = ((ExceptionMessage[11]="Invalid state"),11);
71326 var SYNTAX_ERR = ExceptionCode.SYNTAX_ERR = ((ExceptionMessage[12]="Syntax error"),12);
71327 var INVALID_MODIFICATION_ERR = ExceptionCode.INVALID_MODIFICATION_ERR = ((ExceptionMessage[13]="Invalid modification"),13);
71328 var NAMESPACE_ERR = ExceptionCode.NAMESPACE_ERR = ((ExceptionMessage[14]="Invalid namespace"),14);
71329 var INVALID_ACCESS_ERR = ExceptionCode.INVALID_ACCESS_ERR = ((ExceptionMessage[15]="Invalid access"),15);
71332 function DOMException$2(code, message) {
71333 if(message instanceof Error){
71334 var error = message;
71337 Error.call(this, ExceptionMessage[code]);
71338 this.message = ExceptionMessage[code];
71339 if(Error.captureStackTrace) Error.captureStackTrace(this, DOMException$2);
71342 if(message) this.message = this.message + ": " + message;
71344 }DOMException$2.prototype = Error.prototype;
71345 copy$3(ExceptionCode,DOMException$2);
71347 * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177
71348 * The NodeList interface provides the abstraction of an ordered collection of nodes, without defining or constraining how this collection is implemented. NodeList objects in the DOM are live.
71349 * The items in the NodeList are accessible via an integral index, starting from 0.
71351 function NodeList() {
71352 }NodeList.prototype = {
71354 * The number of nodes in the list. The range of valid child node indices is 0 to length-1 inclusive.
71359 * Returns the indexth item in the collection. If index is greater than or equal to the number of nodes in the list, this returns null.
71361 * @param index unsigned long
71362 * Index into the collection.
71364 * The node at the indexth position in the NodeList, or null if that is not a valid index.
71366 item: function(index) {
71367 return this[index] || null;
71369 toString:function(isHTML,nodeFilter){
71370 for(var buf = [], i = 0;i<this.length;i++){
71371 serializeToString(this[i],buf,isHTML,nodeFilter);
71373 return buf.join('');
71376 function LiveNodeList(node,refresh){
71378 this._refresh = refresh;
71379 _updateLiveList(this);
71381 function _updateLiveList(list){
71382 var inc = list._node._inc || list._node.ownerDocument._inc;
71383 if(list._inc != inc){
71384 var ls = list._refresh(list._node);
71385 //console.log(ls.length)
71386 __set__(list,'length',ls.length);
71391 LiveNodeList.prototype.item = function(i){
71392 _updateLiveList(this);
71396 _extends(LiveNodeList,NodeList);
71399 * Objects implementing the NamedNodeMap interface are used to represent collections of nodes that can be accessed by name. Note that NamedNodeMap does not inherit from NodeList; NamedNodeMaps are not maintained in any particular order. Objects contained in an object implementing NamedNodeMap may also be accessed by an ordinal index, but this is simply to allow convenient enumeration of the contents of a NamedNodeMap, and does not imply that the DOM specifies an order to these Nodes.
71400 * NamedNodeMap objects in the DOM are live.
71401 * used for attributes or DocumentType entities
71403 function NamedNodeMap() {
71405 function _findNodeIndex(list,node){
71406 var i = list.length;
71408 if(list[i] === node){return i}
71412 function _addNamedNode(el,list,newAttr,oldAttr){
71414 list[_findNodeIndex(list,oldAttr)] = newAttr;
71416 list[list.length++] = newAttr;
71419 newAttr.ownerElement = el;
71420 var doc = el.ownerDocument;
71422 oldAttr && _onRemoveAttribute(doc,el,oldAttr);
71423 _onAddAttribute(doc,el,newAttr);
71427 function _removeNamedNode(el,list,attr){
71428 //console.log('remove attr:'+attr)
71429 var i = _findNodeIndex(list,attr);
71431 var lastIndex = list.length-1;
71432 while(i<lastIndex){
71433 list[i] = list[++i];
71435 list.length = lastIndex;
71437 var doc = el.ownerDocument;
71439 _onRemoveAttribute(doc,el,attr);
71440 attr.ownerElement = null;
71444 throw DOMException$2(NOT_FOUND_ERR,new Error(el.tagName+'@'+attr))
71447 NamedNodeMap.prototype = {
71449 item:NodeList.prototype.item,
71450 getNamedItem: function(key) {
71451 // if(key.indexOf(':')>0 || key == 'xmlns'){
71455 var i = this.length;
71457 var attr = this[i];
71458 //console.log(attr.nodeName,key)
71459 if(attr.nodeName == key){
71464 setNamedItem: function(attr) {
71465 var el = attr.ownerElement;
71466 if(el && el!=this._ownerElement){
71467 throw new DOMException$2(INUSE_ATTRIBUTE_ERR);
71469 var oldAttr = this.getNamedItem(attr.nodeName);
71470 _addNamedNode(this._ownerElement,this,attr,oldAttr);
71474 setNamedItemNS: function(attr) {// raises: WRONG_DOCUMENT_ERR,NO_MODIFICATION_ALLOWED_ERR,INUSE_ATTRIBUTE_ERR
71475 var el = attr.ownerElement, oldAttr;
71476 if(el && el!=this._ownerElement){
71477 throw new DOMException$2(INUSE_ATTRIBUTE_ERR);
71479 oldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName);
71480 _addNamedNode(this._ownerElement,this,attr,oldAttr);
71485 removeNamedItem: function(key) {
71486 var attr = this.getNamedItem(key);
71487 _removeNamedNode(this._ownerElement,this,attr);
71491 },// raises: NOT_FOUND_ERR,NO_MODIFICATION_ALLOWED_ERR
71494 removeNamedItemNS:function(namespaceURI,localName){
71495 var attr = this.getNamedItemNS(namespaceURI,localName);
71496 _removeNamedNode(this._ownerElement,this,attr);
71499 getNamedItemNS: function(namespaceURI, localName) {
71500 var i = this.length;
71502 var node = this[i];
71503 if(node.localName == localName && node.namespaceURI == namespaceURI){
71511 * @see http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-102161490
71513 function DOMImplementation(/* Object */ features) {
71514 this._features = {};
71516 for (var feature in features) {
71517 this._features = features[feature];
71521 DOMImplementation.prototype = {
71522 hasFeature: function(/* string */ feature, /* string */ version) {
71523 var versions = this._features[feature.toLowerCase()];
71524 if (versions && (!version || version in versions)) {
71530 // Introduced in DOM Level 2:
71531 createDocument:function(namespaceURI, qualifiedName, doctype){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR,WRONG_DOCUMENT_ERR
71532 var doc = new Document();
71533 doc.implementation = this;
71534 doc.childNodes = new NodeList();
71535 doc.doctype = doctype;
71537 doc.appendChild(doctype);
71540 var root = doc.createElementNS(namespaceURI,qualifiedName);
71541 doc.appendChild(root);
71545 // Introduced in DOM Level 2:
71546 createDocumentType:function(qualifiedName, publicId, systemId){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR
71547 var node = new DocumentType();
71548 node.name = qualifiedName;
71549 node.nodeName = qualifiedName;
71550 node.publicId = publicId;
71551 node.systemId = systemId;
71552 // Introduced in DOM Level 2:
71553 //readonly attribute DOMString internalSubset;
71556 // readonly attribute NamedNodeMap entities;
71557 // readonly attribute NamedNodeMap notations;
71564 * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247
71567 function Node$2() {
71569 Node$2.prototype = {
71572 previousSibling : null,
71573 nextSibling : null,
71577 ownerDocument : null,
71579 namespaceURI : null,
71582 // Modified in DOM Level 2:
71583 insertBefore:function(newChild, refChild){//raises
71584 return _insertBefore(this,newChild,refChild);
71586 replaceChild:function(newChild, oldChild){//raises
71587 this.insertBefore(newChild,oldChild);
71589 this.removeChild(oldChild);
71592 removeChild:function(oldChild){
71593 return _removeChild(this,oldChild);
71595 appendChild:function(newChild){
71596 return this.insertBefore(newChild,null);
71598 hasChildNodes:function(){
71599 return this.firstChild != null;
71601 cloneNode:function(deep){
71602 return cloneNode(this.ownerDocument||this,this,deep);
71604 // Modified in DOM Level 2:
71605 normalize:function(){
71606 var child = this.firstChild;
71608 var next = child.nextSibling;
71609 if(next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE){
71610 this.removeChild(next);
71611 child.appendData(next.data);
71618 // Introduced in DOM Level 2:
71619 isSupported:function(feature, version){
71620 return this.ownerDocument.implementation.hasFeature(feature,version);
71622 // Introduced in DOM Level 2:
71623 hasAttributes:function(){
71624 return this.attributes.length>0;
71626 lookupPrefix:function(namespaceURI){
71629 var map = el._nsMap;
71633 if(map[n] == namespaceURI){
71638 el = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;
71642 // Introduced in DOM Level 3:
71643 lookupNamespaceURI:function(prefix){
71646 var map = el._nsMap;
71650 return map[prefix] ;
71653 el = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;
71657 // Introduced in DOM Level 3:
71658 isDefaultNamespace:function(namespaceURI){
71659 var prefix = this.lookupPrefix(namespaceURI);
71660 return prefix == null;
71665 function _xmlEncoder(c){
71666 return c == '<' && '<' ||
71667 c == '>' && '>' ||
71668 c == '&' && '&' ||
71669 c == '"' && '"' ||
71670 '&#'+c.charCodeAt()+';'
71674 copy$3(NodeType,Node$2);
71675 copy$3(NodeType,Node$2.prototype);
71678 * @param callback return true for continue,false for break
71679 * @return boolean true: break visit;
71681 function _visitNode(node,callback){
71682 if(callback(node)){
71685 if(node = node.firstChild){
71687 if(_visitNode(node,callback)){return true}
71688 }while(node=node.nextSibling)
71694 function Document(){
71696 function _onAddAttribute(doc,el,newAttr){
71698 var ns = newAttr.namespaceURI ;
71699 if(ns == 'http://www.w3.org/2000/xmlns/'){
71701 el._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value;
71704 function _onRemoveAttribute(doc,el,newAttr,remove){
71706 var ns = newAttr.namespaceURI ;
71707 if(ns == 'http://www.w3.org/2000/xmlns/'){
71709 delete el._nsMap[newAttr.prefix?newAttr.localName:''];
71712 function _onUpdateChild(doc,el,newChild){
71713 if(doc && doc._inc){
71715 //update childNodes
71716 var cs = el.childNodes;
71718 cs[cs.length++] = newChild;
71721 var child = el.firstChild;
71725 child =child.nextSibling;
71736 * writeable properties:
71737 * nodeValue,Attr:value,CharacterData:data
71740 function _removeChild(parentNode,child){
71741 var previous = child.previousSibling;
71742 var next = child.nextSibling;
71744 previous.nextSibling = next;
71746 parentNode.firstChild = next;
71749 next.previousSibling = previous;
71751 parentNode.lastChild = previous;
71753 _onUpdateChild(parentNode.ownerDocument,parentNode);
71757 * preformance key(refChild == null)
71759 function _insertBefore(parentNode,newChild,nextChild){
71760 var cp = newChild.parentNode;
71762 cp.removeChild(newChild);//remove and update
71764 if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){
71765 var newFirst = newChild.firstChild;
71766 if (newFirst == null) {
71769 var newLast = newChild.lastChild;
71771 newFirst = newLast = newChild;
71773 var pre = nextChild ? nextChild.previousSibling : parentNode.lastChild;
71775 newFirst.previousSibling = pre;
71776 newLast.nextSibling = nextChild;
71780 pre.nextSibling = newFirst;
71782 parentNode.firstChild = newFirst;
71784 if(nextChild == null){
71785 parentNode.lastChild = newLast;
71787 nextChild.previousSibling = newLast;
71790 newFirst.parentNode = parentNode;
71791 }while(newFirst !== newLast && (newFirst= newFirst.nextSibling))
71792 _onUpdateChild(parentNode.ownerDocument||parentNode,parentNode);
71793 //console.log(parentNode.lastChild.nextSibling == null)
71794 if (newChild.nodeType == DOCUMENT_FRAGMENT_NODE) {
71795 newChild.firstChild = newChild.lastChild = null;
71799 function _appendSingleChild(parentNode,newChild){
71800 var cp = newChild.parentNode;
71802 var pre = parentNode.lastChild;
71803 cp.removeChild(newChild);//remove and update
71804 var pre = parentNode.lastChild;
71806 var pre = parentNode.lastChild;
71807 newChild.parentNode = parentNode;
71808 newChild.previousSibling = pre;
71809 newChild.nextSibling = null;
71811 pre.nextSibling = newChild;
71813 parentNode.firstChild = newChild;
71815 parentNode.lastChild = newChild;
71816 _onUpdateChild(parentNode.ownerDocument,parentNode,newChild);
71818 //console.log("__aa",parentNode.lastChild.nextSibling == null)
71820 Document.prototype = {
71821 //implementation : null,
71822 nodeName : '#document',
71823 nodeType : DOCUMENT_NODE,
71825 documentElement : null,
71828 insertBefore : function(newChild, refChild){//raises
71829 if(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){
71830 var child = newChild.firstChild;
71832 var next = child.nextSibling;
71833 this.insertBefore(child,refChild);
71838 if(this.documentElement == null && newChild.nodeType == ELEMENT_NODE){
71839 this.documentElement = newChild;
71842 return _insertBefore(this,newChild,refChild),(newChild.ownerDocument = this),newChild;
71844 removeChild : function(oldChild){
71845 if(this.documentElement == oldChild){
71846 this.documentElement = null;
71848 return _removeChild(this,oldChild);
71850 // Introduced in DOM Level 2:
71851 importNode : function(importedNode,deep){
71852 return importNode(this,importedNode,deep);
71854 // Introduced in DOM Level 2:
71855 getElementById : function(id){
71857 _visitNode(this.documentElement,function(node){
71858 if(node.nodeType == ELEMENT_NODE){
71859 if(node.getAttribute('id') == id){
71868 //document factory method:
71869 createElement : function(tagName){
71870 var node = new Element();
71871 node.ownerDocument = this;
71872 node.nodeName = tagName;
71873 node.tagName = tagName;
71874 node.childNodes = new NodeList();
71875 var attrs = node.attributes = new NamedNodeMap();
71876 attrs._ownerElement = node;
71879 createDocumentFragment : function(){
71880 var node = new DocumentFragment();
71881 node.ownerDocument = this;
71882 node.childNodes = new NodeList();
71885 createTextNode : function(data){
71886 var node = new Text();
71887 node.ownerDocument = this;
71888 node.appendData(data);
71891 createComment : function(data){
71892 var node = new Comment();
71893 node.ownerDocument = this;
71894 node.appendData(data);
71897 createCDATASection : function(data){
71898 var node = new CDATASection();
71899 node.ownerDocument = this;
71900 node.appendData(data);
71903 createProcessingInstruction : function(target,data){
71904 var node = new ProcessingInstruction();
71905 node.ownerDocument = this;
71906 node.tagName = node.target = target;
71907 node.nodeValue= node.data = data;
71910 createAttribute : function(name){
71911 var node = new Attr();
71912 node.ownerDocument = this;
71914 node.nodeName = name;
71915 node.localName = name;
71916 node.specified = true;
71919 createEntityReference : function(name){
71920 var node = new EntityReference();
71921 node.ownerDocument = this;
71922 node.nodeName = name;
71925 // Introduced in DOM Level 2:
71926 createElementNS : function(namespaceURI,qualifiedName){
71927 var node = new Element();
71928 var pl = qualifiedName.split(':');
71929 var attrs = node.attributes = new NamedNodeMap();
71930 node.childNodes = new NodeList();
71931 node.ownerDocument = this;
71932 node.nodeName = qualifiedName;
71933 node.tagName = qualifiedName;
71934 node.namespaceURI = namespaceURI;
71935 if(pl.length == 2){
71936 node.prefix = pl[0];
71937 node.localName = pl[1];
71939 //el.prefix = null;
71940 node.localName = qualifiedName;
71942 attrs._ownerElement = node;
71945 // Introduced in DOM Level 2:
71946 createAttributeNS : function(namespaceURI,qualifiedName){
71947 var node = new Attr();
71948 var pl = qualifiedName.split(':');
71949 node.ownerDocument = this;
71950 node.nodeName = qualifiedName;
71951 node.name = qualifiedName;
71952 node.namespaceURI = namespaceURI;
71953 node.specified = true;
71954 if(pl.length == 2){
71955 node.prefix = pl[0];
71956 node.localName = pl[1];
71958 //el.prefix = null;
71959 node.localName = qualifiedName;
71964 _extends(Document,Node$2);
71967 function Element() {
71969 }Element.prototype = {
71970 nodeType : ELEMENT_NODE,
71971 hasAttribute : function(name){
71972 return this.getAttributeNode(name)!=null;
71974 getAttribute : function(name){
71975 var attr = this.getAttributeNode(name);
71976 return attr && attr.value || '';
71978 getAttributeNode : function(name){
71979 return this.attributes.getNamedItem(name);
71981 setAttribute : function(name, value){
71982 var attr = this.ownerDocument.createAttribute(name);
71983 attr.value = attr.nodeValue = "" + value;
71984 this.setAttributeNode(attr);
71986 removeAttribute : function(name){
71987 var attr = this.getAttributeNode(name);
71988 attr && this.removeAttributeNode(attr);
71991 //four real opeartion method
71992 appendChild:function(newChild){
71993 if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){
71994 return this.insertBefore(newChild,null);
71996 return _appendSingleChild(this,newChild);
71999 setAttributeNode : function(newAttr){
72000 return this.attributes.setNamedItem(newAttr);
72002 setAttributeNodeNS : function(newAttr){
72003 return this.attributes.setNamedItemNS(newAttr);
72005 removeAttributeNode : function(oldAttr){
72006 //console.log(this == oldAttr.ownerElement)
72007 return this.attributes.removeNamedItem(oldAttr.nodeName);
72009 //get real attribute name,and remove it by removeAttributeNode
72010 removeAttributeNS : function(namespaceURI, localName){
72011 var old = this.getAttributeNodeNS(namespaceURI, localName);
72012 old && this.removeAttributeNode(old);
72015 hasAttributeNS : function(namespaceURI, localName){
72016 return this.getAttributeNodeNS(namespaceURI, localName)!=null;
72018 getAttributeNS : function(namespaceURI, localName){
72019 var attr = this.getAttributeNodeNS(namespaceURI, localName);
72020 return attr && attr.value || '';
72022 setAttributeNS : function(namespaceURI, qualifiedName, value){
72023 var attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName);
72024 attr.value = attr.nodeValue = "" + value;
72025 this.setAttributeNode(attr);
72027 getAttributeNodeNS : function(namespaceURI, localName){
72028 return this.attributes.getNamedItemNS(namespaceURI, localName);
72031 getElementsByTagName : function(tagName){
72032 return new LiveNodeList(this,function(base){
72034 _visitNode(base,function(node){
72035 if(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){
72042 getElementsByTagNameNS : function(namespaceURI, localName){
72043 return new LiveNodeList(this,function(base){
72045 _visitNode(base,function(node){
72046 if(node !== base && node.nodeType === ELEMENT_NODE && (namespaceURI === '*' || node.namespaceURI === namespaceURI) && (localName === '*' || node.localName == localName)){
72055 Document.prototype.getElementsByTagName = Element.prototype.getElementsByTagName;
72056 Document.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS;
72059 _extends(Element,Node$2);
72061 }Attr.prototype.nodeType = ATTRIBUTE_NODE;
72062 _extends(Attr,Node$2);
72065 function CharacterData() {
72066 }CharacterData.prototype = {
72068 substringData : function(offset, count) {
72069 return this.data.substring(offset, offset+count);
72071 appendData: function(text) {
72072 text = this.data+text;
72073 this.nodeValue = this.data = text;
72074 this.length = text.length;
72076 insertData: function(offset,text) {
72077 this.replaceData(offset,0,text);
72080 appendChild:function(newChild){
72081 throw new Error(ExceptionMessage[HIERARCHY_REQUEST_ERR])
72083 deleteData: function(offset, count) {
72084 this.replaceData(offset,count,"");
72086 replaceData: function(offset, count, text) {
72087 var start = this.data.substring(0,offset);
72088 var end = this.data.substring(offset+count);
72089 text = start + text + end;
72090 this.nodeValue = this.data = text;
72091 this.length = text.length;
72094 _extends(CharacterData,Node$2);
72096 }Text.prototype = {
72097 nodeName : "#text",
72098 nodeType : TEXT_NODE,
72099 splitText : function(offset) {
72100 var text = this.data;
72101 var newText = text.substring(offset);
72102 text = text.substring(0, offset);
72103 this.data = this.nodeValue = text;
72104 this.length = text.length;
72105 var newNode = this.ownerDocument.createTextNode(newText);
72106 if(this.parentNode){
72107 this.parentNode.insertBefore(newNode, this.nextSibling);
72112 _extends(Text,CharacterData);
72113 function Comment() {
72114 }Comment.prototype = {
72115 nodeName : "#comment",
72116 nodeType : COMMENT_NODE
72118 _extends(Comment,CharacterData);
72120 function CDATASection() {
72121 }CDATASection.prototype = {
72122 nodeName : "#cdata-section",
72123 nodeType : CDATA_SECTION_NODE
72125 _extends(CDATASection,CharacterData);
72128 function DocumentType() {
72129 }DocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE;
72130 _extends(DocumentType,Node$2);
72132 function Notation() {
72133 }Notation.prototype.nodeType = NOTATION_NODE;
72134 _extends(Notation,Node$2);
72136 function Entity() {
72137 }Entity.prototype.nodeType = ENTITY_NODE;
72138 _extends(Entity,Node$2);
72140 function EntityReference() {
72141 }EntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE;
72142 _extends(EntityReference,Node$2);
72144 function DocumentFragment() {
72145 }DocumentFragment.prototype.nodeName = "#document-fragment";
72146 DocumentFragment.prototype.nodeType = DOCUMENT_FRAGMENT_NODE;
72147 _extends(DocumentFragment,Node$2);
72150 function ProcessingInstruction() {
72152 ProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE;
72153 _extends(ProcessingInstruction,Node$2);
72154 function XMLSerializer$1(){}
72155 XMLSerializer$1.prototype.serializeToString = function(node,isHtml,nodeFilter){
72156 return nodeSerializeToString.call(node,isHtml,nodeFilter);
72158 Node$2.prototype.toString = nodeSerializeToString;
72159 function nodeSerializeToString(isHtml,nodeFilter){
72161 var refNode = this.nodeType == 9?this.documentElement:this;
72162 var prefix = refNode.prefix;
72163 var uri = refNode.namespaceURI;
72165 if(uri && prefix == null){
72166 //console.log(prefix)
72167 var prefix = refNode.lookupPrefix(uri);
72168 if(prefix == null){
72170 var visibleNamespaces=[
72171 {namespace:uri,prefix:null}
72172 //{namespace:uri,prefix:''}
72176 serializeToString(this,buf,isHtml,nodeFilter,visibleNamespaces);
72177 //console.log('###',this.nodeType,uri,prefix,buf.join(''))
72178 return buf.join('');
72180 function needNamespaceDefine(node,isHTML, visibleNamespaces) {
72181 var prefix = node.prefix||'';
72182 var uri = node.namespaceURI;
72183 if (!prefix && !uri){
72186 if (prefix === "xml" && uri === "http://www.w3.org/XML/1998/namespace"
72187 || uri == 'http://www.w3.org/2000/xmlns/'){
72191 var i = visibleNamespaces.length;
72192 //console.log('@@@@',node.tagName,prefix,uri,visibleNamespaces)
72194 var ns = visibleNamespaces[i];
72195 // get namespace prefix
72196 //console.log(node.nodeType,node.tagName,ns.prefix,prefix)
72197 if (ns.prefix == prefix){
72198 return ns.namespace != uri;
72201 //console.log(isHTML,uri,prefix=='')
72202 //if(isHTML && prefix ==null && uri == 'http://www.w3.org/1999/xhtml'){
72205 //node.flag = '11111'
72206 //console.error(3,true,node.flag,node.prefix,node.namespaceURI)
72209 function serializeToString(node,buf,isHTML,nodeFilter,visibleNamespaces){
72211 node = nodeFilter(node);
72213 if(typeof node == 'string'){
72220 //buf.sort.apply(attrs, attributeSorter);
72222 switch(node.nodeType){
72224 if (!visibleNamespaces) visibleNamespaces = [];
72225 var startVisibleNamespaces = visibleNamespaces.length;
72226 var attrs = node.attributes;
72227 var len = attrs.length;
72228 var child = node.firstChild;
72229 var nodeName = node.tagName;
72231 isHTML = (htmlns === node.namespaceURI) ||isHTML;
72232 buf.push('<',nodeName);
72236 for(var i=0;i<len;i++){
72237 // add namespaces for attributes
72238 var attr = attrs.item(i);
72239 if (attr.prefix == 'xmlns') {
72240 visibleNamespaces.push({ prefix: attr.localName, namespace: attr.value });
72241 }else if(attr.nodeName == 'xmlns'){
72242 visibleNamespaces.push({ prefix: '', namespace: attr.value });
72245 for(var i=0;i<len;i++){
72246 var attr = attrs.item(i);
72247 if (needNamespaceDefine(attr,isHTML, visibleNamespaces)) {
72248 var prefix = attr.prefix||'';
72249 var uri = attr.namespaceURI;
72250 var ns = prefix ? ' xmlns:' + prefix : " xmlns";
72251 buf.push(ns, '="' , uri , '"');
72252 visibleNamespaces.push({ prefix: prefix, namespace:uri });
72254 serializeToString(attr,buf,isHTML,nodeFilter,visibleNamespaces);
72256 // add namespace for current node
72257 if (needNamespaceDefine(node,isHTML, visibleNamespaces)) {
72258 var prefix = node.prefix||'';
72259 var uri = node.namespaceURI;
72260 var ns = prefix ? ' xmlns:' + prefix : " xmlns";
72261 buf.push(ns, '="' , uri , '"');
72262 visibleNamespaces.push({ prefix: prefix, namespace:uri });
72265 if(child || isHTML && !/^(?:meta|link|img|br|hr|input)$/i.test(nodeName)){
72267 //if is cdata child node
72268 if(isHTML && /^script$/i.test(nodeName)){
72271 buf.push(child.data);
72273 serializeToString(child,buf,isHTML,nodeFilter,visibleNamespaces);
72275 child = child.nextSibling;
72280 serializeToString(child,buf,isHTML,nodeFilter,visibleNamespaces);
72281 child = child.nextSibling;
72284 buf.push('</',nodeName,'>');
72288 // remove added visible namespaces
72289 //visibleNamespaces.length = startVisibleNamespaces;
72291 case DOCUMENT_NODE:
72292 case DOCUMENT_FRAGMENT_NODE:
72293 var child = node.firstChild;
72295 serializeToString(child,buf,isHTML,nodeFilter,visibleNamespaces);
72296 child = child.nextSibling;
72299 case ATTRIBUTE_NODE:
72300 return buf.push(' ',node.name,'="',node.value.replace(/[<&"]/g,_xmlEncoder),'"');
72302 return buf.push(node.data.replace(/[<&]/g,_xmlEncoder));
72303 case CDATA_SECTION_NODE:
72304 return buf.push( '<![CDATA[',node.data,']]>');
72306 return buf.push( "<!--",node.data,"-->");
72307 case DOCUMENT_TYPE_NODE:
72308 var pubid = node.publicId;
72309 var sysid = node.systemId;
72310 buf.push('<!DOCTYPE ',node.name);
72312 buf.push(' PUBLIC "',pubid);
72313 if (sysid && sysid!='.') {
72314 buf.push( '" "',sysid);
72317 }else if(sysid && sysid!='.'){
72318 buf.push(' SYSTEM "',sysid,'">');
72320 var sub = node.internalSubset;
72322 buf.push(" [",sub,"]");
72327 case PROCESSING_INSTRUCTION_NODE:
72328 return buf.push( "<?",node.target," ",node.data,"?>");
72329 case ENTITY_REFERENCE_NODE:
72330 return buf.push( '&',node.nodeName,';');
72331 //case ENTITY_NODE:
72332 //case NOTATION_NODE:
72334 buf.push('??',node.nodeName);
72337 function importNode(doc,node,deep){
72339 switch (node.nodeType) {
72341 node2 = node.cloneNode(false);
72342 node2.ownerDocument = doc;
72343 //var attrs = node2.attributes;
72344 //var len = attrs.length;
72345 //for(var i=0;i<len;i++){
72346 //node2.setAttributeNodeNS(importNode(doc,attrs.item(i),deep));
72348 case DOCUMENT_FRAGMENT_NODE:
72350 case ATTRIBUTE_NODE:
72353 //case ENTITY_REFERENCE_NODE:
72354 //case PROCESSING_INSTRUCTION_NODE:
72355 ////case TEXT_NODE:
72356 //case CDATA_SECTION_NODE:
72357 //case COMMENT_NODE:
72360 //case DOCUMENT_NODE:
72361 //case DOCUMENT_TYPE_NODE:
72362 //cannot be imported.
72363 //case ENTITY_NODE:
72364 //case NOTATION_NODE:
72365 //can not hit in level3
72369 node2 = node.cloneNode(false);//false
72371 node2.ownerDocument = doc;
72372 node2.parentNode = null;
72374 var child = node.firstChild;
72376 node2.appendChild(importNode(doc,child,deep));
72377 child = child.nextSibling;
72383 //var _relationMap = {firstChild:1,lastChild:1,previousSibling:1,nextSibling:1,
72384 // attributes:1,childNodes:1,parentNode:1,documentElement:1,doctype,};
72385 function cloneNode(doc,node,deep){
72386 var node2 = new node.constructor();
72387 for(var n in node){
72389 if(typeof v != 'object' ){
72395 if(node.childNodes){
72396 node2.childNodes = new NodeList();
72398 node2.ownerDocument = doc;
72399 switch (node2.nodeType) {
72401 var attrs = node.attributes;
72402 var attrs2 = node2.attributes = new NamedNodeMap();
72403 var len = attrs.length;
72404 attrs2._ownerElement = node2;
72405 for(var i=0;i<len;i++){
72406 node2.setAttributeNode(cloneNode(doc,attrs.item(i),true));
72409 case ATTRIBUTE_NODE:
72413 var child = node.firstChild;
72415 node2.appendChild(cloneNode(doc,child,deep));
72416 child = child.nextSibling;
72422 function __set__(object,key,value){
72423 object[key] = value;
72427 if(Object.defineProperty){
72428 Object.defineProperty(LiveNodeList.prototype,'length',{
72430 _updateLiveList(this);
72431 return this.$$length;
72434 Object.defineProperty(Node$2.prototype,'textContent',{
72436 return getTextContent(this);
72438 set:function(data){
72439 switch(this.nodeType){
72441 case DOCUMENT_FRAGMENT_NODE:
72442 while(this.firstChild){
72443 this.removeChild(this.firstChild);
72445 if(data || String(data)){
72446 this.appendChild(this.ownerDocument.createTextNode(data));
72453 this.nodeValue = data;
72458 function getTextContent(node){
72459 switch(node.nodeType){
72461 case DOCUMENT_FRAGMENT_NODE:
72463 node = node.firstChild;
72465 if(node.nodeType!==7 && node.nodeType !==8){
72466 buf.push(getTextContent(node));
72468 node = node.nextSibling;
72470 return buf.join('');
72472 return node.nodeValue;
72475 __set__ = function(object,key,value){
72476 //console.log(value)
72477 object['$$'+key] = value;
72483 //if(typeof require == 'function'){
72484 var DOMImplementation_1 = DOMImplementation;
72485 var XMLSerializer_1 = XMLSerializer$1;
72489 DOMImplementation: DOMImplementation_1,
72490 XMLSerializer: XMLSerializer_1
72493 var domParser = createCommonjsModule(function (module, exports) {
72494 function DOMParser(options){
72495 this.options = options ||{locator:{}};
72498 DOMParser.prototype.parseFromString = function(source,mimeType){
72499 var options = this.options;
72500 var sax = new XMLReader();
72501 var domBuilder = options.domBuilder || new DOMHandler();//contentHandler and LexicalHandler
72502 var errorHandler = options.errorHandler;
72503 var locator = options.locator;
72504 var defaultNSMap = options.xmlns||{};
72505 var entityMap = {'lt':'<','gt':'>','amp':'&','quot':'"','apos':"'"};
72507 domBuilder.setDocumentLocator(locator);
72510 sax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator);
72511 sax.domBuilder = options.domBuilder || domBuilder;
72512 if(/\/x?html?$/.test(mimeType)){
72513 entityMap.nbsp = '\xa0';
72514 entityMap.copy = '\xa9';
72515 defaultNSMap['']= 'http://www.w3.org/1999/xhtml';
72517 defaultNSMap.xml = defaultNSMap.xml || 'http://www.w3.org/XML/1998/namespace';
72519 sax.parse(source,defaultNSMap,entityMap);
72521 sax.errorHandler.error("invalid doc source");
72523 return domBuilder.doc;
72525 function buildErrorHandler(errorImpl,domBuilder,locator){
72527 if(domBuilder instanceof DOMHandler){
72530 errorImpl = domBuilder ;
72532 var errorHandler = {};
72533 var isCallback = errorImpl instanceof Function;
72534 locator = locator||{};
72535 function build(key){
72536 var fn = errorImpl[key];
72537 if(!fn && isCallback){
72538 fn = errorImpl.length == 2?function(msg){errorImpl(key,msg);}:errorImpl;
72540 errorHandler[key] = fn && function(msg){
72541 fn('[xmldom '+key+']\t'+msg+_locator(locator));
72546 build('fatalError');
72547 return errorHandler;
72550 //console.log('#\n\n\n\n\n\n\n####')
72552 * +ContentHandler+ErrorHandler
72553 * +LexicalHandler+EntityResolver2
72554 * -DeclHandler-DTDHandler
72556 * DefaultHandler:EntityResolver, DTDHandler, ContentHandler, ErrorHandler
72557 * DefaultHandler2:DefaultHandler,LexicalHandler, DeclHandler, EntityResolver2
72558 * @link http://www.saxproject.org/apidoc/org/xml/sax/helpers/DefaultHandler.html
72560 function DOMHandler() {
72561 this.cdata = false;
72563 function position(locator,node){
72564 node.lineNumber = locator.lineNumber;
72565 node.columnNumber = locator.columnNumber;
72568 * @see org.xml.sax.ContentHandler#startDocument
72569 * @link http://www.saxproject.org/apidoc/org/xml/sax/ContentHandler.html
72571 DOMHandler.prototype = {
72572 startDocument : function() {
72573 this.doc = new DOMImplementation().createDocument(null, null, null);
72574 if (this.locator) {
72575 this.doc.documentURI = this.locator.systemId;
72578 startElement:function(namespaceURI, localName, qName, attrs) {
72579 var doc = this.doc;
72580 var el = doc.createElementNS(namespaceURI, qName||localName);
72581 var len = attrs.length;
72582 appendElement(this, el);
72583 this.currentElement = el;
72585 this.locator && position(this.locator,el);
72586 for (var i = 0 ; i < len; i++) {
72587 var namespaceURI = attrs.getURI(i);
72588 var value = attrs.getValue(i);
72589 var qName = attrs.getQName(i);
72590 var attr = doc.createAttributeNS(namespaceURI, qName);
72591 this.locator &&position(attrs.getLocator(i),attr);
72592 attr.value = attr.nodeValue = value;
72593 el.setAttributeNode(attr);
72596 endElement:function(namespaceURI, localName, qName) {
72597 var current = this.currentElement;
72598 var tagName = current.tagName;
72599 this.currentElement = current.parentNode;
72601 startPrefixMapping:function(prefix, uri) {
72603 endPrefixMapping:function(prefix) {
72605 processingInstruction:function(target, data) {
72606 var ins = this.doc.createProcessingInstruction(target, data);
72607 this.locator && position(this.locator,ins);
72608 appendElement(this, ins);
72610 ignorableWhitespace:function(ch, start, length) {
72612 characters:function(chars, start, length) {
72613 chars = _toString.apply(this,arguments);
72614 //console.log(chars)
72617 var charNode = this.doc.createCDATASection(chars);
72619 var charNode = this.doc.createTextNode(chars);
72621 if(this.currentElement){
72622 this.currentElement.appendChild(charNode);
72623 }else if(/^\s*$/.test(chars)){
72624 this.doc.appendChild(charNode);
72627 this.locator && position(this.locator,charNode);
72630 skippedEntity:function(name) {
72632 endDocument:function() {
72633 this.doc.normalize();
72635 setDocumentLocator:function (locator) {
72636 if(this.locator = locator){// && !('lineNumber' in locator)){
72637 locator.lineNumber = 0;
72641 comment:function(chars, start, length) {
72642 chars = _toString.apply(this,arguments);
72643 var comm = this.doc.createComment(chars);
72644 this.locator && position(this.locator,comm);
72645 appendElement(this, comm);
72648 startCDATA:function() {
72649 //used in characters() methods
72652 endCDATA:function() {
72653 this.cdata = false;
72656 startDTD:function(name, publicId, systemId) {
72657 var impl = this.doc.implementation;
72658 if (impl && impl.createDocumentType) {
72659 var dt = impl.createDocumentType(name, publicId, systemId);
72660 this.locator && position(this.locator,dt);
72661 appendElement(this, dt);
72665 * @see org.xml.sax.ErrorHandler
72666 * @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html
72668 warning:function(error) {
72669 console.warn('[xmldom warning]\t'+error,_locator(this.locator));
72671 error:function(error) {
72672 console.error('[xmldom error]\t'+error,_locator(this.locator));
72674 fatalError:function(error) {
72675 console.error('[xmldom fatalError]\t'+error,_locator(this.locator));
72679 function _locator(l){
72681 return '\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']'
72684 function _toString(chars,start,length){
72685 if(typeof chars == 'string'){
72686 return chars.substr(start,length)
72687 }else{//java sax connect width xmldom on rhino(what about: "? && !(chars instanceof String)")
72688 if(chars.length >= start+length || start){
72689 return new java.lang.String(chars,start,length)+'';
72696 * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/LexicalHandler.html
72697 * used method of org.xml.sax.ext.LexicalHandler:
72698 * #comment(chars, start, length)
72701 * #startDTD(name, publicId, systemId)
72704 * IGNORED method of org.xml.sax.ext.LexicalHandler:
72706 * #startEntity(name)
72710 * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/DeclHandler.html
72711 * IGNORED method of org.xml.sax.ext.DeclHandler
72712 * #attributeDecl(eName, aName, type, mode, value)
72713 * #elementDecl(name, model)
72714 * #externalEntityDecl(name, publicId, systemId)
72715 * #internalEntityDecl(name, value)
72716 * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/EntityResolver2.html
72717 * IGNORED method of org.xml.sax.EntityResolver2
72718 * #resolveEntity(String name,String publicId,String baseURI,String systemId)
72719 * #resolveEntity(publicId, systemId)
72720 * #getExternalSubset(name, baseURI)
72721 * @link http://www.saxproject.org/apidoc/org/xml/sax/DTDHandler.html
72722 * IGNORED method of org.xml.sax.DTDHandler
72723 * #notationDecl(name, publicId, systemId) {};
72724 * #unparsedEntityDecl(name, publicId, systemId, notationName) {};
72726 "endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl".replace(/\w+/g,function(key){
72727 DOMHandler.prototype[key] = function(){return null};
72730 /* Private static helpers treated below as private instance methods, so don't need to add these to the public API; we might use a Relator to also get rid of non-standard public properties */
72731 function appendElement (hander,node) {
72732 if (!hander.currentElement) {
72733 hander.doc.appendChild(node);
72735 hander.currentElement.appendChild(node);
72737 }//appendChild and setAttributeNS are preformance key
72739 //if(typeof require == 'function'){
72740 var XMLReader = sax.XMLReader;
72741 var DOMImplementation = exports.DOMImplementation = dom.DOMImplementation;
72742 exports.XMLSerializer = dom.XMLSerializer ;
72743 exports.DOMParser = DOMParser;
72746 var domParser_1 = domParser.DOMImplementation;
72747 var domParser_2 = domParser.XMLSerializer;
72748 var domParser_3 = domParser.DOMParser;
72750 var togeojson = createCommonjsModule(function (module, exports) {
72751 var toGeoJSON = (function() {
72753 var removeSpace = /\s*/g,
72754 trimSpace = /^\s*|\s*$/g,
72755 splitSpace = /\s+/;
72756 // generate a short, numeric hash of a string
72757 function okhash(x) {
72758 if (!x || !x.length) return 0;
72759 for (var i = 0, h = 0; i < x.length; i++) {
72760 h = ((h << 5) - h) + x.charCodeAt(i) | 0;
72763 // all Y children of X
72764 function get(x, y) { return x.getElementsByTagName(y); }
72765 function attr(x, y) { return x.getAttribute(y); }
72766 function attrf(x, y) { return parseFloat(attr(x, y)); }
72767 // one Y child of X, if any, otherwise null
72768 function get1(x, y) { var n = get(x, y); return n.length ? n[0] : null; }
72769 // https://developer.mozilla.org/en-US/docs/Web/API/Node.normalize
72770 function norm(el) { if (el.normalize) { el.normalize(); } return el; }
72771 // cast array x into numbers
72772 function numarray(x) {
72773 for (var j = 0, o = []; j < x.length; j++) { o[j] = parseFloat(x[j]); }
72776 // get the content of a text node, if any
72777 function nodeVal(x) {
72778 if (x) { norm(x); }
72779 return (x && x.textContent) || '';
72781 // get the contents of multiple text nodes, if present
72782 function getMulti(x, ys) {
72784 for (k = 0; k < ys.length; k++) {
72785 n = get1(x, ys[k]);
72786 if (n) o[ys[k]] = nodeVal(n);
72790 // add properties of Y to X, overwriting if present in both
72791 function extend(x, y) { for (var k in y) x[k] = y[k]; }
72792 // get one coordinate from a coordinate array, if any
72793 function coord1(v) { return numarray(v.replace(removeSpace, '').split(',')); }
72794 // get all coordinates from a coordinate array as [[],[]]
72795 function coord(v) {
72796 var coords = v.replace(trimSpace, '').split(splitSpace),
72798 for (var i = 0; i < coords.length; i++) {
72799 o.push(coord1(coords[i]));
72803 function coordPair(x) {
72804 var ll = [attrf(x, 'lon'), attrf(x, 'lat')],
72805 ele = get1(x, 'ele'),
72806 // handle namespaced attribute in browser
72807 heartRate = get1(x, 'gpxtpx:hr') || get1(x, 'hr'),
72808 time = get1(x, 'time'),
72811 e = parseFloat(nodeVal(ele));
72818 time: time ? nodeVal(time) : null,
72819 heartRate: heartRate ? parseFloat(nodeVal(heartRate)) : null
72823 // create a new feature collection parent object
72826 type: 'FeatureCollection',
72832 if (typeof XMLSerializer !== 'undefined') {
72833 /* istanbul ignore next */
72834 serializer = new XMLSerializer();
72835 // only require xmldom in a node environment
72836 } else if (typeof process === 'object' && !process.browser) {
72837 serializer = new (domParser.XMLSerializer)();
72839 function xml2str(str) {
72840 // IE9 will create a new XMLSerializer but it'll crash immediately.
72841 // This line is ignored because we don't run coverage tests in IE9
72842 /* istanbul ignore next */
72843 if (str.xml !== undefined) return str.xml;
72844 return serializer.serializeToString(str);
72848 kml: function(doc) {
72851 // styleindex keeps track of hashed styles in order to match features
72852 styleIndex = {}, styleByHash = {},
72853 // stylemapindex keeps track of style maps to expose in properties
72854 styleMapIndex = {},
72855 // atomic geospatial types supported by KML - MultiGeometry is
72856 // handled separately
72857 geotypes = ['Polygon', 'LineString', 'Point', 'Track', 'gx:Track'],
72858 // all root placemarks in the file
72859 placemarks = get(doc, 'Placemark'),
72860 styles = get(doc, 'Style'),
72861 styleMaps = get(doc, 'StyleMap');
72863 for (var k = 0; k < styles.length; k++) {
72864 var hash = okhash(xml2str(styles[k])).toString(16);
72865 styleIndex['#' + attr(styles[k], 'id')] = hash;
72866 styleByHash[hash] = styles[k];
72868 for (var l = 0; l < styleMaps.length; l++) {
72869 styleIndex['#' + attr(styleMaps[l], 'id')] = okhash(xml2str(styleMaps[l])).toString(16);
72870 var pairs = get(styleMaps[l], 'Pair');
72872 for (var m = 0; m < pairs.length; m++) {
72873 pairsMap[nodeVal(get1(pairs[m], 'key'))] = nodeVal(get1(pairs[m], 'styleUrl'));
72875 styleMapIndex['#' + attr(styleMaps[l], 'id')] = pairsMap;
72878 for (var j = 0; j < placemarks.length; j++) {
72879 gj.features = gj.features.concat(getPlacemark(placemarks[j]));
72881 function kmlColor(v) {
72882 var color, opacity;
72884 if (v.substr(0, 1) === '#') { v = v.substr(1); }
72885 if (v.length === 6 || v.length === 3) { color = v; }
72886 if (v.length === 8) {
72887 opacity = parseInt(v.substr(0, 2), 16) / 255;
72888 color = '#' + v.substr(6, 2) +
72892 return [color, isNaN(opacity) ? undefined : opacity];
72894 function gxCoord(v) { return numarray(v.split(' ')); }
72895 function gxCoords(root) {
72896 var elems = get(root, 'coord', 'gx'), coords = [], times = [];
72897 if (elems.length === 0) elems = get(root, 'gx:coord');
72898 for (var i = 0; i < elems.length; i++) coords.push(gxCoord(nodeVal(elems[i])));
72899 var timeElems = get(root, 'when');
72900 for (var j = 0; j < timeElems.length; j++) times.push(nodeVal(timeElems[j]));
72906 function getGeometry(root) {
72907 var geomNode, geomNodes, i, j, k, geoms = [], coordTimes = [];
72908 if (get1(root, 'MultiGeometry')) { return getGeometry(get1(root, 'MultiGeometry')); }
72909 if (get1(root, 'MultiTrack')) { return getGeometry(get1(root, 'MultiTrack')); }
72910 if (get1(root, 'gx:MultiTrack')) { return getGeometry(get1(root, 'gx:MultiTrack')); }
72911 for (i = 0; i < geotypes.length; i++) {
72912 geomNodes = get(root, geotypes[i]);
72914 for (j = 0; j < geomNodes.length; j++) {
72915 geomNode = geomNodes[j];
72916 if (geotypes[i] === 'Point') {
72919 coordinates: coord1(nodeVal(get1(geomNode, 'coordinates')))
72921 } else if (geotypes[i] === 'LineString') {
72923 type: 'LineString',
72924 coordinates: coord(nodeVal(get1(geomNode, 'coordinates')))
72926 } else if (geotypes[i] === 'Polygon') {
72927 var rings = get(geomNode, 'LinearRing'),
72929 for (k = 0; k < rings.length; k++) {
72930 coords.push(coord(nodeVal(get1(rings[k], 'coordinates'))));
72934 coordinates: coords
72936 } else if (geotypes[i] === 'Track' ||
72937 geotypes[i] === 'gx:Track') {
72938 var track = gxCoords(geomNode);
72940 type: 'LineString',
72941 coordinates: track.coords
72943 if (track.times.length) coordTimes.push(track.times);
72950 coordTimes: coordTimes
72953 function getPlacemark(root) {
72954 var geomsAndTimes = getGeometry(root), i, properties = {},
72955 name = nodeVal(get1(root, 'name')),
72956 address = nodeVal(get1(root, 'address')),
72957 styleUrl = nodeVal(get1(root, 'styleUrl')),
72958 description = nodeVal(get1(root, 'description')),
72959 timeSpan = get1(root, 'TimeSpan'),
72960 timeStamp = get1(root, 'TimeStamp'),
72961 extendedData = get1(root, 'ExtendedData'),
72962 lineStyle = get1(root, 'LineStyle'),
72963 polyStyle = get1(root, 'PolyStyle'),
72964 visibility = get1(root, 'visibility');
72966 if (!geomsAndTimes.geoms.length) return [];
72967 if (name) properties.name = name;
72968 if (address) properties.address = address;
72970 if (styleUrl[0] !== '#') {
72971 styleUrl = '#' + styleUrl;
72974 properties.styleUrl = styleUrl;
72975 if (styleIndex[styleUrl]) {
72976 properties.styleHash = styleIndex[styleUrl];
72978 if (styleMapIndex[styleUrl]) {
72979 properties.styleMapHash = styleMapIndex[styleUrl];
72980 properties.styleHash = styleIndex[styleMapIndex[styleUrl].normal];
72982 // Try to populate the lineStyle or polyStyle since we got the style hash
72983 var style = styleByHash[properties.styleHash];
72985 if (!lineStyle) lineStyle = get1(style, 'LineStyle');
72986 if (!polyStyle) polyStyle = get1(style, 'PolyStyle');
72989 if (description) properties.description = description;
72991 var begin = nodeVal(get1(timeSpan, 'begin'));
72992 var end = nodeVal(get1(timeSpan, 'end'));
72993 properties.timespan = { begin: begin, end: end };
72996 properties.timestamp = nodeVal(get1(timeStamp, 'when'));
72999 var linestyles = kmlColor(nodeVal(get1(lineStyle, 'color'))),
73000 color = linestyles[0],
73001 opacity = linestyles[1],
73002 width = parseFloat(nodeVal(get1(lineStyle, 'width')));
73003 if (color) properties.stroke = color;
73004 if (!isNaN(opacity)) properties['stroke-opacity'] = opacity;
73005 if (!isNaN(width)) properties['stroke-width'] = width;
73008 var polystyles = kmlColor(nodeVal(get1(polyStyle, 'color'))),
73009 pcolor = polystyles[0],
73010 popacity = polystyles[1],
73011 fill = nodeVal(get1(polyStyle, 'fill')),
73012 outline = nodeVal(get1(polyStyle, 'outline'));
73013 if (pcolor) properties.fill = pcolor;
73014 if (!isNaN(popacity)) properties['fill-opacity'] = popacity;
73015 if (fill) properties['fill-opacity'] = fill === '1' ? properties['fill-opacity'] || 1 : 0;
73016 if (outline) properties['stroke-opacity'] = outline === '1' ? properties['stroke-opacity'] || 1 : 0;
73018 if (extendedData) {
73019 var datas = get(extendedData, 'Data'),
73020 simpleDatas = get(extendedData, 'SimpleData');
73022 for (i = 0; i < datas.length; i++) {
73023 properties[datas[i].getAttribute('name')] = nodeVal(get1(datas[i], 'value'));
73025 for (i = 0; i < simpleDatas.length; i++) {
73026 properties[simpleDatas[i].getAttribute('name')] = nodeVal(simpleDatas[i]);
73030 properties.visibility = nodeVal(visibility);
73032 if (geomsAndTimes.coordTimes.length) {
73033 properties.coordTimes = (geomsAndTimes.coordTimes.length === 1) ?
73034 geomsAndTimes.coordTimes[0] : geomsAndTimes.coordTimes;
73038 geometry: (geomsAndTimes.geoms.length === 1) ? geomsAndTimes.geoms[0] : {
73039 type: 'GeometryCollection',
73040 geometries: geomsAndTimes.geoms
73042 properties: properties
73044 if (attr(root, 'id')) feature.id = attr(root, 'id');
73049 gpx: function(doc) {
73051 tracks = get(doc, 'trk'),
73052 routes = get(doc, 'rte'),
73053 waypoints = get(doc, 'wpt'),
73054 // a feature collection
73057 for (i = 0; i < tracks.length; i++) {
73058 feature = getTrack(tracks[i]);
73059 if (feature) gj.features.push(feature);
73061 for (i = 0; i < routes.length; i++) {
73062 feature = getRoute(routes[i]);
73063 if (feature) gj.features.push(feature);
73065 for (i = 0; i < waypoints.length; i++) {
73066 gj.features.push(getPoint(waypoints[i]));
73068 function getPoints(node, pointname) {
73069 var pts = get(node, pointname),
73074 if (l < 2) return {}; // Invalid line in GeoJSON
73075 for (var i = 0; i < l; i++) {
73076 var c = coordPair(pts[i]);
73077 line.push(c.coordinates);
73078 if (c.time) times.push(c.time);
73079 if (c.heartRate) heartRates.push(c.heartRate);
73084 heartRates: heartRates
73087 function getTrack(node) {
73088 var segments = get(node, 'trkseg'),
73093 for (var i = 0; i < segments.length; i++) {
73094 line = getPoints(segments[i], 'trkpt');
73096 if (line.line) track.push(line.line);
73097 if (line.times && line.times.length) times.push(line.times);
73098 if (line.heartRates && line.heartRates.length) heartRates.push(line.heartRates);
73101 if (track.length === 0) return;
73102 var properties = getProperties(node);
73103 extend(properties, getLineStyle(get1(node, 'extensions')));
73104 if (times.length) properties.coordTimes = track.length === 1 ? times[0] : times;
73105 if (heartRates.length) properties.heartRates = track.length === 1 ? heartRates[0] : heartRates;
73108 properties: properties,
73110 type: track.length === 1 ? 'LineString' : 'MultiLineString',
73111 coordinates: track.length === 1 ? track[0] : track
73115 function getRoute(node) {
73116 var line = getPoints(node, 'rtept');
73117 if (!line.line) return;
73118 var prop = getProperties(node);
73119 extend(prop, getLineStyle(get1(node, 'extensions')));
73124 type: 'LineString',
73125 coordinates: line.line
73130 function getPoint(node) {
73131 var prop = getProperties(node);
73132 extend(prop, getMulti(node, ['sym']));
73138 coordinates: coordPair(node).coordinates
73142 function getLineStyle(extensions) {
73145 var lineStyle = get1(extensions, 'line');
73147 var color = nodeVal(get1(lineStyle, 'color')),
73148 opacity = parseFloat(nodeVal(get1(lineStyle, 'opacity'))),
73149 width = parseFloat(nodeVal(get1(lineStyle, 'width')));
73150 if (color) style.stroke = color;
73151 if (!isNaN(opacity)) style['stroke-opacity'] = opacity;
73152 // GPX width is in mm, convert to px with 96 px per inch
73153 if (!isNaN(width)) style['stroke-width'] = width * 96 / 25.4;
73158 function getProperties(node) {
73159 var prop = getMulti(node, ['name', 'cmt', 'desc', 'type', 'time', 'keywords']),
73160 links = get(node, 'link');
73161 if (links.length) prop.links = [];
73162 for (var i = 0, link; i < links.length; i++) {
73163 link = { href: attr(links[i], 'href') };
73164 extend(link, getMulti(links[i], ['text', 'type']));
73165 prop.links.push(link);
73175 module.exports = toGeoJSON;
73178 var _initialized = false;
73179 var _enabled = false;
73183 function svgData(projection, context, dispatch) {
73184 var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
73185 var _showLabels = true;
73186 var detected = utilDetect();
73187 var layer = d3_select(null);
73195 if (_initialized) return; // run once
73201 event.stopPropagation();
73202 event.preventDefault();
73203 event.dataTransfer.dropEffect = 'copy';
73207 .attr('dropzone', 'copy')
73208 .on('drop.svgData', function() {
73209 event.stopPropagation();
73210 event.preventDefault();
73211 if (!detected.filedrop) return;
73212 drawData.fileList(event.dataTransfer.files);
73214 .on('dragenter.svgData', over)
73215 .on('dragexit.svgData', over)
73216 .on('dragover.svgData', over);
73218 _initialized = true;
73222 function getService() {
73223 if (services$1.vectorTile && !_vtService) {
73224 _vtService = services$1.vectorTile;
73225 _vtService.event.on('loadedData', throttledRedraw);
73226 } else if (!services$1.vectorTile && _vtService) {
73234 function showLayer() {
73238 .style('opacity', 0)
73241 .style('opacity', 1)
73242 .on('end', function () { dispatch.call('change'); });
73246 function hideLayer() {
73247 throttledRedraw.cancel();
73252 .style('opacity', 0)
73253 .on('end', layerOff);
73257 function layerOn() {
73258 layer.style('display', 'block');
73262 function layerOff() {
73263 layer.selectAll('.viewfield-group').remove();
73264 layer.style('display', 'none');
73268 // ensure that all geojson features in a collection have IDs
73269 function ensureIDs(gj) {
73270 if (!gj) return null;
73272 if (gj.type === 'FeatureCollection') {
73273 for (var i = 0; i < gj.features.length; i++) {
73274 ensureFeatureID(gj.features[i]);
73277 ensureFeatureID(gj);
73283 // ensure that each single Feature object has a unique ID
73284 function ensureFeatureID(feature) {
73285 if (!feature) return;
73286 feature.__featurehash__ = utilHashcode(fastJsonStableStringify(feature));
73291 // Prefer an array of Features instead of a FeatureCollection
73292 function getFeatures(gj) {
73293 if (!gj) return [];
73295 if (gj.type === 'FeatureCollection') {
73296 return gj.features;
73303 function featureKey(d) {
73304 return d.__featurehash__;
73308 function isPolygon(d) {
73309 return d.geometry.type === 'Polygon' || d.geometry.type === 'MultiPolygon';
73313 function clipPathID(d) {
73314 return 'data-' + d.__featurehash__ + '-clippath';
73318 function featureClasses(d) {
73320 'data' + d.__featurehash__,
73322 isPolygon(d) ? 'area' : '',
73323 d.__layerID__ || ''
73324 ].filter(Boolean).join(' ');
73328 function drawData(selection) {
73329 var vtService = getService();
73330 var getPath = svgPath(projection).geojson;
73331 var getAreaPath = svgPath(projection, null, true).geojson;
73332 var hasData = drawData.hasData();
73334 layer = selection.selectAll('.layer-mapdata')
73335 .data(_enabled && hasData ? [0] : []);
73340 layer = layer.enter()
73342 .attr('class', 'layer-mapdata')
73345 var surface = context.surface();
73346 if (!surface || surface.empty()) return; // not ready to draw yet, starting up
73350 var geoData, polygonData;
73351 if (_template && vtService) { // fetch data from vector tile service
73352 var sourceID = _template;
73353 vtService.loadTiles(sourceID, _template, projection);
73354 geoData = vtService.data(sourceID, projection);
73356 geoData = getFeatures(_geojson);
73358 geoData = geoData.filter(getPath);
73359 polygonData = geoData.filter(isPolygon);
73362 // Draw clip paths for polygons
73363 var clipPaths = surface.selectAll('defs').selectAll('.clipPath-data')
73364 .data(polygonData, featureKey);
73369 var clipPathsEnter = clipPaths.enter()
73370 .append('clipPath')
73371 .attr('class', 'clipPath-data')
73372 .attr('id', clipPathID);
73377 clipPaths.merge(clipPathsEnter)
73379 .attr('d', getAreaPath);
73382 // Draw fill, shadow, stroke layers
73383 var datagroups = layer
73384 .selectAll('g.datagroup')
73385 .data(['fill', 'shadow', 'stroke']);
73387 datagroups = datagroups.enter()
73389 .attr('class', function(d) { return 'datagroup datagroup-' + d; })
73390 .merge(datagroups);
73400 var paths = datagroups
73402 .data(function(layer) { return pathData[layer]; }, featureKey);
73409 paths = paths.enter()
73411 .attr('class', function(d) {
73412 var datagroup = this.parentNode.__data__;
73413 return 'pathdata ' + datagroup + ' ' + featureClasses(d);
73415 .attr('clip-path', function(d) {
73416 var datagroup = this.parentNode.__data__;
73417 return datagroup === 'fill' ? ('url(#' + clipPathID(d) + ')') : null;
73420 .attr('d', function(d) {
73421 var datagroup = this.parentNode.__data__;
73422 return datagroup === 'fill' ? getAreaPath(d) : getPath(d);
73428 .call(drawLabels, 'label-halo', geoData)
73429 .call(drawLabels, 'label', geoData);
73432 function drawLabels(selection, textClass, data) {
73433 var labelPath = d3_geoPath(projection);
73434 var labelData = data.filter(function(d) {
73435 return _showLabels && d.properties && (d.properties.desc || d.properties.name);
73438 var labels = selection.selectAll('text.' + textClass)
73439 .data(labelData, featureKey);
73446 labels = labels.enter()
73448 .attr('class', function(d) { return textClass + ' ' + featureClasses(d); })
73450 .text(function(d) {
73451 return d.properties.desc || d.properties.name;
73453 .attr('x', function(d) {
73454 var centroid = labelPath.centroid(d);
73455 return centroid[0] + 11;
73457 .attr('y', function(d) {
73458 var centroid = labelPath.centroid(d);
73459 return centroid[1];
73465 function getExtension(fileName) {
73466 if (!fileName) return;
73468 var re = /\.(gpx|kml|(geo)?json)$/i;
73469 var match = fileName.toLowerCase().match(re);
73470 return match && match.length && match[0];
73474 function xmlToDom(textdata) {
73475 return (new DOMParser()).parseFromString(textdata, 'text/xml');
73479 drawData.setFile = function(extension, data) {
73486 switch (extension) {
73488 gj = togeojson.gpx(xmlToDom(data));
73491 gj = togeojson.kml(xmlToDom(data));
73495 gj = JSON.parse(data);
73500 if (Object.keys(gj).length) {
73501 _geojson = ensureIDs(gj);
73502 _src = extension + ' data file';
73506 dispatch.call('change');
73511 drawData.showLabels = function(val) {
73512 if (!arguments.length) return _showLabels;
73519 drawData.enabled = function(val) {
73520 if (!arguments.length) return _enabled;
73529 dispatch.call('change');
73534 drawData.hasData = function() {
73535 var gj = _geojson || {};
73536 return !!(_template || Object.keys(gj).length);
73540 drawData.template = function(val, src) {
73541 if (!arguments.length) return _template;
73543 // test source against OSM imagery blacklists..
73544 var osm = context.connection();
73546 var blacklists = osm.imageryBlacklists();
73551 for (var i = 0; i < blacklists.length; i++) {
73553 regex = new RegExp(blacklists[i]);
73554 fail = regex.test(val);
73562 // ensure at least one test was run.
73564 regex = new RegExp('.*\.google(apis)?\..*/(vt|kh)[\?/].*([xyz]=.*){3}.*');
73565 fail = regex.test(val);
73573 // strip off the querystring/hash from the template,
73574 // it often includes the access token
73575 _src = src || ('vectortile:' + val.split(/[?#]/)[0]);
73577 dispatch.call('change');
73582 drawData.geojson = function(gj, src) {
73583 if (!arguments.length) return _geojson;
73591 if (Object.keys(gj).length) {
73592 _geojson = ensureIDs(gj);
73593 _src = src || 'unknown.geojson';
73596 dispatch.call('change');
73601 drawData.fileList = function(fileList) {
73602 if (!arguments.length) return _fileList;
73605 _fileList = fileList;
73609 if (!fileList || !fileList.length) return this;
73610 var f = fileList[0];
73611 var extension = getExtension(f.name);
73612 var reader = new FileReader();
73613 reader.onload = (function() {
73614 return function(e) {
73615 drawData.setFile(extension, e.target.result);
73619 reader.readAsText(f);
73625 drawData.url = function(url, defaultExtension) {
73631 // strip off any querystring/hash from the url before checking extension
73632 var testUrl = url.split(/[?#]/)[0];
73633 var extension = getExtension(testUrl) || defaultExtension;
73637 .then(function(data) {
73638 drawData.setFile(extension, data);
73640 .catch(function() {
73645 drawData.template(url);
73652 drawData.getSrc = function() {
73657 drawData.fitZoom = function() {
73658 var features = getFeatures(_geojson);
73659 if (!features.length) return;
73661 var map = context.map();
73662 var viewport = map.trimmedExtent().polygon();
73663 var coords = features.reduce(function(coords, feature) {
73664 var c = feature.geometry.coordinates;
73666 /* eslint-disable no-fallthrough */
73667 switch (feature.geometry.type) {
73674 case 'MultiPolygon':
73675 c = utilArrayFlatten(c);
73677 case 'MultiLineString':
73678 c = utilArrayFlatten(c);
73681 /* eslint-enable no-fallthrough */
73683 return utilArrayUnion(coords, c);
73686 if (!geoPolygonIntersectsPolygon(viewport, coords, true)) {
73687 var extent = geoExtent(d3_geoBounds({ type: 'LineString', coordinates: coords }));
73688 map.centerZoom(extent.center(), map.trimmedExtentZoom(extent));
73699 function svgDebug(projection, context) {
73701 function drawDebug(selection) {
73702 var showsTile = context.getDebug('tile');
73703 var showsCollision = context.getDebug('collision');
73704 var showsImagery = context.getDebug('imagery');
73705 var showsCommunity = context.getDebug('community');
73706 var showsImperial = context.getDebug('imperial');
73707 var showsDriveLeft = context.getDebug('driveLeft');
73708 var showsTouchTargets = context.getDebug('target');
73709 var showsDownloaded = context.getDebug('downloaded');
73711 var debugData = [];
73713 debugData.push({ class: 'red', label: 'tile' });
73715 if (showsCollision) {
73716 debugData.push({ class: 'yellow', label: 'collision' });
73718 if (showsImagery) {
73719 debugData.push({ class: 'orange', label: 'imagery' });
73721 if (showsCommunity) {
73722 debugData.push({ class: 'blue', label: 'community' });
73724 if (showsImperial) {
73725 debugData.push({ class: 'cyan', label: 'imperial' });
73727 if (showsDriveLeft) {
73728 debugData.push({ class: 'green', label: 'driveLeft' });
73730 if (showsTouchTargets) {
73731 debugData.push({ class: 'pink', label: 'touchTargets' });
73733 if (showsDownloaded) {
73734 debugData.push({ class: 'purple', label: 'downloaded' });
73738 var legend = d3_select('#content')
73739 .selectAll('.debug-legend')
73740 .data(debugData.length ? [0] : []);
73745 legend = legend.enter()
73747 .attr('class', 'fillD debug-legend')
73751 var legendItems = legend.selectAll('.debug-legend-item')
73752 .data(debugData, function(d) { return d.label; });
73757 legendItems.enter()
73759 .attr('class', function(d) { return 'debug-legend-item ' + d.class; })
73760 .text(function(d) { return d.label; });
73763 var layer = selection.selectAll('.layer-debug')
73764 .data(showsImagery || showsCommunity || showsImperial || showsDriveLeft || showsDownloaded ? [0] : []);
73769 layer = layer.enter()
73771 .attr('class', 'layer-debug')
73776 var extent = context.map().extent();
73777 var matchImagery = (showsImagery && data.imagery.query.bbox(extent.rectangle(), true)) || [];
73778 var features = matchImagery.map(function(d) { return data.imagery.features[d.id]; });
73780 var imagery = layer.selectAll('path.debug-imagery')
73788 .attr('class', 'debug-imagery debug orange');
73792 var community = layer.selectAll('path.debug-community')
73793 .data(showsCommunity ? Object.values(data.community.features) : []);
73800 .attr('class', 'debug-community debug blue');
73804 var imperial = layer
73805 .selectAll('path.debug-imperial')
73806 .data(showsImperial ? [dataImperial] : []);
73813 .attr('class', 'debug-imperial debug cyan');
73817 var driveLeft = layer
73818 .selectAll('path.debug-drive-left')
73819 .data(showsDriveLeft ? [dataDriveLeft] : []);
73826 .attr('class', 'debug-drive-left debug green');
73830 var osm = context.connection();
73831 var dataDownloaded = [];
73834 var rtree = osm.caches('get').tile.rtree;
73835 dataDownloaded = rtree.all().map(function(bbox) {
73838 properties: { id: bbox.id },
73842 [ bbox.minX, bbox.minY ],
73843 [ bbox.minX, bbox.maxY ],
73844 [ bbox.maxX, bbox.maxY ],
73845 [ bbox.maxX, bbox.minY ],
73846 [ bbox.minX, bbox.minY ]
73854 var downloaded = layer
73855 .selectAll('path.debug-downloaded')
73856 .data(showsDownloaded ? dataDownloaded : []);
73863 .attr('class', 'debug-downloaded debug purple');
73867 layer.selectAll('path')
73868 .attr('d', svgPath(projection).geojson);
73872 // This looks strange because `enabled` methods on other layers are
73873 // chainable getter/setters, and this one is just a getter.
73874 drawDebug.enabled = function() {
73875 if (!arguments.length) {
73876 return context.getDebug('tile') ||
73877 context.getDebug('collision') ||
73878 context.getDebug('imagery') ||
73879 context.getDebug('imperial') ||
73880 context.getDebug('driveLeft') ||
73881 context.getDebug('target') ||
73882 context.getDebug('downloaded');
73892 var _keepRightEnabled = false;
73893 var _keepRightService;
73896 function svgKeepRight(projection, context, dispatch) {
73897 var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
73899 var touchLayer = d3_select(null);
73900 var drawLayer = d3_select(null);
73901 var _keepRightVisible = false;
73904 function markerPath(selection, klass) {
73906 .attr('class', klass)
73907 .attr('transform', 'translate(-4, -24)')
73908 .attr('d', 'M11.6,6.2H7.1l1.4-5.1C8.6,0.6,8.1,0,7.5,0H2.2C1.7,0,1.3,0.3,1.3,0.8L0,10.2c-0.1,0.6,0.4,1.1,0.9,1.1h4.6l-1.8,7.6C3.6,19.4,4.1,20,4.7,20c0.3,0,0.6-0.2,0.8-0.5l6.9-11.9C12.7,7,12.3,6.2,11.6,6.2z');
73912 // Loosely-coupled keepRight service for fetching errors.
73913 function getService() {
73914 if (services$1.keepRight && !_keepRightService) {
73915 _keepRightService = services$1.keepRight;
73916 _keepRightService.on('loaded', throttledRedraw);
73917 } else if (!services$1.keepRight && _keepRightService) {
73918 _keepRightService = null;
73921 return _keepRightService;
73926 function editOn() {
73927 if (!_keepRightVisible) {
73928 _keepRightVisible = true;
73930 .style('display', 'block');
73935 // Immediately remove the errors and their touch targets
73936 function editOff() {
73937 if (_keepRightVisible) {
73938 _keepRightVisible = false;
73940 .style('display', 'none');
73941 drawLayer.selectAll('.qa_error.keepRight')
73943 touchLayer.selectAll('.qa_error.keepRight')
73949 // Enable the layer. This shows the errors and transitions them to visible.
73950 function layerOn() {
73954 .style('opacity', 0)
73957 .style('opacity', 1)
73958 .on('end interrupt', function () {
73959 dispatch.call('change');
73964 // Disable the layer. This transitions the layer invisible and then hides the errors.
73965 function layerOff() {
73966 throttledRedraw.cancel();
73967 drawLayer.interrupt();
73968 touchLayer.selectAll('.qa_error.keepRight')
73974 .style('opacity', 0)
73975 .on('end interrupt', function () {
73977 dispatch.call('change');
73982 // Update the error markers
73983 function updateMarkers() {
73984 if (!_keepRightVisible || !_keepRightEnabled) return;
73986 var service = getService();
73987 var selectedID = context.selectedErrorID();
73988 var data = (service ? service.getErrors(projection) : []);
73989 var getTransform = svgPointTransform(projection);
73992 var markers = drawLayer.selectAll('.qa_error.keepRight')
73993 .data(data, function(d) { return d.id; });
74000 var markersEnter = markers.enter()
74002 .attr('class', function(d) {
74006 'error_id-' + d.id,
74007 'error_type-' + d.parent_error_type
74017 .attr('class', 'stroke');
74021 .call(markerPath, 'shadow');
74025 .attr('class', 'qa_error-fill')
74026 .attr('width', '20px')
74027 .attr('height', '20px')
74029 .attr('y', '-22px')
74030 .attr('xlink:href', '#iD-icon-bolt');
74034 .merge(markersEnter)
74036 .classed('selected', function(d) { return d.id === selectedID; })
74037 .attr('transform', getTransform);
74041 if (touchLayer.empty()) return;
74042 var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
74044 var targets = touchLayer.selectAll('.qa_error.keepRight')
74045 .data(data, function(d) { return d.id; });
74054 .attr('width', '20px')
74055 .attr('height', '20px')
74057 .attr('y', '-22px')
74060 .attr('class', function(d) {
74061 return 'qa_error ' + d.service + ' target error_id-' + d.id + ' ' + fillClass;
74063 .attr('transform', getTransform);
74066 function sortY(a, b) {
74067 return (a.id === selectedID) ? 1
74068 : (b.id === selectedID) ? -1
74069 : (a.severity === 'error' && b.severity !== 'error') ? 1
74070 : (b.severity === 'error' && a.severity !== 'error') ? -1
74071 : b.loc[1] - a.loc[1];
74076 // Draw the keepRight layer and schedule loading errors and updating markers.
74077 function drawKeepRight(selection) {
74078 var service = getService();
74080 var surface = context.surface();
74081 if (surface && !surface.empty()) {
74082 touchLayer = surface.selectAll('.data-layer.touch .layer-touch.markers');
74085 drawLayer = selection.selectAll('.layer-keepRight')
74086 .data(service ? [0] : []);
74091 drawLayer = drawLayer.enter()
74093 .attr('class', 'layer-keepRight')
74094 .style('display', _keepRightEnabled ? 'block' : 'none')
74097 if (_keepRightEnabled) {
74098 if (service && ~~context.map().zoom() >= minZoom) {
74100 service.loadErrors(projection);
74109 // Toggles the layer on and off
74110 drawKeepRight.enabled = function(val) {
74111 if (!arguments.length) return _keepRightEnabled;
74113 _keepRightEnabled = val;
74114 if (_keepRightEnabled) {
74118 if (context.selectedErrorID()) {
74119 context.enter(modeBrowse(context));
74123 dispatch.call('change');
74128 drawKeepRight.supported = function() {
74129 return !!getService();
74133 return drawKeepRight;
74136 function svgGeolocate(projection) {
74137 var layer = d3_select(null);
74142 if (svgGeolocate.initialized) return; // run once
74143 svgGeolocate.enabled = false;
74144 svgGeolocate.initialized = true;
74147 function showLayer() {
74148 layer.style('display', 'block');
74152 function hideLayer() {
74156 .style('opacity', 0);
74159 function layerOn() {
74161 .style('opacity', 0)
74164 .style('opacity', 1);
74168 function layerOff() {
74169 layer.style('display', 'none');
74172 function transform(d) {
74173 return svgPointTransform(projection)(d);
74176 function accuracy(accuracy, loc) { // converts accuracy to pixels...
74177 var degreesRadius = geoMetersToLat(accuracy),
74178 tangentLoc = [loc[0], loc[1] + degreesRadius],
74179 projectedTangent = projection(tangentLoc),
74180 projectedLoc = projection([loc[0], loc[1]]);
74182 // southern most point will have higher pixel value...
74183 return Math.round(projectedLoc[1] - projectedTangent[1]).toString();
74186 function update() {
74187 var geolocation = { loc: [_position.coords.longitude, _position.coords.latitude] };
74189 var groups = layer.selectAll('.geolocations').selectAll('.geolocation')
74190 .data([geolocation]);
74195 var pointsEnter = groups.enter()
74197 .attr('class', 'geolocation');
74201 .attr('id', 'geolocate-radius')
74204 .attr('fill', 'rgb(15,128,225)')
74205 .attr('fill-opacity', '0.3')
74212 .attr('fill', 'rgb(15,128,225)')
74213 .attr('stroke', 'white')
74214 .attr('stroke-width', '1.5')
74217 groups.merge(pointsEnter)
74218 .attr('transform', transform);
74220 d3_select('#geolocate-radius').attr('r', accuracy(_position.coords.accuracy, geolocation.loc));
74223 function drawLocation(selection) {
74224 var enabled = svgGeolocate.enabled;
74226 layer = selection.selectAll('.layer-geolocate')
74232 var layerEnter = layer.enter()
74234 .attr('class', 'layer-geolocate')
74235 .style('display', enabled ? 'block' : 'none');
74239 .attr('class', 'geolocations');
74251 drawLocation.enabled = function (position, enabled) {
74252 if (!arguments.length) return svgGeolocate.enabled;
74253 _position = position;
74254 svgGeolocate.enabled = enabled;
74255 if (svgGeolocate.enabled) {
74265 return drawLocation;
74268 function svgLabels(projection, context) {
74269 var path = d3_geoPath(projection);
74270 var detected = utilDetect();
74271 var baselineHack = (detected.ie || detected.browser.toLowerCase() === 'edge');
74272 var _rdrawn = rbush_1();
74273 var _rskipped = rbush_1();
74274 var _textWidthCache = {};
74275 var _entitybboxes = {};
74277 // Listed from highest to lowest priority
74279 ['line', 'aeroway', '*', 12],
74280 ['line', 'highway', 'motorway', 12],
74281 ['line', 'highway', 'trunk', 12],
74282 ['line', 'highway', 'primary', 12],
74283 ['line', 'highway', 'secondary', 12],
74284 ['line', 'highway', 'tertiary', 12],
74285 ['line', 'highway', '*', 12],
74286 ['line', 'railway', '*', 12],
74287 ['line', 'waterway', '*', 12],
74288 ['area', 'aeroway', '*', 12],
74289 ['area', 'amenity', '*', 12],
74290 ['area', 'building', '*', 12],
74291 ['area', 'historic', '*', 12],
74292 ['area', 'leisure', '*', 12],
74293 ['area', 'man_made', '*', 12],
74294 ['area', 'natural', '*', 12],
74295 ['area', 'shop', '*', 12],
74296 ['area', 'tourism', '*', 12],
74297 ['area', 'camp_site', '*', 12],
74298 ['point', 'aeroway', '*', 10],
74299 ['point', 'amenity', '*', 10],
74300 ['point', 'building', '*', 10],
74301 ['point', 'historic', '*', 10],
74302 ['point', 'leisure', '*', 10],
74303 ['point', 'man_made', '*', 10],
74304 ['point', 'natural', '*', 10],
74305 ['point', 'shop', '*', 10],
74306 ['point', 'tourism', '*', 10],
74307 ['point', 'camp_site', '*', 10],
74308 ['line', 'name', '*', 12],
74309 ['area', 'name', '*', 12],
74310 ['point', 'name', '*', 10]
74314 function blacklisted(preset) {
74315 var noIcons = ['building', 'landuse', 'natural'];
74316 return noIcons.some(function(s) {
74317 return preset.id.indexOf(s) >= 0;
74322 function get(array, prop) {
74323 return function(d, i) { return array[i][prop]; };
74327 function textWidth(text, size, elem) {
74328 var c = _textWidthCache[size];
74329 if (!c) c = _textWidthCache[size] = {};
74335 c[text] = elem.getComputedTextLength();
74339 var str = encodeURIComponent(text).match(/%[CDEFcdef]/g);
74340 if (str === null) {
74341 return size / 3 * 2 * text.length;
74343 return size / 3 * (2 * text.length + str.length);
74349 function drawLinePaths(selection, entities, filter, classes, labels) {
74350 var paths = selection.selectAll('path')
74352 .data(entities, osmEntity.key);
74361 .style('stroke-width', get(labels, 'font-size'))
74362 .attr('id', function(d) { return 'labelpath-' + d.id; })
74363 .attr('class', classes)
74365 .attr('d', get(labels, 'lineString'));
74369 function drawLineLabels(selection, entities, filter, classes, labels) {
74370 var texts = selection.selectAll('text.' + classes)
74372 .data(entities, osmEntity.key);
74381 .attr('class', function(d, i) { return classes + ' ' + labels[i].classes + ' ' + d.id; })
74382 .attr('dy', baselineHack ? '0.35em' : null)
74383 .append('textPath')
74384 .attr('class', 'textpath');
74387 selection.selectAll('text.' + classes).selectAll('.textpath')
74389 .data(entities, osmEntity.key)
74390 .attr('startOffset', '50%')
74391 .attr('xlink:href', function(d) { return '#labelpath-' + d.id; })
74392 .text(utilDisplayNameForPath);
74396 function drawPointLabels(selection, entities, filter, classes, labels) {
74397 var texts = selection.selectAll('text.' + classes)
74399 .data(entities, osmEntity.key);
74408 .attr('class', function(d, i) {
74409 return classes + ' ' + labels[i].classes + ' ' + d.id;
74412 .attr('x', get(labels, 'x'))
74413 .attr('y', get(labels, 'y'))
74414 .style('text-anchor', get(labels, 'textAnchor'))
74415 .text(utilDisplayName)
74416 .each(function(d, i) {
74417 textWidth(utilDisplayName(d), labels[i].height, this);
74422 function drawAreaLabels(selection, entities, filter, classes, labels) {
74423 entities = entities.filter(hasText);
74424 labels = labels.filter(hasText);
74425 drawPointLabels(selection, entities, filter, classes, labels);
74427 function hasText(d, i) {
74428 return labels[i].hasOwnProperty('x') && labels[i].hasOwnProperty('y');
74433 function drawAreaIcons(selection, entities, filter, classes, labels) {
74434 var icons = selection.selectAll('use.' + classes)
74436 .data(entities, osmEntity.key);
74445 .attr('class', 'icon ' + classes)
74446 .attr('width', '17px')
74447 .attr('height', '17px')
74449 .attr('transform', get(labels, 'transform'))
74450 .attr('xlink:href', function(d) {
74451 var preset = context.presets().match(d, context.graph());
74452 var picon = preset && preset.icon;
74457 var isMaki = /^maki-/.test(picon);
74458 return '#' + picon + (isMaki ? '-15' : '');
74464 function drawCollisionBoxes(selection, rtree, which) {
74465 var classes = 'debug ' + which + ' ' + (which === 'debug-skipped' ? 'orange' : 'yellow');
74468 if (context.getDebug('collision')) {
74469 gj = rtree.all().map(function(d) {
74470 return { type: 'Polygon', coordinates: [[
74480 var boxes = selection.selectAll('.' + which)
74490 .attr('class', classes)
74492 .attr('d', d3_geoPath());
74496 function drawLabels(selection, graph, entities, filter, dimensions, fullRedraw) {
74497 var wireframe = context.surface().classed('fill-wireframe');
74498 var zoom = geoScaleToZoom(projection.scale());
74500 var labelable = [];
74501 var renderNodeAs = {};
74502 var i, j, k, entity, geometry;
74504 for (i = 0; i < labelStack.length; i++) {
74505 labelable.push([]);
74511 _entitybboxes = {};
74514 for (i = 0; i < entities.length; i++) {
74515 entity = entities[i];
74517 .concat(_entitybboxes[entity.id] || [])
74518 .concat(_entitybboxes[entity.id + 'I'] || []);
74520 for (j = 0; j < toRemove.length; j++) {
74521 _rdrawn.remove(toRemove[j]);
74522 _rskipped.remove(toRemove[j]);
74527 // Loop through all the entities to do some preprocessing
74528 for (i = 0; i < entities.length; i++) {
74529 entity = entities[i];
74530 geometry = entity.geometry(graph);
74532 // Insert collision boxes around interesting points/vertices
74533 if (geometry === 'point' || (geometry === 'vertex' && isInterestingVertex(entity))) {
74534 var hasDirections = entity.directions(graph, projection).length;
74537 if (!wireframe && geometry === 'point' && !(zoom >= 18 && hasDirections)) {
74538 renderNodeAs[entity.id] = 'point';
74539 markerPadding = 20; // extra y for marker height
74541 renderNodeAs[entity.id] = 'vertex';
74545 var coord = projection(entity.loc);
74546 var nodePadding = 10;
74548 minX: coord[0] - nodePadding,
74549 minY: coord[1] - nodePadding - markerPadding,
74550 maxX: coord[0] + nodePadding,
74551 maxY: coord[1] + nodePadding
74554 doInsert(bbox, entity.id + 'P');
74557 // From here on, treat vertices like points
74558 if (geometry === 'vertex') {
74559 geometry = 'point';
74562 // Determine which entities are label-able
74563 var preset = geometry === 'area' && context.presets().match(entity, graph);
74564 var icon = preset && !blacklisted(preset) && preset.icon;
74566 if (!icon && !utilDisplayName(entity))
74569 for (k = 0; k < labelStack.length; k++) {
74570 var matchGeom = labelStack[k][0];
74571 var matchKey = labelStack[k][1];
74572 var matchVal = labelStack[k][2];
74573 var hasVal = entity.tags[matchKey];
74575 if (geometry === matchGeom && hasVal && (matchVal === '*' || matchVal === hasVal)) {
74576 labelable[k].push(entity);
74594 // Try and find a valid label for labellable entities
74595 for (k = 0; k < labelable.length; k++) {
74596 var fontSize = labelStack[k][3];
74598 for (i = 0; i < labelable[k].length; i++) {
74599 entity = labelable[k][i];
74600 geometry = entity.geometry(graph);
74602 var getName = (geometry === 'line') ? utilDisplayNameForPath : utilDisplayName;
74603 var name = getName(entity);
74604 var width = name && textWidth(name, fontSize);
74607 if (geometry === 'point' || geometry === 'vertex') {
74608 // no point or vertex labels in wireframe mode
74609 // no vertex labels at low zooms (vertices have no icons)
74610 if (wireframe) continue;
74611 var renderAs = renderNodeAs[entity.id];
74612 if (renderAs === 'vertex' && zoom < 17) continue;
74614 p = getPointLabel(entity, width, fontSize, renderAs);
74616 } else if (geometry === 'line') {
74617 p = getLineLabel(entity, width, fontSize);
74619 } else if (geometry === 'area') {
74620 p = getAreaLabel(entity, width, fontSize);
74624 if (geometry === 'vertex') { geometry = 'point'; } // treat vertex like point
74625 p.classes = geometry + ' tag-' + labelStack[k][1];
74626 positions[geometry].push(p);
74627 labelled[geometry].push(entity);
74633 function isInterestingVertex(entity) {
74634 var selectedIDs = context.selectedIDs();
74636 return entity.hasInterestingTags() ||
74637 entity.isEndpoint(graph) ||
74638 entity.isConnected(graph) ||
74639 selectedIDs.indexOf(entity.id) !== -1 ||
74640 graph.parentWays(entity).some(function(parent) {
74641 return selectedIDs.indexOf(parent.id) !== -1;
74646 function getPointLabel(entity, width, height, geometry) {
74647 var y = (geometry === 'point' ? -12 : 0);
74648 var pointOffsets = {
74649 ltr: [15, y, 'start'],
74650 rtl: [-15, y, 'end']
74653 var coord = projection(entity.loc);
74654 var textPadding = 2;
74655 var offset = pointOffsets[textDirection];
74659 x: coord[0] + offset[0],
74660 y: coord[1] + offset[1],
74661 textAnchor: offset[2]
74664 // insert a collision box for the text label..
74666 if (textDirection === 'rtl') {
74668 minX: p.x - width - textPadding,
74669 minY: p.y - (height / 2) - textPadding,
74670 maxX: p.x + textPadding,
74671 maxY: p.y + (height / 2) + textPadding
74675 minX: p.x - textPadding,
74676 minY: p.y - (height / 2) - textPadding,
74677 maxX: p.x + width + textPadding,
74678 maxY: p.y + (height / 2) + textPadding
74682 if (tryInsert([bbox], entity.id, true)) {
74688 function getLineLabel(entity, width, height) {
74689 var viewport = geoExtent(context.projection.clipExtent()).polygon();
74690 var points = graph.childNodes(entity)
74691 .map(function(node) { return projection(node.loc); });
74692 var length = geoPathLength(points);
74694 if (length < width + 20) return;
74696 // todo: properly clip points to viewport
74698 // % along the line to attempt to place the label
74699 var lineOffsets = [50, 45, 55, 40, 60, 35, 65, 30, 70,
74700 25, 75, 20, 80, 15, 95, 10, 90, 5, 95];
74703 for (var i = 0; i < lineOffsets.length; i++) {
74704 var offset = lineOffsets[i];
74705 var middle = offset / 100 * length;
74706 var start = middle - width / 2;
74708 if (start < 0 || start + width > length) continue;
74710 // generate subpath and ignore paths that are invalid or don't cross viewport.
74711 var sub = subpath(points, start, start + width);
74712 if (!sub || !geoPolygonIntersectsPolygon(viewport, sub, true)) {
74716 var isReverse = reverse(sub);
74718 sub = sub.reverse();
74722 var boxsize = (height + 2) / 2;
74724 for (var j = 0; j < sub.length - 1; j++) {
74726 var b = sub[j + 1];
74728 // split up the text into small collision boxes
74729 var num = Math.max(1, Math.floor(geoVecLength(a, b) / boxsize / 2));
74731 for (var box = 0; box < num; box++) {
74732 var p = geoVecInterp(a, b, box / num);
74733 var x0 = p[0] - boxsize - padding;
74734 var y0 = p[1] - boxsize - padding;
74735 var x1 = p[0] + boxsize + padding;
74736 var y1 = p[1] + boxsize + padding;
74739 minX: Math.min(x0, x1),
74740 minY: Math.min(y0, y1),
74741 maxX: Math.max(x0, x1),
74742 maxY: Math.max(y0, y1)
74747 if (tryInsert(bboxes, entity.id, false)) { // accept this one
74749 'font-size': height + 2,
74750 lineString: lineString(sub),
74751 startOffset: offset + '%'
74756 function reverse(p) {
74757 var angle = Math.atan2(p[1][1] - p[0][1], p[1][0] - p[0][0]);
74758 return !(p[0][0] < p[p.length - 1][0] && angle < Math.PI/2 && angle > -Math.PI/2);
74761 function lineString(points) {
74762 return 'M' + points.join('L');
74765 function subpath(points, from, to) {
74767 var start, end, i0, i1;
74769 for (var i = 0; i < points.length - 1; i++) {
74771 var b = points[i + 1];
74772 var current = geoVecLength(a, b);
74774 if (!start && sofar + current >= from) {
74775 portion = (from - sofar) / current;
74777 a[0] + portion * (b[0] - a[0]),
74778 a[1] + portion * (b[1] - a[1])
74782 if (!end && sofar + current >= to) {
74783 portion = (to - sofar) / current;
74785 a[0] + portion * (b[0] - a[0]),
74786 a[1] + portion * (b[1] - a[1])
74793 var result = points.slice(i0, i1);
74794 result.unshift(start);
74801 function getAreaLabel(entity, width, height) {
74802 var centroid = path.centroid(entity.asGeoJSON(graph, true));
74803 var extent = entity.extent(graph);
74804 var areaWidth = projection(extent[1])[0] - projection(extent[0])[0];
74806 if (isNaN(centroid[0]) || areaWidth < 20) return;
74808 var preset = context.presets().match(entity, context.graph());
74809 var picon = preset && preset.icon;
74814 if (picon) { // icon and label..
74816 addLabel(iconSize + padding);
74819 } else { // label only..
74826 function addIcon() {
74827 var iconX = centroid[0] - (iconSize / 2);
74828 var iconY = centroid[1] - (iconSize / 2);
74832 maxX: iconX + iconSize,
74833 maxY: iconY + iconSize
74836 if (tryInsert([bbox], entity.id + 'I', true)) {
74837 p.transform = 'translate(' + iconX + ',' + iconY + ')';
74843 function addLabel(yOffset) {
74844 if (width && areaWidth >= width + 20) {
74845 var labelX = centroid[0];
74846 var labelY = centroid[1] + yOffset;
74848 minX: labelX - (width / 2) - padding,
74849 minY: labelY - (height / 2) - padding,
74850 maxX: labelX + (width / 2) + padding,
74851 maxY: labelY + (height / 2) + padding
74854 if (tryInsert([bbox], entity.id, true)) {
74857 p.textAnchor = 'middle';
74867 // force insert a singular bounding box
74868 // singular box only, no array, id better be unique
74869 function doInsert(bbox, id) {
74872 var oldbox = _entitybboxes[id];
74874 _rdrawn.remove(oldbox);
74876 _entitybboxes[id] = bbox;
74877 _rdrawn.insert(bbox);
74881 function tryInsert(bboxes, id, saveSkipped) {
74882 var skipped = false;
74884 for (var i = 0; i < bboxes.length; i++) {
74885 var bbox = bboxes[i];
74888 // Check that label is visible
74889 if (bbox.minX < 0 || bbox.minY < 0 || bbox.maxX > dimensions[0] || bbox.maxY > dimensions[1]) {
74893 if (_rdrawn.collides(bbox)) {
74899 _entitybboxes[id] = bboxes;
74903 _rskipped.load(bboxes);
74906 _rdrawn.load(bboxes);
74913 var layer = selection.selectAll('.layer-osm.labels');
74914 layer.selectAll('.labels-group')
74915 .data(['halo', 'label', 'debug'])
74918 .attr('class', function(d) { return 'labels-group ' + d; });
74920 var halo = layer.selectAll('.labels-group.halo');
74921 var label = layer.selectAll('.labels-group.label');
74922 var debug = layer.selectAll('.labels-group.debug');
74925 drawPointLabels(label, labelled.point, filter, 'pointlabel', positions.point);
74926 drawPointLabels(halo, labelled.point, filter, 'pointlabel-halo', positions.point);
74929 drawLinePaths(layer, labelled.line, filter, '', positions.line);
74930 drawLineLabels(label, labelled.line, filter, 'linelabel', positions.line);
74931 drawLineLabels(halo, labelled.line, filter, 'linelabel-halo', positions.line);
74934 drawAreaLabels(label, labelled.area, filter, 'arealabel', positions.area);
74935 drawAreaLabels(halo, labelled.area, filter, 'arealabel-halo', positions.area);
74936 drawAreaIcons(label, labelled.area, filter, 'areaicon', positions.area);
74937 drawAreaIcons(halo, labelled.area, filter, 'areaicon-halo', positions.area);
74940 drawCollisionBoxes(debug, _rskipped, 'debug-skipped');
74941 drawCollisionBoxes(debug, _rdrawn, 'debug-drawn');
74943 layer.call(filterLabels);
74947 function filterLabels(selection) {
74948 var drawLayer = selection.selectAll('.layer-osm.labels');
74949 var layers = drawLayer.selectAll('.labels-group.halo, .labels-group.label');
74951 layers.selectAll('.nolabel')
74952 .classed('nolabel', false);
74954 var mouse = context.mouse();
74955 var graph = context.graph();
74956 var selectedIDs = context.selectedIDs();
74960 // hide labels near the mouse
74963 bbox = { minX: mouse[0] - pad, minY: mouse[1] - pad, maxX: mouse[0] + pad, maxY: mouse[1] + pad };
74964 var nearMouse = _rdrawn.search(bbox).map(function(entity) { return entity.id; });
74965 ids.push.apply(ids, nearMouse);
74968 // hide labels on selected nodes (they look weird when dragging / haloed)
74969 for (var i = 0; i < selectedIDs.length; i++) {
74970 var entity = graph.hasEntity(selectedIDs[i]);
74971 if (entity && entity.type === 'node') {
74972 ids.push(selectedIDs[i]);
74976 layers.selectAll(utilEntitySelector(ids))
74977 .classed('nolabel', true);
74980 // draw the mouse bbox if debugging is on..
74981 var debug = selection.selectAll('.labels-group.debug');
74983 if (context.getDebug('collision')) {
74987 [bbox.minX, bbox.minY],
74988 [bbox.maxX, bbox.minY],
74989 [bbox.maxX, bbox.maxY],
74990 [bbox.minX, bbox.maxY],
74991 [bbox.minX, bbox.minY]
74996 var box = debug.selectAll('.debug-mouse')
75006 .attr('class', 'debug debug-mouse yellow')
75008 .attr('d', d3_geoPath());
75012 var throttleFilterLabels = throttle(filterLabels, 100);
75015 drawLabels.observe = function(selection) {
75016 var listener = function() { throttleFilterLabels(selection); };
75017 selection.on('mousemove.hidelabels', listener);
75018 context.on('enter.hidelabels', listener);
75022 drawLabels.off = function(selection) {
75023 throttleFilterLabels.cancel();
75024 selection.on('mousemove.hidelabels', null);
75025 context.on('enter.hidelabels', null);
75032 var _improveOsmEnabled = false;
75036 function svgImproveOSM(projection, context, dispatch) {
75037 var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
75039 var touchLayer = d3_select(null);
75040 var drawLayer = d3_select(null);
75041 var _improveOsmVisible = false;
75043 function markerPath(selection, klass) {
75045 .attr('class', klass)
75046 .attr('transform', 'translate(-10, -28)')
75047 .attr('points', '16,3 4,3 1,6 1,17 4,20 7,20 10,27 13,20 16,20 19,17.033 19,6');
75051 // Loosely-coupled improveOSM service for fetching errors.
75052 function getService() {
75053 if (services$1.improveOSM && !_errorService) {
75054 _errorService = services$1.improveOSM;
75055 _errorService.on('loaded', throttledRedraw);
75056 } else if (!services$1.improveOSM && _errorService) {
75057 _errorService = null;
75060 return _errorService;
75065 function editOn() {
75066 if (!_improveOsmVisible) {
75067 _improveOsmVisible = true;
75069 .style('display', 'block');
75074 // Immediately remove the errors and their touch targets
75075 function editOff() {
75076 if (_improveOsmVisible) {
75077 _improveOsmVisible = false;
75079 .style('display', 'none');
75080 drawLayer.selectAll('.qa_error.improveOSM')
75082 touchLayer.selectAll('.qa_error.improveOSM')
75088 // Enable the layer. This shows the errors and transitions them to visible.
75089 function layerOn() {
75093 .style('opacity', 0)
75096 .style('opacity', 1)
75097 .on('end interrupt', function () {
75098 dispatch.call('change');
75103 // Disable the layer. This transitions the layer invisible and then hides the errors.
75104 function layerOff() {
75105 throttledRedraw.cancel();
75106 drawLayer.interrupt();
75107 touchLayer.selectAll('.qa_error.improveOSM')
75113 .style('opacity', 0)
75114 .on('end interrupt', function () {
75116 dispatch.call('change');
75121 // Update the error markers
75122 function updateMarkers() {
75123 if (!_improveOsmVisible || !_improveOsmEnabled) return;
75125 var service = getService();
75126 var selectedID = context.selectedErrorID();
75127 var data = (service ? service.getErrors(projection) : []);
75128 var getTransform = svgPointTransform(projection);
75131 var markers = drawLayer.selectAll('.qa_error.improveOSM')
75132 .data(data, function(d) { return d.id; });
75139 var markersEnter = markers.enter()
75141 .attr('class', function(d) {
75145 'error_id-' + d.id,
75146 'error_type-' + d.error_type,
75147 'category-' + d.category
75153 .call(markerPath, 'shadow');
75161 .attr('class', 'stroke');
75165 .attr('fill', 'currentColor')
75166 .call(markerPath, 'qa_error-fill');
75170 .attr('transform', 'translate(-5.5, -21)')
75171 .attr('class', 'icon-annotation')
75172 .attr('width', '11px')
75173 .attr('height', '11px')
75174 .attr('xlink:href', function(d) {
75175 var picon = d.icon;
75180 var isMaki = /^maki-/.test(picon);
75181 return '#' + picon + (isMaki ? '-11' : '');
75187 .merge(markersEnter)
75189 .classed('selected', function(d) { return d.id === selectedID; })
75190 .attr('transform', getTransform);
75194 if (touchLayer.empty()) return;
75195 var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
75197 var targets = touchLayer.selectAll('.qa_error.improveOSM')
75198 .data(data, function(d) { return d.id; });
75207 .attr('width', '20px')
75208 .attr('height', '30px')
75209 .attr('x', '-10px')
75210 .attr('y', '-28px')
75213 .attr('class', function(d) {
75214 return 'qa_error ' + d.service + ' target error_id-' + d.id + ' ' + fillClass;
75216 .attr('transform', getTransform);
75219 function sortY(a, b) {
75220 return (a.id === selectedID) ? 1
75221 : (b.id === selectedID) ? -1
75222 : b.loc[1] - a.loc[1];
75227 // Draw the ImproveOSM layer and schedule loading errors and updating markers.
75228 function drawImproveOSM(selection) {
75229 var service = getService();
75231 var surface = context.surface();
75232 if (surface && !surface.empty()) {
75233 touchLayer = surface.selectAll('.data-layer.touch .layer-touch.markers');
75236 drawLayer = selection.selectAll('.layer-improveOSM')
75237 .data(service ? [0] : []);
75242 drawLayer = drawLayer.enter()
75244 .attr('class', 'layer-improveOSM')
75245 .style('display', _improveOsmEnabled ? 'block' : 'none')
75248 if (_improveOsmEnabled) {
75249 if (service && ~~context.map().zoom() >= minZoom) {
75251 service.loadErrors(projection);
75260 // Toggles the layer on and off
75261 drawImproveOSM.enabled = function(val) {
75262 if (!arguments.length) return _improveOsmEnabled;
75264 _improveOsmEnabled = val;
75265 if (_improveOsmEnabled) {
75269 if (context.selectedErrorID()) {
75270 context.enter(modeBrowse(context));
75274 dispatch.call('change');
75279 drawImproveOSM.supported = function() {
75280 return !!getService();
75284 return drawImproveOSM;
75287 function svgStreetside(projection, context, dispatch) {
75288 var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
75290 var minMarkerZoom = 16;
75291 var minViewfieldZoom = 18;
75292 var layer = d3_select(null);
75293 var _viewerYaw = 0;
75294 var _selectedSequence = null;
75301 if (svgStreetside.initialized) return; // run once
75302 svgStreetside.enabled = false;
75303 svgStreetside.initialized = true;
75309 function getService() {
75310 if (services$1.streetside && !_streetside) {
75311 _streetside = services$1.streetside;
75313 .on('viewerChanged', viewerChanged)
75314 .on('loadedBubbles', throttledRedraw);
75315 } else if (!services$1.streetside && _streetside) {
75316 _streetside = null;
75319 return _streetside;
75325 function showLayer() {
75326 var service = getService();
75327 if (!service) return;
75332 .style('opacity', 0)
75335 .style('opacity', 1)
75336 .on('end', function () { dispatch.call('change'); });
75342 function hideLayer() {
75343 throttledRedraw.cancel();
75348 .style('opacity', 0)
75349 .on('end', editOff);
75355 function editOn() {
75356 layer.style('display', 'block');
75362 function editOff() {
75363 layer.selectAll('.viewfield-group').remove();
75364 layer.style('display', 'none');
75368 * click() Handles 'bubble' point click event.
75370 function click(d) {
75371 var service = getService();
75372 if (!service) return;
75374 // try to preserve the viewer rotation when staying on the same sequence
75375 if (d.sequenceKey !== _selectedSequence) {
75376 _viewerYaw = 0; // reset
75378 _selectedSequence = d.sequenceKey;
75382 .then(function(r) {
75383 if (r.status === 'ok'){
75384 service.showViewer(_viewerYaw);
75389 context.map().centerEase(d.loc);
75395 function mouseover(d) {
75396 var service = getService();
75397 if (service) service.setStyles(d);
75403 function mouseout() {
75404 var service = getService();
75405 if (service) service.setStyles(null);
75411 function transform(d) {
75412 var t = svgPointTransform(projection)(d);
75413 var rot = d.ca + _viewerYaw;
75415 t += ' rotate(' + Math.floor(rot) + ',0,0)';
75421 function viewerChanged() {
75422 var service = getService();
75423 if (!service) return;
75425 var viewer = service.viewer();
75426 if (!viewer) return;
75428 // update viewfield rotation
75429 _viewerYaw = viewer.getYaw();
75431 // avoid updating if the map is currently transformed
75432 // e.g. during drags or easing.
75433 if (context.map().isTransformed()) return;
75435 layer.selectAll('.viewfield-group.currentView')
75436 .attr('transform', transform);
75440 context.photos().on('change.streetside', update);
75445 function update() {
75446 var viewer = d3_select('#photoviewer');
75447 var selected = viewer.empty() ? undefined : viewer.datum();
75448 var z = ~~context.map().zoom();
75449 var showMarkers = (z >= minMarkerZoom);
75450 var showViewfields = (z >= minViewfieldZoom);
75451 var service = getService();
75453 var sequences = [];
75456 if (context.photos().showsPanoramic()) {
75457 sequences = (service ? service.sequences(projection) : []);
75458 bubbles = (service && showMarkers ? service.bubbles(projection) : []);
75461 var traces = layer.selectAll('.sequences').selectAll('.sequence')
75462 .data(sequences, function(d) { return d.properties.key; });
75469 traces = traces.enter()
75471 .attr('class', 'sequence')
75473 .attr('d', svgPath(projection).geojson);
75476 var groups = layer.selectAll('.markers').selectAll('.viewfield-group')
75477 .data(bubbles, function(d) {
75478 // force reenter once bubbles are attached to a sequence
75479 return d.key + (d.sequenceKey ? 'v1' : 'v0');
75487 var groupsEnter = groups.enter()
75489 .attr('class', 'viewfield-group')
75490 .on('mouseenter', mouseover)
75491 .on('mouseleave', mouseout)
75492 .on('click', click);
75496 .attr('class', 'viewfield-scale');
75499 var markers = groups
75500 .merge(groupsEnter)
75501 .sort(function(a, b) {
75502 return (a === selected) ? 1
75503 : (b === selected) ? -1
75504 : b.loc[1] - a.loc[1];
75506 .attr('transform', transform)
75507 .select('.viewfield-scale');
75510 markers.selectAll('circle')
75518 var viewfields = markers.selectAll('.viewfield')
75519 .data(showViewfields ? [0] : []);
75524 // viewfields may or may not be drawn...
75525 // but if they are, draw below the circles
75527 .insert('path', 'circle')
75528 .attr('class', 'viewfield')
75529 .attr('transform', 'scale(1.5,1.5),translate(-8, -13)')
75530 .attr('d', viewfieldPath);
75532 function viewfieldPath() {
75533 var d = this.parentNode.__data__;
75535 return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
75537 return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
75545 * drawImages is the method that is returned (and that runs) everytime 'svgStreetside()' is called.
75546 * 'svgStreetside()' is called from index.js
75548 function drawImages(selection) {
75549 var enabled = svgStreetside.enabled;
75550 var service = getService();
75552 layer = selection.selectAll('.layer-streetside-images')
75553 .data(service ? [0] : []);
75558 var layerEnter = layer.enter()
75560 .attr('class', 'layer-streetside-images')
75561 .style('display', enabled ? 'block' : 'none');
75565 .attr('class', 'sequences');
75569 .attr('class', 'markers');
75575 if (service && ~~context.map().zoom() >= minZoom) {
75578 service.loadBubbles(projection);
75587 * drawImages.enabled().
75589 drawImages.enabled = function(_) {
75590 if (!arguments.length) return svgStreetside.enabled;
75591 svgStreetside.enabled = _;
75592 if (svgStreetside.enabled) {
75597 dispatch.call('change');
75602 * drawImages.supported().
75604 drawImages.supported = function() {
75605 return !!getService();
75613 function svgMapillaryImages(projection, context, dispatch) {
75614 var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
75616 var minMarkerZoom = 16;
75617 var minViewfieldZoom = 18;
75618 var layer = d3_select(null);
75620 var viewerCompassAngle;
75624 if (svgMapillaryImages.initialized) return; // run once
75625 svgMapillaryImages.enabled = false;
75626 svgMapillaryImages.initialized = true;
75630 function getService() {
75631 if (services$1.mapillary && !_mapillary) {
75632 _mapillary = services$1.mapillary;
75633 _mapillary.event.on('loadedImages', throttledRedraw);
75634 _mapillary.event.on('bearingChanged', function(e) {
75635 viewerCompassAngle = e;
75637 // avoid updating if the map is currently transformed
75638 // e.g. during drags or easing.
75639 if (context.map().isTransformed()) return;
75641 layer.selectAll('.viewfield-group.currentView')
75642 .filter(function(d) {
75645 .attr('transform', transform);
75647 } else if (!services$1.mapillary && _mapillary) {
75655 function showLayer() {
75656 var service = getService();
75657 if (!service) return;
75662 .style('opacity', 0)
75665 .style('opacity', 1)
75666 .on('end', function () { dispatch.call('change'); });
75670 function hideLayer() {
75671 throttledRedraw.cancel();
75676 .style('opacity', 0)
75677 .on('end', editOff);
75681 function editOn() {
75682 layer.style('display', 'block');
75686 function editOff() {
75687 layer.selectAll('.viewfield-group').remove();
75688 layer.style('display', 'none');
75692 function click(d) {
75693 var service = getService();
75694 if (!service) return;
75698 .updateViewer(d.key, context)
75701 context.map().centerEase(d.loc);
75705 function mouseover(d) {
75706 var service = getService();
75707 if (service) service.setStyles(d);
75711 function mouseout() {
75712 var service = getService();
75713 if (service) service.setStyles(null);
75717 function transform(d) {
75718 var t = svgPointTransform(projection)(d);
75719 if (d.pano && viewerCompassAngle !== null && isFinite(viewerCompassAngle)) {
75720 t += ' rotate(' + Math.floor(viewerCompassAngle) + ',0,0)';
75722 t += ' rotate(' + Math.floor(d.ca) + ',0,0)';
75727 context.photos().on('change.mapillary_images', update);
75729 function filterImages(images) {
75730 var showsPano = context.photos().showsPanoramic();
75731 var showsFlat = context.photos().showsFlat();
75732 if (!showsPano || !showsFlat) {
75733 images = images.filter(function(image) {
75734 if (image.pano) return showsPano;
75741 function filterSequences(sequences, service) {
75742 var showsPano = context.photos().showsPanoramic();
75743 var showsFlat = context.photos().showsFlat();
75744 if (!showsPano || !showsFlat) {
75745 sequences = sequences.filter(function(sequence) {
75746 if (sequence.properties.hasOwnProperty('pano')) {
75747 if (sequence.properties.pano) return showsPano;
75750 // if the sequence doesn't specify pano or not, search its images
75751 var cProps = sequence.properties.coordinateProperties;
75752 if (cProps && cProps.image_keys && cProps.image_keys.length > 0) {
75753 for (var index in cProps.image_keys) {
75754 var imageKey = cProps.image_keys[index];
75755 var image = service.cachedImage(imageKey);
75756 if (image && image.hasOwnProperty('pano')) {
75757 if (image.pano) return showsPano;
75768 function update() {
75769 var viewer = d3_select('#photoviewer');
75770 var selected = viewer.empty() ? undefined : viewer.datum();
75772 var z = ~~context.map().zoom();
75773 var showMarkers = (z >= minMarkerZoom);
75774 var showViewfields = (z >= minViewfieldZoom);
75776 var service = getService();
75777 var sequences = (service ? service.sequences(projection) : []);
75778 var images = (service && showMarkers ? service.images(projection) : []);
75780 images = filterImages(images);
75781 sequences = filterSequences(sequences, service);
75783 var traces = layer.selectAll('.sequences').selectAll('.sequence')
75784 .data(sequences, function(d) { return d.properties.key; });
75791 traces = traces.enter()
75793 .attr('class', 'sequence')
75795 .attr('d', svgPath(projection).geojson);
75798 var groups = layer.selectAll('.markers').selectAll('.viewfield-group')
75799 .data(images, function(d) { return d.key; });
75806 var groupsEnter = groups.enter()
75808 .attr('class', 'viewfield-group')
75809 .on('mouseenter', mouseover)
75810 .on('mouseleave', mouseout)
75811 .on('click', click);
75815 .attr('class', 'viewfield-scale');
75818 var markers = groups
75819 .merge(groupsEnter)
75820 .sort(function(a, b) {
75821 return (a === selected) ? 1
75822 : (b === selected) ? -1
75823 : b.loc[1] - a.loc[1]; // sort Y
75825 .attr('transform', transform)
75826 .select('.viewfield-scale');
75829 markers.selectAll('circle')
75837 var viewfields = markers.selectAll('.viewfield')
75838 .data(showViewfields ? [0] : []);
75843 viewfields.enter() // viewfields may or may not be drawn...
75844 .insert('path', 'circle') // but if they are, draw below the circles
75845 .attr('class', 'viewfield')
75846 .classed('pano', function() { return this.parentNode.__data__.pano; })
75847 .attr('transform', 'scale(1.5,1.5),translate(-8, -13)')
75848 .attr('d', viewfieldPath);
75850 function viewfieldPath() {
75851 var d = this.parentNode.__data__;
75853 return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
75855 return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
75861 function drawImages(selection) {
75862 var enabled = svgMapillaryImages.enabled;
75863 var service = getService();
75865 layer = selection.selectAll('.layer-mapillary')
75866 .data(service ? [0] : []);
75871 var layerEnter = layer.enter()
75873 .attr('class', 'layer-mapillary')
75874 .style('display', enabled ? 'block' : 'none');
75878 .attr('class', 'sequences');
75882 .attr('class', 'markers');
75888 if (service && ~~context.map().zoom() >= minZoom) {
75891 service.loadImages(projection);
75899 drawImages.enabled = function(_) {
75900 if (!arguments.length) return svgMapillaryImages.enabled;
75901 svgMapillaryImages.enabled = _;
75902 if (svgMapillaryImages.enabled) {
75907 dispatch.call('change');
75912 drawImages.supported = function() {
75913 return !!getService();
75921 function svgMapillarySigns(projection, context, dispatch) {
75922 var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
75924 var layer = d3_select(null);
75929 if (svgMapillarySigns.initialized) return; // run once
75930 svgMapillarySigns.enabled = false;
75931 svgMapillarySigns.initialized = true;
75935 function getService() {
75936 if (services$1.mapillary && !_mapillary) {
75937 _mapillary = services$1.mapillary;
75938 _mapillary.event.on('loadedSigns', throttledRedraw);
75939 } else if (!services$1.mapillary && _mapillary) {
75946 function showLayer() {
75947 var service = getService();
75948 if (!service) return;
75954 function hideLayer() {
75955 throttledRedraw.cancel();
75960 function editOn() {
75961 layer.style('display', 'block');
75965 function editOff() {
75966 layer.selectAll('.icon-sign').remove();
75967 layer.style('display', 'none');
75971 function click(d) {
75972 var service = getService();
75973 if (!service) return;
75975 context.map().centerEase(d.loc);
75977 var selected = service.getSelectedImage();
75978 var selectedImageKey = selected && selected.key;
75981 // Pick one of the images the sign was detected in,
75982 // preference given to an image already selected.
75983 d.detections.forEach(function(detection) {
75984 if (!imageKey || selectedImageKey === detection.image_key) {
75985 imageKey = detection.image_key;
75990 .selectImage(null, imageKey)
75991 .updateViewer(imageKey, context)
75996 function update() {
75997 var service = getService();
75998 var data = (service ? service.signs(projection) : []);
75999 var viewer = d3_select('#photoviewer');
76000 var selected = viewer.empty() ? undefined : viewer.datum();
76001 var selectedImageKey = selected && selected.key;
76002 var transform = svgPointTransform(projection);
76004 var signs = layer.selectAll('.icon-sign')
76005 .data(data, function(d) { return d.key; });
76012 var enter = signs.enter()
76014 .attr('class', 'icon-sign')
76015 .attr('width', '24px')
76016 .attr('height', '24px')
76017 .attr('x', '-12px')
76018 .attr('y', '-12px')
76019 .attr('xlink:href', function(d) { return '#' + d.value; })
76020 .classed('currentView', function(d) {
76021 return d.detections.some(function(detection) {
76022 return detection.image_key === selectedImageKey;
76025 .on('click', click);
76030 .sort(function(a, b) {
76031 return (a === selected) ? 1
76032 : (b === selected) ? -1
76033 : b.loc[1] - a.loc[1]; // sort Y
76035 .attr('transform', transform);
76039 function drawSigns(selection) {
76040 var enabled = svgMapillarySigns.enabled;
76041 var service = getService();
76043 layer = selection.selectAll('.layer-mapillary-signs')
76044 .data(service ? [0] : []);
76049 layer = layer.enter()
76051 .attr('class', 'layer-mapillary-signs')
76052 .style('display', enabled ? 'block' : 'none')
76056 if (service && ~~context.map().zoom() >= minZoom) {
76059 service.loadSigns(projection);
76067 drawSigns.enabled = function(_) {
76068 if (!arguments.length) return svgMapillarySigns.enabled;
76069 svgMapillarySigns.enabled = _;
76070 if (svgMapillarySigns.enabled) {
76075 dispatch.call('change');
76080 drawSigns.supported = function() {
76081 return !!getService();
76089 function svgOpenstreetcamImages(projection, context, dispatch) {
76090 var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
76092 var minMarkerZoom = 16;
76093 var minViewfieldZoom = 18;
76094 var layer = d3_select(null);
76095 var _openstreetcam;
76099 if (svgOpenstreetcamImages.initialized) return; // run once
76100 svgOpenstreetcamImages.enabled = false;
76101 svgOpenstreetcamImages.initialized = true;
76105 function getService() {
76106 if (services$1.openstreetcam && !_openstreetcam) {
76107 _openstreetcam = services$1.openstreetcam;
76108 _openstreetcam.event.on('loadedImages', throttledRedraw);
76109 } else if (!services$1.openstreetcam && _openstreetcam) {
76110 _openstreetcam = null;
76113 return _openstreetcam;
76117 function showLayer() {
76118 var service = getService();
76119 if (!service) return;
76124 .style('opacity', 0)
76127 .style('opacity', 1)
76128 .on('end', function () { dispatch.call('change'); });
76132 function hideLayer() {
76133 throttledRedraw.cancel();
76138 .style('opacity', 0)
76139 .on('end', editOff);
76143 function editOn() {
76144 layer.style('display', 'block');
76148 function editOff() {
76149 layer.selectAll('.viewfield-group').remove();
76150 layer.style('display', 'none');
76154 function click(d) {
76155 var service = getService();
76156 if (!service) return;
76163 context.map().centerEase(d.loc);
76167 function mouseover(d) {
76168 var service = getService();
76169 if (service) service.setStyles(d);
76173 function mouseout() {
76174 var service = getService();
76175 if (service) service.setStyles(null);
76179 function transform(d) {
76180 var t = svgPointTransform(projection)(d);
76182 t += ' rotate(' + Math.floor(d.ca) + ',0,0)';
76188 context.photos().on('change.openstreetcam_images', update);
76190 function update() {
76191 var viewer = d3_select('#photoviewer');
76192 var selected = viewer.empty() ? undefined : viewer.datum();
76194 var z = ~~context.map().zoom();
76195 var showMarkers = (z >= minMarkerZoom);
76196 var showViewfields = (z >= minViewfieldZoom);
76198 var service = getService();
76199 var sequences = [];
76202 if (context.photos().showsFlat()) {
76203 sequences = (service ? service.sequences(projection) : []);
76204 images = (service && showMarkers ? service.images(projection) : []);
76207 var traces = layer.selectAll('.sequences').selectAll('.sequence')
76208 .data(sequences, function(d) { return d.properties.key; });
76215 traces = traces.enter()
76217 .attr('class', 'sequence')
76219 .attr('d', svgPath(projection).geojson);
76222 var groups = layer.selectAll('.markers').selectAll('.viewfield-group')
76223 .data(images, function(d) { return d.key; });
76230 var groupsEnter = groups.enter()
76232 .attr('class', 'viewfield-group')
76233 .on('mouseenter', mouseover)
76234 .on('mouseleave', mouseout)
76235 .on('click', click);
76239 .attr('class', 'viewfield-scale');
76242 var markers = groups
76243 .merge(groupsEnter)
76244 .sort(function(a, b) {
76245 return (a === selected) ? 1
76246 : (b === selected) ? -1
76247 : b.loc[1] - a.loc[1]; // sort Y
76249 .attr('transform', transform)
76250 .select('.viewfield-scale');
76253 markers.selectAll('circle')
76261 var viewfields = markers.selectAll('.viewfield')
76262 .data(showViewfields ? [0] : []);
76267 viewfields.enter() // viewfields may or may not be drawn...
76268 .insert('path', 'circle') // but if they are, draw below the circles
76269 .attr('class', 'viewfield')
76270 .attr('transform', 'scale(1.5,1.5),translate(-8, -13)')
76271 .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');
76275 function drawImages(selection) {
76276 var enabled = svgOpenstreetcamImages.enabled,
76277 service = getService();
76279 layer = selection.selectAll('.layer-openstreetcam')
76280 .data(service ? [0] : []);
76285 var layerEnter = layer.enter()
76287 .attr('class', 'layer-openstreetcam')
76288 .style('display', enabled ? 'block' : 'none');
76292 .attr('class', 'sequences');
76296 .attr('class', 'markers');
76302 if (service && ~~context.map().zoom() >= minZoom) {
76305 service.loadImages(projection);
76313 drawImages.enabled = function(_) {
76314 if (!arguments.length) return svgOpenstreetcamImages.enabled;
76315 svgOpenstreetcamImages.enabled = _;
76316 if (svgOpenstreetcamImages.enabled) {
76321 dispatch.call('change');
76326 drawImages.supported = function() {
76327 return !!getService();
76335 function svgOsm(projection, context, dispatch) {
76336 var enabled = true;
76339 function drawOsm(selection) {
76340 selection.selectAll('.layer-osm')
76341 .data(['covered', 'areas', 'lines', 'points', 'labels'])
76344 .attr('class', function(d) { return 'layer-osm ' + d; });
76346 selection.selectAll('.layer-osm.points').selectAll('.points-group')
76347 .data(['points', 'midpoints', 'vertices', 'turns'])
76350 .attr('class', function(d) { return 'points-group ' + d; });
76354 function showLayer() {
76355 var layer = context.surface().selectAll('.data-layer.osm');
76359 .classed('disabled', false)
76360 .style('opacity', 0)
76363 .style('opacity', 1)
76364 .on('end interrupt', function () {
76365 dispatch.call('change');
76370 function hideLayer() {
76371 var layer = context.surface().selectAll('.data-layer.osm');
76377 .style('opacity', 0)
76378 .on('end interrupt', function () {
76379 layer.classed('disabled', true);
76380 dispatch.call('change');
76385 drawOsm.enabled = function(val) {
76386 if (!arguments.length) return enabled;
76395 dispatch.call('change');
76403 var _notesEnabled = false;
76407 function svgNotes(projection, context, dispatch$1) {
76408 if (!dispatch$1) { dispatch$1 = dispatch('change'); }
76409 var throttledRedraw = throttle(function () { dispatch$1.call('change'); }, 1000);
76411 var touchLayer = d3_select(null);
76412 var drawLayer = d3_select(null);
76413 var _notesVisible = false;
76416 function markerPath(selection, klass) {
76418 .attr('class', klass)
76419 .attr('transform', 'translate(-8, -22)')
76420 .attr('d', 'm17.5,0l-15,0c-1.37,0 -2.5,1.12 -2.5,2.5l0,11.25c0,1.37 1.12,2.5 2.5,2.5l3.75,0l0,3.28c0,0.38 0.43,0.6 0.75,0.37l4.87,-3.65l5.62,0c1.37,0 2.5,-1.12 2.5,-2.5l0,-11.25c0,-1.37 -1.12,-2.5 -2.5,-2.5z');
76424 // Loosely-coupled osm service for fetching notes.
76425 function getService() {
76426 if (services$1.osm && !_osmService) {
76427 _osmService = services$1.osm;
76428 _osmService.on('loadedNotes', throttledRedraw);
76429 } else if (!services$1.osm && _osmService) {
76430 _osmService = null;
76433 return _osmService;
76438 function editOn() {
76439 if (!_notesVisible) {
76440 _notesVisible = true;
76442 .style('display', 'block');
76447 // Immediately remove the notes and their touch targets
76448 function editOff() {
76449 if (_notesVisible) {
76450 _notesVisible = false;
76452 .style('display', 'none');
76453 drawLayer.selectAll('.note')
76455 touchLayer.selectAll('.note')
76461 // Enable the layer. This shows the notes and transitions them to visible.
76462 function layerOn() {
76466 .style('opacity', 0)
76469 .style('opacity', 1)
76470 .on('end interrupt', function () {
76471 dispatch$1.call('change');
76476 // Disable the layer. This transitions the layer invisible and then hides the notes.
76477 function layerOff() {
76478 throttledRedraw.cancel();
76479 drawLayer.interrupt();
76480 touchLayer.selectAll('.note')
76486 .style('opacity', 0)
76487 .on('end interrupt', function () {
76489 dispatch$1.call('change');
76494 // Update the note markers
76495 function updateMarkers() {
76496 if (!_notesVisible || !_notesEnabled) return;
76498 var service = getService();
76499 var selectedID = context.selectedNoteID();
76500 var data = (service ? service.notes(projection) : []);
76501 var getTransform = svgPointTransform(projection);
76504 var notes = drawLayer.selectAll('.note')
76505 .data(data, function(d) { return d.status + d.id; });
76512 var notesEnter = notes.enter()
76514 .attr('class', function(d) { return 'note note-' + d.id + ' ' + d.status; })
76515 .classed('new', function(d) { return d.id < 0; });
76523 .attr('class', 'stroke');
76527 .call(markerPath, 'shadow');
76531 .attr('class', 'note-fill')
76532 .attr('width', '20px')
76533 .attr('height', '20px')
76535 .attr('y', '-22px')
76536 .attr('xlink:href', '#iD-icon-note');
76538 notesEnter.selectAll('.icon-annotation')
76539 .data(function(d) { return [d]; })
76542 .attr('class', 'icon-annotation')
76543 .attr('width', '10px')
76544 .attr('height', '10px')
76546 .attr('y', '-19px')
76547 .attr('xlink:href', function(d) {
76548 return '#iD-icon-' + (d.id < 0 ? 'plus' : (d.status === 'open' ? 'close' : 'apply'));
76555 .classed('selected', function(d) {
76556 var mode = context.mode();
76557 var isMoving = mode && mode.id === 'drag-note'; // no shadows when dragging
76558 return !isMoving && d.id === selectedID;
76560 .attr('transform', getTransform);
76564 if (touchLayer.empty()) return;
76565 var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
76567 var targets = touchLayer.selectAll('.note')
76568 .data(data, function(d) { return d.id; });
76577 .attr('width', '20px')
76578 .attr('height', '20px')
76580 .attr('y', '-22px')
76583 .attr('class', function(d) {
76584 var newClass = (d.id < 0 ? 'new' : '');
76585 return 'note target note-' + d.id + ' ' + fillClass + newClass;
76587 .attr('transform', getTransform);
76590 function sortY(a, b) {
76591 return (a.id === selectedID) ? 1 : (b.id === selectedID) ? -1 : b.loc[1] - a.loc[1];
76596 // Draw the notes layer and schedule loading notes and updating markers.
76597 function drawNotes(selection) {
76598 var service = getService();
76600 var surface = context.surface();
76601 if (surface && !surface.empty()) {
76602 touchLayer = surface.selectAll('.data-layer.touch .layer-touch.markers');
76605 drawLayer = selection.selectAll('.layer-notes')
76606 .data(service ? [0] : []);
76611 drawLayer = drawLayer.enter()
76613 .attr('class', 'layer-notes')
76614 .style('display', _notesEnabled ? 'block' : 'none')
76617 if (_notesEnabled) {
76618 if (service && ~~context.map().zoom() >= minZoom) {
76620 service.loadNotes(projection);
76629 // Toggles the layer on and off
76630 drawNotes.enabled = function(val) {
76631 if (!arguments.length) return _notesEnabled;
76633 _notesEnabled = val;
76634 if (_notesEnabled) {
76638 if (context.selectedNoteID()) {
76639 context.enter(modeBrowse(context));
76643 dispatch$1.call('change');
76651 function svgTouch() {
76653 function drawTouch(selection) {
76654 selection.selectAll('.layer-touch')
76655 .data(['areas', 'lines', 'points', 'turns', 'markers'])
76658 .attr('class', function(d) { return 'layer-touch ' + d; });
76664 function svgLayers(projection, context) {
76665 var dispatch$1 = dispatch('change');
76666 var svg = d3_select(null);
76668 { id: 'osm', layer: svgOsm(projection, context, dispatch$1) },
76669 { id: 'notes', layer: svgNotes(projection, context, dispatch$1) },
76670 { id: 'data', layer: svgData(projection, context, dispatch$1) },
76671 { id: 'keepRight', layer: svgKeepRight(projection, context, dispatch$1) },
76672 { id: 'improveOSM', layer: svgImproveOSM(projection, context, dispatch$1) },
76673 { id: 'streetside', layer: svgStreetside(projection, context, dispatch$1)},
76674 { id: 'mapillary', layer: svgMapillaryImages(projection, context, dispatch$1) },
76675 { id: 'mapillary-signs', layer: svgMapillarySigns(projection, context, dispatch$1) },
76676 { id: 'openstreetcam', layer: svgOpenstreetcamImages(projection, context, dispatch$1) },
76677 { id: 'debug', layer: svgDebug(projection, context, dispatch$1) },
76678 { id: 'geolocate', layer: svgGeolocate(projection, context, dispatch$1) },
76679 { id: 'touch', layer: svgTouch(projection, context, dispatch$1) }
76683 function drawLayers(selection) {
76684 svg = selection.selectAll('.surface')
76689 .attr('class', 'surface')
76692 var defs = svg.selectAll('.surface-defs')
76697 .attr('class', 'surface-defs');
76699 var groups = svg.selectAll('.data-layer')
76707 .attr('class', function(d) { return 'data-layer ' + d.id; })
76709 .each(function(d) { d3_select(this).call(d.layer); });
76713 drawLayers.all = function() {
76718 drawLayers.layer = function(id) {
76719 var obj = _layers.find(function(o) { return o.id === id; });
76720 return obj && obj.layer;
76724 drawLayers.only = function(what) {
76725 var arr = [].concat(what);
76726 var all = _layers.map(function(layer) { return layer.id; });
76727 return drawLayers.remove(utilArrayDifference(all, arr));
76731 drawLayers.remove = function(what) {
76732 var arr = [].concat(what);
76733 arr.forEach(function(id) {
76734 _layers = _layers.filter(function(o) { return o.id !== id; });
76736 dispatch$1.call('change');
76741 drawLayers.add = function(what) {
76742 var arr = [].concat(what);
76743 arr.forEach(function(obj) {
76744 if ('id' in obj && 'layer' in obj) {
76748 dispatch$1.call('change');
76753 drawLayers.dimensions = function(val) {
76754 if (!arguments.length) return utilGetDimensions(svg);
76755 utilSetDimensions(svg, val);
76760 return utilRebind(drawLayers, dispatch$1, 'on');
76763 function svgLines(projection, context) {
76764 var detected = utilDetect();
76766 var highway_stack = {
76782 function drawTargets(selection, graph, entities, filter) {
76783 var targetClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
76784 var nopeClass = context.getDebug('target') ? 'red ' : 'nocolor ';
76785 var getPath = svgPath(projection).geojson;
76786 var activeID = context.activeID();
76788 // The targets and nopes will be MultiLineString sub-segments of the ways
76789 var data = { targets: [], nopes: [] };
76791 entities.forEach(function(way) {
76792 var features = svgSegmentWay(way, graph, activeID);
76793 data.targets.push.apply(data.targets, features.passive);
76794 data.nopes.push.apply(data.nopes, features.active);
76798 // Targets allow hover and vertex snapping
76799 var targetData = data.targets.filter(getPath);
76800 var targets = selection.selectAll('.line.target-allowed')
76801 .filter(function(d) { return filter(d.properties.entity); })
76802 .data(targetData, function key(d) { return d.id; });
76812 .attr('d', getPath)
76813 .attr('class', function(d) { return 'way line target target-allowed ' + targetClass + d.id; });
76817 var nopeData = data.nopes.filter(getPath);
76818 var nopes = selection.selectAll('.line.target-nope')
76819 .filter(function(d) { return filter(d.properties.entity); })
76820 .data(nopeData, function key(d) { return d.id; });
76830 .attr('d', getPath)
76831 .attr('class', function(d) { return 'way line target target-nope ' + nopeClass + d.id; });
76835 function drawLines(selection, graph, entities, filter) {
76837 function waystack(a, b) {
76838 var selected = context.selectedIDs();
76839 var scoreA = selected.indexOf(a.id) !== -1 ? 20 : 0;
76840 var scoreB = selected.indexOf(b.id) !== -1 ? 20 : 0;
76842 if (a.tags.highway) { scoreA -= highway_stack[a.tags.highway]; }
76843 if (b.tags.highway) { scoreB -= highway_stack[b.tags.highway]; }
76844 return scoreA - scoreB;
76848 function drawLineGroup(selection, klass, isSelected) {
76849 // Note: Don't add `.selected` class in draw modes
76850 var mode = context.mode();
76851 var isDrawing = mode && /^draw/.test(mode.id);
76852 var selectedClass = (!isDrawing && isSelected) ? 'selected ' : '';
76854 var lines = selection
76857 .data(getPathData(isSelected), osmEntity.key);
76862 // Optimization: Call expensive TagClasses only on enter selection. This
76863 // works because osmEntity.key is defined to include the entity v attribute.
76866 .attr('class', function(d) {
76868 var prefix = 'way line';
76869 if (!d.hasInterestingTags() && graph.parentMultipolygons(d).length > 0) {
76870 // fudge the classes to style multipolygon member lines as area edges
76871 prefix = 'relation area';
76874 var oldMPClass = oldMultiPolygonOuters[d.id] ? 'old-multipolygon ' : '';
76875 return prefix + ' ' + klass + ' ' + selectedClass + oldMPClass + d.id;
76877 .call(svgTagClasses())
76880 .attr('d', getPath)
76881 .call(svgTagClasses().tags(svgRelationMemberTags(graph)));
76887 function getPathData(isSelected) {
76888 return function() {
76889 var layer = this.parentNode.__data__;
76890 var data = pathdata[layer] || [];
76891 return data.filter(function(d) {
76893 return context.selectedIDs().indexOf(d.id) !== -1;
76895 return context.selectedIDs().indexOf(d.id) === -1;
76900 function addMarkers(layergroup, pathclass, groupclass, groupdata, marker) {
76901 var markergroup = layergroup
76902 .selectAll('g.' + groupclass)
76903 .data([pathclass]);
76905 markergroup = markergroup.enter()
76907 .attr('class', groupclass)
76908 .merge(markergroup);
76910 var markers = markergroup
76914 function data() { return groupdata[this.parentNode.__data__] || []; },
76915 function key(d) { return [d.id, d.index]; }
76921 markers = markers.enter()
76923 .attr('class', pathclass)
76924 .attr('marker-mid', marker)
76926 .attr('d', function(d) { return d.d; });
76929 markers.each(function() { this.parentNode.insertBefore(this, this); });
76934 var getPath = svgPath(projection, graph);
76936 var onewaydata = {};
76937 var sideddata = {};
76938 var oldMultiPolygonOuters = {};
76940 for (var i = 0; i < entities.length; i++) {
76941 var entity = entities[i];
76942 var outer = osmOldMultipolygonOuterMember(entity, graph);
76944 ways.push(entity.mergeTags(outer.tags));
76945 oldMultiPolygonOuters[outer.id] = true;
76946 } else if (entity.geometry(graph) === 'line') {
76951 ways = ways.filter(getPath);
76952 var pathdata = utilArrayGroupBy(ways, function(way) { return way.layer(); });
76954 Object.keys(pathdata).forEach(function(k) {
76955 var v = pathdata[k];
76956 var onewayArr = v.filter(function(d) { return d.isOneWay(); });
76957 var onewaySegments = svgMarkerSegments(
76958 projection, graph, 35,
76959 function shouldReverse(entity) { return entity.tags.oneway === '-1'; },
76960 function bothDirections(entity) {
76961 return entity.tags.oneway === 'reversible' || entity.tags.oneway === 'alternating';
76964 onewaydata[k] = utilArrayFlatten(onewayArr.map(onewaySegments));
76966 var sidedArr = v.filter(function(d) { return d.isSided(); });
76967 var sidedSegments = svgMarkerSegments(
76968 projection, graph, 30,
76969 function shouldReverse() { return false; },
76970 function bothDirections() { return false; }
76972 sideddata[k] = utilArrayFlatten(sidedArr.map(sidedSegments));
76976 var covered = selection.selectAll('.layer-osm.covered'); // under areas
76977 var uncovered = selection.selectAll('.layer-osm.lines'); // over areas
76978 var touchLayer = selection.selectAll('.layer-touch.lines');
76981 [covered, uncovered].forEach(function(selection) {
76982 var range = (selection === covered ? d3_range(-10,0) : d3_range(0,11));
76983 var layergroup = selection
76984 .selectAll('g.layergroup')
76987 layergroup = layergroup.enter()
76989 .attr('class', function(d) { return 'layergroup layer' + String(d); })
76990 .merge(layergroup);
76993 .selectAll('g.linegroup')
76994 .data(['shadow', 'casing', 'stroke', 'shadow-highlighted', 'casing-highlighted', 'stroke-highlighted'])
76997 .attr('class', function(d) { return 'linegroup line-' + d; });
76999 layergroup.selectAll('g.line-shadow')
77000 .call(drawLineGroup, 'shadow', false);
77001 layergroup.selectAll('g.line-casing')
77002 .call(drawLineGroup, 'casing', false);
77003 layergroup.selectAll('g.line-stroke')
77004 .call(drawLineGroup, 'stroke', false);
77006 layergroup.selectAll('g.line-shadow-highlighted')
77007 .call(drawLineGroup, 'shadow', true);
77008 layergroup.selectAll('g.line-casing-highlighted')
77009 .call(drawLineGroup, 'casing', true);
77010 layergroup.selectAll('g.line-stroke-highlighted')
77011 .call(drawLineGroup, 'stroke', true);
77013 addMarkers(layergroup, 'oneway', 'onewaygroup', onewaydata, 'url(#oneway-marker)');
77014 addMarkers(layergroup, 'sided', 'sidedgroup', sideddata,
77015 function marker(d) {
77016 var category = graph.entity(d.id).sidednessIdentifier();
77017 return 'url(#sided-marker-' + category + ')';
77022 // Draw touch targets..
77024 .call(drawTargets, graph, ways, filter);
77031 function svgMidpoints(projection, context) {
77032 var targetRadius = 8;
77034 function drawTargets(selection, graph, entities, filter) {
77035 var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
77036 var getTransform = svgPointTransform(projection).geojson;
77038 var data = entities.map(function(midpoint) {
77048 coordinates: midpoint.loc
77053 var targets = selection.selectAll('.midpoint.target')
77054 .filter(function(d) { return filter(d.properties.entity); })
77055 .data(data, function key(d) { return d.id; });
77064 .attr('r', targetRadius)
77066 .attr('class', function(d) { return 'node midpoint target ' + fillClass + d.id; })
77067 .attr('transform', getTransform);
77071 function drawMidpoints(selection, graph, entities, filter, extent) {
77072 var drawLayer = selection.selectAll('.layer-osm.points .points-group.midpoints');
77073 var touchLayer = selection.selectAll('.layer-touch.points');
77075 var mode = context.mode();
77076 if (mode && mode.id !== 'select') {
77077 drawLayer.selectAll('.midpoint').remove();
77078 touchLayer.selectAll('.midpoint.target').remove();
77082 var poly = extent.polygon();
77083 var midpoints = {};
77085 for (var i = 0; i < entities.length; i++) {
77086 var entity = entities[i];
77088 if (entity.type !== 'way') continue;
77089 if (!filter(entity)) continue;
77090 if (context.selectedIDs().indexOf(entity.id) < 0) continue;
77092 var nodes = graph.childNodes(entity);
77093 for (var j = 0; j < nodes.length - 1; j++) {
77095 var b = nodes[j + 1];
77096 var id = [a.id, b.id].sort().join('-');
77098 if (midpoints[id]) {
77099 midpoints[id].parents.push(entity);
77100 } else if (geoVecLength(projection(a.loc), projection(b.loc)) > 40) {
77101 var point = geoVecInterp(a.loc, b.loc, 0.5);
77104 if (extent.intersects(point)) {
77107 for (var k = 0; k < 4; k++) {
77108 point = geoLineIntersection([a.loc, b.loc], [poly[k], poly[k + 1]]);
77110 geoVecLength(projection(a.loc), projection(point)) > 20 &&
77111 geoVecLength(projection(b.loc), projection(point)) > 20)
77124 edge: [a.id, b.id],
77133 function midpointFilter(d) {
77134 if (midpoints[d.id])
77137 for (var i = 0; i < d.parents.length; i++) {
77138 if (filter(d.parents[i])) {
77147 var groups = drawLayer.selectAll('.midpoint')
77148 .filter(midpointFilter)
77149 .data(Object.values(midpoints), function(d) { return d.id; });
77154 var enter = groups.enter()
77155 .insert('g', ':first-child')
77156 .attr('class', 'midpoint');
77160 .attr('points', '-6,8 10,0 -6,-8')
77161 .attr('class', 'shadow');
77165 .attr('points', '-3,4 5,0 -3,-4')
77166 .attr('class', 'fill');
77170 .attr('transform', function(d) {
77171 var translate = svgPointTransform(projection);
77172 var a = graph.entity(d.edge[0]);
77173 var b = graph.entity(d.edge[1]);
77174 var angle = geoAngle(a, b, projection) * (180 / Math.PI);
77175 return translate(d) + ' rotate(' + angle + ')';
77177 .call(svgTagClasses().tags(
77178 function(d) { return d.parents[0].tags; }
77181 // Propagate data bindings.
77182 groups.select('polygon.shadow');
77183 groups.select('polygon.fill');
77186 // Draw touch targets..
77188 .call(drawTargets, graph, Object.values(midpoints), midpointFilter);
77191 return drawMidpoints;
77194 function svgPoints(projection, context) {
77196 function markerPath(selection, klass) {
77198 .attr('class', klass)
77199 .attr('transform', 'translate(-8, -23)')
77200 .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');
77203 function sortY(a, b) {
77204 return b.loc[1] - a.loc[1];
77208 // Avoid exit/enter if we're just moving stuff around.
77209 // The node will get a new version but we only need to run the update selection.
77210 function fastEntityKey(d) {
77211 var mode = context.mode();
77212 var isMoving = mode && /^(add|draw|drag|move|rotate)/.test(mode.id);
77213 return isMoving ? d.id : osmEntity.key(d);
77217 function drawTargets(selection, graph, entities, filter) {
77218 var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
77219 var getTransform = svgPointTransform(projection).geojson;
77220 var activeID = context.activeID();
77223 entities.forEach(function(node) {
77224 if (activeID === node.id) return; // draw no target on the activeID
77233 geometry: node.asGeoJSON()
77237 var targets = selection.selectAll('.point.target')
77238 .filter(function(d) { return filter(d.properties.entity); })
77239 .data(data, function key(d) { return d.id; });
77251 .attr('height', 30)
77253 .attr('class', function(d) { return 'node point target ' + fillClass + d.id; })
77254 .attr('transform', getTransform);
77258 function drawPoints(selection, graph, entities, filter) {
77259 var wireframe = context.surface().classed('fill-wireframe');
77260 var zoom = geoScaleToZoom(projection.scale());
77262 // Points with a direction will render as vertices at higher zooms..
77263 function renderAsPoint(entity) {
77264 return entity.geometry(graph) === 'point' &&
77265 !(zoom >= 18 && entity.directions(graph, projection).length);
77268 // All points will render as vertices in wireframe mode too..
77269 var points = wireframe ? [] : entities.filter(renderAsPoint);
77270 points.sort(sortY);
77273 var drawLayer = selection.selectAll('.layer-osm.points .points-group.points');
77274 var touchLayer = selection.selectAll('.layer-touch.points');
77277 var groups = drawLayer.selectAll('g.point')
77279 .data(points, fastEntityKey);
77284 var enter = groups.enter()
77286 .attr('class', function(d) { return 'node point ' + d.id; })
77291 .call(markerPath, 'shadow');
77299 .attr('class', 'stroke');
77303 .call(markerPath, 'stroke');
77307 .attr('transform', 'translate(-5, -19)')
77308 .attr('class', 'icon')
77309 .attr('width', '11px')
77310 .attr('height', '11px');
77314 .attr('transform', svgPointTransform(projection))
77315 .call(svgTagClasses());
77317 groups.select('.shadow'); // propagate bound data
77318 groups.select('.stroke'); // propagate bound data
77319 groups.select('.icon') // propagate bound data
77320 .attr('xlink:href', function(entity) {
77321 var preset = context.presets().match(entity, graph);
77322 var picon = preset && preset.icon;
77327 var isMaki = /^maki-/.test(picon);
77328 return '#' + picon + (isMaki ? '-11' : '');
77333 // Draw touch targets..
77335 .call(drawTargets, graph, points, filter);
77342 function svgTurns(projection, context) {
77344 function icon(turn) {
77345 var u = turn.u ? '-u' : '';
77346 if (turn.no) return '#iD-turn-no' + u;
77347 if (turn.only) return '#iD-turn-only' + u;
77348 return '#iD-turn-yes' + u;
77351 function drawTurns(selection, graph, turns) {
77353 function turnTransform(d) {
77355 var toWay = graph.entity(d.to.way);
77356 var toPoints = graph.childNodes(toWay)
77357 .map(function (n) { return n.loc; })
77359 var toLength = geoPathLength(toPoints);
77360 var mid = toLength / 2; // midpoint of destination way
77362 var toNode = graph.entity(d.to.node);
77363 var toVertex = graph.entity(d.to.vertex);
77364 var a = geoAngle(toVertex, toNode, projection);
77365 var o = projection(toVertex.loc);
77366 var r = d.u ? 0 // u-turn: no radius
77367 : !toWay.__via ? pxRadius // leaf way: put marker at pxRadius
77368 : Math.min(mid, pxRadius); // via way: prefer pxRadius, fallback to mid for very short ways
77370 return 'translate(' + (r * Math.cos(a) + o[0]) + ',' + (r * Math.sin(a) + o[1]) + ') ' +
77371 'rotate(' + a * 180 / Math.PI + ')';
77375 var drawLayer = selection.selectAll('.layer-osm.points .points-group.turns');
77376 var touchLayer = selection.selectAll('.layer-touch.turns');
77379 var groups = drawLayer.selectAll('g.turn')
77380 .data(turns, function(d) { return d.key; });
77387 var groupsEnter = groups.enter()
77389 .attr('class', function(d) { return 'turn ' + d.key; });
77391 var turnsEnter = groupsEnter
77392 .filter(function(d) { return !d.u; });
77394 turnsEnter.append('rect')
77395 .attr('transform', 'translate(-22, -12)')
77396 .attr('width', '44')
77397 .attr('height', '24');
77399 turnsEnter.append('use')
77400 .attr('transform', 'translate(-22, -12)')
77401 .attr('width', '44')
77402 .attr('height', '24');
77404 var uEnter = groupsEnter
77405 .filter(function(d) { return d.u; });
77407 uEnter.append('circle')
77410 uEnter.append('use')
77411 .attr('transform', 'translate(-16, -16)')
77412 .attr('width', '32')
77413 .attr('height', '32');
77417 .merge(groupsEnter)
77418 .attr('opacity', function(d) { return d.direct === false ? '0.7' : null; })
77419 .attr('transform', turnTransform);
77421 groups.select('use')
77422 .attr('xlink:href', icon);
77424 groups.select('rect'); // propagate bound data
77425 groups.select('circle'); // propagate bound data
77428 // Draw touch targets..
77429 var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
77430 groups = touchLayer.selectAll('g.turn')
77431 .data(turns, function(d) { return d.key; });
77438 groupsEnter = groups.enter()
77440 .attr('class', function(d) { return 'turn ' + d.key; });
77442 turnsEnter = groupsEnter
77443 .filter(function(d) { return !d.u; });
77445 turnsEnter.append('rect')
77446 .attr('class', 'target ' + fillClass)
77447 .attr('transform', 'translate(-22, -12)')
77448 .attr('width', '44')
77449 .attr('height', '24');
77451 uEnter = groupsEnter
77452 .filter(function(d) { return d.u; });
77454 uEnter.append('circle')
77455 .attr('class', 'target ' + fillClass)
77460 .merge(groupsEnter)
77461 .attr('transform', turnTransform);
77463 groups.select('rect'); // propagate bound data
77464 groups.select('circle'); // propagate bound data
77473 function svgVertices(projection, context) {
77475 // z16-, z17, z18+, w/icon
77476 shadow: [6, 7.5, 7.5, 12],
77477 stroke: [2.5, 3.5, 3.5, 8],
77478 fill: [1, 1.5, 1.5, 1.5]
77481 var _currHoverTarget;
77482 var _currPersistent = {};
77483 var _currHover = {};
77484 var _prevHover = {};
77485 var _currSelected = {};
77486 var _prevSelected = {};
77490 function sortY(a, b) {
77491 return b.loc[1] - a.loc[1];
77494 // Avoid exit/enter if we're just moving stuff around.
77495 // The node will get a new version but we only need to run the update selection.
77496 function fastEntityKey(d) {
77497 var mode = context.mode();
77498 var isMoving = mode && /^(add|draw|drag|move|rotate)/.test(mode.id);
77499 return isMoving ? d.id : osmEntity.key(d);
77503 function draw(selection, graph, vertices, sets, filter) {
77504 sets = sets || { selected: {}, important: {}, hovered: {} };
77507 var directions = {};
77508 var wireframe = context.surface().classed('fill-wireframe');
77509 var zoom = geoScaleToZoom(projection.scale());
77510 var z = (zoom < 17 ? 0 : zoom < 18 ? 1 : 2);
77511 var activeID = context.activeID();
77514 function getIcon(d) {
77515 // always check latest entity, as fastEntityKey avoids enter/exit now
77516 var entity = graph.entity(d.id);
77517 if (entity.id in icons) return icons[entity.id];
77520 entity.hasInterestingTags() &&
77521 context.presets().match(entity, graph).icon;
77523 return icons[entity.id];
77527 // memoize directions results, return false for empty arrays (for use in filter)
77528 function getDirections(entity) {
77529 if (entity.id in directions) return directions[entity.id];
77531 var angles = entity.directions(graph, projection);
77532 directions[entity.id] = angles.length ? angles : false;
77537 function updateAttributes(selection) {
77538 ['shadow', 'stroke', 'fill'].forEach(function(klass) {
77539 var rads = radiuses[klass];
77540 selection.selectAll('.' + klass)
77541 .each(function(entity) {
77542 var i = z && getIcon(entity);
77543 var r = rads[i ? 3 : z];
77545 // slightly increase the size of unconnected endpoints #3775
77546 if (entity.id !== activeID && entity.isEndpoint(graph) && !entity.isConnected(graph)) {
77550 if (klass === 'shadow') { // remember this value, so we don't need to
77551 _radii[entity.id] = r; // recompute it when we draw the touch targets
77556 .attr('visibility', (i && klass === 'fill') ? 'hidden' : null);
77561 vertices.sort(sortY);
77563 var groups = selection.selectAll('g.vertex')
77565 .data(vertices, fastEntityKey);
77572 var enter = groups.enter()
77574 .attr('class', function(d) { return 'node vertex ' + d.id; })
77579 .attr('class', 'shadow');
77583 .attr('class', 'stroke');
77585 // Vertices with tags get a fill.
77586 enter.filter(function(d) { return d.hasInterestingTags(); })
77588 .attr('class', 'fill');
77593 .attr('transform', svgPointTransform(projection))
77594 .classed('sibling', function(d) { return d.id in sets.selected; })
77595 .classed('shared', function(d) { return graph.isShared(d); })
77596 .classed('endpoint', function(d) { return d.isEndpoint(graph); })
77597 .call(updateAttributes);
77600 // Vertices with icons get a `use`.
77601 var iconUse = groups
77602 .selectAll('.icon')
77603 .data(function data(d) { return zoom >= 17 && getIcon(d) ? [d] : []; }, fastEntityKey);
77612 .attr('class', 'icon')
77613 .attr('width', '11px')
77614 .attr('height', '11px')
77615 .attr('transform', 'translate(-5.5, -5.5)')
77616 .attr('xlink:href', function(d) {
77617 var picon = getIcon(d);
77618 var isMaki = /^maki-/.test(picon);
77619 return '#' + picon + (isMaki ? '-11' : '');
77623 // Vertices with directions get viewfields
77624 var dgroups = groups
77625 .selectAll('.viewfieldgroup')
77626 .data(function data(d) { return zoom >= 18 && getDirections(d) ? [d] : []; }, fastEntityKey);
77633 dgroups = dgroups.enter()
77634 .insert('g', '.shadow')
77635 .attr('class', 'viewfieldgroup')
77638 var viewfields = dgroups.selectAll('.viewfield')
77639 .data(getDirections, function key(d) { return osmEntity.key(d); });
77648 .attr('class', 'viewfield')
77649 .attr('d', 'M0,0H0')
77651 .attr('marker-start', 'url(#viewfield-marker' + (wireframe ? '-wireframe' : '') + ')')
77652 .attr('transform', function(d) { return 'rotate(' + d + ')'; });
77656 function drawTargets(selection, graph, entities, filter) {
77657 var targetClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
77658 var nopeClass = context.getDebug('target') ? 'red ' : 'nocolor ';
77659 var getTransform = svgPointTransform(projection).geojson;
77660 var activeID = context.activeID();
77661 var data = { targets: [], nopes: [] };
77663 entities.forEach(function(node) {
77664 if (activeID === node.id) return; // draw no target on the activeID
77666 var vertexType = svgPassiveVertex(node, graph, activeID);
77667 if (vertexType !== 0) { // passive or adjacent - allow to connect
77668 data.targets.push({
77675 geometry: node.asGeoJSON()
77680 id: node.id + '-nope',
77686 geometry: node.asGeoJSON()
77692 // Targets allow hover and vertex snapping
77693 var targets = selection.selectAll('.vertex.target-allowed')
77694 .filter(function(d) { return filter(d.properties.entity); })
77695 .data(data.targets, function key(d) { return d.id; });
77704 .attr('r', function(d) { return (_radii[d.id] || radiuses.shadow[3]); })
77706 .attr('class', function(d) { return 'node vertex target target-allowed ' + targetClass + d.id; })
77707 .attr('transform', getTransform);
77711 var nopes = selection.selectAll('.vertex.target-nope')
77712 .filter(function(d) { return filter(d.properties.entity); })
77713 .data(data.nopes, function key(d) { return d.id; });
77722 .attr('r', function(d) { return (_radii[d.properties.entity.id] || radiuses.shadow[3]); })
77724 .attr('class', function(d) { return 'node vertex target target-nope ' + nopeClass + d.id; })
77725 .attr('transform', getTransform);
77729 // Points can also render as vertices:
77730 // 1. in wireframe mode or
77731 // 2. at higher zooms if they have a direction
77732 function renderAsVertex(entity, graph, wireframe, zoom) {
77733 var geometry = entity.geometry(graph);
77734 return geometry === 'vertex' || (geometry === 'point' && (
77735 wireframe || (zoom >= 18 && entity.directions(graph, projection).length)
77740 function getSiblingAndChildVertices(ids, graph, wireframe, zoom) {
77743 function addChildVertices(entity) {
77744 var geometry = entity.geometry(graph);
77745 if (!context.features().isHiddenFeature(entity, graph, geometry)) {
77747 if (entity.type === 'way') {
77748 for (i = 0; i < entity.nodes.length; i++) {
77749 var child = graph.hasEntity(entity.nodes[i]);
77751 addChildVertices(child);
77754 } else if (entity.type === 'relation') {
77755 for (i = 0; i < entity.members.length; i++) {
77756 var member = graph.hasEntity(entity.members[i].id);
77758 addChildVertices(member);
77761 } else if (renderAsVertex(entity, graph, wireframe, zoom)) {
77762 results[entity.id] = entity;
77767 ids.forEach(function(id) {
77768 var entity = graph.hasEntity(id);
77769 if (!entity) return;
77771 if (entity.type === 'node') {
77772 if (renderAsVertex(entity, graph, wireframe, zoom)) {
77773 results[entity.id] = entity;
77774 graph.parentWays(entity).forEach(function(entity) {
77775 addChildVertices(entity);
77778 } else { // way, relation
77779 addChildVertices(entity);
77787 function drawVertices(selection, graph, entities, filter, extent, fullRedraw) {
77788 var wireframe = context.surface().classed('fill-wireframe');
77789 var zoom = geoScaleToZoom(projection.scale());
77790 var mode = context.mode();
77791 var isMoving = mode && /^(add|draw|drag|move|rotate)/.test(mode.id);
77793 var drawLayer = selection.selectAll('.layer-osm.points .points-group.vertices');
77794 var touchLayer = selection.selectAll('.layer-touch.points');
77797 _currPersistent = {};
77801 // Collect important vertices from the `entities` list..
77802 // (during a paritial redraw, it will not contain everything)
77803 for (var i = 0; i < entities.length; i++) {
77804 var entity = entities[i];
77805 var geometry = entity.geometry(graph);
77808 // a point that looks like a vertex..
77809 if ((geometry === 'point') && renderAsVertex(entity, graph, wireframe, zoom)) {
77810 _currPersistent[entity.id] = entity;
77813 // a vertex of some importance..
77814 } else if (geometry === 'vertex' &&
77815 (entity.hasInterestingTags() || entity.isEndpoint(graph) || entity.isConnected(graph))) {
77816 _currPersistent[entity.id] = entity;
77820 // whatever this is, it's not a persistent vertex..
77821 if (!keep && !fullRedraw) {
77822 delete _currPersistent[entity.id];
77826 // 3 sets of vertices to consider:
77828 persistent: _currPersistent, // persistent = important vertices (render always)
77829 selected: _currSelected, // selected + siblings of selected (render always)
77830 hovered: _currHover // hovered + siblings of hovered (render only in draw modes)
77833 var all = Object.assign({}, (isMoving ? _currHover : {}), _currSelected, _currPersistent);
77835 // Draw the vertices..
77836 // The filter function controls the scope of what objects d3 will touch (exit/enter/update)
77837 // Adjust the filter function to expand the scope beyond whatever entities were passed in.
77838 var filterRendered = function(d) {
77839 return d.id in _currPersistent || d.id in _currSelected || d.id in _currHover || filter(d);
77842 .call(draw, graph, currentVisible(all), sets, filterRendered);
77844 // Draw touch targets..
77845 // When drawing, render all targets (not just those affected by a partial redraw)
77846 var filterTouch = function(d) {
77847 return isMoving ? true : filterRendered(d);
77850 .call(drawTargets, graph, currentVisible(all), filterTouch);
77853 function currentVisible(which) {
77854 return Object.keys(which)
77855 .map(graph.hasEntity, graph) // the current version of this entity
77856 .filter(function (entity) { return entity && entity.intersects(extent, graph); });
77861 // partial redraw - only update the selected items..
77862 drawVertices.drawSelected = function(selection, graph, extent) {
77863 var wireframe = context.surface().classed('fill-wireframe');
77864 var zoom = geoScaleToZoom(projection.scale());
77866 _prevSelected = _currSelected || {};
77867 _currSelected = getSiblingAndChildVertices(context.selectedIDs(), graph, wireframe, zoom);
77869 // note that drawVertices will add `_currSelected` automatically if needed..
77870 var filter = function(d) { return d.id in _prevSelected; };
77871 drawVertices(selection, graph, Object.values(_prevSelected), filter, extent, false);
77875 // partial redraw - only update the hovered items..
77876 drawVertices.drawHover = function(selection, graph, target, extent) {
77877 if (target === _currHoverTarget) return; // continue only if something changed
77879 var wireframe = context.surface().classed('fill-wireframe');
77880 var zoom = geoScaleToZoom(projection.scale());
77882 _prevHover = _currHover || {};
77883 _currHoverTarget = target;
77884 var entity = target && target.properties && target.properties.entity;
77887 _currHover = getSiblingAndChildVertices([entity.id], graph, wireframe, zoom);
77892 // note that drawVertices will add `_currHover` automatically if needed..
77893 var filter = function(d) { return d.id in _prevHover; };
77894 drawVertices(selection, graph, Object.values(_prevHover), filter, extent, false);
77897 return drawVertices;
77900 function utilBindOnce(target, type, listener, capture) {
77901 var typeOnce = type + '.once';
77903 target.on(typeOnce, null);
77904 listener.apply(this, arguments);
77906 target.on(typeOnce, one, capture);
77911 var TILESIZE = 256;
77912 var kMin = geoZoomToScale(2, TILESIZE);
77913 var kMax = geoZoomToScale(24, TILESIZE);
77915 function clamp(num, min, max) {
77916 return Math.max(min, Math.min(num, max));
77920 function rendererMap(context) {
77921 var dispatch$1 = dispatch('move', 'drawn');
77922 var projection = context.projection;
77923 var curtainProjection = context.curtainProjection;
77924 var drawLayers = svgLayers(projection, context);
77925 var drawPoints = svgPoints(projection, context);
77926 var drawVertices = svgVertices(projection, context);
77927 var drawLines = svgLines(projection, context);
77928 var drawAreas = svgAreas(projection, context);
77929 var drawMidpoints = svgMidpoints(projection, context);
77930 var drawLabels = svgLabels(projection, context);
77932 var _selection = d3_select(null);
77933 var supersurface = d3_select(null);
77934 var wrapper = d3_select(null);
77935 var surface = d3_select(null);
77937 var _dimensions = [1, 1];
77938 var _dblClickEnabled = true;
77939 var _redrawEnabled = true;
77940 var _gestureTransformStart;
77941 var _transformStart = projection.transform();
77942 var _transformLast;
77943 var _isTransformed = false;
77945 var _getMouseCoords;
77948 var zoom = d3_zoom()
77949 .scaleExtent([kMin, kMax])
77950 .interpolate(d3_interpolate)
77951 .filter(zoomEventFilter)
77952 .on('zoom', zoomPan);
77954 var scheduleRedraw = throttle(redraw, 750);
77955 // var isRedrawScheduled = false;
77956 // var pendingRedrawCall;
77957 // function scheduleRedraw() {
77958 // // Only schedule the redraw if one has not already been set.
77959 // if (isRedrawScheduled) return;
77960 // isRedrawScheduled = true;
77961 // var that = this;
77962 // var args = arguments;
77963 // pendingRedrawCall = window.requestIdleCallback(function () {
77964 // // Reset the boolean so future redraws can be set.
77965 // isRedrawScheduled = false;
77966 // redraw.apply(that, args);
77967 // }, { timeout: 1400 });
77970 function cancelPendingRedraw() {
77971 scheduleRedraw.cancel();
77972 // isRedrawScheduled = false;
77973 // window.cancelIdleCallback(pendingRedrawCall);
77977 function map(selection) {
77978 _selection = selection;
77981 .on('change.map', immediateRedraw);
77983 var osm = context.connection();
77985 osm.on('change.map', immediateRedraw);
77988 function didUndoOrRedo(targetTransform) {
77989 var mode = context.mode().id;
77990 if (mode !== 'browse' && mode !== 'select') return;
77991 if (targetTransform) {
77992 map.transformEase(targetTransform);
77997 .on('merge.map', function() { scheduleRedraw(); })
77998 .on('change.map', immediateRedraw)
77999 .on('undone.map', function(stack, fromStack) {
78000 didUndoOrRedo(fromStack.transform);
78002 .on('redone.map', function(stack) {
78003 didUndoOrRedo(stack.transform);
78006 context.background()
78007 .on('change.map', immediateRedraw);
78010 .on('redraw.map', immediateRedraw);
78013 .on('change.map', function() {
78014 context.background().updateImagery();
78019 .on('dblclick.map', dblClick)
78021 .call(zoom.transform, projection.transform());
78023 supersurface = selection.append('div')
78024 .attr('id', 'supersurface')
78025 .call(utilSetTransform, 0, 0);
78027 // Need a wrapper div because Opera can't cope with an absolutely positioned
78028 // SVG element: http://bl.ocks.org/jfirebaugh/6fbfbd922552bf776c16
78029 wrapper = supersurface
78031 .attr('class', 'layer layer-data');
78033 map.surface = surface = wrapper
78035 .selectAll('.surface')
78036 .attr('id', 'surface');
78039 .call(drawLabels.observe)
78040 .on('gesturestart.surface', function() {
78041 _gestureTransformStart = projection.transform();
78043 .on('gesturechange.surface', gestureChange)
78044 .on('mousedown.zoom', function() {
78045 if (event.button === 2) {
78046 event.stopPropagation();
78049 .on('mouseup.zoom', function() {
78050 if (resetTransform()) {
78054 .on('mousemove.map', function() {
78055 _mouseEvent = event;
78057 .on('mouseover.vertices', function() {
78058 if (map.editable() && !_isTransformed) {
78059 var hover = event.target.__data__;
78060 surface.call(drawVertices.drawHover, context.graph(), hover, map.extent());
78061 dispatch$1.call('drawn', this, { full: false });
78064 .on('mouseout.vertices', function() {
78065 if (map.editable() && !_isTransformed) {
78066 var hover = event.relatedTarget && event.relatedTarget.__data__;
78067 surface.call(drawVertices.drawHover, context.graph(), hover, map.extent());
78068 dispatch$1.call('drawn', this, { full: false });
78072 context.on('enter.map', function() {
78073 if (map.editable() && !_isTransformed) {
78074 // redraw immediately any objects affected by a change in selectedIDs.
78075 var graph = context.graph();
78076 var selectedAndParents = {};
78077 context.selectedIDs().forEach(function(id) {
78078 var entity = graph.hasEntity(id);
78080 selectedAndParents[entity.id] = entity;
78081 if (entity.type === 'node') {
78082 graph.parentWays(entity).forEach(function(parent) {
78083 selectedAndParents[parent.id] = parent;
78088 var data = Object.values(selectedAndParents);
78089 var filter = function(d) { return d.id in selectedAndParents; };
78091 data = context.features().filter(data, graph);
78094 .call(drawVertices.drawSelected, graph, map.extent())
78095 .call(drawLines, graph, data, filter)
78096 .call(drawAreas, graph, data, filter)
78097 .call(drawMidpoints, graph, data, filter, map.trimmedExtent());
78099 dispatch$1.call('drawn', this, { full: false });
78101 // redraw everything else later
78106 map.dimensions(utilGetDimensions(selection));
78110 function zoomEventFilter() {
78111 // Fix for #2151, (see also d3/d3-zoom#60, d3/d3-brush#18)
78112 // Intercept `mousedown` and check if there is an orphaned zoom gesture.
78113 // This can happen if a previous `mousedown` occurred without a `mouseup`.
78114 // If we detect this, dispatch `mouseup` to complete the orphaned gesture,
78115 // so that d3-zoom won't stop propagation of new `mousedown` events.
78116 if (event.type === 'mousedown') {
78117 var hasOrphan = false;
78118 var listeners = window.__on;
78119 for (var i = 0; i < listeners.length; i++) {
78120 var listener = listeners[i];
78121 if (listener.name === 'zoom' && listener.type === 'mouseup') {
78127 var event$1 = window.CustomEvent;
78129 event$1 = new event$1('mouseup');
78131 event$1 = window.document.createEvent('Event');
78132 event$1.initEvent('mouseup', false, false);
78134 // Event needs to be dispatched with an event.view property.
78135 event$1.view = window;
78136 window.dispatchEvent(event$1);
78140 return event.button !== 2; // ignore right clicks
78144 function pxCenter() {
78145 return [_dimensions[0] / 2, _dimensions[1] / 2];
78149 function drawEditable(difference, extent) {
78150 var mode = context.mode();
78151 var graph = context.graph();
78152 var features = context.features();
78153 var all = context.intersects(map.extent());
78154 var fullRedraw = false;
78160 var complete = difference.complete(map.extent());
78161 data = Object.values(complete).filter(Boolean);
78162 set = new Set(data.map(function(entity) { return entity.id; }));
78163 filter = function(d) { return set.has(d.id); };
78164 features.clear(data);
78167 // force a full redraw if gatherStats detects that a feature
78168 // should be auto-hidden (e.g. points or buildings)..
78169 if (features.gatherStats(all, graph, _dimensions)) {
78170 extent = undefined;
78174 data = context.intersects(map.extent().intersection(extent));
78175 set = new Set(data.map(function(entity) { return entity.id; }));
78176 filter = function(d) { return set.has(d.id); };
78181 filter = utilFunctor(true);
78185 data = features.filter(data, graph);
78187 if (mode && mode.id === 'select') {
78188 // update selected vertices - the user might have just double-clicked a way,
78189 // creating a new vertex, triggering a partial redraw without a mode change
78190 surface.call(drawVertices.drawSelected, graph, map.extent());
78194 .call(drawVertices, graph, data, filter, map.extent(), fullRedraw)
78195 .call(drawLines, graph, data, filter)
78196 .call(drawAreas, graph, data, filter)
78197 .call(drawMidpoints, graph, data, filter, map.trimmedExtent())
78198 .call(drawLabels, graph, data, filter, _dimensions, fullRedraw)
78199 .call(drawPoints, graph, data, filter);
78201 dispatch$1.call('drawn', this, {full: true});
78205 function editOff() {
78206 context.features().resetStats();
78207 surface.selectAll('.layer-osm *').remove();
78208 surface.selectAll('.layer-touch:not(.markers) *').remove();
78213 'select-note': true,
78214 'select-data': true,
78215 'select-error': true
78218 var mode = context.mode();
78219 if (mode && !allowed[mode.id]) {
78220 context.enter(modeBrowse(context));
78223 dispatch$1.call('drawn', this, {full: true});
78227 function dblClick() {
78228 if (!_dblClickEnabled) {
78229 event.preventDefault();
78230 event.stopImmediatePropagation();
78235 function gestureChange() {
78236 // Remap Safari gesture events to wheel events - #5492
78237 // We want these disabled most places, but enabled for zoom/unzoom on map surface
78238 // https://developer.mozilla.org/en-US/docs/Web/API/GestureEvent
78240 e.preventDefault();
78243 deltaMode: 0, // dummy values to ignore in zoomPan
78244 deltaY: 1, // dummy values to ignore in zoomPan
78245 clientX: e.clientX,
78246 clientY: e.clientY,
78247 screenX: e.screenX,
78248 screenY: e.screenY,
78253 var e2 = new WheelEvent('wheel', props);
78254 e2._scale = e.scale; // preserve the original scale
78255 e2._rotation = e.rotation; // preserve the original rotation
78257 _selection.node().dispatchEvent(e2);
78261 function zoomPan(manualEvent) {
78262 var event$1 = (manualEvent || event);
78263 var source = event$1.sourceEvent;
78264 var eventTransform = event$1.transform;
78265 var x = eventTransform.x;
78266 var y = eventTransform.y;
78267 var k = eventTransform.k;
78269 if (_transformStart.x === x &&
78270 _transformStart.y === y &&
78271 _transformStart.k === k) {
78272 return; // no change
78275 // Special handling of 'wheel' events:
78276 // They might be triggered by the user scrolling the mouse wheel,
78277 // or 2-finger pinch/zoom gestures, the transform may need adjustment.
78278 if (source && source.type === 'wheel') {
78279 var detected = utilDetect();
78280 var dX = source.deltaX;
78281 var dY = source.deltaY;
78287 // Normalize mousewheel scroll speed (Firefox) - #3029
78288 // If wheel delta is provided in LINE units, recalculate it in PIXEL units
78289 // We are essentially redoing the calculations that occur here:
78290 // https://github.com/d3/d3-zoom/blob/78563a8348aa4133b07cac92e2595c2227ca7cd7/src/zoom.js#L203
78291 // See this for more info:
78292 // https://github.com/basilfx/normalize-wheel/blob/master/src/normalizeWheel.js
78293 if (source.deltaMode === 1 /* LINE */) {
78294 // Convert from lines to pixels, more if the user is scrolling fast.
78295 // (I made up the exp function to roughly match Firefox to what Chrome does)
78296 // These numbers should be floats, because integers are treated as pan gesture below.
78297 var lines = Math.abs(source.deltaY);
78298 var sign = (source.deltaY > 0) ? 1 : -1;
78300 Math.exp((lines - 1) * 0.75) * 4.000244140625,
78301 4.000244140625, // min
78302 350.000244140625 // max
78305 // On Firefox Windows and Linux we always get +/- the scroll line amount (default 3)
78306 // There doesn't seem to be any scroll accelleration.
78307 // This multiplier increases the speed a little bit - #5512
78308 if (detected.os !== 'mac') {
78312 // recalculate x2,y2,k2
78313 t0 = _isTransformed ? _transformLast : _transformStart;
78314 p0 = _getMouseCoords(source);
78315 p1 = t0.invert(p0);
78316 k2 = t0.k * Math.pow(2, -dY / 500);
78317 x2 = p0[0] - p1[0] * k2;
78318 y2 = p0[1] - p1[1] * k2;
78320 // 2 finger map pinch zooming (Safari) - #5492
78321 // These are fake `wheel` events we made from Safari `gesturechange` events..
78322 } else if (source._scale) {
78323 // recalculate x2,y2,k2
78324 t0 = _gestureTransformStart;
78325 p0 = _getMouseCoords(source);
78326 p1 = t0.invert(p0);
78327 k2 = t0.k * source._scale;
78328 x2 = p0[0] - p1[0] * k2;
78329 y2 = p0[1] - p1[1] * k2;
78331 // 2 finger map pinch zooming (all browsers except Safari) - #5492
78332 // Pinch zooming via the `wheel` event will always have:
78333 // - `ctrlKey = true`
78334 // - `deltaY` is not round integer pixels (ignore `deltaX`)
78335 } else if (source.ctrlKey && !isInteger(dY)) {
78336 dY *= 6; // slightly scale up whatever the browser gave us
78338 // recalculate x2,y2,k2
78339 t0 = _isTransformed ? _transformLast : _transformStart;
78340 p0 = _getMouseCoords(source);
78341 p1 = t0.invert(p0);
78342 k2 = t0.k * Math.pow(2, -dY / 500);
78343 x2 = p0[0] - p1[0] * k2;
78344 y2 = p0[1] - p1[1] * k2;
78346 // Trackpad scroll zooming with shift or alt/option key down
78347 } else if ((source.altKey || source.shiftKey) && isInteger(dY)) {
78348 // recalculate x2,y2,k2
78349 t0 = _isTransformed ? _transformLast : _transformStart;
78350 p0 = _getMouseCoords(source);
78351 p1 = t0.invert(p0);
78352 k2 = t0.k * Math.pow(2, -dY / 500);
78353 x2 = p0[0] - p1[0] * k2;
78354 y2 = p0[1] - p1[1] * k2;
78356 // 2 finger map panning (Mac only, all browsers) - #5492, #5512
78357 // Panning via the `wheel` event will always have:
78358 // - `ctrlKey = false`
78359 // - `deltaX`,`deltaY` are round integer pixels
78360 } else if (detected.os === 'mac' && !source.ctrlKey && isInteger(dX) && isInteger(dY)) {
78361 p1 = projection.translate();
78364 k2 = projection.scale();
78367 // something changed - replace the event transform
78368 if (x2 !== x || y2 !== y || k2 !== k) {
78372 eventTransform = identity$8.translate(x2, y2).scale(k2);
78373 _selection.node().__zoom = eventTransform;
78378 if (geoScaleToZoom(k, TILESIZE) < _minzoom) {
78379 surface.interrupt();
78380 uiFlash().text(t('cannot_zoom'))();
78381 setCenterZoom(map.center(), context.minEditableZoom(), 0, true);
78383 dispatch$1.call('move', this, map);
78387 projection.transform(eventTransform);
78389 var scale = k / _transformStart.k;
78390 var tX = (x / scale - _transformStart.x) * scale;
78391 var tY = (y / scale - _transformStart.y) * scale;
78393 if (context.inIntro()) {
78394 curtainProjection.transform({
78402 _mouseEvent = event$1;
78404 _isTransformed = true;
78405 _transformLast = eventTransform;
78406 utilSetTransform(supersurface, tX, tY, scale);
78409 dispatch$1.call('move', this, map);
78412 function isInteger(val) {
78413 return typeof val === 'number' && isFinite(val) && Math.floor(val) === val;
78418 function resetTransform() {
78419 if (!_isTransformed) return false;
78421 // deprecation warning - Radial Menu to be removed in iD v3
78422 surface.selectAll('.edit-menu, .radial-menu').interrupt().remove();
78423 utilSetTransform(supersurface, 0, 0);
78424 _isTransformed = false;
78425 if (context.inIntro()) {
78426 curtainProjection.transform(projection.transform());
78432 function redraw(difference, extent) {
78433 if (surface.empty() || !_redrawEnabled) return;
78435 // If we are in the middle of a zoom/pan, we can't do differenced redraws.
78436 // It would result in artifacts where differenced entities are redrawn with
78437 // one transform and unchanged entities with another.
78438 if (resetTransform()) {
78439 difference = extent = undefined;
78442 var zoom = map.zoom();
78443 var z = String(~~zoom);
78445 if (surface.attr('data-zoom') !== z) {
78446 surface.attr('data-zoom', z);
78449 // class surface as `lowzoom` around z17-z18.5 (based on latitude)
78450 var lat = map.center()[1];
78451 var lowzoom = linear$2()
78452 .domain([-60, 0, 60])
78453 .range([17, 18.5, 17])
78457 .classed('low-zoom', zoom <= lowzoom(lat));
78461 supersurface.call(context.background());
78462 wrapper.call(drawLayers);
78466 if (map.editable()) {
78467 context.loadTiles(projection);
78468 drawEditable(difference, extent);
78473 _transformStart = projection.transform();
78480 var immediateRedraw = function(difference, extent) {
78481 if (!difference && !extent) cancelPendingRedraw();
78482 redraw(difference, extent);
78486 map.mouse = function() {
78487 var event$1 = _mouseEvent || event;
78490 while ((s = event$1.sourceEvent)) { event$1 = s; }
78491 return _getMouseCoords(event$1);
78498 map.mouseCoordinates = function() {
78499 var coord = map.mouse() || pxCenter();
78500 return projection.invert(coord);
78504 map.dblclickEnable = function(val) {
78505 if (!arguments.length) return _dblClickEnabled;
78506 _dblClickEnabled = val;
78511 map.redrawEnable = function(val) {
78512 if (!arguments.length) return _redrawEnabled;
78513 _redrawEnabled = val;
78518 map.isTransformed = function() {
78519 return _isTransformed;
78523 function setTransform(t2, duration, force) {
78524 var t = projection.transform();
78525 if (!force && t2.k === t.k && t2.x === t.x && t2.y === t.y) return false;
78530 .duration(duration)
78531 .on('start', function() { map.startEase(); })
78532 .call(zoom.transform, identity$8.translate(t2.x, t2.y).scale(t2.k));
78534 projection.transform(t2);
78535 _transformStart = t2;
78536 _selection.call(zoom.transform, _transformStart);
78543 function setCenterZoom(loc2, z2, duration, force) {
78544 var c = map.center();
78545 var z = map.zoom();
78546 if (loc2[0] === c[0] && loc2[1] === c[1] && z2 === z && !force) return false;
78548 var proj = geoRawMercator().transform(projection.transform()); // copy projection
78550 var k2 = clamp(geoZoomToScale(z2, TILESIZE), kMin, kMax);
78553 var t = proj.translate();
78554 var point = proj(loc2);
78556 var center = pxCenter();
78557 t[0] += center[0] - point[0];
78558 t[1] += center[1] - point[1];
78560 return setTransform(identity$8.translate(t[0], t[1]).scale(k2), duration, force);
78564 map.pan = function(delta, duration) {
78565 var t = projection.translate();
78566 var k = projection.scale();
78574 .duration(duration)
78575 .on('start', function() { map.startEase(); })
78576 .call(zoom.transform, identity$8.translate(t[0], t[1]).scale(k));
78578 projection.translate(t);
78579 _transformStart = projection.transform();
78580 _selection.call(zoom.transform, _transformStart);
78581 dispatch$1.call('move', this, map);
78589 map.dimensions = function(val) {
78590 if (!arguments.length) return _dimensions;
78593 drawLayers.dimensions(_dimensions);
78594 context.background().dimensions(_dimensions);
78595 projection.clipExtent([[0, 0], _dimensions]);
78596 _getMouseCoords = utilFastMouse(supersurface.node());
78603 function zoomIn(delta) {
78604 setCenterZoom(map.center(), ~~map.zoom() + delta, 250, true);
78607 function zoomOut(delta) {
78608 setCenterZoom(map.center(), ~~map.zoom() - delta, 250, true);
78611 map.zoomIn = function() { zoomIn(1); };
78612 map.zoomInFurther = function() { zoomIn(4); };
78614 map.zoomOut = function() { zoomOut(1); };
78615 map.zoomOutFurther = function() { zoomOut(4); };
78618 map.center = function(loc2) {
78619 if (!arguments.length) {
78620 return projection.invert(pxCenter());
78623 if (setCenterZoom(loc2, map.zoom())) {
78624 dispatch$1.call('move', this, map);
78631 map.unobscuredCenterZoomEase = function(loc, zoom) {
78632 var offset = map.unobscuredOffsetPx();
78634 var proj = geoRawMercator().transform(projection.transform()); // copy projection
78635 // use the target zoom to calculate the offset center
78636 proj.scale(geoZoomToScale(zoom, TILESIZE));
78638 var locPx = proj(loc);
78639 var offsetLocPx = [locPx[0] + offset[0], locPx[1] + offset[1]];
78640 var offsetLoc = proj.invert(offsetLocPx);
78642 map.centerZoomEase(offsetLoc, zoom);
78645 map.unobscuredOffsetPx = function() {
78646 var openPane = d3_select('.map-panes .map-pane.shown');
78647 if (!openPane.empty()) {
78648 return [openPane.node().offsetWidth/2, 0];
78653 map.zoom = function(z2) {
78654 if (!arguments.length) {
78655 return Math.max(geoScaleToZoom(projection.scale(), TILESIZE), 0);
78658 if (z2 < _minzoom) {
78659 surface.interrupt();
78660 uiFlash().text(t('cannot_zoom'))();
78661 z2 = context.minEditableZoom();
78664 if (setCenterZoom(map.center(), z2)) {
78665 dispatch$1.call('move', this, map);
78673 map.centerZoom = function(loc2, z2) {
78674 if (setCenterZoom(loc2, z2)) {
78675 dispatch$1.call('move', this, map);
78683 map.zoomTo = function(entity) {
78684 var extent = entity.extent(context.graph());
78685 if (!isFinite(extent.area())) return map;
78687 var z2 = clamp(map.trimmedExtentZoom(extent), context.minEditableZoom(), 20);
78688 return map.centerZoom(extent.center(), z2);
78692 map.centerEase = function(loc2, duration) {
78693 duration = duration || 250;
78694 setCenterZoom(loc2, map.zoom(), duration);
78699 map.zoomEase = function(z2, duration) {
78700 duration = duration || 250;
78701 setCenterZoom(map.center(), z2, duration, false);
78706 map.centerZoomEase = function(loc2, z2, duration) {
78707 duration = duration || 250;
78708 setCenterZoom(loc2, z2, duration, false);
78713 map.transformEase = function(t2, duration) {
78714 duration = duration || 250;
78715 setTransform(t2, duration, false);
78720 map.zoomToEase = function(entity, duration) {
78721 var extent = entity.extent(context.graph());
78722 if (!isFinite(extent.area())) return map;
78724 var z2 = clamp(map.trimmedExtentZoom(extent), context.minEditableZoom(), 20);
78725 return map.centerZoomEase(extent.center(), z2, duration);
78729 map.startEase = function() {
78730 utilBindOnce(surface, 'mousedown.ease', function() {
78737 map.cancelEase = function() {
78738 _selection.interrupt();
78743 map.extent = function(val) {
78744 if (!arguments.length) {
78745 return new geoExtent(
78746 projection.invert([0, _dimensions[1]]),
78747 projection.invert([_dimensions[0], 0])
78750 var extent = geoExtent(val);
78751 map.centerZoom(extent.center(), map.extentZoom(extent));
78756 map.trimmedExtent = function(val) {
78757 if (!arguments.length) {
78761 return new geoExtent(
78762 projection.invert([pad, _dimensions[1] - footerY - pad]),
78763 projection.invert([_dimensions[0] - pad, headerY + pad])
78766 var extent = geoExtent(val);
78767 map.centerZoom(extent.center(), map.trimmedExtentZoom(extent));
78772 function calcExtentZoom(extent, dim) {
78773 var tl = projection([extent[0][0], extent[1][1]]);
78774 var br = projection([extent[1][0], extent[0][1]]);
78776 // Calculate maximum zoom that fits extent
78777 var hFactor = (br[0] - tl[0]) / dim[0];
78778 var vFactor = (br[1] - tl[1]) / dim[1];
78779 var hZoomDiff = Math.log(Math.abs(hFactor)) / Math.LN2;
78780 var vZoomDiff = Math.log(Math.abs(vFactor)) / Math.LN2;
78781 var newZoom = map.zoom() - Math.max(hZoomDiff, vZoomDiff);
78787 map.extentZoom = function(val) {
78788 return calcExtentZoom(geoExtent(val), _dimensions);
78792 map.trimmedExtentZoom = function(val) {
78795 var trimmed = [_dimensions[0] - trimX, _dimensions[1] - trimY];
78796 return calcExtentZoom(geoExtent(val), trimmed);
78800 map.editable = function() {
78801 var layer = context.layers().layer('osm');
78802 if (!layer || !layer.enabled()) return false;
78804 return map.zoom() >= context.minEditableZoom();
78808 map.notesEditable = function() {
78809 var layer = context.layers().layer('notes');
78810 if (!layer || !layer.enabled()) return false;
78812 return map.zoom() >= context.minEditableZoom();
78816 map.minzoom = function(val) {
78817 if (!arguments.length) return _minzoom;
78823 map.layers = drawLayers;
78826 return utilRebind(map, dispatch$1, 'on');
78829 function rendererPhotos(context) {
78830 var dispatch$1 = dispatch('change');
78831 var _layerIDs = ['streetside', 'mapillary', 'mapillary-signs', 'openstreetcam'];
78832 var _allPhotoTypes = ['flat', 'panoramic'];
78833 var _shownPhotoTypes = _allPhotoTypes.slice(); // shallow copy
78835 function photos() {}
78837 function updateStorage() {
78838 if (window.mocha) return;
78840 var q = utilStringQs(window.location.hash.substring(1));
78841 var enabled = context.layers().all().filter(function(d) {
78842 return _layerIDs.indexOf(d.id) !== -1 && d.layer && d.layer.supported() && d.layer.enabled();
78843 }).map(function(d) {
78846 if (enabled.length) {
78847 q.photo_overlay = enabled.join(',');
78849 delete q.photo_overlay;
78851 window.location.replace('#' + utilQsString(q, true));
78854 photos.overlayLayerIDs = function() {
78858 photos.allPhotoTypes = function() {
78859 return _allPhotoTypes;
78862 function showsLayer(id) {
78863 var layer = context.layers().layer(id);
78864 return layer && layer.supported() && layer.enabled();
78867 photos.shouldFilterByPhotoType = function() {
78868 return showsLayer('mapillary') ||
78869 (showsLayer('streetside') && showsLayer('openstreetcam'));
78872 photos.showsPhotoType = function(val) {
78873 if (!photos.shouldFilterByPhotoType()) return true;
78875 return _shownPhotoTypes.indexOf(val) !== -1;
78878 photos.showsFlat = function() {
78879 return photos.showsPhotoType('flat');
78882 photos.showsPanoramic = function() {
78883 return photos.showsPhotoType('panoramic');
78886 photos.togglePhotoType = function(val) {
78887 var index = _shownPhotoTypes.indexOf(val);
78888 if (index !== -1) {
78889 _shownPhotoTypes.splice(index, 1);
78891 _shownPhotoTypes.push(val);
78893 dispatch$1.call('change', this);
78897 photos.init = function() {
78898 var q = utilStringQs(window.location.hash.substring(1));
78899 if (q.photo_overlay) {
78900 var hashOverlayIDs = q.photo_overlay.replace(/;/g, ',').split(',');
78901 hashOverlayIDs.forEach(function(id) {
78902 var layer = context.layers().layer(id);
78903 if (layer) layer.enabled(true);
78907 context.layers().on('change.rendererPhotos', updateStorage);
78910 return utilRebind(photos, dispatch$1, 'on');
78913 function uiAccount(context) {
78914 var osm = context.connection();
78917 function update(selection) {
78920 if (!osm.authenticated()) {
78921 selection.selectAll('#userLink, #logoutLink')
78922 .classed('hide', true);
78926 osm.userDetails(function(err, details) {
78927 var userLink = selection.select('#userLink'),
78928 logoutLink = selection.select('#logoutLink');
78931 logoutLink.html('');
78935 selection.selectAll('#userLink, #logoutLink')
78936 .classed('hide', false);
78939 userLink.append('a')
78940 .attr('href', osm.userURL(details.display_name))
78941 .attr('target', '_blank');
78943 // Add thumbnail or dont
78944 if (details.image_url) {
78945 userLink.append('img')
78946 .attr('class', 'icon pre-text user-icon')
78947 .attr('src', details.image_url);
78950 .call(svgIcon('#iD-icon-avatar', 'pre-text light'));
78954 userLink.append('span')
78955 .attr('class', 'label')
78956 .text(details.display_name);
78958 logoutLink.append('a')
78959 .attr('class', 'logout')
78962 .on('click.logout', function() {
78963 event.preventDefault();
78970 return function(selection) {
78971 selection.append('li')
78972 .attr('id', 'logoutLink')
78973 .classed('hide', true);
78975 selection.append('li')
78976 .attr('id', 'userLink')
78977 .classed('hide', true);
78980 osm.on('change.account', function() { update(selection); });
78986 function uiAttribution(context) {
78990 function attribution(data, klass) {
78991 var div = selection.selectAll('.' + klass)
78996 .attr('class', klass)
79000 var background = div.selectAll('.attribution')
79001 .data(data, function(d) { return d.name(); });
79006 background = background.enter()
79008 .attr('class', 'attribution')
79009 .each(function(d) {
79010 if (d.terms_html) {
79012 .html(d.terms_html);
79018 selection = d3_select(this)
79020 .attr('href', d.terms_url)
79021 .attr('target', '_blank');
79023 selection = d3_select(this);
79027 var id_safe = d.id.replace(/\./g, '<TX_DOT>');
79028 var terms_text = t('imagery.' + id_safe + '.attribution.text',
79029 { default: d.terms_text || d.id || d.name() }
79032 if (d.icon && !d.overlay) {
79035 .attr('class', 'source-image')
79036 .attr('src', d.icon);
79041 .attr('class', 'attribution-text')
79044 .merge(background);
79047 var copyright = background.selectAll('.copyright-notice')
79048 .data(function(d) {
79049 var notice = d.copyrightNotices(context.map().zoom(), context.map().extent());
79050 return notice ? [notice] : [];
79056 copyright = copyright.enter()
79058 .attr('class', 'copyright-notice')
79066 function update() {
79067 attribution([context.background().baseLayerSource()], 'base-layer-attribution');
79068 attribution(context.background().overlayLayerSources().filter(function (s) {
79069 return s.validZoom(context.map().zoom());
79070 }), 'overlay-layer-attribution');
79074 return function(select) {
79075 selection = select;
79077 context.background()
79078 .on('change.attribution', update);
79081 .on('move.attribution', throttle(update, 400, {leading: false}));
79087 function uiBackgroundDisplayOptions(context) {
79088 var detected = utilDetect();
79089 var storedOpacity = context.storage('background-opacity');
79091 var maxVal = detected.cssfilters ? 2 : 1;
79093 var sliders = detected.cssfilters
79094 ? ['brightness', 'contrast', 'saturation', 'sharpness']
79098 brightness: (storedOpacity !== null ? (+storedOpacity) : 1),
79104 var _selection = d3_select(null);
79107 function clamp(x, min, max) {
79108 return Math.max(min, Math.min(x, max));
79112 function updateValue(d, val) {
79113 if (!val && event && event.target) {
79114 val = event.target.value;
79117 val = clamp(val, minVal, maxVal);
79120 context.background()[d](val);
79122 if (d === 'brightness') {
79123 context.storage('background-opacity', val);
79131 function render(selection) {
79132 var container = selection.selectAll('.display-options-container')
79135 var containerEnter = container.enter()
79137 .attr('class', 'display-options-container controls-list');
79139 // add slider controls
79140 var slidersEnter = containerEnter.selectAll('.display-control')
79144 .attr('class', function(d) { return 'display-control display-control-' + d; });
79148 .text(function(d) { return t('background.' + d); })
79150 .attr('class', function(d) { return 'display-option-value display-option-value-' + d; });
79154 .attr('class', function(d) { return 'display-option-input display-option-input-' + d; })
79155 .attr('type', 'range')
79156 .attr('min', minVal)
79157 .attr('max', maxVal)
79158 .attr('step', '0.05')
79159 .on('input', function(d) {
79160 var val = d3_select(this).property('value');
79161 updateValue(d, val);
79166 .attr('title', t('background.reset'))
79167 .attr('class', function(d) { return 'display-option-reset display-option-reset-' + d; })
79168 .on('click', function(d) {
79169 if (event.button !== 0) return;
79172 .call(svgIcon('#iD-icon-' + (textDirection === 'rtl' ? 'redo' : 'undo')));
79174 // reset all button
79177 .attr('class', 'display-option-resetlink')
79179 .text(t('background.reset_all'))
79180 .on('click', function() {
79181 for (var i = 0; i < sliders.length; i++) {
79182 updateValue(sliders[i],1);
79187 container = containerEnter
79190 container.selectAll('.display-option-input')
79191 .property('value', function(d) { return _options[d]; });
79193 container.selectAll('.display-option-value')
79194 .text(function(d) { return Math.floor(_options[d] * 100) + '%'; });
79196 container.selectAll('.display-option-reset')
79197 .classed('disabled', function(d) { return _options[d] === 1; });
79199 // first time only, set brightness if needed
79200 if (containerEnter.size() && _options.brightness !== 1) {
79201 context.background().brightness(_options.brightness);
79206 function backgroundDisplayOptions(selection) {
79207 _selection = selection;
79210 .call(uiDisclosure(context, 'background_display_options', true)
79211 .title(t('background.display_options'))
79217 return backgroundDisplayOptions;
79220 function uiBackgroundOffset(context) {
79222 ['right', [0.5, 0]],
79223 ['top', [0, -0.5]],
79224 ['left', [-0.5, 0]],
79225 ['bottom', [0, 0.5]]
79229 function d3_eventCancel() {
79230 event.stopPropagation();
79231 event.preventDefault();
79235 function updateValue() {
79236 var meters = geoOffsetToMeters(context.background().offset());
79237 var x = +meters[0].toFixed(2);
79238 var y = +meters[1].toFixed(2);
79240 d3_selectAll('.nudge-inner-rect')
79242 .classed('error', false)
79243 .property('value', x + ', ' + y);
79245 d3_selectAll('.nudge-reset')
79246 .classed('disabled', function() {
79247 return (x === 0 && y === 0);
79252 function resetOffset() {
79253 context.background().offset([0, 0]);
79258 function nudge(d) {
79259 context.background().nudge(d, context.map().zoom());
79264 function clickNudgeButton(d) {
79266 var timeout = window.setTimeout(function() {
79267 interval = window.setInterval(nudge.bind(null, d), 100);
79270 function doneNudge() {
79271 window.clearTimeout(timeout);
79272 window.clearInterval(interval);
79274 .on('mouseup.buttonoffset', null, true)
79275 .on('mousedown.buttonoffset', null, true);
79279 .on('mouseup.buttonoffset', doneNudge, true)
79280 .on('mousedown.buttonoffset', doneNudge, true);
79286 function inputOffset() {
79287 var input = d3_select(this);
79288 var d = input.node().value;
79290 if (d === '') return resetOffset();
79292 d = d.replace(/;/g, ',').split(',').map(function(n) {
79293 // if n is NaN, it will always get mapped to false.
79294 return !isNaN(n) && n;
79297 if (d.length !== 2 || !d[0] || !d[1]) {
79298 input.classed('error', true);
79302 context.background().offset(geoMetersToOffset(d));
79307 function dragOffset() {
79308 event.preventDefault();
79309 if (event.button !== 0) return;
79311 var origin = [event.clientX, event.clientY];
79313 context.container()
79315 .attr('class', 'nudge-surface');
79318 .on('mousemove.offset', function() {
79319 var latest = [event.clientX, event.clientY];
79321 -(origin[0] - latest[0]) / 4,
79322 -(origin[1] - latest[1]) / 4
79328 .on('mouseup.offset', function() {
79329 if (event.button !== 0) return;
79330 d3_selectAll('.nudge-surface')
79334 .on('mousemove.offset', null)
79335 .on('mouseup.offset', null);
79340 function render(selection) {
79341 var container = selection.selectAll('.nudge-container')
79344 var containerEnter = container.enter()
79346 .attr('class', 'nudge-container cf');
79350 .attr('class', 'nudge-instructions')
79351 .text(t('background.offset'));
79353 var nudgeEnter = containerEnter
79355 .attr('class', 'nudge-outer-rect')
79356 .on('mousedown', dragOffset);
79360 .attr('class', 'nudge-inner-rect')
79362 .on('change', inputOffset);
79366 .selectAll('button')
79367 .data(directions).enter()
79369 .attr('class', function(d) { return d[0] + ' nudge'; })
79370 .on('contextmenu', d3_eventCancel)
79371 .on('mousedown', function(d) {
79372 if (event.button !== 0) return;
79373 clickNudgeButton(d[1]);
79378 .attr('title', t('background.reset'))
79379 .attr('class', 'nudge-reset disabled')
79380 .on('contextmenu', d3_eventCancel)
79381 .on('click', function() {
79382 if (event.button !== 0) return;
79385 .call(svgIcon('#iD-icon-' + (textDirection === 'rtl' ? 'redo' : 'undo')));
79391 function backgroundOffset(selection) {
79393 .call(uiDisclosure(context, 'background_offset', false)
79394 .title(t('background.fix_misalignment'))
79400 context.background()
79401 .on('change.backgroundOffset-update', updateValue);
79403 return backgroundOffset;
79406 // import { utilGetDimensions } from '../util/dimensions';
79409 function uiMapInMap(context) {
79411 function mapInMap(selection) {
79412 var backgroundLayer = rendererTileLayer(context);
79413 var overlayLayers = {};
79414 var projection = geoRawMercator();
79415 var dataLayer = svgData(projection, context).showLabels(false);
79416 var debugLayer = svgDebug(projection, context);
79417 var zoom = d3_zoom()
79418 .scaleExtent([geoZoomToScale(0.5), geoZoomToScale(24)])
79419 .on('start', zoomStarted)
79420 .on('zoom', zoomed)
79421 .on('end', zoomEnded);
79423 var wrap = d3_select(null);
79424 var tiles = d3_select(null);
79425 var viewport = d3_select(null);
79427 var _isTransformed = false;
79428 var _isHidden = true;
79429 var _skipEvents = false;
79430 var _gesture = null;
79431 var _zDiff = 6; // by default, minimap renders at (main zoom - 6)
79432 var _dMini; // dimensions of minimap
79433 var _cMini; // center pixel of minimap
79434 var _tStart; // transform at start of gesture
79435 var _tCurr; // transform at most recent event
79439 function zoomStarted() {
79440 if (_skipEvents) return;
79441 _tStart = _tCurr = projection.transform();
79446 function zoomed() {
79447 if (_skipEvents) return;
79449 var x = event.transform.x;
79450 var y = event.transform.y;
79451 var k = event.transform.k;
79452 var isZooming = (k !== _tStart.k);
79453 var isPanning = (x !== _tStart.x || y !== _tStart.y);
79455 if (!isZooming && !isPanning) {
79456 return; // no change
79459 // lock in either zooming or panning, don't allow both in minimap.
79461 _gesture = isZooming ? 'zoom' : 'pan';
79464 var tMini = projection.transform();
79467 if (_gesture === 'zoom') {
79468 scale = k / tMini.k;
79469 tX = (_cMini[0] / scale - _cMini[0]) * scale;
79470 tY = (_cMini[1] / scale - _cMini[1]) * scale;
79478 utilSetTransform(tiles, tX, tY, scale);
79479 utilSetTransform(viewport, 0, 0, scale);
79480 _isTransformed = true;
79481 _tCurr = identity$8.translate(x, y).scale(k);
79483 var zMain = geoScaleToZoom(context.projection.scale());
79484 var zMini = geoScaleToZoom(k);
79486 _zDiff = zMain - zMini;
79492 function zoomEnded() {
79493 if (_skipEvents) return;
79494 if (_gesture !== 'pan') return;
79496 updateProjection();
79498 context.map().center(projection.invert(_cMini)); // recenter main map..
79502 function updateProjection() {
79503 var loc = context.map().center();
79504 var tMain = context.projection.transform();
79505 var zMain = geoScaleToZoom(tMain.k);
79506 var zMini = Math.max(zMain - _zDiff, 0.5);
79507 var kMini = geoZoomToScale(zMini);
79510 .translate([tMain.x, tMain.y])
79513 var point = projection(loc);
79514 var mouse = (_gesture === 'pan') ? geoVecSubtract([_tCurr.x, _tCurr.y], [_tStart.x, _tStart.y]) : [0, 0];
79515 var xMini = _cMini[0] - point[0] + tMain.x + mouse[0];
79516 var yMini = _cMini[1] - point[1] + tMain.y + mouse[1];
79519 .translate([xMini, yMini])
79520 .clipExtent([[0, 0], _dMini]);
79522 _tCurr = projection.transform();
79524 if (_isTransformed) {
79525 utilSetTransform(tiles, 0, 0);
79526 utilSetTransform(viewport, 0, 0);
79527 _isTransformed = false;
79531 .scaleExtent([geoZoomToScale(0.5), geoZoomToScale(zMain - 3)]);
79533 _skipEvents = true;
79534 wrap.call(zoom.transform, _tCurr);
79535 _skipEvents = false;
79539 function redraw() {
79540 clearTimeout(_timeoutID);
79541 if (_isHidden) return;
79543 updateProjection();
79544 var zMini = geoScaleToZoom(projection.scale());
79546 // setup tile container
79548 .selectAll('.map-in-map-tiles')
79551 tiles = tiles.enter()
79553 .attr('class', 'map-in-map-tiles')
79556 // redraw background
79558 .source(context.background().baseLayerSource())
79559 .projection(projection)
79560 .dimensions(_dMini);
79562 var background = tiles
79563 .selectAll('.map-in-map-background')
79568 .attr('class', 'map-in-map-background')
79570 .call(backgroundLayer);
79574 var overlaySources = context.background().overlayLayerSources();
79575 var activeOverlayLayers = [];
79576 for (var i = 0; i < overlaySources.length; i++) {
79577 if (overlaySources[i].validZoom(zMini)) {
79578 if (!overlayLayers[i]) overlayLayers[i] = rendererTileLayer(context);
79579 activeOverlayLayers.push(overlayLayers[i]
79580 .source(overlaySources[i])
79581 .projection(projection)
79582 .dimensions(_dMini));
79586 var overlay = tiles
79587 .selectAll('.map-in-map-overlay')
79590 overlay = overlay.enter()
79592 .attr('class', 'map-in-map-overlay')
79596 var overlays = overlay
79598 .data(activeOverlayLayers, function(d) { return d.source().name(); });
79603 overlays = overlays.enter()
79606 .each(function(layer) { d3_select(this).call(layer); });
79609 var dataLayers = tiles
79610 .selectAll('.map-in-map-data')
79616 dataLayers = dataLayers.enter()
79618 .attr('class', 'map-in-map-data')
79624 // redraw viewport bounding box
79625 if (_gesture !== 'pan') {
79626 var getPath = d3_geoPath(projection);
79627 var bbox = { type: 'Polygon', coordinates: [context.map().extent().polygon()] };
79629 viewport = wrap.selectAll('.map-in-map-viewport')
79632 viewport = viewport.enter()
79634 .attr('class', 'map-in-map-viewport')
79638 var path = viewport.selectAll('.map-in-map-bbox')
79643 .attr('class', 'map-in-map-bbox')
79645 .attr('d', getPath)
79646 .classed('thick', function(d) { return getPath.area(d) < 30; });
79651 function queueRedraw() {
79652 clearTimeout(_timeoutID);
79653 _timeoutID = setTimeout(function() { redraw(); }, 750);
79657 function toggle() {
79658 if (event) event.preventDefault();
79660 _isHidden = !_isHidden;
79662 d3_select('.minimap-toggle-item')
79663 .classed('active', !_isHidden)
79665 .property('checked', !_isHidden);
79669 .style('display', 'block')
79670 .style('opacity', '1')
79673 .style('opacity', '0')
79674 .on('end', function() {
79675 selection.selectAll('.map-in-map')
79676 .style('display', 'none');
79680 .style('display', 'block')
79681 .style('opacity', '0')
79684 .style('opacity', '1')
79685 .on('end', function() {
79692 uiMapInMap.toggle = toggle;
79694 wrap = selection.selectAll('.map-in-map')
79697 wrap = wrap.enter()
79699 .attr('class', 'map-in-map')
79700 .style('display', (_isHidden ? 'none' : 'block'))
79702 .on('dblclick.zoom', null)
79705 // reflow warning: Hardcode dimensions - currently can't resize it anyway..
79706 _dMini = [200,150]; //utilGetDimensions(wrap);
79707 _cMini = geoVecScale(_dMini, 0.5);
79710 .on('drawn.map-in-map', function(drawn) {
79711 if (drawn.full === true) {
79718 context.keybinding()
79719 .on(t('background.minimap.key'), toggle);
79725 function uiConfirm(selection) {
79726 var modalSelection = uiModal(selection);
79728 modalSelection.select('.modal')
79729 .classed('modal-alert', true);
79731 var section = modalSelection.select('.content');
79733 section.append('div')
79734 .attr('class', 'modal-section header');
79736 section.append('div')
79737 .attr('class', 'modal-section message-text');
79739 var buttons = section.append('div')
79740 .attr('class', 'modal-section buttons cf');
79743 modalSelection.okButton = function() {
79746 .attr('class', 'button ok-button action')
79747 .on('click.confirm', function() {
79748 modalSelection.remove();
79750 .text(t('confirm.okay'))
79754 return modalSelection;
79758 return modalSelection;
79761 function uiSettingsCustomBackground(context) {
79762 var dispatch$1 = dispatch('change');
79764 function render(selection) {
79765 // keep separate copies of original and current settings
79766 var _origSettings = {
79767 template: context.storage('background-custom-template')
79769 var _currSettings = {
79770 template: context.storage('background-custom-template')
79773 var example = 'https://{switch:a,b,c}.tile.openstreetmap.org/{zoom}/{x}/{y}.png';
79774 var modal = uiConfirm(selection).okButton();
79777 .classed('settings-modal settings-custom-background', true);
79779 modal.select('.modal-section.header')
79781 .text(t('settings.custom_background.header'));
79784 var textSection = modal.select('.modal-section.message-text');
79788 .attr('class', 'instructions-template')
79789 .text(t('settings.custom_background.instructions', { example: example }));
79792 .append('textarea')
79793 .attr('class', 'field-template')
79794 .attr('placeholder', t('settings.custom_background.template.placeholder'))
79796 .property('value', _currSettings.template);
79799 // insert a cancel button
79800 var buttonSection = modal.select('.modal-section.buttons');
79803 .insert('button', '.ok-button')
79804 .attr('class', 'button cancel-button secondary-action')
79805 .text(t('confirm.cancel'));
79808 buttonSection.select('.cancel-button')
79809 .on('click.cancel', clickCancel);
79811 buttonSection.select('.ok-button')
79812 .attr('disabled', isSaveDisabled)
79813 .on('click.save', clickSave);
79816 function isSaveDisabled() {
79821 // restore the original template
79822 function clickCancel() {
79823 textSection.select('.field-template').property('value', _origSettings.template);
79824 context.storage('background-custom-template', _origSettings.template);
79829 // accept the current template
79830 function clickSave() {
79831 _currSettings.template = textSection.select('.field-template').property('value');
79832 context.storage('background-custom-template', _currSettings.template);
79835 dispatch$1.call('change', this, _currSettings);
79839 return utilRebind(render, dispatch$1, 'on');
79842 function uiBackground(context) {
79843 var key = t('background.key');
79845 var _pane = d3_select(null), _toggleButton = d3_select(null);
79847 var _customSource = context.background().findSource('custom');
79848 var _previousBackground = context.background().findSource(context.storage('background-last-used-toggle'));
79850 var _backgroundList = d3_select(null);
79851 var _overlayList = d3_select(null);
79852 var _displayOptionsContainer = d3_select(null);
79853 var _offsetContainer = d3_select(null);
79855 var backgroundDisplayOptions = uiBackgroundDisplayOptions(context);
79856 var backgroundOffset = uiBackgroundOffset(context);
79858 var settingsCustomBackground = uiSettingsCustomBackground(context)
79859 .on('change', customChanged);
79862 function setTooltips(selection) {
79863 selection.each(function(d, i, nodes) {
79864 var item = d3_select(this).select('label');
79865 var span = item.select('span');
79866 var placement = (i < nodes.length / 2) ? 'bottom' : 'top';
79867 var description = d.description();
79868 var isOverflowing = (span.property('clientWidth') !== span.property('scrollWidth'));
79870 item.call(tooltip().destroyAny);
79872 if (d === _previousBackground) {
79873 item.call(tooltip()
79874 .placement(placement)
79876 .title(function() {
79877 var tip = '<div>' + t('background.switch') + '</div>';
79878 return uiTooltipHtml(tip, uiCmd('⌘' + key));
79881 } else if (description || isOverflowing) {
79882 item.call(tooltip()
79883 .placement(placement)
79884 .title(description || d.name())
79891 function updateLayerSelections(selection) {
79892 function active(d) {
79893 return context.background().showsLayer(d);
79896 selection.selectAll('li')
79897 .classed('active', active)
79898 .classed('switch', function(d) { return d === _previousBackground; })
79900 .selectAll('input')
79901 .property('checked', active);
79905 function chooseBackground(d) {
79906 if (d.id === 'custom' && !d.template()) {
79907 return editCustom();
79910 event.preventDefault();
79911 _previousBackground = context.background().baseLayerSource();
79912 context.storage('background-last-used-toggle', _previousBackground.id);
79913 context.storage('background-last-used', d.id);
79914 context.background().baseLayerSource(d);
79915 _backgroundList.call(updateLayerSelections);
79916 document.activeElement.blur();
79920 function customChanged(d) {
79921 if (d && d.template) {
79922 _customSource.template(d.template);
79923 chooseBackground(_customSource);
79925 _customSource.template('');
79926 chooseBackground(context.background().findSource('none'));
79931 function editCustom() {
79932 event.preventDefault();
79933 context.container()
79934 .call(settingsCustomBackground);
79938 function chooseOverlay(d) {
79939 event.preventDefault();
79940 context.background().toggleOverlayLayer(d);
79941 _overlayList.call(updateLayerSelections);
79942 document.activeElement.blur();
79946 function drawListItems(layerList, type, change, filter) {
79947 var sources = context.background()
79948 .sources(context.map().extent())
79951 var layerLinks = layerList.selectAll('li')
79952 .data(sources, function(d) { return d.name(); });
79957 var enter = layerLinks.enter()
79959 .classed('layer-custom', function(d) { return d.id === 'custom'; })
79960 .classed('best', function(d) { return d.best(); });
79962 enter.filter(function(d) { return d.id === 'custom'; })
79964 .attr('class', 'layer-browse')
79966 .title(t('settings.custom_background.tooltip'))
79967 .placement((textDirection === 'rtl') ? 'right' : 'left')
79969 .on('click', editCustom)
79970 .call(svgIcon('#iD-icon-more'));
79972 enter.filter(function(d) { return d.best(); })
79974 .attr('class', 'best')
79976 .title(t('background.best_imagery'))
79977 .placement((textDirection === 'rtl') ? 'right' : 'left')
79987 .attr('type', type)
79988 .attr('name', 'layers')
79989 .on('change', change);
79993 .text(function(d) { return d.name(); });
79996 layerList.selectAll('li')
79998 .style('display', layerList.selectAll('li').data().length > 0 ? 'block' : 'none');
80001 .call(updateLayerSelections);
80004 function sortSources(a, b) {
80005 return a.best() && !b.best() ? -1
80006 : b.best() && !a.best() ? 1
80007 : d3_descending(a.area(), b.area()) || d3_ascending(a.name(), b.name()) || 0;
80012 function renderBackgroundList(selection) {
80014 // the background list
80015 var container = selection.selectAll('.layer-background-list')
80018 _backgroundList = container.enter()
80020 .attr('class', 'layer-list layer-background-list')
80021 .attr('dir', 'auto')
80025 // add minimap toggle below list
80026 var minimapEnter = selection.selectAll('.minimap-toggle-list')
80030 .attr('class', 'layer-list minimap-toggle-list')
80032 .attr('class', 'minimap-toggle-item');
80034 var minimapLabelEnter = minimapEnter
80038 .title(uiTooltipHtml(t('background.minimap.tooltip'), t('background.minimap.key')))
80044 .attr('type', 'checkbox')
80045 .on('change', function() {
80046 event.preventDefault();
80047 uiMapInMap.toggle();
80052 .text(t('background.minimap.description'));
80055 // "Info / Report a Problem" link
80056 selection.selectAll('.imagery-faq')
80060 .attr('class', 'imagery-faq')
80062 .attr('target', '_blank')
80063 .attr('tabindex', -1)
80064 .call(svgIcon('#iD-icon-out-link', 'inline'))
80065 .attr('href', 'https://github.com/openstreetmap/iD/blob/master/FAQ.md#how-can-i-report-an-issue-with-background-imagery')
80067 .text(t('background.imagery_source_faq'));
80069 updateBackgroundList();
80073 function renderOverlayList(selection) {
80074 var container = selection.selectAll('.layer-overlay-list')
80077 _overlayList = container.enter()
80079 .attr('class', 'layer-list layer-overlay-list')
80080 .attr('dir', 'auto')
80083 updateOverlayList();
80086 function updateBackgroundList() {
80088 .call(drawListItems, 'radio', chooseBackground, function(d) { return !d.isHidden() && !d.overlay; });
80091 function updateOverlayList() {
80093 .call(drawListItems, 'checkbox', chooseOverlay, function(d) { return !d.isHidden() && d.overlay; });
80097 function update() {
80098 if (!_pane.select('.disclosure-wrap-background_list').classed('hide')) {
80099 updateBackgroundList();
80102 if (!_pane.select('.disclosure-wrap-overlay_list').classed('hide')) {
80103 updateOverlayList();
80106 _displayOptionsContainer
80107 .call(backgroundDisplayOptions);
80110 .call(backgroundOffset);
80114 function quickSwitch() {
80116 event.stopImmediatePropagation();
80117 event.preventDefault();
80119 if (_previousBackground) {
80120 chooseBackground(_previousBackground);
80124 var paneTooltip = tooltip()
80125 .placement((textDirection === 'rtl') ? 'right' : 'left')
80127 .title(uiTooltipHtml(t('background.description'), key));
80129 uiBackground.togglePane = function() {
80130 if (event) event.preventDefault();
80131 paneTooltip.hide(_toggleButton);
80132 context.ui().togglePanes(!_pane.classed('shown') ? _pane : undefined);
80135 function hidePane() {
80136 context.ui().togglePanes();
80139 uiBackground.renderToggleButton = function(selection) {
80141 _toggleButton = selection
80143 .attr('tabindex', -1)
80144 .on('click', uiBackground.togglePane)
80145 .call(svgIcon('#iD-icon-layers', 'light'))
80146 .call(paneTooltip);
80149 uiBackground.renderPane = function(selection) {
80153 .attr('class', 'fillL map-pane background-pane hide')
80154 .attr('pane', 'background');
80157 var heading = _pane
80159 .attr('class', 'pane-heading');
80163 .text(t('background.title'));
80167 .on('click', hidePane)
80168 .call(svgIcon('#iD-icon-close'));
80171 var content = _pane
80173 .attr('class', 'pane-content');
80178 .attr('class', 'background-background-list-container')
80179 .call(uiDisclosure(context, 'background_list', true)
80180 .title(t('background.backgrounds'))
80181 .content(renderBackgroundList)
80187 .attr('class', 'background-overlay-list-container')
80188 .call(uiDisclosure(context, 'overlay_list', true)
80189 .title(t('background.overlays'))
80190 .content(renderOverlayList)
80194 _displayOptionsContainer = content
80196 .attr('class', 'background-display-options');
80199 _offsetContainer = content
80201 .attr('class', 'background-offset');
80206 .on('move.background-update',
80207 debounce(function() { window.requestIdleCallback(update); }, 1000)
80211 context.background()
80212 .on('change.background-update', update);
80217 context.keybinding()
80218 .on(key, uiBackground.togglePane)
80219 .on(uiCmd('⌘' + key), quickSwitch);
80222 return uiBackground;
80225 function uiContributors(context) {
80226 var osm = context.connection(),
80227 debouncedUpdate = debounce(function() { update(); }, 1000),
80230 wrap = d3_select(null);
80233 function update() {
80237 entities = context.intersects(context.map().extent());
80239 entities.forEach(function(entity) {
80240 if (entity && entity.user) users[entity.user] = true;
80243 var u = Object.keys(users),
80244 subset = u.slice(0, u.length > limit ? limit - 1 : limit);
80247 .call(svgIcon('#iD-icon-nearby', 'pre-text light'));
80249 var userList = d3_select(document.createElement('span'));
80251 userList.selectAll()
80255 .attr('class', 'user-link')
80256 .attr('href', function(d) { return osm.userURL(d); })
80257 .attr('target', '_blank')
80258 .attr('tabindex', -1)
80261 if (u.length > limit) {
80262 var count = d3_select(document.createElement('span'));
80265 .attr('target', '_blank')
80266 .attr('tabindex', -1)
80267 .attr('href', function() {
80268 return osm.changesetsURL(context.map().center(), context.map().zoom());
80270 .text(u.length - limit + 1);
80272 wrap.append('span')
80273 .html(t('contributors.truncated_list', { users: userList.html(), count: count.html() }));
80276 wrap.append('span')
80277 .html(t('contributors.list', { users: userList.html() }));
80284 .style('opacity', 0);
80286 } else if (hidden) {
80289 .style('opacity', 1);
80294 return function(selection) {
80299 osm.on('loaded.contributors', debouncedUpdate);
80300 context.map().on('move.contributors', debouncedUpdate);
80304 function uiFeatureInfo(context) {
80305 function update(selection) {
80306 var features = context.features();
80307 var stats = features.stats();
80309 var hiddenList = features.hidden().map(function(k) {
80312 return String(stats[k]) + ' ' + t('feature.' + k + '.description');
80314 }).filter(Boolean);
80316 selection.html('');
80318 if (hiddenList.length) {
80319 var tooltipBehavior = tooltip()
80322 .title(function() {
80323 return uiTooltipHtml(hiddenList.join('<br/>'));
80326 var warning = selection.append('a')
80328 .attr('tabindex', -1)
80329 .html(t('feature_info.hidden_warning', { count: count }))
80330 .call(tooltipBehavior)
80331 .on('click', function() {
80332 tooltipBehavior.hide(warning);
80333 // open map data panel?
80334 event.preventDefault();
80339 .classed('hide', !hiddenList.length);
80343 return function(selection) {
80346 context.features().on('change.feature_info', function() {
80352 function uiFullScreen(context) {
80353 var element = context.container().node();
80354 // var button = d3_select(null);
80357 function getFullScreenFn() {
80358 if (element.requestFullscreen) {
80359 return element.requestFullscreen;
80360 } else if (element.msRequestFullscreen) {
80361 return element.msRequestFullscreen;
80362 } else if (element.mozRequestFullScreen) {
80363 return element.mozRequestFullScreen;
80364 } else if (element.webkitRequestFullscreen) {
80365 return element.webkitRequestFullscreen;
80370 function getExitFullScreenFn() {
80371 if (document.exitFullscreen) {
80372 return document.exitFullscreen;
80373 } else if (document.msExitFullscreen) {
80374 return document.msExitFullscreen;
80375 } else if (document.mozCancelFullScreen) {
80376 return document.mozCancelFullScreen;
80377 } else if (document.webkitExitFullscreen) {
80378 return document.webkitExitFullscreen;
80383 function isFullScreen() {
80384 return document.fullscreenElement ||
80385 document.mozFullScreenElement ||
80386 document.webkitFullscreenElement ||
80387 document.msFullscreenElement;
80391 function isSupported() {
80392 return !!getFullScreenFn();
80396 function fullScreen() {
80397 event.preventDefault();
80398 if (!isFullScreen()) {
80399 // button.classed('active', true);
80400 getFullScreenFn().apply(element);
80402 // button.classed('active', false);
80403 getExitFullScreenFn().apply(document);
80408 return function() { // selection) {
80409 if (!isSupported()) return;
80411 // button = selection.append('button')
80412 // .attr('title', t('full_screen'))
80413 // .attr('tabindex', -1)
80414 // .on('click', fullScreen)
80417 // button.append('span')
80418 // .attr('class', 'icon full-screen');
80420 var detected = utilDetect();
80421 var keys = (detected.os === 'mac' ? [uiCmd('⌃⌘F'), 'f11'] : ['f11']);
80422 context.keybinding().on(keys, fullScreen);
80426 function uiGeolocate(context) {
80427 var geoOptions = { enableHighAccuracy: false, timeout: 6000 /* 6sec */ };
80428 var locating = uiLoading(context).message(t('geolocate.locating')).blocking(true);
80429 var layer = context.layers().layer('geolocate');
80436 if (context.inIntro()) return;
80437 context.enter(modeBrowse(context));
80438 if (!layer.enabled()) {
80440 context.container().call(locating);
80441 navigator.geolocation.getCurrentPosition(success, error, geoOptions);
80446 layer.enabled(null, false);
80448 // This timeout ensures that we still call finish() even if
80449 // the user declines to share their location in Firefox
80450 _timeoutID = setTimeout(finish, 10000 /* 10sec */ );
80453 function zoomTo() {
80454 var map = context.map();
80455 layer.enabled(_position, true);
80456 map.centerZoomEase(_extent.center(), Math.min(20, map.extentZoom(_extent)));
80460 function success(geolocation) {
80461 _position = geolocation;
80462 var coords = _position.coords;
80463 _extent = geoExtent([coords.longitude, coords.latitude]).padByMeters(coords.accuracy);
80474 function finish() {
80475 locating.close(); // unblock ui
80476 if (_timeoutID) { clearTimeout(_timeoutID); }
80477 _timeoutID = undefined;
80481 return function(selection) {
80482 if (!navigator.geolocation) return;
80486 .attr('tabindex', -1)
80487 .attr('title', t('geolocate.title'))
80488 .on('click', click)
80489 .call(svgIcon('#iD-icon-geolocate', 'light'))
80491 .placement((textDirection === 'rtl') ? 'right' : 'left'));
80495 var marked = createCommonjsModule(function (module, exports) {
80499 * Block-Level Grammar
80504 code: /^( {4}[^\n]+\n*)+/,
80506 hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,
80507 heading: /^ *(#{1,6}) *([^\n]+?) *(?:#+ *)?(?:\n+|$)/,
80509 blockquote: /^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,
80510 list: /^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,
80511 html: '^ {0,3}(?:' // optional indentation
80512 + '<(script|pre|style)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)' // (1)
80513 + '|comment[^\\n]*(\\n+|$)' // (2)
80514 + '|<\\?[\\s\\S]*?\\?>\\n*' // (3)
80515 + '|<![A-Z][\\s\\S]*?>\\n*' // (4)
80516 + '|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>\\n*' // (5)
80517 + '|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)' // (6)
80518 + '|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)' // (7) open tag
80519 + '|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)' // (7) closing tag
80521 def: /^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,
80523 lheading: /^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,
80524 paragraph: /^([^\n]+(?:\n(?!hr|heading|lheading| {0,3}>|<\/?(?:tag)(?: +|\n|\/?>)|<(?:script|pre|style|!--))[^\n]+)*)/,
80528 block._label = /(?!\s*\])(?:\\[\[\]]|[^\[\]])+/;
80529 block._title = /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/;
80530 block.def = edit(block.def)
80531 .replace('label', block._label)
80532 .replace('title', block._title)
80535 block.bullet = /(?:[*+-]|\d{1,9}\.)/;
80536 block.item = /^( *)(bull) ?[^\n]*(?:\n(?!\1bull ?)[^\n]*)*/;
80537 block.item = edit(block.item, 'gm')
80538 .replace(/bull/g, block.bullet)
80541 block.list = edit(block.list)
80542 .replace(/bull/g, block.bullet)
80543 .replace('hr', '\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))')
80544 .replace('def', '\\n+(?=' + block.def.source + ')')
80547 block._tag = 'address|article|aside|base|basefont|blockquote|body|caption'
80548 + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'
80549 + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'
80550 + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'
80551 + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr'
80553 block._comment = /<!--(?!-?>)[\s\S]*?-->/;
80554 block.html = edit(block.html, 'i')
80555 .replace('comment', block._comment)
80556 .replace('tag', block._tag)
80557 .replace('attribute', / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/)
80560 block.paragraph = edit(block.paragraph)
80561 .replace('hr', block.hr)
80562 .replace('heading', block.heading)
80563 .replace('lheading', block.lheading)
80564 .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks
80567 block.blockquote = edit(block.blockquote)
80568 .replace('paragraph', block.paragraph)
80572 * Normal Block Grammar
80575 block.normal = merge({}, block);
80578 * GFM Block Grammar
80581 block.gfm = merge({}, block.normal, {
80582 fences: /^ {0,3}(`{3,}|~{3,})([^`\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,
80584 heading: /^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/
80587 block.gfm.paragraph = edit(block.paragraph)
80588 .replace('(?!', '(?!'
80589 + block.gfm.fences.source.replace('\\1', '\\2') + '|'
80590 + block.list.source.replace('\\1', '\\3') + '|')
80594 * GFM + Tables Block Grammar
80597 block.tables = merge({}, block.gfm, {
80598 nptable: /^ *([^|\n ].*\|.*)\n *([-:]+ *\|[-| :]*)(?:\n((?:.*[^>\n ].*(?:\n|$))*)\n*|$)/,
80599 table: /^ *\|(.+)\n *\|?( *[-:]+[-| :]*)(?:\n((?: *[^>\n ].*(?:\n|$))*)\n*|$)/
80606 block.pedantic = merge({}, block.normal, {
80608 '^ *(?:comment *(?:\\n|\\s*$)'
80609 + '|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)' // closed tag
80610 + '|<tag(?:"[^"]*"|\'[^\']*\'|\\s[^\'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))')
80611 .replace('comment', block._comment)
80612 .replace(/tag/g, '(?!(?:'
80613 + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'
80614 + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'
80615 + '\\b)\\w+(?!:|[^\\w\\s@]*@)\\b')
80617 def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/
80624 function Lexer(options) {
80626 this.tokens.links = Object.create(null);
80627 this.options = options || marked.defaults;
80628 this.rules = block.normal;
80630 if (this.options.pedantic) {
80631 this.rules = block.pedantic;
80632 } else if (this.options.gfm) {
80633 if (this.options.tables) {
80634 this.rules = block.tables;
80636 this.rules = block.gfm;
80642 * Expose Block Rules
80645 Lexer.rules = block;
80648 * Static Lex Method
80651 Lexer.lex = function(src, options) {
80652 var lexer = new Lexer(options);
80653 return lexer.lex(src);
80660 Lexer.prototype.lex = function(src) {
80662 .replace(/\r\n|\r/g, '\n')
80663 .replace(/\t/g, ' ')
80664 .replace(/\u00a0/g, ' ')
80665 .replace(/\u2424/g, '\n');
80667 return this.token(src, true);
80674 Lexer.prototype.token = function(src, top) {
80675 src = src.replace(/^ +$/gm, '');
80695 if (cap = this.rules.newline.exec(src)) {
80696 src = src.substring(cap[0].length);
80697 if (cap[0].length > 1) {
80705 if (cap = this.rules.code.exec(src)) {
80706 src = src.substring(cap[0].length);
80707 cap = cap[0].replace(/^ {4}/gm, '');
80710 text: !this.options.pedantic
80718 if (cap = this.rules.fences.exec(src)) {
80719 src = src.substring(cap[0].length);
80722 lang: cap[2] ? cap[2].trim() : cap[2],
80729 if (cap = this.rules.heading.exec(src)) {
80730 src = src.substring(cap[0].length);
80733 depth: cap[1].length,
80739 // table no leading pipe (gfm)
80740 if (cap = this.rules.nptable.exec(src)) {
80743 header: splitCells(cap[1].replace(/^ *| *\| *$/g, '')),
80744 align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
80745 cells: cap[3] ? cap[3].replace(/\n$/, '').split('\n') : []
80748 if (item.header.length === item.align.length) {
80749 src = src.substring(cap[0].length);
80751 for (i = 0; i < item.align.length; i++) {
80752 if (/^ *-+: *$/.test(item.align[i])) {
80753 item.align[i] = 'right';
80754 } else if (/^ *:-+: *$/.test(item.align[i])) {
80755 item.align[i] = 'center';
80756 } else if (/^ *:-+ *$/.test(item.align[i])) {
80757 item.align[i] = 'left';
80759 item.align[i] = null;
80763 for (i = 0; i < item.cells.length; i++) {
80764 item.cells[i] = splitCells(item.cells[i], item.header.length);
80767 this.tokens.push(item);
80774 if (cap = this.rules.hr.exec(src)) {
80775 src = src.substring(cap[0].length);
80783 if (cap = this.rules.blockquote.exec(src)) {
80784 src = src.substring(cap[0].length);
80787 type: 'blockquote_start'
80790 cap = cap[0].replace(/^ *> ?/gm, '');
80792 // Pass `top` to keep the current
80793 // "toplevel" state. This is exactly
80794 // how markdown.pl works.
80795 this.token(cap, top);
80798 type: 'blockquote_end'
80805 if (cap = this.rules.list.exec(src)) {
80806 src = src.substring(cap[0].length);
80808 isordered = bull.length > 1;
80811 type: 'list_start',
80812 ordered: isordered,
80813 start: isordered ? +bull : '',
80817 this.tokens.push(listStart);
80819 // Get each top-level item.
80820 cap = cap[0].match(this.rules.item);
80827 for (; i < l; i++) {
80830 // Remove the list item's bullet
80831 // so it is seen as the next token.
80832 space = item.length;
80833 item = item.replace(/^ *([*+-]|\d+\.) */, '');
80835 // Outdent whatever the
80836 // list item contains. Hacky.
80837 if (~item.indexOf('\n ')) {
80838 space -= item.length;
80839 item = !this.options.pedantic
80840 ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '')
80841 : item.replace(/^ {1,4}/gm, '');
80844 // Determine whether the next list item belongs here.
80845 // Backpedal if it does not belong in this list.
80847 b = block.bullet.exec(cap[i + 1])[0];
80848 if (bull.length > 1 ? b.length === 1
80849 : (b.length > 1 || (this.options.smartLists && b !== bull))) {
80850 src = cap.slice(i + 1).join('\n') + src;
80855 // Determine whether item is loose or not.
80856 // Use: /(^|\n)(?! )[^\n]+\n\n(?!\s*$)/
80857 // for discount behavior.
80858 loose = next || /\n\n(?!\s*$)/.test(item);
80860 next = item.charAt(item.length - 1) === '\n';
80861 if (!loose) loose = next;
80865 listStart.loose = true;
80868 // Check for task list items
80869 istask = /^\[[ xX]\] /.test(item);
80870 ischecked = undefined;
80872 ischecked = item[1] !== ' ';
80873 item = item.replace(/^\[[ xX]\] +/, '');
80877 type: 'list_item_start',
80879 checked: ischecked,
80884 this.tokens.push(t);
80887 this.token(item, false);
80890 type: 'list_item_end'
80894 if (listStart.loose) {
80895 l = listItems.length;
80897 for (; i < l; i++) {
80898 listItems[i].loose = true;
80910 if (cap = this.rules.html.exec(src)) {
80911 src = src.substring(cap[0].length);
80913 type: this.options.sanitize
80916 pre: !this.options.sanitizer
80917 && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),
80924 if (top && (cap = this.rules.def.exec(src))) {
80925 src = src.substring(cap[0].length);
80926 if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1);
80927 tag = cap[1].toLowerCase().replace(/\s+/g, ' ');
80928 if (!this.tokens.links[tag]) {
80929 this.tokens.links[tag] = {
80938 if (cap = this.rules.table.exec(src)) {
80941 header: splitCells(cap[1].replace(/^ *| *\| *$/g, '')),
80942 align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
80943 cells: cap[3] ? cap[3].replace(/\n$/, '').split('\n') : []
80946 if (item.header.length === item.align.length) {
80947 src = src.substring(cap[0].length);
80949 for (i = 0; i < item.align.length; i++) {
80950 if (/^ *-+: *$/.test(item.align[i])) {
80951 item.align[i] = 'right';
80952 } else if (/^ *:-+: *$/.test(item.align[i])) {
80953 item.align[i] = 'center';
80954 } else if (/^ *:-+ *$/.test(item.align[i])) {
80955 item.align[i] = 'left';
80957 item.align[i] = null;
80961 for (i = 0; i < item.cells.length; i++) {
80962 item.cells[i] = splitCells(
80963 item.cells[i].replace(/^ *\| *| *\| *$/g, ''),
80964 item.header.length);
80967 this.tokens.push(item);
80974 if (cap = this.rules.lheading.exec(src)) {
80975 src = src.substring(cap[0].length);
80978 depth: cap[2] === '=' ? 1 : 2,
80984 // top-level paragraph
80985 if (top && (cap = this.rules.paragraph.exec(src))) {
80986 src = src.substring(cap[0].length);
80989 text: cap[1].charAt(cap[1].length - 1) === '\n'
80990 ? cap[1].slice(0, -1)
80997 if (cap = this.rules.text.exec(src)) {
80998 // Top-level should never reach here.
80999 src = src.substring(cap[0].length);
81008 throw new Error('Infinite loop on byte: ' + src.charCodeAt(0));
81012 return this.tokens;
81016 * Inline-Level Grammar
81020 escape: /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,
81021 autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/,
81024 + '|^</[a-zA-Z][\\w:-]*\\s*>' // self-closing tag
81025 + '|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>' // open tag
81026 + '|^<\\?[\\s\\S]*?\\?>' // processing instruction, e.g. <?php ?>
81027 + '|^<![a-zA-Z]+\\s[\\s\\S]*?>' // declaration, e.g. <!DOCTYPE html>
81028 + '|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>', // CDATA section
81029 link: /^!?\[(label)\]\(href(?:\s+(title))?\s*\)/,
81030 reflink: /^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,
81031 nolink: /^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,
81032 strong: /^__([^\s_])__(?!_)|^\*\*([^\s*])\*\*(?!\*)|^__([^\s][\s\S]*?[^\s])__(?!_)|^\*\*([^\s][\s\S]*?[^\s])\*\*(?!\*)/,
81033 em: /^_([^\s_])_(?!_)|^\*([^\s*"<\[])\*(?!\*)|^_([^\s][\s\S]*?[^\s_])_(?!_|[^\spunctuation])|^_([^\s_][\s\S]*?[^\s])_(?!_|[^\spunctuation])|^\*([^\s"<\[][\s\S]*?[^\s*])\*(?!\*)|^\*([^\s*"<\[][\s\S]*?[^\s])\*(?!\*)/,
81034 code: /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,
81035 br: /^( {2,}|\\)\n(?!\s*$)/,
81037 text: /^(`+|[^`])(?:[\s\S]*?(?:(?=[\\<!\[`*]|\b_|$)|[^ ](?= {2,}\n))|(?= {2,}\n))/
81040 // list of punctuation marks from common mark spec
81041 // without ` and ] to workaround Rule 17 (inline code blocks/links)
81042 inline._punctuation = '!"#$%&\'()*+,\\-./:;<=>?@\\[^_{|}~';
81043 inline.em = edit(inline.em).replace(/punctuation/g, inline._punctuation).getRegex();
81045 inline._escapes = /\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g;
81047 inline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;
81048 inline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;
81049 inline.autolink = edit(inline.autolink)
81050 .replace('scheme', inline._scheme)
81051 .replace('email', inline._email)
81054 inline._attribute = /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/;
81056 inline.tag = edit(inline.tag)
81057 .replace('comment', block._comment)
81058 .replace('attribute', inline._attribute)
81061 inline._label = /(?:\[[^\[\]]*\]|\\[\[\]]?|`[^`]*`|`(?!`)|[^\[\]\\`])*?/;
81062 inline._href = /\s*(<(?:\\[<>]?|[^\s<>\\])*>|[^\s\x00-\x1f]*)/;
81063 inline._title = /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/;
81065 inline.link = edit(inline.link)
81066 .replace('label', inline._label)
81067 .replace('href', inline._href)
81068 .replace('title', inline._title)
81071 inline.reflink = edit(inline.reflink)
81072 .replace('label', inline._label)
81076 * Normal Inline Grammar
81079 inline.normal = merge({}, inline);
81082 * Pedantic Inline Grammar
81085 inline.pedantic = merge({}, inline.normal, {
81086 strong: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,
81087 em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/,
81088 link: edit(/^!?\[(label)\]\((.*?)\)/)
81089 .replace('label', inline._label)
81091 reflink: edit(/^!?\[(label)\]\s*\[([^\]]*)\]/)
81092 .replace('label', inline._label)
81097 * GFM Inline Grammar
81100 inline.gfm = merge({}, inline.normal, {
81101 escape: edit(inline.escape).replace('])', '~|])').getRegex(),
81102 _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,
81103 url: /^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,
81104 _backpedal: /(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,
81105 del: /^~+(?=\S)([\s\S]*?\S)~+/,
81106 text: /^(`+|[^`])(?:[\s\S]*?(?:(?=[\\<!\[`*~]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))|(?= {2,}\n|[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))/
81109 inline.gfm.url = edit(inline.gfm.url, 'i')
81110 .replace('email', inline.gfm._extended_email)
81113 * GFM + Line Breaks Inline Grammar
81116 inline.breaks = merge({}, inline.gfm, {
81117 br: edit(inline.br).replace('{2,}', '*').getRegex(),
81118 text: edit(inline.gfm.text).replace(/\{2,\}/g, '*').getRegex()
81122 * Inline Lexer & Compiler
81125 function InlineLexer(links, options) {
81126 this.options = options || marked.defaults;
81127 this.links = links;
81128 this.rules = inline.normal;
81129 this.renderer = this.options.renderer || new Renderer();
81130 this.renderer.options = this.options;
81133 throw new Error('Tokens array requires a `links` property.');
81136 if (this.options.pedantic) {
81137 this.rules = inline.pedantic;
81138 } else if (this.options.gfm) {
81139 if (this.options.breaks) {
81140 this.rules = inline.breaks;
81142 this.rules = inline.gfm;
81148 * Expose Inline Rules
81151 InlineLexer.rules = inline;
81154 * Static Lexing/Compiling Method
81157 InlineLexer.output = function(src, links, options) {
81158 var inline = new InlineLexer(links, options);
81159 return inline.output(src);
81166 InlineLexer.prototype.output = function(src) {
81177 if (cap = this.rules.escape.exec(src)) {
81178 src = src.substring(cap[0].length);
81179 out += escape(cap[1]);
81184 if (cap = this.rules.tag.exec(src)) {
81185 if (!this.inLink && /^<a /i.test(cap[0])) {
81186 this.inLink = true;
81187 } else if (this.inLink && /^<\/a>/i.test(cap[0])) {
81188 this.inLink = false;
81190 if (!this.inRawBlock && /^<(pre|code|kbd|script)(\s|>)/i.test(cap[0])) {
81191 this.inRawBlock = true;
81192 } else if (this.inRawBlock && /^<\/(pre|code|kbd|script)(\s|>)/i.test(cap[0])) {
81193 this.inRawBlock = false;
81196 src = src.substring(cap[0].length);
81197 out += this.options.sanitize
81198 ? this.options.sanitizer
81199 ? this.options.sanitizer(cap[0])
81206 if (cap = this.rules.link.exec(src)) {
81207 var lastParenIndex = findClosingBracket(cap[2], '()');
81208 if (lastParenIndex > -1) {
81209 var linkLen = cap[0].length - (cap[2].length - lastParenIndex) - (cap[3] || '').length;
81210 cap[2] = cap[2].substring(0, lastParenIndex);
81211 cap[0] = cap[0].substring(0, linkLen).trim();
81214 src = src.substring(cap[0].length);
81215 this.inLink = true;
81217 if (this.options.pedantic) {
81218 link = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(href);
81227 title = cap[3] ? cap[3].slice(1, -1) : '';
81229 href = href.trim().replace(/^<([\s\S]*)>$/, '$1');
81230 out += this.outputLink(cap, {
81231 href: InlineLexer.escapes(href),
81232 title: InlineLexer.escapes(title)
81234 this.inLink = false;
81239 if ((cap = this.rules.reflink.exec(src))
81240 || (cap = this.rules.nolink.exec(src))) {
81241 src = src.substring(cap[0].length);
81242 link = (cap[2] || cap[1]).replace(/\s+/g, ' ');
81243 link = this.links[link.toLowerCase()];
81244 if (!link || !link.href) {
81245 out += cap[0].charAt(0);
81246 src = cap[0].substring(1) + src;
81249 this.inLink = true;
81250 out += this.outputLink(cap, link);
81251 this.inLink = false;
81256 if (cap = this.rules.strong.exec(src)) {
81257 src = src.substring(cap[0].length);
81258 out += this.renderer.strong(this.output(cap[4] || cap[3] || cap[2] || cap[1]));
81263 if (cap = this.rules.em.exec(src)) {
81264 src = src.substring(cap[0].length);
81265 out += this.renderer.em(this.output(cap[6] || cap[5] || cap[4] || cap[3] || cap[2] || cap[1]));
81270 if (cap = this.rules.code.exec(src)) {
81271 src = src.substring(cap[0].length);
81272 out += this.renderer.codespan(escape(cap[2].trim(), true));
81277 if (cap = this.rules.br.exec(src)) {
81278 src = src.substring(cap[0].length);
81279 out += this.renderer.br();
81284 if (cap = this.rules.del.exec(src)) {
81285 src = src.substring(cap[0].length);
81286 out += this.renderer.del(this.output(cap[1]));
81291 if (cap = this.rules.autolink.exec(src)) {
81292 src = src.substring(cap[0].length);
81293 if (cap[2] === '@') {
81294 text = escape(this.mangle(cap[1]));
81295 href = 'mailto:' + text;
81297 text = escape(cap[1]);
81300 out += this.renderer.link(href, null, text);
81305 if (!this.inLink && (cap = this.rules.url.exec(src))) {
81306 if (cap[2] === '@') {
81307 text = escape(cap[0]);
81308 href = 'mailto:' + text;
81310 // do extended autolink path validation
81312 prevCapZero = cap[0];
81313 cap[0] = this.rules._backpedal.exec(cap[0])[0];
81314 } while (prevCapZero !== cap[0]);
81315 text = escape(cap[0]);
81316 if (cap[1] === 'www.') {
81317 href = 'http://' + text;
81322 src = src.substring(cap[0].length);
81323 out += this.renderer.link(href, null, text);
81328 if (cap = this.rules.text.exec(src)) {
81329 src = src.substring(cap[0].length);
81330 if (this.inRawBlock) {
81331 out += this.renderer.text(cap[0]);
81333 out += this.renderer.text(escape(this.smartypants(cap[0])));
81339 throw new Error('Infinite loop on byte: ' + src.charCodeAt(0));
81346 InlineLexer.escapes = function(text) {
81347 return text ? text.replace(InlineLexer.rules._escapes, '$1') : text;
81354 InlineLexer.prototype.outputLink = function(cap, link) {
81355 var href = link.href,
81356 title = link.title ? escape(link.title) : null;
81358 return cap[0].charAt(0) !== '!'
81359 ? this.renderer.link(href, title, this.output(cap[1]))
81360 : this.renderer.image(href, title, escape(cap[1]));
81364 * Smartypants Transformations
81367 InlineLexer.prototype.smartypants = function(text) {
81368 if (!this.options.smartypants) return text;
81371 .replace(/---/g, '\u2014')
81373 .replace(/--/g, '\u2013')
81375 .replace(/(^|[-\u2014/(\[{"\s])'/g, '$1\u2018')
81376 // closing singles & apostrophes
81377 .replace(/'/g, '\u2019')
81379 .replace(/(^|[-\u2014/(\[{\u2018\s])"/g, '$1\u201c')
81381 .replace(/"/g, '\u201d')
81383 .replace(/\.{3}/g, '\u2026');
81390 InlineLexer.prototype.mangle = function(text) {
81391 if (!this.options.mangle) return text;
81397 for (; i < l; i++) {
81398 ch = text.charCodeAt(i);
81399 if (Math.random() > 0.5) {
81400 ch = 'x' + ch.toString(16);
81402 out += '&#' + ch + ';';
81412 function Renderer(options) {
81413 this.options = options || marked.defaults;
81416 Renderer.prototype.code = function(code, infostring, escaped) {
81417 var lang = (infostring || '').match(/\S*/)[0];
81418 if (this.options.highlight) {
81419 var out = this.options.highlight(code, lang);
81420 if (out != null && out !== code) {
81427 return '<pre><code>'
81428 + (escaped ? code : escape(code, true))
81432 return '<pre><code class="'
81433 + this.options.langPrefix
81434 + escape(lang, true)
81436 + (escaped ? code : escape(code, true))
81437 + '</code></pre>\n';
81440 Renderer.prototype.blockquote = function(quote) {
81441 return '<blockquote>\n' + quote + '</blockquote>\n';
81444 Renderer.prototype.html = function(html) {
81448 Renderer.prototype.heading = function(text, level, raw, slugger) {
81449 if (this.options.headerIds) {
81453 + this.options.headerPrefix
81454 + slugger.slug(raw)
81462 return '<h' + level + '>' + text + '</h' + level + '>\n';
81465 Renderer.prototype.hr = function() {
81466 return this.options.xhtml ? '<hr/>\n' : '<hr>\n';
81469 Renderer.prototype.list = function(body, ordered, start) {
81470 var type = ordered ? 'ol' : 'ul',
81471 startatt = (ordered && start !== 1) ? (' start="' + start + '"') : '';
81472 return '<' + type + startatt + '>\n' + body + '</' + type + '>\n';
81475 Renderer.prototype.listitem = function(text) {
81476 return '<li>' + text + '</li>\n';
81479 Renderer.prototype.checkbox = function(checked) {
81481 + (checked ? 'checked="" ' : '')
81482 + 'disabled="" type="checkbox"'
81483 + (this.options.xhtml ? ' /' : '')
81487 Renderer.prototype.paragraph = function(text) {
81488 return '<p>' + text + '</p>\n';
81491 Renderer.prototype.table = function(header, body) {
81492 if (body) body = '<tbody>' + body + '</tbody>';
81502 Renderer.prototype.tablerow = function(content) {
81503 return '<tr>\n' + content + '</tr>\n';
81506 Renderer.prototype.tablecell = function(content, flags) {
81507 var type = flags.header ? 'th' : 'td';
81508 var tag = flags.align
81509 ? '<' + type + ' align="' + flags.align + '">'
81510 : '<' + type + '>';
81511 return tag + content + '</' + type + '>\n';
81514 // span level renderer
81515 Renderer.prototype.strong = function(text) {
81516 return '<strong>' + text + '</strong>';
81519 Renderer.prototype.em = function(text) {
81520 return '<em>' + text + '</em>';
81523 Renderer.prototype.codespan = function(text) {
81524 return '<code>' + text + '</code>';
81527 Renderer.prototype.br = function() {
81528 return this.options.xhtml ? '<br/>' : '<br>';
81531 Renderer.prototype.del = function(text) {
81532 return '<del>' + text + '</del>';
81535 Renderer.prototype.link = function(href, title, text) {
81536 href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);
81537 if (href === null) {
81540 var out = '<a href="' + escape(href) + '"';
81542 out += ' title="' + title + '"';
81544 out += '>' + text + '</a>';
81548 Renderer.prototype.image = function(href, title, text) {
81549 href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);
81550 if (href === null) {
81554 var out = '<img src="' + href + '" alt="' + text + '"';
81556 out += ' title="' + title + '"';
81558 out += this.options.xhtml ? '/>' : '>';
81562 Renderer.prototype.text = function(text) {
81568 * returns only the textual part of the token
81571 function TextRenderer() {}
81573 // no need for block level renderers
81575 TextRenderer.prototype.strong =
81576 TextRenderer.prototype.em =
81577 TextRenderer.prototype.codespan =
81578 TextRenderer.prototype.del =
81579 TextRenderer.prototype.text = function (text) {
81583 TextRenderer.prototype.link =
81584 TextRenderer.prototype.image = function(href, title, text) {
81588 TextRenderer.prototype.br = function() {
81593 * Parsing & Compiling
81596 function Parser(options) {
81599 this.options = options || marked.defaults;
81600 this.options.renderer = this.options.renderer || new Renderer();
81601 this.renderer = this.options.renderer;
81602 this.renderer.options = this.options;
81603 this.slugger = new Slugger();
81607 * Static Parse Method
81610 Parser.parse = function(src, options) {
81611 var parser = new Parser(options);
81612 return parser.parse(src);
81619 Parser.prototype.parse = function(src) {
81620 this.inline = new InlineLexer(src.links, this.options);
81621 // use an InlineLexer with a TextRenderer to extract pure text
81622 this.inlineText = new InlineLexer(
81624 merge({}, this.options, {renderer: new TextRenderer()})
81626 this.tokens = src.reverse();
81629 while (this.next()) {
81640 Parser.prototype.next = function() {
81641 return this.token = this.tokens.pop();
81645 * Preview Next Token
81648 Parser.prototype.peek = function() {
81649 return this.tokens[this.tokens.length - 1] || 0;
81653 * Parse Text Tokens
81656 Parser.prototype.parseText = function() {
81657 var body = this.token.text;
81659 while (this.peek().type === 'text') {
81660 body += '\n' + this.next().text;
81663 return this.inline.output(body);
81667 * Parse Current Token
81670 Parser.prototype.tok = function() {
81671 switch (this.token.type) {
81676 return this.renderer.hr();
81679 return this.renderer.heading(
81680 this.inline.output(this.token.text),
81682 unescape(this.inlineText.output(this.token.text)),
81686 return this.renderer.code(this.token.text,
81688 this.token.escaped);
81700 for (i = 0; i < this.token.header.length; i++) {
81701 cell += this.renderer.tablecell(
81702 this.inline.output(this.token.header[i]),
81703 { header: true, align: this.token.align[i] }
81706 header += this.renderer.tablerow(cell);
81708 for (i = 0; i < this.token.cells.length; i++) {
81709 row = this.token.cells[i];
81712 for (j = 0; j < row.length; j++) {
81713 cell += this.renderer.tablecell(
81714 this.inline.output(row[j]),
81715 { header: false, align: this.token.align[j] }
81719 body += this.renderer.tablerow(cell);
81721 return this.renderer.table(header, body);
81723 case 'blockquote_start': {
81726 while (this.next().type !== 'blockquote_end') {
81727 body += this.tok();
81730 return this.renderer.blockquote(body);
81732 case 'list_start': {
81734 var ordered = this.token.ordered,
81735 start = this.token.start;
81737 while (this.next().type !== 'list_end') {
81738 body += this.tok();
81741 return this.renderer.list(body, ordered, start);
81743 case 'list_item_start': {
81745 var loose = this.token.loose;
81746 var checked = this.token.checked;
81747 var task = this.token.task;
81749 if (this.token.task) {
81750 body += this.renderer.checkbox(checked);
81753 while (this.next().type !== 'list_item_end') {
81754 body += !loose && this.token.type === 'text'
81758 return this.renderer.listitem(body, task, checked);
81761 // TODO parse inline content if parameter markdown=1
81762 return this.renderer.html(this.token.text);
81764 case 'paragraph': {
81765 return this.renderer.paragraph(this.inline.output(this.token.text));
81768 return this.renderer.paragraph(this.parseText());
81771 var errMsg = 'Token with "' + this.token.type + '" type was not found.';
81772 if (this.options.silent) {
81773 console.log(errMsg);
81775 throw new Error(errMsg);
81782 * Slugger generates header id
81785 function Slugger () {
81790 * Convert string to unique id
81793 Slugger.prototype.slug = function (value) {
81797 .replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g, '')
81798 .replace(/\s/g, '-');
81800 if (this.seen.hasOwnProperty(slug)) {
81801 var originalSlug = slug;
81803 this.seen[originalSlug]++;
81804 slug = originalSlug + '-' + this.seen[originalSlug];
81805 } while (this.seen.hasOwnProperty(slug));
81807 this.seen[slug] = 0;
81816 function escape(html, encode) {
81818 if (escape.escapeTest.test(html)) {
81819 return html.replace(escape.escapeReplace, function (ch) { return escape.replacements[ch]; });
81822 if (escape.escapeTestNoEncode.test(html)) {
81823 return html.replace(escape.escapeReplaceNoEncode, function (ch) { return escape.replacements[ch]; });
81830 escape.escapeTest = /[&<>"']/;
81831 escape.escapeReplace = /[&<>"']/g;
81832 escape.replacements = {
81840 escape.escapeTestNoEncode = /[<>"']|&(?!#?\w+;)/;
81841 escape.escapeReplaceNoEncode = /[<>"']|&(?!#?\w+;)/g;
81843 function unescape(html) {
81844 // explicitly match decimal, hex, and named HTML entities
81845 return html.replace(/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig, function(_, n) {
81846 n = n.toLowerCase();
81847 if (n === 'colon') return ':';
81848 if (n.charAt(0) === '#') {
81849 return n.charAt(1) === 'x'
81850 ? String.fromCharCode(parseInt(n.substring(2), 16))
81851 : String.fromCharCode(+n.substring(1));
81857 function edit(regex, opt) {
81858 regex = regex.source || regex;
81861 replace: function(name, val) {
81862 val = val.source || val;
81863 val = val.replace(/(^|[^\[])\^/g, '$1');
81864 regex = regex.replace(name, val);
81867 getRegex: function() {
81868 return new RegExp(regex, opt);
81873 function cleanUrl(sanitize, base, href) {
81876 var prot = decodeURIComponent(unescape(href))
81877 .replace(/[^\w:]/g, '')
81882 if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {
81886 if (base && !originIndependentUrl.test(href)) {
81887 href = resolveUrl(base, href);
81890 href = encodeURI(href).replace(/%25/g, '%');
81897 function resolveUrl(base, href) {
81898 if (!baseUrls[' ' + base]) {
81899 // we can ignore everything in base after the last slash of its path component,
81900 // but we might need to add _that_
81901 // https://tools.ietf.org/html/rfc3986#section-3
81902 if (/^[^:]+:\/*[^/]*$/.test(base)) {
81903 baseUrls[' ' + base] = base + '/';
81905 baseUrls[' ' + base] = rtrim(base, '/', true);
81908 base = baseUrls[' ' + base];
81910 if (href.slice(0, 2) === '//') {
81911 return base.replace(/:[\s\S]*/, ':') + href;
81912 } else if (href.charAt(0) === '/') {
81913 return base.replace(/(:\/*[^/]*)[\s\S]*/, '$1') + href;
81915 return base + href;
81919 var originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;
81924 function merge(obj) {
81929 for (; i < arguments.length; i++) {
81930 target = arguments[i];
81931 for (key in target) {
81932 if (Object.prototype.hasOwnProperty.call(target, key)) {
81933 obj[key] = target[key];
81941 function splitCells(tableRow, count) {
81942 // ensure that every cell-delimiting pipe has a space
81943 // before it to distinguish it from an escaped pipe
81944 var row = tableRow.replace(/\|/g, function (match, offset, str) {
81945 var escaped = false,
81947 while (--curr >= 0 && str[curr] === '\\') escaped = !escaped;
81949 // odd number of slashes means | is escaped
81950 // so we leave it alone
81953 // add space before unescaped |
81957 cells = row.split(/ \|/),
81960 if (cells.length > count) {
81961 cells.splice(count);
81963 while (cells.length < count) cells.push('');
81966 for (; i < cells.length; i++) {
81967 // leading or trailing whitespace is ignored per the gfm spec
81968 cells[i] = cells[i].trim().replace(/\\\|/g, '|');
81973 // Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').
81974 // /c*$/ is vulnerable to REDOS.
81975 // invert: Remove suffix of non-c chars instead. Default falsey.
81976 function rtrim(str, c, invert) {
81977 if (str.length === 0) {
81981 // Length of suffix matching the invert condition.
81984 // Step left until we fail to match the invert condition.
81985 while (suffLen < str.length) {
81986 var currChar = str.charAt(str.length - suffLen - 1);
81987 if (currChar === c && !invert) {
81989 } else if (currChar !== c && invert) {
81996 return str.substr(0, str.length - suffLen);
81999 function findClosingBracket(str, b) {
82000 if (str.indexOf(b[1]) === -1) {
82004 for (var i = 0; i < str.length; i++) {
82005 if (str[i] === '\\') {
82007 } else if (str[i] === b[0]) {
82009 } else if (str[i] === b[1]) {
82023 function marked(src, opt, callback) {
82024 // throw error in case of non string input
82025 if (typeof src === 'undefined' || src === null) {
82026 throw new Error('marked(): input parameter is undefined or null');
82028 if (typeof src !== 'string') {
82029 throw new Error('marked(): input parameter is of type '
82030 + Object.prototype.toString.call(src) + ', string expected');
82033 if (callback || typeof opt === 'function') {
82039 opt = merge({}, marked.defaults, opt || {});
82041 var highlight = opt.highlight,
82047 tokens = Lexer.lex(src, opt);
82049 return callback(e);
82052 pending = tokens.length;
82054 var done = function(err) {
82056 opt.highlight = highlight;
82057 return callback(err);
82063 out = Parser.parse(tokens, opt);
82068 opt.highlight = highlight;
82072 : callback(null, out);
82075 if (!highlight || highlight.length < 3) {
82079 delete opt.highlight;
82081 if (!pending) return done();
82083 for (; i < tokens.length; i++) {
82085 if (token.type !== 'code') {
82086 return --pending || done();
82088 return highlight(token.text, token.lang, function(err, code) {
82089 if (err) return done(err);
82090 if (code == null || code === token.text) {
82091 return --pending || done();
82094 token.escaped = true;
82095 --pending || done();
82103 if (opt) opt = merge({}, marked.defaults, opt);
82104 return Parser.parse(Lexer.lex(src, opt), opt);
82106 e.message += '\nPlease report this to https://github.com/markedjs/marked.';
82107 if ((opt || marked.defaults).silent) {
82108 return '<p>An error occurred:</p><pre>'
82109 + escape(e.message + '', true)
82121 marked.setOptions = function(opt) {
82122 merge(marked.defaults, opt);
82126 marked.getDefaults = function () {
82134 langPrefix: 'language-',
82137 renderer: new Renderer(),
82142 smartypants: false,
82148 marked.defaults = marked.getDefaults();
82154 marked.Parser = Parser;
82155 marked.parser = Parser.parse;
82157 marked.Renderer = Renderer;
82158 marked.TextRenderer = TextRenderer;
82160 marked.Lexer = Lexer;
82161 marked.lexer = Lexer.lex;
82163 marked.InlineLexer = InlineLexer;
82164 marked.inlineLexer = InlineLexer.output;
82166 marked.Slugger = Slugger;
82168 marked.parse = marked;
82171 module.exports = marked;
82173 })(commonjsGlobal || (typeof window !== 'undefined' ? window : commonjsGlobal));
82176 function pointBox(loc, context) {
82177 var rect = context.surfaceRect();
82178 var point = context.curtainProjection(loc);
82180 left: point[0] + rect.left - 40,
82181 top: point[1] + rect.top - 60,
82188 function pad$2(locOrBox, padding, context) {
82190 if (locOrBox instanceof Array) {
82191 var rect = context.surfaceRect();
82192 var point = context.curtainProjection(locOrBox);
82194 left: point[0] + rect.left,
82195 top: point[1] + rect.top
82202 left: box.left - padding,
82203 top: box.top - padding,
82204 width: (box.width || 0) + 2 * padding,
82205 height: (box.width || 0) + 2 * padding
82210 function icon(name, svgklass, useklass) {
82211 return '<svg class="icon ' + (svgklass || '') + '">' +
82212 '<use xlink:href="' + name + '"' +
82213 (useklass ? ' class="' + useklass + '"' : '') + '></use></svg>';
82217 function slugify(text) {
82218 return text.toString().toLowerCase()
82219 .replace(/\s+/g, '-') // Replace spaces with -
82220 .replace(/[^\w\-]+/g, '') // Remove all non-word chars
82221 .replace(/\-\-+/g, '-') // Replace multiple - with single -
82222 .replace(/^-+/, '') // Trim - from start of text
82223 .replace(/-+$/, ''); // Trim - from end of text
82227 // console warning for missing walkthrough names
82228 var missingStrings = {};
82229 function checkKey(key, text) {
82230 if (t(key, { default: undefined}) === undefined) {
82231 if (missingStrings.hasOwnProperty(key)) return; // warn once
82232 missingStrings[key] = text;
82233 var missing = key + ': ' + text;
82234 if (typeof console !== 'undefined') console.log(missing); // eslint-disable-line
82239 function localize(obj) {
82242 // Assign name if entity has one..
82243 var name = obj.tags && obj.tags.name;
82245 key = 'intro.graph.name.' + slugify(name);
82246 obj.tags.name = t(key, { default: name });
82247 checkKey(key, name);
82250 // Assign street name if entity has one..
82251 var street = obj.tags && obj.tags['addr:street'];
82253 key = 'intro.graph.name.' + slugify(street);
82254 obj.tags['addr:street'] = t(key, { default: street });
82255 checkKey(key, street);
82257 // Add address details common across walkthrough..
82259 'block_number', 'city', 'county', 'district', 'hamlet', 'neighbourhood',
82260 'postcode', 'province', 'quarter', 'state', 'subdistrict', 'suburb'
82262 addrTags.forEach(function(k) {
82263 var key = 'intro.graph.' + k;
82264 var tag = 'addr:' + k;
82265 var val = obj.tags && obj.tags[tag];
82266 var str = t(key, { default: val });
82269 if (str.match(/^<.*>$/) !== null) {
82270 delete obj.tags[tag];
82272 obj.tags[tag] = str;
82282 // Used to detect squareness.. some duplicataion of code from actionOrthogonalize.
82283 function isMostlySquare(points) {
82284 // note: uses 15 here instead of the 12 from actionOrthogonalize because
82285 // actionOrthogonalize can actually straighten some larger angles as it iterates
82286 var threshold = 15; // degrees within right or straight
82287 var lowerBound = Math.cos((90 - threshold) * Math.PI / 180); // near right
82288 var upperBound = Math.cos(threshold * Math.PI / 180); // near straight
82290 for (var i = 0; i < points.length; i++) {
82291 var a = points[(i - 1 + points.length) % points.length];
82292 var origin = points[i];
82293 var b = points[(i + 1) % points.length];
82295 var dotp = geoVecNormalizedDot(a, b, origin);
82296 var mag = Math.abs(dotp);
82297 if (mag > lowerBound && mag < upperBound) {
82306 function selectMenuItem(operation) {
82307 var selector = '.edit-menu .edit-menu-item-' + operation +
82308 ', .radial-menu .radial-menu-item-' + operation;
82309 return d3_select(selector);
82313 function transitionTime(point1, point2) {
82314 var distance = geoSphericalDistance(point1, point2);
82315 if (distance === 0)
82317 else if (distance < 80)
82323 var dataIntroGraph = {n1:{id:"n1",loc:[-85.631039,41.948829]},n10:{id:"n10",loc:[-85.634733,41.941588]},n100:{id:"n100",loc:[-85.637395,41.942252]},n1000:{id:"n1000",loc:[-85.632699,41.944763]},n1001:{id:"n1001",loc:[-85.632685,41.944763]},n1002:{id:"n1002",loc:[-85.632673,41.944755]},n1003:{id:"n1003",loc:[-85.632595,41.944682]},n1004:{id:"n1004",loc:[-85.632576,41.944673]},n1005:{id:"n1005",loc:[-85.632551,41.944667]},n1006:{id:"n1006",loc:[-85.63253,41.944667]},n1007:{id:"n1007",loc:[-85.632502,41.944669]},n1008:{id:"n1008",loc:[-85.632483,41.944677]},n1009:{id:"n1009",loc:[-85.632383,41.944731]},n101:{id:"n101",loc:[-85.637357,41.942252]},n1010:{id:"n1010",loc:[-85.63349,41.944976],tags:{"addr:city":"Three Rivers","addr:housenumber":"31","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"Sherwin Williams",shop:"paint",brand:"Sherwin Williams","brand:wikidata":"Q48881","brand:wikipedia":"en:Sherwin-Williams"}},n1011:{id:"n1011",loc:[-85.633548,41.945034],tags:{"addr:city":"Three Rivers","addr:housenumber":"33","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"Unique Jewelry",shop:"jewelry"}},n1012:{id:"n1012",loc:[-85.633683,41.945129],tags:{"addr:city":"Three Rivers","addr:housenumber":"37","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"World Fare",shop:"gift"}},n1013:{id:"n1013",loc:[-85.634563,41.945469],tags:{"addr:city":"Three Rivers","addr:housenumber":"62","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"Golden Finch Framing",shop:"frame"}},n1014:{id:"n1014",loc:[-85.634469,41.945379],tags:{"addr:city":"Three Rivers","addr:housenumber":"58","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"Dollar Tree",brand:"Dollar Tree","brand:wikidata":"Q5289230","brand:wikipedia":"en:Dollar Tree",shop:"variety_store"}},n1015:{id:"n1015",loc:[-85.634227,41.945159],tags:{"addr:city":"Three Rivers","addr:housenumber":"48","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",amenity:"theatre",name:"Riviera Theatre"}},n1016:{id:"n1016",loc:[-85.634057,41.945012],tags:{"addr:city":"Three Rivers","addr:housenumber":"42","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"River City Appliance",shop:"appliance"}},n1017:{id:"n1017",loc:[-85.633879,41.945325],tags:{"addr:city":"Three Rivers","addr:housenumber":"45","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"Paparazzi Tattoo",shop:"tattoo"}},n1018:{id:"n1018",loc:[-85.634914,41.945839],tags:{"addr:city":"Three Rivers","addr:housenumber":"88","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",amenity:"bank",name:"Southern Michigan Bank"}},n1019:{id:"n1019",loc:[-85.634513,41.946181]},n102:{id:"n102",loc:[-85.637357,41.942216]},n1020:{id:"n1020",loc:[-85.634079,41.946194]},n1021:{id:"n1021",loc:[-85.634357,41.945805]},n1022:{id:"n1022",loc:[-85.634389,41.945788]},n1023:{id:"n1023",loc:[-85.634491,41.94581]},n1024:{id:"n1024",loc:[-85.634513,41.945853]},n1025:{id:"n1025",loc:[-85.634506,41.94583]},n1026:{id:"n1026",loc:[-85.634762,41.946056],tags:{crossing:"marked",highway:"crossing"}},n1027:{id:"n1027",loc:[-85.634766,41.946178]},n1028:{id:"n1028",loc:[-85.634622,41.946179],tags:{crossing:"marked",highway:"crossing"}},n1029:{id:"n1029",loc:[-85.640655,41.942057]},n103:{id:"n103",loc:[-85.637386,41.942054]},n1030:{id:"n1030",loc:[-85.640947,41.942057]},n1031:{id:"n1031",loc:[-85.640957,41.942593]},n1032:{id:"n1032",loc:[-85.630953,41.960873]},n1033:{id:"n1033",loc:[-85.632174,41.960679]},n1034:{id:"n1034",loc:[-85.638785,41.943066]},n1035:{id:"n1035",loc:[-85.638853,41.943065]},n1036:{id:"n1036",loc:[-85.638855,41.943183]},n1037:{id:"n1037",loc:[-85.638552,41.943189]},n1038:{id:"n1038",loc:[-85.63855,41.943149]},n1039:{id:"n1039",loc:[-85.638638,41.943068]},n104:{id:"n104",loc:[-85.637387,41.942125]},n1040:{id:"n1040",loc:[-85.638638,41.943078]},n1041:{id:"n1041",loc:[-85.638813,41.943163]},n1042:{id:"n1042",loc:[-85.638684,41.943165]},n1043:{id:"n1043",loc:[-85.638682,41.943105]},n1044:{id:"n1044",loc:[-85.638706,41.943105]},n1045:{id:"n1045",loc:[-85.638707,41.943117]},n1046:{id:"n1046",loc:[-85.638812,41.943115]},n1047:{id:"n1047",loc:[-85.638769,41.943407]},n1048:{id:"n1048",loc:[-85.638549,41.943407]},n1049:{id:"n1049",loc:[-85.638567,41.943555]},n105:{id:"n105",loc:[-85.637319,41.942125]},n1050:{id:"n1050",loc:[-85.638426,41.943554]},n1051:{id:"n1051",loc:[-85.638427,41.94346]},n1052:{id:"n1052",loc:[-85.638568,41.943461]},n1053:{id:"n1053",loc:[-85.639264,41.943415]},n1054:{id:"n1054",loc:[-85.639082,41.943417]},n1055:{id:"n1055",loc:[-85.63908,41.943331]},n1056:{id:"n1056",loc:[-85.639136,41.94333]},n1057:{id:"n1057",loc:[-85.639158,41.943312]},n1058:{id:"n1058",loc:[-85.639188,41.943313]},n1059:{id:"n1059",loc:[-85.639211,41.943331]},n106:{id:"n106",loc:[-85.637319,41.942137]},n1060:{id:"n1060",loc:[-85.639262,41.943331]},n1061:{id:"n1061",loc:[-85.638986,41.943515]},n1062:{id:"n1062",loc:[-85.63888,41.943521]},n1063:{id:"n1063",loc:[-85.638871,41.943436]},n1064:{id:"n1064",loc:[-85.638958,41.943431]},n1065:{id:"n1065",loc:[-85.638979,41.943443]},n1066:{id:"n1066",loc:[-85.63926,41.943703]},n1067:{id:"n1067",loc:[-85.639152,41.943704]},n1068:{id:"n1068",loc:[-85.639152,41.943691]},n1069:{id:"n1069",loc:[-85.639063,41.943691]},n107:{id:"n107",loc:[-85.637259,41.942137]},n1070:{id:"n1070",loc:[-85.639062,41.943613]},n1071:{id:"n1071",loc:[-85.639259,41.943611]},n1072:{id:"n1072",loc:[-85.639117,41.943726]},n1073:{id:"n1073",loc:[-85.639118,41.943767]},n1074:{id:"n1074",loc:[-85.639051,41.943768]},n1075:{id:"n1075",loc:[-85.63905,41.943727]},n1076:{id:"n1076",loc:[-85.638627,41.943716]},n1077:{id:"n1077",loc:[-85.63863,41.943634]},n1078:{id:"n1078",loc:[-85.63844,41.943631]},n1079:{id:"n1079",loc:[-85.638437,41.943729]},n108:{id:"n108",loc:[-85.637259,41.942126]},n1080:{id:"n1080",loc:[-85.638533,41.94373]},n1081:{id:"n1081",loc:[-85.638534,41.943715]},n1082:{id:"n1082",loc:[-85.638678,41.943941]},n1083:{id:"n1083",loc:[-85.638522,41.943944]},n1084:{id:"n1084",loc:[-85.63852,41.943864]},n1085:{id:"n1085",loc:[-85.638676,41.943861]},n1086:{id:"n1086",loc:[-85.638663,41.944059]},n1087:{id:"n1087",loc:[-85.638513,41.944061]},n1088:{id:"n1088",loc:[-85.638511,41.943991]},n1089:{id:"n1089",loc:[-85.638661,41.943989]},n109:{id:"n109",loc:[-85.637193,41.942126]},n1090:{id:"n1090",loc:[-85.63865,41.944134]},n1091:{id:"n1091",loc:[-85.638429,41.944144]},n1092:{id:"n1092",loc:[-85.638426,41.944106]},n1093:{id:"n1093",loc:[-85.638476,41.944104]},n1094:{id:"n1094",loc:[-85.638475,41.94409]},n1095:{id:"n1095",loc:[-85.638594,41.944084]},n1096:{id:"n1096",loc:[-85.638595,41.944101]},n1097:{id:"n1097",loc:[-85.638647,41.944099]},n1098:{id:"n1098",loc:[-85.63829,41.944154]},n1099:{id:"n1099",loc:[-85.638558,41.944155]},n11:{id:"n11",loc:[-85.634602,41.941523]},n110:{id:"n110",loc:[-85.637192,41.942053]},n1100:{id:"n1100",loc:[-85.638558,41.944338]},n1101:{id:"n1101",loc:[-85.638851,41.944408]},n1102:{id:"n1102",loc:[-85.637771,41.943989]},n1103:{id:"n1103",loc:[-85.639345,41.943964]},n1104:{id:"n1104",loc:[-85.638515,41.94397]},n1105:{id:"n1105",loc:[-85.639256,41.943928]},n1106:{id:"n1106",loc:[-85.639157,41.943929]},n1107:{id:"n1107",loc:[-85.639156,41.9439]},n1108:{id:"n1108",loc:[-85.639118,41.9439]},n1109:{id:"n1109",loc:[-85.639116,41.94382]},n111:{id:"n111",loc:[-85.637248,41.942053]},n1110:{id:"n1110",loc:[-85.639202,41.943819]},n1111:{id:"n1111",loc:[-85.639202,41.943837]},n1112:{id:"n1112",loc:[-85.639293,41.943836]},n1113:{id:"n1113",loc:[-85.639295,41.943898]},n1114:{id:"n1114",loc:[-85.639255,41.943898]},n1115:{id:"n1115",loc:[-85.639296,41.944083]},n1116:{id:"n1116",loc:[-85.639144,41.944084]},n1117:{id:"n1117",loc:[-85.639143,41.944026]},n1118:{id:"n1118",loc:[-85.639162,41.944026]},n1119:{id:"n1119",loc:[-85.639162,41.944]},n112:{id:"n112",loc:[-85.637248,41.942042]},n1120:{id:"n1120",loc:[-85.639295,41.943999]},n1121:{id:"n1121",loc:[-85.639131,41.944139]},n1122:{id:"n1122",loc:[-85.63901,41.94414]},n1123:{id:"n1123",loc:[-85.63901,41.944076]},n1124:{id:"n1124",loc:[-85.63913,41.944075]},n1125:{id:"n1125",loc:[-85.639092,41.944155]},n1126:{id:"n1126",loc:[-85.639093,41.944308]},n1127:{id:"n1127",loc:[-85.639225,41.944308]},n1128:{id:"n1128",loc:[-85.639225,41.94429]},n1129:{id:"n1129",loc:[-85.639253,41.944289]},n113:{id:"n113",loc:[-85.637338,41.942041]},n1130:{id:"n1130",loc:[-85.639253,41.944269]},n1131:{id:"n1131",loc:[-85.639243,41.944269]},n1132:{id:"n1132",loc:[-85.639243,41.944229]},n1133:{id:"n1133",loc:[-85.639224,41.944229]},n1134:{id:"n1134",loc:[-85.639224,41.944196]},n1135:{id:"n1135",loc:[-85.639195,41.944196]},n1136:{id:"n1136",loc:[-85.639195,41.944155]},n1137:{id:"n1137",loc:[-85.639072,41.944154]},n1138:{id:"n1138",loc:[-85.638865,41.944154]},n1139:{id:"n1139",loc:[-85.638863,41.943967]},n114:{id:"n114",loc:[-85.637338,41.942055]},n1140:{id:"n1140",loc:[-85.6386,41.942698]},n1141:{id:"n1141",loc:[-85.639348,41.942698]},n1142:{id:"n1142",loc:[-85.639377,41.944984]},n1143:{id:"n1143",loc:[-85.63937,41.945013]},n1144:{id:"n1144",loc:[-85.639357,41.945033]},n1145:{id:"n1145",loc:[-85.639353,41.945053]},n1146:{id:"n1146",loc:[-85.639352,41.945084]},n1147:{id:"n1147",loc:[-85.638278,41.945516]},n1148:{id:"n1148",loc:[-85.637505,41.945801]},n1149:{id:"n1149",loc:[-85.637327,41.945857]},n115:{id:"n115",loc:[-85.637583,41.941943]},n1150:{id:"n1150",loc:[-85.637168,41.945899]},n1151:{id:"n1151",loc:[-85.637017,41.94593]},n1152:{id:"n1152",loc:[-85.637185,41.945938]},n1153:{id:"n1153",loc:[-85.63682,41.945963]},n1154:{id:"n1154",loc:[-85.636639,41.945984]},n1155:{id:"n1155",loc:[-85.636439,41.945999]},n1156:{id:"n1156",loc:[-85.635801,41.945999]},n1157:{id:"n1157",loc:[-85.635769,41.945908]},n1158:{id:"n1158",loc:[-85.635953,41.946154]},n1159:{id:"n1159",loc:[-85.635472,41.94598]},n116:{id:"n116",loc:[-85.637584,41.941983]},n1160:{id:"n1160",loc:[-85.635409,41.945981]},n1161:{id:"n1161",loc:[-85.635583,41.945987]},n1162:{id:"n1162",loc:[-85.636452,41.945805]},n1163:{id:"n1163",loc:[-85.636425,41.94582]},n1164:{id:"n1164",loc:[-85.636396,41.945817]},n1165:{id:"n1165",loc:[-85.636368,41.945797]},n1166:{id:"n1166",loc:[-85.636346,41.945767]},n1167:{id:"n1167",loc:[-85.636307,41.945745]},n1168:{id:"n1168",loc:[-85.636194,41.94565]},n1169:{id:"n1169",loc:[-85.636121,41.945579]},n117:{id:"n117",loc:[-85.63751,41.941983]},n1170:{id:"n1170",loc:[-85.635995,41.945432]},n1171:{id:"n1171",loc:[-85.637564,41.943538]},n1172:{id:"n1172",loc:[-85.63756,41.943505]},n1173:{id:"n1173",loc:[-85.637435,41.943489]},n1174:{id:"n1174",loc:[-85.637093,41.943556]},n1175:{id:"n1175",loc:[-85.634836,41.941574]},n1176:{id:"n1176",loc:[-85.634692,41.9415]},n1177:{id:"n1177",loc:[-85.634261,41.941337]},n1178:{id:"n1178",loc:[-85.634208,41.940962]},n1179:{id:"n1179",loc:[-85.635247,41.940968]},n118:{id:"n118",loc:[-85.637509,41.941944]},n1180:{id:"n1180",loc:[-85.63514,41.941205]},n1181:{id:"n1181",loc:[-85.634858,41.941511]},n1182:{id:"n1182",loc:[-85.630725,41.943465]},n1183:{id:"n1183",loc:[-85.632591,41.942826]},n1184:{id:"n1184",loc:[-85.634487,41.941928]},n1185:{id:"n1185",loc:[-85.634499,41.942056]},n1186:{id:"n1186",loc:[-85.63433,41.943102]},n1187:{id:"n1187",loc:[-85.634158,41.943151]},n1188:{id:"n1188",loc:[-85.634107,41.94305]},n1189:{id:"n1189",loc:[-85.634279,41.943002]},n119:{id:"n119",loc:[-85.637724,41.941973]},n1190:{id:"n1190",loc:[-85.634362,41.943762]},n1191:{id:"n1191",loc:[-85.634331,41.943731]},n1192:{id:"n1192",loc:[-85.634396,41.943695]},n1193:{id:"n1193",loc:[-85.634426,41.943726]},n1194:{id:"n1194",loc:[-85.621569,41.956021]},n1195:{id:"n1195",loc:[-85.621574,41.956164]},n1196:{id:"n1196",loc:[-85.621489,41.956165]},n1197:{id:"n1197",loc:[-85.621488,41.956136]},n1198:{id:"n1198",loc:[-85.621372,41.956139]},n1199:{id:"n1199",loc:[-85.621369,41.956049]},n12:{id:"n12",loc:[-85.63359,41.941093]},n120:{id:"n120",loc:[-85.637633,41.941973]},n1200:{id:"n1200",loc:[-85.621493,41.956047]},n1201:{id:"n1201",loc:[-85.621492,41.956022]},n1202:{id:"n1202",loc:[-85.619744,41.953192]},n1203:{id:"n1203",loc:[-85.619059,41.953902]},n1204:{id:"n1204",loc:[-85.623984,41.95469]},n1205:{id:"n1205",loc:[-85.630159,41.958208]},n1206:{id:"n1206",loc:[-85.63002,41.958208]},n1207:{id:"n1207",loc:[-85.630021,41.95814]},n1208:{id:"n1208",loc:[-85.63,41.95814]},n1209:{id:"n1209",loc:[-85.63,41.958043]},n121:{id:"n121",loc:[-85.637633,41.941853]},n1210:{id:"n1210",loc:[-85.630159,41.958043]},n1211:{id:"n1211",loc:[-85.630304,41.957566]},n1212:{id:"n1212",loc:[-85.630303,41.957684]},n1213:{id:"n1213",loc:[-85.630073,41.957683]},n1214:{id:"n1214",loc:[-85.630072,41.957721]},n1215:{id:"n1215",loc:[-85.629993,41.95772]},n1216:{id:"n1216",loc:[-85.629993,41.95768]},n1217:{id:"n1217",loc:[-85.629968,41.95768]},n1218:{id:"n1218",loc:[-85.629969,41.957588]},n1219:{id:"n1219",loc:[-85.630219,41.95759]},n122:{id:"n122",loc:[-85.637724,41.941853]},n1220:{id:"n1220",loc:[-85.630219,41.957566]},n1221:{id:"n1221",loc:[-85.630717,41.957744]},n1222:{id:"n1222",loc:[-85.630596,41.957745]},n1223:{id:"n1223",loc:[-85.630598,41.957553]},n1224:{id:"n1224",loc:[-85.630717,41.957555]},n1225:{id:"n1225",loc:[-85.630609,41.957745]},n1226:{id:"n1226",loc:[-85.63061,41.957789]},n1227:{id:"n1227",loc:[-85.630327,41.957791]},n1228:{id:"n1228",loc:[-85.630324,41.95752]},n1229:{id:"n1229",loc:[-85.630325,41.95756]},n123:{id:"n123",loc:[-85.637773,41.941988]},n1230:{id:"n1230",loc:[-85.63057,41.95756]},n1231:{id:"n1231",loc:[-85.63069,41.958016]},n1232:{id:"n1232",loc:[-85.630586,41.958017]},n1233:{id:"n1233",loc:[-85.630584,41.957956]},n1234:{id:"n1234",loc:[-85.630614,41.957956]},n1235:{id:"n1235",loc:[-85.630611,41.957835]},n1236:{id:"n1236",loc:[-85.630737,41.957833]},n1237:{id:"n1237",loc:[-85.630739,41.957921]},n1238:{id:"n1238",loc:[-85.630688,41.957922]},n1239:{id:"n1239",loc:[-85.630719,41.958291]},n124:{id:"n124",loc:[-85.637773,41.942046]},n1240:{id:"n1240",loc:[-85.630592,41.958291]},n1241:{id:"n1241",loc:[-85.630593,41.958108]},n1242:{id:"n1242",loc:[-85.630701,41.958109]},n1243:{id:"n1243",loc:[-85.6307,41.958173]},n1244:{id:"n1244",loc:[-85.630711,41.958173]},n1245:{id:"n1245",loc:[-85.630711,41.958233]},n1246:{id:"n1246",loc:[-85.630719,41.958233]},n1247:{id:"n1247",loc:[-85.630523,41.958329]},n1248:{id:"n1248",loc:[-85.630388,41.958329]},n1249:{id:"n1249",loc:[-85.630387,41.958262]},n125:{id:"n125",loc:[-85.637693,41.942047]},n1250:{id:"n1250",loc:[-85.630523,41.958261]},n1251:{id:"n1251",loc:[-85.63072,41.958636]},n1252:{id:"n1252",loc:[-85.630721,41.958709]},n1253:{id:"n1253",loc:[-85.630503,41.958712]},n1254:{id:"n1254",loc:[-85.630498,41.958511]},n1255:{id:"n1255",loc:[-85.630635,41.95851]},n1256:{id:"n1256",loc:[-85.630638,41.958636]},n1257:{id:"n1257",loc:[-85.630437,41.958822]},n1258:{id:"n1258",loc:[-85.630437,41.958849]},n1259:{id:"n1259",loc:[-85.630393,41.958849]},n126:{id:"n126",loc:[-85.637692,41.941988]},n1260:{id:"n1260",loc:[-85.630393,41.958822]},n1261:{id:"n1261",loc:[-85.630605,41.959102]},n1262:{id:"n1262",loc:[-85.63049,41.959104]},n1263:{id:"n1263",loc:[-85.630487,41.958996]},n1264:{id:"n1264",loc:[-85.630462,41.958996]},n1265:{id:"n1265",loc:[-85.63046,41.958922]},n1266:{id:"n1266",loc:[-85.630562,41.958921]},n1267:{id:"n1267",loc:[-85.630564,41.958992]},n1268:{id:"n1268",loc:[-85.630602,41.958992]},n1269:{id:"n1269",loc:[-85.630126,41.957096]},n127:{id:"n127",loc:[-85.637604,41.941994]},n1270:{id:"n1270",loc:[-85.630129,41.957283]},n1271:{id:"n1271",loc:[-85.629993,41.957284]},n1272:{id:"n1272",loc:[-85.629992,41.957216]},n1273:{id:"n1273",loc:[-85.630015,41.957215]},n1274:{id:"n1274",loc:[-85.630013,41.957097]},n1275:{id:"n1275",loc:[-85.630211,41.956592]},n1276:{id:"n1276",loc:[-85.630211,41.956676]},n1277:{id:"n1277",loc:[-85.630162,41.956676]},n1278:{id:"n1278",loc:[-85.630162,41.95676]},n1279:{id:"n1279",loc:[-85.630037,41.956761]},n128:{id:"n128",loc:[-85.637604,41.942057]},n1280:{id:"n1280",loc:[-85.630037,41.956592]},n1281:{id:"n1281",loc:[-85.630309,41.95653]},n1282:{id:"n1282",loc:[-85.630326,41.957065]},n1283:{id:"n1283",loc:[-85.630118,41.957065]},n1284:{id:"n1284",loc:[-85.630119,41.957096]},n1285:{id:"n1285",loc:[-85.63067,41.957307]},n1286:{id:"n1286",loc:[-85.630536,41.957308]},n1287:{id:"n1287",loc:[-85.630533,41.957111]},n1288:{id:"n1288",loc:[-85.630667,41.95711]},n1289:{id:"n1289",loc:[-85.630676,41.956808]},n129:{id:"n129",loc:[-85.63748,41.942057]},n1290:{id:"n1290",loc:[-85.630551,41.956808]},n1291:{id:"n1291",loc:[-85.630552,41.956982]},n1292:{id:"n1292",loc:[-85.63059,41.956982]},n1293:{id:"n1293",loc:[-85.63059,41.957001]},n1294:{id:"n1294",loc:[-85.630692,41.957001]},n1295:{id:"n1295",loc:[-85.630692,41.956936]},n1296:{id:"n1296",loc:[-85.630676,41.956936]},n1297:{id:"n1297",loc:[-85.630496,41.956889]},n1298:{id:"n1298",loc:[-85.630501,41.956947]},n1299:{id:"n1299",loc:[-85.630377,41.956953]},n13:{id:"n13",loc:[-85.633643,41.941143]},n130:{id:"n130",loc:[-85.63748,41.941994]},n1300:{id:"n1300",loc:[-85.630359,41.956938]},n1301:{id:"n1301",loc:[-85.630359,41.956912]},n1302:{id:"n1302",loc:[-85.63038,41.956894]},n1303:{id:"n1303",loc:[-85.630679,41.956747]},n1304:{id:"n1304",loc:[-85.630572,41.956748]},n1305:{id:"n1305",loc:[-85.63057,41.956668]},n1306:{id:"n1306",loc:[-85.630501,41.956669]},n1307:{id:"n1307",loc:[-85.630499,41.95659]},n1308:{id:"n1308",loc:[-85.630565,41.956589]},n1309:{id:"n1309",loc:[-85.630564,41.956541]},n131:{id:"n131",loc:[-85.637431,41.941832]},n1310:{id:"n1310",loc:[-85.630686,41.956539]},n1311:{id:"n1311",loc:[-85.630688,41.956631]},n1312:{id:"n1312",loc:[-85.630676,41.956631]},n1313:{id:"n1313",loc:[-85.630686,41.956487]},n1314:{id:"n1314",loc:[-85.63059,41.956487]},n1315:{id:"n1315",loc:[-85.63059,41.956396]},n1316:{id:"n1316",loc:[-85.630686,41.956396]},n1317:{id:"n1317",loc:[-85.630643,41.9563]},n1318:{id:"n1318",loc:[-85.630548,41.956301]},n1319:{id:"n1319",loc:[-85.630545,41.956217]},n132:{id:"n132",loc:[-85.637432,41.94189]},n1320:{id:"n1320",loc:[-85.630529,41.956214]},n1321:{id:"n1321",loc:[-85.630521,41.956202]},n1322:{id:"n1322",loc:[-85.63052,41.95618]},n1323:{id:"n1323",loc:[-85.630527,41.956169]},n1324:{id:"n1324",loc:[-85.630544,41.956163]},n1325:{id:"n1325",loc:[-85.630543,41.956094]},n1326:{id:"n1326",loc:[-85.630641,41.956093]},n1327:{id:"n1327",loc:[-85.630642,41.956134]},n1328:{id:"n1328",loc:[-85.630656,41.956134]},n1329:{id:"n1329",loc:[-85.630657,41.956252]},n133:{id:"n133",loc:[-85.637412,41.94189]},n1330:{id:"n1330",loc:[-85.630643,41.956252]},n1331:{id:"n1331",loc:[-85.630409,41.956044]},n1332:{id:"n1332",loc:[-85.630409,41.956075]},n1333:{id:"n1333",loc:[-85.630195,41.956078]},n1334:{id:"n1334",loc:[-85.630195,41.9561]},n1335:{id:"n1335",loc:[-85.630088,41.956101]},n1336:{id:"n1336",loc:[-85.630087,41.956048]},n1337:{id:"n1337",loc:[-85.630345,41.956114]},n1338:{id:"n1338",loc:[-85.630328,41.956113]},n1339:{id:"n1339",loc:[-85.63034,41.956189]},n134:{id:"n134",loc:[-85.637413,41.941938]},n1340:{id:"n1340",loc:[-85.630355,41.956185]},n1341:{id:"n1341",loc:[-85.630311,41.956117]},n1342:{id:"n1342",loc:[-85.630297,41.956125]},n1343:{id:"n1343",loc:[-85.630287,41.956136]},n1344:{id:"n1344",loc:[-85.630283,41.956149]},n1345:{id:"n1345",loc:[-85.630285,41.956162]},n1346:{id:"n1346",loc:[-85.630293,41.956174]},n1347:{id:"n1347",loc:[-85.630306,41.956183]},n1348:{id:"n1348",loc:[-85.630322,41.956188]},n1349:{id:"n1349",loc:[-85.630368,41.956179]},n135:{id:"n135",loc:[-85.637342,41.941939]},n1350:{id:"n1350",loc:[-85.630378,41.95617]},n1351:{id:"n1351",loc:[-85.630384,41.956159]},n1352:{id:"n1352",loc:[-85.630385,41.956147]},n1353:{id:"n1353",loc:[-85.630381,41.956136]},n1354:{id:"n1354",loc:[-85.630372,41.956126]},n1355:{id:"n1355",loc:[-85.63036,41.956118]},n1356:{id:"n1356",loc:[-85.630776,41.956041]},n1357:{id:"n1357",loc:[-85.630195,41.956036]},n1358:{id:"n1358",loc:[-85.630137,41.956037]},n1359:{id:"n1359",loc:[-85.630136,41.956006]},n136:{id:"n136",loc:[-85.637342,41.941914]},n1360:{id:"n1360",loc:[-85.630194,41.956005]},n1361:{id:"n1361",loc:[-85.629864,41.956039]},n1362:{id:"n1362",loc:[-85.629864,41.955862]},n1363:{id:"n1363",loc:[-85.629541,41.958291]},n1364:{id:"n1364",loc:[-85.629419,41.958292]},n1365:{id:"n1365",loc:[-85.629417,41.958168]},n1366:{id:"n1366",loc:[-85.629445,41.958168]},n1367:{id:"n1367",loc:[-85.629444,41.958109]},n1368:{id:"n1368",loc:[-85.629537,41.958108]},n1369:{id:"n1369",loc:[-85.629351,41.958136]},n137:{id:"n137",loc:[-85.637212,41.941916]},n1370:{id:"n1370",loc:[-85.629352,41.958202]},n1371:{id:"n1371",loc:[-85.629365,41.958202]},n1372:{id:"n1372",loc:[-85.629365,41.958223]},n1373:{id:"n1373",loc:[-85.629291,41.958224]},n1374:{id:"n1374",loc:[-85.62929,41.958137]},n1375:{id:"n1375",loc:[-85.629443,41.958073]},n1376:{id:"n1376",loc:[-85.629252,41.958075]},n1377:{id:"n1377",loc:[-85.629253,41.95827]},n1378:{id:"n1378",loc:[-85.629566,41.957585]},n1379:{id:"n1379",loc:[-85.629566,41.957692]},n138:{id:"n138",loc:[-85.637211,41.941835]},n1380:{id:"n1380",loc:[-85.629281,41.957693]},n1381:{id:"n1381",loc:[-85.62928,41.957585]},n1382:{id:"n1382",loc:[-85.629004,41.957599]},n1383:{id:"n1383",loc:[-85.629004,41.957682]},n1384:{id:"n1384",loc:[-85.628902,41.957682]},n1385:{id:"n1385",loc:[-85.628902,41.957723]},n1386:{id:"n1386",loc:[-85.628731,41.957724]},n1387:{id:"n1387",loc:[-85.628731,41.9576]},n1388:{id:"n1388",loc:[-85.62836,41.957679]},n1389:{id:"n1389",loc:[-85.628359,41.957759]},n139:{id:"n139",loc:[-85.637293,41.941834]},n1390:{id:"n1390",loc:[-85.628062,41.957757]},n1391:{id:"n1391",loc:[-85.628063,41.957657]},n1392:{id:"n1392",loc:[-85.628198,41.957657]},n1393:{id:"n1393",loc:[-85.628198,41.957678]},n1394:{id:"n1394",loc:[-85.627775,41.958095]},n1395:{id:"n1395",loc:[-85.627608,41.958095]},n1396:{id:"n1396",loc:[-85.627606,41.957829]},n1397:{id:"n1397",loc:[-85.627774,41.957829]},n1398:{id:"n1398",loc:[-85.626816,41.957636]},n1399:{id:"n1399",loc:[-85.626787,41.957681]},n14:{id:"n14",loc:[-85.633643,41.940122]},n140:{id:"n140",loc:[-85.637293,41.941823]},n1400:{id:"n1400",loc:[-85.626673,41.95764]},n1401:{id:"n1401",loc:[-85.626703,41.957594]},n1402:{id:"n1402",loc:[-85.62694,41.95752]},n1403:{id:"n1403",loc:[-85.62688,41.957611]},n1404:{id:"n1404",loc:[-85.626798,41.957582]},n1405:{id:"n1405",loc:[-85.626793,41.95759]},n1406:{id:"n1406",loc:[-85.626657,41.95754]},n1407:{id:"n1407",loc:[-85.626666,41.957526]},n1408:{id:"n1408",loc:[-85.626584,41.957497]},n1409:{id:"n1409",loc:[-85.626638,41.957415]},n141:{id:"n141",loc:[-85.637363,41.941822]},n1410:{id:"n1410",loc:[-85.626731,41.957449]},n1411:{id:"n1411",loc:[-85.626725,41.957457]},n1412:{id:"n1412",loc:[-85.626843,41.9575]},n1413:{id:"n1413",loc:[-85.626851,41.957487]},n1414:{id:"n1414",loc:[-85.626579,41.957521]},n1415:{id:"n1415",loc:[-85.626537,41.957587]},n1416:{id:"n1416",loc:[-85.626427,41.957551]},n1417:{id:"n1417",loc:[-85.626468,41.957483]},n1418:{id:"n1418",loc:[-85.626592,41.957639]},n1419:{id:"n1419",loc:[-85.626807,41.957713]},n142:{id:"n142",loc:[-85.637364,41.941833]},n1420:{id:"n1420",loc:[-85.627129,41.957401]},n1421:{id:"n1421",loc:[-85.627209,41.95742]},n1422:{id:"n1422",loc:[-85.627302,41.957435]},n1423:{id:"n1423",loc:[-85.629566,41.957048]},n1424:{id:"n1424",loc:[-85.629568,41.957215]},n1425:{id:"n1425",loc:[-85.629383,41.957216]},n1426:{id:"n1426",loc:[-85.629384,41.95727]},n1427:{id:"n1427",loc:[-85.629231,41.957271]},n1428:{id:"n1428",loc:[-85.62923,41.957198]},n1429:{id:"n1429",loc:[-85.629322,41.957198]},n143:{id:"n143",loc:[-85.637559,41.942448]},n1430:{id:"n1430",loc:[-85.629321,41.957108]},n1431:{id:"n1431",loc:[-85.629441,41.957108]},n1432:{id:"n1432",loc:[-85.62944,41.957049]},n1433:{id:"n1433",loc:[-85.629337,41.957018]},n1434:{id:"n1434",loc:[-85.629366,41.957028]},n1435:{id:"n1435",loc:[-85.629375,41.957044]},n1436:{id:"n1436",loc:[-85.629354,41.957071]},n1437:{id:"n1437",loc:[-85.629317,41.957071]},n1438:{id:"n1438",loc:[-85.62929,41.957074]},n1439:{id:"n1439",loc:[-85.62927,41.957084]},n144:{id:"n144",loc:[-85.637036,41.942454]},n1440:{id:"n1440",loc:[-85.629232,41.957081]},n1441:{id:"n1441",loc:[-85.629222,41.957057]},n1442:{id:"n1442",loc:[-85.629259,41.957025]},n1443:{id:"n1443",loc:[-85.629293,41.957017]},n1444:{id:"n1444",loc:[-85.629251,41.957085]},n1445:{id:"n1445",loc:[-85.629235,41.957041]},n1446:{id:"n1446",loc:[-85.62937,41.95706]},n1447:{id:"n1447",loc:[-85.629531,41.956909]},n1448:{id:"n1448",loc:[-85.629408,41.956909]},n1449:{id:"n1449",loc:[-85.629402,41.956681]},n145:{id:"n145",loc:[-85.636692,41.942828]},n1450:{id:"n1450",loc:[-85.62953,41.956681]},n1451:{id:"n1451",loc:[-85.629402,41.956728]},n1452:{id:"n1452",loc:[-85.629408,41.956845]},n1453:{id:"n1453",loc:[-85.629385,41.956845]},n1454:{id:"n1454",loc:[-85.629384,41.956728]},n1455:{id:"n1455",loc:[-85.629063,41.956973]},n1456:{id:"n1456",loc:[-85.629064,41.957009]},n1457:{id:"n1457",loc:[-85.62902,41.957009]},n1458:{id:"n1458",loc:[-85.629019,41.956973]},n1459:{id:"n1459",loc:[-85.629136,41.956633]},n146:{id:"n146",loc:[-85.635929,41.942826]},n1460:{id:"n1460",loc:[-85.629084,41.956632]},n1461:{id:"n1461",loc:[-85.629084,41.956605]},n1462:{id:"n1462",loc:[-85.629136,41.956605]},n1463:{id:"n1463",loc:[-85.629153,41.956657]},n1464:{id:"n1464",loc:[-85.627914,41.956661]},n1465:{id:"n1465",loc:[-85.630096,41.956101]},n1466:{id:"n1466",loc:[-85.630097,41.95612]},n1467:{id:"n1467",loc:[-85.630011,41.956121]},n1468:{id:"n1468",loc:[-85.630015,41.956374]},n1469:{id:"n1469",loc:[-85.629148,41.95626]},n147:{id:"n147",loc:[-85.636433,41.942828]},n1470:{id:"n1470",loc:[-85.629527,41.956591]},n1471:{id:"n1471",loc:[-85.629405,41.956591]},n1472:{id:"n1472",loc:[-85.629405,41.956459]},n1473:{id:"n1473",loc:[-85.629369,41.956459]},n1474:{id:"n1474",loc:[-85.629369,41.956424]},n1475:{id:"n1475",loc:[-85.629413,41.956424]},n1476:{id:"n1476",loc:[-85.629414,41.956326]},n1477:{id:"n1477",loc:[-85.629522,41.956326]},n1478:{id:"n1478",loc:[-85.629522,41.956487]},n1479:{id:"n1479",loc:[-85.629527,41.956487]},n148:{id:"n148",loc:[-85.636435,41.942864],tags:{entrance:"yes"}},n1480:{id:"n1480",loc:[-85.629414,41.95634]},n1481:{id:"n1481",loc:[-85.629149,41.956338]},n1482:{id:"n1482",loc:[-85.62931,41.956531]},n1483:{id:"n1483",loc:[-85.629291,41.95655]},n1484:{id:"n1484",loc:[-85.629255,41.95655]},n1485:{id:"n1485",loc:[-85.629236,41.956533]},n1486:{id:"n1486",loc:[-85.629237,41.956461]},n1487:{id:"n1487",loc:[-85.629257,41.956445]},n1488:{id:"n1488",loc:[-85.629257,41.956428]},n1489:{id:"n1489",loc:[-85.629287,41.956428]},n149:{id:"n149",loc:[-85.637235,41.942622]},n1490:{id:"n1490",loc:[-85.629287,41.956445]},n1491:{id:"n1491",loc:[-85.62931,41.95646]},n1492:{id:"n1492",loc:[-85.629049,41.956425]},n1493:{id:"n1493",loc:[-85.628907,41.956427]},n1494:{id:"n1494",loc:[-85.628907,41.956455]},n1495:{id:"n1495",loc:[-85.628841,41.956455]},n1496:{id:"n1496",loc:[-85.62884,41.956424]},n1497:{id:"n1497",loc:[-85.628764,41.956425]},n1498:{id:"n1498",loc:[-85.628762,41.956323]},n1499:{id:"n1499",loc:[-85.628808,41.956323]},n15:{id:"n15",loc:[-85.633477,41.940187]},n150:{id:"n150",loc:[-85.637247,41.943116]},n1500:{id:"n1500",loc:[-85.628808,41.956314]},n1501:{id:"n1501",loc:[-85.628911,41.956313]},n1502:{id:"n1502",loc:[-85.628911,41.956322]},n1503:{id:"n1503",loc:[-85.62896,41.956322]},n1504:{id:"n1504",loc:[-85.62896,41.956348]},n1505:{id:"n1505",loc:[-85.629047,41.956347]},n1506:{id:"n1506",loc:[-85.628893,41.957263]},n1507:{id:"n1507",loc:[-85.628788,41.957264]},n1508:{id:"n1508",loc:[-85.628786,41.95711]},n1509:{id:"n1509",loc:[-85.628894,41.957109]},n151:{id:"n151",loc:[-85.637564,41.943116]},n1510:{id:"n1510",loc:[-85.628893,41.957075]},n1511:{id:"n1511",loc:[-85.628965,41.957075]},n1512:{id:"n1512",loc:[-85.628965,41.957111]},n1513:{id:"n1513",loc:[-85.629035,41.95711]},n1514:{id:"n1514",loc:[-85.629036,41.957209]},n1515:{id:"n1515",loc:[-85.628893,41.95721]},n1516:{id:"n1516",loc:[-85.631348,41.95773]},n1517:{id:"n1517",loc:[-85.631101,41.957732]},n1518:{id:"n1518",loc:[-85.631099,41.957558]},n1519:{id:"n1519",loc:[-85.63123,41.957557]},n152:{id:"n152",loc:[-85.637552,41.942619]},n1520:{id:"n1520",loc:[-85.631231,41.957618]},n1521:{id:"n1521",loc:[-85.63129,41.957618]},n1522:{id:"n1522",loc:[-85.63129,41.957651]},n1523:{id:"n1523",loc:[-85.631346,41.957651]},n1524:{id:"n1524",loc:[-85.631366,41.95802]},n1525:{id:"n1525",loc:[-85.631141,41.958021]},n1526:{id:"n1526",loc:[-85.63114,41.957943]},n1527:{id:"n1527",loc:[-85.631167,41.957943]},n1528:{id:"n1528",loc:[-85.631166,41.957808]},n1529:{id:"n1529",loc:[-85.631301,41.957807]},n153:{id:"n153",loc:[-85.63763,41.942528]},n1530:{id:"n1530",loc:[-85.631302,41.95789]},n1531:{id:"n1531",loc:[-85.631364,41.95789]},n1532:{id:"n1532",loc:[-85.631539,41.957754]},n1533:{id:"n1533",loc:[-85.631069,41.957756]},n1534:{id:"n1534",loc:[-85.631536,41.957518]},n1535:{id:"n1535",loc:[-85.631543,41.957995]},n1536:{id:"n1536",loc:[-85.631531,41.957748]},n1537:{id:"n1537",loc:[-85.631485,41.957748]},n1538:{id:"n1538",loc:[-85.631484,41.957698]},n1539:{id:"n1539",loc:[-85.631531,41.957698]},n154:{id:"n154",loc:[-85.637151,41.94253]},n1540:{id:"n1540",loc:[-85.631586,41.957742]},n1541:{id:"n1541",loc:[-85.63155,41.957742]},n1542:{id:"n1542",loc:[-85.631551,41.957702]},n1543:{id:"n1543",loc:[-85.631587,41.957702]},n1544:{id:"n1544",loc:[-85.631534,41.95807]},n1545:{id:"n1545",loc:[-85.631534,41.958097]},n1546:{id:"n1546",loc:[-85.631491,41.958097]},n1547:{id:"n1547",loc:[-85.631491,41.95807]},n1548:{id:"n1548",loc:[-85.631304,41.958861]},n1549:{id:"n1549",loc:[-85.631186,41.958862]},n155:{id:"n155",loc:[-85.63715,41.942424]},n1550:{id:"n1550",loc:[-85.631182,41.958653]},n1551:{id:"n1551",loc:[-85.6313,41.958651]},n1552:{id:"n1552",loc:[-85.631293,41.95854]},n1553:{id:"n1553",loc:[-85.631176,41.958539]},n1554:{id:"n1554",loc:[-85.631176,41.958377]},n1555:{id:"n1555",loc:[-85.631297,41.958377]},n1556:{id:"n1556",loc:[-85.631297,41.958422]},n1557:{id:"n1557",loc:[-85.631333,41.958422]},n1558:{id:"n1558",loc:[-85.631333,41.958479]},n1559:{id:"n1559",loc:[-85.631293,41.958479]},n156:{id:"n156",loc:[-85.637629,41.942422]},n1560:{id:"n1560",loc:[-85.631951,41.958908]},n1561:{id:"n1561",loc:[-85.631838,41.958909]},n1562:{id:"n1562",loc:[-85.631837,41.958847]},n1563:{id:"n1563",loc:[-85.631859,41.958847]},n1564:{id:"n1564",loc:[-85.631858,41.958746]},n1565:{id:"n1565",loc:[-85.631961,41.958745]},n1566:{id:"n1566",loc:[-85.631962,41.958812]},n1567:{id:"n1567",loc:[-85.631949,41.958813]},n1568:{id:"n1568",loc:[-85.631579,41.958913]},n1569:{id:"n1569",loc:[-85.631567,41.95864]},n157:{id:"n157",loc:[-85.638232,41.942477]},n1570:{id:"n1570",loc:[-85.631942,41.958639]},n1571:{id:"n1571",loc:[-85.631543,41.958594]},n1572:{id:"n1572",loc:[-85.631543,41.958065]},n1573:{id:"n1573",loc:[-85.631888,41.958546]},n1574:{id:"n1574",loc:[-85.631804,41.958546]},n1575:{id:"n1575",loc:[-85.631803,41.95841]},n1576:{id:"n1576",loc:[-85.631886,41.958409]},n1577:{id:"n1577",loc:[-85.631897,41.958125]},n1578:{id:"n1578",loc:[-85.631755,41.958126]},n1579:{id:"n1579",loc:[-85.631756,41.958174]},n158:{id:"n158",loc:[-85.637775,41.942483]},n1580:{id:"n1580",loc:[-85.63178,41.958174]},n1581:{id:"n1581",loc:[-85.631782,41.958272]},n1582:{id:"n1582",loc:[-85.631922,41.958271]},n1583:{id:"n1583",loc:[-85.631922,41.958244]},n1584:{id:"n1584",loc:[-85.631883,41.958245]},n1585:{id:"n1585",loc:[-85.631882,41.958175]},n1586:{id:"n1586",loc:[-85.631898,41.958175]},n1587:{id:"n1587",loc:[-85.631924,41.958032]},n1588:{id:"n1588",loc:[-85.631762,41.958032]},n1589:{id:"n1589",loc:[-85.63176,41.957827]},n159:{id:"n159",loc:[-85.638107,41.942512]},n1590:{id:"n1590",loc:[-85.631888,41.957826]},n1591:{id:"n1591",loc:[-85.631888,41.957892]},n1592:{id:"n1592",loc:[-85.631871,41.957892]},n1593:{id:"n1593",loc:[-85.631872,41.957949]},n1594:{id:"n1594",loc:[-85.631923,41.957949]},n1595:{id:"n1595",loc:[-85.631695,41.95795]},n1596:{id:"n1596",loc:[-85.631666,41.957975]},n1597:{id:"n1597",loc:[-85.63163,41.957975]},n1598:{id:"n1598",loc:[-85.6316,41.957951]},n1599:{id:"n1599",loc:[-85.6316,41.95785]},n16:{id:"n16",loc:[-85.63341,41.94032]},n160:{id:"n160",loc:[-85.637763,41.942514]},n1600:{id:"n1600",loc:[-85.63166,41.95785]},n1601:{id:"n1601",loc:[-85.631696,41.957873]},n1602:{id:"n1602",loc:[-85.631924,41.957762]},n1603:{id:"n1603",loc:[-85.631762,41.957762]},n1604:{id:"n1604",loc:[-85.631762,41.957708]},n1605:{id:"n1605",loc:[-85.631785,41.957708]},n1606:{id:"n1606",loc:[-85.631785,41.957606]},n1607:{id:"n1607",loc:[-85.631734,41.957606]},n1608:{id:"n1608",loc:[-85.631734,41.957538]},n1609:{id:"n1609",loc:[-85.631821,41.957538]},n161:{id:"n161",loc:[-85.637763,41.942445]},n1610:{id:"n1610",loc:[-85.631935,41.957545]},n1611:{id:"n1611",loc:[-85.631821,41.957544]},n1612:{id:"n1612",loc:[-85.631935,41.957645]},n1613:{id:"n1613",loc:[-85.631924,41.957645]},n1614:{id:"n1614",loc:[-85.627135,41.953828]},n1615:{id:"n1615",loc:[-85.633517,41.941353],tags:{man_made:"lighthouse","seamark:type":"light_major"}},n1616:{id:"n1616",loc:[-85.633659,41.942041],tags:{amenity:"bbq"}},n1617:{id:"n1617",loc:[-85.63662,41.942911],tags:{amenity:"toilets"}},n1618:{id:"n1618",loc:[-85.637487,41.943876],tags:{amenity:"toilets"}},n1619:{id:"n1619",loc:[-85.634938,41.941917],tags:{amenity:"toilets"}},n162:{id:"n162",loc:[-85.638107,41.942443]},n1620:{id:"n1620",loc:[-85.632427,41.941678],tags:{amenity:"bbq"}},n1621:{id:"n1621",loc:[-85.638033,41.944568],tags:{amenity:"bbq"}},n1622:{id:"n1622",loc:[-85.638052,41.944522],tags:{amenity:"bbq"}},n1623:{id:"n1623",loc:[-85.635001,41.941965]},n1624:{id:"n1624",loc:[-85.634635,41.941884]},n1625:{id:"n1625",loc:[-85.634667,41.941894]},n1626:{id:"n1626",loc:[-85.634791,41.942011]},n1627:{id:"n1627",loc:[-85.634749,41.941938]},n1628:{id:"n1628",loc:[-85.627295,41.953946],tags:{barrier:"gate"}},n1629:{id:"n1629",loc:[-85.629076,41.954689]},n163:{id:"n163",loc:[-85.638813,41.942475]},n1630:{id:"n1630",loc:[-85.640667,41.942595]},n1631:{id:"n1631",loc:[-85.639455,41.94261]},n1632:{id:"n1632",loc:[-85.643407,41.942336]},n1633:{id:"n1633",loc:[-85.641845,41.941316]},n1634:{id:"n1634",loc:[-85.643322,41.942224]},n1635:{id:"n1635",loc:[-85.643301,41.942124]},n1636:{id:"n1636",loc:[-85.640639,41.941326]},n1637:{id:"n1637",loc:[-85.640614,41.940058]},n1638:{id:"n1638",loc:[-85.639428,41.941335]},n1639:{id:"n1639",loc:[-85.643078,41.941293]},n164:{id:"n164",loc:[-85.63883,41.942422]},n1640:{id:"n1640",loc:[-85.64371,41.942302]},n1641:{id:"n1641",loc:[-85.643056,41.94001]},n1642:{id:"n1642",loc:[-85.643097,41.942575],tags:{highway:"traffic_signals",traffic_signals:"signal","traffic_signals:direction":"both"}},n1643:{id:"n1643",loc:[-85.641855,41.942586]},n1644:{id:"n1644",loc:[-85.643549,41.942209]},n1645:{id:"n1645",loc:[-85.639359,41.94007]},n1646:{id:"n1646",loc:[-85.642797,41.940522]},n1647:{id:"n1647",loc:[-85.642589,41.940523]},n1648:{id:"n1648",loc:[-85.642587,41.940287]},n1649:{id:"n1649",loc:[-85.642797,41.940286]},n165:{id:"n165",loc:[-85.63883,41.942508]},n1650:{id:"n1650",loc:[-85.642571,41.940523]},n1651:{id:"n1651",loc:[-85.642568,41.940286]},n1652:{id:"n1652",loc:[-85.642316,41.940289]},n1653:{id:"n1653",loc:[-85.642321,41.940436]},n1654:{id:"n1654",loc:[-85.642292,41.940458]},n1655:{id:"n1655",loc:[-85.642287,41.940483]},n1656:{id:"n1656",loc:[-85.642323,41.940509]},n1657:{id:"n1657",loc:[-85.642385,41.940511]},n1658:{id:"n1658",loc:[-85.642408,41.940526]},n1659:{id:"n1659",loc:[-85.641962,41.94109]},n166:{id:"n166",loc:[-85.638364,41.942508]},n1660:{id:"n1660",loc:[-85.642753,41.941084]},n1661:{id:"n1661",loc:[-85.642752,41.941004]},n1662:{id:"n1662",loc:[-85.642806,41.941003]},n1663:{id:"n1663",loc:[-85.642803,41.940731]},n1664:{id:"n1664",loc:[-85.642741,41.940732]},n1665:{id:"n1665",loc:[-85.64274,41.940645]},n1666:{id:"n1666",loc:[-85.641957,41.940651]},n1667:{id:"n1667",loc:[-85.642937,41.941241]},n1668:{id:"n1668",loc:[-85.641776,41.941253]},n1669:{id:"n1669",loc:[-85.641766,41.940598]},n167:{id:"n167",loc:[-85.638836,41.942167]},n1670:{id:"n1670",loc:[-85.64198,41.940598]},n1671:{id:"n1671",loc:[-85.641961,41.940137]},n1672:{id:"n1672",loc:[-85.642934,41.94012]},n1673:{id:"n1673",loc:[-85.643074,41.941173]},n1674:{id:"n1674",loc:[-85.642841,41.940997]},n1675:{id:"n1675",loc:[-85.642839,41.940721]},n1676:{id:"n1676",loc:[-85.643065,41.940552]},n1677:{id:"n1677",loc:[-85.642732,41.94124]},n1678:{id:"n1678",loc:[-85.641815,41.941246]},n1679:{id:"n1679",loc:[-85.641813,41.941132]},n168:{id:"n168",loc:[-85.638836,41.94229]},n1680:{id:"n1680",loc:[-85.641839,41.941111]},n1681:{id:"n1681",loc:[-85.641884,41.941098]},n1682:{id:"n1682",loc:[-85.642732,41.941092]},n1683:{id:"n1683",loc:[-85.642776,41.941302]},n1684:{id:"n1684",loc:[-85.632788,41.946236]},n1685:{id:"n1685",loc:[-85.622342,41.953127]},n1686:{id:"n1686",loc:[-85.641848,41.941167]},n1687:{id:"n1687",loc:[-85.643753,41.941503]},n1688:{id:"n1688",loc:[-85.643762,41.942119]},n1689:{id:"n1689",loc:[-85.64238,41.942262]},n169:{id:"n169",loc:[-85.638594,41.94229]},n1690:{id:"n1690",loc:[-85.642374,41.941944]},n1691:{id:"n1691",loc:[-85.642518,41.941943]},n1692:{id:"n1692",loc:[-85.642519,41.94198]},n1693:{id:"n1693",loc:[-85.642831,41.941977]},n1694:{id:"n1694",loc:[-85.642837,41.942312]},n1695:{id:"n1695",loc:[-85.642495,41.942315]},n1696:{id:"n1696",loc:[-85.642494,41.942261]},n1697:{id:"n1697",loc:[-85.641087,41.942433]},n1698:{id:"n1698",loc:[-85.641081,41.942006]},n1699:{id:"n1699",loc:[-85.641244,41.942005]},n17:{id:"n17",loc:[-85.633478,41.94081]},n170:{id:"n170",loc:[-85.638594,41.942422]},n1700:{id:"n1700",loc:[-85.64125,41.942431]},n1701:{id:"n1701",loc:[-85.641331,41.942968]},n1702:{id:"n1702",loc:[-85.641328,41.942713]},n1703:{id:"n1703",loc:[-85.641521,41.942712]},n1704:{id:"n1704",loc:[-85.641523,41.942924]},n1705:{id:"n1705",loc:[-85.641504,41.942924]},n1706:{id:"n1706",loc:[-85.641505,41.942967]},n1707:{id:"n1707",loc:[-85.638612,41.942408]},n1708:{id:"n1708",loc:[-85.638612,41.942327]},n1709:{id:"n1709",loc:[-85.638775,41.942327]},n171:{id:"n171",loc:[-85.638364,41.942356]},n1710:{id:"n1710",loc:[-85.638775,41.942299]},n1711:{id:"n1711",loc:[-85.638835,41.942298]},n1712:{id:"n1712",loc:[-85.638835,41.942407]},n1713:{id:"n1713",loc:[-85.639116,41.942444]},n1714:{id:"n1714",loc:[-85.639114,41.942362]},n1715:{id:"n1715",loc:[-85.639294,41.94236]},n1716:{id:"n1716",loc:[-85.639296,41.942442]},n1717:{id:"n1717",loc:[-85.639808,41.942385]},n1718:{id:"n1718",loc:[-85.639805,41.942285]},n1719:{id:"n1719",loc:[-85.639988,41.942283]},n172:{id:"n172",loc:[-85.638364,41.942167]},n1720:{id:"n1720",loc:[-85.63999,41.942383]},n1721:{id:"n1721",loc:[-85.639633,41.943023]},n1722:{id:"n1722",loc:[-85.639867,41.943019]},n1723:{id:"n1723",loc:[-85.639866,41.942964]},n1724:{id:"n1724",loc:[-85.639888,41.942963]},n1725:{id:"n1725",loc:[-85.639883,41.942779]},n1726:{id:"n1726",loc:[-85.639851,41.94278]},n1727:{id:"n1727",loc:[-85.63985,41.94274]},n1728:{id:"n1728",loc:[-85.639789,41.942741]},n1729:{id:"n1729",loc:[-85.639789,41.942753]},n173:{id:"n173",loc:[-85.639038,41.942463]},n1730:{id:"n1730",loc:[-85.639698,41.942754]},n1731:{id:"n1731",loc:[-85.639699,41.942788]},n1732:{id:"n1732",loc:[-85.639675,41.942789]},n1733:{id:"n1733",loc:[-85.639676,41.94283]},n1734:{id:"n1734",loc:[-85.639701,41.942829]},n1735:{id:"n1735",loc:[-85.639702,41.942869]},n1736:{id:"n1736",loc:[-85.639629,41.94287]},n1737:{id:"n1737",loc:[-85.643568,41.942946]},n1738:{id:"n1738",loc:[-85.643568,41.942777]},n1739:{id:"n1739",loc:[-85.643401,41.942777]},n174:{id:"n174",loc:[-85.638897,41.942464]},n1740:{id:"n1740",loc:[-85.643401,41.942863]},n1741:{id:"n1741",loc:[-85.643448,41.942863]},n1742:{id:"n1742",loc:[-85.643448,41.942946]},n1743:{id:"n1743",loc:[-85.642836,41.942981]},n1744:{id:"n1744",loc:[-85.642917,41.942979]},n1745:{id:"n1745",loc:[-85.642914,41.942904]},n1746:{id:"n1746",loc:[-85.642938,41.942903]},n1747:{id:"n1747",loc:[-85.642935,41.942813]},n1748:{id:"n1748",loc:[-85.642775,41.942816]},n1749:{id:"n1749",loc:[-85.642778,41.942906]},n175:{id:"n175",loc:[-85.638897,41.942423]},n1750:{id:"n1750",loc:[-85.642833,41.942905]},n1751:{id:"n1751",loc:[-85.642302,41.942886]},n1752:{id:"n1752",loc:[-85.642299,41.942721]},n1753:{id:"n1753",loc:[-85.642422,41.94272]},n1754:{id:"n1754",loc:[-85.642425,41.942868]},n1755:{id:"n1755",loc:[-85.642385,41.942869]},n1756:{id:"n1756",loc:[-85.642385,41.942885]},n1757:{id:"n1757",loc:[-85.641533,41.942939]},n1758:{id:"n1758",loc:[-85.64161,41.942877]},n1759:{id:"n1759",loc:[-85.641676,41.942922]},n176:{id:"n176",loc:[-85.638853,41.942423]},n1760:{id:"n1760",loc:[-85.6416,41.942985]},n1761:{id:"n1761",loc:[-85.64206,41.942802]},n1762:{id:"n1762",loc:[-85.642059,41.942741]},n1763:{id:"n1763",loc:[-85.642196,41.942741]},n1764:{id:"n1764",loc:[-85.642196,41.942818]},n1765:{id:"n1765",loc:[-85.642128,41.942819]},n1766:{id:"n1766",loc:[-85.642128,41.942801]},n1767:{id:"n1767",loc:[-85.640943,41.942934]},n1768:{id:"n1768",loc:[-85.641035,41.942933]},n1769:{id:"n1769",loc:[-85.641032,41.942797]},n177:{id:"n177",loc:[-85.638852,41.94237]},n1770:{id:"n1770",loc:[-85.640997,41.942798]},n1771:{id:"n1771",loc:[-85.640996,41.942764]},n1772:{id:"n1772",loc:[-85.640861,41.942766]},n1773:{id:"n1773",loc:[-85.640862,41.942848]},n1774:{id:"n1774",loc:[-85.640941,41.942847]},n1775:{id:"n1775",loc:[-85.643766,41.942226]},n1776:{id:"n1776",loc:[-85.643768,41.942407]},n1777:{id:"n1777",loc:[-85.643218,41.94177]},n1778:{id:"n1778",loc:[-85.64321,41.941327]},n1779:{id:"n1779",loc:[-85.643649,41.941323]},n178:{id:"n178",loc:[-85.638892,41.94237]},n1780:{id:"n1780",loc:[-85.643656,41.941716]},n1781:{id:"n1781",loc:[-85.64358,41.941717]},n1782:{id:"n1782",loc:[-85.64358,41.941767]},n1783:{id:"n1783",loc:[-85.64382,41.941495]},n1784:{id:"n1784",loc:[-85.643817,41.941317]},n1785:{id:"n1785",loc:[-85.643235,41.941833]},n1786:{id:"n1786",loc:[-85.64335,41.941842]},n1787:{id:"n1787",loc:[-85.643504,41.941903]},n1788:{id:"n1788",loc:[-85.643554,41.941946]},n1789:{id:"n1789",loc:[-85.643618,41.942015]},n179:{id:"n179",loc:[-85.638891,41.942334]},n1790:{id:"n1790",loc:[-85.64346,41.941971]},n1791:{id:"n1791",loc:[-85.643528,41.942468]},n1792:{id:"n1792",loc:[-85.643621,41.942363]},n1793:{id:"n1793",loc:[-85.643496,41.942297]},n1794:{id:"n1794",loc:[-85.643446,41.942246]},n1795:{id:"n1795",loc:[-85.643398,41.942177]},n1796:{id:"n1796",loc:[-85.643398,41.942031]},n1797:{id:"n1797",loc:[-85.621531,41.952693]},n1798:{id:"n1798",loc:[-85.643221,41.942028]},n1799:{id:"n1799",loc:[-85.643225,41.942276]},n18:{id:"n18",loc:[-85.63345,41.94071]},n180:{id:"n180",loc:[-85.639037,41.942334]},n1800:{id:"n1800",loc:[-85.643265,41.942347]},n1801:{id:"n1801",loc:[-85.643323,41.942413]},n1802:{id:"n1802",loc:[-85.643411,41.94247]},n1803:{id:"n1803",loc:[-85.643459,41.942435]},n1804:{id:"n1804",loc:[-85.643767,41.942307]},n1805:{id:"n1805",loc:[-85.643661,41.942293]},n1806:{id:"n1806",loc:[-85.643578,41.942247]},n1807:{id:"n1807",loc:[-85.643522,41.942125]},n1808:{id:"n1808",loc:[-85.643515,41.942061]},n1809:{id:"n1809",loc:[-85.643346,41.941924]},n181:{id:"n181",loc:[-85.638074,41.941839]},n1810:{id:"n1810",loc:[-85.643086,41.94192]},n1811:{id:"n1811",loc:[-85.643529,41.94217]},n1812:{id:"n1812",loc:[-85.643489,41.942003]},n1813:{id:"n1813",loc:[-85.643295,41.941919]},n1814:{id:"n1814",loc:[-85.643305,41.942163]},n1815:{id:"n1815",loc:[-85.643354,41.942285]},n1816:{id:"n1816",loc:[-85.643472,41.942389]},n1817:{id:"n1817",loc:[-85.643608,41.942271]},n1818:{id:"n1818",loc:[-85.643876,41.941402]},n1819:{id:"n1819",loc:[-85.643818,41.941369]},n182:{id:"n182",loc:[-85.638076,41.941942]},n1820:{id:"n1820",loc:[-85.643682,41.941304]},n1821:{id:"n1821",loc:[-85.64359,41.941286]},n1822:{id:"n1822",loc:[-85.643317,41.941727]},n1823:{id:"n1823",loc:[-85.643301,41.941286]},n1824:{id:"n1824",loc:[-85.643553,41.941698]},n1825:{id:"n1825",loc:[-85.643543,41.941286]},n1826:{id:"n1826",loc:[-85.636967,41.940118]},n1827:{id:"n1827",loc:[-85.63378,41.940114]},n1828:{id:"n1828",loc:[-85.637254,41.940075]},n1829:{id:"n1829",loc:[-85.637002,41.941355]},n183:{id:"n183",loc:[-85.637955,41.941944]},n1830:{id:"n1830",loc:[-85.643532,41.94204]},n1831:{id:"n1831",loc:[-85.638235,41.942615]},n1832:{id:"n1832",loc:[-85.637039,41.942624]},n1833:{id:"n1833",loc:[-85.636369,41.94266]},n1834:{id:"n1834",loc:[-85.63582,41.942771],tags:{highway:"traffic_signals",traffic_signals:"emergency","traffic_signals:direction":"both"}},n1835:{id:"n1835",loc:[-85.634873,41.943044]},n1836:{id:"n1836",loc:[-85.643482,41.941976]},n1837:{id:"n1837",loc:[-85.64345,41.941945]},n1838:{id:"n1838",loc:[-85.641885,41.943851]},n1839:{id:"n1839",loc:[-85.641915,41.945121]},n184:{id:"n184",loc:[-85.637953,41.94184]},n1840:{id:"n1840",loc:[-85.639454,41.943871]},n1841:{id:"n1841",loc:[-85.639491,41.945191]},n1842:{id:"n1842",loc:[-85.635775,41.940113]},n1843:{id:"n1843",loc:[-85.638206,41.941345]},n1844:{id:"n1844",loc:[-85.640721,41.94513]},n1845:{id:"n1845",loc:[-85.643137,41.945103]},n1846:{id:"n1846",loc:[-85.638199,41.940079]},n1847:{id:"n1847",loc:[-85.640688,41.943861]},n1848:{id:"n1848",loc:[-85.643397,41.941924]},n1849:{id:"n1849",loc:[-85.643117,41.943841]},n185:{id:"n185",loc:[-85.637953,41.941866]},n1850:{id:"n1850",loc:[-85.636731,41.94263]},n1851:{id:"n1851",loc:[-85.63518,41.942955],tags:{highway:"crossing",crossing:"unmarked"}},n1852:{id:"n1852",loc:[-85.636152,41.942695]},n1853:{id:"n1853",loc:[-85.644202,41.941499]},n1854:{id:"n1854",loc:[-85.644211,41.942116]},n1855:{id:"n1855",loc:[-85.644233,41.942404]},n1856:{id:"n1856",loc:[-85.644231,41.942223]},n1857:{id:"n1857",loc:[-85.644133,41.941315]},n1858:{id:"n1858",loc:[-85.644136,41.941493]},n1859:{id:"n1859",loc:[-85.644345,41.942307]},n186:{id:"n186",loc:[-85.637873,41.941867]},n1860:{id:"n1860",loc:[-85.644232,41.942304]},n1861:{id:"n1861",loc:[-85.644134,41.941403]},n1862:{id:"n1862",loc:[-85.63607,41.943005],tags:{"addr:city":"Three Rivers","addr:housenumber":"333","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue",amenity:"fire_station",name:"Three Rivers Fire Department"}},n1863:{id:"n1863",loc:[-85.637,41.941236]},n1864:{id:"n1864",loc:[-85.634476,41.941475]},n1865:{id:"n1865",loc:[-85.635036,41.941858]},n1866:{id:"n1866",loc:[-85.635362,41.941962]},n1867:{id:"n1867",loc:[-85.635806,41.941962]},n1868:{id:"n1868",loc:[-85.63295,41.943006]},n1869:{id:"n1869",loc:[-85.634692,41.943098]},n187:{id:"n187",loc:[-85.637877,41.941975]},n1870:{id:"n1870",loc:[-85.633128,41.940484]},n1871:{id:"n1871",loc:[-85.633117,41.942798]},n1872:{id:"n1872",loc:[-85.633303,41.942412]},n1873:{id:"n1873",loc:[-85.633482,41.941912]},n1874:{id:"n1874",loc:[-85.633455,41.941359]},n1875:{id:"n1875",loc:[-85.633162,41.942679]},n1876:{id:"n1876",loc:[-85.634274,41.943479]},n1877:{id:"n1877",loc:[-85.634678,41.942909]},n1878:{id:"n1878",loc:[-85.6339,41.941453]},n1879:{id:"n1879",loc:[-85.634571,41.942774]},n188:{id:"n188",loc:[-85.636855,41.942488]},n1880:{id:"n1880",loc:[-85.63419,41.941732]},n1881:{id:"n1881",loc:[-85.634067,41.941565]},n1882:{id:"n1882",loc:[-85.63436,41.942358]},n1883:{id:"n1883",loc:[-85.634327,41.942247]},n1884:{id:"n1884",loc:[-85.633391,41.941231]},n1885:{id:"n1885",loc:[-85.634303,41.941972]},n1886:{id:"n1886",loc:[-85.633541,41.940147]},n1887:{id:"n1887",loc:[-85.633433,41.940252]},n1888:{id:"n1888",loc:[-85.633402,41.940411]},n1889:{id:"n1889",loc:[-85.633551,41.941023]},n189:{id:"n189",loc:[-85.636702,41.942488]},n1890:{id:"n1890",loc:[-85.633719,41.941186]},n1891:{id:"n1891",loc:[-85.633067,41.941845]},n1892:{id:"n1892",loc:[-85.634902,41.942766]},n1893:{id:"n1893",loc:[-85.634603,41.942202]},n1894:{id:"n1894",loc:[-85.634858,41.942152]},n1895:{id:"n1895",loc:[-85.634842,41.942269]},n1896:{id:"n1896",loc:[-85.634907,41.942313]},n1897:{id:"n1897",loc:[-85.635049,41.942331]},n1898:{id:"n1898",loc:[-85.635101,41.942281]},n1899:{id:"n1899",loc:[-85.635129,41.942144]},n19:{id:"n19",loc:[-85.633009,41.942229]},n190:{id:"n190",loc:[-85.636702,41.942434]},n1900:{id:"n1900",loc:[-85.635531,41.942143]},n1901:{id:"n1901",loc:[-85.635534,41.942577]},n1902:{id:"n1902",loc:[-85.635158,41.942656]},n1903:{id:"n1903",loc:[-85.635121,41.942703]},n1904:{id:"n1904",loc:[-85.635087,41.941508]},n1905:{id:"n1905",loc:[-85.63536,41.941106]},n1906:{id:"n1906",loc:[-85.635442,41.941094]},n1907:{id:"n1907",loc:[-85.635508,41.941104]},n1908:{id:"n1908",loc:[-85.635569,41.941125]},n1909:{id:"n1909",loc:[-85.635583,41.941106]},n191:{id:"n191",loc:[-85.636761,41.942434]},n1910:{id:"n1910",loc:[-85.635555,41.940976]},n1911:{id:"n1911",loc:[-85.635501,41.940915]},n1912:{id:"n1912",loc:[-85.635392,41.940922]},n1913:{id:"n1913",loc:[-85.635276,41.940974]},n1914:{id:"n1914",loc:[-85.63517,41.941204]},n1915:{id:"n1915",loc:[-85.634888,41.941517]},n1916:{id:"n1916",loc:[-85.634897,41.941576]},n1917:{id:"n1917",loc:[-85.634961,41.94164]},n1918:{id:"n1918",loc:[-85.635028,41.941659]},n1919:{id:"n1919",loc:[-85.635118,41.941621]},n192:{id:"n192",loc:[-85.636761,41.942369]},n1920:{id:"n1920",loc:[-85.635085,41.941558]},n1921:{id:"n1921",loc:[-85.63504,41.94136]},n1922:{id:"n1922",loc:[-85.635221,41.941077]},n1923:{id:"n1923",loc:[-85.634387,41.941559]},n1924:{id:"n1924",loc:[-85.634351,41.941587]},n1925:{id:"n1925",loc:[-85.634416,41.941756]},n1926:{id:"n1926",loc:[-85.634461,41.941797]},n1927:{id:"n1927",loc:[-85.634501,41.941819]},n1928:{id:"n1928",loc:[-85.634597,41.941816]},n1929:{id:"n1929",loc:[-85.634732,41.941724]},n193:{id:"n193",loc:[-85.636855,41.942369]},n1930:{id:"n1930",loc:[-85.634672,41.941775]},n1931:{id:"n1931",loc:[-85.633403,41.939101]},n1932:{id:"n1932",loc:[-85.633297,41.939397]},n1933:{id:"n1933",loc:[-85.633205,41.939674]},n1934:{id:"n1934",loc:[-85.63322,41.939777]},n1935:{id:"n1935",loc:[-85.633345,41.939936]},n1936:{id:"n1936",loc:[-85.633376,41.940002]},n1937:{id:"n1937",loc:[-85.633266,41.940228]},n1938:{id:"n1938",loc:[-85.633236,41.940352]},n1939:{id:"n1939",loc:[-85.633282,41.94063]},n194:{id:"n194",loc:[-85.636645,41.94249]},n1940:{id:"n1940",loc:[-85.633364,41.940874]},n1941:{id:"n1941",loc:[-85.633439,41.941052]},n1942:{id:"n1942",loc:[-85.633582,41.941172]},n1943:{id:"n1943",loc:[-85.633748,41.941273]},n1944:{id:"n1944",loc:[-85.634317,41.941527]},n1945:{id:"n1945",loc:[-85.634389,41.94174]},n1946:{id:"n1946",loc:[-85.634441,41.941801]},n1947:{id:"n1947",loc:[-85.634514,41.941837]},n1948:{id:"n1948",loc:[-85.634485,41.942005]},n1949:{id:"n1949",loc:[-85.63457,41.942202]},n195:{id:"n195",loc:[-85.636565,41.94249]},n1950:{id:"n1950",loc:[-85.634869,41.942769]},n1951:{id:"n1951",loc:[-85.634943,41.942792]},n1952:{id:"n1952",loc:[-85.635139,41.942882]},n1953:{id:"n1953",loc:[-85.634962,41.943161]},n1954:{id:"n1954",loc:[-85.635002,41.943131]},n1955:{id:"n1955",loc:[-85.635005,41.943091]},n1956:{id:"n1956",loc:[-85.635216,41.943033]},n1957:{id:"n1957",loc:[-85.634817,41.94267]},n1958:{id:"n1958",loc:[-85.634614,41.942599]},n1959:{id:"n1959",loc:[-85.634494,41.942381]},n196:{id:"n196",loc:[-85.636565,41.942474]},n1960:{id:"n1960",loc:[-85.634486,41.9423]},n1961:{id:"n1961",loc:[-85.634671,41.941795]},n1962:{id:"n1962",loc:[-85.634595,41.941831]},n1963:{id:"n1963",loc:[-85.634332,41.941866]},n1964:{id:"n1964",loc:[-85.634207,41.941885]},n1965:{id:"n1965",loc:[-85.634133,41.941892]},n1966:{id:"n1966",loc:[-85.634131,41.942203]},n1967:{id:"n1967",loc:[-85.634047,41.942327]},n1968:{id:"n1968",loc:[-85.634219,41.942793]},n1969:{id:"n1969",loc:[-85.634061,41.942392]},n197:{id:"n197",loc:[-85.636514,41.942474]},n1970:{id:"n1970",loc:[-85.633989,41.942407]},n1971:{id:"n1971",loc:[-85.633971,41.942356]},n1972:{id:"n1972",loc:[-85.63361,41.942423]},n1973:{id:"n1973",loc:[-85.633714,41.942682]},n1974:{id:"n1974",loc:[-85.633698,41.942863]},n1975:{id:"n1975",loc:[-85.633882,41.942865]},n1976:{id:"n1976",loc:[-85.633941,41.943007]},n1977:{id:"n1977",loc:[-85.633887,41.943035]},n1978:{id:"n1978",loc:[-85.633768,41.942815]},n1979:{id:"n1979",loc:[-85.633682,41.942351]},n198:{id:"n198",loc:[-85.636514,41.942326]},n1980:{id:"n1980",loc:[-85.634037,41.942273]},n1981:{id:"n1981",loc:[-85.634029,41.942252]},n1982:{id:"n1982",loc:[-85.633673,41.942331]},n1983:{id:"n1983",loc:[-85.634219,41.942571]},n1984:{id:"n1984",loc:[-85.634252,41.942565]},n1985:{id:"n1985",loc:[-85.634144,41.942299]},n1986:{id:"n1986",loc:[-85.634115,41.942306]},n1987:{id:"n1987",loc:[-85.634059,41.943094]},n1988:{id:"n1988",loc:[-85.633944,41.942903]},n1989:{id:"n1989",loc:[-85.634311,41.942821]},n199:{id:"n199",loc:[-85.636561,41.942326]},n1990:{id:"n1990",loc:[-85.634351,41.94277]},n1991:{id:"n1991",loc:[-85.634153,41.942254]},n1992:{id:"n1992",loc:[-85.634092,41.94222]},n1993:{id:"n1993",loc:[-85.633571,41.942336]},n1994:{id:"n1994",loc:[-85.633513,41.942387]},n1995:{id:"n1995",loc:[-85.633509,41.942455]},n1996:{id:"n1996",loc:[-85.63363,41.942665]},n1997:{id:"n1997",loc:[-85.63414,41.94286]},n1998:{id:"n1998",loc:[-85.63397,41.942449]},n1999:{id:"n1999",loc:[-85.633551,41.942529]},n2:{id:"n2",loc:[-85.627421,41.953877]},n20:{id:"n20",loc:[-85.633013,41.941438]},n200:{id:"n200",loc:[-85.636561,41.942311]},n2000:{id:"n2000",loc:[-85.633741,41.942493]},n2001:{id:"n2001",loc:[-85.633894,41.942869]},n2002:{id:"n2002",loc:[-85.634132,41.941954]},n2003:{id:"n2003",loc:[-85.634032,41.942038]},n2004:{id:"n2004",loc:[-85.633765,41.942238]},n2005:{id:"n2005",loc:[-85.63376,41.942268]},n2006:{id:"n2006",loc:[-85.633768,41.942293]},n2007:{id:"n2007",loc:[-85.633808,41.942386]},n2008:{id:"n2008",loc:[-85.634946,41.941663]},n2009:{id:"n2009",loc:[-85.63511,41.941697]},n201:{id:"n201",loc:[-85.636621,41.942311]},n2010:{id:"n2010",loc:[-85.635337,41.94168]},n2011:{id:"n2011",loc:[-85.634997,41.942251]},n2012:{id:"n2012",loc:[-85.635013,41.942173]},n2013:{id:"n2013",loc:[-85.634876,41.942157]},n2014:{id:"n2014",loc:[-85.634859,41.942235]},n2015:{id:"n2015",loc:[-85.634992,41.941951]},n2016:{id:"n2016",loc:[-85.634952,41.941877]},n2017:{id:"n2017",loc:[-85.634844,41.94191]},n2018:{id:"n2018",loc:[-85.634884,41.941983]},n2019:{id:"n2019",loc:[-85.635189,41.941691]},n202:{id:"n202",loc:[-85.636621,41.942351]},n2020:{id:"n2020",loc:[-85.635089,41.941896]},n2021:{id:"n2021",loc:[-85.635077,41.941964]},n2022:{id:"n2022",loc:[-85.635058,41.942147]},n2023:{id:"n2023",loc:[-85.635099,41.942161]},n2024:{id:"n2024",loc:[-85.635099,41.942213]},n2025:{id:"n2025",loc:[-85.635079,41.942285]},n2026:{id:"n2026",loc:[-85.635047,41.942316]},n2027:{id:"n2027",loc:[-85.634925,41.9423]},n2028:{id:"n2028",loc:[-85.634911,41.942276]},n2029:{id:"n2029",loc:[-85.634917,41.942242]},n203:{id:"n203",loc:[-85.63666,41.942351]},n2030:{id:"n2030",loc:[-85.634698,41.941898]},n2031:{id:"n2031",loc:[-85.634964,41.941878]},n2032:{id:"n2032",loc:[-85.635025,41.941929]},n2033:{id:"n2033",loc:[-85.634862,41.941887]},n2034:{id:"n2034",loc:[-85.634811,41.94181]},n2035:{id:"n2035",loc:[-85.634731,41.941745]},n2036:{id:"n2036",loc:[-85.634933,41.94176]},n2037:{id:"n2037",loc:[-85.634942,41.942145]},n2038:{id:"n2038",loc:[-85.634944,41.942065]},n2039:{id:"n2039",loc:[-85.634914,41.941996]},n204:{id:"n204",loc:[-85.63666,41.942453]},n2040:{id:"n2040",loc:[-85.634981,41.941979]},n2041:{id:"n2041",loc:[-85.633419,41.942172]},n2042:{id:"n2042",loc:[-85.633509,41.941631]},n2043:{id:"n2043",loc:[-85.633686,41.942937]},n2044:{id:"n2044",loc:[-85.633371,41.942722]},n2045:{id:"n2045",loc:[-85.633291,41.942538]},n2046:{id:"n2046",loc:[-85.633902,41.940941]},n2047:{id:"n2047",loc:[-85.635254,41.940939]},n2048:{id:"n2048",loc:[-85.635686,41.940829]},n2049:{id:"n2049",loc:[-85.635712,41.942681]},n205:{id:"n205",loc:[-85.636645,41.942453]},n2050:{id:"n2050",loc:[-85.633721,41.942118]},n2051:{id:"n2051",loc:[-85.633698,41.942057]},n2052:{id:"n2052",loc:[-85.633591,41.942079]},n2053:{id:"n2053",loc:[-85.633614,41.94214]},n2054:{id:"n2054",loc:[-85.633968,41.941099]},n2055:{id:"n2055",loc:[-85.633907,41.941138]},n2056:{id:"n2056",loc:[-85.633968,41.941197]},n2057:{id:"n2057",loc:[-85.63404,41.941162]},n2058:{id:"n2058",loc:[-85.634839,41.941665]},n2059:{id:"n2059",loc:[-85.635314,41.943035]},n206:{id:"n206",loc:[-85.636394,41.942471]},n2060:{id:"n2060",loc:[-85.634919,41.943142]},n2061:{id:"n2061",loc:[-85.636433,41.942959],tags:{"addr:city":"Three Rivers","addr:housenumber":"333","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue",amenity:"townhall",name:"Three Rivers City Hall"}},n2062:{id:"n2062",loc:[-85.637039,41.942789]},n2063:{id:"n2063",loc:[-85.636333,41.94279]},n2064:{id:"n2064",loc:[-85.634484,41.940726]},n2065:{id:"n2065",loc:[-85.634483,41.940603]},n2066:{id:"n2066",loc:[-85.634908,41.940601]},n2067:{id:"n2067",loc:[-85.634908,41.94053]},n2068:{id:"n2068",loc:[-85.634934,41.94053]},n2069:{id:"n2069",loc:[-85.634934,41.940496]},n207:{id:"n207",loc:[-85.636262,41.942472]},n2070:{id:"n2070",loc:[-85.63504,41.940495]},n2071:{id:"n2071",loc:[-85.63504,41.940531]},n2072:{id:"n2072",loc:[-85.635068,41.940531]},n2073:{id:"n2073",loc:[-85.635071,41.940794]},n2074:{id:"n2074",loc:[-85.635183,41.940793]},n2075:{id:"n2075",loc:[-85.635185,41.940916]},n2076:{id:"n2076",loc:[-85.634799,41.940919]},n2077:{id:"n2077",loc:[-85.634798,41.940798]},n2078:{id:"n2078",loc:[-85.634925,41.940797]},n2079:{id:"n2079",loc:[-85.634924,41.940724]},n208:{id:"n208",loc:[-85.636261,41.94233]},n2080:{id:"n2080",loc:[-85.637448,41.938233]},n2081:{id:"n2081",loc:[-85.634168,41.943279]},n2082:{id:"n2082",loc:[-85.635744,41.938248]},n2083:{id:"n2083",loc:[-85.638744,41.951211]},n2084:{id:"n2084",loc:[-85.636421,41.946392]},n2085:{id:"n2085",loc:[-85.635965,41.945809]},n2086:{id:"n2086",loc:[-85.635683,41.945449]},n2087:{id:"n2087",loc:[-85.635281,41.945025]},n2088:{id:"n2088",loc:[-85.632443,41.942574]},n2089:{id:"n2089",loc:[-85.638243,41.943674]},n209:{id:"n209",loc:[-85.636353,41.942329]},n2090:{id:"n2090",loc:[-85.638228,41.943747]},n2091:{id:"n2091",loc:[-85.638163,41.943797]},n2092:{id:"n2092",loc:[-85.638089,41.943832]},n2093:{id:"n2093",loc:[-85.637969,41.943841]},n2094:{id:"n2094",loc:[-85.637841,41.943833]},n2095:{id:"n2095",loc:[-85.637342,41.943734]},n2096:{id:"n2096",loc:[-85.637232,41.943707]},n2097:{id:"n2097",loc:[-85.637163,41.943668]},n2098:{id:"n2098",loc:[-85.637118,41.943615]},n2099:{id:"n2099",loc:[-85.637078,41.943494]},n21:{id:"n21",loc:[-85.634126,41.942228]},n210:{id:"n210",loc:[-85.636354,41.94239]},n2100:{id:"n2100",loc:[-85.632903,41.998429],tags:{railway:"level_crossing"}},n2101:{id:"n2101",loc:[-85.633616,41.943581],tags:{railway:"level_crossing"}},n2102:{id:"n2102",loc:[-85.636943,41.947311]},n2103:{id:"n2103",loc:[-85.6376,41.94854]},n2104:{id:"n2104",loc:[-85.634565,41.93631]},n2105:{id:"n2105",loc:[-85.629597,41.942562]},n2106:{id:"n2106",loc:[-85.630821,41.943077]},n2107:{id:"n2107",loc:[-85.627473,41.940659]},n2108:{id:"n2108",loc:[-85.629708,41.942872]},n2109:{id:"n2109",loc:[-85.634093,41.935448]},n211:{id:"n211",loc:[-85.636393,41.94239]},n2110:{id:"n2110",loc:[-85.630413,41.94366]},n2111:{id:"n2111",loc:[-85.630488,41.942662]},n2112:{id:"n2112",loc:[-85.63361,41.936749]},n2113:{id:"n2113",loc:[-85.630038,41.941808]},n2114:{id:"n2114",loc:[-85.632016,41.942922]},n2115:{id:"n2115",loc:[-85.631525,41.944303]},n2116:{id:"n2116",loc:[-85.626862,41.94022]},n2117:{id:"n2117",loc:[-85.629673,41.94121]},n2118:{id:"n2118",loc:[-85.632752,41.943101]},n2119:{id:"n2119",loc:[-85.631147,41.943201]},n212:{id:"n212",loc:[-85.63444,41.943176]},n2120:{id:"n2120",loc:[-85.624974,41.940579]},n2121:{id:"n2121",loc:[-85.629518,41.941783]},n2122:{id:"n2122",loc:[-85.632349,41.942699]},n2123:{id:"n2123",loc:[-85.628418,41.940356]},n2124:{id:"n2124",loc:[-85.629147,41.94129]},n2125:{id:"n2125",loc:[-85.631111,41.943979]},n2126:{id:"n2126",loc:[-85.632087,41.940013]},n2127:{id:"n2127",loc:[-85.634469,41.935057]},n2128:{id:"n2128",loc:[-85.630097,41.943449]},n2129:{id:"n2129",loc:[-85.6331,41.937878]},n213:{id:"n213",loc:[-85.63375,41.942814]},n2130:{id:"n2130",loc:[-85.625274,41.941114]},n2131:{id:"n2131",loc:[-85.632632,41.941217]},n2132:{id:"n2132",loc:[-85.632739,41.941926]},n2133:{id:"n2133",loc:[-85.631647,41.94366]},n2134:{id:"n2134",loc:[-85.635059,41.935456]},n2135:{id:"n2135",loc:[-85.631259,41.944349]},n2136:{id:"n2136",loc:[-85.626336,41.940811]},n2137:{id:"n2137",loc:[-85.631507,41.943875]},n2138:{id:"n2138",loc:[-85.625081,41.940859]},n2139:{id:"n2139",loc:[-85.625778,41.940093]},n214:{id:"n214",loc:[-85.633674,41.942869]},n2140:{id:"n2140",loc:[-85.632641,41.942436]},n2141:{id:"n2141",loc:[-85.628825,41.941034]},n2142:{id:"n2142",loc:[-85.627913,41.940292]},n2143:{id:"n2143",loc:[-85.628943,41.940516]},n2144:{id:"n2144",loc:[-85.63139,41.943941]},n2145:{id:"n2145",loc:[-85.630081,41.94204]},n2146:{id:"n2146",loc:[-85.632194,41.93963]},n2147:{id:"n2147",loc:[-85.632913,41.93939]},n2148:{id:"n2148",loc:[-85.632001,41.943492]},n2149:{id:"n2149",loc:[-85.63149,41.943154]},n215:{id:"n215",loc:[-85.633542,41.942768]},n2150:{id:"n2150",loc:[-85.625167,41.940117]},n2151:{id:"n2151",loc:[-85.63287,41.939941]},n2152:{id:"n2152",loc:[-85.630789,41.943732]},n2153:{id:"n2153",loc:[-85.632173,41.940348]},n2154:{id:"n2154",loc:[-85.626587,41.940113]},n2155:{id:"n2155",loc:[-85.62684,41.940667]},n2156:{id:"n2156",loc:[-85.632527,41.938904]},n2157:{id:"n2157",loc:[-85.624866,41.94018]},n2158:{id:"n2158",loc:[-85.633267,41.93872]},n2159:{id:"n2159",loc:[-85.62934,41.940843]},n216:{id:"n216",loc:[-85.633618,41.942714]},n2160:{id:"n2160",loc:[-85.62272,41.953817]},n2161:{id:"n2161",loc:[-85.622555,41.954453]},n2162:{id:"n2162",loc:[-85.637225,41.944128]},n2163:{id:"n2163",loc:[-85.622628,41.953683]},n2164:{id:"n2164",loc:[-85.635441,41.943989]},n2165:{id:"n2165",loc:[-85.622629,41.953807]},n2166:{id:"n2166",loc:[-85.62262,41.953807]},n2167:{id:"n2167",loc:[-85.62262,41.953837]},n2168:{id:"n2168",loc:[-85.622532,41.953838]},n2169:{id:"n2169",loc:[-85.637469,41.944579]},n217:{id:"n217",loc:[-85.634001,41.942336]},n2170:{id:"n2170",loc:[-85.63688,41.943935]},n2171:{id:"n2171",loc:[-85.638263,41.946367]},n2172:{id:"n2172",loc:[-85.622532,41.953807]},n2173:{id:"n2173",loc:[-85.622353,41.953808]},n2174:{id:"n2174",loc:[-85.622352,41.953685]},n2175:{id:"n2175",loc:[-85.622464,41.953684]},n2176:{id:"n2176",loc:[-85.622464,41.953648]},n2177:{id:"n2177",loc:[-85.637136,41.94576]},n2178:{id:"n2178",loc:[-85.622521,41.953648]},n2179:{id:"n2179",loc:[-85.637129,41.945415]},n218:{id:"n218",loc:[-85.633825,41.942376]},n2180:{id:"n2180",loc:[-85.637473,41.94607]},n2181:{id:"n2181",loc:[-85.622521,41.953683]},n2182:{id:"n2182",loc:[-85.622717,41.954104]},n2183:{id:"n2183",loc:[-85.637769,41.946095]},n2184:{id:"n2184",loc:[-85.623872,41.953515]},n2185:{id:"n2185",loc:[-85.623851,41.953588]},n2186:{id:"n2186",loc:[-85.631385,41.94433]},n2187:{id:"n2187",loc:[-85.623608,41.953543]},n2188:{id:"n2188",loc:[-85.637308,41.944882]},n2189:{id:"n2189",loc:[-85.634898,41.944041]},n219:{id:"n219",loc:[-85.633807,41.942334]},n2190:{id:"n2190",loc:[-85.623604,41.953442]},n2191:{id:"n2191",loc:[-85.623705,41.953442]},n2192:{id:"n2192",loc:[-85.623708,41.953493]},n2193:{id:"n2193",loc:[-85.624064,41.952655]},n2194:{id:"n2194",loc:[-85.62395,41.952654]},n2195:{id:"n2195",loc:[-85.623951,41.952579]},n2196:{id:"n2196",loc:[-85.637435,41.944342]},n2197:{id:"n2197",loc:[-85.624064,41.952579]},n2198:{id:"n2198",loc:[-85.623812,41.952648]},n2199:{id:"n2199",loc:[-85.623813,41.952705]},n22:{id:"n22",loc:[-85.633531,41.942357]},n220:{id:"n220",loc:[-85.633983,41.942294]},n2200:{id:"n2200",loc:[-85.637169,41.945098]},n2201:{id:"n2201",loc:[-85.623552,41.952707]},n2202:{id:"n2202",loc:[-85.623551,41.95263]},n2203:{id:"n2203",loc:[-85.623701,41.952629]},n2204:{id:"n2204",loc:[-85.635894,41.943719]},n2205:{id:"n2205",loc:[-85.637297,41.945992]},n2206:{id:"n2206",loc:[-85.623724,41.952648]},n2207:{id:"n2207",loc:[-85.623812,41.952438]},n2208:{id:"n2208",loc:[-85.625239,41.952197]},n2209:{id:"n2209",loc:[-85.625232,41.952257]},n221:{id:"n221",loc:[-85.634182,41.942495]},n2210:{id:"n2210",loc:[-85.635175,41.94408]},n2211:{id:"n2211",loc:[-85.636381,41.943761]},n2212:{id:"n2212",loc:[-85.625115,41.952249]},n2213:{id:"n2213",loc:[-85.638578,41.946644]},n2214:{id:"n2214",loc:[-85.625122,41.952189]},n2215:{id:"n2215",loc:[-85.625085,41.952031]},n2216:{id:"n2216",loc:[-85.636126,41.943713]},n2217:{id:"n2217",loc:[-85.635005,41.944041]},n2218:{id:"n2218",loc:[-85.63714,41.945328]},n2219:{id:"n2219",loc:[-85.634871,41.943292]},n222:{id:"n222",loc:[-85.634149,41.942503]},n2220:{id:"n2220",loc:[-85.635705,41.943799]},n2221:{id:"n2221",loc:[-85.634995,41.943576]},n2222:{id:"n2222",loc:[-85.635026,41.943829]},n2223:{id:"n2223",loc:[-85.632874,41.941031]},n2224:{id:"n2224",loc:[-85.632531,41.940233]},n2225:{id:"n2225",loc:[-85.634247,41.936003]},n2226:{id:"n2226",loc:[-85.62929,41.941127]},n2227:{id:"n2227",loc:[-85.630428,41.943266]},n2228:{id:"n2228",loc:[-85.631608,41.943425]},n2229:{id:"n2229",loc:[-85.632316,41.943042]},n223:{id:"n223",loc:[-85.634098,41.942373]},n2230:{id:"n2230",loc:[-85.628711,41.940744]},n2231:{id:"n2231",loc:[-85.627831,41.940536]},n2232:{id:"n2232",loc:[-85.625514,41.94052]},n2233:{id:"n2233",loc:[-85.631127,41.943545]},n2234:{id:"n2234",loc:[-85.632909,41.942531]},n2235:{id:"n2235",loc:[-85.632917,41.938796]},n2236:{id:"n2236",loc:[-85.626716,41.94044]},n2237:{id:"n2237",loc:[-85.630122,41.942852]},n2238:{id:"n2238",loc:[-85.632509,41.939674]},n2239:{id:"n2239",loc:[-85.634762,41.935237]},n224:{id:"n224",loc:[-85.634131,41.942366]},n2240:{id:"n2240",loc:[-85.63384,41.937025]},n2241:{id:"n2241",loc:[-85.629741,41.941909]},n2242:{id:"n2242",loc:[-85.635254,41.945001],tags:{railway:"level_crossing"}},n2243:{id:"n2243",loc:[-85.634005,41.938168]},n2244:{id:"n2244",loc:[-85.63393,41.938335]},n2245:{id:"n2245",loc:[-85.633859,41.93846]},n2246:{id:"n2246",loc:[-85.633663,41.938776]},n2247:{id:"n2247",loc:[-85.633513,41.938936]},n2248:{id:"n2248",loc:[-85.635295,41.943225]},n2249:{id:"n2249",loc:[-85.635393,41.943293]},n225:{id:"n225",loc:[-85.635986,41.94177]},n2250:{id:"n2250",loc:[-85.635645,41.94332]},n2251:{id:"n2251",loc:[-85.63629,41.943328]},n2252:{id:"n2252",loc:[-85.636554,41.943372]},n2253:{id:"n2253",loc:[-85.636869,41.943526]},n2254:{id:"n2254",loc:[-85.637099,41.943704]},n2255:{id:"n2255",loc:[-85.637268,41.943773]},n2256:{id:"n2256",loc:[-85.637483,41.943821]},n2257:{id:"n2257",loc:[-85.637616,41.943929]},n2258:{id:"n2258",loc:[-85.637752,41.944114]},n2259:{id:"n2259",loc:[-85.638399,41.944308]},n226:{id:"n226",loc:[-85.635982,41.941523]},n2260:{id:"n2260",loc:[-85.638573,41.944451]},n2261:{id:"n2261",loc:[-85.638702,41.944574]},n2262:{id:"n2262",loc:[-85.638718,41.944652]},n2263:{id:"n2263",loc:[-85.638715,41.944809]},n2264:{id:"n2264",loc:[-85.638766,41.944988]},n2265:{id:"n2265",loc:[-85.638773,41.945136]},n2266:{id:"n2266",loc:[-85.638705,41.945251]},n2267:{id:"n2267",loc:[-85.638335,41.944291]},n2268:{id:"n2268",loc:[-85.638474,41.944352]},n2269:{id:"n2269",loc:[-85.635408,41.943429]},n227:{id:"n227",loc:[-85.636108,41.941521]},n2270:{id:"n2270",loc:[-85.635271,41.943654]},n2271:{id:"n2271",loc:[-85.635266,41.943744]},n2272:{id:"n2272",loc:[-85.635271,41.943819]},n2273:{id:"n2273",loc:[-85.635192,41.943876]},n2274:{id:"n2274",loc:[-85.635129,41.943857]},n2275:{id:"n2275",loc:[-85.635122,41.943764]},n2276:{id:"n2276",loc:[-85.635124,41.943664]},n2277:{id:"n2277",loc:[-85.63515,41.943611]},n2278:{id:"n2278",loc:[-85.635106,41.943534]},n2279:{id:"n2279",loc:[-85.634972,41.943197]},n228:{id:"n228",loc:[-85.636109,41.941559]},n2280:{id:"n2280",loc:[-85.633978,41.938227]},n2281:{id:"n2281",loc:[-85.634216,41.943255]},n2282:{id:"n2282",loc:[-85.634434,41.943622]},n2283:{id:"n2283",loc:[-85.632406,41.940854]},n2284:{id:"n2284",loc:[-85.632488,41.941063],tags:{leisure:"slipway"}},n2285:{id:"n2285",loc:[-85.632726,41.941537]},n2286:{id:"n2286",loc:[-85.632639,41.94136]},n2287:{id:"n2287",loc:[-85.632704,41.941439]},n2288:{id:"n2288",loc:[-85.632289,41.940601]},n2289:{id:"n2289",loc:[-85.632541,41.942526]},n229:{id:"n229",loc:[-85.636145,41.941559]},n2290:{id:"n2290",loc:[-85.634058,41.943173]},n2291:{id:"n2291",loc:[-85.636175,41.945974]},n2292:{id:"n2292",loc:[-85.636528,41.945975]},n2293:{id:"n2293",loc:[-85.637092,41.945893]},n2294:{id:"n2294",loc:[-85.637881,41.945647]},n2295:{id:"n2295",loc:[-85.639329,41.945162]},n2296:{id:"n2296",loc:[-85.639323,41.945026]},n2297:{id:"n2297",loc:[-85.638826,41.945032]},n2298:{id:"n2298",loc:[-85.638817,41.944174]},n2299:{id:"n2299",loc:[-85.638291,41.94418]},n23:{id:"n23",loc:[-85.633504,41.942418]},n230:{id:"n230",loc:[-85.636145,41.941551]},n2300:{id:"n2300",loc:[-85.63828,41.943811]},n2301:{id:"n2301",loc:[-85.638195,41.943601]},n2302:{id:"n2302",loc:[-85.63719,41.943592]},n2303:{id:"n2303",loc:[-85.636697,41.943273]},n2304:{id:"n2304",loc:[-85.635375,41.943274]},n2305:{id:"n2305",loc:[-85.635091,41.943547]},n2306:{id:"n2306",loc:[-85.63442,41.944117]},n2307:{id:"n2307",loc:[-85.635117,41.943717]},n2308:{id:"n2308",loc:[-85.635601,41.945177]},n2309:{id:"n2309",loc:[-85.635819,41.945494]},n231:{id:"n231",loc:[-85.636312,41.941549]},n2310:{id:"n2310",loc:[-85.635303,41.944891]},n2311:{id:"n2311",loc:[-85.637674,41.943802]},n2312:{id:"n2312",loc:[-85.638263,41.944272]},n2313:{id:"n2313",loc:[-85.634267,41.935266]},n2314:{id:"n2314",loc:[-85.639788,41.945152]},n2315:{id:"n2315",loc:[-85.639645,41.945167]},n2316:{id:"n2316",loc:[-85.639362,41.945233]},n2317:{id:"n2317",loc:[-85.638616,41.945163]},n2318:{id:"n2318",loc:[-85.638514,41.944936]},n2319:{id:"n2319",loc:[-85.638578,41.94503]},n232:{id:"n232",loc:[-85.636314,41.941649]},n2320:{id:"n2320",loc:[-85.638578,41.945215]},n2321:{id:"n2321",loc:[-85.640495,41.947015]},n2322:{id:"n2322",loc:[-85.639577,41.946495]},n2323:{id:"n2323",loc:[-85.638935,41.946087]},n2324:{id:"n2324",loc:[-85.637535,41.94584]},n2325:{id:"n2325",loc:[-85.638357,41.945404]},n2326:{id:"n2326",loc:[-85.638051,41.94553]},n2327:{id:"n2327",loc:[-85.637732,41.945555]},n2328:{id:"n2328",loc:[-85.637657,41.945524]},n2329:{id:"n2329",loc:[-85.637598,41.945467]},n233:{id:"n233",loc:[-85.636152,41.94165]},n2330:{id:"n2330",loc:[-85.637669,41.945318]},n2331:{id:"n2331",loc:[-85.637894,41.945171]},n2332:{id:"n2332",loc:[-85.637923,41.945082]},n2333:{id:"n2333",loc:[-85.63793,41.944756]},n2334:{id:"n2334",loc:[-85.637976,41.944696]},n2335:{id:"n2335",loc:[-85.638044,41.944671]},n2336:{id:"n2336",loc:[-85.638129,41.944597]},n2337:{id:"n2337",loc:[-85.638252,41.944413]},n2338:{id:"n2338",loc:[-85.638092,41.945442]},n2339:{id:"n2339",loc:[-85.638409,41.945315]},n234:{id:"n234",loc:[-85.636152,41.941628]},n2340:{id:"n2340",loc:[-85.638325,41.944771]},n2341:{id:"n2341",loc:[-85.638103,41.944744]},n2342:{id:"n2342",loc:[-85.637976,41.944781]},n2343:{id:"n2343",loc:[-85.637983,41.944865]},n2344:{id:"n2344",loc:[-85.638063,41.945074]},n2345:{id:"n2345",loc:[-85.638041,41.945206]},n2346:{id:"n2346",loc:[-85.637907,41.945309]},n2347:{id:"n2347",loc:[-85.637925,41.94539]},n2348:{id:"n2348",loc:[-85.637998,41.94545]},n2349:{id:"n2349",loc:[-85.637135,41.946254]},n235:{id:"n235",loc:[-85.63611,41.941628]},n2350:{id:"n2350",loc:[-85.636837,41.946615]},n2351:{id:"n2351",loc:[-85.637954,41.948909]},n2352:{id:"n2352",loc:[-85.638382,41.949786]},n2353:{id:"n2353",loc:[-85.639367,41.951242]},n2354:{id:"n2354",loc:[-85.640554,41.951777]},n2355:{id:"n2355",loc:[-85.6411,41.952234]},n2356:{id:"n2356",loc:[-85.641742,41.952657]},n2357:{id:"n2357",loc:[-85.642321,41.952941]},n2358:{id:"n2358",loc:[-85.64277,41.953228]},n2359:{id:"n2359",loc:[-85.643333,41.953825]},n236:{id:"n236",loc:[-85.636113,41.941768]},n2360:{id:"n2360",loc:[-85.643579,41.954365]},n2361:{id:"n2361",loc:[-85.644439,41.954105]},n2362:{id:"n2362",loc:[-85.64506,41.954]},n2363:{id:"n2363",loc:[-85.645483,41.953911]},n2364:{id:"n2364",loc:[-85.646046,41.953853]},n2365:{id:"n2365",loc:[-85.646318,41.953717]},n2366:{id:"n2366",loc:[-85.646276,41.953414]},n2367:{id:"n2367",loc:[-85.631063,41.957478],tags:{emergency:"fire_hydrant"}},n2368:{id:"n2368",loc:[-85.630996,41.955857],tags:{emergency:"fire_hydrant"}},n2369:{id:"n2369",loc:[-85.630976,41.954608],tags:{emergency:"fire_hydrant"}},n237:{id:"n237",loc:[-85.635983,41.941589],tags:{entrance:"yes"}},n2370:{id:"n2370",loc:[-85.646,41.953154]},n2371:{id:"n2371",loc:[-85.645222,41.953193]},n2372:{id:"n2372",loc:[-85.644732,41.953181]},n2373:{id:"n2373",loc:[-85.644064,41.953298]},n2374:{id:"n2374",loc:[-85.643818,41.953177]},n2375:{id:"n2375",loc:[-85.644001,41.95284]},n2376:{id:"n2376",loc:[-85.628174,41.95456],tags:{emergency:"fire_hydrant"}},n2377:{id:"n2377",loc:[-85.644267,41.952591]},n2378:{id:"n2378",loc:[-85.644288,41.952328]},n2379:{id:"n2379",loc:[-85.627276,41.953987],tags:{emergency:"fire_hydrant"}},n238:{id:"n238",loc:[-85.635906,41.94159]},n2380:{id:"n2380",loc:[-85.644262,41.952153]},n2381:{id:"n2381",loc:[-85.644168,41.95204]},n2382:{id:"n2382",loc:[-85.64421,41.951749]},n2383:{id:"n2383",loc:[-85.64385,41.951586]},n2384:{id:"n2384",loc:[-85.62736,41.955964],tags:{emergency:"fire_hydrant"}},n2385:{id:"n2385",loc:[-85.626307,41.957198],tags:{emergency:"fire_hydrant"}},n2386:{id:"n2386",loc:[-85.643589,41.951323]},n2387:{id:"n2387",loc:[-85.62747,41.957509],tags:{emergency:"fire_hydrant"}},n2388:{id:"n2388",loc:[-85.628665,41.957492],tags:{emergency:"fire_hydrant"}},n2389:{id:"n2389",loc:[-85.642535,41.951031]},n239:{id:"n239",loc:[-85.635883,41.940182]},n2390:{id:"n2390",loc:[-85.642269,41.95088]},n2391:{id:"n2391",loc:[-85.641878,41.950814]},n2392:{id:"n2392",loc:[-85.641549,41.950806]},n2393:{id:"n2393",loc:[-85.641103,41.950549]},n2394:{id:"n2394",loc:[-85.630864,41.959046],tags:{emergency:"fire_hydrant"}},n2395:{id:"n2395",loc:[-85.632249,41.958969],tags:{emergency:"fire_hydrant"}},n2396:{id:"n2396",loc:[-85.641037,41.949821]},n2397:{id:"n2397",loc:[-85.641006,41.949433]},n2398:{id:"n2398",loc:[-85.632232,41.95859],tags:{emergency:"fire_hydrant"}},n2399:{id:"n2399",loc:[-85.632071,41.958345],tags:{emergency:"fire_hydrant"}},n24:{id:"n24",loc:[-85.634346,41.942792]},n240:{id:"n240",loc:[-85.635916,41.942648]},n2400:{id:"n2400",loc:[-85.632228,41.9573],tags:{emergency:"fire_hydrant"}},n2401:{id:"n2401",loc:[-85.641152,41.948257]},n2402:{id:"n2402",loc:[-85.641055,41.947304]},n2403:{id:"n2403",loc:[-85.638022,41.945897]},n2404:{id:"n2404",loc:[-85.638672,41.950778]},n2405:{id:"n2405",loc:[-85.63666,41.944492],tags:{name:"Memory Isle",place:"island"}},n2406:{id:"n2406",loc:[-85.634982,41.946262],tags:{amenity:"post_office",name:"Three Rivers Post Office"}},n2407:{id:"n2407",loc:[-85.633676,41.946036]},n2408:{id:"n2408",loc:[-85.633736,41.946078]},n2409:{id:"n2409",loc:[-85.633997,41.946185]},n241:{id:"n241",loc:[-85.635805,41.941906]},n2410:{id:"n2410",loc:[-85.634448,41.945626],tags:{highway:"traffic_signals",traffic_signals:"signal"}},n2411:{id:"n2411",loc:[-85.63456,41.945731],tags:{crossing:"marked",highway:"crossing"}},n2412:{id:"n2412",loc:[-85.634592,41.94578]},n2413:{id:"n2413",loc:[-85.634607,41.945815]},n2414:{id:"n2414",loc:[-85.634614,41.945864]},n2415:{id:"n2415",loc:[-85.636066,41.946185]},n2416:{id:"n2416",loc:[-85.636128,41.946352]},n2417:{id:"n2417",loc:[-85.636142,41.946452]},n2418:{id:"n2418",loc:[-85.635327,41.945292]},n2419:{id:"n2419",loc:[-85.635648,41.94558]},n242:{id:"n242",loc:[-85.635909,41.941906]},n2420:{id:"n2420",loc:[-85.635769,41.945729]},n2421:{id:"n2421",loc:[-85.637349,41.945897]},n2422:{id:"n2422",loc:[-85.632211,41.95596],tags:{emergency:"fire_hydrant"}},n2423:{id:"n2423",loc:[-85.635942,41.94598]},n2424:{id:"n2424",loc:[-85.636443,41.946042]},n2425:{id:"n2425",loc:[-85.635819,41.946052]},n2426:{id:"n2426",loc:[-85.636669,41.946025]},n2427:{id:"n2427",loc:[-85.636832,41.946005]},n2428:{id:"n2428",loc:[-85.637039,41.945968]},n2429:{id:"n2429",loc:[-85.636291,41.946046]},n243:{id:"n243",loc:[-85.636359,41.941904]},n2430:{id:"n2430",loc:[-85.634005,41.943367]},n2431:{id:"n2431",loc:[-85.633366,41.943724]},n2432:{id:"n2432",loc:[-85.634617,41.946057]},n2433:{id:"n2433",loc:[-85.636534,41.944793]},n2434:{id:"n2434",loc:[-85.637055,41.945188]},n2435:{id:"n2435",loc:[-85.636153,41.944618]},n2436:{id:"n2436",loc:[-85.636803,41.944944]},n2437:{id:"n2437",loc:[-85.633389,41.945735]},n2438:{id:"n2438",loc:[-85.633536,41.94585]},n2439:{id:"n2439",loc:[-85.63363,41.945993]},n244:{id:"n244",loc:[-85.636351,41.941438]},n2440:{id:"n2440",loc:[-85.633268,41.94568]},n2441:{id:"n2441",loc:[-85.635947,41.94546]},n2442:{id:"n2442",loc:[-85.636277,41.945268]},n2443:{id:"n2443",loc:[-85.635203,41.944287]},n2444:{id:"n2444",loc:[-85.634876,41.944477]},n2445:{id:"n2445",loc:[-85.634975,41.944419]},n2446:{id:"n2446",loc:[-85.633877,41.943438]},n2447:{id:"n2447",loc:[-85.63508,41.945113]},n2448:{id:"n2448",loc:[-85.635372,41.944932]},n2449:{id:"n2449",loc:[-85.636594,41.945935]},n245:{id:"n245",loc:[-85.635903,41.941436]},n2450:{id:"n2450",loc:[-85.636901,41.945747]},n2451:{id:"n2451",loc:[-85.636329,41.945228]},n2452:{id:"n2452",loc:[-85.636025,41.945417]},n2453:{id:"n2453",loc:[-85.634002,41.944644]},n2454:{id:"n2454",loc:[-85.63407,41.944692]},n2455:{id:"n2455",loc:[-85.634114,41.944756]},n2456:{id:"n2456",loc:[-85.633762,41.944809]},n2457:{id:"n2457",loc:[-85.634184,41.944807]},n2458:{id:"n2458",loc:[-85.634291,41.944819]},n2459:{id:"n2459",loc:[-85.634639,41.944845]},n246:{id:"n246",loc:[-85.635798,41.941436]},n2460:{id:"n2460",loc:[-85.633822,41.944861]},n2461:{id:"n2461",loc:[-85.63411,41.944855]},n2462:{id:"n2462",loc:[-85.63435,41.944872]},n2463:{id:"n2463",loc:[-85.63441,41.944903]},n2464:{id:"n2464",loc:[-85.633883,41.944913]},n2465:{id:"n2465",loc:[-85.634164,41.944896]},n2466:{id:"n2466",loc:[-85.633487,41.944926]},n2467:{id:"n2467",loc:[-85.634736,41.944929]},n2468:{id:"n2468",loc:[-85.633944,41.944965]},n2469:{id:"n2469",loc:[-85.633555,41.944983]},n247:{id:"n247",loc:[-85.635929,41.941511]},n2470:{id:"n2470",loc:[-85.633995,41.945013]},n2471:{id:"n2471",loc:[-85.633614,41.945037]},n2472:{id:"n2472",loc:[-85.634848,41.945031]},n2473:{id:"n2473",loc:[-85.634049,41.945061]},n2474:{id:"n2474",loc:[-85.633678,41.945094]},n2475:{id:"n2475",loc:[-85.63317,41.945111]},n2476:{id:"n2476",loc:[-85.633357,41.945103]},n2477:{id:"n2477",loc:[-85.633728,41.945136]},n2478:{id:"n2478",loc:[-85.634146,41.945148]},n2479:{id:"n2479",loc:[-85.633416,41.945157]},n248:{id:"n248",loc:[-85.635929,41.941317]},n2480:{id:"n2480",loc:[-85.634625,41.945172]},n2481:{id:"n2481",loc:[-85.633239,41.945174]},n2482:{id:"n2482",loc:[-85.63469,41.945185]},n2483:{id:"n2483",loc:[-85.634661,41.945203]},n2484:{id:"n2484",loc:[-85.63348,41.945214]},n2485:{id:"n2485",loc:[-85.633578,41.945221]},n2486:{id:"n2486",loc:[-85.634742,41.945231]},n2487:{id:"n2487",loc:[-85.634251,41.94525]},n2488:{id:"n2488",loc:[-85.633524,41.945254]},n2489:{id:"n2489",loc:[-85.63468,41.945271]},n249:{id:"n249",loc:[-85.636414,41.941316]},n2490:{id:"n2490",loc:[-85.633885,41.945272]},n2491:{id:"n2491",loc:[-85.634795,41.945288]},n2492:{id:"n2492",loc:[-85.634742,41.94532]},n2493:{id:"n2493",loc:[-85.633946,41.945327]},n2494:{id:"n2494",loc:[-85.634844,41.945331]},n2495:{id:"n2495",loc:[-85.63435,41.945349]},n2496:{id:"n2496",loc:[-85.633733,41.945357]},n2497:{id:"n2497",loc:[-85.633987,41.945375]},n2498:{id:"n2498",loc:[-85.634911,41.945419]},n2499:{id:"n2499",loc:[-85.634049,41.945431]},n25:{id:"n25",loc:[-85.634333,41.942809]},n250:{id:"n250",loc:[-85.636414,41.941511]},n2500:{id:"n2500",loc:[-85.633705,41.945461]},n2501:{id:"n2501",loc:[-85.633642,41.945408]},n2502:{id:"n2502",loc:[-85.634493,41.945475]},n2503:{id:"n2503",loc:[-85.634106,41.945484]},n2504:{id:"n2504",loc:[-85.635008,41.945505]},n2505:{id:"n2505",loc:[-85.633757,41.945506]},n2506:{id:"n2506",loc:[-85.634542,41.945519]},n2507:{id:"n2507",loc:[-85.634162,41.945536]},n2508:{id:"n2508",loc:[-85.633843,41.945547]},n2509:{id:"n2509",loc:[-85.634919,41.94556]},n251:{id:"n251",loc:[-85.636819,41.941617]},n2510:{id:"n2510",loc:[-85.633818,41.945561]},n2511:{id:"n2511",loc:[-85.634638,41.94559]},n2512:{id:"n2512",loc:[-85.633901,41.945598]},n2513:{id:"n2513",loc:[-85.634257,41.945626]},n2514:{id:"n2514",loc:[-85.633967,41.945652]},n2515:{id:"n2515",loc:[-85.634735,41.945676]},n2516:{id:"n2516",loc:[-85.635057,41.945683]},n2517:{id:"n2517",loc:[-85.635296,41.945703]},n2518:{id:"n2518",loc:[-85.635112,41.945703]},n2519:{id:"n2519",loc:[-85.634782,41.945729]},n252:{id:"n252",loc:[-85.636718,41.941619]},n2520:{id:"n2520",loc:[-85.634052,41.945747]},n2521:{id:"n2521",loc:[-85.635296,41.945757]},n2522:{id:"n2522",loc:[-85.635314,41.945757]},n2523:{id:"n2523",loc:[-85.635112,41.945761]},n2524:{id:"n2524",loc:[-85.634841,41.945778]},n2525:{id:"n2525",loc:[-85.635315,41.945939]},n2526:{id:"n2526",loc:[-85.634841,41.945921]},n2527:{id:"n2527",loc:[-85.635461,41.944879]},n2528:{id:"n2528",loc:[-85.636024,41.945384]},n2529:{id:"n2529",loc:[-85.636145,41.945312]},n253:{id:"n253",loc:[-85.636716,41.941509]},n2530:{id:"n2530",loc:[-85.6356,41.944797]},n2531:{id:"n2531",loc:[-85.635135,41.944354]},n2532:{id:"n2532",loc:[-85.632988,41.945369]},n2533:{id:"n2533",loc:[-85.633376,41.94563]},n2534:{id:"n2534",loc:[-85.633539,41.945534]},n2535:{id:"n2535",loc:[-85.633238,41.945248]},n2536:{id:"n2536",loc:[-85.633166,41.945216]},n2537:{id:"n2537",loc:[-85.633114,41.945188]},n2538:{id:"n2538",loc:[-85.633078,41.945127]},n2539:{id:"n2539",loc:[-85.633066,41.94508]},n254:{id:"n254",loc:[-85.636732,41.941509]},n2540:{id:"n2540",loc:[-85.633222,41.945358]},n2541:{id:"n2541",loc:[-85.633425,41.945541]},n2542:{id:"n2542",loc:[-85.63299,41.9455]},n2543:{id:"n2543",loc:[-85.634374,41.944327]},n2544:{id:"n2544",loc:[-85.633648,41.943697]},n2545:{id:"n2545",loc:[-85.633533,41.943764]},n2546:{id:"n2546",loc:[-85.634239,41.944417]},n2547:{id:"n2547",loc:[-85.634122,41.944395]},n2548:{id:"n2548",loc:[-85.634235,41.944326]},n2549:{id:"n2549",loc:[-85.633613,41.943787]},n255:{id:"n255",loc:[-85.636731,41.941461]},n2550:{id:"n2550",loc:[-85.633915,41.943613]},n2551:{id:"n2551",loc:[-85.634015,41.943555]},n2552:{id:"n2552",loc:[-85.63433,41.943839]},n2553:{id:"n2553",loc:[-85.634236,41.943894]},n2554:{id:"n2554",loc:[-85.635413,41.946052]},n2555:{id:"n2555",loc:[-85.635405,41.94569]},n2556:{id:"n2556",loc:[-85.635684,41.945925]},n2557:{id:"n2557",loc:[-85.635614,41.945742]},n2558:{id:"n2558",loc:[-85.635401,41.945745]},n2559:{id:"n2559",loc:[-85.635406,41.945928]},n256:{id:"n256",loc:[-85.636799,41.941461]},n2560:{id:"n2560",loc:[-85.633478,41.943663]},n2561:{id:"n2561",loc:[-85.633291,41.943526]},n2562:{id:"n2562",loc:[-85.633094,41.943541]},n2563:{id:"n2563",loc:[-85.633302,41.943492]},n2564:{id:"n2564",loc:[-85.633047,41.943623]},n2565:{id:"n2565",loc:[-85.633275,41.943562]},n2566:{id:"n2566",loc:[-85.633351,41.943518]},n2567:{id:"n2567",loc:[-85.633224,41.9434]},n2568:{id:"n2568",loc:[-85.633235,41.943369]},n2569:{id:"n2569",loc:[-85.635179,41.943911]},n257:{id:"n257",loc:[-85.6368,41.9415]},n2570:{id:"n2570",loc:[-85.635146,41.943918]},n2571:{id:"n2571",loc:[-85.634888,41.943905]},n2572:{id:"n2572",loc:[-85.634832,41.943911]},n2573:{id:"n2573",loc:[-85.634638,41.944007]},n2574:{id:"n2574",loc:[-85.634568,41.94405]},n2575:{id:"n2575",loc:[-85.635994,41.94501]},n2576:{id:"n2576",loc:[-85.636388,41.944608]},n2577:{id:"n2577",loc:[-85.636215,41.944787]},n2578:{id:"n2578",loc:[-85.637948,41.944587]},n2579:{id:"n2579",loc:[-85.637849,41.944567]},n258:{id:"n258",loc:[-85.636814,41.9415]},n2580:{id:"n2580",loc:[-85.637895,41.944455]},n2581:{id:"n2581",loc:[-85.637996,41.944477]},n2582:{id:"n2582",loc:[-85.635525,41.94337]},n2583:{id:"n2583",loc:[-85.637847,41.943923]},n2584:{id:"n2584",loc:[-85.637891,41.944124]},n2585:{id:"n2585",loc:[-85.638167,41.944229]},n2586:{id:"n2586",loc:[-85.638236,41.944097]},n2587:{id:"n2587",loc:[-85.638207,41.944025]},n2588:{id:"n2588",loc:[-85.638141,41.943997]},n2589:{id:"n2589",loc:[-85.638057,41.944015]},n259:{id:"n259",loc:[-85.636815,41.941538]},n2590:{id:"n2590",loc:[-85.637902,41.944231]},n2591:{id:"n2591",loc:[-85.638134,41.944307]},n2592:{id:"n2592",loc:[-85.638242,41.944294]},n2593:{id:"n2593",loc:[-85.638274,41.944222]},n2594:{id:"n2594",loc:[-85.638236,41.944174]},n2595:{id:"n2595",loc:[-85.638207,41.944157]},n2596:{id:"n2596",loc:[-85.637818,41.943984]},n2597:{id:"n2597",loc:[-85.634996,41.944439]},n2598:{id:"n2598",loc:[-85.633946,41.945804]},n2599:{id:"n2599",loc:[-85.634102,41.945864]},n26:{id:"n26",loc:[-85.634346,41.942744]},n260:{id:"n260",loc:[-85.636827,41.941538]},n2600:{id:"n2600",loc:[-85.633819,41.945756]},n2601:{id:"n2601",loc:[-85.634025,41.945975]},n2602:{id:"n2602",loc:[-85.633742,41.945867]},n2603:{id:"n2603",loc:[-85.63373,41.946004]},n2604:{id:"n2604",loc:[-85.633947,41.946081]},n2605:{id:"n2605",loc:[-85.633872,41.945917]},n2606:{id:"n2606",loc:[-85.633825,41.945985]},n2607:{id:"n2607",loc:[-85.633762,41.94596]},n2608:{id:"n2608",loc:[-85.634224,41.946037]},n2609:{id:"n2609",loc:[-85.634357,41.945851]},n261:{id:"n261",loc:[-85.636828,41.941584]},n2610:{id:"n2610",loc:[-85.634398,41.945813]},n2611:{id:"n2611",loc:[-85.634461,41.945812]},n2612:{id:"n2612",loc:[-85.634501,41.945852]},n2613:{id:"n2613",loc:[-85.634503,41.94597]},n2614:{id:"n2614",loc:[-85.634462,41.945971]},n2615:{id:"n2615",loc:[-85.634465,41.946036]},n2616:{id:"n2616",loc:[-85.634235,41.946072]},n2617:{id:"n2617",loc:[-85.634447,41.946036]},n2618:{id:"n2618",loc:[-85.634448,41.946052]},n2619:{id:"n2619",loc:[-85.634494,41.946051]},n262:{id:"n262",loc:[-85.636819,41.941585]},n2620:{id:"n2620",loc:[-85.634497,41.946144]},n2621:{id:"n2621",loc:[-85.634453,41.946144]},n2622:{id:"n2622",loc:[-85.634454,41.94616]},n2623:{id:"n2623",loc:[-85.634393,41.946161]},n2624:{id:"n2624",loc:[-85.634394,41.94618]},n2625:{id:"n2625",loc:[-85.634345,41.94618]},n2626:{id:"n2626",loc:[-85.634344,41.946162]},n2627:{id:"n2627",loc:[-85.63427,41.946163]},n2628:{id:"n2628",loc:[-85.634266,41.946071]},n2629:{id:"n2629",loc:[-85.634148,41.946163]},n263:{id:"n263",loc:[-85.636854,41.941714]},n2630:{id:"n2630",loc:[-85.634213,41.946072]},n2631:{id:"n2631",loc:[-85.633293,41.946309]},n2632:{id:"n2632",loc:[-85.633122,41.946239]},n2633:{id:"n2633",loc:[-85.633295,41.946005]},n2634:{id:"n2634",loc:[-85.633395,41.946047]},n2635:{id:"n2635",loc:[-85.633404,41.946035]},n2636:{id:"n2636",loc:[-85.633459,41.946057]},n2637:{id:"n2637",loc:[-85.633387,41.946154]},n2638:{id:"n2638",loc:[-85.633403,41.946161]},n2639:{id:"n2639",loc:[-85.634176,41.946415]},n264:{id:"n264",loc:[-85.636855,41.941774]},n2640:{id:"n2640",loc:[-85.634179,41.946339]},n2641:{id:"n2641",loc:[-85.634455,41.946345]},n2642:{id:"n2642",loc:[-85.634452,41.946422]},n2643:{id:"n2643",loc:[-85.63437,41.946421]},n2644:{id:"n2644",loc:[-85.634367,41.946497]},n2645:{id:"n2645",loc:[-85.634289,41.946495]},n2646:{id:"n2646",loc:[-85.634291,41.946448]},n2647:{id:"n2647",loc:[-85.634269,41.946448]},n2648:{id:"n2648",loc:[-85.63427,41.946417]},n2649:{id:"n2649",loc:[-85.63484,41.946328]},n265:{id:"n265",loc:[-85.636822,41.941774]},n2650:{id:"n2650",loc:[-85.634839,41.946187]},n2651:{id:"n2651",loc:[-85.635148,41.946186]},n2652:{id:"n2652",loc:[-85.635148,41.946216]},n2653:{id:"n2653",loc:[-85.63521,41.946216]},n2654:{id:"n2654",loc:[-85.63521,41.946348]},n2655:{id:"n2655",loc:[-85.635154,41.946348]},n2656:{id:"n2656",loc:[-85.635153,41.946327]},n2657:{id:"n2657",loc:[-85.634037,41.946957]},n2658:{id:"n2658",loc:[-85.634253,41.946953]},n2659:{id:"n2659",loc:[-85.63481,41.946543]},n266:{id:"n266",loc:[-85.636822,41.941778]},n2660:{id:"n2660",loc:[-85.634809,41.946459]},n2661:{id:"n2661",loc:[-85.635154,41.946458]},n2662:{id:"n2662",loc:[-85.635155,41.946554]},n2663:{id:"n2663",loc:[-85.635022,41.946547]},n2664:{id:"n2664",loc:[-85.635022,41.946573]},n2665:{id:"n2665",loc:[-85.634909,41.946574]},n2666:{id:"n2666",loc:[-85.634909,41.946561]},n2667:{id:"n2667",loc:[-85.634896,41.947159]},n2668:{id:"n2668",loc:[-85.634894,41.947032]},n2669:{id:"n2669",loc:[-85.635024,41.947031]},n267:{id:"n267",loc:[-85.636756,41.941779]},n2670:{id:"n2670",loc:[-85.635026,41.947158]},n2671:{id:"n2671",loc:[-85.635233,41.947105]},n2672:{id:"n2672",loc:[-85.635236,41.946991]},n2673:{id:"n2673",loc:[-85.635369,41.946993]},n2674:{id:"n2674",loc:[-85.635366,41.947107]},n2675:{id:"n2675",loc:[-85.634824,41.946929]},n2676:{id:"n2676",loc:[-85.634825,41.946818]},n2677:{id:"n2677",loc:[-85.63512,41.946819]},n2678:{id:"n2678",loc:[-85.635119,41.94693]},n2679:{id:"n2679",loc:[-85.634796,41.946806]},n268:{id:"n268",loc:[-85.636756,41.941774]},n2680:{id:"n2680",loc:[-85.634792,41.946604]},n2681:{id:"n2681",loc:[-85.634948,41.946602]},n2682:{id:"n2682",loc:[-85.634949,41.946645]},n2683:{id:"n2683",loc:[-85.634975,41.946644]},n2684:{id:"n2684",loc:[-85.634974,41.946599]},n2685:{id:"n2685",loc:[-85.635117,41.946598]},n2686:{id:"n2686",loc:[-85.635122,41.946801]},n2687:{id:"n2687",loc:[-85.634981,41.946803]},n2688:{id:"n2688",loc:[-85.634979,41.946752]},n2689:{id:"n2689",loc:[-85.634952,41.946752]},n269:{id:"n269",loc:[-85.636721,41.941774]},n2690:{id:"n2690",loc:[-85.634953,41.946804]},n2691:{id:"n2691",loc:[-85.634649,41.946841]},n2692:{id:"n2692",loc:[-85.634331,41.94684]},n2693:{id:"n2693",loc:[-85.634183,41.946809]},n2694:{id:"n2694",loc:[-85.633699,41.946607]},n2695:{id:"n2695",loc:[-85.634487,41.946664]},n2696:{id:"n2696",loc:[-85.634486,41.946598]},n2697:{id:"n2697",loc:[-85.63423,41.946599]},n2698:{id:"n2698",loc:[-85.634231,41.946662]},n2699:{id:"n2699",loc:[-85.634284,41.946662]},n27:{id:"n27",loc:[-85.634136,41.943183]},n270:{id:"n270",loc:[-85.63672,41.941714]},n2700:{id:"n2700",loc:[-85.634284,41.946679]},n2701:{id:"n2701",loc:[-85.634365,41.946679]},n2702:{id:"n2702",loc:[-85.634365,41.946664]},n2703:{id:"n2703",loc:[-85.635443,41.947015]},n2704:{id:"n2704",loc:[-85.635442,41.946801]},n2705:{id:"n2705",loc:[-85.63603,41.9468]},n2706:{id:"n2706",loc:[-85.636028,41.947016]},n2707:{id:"n2707",loc:[-85.635457,41.946582]},n2708:{id:"n2708",loc:[-85.635455,41.946211]},n2709:{id:"n2709",loc:[-85.635636,41.946579]},n271:{id:"n271",loc:[-85.636767,41.941713]},n2710:{id:"n2710",loc:[-85.635716,41.9468]},n2711:{id:"n2711",loc:[-85.635969,41.9468]},n2712:{id:"n2712",loc:[-85.635973,41.946295]},n2713:{id:"n2713",loc:[-85.636019,41.946484]},n2714:{id:"n2714",loc:[-85.636022,41.946388]},n2715:{id:"n2715",loc:[-85.635961,41.946493]},n2716:{id:"n2716",loc:[-85.635713,41.94621]},n2717:{id:"n2717",loc:[-85.635416,41.946142]},n2718:{id:"n2718",loc:[-85.635759,41.946203]},n2719:{id:"n2719",loc:[-85.636153,41.946747]},n272:{id:"n272",loc:[-85.636767,41.941706]},n2720:{id:"n2720",loc:[-85.635417,41.946915]},n2721:{id:"n2721",loc:[-85.636154,41.946915]},n2722:{id:"n2722",loc:[-85.635866,41.946473]},n2723:{id:"n2723",loc:[-85.635717,41.946633]},n2724:{id:"n2724",loc:[-85.635556,41.946166]},n2725:{id:"n2725",loc:[-85.63556,41.946556]},n2726:{id:"n2726",loc:[-85.635731,41.946594]},n2727:{id:"n2727",loc:[-85.635866,41.946595]},n2728:{id:"n2728",loc:[-85.635456,41.947028]},n2729:{id:"n2729",loc:[-85.635796,41.947023]},n273:{id:"n273",loc:[-85.636779,41.941698]},n2730:{id:"n2730",loc:[-85.635798,41.947091]},n2731:{id:"n2731",loc:[-85.63573,41.947092]},n2732:{id:"n2732",loc:[-85.635733,41.947233]},n2733:{id:"n2733",loc:[-85.636283,41.946863]},n2734:{id:"n2734",loc:[-85.63628,41.946706]},n2735:{id:"n2735",loc:[-85.636341,41.946705]},n2736:{id:"n2736",loc:[-85.636273,41.946584]},n2737:{id:"n2737",loc:[-85.636396,41.946545]},n2738:{id:"n2738",loc:[-85.636474,41.946684]},n2739:{id:"n2739",loc:[-85.636511,41.946861]},n274:{id:"n274",loc:[-85.636798,41.941697]},n2740:{id:"n2740",loc:[-85.633713,41.947184]},n2741:{id:"n2741",loc:[-85.633651,41.94716]},n2742:{id:"n2742",loc:[-85.633704,41.947085]},n2743:{id:"n2743",loc:[-85.6336,41.947044]},n2744:{id:"n2744",loc:[-85.633506,41.947177]},n2745:{id:"n2745",loc:[-85.629586,41.952469]},n2746:{id:"n2746",loc:[-85.634723,41.953681]},n2747:{id:"n2747",loc:[-85.63478,41.959007]},n2748:{id:"n2748",loc:[-85.632793,41.94405],tags:{highway:"traffic_signals",traffic_signals:"signal","traffic_signals:direction":"both"}},n2749:{id:"n2749",loc:[-85.634648,41.947325]},n275:{id:"n275",loc:[-85.63681,41.941705]},n2750:{id:"n2750",loc:[-85.625078,41.952097]},n2751:{id:"n2751",loc:[-85.633195,41.94734]},n2752:{id:"n2752",loc:[-85.626447,41.957168]},n2753:{id:"n2753",loc:[-85.632023,41.949012]},n2754:{id:"n2754",loc:[-85.630835,41.950656]},n2755:{id:"n2755",loc:[-85.634655,41.948612]},n2756:{id:"n2756",loc:[-85.636182,41.948605]},n2757:{id:"n2757",loc:[-85.634729,41.954667]},n2758:{id:"n2758",loc:[-85.634686,41.951159]},n2759:{id:"n2759",loc:[-85.636206,41.951146]},n276:{id:"n276",loc:[-85.63681,41.941714]},n2760:{id:"n2760",loc:[-85.634668,41.949891]},n2761:{id:"n2761",loc:[-85.634701,41.952422]},n2762:{id:"n2762",loc:[-85.634747,41.955907]},n2763:{id:"n2763",loc:[-85.627975,41.954695]},n2764:{id:"n2764",loc:[-85.626832,41.954698]},n2765:{id:"n2765",loc:[-85.632278,41.948624]},n2766:{id:"n2766",loc:[-85.628639,41.953725]},n2767:{id:"n2767",loc:[-85.636233,41.95241]},n2768:{id:"n2768",loc:[-85.631385,41.949913]},n2769:{id:"n2769",loc:[-85.630486,41.951194]},n277:{id:"n277",loc:[-85.636861,41.942041]},n2770:{id:"n2770",loc:[-85.624937,41.952088]},n2771:{id:"n2771",loc:[-85.624945,41.952022]},n2772:{id:"n2772",loc:[-85.636162,41.94731]},n2773:{id:"n2773",loc:[-85.636188,41.949881]},n2774:{id:"n2774",loc:[-85.631422,41.948294]},n2775:{id:"n2775",loc:[-85.632844,41.945547]},n2776:{id:"n2776",loc:[-85.632484,41.945344]},n2777:{id:"n2777",loc:[-85.631775,41.944636]},n2778:{id:"n2778",loc:[-85.632656,41.945471]},n2779:{id:"n2779",loc:[-85.631959,41.944827]},n278:{id:"n278",loc:[-85.636862,41.942099]},n2780:{id:"n2780",loc:[-85.631679,41.94438]},n2781:{id:"n2781",loc:[-85.625129,41.959272]},n2782:{id:"n2782",loc:[-85.632446,41.944861]},n2783:{id:"n2783",loc:[-85.632804,41.945477]},n2784:{id:"n2784",loc:[-85.632255,41.944962]},n2785:{id:"n2785",loc:[-85.632736,41.944757]},n2786:{id:"n2786",loc:[-85.632543,41.94486]},n2787:{id:"n2787",loc:[-85.632889,41.945561]},n2788:{id:"n2788",loc:[-85.632091,41.944949]},n2789:{id:"n2789",loc:[-85.632537,41.944713]},n279:{id:"n279",loc:[-85.636807,41.942099]},n2790:{id:"n2790",loc:[-85.632279,41.94485]},n2791:{id:"n2791",loc:[-85.632749,41.943247]},n2792:{id:"n2792",loc:[-85.632824,41.943152]},n2793:{id:"n2793",loc:[-85.632929,41.94317]},n2794:{id:"n2794",loc:[-85.632897,41.943078]},n2795:{id:"n2795",loc:[-85.632626,41.943231]},n2796:{id:"n2796",loc:[-85.634048,41.947257]},n2797:{id:"n2797",loc:[-85.634264,41.947252]},n2798:{id:"n2798",loc:[-85.635418,41.947317]},n2799:{id:"n2799",loc:[-85.635461,41.947237]},n28:{id:"n28",loc:[-85.63821,41.944308]},n280:{id:"n280",loc:[-85.636807,41.942126]},n2800:{id:"n2800",loc:[-85.632868,41.946229]},n2801:{id:"n2801",loc:[-85.633673,41.947242]},n2802:{id:"n2802",loc:[-85.623604,41.945881],tags:{amenity:"school",name:"Barrows School"}},n2803:{id:"n2803",loc:[-85.627401,41.943496]},n2804:{id:"n2804",loc:[-85.627403,41.943625]},n2805:{id:"n2805",loc:[-85.626409,41.943215]},n2806:{id:"n2806",loc:[-85.624884,41.943508]},n2807:{id:"n2807",loc:[-85.625191,41.943509]},n2808:{id:"n2808",loc:[-85.624882,41.94382]},n2809:{id:"n2809",loc:[-85.624893,41.945618]},n281:{id:"n281",loc:[-85.636726,41.942126]},n2810:{id:"n2810",loc:[-85.624912,41.946524]},n2811:{id:"n2811",loc:[-85.622721,41.946535]},n2812:{id:"n2812",loc:[-85.627399,41.94469]},n2813:{id:"n2813",loc:[-85.622716,41.945622]},n2814:{id:"n2814",loc:[-85.624886,41.944724]},n2815:{id:"n2815",loc:[-85.622674,41.944737]},n2816:{id:"n2816",loc:[-85.625092,41.945063]},n2817:{id:"n2817",loc:[-85.625233,41.945064]},n2818:{id:"n2818",loc:[-85.625229,41.944871]},n2819:{id:"n2819",loc:[-85.625066,41.944871]},n282:{id:"n282",loc:[-85.636726,41.942098]},n2820:{id:"n2820",loc:[-85.625024,41.944901]},n2821:{id:"n2821",loc:[-85.625025,41.944924]},n2822:{id:"n2822",loc:[-85.625087,41.944926]},n2823:{id:"n2823",loc:[-85.625349,41.944506]},n2824:{id:"n2824",loc:[-85.625347,41.944388]},n2825:{id:"n2825",loc:[-85.625152,41.94439]},n2826:{id:"n2826",loc:[-85.625152,41.944431]},n2827:{id:"n2827",loc:[-85.625134,41.944431]},n2828:{id:"n2828",loc:[-85.625136,41.944508]},n2829:{id:"n2829",loc:[-85.623236,41.946341]},n283:{id:"n283",loc:[-85.636708,41.942098]},n2830:{id:"n2830",loc:[-85.623241,41.946067]},n2831:{id:"n2831",loc:[-85.623207,41.946067]},n2832:{id:"n2832",loc:[-85.623212,41.945827]},n2833:{id:"n2833",loc:[-85.622981,41.945825]},n2834:{id:"n2834",loc:[-85.622976,41.946063]},n2835:{id:"n2835",loc:[-85.623006,41.946063]},n2836:{id:"n2836",loc:[-85.623002,41.946256]},n2837:{id:"n2837",loc:[-85.623075,41.946256]},n2838:{id:"n2838",loc:[-85.623074,41.946339]},n2839:{id:"n2839",loc:[-85.624574,41.951755]},n284:{id:"n284",loc:[-85.636708,41.942041]},n2840:{id:"n2840",loc:[-85.62498,41.951844]},n2841:{id:"n2841",loc:[-85.625086,41.95188]},n2842:{id:"n2842",loc:[-85.625135,41.951922]},n2843:{id:"n2843",loc:[-85.615273,41.945637]},n2844:{id:"n2844",loc:[-85.620172,41.945627]},n2845:{id:"n2845",loc:[-85.625167,41.951985]},n2846:{id:"n2846",loc:[-85.622741,41.947437]},n2847:{id:"n2847",loc:[-85.624907,41.947428]},n2848:{id:"n2848",loc:[-85.627046,41.940995]},n2849:{id:"n2849",loc:[-85.627295,41.941304]},n285:{id:"n285",loc:[-85.635618,41.941852]},n2850:{id:"n2850",loc:[-85.627352,41.94148]},n2851:{id:"n2851",loc:[-85.62737,41.942261]},n2852:{id:"n2852",loc:[-85.6264,41.942263]},n2853:{id:"n2853",loc:[-85.622769,41.949228]},n2854:{id:"n2854",loc:[-85.624937,41.949218]},n2855:{id:"n2855",loc:[-85.630001,41.944664]},n2856:{id:"n2856",loc:[-85.624873,41.942022]},n2857:{id:"n2857",loc:[-85.622761,41.948333]},n2858:{id:"n2858",loc:[-85.624924,41.948334]},n2859:{id:"n2859",loc:[-85.620051,41.94383]},n286:{id:"n286",loc:[-85.635621,41.94202]},n2860:{id:"n2860",loc:[-85.627629,41.946498]},n2861:{id:"n2861",loc:[-85.622757,41.950111]},n2862:{id:"n2862",loc:[-85.623685,41.954624]},n2863:{id:"n2863",loc:[-85.621459,41.944756]},n2864:{id:"n2864",loc:[-85.628637,41.944676]},n2865:{id:"n2865",loc:[-85.630125,41.944654]},n2866:{id:"n2866",loc:[-85.625196,41.952097]},n2867:{id:"n2867",loc:[-85.630257,41.944637]},n2868:{id:"n2868",loc:[-85.631247,41.944459]},n2869:{id:"n2869",loc:[-85.624867,41.94159]},n287:{id:"n287",loc:[-85.63524,41.942023]},n2870:{id:"n2870",loc:[-85.624958,41.950343]},n2871:{id:"n2871",loc:[-85.624948,41.950484]},n2872:{id:"n2872",loc:[-85.624813,41.950983]},n2873:{id:"n2873",loc:[-85.624723,41.951789]},n2874:{id:"n2874",loc:[-85.624262,41.9512]},n2875:{id:"n2875",loc:[-85.62414,41.951201]},n2876:{id:"n2876",loc:[-85.624139,41.95112]},n2877:{id:"n2877",loc:[-85.628481,41.945611]},n2878:{id:"n2878",loc:[-85.620072,41.946538]},n2879:{id:"n2879",loc:[-85.622763,41.95099]},n288:{id:"n288",loc:[-85.635237,41.941855]},n2880:{id:"n2880",loc:[-85.62814,41.946963]},n2881:{id:"n2881",loc:[-85.628245,41.947031]},n2882:{id:"n2882",loc:[-85.628331,41.947066]},n2883:{id:"n2883",loc:[-85.629722,41.944444],tags:{leisure:"park",name:"Scouter Park"}},n2884:{id:"n2884",loc:[-85.629977,41.943907]},n2885:{id:"n2885",loc:[-85.629947,41.943775]},n2886:{id:"n2886",loc:[-85.629899,41.943625]},n2887:{id:"n2887",loc:[-85.632286,41.944257]},n2888:{id:"n2888",loc:[-85.632523,41.944179]},n2889:{id:"n2889",loc:[-85.632141,41.944293]},n289:{id:"n289",loc:[-85.635568,41.940475]},n2890:{id:"n2890",loc:[-85.631571,41.9444]},n2891:{id:"n2891",loc:[-85.643236,41.941895]},n2892:{id:"n2892",loc:[-85.62865,41.945353]},n2893:{id:"n2893",loc:[-85.628594,41.945481]},n2894:{id:"n2894",loc:[-85.628581,41.947169]},n2895:{id:"n2895",loc:[-85.631843,41.943793]},n2896:{id:"n2896",loc:[-85.632299,41.943472]},n2897:{id:"n2897",loc:[-85.631519,41.944881]},n2898:{id:"n2898",loc:[-85.628429,41.947219]},n2899:{id:"n2899",loc:[-85.63145,41.945162]},n29:{id:"n29",loc:[-85.637963,41.944263]},n290:{id:"n290",loc:[-85.634584,41.940477]},n2900:{id:"n2900",loc:[-85.630939,41.945519]},n2901:{id:"n2901",loc:[-85.62903,41.945719]},n2902:{id:"n2902",loc:[-85.630521,41.945559]},n2903:{id:"n2903",loc:[-85.629294,41.945585]},n2904:{id:"n2904",loc:[-85.629845,41.945543]},n2905:{id:"n2905",loc:[-85.631497,41.944625]},n2906:{id:"n2906",loc:[-85.630281,41.945553]},n2907:{id:"n2907",loc:[-85.628553,41.946973]},n2908:{id:"n2908",loc:[-85.631383,41.945338]},n2909:{id:"n2909",loc:[-85.628843,41.946103]},n291:{id:"n291",loc:[-85.634583,41.940203]},n2910:{id:"n2910",loc:[-85.631193,41.945473]},n2911:{id:"n2911",loc:[-85.628897,41.945944]},n2912:{id:"n2912",loc:[-85.628789,41.946454]},n2913:{id:"n2913",loc:[-85.632548,41.944563]},n2914:{id:"n2914",loc:[-85.627527,41.944555]},n2915:{id:"n2915",loc:[-85.62752,41.943726]},n2916:{id:"n2916",loc:[-85.627894,41.943723]},n2917:{id:"n2917",loc:[-85.627897,41.943919]},n2918:{id:"n2918",loc:[-85.627991,41.943934]},n2919:{id:"n2919",loc:[-85.628082,41.943966]},n292:{id:"n292",loc:[-85.635567,41.940201]},n2920:{id:"n2920",loc:[-85.628177,41.944015]},n2921:{id:"n2921",loc:[-85.628193,41.944048]},n2922:{id:"n2922",loc:[-85.628167,41.944054]},n2923:{id:"n2923",loc:[-85.628193,41.944094]},n2924:{id:"n2924",loc:[-85.628213,41.944144]},n2925:{id:"n2925",loc:[-85.628214,41.944199]},n2926:{id:"n2926",loc:[-85.62833,41.944196]},n2927:{id:"n2927",loc:[-85.628328,41.944262]},n2928:{id:"n2928",loc:[-85.628173,41.944262]},n2929:{id:"n2929",loc:[-85.628171,41.944293]},n293:{id:"n293",loc:[-85.635818,41.942677],tags:{crossing:"marked",highway:"crossing"}},n2930:{id:"n2930",loc:[-85.628039,41.944296]},n2931:{id:"n2931",loc:[-85.62804,41.944329]},n2932:{id:"n2932",loc:[-85.627829,41.944335]},n2933:{id:"n2933",loc:[-85.627835,41.94455]},n2936:{id:"n2936",loc:[-85.632823,41.945994]},n294:{id:"n294",loc:[-85.635696,41.942712]},n2940:{id:"n2940",loc:[-85.632192,41.945973]},n2941:{id:"n2941",loc:[-85.63226,41.94587]},n2942:{id:"n2942",loc:[-85.632721,41.946036]},n2943:{id:"n2943",loc:[-85.632641,41.946142]},n2944:{id:"n2944",loc:[-85.62937,41.947467]},n2945:{id:"n2945",loc:[-85.62959,41.942936]},n2946:{id:"n2946",loc:[-85.629551,41.94284]},n2947:{id:"n2947",loc:[-85.629501,41.942704]},n2948:{id:"n2948",loc:[-85.629472,41.942578]},n2949:{id:"n2949",loc:[-85.629361,41.941801]},n295:{id:"n295",loc:[-85.635679,41.941962]},n2950:{id:"n2950",loc:[-85.629339,41.941716]},n2951:{id:"n2951",loc:[-85.629315,41.94166]},n2952:{id:"n2952",loc:[-85.629279,41.941602]},n2953:{id:"n2953",loc:[-85.629227,41.941556]},n2954:{id:"n2954",loc:[-85.624261,41.95112]},n2955:{id:"n2955",loc:[-85.629153,41.941524]},n2956:{id:"n2956",loc:[-85.626904,41.941098]},n2957:{id:"n2957",loc:[-85.624588,41.951294]},n2958:{id:"n2958",loc:[-85.631844,41.942945]},n2959:{id:"n2959",loc:[-85.625854,41.949222]},n296:{id:"n296",loc:[-85.635672,41.941337]},n2960:{id:"n2960",loc:[-85.625146,41.955238]},n2961:{id:"n2961",loc:[-85.626745,41.948296]},n2962:{id:"n2962",loc:[-85.625721,41.95524]},n2963:{id:"n2963",loc:[-85.624706,41.952317]},n2964:{id:"n2964",loc:[-85.62609,41.956147]},n2965:{id:"n2965",loc:[-85.624401,41.954928]},n2966:{id:"n2966",loc:[-85.626558,41.955367]},n2967:{id:"n2967",loc:[-85.62468,41.955096]},n2968:{id:"n2968",loc:[-85.624159,41.953929]},n2969:{id:"n2969",loc:[-85.62506,41.951113]},n297:{id:"n297",loc:[-85.635658,41.941284]},n2970:{id:"n2970",loc:[-85.624942,41.951591]},n2971:{id:"n2971",loc:[-85.627399,41.947546]},n2972:{id:"n2972",loc:[-85.627695,41.947404]},n2973:{id:"n2973",loc:[-85.625925,41.94896]},n2974:{id:"n2974",loc:[-85.625725,41.950211]},n2975:{id:"n2975",loc:[-85.627008,41.947963]},n2976:{id:"n2976",loc:[-85.624373,41.953458]},n2977:{id:"n2977",loc:[-85.624137,41.954392]},n2978:{id:"n2978",loc:[-85.628257,41.947307]},n2979:{id:"n2979",loc:[-85.625281,41.95066]},n298:{id:"n298",loc:[-85.635602,41.941166]},n2980:{id:"n2980",loc:[-85.625865,41.949804]},n2981:{id:"n2981",loc:[-85.626508,41.955932]},n2982:{id:"n2982",loc:[-85.626333,41.955216]},n2983:{id:"n2983",loc:[-85.626637,41.955676]},n2984:{id:"n2984",loc:[-85.624223,41.954599]},n2985:{id:"n2985",loc:[-85.626219,41.948671]},n2986:{id:"n2986",loc:[-85.624556,41.953043]},n2987:{id:"n2987",loc:[-85.625598,41.956302]},n2988:{id:"n2988",loc:[-85.624571,41.952971]},n2989:{id:"n2989",loc:[-85.627141,41.940727]},n299:{id:"n299",loc:[-85.635598,41.941138]},n2990:{id:"n2990",loc:[-85.627102,41.939144]},n2991:{id:"n2991",loc:[-85.627127,41.940086]},n2992:{id:"n2992",loc:[-85.627116,41.940843]},n2993:{id:"n2993",loc:[-85.627132,41.9402]},n2994:{id:"n2994",loc:[-85.629734,41.940078]},n2995:{id:"n2995",loc:[-85.6276,41.937412]},n2996:{id:"n2996",loc:[-85.627451,41.937549]},n2997:{id:"n2997",loc:[-85.627375,41.937618]},n2998:{id:"n2998",loc:[-85.627278,41.937728]},n2999:{id:"n2999",loc:[-85.627199,41.937842]},n3:{id:"n3",loc:[-85.627345,41.953983]},n30:{id:"n30",loc:[-85.637882,41.944205]},n300:{id:"n300",loc:[-85.635614,41.941076]},n3000:{id:"n3000",loc:[-85.627141,41.937981]},n3001:{id:"n3001",loc:[-85.627109,41.938153]},n3002:{id:"n3002",loc:[-85.627101,41.938699]},n3003:{id:"n3003",loc:[-85.628311,41.942261]},n3004:{id:"n3004",loc:[-85.628439,41.940082]},n3005:{id:"n3005",loc:[-85.619538,41.942622],tags:{leisure:"slipway"}},n3006:{id:"n3006",loc:[-85.619872,41.942618]},n3007:{id:"n3007",loc:[-85.619755,41.942612]},n3008:{id:"n3008",loc:[-85.619647,41.942628]},n3009:{id:"n3009",loc:[-85.619415,41.942626]},n301:{id:"n301",loc:[-85.635659,41.940956]},n3010:{id:"n3010",loc:[-85.619212,41.942623]},n3011:{id:"n3011",loc:[-85.631485,41.942472]},n3012:{id:"n3012",loc:[-85.630986,41.941786]},n3013:{id:"n3013",loc:[-85.631797,41.942006]},n3014:{id:"n3014",loc:[-85.630972,41.941162]},n3015:{id:"n3015",loc:[-85.631396,41.941611],tags:{railway:"level_crossing"}},n3016:{id:"n3016",loc:[-85.631878,41.941545]},n3017:{id:"n3017",loc:[-85.630461,41.94055]},n3018:{id:"n3018",loc:[-85.629751,41.939539],tags:{railway:"level_crossing"}},n3019:{id:"n3019",loc:[-85.631663,41.941513]},n302:{id:"n302",loc:[-85.635666,41.940922]},n3020:{id:"n3020",loc:[-85.631328,41.941375]},n3021:{id:"n3021",loc:[-85.632554,41.941779]},n3022:{id:"n3022",loc:[-85.63245,41.941769]},n3023:{id:"n3023",loc:[-85.632475,41.941644]},n3024:{id:"n3024",loc:[-85.632581,41.941654]},n3025:{id:"n3025",loc:[-85.631957,41.941352]},n3026:{id:"n3026",loc:[-85.632293,41.941139]},n3027:{id:"n3027",loc:[-85.632315,41.941153]},n3028:{id:"n3028",loc:[-85.632302,41.941262]},n3029:{id:"n3029",loc:[-85.63237,41.941267]},n303:{id:"n303",loc:[-85.635667,41.940877]},n3030:{id:"n3030",loc:[-85.632356,41.941538]},n3031:{id:"n3031",loc:[-85.632134,41.941678]},n3032:{id:"n3032",loc:[-85.631942,41.941687]},n3033:{id:"n3033",loc:[-85.63203,41.941694]},n3034:{id:"n3034",loc:[-85.632166,41.941555]},n3035:{id:"n3035",loc:[-85.632412,41.941416]},n3036:{id:"n3036",loc:[-85.63248,41.941342]},n3037:{id:"n3037",loc:[-85.632502,41.941259]},n3038:{id:"n3038",loc:[-85.632453,41.941161]},n3039:{id:"n3039",loc:[-85.63235,41.941103]},n304:{id:"n304",loc:[-85.635668,41.940655]},n3040:{id:"n3040",loc:[-85.632236,41.941118]},n3041:{id:"n3041",loc:[-85.631894,41.941355]},n3042:{id:"n3042",loc:[-85.631859,41.941411]},n3043:{id:"n3043",loc:[-85.632011,41.941587]},n3044:{id:"n3044",loc:[-85.632446,41.941379]},n3045:{id:"n3045",loc:[-85.632511,41.941416]},n3046:{id:"n3046",loc:[-85.632545,41.941634]},n3047:{id:"n3047",loc:[-85.632612,41.94164]},n3048:{id:"n3048",loc:[-85.632595,41.942197]},n3049:{id:"n3049",loc:[-85.632565,41.942241]},n305:{id:"n305",loc:[-85.635628,41.940617]},n3050:{id:"n3050",loc:[-85.632515,41.942256]},n3051:{id:"n3051",loc:[-85.63245,41.94223]},n3052:{id:"n3052",loc:[-85.632401,41.942174]},n3053:{id:"n3053",loc:[-85.632391,41.942115]},n3054:{id:"n3054",loc:[-85.632029,41.941859]},n3055:{id:"n3055",loc:[-85.631828,41.941639]},n3056:{id:"n3056",loc:[-85.631829,41.941508]},n3057:{id:"n3057",loc:[-85.631281,41.94312]},n3058:{id:"n3058",loc:[-85.631421,41.943065]},n3059:{id:"n3059",loc:[-85.631339,41.942949]},n306:{id:"n306",loc:[-85.635623,41.940272]},n3060:{id:"n3060",loc:[-85.631199,41.943004]},n3061:{id:"n3061",loc:[-85.631102,41.942931]},n3062:{id:"n3062",loc:[-85.631009,41.942809]},n3063:{id:"n3063",loc:[-85.631383,41.94265]},n3064:{id:"n3064",loc:[-85.631477,41.942773]},n3065:{id:"n3065",loc:[-85.630638,41.942809]},n3066:{id:"n3066",loc:[-85.630738,41.942943]},n3067:{id:"n3067",loc:[-85.630841,41.9429]},n3068:{id:"n3068",loc:[-85.630741,41.942766]},n3069:{id:"n3069",loc:[-85.63054,41.942603]},n307:{id:"n307",loc:[-85.635651,41.940183]},n3070:{id:"n3070",loc:[-85.630498,41.942619]},n3071:{id:"n3071",loc:[-85.630567,41.942718]},n3072:{id:"n3072",loc:[-85.630616,41.942698]},n3073:{id:"n3073",loc:[-85.630642,41.94273]},n3074:{id:"n3074",loc:[-85.630686,41.942714]},n3075:{id:"n3075",loc:[-85.630715,41.942754]},n3076:{id:"n3076",loc:[-85.6309,41.942681]},n3077:{id:"n3077",loc:[-85.630843,41.942605]},n3078:{id:"n3078",loc:[-85.6309,41.942581]},n3079:{id:"n3079",loc:[-85.630832,41.942487]},n308:{id:"n308",loc:[-85.635777,41.940183],tags:{crossing:"marked",highway:"crossing"}},n3080:{id:"n3080",loc:[-85.630773,41.942509]},n3081:{id:"n3081",loc:[-85.630718,41.942436]},n3082:{id:"n3082",loc:[-85.630485,41.942524]},n3083:{id:"n3083",loc:[-85.631468,41.941233]},n3084:{id:"n3084",loc:[-85.631334,41.94114]},n3085:{id:"n3085",loc:[-85.632052,41.940568]},n3086:{id:"n3086",loc:[-85.63219,41.940663]},n3087:{id:"n3087",loc:[-85.631323,41.940834]},n3088:{id:"n3088",loc:[-85.631122,41.941002]},n3089:{id:"n3089",loc:[-85.631321,41.941133]},n309:{id:"n309",loc:[-85.636939,41.942544]},n3090:{id:"n3090",loc:[-85.631521,41.940966]},n3091:{id:"n3091",loc:[-85.631103,41.940253]},n3092:{id:"n3092",loc:[-85.631226,41.940211]},n3093:{id:"n3093",loc:[-85.631597,41.940805]},n3094:{id:"n3094",loc:[-85.631474,41.940847]},n3095:{id:"n3095",loc:[-85.631811,41.940534]},n3096:{id:"n3096",loc:[-85.631588,41.94061]},n3097:{id:"n3097",loc:[-85.631438,41.940366]},n3098:{id:"n3098",loc:[-85.631661,41.94029]},n3099:{id:"n3099",loc:[-85.630621,41.940041]},n31:{id:"n31",loc:[-85.63827,41.944203]},n310:{id:"n310",loc:[-85.636323,41.942552]},n3100:{id:"n3100",loc:[-85.630436,41.939773]},n3101:{id:"n3101",loc:[-85.63059,41.939714]},n3102:{id:"n3102",loc:[-85.630775,41.939983]},n3103:{id:"n3103",loc:[-85.63047,41.940167]},n3104:{id:"n3104",loc:[-85.63013,41.939686]},n3105:{id:"n3105",loc:[-85.630302,41.939618]},n3106:{id:"n3106",loc:[-85.630641,41.9401]},n3107:{id:"n3107",loc:[-85.630966,41.940619]},n3108:{id:"n3108",loc:[-85.630874,41.940493]},n3109:{id:"n3109",loc:[-85.630933,41.940469]},n311:{id:"n311",loc:[-85.636257,41.942555]},n3110:{id:"n3110",loc:[-85.630763,41.940236]},n3111:{id:"n3111",loc:[-85.63088,41.940189]},n3112:{id:"n3112",loc:[-85.631142,41.940548]},n3113:{id:"n3113",loc:[-85.630958,41.940871]},n3114:{id:"n3114",loc:[-85.630874,41.940778]},n3115:{id:"n3115",loc:[-85.631062,41.940684]},n3116:{id:"n3116",loc:[-85.631146,41.940777]},n3117:{id:"n3117",loc:[-85.632031,41.940575]},n3118:{id:"n3118",loc:[-85.631777,41.940186]},n3119:{id:"n3119",loc:[-85.631346,41.940179]},n312:{id:"n312",loc:[-85.636208,41.942561]},n3120:{id:"n3120",loc:[-85.631342,41.94012]},n3121:{id:"n3121",loc:[-85.631831,41.940118]},n3122:{id:"n3122",loc:[-85.632115,41.940543]},n3123:{id:"n3123",loc:[-85.631031,41.941683]},n3124:{id:"n3124",loc:[-85.630981,41.941608]},n3125:{id:"n3125",loc:[-85.631209,41.941516]},n3126:{id:"n3126",loc:[-85.631264,41.941586]},n3127:{id:"n3127",loc:[-85.630938,41.94155]},n3128:{id:"n3128",loc:[-85.631156,41.941462]},n3129:{id:"n3129",loc:[-85.631197,41.94152]},n313:{id:"n313",loc:[-85.636159,41.942573]},n3130:{id:"n3130",loc:[-85.630895,41.941485]},n3131:{id:"n3131",loc:[-85.630824,41.941389]},n3132:{id:"n3132",loc:[-85.630986,41.941323]},n3133:{id:"n3133",loc:[-85.631057,41.941419]},n3134:{id:"n3134",loc:[-85.630777,41.941328]},n3135:{id:"n3135",loc:[-85.630907,41.941274]},n3136:{id:"n3136",loc:[-85.630953,41.941335]},n3137:{id:"n3137",loc:[-85.630797,41.941247]},n3138:{id:"n3138",loc:[-85.630701,41.94117]},n3139:{id:"n3139",loc:[-85.630829,41.941113]},n314:{id:"n314",loc:[-85.635743,41.942881]},n3140:{id:"n3140",loc:[-85.6309,41.941201]},n3141:{id:"n3141",loc:[-85.630765,41.941206]},n3142:{id:"n3142",loc:[-85.630739,41.941218]},n3143:{id:"n3143",loc:[-85.630582,41.941039]},n3144:{id:"n3144",loc:[-85.630412,41.940818]},n3145:{id:"n3145",loc:[-85.630509,41.940777]},n3146:{id:"n3146",loc:[-85.630678,41.941004]},n3147:{id:"n3147",loc:[-85.630773,41.942166]},n3148:{id:"n3148",loc:[-85.630708,41.942074]},n3149:{id:"n3149",loc:[-85.630863,41.942013]},n315:{id:"n315",loc:[-85.635452,41.942966]},n3150:{id:"n3150",loc:[-85.630928,41.942105]},n3151:{id:"n3151",loc:[-85.630701,41.942026]},n3152:{id:"n3152",loc:[-85.630665,41.941971]},n3153:{id:"n3153",loc:[-85.630793,41.941918]},n3154:{id:"n3154",loc:[-85.630837,41.94197]},n3155:{id:"n3155",loc:[-85.630757,41.941871]},n3156:{id:"n3156",loc:[-85.630629,41.941923]},n3157:{id:"n3157",loc:[-85.630694,41.941783]},n3158:{id:"n3158",loc:[-85.630534,41.941847]},n3159:{id:"n3159",loc:[-85.630598,41.941935]},n316:{id:"n316",loc:[-85.634911,41.943118]},n3160:{id:"n3160",loc:[-85.631548,41.93938]},n3161:{id:"n3161",loc:[-85.631525,41.939919]},n3162:{id:"n3162",loc:[-85.631648,41.940043]},n3163:{id:"n3163",loc:[-85.624586,41.951121]},n3164:{id:"n3164",loc:[-85.622139,41.952064]},n3165:{id:"n3165",loc:[-85.622141,41.952144]},n3166:{id:"n3166",loc:[-85.621977,41.952146]},n3167:{id:"n3167",loc:[-85.621978,41.952211]},n3168:{id:"n3168",loc:[-85.62191,41.952212]},n3169:{id:"n3169",loc:[-85.633628,41.935437]},n317:{id:"n317",loc:[-85.634743,41.943167]},n3170:{id:"n3170",loc:[-85.632849,41.935518]},n3171:{id:"n3171",loc:[-85.632376,41.93574]},n3172:{id:"n3172",loc:[-85.631517,41.935897]},n3173:{id:"n3173",loc:[-85.630433,41.936124]},n3174:{id:"n3174",loc:[-85.630207,41.936427]},n3175:{id:"n3175",loc:[-85.630346,41.936795]},n3176:{id:"n3176",loc:[-85.62996,41.936974]},n3177:{id:"n3177",loc:[-85.629916,41.937488]},n3178:{id:"n3178",loc:[-85.629946,41.937802]},n3179:{id:"n3179",loc:[-85.629977,41.937905]},n318:{id:"n318",loc:[-85.634401,41.94328]},n3180:{id:"n3180",loc:[-85.63016,41.937909]},n3181:{id:"n3181",loc:[-85.630804,41.937791]},n3182:{id:"n3182",loc:[-85.631688,41.937808]},n3183:{id:"n3183",loc:[-85.631685,41.938008]},n3184:{id:"n3184",loc:[-85.631845,41.938116]},n3185:{id:"n3185",loc:[-85.63207,41.938181]},n3186:{id:"n3186",loc:[-85.632143,41.938371]},n3187:{id:"n3187",loc:[-85.632056,41.938435]},n3188:{id:"n3188",loc:[-85.631787,41.938457]},n3189:{id:"n3189",loc:[-85.631657,41.938728]},n319:{id:"n319",loc:[-85.634345,41.943299]},n3190:{id:"n3190",loc:[-85.631595,41.93775]},n3191:{id:"n3191",loc:[-85.630264,41.937839]},n3192:{id:"n3192",loc:[-85.628591,41.948536]},n3193:{id:"n3193",loc:[-85.63205,41.951181]},n3194:{id:"n3194",loc:[-85.632034,41.949909]},n3195:{id:"n3195",loc:[-85.630841,41.951191]},n3196:{id:"n3196",loc:[-85.632083,41.9537]},n3197:{id:"n3197",loc:[-85.630929,41.959037]},n3198:{id:"n3198",loc:[-85.632151,41.959028]},n3199:{id:"n3199",loc:[-85.630911,41.957428]},n32:{id:"n32",loc:[-85.638273,41.944246]},n320:{id:"n320",loc:[-85.634287,41.943326]},n3200:{id:"n3200",loc:[-85.63213,41.957427]},n3201:{id:"n3201",loc:[-85.632072,41.952447]},n3202:{id:"n3202",loc:[-85.632095,41.954677]},n3203:{id:"n3203",loc:[-85.632111,41.955911]},n3204:{id:"n3204",loc:[-85.630855,41.952457]},n3205:{id:"n3205",loc:[-85.630869,41.953709]},n3206:{id:"n3206",loc:[-85.63088,41.954682]},n3207:{id:"n3207",loc:[-85.630894,41.955913]},n3208:{id:"n3208",loc:[-85.633214,41.948619]},n3209:{id:"n3209",loc:[-85.633253,41.951171]},n321:{id:"n321",loc:[-85.634233,41.943354]},n3210:{id:"n3210",loc:[-85.633234,41.949901]},n3211:{id:"n3211",loc:[-85.633922,41.948616]},n3212:{id:"n3212",loc:[-85.625188,41.947832]},n3213:{id:"n3213",loc:[-85.625208,41.947775]},n3214:{id:"n3214",loc:[-85.625229,41.94776]},n3215:{id:"n3215",loc:[-85.625201,41.947749]},n3216:{id:"n3216",loc:[-85.625168,41.947707]},n3217:{id:"n3217",loc:[-85.625171,41.947609]},n3218:{id:"n3218",loc:[-85.625213,41.947564]},n3219:{id:"n3219",loc:[-85.62529,41.94756]},n322:{id:"n322",loc:[-85.634099,41.943429]},n3220:{id:"n3220",loc:[-85.625303,41.947533]},n3221:{id:"n3221",loc:[-85.625344,41.947482]},n3222:{id:"n3222",loc:[-85.625442,41.947468]},n3223:{id:"n3223",loc:[-85.62565,41.947494]},n3224:{id:"n3224",loc:[-85.625726,41.947613]},n3225:{id:"n3225",loc:[-85.625703,41.947728]},n3226:{id:"n3226",loc:[-85.625534,41.94781]},n3227:{id:"n3227",loc:[-85.625391,41.947822]},n3228:{id:"n3228",loc:[-85.625304,41.947859]},n3229:{id:"n3229",loc:[-85.625203,41.947885]},n323:{id:"n323",loc:[-85.633958,41.943507],tags:{highway:"crossing"}},n3230:{id:"n3230",loc:[-85.624691,41.948659]},n3231:{id:"n3231",loc:[-85.624328,41.948661]},n3232:{id:"n3232",loc:[-85.624331,41.949046]},n3233:{id:"n3233",loc:[-85.624694,41.949045]},n3234:{id:"n3234",loc:[-85.623623,41.949606]},n3235:{id:"n3235",loc:[-85.623623,41.9497]},n3236:{id:"n3236",loc:[-85.623357,41.9497]},n3237:{id:"n3237",loc:[-85.623357,41.949614]},n3238:{id:"n3238",loc:[-85.623974,41.949429]},n3239:{id:"n3239",loc:[-85.623974,41.949605]},n324:{id:"n324",loc:[-85.633698,41.943651],tags:{railway:"crossing"}},n3240:{id:"n3240",loc:[-85.624501,41.951226]},n3241:{id:"n3241",loc:[-85.624501,41.951123]},n3242:{id:"n3242",loc:[-85.624319,41.951123]},n3243:{id:"n3243",loc:[-85.624319,41.951226]},n3244:{id:"n3244",loc:[-85.624121,41.950866]},n3245:{id:"n3245",loc:[-85.624115,41.950525]},n3246:{id:"n3246",loc:[-85.624315,41.950523]},n3247:{id:"n3247",loc:[-85.62432,41.950865]},n3248:{id:"n3248",loc:[-85.624393,41.950867]},n3249:{id:"n3249",loc:[-85.62439,41.950596]},n325:{id:"n325",loc:[-85.633508,41.943757]},n3250:{id:"n3250",loc:[-85.624673,41.950594]},n3251:{id:"n3251",loc:[-85.624675,41.95082]},n3252:{id:"n3252",loc:[-85.62451,41.950821]},n3253:{id:"n3253",loc:[-85.62451,41.950866]},n3254:{id:"n3254",loc:[-85.624101,41.949346]},n3255:{id:"n3255",loc:[-85.624244,41.949346]},n3256:{id:"n3256",loc:[-85.624244,41.949368]},n3257:{id:"n3257",loc:[-85.62434,41.949368]},n3258:{id:"n3258",loc:[-85.624342,41.949351]},n3259:{id:"n3259",loc:[-85.624725,41.949348]},n326:{id:"n326",loc:[-85.634839,41.942974]},n3260:{id:"n3260",loc:[-85.624755,41.950495]},n3261:{id:"n3261",loc:[-85.624121,41.950502]},n3262:{id:"n3262",loc:[-85.625453,41.950163]},n3263:{id:"n3263",loc:[-85.625454,41.949976]},n3264:{id:"n3264",loc:[-85.625549,41.949977]},n3265:{id:"n3265",loc:[-85.62555,41.949833]},n3266:{id:"n3266",loc:[-85.625577,41.949833]},n3267:{id:"n3267",loc:[-85.625578,41.949656]},n3268:{id:"n3268",loc:[-85.625195,41.949655]},n3269:{id:"n3269",loc:[-85.625192,41.950162]},n327:{id:"n327",loc:[-85.634657,41.943028]},n3270:{id:"n3270",loc:[-85.622992,41.949614]},n3271:{id:"n3271",loc:[-85.622991,41.949431]},n3272:{id:"n3272",loc:[-85.620103,41.951]},n3273:{id:"n3273",loc:[-85.605644,41.947468]},n3274:{id:"n3274",loc:[-85.617421,41.947457]},n3275:{id:"n3275",loc:[-85.620078,41.947444]},n3276:{id:"n3276",loc:[-85.620087,41.94924]},n3277:{id:"n3277",loc:[-85.62156,41.948333]},n3278:{id:"n3278",loc:[-85.620106,41.950132]},n3279:{id:"n3279",loc:[-85.637412,41.951136]},n328:{id:"n328",loc:[-85.634222,41.943152]},n3280:{id:"n3280",loc:[-85.635429,41.948608]},n3281:{id:"n3281",loc:[-85.635047,41.947788]},n3282:{id:"n3282",loc:[-85.635048,41.947796]},n3283:{id:"n3283",loc:[-85.635002,41.947797]},n3284:{id:"n3284",loc:[-85.635002,41.947788]},n3285:{id:"n3285",loc:[-85.634914,41.94779]},n3286:{id:"n3286",loc:[-85.634913,41.947753]},n3287:{id:"n3287",loc:[-85.63494,41.947753]},n3288:{id:"n3288",loc:[-85.634938,41.947708]},n3289:{id:"n3289",loc:[-85.635124,41.947705]},n329:{id:"n329",loc:[-85.634099,41.943202]},n3290:{id:"n3290",loc:[-85.635126,41.947787]},n3291:{id:"n3291",loc:[-85.634972,41.947599]},n3292:{id:"n3292",loc:[-85.634921,41.9476]},n3293:{id:"n3293",loc:[-85.63485,41.947546]},n3294:{id:"n3294",loc:[-85.63485,41.947508]},n3295:{id:"n3295",loc:[-85.634924,41.947457]},n3296:{id:"n3296",loc:[-85.634967,41.947456]},n3297:{id:"n3297",loc:[-85.635041,41.947512]},n3298:{id:"n3298",loc:[-85.635041,41.947542]},n3299:{id:"n3299",loc:[-85.634244,41.947839]},n33:{id:"n33",loc:[-85.638257,41.944188]},n330:{id:"n330",loc:[-85.634093,41.943138]},n3300:{id:"n3300",loc:[-85.634243,41.947793]},n3301:{id:"n3301",loc:[-85.634244,41.947686]},n3302:{id:"n3302",loc:[-85.634243,41.947657]},n3303:{id:"n3303",loc:[-85.634462,41.947653]},n3304:{id:"n3304",loc:[-85.634468,41.947835]},n3305:{id:"n3305",loc:[-85.634416,41.948006]},n3306:{id:"n3306",loc:[-85.634415,41.947898]},n3307:{id:"n3307",loc:[-85.634275,41.947899]},n3308:{id:"n3308",loc:[-85.634275,41.947927]},n3309:{id:"n3309",loc:[-85.63425,41.947927]},n331:{id:"n331",loc:[-85.633938,41.943291]},n3310:{id:"n3310",loc:[-85.63425,41.947976]},n3311:{id:"n3311",loc:[-85.634274,41.947976]},n3312:{id:"n3312",loc:[-85.634275,41.948007]},n3313:{id:"n3313",loc:[-85.634342,41.947635]},n3314:{id:"n3314",loc:[-85.634339,41.947497]},n3315:{id:"n3315",loc:[-85.634313,41.94748]},n3316:{id:"n3316",loc:[-85.634287,41.947474]},n3317:{id:"n3317",loc:[-85.63498,41.94815]},n3318:{id:"n3318",loc:[-85.634891,41.94815]},n3319:{id:"n3319",loc:[-85.634892,41.948169]},n332:{id:"n332",loc:[-85.633535,41.943511],tags:{railway:"crossing"}},n3320:{id:"n3320",loc:[-85.634852,41.948169]},n3321:{id:"n3321",loc:[-85.634853,41.948268]},n3322:{id:"n3322",loc:[-85.634832,41.948268]},n3323:{id:"n3323",loc:[-85.634832,41.948296]},n3324:{id:"n3324",loc:[-85.634965,41.948295]},n3325:{id:"n3325",loc:[-85.634966,41.948321]},n3326:{id:"n3326",loc:[-85.634999,41.948321]},n3327:{id:"n3327",loc:[-85.634999,41.948295]},n3328:{id:"n3328",loc:[-85.635175,41.948293]},n3329:{id:"n3329",loc:[-85.635175,41.948262]},n333:{id:"n333",loc:[-85.63339,41.943596]},n3330:{id:"n3330",loc:[-85.635159,41.948262]},n3331:{id:"n3331",loc:[-85.635158,41.948152]},n3332:{id:"n3332",loc:[-85.635067,41.948152]},n3333:{id:"n3333",loc:[-85.635065,41.947966]},n3334:{id:"n3334",loc:[-85.634979,41.947966]},n3335:{id:"n3335",loc:[-85.634307,41.948326]},n3336:{id:"n3336",loc:[-85.634305,41.948298]},n3337:{id:"n3337",loc:[-85.634331,41.948055]},n3338:{id:"n3338",loc:[-85.634331,41.948046]},n3339:{id:"n3339",loc:[-85.634435,41.948047]},n334:{id:"n334",loc:[-85.632842,41.943895]},n3340:{id:"n3340",loc:[-85.634434,41.948375]},n3341:{id:"n3341",loc:[-85.634463,41.948373]},n3342:{id:"n3342",loc:[-85.634464,41.948456]},n3343:{id:"n3343",loc:[-85.63443,41.948457]},n3344:{id:"n3344",loc:[-85.634432,41.948505]},n3345:{id:"n3345",loc:[-85.637386,41.94906]},n3346:{id:"n3346",loc:[-85.637113,41.9486]},n3347:{id:"n3347",loc:[-85.635448,41.949424]},n335:{id:"n335",loc:[-85.633856,41.943315]},n3352:{id:"n3352",loc:[-85.635457,41.949787]},n3353:{id:"n3353",loc:[-85.635459,41.949886]},n336:{id:"n336",loc:[-85.633697,41.943405]},n337:{id:"n337",loc:[-85.63347,41.943181]},n3372:{id:"n3372",loc:[-85.634423,41.950964]},n3373:{id:"n3373",loc:[-85.634424,41.95074]},n3374:{id:"n3374",loc:[-85.634394,41.950284]},n3375:{id:"n3375",loc:[-85.634398,41.950626]},n3376:{id:"n3376",loc:[-85.63452,41.951063]},n3377:{id:"n3377",loc:[-85.634511,41.949977]},n3378:{id:"n3378",loc:[-85.637409,41.949873]},n3379:{id:"n3379",loc:[-85.634824,41.94996]},n338:{id:"n338",loc:[-85.633597,41.943109]},n3380:{id:"n3380",loc:[-85.635437,41.949954]},n3381:{id:"n3381",loc:[-85.634844,41.951064]},n3382:{id:"n3382",loc:[-85.635458,41.951058]},n3383:{id:"n3383",loc:[-85.633921,41.947333]},n3384:{id:"n3384",loc:[-85.634208,41.947793]},n3385:{id:"n3385",loc:[-85.634204,41.947687]},n3386:{id:"n3386",loc:[-85.63424,41.947475]},n3387:{id:"n3387",loc:[-85.63424,41.947635]},n3388:{id:"n3388",loc:[-85.634089,41.948328]},n3389:{id:"n3389",loc:[-85.63424,41.948299]},n339:{id:"n339",loc:[-85.633673,41.943184]},n3390:{id:"n3390",loc:[-85.634239,41.948212]},n3391:{id:"n3391",loc:[-85.634086,41.948214]},n3392:{id:"n3392",loc:[-85.63408,41.948056]},n3393:{id:"n3393",loc:[-85.634093,41.948506]},n3394:{id:"n3394",loc:[-85.64344,41.941866]},n3395:{id:"n3395",loc:[-85.63378,41.95099]},n3396:{id:"n3396",loc:[-85.633779,41.950967]},n3397:{id:"n3397",loc:[-85.63375,41.950746]},n3398:{id:"n3398",loc:[-85.63375,41.950697]},n3399:{id:"n3399",loc:[-85.633903,41.950696]},n34:{id:"n34",loc:[-85.638176,41.944312]},n340:{id:"n340",loc:[-85.633714,41.94316]},n3400:{id:"n3400",loc:[-85.633901,41.950436]},n3401:{id:"n3401",loc:[-85.633492,41.950438]},n3402:{id:"n3402",loc:[-85.633494,41.950756]},n3403:{id:"n3403",loc:[-85.633454,41.950756]},n3404:{id:"n3404",loc:[-85.633456,41.950992]},n3405:{id:"n3405",loc:[-85.633994,41.950284]},n3406:{id:"n3406",loc:[-85.633998,41.950628]},n3407:{id:"n3407",loc:[-85.633364,41.951068]},n3408:{id:"n3408",loc:[-85.633356,41.949982]},n3409:{id:"n3409",loc:[-85.643327,41.941903]},n341:{id:"n341",loc:[-85.633811,41.943256]},n3410:{id:"n3410",loc:[-85.633292,41.953691]},n3411:{id:"n3411",loc:[-85.637432,41.952399]},n3412:{id:"n3412",loc:[-85.633349,41.957422]},n3413:{id:"n3413",loc:[-85.633326,41.955909]},n3414:{id:"n3414",loc:[-85.633307,41.954673]},n3415:{id:"n3415",loc:[-85.633273,41.952436]},n3416:{id:"n3416",loc:[-85.633361,41.95823],tags:{highway:"turning_circle"}},n3417:{id:"n3417",loc:[-85.619899,41.945527]},n3418:{id:"n3418",loc:[-85.643422,41.941946]},n3419:{id:"n3419",loc:[-85.643505,41.942033]},n342:{id:"n342",loc:[-85.633801,41.943261]},n3420:{id:"n3420",loc:[-85.620088,41.945571]},n3421:{id:"n3421",loc:[-85.620051,41.945505]},n3422:{id:"n3422",loc:[-85.62001,41.94541]},n3423:{id:"n3423",loc:[-85.620982,41.944742]},n3424:{id:"n3424",loc:[-85.621305,41.944782]},n3425:{id:"n3425",loc:[-85.621174,41.944819]},n3426:{id:"n3426",loc:[-85.621029,41.944871]},n3427:{id:"n3427",loc:[-85.620741,41.945011]},n3428:{id:"n3428",loc:[-85.620616,41.945085]},n3429:{id:"n3429",loc:[-85.620506,41.945172]},n343:{id:"n343",loc:[-85.63374,41.943514]},n3430:{id:"n3430",loc:[-85.620394,41.945273]},n3431:{id:"n3431",loc:[-85.620316,41.94536]},n3432:{id:"n3432",loc:[-85.620257,41.945452]},n3433:{id:"n3433",loc:[-85.620212,41.945535]},n3434:{id:"n3434",loc:[-85.620101,41.945811]},n3435:{id:"n3435",loc:[-85.620081,41.945937]},n3436:{id:"n3436",loc:[-85.619899,41.943718]},n3437:{id:"n3437",loc:[-85.619969,41.943211]},n3438:{id:"n3438",loc:[-85.619894,41.943292]},n3439:{id:"n3439",loc:[-85.620047,41.944738]},n344:{id:"n344",loc:[-85.633665,41.943441]},n3440:{id:"n3440",loc:[-85.620226,41.946088]},n3441:{id:"n3441",loc:[-85.620225,41.945864]},n3442:{id:"n3442",loc:[-85.620518,41.945863]},n3443:{id:"n3443",loc:[-85.620519,41.945944]},n3444:{id:"n3444",loc:[-85.620388,41.945944]},n3445:{id:"n3445",loc:[-85.620389,41.946088]},n3446:{id:"n3446",loc:[-85.618405,41.946566]},n3447:{id:"n3447",loc:[-85.619156,41.946562]},n3448:{id:"n3448",loc:[-85.619154,41.946319]},n3449:{id:"n3449",loc:[-85.618736,41.946322]},n345:{id:"n345",loc:[-85.633162,41.942947]},n3450:{id:"n3450",loc:[-85.618733,41.94612]},n3451:{id:"n3451",loc:[-85.619317,41.946116]},n3452:{id:"n3452",loc:[-85.619316,41.946023]},n3453:{id:"n3453",loc:[-85.619622,41.946021]},n3454:{id:"n3454",loc:[-85.619624,41.946171]},n3455:{id:"n3455",loc:[-85.61977,41.94617]},n3456:{id:"n3456",loc:[-85.619769,41.94602]},n3457:{id:"n3457",loc:[-85.619732,41.94602]},n3458:{id:"n3458",loc:[-85.619731,41.945856]},n3459:{id:"n3459",loc:[-85.619617,41.945857]},n346:{id:"n346",loc:[-85.633598,41.943083]},n3460:{id:"n3460",loc:[-85.619616,41.945776]},n3461:{id:"n3461",loc:[-85.619447,41.945777]},n3462:{id:"n3462",loc:[-85.619415,41.945778]},n3463:{id:"n3463",loc:[-85.618378,41.945788]},n3464:{id:"n3464",loc:[-85.618384,41.946132]},n3465:{id:"n3465",loc:[-85.618503,41.94613]},n3466:{id:"n3466",loc:[-85.618506,41.946319]},n3467:{id:"n3467",loc:[-85.6184,41.94632]},n3468:{id:"n3468",loc:[-85.618248,41.946416]},n3469:{id:"n3469",loc:[-85.618247,41.946319]},n347:{id:"n347",loc:[-85.63343,41.943179]},n3470:{id:"n3470",loc:[-85.618039,41.946321]},n3471:{id:"n3471",loc:[-85.61804,41.946418]},n3472:{id:"n3472",loc:[-85.620118,41.951895]},n3473:{id:"n3473",loc:[-85.617075,41.95469]},n3474:{id:"n3474",loc:[-85.620107,41.952113]},n3475:{id:"n3475",loc:[-85.620091,41.95232]},n3476:{id:"n3476",loc:[-85.620047,41.952505]},n3477:{id:"n3477",loc:[-85.61998,41.952715]},n3478:{id:"n3478",loc:[-85.619861,41.952986]},n3479:{id:"n3479",loc:[-85.619622,41.953365]},n348:{id:"n348",loc:[-85.633669,41.94341]},n3480:{id:"n3480",loc:[-85.619441,41.953567]},n3481:{id:"n3481",loc:[-85.619259,41.953741]},n3482:{id:"n3482",loc:[-85.618835,41.954056]},n3483:{id:"n3483",loc:[-85.618602,41.954194]},n3484:{id:"n3484",loc:[-85.618305,41.954347]},n3485:{id:"n3485",loc:[-85.618006,41.954466]},n3486:{id:"n3486",loc:[-85.617611,41.954587]},n3487:{id:"n3487",loc:[-85.615094,41.943412]},n3488:{id:"n3488",loc:[-85.619337,41.943025]},n3489:{id:"n3489",loc:[-85.610477,41.945527]},n349:{id:"n349",loc:[-85.633566,41.943466]},n3490:{id:"n3490",loc:[-85.610477,41.943718]},n3491:{id:"n3491",loc:[-85.619804,41.942976]},n3492:{id:"n3492",loc:[-85.61921,41.942672]},n3493:{id:"n3493",loc:[-85.619862,41.942836]},n3494:{id:"n3494",loc:[-85.616326,41.942769]},n3495:{id:"n3495",loc:[-85.617953,41.942917]},n3496:{id:"n3496",loc:[-85.61972,41.942728]},n3497:{id:"n3497",loc:[-85.61944,41.942784]},n3498:{id:"n3498",loc:[-85.615323,41.942841]},n3499:{id:"n3499",loc:[-85.612923,41.943718]},n35:{id:"n35",loc:[-85.637928,41.944249]},n350:{id:"n350",loc:[-85.633031,41.942986]},n3500:{id:"n3500",loc:[-85.61958,41.942756]},n3501:{id:"n3501",loc:[-85.619643,41.942647],tags:{leisure:"fishing"}},n3502:{id:"n3502",loc:[-85.619935,41.942962]},n3503:{id:"n3503",loc:[-85.629677,41.954687]},n3504:{id:"n3504",loc:[-85.629083,41.953722]},n3505:{id:"n3505",loc:[-85.621907,41.952067]},n3506:{id:"n3506",loc:[-85.621788,41.952058]},n3507:{id:"n3507",loc:[-85.629665,41.953718]},n3508:{id:"n3508",loc:[-85.624454,41.954707]},n3509:{id:"n3509",loc:[-85.634609,41.954585]},n351:{id:"n351",loc:[-85.633238,41.94283]},n3510:{id:"n3510",loc:[-85.634595,41.953772]},n3511:{id:"n3511",loc:[-85.633425,41.953783]},n3512:{id:"n3512",loc:[-85.633439,41.954596]},n3517:{id:"n3517",loc:[-85.621789,41.952179]},n3518:{id:"n3518",loc:[-85.624105,41.954704]},n3519:{id:"n3519",loc:[-85.623306,41.954542]},n352:{id:"n352",loc:[-85.633173,41.943556]},n3520:{id:"n3520",loc:[-85.623123,41.954502]},n3521:{id:"n3521",loc:[-85.622965,41.954473]},n3522:{id:"n3522",loc:[-85.622822,41.954455]},n3523:{id:"n3523",loc:[-85.62269,41.954448]},n3524:{id:"n3524",loc:[-85.622388,41.954467]},n3525:{id:"n3525",loc:[-85.62403,41.954895]},n3526:{id:"n3526",loc:[-85.623579,41.954855]},n3527:{id:"n3527",loc:[-85.623836,41.954951]},n3528:{id:"n3528",loc:[-85.622473,41.954592]},n3529:{id:"n3529",loc:[-85.622753,41.95458]},n353:{id:"n353",loc:[-85.633127,41.943552]},n3530:{id:"n3530",loc:[-85.62404,41.955078]},n3531:{id:"n3531",loc:[-85.624126,41.954999]},n3532:{id:"n3532",loc:[-85.623171,41.954687]},n3533:{id:"n3533",loc:[-85.624276,41.955206]},n3534:{id:"n3534",loc:[-85.62491,41.952801]},n3535:{id:"n3535",loc:[-85.625186,41.952756]},n3536:{id:"n3536",loc:[-85.625552,41.952792]},n3537:{id:"n3537",loc:[-85.626001,41.952948]},n3538:{id:"n3538",loc:[-85.626528,41.952984]},n3539:{id:"n3539",loc:[-85.626942,41.952886]},n354:{id:"n354",loc:[-85.632745,41.943222]},n3540:{id:"n3540",loc:[-85.627092,41.952685]},n3541:{id:"n3541",loc:[-85.627212,41.95244]},n3542:{id:"n3542",loc:[-85.627158,41.952226]},n3543:{id:"n3543",loc:[-85.627002,41.951972]},n3544:{id:"n3544",loc:[-85.626822,41.951838]},n3545:{id:"n3545",loc:[-85.626528,41.951807]},n3546:{id:"n3546",loc:[-85.625653,41.951852]},n3547:{id:"n3547",loc:[-85.625348,41.951834]},n3548:{id:"n3548",loc:[-85.625114,41.951767]},n3549:{id:"n3549",loc:[-85.620627,41.954682]},n355:{id:"n355",loc:[-85.632756,41.943199]},n3550:{id:"n3550",loc:[-85.622758,41.951884]},n3551:{id:"n3551",loc:[-85.618135,41.954734]},n3552:{id:"n3552",loc:[-85.620229,41.95472]},n3553:{id:"n3553",loc:[-85.624491,41.955573]},n3554:{id:"n3554",loc:[-85.621792,41.958314]},n3555:{id:"n3555",loc:[-85.623395,41.960001]},n3556:{id:"n3556",loc:[-85.620461,41.956212]},n3557:{id:"n3557",loc:[-85.62109,41.956766]},n3558:{id:"n3558",loc:[-85.620246,41.956224]},n3559:{id:"n3559",loc:[-85.625017,41.956068]},n356:{id:"n356",loc:[-85.632855,41.943147]},n3560:{id:"n3560",loc:[-85.622795,41.959702]},n3561:{id:"n3561",loc:[-85.621573,41.958457]},n3562:{id:"n3562",loc:[-85.619631,41.9573]},n3563:{id:"n3563",loc:[-85.62095,41.956311]},n3564:{id:"n3564",loc:[-85.619694,41.957408]},n3565:{id:"n3565",loc:[-85.621079,41.957751]},n3566:{id:"n3566",loc:[-85.622426,41.961142]},n3567:{id:"n3567",loc:[-85.623251,41.960484]},n3568:{id:"n3568",loc:[-85.619084,41.956291]},n3569:{id:"n3569",loc:[-85.622227,41.959303]},n357:{id:"n357",loc:[-85.632888,41.94315]},n3570:{id:"n3570",loc:[-85.620976,41.959104]},n3571:{id:"n3571",loc:[-85.621208,41.95653]},n3572:{id:"n3572",loc:[-85.623531,41.95951]},n3573:{id:"n3573",loc:[-85.623556,41.957935]},n3574:{id:"n3574",loc:[-85.623037,41.95746]},n3575:{id:"n3575",loc:[-85.621175,41.956427]},n3576:{id:"n3576",loc:[-85.622651,41.960109]},n3577:{id:"n3577",loc:[-85.621803,41.960747]},n3578:{id:"n3578",loc:[-85.620791,41.961874]},n3579:{id:"n3579",loc:[-85.625295,41.956786]},n358:{id:"n358",loc:[-85.633232,41.943547]},n3580:{id:"n3580",loc:[-85.619662,41.956894]},n3581:{id:"n3581",loc:[-85.622442,41.958708]},n3582:{id:"n3582",loc:[-85.621744,41.955864]},n3583:{id:"n3583",loc:[-85.621336,41.959212]},n3584:{id:"n3584",loc:[-85.622801,41.957304]},n3585:{id:"n3585",loc:[-85.619973,41.957433]},n3586:{id:"n3586",loc:[-85.619556,41.955717]},n3587:{id:"n3587",loc:[-85.622978,41.958601]},n3588:{id:"n3588",loc:[-85.625396,41.956264]},n3589:{id:"n3589",loc:[-85.623525,41.958034]},n359:{id:"n359",loc:[-85.633302,41.94351]},n3590:{id:"n3590",loc:[-85.623299,41.959631]},n3591:{id:"n3591",loc:[-85.622678,41.959873]},n3592:{id:"n3592",loc:[-85.625553,41.956179]},n3593:{id:"n3593",loc:[-85.623557,41.959231]},n3594:{id:"n3594",loc:[-85.622843,41.957373]},n3595:{id:"n3595",loc:[-85.619378,41.955677]},n3596:{id:"n3596",loc:[-85.620092,41.955425]},n3597:{id:"n3597",loc:[-85.622666,41.96044]},n3598:{id:"n3598",loc:[-85.621996,41.960256]},n3599:{id:"n3599",loc:[-85.623273,41.959997]},n36:{id:"n36",loc:[-85.637894,41.945551]},n360:{id:"n360",loc:[-85.633442,41.943794],tags:{highway:"crossing"}},n3600:{id:"n3600",loc:[-85.62477,41.95689]},n3601:{id:"n3601",loc:[-85.621641,41.955015]},n3602:{id:"n3602",loc:[-85.622495,41.960392]},n3603:{id:"n3603",loc:[-85.61918,41.955565]},n3604:{id:"n3604",loc:[-85.620017,41.955505]},n3605:{id:"n3605",loc:[-85.621739,41.956315]},n3606:{id:"n3606",loc:[-85.622957,41.959837]},n3607:{id:"n3607",loc:[-85.620912,41.960919]},n3608:{id:"n3608",loc:[-85.625231,41.956235]},n3609:{id:"n3609",loc:[-85.620976,41.961868]},n361:{id:"n361",loc:[-85.633381,41.94383]},n3610:{id:"n3610",loc:[-85.620956,41.958908]},n3611:{id:"n3611",loc:[-85.619035,41.956139]},n3612:{id:"n3612",loc:[-85.623643,41.958669]},n3613:{id:"n3613",loc:[-85.61949,41.956539]},n3614:{id:"n3614",loc:[-85.621927,41.958242]},n3615:{id:"n3615",loc:[-85.620826,41.955721]},n3616:{id:"n3616",loc:[-85.621202,41.961321]},n3617:{id:"n3617",loc:[-85.624877,41.95594]},n3618:{id:"n3618",loc:[-85.62065,41.958369]},n3619:{id:"n3619",loc:[-85.621524,41.956279]},n362:{id:"n362",loc:[-85.632977,41.944053]},n3620:{id:"n3620",loc:[-85.624662,41.955932]},n3621:{id:"n3621",loc:[-85.623048,41.958509]},n3622:{id:"n3622",loc:[-85.62111,41.95754]},n3623:{id:"n3623",loc:[-85.621508,41.954847]},n3624:{id:"n3624",loc:[-85.620655,41.958601]},n3625:{id:"n3625",loc:[-85.62154,41.954971]},n3626:{id:"n3626",loc:[-85.621691,41.955521]},n3627:{id:"n3627",loc:[-85.62154,41.954739]},n3628:{id:"n3628",loc:[-85.621996,41.959913]},n3629:{id:"n3629",loc:[-85.622286,41.960699]},n363:{id:"n363",loc:[-85.632915,41.943981],tags:{crossing:"marked",highway:"crossing"}},n3630:{id:"n3630",loc:[-85.622844,41.9572]},n3631:{id:"n3631",loc:[-85.620252,41.955446]},n3632:{id:"n3632",loc:[-85.623434,41.957528]},n3633:{id:"n3633",loc:[-85.623429,41.956858]},n3634:{id:"n3634",loc:[-85.622957,41.957137]},n3635:{id:"n3635",loc:[-85.622554,41.959027]},n3636:{id:"n3636",loc:[-85.623289,41.958314]},n3637:{id:"n3637",loc:[-85.622977,41.960855]},n3638:{id:"n3638",loc:[-85.624008,41.956953]},n3639:{id:"n3639",loc:[-85.621278,41.960855]},n364:{id:"n364",loc:[-85.632724,41.943969],tags:{crossing:"marked",highway:"crossing"}},n3640:{id:"n3640",loc:[-85.623128,41.956993]},n3641:{id:"n3641",loc:[-85.622452,41.959183]},n3642:{id:"n3642",loc:[-85.621095,41.961082]},n3643:{id:"n3643",loc:[-85.622011,41.960544]},n3644:{id:"n3644",loc:[-85.621637,41.955385]},n3645:{id:"n3645",loc:[-85.620999,41.959271]},n3646:{id:"n3646",loc:[-85.620044,41.956347]},n3647:{id:"n3647",loc:[-85.621936,41.959682]},n3648:{id:"n3648",loc:[-85.623761,41.95685]},n3649:{id:"n3649",loc:[-85.621239,41.959343]},n365:{id:"n365",loc:[-85.632621,41.944034]},n3650:{id:"n3650",loc:[-85.621073,41.956012]},n3651:{id:"n3651",loc:[-85.621271,41.956184]},n3652:{id:"n3652",loc:[-85.623444,41.95778]},n3653:{id:"n3653",loc:[-85.62125,41.96186]},n3654:{id:"n3654",loc:[-85.62169,41.961059]},n3655:{id:"n3655",loc:[-85.620012,41.955637]},n3656:{id:"n3656",loc:[-85.621058,41.9573]},n3657:{id:"n3657",loc:[-85.621138,41.957663]},n3658:{id:"n3658",loc:[-85.620773,41.957895]},n3659:{id:"n3659",loc:[-85.62007,41.957157]},n366:{id:"n366",loc:[-85.632684,41.944109],tags:{crossing:"marked",highway:"crossing"}},n3660:{id:"n3660",loc:[-85.624534,41.955844]},n3661:{id:"n3661",loc:[-85.621932,41.960807]},n3662:{id:"n3662",loc:[-85.623358,41.958138]},n3663:{id:"n3663",loc:[-85.620456,41.955514]},n3664:{id:"n3664",loc:[-85.623504,41.957607]},n3665:{id:"n3665",loc:[-85.621444,41.960751]},n3666:{id:"n3666",loc:[-85.623492,41.960213]},n3667:{id:"n3667",loc:[-85.621669,41.954655]},n3668:{id:"n3668",loc:[-85.623106,41.958685]},n3669:{id:"n3669",loc:[-85.620922,41.957867]},n367:{id:"n367",loc:[-85.632738,41.944172]},n3670:{id:"n3670",loc:[-85.620092,41.957296]},n3671:{id:"n3671",loc:[-85.621669,41.955222]},n3672:{id:"n3672",loc:[-85.621614,41.960967]},n3673:{id:"n3673",loc:[-85.621691,41.955732]},n3674:{id:"n3674",loc:[-85.619207,41.956419]},n3675:{id:"n3675",loc:[-85.621116,41.956603]},n3676:{id:"n3676",loc:[-85.623311,41.956929]},n3677:{id:"n3677",loc:[-85.625671,41.956499]},n3678:{id:"n3678",loc:[-85.623525,41.956738]},n3679:{id:"n3679",loc:[-85.625381,41.956634]},n368:{id:"n368",loc:[-85.63287,41.944135],tags:{crossing:"marked",highway:"crossing"}},n3680:{id:"n3680",loc:[-85.620096,41.95677]},n3681:{id:"n3681",loc:[-85.623803,41.958745]},n3682:{id:"n3682",loc:[-85.623498,41.958457]},n3683:{id:"n3683",loc:[-85.624223,41.957009]},n3684:{id:"n3684",loc:[-85.620026,41.956946]},n3685:{id:"n3685",loc:[-85.623005,41.960124]},n3686:{id:"n3686",loc:[-85.619073,41.955832]},n3687:{id:"n3687",loc:[-85.621744,41.95501]},n3688:{id:"n3688",loc:[-85.620804,41.958781]},n3689:{id:"n3689",loc:[-85.619844,41.957448]},n369:{id:"n369",loc:[-85.63298,41.944076]},n3690:{id:"n3690",loc:[-85.623713,41.958872]},n3691:{id:"n3691",loc:[-85.622329,41.960507]},n3692:{id:"n3692",loc:[-85.620804,41.956244]},n3693:{id:"n3693",loc:[-85.621818,41.955968]},n3694:{id:"n3694",loc:[-85.621405,41.958697]},n3695:{id:"n3695",loc:[-85.620998,41.960996]},n3696:{id:"n3696",loc:[-85.621621,41.960444]},n3697:{id:"n3697",loc:[-85.620941,41.961637]},n3698:{id:"n3698",loc:[-85.622195,41.958333]},n3699:{id:"n3699",loc:[-85.621668,41.961529]},n37:{id:"n37",loc:[-85.637611,41.945383]},n370:{id:"n370",loc:[-85.633191,41.944471]},n3700:{id:"n3700",loc:[-85.621015,41.957049]},n3701:{id:"n3701",loc:[-85.619368,41.955521]},n3702:{id:"n3702",loc:[-85.651578,41.942534]},n3703:{id:"n3703",loc:[-85.651541,41.943847]},n3704:{id:"n3704",loc:[-85.651365,41.944817]},n3705:{id:"n3705",loc:[-85.651076,41.945985]},n3706:{id:"n3706",loc:[-85.650626,41.947213]},n3707:{id:"n3707",loc:[-85.649669,41.949161]},n3708:{id:"n3708",loc:[-85.641802,41.961801]},n3709:{id:"n3709",loc:[-85.623333,41.961987]},n371:{id:"n371",loc:[-85.633132,41.94372]},n3710:{id:"n3710",loc:[-85.620621,41.965658]},n3711:{id:"n3711",loc:[-85.605673,41.965764]},n3712:{id:"n3712",loc:[-85.605664,41.962094]},n3713:{id:"n3713",loc:[-85.583774,41.962178]},n3714:{id:"n3714",loc:[-85.583774,41.961789]},n3715:{id:"n3715",loc:[-85.581303,41.961783]},n3716:{id:"n3716",loc:[-85.581245,41.958394]},n3717:{id:"n3717",loc:[-85.585299,41.955483]},n3718:{id:"n3718",loc:[-85.585588,41.955331]},n3719:{id:"n3719",loc:[-85.586053,41.955163]},n372:{id:"n372",loc:[-85.633011,41.943788]},n3720:{id:"n3720",loc:[-85.58632,41.955076]},n3721:{id:"n3721",loc:[-85.586478,41.955025]},n3722:{id:"n3722",loc:[-85.58692,41.954947]},n3723:{id:"n3723",loc:[-85.587345,41.954913]},n3724:{id:"n3724",loc:[-85.605592,41.954766]},n3725:{id:"n3725",loc:[-85.605303,41.936236]},n3726:{id:"n3726",loc:[-85.606941,41.936117]},n3727:{id:"n3727",loc:[-85.60876,41.935856]},n3728:{id:"n3728",loc:[-85.610092,41.935451]},n3729:{id:"n3729",loc:[-85.610681,41.935247]},n373:{id:"n373",loc:[-85.632854,41.943632]},n3730:{id:"n3730",loc:[-85.611446,41.934955]},n3731:{id:"n3731",loc:[-85.612057,41.934696]},n3732:{id:"n3732",loc:[-85.613256,41.934084]},n3733:{id:"n3733",loc:[-85.613948,41.933682]},n3734:{id:"n3734",loc:[-85.614638,41.933212]},n3735:{id:"n3735",loc:[-85.619801,41.929305]},n3736:{id:"n3736",loc:[-85.619768,41.925548]},n3737:{id:"n3737",loc:[-85.625761,41.925597]},n3738:{id:"n3738",loc:[-85.6263,41.927323]},n3739:{id:"n3739",loc:[-85.633708,41.927402]},n374:{id:"n374",loc:[-85.632974,41.943565]},n3740:{id:"n3740",loc:[-85.633927,41.929109]},n3741:{id:"n3741",loc:[-85.639213,41.929088]},n3742:{id:"n3742",loc:[-85.639204,41.925488]},n3743:{id:"n3743",loc:[-85.651425,41.925406]},n3744:{id:"n3744",loc:[-85.643386,41.941933]},n3745:{id:"n3745",loc:[-85.642776,41.941161]},n3746:{id:"n3746",loc:[-85.637277,41.948812]},n3747:{id:"n3747",loc:[-85.637366,41.94897]},n3748:{id:"n3748",loc:[-85.637329,41.94889]},n3749:{id:"n3749",loc:[-85.629649,41.952596]},n375:{id:"n375",loc:[-85.632741,41.943351]},n3750:{id:"n3750",loc:[-85.630291,41.954684]},n3751:{id:"n3751",loc:[-85.630284,41.953713]},n3752:{id:"n3752",loc:[-85.630269,41.952463]},n3753:{id:"n3753",loc:[-85.633933,41.949896]},n3754:{id:"n3754",loc:[-85.629339,41.941467]},n3755:{id:"n3755",loc:[-85.629857,41.94316]},n3756:{id:"n3756",loc:[-85.629987,41.944025]},n3757:{id:"n3757",loc:[-85.628538,41.948604]},n3758:{id:"n3758",loc:[-85.627415,41.957442]},n3759:{id:"n3759",loc:[-85.627019,41.957369]},n376:{id:"n376",loc:[-85.63251,41.943481]},n3760:{id:"n3760",loc:[-85.62167,41.952179]},n3761:{id:"n3761",loc:[-85.62167,41.952138]},n3762:{id:"n3762",loc:[-85.621562,41.952139]},n3763:{id:"n3763",loc:[-85.621562,41.952058]},n3764:{id:"n3764",loc:[-85.621476,41.952043]},n3765:{id:"n3765",loc:[-85.621477,41.952132]},n3766:{id:"n3766",loc:[-85.621386,41.952132]},n3767:{id:"n3767",loc:[-85.621387,41.95214]},n3768:{id:"n3768",loc:[-85.621262,41.95214]},n3769:{id:"n3769",loc:[-85.621261,41.952038]},n377:{id:"n377",loc:[-85.632706,41.943715]},n3770:{id:"n3770",loc:[-85.621389,41.952038]},n3771:{id:"n3771",loc:[-85.621389,41.952043]},n3772:{id:"n3772",loc:[-85.620898,41.952024]},n3773:{id:"n3773",loc:[-85.620898,41.952085]},n3774:{id:"n3774",loc:[-85.620774,41.952084]},n3775:{id:"n3775",loc:[-85.620774,41.952023]},n3776:{id:"n3776",loc:[-85.620749,41.952036]},n3777:{id:"n3777",loc:[-85.620723,41.952097]},n3778:{id:"n3778",loc:[-85.626158,41.958996]},n3779:{id:"n3779",loc:[-85.626319,41.958686]},n378:{id:"n378",loc:[-85.638683,41.943295]},n3780:{id:"n3780",loc:[-85.626119,41.958629]},n3781:{id:"n3781",loc:[-85.626064,41.958733]},n3782:{id:"n3782",loc:[-85.626155,41.958759]},n3783:{id:"n3783",loc:[-85.626048,41.958965]},n3784:{id:"n3784",loc:[-85.620648,41.952079]},n3785:{id:"n3785",loc:[-85.63826,41.961213]},n3786:{id:"n3786",loc:[-85.638003,41.961614]},n3787:{id:"n3787",loc:[-85.638817,41.961902]},n3788:{id:"n3788",loc:[-85.639073,41.961501]},n3789:{id:"n3789",loc:[-85.620674,41.952018]},n379:{id:"n379",loc:[-85.638684,41.94323]},n3790:{id:"n3790",loc:[-85.62082,41.952106]},n3791:{id:"n3791",loc:[-85.620819,41.952143]},n3792:{id:"n3792",loc:[-85.620778,41.952143]},n3793:{id:"n3793",loc:[-85.620778,41.952106]},n3794:{id:"n3794",loc:[-85.620563,41.952276]},n3795:{id:"n3795",loc:[-85.620543,41.95238]},n3796:{id:"n3796",loc:[-85.620422,41.952367]},n3797:{id:"n3797",loc:[-85.620441,41.952263]},n3798:{id:"n3798",loc:[-85.620561,41.952266]},n3799:{id:"n3799",loc:[-85.620444,41.952254]},n38:{id:"n38",loc:[-85.63879,41.943295]},n380:{id:"n380",loc:[-85.638627,41.94322]},n3800:{id:"n3800",loc:[-85.620773,41.955585]},n3801:{id:"n3801",loc:[-85.621265,41.955989]},n3802:{id:"n3802",loc:[-85.620692,41.954969]},n3803:{id:"n3803",loc:[-85.620691,41.955367]},n3804:{id:"n3804",loc:[-85.620458,41.952178]},n3805:{id:"n3805",loc:[-85.620575,41.95219]},n3806:{id:"n3806",loc:[-85.617609,41.952712]},n3807:{id:"n3807",loc:[-85.617533,41.952801],tags:{entrance:"yes"}},n3808:{id:"n3808",loc:[-85.616816,41.952911]},n3809:{id:"n3809",loc:[-85.616797,41.952901]},n381:{id:"n381",loc:[-85.638624,41.943294]},n3810:{id:"n3810",loc:[-85.616343,41.952694]},n3811:{id:"n3811",loc:[-85.616336,41.952729]},n3812:{id:"n3812",loc:[-85.616343,41.952772]},n3813:{id:"n3813",loc:[-85.628479,41.948649]},n3814:{id:"n3814",loc:[-85.628413,41.948679]},n3815:{id:"n3815",loc:[-85.628336,41.948694]},n3816:{id:"n3816",loc:[-85.62826,41.948694]},n3817:{id:"n3817",loc:[-85.628185,41.948679]},n3818:{id:"n3818",loc:[-85.628103,41.948649]},n3819:{id:"n3819",loc:[-85.627482,41.948395]},n382:{id:"n382",loc:[-85.638437,41.943291]},n3820:{id:"n3820",loc:[-85.619957,41.951168]},n3821:{id:"n3821",loc:[-85.619955,41.952077]},n3822:{id:"n3822",loc:[-85.619843,41.952666]},n3823:{id:"n3823",loc:[-85.619513,41.95324]},n3824:{id:"n3824",loc:[-85.619163,41.953668]},n3825:{id:"n3825",loc:[-85.618813,41.953947]},n3826:{id:"n3826",loc:[-85.618265,41.954252]},n3827:{id:"n3827",loc:[-85.617691,41.954458]},n3828:{id:"n3828",loc:[-85.616978,41.95459]},n3829:{id:"n3829",loc:[-85.615408,41.954628]},n383:{id:"n383",loc:[-85.63844,41.943209]},n3830:{id:"n3830",loc:[-85.615374,41.951076]},n3831:{id:"n3831",loc:[-85.61932,41.947564]},n3832:{id:"n3832",loc:[-85.610553,41.94755]},n3833:{id:"n3833",loc:[-85.610572,41.951065]},n3834:{id:"n3834",loc:[-85.617548,41.94757]},n3835:{id:"n3835",loc:[-85.619842,41.947939]},n3836:{id:"n3836",loc:[-85.619874,41.950905]},n3837:{id:"n3837",loc:[-85.619695,41.950911]},n3838:{id:"n3838",loc:[-85.617591,41.951078]},n3839:{id:"n3839",loc:[-85.619551,41.951065]},n384:{id:"n384",loc:[-85.632616,41.944021]},n3840:{id:"n3840",loc:[-85.626813,41.947337]},n3841:{id:"n3841",loc:[-85.616371,41.952814]},n3842:{id:"n3842",loc:[-85.617205,41.951308]},n3843:{id:"n3843",loc:[-85.616795,41.950953]},n3844:{id:"n3844",loc:[-85.617441,41.950889]},n3845:{id:"n3845",loc:[-85.619155,41.949377]},n3846:{id:"n3846",loc:[-85.618556,41.949377]},n3847:{id:"n3847",loc:[-85.618557,41.948372]},n3848:{id:"n3848",loc:[-85.619156,41.948372]},n3849:{id:"n3849",loc:[-85.61927,41.949796]},n385:{id:"n385",loc:[-85.632319,41.944172]},n3850:{id:"n3850",loc:[-85.61926,41.948344]},n3851:{id:"n3851",loc:[-85.619219,41.948264]},n3852:{id:"n3852",loc:[-85.619147,41.948196]},n3853:{id:"n3853",loc:[-85.619049,41.948144]},n3854:{id:"n3854",loc:[-85.618942,41.948116]},n3855:{id:"n3855",loc:[-85.618822,41.948109]},n3856:{id:"n3856",loc:[-85.618699,41.94813]},n3857:{id:"n3857",loc:[-85.618937,41.951943]},n3858:{id:"n3858",loc:[-85.616762,41.952222]},n3859:{id:"n3859",loc:[-85.616799,41.95472]},n386:{id:"n386",loc:[-85.63221,41.944066]},n3860:{id:"n3860",loc:[-85.616458,41.954735]},n3861:{id:"n3861",loc:[-85.61763,41.951515]},n3862:{id:"n3862",loc:[-85.617735,41.951572]},n3863:{id:"n3863",loc:[-85.61929,41.951573]},n3864:{id:"n3864",loc:[-85.617134,41.951348]},n3865:{id:"n3865",loc:[-85.616598,41.95192]},n3866:{id:"n3866",loc:[-85.616557,41.951997]},n3867:{id:"n3867",loc:[-85.61658,41.952093]},n3868:{id:"n3868",loc:[-85.616636,41.952145]},n3869:{id:"n3869",loc:[-85.616918,41.952276]},n387:{id:"n387",loc:[-85.632524,41.943912]},n3870:{id:"n3870",loc:[-85.617098,41.952235]},n3871:{id:"n3871",loc:[-85.61892,41.951467]},n3872:{id:"n3872",loc:[-85.618035,41.951473]},n3873:{id:"n3873",loc:[-85.618036,41.951572]},n3874:{id:"n3874",loc:[-85.61892,41.951573]},n3875:{id:"n3875",loc:[-85.618919,41.951957]},n3876:{id:"n3876",loc:[-85.619457,41.952237]},n3877:{id:"n3877",loc:[-85.618178,41.953618]},n3878:{id:"n3878",loc:[-85.617658,41.953366]},n3879:{id:"n3879",loc:[-85.617987,41.953024]},n388:{id:"n388",loc:[-85.632268,41.943621]},n3880:{id:"n3880",loc:[-85.618429,41.953248]},n3881:{id:"n3881",loc:[-85.618554,41.953119]},n3882:{id:"n3882",loc:[-85.618077,41.952868]},n3883:{id:"n3883",loc:[-85.618039,41.952886]},n3884:{id:"n3884",loc:[-85.619375,41.952169]},n3885:{id:"n3885",loc:[-85.618137,41.953538]},n3886:{id:"n3886",loc:[-85.61799,41.953555]},n3887:{id:"n3887",loc:[-85.617729,41.953423]},n3888:{id:"n3888",loc:[-85.618101,41.953029]},n3889:{id:"n3889",loc:[-85.618516,41.953119]},n389:{id:"n389",loc:[-85.631951,41.943773]},n3890:{id:"n3890",loc:[-85.619132,41.952042]},n3891:{id:"n3891",loc:[-85.618235,41.952981]},n3892:{id:"n3892",loc:[-85.618485,41.952425]},n3893:{id:"n3893",loc:[-85.618676,41.952519]},n3894:{id:"n3894",loc:[-85.618942,41.952648]},n3895:{id:"n3895",loc:[-85.618287,41.953122]},n3896:{id:"n3896",loc:[-85.617914,41.953516]},n3897:{id:"n3897",loc:[-85.617836,41.953573]},n3898:{id:"n3898",loc:[-85.616477,41.95289]},n3899:{id:"n3899",loc:[-85.618441,41.953201]},n39:{id:"n39",loc:[-85.619931,41.951013]},n390:{id:"n390",loc:[-85.631981,41.943654]},n3900:{id:"n3900",loc:[-85.617537,41.953335]},n3901:{id:"n3901",loc:[-85.617221,41.953166]},n3902:{id:"n3902",loc:[-85.617253,41.953135]},n3903:{id:"n3903",loc:[-85.617211,41.953114]},n3904:{id:"n3904",loc:[-85.617197,41.95313]},n3905:{id:"n3905",loc:[-85.616802,41.952925]},n3906:{id:"n3906",loc:[-85.616771,41.952928]},n3907:{id:"n3907",loc:[-85.616493,41.952785]},n3908:{id:"n3908",loc:[-85.616823,41.952426]},n3909:{id:"n3909",loc:[-85.617191,41.952616]},n391:{id:"n391",loc:[-85.631886,41.943699]},n3910:{id:"n3910",loc:[-85.61724,41.952559]},n3911:{id:"n3911",loc:[-85.61721,41.952542]},n3912:{id:"n3912",loc:[-85.617395,41.952351]},n3913:{id:"n3913",loc:[-85.617426,41.952368]},n3914:{id:"n3914",loc:[-85.617483,41.952309]},n3915:{id:"n3915",loc:[-85.617332,41.952229]},n3916:{id:"n3916",loc:[-85.617451,41.952102]},n3917:{id:"n3917",loc:[-85.617477,41.952115]},n3918:{id:"n3918",loc:[-85.617658,41.951923]},n3919:{id:"n3919",loc:[-85.617634,41.95191]},n392:{id:"n392",loc:[-85.631807,41.943606]},n3920:{id:"n3920",loc:[-85.617747,41.951786]},n3921:{id:"n3921",loc:[-85.618268,41.952056]},n3922:{id:"n3922",loc:[-85.618211,41.952122]},n3923:{id:"n3923",loc:[-85.618386,41.95222]},n3924:{id:"n3924",loc:[-85.618098,41.952527]},n3925:{id:"n3925",loc:[-85.617916,41.95243]},n3926:{id:"n3926",loc:[-85.617854,41.952498]},n3927:{id:"n3927",loc:[-85.617769,41.952453]},n3928:{id:"n3928",loc:[-85.617476,41.952773]},n3929:{id:"n3929",loc:[-85.617876,41.952973]},n393:{id:"n393",loc:[-85.631902,41.943561]},n3930:{id:"n3930",loc:[-85.617174,41.953638]},n3931:{id:"n3931",loc:[-85.618016,41.953578]},n3932:{id:"n3932",loc:[-85.618107,41.953628]},n3933:{id:"n3933",loc:[-85.618067,41.954268]},n3934:{id:"n3934",loc:[-85.617864,41.954263]},n3935:{id:"n3935",loc:[-85.61762,41.954205]},n3936:{id:"n3936",loc:[-85.617437,41.954103]},n3937:{id:"n3937",loc:[-85.617294,41.953978]},n3938:{id:"n3938",loc:[-85.617217,41.95384]},n3939:{id:"n3939",loc:[-85.616814,41.954327]},n394:{id:"n394",loc:[-85.63236,41.943543]},n3940:{id:"n3940",loc:[-85.616778,41.95381]},n3941:{id:"n3941",loc:[-85.616585,41.953707]},n3942:{id:"n3942",loc:[-85.616458,41.954318]},n3943:{id:"n3943",loc:[-85.616643,41.954345]},n3944:{id:"n3944",loc:[-85.618133,41.951412]},n3945:{id:"n3945",loc:[-85.618326,41.951411]},n3946:{id:"n3946",loc:[-85.618503,41.95141]},n3947:{id:"n3947",loc:[-85.618681,41.951409]},n3948:{id:"n3948",loc:[-85.618868,41.951408]},n3949:{id:"n3949",loc:[-85.617047,41.95136]},n395:{id:"n395",loc:[-85.633839,41.944082]},n3950:{id:"n3950",loc:[-85.616502,41.951946]},n3951:{id:"n3951",loc:[-85.616497,41.952072]},n3952:{id:"n3952",loc:[-85.616565,41.952165]},n3953:{id:"n3953",loc:[-85.616663,41.952218]},n3954:{id:"n3954",loc:[-85.616733,41.952255]},n3955:{id:"n3955",loc:[-85.617238,41.952512],tags:{entrance:"yes"}},n3956:{id:"n3956",loc:[-85.617043,41.952406]},n3957:{id:"n3957",loc:[-85.617691,41.951711]},n3958:{id:"n3958",loc:[-85.617773,41.951679]},n3959:{id:"n3959",loc:[-85.619085,41.951681]},n396:{id:"n396",loc:[-85.63376,41.944097]},n3960:{id:"n3960",loc:[-85.617943,41.952895]},n3961:{id:"n3961",loc:[-85.618039,41.952938]},n3962:{id:"n3962",loc:[-85.61763,41.95336]},n3963:{id:"n3963",loc:[-85.617554,41.95344]},n3964:{id:"n3964",loc:[-85.617381,41.952366],tags:{entrance:"yes"}},n3965:{id:"n3965",loc:[-85.617184,41.952254]},n3966:{id:"n3966",loc:[-85.617208,41.952496]},n3967:{id:"n3967",loc:[-85.617124,41.952581],tags:{entrance:"yes"}},n3968:{id:"n3968",loc:[-85.618094,41.952735]},n3969:{id:"n3969",loc:[-85.617702,41.952525],tags:{entrance:"yes"}},n397:{id:"n397",loc:[-85.63361,41.943957]},n3970:{id:"n3970",loc:[-85.617554,41.952686],tags:{entrance:"yes"}},n3971:{id:"n3971",loc:[-85.617959,41.952878]},n3972:{id:"n3972",loc:[-85.616367,41.952655]},n3973:{id:"n3973",loc:[-85.616416,41.952851]},n3974:{id:"n3974",loc:[-85.619777,41.951075]},n3975:{id:"n3975",loc:[-85.618611,41.94817]},n3976:{id:"n3976",loc:[-85.618538,41.948229]},n3977:{id:"n3977",loc:[-85.617421,41.947559]},n3978:{id:"n3978",loc:[-85.617395,41.951039]},n3979:{id:"n3979",loc:[-85.618488,41.94829]},n398:{id:"n398",loc:[-85.633309,41.943886]},n3980:{id:"n3980",loc:[-85.610238,41.954774]},n3981:{id:"n3981",loc:[-85.617449,41.950756]},n3982:{id:"n3982",loc:[-85.617288,41.951286]},n3983:{id:"n3983",loc:[-85.61745,41.950197]},n3984:{id:"n3984",loc:[-85.617436,41.948908]},n3985:{id:"n3985",loc:[-85.615915,41.953804]},n3986:{id:"n3986",loc:[-85.615953,41.953968]},n3987:{id:"n3987",loc:[-85.616031,41.954085]},n3988:{id:"n3988",loc:[-85.616135,41.954181]},n3989:{id:"n3989",loc:[-85.616273,41.954263]},n399:{id:"n399",loc:[-85.633226,41.943931]},n3990:{id:"n3990",loc:[-85.618327,41.951083]},n3991:{id:"n3991",loc:[-85.618135,41.951084]},n3992:{id:"n3992",loc:[-85.618503,41.951082]},n3993:{id:"n3993",loc:[-85.618682,41.951081]},n3994:{id:"n3994",loc:[-85.618864,41.951082]},n3995:{id:"n3995",loc:[-85.616761,41.950101]},n3996:{id:"n3996",loc:[-85.617317,41.947558]},n3997:{id:"n3997",loc:[-85.617336,41.948883]},n3998:{id:"n3998",loc:[-85.616779,41.949295]},n3999:{id:"n3999",loc:[-85.616754,41.949349]},n4:{id:"n4",loc:[-85.622764,41.950892],tags:{highway:"stop",direction:"forward",stop:"minor"}},n40:{id:"n40",loc:[-85.619841,41.951037]},n400:{id:"n400",loc:[-85.63326,41.943966]},n4000:{id:"n4000",loc:[-85.616761,41.950865]},n4001:{id:"n4001",loc:[-85.616883,41.951041]},n4002:{id:"n4002",loc:[-85.617004,41.951142]},n4003:{id:"n4003",loc:[-85.617062,41.951248]},n4004:{id:"n4004",loc:[-85.616809,41.949273]},n4005:{id:"n4005",loc:[-85.616755,41.949489]},n4006:{id:"n4006",loc:[-85.616759,41.949971]},n4007:{id:"n4007",loc:[-85.616757,41.949702]},n4008:{id:"n4008",loc:[-85.618456,41.94836]},n4009:{id:"n4009",loc:[-85.618447,41.948428]},n401:{id:"n401",loc:[-85.63324,41.943976]},n4010:{id:"n4010",loc:[-85.618437,41.949322]},n4011:{id:"n4011",loc:[-85.618447,41.949418]},n4012:{id:"n4012",loc:[-85.618478,41.949491]},n4013:{id:"n4013",loc:[-85.618535,41.949559]},n4014:{id:"n4014",loc:[-85.618623,41.94962]},n4015:{id:"n4015",loc:[-85.618721,41.94966]},n4016:{id:"n4016",loc:[-85.618838,41.949674]},n4017:{id:"n4017",loc:[-85.618967,41.949667]},n4018:{id:"n4018",loc:[-85.619065,41.949632]},n4019:{id:"n4019",loc:[-85.61915,41.949578]},n402:{id:"n402",loc:[-85.63327,41.944006]},n4020:{id:"n4020",loc:[-85.619216,41.949507]},n4021:{id:"n4021",loc:[-85.61927,41.949399]},n4022:{id:"n4022",loc:[-85.619074,41.947639]},n4023:{id:"n4023",loc:[-85.619073,41.947793]},n4024:{id:"n4024",loc:[-85.618912,41.947793]},n4025:{id:"n4025",loc:[-85.618911,41.947947]},n4026:{id:"n4026",loc:[-85.618752,41.947947]},n4027:{id:"n4027",loc:[-85.618754,41.947637]},n4028:{id:"n4028",loc:[-85.617896,41.947599]},n4029:{id:"n4029",loc:[-85.617898,41.947811]},n403:{id:"n403",loc:[-85.633278,41.944002]},n4030:{id:"n4030",loc:[-85.617717,41.947812]},n4031:{id:"n4031",loc:[-85.617715,41.9476]},n4032:{id:"n4032",loc:[-85.619003,41.949828]},n4033:{id:"n4033",loc:[-85.619003,41.949882]},n4034:{id:"n4034",loc:[-85.618926,41.949882]},n4035:{id:"n4035",loc:[-85.618926,41.949828]},n4036:{id:"n4036",loc:[-85.618861,41.949809]},n4037:{id:"n4037",loc:[-85.618861,41.949898]},n4038:{id:"n4038",loc:[-85.618688,41.949898]},n4039:{id:"n4039",loc:[-85.618687,41.94981]},n404:{id:"n404",loc:[-85.63331,41.944036]},n4040:{id:"n4040",loc:[-85.618349,41.949473]},n4041:{id:"n4041",loc:[-85.618287,41.949473]},n4042:{id:"n4042",loc:[-85.618287,41.94942]},n4043:{id:"n4043",loc:[-85.618348,41.949419]},n4044:{id:"n4044",loc:[-85.62316,41.951604]},n4045:{id:"n4045",loc:[-85.623026,41.951605]},n4046:{id:"n4046",loc:[-85.623023,41.951466]},n4047:{id:"n4047",loc:[-85.623134,41.951465]},n4048:{id:"n4048",loc:[-85.623136,41.951539]},n4049:{id:"n4049",loc:[-85.623159,41.951539]},n405:{id:"n405",loc:[-85.633348,41.944015]},n4050:{id:"n4050",loc:[-85.623025,41.95155]},n4051:{id:"n4051",loc:[-85.622955,41.951551]},n4052:{id:"n4052",loc:[-85.622953,41.951507]},n4053:{id:"n4053",loc:[-85.623024,41.951506]},n4054:{id:"n4054",loc:[-85.623318,41.951242]},n4055:{id:"n4055",loc:[-85.623175,41.951241]},n4056:{id:"n4056",loc:[-85.623176,41.951153]},n4057:{id:"n4057",loc:[-85.623319,41.951154]},n4058:{id:"n4058",loc:[-85.623077,41.951191]},n4059:{id:"n4059",loc:[-85.622973,41.951191]},n406:{id:"n406",loc:[-85.63338,41.944048]},n4060:{id:"n4060",loc:[-85.622972,41.951349]},n4061:{id:"n4061",loc:[-85.623059,41.95135]},n4062:{id:"n4062",loc:[-85.62306,41.951301]},n4063:{id:"n4063",loc:[-85.623077,41.951301]},n4064:{id:"n4064",loc:[-85.623117,41.951405]},n4065:{id:"n4065",loc:[-85.62312,41.951087]},n4066:{id:"n4066",loc:[-85.623118,41.951274]},n4067:{id:"n4067",loc:[-85.62328,41.951275]},n4068:{id:"n4068",loc:[-85.62328,41.951242]},n4069:{id:"n4069",loc:[-85.623179,41.951392]},n407:{id:"n407",loc:[-85.633431,41.94402]},n4070:{id:"n4070",loc:[-85.623141,41.951392]},n4071:{id:"n4071",loc:[-85.623142,41.95136]},n4072:{id:"n4072",loc:[-85.623179,41.951361]},n4073:{id:"n4073",loc:[-85.622565,41.951639]},n4074:{id:"n4074",loc:[-85.622565,41.951741]},n4075:{id:"n4075",loc:[-85.622463,41.95174]},n4076:{id:"n4076",loc:[-85.622463,41.95173]},n4077:{id:"n4077",loc:[-85.622442,41.95173]},n4078:{id:"n4078",loc:[-85.622442,41.951742]},n4079:{id:"n4079",loc:[-85.622361,41.951742]},n408:{id:"n408",loc:[-85.633425,41.944014]},n4080:{id:"n4080",loc:[-85.622362,41.951667]},n4081:{id:"n4081",loc:[-85.622441,41.951667]},n4082:{id:"n4082",loc:[-85.622441,41.951688]},n4083:{id:"n4083",loc:[-85.622461,41.951688]},n4084:{id:"n4084",loc:[-85.622461,41.951638]},n4085:{id:"n4085",loc:[-85.62255,41.951587]},n4086:{id:"n4086",loc:[-85.622449,41.95159]},n4087:{id:"n4087",loc:[-85.622441,41.951448]},n4088:{id:"n4088",loc:[-85.62253,41.951445]},n4089:{id:"n4089",loc:[-85.622532,41.951486]},n409:{id:"n409",loc:[-85.633457,41.943997]},n4090:{id:"n4090",loc:[-85.622555,41.951485]},n4091:{id:"n4091",loc:[-85.622558,41.951531]},n4092:{id:"n4092",loc:[-85.622547,41.951531]},n4093:{id:"n4093",loc:[-85.622451,41.95159]},n4094:{id:"n4094",loc:[-85.622452,41.95161]},n4095:{id:"n4095",loc:[-85.622106,41.951617]},n4096:{id:"n4096",loc:[-85.622133,41.951443]},n4097:{id:"n4097",loc:[-85.622552,41.951379]},n4098:{id:"n4098",loc:[-85.622443,41.95138]},n4099:{id:"n4099",loc:[-85.622441,41.951281]},n41:{id:"n41",loc:[-85.636233,41.942764]},n410:{id:"n410",loc:[-85.633429,41.943969]},n4100:{id:"n4100",loc:[-85.62255,41.95128]},n4101:{id:"n4101",loc:[-85.622541,41.951437]},n4102:{id:"n4102",loc:[-85.622441,41.951438]},n4103:{id:"n4103",loc:[-85.621561,41.951444]},n4104:{id:"n4104",loc:[-85.622302,41.951479]},n4105:{id:"n4105",loc:[-85.6223,41.95152]},n4106:{id:"n4106",loc:[-85.622169,41.951517]},n4107:{id:"n4107",loc:[-85.622171,41.951476]},n4108:{id:"n4108",loc:[-85.622543,41.951228]},n4109:{id:"n4109",loc:[-85.622433,41.951228]},n411:{id:"n411",loc:[-85.633442,41.943962]},n4110:{id:"n4110",loc:[-85.622433,41.951133]},n4111:{id:"n4111",loc:[-85.622543,41.951133]},n4112:{id:"n4112",loc:[-85.622356,41.951256]},n4113:{id:"n4113",loc:[-85.622293,41.951256]},n4114:{id:"n4114",loc:[-85.622292,41.9512]},n4115:{id:"n4115",loc:[-85.622313,41.9512]},n4116:{id:"n4116",loc:[-85.622312,41.951173]},n4117:{id:"n4117",loc:[-85.622364,41.951173]},n4118:{id:"n4118",loc:[-85.622365,41.951231]},n4119:{id:"n4119",loc:[-85.622355,41.951231]},n412:{id:"n412",loc:[-85.633411,41.943932]},n4120:{id:"n4120",loc:[-85.62197,41.951155]},n4121:{id:"n4121",loc:[-85.62197,41.951213]},n4122:{id:"n4122",loc:[-85.621848,41.951213]},n4123:{id:"n4123",loc:[-85.621848,41.951155]},n4124:{id:"n4124",loc:[-85.622193,41.951268]},n4125:{id:"n4125",loc:[-85.622194,41.951305]},n4126:{id:"n4126",loc:[-85.622121,41.951306]},n4127:{id:"n4127",loc:[-85.622121,41.951322]},n4128:{id:"n4128",loc:[-85.621984,41.951324]},n4129:{id:"n4129",loc:[-85.621983,41.951271]},n413:{id:"n413",loc:[-85.633421,41.943926]},n4130:{id:"n4130",loc:[-85.622171,41.9514]},n4131:{id:"n4131",loc:[-85.622148,41.951382]},n4132:{id:"n4132",loc:[-85.6221,41.951414]},n4133:{id:"n4133",loc:[-85.622122,41.951433]},n4134:{id:"n4134",loc:[-85.621782,41.951148]},n4135:{id:"n4135",loc:[-85.621783,41.951219]},n4136:{id:"n4136",loc:[-85.62164,41.951221]},n4137:{id:"n4137",loc:[-85.62164,41.951236]},n4138:{id:"n4138",loc:[-85.621556,41.951237]},n4139:{id:"n4139",loc:[-85.621555,41.95117]},n414:{id:"n414",loc:[-85.633376,41.94388]},n4140:{id:"n4140",loc:[-85.621644,41.951169]},n4141:{id:"n4141",loc:[-85.621643,41.951139]},n4142:{id:"n4142",loc:[-85.621719,41.951138]},n4143:{id:"n4143",loc:[-85.621719,41.951148]},n4144:{id:"n4144",loc:[-85.621409,41.951322]},n4145:{id:"n4145",loc:[-85.621338,41.951322]},n4146:{id:"n4146",loc:[-85.621336,41.95115]},n4147:{id:"n4147",loc:[-85.621521,41.951149]},n4148:{id:"n4148",loc:[-85.621522,41.951228]},n4149:{id:"n4149",loc:[-85.621408,41.951228]},n415:{id:"n415",loc:[-85.633348,41.943895]},n4150:{id:"n4150",loc:[-85.621284,41.951219]},n4151:{id:"n4151",loc:[-85.621153,41.951219]},n4152:{id:"n4152",loc:[-85.621152,41.951152]},n4153:{id:"n4153",loc:[-85.621283,41.951152]},n4154:{id:"n4154",loc:[-85.621159,41.951241]},n4155:{id:"n4155",loc:[-85.62116,41.951301]},n4156:{id:"n4156",loc:[-85.621088,41.951302]},n4157:{id:"n4157",loc:[-85.621088,41.951241]},n4158:{id:"n4158",loc:[-85.621049,41.951158]},n4159:{id:"n4159",loc:[-85.62105,41.951229]},n416:{id:"n416",loc:[-85.633341,41.943888]},n4160:{id:"n4160",loc:[-85.620976,41.951229]},n4161:{id:"n4161",loc:[-85.620977,41.951295]},n4162:{id:"n4162",loc:[-85.620887,41.951296]},n4163:{id:"n4163",loc:[-85.620886,41.951229]},n4164:{id:"n4164",loc:[-85.620862,41.951229]},n4165:{id:"n4165",loc:[-85.620861,41.951159]},n4166:{id:"n4166",loc:[-85.620626,41.951133]},n4167:{id:"n4167",loc:[-85.620626,41.951205]},n4168:{id:"n4168",loc:[-85.620412,41.951206]},n4169:{id:"n4169",loc:[-85.620411,41.951134]},n417:{id:"n417",loc:[-85.633321,41.943898]},n4170:{id:"n4170",loc:[-85.621775,41.951443]},n4171:{id:"n4171",loc:[-85.621777,41.951264]},n4172:{id:"n4172",loc:[-85.621565,41.951654]},n4173:{id:"n4173",loc:[-85.621331,41.951439]},n4174:{id:"n4174",loc:[-85.621031,41.951443]},n4175:{id:"n4175",loc:[-85.621836,41.951724]},n4176:{id:"n4176",loc:[-85.621834,41.951621]},n4177:{id:"n4177",loc:[-85.62197,41.951619]},n4178:{id:"n4178",loc:[-85.621972,41.951722]},n4179:{id:"n4179",loc:[-85.621772,41.951638]},n418:{id:"n418",loc:[-85.633547,41.943896]},n4180:{id:"n4180",loc:[-85.621772,41.951715]},n4181:{id:"n4181",loc:[-85.621699,41.951716]},n4182:{id:"n4182",loc:[-85.6217,41.951722]},n4183:{id:"n4183",loc:[-85.621641,41.951722]},n4184:{id:"n4184",loc:[-85.62164,41.951639]},n4185:{id:"n4185",loc:[-85.621505,41.951655]},n4186:{id:"n4186",loc:[-85.621505,41.951729]},n4187:{id:"n4187",loc:[-85.621389,41.951729]},n4188:{id:"n4188",loc:[-85.62139,41.951654]},n4189:{id:"n4189",loc:[-85.621105,41.951635]},n419:{id:"n419",loc:[-85.633467,41.944075]},n4190:{id:"n4190",loc:[-85.621104,41.951576]},n4191:{id:"n4191",loc:[-85.621168,41.951576]},n4192:{id:"n4192",loc:[-85.621168,41.951595]},n4193:{id:"n4193",loc:[-85.621261,41.951595]},n4194:{id:"n4194",loc:[-85.621261,41.951646]},n4195:{id:"n4195",loc:[-85.621294,41.951646]},n4196:{id:"n4196",loc:[-85.621294,41.951732]},n4197:{id:"n4197",loc:[-85.621251,41.951732]},n4198:{id:"n4198",loc:[-85.621251,41.95174]},n4199:{id:"n4199",loc:[-85.621175,41.951741]},n42:{id:"n42",loc:[-85.635996,41.942727]},n420:{id:"n420",loc:[-85.633578,41.944055]},n4200:{id:"n4200",loc:[-85.621175,41.951651]},n4201:{id:"n4201",loc:[-85.621189,41.951651]},n4202:{id:"n4202",loc:[-85.621189,41.951635]},n4203:{id:"n4203",loc:[-85.620554,41.951641]},n4204:{id:"n4204",loc:[-85.620555,41.951742]},n4205:{id:"n4205",loc:[-85.620719,41.951742]},n4206:{id:"n4206",loc:[-85.620719,41.951731]},n4207:{id:"n4207",loc:[-85.620803,41.95173]},n4208:{id:"n4208",loc:[-85.620803,41.951603]},n4209:{id:"n4209",loc:[-85.62072,41.951603]},n421:{id:"n421",loc:[-85.633462,41.944125]},n4210:{id:"n4210",loc:[-85.620721,41.951641]},n4211:{id:"n4211",loc:[-85.620269,41.953053]},n4212:{id:"n4212",loc:[-85.620229,41.953051]},n4213:{id:"n4213",loc:[-85.620231,41.953013]},n4214:{id:"n4214",loc:[-85.620271,41.953015]},n4215:{id:"n4215",loc:[-85.620215,41.953133]},n4216:{id:"n4216",loc:[-85.62013,41.953134]},n4217:{id:"n4217",loc:[-85.620129,41.953083]},n4218:{id:"n4218",loc:[-85.620214,41.953082]},n4219:{id:"n4219",loc:[-85.62016,41.953272]},n422:{id:"n422",loc:[-85.633372,41.944061]},n4220:{id:"n4220",loc:[-85.620046,41.953273]},n4221:{id:"n4221",loc:[-85.620045,41.953171]},n4222:{id:"n4222",loc:[-85.620088,41.953171]},n4223:{id:"n4223",loc:[-85.620087,41.953162]},n4224:{id:"n4224",loc:[-85.620121,41.953162]},n4225:{id:"n4225",loc:[-85.620121,41.953173]},n4226:{id:"n4226",loc:[-85.620157,41.953173]},n4227:{id:"n4227",loc:[-85.620158,41.953196]},n4228:{id:"n4228",loc:[-85.620189,41.953196]},n4229:{id:"n4229",loc:[-85.620189,41.953246]},n423:{id:"n423",loc:[-85.633509,41.943981]},n4230:{id:"n4230",loc:[-85.62016,41.953246]},n4231:{id:"n4231",loc:[-85.6195,41.954012]},n4232:{id:"n4232",loc:[-85.619438,41.954057]},n4233:{id:"n4233",loc:[-85.619418,41.954043]},n4234:{id:"n4234",loc:[-85.619381,41.954069]},n4235:{id:"n4235",loc:[-85.619399,41.954083]},n4236:{id:"n4236",loc:[-85.619339,41.954126]},n4237:{id:"n4237",loc:[-85.619584,41.954313]},n4238:{id:"n4238",loc:[-85.619743,41.954198]},n4239:{id:"n4239",loc:[-85.619453,41.954727]},n424:{id:"n424",loc:[-85.635421,41.945367]},n4240:{id:"n4240",loc:[-85.619503,41.954581]},n4241:{id:"n4241",loc:[-85.619597,41.954472]},n4242:{id:"n4242",loc:[-85.619862,41.95419]},n4243:{id:"n4243",loc:[-85.619506,41.953907]},n4244:{id:"n4244",loc:[-85.619261,41.9541]},n4245:{id:"n4245",loc:[-85.619246,41.954139]},n4246:{id:"n4246",loc:[-85.619244,41.9542]},n4247:{id:"n4247",loc:[-85.619259,41.954243]},n4248:{id:"n4248",loc:[-85.619285,41.954274]},n4249:{id:"n4249",loc:[-85.619123,41.954381]},n425:{id:"n425",loc:[-85.634425,41.943552]},n4250:{id:"n4250",loc:[-85.619641,41.954607]},n4251:{id:"n4251",loc:[-85.619383,41.954615]},n4252:{id:"n4252",loc:[-85.61896,41.954391]},n4253:{id:"n4253",loc:[-85.619211,41.954178]},n4254:{id:"n4254",loc:[-85.619115,41.954102]},n4255:{id:"n4255",loc:[-85.619519,41.953821]},n4256:{id:"n4256",loc:[-85.619956,41.954156]},n4257:{id:"n4257",loc:[-85.619851,41.954266]},n4258:{id:"n4258",loc:[-85.619779,41.95436]},n4259:{id:"n4259",loc:[-85.620525,41.954364]},n426:{id:"n426",loc:[-85.634248,41.943654]},n4260:{id:"n4260",loc:[-85.620398,41.954365]},n4261:{id:"n4261",loc:[-85.620398,41.954324]},n4262:{id:"n4262",loc:[-85.620525,41.954323]},n4263:{id:"n4263",loc:[-85.620359,41.954588]},n4264:{id:"n4264",loc:[-85.620321,41.954588]},n4265:{id:"n4265",loc:[-85.620321,41.954599]},n4266:{id:"n4266",loc:[-85.620296,41.954599]},n4267:{id:"n4267",loc:[-85.620296,41.954587]},n4268:{id:"n4268",loc:[-85.620262,41.954588]},n4269:{id:"n4269",loc:[-85.620261,41.954516]},n427:{id:"n427",loc:[-85.634177,41.943585]},n4270:{id:"n4270",loc:[-85.620282,41.954516]},n4271:{id:"n4271",loc:[-85.620282,41.954373]},n4272:{id:"n4272",loc:[-85.620378,41.954373]},n4273:{id:"n4273",loc:[-85.620379,41.954486]},n4274:{id:"n4274",loc:[-85.620348,41.954486]},n4275:{id:"n4275",loc:[-85.620348,41.954537]},n4276:{id:"n4276",loc:[-85.620359,41.954537]},n4277:{id:"n4277",loc:[-85.620463,41.95521]},n4278:{id:"n4278",loc:[-85.620409,41.955273]},n4279:{id:"n4279",loc:[-85.620205,41.955177]},n428:{id:"n428",loc:[-85.634354,41.943484]},n4280:{id:"n4280",loc:[-85.620288,41.955079]},n4281:{id:"n4281",loc:[-85.620379,41.955121]},n4282:{id:"n4282",loc:[-85.620349,41.955157]},n4283:{id:"n4283",loc:[-85.620083,41.955101]},n4284:{id:"n4284",loc:[-85.620083,41.954986]},n4285:{id:"n4285",loc:[-85.620016,41.954986]},n4286:{id:"n4286",loc:[-85.620016,41.954999]},n4287:{id:"n4287",loc:[-85.619941,41.954999]},n4288:{id:"n4288",loc:[-85.619941,41.954988]},n4289:{id:"n4289",loc:[-85.619815,41.954988]},n429:{id:"n429",loc:[-85.638577,41.943212]},n4290:{id:"n4290",loc:[-85.619815,41.955075]},n4291:{id:"n4291",loc:[-85.619948,41.955075]},n4292:{id:"n4292",loc:[-85.619948,41.955082]},n4293:{id:"n4293",loc:[-85.620004,41.955082]},n4294:{id:"n4294",loc:[-85.620004,41.955101]},n4295:{id:"n4295",loc:[-85.619293,41.955127]},n4296:{id:"n4296",loc:[-85.619208,41.955124]},n4297:{id:"n4297",loc:[-85.619212,41.955061]},n4298:{id:"n4298",loc:[-85.619297,41.955064]},n4299:{id:"n4299",loc:[-85.619068,41.954936]},n43:{id:"n43",loc:[-85.637047,41.943054]},n430:{id:"n430",loc:[-85.638576,41.943219]},n4300:{id:"n4300",loc:[-85.619003,41.954936]},n4301:{id:"n4301",loc:[-85.619004,41.955003]},n4302:{id:"n4302",loc:[-85.618994,41.955003]},n4303:{id:"n4303",loc:[-85.618994,41.955016]},n4304:{id:"n4304",loc:[-85.618973,41.955016]},n4305:{id:"n4305",loc:[-85.618973,41.955071]},n4306:{id:"n4306",loc:[-85.619061,41.955071]},n4307:{id:"n4307",loc:[-85.61906,41.955024]},n4308:{id:"n4308",loc:[-85.619105,41.955024]},n4309:{id:"n4309",loc:[-85.619105,41.954956]},n431:{id:"n431",loc:[-85.638653,41.943078]},n4310:{id:"n4310",loc:[-85.619068,41.954956]},n4311:{id:"n4311",loc:[-85.618294,41.954596]},n4312:{id:"n4312",loc:[-85.618235,41.954602]},n4313:{id:"n4313",loc:[-85.618222,41.954535]},n4314:{id:"n4314",loc:[-85.618281,41.954529]},n4315:{id:"n4315",loc:[-85.618593,41.954556]},n4316:{id:"n4316",loc:[-85.618551,41.954565]},n4317:{id:"n4317",loc:[-85.618545,41.954552]},n4318:{id:"n4318",loc:[-85.618493,41.954563]},n4319:{id:"n4319",loc:[-85.618449,41.954455]},n432:{id:"n432",loc:[-85.638654,41.943148]},n4320:{id:"n4320",loc:[-85.618544,41.954434]},n4321:{id:"n4321",loc:[-85.622545,41.950775]},n4322:{id:"n4322",loc:[-85.622546,41.950843]},n4323:{id:"n4323",loc:[-85.622503,41.950844]},n4324:{id:"n4324",loc:[-85.622503,41.950853]},n4325:{id:"n4325",loc:[-85.622479,41.950853]},n4326:{id:"n4326",loc:[-85.622478,41.950843]},n4327:{id:"n4327",loc:[-85.622425,41.950843]},n4328:{id:"n4328",loc:[-85.622425,41.950808]},n4329:{id:"n4329",loc:[-85.622366,41.950809]},n433:{id:"n433",loc:[-85.638387,41.943151]},n4330:{id:"n4330",loc:[-85.622364,41.950673]},n4331:{id:"n4331",loc:[-85.622448,41.950673]},n4332:{id:"n4332",loc:[-85.622449,41.950732]},n4333:{id:"n4333",loc:[-85.622479,41.950731]},n4334:{id:"n4334",loc:[-85.622479,41.950775]},n4335:{id:"n4335",loc:[-85.621909,41.950641]},n4336:{id:"n4336",loc:[-85.621864,41.950641]},n4337:{id:"n4337",loc:[-85.621865,41.950567]},n4338:{id:"n4338",loc:[-85.62191,41.950567]},n4339:{id:"n4339",loc:[-85.621787,41.950829]},n434:{id:"n434",loc:[-85.638386,41.94308]},n4340:{id:"n4340",loc:[-85.621786,41.950775]},n4341:{id:"n4341",loc:[-85.621588,41.950776]},n4342:{id:"n4342",loc:[-85.621589,41.950848]},n4343:{id:"n4343",loc:[-85.621737,41.950847]},n4344:{id:"n4344",loc:[-85.621737,41.950829]},n4345:{id:"n4345",loc:[-85.621509,41.950846]},n4346:{id:"n4346",loc:[-85.621399,41.950846]},n4347:{id:"n4347",loc:[-85.621398,41.95073]},n4348:{id:"n4348",loc:[-85.621509,41.95073]},n4349:{id:"n4349",loc:[-85.621217,41.950841]},n435:{id:"n435",loc:[-85.634427,41.943533]},n4350:{id:"n4350",loc:[-85.6211,41.95084]},n4351:{id:"n4351",loc:[-85.6211,41.950777]},n4352:{id:"n4352",loc:[-85.621218,41.950778]},n4353:{id:"n4353",loc:[-85.621055,41.950764]},n4354:{id:"n4354",loc:[-85.621054,41.950826]},n4355:{id:"n4355",loc:[-85.620988,41.950826]},n4356:{id:"n4356",loc:[-85.620988,41.950843]},n4357:{id:"n4357",loc:[-85.620842,41.950843]},n4358:{id:"n4358",loc:[-85.620842,41.950764]},n4359:{id:"n4359",loc:[-85.620825,41.950922]},n436:{id:"n436",loc:[-85.63428,41.943229]},n4360:{id:"n4360",loc:[-85.620824,41.950553]},n4361:{id:"n4361",loc:[-85.620543,41.950771]},n4362:{id:"n4362",loc:[-85.620431,41.950772]},n4363:{id:"n4363",loc:[-85.62043,41.950585]},n4364:{id:"n4364",loc:[-85.620542,41.950585]},n4365:{id:"n4365",loc:[-85.62068,41.950505]},n4366:{id:"n4366",loc:[-85.620681,41.950552]},n4367:{id:"n4367",loc:[-85.620589,41.950553]},n4368:{id:"n4368",loc:[-85.620588,41.950506]},n4369:{id:"n4369",loc:[-85.620539,41.950407]},n437:{id:"n437",loc:[-85.634499,41.943461]},n4370:{id:"n4370",loc:[-85.62054,41.950504]},n4371:{id:"n4371",loc:[-85.620416,41.950504]},n4372:{id:"n4372",loc:[-85.620416,41.950408]},n4373:{id:"n4373",loc:[-85.620742,41.95038]},n4374:{id:"n4374",loc:[-85.620527,41.95038]},n4375:{id:"n4375",loc:[-85.620528,41.950408]},n4376:{id:"n4376",loc:[-85.622449,41.950373]},n4377:{id:"n4377",loc:[-85.622452,41.950397]},n4378:{id:"n4378",loc:[-85.622336,41.950404]},n4379:{id:"n4379",loc:[-85.622333,41.950379]},n438:{id:"n438",loc:[-85.634514,41.943486]},n4380:{id:"n4380",loc:[-85.622263,41.950324]},n4381:{id:"n4381",loc:[-85.622261,41.950256]},n4382:{id:"n4382",loc:[-85.62236,41.950254]},n4383:{id:"n4383",loc:[-85.62236,41.95027]},n4384:{id:"n4384",loc:[-85.622402,41.950281]},n4385:{id:"n4385",loc:[-85.622403,41.9503]},n4386:{id:"n4386",loc:[-85.622439,41.950299]},n4387:{id:"n4387",loc:[-85.62244,41.950334]},n4388:{id:"n4388",loc:[-85.622414,41.950335]},n4389:{id:"n4389",loc:[-85.622414,41.95036]},n439:{id:"n439",loc:[-85.63452,41.943511]},n4390:{id:"n4390",loc:[-85.62231,41.950362]},n4391:{id:"n4391",loc:[-85.622309,41.950323]},n4392:{id:"n4392",loc:[-85.622015,41.950539]},n4393:{id:"n4393",loc:[-85.621909,41.95054]},n4394:{id:"n4394",loc:[-85.621909,41.950472]},n4395:{id:"n4395",loc:[-85.622015,41.950471]},n4396:{id:"n4396",loc:[-85.62199,41.950439]},n4397:{id:"n4397",loc:[-85.621956,41.95044]},n4398:{id:"n4398",loc:[-85.621955,41.950405]},n4399:{id:"n4399",loc:[-85.621988,41.950404]},n44:{id:"n44",loc:[-85.636799,41.943055]},n440:{id:"n440",loc:[-85.63451,41.943534]},n4400:{id:"n4400",loc:[-85.621668,41.950418]},n4401:{id:"n4401",loc:[-85.621667,41.950343]},n4402:{id:"n4402",loc:[-85.621745,41.950342]},n4403:{id:"n4403",loc:[-85.621744,41.950306]},n4404:{id:"n4404",loc:[-85.621764,41.950306]},n4405:{id:"n4405",loc:[-85.621763,41.950254]},n4406:{id:"n4406",loc:[-85.621861,41.950253]},n4407:{id:"n4407",loc:[-85.621861,41.950274]},n4408:{id:"n4408",loc:[-85.621896,41.950273]},n4409:{id:"n4409",loc:[-85.621898,41.950389]},n441:{id:"n441",loc:[-85.634483,41.943556]},n4410:{id:"n4410",loc:[-85.621843,41.95039]},n4411:{id:"n4411",loc:[-85.621843,41.950425]},n4412:{id:"n4412",loc:[-85.621789,41.950425]},n4413:{id:"n4413",loc:[-85.621789,41.950386]},n4414:{id:"n4414",loc:[-85.621752,41.950387]},n4415:{id:"n4415",loc:[-85.621753,41.950417]},n4416:{id:"n4416",loc:[-85.621556,41.950562]},n4417:{id:"n4417",loc:[-85.621552,41.950217]},n4418:{id:"n4418",loc:[-85.621788,41.950562]},n4419:{id:"n4419",loc:[-85.621155,41.950562]},n442:{id:"n442",loc:[-85.63419,41.943713]},n4420:{id:"n4420",loc:[-85.622473,41.950551]},n4421:{id:"n4421",loc:[-85.622043,41.950551]},n4422:{id:"n4422",loc:[-85.62142,41.950454]},n4423:{id:"n4423",loc:[-85.621315,41.950455]},n4424:{id:"n4424",loc:[-85.621313,41.950311]},n4425:{id:"n4425",loc:[-85.621388,41.950311]},n4426:{id:"n4426",loc:[-85.621387,41.950261]},n4427:{id:"n4427",loc:[-85.621468,41.95026]},n4428:{id:"n4428",loc:[-85.621468,41.950271]},n4429:{id:"n4429",loc:[-85.621503,41.95027]},n443:{id:"n443",loc:[-85.634462,41.943294]},n4430:{id:"n4430",loc:[-85.621505,41.950353]},n4431:{id:"n4431",loc:[-85.621483,41.950354]},n4432:{id:"n4432",loc:[-85.621483,41.950392]},n4433:{id:"n4433",loc:[-85.621419,41.950393]},n4434:{id:"n4434",loc:[-85.621213,41.95039]},n4435:{id:"n4435",loc:[-85.621127,41.950391]},n4436:{id:"n4436",loc:[-85.621126,41.950357]},n4437:{id:"n4437",loc:[-85.621094,41.950357]},n4438:{id:"n4438",loc:[-85.621094,41.950391]},n4439:{id:"n4439",loc:[-85.620977,41.950392]},n444:{id:"n444",loc:[-85.634298,41.943389]},n4440:{id:"n4440",loc:[-85.620975,41.950278]},n4441:{id:"n4441",loc:[-85.621087,41.950277]},n4442:{id:"n4442",loc:[-85.621088,41.950331]},n4443:{id:"n4443",loc:[-85.621211,41.950312]},n4444:{id:"n4444",loc:[-85.621104,41.950313]},n4445:{id:"n4445",loc:[-85.621105,41.950331]},n4446:{id:"n4446",loc:[-85.620706,41.950328]},n4447:{id:"n4447",loc:[-85.620606,41.950327]},n4448:{id:"n4448",loc:[-85.620607,41.950261]},n4449:{id:"n4449",loc:[-85.620707,41.950262]},n445:{id:"n445",loc:[-85.634527,41.943623]},n4450:{id:"n4450",loc:[-85.620599,41.950336]},n4451:{id:"n4451",loc:[-85.620559,41.950336]},n4452:{id:"n4452",loc:[-85.620559,41.950299]},n4453:{id:"n4453",loc:[-85.620599,41.950299]},n4454:{id:"n4454",loc:[-85.620545,41.950357]},n4455:{id:"n4455",loc:[-85.620418,41.950357]},n4456:{id:"n4456",loc:[-85.620417,41.950257]},n4457:{id:"n4457",loc:[-85.620544,41.950256]},n4458:{id:"n4458",loc:[-85.620246,41.950131],tags:{highway:"crossing"}},n4459:{id:"n4459",loc:[-85.620252,41.950956]},n446:{id:"n446",loc:[-85.634608,41.943577]},n4460:{id:"n4460",loc:[-85.620245,41.950179]},n4461:{id:"n4461",loc:[-85.620246,41.950088]},n4462:{id:"n4462",loc:[-85.620251,41.950885]},n4463:{id:"n4463",loc:[-85.620103,41.950884],tags:{crossing:"marked",highway:"crossing"}},n4464:{id:"n4464",loc:[-85.619992,41.950884]},n4465:{id:"n4465",loc:[-85.619704,41.951008]},n4466:{id:"n4466",loc:[-85.619599,41.951122]},n4467:{id:"n4467",loc:[-85.619264,41.951486]},n4468:{id:"n4468",loc:[-85.619179,41.951573],tags:{highway:"crossing"}},n4469:{id:"n4469",loc:[-85.620251,41.950999],tags:{highway:"crossing"}},n447:{id:"n447",loc:[-85.634555,41.943531]},n4470:{id:"n4470",loc:[-85.620249,41.951066]},n4471:{id:"n4471",loc:[-85.620256,41.951374]},n4472:{id:"n4472",loc:[-85.620249,41.951389]},n4473:{id:"n4473",loc:[-85.620249,41.951407]},n4474:{id:"n4474",loc:[-85.620255,41.951423]},n4475:{id:"n4475",loc:[-85.62026,41.951853]},n4476:{id:"n4476",loc:[-85.620262,41.951894],tags:{highway:"crossing"}},n4477:{id:"n4477",loc:[-85.620265,41.951957]},n4478:{id:"n4478",loc:[-85.620262,41.952135]},n4479:{id:"n4479",loc:[-85.620241,41.952424]},n448:{id:"n448",loc:[-85.634555,41.943482]},n4480:{id:"n4480",loc:[-85.620213,41.952583]},n4481:{id:"n4481",loc:[-85.620158,41.952754]},n4482:{id:"n4482",loc:[-85.620065,41.952942]},n4483:{id:"n4483",loc:[-85.619753,41.953439]},n4484:{id:"n4484",loc:[-85.619605,41.953626]},n4485:{id:"n4485",loc:[-85.619381,41.953834]},n4486:{id:"n4486",loc:[-85.619069,41.954066]},n4487:{id:"n4487",loc:[-85.618674,41.95429]},n4488:{id:"n4488",loc:[-85.621816,41.952389]},n4489:{id:"n4489",loc:[-85.6217,41.952386]},n449:{id:"n449",loc:[-85.634509,41.943427]},n4490:{id:"n4490",loc:[-85.621705,41.952306]},n4491:{id:"n4491",loc:[-85.621821,41.95231]},n4492:{id:"n4492",loc:[-85.621819,41.952272]},n4493:{id:"n4493",loc:[-85.621778,41.952272]},n4494:{id:"n4494",loc:[-85.621778,41.952199]},n4495:{id:"n4495",loc:[-85.621818,41.952199]},n4496:{id:"n4496",loc:[-85.621754,41.952281]},n4497:{id:"n4497",loc:[-85.621701,41.95228]},n4498:{id:"n4498",loc:[-85.621702,41.952197]},n4499:{id:"n4499",loc:[-85.621755,41.952197]},n45:{id:"n45",loc:[-85.636791,41.942792]},n450:{id:"n450",loc:[-85.63453,41.943365]},n4500:{id:"n4500",loc:[-85.628201,41.954694],tags:{highway:"stop",stop:"all",direction:"forward"}},n4501:{id:"n4501",loc:[-85.627921,41.954783],tags:{highway:"stop",stop:"all",direction:"backward"}},n4502:{id:"n4502",loc:[-85.62775,41.954696],tags:{highway:"stop",stop:"all",direction:"backward"}},n4503:{id:"n4503",loc:[-85.628046,41.954591],tags:{highway:"stop",stop:"all",direction:"forward"}},n4504:{id:"n4504",loc:[-85.631074,41.957428],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4505:{id:"n4505",loc:[-85.630768,41.957429],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4506:{id:"n4506",loc:[-85.629888,41.957432],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4507:{id:"n4507",loc:[-85.629565,41.957433],tags:{highway:"stop",stop:"minor",direction:"forward"}},n4508:{id:"n4508",loc:[-85.629559,41.957343]},n4509:{id:"n4509",loc:[-85.628723,41.95735]},n451:{id:"n451",loc:[-85.634356,41.943468]},n4510:{id:"n4510",loc:[-85.62842,41.957515]},n4511:{id:"n4511",loc:[-85.627561,41.957525]},n4512:{id:"n4512",loc:[-85.630323,41.957508]},n4513:{id:"n4513",loc:[-85.630811,41.957506]},n4514:{id:"n4514",loc:[-85.630839,41.960874]},n4515:{id:"n4515",loc:[-85.631035,41.957506]},n4516:{id:"n4516",loc:[-85.632027,41.9575]},n4517:{id:"n4517",loc:[-85.631038,41.958066]},n4518:{id:"n4518",loc:[-85.630787,41.954769]},n4519:{id:"n4519",loc:[-85.630806,41.957342]},n452:{id:"n452",loc:[-85.634123,41.943596]},n4520:{id:"n4520",loc:[-85.630809,41.957428],tags:{highway:"crossing"}},n4521:{id:"n4521",loc:[-85.630912,41.957506],tags:{highway:"crossing"}},n4522:{id:"n4522",loc:[-85.631033,41.957428],tags:{highway:"crossing"}},n4523:{id:"n4523",loc:[-85.631032,41.957341]},n4524:{id:"n4524",loc:[-85.63091,41.957341],tags:{highway:"crossing"}},n4525:{id:"n4525",loc:[-85.631027,41.95597]},n4526:{id:"n4526",loc:[-85.631027,41.955913],tags:{highway:"crossing"}},n4527:{id:"n4527",loc:[-85.631025,41.955873]},n4528:{id:"n4528",loc:[-85.631073,41.955913],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4529:{id:"n4529",loc:[-85.631007,41.954766]},n453:{id:"n453",loc:[-85.634709,41.943926]},n4530:{id:"n4530",loc:[-85.630881,41.954768],tags:{highway:"crossing"}},n4531:{id:"n4531",loc:[-85.628022,41.954776]},n4532:{id:"n4532",loc:[-85.627385,41.95584]},n4533:{id:"n4533",loc:[-85.627329,41.955937]},n4534:{id:"n4534",loc:[-85.626583,41.957153]},n4535:{id:"n4535",loc:[-85.629675,41.954564],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4536:{id:"n4536",loc:[-85.630881,41.954806],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4537:{id:"n4537",loc:[-85.630879,41.954564],tags:{highway:"stop",stop:"minor",direction:"forward"}},n4538:{id:"n4538",loc:[-85.630784,41.954682],tags:{highway:"crossing"}},n4539:{id:"n4539",loc:[-85.63078,41.954595]},n454:{id:"n454",loc:[-85.63525,41.943855]},n4540:{id:"n4540",loc:[-85.630879,41.954595],tags:{highway:"crossing"}},n4541:{id:"n4541",loc:[-85.631004,41.954594]},n4542:{id:"n4542",loc:[-85.631006,41.954681],tags:{highway:"crossing"}},n4543:{id:"n4543",loc:[-85.631045,41.959036],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4544:{id:"n4544",loc:[-85.632071,41.959029],tags:{highway:"stop",stop:"minor",direction:"forward"}},n4545:{id:"n4545",loc:[-85.632257,41.959027],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4546:{id:"n4546",loc:[-85.631966,41.957427],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4547:{id:"n4547",loc:[-85.632297,41.957426],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4548:{id:"n4548",loc:[-85.631976,41.955911],tags:{highway:"give_way",direction:"forward"}},n4549:{id:"n4549",loc:[-85.632272,41.955911],tags:{highway:"give_way",direction:"backward"}},n455:{id:"n455",loc:[-85.635224,41.943869]},n4550:{id:"n4550",loc:[-85.632097,41.954805],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4551:{id:"n4551",loc:[-85.632094,41.954566],tags:{highway:"stop",stop:"minor",direction:"forward"}},n4552:{id:"n4552",loc:[-85.626519,41.957256]},n4553:{id:"n4553",loc:[-85.625334,41.959165]},n4554:{id:"n4554",loc:[-85.626483,41.95806]},n4555:{id:"n4555",loc:[-85.626481,41.958175]},n4556:{id:"n4556",loc:[-85.626412,41.958174]},n4557:{id:"n4557",loc:[-85.626412,41.958202]},n4558:{id:"n4558",loc:[-85.62628,41.958201]},n4559:{id:"n4559",loc:[-85.626283,41.958057]},n456:{id:"n456",loc:[-85.638854,41.943104]},n4560:{id:"n4560",loc:[-85.622763,41.95109],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4561:{id:"n4561",loc:[-85.622858,41.950876],tags:{emergency:"fire_hydrant"}},n4562:{id:"n4562",loc:[-85.624073,41.950393]},n4563:{id:"n4563",loc:[-85.624077,41.950924]},n4564:{id:"n4564",loc:[-85.624599,41.950984],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4565:{id:"n4565",loc:[-85.624831,41.95119],tags:{emergency:"fire_hydrant"}},n4566:{id:"n4566",loc:[-85.624437,41.952568],tags:{emergency:"fire_hydrant"}},n4567:{id:"n4567",loc:[-85.624077,41.954606],tags:{emergency:"fire_hydrant"}},n4568:{id:"n4568",loc:[-85.624263,41.954888]},n4569:{id:"n4569",loc:[-85.624206,41.954919]},n457:{id:"n457",loc:[-85.635186,41.943901]},n4570:{id:"n4570",loc:[-85.624154,41.954865]},n4571:{id:"n4571",loc:[-85.624212,41.954835]},n4572:{id:"n4572",loc:[-85.622442,41.954401],tags:{emergency:"fire_hydrant"}},n4573:{id:"n4573",loc:[-85.619751,41.954658],tags:{emergency:"fire_hydrant"}},n4574:{id:"n4574",loc:[-85.617785,41.954534]},n4575:{id:"n4575",loc:[-85.617416,41.954721]},n4576:{id:"n4576",loc:[-85.617662,41.95474]},n4577:{id:"n4577",loc:[-85.618014,41.954717]},n4578:{id:"n4578",loc:[-85.617886,41.954671]},n4579:{id:"n4579",loc:[-85.617831,41.954612]},n458:{id:"n458",loc:[-85.635162,41.943917]},n4580:{id:"n4580",loc:[-85.617968,41.954752]},n4581:{id:"n4581",loc:[-85.617815,41.954752]},n4582:{id:"n4582",loc:[-85.617938,41.954695]},n4583:{id:"n4583",loc:[-85.617856,41.954642],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4584:{id:"n4584",loc:[-85.619116,41.954164],tags:{man_made:"flagpole"}},n4585:{id:"n4585",loc:[-85.619569,41.953255],tags:{emergency:"fire_hydrant"}},n4586:{id:"n4586",loc:[-85.620352,41.951894],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4587:{id:"n4587",loc:[-85.620485,41.951948],tags:{emergency:"fire_hydrant"}},n4588:{id:"n4588",loc:[-85.620316,41.950999],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4589:{id:"n4589",loc:[-85.620311,41.950131],tags:{highway:"stop",direction:"backward",stop:"minor"}},n459:{id:"n459",loc:[-85.634856,41.943905]},n4590:{id:"n4590",loc:[-85.620374,41.95018],tags:{emergency:"fire_hydrant"}},n4591:{id:"n4591",loc:[-85.620301,41.949239],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4592:{id:"n4592",loc:[-85.620278,41.947443],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4593:{id:"n4593",loc:[-85.619844,41.947444],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4594:{id:"n4594",loc:[-85.620191,41.947352],tags:{emergency:"fire_hydrant"}},n4595:{id:"n4595",loc:[-85.622819,41.947493],tags:{emergency:"fire_hydrant"}},n4596:{id:"n4596",loc:[-85.622744,41.947541],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4597:{id:"n4597",loc:[-85.622739,41.947316],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4598:{id:"n4598",loc:[-85.622909,41.948333],tags:{highway:"give_way"}},n4599:{id:"n4599",loc:[-85.622593,41.948333],tags:{highway:"give_way"}},n46:{id:"n46",loc:[-85.637131,41.94307]},n460:{id:"n460",loc:[-85.634811,41.944007]},n4600:{id:"n4600",loc:[-85.622835,41.948387],tags:{emergency:"fire_hydrant"}},n4601:{id:"n4601",loc:[-85.622768,41.949125],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4602:{id:"n4602",loc:[-85.622769,41.949325],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4603:{id:"n4603",loc:[-85.622837,41.949329],tags:{emergency:"fire_hydrant"}},n4604:{id:"n4604",loc:[-85.622614,41.950113],tags:{highway:"give_way",direction:"forward"}},n4605:{id:"n4605",loc:[-85.624777,41.949219],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4606:{id:"n4606",loc:[-85.624849,41.949106],tags:{emergency:"fire_hydrant"}},n4607:{id:"n4607",loc:[-85.624858,41.950119],tags:{emergency:"fire_hydrant"}},n4608:{id:"n4608",loc:[-85.624752,41.948334],tags:{highway:"give_way"}},n4609:{id:"n4609",loc:[-85.624845,41.948422],tags:{emergency:"fire_hydrant"}},n461:{id:"n461",loc:[-85.634987,41.943112]},n4610:{id:"n4610",loc:[-85.62484,41.947539],tags:{emergency:"fire_hydrant"}},n4611:{id:"n4611",loc:[-85.62476,41.947428],tags:{highway:"stop",stop:"minor",direction:"forward"}},n4612:{id:"n4612",loc:[-85.620286,41.950926]},n4613:{id:"n4613",loc:[-85.618237,41.950963]},n4614:{id:"n4614",loc:[-85.618107,41.950876]},n4615:{id:"n4615",loc:[-85.618131,41.950393]},n4616:{id:"n4616",loc:[-85.618232,41.949913]},n4617:{id:"n4617",loc:[-85.619138,41.950212]},n4618:{id:"n4618",loc:[-85.619299,41.950388]},n4619:{id:"n4619",loc:[-85.619306,41.950897]},n462:{id:"n462",loc:[-85.634698,41.943194]},n4620:{id:"n4620",loc:[-85.619155,41.950958]},n4621:{id:"n4621",loc:[-85.620079,41.947715]},n4622:{id:"n4622",loc:[-85.619674,41.947728]},n4623:{id:"n4623",loc:[-85.619634,41.947735]},n4624:{id:"n4624",loc:[-85.619587,41.947756],tags:{barrier:"gate"}},n4625:{id:"n4625",loc:[-85.61953,41.947796]},n4626:{id:"n4626",loc:[-85.619475,41.947847]},n4627:{id:"n4627",loc:[-85.619433,41.947903]},n4628:{id:"n4628",loc:[-85.619402,41.947982]},n4629:{id:"n4629",loc:[-85.619394,41.948043]},n463:{id:"n463",loc:[-85.634632,41.943219]},n4630:{id:"n4630",loc:[-85.619395,41.948476]},n4631:{id:"n4631",loc:[-85.618367,41.947452]},n4632:{id:"n4632",loc:[-85.618371,41.947567],tags:{barrier:"gate"}},n4633:{id:"n4633",loc:[-85.618341,41.947622]},n4634:{id:"n4634",loc:[-85.618138,41.94773]},n4635:{id:"n4635",loc:[-85.618078,41.947814]},n4636:{id:"n4636",loc:[-85.618072,41.948009]},n4637:{id:"n4637",loc:[-85.618269,41.947666]},n4638:{id:"n4638",loc:[-85.618099,41.947765]},n4639:{id:"n4639",loc:[-85.618378,41.954453]},n464:{id:"n464",loc:[-85.63459,41.943239]},n4640:{id:"n4640",loc:[-85.618198,41.95453]},n4641:{id:"n4641",loc:[-85.618212,41.954623]},n4642:{id:"n4642",loc:[-85.635211,41.943103],tags:{leisure:"picnic_table"}},n4643:{id:"n4643",loc:[-85.635345,41.943448],tags:{leisure:"picnic_table"}},n4644:{id:"n4644",loc:[-85.635901,41.943353],tags:{amenity:"bench"}},n4645:{id:"n4645",loc:[-85.635818,41.942638],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4646:{id:"n4646",loc:[-85.635355,41.942044],tags:{leisure:"picnic_table"}},n4647:{id:"n4647",loc:[-85.635206,41.942045],tags:{leisure:"picnic_table"}},n4648:{id:"n4648",loc:[-85.63504,41.941992],tags:{leisure:"picnic_table"}},n4649:{id:"n4649",loc:[-85.635185,41.942001]},n465:{id:"n465",loc:[-85.634555,41.943263]},n4650:{id:"n4650",loc:[-85.635176,41.942021]},n4651:{id:"n4651",loc:[-85.635127,41.942008]},n4652:{id:"n4652",loc:[-85.635136,41.941988]},n4653:{id:"n4653",loc:[-85.635,41.941709],tags:{emergency:"fire_hydrant"}},n4654:{id:"n4654",loc:[-85.634893,41.941801]},n4655:{id:"n4655",loc:[-85.634937,41.941843]},n4656:{id:"n4656",loc:[-85.634963,41.941859]},n4657:{id:"n4657",loc:[-85.635027,41.941904]},n4658:{id:"n4658",loc:[-85.63494,41.94187]},n4659:{id:"n4659",loc:[-85.634951,41.941871]},n466:{id:"n466",loc:[-85.634526,41.943289]},n4660:{id:"n4660",loc:[-85.634753,41.941701],tags:{amenity:"drinking_water"}},n4661:{id:"n4661",loc:[-85.634717,41.941804],tags:{amenity:"bench"}},n4662:{id:"n4662",loc:[-85.634554,41.941883],tags:{amenity:"bench"}},n4663:{id:"n4663",loc:[-85.635002,41.941579],tags:{amenity:"fountain"}},n4664:{id:"n4664",loc:[-85.635258,41.94188],tags:{amenity:"waste_basket"}},n4665:{id:"n4665",loc:[-85.635262,41.941581],tags:{amenity:"bench"}},n4666:{id:"n4666",loc:[-85.635319,41.941744],tags:{amenity:"bench"}},n4667:{id:"n4667",loc:[-85.634702,41.941473],tags:{amenity:"waste_basket"}},n4668:{id:"n4668",loc:[-85.633981,41.941966],tags:{amenity:"bench"}},n4669:{id:"n4669",loc:[-85.63388,41.941743]},n467:{id:"n467",loc:[-85.635163,41.944985]},n4670:{id:"n4670",loc:[-85.633746,41.941741]},n4671:{id:"n4671",loc:[-85.633749,41.941664]},n4672:{id:"n4672",loc:[-85.633883,41.941667]},n4673:{id:"n4673",loc:[-85.634283,41.941183],tags:{leisure:"picnic_table"}},n4674:{id:"n4674",loc:[-85.634046,41.941102],tags:{amenity:"bbq"}},n4675:{id:"n4675",loc:[-85.63401,41.941093],tags:{amenity:"bbq"}},n4676:{id:"n4676",loc:[-85.633408,41.940862],tags:{amenity:"bench"}},n4677:{id:"n4677",loc:[-85.633359,41.940651],tags:{amenity:"bench"}},n4678:{id:"n4678",loc:[-85.634109,41.940831]},n4679:{id:"n4679",loc:[-85.63396,41.940867]},n468:{id:"n468",loc:[-85.635095,41.945035]},n4680:{id:"n4680",loc:[-85.633816,41.940913]},n4681:{id:"n4681",loc:[-85.633237,41.940455]},n4682:{id:"n4682",loc:[-85.634453,41.940025],tags:{emergency:"fire_hydrant"}},n4683:{id:"n4683",loc:[-85.635692,41.940218],tags:{emergency:"fire_hydrant"}},n4684:{id:"n4684",loc:[-85.635566,41.940102],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4685:{id:"n4685",loc:[-85.635961,41.940125],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4686:{id:"n4686",loc:[-85.635883,41.94012],tags:{crossing:"marked",highway:"crossing"}},n4687:{id:"n4687",loc:[-85.635883,41.94006]},n4688:{id:"n4688",loc:[-85.635774,41.940051],tags:{crossing:"marked",highway:"crossing"}},n4689:{id:"n4689",loc:[-85.635669,41.940043]},n469:{id:"n469",loc:[-85.634269,41.944431]},n4690:{id:"n4690",loc:[-85.635661,41.940107],tags:{crossing:"marked",highway:"crossing"}},n4691:{id:"n4691",loc:[-85.635424,41.941005],tags:{amenity:"fountain"}},n4692:{id:"n4692",loc:[-85.635542,41.941371],tags:{amenity:"bench"}},n4693:{id:"n4693",loc:[-85.635709,41.941341],tags:{emergency:"fire_hydrant"}},n4694:{id:"n4694",loc:[-85.637038,41.942513],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4695:{id:"n4695",loc:[-85.637174,41.941354],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4696:{id:"n4696",loc:[-85.637091,41.941273],tags:{emergency:"fire_hydrant"}},n4697:{id:"n4697",loc:[-85.638058,41.941346],tags:{highway:"give_way",direction:"forward"}},n4698:{id:"n4698",loc:[-85.638359,41.941344],tags:{highway:"give_way",direction:"backward"}},n4699:{id:"n4699",loc:[-85.638288,41.941236],tags:{emergency:"fire_hydrant"}},n47:{id:"n47",loc:[-85.636693,41.943073]},n470:{id:"n470",loc:[-85.634352,41.944376]},n4700:{id:"n4700",loc:[-85.63935,41.94128],tags:{emergency:"fire_hydrant"}},n4701:{id:"n4701",loc:[-85.639277,41.941337],tags:{highway:"give_way",direction:"forward"}},n4702:{id:"n4702",loc:[-85.639548,41.941334],tags:{highway:"give_way",direction:"backward"}},n4703:{id:"n4703",loc:[-85.642191,41.940039]},n4704:{id:"n4704",loc:[-85.640585,41.941263],tags:{emergency:"fire_hydrant"}},n4705:{id:"n4705",loc:[-85.64049,41.941327],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4706:{id:"n4706",loc:[-85.640803,41.941324],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4707:{id:"n4707",loc:[-85.641717,41.941317],tags:{highway:"stop",direction:"forward",stop:"all"}},n4708:{id:"n4708",loc:[-85.641846,41.941415],tags:{highway:"stop",direction:"backward",stop:"all"}},n4709:{id:"n4709",loc:[-85.641756,41.941392],tags:{emergency:"fire_hydrant"}},n471:{id:"n471",loc:[-85.634747,41.944561],tags:{railway:"crossing"}},n4710:{id:"n4710",loc:[-85.642014,41.941313],tags:{highway:"stop",direction:"forward",stop:"all"}},n4711:{id:"n4711",loc:[-85.641854,41.942455],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4712:{id:"n4712",loc:[-85.641859,41.942739],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4713:{id:"n4713",loc:[-85.640754,41.942707],tags:{emergency:"fire_hydrant"}},n4714:{id:"n4714",loc:[-85.640669,41.942716],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4715:{id:"n4715",loc:[-85.640664,41.942478],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4716:{id:"n4716",loc:[-85.63964,41.94274],tags:{man_made:"flagpole"}},n4717:{id:"n4717",loc:[-85.639455,41.942731],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4718:{id:"n4718",loc:[-85.63945,41.942492],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4719:{id:"n4719",loc:[-85.639527,41.942505],tags:{emergency:"fire_hydrant"}},n472:{id:"n472",loc:[-85.634667,41.944613]},n4720:{id:"n4720",loc:[-85.638238,41.942745],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4721:{id:"n4721",loc:[-85.638233,41.942511],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4722:{id:"n4722",loc:[-85.638018,41.94299],tags:{amenity:"waste_disposal"}},n4723:{id:"n4723",loc:[-85.637918,41.944152],tags:{amenity:"waste_basket"}},n4724:{id:"n4724",loc:[-85.635902,41.943291],tags:{leisure:"picnic_table"}},n4725:{id:"n4725",loc:[-85.63704,41.942741],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4726:{id:"n4726",loc:[-85.633467,41.943818],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4727:{id:"n4727",loc:[-85.633987,41.943531],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4728:{id:"n4728",loc:[-85.632154,41.943539],tags:{emergency:"fire_hydrant"}},n4729:{id:"n4729",loc:[-85.633567,41.944641],tags:{amenity:"bench"}},n473:{id:"n473",loc:[-85.634161,41.944371]},n4730:{id:"n4730",loc:[-85.633127,41.944574],tags:{amenity:"bench"}},n4731:{id:"n4731",loc:[-85.633439,41.944871],tags:{amenity:"bench"}},n4732:{id:"n4732",loc:[-85.633676,41.944799],tags:{amenity:"waste_basket"}},n4733:{id:"n4733",loc:[-85.633466,41.944862],tags:{amenity:"waste_basket"}},n4734:{id:"n4734",loc:[-85.633451,41.944847],tags:{emergency:"fire_hydrant"}},n4735:{id:"n4735",loc:[-85.634202,41.945543],tags:{amenity:"waste_basket"}},n4736:{id:"n4736",loc:[-85.634652,41.945472],tags:{leisure:"picnic_table"}},n4737:{id:"n4737",loc:[-85.6347,41.945445],tags:{leisure:"picnic_table"}},n4738:{id:"n4738",loc:[-85.634646,41.945662],tags:{emergency:"fire_hydrant"}},n4739:{id:"n4739",loc:[-85.634673,41.945687],tags:{amenity:"waste_basket"}},n474:{id:"n474",loc:[-85.633861,41.944117]},n4740:{id:"n4740",loc:[-85.63449,41.945827],tags:{amenity:"clock",display:"analog"}},n4741:{id:"n4741",loc:[-85.63481,41.946056],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4742:{id:"n4742",loc:[-85.634814,41.946176],tags:{amenity:"post_box"}},n4743:{id:"n4743",loc:[-85.638744,41.945328]},n4744:{id:"n4744",loc:[-85.63867,41.945228],tags:{amenity:"bench"}},n4745:{id:"n4745",loc:[-85.639487,41.945042],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4746:{id:"n4746",loc:[-85.639635,41.94387],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4747:{id:"n4747",loc:[-85.639549,41.943756],tags:{emergency:"fire_hydrant"}},n4748:{id:"n4748",loc:[-85.64055,41.943862],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4749:{id:"n4749",loc:[-85.640864,41.943859],tags:{highway:"stop",stop:"minor",direction:"backward"}},n475:{id:"n475",loc:[-85.633906,41.943535]},n4750:{id:"n4750",loc:[-85.640718,41.945022],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4751:{id:"n4751",loc:[-85.640664,41.945076],tags:{emergency:"fire_hydrant"}},n4752:{id:"n4752",loc:[-85.641913,41.94502],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4753:{id:"n4753",loc:[-85.641838,41.945076],tags:{emergency:"fire_hydrant"}},n4754:{id:"n4754",loc:[-85.642045,41.94385],tags:{highway:"give_way",direction:"backward"}},n4755:{id:"n4755",loc:[-85.641738,41.943852],tags:{highway:"give_way",direction:"forward"}},n4756:{id:"n4756",loc:[-85.642928,41.943843],tags:{highway:"stop",stop:"minor",direction:"forward"}},n4757:{id:"n4757",loc:[-85.64305,41.943902],tags:{emergency:"fire_hydrant"}},n4758:{id:"n4758",loc:[-85.642986,41.945105],tags:{highway:"stop",direction:"backward",stop:"all"}},n4759:{id:"n4759",loc:[-85.643136,41.94502],tags:{highway:"stop",stop:"all",direction:"forward"}},n476:{id:"n476",loc:[-85.63423,41.943692]},n4760:{id:"n4760",loc:[-85.63169,41.947812]},n4761:{id:"n4761",loc:[-85.631307,41.947655]},n4762:{id:"n4762",loc:[-85.631407,41.947413]},n4763:{id:"n4763",loc:[-85.631173,41.947306]},n4764:{id:"n4764",loc:[-85.631316,41.947145]},n4765:{id:"n4765",loc:[-85.631476,41.947087]},n4766:{id:"n4766",loc:[-85.631793,41.946871]},n4767:{id:"n4767",loc:[-85.631884,41.946723]},n4768:{id:"n4768",loc:[-85.631814,41.946397]},n4769:{id:"n4769",loc:[-85.631382,41.947685]},n477:{id:"n477",loc:[-85.635096,41.942814]},n4770:{id:"n4770",loc:[-85.63109,41.947819]},n4771:{id:"n4771",loc:[-85.630921,41.947961]},n4772:{id:"n4772",loc:[-85.630249,41.947709]},n4773:{id:"n4773",loc:[-85.630149,41.947451]},n4774:{id:"n4774",loc:[-85.629733,41.947339]},n4775:{id:"n4775",loc:[-85.629755,41.946948]},n4776:{id:"n4776",loc:[-85.630457,41.947103]},n4777:{id:"n4777",loc:[-85.630934,41.946939]},n4778:{id:"n4778",loc:[-85.631277,41.946852]},n4779:{id:"n4779",loc:[-85.63142,41.946781]},n478:{id:"n478",loc:[-85.635058,41.942795]},n4780:{id:"n4780",loc:[-85.631116,41.946474]},n4781:{id:"n4781",loc:[-85.63073,41.945965]},n4782:{id:"n4782",loc:[-85.631337,41.94571]},n4783:{id:"n4783",loc:[-85.631589,41.945487]},n4784:{id:"n4784",loc:[-85.632278,41.945784]},n4785:{id:"n4785",loc:[-85.632105,41.946034]},n4786:{id:"n4786",loc:[-85.632532,41.946198]},n4787:{id:"n4787",loc:[-85.632566,41.946151]},n4788:{id:"n4788",loc:[-85.632684,41.946196]},n4789:{id:"n4789",loc:[-85.628676,41.947106]},n479:{id:"n479",loc:[-85.635002,41.94279]},n4790:{id:"n4790",loc:[-85.628973,41.946476]},n4791:{id:"n4791",loc:[-85.629094,41.946079]},n4792:{id:"n4792",loc:[-85.629226,41.94578]},n4793:{id:"n4793",loc:[-85.629479,41.945682]},n4794:{id:"n4794",loc:[-85.630606,41.94569]},n4795:{id:"n4795",loc:[-85.631255,41.945588]},n4796:{id:"n4796",loc:[-85.631546,41.945281]},n4797:{id:"n4797",loc:[-85.631629,41.944823]},n4798:{id:"n4798",loc:[-85.631766,41.944958]},n4799:{id:"n4799",loc:[-85.631689,41.945318]},n48:{id:"n48",loc:[-85.636689,41.94276]},n480:{id:"n480",loc:[-85.634908,41.94279]},n4800:{id:"n4800",loc:[-85.615069,41.945527]},n4801:{id:"n4801",loc:[-85.615058,41.946677]},n4802:{id:"n4802",loc:[-85.613692,41.946689]},n4803:{id:"n4803",loc:[-85.613475,41.946531]},n4804:{id:"n4804",loc:[-85.611717,41.946252]},n4805:{id:"n4805",loc:[-85.611353,41.946385]},n4806:{id:"n4806",loc:[-85.611304,41.947397]},n4807:{id:"n4807",loc:[-85.610564,41.947401]},n4808:{id:"n4808",loc:[-85.610553,41.947122]},n4809:{id:"n4809",loc:[-85.610194,41.946992]},n481:{id:"n481",loc:[-85.634478,41.942342]},n4810:{id:"n4810",loc:[-85.609976,41.946628]},n4811:{id:"n4811",loc:[-85.609769,41.946523]},n4812:{id:"n4812",loc:[-85.609307,41.946523]},n4813:{id:"n4813",loc:[-85.609035,41.946462]},n4814:{id:"n4814",loc:[-85.609018,41.943277]},n4815:{id:"n4815",loc:[-85.609617,41.943423]},n4816:{id:"n4816",loc:[-85.610471,41.943447]},n4817:{id:"n4817",loc:[-85.621491,41.949168]},n4818:{id:"n4818",loc:[-85.620266,41.94917]},n4819:{id:"n4819",loc:[-85.620262,41.947557]},n482:{id:"n482",loc:[-85.634521,41.942254]},n4820:{id:"n4820",loc:[-85.620825,41.947556]},n4821:{id:"n4821",loc:[-85.620827,41.948371]},n4822:{id:"n4822",loc:[-85.621489,41.94837]},n4823:{id:"n4823",loc:[-85.622865,41.950928]},n4824:{id:"n4824",loc:[-85.622858,41.949744]},n4825:{id:"n4825",loc:[-85.623696,41.949714]},n4826:{id:"n4826",loc:[-85.623696,41.949647]},n4827:{id:"n4827",loc:[-85.624019,41.949647]},n4828:{id:"n4828",loc:[-85.624024,41.950093]},n4829:{id:"n4829",loc:[-85.622885,41.949711]},n483:{id:"n483",loc:[-85.63425,41.941819]},n4830:{id:"n4830",loc:[-85.624584,41.951049]},n4831:{id:"n4831",loc:[-85.624669,41.9511]},n4832:{id:"n4832",loc:[-85.624316,41.952218]},n4833:{id:"n4833",loc:[-85.623819,41.952094]},n4834:{id:"n4834",loc:[-85.623385,41.952101]},n4835:{id:"n4835",loc:[-85.623456,41.951238]},n4836:{id:"n4836",loc:[-85.623535,41.951051]},n4837:{id:"n4837",loc:[-85.624693,41.950921]},n4838:{id:"n4838",loc:[-85.624727,41.950897]},n4839:{id:"n4839",loc:[-85.624869,41.950341]},n484:{id:"n484",loc:[-85.634324,41.942131]},n4840:{id:"n4840",loc:[-85.624859,41.949284]},n4841:{id:"n4841",loc:[-85.624788,41.949262]},n4842:{id:"n4842",loc:[-85.62402,41.949265]},n4843:{id:"n4843",loc:[-85.610382,41.954663]},n4844:{id:"n4844",loc:[-85.605675,41.954667]},n4845:{id:"n4845",loc:[-85.605669,41.949407]},n4846:{id:"n4846",loc:[-85.610376,41.949404]},n4847:{id:"n4847",loc:[-85.605552,41.958536]},n4848:{id:"n4848",loc:[-85.595755,41.958588]},n4849:{id:"n4849",loc:[-85.595732,41.956419]},n485:{id:"n485",loc:[-85.634211,41.941374]},n4850:{id:"n4850",loc:[-85.596908,41.955605]},n4851:{id:"n4851",loc:[-85.597723,41.955596]},n4852:{id:"n4852",loc:[-85.597715,41.954967]},n4853:{id:"n4853",loc:[-85.5874,41.955018]},n4854:{id:"n4854",loc:[-85.586615,41.955124]},n4855:{id:"n4855",loc:[-85.58613,41.955293]},n4856:{id:"n4856",loc:[-85.586166,41.962122]},n4857:{id:"n4857",loc:[-85.587008,41.955052]},n4858:{id:"n4858",loc:[-85.591685,41.95499]},n4859:{id:"n4859",loc:[-85.591718,41.956649]},n486:{id:"n486",loc:[-85.634085,41.940704]},n4860:{id:"n4860",loc:[-85.591133,41.956649]},n4861:{id:"n4861",loc:[-85.591061,41.95582]},n4862:{id:"n4862",loc:[-85.590677,41.95613]},n4863:{id:"n4863",loc:[-85.590826,41.956369]},n4864:{id:"n4864",loc:[-85.591016,41.954991]},n4865:{id:"n4865",loc:[-85.587656,41.954855]},n4866:{id:"n4866",loc:[-85.5964,41.955274]},n4867:{id:"n4867",loc:[-85.58776,41.96178]},n4868:{id:"n4868",loc:[-85.601172,41.960448]},n4869:{id:"n4869",loc:[-85.589489,41.960478]},n487:{id:"n487",loc:[-85.635567,41.940944]},n4870:{id:"n4870",loc:[-85.586664,41.960493]},n4871:{id:"n4871",loc:[-85.591227,41.95676]},n4872:{id:"n4872",loc:[-85.589424,41.958093]},n4873:{id:"n4873",loc:[-85.588779,41.957611]},n4874:{id:"n4874",loc:[-85.590583,41.956278]},n4875:{id:"n4875",loc:[-85.590759,41.957106]},n4876:{id:"n4876",loc:[-85.592213,41.958218]},n4877:{id:"n4877",loc:[-85.592262,41.958279]},n4878:{id:"n4878",loc:[-85.592304,41.958358]},n4879:{id:"n4879",loc:[-85.592351,41.95849]},n488:{id:"n488",loc:[-85.635542,41.940919]},n4880:{id:"n4880",loc:[-85.592363,41.958605]},n4881:{id:"n4881",loc:[-85.592383,41.96047]},n4882:{id:"n4882",loc:[-85.592376,41.959808]},n4883:{id:"n4883",loc:[-85.600825,41.959779]},n4884:{id:"n4884",loc:[-85.601084,41.959844]},n4885:{id:"n4885",loc:[-85.601144,41.959908]},n4886:{id:"n4886",loc:[-85.601164,41.960008]},n4887:{id:"n4887",loc:[-85.601162,41.960125]},n4888:{id:"n4888",loc:[-85.601134,41.960221]},n4889:{id:"n4889",loc:[-85.600993,41.960353]},n489:{id:"n489",loc:[-85.635514,41.940906]},n4890:{id:"n4890",loc:[-85.600794,41.960449]},n4891:{id:"n4891",loc:[-85.60098,41.959792]},n4892:{id:"n4892",loc:[-85.601067,41.960294]},n4893:{id:"n4893",loc:[-85.596829,41.959793]},n4894:{id:"n4894",loc:[-85.596839,41.960459]},n4895:{id:"n4895",loc:[-85.589364,41.958048]},n4896:{id:"n4896",loc:[-85.587374,41.959511]},n4897:{id:"n4897",loc:[-85.587286,41.959564]},n4898:{id:"n4898",loc:[-85.587163,41.959632]},n4899:{id:"n4899",loc:[-85.586694,41.959865]},n49:{id:"n49",loc:[-85.637127,41.942757]},n490:{id:"n490",loc:[-85.635469,41.940896]},n4900:{id:"n4900",loc:[-85.586634,41.959921]},n4901:{id:"n4901",loc:[-85.586607,41.960001]},n4902:{id:"n4902",loc:[-85.586599,41.960099]},n4903:{id:"n4903",loc:[-85.586602,41.96034]},n4904:{id:"n4904",loc:[-85.586669,41.960439]},n4905:{id:"n4905",loc:[-85.586758,41.960493]},n4906:{id:"n4906",loc:[-85.586618,41.960391]},n4907:{id:"n4907",loc:[-85.591201,41.956352]},n4908:{id:"n4908",loc:[-85.59112,41.954843]},n4909:{id:"n4909",loc:[-85.591536,41.956349]},n491:{id:"n491",loc:[-85.635667,41.940826]},n4910:{id:"n4910",loc:[-85.590953,41.956354]},n4911:{id:"n4911",loc:[-85.591468,41.956406]},n4912:{id:"n4912",loc:[-85.591469,41.956478]},n4913:{id:"n4913",loc:[-85.591123,41.956481]},n4914:{id:"n4914",loc:[-85.591121,41.956409]},n4915:{id:"n4915",loc:[-85.590826,41.955954]},n4916:{id:"n4916",loc:[-85.590612,41.956115]},n4917:{id:"n4917",loc:[-85.590402,41.955962]},n4918:{id:"n4918",loc:[-85.590622,41.955804]},n4919:{id:"n4919",loc:[-85.59011,41.956502]},n492:{id:"n492",loc:[-85.636197,41.940599]},n4920:{id:"n4920",loc:[-85.589877,41.956668]},n4921:{id:"n4921",loc:[-85.589777,41.95659]},n4922:{id:"n4922",loc:[-85.59001,41.956424]},n4923:{id:"n4923",loc:[-85.589595,41.956427]},n4924:{id:"n4924",loc:[-85.589434,41.956549]},n4925:{id:"n4925",loc:[-85.589262,41.956424]},n4926:{id:"n4926",loc:[-85.589422,41.956302]},n4927:{id:"n4927",loc:[-85.589358,41.956286]},n4928:{id:"n4928",loc:[-85.5892,41.956408]},n4929:{id:"n4929",loc:[-85.589032,41.956288]},n493:{id:"n493",loc:[-85.6362,41.940686]},n4930:{id:"n4930",loc:[-85.58919,41.956166]},n4931:{id:"n4931",loc:[-85.589165,41.956132]},n4932:{id:"n4932",loc:[-85.589002,41.956253]},n4933:{id:"n4933",loc:[-85.588826,41.956122]},n4934:{id:"n4934",loc:[-85.588989,41.956001]},n4935:{id:"n4935",loc:[-85.588673,41.955757]},n4936:{id:"n4936",loc:[-85.588502,41.955882]},n4937:{id:"n4937",loc:[-85.588339,41.955759]},n4938:{id:"n4938",loc:[-85.58851,41.955633]},n4939:{id:"n4939",loc:[-85.590382,41.955892]},n494:{id:"n494",loc:[-85.635969,41.94069]},n4940:{id:"n4940",loc:[-85.589923,41.956231]},n4941:{id:"n4941",loc:[-85.58984,41.956168]},n4942:{id:"n4942",loc:[-85.5903,41.95583]},n4943:{id:"n4943",loc:[-85.589636,41.956038]},n4944:{id:"n4944",loc:[-85.589546,41.956105]},n4945:{id:"n4945",loc:[-85.589045,41.955729]},n4946:{id:"n4946",loc:[-85.589135,41.955662]},n4947:{id:"n4947",loc:[-85.590718,41.955293]},n4948:{id:"n4948",loc:[-85.590718,41.955374]},n4949:{id:"n4949",loc:[-85.589211,41.955369]},n495:{id:"n495",loc:[-85.635965,41.940561]},n4950:{id:"n4950",loc:[-85.589212,41.955287]},n4951:{id:"n4951",loc:[-85.589675,41.956817]},n4952:{id:"n4952",loc:[-85.58947,41.95697]},n4953:{id:"n4953",loc:[-85.589219,41.956784]},n4954:{id:"n4954",loc:[-85.589425,41.95663]},n4955:{id:"n4955",loc:[-85.589373,41.95702]},n4956:{id:"n4956",loc:[-85.589171,41.957172]},n4957:{id:"n4957",loc:[-85.588962,41.957019]},n4958:{id:"n4958",loc:[-85.589164,41.956867]},n4959:{id:"n4959",loc:[-85.588881,41.955006]},n496:{id:"n496",loc:[-85.636031,41.94056]},n4960:{id:"n4960",loc:[-85.588804,41.955006]},n4961:{id:"n4961",loc:[-85.604773,41.954521]},n4962:{id:"n4962",loc:[-85.601603,41.954527]},n4963:{id:"n4963",loc:[-85.600823,41.954169]},n4964:{id:"n4964",loc:[-85.600828,41.950191]},n4965:{id:"n4965",loc:[-85.601673,41.949457]},n4966:{id:"n4966",loc:[-85.604464,41.949488]},n4967:{id:"n4967",loc:[-85.60538,41.950212]},n4968:{id:"n4968",loc:[-85.605395,41.954108]},n4969:{id:"n4969",loc:[-85.604771,41.954109]},n497:{id:"n497",loc:[-85.636032,41.940602]},n4970:{id:"n4970",loc:[-85.600613,41.953916]},n4971:{id:"n4971",loc:[-85.599758,41.954649]},n4972:{id:"n4972",loc:[-85.591194,41.954663]},n4973:{id:"n4973",loc:[-85.591182,41.950465]},n4974:{id:"n4974",loc:[-85.591871,41.950464]},n4975:{id:"n4975",loc:[-85.591868,41.949209]},n4976:{id:"n4976",loc:[-85.592155,41.949209]},n4977:{id:"n4977",loc:[-85.592155,41.94848]},n4978:{id:"n4978",loc:[-85.600615,41.948482]},n4979:{id:"n4979",loc:[-85.605421,41.949378]},n498:{id:"n498",loc:[-85.635783,41.940583]},n4980:{id:"n4980",loc:[-85.600614,41.949373]},n4981:{id:"n4981",loc:[-85.601316,41.94849]},n4982:{id:"n4982",loc:[-85.601592,41.947641]},n4983:{id:"n4983",loc:[-85.60395,41.947618]},n4984:{id:"n4984",loc:[-85.603973,41.948114]},n4985:{id:"n4985",loc:[-85.605398,41.948103]},n4986:{id:"n4986",loc:[-85.614017,41.965566]},n4987:{id:"n4987",loc:[-85.605787,41.965619]},n4988:{id:"n4988",loc:[-85.60577,41.963821]},n4989:{id:"n4989",loc:[-85.612886,41.963808]},n499:{id:"n499",loc:[-85.63589,41.940578]},n4990:{id:"n4990",loc:[-85.613207,41.963705]},n4991:{id:"n4991",loc:[-85.613511,41.963525]},n4992:{id:"n4992",loc:[-85.613667,41.963305]},n4993:{id:"n4993",loc:[-85.613779,41.962983]},n4994:{id:"n4994",loc:[-85.613797,41.959709]},n4995:{id:"n4995",loc:[-85.613663,41.95936]},n4996:{id:"n4996",loc:[-85.61339,41.959064]},n4997:{id:"n4997",loc:[-85.610503,41.956898]},n4998:{id:"n4998",loc:[-85.610485,41.956595]},n4999:{id:"n4999",loc:[-85.613892,41.956621]},n5:{id:"n5",loc:[-85.622744,41.95268]},n50:{id:"n50",loc:[-85.636673,41.943143]},n500:{id:"n500",loc:[-85.636198,41.940578]},n5000:{id:"n5000",loc:[-85.613866,41.958574]},n5001:{id:"n5001",loc:[-85.615262,41.958561]},n5002:{id:"n5002",loc:[-85.615279,41.959541]},n5003:{id:"n5003",loc:[-85.615314,41.95597]},n5004:{id:"n5004",loc:[-85.613887,41.955988]},n5005:{id:"n5005",loc:[-85.613074,41.962244]},n5006:{id:"n5006",loc:[-85.611678,41.963354]},n5007:{id:"n5007",loc:[-85.611678,41.963487]},n5008:{id:"n5008",loc:[-85.606906,41.963502]},n5009:{id:"n5009",loc:[-85.605777,41.962657]},n501:{id:"n501",loc:[-85.636251,41.940584]},n5010:{id:"n5010",loc:[-85.605711,41.9599]},n5011:{id:"n5011",loc:[-85.608139,41.9585]},n5012:{id:"n5012",loc:[-85.60814,41.956306]},n5013:{id:"n5013",loc:[-85.608854,41.95581]},n5014:{id:"n5014",loc:[-85.610039,41.955883]},n5015:{id:"n5015",loc:[-85.610068,41.956754]},n5016:{id:"n5016",loc:[-85.613058,41.959411]},n5017:{id:"n5017",loc:[-85.610234,41.957068]},n5018:{id:"n5018",loc:[-85.609826,41.95581]},n5019:{id:"n5019",loc:[-85.606987,41.958505]},n502:{id:"n502",loc:[-85.636279,41.940605]},n5020:{id:"n5020",loc:[-85.606498,41.958846]},n5021:{id:"n5021",loc:[-85.606013,41.959342]},n5022:{id:"n5022",loc:[-85.614553,41.961581]},n5023:{id:"n5023",loc:[-85.61465,41.96214]},n5024:{id:"n5024",loc:[-85.615277,41.962442]},n5025:{id:"n5025",loc:[-85.615451,41.962972]},n5026:{id:"n5026",loc:[-85.614355,41.964826]},n5027:{id:"n5027",loc:[-85.615133,41.964589]},n5028:{id:"n5028",loc:[-85.615342,41.963818]},n5029:{id:"n5029",loc:[-85.615971,41.963792]},n503:{id:"n503",loc:[-85.636285,41.940633]},n5030:{id:"n5030",loc:[-85.615751,41.963122]},n5031:{id:"n5031",loc:[-85.616575,41.963123]},n5032:{id:"n5032",loc:[-85.612527,41.963846]},n5033:{id:"n5033",loc:[-85.630653,41.940709]},n5034:{id:"n5034",loc:[-85.629858,41.939568]},n5035:{id:"n5035",loc:[-85.629847,41.937926]},n504:{id:"n504",loc:[-85.636281,41.940662]},n505:{id:"n505",loc:[-85.636266,41.940688]},n506:{id:"n506",loc:[-85.636236,41.940701]},n507:{id:"n507",loc:[-85.63619,41.940706]},n508:{id:"n508",loc:[-85.635892,41.940707]},n509:{id:"n509",loc:[-85.635785,41.9407]},n51:{id:"n51",loc:[-85.636673,41.942864]},n510:{id:"n510",loc:[-85.636044,41.940578]},n511:{id:"n511",loc:[-85.635946,41.940578]},n512:{id:"n512",loc:[-85.636475,41.940732]},n513:{id:"n513",loc:[-85.636475,41.940777]},n514:{id:"n514",loc:[-85.636405,41.940777]},n515:{id:"n515",loc:[-85.636405,41.940732]},n516:{id:"n516",loc:[-85.636471,41.940916]},n517:{id:"n517",loc:[-85.636471,41.940961]},n518:{id:"n518",loc:[-85.636404,41.940961]},n519:{id:"n519",loc:[-85.636404,41.940916]},n52:{id:"n52",loc:[-85.636227,41.942864]},n520:{id:"n520",loc:[-85.636286,41.941127]},n521:{id:"n521",loc:[-85.636203,41.941126]},n522:{id:"n522",loc:[-85.636204,41.941083]},n523:{id:"n523",loc:[-85.636287,41.941083]},n524:{id:"n524",loc:[-85.636124,41.941064]},n525:{id:"n525",loc:[-85.636,41.941065]},n526:{id:"n526",loc:[-85.636,41.940964]},n527:{id:"n527",loc:[-85.636045,41.940964]},n528:{id:"n528",loc:[-85.636045,41.940928]},n529:{id:"n529",loc:[-85.636111,41.940928]},n53:{id:"n53",loc:[-85.636227,41.943143]},n530:{id:"n530",loc:[-85.636111,41.940961]},n531:{id:"n531",loc:[-85.636123,41.940961]},n532:{id:"n532",loc:[-85.636124,41.940997]},n533:{id:"n533",loc:[-85.636164,41.940997]},n534:{id:"n534",loc:[-85.636164,41.941044]},n535:{id:"n535",loc:[-85.636124,41.941044]},n536:{id:"n536",loc:[-85.636534,41.941256]},n537:{id:"n537",loc:[-85.63645,41.941246]},n538:{id:"n538",loc:[-85.636462,41.941189]},n539:{id:"n539",loc:[-85.636546,41.941199]},n54:{id:"n54",loc:[-85.636198,41.943119]},n540:{id:"n540",loc:[-85.636802,41.941226]},n541:{id:"n541",loc:[-85.636701,41.941215]},n542:{id:"n542",loc:[-85.636709,41.941174]},n543:{id:"n543",loc:[-85.636656,41.941168]},n544:{id:"n544",loc:[-85.636666,41.941122]},n545:{id:"n545",loc:[-85.636781,41.941136]},n546:{id:"n546",loc:[-85.636774,41.94117]},n547:{id:"n547",loc:[-85.636812,41.941175]},n548:{id:"n548",loc:[-85.636803,41.941047]},n549:{id:"n549",loc:[-85.636785,41.941047]},n55:{id:"n55",loc:[-85.635945,41.94312]},n550:{id:"n550",loc:[-85.636785,41.941058]},n551:{id:"n551",loc:[-85.636644,41.941059]},n552:{id:"n552",loc:[-85.636644,41.941038]},n553:{id:"n553",loc:[-85.636581,41.941039]},n554:{id:"n554",loc:[-85.636581,41.940995]},n555:{id:"n555",loc:[-85.636746,41.940995]},n556:{id:"n556",loc:[-85.636746,41.940978]},n557:{id:"n557",loc:[-85.636803,41.940978]},n558:{id:"n558",loc:[-85.636781,41.940768]},n559:{id:"n559",loc:[-85.636783,41.940828]},n56:{id:"n56",loc:[-85.635943,41.942909]},n560:{id:"n560",loc:[-85.636761,41.940828]},n561:{id:"n561",loc:[-85.636762,41.940857]},n562:{id:"n562",loc:[-85.636641,41.940859]},n563:{id:"n563",loc:[-85.63664,41.940805]},n564:{id:"n564",loc:[-85.636676,41.940804]},n565:{id:"n565",loc:[-85.636675,41.940769]},n566:{id:"n566",loc:[-85.636733,41.94033]},n567:{id:"n567",loc:[-85.636471,41.940334]},n568:{id:"n568",loc:[-85.636469,41.940262]},n569:{id:"n569",loc:[-85.636731,41.940257]},n57:{id:"n57",loc:[-85.636227,41.942909]},n570:{id:"n570",loc:[-85.636798,41.940419]},n571:{id:"n571",loc:[-85.6368,41.940524]},n572:{id:"n572",loc:[-85.63664,41.940526]},n573:{id:"n573",loc:[-85.636638,41.940421]},n574:{id:"n574",loc:[-85.636372,41.940551]},n575:{id:"n575",loc:[-85.636338,41.94055]},n576:{id:"n576",loc:[-85.636339,41.940524]},n577:{id:"n577",loc:[-85.636373,41.940525]},n578:{id:"n578",loc:[-85.636388,41.940435]},n579:{id:"n579",loc:[-85.636222,41.940436]},n58:{id:"n58",loc:[-85.63627,41.943175]},n580:{id:"n580",loc:[-85.636222,41.940366]},n581:{id:"n581",loc:[-85.636387,41.940365]},n582:{id:"n582",loc:[-85.636158,41.940482]},n583:{id:"n583",loc:[-85.635963,41.940484]},n584:{id:"n584",loc:[-85.635961,41.940399]},n585:{id:"n585",loc:[-85.636156,41.940397]},n586:{id:"n586",loc:[-85.635987,41.940314]},n587:{id:"n587",loc:[-85.635987,41.940268]},n588:{id:"n588",loc:[-85.635968,41.940268]},n589:{id:"n589",loc:[-85.635967,41.940212]},n59:{id:"n59",loc:[-85.635531,41.943176]},n590:{id:"n590",loc:[-85.636082,41.940211]},n591:{id:"n591",loc:[-85.636083,41.94027]},n592:{id:"n592",loc:[-85.636064,41.94027]},n593:{id:"n593",loc:[-85.636064,41.940313]},n594:{id:"n594",loc:[-85.638071,41.941562]},n595:{id:"n595",loc:[-85.637953,41.941562]},n596:{id:"n596",loc:[-85.637952,41.941522]},n597:{id:"n597",loc:[-85.637876,41.941523]},n598:{id:"n598",loc:[-85.637876,41.941471]},n599:{id:"n599",loc:[-85.638035,41.94147]},n6:{id:"n6",loc:[-85.624925,41.950604]},n60:{id:"n60",loc:[-85.63542,41.942883]},n600:{id:"n600",loc:[-85.638035,41.941513]},n601:{id:"n601",loc:[-85.638071,41.941512]},n602:{id:"n602",loc:[-85.637038,41.942543],tags:{crossing:"marked",highway:"crossing"}},n603:{id:"n603",loc:[-85.637134,41.942542]},n604:{id:"n604",loc:[-85.638122,41.942532]},n605:{id:"n605",loc:[-85.638121,41.942478]},n606:{id:"n606",loc:[-85.638104,41.941424]},n607:{id:"n607",loc:[-85.637115,41.941438]},n608:{id:"n608",loc:[-85.637133,41.942453]},n609:{id:"n609",loc:[-85.637429,41.942004]},n61:{id:"n61",loc:[-85.635701,41.942802]},n610:{id:"n610",loc:[-85.637125,41.942004]},n611:{id:"n611",loc:[-85.637022,41.942004]},n612:{id:"n612",loc:[-85.635952,41.943579]},n613:{id:"n613",loc:[-85.635872,41.943594]},n614:{id:"n614",loc:[-85.635857,41.943551]},n615:{id:"n615",loc:[-85.635937,41.943535]},n616:{id:"n616",loc:[-85.63671,41.94344]},n617:{id:"n617",loc:[-85.636427,41.94334]},n618:{id:"n618",loc:[-85.635353,41.943279]},n619:{id:"n619",loc:[-85.635319,41.943257]},n62:{id:"n62",loc:[-85.6358,41.942997]},n620:{id:"n620",loc:[-85.638786,41.943105]},n621:{id:"n621",loc:[-85.634957,41.943146]},n622:{id:"n622",loc:[-85.635012,41.943119]},n623:{id:"n623",loc:[-85.632409,41.944222]},n624:{id:"n624",loc:[-85.631863,41.944749]},n625:{id:"n625",loc:[-85.631915,41.944722]},n626:{id:"n626",loc:[-85.631884,41.94464]},n627:{id:"n627",loc:[-85.631792,41.944359]},n628:{id:"n628",loc:[-85.631817,41.944703]},n629:{id:"n629",loc:[-85.633464,41.945787]},n63:{id:"n63",loc:[-85.635808,41.943176]},n630:{id:"n630",loc:[-85.633583,41.945919]},n631:{id:"n631",loc:[-85.63382,41.945698]},n632:{id:"n632",loc:[-85.633681,41.945571]},n633:{id:"n633",loc:[-85.634217,41.946824]},n634:{id:"n634",loc:[-85.634271,41.946836]},n635:{id:"n635",loc:[-85.634319,41.94573]},n636:{id:"n636",loc:[-85.634377,41.945672]},n637:{id:"n637",loc:[-85.634909,41.945354]},n638:{id:"n638",loc:[-85.634726,41.945493],tags:{artwork_type:"mural",tourism:"artwork"}},n639:{id:"n639",loc:[-85.63546,41.945612]},n64:{id:"n64",loc:[-85.63631,41.943253]},n640:{id:"n640",loc:[-85.635561,41.945493]},n641:{id:"n641",loc:[-85.635417,41.945565]},n642:{id:"n642",loc:[-85.635315,41.945583]},n643:{id:"n643",loc:[-85.63506,41.945383]},n644:{id:"n644",loc:[-85.635198,41.945199]},n645:{id:"n645",loc:[-85.635361,41.94558]},n646:{id:"n646",loc:[-85.635017,41.945066]},n647:{id:"n647",loc:[-85.634779,41.945206]},n648:{id:"n648",loc:[-85.63425,41.945655]},n649:{id:"n649",loc:[-85.634247,41.945631]},n65:{id:"n65",loc:[-85.635398,41.943259]},n650:{id:"n650",loc:[-85.634889,41.945921]},n651:{id:"n651",loc:[-85.634889,41.945939]},n652:{id:"n652",loc:[-85.634889,41.945761]},n653:{id:"n653",loc:[-85.63489,41.945778]},n654:{id:"n654",loc:[-85.635112,41.945715]},n655:{id:"n655",loc:[-85.635025,41.945714]},n656:{id:"n656",loc:[-85.635027,41.945761]},n657:{id:"n657",loc:[-85.635438,41.945665]},n658:{id:"n658",loc:[-85.635416,41.945676]},n659:{id:"n659",loc:[-85.635401,41.945709]},n66:{id:"n66",loc:[-85.635336,41.943036]},n660:{id:"n660",loc:[-85.635271,41.945566]},n661:{id:"n661",loc:[-85.636106,41.946268]},n662:{id:"n662",loc:[-85.635867,41.946747]},n663:{id:"n663",loc:[-85.636476,41.946797]},n664:{id:"n664",loc:[-85.63651,41.946796]},n665:{id:"n665",loc:[-85.635367,41.946389]},n666:{id:"n666",loc:[-85.635367,41.946437]},n667:{id:"n667",loc:[-85.634787,41.946441]},n668:{id:"n668",loc:[-85.6358,41.946243]},n669:{id:"n669",loc:[-85.635784,41.94622]},n67:{id:"n67",loc:[-85.635911,41.942899]},n670:{id:"n670",loc:[-85.635727,41.946195]},n671:{id:"n671",loc:[-85.635708,41.946588]},n672:{id:"n672",loc:[-85.635648,41.946561]},n673:{id:"n673",loc:[-85.635624,41.946555]},n674:{id:"n674",loc:[-85.635417,41.946559]},n675:{id:"n675",loc:[-85.634866,41.946561]},n676:{id:"n676",loc:[-85.634866,41.946543]},n677:{id:"n677",loc:[-85.635085,41.946546]},n678:{id:"n678",loc:[-85.635085,41.946554]},n679:{id:"n679",loc:[-85.634584,41.94488]},n68:{id:"n68",loc:[-85.635915,41.943156]},n680:{id:"n680",loc:[-85.634557,41.944882]},n681:{id:"n681",loc:[-85.634455,41.944943]},n682:{id:"n682",loc:[-85.634305,41.944968]},n683:{id:"n683",loc:[-85.634261,41.944927]},n684:{id:"n684",loc:[-85.634132,41.944741]},n685:{id:"n685",loc:[-85.633705,41.944759]},n686:{id:"n686",loc:[-85.633918,41.944616]},n687:{id:"n687",loc:[-85.633974,41.944663]},n688:{id:"n688",loc:[-85.6336,41.944665]},n689:{id:"n689",loc:[-85.633817,41.944528]},n69:{id:"n69",loc:[-85.63631,41.943157]},n690:{id:"n690",loc:[-85.633889,41.944485]},n691:{id:"n691",loc:[-85.633931,41.944525]},n692:{id:"n692",loc:[-85.633864,41.944563]},n693:{id:"n693",loc:[-85.633456,41.944524]},n694:{id:"n694",loc:[-85.633676,41.944399]},n695:{id:"n695",loc:[-85.633352,41.944415]},n696:{id:"n696",loc:[-85.633655,41.944234]},n697:{id:"n697",loc:[-85.633761,41.94435]},n698:{id:"n698",loc:[-85.633254,41.944318]},n699:{id:"n699",loc:[-85.633472,41.944188]},n7:{id:"n7",loc:[-85.638791,41.943231]},n70:{id:"n70",loc:[-85.63579,41.942967]},n700:{id:"n700",loc:[-85.633524,41.944237]},n701:{id:"n701",loc:[-85.633583,41.944202]},n702:{id:"n702",loc:[-85.633632,41.944247]},n703:{id:"n703",loc:[-85.633165,41.944228]},n704:{id:"n704",loc:[-85.633388,41.944105]},n705:{id:"n705",loc:[-85.633117,41.944175]},n706:{id:"n706",loc:[-85.633302,41.944077]},n707:{id:"n707",loc:[-85.633352,41.944126]},n708:{id:"n708",loc:[-85.633052,41.944107]},n709:{id:"n709",loc:[-85.633237,41.944009]},n71:{id:"n71",loc:[-85.637506,41.942824]},n710:{id:"n710",loc:[-85.633187,41.943955]},n711:{id:"n711",loc:[-85.633,41.944054]},n712:{id:"n712",loc:[-85.633155,41.944265]},n713:{id:"n713",loc:[-85.633669,41.944765]},n714:{id:"n714",loc:[-85.634468,41.945503]},n715:{id:"n715",loc:[-85.63455,41.945566]},n716:{id:"n716",loc:[-85.634737,41.945729]},n717:{id:"n717",loc:[-85.634753,41.945752]},n718:{id:"n718",loc:[-85.634756,41.945781]},n719:{id:"n719",loc:[-85.634758,41.945978]},n72:{id:"n72",loc:[-85.637511,41.943056]},n720:{id:"n720",loc:[-85.634363,41.945548],tags:{crossing:"marked",highway:"crossing"}},n721:{id:"n721",loc:[-85.634245,41.945599]},n722:{id:"n722",loc:[-85.633474,41.944889]},n723:{id:"n723",loc:[-85.632997,41.944418]},n724:{id:"n724",loc:[-85.63278,41.944183]},n725:{id:"n725",loc:[-85.63331,41.944429]},n726:{id:"n726",loc:[-85.633568,41.944829],tags:{crossing:"marked",highway:"crossing"}},n727:{id:"n727",loc:[-85.634669,41.94567]},n728:{id:"n728",loc:[-85.634462,41.945787]},n729:{id:"n729",loc:[-85.634272,41.945625]},n73:{id:"n73",loc:[-85.637361,41.943058]},n730:{id:"n730",loc:[-85.634344,41.945699],tags:{crossing:"marked",highway:"crossing"}},n731:{id:"n731",loc:[-85.634426,41.945783]},n732:{id:"n732",loc:[-85.632425,41.944137]},n733:{id:"n733",loc:[-85.632302,41.944192]},n734:{id:"n734",loc:[-85.632762,41.944174]},n735:{id:"n735",loc:[-85.632713,41.944179]},n736:{id:"n736",loc:[-85.632411,41.944327]},n737:{id:"n737",loc:[-85.632362,41.944341]},n738:{id:"n738",loc:[-85.632236,41.944204]},n739:{id:"n739",loc:[-85.634939,41.942165]},n74:{id:"n74",loc:[-85.637356,41.942825]},n740:{id:"n740",loc:[-85.635079,41.941535]},n741:{id:"n741",loc:[-85.635112,41.941595]},n742:{id:"n742",loc:[-85.635113,41.941633]},n743:{id:"n743",loc:[-85.635067,41.941652]},n744:{id:"n744",loc:[-85.634989,41.941651]},n745:{id:"n745",loc:[-85.634921,41.941609]},n746:{id:"n746",loc:[-85.634881,41.941544]},n747:{id:"n747",loc:[-85.635537,41.940939]},n748:{id:"n748",loc:[-85.635573,41.941048]},n749:{id:"n749",loc:[-85.635453,41.94091]},n75:{id:"n75",loc:[-85.638097,41.942833]},n750:{id:"n750",loc:[-85.635319,41.940943]},n751:{id:"n751",loc:[-85.637057,41.943224]},n752:{id:"n752",loc:[-85.636989,41.943296]},n753:{id:"n753",loc:[-85.636851,41.943299]},n754:{id:"n754",loc:[-85.636848,41.94322]},n755:{id:"n755",loc:[-85.636986,41.943217]},n756:{id:"n756",loc:[-85.637569,41.943454]},n757:{id:"n757",loc:[-85.637437,41.943458]},n758:{id:"n758",loc:[-85.637432,41.943384]},n759:{id:"n759",loc:[-85.637564,41.94338]},n76:{id:"n76",loc:[-85.638098,41.942912]},n760:{id:"n760",loc:[-85.637213,41.943378]},n761:{id:"n761",loc:[-85.637217,41.943435]},n762:{id:"n762",loc:[-85.637235,41.943434]},n763:{id:"n763",loc:[-85.637237,41.943465]},n764:{id:"n764",loc:[-85.637424,41.943459]},n765:{id:"n765",loc:[-85.637418,41.943371]},n766:{id:"n766",loc:[-85.638094,41.943149]},n767:{id:"n767",loc:[-85.638096,41.943201]},n768:{id:"n768",loc:[-85.638041,41.943202]},n769:{id:"n769",loc:[-85.638042,41.943216]},n77:{id:"n77",loc:[-85.637705,41.942913]},n770:{id:"n770",loc:[-85.637927,41.943218]},n771:{id:"n771",loc:[-85.637926,41.943201]},n772:{id:"n772",loc:[-85.637897,41.943201]},n773:{id:"n773",loc:[-85.637896,41.943155]},n774:{id:"n774",loc:[-85.637962,41.943153]},n775:{id:"n775",loc:[-85.637962,41.943134]},n776:{id:"n776",loc:[-85.638017,41.943132]},n777:{id:"n777",loc:[-85.638018,41.943151]},n778:{id:"n778",loc:[-85.638045,41.943289]},n779:{id:"n779",loc:[-85.638048,41.943363]},n78:{id:"n78",loc:[-85.637705,41.942834]},n780:{id:"n780",loc:[-85.637842,41.943367]},n781:{id:"n781",loc:[-85.637839,41.943296]},n782:{id:"n782",loc:[-85.637896,41.943295]},n783:{id:"n783",loc:[-85.637897,41.943314]},n784:{id:"n784",loc:[-85.637957,41.943312]},n785:{id:"n785",loc:[-85.637957,41.943291]},n786:{id:"n786",loc:[-85.637816,41.943375]},n787:{id:"n787",loc:[-85.637815,41.943416]},n788:{id:"n788",loc:[-85.637715,41.943415]},n789:{id:"n789",loc:[-85.637716,41.943374]},n79:{id:"n79",loc:[-85.638071,41.942298]},n790:{id:"n790",loc:[-85.637912,41.943545]},n791:{id:"n791",loc:[-85.637909,41.943479]},n792:{id:"n792",loc:[-85.637967,41.943477]},n793:{id:"n793",loc:[-85.637967,41.94346]},n794:{id:"n794",loc:[-85.638077,41.943457]},n795:{id:"n795",loc:[-85.638078,41.943473]},n796:{id:"n796",loc:[-85.638124,41.943471]},n797:{id:"n797",loc:[-85.638126,41.943514]},n798:{id:"n798",loc:[-85.638079,41.943515]},n799:{id:"n799",loc:[-85.638079,41.943532]},n8:{id:"n8",loc:[-85.635241,41.941948]},n80:{id:"n80",loc:[-85.638074,41.942431]},n800:{id:"n800",loc:[-85.638028,41.943534]},n801:{id:"n801",loc:[-85.638028,41.943542]},n802:{id:"n802",loc:[-85.638845,41.942983]},n803:{id:"n803",loc:[-85.638846,41.94305]},n804:{id:"n804",loc:[-85.638661,41.943052]},n805:{id:"n805",loc:[-85.63866,41.942984]},n806:{id:"n806",loc:[-85.638579,41.942753]},n807:{id:"n807",loc:[-85.638445,41.942755]},n808:{id:"n808",loc:[-85.638452,41.942978]},n809:{id:"n809",loc:[-85.638545,41.942976]},n81:{id:"n81",loc:[-85.637836,41.942433]},n810:{id:"n810",loc:[-85.638543,41.942935]},n811:{id:"n811",loc:[-85.638571,41.942934]},n812:{id:"n812",loc:[-85.63857,41.942901]},n813:{id:"n813",loc:[-85.638611,41.9429]},n814:{id:"n814",loc:[-85.638607,41.942769]},n815:{id:"n815",loc:[-85.63858,41.94277]},n816:{id:"n816",loc:[-85.638597,41.942614]},n817:{id:"n817",loc:[-85.638601,41.94273]},n818:{id:"n818",loc:[-85.638686,41.942731]},n819:{id:"n819",loc:[-85.638689,41.942917]},n82:{id:"n82",loc:[-85.637835,41.94242]},n820:{id:"n820",loc:[-85.638558,41.943018]},n821:{id:"n821",loc:[-85.638243,41.943019]},n822:{id:"n822",loc:[-85.637536,41.943887]},n823:{id:"n823",loc:[-85.63749,41.943926]},n824:{id:"n824",loc:[-85.63743,41.943886]},n825:{id:"n825",loc:[-85.637476,41.943847]},n826:{id:"n826",loc:[-85.637527,41.943846]},n827:{id:"n827",loc:[-85.637141,41.943728]},n828:{id:"n828",loc:[-85.637201,41.943755]},n829:{id:"n829",loc:[-85.636987,41.943608]},n83:{id:"n83",loc:[-85.63776,41.942421]},n830:{id:"n830",loc:[-85.637441,41.943807]},n831:{id:"n831",loc:[-85.637673,41.94399]},n832:{id:"n832",loc:[-85.637783,41.944137]},n833:{id:"n833",loc:[-85.63845,41.944333]},n834:{id:"n834",loc:[-85.638159,41.944248]},n835:{id:"n835",loc:[-85.637859,41.94416]},n836:{id:"n836",loc:[-85.638685,41.944542]},n837:{id:"n837",loc:[-85.638714,41.944611]},n838:{id:"n838",loc:[-85.638711,41.944757]},n839:{id:"n839",loc:[-85.638774,41.945069]},n84:{id:"n84",loc:[-85.637758,41.942339]},n840:{id:"n840",loc:[-85.638742,41.945205]},n841:{id:"n841",loc:[-85.640267,41.942403]},n842:{id:"n842",loc:[-85.640154,41.942404]},n843:{id:"n843",loc:[-85.640152,41.942249]},n844:{id:"n844",loc:[-85.640266,41.942248]},n845:{id:"n845",loc:[-85.640366,41.942599]},n846:{id:"n846",loc:[-85.640362,41.942192]},n847:{id:"n847",loc:[-85.640146,41.942191]},n848:{id:"n848",loc:[-85.640122,41.942196]},n849:{id:"n849",loc:[-85.640108,41.942211]},n85:{id:"n85",loc:[-85.637836,41.942339]},n850:{id:"n850",loc:[-85.640101,41.942236]},n851:{id:"n851",loc:[-85.640103,41.94241]},n852:{id:"n852",loc:[-85.64011,41.942435]},n853:{id:"n853",loc:[-85.640126,41.942445]},n854:{id:"n854",loc:[-85.640153,41.942451]},n855:{id:"n855",loc:[-85.640183,41.942452]},n856:{id:"n856",loc:[-85.640364,41.942452]},n857:{id:"n857",loc:[-85.640007,41.942452]},n858:{id:"n858",loc:[-85.639449,41.942461]},n859:{id:"n859",loc:[-85.640049,41.942391]},n86:{id:"n86",loc:[-85.637835,41.942301]},n860:{id:"n860",loc:[-85.640052,41.942503]},n861:{id:"n861",loc:[-85.639575,41.94251]},n862:{id:"n862",loc:[-85.639572,41.942398]},n863:{id:"n863",loc:[-85.638782,41.942227]},n864:{id:"n864",loc:[-85.63843,41.942226]},n865:{id:"n865",loc:[-85.63823,41.942183]},n866:{id:"n866",loc:[-85.638363,41.942216],tags:{barrier:"gate"}},n867:{id:"n867",loc:[-85.6384,41.942223]},n868:{id:"n868",loc:[-85.636042,41.942797]},n869:{id:"n869",loc:[-85.636308,41.942752]},n87:{id:"n87",loc:[-85.637566,41.942367]},n870:{id:"n870",loc:[-85.636516,41.942729]},n871:{id:"n871",loc:[-85.636782,41.942712]},n872:{id:"n872",loc:[-85.636944,41.942706]},n873:{id:"n873",loc:[-85.63704,41.942706]},n874:{id:"n874",loc:[-85.637237,41.942703]},n875:{id:"n875",loc:[-85.637553,41.9427]},n876:{id:"n876",loc:[-85.638236,41.942697]},n877:{id:"n877",loc:[-85.636284,41.942781]},n878:{id:"n878",loc:[-85.636551,41.942641]},n879:{id:"n879",loc:[-85.633914,41.943693]},n88:{id:"n88",loc:[-85.637566,41.94241]},n880:{id:"n880",loc:[-85.63389,41.943708]},n881:{id:"n881",loc:[-85.633866,41.943686]},n882:{id:"n882",loc:[-85.63389,41.943671]},n883:{id:"n883",loc:[-85.633857,41.943609]},n884:{id:"n884",loc:[-85.634858,41.944474]},n885:{id:"n885",loc:[-85.633988,41.943234]},n886:{id:"n886",loc:[-85.633999,41.943485]},n887:{id:"n887",loc:[-85.634109,41.943449],tags:{emergency:"fire_hydrant"}},n888:{id:"n888",loc:[-85.635728,41.942655],tags:{emergency:"fire_hydrant"}},n889:{id:"n889",loc:[-85.636499,41.942845],tags:{man_made:"flagpole"}},n89:{id:"n89",loc:[-85.637455,41.94241]},n890:{id:"n890",loc:[-85.636197,41.943073]},n891:{id:"n891",loc:[-85.636227,41.943073]},n892:{id:"n892",loc:[-85.637433,41.942933],tags:{"addr:city":"Three Rivers","addr:housenumber":"401","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue",amenity:"restaurant",cuisine:"pizza",name:"Pizza Hut",brand:"Pizza Hut","brand:wikidata":"Q191615","brand:wikipedia":"en:Pizza Hut"}},n893:{id:"n893",loc:[-85.637907,41.942879],tags:{amenity:"car_wash"}},n894:{id:"n894",loc:[-85.637661,41.943018]},n895:{id:"n895",loc:[-85.636933,41.942733],tags:{emergency:"fire_hydrant"}},n896:{id:"n896",loc:[-85.637661,41.94304]},n897:{id:"n897",loc:[-85.637562,41.943041]},n898:{id:"n898",loc:[-85.637556,41.942725]},n899:{id:"n899",loc:[-85.637656,41.942724]},n9:{id:"n9",loc:[-85.635159,41.941926]},n90:{id:"n90",loc:[-85.637454,41.942367]},n900:{id:"n900",loc:[-85.637657,41.942779]},n901:{id:"n901",loc:[-85.637983,41.942777]},n902:{id:"n902",loc:[-85.637982,41.942616]},n903:{id:"n903",loc:[-85.637777,41.942778]},n904:{id:"n904",loc:[-85.637775,41.942699]},n905:{id:"n905",loc:[-85.637772,41.942618]},n906:{id:"n906",loc:[-85.637982,41.942698]},n907:{id:"n907",loc:[-85.637941,41.942378],tags:{"addr:city":"Three Rivers","addr:housenumber":"416","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue",name:"Gem Pawnbroker",shop:"pawnbroker"}},n908:{id:"n908",loc:[-85.637515,41.942394],tags:{second_hand:"only",shop:"car"}},n909:{id:"n909",loc:[-85.638743,41.942374],tags:{"addr:city":"Three Rivers","addr:housenumber":"500","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue",name:"William Towing","service:vehicle:towing":"yes","service:vehicle:tyres":"yes",shop:"car_repair"}},n91:{id:"n91",loc:[-85.637565,41.942341]},n910:{id:"n910",loc:[-85.638594,41.942357]},n911:{id:"n911",loc:[-85.634312,41.943562],tags:{"addr:city":"Three Rivers","addr:housenumber":"145","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue",amenity:"cafe",cuisine:"coffee_shop",name:"L.A.'s Coffee Cafe",outdoor_seating:"yes"}},n912:{id:"n912",loc:[-85.634404,41.943512]},n913:{id:"n913",loc:[-85.634391,41.943519],tags:{entrance:"yes"}},n914:{id:"n914",loc:[-85.634259,41.943538],tags:{entrance:"yes"}},n915:{id:"n915",loc:[-85.634247,41.943528]},n916:{id:"n916",loc:[-85.633747,41.943322],tags:{"addr:city":"Three Rivers","addr:housenumber":"132","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue",name:"Preferred Insurance Services",office:"insurance"}},n917:{id:"n917",loc:[-85.63299,41.943686],tags:{"addr:city":"Three Rivers","addr:housenumber":"101","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"Lynn's Garage","service:vehicle:tyres":"yes",shop:"car_repair"}},n918:{id:"n918",loc:[-85.633438,41.944883]},n919:{id:"n919",loc:[-85.633265,41.944983]},n92:{id:"n92",loc:[-85.637481,41.942341]},n920:{id:"n920",loc:[-85.633315,41.945027]},n921:{id:"n921",loc:[-85.633376,41.944827]},n922:{id:"n922",loc:[-85.633199,41.944922]},n923:{id:"n923",loc:[-85.633316,41.944772]},n924:{id:"n924",loc:[-85.633147,41.944867]},n925:{id:"n925",loc:[-85.633261,41.944719]},n926:{id:"n926",loc:[-85.633096,41.944812]},n927:{id:"n927",loc:[-85.633191,41.944645]},n928:{id:"n928",loc:[-85.632981,41.94476]},n929:{id:"n929",loc:[-85.633062,41.94483]},n93:{id:"n93",loc:[-85.637481,41.94226]},n930:{id:"n930",loc:[-85.633146,41.944602]},n931:{id:"n931",loc:[-85.632969,41.944703]},n932:{id:"n932",loc:[-85.633008,41.944745]},n933:{id:"n933",loc:[-85.633088,41.944545]},n934:{id:"n934",loc:[-85.632868,41.944655]},n935:{id:"n935",loc:[-85.632941,41.944718]},n936:{id:"n936",loc:[-85.633028,41.944483]},n937:{id:"n937",loc:[-85.632817,41.944605]},n938:{id:"n938",loc:[-85.632923,41.944373]},n939:{id:"n939",loc:[-85.632692,41.944485]},n94:{id:"n94",loc:[-85.637565,41.94226]},n940:{id:"n940",loc:[-85.632871,41.944316]},n941:{id:"n941",loc:[-85.632655,41.944421]},n942:{id:"n942",loc:[-85.632711,41.944478]},n943:{id:"n943",loc:[-85.632825,41.94426]},n944:{id:"n944",loc:[-85.632606,41.944363]},n945:{id:"n945",loc:[-85.63275,41.94418]},n946:{id:"n946",loc:[-85.632588,41.944256]},n947:{id:"n947",loc:[-85.632611,41.944279]},n948:{id:"n948",loc:[-85.632548,41.944306]},n949:{id:"n949",loc:[-85.632512,41.944406]},n95:{id:"n95",loc:[-85.637188,41.942217]},n950:{id:"n950",loc:[-85.632565,41.944463]},n951:{id:"n951",loc:[-85.632579,41.944456]},n952:{id:"n952",loc:[-85.632634,41.944518]},n953:{id:"n953",loc:[-85.632686,41.944569]},n954:{id:"n954",loc:[-85.632745,41.944537]},n955:{id:"n955",loc:[-85.632659,41.944587]},n956:{id:"n956",loc:[-85.632778,41.944705]},n957:{id:"n957",loc:[-85.632815,41.944301],tags:{"addr:city":"Three Rivers","addr:housenumber":"5","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"Access Point Employment",office:"employment_agency"}},n958:{id:"n958",loc:[-85.6332,41.944174],tags:{"addr:city":"Three Rivers","addr:housenumber":"6","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"Paisley Emporium",shop:"second_hand"}},n959:{id:"n959",loc:[-85.633578,41.944568],tags:{"addr:city":"Three Rivers","addr:housenumber":"22","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"Lowry's Books",shop:"books"}},n96:{id:"n96",loc:[-85.637189,41.942303]},n960:{id:"n960",loc:[-85.63344,41.944443],tags:{"addr:city":"Three Rivers","addr:housenumber":"16","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",amenity:"restaurant",cuisine:"pizza",name:"Paisano's Bar and Grill"}},n961:{id:"n961",loc:[-85.633009,41.944542],tags:{"addr:city":"Three Rivers","addr:housenumber":"13","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",amenity:"cafe",cuisine:"american",internet_access:"yes",name:"Main Street Cafe"}},n962:{id:"n962",loc:[-85.633674,41.944682],tags:{"addr:city":"Three Rivers","addr:housenumber":"28","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",leisure:"fitness_centre",name:"Main Street Fitness"}},n963:{id:"n963",loc:[-85.633376,41.944868],tags:{"addr:city":"Three Rivers","addr:housenumber":"27","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",leisure:"fitness_centre",name:"Main Street Barbell"}},n964:{id:"n964",loc:[-85.633366,41.944783]},n965:{id:"n965",loc:[-85.633296,41.94482]},n966:{id:"n966",loc:[-85.633214,41.94487]},n967:{id:"n967",loc:[-85.633005,41.944988]},n968:{id:"n968",loc:[-85.633269,41.944816]},n969:{id:"n969",loc:[-85.633215,41.944842]},n97:{id:"n97",loc:[-85.637299,41.942302]},n970:{id:"n970",loc:[-85.633245,41.944871]},n971:{id:"n971",loc:[-85.633296,41.944845]},n972:{id:"n972",loc:[-85.633254,41.944845],tags:{natural:"tree"}},n973:{id:"n973",loc:[-85.633557,41.945515]},n974:{id:"n974",loc:[-85.633279,41.945246]},n975:{id:"n975",loc:[-85.63324,41.945226]},n976:{id:"n976",loc:[-85.6332,41.945213]},n977:{id:"n977",loc:[-85.633133,41.945164]},n978:{id:"n978",loc:[-85.63312,41.945132]},n979:{id:"n979",loc:[-85.633095,41.945081]},n98:{id:"n98",loc:[-85.637299,41.942314]},n980:{id:"n980",loc:[-85.633064,41.945047]},n981:{id:"n981",loc:[-85.632739,41.944742]},n982:{id:"n982",loc:[-85.633281,41.945026]},n983:{id:"n983",loc:[-85.633155,41.944903]},n984:{id:"n984",loc:[-85.633079,41.944829]},n985:{id:"n985",loc:[-85.63304,41.944853]},n986:{id:"n986",loc:[-85.632949,41.944776]},n987:{id:"n987",loc:[-85.632921,41.944725]},n988:{id:"n988",loc:[-85.632859,41.944673]},n989:{id:"n989",loc:[-85.632895,41.94505]},n99:{id:"n99",loc:[-85.637396,41.942313]},n990:{id:"n990",loc:[-85.633336,41.945138]},n991:{id:"n991",loc:[-85.633466,41.945265]},n992:{id:"n992",loc:[-85.633367,41.945327]},n993:{id:"n993",loc:[-85.633163,41.945189]},n994:{id:"n994",loc:[-85.633678,41.945309]},n995:{id:"n995",loc:[-85.633619,41.945261]},n996:{id:"n996",loc:[-85.63355,41.945301]},n997:{id:"n997",loc:[-85.633607,41.945352]},n998:{id:"n998",loc:[-85.633579,41.945327],tags:{entrance:"yes"}},n999:{id:"n999",loc:[-85.633445,41.945404]},r2:{id:"r2",members:[{id:"w225",role:"outer",type:"way"}],tags:{type:"multipolygon",natural:"water",water:"river"}},r5:{id:"r5",members:[{id:"w642",role:"outer",type:"way"}],tags:{admin_level:"8",border_type:"city",boundary:"administrative",name:"Three Rivers",place:"city",type:"boundary"}},w1:{id:"w1",nodes:["n5","n1797"],tags:{highway:"residential",name:"12th Avenue"}},w10:{id:"w10",nodes:["n54","n55","n56","n57","n891","n890","n54"],tags:{building:"yes"}},w100:{id:"w100",nodes:["n451","n915","n452"],tags:{highway:"footway"}},w101:{id:"w101",nodes:["n461","n462","n463","n464","n465","n466"],tags:{barrier:"fence"}},w102:{id:"w102",nodes:["n467","n468","n469","n470","n472","n467"],tags:{amenity:"parking"}},w103:{id:"w103",nodes:["n2597","n2444","n471","n472"],tags:{highway:"footway"}},w104:{id:"w104",nodes:["n473","n474","n325"],tags:{footway:"sidewalk",highway:"footway"}},w105:{id:"w105",nodes:["n475","n324","n325"],tags:{footway:"sidewalk",highway:"footway"}},w106:{id:"w106",nodes:["n886","n452","n476"],tags:{footway:"sidewalk",highway:"footway"}},w107:{id:"w107",nodes:["n485","n4678","n486","n18"],tags:{highway:"service"}},w108:{id:"w108",nodes:["n300","n487","n488","n489","n490"],tags:{highway:"footway"}},w109:{id:"w109",nodes:["n490","n491"],tags:{highway:"footway"}},w11:{id:"w11",nodes:["n58","n63","n59","n315","n60"],tags:{highway:"service"}},w110:{id:"w110",nodes:["n492","n493","n494","n495","n496","n497","n492"],tags:{building:"yes"}},w111:{id:"w111",nodes:["n498","n499","n511"],tags:{highway:"service"}},w112:{id:"w112",nodes:["n510","n500","n501","n502","n503","n504","n505","n506","n507","n508","n509"],tags:{highway:"service"}},w113:{id:"w113",nodes:["n511","n510"],tags:{covered:"yes",highway:"service"}},w114:{id:"w114",nodes:["n512","n513","n514","n515","n512"],tags:{building:"yes"}},w115:{id:"w115",nodes:["n516","n517","n518","n519","n516"],tags:{building:"yes"}},w116:{id:"w116",nodes:["n520","n521","n522","n523","n520"],tags:{building:"yes"}},w117:{id:"w117",nodes:["n524","n525","n526","n527","n528","n529","n530","n531","n532","n533","n534","n535","n524"],tags:{building:"yes"}},w118:{id:"w118",nodes:["n536","n537","n538","n539","n536"],tags:{building:"yes"}},w119:{id:"w119",nodes:["n540","n541","n542","n543","n544","n545","n546","n547","n540"],tags:{building:"yes"}},w12:{id:"w12",nodes:["n61","n314","n70","n62","n63"],tags:{highway:"service"}},w120:{id:"w120",nodes:["n548","n549","n550","n551","n552","n553","n554","n555","n556","n557","n548"],tags:{building:"yes"}},w121:{id:"w121",nodes:["n558","n559","n560","n561","n562","n563","n564","n565","n558"],tags:{building:"yes"}},w122:{id:"w122",nodes:["n566","n567","n568","n569","n566"],tags:{building:"yes"}},w123:{id:"w123",nodes:["n570","n571","n572","n573","n570"],tags:{building:"yes"}},w124:{id:"w124",nodes:["n574","n575","n576","n577","n574"],tags:{building:"yes"}},w125:{id:"w125",nodes:["n578","n579","n580","n581","n578"],tags:{building:"yes"}},w126:{id:"w126",nodes:["n582","n583","n584","n585","n582"],tags:{building:"yes"}},w127:{id:"w127",nodes:["n586","n587","n588","n589","n590","n591","n592","n593","n586"],tags:{building:"yes"}},w128:{id:"w128",nodes:["n594","n595","n596","n597","n598","n599","n600","n601","n594"],tags:{building:"yes"}},w129:{id:"w129",nodes:["n309","n602","n603"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w13:{id:"w13",nodes:["n64","n65","n66","n67","n68","n69","n64"],tags:{amenity:"parking"}},w130:{id:"w130",nodes:["n603","n604"],tags:{footway:"sidewalk",highway:"footway"}},w131:{id:"w131",nodes:["n604","n605","n606"],tags:{footway:"sidewalk",highway:"footway"}},w132:{id:"w132",nodes:["n606","n607"],tags:{footway:"sidewalk",highway:"footway"}},w133:{id:"w133",nodes:["n607","n610","n608","n603"],tags:{footway:"sidewalk",highway:"footway"}},w134:{id:"w134",nodes:["n609","n610","n611"],tags:{highway:"service",service:"driveway",surface:"unpaved"}},w135:{id:"w135",nodes:["n244","n245","n246"],tags:{highway:"service"}},w136:{id:"w136",nodes:["n612","n613","n614","n615","n612"],tags:{amenity:"shelter",building:"yes"}},w137:{id:"w137",nodes:["n2779","n2788","n2776","n2778","n2775","n2787","n2440","n2437","n629","n2438","n630","n2439","n2407","n2408","n2409"],tags:{highway:"residential",name:"Foster Street"}},w138:{id:"w138",nodes:["n2779","n625","n626","n627"],tags:{highway:"residential",name:"Foster Street",oneway:"yes"}},w139:{id:"w139",nodes:["n630","n631","n632","n2437"],tags:{highway:"service"}},w14:{id:"w14",nodes:["n71","n72","n73","n74","n71"],tags:{building:"yes"}},w140:{id:"w140",nodes:["n643","n637","n715","n2410"],tags:{highway:"footway",name:"Mural Mall"}},w141:{id:"w141",nodes:["n639","n2516"],tags:{barrier:"wall"}},w142:{id:"w142",nodes:["n640","n641","n645","n642","n660","n643","n644"],tags:{highway:"service"}},w143:{id:"w143",nodes:["n646","n647"],tags:{highway:"service"}},w144:{id:"w144",nodes:["n654","n655","n656"],tags:{barrier:"wall"}},w145:{id:"w145",nodes:["n665","n666","n667"],tags:{barrier:"wall"}},w146:{id:"w146",nodes:["n2727","n662","n2719"],tags:{highway:"service",oneway:"yes",service:"parking_aisle"}},w147:{id:"w147",nodes:["n2725","n674"],tags:{highway:"service",oneway:"yes"}},w148:{id:"w148",nodes:["n2464","n2460","n2454","n684","n2455","n2464"],tags:{building:"yes"}},w149:{id:"w149",nodes:["n2456","n685","n686","n687","n2456"],tags:{building:"yes"}},w15:{id:"w15",nodes:["n75","n76","n77","n78","n75"],tags:{building:"yes"}},w150:{id:"w150",nodes:["n685","n688","n689","n690","n691","n692","n686","n685"],tags:{building:"yes"}},w151:{id:"w151",nodes:["n688","n693","n694","n689","n688"],tags:{building:"yes"}},w152:{id:"w152",nodes:["n693","n695","n702","n696","n697","n694","n693"],tags:{building:"yes"}},w153:{id:"w153",nodes:["n695","n698","n699","n700","n701","n702","n695"],tags:{building:"yes"}},w154:{id:"w154",nodes:["n698","n703","n707","n704","n699","n698"],tags:{building:"yes"}},w155:{id:"w155",nodes:["n703","n705","n706","n707","n703"],tags:{building:"yes"}},w156:{id:"w156",nodes:["n705","n708","n709","n706","n705"],tags:{building:"yes"}},w157:{id:"w157",nodes:["n709","n710","n711","n708","n709"],tags:{building:"yes"}},w158:{id:"w158",nodes:["n369","n712","n725","n713","n714","n715","n727","n716","n717","n718","n719"],tags:{footway:"sidewalk",highway:"footway"}},w159:{id:"w159",nodes:["n714","n720","n721"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w16:{id:"w16",nodes:["n79","n80","n81","n82","n83","n84","n85","n86","n79"],tags:{building:"yes"}},w160:{id:"w160",nodes:["n729","n721","n722","n964","n723","n724"],tags:{footway:"sidewalk",highway:"footway"}},w161:{id:"w161",nodes:["n713","n726","n722"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w162:{id:"w162",nodes:["n727","n2411","n728"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w163:{id:"w163",nodes:["n729","n730","n731"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w164:{id:"w164",nodes:["n365","n732","n733","n738"],tags:{footway:"sidewalk",highway:"footway"}},w165:{id:"w165",nodes:["n724","n734","n367","n735","n736","n737"],tags:{footway:"sidewalk",highway:"footway"}},w166:{id:"w166",nodes:["n739","n2037","n2038","n2039","n2040","n1623","n2032"],tags:{highway:"footway"}},w167:{id:"w167",nodes:["n150","n751"],tags:{highway:"service"}},w168:{id:"w168",nodes:["n752","n753","n754","n755","n752"],tags:{building:"yes"}},w169:{id:"w169",nodes:["n756","n757","n758","n759","n756"],tags:{building:"yes"}},w17:{id:"w17",nodes:["n87","n88","n89","n90","n87"],tags:{building:"yes"}},w170:{id:"w170",nodes:["n760","n761","n762","n763","n764","n765","n760"],tags:{building:"yes"}},w171:{id:"w171",nodes:["n766","n767","n768","n769","n770","n771","n772","n773","n774","n775","n776","n777","n766"],tags:{building:"yes"}},w172:{id:"w172",nodes:["n778","n779","n780","n781","n782","n783","n784","n785","n778"],tags:{building:"yes"}},w173:{id:"w173",nodes:["n786","n787","n788","n789","n786"],tags:{building:"yes"}},w174:{id:"w174",nodes:["n790","n791","n792","n793","n794","n795","n796","n797","n798","n799","n800","n801","n790"],tags:{building:"yes"}},w175:{id:"w175",nodes:["n802","n803","n804","n805","n802"],tags:{building:"yes"}},w176:{id:"w176",nodes:["n806","n807","n808","n809","n810","n811","n812","n813","n814","n815","n806"],tags:{building:"yes"}},w177:{id:"w177",nodes:["n816","n1140","n817","n818","n819","n820","n821"],tags:{highway:"service"}},w178:{id:"w178",nodes:["n822","n823","n824","n825","n822"],tags:{building:"yes"}},w179:{id:"w179",nodes:["n841","n842","n843","n844","n841"],tags:{building:"yes"}},w18:{id:"w18",nodes:["n91","n92","n93","n94","n91"],tags:{building:"yes"}},w180:{id:"w180",nodes:["n845","n856","n846"],tags:{highway:"service"}},w181:{id:"w181",nodes:["n846","n847","n848","n849","n850","n851","n852","n853","n854","n855","n856"],tags:{highway:"service",oneway:"yes",service:"drive-through"}},w182:{id:"w182",nodes:["n857","n858"],tags:{highway:"service"}},w183:{id:"w183",nodes:["n859","n860","n861","n862","n859"],tags:{amenity:"parking"}},w184:{id:"w184",nodes:["n863","n864","n867","n866","n865"],tags:{highway:"service"}},w185:{id:"w185",nodes:["n883","n884"],tags:{barrier:"fence"}},w186:{id:"w186",nodes:["n1954","n622","n1955"],tags:{highway:"path",name:"Riverwalk Trail"}},w187:{id:"w187",nodes:["n621","n1954"],tags:{highway:"steps",incline:"up",name:"Riverwalk Trail",surface:"wood"}},w188:{id:"w188",nodes:["n2274","n2275","n2276","n2277","n2278","n2279","n1953","n621"],tags:{highway:"path",name:"Riverwalk Trail",surface:"wood"}},w189:{id:"w189",nodes:["n2273","n2274"],tags:{highway:"steps",incline:"down",name:"Riverwalk Trail",surface:"wood"}},w19:{id:"w19",nodes:["n95","n96","n97","n98","n99","n100","n101","n102","n95"],tags:{building:"yes"}},w190:{id:"w190",nodes:["n821","n894","n900","n903","n901"],tags:{highway:"service"}},w191:{id:"w191",nodes:["n896","n897","n898","n899","n900","n894","n896"],tags:{amenity:"parking"}},w192:{id:"w192",nodes:["n903","n904","n905"],tags:{highway:"service"}},w193:{id:"w193",nodes:["n901","n906","n902"],tags:{highway:"service"}},w194:{id:"w194",nodes:["n912","n913"],tags:{highway:"footway"}},w195:{id:"w195",nodes:["n914","n915"],tags:{highway:"footway"}},w196:{id:"w196",nodes:["n2466","n918","n919","n920","n2466"],tags:{building:"yes"}},w197:{id:"w197",nodes:["n918","n921","n922","n919","n918"],tags:{building:"yes"}},w198:{id:"w198",nodes:["n923","n925","n926","n924","n923"],tags:{building:"yes"}},w199:{id:"w199",nodes:["n925","n927","n932","n928","n929","n926","n925"],tags:{building:"yes"}},w2:{id:"w2",nodes:["n3523","n2182","n2160"],tags:{highway:"service"}},w20:{id:"w20",nodes:["n103","n104","n105","n106","n107","n108","n109","n110","n111","n112","n113","n114","n103"],tags:{building:"yes"}},w200:{id:"w200",nodes:["n927","n930","n931","n932","n927"],tags:{building:"yes"}},w201:{id:"w201",nodes:["n930","n933","n934","n935","n931","n930"],tags:{building:"yes"}},w202:{id:"w202",nodes:["n933","n936","n937","n934","n933"],tags:{building:"yes"}},w203:{id:"w203",nodes:["n936","n938","n942","n939","n954","n937","n936"],tags:{building:"yes"}},w204:{id:"w204",nodes:["n938","n940","n941","n942","n938"],tags:{building:"yes"}},w205:{id:"w205",nodes:["n940","n943","n944","n941","n940"],tags:{building:"yes"}},w206:{id:"w206",nodes:["n943","n945","n946","n947","n948","n944","n943"],tags:{building:"yes"}},w207:{id:"w207",nodes:["n944","n949","n950","n951","n941","n944"],tags:{building:"yes"}},w208:{id:"w208",nodes:["n941","n951","n952","n939","n942","n941"],tags:{building:"yes"}},w209:{id:"w209",nodes:["n952","n953","n954","n939","n952"],tags:{building:"yes"}},w21:{id:"w21",nodes:["n115","n116","n117","n118","n115"],tags:{building:"yes"}},w210:{id:"w210",nodes:["n953","n955","n956","n934","n937","n954","n953"],tags:{building:"yes"}},w211:{id:"w211",nodes:["n964","n965"],tags:{highway:"footway"}},w212:{id:"w212",nodes:["n966","n983","n967","n989"],tags:{highway:"footway"}},w213:{id:"w213",nodes:["n965","n968","n969","n966","n970","n971","n965"],tags:{highway:"footway"}},w214:{id:"w214",nodes:["n973","n999","n992","n974","n975","n976","n993","n977","n978","n979","n980","n967","n981","n1000","n1001","n1002","n1003","n1004","n1005","n1006","n1007","n1008","n1009"],tags:{footway:"sidewalk",highway:"footway"}},w215:{id:"w215",nodes:["n978","n982","n983","n984","n985","n986","n987","n988","n981"],tags:{highway:"footway"}},w216:{id:"w216",nodes:["n976","n990","n991","n992"],tags:{highway:"footway"}},w217:{id:"w217",nodes:["n998","n999"],tags:{highway:"footway"}},w218:{id:"w218",nodes:["n1019","n3355","n1020"],tags:{footway:"sidewalk",highway:"footway"}},w219:{id:"w219",nodes:["n719","n1026","n1027"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w22:{id:"w22",nodes:["n119","n120","n121","n122","n119"],tags:{building:"yes"}},w220:{id:"w220",nodes:["n1027","n1028","n1019"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w221:{id:"w221",nodes:["n2080","n1828","n1863","n1829"],tags:{highway:"tertiary",name:"Constantine Street"}},w222:{id:"w222",nodes:["n1029","n1030","n1031"],tags:{highway:"service"}},w223:{id:"w223",nodes:["n2213","n2171","n2183","n2180","n2205","n2177","n2179","n2218","n2200","n2188","n2169","n2196","n2162","n2170","n2211","n2216","n2204","n2220","n2164","n2210","n2217","n2189","n460","n453","n2282"],tags:{name:"Rocky River",waterway:"river"}},w224:{id:"w224",nodes:["n3750","n3751","n3752"],tags:{highway:"service",service:"alley",surface:"unpaved"}},w225:{id:"w225",nodes:["n2134","n2127","n2313","n2109","n2112","n2129","n2156","n2146","n2126","n2153","n2288","n2283","n2284","n2131","n2286","n2287","n2285","n2132","n2140","n2289","n2122","n2114","n2149","n2119","n2106","n2111","n2145","n2113","n2117","n2159","n2143","n2123","n2142","n2116","n2154","n2139","n2150","n2157","n2120","n2138","n2130","n2136","n2155","n2107","n2141","n2124","n3754","n2121","n2105","n2108","n3755","n2128","n2110","n2152","n2125","n2135","n2186","n2115","n2144","n2137","n2133","n2148","n2118","n1871","n1875","n1872","n2041","n1873","n2042","n1874","n1884","n1870","n2151","n2147","n2158","n2104","n2134"]},w226:{id:"w226",nodes:["n2243","n2280","n2244","n2245","n2246","n2247","n1931","n1932","n1933","n1934","n1935","n1936","n1937","n1938","n4681","n1939","n1940","n1941","n1942","n1943","n1944","n1945","n1946","n1947"],tags:{highway:"path",name:"Riverwalk Trail",surface:"asphalt",width:"3"}},w227:{id:"w227",nodes:["n2994","n3012","n3011","n2958"],tags:{highway:"secondary",name:"Main Street"}},w228:{id:"w228",nodes:["n2747","n2762","n2757","n2746","n2761","n2758","n2760","n2755","n2749","n2691","n1028","n2432","n2414","n2413","n2412","n2411","n2410","n720","n726","n370","n368","n2748"],tags:{highway:"primary",name:"Main Street"}},w229:{id:"w229",nodes:["n2083","n2103","n2102","n2084","n2085","n2086","n2087","n2242","n471","n324","n2101","n332","n1868"],tags:{name:"Conrail Railroad",railway:"rail"}},w23:{id:"w23",nodes:["n123","n124","n125","n126","n123"],tags:{building:"yes"}},w230:{id:"w230",nodes:["n2232","n2236","n2231","n2230","n2226","n2241","n2237","n2227","n1182","n2233","n2228","n2229","n1183","n2234","n19","n1891","n20","n2223","n2224","n2238","n2235","n2240","n2225","n2239"],tags:{name:"Saint Joseph River",waterway:"river"}},w231:{id:"w231",nodes:["n456","n1036","n1037","n1038"],tags:{barrier:"wall"}},w232:{id:"w232",nodes:["n1034","n1039","n1040"],tags:{barrier:"wall"}},w233:{id:"w233",nodes:["n1041","n1042","n1043","n1044","n1045","n1046","n1041"],tags:{access:"private",leisure:"swimming_pool"}},w234:{id:"w234",nodes:["n1047","n1048"],tags:{barrier:"hedge"}},w235:{id:"w235",nodes:["n1049","n1050","n1051","n1052","n1049"],tags:{building:"yes"}},w236:{id:"w236",nodes:["n1053","n1054","n1055","n1056","n1057","n1058","n1059","n1060","n1053"],tags:{building:"yes"}},w237:{id:"w237",nodes:["n1061","n1062","n1063","n1064","n1065","n1061"],tags:{building:"yes"}},w238:{id:"w238",nodes:["n1066","n1067","n1068","n1069","n1070","n1071","n1066"],tags:{building:"yes"}},w239:{id:"w239",nodes:["n1072","n1073","n1074","n1075","n1072"],tags:{building:"yes"}},w24:{id:"w24",nodes:["n127","n128","n129","n130","n127"],tags:{building:"yes"}},w240:{id:"w240",nodes:["n1076","n1077","n1078","n1079","n1080","n1081","n1076"],tags:{building:"yes"}},w241:{id:"w241",nodes:["n1082","n1083","n1084","n1085","n1082"],tags:{building:"yes"}},w242:{id:"w242",nodes:["n1086","n1087","n1088","n1089","n1086"],tags:{building:"yes"}},w243:{id:"w243",nodes:["n1090","n1091","n1092","n1093","n1094","n1095","n1096","n1097","n1090"],tags:{building:"yes"}},w244:{id:"w244",nodes:["n1098","n1099","n1100","n1101"],tags:{barrier:"fence"}},w245:{id:"w245",nodes:["n1102","n835","n30","n2590","n35","n29","n2591","n34","n28","n2592","n2312","n32","n2593","n31","n33","n2594","n2595","n1102"],tags:{highway:"service"}},w246:{id:"w246",nodes:["n1103","n1139","n1104"],tags:{barrier:"fence"}},w247:{id:"w247",nodes:["n1105","n1106","n1107","n1108","n1109","n1110","n1111","n1112","n1113","n1114","n1105"],tags:{building:"yes"}},w248:{id:"w248",nodes:["n1115","n1116","n1117","n1118","n1119","n1120","n1115"],tags:{building:"yes"}},w249:{id:"w249",nodes:["n1121","n1122","n1123","n1124","n1121"],tags:{building:"yes"}},w25:{id:"w25",nodes:["n131","n132","n133","n134","n135","n136","n137","n138","n139","n140","n141","n142","n131"],tags:{building:"yes"}},w250:{id:"w250",nodes:["n1125","n1126","n1127","n1128","n1129","n1130","n1131","n1132","n1133","n1134","n1135","n1136","n1125"],tags:{building:"yes"}},w251:{id:"w251",nodes:["n1137","n1138","n1139"],tags:{barrier:"fence"}},w252:{id:"w252",nodes:["n876","n1140","n1141"],tags:{footway:"sidewalk",highway:"footway"}},w253:{id:"w253",nodes:["n1141","n1142","n1143","n1144","n1145","n1146"],tags:{footway:"sidewalk",highway:"footway"}},w254:{id:"w254",nodes:["n1146","n4743","n1147","n1148"],tags:{footway:"sidewalk",highway:"footway"}},w255:{id:"w255",nodes:["n1148","n1149","n1150","n1151"],tags:{bridge:"yes",footway:"sidewalk",highway:"footway",layer:"1"}},w256:{id:"w256",nodes:["n1151","n1153","n1154","n1155"],tags:{footway:"sidewalk",highway:"footway"}},w257:{id:"w257",nodes:["n1155","n1156"],tags:{bridge:"yes",footway:"sidewalk",highway:"footway",layer:"1"}},w258:{id:"w258",nodes:["n1157","n1158"],tags:{barrier:"retaining_wall"}},w259:{id:"w259",nodes:["n1156","n1161","n1159","n1160","n719"],tags:{footway:"sidewalk",highway:"footway"}},w26:{id:"w26",nodes:["n143","n608","n144"],tags:{highway:"service"}},w260:{id:"w260",nodes:["n1162","n1163","n1164","n1165","n1166","n1167","n1168","n1169","n1170","n2528"],tags:{highway:"footway"}},w261:{id:"w261",nodes:["n1171","n1172","n1173"],tags:{barrier:"wall"}},w262:{id:"w262",nodes:["n1175","n1176","n1177","n1178","n1179","n1180","n1181","n1175"],tags:{natural:"wood"}},w263:{id:"w263",nodes:["n1947","n1184","n1948","n1185","n1949","n1957","n1950","n480","n1951","n479","n478","n477","n1952","n1851","n1956","n2248","n619","n618","n2249","n2250","n2251","n617","n2252","n616","n2253","n829","n2254","n827","n828","n2255","n830","n2256","n826","n2257","n831","n2258","n832","n835","n834","n2312","n2267","n2259","n833","n2268","n2260","n836","n2261","n837","n2262","n838","n2263","n2264","n839","n2265","n840","n2266"],tags:{highway:"path",name:"Riverwalk Trail",surface:"asphalt",width:"3"}},w264:{id:"w264",nodes:["n1186","n1187","n1188","n1189","n1186"],tags:{building:"yes"}},w265:{id:"w265",nodes:["n1190","n1191","n1192","n1193","n1190"],tags:{building:"yes"}},w266:{id:"w266",nodes:["n1194","n1195","n1196","n1197","n1198","n1199","n1200","n1201","n1194"],tags:{building:"yes"}},w267:{id:"w267",nodes:["n1205","n1206","n1207","n1208","n1209","n1210","n1205"],tags:{building:"house"}},w268:{id:"w268",nodes:["n1211","n1212","n1213","n1214","n1215","n1216","n1217","n1218","n1219","n1220","n1211"],tags:{building:"house"}},w269:{id:"w269",nodes:["n1221","n1225","n1222","n1223","n1224","n1221"],tags:{building:"house"}},w27:{id:"w27",nodes:["n145","n147","n146"],tags:{highway:"footway"}},w270:{id:"w270",nodes:["n1225","n1226","n1227","n1229","n1228"],tags:{barrier:"fence"}},w271:{id:"w271",nodes:["n1229","n1230"],tags:{barrier:"fence"}},w272:{id:"w272",nodes:["n1231","n1232","n1233","n1234","n1235","n1236","n1237","n1238","n1231"],tags:{building:"house"}},w273:{id:"w273",nodes:["n1239","n1240","n1241","n1242","n1243","n1244","n1245","n1246","n1239"],tags:{building:"house"}},w274:{id:"w274",nodes:["n1247","n1248","n1249","n1250","n1247"],tags:{building:"house"}},w275:{id:"w275",nodes:["n1251","n1252","n1253","n1254","n1255","n1256","n1251"],tags:{building:"house"}},w276:{id:"w276",nodes:["n1257","n1258","n1259","n1260","n1257"],tags:{building:"shed"}},w277:{id:"w277",nodes:["n1261","n1262","n1263","n1264","n1265","n1266","n1267","n1268","n1261"],tags:{building:"house"}},w278:{id:"w278",nodes:["n1269","n1270","n1271","n1272","n1273","n1274","n1284","n1269"],tags:{building:"house"}},w279:{id:"w279",nodes:["n1275","n1276","n1277","n1278","n1279","n1280","n1275"],tags:{building:"house"}},w28:{id:"w28",nodes:["n147","n148"],tags:{highway:"footway"}},w280:{id:"w280",nodes:["n1281","n1282","n1283","n1284"],tags:{barrier:"fence"}},w281:{id:"w281",nodes:["n1285","n1286","n1287","n1288","n1285"],tags:{building:"house"}},w282:{id:"w282",nodes:["n1289","n1290","n1291","n1292","n1293","n1294","n1295","n1296","n1289"],tags:{building:"house"}},w283:{id:"w283",nodes:["n1297","n1298","n1299","n1300","n1301","n1302","n1297"],tags:{access:"private",leisure:"swimming_pool"}},w284:{id:"w284",nodes:["n1303","n1304","n1305","n1306","n1307","n1308","n1309","n1310","n1311","n1312","n1303"],tags:{building:"house"}},w285:{id:"w285",nodes:["n1313","n1314","n1315","n1316","n1313"],tags:{building:"house"}},w286:{id:"w286",nodes:["n1317","n1318","n1319","n1320","n1321","n1322","n1323","n1324","n1325","n1326","n1327","n1328","n1329","n1330","n1317"],tags:{building:"house"}},w287:{id:"w287",nodes:["n1331","n1332","n1333","n1334","n1465","n1335","n1336","n1331"],tags:{building:"yes"}},w288:{id:"w288",nodes:["n1349","n1350","n1351","n1352","n1353","n1354","n1355","n1337","n1338","n1341","n1342","n1343","n1344","n1345","n1346","n1347","n1348","n1339","n1340","n1349"],tags:{access:"private",leisure:"swimming_pool"}},w289:{id:"w289",nodes:["n1356","n1331"],tags:{barrier:"fence"}},w29:{id:"w29",nodes:["n149","n874","n150","n151","n897","n898","n875","n152"],tags:{highway:"service",oneway:"yes"}},w290:{id:"w290",nodes:["n1357","n1358","n1359","n1360","n1357"],tags:{building:"shed"}},w291:{id:"w291",nodes:["n1358","n1361","n1362"],tags:{barrier:"fence"}},w292:{id:"w292",nodes:["n1363","n1364","n1365","n1366","n1367","n1368","n1363"],tags:{building:"house"}},w293:{id:"w293",nodes:["n1369","n1370","n1371","n1372","n1373","n1374","n1369"],tags:{leisure:"swimming_pool"}},w294:{id:"w294",nodes:["n1367","n1375","n1376","n1377"],tags:{barrier:"fence"}},w295:{id:"w295",nodes:["n1378","n1379","n1380","n1381","n1378"],tags:{building:"house"}},w296:{id:"w296",nodes:["n1382","n1383","n1384","n1385","n1386","n1387","n1382"],tags:{building:"house"}},w297:{id:"w297",nodes:["n1388","n1389","n1390","n1391","n1392","n1393","n1388"],tags:{building:"house"}},w298:{id:"w298",nodes:["n1394","n1395","n1396","n1397","n1394"],tags:{building:"house"}},w299:{id:"w299",nodes:["n1398","n1399","n1400","n1401","n1398"],tags:{access:"private3",leisure:"swimming_pool"}},w3:{id:"w3",nodes:["n1","n2"],tags:{highway:"track",name:"Water Street"}},w30:{id:"w30",nodes:["n153","n154","n155","n156","n153"],tags:{amenity:"parking"}},w300:{id:"w300",nodes:["n1402","n1403","n1404","n1405","n1406","n1407","n1408","n1409","n1410","n1411","n1412","n1413","n1402"],tags:{building:"house"}},w301:{id:"w301",nodes:["n1414","n1415","n1416","n1417","n1414"],tags:{building:"garage"}},w302:{id:"w302",nodes:["n1406","n1418","n1419","n1403"],tags:{barrier:"fence"}},w303:{id:"w303",nodes:["n1423","n1424","n1425","n1426","n1427","n1428","n1429","n1430","n1431","n1432","n1423"],tags:{building:"house"}},w304:{id:"w304",nodes:["n1433","n1434","n1435","n1446","n1436","n1437","n1438","n1439","n1444","n1440","n1441","n1445","n1442","n1443","n1433"],tags:{access:"private",leisure:"swimming_pool"}},w305:{id:"w305",nodes:["n1447","n1448","n1452","n1453","n1454","n1451","n1449","n1450","n1447"],tags:{building:"house"}},w306:{id:"w306",nodes:["n1455","n1456","n1457","n1458","n1455"],tags:{building:"shed"}},w307:{id:"w307",nodes:["n1459","n1460","n1461","n1462","n1459"],tags:{building:"shed"}},w308:{id:"w308",nodes:["n1463","n1464"],tags:{barrier:"fence"}},w309:{id:"w309",nodes:["n1465","n1466","n1467","n1468"],tags:{barrier:"fence"}},w31:{id:"w31",nodes:["n157","n605","n158"],tags:{highway:"service"}},w310:{id:"w310",nodes:["n1469","n1481","n1463"],tags:{barrier:"hedge"}},w311:{id:"w311",nodes:["n1470","n1471","n1472","n1473","n1474","n1475","n1480","n1476","n1477","n1478","n1479","n1470"],tags:{building:"house"}},w312:{id:"w312",nodes:["n1480","n1481"],tags:{barrier:"wall"}},w313:{id:"w313",nodes:["n1482","n1483","n1484","n1485","n1486","n1487","n1488","n1489","n1490","n1491","n1482"],tags:{access:"private",leisure:"swimming_pool"}},w314:{id:"w314",nodes:["n1492","n1493","n1494","n1495","n1496","n1497","n1498","n1499","n1500","n1501","n1502","n1503","n1504","n1505","n1492"],tags:{building:"house"}},w315:{id:"w315",nodes:["n1506","n1507","n1508","n1509","n1510","n1511","n1512","n1513","n1514","n1515","n1506"],tags:{building:"house"}},w316:{id:"w316",nodes:["n1516","n1517","n1518","n1519","n1520","n1521","n1522","n1523","n1516"],tags:{building:"house"}},w317:{id:"w317",nodes:["n1524","n1525","n1526","n1527","n1528","n1529","n1530","n1531","n1524"],tags:{building:"house"}},w318:{id:"w318",nodes:["n1532","n1533"],tags:{barrier:"fence"}},w319:{id:"w319",nodes:["n1534","n1532","n1535"],tags:{barrier:"fence"}},w32:{id:"w32",nodes:["n159","n160","n161","n162","n159"],tags:{amenity:"parking"}},w320:{id:"w320",nodes:["n1536","n1537","n1538","n1539","n1536"],tags:{building:"shed"}},w321:{id:"w321",nodes:["n1540","n1541","n1542","n1543","n1540"],tags:{building:"shed"}},w322:{id:"w322",nodes:["n1544","n1545","n1546","n1547","n1544"],tags:{building:"shed"}},w323:{id:"w323",nodes:["n1548","n1549","n1550","n1551","n1548"],tags:{building:"house"}},w324:{id:"w324",nodes:["n1552","n1553","n1554","n1555","n1556","n1557","n1558","n1559","n1552"],tags:{building:"house"}},w325:{id:"w325",nodes:["n1560","n1561","n1562","n1563","n1564","n1565","n1566","n1567","n1560"],tags:{building:"house"}},w326:{id:"w326",nodes:["n1561","n1568","n1569","n1570"],tags:{barrier:"wall"}},w327:{id:"w327",nodes:["n1571","n1572"],tags:{barrier:"fence"}},w328:{id:"w328",nodes:["n1573","n1574","n1575","n1576","n1573"],tags:{building:"house"}},w329:{id:"w329",nodes:["n1577","n1578","n1579","n1580","n1581","n1582","n1583","n1584","n1585","n1586","n1577"],tags:{building:"house"}},w33:{id:"w33",nodes:["n157","n163"],tags:{highway:"service"}},w330:{id:"w330",nodes:["n1587","n1588","n1589","n1590","n1591","n1592","n1593","n1594","n1587"],tags:{building:"house"}},w331:{id:"w331",nodes:["n1595","n1596","n1597","n1598","n1599","n1600","n1601","n1595"],tags:{access:"private",leisure:"swimming_pool"}},w332:{id:"w332",nodes:["n1602","n1603","n1604","n1605","n1606","n1607","n1608","n1609","n1611","n1610","n1612","n1613","n1602"],tags:{building:"house"}},w333:{id:"w333",nodes:["n2018","n1626","n1627","n2017","n2018"],tags:{amenity:"shelter",building:"yes",shelter_type:"picnic_shelter"}},w334:{id:"w334",nodes:["n2","n3","n2764"],tags:{highway:"service",name:"Water Street"}},w335:{id:"w335",nodes:["n3","n1628","n1614"],tags:{highway:"service"}},w336:{id:"w336",nodes:["n3198","n4545","n2747"],tags:{highway:"residential",name:"Morris Avenue"}},w337:{id:"w337",nodes:["n1629","n3504"],tags:{highway:"service",service:"alley",surface:"unpaved"}},w338:{id:"w338",nodes:["n1813","n1635","n1814","n1634","n1815","n1632","n1816","n1817"],tags:{highway:"service",service:"parking_aisle"}},w339:{id:"w339",nodes:["n1827","n4684","n4690","n1842","n4686","n4685","n1826","n1828","n1846","n1645","n1637","n4703","n1641"],tags:{highway:"residential",name:"Millard Street"}},w34:{id:"w34",nodes:["n164","n165","n166","n171","n866","n172","n167","n168","n169","n910","n170","n164"],tags:{amenity:"parking"}},w340:{id:"w340",nodes:["n1824","n1825"],tags:{highway:"service",service:"parking_aisle"}},w341:{id:"w341",nodes:["n1701","n1702","n1703","n1704","n1705","n1706","n1701"],tags:{building:"yes"}},w342:{id:"w342",nodes:["n1855","n1860","n1856","n1775","n1804","n1776","n1855"],tags:{amenity:"parking",fee:"no"}},w343:{id:"w343",nodes:["n1757","n1758","n1759","n1760","n1757"],tags:{building:"yes"}},w344:{id:"w344",nodes:["n1659","n1660","n1661","n1662","n1663","n1664","n1665","n1666","n1659"],tags:{building:"school"}},w345:{id:"w345",nodes:["n1751","n1752","n1753","n1754","n1755","n1756","n1751"],tags:{building:"yes"}},w346:{id:"w346",nodes:["n1641","n1676","n1673","n1639","n1810","n1642","n1849","n4759","n1845"],tags:{highway:"residential",name:"Douglas Avenue"}},w347:{id:"w347",nodes:["n1642","n1643","n1031","n1630","n845","n1631","n816","n1831","n902","n905","n152","n149","n1832","n1850","n878","n1833","n1852","n42","n1834","n61","n60","n1851","n1835"],tags:{highway:"primary",name:"Michigan Avenue"}},w348:{id:"w348",nodes:["n1650","n1651","n1652","n1653","n1654","n1655","n1656","n1657","n1658","n1650"],tags:{leisure:"playground"}},w349:{id:"w349",nodes:["n1861","n1818","n1819","n1820","n1821","n1825","n1823","n1639"],tags:{highway:"service"}},w35:{id:"w35",nodes:["n168","n167","n172"],tags:{barrier:"fence",fence_type:"chain_link"}},w350:{id:"w350",nodes:["n1783","n1819","n1784","n1857","n1861","n1858","n1783"],tags:{amenity:"parking"}},w351:{id:"w351",nodes:["n1717","n1718","n1719","n1720","n1717"],tags:{building:"yes"}},w352:{id:"w352",nodes:["n1743","n1744","n1745","n1746","n1747","n1748","n1749","n1750","n1743"],tags:{building:"yes"}},w353:{id:"w353",nodes:["n1637","n1636","n1029","n4715","n1630"],tags:{highway:"residential",name:"Lincoln Avenue"}},w354:{id:"w354",nodes:["n1713","n1714","n1715","n1716","n1713"],tags:{building:"yes"}},w355:{id:"w355",nodes:["n1689","n1690","n1691","n1692","n1693","n1694","n1695","n1696","n1689"],tags:{building:"yes"}},w356:{id:"w356",nodes:["n1631","n4717","n1840","n4745","n1841"],tags:{highway:"residential",name:"Hook Avenue"}},w357:{id:"w357",nodes:["n1737","n1738","n1739","n1740","n1741","n1742","n1737"],tags:{building:"yes"}},w358:{id:"w358",nodes:["n1707","n1708","n1709","n1710","n1711","n1712","n1707"],tags:{building:"yes"}},w359:{id:"w359",nodes:["n1829","n4695","n4697","n1843","n4698","n4701","n1638","n4702","n4705","n1636","n4706","n4707","n1633"],tags:{highway:"residential",name:"South Street"}},w36:{id:"w36",nodes:["n910","n171","n866","n172"],tags:{barrier:"fence",fence_type:"chain_link"}},w360:{id:"w360",nodes:["n1767","n1768","n1769","n1770","n1771","n1772","n1773","n1774","n1767"],tags:{building:"yes"}},w361:{id:"w361",nodes:["n1859","n1860","n1804","n1640","n1805","n1817","n1806","n1644","n1811","n1807","n1808","n3419","n1812","n1790","n3418","n3744","n1809","n1813","n1810"],tags:{highway:"service"}},w362:{id:"w362",nodes:["n1639","n1683","n4710","n1633"],tags:{highway:"residential",name:"South Street",oneway:"yes"}},w363:{id:"w363",nodes:["n1646","n1647","n1648","n1649","n1646"],tags:{leisure:"pitch",pitch:"basketball"}},w364:{id:"w364",nodes:["n3820","n3821","n3822","n3823","n3824","n3825","n3826","n3827","n3828","n3829","n3830","n3838","n3839","n3820"],tags:{amenity:"school",name:"Three Rivers Middle School"}},w365:{id:"w365",nodes:["n1721","n1722","n1723","n1724","n1725","n1726","n1727","n1728","n1729","n1730","n1731","n1732","n1733","n1734","n1735","n1736","n1721"],tags:{building:"yes"}},w366:{id:"w366",nodes:["n1791","n1792","n1793","n1794","n1795","n1796","n1798","n1799","n1800","n1801","n1802","n1803","n1791"],tags:{amenity:"parking"}},w367:{id:"w367",nodes:["n1633","n4708","n4711","n1643","n4712","n1838","n4752","n1839"],tags:{highway:"residential",name:"Grant Avenue"}},w368:{id:"w368",nodes:["n1853","n1687","n1688","n1854","n1853"],tags:{amenity:"library",building:"yes",name:"Three Rivers Public Library"}},w369:{id:"w369",nodes:["n1777","n1778","n1779","n1780","n1781","n1782","n1777"],tags:{amenity:"parking"}},w37:{id:"w37",nodes:["n173","n174","n175","n176","n177","n178","n179","n180","n173"],tags:{building:"yes"}},w370:{id:"w370",nodes:["n1645","n1638","n858","n4718","n1631"],tags:{highway:"residential",name:"Hook Avenue"}},w371:{id:"w371",nodes:["n3836","n3835","n4624","n3831","n4632","n3834","n3832","n3833","n3830","n3838","n3839","n3837","n3836"],tags:{amenity:"school",name:"Three Rivers High School"}},w372:{id:"w372",nodes:["n1697","n1698","n1699","n1700","n1697"],tags:{building:"yes"}},w373:{id:"w373",nodes:["n2891","n1785","n1786","n3394","n1787","n1788","n1789","n1830","n1836","n1837","n1848","n3409","n2891"],tags:{amenity:"parking"}},w374:{id:"w374",nodes:["n1761","n1762","n1763","n1764","n1765","n1766","n1761"],tags:{building:"yes"}},w375:{id:"w375",nodes:["n1822","n1823"],tags:{highway:"service",service:"parking_aisle"}},w376:{id:"w376",nodes:["n1677","n1678","n1679","n1680","n1681","n1682","n1677"],tags:{amenity:"parking"}},w377:{id:"w377",nodes:["n1676","n1675","n1674","n1673"],tags:{highway:"service",oneway:"yes"}},w378:{id:"w378",nodes:["n1667","n1668","n1669","n1670","n1671","n1672","n1667"],tags:{amenity:"school",name:"Andrews Elementary School"}},w379:{id:"w379",nodes:["n1630","n4714","n1847","n4750","n1844"],tags:{highway:"residential",name:"Lincoln Avenue"}},w38:{id:"w38",nodes:["n181","n182","n183","n185","n184","n181"],tags:{building:"yes"}},w380:{id:"w380",nodes:["n1683","n3745","n1686","n1633"],tags:{highway:"service",oneway:"yes",service:"parking_aisle"}},w381:{id:"w381",nodes:["n2022","n2037"],tags:{highway:"footway"}},w382:{id:"w382",nodes:["n1826","n1863"],tags:{highway:"residential"}},w383:{id:"w383",nodes:["n2011","n2012","n739","n2013","n2014","n2029","n2011"],tags:{amenity:"shelter",building:"yes",shelter_type:"picnic_shelter"}},w384:{id:"w384",nodes:["n2064","n2065","n2066","n2067","n2068","n2069","n2070","n2071","n2072","n2073","n2074","n2075","n2076","n2077","n2078","n2079","n2064"],tags:{building:"yes"}},w385:{id:"w385",nodes:["n1923","n1924","n1925","n1926","n1927","n1928","n1930","n1929","n1923"],tags:{natural:"water"}},w386:{id:"w386",nodes:["n1827","n14","n1886","n15","n1887","n16","n1888","n18","n17","n1889","n12","n13","n1890","n485","n1864","n11","n10","n2058","n2036","n1865","n2020","n9","n8","n1866","n295","n1867"],tags:{highway:"service"}},w387:{id:"w387",nodes:["n1846","n1843","n865","n157","n4721","n1831"],tags:{highway:"residential",name:"Andrews Street"}},w388:{id:"w388",nodes:["n2019","n2020","n2021","n2022","n2023","n2024","n2025","n2026","n2027","n2028","n2029"],tags:{highway:"footway"}},w389:{id:"w389",nodes:["n2217","n2222","n2221","n2219","n1877","n1879","n1882","n1883","n484","n1885","n483","n1880","n1881","n1878","n1884","n2223"],tags:{name:"Rocky River",waterway:"river"}},w39:{id:"w39",nodes:["n185","n186","n187"],tags:{barrier:"fence"}},w390:{id:"w390",nodes:["n2050","n2051","n2052","n2053","n2050"],tags:{amenity:"shelter",building:"yes",shelter_type:"picnic_shelter"}},w391:{id:"w391",nodes:["n2089","n2090","n2091","n2092","n2093","n2094","n2311","n2095","n2096","n2097","n2098","n1174","n2099","n751","n43","n2062","n4725","n873","n1832"],tags:{highway:"residential",name:"Constantine Street"}},w392:{id:"w392",nodes:["n1869","n212","n436","n2281","n2081"],tags:{highway:"primary",name:"Michigan Avenue"}},w393:{id:"w393",nodes:["n1829","n611","n144","n4694","n602","n1832"],tags:{highway:"tertiary",name:"Constantine Street"}},w394:{id:"w394",nodes:["n1997","n1998","n2000","n1999"],tags:{highway:"service",service:"parking_aisle"}},w395:{id:"w395",nodes:["n1835","n1869"],tags:{bridge:"yes",highway:"primary",name:"Michigan Avenue"}},w396:{id:"w396",nodes:["n2000","n2001"],tags:{highway:"service",service:"parking_aisle"}},w397:{id:"w397",nodes:["n2082","n4688","n1842","n308","n498","n509","n246","n241","n1867","n4645","n293","n1834"],tags:{highway:"residential",name:"Spring Street"}},w398:{id:"w398",nodes:["n2015","n2016","n2017","n2018","n2015"],tags:{building:"yes"}},w399:{id:"w399",nodes:["n2062","n45","n2063","n877","n41","n1852"],tags:{highway:"service"}},w4:{id:"w4",nodes:["n7","n38","n378","n379","n7"],tags:{building:"yes"}},w40:{id:"w40",nodes:["n188","n189","n190","n191","n192","n193","n188"],tags:{building:"house"}},w400:{id:"w400",nodes:["n1968","n1969","n1970","n1971","n2007","n1972","n1973","n1978","n1974","n1977","n1976","n1975","n1968"],tags:{amenity:"parking"}},w401:{id:"w401",nodes:["n1963","n1964"],tags:{bridge:"yes",highway:"footway"}},w402:{id:"w402",nodes:["n1892","n1893","n1894","n1895","n1896","n1897","n1898","n1899","n1900","n1901","n1902","n1903","n1892"],tags:{"addr:city":"Three Rivers","addr:housenumber":"112","addr:postcode":"49093","addr:state":"MI","addr:street":"Spring Street",barrier:"fence",name:"Scidmore Park Petting Zoo",tourism:"zoo",zoo:"petting_zoo"}},w403:{id:"w403",nodes:["n1957","n1958","n1959","n481","n1960","n482","n1949"],tags:{highway:"path"}},w404:{id:"w404",nodes:["n2281","n27","n330","n1987","n1988"],tags:{highway:"service"}},w405:{id:"w405",nodes:["n2249","n2269","n2270","n2271","n2272","n454","n455","n2273"],tags:{highway:"path",name:"Riverwalk Trail"}},w406:{id:"w406",nodes:["n1947","n1624","n1625","n2030","n2033","n4658","n4659","n2031","n2032","n2021"],tags:{highway:"footway"}},w407:{id:"w407",nodes:["n2034","n2036","n2009"],tags:{highway:"footway"}},w408:{id:"w408",nodes:["n1964","n1965","n2002","n1966","n21","n1967","n1969"],tags:{highway:"footway"}},w409:{id:"w409",nodes:["n1904","n1905","n1906","n1907","n1908","n1909","n748","n1910","n747","n1911","n749","n1912","n750","n1913","n1922","n1914","n1921","n1915","n746","n1916","n745","n1917","n744","n1918","n743","n742","n1919","n741","n1920","n740","n1904"],tags:{natural:"water"}},w41:{id:"w41",nodes:["n194","n195","n196","n197","n198","n199","n200","n201","n202","n203","n204","n205","n194"],tags:{building:"house"}},w410:{id:"w410",nodes:["n1868","n2088"],tags:{bridge:"yes",name:"Conrail Railroad",railway:"rail"}},w411:{id:"w411",nodes:["n2010","n2019","n2009","n2008","n2058","n2035","n1961","n1962","n1947","n1963"],tags:{highway:"footway"}},w412:{id:"w412",nodes:["n2290","n2043","n2044","n2045","n1872","n2041","n1873","n2042","n1874","n2046","n2047","n2048","n2049","n2290"],tags:{"addr:city":"Three Rivers","addr:housenumber":"112","addr:postcode":"49093","addr:state":"MI","addr:street":"Spring Street",leisure:"park",name:"Scidmore Park"}},w413:{id:"w413",nodes:["n1831","n876","n4720","n821","n2089"],tags:{highway:"residential",name:"Andrews Street"}},w414:{id:"w414",nodes:["n2002","n2003","n2004","n2005","n2006","n2007"],tags:{highway:"footway"}},w415:{id:"w415",nodes:["n1979","n1980","n1981","n1982","n1979"],tags:{amenity:"parking"}},w416:{id:"w416",nodes:["n2054","n2055","n2056","n2057","n2054"],tags:{amenity:"shelter",building:"yes",shelter_type:"picnic_shelter"}},w417:{id:"w417",nodes:["n2291","n2292","n2293","n2294","n2295","n2296","n2297","n2298","n2299","n1098","n2300","n2301","n2302","n2303","n2304","n2059","n2060","n2305","n2307","n2306","n2310","n2308","n2309","n2291"],tags:{leisure:"park",name:"Memory Isle Park"}},w418:{id:"w418",nodes:["n2033","n2034","n2035"],tags:{highway:"footway"}},w419:{id:"w419",nodes:["n1983","n1984","n1985","n1986","n1983"],tags:{amenity:"parking"}},w42:{id:"w42",nodes:["n206","n207","n208","n209","n210","n211","n206"],tags:{building:"house"}},w420:{id:"w420",nodes:["n1840","n4746","n4748","n1847","n4749","n4755","n1838","n4754","n4756","n1849"],tags:{highway:"residential",name:"French Street"}},w421:{id:"w421",nodes:["n2337","n2268"],tags:{highway:"path"}},w422:{id:"w422",nodes:["n2338","n2339","n2320","n2317","n2319","n2318","n2340","n2341","n2342","n2343","n2344","n2345","n2346","n2347","n2348","n2338"],tags:{natural:"water"}},w423:{id:"w423",nodes:["n2180","n2349","n2350","n2351","n2352","n2404","n2353","n2354","n2355","n2356","n2357","n2358","n2359","n2360","n2361","n2362","n2363","n2364","n2365","n2366","n2370","n2371","n2372","n2373","n2374","n2375","n2377","n2378","n2380","n2381","n2382","n2383","n2386","n2389","n2390","n2391","n2392","n2393","n2396","n2397","n2401","n2402","n2321","n2322","n2323","n2403","n2180"],tags:{natural:"wetland"}},w424:{id:"w424",nodes:["n2324","n2316","n1841","n2315","n2314","n1844","n1839","n4758","n1845"],tags:{highway:"residential",name:"Pealer Street"}},w425:{id:"w425",nodes:["n2267","n2337","n2336","n2335","n2334","n2333","n2332","n2331","n2330","n37","n2329","n2328","n2327","n36","n2326","n2325","n2266"],tags:{highway:"path",name:"Riverwalk Trail"}},w426:{id:"w426",nodes:["n2478","n681","n680","n679","n2459","n2467","n2487","n2478"],tags:{building:"yes"}},w427:{id:"w427",nodes:["n2671","n2672","n2673","n2674","n2671"],tags:{building:"yes"}},w428:{id:"w428",nodes:["n2483","n2482","n2486","n2489","n2492","n2502","n2495","n2480","n2483"],tags:{building:"yes"}},w429:{id:"w429",nodes:["n2707","n2708","n2716","n2712","n2714","n2713","n2715","n2711","n2710","n2723","n2709","n2707"],tags:{amenity:"parking"}},w43:{id:"w43",nodes:["n1955","n1956"],tags:{footway:"sidewalk",highway:"footway",name:"Riverwalk Trail"}},w430:{id:"w430",nodes:["n2471","n2474","n2484","n2479","n2471"],tags:{building:"yes"}},w431:{id:"w431",nodes:["n2218","n2434","n2436","n2433","n2435","n2210"],tags:{name:"Rocky River",waterway:"river"}},w432:{id:"w432",nodes:["n2782","n2532","n2783","n2784","n2782"],tags:{amenity:"parking"}},w433:{id:"w433",nodes:["n2513","n649","n2520","n2514","n2507","n2513"],tags:{building:"yes"}},w434:{id:"w434",nodes:["n2470","n2468","n2461","n2465","n2470"],tags:{building:"yes"}},w435:{id:"w435",nodes:["n2598","n2599","n648","n649","n2520","n2598"],tags:{building:"yes"}},w436:{id:"w436",nodes:["n2639","n2640","n2641","n2642","n2643","n2644","n2645","n2646","n2647","n2648","n2639"],tags:{building:"yes"}},w437:{id:"w437",nodes:["n2503","n2512","n2508","n2499","n2503"],tags:{building:"yes"}},w438:{id:"w438",nodes:["n2440","n2800","n2774","n1"],tags:{highway:"residential",name:"Water Street"}},w439:{id:"w439",nodes:["n2675","n2676","n2677","n2678","n2675"],tags:{building:"yes"}},w44:{id:"w44",nodes:["n213","n214","n215","n216","n213"],tags:{building:"yes"}},w440:{id:"w440",nodes:["n2512","n2503","n2507","n2514","n2512"],tags:{building:"yes"}},w441:{id:"w441",nodes:["n2554","n2717","n674","n2720","n2798"],tags:{highway:"service",oneway:"yes"}},w442:{id:"w442",nodes:["n2583","n2596","n2584","n2585","n2595","n2586","n2587","n2588","n2589","n2583"],tags:{amenity:"parking"}},w443:{id:"w443",nodes:["n2629","n2627","n2628","n2616","n2630","n2629"],tags:{building:"yes"}},w444:{id:"w444",nodes:["n2717","n2724","n670","n2718","n669","n668","n2722","n2727"],tags:{highway:"service",oneway:"yes",service:"parking_aisle"}},w445:{id:"w445",nodes:["n2572","n2573"],tags:{bridge:"yes",highway:"path",name:"Riverwalk Trail"}},w446:{id:"w446",nodes:["n2603","n2604","n2601","n2605","n2606","n2607","n2603"],tags:{building:"yes"}},w447:{id:"w447",nodes:["n2780","n2777","n628","n624","n2779"],tags:{highway:"residential",name:"Foster Street",oneway:"yes"}},w448:{id:"w448",nodes:["n2733","n2734","n2735","n2736","n2737","n2738","n663","n664","n2739","n2733"],tags:{building:"yes"}},w449:{id:"w449",nodes:["n2564","n2565","n2566","n2567","n2568","n2794","n2795","n2564"],tags:{amenity:"parking"}},w45:{id:"w45",nodes:["n217","n218","n219","n220","n217"],tags:{amenity:"shelter",building:"yes",shelter_type:"picnic_shelter"}},w450:{id:"w450",nodes:["n2799","n2728","n2729","n2730","n2731","n2732","n2799"],tags:{building:"yes"}},w451:{id:"w451",nodes:["n2441","n1170","n2442","n2575","n2443","n2445","n2444","n2448","n2441"],tags:{amenity:"parking"}},w452:{id:"w452",nodes:["n2273","n457","n2569","n458","n2570"],tags:{highway:"path",name:"Riverwalk Trail"}},w453:{id:"w453",nodes:["n2447","n2242","n2448","n2527","n2530"],tags:{highway:"service"}},w454:{id:"w454",nodes:["n2560","n333","n2561"],tags:{highway:"service",service:"parking_aisle"}},w455:{id:"w455",nodes:["n2679","n2680","n2681","n2682","n2683","n2684","n2685","n2686","n2687","n2688","n2689","n2690","n2679"],tags:{building:"yes"}},w456:{id:"w456",nodes:["n2425","n2429","n2424"],tags:{bridge:"yes",highway:"residential",name:"Moore Street"}},w457:{id:"w457",nodes:["n2487","n2467","n2472","n2480","n2495","n2487"],tags:{building:"yes"}},w458:{id:"w458",nodes:["n2659","n2660","n2661","n2662","n678","n677","n2663","n2664","n2665","n2666","n675","n676","n2659"],tags:{building:"yes"}},w459:{id:"w459",nodes:["n2600","n2598","n2599","n2601","n2605","n2602","n2600"],tags:{building:"yes"}},w46:{id:"w46",nodes:["n221","n222","n223","n224","n221"],tags:{amenity:"shelter",building:"yes",shelter_type:"picnic_shelter"}},w460:{id:"w460",nodes:["n2468","n2464","n2455","n2457","n2461","n2468"],tags:{building:"yes"}},w461:{id:"w461",nodes:["n2478","n2473","n683","n682","n2463","n681","n2478"],tags:{building:"yes"}},w462:{id:"w462",nodes:["n2547","n473","n2548","n2549"],tags:{highway:"service",service:"parking_aisle"}},w463:{id:"w463",nodes:["n2573","n2574"],tags:{highway:"path",name:"Riverwalk Trail"}},w464:{id:"w464",nodes:["n2445","n2597","n2527","n2528","n2529","n2530","n2531","n2597"],tags:{highway:"service",service:"parking_aisle"}},w465:{id:"w465",nodes:["n2571","n459","n2572"],tags:{highway:"path",name:"Riverwalk Trail"}},w466:{id:"w466",nodes:["n2445","n2574","n2552","n442","n2551","n4727","n323","n2446"],tags:{highway:"service"}},w467:{id:"w467",nodes:["n2484","n2474","n2477","n2485","n2488","n2484"],tags:{building:"yes"}},w468:{id:"w468",nodes:["n2695","n2696","n2697","n2698","n2699","n2700","n2701","n2702","n2695"],tags:{building:"yes"}},w469:{id:"w469",nodes:["n2469","n2476","n2481","n2475","n920","n2466","n2469"],tags:{building:"yes"}},w47:{id:"w47",nodes:["n1988","n1997","n1989","n25","n24","n1990","n26","n1991","n21","n1992","n2006","n1993","n22","n1994","n23","n1995","n1999","n1996","n2001","n1988"],tags:{highway:"service"}},w470:{id:"w470",nodes:["n2473","n2470","n2465","n2458","n2462","n683","n2473"],tags:{building:"yes"}},w471:{id:"w471",nodes:["n2490","n2496","n994","n997","n998","n996","n995","n2485","n2477","n2490"],tags:{building:"yes"}},w472:{id:"w472",nodes:["n2424","n2426","n2427","n2428"],tags:{highway:"residential",name:"Moore Street"}},w473:{id:"w473",nodes:["n2432","n1026","n4741","n2554","n2425"],tags:{highway:"residential",name:"Moore Street"}},w474:{id:"w474",nodes:["n2577","n2576"],tags:{bridge:"yes",highway:"footway"}},w475:{id:"w475",nodes:["n2497","n2505","n2500","n2493","n2497"],tags:{building:"yes"}},w476:{id:"w476",nodes:["n2493","n2500","n2501","n2496","n2490","n2493"],tags:{building:"yes"}},w477:{id:"w477",nodes:["n2431","n360","n4726","n418","n397","n396","n2547","n646","n2447","n644","n2418","n424","n640","n2419","n2420","n2423"],tags:{highway:"residential",name:"Railroad Drive"}},w478:{id:"w478",nodes:["n2515","n2511","n2498","n2504","n2509","n2515"],tags:{building:"yes"}},w479:{id:"w479",nodes:["n2525","n651","n650","n2526","n2524","n653","n652","n656","n2523","n654","n2518","n2517","n2521","n2522","n2525"],tags:{building:"yes"}},w48:{id:"w48",nodes:["n225","n237","n226","n227","n228","n229","n230","n231","n232","n233","n234","n235","n236","n225"],tags:{building:"yes"}},w480:{id:"w480",nodes:["n2703","n2704","n2710","n2711","n2705","n2706","n2703"],tags:{amenity:"parking"}},w481:{id:"w481",nodes:["n2796","n2657","n2658","n2797","n2796"],tags:{building:"yes"}},w482:{id:"w482",nodes:["n2550","n2551","n442","n2552","n2553","n2550"],tags:{amenity:"parking"}},w483:{id:"w483",nodes:["n2790","n2542"],tags:{highway:"service",service:"parking_aisle"}},w484:{id:"w484",nodes:["n2311","n1102"],tags:{highway:"service"}},w485:{id:"w485",nodes:["n2515","n2509","n2516","n2519","n2515"],tags:{building:"yes"}},w486:{id:"w486",nodes:["n2506","n2502","n2492","n2491","n2494","n2506"],tags:{building:"yes"}},w487:{id:"w487",nodes:["n2667","n2668","n2669","n2670","n2667"],tags:{building:"yes"}},w488:{id:"w488",nodes:["n2616","n2608","n2617","n2618","n2619","n2620","n2621","n2622","n2623","n2624","n2625","n2626","n2627","n2628","n2616"],tags:{building:"yes"}},w489:{id:"w489",nodes:["n2081","n2430"],tags:{bridge:"yes",highway:"primary",name:"Michigan Avenue"}},w49:{id:"w49",nodes:["n237","n238"],tags:{highway:"footway"}},w490:{id:"w490",nodes:["n2410","n636","n730","n635","n2409","n2694","n2751","n2765","n2753","n2768","n2754","n2769","n2745","n2766","n4503","n2763","n4501","n2752","n2781"],tags:{highway:"residential",name:"Portage Avenue"}},w491:{id:"w491",nodes:["n2578","n2579","n2580","n2581","n2578"],tags:{amenity:"shelter",building:"yes",shelter_type:"picnic_shelter"}},w492:{id:"w492",nodes:["n2556","n2557","n2558","n2559","n2556"],tags:{amenity:"parking"}},w493:{id:"w493",nodes:["n2460","n2456","n687","n2453","n2454","n2460"],tags:{building:"yes"}},w494:{id:"w494",nodes:["n2471","n2479","n2476","n2469","n2471"],tags:{building:"yes"}},w495:{id:"w495",nodes:["n2724","n2725","n673","n672","n671","n2726","n2727"],tags:{highway:"service",oneway:"yes",service:"parking_aisle"}},w496:{id:"w496",nodes:["n2649","n2650","n2651","n2652","n2653","n2654","n2655","n2656","n2649"],tags:{building:"yes"}},w497:{id:"w497",nodes:["n2430","n2446","n343","n2101","n2560","n2431","n363","n2748"],tags:{highway:"primary",name:"Michigan Avenue"}},w498:{id:"w498",nodes:["n2691","n2692","n634","n633","n2693","n2694"],tags:{highway:"service"}},w499:{id:"w499",nodes:["n2423","n2415","n661","n2416","n2417","n2719","n2721","n2772","n2756","n2773","n2759","n2767"],tags:{highway:"residential",name:"West Street"}},w5:{id:"w5",nodes:["n380","n381","n382","n383","n429","n430","n380"],tags:{building:"yes"}},w50:{id:"w50",nodes:["n239","n499","n508","n245","n238","n242","n240"],tags:{footway:"sidewalk",highway:"footway"}},w500:{id:"w500",nodes:["n2428","n1152","n2421","n2324"],tags:{bridge:"yes",highway:"residential",name:"Moore Street"}},w501:{id:"w501",nodes:["n2608","n2609","n2610","n2611","n2612","n2613","n2614","n2615","n2617","n2608"],tags:{building:"yes"}},w502:{id:"w502",nodes:["n2570","n2571"],tags:{bridge:"yes",highway:"path",name:"Riverwalk Trail"}},w503:{id:"w503",nodes:["n2540","n2542","n2787"],tags:{highway:"service"}},w504:{id:"w504",nodes:["n2269","n2582","n2250"],tags:{highway:"path"}},w505:{id:"w505",nodes:["n2631","n2632","n2633","n2634","n2635","n2636","n2637","n2638","n2631"],tags:{building:"yes"}},w506:{id:"w506",nodes:["n2543","n2544","n2545","n395","n2546","n2543"],tags:{amenity:"parking"}},w507:{id:"w507",nodes:["n2449","n2450","n2451","n2452","n1162","n2449"],tags:{leisure:"pitch",sport:"tennis"}},w508:{id:"w508",nodes:["n2554","n1160","n2559","n2558","n659","n2555","n658","n657","n2419"],tags:{highway:"service"}},w509:{id:"w509",nodes:["n2499","n2508","n2510","n2505","n2497","n2499"],tags:{building:"yes"}},w51:{id:"w51",nodes:["n241","n242","n243","n244"],tags:{highway:"service",surface:"unpaved"}},w510:{id:"w510",nodes:["n2575","n2577"],tags:{highway:"footway"}},w511:{id:"w511",nodes:["n2533","n2534","n2535","n2536","n2537","n2538","n2539","n2785","n2786","n2533"],tags:{amenity:"parking"}},w512:{id:"w512",nodes:["n2801","n2740","n2741","n2742","n2743","n2744","n2801"],tags:{building:"yes"}},w513:{id:"w513",nodes:["n2720","n2721"],tags:{highway:"service",service:"parking_aisle"}},w514:{id:"w514",nodes:["n2788","n2790","n2789","n989","n2540","n2541"],tags:{highway:"service",service:"parking_aisle"}},w515:{id:"w515",nodes:["n2848","n2849","n2850","n2851","n2803","n2804","n2812"],tags:{highway:"residential",name:"Middle Street"}},w516:{id:"w516",nodes:["n2852","n2805"],tags:{access:"private",highway:"service",name:"Battle Street"}},w517:{id:"w517",nodes:["n2863","n2815","n2814","n2812","n2864","n2855","n2865","n2867","n2868"],tags:{highway:"secondary",name:"Michigan Avenue",name_1:"State Highway 60",ref:"M 60"}},w518:{id:"w518",nodes:["n2859","n2808"],tags:{highway:"residential",name:"2nd Avenue"}},w519:{id:"w519",nodes:["n2823","n2824","n2825","n2826","n2827","n2828","n2823"],tags:{building:"yes"}},w52:{id:"w52",nodes:["n247","n248","n249","n250","n247"],tags:{amenity:"parking"}},w520:{id:"w520",nodes:["n2806","n2807","n2803"],tags:{highway:"residential",name:"2nd Avenue"}},w521:{id:"w521",nodes:["n2829","n2830","n2831","n2832","n2833","n2834","n2835","n2836","n2837","n2838","n2829"],tags:{building:"yes"}},w522:{id:"w522",nodes:["n2815","n2813","n2811","n4597","n2846","n4596","n2857","n4601","n2853","n4602","n2861","n4","n2879","n4560","n3550","n5","n1685"],tags:{highway:"residential",name:"Washington Street"}},w523:{id:"w523",nodes:["n2878","n2811","n2810","n2860","n2880","n2881","n2882"],tags:{highway:"residential",name:"5th Avenue"}},w524:{id:"w524",nodes:["n2816","n2817","n2818","n2819","n2820","n2821","n2822","n2816"],tags:{building:"yes"}},w525:{id:"w525",nodes:["n2869","n2856","n2806","n2808","n2814","n2809","n2810","n2847","n2858","n2854","n2870","n2871","n6","n2872","n2839","n2862"],tags:{highway:"residential",name:"Wood Street"}},w526:{id:"w526",nodes:["n2877","n2809","n2813","n2844","n2843"],tags:{highway:"residential",name:"4th Avenue"}},w527:{id:"w527",nodes:["n4785","n4784","n2936","n4788","n4787","n4786","n4785"],tags:{amenity:"parking"}},w528:{id:"w528",nodes:["n2864","n2892","n2893","n2877","n2860","n3840"],tags:{highway:"residential",name:"Garden Street"}},w529:{id:"w529",nodes:["n2868","n2890"],tags:{bridge:"yes",highway:"secondary",name:"Michigan Avenue",name_1:"State Highway 60",ref:"M 60"}},w53:{id:"w53",nodes:["n251","n252","n253","n254","n255","n256","n257","n258","n259","n260","n261","n262","n251"],tags:{building:"yes"}},w530:{id:"w530",nodes:["n2914","n2915","n2916","n2917","n2918","n2919","n2920","n2921","n2922","n2923","n2924","n2925","n2926","n2927","n2928","n2929","n2930","n2931","n2932","n2933","n2914"],tags:{building:"yes"}},w531:{id:"w531",nodes:["n2958","n2896"],tags:{bridge:"yes",highway:"secondary",name:"Main Street"}},w532:{id:"w532",nodes:["n2896","n394","n364","n2748"],tags:{highway:"secondary",name:"Main Street"}},w533:{id:"w533",nodes:["n2800","n2943","n2940","n2941","n2942","n2943"],tags:{highway:"service",service:"parking_aisle"}},w534:{id:"w534",nodes:["n3836","n3837","n3839","n3838","n3834","n4632","n3831","n4624","n3835","n3836"],tags:{barrier:"fence"}},w535:{id:"w535",nodes:["n2894","n2944","n2774","n2765"],tags:{highway:"residential",name:"5th Avenue"}},w536:{id:"w536",nodes:["n2890","n2780","n627","n2889","n2887","n623","n2888","n366","n2748"],tags:{highway:"secondary",name:"Michigan Avenue",name_1:"State Highway 60",ref:"M 60"}},w537:{id:"w537",nodes:["n2895","n738","n2887","n737","n2913"],tags:{highway:"residential",name:"Water Street"}},w538:{id:"w538",nodes:["n2855","n3756","n2884","n2885","n2886","n2945","n2946","n2947","n2948","n2949","n2950","n2951","n2952","n2953","n2955","n2848","n2956","n2856"],tags:{highway:"residential",name:"River Drive"}},w539:{id:"w539",nodes:["n2882","n2894"],tags:{bridge:"yes",highway:"residential",name:"5th Avenue"}},w54:{id:"w54",nodes:["n263","n264","n265","n266","n267","n268","n269","n270","n271","n272","n273","n274","n275","n276","n263"],tags:{building:"yes"}},w540:{id:"w540",nodes:["n2987","n2964","n2981","n2983","n2966","n2982","n2962","n2960","n2967","n2965","n2984","n2977","n2968","n2976","n2986","n2988","n2963","n2970","n2969","n2979","n2974","n2980","n2959","n2973","n2985","n2961","n2975","n2971","n2972","n2978","n2898","n2907","n2912","n2909","n2911","n2901","n2903","n2904","n2906","n2902","n2900","n2910","n2908","n2899","n2897","n2905","n2186","n2233"],tags:{name:"Portage River",waterway:"river"}},w541:{id:"w541",nodes:["n2852","n2851","n3003"],tags:{highway:"residential",name:"1st Avenue"}},w542:{id:"w542",nodes:["n2991","n3004","n2994"],tags:{highway:"residential",name:"River Street"}},w543:{id:"w543",nodes:["n2993","n2989"],tags:{bridge:"yes",highway:"residential",name:"6th Street"}},w544:{id:"w544",nodes:["n2995","n2996","n2997","n2998","n2999","n3000","n3001","n3002","n2990","n2991","n2993"],tags:{highway:"residential",name:"6th Street"}},w545:{id:"w545",nodes:["n2989","n2992","n2848"],tags:{highway:"residential",name:"6th Street"}},w546:{id:"w546",nodes:["n2313","n3169","n3170","n3171","n3172","n3173","n3174","n3175","n3176","n3177","n3178","n3179","n3180","n3191","n3181","n3190","n3182","n3183","n3184","n3185","n3186","n3187","n3188","n3189","n3160","n3161","n3162","n2126","n2146","n2156","n2129","n2112","n2109","n2313"],tags:{natural:"wetland"}},w547:{id:"w547",nodes:["n2088","n3013","n3015","n3014","n3017","n3018"],tags:{name:"Conrail Railroad",railway:"rail"}},w548:{id:"w548",nodes:["n3083","n3084","n3085","n3086","n3083"],tags:{building:"yes"}},w549:{id:"w549",nodes:["n3020","n2288","n2283","n2284","n2131","n2286","n2287","n2285","n2132","n2140","n2289","n3020"],tags:{leisure:"park",name:"Conservation Park"}},w55:{id:"w55",nodes:["n277","n278","n279","n280","n281","n282","n283","n284","n277"],tags:{building:"yes"}},w550:{id:"w550",nodes:["n3056","n3042","n3041","n3040","n3039","n3038","n3037","n3036","n3044","n3035","n3034","n3043","n3016","n3056","n3019","n3015","n3012"],tags:{highway:"service"}},w551:{id:"w551",nodes:["n3044","n3045","n3046","n3047","n3048","n3049","n3050","n3051","n3052","n3053","n3054","n3055","n3016"],tags:{highway:"footway"}},w552:{id:"w552",nodes:["n3117","n3118","n3119","n3120","n3121","n3122","n3117"],tags:{building:"yes"}},w553:{id:"w553",nodes:["n3123","n3124","n3129","n3125","n3126","n3123"],tags:{building:"yes"}},w554:{id:"w554",nodes:["n3069","n3070","n3071","n3072","n3073","n3074","n3075","n3076","n3077","n3078","n3079","n3080","n3081","n3082","n3069"],tags:{building:"yes"}},w555:{id:"w555",nodes:["n3087","n3088","n3089","n3090","n3087"],tags:{building:"yes"}},w556:{id:"w556",nodes:["n3113","n3114","n3115","n3116","n3113"],tags:{building:"yes"}},w557:{id:"w557",nodes:["n3103","n3104","n3105","n3106","n3103"],tags:{building:"yes"}},w558:{id:"w558",nodes:["n3127","n3128","n3129","n3124","n3127"],tags:{building:"yes"}},w559:{id:"w559",nodes:["n3137","n3141","n3142","n3138","n3139","n3140","n3137"],tags:{building:"yes"}},w56:{id:"w56",nodes:["n285","n286","n287","n288","n285"],tags:{amenity:"parking"}},w560:{id:"w560",nodes:["n3091","n3092","n3093","n3094","n3091"],tags:{building:"yes"}},w561:{id:"w561",nodes:["n3155","n3157","n3158","n3159","n3156","n3155"],tags:{building:"yes"}},w562:{id:"w562",nodes:["n3057","n3058","n3059","n3060","n3057"],tags:{building:"yes"}},w563:{id:"w563",nodes:["n3107","n3108","n3109","n3110","n3111","n3112","n3107"],tags:{building:"yes"}},w564:{id:"w564",nodes:["n3134","n3135","n3136","n3131","n3134"],tags:{building:"yes"}},w565:{id:"w565",nodes:["n3143","n3144","n3145","n3146","n3143"],tags:{building:"yes"}},w566:{id:"w566",nodes:["n3095","n3096","n3097","n3098","n3095"],tags:{building:"yes"}},w567:{id:"w567",nodes:["n3130","n3131","n3136","n3132","n3133","n3130"],tags:{building:"yes"}},w568:{id:"w568",nodes:["n3025","n3026","n3027","n3028","n3029","n3030","n3031","n3033","n3032","n3025"],tags:{amenity:"parking"}},w569:{id:"w569",nodes:["n3061","n3062","n3063","n3064","n3061"],tags:{building:"yes"}},w57:{id:"w57",nodes:["n289","n290","n291","n292","n289"],tags:{amenity:"parking"}},w570:{id:"w570",nodes:["n3155","n3156","n3152","n3153","n3155"],tags:{building:"yes"}},w571:{id:"w571",nodes:["n3099","n3100","n3101","n3102","n3099"],tags:{building:"yes"}},w572:{id:"w572",nodes:["n3147","n3148","n3149","n3150","n3147"],tags:{building:"yes"}},w573:{id:"w573",nodes:["n3039","n2284"],tags:{highway:"service"}},w574:{id:"w574",nodes:["n3151","n3152","n3153","n3154","n3151"],tags:{building:"yes"}},w575:{id:"w575",nodes:["n3021","n3022","n3023","n3024","n3021"],tags:{amenity:"shelter",building:"yes",shelter_type:"picnic_shelter"}},w576:{id:"w576",nodes:["n3065","n3066","n3067","n3068","n3065"],tags:{building:"yes"}},w577:{id:"w577",nodes:["n2944","n3192","n3757","n3813","n3814","n3815","n3816","n3817","n3818","n3819"],tags:{highway:"service",name:"Willow Drive",service:"driveway",surface:"unpaved"}},w578:{id:"w578",nodes:["n2163","n2165","n2166","n2167","n2168","n2172","n2173","n2174","n2175","n2176","n2178","n2181","n2163"],tags:{building:"yes"}},w579:{id:"w579",nodes:["n2754","n3195","n3204","n3205","n4537","n4540","n3206","n4530","n4536","n3207","n4524","n3199","n4521","n3197","n1032"],tags:{highway:"residential",name:"Elm Street"}},w58:{id:"w58",nodes:["n240","n293","n294"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w580:{id:"w580",nodes:["n2184","n2185","n2187","n2190","n2191","n2192","n2184"],tags:{building:"yes"}},w581:{id:"w581",nodes:["n2765","n3208","n3211","n2755","n3280","n2756","n3346"],tags:{highway:"residential",name:"Kelsey Street"}},w582:{id:"w582",nodes:["n2753","n3194","n3193","n3201","n3196","n4551","n3202","n4550","n3203","n3200","n3198","n1033"],tags:{highway:"residential",name:"Walnut Street"}},w583:{id:"w583",nodes:["n3272","n4469","n4588","n2879","n4564","n2872"],tags:{highway:"residential",name:"10th Avenue"}},w584:{id:"w584",nodes:["n3243","n3242","n3241","n3240","n3243"],tags:{building:"industrial"}},w585:{id:"w585",nodes:["n3273","n3274","n4631","n4593","n3275","n4592","n2846","n4611","n2847"],tags:{highway:"residential",name:"6th Avenue"}},w586:{id:"w586",nodes:["n3276","n4591","n2853","n4605","n2854"],tags:{highway:"residential",name:"8th Avenue"}},w587:{id:"w587",nodes:["n3269","n3268","n3267","n3266","n3265","n3264","n3263","n3262","n3269"],tags:{building:"industrial"}},w588:{id:"w588",nodes:["n3277","n4599","n2857","n4598","n4608","n2858"],tags:{highway:"residential",name:"7th Avenue"}},w589:{id:"w589",nodes:["n3239","n3238","n3271","n3270","n3237","n3236","n3235","n3234","n3239"],tags:{building:"yes"}},w59:{id:"w59",nodes:["n294","n295","n296","n297","n298","n299","n300","n301","n302","n303","n491","n304","n305","n306","n307"],tags:{footway:"sidewalk",highway:"footway"}},w590:{id:"w590",nodes:["n3278","n4458","n4589","n4604","n2861"],tags:{highway:"residential",name:"9th Avenue"}},w591:{id:"w591",nodes:["n3253","n3252","n3251","n3250","n3249","n3248","n3253"],tags:{building:"industrial"}},w592:{id:"w592",nodes:["n3229","n3228","n3227","n3226","n3225","n3224","n3223","n3222","n3221","n3220","n3219","n3218","n3217","n3216","n3215","n3214","n3213","n3212","n3229"],tags:{natural:"water",water:"pond"}},w593:{id:"w593",nodes:["n3261","n3260","n3259","n3258","n3257","n3256","n3255","n3254","n3261"],tags:{building:"industrial"}},w594:{id:"w594",nodes:["n3233","n3232","n3231","n3230","n3233"],tags:{building:"yes"}},w595:{id:"w595",nodes:["n3247","n3246","n3245","n3244","n3247"],tags:{building:"industrial"}},w596:{id:"w596",nodes:["n2769","n3195","n3193","n3209","n2758","n2759","n3279"],tags:{highway:"residential",name:"Armitage Street"}},w597:{id:"w597",nodes:["n2193","n2194","n2195","n2197","n2193"],tags:{building:"yes"}},w598:{id:"w598",nodes:["n3404","n3403","n3402","n3401","n3400","n3399","n3398","n3397","n3373","n3372","n3396","n3395","n3404"],tags:{building:"school"}},w6:{id:"w6",nodes:["n879","n880","n881","n882","n879"],tags:{building:"shed"}},w60:{id:"w60",nodes:["n239","n308","n307"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w600:{id:"w600",nodes:["n3387","n3386","n3316","n3315","n3314","n3313","n3387"],tags:{building:"yes"}},w601:{id:"w601",nodes:["n3304","n3303","n3302","n3301","n3385","n3384","n3300","n3299","n3304"],tags:{building:"yes"}},w602:{id:"w602",nodes:["n3334","n3333","n3332","n3331","n3330","n3329","n3328","n3327","n3326","n3325","n3324","n3323","n3322","n3321","n3320","n3319","n3318","n3317","n3334"],tags:{building:"yes"}},w603:{id:"w603",nodes:["n3353","n3352","n3347","n3280","n2798"],tags:{highway:"service",service:"alley",surface:"unpaved"}},w604:{id:"w604",nodes:["n3753","n3211","n3383"],tags:{highway:"service",service:"alley"}},w605:{id:"w605",nodes:["n3290","n3289","n3288","n3287","n3286","n3285","n3284","n3283","n3282","n3281","n3290"],tags:{building:"yes"}},w606:{id:"w606",nodes:["n2198","n2199","n2201","n2202","n2203","n2206","n2198"],tags:{building:"yes"}},w607:{id:"w607",nodes:["n2198","n2207"],tags:{barrier:"wall"}},w608:{id:"w608",nodes:["n2751","n3208","n3210","n3209","n3415","n3410","n3414","n3413","n3412","n3416"],tags:{highway:"residential",name:"East Street"}},w609:{id:"w609",nodes:["n2772","n3346","n3746","n3748","n3747","n3345","n3378","n3279","n3411"],tags:{highway:"residential",name:"Maple Street"}},w61:{id:"w61",nodes:["n309","n310","n311","n312","n313","n240"],tags:{footway:"sidewalk",highway:"footway"}},w610:{id:"w610",nodes:["n3379","n3380","n3382","n3381","n3379"],tags:{leisure:"park",name:"LaFayette Park"}},w611:{id:"w611",nodes:["n2768","n3194","n3210","n3753","n2760","n3353","n2773","n3378"],tags:{highway:"residential",name:"Bennett Street"}},w612:{id:"w612",nodes:["n2751","n3383","n2749","n2798","n2772"],tags:{highway:"residential",name:"Market Street"}},w613:{id:"w613",nodes:["n3298","n3297","n3296","n3295","n3294","n3293","n3292","n3291","n3298"],tags:{building:"yes"}},w614:{id:"w614",nodes:["n3375","n3406","n3405","n3374","n3375"],tags:{leisure:"playground"}},w615:{id:"w615",nodes:["n3393","n3344","n3343","n3342","n3341","n3340","n3339","n3338","n3337","n3392","n3391","n3390","n3389","n3336","n3335","n3388","n3393"],tags:{building:"yes"}},w616:{id:"w616",nodes:["n3376","n3407","n3408","n3377","n3376"],tags:{amenity:"school",name:"Three Rivers Elementary School"}},w617:{id:"w617",nodes:["n3312","n3311","n3310","n3309","n3308","n3307","n3306","n3305","n3312"],tags:{building:"yes"}},w619:{id:"w619",nodes:["n2863","n3424","n3425","n3426","n3427","n3428","n3429","n3430","n3431","n3432","n3433","n2844"],tags:{highway:"secondary",name:"Michigan Avenue",ref:"M 60"}},w62:{id:"w62",nodes:["n876","n906","n904","n875","n874","n873","n872","n871","n870","n869","n41","n868","n146","n314","n315","n1956"],tags:{footway:"sidewalk",highway:"footway"}},w620:{id:"w620",nodes:["n2844","n3420","n3421","n3422","n3439","n2859","n3437","n3493","n3496","n3500","n3497"],tags:{highway:"residential"}},w621:{id:"w621",nodes:["n3468","n3469","n3470","n3471","n3468"],tags:{building:"yes"}},w622:{id:"w622",nodes:["n3417","n3436","n3438","n3491","n3488","n3492","n3495","n3494","n3498","n3487","n3499","n3490","n3489","n4800","n3417"],tags:{landuse:"cemetery",name:"Riverside Cemetery"}},w623:{id:"w623",nodes:["n3440","n3441","n3442","n3443","n3444","n3445","n3440"],tags:{building:"yes"}},w624:{id:"w624",nodes:["n3446","n3447","n3448","n3449","n3450","n3451","n3452","n3453","n3454","n3455","n3456","n3457","n3458","n3459","n3460","n3461","n3462","n3463","n3464","n3465","n3466","n3467","n3446"],tags:{building:"yes"}},w625:{id:"w625",nodes:["n2844","n3434","n3435","n2878","n3275","n4621","n3276","n3278","n4463","n3272","n3472","n3474","n3475","n3476","n3477","n3478","n1202","n3479","n3480","n3481","n1203","n3482","n3483","n3484","n3485","n4574","n3486","n3473"],tags:{highway:"secondary",name:"Jefferson Street",name_1:"State Highway 60",ref:"M 60"}},w626:{id:"w626",nodes:["n3439","n3423","n2863"],tags:{highway:"unclassified",name:"Michigan Avenue",name_1:"State Highway 60"}},w627:{id:"w627",nodes:["n3500","n3005"],tags:{highway:"service"}},w628:{id:"w628",nodes:["n3491","n3488","n3492","n3010","n3009","n3005","n3008","n3007","n3006","n3502","n3491"],tags:{leisure:"park",name:"Marina Park"}},w629:{id:"w629",nodes:["n2208","n2209","n2212","n2214","n2208"],tags:{building:"yes"}},w63:{id:"w63",nodes:["n1955","n316"],tags:{footway:"sidewalk",highway:"footway"}},w630:{id:"w630",nodes:["n2757","n3414","n3202","n4542","n3206","n4538","n3750","n3503","n1629","n4500","n2763","n4502","n2764","n3508"],tags:{highway:"residential",name:"Hoffman Street"}},w631:{id:"w631",nodes:["n2215","n2750","n2770","n2771","n2215"],tags:{building:"yes"}},w632:{id:"w632",nodes:["n2766","n3504","n3507","n3751","n3205","n3196","n3410","n2746"],tags:{highway:"residential",name:"Cushman Street"}},w633:{id:"w633",nodes:["n2745","n3749","n3507","n4535","n3503"],tags:{highway:"residential",name:"Pine Street"}},w634:{id:"w634",nodes:["n3510","n3511","n3512","n3509","n3510"],tags:{leisure:"park",name:"Bowman Park"}},w636:{id:"w636",nodes:["n2745","n3752","n3204","n3201","n3415","n2761","n2767","n3411"],tags:{highway:"residential",name:"Wheeler Street"}},w637:{id:"w637",nodes:["n3550","n4586","n4476","n3472"],tags:{highway:"residential",name:"11th Avenue"}},w638:{id:"w638",nodes:["n3508","n3518"],tags:{bridge:"yes",highway:"residential",name:"Hoffman Street"}},w639:{id:"w639",nodes:["n3518","n1204","n2862","n3519","n3520","n3521","n3522","n3523","n2161","n3524","n3549","n3552","n4239","n3551","n4577","n4582","n4578","n4583","n4579","n4574"],tags:{highway:"residential",name:"Hoffman Street"}},w64:{id:"w64",nodes:["n316","n317"],tags:{bridge:"yes",footway:"sidewalk",highway:"footway",layer:"1"}},w640:{id:"w640",nodes:["n3634","n3640","n3676","n3633","n3678","n3648","n3638","n3683","n3600","n3579","n3679","n3677","n2987","n3592","n3588","n3608","n3559","n3617","n3620","n3660","n3553","n3533","n3530","n3531","n3525","n3527","n3526","n3532","n3529","n3528","n3667","n3627","n3623","n3625","n3601","n3687","n3671","n3644","n3626","n3673","n3582","n3693","n3605","n3619","n3651","n3650","n3615","n3663","n3631","n3596","n3604","n3655","n3586","n3595","n3701","n3603","n3686","n3611","n3568","n3674","n3613","n3580","n3562","n3564","n3689","n3585","n3670","n3659","n3684","n3680","n3646","n3558","n3556","n3692","n3563","n3575","n3571","n3675","n3557","n3700","n3656","n3622","n3657","n3565","n3669","n3658","n3618","n3624","n3688","n3610","n3570","n3645","n3649","n3583","n3694","n3561","n3554","n3614","n3698","n3581","n3635","n3641","n3569","n3647","n3628","n3598","n3696","n3665","n3639","n3607","n3695","n3642","n3672","n3577","n3643","n3691","n3602","n3576","n3591","n3560","n3606","n3685","n3597","n3629","n3661","n3654","n3616","n3697","n3578","n3609","n3653","n3699","n3566","n3637","n3567","n3666","n3555","n3599","n3590","n3572","n3593","n3690","n3681","n3612","n3682","n3668","n3587","n3621","n3636","n3662","n3589","n3573","n3652","n3664","n3632","n3574","n3594","n3584","n3630","n3634"],tags:{name:"Hoffman Pond",natural:"water",water:"reservoir"}},w641:{id:"w641",nodes:["n2988","n3534","n3535","n3536","n3537","n3538","n3539","n3540","n3541","n3542","n3543","n3544","n3545","n3546","n3547","n3548","n2970"],tags:{waterway:"river"}},w642:{id:"w642",nodes:["n3702","n3703","n3704","n3705","n3706","n3707","n3708","n3709","n3710","n3711","n3712","n3713","n3714","n3715","n3716","n3717","n3718","n3719","n3720","n3721","n3722","n3723","n3724","n3725","n3726","n3727","n3728","n3729","n3730","n3731","n3732","n3733","n3734","n3735","n3736","n3737","n3738","n3739","n3740","n3741","n3742","n3743","n3702"],tags:{admin_level:"8",boundary:"administrative"}},w643:{id:"w643",nodes:["n2839","n2873"],tags:{highway:"service",service:"driveway"}},w644:{id:"w644",nodes:["n2873","n2840"],tags:{bridge:"yes",highway:"service",layer:"1",service:"driveway"}},w645:{id:"w645",nodes:["n2840","n2841","n2842","n2845","n2866"],tags:{highway:"service",service:"driveway",surface:"unpaved"}},w646:{id:"w646",nodes:["n2752","n3759","n1420","n1421","n1422","n3758","n4507","n4506","n4505","n4520","n3199","n4522","n4504","n4546","n3200","n4547","n3412"],tags:{highway:"residential",name:"Flower Street"}},w647:{id:"w647",nodes:["n2874","n2875","n2876","n2954","n2874"],tags:{building:"industrial"}},w648:{id:"w648",nodes:["n3778","n3779","n3780","n3781","n3782","n3783","n3778"],tags:{building:"yes"}},w649:{id:"w649",nodes:["n3197","n4543","n4544","n3198"],tags:{highway:"residential",name:"Morris Avenue",surface:"unpaved"}},w65:{id:"w65",nodes:["n317","n318","n319","n320","n321"],tags:{footway:"sidewalk",highway:"footway"}},w650:{id:"w650",nodes:["n3207","n4526","n4528","n4548","n3203","n4549","n3413","n2762"],tags:{highway:"residential",name:"Adams Street"}},w651:{id:"w651",nodes:["n3788","n3785","n3786","n3787","n3788"],tags:{power:"station"}},w652:{id:"w652",nodes:["n2957","n3163","n3241"],tags:{barrier:"wall"}},w653:{id:"w653",nodes:["n3549","n3802","n3803","n3800","n3801"],tags:{highway:"service",surface:"unpaved"}},w654:{id:"w654",nodes:["n3164","n3165","n3166","n3167","n3168","n3505","n3164"],tags:{building:"yes"}},w655:{id:"w655",nodes:["n3506","n3517","n3760","n3761","n3762","n3763","n3506"],tags:{building:"yes"}},w656:{id:"w656",nodes:["n3764","n3765","n3766","n3767","n3768","n3769","n3770","n3771","n3764"],tags:{building:"yes"}},w657:{id:"w657",nodes:["n3772","n3773","n3774","n3775","n3772"],tags:{building:"yes"}},w658:{id:"w658",nodes:["n3776","n3777","n3784","n3789","n3776"],tags:{building:"yes"}},w659:{id:"w659",nodes:["n3930","n3931","n3932","n3933","n3934","n3935","n3936","n3937","n3938","n3930"],tags:{leisure:"pitch",sport:"baseball"}},w66:{id:"w66",nodes:["n321","n322"],tags:{bridge:"yes",footway:"sidewalk",highway:"footway",layer:"1"}},w660:{id:"w660",nodes:["n3982","n3842","n3864","n3865","n2938","n3866","n2939","n3867","n3868","n3858","n2937","n3869","n2935","n2934","n3870","n3348","n3862"],tags:{highway:"service"}},w661:{id:"w661",nodes:["n3968","n3969"],tags:{highway:"footway"}},w662:{id:"w662",nodes:["n3875","n3876","n3877","n3878","n3879","n3880","n3881","n3882","n3875"],tags:{amenity:"parking"}},w663:{id:"w663",nodes:["n3964","n3965"],tags:{highway:"footway"}},w664:{id:"w664",nodes:["n3966","n3967"],tags:{highway:"footway"}},w665:{id:"w665",nodes:["n3857","n3890","n3884","n3894","n3889","n3899","n3885","n3886","n3896","n3887"],tags:{highway:"service",service:"parking_aisle"}},w666:{id:"w666",nodes:["n3895","n3896"],tags:{highway:"service",service:"parking_aisle"}},w667:{id:"w667",nodes:["n3274","n3977","n3984","n3983","n3981","n3844","n3978","n3982","n3861","n3862","n3873","n3874","n4468","n3863"],tags:{access:"private",highway:"service",name:"Collins Drive"}},w668:{id:"w668",nodes:["n3900","n3901","n3902","n3903","n3904","n3905","n3808","n3809","n3906","n3907","n3908","n3967","n3909","n3910","n3911","n3955","n3964","n3912","n3913","n3914","n3915","n3916","n3917","n3918","n3919","n3920","n3921","n3922","n3923","n3924","n3925","n3926","n3927","n3969","n3970","n3928","n3807","n3929","n3900"],tags:{building:"school"}},w669:{id:"w669",nodes:["n3272","n39","n40","n3974","n3863","n3857","n3892","n3883","n3891","n3889"],tags:{highway:"service"}},w67:{id:"w67",nodes:["n322","n886","n323","n475"],tags:{footway:"crossing",highway:"footway"}},w670:{id:"w670",nodes:["n3473","n3859","n3860","n3980","n4908","n4865"],tags:{highway:"secondary",name:"Hoffman Street",ref:"M 60"}},w671:{id:"w671",nodes:["n3970","n3806","n3971"],tags:{highway:"footway"}},w672:{id:"w672",nodes:["n3892","n3893","n3894"],tags:{highway:"service",service:"parking_aisle"}},w673:{id:"w673",nodes:["n3945","n3946","n3992","n3990","n3945"],tags:{leisure:"pitch",sport:"tennis"}},w674:{id:"w674",nodes:["n3890","n3893","n3891"],tags:{highway:"service",service:"parking_aisle"}},w675:{id:"w675",nodes:["n3947","n3948","n3994","n3993","n3947"],tags:{leisure:"pitch",sport:"tennis"}},w676:{id:"w676",nodes:["n3858","n3954","n3972","n3810","n3811","n3812","n3841","n3973","n3898","n3963","n3897","n3896"],tags:{highway:"service"}},w677:{id:"w677",nodes:["n3977","n3996","n3997","n4004","n3998","n3999","n4005","n4007","n4006","n3995","n4000","n3843","n4001","n4002","n4003","n3949","n3351","n3950","n3354","n3350","n3951","n3349","n3952","n3953","n3954","n3956","n3966","n3955"],tags:{highway:"footway"}},w678:{id:"w678",nodes:["n3887","n3888","n3895","n3899"],tags:{highway:"service",service:"parking_aisle"}},w679:{id:"w679",nodes:["n3946","n3947","n3993","n3992","n3946"],tags:{leisure:"pitch",sport:"tennis"}},w68:{id:"w68",nodes:["n294","n1952","n326"],tags:{footway:"sidewalk",highway:"footway"}},w680:{id:"w680",nodes:["n3939","n3940","n3941","n3985","n3986","n3987","n3988","n3989","n3942","n3943","n3939"],tags:{leisure:"pitch",sport:"baseball"}},w681:{id:"w681",nodes:["n3990","n3991","n3944","n3945","n3990"],tags:{leisure:"pitch",sport:"tennis"}},w682:{id:"w682",nodes:["n3871","n3872","n3873","n3874","n3871"],tags:{amenity:"parking"}},w683:{id:"w683",nodes:["n3956","n3965","n3957","n3958","n3959"],tags:{footway:"sidewalk",highway:"footway"}},w684:{id:"w684",nodes:["n3790","n3791","n3792","n3793","n3790"],tags:{building:"shed"}},w685:{id:"w685",nodes:["n3794","n3795","n3796","n3797","n3794"],tags:{building:"yes"}},w686:{id:"w686",nodes:["n3798","n3799","n3804","n3805","n3798"],tags:{building:"yes"}},w687:{id:"w687",nodes:["n3806","n3807"],tags:{highway:"footway"}},w688:{id:"w688",nodes:["n3845","n3846","n3847","n3848","n3845"],tags:{leisure:"pitch",sport:"american_football"}},w689:{id:"w689",nodes:["n3849","n4021","n3850","n3851","n3852","n3853","n3854","n3855","n3856","n3975","n3976","n3979","n4008","n4009","n4010","n4011","n4012","n4013","n4014","n4015","n4016","n4017","n4018","n4019","n4020","n4021"],tags:{leisure:"track",sport:"running",highway:"footway"}},w69:{id:"w69",nodes:["n326","n327"],tags:{bridge:"yes",footway:"sidewalk",highway:"footway",layer:"1"}},w690:{id:"w690",nodes:["n4022","n4023","n4024","n4025","n4026","n4027","n4022"],tags:{building:"yes"}},w691:{id:"w691",nodes:["n4028","n4029","n4030","n4031","n4028"],tags:{building:"yes"}},w692:{id:"w692",nodes:["n4032","n4033","n4034","n4035","n4032"],tags:{building:"yes"}},w693:{id:"w693",nodes:["n4036","n4037","n4038","n4039","n4036"],tags:{building:"yes"}},w694:{id:"w694",nodes:["n4040","n4041","n4042","n4043","n4040"],tags:{building:"yes"}},w695:{id:"w695",nodes:["n4044","n4045","n4050","n4053","n4046","n4047","n4048","n4049","n4044"],tags:{building:"yes"}},w696:{id:"w696",nodes:["n4050","n4051","n4052","n4053","n4050"],tags:{building:"roof"}},w697:{id:"w697",nodes:["n4054","n4068","n4055","n4056","n4057","n4054"],tags:{building:"yes"}},w698:{id:"w698",nodes:["n4058","n4059","n4060","n4061","n4062","n4063","n4058"],tags:{building:"yes"}},w699:{id:"w699",nodes:["n4064","n4066","n4065"],tags:{barrier:"fence"}},w7:{id:"w7",nodes:["n43","n44","n45"],tags:{highway:"service"}},w70:{id:"w70",nodes:["n327","n328","n27","n329"],tags:{footway:"sidewalk",highway:"footway"}},w700:{id:"w700",nodes:["n4066","n4067","n4068"],tags:{barrier:"fence"}},w701:{id:"w701",nodes:["n4069","n4070","n4071","n4072","n4069"],tags:{building:"shed"}},w702:{id:"w702",nodes:["n4073","n4074","n4075","n4076","n4077","n4078","n4079","n4080","n4081","n4082","n4083","n4084","n4073"],tags:{building:"yes"}},w703:{id:"w703",nodes:["n4085","n4093","n4086","n4087","n4088","n4089","n4090","n4091","n4092","n4085"],tags:{building:"yes"}},w704:{id:"w704",nodes:["n4093","n4094","n4095","n4096"],tags:{barrier:"fence"}},w705:{id:"w705",nodes:["n4097","n4098","n4099","n4100","n4097"],tags:{building:"yes"}},w706:{id:"w706",nodes:["n4098","n4102","n4087"],tags:{barrier:"fence"}},w707:{id:"w707",nodes:["n4101","n4102","n4096","n4170","n4103"],tags:{barrier:"fence"}},w708:{id:"w708",nodes:["n4104","n4105","n4106","n4107","n4104"],tags:{access:"private",leisure:"swimming_pool"}},w709:{id:"w709",nodes:["n4108","n4109","n4110","n4111","n4108"],tags:{building:"yes"}},w71:{id:"w71",nodes:["n329","n331"],tags:{bridge:"yes",footway:"sidewalk",highway:"footway",layer:"1"}},w710:{id:"w710",nodes:["n4112","n4113","n4114","n4115","n4116","n4117","n4118","n4119","n4112"],tags:{building:"yes"}},w711:{id:"w711",nodes:["n4120","n4121","n4122","n4123","n4120"],tags:{building:"yes"}},w712:{id:"w712",nodes:["n4124","n4125","n4126","n4127","n4128","n4129","n4124"],tags:{building:"yes"}},w713:{id:"w713",nodes:["n4130","n4131","n4132","n4133","n4130"],tags:{building:"shed"}},w714:{id:"w714",nodes:["n4134","n4135","n4136","n4137","n4138","n4139","n4140","n4141","n4142","n4143","n4134"],tags:{building:"yes"}},w715:{id:"w715",nodes:["n4144","n4145","n4146","n4147","n4148","n4149","n4144"],tags:{building:"yes"}},w716:{id:"w716",nodes:["n4150","n4151","n4152","n4153","n4150"],tags:{building:"yes"}},w717:{id:"w717",nodes:["n4154","n4155","n4156","n4157","n4154"],tags:{building:"yes"}},w718:{id:"w718",nodes:["n4158","n4159","n4160","n4161","n4162","n4163","n4164","n4165","n4158"],tags:{building:"yes"}},w719:{id:"w719",nodes:["n4166","n4167","n4168","n4169","n4166"],tags:{building:"yes"}},w72:{id:"w72",nodes:["n331","n344","n332","n333","n334"],tags:{footway:"sidewalk",highway:"footway"}},w720:{id:"w720",nodes:["n4170","n4171"],tags:{barrier:"fence"}},w721:{id:"w721",nodes:["n4138","n4103"],tags:{barrier:"fence"}},w722:{id:"w722",nodes:["n4103","n4172"],tags:{barrier:"fence"}},w723:{id:"w723",nodes:["n4173","n4174"],tags:{barrier:"fence"}},w724:{id:"w724",nodes:["n4175","n4176","n4177","n4178","n4175"],tags:{building:"yes"}},w725:{id:"w725",nodes:["n4179","n4180","n4181","n4182","n4183","n4184","n4179"],tags:{building:"yes"}},w726:{id:"w726",nodes:["n4185","n4186","n4187","n4188","n4185"],tags:{building:"yes"}},w727:{id:"w727",nodes:["n4189","n4190","n4191","n4192","n4193","n4194","n4195","n4196","n4197","n4198","n4199","n4200","n4201","n4202","n4189"],tags:{building:"yes"}},w728:{id:"w728",nodes:["n4203","n4204","n4205","n4206","n4207","n4208","n4209","n4210","n4203"],tags:{building:"yes"}},w729:{id:"w729",nodes:["n4211","n4212","n4213","n4214","n4211"],tags:{building:"shed"}},w73:{id:"w73",nodes:["n335","n336","n337","n338","n339","n340","n341","n342","n335"],tags:{building:"yes"}},w730:{id:"w730",nodes:["n4215","n4216","n4217","n4218","n4215"],tags:{building:"yes"}},w731:{id:"w731",nodes:["n4219","n4220","n4221","n4222","n4223","n4224","n4225","n4226","n4227","n4228","n4229","n4230","n4219"],tags:{building:"yes"}},w732:{id:"w732",nodes:["n4231","n4232","n4233","n4234","n4235","n4236","n4237","n4238","n4231"],tags:{building:"yes"}},w733:{id:"w733",nodes:["n4239","n4240","n4241","n4242","n4243","n4244","n4245","n4246","n4247","n4248","n4241"],tags:{highway:"service"}},w734:{id:"w734",nodes:["n4240","n4249","n4248"],tags:{highway:"service",service:"parking_aisle"}},w735:{id:"w735",nodes:["n4250","n4251","n4252","n4253","n4254","n4255","n4256","n4257","n4258","n4250"],tags:{amenity:"parking"}},w736:{id:"w736",nodes:["n4259","n4260","n4261","n4262","n4259"],tags:{building:"yes"}},w737:{id:"w737",nodes:["n4263","n4264","n4265","n4266","n4267","n4268","n4269","n4270","n4271","n4272","n4273","n4274","n4275","n4276","n4263"],tags:{building:"yes"}},w738:{id:"w738",nodes:["n4277","n4278","n4279","n4280","n4281","n4282","n4277"],tags:{building:"yes"}},w739:{id:"w739",nodes:["n4283","n4284","n4285","n4286","n4287","n4288","n4289","n4290","n4291","n4292","n4293","n4294","n4283"],tags:{building:"yes"}},w74:{id:"w74",nodes:["n343","n344","n345"],tags:{highway:"service"}},w740:{id:"w740",nodes:["n4295","n4296","n4297","n4298","n4295"],tags:{building:"yes"}},w741:{id:"w741",nodes:["n4299","n4300","n4301","n4302","n4303","n4304","n4305","n4306","n4307","n4308","n4309","n4310","n4299"],tags:{building:"yes"}},w742:{id:"w742",nodes:["n4311","n4312","n4313","n4314","n4311"],tags:{building:"shed"}},w743:{id:"w743",nodes:["n4315","n4316","n4317","n4318","n4319","n4320","n4315"],tags:{building:"yes"}},w744:{id:"w744",nodes:["n4321","n4322","n4323","n4324","n4325","n4326","n4327","n4328","n4329","n4330","n4331","n4332","n4333","n4334","n4321"],tags:{building:"yes"}},w745:{id:"w745",nodes:["n4335","n4336","n4337","n4338","n4335"],tags:{building:"shed"}},w746:{id:"w746",nodes:["n4339","n4340","n4341","n4342","n4343","n4344","n4339"],tags:{building:"yes"}},w747:{id:"w747",nodes:["n4345","n4346","n4347","n4348","n4345"],tags:{building:"yes"}},w748:{id:"w748",nodes:["n4349","n4350","n4351","n4352","n4349"],tags:{building:"yes"}},w749:{id:"w749",nodes:["n4353","n4354","n4355","n4356","n4357","n4358","n4353"],tags:{building:"yes"}},w75:{id:"w75",nodes:["n346","n347","n348","n349","n350","n351","n346"],tags:{amenity:"parking"}},w750:{id:"w750",nodes:["n4612","n4359","n4360"],tags:{barrier:"fence"}},w751:{id:"w751",nodes:["n4361","n4362","n4363","n4364","n4361"],tags:{building:"yes"}},w752:{id:"w752",nodes:["n4365","n4366","n4367","n4368","n4365"],tags:{building:"yes"}},w753:{id:"w753",nodes:["n4369","n4370","n4371","n4372","n4375","n4369"],tags:{building:"yes"}},w754:{id:"w754",nodes:["n4373","n4374","n4375"],tags:{barrier:"fence"}},w755:{id:"w755",nodes:["n4376","n4377","n4378","n4379","n4376"],tags:{building:"shed"}},w756:{id:"w756",nodes:["n4380","n4381","n4382","n4383","n4384","n4385","n4386","n4387","n4388","n4389","n4390","n4391","n4380"],tags:{building:"yes"}},w757:{id:"w757",nodes:["n4392","n4393","n4394","n4395","n4392"],tags:{building:"yes"}},w758:{id:"w758",nodes:["n4396","n4397","n4398","n4399","n4396"],tags:{building:"shed"}},w759:{id:"w759",nodes:["n4400","n4401","n4402","n4403","n4404","n4405","n4406","n4407","n4408","n4409","n4410","n4411","n4412","n4413","n4414","n4415","n4400"],tags:{building:"yes"}},w76:{id:"w76",nodes:["n2561","n359","n2563","n2793","n357","n356","n2792","n355","n354","n2791","n2562","n353","n352","n358","n2561"],tags:{highway:"service",oneway:"yes",service:"parking_aisle"}},w760:{id:"w760",nodes:["n4416","n4417"],tags:{barrier:"fence"}},w761:{id:"w761",nodes:["n4418","n4416","n4419"],tags:{barrier:"fence"}},w762:{id:"w762",nodes:["n4420","n4421"],tags:{barrier:"fence"}},w763:{id:"w763",nodes:["n4422","n4423","n4424","n4425","n4426","n4427","n4428","n4429","n4430","n4431","n4432","n4433","n4422"],tags:{building:"yes"}},w764:{id:"w764",nodes:["n4434","n4435","n4436","n4437","n4438","n4439","n4440","n4441","n4442","n4445","n4444","n4443","n4434"],tags:{building:"yes"}},w765:{id:"w765",nodes:["n4446","n4447","n4448","n4449","n4446"],tags:{building:"yes"}},w766:{id:"w766",nodes:["n4450","n4451","n4452","n4453","n4450"],tags:{building:"yes"}},w767:{id:"w767",nodes:["n4454","n4455","n4456","n4457","n4454"],tags:{building:"yes"}},w768:{id:"w768",nodes:["n4461","n4458","n4460"],tags:{footway:"crossing",highway:"footway"}},w769:{id:"w769",nodes:["n4460","n4462","n4459"],tags:{footway:"sidewalk",highway:"footway"}},w77:{id:"w77",nodes:["n325","n360","n361"],tags:{footway:"crossing",highway:"footway"}},w770:{id:"w770",nodes:["n4462","n4463","n4464"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w771:{id:"w771",nodes:["n4464","n4465","n4466","n4467"],tags:{footway:"sidewalk",highway:"footway"}},w772:{id:"w772",nodes:["n3959","n3968","n3971","n3960","n3961","n3962","n3963"],tags:{footway:"sidewalk",highway:"footway"}},w773:{id:"w773",nodes:["n4467","n4468","n3959"],tags:{footway:"crossing",highway:"footway"}},w774:{id:"w774",nodes:["n4459","n4469","n4470"],tags:{footway:"crossing",highway:"footway"}},w775:{id:"w775",nodes:["n4470","n4471","n4472","n4473","n4474","n4475"],tags:{footway:"sidewalk",highway:"footway"}},w776:{id:"w776",nodes:["n4475","n4476","n4477"],tags:{footway:"crossing",highway:"footway"}},w777:{id:"w777",nodes:["n4477","n4478","n4479","n4480","n4481","n4482","n4483","n4484","n4485","n4486","n4487"],tags:{footway:"sidewalk",highway:"footway"}},w778:{id:"w778",nodes:["n4488","n4489","n4490","n4491","n4488"],tags:{building:"yes"}},w779:{id:"w779",nodes:["n4492","n4493","n4494","n4495","n4492"],tags:{building:"yes"}},w78:{id:"w78",nodes:["n361","n362","n369"],tags:{footway:"sidewalk",highway:"footway"}},w780:{id:"w780",nodes:["n4496","n4497","n4498","n4499","n4496"],tags:{access:"private",leisure:"swimming_pool"}},w781:{id:"w781",nodes:["n4508","n4509"],tags:{footway:"sidewalk",highway:"footway"}},w782:{id:"w782",nodes:["n4510","n4511"],tags:{footway:"sidewalk",highway:"footway"}},w783:{id:"w783",nodes:["n4512","n4513"],tags:{footway:"sidewalk",highway:"footway"}},w784:{id:"w784",nodes:["n4513","n4514"],tags:{footway:"sidewalk",highway:"footway"}},w785:{id:"w785",nodes:["n4515","n4516"],tags:{footway:"sidewalk",highway:"footway"}},w786:{id:"w786",nodes:["n4517","n4515"],tags:{footway:"sidewalk",highway:"footway"}},w787:{id:"w787",nodes:["n4518","n4519"],tags:{footway:"sidewalk",highway:"footway"}},w788:{id:"w788",nodes:["n4519","n4520","n4513"],tags:{footway:"crossing",highway:"footway"}},w789:{id:"w789",nodes:["n4515","n4521","n4513"],tags:{footway:"crossing",highway:"footway"}},w79:{id:"w79",nodes:["n362","n363","n334"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w790:{id:"w790",nodes:["n4515","n4522","n4523"],tags:{footway:"crossing",highway:"footway"}},w791:{id:"w791",nodes:["n4523","n4524","n4519"],tags:{footway:"crossing",highway:"footway"}},w792:{id:"w792",nodes:["n4523","n4525"],tags:{footway:"sidewalk",highway:"footway"}},w793:{id:"w793",nodes:["n4525","n4526","n4527"],tags:{footway:"crossing",highway:"footway"}},w794:{id:"w794",nodes:["n4527","n4529"],tags:{footway:"sidewalk",highway:"footway"}},w795:{id:"w795",nodes:["n4529","n4530","n4518"],tags:{footway:"crossing",highway:"footway"}},w796:{id:"w796",nodes:["n4518","n4531"],tags:{footway:"sidewalk",highway:"footway"}},w797:{id:"w797",nodes:["n4531","n4532"],tags:{footway:"sidewalk",highway:"footway"}},w798:{id:"w798",nodes:["n4533","n4534"],tags:{footway:"sidewalk",highway:"footway"}},w799:{id:"w799",nodes:["n4518","n4538","n4539"],tags:{footway:"crossing",highway:"footway"}},w8:{id:"w8",nodes:["n46","n47","n145","n48","n49","n46"],tags:{amenity:"parking"}},w80:{id:"w80",nodes:["n334","n364","n365"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w800:{id:"w800",nodes:["n4539","n4540","n4541"],tags:{footway:"crossing",highway:"footway"}},w801:{id:"w801",nodes:["n4541","n4542","n4529"],tags:{footway:"crossing",highway:"footway"}},w802:{id:"w802",nodes:["n4552","n4553"],tags:{footway:"sidewalk",highway:"footway"}},w803:{id:"w803",nodes:["n4554","n4555","n4556","n4557","n4558","n4559","n4554"],tags:{building:"yes"}},w804:{id:"w804",nodes:["n4562","n4563"],tags:{barrier:"retaining_wall"}},w805:{id:"w805",nodes:["n4568","n4569","n4570","n4571","n4568"],tags:{building:"yes"}},w806:{id:"w806",nodes:["n3473","n4575","n4576","n4581","n4580","n3551"],tags:{highway:"residential",oneway:"yes"}},w807:{id:"w807",nodes:["n4613","n4614","n4615","n4616","n4617","n4618","n4619","n4620","n4613"],tags:{leisure:"pitch",sport:"baseball"}},w808:{id:"w808",nodes:["n4621","n4622","n4623","n4624","n4625","n4626","n4627","n4628","n4629","n4630"],tags:{highway:"service"}},w809:{id:"w809",nodes:["n4631","n4632","n4633","n4637","n4634","n4638","n4635","n4636"],tags:{highway:"service"}},w81:{id:"w81",nodes:["n365","n366","n367"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w810:{id:"w810",nodes:["n4639","n4640","n4641"],tags:{barrier:"fence"}},w811:{id:"w811",nodes:["n4649","n4650","n4651","n4652","n4649"],tags:{building:"yes"}},w812:{id:"w812",nodes:["n4654","n4655"],tags:{barrier:"fence"}},w813:{id:"w813",nodes:["n4656","n4657"],tags:{barrier:"fence"}},w814:{id:"w814",nodes:["n4669","n4670","n4671","n4672","n4669"],tags:{amenity:"shelter",building:"yes",shelter_type:"picnic_shelter"}},w815:{id:"w815",nodes:["n4678","n4679","n4680","n1889"],tags:{highway:"service"}},w816:{id:"w816",nodes:["n239","n4686","n4687"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w817:{id:"w817",nodes:["n4687","n4688","n4689"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w818:{id:"w818",nodes:["n4689","n4690","n307"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w819:{id:"w819",nodes:["n2266","n4743"],tags:{highway:"path"}},w82:{id:"w82",nodes:["n724","n368","n369"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w820:{id:"w820",nodes:["n4785","n4786","n4787","n4788","n1684","n4760","n4769","n4761","n4762","n4763","n4764","n4765","n4766","n4767","n4768","n4785"],tags:{natural:"wood"}},w821:{id:"w821",nodes:["n4769","n4770","n4771","n4772","n4773","n4774","n4775","n4776","n4777","n4778","n4779","n4780","n4781","n4782","n4783","n4784","n4785","n4768","n4767","n4766","n4765","n4764","n4763","n4762","n4761","n4769"],tags:{natural:"scrub"}},w822:{id:"w822",nodes:["n4772","n4789","n4790","n4791","n4792","n4793","n4794","n4795","n4796","n4797","n4798","n4799","n4783","n4782","n4781","n4780","n4779","n4778","n4777","n4776","n4775","n4774","n4773","n4772"],tags:{natural:"wood"}},w823:{id:"w823",nodes:["n4800","n4801","n4802","n4803","n4804","n4805","n4806","n4807","n4808","n4809","n4810","n4811","n4812","n4813","n4814","n4815","n4816","n3490","n3489","n4800"],tags:{natural:"wood"}},w824:{id:"w824",nodes:["n4817","n4818","n4819","n4820","n4821","n4822","n4817"],tags:{landuse:"recreation_ground"}},w825:{id:"w825",nodes:["n4563","n4823","n4824","n4829","n4825","n4826","n4827","n4828","n4562","n4563"],tags:{landuse:"recreation_ground"}},w826:{id:"w826",nodes:["n4830","n4831","n4832","n4833","n4834","n4835","n4836","n4830"],tags:{landuse:"industrial"}},w827:{id:"w827",nodes:["n4563","n4837","n4838","n4839","n4840","n4841","n4842","n4827","n4828","n4562","n4563"],tags:{landuse:"industrial"}},w828:{id:"w828",nodes:["n4843","n4844","n4845","n4846","n4843"],tags:{landuse:"farmland"}},w829:{id:"w829",nodes:["n3712","n4847","n4848","n4849","n4850","n4851","n4852","n4858","n4864","n4959","n4960","n4853","n4857","n4854","n4855","n4856","n3712"],tags:{aeroway:"aerodrome",name:"Three Rivers Municipal Airport"}},w83:{id:"w83",nodes:["n371","n372","n373","n374","n371"],tags:{building:"yes"}},w830:{id:"w830",nodes:["n4855","n4854","n4857","n4853","n4960"],tags:{barrier:"fence"}},w831:{id:"w831",nodes:["n4860","n4859","n4858","n4852","n4851"],tags:{barrier:"fence"}},w832:{id:"w832",nodes:["n4866","n4878","n4869","n4867"],tags:{aeroway:"runway",ref:"5/23"}},w833:{id:"w833",nodes:["n4868","n4890","n4894","n4881","n4869","n4905","n4870"],tags:{aeroway:"runway",ref:"9/27"}},w834:{id:"w834",nodes:["n4871","n4875","n4872","n4895","n4873","n4874","n4871"],tags:{aeroway:"apron"}},w835:{id:"w835",nodes:["n4875","n4876","n4877","n4878","n4879","n4880","n4882","n4881"],tags:{aeroway:"taxiway"}},w836:{id:"w836",nodes:["n4882","n4893","n4883","n4891","n4884","n4885","n4886","n4887","n4888","n4892","n4889","n4890"],tags:{aeroway:"taxiway"}},w837:{id:"w837",nodes:["n4893","n4894"],tags:{aeroway:"taxiway"}},w838:{id:"w838",nodes:["n4895","n4896","n4897","n4898","n4899","n4900","n4901","n4902","n4903","n4906","n4904","n4905"],tags:{aeroway:"taxiway"}},w839:{id:"w839",nodes:["n4907","n4908"],tags:{highway:"service"}},w84:{id:"w84",nodes:["n374","n375","n376","n377","n373","n374"],tags:{building:"yes"}},w840:{id:"w840",nodes:["n4909","n4907","n4910"],tags:{highway:"service"}},w841:{id:"w841",nodes:["n4911","n4912","n4913","n4914","n4911"],tags:{building:"yes"}},w842:{id:"w842",nodes:["n4915","n4916","n4917","n4918","n4915"],tags:{aeroway:"hangar",building:"yes"}},w843:{id:"w843",nodes:["n4919","n4920","n4921","n4922","n4919"],tags:{building:"yes"}},w844:{id:"w844",nodes:["n4923","n4924","n4925","n4926","n4923"],tags:{aeroway:"hangar",building:"yes"}},w845:{id:"w845",nodes:["n4927","n4928","n4929","n4930","n4927"],tags:{aeroway:"hangar",building:"yes"}},w846:{id:"w846",nodes:["n4931","n4932","n4933","n4934","n4931"],tags:{aeroway:"hangar",building:"yes"}},w847:{id:"w847",nodes:["n4935","n4936","n4937","n4938","n4935"],tags:{aeroway:"hangar",building:"yes"}},w848:{id:"w848",nodes:["n4939","n4940","n4941","n4942","n4939"],tags:{aeroway:"hangar",building:"yes"}},w849:{id:"w849",nodes:["n4943","n4944","n4945","n4946","n4943"],tags:{aeroway:"hangar",building:"yes"}},w85:{id:"w85",nodes:["n431","n432","n1038","n433","n434","n1040","n431"],tags:{building:"yes"}},w850:{id:"w850",nodes:["n4947","n4948","n4949","n4950","n4947"],tags:{aeroway:"hangar",building:"yes"}},w851:{id:"w851",nodes:["n4951","n4952","n4953","n4954","n4951"],tags:{aeroway:"hangar",building:"yes"}},w852:{id:"w852",nodes:["n4955","n4956","n4957","n4958","n4955"],tags:{aeroway:"hangar",building:"yes"}},w853:{id:"w853",nodes:["n4959","n4864","n4861","n4862","n4863"],tags:{barrier:"fence"}},w854:{id:"w854",nodes:["n4961","n4962","n4963","n4964","n4965","n4966","n4967","n4968","n4969","n4961"],tags:{landuse:"farmland"}},w855:{id:"w855",nodes:["n4970","n4971","n4972","n4973","n4974","n4975","n4976","n4977","n4978","n4980","n4970"],tags:{landuse:"farmland"}},w856:{id:"w856",nodes:["n4979","n4980","n4978","n4981","n4982","n4983","n4984","n4985","n4979"],tags:{natural:"scrub"}},w857:{id:"w857",nodes:["n4986","n4987","n4988","n5032","n4989","n4990","n4991","n4992","n4993","n4994","n4995","n4996","n4997","n4998","n4999","n5000","n5001","n5002","n5022","n5023","n5024","n5025","n5030","n5031","n5029","n5028","n5027","n5026","n4986"],tags:{landuse:"farmland"}},w858:{id:"w858",nodes:["n5001","n5003","n5004","n4999","n5000","n5001"],tags:{natural:"scrub"}},w859:{id:"w859",nodes:["n5005","n5006","n5007","n5008","n5009","n5010","n5021","n5020","n5019","n5011","n5012","n5013","n5018","n5014","n5015","n5017","n5016","n5005"],tags:{landuse:"farmland"}},w86:{id:"w86",nodes:["n384","n385","n386","n387","n384"],tags:{building:"yes"}},w860:{id:"w860",nodes:["n3020","n5033","n5034","n5035","n3179","n3180","n3191","n3181","n3190","n3182","n3183","n3184","n3185","n3186","n3187","n3188","n3189","n3160","n3161","n3162","n2126","n2153","n2288","n3020"],tags:{landuse:"industrial"}},w87:{id:"w87",nodes:["n387","n388","n389","n386","n387"],tags:{building:"yes"}},w88:{id:"w88",nodes:["n390","n391","n392","n393","n390"],tags:{building:"yes"}},w89:{id:"w89",nodes:["n394","n2895"],tags:{highway:"service"}},w9:{id:"w9",nodes:["n50","n51","n148","n52","n57","n891","n53","n50"],tags:{building:"yes"}},w90:{id:"w90",nodes:["n398","n399","n400","n401","n402","n403","n404","n405","n406","n407","n408","n409","n410","n411","n412","n413","n414","n415","n416","n417","n398"],tags:{building:"yes"}},w91:{id:"w91",nodes:["n418","n423","n419"],tags:{highway:"service"}},w92:{id:"w92",nodes:["n420","n421","n422","n423","n420"],tags:{amenity:"parking"}},w93:{id:"w93",nodes:["n2282","n1876"],tags:{name:"Rocky River",tunnel:"building_passage",waterway:"river"}},w94:{id:"w94",nodes:["n1876","n885","n1875","n2234"],tags:{name:"Rocky River",waterway:"river"}},w95:{id:"w95",nodes:["n425","n426","n427","n914","n428","n913","n425"],tags:{building:"yes"}},w96:{id:"w96",nodes:["n456","n620","n1034","n1035","n456"],tags:{building:"yes"}},w97:{id:"w97",nodes:["n435","n912","n451","n321"],tags:{highway:"footway"}},w98:{id:"w98",nodes:["n436","n319","n437","n438","n439","n440","n441","n476","n442"],tags:{highway:"service"}},w99:{id:"w99",nodes:["n443","n444","n445","n446","n447","n448","n449","n450","n443"],tags:{amenity:"parking"}},n2934:{id:"n2934",loc:[-85.617051,41.952263]},n2935:{id:"n2935",loc:[-85.61699,41.952276]},n2937:{id:"n2937",loc:[-85.616847,41.952262]},n2938:{id:"n2938",loc:[-85.616577,41.951956]},n2939:{id:"n2939",loc:[-85.61656,41.952044]},n3348:{id:"n3348",loc:[-85.61714,41.9522]},n3349:{id:"n3349",loc:[-85.616517,41.95212]},n3350:{id:"n3350",loc:[-85.616489,41.952033]},n3351:{id:"n3351",loc:[-85.616529,41.951907]},n3354:{id:"n3354",loc:[-85.616488,41.951994]},w599:{tags:{footway:"sidewalk",highway:"footway"},id:"w599",nodes:["n1021","n1022","n731","n728","n1023","n1025","n1024","n1019"]},w618:{tags:{footway:"sidewalk",highway:"footway"},id:"w618",nodes:["n1020","n1021"]},n3355:{id:"n3355",loc:[-85.634489,41.946193]}};
82325 // Tooltips and svg mask used to highlight certain features
82326 function uiCurtain() {
82328 var surface = d3_select(null),
82329 tooltip = d3_select(null),
82330 darkness = d3_select(null);
82332 function curtain(selection) {
82333 surface = selection
82335 .attr('id', 'curtain')
82336 .style('z-index', 1000)
82337 .style('pointer-events', 'none')
82338 .style('position', 'absolute')
82342 darkness = surface.append('path')
82345 .attr('class', 'curtain-darkness');
82347 d3_select(window).on('resize.curtain', resize);
82349 tooltip = selection.append('div')
82350 .attr('class', 'tooltip')
82351 .style('z-index', 1002);
82355 .attr('class', 'tooltip-arrow');
82359 .attr('class', 'tooltip-inner');
82364 function resize() {
82366 .attr('width', window.innerWidth)
82367 .attr('height', window.innerHeight);
82368 curtain.cut(darkness.datum());
82374 * Reveal cuts the curtain to highlight the given box,
82375 * and shows a tooltip with instructions next to the box.
82377 * @param {String|ClientRect} [box] box used to cut the curtain
82378 * @param {String} [text] text for a tooltip
82379 * @param {Object} [options]
82380 * @param {string} [options.tooltipClass] optional class to add to the tooltip
82381 * @param {integer} [options.duration] transition time in milliseconds
82382 * @param {string} [options.buttonText] if set, create a button with this text label
82383 * @param {function} [options.buttonCallback] if set, the callback for the button
82384 * @param {String|ClientRect} [options.tooltipBox] box for tooltip position, if different from box for the curtain
82386 curtain.reveal = function(box, text, options) {
82387 if (typeof box === 'string') {
82388 box = d3_select(box).node();
82390 if (box && box.getBoundingClientRect) {
82391 box = copyBox(box.getBoundingClientRect());
82394 options = options || {};
82397 if (options.tooltipBox) {
82398 tooltipBox = options.tooltipBox;
82399 if (typeof tooltipBox === 'string') {
82400 tooltipBox = d3_select(tooltipBox).node();
82402 if (tooltipBox && tooltipBox.getBoundingClientRect) {
82403 tooltipBox = copyBox(tooltipBox.getBoundingClientRect());
82409 if (tooltipBox && text) {
82410 // pseudo markdown bold text for the instruction section..
82411 var parts = text.split('**');
82412 var html = parts[0] ? '<span>' + parts[0] + '</span>' : '';
82414 html += '<span class="instruction">' + parts[1] + '</span>';
82417 html = html.replace(/\*(.*?)\*/g, '<em>$1</em>'); // emphasis
82418 html = html.replace(/\{br\}/g, '<br/><br/>'); // linebreak
82420 if (options.buttonText && options.buttonCallback) {
82421 html += '<div class="button-section">' +
82422 '<button href="#" class="button action">' + options.buttonText + '</button></div>';
82425 var classes = 'curtain-tooltip tooltip in ' + (options.tooltipClass || '');
82427 .classed(classes, true)
82428 .selectAll('.tooltip-inner')
82431 if (options.buttonText && options.buttonCallback) {
82432 var button = tooltip.selectAll('.button-section .button.action');
82434 .on('click', function() {
82435 event.preventDefault();
82436 options.buttonCallback();
82440 var tip = copyBox(tooltip.node().getBoundingClientRect()),
82441 w = window.innerWidth,
82442 h = window.innerHeight,
82443 tooltipWidth = 200,
82448 // hack: this will have bottom placement,
82449 // so need to reserve extra space for the tooltip illustration.
82450 if (options.tooltipClass === 'intro-mouse') {
82454 // trim box dimensions to just the portion that fits in the window..
82455 if (tooltipBox.top + tooltipBox.height > h) {
82456 tooltipBox.height -= (tooltipBox.top + tooltipBox.height - h);
82458 if (tooltipBox.left + tooltipBox.width > w) {
82459 tooltipBox.width -= (tooltipBox.left + tooltipBox.width - w);
82462 // determine tooltip placement..
82464 if (tooltipBox.top + tooltipBox.height < 100) {
82465 // tooltip below box..
82468 tooltipBox.left + tooltipBox.width / 2 - tip.width / 2,
82469 tooltipBox.top + tooltipBox.height
82472 } else if (tooltipBox.top > h - 140) {
82473 // tooltip above box..
82476 tooltipBox.left + tooltipBox.width / 2 - tip.width / 2,
82477 tooltipBox.top - tip.height
82481 // tooltip to the side of the tooltipBox..
82482 var tipY = tooltipBox.top + tooltipBox.height / 2 - tip.height / 2;
82484 if (textDirection === 'rtl') {
82485 if (tooltipBox.left - tooltipWidth - tooltipArrow < 70) {
82487 pos = [tooltipBox.left + tooltipBox.width + tooltipArrow, tipY];
82491 pos = [tooltipBox.left - tooltipWidth - tooltipArrow, tipY];
82495 if (tooltipBox.left + tooltipBox.width + tooltipArrow + tooltipWidth > w - 70) {
82497 pos = [tooltipBox.left - tooltipWidth - tooltipArrow, tipY];
82501 pos = [tooltipBox.left + tooltipBox.width + tooltipArrow, tipY];
82506 if (options.duration !== 0 || !tooltip.classed(side)) {
82507 tooltip.call(uiToggle(true));
82511 .style('top', pos[1] + 'px')
82512 .style('left', pos[0] + 'px')
82513 .attr('class', classes + ' ' + side);
82516 // shift tooltip-inner if it is very close to the top or bottom edge
82517 // (doesn't affect the placement of the tooltip-arrow)
82519 if (side === 'left' || side === 'right') {
82521 shiftY = 60 - pos[1];
82523 else if (pos[1] + tip.height > h - 100) {
82524 shiftY = h - pos[1] - tip.height - 100;
82527 tooltip.selectAll('.tooltip-inner')
82528 .style('top', shiftY + 'px');
82532 .classed('in', false)
82533 .call(uiToggle(false));
82536 curtain.cut(box, options.duration);
82542 curtain.cut = function(datum, duration) {
82543 darkness.datum(datum)
82547 if (duration === 0) {
82548 selection = darkness;
82550 selection = darkness
82552 .duration(duration || 600)
82557 .attr('d', function(d) {
82558 var string = 'M 0,0 L 0,' + window.innerHeight + ' L ' +
82559 window.innerWidth + ',' + window.innerHeight + 'L' +
82560 window.innerWidth + ',0 Z';
82562 if (!d) return string;
82563 return string + 'M' +
82564 d.left + ',' + d.top + 'L' +
82565 d.left + ',' + (d.top + d.height) + 'L' +
82566 (d.left + d.width) + ',' + (d.top + d.height) + 'L' +
82567 (d.left + d.width) + ',' + (d.top) + 'Z';
82573 curtain.remove = function() {
82576 d3_select(window).on('resize.curtain', null);
82580 // ClientRects are immutable, so copy them to an object,
82581 // in case we need to trim the height/width.
82582 function copyBox(src) {
82586 bottom: src.bottom,
82597 function uiIntroWelcome(context, reveal) {
82598 var dispatch$1 = dispatch('done');
82599 var listener = clickListener();
82602 title: 'intro.welcome.title'
82606 function welcome() {
82607 context.map().centerZoom([-85.63591, 41.94285], 19);
82608 reveal('.intro-nav-wrap .chapter-welcome',
82609 t('intro.welcome.welcome'),
82610 { buttonText: t('intro.ok'), buttonCallback: practice }
82614 function practice() {
82615 reveal('.intro-nav-wrap .chapter-welcome',
82616 t('intro.welcome.practice'),
82617 { buttonText: t('intro.ok'), buttonCallback: words }
82622 reveal('.intro-nav-wrap .chapter-welcome',
82623 t('intro.welcome.words'),
82624 { buttonText: t('intro.ok'), buttonCallback: mouse }
82630 reveal('.intro-nav-wrap .chapter-welcome',
82631 t('intro.welcome.mouse'),
82632 { buttonText: t('intro.ok'), buttonCallback: leftClick }
82637 function leftClick() {
82641 var tooltip = reveal('.intro-nav-wrap .chapter-welcome',
82642 t('intro.welcome.leftclick', { num: times }),
82643 { tooltipClass: 'intro-mouse' }
82646 tooltip.selectAll('.tooltip-inner')
82647 .insert('svg', 'span')
82648 .attr('class', 'tooltip-illustration')
82650 .attr('xlink:href', '#iD-walkthrough-mouse');
82654 .attr('class', 'counter');
82656 tooltip.call(listener);
82658 listener.on('click', function(which) {
82659 if (which === 'left') {
82660 d3_select('.curtain-tooltip.intro-mouse .counter')
82661 .text(String(++counter));
82663 if (counter === times) {
82664 window.setTimeout(function() { continueTo(rightClick); }, 1000);
82669 function continueTo(nextStep) {
82670 listener.on('click', null);
82671 tooltip.call(listener.off);
82672 tooltip.select('.counter').remove();
82678 function rightClick() {
82682 var tooltip = reveal('.intro-nav-wrap .chapter-welcome',
82683 t('intro.welcome.rightclick', { num: times }),
82684 { tooltipClass: 'intro-mouse' }
82687 tooltip.selectAll('.tooltip-inner')
82688 .insert('svg', 'span')
82689 .attr('class', 'tooltip-illustration')
82691 .attr('xlink:href', '#iD-walkthrough-mouse');
82695 .attr('class', 'counter');
82697 tooltip.call(listener);
82699 listener.on('click', function(which) {
82700 if (which === 'right') {
82701 d3_select('.curtain-tooltip.intro-mouse .counter')
82702 .text(String(++counter));
82704 if (counter === times) {
82705 window.setTimeout(function() { continueTo(chapters); }, 1000);
82710 function continueTo(nextStep) {
82711 listener.on('click', null);
82712 tooltip.call(listener.off);
82713 tooltip.select('.counter').remove();
82719 function chapters() {
82720 dispatch$1.call('done');
82721 reveal('.intro-nav-wrap .chapter-navigation',
82722 t('intro.welcome.chapters', { next: t('intro.navigation.title') })
82727 chapter.enter = function() {
82732 chapter.exit = function() {
82734 d3_select('.curtain-tooltip.intro-mouse')
82735 .selectAll('.counter')
82740 chapter.restart = function() {
82746 return utilRebind(chapter, dispatch$1, 'on');
82751 function clickListener() {
82752 var dispatch$1 = dispatch('click');
82754 var tooltip = d3_select(null);
82757 // `down` keeps track of which buttons/keys are down.
82758 // Setting a property in `down` happens immediately.
82759 // Unsetting a property in `down` is delayed because
82760 // on Windows a contextmenu event happens after keyup/mouseup
82762 function keydown() {
82763 if (event.keyCode === 93) { // context menu
82764 event.preventDefault();
82765 event.stopPropagation();
82766 down.menu = event.timeStamp;
82767 tooltip.classed('rightclick', true);
82773 if (event.keyCode === 93) { // context menu
82774 event.preventDefault();
82775 event.stopPropagation();
82776 var endTime = event.timeStamp;
82777 var startTime = down.menu || endTime;
82778 var delay = (endTime - startTime < minTime) ? minTime : 0;
82780 window.setTimeout(function() {
82781 tooltip.classed('rightclick', false);
82782 down.menu = undefined; // delayed, for Windows
82785 dispatch$1.call('click', this, 'right');
82790 function mousedown() {
82791 var button = event.button;
82792 if (button === 0 && !event.ctrlKey) {
82793 tooltip.classed('leftclick', true);
82794 } else if (button === 2) {
82795 tooltip.classed('rightclick', true);
82797 down[button] = event.timeStamp;
82801 function mouseup() {
82802 var button = event.button;
82803 var endTime = event.timeStamp;
82804 var startTime = down[button] || endTime;
82805 var delay = (endTime - startTime < minTime) ? minTime : 0;
82807 if (button === 0 && !event.ctrlKey) {
82808 window.setTimeout(function() {
82809 tooltip.classed('leftclick', false);
82810 down[button] = undefined; // delayed, for Windows
82813 dispatch$1.call('click', this, 'left');
82815 } else if (button === 2) {
82816 window.setTimeout(function() {
82817 tooltip.classed('rightclick', false);
82818 down[button] = undefined; // delayed, for Windows
82821 dispatch$1.call('click', this, 'right');
82824 window.setTimeout(function() {
82825 down[button] = undefined; // delayed, for Windows
82831 function contextmenu() {
82832 event.preventDefault();
82833 event.stopPropagation();
82834 if (!down[2] && !down.menu) {
82835 tooltip.classed('rightclick', true);
82836 window.setTimeout(function() {
82837 tooltip.classed('rightclick', false);
82839 dispatch$1.call('click', this, 'right');
82844 var behavior = function(selection) {
82845 tooltip = selection;
82849 .on('keydown.intro', keydown)
82850 .on('keyup.intro', keyup)
82851 .on('mousedown.intro', mousedown)
82852 .on('mouseup.intro', mouseup)
82853 .on('contextmenu.intro', contextmenu);
82857 behavior.off = function() {
82859 .on('keydown.intro', null)
82860 .on('keyup.intro', null)
82861 .on('mousedown.intro', null)
82862 .on('mouseup.intro', null)
82863 .on('contextmenu.intro', null);
82866 .classed('leftclick', false)
82867 .classed('rightclick', false);
82870 return utilRebind(behavior, dispatch$1, 'on');
82873 function uiIntroNavigation(context, reveal) {
82874 var dispatch$1 = dispatch('done');
82876 var hallId = 'n2061';
82877 var townHall = [-85.63591, 41.94285];
82878 var springStreetId = 'w397';
82879 var springStreetEndId = 'n1834';
82880 var springStreet = [-85.63582, 41.94255];
82881 var onewayField = context.presets().field('oneway');
82882 var maxspeedField = context.presets().field('maxspeed');
82886 title: 'intro.navigation.title'
82890 function timeout(f, t) {
82891 timeouts.push(window.setTimeout(f, t));
82895 function eventCancel() {
82896 event.stopPropagation();
82897 event.preventDefault();
82901 function isTownHallSelected() {
82902 var ids = context.selectedIDs();
82903 return ids.length === 1 && ids[0] === hallId;
82907 function dragMap() {
82908 context.enter(modeBrowse(context));
82909 context.history().reset('initial');
82911 var msec = transitionTime(townHall, context.map().center());
82912 if (msec) { reveal(null, null, { duration: 0 }); }
82913 context.map().centerZoomEase(townHall, 19, msec);
82915 timeout(function() {
82916 var centerStart = context.map().center();
82918 reveal('#surface', t('intro.navigation.drag'));
82919 context.map().on('drawn.intro', function() {
82920 reveal('#surface', t('intro.navigation.drag'), { duration: 0 });
82923 context.map().on('move.intro', function() {
82924 var centerNow = context.map().center();
82925 if (centerStart[0] !== centerNow[0] || centerStart[1] !== centerNow[1]) {
82926 context.map().on('move.intro', null);
82927 timeout(function() { continueTo(zoomMap); }, 3000);
82933 function continueTo(nextStep) {
82934 context.map().on('move.intro drawn.intro', null);
82940 function zoomMap() {
82941 var zoomStart = context.map().zoom();
82944 t('intro.navigation.zoom', {
82945 plus: icon('#iD-icon-plus', 'pre-text'),
82946 minus: icon('#iD-icon-minus', 'pre-text')
82950 context.map().on('drawn.intro', function() {
82952 t('intro.navigation.zoom', {
82953 plus: icon('#iD-icon-plus', 'pre-text'),
82954 minus: icon('#iD-icon-minus', 'pre-text')
82955 }), { duration: 0 }
82959 context.map().on('move.intro', function() {
82960 if (context.map().zoom() !== zoomStart) {
82961 context.map().on('move.intro', null);
82962 timeout(function() { continueTo(features); }, 3000);
82966 function continueTo(nextStep) {
82967 context.map().on('move.intro drawn.intro', null);
82973 function features() {
82974 var onClick = function() { continueTo(pointsLinesAreas); };
82976 reveal('#surface', t('intro.navigation.features'),
82977 { buttonText: t('intro.ok'), buttonCallback: onClick }
82980 context.map().on('drawn.intro', function() {
82981 reveal('#surface', t('intro.navigation.features'),
82982 { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
82986 function continueTo(nextStep) {
82987 context.map().on('drawn.intro', null);
82992 function pointsLinesAreas() {
82993 var onClick = function() { continueTo(nodesWays); };
82995 reveal('#surface', t('intro.navigation.points_lines_areas'),
82996 { buttonText: t('intro.ok'), buttonCallback: onClick }
82999 context.map().on('drawn.intro', function() {
83000 reveal('#surface', t('intro.navigation.points_lines_areas'),
83001 { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
83005 function continueTo(nextStep) {
83006 context.map().on('drawn.intro', null);
83011 function nodesWays() {
83012 var onClick = function() { continueTo(clickTownHall); };
83014 reveal('#surface', t('intro.navigation.nodes_ways'),
83015 { buttonText: t('intro.ok'), buttonCallback: onClick }
83018 context.map().on('drawn.intro', function() {
83019 reveal('#surface', t('intro.navigation.nodes_ways'),
83020 { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
83024 function continueTo(nextStep) {
83025 context.map().on('drawn.intro', null);
83030 function clickTownHall() {
83031 context.enter(modeBrowse(context));
83032 context.history().reset('initial');
83034 var entity = context.hasEntity(hallId);
83035 if (!entity) return;
83036 reveal(null, null, { duration: 0 });
83037 context.map().centerZoomEase(entity.loc, 19, 500);
83039 timeout(function() {
83040 var entity = context.hasEntity(hallId);
83041 if (!entity) return;
83042 var box = pointBox(entity.loc, context);
83043 reveal(box, t('intro.navigation.click_townhall'));
83045 context.map().on('move.intro drawn.intro', function() {
83046 var entity = context.hasEntity(hallId);
83047 if (!entity) return;
83048 var box = pointBox(entity.loc, context);
83049 reveal(box, t('intro.navigation.click_townhall'), { duration: 0 });
83052 context.on('enter.intro', function() {
83053 if (isTownHallSelected()) continueTo(selectedTownHall);
83056 }, 550); // after centerZoomEase
83058 context.history().on('change.intro', function() {
83059 if (!context.hasEntity(hallId)) {
83060 continueTo(clickTownHall);
83064 function continueTo(nextStep) {
83065 context.on('enter.intro', null);
83066 context.map().on('move.intro drawn.intro', null);
83067 context.history().on('change.intro', null);
83073 function selectedTownHall() {
83074 if (!isTownHallSelected()) return clickTownHall();
83076 var entity = context.hasEntity(hallId);
83077 if (!entity) return clickTownHall();
83079 var box = pointBox(entity.loc, context);
83080 var onClick = function() { continueTo(editorTownHall); };
83082 reveal(box, t('intro.navigation.selected_townhall'),
83083 { buttonText: t('intro.ok'), buttonCallback: onClick }
83086 context.map().on('move.intro drawn.intro', function() {
83087 var entity = context.hasEntity(hallId);
83088 if (!entity) return;
83089 var box = pointBox(entity.loc, context);
83090 reveal(box, t('intro.navigation.selected_townhall'),
83091 { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
83095 context.history().on('change.intro', function() {
83096 if (!context.hasEntity(hallId)) {
83097 continueTo(clickTownHall);
83101 function continueTo(nextStep) {
83102 context.map().on('move.intro drawn.intro', null);
83103 context.history().on('change.intro', null);
83109 function editorTownHall() {
83110 if (!isTownHallSelected()) return clickTownHall();
83112 // disallow scrolling
83113 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
83115 var onClick = function() { continueTo(presetTownHall); };
83117 reveal('.entity-editor-pane',
83118 t('intro.navigation.editor_townhall'),
83119 { buttonText: t('intro.ok'), buttonCallback: onClick }
83122 context.on('exit.intro', function() {
83123 continueTo(clickTownHall);
83126 context.history().on('change.intro', function() {
83127 if (!context.hasEntity(hallId)) {
83128 continueTo(clickTownHall);
83132 function continueTo(nextStep) {
83133 context.on('exit.intro', null);
83134 context.history().on('change.intro', null);
83135 d3_select('.inspector-wrap').on('wheel.intro', null);
83141 function presetTownHall() {
83142 if (!isTownHallSelected()) return clickTownHall();
83144 // reset pane, in case user happened to change it..
83145 d3_select('.inspector-wrap .panewrap').style('right', '0%');
83146 // disallow scrolling
83147 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
83149 // preset match, in case the user happened to change it.
83150 var entity = context.entity(context.selectedIDs()[0]);
83151 var preset = context.presets().match(entity, context.graph());
83153 var onClick = function() { continueTo(fieldsTownHall); };
83155 context.on('exit.intro', function() {
83156 continueTo(clickTownHall);
83159 context.history().on('change.intro', function() {
83160 if (!context.hasEntity(hallId)) {
83161 continueTo(clickTownHall);
83165 reveal('.inspector-body .preset-list-item.inspector-inner',
83166 t('intro.navigation.preset_townhall', { preset: preset.name() }),
83167 { buttonText: t('intro.ok'), buttonCallback: onClick }
83170 function continueTo(nextStep) {
83171 context.on('exit.intro', null);
83172 context.history().on('change.intro', null);
83173 d3_select('.inspector-wrap').on('wheel.intro', null);
83179 function fieldsTownHall() {
83180 if (!isTownHallSelected()) return clickTownHall();
83182 // reset pane, in case user happened to change it..
83183 d3_select('.inspector-wrap .panewrap').style('right', '0%');
83184 // disallow scrolling
83185 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
83187 var onClick = function() { continueTo(closeTownHall); };
83189 reveal('.inspector-body .preset-editor',
83190 t('intro.navigation.fields_townhall'),
83191 { buttonText: t('intro.ok'), buttonCallback: onClick }
83194 context.on('exit.intro', function() {
83195 continueTo(clickTownHall);
83198 context.history().on('change.intro', function() {
83199 if (!context.hasEntity(hallId)) {
83200 continueTo(clickTownHall);
83204 function continueTo(nextStep) {
83205 context.on('exit.intro', null);
83206 context.history().on('change.intro', null);
83207 d3_select('.inspector-wrap').on('wheel.intro', null);
83213 function closeTownHall() {
83214 if (!isTownHallSelected()) return clickTownHall();
83216 var selector = '.entity-editor-pane button.preset-close svg use';
83217 var href = d3_select(selector).attr('href') || '#iD-icon-close';
83219 reveal('.entity-editor-pane',
83220 t('intro.navigation.close_townhall', { button: icon(href, 'pre-text') })
83223 context.on('exit.intro', function() {
83224 continueTo(searchStreet);
83227 context.history().on('change.intro', function() {
83228 // update the close icon in the tooltip if the user edits something.
83229 var selector = '.entity-editor-pane button.preset-close svg use';
83230 var href = d3_select(selector).attr('href') || '#iD-icon-close';
83232 reveal('.entity-editor-pane',
83233 t('intro.navigation.close_townhall', { button: icon(href, 'pre-text') }),
83238 function continueTo(nextStep) {
83239 context.on('exit.intro', null);
83240 context.history().on('change.intro', null);
83246 function searchStreet() {
83247 context.enter(modeBrowse(context));
83248 context.history().reset('initial'); // ensure spring street exists
83250 var msec = transitionTime(springStreet, context.map().center());
83251 if (msec) { reveal(null, null, { duration: 0 }); }
83252 context.map().centerZoomEase(springStreet, 19, msec); // ..and user can see it
83254 timeout(function() {
83255 reveal('.search-header input',
83256 t('intro.navigation.search_street', { name: t('intro.graph.name.spring-street') })
83259 d3_select('.search-header input')
83260 .on('keyup.intro', checkSearchResult);
83265 function checkSearchResult() {
83266 var first = d3_select('.feature-list-item:nth-child(0n+2)'); // skip "No Results" item
83267 var firstName = first.select('.entity-name');
83268 var name = t('intro.graph.name.spring-street');
83270 if (!firstName.empty() && firstName.text() === name) {
83271 reveal(first.node(),
83272 t('intro.navigation.choose_street', { name: name }),
83276 context.on('exit.intro', function() {
83277 continueTo(selectedStreet);
83280 d3_select('.search-header input')
83281 .on('keydown.intro', eventCancel, true)
83282 .on('keyup.intro', null);
83285 function continueTo(nextStep) {
83286 context.on('exit.intro', null);
83287 d3_select('.search-header input')
83288 .on('keydown.intro', null)
83289 .on('keyup.intro', null);
83295 function selectedStreet() {
83296 if (!context.hasEntity(springStreetEndId) || !context.hasEntity(springStreetId)) {
83297 return searchStreet();
83300 var onClick = function() { continueTo(editorStreet); };
83301 var entity = context.entity(springStreetEndId);
83302 var box = pointBox(entity.loc, context);
83306 t('intro.navigation.selected_street', { name: t('intro.graph.name.spring-street') }),
83307 { duration: 600, buttonText: t('intro.ok'), buttonCallback: onClick }
83310 timeout(function() {
83311 context.map().on('move.intro drawn.intro', function() {
83312 var entity = context.hasEntity(springStreetEndId);
83313 if (!entity) return;
83314 var box = pointBox(entity.loc, context);
83317 t('intro.navigation.selected_street', { name: t('intro.graph.name.spring-street') }),
83318 { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
83321 }, 600); // after reveal.
83323 context.on('enter.intro', function(mode) {
83324 if (!context.hasEntity(springStreetId)) {
83325 return continueTo(searchStreet);
83327 var ids = context.selectedIDs();
83328 if (mode.id !== 'select' || !ids.length || ids[0] !== springStreetId) {
83329 // keep Spring Street selected..
83330 context.enter(modeSelect(context, [springStreetId]));
83334 context.history().on('change.intro', function() {
83335 if (!context.hasEntity(springStreetEndId) || !context.hasEntity(springStreetId)) {
83336 timeout(function() {
83337 continueTo(searchStreet);
83338 }, 300); // after any transition (e.g. if user deleted intersection)
83342 function continueTo(nextStep) {
83343 context.map().on('move.intro drawn.intro', null);
83344 context.on('enter.intro', null);
83345 context.history().on('change.intro', null);
83351 function editorStreet() {
83352 var selector = '.entity-editor-pane button.preset-close svg use';
83353 var href = d3_select(selector).attr('href') || '#iD-icon-close';
83355 reveal('.entity-editor-pane',
83356 t('intro.navigation.editor_street', {
83357 button: icon(href, 'pre-text'),
83358 field1: onewayField.label(),
83359 field2: maxspeedField.label()
83363 context.on('exit.intro', function() {
83367 context.history().on('change.intro', function() {
83368 // update the close icon in the tooltip if the user edits something.
83369 var selector = '.entity-editor-pane button.preset-close svg use';
83370 var href = d3_select(selector).attr('href') || '#iD-icon-close';
83372 reveal('.entity-editor-pane',
83373 t('intro.navigation.editor_street', {
83374 button: icon(href, 'pre-text'),
83375 field1: onewayField.label().toLowerCase(),
83376 field2: maxspeedField.label().toLowerCase()
83377 }), { duration: 0 }
83381 function continueTo(nextStep) {
83382 context.on('exit.intro', null);
83383 context.history().on('change.intro', null);
83390 dispatch$1.call('done');
83391 reveal('#id-container',
83392 t('intro.navigation.play', { next: t('intro.points.title') }), {
83393 tooltipBox: '.intro-nav-wrap .chapter-point',
83394 buttonText: t('intro.ok'),
83395 buttonCallback: function() { reveal('#id-container'); }
83401 chapter.enter = function() {
83406 chapter.exit = function() {
83407 timeouts.forEach(window.clearTimeout);
83408 context.on('enter.intro exit.intro', null);
83409 context.map().on('move.intro drawn.intro', null);
83410 context.history().on('change.intro', null);
83411 d3_select('.inspector-wrap').on('wheel.intro', null);
83412 d3_select('.search-header input').on('keydown.intro keyup.intro', null);
83416 chapter.restart = function() {
83422 return utilRebind(chapter, dispatch$1, 'on');
83425 function uiIntroPoint(context, reveal) {
83426 var dispatch$1 = dispatch('done');
83428 var intersection = [-85.63279, 41.94394];
83429 var building = [-85.632422, 41.944045];
83430 var cafePreset = context.presets().item('amenity/cafe');
83431 var _pointID = null;
83435 title: 'intro.points.title'
83439 function timeout(f, t) {
83440 timeouts.push(window.setTimeout(f, t));
83444 function revealEditMenu(loc, text, options) {
83445 var rect = context.surfaceRect();
83446 var point = context.curtainProjection(loc);
83448 var width = 250 + (2 * pad);
83450 var startX = rect.left + point[0];
83451 var left = (textDirection === 'rtl') ? (startX - width + pad) : (startX - pad);
83454 top: point[1] + rect.top - 60,
83458 reveal(box, text, options);
83462 function eventCancel() {
83463 event.stopPropagation();
83464 event.preventDefault();
83468 function addPoint() {
83469 context.enter(modeBrowse(context));
83470 context.history().reset('initial');
83472 var msec = transitionTime(intersection, context.map().center());
83473 if (msec) { reveal(null, null, { duration: 0 }); }
83474 context.map().centerZoomEase(intersection, 19, msec);
83476 timeout(function() {
83477 var tooltip = reveal('button.add-point',
83478 t('intro.points.add_point', { button: icon('#iD-icon-point', 'pre-text') }));
83482 tooltip.selectAll('.tooltip-inner')
83483 .insert('svg', 'span')
83484 .attr('class', 'tooltip-illustration')
83486 .attr('xlink:href', '#iD-graphic-points');
83488 context.on('enter.intro', function(mode) {
83489 if (mode.id !== 'add-point') return;
83490 continueTo(placePoint);
83494 function continueTo(nextStep) {
83495 context.on('enter.intro', null);
83501 function placePoint() {
83502 if (context.mode().id !== 'add-point') {
83503 return chapter.restart();
83506 var pointBox = pad$2(building, 150, context);
83507 reveal(pointBox, t('intro.points.place_point'));
83509 context.map().on('move.intro drawn.intro', function() {
83510 pointBox = pad$2(building, 150, context);
83511 reveal(pointBox, t('intro.points.place_point'), { duration: 0 });
83514 context.on('enter.intro', function(mode) {
83515 if (mode.id !== 'select') return chapter.restart();
83516 _pointID = context.mode().selectedIDs()[0];
83517 continueTo(searchPreset);
83520 function continueTo(nextStep) {
83521 context.map().on('move.intro drawn.intro', null);
83522 context.on('enter.intro', null);
83528 function searchPreset() {
83529 if (context.mode().id !== 'select' || !_pointID || !context.hasEntity(_pointID)) {
83533 // disallow scrolling
83534 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
83536 d3_select('.preset-search-input')
83537 .on('keydown.intro', null)
83538 .on('keyup.intro', checkPresetSearch);
83540 reveal('.preset-search-input',
83541 t('intro.points.search_cafe', { preset: cafePreset.name() })
83544 context.on('enter.intro', function(mode) {
83545 if (!_pointID || !context.hasEntity(_pointID)) {
83546 return continueTo(addPoint);
83549 var ids = context.selectedIDs();
83550 if (mode.id !== 'select' || !ids.length || ids[0] !== _pointID) {
83551 // keep the user's point selected..
83552 context.enter(modeSelect(context, [_pointID]));
83554 // disallow scrolling
83555 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
83557 d3_select('.preset-search-input')
83558 .on('keydown.intro', null)
83559 .on('keyup.intro', checkPresetSearch);
83561 reveal('.preset-search-input',
83562 t('intro.points.search_cafe', { preset: cafePreset.name() })
83565 context.history().on('change.intro', null);
83570 function checkPresetSearch() {
83571 var first = d3_select('.preset-list-item:first-child');
83573 if (first.classed('preset-amenity-cafe')) {
83574 d3_select('.preset-search-input')
83575 .on('keydown.intro', eventCancel, true)
83576 .on('keyup.intro', null);
83578 reveal(first.select('.preset-list-button').node(),
83579 t('intro.points.choose_cafe', { preset: cafePreset.name() }),
83583 context.history().on('change.intro', function() {
83584 continueTo(aboutFeatureEditor);
83589 function continueTo(nextStep) {
83590 context.on('enter.intro', null);
83591 context.history().on('change.intro', null);
83592 d3_select('.inspector-wrap').on('wheel.intro', null);
83593 d3_select('.preset-search-input').on('keydown.intro keyup.intro', null);
83599 function aboutFeatureEditor() {
83600 if (context.mode().id !== 'select' || !_pointID || !context.hasEntity(_pointID)) {
83604 timeout(function() {
83605 reveal('.entity-editor-pane', t('intro.points.feature_editor'), {
83606 tooltipClass: 'intro-points-describe',
83607 buttonText: t('intro.ok'),
83608 buttonCallback: function() { continueTo(addName); }
83612 context.on('exit.intro', function() {
83613 // if user leaves select mode here, just continue with the tutorial.
83614 continueTo(reselectPoint);
83617 function continueTo(nextStep) {
83618 context.on('exit.intro', null);
83624 function addName() {
83625 if (context.mode().id !== 'select' || !_pointID || !context.hasEntity(_pointID)) {
83629 // reset pane, in case user happened to change it..
83630 d3_select('.inspector-wrap .panewrap').style('right', '0%');
83632 timeout(function() {
83633 // It's possible for the user to add a name in a previous step..
83634 // If so, don't tell them to add the name in this step.
83635 // Give them an OK button instead.
83636 var entity = context.entity(_pointID);
83637 if (entity.tags.name) {
83638 var tooltip = reveal('.entity-editor-pane', t('intro.points.add_name'), {
83639 tooltipClass: 'intro-points-describe',
83640 buttonText: t('intro.ok'),
83641 buttonCallback: function() { continueTo(addCloseEditor); }
83643 tooltip.select('.instruction').style('display', 'none');
83646 reveal('.entity-editor-pane', t('intro.points.add_name'),
83647 { tooltipClass: 'intro-points-describe' }
83652 context.history().on('change.intro', function() {
83653 continueTo(addCloseEditor);
83656 context.on('exit.intro', function() {
83657 // if user leaves select mode here, just continue with the tutorial.
83658 continueTo(reselectPoint);
83661 function continueTo(nextStep) {
83662 context.on('exit.intro', null);
83663 context.history().on('change.intro', null);
83669 function addCloseEditor() {
83670 // reset pane, in case user happened to change it..
83671 d3_select('.inspector-wrap .panewrap').style('right', '0%');
83673 var selector = '.entity-editor-pane button.preset-close svg use';
83674 var href = d3_select(selector).attr('href') || '#iD-icon-close';
83676 context.on('exit.intro', function() {
83677 continueTo(reselectPoint);
83680 reveal('.entity-editor-pane',
83681 t('intro.points.add_close', { button: icon(href, 'pre-text') })
83684 function continueTo(nextStep) {
83685 context.on('exit.intro', null);
83691 function reselectPoint() {
83692 if (!_pointID) return chapter.restart();
83693 var entity = context.hasEntity(_pointID);
83694 if (!entity) return chapter.restart();
83696 // make sure it's still a cafe, in case user somehow changed it..
83697 var oldPreset = context.presets().match(entity, context.graph());
83698 context.replace(actionChangePreset(_pointID, oldPreset, cafePreset));
83700 context.enter(modeBrowse(context));
83702 var msec = transitionTime(entity.loc, context.map().center());
83703 if (msec) { reveal(null, null, { duration: 0 }); }
83704 context.map().centerEase(entity.loc, msec);
83706 timeout(function() {
83707 var box = pointBox(entity.loc, context);
83708 reveal(box, t('intro.points.reselect'), { duration: 600 });
83710 timeout(function() {
83711 context.map().on('move.intro drawn.intro', function() {
83712 var entity = context.hasEntity(_pointID);
83713 if (!entity) return chapter.restart();
83714 var box = pointBox(entity.loc, context);
83715 reveal(box, t('intro.points.reselect'), { duration: 0 });
83717 }, 600); // after reveal..
83719 context.on('enter.intro', function(mode) {
83720 if (mode.id !== 'select') return;
83721 continueTo(updatePoint);
83726 function continueTo(nextStep) {
83727 context.map().on('move.intro drawn.intro', null);
83728 context.on('enter.intro', null);
83734 function updatePoint() {
83735 if (context.mode().id !== 'select' || !_pointID || !context.hasEntity(_pointID)) {
83736 return continueTo(reselectPoint);
83739 // reset pane, in case user happened to untag the point..
83740 d3_select('.inspector-wrap .panewrap').style('right', '0%');
83742 context.on('exit.intro', function() {
83743 continueTo(reselectPoint);
83746 context.history().on('change.intro', function() {
83747 continueTo(updateCloseEditor);
83750 timeout(function() {
83751 reveal('.entity-editor-pane', t('intro.points.update'),
83752 { tooltipClass: 'intro-points-describe' }
83756 function continueTo(nextStep) {
83757 context.on('exit.intro', null);
83758 context.history().on('change.intro', null);
83764 function updateCloseEditor() {
83765 if (context.mode().id !== 'select' || !_pointID || !context.hasEntity(_pointID)) {
83766 return continueTo(reselectPoint);
83769 // reset pane, in case user happened to change it..
83770 d3_select('.inspector-wrap .panewrap').style('right', '0%');
83772 context.on('exit.intro', function() {
83773 continueTo(rightClickPoint);
83776 timeout(function() {
83777 reveal('.entity-editor-pane',
83778 t('intro.points.update_close', { button: icon('#iD-icon-apply', 'pre-text') })
83782 function continueTo(nextStep) {
83783 context.on('exit.intro', null);
83789 function rightClickPoint() {
83790 if (!_pointID) return chapter.restart();
83791 var entity = context.hasEntity(_pointID);
83792 if (!entity) return chapter.restart();
83794 context.enter(modeBrowse(context));
83796 var box = pointBox(entity.loc, context);
83797 reveal(box, t('intro.points.rightclick'), { duration: 600 });
83799 timeout(function() {
83800 context.map().on('move.intro drawn.intro', function() {
83801 var entity = context.hasEntity(_pointID);
83802 if (!entity) return chapter.restart();
83803 var box = pointBox(entity.loc, context);
83804 reveal(box, t('intro.points.rightclick'), { duration: 0 });
83806 }, 600); // after reveal
83808 context.on('enter.intro', function(mode) {
83809 if (mode.id !== 'select') return;
83810 var ids = context.selectedIDs();
83811 if (ids.length !== 1 || ids[0] !== _pointID) return;
83813 timeout(function() {
83814 var node = selectMenuItem('delete').node();
83816 continueTo(enterDelete);
83817 }, 300); // after menu visible
83820 function continueTo(nextStep) {
83821 context.on('enter.intro', null);
83822 context.map().on('move.intro drawn.intro', null);
83828 function enterDelete() {
83829 if (!_pointID) return chapter.restart();
83830 var entity = context.hasEntity(_pointID);
83831 if (!entity) return chapter.restart();
83833 var node = selectMenuItem('delete').node();
83834 if (!node) { return continueTo(rightClickPoint); }
83836 revealEditMenu(entity.loc,
83837 t('intro.points.delete', { button: icon('#iD-operation-delete', 'pre-text') })
83840 timeout(function() {
83841 context.map().on('move.intro drawn.intro', function() {
83842 revealEditMenu(entity.loc,
83843 t('intro.points.delete', { button: icon('#iD-operation-delete', 'pre-text') }),
83847 }, 300); // after menu visible
83849 context.on('exit.intro', function() {
83850 if (!_pointID) return chapter.restart();
83851 var entity = context.hasEntity(_pointID);
83852 if (entity) return continueTo(rightClickPoint); // point still exists
83855 context.history().on('change.intro', function(changed) {
83856 if (changed.deleted().length) {
83861 function continueTo(nextStep) {
83862 context.map().on('move.intro drawn.intro', null);
83863 context.history().on('change.intro', null);
83864 context.on('exit.intro', null);
83871 context.history().on('change.intro', function() {
83875 var iconName = '#iD-icon-' + (textDirection === 'rtl' ? 'redo' : 'undo');
83876 reveal('#bar button.undo-button',
83877 t('intro.points.undo', { button: icon(iconName, 'pre-text') })
83880 function continueTo(nextStep) {
83881 context.history().on('change.intro', null);
83888 dispatch$1.call('done');
83889 reveal('#id-container',
83890 t('intro.points.play', { next: t('intro.areas.title') }), {
83891 tooltipBox: '.intro-nav-wrap .chapter-area',
83892 buttonText: t('intro.ok'),
83893 buttonCallback: function() { reveal('#id-container'); }
83899 chapter.enter = function() {
83904 chapter.exit = function() {
83905 timeouts.forEach(window.clearTimeout);
83906 context.on('enter.intro exit.intro', null);
83907 context.map().on('move.intro drawn.intro', null);
83908 context.history().on('change.intro', null);
83909 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
83910 d3_select('.preset-search-input').on('keydown.intro keyup.intro', null);
83914 chapter.restart = function() {
83920 return utilRebind(chapter, dispatch$1, 'on');
83923 function uiIntroArea(context, reveal) {
83924 var dispatch$1 = dispatch('done');
83925 var playground = [-85.63552, 41.94159];
83926 var playgroundPreset = context.presets().item('leisure/playground');
83927 var descriptionField = context.presets().field('description');
83933 title: 'intro.areas.title'
83937 function timeout(f, t) {
83938 timeouts.push(window.setTimeout(f, t));
83942 function eventCancel() {
83943 event.stopPropagation();
83944 event.preventDefault();
83948 function revealPlayground(center, text, options) {
83949 var padding = 180 * Math.pow(2, context.map().zoom() - 19.5);
83950 var box = pad$2(center, padding, context);
83951 reveal(box, text, options);
83955 function addArea() {
83956 context.enter(modeBrowse(context));
83957 context.history().reset('initial');
83960 var msec = transitionTime(playground, context.map().center());
83961 if (msec) { reveal(null, null, { duration: 0 }); }
83962 context.map().centerZoomEase(playground, 19, msec);
83964 timeout(function() {
83965 var tooltip = reveal('button.add-area',
83966 t('intro.areas.add_playground', { button: icon('#iD-icon-area', 'pre-text') }));
83968 tooltip.selectAll('.tooltip-inner')
83969 .insert('svg', 'span')
83970 .attr('class', 'tooltip-illustration')
83972 .attr('xlink:href', '#iD-graphic-areas');
83974 context.on('enter.intro', function(mode) {
83975 if (mode.id !== 'add-area') return;
83976 continueTo(startPlayground);
83980 function continueTo(nextStep) {
83981 context.on('enter.intro', null);
83987 function startPlayground() {
83988 if (context.mode().id !== 'add-area') {
83989 return chapter.restart();
83993 context.map().zoomEase(19.5, 500);
83995 timeout(function() {
83996 revealPlayground(playground,
83997 t('intro.areas.start_playground'), { duration: 250 }
84000 timeout(function() {
84001 context.map().on('move.intro drawn.intro', function() {
84002 revealPlayground(playground,
84003 t('intro.areas.start_playground'), { duration: 0 }
84006 context.on('enter.intro', function(mode) {
84007 if (mode.id !== 'draw-area') return chapter.restart();
84008 continueTo(continuePlayground);
84010 }, 250); // after reveal
84012 }, 550); // after easing
84014 function continueTo(nextStep) {
84015 context.map().on('move.intro drawn.intro', null);
84016 context.on('enter.intro', null);
84022 function continuePlayground() {
84023 if (context.mode().id !== 'draw-area') {
84024 return chapter.restart();
84028 revealPlayground(playground,
84029 t('intro.areas.continue_playground', { alt: uiCmd.display('⌥') }),
84033 timeout(function() {
84034 context.map().on('move.intro drawn.intro', function() {
84035 revealPlayground(playground,
84036 t('intro.areas.continue_playground', { alt: uiCmd.display('⌥') }),
84040 }, 250); // after reveal
84042 context.on('enter.intro', function(mode) {
84043 if (mode.id === 'draw-area') {
84044 var entity = context.hasEntity(context.selectedIDs()[0]);
84045 if (entity && entity.nodes.length >= 6) {
84046 return continueTo(finishPlayground);
84050 } else if (mode.id === 'select') {
84051 _areaID = context.selectedIDs()[0];
84052 return continueTo(searchPresets);
84054 return chapter.restart();
84058 function continueTo(nextStep) {
84059 context.map().on('move.intro drawn.intro', null);
84060 context.on('enter.intro', null);
84066 function finishPlayground() {
84067 if (context.mode().id !== 'draw-area') {
84068 return chapter.restart();
84072 revealPlayground(playground,
84073 t('intro.areas.finish_playground'), { duration: 250 }
84076 timeout(function() {
84077 context.map().on('move.intro drawn.intro', function() {
84078 revealPlayground(playground,
84079 t('intro.areas.finish_playground'), { duration: 0 }
84082 }, 250); // after reveal
84084 context.on('enter.intro', function(mode) {
84085 if (mode.id === 'draw-area') {
84087 } else if (mode.id === 'select') {
84088 _areaID = context.selectedIDs()[0];
84089 return continueTo(searchPresets);
84091 return chapter.restart();
84095 function continueTo(nextStep) {
84096 context.map().on('move.intro drawn.intro', null);
84097 context.on('enter.intro', null);
84103 function searchPresets() {
84104 if (!_areaID || !context.hasEntity(_areaID)) {
84107 var ids = context.selectedIDs();
84108 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _areaID) {
84109 context.enter(modeSelect(context, [_areaID]));
84112 // disallow scrolling
84113 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
84115 timeout(function() {
84116 // reset pane, in case user somehow happened to change it..
84117 d3_select('.inspector-wrap .panewrap').style('right', '-100%');
84119 d3_select('.preset-search-input')
84120 .on('keydown.intro', null)
84121 .on('keyup.intro', checkPresetSearch);
84123 reveal('.preset-search-input',
84124 t('intro.areas.search_playground', { preset: playgroundPreset.name() })
84126 }, 400); // after preset list pane visible..
84128 context.on('enter.intro', function(mode) {
84129 if (!_areaID || !context.hasEntity(_areaID)) {
84130 return continueTo(addArea);
84133 var ids = context.selectedIDs();
84134 if (mode.id !== 'select' || !ids.length || ids[0] !== _areaID) {
84135 // keep the user's area selected..
84136 context.enter(modeSelect(context, [_areaID]));
84138 // reset pane, in case user somehow happened to change it..
84139 d3_select('.inspector-wrap .panewrap').style('right', '-100%');
84140 // disallow scrolling
84141 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
84143 d3_select('.preset-search-input')
84144 .on('keydown.intro', null)
84145 .on('keyup.intro', checkPresetSearch);
84147 reveal('.preset-search-input',
84148 t('intro.areas.search_playground', { preset: playgroundPreset.name() })
84151 context.history().on('change.intro', null);
84155 function checkPresetSearch() {
84156 var first = d3_select('.preset-list-item:first-child');
84158 if (first.classed('preset-leisure-playground')) {
84159 reveal(first.select('.preset-list-button').node(),
84160 t('intro.areas.choose_playground', { preset: playgroundPreset.name() }),
84164 d3_select('.preset-search-input')
84165 .on('keydown.intro', eventCancel, true)
84166 .on('keyup.intro', null);
84168 context.history().on('change.intro', function() {
84169 continueTo(clickAddField);
84174 function continueTo(nextStep) {
84175 d3_select('.inspector-wrap').on('wheel.intro', null);
84176 context.on('enter.intro', null);
84177 context.history().on('change.intro', null);
84178 d3_select('.preset-search-input').on('keydown.intro keyup.intro', null);
84184 function clickAddField() {
84185 if (!_areaID || !context.hasEntity(_areaID)) {
84188 var ids = context.selectedIDs();
84189 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _areaID) {
84190 return searchPresets();
84193 if (!d3_select('.form-field-description').empty()) {
84194 return continueTo(describePlayground);
84197 // disallow scrolling
84198 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
84200 timeout(function() {
84201 // reset pane, in case user somehow happened to change it..
84202 d3_select('.inspector-wrap .panewrap').style('right', '0%');
84204 // It's possible for the user to add a description in a previous step..
84205 // If they did this already, just continue to next step.
84206 var entity = context.entity(_areaID);
84207 if (entity.tags.description) {
84208 return continueTo(play);
84211 // scroll "Add field" into view
84212 var box = d3_select('.more-fields').node().getBoundingClientRect();
84213 if (box.top > 300) {
84214 var pane = d3_select('.entity-editor-pane .inspector-body');
84215 var start = pane.node().scrollTop;
84216 var end = start + (box.top - 300);
84221 .tween('scroll.inspector', function() {
84223 var i = d3_interpolateNumber(start, end);
84224 return function(t) {
84225 node.scrollTop = i(t);
84230 timeout(function() {
84231 reveal('.more-fields .combobox-input',
84232 t('intro.areas.add_field'),
84236 d3_select('.more-fields .combobox-input')
84237 .on('click.intro', function() {
84238 // Watch for the combobox to appear...
84240 watcher = window.setInterval(function() {
84241 if (!d3_select('div.combobox').empty()) {
84242 window.clearInterval(watcher);
84243 continueTo(chooseDescriptionField);
84247 }, 300); // after "Add Field" visible
84249 }, 400); // after editor pane visible
84251 context.on('exit.intro', function() {
84252 return continueTo(searchPresets);
84255 function continueTo(nextStep) {
84256 d3_select('.inspector-wrap').on('wheel.intro', null);
84257 d3_select('.more-fields .combobox-input').on('click.intro', null);
84258 context.on('exit.intro', null);
84264 function chooseDescriptionField() {
84265 if (!_areaID || !context.hasEntity(_areaID)) {
84268 var ids = context.selectedIDs();
84269 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _areaID) {
84270 return searchPresets();
84273 if (!d3_select('.form-field-description').empty()) {
84274 return continueTo(describePlayground);
84277 // Make sure combobox is ready..
84278 if (d3_select('div.combobox').empty()) {
84279 return continueTo(clickAddField);
84281 // Watch for the combobox to go away..
84283 watcher = window.setInterval(function() {
84284 if (d3_select('div.combobox').empty()) {
84285 window.clearInterval(watcher);
84286 timeout(function() {
84287 if (d3_select('.form-field-description').empty()) {
84288 continueTo(retryChooseDescription);
84290 continueTo(describePlayground);
84292 }, 300); // after description field added.
84296 reveal('div.combobox',
84297 t('intro.areas.choose_field', { field: descriptionField.label() }),
84301 context.on('exit.intro', function() {
84302 return continueTo(searchPresets);
84305 function continueTo(nextStep) {
84306 if (watcher) window.clearInterval(watcher);
84307 context.on('exit.intro', null);
84313 function describePlayground() {
84314 if (!_areaID || !context.hasEntity(_areaID)) {
84317 var ids = context.selectedIDs();
84318 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _areaID) {
84319 return searchPresets();
84322 // reset pane, in case user happened to change it..
84323 d3_select('.inspector-wrap .panewrap').style('right', '0%');
84325 if (d3_select('.form-field-description').empty()) {
84326 return continueTo(retryChooseDescription);
84329 context.on('exit.intro', function() {
84333 reveal('.entity-editor-pane',
84334 t('intro.areas.describe_playground', { button: icon('#iD-icon-apply', 'pre-text') }),
84338 function continueTo(nextStep) {
84339 context.on('exit.intro', null);
84345 function retryChooseDescription() {
84346 if (!_areaID || !context.hasEntity(_areaID)) {
84349 var ids = context.selectedIDs();
84350 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _areaID) {
84351 return searchPresets();
84354 // reset pane, in case user happened to change it..
84355 d3_select('.inspector-wrap .panewrap').style('right', '0%');
84357 reveal('.entity-editor-pane',
84358 t('intro.areas.retry_add_field', { field: descriptionField.label() }), {
84359 buttonText: t('intro.ok'),
84360 buttonCallback: function() { continueTo(clickAddField); }
84363 context.on('exit.intro', function() {
84364 return continueTo(searchPresets);
84367 function continueTo(nextStep) {
84368 context.on('exit.intro', null);
84375 dispatch$1.call('done');
84376 reveal('#id-container',
84377 t('intro.areas.play', { next: t('intro.lines.title') }), {
84378 tooltipBox: '.intro-nav-wrap .chapter-line',
84379 buttonText: t('intro.ok'),
84380 buttonCallback: function() { reveal('#id-container'); }
84386 chapter.enter = function() {
84391 chapter.exit = function() {
84392 timeouts.forEach(window.clearTimeout);
84393 context.on('enter.intro exit.intro', null);
84394 context.map().on('move.intro drawn.intro', null);
84395 context.history().on('change.intro', null);
84396 d3_select('.inspector-wrap').on('wheel.intro', null);
84397 d3_select('.preset-search-input').on('keydown.intro keyup.intro', null);
84398 d3_select('.more-fields .combobox-input').on('click.intro', null);
84402 chapter.restart = function() {
84408 return utilRebind(chapter, dispatch$1, 'on');
84411 function uiIntroLine(context, reveal) {
84412 var dispatch$1 = dispatch('done');
84414 var _tulipRoadID = null;
84415 var flowerRoadID = 'w646';
84416 var tulipRoadStart = [-85.6297754121684, 41.95805253325314];
84417 var tulipRoadMidpoint = [-85.62975395449628, 41.95787501510204];
84418 var tulipRoadIntersection = [-85.62974496187628, 41.95742515554585];
84419 var roadCategory = context.presets().item('category-road_minor');
84420 var residentialPreset = context.presets().item('highway/residential');
84421 var woodRoadID = 'w525';
84422 var woodRoadEndID = 'n2862';
84423 var woodRoadAddNode = [-85.62390110349587, 41.95397111462291];
84424 var woodRoadDragEndpoint = [-85.623867390213, 41.95466987786487];
84425 var woodRoadDragMidpoint = [-85.62386254803509, 41.95430395953872];
84426 var washingtonStreetID = 'w522';
84427 var twelfthAvenueID = 'w1';
84428 var eleventhAvenueEndID = 'n3550';
84429 var twelfthAvenueEndID = 'n5';
84430 var _washingtonSegmentID = null;
84431 var eleventhAvenueEnd = context.entity(eleventhAvenueEndID).loc;
84432 var twelfthAvenueEnd = context.entity(twelfthAvenueEndID).loc;
84433 var deleteLinesLoc = [-85.6219395542764, 41.95228033922477];
84434 var twelfthAvenue = [-85.62219310052491, 41.952505413152956];
84438 title: 'intro.lines.title'
84442 function timeout(f, t) {
84443 timeouts.push(window.setTimeout(f, t));
84447 function eventCancel() {
84448 event.stopPropagation();
84449 event.preventDefault();
84453 function revealEditMenu(loc, text, options) {
84454 var rect = context.surfaceRect();
84455 var point = context.curtainProjection(loc);
84457 var width = 250 + (2 * pad);
84459 var startX = rect.left + point[0];
84460 var left = (textDirection === 'rtl') ? (startX - width + pad) : (startX - pad);
84463 top: point[1] + rect.top - 60,
84467 reveal(box, text, options);
84471 function addLine() {
84472 context.enter(modeBrowse(context));
84473 context.history().reset('initial');
84475 var msec = transitionTime(tulipRoadStart, context.map().center());
84476 if (msec) { reveal(null, null, { duration: 0 }); }
84477 context.map().centerZoomEase(tulipRoadStart, 18.5, msec);
84479 timeout(function() {
84480 var tooltip = reveal('button.add-line',
84481 t('intro.lines.add_line', { button: icon('#iD-icon-line', 'pre-text') }));
84483 tooltip.selectAll('.tooltip-inner')
84484 .insert('svg', 'span')
84485 .attr('class', 'tooltip-illustration')
84487 .attr('xlink:href', '#iD-graphic-lines');
84489 context.on('enter.intro', function(mode) {
84490 if (mode.id !== 'add-line') return;
84491 continueTo(startLine);
84495 function continueTo(nextStep) {
84496 context.on('enter.intro', null);
84502 function startLine() {
84503 if (context.mode().id !== 'add-line') return chapter.restart();
84505 _tulipRoadID = null;
84507 var padding = 70 * Math.pow(2, context.map().zoom() - 18);
84508 var box = pad$2(tulipRoadStart, padding, context);
84509 box.height = box.height + 100;
84510 reveal(box, t('intro.lines.start_line'));
84512 context.map().on('move.intro drawn.intro', function() {
84513 padding = 70 * Math.pow(2, context.map().zoom() - 18);
84514 box = pad$2(tulipRoadStart, padding, context);
84515 box.height = box.height + 100;
84516 reveal(box, t('intro.lines.start_line'), { duration: 0 });
84519 context.on('enter.intro', function(mode) {
84520 if (mode.id !== 'draw-line') return chapter.restart();
84521 continueTo(drawLine);
84524 function continueTo(nextStep) {
84525 context.map().on('move.intro drawn.intro', null);
84526 context.on('enter.intro', null);
84532 function drawLine() {
84533 if (context.mode().id !== 'draw-line') return chapter.restart();
84535 _tulipRoadID = context.mode().selectedIDs()[0];
84536 context.map().centerEase(tulipRoadMidpoint, 500);
84538 timeout(function() {
84539 var padding = 200 * Math.pow(2, context.map().zoom() - 18.5);
84540 var box = pad$2(tulipRoadMidpoint, padding, context);
84541 box.height = box.height * 2;
84543 t('intro.lines.intersect', { name: t('intro.graph.name.flower-street') })
84546 context.map().on('move.intro drawn.intro', function() {
84547 padding = 200 * Math.pow(2, context.map().zoom() - 18.5);
84548 box = pad$2(tulipRoadMidpoint, padding, context);
84549 box.height = box.height * 2;
84551 t('intro.lines.intersect', { name: t('intro.graph.name.flower-street') }),
84555 }, 550); // after easing..
84557 context.history().on('change.intro', function() {
84558 if (isLineConnected()) {
84559 continueTo(continueLine);
84563 context.on('enter.intro', function(mode) {
84564 if (mode.id === 'draw-line') {
84566 } else if (mode.id === 'select') {
84567 continueTo(retryIntersect);
84570 return chapter.restart();
84574 function continueTo(nextStep) {
84575 context.map().on('move.intro drawn.intro', null);
84576 context.history().on('change.intro', null);
84577 context.on('enter.intro', null);
84583 function isLineConnected() {
84584 var entity = _tulipRoadID && context.hasEntity(_tulipRoadID);
84585 if (!entity) return false;
84587 var drawNodes = context.graph().childNodes(entity);
84588 return drawNodes.some(function(node) {
84589 return context.graph().parentWays(node).some(function(parent) {
84590 return parent.id === flowerRoadID;
84596 function retryIntersect() {
84597 d3_select(window).on('mousedown.intro', eventCancel, true);
84599 var box = pad$2(tulipRoadIntersection, 80, context);
84601 t('intro.lines.retry_intersect', { name: t('intro.graph.name.flower-street') })
84604 timeout(chapter.restart, 3000);
84608 function continueLine() {
84609 if (context.mode().id !== 'draw-line') return chapter.restart();
84610 var entity = _tulipRoadID && context.hasEntity(_tulipRoadID);
84611 if (!entity) return chapter.restart();
84613 context.map().centerEase(tulipRoadIntersection, 500);
84615 reveal('#surface', t('intro.lines.continue_line'));
84617 context.on('enter.intro', function(mode) {
84618 if (mode.id === 'draw-line')
84620 else if (mode.id === 'select')
84621 return continueTo(chooseCategoryRoad);
84623 return chapter.restart();
84626 function continueTo(nextStep) {
84627 context.on('enter.intro', null);
84633 function chooseCategoryRoad() {
84634 if (context.mode().id !== 'select') return chapter.restart();
84636 context.on('exit.intro', function() {
84637 return chapter.restart();
84640 var button = d3_select('.preset-category-road_minor .preset-list-button');
84641 if (button.empty()) return chapter.restart();
84643 // disallow scrolling
84644 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
84646 timeout(function() {
84647 // reset pane, in case user somehow happened to change it..
84648 d3_select('.inspector-wrap .panewrap').style('right', '-100%');
84650 reveal(button.node(),
84651 t('intro.lines.choose_category_road', { category: roadCategory.name() })
84654 button.on('click.intro', function() {
84655 continueTo(choosePresetResidential);
84658 }, 400); // after editor pane visible
84660 function continueTo(nextStep) {
84661 d3_select('.inspector-wrap').on('wheel.intro', null);
84662 d3_select('.preset-list-button').on('click.intro', null);
84663 context.on('exit.intro', null);
84669 function choosePresetResidential() {
84670 if (context.mode().id !== 'select') return chapter.restart();
84672 context.on('exit.intro', function() {
84673 return chapter.restart();
84676 var subgrid = d3_select('.preset-category-road_minor .subgrid');
84677 if (subgrid.empty()) return chapter.restart();
84679 subgrid.selectAll(':not(.preset-highway-residential) .preset-list-button')
84680 .on('click.intro', function() {
84681 continueTo(retryPresetResidential);
84684 subgrid.selectAll('.preset-highway-residential .preset-list-button')
84685 .on('click.intro', function() {
84686 continueTo(nameRoad);
84689 timeout(function() {
84690 reveal(subgrid.node(),
84691 t('intro.lines.choose_preset_residential', { preset: residentialPreset.name() }),
84692 { tooltipBox: '.preset-highway-residential .preset-list-button', duration: 300 }
84696 function continueTo(nextStep) {
84697 d3_select('.preset-list-button').on('click.intro', null);
84698 context.on('exit.intro', null);
84704 // selected wrong road type
84705 function retryPresetResidential() {
84706 if (context.mode().id !== 'select') return chapter.restart();
84708 context.on('exit.intro', function() {
84709 return chapter.restart();
84712 // disallow scrolling
84713 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
84715 timeout(function() {
84716 var button = d3_select('.entity-editor-pane .preset-list-button');
84718 reveal(button.node(),
84719 t('intro.lines.retry_preset_residential', { preset: residentialPreset.name() })
84722 button.on('click.intro', function() {
84723 continueTo(chooseCategoryRoad);
84728 function continueTo(nextStep) {
84729 d3_select('.inspector-wrap').on('wheel.intro', null);
84730 d3_select('.preset-list-button').on('click.intro', null);
84731 context.on('exit.intro', null);
84737 function nameRoad() {
84738 context.on('exit.intro', function() {
84739 continueTo(didNameRoad);
84742 timeout(function() {
84743 reveal('.entity-editor-pane',
84744 t('intro.lines.name_road', { button: icon('#iD-icon-apply', 'pre-text') }),
84745 { tooltipClass: 'intro-lines-name_road' }
84749 function continueTo(nextStep) {
84750 context.on('exit.intro', null);
84756 function didNameRoad() {
84757 context.history().checkpoint('doneAddLine');
84759 timeout(function() {
84760 reveal('#surface', t('intro.lines.did_name_road'), {
84761 buttonText: t('intro.ok'),
84762 buttonCallback: function() { continueTo(updateLine); }
84766 function continueTo(nextStep) {
84772 function updateLine() {
84773 context.history().reset('doneAddLine');
84774 if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
84775 return chapter.restart();
84778 var msec = transitionTime(woodRoadDragMidpoint, context.map().center());
84779 if (msec) { reveal(null, null, { duration: 0 }); }
84780 context.map().centerZoomEase(woodRoadDragMidpoint, 19, msec);
84782 timeout(function() {
84783 var padding = 250 * Math.pow(2, context.map().zoom() - 19);
84784 var box = pad$2(woodRoadDragMidpoint, padding, context);
84785 var advance = function() { continueTo(addNode); };
84787 reveal(box, t('intro.lines.update_line'),
84788 { buttonText: t('intro.ok'), buttonCallback: advance }
84791 context.map().on('move.intro drawn.intro', function() {
84792 var padding = 250 * Math.pow(2, context.map().zoom() - 19);
84793 var box = pad$2(woodRoadDragMidpoint, padding, context);
84794 reveal(box, t('intro.lines.update_line'),
84795 { duration: 0, buttonText: t('intro.ok'), buttonCallback: advance }
84800 function continueTo(nextStep) {
84801 context.map().on('move.intro drawn.intro', null);
84807 function addNode() {
84808 context.history().reset('doneAddLine');
84809 if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
84810 return chapter.restart();
84813 var padding = 40 * Math.pow(2, context.map().zoom() - 19);
84814 var box = pad$2(woodRoadAddNode, padding, context);
84815 reveal(box, t('intro.lines.add_node'));
84817 context.map().on('move.intro drawn.intro', function() {
84818 var padding = 40 * Math.pow(2, context.map().zoom() - 19);
84819 var box = pad$2(woodRoadAddNode, padding, context);
84820 reveal(box, t('intro.lines.add_node'), { duration: 0 });
84823 context.history().on('change.intro', function(changed) {
84824 if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
84825 return continueTo(updateLine);
84827 if (changed.created().length === 1) {
84828 timeout(function() { continueTo(startDragEndpoint); }, 500);
84832 context.on('enter.intro', function(mode) {
84833 if (mode.id !== 'select') {
84834 continueTo(updateLine);
84838 function continueTo(nextStep) {
84839 context.map().on('move.intro drawn.intro', null);
84840 context.history().on('change.intro', null);
84841 context.on('enter.intro', null);
84847 function startDragEndpoint() {
84848 if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
84849 return continueTo(updateLine);
84851 var padding = 100 * Math.pow(2, context.map().zoom() - 19);
84852 var box = pad$2(woodRoadDragEndpoint, padding, context);
84853 reveal(box, t('intro.lines.start_drag_endpoint'));
84855 context.map().on('move.intro drawn.intro', function() {
84856 if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
84857 return continueTo(updateLine);
84859 var padding = 100 * Math.pow(2, context.map().zoom() - 19);
84860 var box = pad$2(woodRoadDragEndpoint, padding, context);
84861 reveal(box, t('intro.lines.start_drag_endpoint'), { duration: 0 });
84863 var entity = context.entity(woodRoadEndID);
84864 if (geoSphericalDistance(entity.loc, woodRoadDragEndpoint) <= 4) {
84865 continueTo(finishDragEndpoint);
84869 function continueTo(nextStep) {
84870 context.map().on('move.intro drawn.intro', null);
84876 function finishDragEndpoint() {
84877 if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
84878 return continueTo(updateLine);
84881 var padding = 100 * Math.pow(2, context.map().zoom() - 19);
84882 var box = pad$2(woodRoadDragEndpoint, padding, context);
84883 reveal(box, t('intro.lines.finish_drag_endpoint'));
84885 context.map().on('move.intro drawn.intro', function() {
84886 if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
84887 return continueTo(updateLine);
84889 var padding = 100 * Math.pow(2, context.map().zoom() - 19);
84890 var box = pad$2(woodRoadDragEndpoint, padding, context);
84891 reveal(box, t('intro.lines.finish_drag_endpoint'), { duration: 0 });
84893 var entity = context.entity(woodRoadEndID);
84894 if (geoSphericalDistance(entity.loc, woodRoadDragEndpoint) > 4) {
84895 continueTo(startDragEndpoint);
84899 context.on('enter.intro', function() {
84900 continueTo(startDragMidpoint);
84903 function continueTo(nextStep) {
84904 context.map().on('move.intro drawn.intro', null);
84905 context.on('enter.intro', null);
84911 function startDragMidpoint() {
84912 if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
84913 return continueTo(updateLine);
84915 if (context.selectedIDs().indexOf(woodRoadID) === -1) {
84916 context.enter(modeSelect(context, [woodRoadID]));
84919 var padding = 80 * Math.pow(2, context.map().zoom() - 19);
84920 var box = pad$2(woodRoadDragMidpoint, padding, context);
84921 reveal(box, t('intro.lines.start_drag_midpoint'));
84923 context.map().on('move.intro drawn.intro', function() {
84924 if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
84925 return continueTo(updateLine);
84927 var padding = 80 * Math.pow(2, context.map().zoom() - 19);
84928 var box = pad$2(woodRoadDragMidpoint, padding, context);
84929 reveal(box, t('intro.lines.start_drag_midpoint'), { duration: 0 });
84932 context.history().on('change.intro', function(changed) {
84933 if (changed.created().length === 1) {
84934 continueTo(continueDragMidpoint);
84938 context.on('enter.intro', function(mode) {
84939 if (mode.id !== 'select') {
84940 // keep Wood Road selected so midpoint triangles are drawn..
84941 context.enter(modeSelect(context, [woodRoadID]));
84945 function continueTo(nextStep) {
84946 context.map().on('move.intro drawn.intro', null);
84947 context.history().on('change.intro', null);
84948 context.on('enter.intro', null);
84954 function continueDragMidpoint() {
84955 if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
84956 return continueTo(updateLine);
84959 var padding = 100 * Math.pow(2, context.map().zoom() - 19);
84960 var box = pad$2(woodRoadDragEndpoint, padding, context);
84963 var advance = function() {
84964 context.history().checkpoint('doneUpdateLine');
84965 continueTo(deleteLines);
84968 reveal(box, t('intro.lines.continue_drag_midpoint'),
84969 { buttonText: t('intro.ok'), buttonCallback: advance }
84972 context.map().on('move.intro drawn.intro', function() {
84973 if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
84974 return continueTo(updateLine);
84976 var padding = 100 * Math.pow(2, context.map().zoom() - 19);
84977 var box = pad$2(woodRoadDragEndpoint, padding, context);
84979 reveal(box, t('intro.lines.continue_drag_midpoint'),
84980 { duration: 0, buttonText: t('intro.ok'), buttonCallback: advance }
84984 function continueTo(nextStep) {
84985 context.map().on('move.intro drawn.intro', null);
84991 function deleteLines() {
84992 context.history().reset('doneUpdateLine');
84993 context.enter(modeBrowse(context));
84995 if (!context.hasEntity(washingtonStreetID) ||
84996 !context.hasEntity(twelfthAvenueID) ||
84997 !context.hasEntity(eleventhAvenueEndID)) {
84998 return chapter.restart();
85001 var msec = transitionTime(deleteLinesLoc, context.map().center());
85002 if (msec) { reveal(null, null, { duration: 0 }); }
85003 context.map().centerZoomEase(deleteLinesLoc, 18, msec);
85005 timeout(function() {
85006 var padding = 200 * Math.pow(2, context.map().zoom() - 18);
85007 var box = pad$2(deleteLinesLoc, padding, context);
85010 var advance = function() { continueTo(rightClickIntersection); };
85012 reveal(box, t('intro.lines.delete_lines', { street: t('intro.graph.name.12th-avenue') }),
85013 { buttonText: t('intro.ok'), buttonCallback: advance }
85016 context.map().on('move.intro drawn.intro', function() {
85017 var padding = 200 * Math.pow(2, context.map().zoom() - 18);
85018 var box = pad$2(deleteLinesLoc, padding, context);
85021 reveal(box, t('intro.lines.delete_lines', { street: t('intro.graph.name.12th-avenue') }),
85022 { duration: 0, buttonText: t('intro.ok'), buttonCallback: advance }
85026 context.history().on('change.intro', function() {
85027 timeout(function() {
85028 continueTo(deleteLines);
85029 }, 500); // after any transition (e.g. if user deleted intersection)
85034 function continueTo(nextStep) {
85035 context.map().on('move.intro drawn.intro', null);
85036 context.history().on('change.intro', null);
85042 function rightClickIntersection() {
85043 context.history().reset('doneUpdateLine');
85044 context.enter(modeBrowse(context));
85046 context.map().centerZoomEase(eleventhAvenueEnd, 18, 500);
85048 timeout(function() {
85049 var padding = 60 * Math.pow(2, context.map().zoom() - 18);
85050 var box = pad$2(eleventhAvenueEnd, padding, context);
85051 reveal(box, t('intro.lines.rightclick_intersection',
85052 { street1: t('intro.graph.name.11th-avenue'), street2: t('intro.graph.name.washington-street') })
85055 context.map().on('move.intro drawn.intro', function() {
85056 var padding = 60 * Math.pow(2, context.map().zoom() - 18);
85057 var box = pad$2(eleventhAvenueEnd, padding, context);
85058 reveal(box, t('intro.lines.rightclick_intersection',
85059 { street1: t('intro.graph.name.11th-avenue'), street2: t('intro.graph.name.washington-street') }),
85064 context.on('enter.intro', function(mode) {
85065 if (mode.id !== 'select') return;
85066 var ids = context.selectedIDs();
85067 if (ids.length !== 1 || ids[0] !== eleventhAvenueEndID) return;
85069 timeout(function() {
85070 var node = selectMenuItem('split').node();
85072 continueTo(splitIntersection);
85073 }, 300); // after menu visible
85076 context.history().on('change.intro', function() {
85077 timeout(function() {
85078 continueTo(deleteLines);
85079 }, 300); // after any transition (e.g. if user deleted intersection)
85084 function continueTo(nextStep) {
85085 context.map().on('move.intro drawn.intro', null);
85086 context.on('enter.intro', null);
85087 context.history().on('change.intro', null);
85093 function splitIntersection() {
85094 if (!context.hasEntity(washingtonStreetID) ||
85095 !context.hasEntity(twelfthAvenueID) ||
85096 !context.hasEntity(eleventhAvenueEndID)) {
85097 return continueTo(deleteLines);
85100 var node = selectMenuItem('split').node();
85101 if (!node) { return continueTo(rightClickIntersection); }
85103 var wasChanged = false;
85104 var menuCoords = context.map().mouseCoordinates();
85105 _washingtonSegmentID = null;
85107 revealEditMenu(menuCoords, t('intro.lines.split_intersection',
85108 { button: icon('#iD-operation-split', 'pre-text'), street: t('intro.graph.name.washington-street') })
85111 context.map().on('move.intro drawn.intro', function() {
85112 var node = selectMenuItem('split').node();
85113 if (!wasChanged && !node) { return continueTo(rightClickIntersection); }
85115 revealEditMenu(menuCoords, t('intro.lines.split_intersection',
85116 { button: icon('#iD-operation-split', 'pre-text'), street: t('intro.graph.name.washington-street') }),
85121 context.history().on('change.intro', function(changed) {
85123 timeout(function() {
85124 if (context.history().undoAnnotation() === t('operations.split.annotation.line')) {
85125 _washingtonSegmentID = changed.created()[0].id;
85126 continueTo(didSplit);
85128 _washingtonSegmentID = null;
85129 continueTo(retrySplit);
85131 }, 300); // after any transition (e.g. if user deleted intersection)
85134 function continueTo(nextStep) {
85135 context.map().on('move.intro drawn.intro', null);
85136 context.history().on('change.intro', null);
85142 function retrySplit() {
85143 context.enter(modeBrowse(context));
85144 context.map().centerZoomEase(eleventhAvenueEnd, 18, 500);
85145 var advance = function() { continueTo(rightClickIntersection); };
85147 var padding = 60 * Math.pow(2, context.map().zoom() - 18);
85148 var box = pad$2(eleventhAvenueEnd, padding, context);
85149 reveal(box, t('intro.lines.retry_split'),
85150 { buttonText: t('intro.ok'), buttonCallback: advance }
85153 context.map().on('move.intro drawn.intro', function() {
85154 var padding = 60 * Math.pow(2, context.map().zoom() - 18);
85155 var box = pad$2(eleventhAvenueEnd, padding, context);
85156 reveal(box, t('intro.lines.retry_split'),
85157 { duration: 0, buttonText: t('intro.ok'), buttonCallback: advance }
85161 function continueTo(nextStep) {
85162 context.map().on('move.intro drawn.intro', null);
85168 function didSplit() {
85169 if (!_washingtonSegmentID ||
85170 !context.hasEntity(_washingtonSegmentID) ||
85171 !context.hasEntity(washingtonStreetID) ||
85172 !context.hasEntity(twelfthAvenueID) ||
85173 !context.hasEntity(eleventhAvenueEndID)) {
85174 return continueTo(rightClickIntersection);
85177 var ids = context.selectedIDs();
85178 var string = 'intro.lines.did_split_' + (ids.length > 1 ? 'multi' : 'single');
85179 var street = t('intro.graph.name.washington-street');
85181 var padding = 200 * Math.pow(2, context.map().zoom() - 18);
85182 var box = pad$2(twelfthAvenue, padding, context);
85183 box.width = box.width / 2;
85184 reveal(box, t(string, { street1: street, street2: street }),
85188 timeout(function() {
85189 context.map().centerZoomEase(twelfthAvenue, 18, 500);
85191 context.map().on('move.intro drawn.intro', function() {
85192 var padding = 200 * Math.pow(2, context.map().zoom() - 18);
85193 var box = pad$2(twelfthAvenue, padding, context);
85194 box.width = box.width / 2;
85195 reveal(box, t(string, { street1: street, street2: street }),
85199 }, 600); // after initial reveal and curtain cut
85201 context.on('enter.intro', function() {
85202 var ids = context.selectedIDs();
85203 if (ids.length === 1 && ids[0] === _washingtonSegmentID) {
85204 continueTo(multiSelect);
85208 context.history().on('change.intro', function() {
85209 if (!_washingtonSegmentID ||
85210 !context.hasEntity(_washingtonSegmentID) ||
85211 !context.hasEntity(washingtonStreetID) ||
85212 !context.hasEntity(twelfthAvenueID) ||
85213 !context.hasEntity(eleventhAvenueEndID)) {
85214 return continueTo(rightClickIntersection);
85218 function continueTo(nextStep) {
85219 context.map().on('move.intro drawn.intro', null);
85220 context.on('enter.intro', null);
85221 context.history().on('change.intro', null);
85227 function multiSelect() {
85228 if (!_washingtonSegmentID ||
85229 !context.hasEntity(_washingtonSegmentID) ||
85230 !context.hasEntity(washingtonStreetID) ||
85231 !context.hasEntity(twelfthAvenueID) ||
85232 !context.hasEntity(eleventhAvenueEndID)) {
85233 return continueTo(rightClickIntersection);
85236 var ids = context.selectedIDs();
85237 var hasWashington = ids.indexOf(_washingtonSegmentID) !== -1;
85238 var hasTwelfth = ids.indexOf(twelfthAvenueID) !== -1;
85240 if (hasWashington && hasTwelfth) {
85241 return continueTo(multiRightClick);
85242 } else if (!hasWashington && !hasTwelfth) {
85243 return continueTo(didSplit);
85246 context.map().centerZoomEase(twelfthAvenue, 18, 500);
85248 timeout(function() {
85249 var selected, other, padding, box;
85250 if (hasWashington) {
85251 selected = t('intro.graph.name.washington-street');
85252 other = t('intro.graph.name.12th-avenue');
85253 padding = 60 * Math.pow(2, context.map().zoom() - 18);
85254 box = pad$2(twelfthAvenueEnd, padding, context);
85257 selected = t('intro.graph.name.12th-avenue');
85258 other = t('intro.graph.name.washington-street');
85259 padding = 200 * Math.pow(2, context.map().zoom() - 18);
85260 box = pad$2(twelfthAvenue, padding, context);
85265 t('intro.lines.multi_select', { selected: selected, other1: other, other2: other })
85268 context.map().on('move.intro drawn.intro', function() {
85269 if (hasWashington) {
85270 selected = t('intro.graph.name.washington-street');
85271 other = t('intro.graph.name.12th-avenue');
85272 padding = 60 * Math.pow(2, context.map().zoom() - 18);
85273 box = pad$2(twelfthAvenueEnd, padding, context);
85276 selected = t('intro.graph.name.12th-avenue');
85277 other = t('intro.graph.name.washington-street');
85278 padding = 200 * Math.pow(2, context.map().zoom() - 18);
85279 box = pad$2(twelfthAvenue, padding, context);
85284 t('intro.lines.multi_select', { selected: selected, other1: other, other2: other }),
85289 context.on('enter.intro', function() {
85290 continueTo(multiSelect);
85293 context.history().on('change.intro', function() {
85294 if (!_washingtonSegmentID ||
85295 !context.hasEntity(_washingtonSegmentID) ||
85296 !context.hasEntity(washingtonStreetID) ||
85297 !context.hasEntity(twelfthAvenueID) ||
85298 !context.hasEntity(eleventhAvenueEndID)) {
85299 return continueTo(rightClickIntersection);
85304 function continueTo(nextStep) {
85305 context.map().on('move.intro drawn.intro', null);
85306 context.on('enter.intro', null);
85307 context.history().on('change.intro', null);
85313 function multiRightClick() {
85314 if (!_washingtonSegmentID ||
85315 !context.hasEntity(_washingtonSegmentID) ||
85316 !context.hasEntity(washingtonStreetID) ||
85317 !context.hasEntity(twelfthAvenueID) ||
85318 !context.hasEntity(eleventhAvenueEndID)) {
85319 return continueTo(rightClickIntersection);
85322 var padding = 200 * Math.pow(2, context.map().zoom() - 18);
85323 var box = pad$2(twelfthAvenue, padding, context);
85324 reveal(box, t('intro.lines.multi_rightclick'));
85326 context.map().on('move.intro drawn.intro', function() {
85327 var padding = 200 * Math.pow(2, context.map().zoom() - 18);
85328 var box = pad$2(twelfthAvenue, padding, context);
85329 reveal(box, t('intro.lines.multi_rightclick'), { duration: 0 });
85332 d3_select(window).on('click.intro contextmenu.intro', function() {
85333 timeout(function() {
85334 var ids = context.selectedIDs();
85335 if (ids.length === 2 &&
85336 ids.indexOf(twelfthAvenueID) !== -1 &&
85337 ids.indexOf(_washingtonSegmentID) !== -1) {
85338 var node = selectMenuItem('delete').node();
85340 continueTo(multiDelete);
85341 } else if (ids.length === 1 &&
85342 ids.indexOf(_washingtonSegmentID) !== -1) {
85343 return continueTo(multiSelect);
85345 return continueTo(didSplit);
85347 }, 300); // after edit menu visible
85350 context.history().on('change.intro', function() {
85351 if (!_washingtonSegmentID ||
85352 !context.hasEntity(_washingtonSegmentID) ||
85353 !context.hasEntity(washingtonStreetID) ||
85354 !context.hasEntity(twelfthAvenueID) ||
85355 !context.hasEntity(eleventhAvenueEndID)) {
85356 return continueTo(rightClickIntersection);
85360 function continueTo(nextStep) {
85361 context.map().on('move.intro drawn.intro', null);
85362 d3_select(window).on('click.intro contextmenu.intro', null, true);
85363 context.history().on('change.intro', null);
85369 function multiDelete() {
85370 if (!_washingtonSegmentID ||
85371 !context.hasEntity(_washingtonSegmentID) ||
85372 !context.hasEntity(washingtonStreetID) ||
85373 !context.hasEntity(twelfthAvenueID) ||
85374 !context.hasEntity(eleventhAvenueEndID)) {
85375 return continueTo(rightClickIntersection);
85378 var node = selectMenuItem('delete').node();
85379 if (!node) return continueTo(multiRightClick);
85381 var menuCoords = context.map().mouseCoordinates();
85382 revealEditMenu(menuCoords,
85383 t('intro.lines.multi_delete', { button: icon('#iD-operation-delete', 'pre-text') })
85386 context.map().on('move.intro drawn.intro', function() {
85387 revealEditMenu(menuCoords,
85388 t('intro.lines.multi_delete', { button: icon('#iD-operation-delete', 'pre-text') }),
85393 context.on('exit.intro', function() {
85394 if (context.hasEntity(_washingtonSegmentID) || context.hasEntity(twelfthAvenueID)) {
85395 return continueTo(multiSelect); // left select mode but roads still exist
85399 context.history().on('change.intro', function() {
85400 if (context.hasEntity(_washingtonSegmentID) || context.hasEntity(twelfthAvenueID)) {
85401 continueTo(retryDelete); // changed something but roads still exist
85407 function continueTo(nextStep) {
85408 context.map().on('move.intro drawn.intro', null);
85409 context.on('exit.intro', null);
85410 context.history().on('change.intro', null);
85416 function retryDelete() {
85417 context.enter(modeBrowse(context));
85419 var padding = 200 * Math.pow(2, context.map().zoom() - 18);
85420 var box = pad$2(twelfthAvenue, padding, context);
85421 reveal(box, t('intro.lines.retry_delete'), {
85422 buttonText: t('intro.ok'),
85423 buttonCallback: function() { continueTo(multiSelect); }
85426 function continueTo(nextStep) {
85433 dispatch$1.call('done');
85434 reveal('#id-container',
85435 t('intro.lines.play', { next: t('intro.buildings.title') }), {
85436 tooltipBox: '.intro-nav-wrap .chapter-building',
85437 buttonText: t('intro.ok'),
85438 buttonCallback: function() { reveal('#id-container'); }
85444 chapter.enter = function() {
85449 chapter.exit = function() {
85450 timeouts.forEach(window.clearTimeout);
85451 d3_select(window).on('mousedown.intro', null, true);
85452 context.on('enter.intro exit.intro', null);
85453 context.map().on('move.intro drawn.intro', null);
85454 context.history().on('change.intro', null);
85455 d3_select('.inspector-wrap').on('wheel.intro', null);
85456 d3_select('.preset-list-button').on('click.intro', null);
85460 chapter.restart = function() {
85466 return utilRebind(chapter, dispatch$1, 'on');
85469 function uiIntroBuilding(context, reveal) {
85470 var dispatch$1 = dispatch('done');
85471 var house = [-85.62815, 41.95638];
85472 var tank = [-85.62732, 41.95347];
85473 var buildingCatetory = context.presets().item('category-building');
85474 var housePreset = context.presets().item('building/house');
85475 var tankPreset = context.presets().item('man_made/storage_tank');
85477 var _houseID = null;
85478 var _tankID = null;
85482 title: 'intro.buildings.title'
85486 function timeout(f, t) {
85487 timeouts.push(window.setTimeout(f, t));
85491 function eventCancel() {
85492 event.stopPropagation();
85493 event.preventDefault();
85497 function revealHouse(center, text, options) {
85498 var padding = 160 * Math.pow(2, context.map().zoom() - 20);
85499 var box = pad$2(center, padding, context);
85500 reveal(box, text, options);
85504 function revealTank(center, text, options) {
85505 var padding = 190 * Math.pow(2, context.map().zoom() - 19.5);
85506 var box = pad$2(center, padding, context);
85507 reveal(box, text, options);
85511 function revealEditMenu(loc, text, options) {
85512 var rect = context.surfaceRect();
85513 var point = context.curtainProjection(loc);
85515 var width = 250 + (2 * pad);
85517 var startX = rect.left + point[0];
85518 var left = (textDirection === 'rtl') ? (startX - width + pad) : (startX - pad);
85521 top: point[1] + rect.top - 60,
85525 reveal(box, text, options);
85529 function addHouse() {
85530 context.enter(modeBrowse(context));
85531 context.history().reset('initial');
85534 var msec = transitionTime(house, context.map().center());
85535 if (msec) { reveal(null, null, { duration: 0 }); }
85536 context.map().centerZoomEase(house, 19, msec);
85538 timeout(function() {
85539 var tooltip = reveal('button.add-area',
85540 t('intro.buildings.add_building', { button: icon('#iD-icon-area', 'pre-text') }));
85542 tooltip.selectAll('.tooltip-inner')
85543 .insert('svg', 'span')
85544 .attr('class', 'tooltip-illustration')
85546 .attr('xlink:href', '#iD-graphic-buildings');
85548 context.on('enter.intro', function(mode) {
85549 if (mode.id !== 'add-area') return;
85550 continueTo(startHouse);
85554 function continueTo(nextStep) {
85555 context.on('enter.intro', null);
85561 function startHouse() {
85562 if (context.mode().id !== 'add-area') {
85563 return continueTo(addHouse);
85567 context.map().zoomEase(20, 500);
85569 timeout(function() {
85570 revealHouse(house, t('intro.buildings.start_building'));
85572 context.map().on('move.intro drawn.intro', function() {
85573 revealHouse(house, t('intro.buildings.start_building'), { duration: 0 });
85576 context.on('enter.intro', function(mode) {
85577 if (mode.id !== 'draw-area') return chapter.restart();
85578 continueTo(continueHouse);
85581 }, 550); // after easing
85583 function continueTo(nextStep) {
85584 context.map().on('move.intro drawn.intro', null);
85585 context.on('enter.intro', null);
85591 function continueHouse() {
85592 if (context.mode().id !== 'draw-area') {
85593 return continueTo(addHouse);
85598 revealHouse(house, t('intro.buildings.continue_building'));
85600 context.map().on('move.intro drawn.intro', function() {
85601 revealHouse(house, t('intro.buildings.continue_building'), { duration: 0 });
85604 context.on('enter.intro', function(mode) {
85605 if (mode.id === 'draw-area') {
85607 } else if (mode.id === 'select') {
85608 var graph = context.graph();
85609 var way = context.entity(context.selectedIDs()[0]);
85610 var nodes = graph.childNodes(way);
85611 var points = utilArrayUniq(nodes)
85612 .map(function(n) { return context.projection(n.loc); });
85614 if (isMostlySquare(points)) {
85616 return continueTo(chooseCategoryBuilding);
85618 return continueTo(retryHouse);
85622 return chapter.restart();
85626 function continueTo(nextStep) {
85627 context.map().on('move.intro drawn.intro', null);
85628 context.on('enter.intro', null);
85634 function retryHouse() {
85635 var onClick = function() { continueTo(addHouse); };
85637 revealHouse(house, t('intro.buildings.retry_building'),
85638 { buttonText: t('intro.ok'), buttonCallback: onClick }
85641 context.map().on('move.intro drawn.intro', function() {
85642 revealHouse(house, t('intro.buildings.retry_building'),
85643 { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
85647 function continueTo(nextStep) {
85648 context.map().on('move.intro drawn.intro', null);
85654 function chooseCategoryBuilding() {
85655 if (!_houseID || !context.hasEntity(_houseID)) {
85658 var ids = context.selectedIDs();
85659 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _houseID) {
85660 context.enter(modeSelect(context, [_houseID]));
85663 // disallow scrolling
85664 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
85666 timeout(function() {
85667 // reset pane, in case user somehow happened to change it..
85668 d3_select('.inspector-wrap .panewrap').style('right', '-100%');
85670 var button = d3_select('.preset-category-building .preset-list-button');
85672 reveal(button.node(),
85673 t('intro.buildings.choose_category_building', { category: buildingCatetory.name() })
85676 button.on('click.intro', function() {
85677 button.on('click.intro', null);
85678 continueTo(choosePresetHouse);
85681 }, 400); // after preset list pane visible..
85684 context.on('enter.intro', function(mode) {
85685 if (!_houseID || !context.hasEntity(_houseID)) {
85686 return continueTo(addHouse);
85688 var ids = context.selectedIDs();
85689 if (mode.id !== 'select' || !ids.length || ids[0] !== _houseID) {
85690 return continueTo(chooseCategoryBuilding);
85694 function continueTo(nextStep) {
85695 d3_select('.inspector-wrap').on('wheel.intro', null);
85696 d3_select('.preset-list-button').on('click.intro', null);
85697 context.on('enter.intro', null);
85703 function choosePresetHouse() {
85704 if (!_houseID || !context.hasEntity(_houseID)) {
85707 var ids = context.selectedIDs();
85708 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _houseID) {
85709 context.enter(modeSelect(context, [_houseID]));
85712 // disallow scrolling
85713 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
85715 timeout(function() {
85716 // reset pane, in case user somehow happened to change it..
85717 d3_select('.inspector-wrap .panewrap').style('right', '-100%');
85719 var button = d3_select('.preset-building-house .preset-list-button');
85721 reveal(button.node(),
85722 t('intro.buildings.choose_preset_house', { preset: housePreset.name() }),
85726 button.on('click.intro', function() {
85727 button.on('click.intro', null);
85728 continueTo(closeEditorHouse);
85731 }, 400); // after preset list pane visible..
85733 context.on('enter.intro', function(mode) {
85734 if (!_houseID || !context.hasEntity(_houseID)) {
85735 return continueTo(addHouse);
85737 var ids = context.selectedIDs();
85738 if (mode.id !== 'select' || !ids.length || ids[0] !== _houseID) {
85739 return continueTo(chooseCategoryBuilding);
85743 function continueTo(nextStep) {
85744 d3_select('.inspector-wrap').on('wheel.intro', null);
85745 d3_select('.preset-list-button').on('click.intro', null);
85746 context.on('enter.intro', null);
85752 function closeEditorHouse() {
85753 if (!_houseID || !context.hasEntity(_houseID)) {
85756 var ids = context.selectedIDs();
85757 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _houseID) {
85758 context.enter(modeSelect(context, [_houseID]));
85761 context.history().checkpoint('hasHouse');
85763 context.on('exit.intro', function() {
85764 continueTo(rightClickHouse);
85767 timeout(function() {
85768 reveal('.entity-editor-pane',
85769 t('intro.buildings.close', { button: icon('#iD-icon-apply', 'pre-text') })
85773 function continueTo(nextStep) {
85774 context.on('exit.intro', null);
85780 function rightClickHouse() {
85781 if (!_houseID) return chapter.restart();
85783 context.enter(modeBrowse(context));
85784 context.history().reset('hasHouse');
85785 var zoom = context.map().zoom();
85789 context.map().centerZoomEase(house, zoom, 500);
85791 context.on('enter.intro', function(mode) {
85792 if (mode.id !== 'select') return;
85793 var ids = context.selectedIDs();
85794 if (ids.length !== 1 || ids[0] !== _houseID) return;
85796 timeout(function() {
85797 var node = selectMenuItem('orthogonalize').node();
85799 continueTo(clickSquare);
85800 }, 300); // after menu visible
85803 context.map().on('move.intro drawn.intro', function() {
85804 revealHouse(house, t('intro.buildings.rightclick_building'), { duration: 0 });
85807 context.history().on('change.intro', function() {
85808 continueTo(rightClickHouse);
85811 function continueTo(nextStep) {
85812 context.on('enter.intro', null);
85813 context.map().on('move.intro drawn.intro', null);
85814 context.history().on('change.intro', null);
85820 function clickSquare() {
85821 if (!_houseID) return chapter.restart();
85822 var entity = context.hasEntity(_houseID);
85823 if (!entity) return continueTo(rightClickHouse);
85825 var node = selectMenuItem('orthogonalize').node();
85826 if (!node) { return continueTo(rightClickHouse); }
85828 var wasChanged = false;
85829 var menuCoords = context.map().mouseCoordinates();
85831 revealEditMenu(menuCoords,
85832 t('intro.buildings.square_building', { button: icon('#iD-operation-orthogonalize', 'pre-text') })
85835 context.on('enter.intro', function(mode) {
85836 if (mode.id === 'browse') {
85837 continueTo(rightClickHouse);
85838 } else if (mode.id === 'move' || mode.id === 'rotate') {
85839 continueTo(retryClickSquare);
85843 context.map().on('move.intro drawn.intro', function() {
85844 var node = selectMenuItem('orthogonalize').node();
85845 if (!wasChanged && !node) { return continueTo(rightClickHouse); }
85847 revealEditMenu(menuCoords,
85848 t('intro.buildings.square_building', { button: icon('#iD-operation-orthogonalize', 'pre-text') }),
85853 context.history().on('change.intro', function() {
85855 context.history().on('change.intro', null);
85857 // Something changed. Wait for transition to complete and check undo annotation.
85858 timeout(function() {
85859 if (context.history().undoAnnotation() === t('operations.orthogonalize.annotation.area')) {
85860 continueTo(doneSquare);
85862 continueTo(retryClickSquare);
85864 }, 500); // after transitioned actions
85867 function continueTo(nextStep) {
85868 context.on('enter.intro', null);
85869 context.map().on('move.intro drawn.intro', null);
85870 context.history().on('change.intro', null);
85876 function retryClickSquare() {
85877 context.enter(modeBrowse(context));
85879 revealHouse(house, t('intro.buildings.retry_square'), {
85880 buttonText: t('intro.ok'),
85881 buttonCallback: function() { continueTo(rightClickHouse); }
85884 function continueTo(nextStep) {
85890 function doneSquare() {
85891 context.history().checkpoint('doneSquare');
85893 revealHouse(house, t('intro.buildings.done_square'), {
85894 buttonText: t('intro.ok'),
85895 buttonCallback: function() { continueTo(addTank); }
85898 function continueTo(nextStep) {
85904 function addTank() {
85905 context.enter(modeBrowse(context));
85906 context.history().reset('doneSquare');
85909 var msec = transitionTime(tank, context.map().center());
85910 if (msec) { reveal(null, null, { duration: 0 }); }
85911 context.map().centerZoomEase(tank, 19.5, msec);
85913 timeout(function() {
85914 reveal('button.add-area',
85915 t('intro.buildings.add_tank', { button: icon('#iD-icon-area', 'pre-text') })
85918 context.on('enter.intro', function(mode) {
85919 if (mode.id !== 'add-area') return;
85920 continueTo(startTank);
85924 function continueTo(nextStep) {
85925 context.on('enter.intro', null);
85931 function startTank() {
85932 if (context.mode().id !== 'add-area') {
85933 return continueTo(addTank);
85938 timeout(function() {
85939 revealTank(tank, t('intro.buildings.start_tank'));
85941 context.map().on('move.intro drawn.intro', function() {
85942 revealTank(tank, t('intro.buildings.start_tank'), { duration: 0 });
85945 context.on('enter.intro', function(mode) {
85946 if (mode.id !== 'draw-area') return chapter.restart();
85947 continueTo(continueTank);
85950 }, 550); // after easing
85952 function continueTo(nextStep) {
85953 context.map().on('move.intro drawn.intro', null);
85954 context.on('enter.intro', null);
85960 function continueTank() {
85961 if (context.mode().id !== 'draw-area') {
85962 return continueTo(addTank);
85967 revealTank(tank, t('intro.buildings.continue_tank'));
85969 context.map().on('move.intro drawn.intro', function() {
85970 revealTank(tank, t('intro.buildings.continue_tank'), { duration: 0 });
85973 context.on('enter.intro', function(mode) {
85974 if (mode.id === 'draw-area') {
85976 } else if (mode.id === 'select') {
85977 _tankID = context.selectedIDs()[0];
85978 return continueTo(searchPresetTank);
85980 return continueTo(addTank);
85984 function continueTo(nextStep) {
85985 context.map().on('move.intro drawn.intro', null);
85986 context.on('enter.intro', null);
85992 function searchPresetTank() {
85993 if (!_tankID || !context.hasEntity(_tankID)) {
85996 var ids = context.selectedIDs();
85997 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _tankID) {
85998 context.enter(modeSelect(context, [_tankID]));
86001 // disallow scrolling
86002 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
86004 timeout(function() {
86005 // reset pane, in case user somehow happened to change it..
86006 d3_select('.inspector-wrap .panewrap').style('right', '-100%');
86008 d3_select('.preset-search-input')
86009 .on('keydown.intro', null)
86010 .on('keyup.intro', checkPresetSearch);
86012 reveal('.preset-search-input',
86013 t('intro.buildings.search_tank', { preset: tankPreset.name() })
86015 }, 400); // after preset list pane visible..
86017 context.on('enter.intro', function(mode) {
86018 if (!_tankID || !context.hasEntity(_tankID)) {
86019 return continueTo(addTank);
86022 var ids = context.selectedIDs();
86023 if (mode.id !== 'select' || !ids.length || ids[0] !== _tankID) {
86024 // keep the user's area selected..
86025 context.enter(modeSelect(context, [_tankID]));
86027 // reset pane, in case user somehow happened to change it..
86028 d3_select('.inspector-wrap .panewrap').style('right', '-100%');
86029 // disallow scrolling
86030 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
86032 d3_select('.preset-search-input')
86033 .on('keydown.intro', null)
86034 .on('keyup.intro', checkPresetSearch);
86036 reveal('.preset-search-input',
86037 t('intro.buildings.search_tank', { preset: tankPreset.name() })
86040 context.history().on('change.intro', null);
86044 function checkPresetSearch() {
86045 var first = d3_select('.preset-list-item:first-child');
86047 if (first.classed('preset-man_made-storage_tank')) {
86048 reveal(first.select('.preset-list-button').node(),
86049 t('intro.buildings.choose_tank', { preset: tankPreset.name() }),
86053 d3_select('.preset-search-input')
86054 .on('keydown.intro', eventCancel, true)
86055 .on('keyup.intro', null);
86057 context.history().on('change.intro', function() {
86058 continueTo(closeEditorTank);
86063 function continueTo(nextStep) {
86064 d3_select('.inspector-wrap').on('wheel.intro', null);
86065 context.on('enter.intro', null);
86066 context.history().on('change.intro', null);
86067 d3_select('.preset-search-input').on('keydown.intro keyup.intro', null);
86073 function closeEditorTank() {
86074 if (!_tankID || !context.hasEntity(_tankID)) {
86077 var ids = context.selectedIDs();
86078 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _tankID) {
86079 context.enter(modeSelect(context, [_tankID]));
86082 context.history().checkpoint('hasTank');
86084 context.on('exit.intro', function() {
86085 continueTo(rightClickTank);
86088 timeout(function() {
86089 reveal('.entity-editor-pane',
86090 t('intro.buildings.close', { button: icon('#iD-icon-apply', 'pre-text') })
86094 function continueTo(nextStep) {
86095 context.on('exit.intro', null);
86101 function rightClickTank() {
86102 if (!_tankID) return continueTo(addTank);
86104 context.enter(modeBrowse(context));
86105 context.history().reset('hasTank');
86106 context.map().centerEase(tank, 500);
86108 timeout(function() {
86109 context.on('enter.intro', function(mode) {
86110 if (mode.id !== 'select') return;
86111 var ids = context.selectedIDs();
86112 if (ids.length !== 1 || ids[0] !== _tankID) return;
86114 timeout(function() {
86115 var node = selectMenuItem('circularize').node();
86117 continueTo(clickCircle);
86118 }, 300); // after menu visible
86121 revealTank(tank, t('intro.buildings.rightclick_tank'));
86123 context.map().on('move.intro drawn.intro', function() {
86124 revealTank(tank, t('intro.buildings.rightclick_tank'), { duration: 0 });
86127 context.history().on('change.intro', function() {
86128 continueTo(rightClickTank);
86133 function continueTo(nextStep) {
86134 context.on('enter.intro', null);
86135 context.map().on('move.intro drawn.intro', null);
86136 context.history().on('change.intro', null);
86142 function clickCircle() {
86143 if (!_tankID) return chapter.restart();
86144 var entity = context.hasEntity(_tankID);
86145 if (!entity) return continueTo(rightClickTank);
86147 var node = selectMenuItem('circularize').node();
86148 if (!node) { return continueTo(rightClickTank); }
86150 var wasChanged = false;
86151 var menuCoords = context.map().mouseCoordinates();
86153 revealEditMenu(menuCoords,
86154 t('intro.buildings.circle_tank', { button: icon('#iD-operation-circularize', 'pre-text') })
86157 context.on('enter.intro', function(mode) {
86158 if (mode.id === 'browse') {
86159 continueTo(rightClickTank);
86160 } else if (mode.id === 'move' || mode.id === 'rotate') {
86161 continueTo(retryClickCircle);
86165 context.map().on('move.intro drawn.intro', function() {
86166 var node = selectMenuItem('circularize').node();
86167 if (!wasChanged && !node) { return continueTo(rightClickTank); }
86169 revealEditMenu(menuCoords,
86170 t('intro.buildings.circle_tank', { button: icon('#iD-operation-circularize', 'pre-text') }),
86175 context.history().on('change.intro', function() {
86177 context.history().on('change.intro', null);
86179 // Something changed. Wait for transition to complete and check undo annotation.
86180 timeout(function() {
86181 if (context.history().undoAnnotation() === t('operations.circularize.annotation.area')) {
86184 continueTo(retryClickCircle);
86186 }, 500); // after transitioned actions
86189 function continueTo(nextStep) {
86190 context.on('enter.intro', null);
86191 context.map().on('move.intro drawn.intro', null);
86192 context.history().on('change.intro', null);
86198 function retryClickCircle() {
86199 context.enter(modeBrowse(context));
86201 revealTank(tank, t('intro.buildings.retry_circle'), {
86202 buttonText: t('intro.ok'),
86203 buttonCallback: function() { continueTo(rightClickTank); }
86206 function continueTo(nextStep) {
86213 dispatch$1.call('done');
86214 reveal('#id-container',
86215 t('intro.buildings.play', { next: t('intro.startediting.title') }), {
86216 tooltipBox: '.intro-nav-wrap .chapter-startEditing',
86217 buttonText: t('intro.ok'),
86218 buttonCallback: function() { reveal('#id-container'); }
86224 chapter.enter = function() {
86229 chapter.exit = function() {
86230 timeouts.forEach(window.clearTimeout);
86231 context.on('enter.intro exit.intro', null);
86232 context.map().on('move.intro drawn.intro', null);
86233 context.history().on('change.intro', null);
86234 d3_select('.inspector-wrap').on('wheel.intro', null);
86235 d3_select('.preset-search-input').on('keydown.intro keyup.intro', null);
86236 d3_select('.more-fields .combobox-input').on('click.intro', null);
86240 chapter.restart = function() {
86246 return utilRebind(chapter, dispatch$1, 'on');
86249 function uiIntroStartEditing(context, reveal) {
86250 var dispatch$1 = dispatch('done', 'startEditing');
86251 var modalSelection = d3_select(null);
86255 title: 'intro.startediting.title'
86258 function showHelp() {
86259 reveal('.map-control.help-control',
86260 t('intro.startediting.help', { button: icon('#iD-icon-help', 'pre-text'), key: t('help.key') }), {
86261 buttonText: t('intro.ok'),
86262 buttonCallback: function() { shortcuts(); }
86267 function shortcuts() {
86268 reveal('.map-control.help-control',
86269 t('intro.startediting.shortcuts', { key: t('shortcuts.toggle.key') }), {
86270 buttonText: t('intro.ok'),
86271 buttonCallback: function() { showSave(); }
86276 function showSave() {
86277 d3_selectAll('.shaded').remove(); // in case user opened keyboard shortcuts
86278 reveal('#bar button.save',
86279 t('intro.startediting.save'), {
86280 buttonText: t('intro.ok'),
86281 buttonCallback: function() { showStart(); }
86286 function showStart() {
86287 d3_selectAll('.shaded').remove(); // in case user opened keyboard shortcuts
86289 modalSelection = uiModal(context.container());
86291 modalSelection.select('.modal')
86292 .attr('class', 'modal-splash modal col6');
86294 modalSelection.selectAll('.close').remove();
86296 var startbutton = modalSelection.select('.content')
86297 .attr('class', 'fillL')
86299 .attr('class', 'modal-section huge-modal-button')
86300 .on('click', function() {
86301 modalSelection.remove();
86306 .attr('class', 'illustration')
86308 .attr('xlink:href', '#iD-logo-walkthrough');
86312 .text(t('intro.startediting.start'));
86314 dispatch$1.call('startEditing');
86318 chapter.enter = function() {
86323 chapter.exit = function() {
86324 modalSelection.remove();
86325 d3_selectAll('.shaded').remove(); // in case user opened keyboard shortcuts
86329 return utilRebind(chapter, dispatch$1, 'on');
86333 welcome: uiIntroWelcome,
86334 navigation: uiIntroNavigation,
86335 point: uiIntroPoint,
86338 building: uiIntroBuilding,
86339 startEditing: uiIntroStartEditing
86342 var chapterFlow = [
86353 function uiIntro(context) {
86354 var INTRO_IMAGERY = 'EsriWorldImageryClarity';
86355 var introGraph = {};
86358 // create entities for intro graph and localize names
86359 for (var id in dataIntroGraph) {
86360 introGraph[id] = osmEntity(localize(dataIntroGraph[id]));
86364 function intro(selection) {
86365 context.enter(modeBrowse(context));
86367 // Save current map state
86368 var osm = context.connection();
86369 var history = context.history().toJSON();
86370 var hash = window.location.hash;
86371 var center = context.map().center();
86372 var zoom = context.map().zoom();
86373 var background = context.background().baseLayerSource();
86374 var overlays = context.background().overlayLayerSources();
86375 var opacity = d3_selectAll('#map .layer-background').style('opacity');
86376 var caches = osm && osm.caches();
86377 var baseEntities = context.history().graph().base().entities;
86378 var countryCode = services$1.geocoder.countryCode;
86380 // Show sidebar and disable the sidebar resizing button
86381 // (this needs to be before `context.inIntro(true)`)
86382 context.ui().sidebar.expand();
86383 d3_selectAll('button.sidebar-toggle').classed('disabled', true);
86386 context.inIntro(true);
86388 // Load semi-real data used in intro
86389 if (osm) { osm.toggle(false).reset(); }
86390 context.history().reset();
86391 context.history().merge(Object.values(coreGraph().load(introGraph).entities));
86392 context.history().checkpoint('initial');
86395 var imagery = context.background().findSource(INTRO_IMAGERY);
86397 context.background().baseLayerSource(imagery);
86399 context.background().bing();
86401 overlays.forEach(function(d) {
86402 context.background().toggleOverlayLayer(d);
86405 // Setup data layers (only OSM)
86406 var layers = context.layers();
86407 layers.all().forEach(function(item) {
86408 // if the layer has the function `enabled`
86409 if (typeof item.layer.enabled === 'function') {
86410 item.layer.enabled(item.id === 'osm');
86415 services$1.geocoder.countryCode = function(location, callback) {
86416 callback(null, t('intro.graph.countrycode'));
86420 d3_selectAll('#map .layer-background').style('opacity', 1);
86422 var curtain = uiCurtain();
86423 selection.call(curtain);
86425 // Store that the user started the walkthrough..
86426 context.storage('walkthrough_started', 'yes');
86428 // Restore previous walkthrough progress..
86429 var storedProgress = context.storage('walkthrough_progress') || '';
86430 var progress = storedProgress.split(';').filter(Boolean);
86432 var chapters = chapterFlow.map(function(chapter, i) {
86433 var s = chapterUi[chapter](context, curtain.reveal)
86434 .on('done', function() {
86435 context.presets().init(); // clear away "recent" presets
86437 buttons.filter(function(d) {
86438 return d.title === s.title;
86439 }).classed('finished', true);
86441 if (i < chapterFlow.length - 1) {
86442 var next = chapterFlow[i + 1];
86443 d3_select('button.chapter-' + next)
86444 .classed('next', true);
86447 // Store walkthrough progress..
86448 progress.push(chapter);
86449 context.storage('walkthrough_progress', utilArrayUniq(progress).join(';'));
86454 chapters[chapters.length - 1].on('startEditing', function() {
86455 // Store walkthrough progress..
86456 progress.push('startEditing');
86457 context.storage('walkthrough_progress', utilArrayUniq(progress).join(';'));
86459 // Store if walkthrough is completed..
86460 var incomplete = utilArrayDifference(chapterFlow, progress);
86461 if (!incomplete.length) {
86462 context.storage('walkthrough_completed', 'yes');
86467 d3_selectAll('#map .layer-background').style('opacity', opacity);
86468 d3_selectAll('button.sidebar-toggle').classed('disabled', false);
86469 if (osm) { osm.toggle(true).reset().caches(caches); }
86470 context.history().reset().merge(Object.values(baseEntities));
86471 context.background().baseLayerSource(background);
86472 overlays.forEach(function(d) { context.background().toggleOverlayLayer(d); });
86473 if (history) { context.history().fromJSON(history, false); }
86474 context.map().centerZoom(center, zoom);
86475 window.location.replace(hash);
86476 services$1.geocoder.countryCode = countryCode;
86477 context.inIntro(false);
86480 var navwrap = selection
86482 .attr('class', 'intro-nav-wrap fillD');
86486 .attr('class', 'intro-nav-wrap-logo')
86488 .attr('xlink:href', '#iD-logo-walkthrough');
86490 var buttonwrap = navwrap
86492 .attr('class', 'joined')
86493 .selectAll('button.chapter');
86495 var buttons = buttonwrap
86499 .attr('class', function(d, i) { return 'chapter chapter-' + chapterFlow[i]; })
86500 .on('click', enterChapter);
86504 .text(function(d) { return t(d.title); });
86508 .attr('class', 'status')
86509 .call(svgIcon((textDirection === 'rtl' ? '#iD-icon-backward' : '#iD-icon-forward'), 'inline'));
86511 enterChapter(chapters[0]);
86514 function enterChapter(newChapter) {
86515 if (_currChapter) { _currChapter.exit(); }
86516 context.enter(modeBrowse(context));
86518 _currChapter = newChapter;
86519 _currChapter.enter();
86522 .classed('next', false)
86523 .classed('active', function(d) {
86524 return d.title === _currChapter.title;
86533 function uiShortcuts(context) {
86534 var detected = utilDetect();
86535 var _activeTab = 0;
86536 var _modalSelection;
86537 var _selection = d3_select(null);
86540 context.keybinding()
86541 .on([t('shortcuts.toggle.key'), '?'], function () {
86542 if (d3_selectAll('.modal-shortcuts').size()) { // already showing
86543 if (_modalSelection) {
86544 _modalSelection.close();
86545 _modalSelection = null;
86548 _modalSelection = uiModal(_selection);
86549 shortcutsModal(_modalSelection);
86554 function shortcutsModal(_modalSelection) {
86555 _modalSelection.select('.modal')
86556 .classed('modal-shortcuts', true);
86558 var shortcutsModal = _modalSelection.select('.content');
86562 .attr('class', 'modal-section')
86564 .text(t('shortcuts.title'));
86571 function render(selection) {
86572 var wrapper = selection
86573 .selectAll('.wrapper')
86576 var wrapperEnter = wrapper
86579 .attr('class', 'wrapper modal-section');
86581 var tabsBar = wrapperEnter
86583 .attr('class', 'tabs-bar');
86585 var shortcutsList = wrapperEnter
86587 .attr('class', 'shortcuts-list');
86589 wrapper = wrapper.merge(wrapperEnter);
86593 .data(dataShortcuts);
86595 var tabsEnter = tabs
86598 .attr('class', 'tab')
86599 .on('click', function (d, i) {
86606 .text(function (d) { return t(d.text); });
86612 wrapper.selectAll('.tab')
86613 .classed('active', function (d, i) {
86614 return i === _activeTab;
86618 var shortcuts = shortcutsList
86619 .selectAll('.shortcut-tab')
86620 .data(dataShortcuts);
86622 var shortcutsEnter = shortcuts
86625 .attr('class', function(d) { return 'shortcut-tab shortcut-tab-' + d.tab; });
86627 var columnsEnter = shortcutsEnter
86628 .selectAll('.shortcut-column')
86629 .data(function (d) { return d.columns; })
86632 .attr('class', 'shortcut-column');
86634 var rowsEnter = columnsEnter
86635 .selectAll('.shortcut-row')
86636 .data(function (d) { return d.rows; })
86639 .attr('class', 'shortcut-row');
86642 var sectionRows = rowsEnter
86643 .filter(function (d) { return !d.shortcuts; });
86650 .attr('class', 'shortcut-section')
86652 .text(function (d) { return t(d.text); });
86655 var shortcutRows = rowsEnter
86656 .filter(function (d) { return d.shortcuts; });
86658 var shortcutKeys = shortcutRows
86660 .attr('class', 'shortcut-keys');
86662 var modifierKeys = shortcutKeys
86663 .filter(function (d) { return d.modifiers; });
86666 .selectAll('kbd.modifier')
86667 .data(function (d) {
86668 if (detected.os === 'win' && d.text === 'shortcuts.editing.commands.redo') {
86670 } else if (detected.os !== 'mac' && d.text === 'shortcuts.browsing.display_options.fullscreen') {
86673 return d.modifiers;
86677 .each(function () {
86678 var selection = d3_select(this);
86682 .attr('class', 'modifier')
86683 .text(function (d) { return uiCmd.display(d); });
86692 .selectAll('kbd.shortcut')
86693 .data(function (d) {
86694 var arr = d.shortcuts;
86695 if (detected.os === 'win' && d.text === 'shortcuts.editing.commands.redo') {
86697 } else if (detected.os !== 'mac' && d.text === 'shortcuts.browsing.display_options.fullscreen') {
86701 // replace translations
86702 arr = arr.map(function(s) {
86703 return uiCmd.display(s.indexOf('.') !== -1 ? t(s) : s);
86706 return utilArrayUniq(arr).map(function(s) {
86709 separator: d.separator,
86715 .each(function (d, i, nodes) {
86716 var selection = d3_select(this);
86717 var click = d.shortcut.toLowerCase().match(/(.*).click/);
86719 if (click && click[1]) { // replace "left_click", "right_click" with mouse icon
86721 .call(svgIcon('#iD-walkthrough-mouse', 'mouseclick', click[1]));
86725 .attr('class', 'shortcut')
86726 .text(function (d) { return d.shortcut; });
86729 if (i < nodes.length - 1) {
86732 .text(d.separator || '\u00a0' + t('shortcuts.or') + '\u00a0');
86733 } else if (i === nodes.length - 1 && d.suffix) {
86742 .filter(function(d) { return d.gesture; })
86743 .each(function () {
86744 var selection = d3_select(this);
86752 .attr('class', 'gesture')
86753 .text(function (d) { return t(d.gesture); });
86759 .attr('class', 'shortcut-desc')
86760 .text(function (d) { return d.text ? t(d.text) : '\u00a0'; });
86763 shortcuts = shortcuts
86764 .merge(shortcutsEnter);
86767 wrapper.selectAll('.shortcut-tab')
86768 .style('display', function (d, i) {
86769 return i === _activeTab ? 'flex' : 'none';
86774 return function(selection, show) {
86775 _selection = selection;
86777 _modalSelection = uiModal(selection);
86778 shortcutsModal(_modalSelection);
86783 function uiHelp(context) {
86784 var key = t('help.key');
86786 var _pane = d3_select(null), _toggleButton = d3_select(null);
86809 'select_left_click',
86810 'select_right_click',
86812 'multiselect_shift_click',
86813 'multiselect_lasso',
86826 ['feature_editor', [
86833 'fields_all_fields',
86835 'fields_add_field',
86844 'add_point_finish',
86849 'delete_point_command'
86858 'modify_line_dragnode',
86859 'modify_line_addnode',
86862 'connect_line_display',
86863 'connect_line_drag',
86864 'connect_line_tag',
86865 'disconnect_line_h',
86866 'disconnect_line_command',
86868 'move_line_command',
86869 'move_line_connected',
86872 'delete_line_command'
86879 'add_area_command',
86883 'square_area_command',
86885 'modify_area_dragnode',
86886 'modify_area_addnode',
86889 'delete_area_command'
86895 'edit_relation_add',
86896 'edit_relation_delete',
86897 'maintain_relation_h',
86898 'maintain_relation',
86899 'relation_types_h',
86902 'multipolygon_create',
86903 'multipolygon_merge',
86904 'turn_restriction_h',
86905 'turn_restriction',
86906 'turn_restriction_field',
86907 'turn_restriction_editing',
86960 'help.help.open_data_h': 3,
86961 'help.help.before_start_h': 3,
86962 'help.help.open_source_h': 3,
86963 'help.overview.navigation_h': 3,
86964 'help.overview.features_h': 3,
86965 'help.editing.select_h': 3,
86966 'help.editing.multiselect_h': 3,
86967 'help.editing.undo_redo_h': 3,
86968 'help.editing.save_h': 3,
86969 'help.editing.upload_h': 3,
86970 'help.editing.backups_h': 3,
86971 'help.editing.keyboard_h': 3,
86972 'help.feature_editor.type_h': 3,
86973 'help.feature_editor.fields_h': 3,
86974 'help.feature_editor.tags_h': 3,
86975 'help.points.add_point_h': 3,
86976 'help.points.move_point_h': 3,
86977 'help.points.delete_point_h': 3,
86978 'help.lines.add_line_h': 3,
86979 'help.lines.modify_line_h': 3,
86980 'help.lines.connect_line_h': 3,
86981 'help.lines.disconnect_line_h': 3,
86982 'help.lines.move_line_h': 3,
86983 'help.lines.delete_line_h': 3,
86984 'help.areas.point_or_area_h': 3,
86985 'help.areas.add_area_h': 3,
86986 'help.areas.square_area_h': 3,
86987 'help.areas.modify_area_h': 3,
86988 'help.areas.delete_area_h': 3,
86989 'help.relations.edit_relation_h': 3,
86990 'help.relations.maintain_relation_h': 3,
86991 'help.relations.relation_types_h': 2,
86992 'help.relations.multipolygon_h': 3,
86993 'help.relations.turn_restriction_h': 3,
86994 'help.relations.route_h': 3,
86995 'help.relations.boundary_h': 3,
86996 'help.notes.add_note_h': 3,
86997 'help.notes.update_note_h': 3,
86998 'help.notes.save_note_h': 3,
86999 'help.imagery.sources_h': 3,
87000 'help.imagery.offsets_h': 3,
87001 'help.streetlevel.using_h': 3,
87002 'help.gps.using_h': 3,
87003 'help.qa.tools_h': 3,
87004 'help.qa.issues_h': 3
87007 var replacements = {
87008 point: icon('#iD-icon-point', 'pre-text'),
87009 line: icon('#iD-icon-line', 'pre-text'),
87010 area: icon('#iD-icon-area', 'pre-text'),
87011 note: icon('#iD-icon-note', 'pre-text add-note'),
87012 plus: icon('#iD-icon-plus', 'pre-text'),
87013 minus: icon('#iD-icon-minus', 'pre-text'),
87014 orthogonalize: icon('#iD-operation-orthogonalize', 'pre-text'),
87015 disconnect: icon('#iD-operation-disconnect', 'pre-text'),
87016 layers: icon('#iD-icon-layers', 'pre-text'),
87017 data: icon('#iD-icon-data', 'pre-text'),
87018 inspect: icon('#iD-icon-inspect', 'pre-text'),
87019 move: icon('#iD-operation-move', 'pre-text'),
87020 merge: icon('#iD-operation-merge', 'pre-text'),
87021 delete: icon('#iD-operation-delete', 'pre-text'),
87022 close: icon('#iD-icon-close', 'pre-text'),
87023 undo: icon(textDirection === 'rtl' ? '#iD-icon-redo' : '#iD-icon-undo', 'pre-text'),
87024 redo: icon(textDirection === 'rtl' ? '#iD-icon-undo' : '#iD-icon-redo', 'pre-text'),
87025 save: icon('#iD-icon-save', 'pre-text'),
87026 leftclick: icon('#iD-walkthrough-mouse', 'pre-text mouseclick', 'left'),
87027 rightclick: icon('#iD-walkthrough-mouse', 'pre-text mouseclick', 'right'),
87028 shift: uiCmd.display('⇧'),
87029 alt: uiCmd.display('⌥'),
87030 return: uiCmd.display('↵'),
87031 version: context.version
87034 // For each section, squash all the texts into a single markdown document
87035 var docs = docKeys.map(function(key) {
87036 var helpkey = 'help.' + key[0];
87037 var text = key[1].reduce(function(all, part) {
87038 var subkey = helpkey + '.' + part;
87039 var depth = headings[subkey]; // is this subkey a heading?
87040 var hhh = depth ? Array(depth + 1).join('#') + ' ' : ''; // if so, prepend with some ##'s
87041 return all + hhh + t(subkey, replacements) + '\n\n';
87045 title: t(helpkey + '.title'),
87046 html: marked(text.trim())
87050 var paneTooltip = tooltip()
87051 .placement((textDirection === 'rtl') ? 'right' : 'left')
87053 .title(uiTooltipHtml(t('help.title'), key));
87055 function hidePane() {
87056 context.ui().togglePanes();
87059 uiHelp.togglePane = function() {
87060 if (event) event.preventDefault();
87061 paneTooltip.hide(_toggleButton);
87062 context.ui().togglePanes(!_pane.classed('shown') ? _pane : undefined);
87065 uiHelp.renderToggleButton = function(selection) {
87067 _toggleButton = selection.append('button')
87068 .attr('tabindex', -1)
87069 .on('click', uiHelp.togglePane)
87070 .call(svgIcon('#iD-icon-help', 'light'))
87071 .call(paneTooltip);
87075 uiHelp.renderPane = function(selection) {
87077 function clickHelp(d, i) {
87078 var rtl = (textDirection === 'rtl');
87079 content.property('scrollTop', 0);
87080 doctitle.html(d.title);
87083 body.selectAll('a')
87084 .attr('target', '_blank');
87085 menuItems.classed('selected', function(m) {
87086 return m.title === d.title;
87091 nav.call(drawNext).call(drawPrevious);
87093 nav.call(drawPrevious).call(drawNext);
87097 function drawNext(selection) {
87098 if (i < docs.length - 1) {
87099 var nextLink = selection
87101 .attr('class', 'next')
87102 .on('click', function() {
87103 clickHelp(docs[i + 1], i + 1);
87108 .text(docs[i + 1].title)
87109 .call(svgIcon((rtl ? '#iD-icon-backward' : '#iD-icon-forward'), 'inline'));
87114 function drawPrevious(selection) {
87116 var prevLink = selection
87118 .attr('class', 'previous')
87119 .on('click', function() {
87120 clickHelp(docs[i - 1], i - 1);
87124 .call(svgIcon((rtl ? '#iD-icon-forward' : '#iD-icon-backward'), 'inline'))
87126 .text(docs[i - 1].title);
87132 function clickWalkthrough() {
87133 if (context.inIntro()) return;
87134 context.container().call(uiIntro(context));
87135 context.ui().togglePanes();
87139 function clickShortcuts() {
87140 context.container().call(uiShortcuts(context), true);
87144 _pane = selection.append('div')
87145 .attr('class', 'help-wrap map-pane fillL hide')
87146 .attr('pane', 'help');
87148 var heading = _pane
87150 .attr('class', 'pane-heading');
87152 var doctitle = heading
87154 .text(t('help.title'));
87158 .on('click', hidePane)
87159 .call(svgIcon('#iD-icon-close'));
87162 var content = _pane
87164 .attr('class', 'pane-content');
87168 .attr('class', 'toc');
87170 var menuItems = toc.selectAll('li')
87175 .html(function(d) { return d.title; })
87176 .on('click', clickHelp);
87178 var shortcuts = toc
87180 .attr('class', 'shortcuts')
87183 .title(uiTooltipHtml(t('shortcuts.tooltip'), '?'))
87187 .on('click', clickShortcuts);
87191 .text(t('shortcuts.title'));
87193 var walkthrough = toc
87195 .attr('class', 'walkthrough')
87197 .on('click', clickWalkthrough);
87201 .attr('class', 'logo logo-walkthrough')
87203 .attr('xlink:href', '#iD-logo-walkthrough');
87207 .text(t('splash.walkthrough'));
87210 var helpContent = content
87212 .attr('class', 'left-content');
87214 var body = helpContent
87216 .attr('class', 'body');
87218 var nav = helpContent
87220 .attr('class', 'nav');
87222 clickHelp(docs[0], 0);
87224 context.keybinding()
87225 .on(key, uiHelp.togglePane);
87232 function uiPanelBackground(context) {
87233 var background = context.background();
87234 var currSourceName = null;
87236 var metadataKeys = [
87237 'zoom', 'vintage', 'source', 'description', 'resolution', 'accuracy'
87240 var debouncedRedraw = debounce(redraw, 250);
87242 function redraw(selection) {
87243 var source = background.baseLayerSource();
87244 var isDG = (source.id.match(/^DigitalGlobe/i) !== null);
87246 if (currSourceName !== source.name()) {
87247 currSourceName = source.name();
87251 selection.html('');
87253 var list = selection
87255 .attr('class', 'background-info');
87259 .text(currSourceName);
87261 metadataKeys.forEach(function(k) {
87262 // DigitalGlobe vintage is available in raster layers for now.
87263 if (isDG && k === 'vintage') return;
87267 .attr('class', 'background-info-list-' + k)
87268 .classed('hide', !metadata[k])
87269 .text(t('info_panels.background.' + k) + ':')
87271 .attr('class', 'background-info-span-' + k)
87272 .text(metadata[k]);
87275 debouncedGetMetadata(selection);
87277 var toggleTiles = context.getDebug('tile') ? 'hide_tiles' : 'show_tiles';
87281 .text(t('info_panels.background.' + toggleTiles))
87283 .attr('class', 'button button-toggle-tiles')
87284 .on('click', function() {
87285 event.preventDefault();
87286 context.setDebug('tile', !context.getDebug('tile'));
87287 selection.call(redraw);
87291 var key = source.id + '-vintage';
87292 var sourceVintage = context.background().findSource(key);
87293 var showsVintage = context.background().showsLayer(sourceVintage);
87294 var toggleVintage = showsVintage ? 'hide_vintage' : 'show_vintage';
87297 .text(t('info_panels.background.' + toggleVintage))
87299 .attr('class', 'button button-toggle-vintage')
87300 .on('click', function() {
87301 event.preventDefault();
87302 context.background().toggleOverlayLayer(sourceVintage);
87303 selection.call(redraw);
87307 // disable if necessary
87308 ['DigitalGlobe-Premium', 'DigitalGlobe-Standard'].forEach(function(layerId) {
87309 if (source.id !== layerId) {
87310 var key = layerId + '-vintage';
87311 var sourceVintage = context.background().findSource(key);
87312 if (context.background().showsLayer(sourceVintage)) {
87313 context.background().toggleOverlayLayer(sourceVintage);
87320 var debouncedGetMetadata = debounce(getMetadata, 250);
87322 function getMetadata(selection) {
87323 var tile = d3_select('.layer-background img.tile-center'); // tile near viewport center
87324 if (tile.empty()) return;
87326 var sourceName = currSourceName;
87327 var d = tile.datum();
87328 var zoom = (d && d.length >= 3 && d[2]) || Math.floor(context.map().zoom());
87329 var center = context.map().center();
87332 metadata.zoom = String(zoom);
87333 selection.selectAll('.background-info-list-zoom')
87334 .classed('hide', false)
87335 .selectAll('.background-info-span-zoom')
87336 .text(metadata.zoom);
87338 if (!d || !d.length >= 3) return;
87340 background.baseLayerSource().getMetadata(center, d, function(err, result) {
87341 if (err || currSourceName !== sourceName) return;
87344 var vintage = result.vintage;
87345 metadata.vintage = (vintage && vintage.range) || t('info_panels.background.unknown');
87346 selection.selectAll('.background-info-list-vintage')
87347 .classed('hide', false)
87348 .selectAll('.background-info-span-vintage')
87349 .text(metadata.vintage);
87351 // update other metdata
87352 metadataKeys.forEach(function(k) {
87353 if (k === 'zoom' || k === 'vintage') return; // done already
87354 var val = result[k];
87356 selection.selectAll('.background-info-list-' + k)
87357 .classed('hide', !val)
87358 .selectAll('.background-info-span-' + k)
87365 var panel = function(selection) {
87366 selection.call(redraw);
87369 .on('drawn.info-background', function() {
87370 selection.call(debouncedRedraw);
87372 .on('move.info-background', function() {
87373 selection.call(debouncedGetMetadata);
87378 panel.off = function() {
87380 .on('drawn.info-background', null)
87381 .on('move.info-background', null);
87384 panel.id = 'background';
87385 panel.title = t('info_panels.background.title');
87386 panel.key = t('info_panels.background.key');
87392 function uiPanelHistory(context) {
87395 function displayTimestamp(timestamp) {
87396 if (!timestamp) return t('info_panels.history.unknown');
87397 var detected = utilDetect();
87399 day: 'numeric', month: 'short', year: 'numeric',
87400 hour: 'numeric', minute: 'numeric', second: 'numeric'
87402 var d = new Date(timestamp);
87403 if (isNaN(d.getTime())) return t('info_panels.history.unknown');
87404 return d.toLocaleString(detected.locale, options);
87408 function displayUser(selection, userName) {
87412 .text(t('info_panels.history.unknown'));
87418 .attr('class', 'user-name')
87421 var links = selection
87423 .attr('class', 'links');
87428 .attr('class', 'user-osm-link')
87429 .attr('href', osm.userURL(userName))
87430 .attr('target', '_blank')
87431 .attr('tabindex', -1)
87437 .attr('class', 'user-hdyc-link')
87438 .attr('href', 'https://hdyc.neis-one.org/?' + userName)
87439 .attr('target', '_blank')
87440 .attr('tabindex', -1)
87445 function displayChangeset(selection, changeset) {
87449 .text(t('info_panels.history.unknown'));
87455 .attr('class', 'changeset-id')
87458 var links = selection
87460 .attr('class', 'links');
87465 .attr('class', 'changeset-osm-link')
87466 .attr('href', osm.changesetURL(changeset))
87467 .attr('target', '_blank')
87468 .attr('tabindex', -1)
87474 .attr('class', 'changeset-osmcha-link')
87475 .attr('href', 'https://osmcha.mapbox.com/changesets/' + changeset)
87476 .attr('target', '_blank')
87477 .attr('tabindex', -1)
87482 function redraw(selection) {
87483 var selectedNoteID = context.selectedNoteID();
87484 osm = context.connection();
87486 var selected, note, entity;
87487 if (selectedNoteID && osm) { // selected 1 note
87488 selected = [ t('note.note') + ' ' + selectedNoteID ];
87489 note = osm.getNote(selectedNoteID);
87490 } else { // selected 1..n entities
87491 selected = context.selectedIDs()
87492 .filter(function(e) { return context.hasEntity(e); });
87493 if (selected.length) {
87494 entity = context.entity(selected[0]);
87498 var singular = selected.length === 1 ? selected[0] : null;
87500 selection.html('');
87504 .attr('class', 'history-heading')
87505 .text(singular || t('info_panels.history.selected', { n: selected.length }));
87507 if (!singular) return;
87510 selection.call(redrawEntity, entity);
87512 selection.call(redrawNote, note);
87517 function redrawNote(selection, note) {
87518 if (!note || note.isNew()) {
87521 .text(t('info_panels.history.note_no_history'));
87525 var list = selection
87530 .text(t('info_panels.history.note_comments') + ':')
87532 .text(note.comments.length);
87534 if (note.comments.length) {
87537 .text(t('info_panels.history.note_created_date') + ':')
87539 .text(displayTimestamp(note.comments[0].date));
87543 .text(t('info_panels.history.note_created_user') + ':')
87544 .call(displayUser, note.comments[0].user);
87550 .attr('class', 'view-history-on-osm')
87551 .attr('target', '_blank')
87552 .attr('tabindex', -1)
87553 .attr('href', osm.noteURL(note))
87554 .call(svgIcon('#iD-icon-out-link', 'inline'))
87556 .text(t('info_panels.history.note_link_text'));
87561 function redrawEntity(selection, entity) {
87562 if (!entity || entity.isNew()) {
87565 .text(t('info_panels.history.no_history'));
87569 var links = selection
87571 .attr('class', 'links');
87576 .attr('class', 'view-history-on-osm')
87577 .attr('href', osm.historyURL(entity))
87578 .attr('target', '_blank')
87579 .attr('tabindex', -1)
87580 .attr('title', t('info_panels.history.link_text'))
87585 .attr('class', 'pewu-history-viewer-link')
87586 .attr('href', 'https://pewu.github.io/osm-history/#/' + entity.type + '/' + entity.osmId())
87587 .attr('target', '_blank')
87588 .attr('tabindex', -1)
87591 var list = selection
87596 .text(t('info_panels.history.version') + ':')
87598 .text(entity.version);
87602 .text(t('info_panels.history.last_edit') + ':')
87604 .text(displayTimestamp(entity.timestamp));
87608 .text(t('info_panels.history.edited_by') + ':')
87609 .call(displayUser, entity.user);
87613 .text(t('info_panels.history.changeset') + ':')
87614 .call(displayChangeset, entity.changeset);
87618 var panel = function(selection) {
87619 selection.call(redraw);
87622 .on('drawn.info-history', function() {
87623 selection.call(redraw);
87627 .on('enter.info-history', function() {
87628 selection.call(redraw);
87632 panel.off = function() {
87633 context.map().on('drawn.info-history', null);
87634 context.on('enter.info-history', null);
87637 panel.id = 'history';
87638 panel.title = t('info_panels.history.title');
87639 panel.key = t('info_panels.history.key');
87645 var OSM_PRECISION = 7;
87646 var locale$2 = utilDetect().locale;
87649 * Returns a localized representation of the given length measurement.
87651 * @param {Number} m area in meters
87652 * @param {Boolean} isImperial true for U.S. customary units; false for metric
87654 function displayLength(m, isImperial) {
87655 var d = m * (isImperial ? 3.28084 : 1);
87668 unit = 'kilometers';
87674 return t('units.' + unit, {
87675 quantity: d.toLocaleString(locale$2, {
87676 maximumSignificantDigits: 4
87682 * Returns a localized representation of the given area measurement.
87684 * @param {Number} m2 area in square meters
87685 * @param {Boolean} isImperial true for U.S. customary units; false for metric
87687 function displayArea(m2, isImperial) {
87688 var d = m2 * (isImperial ? 10.7639111056 : 1);
87694 if (d >= 6969600) { // > 0.25mi² show mi²
87696 unit1 = 'square_miles';
87699 unit1 = 'square_feet';
87702 if (d > 4356 && d < 43560000) { // 0.1 - 1000 acres
87708 if (d >= 250000) { // > 0.25km² show km²
87710 unit1 = 'square_kilometers';
87713 unit1 = 'square_meters';
87716 if (d > 1000 && d < 10000000) { // 0.1 - 1000 hectares
87718 unit2 = 'hectares';
87722 area = t('units.' + unit1, {
87723 quantity: d1.toLocaleString(locale$2, {
87724 maximumSignificantDigits: 4
87729 return t('units.area_pair', {
87731 area2: t('units.' + unit2, {
87732 quantity: d2.toLocaleString(locale$2, {
87733 maximumSignificantDigits: 2
87742 function wrap(x, min, max) {
87744 return ((x - min) % d + d) % d + min;
87747 function clamp$1(x, min, max) {
87748 return Math.max(min, Math.min(x, max));
87751 function displayCoordinate(deg, pos, neg) {
87752 var min = (Math.abs(deg) - Math.floor(Math.abs(deg))) * 60;
87753 var sec = (min - Math.floor(min)) * 60;
87754 var displayDegrees = t('units.arcdegrees', {
87755 quantity: Math.floor(Math.abs(deg)).toLocaleString(locale$2)
87757 var displayCoordinate;
87759 if (Math.floor(sec) > 0) {
87760 displayCoordinate = displayDegrees +
87761 t('units.arcminutes', {
87762 quantity: Math.floor(min).toLocaleString(locale$2)
87764 t('units.arcseconds', {
87765 quantity: Math.round(sec).toLocaleString(locale$2)
87767 } else if (Math.floor(min) > 0) {
87768 displayCoordinate = displayDegrees +
87769 t('units.arcminutes', {
87770 quantity: Math.round(min).toLocaleString(locale$2)
87773 displayCoordinate = t('units.arcdegrees', {
87774 quantity: Math.round(Math.abs(deg)).toLocaleString(locale$2)
87779 return displayCoordinate;
87781 return t('units.coordinate', {
87782 coordinate: displayCoordinate,
87783 direction: t('units.' + (deg > 0 ? pos : neg))
87789 * Returns given coordinate pair in degree-minute-second format.
87791 * @param {Array<Number>} coord longitude and latitude
87793 function dmsCoordinatePair(coord) {
87794 return t('units.coordinate_pair', {
87795 latitude: displayCoordinate(clamp$1(coord[1], -90, 90), 'north', 'south'),
87796 longitude: displayCoordinate(wrap(coord[0], -180, 180), 'east', 'west')
87801 * Returns the given coordinate pair in decimal format.
87802 * note: unlocalized to avoid comma ambiguity - see #4765
87804 * @param {Array<Number>} coord longitude and latitude
87806 function decimalCoordinatePair(coord) {
87807 return t('units.coordinate_pair', {
87808 latitude: clamp$1(coord[1], -90, 90).toFixed(OSM_PRECISION),
87809 longitude: wrap(coord[0], -180, 180).toFixed(OSM_PRECISION)
87813 function uiPanelLocation(context) {
87814 var currLocation = '';
87817 function redraw(selection) {
87818 selection.html('');
87820 var list = selection
87823 // Mouse coordinates
87824 var coord = context.map().mouseCoordinates();
87825 if (coord.some(isNaN)) {
87826 coord = context.map().center();
87831 .text(dmsCoordinatePair(coord))
87833 .text(decimalCoordinatePair(coord));
87838 .attr('class', 'location-info')
87839 .text(currLocation || ' ');
87841 debouncedGetLocation(selection, coord);
87845 var debouncedGetLocation = debounce(getLocation, 250);
87846 function getLocation(selection, coord) {
87847 if (!services$1.geocoder) {
87848 currLocation = t('info_panels.location.unknown_location');
87849 selection.selectAll('.location-info')
87850 .text(currLocation);
87852 services$1.geocoder.reverse(coord, function(err, result) {
87853 currLocation = result ? result.display_name : t('info_panels.location.unknown_location');
87854 selection.selectAll('.location-info')
87855 .text(currLocation);
87861 var panel = function(selection) {
87862 selection.call(redraw);
87865 .on('mousemove.info-location', function() {
87866 selection.call(redraw);
87870 panel.off = function() {
87872 .on('mousemove.info-location', null);
87875 panel.id = 'location';
87876 panel.title = t('info_panels.location.title');
87877 panel.key = t('info_panels.location.key');
87883 function uiPanelMeasurement(context) {
87884 var locale = utilDetect().locale;
87885 var isImperial = (locale.toLowerCase() === 'en-us');
87888 function radiansToMeters(r) {
87889 // using WGS84 authalic radius (6371007.1809 m)
87890 return r * 6371007.1809;
87893 function steradiansToSqmeters(r) {
87894 // http://gis.stackexchange.com/a/124857/40446
87895 return r / (4 * Math.PI) * 510065621724000;
87899 function toLineString(feature) {
87900 if (feature.type === 'LineString') return feature;
87902 var result = { type: 'LineString', coordinates: [] };
87903 if (feature.type === 'Polygon') {
87904 result.coordinates = feature.coordinates[0];
87905 } else if (feature.type === 'MultiPolygon') {
87906 result.coordinates = feature.coordinates[0][0];
87913 function nodeCount(feature) {
87914 if (feature.type === 'LineString') return feature.coordinates.length;
87915 if (feature.type === 'Polygon') return feature.coordinates[0].length - 1;
87919 function redraw(selection) {
87920 var resolver = context.graph();
87921 var selectedNoteID = context.selectedNoteID();
87922 var osm = services$1.osm;
87924 var selected, center, entity, note, geometry;
87926 if (selectedNoteID && osm) { // selected 1 note
87927 selected = [ t('note.note') + ' ' + selectedNoteID ];
87928 note = osm.getNote(selectedNoteID);
87932 } else { // selected 1..n entities
87933 var extent = geoExtent();
87934 selected = context.selectedIDs()
87935 .filter(function(e) { return context.hasEntity(e); });
87936 if (selected.length) {
87937 for (var i = 0; i < selected.length; i++) {
87938 entity = context.entity(selected[i]);
87939 extent._extend(entity.extent(resolver));
87941 center = extent.center();
87942 geometry = entity.geometry(resolver);
87946 var singular = selected.length === 1 ? selected[0] : null;
87948 selection.html('');
87952 .attr('class', 'measurement-heading')
87953 .text(singular || t('info_panels.measurement.selected', { n: selected.length.toLocaleString(locale) }));
87955 if (!selected.length) return;
87958 var list = selection
87962 // multiple selected features, just display extent center..
87966 .text(t('info_panels.measurement.center') + ':');
87967 coordItem.append('span')
87968 .text(dmsCoordinatePair(center));
87969 coordItem.append('span')
87970 .text(decimalCoordinatePair(center));
87974 // single selected feature, display details..
87975 if (geometry === 'line' || geometry === 'area') {
87976 var closed = (entity.type === 'relation') || (entity.isClosed() && !entity.isDegenerate());
87977 var feature = entity.asGeoJSON(resolver);
87978 var length = radiansToMeters(d3_geoLength(toLineString(feature)));
87979 var lengthLabel = t('info_panels.measurement.' + (closed ? 'perimeter' : 'length'));
87980 var centroid = d3_geoCentroid(feature);
87984 .text(t('info_panels.measurement.geometry') + ':')
87987 closed ? t('info_panels.measurement.closed_' + geometry) : t('geometry.' + geometry)
87990 if (entity.type !== 'relation') {
87993 .text(t('info_panels.measurement.node_count') + ':')
87995 .text(nodeCount(feature).toLocaleString(locale));
87999 var area = steradiansToSqmeters(entity.area(resolver));
88002 .text(t('info_panels.measurement.area') + ':')
88004 .text(displayArea(area, isImperial));
88010 .text(lengthLabel + ':')
88012 .text(displayLength(length, isImperial));
88016 .text(t('info_panels.measurement.centroid') + ':');
88017 coordItem.append('span')
88018 .text(dmsCoordinatePair(centroid));
88019 coordItem.append('span')
88020 .text(decimalCoordinatePair(centroid));
88022 var toggle = isImperial ? 'imperial' : 'metric';
88026 .text(t('info_panels.measurement.' + toggle))
88028 .attr('class', 'button button-toggle-units')
88029 .on('click', function() {
88030 event.preventDefault();
88031 isImperial = !isImperial;
88032 selection.call(redraw);
88036 var centerLabel = t('info_panels.measurement.' +
88037 (note || entity.type === 'node' ? 'location' : 'center'));
88041 .text(t('info_panels.measurement.geometry') + ':')
88043 .text(t('geometry.' + geometry));
88047 .text(centerLabel + ':');
88048 coordItem.append('span')
88049 .text(dmsCoordinatePair(center));
88050 coordItem.append('span')
88051 .text(decimalCoordinatePair(center));
88056 var panel = function(selection) {
88057 selection.call(redraw);
88060 .on('drawn.info-measurement', function() {
88061 selection.call(redraw);
88065 .on('enter.info-measurement', function() {
88066 selection.call(redraw);
88070 panel.off = function() {
88071 context.map().on('drawn.info-measurement', null);
88072 context.on('enter.info-measurement', null);
88075 panel.id = 'measurement';
88076 panel.title = t('info_panels.measurement.title');
88077 panel.key = t('info_panels.measurement.key');
88083 var uiInfoPanels = {
88084 background: uiPanelBackground,
88085 history: uiPanelHistory,
88086 location: uiPanelLocation,
88087 measurement: uiPanelMeasurement,
88090 function uiInfo(context) {
88091 var ids = Object.keys(uiInfoPanels);
88092 var wasActive = ['measurement'];
88097 ids.forEach(function(k) {
88099 panels[k] = uiInfoPanels[k](context);
88105 function info(selection) {
88107 function redraw() {
88108 var activeids = ids.filter(function(k) { return active[k]; }).sort();
88110 var containers = infoPanels.selectAll('.panel-container')
88111 .data(activeids, function(k) { return k; });
88114 .style('opacity', 1)
88117 .style('opacity', 0)
88118 .on('end', function(d) {
88120 .call(panels[d].off)
88124 var enter = containers.enter()
88126 .attr('class', function(d) { return 'fillD2 panel-container panel-container-' + d; });
88129 .style('opacity', 0)
88132 .style('opacity', 1);
88136 .attr('class', 'panel-title fillD2');
88140 .text(function(d) { return panels[d].title; });
88144 .attr('class', 'close')
88145 .on('click', function (d) { toggle(d); })
88146 .call(svgIcon('#iD-icon-close'));
88150 .attr('class', function(d) { return 'panel-content panel-content-' + d; });
88153 // redraw the panels
88154 infoPanels.selectAll('.panel-content')
88155 .each(function(d) {
88156 d3_select(this).call(panels[d]);
88161 function toggle(which) {
88163 event.stopImmediatePropagation();
88164 event.preventDefault();
88167 var activeids = ids.filter(function(k) { return active[k]; });
88169 if (which) { // toggle one
88170 active[which] = !active[which];
88171 if (activeids.length === 1 && activeids[0] === which) { // none active anymore
88172 wasActive = [which];
88174 } else { // toggle all
88175 if (activeids.length) {
88176 wasActive = activeids;
88177 activeids.forEach(function(k) { active[k] = false; });
88179 wasActive.forEach(function(k) { active[k] = true; });
88187 var infoPanels = selection.selectAll('.info-panels')
88190 infoPanels = infoPanels.enter()
88192 .attr('class', 'info-panels')
88193 .merge(infoPanels);
88197 context.keybinding()
88198 .on(uiCmd('⌘' + t('info_panels.key')), toggle);
88200 ids.forEach(function(k) {
88201 var key = t('info_panels.' + k + '.key', { default: null });
88203 context.keybinding()
88204 .on(uiCmd('⌘⇧' + key), function() { toggle(k); });
88211 function uiIssues(context) {
88212 var key = t('issues.key');
88215 var MAXSQUARE = 20;
88216 var DEFAULTSQUARE = 5; // see also unsquare_way.js
88218 var _errorsSelection = d3_select(null);
88219 var _warningsSelection = d3_select(null);
88220 var _rulesList = d3_select(null);
88221 var _pane = d3_select(null);
88222 var _toggleButton = d3_select(null);
88225 var _warnings = [];
88227 what: context.storage('validate-what') || 'edited', // 'all', 'edited'
88228 where: context.storage('validate-where') || 'all' // 'all', 'visible'
88232 context.validator().on('validated.uiIssues',
88233 function() { window.requestIdleCallback(update); }
88235 context.map().on('move.uiIssues',
88236 debounce(function() { window.requestIdleCallback(update); }, 1000)
88240 function addNotificationBadge(selection) {
88242 selection.selectAll('svg.notification-badge')
88246 .attr('viewbox', '0 0 ' + d + ' ' + d)
88247 .attr('class', 'notification-badge hide')
88251 .attr('r', (d / 2) - 1)
88252 .attr('fill', 'currentColor');
88256 function renderErrorsList(selection) {
88257 _errorsSelection = selection
88258 .call(drawIssuesList, 'errors', _errors);
88262 function renderWarningsList(selection) {
88263 _warningsSelection = selection
88264 .call(drawIssuesList, 'warnings', _warnings);
88268 function drawIssuesList(selection, which, issues) {
88269 var list = selection.selectAll('.issues-list')
88272 list = list.enter()
88274 .attr('class', 'layer-list issues-list ' + which + '-list')
88278 var items = list.selectAll('li')
88279 .data(issues, function(d) { return d.id; });
88286 var itemsEnter = items.enter()
88288 .attr('class', function (d) { return 'issue severity-' + d.severity; })
88289 .on('click', function(d) {
88290 context.validator().focusIssue(d);
88292 .on('mouseover', function(d) {
88293 utilHighlightEntities(d.entityIds, true, context);
88295 .on('mouseout', function(d) {
88296 utilHighlightEntities(d.entityIds, false, context);
88300 var labelsEnter = itemsEnter
88302 .attr('class', 'issue-label');
88304 var textEnter = labelsEnter
88306 .attr('class', 'issue-text');
88310 .attr('class', 'issue-icon')
88311 .each(function(d) {
88312 var iconName = '#iD-icon-' + (d.severity === 'warning' ? 'alert' : 'error');
88314 .call(svgIcon(iconName));
88319 .attr('class', 'issue-message');
88324 .attr('class', 'issue-autofix')
88325 .each(function(d) {
88326 if (!d.autoFix) return;
88330 .attr('title', t('issues.fix_one.title'))
88331 .datum(d.autoFix) // set button datum to the autofix
88332 .attr('class', 'autofix action')
88333 .on('click', function(d) {
88334 event.preventDefault();
88335 event.stopPropagation();
88337 var issuesEntityIDs = d.issue.entityIds;
88338 utilHighlightEntities(issuesEntityIDs.concat(d.entityIds), false, context);
88340 context.perform.apply(context, d.autoArgs);
88341 context.validator().validate();
88343 .call(svgIcon('#iD-icon-wrench'));
88352 items.selectAll('.issue-message')
88353 .text(function(d) {
88354 return d.message();
88359 var canAutoFix = issues.filter(function(issue) { return issue.autoFix; });
88361 var autoFixAll = selection.selectAll('.autofix-all')
88362 .data(canAutoFix.length ? [0] : []);
88369 var autoFixAllEnter = autoFixAll.enter()
88370 .insert('div', '.issues-list')
88371 .attr('class', 'autofix-all');
88373 var linkEnter = autoFixAllEnter
88375 .attr('class', 'autofix-all-link')
88376 .attr('href', '#');
88380 .attr('class', 'autofix-all-link-text')
88381 .text(t('issues.fix_all.title'));
88385 .attr('class', 'autofix-all-link-icon')
88386 .call(svgIcon('#iD-icon-wrench'));
88388 if (which === 'warnings') {
88389 renderIgnoredIssuesReset(selection);
88393 autoFixAll = autoFixAll
88394 .merge(autoFixAllEnter);
88396 autoFixAll.selectAll('.autofix-all-link')
88397 .on('click', function() {
88398 context.pauseChangeDispatch();
88399 context.perform(actionNoop());
88400 canAutoFix.forEach(function(issue) {
88401 var args = issue.autoFix.autoArgs.slice(); // copy
88402 if (typeof args[args.length - 1] !== 'function') {
88405 args.push(t('issues.fix_all.annotation'));
88406 context.replace.apply(context, args);
88408 context.resumeChangeDispatch();
88409 context.validator().validate();
88414 function updateOptionValue(d, val) {
88415 if (!val && event && event.target) {
88416 val = event.target.value;
88420 context.storage('validate-' + d, val);
88425 function renderIssuesOptions(selection) {
88426 var container = selection.selectAll('.issues-options-container')
88429 container = container.enter()
88431 .attr('class', 'issues-options-container')
88435 { key: 'what', values: ['edited', 'all'] },
88436 { key: 'where', values: ['visible', 'all'] }
88439 var options = container.selectAll('.issues-option')
88440 .data(data, function(d) { return d.key; });
88442 var optionsEnter = options.enter()
88444 .attr('class', function(d) { return 'issues-option issues-option-' + d.key; });
88448 .attr('class', 'issues-option-title')
88449 .text(function(d) { return t('issues.options.' + d.key + '.title'); });
88451 var valuesEnter = optionsEnter.selectAll('label')
88452 .data(function(d) {
88453 return d.values.map(function(val) { return { value: val, key: d.key }; });
88460 .attr('type', 'radio')
88461 .attr('name', function(d) { return 'issues-option-' + d.key; })
88462 .attr('value', function(d) { return d.value; })
88463 .property('checked', function(d) { return _options[d.key] === d.value; })
88464 .on('change', function(d) { updateOptionValue(d.key, d.value); });
88468 .text(function(d) { return t('issues.options.' + d.key + '.' + d.value); });
88472 function renderNoIssuesBox(selection) {
88474 var box = selection.append('div')
88475 .attr('class', 'box');
88479 .call(svgIcon('#iD-icon-apply', 'pre-text'));
88481 var noIssuesMessage = box
88486 .attr('class', 'message');
88493 .attr('class', 'details');
88496 function renderIgnoredIssuesReset(selection) {
88498 var ignoredIssues = context.validator()
88499 .getIssues(Object.assign({ includeIgnored: 'only' }, _options));
88501 var resetIgnored = selection.selectAll('.reset-ignored')
88502 .data(ignoredIssues.length ? [0] : []);
88505 resetIgnored.exit()
88509 var resetIgnoredEnter = resetIgnored.enter()
88511 .attr('class', 'reset-ignored section-footer');
88515 .attr('href', '#');
88518 resetIgnored = resetIgnored
88519 .merge(resetIgnoredEnter);
88521 resetIgnored.select('a')
88522 .text(t('issues.reset_ignored', { count: ignoredIssues.length.toString() }));
88524 resetIgnored.on('click', function() {
88525 context.validator().resetIgnoredIssues();
88530 function renderRulesList(selection) {
88531 var container = selection.selectAll('.issues-rulelist-container')
88534 var containerEnter = container.enter()
88536 .attr('class', 'issues-rulelist-container');
88540 .attr('class', 'layer-list issue-rules-list');
88542 var ruleLinks = containerEnter
88544 .attr('class', 'issue-rules-links section-footer');
88548 .attr('class', 'issue-rules-link')
88550 .text(t('issues.enable_all'))
88551 .on('click', function() {
88552 context.validator().disableRules([]);
88557 .attr('class', 'issue-rules-link')
88559 .text(t('issues.disable_all'))
88560 .on('click', function() {
88561 var keys = context.validator().getRuleKeys();
88562 context.validator().disableRules(keys);
88567 container = container
88568 .merge(containerEnter);
88570 _rulesList = container.selectAll('.issue-rules-list');
88576 function updateRulesList() {
88577 var ruleKeys = context.validator().getRuleKeys();
88579 .call(drawListItems, ruleKeys, 'checkbox', 'rule', toggleRule, isRuleEnabled);
88583 function isRuleEnabled(d) {
88584 return context.validator().isRuleEnabled(d);
88588 function toggleRule(d) {
88589 context.validator().toggleRule(d);
88592 function setNoIssuesText() {
88594 function checkForHiddenIssues(cases) {
88595 for (var type in cases) {
88596 var opts = cases[type];
88597 var hiddenIssues = context.validator().getIssues(opts);
88598 if (hiddenIssues.length) {
88599 _pane.select('.issues-none .details')
88601 'issues.no_issues.hidden_issues.' + type,
88602 { count: hiddenIssues.length.toString() }
88607 _pane.select('.issues-none .details')
88608 .text(t('issues.no_issues.hidden_issues.none'));
88613 if (_options.what === 'edited' && _options.where === 'visible') {
88615 messageType = 'edits_in_view';
88617 checkForHiddenIssues({
88618 elsewhere: { what: 'edited', where: 'all' },
88619 other_features: { what: 'all', where: 'visible' },
88620 disabled_rules: { what: 'edited', where: 'visible', includeDisabledRules: 'only' },
88621 other_features_elsewhere: { what: 'all', where: 'all' },
88622 disabled_rules_elsewhere: { what: 'edited', where: 'all', includeDisabledRules: 'only' },
88623 ignored_issues: { what: 'edited', where: 'visible', includeIgnored: 'only' },
88624 ignored_issues_elsewhere: { what: 'edited', where: 'all', includeIgnored: 'only' }
88627 } else if (_options.what === 'edited' && _options.where === 'all') {
88629 messageType = 'edits';
88631 checkForHiddenIssues({
88632 other_features: { what: 'all', where: 'all' },
88633 disabled_rules: { what: 'edited', where: 'all', includeDisabledRules: 'only' },
88634 ignored_issues: { what: 'edited', where: 'all', includeIgnored: 'only' }
88637 } else if (_options.what === 'all' && _options.where === 'visible') {
88639 messageType = 'everything_in_view';
88641 checkForHiddenIssues({
88642 elsewhere: { what: 'all', where: 'all' },
88643 disabled_rules: { what: 'all', where: 'visible', includeDisabledRules: 'only' },
88644 disabled_rules_elsewhere: { what: 'all', where: 'all', includeDisabledRules: 'only' },
88645 ignored_issues: { what: 'all', where: 'visible', includeIgnored: 'only' },
88646 ignored_issues_elsewhere: { what: 'all', where: 'all', includeIgnored: 'only' }
88648 } else if (_options.what === 'all' && _options.where === 'all') {
88650 messageType = 'everything';
88652 checkForHiddenIssues({
88653 disabled_rules: { what: 'all', where: 'all', includeDisabledRules: 'only' },
88654 ignored_issues: { what: 'all', where: 'all', includeIgnored: 'only' }
88658 _pane.select('.issues-none .message')
88659 .text(t('issues.no_issues.message.' + messageType));
88664 function update() {
88665 var issuesBySeverity = context.validator().getIssuesBySeverity(_options);
88667 // sort issues by distance away from the center of the map
88668 var center = context.map().center();
88669 var graph = context.graph();
88670 _errors = issuesBySeverity.error.map(withDistance).sort(byDistance);
88671 _warnings = issuesBySeverity.warning.map(withDistance).sort(byDistance);
88674 var errorCount = _errors.length > 1000 ? '1000+' : String(_errors.length);
88675 var warningCount = _warnings.length > 1000 ? '1000+' : String(_warnings.length);
88676 _errors = _errors.slice(0, 1000);
88677 _warnings = _warnings.slice(0, 1000);
88680 _toggleButton.selectAll('.notification-badge')
88681 .classed('error', (_errors.length > 0))
88682 .classed('warning', (_errors.length === 0 && _warnings.length > 0))
88683 .classed('hide', (_errors.length === 0 && _warnings.length === 0));
88686 _pane.selectAll('.issues-errors')
88687 .classed('hide', _errors.length === 0);
88689 if (_errors.length > 0) {
88690 _pane.selectAll('.hide-toggle-issues_errors .hide-toggle-text')
88691 .text(t('issues.errors.list_title', { count: errorCount }));
88692 if (!_pane.select('.disclosure-wrap-issues_errors').classed('hide')) {
88694 .call(drawIssuesList, 'errors', _errors);
88698 _pane.selectAll('.issues-warnings')
88699 .classed('hide', _warnings.length === 0);
88701 if (_warnings.length > 0) {
88702 _pane.selectAll('.hide-toggle-issues_warnings .hide-toggle-text')
88703 .text(t('issues.warnings.list_title', { count: warningCount }));
88704 if (!_pane.select('.disclosure-wrap-issues_warnings').classed('hide')) {
88706 .call(drawIssuesList, 'warnings', _warnings);
88710 var hasIssues = _warnings.length > 0 || _errors.length > 0;
88712 var issuesNone = _pane.select('.issues-none');
88713 issuesNone.classed('hide', hasIssues);
88715 renderIgnoredIssuesReset(issuesNone);
88719 if (!_pane.select('.disclosure-wrap-issues_rules').classed('hide')) {
88724 function byDistance(a, b) {
88725 return a.dist - b.dist;
88728 function withDistance(issue) {
88729 var extent = issue.extent(graph);
88730 var dist = extent ? geoSphericalDistance(center, extent.center()) : 0;
88731 return Object.assign(issue, { dist: dist });
88736 function drawListItems(selection, data, type, name, change, active) {
88737 var items = selection.selectAll('li')
88745 var enter = items.enter()
88748 if (name === 'rule') {
88751 .title(function(d) { return t('issues.' + d + '.tip'); })
88761 .attr('type', type)
88762 .attr('name', name)
88763 .on('change', change);
88767 .html(function(d) {
88769 if (d === 'unsquare_way') {
88770 params.val = '<span class="square-degrees"></span>';
88772 return t('issues.' + d + '.title', params);
88780 .classed('active', active)
88781 .selectAll('input')
88782 .property('checked', active)
88783 .property('indeterminate', false);
88786 // user-configurable square threshold
88787 var degStr = context.storage('validate-square-degrees');
88788 if (degStr === null) {
88789 degStr = '' + DEFAULTSQUARE;
88792 var span = items.selectAll('.square-degrees');
88793 var input = span.selectAll('.square-degrees-input')
88799 .attr('type', 'number')
88800 .attr('min', '' + MINSQUARE)
88801 .attr('max', '' + MAXSQUARE)
88802 .attr('step', '0.5')
88803 .attr('class', 'square-degrees-input')
88805 .on('input', function() {
88806 this.style.width = (this.value.length + 2.5) + 'ch'; // resize
88808 .on('click', function () {
88809 event.preventDefault();
88810 event.stopPropagation();
88813 .on('keyup', function () {
88814 if (event.keyCode === 13) { // enter
88819 .on('blur', changeSquare)
88821 .property('value', degStr)
88822 .style('width', (degStr.length + 2.5) + 'ch'); // resize
88826 function changeSquare() {
88827 var input = d3_select(this);
88828 var degStr = utilGetSetValue(input).trim();
88829 var degNum = parseFloat(degStr, 10);
88831 if (!isFinite(degNum)) {
88832 degNum = DEFAULTSQUARE;
88833 } else if (degNum > MAXSQUARE) {
88834 degNum = MAXSQUARE;
88835 } else if (degNum < MINSQUARE) {
88836 degNum = MINSQUARE;
88839 degNum = Math.round(degNum * 10 ) / 10; // round to 1 decimal
88840 degStr = '' + degNum;
88843 .property('value', degStr)
88844 .style('width', (degStr.length + 2.5) + 'ch'); // resize
88846 context.storage('validate-square-degrees', degStr);
88847 context.validator().changeSquareThreshold(degNum);
88851 function hidePane() {
88852 context.ui().togglePanes();
88857 var paneTooltip = tooltip()
88858 .placement((textDirection === 'rtl') ? 'right' : 'left')
88860 .title(uiTooltipHtml(t('issues.title'), key));
88864 uiIssues.togglePane = function() {
88865 if (event) event.preventDefault();
88866 paneTooltip.hide(_toggleButton);
88867 context.ui().togglePanes(!_pane.classed('shown') ? _pane : undefined);
88871 uiIssues.renderToggleButton = function(selection) {
88872 _toggleButton = selection
88874 .attr('tabindex', -1)
88875 .on('click', uiIssues.togglePane)
88876 .call(svgIcon('#iD-icon-alert', 'light'))
88877 .call(addNotificationBadge)
88878 .call(paneTooltip);
88882 uiIssues.renderPane = function(selection) {
88885 .attr('class', 'fillL map-pane issues-pane hide')
88886 .attr('pane', 'map-issues');
88888 var heading = _pane
88890 .attr('class', 'pane-heading');
88894 .text(t('issues.title'));
88898 .on('click', hidePane)
88899 .call(svgIcon('#iD-icon-close'));
88901 var content = _pane
88903 .attr('class', 'pane-content');
88907 .attr('class', 'issues-options')
88908 .call(renderIssuesOptions);
88912 .attr('class', 'issues-none')
88913 .call(renderNoIssuesBox);
88918 .attr('class', 'issues-errors')
88919 .call(uiDisclosure(context, 'issues_errors', true)
88920 .content(renderErrorsList)
88926 .attr('class', 'issues-warnings')
88927 .call(uiDisclosure(context, 'issues_warnings', true)
88928 .content(renderWarningsList)
88934 .attr('class', 'issues-rules')
88935 .call(uiDisclosure(context, 'issues_rules', false)
88936 .title(t('issues.rules.title'))
88937 .content(renderRulesList)
88942 context.keybinding()
88943 .on(key, uiIssues.togglePane);
88949 function uiSettingsCustomData(context) {
88950 var dispatch$1 = dispatch('change');
88952 function render(selection) {
88953 var dataLayer = context.layers().layer('data');
88955 // keep separate copies of original and current settings
88956 var _origSettings = {
88957 fileList: (dataLayer && dataLayer.fileList()) || null,
88958 url: context.storage('settings-custom-data-url')
88960 var _currSettings = {
88961 fileList: (dataLayer && dataLayer.fileList()) || null,
88962 url: context.storage('settings-custom-data-url')
88965 // var example = 'https://{switch:a,b,c}.tile.openstreetmap.org/{zoom}/{x}/{y}.png';
88966 var modal = uiConfirm(selection).okButton();
88969 .classed('settings-modal settings-custom-data', true);
88971 modal.select('.modal-section.header')
88973 .text(t('settings.custom_data.header'));
88976 var textSection = modal.select('.modal-section.message-text');
88980 .attr('class', 'instructions-file')
88981 .text(t('settings.custom_data.file.instructions'));
88985 .attr('class', 'field-file')
88986 .attr('type', 'file')
88987 .property('files', _currSettings.fileList) // works for all except IE11
88988 .on('change', function() {
88989 var files = event.target.files;
88990 if (files && files.length) {
88991 _currSettings.url = '';
88992 textSection.select('.field-url').property('value', '');
88993 _currSettings.fileList = files;
88995 _currSettings.fileList = null;
89001 .text(t('settings.custom_data.or'));
89005 .attr('class', 'instructions-url')
89006 .text(t('settings.custom_data.url.instructions'));
89009 .append('textarea')
89010 .attr('class', 'field-url')
89011 .attr('placeholder', t('settings.custom_data.url.placeholder'))
89013 .property('value', _currSettings.url);
89016 // insert a cancel button
89017 var buttonSection = modal.select('.modal-section.buttons');
89020 .insert('button', '.ok-button')
89021 .attr('class', 'button cancel-button secondary-action')
89022 .text(t('confirm.cancel'));
89025 buttonSection.select('.cancel-button')
89026 .on('click.cancel', clickCancel);
89028 buttonSection.select('.ok-button')
89029 .attr('disabled', isSaveDisabled)
89030 .on('click.save', clickSave);
89033 function isSaveDisabled() {
89038 // restore the original url
89039 function clickCancel() {
89040 textSection.select('.field-url').property('value', _origSettings.url);
89041 context.storage('settings-custom-data-url', _origSettings.url);
89046 // accept the current url
89047 function clickSave() {
89048 _currSettings.url = textSection.select('.field-url').property('value').trim();
89050 // one or the other but not both
89051 if (_currSettings.url) { _currSettings.fileList = null; }
89052 if (_currSettings.fileList) { _currSettings.url = ''; }
89054 context.storage('settings-custom-data-url', _currSettings.url);
89057 dispatch$1.call('change', this, _currSettings);
89061 return utilRebind(render, dispatch$1, 'on');
89064 function uiMapData(context) {
89065 var key = t('map_data.key');
89066 var osmDataToggleKey = uiCmd('⌥' + t('area_fill.wireframe.key'));
89067 var features = context.features().keys();
89068 var layers = context.layers();
89069 var fills = ['wireframe', 'partial', 'full'];
89071 var settingsCustomData = uiSettingsCustomData(context)
89072 .on('change', customChanged);
89074 var _pane = d3_select(null), _toggleButton = d3_select(null);
89076 var _fillSelected = context.storage('area-fill') || 'partial';
89077 var _dataLayerContainer = d3_select(null);
89078 var _photoOverlayContainer = d3_select(null);
89079 var _fillList = d3_select(null);
89080 var _featureList = d3_select(null);
89081 var _QAList = d3_select(null);
89084 function showsFeature(d) {
89085 return context.features().enabled(d);
89089 function autoHiddenFeature(d) {
89090 if (d.type === 'kr_error') return context.errors().autoHidden(d);
89091 return context.features().autoHidden(d);
89095 function clickFeature(d) {
89096 context.features().toggle(d);
89101 function showsQA(d) {
89103 var QALayers = layers.all().filter(function(obj) { return QAKeys.indexOf(obj.id) !== -1; });
89104 var data = QALayers.filter(function(obj) { return obj.layer.supported(); });
89106 function layerSupported(d) {
89107 return d.layer && d.layer.supported();
89109 function layerEnabled(d) {
89110 return layerSupported(d) && d.layer.enabled();
89113 return layerEnabled(data[0]);
89117 function showsFill(d) {
89118 return _fillSelected === d;
89122 function setFill(d) {
89123 fills.forEach(function(opt) {
89124 context.surface().classed('fill-' + opt, Boolean(opt === d));
89128 context.storage('area-fill', d);
89129 if (d !== 'wireframe') {
89130 context.storage('area-fill-toggle', d);
89136 function showsLayer(which) {
89137 var layer = layers.layer(which);
89139 return layer.enabled();
89145 function setLayer(which, enabled) {
89146 var layer = layers.layer(which);
89148 layer.enabled(enabled);
89150 if (!enabled && (which === 'osm' || which === 'notes')) {
89151 context.enter(modeBrowse(context));
89159 function toggleLayer(which) {
89160 setLayer(which, !showsLayer(which));
89164 function drawPhotoItems(selection) {
89165 var photoKeys = context.photos().overlayLayerIDs();
89166 var photoLayers = layers.all().filter(function(obj) { return photoKeys.indexOf(obj.id) !== -1; });
89167 var data = photoLayers.filter(function(obj) { return obj.layer.supported(); });
89169 function layerSupported(d) {
89170 return d.layer && d.layer.supported();
89172 function layerEnabled(d) {
89173 return layerSupported(d) && d.layer.enabled();
89177 .selectAll('.layer-list-photos')
89182 .attr('class', 'layer-list layer-list-photos')
89185 var li = ul.selectAll('.list-item-photos')
89191 var liEnter = li.enter()
89193 .attr('class', function(d) {
89194 var classes = 'list-item-photos list-item-' + d.id;
89195 if (d.id === 'mapillary-signs') {
89196 classes += ' indented';
89201 var labelEnter = liEnter
89203 .each(function(d) {
89205 if (d.id === 'mapillary-signs') titleID = 'mapillary.signs.tooltip';
89206 else if (d.id === 'mapillary') titleID = 'mapillary_images.tooltip';
89207 else if (d.id === 'openstreetcam') titleID = 'openstreetcam_images.tooltip';
89208 else titleID = d.id.replace('-', '_') + '.tooltip';
89218 .attr('type', 'checkbox')
89219 .on('change', function(d) { toggleLayer(d.id); });
89223 .text(function(d) {
89225 if (id === 'mapillary-signs') id = 'photo_overlays.traffic_signs';
89226 return t(id.replace('-', '_') + '.title');
89233 .classed('active', layerEnabled)
89234 .selectAll('input')
89235 .property('checked', layerEnabled);
89238 function drawPhotoTypeItems(selection) {
89239 var data = context.photos().allPhotoTypes();
89241 function typeEnabled(d) {
89242 return context.photos().showsPhotoType(d);
89246 .selectAll('.layer-list-photo-types')
89247 .data(context.photos().shouldFilterByPhotoType() ? [0] : []);
89254 .attr('class', 'layer-list layer-list-photo-types')
89257 var li = ul.selectAll('.list-item-photo-types')
89263 var liEnter = li.enter()
89265 .attr('class', function(d) {
89266 return 'list-item-photo-types list-item-' + d;
89269 var labelEnter = liEnter
89271 .each(function(d) {
89274 .title(t('photo_overlays.photo_type.' + d + '.tooltip'))
89281 .attr('type', 'checkbox')
89282 .on('change', function(d) {
89283 context.photos().togglePhotoType(d);
89289 .text(function(d) {
89290 return t('photo_overlays.photo_type.' + d + '.title');
89297 .classed('active', typeEnabled)
89298 .selectAll('input')
89299 .property('checked', typeEnabled);
89303 function drawOsmItems(selection) {
89304 var osmKeys = ['osm', 'notes'];
89305 var osmLayers = layers.all().filter(function(obj) { return osmKeys.indexOf(obj.id) !== -1; });
89308 .selectAll('.layer-list-osm')
89313 .attr('class', 'layer-list layer-list-osm')
89316 var li = ul.selectAll('.list-item')
89322 var liEnter = li.enter()
89324 .attr('class', function(d) { return 'list-item list-item-' + d.id; });
89326 var labelEnter = liEnter
89328 .each(function(d) {
89329 if (d.id === 'osm') {
89333 .title(uiTooltipHtml(t('map_data.layers.' + d.id + '.tooltip'), osmDataToggleKey))
89334 .placement('bottom')
89339 .title(t('map_data.layers.' + d.id + '.tooltip'))
89340 .placement('bottom')
89347 .attr('type', 'checkbox')
89348 .on('change', function(d) { toggleLayer(d.id); });
89352 .text(function(d) { return t('map_data.layers.' + d.id + '.title'); });
89358 .classed('active', function (d) { return d.layer.enabled(); })
89359 .selectAll('input')
89360 .property('checked', function (d) { return d.layer.enabled(); });
89364 function drawQAItems(selection) {
89365 var qaKeys = ['keepRight', 'improveOSM'];
89366 var qaLayers = layers.all().filter(function(obj) { return qaKeys.indexOf(obj.id) !== -1; });
89369 .selectAll('.layer-list-qa')
89374 .attr('class', 'layer-list layer-list-qa')
89377 var li = ul.selectAll('.list-item')
89383 var liEnter = li.enter()
89385 .attr('class', function(d) { return 'list-item list-item-' + d.id; });
89387 var labelEnter = liEnter
89389 .each(function(d) {
89392 .title(t('map_data.layers.' + d.id + '.tooltip'))
89393 .placement('bottom')
89399 .attr('type', 'checkbox')
89400 .on('change', function(d) { toggleLayer(d.id); });
89404 .text(function(d) { return t('map_data.layers.' + d.id + '.title'); });
89410 .classed('active', function (d) { return d.layer.enabled(); })
89411 .selectAll('input')
89412 .property('checked', function (d) { return d.layer.enabled(); });
89416 // Beta feature - sample vector layers to support Detroit Mapping Challenge
89417 // https://github.com/osmus/detroit-mapping-challenge
89418 function drawVectorItems(selection) {
89419 var dataLayer = layers.layer('data');
89422 name: 'Detroit Neighborhoods/Parks',
89423 src: 'neighborhoods-parks',
89424 tooltip: 'Neighborhood boundaries and parks as compiled by City of Detroit in concert with community groups.',
89425 template: 'https://{switch:a,b,c,d}.tiles.mapbox.com/v4/jonahadkins.cjksmur6x34562qp9iv1u3ksf-54hev,jonahadkins.cjksmqxdx33jj2wp90xd9x2md-4e5y2/{z}/{x}/{y}.vector.pbf?access_token=pk.eyJ1Ijoiam9uYWhhZGtpbnMiLCJhIjoiRlVVVkx3VSJ9.9sdVEK_B_VkEXPjssU5MqA'
89427 name: 'Detroit Composite POIs',
89428 src: 'composite-poi',
89429 tooltip: 'Fire Inspections, Business Licenses, and other public location data collated from the City of Detroit.',
89430 template: 'https://{switch:a,b,c,d}.tiles.mapbox.com/v4/jonahadkins.cjksmm6a02sli31myxhsr7zf3-2sw8h/{z}/{x}/{y}.vector.pbf?access_token=pk.eyJ1Ijoiam9uYWhhZGtpbnMiLCJhIjoiRlVVVkx3VSJ9.9sdVEK_B_VkEXPjssU5MqA'
89432 name: 'Detroit All-The-Places POIs',
89433 src: 'alltheplaces-poi',
89434 tooltip: 'Public domain business location data created by web scrapers.',
89435 template: 'https://{switch:a,b,c,d}.tiles.mapbox.com/v4/jonahadkins.cjksmswgk340g2vo06p1w9w0j-8fjjc/{z}/{x}/{y}.vector.pbf?access_token=pk.eyJ1Ijoiam9uYWhhZGtpbnMiLCJhIjoiRlVVVkx3VSJ9.9sdVEK_B_VkEXPjssU5MqA'
89439 // Only show this if the map is around Detroit..
89440 var detroit = geoExtent([-83.5, 42.1], [-82.8, 42.5]);
89441 var showVectorItems = (context.map().zoom() > 9 && detroit.contains(context.map().center()));
89443 var container = selection.selectAll('.vectortile-container')
89444 .data(showVectorItems ? [0] : []);
89449 var containerEnter = container.enter()
89451 .attr('class', 'vectortile-container');
89455 .attr('class', 'vectortile-header')
89456 .text('Detroit Vector Tiles (Beta)');
89460 .attr('class', 'layer-list layer-list-vectortile');
89464 .attr('class', 'vectortile-footer')
89466 .attr('target', '_blank')
89467 .attr('tabindex', -1)
89468 .call(svgIcon('#iD-icon-out-link', 'inline'))
89469 .attr('href', 'https://github.com/osmus/detroit-mapping-challenge')
89471 .text('About these layers');
89473 container = container
89474 .merge(containerEnter);
89477 var ul = container.selectAll('.layer-list-vectortile');
89479 var li = ul.selectAll('.list-item')
89485 var liEnter = li.enter()
89487 .attr('class', function(d) { return 'list-item list-item-' + d.src; });
89489 var labelEnter = liEnter
89491 .each(function(d) {
89492 d3_select(this).call(
89493 tooltip().title(d.tooltip).placement('top')
89499 .attr('type', 'radio')
89500 .attr('name', 'vectortile')
89501 .on('change', selectVTLayer);
89505 .text(function(d) { return d.name; });
89510 .classed('active', isVTLayerSelected)
89511 .selectAll('input')
89512 .property('checked', isVTLayerSelected);
89515 function isVTLayerSelected(d) {
89516 return dataLayer && dataLayer.template() === d.template;
89519 function selectVTLayer(d) {
89520 context.storage('settings-custom-data-url', d.template);
89522 dataLayer.template(d.template, d.src);
89523 dataLayer.enabled(true);
89529 function drawCustomDataItems(selection) {
89530 var dataLayer = layers.layer('data');
89531 var hasData = dataLayer && dataLayer.hasData();
89532 var showsData = hasData && dataLayer.enabled();
89535 .selectAll('.layer-list-data')
89536 .data(dataLayer ? [0] : []);
89543 var ulEnter = ul.enter()
89545 .attr('class', 'layer-list layer-list-data');
89547 var liEnter = ulEnter
89549 .attr('class', 'list-item-data');
89554 .title(t('settings.custom_data.tooltip'))
89555 .placement((textDirection === 'rtl') ? 'right' : 'left')
89557 .on('click', editCustom)
89558 .call(svgIcon('#iD-icon-more'));
89563 .title(t('map_data.layers.custom.zoom'))
89564 .placement((textDirection === 'rtl') ? 'right' : 'left')
89566 .on('click', function() {
89567 event.preventDefault();
89568 event.stopPropagation();
89569 dataLayer.fitZoom();
89571 .call(svgIcon('#iD-icon-search'));
89573 var labelEnter = liEnter
89576 .title(t('map_data.layers.custom.tooltip'))
89582 .attr('type', 'checkbox')
89583 .on('change', function() { toggleLayer('data'); });
89587 .text(t('map_data.layers.custom.title'));
89593 ul.selectAll('.list-item-data')
89594 .classed('active', showsData)
89595 .selectAll('label')
89596 .classed('deemphasize', !hasData)
89597 .selectAll('input')
89598 .property('disabled', !hasData)
89599 .property('checked', showsData);
89603 function editCustom() {
89604 event.preventDefault();
89605 context.container()
89606 .call(settingsCustomData);
89610 function customChanged(d) {
89611 var dataLayer = layers.layer('data');
89614 dataLayer.url(d.url);
89615 } else if (d && d.fileList) {
89616 dataLayer.fileList(d.fileList);
89621 function drawListItems(selection, data, type, name, change, active) {
89622 var items = selection.selectAll('li')
89630 var enter = items.enter()
89634 .title(function(d) {
89635 var tip = t(name + '.' + d + '.tooltip');
89636 var key = (d === 'wireframe' ? t('area_fill.wireframe.key') : null);
89637 if ((name === 'feature' || name === 'keepRight') && autoHiddenFeature(d)) {
89638 var msg = showsLayer('osm') ? t('map_data.autohidden') : t('map_data.osmhidden');
89639 tip += '<div>' + msg + '</div>';
89641 return uiTooltipHtml(tip, key);
89651 .attr('type', type)
89652 .attr('name', name)
89653 .on('change', change);
89657 .text(function(d) { return t(name + '.' + d + '.description'); });
89664 .classed('active', active)
89665 .selectAll('input')
89666 .property('checked', active)
89667 .property('indeterminate', function(d) {
89668 return ((name === 'feature' || name === 'keepRight') && autoHiddenFeature(d));
89673 function renderDataLayers(selection) {
89674 var container = selection.selectAll('.data-layer-container')
89677 _dataLayerContainer = container.enter()
89679 .attr('class', 'data-layer-container')
89682 updateDataLayers();
89685 function renderPhotoOverlays(selection) {
89686 var container = selection.selectAll('.photo-overlay-container')
89689 _photoOverlayContainer = container.enter()
89691 .attr('class', 'photo-overlay-container')
89694 updatePhotoOverlays();
89698 function renderFillList(selection) {
89699 var container = selection.selectAll('.layer-fill-list')
89702 _fillList = container.enter()
89704 .attr('class', 'layer-list layer-fill-list')
89711 function renderFeatureList(selection) {
89712 var container = selection.selectAll('.layer-feature-list-container')
89715 var containerEnter = container.enter()
89717 .attr('class', 'layer-feature-list-container');
89721 .attr('class', 'layer-list layer-feature-list');
89723 var footer = containerEnter
89725 .attr('class', 'feature-list-links section-footer');
89729 .attr('class', 'feature-list-link')
89731 .text(t('issues.enable_all'))
89732 .on('click', function() {
89733 context.features().enableAll();
89738 .attr('class', 'feature-list-link')
89740 .text(t('issues.disable_all'))
89741 .on('click', function() {
89742 context.features().disableAll();
89746 container = container
89747 .merge(containerEnter);
89749 _featureList = container.selectAll('.layer-feature-list');
89751 updateFeatureList();
89754 function updatePhotoOverlays() {
89755 _photoOverlayContainer
89756 .call(drawPhotoItems)
89757 .call(drawPhotoTypeItems);
89760 function updateDataLayers() {
89761 _dataLayerContainer
89762 .call(drawOsmItems)
89764 .call(drawCustomDataItems)
89765 .call(drawVectorItems); // Beta - Detroit mapping challenge
89768 function updateFillList() {
89770 .call(drawListItems, fills, 'radio', 'area_fill', setFill, showsFill);
89773 function updateFeatureList() {
89775 .call(drawListItems, features, 'checkbox', 'feature', clickFeature, showsFeature);
89778 function update() {
89780 if (!_pane.select('.disclosure-wrap-data_layers').classed('hide')) {
89781 updateDataLayers();
89783 if (!_pane.select('.disclosure-wrap-photo_overlays').classed('hide')) {
89784 updatePhotoOverlays();
89786 if (!_pane.select('.disclosure-wrap-fill_area').classed('hide')) {
89789 if (!_pane.select('.disclosure-wrap-map_features').classed('hide')) {
89790 updateFeatureList();
89794 .call(drawListItems, ['keep-right'], 'checkbox', 'QA', function(d) { toggleLayer(d); }, showsQA);
89798 function toggleWireframe() {
89800 event.preventDefault();
89801 event.stopPropagation();
89804 if (_fillSelected === 'wireframe') {
89805 _fillSelected = context.storage('area-fill-toggle') || 'partial';
89807 _fillSelected = 'wireframe';
89810 setFill(_fillSelected);
89811 context.map().pan([0,0]); // trigger a redraw
89814 var paneTooltip = tooltip()
89815 .placement((textDirection === 'rtl') ? 'right' : 'left')
89817 .title(uiTooltipHtml(t('map_data.description'), key));
89819 function hidePane() {
89820 context.ui().togglePanes();
89823 uiMapData.togglePane = function() {
89824 if (event) event.preventDefault();
89825 paneTooltip.hide(_toggleButton);
89826 context.ui().togglePanes(!_pane.classed('shown') ? _pane : undefined);
89829 uiMapData.renderToggleButton = function(selection) {
89831 _toggleButton = selection
89833 .attr('tabindex', -1)
89834 .on('click', uiMapData.togglePane)
89835 .call(svgIcon('#iD-icon-data', 'light'))
89836 .call(paneTooltip);
89840 uiMapData.renderPane = function(selection) {
89844 .attr('class', 'fillL map-pane map-data-pane hide')
89845 .attr('pane', 'map-data');
89847 var heading = _pane
89849 .attr('class', 'pane-heading');
89853 .text(t('map_data.title'));
89857 .on('click', hidePane)
89858 .call(svgIcon('#iD-icon-close'));
89861 var content = _pane
89863 .attr('class', 'pane-content');
89869 .attr('class', 'map-data-data-layers')
89870 .call(uiDisclosure(context, 'data_layers', true)
89871 .title(t('map_data.data_layers'))
89872 .content(renderDataLayers)
89878 .attr('class', 'map-data-photo-overlays')
89879 .call(uiDisclosure(context, 'photo_overlays', false)
89880 .title(t('photo_overlays.title'))
89881 .content(renderPhotoOverlays)
89887 .attr('class', 'map-data-area-fills')
89888 .call(uiDisclosure(context, 'fill_area', false)
89889 .title(t('map_data.fill_area'))
89890 .content(renderFillList)
89896 .attr('class', 'map-data-feature-filters')
89897 .call(uiDisclosure(context, 'map_features', false)
89898 .title(t('map_data.map_features'))
89899 .content(renderFeatureList)
89905 .on('change.map_data-update', update);
89908 setFill(_fillSelected);
89910 context.keybinding()
89911 .on(key, uiMapData.togglePane)
89912 .on(t('area_fill.wireframe.key'), toggleWireframe)
89913 .on(osmDataToggleKey, function() {
89914 event.preventDefault();
89915 event.stopPropagation();
89916 toggleLayer('osm');
89923 function uiNotice(context) {
89925 return function(selection) {
89926 var div = selection
89928 .attr('class', 'notice');
89932 .attr('class', 'zoom-to notice fillD')
89933 .on('click', function() {
89934 context.map().zoomEase(context.minEditableZoom());
89936 .on('wheel', function() { // let wheel events pass through #4482
89937 var e2 = new WheelEvent(event.type, event);
89938 context.surface().node().dispatchEvent(e2);
89942 .call(svgIcon('#iD-icon-plus', 'pre-text'))
89944 .attr('class', 'label')
89945 .text(t('zoom_in_edit'));
89948 function disableTooHigh() {
89949 var canEdit = context.map().zoom() >= context.minEditableZoom();
89950 div.style('display', canEdit ? 'none' : 'block');
89954 .on('move.notice', debounce(disableTooHigh, 500));
89960 function uiPhotoviewer(context) {
89962 var dispatch$1 = dispatch('resize');
89964 function photoviewer(selection) {
89967 .attr('class', 'thumb-hide')
89968 .on('click', function () {
89969 if (services$1.streetside) { services$1.streetside.hideViewer(); }
89970 if (services$1.mapillary) { services$1.mapillary.hideViewer(); }
89971 if (services$1.openstreetcam) { services$1.openstreetcam.hideViewer(); }
89974 .call(svgIcon('#iD-icon-close'));
89978 .attr('class', 'resize-handle-xy')
89981 buildResizeListener(selection, 'resize', dispatch$1, { resizeOnX: true, resizeOnY: true })
89986 .attr('class', 'resize-handle-x')
89989 buildResizeListener(selection, 'resize', dispatch$1, { resizeOnX: true })
89994 .attr('class', 'resize-handle-y')
89997 buildResizeListener(selection, 'resize', dispatch$1, { resizeOnY: true })
90000 services$1.streetside.loadViewer(context);
90001 services$1.mapillary.loadViewer(context);
90002 services$1.openstreetcam.loadViewer(context);
90004 function buildResizeListener(target, eventName, dispatch, options) {
90005 var resizeOnX = !!options.resizeOnX;
90006 var resizeOnY = !!options.resizeOnY;
90007 var minHeight = options.minHeight || 240;
90008 var minWidth = options.minWidth || 320;
90014 function startResize() {
90015 var mapSize = context.map().dimensions();
90018 var maxWidth = mapSize[0];
90019 var newWidth = clamp((startWidth + event.clientX - startX), minWidth, maxWidth);
90020 target.style('width', newWidth + 'px');
90024 var maxHeight = mapSize[1] - 90; // preserve space at top/bottom of map
90025 var newHeight = clamp((startHeight + startY - event.clientY), minHeight, maxHeight);
90026 target.style('height', newHeight + 'px');
90029 dispatch.call(eventName, target, utilGetDimensions(target, true));
90032 function clamp(num, min, max) {
90033 return Math.max(min, Math.min(num, max));
90036 function stopResize() {
90038 .on('.' + eventName, null);
90041 return function initResize() {
90042 startX = event.clientX;
90043 startY = event.clientY;
90044 startWidth = target.node().getBoundingClientRect().width;
90045 startHeight = target.node().getBoundingClientRect().height;
90048 .on('mousemove.' + eventName, startResize, false)
90049 .on('mouseup.' + eventName, stopResize, false);
90054 photoviewer.onMapResize = function() {
90055 var photoviewer = d3_select('#photoviewer');
90056 var content = d3_select('#content');
90057 var mapDimensions = utilGetDimensions(content, true);
90058 // shrink photo viewer if it is too big
90059 // (-90 preserves space at top and bottom of map used by menus)
90060 var photoDimensions = utilGetDimensions(photoviewer, true);
90061 if (photoDimensions[0] > mapDimensions[0] || photoDimensions[1] > (mapDimensions[1] - 90)) {
90062 var setPhotoDimensions = [
90063 Math.min(photoDimensions[0], mapDimensions[0]),
90064 Math.min(photoDimensions[1], mapDimensions[1] - 90),
90068 .style('width', setPhotoDimensions[0] + 'px')
90069 .style('height', setPhotoDimensions[1] + 'px');
90071 dispatch$1.call('resize', photoviewer, setPhotoDimensions);
90075 return utilRebind(photoviewer, dispatch$1, 'on');
90078 function uiRestore(context) {
90080 return function(selection) {
90081 if (!context.history().lock() || !context.history().restorableChanges())
90084 var modalSelection = uiModal(selection, true);
90086 modalSelection.select('.modal')
90087 .attr('class', 'modal fillL');
90089 var introModal = modalSelection.select('.content');
90093 .attr('class', 'modal-section')
90095 .text(t('restore.heading'));
90099 .attr('class','modal-section')
90101 .text(t('restore.description'));
90103 var buttonWrap = introModal
90105 .attr('class', 'modal-actions');
90107 var restore = buttonWrap
90109 .attr('class', 'restore')
90110 .on('click', function() {
90111 context.history().restore();
90112 modalSelection.remove();
90117 .attr('class', 'logo logo-restore')
90119 .attr('xlink:href', '#iD-logo-restore');
90123 .text(t('restore.restore'));
90125 var reset = buttonWrap
90127 .attr('class', 'reset')
90128 .on('click', function() {
90129 context.history().clearSaved();
90130 modalSelection.remove();
90135 .attr('class', 'logo logo-reset')
90137 .attr('xlink:href', '#iD-logo-reset');
90141 .text(t('restore.reset'));
90143 restore.node().focus();
90147 function uiScale(context) {
90148 var projection = context.projection,
90149 isImperial = (utilDetect().locale.toLowerCase() === 'en-us'),
90154 function scaleDefs(loc1, loc2) {
90155 var lat = (loc2[1] + loc1[1]) / 2,
90156 conversion = (isImperial ? 3.28084 : 1),
90157 dist = geoLonToMeters(loc2[0] - loc1[0], lat) * conversion,
90158 scale = { dist: 0, px: 0, text: '' },
90159 buckets, i, val, dLon;
90162 buckets = [5280000, 528000, 52800, 5280, 500, 50, 5, 1];
90164 buckets = [5000000, 500000, 50000, 5000, 500, 50, 5, 1];
90167 // determine a user-friendly endpoint for the scale
90168 for (i = 0; i < buckets.length; i++) {
90171 scale.dist = Math.floor(dist / val) * val;
90174 scale.dist = +dist.toFixed(2);
90178 dLon = geoMetersToLon(scale.dist / conversion, lat);
90179 scale.px = Math.round(projection([loc1[0] + dLon, loc1[1]])[0]);
90181 scale.text = displayLength(scale.dist / conversion, isImperial);
90187 function update(selection) {
90188 // choose loc1, loc2 along bottom of viewport (near where the scale will be drawn)
90189 var dims = context.map().dimensions(),
90190 loc1 = projection.invert([0, dims[1]]),
90191 loc2 = projection.invert([maxLength, dims[1]]),
90192 scale = scaleDefs(loc1, loc2);
90194 selection.select('#scale-path')
90195 .attr('d', 'M0.5,0.5v' + tickHeight + 'h' + scale.px + 'v-' + tickHeight);
90197 selection.select('#scale-textgroup')
90198 .attr('transform', 'translate(' + (scale.px + 8) + ',' + tickHeight + ')');
90200 selection.select('#scale-text')
90205 return function(selection) {
90206 function switchUnits() {
90207 isImperial = !isImperial;
90208 selection.call(update);
90211 var scalegroup = selection.append('svg')
90212 .attr('id', 'scale')
90213 .on('click', switchUnits)
90215 .attr('transform', 'translate(10,11)');
90219 .attr('id', 'scale-path');
90223 .attr('id', 'scale-textgroup')
90225 .attr('id', 'scale-text');
90227 selection.call(update);
90229 context.map().on('move.scale', function() {
90235 var pair_1 = pair$1;
90237 function search(x, dims, r) {
90238 if (!dims) dims = 'NSEW';
90239 if (typeof x !== 'string') return { val: null, regex: r };
90241 r = r || /[\s\,]*([NSEW])?\s*([\-|\—|\―]?[0-9.]+)°?\s*(?:([0-9.]+)['’′‘]\s*)?(?:([0-9.]+)(?:''|"|”|″)\s*)?([NSEW])?/gi;
90244 if (!m) return { val: null, regex: r };
90246 var dim = m[1] || m[5];
90247 if (dim && dims.indexOf(dim) === -1) return { val: null, regex: r };
90250 val: (((m[2]) ? parseFloat(m[2]) : 0) +
90251 ((m[3] ? parseFloat(m[3]) / 60 : 0)) +
90252 ((m[4] ? parseFloat(m[4]) / 3600 : 0))) *
90253 ((dim === 'S' || dim === 'W') ? -1 : 1),
90260 function pair$1(x, dims) {
90262 var one = search(x, dims);
90263 if (one.val === null) return null;
90264 var two = search(x, dims, one.regex);
90265 if (two.val === null) return null;
90266 // null if one/two are not contiguous.
90267 if (one.raw + two.raw !== x) return null;
90269 return swapdim(one.val, two.val, one.dim);
90271 return [one.val, two.val];
90275 function swapdim(a, b, dim) {
90276 if (dim === 'N' || dim === 'S') return [a, b];
90277 if (dim === 'W' || dim === 'E') return [b, a];
90280 function uiFeatureList(context) {
90281 var _geocodeResults;
90284 function featureList(selection) {
90285 var header = selection
90287 .attr('class', 'header fillL cf');
90291 .text(t('inspector.feature_list'));
90293 var searchWrap = selection
90295 .attr('class', 'search-header');
90297 var search = searchWrap
90299 .attr('placeholder', t('inspector.search'))
90300 .attr('type', 'search')
90302 .on('keypress', keypress)
90303 .on('keydown', keydown)
90304 .on('input', inputevent);
90307 .call(svgIcon('#iD-icon-search', 'pre-text'));
90309 var listWrap = selection
90311 .attr('class', 'inspector-body');
90313 var list = listWrap
90315 .attr('class', 'feature-list cf');
90318 .on('exit.feature-list', clearSearch);
90320 .on('drawn.feature-list', mapDrawn);
90322 context.keybinding()
90323 .on(uiCmd('⌘F'), focusSearch);
90326 function focusSearch() {
90327 var mode = context.mode() && context.mode().id;
90328 if (mode !== 'browse') return;
90330 event.preventDefault();
90331 search.node().focus();
90335 function keydown() {
90336 if (event.keyCode === 27) { // escape
90337 search.node().blur();
90342 function keypress() {
90343 var q = search.property('value'),
90344 items = list.selectAll('.feature-list-item');
90345 if (event.keyCode === 13 && q.length && items.size()) { // return
90346 click(items.datum());
90351 function inputevent() {
90352 _geocodeResults = undefined;
90357 function clearSearch() {
90358 search.property('value', '');
90363 function mapDrawn(e) {
90370 function features() {
90373 var graph = context.graph();
90374 var q = search.property('value').toLowerCase();
90376 if (!q) return result;
90378 var idMatch = q.match(/^([nwr])([0-9]+)$/);
90383 geometry: idMatch[1] === 'n' ? 'point' : idMatch[1] === 'w' ? 'line' : 'relation',
90384 type: idMatch[1] === 'n' ? t('inspector.node') : idMatch[1] === 'w' ? t('inspector.way') : t('inspector.relation'),
90389 var locationMatch = pair_1(q.toUpperCase()) || q.match(/^(-?\d+\.?\d*)\s+(-?\d+\.?\d*)$/);
90391 if (locationMatch) {
90392 var loc = [parseFloat(locationMatch[0]), parseFloat(locationMatch[1])];
90396 type: t('inspector.location'),
90397 name: dmsCoordinatePair([loc[1], loc[0]]),
90402 function addEntity(entity) {
90403 if (entity.id in entities || result.length > 200)
90406 entities[entity.id] = true;
90408 var name = utilDisplayName(entity) || '';
90409 if (name.toLowerCase().indexOf(q) >= 0) {
90410 var matched = context.presets().match(entity, graph);
90411 var type = (matched && matched.name()) || utilDisplayType(entity.id);
90416 geometry: context.geometry(entity.id),
90422 graph.parentRelations(entity).forEach(function(parent) {
90427 var visible = context.surface().selectAll('.point, .line, .area').nodes();
90428 for (var i = 0; i < visible.length && result.length <= 200; i++) {
90429 var datum = visible[i].__data__;
90430 var entity = datum && datum.properties && datum.properties.entity;
90431 if (entity) { addEntity(entity); }
90434 (_geocodeResults || []).forEach(function(d) {
90435 if (d.osm_type && d.osm_id) { // some results may be missing these - #1890
90437 // Make a temporary osmEntity so we can preset match
90438 // and better localize the search result - #4725
90439 var id = osmEntity.id.fromOSM(d.osm_type, d.osm_id);
90441 tags[d.class] = d.type;
90443 var attrs = { id: id, type: d.osm_type, tags: tags };
90444 if (d.osm_type === 'way') { // for ways, add some fake closed nodes
90445 attrs.nodes = ['a','a']; // so that geometry area is possible
90448 var tempEntity = osmEntity(attrs);
90449 var tempGraph = coreGraph([tempEntity]);
90450 var matched = context.presets().match(tempEntity, tempGraph);
90451 var type = (matched && matched.name()) || utilDisplayType(id);
90455 geometry: tempEntity.geometry(tempGraph),
90457 name: d.display_name,
90458 extent: new geoExtent(
90459 [parseFloat(d.boundingbox[3]), parseFloat(d.boundingbox[0])],
90460 [parseFloat(d.boundingbox[2]), parseFloat(d.boundingbox[1])])
90469 function drawList() {
90470 var value = search.property('value');
90471 var results = features();
90473 list.classed('filtered', value.length);
90475 var noResultsWorldwide = _geocodeResults && _geocodeResults.length === 0;
90477 var resultsIndicator = list.selectAll('.no-results-item')
90481 .property('disabled', true)
90482 .attr('class', 'no-results-item')
90483 .call(svgIcon('#iD-icon-alert', 'pre-text'));
90485 resultsIndicator.append('span')
90486 .attr('class', 'entity-name');
90488 list.selectAll('.no-results-item .entity-name')
90489 .text(noResultsWorldwide ? t('geocoder.no_results_worldwide') : t('geocoder.no_results_visible'));
90491 if (services$1.geocoder) {
90492 list.selectAll('.geocode-item')
90496 .attr('class', 'geocode-item')
90497 .on('click', geocoderSearch)
90499 .attr('class', 'label')
90501 .attr('class', 'entity-name')
90502 .text(t('geocoder.search'));
90505 list.selectAll('.no-results-item')
90506 .style('display', (value.length && !results.length) ? 'block' : 'none');
90508 list.selectAll('.geocode-item')
90509 .style('display', (value && _geocodeResults === undefined) ? 'block' : 'none');
90511 list.selectAll('.feature-list-item')
90515 var items = list.selectAll('.feature-list-item')
90516 .data(results, function(d) { return d.id; });
90518 var enter = items.enter()
90519 .insert('button', '.geocode-item')
90520 .attr('class', 'feature-list-item')
90521 .on('mouseover', mouseover)
90522 .on('mouseout', mouseout)
90523 .on('click', click);
90527 .attr('class', 'label');
90530 .each(function(d) {
90532 .call(svgIcon('#iD-icon-' + d.geometry, 'pre-text'));
90537 .attr('class', 'entity-type')
90538 .text(function(d) { return d.type; });
90542 .attr('class', 'entity-name')
90543 .text(function(d) { return d.name; });
90546 .style('opacity', 0)
90548 .style('opacity', 1);
90557 function mouseover(d) {
90558 if (d.id === -1) return;
90560 context.surface().selectAll(utilEntityOrMemberSelector([d.id], context.graph()))
90561 .classed('hover', true);
90565 function mouseout() {
90566 context.surface().selectAll('.hover')
90567 .classed('hover', false);
90571 function click(d) {
90572 event.preventDefault();
90574 context.map().centerZoomEase([d.location[1], d.location[0]], 19);
90576 else if (d.entity) {
90577 if (d.entity.type === 'node') {
90578 context.map().center(d.entity.loc);
90579 } else if (d.entity.type === 'way') {
90580 var center = context.projection(context.map().center());
90581 var edge = geoChooseEdge(context.childNodes(d.entity), center, context.projection);
90582 context.map().center(edge.loc);
90584 context.enter(modeSelect(context, [d.entity.id]));
90586 context.zoomToEntity(d.id);
90591 function geocoderSearch() {
90592 services$1.geocoder.search(search.property('value'), function (err, resp) {
90593 _geocodeResults = resp || [];
90600 return featureList;
90603 function uiPresetFavoriteButton(preset, geom, context, klass) {
90605 geom = context.presets().fallback(geom).id;
90607 var presetFavorite = {};
90609 var _button = d3_select(null);
90612 presetFavorite.button = function(selection) {
90614 _button = selection.selectAll('.preset-favorite-button')
90617 _button.exit().remove();
90619 _button = _button.enter()
90620 .insert('button', '.tag-reference-button')
90621 .attr('class', 'preset-favorite-button ' + klass)
90622 .attr('title', t('icons.favorite'))
90623 .attr('tabindex', -1)
90624 .call(svgIcon('#iD-icon-favorite'))
90628 .on('click', function () {
90629 event.stopPropagation();
90630 event.preventDefault();
90632 context.presets().toggleFavorite(preset, geom);
90640 function update() {
90642 .classed('active', context.presets().favoriteMatching(preset, geom));
90645 context.presets().on('favoritePreset.button-' + preset.id.replace(/[^a-zA-Z\d:]/g, '-') + '-' + geom, update);
90647 return presetFavorite;
90650 function uiPresetIcon(context) {
90651 var preset, geometry, sizeClass = 'medium';
90653 function isSmall() {
90654 return sizeClass === 'small';
90658 function presetIcon(selection) {
90659 selection.each(render);
90663 function getIcon(p, geom) {
90664 if (isSmall() && p.isFallback && p.isFallback())
90665 return 'iD-icon-' + p.id;
90668 else if (geom === 'line')
90669 return 'iD-other-line';
90670 else if (geom === 'vertex')
90671 return p.isFallback() ? '' : 'temaki-vertex';
90672 else if (isSmall() && geom === 'point')
90675 return 'maki-marker-stroked';
90678 function renderPointBorder(enter) {
90679 var w = 40, h = 40;
90682 .attr('class', 'preset-icon-fill preset-icon-point-border')
90685 .attr('viewBox', '0 0 ' + w + ' ' + h);
90687 enter.append('path')
90688 .attr('transform', 'translate(11.5, 8)')
90689 .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');
90692 function renderCircleFill(fillEnter) {
90693 var w = 60, h = 60, d = 40;
90694 fillEnter = fillEnter
90696 .attr('class', 'preset-icon-fill preset-icon-fill-vertex')
90699 .attr('viewBox', '0 0 ' + w + ' ' + h);
90701 fillEnter.append('circle')
90707 function renderSquareFill(fillEnter) {
90708 var d = isSmall() ? 40 : 60;
90709 var w = d, h = d, l = d*2/3, c1 = (w-l)/2, c2 = c1 + l;
90710 fillEnter = fillEnter
90712 .attr('class', 'preset-icon-fill preset-icon-fill-area')
90715 .attr('viewBox', '0 0 ' + w + ' ' + h);
90717 var data = 'M' + c1 + ' ' + c1 + ' L' + c1 + ' ' + c2 + ' L' + c2 + ' ' + c2 + ' L' + c2 + ' ' + c1 + ' Z';
90719 fillEnter.append('path')
90721 .attr('class', 'line area fill');
90723 fillEnter.append('path')
90725 .attr('class', 'line area stroke');
90728 var coordinates = [c1, c2];
90729 for (var xIndex in coordinates) {
90730 for (var yIndex in coordinates) {
90731 fillEnter.append('circle')
90732 .attr('class', 'vertex')
90733 .attr('cx', coordinates[xIndex])
90734 .attr('cy', coordinates[yIndex])
90740 var midCoordinates = [[c1, w/2], [c2, w/2], [h/2, c1], [h/2, c2]];
90741 for (var index in midCoordinates) {
90742 var loc = midCoordinates[index];
90743 fillEnter.append('circle')
90744 .attr('class', 'midpoint')
90745 .attr('cx', loc[0])
90746 .attr('cy', loc[1])
90753 function renderLine(lineEnter) {
90754 var d = isSmall() ? 40 : 60;
90755 // draw the line parametrically
90756 var w = d, h = d, y = Math.round(d*0.72), l = Math.round(d*0.6), r = 2.5;
90757 var x1 = (w - l)/2, x2 = x1 + l;
90759 lineEnter = lineEnter
90761 .attr('class', 'preset-icon-line')
90764 .attr('viewBox', '0 0 ' + w + ' ' + h);
90766 ['casing', 'stroke'].forEach(function(klass) {
90767 lineEnter.append('path')
90768 .attr('d', 'M' + x1 + ' ' + y + ' L' + x2 + ' ' + y)
90769 .attr('class', 'line ' + klass);
90772 [[x1 - 1, y], [x2 + 1, y]].forEach(function(loc) {
90773 lineEnter.append('circle')
90774 .attr('class', 'vertex')
90775 .attr('cx', loc[0])
90776 .attr('cy', loc[1])
90781 function renderRoute(routeEnter) {
90782 var d = isSmall() ? 40 : 60;
90783 // draw the route parametrically
90786 y1 = Math.round(d*0.80),
90787 y2 = Math.round(d*0.68),
90788 l = Math.round(d*0.6),
90790 var x1 = (w - l)/2, x2 = x1 + l/3, x3 = x2 + l/3, x4 = x3 + l/3;
90792 routeEnter = routeEnter
90794 .attr('class', 'preset-icon-route')
90797 .attr('viewBox', '0 0 ' + w + ' ' + h);
90799 ['casing', 'stroke'].forEach(function(klass) {
90800 routeEnter.append('path')
90801 .attr('d', 'M' + x1 + ' ' + y1 + ' L' + x2 + ' ' + y2)
90802 .attr('class', 'segment0 line ' + klass);
90803 routeEnter.append('path')
90804 .attr('d', 'M' + x2 + ' ' + y2 + ' L' + x3 + ' ' + y1)
90805 .attr('class', 'segment1 line ' + klass);
90806 routeEnter.append('path')
90807 .attr('d', 'M' + x3 + ' ' + y1 + ' L' + x4 + ' ' + y2)
90808 .attr('class', 'segment2 line ' + klass);
90811 [[x1, y1], [x2, y2], [x3, y1], [x4, y2]].forEach(function(loc) {
90812 routeEnter.append('circle')
90813 .attr('class', 'vertex')
90814 .attr('cx', loc[0])
90815 .attr('cy', loc[1])
90820 var routeSegements = {
90821 bicycle: ['highway/cycleway', 'highway/cycleway', 'highway/cycleway'],
90822 bus: ['highway/unclassified', 'highway/secondary', 'highway/primary'],
90823 detour: ['highway/tertiary', 'highway/residential', 'highway/unclassified'],
90824 ferry: ['route/ferry', 'route/ferry', 'route/ferry'],
90825 foot: ['highway/footway', 'highway/footway', 'highway/footway'],
90826 hiking: ['highway/path', 'highway/path', 'highway/path'],
90827 horse: ['highway/bridleway', 'highway/bridleway', 'highway/bridleway'],
90828 light_rail: ['railway/light_rail', 'railway/light_rail', 'railway/light_rail'],
90829 monorail: ['railway/monorail', 'railway/monorail', 'railway/monorail'],
90830 pipeline: ['man_made/pipeline', 'man_made/pipeline', 'man_made/pipeline'],
90831 piste: ['piste/downhill', 'piste/hike', 'piste/nordic'],
90832 power: ['power/line', 'power/line', 'power/line'],
90833 road: ['highway/secondary', 'highway/primary', 'highway/trunk'],
90834 subway: ['railway/subway', 'railway/subway', 'railway/subway'],
90835 train: ['railway/rail', 'railway/rail', 'railway/rail'],
90836 tram: ['railway/tram', 'railway/tram', 'railway/tram'],
90837 waterway: ['waterway/stream', 'waterway/stream', 'waterway/stream']
90840 function render() {
90842 var p = preset.apply(this, arguments);
90843 var isFallback = isSmall() && p.isFallback && p.isFallback();
90844 var geom = geometry ? geometry.apply(this, arguments) : null;
90845 if (geom === 'relation' && p.tags && ((p.tags.type === 'route' && p.tags.route && routeSegements[p.tags.route]) || p.tags.type === 'waterway')) {
90848 var imageURL = p.imageURL;
90849 var picon = imageURL ? null : getIcon(p, geom);
90850 var isMaki = picon && /^maki-/.test(picon);
90851 var isTemaki = picon && /^temaki-/.test(picon);
90852 var isFa = picon && /^fa[srb]-/.test(picon);
90853 var isTnp = picon && /^tnp-/.test(picon);
90854 var isiDIcon = picon && !(isMaki || isTemaki || isFa || isTnp);
90855 var isCategory = !p.setTags;
90856 var drawPoint = picon && geom === 'point' && isSmall() && !isFallback;
90857 var drawVertex = picon !== null && geom === 'vertex' && (!isSmall() || !isFallback);
90858 var drawLine = picon && geom === 'line' && !isFallback && !isCategory;
90859 var drawArea = picon && geom === 'area' && !isFallback;
90860 var drawRoute = picon && geom === 'route';
90861 var isFramed = (drawVertex || drawArea || drawLine || drawRoute);
90863 var tags = !isCategory ? p.setTags({}, geom) : {};
90864 for (var k in tags) {
90865 if (tags[k] === '*') {
90869 var tagClasses = svgTagClasses().getClassesString(tags, '');
90871 var selection = d3_select(this);
90873 var container = selection.selectAll('.preset-icon-container')
90876 container = container.enter()
90878 .attr('class', 'preset-icon-container ' + sizeClass)
90881 container.classed('fallback', isFallback);
90883 var imageIcon = container.selectAll('img.image-icon')
90884 .data(imageURL ? [0] : []);
90889 imageIcon = imageIcon.enter()
90891 .attr('class', 'image-icon')
90895 .attr('src', imageURL);
90897 var pointBorder = container.selectAll('.preset-icon-point-border')
90898 .data(drawPoint ? [0] : []);
90903 var pointBorderEnter = pointBorder.enter();
90904 renderPointBorder(pointBorderEnter);
90905 pointBorder = pointBorderEnter.merge(pointBorder);
90908 var vertexFill = container.selectAll('.preset-icon-fill-vertex')
90909 .data(drawVertex ? [0] : []);
90914 var vertexFillEnter = vertexFill.enter();
90915 renderCircleFill(vertexFillEnter);
90916 vertexFill = vertexFillEnter.merge(vertexFill);
90919 var fill = container.selectAll('.preset-icon-fill-area')
90920 .data(drawArea ? [0] : []);
90925 var fillEnter = fill.enter();
90926 renderSquareFill(fillEnter);
90927 fill = fillEnter.merge(fill);
90929 fill.selectAll('path.stroke')
90930 .attr('class', 'area stroke ' + tagClasses);
90931 fill.selectAll('path.fill')
90932 .attr('class', 'area fill ' + tagClasses);
90935 var line = container.selectAll('.preset-icon-line')
90936 .data(drawLine ? [0] : []);
90941 var lineEnter = line.enter();
90942 renderLine(lineEnter);
90944 line = lineEnter.merge(line);
90946 line.selectAll('path.stroke')
90947 .attr('class', 'line stroke ' + tagClasses);
90948 line.selectAll('path.casing')
90949 .attr('class', 'line casing ' + tagClasses);
90951 var route = container.selectAll('.preset-icon-route')
90952 .data(drawRoute ? [0] : []);
90957 var routeEnter = route.enter();
90958 renderRoute(routeEnter);
90960 route = routeEnter.merge(route);
90963 var routeType = p.tags.type === 'waterway' ? 'waterway' : p.tags.route;
90964 var segmentPresetIDs = routeSegements[routeType];
90965 for (var segmentIndex in segmentPresetIDs) {
90966 var segmentPreset = context.presets().item(segmentPresetIDs[segmentIndex]);
90967 var segmentTagClasses = svgTagClasses().getClassesString(segmentPreset.tags, '');
90968 route.selectAll('path.stroke.segment' + segmentIndex)
90969 .attr('class', 'segment' + segmentIndex + ' line stroke ' + segmentTagClasses);
90970 route.selectAll('path.casing.segment' + segmentIndex)
90971 .attr('class', 'segment' + segmentIndex + ' line casing ' + segmentTagClasses);
90977 var icon = container.selectAll('.preset-icon')
90978 .data(picon ? [0] : []);
90983 icon = icon.enter()
90985 .attr('class', 'preset-icon')
90990 .attr('class', 'preset-icon ' + (geom ? geom + '-geom' : ''))
90991 .classed('framed', isFramed)
90992 .classed('preset-icon-iD', isiDIcon);
90994 icon.selectAll('svg')
90995 .attr('class', function() {
90996 return 'icon ' + picon + ' ' + (!isiDIcon && geom !== 'line' ? '' : tagClasses);
90999 icon.selectAll('use')
91000 .attr('href', '#' + picon + (isMaki ? (isSmall() && geom === 'point' ? '-11' : '-15') : ''));
91005 presetIcon.preset = function(val) {
91006 if (!arguments.length) return preset;
91007 preset = utilFunctor(val);
91012 presetIcon.geometry = function(val) {
91013 if (!arguments.length) return geometry;
91014 geometry = utilFunctor(val);
91019 presetIcon.sizeClass = function(val) {
91020 if (!arguments.length) return sizeClass;
91028 function uiRawMemberEditor(context) {
91029 var taginfo = services$1.taginfo;
91031 var _contentSelection = d3_select(null);
91032 var _maxMembers = 1000;
91034 function downloadMember(d) {
91035 event.preventDefault();
91037 // display the loading indicator
91038 d3_select(this.parentNode).classed('tag-reference-loading', true);
91039 context.loadEntity(d.id, function() {
91040 updateDisclosureContent(_contentSelection);
91044 function zoomToMember(d) {
91045 event.preventDefault();
91047 var entity = context.entity(d.id);
91048 context.map().zoomTo(entity);
91050 // highlight the feature in case it wasn't previously on-screen
91051 utilHighlightEntities([d.id], true, context);
91055 function selectMember(d) {
91056 event.preventDefault();
91058 // remove the hover-highlight styling
91059 utilHighlightEntities([d.id], false, context);
91061 var entity = context.entity(d.id);
91062 var mapExtent = context.map().extent();
91063 if (!entity.intersects(mapExtent, context.graph())) {
91064 // zoom to the entity if its extent is not visible now
91065 context.map().zoomToEase(entity);
91068 context.enter(modeSelect(context, [d.id]));
91072 function changeRole(d) {
91073 var oldRole = d.role;
91074 var newRole = d3_select(this).property('value');
91076 if (oldRole !== newRole) {
91077 var member = { id: d.id, type: d.type, role: newRole };
91079 actionChangeMember(d.relation.id, member, d.index),
91080 t('operations.change_role.annotation')
91086 function deleteMember(d) {
91088 // remove the hover-highlight styling
91089 utilHighlightEntities([d.id], false, context);
91092 actionDeleteMember(d.relation.id, d.index),
91093 t('operations.delete_member.annotation')
91096 if (!context.hasEntity(d.relation.id)) {
91097 context.enter(modeBrowse(context));
91101 function updateDisclosureContent(selection) {
91102 _contentSelection = selection;
91104 var memberships = [];
91105 var entity = context.entity(_entityID);
91106 entity.members.slice(0, _maxMembers).forEach(function(member, index) {
91113 member: context.hasEntity(member.id)
91117 var list = selection.selectAll('.member-list')
91120 list = list.enter()
91122 .attr('class', 'member-list')
91126 var items = list.selectAll('li')
91127 .data(memberships, function(d) {
91128 return osmEntity.key(d.relation) + ',' + d.index + ',' +
91129 (d.member ? osmEntity.key(d.member) : 'incomplete');
91136 var itemsEnter = items.enter()
91138 .attr('class', 'member-row form-field')
91139 .classed('member-incomplete', function(d) { return !d.member; });
91142 .each(function(d) {
91143 var item = d3_select(this);
91147 .attr('class', 'field-label');
91150 // highlight the member feature in the map while hovering on the list item
91152 .on('mouseover', function() {
91153 utilHighlightEntities([d.id], true, context);
91155 .on('mouseout', function() {
91156 utilHighlightEntities([d.id], false, context);
91159 var labelLink = label
91161 .attr('class', 'label-text')
91164 .on('click', selectMember);
91168 .attr('class', 'member-entity-type')
91169 .text(function(d) {
91170 var matched = context.presets().match(d.member, context.graph());
91171 return (matched && matched.name()) || utilDisplayType(d.member.id);
91176 .attr('class', 'member-entity-name')
91177 .text(function(d) { return utilDisplayName(d.member); });
91181 .attr('class', 'member-zoom')
91182 .attr('title', t('icons.zoom_to'))
91183 .attr('tabindex', -1)
91184 .call(svgIcon('#iD-icon-geolocate'))
91185 .on('click', zoomToMember);
91188 var labelText = label
91190 .attr('class', 'label-text');
91194 .attr('class', 'member-entity-type')
91195 .text(t('inspector.' + d.type, { id: d.id }));
91199 .attr('class', 'member-entity-name')
91200 .text(t('inspector.incomplete', { id: d.id }));
91204 .attr('class', 'member-download')
91205 .attr('title', t('icons.download'))
91206 .attr('tabindex', -1)
91207 .call(svgIcon('#iD-icon-load'))
91208 .on('click', downloadMember);
91212 var wrapEnter = itemsEnter
91214 .attr('class', 'form-field-input-wrap form-field-input-member');
91218 .attr('class', 'member-role')
91219 .property('type', 'text')
91220 .attr('maxlength', 255)
91221 .attr('placeholder', t('inspector.role'))
91226 .attr('tabindex', -1)
91227 .attr('title', t('icons.remove'))
91228 .attr('class', 'remove form-field-button member-delete')
91229 .call(svgIcon('#iD-operation-delete'));
91232 wrapEnter.each(bindTypeahead);
91235 var dragOrigin, targetIndex;
91237 itemsEnter.call(d3_drag()
91238 .on('start', function() {
91243 targetIndex = null;
91245 .on('drag', function(d, index) {
91246 var x = event.x - dragOrigin.x,
91247 y = event.y - dragOrigin.y;
91249 if (!d3_select(this).classed('dragging') &&
91250 // don't display drag until dragging beyond a distance threshold
91251 Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)) <= 5) return;
91254 .classed('dragging', true);
91256 targetIndex = null;
91258 selection.selectAll('li.member-row')
91259 .style('transform', function(d2, index2) {
91260 var node = d3_select(this).node();
91261 if (index === index2) {
91262 return 'translate(' + x + 'px, ' + y + 'px)';
91263 } else if (index2 > index && event.y > node.offsetTop - node.offsetHeight) {
91264 if (targetIndex === null || index2 > targetIndex) {
91265 targetIndex = index2;
91267 return 'translateY(-100%)';
91268 } else if (index2 < index && event.y < node.offsetTop) {
91269 if (targetIndex === null || index2 < targetIndex) {
91270 targetIndex = index2;
91272 return 'translateY(100%)';
91277 .on('end', function(d, index) {
91279 if (!d3_select(this).classed('dragging')) {
91284 .classed('dragging', false);
91286 selection.selectAll('li.member-row')
91287 .style('transform', null);
91289 if (targetIndex !== null) {
91290 // dragged to a new position, reorder
91292 actionMoveMember(d.relation.id, index, targetIndex),
91293 t('operations.reorder_members.annotation')
91302 .merge(itemsEnter);
91304 items.select('input.member-role')
91305 .property('value', function(d) { return d.role; })
91306 .on('blur', changeRole)
91307 .on('change', changeRole);
91309 items.select('button.member-delete')
91310 .on('click', deleteMember);
91314 function bindTypeahead(d) {
91315 var row = d3_select(this);
91316 var role = row.selectAll('input.member-role');
91317 var origValue = role.property('value');
91319 function sort(value, data) {
91320 var sameletter = [];
91322 for (var i = 0; i < data.length; i++) {
91323 if (data[i].value.substring(0, value.length) === value) {
91324 sameletter.push(data[i]);
91326 other.push(data[i]);
91329 return sameletter.concat(other);
91332 role.call(uiCombobox(context, 'member-role')
91333 .fetcher(function(role, callback) {
91334 // The `geometry` param is used in the `taginfo.js` interface for
91335 // filtering results, as a key into the `tag_members_fractions`
91336 // object. If we don't know the geometry because the member is
91337 // not yet downloaded, it's ok to guess based on type.
91340 geometry = context.geometry(d.member.id);
91341 } else if (d.type === 'relation') {
91342 geometry = 'relation';
91343 } else if (d.type === 'way') {
91346 geometry = 'point';
91349 var rtype = entity.tags.type;
91352 rtype: rtype || '',
91353 geometry: geometry,
91355 }, function(err, data) {
91356 if (!err) callback(sort(role, data));
91359 .on('cancel', function() {
91360 role.property('value', origValue);
91366 function unbind() {
91367 var row = d3_select(this);
91369 row.selectAll('input.member-role')
91370 .call(uiCombobox.off);
91374 function rawMemberEditor(selection) {
91375 var entity = context.entity(_entityID);
91377 var gt = entity.members.length > _maxMembers ? '>' : '';
91378 selection.call(uiDisclosure(context, 'raw_member_editor', true)
91379 .title(t('inspector.all_members') + ' (' + gt + entity.members.slice(0, _maxMembers).length + ')')
91381 .updatePreference(false)
91382 .on('toggled', function(expanded) {
91384 selection.node().parentNode.scrollTop += 200;
91387 .content(updateDisclosureContent)
91391 rawMemberEditor.entityID = function(val) {
91392 if (!arguments.length) return _entityID;
91394 return rawMemberEditor;
91398 return rawMemberEditor;
91401 function uiRawMembershipEditor(context) {
91402 var taginfo = services$1.taginfo;
91403 var nearbyCombo = uiCombobox(context, 'parent-relation')
91405 .fetcher(fetchNearbyRelations);
91406 var _inChange = false;
91411 function selectRelation(d) {
91412 event.preventDefault();
91414 // remove the hover-highlight styling
91415 utilHighlightEntities([d.relation.id], false, context);
91417 context.enter(modeSelect(context, [d.relation.id]));
91421 function changeRole(d) {
91422 if (d === 0) return; // called on newrow (shoudn't happen)
91423 if (_inChange) return; // avoid accidental recursive call #5731
91425 var oldRole = d.member.role;
91426 var newRole = d3_select(this).property('value');
91428 if (oldRole !== newRole) {
91431 actionChangeMember(d.relation.id, Object.assign({}, d.member, { role: newRole }), d.index),
91432 t('operations.change_role.annotation')
91439 function addMembership(d, role) {
91440 this.blur(); // avoid keeping focus on the button
91441 _showBlank = false;
91443 var member = { id: _entityID, type: context.entity(_entityID).type, role: role };
91447 actionAddMember(d.relation.id, member),
91448 t('operations.add_member.annotation')
91452 var relation = osmRelation();
91454 actionAddEntity(relation),
91455 actionAddMember(relation.id, member),
91456 t('operations.add.annotation.relation')
91459 context.enter(modeSelect(context, [relation.id]).newFeature(true));
91464 function deleteMembership(d) {
91465 this.blur(); // avoid keeping focus on the button
91466 if (d === 0) return; // called on newrow (shoudn't happen)
91468 // remove the hover-highlight styling
91469 utilHighlightEntities([d.relation.id], false, context);
91472 actionDeleteMember(d.relation.id, d.index),
91473 t('operations.delete_member.annotation')
91478 function fetchNearbyRelations(q, callback) {
91479 var newRelation = { relation: null, value: t('inspector.new_relation') };
91481 var graph = context.graph();
91483 context.intersects(context.extent()).forEach(function(entity) {
91484 if (entity.type !== 'relation' || entity.id === _entityID) return;
91486 var matched = context.presets().match(entity, graph);
91487 var presetName = (matched && matched.name()) || t('inspector.relation');
91488 var entityName = utilDisplayName(entity) || '';
91490 var value = presetName + ' ' + entityName;
91491 if (q && value.toLowerCase().indexOf(q.toLowerCase()) === -1) return;
91493 result.push({ relation: entity, value: value });
91496 result.sort(function(a, b) {
91497 return osmRelation.creationOrder(a.relation, b.relation);
91500 // Dedupe identical names by appending relation id - see #2891
91501 var dupeGroups = Object.values(utilArrayGroupBy(result, 'value'))
91502 .filter(function(v) { return v.length > 1; });
91504 dupeGroups.forEach(function(group) {
91505 group.forEach(function(obj) {
91506 obj.value += ' ' + obj.relation.id;
91510 result.forEach(function(obj) {
91511 obj.title = obj.value;
91514 result.unshift(newRelation);
91519 function rawMembershipEditor(selection) {
91520 var entity = context.entity(_entityID);
91521 var parents = context.graph().parentRelations(entity);
91522 var memberships = [];
91524 parents.slice(0, 1000).forEach(function(relation) {
91525 relation.members.forEach(function(member, index) {
91526 if (member.id === entity.id) {
91527 memberships.push({ relation: relation, member: member, index: index });
91532 var gt = parents.length > 1000 ? '>' : '';
91533 selection.call(uiDisclosure(context, 'raw_membership_editor', true)
91534 .title(t('inspector.all_relations') + ' (' + gt + memberships.length + ')')
91536 .updatePreference(false)
91537 .on('toggled', function(expanded) {
91538 if (expanded) { selection.node().parentNode.scrollTop += 200; }
91544 function content(selection) {
91545 var list = selection.selectAll('.member-list')
91548 list = list.enter()
91550 .attr('class', 'member-list')
91554 var items = list.selectAll('li.member-row-normal')
91555 .data(memberships, function(d) {
91556 return osmEntity.key(d.relation) + ',' + d.index;
91564 var itemsEnter = items.enter()
91566 .attr('class', 'member-row member-row-normal form-field');
91568 // highlight the relation in the map while hovering on the list item
91569 itemsEnter.on('mouseover', function(d) {
91570 utilHighlightEntities([d.relation.id], true, context);
91572 .on('mouseout', function(d) {
91573 utilHighlightEntities([d.relation.id], false, context);
91576 var labelEnter = itemsEnter
91578 .attr('class', 'field-label')
91580 .attr('class', 'label-text')
91583 .on('click', selectRelation);
91587 .attr('class', 'member-entity-type')
91588 .text(function(d) {
91589 var matched = context.presets().match(d.relation, context.graph());
91590 return (matched && matched.name()) || t('inspector.relation');
91595 .attr('class', 'member-entity-name')
91596 .text(function(d) { return utilDisplayName(d.relation); });
91598 var wrapEnter = itemsEnter
91600 .attr('class', 'form-field-input-wrap form-field-input-member');
91604 .attr('class', 'member-role')
91605 .property('type', 'text')
91606 .attr('maxlength', 255)
91607 .attr('placeholder', t('inspector.role'))
91609 .property('value', function(d) { return d.member.role; })
91610 .on('blur', changeRole)
91611 .on('change', changeRole);
91615 .attr('tabindex', -1)
91616 .attr('class', 'remove form-field-button member-delete')
91617 .call(svgIcon('#iD-operation-delete'))
91618 .on('click', deleteMembership);
91621 wrapEnter.each(bindTypeahead);
91625 var newMembership = list.selectAll('.member-row-new')
91626 .data(_showBlank ? [0] : []);
91629 newMembership.exit()
91633 var newMembershipEnter = newMembership.enter()
91635 .attr('class', 'member-row member-row-new form-field');
91639 .attr('class', 'field-label')
91641 .attr('placeholder', t('inspector.choose_relation'))
91642 .attr('type', 'text')
91643 .attr('class', 'member-entity-input')
91646 var newWrapEnter = newMembershipEnter
91648 .attr('class', 'form-field-input-wrap form-field-input-member');
91652 .attr('class', 'member-role')
91653 .property('type', 'text')
91654 .attr('maxlength', 255)
91655 .attr('placeholder', t('inspector.role'))
91660 .attr('tabindex', -1)
91661 .attr('class', 'remove form-field-button member-delete')
91662 .call(svgIcon('#iD-operation-delete'))
91663 .on('click', function() {
91664 list.selectAll('.member-row-new')
91669 newMembership = newMembership
91670 .merge(newMembershipEnter);
91672 newMembership.selectAll('.member-entity-input')
91673 .on('blur', cancelEntity) // if it wasn't accepted normally, cancel it
91675 .on('accept', acceptEntity)
91676 .on('cancel', cancelEntity)
91680 // Container for the Add button
91681 var addRow = selection.selectAll('.add-row')
91685 var addRowEnter = addRow.enter()
91687 .attr('class', 'add-row');
91689 var addRelationButton = addRowEnter
91691 .attr('class', 'add-relation');
91694 .call(svgIcon('#iD-icon-plus', 'light'));
91696 .call(tooltip().title(t('inspector.add_to_relation')).placement(textDirection === 'ltr' ? 'right' : 'left'));
91700 .attr('class', 'space-value'); // preserve space
91704 .attr('class', 'space-buttons'); // preserve space
91708 .merge(addRowEnter);
91710 addRow.select('.add-relation')
91711 .on('click', function() {
91713 content(selection);
91714 list.selectAll('.member-entity-input').node().focus();
91718 function acceptEntity(d) {
91723 var role = list.selectAll('.member-row-new .member-role').property('value');
91724 addMembership(d, role);
91728 function cancelEntity() {
91729 var input = newMembership.selectAll('.member-entity-input');
91730 input.property('value', '');
91734 function bindTypeahead(d) {
91735 var row = d3_select(this);
91736 var role = row.selectAll('input.member-role');
91737 var origValue = role.property('value');
91739 function sort(value, data) {
91740 var sameletter = [];
91742 for (var i = 0; i < data.length; i++) {
91743 if (data[i].value.substring(0, value.length) === value) {
91744 sameletter.push(data[i]);
91746 other.push(data[i]);
91749 return sameletter.concat(other);
91752 role.call(uiCombobox(context, 'member-role')
91753 .fetcher(function(role, callback) {
91754 var rtype = d.relation.tags.type;
91757 rtype: rtype || '',
91758 geometry: context.geometry(_entityID),
91760 }, function(err, data) {
91761 if (!err) callback(sort(role, data));
91764 .on('cancel', function() {
91765 role.property('value', origValue);
91771 function unbind() {
91772 var row = d3_select(this);
91774 row.selectAll('input.member-role')
91775 .call(uiCombobox.off);
91781 rawMembershipEditor.entityID = function(val) {
91782 if (!arguments.length) return _entityID;
91784 _showBlank = false;
91785 return rawMembershipEditor;
91789 return rawMembershipEditor;
91792 // This currently only works with the 'restrictions' field
91793 // It borrows some code from uiHelp
91795 function uiFieldHelp(context, fieldName) {
91796 var fieldHelp = {};
91797 var _inspector = d3_select(null);
91798 var _wrap = d3_select(null);
91799 var _body = d3_select(null);
91801 var fieldHelpKeys = {
91829 'indirect_example',
91835 var fieldHelpHeadings = {};
91837 var replacements = {
91838 distField: t('restriction.controls.distance'),
91839 viaField: t('restriction.controls.via'),
91840 fromShadow: icon('#iD-turn-shadow', 'pre-text shadow from'),
91841 allowShadow: icon('#iD-turn-shadow', 'pre-text shadow allow'),
91842 restrictShadow: icon('#iD-turn-shadow', 'pre-text shadow restrict'),
91843 onlyShadow: icon('#iD-turn-shadow', 'pre-text shadow only'),
91844 allowTurn: icon('#iD-turn-yes', 'pre-text turn'),
91845 restrictTurn: icon('#iD-turn-no', 'pre-text turn'),
91846 onlyTurn: icon('#iD-turn-only', 'pre-text turn')
91850 // For each section, squash all the texts into a single markdown document
91851 var docs = fieldHelpKeys[fieldName].map(function(key) {
91852 var helpkey = 'help.field.' + fieldName + '.' + key[0];
91853 var text = key[1].reduce(function(all, part) {
91854 var subkey = helpkey + '.' + part;
91855 var depth = fieldHelpHeadings[subkey]; // is this subkey a heading?
91856 var hhh = depth ? Array(depth + 1).join('#') + ' ' : ''; // if so, prepend with some ##'s
91857 return all + hhh + t(subkey, replacements) + '\n\n';
91862 title: t(helpkey + '.title'),
91863 html: marked(text.trim())
91872 .classed('hide', false)
91873 .style('opacity', '0')
91876 .style('opacity', '1');
91882 .classed('hide', true)
91885 .style('opacity', '0')
91886 .on('end', function () {
91887 _body.classed('hide', true);
91892 function clickHelp(index) {
91893 var d = docs[index];
91894 var tkeys = fieldHelpKeys[fieldName][index][1];
91896 _body.selectAll('.field-help-nav-item')
91897 .classed('active', function(d, i) { return i === index; });
91899 var content = _body.selectAll('.field-help-content')
91902 // class the paragraphs so we can find and style them
91903 content.selectAll('p')
91904 .attr('class', function(d, i) { return tkeys[i]; });
91906 // insert special content for certain help sections
91907 if (d.key === 'help.field.restrictions.inspecting') {
91909 .insert('img', 'p.from_shadow')
91910 .attr('class', 'field-help-image cf')
91911 .attr('src', context.imagePath('tr_inspect.gif'));
91913 } else if (d.key === 'help.field.restrictions.modifying') {
91915 .insert('img', 'p.allow_turn')
91916 .attr('class', 'field-help-image cf')
91917 .attr('src', context.imagePath('tr_modify.gif'));
91922 fieldHelp.button = function(selection) {
91923 if (_body.empty()) return;
91925 var button = selection.selectAll('.field-help-button')
91931 .attr('class', 'field-help-button')
91932 .attr('tabindex', -1)
91933 .call(svgIcon('#iD-icon-help'))
91935 .on('click', function () {
91936 event.stopPropagation();
91937 event.preventDefault();
91938 if (_body.classed('hide')) {
91947 function updatePosition() {
91948 var wrap = _wrap.node();
91949 var inspector = _inspector.node();
91950 var wRect = wrap.getBoundingClientRect();
91951 var iRect = inspector.getBoundingClientRect();
91954 .style('top', wRect.top + inspector.scrollTop - iRect.top + 'px');
91958 fieldHelp.body = function(selection) {
91959 // This control expects the field to have a form-field-input-wrap div
91960 _wrap = selection.selectAll('.form-field-input-wrap');
91961 if (_wrap.empty()) return;
91963 // absolute position relative to the inspector, so it "floats" above the fields
91964 _inspector = d3_select('#sidebar .entity-editor-pane .inspector-body');
91965 if (_inspector.empty()) return;
91967 _body = _inspector.selectAll('.field-help-body')
91970 var enter = _body.enter()
91972 .attr('class', 'field-help-body hide'); // initially hidden
91974 var titleEnter = enter
91976 .attr('class', 'field-help-title cf');
91980 .attr('class', ((textDirection === 'rtl') ? 'fr' : 'fl'))
91981 .text(t('help.field.' + fieldName + '.title'));
91985 .attr('class', 'fr close')
91986 .on('click', function() {
91987 event.stopPropagation();
91988 event.preventDefault();
91991 .call(svgIcon('#iD-icon-close'));
91993 var navEnter = enter
91995 .attr('class', 'field-help-nav cf');
91997 var titles = docs.map(function(d) { return d.title; });
91998 navEnter.selectAll('.field-help-nav-item')
92002 .attr('class', 'field-help-nav-item')
92003 .text(function(d) { return d; })
92004 .on('click', function(d, i) {
92005 event.stopPropagation();
92006 event.preventDefault();
92012 .attr('class', 'field-help-content');
92024 function uiFieldCheck(field, context) {
92025 var dispatch$1 = dispatch('change');
92026 var options = field.strings && field.strings.options;
92030 var input = d3_select(null);
92031 var text = d3_select(null);
92032 var label = d3_select(null);
92033 var reverser = d3_select(null);
92041 for (var k in options) {
92042 values.push(k === 'undefined' ? undefined : k);
92043 texts.push(field.t('options.' + k, { 'default': options[k] }));
92046 values = [undefined, 'yes'];
92047 texts = [t('inspector.unknown'), t('inspector.check.yes')];
92048 if (field.type !== 'defaultCheck') {
92050 texts.push(t('inspector.check.no'));
92055 // Checks tags to see whether an undefined value is "Assumed to be Yes"
92056 function checkImpliedYes() {
92057 _impliedYes = (field.id === 'oneway_yes');
92059 // hack: pretend `oneway` field is a `oneway_yes` field
92060 // where implied oneway tag exists (e.g. `junction=roundabout`) #2220, #1841
92061 if (field.id === 'oneway') {
92062 var entity = context.entity(_entityID);
92063 for (var key in entity.tags) {
92064 if (key in osmOneWayTags && (entity.tags[key] in osmOneWayTags[key])) {
92065 _impliedYes = true;
92066 texts[0] = t('presets.fields.oneway_yes.options.undefined');
92074 function reverserHidden() {
92075 if (!d3_select('div.inspector-hover').empty()) return true;
92076 return !(_value === 'yes' || (_impliedYes && !_value));
92080 function reverserSetText(selection) {
92081 var entity = context.hasEntity(_entityID);
92082 if (reverserHidden() || !entity) return selection;
92084 var first = entity.first();
92085 var last = entity.isClosed() ? entity.nodes[entity.nodes.length - 2] : entity.last();
92086 var pseudoDirection = first < last;
92087 var icon = pseudoDirection ? '#iD-icon-forward' : '#iD-icon-backward';
92089 selection.selectAll('.reverser-span')
92090 .text(t('inspector.check.reverser'))
92091 .call(svgIcon(icon, 'inline'));
92097 var check = function(selection) {
92100 label = selection.selectAll('.form-field-input-wrap')
92103 var enter = label.enter()
92105 .attr('class', 'form-field-input-wrap form-field-input-check');
92109 .property('indeterminate', field.type !== 'defaultCheck')
92110 .attr('type', 'checkbox')
92111 .attr('id', 'preset-input-' + field.safeid);
92116 .attr('class', 'value');
92118 if (field.type === 'onewayCheck') {
92121 .attr('id', 'preset-input-' + field.safeid + '-reverser')
92122 .attr('class', 'reverser button' + (reverserHidden() ? ' hide' : ''))
92125 .attr('class', 'reverser-span');
92128 label = label.merge(enter);
92129 input = label.selectAll('input');
92130 text = label.selectAll('span.value');
92133 .on('click', function() {
92134 event.stopPropagation();
92136 t[field.key] = values[(values.indexOf(_value) + 1) % values.length];
92138 // Don't cycle through `alternating` or `reversible` states - #4970
92139 // (They are supported as translated strings, but should not toggle with clicks)
92140 if (t[field.key] === 'reversible' || t[field.key] === 'alternating') {
92141 t[field.key] = values[0];
92144 dispatch$1.call('change', this, t);
92147 if (field.type === 'onewayCheck') {
92148 reverser = label.selectAll('.reverser');
92151 .call(reverserSetText)
92152 .on('click', function() {
92153 event.preventDefault();
92154 event.stopPropagation();
92156 actionReverse(_entityID),
92157 t('operations.reverse.annotation')
92160 .call(reverserSetText);
92166 check.entity = function(_) {
92167 if (!arguments.length) return context.hasEntity(_entityID);
92173 check.tags = function(tags) {
92175 function isChecked(val) {
92176 return val !== 'no' && val !== '' && val !== undefined && val !== null;
92179 function textFor(val) {
92180 if (val === '') val = undefined;
92181 var index = values.indexOf(val);
92182 return (index !== -1 ? texts[index] : ('"' + val + '"'));
92186 _value = tags[field.key] && tags[field.key].toLowerCase();
92188 if (field.type === 'onewayCheck' && (_value === '1' || _value === '-1')) {
92193 .property('indeterminate', field.type !== 'defaultCheck' && !_value)
92194 .property('checked', isChecked(_value));
92197 .text(textFor(_value));
92200 .classed('set', !!_value);
92202 if (field.type === 'onewayCheck') {
92204 .classed('hide', reverserHidden())
92205 .call(reverserSetText);
92210 check.focus = function() {
92211 input.node().focus();
92214 return utilRebind(check, dispatch$1, 'on');
92217 function uiFieldCombo(field, context) {
92218 var dispatch$1 = dispatch('change');
92219 var nominatim = services$1.geocoder;
92220 var taginfo = services$1.taginfo;
92221 var isMulti = (field.type === 'multiCombo');
92222 var isNetwork = (field.type === 'networkCombo');
92223 var isSemi = (field.type === 'semiCombo');
92224 var optstrings = field.strings && field.strings.options;
92225 var optarray = field.options;
92226 var snake_case = (field.snake_case || (field.snake_case === undefined));
92227 var caseSensitive = field.caseSensitive;
92228 var combobox = uiCombobox(context, 'combo-' + field.safeid)
92229 .caseSensitive(caseSensitive)
92230 .minItems(isMulti || isSemi ? 1 : 2);
92231 var container = d3_select(null);
92232 var inputWrap = d3_select(null);
92233 var input = d3_select(null);
92234 var _comboData = [];
92235 var _multiData = [];
92239 // ensure multiCombo field.key ends with a ':'
92240 if (isMulti && /[^:]$/.test(field.key)) {
92245 function snake(s) {
92246 return s.replace(/\s+/g, '_');
92249 function unsnake(s) {
92250 return s.replace(/_+/g, ' ');
92253 function clean(s) {
92254 return s.split(';')
92255 .map(function(s) { return s.trim(); })
92260 // returns the tag value for a display value
92261 // (for multiCombo, dval should be the key suffix, not the entire key)
92262 function tagValue(dval) {
92263 dval = clean(dval || '');
92266 var found = _comboData.find(function(o) {
92267 return o.key && clean(o.value) === dval;
92274 if (field.type === 'typeCombo' && !dval) {
92278 return (snake_case ? snake(dval) : dval) || undefined;
92282 // returns the display value for a tag value
92283 // (for multiCombo, tval should be the key suffix, not the entire key)
92284 function displayValue(tval) {
92288 var found = _comboData.find(function(o) {
92289 return o.key === tval && o.value;
92292 return found.value;
92296 if (field.type === 'typeCombo' && tval.toLowerCase() === 'yes') {
92300 return snake_case ? unsnake(tval) : tval;
92304 // Compute the difference between arrays of objects by `value` property
92306 // objectDifference([{value:1}, {value:2}, {value:3}], [{value:2}])
92307 // > [{value:1}, {value:3}]
92309 function objectDifference(a, b) {
92310 return a.filter(function(d1) {
92311 return !b.some(function(d2) { return d1.value === d2.value; });
92316 function initCombo(selection, attachTo) {
92318 selection.attr('readonly', 'readonly');
92319 selection.call(combobox, attachTo);
92320 setStaticValues(setPlaceholder);
92322 } else if (optarray) {
92323 selection.call(combobox, attachTo);
92324 setStaticValues(setPlaceholder);
92326 } else if (taginfo) {
92327 selection.call(combobox.fetcher(setTaginfoValues), attachTo);
92328 setTaginfoValues('', setPlaceholder);
92333 function setStaticValues(callback) {
92334 if (!(optstrings || optarray)) return;
92337 _comboData = Object.keys(optstrings).map(function(k) {
92338 var v = field.t('options.' + k, { 'default': optstrings[k] });
92346 } else if (optarray) {
92347 _comboData = optarray.map(function(k) {
92348 var v = snake_case ? unsnake(k) : k;
92357 combobox.data(objectDifference(_comboData, _multiData));
92358 if (callback) callback(_comboData);
92362 function setTaginfoValues(q, callback) {
92363 var fn = isMulti ? 'multikeys' : 'values';
92364 var query = (isMulti ? field.key : '') + q;
92365 var hasCountryPrefix = isNetwork && _country && _country.indexOf(q.toLowerCase()) === 0;
92366 if (hasCountryPrefix) {
92367 query = _country + ':';
92371 debounce: (q !== ''),
92377 params.geometry = context.geometry(_entity.id);
92380 taginfo[fn](params, function(err, data) {
92383 var deprecatedValues = osmEntity.deprecatedTagValuesByKey()[field.key];
92384 if (deprecatedValues) {
92385 // don't suggest deprecated tag values
92386 data = data.filter(function(d) {
92387 return deprecatedValues.indexOf(d.value) === -1;
92391 if (hasCountryPrefix) {
92392 data = data.filter(function(d) {
92393 return d.value.toLowerCase().indexOf(_country + ':') === 0;
92397 // hide the caret if there are no suggestions
92398 container.classed('empty-combobox', data.length === 0);
92400 _comboData = data.map(function(d) {
92402 if (isMulti) k = k.replace(field.key, '');
92403 var v = snake_case ? unsnake(k) : k;
92407 title: isMulti ? v : d.title
92411 _comboData = objectDifference(_comboData, _multiData);
92412 if (callback) callback(_comboData);
92417 function setPlaceholder(values) {
92420 if (isMulti || isSemi) {
92421 ph = field.placeholder() || t('inspector.add');
92424 .map(function(d) { return d.value; })
92425 .filter(function(s) { return s.length < 20; });
92427 var placeholders = vals.length > 1 ? vals : values.map(function(d) { return d.key; });
92428 ph = field.placeholder() || placeholders.slice(0, 3).join(', ');
92431 if (!/(…|\.\.\.)$/.test(ph)) {
92435 container.selectAll('input')
92436 .attr('placeholder', ph);
92440 function change() {
92444 if (isMulti || isSemi) {
92445 val = tagValue(utilGetSetValue(input).replace(/,/g, ';')) || '';
92446 container.classed('active', false);
92447 utilGetSetValue(input, '');
92449 var vals = val.split(';').filter(Boolean);
92450 if (!vals.length) return;
92453 utilArrayUniq(vals).forEach(function(v) {
92454 var key = field.key + v;
92456 // don't set a multicombo value to 'yes' if it already has a non-'no' value
92457 // e.g. `language:de=main`
92458 var old = _entity.tags[key] || '';
92459 if (old && old.toLowerCase() !== 'no') return;
92461 field.keys.push(key);
92465 } else if (isSemi) {
92466 var arr = _multiData.map(function(d) { return d.key; });
92467 arr = arr.concat(vals);
92468 t[field.key] = utilArrayUniq(arr).filter(Boolean).join(';');
92471 window.setTimeout(function() { input.node().focus(); }, 10);
92474 val = tagValue(utilGetSetValue(input));
92475 t[field.key] = val;
92478 dispatch$1.call('change', this, t);
92482 function removeMultikey(d) {
92483 event.stopPropagation();
92486 t[d.key] = undefined;
92487 } else if (isSemi) {
92488 var arr = _multiData.map(function(md) {
92489 return md.key === d.key ? null : md.key;
92490 }).filter(Boolean);
92492 arr = utilArrayUniq(arr);
92493 t[field.key] = arr.length ? arr.join(';') : undefined;
92495 dispatch$1.call('change', this, t);
92499 function combo(selection) {
92500 container = selection.selectAll('.form-field-input-wrap')
92503 var type = (isMulti || isSemi) ? 'multicombo': 'combo';
92504 container = container.enter()
92506 .attr('class', 'form-field-input-wrap form-field-input-' + type)
92509 if (isMulti || isSemi) {
92510 container = container.selectAll('.chiplist')
92513 var listClass = 'chiplist';
92515 // Use a separate line for each value in the Destinations field
92516 // to mimic highway exit signs
92517 if (field.id === 'destination_oneway') {
92518 listClass += ' full-line-chips';
92521 container = container.enter()
92523 .attr('class', listClass)
92524 .on('click', function() {
92525 window.setTimeout(function() { input.node().focus(); }, 10);
92530 inputWrap = container.selectAll('.input-wrap')
92533 inputWrap = inputWrap.enter()
92535 .attr('class', 'input-wrap')
92538 input = inputWrap.selectAll('input')
92541 input = container.selectAll('input')
92545 input = input.enter()
92547 .attr('type', 'text')
92548 .attr('id', 'preset-input-' + field.safeid)
92550 .call(initCombo, selection)
92553 if (isNetwork && nominatim && _entity) {
92554 var center = _entity.extent(context.graph()).center();
92555 nominatim.countryCode(center, function (err, code) {
92561 .on('change', change)
92562 .on('blur', change);
92565 .on('keydown.field', function() {
92566 switch (event.keyCode) {
92567 case 13: // ↩ Return
92568 input.node().blur(); // blurring also enters the value
92569 event.stopPropagation();
92574 if (isMulti || isSemi) {
92576 .on('accept', function() {
92577 input.node().blur();
92578 input.node().focus();
92582 .on('focus', function() { container.classed('active', true); });
92587 combo.tags = function(tags) {
92588 if (isMulti || isSemi) {
92592 // Build _multiData array containing keys already set..
92593 for (var k in tags) {
92594 if (k.indexOf(field.key) !== 0) continue;
92595 var v = (tags[k] || '').toLowerCase();
92596 if (v === '' || v === 'no') continue;
92598 var suffix = k.substring(field.key.length);
92601 value: displayValue(suffix)
92605 // Set keys for form-field modified (needed for undo and reset buttons)..
92606 field.keys = _multiData.map(function(d) { return d.key; });
92608 } else if (isSemi) {
92609 var arr = utilArrayUniq((tags[field.key] || '').split(';')).filter(Boolean);
92610 _multiData = arr.map(function(k) {
92613 value: displayValue(k)
92618 // Exclude existing multikeys from combo options..
92619 var available = objectDifference(_comboData, _multiData);
92620 combobox.data(available);
92622 // Hide 'Add' button if this field uses fixed set of
92623 // translateable optstrings and they're all currently used..
92624 container.selectAll('.combobox-input, .combobox-caret')
92625 .classed('hide', optstrings && !available.length);
92629 var chips = container.selectAll('.chips')
92635 var enter = chips.enter()
92636 .insert('li', '.input-wrap')
92637 .attr('class', 'chips');
92639 enter.append('span');
92642 chips = chips.merge(enter);
92644 chips.select('span')
92645 .text(function(d) { return d.value; });
92648 .on('click', removeMultikey)
92649 .attr('class', 'remove')
92653 utilGetSetValue(input, displayValue(tags[field.key]));
92658 combo.focus = function() {
92659 input.node().focus();
92663 combo.entity = function(val) {
92664 if (!arguments.length) return _entity;
92670 return utilRebind(combo, dispatch$1, 'on');
92673 function uiFieldText(field, context) {
92674 var dispatch$1 = dispatch('change');
92675 var nominatim = services$1.geocoder;
92676 var input = d3_select(null);
92679 function i(selection) {
92680 var preset = _entity && context.presets().match(_entity, context.graph());
92681 var isLocked = preset && preset.suggestion && field.id === 'brand';
92682 field.locked(isLocked);
92684 var wrap = selection.selectAll('.form-field-input-wrap')
92687 wrap = wrap.enter()
92689 .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
92692 var fieldID = 'preset-input-' + field.safeid;
92694 input = wrap.selectAll('input')
92697 input = input.enter()
92699 .attr('type', field.type)
92700 .attr('id', fieldID)
92701 .attr('placeholder', field.placeholder() || t('inspector.unknown'))
92702 .classed(field.type, true)
92707 .classed('disabled', !!isLocked)
92708 .attr('readonly', isLocked || null)
92709 .on('input', change(true))
92710 .on('blur', change())
92711 .on('change', change());
92714 if (field.type === 'tel' && nominatim && _entity) {
92715 var center = _entity.extent(context.graph()).center();
92716 nominatim.countryCode(center, function (err, countryCode) {
92717 if (err || !dataPhoneFormats[countryCode]) return;
92718 wrap.selectAll('#' + fieldID)
92719 .attr('placeholder', dataPhoneFormats[countryCode]);
92722 } else if (field.type === 'number') {
92723 var rtl = (textDirection === 'rtl');
92725 input.attr('type', 'text');
92727 var buttons = wrap.selectAll('.increment, .decrement')
92728 .data(rtl ? [1, -1] : [-1, 1]);
92732 .attr('tabindex', -1)
92733 .attr('class', function(d) {
92734 var which = (d === 1 ? 'increment' : 'decrement');
92735 return 'form-field-button ' + which;
92738 .on('click', function(d) {
92739 event.preventDefault();
92740 var raw_vals = input.node().value || '0';
92741 var vals = raw_vals.split(';');
92742 vals = vals.map(function(v) {
92743 var num = parseFloat(v.trim(), 10);
92744 return isFinite(num) ? clamped(num + d) : v.trim();
92746 input.node().value = vals.join(';');
92753 // clamp number to min/max
92754 function clamped(num) {
92755 if (field.minValue !== undefined) {
92756 num = Math.max(num, field.minValue);
92758 if (field.maxValue !== undefined) {
92759 num = Math.min(num, field.maxValue);
92765 function change(onInput) {
92766 return function() {
92768 var val = utilGetSetValue(input).trim() || undefined;
92771 if (field.type === 'number' && val !== undefined) {
92772 var vals = val.split(';');
92773 vals = vals.map(function(v) {
92774 var num = parseFloat(v.trim(), 10);
92775 return isFinite(num) ? clamped(num) : v.trim();
92777 val = vals.join(';');
92779 utilGetSetValue(input, val || '');
92781 t[field.key] = val;
92782 dispatch$1.call('change', this, t, onInput);
92787 i.entity = function(val) {
92788 if (!arguments.length) return _entity;
92794 i.tags = function(tags) {
92795 utilGetSetValue(input, tags[field.key] || '');
92799 i.focus = function() {
92800 var node = input.node();
92801 if (node) node.focus();
92804 return utilRebind(i, dispatch$1, 'on');
92807 function uiFieldAccess(field, context) {
92808 var dispatch$1 = dispatch('change');
92809 var items = d3_select(null);
92811 function access(selection) {
92812 var wrap = selection.selectAll('.form-field-input-wrap')
92815 wrap = wrap.enter()
92817 .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
92820 var list = wrap.selectAll('ul')
92823 list = list.enter()
92825 .attr('class', 'rows')
92829 items = list.selectAll('li')
92833 var enter = items.enter()
92835 .attr('class', function(d) { return 'labeled-input preset-access-' + d; });
92839 .attr('class', 'label preset-label-access')
92840 .attr('for', function(d) { return 'preset-input-access-' + d; })
92841 .text(function(d) { return field.t('types.' + d); });
92845 .attr('class', 'preset-input-access-wrap')
92847 .attr('type', 'text')
92848 .attr('class', function(d) { return 'preset-input-access preset-input-access-' + d; })
92850 .each(function(d) {
92852 .call(uiCombobox(context, 'access-' + d)
92853 .data(access.options(d))
92859 items = items.merge(enter);
92861 wrap.selectAll('.preset-input-access')
92862 .on('change', change)
92863 .on('blur', change);
92867 function change(d) {
92869 tag[d] = utilGetSetValue(d3_select(this)) || undefined;
92870 dispatch$1.call('change', this, tag);
92874 access.options = function(type) {
92875 var options = ['no', 'permissive', 'private', 'permit', 'destination'];
92877 if (type !== 'access') {
92878 options.unshift('yes');
92879 options.push('designated');
92881 if (type === 'bicycle') {
92882 options.push('dismount');
92886 return options.map(function(option) {
92888 title: field.t('options.' + option + '.description'),
92895 var placeholders = {
92897 foot: 'designated',
92898 motor_vehicle: 'no'
92902 motor_vehicle: 'no',
92908 motor_vehicle: 'no'
92911 motor_vehicle: 'no',
92912 bicycle: 'designated'
92915 motor_vehicle: 'no',
92916 horse: 'designated'
92920 motor_vehicle: 'no',
92926 motor_vehicle: 'yes',
92931 motor_vehicle: 'yes'
92935 motor_vehicle: 'yes',
92941 motor_vehicle: 'yes',
92947 motor_vehicle: 'yes',
92953 motor_vehicle: 'yes',
92959 motor_vehicle: 'yes',
92965 motor_vehicle: 'yes',
92971 motor_vehicle: 'yes',
92976 motor_vehicle: 'yes'
92980 motor_vehicle: 'yes',
92986 motor_vehicle: 'yes',
92992 motor_vehicle: 'yes',
92999 access.tags = function(tags) {
93000 utilGetSetValue(items.selectAll('.preset-input-access'),
93001 function(d) { return tags[d] || ''; })
93002 .attr('placeholder', function() {
93003 return tags.access ? tags.access : field.placeholder();
93006 items.selectAll('.preset-input-access-access')
93007 .attr('placeholder', 'yes');
93009 var which = tags.highway;
93010 if (!placeholders[which]) return;
93012 var keys = Object.keys(placeholders[which]);
93013 keys.forEach(function(k) {
93014 var v = placeholders[which][k];
93015 items.selectAll('.preset-input-access-' + k)
93016 .attr('placeholder', tags.access || v);
93021 access.focus = function() {
93022 items.selectAll('.preset-input-access')
93027 return utilRebind(access, dispatch$1, 'on');
93030 function uiFieldAddress(field, context) {
93031 var dispatch$1 = dispatch('init', 'change');
93032 var nominatim = services$1.geocoder;
93033 var wrap = d3_select(null);
93034 var _isInitialized = false;
93037 function getNearStreets() {
93038 var extent = _entity.extent(context.graph());
93039 var l = extent.center();
93040 var box = geoExtent(l).padByMeters(200);
93042 var streets = context.intersects(box)
93043 .filter(isAddressable)
93045 var loc = context.projection([
93046 (extent[0][0] + extent[1][0]) / 2,
93047 (extent[0][1] + extent[1][1]) / 2
93049 var choice = geoChooseEdge(context.childNodes(d), loc, context.projection);
93052 title: d.tags.name,
93053 value: d.tags.name,
93054 dist: choice.distance
93057 .sort(function(a, b) {
93058 return a.dist - b.dist;
93061 return utilArrayUniqBy(streets, 'value');
93063 function isAddressable(d) {
93064 return d.tags.highway && d.tags.name && d.type === 'way';
93069 function getNearCities() {
93070 var extent = _entity.extent(context.graph());
93071 var l = extent.center();
93072 var box = geoExtent(l).padByMeters(200);
93074 var cities = context.intersects(box)
93075 .filter(isAddressable)
93078 title: d.tags['addr:city'] || d.tags.name,
93079 value: d.tags['addr:city'] || d.tags.name,
93080 dist: geoSphericalDistance(d.extent(context.graph()).center(), l)
93083 .sort(function(a, b) {
93084 return a.dist - b.dist;
93087 return utilArrayUniqBy(cities, 'value');
93090 function isAddressable(d) {
93092 if (d.tags.admin_level === '8' && d.tags.boundary === 'administrative')
93094 if (d.tags.border_type === 'city')
93096 if (d.tags.place === 'city' || d.tags.place === 'town' || d.tags.place === 'village')
93100 if (d.tags['addr:city'])
93107 function getNearValues(key) {
93108 var extent = _entity.extent(context.graph());
93109 var l = extent.center();
93110 var box = geoExtent(l).padByMeters(200);
93112 var results = context.intersects(box)
93113 .filter(function hasTag(d) { return d.id !== _entity.id && d.tags[key]; })
93116 title: d.tags[key],
93117 value: d.tags[key],
93118 dist: geoSphericalDistance(d.extent(context.graph()).center(), l)
93121 .sort(function(a, b) {
93122 return a.dist - b.dist;
93125 return utilArrayUniqBy(results, 'value');
93129 function countryCallback(err, countryCode) {
93131 countryCode = countryCode.toLowerCase();
93134 for (var i = 0; i < dataAddressFormats.length; i++) {
93135 var format = dataAddressFormats[i];
93136 if (!format.countryCodes) {
93137 addressFormat = format; // choose the default format, keep going
93138 } else if (format.countryCodes.indexOf(countryCode) !== -1) {
93139 addressFormat = format; // choose the country format, stop here
93144 var dropdowns = addressFormat.dropdowns || [
93145 'city', 'county', 'country', 'district', 'hamlet',
93146 'neighbourhood', 'place', 'postcode', 'province',
93147 'quarter', 'state', 'street', 'subdistrict', 'suburb'
93150 var widths = addressFormat.widths || {
93151 housenumber: 1/3, street: 2/3,
93152 city: 2/3, state: 1/4, postcode: 1/3
93156 // Normalize widths.
93157 var total = r.reduce(function(sum, key) {
93158 return sum + (widths[key] || 0.5);
93161 return r.map(function(key) {
93164 width: (widths[key] || 0.5) / total
93169 wrap.selectAll('.addr-row')
93170 .data(addressFormat.format)
93173 .attr('class', 'addr-row')
93174 .selectAll('input')
93178 .property('type', 'text')
93179 .attr('placeholder', function (d) {
93180 var localkey = d.id + '!' + countryCode;
93181 var tkey = field.strings.placeholders[localkey] ? localkey : d.id;
93182 return field.t('placeholders.' + tkey);
93184 .attr('class', function (d) { return 'addr-' + d.id; })
93187 .style('width', function (d) { return d.width * 100 + '%'; });
93190 function addDropdown(d) {
93191 if (dropdowns.indexOf(d.id) === -1) return; // not a dropdown
93193 var nearValues = (d.id === 'street') ? getNearStreets
93194 : (d.id === 'city') ? getNearCities
93198 .call(uiCombobox(context, 'address-' + d.id)
93200 .caseSensitive(true)
93201 .fetcher(function(value, callback) {
93202 callback(nearValues('addr:' + d.id));
93207 wrap.selectAll('input')
93208 .on('blur', change())
93209 .on('change', change());
93211 wrap.selectAll('input:not(.combobox-input)')
93212 .on('input', change(true));
93214 dispatch$1.call('init');
93215 _isInitialized = true;
93219 function address(selection) {
93220 _isInitialized = false;
93222 wrap = selection.selectAll('.form-field-input-wrap')
93225 wrap = wrap.enter()
93227 .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
93230 if (nominatim && _entity) {
93231 var center = _entity.extent(context.graph()).center();
93232 nominatim.countryCode(center, countryCallback);
93237 function change(onInput) {
93238 return function() {
93241 wrap.selectAll('input')
93242 .each(function (field) {
93243 tags['addr:' + field.id] = this.value || undefined;
93246 dispatch$1.call('change', this, tags, onInput);
93251 function updateTags(tags) {
93252 utilGetSetValue(wrap.selectAll('input'), function (field) {
93253 return tags['addr:' + field.id] || '';
93258 address.entity = function(val) {
93259 if (!arguments.length) return _entity;
93265 address.tags = function(tags) {
93266 if (_isInitialized) {
93269 dispatch$1.on('init', function () {
93270 dispatch$1.on('init', null);
93277 address.focus = function() {
93278 var node = wrap.selectAll('input').node();
93279 if (node) node.focus();
93283 return utilRebind(address, dispatch$1, 'on');
93286 function uiFieldCycleway(field, context) {
93287 var dispatch$1 = dispatch('change');
93288 var items = d3_select(null);
93289 var wrap = d3_select(null);
93291 function cycleway(selection) {
93293 function stripcolon(s) {
93294 return s.replace(':', '');
93298 wrap = selection.selectAll('.form-field-input-wrap')
93301 wrap = wrap.enter()
93303 .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
93307 var div = wrap.selectAll('ul')
93312 .attr('class', 'rows')
93315 var keys = ['cycleway:left', 'cycleway:right'];
93317 items = div.selectAll('li')
93320 var enter = items.enter()
93322 .attr('class', function(d) { return 'labeled-input preset-cycleway-' + stripcolon(d); });
93326 .attr('class', 'label preset-label-cycleway')
93327 .attr('for', function(d) { return 'preset-input-cycleway-' + stripcolon(d); })
93328 .text(function(d) { return field.t('types.' + d); });
93332 .attr('class', 'preset-input-cycleway-wrap')
93334 .attr('type', 'text')
93335 .attr('class', function(d) { return 'preset-input-cycleway preset-input-' + stripcolon(d); })
93337 .each(function(d) {
93339 .call(uiCombobox(context, 'cycleway-' + stripcolon(d))
93340 .data(cycleway.options(d))
93346 wrap.selectAll('.preset-input-cycleway')
93347 .on('change', change)
93348 .on('blur', change);
93352 function change() {
93353 var left = utilGetSetValue(d3_select('.preset-input-cyclewayleft'));
93354 var right = utilGetSetValue(d3_select('.preset-input-cyclewayright'));
93357 if (left === 'none' || left === '') { left = undefined; }
93358 if (right === 'none' || right === '') { right = undefined; }
93360 // Always set both left and right as changing one can affect the other
93362 cycleway: undefined,
93363 'cycleway:left': left,
93364 'cycleway:right': right
93367 // If the left and right tags match, use the cycleway tag to tag both
93368 // sides the same way
93369 if (left === right) {
93372 'cycleway:left': undefined,
93373 'cycleway:right': undefined
93377 dispatch$1.call('change', this, tag);
93381 cycleway.options = function() {
93382 return Object.keys(field.strings.options).map(function(option) {
93384 title: field.t('options.' + option + '.description'),
93391 cycleway.tags = function(tags) {
93392 utilGetSetValue(items.selectAll('.preset-input-cycleway'), function(d) {
93393 // If cycleway is set, always return that
93394 if (tags.cycleway) {
93395 return tags.cycleway;
93397 return tags[d] || '';
93399 .attr('placeholder', field.placeholder());
93403 cycleway.focus = function() {
93404 var node = wrap.selectAll('input').node();
93405 if (node) node.focus();
93409 return utilRebind(cycleway, dispatch$1, 'on');
93412 function uiFieldLanes(field, context) {
93413 var dispatch$1 = dispatch('change');
93414 var LANE_WIDTH = 40;
93415 var LANE_HEIGHT = 200;
93418 function lanes(selection) {
93419 var lanesData = context.entity(_entityID).lanes();
93421 if (!d3_select('.inspector-wrap.inspector-hidden').empty() || !selection.node().parentNode) {
93422 selection.call(lanes.off);
93426 var wrap = selection.selectAll('.form-field-input-wrap')
93429 wrap = wrap.enter()
93431 .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
93434 var surface = wrap.selectAll('.surface')
93437 var d = utilGetDimensions(wrap);
93438 var freeSpace = d[0] - lanesData.lanes.length * LANE_WIDTH * 1.5 + LANE_WIDTH * 0.5;
93440 surface = surface.enter()
93442 .attr('width', d[0])
93443 .attr('height', 300)
93444 .attr('class', 'surface')
93448 var lanesSelection = surface.selectAll('.lanes')
93451 lanesSelection = lanesSelection.enter()
93453 .attr('class', 'lanes')
93454 .merge(lanesSelection);
93457 .attr('transform', function () {
93458 return 'translate(' + (freeSpace / 2) + ', 0)';
93462 var lane = lanesSelection.selectAll('.lane')
93463 .data(lanesData.lanes);
93468 var enter = lane.enter()
93470 .attr('class', 'lane');
93476 .attr('width', LANE_WIDTH)
93477 .attr('height', LANE_HEIGHT);
93481 .attr('class', 'forward')
93489 .attr('class', 'bothways')
93497 .attr('class', 'backward')
93508 .attr('transform', function(d) {
93509 return 'translate(' + (LANE_WIDTH * d.index * 1.5) + ', 0)';
93512 lane.select('.forward')
93513 .style('visibility', function(d) {
93514 return d.direction === 'forward' ? 'visible' : 'hidden';
93517 lane.select('.bothways')
93518 .style('visibility', function(d) {
93519 return d.direction === 'bothways' ? 'visible' : 'hidden';
93522 lane.select('.backward')
93523 .style('visibility', function(d) {
93524 return d.direction === 'backward' ? 'visible' : 'hidden';
93529 lanes.entity = function(val) {
93530 if (!_entityID || _entityID !== val.id) {
93531 _entityID = val.id;
93535 lanes.tags = function() {};
93536 lanes.focus = function() {};
93537 lanes.off = function() {};
93539 return utilRebind(lanes, dispatch$1, 'on');
93542 function uiFieldLocalized(field, context) {
93543 var dispatch$1 = dispatch('change', 'input');
93544 var wikipedia = services$1.wikipedia;
93545 var input = d3_select(null);
93546 var localizedInputs = d3_select(null);
93548 var allSuggestions = context.presets().collection.filter(function(p) {
93549 return p.suggestion === true;
93552 // reuse these combos
93553 var langCombo = uiCombobox(context, 'localized-lang')
93554 .fetcher(fetchLanguages)
93557 var brandCombo = uiCombobox(context, 'localized-brand')
93558 .canAutocomplete(false)
93561 var _selection = d3_select(null);
93562 var _multilingual = [];
93563 var _buttonTip = tooltip()
93564 .title(t('translate.translate'))
93565 .placement('left');
93570 function calcLocked() {
93571 if (!_entity) { // the original entity
93572 field.locked(false);
93576 var latest = context.hasEntity(_entity.id);
93577 if (!latest) { // get current entity, possibly edited
93578 field.locked(false);
93582 var hasOriginalName = (latest.tags.name && latest.tags.name === _entity.tags.name);
93583 var hasWikidata = latest.tags.wikidata;
93584 var preset = context.presets().match(latest, context.graph());
93585 var isSuggestion = preset && preset.suggestion;
93586 var showsBrand = preset && preset.fields
93587 .filter(function(d) { return d.id === 'brand'; }).length;
93589 var isLocked = !!(field.id === 'name' && hasOriginalName &&
93590 (hasWikidata || (isSuggestion && !showsBrand)));
93592 field.locked(isLocked);
93596 function calcMultilingual(tags) {
93597 _multilingual = [];
93598 for (var k in tags) {
93599 var m = k.match(/^(.*):([a-zA-Z_-]+)$/);
93600 if (m && m[1] === field.key && m[2]) {
93601 _multilingual.push({ lang: m[2], value: tags[k] });
93604 _multilingual.reverse();
93608 function localized(selection) {
93609 _selection = selection;
93611 var isLocked = field.locked();
93612 var entity = _entity && context.hasEntity(_entity.id); // get latest
93613 var preset = entity && context.presets().match(entity, context.graph());
93615 var wrap = selection.selectAll('.form-field-input-wrap')
93619 wrap = wrap.enter()
93621 .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
93624 input = wrap.selectAll('.localized-main')
93628 input = input.enter()
93630 .attr('type', 'text')
93631 .attr('id', 'preset-input-' + field.safeid)
93632 .attr('class', 'localized-main')
93633 .attr('placeholder', field.placeholder())
93637 if (preset && field.id === 'name') {
93638 var pTag = preset.id.split('/', 2);
93639 var pKey = pTag[0];
93640 var pValue = pTag[1];
93642 if (!preset.suggestion) {
93643 // Not a suggestion preset - Add a suggestions dropdown if it makes sense to.
93644 // This code attempts to determine if the matched preset is the
93645 // kind of preset that even can benefit from name suggestions..
93646 // - true = shops, cafes, hotels, etc. (also generic and fallback presets)
93647 // - false = churches, parks, hospitals, etc. (things not in the index)
93648 var isFallback = preset.isFallback();
93649 var goodSuggestions = allSuggestions.filter(function(s) {
93650 if (isFallback) return true;
93651 var sTag = s.id.split('/', 2);
93652 var sKey = sTag[0];
93653 var sValue = sTag[1];
93654 return pKey === sKey && (!pValue || pValue === sValue);
93657 // Show the suggestions.. If the user picks one, change the tags..
93658 if (allSuggestions.length && goodSuggestions.length) {
93660 .on('blur.localized', checkBrandOnBlur)
93662 .fetcher(fetchBrandNames(preset, allSuggestions))
93663 .on('accept', acceptBrand)
93664 .on('cancel', cancelBrand)
93671 .classed('disabled', !!isLocked)
93672 .attr('readonly', isLocked || null)
93673 .on('input', change(true))
93674 .on('blur', change())
93675 .on('change', change());
93678 var translateButton = wrap.selectAll('.localized-add')
93681 translateButton = translateButton.enter()
93683 .attr('class', 'localized-add form-field-button')
93684 .attr('tabindex', -1)
93685 .call(svgIcon('#iD-icon-plus'))
93686 .merge(translateButton);
93689 .classed('disabled', !!isLocked)
93690 .call(isLocked ? _buttonTip.destroy : _buttonTip)
93691 .on('click', addNew);
93694 if (entity && !_multilingual.length) {
93695 calcMultilingual(entity.tags);
93698 localizedInputs = selection.selectAll('.localized-multilingual')
93701 localizedInputs = localizedInputs.enter()
93703 .attr('class', 'localized-multilingual')
93704 .merge(localizedInputs);
93707 .call(renderMultilingual);
93709 localizedInputs.selectAll('button, input')
93710 .classed('disabled', !!isLocked)
93711 .attr('readonly', isLocked || null);
93715 // We are not guaranteed to get an `accept` or `cancel` when blurring the field.
93716 // (This can happen if the user actives the combo, arrows down, and then clicks off to blur)
93717 // So compare the current field value against the suggestions one last time.
93718 function checkBrandOnBlur() {
93719 var latest = context.hasEntity(_entity.id);
93720 if (!latest) return; // deleting the entity blurred the field?
93722 var preset = context.presets().match(latest, context.graph());
93723 if (preset && preset.suggestion) return; // already accepted
93725 // note: here we are testing against "decorated" names, i.e. 'Starbucks – Cafe'
93726 var name = utilGetSetValue(input).trim();
93727 var matched = allSuggestions.filter(function(s) { return name === s.name(); });
93729 if (matched.length === 1) {
93730 acceptBrand({ suggestion: matched[0] });
93737 function acceptBrand(d) {
93743 var entity = context.entity(_entity.id); // get latest
93744 var tags = entity.tags;
93745 var geometry = entity.geometry(context.graph());
93746 var removed = preset.unsetTags(tags, geometry);
93747 for (var k in tags) {
93748 tags[k] = removed[k]; // set removed tags to `undefined`
93750 tags = d.suggestion.setTags(tags, geometry);
93751 utilGetSetValue(input, tags.name);
93752 dispatch$1.call('change', this, tags);
93756 // user hit escape, clean whatever preset name appears after the last ' – '
93757 function cancelBrand() {
93758 var name = utilGetSetValue(input);
93759 var clean = cleanName(name);
93760 if (clean !== name) {
93761 utilGetSetValue(input, clean);
93762 dispatch$1.call('change', this, { name: clean });
93766 // Remove whatever is after the last ' – '
93767 // NOTE: split/join on en-dash, not a hypen (to avoid conflict with fr - nl names in Brussels etc)
93768 function cleanName(name) {
93769 var parts = name.split(' – ');
93770 if (parts.length > 1) {
93772 name = parts.join(' – ');
93778 function fetchBrandNames(preset, suggestions) {
93779 var pTag = preset.id.split('/', 2);
93780 var pKey = pTag[0];
93781 var pValue = pTag[1];
93783 return function(value, callback) {
93785 if (value && value.length > 2) {
93786 for (var i = 0; i < suggestions.length; i++) {
93787 var s = suggestions[i];
93788 var sTag = s.id.split('/', 2);
93789 var sKey = sTag[0];
93790 var sValue = sTag[1];
93791 var name = s.name();
93792 var dist = utilEditDistance(value, name.substring(0, value.length));
93793 var matchesPreset = (pKey === sKey && (!pValue || pValue === sValue));
93795 if (dist < 1 || (matchesPreset && dist < 3)) {
93800 dist: dist + (matchesPreset ? 0 : 1) // penalize if not matched preset
93805 results.sort(function(a, b) { return a.dist - b.dist; });
93807 results = results.slice(0, 10);
93813 function addNew() {
93814 event.preventDefault();
93815 if (field.locked()) return;
93817 var defaultLang = utilDetect().locale.toLowerCase().split('-')[0];
93818 var langExists = _multilingual.find(function(datum) { return datum.lang === defaultLang; });
93819 var isLangEn = defaultLang.indexOf('en') > -1;
93820 if (isLangEn || langExists) {
93823 _multilingual.push({ lang: defaultLang, value: '' });
93826 .call(renderMultilingual);
93830 function change(onInput) {
93831 return function() {
93832 if (field.locked()) {
93833 event.preventDefault();
93837 t[field.key] = utilGetSetValue(d3_select(this)) || undefined;
93838 dispatch$1.call('change', this, t, onInput);
93844 function key(lang) {
93845 return field.key + ':' + lang;
93849 function changeLang(d) {
93850 var lang = utilGetSetValue(d3_select(this));
93852 var language = wikipedia$2.find(function(d) {
93853 return d[0].toLowerCase() === lang.toLowerCase() ||
93854 d[1].toLowerCase() === lang.toLowerCase();
93857 if (language) lang = language[2];
93859 if (d.lang && d.lang !== lang) {
93860 t[key(d.lang)] = undefined;
93863 var value = utilGetSetValue(d3_select(this.parentNode)
93864 .selectAll('.localized-value'));
93866 if (lang && value) {
93867 t[key(lang)] = value;
93868 } else if (lang && _wikiTitles && _wikiTitles[d.lang]) {
93869 t[key(lang)] = _wikiTitles[d.lang];
93873 dispatch$1.call('change', this, t);
93877 function changeValue(d) {
93878 if (!d.lang) return;
93880 t[key(d.lang)] = utilGetSetValue(d3_select(this)) || undefined;
93881 dispatch$1.call('change', this, t);
93885 function fetchLanguages(value, cb) {
93886 var v = value.toLowerCase();
93888 cb(wikipedia$2.filter(function(d) {
93889 return d[0].toLowerCase().indexOf(v) >= 0 ||
93890 d[1].toLowerCase().indexOf(v) >= 0 ||
93891 d[2].toLowerCase().indexOf(v) >= 0;
93892 }).map(function(d) {
93893 return { value: d[1] };
93898 function renderMultilingual(selection) {
93899 var wraps = selection.selectAll('div.entry')
93900 .data(_multilingual, function(d) { return d.lang; });
93905 .style('max-height', '0px')
93906 .style('opacity', '0')
93907 .style('top', '-10px')
93910 var innerWrap = wraps.enter()
93911 .insert('div', ':first-child');
93914 .attr('class', 'entry')
93916 var wrap = d3_select(this);
93920 .attr('class', 'field-label');
93924 .attr('class', 'label-text');
93928 .attr('class', 'label-textvalue')
93929 .text(t('translate.localized_translation_label'));
93933 .attr('class', 'label-textannotation');
93937 .attr('class', 'remove-icon-multilingual')
93938 .on('click', function(d){
93939 if (field.locked()) return;
93940 event.preventDefault();
93942 t[key(d.lang)] = undefined;
93943 dispatch$1.call('change', this, t);
93944 d3_select(this.parentNode.parentNode.parentNode)
93946 .style('max-height', '240px')
93948 .style('opacity', '0')
93949 .style('max-height', '0px')
93952 .call(svgIcon('#iD-operation-delete'));
93956 .attr('class', 'localized-lang')
93957 .attr('type', 'text')
93958 .attr('placeholder', t('translate.localized_translation_language'))
93959 .on('blur', changeLang)
93960 .on('change', changeLang)
93965 .attr('type', 'text')
93966 .attr('placeholder', t('translate.localized_translation_name'))
93967 .attr('class', 'localized-value')
93968 .on('blur', changeValue)
93969 .on('change', changeValue);
93973 .style('margin-top', '0px')
93974 .style('max-height', '0px')
93975 .style('opacity', '0')
93978 .style('margin-top', '10px')
93979 .style('max-height', '240px')
93980 .style('opacity', '1')
93981 .on('end', function() {
93983 .style('max-height', '')
93984 .style('overflow', 'visible');
93988 var entry = selection.selectAll('.entry');
93990 utilGetSetValue(entry.select('.localized-lang'), function(d) {
93991 var lang = wikipedia$2.find(function(lang) { return lang[2] === d.lang; });
93992 return lang ? lang[1] : d.lang;
93995 utilGetSetValue(entry.select('.localized-value'),
93996 function(d) { return d.value; });
94000 localized.tags = function(tags) {
94001 // Fetch translations from wikipedia
94002 if (tags.wikipedia && !_wikiTitles) {
94004 var wm = tags.wikipedia.match(/([^:]+):(.+)/);
94005 if (wm && wm[0] && wm[1]) {
94006 wikipedia.translations(wm[1], wm[2], function(err, d) {
94007 if (err || !d) return;
94013 utilGetSetValue(input, tags[field.key] || '');
94015 calcMultilingual(tags);
94022 localized.focus = function() {
94023 input.node().focus();
94027 localized.entity = function(val) {
94028 if (!arguments.length) return _entity;
94030 _multilingual = [];
94034 return utilRebind(localized, dispatch$1, 'on');
94037 function uiFieldMaxspeed(field, context) {
94038 var dispatch$1 = dispatch('change');
94039 var unitInput = d3_select(null);
94040 var input = d3_select(null);
94044 var speedCombo = uiCombobox(context, 'maxspeed');
94045 var unitCombo = uiCombobox(context, 'maxspeed-unit')
94046 .data(['km/h', 'mph'].map(comboValues));
94048 var metricValues = [20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120];
94049 var imperialValues = [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80];
94052 function maxspeed(selection) {
94054 var wrap = selection.selectAll('.form-field-input-wrap')
94057 wrap = wrap.enter()
94059 .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
94063 input = wrap.selectAll('#preset-input-' + field.safeid)
94066 input = input.enter()
94068 .attr('type', 'text')
94069 .attr('id', 'preset-input-' + field.safeid)
94070 .attr('placeholder', field.placeholder())
94076 .on('change', change)
94077 .on('blur', change);
94080 if (_entity.type === 'node') {
94083 var childNodes = context.graph().childNodes(context.entity(_entity.id));
94084 loc = childNodes[~~(childNodes.length/2)].loc;
94087 _isImperial = dataImperial.features.some(function(f) {
94088 return f.geometry.coordinates.some(function(d) {
94089 return geoPointInPolygon(loc, d);
94093 unitInput = wrap.selectAll('input.maxspeed-unit')
94096 unitInput = unitInput.enter()
94098 .attr('type', 'text')
94099 .attr('class', 'maxspeed-unit')
94104 .on('blur', changeUnits)
94105 .on('change', changeUnits);
94108 function changeUnits() {
94109 _isImperial = utilGetSetValue(unitInput) === 'mph';
94110 utilGetSetValue(unitInput, _isImperial ? 'mph' : 'km/h');
94117 function setSuggestions() {
94118 speedCombo.data((_isImperial ? imperialValues : metricValues).map(comboValues));
94119 utilGetSetValue(unitInput, _isImperial ? 'mph' : 'km/h');
94123 function comboValues(d) {
94125 value: d.toString(),
94126 title: d.toString()
94131 function change() {
94133 var value = utilGetSetValue(input);
94136 tag[field.key] = undefined;
94137 } else if (isNaN(value) || !_isImperial) {
94138 tag[field.key] = value;
94140 tag[field.key] = value + ' mph';
94143 dispatch$1.call('change', this, tag);
94147 maxspeed.tags = function(tags) {
94148 var value = tags[field.key];
94150 if (value && value.indexOf('mph') >= 0) {
94151 value = parseInt(value, 10);
94152 _isImperial = true;
94153 } else if (value) {
94154 _isImperial = false;
94158 utilGetSetValue(input, value || '');
94162 maxspeed.focus = function() {
94163 input.node().focus();
94167 maxspeed.entity = function(val) {
94172 return utilRebind(maxspeed, dispatch$1, 'on');
94175 function uiFieldRadio(field, context) {
94176 var dispatch$1 = dispatch('change');
94177 var placeholder = d3_select(null);
94178 var wrap = d3_select(null);
94179 var labels = d3_select(null);
94180 var radios = d3_select(null);
94181 var radioData = (field.options || field.keys).slice(); // shallow copy
94188 function selectedKey() {
94189 var node = wrap.selectAll('.form-field-input-radio label.active input');
94190 return !node.empty() && node.datum();
94194 function radio(selection) {
94195 selection.classed('preset-radio', true);
94197 wrap = selection.selectAll('.form-field-input-wrap')
94200 var enter = wrap.enter()
94202 .attr('class', 'form-field-input-wrap form-field-input-radio');
94206 .attr('class', 'placeholder');
94212 placeholder = wrap.selectAll('.placeholder');
94214 labels = wrap.selectAll('label')
94217 enter = labels.enter()
94222 .attr('type', 'radio')
94223 .attr('name', field.id)
94224 .attr('value', function(d) { return field.t('options.' + d, { 'default': d }); })
94225 .attr('checked', false);
94229 .text(function(d) { return field.t('options.' + d, { 'default': d }); });
94234 radios = labels.selectAll('input')
94235 .on('change', changeRadio);
94240 function structureExtras(selection, tags) {
94241 var selected = selectedKey();
94242 var type = context.presets().field(selected);
94243 var layer = context.presets().field('layer');
94244 var showLayer = (selected === 'bridge' || selected === 'tunnel');
94247 var extrasWrap = selection.selectAll('.structure-extras-wrap')
94248 .data(selected ? [0] : []);
94253 extrasWrap = extrasWrap.enter()
94255 .attr('class', 'structure-extras-wrap')
94256 .merge(extrasWrap);
94258 var list = extrasWrap.selectAll('ul')
94261 list = list.enter()
94263 .attr('class', 'rows')
94269 if (!typeField || typeField.id !== selected) {
94270 typeField = uiField(context, type, _entity, { wrap: false })
94271 .on('change', changeType);
94273 typeField.tags(tags);
94278 var typeItem = list.selectAll('.structure-type-item')
94279 .data(typeField ? [typeField] : [], function(d) { return d.id; });
94286 var typeEnter = typeItem.enter()
94287 .insert('li', ':first-child')
94288 .attr('class', 'labeled-input structure-type-item');
94292 .attr('class', 'label structure-label-type')
94293 .attr('for', 'preset-input-' + selected)
94294 .text(t('inspector.radio.structure.type'));
94298 .attr('class', 'structure-input-type-wrap');
94301 typeItem = typeItem
94305 typeItem.selectAll('.structure-input-type-wrap')
94306 .call(typeField.render);
94311 if (layer && showLayer) {
94313 layerField = uiField(context, layer, _entity, { wrap: false })
94314 .on('change', changeLayer);
94316 layerField.tags(tags);
94317 field.keys = utilArrayUnion(field.keys, ['layer']);
94320 field.keys = field.keys.filter(function(k) { return k !== 'layer'; });
94323 var layerItem = list.selectAll('.structure-layer-item')
94324 .data(layerField ? [layerField] : []);
94331 var layerEnter = layerItem.enter()
94333 .attr('class', 'labeled-input structure-layer-item');
94337 .attr('class', 'label structure-label-layer')
94338 .attr('for', 'preset-input-layer')
94339 .text(t('inspector.radio.structure.layer'));
94343 .attr('class', 'structure-input-layer-wrap');
94346 layerItem = layerItem
94347 .merge(layerEnter);
94350 layerItem.selectAll('.structure-input-layer-wrap')
94351 .call(layerField.render);
94356 function changeType(t, onInput) {
94357 var key = selectedKey();
94361 if (val !== 'no') {
94362 _oldType[key] = val;
94365 if (field.type === 'structureRadio') {
94366 // remove layer if it should not be set
94367 if (val === 'no' ||
94368 (key !== 'bridge' && key !== 'tunnel') ||
94369 (key === 'tunnel' && val === 'building_passage')) {
94370 t.layer = undefined;
94372 // add layer if it should be set
94373 if (t.layer === undefined) {
94374 if (key === 'bridge' && val !== 'no') {
94377 if (key === 'tunnel' && val !== 'no' && val !== 'building_passage') {
94383 dispatch$1.call('change', this, t, onInput);
94387 function changeLayer(t, onInput) {
94388 if (t.layer === '0') {
94389 t.layer = undefined;
94391 dispatch$1.call('change', this, t, onInput);
94395 function changeRadio() {
94400 t[field.key] = undefined;
94403 radios.each(function(d) {
94404 var active = d3_select(this).property('checked');
94405 if (active) activeKey = d;
94408 if (active) t[field.key] = d;
94410 var val = _oldType[activeKey] || 'yes';
94411 t[d] = active ? val : undefined;
94415 if (field.type === 'structureRadio') {
94416 if (activeKey === 'bridge') {
94418 } else if (activeKey === 'tunnel' && t.tunnel !== 'building_passage') {
94421 t.layer = undefined;
94425 dispatch$1.call('change', this, t);
94429 radio.tags = function(tags) {
94430 function checked(d) {
94432 return tags[field.key] === d;
94434 return !!(tags[d] && tags[d].toLowerCase() !== 'no');
94438 labels.classed('active', checked);
94439 radios.property('checked', checked);
94441 var selection = radios.filter(function() { return this.checked; });
94443 if (selection.empty()) {
94444 placeholder.text(t('inspector.none'));
94446 placeholder.text(selection.attr('value'));
94447 _oldType[selection.datum()] = tags[selection.datum()];
94450 if (field.type === 'structureRadio') {
94451 // For waterways without a tunnel tag, set 'culvert' as
94452 // the _oldType to default to if the user picks 'tunnel'
94453 if (!!tags.waterway && !_oldType.tunnel) {
94454 _oldType.tunnel = 'culvert';
94457 wrap.call(structureExtras, tags);
94462 radio.focus = function() {
94463 radios.node().focus();
94467 radio.entity = function(val) {
94468 if (!arguments.length) return _entity;
94475 return utilRebind(radio, dispatch$1, 'on');
94478 function uiFieldRestrictions(field, context) {
94479 var dispatch$1 = dispatch('change');
94480 var breathe = behaviorBreathe(context);
94481 var storedViaWay = context.storage('turn-restriction-via-way');
94482 var storedDistance = context.storage('turn-restriction-distance');
94484 var _maxViaWay = storedViaWay !== null ? (+storedViaWay) : 1;
94485 var _maxDistance = storedDistance ? (+storedDistance) : 30;
94486 var _initialized = false;
94487 var _parent = d3_select(null); // the entire field
94488 var _container = d3_select(null); // just the map
94498 function restrictions(selection) {
94499 _parent = selection;
94501 // try to reuse the intersection, but always rebuild it if the graph has changed
94502 if (_vertexID && (context.graph() !== _graph || !_intersection)) {
94503 _graph = context.graph();
94504 _intersection = osmIntersection(_graph, _vertexID, _maxDistance);
94507 // It's possible for there to be no actual intersection here.
94508 // for example, a vertex of two `highway=path`
94509 // In this case, hide the field.
94512 _intersection.vertices.length && // has vertices
94513 _intersection.vertices // has the vertex that the user selected
94514 .filter(function(vertex) { return vertex.id === _vertexID; }).length &&
94515 _intersection.ways.length > 2 && // has more than 2 ways
94516 _intersection.ways // has more than 1 TO way
94517 .filter(function(way) { return way.__to; }).length > 1
94520 // Also hide in the case where
94521 d3_select(selection.node().parentNode).classed('hide', !isOK);
94523 // if form field is hidden or has detached from dom, clean up.
94525 !d3_select('.inspector-wrap.inspector-hidden').empty() ||
94526 !selection.node().parentNode ||
94527 !selection.node().parentNode.parentNode) {
94528 selection.call(restrictions.off);
94533 var wrap = selection.selectAll('.form-field-input-wrap')
94536 wrap = wrap.enter()
94538 .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
94541 var container = wrap.selectAll('.restriction-container')
94545 var containerEnter = container.enter()
94547 .attr('class', 'restriction-container');
94551 .attr('class', 'restriction-help');
94554 _container = containerEnter
94556 .call(renderViewer);
94558 var controls = wrap.selectAll('.restriction-controls')
94564 .attr('class', 'restriction-controls-container')
94566 .attr('class', 'restriction-controls')
94568 .call(renderControls);
94572 function renderControls(selection) {
94573 var distControl = selection.selectAll('.restriction-distance')
94579 var distControlEnter = distControl.enter()
94581 .attr('class', 'restriction-control restriction-distance');
94585 .attr('class', 'restriction-control-label restriction-distance-label')
94586 .text(t('restriction.controls.distance') + ':');
94590 .attr('class', 'restriction-distance-input')
94591 .attr('type', 'range')
94594 .attr('step', '5');
94598 .attr('class', 'restriction-distance-text');
94601 selection.selectAll('.restriction-distance-input')
94602 .property('value', _maxDistance)
94603 .on('input', function() {
94604 var val = d3_select(this).property('value');
94605 _maxDistance = +val;
94606 _intersection = null;
94607 _container.selectAll('.layer-osm .layer-turns *').remove();
94608 context.storage('turn-restriction-distance', _maxDistance);
94609 _parent.call(restrictions);
94612 selection.selectAll('.restriction-distance-text')
94613 .text(displayMaxDistance(_maxDistance));
94616 var viaControl = selection.selectAll('.restriction-via-way')
94622 var viaControlEnter = viaControl.enter()
94624 .attr('class', 'restriction-control restriction-via-way');
94628 .attr('class', 'restriction-control-label restriction-via-way-label')
94629 .text(t('restriction.controls.via') + ':');
94633 .attr('class', 'restriction-via-way-input')
94634 .attr('type', 'range')
94637 .attr('step', '1');
94641 .attr('class', 'restriction-via-way-text');
94644 selection.selectAll('.restriction-via-way-input')
94645 .property('value', _maxViaWay)
94646 .on('input', function() {
94647 var val = d3_select(this).property('value');
94649 _container.selectAll('.layer-osm .layer-turns *').remove();
94650 context.storage('turn-restriction-via-way', _maxViaWay);
94651 _parent.call(restrictions);
94654 selection.selectAll('.restriction-via-way-text')
94655 .text(displayMaxVia(_maxViaWay));
94659 function renderViewer(selection) {
94660 if (!_intersection) return;
94662 var vgraph = _intersection.graph;
94663 var filter = utilFunctor(true);
94664 var projection = geoRawMercator();
94666 // Reflow warning: `utilGetDimensions` calls `getBoundingClientRect`
94667 // Instead of asking the restriction-container for its dimensions,
94668 // we can ask the #sidebar, which can have its dimensions cached.
94669 // width: calc as sidebar - padding
94670 // height: hardcoded (from `80_app.css`)
94671 // var d = utilGetDimensions(selection);
94672 var sdims = utilGetDimensions(d3_select('#sidebar'));
94673 var d = [ sdims[0] - 50, 370 ];
94674 var c = geoVecScale(d, 0.5);
94677 projection.scale(geoZoomToScale(z));
94679 // Calculate extent of all key vertices
94680 var extent = geoExtent();
94681 for (var i = 0; i < _intersection.vertices.length; i++) {
94682 extent._extend(_intersection.vertices[i].extent());
94685 // If this is a large intersection, adjust zoom to fit extent
94686 if (_intersection.vertices.length > 1) {
94687 var padding = 180; // in z22 pixels
94688 var tl = projection([extent[0][0], extent[1][1]]);
94689 var br = projection([extent[1][0], extent[0][1]]);
94690 var hFactor = (br[0] - tl[0]) / (d[0] - padding);
94691 var vFactor = (br[1] - tl[1]) / (d[1] - padding);
94692 var hZoomDiff = Math.log(Math.abs(hFactor)) / Math.LN2;
94693 var vZoomDiff = Math.log(Math.abs(vFactor)) / Math.LN2;
94694 z = z - Math.max(hZoomDiff, vZoomDiff);
94695 projection.scale(geoZoomToScale(z));
94698 var padTop = 35; // reserve top space for hint text
94699 var extentCenter = projection(extent.center());
94700 extentCenter[1] = extentCenter[1] - padTop;
94703 .translate(geoVecSubtract(c, extentCenter))
94704 .clipExtent([[0, 0], d]);
94706 var drawLayers = svgLayers(projection, context).only(['osm','touch']).dimensions(d);
94707 var drawVertices = svgVertices(projection, context);
94708 var drawLines = svgLines(projection, context);
94709 var drawTurns = svgTurns(projection, context);
94711 var firstTime = selection.selectAll('.surface').empty();
94716 var surface = selection.selectAll('.surface')
94717 .classed('tr', true);
94720 _initialized = true;
94726 // This can happen if we've lowered the detail while a FROM way
94727 // is selected, and that way is no longer part of the intersection.
94728 if (_fromWayID && !vgraph.hasEntity(_fromWayID)) {
94734 .call(utilSetDimensions, d)
94735 .call(drawVertices, vgraph, _intersection.vertices, filter, extent, z)
94736 .call(drawLines, vgraph, _intersection.ways, filter)
94737 .call(drawTurns, vgraph, _intersection.turns(_fromWayID, _maxViaWay));
94740 .on('click.restrictions', click)
94741 .on('mouseover.restrictions', mouseover);
94744 .selectAll('.selected')
94745 .classed('selected', false);
94748 .selectAll('.related')
94749 .classed('related', false);
94752 var way = vgraph.entity(_fromWayID);
94754 .selectAll('.' + _fromWayID)
94755 .classed('selected', true)
94756 .classed('related', true);
94759 document.addEventListener('resizeWindow', function () {
94760 utilSetDimensions(_container, null);
94772 var datum = event.target.__data__;
94773 var entity = datum && datum.properties && datum.properties.entity;
94778 if (datum instanceof osmWay && (datum.__from || datum.__via)) {
94779 _fromWayID = datum.id;
94783 } else if (datum instanceof osmTurn) {
94784 var actions, extraActions, turns, i;
94785 var restrictionType = osmInferRestriction(vgraph, datum, projection);
94787 if (datum.restrictionID && !datum.direct) {
94790 } else if (datum.restrictionID && !datum.only) { // NO -> ONLY
94792 var datumOnly = JSON.parse(JSON.stringify(datum)); // deep clone the datum
94793 datumOnly.only = true; // but change this property
94794 restrictionType = restrictionType.replace(/^no/, 'only');
94796 // Adding an ONLY restriction should destroy all other direct restrictions from the FROM towards the VIA.
94797 // We will remember them in _oldTurns, and restore them if the user clicks again.
94798 turns = _intersection.turns(_fromWayID, 2);
94801 for (i = 0; i < turns.length; i++) {
94802 var turn = turns[i];
94803 if (seen[turn.restrictionID]) continue; // avoid deleting the turn twice (#4968, #4928)
94805 if (turn.direct && turn.path[1] === datum.path[1]) {
94806 seen[turns[i].restrictionID] = true;
94807 turn.restrictionType = osmInferRestriction(vgraph, turn, projection);
94808 _oldTurns.push(turn);
94809 extraActions.push(actionUnrestrictTurn(turn));
94813 actions = _intersection.actions.concat(extraActions, [
94814 actionRestrictTurn(datumOnly, restrictionType),
94815 t('operations.restriction.annotation.create')
94818 } else if (datum.restrictionID) { // ONLY -> Allowed
94819 // Restore whatever restrictions we might have destroyed by cycling thru the ONLY state.
94820 // This relies on the assumption that the intersection was already split up when we
94821 // performed the previous action (NO -> ONLY), so the IDs in _oldTurns shouldn't have changed.
94822 turns = _oldTurns || [];
94824 for (i = 0; i < turns.length; i++) {
94825 if (turns[i].key !== datum.key) {
94826 extraActions.push(actionRestrictTurn(turns[i], turns[i].restrictionType));
94831 actions = _intersection.actions.concat(extraActions, [
94832 actionUnrestrictTurn(datum),
94833 t('operations.restriction.annotation.delete')
94836 } else { // Allowed -> NO
94837 actions = _intersection.actions.concat([
94838 actionRestrictTurn(datum, restrictionType),
94839 t('operations.restriction.annotation.create')
94843 context.perform.apply(context, actions);
94845 // At this point the datum will be changed, but will have same key..
94846 // Refresh it and update the help..
94847 var s = surface.selectAll('.' + datum.key);
94848 datum = s.empty() ? null : s.datum();
94849 updateHints(datum);
94859 function mouseover() {
94860 var datum = event.target.__data__;
94861 updateHints(datum);
94864 _lastXPos = _lastXPos || sdims[0];
94866 function redraw(minChange) {
94870 xPos = utilGetDimensions(d3_select('#sidebar'))[0];
94873 if (!minChange || (minChange && Math.abs(xPos - _lastXPos) >= minChange)) {
94874 if (context.hasEntity(_vertexID)) {
94876 _container.call(renderViewer);
94882 function highlightPathsFrom(wayID) {
94883 surface.selectAll('.related')
94884 .classed('related', false)
94885 .classed('allow', false)
94886 .classed('restrict', false)
94887 .classed('only', false);
94889 surface.selectAll('.' + wayID)
94890 .classed('related', true);
94893 var turns = _intersection.turns(wayID, _maxViaWay);
94894 for (var i = 0; i < turns.length; i++) {
94895 var turn = turns[i];
94896 var ids = [turn.to.way];
94897 var klass = (turn.no ? 'restrict' : (turn.only ? 'only' : 'allow'));
94899 if (turn.only || turns.length === 1) {
94900 if (turn.via.ways) {
94901 ids = ids.concat(turn.via.ways);
94903 } else if (turn.to.way === wayID) {
94907 surface.selectAll(utilEntitySelector(ids))
94908 .classed('related', true)
94909 .classed('allow', (klass === 'allow'))
94910 .classed('restrict', (klass === 'restrict'))
94911 .classed('only', (klass === 'only'));
94917 function updateHints(datum) {
94918 var help = _container.selectAll('.restriction-help').html('');
94920 var placeholders = {};
94921 ['from', 'via', 'to'].forEach(function(k) {
94922 placeholders[k] = '<span class="qualifier">' + t('restriction.help.' + k) + '</span>';
94925 var entity = datum && datum.properties && datum.properties.entity;
94931 way = vgraph.entity(_fromWayID);
94933 .selectAll('.' + _fromWayID)
94934 .classed('selected', true)
94935 .classed('related', true);
94939 if (datum instanceof osmWay && datum.__from) {
94942 highlightPathsFrom(_fromWayID ? null : way.id);
94943 surface.selectAll('.' + way.id)
94944 .classed('related', true);
94946 var clickSelect = (!_fromWayID || _fromWayID !== way.id);
94948 .append('div') // "Click to select FROM {fromName}." / "FROM {fromName}"
94949 .html(t('restriction.help.' + (clickSelect ? 'select_from_name' : 'from_name'), {
94950 from: placeholders.from,
94951 fromName: displayName(way.id, vgraph)
94955 // Hovering a turn arrow
94956 } else if (datum instanceof osmTurn) {
94957 var restrictionType = osmInferRestriction(vgraph, datum, projection);
94958 var turnType = restrictionType.replace(/^(only|no)\_/, '');
94959 var indirect = (datum.direct === false ? t('restriction.help.indirect') : '');
94960 var klass, turnText, nextText;
94963 klass = 'restrict';
94964 turnText = t('restriction.help.turn.no_' + turnType, { indirect: indirect });
94965 nextText = t('restriction.help.turn.only_' + turnType, { indirect: '' });
94966 } else if (datum.only) {
94968 turnText = t('restriction.help.turn.only_' + turnType, { indirect: indirect });
94969 nextText = t('restriction.help.turn.allowed_' + turnType, { indirect: '' });
94972 turnText = t('restriction.help.turn.allowed_' + turnType, { indirect: indirect });
94973 nextText = t('restriction.help.turn.no_' + turnType, { indirect: '' });
94977 .append('div') // "NO Right Turn (indirect)"
94978 .attr('class', 'qualifier ' + klass)
94982 .append('div') // "FROM {fromName} TO {toName}"
94983 .html(t('restriction.help.from_name_to_name', {
94984 from: placeholders.from,
94985 fromName: displayName(datum.from.way, vgraph),
94986 to: placeholders.to,
94987 toName: displayName(datum.to.way, vgraph)
94990 if (datum.via.ways && datum.via.ways.length) {
94992 for (var i = 0; i < datum.via.ways.length; i++) {
94993 var prev = names[names.length - 1];
94994 var curr = displayName(datum.via.ways[i], vgraph);
94995 if (!prev || curr !== prev) // collapse identical names
95000 .append('div') // "VIA {viaNames}"
95001 .html(t('restriction.help.via_names', {
95002 via: placeholders.via,
95003 viaNames: names.join(', ')
95009 .append('div') // Click for "No Right Turn"
95010 .text(t('restriction.help.toggle', { turn: nextText.trim() }));
95013 highlightPathsFrom(null);
95014 var alongIDs = datum.path.slice();
95015 surface.selectAll(utilEntitySelector(alongIDs))
95016 .classed('related', true)
95017 .classed('allow', (klass === 'allow'))
95018 .classed('restrict', (klass === 'restrict'))
95019 .classed('only', (klass === 'only'));
95022 // Hovering empty surface
95024 highlightPathsFrom(null);
95027 .append('div') // "FROM {fromName}"
95028 .html(t('restriction.help.from_name', {
95029 from: placeholders.from,
95030 fromName: displayName(_fromWayID, vgraph)
95035 .append('div') // "Click to select a FROM segment."
95036 .html(t('restriction.help.select_from', {
95037 from: placeholders.from
95045 function displayMaxDistance(maxDist) {
95046 var isImperial = (utilDetect().locale.toLowerCase() === 'en-us');
95050 var distToFeet = { // imprecise conversion for prettier display
95051 20: 70, 25: 85, 30: 100, 35: 115, 40: 130, 45: 145, 50: 160
95053 opts = { distance: t('units.feet', { quantity: distToFeet }) };
95055 opts = { distance: t('units.meters', { quantity: maxDist }) };
95058 return t('restriction.controls.distance_up_to', opts);
95062 function displayMaxVia(maxVia) {
95063 return maxVia === 0 ? t('restriction.controls.via_node_only')
95064 : maxVia === 1 ? t('restriction.controls.via_up_to_one')
95065 : t('restriction.controls.via_up_to_two');
95069 function displayName(entityID, graph) {
95070 var entity = graph.entity(entityID);
95071 var name = utilDisplayName(entity) || '';
95072 var matched = context.presets().match(entity, graph);
95073 var type = (matched && matched.name()) || utilDisplayType(entity.id);
95074 return name || type;
95078 restrictions.entity = function(val) {
95079 _intersection = null;
95082 _vertexID = val.id;
95086 restrictions.tags = function() {};
95087 restrictions.focus = function() {};
95090 restrictions.off = function(selection) {
95091 if (!_initialized) return;
95093 selection.selectAll('.surface')
95095 .on('click.restrictions', null)
95096 .on('mouseover.restrictions', null);
95099 .on('resize.restrictions', null);
95103 return utilRebind(restrictions, dispatch$1, 'on');
95106 function uiFieldTextarea(field) {
95107 var dispatch$1 = dispatch('change');
95108 var input = d3_select(null);
95111 function textarea(selection) {
95112 var wrap = selection.selectAll('.form-field-input-wrap')
95115 wrap = wrap.enter()
95117 .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
95120 input = wrap.selectAll('textarea')
95123 input = input.enter()
95124 .append('textarea')
95125 .attr('id', 'preset-input-' + field.safeid)
95126 .attr('placeholder', field.placeholder() || t('inspector.unknown'))
95127 .attr('maxlength', 255)
95129 .on('input', change(true))
95130 .on('blur', change())
95131 .on('change', change())
95136 function change(onInput) {
95137 return function() {
95139 t[field.key] = utilGetSetValue(input) || undefined;
95140 dispatch$1.call('change', this, t, onInput);
95145 textarea.tags = function(tags) {
95146 utilGetSetValue(input, tags[field.key] || '');
95150 textarea.focus = function() {
95151 input.node().focus();
95155 return utilRebind(textarea, dispatch$1, 'on');
95158 function uiFieldWikidata(field, context) {
95159 var wikidata = services$1.wikidata;
95160 var dispatch$1 = dispatch('change');
95161 var searchInput = d3_select(null);
95163 var _wikidataEntity = null;
95167 var combobox = uiCombobox(context, 'combo-' + field.safeid)
95168 .caseSensitive(true)
95171 function wiki(selection) {
95173 var wrap = selection.selectAll('.form-field-input-wrap')
95176 wrap = wrap.enter()
95178 .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
95182 var list = wrap.selectAll('ul')
95185 list = list.enter()
95187 .attr('class', 'rows')
95190 var searchRow = list.selectAll('li.wikidata-search')
95193 var searchRowEnter = searchRow.enter()
95195 .attr('class', 'wikidata-search');
95197 searchInput = searchRowEnter
95199 .attr('type', 'text')
95200 .style('flex', '1')
95204 .on('focus', function() {
95205 var node = d3_select(this).node();
95206 node.setSelectionRange(0, node.value.length);
95208 .on('blur', function() {
95209 setLabelForEntity();
95211 .call(combobox.fetcher(fetchWikidataItems));
95213 combobox.on('accept', function(d) {
95216 }).on('cancel', function() {
95217 setLabelForEntity();
95222 .attr('class', 'form-field-button wiki-link')
95223 .attr('title', t('icons.open_wikidata'))
95224 .attr('tabindex', -1)
95225 .call(svgIcon('#iD-icon-out-link'))
95226 .on('click', function() {
95227 event.preventDefault();
95228 if (_wikiURL) window.open(_wikiURL, '_blank');
95231 var wikidataProperties = ['description', 'identifier'];
95233 var items = list.selectAll('li.labeled-input')
95234 .data(wikidataProperties);
95237 var enter = items.enter()
95239 .attr('class', function(d) { return 'labeled-input preset-wikidata-' + d; });
95243 .attr('class', 'label')
95244 .attr('for', function(d) { return 'preset-input-wikidata-' + d; })
95245 .text(function(d) { return t('wikidata.' + d); });
95249 .attr('type', 'text')
95250 .attr('id', function(d) { return 'preset-input-wikidata-' + d; })
95252 .classed('disabled', 'true')
95253 .attr('readonly', 'true');
95257 .attr('class', 'form-field-button')
95258 .attr('title', t('icons.copy'))
95259 .attr('tabindex', -1)
95260 .call(svgIcon('#iD-operation-copy'))
95261 .on('click', function() {
95262 event.preventDefault();
95263 d3_select(this.parentNode)
95267 document.execCommand('copy');
95272 function fetchWikidataItems(q, callback) {
95274 if (!q && _entity) {
95275 q = context.entity(_entity.id).tags.name || '';
95278 wikidata.itemsForSearchQuery(q, function(err, data) {
95281 for (var i in data) {
95282 data[i].value = data[i].label + ' (' + data[i].id + ')';
95283 data[i].title = data[i].description;
95286 if (callback) callback(data);
95291 function change() {
95293 syncTags[field.key] = _qid;
95294 dispatch$1.call('change', this, syncTags);
95296 // attempt asynchronous update of wikidata tag..
95297 var initGraph = context.graph();
95298 var initEntityID = _entity.id;
95300 wikidata.entityByQID(_qid, function(err, entity) {
95303 // If graph has changed, we can't apply this update.
95304 if (context.graph() !== initGraph) return;
95306 if (!entity.sitelinks) return;
95308 var langs = wikidata.languagesToQuery();
95309 // use the label and description languages as fallbacks
95310 ['labels', 'descriptions'].forEach(function(key) {
95311 if (!entity[key]) return;
95313 var valueLangs = Object.keys(entity[key]);
95314 if (valueLangs.length === 0) return;
95315 var valueLang = valueLangs[0];
95317 if (langs.indexOf(valueLang) === -1) {
95318 langs.push(valueLang);
95322 var currTags = Object.assign({}, context.entity(initEntityID).tags); // shallow copy
95324 var foundPreferred;
95325 for (var i in langs) {
95326 var lang = langs[i];
95327 var siteID = lang.replace('-', '_') + 'wiki';
95328 if (entity.sitelinks[siteID]) {
95329 foundPreferred = true;
95330 currTags.wikipedia = lang + ':' + entity.sitelinks[siteID].title;
95331 // use the first match
95336 if (!foundPreferred) {
95337 // No wikipedia sites available in the user's language or the fallback languages,
95338 // default to any wikipedia sitelink
95340 var wikiSiteKeys = Object.keys(entity.sitelinks).filter(function(site) {
95341 return site.endsWith('wiki');
95344 if (wikiSiteKeys.length === 0) {
95345 // if no wikipedia pages are linked to this wikidata entity, delete that tag
95346 if (currTags.wikipedia) {
95347 delete currTags.wikipedia;
95350 var wikiLang = wikiSiteKeys[0].slice(0, -4).replace('_', '-');
95351 var wikiTitle = entity.sitelinks[wikiSiteKeys[0]].title;
95352 currTags.wikipedia = wikiLang + ':' + wikiTitle;
95356 // Coalesce the update of wikidata tag into the previous tag change
95358 actionChangeTags(initEntityID, currTags),
95359 context.history().undoAnnotation()
95362 // do not dispatch.call('change') here, because entity_editor
95363 // changeTags() is not intended to be called asynchronously
95368 function setLabelForEntity() {
95370 if (_wikidataEntity) {
95371 label = entityPropertyForDisplay(_wikidataEntity, 'labels');
95372 if (label.length === 0) {
95373 label = _wikidataEntity.id.toString();
95376 utilGetSetValue(d3_select('li.wikidata-search input'), label);
95380 wiki.tags = function(tags) {
95381 _qid = tags[field.key] || '';
95383 if (!/^Q[0-9]*$/.test(_qid)) { // not a proper QID
95388 // QID value in correct format
95389 _wikiURL = 'https://wikidata.org/wiki/' + _qid;
95390 wikidata.entityByQID(_qid, function(err, entity) {
95395 _wikidataEntity = entity;
95397 setLabelForEntity();
95399 var description = entityPropertyForDisplay(entity, 'descriptions');
95401 d3_select('.form-field-wikidata button.wiki-link')
95402 .classed('disabled', false);
95404 d3_select('.preset-wikidata-description')
95405 .style('display', function(){
95406 return description.length > 0 ? 'flex' : 'none';
95409 .attr('value', description);
95411 d3_select('.preset-wikidata-identifier')
95412 .style('display', function(){
95413 return entity.id ? 'flex' : 'none';
95416 .attr('value', entity.id);
95420 // not a proper QID
95421 function unrecognized() {
95422 _wikidataEntity = null;
95423 setLabelForEntity();
95425 d3_select('.preset-wikidata-description')
95426 .style('display', 'none');
95427 d3_select('.preset-wikidata-identifier')
95428 .style('display', 'none');
95430 d3_select('.form-field-wikidata button.wiki-link')
95431 .classed('disabled', true);
95433 if (_qid && _qid !== '') {
95434 _wikiURL = 'https://wikidata.org/wiki/Special:Search?search=' + _qid;
95441 function entityPropertyForDisplay(wikidataEntity, propKey) {
95442 if (!wikidataEntity[propKey]) return '';
95443 var propObj = wikidataEntity[propKey];
95444 var langKeys = Object.keys(propObj);
95445 if (langKeys.length === 0) return '';
95446 // sorted by priority, since we want to show the user's language first if possible
95447 var langs = wikidata.languagesToQuery();
95448 for (var i in langs) {
95449 var lang = langs[i];
95450 var valueObj = propObj[lang];
95451 if (valueObj && valueObj.value && valueObj.value.length > 0) return valueObj.value;
95453 // default to any available value
95454 return propObj[langKeys[0]].value;
95458 wiki.entity = function(val) {
95459 if (!arguments.length) return _entity;
95465 wiki.focus = function() {
95466 searchInput.node().focus();
95470 return utilRebind(wiki, dispatch$1, 'on');
95473 function uiFieldWikipedia(field, context) {
95474 var dispatch$1 = dispatch('change');
95475 var wikipedia = services$1.wikipedia;
95476 var wikidata = services$1.wikidata;
95477 var lang = d3_select(null);
95478 var title = d3_select(null);
95482 var langCombo = uiCombobox(context, 'wikipedia-lang')
95483 .fetcher(function(value, cb) {
95484 var v = value.toLowerCase();
95486 cb(wikipedia$2.filter(function(d) {
95487 return d[0].toLowerCase().indexOf(v) >= 0 ||
95488 d[1].toLowerCase().indexOf(v) >= 0 ||
95489 d[2].toLowerCase().indexOf(v) >= 0;
95490 }).map(function(d) {
95491 return { value: d[1] };
95495 var titleCombo = uiCombobox(context, 'wikipedia-title')
95496 .fetcher(function(value, cb) {
95497 if (!value && _entity) {
95498 value = context.entity(_entity.id).tags.name || '';
95501 var searchfn = value.length > 7 ? wikipedia.search : wikipedia.suggestions;
95502 searchfn(language()[2], value, function(query, data) {
95503 cb(data.map(function(d) {
95504 return { value: d };
95510 function wiki(selection) {
95511 var wrap = selection.selectAll('.form-field-input-wrap')
95514 wrap = wrap.enter()
95516 .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
95520 var langRow = wrap.selectAll('.wiki-lang-container')
95523 langRow = langRow.enter()
95525 .attr('class', 'wiki-lang-container')
95529 lang = langRow.selectAll('input.wiki-lang')
95532 lang = lang.enter()
95534 .attr('type', 'text')
95535 .attr('class', 'wiki-lang')
95536 .attr('placeholder', t('translate.localized_translation_language'))
95541 utilGetSetValue(lang, language()[1]);
95544 .on('blur', changeLang)
95545 .on('change', changeLang);
95548 var titleRow = wrap.selectAll('.wiki-title-container')
95551 titleRow = titleRow.enter()
95553 .attr('class', 'wiki-title-container')
95556 title = titleRow.selectAll('input.wiki-title')
95559 title = title.enter()
95561 .attr('type', 'text')
95562 .attr('class', 'wiki-title')
95563 .attr('id', 'preset-input-' + field.safeid)
95570 .on('change', change);
95573 var link = titleRow.selectAll('.wiki-link')
95576 link = link.enter()
95578 .attr('class', 'form-field-button wiki-link')
95579 .attr('tabindex', -1)
95580 .call(svgIcon('#iD-icon-out-link'))
95584 .on('click', function() {
95585 event.preventDefault();
95586 if (_wikiURL) window.open(_wikiURL, '_blank');
95591 function language() {
95592 var value = utilGetSetValue(lang).toLowerCase();
95593 var locale = utilDetect().locale.toLowerCase();
95594 var localeLanguage;
95595 return wikipedia$2.find(function(d) {
95596 if (d[2] === locale) localeLanguage = d;
95597 return d[0].toLowerCase() === value ||
95598 d[1].toLowerCase() === value ||
95600 }) || localeLanguage || ['English', 'English', 'en'];
95604 function changeLang() {
95605 utilGetSetValue(lang, language()[1]);
95615 function change(skipWikidata) {
95616 var value = utilGetSetValue(title);
95617 var m = value.match(/https?:\/\/([-a-z]+)\.wikipedia\.org\/(?:wiki|\1-[-a-z]+)\/([^#]+)(?:#(.+))?/);
95618 var l = m && wikipedia$2.find(function(d) { return m[1] === d[2]; });
95622 // Normalize title http://www.mediawiki.org/wiki/API:Query#Title_normalization
95623 value = decodeURIComponent(m[2]).replace(/_/g, ' ');
95627 // leave this out for now - #6232
95628 // Best-effort `anchordecode:` implementation
95629 // anchor = decodeURIComponent(m[3].replace(/\.([0-9A-F]{2})/g, '%$1'));
95631 anchor = decodeURIComponent(m[3]);
95633 value += '#' + anchor.replace(/_/g, ' ');
95635 value = value.slice(0, 1).toUpperCase() + value.slice(1);
95636 utilGetSetValue(lang, l[1]);
95637 utilGetSetValue(title, value);
95641 syncTags.wikipedia = language()[2] + ':' + value;
95643 syncTags.wikipedia = undefined;
95646 dispatch$1.call('change', this, syncTags);
95649 if (skipWikidata || !value || !language()[2]) return;
95651 // attempt asynchronous update of wikidata tag..
95652 var initGraph = context.graph();
95653 var initEntityID = _entity.id;
95655 wikidata.itemsByTitle(language()[2], value, function(err, data) {
95658 // If graph has changed, we can't apply this update.
95659 if (context.graph() !== initGraph) return;
95661 if (!data || !Object.keys(data).length) return;
95663 var qids = Object.keys(data);
95664 var value = qids && qids.find(function(id) { return id.match(/^Q\d+$/); });
95665 var currTags = Object.assign({}, context.entity(initEntityID).tags); // shallow copy
95667 currTags.wikidata = value;
95669 // Coalesce the update of wikidata tag into the previous tag change
95671 actionChangeTags(initEntityID, currTags),
95672 context.history().undoAnnotation()
95675 // do not dispatch.call('change') here, because entity_editor
95676 // changeTags() is not intended to be called asynchronously
95681 wiki.tags = function(tags) {
95682 var value = tags[field.key] || '';
95683 var m = value.match(/([^:]+):([^#]+)(?:#(.+))?/);
95684 var l = m && wikipedia$2.find(function(d) { return m[1] === d[2]; });
95685 var anchor = m && m[3];
95687 // value in correct format
95689 utilGetSetValue(lang, l[1]);
95690 utilGetSetValue(title, m[2] + (anchor ? ('#' + anchor) : ''));
95693 // Best-effort `anchorencode:` implementation
95694 anchor = encodeURIComponent(anchor.replace(/ /g, '_')).replace(/%/g, '.');
95696 anchor = anchor.replace(/ /g, '_');
95699 _wikiURL = 'https://' + m[1] + '.wikipedia.org/wiki/' +
95700 m[2].replace(/ /g, '_') + (anchor ? ('#' + anchor) : '');
95702 // unrecognized value format
95704 utilGetSetValue(title, value);
95705 if (value && value !== '') {
95706 utilGetSetValue(lang, '');
95707 _wikiURL = 'https://en.wikipedia.org/wiki/Special:Search?search=' + value;
95715 wiki.entity = function(val) {
95716 if (!arguments.length) return _entity;
95722 wiki.focus = function() {
95723 title.node().focus();
95727 return utilRebind(wiki, dispatch$1, 'on');
95731 access: uiFieldAccess,
95732 address: uiFieldAddress,
95733 check: uiFieldCheck,
95734 combo: uiFieldCombo,
95735 cycleway: uiFieldCycleway,
95736 defaultCheck: uiFieldCheck,
95737 email: uiFieldText,
95738 lanes: uiFieldLanes,
95739 localized: uiFieldLocalized,
95740 maxspeed: uiFieldMaxspeed,
95741 multiCombo: uiFieldCombo,
95742 networkCombo: uiFieldCombo,
95743 number: uiFieldText,
95744 onewayCheck: uiFieldCheck,
95745 radio: uiFieldRadio,
95746 restrictions: uiFieldRestrictions,
95747 semiCombo: uiFieldCombo,
95748 structureRadio: uiFieldRadio,
95751 textarea: uiFieldTextarea,
95752 typeCombo: uiFieldCombo,
95754 wikidata: uiFieldWikidata,
95755 wikipedia: uiFieldWikipedia
95758 function uiField(context, presetField, entity, options) {
95759 options = Object.assign({
95767 var dispatch$1 = dispatch('change');
95768 var field = Object.assign({}, presetField); // shallow copy
95769 var _show = options.show;
95773 var _locked = false;
95774 var _lockedTip = tooltip()
95775 .title(t('inspector.lock.suggestion', { label: field.label }))
95776 .placement('bottom');
95779 field.keys = field.keys || [field.key];
95781 // only create the fields that are actually being shown
95782 if (_show && !field.impl) {
95786 // Creates the field.. This is done lazily,
95787 // once we know that the field will be shown.
95788 function createField() {
95789 field.impl = uiFields[field.type](field, context)
95790 .on('change', function(t, onInput) {
95791 dispatch$1.call('change', field, t, onInput);
95795 field.entityID = entity.id;
95796 // if this field cares about the entity, pass it along
95797 if (field.impl.entity) {
95798 field.impl.entity(entity);
95804 function isModified() {
95805 if (!entity) return false;
95806 var original = context.graph().base().entities[entity.id];
95807 return field.keys.some(function(key) {
95808 return original ? _tags[key] !== original.tags[key] : _tags[key];
95813 function isPresent() {
95814 return field.keys.some(function(key) {
95815 if (field.type === 'multiCombo') {
95816 for (var tagKey in _tags) {
95817 if (tagKey.indexOf(key) === 0) {
95823 return _tags[key] !== undefined;
95828 function revert(d) {
95829 event.stopPropagation();
95830 event.preventDefault();
95831 if (!entity || _locked) return;
95833 var original = context.graph().base().entities[entity.id];
95835 d.keys.forEach(function(key) {
95836 t[key] = original ? original.tags[key] : undefined;
95839 dispatch$1.call('change', d, t);
95843 function remove(d) {
95844 event.stopPropagation();
95845 event.preventDefault();
95846 if (_locked) return;
95849 d.keys.forEach(function(key) {
95850 t[key] = undefined;
95853 dispatch$1.call('change', d, t);
95857 field.render = function(selection) {
95858 var container = selection.selectAll('.form-field')
95862 var enter = container.enter()
95864 .attr('class', function(d) { return 'form-field form-field-' + d.safeid; })
95865 .classed('nowrap', !options.wrap);
95867 if (options.wrap) {
95868 var labelEnter = enter
95870 .attr('class', 'field-label')
95871 .attr('for', function(d) { return 'preset-input-' + d.safeid; });
95873 var textEnter = labelEnter
95875 .attr('class', 'label-text');
95879 .attr('class', 'label-textvalue')
95880 .text(function(d) { return d.label(); });
95884 .attr('class', 'label-textannotation');
95886 if (options.remove) {
95889 .attr('class', 'remove-icon')
95890 .attr('title', t('icons.remove'))
95891 .attr('tabindex', -1)
95892 .call(svgIcon('#iD-operation-delete'));
95895 if (options.revert) {
95898 .attr('class', 'modified-icon')
95899 .attr('title', t('icons.undo'))
95900 .attr('tabindex', -1)
95901 .call(svgIcon((textDirection === 'rtl') ? '#iD-icon-redo' : '#iD-icon-undo'));
95907 container = container
95910 container.select('.field-label > .remove-icon') // propagate bound data
95911 .on('click', remove);
95913 container.select('.field-label > .modified-icon') // propagate bound data
95914 .on('click', revert);
95917 .each(function(d) {
95918 var selection = d3_select(this);
95924 var reference, help;
95926 // instantiate field help
95927 if (options.wrap && field.type === 'restrictions') {
95928 help = uiFieldHelp(context, 'restrictions');
95931 // instantiate tag reference
95932 if (options.wrap && options.info) {
95933 var referenceKey = d.key;
95934 if (d.type === 'multiCombo') { // lookup key without the trailing ':'
95935 referenceKey = referenceKey.replace(/:$/, '');
95938 reference = uiTagReference(d.reference || { key: referenceKey }, context);
95939 if (_state === 'hover') {
95940 reference.showing(false);
95947 // add field help components
95951 .select('.field-label')
95952 .call(help.button);
95955 // add tag reference components
95958 .call(reference.body)
95959 .select('.field-label')
95960 .call(reference.button);
95963 d.impl.tags(_tags);
95968 .classed('locked', _locked)
95969 .classed('modified', isModified())
95970 .classed('present', isPresent());
95973 // show a tip and lock icon if the field is locked
95974 var annotation = container.selectAll('.field-label .label-textannotation');
95975 var icon = annotation.selectAll('.icon')
95976 .data(_locked ? [0]: []);
95983 .attr('class', 'icon')
95985 .attr('xlink:href', '#fas-lock');
95987 container.call(_locked ? _lockedTip : _lockedTip.destroy);
95991 field.state = function(val) {
95992 if (!arguments.length) return _state;
95998 field.tags = function(val) {
95999 if (!arguments.length) return _tags;
96005 field.locked = function(val) {
96006 if (!arguments.length) return _locked;
96012 field.show = function() {
96017 if (field.default && field.key && _tags[field.key] !== field.default) {
96019 t[field.key] = field.default;
96020 dispatch$1.call('change', this, t);
96024 // A shown field has a visible UI, a non-shown field is in the 'Add field' dropdown
96025 field.isShown = function() {
96026 return _show || isPresent();
96030 // An allowed field can appear in the UI or in the 'Add field' dropdown.
96031 // A non-allowed field is hidden from the user altogether
96032 field.isAllowed = function() {
96033 if (!entity || isPresent()) return true; // a field with a value should always display
96035 var latest = context.hasEntity(entity.id); // check the most current copy of the entity
96036 if (!latest) return true;
96038 var require = field.prerequisiteTag;
96039 if (require && require.key) {
96040 var value = latest.tags[require.key];
96041 if (!value) return false;
96043 if (require.valueNot) {
96044 return require.valueNot !== value;
96046 if (require.value) {
96047 return require.value === value;
96055 field.focus = function() {
96057 field.impl.focus();
96062 return utilRebind(field, dispatch$1, 'on');
96065 function uiFormFields(context) {
96066 var moreCombo = uiCombobox(context, 'more-fields').minItems(1);
96067 var _fieldsArr = [];
96068 var _lastPlaceholder = '';
96073 function formFields(selection) {
96074 var allowedFields = _fieldsArr.filter(function(field) { return field.isAllowed(); });
96075 var shown = allowedFields.filter(function(field) { return field.isShown(); });
96076 var notShown = allowedFields.filter(function(field) { return !field.isShown(); });
96078 var container = selection.selectAll('.form-fields-container')
96081 container = container.enter()
96083 .attr('class', 'form-fields-container ' + (_klass || ''))
96087 var fields = container.selectAll('.wrap-form-field')
96088 .data(shown, function(d) { return d.id + (d.entityID || ''); });
96094 var enter = fields.enter()
96096 .attr('class', function(d) { return 'wrap-form-field wrap-form-field-' + d.safeid; });
96104 .each(function(d) {
96111 var moreFields = notShown.map(function(field) {
96112 var label = field.label();
96113 titles.push(label);
96121 var placeholder = titles.slice(0,3).join(', ') + ((titles.length > 3) ? '…' : '');
96124 var more = selection.selectAll('.more-fields')
96125 .data((_state === 'hover' || moreFields.length === 0) ? [] : [0]);
96130 more = more.enter()
96132 .attr('class', 'more-fields')
96134 .text(t('inspector.add_fields'))
96138 var input = more.selectAll('.value')
96144 input = input.enter()
96146 .attr('class', 'value')
96147 .attr('type', 'text')
96148 .attr('placeholder', placeholder)
96153 .call(utilGetSetValue, '')
96156 .on('accept', function (d) {
96157 if (!d) return; // user entered something that was not matched
96158 var field = d.field;
96160 selection.call(formFields); // rerender
96161 if (field.type !== 'semiCombo' && field.type !== 'multiCombo') {
96167 // avoid updating placeholder excessively (triggers style recalc)
96168 if (_lastPlaceholder !== placeholder) {
96169 input.attr('placeholder', placeholder);
96170 _lastPlaceholder = placeholder;
96175 formFields.fieldsArr = function(val) {
96176 if (!arguments.length) return _fieldsArr;
96177 _fieldsArr = val || [];
96181 formFields.state = function(val) {
96182 if (!arguments.length) return _state;
96187 formFields.klass = function(val) {
96188 if (!arguments.length) return _klass;
96197 function uiPresetEditor(context) {
96198 var dispatch$1 = dispatch('change');
96199 var formFields = uiFormFields(context);
96207 function presetEditor(selection) {
96208 selection.call(uiDisclosure(context, 'preset_fields', true)
96209 .title(t('inspector.all_fields'))
96215 function render(selection) {
96217 var entity = context.entity(_entityID);
96218 var geometry = context.geometry(_entityID);
96219 var presets = context.presets();
96223 _preset.fields.forEach(function(field) {
96224 if (field.matchGeometry(geometry)) {
96226 uiField(context, field, entity)
96231 if (entity.isHighwayIntersection(context.graph()) && presets.field('restrictions')) {
96233 uiField(context, presets.field('restrictions'), entity)
96237 var additionalFields = utilArrayUnion(_preset.moreFields, presets.universal());
96238 additionalFields.sort(function(field1, field2) {
96239 return field1.label() > field2.label();
96242 additionalFields.forEach(function(field) {
96243 if (_preset.fields.indexOf(field) === -1) {
96245 uiField(context, field, entity, { show: false })
96250 _fieldsArr.forEach(function(field) {
96252 .on('change', function(t, onInput) {
96253 dispatch$1.call('change', field, t, onInput);
96258 _fieldsArr.forEach(function(field) {
96267 .fieldsArr(_fieldsArr)
96269 .klass('inspector-inner fillL3')
96273 selection.selectAll('.wrap-form-field input')
96274 .on('keydown', function() {
96275 // if user presses enter, and combobox is not active, accept edits..
96276 if (event.keyCode === 13 && d3_select('.combobox').empty()) {
96277 context.enter(modeBrowse(context));
96283 presetEditor.preset = function(val) {
96284 if (!arguments.length) return _preset;
96285 if (_preset && _preset.id === val.id) return presetEditor;
96288 return presetEditor;
96292 presetEditor.state = function(val) {
96293 if (!arguments.length) return _state;
96295 return presetEditor;
96299 presetEditor.tags = function(val) {
96300 if (!arguments.length) return _tags;
96302 // Don't reset _fieldsArr here.
96303 return presetEditor;
96307 presetEditor.entityID = function(val) {
96308 if (!arguments.length) return _entityID;
96309 if (_entityID === val) return presetEditor;
96312 return presetEditor;
96316 return utilRebind(presetEditor, dispatch$1, 'on');
96319 function uiEntityIssues(context) {
96320 var _selection = d3_select(null);
96321 var _activeIssueID;
96324 // Refresh on validated events
96325 context.validator()
96326 .on('validated.entity_issues', function() {
96327 _selection.selectAll('.disclosure-wrap-entity_issues')
96332 .on('focusedIssue.entity_issues', function(issue) {
96333 makeActiveIssue(issue.id);
96337 function entityIssues(selection) {
96338 _selection = selection;
96341 .call(uiDisclosure(context, 'entity_issues', true)
96348 function getIssues() {
96349 return context.validator().getEntityIssues(_entityID, { includeDisabledRules: true });
96352 function makeActiveIssue(issueID) {
96353 _activeIssueID = issueID;
96354 _selection.selectAll('.issue-container')
96355 .classed('active', function(d) { return d.id === _activeIssueID; });
96358 function update() {
96360 var issues = getIssues();
96363 .classed('hide', issues.length === 0);
96365 _selection.selectAll('.hide-toggle-entity_issues span')
96366 .text(t('issues.list_title', { count: issues.length }));
96370 function render(selection) {
96371 var issues = getIssues();
96372 _activeIssueID = issues.length > 0 ? issues[0].id : null;
96375 var containers = selection.selectAll('.issue-container')
96376 .data(issues, function(d) { return d.id; });
96383 var containersEnter = containers.enter()
96385 .attr('class', 'issue-container');
96388 var itemsEnter = containersEnter
96390 .attr('class', function(d) { return 'issue severity-' + d.severity; })
96391 .on('mouseover.highlight', function(d) {
96392 // don't hover-highlight the selected entity
96393 var ids = d.entityIds
96394 .filter(function(e) { return e !== _entityID; });
96396 utilHighlightEntities(ids, true, context);
96398 .on('mouseout.highlight', function(d) {
96399 var ids = d.entityIds
96400 .filter(function(e) { return e !== _entityID; });
96402 utilHighlightEntities(ids, false, context);
96405 var labelsEnter = itemsEnter
96407 .attr('class', 'issue-label')
96408 .on('click', function(d) {
96410 makeActiveIssue(d.id); // expand only the clicked item
96412 var extent = d.extent(context.graph());
96414 var setZoom = Math.max(context.map().zoom(), 19);
96415 context.map().unobscuredCenterZoomEase(extent.center(), setZoom);
96419 var textEnter = labelsEnter
96421 .attr('class', 'issue-text');
96425 .attr('class', 'issue-icon')
96426 .each(function(d) {
96427 var iconName = '#iD-icon-' + (d.severity === 'warning' ? 'alert' : 'error');
96429 .call(svgIcon(iconName));
96434 .attr('class', 'issue-message');
96437 var infoButton = labelsEnter
96439 .attr('class', 'issue-info-button')
96440 .attr('title', t('icons.information'))
96441 .attr('tabindex', -1)
96442 .call(svgIcon('#iD-icon-inspect'));
96445 .on('click', function () {
96446 event.stopPropagation();
96447 event.preventDefault();
96448 this.blur(); // avoid keeping focus on the button - #4641
96450 var container = d3_select(this.parentNode.parentNode.parentNode);
96451 var info = container.selectAll('.issue-info');
96452 var isExpanded = info.classed('expanded');
96458 .style('max-height', '0px')
96459 .style('opacity', '0')
96460 .on('end', function () {
96461 info.classed('expanded', false);
96465 .classed('expanded', true)
96468 .style('max-height', '200px')
96469 .style('opacity', '1')
96470 .on('end', function () {
96471 info.style('max-height', null);
96478 .attr('class', 'issue-fix-list');
96482 .attr('class', 'issue-info')
96483 .style('max-height', '0')
96484 .style('opacity', '0')
96485 .each(function(d) {
96486 if (typeof d.reference === 'function') {
96488 .call(d.reference);
96491 .text(t('inspector.no_documentation_key'));
96497 containers = containers
96498 .merge(containersEnter)
96499 .classed('active', function(d) { return d.id === _activeIssueID; });
96501 containers.selectAll('.issue-message')
96502 .text(function(d) {
96503 return d.message();
96507 var fixLists = containers.selectAll('.issue-fix-list');
96509 var fixes = fixLists.selectAll('.issue-fix-item')
96510 .data(function(d) { return d.fixes ? d.fixes : []; });
96512 var fixesEnter = fixes.enter()
96514 .attr('class', function(d) {
96515 return 'issue-fix-item ' + (d.onClick ? 'actionable' : '');
96517 .on('click', function(d) {
96518 // not all fixes are actionable
96519 if (!d.onClick) return;
96521 // Don't run another fix for this issue within a second of running one
96522 // (Necessary for "Select a feature type" fix. Most fixes should only ever run once)
96523 if (d.issue.dateLastRanFix && new Date() - d.issue.dateLastRanFix < 1000) return;
96524 d.issue.dateLastRanFix = new Date();
96526 // remove hover-highlighting
96527 utilHighlightEntities(d.issue.entityIds.concat(d.entityIds), false, context);
96529 new Promise(function(resolve, reject) {
96530 d.onClick(resolve, reject);
96531 if (!d.onClick.length) {
96532 // if the fix doesn't take any completion parameters then consider it resolved
96537 // revalidate whenever the fix has finished running successfully
96538 context.validator().validate();
96541 .on('mouseover.highlight', function(d) {
96542 utilHighlightEntities(d.entityIds, true, context);
96544 .on('mouseout.highlight', function(d) {
96545 utilHighlightEntities(d.entityIds, false, context);
96550 .attr('class', 'fix-icon')
96551 .each(function(d) {
96552 var iconName = d.icon || 'iD-icon-wrench';
96553 if (iconName.startsWith('maki')) {
96556 d3_select(this).call(svgIcon('#' + iconName));
96561 .attr('class', 'fix-message')
96562 .text(function(d) { return d.title; });
96566 entityIssues.entityID = function(val) {
96567 if (!arguments.length) return _entityID;
96568 if (_entityID !== val) {
96570 _activeIssueID = null;
96572 return entityIssues;
96576 return entityIssues;
96579 function uiEntityEditor(context) {
96580 var dispatch$1 = dispatch('choose');
96581 var _state = 'select';
96582 var _coalesceChanges = false;
96583 var _modified = false;
96584 var _scrolled = false;
96589 var _presetFavorite;
96591 var entityIssues = uiEntityIssues(context);
96592 var quickLinks = uiQuickLinks();
96593 var presetEditor = uiPresetEditor(context).on('change', changeTags);
96594 var rawTagEditor = uiRawTagEditor(context).on('change', changeTags);
96595 var rawMemberEditor = uiRawMemberEditor(context);
96596 var rawMembershipEditor = uiRawMembershipEditor(context);
96598 function entityEditor(selection) {
96599 var entity = context.entity(_entityID);
96600 var tags = Object.assign({}, entity.tags); // shallow copy
96603 var header = selection.selectAll('.header')
96607 var headerEnter = header.enter()
96609 .attr('class', 'header fillL cf');
96613 .attr('class', 'fl preset-reset preset-choose')
96614 .call(svgIcon((textDirection === 'rtl') ? '#iD-icon-forward' : '#iD-icon-backward'));
96618 .attr('class', 'fr preset-close')
96619 .on('click', function() { context.enter(modeBrowse(context)); })
96620 .call(svgIcon(_modified ? '#iD-icon-apply' : '#iD-icon-close'));
96624 .text(t('inspector.edit'));
96628 .merge(headerEnter);
96630 header.selectAll('.preset-reset')
96631 .on('click', function() {
96632 dispatch$1.call('choose', this, _activePreset);
96637 var body = selection.selectAll('.inspector-body')
96641 var bodyEnter = body.enter()
96643 .attr('class', 'inspector-body')
96644 .on('scroll.entity-editor', function() { _scrolled = true; });
96648 .attr('class', 'preset-list-item inspector-inner')
96650 .attr('class', 'preset-list-button-wrap')
96652 .attr('class', 'preset-list-button preset-reset')
96653 .call(tooltip().title(t('inspector.back_tooltip')).placement('bottom'))
96655 .attr('class', 'label')
96657 .attr('class', 'label-inner');
96661 .attr('class', 'preset-quick-links');
96665 .attr('class', 'entity-issues');
96669 .attr('class', 'preset-editor');
96673 .attr('class', 'raw-tag-editor inspector-inner');
96677 .attr('class', 'raw-member-editor inspector-inner');
96681 .attr('class', 'raw-membership-editor inspector-inner');
96685 .attr('type', 'text')
96686 .attr('class', 'key-trap');
96693 if (_presetFavorite) {
96694 body.selectAll('.preset-list-button-wrap')
96695 .call(_presetFavorite.button);
96699 if (_tagReference) {
96700 body.selectAll('.preset-list-button-wrap')
96701 .call(_tagReference.button);
96703 body.selectAll('.preset-list-item')
96704 .call(_tagReference.body);
96707 body.selectAll('.preset-reset')
96708 .on('click', function() {
96709 dispatch$1.call('choose', this, _activePreset);
96712 body.select('.preset-list-item button')
96713 .call(uiPresetIcon(context)
96714 .geometry(context.geometry(_entityID))
96715 .preset(_activePreset)
96718 // NOTE: split on en-dash, not a hypen (to avoid conflict with hyphenated names)
96719 var label = body.select('.label-inner');
96720 var nameparts = label.selectAll('.namepart')
96721 .data(_activePreset.name().split(' – '), function(d) { return d; });
96729 .attr('class', 'namepart')
96730 .text(function(d) { return d; });
96732 // update quick links
96735 label: 'inspector.zoom_to.title',
96736 tooltip: function() {
96737 return uiTooltipHtml(t('inspector.zoom_to.tooltip_feature'), t('inspector.zoom_to.key'));
96739 click: function zoomTo() {
96740 context.mode().zoomToSelected();
96744 body.select('.preset-quick-links')
96745 .call(quickLinks.choices(choices));
96748 // update editor sections
96749 body.select('.entity-issues')
96751 .entityID(_entityID)
96754 body.select('.preset-editor')
96756 .preset(_activePreset)
96757 .entityID(_entityID)
96762 body.select('.raw-tag-editor')
96764 .preset(_activePreset)
96765 .entityID(_entityID)
96770 if (entity.type === 'relation') {
96771 body.select('.raw-member-editor')
96772 .style('display', 'block')
96773 .call(rawMemberEditor
96774 .entityID(_entityID)
96777 body.select('.raw-member-editor')
96778 .style('display', 'none');
96781 body.select('.raw-membership-editor')
96782 .call(rawMembershipEditor
96783 .entityID(_entityID)
96786 body.select('.key-trap')
96787 .on('keydown.key-trap', function() {
96788 // On tabbing, send focus back to the first field on the inspector-body
96789 // (probably the `name` field) #4159
96790 if (event.keyCode === 9 && !event.shiftKey) {
96791 event.preventDefault();
96792 body.select('input').node().focus();
96797 .on('change.entity-editor', historyChanged);
96800 function historyChanged(difference) {
96801 if (_state === 'hide') return;
96802 var significant = !difference ||
96803 difference.didChange.properties ||
96804 difference.didChange.addition ||
96805 difference.didChange.deletion;
96806 if (!significant) return;
96808 var entity = context.hasEntity(_entityID);
96809 var graph = context.graph();
96810 if (!entity) return;
96812 var match = context.presets().match(entity, graph);
96813 var activePreset = entityEditor.preset();
96814 var weakPreset = activePreset &&
96815 Object.keys(activePreset.addTags || {}).length === 0;
96817 // A "weak" preset doesn't set any tags. (e.g. "Address")
96818 // Don't replace a weak preset with a fallback preset (e.g. "Point")
96819 if (!(weakPreset && match.isFallback())) {
96820 entityEditor.preset(match);
96822 entityEditor.modified(_base !== graph);
96823 entityEditor(selection);
96828 // Tag changes that fire on input can all get coalesced into a single
96829 // history operation when the user leaves the field. #2342
96830 function changeTags(changed, onInput) {
96831 var entity = context.entity(_entityID);
96832 var annotation = t('operations.change_tags.annotation');
96833 var tags = Object.assign({}, entity.tags); // shallow copy
96835 for (var k in changed) {
96837 var v = changed[k];
96838 if (v !== undefined || tags.hasOwnProperty(k)) {
96844 tags = utilCleanTags(tags);
96847 if (!fastDeepEqual(entity.tags, tags)) {
96848 if (_coalesceChanges) {
96849 context.overwrite(actionChangeTags(_entityID, tags), annotation);
96851 context.perform(actionChangeTags(_entityID, tags), annotation);
96852 _coalesceChanges = !!onInput;
96856 // if leaving field (blur event), rerun validation
96858 context.validator().validate();
96863 entityEditor.modified = function(val) {
96864 if (!arguments.length) return _modified;
96866 d3_selectAll('button.preset-close use')
96867 .attr('xlink:href', (_modified ? '#iD-icon-apply' : '#iD-icon-close'));
96868 return entityEditor;
96872 entityEditor.state = function(val) {
96873 if (!arguments.length) return _state;
96875 return entityEditor;
96879 entityEditor.entityID = function(val) {
96880 if (!arguments.length) return _entityID;
96881 if (_entityID === val) return entityEditor; // exit early if no change
96884 _base = context.graph();
96885 _coalesceChanges = false;
96887 // reset the scroll to the top of the inspector (warning: triggers reflow)
96889 window.requestIdleCallback(function() {
96890 var body = d3_selectAll('.entity-editor-pane .inspector-body');
96891 if (!body.empty()) {
96893 body.node().scrollTop = 0;
96898 var presetMatch = context.presets().match(context.entity(_entityID), _base);
96900 return entityEditor
96901 .preset(presetMatch)
96906 entityEditor.preset = function(val) {
96907 if (!arguments.length) return _activePreset;
96908 if (val !== _activePreset) {
96909 _activePreset = val;
96910 _tagReference = uiTagReference(_activePreset.reference(context.geometry(_entityID)), context)
96913 _presetFavorite = uiPresetFavoriteButton(_activePreset, context.geometry(_entityID), context);
96914 return entityEditor;
96918 return utilRebind(entityEditor, dispatch$1, 'on');
96921 function uiPresetList(context) {
96922 var dispatch$1 = dispatch('choose');
96924 var _currentPreset;
96925 var _autofocus = false;
96926 var geocoder = services$1.geocoder;
96929 function presetList(selection) {
96930 var entity = context.entity(_entityID);
96931 var geometry = context.geometry(_entityID);
96933 // Treat entities on addr:interpolation lines as points, not vertices (#3241)
96934 if (geometry === 'vertex' && entity.isOnAddressLine(context.graph())) {
96935 geometry = 'point';
96938 var presets = context.presets().matchGeometry(geometry);
96940 selection.html('');
96942 var messagewrap = selection
96944 .attr('class', 'header fillL');
96946 var message = messagewrap
96948 .text(t('inspector.choose'));
96952 .attr('class', 'preset-choose')
96953 .on('click', function() { dispatch$1.call('choose', this, _currentPreset); })
96954 .call(svgIcon((textDirection === 'rtl') ? '#iD-icon-backward' : '#iD-icon-forward'));
96956 function initialKeydown() {
96957 // hack to let delete shortcut work when search is autofocused
96958 if (search.property('value').length === 0 &&
96959 (event.keyCode === utilKeybinding.keyCodes['⌫'] ||
96960 event.keyCode === utilKeybinding.keyCodes['⌦'])) {
96961 event.preventDefault();
96962 event.stopPropagation();
96963 operationDelete([_entityID], context)();
96965 // hack to let undo work when search is autofocused
96966 } else if (search.property('value').length === 0 &&
96967 (event.ctrlKey || event.metaKey) &&
96968 event.keyCode === utilKeybinding.keyCodes.z) {
96969 event.preventDefault();
96970 event.stopPropagation();
96972 } else if (!event.ctrlKey && !event.metaKey) {
96973 // don't check for delete/undo hack on future keydown events
96974 d3_select(this).on('keydown', keydown);
96975 keydown.call(this);
96979 function keydown() {
96981 if (event.keyCode === utilKeybinding.keyCodes['↓'] &&
96982 // if insertion point is at the end of the string
96983 search.node().selectionStart === search.property('value').length) {
96984 event.preventDefault();
96985 event.stopPropagation();
96986 // move focus to the first item in the preset list
96987 var buttons = list.selectAll('.preset-list-button');
96988 if (!buttons.empty()) buttons.nodes()[0].focus();
96992 function keypress() {
96994 var value = search.property('value');
96995 if (event.keyCode === 13 && value.length) {
96996 list.selectAll('.preset-list-item:first-child')
96997 .each(function(d) { d.choose.call(this); });
97001 function inputevent() {
97002 var value = search.property('value');
97003 list.classed('filtered', value.length);
97004 if (value.length) {
97005 var entity = context.entity(_entityID);
97006 if (geocoder && entity) {
97007 var center = entity.extent(context.graph()).center();
97008 geocoder.countryCode(center, function countryCallback(err, countryCode) {
97009 // get the input value again because it may have changed
97010 var currentValue = search.property('value');
97012 if (!currentValue.length) return;
97015 if (!err && countryCode) {
97016 countryCode = countryCode.toLowerCase();
97017 results = presets.search(currentValue, geometry, countryCode);
97019 results = presets.search(currentValue, geometry);
97021 message.text(t('inspector.results', {
97022 n: results.collection.length,
97023 search: currentValue
97025 list.call(drawList, results);
97029 list.call(drawList, context.presets().defaults(geometry, 36));
97030 message.text(t('inspector.choose'));
97034 var searchWrap = selection
97036 .attr('class', 'search-header');
97038 var search = searchWrap
97040 .attr('class', 'preset-search-input')
97041 .attr('placeholder', t('inspector.search'))
97042 .attr('type', 'search')
97044 .on('keydown', initialKeydown)
97045 .on('keypress', keypress)
97046 .on('input', inputevent);
97049 .call(svgIcon('#iD-icon-search', 'pre-text'));
97052 search.node().focus();
97055 var listWrap = selection
97057 .attr('class', 'inspector-body');
97059 var list = listWrap
97061 .attr('class', 'preset-list fillL cf')
97062 .call(drawList, context.presets().defaults(geometry, 36));
97064 context.features().on('change.preset-list', updateForFeatureHiddenState);
97068 function drawList(list, presets) {
97069 var collection = presets.collection.reduce(function(collection, preset) {
97070 if (preset.members) {
97071 collection.push(CategoryItem(preset));
97072 } else if (preset.visible()) {
97073 collection.push(PresetItem(preset));
97078 var items = list.selectAll('.preset-list-item')
97079 .data(collection, function(d) { return d.preset.id; });
97088 .attr('class', function(item) { return 'preset-list-item preset-' + item.preset.id.replace('/', '-'); })
97089 .classed('current', function(item) { return item.preset === _currentPreset; })
97090 .each(function(item) { d3_select(this).call(item); })
97091 .style('opacity', 0)
97093 .style('opacity', 1);
97095 updateForFeatureHiddenState();
97098 function itemKeydown(){
97099 // the actively focused item
97100 var item = d3_select(this.closest('.preset-list-item'));
97101 var parentItem = d3_select(item.node().parentNode.closest('.preset-list-item'));
97103 // arrow down, move focus to the next, lower item
97104 if (event.keyCode === utilKeybinding.keyCodes['↓']) {
97105 event.preventDefault();
97106 event.stopPropagation();
97107 // the next item in the list at the same level
97108 var nextItem = d3_select(item.node().nextElementSibling);
97109 // if there is no next item in this list
97110 if (nextItem.empty()) {
97111 // if there is a parent item
97112 if (!parentItem.empty()) {
97113 // the item is the last item of a sublist,
97114 // select the next item at the parent level
97115 nextItem = d3_select(parentItem.node().nextElementSibling);
97117 // if the focused item is expanded
97118 } else if (d3_select(this).classed('expanded')) {
97119 // select the first subitem instead
97120 nextItem = item.select('.subgrid .preset-list-item:first-child');
97122 if (!nextItem.empty()) {
97123 // focus on the next item
97124 nextItem.select('.preset-list-button').node().focus();
97127 // arrow up, move focus to the previous, higher item
97128 } else if (event.keyCode === utilKeybinding.keyCodes['↑']) {
97129 event.preventDefault();
97130 event.stopPropagation();
97131 // the previous item in the list at the same level
97132 var previousItem = d3_select(item.node().previousElementSibling);
97134 // if there is no previous item in this list
97135 if (previousItem.empty()) {
97136 // if there is a parent item
97137 if (!parentItem.empty()) {
97138 // the item is the first subitem of a sublist select the parent item
97139 previousItem = parentItem;
97141 // if the previous item is expanded
97142 } else if (previousItem.select('.preset-list-button').classed('expanded')) {
97143 // select the last subitem of the sublist of the previous item
97144 previousItem = previousItem.select('.subgrid .preset-list-item:last-child');
97147 if (!previousItem.empty()) {
97148 // focus on the previous item
97149 previousItem.select('.preset-list-button').node().focus();
97151 // the focus is at the top of the list, move focus back to the search field
97152 var search = d3_select(this.closest('.preset-list-pane')).select('.preset-search-input');
97153 search.node().focus();
97156 // arrow left, move focus to the parent item if there is one
97157 } else if (event.keyCode === utilKeybinding.keyCodes[(textDirection === 'rtl') ? '→' : '←']) {
97158 event.preventDefault();
97159 event.stopPropagation();
97160 // if there is a parent item, focus on the parent item
97161 if (!parentItem.empty()) {
97162 parentItem.select('.preset-list-button').node().focus();
97165 // arrow right, choose this item
97166 } else if (event.keyCode === utilKeybinding.keyCodes[(textDirection === 'rtl') ? '←' : '→']) {
97167 event.preventDefault();
97168 event.stopPropagation();
97169 item.datum().choose.call(d3_select(this).node());
97174 function CategoryItem(preset) {
97175 var box, sublist, shown = false;
97177 function item(selection) {
97178 var wrap = selection.append('div')
97179 .attr('class', 'preset-list-button-wrap category');
97182 var isExpanded = d3_select(this).classed('expanded');
97183 var iconName = isExpanded ?
97184 (textDirection === 'rtl' ? '#iD-icon-backward' : '#iD-icon-forward') : '#iD-icon-down';
97186 .classed('expanded', !isExpanded);
97187 d3_select(this).selectAll('div.label-inner svg.icon use')
97188 .attr('href', iconName);
97194 .attr('class', 'preset-list-button')
97195 .classed('expanded', false)
97196 .call(uiPresetIcon(context)
97197 .geometry(context.geometry(_entityID))
97199 .on('click', click)
97200 .on('keydown', function() {
97201 // right arrow, expand the focused item
97202 if (event.keyCode === utilKeybinding.keyCodes[(textDirection === 'rtl') ? '←' : '→']) {
97203 event.preventDefault();
97204 event.stopPropagation();
97205 // if the item isn't expanded
97206 if (!d3_select(this).classed('expanded')) {
97207 // toggle expansion (expand the item)
97210 // left arrow, collapse the focused item
97211 } else if (event.keyCode === utilKeybinding.keyCodes[(textDirection === 'rtl') ? '→' : '←']) {
97212 event.preventDefault();
97213 event.stopPropagation();
97214 // if the item is expanded
97215 if (d3_select(this).classed('expanded')) {
97216 // toggle expansion (collapse the item)
97220 itemKeydown.call(this);
97226 .attr('class', 'label')
97228 .attr('class', 'label-inner');
97232 .attr('class', 'namepart')
97233 .call(svgIcon((textDirection === 'rtl' ? '#iD-icon-backward' : '#iD-icon-forward'), 'inline'))
97235 .html(function() { return preset.name() + '…'; });
97237 box = selection.append('div')
97238 .attr('class', 'subgrid')
97239 .style('max-height', '0px')
97240 .style('opacity', 0);
97243 .attr('class', 'arrow');
97245 sublist = box.append('div')
97246 .attr('class', 'preset-list fillL3');
97250 item.choose = function() {
97251 if (!box || !sublist) return;
97257 .style('opacity', '0')
97258 .style('max-height', '0px')
97259 .style('padding-bottom', '0px');
97262 var members = preset.members.matchGeometry(context.geometry(_entityID));
97263 sublist.call(drawList, members);
97266 .style('opacity', '1')
97267 .style('max-height', 200 + members.collection.length * 190 + 'px')
97268 .style('padding-bottom', '10px');
97272 item.preset = preset;
97277 function PresetItem(preset) {
97278 function item(selection) {
97279 var wrap = selection.append('div')
97280 .attr('class', 'preset-list-button-wrap');
97282 var button = wrap.append('button')
97283 .attr('class', 'preset-list-button')
97284 .call(uiPresetIcon(context)
97285 .geometry(context.geometry(_entityID))
97287 .on('click', item.choose)
97288 .on('keydown', itemKeydown);
97292 .attr('class', 'label')
97294 .attr('class', 'label-inner');
97296 // NOTE: split/join on en-dash, not a hypen (to avoid conflict with fr - nl names in Brussels etc)
97297 label.selectAll('.namepart')
97298 .data(preset.name().split(' – '))
97301 .attr('class', 'namepart')
97302 .text(function(d) { return d; });
97304 wrap.call(item.reference.button);
97305 selection.call(item.reference.body);
97308 item.choose = function() {
97309 if (d3_select(this).classed('disabled')) return;
97311 context.presets().setMostRecent(preset, context.geometry(_entityID));
97313 actionChangePreset(_entityID, _currentPreset, preset),
97314 t('operations.change_tags.annotation')
97317 context.validator().validate(); // rerun validation
97318 dispatch$1.call('choose', this, preset);
97321 item.help = function() {
97322 event.stopPropagation();
97323 item.reference.toggle();
97326 item.preset = preset;
97327 item.reference = uiTagReference(preset.reference(context.geometry(_entityID)), context);
97333 function updateForFeatureHiddenState() {
97334 if (!context.hasEntity(_entityID)) return;
97336 var geometry = context.geometry(_entityID);
97337 var button = d3_selectAll('.preset-list .preset-list-button');
97339 // remove existing tooltips
97340 button.call(tooltip().destroyAny);
97342 button.each(function(item, index) {
97343 var hiddenPresetFeaturesId = context.features().isHiddenPreset(item.preset, geometry);
97344 var isHiddenPreset = !!hiddenPresetFeaturesId && item.preset !== _currentPreset;
97347 .classed('disabled', isHiddenPreset);
97349 if (isHiddenPreset) {
97350 var isAutoHidden = context.features().autoHidden(hiddenPresetFeaturesId);
97351 var tooltipIdSuffix = isAutoHidden ? 'zoom' : 'manual';
97352 var tooltipObj = { features: t('feature.' + hiddenPresetFeaturesId + '.description') };
97353 d3_select(this).call(tooltip()
97354 .title(t('inspector.hidden_preset.' + tooltipIdSuffix, tooltipObj))
97355 .placement(index < 2 ? 'bottom' : 'top')
97361 presetList.autofocus = function(val) {
97362 if (!arguments.length) return _autofocus;
97368 presetList.entityID = function(val) {
97369 if (!arguments.length) return _entityID;
97371 presetList.preset(context.presets().match(context.entity(_entityID), context.graph()));
97376 presetList.preset = function(val) {
97377 if (!arguments.length) return _currentPreset;
97378 _currentPreset = val;
97383 return utilRebind(presetList, dispatch$1, 'on');
97386 function uiInspector(context) {
97387 var presetList = uiPresetList(context);
97388 var entityEditor = uiEntityEditor(context);
97389 var wrap = d3_select(null),
97390 presetPane = d3_select(null),
97391 editorPane = d3_select(null);
97392 var _state = 'select';
97394 var _newFeature = false;
97397 function inspector(selection, newFeature) {
97399 .entityID(_entityID)
97400 .autofocus(_newFeature)
97401 .on('choose', inspector.setPreset);
97405 .entityID(_entityID)
97406 .on('choose', inspector.showList);
97408 wrap = selection.selectAll('.panewrap')
97411 var enter = wrap.enter()
97413 .attr('class', 'panewrap');
97417 .attr('class', 'preset-list-pane pane');
97421 .attr('class', 'entity-editor-pane pane');
97423 wrap = wrap.merge(enter);
97424 presetPane = wrap.selectAll('.preset-list-pane');
97425 editorPane = wrap.selectAll('.entity-editor-pane');
97427 var entity = context.entity(_entityID);
97429 var hasNonGeometryTags = entity.hasNonGeometryTags();
97430 var isTaglessOrIntersectionVertex = entity.geometry(context.graph()) === 'vertex' &&
97431 (!hasNonGeometryTags && !entity.isHighwayIntersection(context.graph()));
97432 var issues = context.validator().getEntityIssues(_entityID);
97433 // start with the preset list if the feature is new and untagged or is an uninteresting vertex
97434 var showPresetList = (newFeature && !hasNonGeometryTags) || (isTaglessOrIntersectionVertex && !issues.length);
97436 if (showPresetList) {
97437 wrap.style('right', '-100%');
97438 presetPane.call(presetList);
97440 wrap.style('right', '0%');
97441 editorPane.call(entityEditor);
97444 var footer = selection.selectAll('.footer')
97447 footer = footer.enter()
97449 .attr('class', 'footer')
97453 .call(uiViewOnOSM(context)
97454 .what(context.hasEntity(_entityID))
97458 inspector.showList = function(preset) {
97460 .styleTween('right', function() { return d3_interpolate('0%', '-100%'); });
97463 .call(presetList.preset(preset).autofocus(true));
97466 inspector.setPreset = function(preset) {
97468 // upon setting multipolygon, go to the area preset list instead of the editor
97469 if (preset.id === 'type/multipolygon') {
97471 .call(presetList.preset(preset).autofocus(true));
97475 .styleTween('right', function() { return d3_interpolate('-100%', '0%'); });
97478 .call(entityEditor.preset(preset));
97483 inspector.state = function(val) {
97484 if (!arguments.length) return _state;
97486 entityEditor.state(_state);
97488 // remove any old field help overlay that might have gotten attached to the inspector
97489 d3_selectAll('.field-help-body').remove();
97495 inspector.entityID = function(val) {
97496 if (!arguments.length) return _entityID;
97502 inspector.newFeature = function(val) {
97503 if (!arguments.length) return _newFeature;
97512 function uiSidebar(context) {
97513 var inspector = uiInspector(context);
97514 var dataEditor = uiDataEditor(context);
97515 var noteEditor = uiNoteEditor(context);
97516 var improveOsmEditor = uiImproveOsmEditor(context);
97517 var keepRightEditor = uiKeepRightEditor(context);
97519 var _wasData = false;
97520 var _wasNote = false;
97521 var _wasQAError = false;
97524 function sidebar(selection) {
97525 var container = d3_select('#id-container');
97526 var minWidth = 280;
97528 var containerWidth;
97531 var resizer = selection
97533 .attr('id', 'sidebar-resizer');
97535 // Set the initial width constraints
97537 .style('min-width', minWidth + 'px')
97538 .style('max-width', '400px')
97539 .style('width', '33.3333%');
97541 resizer.call(d3_drag()
97542 .container(container.node())
97543 .on('start', function() {
97544 // offset from edge of sidebar-resizer
97545 dragOffset = event.sourceEvent.offsetX - 1;
97547 sidebarWidth = selection.node().getBoundingClientRect().width;
97548 containerWidth = container.node().getBoundingClientRect().width;
97549 var widthPct = (sidebarWidth / containerWidth) * 100;
97551 .style('width', widthPct + '%') // lock in current width
97552 .style('max-width', '85%'); // but allow larger widths
97554 resizer.classed('dragging', true);
97556 .on('drag', function() {
97557 var isRTL = (textDirection === 'rtl');
97558 var scaleX = isRTL ? 0 : 1;
97559 var xMarginProperty = isRTL ? 'margin-right' : 'margin-left';
97561 var x = event.x - dragOffset;
97562 sidebarWidth = isRTL ? containerWidth - x : x;
97564 var isCollapsed = selection.classed('collapsed');
97565 var shouldCollapse = sidebarWidth < minWidth;
97567 selection.classed('collapsed', shouldCollapse);
97569 if (shouldCollapse) {
97570 if (!isCollapsed) {
97572 .style(xMarginProperty, '-400px')
97573 .style('width', '400px');
97575 context.ui().onResize([(sidebarWidth - event.dx) * scaleX, 0]);
97579 var widthPct = (sidebarWidth / containerWidth) * 100;
97581 .style(xMarginProperty, null)
97582 .style('width', widthPct + '%');
97585 context.ui().onResize([-sidebarWidth * scaleX, 0]);
97587 context.ui().onResize([-event.dx * scaleX, 0]);
97591 .on('end', function() {
97592 resizer.classed('dragging', false);
97596 var featureListWrap = selection
97598 .attr('class', 'feature-list-pane')
97599 .call(uiFeatureList(context));
97601 var inspectorWrap = selection
97603 .attr('class', 'inspector-hidden inspector-wrap fr');
97606 function hover(datum) {
97607 if (datum && datum.__featurehash__) { // hovering on data
97610 .show(dataEditor.datum(datum));
97612 selection.selectAll('.sidebar-component')
97613 .classed('inspector-hover', true);
97615 } else if (datum instanceof osmNote) {
97616 if (context.mode().id === 'drag-note') return;
97619 var osm = services$1.osm;
97621 datum = osm.getNote(datum.id); // marker may contain stale data - get latest
97625 .show(noteEditor.note(datum));
97627 selection.selectAll('.sidebar-component')
97628 .classed('inspector-hover', true);
97630 } else if (datum instanceof qaError) {
97631 _wasQAError = true;
97633 var errService = services$1[datum.service];
97635 // marker may contain stale data - get latest
97636 datum = errService.getError(datum.id);
97639 // Temporary solution while only two services
97640 var errEditor = (datum.service === 'keepRight') ? keepRightEditor : improveOsmEditor;
97642 d3_selectAll('.qa_error.' + datum.service)
97643 .classed('hover', function(d) { return d.id === datum.id; });
97646 .show(errEditor.error(datum));
97648 selection.selectAll('.sidebar-component')
97649 .classed('inspector-hover', true);
97651 } else if (!_current && (datum instanceof osmEntity)) {
97653 .classed('inspector-hidden', true);
97656 .classed('inspector-hidden', false)
97657 .classed('inspector-hover', true);
97659 if (inspector.entityID() !== datum.id || inspector.state() !== 'hover') {
97662 .entityID(datum.id);
97668 } else if (!_current) {
97670 .classed('inspector-hidden', false);
97672 .classed('inspector-hidden', true);
97676 } else if (_wasData || _wasNote || _wasQAError) {
97679 _wasQAError = false;
97680 d3_selectAll('.note').classed('hover', false);
97681 d3_selectAll('.qa_error').classed('hover', false);
97686 sidebar.hover = throttle(hover, 200);
97689 sidebar.intersects = function(extent) {
97690 var rect = selection.node().getBoundingClientRect();
97691 return extent.intersects([
97692 context.projection.invert([0, rect.height]),
97693 context.projection.invert([rect.width, 0])
97698 sidebar.select = function(id, newFeature) {
97702 var entity = context.entity(id);
97703 // uncollapse the sidebar
97704 if (selection.classed('collapsed')) {
97706 var extent = entity.extent(context.graph());
97707 sidebar.expand(sidebar.intersects(extent));
97712 .classed('inspector-hidden', true);
97715 .classed('inspector-hidden', false)
97716 .classed('inspector-hover', false);
97718 if (inspector.entityID() !== id || inspector.state() !== 'select') {
97722 .newFeature(newFeature);
97725 .call(inspector, newFeature);
97728 sidebar.showPresetList = function() {
97729 inspector.showList(context.presets().match(entity, context.graph()));
97739 sidebar.show = function(component, element) {
97741 .classed('inspector-hidden', true);
97743 .classed('inspector-hidden', true);
97745 if (_current) _current.remove();
97746 _current = selection
97748 .attr('class', 'sidebar-component')
97749 .call(component, element);
97753 sidebar.hide = function() {
97755 .classed('inspector-hidden', false);
97757 .classed('inspector-hidden', true);
97759 if (_current) _current.remove();
97764 sidebar.expand = function(moveMap) {
97765 if (selection.classed('collapsed')) {
97766 sidebar.toggle(moveMap);
97771 sidebar.collapse = function(moveMap) {
97772 if (!selection.classed('collapsed')) {
97773 sidebar.toggle(moveMap);
97778 sidebar.toggle = function(moveMap) {
97780 if (e && e.sourceEvent) {
97781 e.sourceEvent.preventDefault();
97783 e.preventDefault();
97786 // Don't allow sidebar to toggle when the user is in the walkthrough.
97787 if (context.inIntro()) return;
97789 var isCollapsed = selection.classed('collapsed');
97790 var isCollapsing = !isCollapsed;
97791 var isRTL = (textDirection === 'rtl');
97792 var scaleX = isRTL ? 0 : 1;
97793 var xMarginProperty = isRTL ? 'margin-right' : 'margin-left';
97795 sidebarWidth = selection.node().getBoundingClientRect().width;
97797 // switch from % to px
97798 selection.style('width', sidebarWidth + 'px');
97800 var startMargin, endMargin, lastMargin;
97801 if (isCollapsing) {
97802 startMargin = lastMargin = 0;
97803 endMargin = -sidebarWidth;
97805 startMargin = lastMargin = -sidebarWidth;
97809 selection.transition()
97810 .style(xMarginProperty, endMargin + 'px')
97811 .tween('panner', function() {
97812 var i = d3_interpolateNumber(startMargin, endMargin);
97813 return function(t) {
97814 var dx = lastMargin - Math.round(i(t));
97815 lastMargin = lastMargin - dx;
97816 context.ui().onResize(moveMap ? undefined : [dx * scaleX, 0]);
97819 .on('end', function() {
97820 selection.classed('collapsed', isCollapsing);
97822 // switch back from px to %
97823 if (!isCollapsing) {
97824 var containerWidth = container.node().getBoundingClientRect().width;
97825 var widthPct = (sidebarWidth / containerWidth) * 100;
97827 .style(xMarginProperty, null)
97828 .style('width', widthPct + '%');
97833 // toggle the sidebar collapse when double-clicking the resizer
97834 resizer.on('dblclick', sidebar.toggle);
97837 sidebar.showPresetList = function() {};
97838 sidebar.hover = function() {};
97839 sidebar.hover.cancel = function() {};
97840 sidebar.intersects = function() {};
97841 sidebar.select = function() {};
97842 sidebar.show = function() {};
97843 sidebar.hide = function() {};
97844 sidebar.expand = function() {};
97845 sidebar.collapse = function() {};
97846 sidebar.toggle = function() {};
97851 function uiSpinner(context) {
97852 var osm = context.connection();
97855 return function(selection) {
97856 var img = selection
97858 .attr('src', context.imagePath('loader-black.gif'))
97859 .style('opacity', 0);
97863 .on('loading.spinner', function() {
97865 .style('opacity', 1);
97867 .on('loaded.spinner', function() {
97869 .style('opacity', 0);
97875 function uiSplash(context) {
97877 return function(selection) {
97878 if (context.storage('sawSplash'))
97881 context.storage('sawSplash', true);
97883 var modalSelection = uiModal(selection);
97885 modalSelection.select('.modal')
97886 .attr('class', 'modal-splash modal');
97888 var introModal = modalSelection.select('.content')
97890 .attr('class', 'fillL');
97894 .attr('class','modal-section')
97895 .append('h3').text(t('splash.welcome'));
97899 .attr('class','modal-section')
97901 .html(t('splash.text', {
97902 version: context.version,
97903 website: '<a href="http://ideditor.com/">ideditor.com</a>',
97904 github: '<a href="https://github.com/openstreetmap/iD">github.com</a>'
97907 var buttonWrap = introModal
97909 .attr('class', 'modal-actions');
97911 var walkthrough = buttonWrap
97913 .attr('class', 'walkthrough')
97914 .on('click', function() {
97915 context.container().call(uiIntro(context));
97916 modalSelection.close();
97921 .attr('class', 'logo logo-walkthrough')
97923 .attr('xlink:href', '#iD-logo-walkthrough');
97927 .text(t('splash.walkthrough'));
97929 var startEditing = buttonWrap
97931 .attr('class', 'start-editing')
97932 .on('click', modalSelection.close);
97936 .attr('class', 'logo logo-features')
97938 .attr('xlink:href', '#iD-logo-features');
97942 .text(t('splash.start'));
97945 modalSelection.select('button.close')
97946 .attr('class','hide');
97951 function uiStatus(context) {
97952 var osm = context.connection();
97955 return function(selection) {
97958 function update() {
97959 osm.status(function(err, apiStatus) {
97960 selection.html('');
97963 if (apiStatus === 'connectionSwitched') {
97964 // if the connection was just switched, we can't rely on
97965 // the status (we're getting the status of the previous api)
97968 } else if (apiStatus === 'rateLimited') {
97970 .text(t('status.rateLimit'))
97972 .attr('class', 'api-status-login')
97973 .attr('target', '_blank')
97974 .call(svgIcon('#iD-icon-out-link', 'inline'))
97977 .on('click.login', function() {
97978 event.preventDefault();
97979 osm.authenticate();
97982 // eslint-disable-next-line no-warning-comments
97983 // TODO: nice messages for different error types
97984 selection.text(t('status.error'));
97987 } else if (apiStatus === 'readonly') {
97988 selection.text(t('status.readonly'));
97989 } else if (apiStatus === 'offline') {
97990 selection.text(t('status.offline'));
97993 selection.attr('class', 'api-status ' + (err ? 'error' : apiStatus));
97997 osm.on('change', function() { update(selection); });
97999 window.setInterval(update, 90000);
98004 function modeDrawArea(context, wayID, startGraph, baselineGraph, button) {
98012 mode.wayID = wayID;
98014 mode.enter = function() {
98015 var way = context.entity(wayID);
98017 behavior = behaviorDrawWay(context, wayID, undefined, mode, startGraph, baselineGraph)
98018 .tail(t('modes.draw_area.tail'));
98020 var addNode = behavior.addNode;
98022 behavior.addNode = function(node, d) {
98023 var length = way.nodes.length;
98024 var penultimate = length > 2 ? way.nodes[length - 2] : null;
98026 if (node.id === way.first() || node.id === penultimate) {
98033 context.install(behavior);
98037 mode.exit = function() {
98038 context.uninstall(behavior);
98042 mode.selectedIDs = function() {
98047 mode.activeID = function() {
98048 return (behavior && behavior.activeID()) || [];
98055 function modeAddArea(context, mode) {
98056 mode.id = 'add-area';
98058 var behavior = behaviorAddWay(context)
98059 .tail(t('modes.add_area.tail'))
98060 .on('start', start)
98061 .on('startFromWay', startFromWay)
98062 .on('startFromNode', startFromNode);
98064 var defaultTags = { area: 'yes' };
98065 if (mode.preset) defaultTags = mode.preset.setTags(defaultTags, 'area');
98068 function actionClose(wayId) {
98069 return function (graph) {
98070 return graph.replace(graph.entity(wayId).close());
98075 function start(loc) {
98076 var startGraph = context.graph();
98077 var node = osmNode({ loc: loc });
98078 var way = osmWay({ tags: defaultTags });
98081 actionAddEntity(node),
98082 actionAddEntity(way),
98083 actionAddVertex(way.id, node.id),
98084 actionClose(way.id)
98087 context.enter(modeDrawArea(context, way.id, startGraph, context.graph(), mode.button));
98091 function startFromWay(loc, edge) {
98092 var startGraph = context.graph();
98093 var node = osmNode({ loc: loc });
98094 var way = osmWay({ tags: defaultTags });
98097 actionAddEntity(node),
98098 actionAddEntity(way),
98099 actionAddVertex(way.id, node.id),
98100 actionClose(way.id),
98101 actionAddMidpoint({ loc: loc, edge: edge }, node)
98104 context.enter(modeDrawArea(context, way.id, startGraph, context.graph(), mode.button));
98108 function startFromNode(node) {
98109 var startGraph = context.graph();
98110 var way = osmWay({ tags: defaultTags });
98113 actionAddEntity(way),
98114 actionAddVertex(way.id, node.id),
98115 actionClose(way.id)
98118 context.enter(modeDrawArea(context, way.id, startGraph, context.graph(), mode.button));
98122 mode.enter = function() {
98123 context.install(behavior);
98127 mode.exit = function() {
98128 context.uninstall(behavior);
98135 function modeAddLine(context, mode) {
98136 mode.id = 'add-line';
98138 var behavior = behaviorAddWay(context)
98139 .tail(t('modes.add_line.tail'))
98140 .on('start', start)
98141 .on('startFromWay', startFromWay)
98142 .on('startFromNode', startFromNode);
98144 var defaultTags = {};
98145 if (mode.preset) defaultTags = mode.preset.setTags(defaultTags, 'line');
98148 function start(loc) {
98149 var startGraph = context.graph();
98150 var node = osmNode({ loc: loc });
98151 var way = osmWay({ tags: defaultTags });
98154 actionAddEntity(node),
98155 actionAddEntity(way),
98156 actionAddVertex(way.id, node.id)
98159 context.enter(modeDrawLine(context, way.id, startGraph, context.graph(), mode.button));
98163 function startFromWay(loc, edge) {
98164 var startGraph = context.graph();
98165 var node = osmNode({ loc: loc });
98166 var way = osmWay({ tags: defaultTags });
98169 actionAddEntity(node),
98170 actionAddEntity(way),
98171 actionAddVertex(way.id, node.id),
98172 actionAddMidpoint({ loc: loc, edge: edge }, node)
98175 context.enter(modeDrawLine(context, way.id, startGraph, context.graph(), mode.button));
98179 function startFromNode(node) {
98180 var startGraph = context.graph();
98181 var way = osmWay({ tags: defaultTags });
98184 actionAddEntity(way),
98185 actionAddVertex(way.id, node.id)
98188 context.enter(modeDrawLine(context, way.id, startGraph, context.graph(), mode.button));
98192 mode.enter = function() {
98193 context.install(behavior);
98197 mode.exit = function() {
98198 context.uninstall(behavior);
98204 function modeAddPoint(context, mode) {
98206 mode.id = 'add-point';
98208 var behavior = behaviorDraw(context)
98209 .tail(t('modes.add_point.tail'))
98211 .on('clickWay', addWay)
98212 .on('clickNode', addNode)
98213 .on('cancel', cancel)
98214 .on('finish', cancel);
98216 var defaultTags = {};
98217 if (mode.preset) defaultTags = mode.preset.setTags(defaultTags, 'point');
98220 function add(loc) {
98221 var node = osmNode({ loc: loc, tags: defaultTags });
98224 actionAddEntity(node),
98225 t('operations.add.annotation.point')
98228 enterSelectMode(node);
98232 function addWay(loc, edge) {
98233 var node = osmNode({ tags: defaultTags });
98236 actionAddMidpoint({loc: loc, edge: edge}, node),
98237 t('operations.add.annotation.vertex')
98240 enterSelectMode(node);
98243 function enterSelectMode(node) {
98245 modeSelect(context, [node.id]).newFeature(true)
98250 function addNode(node) {
98251 if (Object.keys(defaultTags).length === 0) {
98252 enterSelectMode(node);
98256 var tags = Object.assign({}, node.tags); // shallow copy
98257 for (var key in defaultTags) {
98258 tags[key] = defaultTags[key];
98262 actionChangeTags(node.id, tags),
98263 t('operations.add.annotation.point')
98266 enterSelectMode(node);
98270 function cancel() {
98271 context.enter(modeBrowse(context));
98275 mode.enter = function() {
98276 context.install(behavior);
98280 mode.exit = function() {
98281 context.uninstall(behavior);
98288 function modeAddNote(context) {
98292 title: t('modes.add_note.title'),
98293 description: t('modes.add_note.description'),
98294 key: t('modes.add_note.key')
98297 var behavior = behaviorDraw(context)
98298 .tail(t('modes.add_note.tail'))
98300 .on('cancel', cancel)
98301 .on('finish', cancel);
98304 function add(loc) {
98305 var osm = services$1.osm;
98308 var note = osmNote({ loc: loc, status: 'open', comments: [] });
98309 osm.replaceNote(note);
98311 // force a reraw (there is no history change that would otherwise do this)
98312 context.pan([0,0]);
98315 .selectedNoteID(note.id)
98316 .enter(modeSelectNote(context, note.id).newFeature(true));
98320 function cancel() {
98321 context.enter(modeBrowse(context));
98325 mode.enter = function() {
98326 context.install(behavior);
98330 mode.exit = function() {
98331 context.uninstall(behavior);
98338 function uiConflicts(context) {
98339 var dispatch$1 = dispatch('cancel', 'save');
98340 var keybinding = utilKeybinding('conflicts');
98345 function keybindingOn() {
98346 d3_select(document)
98347 .call(keybinding.on('⎋', cancel, true));
98350 function keybindingOff() {
98351 d3_select(document)
98352 .call(keybinding.unbind);
98355 function tryAgain() {
98357 dispatch$1.call('save');
98360 function cancel() {
98362 dispatch$1.call('cancel');
98366 function conflicts(selection) {
98369 var headerEnter = selection.selectAll('.header')
98373 .attr('class', 'header fillL');
98377 .attr('class', 'fr')
98378 .on('click', cancel)
98379 .call(svgIcon('#iD-icon-close'));
98383 .text(t('save.conflict.header'));
98385 var bodyEnter = selection.selectAll('.body')
98389 .attr('class', 'body fillL');
98391 var conflictsHelpEnter = bodyEnter
98393 .attr('class', 'conflicts-help')
98394 .text(t('save.conflict.help'));
98397 // Download changes link
98398 var detected = utilDetect();
98399 var changeset = new osmChangeset();
98401 delete changeset.id; // Export without changeset_id
98403 var data = JXON.stringify(changeset.osmChangeJXON(_origChanges));
98404 var blob = new Blob([data], { type: 'text/xml;charset=utf-8;' });
98405 var fileName = 'changes.osc';
98407 var linkEnter = conflictsHelpEnter.selectAll('.download-changes')
98409 .attr('class', 'download-changes');
98411 if (detected.download) { // All except IE11 and Edge
98412 linkEnter // download the data as a file
98413 .attr('href', window.URL.createObjectURL(blob))
98414 .attr('download', fileName);
98416 } else { // IE11 and Edge
98417 linkEnter // open data uri in a new tab
98418 .attr('target', '_blank')
98419 .on('click.download', function() {
98420 navigator.msSaveBlob(blob, fileName);
98425 .call(svgIcon('#iD-icon-load', 'inline'))
98427 .text(t('save.conflict.download_changes'));
98432 .attr('class', 'conflict-container fillL3')
98433 .call(showConflict, 0);
98437 .attr('class', 'conflicts-done')
98438 .attr('opacity', 0)
98439 .style('display', 'none')
98440 .text(t('save.conflict.done'));
98442 var buttonsEnter = bodyEnter
98444 .attr('class','buttons col12 joined conflicts-buttons');
98448 .attr('disabled', _conflictList.length > 1)
98449 .attr('class', 'action conflicts-button col6')
98450 .text(t('save.title'))
98451 .on('click.try_again', tryAgain);
98455 .attr('class', 'secondary-action conflicts-button col6')
98456 .text(t('confirm.cancel'))
98457 .on('click.cancel', cancel);
98461 function showConflict(selection, index) {
98462 index = utilWrap(index, _conflictList.length);
98464 var parent = d3_select(selection.node().parentNode);
98466 // enable save button if this is the last conflict being reviewed..
98467 if (index === _conflictList.length - 1) {
98468 window.setTimeout(function() {
98469 parent.select('.conflicts-button')
98470 .attr('disabled', null);
98472 parent.select('.conflicts-done')
98474 .attr('opacity', 1)
98475 .style('display', 'block');
98479 var conflict = selection
98480 .selectAll('.conflict')
98481 .data([_conflictList[index]]);
98486 var conflictEnter = conflict.enter()
98488 .attr('class', 'conflict');
98492 .attr('class', 'conflict-count')
98493 .text(t('save.conflict.count', { num: index + 1, total: _conflictList.length }));
98497 .attr('class', 'conflict-description')
98499 .text(function(d) { return d.name; })
98500 .on('click', function(d) {
98501 event.preventDefault();
98502 zoomToEntity(d.id);
98505 var details = conflictEnter
98507 .attr('class', 'conflict-detail-container');
98511 .attr('class', 'conflict-detail-list')
98513 .data(function(d) { return d.details || []; })
98516 .attr('class', 'conflict-detail-item')
98517 .html(function(d) { return d; });
98521 .attr('class', 'conflict-choices')
98526 .attr('class', 'conflict-nav-buttons joined cf')
98527 .selectAll('button')
98528 .data(['previous', 'next'])
98531 .text(function(d) { return t('save.conflict.' + d); })
98532 .attr('class', 'conflict-nav-button action col6')
98533 .attr('disabled', function(d, i) {
98534 return (i === 0 && index === 0) ||
98535 (i === 1 && index === _conflictList.length - 1) || null;
98537 .on('click', function(d, i) {
98538 event.preventDefault();
98540 var container = parent.selectAll('.conflict-container');
98541 var sign = (i === 0 ? -1 : 1);
98544 .selectAll('.conflict')
98548 .call(showConflict, index + sign);
98554 function addChoices(selection) {
98555 var choices = selection
98557 .attr('class', 'layer-list')
98559 .data(function(d) { return d.choices || []; });
98562 var choicesEnter = choices.enter()
98564 .attr('class', 'layer');
98566 var labelEnter = choicesEnter
98571 .attr('type', 'radio')
98572 .attr('name', function(d) { return d.id; })
98573 .on('change', function(d, i) {
98574 var ul = this.parentNode.parentNode.parentNode;
98575 ul.__data__.chosen = i;
98581 .text(function(d) { return d.text; });
98586 .each(function(d, i) {
98587 var ul = this.parentNode;
98588 if (ul.__data__.chosen === i) {
98595 function choose(ul, datum) {
98596 if (event) event.preventDefault();
98600 .classed('active', function(d) { return d === datum; })
98601 .selectAll('input')
98602 .property('checked', function(d) { return d === datum; });
98604 var extent = geoExtent();
98607 entity = context.graph().hasEntity(datum.id);
98608 if (entity) extent._extend(entity.extent(context.graph()));
98612 entity = context.graph().hasEntity(datum.id);
98613 if (entity) extent._extend(entity.extent(context.graph()));
98615 zoomToEntity(datum.id, extent);
98619 function zoomToEntity(id, extent) {
98620 context.surface().selectAll('.hover')
98621 .classed('hover', false);
98623 var entity = context.graph().hasEntity(id);
98626 context.map().trimmedExtent(extent);
98628 context.map().zoomToEase(entity);
98630 context.surface().selectAll(utilEntityOrMemberSelector([entity.id], context.graph()))
98631 .classed('hover', true);
98636 // The conflict list should be an array of objects like:
98639 // name: entityName(local),
98640 // details: merge.conflicts(),
98643 // choice(id, keepMine, forceLocal),
98644 // choice(id, keepTheirs, forceRemote)
98647 conflicts.conflictList = function(_) {
98648 if (!arguments.length) return _conflictList;
98654 conflicts.origChanges = function(_) {
98655 if (!arguments.length) return _origChanges;
98661 return utilRebind(conflicts, dispatch$1, 'on');
98664 function uiChangesetEditor(context) {
98665 var dispatch$1 = dispatch('change');
98666 var formFields = uiFormFields(context);
98667 var commentCombo = uiCombobox(context, 'comment').caseSensitive(true);
98673 function changesetEditor(selection) {
98678 function render(selection) {
98679 var initial = false;
98683 var presets = context.presets();
98686 uiField(context, presets.field('comment'), null, { show: true, revert: false }),
98687 uiField(context, presets.field('source'), null, { show: false, revert: false }),
98688 uiField(context, presets.field('hashtags'), null, { show: false, revert: false }),
98691 _fieldsArr.forEach(function(field) {
98693 .on('change', function(t, onInput) {
98694 dispatch$1.call('change', field, t, onInput);
98699 _fieldsArr.forEach(function(field) {
98706 .call(formFields.fieldsArr(_fieldsArr));
98710 var commentField = selection.select('#preset-input-comment');
98711 var commentNode = commentField.node();
98714 commentNode.focus();
98715 commentNode.select();
98718 // trigger a 'blur' event so that comment field can be cleaned
98719 // and checked for hashtags, even if retrieved from localstorage
98720 utilTriggerEvent(commentField, 'blur');
98722 var osm = context.connection();
98724 osm.userChangesets(function (err, changesets) {
98727 var comments = changesets.map(function(changeset) {
98728 var comment = changeset.tags.comment;
98729 return comment ? { title: comment, value: comment } : null;
98730 }).filter(Boolean);
98734 .data(utilArrayUniqBy(comments, 'title'))
98740 // Add warning if comment mentions Google
98741 var hasGoogle = _tags.comment.match(/google/i);
98742 var commentWarning = selection.select('.form-field-comment').selectAll('.comment-warning')
98743 .data(hasGoogle ? [0] : []);
98745 commentWarning.exit()
98748 .style('opacity', 0)
98751 var commentEnter = commentWarning.enter()
98752 .insert('div', '.tag-reference-body')
98753 .attr('class', 'field-warning comment-warning')
98754 .style('opacity', 0);
98758 .attr('target', '_blank')
98759 .attr('tabindex', -1)
98760 .call(svgIcon('#iD-icon-alert', 'inline'))
98761 .attr('href', t('commit.google_warning_link'))
98763 .text(t('commit.google_warning'));
98768 .style('opacity', 1);
98772 changesetEditor.tags = function(_) {
98773 if (!arguments.length) return _tags;
98775 // Don't reset _fieldsArr here.
98776 return changesetEditor;
98780 changesetEditor.changesetID = function(_) {
98781 if (!arguments.length) return _changesetID;
98782 if (_changesetID === _) return changesetEditor;
98785 return changesetEditor;
98789 return utilRebind(changesetEditor, dispatch$1, 'on');
98792 function uiCommitChanges(context) {
98793 var detected = utilDetect();
98797 function commitChanges(selection) {
98798 var history = context.history();
98799 var summary = history.difference().summary();
98801 var container = selection.selectAll('.modal-section.commit-section')
98804 var containerEnter = container.enter()
98806 .attr('class', 'commit-section modal-section fillL2');
98810 .text(t('commit.changes', { count: summary.length }));
98814 .attr('class', 'changeset-list');
98816 container = containerEnter
98820 var items = container.select('ul').selectAll('li')
98823 var itemsEnter = items.enter()
98825 .attr('class', 'change-item');
98828 .each(function(d) {
98830 .call(svgIcon('#iD-icon-' + d.entity.geometry(d.graph), 'pre-text ' + d.changeType));
98835 .attr('class', 'change-type')
98836 .text(function(d) { return t('commit.' + d.changeType) + ' '; });
98840 .attr('class', 'entity-type')
98841 .text(function(d) {
98842 var matched = context.presets().match(d.entity, d.graph);
98843 return (matched && matched.name()) || utilDisplayType(d.entity.id);
98848 .attr('class', 'entity-name')
98849 .text(function(d) {
98850 var name = utilDisplayName(d.entity) || '',
98855 return string += ' ' + name;
98859 .style('opacity', 0)
98861 .style('opacity', 1);
98867 .on('mouseover', mouseover)
98868 .on('mouseout', mouseout)
98869 .on('click', click);
98872 // Download changeset link
98873 var changeset = new osmChangeset().update({ id: undefined });
98874 var changes = history.changes(actionDiscardTags(history.difference()));
98876 delete changeset.id; // Export without chnageset_id
98878 var data = JXON.stringify(changeset.osmChangeJXON(changes));
98879 var blob = new Blob([data], {type: 'text/xml;charset=utf-8;'});
98880 var fileName = 'changes.osc';
98882 var linkEnter = container.selectAll('.download-changes')
98886 .attr('class', 'download-changes');
98888 if (detected.download) { // All except IE11 and Edge
98889 linkEnter // download the data as a file
98890 .attr('href', window.URL.createObjectURL(blob))
98891 .attr('download', fileName);
98893 } else { // IE11 and Edge
98894 linkEnter // open data uri in a new tab
98895 .attr('target', '_blank')
98896 .on('click.download', function() {
98897 navigator.msSaveBlob(blob, fileName);
98902 .call(svgIcon('#iD-icon-load', 'inline'))
98904 .text(t('commit.download_changes'));
98907 function mouseover(d) {
98909 context.surface().selectAll(
98910 utilEntityOrMemberSelector([d.entity.id], context.graph())
98911 ).classed('hover', true);
98916 function mouseout() {
98917 context.surface().selectAll('.hover')
98918 .classed('hover', false);
98922 function click(change) {
98923 if (change.changeType === 'deleted') {
98926 var entity = change.entity;
98927 _entityID = change.entity.id;
98928 context.map().zoomToEase(entity);
98929 context.surface().selectAll(utilEntityOrMemberSelector([_entityID], context.graph()))
98930 .classed('hover', true);
98936 commitChanges.entityID = function(_) {
98937 if (!arguments.length) return _entityID;
98939 return commitChanges;
98943 return commitChanges;
98946 function uiCommitWarnings(context) {
98948 function commitWarnings(selection) {
98949 var issuesBySeverity = context.validator()
98950 .getIssuesBySeverity({ what: 'edited', where: 'all', includeDisabledRules: true });
98952 for (var severity in issuesBySeverity) {
98953 var issues = issuesBySeverity[severity];
98954 var section = severity + '-section';
98955 var issueItem = severity + '-item';
98957 var container = selection.selectAll('.' + section)
98958 .data(issues.length ? [0] : []);
98963 var containerEnter = container.enter()
98965 .attr('class', 'modal-section ' + section + ' fillL2');
98969 .text(severity === 'warning' ? t('commit.warnings') : t('commit.errors'));
98973 .attr('class', 'changeset-list');
98975 container = containerEnter
98979 var items = container.select('ul').selectAll('li')
98980 .data(issues, function(d) { return d.id; });
98985 var itemsEnter = items.enter()
98987 .attr('class', issueItem);
98990 .call(svgIcon('#iD-icon-alert', 'pre-text'));
98994 .attr('class', 'issue-message');
98996 itemsEnter.filter(function(d) { return d.tooltip; })
98998 .title(function(d) { return d.tooltip; })
99005 items.selectAll('.issue-message')
99006 .text(function(d) {
99007 return d.message();
99011 .on('mouseover', function(d) {
99013 context.surface().selectAll(
99014 utilEntityOrMemberSelector(
99018 ).classed('hover', true);
99021 .on('mouseout', function() {
99022 context.surface().selectAll('.hover')
99023 .classed('hover', false);
99025 .on('click', function(d) {
99026 context.validator().focusIssue(d);
99032 return commitWarnings;
99036 var readOnlyTags = [
99037 /^changesets_count$/,
99046 // treat most punctuation (except -, _, +, &) as hashtag delimiters - #4398
99047 // from https://stackoverflow.com/a/25575009
99048 var hashtagRegex = /(#[^\u2000-\u206F\u2E00-\u2E7F\s\\'!"#$%()*,.\/:;<=>?@\[\]^`{|}~]+)/g;
99051 function uiCommit(context) {
99052 var dispatch$1 = dispatch('cancel', 'save');
99056 var changesetEditor = uiChangesetEditor(context)
99057 .on('change', changeTags);
99058 var rawTagEditor = uiRawTagEditor(context)
99059 .on('change', changeTags);
99060 var commitChanges = uiCommitChanges(context);
99061 var commitWarnings = uiCommitWarnings(context);
99064 function commit(selection) {
99065 _selection = selection;
99067 var osm = context.connection();
99070 // expire stored comment, hashtags, source after cutoff datetime - #3947 #4899
99071 var commentDate = +context.storage('commentDate') || 0;
99072 var currDate = Date.now();
99073 var cutoff = 2 * 86400 * 1000; // 2 days
99074 if (commentDate > currDate || currDate - commentDate > cutoff) {
99075 context.storage('comment', null);
99076 context.storage('hashtags', null);
99077 context.storage('source', null);
99081 // Initialize changeset if one does not exist yet.
99082 // Also pull values from local storage.
99083 if (!_changeset$1) {
99084 var detected = utilDetect();
99086 comment: context.storage('comment') || '',
99087 created_by: ('iD ' + context.version).substr(0, 255),
99088 host: detected.host.substr(0, 255),
99089 locale: detected.locale.substr(0, 255)
99092 // call findHashtags initially - this will remove stored
99093 // hashtags if any hashtags are found in the comment - #4304
99094 findHashtags(tags, true);
99096 var hashtags = context.storage('hashtags');
99098 tags.hashtags = hashtags;
99101 var source = context.storage('source');
99103 tags.source = source;
99105 var photoOverlaysUsed = context.history().photoOverlaysUsed();
99106 if (photoOverlaysUsed.length) {
99107 var sources = (tags.source || '').split(';');
99109 // include this tag for any photo layer
99110 if (sources.indexOf('streetlevel imagery') === -1) {
99111 sources.push('streetlevel imagery');
99114 // add the photo overlays used during editing as sources
99115 photoOverlaysUsed.forEach(function(photoOverlay) {
99116 if (sources.indexOf(photoOverlay) === -1) {
99117 sources.push(photoOverlay);
99121 tags.source = sources.join(';').substr(0, 255);
99124 _changeset$1 = new osmChangeset({ tags: tags });
99127 tags = Object.assign({}, _changeset$1.tags); // shallow copy
99129 // assign tags for imagery used
99130 var imageryUsed = context.history().imageryUsed().join(';').substr(0, 255);
99131 tags.imagery_used = imageryUsed || 'None';
99133 // assign tags for closed issues and notes
99134 var osmClosed = osm.getClosedIDs();
99135 if (osmClosed.length) {
99136 tags['closed:note'] = osmClosed.join(';').substr(0, 255);
99138 if (services$1.keepRight) {
99139 var krClosed = services$1.keepRight.getClosedIDs();
99140 if (krClosed.length) {
99141 tags['closed:keepright'] = krClosed.join(';').substr(0, 255);
99144 if (services$1.improveOSM) {
99145 var iOsmClosed = services$1.improveOSM.getClosedIDs();
99146 if (iOsmClosed.length) {
99147 tags['closed:improveosm'] = iOsmClosed.join(';').substr(0, 255);
99151 // remove existing warning counts
99152 for (var key in tags) {
99153 if (key.match(/^warnings:/)) {
99158 // add counts of warnings generated by the user's edits
99159 var warnings = context.validator()
99160 .getIssuesBySeverity({ what: 'edited', where: 'all', includeIgnored: true, includeDisabledRules: true }).warning;
99162 var warningsByType = utilArrayGroupBy(warnings, 'type');
99163 for (var warningType in warningsByType) {
99164 var warningsOfType = warningsByType[warningType];
99165 if (warningsOfType[0].subtype) {
99166 var warningsBySubtype = utilArrayGroupBy(warningsOfType, 'subtype');
99167 for (var warningSubtype in warningsBySubtype) {
99168 var warningsOfSubtype = warningsBySubtype[warningSubtype];
99169 tags['warnings:' + warningType + ':' + warningSubtype] = warningsOfSubtype.length.toString();
99172 tags['warnings:' + warningType] = warningsOfType.length.toString();
99177 _changeset$1 = _changeset$1.update({ tags: tags });
99179 var header = selection.selectAll('.header')
99182 var headerTitle = header.enter()
99184 .attr('class', 'header fillL header-container');
99188 .attr('class', 'header-block header-block-outer');
99192 .attr('class', 'header-block')
99194 .text(t('commit.title'));
99198 .attr('class', 'header-block header-block-outer header-block-close')
99200 .attr('class', 'close')
99201 .on('click', function() { context.enter(modeBrowse(context)); })
99202 .call(svgIcon('#iD-icon-close'));
99204 var body = selection.selectAll('.body')
99207 body = body.enter()
99209 .attr('class', 'body')
99213 // Changeset Section
99214 var changesetSection = body.selectAll('.changeset-editor')
99217 changesetSection = changesetSection.enter()
99219 .attr('class', 'modal-section changeset-editor')
99220 .merge(changesetSection);
99223 .call(changesetEditor
99224 .changesetID(_changeset$1.id)
99230 body.call(commitWarnings);
99233 // Upload Explanation
99234 var saveSection = body.selectAll('.save-section')
99237 saveSection = saveSection.enter()
99239 .attr('class','modal-section save-section fillL cf')
99240 .merge(saveSection);
99242 var prose = saveSection.selectAll('.commit-info')
99245 if (prose.enter().size()) { // first time, make sure to update user details in prose
99246 _userDetails = null;
99249 prose = prose.enter()
99251 .attr('class', 'commit-info')
99252 .text(t('commit.upload_explanation'))
99255 // always check if this has changed, but only update prose.html()
99256 // if needed, because it can trigger a style recalculation
99257 osm.userDetails(function(err, user) {
99260 if (_userDetails === user) return; // no change
99261 _userDetails = user;
99263 var userLink = d3_select(document.createElement('div'));
99265 if (user.image_url) {
99268 .attr('src', user.image_url)
99269 .attr('class', 'icon pre-text user-icon');
99274 .attr('class', 'user-info')
99275 .text(user.display_name)
99276 .attr('href', osm.userURL(user.display_name))
99277 .attr('tabindex', -1)
99278 .attr('target', '_blank');
99281 .html(t('commit.upload_explanation_with_user', { user: userLink.html() }));
99286 var requestReview = saveSection.selectAll('.request-review')
99290 var requestReviewEnter = requestReview.enter()
99292 .attr('class', 'request-review');
99294 var labelEnter = requestReviewEnter
99296 .attr('for', 'commit-input-request-review');
99300 .attr('type', 'checkbox')
99301 .attr('id', 'commit-input-request-review');
99305 .text(t('commit.request_review'));
99308 requestReview = requestReview
99309 .merge(requestReviewEnter);
99311 var requestReviewInput = requestReview.selectAll('input')
99312 .property('checked', isReviewRequested(_changeset$1.tags))
99313 .on('change', toggleRequestReview);
99317 var buttonSection = saveSection.selectAll('.buttons')
99321 var buttonEnter = buttonSection.enter()
99323 .attr('class', 'buttons fillL cf');
99327 .attr('class', 'secondary-action button cancel-button')
99329 .attr('class', 'label')
99330 .text(t('commit.cancel'));
99332 var uploadButton = buttonEnter
99334 .attr('class', 'action button save-button');
99336 uploadButton.append('span')
99337 .attr('class', 'label')
99338 .text(t('commit.save'));
99340 var uploadBlockerTooltipText = getUploadBlockerMessage();
99343 buttonSection = buttonSection
99344 .merge(buttonEnter);
99346 buttonSection.selectAll('.cancel-button')
99347 .on('click.cancel', function() {
99348 var selectedID = commitChanges.entityID();
99349 dispatch$1.call('cancel', this, selectedID);
99352 buttonSection.selectAll('.save-button')
99353 .classed('disabled', uploadBlockerTooltipText !== null)
99354 .on('click.save', function() {
99355 if (!d3_select(this).classed('disabled')) {
99356 this.blur(); // avoid keeping focus on the button - #4641
99357 dispatch$1.call('save', this, _changeset$1);
99361 // remove any existing tooltip
99362 tooltip().destroyAny(buttonSection.selectAll('.save-button'));
99364 if (uploadBlockerTooltipText) {
99365 buttonSection.selectAll('.save-button')
99366 .call(tooltip().title(uploadBlockerTooltipText).placement('top'));
99370 var tagSection = body.selectAll('.tag-section.raw-tag-editor')
99373 tagSection = tagSection.enter()
99375 .attr('class', 'modal-section tag-section raw-tag-editor')
99376 .merge(tagSection);
99378 var expanded = !tagSection.selectAll('a.hide-toggle.expanded').empty();
99381 .expanded(expanded)
99382 .readOnlyTags(readOnlyTags)
99383 .tags(Object.assign({}, _changeset$1.tags)) // shallow copy
99388 body.call(commitChanges);
99391 function toggleRequestReview() {
99392 var rr = requestReviewInput.property('checked');
99393 updateChangeset({ review_requested: (rr ? 'yes' : undefined) });
99395 var expanded = !tagSection.selectAll('a.hide-toggle.expanded').empty();
99398 .expanded(expanded)
99399 .readOnlyTags(readOnlyTags)
99400 .tags(Object.assign({}, _changeset$1.tags)) // shallow copy
99406 function getUploadBlockerMessage() {
99407 var errors = context.validator()
99408 .getIssuesBySeverity({ what: 'edited', where: 'all' }).error;
99410 if (errors.length) {
99411 return t('commit.outstanding_errors_message', { count: errors.length });
99414 var n = d3_select('#preset-input-comment').node();
99415 var hasChangesetComment = n && n.value.length > 0;
99416 if (!hasChangesetComment) {
99417 return t('commit.comment_needed_message');
99424 function changeTags(changed, onInput) {
99425 if (changed.hasOwnProperty('comment')) {
99426 if (changed.comment === undefined) {
99427 changed.comment = '';
99430 context.storage('comment', changed.comment);
99431 context.storage('commentDate', Date.now());
99434 if (changed.hasOwnProperty('source')) {
99435 if (changed.source === undefined) {
99436 context.storage('source', null);
99437 } else if (!onInput) {
99438 context.storage('source', changed.source);
99439 context.storage('commentDate', Date.now());
99443 updateChangeset(changed, onInput);
99446 _selection.call(commit);
99451 function findHashtags(tags, commentOnly) {
99452 var inComment = commentTags();
99453 var inHashTags = hashTags();
99455 if (inComment !== null) { // when hashtags are detected in comment...
99456 context.storage('hashtags', null); // always remove stored hashtags - #4304
99457 if (commentOnly) { inHashTags = []; } // optionally override hashtags field
99460 // keep only one copy of the tags
99461 var all = new Set();
99463 inComment.forEach(checkTag);
99464 inHashTags.forEach(checkTag);
99467 // Compare tags as lowercase strings, but keep original case tags
99468 function checkTag(s) {
99469 var compare = s.toLowerCase();
99470 if (!all.has(compare)) {
99476 // Extract hashtags from `comment`
99477 function commentTags() {
99478 var matches = (tags.comment || '')
99479 .replace(/http\S*/g, '') // drop anything that looks like a URL - #4289
99480 .match(hashtagRegex);
99482 return (matches || []);
99485 // Extract and clean hashtags from `hashtags`
99486 function hashTags() {
99487 var matches = (tags.hashtags || '')
99489 .map(function (s) {
99490 if (s[0] !== '#') { s = '#' + s; } // prepend '#'
99491 var matched = s.match(hashtagRegex);
99492 return matched && matched[0];
99493 }).filter(Boolean); // exclude falsy
99495 return (matches || []);
99500 function isReviewRequested(tags) {
99501 var rr = tags.review_requested;
99502 if (rr === undefined) return false;
99503 rr = rr.trim().toLowerCase();
99504 return !(rr === '' || rr === 'no');
99508 function updateChangeset(changed, onInput) {
99509 var tags = Object.assign({}, _changeset$1.tags); // shallow copy
99511 Object.keys(changed).forEach(function(k) {
99512 var v = changed[k];
99513 k = k.trim().substr(0, 255);
99514 if (readOnlyTags.indexOf(k) !== -1) return;
99516 if (k !== '' && v !== undefined) {
99520 tags[k] = v.trim().substr(0, 255);
99528 // when changing the comment, override hashtags with any found in comment.
99529 var commentOnly = changed.hasOwnProperty('comment') && (changed.comment !== '');
99530 var arr = findHashtags(tags, commentOnly);
99532 tags.hashtags = arr.join(';').substr(0, 255);
99533 context.storage('hashtags', tags.hashtags);
99535 delete tags.hashtags;
99536 context.storage('hashtags', null);
99540 // always update userdetails, just in case user reauthenticates as someone else
99541 if (_userDetails && _userDetails.changesets_count !== undefined) {
99542 var changesetsCount = parseInt(_userDetails.changesets_count, 10) + 1; // #4283
99543 tags.changesets_count = String(changesetsCount);
99545 // first 100 edits - new user
99546 if (changesetsCount <= 100) {
99548 s = context.storage('walkthrough_completed');
99550 tags['ideditor:walkthrough_completed'] = s;
99553 s = context.storage('walkthrough_progress');
99555 tags['ideditor:walkthrough_progress'] = s;
99558 s = context.storage('walkthrough_started');
99560 tags['ideditor:walkthrough_started'] = s;
99564 delete tags.changesets_count;
99567 if (!fastDeepEqual(_changeset$1.tags, tags)) {
99568 _changeset$1 = _changeset$1.update({ tags: tags });
99573 commit.reset = function() {
99574 _changeset$1 = null;
99578 return utilRebind(commit, dispatch$1, 'on');
99581 function uiSuccess(context) {
99584 // All else being equal, rank more "social" communities higher
99585 // (anything not in this list receives no adjustment)
99586 var COMMUNITYRANK = {
99596 var detected = utilDetect();
99597 var dispatch$1 = dispatch('cancel');
99602 // string-to-date parsing in JavaScript is weird
99603 function parseEventDate(when) {
99606 var raw = when.trim();
99609 if (!/Z$/.test(raw)) { // if no trailing 'Z', add one
99610 raw += 'Z'; // this forces date to be parsed as a UTC date
99613 var parsed = new Date(raw);
99614 return new Date(parsed.toUTCString().substr(0, 25)); // convert to local timezone
99618 function success(selection) {
99619 var header = selection
99621 .attr('class', 'header fillL');
99625 .attr('class', 'fr')
99626 .on('click', function() { dispatch$1.call('cancel'); })
99627 .call(svgIcon('#iD-icon-close'));
99631 .text(t('success.just_edited'));
99633 var body = selection
99635 .attr('class', 'body save-success fillL');
99639 .attr('class', 'save-summary');
99643 .text(t('success.thank_you' + (_location ? '_location' : ''), { where: _location }));
99647 .text(t('success.help_html'))
99649 .attr('class', 'link-out')
99650 .attr('target', '_blank')
99651 .attr('tabindex', -1)
99652 .attr('href', t('success.help_link_url'))
99653 .call(svgIcon('#iD-icon-out-link', 'inline'))
99655 .text(t('success.help_link_text'));
99657 var osm = context.connection();
99660 var changesetURL = osm.changesetURL(_changeset.id);
99662 var table = summary
99664 .attr('class', 'summary-table');
99668 .attr('class', 'summary-row');
99672 .attr('class', 'cell-icon summary-icon')
99674 .attr('target', '_blank')
99675 .attr('href', changesetURL)
99677 .attr('class', 'logo-small')
99679 .attr('xlink:href', '#iD-logo-osm');
99681 var summaryDetail = row
99683 .attr('class', 'cell-detail summary-detail');
99687 .attr('class', 'cell-detail summary-view-on-osm')
99688 .attr('target', '_blank')
99689 .attr('href', changesetURL)
99690 .text(t('success.view_on_osm'));
99694 .text(t('success.changeset_id', { changeset_id: _changeset.id }));
99697 // Gather community polygon IDs intersecting the map..
99698 var matchFeatures = data.community.query(context.map().center(), true) || [];
99699 var matchIDs = matchFeatures.map(function(feature) { return feature.id; });
99701 // Gather community resources that are either global or match a polygon.
99702 var matchResources = Object.values(data.community.resources)
99703 .filter(function(v) { return !v.featureId || matchIDs.indexOf(v.featureId) !== -1; });
99705 if (matchResources.length) {
99706 // sort by size ascending, then by community rank
99707 matchResources.sort(function(a, b) {
99708 var aSize = Infinity;
99709 var bSize = Infinity;
99710 var aRank = COMMUNITYRANK[a.type] || 0;
99711 var bRank = COMMUNITYRANK[b.type] || 0;
99714 aSize = data.community.features[a.featureId].properties.area;
99717 bSize = data.community.features[b.featureId].properties.area;
99720 return aSize < bSize ? -1 : aSize > bSize ? 1 : bRank - aRank;
99724 .call(showCommunityLinks, matchResources);
99729 function showCommunityLinks(selection, matchResources) {
99730 var communityLinks = selection
99732 .attr('class', 'save-communityLinks');
99736 .text(t('success.like_osm'));
99738 var table = communityLinks
99740 .attr('class', 'community-table');
99742 var row = table.selectAll('.community-row')
99743 .data(matchResources);
99745 var rowEnter = row.enter()
99747 .attr('class', 'community-row');
99751 .attr('class', 'cell-icon community-icon')
99753 .attr('target', '_blank')
99754 .attr('href', function(d) { return d.url; })
99756 .attr('class', 'logo-small')
99758 .attr('xlink:href', function(d) { return '#community-' + d.type; });
99760 var communityDetail = rowEnter
99762 .attr('class', 'cell-detail community-detail');
99765 .each(showCommunityDetails);
99769 .attr('class', 'community-missing')
99770 .text(t('success.missing'))
99772 .attr('class', 'link-out')
99773 .attr('target', '_blank')
99774 .attr('tabindex', -1)
99775 .call(svgIcon('#iD-icon-out-link', 'inline'))
99776 .attr('href', 'https://github.com/osmlab/osm-community-index/issues')
99778 .text(t('success.tell_us'));
99782 function showCommunityDetails(d) {
99783 var selection = d3_select(this);
99784 var communityID = d.id;
99785 var replacements = {
99786 url: linkify(d.url),
99787 signupUrl: linkify(d.signupUrl || d.url)
99792 .attr('class', 'community-name')
99794 .attr('target', '_blank')
99795 .attr('href', d.url)
99796 .text(t('community.' + d.id + '.name'));
99798 var descriptionHTML = t('community.' + d.id + '.description', replacements);
99800 if (d.type === 'reddit') { // linkify subreddits #4997
99801 descriptionHTML = descriptionHTML
99802 .replace(/(\/r\/\w*\/*)/i, function(match) { return linkify(d.url, match); });
99807 .attr('class', 'community-description')
99808 .html(descriptionHTML);
99810 if (d.extendedDescription || (d.languageCodes && d.languageCodes.length)) {
99813 .call(uiDisclosure(context, 'community-more-' + d.id, false)
99815 .updatePreference(false)
99816 .title(t('success.more'))
99821 var nextEvents = (d.events || [])
99822 .map(function(event) {
99823 event.date = parseEventDate(event.when);
99826 .filter(function(event) { // date is valid and future (or today)
99827 var t = event.date.getTime();
99828 var now = (new Date()).setHours(0,0,0,0);
99829 return !isNaN(t) && t >= now;
99831 .sort(function(a, b) { // sort by date ascending
99832 return a.date < b.date ? -1 : a.date > b.date ? 1 : 0;
99834 .slice(0, MAXEVENTS); // limit number of events shown
99836 if (nextEvents.length) {
99839 .call(uiDisclosure(context, 'community-events-' + d.id, false)
99841 .updatePreference(false)
99842 .title(t('success.events'))
99843 .content(showNextEvents)
99845 .select('.hide-toggle')
99847 .attr('class', 'badge-text')
99848 .text(nextEvents.length);
99852 function showMore(selection) {
99853 var more = selection.selectAll('.community-more')
99856 var moreEnter = more.enter()
99858 .attr('class', 'community-more');
99860 if (d.extendedDescription) {
99863 .attr('class', 'community-extended-description')
99864 .html(t('community.' + d.id + '.extendedDescription', replacements));
99867 if (d.languageCodes && d.languageCodes.length) {
99870 .attr('class', 'community-languages')
99871 .text(t('success.languages', { languages: d.languageCodes.join(', ') }));
99876 function showNextEvents(selection) {
99877 var events = selection
99879 .attr('class', 'community-events');
99881 var item = events.selectAll('.community-event')
99884 var itemEnter = item.enter()
99886 .attr('class', 'community-event');
99890 .attr('class', 'community-event-name')
99892 .attr('target', '_blank')
99893 .attr('href', function(d) { return d.url; })
99894 .text(function(d) {
99896 if (d.i18n && d.id) {
99897 name = t('community.' + communityID + '.events.' + d.id + '.name', { default: name });
99904 .attr('class', 'community-event-when')
99905 .text(function(d) {
99907 weekday: 'short', day: 'numeric', month: 'short', year: 'numeric'
99909 if (d.date.getHours() || d.date.getMinutes()) { // include time if it has one
99910 options.hour = 'numeric';
99911 options.minute = 'numeric';
99913 return d.date.toLocaleString(detected.locale, options);
99918 .attr('class', 'community-event-where')
99919 .text(function(d) {
99920 var where = d.where;
99921 if (d.i18n && d.id) {
99922 where = t('community.' + communityID + '.events.' + d.id + '.where', { default: where });
99929 .attr('class', 'community-event-description')
99930 .text(function(d) {
99931 var description = d.description;
99932 if (d.i18n && d.id) {
99933 description = t('community.' + communityID + '.events.' + d.id + '.description', { default: description });
99935 return description;
99940 function linkify(url, text) {
99941 text = text || url;
99942 return '<a target="_blank" href="' + url + '">' + text + '</a>';
99947 success.changeset = function(_) {
99948 if (!arguments.length) return _changeset;
99954 success.location = function(_) {
99955 if (!arguments.length) return _location;
99961 return utilRebind(success, dispatch$1, 'on');
99964 var _isSaving = false;
99967 function modeSave(context) {
99968 var mode = { id: 'save' };
99969 var keybinding = utilKeybinding('modeSave');
99971 var loading = uiLoading(context)
99972 .message(t('save.uploading'))
99975 var commit = uiCommit(context)
99976 .on('cancel', cancel)
99982 var _toLoadCount = 0;
99983 var _toLoadTotal = 0;
99985 var _conflicts = [];
99991 function cancel(selectedID) {
99993 context.enter(modeSelect(context, [selectedID]));
99995 context.enter(modeBrowse(context));
100000 function save(changeset, tryAgain, checkConflicts) {
100001 // Guard against accidentally entering save code twice - #4641
100002 if (_isSaving && !tryAgain) {
100006 var osm = context.connection();
100012 // If user somehow got logged out mid-save, try to reauthenticate..
100013 // This can happen if they were logged in from before, but the tokens are no longer valid.
100014 if (!osm.authenticated()) {
100015 osm.authenticate(function(err) {
100017 cancel(); // quit save mode..
100019 save(changeset, tryAgain, checkConflicts); // continue where we left off..
100027 context.container().call(loading); // block input
100031 var history = context.history();
100032 var localGraph = context.graph();
100033 var remoteGraph = coreGraph(history.base(), true);
100038 // Store original changes, in case user wants to download them as an .osc file
100039 _origChanges = history.changes(actionDiscardTags(history.difference()));
100041 // First time, `history.perform` a no-op action.
100042 // Any conflict resolutions will be done as `history.replace`
100044 history.perform(actionNoop());
100047 // Attempt a fast upload.. If there are conflicts, re-enter with `checkConflicts = true`
100051 // Do the full (slow) conflict check..
100053 var summary = history.difference().summary();
100055 for (var i = 0; i < summary.length; i++) {
100057 if (item.changeType === 'modified') {
100058 _toCheck.push(item.entity.id);
100062 _toLoad = withChildNodes(_toCheck, localGraph);
100065 _toLoadTotal = _toLoad.length;
100068 showProgress(_toLoadCount, _toLoadTotal);
100069 _toLoad.forEach(function(id) { _loaded[id] = false; });
100070 osm.loadMultiple(_toLoad, loaded);
100079 function withChildNodes(ids, graph) {
100081 ids.forEach(function(id) {
100082 var entity = graph.entity(id);
100083 if (entity.type !== 'way') return;
100085 graph.childNodes(entity).forEach(function(child) {
100086 if (child.version !== undefined) {
100096 // Reload modified entities into an alternate graph and check for conflicts..
100097 function loaded(err, result) {
100098 if (_errors.length) return;
100102 msg: err.message || err.responseText,
100103 details: [ t('save.status_code', { code: err.status }) ]
100110 result.data.forEach(function(entity) {
100111 remoteGraph.replace(entity);
100112 _loaded[entity.id] = true;
100113 _toLoad = _toLoad.filter(function(val) { return val !== entity.id; });
100115 if (!entity.visible) return;
100117 // Because loadMultiple doesn't download /full like loadEntity,
100118 // need to also load children that aren't already being checked..
100120 if (entity.type === 'way') {
100121 for (i = 0; i < entity.nodes.length; i++) {
100123 if (_loaded[id] === undefined) {
100128 } else if (entity.type === 'relation' && entity.isMultipolygon()) {
100129 for (i = 0; i < entity.members.length; i++) {
100130 id = entity.members[i].id;
100131 if (_loaded[id] === undefined) {
100139 _toLoadCount += result.data.length;
100140 _toLoadTotal += loadMore.length;
100141 showProgress(_toLoadCount, _toLoadTotal);
100144 _toLoad.push.apply(_toLoad, loadMore);
100145 osm.loadMultiple(loadMore, loaded);
100155 function detectConflicts() {
100156 function choice(id, text, action) {
100157 return { id: id, text: text, action: function() { history.replace(action); } };
100159 function formatUser(d) {
100160 return '<a href="' + osm.userURL(d) + '" target="_blank">' + d + '</a>';
100162 function entityName(entity) {
100163 return utilDisplayName(entity) || (utilDisplayType(entity.id) + ' ' + entity.id);
100166 function sameVersions(local, remote) {
100167 if (local.version !== remote.version) return false;
100169 if (local.type === 'way') {
100170 var children = utilArrayUnion(local.nodes, remote.nodes);
100171 for (var i = 0; i < children.length; i++) {
100172 var a = localGraph.hasEntity(children[i]);
100173 var b = remoteGraph.hasEntity(children[i]);
100174 if (a && b && a.version !== b.version) return false;
100181 _toCheck.forEach(function(id) {
100182 var local = localGraph.entity(id);
100183 var remote = remoteGraph.entity(id);
100185 if (sameVersions(local, remote)) return;
100187 var action = actionMergeRemoteChanges;
100188 var merge = action(id, localGraph, remoteGraph, formatUser);
100190 history.replace(merge);
100192 var mergeConflicts = merge.conflicts();
100193 if (!mergeConflicts.length) return; // merged safely
100195 var forceLocal = action(id, localGraph, remoteGraph).withOption('force_local');
100196 var forceRemote = action(id, localGraph, remoteGraph).withOption('force_remote');
100197 var keepMine = t('save.conflict.' + (remote.visible ? 'keep_local' : 'restore'));
100198 var keepTheirs = t('save.conflict.' + (remote.visible ? 'keep_remote' : 'delete'));
100202 name: entityName(local),
100203 details: mergeConflicts,
100206 choice(id, keepMine, forceLocal),
100207 choice(id, keepTheirs, forceRemote)
100217 function upload(changeset) {
100218 var osm = context.connection();
100220 _errors.push({ msg: 'No OSM Service' });
100223 if (_conflicts.length) {
100224 _conflicts.sort(function(a, b) { return b.id.localeCompare(a.id); });
100225 showConflicts(changeset);
100227 } else if (_errors.length) {
100231 var history = context.history();
100232 var changes = history.changes(actionDiscardTags(history.difference()));
100233 if (changes.modified.length || changes.created.length || changes.deleted.length) {
100234 loadLocation(); // so it is ready when we display the save screen
100235 osm.putChangeset(changeset, changes, uploadCallback);
100236 } else { // changes were insignificant or reverted by user
100237 d3_select('.inspector-wrap *').remove();
100247 function uploadCallback(err, changeset) {
100249 if (err.status === 409) { // 409 Conflict
100250 save(changeset, true, true); // tryAgain = true, checkConflicts = true
100253 msg: err.message || err.responseText,
100254 details: [ t('save.status_code', { code: err.status }) ]
100260 context.history().clearSaved();
100262 // Add delay to allow for postgres replication #1646 #2678
100263 window.setTimeout(function() {
100264 d3_select('.inspector-wrap *').remove();
100273 function showProgress(num, total) {
100274 var modal = context.container().select('.loading-modal .modal-section');
100275 var progress = modal.selectAll('.progress')
100281 .attr('class', 'progress')
100283 .text(t('save.conflict_progress', { num: num, total: total }));
100287 function showConflicts(changeset) {
100288 var history = context.history();
100289 var selection = context.container()
100292 .attr('class','sidebar-component');
100297 var ui = uiConflicts(context)
100298 .conflictList(_conflicts)
100299 .origChanges(_origChanges)
100300 .on('cancel', function() {
100305 .on('save', function() {
100306 for (var i = 0; i < _conflicts.length; i++) {
100307 if (_conflicts[i].chosen === 1) { // user chose "keep theirs"
100308 var entity = context.hasEntity(_conflicts[i].id);
100309 if (entity && entity.type === 'way') {
100310 var children = utilArrayUniq(entity.nodes);
100311 for (var j = 0; j < children.length; j++) {
100312 history.replace(actionRevert(children[j]));
100315 history.replace(actionRevert(_conflicts[i].id));
100320 save(changeset, true, false); // tryAgain = true, checkConflicts = false
100327 function showErrors() {
100329 context.history().pop();
100333 var selection = uiConfirm(context.container());
100335 .select('.modal-section.header')
100337 .text(t('save.error'));
100339 addErrors(selection, _errors);
100344 function addErrors(selection, data) {
100345 var message = selection
100346 .select('.modal-section.message-text');
100349 .selectAll('.error-container')
100352 var enter = items.enter()
100354 .attr('class', 'error-container');
100358 .attr('class', 'error-description')
100360 .classed('hide-toggle', true)
100361 .text(function(d) { return d.msg || t('save.unknown_error_details'); })
100362 .on('click', function() {
100363 event.preventDefault();
100365 var error = d3_select(this);
100366 var detail = d3_select(this.nextElementSibling);
100367 var exp = error.classed('expanded');
100369 detail.style('display', exp ? 'none' : 'block');
100370 error.classed('expanded', !exp);
100375 .attr('class', 'error-detail-container')
100376 .style('display', 'none');
100380 .attr('class', 'error-detail-list')
100382 .data(function(d) { return d.details || []; })
100385 .attr('class', 'error-detail-item')
100386 .text(function(d) { return d; });
100393 function success(changeset) {
100396 var ui = uiSuccess(context)
100399 .on('cancel', function() { context.ui().sidebar.hide(); });
100401 context.enter(modeBrowse(context).sidebar(ui));
100405 function keybindingOn() {
100407 .call(keybinding.on('⎋', cancel, true));
100411 function keybindingOff() {
100413 .call(keybinding.unbind);
100417 // Reverse geocode current map location so we can display a message on
100418 // the success screen like "Thank you for editing around place, region."
100419 function loadLocation() {
100421 if (!services$1.geocoder) return;
100423 services$1.geocoder.reverse(context.map().center(), function(err, result) {
100424 if (err || !result || !result.address) return;
100426 var addr = result.address;
100427 var place = (addr && (addr.town || addr.city || addr.county)) || '';
100428 var region = (addr && (addr.state || addr.country)) || '';
100429 var separator = (place && region) ? t('success.thank_you_where.separator') : '';
100431 _location = t('success.thank_you_where.format',
100432 { place: place, separator: separator, region: region }
100438 mode.enter = function() {
100440 context.ui().sidebar.expand();
100443 context.ui().sidebar.show(commit);
100448 context.container().selectAll('#content')
100449 .attr('class', 'inactive');
100451 var osm = context.connection();
100457 if (osm.authenticated()) {
100460 osm.authenticate(function(err) {
100471 mode.exit = function() {
100476 context.container().selectAll('#content')
100477 .attr('class', 'active');
100479 context.ui().sidebar.hide();
100485 function uiToolOldDrawModes(context) {
100489 label: t('toolbar.add_feature')
100493 modeAddPoint(context, {
100494 title: t('modes.add_point.title'),
100496 description: t('modes.add_point.description'),
100497 preset: context.presets().item('point'),
100501 title: t('modes.add_line.title'),
100503 description: t('modes.add_line.description'),
100504 preset: context.presets().item('line'),
100508 title: t('modes.add_area.title'),
100510 description: t('modes.add_area.description'),
100511 preset: context.presets().item('area'),
100521 function osmEditable() {
100522 var mode = context.mode();
100523 return context.editable() && mode && mode.id !== 'save';
100526 modes.forEach(function(mode) {
100527 context.keybinding().on(mode.key, function() {
100528 if (!enabled(mode)) return;
100530 if (mode.id === context.mode().id) {
100531 context.enter(modeBrowse(context));
100538 tool.render = function(selection) {
100542 .attr('class', 'joined')
100543 .style('display', 'flex');
100546 .on('enter.editor', function(entered) {
100547 selection.selectAll('button.add-button')
100548 .classed('active', function(mode) { return entered.button === mode.button; });
100550 .classed('mode-' + entered.id, true);
100554 .on('exit.editor', function(exited) {
100556 .classed('mode-' + exited.id, false);
100560 var debouncedUpdate = debounce(update, 500, { leading: true, trailing: true });
100563 .on('move.modes', debouncedUpdate)
100564 .on('drawn.modes', debouncedUpdate);
100567 .on('enter.modes', update);
100574 var buttons = wrap.selectAll('button.add-button')
100575 .data(modes, function(d) { return d.id; });
100582 var buttonsEnter = buttons.enter()
100585 .attr('class', function(d) { return d.id + ' add-button bar-button'; })
100586 .on('click.mode-buttons', function(d) {
100587 if (!enabled(d)) return;
100589 // When drawing, ignore accidental clicks on mode buttons - #4042
100590 var currMode = context.mode().id;
100591 if (/^draw/.test(currMode)) return;
100593 if (d.id === currMode) {
100594 context.enter(modeBrowse(context));
100602 .title(function(d) { return uiTooltipHtml(d.description, d.key); })
100608 .call(svgIcon('#iD-icon-' + d.button));
100613 .attr('class', 'label')
100614 .text(function(mode) { return mode.title; });
100616 // if we are adding/removing the buttons, check if toolbar has overflowed
100617 if (buttons.enter().size() || buttons.exit().size()) {
100618 context.ui().checkOverflow('#bar', true);
100624 .classed('disabled', function(d) { return !enabled(d); });
100631 function uiToolNotes(context) {
100635 label: t('modes.add_note.label')
100638 var mode = modeAddNote(context);
100641 return notesEnabled() && notesEditable();
100644 function notesEnabled() {
100645 var noteLayer = context.layers().layer('notes');
100646 return noteLayer && noteLayer.enabled();
100649 function notesEditable() {
100650 var mode = context.mode();
100651 return context.map().notesEditable() && mode && mode.id !== 'save';
100654 context.keybinding().on(mode.key, function() {
100655 if (!enabled(mode)) return;
100657 if (mode.id === context.mode().id) {
100658 context.enter(modeBrowse(context));
100664 tool.render = function(selection) {
100667 .on('enter.editor.notes', function(entered) {
100668 selection.selectAll('button.add-button')
100669 .classed('active', function(mode) { return entered.button === mode.button; });
100671 .classed('mode-' + entered.id, true);
100675 .on('exit.editor.notes', function(exited) {
100677 .classed('mode-' + exited.id, false);
100681 var debouncedUpdate = debounce(update, 500, { leading: true, trailing: true });
100684 .on('move.notes', debouncedUpdate)
100685 .on('drawn.notes', debouncedUpdate);
100688 .on('enter.notes', update);
100694 var showNotes = notesEnabled();
100695 var data = showNotes ? [mode] : [];
100697 var buttons = selection.selectAll('button.add-button')
100698 .data(data, function(d) { return d.id; });
100705 var buttonsEnter = buttons.enter()
100708 .attr('class', function(d) { return d.id + ' add-button bar-button'; })
100709 .on('click.notes', function(d) {
100710 if (!enabled(d)) return;
100712 // When drawing, ignore accidental clicks on mode buttons - #4042
100713 var currMode = context.mode().id;
100714 if (/^draw/.test(currMode)) return;
100716 if (d.id === currMode) {
100717 context.enter(modeBrowse(context));
100725 .title(function(d) { return uiTooltipHtml(d.description, d.key); })
100731 .call(svgIcon(d.icon || '#iD-icon-' + d.button));
100734 // if we are adding/removing the buttons, check if toolbar has overflowed
100735 if (buttons.enter().size() || buttons.exit().size()) {
100736 context.ui().checkOverflow('#bar', true);
100742 .classed('disabled', function(d) { return !enabled(d); });
100746 tool.uninstall = function() {
100748 .on('enter.editor.notes', null)
100749 .on('exit.editor.notes', null)
100750 .on('enter.notes', null);
100753 .on('move.notes', null)
100754 .on('drawn.notes', null);
100760 function uiToolSave(context) {
100768 var tooltipBehavior = null;
100769 var history = context.history();
100774 var mode = context.mode();
100775 return mode && mode.id === 'save';
100778 function isDisabled() {
100779 return _numChanges === 0 || isSaving();
100783 event.preventDefault();
100784 if (!context.inIntro() && !isSaving() && history.hasChanges()) {
100785 context.enter(modeSave(context));
100791 if (_numChanges === 0) {
100793 } else if (_numChanges <= 50) {
100794 step = _numChanges / 50;
100795 return d3_interpolateRgb('#fff', '#ff8')(step); // white -> yellow
100797 step = Math.min((_numChanges - 50) / 50, 1.0);
100798 return d3_interpolateRgb('#ff8', '#f88')(step); // yellow -> red
100803 function updateCount() {
100804 var val = history.difference().summary().length;
100805 if (val === _numChanges) return;
100811 t(_numChanges > 0 ? 'save.help' : 'save.no_changes'), key)
100817 .classed('disabled', isDisabled())
100818 .style('background', bgColor(_numChanges));
100820 button.select('span.count')
100826 tool.render = function(selection) {
100827 tooltipBehavior = tooltip()
100830 .title(uiTooltipHtml(t('save.no_changes'), key));
100834 .attr('class', 'save disabled bar-button')
100837 .call(tooltipBehavior);
100840 .call(svgIcon('#iD-icon-save'));
100844 .attr('class', 'count')
100855 .on('change.save', updateCount);
100858 .on('enter.save', function() {
100861 .classed('disabled', isDisabled());
100864 button.call(tooltipBehavior.hide);
100871 tool.uninstall = function() {
100876 .on('change.save', null);
100879 .on('enter.save', null);
100882 tooltipBehavior = null;
100888 function uiToolSidebarToggle(context) {
100892 label: t('toolbar.inspect')
100895 tool.render = function(selection) {
100898 .attr('class', 'bar-button')
100900 .on('click', function() {
100901 context.ui().sidebar.toggle();
100906 .title(uiTooltipHtml(t('sidebar.tooltip'), t('sidebar.key')))
100908 .call(svgIcon('#iD-icon-sidebar-' + (textDirection === 'rtl' ? 'right' : 'left')));
100914 function uiToolUndoRedo(context) {
100918 label: t('toolbar.undo_redo')
100924 action: function() { if (editable()) context.undo(); },
100925 annotation: function() { return context.history().undoAnnotation(); }
100929 action: function() { if (editable()) context.redo(); },
100930 annotation: function() { return context.history().redoAnnotation(); }
100935 var mode = context.mode();
100936 return context.editable() && mode && mode.id !== 'save';
100940 tool.render = function(selection) {
100941 var tooltipBehavior = tooltip()
100945 return uiTooltipHtml(d.annotation() ?
100946 t(d.id + '.tooltip', {action: d.annotation()}) :
100947 t(d.id + '.nothing'), d.cmd);
100950 var buttons = selection.selectAll('button')
100954 .attr('class', function(d) { return 'disabled ' + d.id + '-button bar-button'; })
100955 .on('click', function(d) { return d.action(); })
100956 .call(tooltipBehavior);
100958 buttons.each(function(d) {
100960 if (textDirection === 'rtl') {
100961 if (iconName === 'undo') {
100963 } else if (iconName === 'redo') {
100968 .call(svgIcon('#iD-icon-' + iconName));
100972 .on(commands[0].cmd, function() { event.preventDefault(); commands[0].action(); })
100973 .on(commands[1].cmd, function() { event.preventDefault(); commands[1].action(); });
100976 var debouncedUpdate = debounce(update, 500, { leading: true, trailing: true });
100979 .on('move.undo_redo', debouncedUpdate)
100980 .on('drawn.undo_redo', debouncedUpdate);
100983 .on('change.undo_redo', function(difference) {
100984 if (difference) update();
100988 .on('enter.undo_redo', update);
100993 .property('disabled', !editable())
100994 .classed('disabled', function(d) {
100995 return !editable() || !d.annotation();
100998 var selection = d3_select(this);
100999 if (selection.property('tooltipVisible')) {
101000 selection.call(tooltipBehavior.show);
101006 tool.uninstall = function() {
101012 .on('move.undo_redo', null)
101013 .on('drawn.undo_redo', null);
101016 .on('change.undo_redo', null);
101019 .on('enter.undo_redo', null);
101025 function uiTopToolbar(context) {
101027 var sidebarToggle = uiToolSidebarToggle(context),
101028 modes = uiToolOldDrawModes(context),
101029 //searchAdd = uiToolSearchAdd(context),
101030 //addFavorite = uiToolAddFavorite(context),
101031 //addRecent = uiToolAddRecent(context),
101032 notes = uiToolNotes(context),
101033 undoRedo = uiToolUndoRedo(context),
101034 save = uiToolSave(context);
101036 function notesEnabled() {
101037 var noteLayer = context.layers().layer('notes');
101038 return noteLayer && noteLayer.enabled();
101041 function topToolbar(bar) {
101043 var debouncedUpdate = debounce(update, 500, { leading: true, trailing: true });
101045 .on('change.topToolbar', debouncedUpdate);
101048 .on('favoritePreset.topToolbar', update)
101049 .on('recentsChange.topToolbar', update);
101062 if (context.presets().getFavorites().length > 0) {
101063 tools.push(addFavorite);
101066 if (addRecent.shouldShow()) {
101073 tools = tools.concat([notes, 'spacer']);
101076 tools = tools.concat([undoRedo, save]);
101078 var toolbarItems = bar.selectAll('.toolbar-item')
101079 .data(tools, function(d) {
101091 var itemsEnter = toolbarItems
101094 .attr('class', function(d) {
101095 var classes = 'toolbar-item ' + (d.id || d).replace('_', '-');
101096 if (d.klass) classes += ' ' + d.klass;
101100 var actionableItems = itemsEnter.filter(function(d) { return d !== 'spacer'; });
101104 .attr('class', 'item-content')
101106 d3_select(this).call(d.render, bar);
101111 .attr('class', 'item-label')
101122 // these are module variables so they are preserved through a ui.restart()
101124 var isNewVersion = false;
101128 function uiVersion(context) {
101130 var currVersion = context.version;
101131 var matchedVersion = currVersion.match(/\d+\.\d+\.\d+.*/);
101133 if (sawVersion === null && matchedVersion !== null) {
101134 isNewVersion = (context.storage('sawVersion') !== currVersion);
101135 isNewUser = !context.storage('sawSplash');
101136 context.storage('sawVersion', currVersion);
101137 sawVersion = currVersion;
101140 return function(selection) {
101143 .attr('target', '_blank')
101145 .attr('href', 'https://github.com/openstreetmap/iD')
101148 // only show new version indicator to users that have used iD before
101149 if (isNewVersion && !isNewUser) {
101152 .attr('class', 'badge')
101154 .attr('target', '_blank')
101156 .attr('href', 'https://github.com/openstreetmap/iD/blob/master/CHANGELOG.md#whats-new')
101157 .call(svgIcon('#maki-gift-11'))
101159 .title(t('version.whats_new', { version: currVersion }))
101166 function uiZoom(context) {
101171 action: context.zoomIn,
101177 action: context.zoomOut,
101183 event.preventDefault();
101189 event.preventDefault();
101194 function zoomInFurther() {
101195 event.preventDefault();
101196 context.zoomInFurther();
101200 function zoomOutFurther() {
101201 event.preventDefault();
101202 context.zoomOutFurther();
101206 return function(selection) {
101207 var button = selection.selectAll('button')
101212 .attr('class', function(d) { return d.id; })
101213 .on('click.editor', function(d) { d.action(); })
101215 .placement((textDirection === 'rtl') ? 'right' : 'left')
101218 return uiTooltipHtml(d.title, d.key);
101222 button.each(function(d) {
101224 .call(svgIcon('#iD-icon-' + d.icon, 'light'));
101227 ['plus', 'ffplus', '=', 'ffequals'].forEach(function(key) {
101228 context.keybinding().on([key], zoomIn);
101229 context.keybinding().on([uiCmd('⌘' + key)], zoomInFurther);
101232 ['_', '-', 'ffminus', 'dash'].forEach(function(key) {
101233 context.keybinding().on([key], zoomOut);
101234 context.keybinding().on([uiCmd('⌘' + key)], zoomOutFurther);
101239 function uiInit(context) {
101245 function render(container) {
101247 .attr('dir', textDirection);
101249 // setup fullscreen keybindings (no button shown at this time)
101251 .call(uiFullScreen(context));
101253 var map = context.map();
101254 map.redrawEnable(false); // don't draw until we've set zoom/lat/long
101259 .call(svgDefs(context));
101266 var content = container
101269 .attr('class', 'active');
101275 .attr('class', 'fillD')
101276 .call(uiTopToolbar(context));
101288 .attr('class', 'map-controls');
101292 .attr('class', 'map-control zoombuttons')
101293 .call(uiZoom(context));
101297 .attr('class', 'map-control geolocate-control')
101298 .call(uiGeolocate(context));
101300 var background = uiBackground(context);
101303 .attr('class', 'map-control background-control')
101304 .call(background.renderToggleButton);
101306 var mapData = uiMapData(context);
101309 .attr('class', 'map-control map-data-control')
101310 .call(mapData.renderToggleButton);
101312 var issues = uiIssues(context);
101315 .attr('class', 'map-control map-issues-control')
101316 .call(issues.renderToggleButton);
101318 var help = uiHelp(context);
101321 .attr('class', 'map-control help-control')
101322 .call(help.renderToggleButton);
101326 .attr('class', 'spinner')
101327 .call(uiSpinner(context));
101329 // Add attribution and footer
101338 .call(uiAttribution(context));
101342 .attr('class', 'api-status')
101343 .call(uiStatus(context));
101349 .attr('class', 'fillD');
101353 .attr('id', 'flash-wrap')
101354 .attr('class', 'footer-hide');
101356 var footerWrap = footer
101358 .attr('id', 'footer-wrap')
101359 .attr('class', 'footer-show');
101363 .attr('id', 'scale-block')
101364 .call(uiScale(context));
101366 var aboutList = footerWrap
101368 .attr('id', 'info-block')
101370 .attr('id', 'about-list');
101372 if (!context.embed()) {
101374 .call(uiAccount(context));
101379 .attr('class', 'version')
101380 .call(uiVersion(context));
101382 var issueLinks = aboutList
101387 .attr('target', '_blank')
101389 .attr('href', 'https://github.com/openstreetmap/iD/issues')
101390 .call(svgIcon('#iD-icon-bug', 'light'))
101391 .call(tooltip().title(t('report_a_bug')).placement('top'));
101395 .attr('target', '_blank')
101397 .attr('href', 'https://github.com/openstreetmap/iD/blob/master/CONTRIBUTING.md#translating')
101398 .call(svgIcon('#iD-icon-translate', 'light'))
101399 .call(tooltip().title(t('help_translate')).placement('top'));
101403 .attr('class', 'feature-warning')
101405 .call(uiFeatureInfo(context));
101409 .attr('class', 'user-list')
101411 .call(uiContributors(context));
101414 // Setup map dimensions and move map to initial center/zoom.
101415 // This should happen after #content and toolbars exist.
101417 map.redrawEnable(true);
101419 var hash = behaviorHash(context);
101422 map.centerZoom([0, 0], 2);
101428 .attr('class', 'over-map');
101431 // This should happen after map is initialized, as some require surface()
101434 .attr('class', 'map-panes');
101437 .call(background.renderPane)
101438 .call(mapData.renderPane)
101439 .call(issues.renderPane)
101440 .call(help.renderPane);
101442 // Add absolutely-positioned elements that sit on top of the map
101443 // This should happen after the map is ready (center/zoom)
101445 .call(uiMapInMap(context))
101447 .call(uiNotice(context));
101452 .attr('id', 'photoviewer')
101453 .classed('al', true) // 'al'=left, 'ar'=right
101459 window.onbeforeunload = function() {
101462 window.onunload = function() {
101463 context.history().unlock();
101467 .on('gesturestart.editor', eventCancel)
101468 .on('gesturechange.editor', eventCancel)
101469 .on('gestureend.editor', eventCancel)
101470 .on('resize.editor', ui.onResize);
101475 .on('⌫', function() { event.preventDefault(); })
101476 .on([t('sidebar.key'), '`', '²'], ui.sidebar.toggle) // #5663 - common QWERTY, AZERTY
101477 .on('←', pan([panPixels, 0]))
101478 .on('↑', pan([0, panPixels]))
101479 .on('→', pan([-panPixels, 0]))
101480 .on('↓', pan([0, -panPixels]))
101481 .on(['⇧←', uiCmd('⌘←')], pan([map.dimensions()[0], 0]))
101482 .on(['⇧↑', uiCmd('⌘↑')], pan([0, map.dimensions()[1]]))
101483 .on(['⇧→', uiCmd('⌘→')], pan([-map.dimensions()[0], 0]))
101484 .on(['⇧↓', uiCmd('⌘↓')], pan([0, -map.dimensions()[1]]));
101486 context.enter(modeBrowse(context));
101489 if (!hash.startWalkthrough) {
101491 .call(uiSplash(context))
101492 .call(uiRestore(context));
101496 .call(uiShortcuts(context));
101499 var osm = context.connection();
101500 var auth = uiLoading(context).message(t('loading_auth')).blocking(true);
101504 .on('authLoading.ui', function() {
101508 .on('authDone.ui', function() {
101515 if (hash.startWalkthrough) {
101516 hash.startWalkthrough = false;
101517 context.container().call(uiIntro(context));
101523 if (d3_select('.combobox').size()) return;
101524 event.preventDefault();
101529 function eventCancel() {
101530 event.preventDefault();
101535 function ui(node, callback) {
101536 _initCallback = callback;
101537 var container = d3_select(node);
101538 context.container(container);
101539 context.loadLocale(function(err) {
101550 ui.restart = function(arg) {
101551 context.keybinding().clear();
101553 context.loadLocale(function(err) {
101555 context.container().selectAll('*').remove();
101556 render(context.container());
101557 if (_initCallback) _initCallback();
101563 ui.sidebar = uiSidebar(context);
101565 ui.photoviewer = uiPhotoviewer(context);
101567 ui.onResize = function(withPan) {
101568 var map = context.map();
101570 // Recalc dimensions of map and sidebar.. (`true` = force recalc)
101571 // This will call `getBoundingClientRect` and trigger reflow,
101572 // but the values will be cached for later use.
101573 var mapDimensions = utilGetDimensions(d3_select('#content'), true);
101574 utilGetDimensions(d3_select('#sidebar'), true);
101576 if (withPan !== undefined) {
101577 map.redrawEnable(false);
101579 map.redrawEnable(true);
101581 map.dimensions(mapDimensions);
101583 ui.photoviewer.onMapResize();
101585 // check if header or footer have overflowed
101586 ui.checkOverflow('#bar');
101587 ui.checkOverflow('#footer');
101589 // Use outdated code so it works on Explorer
101590 var resizeWindowEvent = document.createEvent('Event');
101592 resizeWindowEvent.initEvent('resizeWindow', true, true);
101594 document.dispatchEvent(resizeWindowEvent);
101598 // Call checkOverflow when resizing or whenever the contents change.
101599 ui.checkOverflow = function(selector, reset) {
101601 delete _needWidth[selector];
101604 var element = d3_select(selector);
101605 var scrollWidth = element.property('scrollWidth');
101606 var clientWidth = element.property('clientWidth');
101607 var needed = _needWidth[selector] || scrollWidth;
101609 if (scrollWidth > clientWidth) { // overflow happening
101610 element.classed('narrow', true);
101611 if (!_needWidth[selector]) {
101612 _needWidth[selector] = scrollWidth;
101615 } else if (scrollWidth >= needed) {
101616 element.classed('narrow', false);
101620 ui.togglePanes = function(showPane) {
101621 var shownPanes = d3_selectAll('.map-pane.shown');
101623 var side = textDirection === 'ltr' ? 'right' : 'left';
101626 .classed('shown', false);
101628 d3_selectAll('.map-control button')
101629 .classed('active', false);
101633 .style('display', 'none')
101634 .style(side, '-500px');
101636 d3_selectAll('.' + showPane.attr('pane') + '-control button')
101637 .classed('active', true);
101640 .classed('shown', true)
101641 .style('display', 'block');
101642 if (shownPanes.empty()) {
101644 .style('display', 'block')
101655 .style('display', 'block')
101660 .on('end', function() {
101661 d3_select(this).style('display', 'none');
101669 function coreContext() {
101670 var dispatch$1 = dispatch('enter', 'exit', 'change');
101671 var context = utilRebind({}, dispatch$1, 'on');
101672 var _deferred = new Set();
101674 context.version = '2.15.1';
101676 // create a special translation that contains the keys in place of the strings
101677 var tkeys = JSON.parse(JSON.stringify(en)); // clone deep
101680 function traverser(v, k, obj) {
101682 if (typeof v === 'object') {
101684 } else if (typeof v === 'string') {
101685 obj[k] = parents.join('.');
101690 function forOwn(obj, fn) {
101691 Object.keys(obj).forEach(function(k) { fn(obj[k], k, obj); });
101694 forOwn(tkeys, traverser);
101695 addTranslation('_tkeys_', tkeys);
101697 addTranslation('en', en);
101701 // https://github.com/openstreetmap/iD/issues/772
101702 // http://mathiasbynens.be/notes/localstorage-pattern#comment-9
101704 try { storage = localStorage; } catch (e) {} // eslint-disable-line no-empty
101705 storage = storage || (function() {
101708 getItem: function(k) { return s[k]; },
101709 setItem: function(k, v) { s[k] = v; },
101710 removeItem: function(k) { delete s[k]; }
101714 context.storage = function(k, v) {
101716 if (arguments.length === 1) return storage.getItem(k);
101717 else if (v === null) storage.removeItem(k);
101718 else storage.setItem(k, v);
101720 // localstorage quota exceeded
101721 /* eslint-disable no-console */
101722 if (typeof console !== 'undefined') console.error('localStorage quota exceeded');
101723 /* eslint-enable no-console */
101728 /* User interface and keybinding */
101730 context.ui = function() { return ui; };
101732 var keybinding = utilKeybinding('context');
101733 context.keybinding = function() { return keybinding; };
101734 d3_select(document).call(keybinding);
101737 /* Straight accessors. Avoid using these if you can. */
101738 var connection, history, validator;
101739 context.connection = function() { return connection; };
101740 context.history = function() { return history; };
101741 context.validator = function() { return validator; };
101744 context.preauth = function(options) {
101746 connection.switch(options);
101752 function afterLoad(cid, callback) {
101753 return function(err, result) {
101755 // 400 Bad Request, 401 Unauthorized, 403 Forbidden..
101756 if (err.status === 400 || err.status === 401 || err.status === 403) {
101761 if (typeof callback === 'function') {
101766 } else if (connection && connection.getConnectionId() !== cid) {
101767 if (typeof callback === 'function') {
101768 callback({ message: 'Connection Switched', status: -1 });
101773 history.merge(result.data, result.extent);
101774 if (typeof callback === 'function') {
101783 context.loadTiles = function(projection, callback) {
101784 var handle = window.requestIdleCallback(function() {
101785 _deferred.delete(handle);
101786 if (connection && context.editable()) {
101787 var cid = connection.getConnectionId();
101788 connection.loadTiles(projection, afterLoad(cid, callback));
101794 context.loadTileAtLoc = function(loc, callback) {
101795 var handle = window.requestIdleCallback(function() {
101796 _deferred.delete(handle);
101797 if (connection && context.editable()) {
101798 var cid = connection.getConnectionId();
101799 connection.loadTileAtLoc(loc, afterLoad(cid, callback));
101805 context.loadEntity = function(entityID, callback) {
101807 var cid = connection.getConnectionId();
101808 connection.loadEntity(entityID, afterLoad(cid, callback));
101812 context.zoomToEntity = function(entityID, zoomTo) {
101813 if (zoomTo !== false) {
101814 this.loadEntity(entityID, function(err, result) {
101816 var entity = result.data.find(function(e) { return e.id === entityID; });
101823 map.on('drawn.zoomToEntity', function() {
101824 if (!context.hasEntity(entityID)) return;
101825 map.on('drawn.zoomToEntity', null);
101826 context.on('enter.zoomToEntity', null);
101827 context.enter(modeSelect(context, [entityID]));
101830 context.on('enter.zoomToEntity', function() {
101831 if (mode.id !== 'browse') {
101832 map.on('drawn.zoomToEntity', null);
101833 context.on('enter.zoomToEntity', null);
101838 var minEditableZoom = 16;
101839 context.minEditableZoom = function(val) {
101840 if (!arguments.length) return minEditableZoom;
101843 connection.tileZoom(val);
101851 context.inIntro = function(val) {
101852 if (!arguments.length) return inIntro;
101857 context.save = function() {
101858 // no history save, no message onbeforeunload
101859 if (inIntro || d3_select('.modal').size()) return;
101862 if (mode && mode.id === 'save') {
101865 // Attempt to prevent user from creating duplicate changes - see #5200
101866 if (services$1.osm && services$1.osm.isChangesetInflight()) {
101872 canSave = context.selectedIDs().every(function(id) {
101873 var entity = context.hasEntity(id);
101874 return entity && !entity.isDegenerate();
101881 if (history.hasChanges()) {
101882 return t('save.unsaved_changes');
101888 context.hasEntity = function(id) {
101889 return history.graph().hasEntity(id);
101891 context.entity = function(id) {
101892 return history.graph().entity(id);
101894 context.childNodes = function(way) {
101895 return history.graph().childNodes(way);
101897 context.geometry = function(id) {
101898 return context.entity(id).geometry(history.graph());
101904 context.mode = function() {
101907 context.enter = function(newMode) {
101910 dispatch$1.call('exit', this, mode);
101915 dispatch$1.call('enter', this, mode);
101918 context.selectedIDs = function() {
101919 if (mode && mode.selectedIDs) {
101920 return mode.selectedIDs();
101926 context.activeID = function() {
101927 return mode && mode.activeID && mode.activeID();
101931 context.selectedNoteID = function(noteID) {
101932 if (!arguments.length) return _selectedNoteID;
101933 _selectedNoteID = noteID;
101938 context.selectedErrorID = function(errorID) {
101939 if (!arguments.length) return _selectedErrorID;
101940 _selectedErrorID = errorID;
101946 context.install = function(behavior) {
101947 context.surface().call(behavior);
101949 context.uninstall = function(behavior) {
101950 context.surface().call(behavior.off);
101955 var copyIDs = [], copyGraph;
101956 context.copyGraph = function() { return copyGraph; };
101957 context.copyIDs = function(val) {
101958 if (!arguments.length) return copyIDs;
101960 copyGraph = history.graph();
101967 context.background = function() { return background; };
101972 context.features = function() { return features; };
101973 context.hasHiddenConnections = function(id) {
101974 var graph = history.graph();
101975 var entity = graph.entity(id);
101976 return features.hasHiddenConnections(entity, graph);
101982 context.photos = function() { return photos; };
101987 context.presets = function() { return presets; };
101992 context.map = function() { return map; };
101993 context.layers = function() { return map.layers; };
101994 context.surface = function() { return map.surface; };
101995 context.editable = function() { return map.editable(); };
101996 context.surfaceRect = function() {
101997 return map.surface.node().getBoundingClientRect();
102003 tile: false, // tile boundaries
102004 collision: false, // label collision bounding boxes
102005 imagery: false, // imagery bounding polygons
102006 community: false, // community bounding polygons
102007 imperial: false, // imperial (not metric) bounding polygons
102008 driveLeft: false, // driveLeft bounding polygons
102009 target: false, // touch targets
102010 downloaded: false // downloaded data from osm
102012 context.debugFlags = function() {
102015 context.setDebug = function(flag, val) {
102016 if (arguments.length === 1) val = true;
102017 debugFlags[flag] = val;
102018 dispatch$1.call('change');
102021 context.getDebug = function(flag) {
102022 return flag && debugFlags[flag];
102027 var container = d3_select(document.body);
102028 context.container = function(val) {
102029 if (!arguments.length) return container;
102031 container.classed('id-container', true);
102035 context.embed = function(val) {
102036 if (!arguments.length) return embed;
102044 context.assetPath = function(val) {
102045 if (!arguments.length) return assetPath;
102051 context.assetMap = function(val) {
102052 if (!arguments.length) return assetMap;
102057 context.asset = function(val) {
102058 var filename = assetPath + val;
102059 return assetMap[filename] || filename;
102062 context.imagePath = function(val) {
102063 return context.asset('img/' + val);
102068 // `locale` variable contains a "requested locale".
102069 // It won't become the `currentLocale` until after loadLocale() is called.
102070 var locale, localePath;
102072 context.locale = function(loc, path) {
102073 if (!arguments.length) return currentLocale;
102079 context.loadLocale = function(callback) {
102080 if (locale && locale !== 'en' && dataLocales.hasOwnProperty(locale)) {
102081 localePath = localePath || context.asset('locales/' + locale + '.json');
102083 .then(function(result) {
102084 addTranslation(locale, result[locale]);
102087 if (callback) callback();
102090 if (callback) callback(err.message);
102104 /* reset (aka flush) */
102105 context.reset = context.flush = function() {
102106 context.debouncedSave.cancel();
102108 Array.from(_deferred).forEach(function(handle) {
102109 window.cancelIdleCallback(handle);
102110 _deferred.delete(handle);
102113 Object.values(services$1).forEach(function(service) {
102114 if (service && typeof service.reset === 'function') {
102115 service.reset(context);
102129 context.projection = geoRawMercator();
102130 context.curtainProjection = geoRawMercator();
102132 locale = utilDetect().locale;
102133 if (locale && !dataLocales.hasOwnProperty(locale)) {
102134 locale = locale.split('-')[0];
102137 history = coreHistory(context);
102138 validator = coreValidator(context);
102140 context.graph = history.graph;
102141 context.changes = history.changes;
102142 context.intersects = history.intersects;
102143 context.pauseChangeDispatch = history.pauseChangeDispatch;
102144 context.resumeChangeDispatch = history.resumeChangeDispatch;
102146 // Debounce save, since it's a synchronous localStorage write,
102147 // and history changes can happen frequently (e.g. when dragging).
102148 context.debouncedSave = debounce(context.save, 350);
102149 function withDebouncedSave(fn) {
102151 var result = fn.apply(history, arguments);
102152 context.debouncedSave();
102157 context.perform = withDebouncedSave(history.perform);
102158 context.replace = withDebouncedSave(history.replace);
102159 context.pop = withDebouncedSave(history.pop);
102160 context.overwrite = withDebouncedSave(history.overwrite);
102161 context.undo = withDebouncedSave(history.undo);
102162 context.redo = withDebouncedSave(history.redo);
102166 connection = services$1.osm;
102167 background = rendererBackground(context);
102168 features = rendererFeatures(context);
102169 photos = rendererPhotos(context);
102170 presets = presetIndex(context);
102172 if (services$1.maprules && utilStringQs(window.location.hash).maprules) {
102173 var maprules = utilStringQs(window.location.hash).maprules;
102175 .then(function(mapcss) {
102176 services$1.maprules.init();
102177 mapcss.forEach(function(mapcssSelector) {
102178 return services$1.maprules.addRule(mapcssSelector);
102186 map = rendererMap(context);
102187 context.mouse = map.mouse;
102188 context.extent = map.extent;
102190 context.zoomIn = map.zoomIn;
102191 context.zoomOut = map.zoomOut;
102192 context.zoomInFurther = map.zoomInFurther;
102193 context.zoomOutFurther = map.zoomOutFurther;
102194 context.redrawEnable = map.redrawEnable;
102196 Object.values(services$1).forEach(function(service) {
102197 if (service && typeof service.init === 'function') {
102207 if (utilStringQs(window.location.hash).presets) {
102208 var external = utilStringQs(window.location.hash).presets;
102209 presets.fromExternal(external, function(externalPresets) {
102210 context.presets = function() { return externalPresets; }; // default + external presets...
102211 osmSetAreaKeys(presets.areaKeys());
102212 osmSetPointTags(presets.pointTags());
102213 osmSetVertexTags(presets.vertexTags());
102217 osmSetAreaKeys(presets.areaKeys());
102218 osmSetPointTags(presets.pointTags());
102219 osmSetVertexTags(presets.vertexTags());
102225 function uiSourceSwitch(context) {
102230 event.preventDefault();
102232 var osm = context.connection();
102235 if (context.inIntro()) return;
102237 if (context.history().hasChanges() &&
102238 !window.confirm(t('source_switch.lose_changes'))) return;
102240 var isLive = d3_select(this)
102244 context.enter(modeBrowse(context));
102245 context.history().clearSaved(); // remove saved history
102246 context.flush(); // remove stored data
102249 .text(isLive ? t('source_switch.live') : t('source_switch.dev'))
102250 .classed('live', isLive);
102252 osm.switch(isLive ? keys[0] : keys[1]); // switch connection (warning: dispatches 'change' event)
102255 var sourceSwitch = function(selection) {
102259 .text(t('source_switch.live'))
102266 sourceSwitch.keys = function(_) {
102267 if (!arguments.length) return keys;
102276 var Connection = services$1.osm;
102280 var iD = /*#__PURE__*/Object.freeze({
102281 Connection: Connection,
102285 setAreaKeys: osmSetAreaKeys,
102286 get areaKeys () { return osmAreaKeys; },
102287 Difference: coreDifference,
102292 geoInterp: geoVecInterp,
102293 geoRoundCoordinates: geoVecFloor,
102294 geoEuclideanDistance: geoVecLength,
102299 BackgroundSource: rendererBackgroundSource,
102300 Background: rendererBackground,
102301 Features: rendererFeatures,
102303 TileLayer: rendererTileLayer,
102305 uiPreset: uiPresetEditor,
102306 actionAddEntity: actionAddEntity,
102307 actionAddMember: actionAddMember,
102308 actionAddMidpoint: actionAddMidpoint,
102309 actionAddVertex: actionAddVertex,
102310 actionChangeMember: actionChangeMember,
102311 actionChangePreset: actionChangePreset,
102312 actionChangeTags: actionChangeTags,
102313 actionCircularize: actionCircularize,
102314 actionConnect: actionConnect,
102315 actionCopyEntities: actionCopyEntities,
102316 actionDeleteMember: actionDeleteMember,
102317 actionDeleteMultiple: actionDeleteMultiple,
102318 actionDeleteNode: actionDeleteNode,
102319 actionDeleteRelation: actionDeleteRelation,
102320 actionDeleteWay: actionDeleteWay,
102321 actionDiscardTags: actionDiscardTags,
102322 actionDisconnect: actionDisconnect,
102323 actionExtract: actionExtract,
102324 actionJoin: actionJoin,
102325 actionMerge: actionMerge,
102326 actionMergeNodes: actionMergeNodes,
102327 actionMergePolygon: actionMergePolygon,
102328 actionMergeRemoteChanges: actionMergeRemoteChanges,
102329 actionMove: actionMove,
102330 actionMoveMember: actionMoveMember,
102331 actionMoveNode: actionMoveNode,
102332 actionNoop: actionNoop,
102333 actionOrthogonalize: actionOrthogonalize,
102334 actionRestrictTurn: actionRestrictTurn,
102335 actionReverse: actionReverse,
102336 actionRevert: actionRevert,
102337 actionRotate: actionRotate,
102338 actionSplit: actionSplit,
102339 actionStraightenNodes: actionStraightenNodes,
102340 actionStraightenWay: actionStraightenWay,
102341 actionUnrestrictTurn: actionUnrestrictTurn,
102342 actionReflect: actionReflect,
102343 actionUpgradeTags: actionUpgradeTags,
102344 behaviorAddWay: behaviorAddWay,
102345 behaviorBreathe: behaviorBreathe,
102346 behaviorCopy: behaviorCopy,
102347 behaviorDrag: behaviorDrag,
102348 behaviorDrawWay: behaviorDrawWay,
102349 behaviorDraw: behaviorDraw,
102350 behaviorEdit: behaviorEdit,
102351 behaviorHash: behaviorHash,
102352 behaviorHover: behaviorHover,
102353 behaviorLasso: behaviorLasso,
102354 behaviorOperation: behaviorOperation,
102355 behaviorPaste: behaviorPaste,
102356 behaviorSelect: behaviorSelect,
102357 behaviorTail: behaviorTail,
102358 coreContext: coreContext,
102359 coreDifference: coreDifference,
102361 coreHistory: coreHistory,
102363 coreValidator: coreValidator,
102365 dataWikipedia: wikipedia$2,
102366 dataAddressFormats: dataAddressFormats,
102367 dataDeprecated: dataDeprecated,
102368 dataDiscarded: dataDiscarded,
102369 dataLocales: dataLocales,
102370 dataPhoneFormats: dataPhoneFormats,
102371 dataShortcuts: dataShortcuts,
102372 dataImperial: dataImperial,
102373 dataDriveLeft: dataDriveLeft,
102376 geoLatToMeters: geoLatToMeters,
102377 geoLonToMeters: geoLonToMeters,
102378 geoMetersToLat: geoMetersToLat,
102379 geoMetersToLon: geoMetersToLon,
102380 geoMetersToOffset: geoMetersToOffset,
102381 geoOffsetToMeters: geoOffsetToMeters,
102382 geoScaleToZoom: geoScaleToZoom,
102383 geoSphericalClosestNode: geoSphericalClosestNode,
102384 geoSphericalDistance: geoSphericalDistance,
102385 geoZoomToScale: geoZoomToScale,
102387 geoChooseEdge: geoChooseEdge,
102388 geoEdgeEqual: geoEdgeEqual,
102389 geoGetSmallestSurroundingRectangle: geoGetSmallestSurroundingRectangle,
102390 geoHasLineIntersections: geoHasLineIntersections,
102391 geoHasSelfIntersections: geoHasSelfIntersections,
102393 geoLineIntersection: geoLineIntersection,
102394 geoPathHasIntersections: geoPathHasIntersections,
102395 geoPathIntersections: geoPathIntersections,
102396 geoPathLength: geoPathLength,
102397 geoPointInPolygon: geoPointInPolygon,
102398 geoPolygonContainsPolygon: geoPolygonContainsPolygon,
102399 geoPolygonIntersectsPolygon: geoPolygonIntersectsPolygon,
102400 geoViewportEdge: geoViewportEdge,
102401 geoRawMercator: geoRawMercator,
102403 geoVecAngle: geoVecAngle,
102404 geoVecCross: geoVecCross,
102406 geoVecEqual: geoVecEqual,
102407 geoVecFloor: geoVecFloor,
102408 geoVecInterp: geoVecInterp,
102409 geoVecLength: geoVecLength,
102410 geoVecNormalize: geoVecNormalize,
102411 geoVecNormalizedDot: geoVecNormalizedDot,
102412 geoVecProject: geoVecProject,
102413 geoVecSubtract: geoVecSubtract,
102414 geoVecScale: geoVecScale,
102415 geoOrthoNormalizedDotProduct: geoOrthoNormalizedDotProduct,
102416 geoOrthoCalcScore: geoOrthoCalcScore,
102417 geoOrthoMaxOffsetAngle: geoOrthoMaxOffsetAngle,
102418 geoOrthoCanOrthogonalize: geoOrthoCanOrthogonalize,
102419 modeAddArea: modeAddArea,
102420 modeAddLine: modeAddLine,
102421 modeAddPoint: modeAddPoint,
102422 modeAddNote: modeAddNote,
102423 modeBrowse: modeBrowse,
102424 modeDragNode: modeDragNode,
102425 modeDragNote: modeDragNote,
102426 modeDrawArea: modeDrawArea,
102427 modeDrawLine: modeDrawLine,
102429 modeRotate: modeRotate,
102431 modeSelect: modeSelect,
102432 modeSelectData: modeSelectData,
102433 modeSelectError: modeSelectError,
102434 modeSelectNote: modeSelectNote,
102435 operationCircularize: operationCircularize,
102436 operationContinue: operationContinue,
102437 operationDelete: operationDelete,
102438 operationDisconnect: operationDisconnect,
102439 operationDowngrade: operationDowngrade,
102440 operationExtract: operationExtract,
102441 operationMerge: operationMerge,
102442 operationMove: operationMove,
102443 operationOrthogonalize: operationOrthogonalize,
102444 operationReflectShort: operationReflectShort,
102445 operationReflectLong: operationReflectLong,
102446 operationReverse: operationReverse,
102447 operationRotate: operationRotate,
102448 operationSplit: operationSplit,
102449 operationStraighten: operationStraighten,
102450 osmChangeset: osmChangeset,
102454 osmRelation: osmRelation,
102457 osmIntersection: osmIntersection,
102459 osmInferRestriction: osmInferRestriction,
102461 osmOldMultipolygonOuterMemberOfRelation: osmOldMultipolygonOuterMemberOfRelation,
102462 osmIsOldMultipolygonOuterMember: osmIsOldMultipolygonOuterMember,
102463 osmOldMultipolygonOuterMember: osmOldMultipolygonOuterMember,
102464 osmJoinWays: osmJoinWays,
102465 get osmAreaKeys () { return osmAreaKeys; },
102466 osmSetAreaKeys: osmSetAreaKeys,
102467 get osmPointTags () { return osmPointTags; },
102468 osmSetPointTags: osmSetPointTags,
102469 get osmVertexTags () { return osmVertexTags; },
102470 osmSetVertexTags: osmSetVertexTags,
102471 osmNodeGeometriesForTags: osmNodeGeometriesForTags,
102472 osmOneWayTags: osmOneWayTags,
102473 osmPavedTags: osmPavedTags,
102474 osmIsInterestingTag: osmIsInterestingTag,
102475 osmRoutableHighwayTagValues: osmRoutableHighwayTagValues,
102476 osmFlowingWaterwayTagValues: osmFlowingWaterwayTagValues,
102477 osmRailwayTrackTagValues: osmRailwayTrackTagValues,
102478 presetCategory: presetCategory,
102479 presetCollection: presetCollection,
102480 presetField: presetField,
102481 presetPreset: presetPreset,
102482 presetIndex: presetIndex,
102483 rendererBackgroundSource: rendererBackgroundSource,
102484 rendererBackground: rendererBackground,
102485 rendererFeatures: rendererFeatures,
102486 rendererMap: rendererMap,
102487 rendererPhotos: rendererPhotos,
102488 rendererTileLayer: rendererTileLayer,
102490 serviceKeepRight: serviceKeepRight,
102491 serviceImproveOSM: serviceImproveOSM,
102492 serviceMapillary: serviceMapillary,
102493 serviceMapRules: serviceMapRules,
102494 serviceNominatim: serviceNominatim,
102495 serviceOpenstreetcam: serviceOpenstreetcam,
102496 serviceOsm: serviceOsm,
102497 serviceOsmWikibase: serviceOsmWikibase,
102498 serviceStreetside: serviceStreetside,
102499 serviceTaginfo: serviceTaginfo,
102500 serviceVectorTile: serviceVectorTile,
102501 serviceWikidata: serviceWikidata,
102502 serviceWikipedia: serviceWikipedia,
102507 svgKeepRight: svgKeepRight,
102509 svgGeolocate: svgGeolocate,
102513 svgMapillaryImages: svgMapillaryImages,
102514 svgMapillarySigns: svgMapillarySigns,
102515 svgMidpoints: svgMidpoints,
102517 svgMarkerSegments: svgMarkerSegments,
102518 svgOpenstreetcamImages: svgOpenstreetcamImages,
102520 svgPassiveVertex: svgPassiveVertex,
102522 svgPointTransform: svgPointTransform,
102524 svgRelationMemberTags: svgRelationMemberTags,
102525 svgSegmentWay: svgSegmentWay,
102526 svgStreetside: svgStreetside,
102527 svgTagClasses: svgTagClasses,
102530 svgVertices: svgVertices,
102532 uiFieldDefaultCheck: uiFieldCheck,
102533 uiFieldOnewayCheck: uiFieldCheck,
102534 uiFieldCheck: uiFieldCheck,
102535 uiFieldMultiCombo: uiFieldCombo,
102536 uiFieldNetworkCombo: uiFieldCombo,
102537 uiFieldSemiCombo: uiFieldCombo,
102538 uiFieldTypeCombo: uiFieldCombo,
102539 uiFieldCombo: uiFieldCombo,
102540 uiFieldUrl: uiFieldText,
102541 uiFieldNumber: uiFieldText,
102542 uiFieldTel: uiFieldText,
102543 uiFieldEmail: uiFieldText,
102544 uiFieldText: uiFieldText,
102545 uiFieldAccess: uiFieldAccess,
102546 uiFieldAddress: uiFieldAddress,
102547 uiFieldCycleway: uiFieldCycleway,
102548 uiFieldLanes: uiFieldLanes,
102549 uiFieldLocalized: uiFieldLocalized,
102550 uiFieldMaxspeed: uiFieldMaxspeed,
102551 uiFieldStructureRadio: uiFieldRadio,
102552 uiFieldRadio: uiFieldRadio,
102553 uiFieldRestrictions: uiFieldRestrictions,
102554 uiFieldTextarea: uiFieldTextarea,
102555 uiFieldWikidata: uiFieldWikidata,
102556 uiFieldWikipedia: uiFieldWikipedia,
102558 uiInfoPanels: uiInfoPanels,
102559 uiPanelBackground: uiPanelBackground,
102560 uiPanelHistory: uiPanelHistory,
102561 uiPanelLocation: uiPanelLocation,
102562 uiPanelMeasurement: uiPanelMeasurement,
102563 uiSettingsCustomBackground: uiSettingsCustomBackground,
102564 uiSettingsCustomData: uiSettingsCustomData,
102567 uiAttribution: uiAttribution,
102568 uiBackground: uiBackground,
102569 uiBackgroundDisplayOptions: uiBackgroundDisplayOptions,
102570 uiBackgroundOffset: uiBackgroundOffset,
102571 uiChangesetEditor: uiChangesetEditor,
102573 uiCombobox: uiCombobox,
102575 uiCommitChanges: uiCommitChanges,
102576 uiCommitWarnings: uiCommitWarnings,
102578 uiConflicts: uiConflicts,
102579 uiContributors: uiContributors,
102581 uiDataEditor: uiDataEditor,
102582 uiDataHeader: uiDataHeader,
102583 uiDisclosure: uiDisclosure,
102584 uiEditMenu: uiEditMenu,
102585 uiEntityEditor: uiEntityEditor,
102586 uiFeatureInfo: uiFeatureInfo,
102587 uiFeatureList: uiFeatureList,
102589 uiFieldHelp: uiFieldHelp,
102591 uiFormFields: uiFormFields,
102592 uiFullScreen: uiFullScreen,
102593 uiGeolocate: uiGeolocate,
102595 uiImproveOsmComments: uiImproveOsmComments,
102596 uiImproveOsmDetails: uiImproveOsmDetails,
102597 uiImproveOsmEditor: uiImproveOsmEditor,
102598 uiImproveOsmHeader: uiImproveOsmHeader,
102600 uiInspector: uiInspector,
102601 uiKeepRightDetails: uiKeepRightDetails,
102602 uiKeepRightEditor: uiKeepRightEditor,
102603 uiKeepRightHeader: uiKeepRightHeader,
102607 uiMapInMap: uiMapInMap,
102610 uiNoteComments: uiNoteComments,
102611 uiNoteEditor: uiNoteEditor,
102612 uiNoteHeader: uiNoteHeader,
102613 uiNoteReport: uiNoteReport,
102614 uiPresetEditor: uiPresetEditor,
102615 uiPresetIcon: uiPresetIcon,
102616 uiPresetList: uiPresetList,
102617 uiQuickLinks: uiQuickLinks,
102618 uiRadialMenu: uiRadialMenu,
102619 uiRawMemberEditor: uiRawMemberEditor,
102620 uiRawMembershipEditor: uiRawMembershipEditor,
102621 uiRawTagEditor: uiRawTagEditor,
102624 uiSelectionList: uiSelectionList,
102626 uiSourceSwitch: uiSourceSwitch,
102631 uiTagReference: uiTagReference,
102633 uiTooltipHtml: uiTooltipHtml,
102635 uiViewOnOSM: uiViewOnOSM,
102636 uiViewOnKeepRight: uiViewOnKeepRight,
102638 utilArrayChunk: utilArrayChunk,
102639 utilArrayDifference: utilArrayDifference,
102640 utilArrayFlatten: utilArrayFlatten,
102641 utilArrayGroupBy: utilArrayGroupBy,
102642 utilArrayIntersection: utilArrayIntersection,
102643 utilArrayUnion: utilArrayUnion,
102644 utilArrayUniq: utilArrayUniq,
102645 utilArrayUniqBy: utilArrayUniqBy,
102646 utilAsyncMap: utilAsyncMap,
102647 utilCleanTags: utilCleanTags,
102648 utilDetect: utilDetect,
102649 utilDisplayName: utilDisplayName,
102650 utilDisplayNameForPath: utilDisplayNameForPath,
102651 utilDisplayType: utilDisplayType,
102652 utilDisplayLabel: utilDisplayLabel,
102653 utilEntityRoot: utilEntityRoot,
102654 utilEditDistance: utilEditDistance,
102655 utilEntitySelector: utilEntitySelector,
102656 utilEntityOrMemberSelector: utilEntityOrMemberSelector,
102657 utilEntityOrDeepMemberSelector: utilEntityOrDeepMemberSelector,
102658 utilFastMouse: utilFastMouse,
102659 utilFunctor: utilFunctor,
102660 utilGetAllNodes: utilGetAllNodes,
102661 utilGetSetValue: utilGetSetValue,
102662 utilHashcode: utilHashcode,
102663 utilHighlightEntities: utilHighlightEntities,
102664 utilKeybinding: utilKeybinding,
102665 utilNoAuto: utilNoAuto,
102666 utilObjectOmit: utilObjectOmit,
102667 utilPrefixCSSProperty: utilPrefixCSSProperty,
102668 utilPrefixDOMProperty: utilPrefixDOMProperty,
102669 utilPreset: utilPreset,
102670 utilQsString: utilQsString,
102671 utilRebind: utilRebind,
102672 utilSetTransform: utilSetTransform,
102673 utilSessionMutex: utilSessionMutex,
102674 utilStringQs: utilStringQs,
102675 utilTagDiff: utilTagDiff,
102676 utilTagText: utilTagText,
102678 utilTriggerEvent: utilTriggerEvent,
102680 validationAlmostJunction: validationAlmostJunction,
102681 validationCloseNodes: validationCloseNodes,
102682 validationCrossingWays: validationCrossingWays,
102683 validationDisconnectedWay: validationDisconnectedWay,
102684 validationFixmeTag: validationFixmeTag,
102685 validationGenericName: validationGenericName,
102686 validationImpossibleOneway: validationImpossibleOneway,
102687 validationIncompatibleSource: validationIncompatibleSource,
102688 validationMaprules: validationMaprules,
102689 validationMissingRole: validationMissingRole,
102690 validationMissingTag: validationMissingTag,
102691 validationOutdatedTags: validationOutdatedTags,
102692 validationPrivateData: validationPrivateData,
102693 validationTagSuggestsArea: validationTagSuggestsArea,
102694 validationUnsquareWay: validationUnsquareWay
102697 // polyfill requestIdleCallback
102698 window.requestIdleCallback = window.requestIdleCallback ||
102700 var start = Date.now();
102701 return window.requestAnimationFrame(function() {
102704 timeRemaining: function() {
102705 return Math.max(0, 50 - (Date.now() - start));
102711 window.cancelIdleCallback = window.cancelIdleCallback ||
102713 window.cancelAnimationFrame(id);
102718 //# sourceMappingURL=iD.js.map