{"version":3,"sources":["kendo.dataviz.map.js"],"names":["f","define","$","objectKey","object","key","parts","push","sort","join","hashKey","str","i","hash","length","charCodeAt","zeroSize","width","height","baseline","measureText","text","style","measureBox","TextMetrics","current","measure","LRUCache","DEFAULT_OPTIONS","defaultMeasureBox","window","kendo","util","Class","extend","init","size","this","_size","_length","_map","put","value","map","entry","_head","_tail","newer","older","get","baselineMarkerSize","document","createElement","cssText","options","_cache","box","styleKey","cacheKey","cachedResult","baselineMarker","_baselineMarker","cloneNode","textContent","appendChild","body","String","offsetWidth","offsetHeight","offsetTop","parentNode","removeChild","marker","deepExtend","jQuery","amd","a1","a2","a3","sqr","renderSize","renderPos","pos","result","toHyphens","split","arabicToRoman","n","literals","1","10","100","2","20","200","3","30","300","4","40","400","5","50","500","6","60","600","7","70","700","8","80","800","9","90","900","1000","values","roman","shift","romanToArabic","r","digits","prev","v","toLowerCase","x","l","c","d","m","charAt","memoize","cache","Object","create","id","arguments","apply","isUnicodeLetter","ch","RX_UNICODE_LETTER","test","now","Date","getTime","RegExp","undefined","Extent","math","Math","abs","atan","atan2","cos","max","min","sin","tan","dataviz","drawing","defined","deg","rad","round","valueOrDefault","Location","lat","lng","DISTANCE_ITERATIONS","DISTANCE_CONVERGENCE","DISTANCE_PRECISION","FORMAT","toArray","equals","loc","clone","precision","wrap","distanceTo","dest","datum","greatCircleTo","distance","destination","bearing","fromLat","fromLng","dToR","datums","WGS84","a","asin","b","L","U1","sinU1","cosU1","U2","sinU2","cosU2","lambda","prevLambda","converged","sinLambda","cosLambda","sino","cosA2","coso","cos2om","sigma","sinA","C","u2","A","B","deltao","azimuthFrom","azimuthTo","sqrt","fn","toString","format","fromLngLat","ll","fromLatLng","nw","se","contains","center","containsAny","locs","include","includeAll","edges","ne","sw","overlaps","extent","World","Widget","ui","template","Attribution","element","call","_initOptions","items","addClass","name","separator","itemTemplate","filter","zoom","_extent","_zoom","_render","add","item","remove","clear","empty","_itemText","append","show","hide","inZoomLevel","_inZoomLevel","minZoom","maxZoom","inArea","_inArea","Number","MAX_VALUE","area","plugin","button","dir","keys","proxy","NS","BUTTONS","Navigator","on","parentElement","parent","closest","attr","_keyroot","_tabindex","_keydown","panStep","events","dispose","off","_pan","y","trigger","_click","e","currentTarget","is","preventDefault","which","UP","DOWN","RIGHT","LEFT","iconClass","PLUS","MINUS","FF_PLUS","FF_MINUS","ZoomControl","zoomStep","_change","delta","NUMPAD_PLUS","NUMPAD_MINUS","exp","pow","log","g","geometry","Point","limit","limitValue","PI","PI_DIV_2","PI_DIV_4","DEG_TO_RAD","Mercator","MAX_LNG","MAX_LAT","INVERSE_ITERATIONS","INVERSE_CONVERGENCE","centralMeridian","forward","clamp","proj","lng0","_projectLat","ecc","ts","con","p","inverse","point","_inverseY","dphi","ecch","phi","SphericalMercator","Equirectangular","EPSG3857","crs","_proj","_tm","transform","translate","scale","_itm","toPoint","toLocation","EPSG3395","EPSG4326","projections","Layer","css","zIndex","opacity","appendTo","scrollElement","_beforeReset","_reset","_resize","_panEnd","_activate","_updateAttribution","destroy","_deactivate","reset","_applyExtent","_setVisibility","noop","matchMinZoom","matchMaxZoom","inside","visible","bind","unbind","attribution","layers","DataSource","data","Group","last","ShapeLayer","surface","Surface","_initRoot","movable","Movable","_markers","_handler","_mouseenter","_mouseleave","_initDataSource","autoBind","dataSource","_dataChange","setDataSource","fetch","_translateSurface","_data","_load","_root","draw","dsOptions","sender","view","container","shape","_clearMarkers","_loader","GeoJSONLoader","parse","shapeCreated","args","cancelled","Circle","_createMarker","layer","featureCreated","markers","location","dataItem","_panning","suspendTracking","resumeTracking","locationToView","moveTo","event","originalEvent","locator","defaultStyle","observer","root","unwrap","type","_loadGeometryTo","_featureCreated","children","_shapeCreated","group","properties","path","coords","coordinates","_loadPolygon","_setLineFill","_loadPoint","segments","anchor","fill","_loadShape","rings","_buildPolygon","j","MultiPath","Path","lineTo","circle","schemas","geojson","features","geometries","transports","read","dataType","getter","BubbleLayer","locationField","valueField","minSize","maxSize","symbol","opt","getValue","scaleType","slice","_scaleType","_createSymbol","_drawSymbol","isFunction","scales","symbols","SqrtScale","domain","range","domainRange","outputRange","_domain","_range","_ratio","rel","Symbols","geo","square","halfSize","close","bubble","roundPoint","drawingUtil","TileLayer","subdomains","viewType","_viewType","_view","origin","locationToLayer","viewOrigin","_updateView","TileView","support","mobileOS","throttle","extentToPoint","render","pool","TilePool","tileSize","urlTemplate","_center","_viewOrigin","pointToTileIndex","floor","tileCount","firstTileIndex","indexToPoint","ceil","diff","index","subdomainText","subdomainIndex","tile","createTile","currentIndex","tileOptions","wrapIndex","offset","subdomain","errorUrlTemplate","boundary","wrapValue","remainder","ImageTile","errorUrl","target","setAttribute","removeAttribute","url","top","left","visibility","urlResult","urlOptions","z","s","quadkey","q","culture","_items","_remove","_create","dist","maxDist","splice","BingLayer","baseUrl","_scheme","_onMetadata","_fetchMetadata","imagerySet","Error","ajax","output","uriScheme","jsonp","success","proto","protocol","replace","resource","resourceSets","resources","imageUrl","imageUrlSubdomains","zoomMin","zoomMax","_addAttribution","BingView","imageryProviders","coverageAreas","bbox","tileQuadKey","digit","mask","quadKey","bing","doc","indexOf","inArray","Tooltip","MarkerLayer","_markerClick","titleField","arg","isArray","_addOne","update","showAt","Marker","addTo","getLocation","getTitle","title","tooltip","popup","_position","attributes","renderTooltip","contentTemplate","content","contentUrl","defaults","CSS_PREFIX","FRICTION","FRICTION_MOBILE","MOUSEWHEEL","VELOCITY_MULTIPLIER","Map","_getOrigin","_initScroller","_initMarkers","_initControls","_initLayers","_mousewheel","controls","navigator","layerDefaults","color","stroke","position","markerDefaults","wraparound","scroller","zoomControl","level","_setExtent","_getExtent","setOptions","_layerSize","layerToLocation","translateWith","viewToLocation","eventOffset","pageX","clientX","pageY","clientY","eventToView","cursor","eventToLayer","eventToLocation","viewSize","exportVisual","_setOrigin","topLeft","_origin","invalidate","bottomRight","layerWidth","layerHeight","raw","_zoomAround","pivot","_createAttribution","_createNavigator","_createZoomControl","_createControlElement","defaultPos","posSelector","_navigatorPan","_navigatorCenter","scrollLeft","scrollTop","bounds","_virtualSize","one","_scrollEnd","scrollTo","_zoomControlChange","friction","zoomable","mobile","Scroller","velocityMultiplier","mousewheelScrolling","_scroll","userEvents","_scaleStart","_scale","impl","defs","_scrollOffset","_panComplete","_panEndTS","touch","touches","cancel","_scaleToZoom","gestureCenter","centerLocation","centerPoint","originPoint","scaleDelta","tiles","_resetScroller","xBounds","yBounds","dimensions","forcedMinScale","maxScale","pannable","makeVirtual","virtualSize","_renderLayers","scrollWrap","fromZoom","toZoom","postZoom","mwDelta"],"mappings":"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","file":"kendo.dataviz.map.min.js","sourcesContent":["/*!\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n*/\n(function (f, define) {\n define('util/text-metrics', ['kendo.core'], f);\n}(function () {\n (function ($) {\n window.kendo.util = window.kendo.util || {};\n var LRUCache = kendo.Class.extend({\n init: function (size) {\n this._size = size;\n this._length = 0;\n this._map = {};\n },\n put: function (key, value) {\n var map = this._map;\n var entry = {\n key: key,\n value: value\n };\n map[key] = entry;\n if (!this._head) {\n this._head = this._tail = entry;\n } else {\n this._tail.newer = entry;\n entry.older = this._tail;\n this._tail = entry;\n }\n if (this._length >= this._size) {\n map[this._head.key] = null;\n this._head = this._head.newer;\n this._head.older = null;\n } else {\n this._length++;\n }\n },\n get: function (key) {\n var entry = this._map[key];\n if (entry) {\n if (entry === this._head && entry !== this._tail) {\n this._head = entry.newer;\n this._head.older = null;\n }\n if (entry !== this._tail) {\n if (entry.older) {\n entry.older.newer = entry.newer;\n entry.newer.older = entry.older;\n }\n entry.older = this._tail;\n entry.newer = null;\n this._tail.newer = entry;\n this._tail = entry;\n }\n return entry.value;\n }\n }\n });\n function objectKey(object) {\n var parts = [];\n for (var key in object) {\n parts.push(key + object[key]);\n }\n return parts.sort().join('');\n }\n function hashKey(str) {\n var hash = 2166136261;\n for (var i = 0; i < str.length; ++i) {\n hash += (hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24);\n hash ^= str.charCodeAt(i);\n }\n return hash >>> 0;\n }\n function zeroSize() {\n return {\n width: 0,\n height: 0,\n baseline: 0\n };\n }\n var DEFAULT_OPTIONS = { baselineMarkerSize: 1 };\n var defaultMeasureBox;\n if (typeof document !== 'undefined') {\n defaultMeasureBox = document.createElement('div');\n defaultMeasureBox.style.cssText = 'position: absolute !important; top: -4000px !important; width: auto !important; height: auto !important;' + 'padding: 0 !important; margin: 0 !important; border: 0 !important;' + 'line-height: normal !important; visibility: hidden !important; white-space: nowrap!important;';\n }\n var TextMetrics = kendo.Class.extend({\n init: function (options) {\n this._cache = new LRUCache(1000);\n this.options = $.extend({}, DEFAULT_OPTIONS, options);\n },\n measure: function (text, style, box) {\n if (!text) {\n return zeroSize();\n }\n var styleKey = objectKey(style);\n var cacheKey = hashKey(text + styleKey);\n var cachedResult = this._cache.get(cacheKey);\n if (cachedResult) {\n return cachedResult;\n }\n var size = zeroSize();\n var measureBox = box || defaultMeasureBox;\n var baselineMarker = this._baselineMarker().cloneNode(false);\n for (var key in style) {\n var value = style[key];\n if (typeof value !== 'undefined') {\n measureBox.style[key] = value;\n }\n }\n measureBox.textContent = text;\n measureBox.appendChild(baselineMarker);\n document.body.appendChild(measureBox);\n if (String(text).length) {\n size.width = measureBox.offsetWidth - this.options.baselineMarkerSize;\n size.height = measureBox.offsetHeight;\n size.baseline = baselineMarker.offsetTop + this.options.baselineMarkerSize;\n }\n if (size.width > 0 && size.height > 0) {\n this._cache.put(cacheKey, size);\n }\n measureBox.parentNode.removeChild(measureBox);\n return size;\n },\n _baselineMarker: function () {\n var marker = document.createElement('div');\n marker.style.cssText = 'display: inline-block; vertical-align: baseline;width: ' + this.options.baselineMarkerSize + 'px; height: ' + this.options.baselineMarkerSize + 'px;overflow: hidden;';\n return marker;\n }\n });\n TextMetrics.current = new TextMetrics();\n function measureText(text, style, measureBox) {\n return TextMetrics.current.measure(text, style, measureBox);\n }\n kendo.deepExtend(kendo.util, {\n LRUCache: LRUCache,\n TextMetrics: TextMetrics,\n measureText: measureText,\n objectKey: objectKey,\n hashKey: hashKey\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('util/main', ['kendo.core'], f);\n}(function () {\n (function () {\n var kendo = window.kendo, deepExtend = kendo.deepExtend;\n function sqr(value) {\n return value * value;\n }\n var now = Date.now;\n if (!now) {\n now = function () {\n return new Date().getTime();\n };\n }\n function renderSize(size) {\n if (typeof size !== 'string') {\n size += 'px';\n }\n return size;\n }\n function renderPos(pos) {\n var result = [];\n if (pos) {\n var parts = kendo.toHyphens(pos).split('-');\n for (var i = 0; i < parts.length; i++) {\n result.push('k-pos-' + parts[i]);\n }\n }\n return result.join(' ');\n }\n function arabicToRoman(n) {\n var literals = {\n 1: 'i',\n 10: 'x',\n 100: 'c',\n 2: 'ii',\n 20: 'xx',\n 200: 'cc',\n 3: 'iii',\n 30: 'xxx',\n 300: 'ccc',\n 4: 'iv',\n 40: 'xl',\n 400: 'cd',\n 5: 'v',\n 50: 'l',\n 500: 'd',\n 6: 'vi',\n 60: 'lx',\n 600: 'dc',\n 7: 'vii',\n 70: 'lxx',\n 700: 'dcc',\n 8: 'viii',\n 80: 'lxxx',\n 800: 'dccc',\n 9: 'ix',\n 90: 'xc',\n 900: 'cm',\n 1000: 'm'\n };\n var values = [\n 1000,\n 900,\n 800,\n 700,\n 600,\n 500,\n 400,\n 300,\n 200,\n 100,\n 90,\n 80,\n 70,\n 60,\n 50,\n 40,\n 30,\n 20,\n 10,\n 9,\n 8,\n 7,\n 6,\n 5,\n 4,\n 3,\n 2,\n 1\n ];\n var roman = '';\n while (n > 0) {\n if (n < values[0]) {\n values.shift();\n } else {\n roman += literals[values[0]];\n n -= values[0];\n }\n }\n return roman;\n }\n function romanToArabic(r) {\n r = r.toLowerCase();\n var digits = {\n i: 1,\n v: 5,\n x: 10,\n l: 50,\n c: 100,\n d: 500,\n m: 1000\n };\n var value = 0, prev = 0;\n for (var i = 0; i < r.length; ++i) {\n var v = digits[r.charAt(i)];\n if (!v) {\n return null;\n }\n value += v;\n if (v > prev) {\n value -= 2 * prev;\n }\n prev = v;\n }\n return value;\n }\n function memoize(f) {\n var cache = Object.create(null);\n return function () {\n var id = '';\n for (var i = arguments.length; --i >= 0;) {\n id += ':' + arguments[i];\n }\n return id in cache ? cache[id] : cache[id] = f.apply(this, arguments);\n };\n }\n function isUnicodeLetter(ch) {\n return RX_UNICODE_LETTER.test(ch);\n }\n deepExtend(kendo, {\n util: {\n now: now,\n renderPos: renderPos,\n renderSize: renderSize,\n sqr: sqr,\n romanToArabic: romanToArabic,\n arabicToRoman: arabicToRoman,\n memoize: memoize,\n isUnicodeLetter: isUnicodeLetter\n }\n });\n var RX_UNICODE_LETTER = new RegExp('[\\\\u0041-\\\\u005A\\\\u0061-\\\\u007A\\\\u00AA\\\\u00B5\\\\u00BA\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0620-\\\\u064A\\\\u066E\\\\u066F\\\\u0671-\\\\u06D3\\\\u06D5\\\\u06E5\\\\u06E6\\\\u06EE\\\\u06EF\\\\u06FA-\\\\u06FC\\\\u06FF\\\\u0710\\\\u0712-\\\\u072F\\\\u074D-\\\\u07A5\\\\u07B1\\\\u07CA-\\\\u07EA\\\\u07F4\\\\u07F5\\\\u07FA\\\\u0800-\\\\u0815\\\\u081A\\\\u0824\\\\u0828\\\\u0840-\\\\u0858\\\\u08A0-\\\\u08B2\\\\u0904-\\\\u0939\\\\u093D\\\\u0950\\\\u0958-\\\\u0961\\\\u0971-\\\\u0980\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BD\\\\u09CE\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E1\\\\u09F0\\\\u09F1\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A72-\\\\u0A74\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABD\\\\u0AD0\\\\u0AE0\\\\u0AE1\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3D\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B61\\\\u0B71\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BD0\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D\\\\u0C58\\\\u0C59\\\\u0C60\\\\u0C61\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBD\\\\u0CDE\\\\u0CE0\\\\u0CE1\\\\u0CF1\\\\u0CF2\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D\\\\u0D4E\\\\u0D60\\\\u0D61\\\\u0D7A-\\\\u0D7F\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0E01-\\\\u0E30\\\\u0E32\\\\u0E33\\\\u0E40-\\\\u0E46\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB0\\\\u0EB2\\\\u0EB3\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F40-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F88-\\\\u0F8C\\\\u1000-\\\\u102A\\\\u103F\\\\u1050-\\\\u1055\\\\u105A-\\\\u105D\\\\u1061\\\\u1065\\\\u1066\\\\u106E-\\\\u1070\\\\u1075-\\\\u1081\\\\u108E\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1711\\\\u1720-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1780-\\\\u17B3\\\\u17D7\\\\u17DC\\\\u1820-\\\\u1877\\\\u1880-\\\\u18A8\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1950-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19C1-\\\\u19C7\\\\u1A00-\\\\u1A16\\\\u1A20-\\\\u1A54\\\\u1AA7\\\\u1B05-\\\\u1B33\\\\u1B45-\\\\u1B4B\\\\u1B83-\\\\u1BA0\\\\u1BAE\\\\u1BAF\\\\u1BBA-\\\\u1BE5\\\\u1C00-\\\\u1C23\\\\u1C4D-\\\\u1C4F\\\\u1C5A-\\\\u1C7D\\\\u1CE9-\\\\u1CEC\\\\u1CEE-\\\\u1CF1\\\\u1CF5\\\\u1CF6\\\\u1D00-\\\\u1DBF\\\\u1E00-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CEE\\\\u2CF2\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D80-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u3029\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA66E\\\\uA67F-\\\\uA69D\\\\uA6A0-\\\\uA6EF\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA801\\\\uA803-\\\\uA805\\\\uA807-\\\\uA80A\\\\uA80C-\\\\uA822\\\\uA840-\\\\uA873\\\\uA882-\\\\uA8B3\\\\uA8F2-\\\\uA8F7\\\\uA8FB\\\\uA90A-\\\\uA925\\\\uA930-\\\\uA946\\\\uA960-\\\\uA97C\\\\uA984-\\\\uA9B2\\\\uA9CF\\\\uA9E0-\\\\uA9E4\\\\uA9E6-\\\\uA9EF\\\\uA9FA-\\\\uA9FE\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAA60-\\\\uAA76\\\\uAA7A\\\\uAA7E-\\\\uAAAF\\\\uAAB1\\\\uAAB5\\\\uAAB6\\\\uAAB9-\\\\uAABD\\\\uAAC0\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEA\\\\uAAF2-\\\\uAAF4\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABE2\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D\\\\uFB1F-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]');\n }());\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/location', [\n 'kendo.drawing',\n 'util/main'\n ], f);\n}(function () {\n (function ($, undefined) {\n var math = Math, abs = math.abs, atan = math.atan, atan2 = math.atan2, cos = math.cos, max = math.max, min = math.min, sin = math.sin, tan = math.tan, kendo = window.kendo, Class = kendo.Class, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, util = kendo.drawing.util, defined = util.defined, deg = util.deg, rad = util.rad, round = util.round, valueOrDefault = util.valueOrDefault, sqr = kendo.util.sqr;\n var Location = Class.extend({\n init: function (lat, lng) {\n if (arguments.length === 1) {\n this.lat = lat[0];\n this.lng = lat[1];\n } else {\n this.lat = lat;\n this.lng = lng;\n }\n },\n DISTANCE_ITERATIONS: 100,\n DISTANCE_CONVERGENCE: 1e-12,\n DISTANCE_PRECISION: 2,\n FORMAT: '{0:N6},{1:N6}',\n toArray: function () {\n return [\n this.lat,\n this.lng\n ];\n },\n equals: function (loc) {\n return loc && loc.lat === this.lat && loc.lng === this.lng;\n },\n clone: function () {\n return new Location(this.lat, this.lng);\n },\n round: function (precision) {\n this.lng = round(this.lng, precision);\n this.lat = round(this.lat, precision);\n return this;\n },\n wrap: function () {\n this.lng = this.lng % 180;\n this.lat = this.lat % 90;\n return this;\n },\n distanceTo: function (dest, datum) {\n return this.greatCircleTo(dest, datum).distance;\n },\n destination: function (distance, bearing, datum) {\n bearing = rad(bearing);\n datum = datum || dataviz.map.datums.WGS84;\n var fromLat = rad(this.lat);\n var fromLng = rad(this.lng);\n var dToR = distance / kendo.dataviz.map.datums.WGS84.a;\n var lat = math.asin(sin(fromLat) * cos(dToR) + cos(fromLat) * sin(dToR) * cos(bearing));\n var lng = fromLng + atan2(sin(bearing) * sin(dToR) * cos(fromLat), cos(dToR) - sin(fromLat) * sin(lat));\n return new Location(deg(lat), deg(lng));\n },\n greatCircleTo: function (dest, datum) {\n dest = Location.create(dest);\n datum = datum || dataviz.map.datums.WGS84;\n if (!dest || this.clone().round(8).equals(dest.clone().round(8))) {\n return {\n distance: 0,\n azimuthFrom: 0,\n azimuthTo: 0\n };\n }\n var a = datum.a;\n var b = datum.b;\n var f = datum.f;\n var L = rad(dest.lng - this.lng);\n var U1 = atan((1 - f) * tan(rad(this.lat)));\n var sinU1 = sin(U1);\n var cosU1 = cos(U1);\n var U2 = atan((1 - f) * tan(rad(dest.lat)));\n var sinU2 = sin(U2);\n var cosU2 = cos(U2);\n var lambda = L;\n var prevLambda;\n var i = this.DISTANCE_ITERATIONS;\n var converged = false;\n var sinLambda;\n var cosLambda;\n var sino;\n var cosA2;\n var coso;\n var cos2om;\n var sigma;\n while (!converged && i-- > 0) {\n sinLambda = sin(lambda);\n cosLambda = cos(lambda);\n sino = math.sqrt(sqr(cosU2 * sinLambda) + sqr(cosU1 * sinU2 - sinU1 * cosU2 * cosLambda));\n coso = sinU1 * sinU2 + cosU1 * cosU2 * cosLambda;\n sigma = atan2(sino, coso);\n var sinA = cosU1 * cosU2 * sinLambda / sino;\n cosA2 = 1 - sqr(sinA);\n cos2om = 0;\n if (cosA2 !== 0) {\n cos2om = coso - 2 * sinU1 * sinU2 / cosA2;\n }\n prevLambda = lambda;\n var C = f / 16 * cosA2 * (4 + f * (4 - 3 * cosA2));\n lambda = L + (1 - C) * f * sinA * (sigma + C * sino * (cos2om + C * coso * (-1 + 2 * sqr(cos2om))));\n converged = abs(lambda - prevLambda) <= this.DISTANCE_CONVERGENCE;\n }\n var u2 = cosA2 * (sqr(a) - sqr(b)) / sqr(b);\n var A = 1 + u2 / 16384 * (4096 + u2 * (-768 + u2 * (320 - 175 * u2)));\n var B = u2 / 1024 * (256 + u2 * (-128 + u2 * (74 - 47 * u2)));\n var deltao = B * sino * (cos2om + B / 4 * (coso * (-1 + 2 * sqr(cos2om)) - B / 6 * cos2om * (-3 + 4 * sqr(sino)) * (-3 + 4 * sqr(cos2om))));\n var azimuthFrom = atan2(cosU2 * sinLambda, cosU1 * sinU2 - sinU1 * cosU2 * cosLambda);\n var azimuthTo = atan2(cosU1 * sinLambda, -sinU1 * cosU2 + cosU1 * sinU2 * cosLambda);\n return {\n distance: round(b * A * (sigma - deltao), this.DISTANCE_PRECISION),\n azimuthFrom: deg(azimuthFrom),\n azimuthTo: deg(azimuthTo)\n };\n }\n });\n Location.fn.toString = function () {\n return kendo.format(this.FORMAT, this.lat, this.lng);\n };\n Location.fromLngLat = function (ll) {\n return new Location(ll[1], ll[0]);\n };\n Location.fromLatLng = function (ll) {\n return new Location(ll[0], ll[1]);\n };\n Location.create = function (a, b) {\n if (defined(a)) {\n if (a instanceof Location) {\n return a.clone();\n } else if (arguments.length === 1 && a.length === 2) {\n return Location.fromLatLng(a);\n } else {\n return new Location(a, b);\n }\n }\n };\n var Extent = Class.extend({\n init: function (nw, se) {\n nw = Location.create(nw);\n se = Location.create(se);\n if (nw.lng + 180 > se.lng + 180 && nw.lat + 90 < se.lat + 90) {\n this.se = nw;\n this.nw = se;\n } else {\n this.se = se;\n this.nw = nw;\n }\n },\n contains: function (loc) {\n var nw = this.nw, se = this.se, lng = valueOrDefault(loc.lng, loc[1]), lat = valueOrDefault(loc.lat, loc[0]);\n return loc && lng + 180 >= nw.lng + 180 && lng + 180 <= se.lng + 180 && lat + 90 >= se.lat + 90 && lat + 90 <= nw.lat + 90;\n },\n center: function () {\n var nw = this.nw;\n var se = this.se;\n var lng = nw.lng + (se.lng - nw.lng) / 2;\n var lat = nw.lat + (se.lat - nw.lat) / 2;\n return new Location(lat, lng);\n },\n containsAny: function (locs) {\n var result = false;\n for (var i = 0; i < locs.length; i++) {\n result = result || this.contains(locs[i]);\n }\n return result;\n },\n include: function (loc) {\n var nw = this.nw, se = this.se, lng = valueOrDefault(loc.lng, loc[1]), lat = valueOrDefault(loc.lat, loc[0]);\n nw.lng = min(nw.lng, lng);\n nw.lat = max(nw.lat, lat);\n se.lng = max(se.lng, lng);\n se.lat = min(se.lat, lat);\n },\n includeAll: function (locs) {\n for (var i = 0; i < locs.length; i++) {\n this.include(locs[i]);\n }\n },\n edges: function () {\n var nw = this.nw, se = this.se;\n return {\n nw: this.nw,\n ne: new Location(nw.lat, se.lng),\n se: this.se,\n sw: new Location(se.lat, nw.lng)\n };\n },\n toArray: function () {\n var nw = this.nw, se = this.se;\n return [\n nw,\n new Location(nw.lat, se.lng),\n se,\n new Location(se.lat, nw.lng)\n ];\n },\n overlaps: function (extent) {\n return this.containsAny(extent.toArray()) || extent.containsAny(this.toArray());\n }\n });\n Extent.World = new Extent([\n 90,\n -180\n ], [\n -90,\n 180\n ]);\n Extent.create = function (a, b) {\n if (a instanceof Extent) {\n return a;\n } else if (a && b) {\n return new Extent(a, b);\n } else if (a && a.length === 4 && !b) {\n return new Extent([\n a[0],\n a[1]\n ], [\n a[2],\n a[3]\n ]);\n }\n };\n deepExtend(dataviz, {\n map: {\n Extent: Extent,\n Location: Location\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/attribution', ['kendo.drawing'], f);\n}(function () {\n (function () {\n var kendo = window.kendo, Widget = kendo.ui.Widget, template = kendo.template, util = kendo.drawing.util, valueOrDefault = util.valueOrDefault, defined = util.defined;\n var Attribution = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this._initOptions(options);\n this.items = [];\n this.element.addClass('k-widget k-attribution');\n },\n options: {\n name: 'Attribution',\n separator: ' | ',\n itemTemplate: '#= text #'\n },\n filter: function (extent, zoom) {\n this._extent = extent;\n this._zoom = zoom;\n this._render();\n },\n add: function (item) {\n if (defined(item)) {\n if (typeof item === 'string') {\n item = { text: item };\n }\n this.items.push(item);\n this._render();\n }\n },\n remove: function (text) {\n var result = [];\n for (var i = 0; i < this.items.length; i++) {\n var item = this.items[i];\n if (item.text !== text) {\n result.push(item);\n }\n }\n this.items = result;\n this._render();\n },\n clear: function () {\n this.items = [];\n this.element.empty();\n },\n _render: function () {\n var result = [];\n var itemTemplate = template(this.options.itemTemplate);\n for (var i = 0; i < this.items.length; i++) {\n var item = this.items[i];\n var text = this._itemText(item);\n if (text !== '') {\n result.push(itemTemplate({ text: text }));\n }\n }\n if (result.length > 0) {\n this.element.empty().append(result.join(this.options.separator)).show();\n } else {\n this.element.hide();\n }\n },\n _itemText: function (item) {\n var text = '';\n var inZoomLevel = this._inZoomLevel(item.minZoom, item.maxZoom);\n var inArea = this._inArea(item.extent);\n if (inZoomLevel && inArea) {\n text += item.text;\n }\n return text;\n },\n _inZoomLevel: function (min, max) {\n var result = true;\n min = valueOrDefault(min, -Number.MAX_VALUE);\n max = valueOrDefault(max, Number.MAX_VALUE);\n result = this._zoom > min && this._zoom < max;\n return result;\n },\n _inArea: function (area) {\n var result = true;\n if (area) {\n result = area.contains(this._extent);\n }\n return result;\n }\n });\n kendo.dataviz.ui.plugin(Attribution);\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/navigator', ['kendo.core'], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo;\n var Widget = kendo.ui.Widget;\n var keys = kendo.keys;\n var proxy = $.proxy;\n var NS = '.kendoNavigator';\n function button(dir) {\n return kendo.format('', dir);\n }\n var BUTTONS = button('up') + button('right') + button('down') + button('left');\n var Navigator = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this._initOptions(options);\n this.element.addClass('k-widget k-header k-shadow k-navigator').append(BUTTONS).on('click' + NS, '.k-button', proxy(this, '_click'));\n var parentElement = this.element.parent().closest('[' + kendo.attr('role') + ']');\n this._keyroot = parentElement.length > 0 ? parentElement : this.element;\n this._tabindex(this._keyroot);\n this._keydown = proxy(this._keydown, this);\n this._keyroot.on('keydown', this._keydown);\n },\n options: {\n name: 'Navigator',\n panStep: 1\n },\n events: ['pan'],\n dispose: function () {\n this._keyroot.off('keydown', this._keydown);\n },\n _pan: function (x, y) {\n var panStep = this.options.panStep;\n this.trigger('pan', {\n x: x * panStep,\n y: y * panStep\n });\n },\n _click: function (e) {\n var x = 0;\n var y = 0;\n var button = $(e.currentTarget);\n if (button.is('.k-navigator-up')) {\n y = 1;\n } else if (button.is('.k-navigator-down')) {\n y = -1;\n } else if (button.is('.k-navigator-right')) {\n x = 1;\n } else if (button.is('.k-navigator-left')) {\n x = -1;\n }\n this._pan(x, y);\n e.preventDefault();\n },\n _keydown: function (e) {\n switch (e.which) {\n case keys.UP:\n this._pan(0, 1);\n e.preventDefault();\n break;\n case keys.DOWN:\n this._pan(0, -1);\n e.preventDefault();\n break;\n case keys.RIGHT:\n this._pan(1, 0);\n e.preventDefault();\n break;\n case keys.LEFT:\n this._pan(-1, 0);\n e.preventDefault();\n break;\n }\n }\n });\n kendo.dataviz.ui.plugin(Navigator);\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/zoom', ['kendo.core'], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo;\n var Widget = kendo.ui.Widget;\n var keys = kendo.keys;\n var proxy = $.proxy;\n function button(dir, iconClass) {\n return kendo.format('', dir, iconClass);\n }\n var NS = '.kendoZoomControl';\n var BUTTONS = button('in', 'k-i-plus') + button('out', 'k-i-minus');\n var PLUS = 187;\n var MINUS = 189;\n var FF_PLUS = 61;\n var FF_MINUS = 173;\n var ZoomControl = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this._initOptions(options);\n this.element.addClass('k-widget k-zoom-control k-button-wrap k-buttons-horizontal k-button-group k-group-horizontal').append(BUTTONS).on('click' + NS, '.k-button', proxy(this, '_click'));\n var parentElement = this.element.parent().closest('[' + kendo.attr('role') + ']');\n this._keyroot = parentElement.length > 0 ? parentElement : this.element;\n this._tabindex(this._keyroot);\n this._keydown = proxy(this._keydown, this);\n this._keyroot.on('keydown', this._keydown);\n },\n options: {\n name: 'ZoomControl',\n zoomStep: 1\n },\n events: ['change'],\n _change: function (dir) {\n var zoomStep = this.options.zoomStep;\n this.trigger('change', { delta: dir * zoomStep });\n },\n _click: function (e) {\n var button = $(e.currentTarget);\n var dir = 1;\n if (button.is('.k-zoom-out')) {\n dir = -1;\n }\n this._change(dir);\n e.preventDefault();\n },\n _keydown: function (e) {\n switch (e.which) {\n case keys.NUMPAD_PLUS:\n case PLUS:\n case FF_PLUS:\n this._change(1);\n break;\n case keys.NUMPAD_MINUS:\n case MINUS:\n case FF_MINUS:\n this._change(-1);\n break;\n }\n }\n });\n kendo.dataviz.ui.plugin(ZoomControl);\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/crs', [\n 'dataviz/map/location',\n 'kendo.drawing'\n ], f);\n}(function () {\n (function ($, undefined) {\n var math = Math, atan = math.atan, exp = math.exp, pow = math.pow, sin = math.sin, log = math.log, tan = math.tan, kendo = window.kendo, Class = kendo.Class, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, g = kendo.geometry, Point = g.Point, map = dataviz.map, Location = map.Location, util = kendo.drawing.util, rad = util.rad, deg = util.deg, limit = util.limitValue;\n var PI = math.PI, PI_DIV_2 = PI / 2, PI_DIV_4 = PI / 4, DEG_TO_RAD = PI / 180;\n var WGS84 = {\n a: 6378137,\n b: 6356752.314245179,\n f: 0.0033528106647474805,\n e: 0.08181919084262149\n };\n var Mercator = Class.extend({\n init: function (options) {\n this._initOptions(options);\n },\n MAX_LNG: 180,\n MAX_LAT: 85.0840590501,\n INVERSE_ITERATIONS: 15,\n INVERSE_CONVERGENCE: 1e-12,\n options: {\n centralMeridian: 0,\n datum: WGS84\n },\n forward: function (loc, clamp) {\n var proj = this, options = proj.options, datum = options.datum, r = datum.a, lng0 = options.centralMeridian, lat = limit(loc.lat, -proj.MAX_LAT, proj.MAX_LAT), lng = clamp ? limit(loc.lng, -proj.MAX_LNG, proj.MAX_LNG) : loc.lng, x = rad(lng - lng0) * r, y = proj._projectLat(lat);\n return new Point(x, y);\n },\n _projectLat: function (lat) {\n var datum = this.options.datum, ecc = datum.e, r = datum.a, y = rad(lat), ts = tan(PI_DIV_4 + y / 2), con = ecc * sin(y), p = pow((1 - con) / (1 + con), ecc / 2);\n return r * log(ts * p);\n },\n inverse: function (point, clamp) {\n var proj = this, options = proj.options, datum = options.datum, r = datum.a, lng0 = options.centralMeridian, lng = point.x / (DEG_TO_RAD * r) + lng0, lat = limit(proj._inverseY(point.y), -proj.MAX_LAT, proj.MAX_LAT);\n if (clamp) {\n lng = limit(lng, -proj.MAX_LNG, proj.MAX_LNG);\n }\n return new Location(lat, lng);\n },\n _inverseY: function (y) {\n var proj = this, datum = proj.options.datum, r = datum.a, ecc = datum.e, ecch = ecc / 2, ts = exp(-y / r), phi = PI_DIV_2 - 2 * atan(ts), i;\n for (i = 0; i <= proj.INVERSE_ITERATIONS; i++) {\n var con = ecc * sin(phi), p = pow((1 - con) / (1 + con), ecch), dphi = PI_DIV_2 - 2 * atan(ts * p) - phi;\n phi += dphi;\n if (math.abs(dphi) <= proj.INVERSE_CONVERGENCE) {\n break;\n }\n }\n return deg(phi);\n }\n });\n var SphericalMercator = Mercator.extend({\n MAX_LAT: 85.0511287798,\n _projectLat: function (lat) {\n var r = this.options.datum.a, y = rad(lat), ts = tan(PI_DIV_4 + y / 2);\n return r * log(ts);\n },\n _inverseY: function (y) {\n var r = this.options.datum.a, ts = exp(-y / r);\n return deg(PI_DIV_2 - 2 * atan(ts));\n }\n });\n var Equirectangular = Class.extend({\n forward: function (loc) {\n return new Point(loc.lng, loc.lat);\n },\n inverse: function (point) {\n return new Location(point.y, point.x);\n }\n });\n var EPSG3857 = Class.extend({\n init: function () {\n var crs = this, proj = crs._proj = new SphericalMercator();\n var c = this.c = 2 * PI * proj.options.datum.a;\n this._tm = g.transform().translate(0.5, 0.5).scale(1 / c, -1 / c);\n this._itm = g.transform().scale(c, -c).translate(-0.5, -0.5);\n },\n toPoint: function (loc, scale, clamp) {\n var point = this._proj.forward(loc, clamp);\n return point.transform(this._tm).scale(scale || 1);\n },\n toLocation: function (point, scale, clamp) {\n point = point.clone().scale(1 / (scale || 1)).transform(this._itm);\n return this._proj.inverse(point, clamp);\n }\n });\n var EPSG3395 = Class.extend({\n init: function () {\n this._proj = new Mercator();\n },\n toPoint: function (loc) {\n return this._proj.forward(loc);\n },\n toLocation: function (point) {\n return this._proj.inverse(point);\n }\n });\n var EPSG4326 = Class.extend({\n init: function () {\n this._proj = new Equirectangular();\n },\n toPoint: function (loc) {\n return this._proj.forward(loc);\n },\n toLocation: function (point) {\n return this._proj.inverse(point);\n }\n });\n deepExtend(dataviz, {\n map: {\n crs: {\n EPSG3395: EPSG3395,\n EPSG3857: EPSG3857,\n EPSG4326: EPSG4326\n },\n datums: { WGS84: WGS84 },\n projections: {\n Equirectangular: Equirectangular,\n Mercator: Mercator,\n SphericalMercator: SphericalMercator\n }\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/base', [\n 'kendo.core',\n 'dataviz/map/location'\n ], f);\n}(function () {\n (function ($, undefined) {\n var proxy = $.proxy, kendo = window.kendo, Class = kendo.Class, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, Extent = dataviz.map.Extent, util = kendo.drawing.util, defined = util.defined;\n var Layer = Class.extend({\n init: function (map, options) {\n this._initOptions(options);\n this.map = map;\n this.element = $('
').css({\n 'zIndex': this.options.zIndex,\n 'opacity': this.options.opacity\n }).appendTo(map.scrollElement);\n this._beforeReset = proxy(this._beforeReset, this);\n this._reset = proxy(this._reset, this);\n this._resize = proxy(this._resize, this);\n this._panEnd = proxy(this._panEnd, this);\n this._activate();\n this._updateAttribution();\n },\n destroy: function () {\n this._deactivate();\n },\n show: function () {\n this.reset();\n this._activate();\n this._applyExtent(true);\n },\n hide: function () {\n this._deactivate();\n this._setVisibility(false);\n },\n reset: function () {\n this._beforeReset();\n this._reset();\n },\n _reset: function () {\n this._applyExtent();\n },\n _beforeReset: $.noop,\n _resize: $.noop,\n _panEnd: function () {\n this._applyExtent();\n },\n _applyExtent: function () {\n var options = this.options;\n var zoom = this.map.zoom();\n var matchMinZoom = !defined(options.minZoom) || zoom >= options.minZoom;\n var matchMaxZoom = !defined(options.maxZoom) || zoom <= options.maxZoom;\n var extent = Extent.create(options.extent);\n var inside = !extent || extent.overlaps(this.map.extent());\n this._setVisibility(matchMinZoom && matchMaxZoom && inside);\n },\n _setVisibility: function (visible) {\n this.element.css('display', visible ? '' : 'none');\n },\n _activate: function () {\n var map = this.map;\n map.bind('beforeReset', this._beforeReset);\n map.bind('reset', this._reset);\n map.bind('resize', this._resize);\n map.bind('panEnd', this._panEnd);\n },\n _deactivate: function () {\n var map = this.map;\n map.unbind('beforeReset', this._beforeReset);\n map.unbind('reset', this._reset);\n map.unbind('resize', this._resize);\n map.unbind('panEnd', this._panEnd);\n },\n _updateAttribution: function () {\n var attr = this.map.attribution;\n if (attr) {\n attr.add(this.options.attribution);\n }\n }\n });\n deepExtend(dataviz, { map: { layers: { Layer: Layer } } });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/shape', [\n 'dataviz/map/layers/base',\n 'dataviz/map/location'\n ], f);\n}(function () {\n (function ($, undefined) {\n var proxy = $.proxy, kendo = window.kendo, Class = kendo.Class, DataSource = kendo.data.DataSource, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, g = kendo.geometry, d = kendo.drawing, Group = d.Group, last = d.util.last, defined = d.util.defined, map = dataviz.map, Location = map.Location, Layer = map.layers.Layer;\n var ShapeLayer = Layer.extend({\n init: function (map, options) {\n this._pan = proxy(this._pan, this);\n Layer.fn.init.call(this, map, options);\n this.surface = d.Surface.create(this.element, {\n width: map.scrollElement.width(),\n height: map.scrollElement.height()\n });\n this._initRoot();\n this.movable = new kendo.ui.Movable(this.surface.element);\n this._markers = [];\n this._click = this._handler('shapeClick');\n this.surface.bind('click', this._click);\n this._mouseenter = this._handler('shapeMouseEnter');\n this.surface.bind('mouseenter', this._mouseenter);\n this._mouseleave = this._handler('shapeMouseLeave');\n this.surface.bind('mouseleave', this._mouseleave);\n this._initDataSource();\n },\n options: { autoBind: true },\n destroy: function () {\n Layer.fn.destroy.call(this);\n this.surface.destroy();\n this.dataSource.unbind('change', this._dataChange);\n },\n setDataSource: function (dataSource) {\n if (this.dataSource) {\n this.dataSource.unbind('change', this._dataChange);\n }\n this.dataSource = kendo.data.DataSource.create(dataSource);\n this.dataSource.bind('change', this._dataChange);\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n _reset: function () {\n Layer.fn._reset.call(this);\n this._translateSurface();\n if (this._data) {\n this._load(this._data);\n }\n },\n _initRoot: function () {\n this._root = new Group();\n this.surface.draw(this._root);\n },\n _beforeReset: function () {\n this.surface.clear();\n this._initRoot();\n },\n _resize: function () {\n this.surface.size(this.map.size());\n },\n _initDataSource: function () {\n var dsOptions = this.options.dataSource;\n this._dataChange = proxy(this._dataChange, this);\n this.dataSource = DataSource.create(dsOptions).bind('change', this._dataChange);\n if (dsOptions && this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n _dataChange: function (e) {\n this._data = e.sender.view();\n this._load(this._data);\n },\n _load: function (data) {\n this._clearMarkers();\n if (!this._loader) {\n this._loader = new GeoJSONLoader(this.map, this.options.style, this);\n }\n var container = new Group();\n for (var i = 0; i < data.length; i++) {\n var shape = this._loader.parse(data[i]);\n if (shape) {\n container.append(shape);\n }\n }\n this._root.clear();\n this._root.append(container);\n },\n shapeCreated: function (shape) {\n var cancelled = false;\n if (shape instanceof d.Circle) {\n cancelled = defined(this._createMarker(shape));\n }\n if (!cancelled) {\n var args = {\n layer: this,\n shape: shape\n };\n cancelled = this.map.trigger('shapeCreated', args);\n }\n return cancelled;\n },\n featureCreated: function (e) {\n e.layer = this;\n this.map.trigger('shapeFeatureCreated', e);\n },\n _createMarker: function (shape) {\n var marker = this.map.markers.bind({ location: shape.location }, shape.dataItem);\n if (marker) {\n this._markers.push(marker);\n }\n return marker;\n },\n _clearMarkers: function () {\n for (var i = 0; i < this._markers.length; i++) {\n this.map.markers.remove(this._markers[i]);\n }\n this._markers = [];\n },\n _pan: function () {\n if (!this._panning) {\n this._panning = true;\n this.surface.suspendTracking();\n }\n },\n _panEnd: function (e) {\n Layer.fn._panEnd.call(this, e);\n this._translateSurface();\n this.surface.resumeTracking();\n this._panning = false;\n },\n _translateSurface: function () {\n var map = this.map;\n var nw = map.locationToView(map.extent().nw);\n if (this.surface.translate) {\n this.surface.translate(nw);\n this.movable.moveTo({\n x: nw.x,\n y: nw.y\n });\n }\n },\n _handler: function (event) {\n var layer = this;\n return function (e) {\n if (e.element) {\n var args = {\n layer: layer,\n shape: e.element,\n originalEvent: e.originalEvent\n };\n layer.map.trigger(event, args);\n }\n };\n },\n _activate: function () {\n Layer.fn._activate.call(this);\n this.map.bind('pan', this._pan);\n },\n _deactivate: function () {\n Layer.fn._deactivate.call(this);\n this.map.unbind('pan', this._pan);\n }\n });\n var GeoJSONLoader = Class.extend({\n init: function (locator, defaultStyle, observer) {\n this.observer = observer;\n this.locator = locator;\n this.style = defaultStyle;\n },\n parse: function (item) {\n var root = new Group();\n var unwrap = true;\n if (item.type === 'Feature') {\n unwrap = false;\n this._loadGeometryTo(root, item.geometry, item);\n this._featureCreated(root, item);\n } else {\n this._loadGeometryTo(root, item, item);\n }\n if (unwrap && root.children.length < 2) {\n root = root.children[0];\n }\n return root;\n },\n _shapeCreated: function (shape) {\n var cancelled = false;\n if (this.observer && this.observer.shapeCreated) {\n cancelled = this.observer.shapeCreated(shape);\n }\n return cancelled;\n },\n _featureCreated: function (group, dataItem) {\n if (this.observer && this.observer.featureCreated) {\n this.observer.featureCreated({\n group: group,\n dataItem: dataItem,\n properties: dataItem.properties\n });\n }\n },\n _loadGeometryTo: function (container, geometry, dataItem) {\n var coords = geometry.coordinates;\n var i;\n var path;\n switch (geometry.type) {\n case 'LineString':\n path = this._loadPolygon(container, [coords], dataItem);\n this._setLineFill(path);\n break;\n case 'MultiLineString':\n for (i = 0; i < coords.length; i++) {\n path = this._loadPolygon(container, [coords[i]], dataItem);\n this._setLineFill(path);\n }\n break;\n case 'Polygon':\n this._loadPolygon(container, coords, dataItem);\n break;\n case 'MultiPolygon':\n for (i = 0; i < coords.length; i++) {\n this._loadPolygon(container, coords[i], dataItem);\n }\n break;\n case 'Point':\n this._loadPoint(container, coords, dataItem);\n break;\n case 'MultiPoint':\n for (i = 0; i < coords.length; i++) {\n this._loadPoint(container, coords[i], dataItem);\n }\n break;\n }\n },\n _setLineFill: function (path) {\n var segments = path.segments;\n if (segments.length < 4 || !segments[0].anchor().equals(last(segments).anchor())) {\n path.options.fill = null;\n }\n },\n _loadShape: function (container, shape) {\n if (!this._shapeCreated(shape)) {\n container.append(shape);\n }\n return shape;\n },\n _loadPolygon: function (container, rings, dataItem) {\n var shape = this._buildPolygon(rings);\n shape.dataItem = dataItem;\n return this._loadShape(container, shape);\n },\n _buildPolygon: function (rings) {\n var type = rings.length > 1 ? d.MultiPath : d.Path;\n var path = new type(this.style);\n for (var i = 0; i < rings.length; i++) {\n for (var j = 0; j < rings[i].length; j++) {\n var point = this.locator.locationToView(Location.fromLngLat(rings[i][j]));\n if (j === 0) {\n path.moveTo(point.x, point.y);\n } else {\n path.lineTo(point.x, point.y);\n }\n }\n }\n return path;\n },\n _loadPoint: function (container, coords, dataItem) {\n var location = Location.fromLngLat(coords);\n var point = this.locator.locationToView(location);\n var circle = new g.Circle(point, 10);\n var shape = new d.Circle(circle, this.style);\n shape.dataItem = dataItem;\n shape.location = location;\n return this._loadShape(container, shape);\n }\n });\n deepExtend(kendo.data, {\n schemas: {\n geojson: {\n type: 'json',\n data: function (data) {\n if (data.type === 'FeatureCollection') {\n return data.features;\n }\n if (data.type === 'GeometryCollection') {\n return data.geometries;\n }\n return data;\n }\n }\n },\n transports: { geojson: { read: { dataType: 'json' } } }\n });\n deepExtend(dataviz, {\n map: {\n layers: {\n shape: ShapeLayer,\n ShapeLayer: ShapeLayer\n },\n GeoJSONLoader: GeoJSONLoader\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/bubble', ['dataviz/map/layers/shape'], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, getter = kendo.getter, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, g = kendo.geometry, d = kendo.drawing, util = d.util, defined = util.defined, map = dataviz.map, Location = map.Location, ShapeLayer = map.layers.ShapeLayer;\n var BubbleLayer = ShapeLayer.extend({\n options: {\n autoBind: true,\n locationField: 'location',\n valueField: 'value',\n minSize: 0,\n maxSize: 100,\n scale: 'sqrt',\n symbol: 'circle'\n },\n _load: function (data) {\n this.surface.clear();\n if (data.length === 0) {\n return;\n }\n var opt = this.options;\n var getValue = getter(opt.valueField);\n data = data.slice(0);\n data.sort(function (a, b) {\n return getValue(b) - getValue(a);\n });\n var scaleType = this._scaleType();\n var scale;\n for (var i = 0; i < data.length; i++) {\n var dataItem = data[i];\n var location = getter(opt.locationField)(dataItem);\n var value = getter(opt.valueField)(dataItem);\n if (defined(location) && defined(value)) {\n if (!scale) {\n scale = new scaleType([\n 0,\n value\n ], [\n opt.minSize,\n opt.maxSize\n ]);\n }\n location = Location.create(location);\n var center = this.map.locationToView(location);\n var size = scale.map(value);\n var symbol = this._createSymbol({\n center: center,\n size: size,\n style: opt.style,\n dataItem: dataItem,\n location: location\n });\n symbol.dataItem = dataItem;\n symbol.location = location;\n symbol.value = value;\n this._drawSymbol(symbol);\n }\n }\n },\n _scaleType: function () {\n var scale = this.options.scale;\n if (kendo.isFunction(scale)) {\n return scale;\n }\n return dataviz.map.scales[scale];\n },\n _createSymbol: function (args) {\n var symbol = this.options.symbol;\n if (!kendo.isFunction(symbol)) {\n symbol = dataviz.map.symbols[symbol];\n }\n return symbol(args);\n },\n _drawSymbol: function (shape) {\n var args = {\n layer: this,\n shape: shape\n };\n var cancelled = this.map.trigger('shapeCreated', args);\n if (!cancelled) {\n this.surface.draw(shape);\n }\n }\n });\n var SqrtScale = kendo.Class.extend({\n init: function (domain, range) {\n this._domain = domain;\n this._range = range;\n var domainRange = Math.sqrt(domain[1]) - Math.sqrt(domain[0]);\n var outputRange = range[1] - range[0];\n this._ratio = outputRange / domainRange;\n },\n map: function (value) {\n var rel = (Math.sqrt(value) - Math.sqrt(this._domain[0])) * this._ratio;\n return this._range[0] + rel;\n }\n });\n var Symbols = {\n circle: function (args) {\n var geo = new g.Circle(args.center, args.size / 2);\n return new d.Circle(geo, args.style);\n },\n square: function (args) {\n var path = new d.Path(args.style);\n var halfSize = args.size / 2;\n var center = args.center;\n path.moveTo(center.x - halfSize, center.y - halfSize).lineTo(center.x + halfSize, center.y - halfSize).lineTo(center.x + halfSize, center.y + halfSize).lineTo(center.x - halfSize, center.y + halfSize).close();\n return path;\n }\n };\n deepExtend(dataviz, {\n map: {\n layers: {\n bubble: BubbleLayer,\n BubbleLayer: BubbleLayer\n },\n scales: { sqrt: SqrtScale },\n symbols: Symbols\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/tile', [\n 'dataviz/map/layers/base',\n 'dataviz/map/location'\n ], f);\n}(function () {\n (function ($, undefined) {\n var math = Math, proxy = $.proxy, kendo = window.kendo, Class = kendo.Class, template = kendo.template, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, g = kendo.geometry, Point = g.Point, Layer = dataviz.map.layers.Layer, util = kendo.util, renderSize = util.renderSize, drawingUtil = kendo.drawing.util, round = drawingUtil.round, limit = drawingUtil.limitValue;\n var TileLayer = Layer.extend({\n init: function (map, options) {\n Layer.fn.init.call(this, map, options);\n if (typeof this.options.subdomains === 'string') {\n this.options.subdomains = this.options.subdomains.split('');\n }\n var viewType = this._viewType();\n this._view = new viewType(this.element, this.options);\n },\n destroy: function () {\n Layer.fn.destroy.call(this);\n this._view.destroy();\n this._view = null;\n },\n _beforeReset: function () {\n var map = this.map;\n var origin = map.locationToLayer(map.extent().nw).round();\n this._view.viewOrigin(origin);\n },\n _reset: function () {\n Layer.fn._reset.call(this);\n this._updateView();\n this._view.reset();\n },\n _viewType: function () {\n return TileView;\n },\n _activate: function () {\n Layer.fn._activate.call(this);\n if (!kendo.support.mobileOS) {\n if (!this._pan) {\n this._pan = kendo.throttle(proxy(this._render, this), 100);\n }\n this.map.bind('pan', this._pan);\n }\n },\n _deactivate: function () {\n Layer.fn._deactivate.call(this);\n if (this._pan) {\n this.map.unbind('pan', this._pan);\n }\n },\n _updateView: function () {\n var view = this._view, map = this.map, extent = map.extent(), extentToPoint = {\n nw: map.locationToLayer(extent.nw).round(),\n se: map.locationToLayer(extent.se).round()\n };\n view.center(map.locationToLayer(map.center()));\n view.extent(extentToPoint);\n view.zoom(map.zoom());\n },\n _resize: function () {\n this._render();\n },\n _panEnd: function (e) {\n Layer.fn._panEnd.call(this, e);\n this._render();\n },\n _render: function () {\n this._updateView();\n this._view.render();\n }\n });\n var TileView = Class.extend({\n init: function (element, options) {\n this.element = element;\n this._initOptions(options);\n this.pool = new TilePool();\n },\n options: {\n tileSize: 256,\n subdomains: [\n 'a',\n 'b',\n 'c'\n ],\n urlTemplate: ''\n },\n center: function (center) {\n this._center = center;\n },\n extent: function (extent) {\n this._extent = extent;\n },\n viewOrigin: function (origin) {\n this._viewOrigin = origin;\n },\n zoom: function (zoom) {\n this._zoom = zoom;\n },\n pointToTileIndex: function (point) {\n return new Point(math.floor(point.x / this.options.tileSize), math.floor(point.y / this.options.tileSize));\n },\n tileCount: function () {\n var size = this.size(), firstTileIndex = this.pointToTileIndex(this._extent.nw), nw = this._extent.nw, point = this.indexToPoint(firstTileIndex).translate(-nw.x, -nw.y);\n return {\n x: math.ceil((math.abs(point.x) + size.width) / this.options.tileSize),\n y: math.ceil((math.abs(point.y) + size.height) / this.options.tileSize)\n };\n },\n size: function () {\n var nw = this._extent.nw, se = this._extent.se, diff = se.clone().translate(-nw.x, -nw.y);\n return {\n width: diff.x,\n height: diff.y\n };\n },\n indexToPoint: function (index) {\n var x = index.x, y = index.y;\n return new Point(x * this.options.tileSize, y * this.options.tileSize);\n },\n subdomainText: function () {\n var subdomains = this.options.subdomains;\n return subdomains[this.subdomainIndex++ % subdomains.length];\n },\n destroy: function () {\n this.element.empty();\n this.pool.empty();\n },\n reset: function () {\n this.pool.reset();\n this.subdomainIndex = 0;\n this.render();\n },\n render: function () {\n var size = this.tileCount(), firstTileIndex = this.pointToTileIndex(this._extent.nw), tile, x, y;\n for (x = 0; x < size.x; x++) {\n for (y = 0; y < size.y; y++) {\n tile = this.createTile({\n x: firstTileIndex.x + x,\n y: firstTileIndex.y + y\n });\n if (!tile.visible) {\n tile.show();\n }\n }\n }\n },\n createTile: function (currentIndex) {\n var options = this.tileOptions(currentIndex);\n var tile = this.pool.get(this._center, options);\n if (tile.element.parent().length === 0) {\n this.element.append(tile.element);\n }\n return tile;\n },\n tileOptions: function (currentIndex) {\n var index = this.wrapIndex(currentIndex), point = this.indexToPoint(currentIndex), origin = this._viewOrigin, offset = point.clone().translate(-origin.x, -origin.y);\n return {\n index: index,\n currentIndex: currentIndex,\n point: point,\n offset: roundPoint(offset),\n zoom: this._zoom,\n size: this.options.tileSize,\n subdomain: this.subdomainText(),\n urlTemplate: this.options.urlTemplate,\n errorUrlTemplate: this.options.errorUrlTemplate\n };\n },\n wrapIndex: function (index) {\n var boundary = math.pow(2, this._zoom);\n return {\n x: this.wrapValue(index.x, boundary),\n y: limit(index.y, 0, boundary - 1)\n };\n },\n wrapValue: function (value, boundary) {\n var remainder = math.abs(value) % boundary;\n if (value >= 0) {\n value = remainder;\n } else {\n value = boundary - (remainder === 0 ? boundary : remainder);\n }\n return value;\n }\n });\n var ImageTile = Class.extend({\n init: function (id, options) {\n this.id = id;\n this.visible = true;\n this._initOptions(options);\n this.createElement();\n this.show();\n },\n options: {\n urlTemplate: '',\n errorUrlTemplate: ''\n },\n createElement: function () {\n this.element = $('\\'\\'').css({\n width: this.options.size,\n height: this.options.size\n }).on('error', proxy(function (e) {\n if (this.errorUrl()) {\n e.target.setAttribute('src', this.errorUrl());\n } else {\n e.target.removeAttribute('src');\n }\n }, this));\n },\n show: function () {\n var element = this.element[0];\n element.style.top = renderSize(this.options.offset.y);\n element.style.left = renderSize(this.options.offset.x);\n var url = this.url();\n if (url) {\n element.setAttribute('src', url);\n }\n element.style.visibility = 'visible';\n this.visible = true;\n },\n hide: function () {\n this.element[0].style.visibility = 'hidden';\n this.visible = false;\n },\n url: function () {\n var urlResult = template(this.options.urlTemplate);\n return urlResult(this.urlOptions());\n },\n errorUrl: function () {\n var urlResult = template(this.options.errorUrlTemplate);\n return urlResult(this.urlOptions());\n },\n urlOptions: function () {\n var options = this.options;\n return {\n zoom: options.zoom,\n subdomain: options.subdomain,\n z: options.zoom,\n x: options.index.x,\n y: options.index.y,\n s: options.subdomain,\n quadkey: options.quadkey,\n q: options.quadkey,\n culture: options.culture,\n c: options.culture\n };\n },\n destroy: function () {\n if (this.element) {\n this.element.remove();\n this.element = null;\n }\n }\n });\n var TilePool = Class.extend({\n init: function () {\n this._items = [];\n },\n options: { maxSize: 100 },\n get: function (center, options) {\n if (this._items.length >= this.options.maxSize) {\n this._remove(center);\n }\n return this._create(options);\n },\n empty: function () {\n var items = this._items;\n for (var i = 0; i < items.length; i++) {\n items[i].destroy();\n }\n this._items = [];\n },\n reset: function () {\n var items = this._items;\n for (var i = 0; i < items.length; i++) {\n items[i].hide();\n }\n },\n _create: function (options) {\n var items = this._items;\n var tile;\n var id = util.hashKey(options.point.toString() + options.offset.toString() + options.zoom + options.urlTemplate);\n for (var i = 0; i < items.length; i++) {\n if (items[i].id === id) {\n tile = items[i];\n break;\n }\n }\n if (tile) {\n tile.show();\n } else {\n tile = new ImageTile(id, options);\n this._items.push(tile);\n }\n return tile;\n },\n _remove: function (center) {\n var items = this._items;\n var maxDist = -1;\n var index = -1;\n for (var i = 0; i < items.length; i++) {\n var dist = items[i].options.point.distanceTo(center);\n if (dist > maxDist && !items[i].visible) {\n index = i;\n maxDist = dist;\n }\n }\n if (index !== -1) {\n items[index].destroy();\n items.splice(index, 1);\n }\n }\n });\n function roundPoint(point) {\n return new Point(round(point.x), round(point.y));\n }\n deepExtend(dataviz, {\n map: {\n layers: {\n tile: TileLayer,\n TileLayer: TileLayer,\n ImageTile: ImageTile,\n TilePool: TilePool,\n TileView: TileView\n }\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/bing', ['dataviz/map/layers/tile'], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, defined = kendo.drawing.util.defined, Extent = dataviz.map.Extent, Location = dataviz.map.Location, TileLayer = dataviz.map.layers.TileLayer, TileView = dataviz.map.layers.TileView;\n var BingLayer = TileLayer.extend({\n init: function (map, options) {\n this.options.baseUrl = this._scheme() + '://dev.virtualearth.net/REST/v1/Imagery/Metadata/';\n TileLayer.fn.init.call(this, map, options);\n this._onMetadata = $.proxy(this._onMetadata, this);\n this._fetchMetadata();\n },\n options: { imagerySet: 'road' },\n _fetchMetadata: function () {\n var options = this.options;\n if (!options.key) {\n throw new Error('Bing tile layer: API key is required');\n }\n $.ajax({\n url: options.baseUrl + options.imagerySet,\n data: {\n output: 'json',\n include: 'ImageryProviders',\n key: options.key,\n uriScheme: this._scheme()\n },\n type: 'get',\n dataType: 'jsonp',\n jsonp: 'jsonp',\n success: this._onMetadata\n });\n },\n _scheme: function (proto) {\n proto = proto || window.location.protocol;\n return proto.replace(':', '') === 'https' ? 'https' : 'http';\n },\n _onMetadata: function (data) {\n if (data && data.resourceSets.length) {\n var resource = this.resource = data.resourceSets[0].resources[0];\n deepExtend(this._view.options, {\n urlTemplate: resource.imageUrl.replace('{subdomain}', '#= subdomain #').replace('{quadkey}', '#= quadkey #').replace('{culture}', '#= culture #'),\n subdomains: resource.imageUrlSubdomains\n });\n var options = this.options;\n if (!defined(options.minZoom)) {\n options.minZoom = resource.zoomMin;\n }\n if (!defined(options.maxZoom)) {\n options.maxZoom = resource.zoomMax;\n }\n this._addAttribution();\n if (this.element.css('display') !== 'none') {\n this._reset();\n }\n }\n },\n _viewType: function () {\n return BingView;\n },\n _addAttribution: function () {\n var attr = this.map.attribution;\n if (attr) {\n var items = this.resource.imageryProviders;\n if (items) {\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n for (var y = 0; y < item.coverageAreas.length; y++) {\n var area = item.coverageAreas[y];\n attr.add({\n text: item.attribution,\n minZoom: area.zoomMin,\n maxZoom: area.zoomMax,\n extent: new Extent(new Location(area.bbox[2], area.bbox[1]), new Location(area.bbox[0], area.bbox[3]))\n });\n }\n }\n }\n }\n },\n imagerySet: function (value) {\n if (value) {\n this.options.imagerySet = value;\n this.map.attribution.clear();\n this._fetchMetadata();\n } else {\n return this.options.imagerySet;\n }\n }\n });\n var BingView = TileView.extend({\n options: { culture: 'en-US' },\n tileOptions: function (currentIndex) {\n var options = TileView.fn.tileOptions.call(this, currentIndex);\n options.culture = this.options.culture;\n options.quadkey = this.tileQuadKey(this.wrapIndex(currentIndex));\n return options;\n },\n tileQuadKey: function (index) {\n var quadKey = '', digit, mask, i;\n for (i = this._zoom; i > 0; i--) {\n digit = 0;\n mask = 1 << i - 1;\n if ((index.x & mask) !== 0) {\n digit++;\n }\n if ((index.y & mask) !== 0) {\n digit += 2;\n }\n quadKey += digit;\n }\n return quadKey;\n }\n });\n deepExtend(dataviz, {\n map: {\n layers: {\n bing: BingLayer,\n BingLayer: BingLayer,\n BingView: BingView\n }\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/marker', [\n 'dataviz/map/layers/base',\n 'dataviz/map/location',\n 'kendo.data',\n 'kendo.tooltip'\n ], f);\n}(function () {\n (function ($, undefined) {\n var doc = document, math = Math, indexOf = $.inArray, proxy = $.proxy, kendo = window.kendo, Class = kendo.Class, DataSource = kendo.data.DataSource, Tooltip = kendo.ui.Tooltip, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, map = dataviz.map, Location = map.Location, Layer = map.layers.Layer;\n var MarkerLayer = Layer.extend({\n init: function (map, options) {\n Layer.fn.init.call(this, map, options);\n this._markerClick = proxy(this._markerClick, this);\n this.element.on('click', '.k-marker', this._markerClick);\n this.items = [];\n this._initDataSource();\n },\n destroy: function () {\n Layer.fn.destroy.call(this);\n this.element.off('click', '.k-marker', this._markerClick);\n this.dataSource.unbind('change', this._dataChange);\n this.clear();\n },\n options: {\n zIndex: 1000,\n autoBind: true,\n dataSource: {},\n locationField: 'location',\n titleField: 'title'\n },\n add: function (arg) {\n if ($.isArray(arg)) {\n for (var i = 0; i < arg.length; i++) {\n this._addOne(arg[i]);\n }\n } else {\n return this._addOne(arg);\n }\n },\n remove: function (marker) {\n marker.destroy();\n var index = indexOf(marker, this.items);\n if (index > -1) {\n this.items.splice(index, 1);\n }\n },\n clear: function () {\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].destroy();\n }\n this.items = [];\n },\n update: function (marker) {\n var loc = marker.location();\n if (loc) {\n marker.showAt(this.map.locationToView(loc));\n var args = {\n marker: marker,\n layer: this\n };\n this.map.trigger('markerActivate', args);\n }\n },\n _reset: function () {\n Layer.fn._reset.call(this);\n var items = this.items;\n for (var i = 0; i < items.length; i++) {\n this.update(items[i]);\n }\n },\n bind: function (options, dataItem) {\n var marker = map.Marker.create(options, this.options);\n marker.dataItem = dataItem;\n var args = {\n marker: marker,\n layer: this\n };\n var cancelled = this.map.trigger('markerCreated', args);\n if (!cancelled) {\n this.add(marker);\n return marker;\n }\n },\n setDataSource: function (dataSource) {\n if (this.dataSource) {\n this.dataSource.unbind('change', this._dataChange);\n }\n this.dataSource = kendo.data.DataSource.create(dataSource);\n this.dataSource.bind('change', this._dataChange);\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n _addOne: function (arg) {\n var marker = Marker.create(arg, this.options);\n marker.addTo(this);\n return marker;\n },\n _initDataSource: function () {\n var dsOptions = this.options.dataSource;\n this._dataChange = proxy(this._dataChange, this);\n this.dataSource = DataSource.create(dsOptions).bind('change', this._dataChange);\n if (dsOptions && this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n _dataChange: function (e) {\n this._load(e.sender.view());\n },\n _load: function (data) {\n this._data = data;\n this.clear();\n var getLocation = kendo.getter(this.options.locationField);\n var getTitle = kendo.getter(this.options.titleField);\n for (var i = 0; i < data.length; i++) {\n var dataItem = data[i];\n this.bind({\n location: getLocation(dataItem),\n title: getTitle(dataItem)\n }, dataItem);\n }\n },\n _markerClick: function (e) {\n var args = {\n marker: $(e.target).data('kendoMarker'),\n layer: this\n };\n this.map.trigger('markerClick', args);\n }\n });\n var Marker = Class.extend({\n init: function (options) {\n this.options = options || {};\n },\n addTo: function (parent) {\n this.layer = parent.markers || parent;\n this.layer.items.push(this);\n this.layer.update(this);\n },\n location: function (value) {\n if (value) {\n this.options.location = Location.create(value).toArray();\n if (this.layer) {\n this.layer.update(this);\n }\n return this;\n } else {\n return Location.create(this.options.location);\n }\n },\n showAt: function (point) {\n this.render();\n this.element.css({\n left: math.round(point.x),\n top: math.round(point.y)\n });\n if (this.tooltip && this.tooltip.popup) {\n this.tooltip.popup._position();\n }\n },\n hide: function () {\n if (this.element) {\n this.element.remove();\n this.element = null;\n }\n if (this.tooltip) {\n this.tooltip.destroy();\n this.tooltip = null;\n }\n },\n destroy: function () {\n this.layer = null;\n this.hide();\n },\n render: function () {\n if (!this.element) {\n var options = this.options;\n var layer = this.layer;\n this.element = $(doc.createElement('span')).addClass('k-marker k-icon k-i-marker-' + kendo.toHyphens(options.shape || 'pin')).attr('title', options.title).attr(options.attributes || {}).data('kendoMarker', this).css('zIndex', options.zIndex);\n if (layer) {\n layer.element.append(this.element);\n }\n this.renderTooltip();\n }\n },\n renderTooltip: function () {\n var marker = this;\n var title = marker.options.title;\n var options = marker.options.tooltip || {};\n if (options && Tooltip) {\n var template = options.template;\n if (template) {\n var contentTemplate = kendo.template(template);\n options.content = function (e) {\n e.location = marker.location();\n e.marker = marker;\n return contentTemplate(e);\n };\n }\n if (title || options.content || options.contentUrl) {\n this.tooltip = new Tooltip(this.element, options);\n this.tooltip.marker = this;\n }\n }\n }\n });\n Marker.create = function (arg, defaults) {\n if (arg instanceof Marker) {\n return arg;\n }\n return new Marker(deepExtend({}, defaults, arg));\n };\n deepExtend(dataviz, {\n map: {\n layers: {\n marker: MarkerLayer,\n MarkerLayer: MarkerLayer\n },\n Marker: Marker\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/main', [\n 'dataviz/map/crs',\n 'dataviz/map/location'\n ], f);\n}(function () {\n (function ($, undefined) {\n var doc = document, math = Math, min = math.min, pow = math.pow, proxy = $.proxy, kendo = window.kendo, Widget = kendo.ui.Widget, deepExtend = kendo.deepExtend, dataviz = kendo.dataviz, ui = dataviz.ui, g = kendo.geometry, Point = g.Point, map = dataviz.map, Extent = map.Extent, Location = map.Location, EPSG3857 = map.crs.EPSG3857, util = kendo.util, renderPos = util.renderPos, drawingUtil = kendo.drawing.util, defined = drawingUtil.defined, limit = drawingUtil.limitValue, valueOrDefault = drawingUtil.valueOrDefault;\n var CSS_PREFIX = 'k-', FRICTION = 0.9, FRICTION_MOBILE = 0.93, MOUSEWHEEL = 'DOMMouseScroll mousewheel', VELOCITY_MULTIPLIER = 5;\n var Map = Widget.extend({\n init: function (element, options) {\n kendo.destroy(element);\n Widget.fn.init.call(this, element);\n this._initOptions(options);\n this.bind(this.events, options);\n this.crs = new EPSG3857();\n this.element.addClass(CSS_PREFIX + this.options.name.toLowerCase()).css('position', 'relative').empty().append(doc.createElement('div'));\n this._viewOrigin = this._getOrigin();\n this._initScroller();\n this._initMarkers();\n this._initControls();\n this._initLayers();\n this._reset();\n this._mousewheel = proxy(this._mousewheel, this);\n this.element.bind('click', proxy(this._click, this));\n this.element.bind(MOUSEWHEEL, this._mousewheel);\n },\n options: {\n name: 'Map',\n controls: {\n attribution: true,\n navigator: { panStep: 100 },\n zoom: true\n },\n layers: [],\n layerDefaults: {\n shape: {\n style: {\n fill: { color: '#fff' },\n stroke: {\n color: '#aaa',\n width: 0.5\n }\n }\n },\n bubble: {\n style: {\n fill: {\n color: '#fff',\n opacity: 0.5\n },\n stroke: {\n color: '#aaa',\n width: 0.5\n }\n }\n },\n marker: {\n shape: 'pinTarget',\n tooltip: { position: 'top' }\n }\n },\n center: [\n 0,\n 0\n ],\n zoom: 3,\n minSize: 256,\n minZoom: 1,\n maxZoom: 19,\n markers: [],\n markerDefaults: {\n shape: 'pinTarget',\n tooltip: { position: 'top' }\n },\n wraparound: true\n },\n events: [\n 'beforeReset',\n 'click',\n 'markerActivate',\n 'markerClick',\n 'markerCreated',\n 'pan',\n 'panEnd',\n 'reset',\n 'shapeClick',\n 'shapeCreated',\n 'shapeFeatureCreated',\n 'shapeMouseEnter',\n 'shapeMouseLeave',\n 'zoomEnd',\n 'zoomStart'\n ],\n destroy: function () {\n this.scroller.destroy();\n if (this.navigator) {\n this.navigator.destroy();\n }\n if (this.attribution) {\n this.attribution.destroy();\n }\n if (this.zoomControl) {\n this.zoomControl.destroy();\n }\n this.markers.destroy();\n for (var i = 0; i < this.layers.length; i++) {\n this.layers[i].destroy();\n }\n Widget.fn.destroy.call(this);\n },\n zoom: function (level) {\n var options = this.options;\n if (defined(level)) {\n level = math.round(limit(level, options.minZoom, options.maxZoom));\n if (options.zoom !== level) {\n options.zoom = level;\n this._reset();\n }\n return this;\n } else {\n return options.zoom;\n }\n },\n center: function (center) {\n if (center) {\n this.options.center = Location.create(center).toArray();\n this._reset();\n return this;\n } else {\n return Location.create(this.options.center);\n }\n },\n extent: function (extent) {\n if (extent) {\n this._setExtent(extent);\n return this;\n } else {\n return this._getExtent();\n }\n },\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n this._reset();\n },\n locationToLayer: function (location, zoom) {\n var clamp = !this.options.wraparound;\n location = Location.create(location);\n return this.crs.toPoint(location, this._layerSize(zoom), clamp);\n },\n layerToLocation: function (point, zoom) {\n var clamp = !this.options.wraparound;\n point = Point.create(point);\n return this.crs.toLocation(point, this._layerSize(zoom), clamp);\n },\n locationToView: function (location) {\n location = Location.create(location);\n var origin = this.locationToLayer(this._viewOrigin);\n var point = this.locationToLayer(location);\n return point.translateWith(origin.scale(-1));\n },\n viewToLocation: function (point, zoom) {\n var origin = this.locationToLayer(this._getOrigin(), zoom);\n point = Point.create(point);\n point = point.clone().translateWith(origin);\n return this.layerToLocation(point, zoom);\n },\n eventOffset: function (e) {\n var offset = this.element.offset();\n var event = e.originalEvent || e;\n var x = valueOrDefault(event.pageX, event.clientX) - offset.left;\n var y = valueOrDefault(event.pageY, event.clientY) - offset.top;\n return new g.Point(x, y);\n },\n eventToView: function (e) {\n var cursor = this.eventOffset(e);\n return this.locationToView(this.viewToLocation(cursor));\n },\n eventToLayer: function (e) {\n return this.locationToLayer(this.eventToLocation(e));\n },\n eventToLocation: function (e) {\n var cursor = this.eventOffset(e);\n return this.viewToLocation(cursor);\n },\n viewSize: function () {\n var element = this.element;\n var scale = this._layerSize();\n var width = element.width();\n if (!this.options.wraparound) {\n width = min(scale, width);\n }\n return {\n width: width,\n height: min(scale, element.height())\n };\n },\n exportVisual: function () {\n this._reset();\n return false;\n },\n _setOrigin: function (origin, zoom) {\n var size = this.viewSize(), topLeft;\n origin = this._origin = Location.create(origin);\n topLeft = this.locationToLayer(origin, zoom);\n topLeft.x += size.width / 2;\n topLeft.y += size.height / 2;\n this.options.center = this.layerToLocation(topLeft, zoom).toArray();\n return this;\n },\n _getOrigin: function (invalidate) {\n var size = this.viewSize(), topLeft;\n if (invalidate || !this._origin) {\n topLeft = this.locationToLayer(this.center());\n topLeft.x -= size.width / 2;\n topLeft.y -= size.height / 2;\n this._origin = this.layerToLocation(topLeft);\n }\n return this._origin;\n },\n _setExtent: function (extent) {\n var raw = Extent.create(extent);\n var se = raw.se.clone();\n if (this.options.wraparound && se.lng < 0 && extent.nw.lng > 0) {\n se.lng = 180 + (180 + se.lng);\n }\n extent = new Extent(raw.nw, se);\n this.center(extent.center());\n var width = this.element.width();\n var height = this.element.height();\n for (var zoom = this.options.maxZoom; zoom >= this.options.minZoom; zoom--) {\n var topLeft = this.locationToLayer(extent.nw, zoom);\n var bottomRight = this.locationToLayer(extent.se, zoom);\n var layerWidth = math.abs(bottomRight.x - topLeft.x);\n var layerHeight = math.abs(bottomRight.y - topLeft.y);\n if (layerWidth <= width && layerHeight <= height) {\n break;\n }\n }\n this.zoom(zoom);\n },\n _getExtent: function () {\n var nw = this._getOrigin();\n var bottomRight = this.locationToLayer(nw);\n var size = this.viewSize();\n bottomRight.x += size.width;\n bottomRight.y += size.height;\n var se = this.layerToLocation(bottomRight);\n return new Extent(nw, se);\n },\n _zoomAround: function (pivot, level) {\n this._setOrigin(this.layerToLocation(pivot, level), level);\n this.zoom(level);\n },\n _initControls: function () {\n var controls = this.options.controls;\n if (ui.Attribution && controls.attribution) {\n this._createAttribution(controls.attribution);\n }\n if (!kendo.support.mobileOS) {\n if (ui.Navigator && controls.navigator) {\n this._createNavigator(controls.navigator);\n }\n if (ui.ZoomControl && controls.zoom) {\n this._createZoomControl(controls.zoom);\n }\n }\n },\n _createControlElement: function (options, defaultPos) {\n var pos = options.position || defaultPos;\n var posSelector = '.' + renderPos(pos).replace(' ', '.');\n var wrap = $('.k-map-controls' + posSelector, this.element);\n if (wrap.length === 0) {\n wrap = $('
').addClass('k-map-controls ' + renderPos(pos)).appendTo(this.element);\n }\n return $('
').appendTo(wrap);\n },\n _createAttribution: function (options) {\n var element = this._createControlElement(options, 'bottomRight');\n this.attribution = new ui.Attribution(element, options);\n },\n _createNavigator: function (options) {\n var element = this._createControlElement(options, 'topLeft');\n var navigator = this.navigator = new ui.Navigator(element, options);\n this._navigatorPan = proxy(this._navigatorPan, this);\n navigator.bind('pan', this._navigatorPan);\n this._navigatorCenter = proxy(this._navigatorCenter, this);\n navigator.bind('center', this._navigatorCenter);\n },\n _navigatorPan: function (e) {\n var map = this;\n var scroller = map.scroller;\n var x = scroller.scrollLeft + e.x;\n var y = scroller.scrollTop - e.y;\n var bounds = this._virtualSize;\n var height = this.element.height();\n var width = this.element.width();\n x = limit(x, bounds.x.min, bounds.x.max - width);\n y = limit(y, bounds.y.min, bounds.y.max - height);\n map.scroller.one('scroll', function (e) {\n map._scrollEnd(e);\n });\n map.scroller.scrollTo(-x, -y);\n },\n _navigatorCenter: function () {\n this.center(this.options.center);\n },\n _createZoomControl: function (options) {\n var element = this._createControlElement(options, 'topLeft');\n var zoomControl = this.zoomControl = new ui.ZoomControl(element, options);\n this._zoomControlChange = proxy(this._zoomControlChange, this);\n zoomControl.bind('change', this._zoomControlChange);\n },\n _zoomControlChange: function (e) {\n if (!this.trigger('zoomStart', { originalEvent: e })) {\n this.zoom(this.zoom() + e.delta);\n this.trigger('zoomEnd', { originalEvent: e });\n }\n },\n _initScroller: function () {\n var friction = kendo.support.mobileOS ? FRICTION_MOBILE : FRICTION;\n var zoomable = this.options.zoomable !== false;\n var scroller = this.scroller = new kendo.mobile.ui.Scroller(this.element.children(0), {\n friction: friction,\n velocityMultiplier: VELOCITY_MULTIPLIER,\n zoom: zoomable,\n mousewheelScrolling: false\n });\n scroller.bind('scroll', proxy(this._scroll, this));\n scroller.bind('scrollEnd', proxy(this._scrollEnd, this));\n scroller.userEvents.bind('gesturestart', proxy(this._scaleStart, this));\n scroller.userEvents.bind('gestureend', proxy(this._scale, this));\n this.scrollElement = scroller.scrollElement;\n },\n _initLayers: function () {\n var defs = this.options.layers, layers = this.layers = [];\n for (var i = 0; i < defs.length; i++) {\n var options = defs[i];\n var type = options.type || 'shape';\n var defaults = this.options.layerDefaults[type];\n var impl = dataviz.map.layers[type];\n layers.push(new impl(this, deepExtend({}, defaults, options)));\n }\n },\n _initMarkers: function () {\n this.markers = new map.layers.MarkerLayer(this, this.options.markerDefaults);\n this.markers.add(this.options.markers);\n },\n _scroll: function (e) {\n var origin = this.locationToLayer(this._viewOrigin).round();\n var movable = e.sender.movable;\n var offset = new g.Point(movable.x, movable.y).scale(-1).scale(1 / movable.scale);\n origin.x += offset.x;\n origin.y += offset.y;\n this._scrollOffset = offset;\n this._setOrigin(this.layerToLocation(origin));\n this.trigger('pan', {\n originalEvent: e,\n origin: this._getOrigin(),\n center: this.center()\n });\n },\n _scrollEnd: function (e) {\n if (!this._scrollOffset || !this._panComplete()) {\n return;\n }\n this._scrollOffset = null;\n this._panEndTS = new Date();\n this.trigger('panEnd', {\n originalEvent: e,\n origin: this._getOrigin(),\n center: this.center()\n });\n },\n _panComplete: function () {\n return new Date() - (this._panEndTS || 0) > 50;\n },\n _scaleStart: function (e) {\n if (this.trigger('zoomStart', { originalEvent: e })) {\n var touch = e.touches[1];\n if (touch) {\n touch.cancel();\n }\n }\n },\n _scale: function (e) {\n var scale = this.scroller.movable.scale;\n var zoom = this._scaleToZoom(scale);\n var gestureCenter = new g.Point(e.center.x, e.center.y);\n var centerLocation = this.viewToLocation(gestureCenter, zoom);\n var centerPoint = this.locationToLayer(centerLocation, zoom);\n var originPoint = centerPoint.translate(-gestureCenter.x, -gestureCenter.y);\n this._zoomAround(originPoint, zoom);\n this.trigger('zoomEnd', { originalEvent: e });\n },\n _scaleToZoom: function (scaleDelta) {\n var scale = this._layerSize() * scaleDelta;\n var tiles = scale / this.options.minSize;\n var zoom = math.log(tiles) / math.log(2);\n return math.round(zoom);\n },\n _reset: function () {\n if (this.attribution) {\n this.attribution.filter(this.center(), this.zoom());\n }\n this._viewOrigin = this._getOrigin(true);\n this._resetScroller();\n this.trigger('beforeReset');\n this.trigger('reset');\n },\n _resetScroller: function () {\n var scroller = this.scroller;\n var x = scroller.dimensions.x;\n var y = scroller.dimensions.y;\n var scale = this._layerSize();\n var nw = this.extent().nw;\n var topLeft = this.locationToLayer(nw).round();\n scroller.movable.round = true;\n scroller.reset();\n scroller.userEvents.cancel();\n var zoom = this.zoom();\n scroller.dimensions.forcedMinScale = pow(2, this.options.minZoom - zoom);\n scroller.dimensions.maxScale = pow(2, this.options.maxZoom - zoom);\n var xBounds = {\n min: -topLeft.x,\n max: scale - topLeft.x\n };\n var yBounds = {\n min: -topLeft.y,\n max: scale - topLeft.y\n };\n if (this.options.wraparound) {\n xBounds.max = 20 * scale;\n xBounds.min = -xBounds.max;\n }\n if (this.options.pannable === false) {\n var viewSize = this.viewSize();\n xBounds.min = yBounds.min = 0;\n xBounds.max = viewSize.width;\n yBounds.max = viewSize.height;\n }\n x.makeVirtual();\n y.makeVirtual();\n x.virtualSize(xBounds.min, xBounds.max);\n y.virtualSize(yBounds.min, yBounds.max);\n this._virtualSize = {\n x: xBounds,\n y: yBounds\n };\n },\n _renderLayers: function () {\n var defs = this.options.layers, layers = this.layers = [], scrollWrap = this.scrollWrap;\n scrollWrap.empty();\n for (var i = 0; i < defs.length; i++) {\n var options = defs[i];\n var type = options.type || 'shape';\n var defaults = this.options.layerDefaults[type];\n var impl = dataviz.map.layers[type];\n layers.push(new impl(this, deepExtend({}, defaults, options)));\n }\n },\n _layerSize: function (zoom) {\n zoom = valueOrDefault(zoom, this.options.zoom);\n return this.options.minSize * pow(2, zoom);\n },\n _click: function (e) {\n if (!this._panComplete()) {\n return;\n }\n var cursor = this.eventOffset(e);\n this.trigger('click', {\n originalEvent: e,\n location: this.viewToLocation(cursor)\n });\n },\n _mousewheel: function (e) {\n e.preventDefault();\n var delta = dataviz.mwDelta(e) > 0 ? -1 : 1;\n var options = this.options;\n var fromZoom = this.zoom();\n var toZoom = limit(fromZoom + delta, options.minZoom, options.maxZoom);\n if (options.zoomable !== false && toZoom !== fromZoom) {\n if (!this.trigger('zoomStart', { originalEvent: e })) {\n var cursor = this.eventOffset(e);\n var location = this.viewToLocation(cursor);\n var postZoom = this.locationToLayer(location, toZoom);\n var origin = postZoom.translate(-cursor.x, -cursor.y);\n this._zoomAround(origin, toZoom);\n this.trigger('zoomEnd', { originalEvent: e });\n }\n }\n }\n });\n dataviz.ui.plugin(Map);\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.map', [\n 'kendo.data',\n 'kendo.userevents',\n 'kendo.tooltip',\n 'kendo.mobile.scroller',\n 'kendo.draganddrop',\n 'kendo.dataviz.core',\n 'dataviz/map/location',\n 'dataviz/map/attribution',\n 'dataviz/map/navigator',\n 'dataviz/map/zoom',\n 'dataviz/map/crs',\n 'dataviz/map/layers/base',\n 'dataviz/map/layers/shape',\n 'dataviz/map/layers/bubble',\n 'dataviz/map/layers/tile',\n 'dataviz/map/layers/bing',\n 'dataviz/map/layers/marker',\n 'dataviz/map/main'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.map',\n name: 'Map',\n category: 'dataviz',\n description: 'The Kendo DataViz Map displays spatial data',\n depends: [\n 'data',\n 'userevents',\n 'tooltip',\n 'dataviz.core',\n 'drawing',\n 'mobile.scroller'\n ]\n };\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));"]}