})(this);
d3 = (function(){
- var d3 = {version: "3.2.7"}; // semver
+ var d3 = {version: "3.3.8"}; // semver
d3.ascending = function(a, b) {
return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
};
return array;
};
d3.permute = function(array, indexes) {
- var permutes = [],
- i = -1,
- n = indexes.length;
- while (++i < n) permutes[i] = array[indexes[i]];
+ var i = indexes.length, permutes = new Array(i);
+ while (i--) permutes[i] = array[indexes[i]];
return permutes;
};
+d3.pairs = function(array) {
+ var i = 0, n = array.length - 1, p0, p1 = array[0], pairs = new Array(n < 0 ? 0 : n);
+ while (i < n) pairs[i] = [p0 = p1, p1 = array[++i]];
+ return pairs;
+};
d3.zip = function() {
if (!(n = arguments.length)) return [];
return entries;
};
d3.merge = function(arrays) {
- return Array.prototype.concat.apply([], arrays);
+ var n = arrays.length,
+ m,
+ i = -1,
+ j = 0,
+ merged,
+ array;
+
+ while (++i < n) j += arrays[i].length;
+ merged = new Array(j);
+
+ while (--n >= 0) {
+ array = arrays[n];
+ m = array.length;
+ while (--m >= 0) {
+ merged[--j] = array[m];
+ }
+ }
+
+ return merged;
};
+var abs = Math.abs;
+
d3.range = function(start, stop, step) {
if (arguments.length < 3) {
step = 1;
}
if ((stop - start) / step === Infinity) throw new Error("infinite range");
var range = [],
- k = d3_range_integerScale(Math.abs(step)),
+ k = d3_range_integerScale(abs(step)),
i = -1,
j;
start *= k, stop *= k, step *= k;
d3.map = function(object) {
var map = new d3_Map;
- for (var key in object) map.set(key, object[key]);
+ if (object instanceof d3_Map) object.forEach(function(key, value) { map.set(key, value); });
+ else for (var key in object) map.set(key, object[key]);
return map;
};
};
d3.set = function(array) {
- var set = new d3_Set();
- if (array) for (var i = 0; i < array.length; i++) set.add(array[i]);
+ var set = new d3_Set;
+ if (array) for (var i = 0, n = array.length; i < n; ++i) set.add(array[i]);
return set;
};
}
});
d3.behavior = {};
+var d3_arraySlice = [].slice,
+ d3_array = function(list) { return d3_arraySlice.call(list); }; // conversion for NodeLists
+
var d3_document = document,
d3_documentElement = d3_document.documentElement,
d3_window = window;
+
+// Redefine d3_array if the browser doesn’t support slice-based conversion.
+try {
+ d3_array(d3_documentElement.childNodes)[0].nodeType;
+} catch(e) {
+ d3_array = function(list) {
+ var i = list.length, array = new Array(i);
+ while (i--) array[i] = list[i];
+ return array;
+ };
+}
// Copies a variable number of methods from source to target.
d3.rebind = function(target, source) {
var i = 1, n = arguments.length, method;
}
var d3_vendorPrefixes = ["webkit", "ms", "moz", "Moz", "o", "O"];
-
-var d3_array = d3_arraySlice; // conversion for NodeLists
-
-function d3_arrayCopy(pseudoarray) {
- var i = -1, n = pseudoarray.length, array = [];
- while (++i < n) array.push(pseudoarray[i]);
- return array;
-}
-
-function d3_arraySlice(pseudoarray) {
- return Array.prototype.slice.call(pseudoarray);
-}
-
-try {
- d3_array(d3_documentElement.childNodes)[0].nodeType;
-} catch(e) {
- d3_array = d3_arrayCopy;
-}
function d3_noop() {}
d3.dispatch = function() {
function d3_selection_creator(name) {
return typeof name === "function" ? name
- : (name = d3.ns.qualify(name)).local ? function() { return d3_document.createElementNS(name.space, name.local); }
- : function() { return d3_document.createElementNS(this.namespaceURI, name); };
+ : (name = d3.ns.qualify(name)).local ? function() { return this.ownerDocument.createElementNS(name.space, name.local); }
+ : function() { return this.ownerDocument.createElementNS(this.namespaceURI, name); };
}
d3_selectionPrototype.insert = function(name, before) {
name = d3_selection_creator(name);
before = d3_selection_selector(before);
return this.select(function() {
- return this.insertBefore(name.apply(this, arguments), before.apply(this, arguments));
+ return this.insertBefore(name.apply(this, arguments), before.apply(this, arguments) || null);
});
};
function d3_selection_sortComparator(comparator) {
if (!arguments.length) comparator = d3.ascending;
return function(a, b) {
- return (!a - !b) || comparator(a.__data__, b.__data__);
+ return a && b ? comparator(a.__data__, b.__data__) : !a - !b;
};
}
};
}
+// import "../transition/transition";
+
d3_selectionPrototype.transition = function() {
var id = d3_transitionInheritId || ++d3_transitionId,
subgroups = [],
return d3_transition(subgroups, id);
};
+// import "../transition/transition";
+
+d3_selectionPrototype.interrupt = function() {
+ return this.each(d3_selection_interrupt);
+};
+
+function d3_selection_interrupt() {
+ var lock = this.__transition__;
+ if (lock) ++lock.active;
+}
// TODO fast singleton implementation?
d3.select = function(node) {
var d3_mouse_bug44083 = /WebKit/.test(d3_window.navigator.userAgent) ? -1 : 0;
function d3_mousePoint(container, e) {
+ if (e.changedTouches) e = e.changedTouches[0];
var svg = container.ownerSVGElement || container;
if (svg.createSVGPoint) {
var point = svg.createSVGPoint();
d3_mouse_bug44083 = !(ctm.f || ctm.e);
svg.remove();
}
- if (d3_mouse_bug44083) {
- point.x = e.pageX;
- point.y = e.pageY;
- } else {
- point.x = e.clientX;
- point.y = e.clientY;
- }
+ if (d3_mouse_bug44083) point.x = e.pageX, point.y = e.pageY;
+ else point.x = e.clientX, point.y = e.clientY;
point = point.matrixTransform(container.getScreenCTM().inverse());
return [point.x, point.y];
}
return point;
}) : [];
};
+var π = Math.PI,
+ τ = 2 * π,
+ halfπ = π / 2,
+ ε = 1e-6,
+ ε2 = ε * ε,
+ d3_radians = π / 180,
+ d3_degrees = 180 / π;
+
+function d3_sgn(x) {
+ return x > 0 ? 1 : x < 0 ? -1 : 0;
+}
+
+function d3_acos(x) {
+ return x > 1 ? 0 : x < -1 ? π : Math.acos(x);
+}
+
+function d3_asin(x) {
+ return x > 1 ? halfπ : x < -1 ? -halfπ : Math.asin(x);
+}
+
+function d3_sinh(x) {
+ return ((x = Math.exp(x)) - 1 / x) / 2;
+}
+
+function d3_cosh(x) {
+ return ((x = Math.exp(x)) + 1 / x) / 2;
+}
+
+function d3_tanh(x) {
+ return ((x = Math.exp(2 * x)) - 1) / (x + 1);
+}
+
+function d3_haversin(x) {
+ return (x = Math.sin(x / 2)) * x;
+}
+
+var ρ = Math.SQRT2,
+ ρ2 = 2,
+ ρ4 = 4;
+
+// p0 = [ux0, uy0, w0]
+// p1 = [ux1, uy1, w1]
+d3.interpolateZoom = function(p0, p1) {
+ var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],
+ ux1 = p1[0], uy1 = p1[1], w1 = p1[2];
+
+ var dx = ux1 - ux0,
+ dy = uy1 - uy0,
+ d2 = dx * dx + dy * dy,
+ d1 = Math.sqrt(d2),
+ b0 = (w1 * w1 - w0 * w0 + ρ4 * d2) / (2 * w0 * ρ2 * d1),
+ b1 = (w1 * w1 - w0 * w0 - ρ4 * d2) / (2 * w1 * ρ2 * d1),
+ r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),
+ r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1),
+ dr = r1 - r0,
+ S = (dr || Math.log(w1 / w0)) / ρ;
+
+ function interpolate(t) {
+ var s = t * S;
+ if (dr) {
+ // General case.
+ var coshr0 = d3_cosh(r0),
+ u = w0 / (ρ2 * d1) * (coshr0 * d3_tanh(ρ * s + r0) - d3_sinh(r0));
+ return [
+ ux0 + u * dx,
+ uy0 + u * dy,
+ w0 * coshr0 / d3_cosh(ρ * s + r0)
+ ];
+ }
+ // Special case for u0 ~= u1.
+ return [
+ ux0 + t * dx,
+ uy0 + t * dy,
+ w0 * Math.exp(ρ * s)
+ ];
+ }
+
+ interpolate.duration = S * 1000;
+
+ return interpolate;
+};
d3.behavior.zoom = function() {
- var translate = [0, 0],
+ var view = {x: 0, y: 0, k: 1},
translate0, // translate when we started zooming (to avoid drift)
- scale = 1,
+ center, // desired position of translate0 after zooming
+ size = [960, 500], // viewport size; required for zoom interpolation
scaleExtent = d3_behavior_zoomInfinity,
mousedown = "mousedown.zoom",
mousemove = "mousemove.zoom",
mouseup = "mouseup.zoom",
- event = d3_eventDispatch(zoom, "zoom"),
+ mousewheelTimer,
+ touchstart = "touchstart.zoom",
+ touchtime, // time of last touchstart (to detect double-tap)
+ event = d3_eventDispatch(zoom, "zoomstart", "zoom", "zoomend"),
x0,
x1,
y0,
- y1,
- touchtime; // time of last touchstart (to detect double-tap)
+ y1;
- function zoom() {
- this.on(mousedown, mousedowned)
+ function zoom(g) {
+ g .on(mousedown, mousedowned)
.on(d3_behavior_zoomWheel + ".zoom", mousewheeled)
.on(mousemove, mousewheelreset)
.on("dblclick.zoom", dblclicked)
- .on("touchstart.zoom", touchstarted);
+ .on(touchstart, touchstarted);
}
- zoom.translate = function(x) {
- if (!arguments.length) return translate;
- translate = x.map(Number);
+ zoom.event = function(g) {
+ g.each(function() {
+ var event_ = event.of(this, arguments),
+ view1 = view;
+ if (d3_transitionInheritId) {
+ d3.select(this).transition()
+ .each("start.zoom", function() {
+ view = this.__chart__ || {x: 0, y: 0, k: 1}; // pre-transition state
+ zoomstarted(event_);
+ })
+ .tween("zoom:zoom", function() {
+ var dx = size[0],
+ dy = size[1],
+ cx = dx / 2,
+ cy = dy / 2,
+ i = d3.interpolateZoom(
+ [(cx - view.x) / view.k, (cy - view.y) / view.k, dx / view.k],
+ [(cx - view1.x) / view1.k, (cy - view1.y) / view1.k, dx / view1.k]
+ );
+ return function(t) {
+ var l = i(t), k = dx / l[2];
+ this.__chart__ = view = {x: cx - l[0] * k, y: cy - l[1] * k, k: k};
+ zoomed(event_);
+ };
+ })
+ .each("end.zoom", function() {
+ zoomended(event_);
+ });
+ } else {
+ this.__chart__ = view;
+ zoomstarted(event_);
+ zoomed(event_);
+ zoomended(event_);
+ }
+ });
+ }
+
+ zoom.translate = function(_) {
+ if (!arguments.length) return [view.x, view.y];
+ view = {x: +_[0], y: +_[1], k: view.k}; // copy-on-write
rescale();
return zoom;
};
- zoom.scale = function(x) {
- if (!arguments.length) return scale;
- scale = +x;
+ zoom.scale = function(_) {
+ if (!arguments.length) return view.k;
+ view = {x: view.x, y: view.y, k: +_}; // copy-on-write
rescale();
return zoom;
};
- zoom.scaleExtent = function(x) {
+ zoom.scaleExtent = function(_) {
if (!arguments.length) return scaleExtent;
- scaleExtent = x == null ? d3_behavior_zoomInfinity : x.map(Number);
+ scaleExtent = _ == null ? d3_behavior_zoomInfinity : [+_[0], +_[1]];
+ return zoom;
+ };
+
+ zoom.center = function(_) {
+ if (!arguments.length) return center;
+ center = _ && [+_[0], +_[1]];
+ return zoom;
+ };
+
+ zoom.size = function(_) {
+ if (!arguments.length) return size;
+ size = _ && [+_[0], +_[1]];
return zoom;
};
if (!arguments.length) return x1;
x1 = z;
x0 = z.copy();
- translate = [0, 0];
- scale = 1;
+ view = {x: 0, y: 0, k: 1}; // copy-on-write
return zoom;
};
if (!arguments.length) return y1;
y1 = z;
y0 = z.copy();
- translate = [0, 0];
- scale = 1;
+ view = {x: 0, y: 0, k: 1}; // copy-on-write
return zoom;
};
function location(p) {
- return [(p[0] - translate[0]) / scale, (p[1] - translate[1]) / scale];
+ return [(p[0] - view.x) / view.k, (p[1] - view.y) / view.k];
}
function point(l) {
- return [l[0] * scale + translate[0], l[1] * scale + translate[1]];
+ return [l[0] * view.k + view.x, l[1] * view.k + view.y];
}
function scaleTo(s) {
- scale = Math.max(scaleExtent[0], Math.min(scaleExtent[1], s));
+ view.k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], s));
}
function translateTo(p, l) {
l = point(l);
- translate[0] += p[0] - l[0];
- translate[1] += p[1] - l[1];
+ view.x += p[0] - l[0];
+ view.y += p[1] - l[1];
}
function rescale() {
- if (x1) x1.domain(x0.range().map(function(x) { return (x - translate[0]) / scale; }).map(x0.invert));
- if (y1) y1.domain(y0.range().map(function(y) { return (y - translate[1]) / scale; }).map(y0.invert));
+ if (x1) x1.domain(x0.range().map(function(x) { return (x - view.x) / view.k; }).map(x0.invert));
+ if (y1) y1.domain(y0.range().map(function(y) { return (y - view.y) / view.k; }).map(y0.invert));
}
- function dispatch(event) {
+ function zoomstarted(event) {
+ event({type: "zoomstart"});
+ }
+
+ function zoomed(event) {
rescale();
- event({type: "zoom", scale: scale, translate: translate});
+ event({type: "zoom", scale: view.k, translate: [view.x, view.y]});
+ }
+
+ function zoomended(event) {
+ event({type: "zoomend"});
}
function mousedowned() {
l = location(d3.mouse(target)),
dragRestore = d3_event_dragSuppress();
+ d3_selection_interrupt.call(target);
+ zoomstarted(event_);
+
function moved() {
dragged = 1;
translateTo(d3.mouse(target), l);
- dispatch(event_);
+ zoomed(event_);
}
function ended() {
w.on(mousemove, d3_window === target ? mousewheelreset : null).on(mouseup, null);
dragRestore(dragged && d3.event.target === eventTarget);
+ zoomended(event_);
}
}
+ // These closures persist for as long as at least one touch is active.
function touchstarted() {
var target = this,
event_ = event.of(target, arguments),
- touches = d3.touches(target),
- locations = {},
+ locations0 = {}, // touchstart locations
distance0 = 0, // distance² between initial touches
- scale0 = scale, // scale when we started touching
- now = Date.now(),
- name = "zoom-" + d3.event.changedTouches[0].identifier,
- touchmove = "touchmove." + name,
- touchend = "touchend." + name,
+ scale0, // scale when we started touching
+ eventId = d3.event.changedTouches[0].identifier,
+ touchmove = "touchmove.zoom-" + eventId,
+ touchend = "touchend.zoom-" + eventId,
w = d3.select(d3_window).on(touchmove, moved).on(touchend, ended),
- t = d3.select(target).on(mousedown, null), // prevent duplicate events
+ t = d3.select(target).on(mousedown, null).on(touchstart, started), // prevent duplicate events
dragRestore = d3_event_dragSuppress();
- touches.forEach(function(t) { locations[t.identifier] = location(t); });
+ d3_selection_interrupt.call(target);
+ started();
+ zoomstarted(event_);
- if (touches.length === 1) {
- if (now - touchtime < 500) { // dbltap
- var p = touches[0], l = location(touches[0]);
- scaleTo(scale * 2);
- translateTo(p, l);
- d3_eventPreventDefault();
- dispatch(event_);
+ // Updates locations of any touches in locations0.
+ function relocate() {
+ var touches = d3.touches(target);
+ scale0 = view.k;
+ touches.forEach(function(t) {
+ if (t.identifier in locations0) locations0[t.identifier] = location(t);
+ });
+ return touches;
+ }
+
+ // Temporarily override touchstart while gesture is active.
+ function started() {
+ // Only track touches started on the target element.
+ var changed = d3.event.changedTouches;
+ for (var i = 0, n = changed.length; i < n; ++i) {
+ locations0[changed[i].identifier] = null;
+ }
+
+ var touches = relocate(),
+ now = Date.now();
+
+ if (touches.length === 1) {
+ if (now - touchtime < 500) { // dbltap
+ var p = touches[0], l = locations0[p.identifier];
+ scaleTo(view.k * 2);
+ translateTo(p, l);
+ d3_eventPreventDefault();
+ zoomed(event_);
+ }
+ touchtime = now;
+ } else if (touches.length > 1) {
+ var p = touches[0], q = touches[1],
+ dx = p[0] - q[0], dy = p[1] - q[1];
+ distance0 = dx * dx + dy * dy;
}
- touchtime = now;
- } else if (touches.length > 1) {
- var p = touches[0], q = touches[1],
- dx = p[0] - q[0], dy = p[1] - q[1];
- distance0 = dx * dx + dy * dy;
}
function moved() {
var touches = d3.touches(target),
- p0 = touches[0],
- l0 = locations[p0.identifier];
-
- if (p1 = touches[1]) {
- var p1, l1 = locations[p1.identifier],
- scale1 = d3.event.scale;
- if (scale1 == null) {
- var distance1 = (distance1 = p1[0] - p0[0]) * distance1 + (distance1 = p1[1] - p0[1]) * distance1;
- scale1 = distance0 && Math.sqrt(distance1 / distance0);
+ p0, l0,
+ p1, l1;
+ for (var i = 0, n = touches.length; i < n; ++i, l1 = null) {
+ p1 = touches[i];
+ if (l1 = locations0[p1.identifier]) {
+ if (l0) break;
+ p0 = p1, l0 = l1;
}
+ }
+
+ if (l1) {
+ var distance1 = (distance1 = p1[0] - p0[0]) * distance1 + (distance1 = p1[1] - p0[1]) * distance1,
+ scale1 = distance0 && Math.sqrt(distance1 / distance0);
p0 = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];
l0 = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];
scaleTo(scale1 * scale0);
touchtime = null;
translateTo(p0, l0);
- dispatch(event_);
+ zoomed(event_);
}
function ended() {
+ // If there are any globally-active touches remaining, remove the ended
+ // touches from locations0.
+ if (d3.event.touches.length) {
+ var changed = d3.event.changedTouches;
+ for (var i = 0, n = changed.length; i < n; ++i) {
+ delete locations0[changed[i].identifier];
+ }
+ // If locations0 is not empty, then relocate and continue listening for
+ // touchmove and touchend.
+ for (var identifier in locations0) {
+ return void relocate(); // locations may have detached due to rotation
+ }
+ }
+ // Otherwise, remove touchmove and touchend listeners.
w.on(touchmove, null).on(touchend, null);
- t.on(mousedown, mousedowned);
+ t.on(mousedown, mousedowned).on(touchstart, touchstarted);
dragRestore();
+ zoomended(event_);
}
}
function mousewheeled() {
+ var event_ = event.of(this, arguments);
+ if (mousewheelTimer) clearTimeout(mousewheelTimer);
+ else d3_selection_interrupt.call(this), zoomstarted(event_);
+ mousewheelTimer = setTimeout(function() { mousewheelTimer = null; zoomended(event_); }, 50);
d3_eventPreventDefault();
- if (!translate0) translate0 = location(d3.mouse(this));
- scaleTo(Math.pow(2, d3_behavior_zoomDelta() * .002) * scale);
- translateTo(d3.mouse(this), translate0);
- dispatch(event.of(this, arguments));
+ var point = center || d3.mouse(this);
+ if (!translate0) translate0 = location(point);
+ scaleTo(Math.pow(2, d3_behavior_zoomDelta() * .002) * view.k);
+ translateTo(point, translate0);
+ zoomed(event_);
}
function mousewheelreset() {
}
function dblclicked() {
- var p = d3.mouse(this), l = location(p), k = Math.log(scale) / Math.LN2;
+ var event_ = event.of(this, arguments),
+ p = d3.mouse(this),
+ l = location(p),
+ k = Math.log(view.k) / Math.LN2;
+ zoomstarted(event_);
scaleTo(Math.pow(2, d3.event.shiftKey ? Math.ceil(k) - 1 : Math.floor(k) + 1));
translateTo(p, l);
- dispatch(event.of(this, arguments));
+ zoomed(event_);
+ zoomended(event_);
}
return d3.rebind(zoom, event, "on");
if (n < 3) then = Date.now();
// Add the callback to the tail of the queue.
- var time = then + delay, timer = {callback: callback, time: time, next: null};
- if (d3_timer_queueTail) d3_timer_queueTail.next = timer;
+ var time = then + delay, timer = {c: callback, t: time, f: false, n: null};
+ if (d3_timer_queueTail) d3_timer_queueTail.n = timer;
else d3_timer_queueHead = timer;
d3_timer_queueTail = timer;
d3_timer_sweep();
};
-function d3_timer_replace(callback, delay, then) {
- var n = arguments.length;
- if (n < 2) delay = 0;
- if (n < 3) then = Date.now();
- d3_timer_active.callback = callback;
- d3_timer_active.time = then + delay;
-}
-
function d3_timer_mark() {
var now = Date.now();
d3_timer_active = d3_timer_queueHead;
while (d3_timer_active) {
- if (now >= d3_timer_active.time) d3_timer_active.flush = d3_timer_active.callback(now - d3_timer_active.time);
- d3_timer_active = d3_timer_active.next;
+ if (now >= d3_timer_active.t) d3_timer_active.f = d3_timer_active.c(now - d3_timer_active.t);
+ d3_timer_active = d3_timer_active.n;
}
return now;
}
t1 = d3_timer_queueHead,
time = Infinity;
while (t1) {
- if (t1.flush) {
- t1 = t0 ? t0.next = t1.next : d3_timer_queueHead = t1.next;
+ if (t1.f) {
+ t1 = t0 ? t0.n = t1.n : d3_timer_queueHead = t1.n;
} else {
- if (t1.time < time) time = t1.time;
- t1 = (t0 = t1).next;
+ if (t1.t < time) time = t1.t;
+ t1 = (t0 = t1).n;
}
}
d3_timer_queueTail = t0;
return time;
}
-var π = Math.PI,
- ε = 1e-6,
- ε2 = ε * ε,
- d3_radians = π / 180,
- d3_degrees = 180 / π;
-
-function d3_sgn(x) {
- return x > 0 ? 1 : x < 0 ? -1 : 0;
-}
-
-function d3_acos(x) {
- return x > 1 ? 0 : x < -1 ? π : Math.acos(x);
-}
-
-function d3_asin(x) {
- return x > 1 ? π / 2 : x < -1 ? -π / 2 : Math.asin(x);
-}
-
-function d3_sinh(x) {
- return (Math.exp(x) - Math.exp(-x)) / 2;
-}
-
-function d3_cosh(x) {
- return (Math.exp(x) + Math.exp(-x)) / 2;
-}
-
-function d3_haversin(x) {
- return (x = Math.sin(x / 2)) * x;
-}
d3.geo = {};
function d3_identity(d) {
return d;
}
function d3_geo_sphericalEqual(a, b) {
- return Math.abs(a[0] - b[0]) < ε && Math.abs(a[1] - b[1]) < ε;
+ return abs(a[0] - b[0]) < ε && abs(a[1] - b[1]) < ε;
}
// General spherical polygon clipping algorithm: takes a polygon, cuts it into
// visible line segments and rejoins the segments by interpolating along the
// clip edge.
-function d3_geo_clipPolygon(segments, compare, inside, interpolate, listener) {
+function d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener) {
var subject = [],
clip = [];
return;
}
- var a = {point: p0, points: segment, other: null, visited: false, entry: true, subject: true},
- b = {point: p0, points: [p0], other: a, visited: false, entry: false, subject: false};
- a.other = b;
+ var a = new d3_geo_clipPolygonIntersection(p0, segment, null, true),
+ b = new d3_geo_clipPolygonIntersection(p0, null, a, false);
+ a.o = b;
subject.push(a);
clip.push(b);
- a = {point: p1, points: [p1], other: null, visited: false, entry: false, subject: true};
- b = {point: p1, points: [p1], other: a, visited: false, entry: true, subject: false};
- a.other = b;
+ a = new d3_geo_clipPolygonIntersection(p1, segment, null, false);
+ b = new d3_geo_clipPolygonIntersection(p1, null, a, true);
+ a.o = b;
subject.push(a);
clip.push(b);
});
d3_geo_clipPolygonLinkCircular(clip);
if (!subject.length) return;
- if (inside) for (var i = 1, e = !inside(clip[0].point), n = clip.length; i < n; ++i) {
- clip[i].entry = (e = !e);
+ for (var i = 0, entry = clipStartInside, n = clip.length; i < n; ++i) {
+ clip[i].e = entry = !entry;
}
var start = subject[0],
- current,
points,
point;
while (1) {
// Find first unvisited intersection.
- current = start;
- while (current.visited) if ((current = current.next) === start) return;
- points = current.points;
+ var current = start,
+ isSubject = true;
+ while (current.v) if ((current = current.n) === start) return;
+ points = current.z;
listener.lineStart();
do {
- current.visited = current.other.visited = true;
- if (current.entry) {
- if (current.subject) {
- for (var i = 0; i < points.length; i++) listener.point((point = points[i])[0], point[1]);
+ current.v = current.o.v = true;
+ if (current.e) {
+ if (isSubject) {
+ for (var i = 0, n = points.length; i < n; ++i) listener.point((point = points[i])[0], point[1]);
} else {
- interpolate(current.point, current.next.point, 1, listener);
+ interpolate(current.x, current.n.x, 1, listener);
}
- current = current.next;
+ current = current.n;
} else {
- if (current.subject) {
- points = current.prev.points;
- for (var i = points.length; --i >= 0;) listener.point((point = points[i])[0], point[1]);
+ if (isSubject) {
+ points = current.p.z;
+ for (var i = points.length - 1; i >= 0; --i) listener.point((point = points[i])[0], point[1]);
} else {
- interpolate(current.point, current.prev.point, -1, listener);
+ interpolate(current.x, current.p.x, -1, listener);
}
- current = current.prev;
+ current = current.p;
}
- current = current.other;
- points = current.points;
- } while (!current.visited);
+ current = current.o;
+ points = current.z;
+ isSubject = !isSubject;
+ } while (!current.v);
listener.lineEnd();
}
}
a = array[0],
b;
while (++i < n) {
- a.next = b = array[i];
- b.prev = a;
+ a.n = b = array[i];
+ b.p = a;
a = b;
}
- a.next = b = array[0];
- b.prev = a;
+ a.n = b = array[0];
+ b.p = a;
}
-function d3_geo_clip(pointVisible, clipLine, interpolate, polygonContains) {
- return function(listener) {
- var line = clipLine(listener);
+function d3_geo_clipPolygonIntersection(point, points, other, entry) {
+ this.x = point;
+ this.z = points;
+ this.o = other; // another intersection
+ this.e = entry; // is an entry?
+ this.v = false; // visited
+ this.n = this.p = null; // next & previous
+}
+
+function d3_geo_clip(pointVisible, clipLine, interpolate, clipStart) {
+ return function(rotate, listener) {
+ var line = clipLine(listener),
+ rotatedClipStart = rotate.invert(clipStart[0], clipStart[1]);
var clip = {
point: point,
clip.lineEnd = lineEnd;
segments = d3.merge(segments);
+ var clipStartInside = d3_geo_pointInPolygon(rotatedClipStart, polygon);
if (segments.length) {
- d3_geo_clipPolygon(segments, d3_geo_clipSort, null, interpolate, listener);
- } else if (polygonContains(polygon)) {
+ d3_geo_clipPolygon(segments, d3_geo_clipSort, clipStartInside, interpolate, listener);
+ } else if (clipStartInside) {
listener.lineStart();
interpolate(null, null, 1, listener);
listener.lineEnd();
}
};
- function point(λ, φ) { if (pointVisible(λ, φ)) listener.point(λ, φ); }
- function pointLine(λ, φ) { line.point(λ, φ); }
+ function point(λ, φ) {
+ var point = rotate(λ, φ);
+ if (pointVisible(λ = point[0], φ = point[1])) listener.point(λ, φ);
+ }
+ function pointLine(λ, φ) {
+ var point = rotate(λ, φ);
+ line.point(point[0], point[1]);
+ }
function lineStart() { clip.point = pointLine; line.lineStart(); }
function lineEnd() { clip.point = point; line.lineEnd(); }
ring;
function pointRing(λ, φ) {
- ringListener.point(λ, φ);
ring.push([λ, φ]);
+ var point = rotate(λ, φ);
+ ringListener.point(point[0], point[1]);
}
function ringStart() {
// Intersection points are sorted along the clip edge. For both antimeridian
// cutting and circle clipping, the same comparison is used.
function d3_geo_clipSort(a, b) {
- return ((a = a.point)[0] < 0 ? a[1] - π / 2 - ε : π / 2 - a[1])
- - ((b = b.point)[0] < 0 ? b[1] - π / 2 - ε : π / 2 - b[1]);
+ return ((a = a.x)[0] < 0 ? a[1] - halfπ - ε : halfπ - a[1])
+ - ((b = b.x)[0] < 0 ? b[1] - halfπ - ε : halfπ - b[1]);
}
// Adds floating point numbers with twice the normal precision.
// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and
listener.sphere();
},
Point: function(object, listener) {
- var coordinate = object.coordinates;
- listener.point(coordinate[0], coordinate[1]);
+ object = object.coordinates;
+ listener.point(object[0], object[1], object[2]);
},
MultiPoint: function(object, listener) {
- var coordinates = object.coordinates, i = -1, n = coordinates.length, coordinate;
- while (++i < n) coordinate = coordinates[i], listener.point(coordinate[0], coordinate[1]);
+ var coordinates = object.coordinates, i = -1, n = coordinates.length;
+ while (++i < n) object = coordinates[i], listener.point(object[0], object[1], object[2]);
},
LineString: function(object, listener) {
d3_geo_streamLine(object.coordinates, listener, 0);
function d3_geo_streamLine(coordinates, listener, closed) {
var i = -1, n = coordinates.length - closed, coordinate;
listener.lineStart();
- while (++i < n) coordinate = coordinates[i], listener.point(coordinate[0], coordinate[1]);
+ while (++i < n) coordinate = coordinates[i], listener.point(coordinate[0], coordinate[1], coordinate[2]);
listener.lineEnd();
}
parallel = point[1],
meridianNormal = [Math.sin(meridian), -Math.cos(meridian), 0],
polarAngle = 0,
- polar = false,
- southPole = false,
winding = 0;
d3_geo_areaRingSum.reset();
sinφ = Math.sin(φ),
cosφ = Math.cos(φ),
dλ = λ - λ0,
- antimeridian = Math.abs(dλ) > π,
+ antimeridian = abs(dλ) > π,
k = sinφ0 * sinφ;
d3_geo_areaRingSum.add(Math.atan2(k * Math.sin(dλ), cosφ0 * cosφ + k * Math.cos(dλ)));
- if (Math.abs(φ) < ε) southPole = true;
- polarAngle += antimeridian ? dλ + (dλ >= 0 ? 2 : -2) * π : dλ;
+ polarAngle += antimeridian ? dλ + (dλ >= 0 ? τ : -τ): dλ;
// Are the longitudes either side of the point's meridian, and are the
// latitudes smaller than the parallel?
var intersection = d3_geo_cartesianCross(meridianNormal, arc);
d3_geo_cartesianNormalize(intersection);
var φarc = (antimeridian ^ dλ >= 0 ? -1 : 1) * d3_asin(intersection[2]);
- if (parallel > φarc) {
+ if (parallel > φarc || parallel === φarc && (arc[0] || arc[1])) {
winding += antimeridian ^ dλ >= 0 ? 1 : -1;
}
}
if (!j++) break;
λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ, point0 = point;
}
- if (Math.abs(polarAngle) > ε) polar = true;
}
// First, determine whether the South pole is inside or outside:
//
// It is inside if:
- // * the polygon doesn't wind around it, and its area is negative (counter-clockwise).
- // * otherwise, if the polygon winds around it in a clockwise direction.
+ // * the polygon winds around it in a clockwise direction.
+ // * the polygon does not (cumulatively) wind around it, but has a negative
+ // (counter-clockwise) area.
//
// Second, count the (signed) number of times a segment crosses a meridian
// from the point to the South pole. If it is zero, then the point is the
// same side as the South pole.
- return (!southPole && !polar && d3_geo_areaRingSum < 0 || polarAngle < -ε) ^ (winding & 1);
+ return (polarAngle < -ε || polarAngle < ε && d3_geo_areaRingSum < 0) ^ (winding & 1);
}
var d3_geo_clipAntimeridian = d3_geo_clip(
d3_true,
d3_geo_clipAntimeridianLine,
d3_geo_clipAntimeridianInterpolate,
- d3_geo_clipAntimeridianPolygonContains);
+ [-π, -π / 2]);
// Takes a line and cuts into visible segments. Return values:
// 0: there were intersections or the line was empty.
},
point: function(λ1, φ1) {
var sλ1 = λ1 > 0 ? π : -π,
- dλ = Math.abs(λ1 - λ0);
- if (Math.abs(dλ - π) < ε) { // line crosses a pole
- listener.point(λ0, φ0 = (φ0 + φ1) / 2 > 0 ? π / 2 : -π / 2);
+ dλ = abs(λ1 - λ0);
+ if (abs(dλ - π) < ε) { // line crosses a pole
+ listener.point(λ0, φ0 = (φ0 + φ1) / 2 > 0 ? halfπ : -halfπ);
listener.point(sλ0, φ0);
listener.lineEnd();
listener.lineStart();
clean = 0;
} else if (sλ0 !== sλ1 && dλ >= π) { // line crosses antimeridian
// handle degeneracies
- if (Math.abs(λ0 - sλ0) < ε) λ0 -= sλ0 * ε;
- if (Math.abs(λ1 - sλ1) < ε) λ1 -= sλ1 * ε;
+ if (abs(λ0 - sλ0) < ε) λ0 -= sλ0 * ε;
+ if (abs(λ1 - sλ1) < ε) λ1 -= sλ1 * ε;
φ0 = d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1);
listener.point(sλ0, φ0);
listener.lineEnd();
var cosφ0,
cosφ1,
sinλ0_λ1 = Math.sin(λ0 - λ1);
- return Math.abs(sinλ0_λ1) > ε
+ return abs(sinλ0_λ1) > ε
? Math.atan((Math.sin(φ0) * (cosφ1 = Math.cos(φ1)) * Math.sin(λ1)
- Math.sin(φ1) * (cosφ0 = Math.cos(φ0)) * Math.sin(λ0))
/ (cosφ0 * cosφ1 * sinλ0_λ1))
function d3_geo_clipAntimeridianInterpolate(from, to, direction, listener) {
var φ;
if (from == null) {
- φ = direction * π / 2;
+ φ = direction * halfπ;
listener.point(-π, φ);
listener.point( 0, φ);
listener.point( π, φ);
listener.point(-π, -φ);
listener.point(-π, 0);
listener.point(-π, φ);
- } else if (Math.abs(from[0] - to[0]) > ε) {
- var s = (from[0] < to[0] ? 1 : -1) * π;
+ } else if (abs(from[0] - to[0]) > ε) {
+ var s = from[0] < to[0] ? π : -π;
φ = direction * s / 2;
listener.point(-s, φ);
listener.point( 0, φ);
}
}
-var d3_geo_clipAntimeridianPoint = [-π, 0];
-
-function d3_geo_clipAntimeridianPolygonContains(polygon) {
- return d3_geo_pointInPolygon(d3_geo_clipAntimeridianPoint, polygon);
-}
-
function d3_geo_equirectangular(λ, φ) {
return [λ, φ];
}
return forward;
};
+function d3_geo_identityRotation(λ, φ) {
+ return [λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ];
+}
+
+d3_geo_identityRotation.invert = d3_geo_equirectangular;
+
// Note: |δλ| must be < 2π
function d3_geo_rotation(δλ, δφ, δγ) {
return δλ ? (δφ || δγ ? d3_geo_compose(d3_geo_rotationλ(δλ), d3_geo_rotationφγ(δφ, δγ))
: d3_geo_rotationλ(δλ))
: (δφ || δγ ? d3_geo_rotationφγ(δφ, δγ)
- : d3_geo_equirectangular);
+ : d3_geo_identityRotation);
}
function d3_geo_forwardRotationλ(δλ) {
return function(λ, φ) {
- return λ += δλ, [λ > π ? λ - 2 * π : λ < -π ? λ + 2 * π : λ, φ];
+ return λ += δλ, [λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ];
};
}
var cr = Math.cos(radius),
sr = Math.sin(radius);
return function(from, to, direction, listener) {
+ var step = direction * precision;
if (from != null) {
from = d3_geo_circleAngle(cr, from);
to = d3_geo_circleAngle(cr, to);
- if (direction > 0 ? from < to: from > to) from += direction * 2 * π;
+ if (direction > 0 ? from < to: from > to) from += direction * τ;
} else {
- from = radius + direction * 2 * π;
- to = radius;
+ from = radius + direction * τ;
+ to = radius - .5 * step;
}
- var point;
- for (var step = direction * precision, t = from; direction > 0 ? t > to : t < to; t -= step) {
+ for (var point, t = from; direction > 0 ? t > to : t < to; t -= step) {
listener.point((point = d3_geo_spherical([
cr,
-sr * Math.cos(t),
function d3_geo_clipCircle(radius) {
var cr = Math.cos(radius),
smallRadius = cr > 0,
- point = [radius, 0],
- notHemisphere = Math.abs(cr) > ε, // TODO optimise for this common case
+ notHemisphere = abs(cr) > ε, // TODO optimise for this common case
interpolate = d3_geo_circleInterpolate(radius, 6 * d3_radians);
- return d3_geo_clip(visible, clipLine, interpolate, polygonContains);
+ return d3_geo_clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-π, radius - π]);
function visible(λ, φ) {
return Math.cos(λ) * Math.cos(φ) > cr;
z;
if (λ1 < λ0) z = λ0, λ0 = λ1, λ1 = z;
var δλ = λ1 - λ0,
- polar = Math.abs(δλ - π) < ε,
+ polar = abs(δλ - π) < ε,
meridian = polar || δλ < ε;
if (!polar && φ1 < φ0) z = φ0, φ0 = φ1, φ1 = z;
// Check that the first point is between a and b.
if (meridian
? polar
- ? φ0 + φ1 > 0 ^ q[1] < (Math.abs(q[0] - λ0) < ε ? φ0 : φ1)
+ ? φ0 + φ1 > 0 ^ q[1] < (abs(q[0] - λ0) < ε ? φ0 : φ1)
: φ0 <= q[1] && q[1] <= φ1
: δλ > π ^ (λ0 <= q[0] && q[0] <= λ1)) {
var q1 = d3_geo_cartesianScale(u, (-w + t) / uu);
else if (φ > r) code |= 8; // above
return code;
}
+}
- function polygonContains(polygon) {
- return d3_geo_pointInPolygon(point, polygon);
- }
+// Liang–Barsky line clipping.
+function d3_geom_clipLine(x0, y0, x1, y1) {
+ return function(line) {
+ var a = line.a,
+ b = line.b,
+ ax = a.x,
+ ay = a.y,
+ bx = b.x,
+ by = b.y,
+ t0 = 0,
+ t1 = 1,
+ dx = bx - ax,
+ dy = by - ay,
+ r;
+
+ r = x0 - ax;
+ if (!dx && r > 0) return;
+ r /= dx;
+ if (dx < 0) {
+ if (r < t0) return;
+ if (r < t1) t1 = r;
+ } else if (dx > 0) {
+ if (r > t1) return;
+ if (r > t0) t0 = r;
+ }
+
+ r = x1 - ax;
+ if (!dx && r < 0) return;
+ r /= dx;
+ if (dx < 0) {
+ if (r > t1) return;
+ if (r > t0) t0 = r;
+ } else if (dx > 0) {
+ if (r < t0) return;
+ if (r < t1) t1 = r;
+ }
+
+ r = y0 - ay;
+ if (!dy && r > 0) return;
+ r /= dy;
+ if (dy < 0) {
+ if (r < t0) return;
+ if (r < t1) t1 = r;
+ } else if (dy > 0) {
+ if (r > t1) return;
+ if (r > t0) t0 = r;
+ }
+
+ r = y1 - ay;
+ if (!dy && r < 0) return;
+ r /= dy;
+ if (dy < 0) {
+ if (r > t1) return;
+ if (r > t0) t0 = r;
+ } else if (dy > 0) {
+ if (r < t0) return;
+ if (r < t1) t1 = r;
+ }
+
+ if (t0 > 0) line.a = {x: ax + t0 * dx, y: ay + t0 * dy};
+ if (t1 < 1) line.b = {x: ax + t1 * dx, y: ay + t1 * dy};
+ return line;
+ };
}
-var d3_geo_clipViewMAX = 1e9;
+var d3_geo_clipExtentMAX = 1e9;
+
+d3.geo.clipExtent = function() {
+ var x0, y0, x1, y1,
+ stream,
+ clip,
+ clipExtent = {
+ stream: function(output) {
+ if (stream) stream.valid = false;
+ stream = clip(output);
+ stream.valid = true; // allow caching by d3.geo.path
+ return stream;
+ },
+ extent: function(_) {
+ if (!arguments.length) return [[x0, y0], [x1, y1]];
+ clip = d3_geo_clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]);
+ if (stream) stream.valid = false, stream = null;
+ return clipExtent;
+ }
+ };
+ return clipExtent.extent([[0, 0], [960, 500]]);
+};
-function d3_geo_clipView(x0, y0, x1, y1) {
+function d3_geo_clipExtent(x0, y0, x1, y1) {
return function(listener) {
var listener_ = listener,
bufferListener = d3_geo_clipBufferListener(),
+ clipLine = d3_geom_clipLine(x0, y0, x1, y1),
segments,
polygon,
ring;
listener = bufferListener;
segments = [];
polygon = [];
+ clean = true;
},
polygonEnd: function() {
listener = listener_;
- if ((segments = d3.merge(segments)).length) {
+ segments = d3.merge(segments);
+ var clipStartInside = insidePolygon([x0, y1]),
+ inside = clean && clipStartInside,
+ visible = segments.length;
+ if (inside || visible) {
listener.polygonStart();
- d3_geo_clipPolygon(segments, compare, inside, interpolate, listener);
+ if (inside) {
+ listener.lineStart();
+ interpolate(null, null, 1, listener);
+ listener.lineEnd();
+ }
+ if (visible) {
+ d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener);
+ }
listener.polygonEnd();
- } else if (insidePolygon([x0, y0])) {
- listener.polygonStart(), listener.lineStart();
- interpolate(null, null, 1, listener);
- listener.lineEnd(), listener.polygonEnd();
}
segments = polygon = ring = null;
}
};
- function inside(point) {
- var a = corner(point, -1),
- i = insidePolygon([a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0]);
- return i;
- }
-
function insidePolygon(p) {
var wn = 0, // the winding number counter
n = polygon.length,
}
}
- function visible(x, y) {
+ function pointVisible(x, y) {
return x0 <= x && x <= x1 && y0 <= y && y <= y1;
}
function point(x, y) {
- if (visible(x, y)) listener.point(x, y);
+ if (pointVisible(x, y)) listener.point(x, y);
}
var x__, y__, v__, // first point
x_, y_, v_, // previous point
- first;
+ first,
+ clean;
function lineStart() {
clip.point = linePoint;
}
function linePoint(x, y) {
- x = Math.max(-d3_geo_clipViewMAX, Math.min(d3_geo_clipViewMAX, x));
- y = Math.max(-d3_geo_clipViewMAX, Math.min(d3_geo_clipViewMAX, y));
- var v = visible(x, y);
+ x = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, x));
+ y = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, y));
+ var v = pointVisible(x, y);
if (polygon) ring.push([x, y]);
if (first) {
x__ = x, y__ = y, v__ = v;
} else {
if (v && v_) listener.point(x, y);
else {
- var a = [x_, y_],
- b = [x, y];
- if (clipLine(a, b)) {
+ var l = {a: {x: x_, y: y_}, b: {x: x, y: y}};
+ if (clipLine(l)) {
if (!v_) {
listener.lineStart();
- listener.point(a[0], a[1]);
+ listener.point(l.a.x, l.a.y);
}
- listener.point(b[0], b[1]);
+ listener.point(l.b.x, l.b.y);
if (!v) listener.lineEnd();
+ clean = false;
} else if (v) {
listener.lineStart();
listener.point(x, y);
+ clean = false;
}
}
}
};
function corner(p, direction) {
- return Math.abs(p[0] - x0) < ε ? direction > 0 ? 0 : 3
- : Math.abs(p[0] - x1) < ε ? direction > 0 ? 2 : 1
- : Math.abs(p[1] - y0) < ε ? direction > 0 ? 1 : 0
- : direction > 0 ? 3 : 2; // Math.abs(p[1] - y1) < ε
+ return abs(p[0] - x0) < ε ? direction > 0 ? 0 : 3
+ : abs(p[0] - x1) < ε ? direction > 0 ? 2 : 1
+ : abs(p[1] - y0) < ε ? direction > 0 ? 1 : 0
+ : direction > 0 ? 3 : 2; // abs(p[1] - y1) < ε
}
function compare(a, b) {
- return comparePoints(a.point, b.point);
+ return comparePoints(a.x, b.x);
}
function comparePoints(a, b) {
: ca === 2 ? a[1] - b[1]
: b[0] - a[0];
}
-
- // Liang–Barsky line clipping.
- function clipLine(a, b) {
- var dx = b[0] - a[0],
- dy = b[1] - a[1],
- t = [0, 1];
-
- if (Math.abs(dx) < ε && Math.abs(dy) < ε) return x0 <= a[0] && a[0] <= x1 && y0 <= a[1] && a[1] <= y1;
-
- if (d3_geo_clipViewT(x0 - a[0], dx, t) &&
- d3_geo_clipViewT(a[0] - x1, -dx, t) &&
- d3_geo_clipViewT(y0 - a[1], dy, t) &&
- d3_geo_clipViewT(a[1] - y1, -dy, t)) {
- if (t[1] < 1) {
- b[0] = a[0] + t[1] * dx;
- b[1] = a[1] + t[1] * dy;
- }
- if (t[0] > 0) {
- a[0] += t[0] * dx;
- a[1] += t[0] * dy;
- }
- return true;
- }
-
- return false;
- }
-}
-
-function d3_geo_clipViewT(num, denominator, t) {
- if (Math.abs(denominator) < ε) return num <= 0;
-
- var u = num / denominator;
-
- if (denominator > 0) {
- if (u > t[1]) return false;
- if (u > t[0]) t[0] = u;
- } else {
- if (u < t[0]) return false;
- if (u < t[1]) t[1] = u;
- }
- return true;
}
function d3_geo_compose(a, b) {
var dλ = λ - λ_,
s = dλ > 0 ? 1 : -1,
λi = inflection[0] * d3_degrees * s,
- antimeridian = Math.abs(dλ) > 180;
+ antimeridian = abs(dλ) > 180;
if (antimeridian ^ (s * λ_ < λi && λi < s * λ)) {
var φi = inflection[1] * d3_degrees;
if (φi > φ1) φ1 = φi;
function ringPoint(λ, φ) {
if (p0) {
var dλ = λ - λ_;
- dλSum += Math.abs(dλ) > 180 ? dλ + (dλ > 0 ? 360 : -360) : dλ;
+ dλSum += abs(dλ) > 180 ? dλ + (dλ > 0 ? 360 : -360) : dλ;
} else λ__ = λ, φ__ = φ;
d3_geo_area.point(λ, φ);
linePoint(λ, φ);
function ringEnd() {
ringPoint(λ__, φ__);
d3_geo_area.lineEnd();
- if (Math.abs(dλSum) > ε) λ0 = -(λ1 = 180);
+ if (abs(dλSum) > ε) λ0 = -(λ1 = 180);
range[0] = λ0, range[1] = λ1;
p0 = null;
}
},
polygonEnd: function() {
d3_geo_pathArea.lineStart = d3_geo_pathArea.lineEnd = d3_geo_pathArea.point = d3_noop;
- d3_geo_pathAreaSum += Math.abs(d3_geo_pathAreaPolygon / 2);
+ d3_geo_pathAreaSum += abs(d3_geo_pathAreaPolygon / 2);
}
};
function point(x, y) {
context.moveTo(x, y);
- context.arc(x, y, pointRadius, 0, 2 * π);
+ context.arc(x, y, pointRadius, 0, τ);
}
function pointLineStart(x, y) {
c = c0 + c1,
m = Math.sqrt(a * a + b * b + c * c),
φ2 = Math.asin(c /= m),
- λ2 = Math.abs(Math.abs(c) - 1) < ε ? (λ0 + λ1) / 2 : Math.atan2(b, a),
+ λ2 = abs(abs(c) - 1) < ε ? (λ0 + λ1) / 2 : Math.atan2(b, a),
p = project(λ2, φ2),
x2 = p[0],
y2 = p[1],
dy2 = y2 - y0,
dz = dy * dx2 - dx * dy2;
if (dz * dz / d2 > δ2 // perpendicular projected distance
- || Math.abs((dx * dx2 + dy * dy2) / d2 - .5) > .3 // midpoint close to an end
+ || abs((dx * dx2 + dy * dy2) / d2 - .5) > .3 // midpoint close to an end
|| a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance
resampleLineTo(x0, y0, λ0, a0, b0, c0, x2, y2, λ2, a /= m, b /= m, c, depth, stream);
stream.point(x2, y2);
return resample;
}
+d3.geo.transform = function(methods) {
+ return {
+ stream: function(stream) {
+ var transform = new d3_geo_transform(stream);
+ for (var k in methods) transform[k] = methods[k];
+ return transform;
+ }
+ };
+};
+
+function d3_geo_transform(stream) {
+ this.stream = stream;
+}
+
+d3_geo_transform.prototype = {
+ point: function(x, y) { this.stream.point(x, y); },
+ sphere: function() { this.stream.sphere(); },
+ lineStart: function() { this.stream.lineStart(); },
+ lineEnd: function() { this.stream.lineEnd(); },
+ polygonStart: function() { this.stream.polygonStart(); },
+ polygonEnd: function() { this.stream.polygonEnd(); }
+};
+
d3.geo.path = function() {
var pointRadius = 4.5,
projection,
};
function d3_geo_pathProjectStream(project) {
- var resample = d3_geo_resample(function(λ, φ) { return project([λ * d3_degrees, φ * d3_degrees]); });
+ var resample = d3_geo_resample(function(x, y) { return project([x * d3_degrees, y * d3_degrees]); });
return function(stream) {
- stream = resample(stream);
- return {
- point: function(λ, φ) { stream.point(λ * d3_radians, φ * d3_radians); },
- sphere: function() { stream.sphere(); },
- lineStart: function() { stream.lineStart(); },
- lineEnd: function() { stream.lineEnd(); },
- polygonStart: function() { stream.polygonStart(); },
- polygonEnd: function() { stream.polygonEnd(); }
- };
+ var transform = new d3_geo_transform(stream = resample(stream));
+ transform.point = function(x, y) { stream.point(x * d3_radians, y * d3_radians); };
+ return transform;
};
}
projection.stream = function(output) {
if (stream) stream.valid = false;
- stream = d3_geo_projectionRadiansRotate(rotate, preclip(projectResample(postclip(output))));
+ stream = d3_geo_projectionRadians(preclip(rotate, projectResample(postclip(output))));
stream.valid = true; // allow caching by d3.geo.path
return stream;
};
projection.clipExtent = function(_) {
if (!arguments.length) return clipExtent;
clipExtent = _;
- postclip = _ == null ? d3_identity : d3_geo_clipView(_[0][0], _[0][1], _[1][0], _[1][1]);
+ postclip = _ ? d3_geo_clipExtent(_[0][0], _[0][1], _[1][0], _[1][1]) : d3_identity;
return invalidate();
};
}
function invalidate() {
- if (stream) {
- stream.valid = false;
- stream = null;
- }
+ if (stream) stream.valid = false, stream = null;
return projection;
}
};
}
-function d3_geo_projectionRadiansRotate(rotate, stream) {
- return {
- point: function(x, y) {
- y = rotate(x * d3_radians, y * d3_radians), x = y[0];
- stream.point(x > π ? x - 2 * π : x < -π ? x + 2 * π : x, y[1]);
- },
- sphere: function() { stream.sphere(); },
- lineStart: function() { stream.lineStart(); },
- lineEnd: function() { stream.lineEnd(); },
- polygonStart: function() { stream.polygonStart(); },
- polygonEnd: function() { stream.polygonEnd(); }
+function d3_geo_projectionRadians(stream) {
+ var transform = new d3_geo_transform(stream);
+ transform.point = function(λ, φ) {
+ stream.point(λ * d3_radians, φ * d3_radians);
};
+ return transform;
}
function d3_geo_mercator(λ, φ) {
}
d3_geo_mercator.invert = function(x, y) {
- return [x, 2 * Math.atan(Math.exp(y)) - π / 2];
+ return [x, 2 * Math.atan(Math.exp(y)) - halfπ];
};
function d3_geo_mercatorProjection(project) {
m = i >= 0 ? name.substring(i + 1) : "in";
t = d3_ease.get(t) || d3_ease_default;
m = d3_ease_mode.get(m) || d3_identity;
- return d3_ease_clamp(m(t.apply(null, Array.prototype.slice.call(arguments, 1))));
+ return d3_ease_clamp(m(t.apply(null, d3_arraySlice.call(arguments, 1))));
};
function d3_ease_clamp(f) {
}
function d3_ease_sin(t) {
- return 1 - Math.cos(t * π / 2);
+ return 1 - Math.cos(t * halfπ);
}
function d3_ease_exp(t) {
function d3_ease_elastic(a, p) {
var s;
if (arguments.length < 2) p = 0.45;
- if (arguments.length) s = p / (2 * π) * Math.asin(1 / a);
+ if (arguments.length) s = p / τ * Math.asin(1 / a);
else a = 1, s = p / 4;
return function(t) {
- return 1 + a * Math.pow(2, 10 * -t) * Math.sin((t - s) * 2 * π / p);
+ return 1 + a * Math.pow(2, -10 * t) * Math.sin((t - s) * τ / p);
};
}
d3_transitionPrototype.remove = function() {
return this.each("end.transition", function() {
var p;
- if (!this.__transition__ && (p = this.parentNode)) p.removeChild(this);
+ if (this.__transition__.count < 2 && (p = this.parentNode)) p.removeChild(this);
});
};
d3_transitionPrototype.delay = function(value) {
var id = this.id;
return d3_selection_each(this, typeof value === "function"
- ? function(node, i, j) { node.__transition__[id].delay = value.call(node, node.__data__, i, j) | 0; }
- : (value |= 0, function(node) { node.__transition__[id].delay = value; }));
+ ? function(node, i, j) { node.__transition__[id].delay = +value.call(node, node.__data__, i, j); }
+ : (value = +value, function(node) { node.__transition__[id].delay = value; }));
};
d3_transitionPrototype.duration = function(value) {
var id = this.id;
return d3_selection_each(this, typeof value === "function"
- ? function(node, i, j) { node.__transition__[id].duration = Math.max(1, value.call(node, node.__data__, i, j) | 0); }
- : (value = Math.max(1, value | 0), function(node) { node.__transition__[id].duration = value; }));
+ ? function(node, i, j) { node.__transition__[id].duration = Math.max(1, value.call(node, node.__data__, i, j)); }
+ : (value = Math.max(1, value), function(node) { node.__transition__[id].duration = value; }));
};
d3_transitionPrototype.each = function(type, listener) {
ease = transition.ease,
delay = transition.delay,
duration = transition.duration,
+ timer = d3_timer_active,
tweened = [];
- if (delay <= elapsed) return start(elapsed);
- d3_timer_replace(start, delay, time);
+ timer.t = delay + time;
+ if (delay <= elapsed) return start(elapsed - delay);
+ timer.c = start;
function start(elapsed) {
if (lock.active > id) return stop();
}
});
- if (tick(elapsed)) return 1;
- d3_timer_replace(tick, 0, time);
+ d3.timer(function() { // defer to end of current frame
+ timer.c = tick(elapsed || 1) ? d3_true : tick;
+ return 1;
+ }, 0, time);
}
function tick(elapsed) {
if (lock.active !== id) return stop();
- var t = (elapsed - delay) / duration,
+ var t = elapsed / duration,
e = ease(t),
n = tweened.length;
}
if (t >= 1) {
- stop();
transition.event && transition.event.end.call(node, d, i);
- return 1;
+ return stop();
}
}
function d3_xhr(url, mimeType, response, callback) {
var xhr = {},
- dispatch = d3.dispatch("progress", "load", "error"),
+ dispatch = d3.dispatch("beforesend", "progress", "load", "error"),
headers = {},
request = new XMLHttpRequest,
responseType = null;
if (mimeType != null && request.overrideMimeType) request.overrideMimeType(mimeType);
if (responseType != null) request.responseType = responseType;
if (callback != null) xhr.on("error", callback).on("load", function(request) { callback(null, request); });
+ dispatch.beforesend.call(xhr, request);
request.send(data == null ? null : data);
return xhr;
};
var fetcher = function(val, cb) {
cb(data.filter(function(d) {
- return d.title
+ return d.value
.toString()
.toLowerCase()
.indexOf(val.toLowerCase()) !== -1;
var parent = this.parentNode,
sibling = this.nextSibling;
- var carat = d3.select(parent).selectAll('.combobox-carat')
+ var caret = d3.select(parent).selectAll('.combobox-caret')
.filter(function(d) { return d === input.node(); })
.data([input.node()]);
- carat.enter().insert('div', function() { return sibling; })
- .attr('class', 'combobox-carat');
+ caret.enter().insert('div', function() { return sibling; })
+ .attr('class', 'combobox-caret');
- carat
+ caret
.on('mousedown', function () {
// prevent the form element from blurring. it blurs
// on mousedown
d3.event.stopPropagation();
d3.event.preventDefault();
input.node().focus();
+ fetch('', render);
});
});
function focus() {
- fetch(render);
+ fetch(value(), render);
}
function blur() {
}
function change() {
- fetch(function() {
+ fetch(value(), function() {
autocomplete();
render();
});
return value;
}
- function fetch(cb) {
- fetcher.call(input, value(), function(_) {
+ function fetch(v, cb) {
+ fetcher.call(input, v, function(_) {
suggestions = _;
cb();
});
}
function render() {
- if (suggestions.length && document.activeElement === input.node()) {
+ if (suggestions.length > 1 && document.activeElement === input.node()) {
show();
} else {
hide();
})();
toGeoJSON = (function() {
- var removeSpace = (/\s*/g), trimSpace = (/^\s*|\s*$/g), splitSpace = (/\s+/);
+ 'use strict';
+
+ var removeSpace = (/\s*/g),
+ trimSpace = (/^\s*|\s*$/g),
+ splitSpace = (/\s+/);
+ // generate a short, numeric hash of a string
function okhash(x) {
if (!x || !x.length) return 0;
for (var i = 0, h = 0; i < x.length; i++) {
h = ((h << 5) - h) + x.charCodeAt(i) | 0;
} return h;
}
+ // all Y children of X
function get(x, y) { return x.getElementsByTagName(y); }
function attr(x, y) { return x.getAttribute(y); }
function attrf(x, y) { return parseFloat(attr(x, y)); }
+ // one Y child of X, if any, otherwise null
function get1(x, y) { var n = get(x, y); return n.length ? n[0] : null; }
+ // https://developer.mozilla.org/en-US/docs/Web/API/Node.normalize
+ function norm(el) { if (el.normalize) { el.normalize(); } return el; }
+ // cast array x into numbers
function numarray(x) {
for (var j = 0, o = []; j < x.length; j++) o[j] = parseFloat(x[j]);
return o;
}
- function nodeVal(x) { return x && x.firstChild && x.firstChild.nodeValue; }
+ function clean(x) {
+ var o = {};
+ for (var i in x) if (x[i]) o[i] = x[i];
+ return o;
+ }
+ // get the content of a text node, if any
+ function nodeVal(x) { if (x) {norm(x);} return x && x.firstChild && x.firstChild.nodeValue; }
+ // get one coordinate from a coordinate array, if any
function coord1(v) { return numarray(v.replace(removeSpace, '').split(',')); }
+ // get all coordinates from a coordinate array as [[],[]]
function coord(v) {
- var coords = v.replace(trimSpace, '').split(splitSpace), o = [];
- for (var i = 0; i < coords.length; i++) o.push(coord1(coords[i]));
+ var coords = v.replace(trimSpace, '').split(splitSpace),
+ o = [];
+ for (var i = 0; i < coords.length; i++) {
+ o.push(coord1(coords[i]));
+ }
return o;
}
- function fc() { return { type: 'FeatureCollection', features: [] }; }
+ function coordPair(x) { return [attrf(x, 'lon'), attrf(x, 'lat')]; }
+
+ // create a new feature collection parent object
+ function fc() {
+ return {
+ type: 'FeatureCollection',
+ features: []
+ };
+ }
+
+ var styleSupport = false;
+ if (typeof XMLSerializer !== 'undefined') {
+ var serializer = new XMLSerializer();
+ styleSupport = true;
+ }
+ function xml2str(str) { return serializer.serializeToString(str); }
+
var t = {
kml: function(doc, o) {
o = o || {};
- var gj = fc(), styleIndex = {},
- geotypes = ['Polygon', 'LineString', 'Point'],
- placemarks = get(doc, 'Placemark'), styles = get(doc, 'Style');
- if (o.styles) for (var k = 0; k < styles.length; k++) {
- styleIndex['#' + styles[k].id] = okhash(styles[k].innerHTML).toString(16);
+ var gj = fc(),
+ // styleindex keeps track of hashed styles in order to match features
+ styleIndex = {},
+ // atomic geospatial types supported by KML - MultiGeometry is
+ // handled separately
+ geotypes = ['Polygon', 'LineString', 'Point', 'Track'],
+ // all root placemarks in the file
+ placemarks = get(doc, 'Placemark'),
+ styles = get(doc, 'Style');
+
+ if (styleSupport) for (var k = 0; k < styles.length; k++) {
+ styleIndex['#' + attr(styles[k], 'id')] = okhash(xml2str(styles[k])).toString(16);
}
for (var j = 0; j < placemarks.length; j++) {
gj.features = gj.features.concat(getPlacemark(placemarks[j]));
}
+ function gxCoord(v) { return numarray(v.split(' ')); }
+ function gxCoords(root) {
+ var elems = get(root, 'coord', 'gx'), coords = [];
+ for (var i = 0; i < elems.length; i++) coords.push(gxCoord(nodeVal(elems[i])));
+ return coords;
+ }
function getGeometry(root) {
var geomNode, geomNodes, i, j, k, geoms = [];
if (get1(root, 'MultiGeometry')) return getGeometry(get1(root, 'MultiGeometry'));
+ if (get1(root, 'MultiTrack')) return getGeometry(get1(root, 'MultiTrack'));
for (i = 0; i < geotypes.length; i++) {
geomNodes = get(root, geotypes[i]);
if (geomNodes) {
for (j = 0; j < geomNodes.length; j++) {
geomNode = geomNodes[j];
if (geotypes[i] == 'Point') {
- geoms.push({ type: 'Point',
+ geoms.push({
+ type: 'Point',
coordinates: coord1(nodeVal(get1(geomNode, 'coordinates')))
});
} else if (geotypes[i] == 'LineString') {
- geoms.push({ type: 'LineString',
+ geoms.push({
+ type: 'LineString',
coordinates: coord(nodeVal(get1(geomNode, 'coordinates')))
});
} else if (geotypes[i] == 'Polygon') {
- var rings = get(geomNode, 'LinearRing'), coords = [];
+ var rings = get(geomNode, 'LinearRing'),
+ coords = [];
for (k = 0; k < rings.length; k++) {
coords.push(coord(nodeVal(get1(rings[k], 'coordinates'))));
}
- geoms.push({ type: 'Polygon', coordinates: coords });
+ geoms.push({
+ type: 'Polygon',
+ coordinates: coords
+ });
+ } else if (geotypes[i] == 'Track') {
+ geoms.push({
+ type: 'LineString',
+ coordinates: gxCoords(geomNode)
+ });
}
}
}
description = nodeVal(get1(root, 'description')),
extendedData = get1(root, 'ExtendedData');
- if (!geoms.length) return false;
+ if (!geoms.length) return [];
if (name) properties.name = name;
if (styleUrl && styleIndex[styleUrl]) {
properties.styleUrl = styleUrl;
properties[simpleDatas[i].getAttribute('name')] = nodeVal(simpleDatas[i]);
}
}
- return [{ type: 'Feature', geometry: (geoms.length === 1) ? geoms[0] : {
- type: 'GeometryCollection',
- geometries: geoms }, properties: properties }];
+ return [{
+ type: 'Feature',
+ geometry: (geoms.length === 1) ? geoms[0] : {
+ type: 'GeometryCollection',
+ geometries: geoms
+ },
+ properties: properties
+ }];
}
return gj;
},
gpx: function(doc, o) {
- var i, j, tracks = get(doc, 'trk'), track, pt, gj = fc();
+ var i,
+ tracks = get(doc, 'trk'),
+ routes = get(doc, 'rte'),
+ waypoints = get(doc, 'wpt'),
+ // a feature collection
+ gj = fc();
for (i = 0; i < tracks.length; i++) {
- track = tracks[i];
- var name = nodeVal(get1(track, 'name'));
- var pts = get(track, 'trkpt'), line = [];
+ gj.features.push(getLinestring(tracks[i], 'trkpt'));
+ }
+ for (i = 0; i < routes.length; i++) {
+ gj.features.push(getLinestring(routes[i], 'rtept'));
+ }
+ for (i = 0; i < waypoints.length; i++) {
+ gj.features.push(getPoint(waypoints[i]));
+ }
+ function getLinestring(node, pointname) {
+ var j, pts = get(node, pointname), line = [];
for (j = 0; j < pts.length; j++) {
- line.push([attrf(pts[j], 'lon'), attrf(pts[j], 'lat')]);
+ line.push(coordPair(pts[j]));
}
- gj.features.push({
+ return {
type: 'Feature',
- properties: {
- name: name || ''
- },
- geometry: { type: 'LineString', coordinates: line }
- });
+ properties: getProperties(node),
+ geometry: {
+ type: 'LineString',
+ coordinates: line
+ }
+ };
+ }
+ function getPoint(node) {
+ var prop = getProperties(node);
+ prop.ele = nodeVal(get1(node, 'ele'));
+ prop.sym = nodeVal(get1(node, 'sym'));
+ return {
+ type: 'Feature',
+ properties: prop,
+ geometry: {
+ type: 'Point',
+ coordinates: coordPair(node)
+ }
+ };
+ }
+ function getProperties(node) {
+ var meta = ['name', 'desc', 'author', 'copyright', 'link',
+ 'time', 'keywords'],
+ prop = {},
+ k;
+ for (k = 0; k < meta.length; k++) {
+ prop[meta[k]] = nodeVal(get1(node, meta[k]));
+ }
+ return clean(prop);
}
return gj;
}
}).call(function() {
return this || (typeof window !== 'undefined' ? window : global);
}());
+/* jshint ignore:start */
(function () {
'use strict';
window.iD = function () {
return {
getItem: function(k) { return s[k]; },
setItem: function(k, v) { s[k] = v; },
- removeItem: function(k) { delete s[k] }
+ removeItem: function(k) { delete s[k]; }
};
})();
context.storage = function(k, v) {
- if (arguments.length === 1) return storage.getItem(k);
- else if (v === null) storage.removeItem(k);
- else storage.setItem(k, v);
+ try {
+ if (arguments.length === 1) return storage.getItem(k);
+ else if (v === null) storage.removeItem(k);
+ else storage.setItem(k, v);
+ } catch(e) {
+ // localstorage quota exceeded
+ /* jshint devel:true */
+ if (typeof console !== 'undefined') console.error('localStorage quota exceeded');
+ /* jshint devel:false */
+ }
};
var history = iD.History(context),
/* History */
context.graph = history.graph;
- context.perform = history.perform;
- context.replace = history.replace;
- context.pop = history.pop;
- context.undo = history.undo;
- context.redo = history.redo;
context.changes = history.changes;
context.intersects = history.intersects;
+ var inIntro = false;
+
+ context.inIntro = function(_) {
+ if (!arguments.length) return inIntro;
+ inIntro = _;
+ return context;
+ };
+
+ context.save = function() {
+ if (inIntro) return;
+ history.save();
+ if (history.hasChanges()) return t('save.unsaved_changes');
+ };
+
context.flush = function() {
connection.flush();
history.reset();
return context;
};
+ // Debounce save, since it's a synchronous localStorage write,
+ // and history changes can happen frequently (e.g. when dragging).
+ var debouncedSave = _.debounce(context.save, 350);
+ function withDebouncedSave(fn) {
+ return function() {
+ var result = fn.apply(history, arguments);
+ debouncedSave();
+ return result;
+ };
+ }
+
+ context.perform = withDebouncedSave(history.perform);
+ context.replace = withDebouncedSave(history.replace);
+ context.pop = withDebouncedSave(history.pop);
+ context.undo = withDebouncedSave(history.undo);
+ context.redo = withDebouncedSave(history.redo);
+
/* Graph */
context.hasEntity = function(id) {
return history.graph().hasEntity(id);
};
/* Projection */
- context.projection = d3.geo.mercator()
- .scale(512 / Math.PI)
- .precision(0);
+ function rawMercator() {
+ var project = d3.geo.mercator.raw,
+ k = 512 / Math.PI, // scale
+ x = 0, y = 0, // translate
+ clipExtent = [[0, 0], [0, 0]];
+
+ function projection(point) {
+ point = project(point[0] * Math.PI / 180, point[1] * Math.PI / 180);
+ return [point[0] * k + x, y - point[1] * k];
+ }
+
+ projection.invert = function(point) {
+ point = project.invert((point[0] - x) / k, (y - point[1]) / k);
+ return point && [point[0] * 180 / Math.PI, point[1] * 180 / Math.PI];
+ };
+
+ projection.scale = function(_) {
+ if (!arguments.length) return k;
+ k = +_;
+ return projection;
+ };
+
+ projection.translate = function(_) {
+ if (!arguments.length) return [x, y];
+ x = +_[0];
+ y = +_[1];
+ return projection;
+ };
+
+ projection.clipExtent = function(_) {
+ if (!arguments.length) return clipExtent;
+ clipExtent = _;
+ return projection;
+ };
+
+ projection.stream = d3.geo.transform({
+ point: function(x, y) {
+ x = projection([x, y]);
+ this.stream.point(x[0], x[1]);
+ }
+ }).stream;
+
+ return projection;
+ }
+
+ context.projection = rawMercator();
/* Background */
var background = iD.Background(context);
context.zoomIn = map.zoomIn;
context.zoomOut = map.zoomOut;
+ context.surfaceRect = function() {
+ // Work around a bug in Firefox.
+ // http://stackoverflow.com/questions/18153989/
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=530985
+ return context.surface().node().parentNode.getBoundingClientRect();
+ };
+
/* Presets */
var presets = iD.presets()
.load(iD.data.presets);
return d3.rebind(context, dispatch, 'on');
};
-iD.version = '1.1.5';
+iD.version = '1.3.1';
(function() {
var detected = {};
var ua = navigator.userAgent,
- msie = new RegExp("MSIE ([0-9]{1,}[\\.0-9]{0,})");
+ msie = new RegExp('MSIE ([0-9]{1,}[\\.0-9]{0,})');
if (msie.exec(ua) !== null) {
var rv = parseFloat(RegExp.$1);
taginfo.docs = function(parameters, callback) {
var debounce = parameters.debounce;
parameters = clean(setSort(parameters));
- request(endpoint + (parameters.value ? 'tag/wiki_pages?' : 'key/wiki_pages?') +
+
+ var path = 'key/wiki_pages?';
+ if (parameters.value) path = 'tag/wiki_pages?';
+ else if (parameters.rtype) path = 'relation/wiki_pages?';
+
+ request(endpoint + path +
iD.util.qsString(parameters), debounce, callback);
};
var entity = graph.hasEntity(id);
if (entity && entity.type === 'relation') {
entity.members.forEach(function(member) {
- s += ',.' + member.id
+ s += ',.' + member.id;
});
}
});
for (var j = 0; j <= a.length; j++) { matrix[0][j] = j; }
for (i = 1; i <= b.length; i++) {
for (j = 1; j <= a.length; j++) {
- if (b.charAt(i-1) == a.charAt(j-1)) {
+ if (b.charAt(i-1) === a.charAt(j-1)) {
matrix[i][j] = matrix[i-1][j-1];
} else {
matrix[i][j] = Math.min(matrix[i-1][j-1] + 1, // substitution
};
};
+/* jshint -W103 */
iD.util.getPrototypeOf = Object.getPrototypeOf || function(obj) { return obj.__proto__; };
iD.util.asyncMap = function(inputs, func, callback) {
});
});
};
+
+// wraps an index to an interval [0..length-1]
+iD.util.wrap = function(index, length) {
+ if (index < 0)
+ index += Math.ceil(-index/length)*length;
+ return index % length;
+};
+// A per-domain session mutex backed by a cookie and dead man's
+// switch. If the session crashes, the mutex will auto-release
+// after 5 seconds.
+
+iD.util.SessionMutex = function(name) {
+ var mutex = {},
+ intervalID;
+
+ function renew() {
+ var expires = new Date();
+ expires.setSeconds(expires.getSeconds() + 5);
+ document.cookie = name + '=1; expires=' + expires.toUTCString();
+ }
+
+ mutex.lock = function() {
+ if (intervalID) return true;
+ var cookie = document.cookie.replace(new RegExp('(?:(?:^|.*;)\\s*' + name + '\\s*\\=\\s*([^;]*).*$)|^.*$'), '$1');
+ if (cookie) return false;
+ renew();
+ intervalID = window.setInterval(renew, 4000);
+ return true;
+ };
+
+ mutex.unlock = function() {
+ if (!intervalID) return;
+ document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:00 GMT';
+ clearInterval(intervalID);
+ intervalID = null;
+ };
+
+ mutex.locked = function() {
+ return !!intervalID;
+ };
+
+ return mutex;
+};
iD.geo = {};
iD.geo.roundCoords = function(c) {
};
// http://jsperf.com/id-dist-optimization
-iD.geo.dist = function(a, b) {
+iD.geo.euclideanDistance = function(a, b) {
var x = a[0] - b[0], y = a[1] - b[1];
return Math.sqrt((x * x) + (y * y));
};
+// Equirectangular approximation of spherical distances on Earth
+iD.geo.sphericalDistance = function(a, b) {
+ var x = Math.cos(a[1]*Math.PI/180) * (a[0] - b[0]),
+ y = a[1] - b[1];
+ return 6.3710E6 * Math.sqrt((x * x) + (y * y)) * Math.PI/180;
+};
+
+iD.geo.edgeEqual = function(a, b) {
+ return (a[0] === b[0] && a[1] === b[1]) ||
+ (a[0] === b[1] && a[1] === b[0]);
+};
// Choose the edge with the minimal distance from `point` to its orthogonal
// projection onto that edge, if such a projection exists, or the distance to
// the closest vertex on that edge. Returns an object with the `index` of the
// chosen edge, the chosen `loc` on that edge, and the `distance` to to it.
iD.geo.chooseEdge = function(nodes, point, projection) {
- var dist = iD.geo.dist,
+ var dist = iD.geo.euclideanDistance,
points = nodes.map(function(n) { return projection(n.loc); }),
min = Infinity,
idx, loc;
var xi = polygon[i][0], yi = polygon[i][1];
var xj = polygon[j][0], yj = polygon[j][1];
- var intersect = ((yi > y) != (yj > y)) &&
+ var intersect = ((yi > y) !== (yj > y)) &&
(x < (xj - xi) * (y - yi) / (yj - yi) + xi);
if (intersect) inside = !inside;
}
(this[0][1] + this[1][1]) / 2];
},
+ polygon: function() {
+ return [
+ [this[0][0], this[0][1]],
+ [this[0][0], this[1][1]],
+ [this[1][0], this[1][1]],
+ [this[1][0], this[0][1]],
+ [this[0][0], this[0][1]]
+ ];
+ },
+
intersects: function(obj) {
if (!(obj instanceof iD.geo.Extent)) obj = new iD.geo.Extent(obj);
return obj[0][0] <= this[1][0] &&
return joined;
};
+iD.geo.turns = function(graph, entityID) {
+ var way = graph.entity(entityID);
+ if (way.type !== 'way' || !way.tags.highway || way.isArea())
+ return [];
+
+ function withRestriction(turn) {
+ graph.parentRelations(turn.from).forEach(function(relation) {
+ if (relation.tags.type !== 'restriction')
+ return;
+
+ var f = relation.memberByRole('from'),
+ t = relation.memberByRole('to'),
+ v = relation.memberByRole('via');
+
+ if (f && f.id === turn.from.id &&
+ t && t.id === turn.to.id &&
+ v && v.id === turn.via.id) {
+ turn.restriction = relation;
+ }
+ });
+
+ return turn;
+ }
+
+ var turns = [];
+
+ [way.first(), way.last()].forEach(function(nodeID) {
+ var node = graph.entity(nodeID);
+ graph.parentWays(node).forEach(function(parent) {
+ if (parent === way || parent.isDegenerate() || !parent.tags.highway)
+ return;
+ if (way.first() === node.id && way.tags.oneway === 'yes')
+ return;
+ if (way.last() === node.id && way.tags.oneway === '-1')
+ return;
+
+ var index = parent.nodes.indexOf(node.id);
+
+ // backward
+ if (parent.first() !== node.id && parent.tags.oneway !== 'yes') {
+ turns.push(withRestriction({
+ from: way,
+ to: parent,
+ via: node,
+ toward: graph.entity(parent.nodes[index - 1])
+ }));
+ }
+
+ // forward
+ if (parent.last() !== node.id && parent.tags.oneway !== '-1') {
+ turns.push(withRestriction({
+ from: way,
+ to: parent,
+ via: node,
+ toward: graph.entity(parent.nodes[index + 1])
+ }));
+ }
+ });
+ });
+
+ return turns;
+};
iD.actions = {};
iD.actions.AddEntity = function(way) {
return function(graph) {
}
return graph.replace(relation.addMember(member, memberIndex));
- }
+ };
};
iD.actions.AddMidpoint = function(midpoint, node) {
return function(graph) {
parents.forEach(function(way) {
for (var i = 0; i < way.nodes.length - 1; i++) {
- if ((way.nodes[i] === midpoint.edge[0] &&
- way.nodes[i + 1] === midpoint.edge[1]) ||
- (way.nodes[i] === midpoint.edge[1] &&
- way.nodes[i + 1] === midpoint.edge[0])) {
+ if (iD.geo.edgeEqual([way.nodes[i], way.nodes[i + 1]], midpoint.edge)) {
graph = graph.replace(graph.entity(way.id).addNode(node.id, i + 1));
+
+ // Add only one midpoint on doubled-back segments,
+ // turning them into self-intersections.
+ return;
}
}
});
iD.actions.ChangeMember = function(relationId, member, memberIndex) {
return function(graph) {
return graph.replace(graph.entity(relationId).updateMember(member, memberIndex));
- }
+ };
};
iD.actions.ChangePreset = function(entityId, oldPreset, newPreset) {
return function(graph) {
return graph.replace(entity.update({tags: tags}));
};
};
-iD.actions.Circularize = function(wayId, projection, count) {
- count = count || 12;
-
- function closestIndex(nodes, loc) {
- var idx, min = Infinity, dist;
- for (var i = 0; i < nodes.length; i++) {
- dist = iD.geo.dist(nodes[i].loc, loc);
- if (dist < min) {
- min = dist;
- idx = i;
- }
- }
- return idx;
- }
+iD.actions.Circularize = function(wayId, projection, maxAngle) {
+ maxAngle = (maxAngle || 20) * Math.PI / 180;
var action = function(graph) {
var way = graph.entity(wayId),
nodes = _.uniq(graph.childNodes(way)),
+ keyNodes = nodes.filter(function(n) { return graph.parentWays(n).length !== 1; }),
points = nodes.map(function(n) { return projection(n.loc); }),
+ keyPoints = keyNodes.map(function(n) { return projection(n.loc); }),
centroid = d3.geom.polygon(points).centroid(),
- radius = d3.median(points, function(p) {
- return iD.geo.dist(centroid, p);
- }),
- ids = [],
- sign = d3.geom.polygon(points).area() > 0 ? -1 : 1;
-
- for (var i = 0; i < count; i++) {
- var node,
+ radius = d3.median(points, function(p) { return iD.geo.euclideanDistance(centroid, p); }),
+ sign = d3.geom.polygon(points).area() > 0 ? 1 : -1,
+ ids;
+
+ // we need atleast two key nodes for the algorithm to work
+ if (!keyNodes.length) {
+ keyNodes = [nodes[0]];
+ keyPoints = [points[0]];
+ }
+
+ if (keyNodes.length === 1) {
+ var index = nodes.indexOf(keyNodes[0]),
+ oppositeIndex = Math.floor((index + nodes.length / 2) % nodes.length);
+
+ keyNodes.push(nodes[oppositeIndex]);
+ keyPoints.push(points[oppositeIndex]);
+ }
+
+ // key points and nodes are those connected to the ways,
+ // they are projected onto the circle, inbetween nodes are moved
+ // to constant internals between key nodes, extra inbetween nodes are
+ // added if necessary.
+ for (var i = 0; i < keyPoints.length; i++) {
+ var nextKeyNodeIndex = (i + 1) % keyNodes.length,
+ startNodeIndex = nodes.indexOf(keyNodes[i]),
+ endNodeIndex = nodes.indexOf(keyNodes[nextKeyNodeIndex]),
+ numberNewPoints = -1,
+ indexRange = endNodeIndex - startNodeIndex,
+ distance, totalAngle, eachAngle, startAngle, endAngle,
+ angle, loc, node, j;
+
+ if (indexRange < 0) {
+ indexRange += nodes.length;
+ }
+
+ // position this key node
+ distance = iD.geo.euclideanDistance(centroid, keyPoints[i]);
+ keyPoints[i] = [
+ centroid[0] + (keyPoints[i][0] - centroid[0]) / distance * radius,
+ centroid[1] + (keyPoints[i][1] - centroid[1]) / distance * radius];
+ graph = graph.replace(keyNodes[i].move(projection.invert(keyPoints[i])));
+
+ // figure out the between delta angle we want to match to
+ startAngle = Math.atan2(keyPoints[i][1] - centroid[1], keyPoints[i][0] - centroid[0]);
+ endAngle = Math.atan2(keyPoints[nextKeyNodeIndex][1] - centroid[1], keyPoints[nextKeyNodeIndex][0] - centroid[0]);
+ totalAngle = endAngle - startAngle;
+
+ // detects looping around -pi/pi
+ if (totalAngle*sign > 0) {
+ totalAngle = -sign * (2 * Math.PI - Math.abs(totalAngle));
+ }
+
+ do {
+ numberNewPoints++;
+ eachAngle = totalAngle / (indexRange + numberNewPoints);
+ } while (Math.abs(eachAngle) > maxAngle);
+
+ // move existing points
+ for (j = 1; j < indexRange; j++) {
+ angle = startAngle + j * eachAngle;
loc = projection.invert([
- centroid[0] + Math.cos(sign * (i / 12) * Math.PI * 2) * radius,
- centroid[1] + Math.sin(sign * (i / 12) * Math.PI * 2) * radius]);
+ centroid[0] + Math.cos(angle)*radius,
+ centroid[1] + Math.sin(angle)*radius]);
- if (nodes.length) {
- var idx = closestIndex(nodes, loc);
- node = nodes[idx];
- nodes.splice(idx, 1);
- } else {
- node = iD.Node();
+ node = nodes[(j + startNodeIndex) % nodes.length].move(loc);
+ graph = graph.replace(node);
}
- ids.push(node.id);
- graph = graph.replace(node.move(loc));
+ // add new inbetween nodes if necessary
+ for (j = 0; j < numberNewPoints; j++) {
+ angle = startAngle + (indexRange + j) * eachAngle;
+ loc = projection.invert([
+ centroid[0] + Math.cos(angle) * radius,
+ centroid[1] + Math.sin(angle) * radius]);
+
+ node = iD.Node({loc: loc});
+ graph = graph.replace(node);
+
+ nodes.splice(endNodeIndex + j, 0, node);
+ }
}
+ // update the way to have all the new nodes
+ ids = nodes.map(function(n) { return n.id; });
ids.push(ids[0]);
+
way = way.update({nodes: ids});
graph = graph.replace(way);
- for (i = 0; i < nodes.length; i++) {
- graph.parentWays(nodes[i]).forEach(function(parent) {
- graph = graph.replace(parent.replaceNode(nodes[i].id,
- ids[closestIndex(graph.childNodes(way), nodes[i].loc)]));
- });
-
- graph = iD.actions.DeleteNode(nodes[i].id)(graph);
- }
-
return graph;
};
for (var i = 0; i < nodeIds.length - 1; i++) {
var node = graph.entity(nodeIds[i]);
+ /*jshint -W083 */
graph.parentWays(node).forEach(function(parent) {
if (!parent.areAdjacent(node.id, survivor.id)) {
graph = graph.replace(parent.replaceNode(node.id, survivor.id));
graph.parentRelations(node).forEach(function(parent) {
graph = graph.replace(parent.replaceMember(node, survivor));
});
+ /*jshint +W083 */
survivor = survivor.mergeTags(node.tags);
graph = iD.actions.DeleteNode(node.id)(graph);
graph.parentRelations(node)
.forEach(function(parent) {
- graph = graph.replace(parent.removeMembersWithID(nodeId));
+ parent = parent.removeMembersWithID(nodeId);
+ graph = graph.replace(parent);
+
+ if (parent.isDegenerate()) {
+ graph = iD.actions.DeleteRelation(parent.id)(graph);
+ }
});
return graph.remove(node);
graph.parentRelations(relation)
.forEach(function(parent) {
- graph = graph.replace(parent.removeMembersWithID(relationId));
+ parent = parent.removeMembersWithID(relationId);
+ graph = graph.replace(parent);
+
+ if (parent.isDegenerate()) {
+ graph = iD.actions.DeleteRelation(parent.id)(graph);
+ }
});
_.uniq(_.pluck(relation.members, 'id')).forEach(function(memberId) {
graph.parentRelations(way)
.forEach(function(parent) {
- graph = graph.replace(parent.removeMembersWithID(wayId));
+ parent = parent.removeMembersWithID(wayId);
+ graph = graph.replace(parent);
+
+ if (parent.isDegenerate()) {
+ graph = iD.actions.DeleteRelation(parent.id)(graph);
+ }
});
_.uniq(way.nodes).forEach(function(nodeId) {
difference.created().forEach(discardTags);
return graph;
- }
+ };
};
// Disconect the ways at the given node.
//
return _.any(contained[i]);
}
- function filterContained(d, i) {
+ function filterContained(d) {
return d.filter(isContained);
}
*/
iD.actions.Orthogonalize = function(wayId, projection) {
+ var threshold = 7, // degrees within right or straight to alter
+ lowerThreshold = Math.cos((90 - threshold) * Math.PI / 180),
+ upperThreshold = Math.cos(threshold * Math.PI / 180);
+
var action = function(graph) {
var way = graph.entity(wayId),
nodes = graph.childNodes(way),
+ points = _.uniq(nodes).map(function(n) { return projection(n.loc); }),
corner = {i: 0, dotp: 1},
- points, i, j, score, motions;
+ epsilon = 1e-4,
+ i, j, score, motions;
if (nodes.length === 4) {
- points = _.uniq(nodes).map(function(n) { return projection(n.loc); });
-
for (i = 0; i < 1000; i++) {
motions = points.map(calcMotion);
points[corner.i] = addPoints(points[corner.i],motions[corner.i]);
score = corner.dotp;
- if (score < 1.0e-8) {
+ if (score < epsilon) {
break;
}
}
graph = graph.replace(graph.entity(nodes[corner.i].id)
.move(projection.invert(points[corner.i])));
} else {
- var best;
- points = nodes.map(function(n) { return projection(n.loc); });
- score = squareness();
+ var best,
+ originalPoints = _.clone(points);
+ score = Infinity;
for (i = 0; i < 1000; i++) {
motions = points.map(calcMotion);
for (j = 0; j < motions.length; j++) {
points[j] = addPoints(points[j],motions[j]);
}
- var newScore = squareness();
+ var newScore = squareness(points);
if (newScore < score) {
best = _.clone(points);
score = newScore;
}
- if (score < 1.0e-8) {
+ if (score < epsilon) {
break;
}
}
points = best;
- for (i = 0; i < points.length - 1; i++) {
- graph = graph.replace(graph.entity(nodes[i].id)
- .move(projection.invert(points[i])));
+ for (i = 0; i < points.length; i++) {
+ // only move the points that actually moved
+ if (originalPoints[i][0] !== points[i][0] || originalPoints[i][1] !== points[i][1]) {
+ graph = graph.replace(graph.entity(nodes[i].id)
+ .move(projection.invert(points[i])));
+ }
+ }
+
+ // remove empty nodes on straight sections
+ for (i = 0; i < points.length; i++) {
+ var node = nodes[i];
+
+ if (graph.parentWays(node).length > 1 ||
+ graph.parentRelations(node).length ||
+ node.hasInterestingTags()) {
+
+ continue;
+ }
+
+ var dotp = normalizedDotProduct(i, points);
+ if (dotp < -1 + epsilon) {
+ graph = iD.actions.DeleteNode(nodes[i].id)(graph);
+ }
}
}
var a = array[(i - 1 + array.length) % array.length],
c = array[(i + 1) % array.length],
p = subtractPoints(a, b),
- q = subtractPoints(c, b);
+ q = subtractPoints(c, b),
+ scale, dotp;
- var scale = iD.geo.dist(p, [0, 0]) + iD.geo.dist(q, [0, 0]);
+ scale = 2 * Math.min(iD.geo.euclideanDistance(p, [0, 0]), iD.geo.euclideanDistance(q, [0, 0]));
p = normalizePoint(p, 1.0);
q = normalizePoint(q, 1.0);
- var dotp = p[0] * q[0] + p[1] * q[1];
+ dotp = filterDotProduct(p[0] * q[0] + p[1] * q[1]);
// nasty hack to deal with almost-straight segments (angle is closer to 180 than to 90/270).
if (array.length > 3) {
if (dotp < -0.707106781186547) {
dotp += 1.0;
}
- } else if (Math.abs(dotp) < corner.dotp) {
+ } else if (dotp && Math.abs(dotp) < corner.dotp) {
corner.i = i;
corner.dotp = Math.abs(dotp);
}
return normalizePoint(addPoints(p, q), 0.1 * dotp * scale);
}
+ };
- function squareness() {
- var g = 0.0;
- for (var i = 1; i < points.length - 1; i++) {
- var score = scoreOfPoints(points[i - 1], points[i], points[i + 1]);
- g += score;
- }
- var startScore = scoreOfPoints(points[points.length - 1], points[0], points[1]);
- var endScore = scoreOfPoints(points[points.length - 2], points[points.length - 1], points[0]);
- g += startScore;
- g += endScore;
- return g;
- }
+ function squareness(points) {
+ return points.reduce(function(sum, val, i, array) {
+ var dotp = normalizedDotProduct(i, array);
- function scoreOfPoints(a, b, c) {
- var p = subtractPoints(a, b),
- q = subtractPoints(c, b);
+ dotp = filterDotProduct(dotp);
+ return sum + 2.0 * Math.min(Math.abs(dotp - 1.0), Math.min(Math.abs(dotp), Math.abs(dotp + 1)));
+ }, 0);
+ }
- p = normalizePoint(p, 1.0);
- q = normalizePoint(q, 1.0);
+ function normalizedDotProduct(i, points) {
+ var a = points[(i - 1 + points.length) % points.length],
+ b = points[i],
+ c = points[(i + 1) % points.length],
+ p = subtractPoints(a, b),
+ q = subtractPoints(c, b);
- var dotp = p[0] * q[0] + p[1] * q[1];
- // score is constructed so that +1, -1 and 0 are all scored 0, any other angle
- // is scored higher.
- return 2.0 * Math.min(Math.abs(dotp - 1.0), Math.min(Math.abs(dotp), Math.abs(dotp + 1)));
- }
+ p = normalizePoint(p, 1.0);
+ q = normalizePoint(q, 1.0);
- function subtractPoints(a, b) {
- return [a[0] - b[0], a[1] - b[1]];
- }
+ return p[0] * q[0] + p[1] * q[1];
+ }
+
+ function subtractPoints(a, b) {
+ return [a[0] - b[0], a[1] - b[1]];
+ }
- function addPoints(a, b) {
- return [a[0] + b[0], a[1] + b[1]];
+ function addPoints(a, b) {
+ return [a[0] + b[0], a[1] + b[1]];
+ }
+
+ function normalizePoint(point, scale) {
+ var vector = [0, 0];
+ var length = Math.sqrt(point[0] * point[0] + point[1] * point[1]);
+ if (length !== 0) {
+ vector[0] = point[0] / length;
+ vector[1] = point[1] / length;
}
- function normalizePoint(point, scale) {
- var vector = [0, 0];
- var length = Math.sqrt(point[0] * point[0] + point[1] * point[1]);
- if (length !== 0) {
- vector[0] = point[0] / length;
- vector[1] = point[1] / length;
- }
+ vector[0] *= scale;
+ vector[1] *= scale;
- vector[0] *= scale;
- vector[1] *= scale;
+ return vector;
+ }
- return vector;
+ function filterDotProduct(dotp) {
+ if (lowerThreshold > Math.abs(dotp) || Math.abs(dotp) > upperThreshold) {
+ return dotp;
}
- };
+
+ return 0;
+ }
action.disabled = function(graph) {
- if (!graph.entity(wayId).isClosed())
- return 'not_closed';
+ var way = graph.entity(wayId),
+ nodes = graph.childNodes(way),
+ points = _.uniq(nodes).map(function(n) { return projection(n.loc); });
+
+ if (squareness(points)) {
+ return false;
+ }
+
+ return 'not_squarish';
};
return action;
}
function reverseValue(key, value) {
- if (key === "incline" && numeric.test(value)) {
+ if (key === 'incline' && numeric.test(value)) {
return value.replace(numeric, function(_, sign) { return sign === '-' ? '' : '-'; });
- } else if (key === "incline" || key === "direction") {
+ } else if (key === 'incline' || key === 'direction') {
return {up: 'down', down: 'up'}[value] || value;
} else {
return {left: 'right', right: 'left'}[value] || value;
iD.actions.Split = function(nodeId, newWayIds) {
var wayIds;
+ // if the way is closed, we need to search for a partner node
+ // to split the way at.
+ //
+ // The following looks for a node that is both far away from
+ // the initial node in terms of way segment length and nearby
+ // in terms of beeline-distance. This assures that areas get
+ // split on the most "natural" points (independent of the number
+ // of nodes).
+ // For example: bone-shaped areas get split across their waist
+ // line, circles across the diameter.
+ function splitArea(nodes, idxA, graph) {
+ var lengths = new Array(nodes.length),
+ length,
+ i,
+ best = 0,
+ idxB;
+
+ function wrap(index) {
+ return iD.util.wrap(index, nodes.length);
+ }
+
+ function dist(nA, nB) {
+ return iD.geo.sphericalDistance(graph.entity(nA).loc, graph.entity(nB).loc);
+ }
+
+ // calculate lengths
+ length = 0;
+ for (i = wrap(idxA+1); i !== idxA; i = wrap(i+1)) {
+ length += dist(nodes[i], nodes[wrap(i-1)]);
+ lengths[i] = length;
+ }
+
+ length = 0;
+ for (i = wrap(idxA-1); i !== idxA; i = wrap(i-1)) {
+ length += dist(nodes[i], nodes[wrap(i+1)]);
+ if (length < lengths[i])
+ lengths[i] = length;
+ }
+
+ // determine best opposite node to split
+ for (i = 0; i < nodes.length; i++) {
+ var cost = lengths[i] / dist(nodes[idxA], nodes[i]);
+ if (cost > best) {
+ idxB = i;
+ best = cost;
+ }
+ }
+
+ return idxB;
+ }
+
function split(graph, wayA, newWayId) {
var wayB = iD.Way({id: newWayId, tags: wayA.tags}),
nodesA,
nodesB,
- isArea = wayA.isArea();
+ isArea = wayA.isArea(),
+ isOuter = iD.geo.isSimpleMultipolygonOuterMember(wayA, graph);
if (wayA.isClosed()) {
var nodes = wayA.nodes.slice(0, -1),
idxA = _.indexOf(nodes, nodeId),
- idxB = idxA + Math.floor(nodes.length / 2);
+ idxB = splitArea(nodes, idxA, graph);
- if (idxB >= nodes.length) {
- idxB %= nodes.length;
+ if (idxB < idxA) {
nodesA = nodes.slice(idxA).concat(nodes.slice(0, idxB + 1));
nodesB = nodes.slice(idxB, idxA + 1);
} else {
graph = graph.replace(relation);
}
} else {
- var role = relation.memberById(wayA.id).role,
- last = wayB.last(),
- i = relation.memberById(wayA.id).index,
- j;
-
- for (j = 0; j < relation.members.length; j++) {
- var entity = graph.hasEntity(relation.members[j].id);
- if (entity && entity.type === 'way' && entity.contains(last)) {
- break;
- }
+ if (relation === isOuter) {
+ graph = graph.replace(relation.mergeTags(wayA.tags));
+ graph = graph.replace(wayA.update({tags: {}}));
+ graph = graph.replace(wayB.update({tags: {}}));
}
- relation = relation.addMember({id: wayB.id, type: 'way', role: role}, i <= j ? i + 1 : i);
- graph = graph.replace(relation);
+ var member = {
+ id: wayB.id,
+ type: 'way',
+ role: relation.memberById(wayA.id).role
+ };
+
+ graph = iD.actions.AddMember(relation.id, member)(graph);
}
});
- if (isArea) {
+ if (!isOuter && isArea) {
var multipolygon = iD.Relation({
tags: _.extend({}, wayA.tags, {type: 'multipolygon'}),
members: [
action.ways = function(graph) {
var node = graph.entity(nodeId),
- parents = graph.parentWays(node);
+ parents = graph.parentWays(node),
+ hasLines = _.any(parents, function(parent) { return parent.geometry(graph) === 'line'; });
return parents.filter(function(parent) {
if (wayIds && wayIds.indexOf(parent.id) === -1)
return false;
+ if (!wayIds && hasLines && parent.geometry(graph) !== 'line')
+ return false;
+
if (parent.isClosed()) {
return true;
}
return action;
};
+/*
+ * Based on https://github.com/openstreetmap/potlatch2/net/systemeD/potlatch2/tools/Straighten.as
+ */
+
+iD.actions.Straighten = function(wayId, projection) {
+ function positionAlongWay(n, s, e) {
+ return ((n[0] - s[0]) * (e[0] - s[0]) + (n[1] - s[1]) * (e[1] - s[1]))/
+ (Math.pow(e[0] - s[0], 2) + Math.pow(e[1] - s[1], 2));
+ }
+
+ var action = function(graph) {
+ var way = graph.entity(wayId),
+ nodes = graph.childNodes(way),
+ points = nodes.map(function(n) { return projection(n.loc); }),
+ startPoint = points[0],
+ endPoint = points[points.length-1],
+ toDelete = [],
+ i;
+
+ for (i = 1; i < points.length-1; i++) {
+ var node = nodes[i],
+ point = points[i];
+
+ if (graph.parentWays(node).length > 1 ||
+ graph.parentRelations(node).length ||
+ node.hasInterestingTags()) {
+
+ var u = positionAlongWay(point, startPoint, endPoint),
+ p0 = startPoint[0] + u * (endPoint[0] - startPoint[0]),
+ p1 = startPoint[1] + u * (endPoint[1] - startPoint[1]);
+
+ graph = graph.replace(graph.entity(node.id)
+ .move(projection.invert([p0, p1])));
+ } else {
+ // safe to delete
+ if (toDelete.indexOf(node) === -1) {
+ toDelete.push(node);
+ }
+ }
+ }
+
+ for (i = 0; i < toDelete.length; i++) {
+ graph = iD.actions.DeleteNode(toDelete[i].id)(graph);
+ }
+
+ return graph;
+ };
+
+ action.disabled = function(graph) {
+ // check way isn't too bendy
+ var way = graph.entity(wayId),
+ nodes = graph.childNodes(way),
+ points = nodes.map(function(n) { return projection(n.loc); }),
+ startPoint = points[0],
+ endPoint = points[points.length-1],
+ threshold = 0.2 * Math.sqrt(Math.pow(startPoint[0] - endPoint[0], 2) + Math.pow(startPoint[1] - endPoint[1], 2)),
+ i;
+
+ for (i = 1; i < points.length-1; i++) {
+ var point = points[i],
+ u = positionAlongWay(point, startPoint, endPoint),
+ p0 = startPoint[0] + u * (endPoint[0] - startPoint[0]),
+ p1 = startPoint[1] + u * (endPoint[1] - startPoint[1]),
+ dist = Math.sqrt(Math.pow(p0 - point[0], 2) + Math.pow(p1 - point[1], 2));
+
+ // to bendy if point is off by 20% of total start/end distance in projected space
+ if (dist > threshold) {
+ return 'too_bendy';
+ }
+ }
+ };
+
+ return action;
+};
iD.behavior = {};
iD.behavior.AddWay = function(context) {
var event = d3.dispatch('start', 'startFromWay', 'startFromNode'),
d3.event.preventDefault();
}
- var event = d3.dispatch("start", "move", "end"),
+ var event = d3.dispatch('start', 'move', 'end'),
origin = null,
selector = '',
filter = null,
event.of = function(thiz, argumentz) {
return function(e1) {
+ var e0 = e1.sourceEvent = d3.event;
+ e1.target = drag;
+ d3.event = e1;
try {
- var e0 = e1.sourceEvent = d3.event;
- e1.target = drag;
- d3.event = e1;
event[e1.type].apply(thiz, argumentz);
} finally {
d3.event = e0;
};
};
- var d3_event_userSelectProperty = iD.util.prefixCSSProperty("UserSelect"),
+ var d3_event_userSelectProperty = iD.util.prefixCSSProperty('UserSelect'),
d3_event_userSelectSuppress = d3_event_userSelectProperty ?
function () {
var selection = d3.selection(),
};
} :
function (type) {
- var w = d3.select(window).on("selectstart." + type, d3_eventCancel);
+ var w = d3.select(window).on('selectstart.' + type, d3_eventCancel);
return function () {
- w.on("selectstart." + type, null);
+ w.on('selectstart.' + type, null);
};
};
touchId = d3.event.touches ? d3.event.changedTouches[0].identifier : null,
offset,
origin_ = point(),
- moved = 0,
- selectEnable = d3_event_userSelectSuppress(touchId != null ? "drag-" + touchId : "drag");
+ started = false,
+ selectEnable = d3_event_userSelectSuppress(touchId !== null ? 'drag-' + touchId : 'drag');
var w = d3.select(window)
- .on(touchId !== null ? "touchmove.drag-" + touchId : "mousemove.drag", dragmove)
- .on(touchId !== null ? "touchend.drag-" + touchId : "mouseup.drag", dragend, true);
+ .on(touchId !== null ? 'touchmove.drag-' + touchId : 'mousemove.drag', dragmove)
+ .on(touchId !== null ? 'touchend.drag-' + touchId : 'mouseup.drag', dragend, true);
if (origin) {
offset = origin.apply(target, arguments);
dx = p[0] - origin_[0],
dy = p[1] - origin_[1];
- if (!moved) {
+ if (!started) {
+ started = true;
event_({
- type: "start"
+ type: 'start'
});
}
- moved |= dx | dy;
origin_ = p;
d3_eventCancel();
event_({
- type: "move",
+ type: 'move',
point: [p[0] + offset[0], p[1] + offset[1]],
delta: [dx, dy]
});
}
function dragend() {
- if (moved) {
+ if (started) {
event_({
- type: "end"
+ type: 'end'
});
d3_eventCancel();
- if (d3.event.target === eventTarget) w.on("click.drag", click, true);
+ if (d3.event.target === eventTarget) w.on('click.drag', click, true);
}
- w.on(touchId !== null ? "touchmove.drag-" + touchId : "mousemove.drag", null)
- .on(touchId !== null ? "touchend.drag-" + touchId : "mouseup.drag", null);
+ w.on(touchId !== null ? 'touchmove.drag-' + touchId : 'mousemove.drag', null)
+ .on(touchId !== null ? 'touchend.drag-' + touchId : 'mouseup.drag', null);
selectEnable();
}
function click() {
d3_eventCancel();
- w.on("click.drag", null);
+ w.on('click.drag', null);
}
}
};
}
- selection.on("mousedown.drag" + selector, delegate)
- .on("touchstart.drag" + selector, delegate);
+ selection.on('mousedown.drag' + selector, delegate)
+ .on('touchstart.drag' + selector, delegate);
}
drag.off = function(selection) {
- selection.on("mousedown.drag" + selector, null)
- .on("touchstart.drag" + selector, null);
+ selection.on('mousedown.drag' + selector, null)
+ .on('touchstart.drag' + selector, null);
};
drag.delegate = function(_) {
drag.cancel = function() {
d3.select(window)
- .on("mousemove.drag", null)
- .on("mouseup.drag", null);
+ .on('mousemove.drag', null)
+ .on('mouseup.drag', null);
return drag;
};
return drag;
};
- return d3.rebind(drag, event, "on");
+ return d3.rebind(drag, event, 'on');
};
iD.behavior.Draw = function(context) {
var event = d3.dispatch('move', 'click', 'clickWay',
})[0] : d3.mouse(p);
}
- var eventTarget = d3.event.target,
- element = d3.select(this),
+ var element = d3.select(this),
touchId = d3.event.touches ? d3.event.changedTouches[0].identifier : null,
time = +new Date(),
pos = point();
d3.select(window).on('mouseup.draw', function() {
element.on('mousemove.draw', mousemove);
- if (iD.geo.dist(pos, point()) < closeTolerance ||
- (iD.geo.dist(pos, point()) < tolerance &&
+ if (iD.geo.euclideanDistance(pos, point()) < closeTolerance ||
+ (iD.geo.euclideanDistance(pos, point()) < tolerance &&
(+new Date() - time) < 500)) {
// Prevent a quick second click
// Connect the way to an existing way.
drawWay.addWay = function(loc, edge) {
+ var previousEdge = startIndex ?
+ [way.nodes[startIndex], way.nodes[startIndex - 1]] :
+ [way.nodes[0], way.nodes[1]];
// Avoid creating duplicate segments
- if (!isArea) {
- if (edge[0] === way.nodes[way.nodes.length - 1] ||
- edge[1] === way.nodes[way.nodes.length - 1]) return;
- }
+ if (!isArea && iD.geo.edgeEqual(edge, previousEdge))
+ return;
var newNode = iD.Node({ loc: loc });
var parser = function(map, s) {
var q = iD.util.stringQs(s);
- var args = (q.map || '').split("/").map(Number);
+ var args = (q.map || '').split('/').map(Number);
if (args.length < 3 || args.some(isNaN)) {
return true; // replace bogus hash
} else if (s !== formatter(map).slice(1)) {
d3.select(window)
.on('hashchange.hash', null);
- location.hash = "";
+ location.hash = '';
};
return hash;
Only one of these elements can have the :hover pseudo-class, but all of them will
have the .hover class.
*/
-iD.behavior.Hover = function(context) {
+iD.behavior.Hover = function() {
var dispatch = d3.dispatch('hover'),
selection,
altDisables,
function mousedown() {
down = true;
d3.select(window)
- .on('mouseup.hover', mouseup)
+ .on('mouseup.hover', mouseup);
}
function mouseup() {
d3.select(window)
.on('keydown.hover', null)
.on('keyup.hover', null)
- .on('mouseup.hover', null)
+ .on('mouseup.hover', null);
};
hover.altDisables = function(_) {
var text,
container,
xmargin = 25,
- tooltip_size = [0, 0],
- selection_size = [0, 0],
+ tooltipSize = [0, 0],
+ selectionSize = [0, 0],
transformProp = iD.util.prefixCSSProperty('Transform');
function tail(selection) {
if (!text) return;
d3.select(window)
- .on('resize.tail', function() { selection_size = selection.dimensions(); });
+ .on('resize.tail', function() { selectionSize = selection.dimensions(); });
function show() {
container.style('display', 'block');
- tooltip_size = container.dimensions();
+ tooltipSize = container.dimensions();
}
function mousemove() {
if (container.style('display') === 'none') show();
- var xoffset = ((d3.event.clientX + tooltip_size[0] + xmargin) > selection_size[0]) ?
- -tooltip_size[0] - xmargin : xmargin;
+ var xoffset = ((d3.event.clientX + tooltipSize[0] + xmargin) > selectionSize[0]) ?
+ -tooltipSize[0] - xmargin : xmargin;
container.classed('left', xoffset > 0);
container.style(transformProp, 'translate(' +
(~~d3.event.clientX + xoffset) + 'px,' +
container
.on('mousemove.tail', mousemove);
- tooltip_size = container.dimensions();
- selection_size = selection.dimensions();
+ tooltipSize = container.dimensions();
+ selectionSize = selection.dimensions();
}
tail.off = function(selection) {
iD.actions.AddEntity(way),
iD.actions.AddVertex(way.id, node.id));
- context.enter(iD.modes.DrawLine(context, way.id, 'forward', graph));
+ context.enter(iD.modes.DrawLine(context, way.id, graph));
}
function startFromWay(loc, edge) {
iD.actions.AddVertex(way.id, node.id),
iD.actions.AddMidpoint({ loc: loc, edge: edge }, node));
- context.enter(iD.modes.DrawLine(context, way.id, 'forward', graph));
+ context.enter(iD.modes.DrawLine(context, way.id, graph));
}
function startFromNode(node) {
- var graph = context.graph(),
- parent = graph.parentWays(node)[0],
- isLine = parent && parent.geometry(graph) === 'line';
-
- if (isLine && parent.first() === node.id) {
- context.enter(iD.modes.DrawLine(context, parent.id, 'backward', graph));
+ var way = iD.Way();
- } else if (isLine && parent.last() === node.id) {
- context.enter(iD.modes.DrawLine(context, parent.id, 'forward', graph));
-
- } else {
- var way = iD.Way();
-
- context.perform(
- iD.actions.AddEntity(way),
- iD.actions.AddVertex(way.id, node.id));
+ context.perform(
+ iD.actions.AddEntity(way),
+ iD.actions.AddVertex(way.id, node.id));
- context.enter(iD.modes.DrawLine(context, way.id, 'forward', graph));
- }
+ context.enter(iD.modes.DrawLine(context, way.id, context.graph()));
}
mode.enter = function() {
.newFeature(true));
}
- function addWay(loc, edge) {
+ function addWay(loc) {
add(loc);
}
iD.modes.DragNode(context).behavior];
mode.enter = function() {
- context.history().save();
-
behaviors.forEach(function(behavior) {
context.install(behavior);
});
// Get focus on the body.
- if (document.activeElement) {
+ if (document.activeElement && document.activeElement.blur) {
document.activeElement.blur();
}
return t('operations.move.annotation.' + entity.geometry(context.graph()));
}
- function connectAnnotation(datum) {
- return t('operations.connect.annotation.' + datum.geometry(context.graph()));
+ function connectAnnotation(entity) {
+ return t('operations.connect.annotation.' + entity.geometry(context.graph()));
}
function origin(entity) {
var d = datum();
if (d.type === 'node' && d.id !== entity.id) {
loc = d.loc;
- } else if (d.type === 'way') {
+ } else if (d.type === 'way' && !d3.select(d3.event.sourceEvent.target).classed('fill')) {
loc = iD.geo.chooseEdge(context.childNodes(d), context.mouse(), context.projection).loc;
}
context.replace(
iD.actions.MoveNode(entity.id, loc),
- t('operations.move.annotation.' + entity.geometry(context.graph())));
+ moveAnnotation(entity));
}
function end(entity) {
}
var behavior = iD.behavior.drag()
- .delegate("g.node, g.point, g.midpoint")
+ .delegate('g.node, g.point, g.midpoint')
.surface(context.surface().node())
.origin(origin)
.on('start', start)
return mode;
};
-iD.modes.DrawLine = function(context, wayId, direction, baseGraph) {
+iD.modes.DrawLine = function(context, wayId, baseGraph, affix) {
var mode = {
button: 'line',
id: 'draw-line'
mode.enter = function() {
var way = context.entity(wayId),
- index = (direction === 'forward') ? undefined : 0,
- headId = (direction === 'forward') ? way.last() : way.first();
+ index = (affix === 'prefix') ? 0 : undefined,
+ headId = (affix === 'prefix') ? way.first() : way.last();
behavior = iD.behavior.DrawWay(context, wayId, index, mode, baseGraph)
.tail(t('modes.draw_line.tail'));
};
var keybinding = d3.keybinding('move'),
- edit = iD.behavior.Edit(context);
-
- mode.enter = function() {
- context.install(edit);
+ edit = iD.behavior.Edit(context),
+ annotation = entityIDs.length === 1 ?
+ t('operations.move.annotation.' + context.geometry(entityIDs[0])) :
+ t('operations.move.annotation.multiple'),
+ origin,
+ nudgeInterval;
- var origin,
- nudgeInterval,
- annotation = entityIDs.length === 1 ?
- t('operations.move.annotation.' + context.geometry(entityIDs[0])) :
- t('operations.move.annotation.multiple');
+ function edge(point, size) {
+ var pad = [30, 100, 30, 100];
+ if (point[0] > size[0] - pad[0]) return [-10, 0];
+ else if (point[0] < pad[2]) return [10, 0];
+ else if (point[1] > size[1] - pad[1]) return [0, -10];
+ else if (point[1] < pad[3]) return [0, 10];
+ return null;
+ }
- context.perform(
- iD.actions.Noop(),
- annotation);
+ function startNudge(nudge) {
+ if (nudgeInterval) window.clearInterval(nudgeInterval);
+ nudgeInterval = window.setInterval(function() {
+ context.pan(nudge);
+ context.replace(
+ iD.actions.Move(entityIDs, [-nudge[0], -nudge[1]], context.projection),
+ annotation);
+ var c = context.projection(origin);
+ origin = context.projection.invert([c[0] - nudge[0], c[1] - nudge[1]]);
+ }, 50);
+ }
- function edge(point, size) {
- var pad = [30, 100, 30, 100];
- if (point[0] > size[0] - pad[0]) return [-10, 0];
- else if (point[0] < pad[2]) return [10, 0];
- else if (point[1] > size[1] - pad[1]) return [0, -10];
- else if (point[1] < pad[3]) return [0, 10];
- return null;
- }
+ function stopNudge() {
+ if (nudgeInterval) window.clearInterval(nudgeInterval);
+ nudgeInterval = null;
+ }
- function startNudge(nudge) {
- if (nudgeInterval) window.clearInterval(nudgeInterval);
- nudgeInterval = window.setInterval(function() {
- context.pan(nudge);
- context.replace(
- iD.actions.Move(entityIDs, [-nudge[0], -nudge[1]], context.projection),
- annotation);
- var c = context.projection(origin);
- origin = context.projection.invert([c[0] - nudge[0], c[1] - nudge[1]]);
- }, 50);
- }
+ function move() {
+ var p = context.mouse();
- function stopNudge() {
- if (nudgeInterval) window.clearInterval(nudgeInterval);
- nudgeInterval = null;
- }
+ var delta = origin ?
+ [p[0] - context.projection(origin)[0],
+ p[1] - context.projection(origin)[1]] :
+ [0, 0];
- function move() {
- var p = context.mouse();
+ var nudge = edge(p, context.map().dimensions());
+ if (nudge) startNudge(nudge);
+ else stopNudge();
- var delta = origin ?
- [p[0] - context.projection(origin)[0],
- p[1] - context.projection(origin)[1]] :
- [0, 0];
+ origin = context.map().mouseCoordinates();
- var nudge = edge(p, context.map().dimensions());
- if (nudge) startNudge(nudge);
- else stopNudge();
+ context.replace(
+ iD.actions.Move(entityIDs, delta, context.projection),
+ annotation);
+ }
- origin = context.map().mouseCoordinates();
+ function finish() {
+ d3.event.stopPropagation();
+ context.enter(iD.modes.Select(context, entityIDs)
+ .suppressMenu(true));
+ stopNudge();
+ }
- context.replace(
- iD.actions.Move(entityIDs, delta, context.projection),
- annotation);
- }
+ function cancel() {
+ context.pop();
+ context.enter(iD.modes.Select(context, entityIDs)
+ .suppressMenu(true));
+ stopNudge();
+ }
- function finish() {
- d3.event.stopPropagation();
- context.enter(iD.modes.Select(context, entityIDs));
- stopNudge();
- }
+ function undone() {
+ context.enter(iD.modes.Browse(context));
+ }
- function cancel() {
- context.pop();
- context.enter(iD.modes.Select(context, entityIDs));
- stopNudge();
- }
+ mode.enter = function() {
+ context.install(edit);
- function undone() {
- context.enter(iD.modes.Browse(context));
- }
+ context.perform(
+ iD.actions.Noop(),
+ annotation);
context.surface()
.on('mousemove.move', move)
};
mode.exit = function() {
+ stopNudge();
+
context.uninstall(edit);
context.surface()
function finish() {
d3.event.stopPropagation();
- context.enter(iD.modes.Select(context, [wayId]));
+ context.enter(iD.modes.Select(context, [wayId])
+ .suppressMenu(true));
}
function cancel() {
context.pop();
- context.enter(iD.modes.Select(context, [wayId]));
+ context.enter(iD.modes.Select(context, [wayId])
+ .suppressMenu(true));
}
function undone() {
iD.modes.Save = function(context) {
var ui = iD.ui.Commit(context)
.on('cancel', cancel)
- .on('fix', fix)
.on('save', save);
function cancel() {
context.enter(iD.modes.Browse(context));
}
- function fix(d) {
- context.map().zoomTo(d.entity);
- context.enter(iD.modes.Select(context, [d.entity.id]));
- }
-
function save(e) {
var loading = iD.ui.Loading(context)
.message(t('save.uploading'))
context.install(behavior);
});
- context.connection().authenticate(function(err) {
+ context.connection().authenticate(function() {
context.ui().sidebar.show(ui);
});
};
};
mode.enter = function() {
- context.history().save();
-
behaviors.forEach(function(behavior) {
context.install(behavior);
});
context.surface()
.on('dblclick.select', dblclick);
}, 200);
+
+ if (selectedIDs.length > 1) {
+ var entities = iD.ui.SelectionList(context, selectedIDs);
+ context.ui().sidebar.show(entities);
+ }
};
mode.exit = function() {
context.surface()
.call(radialMenu.close)
.on('dblclick.select', null)
- .selectAll(".selected")
+ .selectAll('.selected')
.classed('selected', false);
context.map().on('drawn.select', null);
+ context.ui().sidebar.hide();
};
return mode;
t('operations.circularize.description.' + geometry);
};
- operation.id = "circularize";
+ operation.id = 'circularize';
operation.keys = [t('operations.circularize.key')];
operation.title = t('operations.circularize.title');
return operation;
};
+iD.operations.Continue = function(selectedIDs, context) {
+ var graph = context.graph(),
+ entities = selectedIDs.map(function(id) { return graph.entity(id); }),
+ geometries = _.extend({line: [], vertex: []},
+ _.groupBy(entities, function(entity) { return entity.geometry(graph); })),
+ vertex = geometries.vertex[0];
+
+ function candidateWays() {
+ return graph.parentWays(vertex).filter(function(parent) {
+ return parent.geometry(graph) === 'line' &&
+ parent.affix(vertex.id) &&
+ (geometries.line.length === 0 || geometries.line[0] === parent);
+ });
+ }
+
+ var operation = function() {
+ var candidate = candidateWays()[0];
+ context.enter(iD.modes.DrawLine(
+ context,
+ candidate.id,
+ context.graph(),
+ candidate.affix(vertex.id)));
+ };
+
+ operation.available = function() {
+ return geometries.vertex.length === 1 && geometries.line.length <= 1;
+ };
+
+ operation.disabled = function() {
+ var candidates = candidateWays();
+ if (candidates.length === 0)
+ return 'not_eligible';
+ if (candidates.length > 1)
+ return 'multiple';
+ };
+
+ operation.tooltip = function() {
+ var disable = operation.disabled();
+ return disable ?
+ t('operations.continue.' + disable) :
+ t('operations.continue.description');
+ };
+
+ operation.id = 'continue';
+ operation.keys = [t('operations.continue.key')];
+ operation.title = t('operations.continue.title');
+
+ return operation;
+};
iD.operations.Delete = function(selectedIDs, context) {
var action = iD.actions.DeleteMultiple(selectedIDs);
} else if (i === nodes.length - 1) {
i--;
} else {
- var a = iD.geo.dist(entity.loc, context.entity(nodes[i - 1]).loc),
- b = iD.geo.dist(entity.loc, context.entity(nodes[i + 1]).loc);
+ var a = iD.geo.sphericalDistance(entity.loc, context.entity(nodes[i - 1]).loc),
+ b = iD.geo.sphericalDistance(entity.loc, context.entity(nodes[i + 1]).loc);
i = a < b ? i - 1 : i + 1;
}
t('operations.delete.description');
};
- operation.id = "delete";
+ operation.id = 'delete';
operation.keys = [iD.ui.cmd('⌘⌫'), iD.ui.cmd('⌘⌦')];
operation.title = t('operations.delete.title');
t('operations.disconnect.description');
};
- operation.id = "disconnect";
+ operation.id = 'disconnect';
operation.keys = [t('operations.disconnect.key')];
operation.title = t('operations.disconnect.title');
return t('operations.merge.description');
};
- operation.id = "merge";
+ operation.id = 'merge';
operation.keys = [t('operations.merge.key')];
operation.title = t('operations.merge.title');
t('operations.move.description');
};
- operation.id = "move";
+ operation.id = 'move';
operation.keys = [t('operations.move.key')];
operation.title = t('operations.move.title');
};
iD.operations.Orthogonalize = function(selectedIDs, context) {
var entityId = selectedIDs[0],
+ geometry = context.geometry(entityId),
action = iD.actions.Orthogonalize(entityId, context.projection);
- var operation = function() {
- var annotation = t('operations.orthogonalize.annotation.' + context.geometry(entityId));
+ function operation() {
+ var annotation = t('operations.orthogonalize.annotation.' + geometry);
context.perform(action, annotation);
- };
+ }
operation.available = function() {
+ var entity = context.entity(entityId);
return selectedIDs.length === 1 &&
- context.entity(entityId).type === 'way' &&
- _.uniq(context.entity(entityId).nodes).length > 2;
+ entity.type === 'way' &&
+ entity.isClosed() &&
+ _.uniq(entity.nodes).length > 2;
};
operation.disabled = function() {
var disable = operation.disabled();
return disable ?
t('operations.orthogonalize.' + disable) :
- t('operations.orthogonalize.description');
+ t('operations.orthogonalize.description.' + geometry);
};
- operation.id = "orthogonalize";
+ operation.id = 'orthogonalize';
operation.keys = [t('operations.orthogonalize.key')];
operation.title = t('operations.orthogonalize.title');
- operation.description = t('operations.orthogonalize.description');
return operation;
};
return t('operations.reverse.description');
};
- operation.id = "reverse";
+ operation.id = 'reverse';
operation.keys = [t('operations.reverse.key')];
operation.title = t('operations.reverse.title');
return t('operations.rotate.description');
};
- operation.id = "rotate";
+ operation.id = 'rotate';
operation.keys = [t('operations.rotate.key')];
operation.title = t('operations.rotate.title');
}
};
- operation.id = "split";
+ operation.id = 'split';
operation.keys = [t('operations.split.key')];
operation.title = t('operations.split.title');
return operation;
};
+iD.operations.Straighten = function(selectedIDs, context) {
+ var entityId = selectedIDs[0],
+ action = iD.actions.Straighten(entityId, context.projection);
+
+ function operation() {
+ var annotation = t('operations.straighten.annotation');
+ context.perform(action, annotation);
+ }
+
+ operation.available = function() {
+ var entity = context.entity(entityId);
+ return selectedIDs.length === 1 &&
+ entity.type === 'way' &&
+ !entity.isClosed() &&
+ _.uniq(entity.nodes).length > 2;
+ };
+
+ operation.disabled = function() {
+ return action.disabled(context.graph());
+ };
+
+ operation.tooltip = function() {
+ var disable = operation.disabled();
+ return disable ?
+ t('operations.straighten.' + disable) :
+ t('operations.straighten.description');
+ };
+
+ operation.id = 'straighten';
+ operation.keys = [t('operations.straighten.key')];
+ operation.title = t('operations.straighten.title');
+
+ return operation;
+};
iD.Connection = function() {
var event = d3.dispatch('authenticating', 'authenticated', 'auth', 'loading', 'load', 'loaded'),
};
connection.userURL = function(username) {
- return url + "/user/" + username;
+ return url + '/user/' + username;
};
connection.loadFromURL = function(url, callback) {
extent: iD.geo.Extent(
projection.invert([x, y + ts]),
projection.invert([x + ts, y]))
- }
+ };
});
function bboxUrl(tile) {
};
difference.addParents = function(entities) {
-
for (var i in entities) {
addParents(head.parentWays(entities[i]), entities);
addParents(head.parentRelations(entities[i]), entities);
return entities;
};
+ difference.summary = function() {
+ var relevant = {};
+
+ function addEntity(entity, graph, changeType) {
+ relevant[entity.id] = {
+ entity: entity,
+ graph: graph,
+ changeType: changeType
+ };
+ }
+
+ function addParents(entity) {
+ var parents = head.parentWays(entity);
+ for (var j = parents.length - 1; j >= 0; j--) {
+ var parent = parents[j];
+ if (!(parent.id in relevant)) addEntity(parent, head, 'modified');
+ }
+ }
+
+ _.each(changes, function(change) {
+ if (change.head && change.head.geometry(head) !== 'vertex') {
+ addEntity(change.head, head, change.base ? 'modified' : 'created');
+
+ } else if (change.base && change.base.geometry(base) !== 'vertex') {
+ addEntity(change.base, base, 'deleted');
+
+ } else if (change.base && change.head) { // modified vertex
+ var moved = !_.isEqual(change.base.loc, change.head.loc),
+ retagged = !_.isEqual(change.base.tags, change.head.tags);
+
+ if (moved) {
+ addParents(change.head);
+ }
+
+ if (retagged || (moved && change.head.hasInterestingTags())) {
+ addEntity(change.head, head, 'modified');
+ }
+
+ } else if (change.head && change.head.hasInterestingTags()) { // created vertex
+ addEntity(change.head, head, 'created');
+
+ } else if (change.base && change.base.hasInterestingTags()) { // deleted vertex
+ addEntity(change.base, base, 'deleted');
+ }
+ });
+
+ return d3.values(relevant);
+ };
+
difference.complete = function(extent) {
var result = {}, id, change;
return entity.id + 'v' + (entity.v || 0);
};
-iD.Entity.areaPath = d3.geo.path()
- .projection(d3.geo.mercator()
- .scale(12016420.517592335)
- .precision(0));
-
iD.Entity.prototype = {
tags: {},
resolver.parentRelations(this).length > 0;
},
- // Returns the (possibly negative) area of the entity in square pixels at an
- // arbitrary unspecified zoom level -- so basically, only useful for relative
- // comparisons.
area: function(resolver) {
return resolver.transient(this, 'area', function() {
- return iD.Entity.areaPath.area(this.asGeoJSON(resolver, true));
+ return d3.geo.area(this.asGeoJSON(resolver, true));
});
},
hasInterestingTags: function() {
return _.keys(this.tags).some(function(key) {
- return key != 'attribution' &&
- key != 'created_by' &&
- key != 'source' &&
- key != 'odbl' &&
+ return key !== 'attribution' &&
+ key !== 'created_by' &&
+ key !== 'source' &&
+ key !== 'odbl' &&
key.indexOf('tiger:') !== 0;
});
},
iD.data.deprecated.forEach(function(d) {
var match = _.pairs(d.old)[0];
tags.forEach(function(t) {
- if (t[0] == match[0] &&
- (t[1] == match[1] || match[1] == '*')) {
+ if (t[0] === match[0] &&
+ (t[1] === match[1] || match[1] === '*')) {
deprecated[t[0]] = t[1];
}
});
ways.push(entity.id);
parentWays[added[i]] = ways;
}
- } else if (type === 'node') {
} else if (type === 'relation') {
var stack, index, tree,
imageryUsed = ['Bing'],
dispatch = d3.dispatch('change', 'undone', 'redone'),
- lock = false;
+ lock = iD.util.SessionMutex('lock');
function perform(actions) {
actions = Array.prototype.slice.call(actions);
return this.difference().length() > 0;
},
- numChanges: function() {
- return this.difference().length();
- },
-
imageryUsed: function(sources) {
if (sources) {
imageryUsed = sources;
stack = h.stack.map(function(d) {
var entities = {}, entity;
- d.modified && d.modified.forEach(function(key) {
- entity = allEntities[key];
- entities[entity.id] = entity;
- });
+ if (d.modified) {
+ d.modified.forEach(function(key) {
+ entity = allEntities[key];
+ entities[entity.id] = entity;
+ });
+ }
- d.deleted && d.deleted.forEach(function(id) {
- entities[id] = undefined;
- });
+ if (d.deleted) {
+ d.deleted.forEach(function(id) {
+ entities[id] = undefined;
+ });
+ }
return {
graph: iD.Graph(stack[0].graph).load(entities),
},
save: function() {
- if (!lock) return history;
- context.storage(getKey('lock'), null);
- context.storage(getKey('saved_history'), this.toJSON() || null);
+ if (lock.locked()) context.storage(getKey('saved_history'), history.toJSON() || null);
return history;
},
clearSaved: function() {
- if (!lock) return;
- context.storage(getKey('saved_history'), null);
+ if (lock.locked()) context.storage(getKey('saved_history'), null);
+ return history;
},
lock: function() {
- if (context.storage(getKey('lock'))) return false;
- context.storage(getKey('lock'), true);
- lock = true;
- return lock;
+ return lock.lock();
+ },
+
+ unlock: function() {
+ lock.unlock();
},
// is iD not open in another window and it detects that
// there's a history stored in localStorage that's recoverable?
restorableChanges: function() {
- return lock && !!context.storage(getKey('saved_history'));
+ return lock.locked() && !!context.storage(getKey('saved_history'));
},
// load history from a version stored in localStorage
restore: function() {
- if (!lock) return;
+ if (!lock.locked()) return;
var json = context.storage(getKey('saved_history'));
- if (json) this.fromJSON(json);
+ if (json) history.fromJSON(json);
context.storage(getKey('saved_history', null));
-
},
_getKey: getKey
iD.Node.prototype = Object.create(iD.Entity.prototype);
_.extend(iD.Node.prototype, {
- type: "node",
+ type: 'node',
extent: function() {
return new iD.geo.Extent(this.loc);
asGeoJSON: function() {
return {
- type: 'Feature',
- properties: this.tags,
- geometry: {
- type: 'Point',
- coordinates: this.loc
- }
+ type: 'Point',
+ coordinates: this.loc
};
}
});
iD.Relation.prototype = Object.create(iD.Entity.prototype);
_.extend(iD.Relation.prototype, {
- type: "relation",
+ type: 'relation',
members: [],
extent: function(resolver) {
});
},
+ isDegenerate: function() {
+ return this.members.length === 0;
+ },
+
// Return an array of members, each extended with an 'index' property whose value
// is the member index.
indexedMembers: function() {
var result = new Array(this.members.length);
for (var i = 0; i < this.members.length; i++) {
- result[i] = _.extend({}, this.members[i], {index: i})
+ result[i] = _.extend({}, this.members[i], {index: i});
}
return result;
},
},
asGeoJSON: function(resolver) {
- if (this.isMultipolygon()) {
- return {
- type: 'Feature',
- properties: this.tags,
- geometry: {
+ return resolver.transient(this, 'GeoJSON', function () {
+ if (this.isMultipolygon()) {
+ return {
type: 'MultiPolygon',
coordinates: this.multipolygon(resolver)
- }
- };
- } else {
- return {
- type: 'FeatureCollection',
- properties: this.tags,
- features: this.members.map(function(member) {
- return _.extend({role: member.role}, resolver.entity(member.id).asGeoJSON(resolver));
- })
- };
- }
+ };
+ } else {
+ return {
+ type: 'FeatureCollection',
+ properties: this.tags,
+ features: this.members.map(function (member) {
+ return _.extend({role: member.role}, resolver.entity(member.id).asGeoJSON(resolver));
+ })
+ };
+ }
+ });
},
isMultipolygon: function() {
outers = outers.map(function(outer) { return _.pluck(outer.nodes, 'loc'); });
inners = inners.map(function(inner) { return _.pluck(inner.nodes, 'loc'); });
- var result = outers.map(function(o) { return [o]; });
+ var result = outers.map(function(o) {
+ // Heuristic for detecting counterclockwise winding order. Assumes
+ // that OpenStreetMap polygons are not hemisphere-spanning.
+ return [d3.geo.area({type: 'Polygon', coordinates: [o]}) > 2 * Math.PI ? o.reverse() : o];
+ });
function findOuter(inner) {
var o, outer;
}
for (var i = 0; i < inners.length; i++) {
+ var inner = inners[i];
+
+ if (d3.geo.area({type: 'Polygon', coordinates: [inner]}) < 2 * Math.PI) {
+ inner = inner.reverse();
+ }
+
var o = findOuter(inners[i]);
if (o !== undefined)
result[o].push(inners[i]);
iD.Way.prototype = Object.create(iD.Entity.prototype);
_.extend(iD.Way.prototype, {
- type: "way",
+ type: 'way',
nodes: [],
extent: function(resolver) {
return this.nodes.indexOf(node) >= 0;
},
+ affix: function(node) {
+ if (this.nodes[0] === node) return 'prefix';
+ if (this.nodes[this.nodes.length - 1] === node) return 'suffix';
+ },
+
isOneWay: function() {
return this.tags.oneway === 'yes' ||
this.tags.oneway === '1' ||
for (var i = 0; i < this.nodes.length; i++) {
var node = this.nodes[i];
- if (node != id && nodes[nodes.length - 1] != node) {
+ if (node !== id && nodes[nodes.length - 1] !== node) {
nodes.push(node);
}
}
// Preserve circularity
- if (this.nodes.length > 1 && this.first() === id && this.last() === id && nodes[nodes.length - 1] != nodes[0]) {
+ if (this.nodes.length > 1 && this.first() === id && this.last() === id && nodes[nodes.length - 1] !== nodes[0]) {
nodes.push(nodes[0]);
}
},
asGeoJSON: function(resolver, polygon) {
- var nodes = resolver.childNodes(this);
+ return resolver.transient(this, 'GeoJSON', function() {
+ var nodes = resolver.childNodes(this);
- if (this.isArea() && polygon && nodes.length >= 4) {
- if (!this.isClosed()) {
- nodes = nodes.concat([nodes[0]]);
- }
+ if (this.isArea() && polygon && nodes.length >= 4) {
+ if (!this.isClosed()) {
+ nodes = nodes.concat([nodes[0]]);
+ }
- return {
- type: 'Feature',
- properties: this.tags,
- geometry: {
+ var json = {
type: 'Polygon',
coordinates: [_.pluck(nodes, 'loc')]
+ };
+
+ // Heuristic for detecting counterclockwise winding order. Assumes
+ // that OpenStreetMap polygons are not hemisphere-spanning.
+ if (d3.geo.area(json) > 2 * Math.PI) {
+ json.coordinates[0] = json.coordinates[0].reverse();
}
- };
- } else {
- return {
- type: 'Feature',
- properties: this.tags,
- geometry: {
+
+ return json;
+ } else {
+ return {
type: 'LineString',
coordinates: _.pluck(nodes, 'loc')
- }
- };
- }
+ };
+ }
+ });
}
});
// of the following keys, and the value is _not_ one of the associated
// values for the respective key.
iD.Way.areaKeys = {
+ aeroway: { taxiway: true},
+ amenity: {},
area: {},
+ 'area:highway': {},
building: {},
- leisure: {},
- tourism: {},
- ruins: {},
+ 'building:part': {},
historic: {},
landuse: {},
+ leisure: {},
+ man_made: { cutline: true, embankment: true, pipeline: true},
military: {},
natural: { coastline: true },
- amenity: {},
- shop: {},
- man_made: {},
- public_transport: {},
+ office: {},
place: {},
- aeroway: {},
- waterway: {},
- power: {}
+ power: {},
+ public_transport: {},
+ ruins: {},
+ shop: {},
+ tourism: {},
+ waterway: {}
};
iD.Background = function(context) {
var dispatch = d3.dispatch('change'),
overlayLayers = [];
var backgroundSources = iD.data.imagery.map(function(source) {
- if (source.sourcetag === 'Bing') {
+ if (source.type === 'bing') {
return iD.BackgroundSource.Bing(source, dispatch);
} else {
return iD.BackgroundSource(source);
}
});
- function findSource(sourcetag) {
+ backgroundSources.unshift(iD.BackgroundSource.None());
+
+ function findSource(id) {
return _.find(backgroundSources, function(d) {
- return d.sourcetag && d.sourcetag === sourcetag;
+ return d.id && d.id === id;
});
}
function updateImagery() {
var b = background.baseLayerSource(),
- o = overlayLayers.map(function (d) { return d.source().sourcetag; }).join(','),
+ o = overlayLayers.map(function (d) { return d.source().id; }).join(','),
q = iD.util.stringQs(location.hash.substring(1));
- var tag = b.sourcetag;
- if (!tag && b.name === 'Custom') {
- tag = 'custom:' + b.template;
+ var id = b.id;
+ if (!id && b.name === 'Custom') {
+ id = 'custom:' + b.template;
}
- if (tag) {
- q.background = tag;
+ if (id) {
+ q.background = id;
} else {
delete q.background;
}
if (b.name === 'Custom') {
imageryUsed.push('Custom (' + b.template + ')');
} else {
- imageryUsed.push(b.sourcetag || b.name);
+ imageryUsed.push(b.id || b.name);
}
overlayLayers.forEach(function (d) {
var source = d.source();
if (!source.isLocatorOverlay()) {
- imageryUsed.push(source.sourcetag || source.name);
+ imageryUsed.push(source.id || source.name);
}
});
gpx.call(gpxLayer);
var overlays = selection.selectAll('.overlay-layer')
- .data(overlayLayers, function(d) { return d.source().name });
+ .data(overlayLayers, function(d) { return d.source().name; });
overlays.enter().insert('div', '.layer-data')
.attr('class', 'layer-layer overlay-layer');
};
background.bing = function() {
- background.baseLayerSource(findSource("Bing"));
+ background.baseLayerSource(findSource('Bing'));
};
background.hasGpxLayer = function() {
return background.hasGpxLayer() && gpxLayer.enable();
};
+ function toDom(x) {
+ return (new DOMParser()).parseFromString(x, 'text/xml');
+ }
+
+ background.gpxLayerFiles = function(fileList) {
+ var f = fileList[0],
+ reader = new FileReader();
+
+ reader.onload = function(e) {
+ gpxLayer.geojson(toGeoJSON.gpx(toDom(e.target.result)));
+ dispatch.change();
+ context.map().pan([0, 0]);
+ };
+
+ reader.readAsText(f);
+ };
+
background.zoomToGpxLayer = function() {
if (background.hasGpxLayer()) {
context.map()
overlayLayers.some(function(l) { return l.source() === d; });
};
+ background.overlayLayerSources = function() {
+ return overlayLayers.map(function (l) { return l.source(); });
+ };
+
background.toggleOverlayLayer = function(d) {
var layer;
name: 'Custom'
}));
} else {
- background.baseLayerSource(findSource(chosen) || findSource("Bing"));
+ background.baseLayerSource(findSource(chosen) || findSource('Bing'));
}
var locator = _.find(backgroundSources, function(d) {
};
source.url = function(coord) {
- var u = '';
- for (var zoom = coord[2]; zoom > 0; zoom--) {
- var b = 0;
- var mask = 1 << (zoom - 1);
- if ((coord[0] & mask) !== 0) b++;
- if ((coord[1] & mask) !== 0) b += 2;
- u += b.toString();
- }
-
return data.template
- .replace('{t}', data.subdomains ?
- data.subdomains[(coord[0] + coord[1]) % data.subdomains.length] : '')
- .replace('{u}', u)
.replace('{x}', coord[0])
.replace('{y}', coord[1])
// TMS-flipped y coordinate
- .replace('{ty}', Math.pow(2, coord[2]) - coord[1] - 1)
- .replace('{z}', coord[2])
- // JOSM style
- .replace('{zoom}', coord[2])
- .replace(/\{(switch\:[^\}]*)\}/, function(s, r) {
- var subdomains = r.split(':')[1].split(',');
- return subdomains[coord[2] % subdomains.length];
+ .replace(/\{[t-]y\}/, Math.pow(2, coord[2]) - coord[1] - 1)
+ .replace(/\{z(oom)?\}/, coord[2])
+ .replace(/\{switch:([^}]+)\}/, function(s, r) {
+ var subdomains = r.split(',');
+ return subdomains[(coord[0] + coord[1]) % subdomains.length];
});
};
source.intersects = function(extent) {
- return !data.extents || data.extents.some(function(ex) {
- return iD.geo.Extent(ex).intersects(extent);
+ extent = extent.polygon();
+ return !data.polygon || data.polygon.some(function(polygon) {
+ return iD.geo.polygonIntersectsPolygon(polygon, extent);
});
};
dispatch.change();
});
+ var template = 'http://ecn.t{t}.tiles.virtualearth.net/tiles/a{u}.jpeg?g=587&mkt=en-gb&n=z',
+ subdomains = [0, 1, 2, 3];
+
+ bing.url = function(coord) {
+ var u = '';
+
+ for (var zoom = coord[2]; zoom > 0; zoom--) {
+ var b = 0;
+ var mask = 1 << (zoom - 1);
+ if ((coord[0] & mask) !== 0) b++;
+ if ((coord[1] & mask) !== 0) b += 2;
+ u += b.toString();
+ }
+
+ return template
+ .replace('{t}', subdomains[(coord[0] + coord[1]) % 4])
+ .replace('{u}', u);
+ };
+
bing.copyrightNotices = function(zoom, extent) {
zoom = Math.min(zoom, 21);
return providers.filter(function(provider) {
}).join(', ');
};
+ bing.logo = 'bing_maps.png';
+ bing.terms_url = 'http://opengeodata.org/microsoft-imagery-details';
+
return bing;
};
-iD.GpxLayer = function(context, dispatch) {
+
+iD.BackgroundSource.None = function() {
+ return iD.BackgroundSource({ name: t('background.none'), id: 'None', template: '' });
+};
+iD.GpxLayer = function(context) {
var projection,
gj = {},
enable = true,
.append('path')
.attr('class', 'gpx');
+ var path = d3.geo.path()
+ .projection(projection);
+
paths
- .attr('d', d3.geo.path().projection(projection));
- }
+ .attr('d', path);
- function toDom(x) {
- return (new DOMParser()).parseFromString(x, 'text/xml');
+ if (typeof gj.features !== 'undefined') {
+ svg
+ .selectAll('text')
+ .remove();
+
+ svg
+ .selectAll('path')
+ .data(gj.features)
+ .enter()
+ .append('text')
+ .attr('class', 'gpx')
+ .text(function(d) {
+ return d.properties.name;
+ })
+ .attr('x', function(d) {
+ var centroid = path.centroid(d);
+ return centroid[0] + 5;
+ })
+ .attr('y', function(d) {
+ var centroid = path.centroid(d);
+ return centroid[1];
+ });
+ }
}
render.projection = function(_) {
d3.event.stopPropagation();
d3.event.preventDefault();
if (!iD.detect().filedrop) return;
- var f = d3.event.dataTransfer.files[0],
- reader = new FileReader();
-
- reader.onload = function(e) {
- render.geojson(toGeoJSON.gpx(toDom(e.target.result)));
- dispatch.change();
- context.map().pan([0, 0]);
- };
-
- reader.readAsText(f);
+ context.background().gpxLayerFiles(d3.event.dataTransfer.files);
})
.on('dragenter.localgpx', over)
.on('dragexit.localgpx', over)
points = iD.svg.Points(roundedProjection, context),
vertices = iD.svg.Vertices(roundedProjection, context),
lines = iD.svg.Lines(projection),
- areas = iD.svg.Areas(roundedProjection),
+ areas = iD.svg.Areas(projection),
midpoints = iD.svg.Midpoints(roundedProjection, context),
- labels = iD.svg.Labels(roundedProjection, context),
+ labels = iD.svg.Labels(projection, context),
supersurface, surface,
- mouse;
+ mouse,
+ mousemove;
function map(selection) {
context.history()
map.surface = surface = dataLayer.append('svg')
.on('mousedown.zoom', function() {
- if (d3.event.button == 2) {
+ if (d3.event.button === 2) {
d3.event.stopPropagation();
}
}, true)
.attr('id', 'surface')
.call(iD.svg.Surface(context));
+ surface.on('mousemove.map', function() {
+ mousemove = d3.event;
+ });
+
surface.on('mouseover.vertices', function() {
if (map.editable() && !transformed) {
var hover = d3.event.target.__data__;
.call(midpoints, graph, all, filter, map.extent())
.call(labels, graph, all, filter, dimensions, !difference && !extent);
- if (points.points(context.intersects(map.extent())).length > 100) {
+ if (points.points(context.intersects(map.extent()), 100).length >= 100) {
surface.select('.layer-hit').selectAll('g.point').remove();
} else {
surface.call(points, points.points(all), filter);
}
map.mouse = function() {
- var e = d3.event, s;
- while (s = e.sourceEvent) e = s;
+ var e = mousemove || d3.event, s;
+ while ((s = e.sourceEvent)) e = s;
return mouse(e);
};
return map;
};
- function setZoom(z, force) {
- if (z === map.zoom() && !force)
+ function setZoom(_, force) {
+ if (_ === map.zoom() && !force)
return false;
- var scale = 256 * Math.pow(2, z),
+ var scale = 256 * Math.pow(2, _),
center = pxCenter(),
l = pointLocation(center);
scale = Math.max(1024, Math.min(256 * Math.pow(2, 24), scale));
return true;
}
- function setCenter(loc) {
- var t = projection.translate(),
- c = pxCenter(),
- ll = projection(loc);
- if (ll[0] === c[0] && ll[1] === c[1])
+ function setCenter(_) {
+ var c = map.center();
+ if (_[0] === c[0] && _[1] === c[1])
return false;
+ var t = projection.translate(),
+ pxC = pxCenter(),
+ ll = projection(_);
projection.translate([
- t[0] - ll[0] + c[0],
- t[1] - ll[1] + c[1]]);
+ t[0] - ll[0] + pxC[0],
+ t[1] - ll[1] + pxC[1]]);
zoom.translate(projection.translate());
return true;
}
d3.timer(function() {
if (stop) return true;
map.center(iD.geo.interp(from, loc, (t += 1) / 10));
- return t == 10;
+ return t === 10;
}, 20);
return map;
};
if (source.validZoom(z)) {
tile().forEach(function(d) {
addSource(d);
+ if (d[3] === '') return;
requests.push(d);
if (cache[d[3]] === false && lookUp(d)) {
requests.push(addSource(lookUp(d)));
};
},
+ Round: function () {
+ return d3.geo.transform({
+ point: function(x, y) { return this.stream.point(Math.floor(x), Math.floor(y)); }
+ });
+ },
+
Path: function(projection, graph, polygon) {
var cache = {},
- path = d3.geo.path().projection(projection);
-
- function result(entity) {
- if (entity.id in cache) return cache[entity.id];
-
- var buffer = '';
-
- path.context({
- beginPath: function() {},
- moveTo: function(x, y) { buffer += 'M' + Math.floor(x) + ',' + Math.floor(y); },
- lineTo: function(x, y) { buffer += 'L' + Math.floor(x) + ',' + Math.floor(y); },
- arc: function() {},
- closePath: function() { buffer += 'Z'; }
- });
-
- path(entity.asGeoJSON(graph, polygon));
-
- return cache[entity.id] = buffer;
- }
+ round = iD.svg.Round().stream,
+ clip = d3.geo.clipExtent().extent(projection.clipExtent()).stream,
+ project = projection.stream,
+ path = d3.geo.path()
+ .projection({stream: function(output) { return polygon ? project(round(output)) : project(clip(round(output))); }});
- return result;
+ return function(entity) {
+ if (entity.id in cache) {
+ return cache[entity.id];
+ } else {
+ return cache[entity.id] = path(entity.asGeoJSON(graph, polygon)); // jshint ignore:line
+ }
+ };
},
OneWaySegments: function(projection, graph, dt) {
b = [x, y];
if (a) {
- var span = iD.geo.dist(a, b) - offset;
+ var span = iD.geo.euclideanDistance(a, b) - offset;
if (span >= 0) {
var angle = Math.atan2(b[1] - a[1], b[0] - a[0]),
}
};
iD.svg.Areas = function(projection) {
- // Patterns only work in Firefox when set directly on element
+ // Patterns only work in Firefox when set directly on element.
+ // (This is not a bug: https://bugzilla.mozilla.org/show_bug.cgi?id=750632)
var patterns = {
wetland: 'wetland',
beach: 'beach',
var entity = entities[i];
if (entity.geometry(graph) !== 'area') continue;
- if (multipolygon = iD.geo.isSimpleMultipolygonOuterMember(entity, graph)) {
+ multipolygon = iD.geo.isSimpleMultipolygonOuterMember(entity, graph);
+ if (multipolygon) {
areas[multipolygon.id] = {
entity: multipolygon.mergeTags(entity.tags),
area: Math.abs(entity.area(graph))
.filter(filter)
.data(function(layer) { return data[layer]; }, iD.Entity.key);
+ // Remove exiting areas first, so they aren't included in the `fills`
+ // array used for sorting below (https://github.com/systemed/iD/issues/1903).
+ paths.exit()
+ .remove();
+
+ var fills = surface.selectAll('.layer-fill path.area')[0];
+
+ var bisect = d3.bisector(function(node) {
+ return -node.__data__.area(graph);
+ }).left;
+
+ function sortedByArea(entity) {
+ if (this.__data__ === 'fill') {
+ return fills[bisect(fills, -entity.area(graph))];
+ }
+ }
+
paths.enter()
- .append('path')
+ .insert('path', sortedByArea)
.each(function(entity) {
var layer = this.parentNode.__data__;
.call(iD.svg.TagClasses());
paths
- .order()
.attr('d', path);
-
- paths.exit()
- .remove();
};
};
iD.svg.Labels = function(projection, context) {
+ var path = d3.geo.path().projection(projection);
// Replace with dict and iterate over entities tags instead?
var label_stack = [
var font_sizes = label_stack.map(function(d) {
var style = iD.util.getStyle('text.' + d[0] + '.tag-' + d[1]),
- m = style && style.cssText.match("font-size: ([0-9]{1,2})px;");
+ m = style && style.cssText.match('font-size: ([0-9]{1,2})px;');
if (m) return parseInt(m[1], 10);
style = iD.util.getStyle('text.' + d[0]);
- m = style && style.cssText.match("font-size: ([0-9]{1,2})px;");
+ m = style && style.cssText.match('font-size: ([0-9]{1,2})px;');
if (m) return parseInt(m[1], 10);
return default_size;
return c[text];
} else {
- return size / 3 * 2 * text.length;
+ var str = encodeURIComponent(text).match(/%[CDEFcdef]/g);
+ if (str === null) {
+ return size / 3 * 2 * text.length;
+ } else {
+ return size / 3 * (2 * text.length + str.length);
+ }
}
}
function drawLineLabels(group, entities, filter, classes, labels) {
-
var texts = group.selectAll('text.' + classes)
.filter(filter)
.data(entities, iD.Entity.key);
- var tp = texts.enter()
+ texts.enter()
.append('text')
.attr('class', function(d, i) { return classes + ' ' + labels[i].classes + ' ' + d.id; })
.append('textPath')
.attr('class', 'textpath');
- var tps = texts.selectAll('.textpath')
+ texts.selectAll('.textpath')
.filter(filter)
.data(entities, iD.Entity.key)
.attr({
.text(iD.util.displayName);
texts.exit().remove();
-
}
function drawLinePaths(group, entities, filter, classes, labels) {
-
var halos = group.selectAll('path')
.filter(filter)
.data(entities, iD.Entity.key);
// Split entities into groups specified by label_stack
for (i = 0; i < entities.length; i++) {
entity = entities[i];
- var geometry = entity.geometry(graph),
- preset = geometry === 'area' && context.presets().match(entity, graph),
+ var geometry = entity.geometry(graph);
+
+ if (geometry === 'vertex')
+ continue;
+ if (hidePoints && geometry === 'point')
+ continue;
+
+ var preset = geometry === 'area' && context.presets().match(entity, graph),
icon = preset && !blacklisted(preset) && preset.icon;
- if ((iD.util.displayName(entity) || icon) && !(hidePoints && geometry === 'point')) {
+ if (!icon && !iD.util.displayName(entity))
+ continue;
- for (k = 0; k < label_stack.length; k ++) {
- if (entity.geometry(graph) === label_stack[k][0] &&
- entity.tags[label_stack[k][1]]) {
- labelable[k].push(entity);
- break;
- }
+ for (k = 0; k < label_stack.length; k ++) {
+ if (geometry === label_stack[k][0] && entity.tags[label_stack[k][1]]) {
+ labelable[k].push(entity);
+ break;
}
}
}
}
function getAreaLabel(entity, width, height) {
- var path = d3.geo.path().projection(projection),
- centroid = path.centroid(entity.asGeoJSON(graph, true)),
+ var centroid = path.centroid(entity.asGeoJSON(graph, true)),
extent = entity.extent(graph),
entitywidth = projection(extent[1])[0] - projection(extent[0])[0],
rect;
// If neither of the nodes changed, no need to redraw midpoint
if (!midpoints[id] && (filter(a) || filter(b))) {
var loc = iD.geo.interp(a.loc, b.loc, 0.5);
- if (extent.intersects(loc) && iD.geo.dist(projection(a.loc), projection(b.loc)) > 40) {
+ if (extent.intersects(loc) && iD.geo.euclideanDistance(projection(a.loc), projection(b.loc)) > 40) {
midpoints[id] = {
type: 'midpoint',
id: id,
.remove();
}
- drawPoints.points = function(entities) {
+ drawPoints.points = function(entities, limit) {
var graph = context.graph(),
points = [];
var entity = entities[i];
if (entity.geometry(graph) === 'point') {
points.push(entity);
+ if (limit && points.length >= limit) break;
}
}
return drawPoints;
};
+iD.svg.Restrictions = function(context) {
+ var projection = context.projection;
+
+ function drawRestrictions(surface) {
+ var turns = drawRestrictions.turns(context.graph(), context.selectedIDs());
+
+ var groups = surface.select('.layer-hit').selectAll('g.restriction')
+ .data(turns, iD.Entity.key);
+
+ var enter = groups.enter().append('g')
+ .attr('class', 'restriction');
+
+ enter.append('circle')
+ .attr('class', 'restriction')
+ .attr('r', 4);
+
+ groups
+ .attr('transform', function(restriction) {
+ var via = context.entity(restriction.memberByRole('via').id);
+ return iD.svg.PointTransform(projection)(via);
+ });
+
+ groups.exit()
+ .remove();
+
+ return this;
+ }
+
+ drawRestrictions.turns = function (graph, selectedIDs) {
+ if (selectedIDs.length !== 1)
+ return [];
+
+ var from = graph.entity(selectedIDs[0]);
+ if (from.type !== 'way')
+ return [];
+
+ return graph.parentRelations(from).filter(function(relation) {
+ var f = relation.memberById(from.id),
+ t = relation.memberByRole('to'),
+ v = relation.memberByRole('via');
+
+ return relation.tags.type === 'restriction' && f.role === 'from' &&
+ t && t.type === 'way' && graph.hasEntity(t.id) &&
+ v && v.type === 'node' && graph.hasEntity(v.id) &&
+ !graph.entity(t.id).isDegenerate() &&
+ !graph.entity(f.id).isDegenerate() &&
+ graph.entity(t.id).affix(v.id) &&
+ graph.entity(f.id).affix(v.id);
+ });
+ };
+
+ drawRestrictions.datum = function(graph, from, restriction, projection) {
+ var to = graph.entity(restriction.memberByRole('to').id),
+ a = graph.entity(restriction.memberByRole('via').id),
+ b;
+
+ if (to.first() === a.id) {
+ b = graph.entity(to.nodes[1]);
+ } else {
+ b = graph.entity(to.nodes[to.nodes.length - 2]);
+ }
+
+ a = projection(a.loc);
+ b = projection(b.loc);
+
+ return {
+ from: from,
+ to: to,
+ restriction: restriction,
+ angle: Math.atan2(b[1] - a[1], b[0] - a[0])
+ };
+ };
+
+ return drawRestrictions;
+};
iD.svg.Surface = function(context) {
function autosize(image) {
var img = document.createElement('img');
.data(data)
.enter().append('use')
.attr('id', function(d) { return d.key; })
- .attr('transform', function(d) { return "translate(-" + d.value[0] + ",-" + d.value[1] + ")"; })
+ .attr('transform', function(d) { return 'translate(-' + d.value[0] + ',-' + d.value[1] + ')'; })
.attr('xlink:href', '#' + id);
};
}
};
};
iD.svg.TagClasses = function() {
- var keys = d3.set([
- 'highway', 'railway', 'waterway', 'power', 'motorway', 'amenity',
- 'natural', 'landuse', 'building', 'oneway', 'bridge', 'boundary',
- 'tunnel', 'leisure', 'construction', 'place', 'aeroway'
- ]), tagClassRe = /^tag-/,
+ var primary = [
+ 'highway', 'railway', 'waterway', 'aeroway', 'motorway',
+ 'boundary', 'power', 'amenity', 'natural', 'landuse',
+ 'building', 'leisure', 'place'
+ ],
+ secondary = [
+ 'oneway', 'bridge', 'tunnel', 'construction'
+ ],
+ tagClassRe = /^tag-/,
tags = function(entity) { return entity.tags; };
var tagClasses = function(selection) {
return name.length && !tagClassRe.test(name);
}).join(' ');
- var t = tags(entity);
- for (var k in t) {
- if (!keys.has(k) || t[k] === 'no') continue;
- classes += ' tag-' + k + ' tag-' + k + '-' + t[k];
+ var t = tags(entity), i, k, v;
+
+ for (i = 0; i < primary.length; i++) {
+ k = primary[i];
+ v = t[k];
+ if (!v || v === 'no') continue;
+ classes += ' tag-' + k + ' tag-' + k + '-' + v;
+ break;
+ }
+
+ for (i = 0; i < secondary.length; i++) {
+ k = secondary[i];
+ v = t[k];
+ if (!v || v === 'no') continue;
+ classes += ' tag-' + k + ' tag-' + k + '-' + v;
}
classes = classes.trim();
var icons = {};
function icon(entity) {
if (entity.id in icons) return icons[entity.id];
- return icons[entity.id] = (zoom !== 0 &&
+ icons[entity.id] = zoom !== 0 &&
entity.hasInterestingTags() &&
- context.presets().match(entity, graph).icon);
+ context.presets().match(entity, graph).icon;
+ return icons[entity.id];
}
function circle(klass) {
this.setAttribute('cx', c);
this.setAttribute('cy', -c);
this.setAttribute('r', r);
- }
+ };
}
var enter = groups.enter().append('g')
if (entity.id in selected ||
entity.hasInterestingTags() ||
entity.isIntersection(graph)) {
- vertices.push(entity)
+ vertices.push(entity);
}
}
};
iD.ui = function(context) {
function render(container) {
- var history = context.history(),
- map = context.map();
+ var map = context.map();
if (iD.detect().opera) container.classed('opera', true);
.attr('id', 'map')
.call(map);
- var spacer = bar.append('div')
+ bar.append('div')
.attr('class', 'spacer col4');
var limiter = bar.append('div')
.attr('class', 'spinner')
.call(iD.ui.Spinner(context));
- content.append('div')
- .attr('class', 'attribution')
- .attr('tabindex', -1)
+ content
.call(iD.ui.Attribution(context));
content.append('div')
.call(iD.ui.Contributors(context));
window.onbeforeunload = function() {
- history.save();
- if (history.hasChanges()) return t('save.unsaved_changes');
+ return context.save();
+ };
+
+ window.onunload = function() {
+ context.history().unlock();
};
d3.select(window).on('resize.editor', function() {
iD.ui.Attribution = function(context) {
var selection;
- function update() {
- if (!context.background().baseLayerSource()) {
- selection.html('');
- return;
- }
+ function attribution(data, klass) {
+ var div = selection.selectAll('.' + klass)
+ .data([0]);
+
+ div.enter()
+ .append('div')
+ .attr('class', klass);
- var attribution = selection.selectAll('.provided-by')
- .data([context.background().baseLayerSource()], function(d) { return d.name; });
+ var background = div.selectAll('.attribution')
+ .data(data, function(d) { return d.name; });
- attribution.enter()
+ background.enter()
.append('span')
- .attr('class', 'provided-by')
+ .attr('class', 'attribution')
.each(function(d) {
- var source = d.sourcetag || d.name;
+ if (d.terms_html) {
+ d3.select(this)
+ .html(d.terms_html);
+ return;
+ }
+
+ var source = d.terms_text || d.id || d.name;
if (d.logo) {
source = '<img class="source-image" src="' + context.imagePath(d.logo) + '">';
}
});
- attribution.exit()
+ background.exit()
.remove();
- var copyright = attribution.selectAll('.copyright-notice')
+ var copyright = background.selectAll('.copyright-notice')
.data(function(d) {
var notice = d.copyrightNotices(context.map().zoom(), context.map().extent());
return notice ? [notice] : [];
.remove();
}
+ function update() {
+ attribution([context.background().baseLayerSource()], 'base-layer-attribution');
+ attribution(context.background().overlayLayerSources().filter(function (s) {
+ return s.validZoom(context.map().zoom());
+ }), 'overlay-layer-attribution');
+ }
+
return function(select) {
selection = select;
};
iD.ui.Background = function(context) {
var key = 'b',
- opacities = [1, 0.5, 0],
+ opacities = [1, 0.75, 0.5, 0.25],
directions = [
['left', [1, 0]],
['top', [0, -1]],
['right', [-1, 0]],
['bottom', [0, 1]]],
- opacityDefault = (context.storage('background-opacity') != undefined) ?
+ opacityDefault = (context.storage('background-opacity') !== null) ?
(+context.storage('background-opacity')) : 0.5;
function background(selection) {
return context.background().showsLayer(d);
}
- content.selectAll('label.layer, label.custom_layer')
+ content.selectAll('.layer, .custom_layer')
.classed('active', active)
.selectAll('input')
.property('checked', active);
function clickCustom() {
d3.event.preventDefault();
var template = window.prompt(t('background.custom_prompt'));
- if (!template) {
+ if (!template || template.indexOf('google.com') !== -1 ||
+ template.indexOf('googleapis.com') !== -1 ||
+ template.indexOf('google.ru') !== -1) {
selectLayer();
return;
}
.sources(context.map().extent())
.filter(filter);
- var layerLinks = layerList.selectAll('label.layer')
+ var layerLinks = layerList.selectAll('li.layer')
.data(sources, function(d) { return d.name; });
- var layerInner = layerLinks.enter()
- .insert('label', '.custom_layer')
+ var enter = layerLinks.enter()
+ .insert('li', '.custom_layer')
.attr('class', 'layer');
// only set tooltips for layers with tooltips
- layerInner
- .filter(function(d) { return d.description; })
+ enter.filter(function(d) { return d.description; })
.call(bootstrap.tooltip()
.title(function(d) { return d.description; })
.placement('left'));
- layerInner.append('input')
+ var label = enter.append('label');
+
+ label.append('input')
.attr('type', type)
.attr('name', 'layers')
- .attr('value', function(d) { return d.name; })
.on('change', change);
- layerInner.append('span')
+ label.append('span')
.text(function(d) { return d.name; });
layerLinks.exit()
.remove();
- layerList.style('display', layerList.selectAll('label.layer').data().length > 0 ? 'block' : 'none');
+ layerList.style('display', layerList.selectAll('li.layer').data().length > 0 ? 'block' : 'none');
}
function update() {
function toggle() {
if (d3.event) d3.event.preventDefault();
tooltip.hide(button);
- var visible = !button.classed('active');
- setVisible(visible);
- if (visible) content.selectAll('.toggle-list label:first-child').node().focus();
+ setVisible(!button.classed('active'));
}
function setVisible(show) {
return t('background.percent_brightness', { opacity: (d * 100) });
})
.on('click.set-opacity', setOpacity)
- .html("<div class='select-box'></div>")
+ .html('<div class="select-box"></div>')
.call(bootstrap.tooltip()
.placement('top'))
.append('div')
.attr('class', 'opacity')
.style('opacity', String);
- var backgroundList = content
- .append('div')
- .attr('class', 'toggle-list layer-list');
+ var backgroundList = content.append('ul')
+ .attr('class', 'layer-list');
- var custom = backgroundList
- .append('label')
+ var custom = backgroundList.append('li')
.attr('class', 'custom_layer')
.datum({name: 'Custom'});
- custom.append('input')
+ var label = custom.append('label');
+
+ label.append('input')
.attr('type', 'radio')
.attr('name', 'layers')
.on('change', clickCustom);
- custom.append('span')
+ label.append('span')
.text(t('background.custom'));
- var overlayList = content
- .append('div')
- .attr('class', 'toggle-list layer-list');
+ var overlayList = content.append('ul')
+ .attr('class', 'layer-list');
- var gpxLayerItem = content
- .append('div')
+ var gpxLayerItem = content.append('ul')
.style('display', iD.detect().filedrop ? 'block' : 'none')
- .attr('class', 'toggle-list layer-list')
- .append('label')
+ .attr('class', 'layer-list')
+ .append('li')
.classed('layer-toggle-gpx', true);
- gpxLayerItem.call(bootstrap.tooltip()
- .title(t('gpx.drag_drop'))
- .placement('left'));
-
- gpxLayerItem.append('input')
- .attr('type', 'checkbox')
- .property('disabled', true)
- .on('change', clickGpx);
-
- gpxLayerItem.append('span')
- .text(t('gpx.local_layer'));
-
- gpxLayerItem
- .append('button')
- .attr('class', 'minor layer-extent')
+ gpxLayerItem.append('button')
+ .attr('class', 'layer-extent')
+ .call(bootstrap.tooltip()
+ .title(t('gpx.zoom'))
+ .placement('left'))
.on('click', function() {
d3.event.preventDefault();
d3.event.stopPropagation();
context.background().zoomToGpxLayer();
})
.append('span')
- .attr('class', 'icon geocode' );
+ .attr('class', 'icon geolocate');
- var adjustments = content
- .append('div')
+ gpxLayerItem.append('button')
+ .attr('class', 'layer-browse')
+ .call(bootstrap.tooltip()
+ .title(t('gpx.browse'))
+ .placement('left'))
+ .on('click', function() {
+ d3.select(document.createElement('input'))
+ .attr('type', 'file')
+ .on('change', function() {
+ context.background().gpxLayerFiles(d3.event.target.files);
+ })
+ .node().click();
+ })
+ .append('span')
+ .attr('class', 'icon geocode');
+
+ label = gpxLayerItem.append('label')
+ .call(bootstrap.tooltip()
+ .title(t('gpx.drag_drop'))
+ .placement('left'));
+
+ label.append('input')
+ .attr('type', 'checkbox')
+ .property('disabled', true)
+ .on('change', clickGpx);
+
+ label.append('span')
+ .text(t('gpx.local_layer'));
+
+ var adjustments = content.append('div')
.attr('class', 'adjustments');
adjustments.append('a')
d3.event.preventDefault();
});
- var nudgeContainer = adjustments
- .append('div')
+ var nudgeContainer = adjustments.append('div')
.attr('class', 'nudge-container cf')
.style('display', 'none');
return keys.join('+');
};
iD.ui.Commit = function(context) {
- var event = d3.dispatch('cancel', 'save', 'fix'),
- presets = context.presets();
-
- function zipSame(d) {
- var c = [], n = -1;
- for (var i = 0; i < d.length; i++) {
- var desc = {
- name: d[i].tags.name || presets.match(d[i], context.graph()).name(),
- geometry: d[i].geometry(context.graph()),
- count: 1,
- tagText: iD.util.tagText(d[i])
- };
- if (c[n] &&
- c[n].name == desc.name &&
- c[n].tagText == desc.tagText) {
- c[n].count++;
- } else {
- c[++n] = desc;
- }
- }
- return c;
- }
+ var event = d3.dispatch('cancel', 'save');
function commit(selection) {
- var changes = context.history().changes();
-
- function changesLength(d) { return changes[d].length; }
+ var changes = context.history().changes(),
+ summary = context.history().difference().summary();
+
+ function zoomToEntity(change) {
+ var entity = change.entity;
+ if (change.changeType !== 'deleted' &&
+ context.graph().entity(entity.id).geometry(context.graph()) !== 'vertex') {
+ context.map().zoomTo(entity);
+ context.surface().selectAll(
+ iD.util.entityOrMemberSelector([entity.id], context.graph()))
+ .classed('hover', true);
+ }
+ }
var header = selection.append('div')
.attr('class', 'header fillL');
var commentField = commentSection.append('textarea')
.attr('placeholder', t('commit.description_placeholder'))
- .property('value', context.storage('comment') || '');
+ .property('value', context.storage('comment') || '')
+ .on('blur.save', function () {
+ context.storage('comment', this.value);
+ });
commentField.node().select();
// Confirm Button
var saveButton = saveSection.append('button')
- .attr('class', 'action col3 button')
+ .attr('class', 'action col4 button')
.on('click.save', function() {
- var comment = commentField.node().value;
- localStorage.comment = comment;
event.save({
- comment: comment
+ comment: commentField.node().value
});
});
.attr('class', 'label')
.text(t('commit.save'));
+ // Warnings
var warnings = body.selectAll('div.warning-section')
- .data(iD.validate(changes, context.graph()))
+ .data([iD.validate(changes, context.graph())])
.enter()
.append('div')
- .attr('class', 'modal-section warning-section fillL2');
+ .attr('class', 'modal-section warning-section fillL2')
+ .style('display', function(d) { return _.isEmpty(d) ? 'none' : null; });
warnings.append('h3')
.text(t('commit.warnings'));
.selectAll('li')
.data(function(d) { return d; })
.enter()
- .append('li');
+ .append('li')
+ .on('mouseover', mouseover)
+ .on('mouseout', mouseout)
+ .on('click', warningClick);
- // only show the fix icon when an entity is given
- warningLi.filter(function(d) { return d.entity; })
- .append('button')
- .attr('class', 'minor')
- .on('click', event.fix)
- .append('span')
- .attr('class', 'icon warning');
+ warningLi.append('span')
+ .attr('class', 'alert icon icon-pre-text');
warningLi.append('strong').text(function(d) {
return d.message;
});
- var section = body.selectAll('div.commit-section')
- .data(['modified', 'deleted', 'created'].filter(changesLength))
+ var changeSection = body.selectAll('div.commit-section')
+ .data([0])
.enter()
.append('div')
.attr('class', 'commit-section modal-section fillL2');
- section.append('h3')
- .text(function(d) { return t('commit.' + d); })
- .append('small')
- .attr('class', 'count')
- .text(changesLength);
+ changeSection.append('h3')
+ .text(summary.length + ' Changes');
- var li = section.append('ul')
+ var li = changeSection.append('ul')
.attr('class', 'changeset-list')
.selectAll('li')
- .data(function(d) { return zipSame(changes[d]); })
+ .data(summary)
.enter()
- .append('li');
+ .append('li')
+ .on('mouseover', mouseover)
+ .on('mouseout', mouseout)
+ .on('click', zoomToEntity);
+
+ li.append('span')
+ .attr('class', function(d) {
+ return d.entity.geometry(d.graph) + ' ' + d.changeType + ' icon icon-pre-text';
+ });
+
+ li.append('span')
+ .attr('class', 'change-type')
+ .text(function(d) {
+ return d.changeType + ' ';
+ });
li.append('strong')
+ .attr('class', 'entity-type')
.text(function(d) {
- return d.geometry + ' ';
+ return context.presets().match(d.entity, d.graph).name();
});
li.append('span')
- .text(function(d) { return d.name; })
- .attr('title', function(d) { return d.tagText; });
+ .attr('class', 'entity-name')
+ .text(function(d) {
+ var name = iD.util.displayName(d.entity) || '',
+ string = '';
+ if (name !== '') string += ':';
+ return string += ' ' + name;
+ });
- li.filter(function(d) { return d.count > 1; })
- .append('span')
- .attr('class', 'count')
- .text(function(d) { return d.count; });
+ li.style('opacity', 0)
+ .transition()
+ .style('opacity', 1);
+
+ li.style('opacity', 0)
+ .transition()
+ .style('opacity', 1);
+
+ function mouseover(d) {
+ if (d.entity) {
+ context.surface().selectAll(
+ iD.util.entityOrMemberSelector([d.entity.id], context.graph())
+ ).classed('hover', true);
+ }
+ }
+
+ function mouseout() {
+ context.surface().selectAll('.hover')
+ .classed('hover', false);
+ }
+
+ function warningClick(d) {
+ if (d.entity) {
+ context.map().zoomTo(d.entity);
+ context.enter(iD.modes.Select(context, [d.entity.id]));
+ }
+ }
}
return d3.rebind(commit, event, 'on');
var section = modal.select('.content');
- var modalHeader = section.append('div')
+ section.append('div')
.attr('class', 'modal-section header');
- var description = section.append('div')
+ section.append('div')
.attr('class', 'modal-section message-text');
var buttonwrap = section.append('div')
.attr('class', 'modal-section buttons cf');
- var okbutton = buttonwrap.append('button')
+ buttonwrap.append('button')
.attr('class', 'col2 action')
.on('click.confirm', function() {
modal.remove();
if (!arguments.length) return preset;
if (_ !== preset) {
preset = _;
- reference = iD.ui.TagReference(preset.reference())
+ reference = iD.ui.TagReference(preset.reference(context.geometry(id)))
.showing(false);
}
return entityEditor;
}
(geocodeResults || []).forEach(function(d) {
- result.push({
- id: iD.Entity.id.fromOSM(d.osm_type, d.osm_id),
- geometry: d.osm_type === 'relation' ? 'relation' : d.osm_type === 'way' ? 'line' : 'point',
- type: (d.type.charAt(0).toUpperCase() + d.type.slice(1)).replace('_', ' '),
- name: d.display_name,
- extent: new iD.geo.Extent(
- [parseFloat(d.boundingbox[3]), parseFloat(d.boundingbox[0])],
- [parseFloat(d.boundingbox[2]), parseFloat(d.boundingbox[1])])
- })
+ // https://github.com/systemed/iD/issues/1890
+ if (d.osm_type && d.osm_id) {
+ result.push({
+ id: iD.Entity.id.fromOSM(d.osm_type, d.osm_id),
+ geometry: d.osm_type === 'relation' ? 'relation' : d.osm_type === 'way' ? 'line' : 'point',
+ type: (d.type.charAt(0).toUpperCase() + d.type.slice(1)).replace('_', ' '),
+ name: d.display_name,
+ extent: new iD.geo.Extent(
+ [parseFloat(d.boundingbox[3]), parseFloat(d.boundingbox[0])],
+ [parseFloat(d.boundingbox[2]), parseFloat(d.boundingbox[1])])
+ });
+ }
});
return result;
};
};
iD.ui.Help = function(context) {
-
var key = 'h';
- function help(selection) {
-
- var shown = false, pane;
-
- function setup() {
- pane = context.container()
- .select('.help-wrap')
- .html('');
-
- var toc = pane.append('ul')
- .attr('class', 'toc');
-
- function clickHelp(d, i) {
- pane.property('scrollTop', 0);
- doctitle.text(d.title);
- body.html(d.html);
- body.selectAll('a')
- .attr('target', '_blank');
- menuItems.classed('selected', function(m) {
- return m.title === d.title;
- });
-
- nav.html('');
-
- if (i > 0) {
- var prevLink = nav.append('a')
- .attr('class', 'previous')
- .on('click', function() {
- clickHelp(docs[i - 1], i - 1);
- });
- prevLink.append('span').attr('class', 'icon back blue');
- prevLink.append('span').text(docs[i - 1].title);
- }
- if (i < docs.length - 1) {
- var nextLink = nav.append('a')
- .attr('class', 'next')
- .on('click', function() {
- clickHelp(docs[i + 1], i + 1);
- });
- nextLink.append('span').text(docs[i + 1].title);
- nextLink.append('span').attr('class', 'icon forward blue');
- }
- }
-
- var docKeys = [
- 'help.help',
- 'help.editing_saving',
- 'help.roads',
- 'help.gps',
- 'help.imagery',
- 'help.addresses',
- 'help.inspector',
- 'help.buildings',
- 'help.relations'];
-
- function one(f) { return function(x) { return f(x); }; }
- var docs = docKeys.map(one(t)).map(function(text) {
- return {
- title: text.split('\n')[0].replace('#', '').trim(),
- html: marked(text.split('\n').slice(1).join('\n'))
- };
- });
-
- var menuItems = toc.selectAll('li')
- .data(docs)
- .enter()
- .append('li')
- .append('a')
- .text(function(d) { return d.title; })
- .on('click', clickHelp);
-
- toc.append('li')
- .attr('class','walkthrough')
- .append('a')
- .text(t('splash.walkthrough'))
- .on('click', function() {
- d3.select(document.body).call(iD.ui.intro(context));
- setVisible(false);
- });
+ var docKeys = [
+ 'help.help',
+ 'help.editing_saving',
+ 'help.roads',
+ 'help.gps',
+ 'help.imagery',
+ 'help.addresses',
+ 'help.inspector',
+ 'help.buildings',
+ 'help.relations'];
+
+ var docs = docKeys.map(function(key) {
+ var text = t(key);
+ return {
+ title: text.split('\n')[0].replace('#', '').trim(),
+ html: marked(text.split('\n').slice(1).join('\n'))
+ };
+ });
- var content = pane.append('div')
- .attr('class', 'left-content'),
- doctitle = content.append('h2')
- .text(t('help.title')),
- body = content.append('div')
- .attr('class', 'body'),
- nav = content.append('div')
- .attr('class', 'nav');
+ function help(selection) {
+ var shown = false;
- clickHelp(docs[0], 0);
+ function hide() {
+ setVisible(false);
}
- function hide() { setVisible(false); }
function toggle() {
if (d3.event) d3.event.preventDefault();
tooltip.hide(button);
setVisible(!button.classed('active'));
}
- function blockClick() {
- pane.on('mousedown.help-inside', function() {
- return d3.event.stopPropagation();
- });
- selection.on('mousedown.help-inside', function() {
- return d3.event.stopPropagation();
- });
- }
-
function setVisible(show) {
if (show !== shown) {
button.classed('active', show);
.style('right', '-500px')
.transition()
.duration(200)
- .style('right', '0px')
- .each('end', blockClick);
+ .style('right', '0px');
} else {
pane.style('right', '0px')
.transition()
.each('end', function() {
d3.select(this).style('display', 'none');
});
- pane.on('mousedown.help-inside', null);
}
}
}
+ function clickHelp(d, i) {
+ pane.property('scrollTop', 0);
+ doctitle.text(d.title);
+ body.html(d.html);
+ body.selectAll('a')
+ .attr('target', '_blank');
+ menuItems.classed('selected', function(m) {
+ return m.title === d.title;
+ });
+
+ nav.html('');
+
+ if (i > 0) {
+ var prevLink = nav.append('a')
+ .attr('class', 'previous')
+ .on('click', function() {
+ clickHelp(docs[i - 1], i - 1);
+ });
+ prevLink.append('span').attr('class', 'icon back blue');
+ prevLink.append('span').text(docs[i - 1].title);
+ }
+ if (i < docs.length - 1) {
+ var nextLink = nav.append('a')
+ .attr('class', 'next')
+ .on('click', function() {
+ clickHelp(docs[i + 1], i + 1);
+ });
+ nextLink.append('span').text(docs[i + 1].title);
+ nextLink.append('span').attr('class', 'icon forward blue');
+ }
+ }
+
+ function clickWalkthrough() {
+ d3.select(document.body).call(iD.ui.intro(context));
+ setVisible(false);
+ }
+
var tooltip = bootstrap.tooltip()
.placement('left')
.html(true)
button.append('span')
.attr('class', 'icon help light');
+ var pane = context.container()
+ .select('.help-wrap');
+
+ var toc = pane.append('ul')
+ .attr('class', 'toc');
+
+ var menuItems = toc.selectAll('li')
+ .data(docs)
+ .enter()
+ .append('li')
+ .append('a')
+ .text(function(d) { return d.title; })
+ .on('click', clickHelp);
+
+ toc.append('li')
+ .attr('class','walkthrough')
+ .append('a')
+ .text(t('splash.walkthrough'))
+ .on('click', clickWalkthrough);
+
+ var content = pane.append('div')
+ .attr('class', 'left-content');
+
+ var doctitle = content.append('h2')
+ .text(t('help.title'));
+
+ var body = content.append('div')
+ .attr('class', 'body');
+
+ var nav = content.append('div')
+ .attr('class', 'nav');
+
+ clickHelp(docs[0], 0);
+
+ var keybinding = d3.keybinding('help')
+ .on(key, toggle);
+
+ d3.select(document)
+ .call(keybinding);
+
context.surface().on('mousedown.help-outside', hide);
context.container().on('mousedown.b.help-outside', hide);
- setup();
+ pane.on('mousedown.help-inside', function() {
+ return d3.event.stopPropagation();
+ });
- var keybinding = d3.keybinding('help');
- keybinding.on(key, toggle);
- d3.select(document).call(keybinding);
+ selection.on('mousedown.help-inside', function() {
+ return d3.event.stopPropagation();
+ });
}
return help;
background = context.background().baseLayerSource(),
opacity = d3.select('.background-layer').style('opacity'),
loadedTiles = context.connection().loadedTiles(),
- baseEntities = context.history().graph().base().entities;
+ baseEntities = context.history().graph().base().entities,
+ introGraph;
// Load semi-real data used in intro
context.connection().toggle(false).flush();
- context.history().save().reset();
- context.history().merge(iD.Graph().load(JSON.parse(iD.introGraph)).entities);
+ context.history().reset();
+
+ introGraph = JSON.parse(iD.introGraph);
+ for (var key in introGraph) {
+ introGraph[key] = iD.Entity(introGraph[key]);
+ }
+ context.history().merge(iD.Graph().load(introGraph).entities);
context.background().bing();
// Block saving
var savebutton = d3.select('#bar button.save'),
save = savebutton.on('click');
savebutton.on('click', null);
-
- var beforeunload = window.onbeforeunload;
- window.onbeforeunload = null;
+ context.inIntro(true);
d3.select('.background-layer').style('opacity', 1);
context.background().baseLayerSource(background);
if (history) context.history().fromJSON(history);
window.location.replace(hash);
- window.onbeforeunload = beforeunload;
+ context.inIntro(false);
d3.select('#bar button.save').on('click', save);
});
};
iD.ui.intro.pointBox = function(point, context) {
- var rect = context.surface().node().getBoundingClientRect();
+ var rect = context.surfaceRect();
point = context.projection(point);
return {
left: point[0] + rect.left - 30,
iD.ui.intro.pad = function(box, padding, context) {
if (box instanceof Array) {
- var rect = context.surface().node().getBoundingClientRect();
+ var rect = context.surfaceRect();
box = context.projection(box);
box = {
left: box[0] + rect.left,
.attr('class', 'modal fillL col6');
shaded.on('click.remove-modal', function() {
- if (d3.event.target == this && !blocking) shaded.close();
+ if (d3.event.target === this && !blocking) shaded.close();
});
modal.append('button')
context.on('enter.editor', function(entered) {
buttons.classed('active', function(mode) { return entered.button === mode.button; });
context.container()
- .classed("mode-" + entered.id, true);
+ .classed('mode-' + entered.id, true);
});
context.on('exit.editor', function(exited) {
context.container()
- .classed("mode-" + exited.id, false);
+ .classed('mode-' + exited.id, false);
});
var keybinding = d3.keybinding('mode-buttons');
return t;
};
+ field.present = function() {
+ return _.any(field.keys, function(key) {
+ return tags[key];
+ });
+ };
+
+ field.remove = function() {
+ var t = {};
+ field.keys.forEach(function(key) {
+ t[key] = undefined;
+ });
+ return t;
+ };
+
return field;
}
.attr('for', function(field) { return 'preset-input-' + field.id; })
.text(function(field) { return field.label(); });
- $label.append('button')
- .attr('class', 'modified-icon minor')
+ var wrap = $label.append('div')
+ .attr('class', 'form-label-button-wrap');
+
+ wrap.append('button')
+ .attr('class', 'remove-icon')
+ .append('span').attr('class', 'icon delete');
+
+ wrap.append('button')
+ .attr('class', 'modified-icon')
.attr('tabindex', -1)
.append('div')
.attr('class', 'icon undo');
// Update
+ $fields.select('.form-label-button-wrap .remove-icon')
+ .on('click', remove);
+
$fields.select('.modified-icon')
.on('click', revert);
$fields
+ .order()
.classed('modified', function(field) {
return field.modified();
})
+ .classed('present', function(field) {
+ return field.present();
+ })
.each(function(field) {
var reference = iD.ui.TagReference({key: field.key});
d3.select(this)
.call(field.input)
.call(reference.body)
- .select('.form-label')
+ .select('.form-label-button-wrap')
.call(reference.button);
field.input.tags(tags);
d3.event.preventDefault();
event.change(field.revert());
}
+
+ function remove(field) {
+ d3.event.stopPropagation();
+ d3.event.preventDefault();
+ event.change(field.remove());
+ }
}
presets.preset = function(_) {
function drawList(list, presets) {
var collection = presets.collection.map(function(preset) {
- return preset.members ? CategoryItem(preset) : PresetItem(preset)
+ return preset.members ? CategoryItem(preset) : PresetItem(preset);
});
var items = list.selectAll('.preset-list-item')
};
item.preset = preset;
- item.reference = iD.ui.TagReference(preset.reference());
+ item.reference = iD.ui.TagReference(preset.reference(context.geometry(id)));
return item;
}
menu = selection.append('g')
.attr('class', 'radial-menu')
- .attr('transform', "translate(" + center + ")")
+ .attr('transform', 'translate(' + center + ')')
.attr('opacity', 0);
menu.transition()
.attr('class', 'radial-menu-background')
.attr('d', 'M' + r * Math.sin(a0) + ',' +
r * Math.cos(a0) +
- ' A' + r + ',' + r + ' 0 0,0 ' +
+ ' A' + r + ',' + r + ' 0 ' + (operations.length > 5 ? '1' : '0') + ',0 ' +
(r * Math.sin(a1) + 1e-3) + ',' +
(r * Math.cos(a1) + 1e-3)) // Force positive-length path (#1305)
.attr('stroke-width', 50)
.attr('r', 15)
.classed('disabled', function(d) { return d.disabled(); })
.on('click', click)
+ .on('mousedown', mousedown)
.on('mouseover', mouseover)
.on('mouseout', mouseout);
.append('div')
.attr('class', 'tooltip-inner radial-menu-tooltip');
+ function mousedown() {
+ d3.event.stopPropagation(); // https://github.com/systemed/iD/issues/1869
+ }
+
function mouseover(d, i) {
- // Avoid getBoundingClientRect on SVG element; browser implementations
- // differ: http://stackoverflow.com/questions/18153989/
- var rect = context.surface().node().parentNode.getBoundingClientRect(),
+ var rect = context.surfaceRect(),
angle = a0 + i * a,
- dx = rect.left - (angle < 0 ? 200 : 0),
- dy = rect.top;
+ top = rect.top + (r + 25) * Math.cos(angle) + center[1] + 'px',
+ left = rect.left + (r + 25) * Math.sin(angle) + center[0] + 'px',
+ bottom = rect.height - (r + 25) * Math.cos(angle) - center[1] + 'px',
+ right = rect.width - (r + 25) * Math.sin(angle) - center[0] + 'px';
tooltip
- .style('left', (r + 25) * Math.sin(angle) + dx + center[0] + 'px')
- .style('top', (r + 25) * Math.cos(angle) + dy + center[1]+ 'px')
+ .style('top', null)
+ .style('left', null)
+ .style('bottom', null)
+ .style('right', null)
.style('display', 'block')
.html(iD.ui.tooltipHtml(d.tooltip(), d.keys[0]));
+
+ if (i === 0) {
+ tooltip
+ .style('right', right)
+ .style('top', top);
+ } else if (i >= 4) {
+ tooltip
+ .style('left', left)
+ .style('bottom', bottom);
+ } else {
+ tooltip
+ .style('left', left)
+ .style('top', top);
+ }
}
function mouseout() {
var id;
function selectMember(d) {
+ d3.event.preventDefault();
context.enter(iD.modes.Select(context, [d.id]));
}
});
var $enter = $items.enter().append('li')
- .attr('class', 'member-row form-field');
+ .attr('class', 'member-row form-field')
+ .classed('member-incomplete', function(d) { return !d.member; });
$enter.each(function(d) {
if (d.member) {
} else {
d3.select(this).append('label')
- .attr('class', 'form-label member-incomplete')
+ .attr('class', 'form-label')
.text(t('inspector.incomplete'));
}
});
var id, showBlank;
function selectRelation(d) {
+ d3.event.preventDefault();
context.enter(iD.modes.Select(context, [d.relation.id]));
}
graph = context.graph();
context.intersects(context.extent()).forEach(function(entity) {
- if (entity.type !== 'relation')
+ if (entity.type !== 'relation' || entity.id === id)
return;
var presetName = context.presets().match(entity, graph).name(),
if (member.id === entity.id) {
memberships.push({relation: relation, member: member, index: index});
}
- })
+ });
});
selection.call(iD.ui.Disclosure()
introModal.append('div')
.attr('class', 'modal-section')
.append('h3')
- .text(t('restore.heading'));
+ .text(t('restore.heading'));
introModal.append('div')
.attr('class','modal-section')
.append('p')
- .text(t('restore.description'));
+ .text(t('restore.description'));
var buttonWrap = introModal.append('div')
.attr('class', 'modal-actions cf');
restore.node().focus();
};
- modal.select('button.close').attr('class','hide');
-
};
iD.ui.Save = function(context) {
var history = context.history(),
var numChanges = 0;
context.history().on('change.save', function() {
- var _ = history.numChanges();
+ var _ = history.difference().summary().length;
if (_ === numChanges)
return;
numChanges = _;
tooltip.title(iD.ui.tooltipHtml(t(numChanges > 0 ?
- 'save.help' : 'save.no_changes'), key))
+ 'save.help' : 'save.no_changes'), key));
button
.classed('disabled', numChanges === 0)
});
};
};
+iD.ui.SelectionList = function(context, selectedIDs) {
+
+ function selectionList(selection) {
+ selection.classed('selection-list-pane', true);
+
+ var header = selection.append('div')
+ .attr('class', 'header fillL cf');
+
+ header.append('h3')
+ .text(t('inspector.multiselect'));
+
+ var listWrap = selection.append('div')
+ .attr('class', 'inspector-body');
+
+ var list = listWrap.append('div')
+ .attr('class', 'feature-list cf');
+
+ context.history().on('change.selection-list', drawList);
+ drawList();
+
+ function drawList() {
+ var entities = selectedIDs
+ .map(function(id) { return context.hasEntity(id); })
+ .filter(function(entity) { return entity; });
+
+ var items = list.selectAll('.feature-list-item')
+ .data(entities, iD.Entity.key);
+
+ var enter = items.enter().append('button')
+ .attr('class', 'feature-list-item')
+ .on('click', function(entity) {
+ context.enter(iD.modes.Select(context, [entity.id]));
+ });
+
+ // Enter
+
+ var label = enter.append('div')
+ .attr('class', 'label');
+
+ label.append('span')
+ .attr('class', 'icon icon-pre-text');
+
+ label.append('span')
+ .attr('class', 'entity-type');
+
+ label.append('span')
+ .attr('class', 'entity-name');
+
+ // Update
+
+ items.selectAll('.icon')
+ .attr('class', function(entity) { return context.geometry(entity.id) + ' icon icon-pre-text'; });
+
+ items.selectAll('.entity-type')
+ .text(function(entity) { return context.presets().match(entity, context.graph()).name(); });
+
+ items.selectAll('.entity-name')
+ .text(function(entity) { return iD.util.displayName(entity); });
+
+ // Exit
+
+ items.exit()
+ .remove();
+ }
+ }
+
+ return selectionList;
+
+};
iD.ui.Sidebar = function(context) {
var inspector = iD.ui.Inspector(context),
current;
.attr('class', 'fr')
.append('span')
.attr('class', 'icon close')
- .on('click', function() { event.cancel(success) });
+ .on('click', function() { event.cancel(success); });
header.append('h3')
.text(t('success.just_edited'));
var body = selection.append('div')
- .attr('class', 'body save-success');
+ .attr('class', 'body save-success fillL');
body.append('p')
.html(t('success.help_html'));
body
.append('img')
.attr('class', 'wiki-image')
- .attr('src', docs.image.thumb_url_prefix + "100" + docs.image.thumb_url_suffix)
+ .attr('src', docs.image.thumb_url_prefix + '100' + docs.image.thumb_url_suffix)
.on('load', function() { show(); })
.on('error', function() { d3.select(this).remove(); show(); });
} else {
var enter = button.enter().append('button')
.attr('tabindex', -1)
- .attr('class', 'tag-reference-button minor');
+ .attr('class', 'tag-reference-button');
enter.append('span')
.attr('class', 'icon inspect');
.call(keybinding);
};
};
-iD.ui.preset.access = function(field, context) {
+iD.ui.preset.access = function(field) {
var event = d3.dispatch('change'),
entity,
items;
.attr('class', 'col6 preset-input-access-wrap')
.append('input')
.attr('type', 'text')
- .attr('placeholder', field.placeholder())
.attr('class', 'preset-input-access')
.attr('id', function(d) { return 'preset-input-access-' + d; })
.each(function(d) {
access.options = function(type) {
var options = ['no', 'permissive', 'private', 'designated', 'destination'];
- if (type != 'access') {
+ if (type !== 'access') {
options.unshift('yes');
}
access.tags = function(tags) {
items.selectAll('.preset-input-access')
- .value(function(d) { return tags[d] || ''; });
+ .value(function(d) { return tags[d] || ''; })
+ .attr('placeholder', function(d) {
+ return d !== 'access' && tags.access ? tags.access : field.placeholder();
+ });
};
access.focus = function() {
entity;
function getStreets() {
-
var extent = entity.extent(context.graph()),
l = extent.center(),
box = iD.geo.Extent(l).padByMeters(200);
}
}
+ function getCities() {
+ var extent = entity.extent(context.graph()),
+ l = extent.center(),
+ box = iD.geo.Extent(l).padByMeters(200);
+
+ return context.intersects(box)
+ .filter(isAddressable)
+ .map(function(d) {
+ return {
+ title: d.tags['addr:city'] || d.tags.name,
+ value: d.tags['addr:city'] || d.tags.name,
+ dist: iD.geo.sphericalDistance(d.extent(context.graph()).center(), l)
+ };
+ }).sort(function(a, b) {
+ return a.dist - b.dist;
+ });
+
+ function isAddressable(d) {
+ if (d.tags.name &&
+ (d.tags.admin_level === '8' || d.tags.border_type === 'city'))
+ return true;
+
+ if (d.tags.place && d.tags.name && (
+ d.tags.place === 'city' ||
+ d.tags.place === 'town' ||
+ d.tags.place === 'village'))
+ return true;
+
+ if (d.tags['addr:city']) return true;
+
+ return false;
+ }
+ }
+
+ function getPostCodes() {
+ var extent = entity.extent(context.graph()),
+ l = extent.center(),
+ box = iD.geo.Extent(l).padByMeters(200);
+
+ return context.intersects(box)
+ .filter(isAddressable)
+ .map(function(d) {
+ return {
+ title: d.tags['addr:postcode'],
+ value: d.tags['addr:postcode'],
+ dist: iD.geo.sphericalDistance(d.extent(context.graph()).center(), l)
+ };
+ }).sort(function(a, b) {
+ return a.dist - b.dist;
+ });
+
+ function isAddressable(d) {
+ return d.tags['addr:postcode'];
+ }
+ }
+
function address(selection) {
var wrap = selection.selectAll('.preset-input-wrap')
.data([0]);
.fetcher(function(value, callback) {
callback(getStreets());
}));
+
+ city
+ .call(d3.combobox()
+ .fetcher(function(value, callback) {
+ callback(getCities());
+ }));
+
+ postcode
+ .call(d3.combobox()
+ .fetcher(function(value, callback) {
+ callback(getPostCodes());
+ }));
}
function change() {
value = tags[field.key];
box.property('indeterminate', !value);
box.property('checked', value === 'yes');
- text.text(value || t('inspector.unknown'));
+ text.text(value ? t('inspector.check.' + value, {default: value}) : t('inspector.unknown'));
label.classed('set', !!value);
};
return d3.rebind(check, event, 'on');
};
-iD.ui.preset.combo = function(field) {
+iD.ui.preset.combo =
+iD.ui.preset.typeCombo = function(field) {
var event = d3.dispatch('change'),
input;
}
function change() {
+ var value = input.value().replace(' ', '_');
+ if (field.type === 'typeCombo' && !value) value = 'yes';
+
var t = {};
- t[field.key] = input.value().replace(' ', '_') || undefined;
+ t[field.key] = value || undefined;
event.change(t);
}
combo.tags = function(tags) {
- input.value(tags[field.key] || '');
+ var value = tags[field.key] || '';
+ if (field.type === 'typeCombo' && value === 'yes') value = '';
+ input.value(value);
};
combo.focus = function() {
.on('blur', change)
.on('change', change);
- if (field.type == 'number') {
+ if (field.type === 'number') {
input.attr('type', 'text');
var spinControl = selection.selectAll('.spin-control')
return d3.rebind(i, event, 'on');
};
-iD.ui.preset.localized = function(field, context) {
+iD.ui.preset.localized = function(field) {
var event = d3.dispatch('change'),
wikipedia = iD.wikipedia(),
function key(lang) { return field.key + ':' + lang; }
function changeLang(d) {
- var value = d3.select(this).value(),
+ var lang = d3.select(this).value(),
t = {},
language = _.find(iD.data.wikipedia, function(d) {
- return d[0].toLowerCase() === value.toLowerCase() ||
- d[1].toLowerCase() === value.toLowerCase();
+ return d[0].toLowerCase() === lang.toLowerCase() ||
+ d[1].toLowerCase() === lang.toLowerCase();
});
- if (language) value = language[2];
+ if (language) lang = language[2];
- if (d.lang) {
- t[key(d.lang)] = '';
+ if (d.lang && d.lang !== lang) {
+ t[key(d.lang)] = undefined;
}
- if (d.value) {
- t[key(value)] = d.value;
- } else if (wikiTitles && wikiTitles[d.lang]) {
- t[key(value)] = wikiTitles[d.lang];
+ var value = d3.select(this.parentNode)
+ .selectAll('.localized-value')
+ .value();
+
+ if (lang && value) {
+ t[key(lang)] = value;
+ } else if (lang && wikiTitles && wikiTitles[d.lang]) {
+ t[key(lang)] = wikiTitles[d.lang];
}
+ d.lang = lang;
event.change(t);
-
- d.lang = value;
}
function changeValue(d) {
+ if (!d.lang) return;
var t = {};
- t[key(d.lang)] = d3.select(this).value() || '';
+ t[key(d.lang)] = d3.select(this).value() || undefined;
event.change(t);
-
}
function fetcher(value, cb) {
var innerWrap = wraps.enter()
.insert('div', ':first-child');
- innerWrap.attr('class', 'entry')
- .each(function(d) {
+ innerWrap.attr('class', 'entry')
+ .each(function() {
var wrap = d3.select(this);
var langcombo = d3.combobox().fetcher(fetcher);
- wrap.append('label')
+ var label = wrap.append('label')
.attr('class','form-label')
.text(t('translate.localized_translation_label'))
.attr('for','localized-lang');
+ label.append('button')
+ .attr('class', 'minor remove')
+ .on('click', function(d){
+ d3.event.preventDefault();
+ var t = {};
+ t[key(d.lang)] = undefined;
+ event.change(t);
+ d3.select(this.parentNode.parentNode)
+ .style('top','0')
+ .style('max-height','240px')
+ .transition()
+ .style('opacity', '0')
+ .style('max-height','0px')
+ .remove();
+ })
+ .append('span').attr('class', 'icon delete');
+
wrap.append('input')
.attr('class', 'localized-lang')
.attr('type', 'text')
.attr('type', 'text')
.attr('placeholder', t('translate.localized_translation_name'))
.attr('class', 'localized-value');
-
- wrap.append('button')
- .attr('class', 'minor button-input-action remove')
- .on('click', function(d) {
- d3.event.preventDefault();
- var t = {};
- t[key(d.lang)] = undefined;
- event.change(t);
- d3.select(this.parentNode)
- .style('top','0')
- .style('max-height','240px')
- .transition()
- .style('opacity', '0')
- .style('max-height','0px')
- .remove();
- })
- .append('span').attr('class', 'icon delete');
-
});
- innerWrap.transition()
- .style('margin-top','0px')
+ innerWrap
+ .style('margin-top', '0px')
.style('max-height', '0px')
- .style('padding', '0px')
.style('opacity', '0')
- .style('border-width', '0px')
.transition()
.duration(200)
- .style('margin-top','10px')
- .style('border-width', '1px')
- .style('padding', '10px')
+ .style('margin-top', '10px')
.style('max-height', '240px')
.style('opacity', '1')
- .each('end', function(d) {
- d3.select(this).style('max-height', '');
- d3.select(this).style('overflow', 'visible');
- });;
+ .each('end', function() {
+ d3.select(this)
+ .style('max-height', '')
+ .style('overflow', 'visible');
+ });
wraps.exit()
.transition()
.style('top','-10px')
.remove();
- selection.selectAll('.entry').select('.localized-lang').value(function(d) {
- var lang = _.find(iD.data.wikipedia, function(lang) {
- return lang[2] === d.lang;
+ var entry = selection.selectAll('.entry');
+
+ entry.select('.localized-lang')
+ .value(function(d) {
+ var lang = _.find(iD.data.wikipedia, function(lang) { return lang[2] === d.lang; });
+ return lang ? lang[1] : d.lang;
});
- return lang ? lang[1] : d.lang;
- });
- selection.selectAll('.entry').select('.localized-value').value(function(d) {
- return d.value;
- });
+ entry.select('.localized-value')
+ .value(function(d) { return d.value; });
}
i.tags = function(tags) {
};
i.focus = function() {
- title.node().focus();
+ input.node().focus();
};
return d3.rebind(i, event, 'on');
iD.ui.preset.radio = function(field) {
var event = d3.dispatch('change'),
- labels, radios;
+ labels, radios, placeholder;
function radio(selection) {
selection.classed('preset-radio', true);
var buttonWrap = wrap.enter().append('div')
.attr('class', 'preset-input-wrap toggle-list');
+ buttonWrap.append('span')
+ .attr('class', 'placeholder');
+
+ placeholder = selection.selectAll('.placeholder');
+
labels = wrap.selectAll('label')
.data(field.options || field.keys);
radios = labels.selectAll('input')
.on('change', change);
-
- buttonWrap.append('span')
- .attr('class', 'placeholder')
- .text(field.placeholder());
-
- var remove = wrap.selectAll('label.remove')
- .data([0]);
-
- var removeButton = remove.enter().append('label')
- .attr('class', 'remove');
-
- removeButton.append('span')
- .attr('class', 'icon remove');
-
- removeButton.append('span')
- .text(t('inspector.remove'));
-
- remove
- .on('click', function() {
- d3.event.preventDefault();
- radios.property('checked', false);
- change();
- });
}
function change() {
labels.classed('active', checked);
radios.property('checked', checked);
+ var selection = radios.filter(function() { return this.checked; });
+ if (selection.empty()) {
+ placeholder.text(t('inspector.none'));
+ } else {
+ placeholder.text(selection.attr('value'));
+ }
};
radio.focus = function() {
var event = d3.dispatch('change'),
wikipedia = iD.wikipedia(),
- language = iD.data.wikipedia[0],
link, entity, lang, title;
function i(selection) {
if (!value) value = context.entity(entity.id).tags.name || '';
var searchfn = value.length > 7 ? wikipedia.search : wikipedia.suggestions;
- searchfn(language && language[2], value, function(query, data) {
+ searchfn(language()[2], value, function(query, data) {
cb(data.map(function(d) {
return { value: d };
}));
lang.enter().append('input')
.attr('type', 'text')
- .attr('class', 'wiki-lang');
+ .attr('class', 'wiki-lang')
+ .value('English');
lang
.on('blur', changeLang)
.attr('class', 'icon out-link');
}
- function changeLang() {
+ function language() {
var value = lang.value().toLowerCase();
- language = _.find(iD.data.wikipedia, function(d) {
+ return _.find(iD.data.wikipedia, function(d) {
return d[0].toLowerCase() === value ||
d[1].toLowerCase() === value ||
d[2].toLowerCase() === value;
}) || iD.data.wikipedia[0];
+ }
- if (value !== language[0]) {
- lang.value(language[1]);
- }
-
+ function changeLang() {
+ lang.value(language()[1]);
change();
}
function change() {
- var t = {};
+ var value = title.value(),
+ m = value.match(/http:\/\/([a-z]+)\.wikipedia\.org\/wiki\/(.+)/),
+ l = m && _.find(iD.data.wikipedia, function(d) { return m[1] === d[2]; });
- var value = title.value();
-
- var m = value.match('http://([a-z]+)\\.wikipedia.org/wiki/(.*)'),
- newlanguage = m && m[1] && m[2] && _.find(iD.data.wikipedia, function(d) {
- return m[1] === d[2];
- });
-
- if (newlanguage) {
+ if (l) {
// Normalize title http://www.mediawiki.org/wiki/API:Query#Title_normalization
value = m[2].replace(/_/g, ' ');
value = value.slice(0, 1).toUpperCase() + value.slice(1);
- language = newlanguage;
- lang.value(language[0]);
+ lang.value(l[1]);
+ title.value(value);
}
- t[field.key] = value ? language[2] + ':' + value : undefined;
+ var t = {};
+ t[field.key] = value ? language()[2] + ':' + value : undefined;
event.change(t);
- link.attr('href', 'http://' + language[2] + '.wikipedia.org/wiki/' + (value || ''));
}
i.tags = function(tags) {
- var m = tags[field.key] ? tags[field.key].match(/([^:]+):(.+)/) : null;
-
- var language = m && m[1] && m[2] && _.find(iD.data.wikipedia, function(d) {
- return m[1] === d[2];
- });
+ var value = tags[field.key] || '',
+ m = value.match(/([^:]+):(.+)/),
+ l = m && _.find(iD.data.wikipedia, function(d) { return m[1] === d[2]; });
// value in correct format
- if (language) {
- lang.value(language[1]);
+ if (l) {
+ lang.value(l[1]);
title.value(m[2]);
link.attr('href', 'http://' + m[1] + '.wikipedia.org/wiki/' + m[2]);
// unrecognized value format
} else {
- lang.value('English');
- title.value(tags[field.key] || '');
- language = iD.data.wikipedia[0];
- link.attr('href', 'http://en.wikipedia.org/wiki/Special:Search?search=' + tags[field.key]);
+ title.value(value);
+ link.attr('href', 'http://en.wikipedia.org/wiki/Special:Search?search=' + value);
}
};
title: 'intro.lines.title'
};
- function one(target, e, f) {
- d3.selection.prototype.one.call(target, e, f);
- }
-
function timeout(f, t) {
timeouts.push(window.setTimeout(f, t));
}
var centroid = [-85.62830, 41.95699];
var midpoint = [-85.62975395449628, 41.95787501510204];
- var start = [-85.6297754121684, 41.9583158176903];
+ var start = [-85.6297754121684, 41.95805253325314];
var intersection = [-85.62974496187628, 41.95742515554585];
context.map().centerZoom(start, 18);
- reveal('button.add-line', t('intro.lines.add'), {tooltipClass: 'intro-areas-add'});
+ reveal('button.add-line', t('intro.lines.add'), {tooltipClass: 'intro-lines-add'});
context.on('enter.intro', addLine);
// ended line before creating intersection
function retry(mode) {
if (mode.id !== 'select') return;
- var pointBox = iD.ui.intro.pad(intersection, 30);
+ var pointBox = iD.ui.intro.pad(intersection, 30, context);
reveal(pointBox, t('intro.lines.restart'));
timeout(function() {
context.replace(iD.actions.DeleteMultiple(mode.selectedIDs()));
context.on('enter.intro', null);
d3.select('#curtain').style('pointer-events', 'all');
+ presetCategory();
+ }
+
+ function presetCategory() {
timeout(function() {
d3.select('#curtain').style('pointer-events', 'none');
var road = d3.select('.preset-category-road .preset-list-button');
timeout(function() {
var grid = d3.select('.subgrid');
reveal(grid.node(), t('intro.lines.residential'));
+ grid.selectAll(':not(.preset-highway-residential) .preset-list-button')
+ .one('click.intro', retryPreset);
grid.selectAll('.preset-highway-residential .preset-list-button')
.one('click.intro', roadDetails);
- }, 200);
+ }, 500);
+ }
+
+ // selected wrong road type
+ function retryPreset() {
+ timeout(function() {
+ var preset = d3.select('.entity-editor-pane .preset-list-button');
+ reveal(preset.node(), t('intro.lines.wrong_preset'));
+ preset.one('click.intro', presetCategory);
+ }, 500);
}
function roadDetails() {
step.enter = function() {
- var rect = context.surface().node().getBoundingClientRect(),
+ var rect = context.surfaceRect(),
map = {
left: rect.left + 10,
top: rect.top + 70,
return Object.keys(preset.tags).length === 0;
};
- preset.reference = function() {
- var reference = {key: Object.keys(preset.tags)[0]};
+ preset.reference = function(geometry) {
+ var key = Object.keys(preset.tags)[0],
+ value = preset.tags[key];
- if (preset.tags[reference.key] !== '*') {
- reference.value = preset.tags[reference.key];
+ if (geometry === 'relation' && key === 'type') {
+ return { rtype: value };
+ } else if (value === '*') {
+ return { key: key };
+ } else {
+ return { key: key, value: value };
}
-
- return reference;
};
var removeTags = preset.removeTags || preset.tags;
return tags;
};
- var applyTags = preset.applyTags || preset.tags;
+ var applyTags = preset.addTags || preset.tags;
preset.applyTags = function(tags, geometry) {
tags = _.clone(tags);
return preset;
};
iD.validate = function(changes, graph) {
- var warnings = [], change;
+ var warnings = [];
// https://github.com/openstreetmap/josm/blob/mirror/src/org/
// openstreetmap/josm/data/validation/tests/UnclosedWays.java#L80
}
for (var i = 0; i < changes.created.length; i++) {
- change = changes.created[i];
+ var change = changes.created[i],
+ geometry = change.geometry(graph);
- if (change.geometry(graph) === 'point' && _.isEmpty(change.tags)) {
+ if ((geometry === 'point' || geometry === 'line' || geometry === 'area') && !change.isUsed(graph)) {
warnings.push({
- message: t('validations.untagged_point'),
+ message: t('validations.untagged_' + geometry),
entity: change
});
}
- if (change.geometry(graph) === 'line' && _.isEmpty(change.tags) &&
- graph.parentRelations(change).length === 0) {
- warnings.push({ message: t('validations.untagged_line'), entity: change });
- }
-
var deprecatedTags = change.deprecatedTags();
if (!_.isEmpty(deprecatedTags)) {
warnings.push({
}), entity: change });
}
- if (change.geometry(graph) === 'area' && _.isEmpty(change.tags)) {
- warnings.push({ message: t('validations.untagged_area'), entity: change });
- }
-
- if (change.geometry(graph) === 'line' && tagSuggestsArea(change)) {
+ if (geometry === 'line' && tagSuggestsArea(change)) {
warnings.push({
message: t('validations.tag_suggests_area', {tag: tagSuggestsArea(change)}),
entity: change
}
}
- return warnings.length ? [warnings] : [];
+ return warnings;
};
+/* jshint ignore:start */
})();
window.locale = { _current: 'en' };
],
"discarded": [
"created_by",
+ "odbl",
+ "odbl:note",
"tiger:upload_uuid",
"tiger:tlid",
"tiger:source",
"geobase:datasetName",
"geobase:uuid",
"sub_sea:type",
- "odbl",
- "odbl:note",
+ "KSJ2:ADS",
+ "KSJ2:ARE",
+ "KSJ2:AdminArea",
+ "KSJ2:COP_label",
+ "KSJ2:DFD",
+ "KSJ2:INT",
+ "KSJ2:INT_label",
+ "KSJ2:LOC",
+ "KSJ2:LPN",
+ "KSJ2:OPC",
+ "KSJ2:PubFacAdmin",
+ "KSJ2:RAC",
+ "KSJ2:RAC_label",
+ "KSJ2:RIC",
+ "KSJ2:RIN",
+ "KSJ2:WSC",
+ "KSJ2:coordinate",
+ "KSJ2:curve_id",
+ "KSJ2:curve_type",
+ "KSJ2:filename",
+ "KSJ2:lake_id",
+ "KSJ2:lat",
+ "KSJ2:long",
+ "KSJ2:river_id",
"yh:LINE_NAME",
"yh:LINE_NUM",
"yh:STRUCTURE",
],
"imagery": [
{
- "name": "Bing aerial imagery",
- "template": "http://ecn.t{t}.tiles.virtualearth.net/tiles/a{u}.jpeg?g=587&mkt=en-gb&n=z",
- "description": "Satellite imagery.",
- "scaleExtent": [
- 0,
- 20
- ],
- "subdomains": [
- "0",
- "1",
- "2",
- "3"
- ],
- "default": true,
- "sourcetag": "Bing",
- "logo": "bing_maps.png",
- "logo_url": "http://www.bing.com/maps",
- "terms_url": "http://opengeodata.org/microsoft-imagery-details"
+ "name": "7th Series (OS7)",
+ "type": "tms",
+ "template": "http://ooc.openstreetmap.org/os7/{zoom}/{x}/{y}.jpg",
+ "polygon": [
+ [
+ [
+ -9,
+ 49.8
+ ],
+ [
+ -9,
+ 61.1
+ ],
+ [
+ 1.9,
+ 61.1
+ ],
+ [
+ 1.9,
+ 49.8
+ ],
+ [
+ -9,
+ 49.8
+ ]
+ ]
+ ]
},
{
- "name": "Locator Overlay",
- "template": "http://{t}.tiles.mapbox.com/v3/openstreetmap.map-btyhiati/{z}/{x}/{y}.png",
- "description": "Shows major features to help orient you.",
- "overlay": true,
- "default": true,
- "scaleExtent": [
- 0,
- 16
- ],
- "subdomains": [
- "a",
- "b",
- "c"
+ "name": "AGRI black-and-white 2.5m",
+ "type": "tms",
+ "template": "http://agri.openstreetmap.org/{zoom}/{x}/{y}.png",
+ "polygon": [
+ [
+ [
+ 112.28778,
+ -28.784589
+ ],
+ [
+ 112.71488,
+ -31.13894
+ ],
+ [
+ 114.11263,
+ -34.178287
+ ],
+ [
+ 113.60788,
+ -37.39012
+ ],
+ [
+ 117.17992,
+ -37.451794
+ ],
+ [
+ 119.31538,
+ -37.42096
+ ],
+ [
+ 121.72262,
+ -36.708394
+ ],
+ [
+ 123.81925,
+ -35.76893
+ ],
+ [
+ 125.9547,
+ -34.3066
+ ],
+ [
+ 127.97368,
+ -33.727398
+ ],
+ [
+ 130.07031,
+ -33.24166
+ ],
+ [
+ 130.10913,
+ -33.888704
+ ],
+ [
+ 131.00214,
+ -34.049705
+ ],
+ [
+ 131.0798,
+ -34.72257
+ ],
+ [
+ 132.28342,
+ -35.39
+ ],
+ [
+ 134.18591,
+ -35.61126
+ ],
+ [
+ 133.8753,
+ -37.1119
+ ],
+ [
+ 134.8459,
+ -37.6365
+ ],
+ [
+ 139.7769,
+ -37.82075
+ ],
+ [
+ 139.93223,
+ -39.4283
+ ],
+ [
+ 141.6017,
+ -39.8767
+ ],
+ [
+ 142.3783,
+ -39.368294
+ ],
+ [
+ 142.3783,
+ -40.64702
+ ],
+ [
+ 142.49478,
+ -42.074874
+ ],
+ [
+ 144.009,
+ -44.060127
+ ],
+ [
+ 147.23161,
+ -44.03222
+ ],
+ [
+ 149.05645,
+ -42.534313
+ ],
+ [
+ 149.52237,
+ -40.99959
+ ],
+ [
+ 149.9494,
+ -40.852921
+ ],
+ [
+ 150.8036,
+ -38.09627
+ ],
+ [
+ 151.81313,
+ -38.12682
+ ],
+ [
+ 156.20052,
+ -22.667706
+ ],
+ [
+ 156.20052,
+ -20.10109
+ ],
+ [
+ 156.62761,
+ -17.417627
+ ],
+ [
+ 155.26869,
+ -17.19521
+ ],
+ [
+ 154.14272,
+ -19.51662
+ ],
+ [
+ 153.5215,
+ -18.34139
+ ],
+ [
+ 153.05558,
+ -16.5636
+ ],
+ [
+ 152.78379,
+ -15.256768
+ ],
+ [
+ 152.27905,
+ -13.4135
+ ],
+ [
+ 151.3472,
+ -12.391767
+ ],
+ [
+ 149.48354,
+ -12.05024
+ ],
+ [
+ 146.9598,
+ -9.992408
+ ],
+ [
+ 135.9719,
+ -9.992408
+ ],
+ [
+ 130.3032,
+ -10.33636
+ ],
+ [
+ 128.09016,
+ -12.164136
+ ],
+ [
+ 125.91588,
+ -12.315912
+ ],
+ [
+ 124.3239,
+ -11.860326
+ ],
+ [
+ 122.03323,
+ -11.974295
+ ],
+ [
+ 118.26706,
+ -16.9353
+ ],
+ [
+ 115.93747,
+ -19.11357
+ ],
+ [
+ 114.0738,
+ -21.11863
+ ],
+ [
+ 113.49141,
+ -22.596033
+ ],
+ [
+ 112.28778,
+ -28.784589
+ ]
+ ]
],
- "terms_url": "http://mapbox.com/tos/"
+ "terms_text": "AGRI"
},
{
- "name": "MapBox Satellite",
- "template": "http://{t}.tiles.mapbox.com/v3/openstreetmap.map-4wvf9l0l/{z}/{x}/{y}.png",
+ "name": "Bing aerial imagery",
+ "type": "bing",
"description": "Satellite and aerial imagery.",
+ "template": "http://www.bing.com/maps/",
"scaleExtent": [
0,
- 16
- ],
- "subdomains": [
- "a",
- "b",
- "c"
- ],
- "terms_url": "http://mapbox.com/tos/"
- },
- {
- "name": "OpenStreetMap",
- "template": "http://{t}.tile.openstreetmap.org/{z}/{x}/{y}.png",
- "description": "The default OpenStreetMap layer.",
- "scaleExtent": [
- 0,
- 18
+ 22
],
- "subdomains": [
- "a",
- "b",
- "c"
- ]
+ "id": "Bing",
+ "default": true
},
{
- "name": "TIGER 2012 Roads Overlay",
- "template": "http://{t}.tile.openstreetmap.us/tiger2012_roads_expanded/{z}/{x}/{y}.png",
- "sourcetag": "TIGER 2012",
- "overlay": true,
+ "name": "British Columbia Mosaic",
+ "type": "tms",
+ "template": "http://{switch:a,b,c,d}.imagery.paulnorman.ca/tiles/bc_mosaic/{zoom}/{x}/{y}.png",
"scaleExtent": [
- 16,
- 19
- ],
- "subdomains": [
- "a",
- "b",
- "c"
+ 9,
+ 20
],
- "extents": [
+ "polygon": [
[
[
- -124.81,
- 24.055
+ -123.3176032,
+ 49.3272567
+ ],
+ [
+ -123.4405258,
+ 49.3268222
+ ],
+ [
+ -123.440717,
+ 49.3384429
+ ],
+ [
+ -123.4398375,
+ 49.3430357
+ ],
+ [
+ -123.4401258,
+ 49.3435398
+ ],
+ [
+ -123.4401106,
+ 49.3439946
+ ],
+ [
+ -123.4406265,
+ 49.3444493
+ ],
+ [
+ -123.4404747,
+ 49.3455762
+ ],
+ [
+ -123.4397768,
+ 49.3460606
+ ],
+ [
+ -123.4389726,
+ 49.3461298
+ ],
+ [
+ -123.4372904,
+ 49.3567236
+ ],
+ [
+ -123.4374774,
+ 49.3710843
+ ],
+ [
+ -123.4335292,
+ 49.3709446
+ ],
+ [
+ -123.4330357,
+ 49.373725
+ ],
+ [
+ -123.4332717,
+ 49.3751221
+ ],
+ [
+ -123.4322847,
+ 49.3761001
+ ],
+ [
+ -123.4317482,
+ 49.3791736
+ ],
+ [
+ -123.4314264,
+ 49.3795927
+ ],
+ [
+ -123.4307826,
+ 49.3823866
+ ],
+ [
+ -123.4313405,
+ 49.3827358
+ ],
+ [
+ -123.4312118,
+ 49.3838533
+ ],
+ [
+ -123.4300415,
+ 49.3845883
+ ],
+ [
+ -123.4189858,
+ 49.3847087
+ ],
+ [
+ -123.4192235,
+ 49.4135198
+ ],
+ [
+ -123.3972532,
+ 49.4135691
+ ],
+ [
+ -123.3972758,
+ 49.4243473
+ ],
+ [
+ -123.4006929,
+ 49.4243314
+ ],
+ [
+ -123.4007741,
+ 49.5703491
+ ],
+ [
+ -123.4000812,
+ 49.570345
+ ],
+ [
+ -123.4010761,
+ 49.5933838
+ ],
+ [
+ -123.3760399,
+ 49.5932848
+ ],
+ [
+ -123.3769811,
+ 49.6756063
+ ],
+ [
+ -123.3507288,
+ 49.6756396
+ ],
+ [
+ -123.3507969,
+ 49.7086751
+ ],
+ [
+ -123.332887,
+ 49.708722
+ ],
+ [
+ -123.3327888,
+ 49.7256288
+ ],
+ [
+ -123.3007111,
+ 49.7255625
+ ],
+ [
+ -123.3009164,
+ 49.7375384
+ ],
+ [
+ -123.2885986,
+ 49.737638
+ ],
+ [
+ -123.2887823,
+ 49.8249207
+ ],
+ [
+ -123.2997955,
+ 49.8249207
+ ],
+ [
+ -123.3011721,
+ 49.8497814
+ ],
+ [
+ -123.3218218,
+ 49.850669
+ ],
+ [
+ -123.3273284,
+ 49.8577696
+ ],
+ [
+ -123.3276726,
+ 49.9758852
+ ],
+ [
+ -123.3008279,
+ 49.9752212
+ ],
+ [
+ -123.3007204,
+ 50.0997002
+ ],
+ [
+ -123.2501716,
+ 50.100735
+ ],
+ [
+ -123.25091,
+ 50.2754901
+ ],
+ [
+ -123.0224338,
+ 50.2755598
+ ],
+ [
+ -123.0224879,
+ 50.3254853
+ ],
+ [
+ -123.0009318,
+ 50.3254689
+ ],
+ [
+ -123.0007778,
+ 50.3423899
+ ],
+ [
+ -122.9775023,
+ 50.3423408
+ ],
+ [
+ -122.9774766,
+ 50.3504306
+ ],
+ [
+ -122.9508137,
+ 50.3504961
+ ],
+ [
+ -122.950795,
+ 50.3711984
+ ],
+ [
+ -122.9325221,
+ 50.3711521
+ ],
+ [
+ -122.9321048,
+ 50.399793
+ ],
+ [
+ -122.8874234,
+ 50.3999748
+ ],
+ [
+ -122.8873385,
+ 50.4256108
+ ],
+ [
+ -122.6620152,
+ 50.4256959
+ ],
+ [
+ -122.6623083,
+ 50.3994506
+ ],
+ [
+ -122.5990316,
+ 50.3992413
+ ],
+ [
+ -122.5988274,
+ 50.3755206
+ ],
+ [
+ -122.5724832,
+ 50.3753706
+ ],
+ [
+ -122.5735621,
+ 50.2493891
+ ],
+ [
+ -122.5990415,
+ 50.2494643
+ ],
+ [
+ -122.5991504,
+ 50.2265663
+ ],
+ [
+ -122.6185016,
+ 50.2266359
+ ],
+ [
+ -122.6185741,
+ 50.2244081
+ ],
+ [
+ -122.6490609,
+ 50.2245126
+ ],
+ [
+ -122.6492181,
+ 50.1993528
+ ],
+ [
+ -122.7308575,
+ 50.1993758
+ ],
+ [
+ -122.7311583,
+ 50.1244287
+ ],
+ [
+ -122.7490352,
+ 50.1245109
+ ],
+ [
+ -122.7490541,
+ 50.0903032
+ ],
+ [
+ -122.7687806,
+ 50.0903435
+ ],
+ [
+ -122.7689801,
+ 49.9494546
+ ],
+ [
+ -122.999047,
+ 49.9494706
+ ],
+ [
+ -122.9991199,
+ 49.8754553
+ ],
+ [
+ -122.9775894,
+ 49.8754553
+ ],
+ [
+ -122.9778145,
+ 49.6995098
+ ],
+ [
+ -122.9992362,
+ 49.6994781
+ ],
+ [
+ -122.9992524,
+ 49.6516526
+ ],
+ [
+ -123.0221525,
+ 49.6516526
+ ],
+ [
+ -123.0221162,
+ 49.5995096
+ ],
+ [
+ -123.0491898,
+ 49.5994625
+ ],
+ [
+ -123.0491898,
+ 49.5940523
+ ],
+ [
+ -123.0664647,
+ 49.5940405
+ ],
+ [
+ -123.0663594,
+ 49.5451868
+ ],
+ [
+ -123.0699906,
+ 49.5451202
+ ],
+ [
+ -123.0699008,
+ 49.5413153
+ ],
+ [
+ -123.0706835,
+ 49.5392837
+ ],
+ [
+ -123.0708888,
+ 49.5379931
+ ],
+ [
+ -123.0711454,
+ 49.5368773
+ ],
+ [
+ -123.0711069,
+ 49.5358115
+ ],
+ [
+ -123.0713764,
+ 49.532822
+ ],
+ [
+ -123.0716458,
+ 49.5321141
+ ],
+ [
+ -123.07171,
+ 49.5313896
+ ],
+ [
+ -123.0720308,
+ 49.5304153
+ ],
+ [
+ -123.0739554,
+ 49.5303486
+ ],
+ [
+ -123.0748023,
+ 49.5294992
+ ],
+ [
+ -123.0748151,
+ 49.5288079
+ ],
+ [
+ -123.0743403,
+ 49.5280584
+ ],
+ [
+ -123.073532,
+ 49.5274588
+ ],
+ [
+ -123.0733652,
+ 49.5270423
+ ],
+ [
+ -123.0732882,
+ 49.5255932
+ ],
+ [
+ -123.0737116,
+ 49.5249602
+ ],
+ [
+ -123.0736218,
+ 49.5244938
+ ],
+ [
+ -123.0992583,
+ 49.5244854
+ ],
+ [
+ -123.0991649,
+ 49.4754502
+ ],
+ [
+ -123.071052,
+ 49.4755252
+ ],
+ [
+ -123.071088,
+ 49.4663034
+ ],
+ [
+ -123.0739204,
+ 49.4663054
+ ],
+ [
+ -123.07422,
+ 49.4505028
+ ],
+ [
+ -123.0746319,
+ 49.4500858
+ ],
+ [
+ -123.074651,
+ 49.449329
+ ],
+ [
+ -123.0745999,
+ 49.449018
+ ],
+ [
+ -123.0744619,
+ 49.4486927
+ ],
+ [
+ -123.0743336,
+ 49.4479899
+ ],
+ [
+ -123.0742427,
+ 49.4477688
+ ],
+ [
+ -123.0743061,
+ 49.4447473
+ ],
+ [
+ -123.0747103,
+ 49.4447556
+ ],
+ [
+ -123.0746384,
+ 49.4377306
+ ],
+ [
+ -122.9996506,
+ 49.4377363
+ ],
+ [
+ -122.9996506,
+ 49.4369214
+ ],
+ [
+ -122.8606163,
+ 49.4415314
+ ],
+ [
+ -122.8102616,
+ 49.4423972
+ ],
+ [
+ -122.8098984,
+ 49.3766739
+ ],
+ [
+ -122.4036093,
+ 49.3766617
+ ],
+ [
+ -122.4036341,
+ 49.3771944
+ ],
+ [
+ -122.264739,
+ 49.3773028
+ ],
+ [
+ -122.263542,
+ 49.2360088
+ ],
+ [
+ -122.2155742,
+ 49.236139
+ ],
+ [
+ -122.0580956,
+ 49.235878
+ ],
+ [
+ -121.9538274,
+ 49.2966525
+ ],
+ [
+ -121.9400911,
+ 49.3045389
+ ],
+ [
+ -121.9235761,
+ 49.3142257
+ ],
+ [
+ -121.8990871,
+ 49.3225436
+ ],
+ [
+ -121.8883447,
+ 49.3259752
+ ],
+ [
+ -121.8552982,
+ 49.3363575
+ ],
+ [
+ -121.832697,
+ 49.3441519
+ ],
+ [
+ -121.7671336,
+ 49.3654361
+ ],
+ [
+ -121.6736683,
+ 49.3654589
+ ],
+ [
+ -121.6404153,
+ 49.3743775
+ ],
+ [
+ -121.5961976,
+ 49.3860493
+ ],
+ [
+ -121.5861178,
+ 49.3879193
+ ],
+ [
+ -121.5213684,
+ 49.3994649
+ ],
+ [
+ -121.5117375,
+ 49.4038378
+ ],
+ [
+ -121.4679302,
+ 49.4229024
+ ],
+ [
+ -121.4416803,
+ 49.4345607
+ ],
+ [
+ -121.422429,
+ 49.4345788
+ ],
+ [
+ -121.3462885,
+ 49.3932312
+ ],
+ [
+ -121.3480144,
+ 49.3412388
+ ],
+ [
+ -121.5135035,
+ 49.320577
+ ],
+ [
+ -121.6031683,
+ 49.2771727
+ ],
+ [
+ -121.6584065,
+ 49.1856125
+ ],
+ [
+ -121.679953,
+ 49.1654109
+ ],
+ [
+ -121.7815793,
+ 49.0702559
+ ],
+ [
+ -121.8076228,
+ 49.0622471
+ ],
+ [
+ -121.9393997,
+ 49.0636219
+ ],
+ [
+ -121.9725524,
+ 49.0424179
+ ],
+ [
+ -121.9921394,
+ 49.0332869
+ ],
+ [
+ -122.0035289,
+ 49.0273413
+ ],
+ [
+ -122.0178564,
+ 49.0241067
+ ],
+ [
+ -122.1108634,
+ 48.9992786
+ ],
+ [
+ -122.1493067,
+ 48.9995305
+ ],
+ [
+ -122.1492705,
+ 48.9991498
+ ],
+ [
+ -122.1991447,
+ 48.9996019
+ ],
+ [
+ -122.199181,
+ 48.9991974
+ ],
+ [
+ -122.234365,
+ 48.9994829
+ ],
+ [
+ -122.234365,
+ 49.000173
+ ],
+ [
+ -122.3994722,
+ 49.0012385
+ ],
+ [
+ -122.4521338,
+ 49.0016326
+ ],
+ [
+ -122.4521338,
+ 49.000883
+ ],
+ [
+ -122.4584089,
+ 49.0009306
+ ],
+ [
+ -122.4584814,
+ 48.9993124
+ ],
+ [
+ -122.4992458,
+ 48.9995022
+ ],
+ [
+ -122.4992458,
+ 48.9992906
+ ],
+ [
+ -122.5492618,
+ 48.9995107
+ ],
+ [
+ -122.5492564,
+ 48.9993206
+ ],
+ [
+ -122.6580785,
+ 48.9994212
+ ],
+ [
+ -122.6581061,
+ 48.9954007
+ ],
+ [
+ -122.7067604,
+ 48.9955344
+ ],
+ [
+ -122.7519761,
+ 48.9956392
+ ],
+ [
+ -122.7922063,
+ 48.9957204
+ ],
+ [
+ -122.7921907,
+ 48.9994331
+ ],
+ [
+ -123.0350417,
+ 48.9995724
+ ],
+ [
+ -123.0350437,
+ 49.0000958
+ ],
+ [
+ -123.0397091,
+ 49.0000536
+ ],
+ [
+ -123.0397444,
+ 49.0001812
+ ],
+ [
+ -123.0485506,
+ 49.0001348
+ ],
+ [
+ -123.0485329,
+ 49.0004712
+ ],
+ [
+ -123.0557122,
+ 49.000448
+ ],
+ [
+ -123.0556324,
+ 49.0002284
+ ],
+ [
+ -123.0641365,
+ 49.0001293
+ ],
+ [
+ -123.064158,
+ 48.9999421
+ ],
+ [
+ -123.074899,
+ 48.9996928
+ ],
+ [
+ -123.0750717,
+ 49.0006218
+ ],
+ [
+ -123.0899573,
+ 49.0003726
+ ],
+ [
+ -123.109229,
+ 48.9999421
+ ],
+ [
+ -123.1271193,
+ 49.0003046
+ ],
+ [
+ -123.1359953,
+ 48.9998741
+ ],
+ [
+ -123.1362716,
+ 49.0005765
+ ],
+ [
+ -123.153851,
+ 48.9998061
+ ],
+ [
+ -123.1540533,
+ 49.0006806
+ ],
+ [
+ -123.1710015,
+ 49.0001274
+ ],
+ [
+ -123.2000916,
+ 48.9996849
+ ],
+ [
+ -123.2003446,
+ 49.0497785
+ ],
+ [
+ -123.2108845,
+ 49.0497232
+ ],
+ [
+ -123.2112218,
+ 49.051989
+ ],
+ [
+ -123.2070479,
+ 49.0520857
+ ],
+ [
+ -123.2078911,
+ 49.0607884
+ ],
+ [
+ -123.2191688,
+ 49.0600978
+ ],
+ [
+ -123.218958,
+ 49.0612719
+ ],
+ [
+ -123.2251766,
+ 49.0612719
+ ],
+ [
+ -123.2253874,
+ 49.0622388
+ ],
+ [
+ -123.2297088,
+ 49.0620316
+ ],
+ [
+ -123.2298142,
+ 49.068592
+ ],
+ [
+ -123.2331869,
+ 49.0687301
+ ],
+ [
+ -123.2335031,
+ 49.0705945
+ ],
+ [
+ -123.249313,
+ 49.0702493
+ ],
+ [
+ -123.2497346,
+ 49.0802606
+ ],
+ [
+ -123.2751358,
+ 49.0803986
+ ],
+ [
+ -123.2751358,
+ 49.0870947
+ ],
+ [
+ -123.299483,
+ 49.0873018
+ ],
+ [
+ -123.29944,
+ 49.080253
+ ],
+ [
+ -123.3254508,
+ 49.0803944
+ ],
+ [
+ -123.3254353,
+ 49.1154662
+ ],
+ [
+ -123.2750966,
+ 49.1503341
+ ],
+ [
+ -123.275181,
+ 49.1873267
+ ],
+ [
+ -123.2788067,
+ 49.1871063
+ ],
+ [
+ -123.278891,
+ 49.1910741
+ ],
+ [
+ -123.3004767,
+ 49.1910741
+ ],
+ [
+ -123.3004186,
+ 49.2622933
+ ],
+ [
+ -123.3126185,
+ 49.2622416
+ ],
+ [
+ -123.3125958,
+ 49.2714948
+ ],
+ [
+ -123.3154251,
+ 49.2714727
+ ],
+ [
+ -123.3156628,
+ 49.2818906
+ ],
+ [
+ -123.3174735,
+ 49.2818832
+ ],
+ [
+ -123.3174961,
+ 49.2918488
+ ],
+ [
+ -123.3190353,
+ 49.2918488
+ ],
+ [
+ -123.3190692,
+ 49.298602
+ ],
+ [
+ -123.3202349,
+ 49.2985651
+ ],
+ [
+ -123.3202786,
+ 49.3019749
+ ],
+ [
+ -123.3222679,
+ 49.3019605
+ ],
+ [
+ -123.3223943,
+ 49.3118263
+ ],
+ [
+ -123.3254002,
+ 49.3118086
+ ],
+ [
+ -123.3253898,
+ 49.3201721
+ ],
+ [
+ -123.3192695,
+ 49.3201957
+ ],
+ [
+ -123.3192242,
+ 49.3246748
+ ],
+ [
+ -123.3179437,
+ 49.3246596
+ ],
+ [
+ -123.3179861,
+ 49.3254065
+ ]
+ ]
+ ],
+ "terms_url": "http://imagery.paulnorman.ca/tiles/about.html",
+ "terms_text": "Copyright Province of British Columbia, City of Surrey"
+ },
+ {
+ "name": "Cambodia, Laos, Thailand, Vietnam bilingual",
+ "type": "tms",
+ "template": "http://{switch:a,b,c,d}.tile.osm-tools.org/osm_then/{zoom}/{x}/{y}.png",
+ "scaleExtent": [
+ 0,
+ 19
+ ],
+ "polygon": [
+ [
+ [
+ 97.3,
+ 5.6
+ ],
+ [
+ 97.3,
+ 23.4
+ ],
+ [
+ 109.6,
+ 23.4
+ ],
+ [
+ 109.6,
+ 5.6
+ ],
+ [
+ 97.3,
+ 5.6
+ ]
+ ]
+ ],
+ "terms_url": "http://www.osm-tools.org/",
+ "terms_text": "© osm-tools.org & OpenStreetMap contributors, CC-BY-SA"
+ },
+ {
+ "name": "Freemap.sk Car",
+ "type": "tms",
+ "template": "http://t{switch:1,2,3,4}.freemap.sk/A/{zoom}/{x}/{y}.jpeg",
+ "scaleExtent": [
+ 8,
+ 16
+ ],
+ "polygon": [
+ [
+ [
+ 19.83682,
+ 49.25529
+ ],
+ [
+ 19.80075,
+ 49.42385
+ ],
+ [
+ 19.60437,
+ 49.48058
+ ],
+ [
+ 19.49179,
+ 49.63961
+ ],
+ [
+ 19.21831,
+ 49.52604
+ ],
+ [
+ 19.16778,
+ 49.42521
+ ],
+ [
+ 19.00308,
+ 49.42236
+ ],
+ [
+ 18.97611,
+ 49.5308
+ ],
+ [
+ 18.54685,
+ 49.51425
+ ],
+ [
+ 18.31432,
+ 49.33818
+ ],
+ [
+ 18.15913,
+ 49.2961
+ ],
+ [
+ 18.05564,
+ 49.11134
+ ],
+ [
+ 17.56396,
+ 48.84938
+ ],
+ [
+ 17.17929,
+ 48.88816
+ ],
+ [
+ 17.058,
+ 48.81105
+ ],
+ [
+ 16.90426,
+ 48.61947
+ ],
+ [
+ 16.79685,
+ 48.38561
+ ],
+ [
+ 17.06762,
+ 48.01116
+ ],
+ [
+ 17.32787,
+ 47.97749
+ ],
+ [
+ 17.51699,
+ 47.82535
+ ],
+ [
+ 17.74776,
+ 47.73093
+ ],
+ [
+ 18.29515,
+ 47.72075
+ ],
+ [
+ 18.67959,
+ 47.75541
+ ],
+ [
+ 18.89755,
+ 47.81203
+ ],
+ [
+ 18.79463,
+ 47.88245
+ ],
+ [
+ 18.84318,
+ 48.04046
+ ],
+ [
+ 19.46212,
+ 48.05333
+ ],
+ [
+ 19.62064,
+ 48.22938
+ ],
+ [
+ 19.89585,
+ 48.09387
+ ],
+ [
+ 20.33766,
+ 48.2643
+ ],
+ [
+ 20.55395,
+ 48.52358
+ ],
+ [
+ 20.82335,
+ 48.55714
+ ],
+ [
+ 21.10271,
+ 48.47096
+ ],
+ [
+ 21.45863,
+ 48.55513
+ ],
+ [
+ 21.74536,
+ 48.31435
+ ],
+ [
+ 22.15293,
+ 48.37179
+ ],
+ [
+ 22.61255,
+ 49.08914
+ ],
+ [
+ 22.09997,
+ 49.23814
+ ],
+ [
+ 21.9686,
+ 49.36363
+ ],
+ [
+ 21.6244,
+ 49.46989
+ ],
+ [
+ 21.06873,
+ 49.46402
+ ],
+ [
+ 20.94336,
+ 49.31088
+ ],
+ [
+ 20.73052,
+ 49.44006
+ ],
+ [
+ 20.22804,
+ 49.41714
+ ],
+ [
+ 20.05234,
+ 49.23052
+ ],
+ [
+ 19.83682,
+ 49.25529
+ ]
+ ]
+ ],
+ "terms_text": "Copyright ©2007-2012 Freemap Slovakia (www.freemap.sk). Some rights reserved."
+ },
+ {
+ "name": "Freemap.sk Cyclo",
+ "type": "tms",
+ "template": "http://t{switch:1,2,3,4}.freemap.sk/C/{zoom}/{x}/{y}.jpeg",
+ "scaleExtent": [
+ 8,
+ 16
+ ],
+ "polygon": [
+ [
+ [
+ 19.83682,
+ 49.25529
+ ],
+ [
+ 19.80075,
+ 49.42385
+ ],
+ [
+ 19.60437,
+ 49.48058
+ ],
+ [
+ 19.49179,
+ 49.63961
+ ],
+ [
+ 19.21831,
+ 49.52604
+ ],
+ [
+ 19.16778,
+ 49.42521
+ ],
+ [
+ 19.00308,
+ 49.42236
+ ],
+ [
+ 18.97611,
+ 49.5308
+ ],
+ [
+ 18.54685,
+ 49.51425
+ ],
+ [
+ 18.31432,
+ 49.33818
+ ],
+ [
+ 18.15913,
+ 49.2961
+ ],
+ [
+ 18.05564,
+ 49.11134
+ ],
+ [
+ 17.56396,
+ 48.84938
+ ],
+ [
+ 17.17929,
+ 48.88816
+ ],
+ [
+ 17.058,
+ 48.81105
+ ],
+ [
+ 16.90426,
+ 48.61947
+ ],
+ [
+ 16.79685,
+ 48.38561
+ ],
+ [
+ 17.06762,
+ 48.01116
+ ],
+ [
+ 17.32787,
+ 47.97749
+ ],
+ [
+ 17.51699,
+ 47.82535
+ ],
+ [
+ 17.74776,
+ 47.73093
+ ],
+ [
+ 18.29515,
+ 47.72075
+ ],
+ [
+ 18.67959,
+ 47.75541
+ ],
+ [
+ 18.89755,
+ 47.81203
+ ],
+ [
+ 18.79463,
+ 47.88245
+ ],
+ [
+ 18.84318,
+ 48.04046
+ ],
+ [
+ 19.46212,
+ 48.05333
+ ],
+ [
+ 19.62064,
+ 48.22938
+ ],
+ [
+ 19.89585,
+ 48.09387
+ ],
+ [
+ 20.33766,
+ 48.2643
+ ],
+ [
+ 20.55395,
+ 48.52358
+ ],
+ [
+ 20.82335,
+ 48.55714
+ ],
+ [
+ 21.10271,
+ 48.47096
+ ],
+ [
+ 21.45863,
+ 48.55513
+ ],
+ [
+ 21.74536,
+ 48.31435
+ ],
+ [
+ 22.15293,
+ 48.37179
+ ],
+ [
+ 22.61255,
+ 49.08914
+ ],
+ [
+ 22.09997,
+ 49.23814
+ ],
+ [
+ 21.9686,
+ 49.36363
+ ],
+ [
+ 21.6244,
+ 49.46989
+ ],
+ [
+ 21.06873,
+ 49.46402
+ ],
+ [
+ 20.94336,
+ 49.31088
+ ],
+ [
+ 20.73052,
+ 49.44006
+ ],
+ [
+ 20.22804,
+ 49.41714
+ ],
+ [
+ 20.05234,
+ 49.23052
+ ],
+ [
+ 19.83682,
+ 49.25529
+ ]
+ ]
+ ],
+ "terms_text": "Copyright ©2007-2012 Freemap Slovakia (www.freemap.sk). Some rights reserved."
+ },
+ {
+ "name": "Freemap.sk Hiking",
+ "type": "tms",
+ "template": "http://t{switch:1,2,3,4}.freemap.sk/T/{zoom}/{x}/{y}.jpeg",
+ "scaleExtent": [
+ 8,
+ 16
+ ],
+ "polygon": [
+ [
+ [
+ 19.83682,
+ 49.25529
+ ],
+ [
+ 19.80075,
+ 49.42385
+ ],
+ [
+ 19.60437,
+ 49.48058
+ ],
+ [
+ 19.49179,
+ 49.63961
+ ],
+ [
+ 19.21831,
+ 49.52604
+ ],
+ [
+ 19.16778,
+ 49.42521
+ ],
+ [
+ 19.00308,
+ 49.42236
+ ],
+ [
+ 18.97611,
+ 49.5308
+ ],
+ [
+ 18.54685,
+ 49.51425
+ ],
+ [
+ 18.31432,
+ 49.33818
+ ],
+ [
+ 18.15913,
+ 49.2961
+ ],
+ [
+ 18.05564,
+ 49.11134
+ ],
+ [
+ 17.56396,
+ 48.84938
+ ],
+ [
+ 17.17929,
+ 48.88816
+ ],
+ [
+ 17.058,
+ 48.81105
+ ],
+ [
+ 16.90426,
+ 48.61947
+ ],
+ [
+ 16.79685,
+ 48.38561
+ ],
+ [
+ 17.06762,
+ 48.01116
+ ],
+ [
+ 17.32787,
+ 47.97749
+ ],
+ [
+ 17.51699,
+ 47.82535
+ ],
+ [
+ 17.74776,
+ 47.73093
+ ],
+ [
+ 18.29515,
+ 47.72075
+ ],
+ [
+ 18.67959,
+ 47.75541
+ ],
+ [
+ 18.89755,
+ 47.81203
+ ],
+ [
+ 18.79463,
+ 47.88245
+ ],
+ [
+ 18.84318,
+ 48.04046
+ ],
+ [
+ 19.46212,
+ 48.05333
+ ],
+ [
+ 19.62064,
+ 48.22938
+ ],
+ [
+ 19.89585,
+ 48.09387
+ ],
+ [
+ 20.33766,
+ 48.2643
+ ],
+ [
+ 20.55395,
+ 48.52358
+ ],
+ [
+ 20.82335,
+ 48.55714
+ ],
+ [
+ 21.10271,
+ 48.47096
+ ],
+ [
+ 21.45863,
+ 48.55513
+ ],
+ [
+ 21.74536,
+ 48.31435
+ ],
+ [
+ 22.15293,
+ 48.37179
+ ],
+ [
+ 22.61255,
+ 49.08914
+ ],
+ [
+ 22.09997,
+ 49.23814
+ ],
+ [
+ 21.9686,
+ 49.36363
+ ],
+ [
+ 21.6244,
+ 49.46989
+ ],
+ [
+ 21.06873,
+ 49.46402
+ ],
+ [
+ 20.94336,
+ 49.31088
+ ],
+ [
+ 20.73052,
+ 49.44006
+ ],
+ [
+ 20.22804,
+ 49.41714
+ ],
+ [
+ 20.05234,
+ 49.23052
+ ],
+ [
+ 19.83682,
+ 49.25529
+ ]
+ ]
+ ],
+ "terms_text": "Copyright ©2007-2012 Freemap Slovakia (www.freemap.sk). Some rights reserved."
+ },
+ {
+ "name": "Freemap.sk Ski",
+ "type": "tms",
+ "template": "http://t{switch:1,2,3,4}.freemap.sk/K/{zoom}/{x}/{y}.jpeg",
+ "scaleExtent": [
+ 8,
+ 16
+ ],
+ "polygon": [
+ [
+ [
+ 19.83682,
+ 49.25529
+ ],
+ [
+ 19.80075,
+ 49.42385
+ ],
+ [
+ 19.60437,
+ 49.48058
+ ],
+ [
+ 19.49179,
+ 49.63961
+ ],
+ [
+ 19.21831,
+ 49.52604
+ ],
+ [
+ 19.16778,
+ 49.42521
+ ],
+ [
+ 19.00308,
+ 49.42236
+ ],
+ [
+ 18.97611,
+ 49.5308
+ ],
+ [
+ 18.54685,
+ 49.51425
+ ],
+ [
+ 18.31432,
+ 49.33818
+ ],
+ [
+ 18.15913,
+ 49.2961
+ ],
+ [
+ 18.05564,
+ 49.11134
+ ],
+ [
+ 17.56396,
+ 48.84938
+ ],
+ [
+ 17.17929,
+ 48.88816
+ ],
+ [
+ 17.058,
+ 48.81105
+ ],
+ [
+ 16.90426,
+ 48.61947
+ ],
+ [
+ 16.79685,
+ 48.38561
+ ],
+ [
+ 17.06762,
+ 48.01116
+ ],
+ [
+ 17.32787,
+ 47.97749
+ ],
+ [
+ 17.51699,
+ 47.82535
+ ],
+ [
+ 17.74776,
+ 47.73093
+ ],
+ [
+ 18.29515,
+ 47.72075
+ ],
+ [
+ 18.67959,
+ 47.75541
+ ],
+ [
+ 18.89755,
+ 47.81203
+ ],
+ [
+ 18.79463,
+ 47.88245
+ ],
+ [
+ 18.84318,
+ 48.04046
+ ],
+ [
+ 19.46212,
+ 48.05333
+ ],
+ [
+ 19.62064,
+ 48.22938
+ ],
+ [
+ 19.89585,
+ 48.09387
+ ],
+ [
+ 20.33766,
+ 48.2643
+ ],
+ [
+ 20.55395,
+ 48.52358
+ ],
+ [
+ 20.82335,
+ 48.55714
+ ],
+ [
+ 21.10271,
+ 48.47096
+ ],
+ [
+ 21.45863,
+ 48.55513
+ ],
+ [
+ 21.74536,
+ 48.31435
+ ],
+ [
+ 22.15293,
+ 48.37179
+ ],
+ [
+ 22.61255,
+ 49.08914
+ ],
+ [
+ 22.09997,
+ 49.23814
+ ],
+ [
+ 21.9686,
+ 49.36363
+ ],
+ [
+ 21.6244,
+ 49.46989
+ ],
+ [
+ 21.06873,
+ 49.46402
+ ],
+ [
+ 20.94336,
+ 49.31088
+ ],
+ [
+ 20.73052,
+ 49.44006
+ ],
+ [
+ 20.22804,
+ 49.41714
+ ],
+ [
+ 20.05234,
+ 49.23052
+ ],
+ [
+ 19.83682,
+ 49.25529
+ ]
+ ]
+ ],
+ "terms_text": "Copyright ©2007-2012 Freemap Slovakia (www.freemap.sk). Some rights reserved."
+ },
+ {
+ "name": "Fugro (Denmark)",
+ "type": "tms",
+ "template": "http://{switch:a,b,c}.tile.openstreetmap.dk/fugro2005/{zoom}/{x}/{y}.png",
+ "scaleExtent": [
+ 0,
+ 19
+ ],
+ "polygon": [
+ [
+ [
+ 8.3743941,
+ 54.9551655
+ ],
+ [
+ 8.3683809,
+ 55.4042149
+ ],
+ [
+ 8.2103997,
+ 55.4039795
+ ],
+ [
+ 8.2087314,
+ 55.4937345
+ ],
+ [
+ 8.0502655,
+ 55.4924731
+ ],
+ [
+ 8.0185123,
+ 56.7501399
+ ],
+ [
+ 8.1819161,
+ 56.7509948
+ ],
+ [
+ 8.1763274,
+ 57.0208898
+ ],
+ [
+ 8.3413329,
+ 57.0219872
+ ],
+ [
+ 8.3392467,
+ 57.1119574
+ ],
+ [
+ 8.5054433,
+ 57.1123212
+ ],
+ [
+ 8.5033923,
+ 57.2020499
+ ],
+ [
+ 9.3316304,
+ 57.2027636
+ ],
+ [
+ 9.3319079,
+ 57.2924835
+ ],
+ [
+ 9.4978864,
+ 57.2919578
+ ],
+ [
+ 9.4988593,
+ 57.3820608
+ ],
+ [
+ 9.6649749,
+ 57.3811615
+ ],
+ [
+ 9.6687295,
+ 57.5605591
+ ],
+ [
+ 9.8351961,
+ 57.5596265
+ ],
+ [
+ 9.8374896,
+ 57.6493322
+ ],
+ [
+ 10.1725726,
+ 57.6462818
+ ],
+ [
+ 10.1754245,
+ 57.7367768
+ ],
+ [
+ 10.5118282,
+ 57.7330269
+ ],
+ [
+ 10.5152095,
+ 57.8228945
+ ],
+ [
+ 10.6834853,
+ 57.8207722
+ ],
+ [
+ 10.6751613,
+ 57.6412021
+ ],
+ [
+ 10.5077045,
+ 57.6433097
+ ],
+ [
+ 10.5039992,
+ 57.5535088
+ ],
+ [
+ 10.671038,
+ 57.5514113
+ ],
+ [
+ 10.6507805,
+ 57.1024538
+ ],
+ [
+ 10.4857673,
+ 57.1045138
+ ],
+ [
+ 10.4786236,
+ 56.9249051
+ ],
+ [
+ 10.3143981,
+ 56.9267573
+ ],
+ [
+ 10.3112341,
+ 56.8369269
+ ],
+ [
+ 10.4750295,
+ 56.83509
+ ],
+ [
+ 10.4649016,
+ 56.5656681
+ ],
+ [
+ 10.9524239,
+ 56.5589761
+ ],
+ [
+ 10.9479249,
+ 56.4692243
+ ],
+ [
+ 11.1099335,
+ 56.4664675
+ ],
+ [
+ 11.1052639,
+ 56.376833
+ ],
+ [
+ 10.9429901,
+ 56.3795284
+ ],
+ [
+ 10.9341235,
+ 56.1994768
+ ],
+ [
+ 10.7719685,
+ 56.2020244
+ ],
+ [
+ 10.7694751,
+ 56.1120103
+ ],
+ [
+ 10.6079695,
+ 56.1150259
+ ],
+ [
+ 10.4466742,
+ 56.116717
+ ],
+ [
+ 10.2865948,
+ 56.118675
+ ],
+ [
+ 10.2831527,
+ 56.0281851
+ ],
+ [
+ 10.4439274,
+ 56.0270388
+ ],
+ [
+ 10.4417713,
+ 55.7579243
+ ],
+ [
+ 10.4334961,
+ 55.6693533
+ ],
+ [
+ 10.743814,
+ 55.6646861
+ ],
+ [
+ 10.743814,
+ 55.5712253
+ ],
+ [
+ 10.8969041,
+ 55.5712253
+ ],
+ [
+ 10.9051793,
+ 55.3953852
+ ],
+ [
+ 11.0613726,
+ 55.3812841
+ ],
+ [
+ 11.0593038,
+ 55.1124061
+ ],
+ [
+ 11.0458567,
+ 55.0318621
+ ],
+ [
+ 11.2030844,
+ 55.0247474
+ ],
+ [
+ 11.2030844,
+ 55.117139
+ ],
+ [
+ 11.0593038,
+ 55.1124061
+ ],
+ [
+ 11.0613726,
+ 55.3812841
+ ],
+ [
+ 11.0789572,
+ 55.5712253
+ ],
+ [
+ 10.8969041,
+ 55.5712253
+ ],
+ [
+ 10.9258671,
+ 55.6670198
+ ],
+ [
+ 10.743814,
+ 55.6646861
+ ],
+ [
+ 10.7562267,
+ 55.7579243
+ ],
+ [
+ 10.4417713,
+ 55.7579243
+ ],
+ [
+ 10.4439274,
+ 56.0270388
+ ],
+ [
+ 10.4466742,
+ 56.116717
+ ],
+ [
+ 10.6079695,
+ 56.1150259
+ ],
+ [
+ 10.6052053,
+ 56.0247462
+ ],
+ [
+ 10.9258671,
+ 56.0201215
+ ],
+ [
+ 10.9197132,
+ 55.9309388
+ ],
+ [
+ 11.0802782,
+ 55.92792
+ ],
+ [
+ 11.0858066,
+ 56.0178284
+ ],
+ [
+ 11.7265047,
+ 56.005058
+ ],
+ [
+ 11.7319981,
+ 56.0952142
+ ],
+ [
+ 12.0540333,
+ 56.0871256
+ ],
+ [
+ 12.0608477,
+ 56.1762576
+ ],
+ [
+ 12.7023469,
+ 56.1594405
+ ],
+ [
+ 12.6611131,
+ 55.7114318
+ ],
+ [
+ 12.9792318,
+ 55.7014026
+ ],
+ [
+ 12.9612912,
+ 55.5217294
+ ],
+ [
+ 12.3268659,
+ 55.5412096
+ ],
+ [
+ 12.3206071,
+ 55.4513655
+ ],
+ [
+ 12.4778226,
+ 55.447067
+ ],
+ [
+ 12.4702432,
+ 55.3570479
+ ],
+ [
+ 12.6269738,
+ 55.3523837
+ ],
+ [
+ 12.6200898,
+ 55.2632576
+ ],
+ [
+ 12.4627339,
+ 55.26722
+ ],
+ [
+ 12.4552949,
+ 55.1778223
+ ],
+ [
+ 12.2987046,
+ 55.1822303
+ ],
+ [
+ 12.2897344,
+ 55.0923641
+ ],
+ [
+ 12.6048608,
+ 55.0832904
+ ],
+ [
+ 12.5872011,
+ 54.9036285
+ ],
+ [
+ 12.2766618,
+ 54.9119031
+ ],
+ [
+ 12.2610181,
+ 54.7331602
+ ],
+ [
+ 12.1070691,
+ 54.7378161
+ ],
+ [
+ 12.0858621,
+ 54.4681655
+ ],
+ [
+ 11.7794953,
+ 54.4753579
+ ],
+ [
+ 11.7837381,
+ 54.5654783
+ ],
+ [
+ 11.1658525,
+ 54.5782155
+ ],
+ [
+ 11.1706443,
+ 54.6686508
+ ],
+ [
+ 10.8617173,
+ 54.6733956
+ ],
+ [
+ 10.8651245,
+ 54.7634667
+ ],
+ [
+ 10.7713646,
+ 54.7643888
+ ],
+ [
+ 10.7707276,
+ 54.7372807
+ ],
+ [
+ 10.7551428,
+ 54.7375776
+ ],
+ [
+ 10.7544039,
+ 54.7195666
+ ],
+ [
+ 10.7389074,
+ 54.7197588
+ ],
+ [
+ 10.7384368,
+ 54.7108482
+ ],
+ [
+ 10.7074486,
+ 54.7113045
+ ],
+ [
+ 10.7041094,
+ 54.6756741
+ ],
+ [
+ 10.5510973,
+ 54.6781698
+ ],
+ [
+ 10.5547184,
+ 54.7670245
+ ],
+ [
+ 10.2423994,
+ 54.7705935
+ ],
+ [
+ 10.2459845,
+ 54.8604673
+ ],
+ [
+ 10.0902268,
+ 54.8622134
+ ],
+ [
+ 10.0873731,
+ 54.7723851
+ ],
+ [
+ 9.1555798,
+ 54.7769557
+ ],
+ [
+ 9.1562752,
+ 54.8675369
+ ],
+ [
+ 8.5321973,
+ 54.8663765
+ ],
+ [
+ 8.531432,
+ 54.95516
+ ]
+ ],
+ [
+ [
+ 11.4577738,
+ 56.819554
+ ],
+ [
+ 11.7849181,
+ 56.8127385
+ ],
+ [
+ 11.7716715,
+ 56.6332796
+ ],
+ [
+ 11.4459621,
+ 56.6401087
+ ]
+ ],
+ [
+ [
+ 11.3274736,
+ 57.3612962
+ ],
+ [
+ 11.3161808,
+ 57.1818004
+ ],
+ [
+ 11.1508692,
+ 57.1847276
+ ],
+ [
+ 11.1456628,
+ 57.094962
+ ],
+ [
+ 10.8157703,
+ 57.1001693
+ ],
+ [
+ 10.8290599,
+ 57.3695272
+ ]
+ ],
+ [
+ [
+ 11.5843266,
+ 56.2777928
+ ],
+ [
+ 11.5782882,
+ 56.1880397
+ ],
+ [
+ 11.7392309,
+ 56.1845765
+ ],
+ [
+ 11.7456428,
+ 56.2743186
+ ]
+ ],
+ [
+ [
+ 14.6825922,
+ 55.3639405
+ ],
+ [
+ 14.8395247,
+ 55.3565231
+ ],
+ [
+ 14.8263755,
+ 55.2671261
+ ],
+ [
+ 15.1393406,
+ 55.2517359
+ ],
+ [
+ 15.1532015,
+ 55.3410836
+ ],
+ [
+ 15.309925,
+ 55.3330556
+ ],
+ [
+ 15.295719,
+ 55.2437356
+ ],
+ [
+ 15.1393406,
+ 55.2517359
+ ],
+ [
+ 15.1255631,
+ 55.1623802
+ ],
+ [
+ 15.2815819,
+ 55.1544167
+ ],
+ [
+ 15.2535578,
+ 54.9757646
+ ],
+ [
+ 14.6317464,
+ 55.0062496
+ ]
+ ]
+ ],
+ "terms_url": "http://wiki.openstreetmap.org/wiki/Fugro",
+ "terms_text": "Fugro Aerial Mapping"
+ },
+ {
+ "name": "Imagerie Drone (Haiti)",
+ "type": "tms",
+ "template": "http://wms.openstreetmap.fr/tms/1.0.0/iomhaiti/{zoom}/{x}/{y}",
+ "polygon": [
+ [
+ [
+ -72.1547401,
+ 19.6878969
+ ],
+ [
+ -72.162234,
+ 19.689011
+ ],
+ [
+ -72.164995,
+ 19.6932445
+ ],
+ [
+ -72.1657838,
+ 19.6979977
+ ],
+ [
+ -72.161603,
+ 19.7035677
+ ],
+ [
+ -72.1487449,
+ 19.7028993
+ ],
+ [
+ -72.1477194,
+ 19.7026765
+ ],
+ [
+ -72.1485082,
+ 19.7001514
+ ],
+ [
+ -72.1436963,
+ 19.7011169
+ ],
+ [
+ -72.1410143,
+ 19.7000029
+ ],
+ [
+ -72.139476,
+ 19.6973664
+ ],
+ [
+ -72.1382533,
+ 19.6927617
+ ],
+ [
+ -72.1386872,
+ 19.6923161
+ ],
+ [
+ -72.1380561,
+ 19.6896423
+ ],
+ [
+ -72.1385294,
+ 19.6894938
+ ],
+ [
+ -72.1388055,
+ 19.6901251
+ ],
+ [
+ -72.1388844,
+ 19.6876741
+ ],
+ [
+ -72.1378195,
+ 19.6872656
+ ],
+ [
+ -72.13778,
+ 19.6850003
+ ],
+ [
+ -72.1369517,
+ 19.6855945
+ ],
+ [
+ -72.136794,
+ 19.6840719
+ ],
+ [
+ -72.135729,
+ 19.6835148
+ ],
+ [
+ -72.1355713,
+ 19.6740817
+ ],
+ [
+ -72.1366362,
+ 19.6708133
+ ],
+ [
+ -72.1487843,
+ 19.6710733
+ ],
+ [
+ -72.1534779,
+ 19.6763843
+ ],
+ [
+ -72.1530835,
+ 19.6769414
+ ],
+ [
+ -72.1533251,
+ 19.6769768
+ ],
+ [
+ -72.1532807,
+ 19.6796525
+ ],
+ [
+ -72.1523834,
+ 19.6797175
+ ],
+ [
+ -72.1522749,
+ 19.6803488
+ ],
+ [
+ -72.1519101,
+ 19.6803395
+ ],
+ [
+ -72.1518608,
+ 19.6805067
+ ],
+ [
+ -72.1528173,
+ 19.6806552
+ ],
+ [
+ -72.1522299,
+ 19.6833011
+ ],
+ [
+ -72.1507801,
+ 19.6831499
+ ],
+ [
+ -72.1504457,
+ 19.6847862
+ ],
+ [
+ -72.1508591,
+ 19.6843492
+ ],
+ [
+ -72.1530087,
+ 19.6849898
+ ],
+ [
+ -72.1546258,
+ 19.6854354
+ ],
+ [
+ -72.1543103,
+ 19.6870694
+ ],
+ [
+ -72.1547244,
+ 19.6868466
+ ],
+ [
+ -72.1548501,
+ 19.6877564
+ ],
+ [
+ -72.1545814,
+ 19.6877982
+ ]
+ ],
+ [
+ [
+ -72.1310601,
+ 19.6718929
+ ],
+ [
+ -72.1259842,
+ 19.6772765
+ ],
+ [
+ -72.1255379,
+ 19.6776179
+ ],
+ [
+ -72.1216891,
+ 19.6776442
+ ],
+ [
+ -72.1149677,
+ 19.672602
+ ],
+ [
+ -72.1152745,
+ 19.6687152
+ ],
+ [
+ -72.1198205,
+ 19.6627535
+ ],
+ [
+ -72.1227768,
+ 19.6625696
+ ],
+ [
+ -72.1248965,
+ 19.662701
+ ],
+ [
+ -72.1285779,
+ 19.6645394
+ ],
+ [
+ -72.1308091,
+ 19.6661677
+ ],
+ [
+ -72.1316737,
+ 19.668794
+ ],
+ [
+ -72.1315621,
+ 19.671
+ ]
+ ],
+ [
+ [
+ -71.845795,
+ 19.6709758
+ ],
+ [
+ -71.8429354,
+ 19.6759525
+ ],
+ [
+ -71.8410027,
+ 19.6759525
+ ],
+ [
+ -71.8380249,
+ 19.6755254
+ ],
+ [
+ -71.8378671,
+ 19.6745041
+ ],
+ [
+ -71.8390504,
+ 19.6743927
+ ],
+ [
+ -71.8390109,
+ 19.6741141
+ ],
+ [
+ -71.8398392,
+ 19.673947
+ ],
+ [
+ -71.8389123,
+ 19.6736127
+ ],
+ [
+ -71.8380249,
+ 19.67209
+ ],
+ [
+ -71.8380052,
+ 19.6726285
+ ],
+ [
+ -71.8376699,
+ 19.6727214
+ ],
+ [
+ -71.8376305,
+ 19.672545
+ ],
+ [
+ -71.8354414,
+ 19.6732135
+ ],
+ [
+ -71.835333,
+ 19.6729999
+ ],
+ [
+ -71.8331242,
+ 19.6734642
+ ],
+ [
+ -71.8326706,
+ 19.6716815
+ ],
+ [
+ -71.8321579,
+ 19.67209
+ ],
+ [
+ -71.8307183,
+ 19.6694902
+ ],
+ [
+ -71.8306009,
+ 19.6697594
+ ],
+ [
+ -71.8302174,
+ 19.6698907
+ ],
+ [
+ -71.8291833,
+ 19.6672095
+ ],
+ [
+ -71.8290749,
+ 19.6672095
+ ],
+ [
+ -71.8289122,
+ 19.6667916
+ ],
+ [
+ -71.8289516,
+ 19.6666199
+ ],
+ [
+ -71.8288333,
+ 19.6663506
+ ],
+ [
+ -71.8285572,
+ 19.6664759
+ ],
+ [
+ -71.8288678,
+ 19.6672466
+ ],
+ [
+ -71.8287593,
+ 19.6674138
+ ],
+ [
+ -71.8277979,
+ 19.6678177
+ ],
+ [
+ -71.8277112,
+ 19.6678586
+ ],
+ [
+ -71.8278263,
+ 19.6679637
+ ],
+ [
+ -71.8271831,
+ 19.6681212
+ ],
+ [
+ -71.8271761,
+ 19.6680917
+ ],
+ [
+ -71.8264405,
+ 19.6683921
+ ],
+ [
+ -71.8264074,
+ 19.6683231
+ ],
+ [
+ -71.8261954,
+ 19.6684253
+ ],
+ [
+ -71.8261806,
+ 19.6683556
+ ],
+ [
+ -71.8258946,
+ 19.6684206
+ ],
+ [
+ -71.8258897,
+ 19.6686574
+ ],
+ [
+ -71.8251551,
+ 19.6687549
+ ],
+ [
+ -71.8254509,
+ 19.6691588
+ ],
+ [
+ -71.8229332,
+ 19.6695739
+ ],
+ [
+ -71.822713,
+ 19.6696658
+ ],
+ [
+ -71.8227688,
+ 19.6697577
+ ],
+ [
+ -71.8201751,
+ 19.6709855
+ ],
+ [
+ -71.8198474,
+ 19.6704537
+ ],
+ [
+ -71.8197985,
+ 19.6706014
+ ],
+ [
+ -71.8194674,
+ 19.6707557
+ ],
+ [
+ -71.8182472,
+ 19.6713433
+ ],
+ [
+ -71.8181426,
+ 19.6711431
+ ],
+ [
+ -71.8175813,
+ 19.6714254
+ ],
+ [
+ -71.816959,
+ 19.6707672
+ ],
+ [
+ -71.8176388,
+ 19.6718965
+ ],
+ [
+ -71.8171403,
+ 19.6720376
+ ],
+ [
+ -71.8158225,
+ 19.6718045
+ ],
+ [
+ -71.8138354,
+ 19.6711874
+ ],
+ [
+ -71.8123259,
+ 19.6706982
+ ],
+ [
+ -71.8121759,
+ 19.6704258
+ ],
+ [
+ -71.8124304,
+ 19.6701467
+ ],
+ [
+ -71.8119184,
+ 19.6700141
+ ],
+ [
+ -71.8118765,
+ 19.6705828
+ ],
+ [
+ -71.811169,
+ 19.6703483
+ ],
+ [
+ -71.8095938,
+ 19.6698516
+ ],
+ [
+ -71.8077992,
+ 19.6692829
+ ],
+ [
+ -71.8056028,
+ 19.668612
+ ],
+ [
+ -71.8051443,
+ 19.6668942
+ ],
+ [
+ -71.8051196,
+ 19.6652322
+ ],
+ [
+ -71.8052315,
+ 19.661979
+ ],
+ [
+ -71.8065603,
+ 19.6523921
+ ],
+ [
+ -71.8073412,
+ 19.6482946
+ ],
+ [
+ -71.8099686,
+ 19.6468292
+ ],
+ [
+ -71.8147517,
+ 19.6454502
+ ],
+ [
+ -71.8147726,
+ 19.6455619
+ ],
+ [
+ -71.8150027,
+ 19.6455093
+ ],
+ [
+ -71.8149469,
+ 19.6453846
+ ],
+ [
+ -71.8159928,
+ 19.6450234
+ ],
+ [
+ -71.8158882,
+ 19.6448855
+ ],
+ [
+ -71.8165854,
+ 19.6446097
+ ],
+ [
+ -71.8190119,
+ 19.643802
+ ],
+ [
+ -71.8211524,
+ 19.643454
+ ],
+ [
+ -71.8221564,
+ 19.6433292
+ ],
+ [
+ -71.8269046,
+ 19.643211
+ ],
+ [
+ -71.8280481,
+ 19.6432241
+ ],
+ [
+ -71.8304466,
+ 19.6440778
+ ],
+ [
+ -71.8306419,
+ 19.6448592
+ ],
+ [
+ -71.8295263,
+ 19.6450365
+ ],
+ [
+ -71.8296064,
+ 19.6456111
+ ],
+ [
+ -71.8299411,
+ 19.6455651
+ ],
+ [
+ -71.8303699,
+ 19.6451744
+ ],
+ [
+ -71.830471,
+ 19.6453452
+ ],
+ [
+ -71.8308092,
+ 19.6451974
+ ],
+ [
+ -71.8310184,
+ 19.6451088
+ ],
+ [
+ -71.8312519,
+ 19.6458541
+ ],
+ [
+ -71.8311125,
+ 19.6458245
+ ],
+ [
+ -71.831367,
+ 19.6465862
+ ],
+ [
+ -71.8328939,
+ 19.646189
+ ],
+ [
+ -71.8344566,
+ 19.6457062
+ ],
+ [
+ -71.8344664,
+ 19.6463052
+ ],
+ [
+ -71.834215,
+ 19.6461938
+ ],
+ [
+ -71.8342002,
+ 19.6465513
+ ],
+ [
+ -71.8346702,
+ 19.6463
+ ],
+ [
+ -71.8349118,
+ 19.6463905
+ ],
+ [
+ -71.8347984,
+ 19.6462187
+ ],
+ [
+ -71.8354393,
+ 19.6458496
+ ],
+ [
+ -71.8355034,
+ 19.6458032
+ ],
+ [
+ -71.8364747,
+ 19.6461328
+ ],
+ [
+ -71.8376382,
+ 19.6472658
+ ],
+ [
+ -71.8379143,
+ 19.647888
+ ],
+ [
+ -71.8390483,
+ 19.6508039
+ ],
+ [
+ -71.8456942,
+ 19.6696203
+ ]
+ ],
+ [
+ [
+ -72.098878,
+ 18.54843
+ ],
+ [
+ -72.096993,
+ 18.5501994
+ ],
+ [
+ -72.0972888,
+ 18.5503209
+ ],
+ [
+ -72.0968451,
+ 18.5503489
+ ],
+ [
+ -72.0955632,
+ 18.551854
+ ],
+ [
+ -72.0956428,
+ 18.5526742
+ ],
+ [
+ -72.0959914,
+ 18.5533748
+ ],
+ [
+ -72.0962145,
+ 18.553203
+ ],
+ [
+ -72.0962842,
+ 18.5535665
+ ],
+ [
+ -72.0964446,
+ 18.5535533
+ ],
+ [
+ -72.0965352,
+ 18.5539764
+ ],
+ [
+ -72.0965056,
+ 18.554173
+ ],
+ [
+ -72.0966085,
+ 18.5541747
+ ],
+ [
+ -72.0965178,
+ 18.5542127
+ ],
+ [
+ -72.0968769,
+ 18.5546588
+ ],
+ [
+ -72.0979018,
+ 18.5552141
+ ],
+ [
+ -72.1006211,
+ 18.5555875
+ ],
+ [
+ -72.1014926,
+ 18.5556206
+ ],
+ [
+ -72.1024339,
+ 18.5555016
+ ],
+ [
+ -72.103417,
+ 18.5543515
+ ],
+ [
+ -72.1034798,
+ 18.5516215
+ ],
+ [
+ -72.1030789,
+ 18.5516149
+ ],
+ [
+ -72.1033752,
+ 18.5515224
+ ],
+ [
+ -72.1035042,
+ 18.5515224
+ ],
+ [
+ -72.1035239,
+ 18.5502417
+ ],
+ [
+ -72.1028701,
+ 18.5503062
+ ],
+ [
+ -72.1029015,
+ 18.55025
+ ],
+ [
+ -72.1028457,
+ 18.5501773
+ ],
+ [
+ -72.1035081,
+ 18.5500252
+ ],
+ [
+ -72.103491,
+ 18.5497396
+ ],
+ [
+ -72.1035181,
+ 18.5497361
+ ],
+ [
+ -72.1035398,
+ 18.5489039
+ ],
+ [
+ -72.1034317,
+ 18.5487056
+ ],
+ [
+ -72.102717,
+ 18.5481437
+ ],
+ [
+ -72.1025601,
+ 18.5481536
+ ],
+ [
+ -72.10229,
+ 18.5482751
+ ],
+ [
+ -72.1022891,
+ 18.5482569
+ ],
+ [
+ -72.1025201,
+ 18.5481396
+ ],
+ [
+ -72.1023388,
+ 18.5481321
+ ],
+ [
+ -72.0999082,
+ 18.5480901
+ ],
+ [
+ -72.09907,
+ 18.5483799
+ ]
+ ],
+ [
+ [
+ -72.2542503,
+ 18.568262
+ ],
+ [
+ -72.2560252,
+ 18.5717765
+ ],
+ [
+ -72.2557886,
+ 18.5748049
+ ],
+ [
+ -72.2535009,
+ 18.5755526
+ ],
+ [
+ -72.2522782,
+ 18.5755526
+ ],
+ [
+ -72.2499906,
+ 18.5740945
+ ],
+ [
+ -72.2473874,
+ 18.5698323
+ ],
+ [
+ -72.2460069,
+ 18.566729
+ ],
+ [
+ -72.2458492,
+ 18.5629527
+ ],
+ [
+ -72.2479396,
+ 18.5625414
+ ],
+ [
+ -72.2501483,
+ 18.5628031
+ ],
+ [
+ -72.2519232,
+ 18.5650839
+ ]
+ ],
+ [
+ [
+ -72.303145,
+ 18.5332749
+ ],
+ [
+ -72.3031275,
+ 18.5331799
+ ],
+ [
+ -72.3048311,
+ 18.5311081
+ ],
+ [
+ -72.3097397,
+ 18.5311081
+ ],
+ [
+ -72.3164332,
+ 18.5324302
+ ],
+ [
+ -72.3234056,
+ 18.5366083
+ ],
+ [
+ -72.3261388,
+ 18.5387765
+ ],
+ [
+ -72.3261946,
+ 18.5426371
+ ],
+ [
+ -72.3170468,
+ 18.5540596
+ ],
+ [
+ -72.3130864,
+ 18.5540596
+ ],
+ [
+ -72.2987511,
+ 18.5453342
+ ],
+ [
+ -72.2988627,
+ 18.5407333
+ ],
+ [
+ -72.2962969,
+ 18.5404689
+ ],
+ [
+ -72.2954602,
+ 18.5395169
+ ],
+ [
+ -72.2961853,
+ 18.5338582
+ ],
+ [
+ -72.2971893,
+ 18.5332235
+ ],
+ [
+ -72.3007034,
+ 18.5332764
+ ],
+ [
+ -72.3022652,
+ 18.5342284
+ ],
+ [
+ -72.3028486,
+ 18.5335189
+ ],
+ [
+ -72.303104,
+ 18.5333361
+ ],
+ [
+ -72.303181,
+ 18.5334007
+ ],
+ [
+ -72.3035793,
+ 18.5335614
+ ],
+ [
+ -72.3030793,
+ 18.5346463
+ ],
+ [
+ -72.303715,
+ 18.5339873
+ ],
+ [
+ -72.3045286,
+ 18.5344052
+ ],
+ [
+ -72.3044015,
+ 18.5345097
+ ],
+ [
+ -72.3062747,
+ 18.5352571
+ ],
+ [
+ -72.3063107,
+ 18.5352741
+ ],
+ [
+ -72.3061219,
+ 18.5357628
+ ],
+ [
+ -72.3061219,
+ 18.5358196
+ ],
+ [
+ -72.30637,
+ 18.5358928
+ ],
+ [
+ -72.3062726,
+ 18.5354869
+ ],
+ [
+ -72.3066688,
+ 18.5350891
+ ],
+ [
+ -72.3061963,
+ 18.5349706
+ ],
+ [
+ -72.3058869,
+ 18.5349385
+ ],
+ [
+ -72.3055373,
+ 18.5346833
+ ],
+ [
+ -72.3054864,
+ 18.534613
+ ],
+ [
+ -72.3055585,
+ 18.5345065
+ ],
+ [
+ -72.3046749,
+ 18.5342293
+ ],
+ [
+ -72.3047617,
+ 18.5338817
+ ],
+ [
+ -72.3043252,
+ 18.5337511
+ ],
+ [
+ -72.3042595,
+ 18.5336346
+ ]
+ ],
+ [
+ [
+ -72.2981405,
+ 18.477502
+ ],
+ [
+ -72.2935652,
+ 18.4948587
+ ],
+ [
+ -72.2922242,
+ 18.4964297
+ ],
+ [
+ -72.2931708,
+ 18.4972526
+ ],
+ [
+ -72.2892266,
+ 18.5057058
+ ],
+ [
+ -72.2878067,
+ 18.5080996
+ ],
+ [
+ -72.2850458,
+ 18.5119893
+ ],
+ [
+ -72.2840203,
+ 18.5113161
+ ],
+ [
+ -72.2808649,
+ 18.515879
+ ],
+ [
+ -72.2773151,
+ 18.5175994
+ ],
+ [
+ -72.2723454,
+ 18.5175246
+ ],
+ [
+ -72.2662714,
+ 18.5144578
+ ],
+ [
+ -72.2665869,
+ 18.5066783
+ ],
+ [
+ -72.2692643,
+ 18.5046154
+ ],
+ [
+ -72.2661965,
+ 18.5029756
+ ],
+ [
+ -72.2688181,
+ 18.4965222
+ ],
+ [
+ -72.2691528,
+ 18.4959403
+ ],
+ [
+ -72.2702684,
+ 18.4961519
+ ],
+ [
+ -72.2702684,
+ 18.4955964
+ ],
+ [
+ -72.2690691,
+ 18.49557
+ ],
+ [
+ -72.2692922,
+ 18.4937714
+ ],
+ [
+ -72.2736988,
+ 18.4859951
+ ],
+ [
+ -72.2746749,
+ 18.4850429
+ ],
+ [
+ -72.2751769,
+ 18.483403
+ ],
+ [
+ -72.2765435,
+ 18.4813398
+ ],
+ [
+ -72.2773523,
+ 18.4814985
+ ],
+ [
+ -72.2783006,
+ 18.4809694
+ ],
+ [
+ -72.2778544,
+ 18.4807049
+ ],
+ [
+ -72.2771013,
+ 18.480123
+ ],
+ [
+ -72.2789978,
+ 18.4775836
+ ],
+ [
+ -72.279723,
+ 18.4772927
+ ],
+ [
+ -72.2806433,
+ 18.4776365
+ ],
+ [
+ -72.2813685,
+ 18.4771604
+ ],
+ [
+ -72.2808386,
+ 18.4769752
+ ],
+ [
+ -72.2812848,
+ 18.4758378
+ ],
+ [
+ -72.2823167,
+ 18.4751765
+ ],
+ [
+ -72.2851615,
+ 18.4750971
+ ],
+ [
+ -72.2849941,
+ 18.4763668
+ ],
+ [
+ -72.2854404,
+ 18.4769752
+ ],
+ [
+ -72.286277,
+ 18.4756262
+ ],
+ [
+ -72.2869325,
+ 18.4754675
+ ],
+ [
+ -72.2865978,
+ 18.4751897
+ ],
+ [
+ -72.2865978,
+ 18.4750046
+ ],
+ [
+ -72.2909765,
+ 18.4747268
+ ],
+ [
+ -72.2946579,
+ 18.4749384
+ ],
+ [
+ -72.2973911,
+ 18.476843
+ ]
+ ],
+ [
+ [
+ -72.3466657,
+ 18.5222375
+ ],
+ [
+ -72.346833,
+ 18.5244325
+ ],
+ [
+ -72.3475303,
+ 18.5277645
+ ],
+ [
+ -72.3455501,
+ 18.5291131
+ ],
+ [
+ -72.3403069,
+ 18.5292189
+ ],
+ [
+ -72.3383267,
+ 18.5280289
+ ],
+ [
+ -72.3369043,
+ 18.530118
+ ],
+ [
+ -72.3338086,
+ 18.5296684
+ ],
+ [
+ -72.3289279,
+ 18.5270769
+ ],
+ [
+ -72.328649,
+ 18.5253316
+ ],
+ [
+ -72.3292068,
+ 18.5232689
+ ],
+ [
+ -72.330406,
+ 18.5220524
+ ],
+ [
+ -72.3321631,
+ 18.5221847
+ ],
+ [
+ -72.3322467,
+ 18.5191963
+ ],
+ [
+ -72.3369183,
+ 18.5183633
+ ],
+ [
+ -72.3382012,
+ 18.5184691
+ ],
+ [
+ -72.3381454,
+ 18.5181782
+ ],
+ [
+ -72.3411993,
+ 18.5177947
+ ],
+ [
+ -72.3454943,
+ 18.5171997
+ ],
+ [
+ -72.3492595,
+ 18.517279
+ ],
+ [
+ -72.3504308,
+ 18.5188922
+ ],
+ [
+ -72.3503472,
+ 18.5206112
+ ],
+ [
+ -72.3496778,
+ 18.5220392
+ ]
+ ],
+ [
+ [
+ -72.3303078,
+ 18.5486462
+ ],
+ [
+ -72.3429687,
+ 18.5508149
+ ],
+ [
+ -72.3433236,
+ 18.5530585
+ ],
+ [
+ -72.3413121,
+ 18.5614341
+ ],
+ [
+ -72.3390639,
+ 18.5613593
+ ],
+ [
+ -72.3384723,
+ 18.5638271
+ ],
+ [
+ -72.3375257,
+ 18.5654348
+ ],
+ [
+ -72.3348436,
+ 18.5650609
+ ],
+ [
+ -72.3311755,
+ 18.5638271
+ ],
+ [
+ -72.3312149,
+ 18.5616211
+ ],
+ [
+ -72.3232082,
+ 18.5606863
+ ],
+ [
+ -72.3212361,
+ 18.559602
+ ],
+ [
+ -72.3208023,
+ 18.5587046
+ ],
+ [
+ -72.3208811,
+ 18.557882
+ ],
+ [
+ -72.3259493,
+ 18.5580274
+ ],
+ [
+ -72.3266186,
+ 18.5581993
+ ],
+ [
+ -72.3259214,
+ 18.5577498
+ ],
+ [
+ -72.3250986,
+ 18.5573797
+ ],
+ [
+ -72.3233767,
+ 18.552263
+ ],
+ [
+ -72.3245994,
+ 18.5478507
+ ],
+ [
+ -72.3288986,
+ 18.5483742
+ ],
+ [
+ -72.329979,
+ 18.5489548
+ ]
+ ],
+ [
+ [
+ -72.3231383,
+ 18.5269828
+ ],
+ [
+ -72.3223434,
+ 18.528067
+ ],
+ [
+ -72.3209629,
+ 18.5279745
+ ],
+ [
+ -72.3207816,
+ 18.5271282
+ ],
+ [
+ -72.3208513,
+ 18.5253697
+ ],
+ [
+ -72.3214649,
+ 18.5249598
+ ],
+ [
+ -72.3225666,
+ 18.5248937
+ ],
+ [
+ -72.3228454,
+ 18.52533
+ ],
+ [
+ -72.3232359,
+ 18.5264804
+ ]
+ ],
+ [
+ [
+ -72.2160832,
+ 18.6457752
+ ],
+ [
+ -72.2159649,
+ 18.6553795
+ ],
+ [
+ -72.2030279,
+ 18.6558279
+ ],
+ [
+ -72.1947057,
+ 18.6553421
+ ],
+ [
+ -72.1922208,
+ 18.6545573
+ ],
+ [
+ -72.1920631,
+ 18.6521283
+ ],
+ [
+ -72.193483,
+ 18.6477559
+ ],
+ [
+ -72.201253,
+ 18.6385249
+ ],
+ [
+ -72.2069327,
+ 18.6388239
+ ],
+ [
+ -72.2120996,
+ 18.6424117
+ ],
+ [
+ -72.2118068,
+ 18.6430591
+ ],
+ [
+ -72.2121693,
+ 18.6426892
+ ],
+ [
+ -72.2127968,
+ 18.6427552
+ ],
+ [
+ -72.2134662,
+ 18.6431252
+ ],
+ [
+ -72.2135638,
+ 18.6437462
+ ],
+ [
+ -72.2154176,
+ 18.6443947
+ ],
+ [
+ -72.2158909,
+ 18.6450301
+ ]
+ ],
+ [
+ [
+ -72.2867654,
+ 18.6482017
+ ],
+ [
+ -72.2900977,
+ 18.6527446
+ ],
+ [
+ -72.28981,
+ 18.6536532
+ ],
+ [
+ -72.2900738,
+ 18.6542664
+ ],
+ [
+ -72.290721,
+ 18.6537667
+ ],
+ [
+ -72.2910327,
+ 18.6544709
+ ],
+ [
+ -72.2912485,
+ 18.654221
+ ],
+ [
+ -72.29168,
+ 18.6558905
+ ],
+ [
+ -72.2912245,
+ 18.656606
+ ],
+ [
+ -72.2922673,
+ 18.65597
+ ],
+ [
+ -72.2926869,
+ 18.6567536
+ ],
+ [
+ -72.2930705,
+ 18.6567309
+ ],
+ [
+ -72.2941253,
+ 18.6581846
+ ],
+ [
+ -72.2960192,
+ 18.6608421
+ ],
+ [
+ -72.2959713,
+ 18.6619096
+ ],
+ [
+ -72.2932862,
+ 18.664567
+ ],
+ [
+ -72.2906731,
+ 18.6659979
+ ],
+ [
+ -72.2895943,
+ 18.6661342
+ ],
+ [
+ -72.2895943,
+ 18.6665657
+ ],
+ [
+ -72.2877004,
+ 18.6664749
+ ],
+ [
+ -72.2875805,
+ 18.6676559
+ ],
+ [
+ -72.2831214,
+ 18.6697227
+ ],
+ [
+ -72.2796453,
+ 18.6696546
+ ],
+ [
+ -72.2784311,
+ 18.6690787
+ ],
+ [
+ -72.2783972,
+ 18.6687736
+ ],
+ [
+ -72.277736,
+ 18.6691671
+ ],
+ [
+ -72.2774394,
+ 18.669143
+ ],
+ [
+ -72.2770071,
+ 18.6683159
+ ],
+ [
+ -72.2765575,
+ 18.6681125
+ ],
+ [
+ -72.2765385,
+ 18.6680583
+ ],
+ [
+ -72.2752319,
+ 18.6685239
+ ],
+ [
+ -72.2749292,
+ 18.6674649
+ ],
+ [
+ -72.2746416,
+ 18.6674309
+ ],
+ [
+ -72.2734668,
+ 18.6682145
+ ],
+ [
+ -72.2732271,
+ 18.6682712
+ ],
+ [
+ -72.2726757,
+ 18.6671583
+ ],
+ [
+ -72.2719147,
+ 18.6674288
+ ],
+ [
+ -72.2718808,
+ 18.6673405
+ ],
+ [
+ -72.2688149,
+ 18.6681868
+ ],
+ [
+ -72.2688269,
+ 18.6671761
+ ],
+ [
+ -72.2690786,
+ 18.6668241
+ ],
+ [
+ -72.2688149,
+ 18.66679
+ ],
+ [
+ -72.2681077,
+ 18.6670739
+ ],
+ [
+ -72.2676282,
+ 18.6673805
+ ],
+ [
+ -72.2675563,
+ 18.6666878
+ ],
+ [
+ -72.266861,
+ 18.666949
+ ],
+ [
+ -72.2655904,
+ 18.6673578
+ ],
+ [
+ -72.2654466,
+ 18.6670058
+ ],
+ [
+ -72.2647514,
+ 18.6674146
+ ],
+ [
+ -72.2629893,
+ 18.6681868
+ ],
+ [
+ -72.2628455,
+ 18.6681754
+ ],
+ [
+ -72.2626537,
+ 18.6676076
+ ],
+ [
+ -72.2623001,
+ 18.6677098
+ ],
+ [
+ -72.2624799,
+ 18.6679199
+ ],
+ [
+ -72.2624799,
+ 18.6682322
+ ],
+ [
+ -72.262306,
+ 18.6682606
+ ],
+ [
+ -72.2620963,
+ 18.6679654
+ ],
+ [
+ -72.2622761,
+ 18.6689193
+ ],
+ [
+ -72.2601484,
+ 18.6688966
+ ],
+ [
+ -72.2542749,
+ 18.6687944
+ ],
+ [
+ -72.2505388,
+ 18.6683476
+ ],
+ [
+ -72.2504371,
+ 18.669536
+ ],
+ [
+ -72.2477926,
+ 18.6698893
+ ],
+ [
+ -72.2415204,
+ 18.669793
+ ],
+ [
+ -72.2414187,
+ 18.6741933
+ ],
+ [
+ -72.2389167,
+ 18.6739759
+ ],
+ [
+ -72.2387249,
+ 18.6734649
+ ],
+ [
+ -72.2383653,
+ 18.6733059
+ ],
+ [
+ -72.2387009,
+ 18.6739532
+ ],
+ [
+ -72.2375502,
+ 18.6738964
+ ],
+ [
+ -72.2374183,
+ 18.6735103
+ ],
+ [
+ -72.237742,
+ 18.67334
+ ],
+ [
+ -72.2375142,
+ 18.6732605
+ ],
+ [
+ -72.236843,
+ 18.6734876
+ ],
+ [
+ -72.2364354,
+ 18.6724088
+ ],
+ [
+ -72.2355124,
+ 18.6726019
+ ],
+ [
+ -72.2354045,
+ 18.6724202
+ ],
+ [
+ -72.2353027,
+ 18.6729028
+ ],
+ [
+ -72.2345475,
+ 18.6726871
+ ],
+ [
+ -72.2343077,
+ 18.6724599
+ ],
+ [
+ -72.2342358,
+ 18.6734706
+ ],
+ [
+ -72.2334087,
+ 18.6734592
+ ],
+ [
+ -72.2332889,
+ 18.6733003
+ ],
+ [
+ -72.2327375,
+ 18.6732889
+ ],
+ [
+ -72.2327135,
+ 18.6735047
+ ],
+ [
+ -72.227703,
+ 18.6725281
+ ],
+ [
+ -72.2265283,
+ 18.6716537
+ ],
+ [
+ -72.226804,
+ 18.6715742
+ ],
+ [
+ -72.2274993,
+ 18.6715855
+ ],
+ [
+ -72.2274873,
+ 18.6714493
+ ],
+ [
+ -72.2272899,
+ 18.6714623
+ ],
+ [
+ -72.2272814,
+ 18.6712977
+ ],
+ [
+ -72.2272094,
+ 18.671358
+ ],
+ [
+ -72.2261785,
+ 18.6713693
+ ],
+ [
+ -72.2256032,
+ 18.670881
+ ],
+ [
+ -72.2255073,
+ 18.6694502
+ ],
+ [
+ -72.2261066,
+ 18.6696886
+ ],
+ [
+ -72.2261785,
+ 18.6695949
+ ],
+ [
+ -72.2259837,
+ 18.6695495
+ ],
+ [
+ -72.225777,
+ 18.6691379
+ ],
+ [
+ -72.2253335,
+ 18.6694643
+ ],
+ [
+ -72.2249739,
+ 18.66947
+ ],
+ [
+ -72.2245783,
+ 18.6678802
+ ],
+ [
+ -72.2235525,
+ 18.6677046
+ ],
+ [
+ -72.2235907,
+ 18.6675921
+ ],
+ [
+ -72.2224634,
+ 18.6676283
+ ],
+ [
+ -72.2223659,
+ 18.667022
+ ],
+ [
+ -72.2223277,
+ 18.6670943
+ ],
+ [
+ -72.2219209,
+ 18.667026
+ ],
+ [
+ -72.2208105,
+ 18.6669015
+ ],
+ [
+ -72.220809,
+ 18.6665325
+ ],
+ [
+ -72.2208705,
+ 18.6663593
+ ],
+ [
+ -72.2206023,
+ 18.6668107
+ ],
+ [
+ -72.2203895,
+ 18.6666361
+ ],
+ [
+ -72.2184341,
+ 18.6650535
+ ],
+ [
+ -72.21829,
+ 18.6640979
+ ],
+ [
+ -72.2183493,
+ 18.6608376
+ ],
+ [
+ -72.2187223,
+ 18.6606541
+ ],
+ [
+ -72.2186894,
+ 18.660603
+ ],
+ [
+ -72.2187253,
+ 18.6604525
+ ],
+ [
+ -72.2189771,
+ 18.6603247
+ ],
+ [
+ -72.2187823,
+ 18.6601998
+ ],
+ [
+ -72.2186984,
+ 18.6602367
+ ],
+ [
+ -72.2185815,
+ 18.6600352
+ ],
+ [
+ -72.2186085,
+ 18.6600039
+ ],
+ [
+ -72.2187823,
+ 18.6601345
+ ],
+ [
+ -72.218995,
+ 18.6600181
+ ],
+ [
+ -72.2189111,
+ 18.6599131
+ ],
+ [
+ -72.2189681,
+ 18.6597938
+ ],
+ [
+ -72.2183807,
+ 18.6595837
+ ],
+ [
+ -72.2184728,
+ 18.6539662
+ ],
+ [
+ -72.2201001,
+ 18.6511554
+ ],
+ [
+ -72.225796,
+ 18.6469472
+ ],
+ [
+ -72.2283048,
+ 18.6457265
+ ],
+ [
+ -72.2379335,
+ 18.645855
+ ],
+ [
+ -72.237764,
+ 18.6446985
+ ],
+ [
+ -72.2400355,
+ 18.6432529
+ ],
+ [
+ -72.2455958,
+ 18.6433493
+ ],
+ [
+ -72.2482742,
+ 18.6450358
+ ],
+ [
+ -72.2487488,
+ 18.6436705
+ ],
+ [
+ -72.2511067,
+ 18.6429775
+ ],
+ [
+ -72.2512385,
+ 18.6433409
+ ],
+ [
+ -72.2512625,
+ 18.6431592
+ ],
+ [
+ -72.2514843,
+ 18.6431365
+ ],
+ [
+ -72.2513284,
+ 18.6429718
+ ],
+ [
+ -72.2533602,
+ 18.6423471
+ ],
+ [
+ -72.253516,
+ 18.6426765
+ ],
+ [
+ -72.2539535,
+ 18.6425402
+ ],
+ [
+ -72.2541453,
+ 18.642932
+ ],
+ [
+ -72.2543851,
+ 18.6428696
+ ],
+ [
+ -72.2543791,
+ 18.6427503
+ ],
+ [
+ -72.2564168,
+ 18.6423244
+ ],
+ [
+ -72.2566925,
+ 18.6431365
+ ],
+ [
+ -72.2568783,
+ 18.6428582
+ ],
+ [
+ -72.2568184,
+ 18.6425288
+ ],
+ [
+ -72.258843,
+ 18.6420991
+ ],
+ [
+ -72.258885,
+ 18.6422467
+ ],
+ [
+ -72.2592626,
+ 18.6422297
+ ],
+ [
+ -72.2596461,
+ 18.6424057
+ ],
+ [
+ -72.2592206,
+ 18.6406907
+ ],
+ [
+ -72.2599545,
+ 18.6404815
+ ],
+ [
+ -72.2601156,
+ 18.6406341
+ ],
+ [
+ -72.2601156,
+ 18.6399393
+ ],
+ [
+ -72.2615268,
+ 18.6394669
+ ],
+ [
+ -72.2626056,
+ 18.6391034
+ ],
+ [
+ -72.2654465,
+ 18.6387286
+ ],
+ [
+ -72.2719433,
+ 18.6386832
+ ],
+ [
+ -72.272201,
+ 18.6388649
+ ],
+ [
+ -72.2730341,
+ 18.6394158
+ ],
+ [
+ -72.273166,
+ 18.6412558
+ ],
+ [
+ -72.2738732,
+ 18.6410286
+ ],
+ [
+ -72.2742208,
+ 18.6416079
+ ],
+ [
+ -72.2752187,
+ 18.6416987
+ ],
+ [
+ -72.2754524,
+ 18.6415738
+ ],
+ [
+ -72.2755513,
+ 18.6416874
+ ],
+ [
+ -72.2755394,
+ 18.6417527
+ ],
+ [
+ -72.2764713,
+ 18.6418634
+ ],
+ [
+ -72.276753,
+ 18.6418975
+ ],
+ [
+ -72.2762953,
+ 18.6426002
+ ],
+ [
+ -72.2774226,
+ 18.6429978
+ ],
+ [
+ -72.277982,
+ 18.6427247
+ ],
+ [
+ -72.2785796,
+ 18.6431303
+ ],
+ [
+ -72.2785669,
+ 18.6432307
+ ],
+ [
+ -72.2789017,
+ 18.6433471
+ ],
+ [
+ -72.279851,
+ 18.6439655
+ ],
+ [
+ -72.2858703,
+ 18.6469651
+ ]
+ ],
+ [
+ [
+ -72.5557247,
+ 18.5305893
+ ],
+ [
+ -72.5555866,
+ 18.5367036
+ ],
+ [
+ -72.554995,
+ 18.537975
+ ],
+ [
+ -72.5488026,
+ 18.537919
+ ],
+ [
+ -72.5486646,
+ 18.5372832
+ ],
+ [
+ -72.548842,
+ 18.5306267
+ ],
+ [
+ -72.5493745,
+ 18.5301031
+ ],
+ [
+ -72.555133,
+ 18.5301218
+ ]
+ ],
+ [
+ [
+ -72.6235278,
+ 18.5079877
+ ],
+ [
+ -72.6234441,
+ 18.5095217
+ ],
+ [
+ -72.6226074,
+ 18.5104341
+ ],
+ [
+ -72.6204878,
+ 18.511849
+ ],
+ [
+ -72.6183403,
+ 18.5107514
+ ],
+ [
+ -72.6162207,
+ 18.5083183
+ ],
+ [
+ -72.6162625,
+ 18.506467
+ ],
+ [
+ -72.618661,
+ 18.5044438
+ ],
+ [
+ -72.6204041,
+ 18.5044967
+ ],
+ [
+ -72.6228305,
+ 18.506996
+ ]
+ ]
+ ]
+ },
+ {
+ "name": "Ireland Bartholomew Quarter-Inch 1940",
+ "type": "tms",
+ "template": "http://geo.nls.uk/maps/ireland/bartholomew/{zoom}/{x}/{-y}.png",
+ "scaleExtent": [
+ 5,
+ 13
+ ],
+ "polygon": [
+ [
+ [
+ -8.8312773,
+ 55.3963337
+ ],
+ [
+ -7.3221271,
+ 55.398605
+ ],
+ [
+ -7.2891331,
+ 55.4333162
+ ],
+ [
+ -7.2368042,
+ 55.4530757
+ ],
+ [
+ -7.18881,
+ 55.4497995
+ ],
+ [
+ -7.1528144,
+ 55.3968384
+ ],
+ [
+ -6.90561,
+ 55.394903
+ ],
+ [
+ -6.9047153,
+ 55.3842114
+ ],
+ [
+ -5.8485282,
+ 55.3922956
+ ],
+ [
+ -5.8378629,
+ 55.248676
+ ],
+ [
+ -5.3614762,
+ 55.2507024
+ ],
+ [
+ -5.3899172,
+ 53.8466464
+ ],
+ [
+ -5.8734141,
+ 53.8487436
+ ],
+ [
+ -5.8983,
+ 52.8256258
+ ],
+ [
+ -6.0191742,
+ 52.8256258
+ ],
+ [
+ -6.0262844,
+ 51.7712367
+ ],
+ [
+ -8.1131422,
+ 51.7712367
+ ],
+ [
+ -8.1273627,
+ 51.3268839
+ ],
+ [
+ -10.6052842,
+ 51.3091083
+ ],
+ [
+ -10.6271879,
+ 52.0328254
+ ],
+ [
+ -10.6469845,
+ 52.0322454
+ ],
+ [
+ -10.6469845,
+ 52.0440365
+ ],
+ [
+ -10.6271879,
+ 52.0448095
+ ],
+ [
+ -10.6290733,
+ 52.0745627
+ ],
+ [
+ -10.6699234,
+ 52.0743695
+ ],
+ [
+ -10.6702376,
+ 52.0876941
+ ],
+ [
+ -10.6312729,
+ 52.0898179
+ ],
+ [
+ -10.6393128,
+ 52.4147202
+ ],
+ [
+ -10.3137689,
+ 52.4185533
+ ],
+ [
+ -10.3166401,
+ 53.3341342
+ ],
+ [
+ -10.3699669,
+ 53.3330727
+ ],
+ [
+ -10.385965,
+ 54.3534472
+ ],
+ [
+ -8.8163777,
+ 54.3586265
+ ],
+ [
+ -8.8173427,
+ 54.6595721
+ ],
+ [
+ -8.8413398,
+ 54.6616284
+ ],
+ [
+ -8.8422286,
+ 54.6929749
+ ],
+ [
+ -8.8315632,
+ 54.7145436
+ ],
+ [
+ -8.8151208,
+ 54.7145436
+ ]
+ ]
+ ],
+ "terms_url": "http://geo.nls.uk/maps/",
+ "terms_text": "National Library of Scotland Historic Maps"
+ },
+ {
+ "name": "Ireland British War Office One-Inch 1941-43 GSGS 4136",
+ "type": "tms",
+ "template": "http://geo.nls.uk/maps/ireland/gsgs4136/{zoom}/{x}/{-y}.png",
+ "scaleExtent": [
+ 5,
+ 15
+ ],
+ "polygon": [
+ [
+ [
+ -10.0847426,
+ 51.4147902
+ ],
+ [
+ -10.0906535,
+ 51.5064103
+ ],
+ [
+ -10.4564222,
+ 51.5003961
+ ],
+ [
+ -10.5005905,
+ 52.3043019
+ ],
+ [
+ -10.0837522,
+ 52.312741
+ ],
+ [
+ -10.0840973,
+ 52.3404698
+ ],
+ [
+ -10.055802,
+ 52.3408915
+ ],
+ [
+ -10.0768509,
+ 52.7628238
+ ],
+ [
+ -9.7780248,
+ 52.7684611
+ ],
+ [
+ -9.7818205,
+ 52.8577261
+ ],
+ [
+ -9.6337877,
+ 52.8596012
+ ],
+ [
+ -9.6449626,
+ 53.1294502
+ ],
+ [
+ -10.0919663,
+ 53.1227152
+ ],
+ [
+ -10.1051422,
+ 53.3912913
+ ],
+ [
+ -10.4052593,
+ 53.3866349
+ ],
+ [
+ -10.4530828,
+ 54.193502
+ ],
+ [
+ -10.2998523,
+ 54.1974988
+ ],
+ [
+ -10.3149801,
+ 54.4669592
+ ],
+ [
+ -8.9276095,
+ 54.4853897
+ ],
+ [
+ -8.9339534,
+ 54.7546562
+ ],
+ [
+ -8.7773069,
+ 54.755501
+ ],
+ [
+ -8.7826749,
+ 55.0252208
+ ],
+ [
+ -8.9402974,
+ 55.0238221
+ ],
+ [
+ -8.9451773,
+ 55.2934155
+ ],
+ [
+ -7.528039,
+ 55.2970274
+ ],
+ [
+ -7.525599,
+ 55.3874955
+ ],
+ [
+ -7.0541955,
+ 55.3841691
+ ],
+ [
+ -7.0556595,
+ 55.2939712
+ ],
+ [
+ -6.3241545,
+ 55.2859128
+ ],
+ [
+ -6.3217146,
+ 55.3253556
+ ],
+ [
+ -6.1035807,
+ 55.3223016
+ ],
+ [
+ -6.1045566,
+ 55.2828557
+ ],
+ [
+ -5.7985836,
+ 55.2772968
+ ],
+ [
+ -5.8117595,
+ 55.0087135
+ ],
+ [
+ -5.656577,
+ 55.0056351
+ ],
+ [
+ -5.6721928,
+ 54.7355021
+ ],
+ [
+ -5.3618278,
+ 54.729585
+ ],
+ [
+ -5.3964755,
+ 54.1917889
+ ],
+ [
+ -5.855679,
+ 54.2017807
+ ],
+ [
+ -5.9220464,
+ 52.8524504
+ ],
+ [
+ -6.070885,
+ 52.8551025
+ ],
+ [
+ -6.1030927,
+ 52.1373337
+ ],
+ [
+ -6.8331336,
+ 52.1463183
+ ],
+ [
+ -6.8355736,
+ 52.0578908
+ ],
+ [
+ -7.5641506,
+ 52.0617913
+ ],
+ [
+ -7.5661026,
+ 51.7921593
+ ],
+ [
+ -8.147305,
+ 51.792763
+ ],
+ [
+ -8.146329,
+ 51.7033331
+ ],
+ [
+ -8.2912636,
+ 51.7027283
+ ],
+ [
+ -8.2897996,
+ 51.5227274
+ ],
+ [
+ -9.1174397,
+ 51.516958
+ ],
+ [
+ -9.1179277,
+ 51.4625685
+ ],
+ [
+ -9.3692452,
+ 51.4616564
+ ],
+ [
+ -9.3672933,
+ 51.4254613
+ ]
+ ]
+ ],
+ "terms_url": "http://geo.nls.uk/maps/",
+ "terms_text": "National Library of Scotland Historic Maps"
+ },
+ {
+ "name": "Ireland EEA CORINE 2006",
+ "type": "tms",
+ "template": "http://a.tile.openstreetmap.ie/tiles/corine/{zoom}/{x}/{y}.png",
+ "scaleExtent": [
+ 5,
+ 16
+ ],
+ "polygon": [
+ [
+ [
+ -5.842956,
+ 53.8627976
+ ],
+ [
+ -5.8341575,
+ 53.7633541
+ ],
+ [
+ -5.6267647,
+ 53.5383692
+ ],
+ [
+ -5.9648778,
+ 52.1631197
+ ],
+ [
+ -6.0453211,
+ 52.0527275
+ ],
+ [
+ -6.1823261,
+ 51.9699475
+ ],
+ [
+ -6.3960035,
+ 51.9234618
+ ],
+ [
+ -6.5945978,
+ 51.883911
+ ],
+ [
+ -7.2481994,
+ 51.9056295
+ ],
+ [
+ -7.341212,
+ 51.8148076
+ ],
+ [
+ -8.1971787,
+ 51.5037019
+ ],
+ [
+ -8.3191005,
+ 51.4167737
+ ],
+ [
+ -9.4478202,
+ 51.1991221
+ ],
+ [
+ -9.9015706,
+ 51.2266802
+ ],
+ [
+ -10.472215,
+ 51.4050139
+ ],
+ [
+ -10.8857437,
+ 51.6770619
+ ],
+ [
+ -11.035318,
+ 52.0620016
+ ],
+ [
+ -10.9950963,
+ 52.1831616
+ ],
+ [
+ -10.8178697,
+ 52.3139827
+ ],
+ [
+ -9.8839736,
+ 52.9032208
+ ],
+ [
+ -10.1165049,
+ 52.9676141
+ ],
+ [
+ -10.5514014,
+ 53.3317027
+ ],
+ [
+ -10.6896633,
+ 53.5854022
+ ],
+ [
+ -10.6444139,
+ 54.0100436
+ ],
+ [
+ -10.5501445,
+ 54.257482
+ ],
+ [
+ -10.2824192,
+ 54.4742405
+ ],
+ [
+ -9.8073011,
+ 54.5705346
+ ],
+ [
+ -9.196435,
+ 54.5486695
+ ],
+ [
+ -9.2253443,
+ 54.7000264
+ ],
+ [
+ -8.8985435,
+ 55.1363582
+ ],
+ [
+ -8.0476045,
+ 55.4711977
+ ],
+ [
+ -7.4367384,
+ 55.6191092
+ ],
+ [
+ -7.2205471,
+ 55.6205288
+ ],
+ [
+ -6.8258723,
+ 55.5608644
+ ],
+ [
+ -6.0679458,
+ 55.3727567
+ ],
+ [
+ -5.5639184,
+ 55.0759594
+ ],
+ [
+ -5.0649187,
+ 54.4640142
+ ],
+ [
+ -5.2572284,
+ 54.1582424
+ ]
+ ]
+ ],
+ "terms_url": "http://www.eea.europa.eu/data-and-maps/data/clc-2006-vector-data-version-1",
+ "terms_text": "EEA Corine 2006"
+ },
+ {
+ "name": "Ireland EEA GMES Urban Atlas",
+ "type": "tms",
+ "template": "http://a.tile.openstreetmap.ie/tiles/urbanatlas/{zoom}/{x}/{y}.png",
+ "scaleExtent": [
+ 5,
+ 17
+ ],
+ "polygon": [
+ [
+ [
+ -9.2759602,
+ 52.7993666
+ ],
+ [
+ -9.215509,
+ 52.8276933
+ ],
+ [
+ -9.1086618,
+ 52.9128016
+ ],
+ [
+ -9.0196831,
+ 52.8837107
+ ],
+ [
+ -8.8760649,
+ 52.8978445
+ ],
+ [
+ -8.8001797,
+ 52.8833558
+ ],
+ [
+ -8.7665597,
+ 52.9065354
+ ],
+ [
+ -8.5938079,
+ 52.9238592
+ ],
+ [
+ -8.5241972,
+ 52.8869724
+ ],
+ [
+ -8.4956786,
+ 52.9105906
+ ],
+ [
+ -8.3506448,
+ 52.9238592
+ ],
+ [
+ -8.2718204,
+ 52.9492401
+ ],
+ [
+ -8.2249679,
+ 52.8991338
+ ],
+ [
+ -8.1564001,
+ 52.9149986
+ ],
+ [
+ -8.0881237,
+ 52.7630417
+ ],
+ [
+ -8.1360092,
+ 52.7239783
+ ],
+ [
+ -8.1570652,
+ 52.6766443
+ ],
+ [
+ -8.2059695,
+ 52.6185385
+ ],
+ [
+ -8.2025734,
+ 52.5954396
+ ],
+ [
+ -8.2231242,
+ 52.5599691
+ ],
+ [
+ -8.2236294,
+ 52.5095371
+ ],
+ [
+ -8.2976651,
+ 52.5025088
+ ],
+ [
+ -8.3295888,
+ 52.4721087
+ ],
+ [
+ -8.3589695,
+ 52.4986072
+ ],
+ [
+ -8.3737385,
+ 52.4764529
+ ],
+ [
+ -8.432326,
+ 52.4342609
+ ],
+ [
+ -8.4754569,
+ 52.4216289
+ ],
+ [
+ -8.5017727,
+ 52.3870011
+ ],
+ [
+ -8.5476205,
+ 52.3681351
+ ],
+ [
+ -8.6444103,
+ 52.3376422
+ ],
+ [
+ -8.6841451,
+ 52.3660614
+ ],
+ [
+ -8.8154099,
+ 52.3721014
+ ],
+ [
+ -8.8614233,
+ 52.3521652
+ ],
+ [
+ -8.9074451,
+ 52.3824674
+ ],
+ [
+ -8.9388551,
+ 52.3789166
+ ],
+ [
+ -8.9782502,
+ 52.4093811
+ ],
+ [
+ -9.0298715,
+ 52.4104169
+ ],
+ [
+ -9.1059449,
+ 52.420981
+ ],
+ [
+ -9.1084962,
+ 52.4415071
+ ],
+ [
+ -9.140702,
+ 52.4650891
+ ],
+ [
+ -9.1315765,
+ 52.5136207
+ ],
+ [
+ -9.1739699,
+ 52.5620573
+ ],
+ [
+ -9.1426235,
+ 52.589645
+ ],
+ [
+ -9.1542382,
+ 52.610216
+ ],
+ [
+ -9.1426231,
+ 52.6387401
+ ],
+ [
+ -9.1776844,
+ 52.6447573
+ ],
+ [
+ -9.2012184,
+ 52.6526248
+ ],
+ [
+ -9.2036198,
+ 52.6686468
+ ],
+ [
+ -9.2238348,
+ 52.6706578
+ ],
+ [
+ -9.2161072,
+ 52.6919412
+ ],
+ [
+ -9.1882395,
+ 52.7057242
+ ],
+ [
+ -9.2750099,
+ 52.7350292
+ ],
+ [
+ -9.2601152,
+ 52.7616711
+ ]
+ ],
+ [
+ [
+ -7.307313219981238,
+ 53.81625879275365
+ ],
+ [
+ -7.245858447032101,
+ 53.78300449111207
+ ],
+ [
+ -7.15144468970801,
+ 53.81179938127503
+ ],
+ [
+ -7.086900011973722,
+ 53.784424420834
+ ],
+ [
+ -7.0347149533800435,
+ 53.77996162275688
+ ],
+ [
+ -6.975320116954343,
+ 53.788481098127924
+ ],
+ [
+ -6.928628222423156,
+ 53.81443454540607
+ ],
+ [
+ -6.992829577403537,
+ 53.86609081229548
+ ],
+ [
+ -6.975320116954343,
+ 53.87945028968944
+ ],
+ [
+ -6.949914233165313,
+ 53.87094929783329
+ ],
+ [
+ -6.9375546140247035,
+ 53.87540241385127
+ ],
+ [
+ -6.936867968516893,
+ 53.896649390754646
+ ],
+ [
+ -6.897042529063821,
+ 53.889770599553906
+ ],
+ [
+ -6.867516772227924,
+ 53.880259817835736
+ ],
+ [
+ -6.851037280040446,
+ 53.88450958346468
+ ],
+ [
+ -6.842454211192801,
+ 53.89786317755242
+ ],
+ [
+ -6.812928454356904,
+ 53.90069520963246
+ ],
+ [
+ -6.79850889869286,
+ 53.89280549994937
+ ],
+ [
+ -6.789925829845217,
+ 53.89462633440526
+ ],
+ [
+ -6.791985766368652,
+ 53.904538374710896
+ ],
+ [
+ -6.778939501720231,
+ 53.918087767078354
+ ],
+ [
+ -6.77001311011868,
+ 53.91505470292794
+ ],
+ [
+ -6.75868345923979,
+ 53.921727153244476
+ ],
+ [
+ -6.744263903575747,
+ 53.916065748791254
+ ],
+ [
+ -6.727441088634364,
+ 53.92334455637637
+ ],
+ [
+ -6.713021532970319,
+ 53.90777445003927
+ ],
+ [
+ -6.684182421642232,
+ 53.90292024303218
+ ],
+ [
+ -6.623757616954815,
+ 53.88187882710815
+ ],
+ [
+ -6.590455309825955,
+ 53.857789593974296
+ ],
+ [
+ -6.591141955333765,
+ 53.835509894663346
+ ],
+ [
+ -6.574319140392382,
+ 53.82254170362619
+ ],
+ [
+ -6.571572558361136,
+ 53.804703885117576
+ ],
+ [
+ -6.5533764524041285,
+ 53.79983770791046
+ ],
+ [
+ -6.541360156017425,
+ 53.78300449111207
+ ],
+ [
+ -6.511491076427622,
+ 53.76900546961285
+ ],
+ [
+ -6.472695605236269,
+ 53.77326653566421
+ ],
+ [
+ -6.443513171154276,
+ 53.76393220797015
+ ],
+ [
+ -6.44728972144724,
+ 53.75114486961979
+ ],
+ [
+ -6.4775021237909485,
+ 53.728199094666586
+ ],
+ [
+ -6.459649340587848,
+ 53.71682309412751
+ ],
+ [
+ -6.435616747814443,
+ 53.72230833571077
+ ],
+ [
+ -6.4198239011347775,
+ 53.72921465935537
+ ],
+ [
+ -6.4009411496699595,
+ 53.72169889975152
+ ],
+ [
+ -6.375878588634836,
+ 53.718042098526006
+ ],
+ [
+ -6.359055773693453,
+ 53.708695495259434
+ ],
+ [
+ -6.340173022228636,
+ 53.708085862042424
+ ],
+ [
+ -6.329873339611461,
+ 53.71296268045594
+ ],
+ [
+ -6.325753466564592,
+ 53.72210519137233
+ ],
+ [
+ -6.2938244504513525,
+ 53.72576163932632
+ ],
+ [
+ -6.265328661877173,
+ 53.7363229253304
+ ],
+ [
+ -6.240952746349864,
+ 53.734292114843086
+ ],
+ [
+ -6.180871264416349,
+ 53.632015710147016
+ ],
+ [
+ -6.092793818322125,
+ 53.588038288422446
+ ],
+ [
+ -5.985734079608837,
+ 53.49383447350347
+ ],
+ [
+ -6.0887447432153685,
+ 53.27174268379562
+ ],
+ [
+ -6.033272979232964,
+ 53.1191110041494
+ ],
+ [
+ -5.984663357119282,
+ 52.9651254915577
+ ],
+ [
+ -6.122679104189409,
+ 52.73207538466633
+ ],
+ [
+ -6.185163845400262,
+ 52.73706461957944
+ ],
+ [
+ -6.1899703639549415,
+ 52.76075568810044
+ ],
+ [
+ -6.319059719423517,
+ 52.782357357522855
+ ],
+ [
+ -6.393904079774976,
+ 52.7790347214105
+ ],
+ [
+ -6.465315212587381,
+ 52.6946379192593
+ ],
+ [
+ -6.534666408876349,
+ 52.673409093161446
+ ],
+ [
+ -6.612257351259057,
+ 52.69255711803012
+ ],
+ [
+ -6.6692489284074155,
+ 52.74745702505679
+ ],
+ [
+ -6.671308864930852,
+ 52.76948072949997
+ ],
+ [
+ -6.720747341493285,
+ 52.7748810695361
+ ],
+ [
+ -6.71456753192298,
+ 52.80311808637125
+ ],
+ [
+ -6.658949245790243,
+ 52.84709806982182
+ ],
+ [
+ -6.582044948915348,
+ 52.81349473557279
+ ],
+ [
+ -6.547712673524768,
+ 52.83133677935633
+ ],
+ [
+ -6.531233181337292,
+ 52.87404491274922
+ ],
+ [
+ -6.617750515321548,
+ 52.87528820923615
+ ],
+ [
+ -6.728987087587023,
+ 52.90635903963372
+ ],
+ [
+ -6.780485500672891,
+ 52.859122574848655
+ ],
+ [
+ -6.870436062196207,
+ 52.85165948109425
+ ],
+ [
+ -6.938413967469552,
+ 52.86658438536895
+ ],
+ [
+ -6.965879787782016,
+ 52.89766145203082
+ ],
+ [
+ -6.987852444031986,
+ 52.969260966642985
+ ],
+ [
+ -7.039350857117853,
+ 52.9560260536776
+ ],
+ [
+ -7.109388698914634,
+ 53.007288776633686
+ ],
+ [
+ -7.068876613953752,
+ 53.058078015357786
+ ],
+ [
+ -7.088789333680287,
+ 53.11869890949892
+ ],
+ [
+ -7.119688381531809,
+ 53.15000684568904
+ ],
+ [
+ -7.105955471375577,
+ 53.16112391039828
+ ],
+ [
+ -7.127928127625547,
+ 53.17223809655703
+ ],
+ [
+ -7.180113186219227,
+ 53.182526443342745
+ ],
+ [
+ -7.160887112000503,
+ 53.19898266621498
+ ],
+ [
+ -7.057890285828767,
+ 53.19898266621498
+ ],
+ [
+ -7.048963894227218,
+ 53.217077217179636
+ ],
+ [
+ -7.0915359157115345,
+ 53.235575105358386
+ ],
+ [
+ -7.0434707301647235,
+ 53.25735126035676
+ ],
+ [
+ -7.05102383075065,
+ 53.29717703664696
+ ],
+ [
+ -6.996778835633536,
+ 53.31112780504489
+ ],
+ [
+ -7.044157375672535,
+ 53.33368557548294
+ ],
+ [
+ -7.105955471375576,
+ 53.371801590024276
+ ],
+ [
+ -7.22050647653913,
+ 53.432465115081854
+ ],
+ [
+ -7.149441429887032,
+ 53.45731709817442
+ ],
+ [
+ -7.099891489102085,
+ 53.463915962572514
+ ],
+ [
+ -7.0744645458045445,
+ 53.48370640260363
+ ],
+ [
+ -7.079028356140001,
+ 53.504650927752664
+ ],
+ [
+ -7.047733656696876,
+ 53.515119311359335
+ ],
+ [
+ -7.029478415355053,
+ 53.54147267392419
+ ],
+ [
+ -7.054253385747527,
+ 53.56471202500164
+ ],
+ [
+ -7.009267255298033,
+ 53.58561652973758
+ ],
+ [
+ -6.992641946218873,
+ 53.602642188744426
+ ],
+ [
+ -6.989056095241016,
+ 53.62739453790707
+ ],
+ [
+ -6.9717788132567895,
+ 53.63686620586593
+ ],
+ [
+ -6.9633031654909425,
+ 53.650973114934644
+ ],
+ [
+ -6.9871001765258205,
+ 53.66623418009986
+ ],
+ [
+ -6.999813648174589,
+ 53.67086935885432
+ ],
+ [
+ -7.008289295940436,
+ 53.65908728051006
+ ],
+ [
+ -7.044473792171549,
+ 53.65367801032349
+ ],
+ [
+ -7.066640870943764,
+ 53.63918547390694
+ ],
+ [
+ -7.101847407817279,
+ 53.65870092708686
+ ],
+ [
+ -7.120754622064167,
+ 53.672993645380515
+ ],
+ [
+ -7.137379931143327,
+ 53.66893809633893
+ ],
+ [
+ -7.160850955725672,
+ 53.683034277255075
+ ],
+ [
+ -7.174216400279507,
+ 53.686316272406906
+ ],
+ [
+ -7.196057492599188,
+ 53.69017711570491
+ ],
+ [
+ -7.210726882963154,
+ 53.69480966037566
+ ],
+ [
+ -7.247237365646801,
+ 53.71661437518035
+ ],
+ [
+ -7.239413690786019,
+ 53.73223735177976
+ ],
+ [
+ -7.260276823748104,
+ 53.74361339729716
+ ],
+ [
+ -7.2814659431627184,
+ 53.75922634307083
+ ],
+ [
+ -7.289615604476034,
+ 53.77271433845693
+ ],
+ [
+ -7.3238441819919515,
+ 53.78465723043301
+ ],
+ [
+ -7.337209626545788,
+ 53.78658318504567
+ ],
+ [
+ -7.351227044004687,
+ 53.80141007448381
+ ],
+ [
+ -7.307313219981238,
+ 53.81625879275365
+ ]
+ ],
+ [
+ [
+ -5.685433013282673,
+ 54.77854496390836
+ ],
+ [
+ -5.696867084279401,
+ 54.73050346921268
+ ],
+ [
+ -5.8223689524230124,
+ 54.70033215177621
+ ],
+ [
+ -5.878760568989772,
+ 54.649492182564074
+ ],
+ [
+ -5.743404719024681,
+ 54.68128223623249
+ ],
+ [
+ -5.581196917402638,
+ 54.68781619319656
+ ],
+ [
+ -5.571488953592992,
+ 54.67074450064368
+ ],
+ [
+ -5.582915011231644,
+ 54.66440901595977
+ ],
+ [
+ -5.58291501123164,
+ 54.65085746679818
+ ],
+ [
+ -5.6086481910584185,
+ 54.63997082553691
+ ],
+ [
+ -5.6354970593650116,
+ 54.61551371292451
+ ],
+ [
+ -5.728732824433139,
+ 54.6184944610979
+ ],
+ [
+ -5.822612969913913,
+ 54.49193018941315
+ ],
+ [
+ -5.896754545381575,
+ 54.44975600798866
+ ],
+ [
+ -5.936834914186871,
+ 54.38213187386197
+ ],
+ [
+ -6.0187561190025445,
+ 54.36974944197913
+ ],
+ [
+ -6.059257912638059,
+ 54.38280030737259
+ ],
+ [
+ -6.101784280694663,
+ 54.41510088826871
+ ],
+ [
+ -6.1740201072375225,
+ 54.43476829635816
+ ],
+ [
+ -6.216261364689026,
+ 54.42827259213158
+ ],
+ [
+ -6.264329002478664,
+ 54.487825014814625
+ ],
+ [
+ -6.249277519938476,
+ 54.49741303545491
+ ],
+ [
+ -6.288340515296785,
+ 54.53143435197413
+ ],
+ [
+ -6.283750270272458,
+ 54.54447449434036
+ ],
+ [
+ -6.321445027854273,
+ 54.58928767713928
+ ],
+ [
+ -6.264329002478664,
+ 54.604982769755765
+ ],
+ [
+ -6.240052417736423,
+ 54.59541999854735
+ ],
+ [
+ -6.098762694536575,
+ 54.631690374598676
+ ],
+ [
+ -6.051950538018501,
+ 54.61314575326238
+ ],
+ [
+ -6.031509408441251,
+ 54.620921248201434
+ ],
+ [
+ -6.002995140908084,
+ 54.65571636730639
+ ],
+ [
+ -6.0647754758974335,
+ 54.6634355452454
+ ],
+ [
+ -6.059920158948984,
+ 54.704134188139534
+ ],
+ [
+ -6.047781866577864,
+ 54.71395188569398
+ ],
+ [
+ -6.120611620804591,
+ 54.801644524994515
+ ],
+ [
+ -6.002141887262449,
+ 54.80836072138932
+ ],
+ [
+ -5.984662746248036,
+ 54.78652900156178
+ ],
+ [
+ -5.685433013282673,
+ 54.77854496390836
+ ]
+ ],
+ [
+ [
+ -9.128658300749114,
+ 53.24759266864586
+ ],
+ [
+ -9.024510568479629,
+ 53.26744820137083
+ ],
+ [
+ -9.016360907166316,
+ 53.26364619217274
+ ],
+ [
+ -9.001854510028616,
+ 53.26588844362053
+ ],
+ [
+ -8.9951717877517,
+ 53.259258838409615
+ ],
+ [
+ -8.973493688658284,
+ 53.262378780650025
+ ],
+ [
+ -8.95230456924367,
+ 53.271444820907114
+ ],
+ [
+ -8.956705386352859,
+ 53.281580911863244
+ ],
+ [
+ -8.961106203462048,
+ 53.28119110665652
+ ],
+ [
+ -8.960780217009516,
+ 53.28908396911955
+ ],
+ [
+ -8.954260487958864,
+ 53.28927883616923
+ ],
+ [
+ -8.95230456924367,
+ 53.30155366854246
+ ],
+ [
+ -8.963714095082308,
+ 53.303793931840495
+ ],
+ [
+ -8.9811543702928,
+ 53.294734752711804
+ ],
+ [
+ -8.985718180628256,
+ 53.30174847871221
+ ],
+ [
+ -9.019946758144176,
+ 53.30768976199425
+ ],
+ [
+ -9.00837423907927,
+ 53.31596722087059
+ ],
+ [
+ -9.01880580556031,
+ 53.31625933715475
+ ],
+ [
+ -9.045862681120513,
+ 53.31275380979257
+ ],
+ [
+ -9.06444390891487,
+ 53.32122500810515
+ ],
+ [
+ -9.080906224767762,
+ 53.307397587062724
+ ],
+ [
+ -9.08106921799403,
+ 53.303404329274585
+ ],
+ [
+ -9.09019683866494,
+ 53.30574189135002
+ ],
+ [
+ -9.095901601584261,
+ 53.298826232852214
+ ],
+ [
+ -9.10128037805105,
+ 53.3008718259498
+ ],
+ [
+ -9.115623781962478,
+ 53.28450433758295
+ ],
+ [
+ -9.121491538108067,
+ 53.2832375443259
+ ],
+ [
+ -9.13273807072044,
+ 53.28557621023763
+ ],
+ [
+ -9.144636576237877,
+ 53.27865728614638
+ ],
+ [
+ -9.13876882009229,
+ 53.26345120822951
+ ],
+ [
+ -9.128658300749114,
+ 53.24759266864586
+ ]
+ ],
+ [
+ [
+ -8.595266214281438,
+ 51.69264788483154
+ ],
+ [
+ -8.55819409885298,
+ 51.69306638852667
+ ],
+ [
+ -8.566697711835303,
+ 51.682644706464686
+ ],
+ [
+ -8.579130708100188,
+ 51.67349700898941
+ ],
+ [
+ -8.544554623426079,
+ 51.66520531197343
+ ],
+ [
+ -8.494765061495364,
+ 51.667778759675976
+ ],
+ [
+ -8.30113898732036,
+ 51.7235009029955
+ ],
+ [
+ -8.268406960495541,
+ 51.784858633837544
+ ],
+ [
+ -8.154536388302146,
+ 51.7814362126791
+ ],
+ [
+ -8.115350159004825,
+ 51.809093351533164
+ ],
+ [
+ -8.068326683848039,
+ 51.870050153657075
+ ],
+ [
+ -8.10059769621054,
+ 51.89964422561186
+ ],
+ [
+ -8.08123508879304,
+ 51.918414974037226
+ ],
+ [
+ -8.09183842142643,
+ 51.95337589170907
+ ],
+ [
+ -8.124570448251253,
+ 51.95479649105758
+ ],
+ [
+ -8.132407694110718,
+ 51.970988142592034
+ ],
+ [
+ -8.099675667285895,
+ 51.978371865876596
+ ],
+ [
+ -8.144394070131078,
+ 52.02151390085561
+ ],
+ [
+ -8.159607547387685,
+ 52.064330945363764
+ ],
+ [
+ -8.140705954432507,
+ 52.07254939152303
+ ],
+ [
+ -8.165600735397863,
+ 52.09294727054506
+ ],
+ [
+ -8.18726841512697,
+ 52.0835993998731
+ ],
+ [
+ -8.2093971093184,
+ 52.10512489114057
+ ],
+ [
+ -8.207092037006792,
+ 52.12494181389489
+ ],
+ [
+ -8.227837687811258,
+ 52.143052434929714
+ ],
+ [
+ -8.222766528725723,
+ 52.16454923557058
+ ],
+ [
+ -8.30298304516965,
+ 52.1829264222872
+ ],
+ [
+ -8.427456949996438,
+ 52.17783811526099
+ ],
+ [
+ -8.46710419375608,
+ 52.169921813849676
+ ],
+ [
+ -8.509978538751975,
+ 52.18405707812542
+ ],
+ [
+ -8.530263175094117,
+ 52.16511480067495
+ ],
+ [
+ -8.574981577939297,
+ 52.18066502436804
+ ],
+ [
+ -8.587889982884295,
+ 52.16963906274442
+ ],
+ [
+ -8.642289689438227,
+ 52.18829678149147
+ ],
+ [
+ -8.719279104645906,
+ 52.15804472022032
+ ],
+ [
+ -8.698533453841442,
+ 52.13541291452849
+ ],
+ [
+ -8.740946784375014,
+ 52.10823956240069
+ ],
+ [
+ -8.77460084012448,
+ 52.05951253229793
+ ],
+ [
+ -8.803183736788409,
+ 52.03768144571248
+ ],
+ [
+ -8.86818677597573,
+ 52.03286015807593
+ ],
+ [
+ -8.870491848287335,
+ 52.01839317543363
+ ],
+ [
+ -8.844214023935015,
+ 51.991148511559096
+ ],
+ [
+ -8.79811257770287,
+ 51.964455373040394
+ ],
+ [
+ -8.782899100446263,
+ 51.931777239822054
+ ],
+ [
+ -8.835915763613228,
+ 51.9292188160068
+ ],
+ [
+ -8.838681850387156,
+ 51.90277322850554
+ ],
+ [
+ -8.802261707863764,
+ 51.89367006943167
+ ],
+ [
+ -8.792580404155013,
+ 51.85695425263326
+ ],
+ [
+ -8.765841565340368,
+ 51.82476769939557
+ ],
+ [
+ -8.758926348405547,
+ 51.80054140901511
+ ],
+ [
+ -8.79811257770287,
+ 51.78628456602828
+ ],
+ [
+ -8.832227647914657,
+ 51.79626482935233
+ ],
+ [
+ -8.836837792537873,
+ 51.77687258059678
+ ],
+ [
+ -8.885705325543944,
+ 51.746055989869106
+ ],
+ [
+ -8.859888515653944,
+ 51.72435763090916
+ ],
+ [
+ -8.807332866949299,
+ 51.71093369500414
+ ],
+ [
+ -8.678248817499297,
+ 51.693505197270746
+ ],
+ [
+ -8.60540853245251,
+ 51.67835695335278
+ ],
+ [
+ -8.595266214281438,
+ 51.69264788483154
+ ]
+ ],
+ [
+ [
+ -7.138279151048154,
+ 55.06131559970097
+ ],
+ [
+ -7.117994514706011,
+ 54.99631329558348
+ ],
+ [
+ -7.070049010624583,
+ 54.98784996056705
+ ],
+ [
+ -7.076503213097081,
+ 54.93332450204895
+ ],
+ [
+ -7.025791622241725,
+ 54.91159959910791
+ ],
+ [
+ -7.007351043748867,
+ 54.87872502112528
+ ],
+ [
+ -7.024869593317081,
+ 54.8511320998998
+ ],
+ [
+ -6.990754523105296,
+ 54.81661438893913
+ ],
+ [
+ -7.051608432131725,
+ 54.80598761598125
+ ],
+ [
+ -7.115228427932084,
+ 54.80651902101645
+ ],
+ [
+ -7.170550163410654,
+ 54.84847793920564
+ ],
+ [
+ -7.199133060074584,
+ 54.84316909395457
+ ],
+ [
+ -7.222183783190655,
+ 54.85803210052931
+ ],
+ [
+ -7.2111194360949415,
+ 54.862808332627324
+ ],
+ [
+ -7.212041465019584,
+ 54.882438010878076
+ ],
+ [
+ -7.279349576518514,
+ 54.880846771447125
+ ],
+ [
+ -7.273817402970655,
+ 54.91530955931841
+ ],
+ [
+ -7.3033223285592275,
+ 54.915839525718205
+ ],
+ [
+ -7.363254208661015,
+ 54.90894941815292
+ ],
+ [
+ -7.385382902852443,
+ 54.91636948513913
+ ],
+ [
+ -7.391837105324943,
+ 54.93438395336098
+ ],
+ [
+ -7.429640291235302,
+ 54.95291983389722
+ ],
+ [
+ -7.420420001988872,
+ 54.99208185118366
+ ],
+ [
+ -7.410277683817801,
+ 55.03437621938347
+ ],
+ [
+ -7.3577220351131585,
+ 55.057619110599035
+ ],
+ [
+ -7.265519142648871,
+ 55.07557028899173
+ ],
+ [
+ -7.138279151048154,
+ 55.06131559970097
+ ]
+ ],
+ [
+ [
+ -7.190498776293322,
+ 52.26144368927652
+ ],
+ [
+ -7.156844720543858,
+ 52.28443443581867
+ ],
+ [
+ -7.132871968503143,
+ 52.27343421670601
+ ],
+ [
+ -7.113278853854483,
+ 52.26779201951648
+ ],
+ [
+ -7.098295883829036,
+ 52.27230583471742
+ ],
+ [
+ -7.089767116276089,
+ 52.25509445009032
+ ],
+ [
+ -7.07109603055207,
+ 52.259186286149074
+ ],
+ [
+ -7.033984366335195,
+ 52.257352061495865
+ ],
+ [
+ -7.027530163862696,
+ 52.250720000975015
+ ],
+ [
+ -7.034675888028678,
+ 52.247756419376
+ ],
+ [
+ -7.031218279561267,
+ 52.24013487190721
+ ],
+ [
+ -7.034214873566356,
+ 52.23222966213934
+ ],
+ [
+ -7.050580886978767,
+ 52.2296884028405
+ ],
+ [
+ -7.062567262999124,
+ 52.21980434486687
+ ],
+ [
+ -7.076858711331088,
+ 52.216132562953725
+ ],
+ [
+ -7.084926464421715,
+ 52.22065163604718
+ ],
+ [
+ -7.084465449959392,
+ 52.22785295843095
+ ],
+ [
+ -7.101292477834124,
+ 52.221498911062525
+ ],
+ [
+ -7.105211100763858,
+ 52.21726237433474
+ ],
+ [
+ -7.111665303236357,
+ 52.21796849185403
+ ],
+ [
+ -7.107977187537785,
+ 52.21104805609072
+ ],
+ [
+ -7.117773744862115,
+ 52.20928246619701
+ ],
+ [
+ -7.129760120882472,
+ 52.21690931136535
+ ],
+ [
+ -7.14497359813908,
+ 52.21782726924826
+ ],
+ [
+ -7.150505771686938,
+ 52.22375823207553
+ ],
+ [
+ -7.158112510315241,
+ 52.22262858593765
+ ],
+ [
+ -7.158804032008724,
+ 52.22700580464912
+ ],
+ [
+ -7.158573524777563,
+ 52.23180612902503
+ ],
+ [
+ -7.167563306792832,
+ 52.23985256723076
+ ],
+ [
+ -7.16733279956167,
+ 52.244580933687786
+ ],
+ [
+ -7.172519212262786,
+ 52.24676851484933
+ ],
+ [
+ -7.177590371348324,
+ 52.25114335361416
+ ],
+ [
+ -7.190498776293322,
+ 52.26144368927652
+ ]
+ ]
+ ],
+ "terms_url": "http://www.eea.europa.eu/data-and-maps/data/urban-atlas",
+ "terms_text": "EEA GMES Urban Atlas"
+ },
+ {
+ "name": "Kanton Aargau 25cm (AGIS 2011)",
+ "type": "tms",
+ "template": "http://tiles.poole.ch/AGIS/OF2011/{zoom}/{x}/{y}.png",
+ "scaleExtent": [
+ 14,
+ 19
+ ],
+ "polygon": [
+ [
+ [
+ 7.7,
+ 47.12
+ ],
+ [
+ 7.7,
+ 47.63
+ ],
+ [
+ 8.5,
+ 47.63
+ ],
+ [
+ 8.5,
+ 47.12
+ ],
+ [
+ 7.7,
+ 47.12
+ ]
+ ]
+ ],
+ "terms_text": "AGIS OF2011"
+ },
+ {
+ "name": "Katastrálna mapa Slovenska (KaPor, 2010-04)",
+ "type": "tms",
+ "template": "http://www.freemap.sk/tms/kapor2/{zoom}/{x}/{y}.jpg",
+ "polygon": [
+ [
+ [
+ 19.83682,
+ 49.25529
+ ],
+ [
+ 19.80075,
+ 49.42385
+ ],
+ [
+ 19.60437,
+ 49.48058
+ ],
+ [
+ 19.49179,
+ 49.63961
+ ],
+ [
+ 19.21831,
+ 49.52604
+ ],
+ [
+ 19.16778,
+ 49.42521
+ ],
+ [
+ 19.00308,
+ 49.42236
+ ],
+ [
+ 18.97611,
+ 49.5308
+ ],
+ [
+ 18.54685,
+ 49.51425
+ ],
+ [
+ 18.31432,
+ 49.33818
+ ],
+ [
+ 18.15913,
+ 49.2961
+ ],
+ [
+ 18.05564,
+ 49.11134
+ ],
+ [
+ 17.56396,
+ 48.84938
+ ],
+ [
+ 17.17929,
+ 48.88816
+ ],
+ [
+ 17.058,
+ 48.81105
+ ],
+ [
+ 16.90426,
+ 48.61947
+ ],
+ [
+ 16.79685,
+ 48.38561
+ ],
+ [
+ 17.06762,
+ 48.01116
+ ],
+ [
+ 17.32787,
+ 47.97749
+ ],
+ [
+ 17.51699,
+ 47.82535
+ ],
+ [
+ 17.74776,
+ 47.73093
+ ],
+ [
+ 18.29515,
+ 47.72075
+ ],
+ [
+ 18.67959,
+ 47.75541
+ ],
+ [
+ 18.89755,
+ 47.81203
+ ],
+ [
+ 18.79463,
+ 47.88245
+ ],
+ [
+ 18.84318,
+ 48.04046
+ ],
+ [
+ 19.46212,
+ 48.05333
+ ],
+ [
+ 19.62064,
+ 48.22938
+ ],
+ [
+ 19.89585,
+ 48.09387
+ ],
+ [
+ 20.33766,
+ 48.2643
+ ],
+ [
+ 20.55395,
+ 48.52358
+ ],
+ [
+ 20.82335,
+ 48.55714
+ ],
+ [
+ 21.10271,
+ 48.47096
+ ],
+ [
+ 21.45863,
+ 48.55513
+ ],
+ [
+ 21.74536,
+ 48.31435
+ ],
+ [
+ 22.15293,
+ 48.37179
+ ],
+ [
+ 22.61255,
+ 49.08914
+ ],
+ [
+ 22.09997,
+ 49.23814
+ ],
+ [
+ 21.9686,
+ 49.36363
+ ],
+ [
+ 21.6244,
+ 49.46989
+ ],
+ [
+ 21.06873,
+ 49.46402
+ ],
+ [
+ 20.94336,
+ 49.31088
+ ],
+ [
+ 20.73052,
+ 49.44006
+ ],
+ [
+ 20.22804,
+ 49.41714
+ ],
+ [
+ 20.05234,
+ 49.23052
+ ],
+ [
+ 19.83682,
+ 49.25529
+ ]
+ ]
+ ],
+ "terms_url": "http://wiki.freemap.sk/KatasterPortal",
+ "terms_text": "Permisssion by UGKK"
+ },
+ {
+ "name": "Katastrálna mapa Slovenska (KaPor, 2011-05)",
+ "type": "tms",
+ "template": "http://www.freemap.sk/tms/kapor2_201105/{zoom}/{x}/{y}.jpg",
+ "polygon": [
+ [
+ [
+ 19.83682,
+ 49.25529
+ ],
+ [
+ 19.80075,
+ 49.42385
+ ],
+ [
+ 19.60437,
+ 49.48058
+ ],
+ [
+ 19.49179,
+ 49.63961
+ ],
+ [
+ 19.21831,
+ 49.52604
+ ],
+ [
+ 19.16778,
+ 49.42521
+ ],
+ [
+ 19.00308,
+ 49.42236
+ ],
+ [
+ 18.97611,
+ 49.5308
+ ],
+ [
+ 18.54685,
+ 49.51425
+ ],
+ [
+ 18.31432,
+ 49.33818
+ ],
+ [
+ 18.15913,
+ 49.2961
+ ],
+ [
+ 18.05564,
+ 49.11134
+ ],
+ [
+ 17.56396,
+ 48.84938
+ ],
+ [
+ 17.17929,
+ 48.88816
+ ],
+ [
+ 17.058,
+ 48.81105
+ ],
+ [
+ 16.90426,
+ 48.61947
+ ],
+ [
+ 16.79685,
+ 48.38561
+ ],
+ [
+ 17.06762,
+ 48.01116
+ ],
+ [
+ 17.32787,
+ 47.97749
+ ],
+ [
+ 17.51699,
+ 47.82535
+ ],
+ [
+ 17.74776,
+ 47.73093
+ ],
+ [
+ 18.29515,
+ 47.72075
+ ],
+ [
+ 18.67959,
+ 47.75541
+ ],
+ [
+ 18.89755,
+ 47.81203
+ ],
+ [
+ 18.79463,
+ 47.88245
+ ],
+ [
+ 18.84318,
+ 48.04046
+ ],
+ [
+ 19.46212,
+ 48.05333
+ ],
+ [
+ 19.62064,
+ 48.22938
+ ],
+ [
+ 19.89585,
+ 48.09387
+ ],
+ [
+ 20.33766,
+ 48.2643
+ ],
+ [
+ 20.55395,
+ 48.52358
+ ],
+ [
+ 20.82335,
+ 48.55714
+ ],
+ [
+ 21.10271,
+ 48.47096
+ ],
+ [
+ 21.45863,
+ 48.55513
+ ],
+ [
+ 21.74536,
+ 48.31435
+ ],
+ [
+ 22.15293,
+ 48.37179
+ ],
+ [
+ 22.61255,
+ 49.08914
+ ],
+ [
+ 22.09997,
+ 49.23814
+ ],
+ [
+ 21.9686,
+ 49.36363
+ ],
+ [
+ 21.6244,
+ 49.46989
+ ],
+ [
+ 21.06873,
+ 49.46402
+ ],
+ [
+ 20.94336,
+ 49.31088
+ ],
+ [
+ 20.73052,
+ 49.44006
+ ],
+ [
+ 20.22804,
+ 49.41714
+ ],
+ [
+ 20.05234,
+ 49.23052
+ ],
+ [
+ 19.83682,
+ 49.25529
+ ]
+ ]
+ ],
+ "terms_url": "http://wiki.freemap.sk/KatasterPortal",
+ "terms_text": "Permisssion by UGKK"
+ },
+ {
+ "name": "Lithuania - ORT10LT",
+ "type": "tms",
+ "template": "http://mapproxy.openmap.lt/ort10lt/g/{z}/{x}/{y}.jpeg",
+ "scaleExtent": [
+ 4,
+ 18
+ ],
+ "polygon": [
+ [
+ [
+ 21,
+ 53.88
+ ],
+ [
+ 21,
+ 56.45
+ ],
+ [
+ 26.85,
+ 56.45
+ ],
+ [
+ 26.85,
+ 53.88
+ ],
+ [
+ 21,
+ 53.88
+ ]
+ ]
+ ]
+ },
+ {
+ "name": "Locator Overlay",
+ "type": "tms",
+ "description": "Shows major features to help orient you.",
+ "template": "http://{switch:a,b,c}.tiles.mapbox.com/v3/openstreetmap.map-btyhiati/{zoom}/{x}/{y}.png",
+ "scaleExtent": [
+ 0,
+ 16
+ ],
+ "terms_url": "http://www.mapbox.com/about/maps/",
+ "terms_text": "Terms & Feedback",
+ "default": true,
+ "overlay": true
+ },
+ {
+ "name": "MapBox Satellite",
+ "type": "tms",
+ "description": "Satellite and aerial imagery.",
+ "template": "http://{switch:a,b,c}.tiles.mapbox.com/v3/openstreetmap.map-4wvf9l0l/{zoom}/{x}/{y}.png",
+ "scaleExtent": [
+ 0,
+ 16
+ ],
+ "terms_url": "http://www.mapbox.com/about/maps/",
+ "terms_text": "Terms & Feedback",
+ "default": true
+ },
+ {
+ "name": "MapQuest Open Aerial",
+ "type": "tms",
+ "template": "http://oatile{switch:1,2,3,4}.mqcdn.com/tiles/1.0.0/sat/{zoom}/{x}/{y}.png",
+ "default": true
+ },
+ {
+ "name": "NLS - Bartholomew Half Inch, 1897-1907",
+ "type": "tms",
+ "template": "http://geo.nls.uk/mapdata2/bartholomew/great_britain/{zoom}/{x}/{-y}.png",
+ "scaleExtent": [
+ 0,
+ 15
+ ],
+ "polygon": [
+ [
+ [
+ -9,
+ 49.8
+ ],
+ [
+ -9,
+ 61.1
+ ],
+ [
+ 1.9,
+ 61.1
+ ],
+ [
+ 1.9,
+ 49.8
+ ],
+ [
+ -9,
+ 49.8
+ ]
+ ]
+ ],
+ "terms_url": "http://geo.nls.uk/maps/",
+ "terms_text": "National Library of Scotland Historic Maps"
+ },
+ {
+ "name": "NLS - OS 1-inch 7th Series 1955-61",
+ "type": "tms",
+ "template": "http://geo.nls.uk/mapdata2/os/seventh/{zoom}/{x}/{-y}.png",
+ "scaleExtent": [
+ 5,
+ 16
+ ],
+ "polygon": [
+ [
+ [
+ -6.4585407,
+ 49.9044128
+ ],
+ [
+ -6.3872009,
+ 49.9841116
+ ],
+ [
+ -6.2296827,
+ 49.9896159
+ ],
+ [
+ -6.2171269,
+ 49.8680087
+ ],
+ [
+ -6.4551164,
+ 49.8591793
+ ]
+ ],
+ [
+ [
+ -1.4495137,
+ 60.8634056
+ ],
+ [
+ -0.7167114,
+ 60.8545122
+ ],
+ [
+ -0.7349744,
+ 60.4359756
+ ],
+ [
+ -0.6938826,
+ 60.4168218
+ ],
+ [
+ -0.7258429,
+ 60.3942735
+ ],
+ [
+ -0.7395401,
+ 60.0484714
+ ],
+ [
+ -0.9267357,
+ 60.0461918
+ ],
+ [
+ -0.9381501,
+ 59.8266157
+ ],
+ [
+ -1.4586452,
+ 59.831205
+ ],
+ [
+ -1.4455187,
+ 60.0535999
+ ],
+ [
+ -1.463211,
+ 60.0535999
+ ],
+ [
+ -1.4643524,
+ 60.0630002
+ ],
+ [
+ -1.5716475,
+ 60.0638546
+ ],
+ [
+ -1.5693646,
+ 60.1790005
+ ],
+ [
+ -1.643558,
+ 60.1807033
+ ],
+ [
+ -1.643558,
+ 60.1892162
+ ],
+ [
+ -1.8216221,
+ 60.1894999
+ ],
+ [
+ -1.8204807,
+ 60.3615507
+ ],
+ [
+ -1.8415973,
+ 60.3697345
+ ],
+ [
+ -1.8216221,
+ 60.3832755
+ ],
+ [
+ -1.8179852,
+ 60.5934321
+ ],
+ [
+ -1.453168,
+ 60.5934321
+ ]
+ ],
+ [
+ [
+ -4.9089213,
+ 54.4242078
+ ],
+ [
+ -4.282598,
+ 54.4429861
+ ],
+ [
+ -4.2535417,
+ 54.029769
+ ],
+ [
+ -4.8766366,
+ 54.0221831
+ ]
+ ],
+ [
+ [
+ -5.8667408,
+ 59.1444603
+ ],
+ [
+ -5.7759966,
+ 59.1470945
+ ],
+ [
+ -5.7720016,
+ 59.1014052
+ ],
+ [
+ -5.8621751,
+ 59.0990605
+ ]
+ ],
+ [
+ [
+ -1.7065887,
+ 59.5703599
+ ],
+ [
+ -1.5579165,
+ 59.5693481
+ ],
+ [
+ -1.5564897,
+ 59.4965695
+ ],
+ [
+ -1.7054472,
+ 59.4975834
+ ]
+ ],
+ [
+ [
+ -7.6865827,
+ 58.2940975
+ ],
+ [
+ -7.5330594,
+ 58.3006957
+ ],
+ [
+ -7.5256401,
+ 58.2646905
+ ],
+ [
+ -7.6797341,
+ 58.2577853
+ ]
+ ],
+ [
+ [
+ -4.5338281,
+ 59.0359871
+ ],
+ [
+ -4.481322,
+ 59.0371616
+ ],
+ [
+ -4.4796099,
+ 59.0186583
+ ],
+ [
+ -4.5332574,
+ 59.0180707
+ ]
+ ],
+ [
+ [
+ -8.6710698,
+ 57.8769896
+ ],
+ [
+ -8.4673234,
+ 57.8897332
+ ],
+ [
+ -8.4467775,
+ 57.7907
+ ],
+ [
+ -8.6510947,
+ 57.7779213
+ ]
+ ],
+ [
+ [
+ -5.2395519,
+ 50.3530581
+ ],
+ [
+ -5.7920073,
+ 50.3384899
+ ],
+ [
+ -5.760047,
+ 49.9317027
+ ],
+ [
+ -4.6551363,
+ 49.9581461
+ ],
+ [
+ -4.677965,
+ 50.2860073
+ ],
+ [
+ -4.244219,
+ 50.2801723
+ ],
+ [
+ -4.2487848,
+ 50.2042525
+ ],
+ [
+ -3.3812929,
+ 50.2042525
+ ],
+ [
+ -3.4223846,
+ 50.5188201
+ ],
+ [
+ -3.1164796,
+ 50.5246258
+ ],
+ [
+ -3.1210453,
+ 50.6579592
+ ],
+ [
+ -2.6736357,
+ 50.6619495
+ ],
+ [
+ -2.5953453,
+ 50.6394325
+ ],
+ [
+ -2.5905026,
+ 50.5728419
+ ],
+ [
+ -2.4791203,
+ 50.5733545
+ ],
+ [
+ -2.4758919,
+ 50.5066704
+ ],
+ [
+ -2.3967943,
+ 50.5056438
+ ],
+ [
+ -2.401637,
+ 50.5723293
+ ],
+ [
+ -1.0400296,
+ 50.5718167
+ ],
+ [
+ -1.0335726,
+ 50.7059289
+ ],
+ [
+ -0.549302,
+ 50.7038843
+ ],
+ [
+ -0.5460736,
+ 50.7886618
+ ],
+ [
+ -0.0924734,
+ 50.7856002
+ ],
+ [
+ -0.0876307,
+ 50.7181949
+ ],
+ [
+ 0.4789659,
+ 50.7120623
+ ],
+ [
+ 0.487037,
+ 50.8182467
+ ],
+ [
+ 0.9761503,
+ 50.8049868
+ ],
+ [
+ 0.9922927,
+ 51.0126311
+ ],
+ [
+ 1.4491213,
+ 51.0004424
+ ],
+ [
+ 1.4781775,
+ 51.4090372
+ ],
+ [
+ 1.0229632,
+ 51.4271576
+ ],
+ [
+ 1.035877,
+ 51.7640881
+ ],
+ [
+ 1.6105448,
+ 51.7500992
+ ],
+ [
+ 1.646058,
+ 52.1560003
+ ],
+ [
+ 1.7267698,
+ 52.1540195
+ ],
+ [
+ 1.749369,
+ 52.4481811
+ ],
+ [
+ 1.7870672,
+ 52.4811624
+ ],
+ [
+ 1.759102,
+ 52.522505
+ ],
+ [
+ 1.7933451,
+ 52.9602749
+ ],
+ [
+ 0.3798147,
+ 52.9958468
+ ],
+ [
+ 0.3895238,
+ 53.2511239
+ ],
+ [
+ 0.3478614,
+ 53.2511239
+ ],
+ [
+ 0.3238912,
+ 53.282186
+ ],
+ [
+ 0.3461492,
+ 53.6538501
+ ],
+ [
+ 0.128487,
+ 53.6575466
+ ],
+ [
+ 0.116582,
+ 53.6674703
+ ],
+ [
+ 0.1350586,
+ 54.0655731
+ ],
+ [
+ -0.0609831,
+ 54.065908
+ ],
+ [
+ -0.0414249,
+ 54.4709448
+ ],
+ [
+ -0.5662701,
+ 54.4771794
+ ],
+ [
+ -0.5592078,
+ 54.6565127
+ ],
+ [
+ -1.1665638,
+ 54.6623485
+ ],
+ [
+ -1.1637389,
+ 54.842611
+ ],
+ [
+ -1.3316194,
+ 54.843909
+ ],
+ [
+ -1.3257065,
+ 55.2470842
+ ],
+ [
+ -1.529453,
+ 55.2487108
+ ],
+ [
+ -1.524178,
+ 55.6540122
+ ],
+ [
+ -1.7638798,
+ 55.6540122
+ ],
+ [
+ -1.7733693,
+ 55.9719116
+ ],
+ [
+ -2.1607858,
+ 55.9682981
+ ],
+ [
+ -2.1543289,
+ 56.0621387
+ ],
+ [
+ -2.4578051,
+ 56.0585337
+ ],
+ [
+ -2.4190635,
+ 56.641717
+ ],
+ [
+ -2.0962164,
+ 56.641717
+ ],
+ [
+ -2.0833025,
+ 57.0021322
+ ],
+ [
+ -1.9283359,
+ 57.0126802
+ ],
+ [
+ -1.9180966,
+ 57.3590895
+ ],
+ [
+ -1.7502161,
+ 57.3625721
+ ],
+ [
+ -1.7695869,
+ 57.7608634
+ ],
+ [
+ -3.6937554,
+ 57.7574187
+ ],
+ [
+ -3.7066693,
+ 57.9806386
+ ],
+ [
+ -3.5969013,
+ 57.9772149
+ ],
+ [
+ -3.6033582,
+ 58.1207277
+ ],
+ [
+ -3.0222335,
+ 58.1309566
+ ],
+ [
+ -3.0286905,
+ 58.5410788
+ ],
+ [
+ -2.8478961,
+ 58.530968
+ ],
+ [
+ -2.86081,
+ 58.8430508
+ ],
+ [
+ -2.679624,
+ 58.8414991
+ ],
+ [
+ -2.6841897,
+ 58.885175
+ ],
+ [
+ -2.6339665,
+ 58.9052239
+ ],
+ [
+ -2.679624,
+ 58.9335083
+ ],
+ [
+ -2.6887555,
+ 59.0229231
+ ],
+ [
+ -2.3668703,
+ 59.0229231
+ ],
+ [
+ -2.3702946,
+ 59.2652861
+ ],
+ [
+ -2.3429001,
+ 59.2821989
+ ],
+ [
+ -2.3714361,
+ 59.2996861
+ ],
+ [
+ -2.3737189,
+ 59.3707083
+ ],
+ [
+ -2.3429001,
+ 59.385825
+ ],
+ [
+ -2.3725775,
+ 59.400354
+ ],
+ [
+ -2.3714361,
+ 59.4259098
+ ],
+ [
+ -3.0734196,
+ 59.4230067
+ ],
+ [
+ -3.0711368,
+ 59.3433649
+ ],
+ [
+ -3.103097,
+ 59.3311405
+ ],
+ [
+ -3.0745611,
+ 59.3136695
+ ],
+ [
+ -3.0722782,
+ 59.232603
+ ],
+ [
+ -3.3850319,
+ 59.1484167
+ ],
+ [
+ -3.3747589,
+ 58.9352753
+ ],
+ [
+ -3.5653789,
+ 58.9323303
+ ],
+ [
+ -3.554829,
+ 58.69759
+ ],
+ [
+ -5.2808579,
+ 58.6667732
+ ],
+ [
+ -5.2534159,
+ 58.3514125
+ ],
+ [
+ -5.5068508,
+ 58.3437887
+ ],
+ [
+ -5.4761804,
+ 58.0323557
+ ],
+ [
+ -5.8974958,
+ 58.0212436
+ ],
+ [
+ -5.8522972,
+ 57.6171758
+ ],
+ [
+ -6.1396311,
+ 57.6137174
+ ],
+ [
+ -6.1541592,
+ 57.7423183
+ ],
+ [
+ -6.2913692,
+ 57.7380102
+ ],
+ [
+ -6.3365678,
+ 58.1398784
+ ],
+ [
+ -6.1121891,
+ 58.1466944
+ ],
+ [
+ -6.1473778,
+ 58.5106285
+ ],
+ [
+ -6.2934817,
+ 58.5416182
+ ],
+ [
+ -6.8413713,
+ 58.2977321
+ ],
+ [
+ -7.0057382,
+ 58.2929331
+ ],
+ [
+ -7.1016189,
+ 58.2064403
+ ],
+ [
+ -7.2573132,
+ 58.1793148
+ ],
+ [
+ -7.2531092,
+ 58.1004928
+ ],
+ [
+ -7.4070698,
+ 58.0905566
+ ],
+ [
+ -7.391347,
+ 57.7911354
+ ],
+ [
+ -7.790991,
+ 57.7733151
+ ],
+ [
+ -7.7624215,
+ 57.5444165
+ ],
+ [
+ -7.698501,
+ 57.1453194
+ ],
+ [
+ -7.7943817,
+ 57.1304547
+ ],
+ [
+ -7.716764,
+ 56.7368628
+ ],
+ [
+ -7.0122067,
+ 56.7654359
+ ],
+ [
+ -6.979922,
+ 56.5453858
+ ],
+ [
+ -7.0638622,
+ 56.5453858
+ ],
+ [
+ -7.0444914,
+ 56.3562587
+ ],
+ [
+ -6.500676,
+ 56.3812917
+ ],
+ [
+ -6.4491433,
+ 55.9793649
+ ],
+ [
+ -6.563287,
+ 55.9691456
+ ],
+ [
+ -6.5393742,
+ 55.7030135
+ ],
+ [
+ -6.5595521,
+ 55.6907321
+ ],
+ [
+ -6.5345315,
+ 55.6761713
+ ],
+ [
+ -6.5216176,
+ 55.5704434
+ ],
+ [
+ -5.8912587,
+ 55.5923416
+ ],
+ [
+ -5.8560127,
+ 55.2320733
+ ],
+ [
+ -5.2293639,
+ 55.2515958
+ ],
+ [
+ -5.1837064,
+ 54.6254139
+ ],
+ [
+ -3.6655956,
+ 54.6518373
+ ],
+ [
+ -3.6496155,
+ 54.4320023
+ ],
+ [
+ -3.5400375,
+ 54.4306744
+ ],
+ [
+ -3.530906,
+ 54.0290181
+ ],
+ [
+ -3.0697656,
+ 54.030359
+ ],
+ [
+ -3.0675737,
+ 53.8221388
+ ],
+ [
+ -3.0804876,
+ 53.7739911
+ ],
+ [
+ -3.0619239,
+ 53.7477488
+ ],
+ [
+ -3.0611168,
+ 53.6737049
+ ],
+ [
+ -3.2144691,
+ 53.6708361
+ ],
+ [
+ -3.2057699,
+ 53.4226163
+ ],
+ [
+ -3.2799632,
+ 53.355224
+ ],
+ [
+ -3.2896655,
+ 53.3608441
+ ],
+ [
+ -3.3327547,
+ 53.364931
+ ],
+ [
+ -3.3761293,
+ 53.3540318
+ ],
+ [
+ -4.0888976,
+ 53.3433102
+ ],
+ [
+ -4.0945474,
+ 53.4612036
+ ],
+ [
+ -4.697412,
+ 53.4448624
+ ],
+ [
+ -4.6882805,
+ 53.3318598
+ ],
+ [
+ -4.7202407,
+ 53.2895771
+ ],
+ [
+ -4.6837148,
+ 53.2486184
+ ],
+ [
+ -4.6768661,
+ 53.1542644
+ ],
+ [
+ -4.8480816,
+ 53.1446807
+ ],
+ [
+ -4.8178336,
+ 52.7440299
+ ],
+ [
+ -4.2545751,
+ 52.7558939
+ ],
+ [
+ -4.228876,
+ 52.254876
+ ],
+ [
+ -4.2607571,
+ 52.2536408
+ ],
+ [
+ -4.2724603,
+ 52.2432637
+ ],
+ [
+ -4.8136263,
+ 52.230095
+ ],
+ [
+ -4.8079191,
+ 52.1138892
+ ],
+ [
+ -5.3889104,
+ 52.0991668
+ ],
+ [
+ -5.3717888,
+ 51.9129667
+ ],
+ [
+ -5.4208706,
+ 51.9101502
+ ],
+ [
+ -5.414022,
+ 51.8453218
+ ],
+ [
+ -5.3683645,
+ 51.8474373
+ ],
+ [
+ -5.3466772,
+ 51.5595332
+ ],
+ [
+ -4.773676,
+ 51.5758518
+ ],
+ [
+ -4.7656859,
+ 51.4885146
+ ],
+ [
+ -4.1915432,
+ 51.4970427
+ ],
+ [
+ -4.1869775,
+ 51.4344663
+ ],
+ [
+ -3.6151177,
+ 51.4444274
+ ],
+ [
+ -3.6105519,
+ 51.3746543
+ ],
+ [
+ -3.1494115,
+ 51.3789292
+ ],
+ [
+ -3.1494115,
+ 51.2919281
+ ],
+ [
+ -4.3038735,
+ 51.2745907
+ ],
+ [
+ -4.2861169,
+ 51.0508721
+ ],
+ [
+ -4.8543277,
+ 51.0366633
+ ],
+ [
+ -4.8372201,
+ 50.7212787
+ ],
+ [
+ -5.2618345,
+ 50.7082694
+ ]
+ ],
+ [
+ [
+ -2.1502671,
+ 60.171318
+ ],
+ [
+ -2.0030218,
+ 60.1696146
+ ],
+ [
+ -2.0013096,
+ 60.0997023
+ ],
+ [
+ -2.148555,
+ 60.1011247
+ ]
+ ],
+ [
+ [
+ -6.2086011,
+ 59.1163488
+ ],
+ [
+ -6.1229934,
+ 59.1166418
+ ],
+ [
+ -6.121852,
+ 59.0714985
+ ],
+ [
+ -6.2097426,
+ 59.0714985
+ ]
+ ],
+ [
+ [
+ -4.4159559,
+ 59.0889036
+ ],
+ [
+ -4.4212022,
+ 59.0770848
+ ],
+ [
+ -4.3971904,
+ 59.0779143
+ ],
+ [
+ -4.3913388,
+ 59.0897328
+ ]
+ ]
+ ],
+ "terms_url": "http://geo.nls.uk/maps/",
+ "terms_text": "National Library of Scotland Historic Maps"
+ },
+ {
+ "name": "NLS - OS 1:25k 1st Series 1937-61",
+ "type": "tms",
+ "template": "http://geo.nls.uk/mapdata2/os/25000/{zoom}/{x}/{-y}.png",
+ "scaleExtent": [
+ 5,
+ 16
+ ],
+ "polygon": [
+ [
+ [
+ -4.7157244,
+ 54.6796556
+ ],
+ [
+ -4.6850662,
+ 54.6800268
+ ],
+ [
+ -4.6835779,
+ 54.6623245
+ ],
+ [
+ -4.7148782,
+ 54.6615818
+ ]
+ ],
+ [
+ [
+ -3.7085748,
+ 58.3371151
+ ],
+ [
+ -3.5405937,
+ 58.3380684
+ ],
+ [
+ -3.5315137,
+ 58.1608002
+ ],
+ [
+ -3.3608086,
+ 58.1622372
+ ],
+ [
+ -3.3653486,
+ 58.252173
+ ],
+ [
+ -3.1610473,
+ 58.2536063
+ ],
+ [
+ -3.1610473,
+ 58.3261509
+ ],
+ [
+ -3.0275704,
+ 58.3271045
+ ],
+ [
+ -3.0366505,
+ 58.6139001
+ ],
+ [
+ -3.0021463,
+ 58.614373
+ ],
+ [
+ -3.0030543,
+ 58.7036341
+ ],
+ [
+ -3.4180129,
+ 58.7003322
+ ],
+ [
+ -3.4171049,
+ 58.6290293
+ ],
+ [
+ -3.7240109,
+ 58.6266658
+ ],
+ [
+ -3.7231029,
+ 58.606806
+ ],
+ [
+ -4.2361262,
+ 58.5992374
+ ],
+ [
+ -4.2334022,
+ 58.5092347
+ ],
+ [
+ -3.88836,
+ 58.5144516
+ ],
+ [
+ -3.8829119,
+ 58.4261327
+ ],
+ [
+ -3.7158389,
+ 58.4270836
+ ]
+ ],
+ [
+ [
+ -6.46676,
+ 49.9943621
+ ],
+ [
+ -6.1889102,
+ 50.004868
+ ],
+ [
+ -6.1789222,
+ 49.8967815
+ ],
+ [
+ -6.3169391,
+ 49.8915171
+ ],
+ [
+ -6.312399,
+ 49.8200979
+ ],
+ [
+ -6.4504159,
+ 49.8159968
+ ]
+ ],
+ [
+ [
+ -5.6453263,
+ 50.2029809
+ ],
+ [
+ -5.7801329,
+ 50.2014076
+ ],
+ [
+ -5.7637888,
+ 50.0197267
+ ],
+ [
+ -5.3479221,
+ 50.0290604
+ ],
+ [
+ -5.3388421,
+ 49.9414854
+ ],
+ [
+ -5.024672,
+ 49.9473287
+ ],
+ [
+ -5.0355681,
+ 50.0383923
+ ],
+ [
+ -5.0010639,
+ 50.0453901
+ ],
+ [
+ -4.9974319,
+ 50.1304478
+ ],
+ [
+ -4.855783,
+ 50.13394
+ ],
+ [
+ -4.861231,
+ 50.206057
+ ],
+ [
+ -4.6546085,
+ 50.2140172
+ ],
+ [
+ -4.6558926,
+ 50.3018616
+ ],
+ [
+ -4.5184924,
+ 50.3026818
+ ],
+ [
+ -4.51464,
+ 50.325642
+ ],
+ [
+ -4.2488284,
+ 50.3264618
+ ],
+ [
+ -4.2488284,
+ 50.3100631
+ ],
+ [
+ -4.10886,
+ 50.3141633
+ ],
+ [
+ -4.1062917,
+ 50.2411267
+ ],
+ [
+ -3.9648088,
+ 50.2432047
+ ],
+ [
+ -3.9640778,
+ 50.2254158
+ ],
+ [
+ -3.8522287,
+ 50.2273626
+ ],
+ [
+ -3.8503757,
+ 50.1552563
+ ],
+ [
+ -3.6921809,
+ 50.1572487
+ ],
+ [
+ -3.5414602,
+ 50.1602198
+ ],
+ [
+ -3.5465781,
+ 50.3226814
+ ],
+ [
+ -3.4068012,
+ 50.3241013
+ ],
+ [
+ -3.4165761,
+ 50.5892711
+ ],
+ [
+ -3.2746691,
+ 50.5962721
+ ],
+ [
+ -3.2749172,
+ 50.6106323
+ ],
+ [
+ -2.9971742,
+ 50.613972
+ ],
+ [
+ -2.9896008,
+ 50.688537
+ ],
+ [
+ -2.7120266,
+ 50.690565
+ ],
+ [
+ -2.710908,
+ 50.6195964
+ ],
+ [
+ -2.5695473,
+ 50.6157538
+ ],
+ [
+ -2.5651019,
+ 50.5134083
+ ],
+ [
+ -2.4014463,
+ 50.513379
+ ],
+ [
+ -2.3940583,
+ 50.6160348
+ ],
+ [
+ -2.2894123,
+ 50.6147436
+ ],
+ [
+ -2.2876184,
+ 50.6008549
+ ],
+ [
+ -2.1477855,
+ 50.6048506
+ ],
+ [
+ -2.1451013,
+ 50.5325437
+ ],
+ [
+ -1.9335117,
+ 50.5347477
+ ],
+ [
+ -1.9362139,
+ 50.6170445
+ ],
+ [
+ -1.8573025,
+ 50.6228094
+ ],
+ [
+ -1.8554865,
+ 50.709139
+ ],
+ [
+ -1.6066929,
+ 50.709139
+ ],
+ [
+ -1.6085089,
+ 50.6239615
+ ],
+ [
+ -1.4450678,
+ 50.6228094
+ ],
+ [
+ -1.4432518,
+ 50.5317039
+ ],
+ [
+ -1.1545059,
+ 50.5293951
+ ],
+ [
+ -1.1472419,
+ 50.6170485
+ ],
+ [
+ -1.011041,
+ 50.6205051
+ ],
+ [
+ -1.011041,
+ 50.7056889
+ ],
+ [
+ -0.704135,
+ 50.7045388
+ ],
+ [
+ -0.700503,
+ 50.7769401
+ ],
+ [
+ -0.5860943,
+ 50.7723465
+ ],
+ [
+ -0.5879103,
+ 50.7907181
+ ],
+ [
+ -0.0149586,
+ 50.7798108
+ ],
+ [
+ -0.0185906,
+ 50.7625836
+ ],
+ [
+ 0.0967261,
+ 50.7620093
+ ],
+ [
+ 0.0921861,
+ 50.6913106
+ ],
+ [
+ 0.3046595,
+ 50.6890096
+ ],
+ [
+ 0.3101075,
+ 50.7757917
+ ],
+ [
+ 0.5511831,
+ 50.7726336
+ ],
+ [
+ 0.5529991,
+ 50.8432096
+ ],
+ [
+ 0.695556,
+ 50.8403428
+ ],
+ [
+ 0.696464,
+ 50.8592608
+ ],
+ [
+ 0.9852099,
+ 50.8523824
+ ],
+ [
+ 0.9906579,
+ 50.9417226
+ ],
+ [
+ 1.0160821,
+ 50.9411504
+ ],
+ [
+ 1.0215301,
+ 51.0303204
+ ],
+ [
+ 1.2812198,
+ 51.0240383
+ ],
+ [
+ 1.2848518,
+ 51.0948044
+ ],
+ [
+ 1.4277848,
+ 51.0948044
+ ],
+ [
+ 1.4386809,
+ 51.2882859
+ ],
+ [
+ 1.4713691,
+ 51.2871502
+ ],
+ [
+ 1.4804492,
+ 51.3994534
+ ],
+ [
+ 1.1590151,
+ 51.4073836
+ ],
+ [
+ 1.1590151,
+ 51.3869889
+ ],
+ [
+ 1.0191822,
+ 51.3903886
+ ],
+ [
+ 1.0228142,
+ 51.4798247
+ ],
+ [
+ 0.8793493,
+ 51.4843484
+ ],
+ [
+ 0.8829813,
+ 51.5566675
+ ],
+ [
+ 1.0264462,
+ 51.5544092
+ ],
+ [
+ 1.0373423,
+ 51.7493319
+ ],
+ [
+ 1.2607117,
+ 51.7482076
+ ],
+ [
+ 1.2661598,
+ 51.8279642
+ ],
+ [
+ 1.3351682,
+ 51.8335756
+ ],
+ [
+ 1.3478803,
+ 51.9199021
+ ],
+ [
+ 1.4840812,
+ 51.9199021
+ ],
+ [
+ 1.4986093,
+ 52.0038271
+ ],
+ [
+ 1.6438902,
+ 52.0027092
+ ],
+ [
+ 1.6656823,
+ 52.270221
+ ],
+ [
+ 1.7310588,
+ 52.270221
+ ],
+ [
+ 1.7528509,
+ 52.4465637
+ ],
+ [
+ 1.8254914,
+ 52.4476705
+ ],
+ [
+ 1.8345714,
+ 52.624408
+ ],
+ [
+ 1.7690346,
+ 52.6291402
+ ],
+ [
+ 1.7741711,
+ 52.717904
+ ],
+ [
+ 1.6996925,
+ 52.721793
+ ],
+ [
+ 1.706113,
+ 52.8103687
+ ],
+ [
+ 1.559724,
+ 52.8165777
+ ],
+ [
+ 1.5648605,
+ 52.9034116
+ ],
+ [
+ 1.4184715,
+ 52.9103818
+ ],
+ [
+ 1.4223238,
+ 52.9281894
+ ],
+ [
+ 1.3439928,
+ 52.9289635
+ ],
+ [
+ 1.3491293,
+ 53.0001194
+ ],
+ [
+ 0.4515789,
+ 53.022589
+ ],
+ [
+ 0.4497629,
+ 52.9351139
+ ],
+ [
+ 0.3789384,
+ 52.9351139
+ ],
+ [
+ 0.3716744,
+ 52.846365
+ ],
+ [
+ 0.2227614,
+ 52.8496552
+ ],
+ [
+ 0.2336575,
+ 52.9329248
+ ],
+ [
+ 0.3062979,
+ 52.9351139
+ ],
+ [
+ 0.308114,
+ 53.022589
+ ],
+ [
+ 0.3807544,
+ 53.0236813
+ ],
+ [
+ 0.3993708,
+ 53.2933729
+ ],
+ [
+ 0.3248922,
+ 53.2987454
+ ],
+ [
+ 0.3274604,
+ 53.3853782
+ ],
+ [
+ 0.2504136,
+ 53.38691
+ ],
+ [
+ 0.2581183,
+ 53.4748924
+ ],
+ [
+ 0.1862079,
+ 53.4779494
+ ],
+ [
+ 0.1913443,
+ 53.6548777
+ ],
+ [
+ 0.1502527,
+ 53.6594436
+ ],
+ [
+ 0.1528209,
+ 53.7666003
+ ],
+ [
+ 0.0012954,
+ 53.7734308
+ ],
+ [
+ 0.0025796,
+ 53.8424326
+ ],
+ [
+ -0.0282392,
+ 53.841675
+ ],
+ [
+ -0.0226575,
+ 53.9311501
+ ],
+ [
+ -0.1406983,
+ 53.9322193
+ ],
+ [
+ -0.1416063,
+ 54.0219323
+ ],
+ [
+ -0.1706625,
+ 54.0235326
+ ],
+ [
+ -0.1679384,
+ 54.0949482
+ ],
+ [
+ -0.0126694,
+ 54.0912206
+ ],
+ [
+ -0.0099454,
+ 54.1811226
+ ],
+ [
+ -0.1615824,
+ 54.1837795
+ ],
+ [
+ -0.1606744,
+ 54.2029038
+ ],
+ [
+ -0.2405789,
+ 54.2034349
+ ],
+ [
+ -0.2378549,
+ 54.2936234
+ ],
+ [
+ -0.3894919,
+ 54.2941533
+ ],
+ [
+ -0.3857497,
+ 54.3837321
+ ],
+ [
+ -0.461638,
+ 54.3856364
+ ],
+ [
+ -0.4571122,
+ 54.4939066
+ ],
+ [
+ -0.6105651,
+ 54.4965434
+ ],
+ [
+ -0.6096571,
+ 54.5676704
+ ],
+ [
+ -0.7667421,
+ 54.569776
+ ],
+ [
+ -0.7640181,
+ 54.5887213
+ ],
+ [
+ -0.9192871,
+ 54.5908258
+ ],
+ [
+ -0.9148116,
+ 54.6608348
+ ],
+ [
+ -1.1485204,
+ 54.6634343
+ ],
+ [
+ -1.1472363,
+ 54.7528316
+ ],
+ [
+ -1.2268514,
+ 54.7532021
+ ],
+ [
+ -1.2265398,
+ 54.8429879
+ ],
+ [
+ -1.2991803,
+ 54.8435107
+ ],
+ [
+ -1.2991803,
+ 54.9333391
+ ],
+ [
+ -1.3454886,
+ 54.9354258
+ ],
+ [
+ -1.3436726,
+ 55.0234878
+ ],
+ [
+ -1.3772688,
+ 55.0255698
+ ],
+ [
+ -1.3754528,
+ 55.1310877
+ ],
+ [
+ -1.4997441,
+ 55.1315727
+ ],
+ [
+ -1.4969272,
+ 55.2928323
+ ],
+ [
+ -1.5296721,
+ 55.2942946
+ ],
+ [
+ -1.5258198,
+ 55.6523803
+ ],
+ [
+ -1.7659492,
+ 55.6545537
+ ],
+ [
+ -1.7620968,
+ 55.7435626
+ ],
+ [
+ -1.9688392,
+ 55.7435626
+ ],
+ [
+ -1.9698023,
+ 55.8334505
+ ],
+ [
+ -2.0019051,
+ 55.8336308
+ ],
+ [
+ -2.0015841,
+ 55.9235526
+ ],
+ [
+ -2.1604851,
+ 55.9240613
+ ],
+ [
+ -2.1613931,
+ 55.9413549
+ ],
+ [
+ -2.3202942,
+ 55.9408463
+ ],
+ [
+ -2.3212022,
+ 56.0145126
+ ],
+ [
+ -2.5627317,
+ 56.0124824
+ ],
+ [
+ -2.5645477,
+ 56.1022207
+ ],
+ [
+ -2.9658863,
+ 56.0991822
+ ],
+ [
+ -2.9667943,
+ 56.1710304
+ ],
+ [
+ -2.4828272,
+ 56.1755797
+ ],
+ [
+ -2.4882752,
+ 56.2856078
+ ],
+ [
+ -2.5645477,
+ 56.2835918
+ ],
+ [
+ -2.5681798,
+ 56.3742075
+ ],
+ [
+ -2.7261728,
+ 56.3732019
+ ],
+ [
+ -2.7316208,
+ 56.4425301
+ ],
+ [
+ -2.6190281,
+ 56.4425301
+ ],
+ [
+ -2.6153961,
+ 56.5317671
+ ],
+ [
+ -2.453771,
+ 56.5347715
+ ],
+ [
+ -2.4534686,
+ 56.6420248
+ ],
+ [
+ -2.4062523,
+ 56.6440218
+ ],
+ [
+ -2.3953562,
+ 56.7297964
+ ],
+ [
+ -2.2936596,
+ 56.7337811
+ ],
+ [
+ -2.2972916,
+ 56.807423
+ ],
+ [
+ -2.1629067,
+ 56.8113995
+ ],
+ [
+ -2.1592747,
+ 56.9958425
+ ],
+ [
+ -1.9922016,
+ 57.0017771
+ ],
+ [
+ -2.0067297,
+ 57.2737477
+ ],
+ [
+ -1.9195612,
+ 57.2757112
+ ],
+ [
+ -1.9304572,
+ 57.3482876
+ ],
+ [
+ -1.8106005,
+ 57.3443682
+ ],
+ [
+ -1.7997044,
+ 57.4402728
+ ],
+ [
+ -1.6616875,
+ 57.4285429
+ ],
+ [
+ -1.6689516,
+ 57.5398256
+ ],
+ [
+ -1.7452241,
+ 57.5398256
+ ],
+ [
+ -1.7524881,
+ 57.6313302
+ ],
+ [
+ -1.8287606,
+ 57.6332746
+ ],
+ [
+ -1.8287606,
+ 57.7187255
+ ],
+ [
+ -3.1768526,
+ 57.7171219
+ ],
+ [
+ -3.1794208,
+ 57.734264
+ ],
+ [
+ -3.5134082,
+ 57.7292105
+ ],
+ [
+ -3.5129542,
+ 57.7112683
+ ],
+ [
+ -3.7635638,
+ 57.7076303
+ ],
+ [
+ -3.7598539,
+ 57.635713
+ ],
+ [
+ -3.8420372,
+ 57.6343382
+ ],
+ [
+ -3.8458895,
+ 57.6178365
+ ],
+ [
+ -3.9794374,
+ 57.6157733
+ ],
+ [
+ -3.9794374,
+ 57.686544
+ ],
+ [
+ -3.8150708,
+ 57.689976
+ ],
+ [
+ -3.817639,
+ 57.7968899
+ ],
+ [
+ -3.6853753,
+ 57.7989429
+ ],
+ [
+ -3.6892276,
+ 57.8891567
+ ],
+ [
+ -3.9383458,
+ 57.8877915
+ ],
+ [
+ -3.9421981,
+ 57.9750592
+ ],
+ [
+ -3.6943641,
+ 57.9784638
+ ],
+ [
+ -3.6969323,
+ 58.0695865
+ ],
+ [
+ -4.0372226,
+ 58.0641528
+ ],
+ [
+ -4.0346543,
+ 57.9730163
+ ],
+ [
+ -4.2003051,
+ 57.9702923
+ ],
+ [
+ -4.1832772,
+ 57.7012869
+ ],
+ [
+ -4.518752,
+ 57.6951111
+ ],
+ [
+ -4.5122925,
+ 57.6050682
+ ],
+ [
+ -4.6789116,
+ 57.6016628
+ ],
+ [
+ -4.666022,
+ 57.4218334
+ ],
+ [
+ -3.6677696,
+ 57.4394729
+ ],
+ [
+ -3.671282,
+ 57.5295384
+ ],
+ [
+ -3.3384979,
+ 57.5331943
+ ],
+ [
+ -3.3330498,
+ 57.4438859
+ ],
+ [
+ -2.8336466,
+ 57.4485275
+ ],
+ [
+ -2.8236396,
+ 56.9992706
+ ],
+ [
+ -2.3305398,
+ 57.0006693
+ ],
+ [
+ -2.3298977,
+ 56.9113932
+ ],
+ [
+ -2.6579889,
+ 56.9092901
+ ],
+ [
+ -2.6559637,
+ 56.8198406
+ ],
+ [
+ -2.8216747,
+ 56.8188467
+ ],
+ [
+ -2.8184967,
+ 56.7295397
+ ],
+ [
+ -3.1449248,
+ 56.7265508
+ ],
+ [
+ -3.1435628,
+ 56.6362749
+ ],
+ [
+ -3.4679089,
+ 56.6350265
+ ],
+ [
+ -3.474265,
+ 56.7238108
+ ],
+ [
+ -3.8011471,
+ 56.7188284
+ ],
+ [
+ -3.785711,
+ 56.4493026
+ ],
+ [
+ -3.946428,
+ 56.4457896
+ ],
+ [
+ -3.9428873,
+ 56.2659777
+ ],
+ [
+ -4.423146,
+ 56.2588459
+ ],
+ [
+ -4.4141572,
+ 56.0815506
+ ],
+ [
+ -4.8944159,
+ 56.0708008
+ ],
+ [
+ -4.8791072,
+ 55.8896994
+ ],
+ [
+ -5.1994158,
+ 55.8821374
+ ],
+ [
+ -5.1852906,
+ 55.7023791
+ ],
+ [
+ -5.0273445,
+ 55.7067203
+ ],
+ [
+ -5.0222081,
+ 55.6879046
+ ],
+ [
+ -4.897649,
+ 55.6907999
+ ],
+ [
+ -4.8880181,
+ 55.6002822
+ ],
+ [
+ -4.7339244,
+ 55.6046348
+ ],
+ [
+ -4.7275038,
+ 55.5342082
+ ],
+ [
+ -4.773732,
+ 55.5334815
+ ],
+ [
+ -4.7685955,
+ 55.4447227
+ ],
+ [
+ -4.8494947,
+ 55.4418092
+ ],
+ [
+ -4.8405059,
+ 55.3506535
+ ],
+ [
+ -4.8700405,
+ 55.3513836
+ ],
+ [
+ -4.8649041,
+ 55.2629462
+ ],
+ [
+ -4.9920314,
+ 55.2592875
+ ],
+ [
+ -4.9907473,
+ 55.1691779
+ ],
+ [
+ -5.0600894,
+ 55.1655105
+ ],
+ [
+ -5.0575212,
+ 55.0751884
+ ],
+ [
+ -5.2141831,
+ 55.0722477
+ ],
+ [
+ -5.1991766,
+ 54.8020337
+ ],
+ [
+ -5.0466316,
+ 54.8062205
+ ],
+ [
+ -5.0502636,
+ 54.7244996
+ ],
+ [
+ -4.9703591,
+ 54.7203043
+ ],
+ [
+ -4.9776232,
+ 54.6215905
+ ],
+ [
+ -4.796022,
+ 54.6342056
+ ],
+ [
+ -4.796022,
+ 54.7307917
+ ],
+ [
+ -4.8977186,
+ 54.7265971
+ ],
+ [
+ -4.9086147,
+ 54.8145928
+ ],
+ [
+ -4.8069181,
+ 54.8166856
+ ],
+ [
+ -4.8105501,
+ 54.7915648
+ ],
+ [
+ -4.6943253,
+ 54.7978465
+ ],
+ [
+ -4.6761652,
+ 54.7244996
+ ],
+ [
+ -4.5744686,
+ 54.7244996
+ ],
+ [
+ -4.5599405,
+ 54.6426135
+ ],
+ [
+ -4.3093309,
+ 54.6384098
+ ],
+ [
+ -4.3333262,
+ 54.8229889
+ ],
+ [
+ -4.2626999,
+ 54.8274274
+ ],
+ [
+ -4.2549952,
+ 54.7348587
+ ],
+ [
+ -3.8338058,
+ 54.7400481
+ ],
+ [
+ -3.836374,
+ 54.8141105
+ ],
+ [
+ -3.7118149,
+ 54.8133706
+ ],
+ [
+ -3.7143831,
+ 54.8318654
+ ],
+ [
+ -3.5346072,
+ 54.8355633
+ ],
+ [
+ -3.5271039,
+ 54.9066228
+ ],
+ [
+ -3.4808758,
+ 54.9084684
+ ],
+ [
+ -3.4776655,
+ 54.7457328
+ ],
+ [
+ -3.5874573,
+ 54.744621
+ ],
+ [
+ -3.5836049,
+ 54.6546166
+ ],
+ [
+ -3.7107322,
+ 54.6531308
+ ],
+ [
+ -3.6991752,
+ 54.4550407
+ ],
+ [
+ -3.5746161,
+ 54.4572801
+ ],
+ [
+ -3.5759002,
+ 54.3863042
+ ],
+ [
+ -3.539945,
+ 54.3855564
+ ],
+ [
+ -3.5386609,
+ 54.297224
+ ],
+ [
+ -3.46033,
+ 54.2957252
+ ],
+ [
+ -3.4590458,
+ 54.2079507
+ ],
+ [
+ -3.3807149,
+ 54.2102037
+ ],
+ [
+ -3.381999,
+ 54.1169788
+ ],
+ [
+ -3.302878,
+ 54.1160656
+ ],
+ [
+ -3.300154,
+ 54.0276224
+ ],
+ [
+ -3.1013007,
+ 54.0292224
+ ],
+ [
+ -3.093596,
+ 53.6062158
+ ],
+ [
+ -3.2065981,
+ 53.6016441
+ ],
+ [
+ -3.2091663,
+ 53.4917753
+ ],
+ [
+ -3.2451215,
+ 53.4887193
+ ],
+ [
+ -3.2348486,
+ 53.4045934
+ ],
+ [
+ -3.5276266,
+ 53.3999999
+ ],
+ [
+ -3.5343966,
+ 53.328481
+ ],
+ [
+ -3.6488053,
+ 53.3252272
+ ],
+ [
+ -3.6527308,
+ 53.3057716
+ ],
+ [
+ -3.7271873,
+ 53.3046865
+ ],
+ [
+ -3.7315003,
+ 53.3945257
+ ],
+ [
+ -3.9108315,
+ 53.3912769
+ ],
+ [
+ -3.9071995,
+ 53.3023804
+ ],
+ [
+ -3.9521457,
+ 53.3015665
+ ],
+ [
+ -3.9566724,
+ 53.3912183
+ ],
+ [
+ -4.1081979,
+ 53.3889209
+ ],
+ [
+ -4.1081979,
+ 53.4072967
+ ],
+ [
+ -4.2622916,
+ 53.4065312
+ ],
+ [
+ -4.2635757,
+ 53.4753707
+ ],
+ [
+ -4.638537,
+ 53.4677274
+ ],
+ [
+ -4.6346847,
+ 53.3812621
+ ],
+ [
+ -4.7091633,
+ 53.3774321
+ ],
+ [
+ -4.7001745,
+ 53.1954965
+ ],
+ [
+ -4.5499332,
+ 53.1962658
+ ],
+ [
+ -4.5435126,
+ 53.1092488
+ ],
+ [
+ -4.3919871,
+ 53.1100196
+ ],
+ [
+ -4.3855666,
+ 53.0236002
+ ],
+ [
+ -4.6115707,
+ 53.0205105
+ ],
+ [
+ -4.603866,
+ 52.9284932
+ ],
+ [
+ -4.7566756,
+ 52.9261709
+ ],
+ [
+ -4.7476868,
+ 52.8370555
+ ],
+ [
+ -4.8208813,
+ 52.8331768
+ ],
+ [
+ -4.8208813,
+ 52.7446476
+ ],
+ [
+ -4.3701572,
+ 52.7539749
+ ],
+ [
+ -4.3765778,
+ 52.8401583
+ ],
+ [
+ -4.2314728,
+ 52.8455875
+ ],
+ [
+ -4.2237682,
+ 52.7586379
+ ],
+ [
+ -4.1056297,
+ 52.7570836
+ ],
+ [
+ -4.1015192,
+ 52.6714874
+ ],
+ [
+ -4.1487355,
+ 52.6703862
+ ],
+ [
+ -4.1305754,
+ 52.4008596
+ ],
+ [
+ -4.1995838,
+ 52.3986435
+ ],
+ [
+ -4.2050319,
+ 52.3110195
+ ],
+ [
+ -4.3466808,
+ 52.303247
+ ],
+ [
+ -4.3484968,
+ 52.2365693
+ ],
+ [
+ -4.4901457,
+ 52.2332328
+ ],
+ [
+ -4.4883297,
+ 52.2098702
+ ],
+ [
+ -4.6572188,
+ 52.2098702
+ ],
+ [
+ -4.6590348,
+ 52.1385939
+ ],
+ [
+ -4.7788916,
+ 52.13525
+ ],
+ [
+ -4.7807076,
+ 52.1162967
+ ],
+ [
+ -4.9259885,
+ 52.1140663
+ ],
+ [
+ -4.9187245,
+ 52.0392855
+ ],
+ [
+ -5.2365265,
+ 52.0314653
+ ],
+ [
+ -5.2347105,
+ 51.9442339
+ ],
+ [
+ -5.3473032,
+ 51.9408755
+ ],
+ [
+ -5.3473032,
+ 51.9195995
+ ],
+ [
+ -5.4925842,
+ 51.9162392
+ ],
+ [
+ -5.4853201,
+ 51.8265386
+ ],
+ [
+ -5.1983903,
+ 51.8321501
+ ],
+ [
+ -5.1893102,
+ 51.7625177
+ ],
+ [
+ -5.335825,
+ 51.7589528
+ ],
+ [
+ -5.3281204,
+ 51.6686495
+ ],
+ [
+ -5.1836575,
+ 51.6730296
+ ],
+ [
+ -5.1836575,
+ 51.6539134
+ ],
+ [
+ -5.0674452,
+ 51.6578966
+ ],
+ [
+ -5.0603825,
+ 51.5677905
+ ],
+ [
+ -4.5974594,
+ 51.5809588
+ ],
+ [
+ -4.60388,
+ 51.6726314
+ ],
+ [
+ -4.345773,
+ 51.6726314
+ ],
+ [
+ -4.3355001,
+ 51.4962964
+ ],
+ [
+ -3.9528341,
+ 51.5106841
+ ],
+ [
+ -3.9425611,
+ 51.5905333
+ ],
+ [
+ -3.8809237,
+ 51.5953198
+ ],
+ [
+ -3.8706508,
+ 51.5074872
+ ],
+ [
+ -3.7679216,
+ 51.4978952
+ ],
+ [
+ -3.7550805,
+ 51.4242895
+ ],
+ [
+ -3.5855774,
+ 51.41468
+ ],
+ [
+ -3.5778727,
+ 51.3329177
+ ],
+ [
+ -3.0796364,
+ 51.3329177
+ ],
+ [
+ -3.0770682,
+ 51.2494018
+ ],
+ [
+ -3.7216935,
+ 51.2381477
+ ],
+ [
+ -3.7216935,
+ 51.2558315
+ ],
+ [
+ -3.8706508,
+ 51.2558315
+ ],
+ [
+ -3.8680825,
+ 51.2365398
+ ],
+ [
+ -4.2944084,
+ 51.2252825
+ ],
+ [
+ -4.289272,
+ 51.0496352
+ ],
+ [
+ -4.5692089,
+ 51.0431767
+ ],
+ [
+ -4.5624122,
+ 50.9497388
+ ],
+ [
+ -4.5905604,
+ 50.9520269
+ ],
+ [
+ -4.5896524,
+ 50.8627065
+ ],
+ [
+ -4.6296046,
+ 50.8592677
+ ],
+ [
+ -4.6226411,
+ 50.7691513
+ ],
+ [
+ -4.6952816,
+ 50.7680028
+ ],
+ [
+ -4.6934655,
+ 50.6967379
+ ],
+ [
+ -4.8342064,
+ 50.6938621
+ ],
+ [
+ -4.8296664,
+ 50.6046231
+ ],
+ [
+ -4.9676833,
+ 50.6000126
+ ],
+ [
+ -4.9685913,
+ 50.5821427
+ ],
+ [
+ -5.1084242,
+ 50.5786832
+ ],
+ [
+ -5.1029762,
+ 50.4892254
+ ],
+ [
+ -5.1311244,
+ 50.48807
+ ],
+ [
+ -5.1274923,
+ 50.4163798
+ ],
+ [
+ -5.2664172,
+ 50.4117509
+ ],
+ [
+ -5.2609692,
+ 50.3034214
+ ],
+ [
+ -5.5124868,
+ 50.2976214
+ ],
+ [
+ -5.5061308,
+ 50.2256428
+ ],
+ [
+ -5.6468717,
+ 50.2209953
+ ]
+ ],
+ [
+ [
+ -5.1336607,
+ 55.2630226
+ ],
+ [
+ -5.1021999,
+ 55.2639372
+ ],
+ [
+ -5.0999527,
+ 55.2458239
+ ],
+ [
+ -5.1322161,
+ 55.2446343
+ ]
+ ],
+ [
+ [
+ -5.6431878,
+ 55.5095745
+ ],
+ [
+ -5.4861028,
+ 55.5126594
+ ],
+ [
+ -5.4715747,
+ 55.3348829
+ ],
+ [
+ -5.6277517,
+ 55.3302345
+ ]
+ ],
+ [
+ [
+ -4.7213517,
+ 51.2180246
+ ],
+ [
+ -4.5804201,
+ 51.2212417
+ ],
+ [
+ -4.5746416,
+ 51.1306736
+ ],
+ [
+ -4.7174993,
+ 51.1280545
+ ]
+ ],
+ [
+ [
+ -5.1608796,
+ 55.4153626
+ ],
+ [
+ -5.0045387,
+ 55.4190069
+ ],
+ [
+ -5.0184798,
+ 55.6153521
+ ],
+ [
+ -5.1755648,
+ 55.6138137
+ ]
+ ]
+ ],
+ "terms_url": "http://geo.nls.uk/maps/",
+ "terms_text": "National Library of Scotland Historic Maps"
+ },
+ {
+ "name": "NLS - OS 6-inch Scotland 1842-82",
+ "type": "tms",
+ "template": "http://geo.nls.uk/maps/os/six_inch/{zoom}/{x}/{-y}.png",
+ "scaleExtent": [
+ 5,
+ 16
+ ],
+ "polygon": [
+ [
+ [
+ -5.2112173,
+ 54.8018593
+ ],
+ [
+ -5.0642752,
+ 54.8026508
+ ],
+ [
+ -5.0560354,
+ 54.6305176
+ ],
+ [
+ -4.3158316,
+ 54.6297227
+ ],
+ [
+ -4.3117117,
+ 54.7448258
+ ],
+ [
+ -3.8530325,
+ 54.7464112
+ ],
+ [
+ -3.8530325,
+ 54.8034424
+ ],
+ [
+ -3.5522818,
+ 54.8034424
+ ],
+ [
+ -3.5522818,
+ 54.8374644
+ ],
+ [
+ -3.468511,
+ 54.8406277
+ ],
+ [
+ -3.4657644,
+ 54.8983158
+ ],
+ [
+ -3.3847403,
+ 54.8991055
+ ],
+ [
+ -3.3888601,
+ 54.9559214
+ ],
+ [
+ -3.0920786,
+ 54.9539468
+ ],
+ [
+ -3.0392359,
+ 54.9923274
+ ],
+ [
+ -3.0212713,
+ 55.0493881
+ ],
+ [
+ -2.9591232,
+ 55.0463283
+ ],
+ [
+ -2.9202807,
+ 55.0666294
+ ],
+ [
+ -2.7857081,
+ 55.068652
+ ],
+ [
+ -2.7852225,
+ 55.0914426
+ ],
+ [
+ -2.7337562,
+ 55.0922761
+ ],
+ [
+ -2.737616,
+ 55.151204
+ ],
+ [
+ -2.7648395,
+ 55.1510672
+ ],
+ [
+ -2.7013114,
+ 55.1722505
+ ],
+ [
+ -2.6635459,
+ 55.2192808
+ ],
+ [
+ -2.6460364,
+ 55.2188891
+ ],
+ [
+ -2.629042,
+ 55.2233933
+ ],
+ [
+ -2.6317886,
+ 55.2287781
+ ],
+ [
+ -2.6235488,
+ 55.2446345
+ ],
+ [
+ -2.6197723,
+ 55.2454663
+ ],
+ [
+ -2.6099017,
+ 55.2454174
+ ],
+ [
+ -2.6099876,
+ 55.2486466
+ ],
+ [
+ -2.6408121,
+ 55.2590039
+ ],
+ [
+ -2.6247896,
+ 55.2615631
+ ],
+ [
+ -2.6045186,
+ 55.2823081
+ ],
+ [
+ -2.5693176,
+ 55.296132
+ ],
+ [
+ -2.5479542,
+ 55.3121617
+ ],
+ [
+ -2.5091116,
+ 55.3234891
+ ],
+ [
+ -2.4780376,
+ 55.3494471
+ ],
+ [
+ -2.4421083,
+ 55.3533118
+ ],
+ [
+ -2.4052079,
+ 55.3439256
+ ],
+ [
+ -2.3726772,
+ 55.3447539
+ ],
+ [
+ -2.3221819,
+ 55.3687665
+ ],
+ [
+ -2.3241241,
+ 55.3999337
+ ],
+ [
+ -2.2576062,
+ 55.425015
+ ],
+ [
+ -2.1985547,
+ 55.4273529
+ ],
+ [
+ -2.1484296,
+ 55.4717466
+ ],
+ [
+ -2.1944348,
+ 55.484199
+ ],
+ [
+ -2.2040479,
+ 55.529306
+ ],
+ [
+ -2.2960584,
+ 55.6379722
+ ],
+ [
+ -2.2177808,
+ 55.6379722
+ ],
+ [
+ -2.1059266,
+ 55.7452498
+ ],
+ [
+ -1.9716874,
+ 55.7462161
+ ],
+ [
+ -1.9697453,
+ 55.9190951
+ ],
+ [
+ -2.1201694,
+ 55.9207115
+ ],
+ [
+ -2.1242893,
+ 55.9776133
+ ],
+ [
+ -2.3440159,
+ 55.9783817
+ ],
+ [
+ -2.3440159,
+ 56.0390349
+ ],
+ [
+ -2.5046909,
+ 56.0413363
+ ],
+ [
+ -2.500571,
+ 56.1003588
+ ],
+ [
+ -2.8823459,
+ 56.0957629
+ ],
+ [
+ -2.8823459,
+ 56.1722898
+ ],
+ [
+ -2.4126804,
+ 56.1692316
+ ],
+ [
+ -2.4181736,
+ 56.2334017
+ ],
+ [
+ -2.5857151,
+ 56.2303484
+ ],
+ [
+ -2.5719822,
+ 56.3416356
+ ],
+ [
+ -2.7257908,
+ 56.3462022
+ ],
+ [
+ -2.7312839,
+ 56.4343808
+ ],
+ [
+ -2.6928318,
+ 56.4343808
+ ],
+ [
+ -2.6928318,
+ 56.4859769
+ ],
+ [
+ -2.5307834,
+ 56.4935587
+ ],
+ [
+ -2.5307834,
+ 56.570806
+ ],
+ [
+ -2.5302878,
+ 56.6047947
+ ],
+ [
+ -2.3732428,
+ 56.6044452
+ ],
+ [
+ -2.3684363,
+ 56.7398824
+ ],
+ [
+ -2.3292975,
+ 56.7398824
+ ],
+ [
+ -2.3292975,
+ 56.7888065
+ ],
+ [
+ -2.3145346,
+ 56.7891826
+ ],
+ [
+ -2.3148779,
+ 56.7967036
+ ],
+ [
+ -2.171369,
+ 56.7967036
+ ],
+ [
+ -2.1703979,
+ 56.9710595
+ ],
+ [
+ -2.0101725,
+ 56.9694716
+ ],
+ [
+ -2.0101725,
+ 57.0846832
+ ],
+ [
+ -2.0817687,
+ 57.085349
+ ],
+ [
+ -2.0488097,
+ 57.1259963
+ ],
+ [
+ -2.0409133,
+ 57.126369
+ ],
+ [
+ -2.0383434,
+ 57.2411129
+ ],
+ [
+ -1.878118,
+ 57.2421638
+ ],
+ [
+ -1.8771469,
+ 57.2978175
+ ],
+ [
+ -1.9868771,
+ 57.2983422
+ ],
+ [
+ -1.9082209,
+ 57.3560063
+ ],
+ [
+ -1.8752048,
+ 57.3560063
+ ],
+ [
+ -1.8761758,
+ 57.3769527
+ ],
+ [
+ -1.8120857,
+ 57.4120111
+ ],
+ [
+ -1.7120661,
+ 57.4120111
+ ],
+ [
+ -1.7034646,
+ 57.6441388
+ ],
+ [
+ -1.8666032,
+ 57.6451781
+ ],
+ [
+ -1.8646611,
+ 57.7033351
+ ],
+ [
+ -3.1204292,
+ 57.7064705
+ ],
+ [
+ -3.1218025,
+ 57.7504652
+ ],
+ [
+ -3.4445259,
+ 57.7526635
+ ],
+ [
+ -3.4472724,
+ 57.7138067
+ ],
+ [
+ -3.5145637,
+ 57.7094052
+ ],
+ [
+ -3.5118171,
+ 57.6939956
+ ],
+ [
+ -3.7645027,
+ 57.6917938
+ ],
+ [
+ -3.7672492,
+ 57.6344975
+ ],
+ [
+ -3.842378,
+ 57.6288312
+ ],
+ [
+ -3.8438346,
+ 57.5965825
+ ],
+ [
+ -3.9414265,
+ 57.5916386
+ ],
+ [
+ -3.9404554,
+ 57.6537782
+ ],
+ [
+ -3.8894746,
+ 57.6529989
+ ],
+ [
+ -3.8826772,
+ 57.7676408
+ ],
+ [
+ -3.7224517,
+ 57.766087
+ ],
+ [
+ -3.7195385,
+ 57.8819201
+ ],
+ [
+ -3.9146888,
+ 57.8853352
+ ],
+ [
+ -3.916062,
+ 57.9546243
+ ],
+ [
+ -3.745774,
+ 57.9538956
+ ],
+ [
+ -3.7471473,
+ 58.0688409
+ ],
+ [
+ -3.5837256,
+ 58.0695672
+ ],
+ [
+ -3.5837256,
+ 58.1116689
+ ],
+ [
+ -3.4560096,
+ 58.1138452
+ ],
+ [
+ -3.4544646,
+ 58.228503
+ ],
+ [
+ -3.4379851,
+ 58.2283222
+ ],
+ [
+ -3.4243233,
+ 58.2427725
+ ],
+ [
+ -3.412307,
+ 58.2438567
+ ],
+ [
+ -3.3735115,
+ 58.2695057
+ ],
+ [
+ -3.3063919,
+ 58.2862038
+ ],
+ [
+ -3.1229154,
+ 58.2859395
+ ],
+ [
+ -3.123602,
+ 58.3443661
+ ],
+ [
+ -2.9574338,
+ 58.3447264
+ ],
+ [
+ -2.951254,
+ 58.6422011
+ ],
+ [
+ -2.8812162,
+ 58.6429157
+ ],
+ [
+ -2.8851004,
+ 58.8112825
+ ],
+ [
+ -2.7180775,
+ 58.8142997
+ ],
+ [
+ -2.7161354,
+ 58.8715749
+ ],
+ [
+ -2.556881,
+ 58.8775984
+ ],
+ [
+ -2.5544533,
+ 58.9923453
+ ],
+ [
+ -2.5567617,
+ 59.0483775
+ ],
+ [
+ -2.391893,
+ 59.0485996
+ ],
+ [
+ -2.3918002,
+ 59.1106996
+ ],
+ [
+ -2.4733695,
+ 59.1106996
+ ],
+ [
+ -2.5591563,
+ 59.1783028
+ ],
+ [
+ -2.5630406,
+ 59.2210646
+ ],
+ [
+ -2.3921334,
+ 59.224046
+ ],
+ [
+ -2.3911409,
+ 59.2740075
+ ],
+ [
+ -2.3639512,
+ 59.2745036
+ ],
+ [
+ -2.3658933,
+ 59.285417
+ ],
+ [
+ -2.3911409,
+ 59.284921
+ ],
+ [
+ -2.3911409,
+ 59.3379505
+ ],
+ [
+ -2.2221759,
+ 59.3381981
+ ],
+ [
+ -2.2233897,
+ 59.395965
+ ],
+ [
+ -2.3758467,
+ 59.396583
+ ],
+ [
+ -2.3899271,
+ 59.4026383
+ ],
+ [
+ -2.4008516,
+ 59.3962122
+ ],
+ [
+ -2.5637882,
+ 59.3952604
+ ],
+ [
+ -2.5637882,
+ 59.3385811
+ ],
+ [
+ -2.7320164,
+ 59.3375306
+ ],
+ [
+ -2.7333896,
+ 59.3952604
+ ],
+ [
+ -3.0726511,
+ 59.3931174
+ ],
+ [
+ -3.0703404,
+ 59.3354759
+ ],
+ [
+ -3.0753186,
+ 59.3355634
+ ],
+ [
+ -3.0749753,
+ 59.3292593
+ ],
+ [
+ -3.0698254,
+ 59.3289091
+ ],
+ [
+ -3.069801,
+ 59.2196159
+ ],
+ [
+ -3.2363384,
+ 59.2166341
+ ],
+ [
+ -3.2336751,
+ 59.1606496
+ ],
+ [
+ -3.4032766,
+ 59.1588895
+ ],
+ [
+ -3.394086,
+ 58.9279316
+ ],
+ [
+ -3.5664497,
+ 58.9259268
+ ],
+ [
+ -3.5611089,
+ 58.8679885
+ ],
+ [
+ -3.392508,
+ 58.8699339
+ ],
+ [
+ -3.3894734,
+ 58.8698711
+ ],
+ [
+ -3.3891093,
+ 58.8684905
+ ],
+ [
+ -3.3912942,
+ 58.868616
+ ],
+ [
+ -3.3884161,
+ 58.7543084
+ ],
+ [
+ -3.2238208,
+ 58.7555677
+ ],
+ [
+ -3.2189655,
+ 58.691289
+ ],
+ [
+ -3.4634113,
+ 58.6905753
+ ],
+ [
+ -3.4551716,
+ 58.6341518
+ ],
+ [
+ -3.787508,
+ 58.6341518
+ ],
+ [
+ -3.7861347,
+ 58.5769211
+ ],
+ [
+ -3.9028645,
+ 58.5733411
+ ],
+ [
+ -3.9028645,
+ 58.6477304
+ ],
+ [
+ -4.0690327,
+ 58.6491594
+ ],
+ [
+ -4.0690327,
+ 58.5912376
+ ],
+ [
+ -4.7364521,
+ 58.5933845
+ ],
+ [
+ -4.7364521,
+ 58.6505884
+ ],
+ [
+ -5.0715351,
+ 58.6520173
+ ],
+ [
+ -5.0654779,
+ 58.5325854
+ ],
+ [
+ -5.2332047,
+ 58.5316087
+ ],
+ [
+ -5.2283494,
+ 58.4719947
+ ],
+ [
+ -5.2424298,
+ 58.4719947
+ ],
+ [
+ -5.2366034,
+ 58.4089731
+ ],
+ [
+ -5.2283494,
+ 58.4094818
+ ],
+ [
+ -5.2210664,
+ 58.3005859
+ ],
+ [
+ -5.5657939,
+ 58.2959933
+ ],
+ [
+ -5.5580254,
+ 58.2372573
+ ],
+ [
+ -5.4146722,
+ 58.2401326
+ ],
+ [
+ -5.4141866,
+ 58.2267768
+ ],
+ [
+ -5.3885749,
+ 58.2272242
+ ],
+ [
+ -5.382714,
+ 58.1198615
+ ],
+ [
+ -5.51043,
+ 58.1191362
+ ],
+ [
+ -5.5114011,
+ 58.006214
+ ],
+ [
+ -5.6745397,
+ 58.0041559
+ ],
+ [
+ -5.6716266,
+ 57.9449366
+ ],
+ [
+ -5.6716266,
+ 57.8887166
+ ],
+ [
+ -5.8347652,
+ 57.8856193
+ ],
+ [
+ -5.8277052,
+ 57.5988958
+ ],
+ [
+ -6.0384259,
+ 57.5986357
+ ],
+ [
+ -6.0389115,
+ 57.6459559
+ ],
+ [
+ -6.1981658,
+ 57.6456961
+ ],
+ [
+ -6.2076123,
+ 57.7600132
+ ],
+ [
+ -6.537067,
+ 57.7544033
+ ],
+ [
+ -6.5312406,
+ 57.6402392
+ ],
+ [
+ -6.7002056,
+ 57.6360809
+ ],
+ [
+ -6.6807844,
+ 57.5236293
+ ],
+ [
+ -6.8516915,
+ 57.5152857
+ ],
+ [
+ -6.8361545,
+ 57.3385811
+ ],
+ [
+ -6.6730158,
+ 57.3438213
+ ],
+ [
+ -6.674958,
+ 57.2850883
+ ],
+ [
+ -6.5098772,
+ 57.2850883
+ ],
+ [
+ -6.4982244,
+ 57.1757637
+ ],
+ [
+ -6.3506228,
+ 57.1820797
+ ],
+ [
+ -6.3312015,
+ 57.1251969
+ ],
+ [
+ -6.1797156,
+ 57.1230884
+ ],
+ [
+ -6.1719471,
+ 57.0682265
+ ],
+ [
+ -6.4593819,
+ 57.059779
+ ],
+ [
+ -6.4564687,
+ 57.1093806
+ ],
+ [
+ -6.6671895,
+ 57.1062165
+ ],
+ [
+ -6.6730158,
+ 57.002708
+ ],
+ [
+ -6.5021087,
+ 57.0048233
+ ],
+ [
+ -6.4836097,
+ 56.8917522
+ ],
+ [
+ -6.3266104,
+ 56.8894062
+ ],
+ [
+ -6.3156645,
+ 56.7799312
+ ],
+ [
+ -6.2146739,
+ 56.775675
+ ],
+ [
+ -6.2146739,
+ 56.7234965
+ ],
+ [
+ -6.6866107,
+ 56.7224309
+ ],
+ [
+ -6.6769001,
+ 56.6114413
+ ],
+ [
+ -6.8419809,
+ 56.607166
+ ],
+ [
+ -6.8400387,
+ 56.5483307
+ ],
+ [
+ -7.1546633,
+ 56.5461895
+ ],
+ [
+ -7.1488369,
+ 56.4872592
+ ],
+ [
+ -6.9915246,
+ 56.490476
+ ],
+ [
+ -6.9876404,
+ 56.4325329
+ ],
+ [
+ -6.6827265,
+ 56.4314591
+ ],
+ [
+ -6.6769001,
+ 56.5472601
+ ],
+ [
+ -6.5292985,
+ 56.5504717
+ ],
+ [
+ -6.5234721,
+ 56.4379018
+ ],
+ [
+ -6.3661598,
+ 56.4368281
+ ],
+ [
+ -6.3642177,
+ 56.3766524
+ ],
+ [
+ -6.5273563,
+ 56.3712749
+ ],
+ [
+ -6.5171745,
+ 56.2428427
+ ],
+ [
+ -6.4869621,
+ 56.247421
+ ],
+ [
+ -6.4869621,
+ 56.1893882
+ ],
+ [
+ -6.3001945,
+ 56.1985572
+ ],
+ [
+ -6.3029411,
+ 56.2581017
+ ],
+ [
+ -5.9019401,
+ 56.256576
+ ],
+ [
+ -5.8964469,
+ 56.0960466
+ ],
+ [
+ -6.0282829,
+ 56.0883855
+ ],
+ [
+ -6.0392692,
+ 56.1557502
+ ],
+ [
+ -6.3853385,
+ 56.1542205
+ ],
+ [
+ -6.3606193,
+ 55.96099
+ ],
+ [
+ -6.2123039,
+ 55.9640647
+ ],
+ [
+ -6.2047508,
+ 55.9202269
+ ],
+ [
+ -6.5185478,
+ 55.9129158
+ ],
+ [
+ -6.5061881,
+ 55.7501763
+ ],
+ [
+ -6.6764762,
+ 55.7409005
+ ],
+ [
+ -6.6599967,
+ 55.6263176
+ ],
+ [
+ -6.3551261,
+ 55.6232161
+ ],
+ [
+ -6.3578727,
+ 55.5689002
+ ],
+ [
+ -6.0392692,
+ 55.5720059
+ ],
+ [
+ -6.0310294,
+ 55.6247669
+ ],
+ [
+ -5.7398917,
+ 55.6309694
+ ],
+ [
+ -5.7371452,
+ 55.4569279
+ ],
+ [
+ -5.8964469,
+ 55.4600426
+ ],
+ [
+ -5.8964469,
+ 55.2789864
+ ],
+ [
+ -5.4350211,
+ 55.2821151
+ ],
+ [
+ -5.4405143,
+ 55.4506979
+ ],
+ [
+ -5.2867057,
+ 55.4569279
+ ],
+ [
+ -5.3086784,
+ 55.4070602
+ ],
+ [
+ -4.9735954,
+ 55.4008223
+ ],
+ [
+ -4.9845817,
+ 55.2038242
+ ],
+ [
+ -5.1493766,
+ 55.2038242
+ ],
+ [
+ -5.1411369,
+ 55.037337
+ ],
+ [
+ -5.2152946,
+ 55.0341891
+ ]
+ ],
+ [
+ [
+ -2.1646559,
+ 60.1622059
+ ],
+ [
+ -1.9930299,
+ 60.1609801
+ ],
+ [
+ -1.9946862,
+ 60.1035151
+ ],
+ [
+ -2.1663122,
+ 60.104743
+ ]
+ ],
+ [
+ [
+ -1.5360658,
+ 59.8570831
+ ],
+ [
+ -1.3653566,
+ 59.8559841
+ ],
+ [
+ -1.366847,
+ 59.7975565
+ ],
+ [
+ -1.190628,
+ 59.7964199
+ ],
+ [
+ -1.1862046,
+ 59.9695391
+ ],
+ [
+ -1.0078652,
+ 59.9683948
+ ],
+ [
+ -1.0041233,
+ 60.114145
+ ],
+ [
+ -0.8360832,
+ 60.1130715
+ ],
+ [
+ -0.834574,
+ 60.1716772
+ ],
+ [
+ -1.0074262,
+ 60.1727795
+ ],
+ [
+ -1.0052165,
+ 60.2583924
+ ],
+ [
+ -0.8299659,
+ 60.2572778
+ ],
+ [
+ -0.826979,
+ 60.3726551
+ ],
+ [
+ -0.6507514,
+ 60.3715381
+ ],
+ [
+ -0.6477198,
+ 60.4882292
+ ],
+ [
+ -0.9984896,
+ 60.4904445
+ ],
+ [
+ -0.9970279,
+ 60.546555
+ ],
+ [
+ -0.6425288,
+ 60.5443201
+ ],
+ [
+ -0.6394896,
+ 60.6606792
+ ],
+ [
+ -0.8148133,
+ 60.6617806
+ ],
+ [
+ -0.8132987,
+ 60.7196112
+ ],
+ [
+ -0.6383298,
+ 60.7185141
+ ],
+ [
+ -0.635467,
+ 60.8275393
+ ],
+ [
+ -0.797568,
+ 60.8285523
+ ],
+ [
+ -0.9941426,
+ 60.8297807
+ ],
+ [
+ -0.9954966,
+ 60.7782667
+ ],
+ [
+ -1.1670282,
+ 60.7793403
+ ],
+ [
+ -1.1700357,
+ 60.6646181
+ ],
+ [
+ -1.5222599,
+ 60.6668304
+ ],
+ [
+ -1.5237866,
+ 60.6084426
+ ],
+ [
+ -1.6975673,
+ 60.609536
+ ],
+ [
+ -1.7021271,
+ 60.4345249
+ ],
+ [
+ -1.5260578,
+ 60.4334111
+ ],
+ [
+ -1.5275203,
+ 60.3770719
+ ],
+ [
+ -1.8751127,
+ 60.3792746
+ ],
+ [
+ -1.8781372,
+ 60.2624647
+ ],
+ [
+ -1.7019645,
+ 60.2613443
+ ],
+ [
+ -1.7049134,
+ 60.1470532
+ ],
+ [
+ -1.528659,
+ 60.1459283
+ ]
+ ],
+ [
+ [
+ -0.9847667,
+ 60.8943762
+ ],
+ [
+ -0.9860347,
+ 60.8361105
+ ],
+ [
+ -0.8078362,
+ 60.8351904
+ ],
+ [
+ -0.8065683,
+ 60.8934578
+ ]
+ ],
+ [
+ [
+ -7.7696901,
+ 56.8788231
+ ],
+ [
+ -7.7614504,
+ 56.7608274
+ ],
+ [
+ -7.6009049,
+ 56.7641903
+ ],
+ [
+ -7.5972473,
+ 56.819332
+ ],
+ [
+ -7.4479894,
+ 56.8203948
+ ],
+ [
+ -7.4489319,
+ 56.8794098
+ ],
+ [
+ -7.2841369,
+ 56.8794098
+ ],
+ [
+ -7.2813904,
+ 57.0471152
+ ],
+ [
+ -7.1303283,
+ 57.0515969
+ ],
+ [
+ -7.1330749,
+ 57.511801
+ ],
+ [
+ -6.96828,
+ 57.5147514
+ ],
+ [
+ -6.9765198,
+ 57.6854668
+ ],
+ [
+ -6.8062317,
+ 57.6913392
+ ],
+ [
+ -6.8089782,
+ 57.8041985
+ ],
+ [
+ -6.6496765,
+ 57.8071252
+ ],
+ [
+ -6.6441833,
+ 57.8612267
+ ],
+ [
+ -6.3200866,
+ 57.8626878
+ ],
+ [
+ -6.3200866,
+ 58.1551617
+ ],
+ [
+ -6.1607849,
+ 58.1522633
+ ],
+ [
+ -6.1552917,
+ 58.20874
+ ],
+ [
+ -5.9850036,
+ 58.2101869
+ ],
+ [
+ -5.9904968,
+ 58.2680163
+ ],
+ [
+ -6.1497986,
+ 58.2665717
+ ],
+ [
+ -6.1415588,
+ 58.5557514
+ ],
+ [
+ -6.3173401,
+ 58.5557514
+ ],
+ [
+ -6.3091003,
+ 58.4983923
+ ],
+ [
+ -6.4876282,
+ 58.4955218
+ ],
+ [
+ -6.4876282,
+ 58.4423768
+ ],
+ [
+ -6.6606628,
+ 58.4395018
+ ],
+ [
+ -6.6469299,
+ 58.3819525
+ ],
+ [
+ -6.8117248,
+ 58.3805125
+ ],
+ [
+ -6.8117248,
+ 58.3286357
+ ],
+ [
+ -6.9792663,
+ 58.3286357
+ ],
+ [
+ -6.9710266,
+ 58.2694608
+ ],
+ [
+ -7.1413147,
+ 58.2680163
+ ],
+ [
+ -7.1403816,
+ 58.0358742
+ ],
+ [
+ -7.3020636,
+ 58.0351031
+ ],
+ [
+ -7.3030347,
+ 57.9774797
+ ],
+ [
+ -7.1379539,
+ 57.9777372
+ ],
+ [
+ -7.1413526,
+ 57.9202792
+ ],
+ [
+ -7.1398961,
+ 57.8640206
+ ],
+ [
+ -7.3020636,
+ 57.862471
+ ],
+ [
+ -7.298484,
+ 57.7442293
+ ],
+ [
+ -7.4509193,
+ 57.7456951
+ ],
+ [
+ -7.4550392,
+ 57.6899522
+ ],
+ [
+ -7.6186131,
+ 57.6906048
+ ],
+ [
+ -7.6198341,
+ 57.7456951
+ ],
+ [
+ -7.7901222,
+ 57.7442293
+ ],
+ [
+ -7.7873756,
+ 57.6855477
+ ],
+ [
+ -7.6222332,
+ 57.6853817
+ ],
+ [
+ -7.6173779,
+ 57.5712602
+ ],
+ [
+ -7.788285,
+ 57.5709998
+ ],
+ [
+ -7.7892561,
+ 57.512109
+ ],
+ [
+ -7.7038025,
+ 57.5115874
+ ],
+ [
+ -7.6999183,
+ 57.4546902
+ ],
+ [
+ -7.5367796,
+ 57.4552126
+ ],
+ [
+ -7.5348375,
+ 57.5126306
+ ],
+ [
+ -7.4581235,
+ 57.5131521
+ ],
+ [
+ -7.4552103,
+ 57.2824165
+ ],
+ [
+ -7.6115515,
+ 57.2845158
+ ],
+ [
+ -7.6144647,
+ 57.2272651
+ ],
+ [
+ -7.451326,
+ 57.2256881
+ ],
+ [
+ -7.451326,
+ 57.1103873
+ ],
+ [
+ -7.6164068,
+ 57.1088053
+ ],
+ [
+ -7.603783,
+ 56.8792358
+ ]
+ ],
+ [
+ [
+ -1.7106618,
+ 59.5626284
+ ],
+ [
+ -1.5417509,
+ 59.562215
+ ],
+ [
+ -1.5423082,
+ 59.5037224
+ ],
+ [
+ -1.7112191,
+ 59.5041365
+ ]
+ ]
+ ],
+ "terms_url": "http://geo.nls.uk/maps/",
+ "terms_text": "National Library of Scotland Historic Maps"
+ },
+ {
+ "name": "OS 1:25k historic (OSM)",
+ "type": "tms",
+ "template": "http://ooc.openstreetmap.org/os1/{zoom}/{x}/{y}.jpg",
+ "scaleExtent": [
+ 6,
+ 17
+ ],
+ "polygon": [
+ [
+ [
+ -9,
+ 49.8
+ ],
+ [
+ -9,
+ 61.1
+ ],
+ [
+ 1.9,
+ 61.1
+ ],
+ [
+ 1.9,
+ 49.8
+ ],
+ [
+ -9,
+ 49.8
+ ]
+ ]
+ ]
+ },
+ {
+ "name": "OS New Popular Edition historic",
+ "type": "tms",
+ "template": "http://ooc.openstreetmap.org/npe/{zoom}/{x}/{y}.png",
+ "polygon": [
+ [
+ [
+ -5.8,
+ 49.8
+ ],
+ [
+ -5.8,
+ 55.8
+ ],
+ [
+ 1.9,
+ 55.8
+ ],
+ [
+ 1.9,
+ 49.8
+ ],
+ [
+ -5.8,
+ 49.8
+ ]
+ ]
+ ]
+ },
+ {
+ "name": "OS OpenData Locator",
+ "type": "tms",
+ "template": "http://tiles.itoworld.com/os_locator/{zoom}/{x}/{y}.png",
+ "polygon": [
+ [
+ [
+ -9,
+ 49.8
+ ],
+ [
+ -9,
+ 61.1
+ ],
+ [
+ 1.9,
+ 61.1
+ ],
+ [
+ 1.9,
+ 49.8
+ ],
+ [
+ -9,
+ 49.8
+ ]
+ ]
+ ],
+ "overlay": true
+ },
+ {
+ "name": "OS OpenData StreetView",
+ "type": "tms",
+ "template": "http://os.openstreetmap.org/sv/{zoom}/{x}/{y}.png",
+ "scaleExtent": [
+ 1,
+ 18
+ ],
+ "polygon": [
+ [
+ [
+ -5.8292886,
+ 50.0229734
+ ],
+ [
+ -5.8292886,
+ 50.254819
+ ],
+ [
+ -5.373356,
+ 50.254819
+ ],
+ [
+ -5.373356,
+ 50.3530588
+ ],
+ [
+ -5.1756021,
+ 50.3530588
+ ],
+ [
+ -5.1756021,
+ 50.5925406
+ ],
+ [
+ -4.9970743,
+ 50.5925406
+ ],
+ [
+ -4.9970743,
+ 50.6935617
+ ],
+ [
+ -4.7965738,
+ 50.6935617
+ ],
+ [
+ -4.7965738,
+ 50.7822112
+ ],
+ [
+ -4.6949503,
+ 50.7822112
+ ],
+ [
+ -4.6949503,
+ 50.9607371
+ ],
+ [
+ -4.6043131,
+ 50.9607371
+ ],
+ [
+ -4.6043131,
+ 51.0692066
+ ],
+ [
+ -4.3792215,
+ 51.0692066
+ ],
+ [
+ -4.3792215,
+ 51.2521782
+ ],
+ [
+ -3.9039346,
+ 51.2521782
+ ],
+ [
+ -3.9039346,
+ 51.2916998
+ ],
+ [
+ -3.7171671,
+ 51.2916998
+ ],
+ [
+ -3.7171671,
+ 51.2453014
+ ],
+ [
+ -3.1486246,
+ 51.2453014
+ ],
+ [
+ -3.1486246,
+ 51.362067
+ ],
+ [
+ -3.7446329,
+ 51.362067
+ ],
+ [
+ -3.7446329,
+ 51.4340386
+ ],
+ [
+ -3.8297769,
+ 51.4340386
+ ],
+ [
+ -3.8297769,
+ 51.5298246
+ ],
+ [
+ -4.0852091,
+ 51.5298246
+ ],
+ [
+ -4.0852091,
+ 51.4939284
+ ],
+ [
+ -4.3792215,
+ 51.4939284
+ ],
+ [
+ -4.3792215,
+ 51.5427168
+ ],
+ [
+ -5.1444195,
+ 51.5427168
+ ],
+ [
+ -5.1444195,
+ 51.6296003
+ ],
+ [
+ -5.7387103,
+ 51.6296003
+ ],
+ [
+ -5.7387103,
+ 51.774037
+ ],
+ [
+ -5.5095393,
+ 51.774037
+ ],
+ [
+ -5.5095393,
+ 51.9802596
+ ],
+ [
+ -5.198799,
+ 51.9802596
+ ],
+ [
+ -5.198799,
+ 52.0973358
+ ],
+ [
+ -4.8880588,
+ 52.0973358
+ ],
+ [
+ -4.8880588,
+ 52.1831557
+ ],
+ [
+ -4.4957492,
+ 52.1831557
+ ],
+ [
+ -4.4957492,
+ 52.2925739
+ ],
+ [
+ -4.3015365,
+ 52.2925739
+ ],
+ [
+ -4.3015365,
+ 52.3685318
+ ],
+ [
+ -4.1811246,
+ 52.3685318
+ ],
+ [
+ -4.1811246,
+ 52.7933685
+ ],
+ [
+ -4.4413696,
+ 52.7933685
+ ],
+ [
+ -4.4413696,
+ 52.7369614
+ ],
+ [
+ -4.8569847,
+ 52.7369614
+ ],
+ [
+ -4.8569847,
+ 52.9317255
+ ],
+ [
+ -4.7288044,
+ 52.9317255
+ ],
+ [
+ -4.7288044,
+ 53.5038599
+ ],
+ [
+ -4.1578191,
+ 53.5038599
+ ],
+ [
+ -4.1578191,
+ 53.4113498
+ ],
+ [
+ -3.3110518,
+ 53.4113498
+ ],
+ [
+ -3.3110518,
+ 53.5038599
+ ],
+ [
+ -3.2333667,
+ 53.5038599
+ ],
+ [
+ -3.2333667,
+ 54.0159169
+ ],
+ [
+ -3.3926211,
+ 54.0159169
+ ],
+ [
+ -3.3926211,
+ 54.1980953
+ ],
+ [
+ -3.559644,
+ 54.1980953
+ ],
+ [
+ -3.559644,
+ 54.433732
+ ],
+ [
+ -3.7188984,
+ 54.433732
+ ],
+ [
+ -3.7188984,
+ 54.721897
+ ],
+ [
+ -4.3015365,
+ 54.721897
+ ],
+ [
+ -4.3015365,
+ 54.6140739
+ ],
+ [
+ -5.0473132,
+ 54.6140739
+ ],
+ [
+ -5.0473132,
+ 54.7532915
+ ],
+ [
+ -5.2298731,
+ 54.7532915
+ ],
+ [
+ -5.2298731,
+ 55.2190799
+ ],
+ [
+ -5.6532567,
+ 55.2190799
+ ],
+ [
+ -5.6532567,
+ 55.250088
+ ],
+ [
+ -5.8979647,
+ 55.250088
+ ],
+ [
+ -5.8979647,
+ 55.4822462
+ ],
+ [
+ -6.5933212,
+ 55.4822462
+ ],
+ [
+ -6.5933212,
+ 56.3013441
+ ],
+ [
+ -7.1727691,
+ 56.3013441
+ ],
+ [
+ -7.1727691,
+ 56.5601822
+ ],
+ [
+ -6.8171722,
+ 56.5601822
+ ],
+ [
+ -6.8171722,
+ 56.6991713
+ ],
+ [
+ -6.5315276,
+ 56.6991713
+ ],
+ [
+ -6.5315276,
+ 56.9066964
+ ],
+ [
+ -6.811679,
+ 56.9066964
+ ],
+ [
+ -6.811679,
+ 57.3716613
+ ],
+ [
+ -6.8721038,
+ 57.3716613
+ ],
+ [
+ -6.8721038,
+ 57.5518893
+ ],
+ [
+ -7.0973235,
+ 57.5518893
+ ],
+ [
+ -7.0973235,
+ 57.2411085
+ ],
+ [
+ -7.1742278,
+ 57.2411085
+ ],
+ [
+ -7.1742278,
+ 56.9066964
+ ],
+ [
+ -7.3719817,
+ 56.9066964
+ ],
+ [
+ -7.3719817,
+ 56.8075885
+ ],
+ [
+ -7.5202972,
+ 56.8075885
+ ],
+ [
+ -7.5202972,
+ 56.7142479
+ ],
+ [
+ -7.8306806,
+ 56.7142479
+ ],
+ [
+ -7.8306806,
+ 56.8994605
+ ],
+ [
+ -7.6494061,
+ 56.8994605
+ ],
+ [
+ -7.6494061,
+ 57.4739617
+ ],
+ [
+ -7.8306806,
+ 57.4739617
+ ],
+ [
+ -7.8306806,
+ 57.7915584
+ ],
+ [
+ -7.4736249,
+ 57.7915584
+ ],
+ [
+ -7.4736249,
+ 58.086063
+ ],
+ [
+ -7.1879804,
+ 58.086063
+ ],
+ [
+ -7.1879804,
+ 58.367197
+ ],
+ [
+ -6.8034589,
+ 58.367197
+ ],
+ [
+ -6.8034589,
+ 58.4155786
+ ],
+ [
+ -6.638664,
+ 58.4155786
+ ],
+ [
+ -6.638664,
+ 58.4673277
+ ],
+ [
+ -6.5178143,
+ 58.4673277
+ ],
+ [
+ -6.5178143,
+ 58.5625632
+ ],
+ [
+ -6.0536224,
+ 58.5625632
+ ],
+ [
+ -6.0536224,
+ 58.1568843
+ ],
+ [
+ -6.1470062,
+ 58.1568843
+ ],
+ [
+ -6.1470062,
+ 58.1105865
+ ],
+ [
+ -6.2799798,
+ 58.1105865
+ ],
+ [
+ -6.2799798,
+ 57.7122664
+ ],
+ [
+ -6.1591302,
+ 57.7122664
+ ],
+ [
+ -6.1591302,
+ 57.6667563
+ ],
+ [
+ -5.9339104,
+ 57.6667563
+ ],
+ [
+ -5.9339104,
+ 57.8892524
+ ],
+ [
+ -5.80643,
+ 57.8892524
+ ],
+ [
+ -5.80643,
+ 57.9621767
+ ],
+ [
+ -5.6141692,
+ 57.9621767
+ ],
+ [
+ -5.6141692,
+ 58.0911236
+ ],
+ [
+ -5.490819,
+ 58.0911236
+ ],
+ [
+ -5.490819,
+ 58.3733281
+ ],
+ [
+ -5.3199118,
+ 58.3733281
+ ],
+ [
+ -5.3199118,
+ 58.75015
+ ],
+ [
+ -3.5719977,
+ 58.75015
+ ],
+ [
+ -3.5719977,
+ 59.2091788
+ ],
+ [
+ -3.1944501,
+ 59.2091788
+ ],
+ [
+ -3.1944501,
+ 59.4759216
+ ],
+ [
+ -2.243583,
+ 59.4759216
+ ],
+ [
+ -2.243583,
+ 59.1388749
+ ],
+ [
+ -2.4611012,
+ 59.1388749
+ ],
+ [
+ -2.4611012,
+ 58.8185938
+ ],
+ [
+ -2.7407675,
+ 58.8185938
+ ],
+ [
+ -2.7407675,
+ 58.5804743
+ ],
+ [
+ -2.9116746,
+ 58.5804743
+ ],
+ [
+ -2.9116746,
+ 58.1157523
+ ],
+ [
+ -3.4865441,
+ 58.1157523
+ ],
+ [
+ -3.4865441,
+ 57.740386
+ ],
+ [
+ -1.7153245,
+ 57.740386
+ ],
+ [
+ -1.7153245,
+ 57.2225558
+ ],
+ [
+ -1.9794538,
+ 57.2225558
+ ],
+ [
+ -1.9794538,
+ 56.8760742
+ ],
+ [
+ -2.1658979,
+ 56.8760742
+ ],
+ [
+ -2.1658979,
+ 56.6333186
+ ],
+ [
+ -2.3601106,
+ 56.6333186
+ ],
+ [
+ -2.3601106,
+ 56.0477521
+ ],
+ [
+ -1.9794538,
+ 56.0477521
+ ],
+ [
+ -1.9794538,
+ 55.8650949
+ ],
+ [
+ -1.4745008,
+ 55.8650949
+ ],
+ [
+ -1.4745008,
+ 55.2499926
+ ],
+ [
+ -1.3221997,
+ 55.2499926
+ ],
+ [
+ -1.3221997,
+ 54.8221737
+ ],
+ [
+ -1.0550014,
+ 54.8221737
+ ],
+ [
+ -1.0550014,
+ 54.6746628
+ ],
+ [
+ -0.6618765,
+ 54.6746628
+ ],
+ [
+ -0.6618765,
+ 54.5527463
+ ],
+ [
+ -0.3247617,
+ 54.5527463
+ ],
+ [
+ -0.3247617,
+ 54.2865195
+ ],
+ [
+ 0.0092841,
+ 54.2865195
+ ],
+ [
+ 0.0092841,
+ 53.7938518
+ ],
+ [
+ 0.2081962,
+ 53.7938518
+ ],
+ [
+ 0.2081962,
+ 53.5217726
+ ],
+ [
+ 0.4163548,
+ 53.5217726
+ ],
+ [
+ 0.4163548,
+ 53.0298851
+ ],
+ [
+ 1.4273388,
+ 53.0298851
+ ],
+ [
+ 1.4273388,
+ 52.92021
+ ],
+ [
+ 1.8333912,
+ 52.92021
+ ],
+ [
+ 1.8333912,
+ 52.042488
+ ],
+ [
+ 1.5235504,
+ 52.042488
+ ],
+ [
+ 1.5235504,
+ 51.8261335
+ ],
+ [
+ 1.2697049,
+ 51.8261335
+ ],
+ [
+ 1.2697049,
+ 51.6967453
+ ],
+ [
+ 1.116651,
+ 51.6967453
+ ],
+ [
+ 1.116651,
+ 51.440346
+ ],
+ [
+ 1.5235504,
+ 51.440346
+ ],
+ [
+ 1.5235504,
+ 51.3331831
+ ],
+ [
+ 1.4507565,
+ 51.3331831
+ ],
+ [
+ 1.4507565,
+ 51.0207553
+ ],
+ [
+ 1.0699883,
+ 51.0207553
+ ],
+ [
+ 1.0699883,
+ 50.9008416
+ ],
+ [
+ 0.7788126,
+ 50.9008416
+ ],
+ [
+ 0.7788126,
+ 50.729843
+ ],
+ [
+ -0.7255952,
+ 50.729843
+ ],
+ [
+ -0.7255952,
+ 50.7038437
+ ],
+ [
+ -1.0074383,
+ 50.7038437
+ ],
+ [
+ -1.0074383,
+ 50.5736307
+ ],
+ [
+ -2.3625252,
+ 50.5736307
+ ],
+ [
+ -2.3625252,
+ 50.4846421
+ ],
+ [
+ -2.4987805,
+ 50.4846421
+ ],
+ [
+ -2.4987805,
+ 50.5736307
+ ],
+ [
+ -3.4096378,
+ 50.5736307
+ ],
+ [
+ -3.4096378,
+ 50.2057837
+ ],
+ [
+ -3.6922446,
+ 50.2057837
+ ],
+ [
+ -3.6922446,
+ 50.1347737
+ ],
+ [
+ -5.005468,
+ 50.1347737
+ ],
+ [
+ -5.005468,
+ 49.9474456
+ ],
+ [
+ -5.2839506,
+ 49.9474456
+ ],
+ [
+ -5.2839506,
+ 50.0229734
+ ]
+ ],
+ [
+ [
+ -6.4580707,
+ 49.8673563
+ ],
+ [
+ -6.4580707,
+ 49.9499935
+ ],
+ [
+ -6.3978807,
+ 49.9499935
+ ],
+ [
+ -6.3978807,
+ 50.0053797
+ ],
+ [
+ -6.1799606,
+ 50.0053797
+ ],
+ [
+ -6.1799606,
+ 49.9168614
+ ],
+ [
+ -6.2540201,
+ 49.9168614
+ ],
+ [
+ -6.2540201,
+ 49.8673563
+ ]
+ ],
+ [
+ [
+ -5.8343165,
+ 49.932156
+ ],
+ [
+ -5.8343165,
+ 49.9754641
+ ],
+ [
+ -5.7683254,
+ 49.9754641
+ ],
+ [
+ -5.7683254,
+ 49.932156
+ ]
+ ],
+ [
+ [
+ -1.9483797,
+ 60.6885737
+ ],
+ [
+ -1.9483797,
+ 60.3058841
+ ],
+ [
+ -1.7543149,
+ 60.3058841
+ ],
+ [
+ -1.7543149,
+ 60.1284428
+ ],
+ [
+ -1.5754914,
+ 60.1284428
+ ],
+ [
+ -1.5754914,
+ 59.797917
+ ],
+ [
+ -1.0316959,
+ 59.797917
+ ],
+ [
+ -1.0316959,
+ 60.0354518
+ ],
+ [
+ -0.6626918,
+ 60.0354518
+ ],
+ [
+ -0.6626918,
+ 60.9103862
+ ],
+ [
+ -1.1034395,
+ 60.9103862
+ ],
+ [
+ -1.1034395,
+ 60.8040022
+ ],
+ [
+ -1.3506319,
+ 60.8040022
+ ],
+ [
+ -1.3506319,
+ 60.6885737
+ ]
+ ],
+ [
+ [
+ -2.203381,
+ 60.1968568
+ ],
+ [
+ -2.203381,
+ 60.0929443
+ ],
+ [
+ -1.9864011,
+ 60.0929443
+ ],
+ [
+ -1.9864011,
+ 60.1968568
+ ]
+ ],
+ [
+ [
+ -1.7543149,
+ 59.5698289
+ ],
+ [
+ -1.7543149,
+ 59.4639383
+ ],
+ [
+ -1.5373349,
+ 59.4639383
+ ],
+ [
+ -1.5373349,
+ 59.5698289
+ ]
+ ],
+ [
+ [
+ -4.5585981,
+ 59.1370518
+ ],
+ [
+ -4.5585981,
+ 58.9569099
+ ],
+ [
+ -4.2867004,
+ 58.9569099
+ ],
+ [
+ -4.2867004,
+ 59.1370518
+ ]
+ ],
+ [
+ [
+ -6.2787732,
+ 59.2025744
+ ],
+ [
+ -6.2787732,
+ 59.0227769
+ ],
+ [
+ -5.6650612,
+ 59.0227769
+ ],
+ [
+ -5.6650612,
+ 59.2025744
+ ]
+ ],
+ [
+ [
+ -8.7163482,
+ 57.9440556
+ ],
+ [
+ -8.7163482,
+ 57.7305936
+ ],
+ [
+ -8.3592926,
+ 57.7305936
+ ],
+ [
+ -8.3592926,
+ 57.9440556
+ ]
+ ],
+ [
+ [
+ -7.6077005,
+ 50.4021026
+ ],
+ [
+ -7.6077005,
+ 50.2688657
+ ],
+ [
+ -7.3907205,
+ 50.2688657
+ ],
+ [
+ -7.3907205,
+ 50.4021026
+ ]
+ ],
+ [
+ [
+ -7.7304303,
+ 58.3579902
+ ],
+ [
+ -7.7304303,
+ 58.248313
+ ],
+ [
+ -7.5134503,
+ 58.248313
+ ],
+ [
+ -7.5134503,
+ 58.3579902
+ ]
+ ]
+ ]
+ },
+ {
+ "name": "OS Scottish Popular historic",
+ "type": "tms",
+ "template": "http://ooc.openstreetmap.org/npescotland/tiles/{zoom}/{x}/{y}.jpg",
+ "scaleExtent": [
+ 6,
+ 15
+ ],
+ "polygon": [
+ [
+ [
+ -7.8,
+ 54.5
+ ],
+ [
+ -7.8,
+ 61.1
+ ],
+ [
+ -1.1,
+ 61.1
+ ],
+ [
+ -1.1,
+ 54.5
+ ],
+ [
+ -7.8,
+ 54.5
+ ]
+ ]
+ ]
+ },
+ {
+ "name": "OpenPT Map (overlay)",
+ "type": "tms",
+ "template": "http://openptmap.de/tiles/{zoom}/{x}/{y}.png",
+ "scaleExtent": [
+ 5,
+ 16
+ ],
+ "polygon": [
+ [
+ [
+ 6.4901072,
+ 53.665658
+ ],
+ [
+ 8.5665347,
+ 53.9848257
+ ],
+ [
+ 8.1339457,
+ 54.709715
+ ],
+ [
+ 8.317796,
+ 55.0952362
+ ],
+ [
+ 10.1887438,
+ 54.7783834
+ ],
+ [
+ 10.6321475,
+ 54.4778841
+ ],
+ [
+ 11.2702164,
+ 54.6221504
+ ],
+ [
+ 11.681176,
+ 54.3709243
+ ],
+ [
+ 12.0272473,
+ 54.3898199
+ ],
+ [
+ 13.3250145,
+ 54.8531617
+ ],
+ [
+ 13.9198245,
+ 54.6972173
+ ],
+ [
+ 14.2118221,
+ 54.1308273
+ ],
+ [
+ 14.493005,
+ 53.2665063
+ ],
+ [
+ 14.1577485,
+ 52.8766495
+ ],
+ [
+ 14.7525584,
+ 52.5819369
+ ],
+ [
+ 15.0986297,
+ 51.0171541
+ ],
+ [
+ 14.9364088,
+ 50.8399279
+ ],
+ [
+ 14.730929,
+ 50.7920977
+ ],
+ [
+ 14.4389313,
+ 50.8808862
+ ],
+ [
+ 12.9573138,
+ 50.3939044
+ ],
+ [
+ 12.51391,
+ 50.3939044
+ ],
+ [
+ 12.3084302,
+ 50.1173237
+ ],
+ [
+ 12.6112425,
+ 49.9088337
+ ],
+ [
+ 12.394948,
+ 49.7344006
+ ],
+ [
+ 12.7734634,
+ 49.4047626
+ ],
+ [
+ 14.1469337,
+ 48.6031036
+ ],
+ [
+ 14.6768553,
+ 48.6531391
+ ],
+ [
+ 15.0661855,
+ 49.0445497
+ ],
+ [
+ 16.2666202,
+ 48.7459305
+ ],
+ [
+ 16.4937294,
+ 48.8741286
+ ],
+ [
+ 16.904689,
+ 48.7173975
+ ],
+ [
+ 16.9371332,
+ 48.5315383
+ ],
+ [
+ 16.8384693,
+ 48.3823161
+ ],
+ [
+ 17.2017097,
+ 48.010204
+ ],
+ [
+ 17.1214145,
+ 47.6997605
+ ],
+ [
+ 16.777292,
+ 47.6585709
+ ],
+ [
+ 16.6090543,
+ 47.7460598
+ ],
+ [
+ 16.410228,
+ 47.6637214
+ ],
+ [
+ 16.7352326,
+ 47.6147714
+ ],
+ [
+ 16.5555242,
+ 47.3589738
+ ],
+ [
+ 16.4790525,
+ 46.9768539
+ ],
+ [
+ 16.0355168,
+ 46.8096295
+ ],
+ [
+ 16.0508112,
+ 46.6366332
+ ],
+ [
+ 14.9572663,
+ 46.6313822
+ ],
+ [
+ 14.574908,
+ 46.3892866
+ ],
+ [
+ 12.3954655,
+ 46.6891149
+ ],
+ [
+ 12.1507562,
+ 47.0550608
+ ],
+ [
+ 11.1183887,
+ 46.9142058
+ ],
+ [
+ 11.0342699,
+ 46.7729797
+ ],
+ [
+ 10.4836739,
+ 46.8462544
+ ],
+ [
+ 10.4607324,
+ 46.5472973
+ ],
+ [
+ 10.1013156,
+ 46.5735879
+ ],
+ [
+ 10.2007287,
+ 46.1831867
+ ],
+ [
+ 9.8948421,
+ 46.3629068
+ ],
+ [
+ 9.5966026,
+ 46.2889758
+ ],
+ [
+ 9.2983631,
+ 46.505206
+ ],
+ [
+ 9.2830687,
+ 46.2572605
+ ],
+ [
+ 9.0536537,
+ 45.7953255
+ ],
+ [
+ 8.4265861,
+ 46.2466846
+ ],
+ [
+ 8.4418804,
+ 46.4736161
+ ],
+ [
+ 7.8759901,
+ 45.9284607
+ ],
+ [
+ 7.0959791,
+ 45.8645956
+ ],
+ [
+ 6.7747981,
+ 46.1620044
+ ],
+ [
+ 6.8206811,
+ 46.4051083
+ ],
+ [
+ 6.5453831,
+ 46.4578142
+ ],
+ [
+ 6.3312624,
+ 46.3840116
+ ],
+ [
+ 6.3847926,
+ 46.2466846
+ ],
+ [
+ 5.8953739,
+ 46.0878021
+ ],
+ [
+ 6.1171418,
+ 46.3681838
+ ],
+ [
+ 6.0942003,
+ 46.5998657
+ ],
+ [
+ 6.4383228,
+ 46.7782169
+ ],
+ [
+ 6.4306756,
+ 46.9298747
+ ],
+ [
+ 7.0806847,
+ 47.3460216
+ ],
+ [
+ 6.8436226,
+ 47.3719227
+ ],
+ [
+ 6.9965659,
+ 47.5012373
+ ],
+ [
+ 7.1800979,
+ 47.5064033
+ ],
+ [
+ 7.2336281,
+ 47.439206
+ ],
+ [
+ 7.4553959,
+ 47.4805683
+ ],
+ [
+ 7.7842241,
+ 48.645735
+ ],
+ [
+ 8.1971711,
+ 49.0282701
+ ],
+ [
+ 7.6006921,
+ 49.0382974
+ ],
+ [
+ 7.4477487,
+ 49.1634679
+ ],
+ [
+ 7.2030394,
+ 49.1034255
+ ],
+ [
+ 6.6677378,
+ 49.1634679
+ ],
+ [
+ 6.6371491,
+ 49.3331933
+ ],
+ [
+ 6.3542039,
+ 49.4576194
+ ],
+ [
+ 6.5453831,
+ 49.8043366
+ ],
+ [
+ 6.2471436,
+ 49.873384
+ ],
+ [
+ 6.0789059,
+ 50.1534883
+ ],
+ [
+ 6.3618511,
+ 50.3685934
+ ],
+ [
+ 6.0865531,
+ 50.7039632
+ ],
+ [
+ 5.8800796,
+ 51.0513752
+ ],
+ [
+ 6.1247889,
+ 51.1618085
+ ],
+ [
+ 6.1936134,
+ 51.491527
+ ],
+ [
+ 5.9641984,
+ 51.7526501
+ ],
+ [
+ 6.0253758,
+ 51.8897286
+ ],
+ [
+ 6.4536171,
+ 51.8661241
+ ],
+ [
+ 6.8436226,
+ 51.9557552
+ ],
+ [
+ 6.6906793,
+ 52.0499105
+ ],
+ [
+ 7.0042131,
+ 52.2282603
+ ],
+ [
+ 7.0195074,
+ 52.4525245
+ ],
+ [
+ 6.6983264,
+ 52.4665032
+ ],
+ [
+ 6.6906793,
+ 52.6524628
+ ],
+ [
+ 7.0348017,
+ 52.6385432
+ ],
+ [
+ 7.0730376,
+ 52.8330151
+ ],
+ [
+ 7.2183337,
+ 52.9852064
+ ],
+ [
+ 7.1953922,
+ 53.3428087
+ ],
+ [
+ 7.0042131,
+ 53.3291098
+ ]
+ ]
+ ],
+ "terms_url": "http://openstreetmap.org/",
+ "terms_text": "© OpenStreetMap contributors, CC-BY-SA"
+ },
+ {
+ "name": "OpenStreetMap (Mapnik)",
+ "type": "tms",
+ "description": "The default OpenStreetMap layer.",
+ "template": "http://tile.openstreetmap.org/{zoom}/{x}/{y}.png",
+ "scaleExtent": [
+ 0,
+ 18
+ ],
+ "terms_url": "http://openstreetmap.org/",
+ "terms_text": "© OpenStreetMap contributors, CC-BY-SA",
+ "default": true
+ },
+ {
+ "name": "OpenStreetMap GPS traces",
+ "type": "tms",
+ "description": "Public GPS traces uploaded to OpenStreetMap.",
+ "template": "http://{switch:a,b,c}.gps-tile.openstreetmap.org/lines/{zoom}/{x}/{y}.png",
+ "scaleExtent": [
+ 0,
+ 20
+ ],
+ "terms_url": "http://www.openstreetmap.org/copyright",
+ "terms_text": "© OpenStreetMap contributors",
+ "terms_html": "© <a href='http://www.openstreetmap.org/copyright'>OpenStreetMap contributors</a>. North: <span style='display: inline-block; width: 10px; height: 10px; background-color: #7fed11;'></span> South: <span style='display: inline-block; width: 10px; height: 10px; background-color: #7f11ed;'></span> East: <span style='display: inline-block; width: 10px; height: 10px; background-color: #ff3f3f;'></span> West: <span style='display: inline-block; width: 10px; height: 10px; background-color: #00bfbf;'></span>",
+ "overlay": true
+ },
+ {
+ "name": "Pangasinán/Bulacan (Phillipines HiRes)",
+ "type": "tms",
+ "template": "http://gravitystorm.dev.openstreetmap.org/imagery/philippines/{zoom}/{x}/{y}.png",
+ "scaleExtent": [
+ 12,
+ 19
+ ],
+ "polygon": [
+ [
+ [
+ 120.336593,
+ 15.985768
+ ],
+ [
+ 120.445995,
+ 15.984
+ ],
+ [
+ 120.446134,
+ 15.974459
+ ],
+ [
+ 120.476464,
+ 15.974592
+ ],
+ [
+ 120.594247,
+ 15.946832
+ ],
+ [
+ 120.598064,
+ 16.090795
+ ],
+ [
+ 120.596537,
+ 16.197999
+ ],
+ [
+ 120.368537,
+ 16.218527
+ ],
+ [
+ 120.347576,
+ 16.042308
+ ],
+ [
+ 120.336593,
+ 15.985768
+ ]
+ ],
+ [
+ [
+ 120.8268,
+ 15.3658
+ ],
+ [
+ 121.2684,
+ 15.2602
+ ],
+ [
+ 121.2699,
+ 14.7025
+ ],
+ [
+ 120.695,
+ 14.8423
+ ]
+ ]
+ ]
+ },
+ {
+ "name": "Slovakia EEA CORINE 2006",
+ "type": "tms",
+ "template": "http://www.freemap.sk/tms/clc/{zoom}/{x}/{y}.png",
+ "polygon": [
+ [
+ [
+ 19.83682,
+ 49.25529
+ ],
+ [
+ 19.80075,
+ 49.42385
+ ],
+ [
+ 19.60437,
+ 49.48058
+ ],
+ [
+ 19.49179,
+ 49.63961
+ ],
+ [
+ 19.21831,
+ 49.52604
+ ],
+ [
+ 19.16778,
+ 49.42521
+ ],
+ [
+ 19.00308,
+ 49.42236
+ ],
+ [
+ 18.97611,
+ 49.5308
+ ],
+ [
+ 18.54685,
+ 49.51425
+ ],
+ [
+ 18.31432,
+ 49.33818
+ ],
+ [
+ 18.15913,
+ 49.2961
+ ],
+ [
+ 18.05564,
+ 49.11134
+ ],
+ [
+ 17.56396,
+ 48.84938
+ ],
+ [
+ 17.17929,
+ 48.88816
+ ],
+ [
+ 17.058,
+ 48.81105
+ ],
+ [
+ 16.90426,
+ 48.61947
+ ],
+ [
+ 16.79685,
+ 48.38561
+ ],
+ [
+ 17.06762,
+ 48.01116
+ ],
+ [
+ 17.32787,
+ 47.97749
+ ],
+ [
+ 17.51699,
+ 47.82535
+ ],
+ [
+ 17.74776,
+ 47.73093
+ ],
+ [
+ 18.29515,
+ 47.72075
+ ],
+ [
+ 18.67959,
+ 47.75541
+ ],
+ [
+ 18.89755,
+ 47.81203
+ ],
+ [
+ 18.79463,
+ 47.88245
+ ],
+ [
+ 18.84318,
+ 48.04046
+ ],
+ [
+ 19.46212,
+ 48.05333
+ ],
+ [
+ 19.62064,
+ 48.22938
+ ],
+ [
+ 19.89585,
+ 48.09387
+ ],
+ [
+ 20.33766,
+ 48.2643
+ ],
+ [
+ 20.55395,
+ 48.52358
+ ],
+ [
+ 20.82335,
+ 48.55714
+ ],
+ [
+ 21.10271,
+ 48.47096
+ ],
+ [
+ 21.45863,
+ 48.55513
+ ],
+ [
+ 21.74536,
+ 48.31435
+ ],
+ [
+ 22.15293,
+ 48.37179
+ ],
+ [
+ 22.61255,
+ 49.08914
+ ],
+ [
+ 22.09997,
+ 49.23814
+ ],
+ [
+ 21.9686,
+ 49.36363
+ ],
+ [
+ 21.6244,
+ 49.46989
+ ],
+ [
+ 21.06873,
+ 49.46402
+ ],
+ [
+ 20.94336,
+ 49.31088
+ ],
+ [
+ 20.73052,
+ 49.44006
+ ],
+ [
+ 20.22804,
+ 49.41714
+ ],
+ [
+ 20.05234,
+ 49.23052
+ ],
+ [
+ 19.83682,
+ 49.25529
+ ]
+ ]
+ ],
+ "terms_url": "http://www.eea.europa.eu/data-and-maps/data/clc-2006-vector-data-version-1",
+ "terms_text": "EEA Corine 2006"
+ },
+ {
+ "name": "Slovakia EEA GMES Urban Atlas",
+ "type": "tms",
+ "template": "http://www.freemap.sk/tms/urbanatlas/{zoom}/{x}/{y}.png",
+ "polygon": [
+ [
+ [
+ 19.83682,
+ 49.25529
+ ],
+ [
+ 19.80075,
+ 49.42385
+ ],
+ [
+ 19.60437,
+ 49.48058
+ ],
+ [
+ 19.49179,
+ 49.63961
+ ],
+ [
+ 19.21831,
+ 49.52604
+ ],
+ [
+ 19.16778,
+ 49.42521
+ ],
+ [
+ 19.00308,
+ 49.42236
+ ],
+ [
+ 18.97611,
+ 49.5308
+ ],
+ [
+ 18.54685,
+ 49.51425
+ ],
+ [
+ 18.31432,
+ 49.33818
+ ],
+ [
+ 18.15913,
+ 49.2961
+ ],
+ [
+ 18.05564,
+ 49.11134
+ ],
+ [
+ 17.56396,
+ 48.84938
+ ],
+ [
+ 17.17929,
+ 48.88816
+ ],
+ [
+ 17.058,
+ 48.81105
+ ],
+ [
+ 16.90426,
+ 48.61947
+ ],
+ [
+ 16.79685,
+ 48.38561
+ ],
+ [
+ 17.06762,
+ 48.01116
+ ],
+ [
+ 17.32787,
+ 47.97749
+ ],
+ [
+ 17.51699,
+ 47.82535
+ ],
+ [
+ 17.74776,
+ 47.73093
+ ],
+ [
+ 18.29515,
+ 47.72075
+ ],
+ [
+ 18.67959,
+ 47.75541
+ ],
+ [
+ 18.89755,
+ 47.81203
+ ],
+ [
+ 18.79463,
+ 47.88245
+ ],
+ [
+ 18.84318,
+ 48.04046
+ ],
+ [
+ 19.46212,
+ 48.05333
+ ],
+ [
+ 19.62064,
+ 48.22938
+ ],
+ [
+ 19.89585,
+ 48.09387
+ ],
+ [
+ 20.33766,
+ 48.2643
+ ],
+ [
+ 20.55395,
+ 48.52358
+ ],
+ [
+ 20.82335,
+ 48.55714
+ ],
+ [
+ 21.10271,
+ 48.47096
+ ],
+ [
+ 21.45863,
+ 48.55513
+ ],
+ [
+ 21.74536,
+ 48.31435
+ ],
+ [
+ 22.15293,
+ 48.37179
+ ],
+ [
+ 22.61255,
+ 49.08914
+ ],
+ [
+ 22.09997,
+ 49.23814
+ ],
+ [
+ 21.9686,
+ 49.36363
+ ],
+ [
+ 21.6244,
+ 49.46989
+ ],
+ [
+ 21.06873,
+ 49.46402
+ ],
+ [
+ 20.94336,
+ 49.31088
+ ],
+ [
+ 20.73052,
+ 49.44006
+ ],
+ [
+ 20.22804,
+ 49.41714
+ ],
+ [
+ 20.05234,
+ 49.23052
+ ],
+ [
+ 19.83682,
+ 49.25529
+ ]
+ ]
+ ],
+ "terms_url": "http://www.eea.europa.eu/data-and-maps/data/urban-atlas",
+ "terms_text": "EEA GMES Urban Atlas"
+ },
+ {
+ "name": "Slovakia Historic Maps",
+ "type": "tms",
+ "template": "http://tms.freemap.sk/historicke/{zoom}/{x}/{y}.png",
+ "scaleExtent": [
+ 0,
+ 12
+ ],
+ "polygon": [
+ [
+ [
+ 16.8196949,
+ 47.4927236
+ ],
+ [
+ 16.8196949,
+ 49.5030322
+ ],
+ [
+ 22.8388318,
+ 49.5030322
+ ],
+ [
+ 22.8388318,
+ 47.4927236
+ ],
+ [
+ 16.8196949,
+ 47.4927236
+ ]
+ ]
+ ]
+ },
+ {
+ "name": "South Africa CD:NGI Aerial",
+ "type": "tms",
+ "template": "http://{switch:a,b,c}.aerial.openstreetmap.org.za/ngi-aerial/{zoom}/{x}/{y}.jpg",
+ "scaleExtent": [
+ 1,
+ 22
+ ],
+ "polygon": [
+ [
+ [
+ 17.8396817,
+ -32.7983384
+ ],
+ [
+ 17.8893509,
+ -32.6972835
+ ],
+ [
+ 18.00364,
+ -32.6982187
+ ],
+ [
+ 18.0991679,
+ -32.7485251
+ ],
+ [
+ 18.2898747,
+ -32.5526645
+ ],
+ [
+ 18.2930182,
+ -32.0487089
+ ],
+ [
+ 18.105455,
+ -31.6454966
+ ],
+ [
+ 17.8529257,
+ -31.3443951
+ ],
+ [
+ 17.5480046,
+ -30.902171
+ ],
+ [
+ 17.4044506,
+ -30.6374731
+ ],
+ [
+ 17.2493704,
+ -30.3991663
+ ],
+ [
+ 16.9936977,
+ -29.6543552
+ ],
+ [
+ 16.7987996,
+ -29.19437
+ ],
+ [
+ 16.5494139,
+ -28.8415949
+ ],
+ [
+ 16.4498691,
+ -28.691876
+ ],
+ [
+ 16.4491046,
+ -28.5515766
+ ],
+ [
+ 16.6002551,
+ -28.4825663
+ ],
+ [
+ 16.7514057,
+ -28.4486958
+ ],
+ [
+ 16.7462192,
+ -28.2458973
+ ],
+ [
+ 16.8855148,
+ -28.04729
+ ],
+ [
+ 16.9929502,
+ -28.0244005
+ ],
+ [
+ 17.0529659,
+ -28.0257086
+ ],
+ [
+ 17.1007562,
+ -28.0338839
+ ],
+ [
+ 17.2011527,
+ -28.0930546
+ ],
+ [
+ 17.2026346,
+ -28.2328424
+ ],
+ [
+ 17.2474611,
+ -28.2338215
+ ],
+ [
+ 17.2507953,
+ -28.198892
+ ],
+ [
+ 17.3511919,
+ -28.1975861
+ ],
+ [
+ 17.3515624,
+ -28.2442655
+ ],
+ [
+ 17.4015754,
+ -28.2452446
+ ],
+ [
+ 17.4149122,
+ -28.3489751
+ ],
+ [
+ 17.4008345,
+ -28.547997
+ ],
+ [
+ 17.4526999,
+ -28.5489733
+ ],
+ [
+ 17.4512071,
+ -28.6495106
+ ],
+ [
+ 17.4983599,
+ -28.6872054
+ ],
+ [
+ 17.6028204,
+ -28.6830048
+ ],
+ [
+ 17.6499732,
+ -28.6967928
+ ],
+ [
+ 17.6525928,
+ -28.7381457
+ ],
+ [
+ 17.801386,
+ -28.7381457
+ ],
+ [
+ 17.9994276,
+ -28.7560602
+ ],
+ [
+ 18.0002748,
+ -28.7956172
+ ],
+ [
+ 18.1574507,
+ -28.8718055
+ ],
+ [
+ 18.5063811,
+ -28.8718055
+ ],
+ [
+ 18.6153564,
+ -28.8295875
+ ],
+ [
+ 18.9087513,
+ -28.8277516
+ ],
+ [
+ 19.1046973,
+ -28.9488548
+ ],
+ [
+ 19.1969071,
+ -28.9378513
+ ],
+ [
+ 19.243012,
+ -28.8516164
+ ],
+ [
+ 19.2314858,
+ -28.802963
+ ],
+ [
+ 19.2587296,
+ -28.7009928
+ ],
+ [
+ 19.4431493,
+ -28.6973163
+ ],
+ [
+ 19.5500289,
+ -28.4958332
+ ],
+ [
+ 19.6967264,
+ -28.4939914
+ ],
+ [
+ 19.698822,
+ -28.4479358
+ ],
+ [
+ 19.8507587,
+ -28.4433291
+ ],
+ [
+ 19.8497109,
+ -28.4027818
+ ],
+ [
+ 19.9953605,
+ -28.399095
+ ],
+ [
+ 19.9893671,
+ -24.7497859
+ ],
+ [
+ 20.2916682,
+ -24.9192346
+ ],
+ [
+ 20.4724562,
+ -25.1501701
+ ],
+ [
+ 20.6532441,
+ -25.4529449
+ ],
+ [
+ 20.733265,
+ -25.6801957
+ ],
+ [
+ 20.8281046,
+ -25.8963498
+ ],
+ [
+ 20.8429232,
+ -26.215851
+ ],
+ [
+ 20.6502804,
+ -26.4840868
+ ],
+ [
+ 20.6532441,
+ -26.8204869
+ ],
+ [
+ 21.0889134,
+ -26.846933
+ ],
+ [
+ 21.6727695,
+ -26.8389998
+ ],
+ [
+ 21.7765003,
+ -26.6696268
+ ],
+ [
+ 21.9721069,
+ -26.6431395
+ ],
+ [
+ 22.2803355,
+ -26.3274702
+ ],
+ [
+ 22.5707817,
+ -26.1333967
+ ],
+ [
+ 22.7752795,
+ -25.6775246
+ ],
+ [
+ 23.0005235,
+ -25.2761948
+ ],
+ [
+ 23.4658301,
+ -25.2735148
+ ],
+ [
+ 23.883717,
+ -25.597366
+ ],
+ [
+ 24.2364017,
+ -25.613402
+ ],
+ [
+ 24.603905,
+ -25.7896563
+ ],
+ [
+ 25.110704,
+ -25.7389432
+ ],
+ [
+ 25.5078447,
+ -25.6855376
+ ],
+ [
+ 25.6441766,
+ -25.4823781
+ ],
+ [
+ 25.8419267,
+ -24.7805437
+ ],
+ [
+ 25.846641,
+ -24.7538456
+ ],
+ [
+ 26.3928487,
+ -24.6332894
+ ],
+ [
+ 26.4739066,
+ -24.5653312
+ ],
+ [
+ 26.5089966,
+ -24.4842437
+ ],
+ [
+ 26.5861946,
+ -24.4075775
+ ],
+ [
+ 26.7300635,
+ -24.3014458
+ ],
+ [
+ 26.8567384,
+ -24.2499463
+ ],
+ [
+ 26.8574402,
+ -24.1026901
+ ],
+ [
+ 26.9215471,
+ -23.8990957
+ ],
+ [
+ 26.931831,
+ -23.8461891
+ ],
+ [
+ 26.9714827,
+ -23.6994344
+ ],
+ [
+ 27.0006074,
+ -23.6367644
+ ],
+ [
+ 27.0578041,
+ -23.6052574
+ ],
+ [
+ 27.1360547,
+ -23.5203437
+ ],
+ [
+ 27.3339623,
+ -23.3973792
+ ],
+ [
+ 27.5144057,
+ -23.3593929
+ ],
+ [
+ 27.5958145,
+ -23.2085465
+ ],
+ [
+ 27.8098634,
+ -23.0994957
+ ],
+ [
+ 27.8828506,
+ -23.0620496
+ ],
+ [
+ 27.9382928,
+ -22.9496487
+ ],
+ [
+ 28.0407556,
+ -22.8255118
+ ],
+ [
+ 28.2056786,
+ -22.6552861
+ ],
+ [
+ 28.3397223,
+ -22.5639374
+ ],
+ [
+ 28.4906093,
+ -22.560697
+ ],
+ [
+ 28.6108769,
+ -22.5400248
+ ],
+ [
+ 28.828175,
+ -22.4550173
+ ],
+ [
+ 28.9285324,
+ -22.4232328
+ ],
+ [
+ 28.9594116,
+ -22.3090081
+ ],
+ [
+ 29.0162574,
+ -22.208335
+ ],
+ [
+ 29.2324117,
+ -22.1693453
+ ],
+ [
+ 29.3531213,
+ -22.1842926
+ ],
+ [
+ 29.6548952,
+ -22.1186426
+ ],
+ [
+ 29.7777102,
+ -22.1361956
+ ],
+ [
+ 29.9292989,
+ -22.1849425
+ ],
+ [
+ 30.1166795,
+ -22.2830348
+ ],
+ [
+ 30.2563377,
+ -22.2914767
+ ],
+ [
+ 30.3033582,
+ -22.3395204
+ ],
+ [
+ 30.5061784,
+ -22.3057617
+ ],
+ [
+ 30.8374279,
+ -22.284983
+ ],
+ [
+ 31.0058599,
+ -22.3077095
+ ],
+ [
+ 31.1834152,
+ -22.3232913
+ ],
+ [
+ 31.2930586,
+ -22.3674647
+ ],
+ [
+ 31.5680579,
+ -23.1903385
+ ],
+ [
+ 31.5568311,
+ -23.4430809
+ ],
+ [
+ 31.6931122,
+ -23.6175209
+ ],
+ [
+ 31.7119696,
+ -23.741136
+ ],
+ [
+ 31.7774743,
+ -23.8800628
+ ],
+ [
+ 31.8886337,
+ -23.9481098
+ ],
+ [
+ 31.9144386,
+ -24.1746736
+ ],
+ [
+ 31.9948307,
+ -24.3040878
+ ],
+ [
+ 32.0166656,
+ -24.4405988
+ ],
+ [
+ 32.0077331,
+ -24.6536578
+ ],
+ [
+ 32.019643,
+ -24.9140701
+ ],
+ [
+ 32.035523,
+ -25.0849767
+ ],
+ [
+ 32.019643,
+ -25.3821442
+ ],
+ [
+ 31.9928457,
+ -25.4493771
+ ],
+ [
+ 31.9997931,
+ -25.5165725
+ ],
+ [
+ 32.0057481,
+ -25.6078978
+ ],
+ [
+ 32.0057481,
+ -25.6624806
+ ],
+ [
+ 31.9362735,
+ -25.8403721
+ ],
+ [
+ 31.9809357,
+ -25.9546537
+ ],
+ [
+ 31.8687838,
+ -26.0037251
+ ],
+ [
+ 31.4162062,
+ -25.7277683
+ ],
+ [
+ 31.3229117,
+ -25.7438611
+ ],
+ [
+ 31.2504595,
+ -25.8296526
+ ],
+ [
+ 31.1393001,
+ -25.9162746
+ ],
+ [
+ 31.1164727,
+ -25.9912361
+ ],
+ [
+ 30.9656135,
+ -26.2665756
+ ],
+ [
+ 30.8921689,
+ -26.3279703
+ ],
+ [
+ 30.8534616,
+ -26.4035568
+ ],
+ [
+ 30.8226943,
+ -26.4488849
+ ],
+ [
+ 30.8022583,
+ -26.5240694
+ ],
+ [
+ 30.8038369,
+ -26.8082089
+ ],
+ [
+ 30.9020939,
+ -26.7807451
+ ],
+ [
+ 30.9100338,
+ -26.8489495
+ ],
+ [
+ 30.9824859,
+ -26.9082627
+ ],
+ [
+ 30.976531,
+ -27.0029222
+ ],
+ [
+ 31.0034434,
+ -27.0441587
+ ],
+ [
+ 31.1543322,
+ -27.1980416
+ ],
+ [
+ 31.5015607,
+ -27.311117
+ ],
+ [
+ 31.9700183,
+ -27.311117
+ ],
+ [
+ 31.9700183,
+ -27.120472
+ ],
+ [
+ 31.9769658,
+ -27.050664
+ ],
+ [
+ 32.0002464,
+ -26.7983892
+ ],
+ [
+ 32.1069826,
+ -26.7984645
+ ],
+ [
+ 32.3114546,
+ -26.8479493
+ ],
+ [
+ 32.899986,
+ -26.8516059
+ ],
+ [
+ 32.886091,
+ -26.9816971
+ ],
+ [
+ 32.709427,
+ -27.4785436
+ ],
+ [
+ 32.6240724,
+ -27.7775144
+ ],
+ [
+ 32.5813951,
+ -28.07479
+ ],
+ [
+ 32.5387178,
+ -28.2288046
+ ],
+ [
+ 32.4275584,
+ -28.5021568
+ ],
+ [
+ 32.3640388,
+ -28.5945699
+ ],
+ [
+ 32.0702603,
+ -28.8469827
+ ],
+ [
+ 31.9878832,
+ -28.9069497
+ ],
+ [
+ 31.7764818,
+ -28.969487
+ ],
+ [
+ 31.4638459,
+ -29.2859343
+ ],
+ [
+ 31.359634,
+ -29.3854348
+ ],
+ [
+ 31.1680825,
+ -29.6307408
+ ],
+ [
+ 31.064863,
+ -29.7893535
+ ],
+ [
+ 31.0534493,
+ -29.8470469
+ ],
+ [
+ 31.0669933,
+ -29.8640319
+ ],
+ [
+ 31.0455459,
+ -29.9502017
+ ],
+ [
+ 30.9518556,
+ -30.0033946
+ ],
+ [
+ 30.8651833,
+ -30.1024093
+ ],
+ [
+ 30.7244725,
+ -30.392502
+ ],
+ [
+ 30.3556256,
+ -30.9308873
+ ],
+ [
+ 30.0972364,
+ -31.2458274
+ ],
+ [
+ 29.8673136,
+ -31.4304296
+ ],
+ [
+ 29.7409393,
+ -31.5014699
+ ],
+ [
+ 29.481312,
+ -31.6978686
+ ],
+ [
+ 28.8943171,
+ -32.2898903
+ ],
+ [
+ 28.5497137,
+ -32.5894641
+ ],
+ [
+ 28.1436499,
+ -32.8320732
+ ],
+ [
+ 28.0748735,
+ -32.941689
+ ],
+ [
+ 27.8450942,
+ -33.082869
+ ],
+ [
+ 27.3757956,
+ -33.3860685
+ ],
+ [
+ 26.8805407,
+ -33.6458951
+ ],
+ [
+ 26.5916871,
+ -33.7480756
+ ],
+ [
+ 26.4527308,
+ -33.7935795
+ ],
+ [
+ 26.206754,
+ -33.7548943
+ ],
+ [
+ 26.0077897,
+ -33.7223961
+ ],
+ [
+ 25.8055494,
+ -33.7524272
+ ],
+ [
+ 25.7511073,
+ -33.8006512
+ ],
+ [
+ 25.6529079,
+ -33.8543597
+ ],
+ [
+ 25.6529079,
+ -33.9469768
+ ],
+ [
+ 25.7195789,
+ -34.0040115
+ ],
+ [
+ 25.7202807,
+ -34.0511235
+ ],
+ [
+ 25.5508915,
+ -34.063151
+ ],
+ [
+ 25.3504571,
+ -34.0502627
+ ],
+ [
+ 25.2810609,
+ -34.0020322
+ ],
+ [
+ 25.0476316,
+ -33.9994588
+ ],
+ [
+ 24.954724,
+ -34.0043594
+ ],
+ [
+ 24.9496586,
+ -34.1010363
+ ],
+ [
+ 24.8770358,
+ -34.1506456
+ ],
+ [
+ 24.8762914,
+ -34.2005281
+ ],
+ [
+ 24.8532574,
+ -34.2189562
+ ],
+ [
+ 24.7645287,
+ -34.2017946
+ ],
+ [
+ 24.5001356,
+ -34.2003254
+ ],
+ [
+ 24.3486733,
+ -34.1163824
+ ],
+ [
+ 24.1988819,
+ -34.1019039
+ ],
+ [
+ 23.9963377,
+ -34.0514443
+ ],
+ [
+ 23.8017509,
+ -34.0524332
+ ],
+ [
+ 23.7493589,
+ -34.0111855
+ ],
+ [
+ 23.4973536,
+ -34.009014
+ ],
+ [
+ 23.4155191,
+ -34.0434586
+ ],
+ [
+ 23.4154284,
+ -34.1140433
+ ],
+ [
+ 22.9000853,
+ -34.0993009
+ ],
+ [
+ 22.8412418,
+ -34.0547911
+ ],
+ [
+ 22.6470321,
+ -34.0502627
+ ],
+ [
+ 22.6459843,
+ -34.0072768
+ ],
+ [
+ 22.570016,
+ -34.0064081
+ ],
+ [
+ 22.5050499,
+ -34.0645866
+ ],
+ [
+ 22.2519968,
+ -34.0645866
+ ],
+ [
+ 22.2221334,
+ -34.1014701
+ ],
+ [
+ 22.1621197,
+ -34.1057019
+ ],
+ [
+ 22.1712431,
+ -34.1521766
+ ],
+ [
+ 22.1576913,
+ -34.2180897
+ ],
+ [
+ 22.0015632,
+ -34.2172232
+ ],
+ [
+ 21.9496952,
+ -34.3220009
+ ],
+ [
+ 21.8611528,
+ -34.4007145
+ ],
+ [
+ 21.5614708,
+ -34.4020114
+ ],
+ [
+ 21.5468011,
+ -34.3661242
+ ],
+ [
+ 21.501744,
+ -34.3669892
+ ],
+ [
+ 21.5006961,
+ -34.4020114
+ ],
+ [
+ 21.4194886,
+ -34.4465247
+ ],
+ [
+ 21.1978706,
+ -34.4478208
+ ],
+ [
+ 21.0988193,
+ -34.3991325
+ ],
+ [
+ 21.0033746,
+ -34.3753872
+ ],
+ [
+ 20.893192,
+ -34.3997115
+ ],
+ [
+ 20.8976647,
+ -34.4854003
+ ],
+ [
+ 20.7446802,
+ -34.4828092
+ ],
+ [
+ 20.5042011,
+ -34.486264
+ ],
+ [
+ 20.2527197,
+ -34.701477
+ ],
+ [
+ 20.0803502,
+ -34.8361855
+ ],
+ [
+ 19.9923317,
+ -34.8379056
+ ],
+ [
+ 19.899074,
+ -34.8275845
+ ],
+ [
+ 19.8938348,
+ -34.7936018
+ ],
+ [
+ 19.5972963,
+ -34.7961833
+ ],
+ [
+ 19.3929677,
+ -34.642015
+ ],
+ [
+ 19.2877095,
+ -34.6404784
+ ],
+ [
+ 19.2861377,
+ -34.5986563
+ ],
+ [
+ 19.3474363,
+ -34.5244458
+ ],
+ [
+ 19.3285256,
+ -34.4534372
+ ],
+ [
+ 19.098001,
+ -34.449981
+ ],
+ [
+ 19.0725583,
+ -34.3802371
+ ],
+ [
+ 19.0023531,
+ -34.3525593
+ ],
+ [
+ 18.9520568,
+ -34.3949373
+ ],
+ [
+ 18.7975006,
+ -34.3936403
+ ],
+ [
+ 18.7984174,
+ -34.1016376
+ ],
+ [
+ 18.501748,
+ -34.1015292
+ ],
+ [
+ 18.4999545,
+ -34.3616945
+ ],
+ [
+ 18.4477325,
+ -34.3620007
+ ],
+ [
+ 18.4479944,
+ -34.3522691
+ ],
+ [
+ 18.3974362,
+ -34.3514041
+ ],
+ [
+ 18.3971742,
+ -34.3022959
+ ],
+ [
+ 18.3565705,
+ -34.3005647
+ ],
+ [
+ 18.3479258,
+ -34.2020436
+ ],
+ [
+ 18.2972095,
+ -34.1950274
+ ],
+ [
+ 18.2951139,
+ -33.9937138
+ ],
+ [
+ 18.3374474,
+ -33.9914079
+ ],
+ [
+ 18.3476638,
+ -33.8492427
+ ],
+ [
+ 18.3479258,
+ -33.781555
+ ],
+ [
+ 18.4124718,
+ -33.7448849
+ ],
+ [
+ 18.3615477,
+ -33.6501624
+ ],
+ [
+ 18.2992013,
+ -33.585591
+ ],
+ [
+ 18.2166839,
+ -33.448872
+ ],
+ [
+ 18.1389858,
+ -33.3974083
+ ],
+ [
+ 17.9473472,
+ -33.1602647
+ ],
+ [
+ 17.8855247,
+ -33.0575732
+ ],
+ [
+ 17.8485884,
+ -32.9668505
+ ],
+ [
+ 17.8396817,
+ -32.8507302
+ ]
+ ]
+ ]
+ },
+ {
+ "name": "Stadt Uster Orthophoto 2008 10cm",
+ "type": "tms",
+ "template": "http://mapproxy.sosm.ch:8080/tiles/uster/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",
+ "polygon": [
+ [
+ [
+ 8.6,
+ 47.31
+ ],
+ [
+ 8.6,
+ 47.39
+ ],
+ [
+ 8.77,
+ 47.39
+ ],
+ [
+ 8.77,
+ 47.31
+ ],
+ [
+ 8.6,
+ 47.31
+ ]
+ ]
+ ],
+ "terms_text": "Stadt Uster Vermessung Orthophoto 2008"
+ },
+ {
+ "name": "Stevns (Denmark)",
+ "type": "tms",
+ "template": "http://{switch:a,b,c}.tile.openstreetmap.dk/stevns/2009/{zoom}/{x}/{y}.png",
+ "scaleExtent": [
+ 0,
+ 20
+ ],
+ "polygon": [
+ [
+ [
+ 12.0913942,
+ 55.3491574
+ ],
+ [
+ 12.0943104,
+ 55.3842256
+ ],
+ [
+ 12.1573875,
+ 55.3833103
+ ],
+ [
+ 12.1587287,
+ 55.4013326
+ ],
+ [
+ 12.1903468,
+ 55.400558
+ ],
+ [
+ 12.1931411,
+ 55.4364665
+ ],
+ [
+ 12.2564251,
+ 55.4347995
+ ],
+ [
+ 12.2547073,
+ 55.4168882
+ ],
+ [
+ 12.3822489,
+ 55.4134349
+ ],
+ [
+ 12.3795942,
+ 55.3954143
+ ],
+ [
+ 12.4109213,
+ 55.3946958
+ ],
+ [
+ 12.409403,
+ 55.3766417
+ ],
+ [
+ 12.4407807,
+ 55.375779
+ ],
+ [
+ 12.4394142,
+ 55.3578314
+ ],
+ [
+ 12.4707413,
+ 55.3569971
+ ],
+ [
+ 12.4629475,
+ 55.2672214
+ ],
+ [
+ 12.4315633,
+ 55.2681491
+ ],
+ [
+ 12.430045,
+ 55.2502103
+ ],
+ [
+ 12.3672011,
+ 55.2519673
+ ],
+ [
+ 12.3656858,
+ 55.2340267
+ ],
+ [
+ 12.2714604,
+ 55.2366031
+ ],
+ [
+ 12.2744467,
+ 55.272476
+ ],
+ [
+ 12.2115654,
+ 55.2741475
+ ],
+ [
+ 12.2130078,
+ 55.2920322
+ ],
+ [
+ 12.1815665,
+ 55.2928638
+ ],
+ [
+ 12.183141,
+ 55.3107091
+ ],
+ [
+ 12.2144897,
+ 55.3100981
+ ],
+ [
+ 12.2159927,
+ 55.3279764
+ ],
+ [
+ 12.1214458,
+ 55.3303379
+ ],
+ [
+ 12.1229489,
+ 55.3483291
+ ]
+ ]
+ ],
+ "terms_text": "Stevns Kommune"
+ },
+ {
+ "name": "Surrey Air Survey",
+ "type": "tms",
+ "template": "http://gravitystorm.dev.openstreetmap.org/surrey/{zoom}/{x}/{y}.png",
+ "polygon": [
+ [
+ [
+ -0.856,
+ 51.071
+ ],
+ [
+ -0.856,
+ 51.473
+ ],
+ [
+ 0.062,
+ 51.473
+ ],
+ [
+ 0.062,
+ 51.071
+ ],
+ [
+ -0.856,
+ 51.071
+ ]
+ ]
+ ]
+ },
+ {
+ "name": "TIGER 2012 Roads Overlay",
+ "type": "tms",
+ "description": "Public domain road data from the US Government.",
+ "template": "http://{switch:a,b,c}.tile.openstreetmap.us/tiger2012_roads_expanded/{zoom}/{x}/{y}.png",
+ "scaleExtent": [
+ 16,
+ 19
+ ],
+ "polygon": [
+ [
+ [
+ -124.7617886,
+ 48.4130148
+ ],
+ [
+ -124.6059492,
+ 45.90245
+ ],
+ [
+ -124.9934269,
+ 40.0557614
+ ],
+ [
+ -122.5369737,
+ 36.8566086
+ ],
+ [
+ -119.9775867,
+ 33.0064099
+ ],
+ [
+ -117.675935,
+ 32.4630223
+ ],
+ [
+ -114.8612307,
+ 32.4799891
+ ],
+ [
+ -111.0089311,
+ 31.336015
+ ],
+ [
+ -108.1992687,
+ 31.3260016
+ ],
+ [
+ -108.1871123,
+ 31.7755116
+ ],
+ [
+ -106.5307225,
+ 31.7820947
+ ],
+ [
+ -106.4842052,
+ 31.7464455
+ ],
+ [
+ -106.429317,
+ 31.7520583
+ ],
+ [
+ -106.2868855,
+ 31.5613291
+ ],
+ [
+ -106.205248,
+ 31.446704
+ ],
+ [
+ -105.0205259,
+ 30.5360988
+ ],
+ [
+ -104.5881916,
+ 29.6997856
+ ],
+ [
+ -103.2518856,
+ 28.8908685
+ ],
+ [
+ -102.7173632,
+ 29.3920567
+ ],
+ [
+ -102.1513983,
+ 29.7475702
+ ],
+ [
+ -101.2552871,
+ 29.4810523
+ ],
+ [
+ -100.0062436,
+ 28.0082173
+ ],
+ [
+ -99.2351068,
+ 26.4475962
+ ],
+ [
+ -98.0109067,
+ 25.9928035
+ ],
+ [
+ -97.435024,
+ 25.8266009
+ ],
+ [
+ -96.9555259,
+ 25.9821589
+ ],
+ [
+ -96.8061741,
+ 27.7978168
+ ],
+ [
+ -95.5563349,
+ 28.5876066
+ ],
+ [
+ -93.7405308,
+ 29.4742093
+ ],
+ [
+ -90.9028456,
+ 28.8564513
+ ],
+ [
+ -88.0156706,
+ 28.9944338
+ ],
+ [
+ -88.0162494,
+ 30.0038862
+ ],
+ [
+ -86.0277506,
+ 30.0047454
+ ],
+ [
+ -84.0187909,
+ 28.9961781
+ ],
+ [
+ -81.9971976,
+ 25.9826768
+ ],
+ [
+ -81.9966618,
+ 25.0134917
+ ],
+ [
+ -84.0165592,
+ 25.0125783
+ ],
+ [
+ -84.0160068,
+ 24.0052745
+ ],
+ [
+ -80.0199985,
+ 24.007096
+ ],
+ [
+ -79.8901116,
+ 26.8550713
+ ],
+ [
+ -80.0245309,
+ 32.0161282
+ ],
+ [
+ -75.4147385,
+ 35.0531894
+ ],
+ [
+ -74.0211163,
+ 39.5727927
+ ],
+ [
+ -72.002019,
+ 40.9912464
+ ],
+ [
+ -69.8797398,
+ 40.9920457
+ ],
+ [
+ -69.8489304,
+ 43.2619916
+ ],
+ [
+ -66.9452845,
+ 44.7104937
+ ],
+ [
+ -67.7596632,
+ 47.0990024
+ ],
+ [
+ -69.2505131,
+ 47.5122328
+ ],
+ [
+ -70.4614886,
+ 46.2176574
+ ],
+ [
+ -71.412273,
+ 45.254878
+ ],
+ [
+ -72.0222508,
+ 45.0059846
+ ],
+ [
+ -75.0798841,
+ 44.9802854
+ ],
+ [
+ -76.9023061,
+ 43.8024568
+ ],
+ [
+ -78.7623935,
+ 43.6249578
+ ],
+ [
+ -79.15798,
+ 43.4462589
+ ],
+ [
+ -79.0060087,
+ 42.8005317
+ ],
+ [
+ -82.662475,
+ 41.6889458
+ ],
+ [
+ -82.1761642,
+ 43.588535
+ ],
+ [
+ -83.2813977,
+ 46.138853
+ ],
+ [
+ -87.5064535,
+ 48.0142702
+ ],
+ [
+ -88.3492194,
+ 48.2963271
+ ],
+ [
+ -89.4353148,
+ 47.9837822
+ ],
+ [
+ -93.9981078,
+ 49.0067142
+ ],
+ [
+ -95.1105379,
+ 49.412004
+ ],
+ [
+ -96.0131199,
+ 49.0060547
+ ],
+ [
+ -123.3228926,
+ 49.0042878
+ ],
+ [
+ -123.2275233,
+ 48.1849927
+ ]
+ ],
+ [
+ [
+ -160.5787616,
+ 22.5062947
+ ],
+ [
+ -160.5782192,
+ 21.4984647
+ ],
+ [
+ -158.7470604,
+ 21.2439843
+ ],
+ [
+ -157.5083185,
+ 20.995803
+ ],
+ [
+ -155.9961942,
+ 18.7790194
+ ],
+ [
+ -154.6217803,
+ 18.7586966
+ ],
+ [
+ -154.6890176,
+ 19.8805722
+ ],
+ [
+ -156.2927622,
+ 21.2225888
+ ],
+ [
+ -157.5047384,
+ 21.9984962
+ ],
+ [
+ -159.0093692,
+ 22.5070181
+ ]
+ ],
+ [
+ [
+ -167.1571546,
+ 68.721974
+ ],
+ [
+ -164.8553982,
+ 67.0255078
+ ],
+ [
+ -168.002195,
+ 66.0017503
+ ],
+ [
+ -169.0087448,
+ 66.001546
+ ],
+ [
+ -169.0075381,
+ 64.9987675
+ ],
+ [
+ -172.5143281,
+ 63.8767267
+ ],
+ [
+ -173.8197023,
+ 59.74014
+ ],
+ [
+ -162.5018149,
+ 58.0005815
+ ],
+ [
+ -160.0159024,
+ 58.0012389
+ ],
+ [
+ -160.0149725,
+ 57.000035
+ ],
+ [
+ -160.5054788,
+ 56.9999017
+ ],
+ [
+ -165.8092575,
+ 54.824847
+ ],
+ [
+ -178.000097,
+ 52.2446469
+ ],
+ [
+ -177.9992996,
+ 51.2554252
+ ],
+ [
+ -171.4689067,
+ 51.8215329
+ ],
+ [
+ -162.40251,
+ 53.956664
+ ],
+ [
+ -159.0075717,
+ 55.002502
+ ],
+ [
+ -158.0190709,
+ 55.0027849
+ ],
+ [
+ -151.9963213,
+ 55.9991902
+ ],
+ [
+ -151.500341,
+ 57.9987853
+ ],
+ [
+ -151.5012894,
+ 58.9919816
+ ],
+ [
+ -138.5159989,
+ 58.9953194
+ ],
+ [
+ -138.5150471,
+ 57.9986434
+ ],
+ [
+ -133.9948193,
+ 54.0031685
+ ],
+ [
+ -130.0044418,
+ 54.0043387
+ ],
+ [
+ -130.0070826,
+ 57.0000507
+ ],
+ [
+ -131.975877,
+ 56.9995156
+ ],
+ [
+ -135.1229873,
+ 59.756601
+ ],
+ [
+ -138.0071813,
+ 59.991805
+ ],
+ [
+ -139.1715881,
+ 60.4127229
+ ],
+ [
+ -140.9874011,
+ 61.0118551
+ ],
+ [
+ -140.9683975,
+ 69.9535069
+ ],
+ [
+ -156.176891,
+ 71.5633329
+ ],
+ [
+ -160.413634,
+ 70.7397728
+ ],
+ [
+ -163.0218273,
+ 69.9707435
+ ],
+ [
+ -164.9717003,
+ 68.994689
+ ]
+ ]
+ ],
+ "overlay": true
+ },
+ {
+ "name": "Toulouse - Orthophotoplan 2007",
+ "type": "tms",
+ "template": "http://wms.openstreetmap.fr/tms/1.0.0/toulouse_ortho2007/{zoom}/{x}/{y}",
+ "scaleExtent": [
+ 0,
+ 22
+ ],
+ "polygon": [
+ [
+ [
+ 1.1919978,
+ 43.6328791
+ ],
+ [
+ 1.2015377,
+ 43.6329729
+ ],
+ [
+ 1.2011107,
+ 43.6554932
+ ],
+ [
+ 1.2227985,
+ 43.6557029
+ ],
+ [
+ 1.2226231,
+ 43.6653353
+ ],
+ [
+ 1.2275341,
+ 43.6653849
+ ],
+ [
+ 1.2275417,
+ 43.6656387
+ ],
+ [
+ 1.2337568,
+ 43.6656883
+ ],
+ [
+ 1.2337644,
+ 43.6650153
+ ],
+ [
+ 1.2351218,
+ 43.6650319
+ ],
+ [
+ 1.2350913,
+ 43.6670729
+ ],
+ [
+ 1.2443566,
+ 43.6671556
+ ],
+ [
+ 1.2441584,
+ 43.6743925
+ ],
+ [
+ 1.2493973,
+ 43.6744256
+ ],
+ [
+ 1.2493973,
+ 43.6746628
+ ],
+ [
+ 1.2555666,
+ 43.6747234
+ ],
+ [
+ 1.2555742,
+ 43.6744532
+ ],
+ [
+ 1.2569545,
+ 43.6744697
+ ],
+ [
+ 1.2568782,
+ 43.678529
+ ],
+ [
+ 1.2874873,
+ 43.6788257
+ ],
+ [
+ 1.2870803,
+ 43.7013229
+ ],
+ [
+ 1.3088219,
+ 43.7014632
+ ],
+ [
+ 1.3086493,
+ 43.7127673
+ ],
+ [
+ 1.3303262,
+ 43.7129544
+ ],
+ [
+ 1.3300242,
+ 43.7305221
+ ],
+ [
+ 1.3367106,
+ 43.7305845
+ ],
+ [
+ 1.3367322,
+ 43.7312235
+ ],
+ [
+ 1.3734338,
+ 43.7310456
+ ],
+ [
+ 1.3735848,
+ 43.7245772
+ ],
+ [
+ 1.4604504,
+ 43.7252947
+ ],
+ [
+ 1.4607783,
+ 43.7028034
+ ],
+ [
+ 1.4824875,
+ 43.7029516
+ ],
+ [
+ 1.4829828,
+ 43.6692071
+ ],
+ [
+ 1.5046832,
+ 43.6693616
+ ],
+ [
+ 1.5048383,
+ 43.6581174
+ ],
+ [
+ 1.5265475,
+ 43.6582656
+ ],
+ [
+ 1.5266945,
+ 43.6470298
+ ],
+ [
+ 1.548368,
+ 43.6471633
+ ],
+ [
+ 1.5485357,
+ 43.6359385
+ ],
+ [
+ 1.5702172,
+ 43.636082
+ ],
+ [
+ 1.5705123,
+ 43.6135777
+ ],
+ [
+ 1.5488166,
+ 43.6134276
+ ],
+ [
+ 1.549097,
+ 43.5909479
+ ],
+ [
+ 1.5707695,
+ 43.5910694
+ ],
+ [
+ 1.5709373,
+ 43.5798341
+ ],
+ [
+ 1.5793714,
+ 43.5798894
+ ],
+ [
+ 1.5794782,
+ 43.5737682
+ ],
+ [
+ 1.5809119,
+ 43.5737792
+ ],
+ [
+ 1.5810859,
+ 43.5573794
+ ],
+ [
+ 1.5712334,
+ 43.5573131
+ ],
+ [
+ 1.5716504,
+ 43.5235497
+ ],
+ [
+ 1.3984804,
+ 43.5222618
+ ],
+ [
+ 1.3986509,
+ 43.5110113
+ ],
+ [
+ 1.3120959,
+ 43.5102543
+ ],
+ [
+ 1.3118968,
+ 43.5215192
+ ],
+ [
+ 1.2902569,
+ 43.5213126
+ ],
+ [
+ 1.2898637,
+ 43.5438168
+ ],
+ [
+ 1.311517,
+ 43.5440133
+ ],
+ [
+ 1.3113271,
+ 43.5552596
+ ],
+ [
+ 1.3036924,
+ 43.5551924
+ ],
+ [
+ 1.3036117,
+ 43.5595099
+ ],
+ [
+ 1.2955449,
+ 43.5594317
+ ],
+ [
+ 1.2955449,
+ 43.5595489
+ ],
+ [
+ 1.2895595,
+ 43.5594473
+ ],
+ [
+ 1.2892899,
+ 43.5775366
+ ],
+ [
+ 1.2675698,
+ 43.5773647
+ ],
+ [
+ 1.2673973,
+ 43.5886141
+ ],
+ [
+ 1.25355,
+ 43.5885047
+ ],
+ [
+ 1.2533774,
+ 43.5956282
+ ],
+ [
+ 1.2518029,
+ 43.5956282
+ ],
+ [
+ 1.2518029,
+ 43.5949409
+ ],
+ [
+ 1.2350437,
+ 43.5947847
+ ],
+ [
+ 1.2350437,
+ 43.5945972
+ ],
+ [
+ 1.2239572,
+ 43.5945972
+ ],
+ [
+ 1.2239357,
+ 43.5994708
+ ],
+ [
+ 1.2139708,
+ 43.599299
+ ],
+ [
+ 1.2138845,
+ 43.6046408
+ ],
+ [
+ 1.2020647,
+ 43.6044846
+ ],
+ [
+ 1.2019464,
+ 43.61048
+ ],
+ [
+ 1.1924294,
+ 43.6103695
+ ]
+ ]
+ ],
+ "terms_url": "https://wiki.openstreetmap.org/wiki/Toulouse/ToulouseMetropoleData",
+ "terms_text": "ToulouseMetropole"
+ },
+ {
+ "name": "Toulouse - Orthophotoplan 2011",
+ "type": "tms",
+ "template": "http://wms.openstreetmap.fr/tms/1.0.0/toulouse_ortho2011/{zoom}/{x}/{y}",
+ "scaleExtent": [
+ 0,
+ 22
+ ],
+ "polygon": [
+ [
+ [
+ 1.1135067,
+ 43.6867566
+ ],
+ [
+ 1.1351836,
+ 43.6870842
+ ],
+ [
+ 1.1348907,
+ 43.6983471
+ ],
+ [
+ 1.1782867,
+ 43.6990338
+ ],
+ [
+ 1.1779903,
+ 43.7102786
+ ],
+ [
+ 1.1996591,
+ 43.7106144
+ ],
+ [
+ 1.1993387,
+ 43.7218722
+ ],
+ [
+ 1.2427356,
+ 43.7225269
+ ],
+ [
+ 1.2424336,
+ 43.7337491
+ ],
+ [
+ 1.2641536,
+ 43.734092
+ ],
+ [
+ 1.2638301,
+ 43.7453588
+ ],
+ [
+ 1.2855285,
+ 43.7456548
+ ],
+ [
+ 1.2852481,
+ 43.756935
+ ],
+ [
+ 1.306925,
+ 43.757231
+ ],
+ [
+ 1.3066446,
+ 43.7684779
+ ],
+ [
+ 1.3283431,
+ 43.7687894
+ ],
+ [
+ 1.3280842,
+ 43.780034
+ ],
+ [
+ 1.4367275,
+ 43.7815757
+ ],
+ [
+ 1.4373098,
+ 43.7591004
+ ],
+ [
+ 1.4590083,
+ 43.7593653
+ ],
+ [
+ 1.4593318,
+ 43.7481479
+ ],
+ [
+ 1.4810303,
+ 43.7483972
+ ],
+ [
+ 1.4813322,
+ 43.7371777
+ ],
+ [
+ 1.5030307,
+ 43.7374115
+ ],
+ [
+ 1.5035915,
+ 43.7149664
+ ],
+ [
+ 1.5253115,
+ 43.7151846
+ ],
+ [
+ 1.5256135,
+ 43.7040057
+ ],
+ [
+ 1.5472688,
+ 43.7042552
+ ],
+ [
+ 1.5475708,
+ 43.6930431
+ ],
+ [
+ 1.5692045,
+ 43.6932926
+ ],
+ [
+ 1.5695712,
+ 43.6820316
+ ],
+ [
+ 1.5912049,
+ 43.6822656
+ ],
+ [
+ 1.5917441,
+ 43.6597998
+ ],
+ [
+ 1.613421,
+ 43.6600339
+ ],
+ [
+ 1.613723,
+ 43.6488291
+ ],
+ [
+ 1.6353783,
+ 43.6490788
+ ],
+ [
+ 1.6384146,
+ 43.5140731
+ ],
+ [
+ 1.2921649,
+ 43.5094658
+ ],
+ [
+ 1.2918629,
+ 43.5206966
+ ],
+ [
+ 1.2702076,
+ 43.5203994
+ ],
+ [
+ 1.2698841,
+ 43.5316437
+ ],
+ [
+ 1.2482288,
+ 43.531331
+ ],
+ [
+ 1.2476048,
+ 43.5537788
+ ],
+ [
+ 1.2259628,
+ 43.5534914
+ ],
+ [
+ 1.2256819,
+ 43.564716
+ ],
+ [
+ 1.2039835,
+ 43.564419
+ ],
+ [
+ 1.2033148,
+ 43.5869049
+ ],
+ [
+ 1.1816164,
+ 43.5865611
+ ],
+ [
+ 1.1810237,
+ 43.6090368
+ ],
+ [
+ 1.1592821,
+ 43.6086932
+ ],
+ [
+ 1.1589585,
+ 43.6199523
+ ],
+ [
+ 1.1372601,
+ 43.6196244
+ ],
+ [
+ 1.1365933,
+ 43.642094
+ ],
+ [
+ 1.1149055,
+ 43.6417629
+ ]
+ ]
+ ],
+ "terms_url": "https://wiki.openstreetmap.org/wiki/Toulouse/ToulouseMetropoleData",
+ "terms_text": "ToulouseMetropole"
+ },
+ {
+ "name": "Tours - Orthophotos 2008",
+ "type": "tms",
+ "template": "http://tms.mapspot.ge/tms/2/nonstandard/{zoom}/{x}/{y}.jpeg",
+ "polygon": [
+ [
+ [
+ 0.5457462,
+ 47.465264
+ ],
+ [
+ 0.54585,
+ 47.4608163
+ ],
+ [
+ 0.5392188,
+ 47.4606983
+ ],
+ [
+ 0.5393484,
+ 47.456243
+ ],
+ [
+ 0.5327959,
+ 47.4561003
+ ],
+ [
+ 0.5329011,
+ 47.451565
+ ],
+ [
+ 0.52619,
+ 47.4514013
+ ],
+ [
+ 0.5265854,
+ 47.4424884
+ ],
+ [
+ 0.5000941,
+ 47.4420739
+ ],
+ [
+ 0.5002357,
+ 47.4375835
+ ],
+ [
+ 0.4936014,
+ 47.4374324
+ ],
+ [
+ 0.4937,
+ 47.4329285
+ ],
+ [
+ 0.4606141,
+ 47.4324593
+ ],
+ [
+ 0.4607248,
+ 47.4279827
+ ],
+ [
+ 0.4541016,
+ 47.4278125
+ ],
+ [
+ 0.454932,
+ 47.4053921
+ ],
+ [
+ 0.4615431,
+ 47.4054476
+ ],
+ [
+ 0.4619097,
+ 47.3964924
+ ],
+ [
+ 0.4684346,
+ 47.3966005
+ ],
+ [
+ 0.4691319,
+ 47.3786415
+ ],
+ [
+ 0.4757125,
+ 47.3787609
+ ],
+ [
+ 0.4762116,
+ 47.3652018
+ ],
+ [
+ 0.4828297,
+ 47.3653499
+ ],
+ [
+ 0.4832223,
+ 47.3518574
+ ],
+ [
+ 0.5097927,
+ 47.3522592
+ ],
+ [
+ 0.5095688,
+ 47.3567713
+ ],
+ [
+ 0.5227698,
+ 47.3569785
+ ],
+ [
+ 0.5226429,
+ 47.3614867
+ ],
+ [
+ 0.5490721,
+ 47.3618878
+ ],
+ [
+ 0.5489087,
+ 47.3663307
+ ],
+ [
+ 0.5555159,
+ 47.3664985
+ ],
+ [
+ 0.5559105,
+ 47.3575522
+ ],
+ [
+ 0.6152789,
+ 47.358407
+ ],
+ [
+ 0.6152963,
+ 47.362893
+ ],
+ [
+ 0.6285093,
+ 47.3630936
+ ],
+ [
+ 0.6288256,
+ 47.353987
+ ],
+ [
+ 0.6155012,
+ 47.3538823
+ ],
+ [
+ 0.6157682,
+ 47.3493424
+ ],
+ [
+ 0.6090956,
+ 47.3492991
+ ],
+ [
+ 0.6094735,
+ 47.3402962
+ ],
+ [
+ 0.6160477,
+ 47.3404448
+ ],
+ [
+ 0.616083,
+ 47.3369074
+ ],
+ [
+ 0.77497,
+ 47.3388218
+ ],
+ [
+ 0.7745786,
+ 47.351628
+ ],
+ [
+ 0.7680363,
+ 47.3515901
+ ],
+ [
+ 0.767589,
+ 47.3605298
+ ],
+ [
+ 0.7742443,
+ 47.3606238
+ ],
+ [
+ 0.7733465,
+ 47.3921266
+ ],
+ [
+ 0.7667434,
+ 47.3920195
+ ],
+ [
+ 0.7664411,
+ 47.4010837
+ ],
+ [
+ 0.7730647,
+ 47.4011115
+ ],
+ [
+ 0.7728868,
+ 47.4101297
+ ],
+ [
+ 0.7661849,
+ 47.4100226
+ ],
+ [
+ 0.7660267,
+ 47.4145044
+ ],
+ [
+ 0.7527613,
+ 47.4143038
+ ],
+ [
+ 0.7529788,
+ 47.4098086
+ ],
+ [
+ 0.7462373,
+ 47.4097016
+ ],
+ [
+ 0.7459424,
+ 47.4232208
+ ],
+ [
+ 0.7392324,
+ 47.4231451
+ ],
+ [
+ 0.738869,
+ 47.4366116
+ ],
+ [
+ 0.7323267,
+ 47.4365171
+ ],
+ [
+ 0.7321869,
+ 47.4410556
+ ],
+ [
+ 0.7255048,
+ 47.44098
+ ],
+ [
+ 0.7254209,
+ 47.4453479
+ ],
+ [
+ 0.7318793,
+ 47.4454803
+ ],
+ [
+ 0.7318514,
+ 47.4501126
+ ],
+ [
+ 0.7384496,
+ 47.450226
+ ],
+ [
+ 0.7383098,
+ 47.454631
+ ],
+ [
+ 0.7449359,
+ 47.4547444
+ ],
+ [
+ 0.7443209,
+ 47.4771985
+ ],
+ [
+ 0.7310685,
+ 47.4769717
+ ],
+ [
+ 0.7309008,
+ 47.4815445
+ ],
+ [
+ 0.7176205,
+ 47.4812611
+ ],
+ [
+ 0.7177883,
+ 47.4768394
+ ],
+ [
+ 0.69777,
+ 47.4764993
+ ],
+ [
+ 0.6980496,
+ 47.4719827
+ ],
+ [
+ 0.6914514,
+ 47.4718882
+ ],
+ [
+ 0.6917309,
+ 47.4630241
+ ],
+ [
+ 0.6851048,
+ 47.4629295
+ ],
+ [
+ 0.684937,
+ 47.4673524
+ ],
+ [
+ 0.678255,
+ 47.4673335
+ ],
+ [
+ 0.6779754,
+ 47.4762158
+ ],
+ [
+ 0.6714051,
+ 47.4761592
+ ],
+ [
+ 0.6710417,
+ 47.4881952
+ ],
+ [
+ 0.6577334,
+ 47.4879685
+ ],
+ [
+ 0.6578173,
+ 47.48504
+ ],
+ [
+ 0.6511911,
+ 47.4848322
+ ],
+ [
+ 0.6514707,
+ 47.4758568
+ ],
+ [
+ 0.6448166,
+ 47.4757245
+ ],
+ [
+ 0.6449284,
+ 47.4712646
+ ],
+ [
+ 0.6117976,
+ 47.4707543
+ ],
+ [
+ 0.6118815,
+ 47.4663129
+ ],
+ [
+ 0.6052833,
+ 47.4661239
+ ],
+ [
+ 0.6054231,
+ 47.4616631
+ ],
+ [
+ 0.5988808,
+ 47.4615497
+ ],
+ [
+ 0.5990206,
+ 47.4570886
+ ],
+ [
+ 0.572488,
+ 47.4566916
+ ],
+ [
+ 0.5721805,
+ 47.4656513
+ ]
+ ]
+ ],
+ "terms_url": "http://wiki.openstreetmap.org/wiki/Tours/Orthophoto",
+ "terms_text": "Orthophoto Tour(s) Plus 2008"
+ },
+ {
+ "name": "Tours - Orthophotos 2008-2010",
+ "type": "tms",
+ "template": "http://wms.openstreetmap.fr/tms/1.0.0/tours/{zoom}/{x}/{y}",
+ "scaleExtent": [
+ 0,
+ 20
+ ],
+ "polygon": [
+ [
+ [
+ 0.5457462,
+ 47.465264
+ ],
+ [
+ 0.54585,
+ 47.4608163
+ ],
+ [
+ 0.5392188,
+ 47.4606983
+ ],
+ [
+ 0.5393484,
+ 47.456243
+ ],
+ [
+ 0.5327959,
+ 47.4561003
+ ],
+ [
+ 0.5329011,
+ 47.451565
+ ],
+ [
+ 0.52619,
+ 47.4514013
+ ],
+ [
+ 0.5265854,
+ 47.4424884
+ ],
+ [
+ 0.5000941,
+ 47.4420739
+ ],
+ [
+ 0.5002357,
+ 47.4375835
+ ],
+ [
+ 0.4936014,
+ 47.4374324
+ ],
+ [
+ 0.4937,
+ 47.4329285
+ ],
+ [
+ 0.4606141,
+ 47.4324593
+ ],
+ [
+ 0.4607248,
+ 47.4279827
+ ],
+ [
+ 0.4541016,
+ 47.4278125
+ ],
+ [
+ 0.454932,
+ 47.4053921
+ ],
+ [
+ 0.4615431,
+ 47.4054476
+ ],
+ [
+ 0.4619097,
+ 47.3964924
+ ],
+ [
+ 0.4684346,
+ 47.3966005
+ ],
+ [
+ 0.4691319,
+ 47.3786415
+ ],
+ [
+ 0.4757125,
+ 47.3787609
+ ],
+ [
+ 0.4762116,
+ 47.3652018
+ ],
+ [
+ 0.4828297,
+ 47.3653499
+ ],
+ [
+ 0.4829611,
+ 47.3608321
+ ],
+ [
+ 0.4763543,
+ 47.360743
+ ],
+ [
+ 0.476654,
+ 47.3517263
+ ],
+ [
+ 0.4700497,
+ 47.3516186
+ ],
+ [
+ 0.4701971,
+ 47.3471313
+ ],
+ [
+ 0.4637503,
+ 47.3470104
+ ],
+ [
+ 0.4571425,
+ 47.3424146
+ ],
+ [
+ 0.4572922,
+ 47.3379061
+ ],
+ [
+ 0.4506741,
+ 47.3378081
+ ],
+ [
+ 0.4508379,
+ 47.3333051
+ ],
+ [
+ 0.4442212,
+ 47.3332032
+ ],
+ [
+ 0.4443809,
+ 47.328711
+ ],
+ [
+ 0.4311392,
+ 47.3284977
+ ],
+ [
+ 0.4316262,
+ 47.3150004
+ ],
+ [
+ 0.4382432,
+ 47.3151136
+ ],
+ [
+ 0.4383815,
+ 47.3106174
+ ],
+ [
+ 0.4714487,
+ 47.3111374
+ ],
+ [
+ 0.4713096,
+ 47.3156565
+ ],
+ [
+ 0.477888,
+ 47.3157542
+ ],
+ [
+ 0.4780733,
+ 47.3112802
+ ],
+ [
+ 0.4846826,
+ 47.3113639
+ ],
+ [
+ 0.4848576,
+ 47.3068686
+ ],
+ [
+ 0.4914359,
+ 47.3069803
+ ],
+ [
+ 0.491745,
+ 47.2979733
+ ],
+ [
+ 0.4851578,
+ 47.2978722
+ ],
+ [
+ 0.4854269,
+ 47.2888744
+ ],
+ [
+ 0.4788485,
+ 47.2887697
+ ],
+ [
+ 0.4791574,
+ 47.2797818
+ ],
+ [
+ 0.4857769,
+ 47.2799005
+ ],
+ [
+ 0.4859107,
+ 47.2753885
+ ],
+ [
+ 0.492539,
+ 47.2755029
+ ],
+ [
+ 0.4926669,
+ 47.2710127
+ ],
+ [
+ 0.4992986,
+ 47.2711066
+ ],
+ [
+ 0.4994296,
+ 47.2666116
+ ],
+ [
+ 0.5192658,
+ 47.2669245
+ ],
+ [
+ 0.5194225,
+ 47.2624231
+ ],
+ [
+ 0.5260186,
+ 47.2625205
+ ],
+ [
+ 0.5258735,
+ 47.2670183
+ ],
+ [
+ 0.5456972,
+ 47.2673383
+ ],
+ [
+ 0.5455537,
+ 47.2718283
+ ],
+ [
+ 0.5587737,
+ 47.2720366
+ ],
+ [
+ 0.5586259,
+ 47.2765185
+ ],
+ [
+ 0.5652252,
+ 47.2766278
+ ],
+ [
+ 0.5650848,
+ 47.2811206
+ ],
+ [
+ 0.5716753,
+ 47.2812285
+ ],
+ [
+ 0.5715223,
+ 47.2857217
+ ],
+ [
+ 0.5781436,
+ 47.2858299
+ ],
+ [
+ 0.5779914,
+ 47.2903294
+ ],
+ [
+ 0.5846023,
+ 47.2904263
+ ],
+ [
+ 0.5843076,
+ 47.2994231
+ ],
+ [
+ 0.597499,
+ 47.2996094
+ ],
+ [
+ 0.5976637,
+ 47.2951375
+ ],
+ [
+ 0.6571596,
+ 47.2960036
+ ],
+ [
+ 0.6572988,
+ 47.2915091
+ ],
+ [
+ 0.6705019,
+ 47.2917186
+ ],
+ [
+ 0.6703475,
+ 47.2962082
+ ],
+ [
+ 0.6836175,
+ 47.2963688
+ ],
+ [
+ 0.6834322,
+ 47.3008929
+ ],
+ [
+ 0.690062,
+ 47.3009558
+ ],
+ [
+ 0.6899241,
+ 47.3054703
+ ],
+ [
+ 0.7362019,
+ 47.3061157
+ ],
+ [
+ 0.7360848,
+ 47.3106063
+ ],
+ [
+ 0.7559022,
+ 47.3108935
+ ],
+ [
+ 0.7557718,
+ 47.315392
+ ],
+ [
+ 0.7623755,
+ 47.3154716
+ ],
+ [
+ 0.7622314,
+ 47.3199941
+ ],
+ [
+ 0.7754911,
+ 47.3201546
+ ],
+ [
+ 0.77497,
+ 47.3388218
+ ],
+ [
+ 0.7745786,
+ 47.351628
+ ],
+ [
+ 0.7680363,
+ 47.3515901
+ ],
+ [
+ 0.767589,
+ 47.3605298
+ ],
+ [
+ 0.7742443,
+ 47.3606238
+ ],
+ [
+ 0.7733465,
+ 47.3921266
+ ],
+ [
+ 0.7667434,
+ 47.3920195
+ ],
+ [
+ 0.7664411,
+ 47.4010837
+ ],
+ [
+ 0.7730647,
+ 47.4011115
+ ],
+ [
+ 0.7728868,
+ 47.4101297
+ ],
+ [
+ 0.7661849,
+ 47.4100226
+ ],
+ [
+ 0.7660267,
+ 47.4145044
+ ],
+ [
+ 0.7527613,
+ 47.4143038
+ ],
+ [
+ 0.7529788,
+ 47.4098086
+ ],
+ [
+ 0.7462373,
+ 47.4097016
+ ],
+ [
+ 0.7459424,
+ 47.4232208
+ ],
+ [
+ 0.7392324,
+ 47.4231451
+ ],
+ [
+ 0.738869,
+ 47.4366116
+ ],
+ [
+ 0.7323267,
+ 47.4365171
+ ],
+ [
+ 0.7321869,
+ 47.4410556
+ ],
+ [
+ 0.7255048,
+ 47.44098
+ ],
+ [
+ 0.7254209,
+ 47.4453479
+ ],
+ [
+ 0.7318793,
+ 47.4454803
+ ],
+ [
+ 0.7318514,
+ 47.4501126
+ ],
+ [
+ 0.7384496,
+ 47.450226
+ ],
+ [
+ 0.7383098,
+ 47.454631
+ ],
+ [
+ 0.7449359,
+ 47.4547444
+ ],
+ [
+ 0.7443209,
+ 47.4771985
+ ],
+ [
+ 0.7310685,
+ 47.4769717
+ ],
+ [
+ 0.7309008,
+ 47.4815445
+ ],
+ [
+ 0.7176205,
+ 47.4812611
+ ],
+ [
+ 0.7177883,
+ 47.4768394
+ ],
+ [
+ 0.69777,
+ 47.4764993
+ ],
+ [
+ 0.6980496,
+ 47.4719827
+ ],
+ [
+ 0.6914514,
+ 47.4718882
+ ],
+ [
+ 0.6917309,
+ 47.4630241
+ ],
+ [
+ 0.6851048,
+ 47.4629295
+ ],
+ [
+ 0.684937,
+ 47.4673524
+ ],
+ [
+ 0.678255,
+ 47.4673335
+ ],
+ [
+ 0.6779754,
+ 47.4762158
+ ],
+ [
+ 0.6714051,
+ 47.4761592
+ ],
+ [
+ 0.6710417,
+ 47.4881952
+ ],
+ [
+ 0.6577334,
+ 47.4879685
+ ],
+ [
+ 0.6578173,
+ 47.48504
+ ],
+ [
+ 0.6511911,
+ 47.4848322
+ ],
+ [
+ 0.6514707,
+ 47.4758568
+ ],
+ [
+ 0.6448166,
+ 47.4757245
+ ],
+ [
+ 0.6449284,
+ 47.4712646
+ ],
+ [
+ 0.6117976,
+ 47.4707543
+ ],
+ [
+ 0.6118815,
+ 47.4663129
+ ],
+ [
+ 0.6052833,
+ 47.4661239
+ ],
+ [
+ 0.6054231,
+ 47.4616631
+ ],
+ [
+ 0.5988808,
+ 47.4615497
+ ],
+ [
+ 0.5990206,
+ 47.4570886
+ ],
+ [
+ 0.572488,
+ 47.4566916
+ ],
+ [
+ 0.5721805,
+ 47.4656513
+ ]
+ ]
+ ],
+ "terms_url": "http://wiki.openstreetmap.org/wiki/Tours/Orthophoto",
+ "terms_text": "Orthophoto Tour(s) Plus 2008"
+ },
+ {
+ "name": "USGS Large Scale Imagery",
+ "type": "tms",
+ "template": "http://{switch:a,b,c}.tile.openstreetmap.us/usgs_large_scale/{zoom}/{x}/{y}.jpg",
+ "scaleExtent": [
+ 12,
+ 20
+ ],
+ "polygon": [
+ [
+ [
+ -123.2549305,
+ 48.7529029
+ ],
+ [
+ -123.2549305,
+ 48.5592263
+ ],
+ [
+ -123.192224,
+ 48.5592263
+ ],
+ [
+ -123.192224,
+ 48.4348366
+ ],
+ [
+ -122.9419646,
+ 48.4348366
+ ],
+ [
+ -122.9419646,
+ 48.3720812
+ ],
+ [
+ -122.8806229,
+ 48.3720812
+ ],
+ [
+ -122.8806229,
+ 48.3094763
+ ],
+ [
+ -122.8167566,
+ 48.3094763
+ ],
+ [
+ -122.8167566,
+ 48.1904587
+ ],
+ [
+ -123.0041133,
+ 48.1904587
+ ],
+ [
+ -123.0041133,
+ 48.1275918
+ ],
+ [
+ -123.058416,
+ 48.1275918
+ ],
+ [
+ -123.058416,
+ 48.190514
+ ],
+ [
+ -123.254113,
+ 48.190514
+ ],
+ [
+ -123.254113,
+ 48.1274982
+ ],
+ [
+ -123.3706593,
+ 48.1274982
+ ],
+ [
+ -123.3706593,
+ 48.1908403
+ ],
+ [
+ -124.0582632,
+ 48.1908403
+ ],
+ [
+ -124.0582632,
+ 48.253442
+ ],
+ [
+ -124.1815163,
+ 48.253442
+ ],
+ [
+ -124.1815163,
+ 48.3164666
+ ],
+ [
+ -124.4319117,
+ 48.3164666
+ ],
+ [
+ -124.4319117,
+ 48.3782613
+ ],
+ [
+ -124.5564618,
+ 48.3782613
+ ],
+ [
+ -124.5564618,
+ 48.4408305
+ ],
+ [
+ -124.7555107,
+ 48.4408305
+ ],
+ [
+ -124.7555107,
+ 48.1914986
+ ],
+ [
+ -124.8185282,
+ 48.1914986
+ ],
+ [
+ -124.8185282,
+ 48.1228381
+ ],
+ [
+ -124.7552951,
+ 48.1228381
+ ],
+ [
+ -124.7552951,
+ 47.5535253
+ ],
+ [
+ -124.3812108,
+ 47.5535253
+ ],
+ [
+ -124.3812108,
+ 47.1218696
+ ],
+ [
+ -124.1928897,
+ 47.1218696
+ ],
+ [
+ -124.1928897,
+ 43.7569431
+ ],
+ [
+ -124.4443382,
+ 43.7569431
+ ],
+ [
+ -124.4443382,
+ 43.1425556
+ ],
+ [
+ -124.6398855,
+ 43.1425556
+ ],
+ [
+ -124.6398855,
+ 42.6194503
+ ],
+ [
+ -124.4438525,
+ 42.6194503
+ ],
+ [
+ -124.4438525,
+ 39.8080662
+ ],
+ [
+ -123.8815685,
+ 39.8080662
+ ],
+ [
+ -123.8815685,
+ 39.1102825
+ ],
+ [
+ -123.75805,
+ 39.1102825
+ ],
+ [
+ -123.75805,
+ 38.4968799
+ ],
+ [
+ -123.2702803,
+ 38.4968799
+ ],
+ [
+ -123.2702803,
+ 37.9331905
+ ],
+ [
+ -122.8148084,
+ 37.9331905
+ ],
+ [
+ -122.8148084,
+ 37.8019606
+ ],
+ [
+ -122.5664316,
+ 37.8019606
+ ],
+ [
+ -122.5664316,
+ 36.9319611
+ ],
+ [
+ -121.8784026,
+ 36.9319611
+ ],
+ [
+ -121.8784026,
+ 36.6897596
+ ],
+ [
+ -122.0034748,
+ 36.6897596
+ ],
+ [
+ -122.0034748,
+ 36.4341056
+ ],
+ [
+ -121.9414159,
+ 36.4341056
+ ],
+ [
+ -121.9414159,
+ 35.9297636
+ ],
+ [
+ -121.5040977,
+ 35.9297636
+ ],
+ [
+ -121.5040977,
+ 35.8100273
+ ],
+ [
+ -121.3790276,
+ 35.8100273
+ ],
+ [
+ -121.3790276,
+ 35.4239164
+ ],
+ [
+ -120.9426515,
+ 35.4239164
+ ],
+ [
+ -120.9426515,
+ 35.1849683
+ ],
+ [
+ -120.8171978,
+ 35.1849683
+ ],
+ [
+ -120.8171978,
+ 35.1219894
+ ],
+ [
+ -120.6918447,
+ 35.1219894
+ ],
+ [
+ -120.6918447,
+ 34.4966794
+ ],
+ [
+ -120.5045898,
+ 34.4966794
+ ],
+ [
+ -120.5045898,
+ 34.4339651
+ ],
+ [
+ -120.0078775,
+ 34.4339651
+ ],
+ [
+ -120.0078775,
+ 34.3682626
+ ],
+ [
+ -119.5283517,
+ 34.3682626
+ ],
+ [
+ -119.5283517,
+ 34.0576434
+ ],
+ [
+ -119.0060985,
+ 34.0576434
+ ],
+ [
+ -119.0060985,
+ 33.9975267
+ ],
+ [
+ -118.5046259,
+ 33.9975267
+ ],
+ [
+ -118.5046259,
+ 33.8694631
+ ],
+ [
+ -118.4413209,
+ 33.8694631
+ ],
+ [
+ -118.4413209,
+ 33.6865253
+ ],
+ [
+ -118.066912,
+ 33.6865253
+ ],
+ [
+ -118.066912,
+ 33.3063832
+ ],
+ [
+ -117.5030045,
+ 33.3063832
+ ],
+ [
+ -117.5030045,
+ 33.0500337
+ ],
+ [
+ -117.3188195,
+ 33.0500337
+ ],
+ [
+ -117.3188195,
+ 32.6205888
+ ],
+ [
+ -117.1917023,
+ 32.6205888
+ ],
+ [
+ -117.1917023,
+ 32.4974566
+ ],
+ [
+ -116.746496,
+ 32.4974566
+ ],
+ [
+ -116.746496,
+ 32.5609161
+ ],
+ [
+ -115.9970138,
+ 32.5609161
+ ],
+ [
+ -115.9970138,
+ 32.6264942
+ ],
+ [
+ -114.8808125,
+ 32.6264942
+ ],
+ [
+ -114.8808125,
+ 32.4340796
+ ],
+ [
+ -114.6294474,
+ 32.4340796
+ ],
+ [
+ -114.6294474,
+ 32.3731636
+ ],
+ [
+ -114.4447437,
+ 32.3731636
+ ],
+ [
+ -114.4447437,
+ 32.3075418
+ ],
+ [
+ -114.2557628,
+ 32.3075418
+ ],
+ [
+ -114.2557628,
+ 32.2444561
+ ],
+ [
+ -114.0680274,
+ 32.2444561
+ ],
+ [
+ -114.0680274,
+ 32.1829113
+ ],
+ [
+ -113.8166499,
+ 32.1829113
+ ],
+ [
+ -113.8166499,
+ 32.1207622
+ ],
+ [
+ -113.6307421,
+ 32.1207622
+ ],
+ [
+ -113.6307421,
+ 32.0565099
+ ],
+ [
+ -113.4417495,
+ 32.0565099
+ ],
+ [
+ -113.4417495,
+ 31.9984372
+ ],
+ [
+ -113.2546027,
+ 31.9984372
+ ],
+ [
+ -113.2546027,
+ 31.9325434
+ ],
+ [
+ -113.068072,
+ 31.9325434
+ ],
+ [
+ -113.068072,
+ 31.8718062
+ ],
+ [
+ -112.8161105,
+ 31.8718062
+ ],
+ [
+ -112.8161105,
+ 31.8104171
+ ],
+ [
+ -112.6308756,
+ 31.8104171
+ ],
+ [
+ -112.6308756,
+ 31.7464723
+ ],
+ [
+ -112.4418918,
+ 31.7464723
+ ],
+ [
+ -112.4418918,
+ 31.6856001
+ ],
+ [
+ -112.257192,
+ 31.6856001
+ ],
+ [
+ -112.257192,
+ 31.6210352
+ ],
+ [
+ -112.0033787,
+ 31.6210352
+ ],
+ [
+ -112.0033787,
+ 31.559584
+ ],
+ [
+ -111.815619,
+ 31.559584
+ ],
+ [
+ -111.815619,
+ 31.4970238
+ ],
+ [
+ -111.6278586,
+ 31.4970238
+ ],
+ [
+ -111.6278586,
+ 31.4339867
+ ],
+ [
+ -111.4418978,
+ 31.4339867
+ ],
+ [
+ -111.4418978,
+ 31.3733859
+ ],
+ [
+ -111.2559708,
+ 31.3733859
+ ],
+ [
+ -111.2559708,
+ 31.3113225
+ ],
+ [
+ -108.1845822,
+ 31.3113225
+ ],
+ [
+ -108.1845822,
+ 31.7459502
+ ],
+ [
+ -106.5065055,
+ 31.7459502
+ ],
+ [
+ -106.5065055,
+ 31.6842308
+ ],
+ [
+ -106.3797265,
+ 31.6842308
+ ],
+ [
+ -106.3797265,
+ 31.621752
+ ],
+ [
+ -106.317434,
+ 31.621752
+ ],
+ [
+ -106.317434,
+ 31.4968167
+ ],
+ [
+ -106.2551769,
+ 31.4968167
+ ],
+ [
+ -106.2551769,
+ 31.4344889
+ ],
+ [
+ -106.1924698,
+ 31.4344889
+ ],
+ [
+ -106.1924698,
+ 31.3721296
+ ],
+ [
+ -106.0039212,
+ 31.3721296
+ ],
+ [
+ -106.0039212,
+ 31.309328
+ ],
+ [
+ -105.9416582,
+ 31.309328
+ ],
+ [
+ -105.9416582,
+ 31.2457547
+ ],
+ [
+ -105.8798174,
+ 31.2457547
+ ],
+ [
+ -105.8798174,
+ 31.1836194
+ ],
+ [
+ -105.8162349,
+ 31.1836194
+ ],
+ [
+ -105.8162349,
+ 31.1207155
+ ],
+ [
+ -105.6921198,
+ 31.1207155
+ ],
+ [
+ -105.6921198,
+ 31.0584835
+ ],
+ [
+ -105.6302881,
+ 31.0584835
+ ],
+ [
+ -105.6302881,
+ 30.9328271
+ ],
+ [
+ -105.5044418,
+ 30.9328271
+ ],
+ [
+ -105.5044418,
+ 30.8715864
+ ],
+ [
+ -105.4412973,
+ 30.8715864
+ ],
+ [
+ -105.4412973,
+ 30.808463
+ ],
+ [
+ -105.3781497,
+ 30.808463
+ ],
+ [
+ -105.3781497,
+ 30.7471828
+ ],
+ [
+ -105.1904658,
+ 30.7471828
+ ],
+ [
+ -105.1904658,
+ 30.6843231
+ ],
+ [
+ -105.1286244,
+ 30.6843231
+ ],
+ [
+ -105.1286244,
+ 30.6199737
+ ],
+ [
+ -105.0036504,
+ 30.6199737
+ ],
+ [
+ -105.0036504,
+ 30.5589058
+ ],
+ [
+ -104.9417962,
+ 30.5589058
+ ],
+ [
+ -104.9417962,
+ 30.4963236
+ ],
+ [
+ -104.8782018,
+ 30.4963236
+ ],
+ [
+ -104.8782018,
+ 30.3098261
+ ],
+ [
+ -104.8155257,
+ 30.3098261
+ ],
+ [
+ -104.8155257,
+ 30.2478305
+ ],
+ [
+ -104.7536079,
+ 30.2478305
+ ],
+ [
+ -104.7536079,
+ 29.9353916
+ ],
+ [
+ -104.690949,
+ 29.9353916
+ ],
+ [
+ -104.690949,
+ 29.8090156
+ ],
+ [
+ -104.6291301,
+ 29.8090156
+ ],
+ [
+ -104.6291301,
+ 29.6843577
+ ],
+ [
+ -104.5659869,
+ 29.6843577
+ ],
+ [
+ -104.5659869,
+ 29.6223459
+ ],
+ [
+ -104.5037188,
+ 29.6223459
+ ],
+ [
+ -104.5037188,
+ 29.5595436
+ ],
+ [
+ -104.4410072,
+ 29.5595436
+ ],
+ [
+ -104.4410072,
+ 29.4974832
+ ],
+ [
+ -104.2537551,
+ 29.4974832
+ ],
+ [
+ -104.2537551,
+ 29.3716718
+ ],
+ [
+ -104.1291984,
+ 29.3716718
+ ],
+ [
+ -104.1291984,
+ 29.3091621
+ ],
+ [
+ -104.0688737,
+ 29.3091621
+ ],
+ [
+ -104.0688737,
+ 29.2467276
+ ],
+ [
+ -103.8187309,
+ 29.2467276
+ ],
+ [
+ -103.8187309,
+ 29.1843076
+ ],
+ [
+ -103.755736,
+ 29.1843076
+ ],
+ [
+ -103.755736,
+ 29.1223174
+ ],
+ [
+ -103.5667542,
+ 29.1223174
+ ],
+ [
+ -103.5667542,
+ 29.0598119
+ ],
+ [
+ -103.5049819,
+ 29.0598119
+ ],
+ [
+ -103.5049819,
+ 28.9967506
+ ],
+ [
+ -103.3165753,
+ 28.9967506
+ ],
+ [
+ -103.3165753,
+ 28.9346923
+ ],
+ [
+ -103.0597572,
+ 28.9346923
+ ],
+ [
+ -103.0597572,
+ 29.0592965
+ ],
+ [
+ -102.9979694,
+ 29.0592965
+ ],
+ [
+ -102.9979694,
+ 29.1212855
+ ],
+ [
+ -102.9331397,
+ 29.1212855
+ ],
+ [
+ -102.9331397,
+ 29.1848575
+ ],
+ [
+ -102.8095989,
+ 29.1848575
+ ],
+ [
+ -102.8095989,
+ 29.2526154
+ ],
+ [
+ -102.8701345,
+ 29.2526154
+ ],
+ [
+ -102.8701345,
+ 29.308096
+ ],
+ [
+ -102.8096681,
+ 29.308096
+ ],
+ [
+ -102.8096681,
+ 29.3715484
+ ],
+ [
+ -102.7475655,
+ 29.3715484
+ ],
+ [
+ -102.7475655,
+ 29.5581899
+ ],
+ [
+ -102.684554,
+ 29.5581899
+ ],
+ [
+ -102.684554,
+ 29.6847655
+ ],
+ [
+ -102.4967764,
+ 29.6847655
+ ],
+ [
+ -102.4967764,
+ 29.7457694
+ ],
+ [
+ -102.3086647,
+ 29.7457694
+ ],
+ [
+ -102.3086647,
+ 29.8086627
+ ],
+ [
+ -102.1909323,
+ 29.8086627
+ ],
+ [
+ -102.1909323,
+ 29.7460097
+ ],
+ [
+ -101.5049914,
+ 29.7460097
+ ],
+ [
+ -101.5049914,
+ 29.6846777
+ ],
+ [
+ -101.3805796,
+ 29.6846777
+ ],
+ [
+ -101.3805796,
+ 29.5594459
+ ],
+ [
+ -101.3175057,
+ 29.5594459
+ ],
+ [
+ -101.3175057,
+ 29.4958934
+ ],
+ [
+ -101.1910075,
+ 29.4958934
+ ],
+ [
+ -101.1910075,
+ 29.4326115
+ ],
+ [
+ -101.067501,
+ 29.4326115
+ ],
+ [
+ -101.067501,
+ 29.308808
+ ],
+ [
+ -100.9418897,
+ 29.308808
+ ],
+ [
+ -100.9418897,
+ 29.2456231
+ ],
+ [
+ -100.8167271,
+ 29.2456231
+ ],
+ [
+ -100.8167271,
+ 29.1190449
+ ],
+ [
+ -100.7522672,
+ 29.1190449
+ ],
+ [
+ -100.7522672,
+ 29.0578214
+ ],
+ [
+ -100.6925358,
+ 29.0578214
+ ],
+ [
+ -100.6925358,
+ 28.8720431
+ ],
+ [
+ -100.6290158,
+ 28.8720431
+ ],
+ [
+ -100.6290158,
+ 28.8095363
+ ],
+ [
+ -100.5679901,
+ 28.8095363
+ ],
+ [
+ -100.5679901,
+ 28.622554
+ ],
+ [
+ -100.5040411,
+ 28.622554
+ ],
+ [
+ -100.5040411,
+ 28.5583804
+ ],
+ [
+ -100.4421832,
+ 28.5583804
+ ],
+ [
+ -100.4421832,
+ 28.4968266
+ ],
+ [
+ -100.379434,
+ 28.4968266
+ ],
+ [
+ -100.379434,
+ 28.3092865
+ ],
+ [
+ -100.3171942,
+ 28.3092865
+ ],
+ [
+ -100.3171942,
+ 28.1835681
+ ],
+ [
+ -100.254483,
+ 28.1835681
+ ],
+ [
+ -100.254483,
+ 28.1213885
+ ],
+ [
+ -100.1282282,
+ 28.1213885
+ ],
+ [
+ -100.1282282,
+ 28.059215
+ ],
+ [
+ -100.0659537,
+ 28.059215
+ ],
+ [
+ -100.0659537,
+ 27.9966087
+ ],
+ [
+ -100.0023855,
+ 27.9966087
+ ],
+ [
+ -100.0023855,
+ 27.9332152
+ ],
+ [
+ -99.9426497,
+ 27.9332152
+ ],
+ [
+ -99.9426497,
+ 27.7454658
+ ],
+ [
+ -99.816851,
+ 27.7454658
+ ],
+ [
+ -99.816851,
+ 27.6834301
+ ],
+ [
+ -99.7541346,
+ 27.6834301
+ ],
+ [
+ -99.7541346,
+ 27.6221543
+ ],
+ [
+ -99.6291629,
+ 27.6221543
+ ],
+ [
+ -99.6291629,
+ 27.5588977
+ ],
+ [
+ -99.5672838,
+ 27.5588977
+ ],
+ [
+ -99.5672838,
+ 27.4353752
+ ],
+ [
+ -99.5041798,
+ 27.4353752
+ ],
+ [
+ -99.5041798,
+ 27.3774021
+ ],
+ [
+ -99.5671796,
+ 27.3774021
+ ],
+ [
+ -99.5671796,
+ 27.2463726
+ ],
+ [
+ -99.504975,
+ 27.2463726
+ ],
+ [
+ -99.504975,
+ 26.9965649
+ ],
+ [
+ -99.4427427,
+ 26.9965649
+ ],
+ [
+ -99.4427427,
+ 26.872803
+ ],
+ [
+ -99.3800633,
+ 26.872803
+ ],
+ [
+ -99.3800633,
+ 26.8068179
+ ],
+ [
+ -99.3190684,
+ 26.8068179
+ ],
+ [
+ -99.3190684,
+ 26.7473614
+ ],
+ [
+ -99.2537541,
+ 26.7473614
+ ],
+ [
+ -99.2537541,
+ 26.6210068
+ ],
+ [
+ -99.1910617,
+ 26.6210068
+ ],
+ [
+ -99.1910617,
+ 26.4956737
+ ],
+ [
+ -99.1300639,
+ 26.4956737
+ ],
+ [
+ -99.1300639,
+ 26.3713808
+ ],
+ [
+ -99.0029473,
+ 26.3713808
+ ],
+ [
+ -99.0029473,
+ 26.3093836
+ ],
+ [
+ -98.816572,
+ 26.3093836
+ ],
+ [
+ -98.816572,
+ 26.2457762
+ ],
+ [
+ -98.6920082,
+ 26.2457762
+ ],
+ [
+ -98.6920082,
+ 26.1837096
+ ],
+ [
+ -98.4440896,
+ 26.1837096
+ ],
+ [
+ -98.4440896,
+ 26.1217217
+ ],
+ [
+ -98.3823181,
+ 26.1217217
+ ],
+ [
+ -98.3823181,
+ 26.0596488
+ ],
+ [
+ -98.2532707,
+ 26.0596488
+ ],
+ [
+ -98.2532707,
+ 25.9986871
+ ],
+ [
+ -98.0109084,
+ 25.9986871
+ ],
+ [
+ -98.0109084,
+ 25.9932255
+ ],
+ [
+ -97.6932319,
+ 25.9932255
+ ],
+ [
+ -97.6932319,
+ 25.9334103
+ ],
+ [
+ -97.6313904,
+ 25.9334103
+ ],
+ [
+ -97.6313904,
+ 25.8695893
+ ],
+ [
+ -97.5046779,
+ 25.8695893
+ ],
+ [
+ -97.5046779,
+ 25.8073488
+ ],
+ [
+ -97.3083401,
+ 25.8073488
+ ],
+ [
+ -97.3083401,
+ 25.8731159
+ ],
+ [
+ -97.2456326,
+ 25.8731159
+ ],
+ [
+ -97.2456326,
+ 25.9353731
+ ],
+ [
+ -97.1138939,
+ 25.9353731
+ ],
+ [
+ -97.1138939,
+ 27.6809179
+ ],
+ [
+ -97.0571035,
+ 27.6809179
+ ],
+ [
+ -97.0571035,
+ 27.8108242
+ ],
+ [
+ -95.5810766,
+ 27.8108242
+ ],
+ [
+ -95.5810766,
+ 28.7468827
+ ],
+ [
+ -94.271041,
+ 28.7468827
+ ],
+ [
+ -94.271041,
+ 29.5594076
+ ],
+ [
+ -92.5029947,
+ 29.5594076
+ ],
+ [
+ -92.5029947,
+ 29.4974754
+ ],
+ [
+ -91.8776216,
+ 29.4974754
+ ],
+ [
+ -91.8776216,
+ 29.3727013
+ ],
+ [
+ -91.378418,
+ 29.3727013
+ ],
+ [
+ -91.378418,
+ 29.2468326
+ ],
+ [
+ -91.3153953,
+ 29.2468326
+ ],
+ [
+ -91.3153953,
+ 29.1844301
+ ],
+ [
+ -91.1294702,
+ 29.1844301
+ ],
+ [
+ -91.1294702,
+ 29.1232559
+ ],
+ [
+ -91.0052632,
+ 29.1232559
+ ],
+ [
+ -91.0052632,
+ 28.9968437
+ ],
+ [
+ -89.4500159,
+ 28.9968437
+ ],
+ [
+ -89.4500159,
+ 28.8677422
+ ],
+ [
+ -88.8104309,
+ 28.8677422
+ ],
+ [
+ -88.8104309,
+ 30.1841864
+ ],
+ [
+ -85.8791527,
+ 30.1841864
+ ],
+ [
+ -85.8791527,
+ 29.5455038
+ ],
+ [
+ -84.8368083,
+ 29.5455038
+ ],
+ [
+ -84.8368083,
+ 29.6225158
+ ],
+ [
+ -84.7482786,
+ 29.6225158
+ ],
+ [
+ -84.7482786,
+ 29.683624
+ ],
+ [
+ -84.685894,
+ 29.683624
+ ],
+ [
+ -84.685894,
+ 29.7468386
+ ],
+ [
+ -83.6296975,
+ 29.7468386
+ ],
+ [
+ -83.6296975,
+ 29.4324361
+ ],
+ [
+ -83.3174937,
+ 29.4324361
+ ],
+ [
+ -83.3174937,
+ 29.0579442
+ ],
+ [
+ -82.879659,
+ 29.0579442
+ ],
+ [
+ -82.879659,
+ 27.7453529
+ ],
+ [
+ -82.8182822,
+ 27.7453529
+ ],
+ [
+ -82.8182822,
+ 26.9290868
+ ],
+ [
+ -82.3796782,
+ 26.9290868
+ ],
+ [
+ -82.3796782,
+ 26.3694183
+ ],
+ [
+ -81.8777106,
+ 26.3694183
+ ],
+ [
+ -81.8777106,
+ 25.805971
+ ],
+ [
+ -81.5036862,
+ 25.805971
+ ],
+ [
+ -81.5036862,
+ 25.7474753
+ ],
+ [
+ -81.4405462,
+ 25.7474753
+ ],
+ [
+ -81.4405462,
+ 25.6851489
+ ],
+ [
+ -81.3155883,
+ 25.6851489
+ ],
+ [
+ -81.3155883,
+ 25.5600985
+ ],
+ [
+ -81.2538534,
+ 25.5600985
+ ],
+ [
+ -81.2538534,
+ 25.4342361
+ ],
+ [
+ -81.1902012,
+ 25.4342361
+ ],
+ [
+ -81.1902012,
+ 25.1234341
+ ],
+ [
+ -81.1288133,
+ 25.1234341
+ ],
+ [
+ -81.1288133,
+ 25.0619389
+ ],
+ [
+ -81.0649231,
+ 25.0619389
+ ],
+ [
+ -81.0649231,
+ 24.8157807
+ ],
+ [
+ -81.6289469,
+ 24.8157807
+ ],
+ [
+ -81.6289469,
+ 24.7538367
+ ],
+ [
+ -81.6907173,
+ 24.7538367
+ ],
+ [
+ -81.6907173,
+ 24.6899374
+ ],
+ [
+ -81.8173189,
+ 24.6899374
+ ],
+ [
+ -81.8173189,
+ 24.6279161
+ ],
+ [
+ -82.1910041,
+ 24.6279161
+ ],
+ [
+ -82.1910041,
+ 24.496294
+ ],
+ [
+ -81.6216596,
+ 24.496294
+ ],
+ [
+ -81.6216596,
+ 24.559484
+ ],
+ [
+ -81.372006,
+ 24.559484
+ ],
+ [
+ -81.372006,
+ 24.6220687
+ ],
+ [
+ -81.0593278,
+ 24.6220687
+ ],
+ [
+ -81.0593278,
+ 24.684826
+ ],
+ [
+ -80.9347147,
+ 24.684826
+ ],
+ [
+ -80.9347147,
+ 24.7474828
+ ],
+ [
+ -80.7471081,
+ 24.7474828
+ ],
+ [
+ -80.7471081,
+ 24.8100618
+ ],
+ [
+ -80.3629898,
+ 24.8100618
+ ],
+ [
+ -80.3629898,
+ 25.1175858
+ ],
+ [
+ -80.122344,
+ 25.1175858
+ ],
+ [
+ -80.122344,
+ 25.7472357
+ ],
+ [
+ -80.0588458,
+ 25.7472357
+ ],
+ [
+ -80.0588458,
+ 26.3708251
+ ],
+ [
+ -79.995837,
+ 26.3708251
+ ],
+ [
+ -79.995837,
+ 26.9398003
+ ],
+ [
+ -80.0587265,
+ 26.9398003
+ ],
+ [
+ -80.0587265,
+ 27.1277466
+ ],
+ [
+ -80.1226251,
+ 27.1277466
+ ],
+ [
+ -80.1226251,
+ 27.2534279
+ ],
+ [
+ -80.1846956,
+ 27.2534279
+ ],
+ [
+ -80.1846956,
+ 27.3781229
+ ],
+ [
+ -80.246175,
+ 27.3781229
+ ],
+ [
+ -80.246175,
+ 27.5658729
+ ],
+ [
+ -80.3094768,
+ 27.5658729
+ ],
+ [
+ -80.3094768,
+ 27.7530311
+ ],
+ [
+ -80.3721485,
+ 27.7530311
+ ],
+ [
+ -80.3721485,
+ 27.8774451
+ ],
+ [
+ -80.4351457,
+ 27.8774451
+ ],
+ [
+ -80.4351457,
+ 28.0033366
+ ],
+ [
+ -80.4966078,
+ 28.0033366
+ ],
+ [
+ -80.4966078,
+ 28.1277326
+ ],
+ [
+ -80.5587159,
+ 28.1277326
+ ],
+ [
+ -80.5587159,
+ 28.3723509
+ ],
+ [
+ -80.4966335,
+ 28.3723509
+ ],
+ [
+ -80.4966335,
+ 29.5160326
+ ],
+ [
+ -81.1213644,
+ 29.5160326
+ ],
+ [
+ -81.1213644,
+ 31.6846966
+ ],
+ [
+ -80.6018723,
+ 31.6846966
+ ],
+ [
+ -80.6018723,
+ 32.2475309
+ ],
+ [
+ -79.4921024,
+ 32.2475309
+ ],
+ [
+ -79.4921024,
+ 32.9970261
+ ],
+ [
+ -79.1116488,
+ 32.9970261
+ ],
+ [
+ -79.1116488,
+ 33.3729457
+ ],
+ [
+ -78.6153621,
+ 33.3729457
+ ],
+ [
+ -78.6153621,
+ 33.8097638
+ ],
+ [
+ -77.9316963,
+ 33.8097638
+ ],
+ [
+ -77.9316963,
+ 33.8718243
+ ],
+ [
+ -77.8692252,
+ 33.8718243
+ ],
+ [
+ -77.8692252,
+ 34.0552454
+ ],
+ [
+ -77.6826392,
+ 34.0552454
+ ],
+ [
+ -77.6826392,
+ 34.2974598
+ ],
+ [
+ -77.2453509,
+ 34.2974598
+ ],
+ [
+ -77.2453509,
+ 34.5598585
+ ],
+ [
+ -76.4973277,
+ 34.5598585
+ ],
+ [
+ -76.4973277,
+ 34.622796
+ ],
+ [
+ -76.4337602,
+ 34.622796
+ ],
+ [
+ -76.4337602,
+ 34.6849285
+ ],
+ [
+ -76.373212,
+ 34.6849285
+ ],
+ [
+ -76.373212,
+ 34.7467674
+ ],
+ [
+ -76.3059364,
+ 34.7467674
+ ],
+ [
+ -76.3059364,
+ 34.808551
+ ],
+ [
+ -76.2468017,
+ 34.808551
+ ],
+ [
+ -76.2468017,
+ 34.8728418
+ ],
+ [
+ -76.1825922,
+ 34.8728418
+ ],
+ [
+ -76.1825922,
+ 34.9335332
+ ],
+ [
+ -76.120814,
+ 34.9335332
+ ],
+ [
+ -76.120814,
+ 34.9952359
+ ],
+ [
+ -75.9979015,
+ 34.9952359
+ ],
+ [
+ -75.9979015,
+ 35.0578182
+ ],
+ [
+ -75.870338,
+ 35.0578182
+ ],
+ [
+ -75.870338,
+ 35.1219097
+ ],
+ [
+ -75.7462194,
+ 35.1219097
+ ],
+ [
+ -75.7462194,
+ 35.1818911
+ ],
+ [
+ -75.4929694,
+ 35.1818911
+ ],
+ [
+ -75.4929694,
+ 35.3082988
+ ],
+ [
+ -75.4325662,
+ 35.3082988
+ ],
+ [
+ -75.4325662,
+ 35.7542495
+ ],
+ [
+ -75.4969907,
+ 35.7542495
+ ],
+ [
+ -75.4969907,
+ 37.8105602
+ ],
+ [
+ -75.3082972,
+ 37.8105602
+ ],
+ [
+ -75.3082972,
+ 37.8720088
+ ],
+ [
+ -75.245601,
+ 37.8720088
+ ],
+ [
+ -75.245601,
+ 37.9954849
+ ],
+ [
+ -75.1828751,
+ 37.9954849
+ ],
+ [
+ -75.1828751,
+ 38.0585079
+ ],
+ [
+ -75.1184793,
+ 38.0585079
+ ],
+ [
+ -75.1184793,
+ 38.2469091
+ ],
+ [
+ -75.0592098,
+ 38.2469091
+ ],
+ [
+ -75.0592098,
+ 38.3704316
+ ],
+ [
+ -74.9948111,
+ 38.3704316
+ ],
+ [
+ -74.9948111,
+ 38.8718417
+ ],
+ [
+ -74.4878252,
+ 38.8718417
+ ],
+ [
+ -74.4878252,
+ 39.3089428
+ ],
+ [
+ -74.1766317,
+ 39.3089428
+ ],
+ [
+ -74.1766317,
+ 39.6224653
+ ],
+ [
+ -74.0567045,
+ 39.6224653
+ ],
+ [
+ -74.0567045,
+ 39.933178
+ ],
+ [
+ -73.9959035,
+ 39.933178
+ ],
+ [
+ -73.9959035,
+ 40.1854852
+ ],
+ [
+ -73.9341593,
+ 40.1854852
+ ],
+ [
+ -73.9341593,
+ 40.4959486
+ ],
+ [
+ -73.8723024,
+ 40.4959486
+ ],
+ [
+ -73.8723024,
+ 40.5527135
+ ],
+ [
+ -71.8074506,
+ 40.5527135
+ ],
+ [
+ -71.8074506,
+ 41.3088005
+ ],
+ [
+ -70.882512,
+ 41.3088005
+ ],
+ [
+ -70.882512,
+ 41.184978
+ ],
+ [
+ -70.7461947,
+ 41.184978
+ ],
+ [
+ -70.7461947,
+ 41.3091865
+ ],
+ [
+ -70.4337553,
+ 41.3091865
+ ],
+ [
+ -70.4337553,
+ 41.4963885
+ ],
+ [
+ -69.9334281,
+ 41.4963885
+ ],
+ [
+ -69.9334281,
+ 41.6230802
+ ],
+ [
+ -69.869857,
+ 41.6230802
+ ],
+ [
+ -69.869857,
+ 41.8776895
+ ],
+ [
+ -69.935791,
+ 41.8776895
+ ],
+ [
+ -69.935791,
+ 42.0032342
+ ],
+ [
+ -69.9975823,
+ 42.0032342
+ ],
+ [
+ -69.9975823,
+ 42.0650191
+ ],
+ [
+ -70.0606103,
+ 42.0650191
+ ],
+ [
+ -70.0606103,
+ 42.1294348
+ ],
+ [
+ -70.5572884,
+ 42.1294348
+ ],
+ [
+ -70.5572884,
+ 43.2487079
+ ],
+ [
+ -70.4974097,
+ 43.2487079
+ ],
+ [
+ -70.4974097,
+ 43.3092194
+ ],
+ [
+ -70.3704249,
+ 43.3092194
+ ],
+ [
+ -70.3704249,
+ 43.371963
+ ],
+ [
+ -70.3085701,
+ 43.371963
+ ],
+ [
+ -70.3085701,
+ 43.4969879
+ ],
+ [
+ -70.183921,
+ 43.4969879
+ ],
+ [
+ -70.183921,
+ 43.6223531
+ ],
+ [
+ -70.057583,
+ 43.6223531
+ ],
+ [
+ -70.057583,
+ 43.6850173
+ ],
+ [
+ -69.7455247,
+ 43.6850173
+ ],
+ [
+ -69.7455247,
+ 43.7476571
+ ],
+ [
+ -69.2472845,
+ 43.7476571
+ ],
+ [
+ -69.2472845,
+ 43.8107035
+ ],
+ [
+ -69.0560701,
+ 43.8107035
+ ],
+ [
+ -69.0560701,
+ 43.8717247
+ ],
+ [
+ -68.9950522,
+ 43.8717247
+ ],
+ [
+ -68.9950522,
+ 43.9982022
+ ],
+ [
+ -68.4963672,
+ 43.9982022
+ ],
+ [
+ -68.4963672,
+ 44.0597368
+ ],
+ [
+ -68.3081038,
+ 44.0597368
+ ],
+ [
+ -68.3081038,
+ 44.122137
+ ],
+ [
+ -68.1851802,
+ 44.122137
+ ],
+ [
+ -68.1851802,
+ 44.3081382
+ ],
+ [
+ -67.9956019,
+ 44.3081382
+ ],
+ [
+ -67.9956019,
+ 44.3727489
+ ],
+ [
+ -67.8103041,
+ 44.3727489
+ ],
+ [
+ -67.8103041,
+ 44.435178
+ ],
+ [
+ -67.4965289,
+ 44.435178
+ ],
+ [
+ -67.4965289,
+ 44.4968776
+ ],
+ [
+ -67.37102,
+ 44.4968776
+ ],
+ [
+ -67.37102,
+ 44.5600642
+ ],
+ [
+ -67.1848753,
+ 44.5600642
+ ],
+ [
+ -67.1848753,
+ 44.6213345
+ ],
+ [
+ -67.1221208,
+ 44.6213345
+ ],
+ [
+ -67.1221208,
+ 44.6867918
+ ],
+ [
+ -67.059365,
+ 44.6867918
+ ],
+ [
+ -67.059365,
+ 44.7473657
+ ],
+ [
+ -66.9311098,
+ 44.7473657
+ ],
+ [
+ -66.9311098,
+ 44.9406566
+ ],
+ [
+ -66.994683,
+ 44.9406566
+ ],
+ [
+ -66.994683,
+ 45.0024514
+ ],
+ [
+ -67.0595847,
+ 45.0024514
+ ],
+ [
+ -67.0595847,
+ 45.1273377
+ ],
+ [
+ -67.1201974,
+ 45.1273377
+ ],
+ [
+ -67.1201974,
+ 45.1910115
+ ],
+ [
+ -67.2469811,
+ 45.1910115
+ ],
+ [
+ -67.2469811,
+ 45.253442
+ ],
+ [
+ -67.3177546,
+ 45.253442
+ ],
+ [
+ -67.3177546,
+ 45.1898369
+ ],
+ [
+ -67.370749,
+ 45.1898369
+ ],
+ [
+ -67.370749,
+ 45.2534001
+ ],
+ [
+ -67.4326888,
+ 45.2534001
+ ],
+ [
+ -67.4326888,
+ 45.3083409
+ ],
+ [
+ -67.3708571,
+ 45.3083409
+ ],
+ [
+ -67.3708571,
+ 45.4396986
+ ],
+ [
+ -67.4305573,
+ 45.4396986
+ ],
+ [
+ -67.4305573,
+ 45.4950095
+ ],
+ [
+ -67.37099,
+ 45.4950095
+ ],
+ [
+ -67.37099,
+ 45.6264543
+ ],
+ [
+ -67.6214982,
+ 45.6264543
+ ],
+ [
+ -67.6214982,
+ 45.6896133
+ ],
+ [
+ -67.683828,
+ 45.6896133
+ ],
+ [
+ -67.683828,
+ 45.753259
+ ],
+ [
+ -67.7462097,
+ 45.753259
+ ],
+ [
+ -67.7462097,
+ 47.1268165
+ ],
+ [
+ -67.8700141,
+ 47.1268165
+ ],
+ [
+ -67.8700141,
+ 47.1900278
+ ],
+ [
+ -67.9323803,
+ 47.1900278
+ ],
+ [
+ -67.9323803,
+ 47.2539678
+ ],
+ [
+ -67.9959387,
+ 47.2539678
+ ],
+ [
+ -67.9959387,
+ 47.3149737
+ ],
+ [
+ -68.1206676,
+ 47.3149737
+ ],
+ [
+ -68.1206676,
+ 47.3780823
+ ],
+ [
+ -68.4423175,
+ 47.3780823
+ ],
+ [
+ -68.4423175,
+ 47.3166082
+ ],
+ [
+ -68.6314305,
+ 47.3166082
+ ],
+ [
+ -68.6314305,
+ 47.2544676
+ ],
+ [
+ -68.9978037,
+ 47.2544676
+ ],
+ [
+ -68.9978037,
+ 47.439895
+ ],
+ [
+ -69.0607223,
+ 47.439895
+ ],
+ [
+ -69.0607223,
+ 47.5047558
+ ],
+ [
+ -69.2538122,
+ 47.5047558
+ ],
+ [
+ -69.2538122,
+ 47.4398084
+ ],
+ [
+ -69.3179284,
+ 47.4398084
+ ],
+ [
+ -69.3179284,
+ 47.378601
+ ],
+ [
+ -69.4438546,
+ 47.378601
+ ],
+ [
+ -69.4438546,
+ 47.3156274
+ ],
+ [
+ -69.5038204,
+ 47.3156274
+ ],
+ [
+ -69.5038204,
+ 47.2525839
+ ],
+ [
+ -69.5667838,
+ 47.2525839
+ ],
+ [
+ -69.5667838,
+ 47.1910884
+ ],
+ [
+ -69.6303478,
+ 47.1910884
+ ],
+ [
+ -69.6303478,
+ 47.128701
+ ],
+ [
+ -69.6933103,
+ 47.128701
+ ],
+ [
+ -69.6933103,
+ 47.0654307
+ ],
+ [
+ -69.7557063,
+ 47.0654307
+ ],
+ [
+ -69.7557063,
+ 47.0042751
+ ],
+ [
+ -69.8180391,
+ 47.0042751
+ ],
+ [
+ -69.8180391,
+ 46.9415344
+ ],
+ [
+ -69.8804023,
+ 46.9415344
+ ],
+ [
+ -69.8804023,
+ 46.8792519
+ ],
+ [
+ -69.9421674,
+ 46.8792519
+ ],
+ [
+ -69.9421674,
+ 46.8177399
+ ],
+ [
+ -70.0063088,
+ 46.8177399
+ ],
+ [
+ -70.0063088,
+ 46.6920295
+ ],
+ [
+ -70.0704265,
+ 46.6920295
+ ],
+ [
+ -70.0704265,
+ 46.4425926
+ ],
+ [
+ -70.1945902,
+ 46.4425926
+ ],
+ [
+ -70.1945902,
+ 46.3785887
+ ],
+ [
+ -70.2562047,
+ 46.3785887
+ ],
+ [
+ -70.2562047,
+ 46.3152628
+ ],
+ [
+ -70.3203651,
+ 46.3152628
+ ],
+ [
+ -70.3203651,
+ 46.0651209
+ ],
+ [
+ -70.3814988,
+ 46.0651209
+ ],
+ [
+ -70.3814988,
+ 45.93552
+ ],
+ [
+ -70.3201618,
+ 45.93552
+ ],
+ [
+ -70.3201618,
+ 45.879479
+ ],
+ [
+ -70.4493131,
+ 45.879479
+ ],
+ [
+ -70.4493131,
+ 45.7538713
+ ],
+ [
+ -70.5070021,
+ 45.7538713
+ ],
+ [
+ -70.5070021,
+ 45.6916912
+ ],
+ [
+ -70.6316642,
+ 45.6916912
+ ],
+ [
+ -70.6316642,
+ 45.6291619
+ ],
+ [
+ -70.7575538,
+ 45.6291619
+ ],
+ [
+ -70.7575538,
+ 45.4414685
+ ],
+ [
+ -70.8809878,
+ 45.4414685
+ ],
+ [
+ -70.8809878,
+ 45.3780612
+ ],
+ [
+ -71.13328,
+ 45.3780612
+ ],
+ [
+ -71.13328,
+ 45.3151452
+ ],
+ [
+ -71.3830282,
+ 45.3151452
+ ],
+ [
+ -71.3830282,
+ 45.253416
+ ],
+ [
+ -71.5076448,
+ 45.253416
+ ],
+ [
+ -71.5076448,
+ 45.0655726
+ ],
+ [
+ -73.9418929,
+ 45.0655726
+ ],
+ [
+ -73.9418929,
+ 45.0031242
+ ],
+ [
+ -74.7469725,
+ 45.0031242
+ ],
+ [
+ -74.7469725,
+ 45.0649003
+ ],
+ [
+ -74.8800964,
+ 45.0649003
+ ],
+ [
+ -74.8800964,
+ 45.0029023
+ ],
+ [
+ -75.0662455,
+ 45.0029023
+ ],
+ [
+ -75.0662455,
+ 44.9415167
+ ],
+ [
+ -75.2539363,
+ 44.9415167
+ ],
+ [
+ -75.2539363,
+ 44.8776043
+ ],
+ [
+ -75.3789648,
+ 44.8776043
+ ],
+ [
+ -75.3789648,
+ 44.8153462
+ ],
+ [
+ -75.4431283,
+ 44.8153462
+ ],
+ [
+ -75.4431283,
+ 44.7536053
+ ],
+ [
+ -75.5666566,
+ 44.7536053
+ ],
+ [
+ -75.5666566,
+ 44.6909879
+ ],
+ [
+ -75.6290205,
+ 44.6909879
+ ],
+ [
+ -75.6290205,
+ 44.6284958
+ ],
+ [
+ -75.7540484,
+ 44.6284958
+ ],
+ [
+ -75.7540484,
+ 44.566385
+ ],
+ [
+ -75.817312,
+ 44.566385
+ ],
+ [
+ -75.817312,
+ 44.5028932
+ ],
+ [
+ -75.8799549,
+ 44.5028932
+ ],
+ [
+ -75.8799549,
+ 44.3784946
+ ],
+ [
+ -76.1300319,
+ 44.3784946
+ ],
+ [
+ -76.1300319,
+ 44.3159227
+ ],
+ [
+ -76.1926961,
+ 44.3159227
+ ],
+ [
+ -76.1926961,
+ 44.2534378
+ ],
+ [
+ -76.3182619,
+ 44.2534378
+ ],
+ [
+ -76.3182619,
+ 44.1916726
+ ],
+ [
+ -76.3792975,
+ 44.1916726
+ ],
+ [
+ -76.3792975,
+ 44.0653733
+ ],
+ [
+ -76.4427584,
+ 44.0653733
+ ],
+ [
+ -76.4427584,
+ 43.9963825
+ ],
+ [
+ -76.317027,
+ 43.9963825
+ ],
+ [
+ -76.317027,
+ 43.9414581
+ ],
+ [
+ -76.5076611,
+ 43.9414581
+ ],
+ [
+ -76.5076611,
+ 43.8723335
+ ],
+ [
+ -76.3829974,
+ 43.8723335
+ ],
+ [
+ -76.3829974,
+ 43.8091872
+ ],
+ [
+ -76.2534102,
+ 43.8091872
+ ],
+ [
+ -76.2534102,
+ 43.5665222
+ ],
+ [
+ -76.5064833,
+ 43.5665222
+ ],
+ [
+ -76.5064833,
+ 43.5033881
+ ],
+ [
+ -76.6331208,
+ 43.5033881
+ ],
+ [
+ -76.6331208,
+ 43.4432252
+ ],
+ [
+ -76.6951085,
+ 43.4432252
+ ],
+ [
+ -76.6951085,
+ 43.3786858
+ ],
+ [
+ -76.8177798,
+ 43.3786858
+ ],
+ [
+ -76.8177798,
+ 43.318066
+ ],
+ [
+ -77.682,
+ 43.318066
+ ],
+ [
+ -77.682,
+ 43.3789376
+ ],
+ [
+ -78.0565883,
+ 43.3789376
+ ],
+ [
+ -78.0565883,
+ 43.4396918
+ ],
+ [
+ -78.4389748,
+ 43.4396918
+ ],
+ [
+ -78.4389748,
+ 43.3794382
+ ],
+ [
+ -78.8803396,
+ 43.3794382
+ ],
+ [
+ -78.8803396,
+ 43.3149724
+ ],
+ [
+ -79.1298858,
+ 43.3149724
+ ],
+ [
+ -79.1298858,
+ 43.2429286
+ ],
+ [
+ -79.0669615,
+ 43.2429286
+ ],
+ [
+ -79.0669615,
+ 43.1299931
+ ],
+ [
+ -79.1298858,
+ 43.1299931
+ ],
+ [
+ -79.1298858,
+ 43.0577305
+ ],
+ [
+ -79.071264,
+ 43.0577305
+ ],
+ [
+ -79.071264,
+ 42.9294906
+ ],
+ [
+ -78.943264,
+ 42.9294906
+ ],
+ [
+ -78.943264,
+ 42.7542165
+ ],
+ [
+ -79.069439,
+ 42.7542165
+ ],
+ [
+ -79.069439,
+ 42.6941622
+ ],
+ [
+ -79.133439,
+ 42.6941622
+ ],
+ [
+ -79.133439,
+ 42.6296973
+ ],
+ [
+ -79.1947499,
+ 42.6296973
+ ],
+ [
+ -79.1947499,
+ 42.5663538
+ ],
+ [
+ -79.3786827,
+ 42.5663538
+ ],
+ [
+ -79.3786827,
+ 42.5033425
+ ],
+ [
+ -79.4442961,
+ 42.5033425
+ ],
+ [
+ -79.4442961,
+ 42.4410614
+ ],
+ [
+ -79.5679936,
+ 42.4410614
+ ],
+ [
+ -79.5679936,
+ 42.3775264
+ ],
+ [
+ -79.6906154,
+ 42.3775264
+ ],
+ [
+ -79.6906154,
+ 42.3171086
+ ],
+ [
+ -79.8164642,
+ 42.3171086
+ ],
+ [
+ -79.8164642,
+ 42.2534481
+ ],
+ [
+ -80.0052373,
+ 42.2534481
+ ],
+ [
+ -80.0052373,
+ 42.1909188
+ ],
+ [
+ -80.1916829,
+ 42.1909188
+ ],
+ [
+ -80.1916829,
+ 42.1272555
+ ],
+ [
+ -80.3167992,
+ 42.1272555
+ ],
+ [
+ -80.3167992,
+ 42.0669857
+ ],
+ [
+ -80.5063234,
+ 42.0669857
+ ],
+ [
+ -80.5063234,
+ 42.0034331
+ ],
+ [
+ -80.6930471,
+ 42.0034331
+ ],
+ [
+ -80.6930471,
+ 41.9415141
+ ],
+ [
+ -80.9440403,
+ 41.9415141
+ ],
+ [
+ -80.9440403,
+ 41.8781193
+ ],
+ [
+ -81.1942729,
+ 41.8781193
+ ],
+ [
+ -81.1942729,
+ 41.8166455
+ ],
+ [
+ -81.3190089,
+ 41.8166455
+ ],
+ [
+ -81.3190089,
+ 41.7545453
+ ],
+ [
+ -81.4418435,
+ 41.7545453
+ ],
+ [
+ -81.4418435,
+ 41.690965
+ ],
+ [
+ -81.5053523,
+ 41.690965
+ ],
+ [
+ -81.5053523,
+ 41.6301643
+ ],
+ [
+ -82.7470081,
+ 41.6301643
+ ],
+ [
+ -82.7470081,
+ 41.7536942
+ ],
+ [
+ -82.8839135,
+ 41.7536942
+ ],
+ [
+ -82.8839135,
+ 41.5656075
+ ],
+ [
+ -82.9957195,
+ 41.5656075
+ ],
+ [
+ -82.9957195,
+ 41.6270375
+ ],
+ [
+ -83.1257796,
+ 41.6270375
+ ],
+ [
+ -83.1257796,
+ 41.6878411
+ ],
+ [
+ -83.2474733,
+ 41.6878411
+ ],
+ [
+ -83.2474733,
+ 41.7536942
+ ],
+ [
+ -83.3737305,
+ 41.7536942
+ ],
+ [
+ -83.3737305,
+ 41.809276
+ ],
+ [
+ -83.3106019,
+ 41.809276
+ ],
+ [
+ -83.3106019,
+ 41.8716064
+ ],
+ [
+ -83.2474733,
+ 41.8716064
+ ],
+ [
+ -83.2474733,
+ 41.9361393
+ ],
+ [
+ -83.1843447,
+ 41.9361393
+ ],
+ [
+ -83.1843447,
+ 41.9960851
+ ],
+ [
+ -83.1207681,
+ 41.9960851
+ ],
+ [
+ -83.1207681,
+ 42.2464812
+ ],
+ [
+ -83.0589194,
+ 42.2464812
+ ],
+ [
+ -83.0589194,
+ 42.3089555
+ ],
+ [
+ -82.8685328,
+ 42.3089555
+ ],
+ [
+ -82.8685328,
+ 42.3717652
+ ],
+ [
+ -82.8072219,
+ 42.3717652
+ ],
+ [
+ -82.8072219,
+ 42.558553
+ ],
+ [
+ -82.7553745,
+ 42.558553
+ ],
+ [
+ -82.7553745,
+ 42.4954945
+ ],
+ [
+ -82.5599041,
+ 42.4954945
+ ],
+ [
+ -82.5599041,
+ 42.558553
+ ],
+ [
+ -82.4967755,
+ 42.558553
+ ],
+ [
+ -82.4967755,
+ 42.6833607
+ ],
+ [
+ -82.4328863,
+ 42.6833607
+ ],
+ [
+ -82.4328863,
+ 42.9342196
+ ],
+ [
+ -82.3700552,
+ 42.9342196
+ ],
+ [
+ -82.3700552,
+ 43.0648071
+ ],
+ [
+ -82.4328863,
+ 43.0648071
+ ],
+ [
+ -82.4328863,
+ 43.1917566
+ ],
+ [
+ -82.4947464,
+ 43.1917566
+ ],
+ [
+ -82.4947464,
+ 43.5034627
+ ],
+ [
+ -82.557133,
+ 43.5034627
+ ],
+ [
+ -82.557133,
+ 43.8160901
+ ],
+ [
+ -82.6197884,
+ 43.8160901
+ ],
+ [
+ -82.6197884,
+ 43.9422098
+ ],
+ [
+ -82.6839499,
+ 43.9422098
+ ],
+ [
+ -82.6839499,
+ 44.0022641
+ ],
+ [
+ -82.7465346,
+ 44.0022641
+ ],
+ [
+ -82.7465346,
+ 44.0670545
+ ],
+ [
+ -82.8708696,
+ 44.0670545
+ ],
+ [
+ -82.8708696,
+ 44.1291935
+ ],
+ [
+ -83.008517,
+ 44.1291935
+ ],
+ [
+ -83.008517,
+ 44.0664786
+ ],
+ [
+ -83.1336086,
+ 44.0664786
+ ],
+ [
+ -83.1336086,
+ 44.0053949
+ ],
+ [
+ -83.2414522,
+ 44.0053949
+ ],
+ [
+ -83.2414522,
+ 44.9962034
+ ],
+ [
+ -83.1806112,
+ 44.9962034
+ ],
+ [
+ -83.1806112,
+ 45.067302
+ ],
+ [
+ -83.2455172,
+ 45.067302
+ ],
+ [
+ -83.2455172,
+ 45.1287382
+ ],
+ [
+ -83.3065878,
+ 45.1287382
+ ],
+ [
+ -83.3065878,
+ 45.2551509
+ ],
+ [
+ -83.3706087,
+ 45.2551509
+ ],
+ [
+ -83.3706087,
+ 45.3165923
+ ],
+ [
+ -83.4325644,
+ 45.3165923
+ ],
+ [
+ -83.4325644,
+ 45.3792105
+ ],
+ [
+ -83.6178415,
+ 45.3792105
+ ],
+ [
+ -83.6178415,
+ 45.4419665
+ ],
+ [
+ -83.8084291,
+ 45.4419665
+ ],
+ [
+ -83.8084291,
+ 45.5036189
+ ],
+ [
+ -84.0550718,
+ 45.5036189
+ ],
+ [
+ -84.0550718,
+ 45.5647907
+ ],
+ [
+ -84.1235181,
+ 45.5647907
+ ],
+ [
+ -84.1235181,
+ 45.6287845
+ ],
+ [
+ -84.1807534,
+ 45.6287845
+ ],
+ [
+ -84.1807534,
+ 45.6914688
+ ],
+ [
+ -84.3111554,
+ 45.6914688
+ ],
+ [
+ -84.3111554,
+ 45.9337076
+ ],
+ [
+ -83.8209974,
+ 45.9337076
+ ],
+ [
+ -83.8209974,
+ 45.8725113
+ ],
+ [
+ -83.4968086,
+ 45.8725113
+ ],
+ [
+ -83.4968086,
+ 45.9337076
+ ],
+ [
+ -83.4338066,
+ 45.9337076
+ ],
+ [
+ -83.4338066,
+ 46.0016863
+ ],
+ [
+ -83.4962697,
+ 46.0016863
+ ],
+ [
+ -83.4962697,
+ 46.0668178
+ ],
+ [
+ -83.5599956,
+ 46.0668178
+ ],
+ [
+ -83.5599956,
+ 46.1261576
+ ],
+ [
+ -83.9954558,
+ 46.1261576
+ ],
+ [
+ -83.9954558,
+ 46.1931747
+ ],
+ [
+ -84.0591816,
+ 46.1931747
+ ],
+ [
+ -84.0591816,
+ 46.3814972
+ ],
+ [
+ -84.1152614,
+ 46.3814972
+ ],
+ [
+ -84.1152614,
+ 46.4953584
+ ],
+ [
+ -84.0591816,
+ 46.4953584
+ ],
+ [
+ -84.0591816,
+ 46.5682653
+ ],
+ [
+ -84.2579545,
+ 46.5682653
+ ],
+ [
+ -84.2579545,
+ 46.5051232
+ ],
+ [
+ -84.3071879,
+ 46.5051232
+ ],
+ [
+ -84.3071879,
+ 46.5682653
+ ],
+ [
+ -84.4415364,
+ 46.5682653
+ ],
+ [
+ -84.4415364,
+ 46.504525
+ ],
+ [
+ -84.9965729,
+ 46.504525
+ ],
+ [
+ -84.9965729,
+ 46.6842882
+ ],
+ [
+ -84.9298158,
+ 46.6842882
+ ],
+ [
+ -84.9298158,
+ 46.818077
+ ],
+ [
+ -85.3165894,
+ 46.818077
+ ],
+ [
+ -85.3165894,
+ 46.7535825
+ ],
+ [
+ -87.5562645,
+ 46.7535825
+ ],
+ [
+ -87.5562645,
+ 47.4407371
+ ],
+ [
+ -87.6825361,
+ 47.4407371
+ ],
+ [
+ -87.6825361,
+ 47.5035554
+ ],
+ [
+ -88.2560738,
+ 47.5035554
+ ],
+ [
+ -88.2560738,
+ 47.4433716
+ ],
+ [
+ -88.4417419,
+ 47.4433716
+ ],
+ [
+ -88.4417419,
+ 47.3789949
+ ],
+ [
+ -88.50683,
+ 47.3789949
+ ],
+ [
+ -88.50683,
+ 47.3153881
+ ],
+ [
+ -88.6312821,
+ 47.3153881
+ ],
+ [
+ -88.6312821,
+ 47.2539782
+ ],
+ [
+ -88.7569636,
+ 47.2539782
+ ],
+ [
+ -88.7569636,
+ 47.1934682
+ ],
+ [
+ -88.8838253,
+ 47.1934682
+ ],
+ [
+ -88.8838253,
+ 47.1284735
+ ],
+ [
+ -88.9434208,
+ 47.1284735
+ ],
+ [
+ -88.9434208,
+ 47.0662127
+ ],
+ [
+ -89.0708726,
+ 47.0662127
+ ],
+ [
+ -89.0708726,
+ 47.0026826
+ ],
+ [
+ -89.2565553,
+ 47.0026826
+ ],
+ [
+ -89.2565553,
+ 46.9410806
+ ],
+ [
+ -90.3677669,
+ 46.9410806
+ ],
+ [
+ -90.3677669,
+ 47.6844827
+ ],
+ [
+ -90.3069978,
+ 47.6844827
+ ],
+ [
+ -90.3069978,
+ 47.7460174
+ ],
+ [
+ -89.994859,
+ 47.7460174
+ ],
+ [
+ -89.994859,
+ 47.8082719
+ ],
+ [
+ -89.8048615,
+ 47.8082719
+ ],
+ [
+ -89.8048615,
+ 47.8700562
+ ],
+ [
+ -89.6797699,
+ 47.8700562
+ ],
+ [
+ -89.6797699,
+ 47.9339637
+ ],
+ [
+ -89.4933757,
+ 47.9339637
+ ],
+ [
+ -89.4933757,
+ 47.9957956
+ ],
+ [
+ -89.4284697,
+ 47.9957956
+ ],
+ [
+ -89.4284697,
+ 48.0656377
+ ],
+ [
+ -89.9932739,
+ 48.0656377
+ ],
+ [
+ -89.9932739,
+ 48.1282966
+ ],
+ [
+ -90.7455933,
+ 48.1282966
+ ],
+ [
+ -90.7455933,
+ 48.1893056
+ ],
+ [
+ -90.8087291,
+ 48.1893056
+ ],
+ [
+ -90.8087291,
+ 48.2522065
+ ],
+ [
+ -91.067763,
+ 48.2522065
+ ],
+ [
+ -91.067763,
+ 48.1916658
+ ],
+ [
+ -91.1946247,
+ 48.1916658
+ ],
+ [
+ -91.1946247,
+ 48.1279027
+ ],
+ [
+ -91.6814196,
+ 48.1279027
+ ],
+ [
+ -91.6814196,
+ 48.2525994
+ ],
+ [
+ -91.9321927,
+ 48.2525994
+ ],
+ [
+ -91.9321927,
+ 48.3142454
+ ],
+ [
+ -91.9929683,
+ 48.3142454
+ ],
+ [
+ -91.9929683,
+ 48.3780845
+ ],
+ [
+ -92.3189383,
+ 48.3780845
+ ],
+ [
+ -92.3189383,
+ 48.2529081
+ ],
+ [
+ -92.3732233,
+ 48.2529081
+ ],
+ [
+ -92.3732233,
+ 48.3153385
+ ],
+ [
+ -92.4322288,
+ 48.3153385
+ ],
+ [
+ -92.4322288,
+ 48.4411448
+ ],
+ [
+ -92.4977248,
+ 48.4411448
+ ],
+ [
+ -92.4977248,
+ 48.501781
+ ],
+ [
+ -92.5679413,
+ 48.501781
+ ],
+ [
+ -92.5679413,
+ 48.439579
+ ],
+ [
+ -92.6210462,
+ 48.439579
+ ],
+ [
+ -92.6210462,
+ 48.5650783
+ ],
+ [
+ -92.8086835,
+ 48.5650783
+ ],
+ [
+ -92.8086835,
+ 48.6286865
+ ],
+ [
+ -92.8086835,
+ 48.6267365
+ ],
+ [
+ -92.933185,
+ 48.6267365
+ ],
+ [
+ -92.933185,
+ 48.6922145
+ ],
+ [
+ -93.0051716,
+ 48.6922145
+ ],
+ [
+ -93.0051716,
+ 48.6282965
+ ],
+ [
+ -93.1225924,
+ 48.6282965
+ ],
+ [
+ -93.1225924,
+ 48.6922145
+ ],
+ [
+ -93.3190806,
+ 48.6922145
+ ],
+ [
+ -93.3190806,
+ 48.6267365
+ ],
+ [
+ -93.5049477,
+ 48.6267365
+ ],
+ [
+ -93.5049477,
+ 48.5635164
+ ],
+ [
+ -93.7474601,
+ 48.5635164
+ ],
+ [
+ -93.7474601,
+ 48.6267365
+ ],
+ [
+ -93.8135461,
+ 48.6267365
+ ],
+ [
+ -93.8135461,
+ 48.6898775
+ ],
+ [
+ -94.2453121,
+ 48.6898775
+ ],
+ [
+ -94.2453121,
+ 48.7554327
+ ],
+ [
+ -94.6183171,
+ 48.7554327
+ ],
+ [
+ -94.6183171,
+ 48.941036
+ ],
+ [
+ -94.6809018,
+ 48.941036
+ ],
+ [
+ -94.6809018,
+ 49.0029737
+ ],
+ [
+ -94.7441532,
+ 49.0029737
+ ],
+ [
+ -94.7441532,
+ 49.2536079
+ ],
+ [
+ -94.8084069,
+ 49.2536079
+ ],
+ [
+ -94.8084069,
+ 49.3784134
+ ],
+ [
+ -95.1192391,
+ 49.3784134
+ ],
+ [
+ -95.1192391,
+ 49.4425264
+ ],
+ [
+ -95.1934341,
+ 49.4425264
+ ],
+ [
+ -95.1934341,
+ 49.0035292
+ ],
+ [
+ -96.87069,
+ 49.0035292
+ ],
+ [
+ -96.87069,
+ 49.0656063
+ ],
+ [
+ -99.0049312,
+ 49.0656063
+ ],
+ [
+ -99.0049312,
+ 49.0050714
+ ],
+ [
+ -109.3699257,
+ 49.0050714
+ ],
+ [
+ -109.3699257,
+ 49.0668231
+ ],
+ [
+ -109.5058746,
+ 49.0668231
+ ],
+ [
+ -109.5058746,
+ 49.0050714
+ ],
+ [
+ -114.1830014,
+ 49.0050714
+ ],
+ [
+ -114.1830014,
+ 49.0687317
+ ],
+ [
+ -114.7578709,
+ 49.0687317
+ ],
+ [
+ -114.7578709,
+ 49.0050714
+ ],
+ [
+ -115.433731,
+ 49.0050714
+ ],
+ [
+ -115.433731,
+ 49.0671412
+ ],
+ [
+ -116.5062706,
+ 49.0671412
+ ],
+ [
+ -116.5062706,
+ 49.0050714
+ ],
+ [
+ -117.3089504,
+ 49.0050714
+ ],
+ [
+ -117.3089504,
+ 49.0659803
+ ],
+ [
+ -119.882945,
+ 49.0659803
+ ],
+ [
+ -119.882945,
+ 49.0050714
+ ],
+ [
+ -120.1208555,
+ 49.0050714
+ ],
+ [
+ -120.1208555,
+ 49.0678367
+ ],
+ [
+ -121.4451636,
+ 49.0678367
+ ],
+ [
+ -121.4451636,
+ 49.0050714
+ ],
+ [
+ -121.9311808,
+ 49.0050714
+ ],
+ [
+ -121.9311808,
+ 49.0656099
+ ],
+ [
+ -122.817484,
+ 49.0656099
+ ],
+ [
+ -122.817484,
+ 49.0029143
+ ],
+ [
+ -122.8795155,
+ 49.0029143
+ ],
+ [
+ -122.8795155,
+ 48.9347018
+ ],
+ [
+ -122.8174629,
+ 48.9347018
+ ],
+ [
+ -122.8174629,
+ 48.8101998
+ ],
+ [
+ -122.7538859,
+ 48.8101998
+ ],
+ [
+ -122.7538859,
+ 48.7533758
+ ],
+ [
+ -122.8712937,
+ 48.7533758
+ ],
+ [
+ -122.8712937,
+ 48.8153948
+ ],
+ [
+ -123.0055391,
+ 48.8153948
+ ],
+ [
+ -123.0055391,
+ 48.7529529
+ ],
+ [
+ -123.1296926,
+ 48.7529529
+ ],
+ [
+ -123.1296926,
+ 48.6902201
+ ],
+ [
+ -123.1838197,
+ 48.6902201
+ ],
+ [
+ -123.1838197,
+ 48.7529029
+ ]
+ ],
+ [
+ [
+ -122.9341743,
+ 37.7521547
+ ],
+ [
+ -122.9347457,
+ 37.6842013
+ ],
+ [
+ -123.0679013,
+ 37.6849023
+ ],
+ [
+ -123.0673747,
+ 37.7475251
+ ],
+ [
+ -123.1292603,
+ 37.7478506
+ ],
+ [
+ -123.1286894,
+ 37.815685
+ ],
+ [
+ -123.0590687,
+ 37.8153192
+ ],
+ [
+ -123.0595947,
+ 37.7528143
+ ]
+ ],
+ [
+ [
+ -71.6299464,
+ 41.2540893
+ ],
+ [
+ -71.4966465,
+ 41.2541393
+ ],
+ [
+ -71.4965596,
+ 41.122965
+ ],
+ [
+ -71.6298594,
+ 41.1229149
+ ]
+ ],
+ [
+ [
+ -70.3184265,
+ 41.3775196
+ ],
+ [
+ -70.3183384,
+ 41.2448243
+ ],
+ [
+ -70.1906612,
+ 41.2448722
+ ],
+ [
+ -70.1906239,
+ 41.1886019
+ ],
+ [
+ -69.9336025,
+ 41.1886984
+ ],
+ [
+ -69.933729,
+ 41.3791941
+ ],
+ [
+ -69.9950664,
+ 41.3791712
+ ],
+ [
+ -69.995109,
+ 41.443159
+ ],
+ [
+ -70.0707828,
+ 41.4431307
+ ],
+ [
+ -70.0706972,
+ 41.3144915
+ ],
+ [
+ -70.2461667,
+ 41.3144258
+ ],
+ [
+ -70.2462087,
+ 41.3775467
+ ]
+ ],
+ [
+ [
+ -68.9403374,
+ 43.9404062
+ ],
+ [
+ -68.6856948,
+ 43.9404977
+ ],
+ [
+ -68.6856475,
+ 43.8721797
+ ],
+ [
+ -68.7465405,
+ 43.8721577
+ ],
+ [
+ -68.7464976,
+ 43.8102529
+ ],
+ [
+ -68.8090782,
+ 43.8102304
+ ],
+ [
+ -68.8090343,
+ 43.746728
+ ],
+ [
+ -68.8773094,
+ 43.7467034
+ ],
+ [
+ -68.8773544,
+ 43.8117826
+ ],
+ [
+ -68.9402483,
+ 43.8117599
+ ]
+ ],
+ [
+ [
+ -123.1291466,
+ 49.0645144
+ ],
+ [
+ -122.9954224,
+ 49.0645144
+ ],
+ [
+ -122.9954224,
+ 48.9343243
+ ],
+ [
+ -123.1291466,
+ 48.9343243
+ ]
+ ],
+ [
+ [
+ -82.9407144,
+ 24.7535913
+ ],
+ [
+ -82.8719398,
+ 24.7535913
+ ],
+ [
+ -82.8719398,
+ 24.6905653
+ ],
+ [
+ -82.7446233,
+ 24.6905653
+ ],
+ [
+ -82.7446233,
+ 24.6214593
+ ],
+ [
+ -82.8088038,
+ 24.6214593
+ ],
+ [
+ -82.8088038,
+ 24.5594908
+ ],
+ [
+ -82.9407144,
+ 24.5594908
+ ]
+ ]
+ ]
+ },
+ {
+ "name": "USGS Topographic Maps",
+ "type": "tms",
+ "template": "http://{switch:a,b,c}.tile.openstreetmap.us/usgs_scanned_topos/{zoom}/{x}/{y}.png",
+ "polygon": [
+ [
+ [
+ -125.990173,
+ 48.9962416
+ ],
+ [
+ -125.989419,
+ 47.9948396
+ ],
+ [
+ -123.9929739,
+ 47.9955062
+ ],
+ [
+ -123.9922429,
+ 47.0059202
+ ],
+ [
+ -125.988688,
+ 47.0052409
+ ],
+ [
+ -125.9879604,
+ 46.0015618
+ ],
+ [
+ -123.9939396,
+ 46.0022529
+ ],
+ [
+ -123.9925238,
+ 43.9961708
+ ],
+ [
+ -124.9931832,
+ 43.9958116
+ ],
+ [
+ -124.9918175,
+ 41.9942149
+ ],
+ [
+ -125.9851789,
+ 41.9938465
+ ],
+ [
+ -125.9838655,
+ 40.0076111
+ ],
+ [
+ -123.9833285,
+ 40.0083757
+ ],
+ [
+ -123.9814115,
+ 37.002615
+ ],
+ [
+ -122.21903,
+ 37.0033173
+ ],
+ [
+ -122.2184144,
+ 36.011671
+ ],
+ [
+ -122.020087,
+ 36.011751
+ ],
+ [
+ -122.0188591,
+ 33.9961766
+ ],
+ [
+ -119.9787757,
+ 33.9970206
+ ],
+ [
+ -119.9775867,
+ 31.9987658
+ ],
+ [
+ -114.0122833,
+ 32.00129
+ ],
+ [
+ -114.0116894,
+ 30.9862401
+ ],
+ [
+ -105.998294,
+ 30.9896679
+ ],
+ [
+ -105.9971419,
+ 28.9901065
+ ],
+ [
+ -102.0210506,
+ 28.9918418
+ ],
+ [
+ -102.0204916,
+ 28.00733
+ ],
+ [
+ -100.0062436,
+ 28.0082173
+ ],
+ [
+ -100.0051143,
+ 25.991909
+ ],
+ [
+ -98.0109067,
+ 25.9928035
+ ],
+ [
+ -98.0103613,
+ 25.0063461
+ ],
+ [
+ -97.0161086,
+ 25.0067957
+ ],
+ [
+ -97.016654,
+ 25.9932494
+ ],
+ [
+ -95.9824825,
+ 25.9937132
+ ],
+ [
+ -95.9835999,
+ 27.9891175
+ ],
+ [
+ -94.0200898,
+ 27.9899826
+ ],
+ [
+ -94.0206586,
+ 28.9918129
+ ],
+ [
+ -88.0156706,
+ 28.9944338
+ ],
+ [
+ -88.0162494,
+ 30.0038862
+ ],
+ [
+ -86.0277506,
+ 30.0047454
+ ],
+ [
+ -86.0271719,
+ 28.9953016
+ ],
+ [
+ -84.0187909,
+ 28.9961781
+ ],
+ [
+ -84.017095,
+ 25.9817708
+ ],
+ [
+ -81.9971976,
+ 25.9826768
+ ],
+ [
+ -81.9966618,
+ 25.0134917
+ ],
+ [
+ -84.0165592,
+ 25.0125783
+ ],
+ [
+ -84.0160068,
+ 24.0052745
+ ],
+ [
+ -80.0199985,
+ 24.007096
+ ],
+ [
+ -80.0245309,
+ 32.0161282
+ ],
+ [
+ -78.0066484,
+ 32.0169819
+ ],
+ [
+ -78.0072238,
+ 32.9894278
+ ],
+ [
+ -77.8807233,
+ 32.9894807
+ ],
+ [
+ -77.8813253,
+ 33.9955918
+ ],
+ [
+ -76.0115411,
+ 33.9963653
+ ],
+ [
+ -76.0121459,
+ 34.9952552
+ ],
+ [
+ -74.0068449,
+ 34.9960749
+ ],
+ [
+ -74.0099997,
+ 40.0084254
+ ],
+ [
+ -72.0013745,
+ 40.0091931
+ ],
+ [
+ -72.002019,
+ 40.9912464
+ ],
+ [
+ -69.8797398,
+ 40.9920457
+ ],
+ [
+ -69.8804173,
+ 42.00893
+ ],
+ [
+ -69.9927682,
+ 42.0088883
+ ],
+ [
+ -69.9934462,
+ 43.0105166
+ ],
+ [
+ -67.9845366,
+ 43.0112496
+ ],
+ [
+ -67.985224,
+ 44.0103812
+ ],
+ [
+ -65.9892568,
+ 44.0110975
+ ],
+ [
+ -65.9921237,
+ 47.9993584
+ ],
+ [
+ -70.006442,
+ 47.9980181
+ ],
+ [
+ -70.005708,
+ 47.0042007
+ ],
+ [
+ -72.023686,
+ 47.003514
+ ],
+ [
+ -72.0222508,
+ 45.0059846
+ ],
+ [
+ -78.0146667,
+ 45.0038705
+ ],
+ [
+ -78.0139662,
+ 44.0026998
+ ],
+ [
+ -80.029686,
+ 44.0019763
+ ],
+ [
+ -80.0290052,
+ 43.0122994
+ ],
+ [
+ -81.995479,
+ 43.011582
+ ],
+ [
+ -81.9982986,
+ 47.0042713
+ ],
+ [
+ -87.505706,
+ 47.0023972
+ ],
+ [
+ -87.5064535,
+ 48.0142702
+ ],
+ [
+ -88.0260889,
+ 48.0140968
+ ],
+ [
+ -88.026838,
+ 49.0086686
+ ],
+ [
+ -93.9981078,
+ 49.0067142
+ ],
+ [
+ -93.9988778,
+ 50.0086456
+ ],
+ [
+ -96.0138899,
+ 50.0079995
+ ],
+ [
+ -96.0131199,
+ 49.0060547
+ ]
+ ],
+ [
+ [
+ -160.5787616,
+ 22.5062947
+ ],
+ [
+ -160.5782192,
+ 21.4984647
+ ],
+ [
+ -159.0030121,
+ 21.499196
+ ],
+ [
+ -159.0027422,
+ 20.9951068
+ ],
+ [
+ -157.5083185,
+ 20.995803
+ ],
+ [
+ -157.5080519,
+ 20.4960241
+ ],
+ [
+ -155.966889,
+ 20.4967444
+ ],
+ [
+ -155.9674267,
+ 21.5028287
+ ],
+ [
+ -157.5044717,
+ 21.5021151
+ ],
+ [
+ -157.5047384,
+ 21.9984962
+ ],
+ [
+ -159.0090946,
+ 21.9978002
+ ],
+ [
+ -159.0093692,
+ 22.5070181
+ ]
+ ],
+ [
+ [
+ -168.006102,
+ 68.9941463
+ ],
+ [
+ -168.0047628,
+ 68.0107853
+ ],
+ [
+ -165.4842481,
+ 68.0112562
+ ],
+ [
+ -165.4829337,
+ 67.0037303
+ ],
+ [
+ -168.0034485,
+ 67.0032389
+ ],
+ [
+ -168.002195,
+ 66.0017503
+ ],
+ [
+ -169.0087448,
+ 66.001546
+ ],
+ [
+ -169.0075381,
+ 64.9987675
+ ],
+ [
+ -168.0009882,
+ 64.9989798
+ ],
+ [
+ -167.9998282,
+ 63.9982374
+ ],
+ [
+ -164.9871288,
+ 63.9988964
+ ],
+ [
+ -164.9860062,
+ 62.9950845
+ ],
+ [
+ -167.9987057,
+ 62.9944019
+ ],
+ [
+ -167.9946035,
+ 59.0153692
+ ],
+ [
+ -162.5027857,
+ 59.0167799
+ ],
+ [
+ -162.5018149,
+ 58.0005815
+ ],
+ [
+ -160.0159024,
+ 58.0012389
+ ],
+ [
+ -160.0149725,
+ 57.000035
+ ],
+ [
+ -160.5054788,
+ 56.9999017
+ ],
+ [
+ -160.5045719,
+ 55.9968161
+ ],
+ [
+ -164.012195,
+ 55.9958373
+ ],
+ [
+ -164.0113186,
+ 55.00107
+ ],
+ [
+ -165.994782,
+ 55.0005023
+ ],
+ [
+ -165.9941266,
+ 54.2400584
+ ],
+ [
+ -168.0002944,
+ 54.2394734
+ ],
+ [
+ -168.0000986,
+ 54.0094921
+ ],
+ [
+ -170.0156134,
+ 54.0089011
+ ],
+ [
+ -170.0147683,
+ 53.0016446
+ ],
+ [
+ -171.9993636,
+ 53.0010487
+ ],
+ [
+ -171.9989488,
+ 52.4977745
+ ],
+ [
+ -176.0083239,
+ 52.4965566
+ ],
+ [
+ -176.0081186,
+ 52.2452555
+ ],
+ [
+ -178.000097,
+ 52.2446469
+ ],
+ [
+ -177.9992996,
+ 51.2554252
+ ],
+ [
+ -176.0073212,
+ 51.2560472
+ ],
+ [
+ -176.0075146,
+ 51.4980163
+ ],
+ [
+ -171.9981395,
+ 51.4992617
+ ],
+ [
+ -171.9985419,
+ 51.9985373
+ ],
+ [
+ -167.9984317,
+ 51.9997661
+ ],
+ [
+ -167.9994645,
+ 53.2560877
+ ],
+ [
+ -165.9932968,
+ 53.2566866
+ ],
+ [
+ -165.9939308,
+ 54.0100804
+ ],
+ [
+ -159.0067205,
+ 54.0121291
+ ],
+ [
+ -159.0075717,
+ 55.002502
+ ],
+ [
+ -158.0190709,
+ 55.0027849
+ ],
+ [
+ -158.0199473,
+ 55.9975094
+ ],
+ [
+ -151.9963213,
+ 55.9991902
+ ],
+ [
+ -151.9981536,
+ 57.9986536
+ ],
+ [
+ -151.500341,
+ 57.9987853
+ ],
+ [
+ -151.5012894,
+ 58.9919816
+ ],
+ [
+ -138.5159989,
+ 58.9953194
+ ],
+ [
+ -138.5150471,
+ 57.9986434
+ ],
+ [
+ -136.6872422,
+ 57.9991267
+ ],
+ [
+ -136.6863158,
+ 57.0016688
+ ],
+ [
+ -135.9973698,
+ 57.001856
+ ],
+ [
+ -135.9964667,
+ 56.0030544
+ ],
+ [
+ -134.6717732,
+ 56.003424
+ ],
+ [
+ -134.6708865,
+ 54.9969623
+ ],
+ [
+ -133.9956734,
+ 54.9971556
+ ],
+ [
+ -133.9948193,
+ 54.0031685
+ ],
+ [
+ -130.0044418,
+ 54.0043387
+ ],
+ [
+ -130.0070826,
+ 57.0000507
+ ],
+ [
+ -131.975877,
+ 56.9995156
+ ],
+ [
+ -131.9787378,
+ 59.9933094
+ ],
+ [
+ -138.0071813,
+ 59.991805
+ ],
+ [
+ -138.0082158,
+ 61.0125755
+ ],
+ [
+ -140.9874011,
+ 61.0118551
+ ],
+ [
+ -140.99984,
+ 71.0039309
+ ],
+ [
+ -154.5023956,
+ 71.0017377
+ ],
+ [
+ -154.5039632,
+ 71.9983391
+ ],
+ [
+ -157.499048,
+ 71.9978773
+ ],
+ [
+ -157.4974758,
+ 70.9982877
+ ],
+ [
+ -163.0233611,
+ 70.9973899
+ ],
+ [
+ -163.0218273,
+ 69.9707435
+ ],
+ [
+ -164.9730896,
+ 69.97041
+ ],
+ [
+ -164.9717003,
+ 68.994689
+ ]
+ ],
+ [
+ [
+ -168.5133204,
+ 62.8689586
+ ],
+ [
+ -168.5144423,
+ 63.8765677
],
[
- -66.865,
- 49.386
+ -172.0202755,
+ 63.8757975
+ ],
+ [
+ -172.0191536,
+ 62.8681608
]
],
[
[
- -179.754,
- 50.858
+ -170.9947111,
+ 59.9954089
+ ],
+ [
+ -170.995726,
+ 60.9969787
],
[
- -129.899,
- 71.463
+ -174.0045311,
+ 60.9962508
+ ],
+ [
+ -174.0035162,
+ 59.9946581
]
],
[
[
- -174.46,
- 18.702
+ -156.0717261,
+ 20.2854602
+ ],
+ [
+ -154.7940471,
+ 20.2860582
],
[
- -154.516,
- 26.501
+ -154.7933145,
+ 18.9029464
+ ],
+ [
+ -156.0709936,
+ 18.9023432
]
]
]
},
{
- "name": "USGS Topographic Maps",
- "template": "http://{t}.tile.openstreetmap.us/usgs_scanned_topos/{z}/{x}/{y}.png",
- "subdomains": [
- "a",
- "b",
- "c"
+ "name": "Vejmidte (Denmark)",
+ "type": "tms",
+ "template": "http://{switch:a,b,c}.tile.openstreetmap.dk/danmark/vejmidte/{zoom}/{x}/{y}.png",
+ "scaleExtent": [
+ 0,
+ 20
],
- "extents": [
+ "polygon": [
[
[
- -125.991,
- 24.005
+ 8.3743941,
+ 54.9551655
],
[
- -65.988,
- 50.009
- ]
- ],
- [
+ 8.3683809,
+ 55.4042149
+ ],
[
- -160.579,
- 18.902
+ 8.2103997,
+ 55.4039795
],
[
- -154.793,
- 22.508
- ]
- ],
- [
+ 8.2087314,
+ 55.4937345
+ ],
[
- -178.001,
- 51.255
+ 8.0502655,
+ 55.4924731
],
[
- -130.004,
- 71.999
- ]
- ]
- ]
- },
- {
- "name": "USGS Large Scale Aerial Imagery",
- "template": "http://{t}.tile.openstreetmap.us/usgs_large_scale/{z}/{x}/{y}.jpg",
- "subdomains": [
- "a",
- "b",
- "c"
- ],
- "extents": [
- [
+ 8.0185123,
+ 56.7501399
+ ],
[
- -124.819,
- 24.496
+ 8.1819161,
+ 56.7509948
],
[
- -66.931,
- 49.443
- ]
- ]
- ]
- },
- {
- "name": "British Columbia bc_mosaic",
- "template": "http://{t}.imagery.paulnorman.ca/tiles/bc_mosaic/{z}/{x}/{y}.png",
- "subdomains": [
- "a",
- "b",
- "c",
- "d"
- ],
- "extents": [
- [
+ 8.1763274,
+ 57.0208898
+ ],
[
- -123.441,
- 48.995
+ 8.3413329,
+ 57.0219872
],
[
- -121.346,
- 50.426
- ]
- ]
- ],
- "sourcetag": "bc_mosaic",
- "terms_url": "http://imagery.paulnorman.ca/tiles/about.html"
- },
- {
- "name": "OS OpenData Streetview",
- "template": "http://os.openstreetmap.org/sv/{z}/{x}/{y}.png",
- "extents": [
- [
+ 8.3392467,
+ 57.1119574
+ ],
[
- -8.72,
- 49.86
+ 8.5054433,
+ 57.1123212
],
[
- 1.84,
- 60.92
- ]
- ]
- ],
- "sourcetag": "OS_OpenData_StreetView"
- },
- {
- "name": "OS OpenData Locator",
- "template": "http://tiles.itoworld.com/os_locator/{z}/{x}/{y}.png",
- "extents": [
- [
+ 8.5033923,
+ 57.2020499
+ ],
[
- -9,
- 49.8
+ 9.3316304,
+ 57.2027636
],
[
- 1.9,
- 61.1
- ]
- ]
- ],
- "sourcetag": "OS_OpenData_Locator"
- },
- {
- "name": "OS 1:25k historic (OSM)",
- "template": "http://ooc.openstreetmap.org/os1/{z}/{x}/{y}.jpg",
- "extents": [
- [
+ 9.3319079,
+ 57.2924835
+ ],
[
- -9,
- 49.8
+ 9.4978864,
+ 57.2919578
],
[
- 1.9,
- 61.1
- ]
- ]
- ],
- "sourcetag": "OS 1:25k"
- },
- {
- "name": "OS 1:25k historic (NLS)",
- "template": "http://geo.nls.uk/mapdata2/os/25000/{z}/{x}/{y}.png",
- "extents": [
- [
+ 9.4988593,
+ 57.3820608
+ ],
[
- -9,
- 49.8
+ 9.6649749,
+ 57.3811615
],
[
- 1.9,
- 61.1
- ]
- ]
- ],
- "sourcetag": "OS 1:25k",
- "logo": "icons/logo_nls70-nq8.png",
- "logo_url": "http://geo.nls.uk/maps/"
- },
- {
- "name": "OS 7th Series historic (OSM)",
- "template": "http://ooc.openstreetmap.org/os7/{z}/{x}/{y}.jpg",
- "extents": [
- [
+ 9.6687295,
+ 57.5605591
+ ],
[
- -9,
- 49.8
+ 9.8351961,
+ 57.5596265
],
[
- 1.9,
- 61.1
- ]
- ]
- ],
- "sourcetag": "OS7"
- },
- {
- "name": "OS 7th Series historic (NLS)",
- "template": "http://geo.nls.uk/mapdata2/os/seventh/{z}/{x}/{y}.png",
- "extents": [
- [
+ 9.8374896,
+ 57.6493322
+ ],
[
- -9,
- 49.8
+ 10.1725726,
+ 57.6462818
],
[
- 1.9,
- 61.1
- ]
- ]
- ],
- "sourcetag": "OS7",
- "logo": "icons/logo_nls70-nq8.png",
- "logo_url": "http://geo.nls.uk/maps/"
- },
- {
- "name": "OS New Popular Edition historic",
- "template": "http://ooc.openstreetmap.org/npe/{z}/{x}/{y}.png",
- "extents": [
- [
+ 10.1754245,
+ 57.7367768
+ ],
[
- -5.8,
- 49.8
+ 10.5118282,
+ 57.7330269
],
[
- 1.9,
- 55.8
- ]
- ]
- ],
- "sourcetag": "NPE"
- },
- {
- "name": "OS Scottish Popular historic",
- "template": "http://ooc.openstreetmap.org/npescotland/tiles/{z}/{x}/{y}.jpg",
- "extents": [
- [
+ 10.5152095,
+ 57.8228945
+ ],
[
- -7.8,
- 54.5
+ 10.6834853,
+ 57.8207722
],
[
- -1.1,
- 61.1
- ]
- ]
- ],
- "sourcetag": "NPE"
- },
- {
- "name": "Surrey aerial",
- "template": "http://gravitystorm.dev.openstreetmap.org/surrey/{z}/{x}/{y}.png",
- "extents": [
- [
+ 10.6751613,
+ 57.6412021
+ ],
[
- -0.856,
- 51.071
+ 10.5077045,
+ 57.6433097
],
[
- 0.062,
- 51.473
- ]
- ]
- ],
- "sourcetag": "Surrey aerial"
- },
- {
- "name": "Port au Prince - GeoEye Jan 2010",
- "template": "http://gravitystorm.dev.openstreetmap.org/imagery/haiti/{z}/{x}/{y}.png",
- "extents": [
- [
+ 10.5039992,
+ 57.5535088
+ ],
[
- -72.43,
- 18.5
+ 10.671038,
+ 57.5514113
],
[
- -72.31,
- 18.58
- ]
- ]
- ],
- "sourcetag": "GeoEye, 2010-01"
- },
- {
- "name": "Haiti - IOM Drone Imagery, 2012-13",
- "template": "http://wms.openstreetmap.fr/tms/1.0.0/iomhaiti/{zoom}/{x}/{y}",
- "extents": [
- [
+ 10.6507805,
+ 57.1024538
+ ],
[
- -74.5,
- 17.95
+ 10.4857673,
+ 57.1045138
],
[
- -71.58,
- 20.12
- ]
- ]
- ],
- "sourcetag": "iom_image2013"
- },
- {
- "name": "NAIP",
- "template": "http://cube.telascience.org/tilecache/tilecache.py/NAIP_ALL/{z}/{x}/{y}.png",
- "description": "National Agriculture Imagery Program",
- "extents": [
- [
+ 10.4786236,
+ 56.9249051
+ ],
+ [
+ 10.3143981,
+ 56.9267573
+ ],
+ [
+ 10.3112341,
+ 56.8369269
+ ],
+ [
+ 10.4750295,
+ 56.83509
+ ],
+ [
+ 10.4649016,
+ 56.5656681
+ ],
+ [
+ 10.9524239,
+ 56.5589761
+ ],
+ [
+ 10.9479249,
+ 56.4692243
+ ],
+ [
+ 11.1099335,
+ 56.4664675
+ ],
+ [
+ 11.1052639,
+ 56.376833
+ ],
+ [
+ 10.9429901,
+ 56.3795284
+ ],
+ [
+ 10.9341235,
+ 56.1994768
+ ],
+ [
+ 10.7719685,
+ 56.2020244
+ ],
+ [
+ 10.7694751,
+ 56.1120103
+ ],
+ [
+ 10.6079695,
+ 56.1150259
+ ],
+ [
+ 10.4466742,
+ 56.116717
+ ],
+ [
+ 10.2865948,
+ 56.118675
+ ],
+ [
+ 10.2831527,
+ 56.0281851
+ ],
+ [
+ 10.4439274,
+ 56.0270388
+ ],
+ [
+ 10.4417713,
+ 55.7579243
+ ],
+ [
+ 10.4334961,
+ 55.6693533
+ ],
+ [
+ 10.743814,
+ 55.6646861
+ ],
+ [
+ 10.743814,
+ 55.5712253
+ ],
+ [
+ 10.8969041,
+ 55.5712253
+ ],
+ [
+ 10.9051793,
+ 55.3953852
+ ],
+ [
+ 11.0613726,
+ 55.3812841
+ ],
+ [
+ 11.0593038,
+ 55.1124061
+ ],
+ [
+ 11.0458567,
+ 55.0318621
+ ],
+ [
+ 11.2030844,
+ 55.0247474
+ ],
+ [
+ 11.2030844,
+ 55.117139
+ ],
+ [
+ 11.0593038,
+ 55.1124061
+ ],
+ [
+ 11.0613726,
+ 55.3812841
+ ],
+ [
+ 11.0789572,
+ 55.5712253
+ ],
+ [
+ 10.8969041,
+ 55.5712253
+ ],
+ [
+ 10.9258671,
+ 55.6670198
+ ],
+ [
+ 10.743814,
+ 55.6646861
+ ],
+ [
+ 10.7562267,
+ 55.7579243
+ ],
+ [
+ 10.4417713,
+ 55.7579243
+ ],
+ [
+ 10.4439274,
+ 56.0270388
+ ],
+ [
+ 10.4466742,
+ 56.116717
+ ],
+ [
+ 10.6079695,
+ 56.1150259
+ ],
+ [
+ 10.6052053,
+ 56.0247462
+ ],
+ [
+ 10.9258671,
+ 56.0201215
+ ],
+ [
+ 10.9197132,
+ 55.9309388
+ ],
+ [
+ 11.0802782,
+ 55.92792
+ ],
+ [
+ 11.0858066,
+ 56.0178284
+ ],
+ [
+ 11.7265047,
+ 56.005058
+ ],
+ [
+ 11.7319981,
+ 56.0952142
+ ],
+ [
+ 12.0540333,
+ 56.0871256
+ ],
+ [
+ 12.0608477,
+ 56.1762576
+ ],
+ [
+ 12.7023469,
+ 56.1594405
+ ],
+ [
+ 12.6611131,
+ 55.7114318
+ ],
+ [
+ 12.9792318,
+ 55.7014026
+ ],
+ [
+ 12.9612912,
+ 55.5217294
+ ],
+ [
+ 12.3268659,
+ 55.5412096
+ ],
+ [
+ 12.3206071,
+ 55.4513655
+ ],
+ [
+ 12.4778226,
+ 55.447067
+ ],
+ [
+ 12.4702432,
+ 55.3570479
+ ],
+ [
+ 12.6269738,
+ 55.3523837
+ ],
+ [
+ 12.6200898,
+ 55.2632576
+ ],
+ [
+ 12.4627339,
+ 55.26722
+ ],
+ [
+ 12.4552949,
+ 55.1778223
+ ],
+ [
+ 12.2987046,
+ 55.1822303
+ ],
+ [
+ 12.2897344,
+ 55.0923641
+ ],
+ [
+ 12.6048608,
+ 55.0832904
+ ],
+ [
+ 12.5872011,
+ 54.9036285
+ ],
+ [
+ 12.2766618,
+ 54.9119031
+ ],
+ [
+ 12.2610181,
+ 54.7331602
+ ],
+ [
+ 12.1070691,
+ 54.7378161
+ ],
+ [
+ 12.0858621,
+ 54.4681655
+ ],
+ [
+ 11.7794953,
+ 54.4753579
+ ],
+ [
+ 11.7837381,
+ 54.5654783
+ ],
+ [
+ 11.1658525,
+ 54.5782155
+ ],
+ [
+ 11.1706443,
+ 54.6686508
+ ],
+ [
+ 10.8617173,
+ 54.6733956
+ ],
+ [
+ 10.8651245,
+ 54.7634667
+ ],
+ [
+ 10.7713646,
+ 54.7643888
+ ],
+ [
+ 10.7707276,
+ 54.7372807
+ ],
+ [
+ 10.7551428,
+ 54.7375776
+ ],
+ [
+ 10.7544039,
+ 54.7195666
+ ],
+ [
+ 10.7389074,
+ 54.7197588
+ ],
+ [
+ 10.7384368,
+ 54.7108482
+ ],
+ [
+ 10.7074486,
+ 54.7113045
+ ],
+ [
+ 10.7041094,
+ 54.6756741
+ ],
+ [
+ 10.5510973,
+ 54.6781698
+ ],
+ [
+ 10.5547184,
+ 54.7670245
+ ],
+ [
+ 10.2423994,
+ 54.7705935
+ ],
+ [
+ 10.2459845,
+ 54.8604673
+ ],
+ [
+ 10.0902268,
+ 54.8622134
+ ],
+ [
+ 10.0873731,
+ 54.7723851
+ ],
+ [
+ 9.1555798,
+ 54.7769557
+ ],
+ [
+ 9.1562752,
+ 54.8675369
+ ],
[
- -125.8,
- 24.2
+ 8.5321973,
+ 54.8663765
],
[
- -62.3,
- 49.5
+ 8.531432,
+ 54.95516
]
],
[
[
- -168.5,
- 55.3
+ 11.4577738,
+ 56.819554
],
[
- -140,
- 71.5
- ]
- ]
- ],
- "sourcetag": "NAIP"
- },
- {
- "name": "Ireland - NLS Historic Maps",
- "template": "http://geo.nls.uk/maps/ireland/gsgs4136/{z}/{x}/{y}.png",
- "extents": [
- [
+ 11.7849181,
+ 56.8127385
+ ],
[
- -10.71,
- 51.32
+ 11.7716715,
+ 56.6332796
],
[
- -5.37,
- 55.46
+ 11.4459621,
+ 56.6401087
]
- ]
- ],
- "sourcetag": "NLS Historic Maps",
- "logo": "icons/logo_nls70-nq8.png",
- "logo_url": "http://geo.nls.uk/maps/"
- },
- {
- "name": "Denmark - Fugro Aerial Imagery",
- "template": "http://tile.openstreetmap.dk/fugro2005/{z}/{x}/{y}.jpg",
- "extents": [
+ ],
[
[
- 7.81,
- 54.44
+ 11.3274736,
+ 57.3612962
],
[
- 15.49,
- 57.86
- ]
- ]
- ],
- "sourcetag": "Fugro (2005)"
- },
- {
- "name": "Denmark - Stevns Kommune",
- "template": "http://tile.openstreetmap.dk/stevns/2009/{z}/{x}/{y}.jpg",
- "extents": [
- [
+ 11.3161808,
+ 57.1818004
+ ],
[
- 12.09144,
- 55.23403
+ 11.1508692,
+ 57.1847276
],
[
- 12.47712,
- 55.43647
- ]
- ]
- ],
- "sourcetag": "Stevns Kommune (2009)"
- },
- {
- "name": "Austria - geoimage.at",
- "template": "http://geoimage.openstreetmap.at/4d80de696cd562a63ce463a58a61488d/{z}/{x}/{y}.jpg",
- "extents": [
- [
+ 11.1456628,
+ 57.094962
+ ],
[
- 9.36,
- 46.33
+ 10.8157703,
+ 57.1001693
],
[
- 17.28,
- 49.09
+ 10.8290599,
+ 57.3695272
]
- ]
- ],
- "sourcetag": "geoimage.at"
- },
- {
- "name": "Russia - Kosmosnimki.ru IRS Satellite",
- "template": "http://irs.gis-lab.info/?layers=irs&request=GetTile&z={z}&x={x}&y={y}",
- "extents": [
+ ],
[
[
- 19.02,
- 40.96
+ 11.5843266,
+ 56.2777928
],
[
- 77.34,
- 70.48
- ]
- ]
- ],
- "sourcetag": "Kosmosnimki.ru IRS"
- },
- {
- "name": "Belarus - Kosmosnimki.ru SPOT4 Satellite",
- "template": "http://irs.gis-lab.info/?layers=spot&request=GetTile&z={z}&x={x}&y={y}",
- "extents": [
- [
+ 11.5782882,
+ 56.1880397
+ ],
[
- 23.16,
- 51.25
+ 11.7392309,
+ 56.1845765
],
[
- 32.83,
- 56.19
+ 11.7456428,
+ 56.2743186
]
- ]
- ],
- "sourcetag": "Kosmosnimki.ru SPOT4"
- },
- {
- "name": "Australia - Geographic Reference Image",
- "template": "http://agri.openstreetmap.org/{z}/{x}/{y}.png",
- "extents": [
+ ],
[
[
- 96,
- -44
+ 14.6825922,
+ 55.3639405
],
[
- 168,
- -9
- ]
- ]
- ],
- "sourcetag": "AGRI"
- },
- {
- "name": "Switzerland - Canton Aargau - AGIS 25cm 2011",
- "template": "http://tiles.poole.ch/AGIS/OF2011/{z}/{x}/{y}.png",
- "extents": [
- [
+ 14.8395247,
+ 55.3565231
+ ],
[
- 7.69,
- 47.13
+ 14.8263755,
+ 55.2671261
],
[
- 8.48,
- 47.63
- ]
- ]
- ],
- "sourcetag": "AGIS OF2011"
- },
- {
- "name": "Switzerland - Canton Solothurn - SOGIS 2007",
- "template": "http://mapproxy.sosm.ch:8080/tiles/sogis2007/EPSG900913/{z}/{x}/{y}.png?origin=nw",
- "extents": [
- [
+ 15.1393406,
+ 55.2517359
+ ],
+ [
+ 15.1532015,
+ 55.3410836
+ ],
+ [
+ 15.309925,
+ 55.3330556
+ ],
+ [
+ 15.295719,
+ 55.2437356
+ ],
+ [
+ 15.1393406,
+ 55.2517359
+ ],
+ [
+ 15.1255631,
+ 55.1623802
+ ],
+ [
+ 15.2815819,
+ 55.1544167
+ ],
[
- 7.33,
- 47.06
+ 15.2535578,
+ 54.9757646
],
[
- 8.04,
- 47.5
+ 14.6317464,
+ 55.0062496
]
]
],
- "sourcetag": "Orthofoto 2007 WMS Solothurn"
+ "terms_url": "http://wiki.openstreetmap.org/wiki/Vejmidte",
+ "terms_text": "Danish municipalities"
},
{
- "name": "Poland - Media-Lab fleet GPS masstracks",
- "template": "http://masstracks.media-lab.com.pl/{z}/{x}/{y}.png",
- "extents": [
+ "name": "Vienna: Beschriftungen (annotations)",
+ "type": "tms",
+ "template": "http://www.wien.gv.at/wmts/beschriftung/normal/google3857/{zoom}/{y}/{x}.png",
+ "scaleExtent": [
+ 0,
+ 19
+ ],
+ "polygon": [
[
[
- 14,
- 48.9
+ 16.17,
+ 48.1
+ ],
+ [
+ 16.17,
+ 48.33
+ ],
+ [
+ 16.58,
+ 48.33
+ ],
+ [
+ 16.58,
+ 48.1
],
[
- 24.2,
- 55
+ 16.17,
+ 48.1
]
]
],
- "sourcetag": "masstracks"
+ "terms_url": "http://data.wien.gv.at/",
+ "terms_text": "Stadt Wien"
},
{
- "name": "South Africa - CD:NGI Aerial",
- "template": "http://{t}.aerial.openstreetmap.org.za/ngi-aerial/{z}/{x}/{y}.jpg",
- "subdomains": [
- "a",
- "b",
- "c"
- ],
- "extents": [
+ "name": "Vienna: Mehrzweckkarte (general purpose)",
+ "type": "tms",
+ "template": "http://www.wien.gv.at/wmts/fmzk/pastell/google3857/{zoom}/{y}/{x}.jpeg",
+ "scaleExtent": [
+ 0,
+ 19
+ ],
+ "polygon": [
[
[
- 17.64,
- -34.95
+ 16.17,
+ 48.1
+ ],
+ [
+ 16.17,
+ 48.33
+ ],
+ [
+ 16.58,
+ 48.33
+ ],
+ [
+ 16.58,
+ 48.1
],
[
- 32.87,
- -22.05
+ 16.17,
+ 48.1
]
]
],
- "sourcetag": "ngi-aerial"
+ "terms_url": "http://data.wien.gv.at/",
+ "terms_text": "Stadt Wien"
},
{
- "name": "Lithuania - ORT10LT",
- "template": "http://mapproxy.openmap.lt/ort10lt/g/{z}/{x}/{y}.jpeg",
- "extents": [
+ "name": "Vienna: Orthofoto (aerial image)",
+ "type": "tms",
+ "template": "http://www.wien.gv.at/wmts/lb/farbe/google3857/{zoom}/{y}/{x}.jpeg",
+ "scaleExtent": [
+ 0,
+ 19
+ ],
+ "polygon": [
[
[
- 21,
- 53.88
+ 16.17,
+ 48.1
],
[
- 26.85,
- 56.45
+ 16.17,
+ 48.33
+ ],
+ [
+ 16.58,
+ 48.33
+ ],
+ [
+ 16.58,
+ 48.1
+ ],
+ [
+ 16.17,
+ 48.1
]
]
],
- "scaleExtent": [
- 4,
- 18
- ],
- "sourcetag": "NŽT ORT10LT"
+ "terms_url": "http://data.wien.gv.at/",
+ "terms_text": "Stadt Wien"
}
],
"wikipedia": [
"tags": {
"addr:housenumber": "*"
},
+ "addTags": {},
"matchScore": 0.2,
"name": "Address"
},
},
"name": "Amenity"
},
+ "amenity/arts_centre": {
+ "name": "Arts Center",
+ "geometry": [
+ "point",
+ "area"
+ ],
+ "terms": [
+ "arts",
+ "arts centre"
+ ],
+ "tags": {
+ "amenity": "arts_centre"
+ },
+ "icon": "theatre",
+ "fields": [
+ "building_area",
+ "address"
+ ]
+ },
"amenity/atm": {
"icon": "bank",
"fields": [
"tags": {
"amenity": "bench"
},
+ "fields": [
+ "backrest"
+ ],
"name": "Bench"
},
"amenity/bicycle_parking": {
},
"name": "Bicycle Rental"
},
+ "amenity/boat_rental": {
+ "geometry": [
+ "point",
+ "area"
+ ],
+ "tags": {
+ "amenity": "boat_rental"
+ },
+ "fields": [
+ "operator"
+ ],
+ "name": "Boat Rental"
+ },
"amenity/cafe": {
"icon": "cafe",
"fields": [
"vertex",
"area"
],
+ "terms": [
+ "petrol",
+ "fuel",
+ "propane",
+ "diesel",
+ "lng",
+ "cng",
+ "biodiesel"
+ ],
"tags": {
"amenity": "fuel"
},
],
"terms": [
"visitor center",
+ "visitor centre",
"permit center",
+ "permit centre",
"backcountry office"
],
"tags": {
"eating house",
"eating place",
"fast-food place",
+ "fish and chips",
"greasy spoon",
"grill",
"hamburger stand",
"toilets/disposal",
"operator",
"building_area",
- "access"
+ "access_toilets"
],
"geometry": [
"point",
"city government",
"courthouse",
"municipal building",
- "municipal center"
+ "municipal center",
+ "municipal centre"
],
"tags": {
"amenity": "townhall"
],
"name": "University"
},
+ "amenity/vending_machine": {
+ "fields": [
+ "vending",
+ "operator"
+ ],
+ "geometry": [
+ "point"
+ ],
+ "tags": {
+ "amenity": "vending_machine"
+ },
+ "name": "Vending Machine"
+ },
"amenity/waste_basket": {
"icon": "waste-basket",
"geometry": [
"tags": {
"barrier": "entrance"
},
- "name": "Entrance"
+ "name": "Entrance",
+ "searchable": false
},
"barrier/fence": {
"geometry": [
"entrance": "*"
},
"fields": [
- "entrance"
+ "entrance",
+ "address"
],
"name": "Entrance"
},
"highway/cycleway": {
"icon": "highway-cycleway",
"fields": [
- "oneway",
+ "surface",
+ "lit",
"structure",
"access",
- "surface"
+ "oneway"
],
"geometry": [
"line"
"icon": "highway-living-street",
"fields": [
"oneway",
+ "maxspeed",
"structure",
"access",
- "maxspeed",
"surface"
],
"geometry": [
"icon": "highway-motorway",
"fields": [
"oneway",
+ "maxspeed",
"structure",
"access",
"lanes",
- "maxspeed",
"surface",
"ref"
],
"icon": "highway-motorway-link",
"fields": [
"oneway_yes",
+ "maxspeed",
"structure",
"access",
- "maxspeed",
"surface",
"ref"
],
"icon": "highway-primary",
"fields": [
"oneway",
+ "maxspeed",
"structure",
"access",
"lanes",
- "maxspeed",
"surface",
"ref"
],
"icon": "highway-primary-link",
"fields": [
"oneway",
+ "maxspeed",
"structure",
"access",
- "maxspeed",
"surface",
"ref"
],
"icon": "highway-residential",
"fields": [
"oneway",
+ "maxspeed",
"structure",
"access",
- "maxspeed",
"surface"
],
"geometry": [
"icon": "highway-road",
"fields": [
"oneway",
+ "maxspeed",
"structure",
"access",
- "maxspeed",
"surface"
],
"geometry": [
"icon": "highway-secondary",
"fields": [
"oneway",
+ "maxspeed",
"structure",
"access",
"lanes",
- "maxspeed",
"surface",
"ref"
],
"icon": "highway-secondary-link",
"fields": [
"oneway",
+ "maxspeed",
"structure",
"access",
- "maxspeed",
"surface",
"ref"
],
"fields": [
"service",
"oneway",
+ "maxspeed",
"structure",
"access",
- "maxspeed",
"surface"
],
"geometry": [
],
"name": "Steps"
},
+ "highway/stop": {
+ "geometry": [
+ "vertex"
+ ],
+ "tags": {
+ "highway": "stop"
+ },
+ "terms": [
+ "stop sign"
+ ],
+ "name": "Stop Sign"
+ },
"highway/tertiary": {
"icon": "highway-tertiary",
"fields": [
"oneway",
+ "maxspeed",
"structure",
"access",
"lanes",
- "maxspeed",
"surface",
"ref"
],
"icon": "highway-tertiary-link",
"fields": [
"oneway",
+ "maxspeed",
"structure",
"access",
- "maxspeed",
"surface",
"ref"
],
"fields": [
"tracktype",
"oneway",
+ "maxspeed",
"structure",
"access",
- "maxspeed",
"surface"
],
"geometry": [
"icon": "highway-trunk",
"fields": [
"oneway",
+ "maxspeed",
"structure",
"access",
"lanes",
- "maxspeed",
"surface",
"ref"
],
"icon": "highway-trunk-link",
"fields": [
"oneway",
+ "maxspeed",
"structure",
"access",
- "maxspeed",
"surface",
"ref"
],
"icon": "highway-unclassified",
"fields": [
"oneway",
+ "maxspeed",
"structure",
"access",
- "maxspeed",
"surface"
],
"geometry": [
"landuse": "farmyard"
},
"terms": [],
- "name": "Farmyard"
+ "name": "Farmyard",
+ "icon": "farm"
},
"landuse/forest": {
"fields": [
},
"name": "Leisure"
},
+ "leisure/common": {
+ "geometry": [
+ "point",
+ "area"
+ ],
+ "terms": [
+ "open space"
+ ],
+ "tags": {
+ "leisure": "common"
+ },
+ "name": "Common"
+ },
"leisure/dog_park": {
"geometry": [
"point",
"tags": {
"leisure": "dog_park"
},
- "name": "Dog Park"
+ "name": "Dog Park",
+ "icon": "dog-park"
},
"leisure/garden": {
"icon": "garden",
"terms": [],
"name": "Basketball Court"
},
+ "leisure/pitch/skateboard": {
+ "icon": "pitch",
+ "fields": [
+ "surface"
+ ],
+ "geometry": [
+ "point",
+ "area"
+ ],
+ "tags": {
+ "leisure": "pitch",
+ "sport": "skateboard"
+ },
+ "terms": [],
+ "name": "Skate Park"
+ },
"leisure/pitch/soccer": {
"icon": "soccer",
"fields": [
},
"name": "Slipway"
},
+ "leisure/sports_center": {
+ "geometry": [
+ "point",
+ "area"
+ ],
+ "tags": {
+ "leisure": "sports_centre"
+ },
+ "terms": [
+ "gym"
+ ],
+ "icon": "sports",
+ "name": "Sports Center"
+ },
"leisure/stadium": {
"geometry": [
"point",
"tags": {
"man_made": "lighthouse"
},
- "name": "Lighthouse"
+ "name": "Lighthouse",
+ "icon": "lighthouse"
+ },
+ "man_made/observation": {
+ "geometry": [
+ "point",
+ "area"
+ ],
+ "terms": [
+ "lookout tower",
+ "fire tower"
+ ],
+ "tags": {
+ "man_made": "tower",
+ "tower:type": "observation"
+ },
+ "name": "Observation Tower"
},
"man_made/pier": {
"geometry": [
},
"name": "Coastline"
},
+ "natural/fell": {
+ "geometry": [
+ "area"
+ ],
+ "terms": [],
+ "tags": {
+ "natural": "fell"
+ },
+ "name": "Fell"
+ },
"natural/glacier": {
"geometry": [
"area"
],
"name": "Peak"
},
+ "natural/scree": {
+ "geometry": [
+ "area"
+ ],
+ "tags": {
+ "natural": "scree"
+ },
+ "terms": [
+ "loose rocks"
+ ],
+ "name": "Scree"
+ },
"natural/scrub": {
"geometry": [
"area"
"terms": [],
"name": "Disused Railway"
},
+ "railway/halt": {
+ "icon": "rail",
+ "geometry": [
+ "point",
+ "vertex"
+ ],
+ "tags": {
+ "railway": "halt"
+ },
+ "name": "Railway Halt",
+ "terms": [
+ "break",
+ "interrupt",
+ "rest",
+ "wait",
+ "interruption"
+ ]
+ },
"railway/level_crossing": {
"icon": "cross",
"geometry": [
"name": "Liquor Store"
},
"shop/bakery": {
- "icon": "shop",
+ "icon": "bakery",
"fields": [
"address",
"building_area",
"vertex",
"area"
],
+ "terms": [
+ "nail spa",
+ "spa",
+ "salon",
+ "tanning"
+ ],
"tags": {
"shop": "beauty"
},
"icon": "shop",
"fields": [
"address",
- "building_area",
"opening_hours"
],
"geometry": [
"name": "Chemist"
},
"shop/clothes": {
- "icon": "shop",
+ "icon": "clothing-store",
"fields": [
"address",
"building_area",
"vertex",
"area"
],
+ "terms": [
+ "garden centre"
+ ],
"tags": {
"shop": "garden_centre"
},
},
"name": "Laundry"
},
+ "shop/locksmith": {
+ "icon": "shop",
+ "fields": [
+ "address",
+ "building_area",
+ "opening_hours"
+ ],
+ "geometry": [
+ "point",
+ "vertex",
+ "area"
+ ],
+ "terms": [
+ "keys"
+ ],
+ "tags": {
+ "shop": "locksmith"
+ },
+ "name": "Locksmith"
+ },
"shop/mall": {
"icon": "shop",
"fields": [
"name": "Outdoor Store"
},
"shop/pet": {
- "icon": "shop",
+ "icon": "dog-park",
"fields": [
"address",
"building_area",
},
"name": "Pet Store"
},
+ "shop/photo": {
+ "icon": "camera",
+ "fields": [
+ "address",
+ "building_area",
+ "opening_hours"
+ ],
+ "geometry": [
+ "point",
+ "vertex",
+ "area"
+ ],
+ "tags": {
+ "shop": "photo"
+ },
+ "name": "Photography Store"
+ },
"shop/shoes": {
"icon": "shop",
"fields": [
"five-and-dime",
"flea market",
"galleria",
+ "grocery store",
"mall",
"mart",
"outlet",
"outlet store",
"shop",
"shopping center",
+ "shopping centre",
"shopping plaza",
"stand",
"store",
"network"
]
},
+ "type/route/hiking": {
+ "geometry": [
+ "relation"
+ ],
+ "tags": {
+ "type": "route",
+ "route": "hiking"
+ },
+ "name": "Hiking Route",
+ "icon": "route-foot",
+ "fields": [
+ "ref",
+ "operator",
+ "network"
+ ]
+ },
"type/route/pipeline": {
"geometry": [
"relation"
"icon": "route",
"members": [
"type/route/road",
- "type/route/foot",
"type/route/bicycle",
+ "type/route/foot",
+ "type/route/hiking",
"type/route/bus",
"type/route/train",
"type/route/tram",
}
}
},
+ "access_toilets": {
+ "key": "access",
+ "type": "combo",
+ "label": "Access",
+ "options": [
+ "public",
+ "permissive",
+ "private",
+ "customers"
+ ]
+ },
"address": {
"type": "address",
"keys": [
},
"aeroway": {
"key": "aeroway",
- "type": "combo",
+ "type": "typeCombo",
"label": "Type"
},
"amenity": {
"key": "amenity",
- "type": "combo",
+ "type": "typeCombo",
"label": "Type"
},
"artist": {
"type": "check",
"label": "ATM"
},
+ "backrest": {
+ "key": "backrest",
+ "type": "check",
+ "label": "Backrest"
+ },
"barrier": {
"key": "barrier",
- "type": "combo",
+ "type": "typeCombo",
"label": "Type"
},
"bicycle_parking": {
},
"building": {
"key": "building",
- "type": "combo",
+ "type": "typeCombo",
"label": "Building"
},
"building_area": {
},
"entrance": {
"key": "entrance",
- "type": "combo",
+ "type": "typeCombo",
"label": "Type"
},
"fax": {
},
"highway": {
"key": "highway",
- "type": "combo",
+ "type": "typeCombo",
"label": "Type"
},
"historic": {
"key": "historic",
- "type": "combo",
+ "type": "typeCombo",
"label": "Type"
},
"iata": {
},
"landuse": {
"key": "landuse",
- "type": "combo",
+ "type": "typeCombo",
"label": "Type"
},
"lanes": {
},
"leisure": {
"key": "leisure",
- "type": "combo",
+ "type": "typeCombo",
"label": "Type"
},
"levels": {
"label": "Levels",
"placeholder": "2, 4, 6..."
},
+ "lit": {
+ "key": "lit",
+ "type": "check",
+ "label": "Lit"
+ },
"location": {
"key": "location",
"type": "combo",
},
"man_made": {
"key": "man_made",
- "type": "combo",
+ "type": "typeCombo",
"label": "Type"
},
"maxspeed": {
},
"natural": {
"key": "natural",
- "type": "combo",
+ "type": "typeCombo",
"label": "Natural"
},
"network": {
},
"office": {
"key": "office",
- "type": "combo",
+ "type": "typeCombo",
"label": "Type"
},
"oneway": {
},
"place": {
"key": "place",
- "type": "combo",
+ "type": "typeCombo",
"label": "Type"
},
"power": {
"key": "power",
- "type": "combo",
+ "type": "typeCombo",
"label": "Type"
},
"railway": {
"key": "railway",
- "type": "combo",
+ "type": "typeCombo",
"label": "Type"
},
"ref": {
},
"shop": {
"key": "shop",
- "type": "combo",
+ "type": "typeCombo",
"label": "Type"
},
"source": {
},
"tourism": {
"key": "tourism",
- "type": "combo",
+ "type": "typeCombo",
"label": "Type"
},
"towertype": {
"type": "combo",
"label": "Trail Visibility"
},
+ "vending": {
+ "key": "vending",
+ "type": "combo",
+ "label": "Type of Goods"
+ },
"water": {
"key": "water",
"type": "combo",
},
"waterway": {
"key": "waterway",
- "type": "combo",
+ "type": "typeCombo",
"label": "Type"
},
"website": {
]
},
"featureIcons": {
- "airfield": {
+ "circle-stroked": {
"12": [
- 0,
+ 42,
0
],
"18": [
- 0,
- 14
+ 24,
+ 0
],
"24": [
0,
- 34
+ 0
]
},
- "airport": {
+ "circle": {
"12": [
- 0,
- 60
+ 96,
+ 0
],
"18": [
- 0,
- 74
+ 78,
+ 0
],
"24": [
- 0,
- 94
+ 54,
+ 0
]
},
- "alcohol-shop": {
+ "square-stroked": {
"12": [
- 0,
- 120
+ 150,
+ 0
],
"18": [
- 0,
- 134
+ 132,
+ 0
],
"24": [
- 0,
- 154
+ 108,
+ 0
]
},
- "america-football": {
+ "square": {
"12": [
+ 204,
+ 0
+ ],
+ "18": [
+ 186,
+ 0
+ ],
+ "24": [
+ 162,
+ 0
+ ]
+ },
+ "triangle-stroked": {
+ "12": [
+ 258,
+ 0
+ ],
+ "18": [
+ 240,
+ 0
+ ],
+ "24": [
+ 216,
+ 0
+ ]
+ },
+ "triangle": {
+ "12": [
+ 42,
+ 24
+ ],
+ "18": [
+ 24,
+ 24
+ ],
+ "24": [
0,
- 180
+ 24
+ ]
+ },
+ "star-stroked": {
+ "12": [
+ 96,
+ 24
+ ],
+ "18": [
+ 78,
+ 24
+ ],
+ "24": [
+ 54,
+ 24
+ ]
+ },
+ "star": {
+ "12": [
+ 150,
+ 24
],
"18": [
+ 132,
+ 24
+ ],
+ "24": [
+ 108,
+ 24
+ ]
+ },
+ "cross": {
+ "12": [
+ 204,
+ 24
+ ],
+ "18": [
+ 186,
+ 24
+ ],
+ "24": [
+ 162,
+ 24
+ ]
+ },
+ "marker-stroked": {
+ "12": [
+ 258,
+ 24
+ ],
+ "18": [
+ 240,
+ 24
+ ],
+ "24": [
+ 216,
+ 24
+ ]
+ },
+ "marker": {
+ "12": [
+ 42,
+ 48
+ ],
+ "18": [
+ 24,
+ 48
+ ],
+ "24": [
0,
- 194
+ 48
+ ]
+ },
+ "religious-jewish": {
+ "12": [
+ 96,
+ 48
+ ],
+ "18": [
+ 78,
+ 48
],
"24": [
- 0,
- 214
+ 54,
+ 48
]
},
- "art-gallery": {
+ "religious-christian": {
"12": [
- 0,
- 240
+ 150,
+ 48
],
"18": [
- 0,
- 254
+ 132,
+ 48
],
"24": [
- 0,
- 274
+ 108,
+ 48
]
},
- "bank": {
+ "religious-muslim": {
"12": [
- 0,
- 300
+ 204,
+ 48
],
"18": [
- 0,
- 314
+ 186,
+ 48
],
"24": [
- 0,
- 334
+ 162,
+ 48
]
},
- "bar": {
+ "cemetery": {
"12": [
- 0,
- 360
+ 258,
+ 48
],
"18": [
- 0,
- 374
+ 240,
+ 48
],
"24": [
- 0,
- 394
+ 216,
+ 48
]
},
- "baseball": {
+ "rocket": {
"12": [
- 0,
- 420
+ 42,
+ 72
],
"18": [
- 0,
- 434
+ 24,
+ 72
],
"24": [
0,
- 454
+ 72
]
},
- "basketball": {
+ "airport": {
"12": [
- 0,
- 480
+ 96,
+ 72
],
"18": [
- 0,
- 494
+ 78,
+ 72
],
"24": [
- 0,
- 514
+ 54,
+ 72
]
},
- "beer": {
+ "heliport": {
"12": [
- 0,
- 540
+ 150,
+ 72
],
"18": [
- 0,
- 554
+ 132,
+ 72
],
"24": [
- 0,
- 574
+ 108,
+ 72
]
},
- "bicycle": {
+ "rail": {
"12": [
- 0,
- 600
+ 204,
+ 72
],
"18": [
- 0,
- 614
+ 186,
+ 72
],
"24": [
- 0,
- 634
+ 162,
+ 72
]
},
- "building": {
+ "rail-underground": {
"12": [
- 0,
- 660
+ 258,
+ 72
],
"18": [
- 0,
- 674
+ 240,
+ 72
],
"24": [
- 0,
- 694
+ 216,
+ 72
]
},
- "bus": {
+ "rail-above": {
"12": [
- 0,
- 720
+ 42,
+ 96
],
"18": [
- 0,
- 734
+ 24,
+ 96
],
"24": [
0,
- 754
+ 96
]
},
- "cafe": {
+ "bus": {
"12": [
- 0,
- 780
+ 96,
+ 96
],
"18": [
- 0,
- 794
+ 78,
+ 96
],
"24": [
- 0,
- 814
+ 54,
+ 96
]
},
- "campsite": {
+ "fuel": {
"12": [
- 0,
- 840
+ 150,
+ 96
],
"18": [
- 0,
- 854
+ 132,
+ 96
],
"24": [
- 0,
- 874
+ 108,
+ 96
]
},
- "cemetery": {
+ "parking": {
"12": [
- 0,
- 900
+ 204,
+ 96
],
"18": [
- 0,
- 914
+ 186,
+ 96
],
"24": [
- 0,
- 934
+ 162,
+ 96
]
},
- "cinema": {
+ "parking-garage": {
"12": [
- 0,
- 960
+ 258,
+ 96
],
"18": [
- 0,
- 974
+ 240,
+ 96
],
"24": [
- 0,
- 994
+ 216,
+ 96
]
},
- "circle": {
+ "airfield": {
"12": [
- 0,
- 1020
+ 42,
+ 120
],
"18": [
- 0,
- 1034
+ 24,
+ 120
],
"24": [
0,
- 1054
+ 120
]
},
- "circle-stroked": {
+ "roadblock": {
"12": [
- 0,
- 1080
+ 96,
+ 120
],
"18": [
- 0,
- 1094
+ 78,
+ 120
],
"24": [
- 0,
- 1114
+ 54,
+ 120
]
},
- "city": {
+ "ferry": {
"12": [
- 0,
- 1140
+ 150,
+ 120
],
"18": [
- 0,
- 1154
+ 132,
+ 120
],
"24": [
- 0,
- 1174
+ 108,
+ 120
+ ],
+ "line": [
+ 2240,
+ 25
]
},
- "college": {
+ "harbor": {
"12": [
- 0,
- 1200
+ 204,
+ 120
],
"18": [
- 0,
- 1214
+ 186,
+ 120
],
"24": [
- 0,
- 1234
+ 162,
+ 120
]
},
- "commercial": {
+ "bicycle": {
"12": [
- 0,
- 1260
+ 258,
+ 120
],
"18": [
- 0,
- 1274
+ 240,
+ 120
],
"24": [
- 0,
- 1294
+ 216,
+ 120
]
},
- "cricket": {
+ "park": {
"12": [
- 0,
- 1320
+ 42,
+ 144
],
"18": [
- 0,
- 1334
+ 24,
+ 144
],
"24": [
0,
- 1354
+ 144
]
},
- "cross": {
+ "park2": {
"12": [
- 0,
- 1380
+ 96,
+ 144
],
"18": [
- 0,
- 1394
+ 78,
+ 144
],
"24": [
- 0,
- 1414
+ 54,
+ 144
]
},
- "dam": {
+ "museum": {
"12": [
- 0,
- 1440
+ 150,
+ 144
],
"18": [
- 0,
- 1454
+ 132,
+ 144
],
"24": [
- 0,
- 1474
+ 108,
+ 144
]
},
- "danger": {
+ "lodging": {
"12": [
- 0,
- 1500
+ 204,
+ 144
],
"18": [
- 0,
- 1514
+ 186,
+ 144
],
"24": [
- 0,
- 1534
+ 162,
+ 144
]
},
- "disability": {
+ "monument": {
"12": [
- 0,
- 1560
+ 258,
+ 144
],
"18": [
- 0,
- 1574
+ 240,
+ 144
],
"24": [
- 0,
- 1594
+ 216,
+ 144
]
},
- "embassy": {
+ "zoo": {
"12": [
- 0,
- 1620
+ 42,
+ 168
],
"18": [
- 0,
- 1634
+ 24,
+ 168
],
"24": [
0,
- 1654
+ 168
]
},
- "emergency-telephone": {
+ "garden": {
"12": [
- 0,
- 1680
+ 96,
+ 168
],
"18": [
- 0,
- 1694
+ 78,
+ 168
],
"24": [
- 0,
- 1714
+ 54,
+ 168
]
},
- "farm": {
+ "campsite": {
"12": [
- 0,
- 1740
+ 150,
+ 168
],
"18": [
- 0,
- 1754
+ 132,
+ 168
],
"24": [
- 0,
- 1774
+ 108,
+ 168
]
},
- "fast-food": {
+ "theatre": {
"12": [
- 0,
- 1800
+ 204,
+ 168
],
"18": [
- 0,
- 1814
+ 186,
+ 168
],
"24": [
- 0,
- 1834
+ 162,
+ 168
]
},
- "ferry": {
+ "art-gallery": {
"12": [
- 0,
- 1860
+ 258,
+ 168
],
"18": [
- 0,
- 1874
+ 240,
+ 168
],
"24": [
- 0,
- 1894
- ],
- "line": [
- 2240,
- 25
+ 216,
+ 168
]
},
- "fire-station": {
+ "pitch": {
"12": [
- 0,
- 1920
+ 42,
+ 192
],
"18": [
- 0,
- 1934
+ 24,
+ 192
],
"24": [
0,
- 1954
+ 192
]
},
- "fuel": {
+ "soccer": {
"12": [
- 0,
- 1980
+ 96,
+ 192
],
"18": [
- 0,
- 1994
+ 78,
+ 192
],
"24": [
- 0,
- 2014
+ 54,
+ 192
]
},
- "garden": {
+ "america-football": {
"12": [
- 0,
- 2040
+ 150,
+ 192
],
"18": [
- 0,
- 2054
+ 132,
+ 192
],
"24": [
- 0,
- 2074
+ 108,
+ 192
]
},
- "golf": {
+ "tennis": {
"12": [
- 0,
- 2100
+ 204,
+ 192
],
"18": [
- 0,
- 2114
+ 186,
+ 192
],
"24": [
- 0,
- 2134
+ 162,
+ 192
]
},
- "grocery": {
+ "basketball": {
"12": [
- 0,
- 2160
+ 258,
+ 192
],
"18": [
- 0,
- 2174
+ 240,
+ 192
],
"24": [
- 0,
- 2194
+ 216,
+ 192
]
},
- "harbor": {
+ "baseball": {
"12": [
- 0,
- 2220
+ 42,
+ 216
],
"18": [
- 0,
- 2234
+ 24,
+ 216
],
"24": [
0,
- 2254
+ 216
]
},
- "heliport": {
+ "golf": {
"12": [
- 0,
- 2280
+ 96,
+ 216
],
"18": [
- 0,
- 2294
+ 78,
+ 216
],
"24": [
- 0,
- 2314
+ 54,
+ 216
]
},
- "hospital": {
+ "swimming": {
"12": [
- 0,
- 2340
+ 150,
+ 216
],
"18": [
- 0,
- 2354
+ 132,
+ 216
],
"24": [
- 0,
- 2374
+ 108,
+ 216
]
},
- "industrial": {
+ "cricket": {
"12": [
- 0,
- 2400
+ 204,
+ 216
],
"18": [
- 0,
- 2414
+ 186,
+ 216
],
"24": [
- 0,
- 2434
+ 162,
+ 216
]
},
- "land-use": {
+ "skiing": {
"12": [
- 0,
- 2460
+ 258,
+ 216
],
"18": [
- 0,
- 2474
+ 240,
+ 216
],
"24": [
- 0,
- 2494
+ 216,
+ 216
]
},
- "library": {
+ "school": {
"12": [
- 0,
- 2520
+ 42,
+ 240
],
"18": [
- 0,
- 2534
+ 24,
+ 240
],
"24": [
0,
- 2554
+ 240
]
},
- "lodging": {
+ "college": {
"12": [
- 0,
- 2580
+ 96,
+ 240
],
"18": [
- 0,
- 2594
+ 78,
+ 240
],
"24": [
- 0,
- 2614
+ 54,
+ 240
]
},
- "logging": {
+ "library": {
"12": [
- 0,
- 2640
+ 150,
+ 240
],
"18": [
- 0,
- 2654
+ 132,
+ 240
],
"24": [
- 0,
- 2674
+ 108,
+ 240
]
},
- "marker": {
+ "post": {
"12": [
- 0,
- 2700
+ 204,
+ 240
],
"18": [
- 0,
- 2714
+ 186,
+ 240
],
"24": [
- 0,
- 2734
+ 162,
+ 240
]
},
- "marker-stroked": {
+ "fire-station": {
"12": [
- 0,
- 2760
+ 258,
+ 240
],
"18": [
- 0,
- 2774
+ 240,
+ 240
],
"24": [
- 0,
- 2794
+ 216,
+ 240
]
},
- "monument": {
+ "town-hall": {
"12": [
- 0,
- 2820
+ 42,
+ 264
],
"18": [
- 0,
- 2834
+ 24,
+ 264
],
"24": [
0,
- 2854
+ 264
]
},
- "museum": {
+ "police": {
"12": [
- 0,
- 2880
+ 96,
+ 264
],
"18": [
- 0,
- 2894
+ 78,
+ 264
],
"24": [
- 0,
- 2914
+ 54,
+ 264
]
},
- "music": {
+ "prison": {
"12": [
- 0,
- 2940
+ 150,
+ 264
],
"18": [
- 0,
- 2954
+ 132,
+ 264
],
"24": [
- 0,
- 2974
+ 108,
+ 264
]
},
- "oil-well": {
+ "embassy": {
"12": [
- 0,
- 3000
+ 204,
+ 264
],
"18": [
- 0,
- 3014
+ 186,
+ 264
],
"24": [
- 0,
- 3034
+ 162,
+ 264
]
},
- "park": {
+ "beer": {
"12": [
- 0,
- 3060
+ 258,
+ 264
],
"18": [
- 0,
- 3074
+ 240,
+ 264
],
"24": [
- 0,
- 3094
+ 216,
+ 264
]
},
- "park2": {
+ "restaurant": {
"12": [
- 0,
- 3120
+ 42,
+ 288
],
"18": [
- 0,
- 3134
+ 24,
+ 288
],
"24": [
0,
- 3154
+ 288
]
},
- "parking": {
+ "cafe": {
"12": [
- 0,
- 3180
+ 96,
+ 288
],
"18": [
- 0,
- 3194
+ 78,
+ 288
],
"24": [
- 0,
- 3214
+ 54,
+ 288
]
},
- "parking-garage": {
+ "shop": {
"12": [
- 0,
- 3240
+ 150,
+ 288
],
"18": [
- 0,
- 3254
+ 132,
+ 288
],
"24": [
- 0,
- 3274
+ 108,
+ 288
]
},
- "pharmacy": {
+ "fast-food": {
"12": [
- 0,
- 3300
+ 204,
+ 288
],
"18": [
- 0,
- 3314
+ 186,
+ 288
],
"24": [
- 0,
- 3334
+ 162,
+ 288
]
},
- "pitch": {
+ "bar": {
"12": [
- 0,
- 3360
+ 258,
+ 288
],
"18": [
- 0,
- 3374
+ 240,
+ 288
],
"24": [
- 0,
- 3394
+ 216,
+ 288
]
},
- "place-of-worship": {
+ "bank": {
"12": [
- 0,
- 3420
+ 42,
+ 312
],
"18": [
- 0,
- 3434
+ 24,
+ 312
],
"24": [
0,
- 3454
+ 312
]
},
- "police": {
+ "grocery": {
"12": [
- 0,
- 3480
+ 96,
+ 312
],
"18": [
- 0,
- 3494
+ 78,
+ 312
],
"24": [
- 0,
- 3514
+ 54,
+ 312
]
},
- "post": {
+ "cinema": {
"12": [
- 0,
- 3540
+ 150,
+ 312
],
"18": [
- 0,
- 3554
+ 132,
+ 312
],
"24": [
- 0,
- 3574
+ 108,
+ 312
]
},
- "prison": {
+ "pharmacy": {
"12": [
- 0,
- 3600
+ 204,
+ 312
],
"18": [
- 0,
- 3614
+ 186,
+ 312
],
"24": [
- 0,
- 3634
+ 162,
+ 312
]
},
- "rail": {
+ "hospital": {
"12": [
- 0,
- 3660
+ 258,
+ 312
],
"18": [
- 0,
- 3674
+ 240,
+ 312
],
"24": [
- 0,
- 3694
+ 216,
+ 312
]
},
- "rail-above": {
+ "danger": {
"12": [
- 0,
- 3720
+ 42,
+ 336
],
"18": [
- 0,
- 3734
+ 24,
+ 336
],
"24": [
0,
- 3754
+ 336
]
},
- "rail-underground": {
+ "industrial": {
"12": [
- 0,
- 3780
+ 96,
+ 336
],
"18": [
- 0,
- 3794
+ 78,
+ 336
],
"24": [
- 0,
- 3814
+ 54,
+ 336
]
},
- "religious-christian": {
+ "warehouse": {
"12": [
- 0,
- 3840
+ 150,
+ 336
],
"18": [
- 0,
- 3854
+ 132,
+ 336
],
"24": [
- 0,
- 3874
+ 108,
+ 336
]
},
- "religious-jewish": {
+ "commercial": {
"12": [
- 0,
- 3900
+ 204,
+ 336
],
"18": [
- 0,
- 3914
+ 186,
+ 336
],
"24": [
- 0,
- 3934
+ 162,
+ 336
]
},
- "religious-muslim": {
+ "building": {
"12": [
- 0,
- 3960
+ 258,
+ 336
],
"18": [
- 0,
- 3974
+ 240,
+ 336
],
"24": [
- 0,
- 3994
+ 216,
+ 336
]
},
- "restaurant": {
+ "place-of-worship": {
"12": [
- 0,
- 4020
+ 42,
+ 360
],
"18": [
- 0,
- 4034
+ 24,
+ 360
],
"24": [
0,
- 4054
+ 360
]
},
- "roadblock": {
+ "alcohol-shop": {
"12": [
- 0,
- 4080
+ 96,
+ 360
],
"18": [
- 0,
- 4094
+ 78,
+ 360
],
"24": [
- 0,
- 4114
+ 54,
+ 360
]
},
- "school": {
+ "logging": {
"12": [
- 0,
- 4140
+ 150,
+ 360
],
"18": [
- 0,
- 4154
+ 132,
+ 360
],
"24": [
- 0,
- 4174
+ 108,
+ 360
]
},
- "shop": {
+ "oil-well": {
"12": [
- 0,
- 4200
+ 204,
+ 360
],
"18": [
- 0,
- 4214
+ 186,
+ 360
],
"24": [
- 0,
- 4234
+ 162,
+ 360
]
},
- "skiing": {
+ "slaughterhouse": {
"12": [
- 0,
- 4260
+ 258,
+ 360
],
"18": [
- 0,
- 4274
+ 240,
+ 360
],
"24": [
- 0,
- 4294
+ 216,
+ 360
]
},
- "slaughterhouse": {
+ "dam": {
"12": [
- 0,
- 4320
+ 42,
+ 384
],
"18": [
- 0,
- 4334
+ 24,
+ 384
],
"24": [
0,
- 4354
+ 384
]
},
- "soccer": {
+ "water": {
"12": [
- 0,
- 4380
+ 96,
+ 384
],
"18": [
- 0,
- 4394
+ 78,
+ 384
],
"24": [
- 0,
- 4414
+ 54,
+ 384
]
},
- "square": {
+ "wetland": {
"12": [
- 0,
- 4440
+ 150,
+ 384
],
"18": [
- 0,
- 4454
+ 132,
+ 384
],
"24": [
- 0,
- 4474
+ 108,
+ 384
]
},
- "square-stroked": {
+ "disability": {
"12": [
- 0,
- 4500
+ 204,
+ 384
],
"18": [
- 0,
- 4514
+ 186,
+ 384
],
"24": [
- 0,
- 4534
+ 162,
+ 384
]
},
- "star": {
+ "telephone": {
"12": [
- 0,
- 4560
+ 258,
+ 384
],
"18": [
- 0,
- 4574
+ 240,
+ 384
],
"24": [
- 0,
- 4594
+ 216,
+ 384
]
},
- "star-stroked": {
+ "emergency-telephone": {
"12": [
- 0,
- 4620
+ 42,
+ 408
],
"18": [
- 0,
- 4634
+ 24,
+ 408
],
"24": [
0,
- 4654
+ 408
]
},
- "swimming": {
+ "toilets": {
"12": [
- 0,
- 4680
+ 96,
+ 408
],
"18": [
- 0,
- 4694
+ 78,
+ 408
],
"24": [
- 0,
- 4714
+ 54,
+ 408
]
},
- "telephone": {
+ "waste-basket": {
"12": [
- 0,
- 4740
+ 150,
+ 408
],
"18": [
- 0,
- 4754
+ 132,
+ 408
],
"24": [
- 0,
- 4774
+ 108,
+ 408
]
},
- "tennis": {
+ "music": {
"12": [
- 0,
- 4800
+ 204,
+ 408
],
"18": [
- 0,
- 4814
+ 186,
+ 408
],
"24": [
- 0,
- 4834
+ 162,
+ 408
]
},
- "theatre": {
+ "land-use": {
"12": [
- 0,
- 4860
+ 258,
+ 408
],
"18": [
- 0,
- 4874
+ 240,
+ 408
],
"24": [
- 0,
- 4894
+ 216,
+ 408
]
},
- "toilets": {
+ "city": {
"12": [
- 0,
- 4920
+ 42,
+ 432
],
"18": [
- 0,
- 4934
+ 24,
+ 432
],
"24": [
0,
- 4954
+ 432
]
},
"town": {
"12": [
- 0,
- 4980
+ 96,
+ 432
],
"18": [
- 0,
- 4994
+ 78,
+ 432
],
"24": [
- 0,
- 5014
+ 54,
+ 432
]
},
- "town-hall": {
+ "village": {
"12": [
- 0,
- 5040
+ 150,
+ 432
],
"18": [
- 0,
- 5054
+ 132,
+ 432
],
"24": [
- 0,
- 5074
+ 108,
+ 432
]
},
- "triangle": {
+ "farm": {
"12": [
- 0,
- 5100
+ 204,
+ 432
],
"18": [
- 0,
- 5114
+ 186,
+ 432
],
"24": [
- 0,
- 5134
+ 162,
+ 432
]
},
- "triangle-stroked": {
+ "bakery": {
"12": [
- 0,
- 5160
+ 258,
+ 432
],
"18": [
- 0,
- 5174
+ 240,
+ 432
],
"24": [
- 0,
- 5194
+ 216,
+ 432
]
},
- "village": {
+ "dog-park": {
"12": [
- 0,
- 5220
+ 42,
+ 456
],
"18": [
- 0,
- 5234
+ 24,
+ 456
],
"24": [
0,
- 5254
+ 456
]
},
- "warehouse": {
+ "lighthouse": {
"12": [
- 0,
- 5280
+ 96,
+ 456
],
"18": [
- 0,
- 5294
+ 78,
+ 456
],
"24": [
- 0,
- 5314
+ 54,
+ 456
]
},
- "waste-basket": {
+ "clothing-store": {
"12": [
- 0,
- 5340
+ 150,
+ 456
],
"18": [
- 0,
- 5354
+ 132,
+ 456
],
"24": [
- 0,
- 5374
+ 108,
+ 456
]
},
- "water": {
+ "london-underground": {
"12": [
- 0,
- 5400
+ 204,
+ 456
],
"18": [
- 0,
- 5414
+ 186,
+ 456
],
"24": [
- 0,
- 5434
+ 162,
+ 456
]
},
- "wetland": {
+ "minefield": {
"12": [
- 0,
- 5460
+ 258,
+ 456
],
"18": [
- 0,
- 5474
+ 240,
+ 456
],
"24": [
- 0,
- 5494
+ 216,
+ 456
]
},
- "zoo": {
+ "camera": {
"12": [
- 0,
- 5520
+ 42,
+ 480
],
"18": [
- 0,
- 5534
+ 24,
+ 480
],
"24": [
0,
- 5554
+ 480
]
},
"highway-motorway": {
200,
140
],
+ "icon-operation-continue": [
+ 220,
+ 140
+ ],
"icon-operation-disabled-delete": [
0,
160
"icon-operation-disabled-simplify": [
200,
160
+ ],
+ "icon-operation-disabled-continue": [
+ 220,
+ 160
]
},
"locales": [
"af",
"ar",
+ "ar-AA",
"ast",
+ "bn",
"bs",
"bg-BG",
"ca",
"zh",
"zh-CN",
+ "zh-CN.GB2312",
"zh-TW",
"hr",
"cs",
"da",
"nl",
+ "en-GB",
"et",
"fi",
"fr",
"lv",
"lt",
"no",
+ "nn",
+ "fa",
"pl",
"pt",
"pt-BR",
"ru",
+ "sc",
"sr",
"sr-RS",
"sk",
}
},
"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."
"not_closed": "This can't be made circular because it's not a loop."
},
"orthogonalize": {
- "title": "Orthogonalize",
- "description": "Square these corners.",
- "key": "Q",
+ "title": "Square",
+ "description": {
+ "line": "Square the corners of this line.",
+ "area": "Square the corners of this area."
+ },
+ "key": "S",
"annotation": {
"line": "Squared the corners of a line.",
"area": "Squared the corners of an area."
},
- "not_closed": "This can't be made square because it's not a loop."
+ "not_squarish": "This can't be made square because it is not squarish."
+ },
+ "straighten": {
+ "title": "Straighten",
+ "description": "Straighten this line.",
+ "key": "S",
+ "annotation": "Straightened a line.",
+ "too_bendy": "This can't be straightened because it bends too much."
},
"delete": {
"title": "Delete",
},
"rotate": {
"title": "Rotate",
- "description": "Rotate this object around its centre point.",
+ "description": "Rotate this object around its center point.",
"key": "R",
"annotation": {
"line": "Rotated a line.",
"back_tooltip": "Change feature",
"remove": "Remove",
"search": "Search",
+ "multiselect": "Selected items",
"unknown": "Unknown",
"incomplete": "<not downloaded>",
"feature_list": "Search features",
- "edit": "Edit feature"
+ "edit": "Edit feature",
+ "check": {
+ "yes": "Yes",
+ "no": "No"
+ },
+ "none": "None"
},
"background": {
"title": "Background",
"description": "Background settings",
"percent_brightness": "{opacity}% brightness",
+ "none": "None",
"custom": "Custom",
"custom_prompt": "Enter a tile template. Valid tokens are {z}, {x}, {y} for Z/X/Y scheme and {u} for quadtile scheme.",
- "fix_misalignment": "Fix misalignment",
+ "fix_misalignment": "Fix alignment",
"reset": "reset"
},
"restore": {
"facebook": "Share on Facebook",
"twitter": "Share on Twitter",
"google": "Share on Google+",
- "help_html": "Your changes should appear in the \"Standard\" layer in a few minutes. Other layers, and certain features, may take longer\n(<a href='https://help.openstreetmap.org/questions/4705/why-havent-my-changes-appeared-on-the-map'>details</a>).\n"
+ "help_html": "Your changes should appear in the \"Standard\" layer in a few minutes. Other layers, and certain features, may take longer\n(<a href='https://help.openstreetmap.org/questions/4705/why-havent-my-changes-appeared-on-the-map' target='_blank'>details</a>).\n"
},
"confirm": {
"okay": "Okay"
"cannot_zoom": "Cannot zoom out further in current mode.",
"gpx": {
"local_layer": "Local GPX file",
- "drag_drop": "Drag and drop a .gpx file on the page"
+ "drag_drop": "Drag and drop a .gpx file on the page, or click the button to the right to browse",
+ "zoom": "Zoom to GPX track",
+ "browse": "Browse for a .gpx file"
},
"help": {
"title": "Help",
"help": "# Help\n\nThis is an editor for [OpenStreetMap](http://www.openstreetmap.org/), the\nfree and editable map of the world. You can use it to add and update\ndata in your area, making an open-source and open-data map of the world\nbetter for everyone.\n\nEdits that you make on this map will be visible to everyone who uses\nOpenStreetMap. In order to make an edit, you'll need a\n[free OpenStreetMap account](https://www.openstreetmap.org/user/new).\n\nThe [iD editor](http://ideditor.com/) is a collaborative project with [source\ncode available on GitHub](https://github.com/systemed/iD).\n",
- "editing_saving": "# Editing & Saving\n\nThis editor is designed to work primarily online, and you're accessing\nit through a website right now.\n\n### Selecting Features\n\nTo select a map feature, like a road or point of interest, click\non it on the map. This will highlight the selected feature, open a panel with\ndetails about it, and show a menu of things you can do with the feature.\n\nMultiple features can be selected by holding the 'Shift' key, clicking,\nand dragging on the map. This will select all features within the box\nthat's drawn, allowing you to do things with several features at once.\n\n### Saving Edits\n\nWhen you make changes like editing roads, buildings, and places, these are\nstored locally until you save them to the server. Don't worry if you make\na mistake - you can undo changes by clicking the undo button, and redo\nchanges by clicking the redo button.\n\nClick 'Save' to finish a group of edits - for instance, if you've completed\nan area of town and would like to start on a new area. You'll have a chance\nto review what you've done, and the editor supplies helpful suggestions\nand warnings if something doesn't seem right about the changes.\n\nIf everything looks good, you can enter a short comment explaining the change\nyou made, and click 'Save' again to post the changes\nto [OpenStreetMap.org](http://www.openstreetmap.org/), where they are visible\nto all other users and available for others to build and improve upon.\n\nIf you can't finish your edits in one sitting, you can leave the editor\nwindow and come back (on the same browser and computer), and the\neditor application will offer to restore your work.\n",
+ "editing_saving": "# Editing & Saving\n\nThis editor is designed to work primarily online, and you're accessing\nit through a website right now.\n\n### Selecting Features\n\nTo select a map feature, like a road or point of interest, click\non it on the map. This will highlight the selected feature, open a panel with\ndetails about it, and show a menu of things you can do with the feature.\n\nTo select multiple features, hold down the 'Shift' key. Then either click\non the features you want to select, or drag on the map to draw a rectangle.\nThis will draw a box and select all the points within it.\n\n### Saving Edits\n\nWhen you make changes like editing roads, buildings, and places, these are\nstored locally until you save them to the server. Don't worry if you make\na mistake - you can undo changes by clicking the undo button, and redo\nchanges by clicking the redo button.\n\nClick 'Save' to finish a group of edits - for instance, if you've completed\nan area of town and would like to start on a new area. You'll have a chance\nto review what you've done, and the editor supplies helpful suggestions\nand warnings if something doesn't seem right about the changes.\n\nIf everything looks good, you can enter a short comment explaining the change\nyou made, and click 'Save' again to post the changes\nto [OpenStreetMap.org](http://www.openstreetmap.org/), where they are visible\nto all other users and available for others to build and improve upon.\n\nIf you can't finish your edits in one sitting, you can leave the editor\nwindow and come back (on the same browser and computer), and the\neditor application will offer to restore your work.\n",
"roads": "# Roads\n\nYou can create, fix, and delete roads with this editor. Roads can be all\nkinds: paths, highways, trails, cycleways, and more - any often-crossed\nsegment should be mappable.\n\n### Selecting\n\nClick on a road to select it. An outline should become visible, along\nwith a small tools menu on the map and a sidebar showing more information\nabout the road.\n\n### Modifying\n\nOften you'll see roads that aren't aligned to the imagery behind them\nor to a GPS track. You can adjust these roads so they are in the correct\nplace.\n\nFirst click on the road you want to change. This will highlight it and show\ncontrol points along it that you can drag to better locations. If\nyou want to add new control points for more detail, double-click a part\nof the road without a node, and one will be added.\n\nIf the road connects to another road, but doesn't properly connect on\nthe map, you can drag one of its control points onto the other road in\norder to join them. Having roads connect is important for the map\nand essential for providing driving directions.\n\nYou can also click the 'Move' tool or press the `M` shortcut key to move the entire road at\none time, and then click again to save that movement.\n\n### Deleting\n\nIf a road is entirely incorrect - you can see that it doesn't exist in satellite\nimagery and ideally have confirmed locally that it's not present - you can delete\nit, which removes it from the map. Be cautious when deleting features -\nlike any other edit, the results are seen by everyone and satellite imagery\nis often out of date, so the road could simply be newly built.\n\nYou can delete a road by clicking on it to select it, then clicking the\ntrash can icon or pressing the 'Delete' key.\n\n### Creating\n\nFound somewhere there should be a road but there isn't? Click the 'Line'\nicon in the top-left of the editor or press the shortcut key `2` to start drawing\na line.\n\nClick on the start of the road on the map to start drawing. If the road\nbranches off from an existing road, start by clicking on the place where they connect.\n\nThen click on points along the road so that it follows the right path, according\nto satellite imagery or GPS. If the road you are drawing crosses another road, connect\nit by clicking on the intersection point. When you're done drawing, double-click\nor press 'Return' or 'Enter' on your keyboard.\n",
- "gps": "# GPS\n\nGPS data is the most trusted source of data for OpenStreetMap. This editor\nsupports local traces - `.gpx` files on your local computer. You can collect\nthis kind of GPS trace with a number of smartphone applications as well as\npersonal GPS hardware.\n\nFor information on how to perform a GPS survey, read\n[Surveying with a GPS](http://learnosm.org/en/beginner/using-gps/).\n\nTo use a GPX track for mapping, drag and drop the GPX file onto the map\neditor. If it's recognized, it will be added to the map as a bright green\nline. Click on the 'Background Settings' menu on the left side to enable,\ndisable, or zoom to this new GPX-powered layer.\n\nThe GPX track isn't directly uploaded to OpenStreetMap - the best way to\nuse it is to draw on the map, using it as a guide for the new features that\nyou add.\n",
- "imagery": "# Imagery\n\nAerial imagery is an important resource for mapping. A combination of\nairplane flyovers, satellite views, and freely-compiled sources are available\nin the editor under the 'Background Settings' menu on the left.\n\nBy default a [Bing Maps](http://www.bing.com/maps/) satellite layer is\npresented in the editor, but as you pan and zoom the map to new geographical\nareas, new sources will become available. Some countries, like the United\nStates, France, and Denmark have very high-quality imagery available for some areas.\n\nImagery is sometimes offset from the map data because of a mistake on the\nimagery provider's side. If you see a lot of roads shifted from the background,\ndon't immediately move them all to match the background. Instead you can adjust\nthe imagery so that it matches the existing data by clicking 'Fix alignment' at\nthe bottom of the Background Settings UI.\n",
+ "gps": "# GPS\n\nGPS data is the most trusted source of data for OpenStreetMap. This editor\nsupports local traces - `.gpx` files on your local computer. You can collect\nthis kind of GPS trace with a number of smartphone applications as well as\npersonal GPS hardware.\n\nFor information on how to perform a GPS survey, read\n[Surveying with a GPS](http://learnosm.org/en/beginner/using-gps/).\n\nTo use a GPX track for mapping, drag and drop the GPX file onto the map\neditor. If it's recognized, it will be added to the map as a bright green\nline. Click on the 'Background Settings' menu on the right side to enable,\ndisable, or zoom to this new GPX-powered layer.\n\nThe GPX track isn't directly uploaded to OpenStreetMap - the best way to\nuse it is to draw on the map, using it as a guide for the new features that\nyou add, and also to [upload it to OpenStreetMap](http://www.openstreetmap.org/trace/create)\nfor other users to use.\n",
+ "imagery": "# Imagery\n\nAerial imagery is an important resource for mapping. A combination of\nairplane flyovers, satellite views, and freely-compiled sources are available\nin the editor under the 'Background Settings' menu on the right.\n\nBy default a [Bing Maps](http://www.bing.com/maps/) satellite layer is\npresented in the editor, but as you pan and zoom the map to new geographical\nareas, new sources will become available. Some countries, like the United\nStates, France, and Denmark have very high-quality imagery available for some areas.\n\nImagery is sometimes offset from the map data because of a mistake on the\nimagery provider's side. If you see a lot of roads shifted from the background,\ndon't immediately move them all to match the background. Instead you can adjust\nthe imagery so that it matches the existing data by clicking 'Fix alignment' at\nthe bottom of the Background Settings UI.\n",
"addresses": "# Addresses\n\nAddresses are some of the most useful information for the map.\n\nAlthough addresses are often represented as parts of streets, in OpenStreetMap\nthey're recorded as attributes of buildings and places along streets.\n\nYou can add address information to places mapped as building outlines\nas well as those mapped as single points. The optimal source of address\ndata is from an on-the-ground survey or personal knowledge - as with any\nother feature, copying from commercial sources like Google Maps is strictly\nforbidden.\n",
- "inspector": "# Using the Inspector\n\nThe inspector is the user interface element on the right-hand side of the\npage that appears when a feature is selected and allows you to edit its details.\n\n### Selecting a Feature Type\n\nAfter you add a point, line, or area, you can choose what type of feature it\nis, like whether it's a highway or residential road, supermarket or cafe.\nThe inspector will display buttons for common feature types, and you can\nfind others by typing what you're looking for in the search box.\n\nClick the 'i' in the bottom-right-hand corner of a feature type button to\nlearn more about it. Click a button to choose that type.\n\n### Using Forms and Editing Tags\n\nAfter you choose a feature type, or when you select a feature that already\nhas a type assigned, the inspector will display fields with details about\nthe feature like its name and address.\n\nBelow the fields you see, you can click icons to add other details,\nlike [Wikipedia](http://www.wikipedia.org/) information, wheelchair\naccess, and more.\n\nAt the bottom of the inspector, click 'Additional tags' to add arbitrary\nother tags to the element. [Taginfo](http://taginfo.openstreetmap.org/) is a\ngreat resource for learn more about popular tag combinations.\n\nChanges you make in the inspector are automatically applied to the map.\nYou can undo them at any time by clicking the 'Undo' button.\n\n### Closing the Inspector\n\nYou can close the inspector by clicking the close button in the top-right,\npressing the 'Escape' key, or clicking on the map.\n",
+ "inspector": "# Using the Inspector\n\nThe inspector is the section on the left side of the page that allows you to\nedit the details of the selected feature.\n\n### Selecting a Feature Type\n\nAfter you add a point, line, or area, you can choose what type of feature it\nis, like whether it's a highway or residential road, supermarket or cafe.\nThe inspector will display buttons for common feature types, and you can\nfind others by typing what you're looking for in the search box.\n\nClick the 'i' in the bottom-right-hand corner of a feature type button to\nlearn more about it. Click a button to choose that type.\n\n### Using Forms and Editing Tags\n\nAfter you choose a feature type, or when you select a feature that already\nhas a type assigned, the inspector will display fields with details about\nthe feature like its name and address.\n\nBelow the fields you see, you can click icons to add other details,\nlike [Wikipedia](http://www.wikipedia.org/) information, wheelchair\naccess, and more.\n\nAt the bottom of the inspector, click 'Additional tags' to add arbitrary\nother tags to the element. [Taginfo](http://taginfo.openstreetmap.org/) is a\ngreat resource for learn more about popular tag combinations.\n\nChanges you make in the inspector are automatically applied to the map.\nYou can undo them at any time by clicking the 'Undo' button.\n",
"buildings": "# Buildings\n\nOpenStreetMap is the world's largest database of buildings. You can create\nand improve this database.\n\n### Selecting\n\nYou can select a building by clicking on its border. This will highlight the\nbuilding and open a small tools menu and a sidebar showing more information\nabout the building.\n\n### Modifying\n\nSometimes buildings are incorrectly placed or have incorrect tags.\n\nTo move an entire building, select it, then click the 'Move' tool. Move your\nmouse to shift the building, and click when it's correctly placed.\n\nTo fix the specific shape of a building, click and drag the nodes that form\nits border into better places.\n\n### Creating\n\nOne of the main questions around adding buildings to the map is that\nOpenStreetMap records buildings both as shapes and points. The rule of thumb\nis to _map a building as a shape whenever possible_, and map companies, homes,\namenities, and other things that operate out of buildings as points placed\nwithin the building shape.\n\nStart drawing a building as a shape by clicking the 'Area' button in the top\nleft of the interface, and end it either by pressing 'Return' on your keyboard\nor clicking on the first node drawn to close the shape.\n\n### Deleting\n\nIf a building is entirely incorrect - you can see that it doesn't exist in satellite\nimagery and ideally have confirmed locally that it's not present - you can delete\nit, which removes it from the map. Be cautious when deleting features -\nlike any other edit, the results are seen by everyone and satellite imagery\nis often out of date, so the building could simply be newly built.\n\nYou can delete a building by clicking on it to select it, then clicking the\ntrash can icon or pressing the 'Delete' key.\n",
"relations": "# Relations\n\nA relation is a special type of feature in OpenStreetMap that groups together\nother features. For example, two common types of relations are *route relations*,\nwhich group together sections of road that belong to a specific freeway or\nhighway, and *multipolygons*, which group together several lines that define\na complex area (one with several pieces or holes in it like a donut).\n\nThe group of features in a relation are called *members*. In the sidebar, you can\nsee which relations a feature is a member of, and click on a relation there\nto select the it. When the relation is selected, you can see all of its\nmembers listed in the sidebar and highlighted on the map.\n\nFor the most part, iD will take care of maintaining relations automatically\nwhile you edit. The main thing you should be aware of is that if you delete a\nsection of road to redraw it more accurately, you should make sure that the\nnew section is a member of the same relations as the original.\n\n## Editing Relations\n\nIf you want to edit relations, here are the basics.\n\nTo add a feature to a relation, select the feature, click the \"+\" button in the\n\"All relations\" section of the sidebar, and select or type the name of the relation.\n\nTo create a new relation, select the first feature that should be a member,\nclick the \"+\" button in the \"All relations\" section, and select \"New relation...\".\n\nTo remove a feature from a relation, select the feature and click the trash\nbutton next to the relation you want to remove it from.\n\nYou can create multipolygons with holes using the \"Merge\" tool. Draw two areas (inner\nand outer), hold the Shift key and click on each of them to select them both, and then\nclick the \"Merge\" (+) button.\n"
},
},
"lines": {
"title": "Lines",
- "add": "Lines are used to represent features such as roads, railways and rivers. **Click the Line button to add a new line.**",
+ "add": "Lines are used to represent features such as roads, railroads and rivers. **Click the Line button to add a new line.**",
"start": "**Start the line by clicking on the end of the road.**",
"intersect": "Click to add more nodes to the line. You can drag the map while drawing if necessary. Roads, and many other types of lines, are part of a larger network. It is important for these lines to be connected properly in order for routing applications to work. **Click on Flower Street, to create an intersection connecting the two lines.**",
"finish": "Lines can be finished by clicking on the last node again. **Finish drawing the road.**",
"road": "**Select Road from the list**",
"residential": "There are different types of roads, the most common of which is Residential. **Choose the Residential road type**",
"describe": "**Name the road and close the feature editor.**",
- "restart": "The road needs to intersect Flower Street."
+ "restart": "The road needs to intersect Flower Street.",
+ "wrong_preset": "You didn't select the Residential road type. **Click here to choose again**"
},
"startediting": {
"title": "Start Editing",
}
}
},
+ "access_toilets": {
+ "label": "Access"
+ },
"address": {
"label": "Address",
"placeholders": {
"atm": {
"label": "ATM"
},
+ "backrest": {
+ "label": "Backrest"
+ },
"barrier": {
"label": "Type"
},
"label": "Levels",
"placeholder": "2, 4, 6..."
},
+ "lit": {
+ "label": "Lit"
+ },
"location": {
"label": "Location"
},
"trail_visibility": {
"label": "Trail Visibility"
},
+ "vending": {
+ "label": "Type of Goods"
+ },
"water": {
"label": "Type"
},
"name": "Amenity",
"terms": ""
},
+ "amenity/arts_centre": {
+ "name": "Arts Center",
+ "terms": "arts,arts centre"
+ },
"amenity/atm": {
"name": "ATM",
"terms": ""
"name": "Bicycle Rental",
"terms": ""
},
+ "amenity/boat_rental": {
+ "name": "Boat Rental",
+ "terms": ""
+ },
"amenity/cafe": {
"name": "Cafe",
"terms": "coffee,tea,coffee shop"
},
"amenity/fuel": {
"name": "Gas Station",
- "terms": ""
+ "terms": "petrol,fuel,propane,diesel,lng,cng,biodiesel"
},
"amenity/grave_yard": {
"name": "Graveyard",
},
"amenity/ranger_station": {
"name": "Ranger Station",
- "terms": "visitor center,permit center,backcountry office"
+ "terms": "visitor center,visitor centre,permit center,permit centre,backcountry office"
},
"amenity/restaurant": {
"name": "Restaurant",
- "terms": "bar,cafeteria,café,canteen,chophouse,coffee shop,diner,dining room,dive*,doughtnut shop,drive-in,eatery,eating house,eating place,fast-food place,greasy spoon,grill,hamburger stand,hashery,hideaway,hotdog stand,inn,joint*,luncheonette,lunchroom,night club,outlet*,pizzeria,saloon,soda fountain,watering hole"
+ "terms": "bar,cafeteria,café,canteen,chophouse,coffee shop,diner,dining room,dive*,doughtnut shop,drive-in,eatery,eating house,eating place,fast-food place,fish and chips,greasy spoon,grill,hamburger stand,hashery,hideaway,hotdog stand,inn,joint*,luncheonette,lunchroom,night club,outlet*,pizzeria,saloon,soda fountain,watering hole"
},
"amenity/school": {
"name": "School",
},
"amenity/townhall": {
"name": "Town Hall",
- "terms": "village hall,city government,courthouse,municipal building,municipal center"
+ "terms": "village hall,city government,courthouse,municipal building,municipal center,municipal centre"
},
"amenity/university": {
"name": "University",
"terms": "college"
},
+ "amenity/vending_machine": {
+ "name": "Vending Machine",
+ "terms": ""
+ },
"amenity/waste_basket": {
"name": "Waste Basket",
"terms": "rubbish bin,litter bin,trash can,garbage can"
"name": "Steps",
"terms": "stairs,staircase"
},
+ "highway/stop": {
+ "name": "Stop Sign",
+ "terms": "stop sign"
+ },
"highway/tertiary": {
"name": "Tertiary Road",
"terms": ""
"name": "Leisure",
"terms": ""
},
+ "leisure/common": {
+ "name": "Common",
+ "terms": "open space"
+ },
"leisure/dog_park": {
"name": "Dog Park",
"terms": ""
"name": "Basketball Court",
"terms": ""
},
+ "leisure/pitch/skateboard": {
+ "name": "Skate Park",
+ "terms": ""
+ },
"leisure/pitch/soccer": {
"name": "Soccer Field",
"terms": ""
"name": "Slipway",
"terms": ""
},
+ "leisure/sports_center": {
+ "name": "Sports Center",
+ "terms": "gym"
+ },
"leisure/stadium": {
"name": "Stadium",
"terms": ""
"name": "Lighthouse",
"terms": ""
},
+ "man_made/observation": {
+ "name": "Observation Tower",
+ "terms": "lookout tower,fire tower"
+ },
"man_made/pier": {
"name": "Pier",
"terms": ""
"name": "Coastline",
"terms": "shore"
},
+ "natural/fell": {
+ "name": "Fell",
+ "terms": ""
+ },
"natural/glacier": {
"name": "Glacier",
"terms": ""
"name": "Peak",
"terms": "acme,aiguille,alp,climax,crest,crown,hill,mount,mountain,pinnacle,summit,tip,top"
},
+ "natural/scree": {
+ "name": "Scree",
+ "terms": "loose rocks"
+ },
"natural/scrub": {
"name": "Scrub",
"terms": ""
"name": "Disused Railway",
"terms": ""
},
+ "railway/halt": {
+ "name": "Railway Halt",
+ "terms": "break,interrupt,rest,wait,interruption"
+ },
"railway/level_crossing": {
"name": "Level Crossing",
"terms": "crossing,railroad crossing,railway crossing,grade crossing,road through railroad,train crossing"
},
"shop/beauty": {
"name": "Beauty Shop",
- "terms": ""
+ "terms": "nail spa,spa,salon,tanning"
},
"shop/beverages": {
"name": "Beverage Store",
},
"shop/garden_centre": {
"name": "Garden Center",
- "terms": ""
+ "terms": "garden centre"
},
"shop/gift": {
"name": "Gift Shop",
"name": "Laundry",
"terms": ""
},
+ "shop/locksmith": {
+ "name": "Locksmith",
+ "terms": "keys"
+ },
"shop/mall": {
"name": "Mall",
"terms": ""
"name": "Pet Store",
"terms": ""
},
+ "shop/photo": {
+ "name": "Photography Store",
+ "terms": ""
+ },
"shop/shoes": {
"name": "Shoe Store",
"terms": ""
},
"shop/supermarket": {
"name": "Supermarket",
- "terms": "bazaar,boutique,chain,co-op,cut-rate store,discount store,five-and-dime,flea market,galleria,mall,mart,outlet,outlet store,shop,shopping center,shopping plaza,stand,store,supermarket,thrift shop"
+ "terms": "bazaar,boutique,chain,co-op,cut-rate store,discount store,five-and-dime,flea market,galleria,grocery store,mall,mart,outlet,outlet store,shop,shopping center,shopping centre,shopping plaza,stand,store,supermarket,thrift shop"
},
"shop/toys": {
"name": "Toy Store",
"name": "Foot Route",
"terms": ""
},
+ "type/route/hiking": {
+ "name": "Hiking Route",
+ "terms": ""
+ },
"type/route/pipeline": {
"name": "Pipeline Route",
"terms": ""