/include/leaflet.js
JavaScript | 993 lines | 987 code | 1 blank | 5 comment | 294 complexity | 169255dbf8c15b2f7696207120a10f07 MD5 | raw file
- /*
- Leaflet, a JavaScript library for mobile-friendly interactive maps. http://leafletjs.com
- (c) 2010-2013, Vladimir Agafonkin
- (c) 2010-2011, CloudMade
- */
- ! function(t, e, i) {
- var n = t.L,
- o = {};
- o.version = "0.7.3", "object" == typeof module && "object" == typeof module.exports ? module.exports = o : "function" == typeof define && define.amd && define(o), o.noConflict = function() {
- return t.L = n, this
- }, t.L = o, o.Util = {
- extend: function(t) {
- var e, i, n, o, s = Array.prototype.slice.call(arguments, 1);
- for (i = 0, n = s.length; n > i; i++) {
- o = s[i] || {};
- for (e in o) o.hasOwnProperty(e) && (t[e] = o[e])
- }
- return t
- },
- bind: function(t, e) {
- var i = arguments.length > 2 ? Array.prototype.slice.call(arguments, 2) : null;
- return function() {
- return t.apply(e, i || arguments)
- }
- },
- stamp: function() {
- var t = 0,
- e = "_leaflet_id";
- return function(i) {
- return i[e] = i[e] || ++t, i[e]
- }
- }(),
- invokeEach: function(t, e, i) {
- var n, o;
- if ("object" == typeof t) {
- o = Array.prototype.slice.call(arguments, 3);
- for (n in t) e.apply(i, [n, t[n]].concat(o));
- return !0
- }
- return !1
- },
- limitExecByInterval: function(t, e, i) {
- var n, o;
- return function s() {
- var a = arguments;
- return n ? void(o = !0) : (n = !0, setTimeout(function() {
- n = !1, o && (s.apply(i, a), o = !1)
- }, e), void t.apply(i, a))
- }
- },
- falseFn: function() {
- return !1
- },
- formatNum: function(t, e) {
- var i = Math.pow(10, e || 5);
- return Math.round(t * i) / i
- },
- trim: function(t) {
- return t.trim ? t.trim() : t.replace(/^\s+|\s+$/g, "")
- },
- splitWords: function(t) {
- return o.Util.trim(t).split(/\s+/)
- },
- setOptions: function(t, e) {
- return t.options = o.extend({}, t.options, e), t.options
- },
- getParamString: function(t, e, i) {
- var n = [];
- for (var o in t) n.push(encodeURIComponent(i ? o.toUpperCase() : o) + "=" + encodeURIComponent(t[o]));
- return (e && -1 !== e.indexOf("?") ? "&" : "?") + n.join("&")
- },
- template: function(t, e) {
- return t.replace(/\{ *([\w_]+) *\}/g, function(t, n) {
- var o = e[n];
- if (o === i) throw new Error("No value provided for variable " + t);
- return "function" == typeof o && (o = o(e)), o
- })
- },
- isArray: Array.isArray || function(t) {
- return "[object Array]" === Object.prototype.toString.call(t)
- },
- emptyImageUrl: "data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs="
- },
- function() {
- function e(e) {
- var i, n, o = ["webkit", "moz", "o", "ms"];
- for (i = 0; i < o.length && !n; i++) n = t[o[i] + e];
- return n
- }
- function i(e) {
- var i = +new Date,
- o = Math.max(0, 16 - (i - n));
- return n = i + o, t.setTimeout(e, o)
- }
- var n = 0,
- s = t.requestAnimationFrame || e("RequestAnimationFrame") || i,
- a = t.cancelAnimationFrame || e("CancelAnimationFrame") || e("CancelRequestAnimationFrame") || function(e) {
- t.clearTimeout(e)
- };
- o.Util.requestAnimFrame = function(e, n, a, r) {
- return e = o.bind(e, n), a && s === i ? void e() : s.call(t, e, r)
- }, o.Util.cancelAnimFrame = function(e) {
- e && a.call(t, e)
- }
- }(), o.extend = o.Util.extend, o.bind = o.Util.bind, o.stamp = o.Util.stamp, o.setOptions = o.Util.setOptions, o.Class = function() {}, o.Class.extend = function(t) {
- var e = function() {
- this.initialize && this.initialize.apply(this, arguments), this._initHooks && this.callInitHooks()
- },
- i = function() {};
- i.prototype = this.prototype;
- var n = new i;
- n.constructor = e, e.prototype = n;
- for (var s in this) this.hasOwnProperty(s) && "prototype" !== s && (e[s] = this[s]);
- t.statics && (o.extend(e, t.statics), delete t.statics), t.includes && (o.Util.extend.apply(null, [n].concat(t.includes)), delete t.includes), t.options && n.options && (t.options = o.extend({}, n.options, t.options)), o.extend(n, t), n._initHooks = [];
- var a = this;
- return e.__super__ = a.prototype, n.callInitHooks = function() {
- if (!this._initHooksCalled) {
- a.prototype.callInitHooks && a.prototype.callInitHooks.call(this), this._initHooksCalled = !0;
- for (var t = 0, e = n._initHooks.length; e > t; t++) n._initHooks[t].call(this)
- }
- }, e
- }, o.Class.include = function(t) {
- o.extend(this.prototype, t)
- }, o.Class.mergeOptions = function(t) {
- o.extend(this.prototype.options, t)
- }, o.Class.addInitHook = function(t) {
- var e = Array.prototype.slice.call(arguments, 1),
- i = "function" == typeof t ? t : function() {
- this[t].apply(this, e)
- };
- this.prototype._initHooks = this.prototype._initHooks || [], this.prototype._initHooks.push(i)
- };
- var s = "_leaflet_events";
- o.Mixin = {}, o.Mixin.Events = {
- addEventListener: function(t, e, i) {
- if (o.Util.invokeEach(t, this.addEventListener, this, e, i)) return this;
- var n, a, r, h, l, u, c, d = this[s] = this[s] || {},
- p = i && i !== this && o.stamp(i);
- for (t = o.Util.splitWords(t), n = 0, a = t.length; a > n; n++) r = {
- action: e,
- context: i || this
- }, h = t[n], p ? (l = h + "_idx", u = l + "_len", c = d[l] = d[l] || {}, c[p] || (c[p] = [], d[u] = (d[u] || 0) + 1), c[p].push(r)) : (d[h] = d[h] || [], d[h].push(r));
- return this
- },
- hasEventListeners: function(t) {
- var e = this[s];
- return !!e && (t in e && e[t].length > 0 || t + "_idx" in e && e[t + "_idx_len"] > 0)
- },
- removeEventListener: function(t, e, i) {
- if (!this[s]) return this;
- if (!t) return this.clearAllEventListeners();
- if (o.Util.invokeEach(t, this.removeEventListener, this, e, i)) return this;
- var n, a, r, h, l, u, c, d, p, _ = this[s],
- m = i && i !== this && o.stamp(i);
- for (t = o.Util.splitWords(t), n = 0, a = t.length; a > n; n++)
- if (r = t[n], u = r + "_idx", c = u + "_len", d = _[u], e) {
- if (h = m && d ? d[m] : _[r]) {
- for (l = h.length - 1; l >= 0; l--) h[l].action !== e || i && h[l].context !== i || (p = h.splice(l, 1), p[0].action = o.Util.falseFn);
- i && d && 0 === h.length && (delete d[m], _[c]--)
- }
- } else delete _[r], delete _[u], delete _[c];
- return this
- },
- clearAllEventListeners: function() {
- return delete this[s], this
- },
- fireEvent: function(t, e) {
- if (!this.hasEventListeners(t)) return this;
- var i, n, a, r, h, l = o.Util.extend({}, e, {
- type: t,
- target: this
- }),
- u = this[s];
- if (u[t])
- for (i = u[t].slice(), n = 0, a = i.length; a > n; n++) i[n].action.call(i[n].context, l);
- r = u[t + "_idx"];
- for (h in r)
- if (i = r[h].slice())
- for (n = 0, a = i.length; a > n; n++) i[n].action.call(i[n].context, l);
- return this
- },
- addOneTimeEventListener: function(t, e, i) {
- if (o.Util.invokeEach(t, this.addOneTimeEventListener, this, e, i)) return this;
- var n = o.bind(function() {
- this.removeEventListener(t, e, i).removeEventListener(t, n, i)
- }, this);
- return this.addEventListener(t, e, i).addEventListener(t, n, i)
- }
- }, o.Mixin.Events.on = o.Mixin.Events.addEventListener, o.Mixin.Events.off = o.Mixin.Events.removeEventListener, o.Mixin.Events.once = o.Mixin.Events.addOneTimeEventListener, o.Mixin.Events.fire = o.Mixin.Events.fireEvent,
- function() {
- var n = "ActiveXObject" in t,
- s = n && !e.addEventListener,
- a = navigator.userAgent.toLowerCase(),
- r = -1 !== a.indexOf("webkit"),
- h = -1 !== a.indexOf("chrome"),
- l = -1 !== a.indexOf("phantom"),
- u = -1 !== a.indexOf("android"),
- c = -1 !== a.search("android [23]"),
- d = -1 !== a.indexOf("gecko"),
- p = typeof orientation != i + "",
- _ = t.navigator && t.navigator.msPointerEnabled && t.navigator.msMaxTouchPoints && !t.PointerEvent,
- m = t.PointerEvent && t.navigator.pointerEnabled && t.navigator.maxTouchPoints || _,
- f = "devicePixelRatio" in t && t.devicePixelRatio > 1 || "matchMedia" in t && t.matchMedia("(min-resolution:144dpi)") && t.matchMedia("(min-resolution:144dpi)").matches,
- g = e.documentElement,
- v = n && "transition" in g.style,
- y = "WebKitCSSMatrix" in t && "m11" in new t.WebKitCSSMatrix && !c,
- P = "MozPerspective" in g.style,
- L = "OTransition" in g.style,
- x = !t.L_DISABLE_3D && (v || y || P || L) && !l,
- w = !t.L_NO_TOUCH && !l && function() {
- var t = "ontouchstart";
- if (m || t in g) return !0;
- var i = e.createElement("div"),
- n = !1;
- return i.setAttribute ? (i.setAttribute(t, "return;"), "function" == typeof i[t] && (n = !0), i.removeAttribute(t), i = null, n) : !1
- }();
- o.Browser = {
- ie: n,
- ielt9: s,
- webkit: r,
- gecko: d && !r && !t.opera && !n,
- android: u,
- android23: c,
- chrome: h,
- ie3d: v,
- webkit3d: y,
- gecko3d: P,
- opera3d: L,
- any3d: x,
- mobile: p,
- mobileWebkit: p && r,
- mobileWebkit3d: p && y,
- mobileOpera: p && t.opera,
- touch: w,
- msPointer: _,
- pointer: m,
- retina: f
- }
- }(), o.Point = function(t, e, i) {
- this.x = i ? Math.round(t) : t, this.y = i ? Math.round(e) : e
- }, o.Point.prototype = {
- clone: function() {
- return new o.Point(this.x, this.y)
- },
- add: function(t) {
- return this.clone()._add(o.point(t))
- },
- _add: function(t) {
- return this.x += t.x, this.y += t.y, this
- },
- subtract: function(t) {
- return this.clone()._subtract(o.point(t))
- },
- _subtract: function(t) {
- return this.x -= t.x, this.y -= t.y, this
- },
- divideBy: function(t) {
- return this.clone()._divideBy(t)
- },
- _divideBy: function(t) {
- return this.x /= t, this.y /= t, this
- },
- multiplyBy: function(t) {
- return this.clone()._multiplyBy(t)
- },
- _multiplyBy: function(t) {
- return this.x *= t, this.y *= t, this
- },
- round: function() {
- return this.clone()._round()
- },
- _round: function() {
- return this.x = Math.round(this.x), this.y = Math.round(this.y), this
- },
- floor: function() {
- return this.clone()._floor()
- },
- _floor: function() {
- return this.x = Math.floor(this.x), this.y = Math.floor(this.y), this
- },
- distanceTo: function(t) {
- t = o.point(t);
- var e = t.x - this.x,
- i = t.y - this.y;
- return Math.sqrt(e * e + i * i)
- },
- equals: function(t) {
- return t = o.point(t), t.x === this.x && t.y === this.y
- },
- contains: function(t) {
- return t = o.point(t), Math.abs(t.x) <= Math.abs(this.x) && Math.abs(t.y) <= Math.abs(this.y)
- },
- toString: function() {
- return "Point(" + o.Util.formatNum(this.x) + ", " + o.Util.formatNum(this.y) + ")"
- }
- }, o.point = function(t, e, n) {
- return t instanceof o.Point ? t : o.Util.isArray(t) ? new o.Point(t[0], t[1]) : t === i || null === t ? t : new o.Point(t, e, n)
- }, o.Bounds = function(t, e) {
- if (t)
- for (var i = e ? [t, e] : t, n = 0, o = i.length; o > n; n++) this.extend(i[n])
- }, o.Bounds.prototype = {
- extend: function(t) {
- return t = o.point(t), this.min || this.max ? (this.min.x = Math.min(t.x, this.min.x), this.max.x = Math.max(t.x, this.max.x), this.min.y = Math.min(t.y, this.min.y), this.max.y = Math.max(t.y, this.max.y)) : (this.min = t.clone(), this.max = t.clone()), this
- },
- getCenter: function(t) {
- return new o.Point((this.min.x + this.max.x) / 2, (this.min.y + this.max.y) / 2, t)
- },
- getBottomLeft: function() {
- return new o.Point(this.min.x, this.max.y)
- },
- getTopRight: function() {
- return new o.Point(this.max.x, this.min.y)
- },
- getSize: function() {
- return this.max.subtract(this.min)
- },
- contains: function(t) {
- var e, i;
- return t = "number" == typeof t[0] || t instanceof o.Point ? o.point(t) : o.bounds(t), t instanceof o.Bounds ? (e = t.min, i = t.max) : e = i = t, e.x >= this.min.x && i.x <= this.max.x && e.y >= this.min.y && i.y <= this.max.y
- },
- intersects: function(t) {
- t = o.bounds(t);
- var e = this.min,
- i = this.max,
- n = t.min,
- s = t.max,
- a = s.x >= e.x && n.x <= i.x,
- r = s.y >= e.y && n.y <= i.y;
- return a && r
- },
- isValid: function() {
- return !(!this.min || !this.max)
- }
- }, o.bounds = function(t, e) {
- return !t || t instanceof o.Bounds ? t : new o.Bounds(t, e)
- }, o.Transformation = function(t, e, i, n) {
- this._a = t, this._b = e, this._c = i, this._d = n
- }, o.Transformation.prototype = {
- transform: function(t, e) {
- return this._transform(t.clone(), e)
- },
- _transform: function(t, e) {
- return e = e || 1, t.x = e * (this._a * t.x + this._b), t.y = e * (this._c * t.y + this._d), t
- },
- untransform: function(t, e) {
- return e = e || 1, new o.Point((t.x / e - this._b) / this._a, (t.y / e - this._d) / this._c)
- }
- }, o.DomUtil = {
- get: function(t) {
- return "string" == typeof t ? e.getElementById(t) : t
- },
- getStyle: function(t, i) {
- var n = t.style[i];
- if (!n && t.currentStyle && (n = t.currentStyle[i]), (!n || "auto" === n) && e.defaultView) {
- var o = e.defaultView.getComputedStyle(t, null);
- n = o ? o[i] : null
- }
- return "auto" === n ? null : n
- },
- getViewportOffset: function(t) {
- var i, n = 0,
- s = 0,
- a = t,
- r = e.body,
- h = e.documentElement;
- do {
- if (n += a.offsetTop || 0, s += a.offsetLeft || 0, n += parseInt(o.DomUtil.getStyle(a, "borderTopWidth"), 10) || 0, s += parseInt(o.DomUtil.getStyle(a, "borderLeftWidth"), 10) || 0, i = o.DomUtil.getStyle(a, "position"), a.offsetParent === r && "absolute" === i) break;
- if ("fixed" === i) {
- n += r.scrollTop || h.scrollTop || 0, s += r.scrollLeft || h.scrollLeft || 0;
- break
- }
- if ("relative" === i && !a.offsetLeft) {
- var l = o.DomUtil.getStyle(a, "width"),
- u = o.DomUtil.getStyle(a, "max-width"),
- c = a.getBoundingClientRect();
- ("none" !== l || "none" !== u) && (s += c.left + a.clientLeft), n += c.top + (r.scrollTop || h.scrollTop || 0);
- break
- }
- a = a.offsetParent
- } while (a);
- a = t;
- do {
- if (a === r) break;
- n -= a.scrollTop || 0, s -= a.scrollLeft || 0, a = a.parentNode
- } while (a);
- return new o.Point(s, n)
- },
- documentIsLtr: function() {
- return o.DomUtil._docIsLtrCached || (o.DomUtil._docIsLtrCached = !0, o.DomUtil._docIsLtr = "ltr" === o.DomUtil.getStyle(e.body, "direction")), o.DomUtil._docIsLtr
- },
- create: function(t, i, n) {
- var o = e.createElement(t);
- return o.className = i, n && n.appendChild(o), o
- },
- hasClass: function(t, e) {
- if (t.classList !== i) return t.classList.contains(e);
- var n = o.DomUtil._getClass(t);
- return n.length > 0 && new RegExp("(^|\\s)" + e + "(\\s|$)").test(n)
- },
- addClass: function(t, e) {
- if (t.classList !== i)
- for (var n = o.Util.splitWords(e), s = 0, a = n.length; a > s; s++) t.classList.add(n[s]);
- else if (!o.DomUtil.hasClass(t, e)) {
- var r = o.DomUtil._getClass(t);
- o.DomUtil._setClass(t, (r ? r + " " : "") + e)
- }
- },
- removeClass: function(t, e) {
- t.classList !== i ? t.classList.remove(e) : o.DomUtil._setClass(t, o.Util.trim((" " + o.DomUtil._getClass(t) + " ").replace(" " + e + " ", " ")))
- },
- _setClass: function(t, e) {
- t.className.baseVal === i ? t.className = e : t.className.baseVal = e
- },
- _getClass: function(t) {
- return t.className.baseVal === i ? t.className : t.className.baseVal
- },
- setOpacity: function(t, e) {
- if ("opacity" in t.style) t.style.opacity = e;
- else if ("filter" in t.style) {
- var i = !1,
- n = "DXImageTransform.Microsoft.Alpha";
- try {
- i = t.filters.item(n)
- } catch (o) {
- if (1 === e) return
- }
- e = Math.round(100 * e), i ? (i.Enabled = 100 !== e, i.Opacity = e) : t.style.filter += " progid:" + n + "(opacity=" + e + ")"
- }
- },
- testProp: function(t) {
- for (var i = e.documentElement.style, n = 0; n < t.length; n++)
- if (t[n] in i) return t[n];
- return !1
- },
- getTranslateString: function(t) {
- var e = o.Browser.webkit3d,
- i = "translate" + (e ? "3d" : "") + "(",
- n = (e ? ",0" : "") + ")";
- return i + t.x + "px," + t.y + "px" + n
- },
- getScaleString: function(t, e) {
- var i = o.DomUtil.getTranslateString(e.add(e.multiplyBy(-1 * t))),
- n = " scale(" + t + ") ";
- return i + n
- },
- setPosition: function(t, e, i) {
- t._leaflet_pos = e, !i && o.Browser.any3d ? t.style[o.DomUtil.TRANSFORM] = o.DomUtil.getTranslateString(e) : (t.style.left = e.x + "px", t.style.top = e.y + "px")
- },
- getPosition: function(t) {
- return t._leaflet_pos
- }
- }, o.DomUtil.TRANSFORM = o.DomUtil.testProp(["transform", "WebkitTransform", "OTransform", "MozTransform", "msTransform"]), o.DomUtil.TRANSITION = o.DomUtil.testProp(["webkitTransition", "transition", "OTransition", "MozTransition", "msTransition"]), o.DomUtil.TRANSITION_END = "webkitTransition" === o.DomUtil.TRANSITION || "OTransition" === o.DomUtil.TRANSITION ? o.DomUtil.TRANSITION + "End" : "transitionend",
- function() {
- if ("onselectstart" in e) o.extend(o.DomUtil, {
- disableTextSelection: function() {
- o.DomEvent.on(t, "selectstart", o.DomEvent.preventDefault)
- },
- enableTextSelection: function() {
- o.DomEvent.off(t, "selectstart", o.DomEvent.preventDefault)
- }
- });
- else {
- var i = o.DomUtil.testProp(["userSelect", "WebkitUserSelect", "OUserSelect", "MozUserSelect", "msUserSelect"]);
- o.extend(o.DomUtil, {
- disableTextSelection: function() {
- if (i) {
- var t = e.documentElement.style;
- this._userSelect = t[i], t[i] = "none"
- }
- },
- enableTextSelection: function() {
- i && (e.documentElement.style[i] = this._userSelect, delete this._userSelect)
- }
- })
- }
- o.extend(o.DomUtil, {
- disableImageDrag: function() {
- o.DomEvent.on(t, "dragstart", o.DomEvent.preventDefault)
- },
- enableImageDrag: function() {
- o.DomEvent.off(t, "dragstart", o.DomEvent.preventDefault)
- }
- })
- }(), o.LatLng = function(t, e, n) {
- if (t = parseFloat(t), e = parseFloat(e), isNaN(t) || isNaN(e)) throw new Error("Invalid LatLng object: (" + t + ", " + e + ")");
- this.lat = t, this.lng = e, n !== i && (this.alt = parseFloat(n))
- }, o.extend(o.LatLng, {
- DEG_TO_RAD: Math.PI / 180,
- RAD_TO_DEG: 180 / Math.PI,
- MAX_MARGIN: 1e-9
- }), o.LatLng.prototype = {
- equals: function(t) {
- if (!t) return !1;
- t = o.latLng(t);
- var e = Math.max(Math.abs(this.lat - t.lat), Math.abs(this.lng - t.lng));
- return e <= o.LatLng.MAX_MARGIN
- },
- toString: function(t) {
- return "LatLng(" + o.Util.formatNum(this.lat, t) + ", " + o.Util.formatNum(this.lng, t) + ")"
- },
- distanceTo: function(t) {
- t = o.latLng(t);
- var e = 6378137,
- i = o.LatLng.DEG_TO_RAD,
- n = (t.lat - this.lat) * i,
- s = (t.lng - this.lng) * i,
- a = this.lat * i,
- r = t.lat * i,
- h = Math.sin(n / 2),
- l = Math.sin(s / 2),
- u = h * h + l * l * Math.cos(a) * Math.cos(r);
- return 2 * e * Math.atan2(Math.sqrt(u), Math.sqrt(1 - u))
- },
- wrap: function(t, e) {
- var i = this.lng;
- return t = t || -180, e = e || 180, i = (i + e) % (e - t) + (t > i || i === e ? e : t), new o.LatLng(this.lat, i)
- }
- }, o.latLng = function(t, e) {
- return t instanceof o.LatLng ? t : o.Util.isArray(t) ? "number" == typeof t[0] || "string" == typeof t[0] ? new o.LatLng(t[0], t[1], t[2]) : null : t === i || null === t ? t : "object" == typeof t && "lat" in t ? new o.LatLng(t.lat, "lng" in t ? t.lng : t.lon) : e === i ? null : new o.LatLng(t, e)
- }, o.LatLngBounds = function(t, e) {
- if (t)
- for (var i = e ? [t, e] : t, n = 0, o = i.length; o > n; n++) this.extend(i[n])
- }, o.LatLngBounds.prototype = {
- extend: function(t) {
- if (!t) return this;
- var e = o.latLng(t);
- return t = null !== e ? e : o.latLngBounds(t), t instanceof o.LatLng ? this._southWest || this._northEast ? (this._southWest.lat = Math.min(t.lat, this._southWest.lat), this._southWest.lng = Math.min(t.lng, this._southWest.lng), this._northEast.lat = Math.max(t.lat, this._northEast.lat), this._northEast.lng = Math.max(t.lng, this._northEast.lng)) : (this._southWest = new o.LatLng(t.lat, t.lng), this._northEast = new o.LatLng(t.lat, t.lng)) : t instanceof o.LatLngBounds && (this.extend(t._southWest), this.extend(t._northEast)), this
- },
- pad: function(t) {
- var e = this._southWest,
- i = this._northEast,
- n = Math.abs(e.lat - i.lat) * t,
- s = Math.abs(e.lng - i.lng) * t;
- return new o.LatLngBounds(new o.LatLng(e.lat - n, e.lng - s), new o.LatLng(i.lat + n, i.lng + s))
- },
- getCenter: function() {
- return new o.LatLng((this._southWest.lat + this._northEast.lat) / 2, (this._southWest.lng + this._northEast.lng) / 2)
- },
- getSouthWest: function() {
- return this._southWest
- },
- getNorthEast: function() {
- return this._northEast
- },
- getNorthWest: function() {
- return new o.LatLng(this.getNorth(), this.getWest())
- },
- getSouthEast: function() {
- return new o.LatLng(this.getSouth(), this.getEast())
- },
- getWest: function() {
- return this._southWest.lng
- },
- getSouth: function() {
- return this._southWest.lat
- },
- getEast: function() {
- return this._northEast.lng
- },
- getNorth: function() {
- return this._northEast.lat
- },
- contains: function(t) {
- t = "number" == typeof t[0] || t instanceof o.LatLng ? o.latLng(t) : o.latLngBounds(t);
- var e, i, n = this._southWest,
- s = this._northEast;
- return t instanceof o.LatLngBounds ? (e = t.getSouthWest(), i = t.getNorthEast()) : e = i = t, e.lat >= n.lat && i.lat <= s.lat && e.lng >= n.lng && i.lng <= s.lng
- },
- intersects: function(t) {
- t = o.latLngBounds(t);
- var e = this._southWest,
- i = this._northEast,
- n = t.getSouthWest(),
- s = t.getNorthEast(),
- a = s.lat >= e.lat && n.lat <= i.lat,
- r = s.lng >= e.lng && n.lng <= i.lng;
- return a && r
- },
- toBBoxString: function() {
- return [this.getWest(), this.getSouth(), this.getEast(), this.getNorth()].join(",")
- },
- equals: function(t) {
- return t ? (t = o.latLngBounds(t), this._southWest.equals(t.getSouthWest()) && this._northEast.equals(t.getNorthEast())) : !1
- },
- isValid: function() {
- return !(!this._southWest || !this._northEast)
- }
- }, o.latLngBounds = function(t, e) {
- return !t || t instanceof o.LatLngBounds ? t : new o.LatLngBounds(t, e)
- }, o.Projection = {}, o.Projection.SphericalMercator = {
- MAX_LATITUDE: 85.0511287798,
- project: function(t) {
- var e = o.LatLng.DEG_TO_RAD,
- i = this.MAX_LATITUDE,
- n = Math.max(Math.min(i, t.lat), -i),
- s = t.lng * e,
- a = n * e;
- return a = Math.log(Math.tan(Math.PI / 4 + a / 2)), new o.Point(s, a)
- },
- unproject: function(t) {
- var e = o.LatLng.RAD_TO_DEG,
- i = t.x * e,
- n = (2 * Math.atan(Math.exp(t.y)) - Math.PI / 2) * e;
- return new o.LatLng(n, i)
- }
- }, o.Projection.LonLat = {
- project: function(t) {
- return new o.Point(t.lng, t.lat)
- },
- unproject: function(t) {
- return new o.LatLng(t.y, t.x)
- }
- }, o.CRS = {
- latLngToPoint: function(t, e) {
- var i = this.projection.project(t),
- n = this.scale(e);
- return this.transformation._transform(i, n)
- },
- pointToLatLng: function(t, e) {
- var i = this.scale(e),
- n = this.transformation.untransform(t, i);
- return this.projection.unproject(n)
- },
- project: function(t) {
- return this.projection.project(t)
- },
- scale: function(t) {
- return 256 * Math.pow(2, t)
- },
- getSize: function(t) {
- var e = this.scale(t);
- return o.point(e, e)
- }
- }, o.CRS.Simple = o.extend({}, o.CRS, {
- projection: o.Projection.LonLat,
- transformation: new o.Transformation(1, 0, -1, 0),
- scale: function(t) {
- return Math.pow(2, t)
- }
- }), o.CRS.EPSG3857 = o.extend({}, o.CRS, {
- code: "EPSG:3857",
- projection: o.Projection.SphericalMercator,
- transformation: new o.Transformation(.5 / Math.PI, .5, -.5 / Math.PI, .5),
- project: function(t) {
- var e = this.projection.project(t),
- i = 6378137;
- return e.multiplyBy(i)
- }
- }), o.CRS.EPSG900913 = o.extend({}, o.CRS.EPSG3857, {
- code: "EPSG:900913"
- }), o.CRS.EPSG4326 = o.extend({}, o.CRS, {
- code: "EPSG:4326",
- projection: o.Projection.LonLat,
- transformation: new o.Transformation(1 / 360, .5, -1 / 360, .5)
- }), o.Map = o.Class.extend({
- includes: o.Mixin.Events,
- options: {
- crs: o.CRS.EPSG3857,
- fadeAnimation: o.DomUtil.TRANSITION && !o.Browser.android23,
- trackResize: !0,
- markerZoomAnimation: o.DomUtil.TRANSITION && o.Browser.any3d
- },
- initialize: function(t, e) {
- e = o.setOptions(this, e), this._initContainer(t), this._initLayout(), this._onResize = o.bind(this._onResize, this), this._initEvents(), e.maxBounds && this.setMaxBounds(e.maxBounds), e.center && e.zoom !== i && this.setView(o.latLng(e.center), e.zoom, {
- reset: !0
- }), this._handlers = [], this._layers = {}, this._zoomBoundLayers = {}, this._tileLayersNum = 0, this.callInitHooks(), this._addLayers(e.layers)
- },
- setView: function(t, e) {
- return e = e === i ? this.getZoom() : e, this._resetView(o.latLng(t), this._limitZoom(e)), this
- },
- setZoom: function(t, e) {
- return this._loaded ? this.setView(this.getCenter(), t, {
- zoom: e
- }) : (this._zoom = this._limitZoom(t), this)
- },
- zoomIn: function(t, e) {
- return this.setZoom(this._zoom + (t || 1), e)
- },
- zoomOut: function(t, e) {
- return this.setZoom(this._zoom - (t || 1), e)
- },
- setZoomAround: function(t, e, i) {
- var n = this.getZoomScale(e),
- s = this.getSize().divideBy(2),
- a = t instanceof o.Point ? t : this.latLngToContainerPoint(t),
- r = a.subtract(s).multiplyBy(1 - 1 / n),
- h = this.containerPointToLatLng(s.add(r));
- return this.setView(h, e, {
- zoom: i
- })
- },
- fitBounds: function(t, e) {
- e = e || {}, t = t.getBounds ? t.getBounds() : o.latLngBounds(t);
- var i = o.point(e.paddingTopLeft || e.padding || [0, 0]),
- n = o.point(e.paddingBottomRight || e.padding || [0, 0]),
- s = this.getBoundsZoom(t, !1, i.add(n)),
- a = n.subtract(i).divideBy(2),
- r = this.project(t.getSouthWest(), s),
- h = this.project(t.getNorthEast(), s),
- l = this.unproject(r.add(h).divideBy(2).add(a), s);
- return s = e && e.maxZoom ? Math.min(e.maxZoom, s) : s, this.setView(l, s, e)
- },
- fitWorld: function(t) {
- return this.fitBounds([
- [-90, -180],
- [90, 180]
- ], t)
- },
- panTo: function(t, e) {
- return this.setView(t, this._zoom, {
- pan: e
- })
- },
- panBy: function(t) {
- return this.fire("movestart"), this._rawPanBy(o.point(t)), this.fire("move"), this.fire("moveend")
- },
- setMaxBounds: function(t) {
- return t = o.latLngBounds(t), this.options.maxBounds = t, t ? (this._loaded && this._panInsideMaxBounds(), this.on("moveend", this._panInsideMaxBounds, this)) : this.off("moveend", this._panInsideMaxBounds, this)
- },
- panInsideBounds: function(t, e) {
- var i = this.getCenter(),
- n = this._limitCenter(i, this._zoom, t);
- return i.equals(n) ? this : this.panTo(n, e)
- },
- addLayer: function(t) {
- var e = o.stamp(t);
- return this._layers[e] ? this : (this._layers[e] = t, !t.options || isNaN(t.options.maxZoom) && isNaN(t.options.minZoom) || (this._zoomBoundLayers[e] = t, this._updateZoomLevels()), this.options.zoomAnimation && o.TileLayer && t instanceof o.TileLayer && (this._tileLayersNum++, this._tileLayersToLoad++, t.on("load", this._onTileLayerLoad, this)), this._loaded && this._layerAdd(t), this)
- },
- removeLayer: function(t) {
- var e = o.stamp(t);
- return this._layers[e] ? (this._loaded && t.onRemove(this), delete this._layers[e], this._loaded && this.fire("layerremove", {
- layer: t
- }), this._zoomBoundLayers[e] && (delete this._zoomBoundLayers[e], this._updateZoomLevels()), this.options.zoomAnimation && o.TileLayer && t instanceof o.TileLayer && (this._tileLayersNum--, this._tileLayersToLoad--, t.off("load", this._onTileLayerLoad, this)), this) : this
- },
- hasLayer: function(t) {
- return t ? o.stamp(t) in this._layers : !1
- },
- eachLayer: function(t, e) {
- for (var i in this._layers) t.call(e, this._layers[i]);
- return this
- },
- invalidateSize: function(t) {
- if (!this._loaded) return this;
- t = o.extend({
- animate: !1,
- pan: !0
- }, t === !0 ? {
- animate: !0
- } : t);
- var e = this.getSize();
- this._sizeChanged = !0, this._initialCenter = null;
- var i = this.getSize(),
- n = e.divideBy(2).round(),
- s = i.divideBy(2).round(),
- a = n.subtract(s);
- return a.x || a.y ? (t.animate && t.pan ? this.panBy(a) : (t.pan && this._rawPanBy(a), this.fire("move"), t.debounceMoveend ? (clearTimeout(this._sizeTimer), this._sizeTimer = setTimeout(o.bind(this.fire, this, "moveend"), 200)) : this.fire("moveend")), this.fire("resize", {
- oldSize: e,
- newSize: i
- })) : this
- },
- addHandler: function(t, e) {
- if (!e) return this;
- var i = this[t] = new e(this);
- return this._handlers.push(i), this.options[t] && i.enable(), this
- },
- remove: function() {
- this._loaded && this.fire("unload"), this._initEvents("off");
- try {
- delete this._container._leaflet
- } catch (t) {
- this._container._leaflet = i
- }
- return this._clearPanes(), this._clearControlPos && this._clearControlPos(), this._clearHandlers(), this
- },
- getCenter: function() {
- return this._checkIfLoaded(), this._initialCenter && !this._moved() ? this._initialCenter : this.layerPointToLatLng(this._getCenterLayerPoint())
- },
- getZoom: function() {
- return this._zoom
- },
- getBounds: function() {
- var t = this.getPixelBounds(),
- e = this.unproject(t.getBottomLeft()),
- i = this.unproject(t.getTopRight());
- return new o.LatLngBounds(e, i)
- },
- getMinZoom: function() {
- return this.options.minZoom === i ? this._layersMinZoom === i ? 0 : this._layersMinZoom : this.options.minZoom
- },
- getMaxZoom: function() {
- return this.options.maxZoom === i ? this._layersMaxZoom === i ? 1 / 0 : this._layersMaxZoom : this.options.maxZoom
- },
- getBoundsZoom: function(t, e, i) {
- t = o.latLngBounds(t);
- var n, s = this.getMinZoom() - (e ? 1 : 0),
- a = this.getMaxZoom(),
- r = this.getSize(),
- h = t.getNorthWest(),
- l = t.getSouthEast(),
- u = !0;
- i = o.point(i || [0, 0]);
- do s++, n = this.project(l, s).subtract(this.project(h, s)).add(i), u = e ? n.x < r.x || n.y < r.y : r.contains(n); while (u && a >= s);
- return u && e ? null : e ? s : s - 1
- },
- getSize: function() {
- return (!this._size || this._sizeChanged) && (this._size = new o.Point(this._container.clientWidth, this._container.clientHeight), this._sizeChanged = !1), this._size.clone()
- },
- getPixelBounds: function() {
- var t = this._getTopLeftPoint();
- return new o.Bounds(t, t.add(this.getSize()))
- },
- getPixelOrigin: function() {
- return this._checkIfLoaded(), this._initialTopLeftPoint
- },
- getPanes: function() {
- return this._panes
- },
- getContainer: function() {
- return this._container
- },
- getZoomScale: function(t) {
- var e = this.options.crs;
- return e.scale(t) / e.scale(this._zoom)
- },
- getScaleZoom: function(t) {
- return this._zoom + Math.log(t) / Math.LN2
- },
- project: function(t, e) {
- return e = e === i ? this._zoom : e, this.options.crs.latLngToPoint(o.latLng(t), e)
- },
- unproject: function(t, e) {
- return e = e === i ? this._zoom : e, this.options.crs.pointToLatLng(o.point(t), e)
- },
- layerPointToLatLng: function(t) {
- var e = o.point(t).add(this.getPixelOrigin());
- return this.unproject(e)
- },
- latLngToLayerPoint: function(t) {
- var e = this.project(o.latLng(t))._round();
- return e._subtract(this.getPixelOrigin())
- },
- containerPointToLayerPoint: function(t) {
- return o.point(t).subtract(this._getMapPanePos())
- },
- layerPointToContainerPoint: function(t) {
- return o.point(t).add(this._getMapPanePos())
- },
- containerPointToLatLng: function(t) {
- var e = this.containerPointToLayerPoint(o.point(t));
- return this.layerPointToLatLng(e)
- },
- latLngToContainerPoint: function(t) {
- return this.layerPointToContainerPoint(this.latLngToLayerPoint(o.latLng(t)))
- },
- mouseEventToContainerPoint: function(t) {
- return o.DomEvent.getMousePosition(t, this._container)
- },
- mouseEventToLayerPoint: function(t) {
- return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))
- },
- mouseEventToLatLng: function(t) {
- return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))
- },
- _initContainer: function(t) {
- var e = this._container = o.DomUtil.get(t);
- if (!e) throw new Error("Map container not found.");
- if (e._leaflet) throw new Error("Map container is already initialized.");
- e._leaflet = !0
- },
- _initLayout: function() {
- var t = this._container;
- o.DomUtil.addClass(t, "leaflet-container" + (o.Browser.touch ? " leaflet-touch" : "") + (o.Browser.retina ? " leaflet-retina" : "") + (o.Browser.ielt9 ? " leaflet-oldie" : "") + (this.options.fadeAnimation ? " leaflet-fade-anim" : ""));
- var e = o.DomUtil.getStyle(t, "position");
- "absolute" !== e && "relative" !== e && "fixed" !== e && (t.style.position = "relative"), this._initPanes(), this._initControlPos && this._initControlPos()
- },
- _initPanes: function() {
- var t = this._panes = {};
- this._mapPane = t.mapPane = this._createPane("leaflet-map-pane", this._container), this._tilePane = t.tilePane = this._createPane("leaflet-tile-pane", this._mapPane), t.objectsPane = this._createPane("leaflet-objects-pane", this._mapPane), t.shadowPane = this._createPane("leaflet-shadow-pane"), t.overlayPane = this._createPane("leaflet-overlay-pane"), t.markerPane = this._createPane("leaflet-marker-pane"), t.popupPane = this._createPane("leaflet-popup-pane");
- var e = " leaflet-zoom-hide";
- this.options.markerZoomAnimation || (o.DomUtil.addClass(t.markerPane, e), o.DomUtil.addClass(t.shadowPane, e), o.DomUtil.addClass(t.popupPane, e))
- },
- _createPane: function(t, e) {
- return o.DomUtil.create("div", t, e || this._panes.objectsPane)
- },
- _clearPanes: function() {
- this._container.removeChild(this._mapPane)
- },
- _addLayers: function(t) {
- t = t ? o.Util.isArray(t) ? t : [t] : [];
- for (var e = 0, i = t.length; i > e; e++) this.addLayer(t[e])
- },
- _resetView: function(t, e, i, n) {
- var s = this._zoom !== e;
- n || (this.fire("movestart"), s && this.fire("zoomstart")), this._zoom = e, this._initialCenter = t, this._initialTopLeftPoint = this._getNewTopLeftPoint(t), i ? this._initialTopLeftPoint._add(this._getMapPanePos()) : o.DomUtil.setPosition(this._mapPane, new o.Point(0, 0)), this._tileLayersToLoad = this._tileLayersNum;
- var a = !this._loaded;
- this._loaded = !0, this.fire("viewreset", {
- hard: !i
- }), a && (this.fire("load"), this.eachLayer(this._layerAdd, this)), this.fire("move"), (s || n) && this.fire("zoomend"), this.fire("moveend", {
- hard: !i
- })
- },
- _rawPanBy: function(t) {
- o.DomUtil.setPosition(this._mapPane, this._getMapPanePos().subtract(t))
- },
- _getZoomSpan: function() {
- return this.getMaxZoom() - this.getMinZoom()
- },
- _updateZoomLevels: function() {
- var t, e = 1 / 0,
- n = -1 / 0,
- o = this._getZoomSpan();
- for (t in this._zoomBoundLayers) {
- var s = this._zoomBoundLayers[t];
- isNaN(s.options.minZoom) || (e = Math.min(e, s.options.minZoom)), isNaN(s.options.maxZoom) || (n = Math.max(n, s.options.maxZoom))
- }
- t === i ? this._layersMaxZoom = this._layersMinZoom = i : (this._layersMaxZoom = n, this._layersMinZoom = e), o !== this._getZoomSpan() && this.fire("zoomlevelschange")
- },
- _panInsideMaxBounds: function() {
- this.panInsideBounds(this.options.maxBounds)
- },
- _checkIfLoaded: function() {
- if (!this._loaded) throw new Error("Set map center and zoom first.")
- },
- _initEvents: function(e) {
- if (o.DomEvent) {
- e = e || "on", o.DomEvent[e](this._container, "click", this._onMouseClick, this);
- var i, n, s = ["dblclick", "mousedown", "mouseup", "mouseenter", "mouseleave", "mousemove", "contextmenu"];
- for (i = 0, n = s.length; n > i; i++) o.DomEvent[e](this._container, s[i], this._fireMouseEvent, this);
- this.options.trackResize && o.DomEvent[e](t, "resize", this._onResize, this)
- }
- },
- _onResize: function() {
- o.Util.cancelAnimFrame(this._resizeRequest), this._resizeRequest = o.Util.requestAnimFrame(function() {
- this.invalidateSize({
- debounceMoveend: !0
- })
- }, this, !1, this._container)
- },
- _onMouseClick: function(t) {
- !this._loaded || !t._simulated && (this.dragging && this.dragging.moved() || this.boxZoom && this.boxZoom.moved()) || o.DomEvent._skipped(t) || (this.fire("preclick"), this._fireMouseEvent(t))
- },
- _fireMouseEvent: function(t) {
- if (this._loaded && !o.DomEvent._skipped(t)) {
- var e = t.type;
- if (e = "mouseenter" === e ? "mouseover" : "mouseleave" === e ? "mouseout" : e, this.hasEventListeners(e)) {
- "contextmenu" === e && o.DomEvent.preventDefault(t);
- var i = this.mouseEventToContainerPoint(t),
- n = this.containerPointToLayerPoint(i),
- s = this.layerPointToLatLng(n);
- this.fire(e, {
- latlng: s,
- layerPoint: n,
- containerPoint: i,
- originalEvent: t
- })
- }
- }
- },
- _onTileLayerLoad: function() {
- this._tileLayersToLoad--, this._tileLayersNum && !this._tileLayersToLoad && this.fire("tilelayersload")
- },
- _clearHandlers: function() {
- for (var t = 0, e = this._handlers.length; e > t; t++) this._handlers[t].disable()
- },
- whenReady: function(t, e) {
- return this._loaded ? t.call(e || this, this) : this.on("load", t, e), this
- },
- _layerAdd: function(t) {
- t.onAdd(this), this.fire("layeradd", {
- layer: t
- })
- },
- _getMapPanePos: function() {
- return o.DomUtil.getPosition(this._mapPane)
- },
- _moved: function() {
- var t = this._getMapPanePos();
- return t && !t.equals([0, 0])
- },
- _getTopLeftPoint: function() {
- return this.getPixelOrigin().subtract(this._getMapPanePos())
- },
- _getNewTopLeftPoint: function(t, e) {
- var i = this.getSize()._divideBy(2);
- return this.project(t, e)._subtract(i)._round()
- },
- _latLngToNewLayerPoint: function(t, e, i) {
- var n = this._getNewTopLeftPoint(i, e).add(this._getMapPanePos());
- return this.project(t, e)._subtract(n)
- },
- _getCenterLayerPoint: function() {
- return this.containerPointToLayerPoint(this.getSiz