{"version":3,"file":"kendo.dataviz.map.min.js","names":["global","factory","exports","module","require","define","amd","globalThis","self","kendodataviz","map","js","this","kendo","window","deepExtend","now","Date","getTime","util","renderPos","pos","result","parts","toHyphens","split","i","length","push","join","renderSize","size","sqr","value","romanToArabic","r","toLowerCase","digits","v","x","l","c","d","m","prev","charAt","arabicToRoman","n","literals","values","roman","shift","memoize","f","cache","Object","create","id","arguments","apply","isUnicodeLetter","ch","RX_UNICODE_LETTER","test","withExit","obj","call","Return","ex","RegExp","$","undefined$1","math","Math","abs","atan","atan2","cos","max","min","sin","tan","Class","dataviz","drawing","defined","deg","rad","round","valueOrDefault","Location","extend","init","lat","lng","DISTANCE_ITERATIONS","DISTANCE_CONVERGENCE","DISTANCE_PRECISION","FORMAT","toArray","equals","loc","clone","precision","wrap","distanceTo","dest","datum","greatCircleTo","distance","destination","bearing","datums","WGS84","fromLat","fromLng","dToR","a","asin","azimuthFrom","azimuthTo","prevLambda","sinLambda","cosLambda","sino","cosA2","coso","cos2om","sigma","b","L","U1","sinU1","cosU1","U2","sinU2","cosU2","lambda","converged","sqrt","sinA","C","u2","A","B","deltao","fn","toString","format","fromLngLat","ll","fromLatLng","Extent","nw","se","contains","center","containsAny","locs","include","includeAll","edges","ne","sw","overlaps","extent","World","jQuery","Widget","ui","template","Attribution","element","options","_initOptions","items","addClass","name","separator","itemTemplate","text","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","keys","button","dir","icon","iconClass","BUTTONS","Navigator","on","_click","bind","parentElement","parent","closest","attr","_keyroot","_tabindex","_keydown","panStep","events","dispose","off","_pan","y","trigger","e","currentTarget","is","preventDefault","which","UP","DOWN","RIGHT","LEFT","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","ecch","phi","dphi","SphericalMercator","Equirectangular","EPSG3857","_proj","_tm","transform","translate","scale","_itm","toPoint","toLocation","crs","EPSG3395","EPSG4326","projections","layers","Layer","css","zIndex","opacity","appendTo","scrollElement","_beforeReset","_reset","_resize","_panEnd","_activate","_updateAttribution","destroy","_deactivate","reset","_applyExtent","_setVisibility","noop","matchMinZoom","matchMaxZoom","inside","visible","unbind","attribution","DataSource","data","Group","last","ShapeLayer","surface","Surface","width","height","_initRoot","movable","Movable","_markers","_handler","_mouseenter","_mouseleave","_initDataSource","autoBind","dataSource","_dataChange","setDataSource","fetch","_translateSurface","_data","_load","_root","draw","dsOptions","sender","view","_clearMarkers","_loader","GeoJSONLoader","style","container","shape","parse","shapeCreated","cancelled","Circle","_createMarker","args","layer","featureCreated","marker","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","MultiPath","Path","j","lineTo","circle","schemas","geojson","features","geometries","transports","read","dataType","getter","BubbleLayer","locationField","valueField","minSize","maxSize","symbol","opt","getValue","slice","sort","scaleType","_scaleType","_createSymbol","_drawSymbol","isFunction","scales","symbols","SqrtScale","domain","range","_domain","_range","domainRange","outputRange","_ratio","rel","bubble","geo","square","halfSize","close","drawingUtil","TileLayer","subdomains","viewType","_viewType","_view","origin","locationToLayer","viewOrigin","tileTitle","_updateView","TileView","support","mobileOS","throttle","extentToPoint","render","pool","TilePool","tileSize","urlTemplate","_center","_viewOrigin","pointToTileIndex","floor","tileCount","firstTileIndex","indexToPoint","ceil","diff","index","subdomainText","subdomainIndex","_tileTitle","tile","createTile","currentIndex","tileOptions","get","wrapIndex","offset","roundPoint","subdomain","errorUrlTemplate","boundary","wrapValue","remainder","ImageTile","createElement","position","display","errorUrl","target","setAttribute","removeAttribute","top","left","url","visibility","urlResult","urlOptions","z","s","quadkey","q","culture","_items","_remove","_create","hashKey","maxDist","dist","splice","BingLayer","baseUrl","_scheme","_onMetadata","_fetchMetadata","imagerySet","key","Error","ajax","output","uriScheme","jsonp","success","proto","protocol","replace","that","resourceSets","resource","resources","imageUrl","imageUrlSubdomains","zoomMin","zoomMax","_addAttribution","BingView","imageryProviders","coverageAreas","bbox","tileQuadKey","digit","mask","quadKey","bing","doc","document","indexOf","inArray","Tooltip","MarkerLayer","_markerClick","titleField","arg","Array","isArray","_addOne","update","showAt","Marker","addTo","getLocation","getTitle","title","tooltip","popup","_position","attributes","renderTooltip","contentTemplate","content","contentUrl","defaults","Map","_getOrigin","_initScroller","_initMarkers","_initControls","_initLayers","_mousewheel","controls","navigator","layerDefaults","color","stroke","markerDefaults","wraparound","messages","scroller","zoomControl","level","_setExtent","_getExtent","setOptions","_layerSize","layerToLocation","translateWith","viewToLocation","eventOffset","field","pageX","clientX","pageY","clientY","eventToView","cursor","eventToLayer","eventToLocation","viewSize","exportVisual","_setOrigin","topLeft","_origin","invalidate","raw","bottomRight","layerWidth","layerHeight","_zoomAround","pivot","_createAttribution","_createNavigator","_createZoomControl","_createControlElement","defaultPos","posSelector","_navigatorPan","_navigatorCenter","scrollLeft","scrollTop","bounds","_virtualSize","one","_scrollEnd","scrollTo","_zoomControlChange","friction","zoomable","mobile","Scroller","velocityMultiplier","mousewheelScrolling","supportDoubleTap","_scroll","userEvents","_scaleStart","_scale","_doubleTap","_tap","defs","impl","_scrollOffset","_panComplete","_panEndTS","touch","touches","cancel","_scaleToZoom","gestureCenter","centerLocation","originPoint","scaleDelta","tiles","_resetScroller","dimensions","forcedMinScale","maxScale","xBounds","yBounds","pannable","makeVirtual","virtualSize","_renderLayers","scrollWrap","toZoom","mwDelta","fromZoom"],"sources":["kendo.dataviz.map.js"],"mappings":"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","sourcesContent":["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('kendo.data.js'), require('kendo.userevents.js'), require('kendo.tooltip.js'), require('kendo.mobile.scroller.js'), require('kendo.draganddrop.js'), require('kendo.dataviz.core.js'), require('kendo.drawing.js'), require('kendo.core.js'), require('kendo.icons.js')) :\n typeof define === 'function' && define.amd ? define(['kendo.data', 'kendo.userevents', 'kendo.tooltip', 'kendo.mobile.scroller', 'kendo.draganddrop', 'kendo.dataviz.core', 'kendo.drawing', 'kendo.core', 'kendo.icons'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (global.kendodataviz = global.kendodataviz || {}, global.kendodataviz.map = global.kendodataviz.map || {}, global.kendodataviz.map.js = factory()));\n})(this, (function () {\n (function () {\r\n // Imports ================================================================\r\n var kendo = window.kendo,\r\n deepExtend = kendo.deepExtend;\r\n\r\n function sqr(value) {\r\n return value * value;\r\n }\r\n\r\n var now = Date.now;\r\n if (!now) {\r\n now = function() {\r\n return new Date().getTime();\r\n };\r\n }\r\n\r\n // Template helpers =======================================================\r\n\r\n function renderSize(size) {\r\n if (typeof size !== \"string\") {\r\n size += \"px\";\r\n }\r\n\r\n return size;\r\n }\r\n\r\n function renderPos(pos) {\r\n var result = [];\r\n\r\n if (pos) {\r\n var parts = kendo.toHyphens(pos).split(\"-\");\r\n\r\n for (var i = 0; i < parts.length; i++) {\r\n result.push(\"k-pos-\" + parts[i]);\r\n }\r\n }\r\n\r\n return result.join(\" \");\r\n }\r\n\r\n function arabicToRoman(n) {\r\n var literals = {\r\n 1 : \"i\", 10 : \"x\", 100 : \"c\",\r\n 2 : \"ii\", 20 : \"xx\", 200 : \"cc\",\r\n 3 : \"iii\", 30 : \"xxx\", 300 : \"ccc\",\r\n 4 : \"iv\", 40 : \"xl\", 400 : \"cd\",\r\n 5 : \"v\", 50 : \"l\", 500 : \"d\",\r\n 6 : \"vi\", 60 : \"lx\", 600 : \"dc\",\r\n 7 : \"vii\", 70 : \"lxx\", 700 : \"dcc\",\r\n 8 : \"viii\", 80 : \"lxxx\", 800 : \"dccc\",\r\n 9 : \"ix\", 90 : \"xc\", 900 : \"cm\",\r\n 1000 : \"m\"\r\n };\r\n var values = [ 1000,\r\n 900 , 800, 700, 600, 500, 400, 300, 200, 100,\r\n 90 , 80 , 70 , 60 , 50 , 40 , 30 , 20 , 10 ,\r\n 9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 ];\r\n var roman = \"\";\r\n while (n > 0) {\r\n if (n < values[0]) {\r\n values.shift();\r\n } else {\r\n roman += literals[values[0]];\r\n n -= values[0];\r\n }\r\n }\r\n return roman;\r\n }\r\n\r\n function romanToArabic(r) {\r\n r = r.toLowerCase();\r\n var digits = {\r\n i: 1,\r\n v: 5,\r\n x: 10,\r\n l: 50,\r\n c: 100,\r\n d: 500,\r\n m: 1000\r\n };\r\n var value = 0, prev = 0;\r\n for (var i = 0; i < r.length; ++i) {\r\n var v = digits[r.charAt(i)];\r\n if (!v) {\r\n return null;\r\n }\r\n value += v;\r\n if (v > prev) {\r\n value -= 2 * prev;\r\n }\r\n prev = v;\r\n }\r\n return value;\r\n }\r\n\r\n function memoize(f) {\r\n var cache = Object.create(null);\r\n return function() {\r\n var id = \"\";\r\n for (var i = arguments.length; --i >= 0;) {\r\n id += \":\" + arguments[i];\r\n }\r\n return id in cache ? cache[id] : (cache[id] = f.apply(this, arguments));\r\n };\r\n }\r\n\r\n function isUnicodeLetter(ch) {\r\n return RX_UNICODE_LETTER.test(ch);\r\n }\r\n\r\n function withExit(f, obj) {\r\n try {\r\n return f.call(obj, function(value){\r\n throw new Return(value);\r\n });\r\n } catch(ex) {\r\n if (ex instanceof Return) {\r\n return ex.value;\r\n }\r\n throw ex;\r\n }\r\n function Return(value) {\r\n this.value = value;\r\n }\r\n }\r\n\r\n // Exports ================================================================\r\n deepExtend(kendo, {\r\n util: {\r\n now: now,\r\n renderPos: renderPos,\r\n renderSize: renderSize,\r\n sqr: sqr,\r\n romanToArabic: romanToArabic,\r\n arabicToRoman: arabicToRoman,\r\n memoize: memoize,\r\n isUnicodeLetter: isUnicodeLetter,\r\n withExit: withExit\r\n }\r\n });\r\n\r\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]\");\r\n\r\n })();\n\n (function($, undefined$1) {\n // Imports ================================================================\n var math = Math,\n abs = math.abs,\n atan = math.atan,\n atan2 = math.atan2,\n cos = math.cos,\n max = math.max,\n min = math.min,\n sin = math.sin,\n tan = math.tan,\n\n kendo = window.kendo,\n Class = kendo.Class,\n\n dataviz = kendo.dataviz,\n deepExtend = kendo.deepExtend,\n\n util = kendo.drawing.util,\n defined = util.defined,\n deg = util.deg,\n rad = util.rad,\n round = util.round,\n valueOrDefault = util.valueOrDefault,\n\n sqr = kendo.util.sqr;\n\n // Implementation =========================================================\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\n DISTANCE_ITERATIONS: 100,\n DISTANCE_CONVERGENCE: 1e-12,\n DISTANCE_PRECISION: 2,\n FORMAT: \"{0:N6},{1:N6}\",\n\n toArray: function() {\n return [this.lat, this.lng];\n },\n\n equals: function(loc) {\n return loc && loc.lat === this.lat && loc.lng === this.lng;\n },\n\n clone: function() {\n return new Location(this.lat, this.lng);\n },\n\n round: function(precision) {\n this.lng = round(this.lng, precision);\n this.lat = round(this.lat, precision);\n return this;\n },\n\n wrap: function() {\n this.lng = this.lng % 180;\n this.lat = this.lat % 90;\n return this;\n },\n\n distanceTo: function(dest, datum) {\n return this.greatCircleTo(dest, datum).distance;\n },\n\n destination: function(distance, bearing, datum) {\n bearing = rad(bearing);\n datum = datum || dataviz.map.datums.WGS84;\n\n var fromLat = rad(this.lat);\n var fromLng = rad(this.lng);\n var dToR = distance / kendo.dataviz.map.datums.WGS84.a;\n\n var lat = math.asin(sin(fromLat) * cos(dToR) +\n cos(fromLat) * sin(dToR) * cos(bearing));\n\n var lng = fromLng + atan2(sin(bearing) * sin(dToR) * cos(fromLat),\n cos(dToR) - sin(fromLat) * sin(lat));\n\n return new Location(deg(lat), deg(lng));\n },\n\n greatCircleTo: function(dest, datum) {\n dest = Location.create(dest);\n datum = datum || dataviz.map.datums.WGS84;\n\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\n // See http://en.wikipedia.org/wiki/Vincenty's_formulae#Notation\n // o == sigma\n // A == alpha\n var a = datum.a;\n var b = datum.b;\n var f = datum.f;\n\n var L = rad(dest.lng - this.lng);\n\n var U1 = atan((1 - f) * tan(rad(this.lat)));\n var sinU1 = sin(U1);\n var cosU1 = cos(U1);\n\n var U2 = atan((1 - f) * tan(rad(dest.lat)));\n var sinU2 = sin(U2);\n var cosU2 = cos(U2);\n\n var lambda = L;\n var prevLambda;\n\n var i = this.DISTANCE_ITERATIONS;\n var converged = false;\n\n var sinLambda;\n var cosLambda;\n var sino;\n var cosA2;\n var coso;\n var cos2om;\n var sigma;\n\n while (!converged && i-- > 0) {\n sinLambda = sin(lambda);\n cosLambda = cos(lambda);\n sino = math.sqrt(\n sqr(cosU2 * sinLambda) + sqr(cosU1 * sinU2 - sinU1 * cosU2 * cosLambda)\n );\n\n coso = sinU1 * sinU2 + cosU1 * cosU2 * cosLambda;\n sigma = atan2(sino, coso);\n\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\n prevLambda = lambda;\n var C = f / 16 * cosA2 * (4 + f * (4 - 3 * cosA2));\n lambda = L + (1 - C) * f * sinA * (\n sigma + C * sino * (cos2om + C * coso * (-1 + 2 * sqr(cos2om)))\n );\n\n converged = abs(lambda - prevLambda) <= this.DISTANCE_CONVERGENCE;\n }\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 * (\n coso * (-1 + 2 * sqr(cos2om)) - B / 6 * cos2om * (-3 + 4 * sqr(sino)) * (-3 + 4 * sqr(cos2om))\n ));\n\n var azimuthFrom = atan2(cosU2 * sinLambda, cosU1 * sinU2 - sinU1 * cosU2 * cosLambda);\n var azimuthTo = atan2(cosU1 * sinLambda, -sinU1 * cosU2 + cosU1 * sinU2 * cosLambda);\n\n return {\n distance: round(b * A * (sigma - deltao), this.DISTANCE_PRECISION),\n azimuthFrom: deg(azimuthFrom),\n azimuthTo: deg(azimuthTo)\n };\n }\n });\n\n // IE < 9 doesn't allow to override toString on definition\n Location.fn.toString = function() {\n return kendo.format(this.FORMAT, this.lat, this.lng);\n };\n\n Location.fromLngLat = function(ll) {\n return new Location(ll[1], ll[0]);\n };\n\n Location.fromLatLng = function(ll) {\n return new Location(ll[0], ll[1]);\n };\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\n var Extent = Class.extend({\n init: function(nw, se) {\n nw = Location.create(nw);\n se = Location.create(se);\n\n if (nw.lng + 180 > se.lng + 180 &&\n 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\n contains: function(loc) {\n var nw = this.nw,\n se = this.se,\n lng = valueOrDefault(loc.lng, loc[1]),\n lat = valueOrDefault(loc.lat, loc[0]);\n\n return loc &&\n lng + 180 >= nw.lng + 180 &&\n lng + 180 <= se.lng + 180 &&\n lat + 90 >= se.lat + 90 &&\n lat + 90 <= nw.lat + 90;\n },\n\n center: function() {\n var nw = this.nw;\n var se = this.se;\n\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\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\n return result;\n },\n\n include: function(loc) {\n var nw = this.nw,\n se = this.se,\n lng = valueOrDefault(loc.lng, loc[1]),\n lat = valueOrDefault(loc.lat, loc[0]);\n\n nw.lng = min(nw.lng, lng);\n nw.lat = max(nw.lat, lat);\n\n se.lng = max(se.lng, lng);\n se.lat = min(se.lat, lat);\n },\n\n includeAll: function(locs) {\n for (var i = 0; i < locs.length; i++) {\n this.include(locs[i]);\n }\n },\n\n edges: function() {\n var nw = this.nw,\n se = this.se;\n\n return { nw: this.nw, ne: new Location(nw.lat, se.lng),\n se: this.se, sw: new Location(se.lat, nw.lng) };\n },\n\n toArray: function() {\n var nw = this.nw,\n se = this.se;\n\n return [nw, new Location(nw.lat, se.lng),\n se, new Location(se.lat, nw.lng)];\n },\n\n overlaps: function(extent) {\n return this.containsAny(extent.toArray()) ||\n extent.containsAny(this.toArray());\n }\n });\n\n Extent.World = new Extent([90, -180], [-90, 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([a[0], a[1]], [a[2], a[3]]);\n }\n };\n\n // Exports ================================================================\n deepExtend(dataviz, {\n map: {\n Extent: Extent,\n Location: Location\n }\n });\n\n })(window.kendo.jQuery);\n\n (function() {\n var kendo = window.kendo,\n Widget = kendo.ui.Widget,\n template = kendo.template,\n\n util = kendo.drawing.util,\n valueOrDefault = util.valueOrDefault,\n defined = util.defined;\n\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\n options: {\n name: \"Attribution\",\n separator: \" | \",\n itemTemplate: ({ text }) => text\n },\n\n filter: function(extent, zoom) {\n this._extent = extent;\n this._zoom = zoom;\n this._render();\n },\n\n add: function(item) {\n if (defined(item)) {\n if (typeof item === \"string\") {\n item = { text: item };\n }\n\n this.items.push(item);\n this._render();\n }\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\n this.items = result;\n\n this._render();\n },\n\n clear: function() {\n this.items = [];\n this.element.empty();\n },\n\n _render: function() {\n var result = [];\n var itemTemplate = template(this.options.itemTemplate);\n\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({\n text: text\n }));\n }\n }\n\n if (result.length > 0) {\n this.element.empty()\n .append(result.join(this.options.separator))\n .show();\n } else {\n this.element.hide();\n }\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\n if (inZoomLevel && inArea) {\n text += item.text;\n }\n\n return text;\n },\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\n result = this._zoom > min && this._zoom < max;\n\n return result;\n },\n\n _inArea: function(area) {\n var result = true;\n\n if (area) {\n result = area.contains(this._extent);\n }\n\n return result;\n }\n });\n\n kendo.dataviz.ui.plugin(Attribution);\n })(window.kendo.jQuery);\n\n (function($) {\n var kendo = window.kendo;\n var Widget = kendo.ui.Widget;\n var keys = kendo.keys;\n\n var NS = \".kendoNavigator\";\n\n // Helper functions =======================================================\n function button(dir) {\n return `';\n }\n\n var BUTTONS = button(\"up\") + button(\"right\") + button(\"down\") + button(\"left\");\n\n var Navigator = Widget.extend({\n init: function(element, options) {\n Widget.fn.init.call(this, element, options);\n this._initOptions(options);\n\n this.element.addClass(\"k-widget k-navigator\")\n .append(BUTTONS)\n .on(\"click\" + NS, \".k-button\", this._click.bind(this));\n\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\n this._keydown = this._keydown.bind(this);\n this._keyroot.on(\"keydown\", this._keydown);\n },\n\n options: {\n name: \"Navigator\",\n panStep: 1\n },\n\n events: [\n \"pan\"\n ],\n\n dispose: function() {\n this._keyroot.off(\"keydown\", this._keydown);\n },\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\n _click: function(e) {\n var x = 0;\n var y = 0;\n var button = $(e.currentTarget);\n\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\n this._pan(x, y);\n e.preventDefault();\n },\n\n _keydown: function(e) {\n switch (e.which) {\n case keys.UP:\n this._pan(0, 1);\n e.preventDefault();\n break;\n\n case keys.DOWN:\n this._pan(0, -1);\n e.preventDefault();\n break;\n\n case keys.RIGHT:\n this._pan(1, 0);\n e.preventDefault();\n break;\n\n case keys.LEFT:\n this._pan(-1, 0);\n e.preventDefault();\n break;\n }\n }\n });\n\n // Exports ================================================================\n kendo.dataviz.ui.plugin(Navigator);\n\n })(window.kendo.jQuery);\n\n (function($) {\n var kendo = window.kendo;\n var Widget = kendo.ui.Widget;\n var keys = kendo.keys;\n\n // Helper functions =======================================================\n function button(dir, icon) {\n return ``;\n }\n\n var NS = \".kendoZoomControl\";\n var BUTTONS = button(\"in\", \"plus\") + button(\"out\", \"minus\");\n\n var PLUS = 187;\n var MINUS = 189;\n var FF_PLUS = 61;\n var FF_MINUS = 173;\n\n\n var ZoomControl = Widget.extend({\n init: function(element, options) {\n Widget.fn.init.call(this, element, options);\n this._initOptions(options);\n\n this.element.addClass(\"k-widget k-zoom-control k-button-group k-group-horizontal\")\n .append(BUTTONS)\n .on(\"click\" + NS, \".k-button\", this._click.bind(this));\n\n var parentElement = this.element.parent().closest(\"[\" + kendo.attr(\"role\") + \"]\");\n this._keyroot = parentElement.length > 0 ? parentElement : this.element;\n\n this._tabindex(this._keyroot);\n\n this._keydown = this._keydown.bind(this);\n this._keyroot.on(\"keydown\", this._keydown);\n },\n\n options: {\n name: \"ZoomControl\",\n zoomStep: 1\n },\n\n events: [\n \"change\"\n ],\n\n _change: function(dir) {\n var zoomStep = this.options.zoomStep;\n this.trigger(\"change\", {\n delta: dir * zoomStep\n });\n },\n\n _click: function(e) {\n var button = $(e.currentTarget);\n var dir = 1;\n\n if (button.is(\".k-zoom-out\")) {\n dir = -1;\n }\n\n this._change(dir);\n e.preventDefault();\n },\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\n case keys.NUMPAD_MINUS:\n case MINUS:\n case FF_MINUS:\n this._change(-1);\n break;\n }\n }\n });\n\n\n // Exports ================================================================\n kendo.dataviz.ui.plugin(ZoomControl);\n\n })(window.kendo.jQuery);\n\n (function($, undefined$1) {\n // Imports ================================================================\n var math = Math,\n atan = math.atan,\n exp = math.exp,\n pow = math.pow,\n sin = math.sin,\n log = math.log,\n tan = math.tan,\n\n kendo = window.kendo,\n Class = kendo.Class,\n\n dataviz = kendo.dataviz,\n deepExtend = kendo.deepExtend,\n\n g = kendo.geometry,\n Point = g.Point,\n\n map = dataviz.map,\n Location = map.Location,\n\n util = kendo.drawing.util,\n rad = util.rad,\n deg = util.deg,\n limit = util.limitValue;\n\n // Constants ==============================================================\n var PI = math.PI,\n PI_DIV_2 = PI / 2,\n PI_DIV_4 = PI / 4,\n DEG_TO_RAD = PI / 180;\n\n // Coordinate reference systems ===========================================\n var WGS84 = {\n a: 6378137, // Semi-major radius\n b: 6356752.314245179, // Semi-minor radius\n f: 0.0033528106647474805, // Flattening\n e: 0.08181919084262149 // Eccentricity\n };\n\n // WGS 84 / World Mercator\n var Mercator = Class.extend({\n init: function(options) {\n this._initOptions(options);\n },\n\n MAX_LNG: 180,\n MAX_LAT: 85.0840590501,\n INVERSE_ITERATIONS: 15,\n INVERSE_CONVERGENCE: 1e-12,\n\n options: {\n centralMeridian: 0,\n datum: WGS84\n },\n\n forward: function(loc, clamp) {\n var proj = this,\n options = proj.options,\n datum = options.datum,\n r = datum.a,\n lng0 = options.centralMeridian,\n lat = limit(loc.lat, -proj.MAX_LAT, proj.MAX_LAT),\n lng = clamp ? limit(loc.lng, -proj.MAX_LNG, proj.MAX_LNG) : loc.lng,\n x = rad(lng - lng0) * r,\n y = proj._projectLat(lat);\n\n return new Point(x, y);\n },\n\n _projectLat: function(lat) {\n var datum = this.options.datum,\n ecc = datum.e,\n r = datum.a,\n y = rad(lat),\n ts = tan(PI_DIV_4 + y / 2),\n con = ecc * sin(y),\n p = pow((1 - con) / (1 + con), ecc / 2);\n\n // See:\n // http://en.wikipedia.org/wiki/Mercator_projection#Generalization_to_the_ellipsoid\n return r * log(ts * p);\n },\n\n inverse: function(point, clamp) {\n var proj = this,\n options = proj.options,\n datum = options.datum,\n r = datum.a,\n lng0 = options.centralMeridian,\n lng = point.x / (DEG_TO_RAD * r) + lng0,\n lat = limit(proj._inverseY(point.y), -proj.MAX_LAT, proj.MAX_LAT);\n\n if (clamp) {\n lng = limit(lng, -proj.MAX_LNG, proj.MAX_LNG);\n }\n\n return new Location(lat, lng);\n },\n\n _inverseY: function(y) {\n var proj = this,\n datum = proj.options.datum,\n r = datum.a,\n ecc = datum.e,\n ecch = ecc / 2,\n ts = exp(-y / r),\n phi = PI_DIV_2 - 2 * atan(ts),\n i;\n\n for (i = 0; i <= proj.INVERSE_ITERATIONS; i++) {\n var con = ecc * sin(phi),\n p = pow((1 - con) / (1 + con), ecch),\n dphi = PI_DIV_2 - 2 * atan(ts * p) - phi;\n\n phi += dphi;\n\n if (math.abs(dphi) <= proj.INVERSE_CONVERGENCE) {\n break;\n }\n }\n\n return deg(phi);\n }\n });\n\n // WGS 84 / Pseudo-Mercator\n // Used by Google Maps, Bing, OSM, etc.\n // Spherical projection of ellipsoidal coordinates.\n var SphericalMercator = Mercator.extend({\n MAX_LAT: 85.0511287798,\n\n _projectLat: function(lat) {\n var r = this.options.datum.a,\n y = rad(lat),\n ts = tan(PI_DIV_4 + y / 2);\n\n return r * log(ts);\n },\n\n _inverseY: function(y) {\n var r = this.options.datum.a,\n ts = exp(-y / r);\n\n return deg(PI_DIV_2 - (2 * atan(ts)));\n }\n });\n\n var Equirectangular = Class.extend({\n forward: function(loc) {\n return new Point(loc.lng, loc.lat);\n },\n\n inverse: function(point) {\n return new Location(point.y, point.x);\n }\n });\n\n // TODO: Better (less cryptic name) for this class(es)\n var EPSG3857 = Class.extend({\n init: function() {\n var crs = this,\n proj = crs._proj = new SphericalMercator();\n\n var c = this.c = 2 * PI * proj.options.datum.a;\n\n // Scale circumference to 1, mirror Y and shift origin to top left\n this._tm = g.transform().translate(0.5, 0.5).scale(1 / c, -1 / c);\n\n // Inverse transform matrix\n this._itm = g.transform().scale(c, -c).translate(-0.5, -0.5);\n },\n\n // Location <-> Point (screen coordinates for a given scale)\n toPoint: function(loc, scale, clamp) {\n var point = this._proj.forward(loc, clamp);\n\n return point\n .transform(this._tm)\n .scale(scale || 1);\n },\n\n toLocation: function(point, scale, clamp) {\n point = point\n .clone()\n .scale(1 / (scale || 1))\n .transform(this._itm);\n\n return this._proj.inverse(point, clamp);\n }\n });\n\n var EPSG3395 = Class.extend({\n init: function() {\n this._proj = new Mercator();\n },\n\n toPoint: function(loc) {\n return this._proj.forward(loc);\n },\n\n toLocation: function(point) {\n return this._proj.inverse(point);\n }\n });\n\n // WGS 84\n var EPSG4326 = Class.extend({\n init: function() {\n this._proj = new Equirectangular();\n },\n\n toPoint: function(loc) {\n return this._proj.forward(loc);\n },\n\n toLocation: function(point) {\n return this._proj.inverse(point);\n }\n });\n\n // Exports ================================================================\n deepExtend(dataviz, {\n map: {\n crs: {\n EPSG3395: EPSG3395,\n EPSG3857: EPSG3857,\n EPSG4326: EPSG4326\n },\n datums: {\n WGS84: WGS84\n },\n projections: {\n Equirectangular: Equirectangular,\n Mercator: Mercator,\n SphericalMercator: SphericalMercator\n }\n }\n });\n\n })(window.kendo.jQuery);\n\n (function($, undefined$1) {\n // Imports ================================================================\n var kendo = window.kendo,\n Class = kendo.Class,\n\n dataviz = kendo.dataviz,\n deepExtend = kendo.deepExtend,\n\n Extent = dataviz.map.Extent,\n\n util = kendo.drawing.util,\n defined = util.defined;\n\n // Implementation =========================================================\n var Layer = Class.extend({\n init: function(map, options) {\n this._initOptions(options);\n this.map = map;\n\n this.element = $(\"
\")\n .css({\n \"zIndex\": this.options.zIndex,\n \"opacity\": this.options.opacity\n })\n .appendTo(map.scrollElement);\n\n this._beforeReset = this._beforeReset.bind(this);\n this._reset = this._reset.bind(this);\n this._resize = this._resize.bind(this);\n this._panEnd = this._panEnd.bind(this);\n this._activate();\n\n this._updateAttribution();\n },\n\n destroy: function() {\n this._deactivate();\n },\n\n show: function() {\n this.reset();\n this._activate();\n this._applyExtent(true);\n },\n\n hide: function() {\n this._deactivate();\n this._setVisibility(false);\n },\n\n reset: function() {\n this._beforeReset();\n this._reset();\n },\n\n _reset: function() {\n this._applyExtent();\n },\n\n _beforeReset: $.noop,\n\n _resize: $.noop,\n\n _panEnd: function() {\n this._applyExtent();\n },\n\n _applyExtent: function() {\n var options = this.options;\n\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\n var extent = Extent.create(options.extent);\n var inside = !extent || extent.overlaps(this.map.extent());\n\n this._setVisibility(matchMinZoom && matchMaxZoom && inside);\n },\n\n _setVisibility: function(visible) {\n this.element.css(\"display\", visible ? \"\" : \"none\");\n },\n\n _activate: function() {\n var map = this.map;\n this._deactivate();\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\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\n _updateAttribution: function() {\n var attr = this.map.attribution;\n\n if (attr) {\n attr.add(this.options.attribution);\n }\n }\n });\n\n // Exports ================================================================\n deepExtend(dataviz, {\n map: {\n layers: {\n Layer: Layer\n }\n }\n });\n\n })(window.kendo.jQuery);\n\n (function($, undefined$1) {\n // Imports ================================================================\n var kendo = window.kendo,\n Class = kendo.Class,\n DataSource = kendo.data.DataSource,\n\n dataviz = kendo.dataviz,\n deepExtend = kendo.deepExtend,\n\n g = kendo.geometry,\n\n d = kendo.drawing,\n Group = d.Group,\n\n last = d.util.last,\n defined = d.util.defined,\n\n map = dataviz.map,\n Location = map.Location,\n Layer = map.layers.Layer;\n\n // Implementation =========================================================\n var ShapeLayer = Layer.extend({\n init: function(map, options) {\n\n this._pan = this._pan.bind(this);\n\n Layer.fn.init.call(this, map, options);\n\n this.surface = d.Surface.create(this.element, {\n width: map.scrollElement.width(),\n height: map.scrollElement.height()\n });\n\n this._initRoot();\n\n this.movable = new kendo.ui.Movable(this.surface.element);\n this._markers = [];\n\n this._click = this._handler(\"shapeClick\");\n this.surface.bind(\"click\", this._click);\n\n this._mouseenter = this._handler(\"shapeMouseEnter\");\n this.surface.bind(\"mouseenter\", this._mouseenter);\n\n this._mouseleave = this._handler(\"shapeMouseLeave\");\n this.surface.bind(\"mouseleave\", this._mouseleave);\n\n this._initDataSource();\n },\n\n options: {\n autoBind: true\n },\n\n destroy: function() {\n Layer.fn.destroy.call(this);\n\n this.surface.destroy();\n this.dataSource.unbind(\"change\", this._dataChange);\n },\n\n setDataSource: function(dataSource) {\n if (this.dataSource) {\n this.dataSource.unbind(\"change\", this._dataChange);\n }\n\n this.dataSource = kendo.data.DataSource.create(dataSource);\n this.dataSource.bind(\"change\", this._dataChange);\n\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n\n _reset: function() {\n Layer.fn._reset.call(this);\n this._translateSurface();\n\n if (this._data) {\n this._load(this._data);\n }\n },\n\n _initRoot: function() {\n this._root = new Group();\n this.surface.draw(this._root);\n },\n\n _beforeReset: function() {\n this.surface.clear();\n this._initRoot();\n },\n\n _resize: function() {\n this.surface.size(this.map.size());\n },\n\n _initDataSource: function() {\n var dsOptions = this.options.dataSource;\n this._dataChange = this._dataChange.bind(this);\n this.dataSource = DataSource\n .create(dsOptions)\n .bind(\"change\", this._dataChange);\n\n if (dsOptions && this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n\n _dataChange: function(e) {\n this._data = e.sender.view();\n this._load(this._data);\n },\n\n _load: function(data) {\n this._clearMarkers();\n\n if (!this._loader) {\n this._loader = new GeoJSONLoader(this.map, this.options.style, this);\n }\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\n this._root.clear();\n this._root.append(container);\n },\n\n shapeCreated: function(shape) {\n var cancelled = false;\n if (shape instanceof d.Circle) {\n cancelled = defined(this._createMarker(shape));\n }\n\n if (!cancelled) {\n var args = { layer: this, shape: shape };\n cancelled = this.map.trigger(\"shapeCreated\", args);\n }\n\n return cancelled;\n },\n\n featureCreated: function(e) {\n e.layer = this;\n this.map.trigger(\"shapeFeatureCreated\", e);\n },\n\n _createMarker: function(shape) {\n var marker = this.map.markers.bind({\n location: shape.location\n }, shape.dataItem);\n\n if (marker) {\n this._markers.push(marker);\n }\n\n return marker;\n },\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\n _pan: function() {\n if (!this._panning) {\n this._panning = true;\n this.surface.suspendTracking();\n }\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\n _translateSurface: function() {\n var map = this.map;\n var nw = map.locationToView(map.extent().nw);\n\n if (this.surface.translate) {\n this.surface.translate(nw);\n this.movable.moveTo({ x: nw.x, 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\n layer.map.trigger(event, args);\n }\n };\n },\n\n _activate: function() {\n Layer.fn._activate.call(this);\n\n this.map.bind(\"pan\", this._pan);\n },\n\n _deactivate: function() {\n Layer.fn._deactivate.call(this);\n\n this.map.unbind(\"pan\", this._pan);\n }\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\n parse: function(item) {\n var root = new Group();\n var unwrap = true;\n\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\n if (unwrap && root.children.length < 2) {\n root = root.children[0];\n }\n\n return root;\n },\n\n _shapeCreated: function(shape) {\n var cancelled = false;\n\n if (this.observer && this.observer.shapeCreated) {\n cancelled = this.observer.shapeCreated(shape);\n }\n\n return cancelled;\n },\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\n _loadGeometryTo: function(container, geometry, dataItem) {\n var coords = geometry.coordinates;\n var i;\n var path;\n\n switch (geometry.type) {\n case \"LineString\":\n path = this._loadPolygon(container, [coords], dataItem);\n this._setLineFill(path);\n break;\n\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\n case \"Polygon\":\n this._loadPolygon(container, coords, dataItem);\n break;\n\n case \"MultiPolygon\":\n for (i = 0; i < coords.length; i++) {\n this._loadPolygon(container, coords[i], dataItem);\n }\n break;\n\n case \"Point\":\n this._loadPoint(container, coords, dataItem);\n break;\n\n case \"MultiPoint\":\n for (i = 0; i < coords.length; i++) {\n this._loadPoint(container, coords[i], dataItem);\n }\n break;\n }\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\n _loadShape: function(container, shape) {\n if (!this._shapeCreated(shape)) {\n container.append(shape);\n }\n\n return shape;\n },\n\n _loadPolygon: function(container, rings, dataItem) {\n var shape = this._buildPolygon(rings);\n shape.dataItem = dataItem;\n\n return this._loadShape(container, shape);\n },\n\n _buildPolygon: function(rings) {\n var type = rings.length > 1 ? d.MultiPath : d.Path;\n var path = new type(this.style);\n\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(\n Location.fromLngLat(rings[i][j])\n );\n\n if (j === 0) {\n path.moveTo(point.x, point.y);\n } else {\n path.lineTo(point.x, point.y);\n }\n }\n }\n\n return path;\n },\n\n _loadPoint: function(container, coords, dataItem) {\n var location = Location.fromLngLat(coords);\n var point = this.locator.locationToView(location);\n\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\n return this._loadShape(container, shape);\n }\n });\n\n // Exports ================================================================\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\n if (data.type === \"GeometryCollection\") {\n return data.geometries;\n }\n\n return data;\n }\n }\n },\n transports: {\n geojson: {\n read: {\n dataType: \"json\"\n }\n }\n }\n });\n\n deepExtend(dataviz, {\n map: {\n layers: {\n shape: ShapeLayer,\n ShapeLayer: ShapeLayer\n },\n GeoJSONLoader: GeoJSONLoader\n }\n });\n\n })(window.kendo.jQuery);\n\n (function($, undefined$1) {\n // Imports ================================================================\n var kendo = window.kendo,\n getter = kendo.getter,\n\n dataviz = kendo.dataviz,\n deepExtend = kendo.deepExtend,\n\n g = kendo.geometry,\n d = kendo.drawing,\n\n util = d.util,\n defined = util.defined,\n\n map = dataviz.map,\n Location = map.Location,\n ShapeLayer = map.layers.ShapeLayer;\n\n // Implementation =========================================================\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\n _load: function(data) {\n this.surface.clear();\n\n if (data.length === 0) {\n return;\n }\n\n var opt = this.options;\n var getValue = getter(opt.valueField);\n\n data = data.slice(0);\n data.sort(function(a, b) {\n return getValue(b) - getValue(a);\n });\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\n if (defined(location) && defined(value)) {\n if (!scale) {\n scale = new scaleType([0, value], [opt.minSize, opt.maxSize]);\n }\n\n location = Location.create(location);\n var center = this.map.locationToView(location);\n var size = scale.map(value);\n\n var symbol = this._createSymbol({\n center: center,\n size: size,\n style: opt.style,\n dataItem: dataItem,\n location: location\n });\n\n symbol.dataItem = dataItem;\n symbol.location = location;\n symbol.value = value;\n\n this._drawSymbol(symbol);\n }\n }\n },\n\n _scaleType: function() {\n var scale = this.options.scale;\n\n if (kendo.isFunction(scale)) {\n return scale;\n }\n\n return dataviz.map.scales[scale];\n },\n\n _createSymbol: function(args) {\n var symbol = this.options.symbol;\n if (!kendo.isFunction(symbol)) {\n symbol = dataviz.map.symbols[symbol];\n }\n\n return symbol(args);\n },\n\n _drawSymbol: function(shape) {\n var args = { layer: this, shape: shape };\n var cancelled = this.map.trigger(\"shapeCreated\", args);\n if (!cancelled) {\n this.surface.draw(shape);\n }\n }\n });\n\n var SqrtScale = kendo.Class.extend({\n init: function(domain, range) {\n this._domain = domain;\n this._range = range;\n\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\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\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\n square: function(args) {\n var path = new d.Path(args.style);\n var halfSize = args.size / 2;\n var center = args.center;\n\n path.moveTo(center.x - halfSize, center.y - halfSize)\n .lineTo(center.x + halfSize, center.y - halfSize)\n .lineTo(center.x + halfSize, center.y + halfSize)\n .lineTo(center.x - halfSize, center.y + halfSize)\n .close();\n\n return path;\n }\n };\n\n // Exports ================================================================\n deepExtend(dataviz, {\n map: {\n layers: {\n bubble: BubbleLayer,\n BubbleLayer: BubbleLayer\n },\n scales: {\n sqrt: SqrtScale\n },\n symbols: Symbols\n }\n });\n\n })(window.kendo.jQuery);\n\n (function($, undefined$1) {\n // Imports ================================================================\n var math = Math,\n\n kendo = window.kendo,\n Class = kendo.Class,\n template = kendo.template,\n\n dataviz = kendo.dataviz,\n deepExtend = kendo.deepExtend,\n\n g = kendo.geometry,\n Point = g.Point,\n\n Layer = dataviz.map.layers.Layer,\n\n util = kendo.util,\n renderSize = util.renderSize,\n\n drawingUtil = kendo.drawing.util,\n round = drawingUtil.round,\n limit = drawingUtil.limitValue;\n\n // Image tile layer =============================================================\n var TileLayer = Layer.extend({\n init: function(map, options) {\n Layer.fn.init.call(this, map, options);\n\n if (typeof this.options.subdomains === \"string\") {\n this.options.subdomains = this.options.subdomains.split(\"\");\n }\n\n var viewType = this._viewType();\n this._view = new viewType(this.element, this.options);\n },\n\n destroy: function() {\n Layer.fn.destroy.call(this);\n\n this._view.destroy();\n this._view = null;\n },\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\n _reset: function(e) {\n var tileTitle;\n\n if (e) {\n tileTitle = e.tileTitle;\n } else {\n tileTitle = \"\";\n }\n\n Layer.fn._reset.call(this);\n this._updateView();\n this._view.reset(tileTitle);\n },\n\n _viewType: function() {\n return TileView;\n },\n\n _activate: function() {\n Layer.fn._activate.call(this);\n\n if (!kendo.support.mobileOS) {\n if (!this._pan) {\n this._pan = kendo.throttle(\n this._render.bind(this),\n 100\n );\n }\n\n this.map.bind(\"pan\", this._pan);\n }\n },\n\n _deactivate: function() {\n Layer.fn._deactivate.call(this);\n\n if (this._pan) {\n this.map.unbind(\"pan\", this._pan);\n }\n },\n\n _updateView: function() {\n var view = this._view,\n map = this.map,\n extent = map.extent(),\n extentToPoint = {\n nw: map.locationToLayer(extent.nw).round(),\n se: map.locationToLayer(extent.se).round()\n };\n\n view.center(map.locationToLayer(map.center()));\n view.extent(extentToPoint);\n view.zoom(map.zoom());\n },\n\n _resize: function() {\n this._render();\n },\n\n _panEnd: function(e) {\n Layer.fn._panEnd.call(this, e);\n this._render();\n },\n\n _render: function() {\n this._updateView();\n this._view.render();\n }\n });\n\n var TileView = Class.extend({\n init: function(element, options) {\n this.element = element;\n this._initOptions(options);\n\n this.pool = new TilePool();\n },\n\n options: {\n tileSize: 256,\n subdomains: [\"a\", \"b\", \"c\"],\n urlTemplate: () => \"\"\n },\n\n center: function(center) {\n this._center = center;\n },\n\n extent: function(extent) {\n this._extent = extent;\n },\n\n viewOrigin: function(origin) {\n this._viewOrigin = origin;\n },\n\n zoom: function(zoom) {\n this._zoom = zoom;\n },\n\n pointToTileIndex: function(point) {\n return new Point(\n math.floor(point.x / this.options.tileSize),\n math.floor(point.y / this.options.tileSize)\n );\n },\n\n tileCount: function() {\n var size = this.size(),\n firstTileIndex = this.pointToTileIndex(this._extent.nw),\n nw = this._extent.nw,\n point = this.indexToPoint(firstTileIndex).translate(-nw.x, -nw.y);\n\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\n size: function() {\n var nw = this._extent.nw,\n se = this._extent.se,\n diff = se.clone().translate(-nw.x, -nw.y);\n\n return {\n width: diff.x,\n height: diff.y\n };\n },\n\n indexToPoint: function(index) {\n var x = index.x, y = index.y;\n\n return new Point(\n x * this.options.tileSize,\n y * this.options.tileSize\n );\n },\n\n subdomainText: function() {\n var subdomains = this.options.subdomains;\n\n return subdomains[this.subdomainIndex++ % subdomains.length];\n },\n\n destroy: function() {\n this.element.empty();\n this.pool.empty();\n },\n\n reset: function(tileTitle) {\n this._tileTitle = tileTitle;\n this.pool.reset();\n this.subdomainIndex = 0;\n this.render();\n },\n\n render: function() {\n var size = this.tileCount(),\n firstTileIndex = this.pointToTileIndex(this._extent.nw),\n tile, x, y;\n\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\n if (!tile.visible) {\n tile.show();\n }\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\n return tile;\n },\n\n tileOptions: function(currentIndex) {\n var index = this.wrapIndex(currentIndex),\n point = this.indexToPoint(currentIndex),\n origin = this._viewOrigin,\n offset = point.clone().translate(-origin.x, -origin.y);\n\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 tileTitle: this._tileTitle\n };\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\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\n return value;\n }\n });\n\n var ImageTile = Class.extend({\n init: function(id, options) {\n this.id = id;\n this.visible = true;\n\n this._initOptions(options);\n this.createElement();\n this.show();\n },\n\n options: {\n urlTemplate: () => \"\",\n errorUrlTemplate: () => \"\"\n },\n\n createElement: function() {\n this.element = $(\"\" + this.options.tileTitle + \"\")\n .css({ position: \"absolute\", display: \"block\", width: this.options.size, height: this.options.size })\n .on(\"error\", (function(e) {\n if (this.errorUrl()) {\n e.target.setAttribute(\"src\", this.errorUrl());\n } else {\n e.target.removeAttribute(\"src\");\n }\n }).bind(this));\n },\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\n var url = this.url();\n if (url) {\n element.setAttribute(\"src\", url);\n }\n\n element.style.visibility = \"visible\";\n this.visible = true;\n },\n\n hide: function() {\n this.element[0].style.visibility = \"hidden\";\n this.visible = false;\n },\n\n url: function() {\n var urlResult = template(this.options.urlTemplate);\n\n return urlResult(this.urlOptions());\n },\n\n errorUrl: function() {\n var urlResult = template(this.options.errorUrlTemplate);\n\n return urlResult(this.urlOptions());\n },\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\n destroy: function() {\n if (this.element) {\n this.element.remove();\n this.element = null;\n }\n }\n });\n\n var TilePool = Class.extend({\n init: function() {\n this._items = [];\n },\n\n options: {\n maxSize: 100\n },\n\n get: function(center, options) {\n if (this._items.length >= this.options.maxSize) {\n this._remove(center);\n }\n\n return this._create(options);\n },\n\n empty: function() {\n var items = this._items;\n for (var i = 0; i < items.length; i++) {\n items[i].destroy();\n }\n\n this._items = [];\n },\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\n _create: function(options) {\n var items = this._items;\n var tile;\n\n // Build an unique token for the image\n // This normally would be the URL, but we don't care about subdomains\n var id = util.hashKey(\n options.point.toString() +\n options.offset.toString() +\n options.zoom +\n options.urlTemplate\n );\n\n for (var i = 0; i < items.length; i++) {\n if (items[i].id === id) {\n tile = items[i];\n break;\n }\n }\n\n if (tile) {\n tile.show();\n } else {\n tile = new ImageTile(id, options);\n this._items.push(tile);\n }\n\n return tile;\n },\n\n _remove: function(center) {\n var items = this._items;\n var maxDist = -1;\n var index = -1;\n\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\n if (index !== -1) {\n items[index].destroy();\n items.splice(index, 1);\n }\n }\n });\n\n // Methods ================================================================\n function roundPoint(point) {\n return new Point(round(point.x), round(point.y));\n }\n\n // Exports ================================================================\n deepExtend(dataviz, {\n map: {\n layers: {\n tile: TileLayer,\n TileLayer: TileLayer,\n\n ImageTile: ImageTile,\n TilePool: TilePool,\n TileView: TileView\n }\n }\n });\n\n })(window.kendo.jQuery);\n\n (function($, undefined$1) {\n // Imports ================================================================\n var kendo = window.kendo,\n\n dataviz = kendo.dataviz,\n deepExtend = kendo.deepExtend,\n defined = kendo.drawing.util.defined,\n\n Extent = dataviz.map.Extent,\n Location = dataviz.map.Location,\n TileLayer = dataviz.map.layers.TileLayer,\n TileView = dataviz.map.layers.TileView;\n\n // Bing tile layer =============================================================\n var BingLayer = TileLayer.extend({\n init: function(map, options) {\n this.options.baseUrl =\n this._scheme() +\n \"://dev.virtualearth.net/REST/v1/Imagery/Metadata/\";\n\n TileLayer.fn.init.call(this, map, options);\n\n this._onMetadata = this._onMetadata.bind(this);\n this._fetchMetadata();\n },\n\n options: {\n imagerySet: \"road\"\n },\n\n _fetchMetadata: function() {\n var options = this.options;\n\n if (!options.key) {\n throw new Error(\"Bing tile layer: API key is required\");\n }\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\n _scheme: function(proto) {\n proto = proto || window.location.protocol;\n return proto.replace(\":\", \"\") === \"https\" ? \"https\" : \"http\";\n },\n\n _onMetadata: function(data) {\n var that = this;\n if (data && data.resourceSets.length) {\n var resource = that.resource = data.resourceSets[0].resources[0];\n\n deepExtend(that._view.options, {\n urlTemplate: ({ subdomain, quadkey, culture }) => that.resource.imageUrl\n .replace(\"{subdomain}\", subdomain)\n .replace(\"{quadkey}\", quadkey)\n .replace(\"{culture}\", culture),\n subdomains: resource.imageUrlSubdomains\n });\n\n var options = that.options;\n if (!defined(options.minZoom)) {\n options.minZoom = resource.zoomMin;\n }\n if (!defined(options.maxZoom)) {\n options.maxZoom = resource.zoomMax;\n }\n\n that._addAttribution();\n\n if (that.element.css(\"display\") !== \"none\") {\n that._reset();\n }\n }\n },\n\n _viewType: function() {\n return BingView;\n },\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(\n new Location(area.bbox[2], area.bbox[1]),\n new Location(area.bbox[0], area.bbox[3])\n )\n });\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\n var BingView = TileView.extend({\n options: {\n culture: \"en-US\"\n },\n\n tileOptions: function(currentIndex) {\n var options = TileView.fn.tileOptions.call(this, currentIndex);\n\n options.culture = this.options.culture;\n options.quadkey = this.tileQuadKey(this.wrapIndex(currentIndex));\n\n return options;\n },\n\n tileQuadKey: function(index) {\n var quadKey = \"\",\n digit, mask, i;\n\n for (i = this._zoom; i > 0; i--) {\n digit = 0;\n mask = 1 << (i - 1);\n\n if ((index.x & mask) !== 0) {\n digit++;\n }\n\n if ((index.y & mask) !== 0) {\n digit += 2;\n }\n\n quadKey += digit;\n }\n\n return quadKey;\n }\n });\n\n // Exports ================================================================\n deepExtend(dataviz, {\n map: {\n layers: {\n bing: BingLayer,\n BingLayer: BingLayer,\n BingView: BingView\n }\n }\n });\n\n })(window.kendo.jQuery);\n\n (function($, undefined$1) {\n // Imports ================================================================\n var doc = document,\n math = Math,\n indexOf = $.inArray,\n\n kendo = window.kendo,\n Class = kendo.Class,\n DataSource = kendo.data.DataSource,\n Tooltip = kendo.ui.Tooltip,\n\n dataviz = kendo.dataviz,\n deepExtend = kendo.deepExtend,\n\n map = dataviz.map,\n Location = map.Location,\n Layer = map.layers.Layer;\n\n // Implementation =========================================================\n var MarkerLayer = Layer.extend({\n init: function(map, options) {\n Layer.fn.init.call(this, map, options);\n\n this._markerClick = this._markerClick.bind(this);\n this.element.on(\"click\", \".k-marker\", this._markerClick);\n\n this.items = [];\n this._initDataSource();\n },\n\n destroy: function() {\n Layer.fn.destroy.call(this);\n\n this.element.off(\"click\", \".k-marker\", this._markerClick);\n\n this.dataSource.unbind(\"change\", this._dataChange);\n this.clear();\n },\n\n options: {\n zIndex: 1000,\n autoBind: true,\n dataSource: {},\n locationField: \"location\",\n titleField: \"title\"\n },\n\n add: function(arg) {\n if (Array.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\n remove: function(marker) {\n marker.destroy();\n\n var index = indexOf(marker, this.items);\n if (index > -1) {\n this.items.splice(index, 1);\n }\n },\n\n clear: function() {\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].destroy();\n }\n\n this.items = [];\n },\n\n update: function(marker) {\n var loc = marker.location();\n if (loc) {\n marker.showAt(this.map.locationToView(loc));\n\n var args = { marker: marker, layer: this };\n this.map.trigger(\"markerActivate\", args);\n }\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\n bind: function(options, dataItem) {\n var marker = map.Marker.create(options, this.options);\n marker.dataItem = dataItem;\n\n var args = { marker: marker, layer: this };\n var cancelled = this.map.trigger(\"markerCreated\", args);\n if (!cancelled) {\n this.add(marker);\n return marker;\n }\n },\n\n setDataSource: function(dataSource) {\n if (this.dataSource) {\n this.dataSource.unbind(\"change\", this._dataChange);\n }\n\n this.dataSource = kendo.data.DataSource.create(dataSource);\n this.dataSource.bind(\"change\", this._dataChange);\n\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n\n _addOne: function(arg) {\n var marker = Marker.create(arg, this.options);\n marker.addTo(this);\n\n return marker;\n },\n\n _initDataSource: function() {\n var dsOptions = this.options.dataSource;\n this._dataChange = this._dataChange.bind(this);\n this.dataSource = DataSource\n .create(dsOptions)\n .bind(\"change\", this._dataChange);\n\n if (dsOptions && this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n\n _dataChange: function(e) {\n this._load(e.sender.view());\n },\n\n _load: function(data) {\n this._data = data;\n this.clear();\n\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\n _markerClick: function(e) {\n var args = { marker: $(e.currentTarget).data(\"kendoMarker\"), layer: this };\n this.map.trigger(\"markerClick\", args);\n }\n });\n\n var Marker = Class.extend({\n init: function(options) {\n this.options = options || {};\n },\n\n addTo: function(parent) {\n this.layer = parent.markers || parent;\n this.layer.items.push(this);\n this.layer.update(this);\n },\n\n location: function(value) {\n if (value) {\n this.options.location = Location.create(value).toArray();\n\n if (this.layer) {\n this.layer.update(this);\n }\n\n return this;\n } else {\n return Location.create(this.options.location);\n }\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\n if (this.tooltip && this.tooltip.popup) {\n // TODO: Expose popup/tooltip updatePosition? method\n this.tooltip.popup._position();\n }\n },\n\n hide: function() {\n if (this.element) {\n this.element.remove();\n this.element = null;\n }\n\n if (this.tooltip) {\n this.tooltip.destroy();\n this.tooltip = null;\n }\n },\n\n destroy: function() {\n this.layer = null;\n this.hide();\n },\n\n render: function() {\n if (!this.element) {\n var options = this.options;\n var layer = this.layer;\n\n this.element = $(doc.createElement(\"span\"))\n .attr(\"title\", options.title)\n .attr(options.attributes || {})\n .data(\"kendoMarker\", this)\n .css(\"zIndex\", options.zIndex);\n\n if (options.shape) {\n if (options.shape === \"pinTarget\") {\n kendo.ui.icon(this.element, { icon: \"map-marker-target\", iconClass: \"k-marker\", size: \"xxlarge\" });\n } else if (options.shape === \"pin\") {\n kendo.ui.icon(this.element, { icon: \"map-marker\", iconClass: \"k-marker\", size: \"xxlarge\" });\n } else {\n this.element.addClass(\"k-marker k-icon k-i-marker-\" + kendo.toHyphens(options.shape));\n }\n } else {\n kendo.ui.icon(this.element, { icon: \"map-marker\", iconClass: \"k-marker\", size: \"xxlarge\" });\n }\n\n if (layer) {\n layer.element.append(this.element);\n }\n\n this.renderTooltip();\n }\n },\n\n renderTooltip: function() {\n var marker = this;\n var title = marker.options.title;\n var options = marker.options.tooltip || {};\n\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\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\n Marker.create = function(arg, defaults) {\n if (arg instanceof Marker) {\n return arg;\n }\n\n return new Marker(deepExtend({}, defaults, arg));\n };\n\n // Exports ================================================================\n deepExtend(dataviz, {\n map: {\n layers: {\n marker: MarkerLayer,\n MarkerLayer: MarkerLayer\n },\n Marker: Marker\n }\n });\n\n })(window.kendo.jQuery);\n\n (function($, undefined$1) {\n // Imports ================================================================\n var doc = document,\n math = Math,\n min = math.min,\n pow = math.pow,\n\n kendo = window.kendo,\n Widget = kendo.ui.Widget,\n deepExtend = kendo.deepExtend,\n\n dataviz = kendo.dataviz,\n ui = dataviz.ui,\n\n g = kendo.geometry,\n Point = g.Point,\n\n map = dataviz.map,\n Extent = map.Extent,\n Location = map.Location,\n EPSG3857 = map.crs.EPSG3857,\n\n util = kendo.util,\n renderPos = util.renderPos,\n\n drawingUtil = kendo.drawing.util,\n\n defined = drawingUtil.defined,\n limit = drawingUtil.limitValue,\n valueOrDefault = drawingUtil.valueOrDefault;\n\n // Constants ==============================================================\n var CSS_PREFIX = \"k-\",\n FRICTION = 0.90,\n FRICTION_MOBILE = 0.93,\n MOUSEWHEEL = \"DOMMouseScroll mousewheel\",\n VELOCITY_MULTIPLIER = 5,\n DEFAULT_ZOOM_RATE = 1;\n\n // Map widget =============================================================\n var Map = Widget.extend({\n init: function(element, options) {\n kendo.destroy(element);\n Widget.fn.init.call(this, element);\n\n this._initOptions(options);\n this.bind(this.events, options);\n\n this.crs = new EPSG3857();\n\n this.element\n .addClass(CSS_PREFIX + this.options.name.toLowerCase())\n .css(\"position\", \"relative\")\n .empty()\n .append(doc.createElement(\"div\"));\n\n this._viewOrigin = this._getOrigin();\n this._initScroller();\n this._initMarkers();\n this._initControls();\n this._initLayers();\n this._reset();\n\n this._mousewheel = this._mousewheel.bind(this);\n this.element.on(MOUSEWHEEL, this._mousewheel);\n },\n\n options: {\n name: \"Map\",\n controls: {\n attribution: true,\n navigator: {\n panStep: 100\n },\n zoom: true\n },\n layers: [],\n layerDefaults: {\n shape: {\n style: {\n fill: {\n color: \"#fff\"\n },\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: {\n position: \"top\"\n }\n }\n },\n center: [0, 0],\n zoom: 3,\n minSize: 256,\n minZoom: 1,\n maxZoom: 19,\n markers: [],\n markerDefaults: {\n shape: \"pinTarget\",\n tooltip: {\n position: \"top\"\n }\n },\n wraparound: true,\n messages: {\n tileTitle: \"Map tile\"\n }\n },\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\n destroy: function() {\n this.scroller.destroy();\n\n if (this.navigator) {\n this.navigator.destroy();\n }\n\n if (this.attribution) {\n this.attribution.destroy();\n }\n\n if (this.zoomControl) {\n this.zoomControl.destroy();\n }\n\n this.markers.destroy();\n\n for (var i = 0; i < this.layers.length; i++) {\n this.layers[i].destroy();\n }\n\n Widget.fn.destroy.call(this);\n },\n\n zoom: function(level) {\n var options = this.options;\n\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\n return this;\n } else {\n return options.zoom;\n }\n },\n\n center: function(center) {\n if (center) {\n this.options.center = Location.create(center).toArray();\n this._reset();\n\n return this;\n } else {\n return Location.create(this.options.center);\n }\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\n setOptions: function(options) {\n Widget.fn.setOptions.call(this, options);\n this._reset();\n },\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\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\n locationToView: function(location) {\n location = Location.create(location);\n var origin = this.locationToLayer(this._viewOrigin);\n var point = this.locationToLayer(location);\n\n return point.translateWith(origin.scale(-1));\n },\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\n eventOffset: function(e) {\n var point;\n var x;\n var y;\n var offset = this.element.offset();\n\n if (e.x || e.y) {\n var field = \"location\";\n x = e.x[field] - offset.left;\n y = e.y[field] - offset.top;\n point = new g.Point(x, y);\n } else {\n var event = e.originalEvent || e;\n x = valueOrDefault(event.pageX, event.clientX) - offset.left;\n y = valueOrDefault(event.pageY, event.clientY) - offset.top;\n point = new g.Point(x, y);\n }\n\n return point;\n },\n\n eventToView: function(e) {\n var cursor = this.eventOffset(e);\n return this.locationToView(this.viewToLocation(cursor));\n },\n\n eventToLayer: function(e) {\n return this.locationToLayer(this.eventToLocation(e));\n },\n\n eventToLocation: function(e) {\n var cursor = this.eventOffset(e);\n return this.viewToLocation(cursor);\n },\n\n viewSize: function() {\n var element = this.element;\n var scale = this._layerSize();\n var width = element.width();\n\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\n exportVisual: function() {\n this._reset();\n return false;\n },\n\n _setOrigin: function(origin, zoom) {\n var size = this.viewSize(),\n topLeft;\n\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\n this.options.center = this.layerToLocation(topLeft, zoom).toArray();\n\n return this;\n },\n\n _getOrigin: function(invalidate) {\n var size = this.viewSize(),\n topLeft;\n\n if (invalidate || !this._origin) {\n topLeft = this.locationToLayer(this.center());\n topLeft.x -= size.width / 2;\n topLeft.y -= size.height / 2;\n\n this._origin = this.layerToLocation(topLeft);\n }\n\n return this._origin;\n },\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\n extent = new Extent(raw.nw, se);\n this.center(extent.center());\n\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\n var layerWidth = math.abs(bottomRight.x - topLeft.x);\n var layerHeight = math.abs(bottomRight.y - topLeft.y);\n\n if (layerWidth <= width && layerHeight <= height) {\n break;\n }\n }\n\n this.zoom(zoom);\n },\n\n _getExtent: function() {\n var nw = this._getOrigin();\n var bottomRight = this.locationToLayer(nw);\n var size = this.viewSize();\n\n bottomRight.x += size.width;\n bottomRight.y += size.height;\n\n var se = this.layerToLocation(bottomRight);\n return new Extent(nw, se);\n },\n\n _zoomAround: function(pivot, level) {\n this._setOrigin(this.layerToLocation(pivot, level), level);\n this.zoom(level);\n },\n\n _initControls: function() {\n var controls = this.options.controls;\n\n if (ui.Attribution && controls.attribution) {\n this._createAttribution(controls.attribution);\n }\n\n if (!kendo.support.mobileOS) {\n if (ui.Navigator && controls.navigator) {\n this._createNavigator(controls.navigator);\n }\n\n if (ui.ZoomControl && controls.zoom) {\n this._createZoomControl(controls.zoom);\n }\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 = $(\"
\")\n .addClass(\"k-map-controls \" + renderPos(pos))\n .appendTo(this.element);\n }\n\n return $(\"
\").appendTo(wrap);\n },\n\n _createAttribution: function(options) {\n var element = this._createControlElement(options, \"bottomRight\");\n this.attribution = new ui.Attribution(element, options);\n },\n\n _createNavigator: function(options) {\n var element = this._createControlElement(options, \"topLeft\");\n var navigator = this.navigator = new ui.Navigator(element, options);\n\n this._navigatorPan = this._navigatorPan.bind(this);\n navigator.bind(\"pan\", this._navigatorPan);\n\n this._navigatorCenter = this._navigatorCenter.bind(this);\n navigator.bind(\"center\", this._navigatorCenter);\n },\n\n _navigatorPan: function(e) {\n var map = this;\n var scroller = map.scroller;\n\n var x = scroller.scrollLeft + e.x;\n var y = scroller.scrollTop - e.y;\n\n var bounds = this._virtualSize;\n var height = this.element.height();\n var width = this.element.width();\n\n // TODO: Move limits in scroller\n x = limit(x, bounds.x.min, bounds.x.max - width);\n y = limit(y, bounds.y.min, bounds.y.max - height);\n\n map.scroller.one(\"scroll\", function(e) { map._scrollEnd(e); });\n map.scroller.scrollTo(-x, -y);\n },\n\n _navigatorCenter: function() {\n this.center(this.options.center);\n },\n\n _createZoomControl: function(options) {\n var element = this._createControlElement(options, \"topLeft\");\n var zoomControl = this.zoomControl = new ui.ZoomControl(element, options);\n\n this._zoomControlChange = this._zoomControlChange.bind(this);\n zoomControl.bind(\"change\", this._zoomControlChange);\n },\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\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(\n this.element.children(0), {\n friction: friction,\n velocityMultiplier: VELOCITY_MULTIPLIER,\n zoom: zoomable,\n mousewheelScrolling: false,\n supportDoubleTap: true\n });\n\n scroller.bind(\"scroll\", this._scroll.bind(this));\n scroller.bind(\"scrollEnd\", this._scrollEnd.bind(this));\n scroller.userEvents.bind(\"gesturestart\", this._scaleStart.bind(this));\n scroller.userEvents.bind(\"gestureend\", this._scale.bind(this));\n scroller.userEvents.bind(\"doubleTap\", this._doubleTap.bind(this));\n scroller.userEvents.bind(\"tap\", this._tap.bind(this));\n\n this.scrollElement = scroller.scrollElement;\n },\n\n _initLayers: function() {\n var defs = this.options.layers,\n layers = this.layers = [];\n\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\n layers.push(new impl(this, deepExtend({}, defaults, options)));\n }\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\n _scroll: function(e) {\n var origin = this.locationToLayer(this._viewOrigin).round();\n var movable = e.sender.movable;\n\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\n this._scrollOffset = offset;\n\n this._setOrigin(this.layerToLocation(origin));\n this.trigger(\"pan\", {\n originalEvent: e,\n origin: this._getOrigin(),\n center: this.center()\n });\n },\n\n _scrollEnd: function(e) {\n if (!this._scrollOffset || !this._panComplete()) {\n return;\n }\n\n this._scrollOffset = null;\n this._panEndTS = new Date();\n\n this.trigger(\"panEnd\", {\n originalEvent: e,\n origin: this._getOrigin(),\n center: this.center()\n });\n },\n\n _panComplete: function() {\n return new Date() - (this._panEndTS || 0) > 50;\n },\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\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\n this._zoomAround(originPoint, zoom);\n this.trigger(\"zoomEnd\", { originalEvent: e });\n },\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\n return math.round(zoom);\n },\n\n _reset: function() {\n if (this.attribution) {\n this.attribution.filter(this.center(), this.zoom());\n }\n\n this._viewOrigin = this._getOrigin(true);\n this._resetScroller();\n this.trigger(\"beforeReset\");\n this.trigger(\"reset\", {\n tileTitle: this.options.messages.tileTitle\n });\n },\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\n scroller.movable.round = true;\n scroller.reset();\n scroller.userEvents.cancel();\n\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\n var xBounds = { min: -topLeft.x, max: scale - topLeft.x };\n var yBounds = { min: -topLeft.y, max: scale - topLeft.y };\n\n if (this.options.wraparound) {\n xBounds.max = 20 * scale;\n xBounds.min = -xBounds.max;\n }\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\n x.makeVirtual();\n y.makeVirtual();\n x.virtualSize(xBounds.min, xBounds.max);\n y.virtualSize(yBounds.min, yBounds.max);\n\n this._virtualSize = { x: xBounds, y: yBounds };\n },\n\n _renderLayers: function() {\n var defs = this.options.layers,\n layers = this.layers = [],\n scrollWrap = this.scrollWrap;\n\n scrollWrap.empty();\n\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\n layers.push(new impl(this, deepExtend({}, defaults, options)));\n }\n },\n\n _layerSize: function(zoom) {\n zoom = valueOrDefault(zoom, this.options.zoom);\n return this.options.minSize * pow(2, zoom);\n },\n\n _tap: function(e) {\n if (!this._panComplete()) {\n return;\n }\n\n var cursor = this.eventOffset(e);\n this.trigger(\"click\", {\n originalEvent: e,\n location: this.viewToLocation(cursor)\n });\n },\n\n _doubleTap: function(e) {\n var options = this.options;\n if (options.zoomable !== false) {\n if (!this.trigger(\"zoomStart\", { originalEvent: e })) {\n var toZoom = this.zoom() + DEFAULT_ZOOM_RATE;\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 _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\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\n this.trigger(\"zoomEnd\", { originalEvent: e });\n }\n }\n }\n });\n\n // Exports ================================================================\n dataviz.ui.plugin(Map);\n\n })(window.kendo.jQuery);\n\n var __meta__ = {\n id: \"dataviz.map\",\n name: \"Map\",\n category: \"dataviz\",\n description: \"The Kendo DataViz Map displays spatial data\",\n depends: [ \"data\", \"userevents\", \"tooltip\", \"dataviz.core\", \"drawing\", \"mobile.scroller\" ]\n };\n\n var kendo$1 = kendo;\n\n return kendo$1;\n\n}));\n"]}