{"version":3,"sources":["webpack:///./node_modules/node-libs-browser/mock/process.js","webpack:///./node_modules/core-js/modules/es.array.concat.js","webpack:///./src/common/Base64MD5.js","webpack:///./node_modules/path-browserify/index.js","webpack:///./node_modules/mapv/build/mapv.js"],"names":["exports","nextTick","fn","args","Array","prototype","slice","call","arguments","shift","setTimeout","apply","platform","arch","execPath","title","pid","browser","env","argv","binding","name","Error","path","cwd","chdir","dir","resolve","exit","kill","umask","dlopen","uptime","memoryUsage","uvCounters","features","$","fails","isArray","isObject","toObject","toLength","createProperty","arraySpeciesCreate","arrayMethodHasSpeciesSupport","wellKnownSymbol","V8_VERSION","IS_CONCAT_SPREADABLE","MAX_SAFE_INTEGER","MAXIMUM_ALLOWED_INDEX_EXCEEDED","IS_CONCAT_SPREADABLE_SUPPORT","array","concat","SPECIES_SUPPORT","isConcatSpreadable","O","spreadable","undefined","FORCED","target","proto","forced","arg","i","k","length","len","E","this","A","n","TypeError","hexcase","chrsz","hex_md5","s","binl2hex","core_md5","str2binl","x","a","b","c","d","olda","oldb","oldc","oldd","md5_ff","md5_gg","md5_hh","md5_ii","safe_add","md5_cmn","q","t","bit_rol","y","lsw","msw","num","cnt","str","bin","mask","charCodeAt","binarray","hex_tab","charAt","normalizeArray","parts","allowAboveRoot","up","last","splice","unshift","basename","start","end","matchedSlash","filter","xs","f","res","push","resolvedPath","resolvedAbsolute","process","split","p","join","normalize","isAbsolute","trailingSlash","substr","paths","index","relative","from","to","trim","arr","fromParts","toParts","Math","min","samePartsLength","outputParts","sep","delimiter","dirname","code","hasRoot","ext","extname","startDot","startPart","preDotState","factory","version","clear","context","clearRect","canvas","width","height","resolutionScale$1","devicePixelRatio","window","style","scale","Event","_subscribers","on","event","callback","subscribers","off","_trigger","params","senderId","subscriber","citycenter","municipalities","g","provinces","cities","other","getCenter","item","lng","parseFloat","lat","cityCenter","getProvinceNameByCityName","provinceName","j","getCenterByCityName","replace","classCallCheck","instance","Constructor","createClass","defineProperties","props","descriptor","enumerable","configurable","writable","Object","defineProperty","key","protoProps","staticProps","get","object","property","receiver","Function","desc","getOwnPropertyDescriptor","parent","getPrototypeOf","value","getter","inherits","subClass","superClass","create","constructor","setPrototypeOf","__proto__","possibleConstructorReturn","self","ReferenceError","DataSet","data","options","bind","_options","_data","add","hex_corner","center","size","angle_deg","angle_rad","PI","cos","sin","draw","result","lineTo","time","Date","getTime","_dataCache","JSON","parse","stringify","reset","newData","transferCoordinate","fromColumn","toColumn","set","_set","remove","update","cbk","condition","flag","transferFn","toColumnName","geometry","coordinates","type","newCoordinates","getPolygon","polygon","coordinate","newcoordinate","initGeometry","forEach","city","getMax","columnName","max","getSum","sum","getMin","getUnique","maps","pathSimple","drawDataSet","dataSet","_coordinates","symbol","_size","bigData","moveTo","arc","rect","drawLineString","lineString","drawPolygon","multiPolygonDraw","console","error","beginPath","closePath","drawSimple","save","fill","lineDash","setLineDash","strokeStyle","lineWidth","stroke","restore","fillStyle","_fillStyle","_strokeStyle","_lineWidth","Canvas","document","createElement","Intensity","gradient","0.25","0.55","0.85","1","maxSize","minSize","initPalette","setMax","setMin","setMaxSize","setMinSize","paletteCtx","getContext","lineGradient","createLinearGradient","addColorStop","fillRect","getColor","imageData","getImageData","floor","getSize","getLegend","global$1","createCircle","shadowBlur","r2","offsetDistance","circle","shadowColor","shadowOffsetX","shadowOffsetY","colorize","pixels","diff","range","jMin","jMax","maxOpacity","minOpacity","drawGray","intensity","circleHalfWidth","circleHalfHeight","dataOrderByAlpha","count","alpha","toFixed","isNaN","withoutAlpha","globalAlpha","drawImage","draw$1","strength","shadowCanvas","shadowContext","absolute","colored","putImageData","drawHeatmap","drawGrid","grids","enableCluster","offset","_i","gridKey","_gridKey2","_gridKey","label","show","font","text","textWidth","measureText","fillText","hex_corner$1","drawHoneycomb","r","dx","dy","binsById","py","pj","round","px","pi","py1","abs","px1","pi2","pj2","px2","py2","id","createShader","gl","src","shader","shaderSource","compileShader","initShaders","vs_source","fs_source","vertexShader","VERTEX_SHADER","fragmentShader","FRAGMENT_SHADER","glProgram","createProgram","attachShader","linkProgram","useProgram","getColorData","color","tmpCanvas","tmpCtx","vs_s","fs_s","draw$2","program","enable","BLEND","blendFunc","SRC_ALPHA","ONE","COLOR_BUFFER_BIT","halfCanvasWidth","halfCanvasHeight","vertexBuffer","createBuffer","bindBuffer","ARRAY_BUFFER","a_Position","getAttribLocation","vertexAttribPointer","FLOAT","enableVertexAttribArray","uFragColor","getUniformLocation","uniform4f","_geometry","verticesData","vertices","Float32Array","bufferData","STATIC_DRAW","drawArrays","LINE_STRIP","line","vs_s$1","fs_s$1","draw$3","a_PointSize","vertexAttrib1f","POINTS","point","earcut","holeIndices","dim","minX","minY","maxX","maxY","hasHoles","outerLen","outerNode","linkedList","triangles","eliminateHoles","earcutLinked","clockwise","signedArea","insertNode","equals","next","removeNode","filterPoints","again","steiner","area","prev","ear","pass","indexCurve","stop","isEarHashed","isEar","cureLocalIntersections","splitEarcut","pointInTriangle","minTX","minTY","maxTX","maxTY","minZ","zOrder","maxZ","nextZ","z","prevZ","intersects","locallyInside","isValidDiagonal","splitPolygon","list","queue","getLeftmost","sort","compareX","eliminateHole","hole","findHoleBridge","m","hx","hy","qx","Infinity","tan","mx","my","tanMin","sortLinked","e","tail","numMerges","pSize","qSize","inSize","leftmost","ax","ay","bx","by","cx","cy","intersectsPolygon","middleInside","p1","p2","q1","q2","inside","a2","Node","b2","an","bp","deviation","polygonArea","trianglesArea","flatten","holes","dimensions","holeIndex","vs_s$2","fs_s$2","draw$4","viewport","ELEMENT_ARRAY_BUFFER","verticesArr","trianglesArr","indexOffset","Uint16Array","drawElements","TRIANGLES","UNSIGNED_SHORT","webglDrawSimple","getCurvePoints","points","curvePoints","getCurveByTwoPoints","obj1","obj2","h","h2","lat3","lng3","t2","B1","B2","B3","curveCoordinates","inc","lat1","lat2","lng1","lng2","atan","lng1_src","lng2_src","curve","getPoints","ForceEdgeBundling","data_nodes","data_edges","compatibility_list_for_edge","subdivision_points_for_edge","K","S_initial","P_initial","P_rate","C","I_initial","I_rate","compatibility_threshold","eps","vector_dot_product","edge_as_vector","P","source","edge_length","sqrt","pow","custom_edge_length","edge_midpoint","middle_x","middle_y","compute_divided_edge_length","e_idx","segment_length","euclidean_distance","project_point_on_line","Q","L","initialize_edge_subdivisions","initialize_compatibility_lists","filter_self_loops","edgelist","filtered_edge_list","apply_spring_force","kP","crnt","apply_electrostatic_force","S","sum_of_forces","compatible_edges_list","oe","force","apply_resulting_forces_on_subdivision_points","resulting_forces_for_subdivision_points","resulting_force","spring_force","electrostatic_force","update_edge_divisions","divided_edge_length","current_segment_length","new_subdivision_points","old_segment_length","percent_position","new_subdivision_point_x","new_subdivision_point_y","angle_compatibility","scale_compatibility","lavg","position_compatibility","midP","midQ","edge_visibility","I0","I1","midI","visibility_compatibility","compatibility_score","are_compatible","compute_compatibility_lists","forcebundle","I","cycle","iteration","forces","edge","nodes","nl","edges","ll","bundling_stiffness","step_size","step","cycles","iterations","iterations_rate","subdivision_points_seed","subdivision_rate","compatbility_threshold","Category","splitList","Choropleth","generateByDataSet","colors","container","cssText","html","innerHTML","generateByMinMax","splitNum","Number","MapHelper","opt","warn","BMap","zoom","map","Map","enableMapClick","centerAndZoom","Point","enableScrollWheelZoom","setMapStyle","datas","mapv","baiduMapLayer","CanvasLayer","paneName","zIndex","mixBlendMode","enableMassClear","_map","_lastDrawTime","global$3","BMap$1","BMapGL","Overlay","initialize","adjustSize","pane","getPanes","floatShadow","appendChild","that","addEventListener","_draw","updateImmediate","clearTimeout","timeoutID","pixel","pointToOverlayPixel","left","top","dispatchEvent","getContainer","addOverlay","display","hide","setZIndex","getZIndex","TWEEN","_tweens","getAll","removeAll","tween","indexOf","preserve","now","getAngle","diff_x","diff_y","deg","hrtime","performance","Tween","_repeatDelayTime","_object","_valuesStart","_valuesEnd","_valuesStartRepeat","_duration","_repeat","_yoyo","_isPlaying","_reversed","_delayTime","_startTime","_easingFunction","Easing","Linear","None","_interpolationFunction","Interpolation","_chainedTweens","_onStartCallback","_onStartCallbackFired","_onUpdateCallback","_onCompleteCallback","_onStopCallback","properties","duration","stopChainedTweens","numChainedTweens","delay","amount","repeat","times","repeatDelay","yoyo","easing","interpolation","chain","onStart","onUpdate","onComplete","onStop","elapsed","isFinite","tmp","Quadratic","In","Out","InOut","Cubic","Quartic","Quintic","Sinusoidal","Exponential","Circular","Elastic","Back","Bounce","v","Utils","Bezier","pw","bn","Bernstein","CatmullRom","p0","fc","Factorial","p3","v0","v1","t3","imageCache","imageCacheKey","arrow","url","directionImage","image","Image","onload","preCoordinate","interval","getDistance","angle","translate","rotate","coordinateA","coordinateB","drawClip","clip","drawCluster","pointCountMax","pointCountMin","cluster","point_count","drawText","rects","textKey","textAlign","textBaseline","avoid","sw","ne","hasOverlay","overlay","isRectOverlay","rect1","rect2","minx","miny","maxx","maxy","drawIcon","icon","_width","_height","sx","sy","swidth","sheight","sortKD","ids","coords","nodeSize","right","depth","select","log","exp","sd","newLeft","newRight","swapItem","swap","stack","axis","pop","nextAxis","within","qy","sqDist","defaultGetX","defaultGetY","KDBush","getX","getY","ArrayType","Float64Array","IndexArrayType","Uint32Array","defaultOptions","minZoom","maxZoom","radius","extent","reduce","Supercluster","extend","trees","createCluster","numPoints","parentId","createPointCluster","ref","lngX","latY","getClusterJSON","getClusterProperties","xLng","yLat","abbrev","cluster_id","point_count_abbreviated","y2","dest","animate","requestAnimationFrame","load","clusters","_cluster","getClusters","bbox","minLng","minLat","maxLng","maxLat","easternHem","westernHem","tree","_limitZoom","getChildren","clusterId","originId","originZoom","errorMsg","origin","children","getLeaves","limit","leaves","_appendLeaves","getTile","z2","bottom","tile","_addTileFeatures","getClusterExpansionZoom","clusterZoom","skipped","child","i$1","tags","neighborIds","wx","wy","clusterProperties","neighborId","numPoints2","clone","original","BaseLayer","supercluster","clusterRadius","clusterDataSet","globalCompositeOperation","imageSmoothingEnabled","lineCap","lineJoin","miterLimit","lineDashOffset","category","choropleth","styleType","animationOptions","animation","enabled","nwPixel","canvasLayer","isPointInPath","geoType","isPointInStroke","methods","dataItem","click","mousemove","tap","obj","isDraw","init","ctx","conf","getDefaultContextConfig","unbindEvent","isEnabledTime","stepsRange","steps","animator","_canvasUpdate","addAnimatorEvent","global$4","BMap$2","AnimationLayer","_BaseLayer","_this","transferToMercator","initDataRange","initAnimator","projection","mapType","getMapType","getProjection","lngLatToPoint","mc","lnglatToMercator","coordType","mcCenter","zoomUnit","getZoomUnits","getZoom","nwMc","Pixel","dataGetOptions","processData","drawAnimation","_index","animateTime","timeout","clearData","removeOverlay","global$5","BMap$3","Layer","clickEvent","mousemoveEvent","tapEvent","argCheck","timer","setDefaultCursor","removeEventListener","trails","bounds","getBounds","getNorthEast","getSouthWest","clusterData","pointToPixel","unit","drawContext","updateCallback","bindEvent","animatorMovestartEvent","animatorMoveendEvent","CanvasLayer$2","opt_options","isAdded_","isAnimated_","paneName_","DEFAULT_PANE_NAME_","updateHandler_","resizeHandler_","topLeft_","centerListener_","resizeListener_","needsResize_","requestAnimationFrameId_","simpleBindShim","thisArg","func","position","pointerEvents","canvasCssWidth_","canvasCssHeight_","resolutionScale_","repositionFunction_","repositionCanvas_","resizeFunction_","resize_","requestUpdateFunction_","update_","setOptions","global$6","google","OverlayView","CSS_TRANSFORM_","div","transformProps","prop","requestAnimFrame_","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","cancelAnimFrame_","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","oCancelAnimationFrame","msCancelAnimationFrame","requestId","setAnimate","setPaneName","updateHandler","setUpdateHandler","resizeHandler","setResizeHandler","resolutionScale","setResolutionScale","setMap","scheduleUpdate","isAnimated","setPane_","getPaneName","panes","opt_resizeHandler","opt_updateHandler","onAdd","addListener","getMap","onRemove","parentElement","removeChild","removeListener","mapWidth","getDiv","offsetWidth","mapHeight","offsetHeight","newWidth","newHeight","oldWidth","oldHeight","LatLng","divCenter","fromLatLngToDivPixel","offsetX","offsetY","getTopLeft","Layer$2","canvasLayerOptions","mapProjection","fromLatLngToPoint","latLng","worldPoint","Layer$4","maptalks","_maptalks$Layer","options_","_initBaseLayer","baseLayer","containerPoint","domEvent","base","LayerRenderer","_maptalks$renderer$Ca","layer","_shouldClear","prepareCanvas","_update","_mapvFrameTime","completeRender","setToRedraw","coord","Coordinate","coordToContainerPoint","_multi","toArray","zeroZero","zeroZeroScreen","_pointToContainerPoint","Browser","retina","w","createCanvas","CanvasClass","mapvContext","attributes","onCanvasCreate","_bindToMapv","fire","renderer","getRenderer","CanvasRenderer","registerRenderer","mapVLayer","Layer$5","Layer$6","layer_","onEvents","getCanvasLayer","render","_pixel","lngLatToContainer","AMap","LngLat","canvasFunction","zooms","_ref","setBounds","unEvents","removeLayer","createCanvas$1","Layer$8","previousCursor_","ol","$Map","_projection","hasOwnProperty","getPixelFromCoordinate","proj","transform","getMapExtent","layerName","minResolution","maxResolution","ImageCanvas","ratio","addLayer","un","reRender","setExtent","resolution","pixelRatio","getView","calculateExtent","pointermove","cursor","feature","element","getTargetElement","MapVRenderer","_moveStartEvent","moveStartEvent","_moveEndEvent","moveEndEvent","_zoomStartEvent","zoomStartEvent","containerPointToLayerPoint","layerPoint","getCanvas","_filter","dw","getEast","getWest","dh","getNorth","getSouth","mapCanvas","resolutionX","resolutionY","topLeft","topLeftPX","latLngToContainerPoint","_hide","_show","MapVLayer","attributionPrefix","attribution","mapVOptions","Util","_createCanvas","stamp","overlayPane","getPane","DomUtil","destroy","addData","getData","removeData","_reset","getNorthWest","global$2","_resize","latLngToLayerPoint","setPosition","_render","redraw","mapVLayer$2","mapVLayer$1","MapVRenderer$1","viewer","dataset","option","scene","initDevicePixelRatio","stopAniamation","o","Cesium","Cartesian3","fromDegrees","SceneTransforms","wgs84ToWindowCoordinates","defIndex","MapVLayer$1","mapvBaseLayer","inner","querySelector","addInnerContainer","innerMoveStart","innerMoveEnd","camera","moveStart","moveEnd","ScreenSpaceEventHandler","setInputAction","ScreenSpaceEventType","LEFT_UP","MIDDLE_UP","handler","postRender","_unvisiable","updateData","layerid","parseInt","resizeCanvas","fixPosition","onResize","_visiable","removeAllData","mapVLayer$3","geojson","getDataSet","geoJson","csv","CSVToArray","strData","strDelimiter","objPattern","RegExp","arrData","arrMatches","exec","strMatchedValue","strMatchedDelimiter","csvStr","header","canvasClear","canvasResolutionScale","canvasDrawSimple","canvasDrawHeatmap","canvasDrawGrid","canvasDrawHoneycomb","webglDrawPoint","webglDrawLine","webglDrawPolygon","utilCityCenter","utilCurve","utilForceEdgeBundling","utilDataRangeIntensity","utilDataRangeCategory","utilDataRangeChoropleth","baiduMapCanvasLayer","baiduMapAnimationLayer","googleMapCanvasLayer","googleMapLayer","MaptalksLayer","AMapLayer","OpenlayersLayer","leafletMapLayer","cesiumMapLayer"],"mappings":"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","file":"js/chunk-c279cfd6.304e9804.js","sourcesContent":["exports.nextTick = function nextTick(fn) {\n var args = Array.prototype.slice.call(arguments);\n args.shift();\n setTimeout(function () {\n fn.apply(null, args);\n }, 0);\n};\n\nexports.platform = exports.arch = \nexports.execPath = exports.title = 'browser';\nexports.pid = 1;\nexports.browser = true;\nexports.env = {};\nexports.argv = [];\n\nexports.binding = function (name) {\n\tthrow new Error('No such module. (Possibly not yet loaded)')\n};\n\n(function () {\n var cwd = '/';\n var path;\n exports.cwd = function () { return cwd };\n exports.chdir = function (dir) {\n if (!path) path = require('path');\n cwd = path.resolve(dir, cwd);\n };\n})();\n\nexports.exit = exports.kill = \nexports.umask = exports.dlopen = \nexports.uptime = exports.memoryUsage = \nexports.uvCounters = function() {};\nexports.features = {};\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar createProperty = require('../internals/create-property');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded';\n\n// We can't use this feature detection in V8 since it causes\n// deoptimization and serious performance degradation\n// https://github.com/zloirock/core-js/issues/679\nvar IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () {\n var array = [];\n array[IS_CONCAT_SPREADABLE] = false;\n return array.concat()[0] !== array;\n});\n\nvar SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat');\n\nvar isConcatSpreadable = function (O) {\n if (!isObject(O)) return false;\n var spreadable = O[IS_CONCAT_SPREADABLE];\n return spreadable !== undefined ? !!spreadable : isArray(O);\n};\n\nvar FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;\n\n// `Array.prototype.concat` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.concat\n// with adding support of @@isConcatSpreadable and @@species\n$({ target: 'Array', proto: true, forced: FORCED }, {\n concat: function concat(arg) { // eslint-disable-line no-unused-vars\n var O = toObject(this);\n var A = arraySpeciesCreate(O, 0);\n var n = 0;\n var i, k, length, len, E;\n for (i = -1, length = arguments.length; i < length; i++) {\n E = i === -1 ? O : arguments[i];\n if (isConcatSpreadable(E)) {\n len = toLength(E.length);\n if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);\n } else {\n if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n createProperty(A, n++, E);\n }\n }\n A.length = n;\n return A;\n }\n});\n","/*\r\n* A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\r\n* Digest Algorithm, as defined in RFC 1321.\r\n* Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.\r\n* Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\r\n* Distributed under the BSD License\r\n* See http://pajhome.org.uk/crypt/md5 for more info.\r\n*/\r\n\r\n/*\r\n* Configurable variables. You may need to tweak these to be compatible with\r\n* the server-side, but the defaults work in most cases.\r\n*/\r\nvar hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */\r\nvar b64pad = \"\"; /* base-64 pad character. \"=\" for strict RFC compliance */\r\nvar chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */\r\n\r\n/*\r\n* These are the functions you'll usually want to call\r\n* They take string arguments and return either hex or base-64 encoded strings\r\n*/\r\nexport function hex_md5(s){ return binl2hex(core_md5(str2binl(s), s.length * chrsz));}\r\nexport function b64_md5(s){ return binl2b64(core_md5(str2binl(s), s.length * chrsz));}\r\nexport function str_md5(s){ return binl2str(core_md5(str2binl(s), s.length * chrsz));}\r\nexport function hex_hmac_md5(key, data) { return binl2hex(core_hmac_md5(key, data)); }\r\nexport function b64_hmac_md5(key, data) { return binl2b64(core_hmac_md5(key, data)); }\r\nexport function str_hmac_md5(key, data) { return binl2str(core_hmac_md5(key, data)); }\r\n\r\n/*\r\n* Perform a simple self-test to see if the VM is working\r\n*/\r\nexport function md5_vm_test()\r\n{\r\nreturn hex_md5(\"abc\") == \"900150983cd24fb0d6963f7d28e17f72\";\r\n}\r\n\r\n/*\r\n* Calculate the MD5 of an array of little-endian words, and a bit length\r\n*/\r\nfunction core_md5(x, len)\r\n{\r\n/* append padding */\r\nx[len >> 5] |= 0x80 << ((len) % 32);\r\nx[(((len + 64) >>> 9) << 4) + 14] = len;\r\n\r\nvar a = 1732584193;\r\nvar b = -271733879;\r\nvar c = -1732584194;\r\nvar d = 271733878;\r\n\r\nfor(var i = 0; i < x.length; i += 16)\r\n{\r\nvar olda = a;\r\nvar oldb = b;\r\nvar oldc = c;\r\nvar oldd = d;\r\n\r\na = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);\r\nd = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);\r\nc = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);\r\nb = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);\r\na = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);\r\nd = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);\r\nc = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);\r\nb = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);\r\na = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);\r\nd = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);\r\nc = md5_ff(c, d, a, b, x[i+10], 17, -42063);\r\nb = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);\r\na = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);\r\nd = md5_ff(d, a, b, c, x[i+13], 12, -40341101);\r\nc = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);\r\nb = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);\r\n\r\na = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);\r\nd = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);\r\nc = md5_gg(c, d, a, b, x[i+11], 14, 643717713);\r\nb = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);\r\na = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);\r\nd = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);\r\nc = md5_gg(c, d, a, b, x[i+15], 14, -660478335);\r\nb = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);\r\na = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);\r\nd = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);\r\nc = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);\r\nb = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);\r\na = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);\r\nd = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);\r\nc = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);\r\nb = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);\r\n\r\na = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);\r\nd = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);\r\nc = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);\r\nb = md5_hh(b, c, d, a, x[i+14], 23, -35309556);\r\na = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);\r\nd = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);\r\nc = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);\r\nb = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);\r\na = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);\r\nd = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);\r\nc = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);\r\nb = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);\r\na = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);\r\nd = md5_hh(d, a, b, c, x[i+12], 11, -421815835);\r\nc = md5_hh(c, d, a, b, x[i+15], 16, 530742520);\r\nb = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);\r\n\r\na = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);\r\nd = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);\r\nc = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);\r\nb = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);\r\na = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);\r\nd = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);\r\nc = md5_ii(c, d, a, b, x[i+10], 15, -1051523);\r\nb = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);\r\na = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);\r\nd = md5_ii(d, a, b, c, x[i+15], 10, -30611744);\r\nc = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);\r\nb = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);\r\na = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);\r\nd = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);\r\nc = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);\r\nb = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);\r\n\r\na = safe_add(a, olda);\r\nb = safe_add(b, oldb);\r\nc = safe_add(c, oldc);\r\nd = safe_add(d, oldd);\r\n}\r\nreturn Array(a, b, c, d);\r\n\r\n}\r\n\r\n/*\r\n* These functions implement the four basic operations the algorithm uses.\r\n*/\r\nfunction md5_cmn(q, a, b, x, s, t)\r\n{\r\nreturn safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);\r\n}\r\nfunction md5_ff(a, b, c, d, x, s, t)\r\n{\r\nreturn md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);\r\n}\r\nfunction md5_gg(a, b, c, d, x, s, t)\r\n{\r\nreturn md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);\r\n}\r\nfunction md5_hh(a, b, c, d, x, s, t)\r\n{\r\nreturn md5_cmn(b ^ c ^ d, a, b, x, s, t);\r\n}\r\nfunction md5_ii(a, b, c, d, x, s, t)\r\n{\r\nreturn md5_cmn(c ^ (b | (~d)), a, b, x, s, t);\r\n}\r\n\r\n/*\r\n* Calculate the HMAC-MD5, of a key and some data\r\n*/\r\nfunction core_hmac_md5(key, data)\r\n{\r\nvar bkey = str2binl(key);\r\nif(bkey.length > 16) bkey = core_md5(bkey, key.length * chrsz);\r\n\r\nvar ipad = Array(16), opad = Array(16);\r\nfor(var i = 0; i < 16; i++)\r\n{\r\nipad[i] = bkey[i] ^ 0x36363636;\r\nopad[i] = bkey[i] ^ 0x5C5C5C5C;\r\n}\r\n\r\nvar hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz);\r\nreturn core_md5(opad.concat(hash), 512 + 128);\r\n}\r\n\r\n/*\r\n* Add integers, wrapping at 2^32. This uses 16-bit operations internally\r\n* to work around bugs in some JS interpreters.\r\n*/\r\nfunction safe_add(x, y)\r\n{\r\nvar lsw = (x & 0xFFFF) + (y & 0xFFFF);\r\nvar msw = (x >> 16) + (y >> 16) + (lsw >> 16);\r\nreturn (msw << 16) | (lsw & 0xFFFF);\r\n}\r\n\r\n/*\r\n* Bitwise rotate a 32-bit number to the left.\r\n*/\r\nfunction bit_rol(num, cnt)\r\n{\r\nreturn (num << cnt) | (num >>> (32 - cnt));\r\n}\r\n\r\n/*\r\n* Convert a string to an array of little-endian words\r\n* If chrsz is ASCII, characters >255 have their hi-byte silently ignored.\r\n*/\r\nfunction str2binl(str)\r\n{\r\nvar bin = Array();\r\nvar mask = (1 << chrsz) - 1;\r\nfor(var i = 0; i < str.length * chrsz; i += chrsz)\r\nbin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32);\r\nreturn bin;\r\n}\r\n\r\n/*\r\n* Convert an array of little-endian words to a string\r\n*/\r\nfunction binl2str(bin)\r\n{\r\nvar str = \"\";\r\nvar mask = (1 << chrsz) - 1;\r\nfor(var i = 0; i < bin.length * 32; i += chrsz)\r\nstr += String.fromCharCode((bin[i>>5] >>> (i % 32)) & mask);\r\nreturn str;\r\n}\r\n\r\n/*\r\n* Convert an array of little-endian words to a hex string.\r\n*/\r\nfunction binl2hex(binarray)\r\n{\r\nvar hex_tab = hexcase ? \"0123456789ABCDEF\" : \"0123456789abcdef\";\r\nvar str = \"\";\r\nfor(var i = 0; i < binarray.length * 4; i++)\r\n{\r\nstr += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +\r\nhex_tab.charAt((binarray[i>>2] >> ((i%4)*8 )) & 0xF);\r\n}\r\nreturn str;\r\n}\r\n\r\n/*\r\n* Convert an array of little-endian words to a base-64 string\r\n*/\r\nfunction binl2b64(binarray)\r\n{\r\nvar tab = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\r\nvar str = \"\";\r\nfor(var i = 0; i < binarray.length * 4; i += 3)\r\n{\r\nvar triplet = (((binarray[i >> 2] >> 8 * ( i %4)) & 0xFF) << 16)\r\n| (((binarray[i+1 >> 2] >> 8 * ((i+1)%4)) & 0xFF) << 8 )\r\n| ((binarray[i+2 >> 2] >> 8 * ((i+2)%4)) & 0xFF);\r\nfor(var j = 0; j < 4; j++)\r\n{\r\nif(i * 8 + j * 6 > binarray.length * 32) str += b64pad;\r\nelse str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);\r\n}\r\n}\r\nreturn str;\r\n}\r\n","// .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1,\n// backported and transplited with Babel, with backwards-compat fixes\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (allowAboveRoot) {\n for (; up--; up) {\n parts.unshift('..');\n }\n }\n\n return parts;\n}\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function() {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = (i >= 0) ? arguments[i] : process.cwd();\n\n // Skip empty and invalid entries\n if (typeof path !== 'string') {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n return !!p;\n }), !resolvedAbsolute).join('/');\n\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function(path) {\n var isAbsolute = exports.isAbsolute(path),\n trailingSlash = substr(path, -1) === '/';\n\n // Normalize the path\n path = normalizeArray(filter(path.split('/'), function(p) {\n return !!p;\n }), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexports.isAbsolute = function(path) {\n return path.charAt(0) === '/';\n};\n\n// posix version\nexports.join = function() {\n var paths = Array.prototype.slice.call(arguments, 0);\n return exports.normalize(filter(paths, function(p, index) {\n if (typeof p !== 'string') {\n throw new TypeError('Arguments to path.join must be strings');\n }\n return p;\n }).join('/'));\n};\n\n\n// path.relative(from, to)\n// posix version\nexports.relative = function(from, to) {\n from = exports.resolve(from).substr(1);\n to = exports.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end - start + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function (path) {\n if (typeof path !== 'string') path = path + '';\n if (path.length === 0) return '.';\n var code = path.charCodeAt(0);\n var hasRoot = code === 47 /*/*/;\n var end = -1;\n var matchedSlash = true;\n for (var i = path.length - 1; i >= 1; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n\n if (end === -1) return hasRoot ? '/' : '.';\n if (hasRoot && end === 1) {\n // return '//';\n // Backwards-compat fix:\n return '/';\n }\n return path.slice(0, end);\n};\n\nfunction basename(path) {\n if (typeof path !== 'string') path = path + '';\n\n var start = 0;\n var end = -1;\n var matchedSlash = true;\n var i;\n\n for (i = path.length - 1; i >= 0; --i) {\n if (path.charCodeAt(i) === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n\n if (end === -1) return '';\n return path.slice(start, end);\n}\n\n// Uses a mixed approach for backwards-compatibility, as ext behavior changed\n// in new Node.js versions, so only basename() above is backported here\nexports.basename = function (path, ext) {\n var f = basename(path);\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n return f;\n};\n\nexports.extname = function (path) {\n if (typeof path !== 'string') path = path + '';\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n for (var i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1)\n startDot = i;\n else if (preDotState !== 1)\n preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n return '';\n }\n return path.slice(startDot, end);\n};\n\nfunction filter (xs, f) {\n if (xs.filter) return xs.filter(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n if (f(xs[i], i, xs)) res.push(xs[i]);\n }\n return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b'\n ? function (str, start, len) { return str.substr(start, len) }\n : function (str, start, len) {\n if (start < 0) start = str.length + start;\n return str.substr(start, len);\n }\n;\n","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n\ttypeof define === 'function' && define.amd ? define(['exports'], factory) :\n\t(factory((global.mapv = global.mapv || {})));\n}(this, (function (exports) { 'use strict';\n\nvar version = \"2.0.56\";\n\n/**\n * @author kyle / http://nikai.us/\n */\n\nvar clear = function (context) {\n context && context.clearRect && context.clearRect(0, 0, context.canvas.width, context.canvas.height);\n //context.canvas.width = context.canvas.width;\n //context.canvas.height = context.canvas.height;\n};\n\n/**\n * @author kyle / http://nikai.us/\n */\n\nvar resolutionScale$1 = function (context) {\n var devicePixelRatio = window.devicePixelRatio || 1;\n context.canvas.width = context.canvas.width * devicePixelRatio;\n context.canvas.height = context.canvas.height * devicePixelRatio;\n context.canvas.style.width = context.canvas.width / devicePixelRatio + 'px';\n context.canvas.style.height = context.canvas.height / devicePixelRatio + 'px';\n context.scale(devicePixelRatio, devicePixelRatio);\n};\n\nfunction Event() {\n this._subscribers = {}; // event subscribers\n}\n\n/**\n * Subscribe to an event, add an event listener\n * @param {String} event Event name. Available events: 'put', 'update',\n * 'remove'\n * @param {function} callback Callback method. Called with three parameters:\n * {String} event\n * {Object | null} params\n * {String | Number} senderId\n */\nEvent.prototype.on = function (event, callback) {\n var subscribers = this._subscribers[event];\n if (!subscribers) {\n subscribers = [];\n this._subscribers[event] = subscribers;\n }\n\n subscribers.push({\n callback: callback\n });\n};\n\n/**\n * Unsubscribe from an event, remove an event listener\n * @param {String} event\n * @param {function} callback\n */\nEvent.prototype.off = function (event, callback) {\n var subscribers = this._subscribers[event];\n if (subscribers) {\n //this._subscribers[event] = subscribers.filter(listener => listener.callback != callback);\n for (var i = 0; i < subscribers.length; i++) {\n if (subscribers[i].callback == callback) {\n subscribers.splice(i, 1);\n i--;\n }\n }\n }\n};\n\n/**\n * Trigger an event\n * @param {String} event\n * @param {Object | null} params\n * @param {String} [senderId] Optional id of the sender.\n * @private\n */\nEvent.prototype._trigger = function (event, params, senderId) {\n if (event == '*') {\n throw new Error('Cannot trigger event *');\n }\n\n var subscribers = [];\n if (event in this._subscribers) {\n subscribers = subscribers.concat(this._subscribers[event]);\n }\n if ('*' in this._subscribers) {\n subscribers = subscribers.concat(this._subscribers['*']);\n }\n\n for (var i = 0, len = subscribers.length; i < len; i++) {\n var subscriber = subscribers[i];\n if (subscriber.callback) {\n subscriber.callback(event, params, senderId || null);\n }\n }\n};\n\n/**\n * get the center by the city name\n * @author kyle / http://nikai.us/\n */\n\nvar citycenter = { municipalities: [{ n: \"北京\", g: \"116.395645,39.929986|12\" }, { n: \"上海\", g: \"121.487899,31.249162|12\" }, { n: \"天津\", g: \"117.210813,39.14393|12\" }, { n: \"重庆\", g: \"106.530635,29.544606|12\" }], provinces: [{ n: \"安徽\", g: \"117.216005,31.859252|8\", cities: [{ n: \"合肥\", g: \"117.282699,31.866942|12\" }, { n: \"安庆\", g: \"117.058739,30.537898|13\" }, { n: \"蚌埠\", g: \"117.35708,32.929499|13\" }, { n: \"亳州\", g: \"115.787928,33.871211|13\" }, { n: \"巢湖\", g: \"117.88049,31.608733|13\" }, { n: \"池州\", g: \"117.494477,30.660019|14\" }, { n: \"滁州\", g: \"118.32457,32.317351|13\" }, { n: \"阜阳\", g: \"115.820932,32.901211|13\" }, { n: \"淮北\", g: \"116.791447,33.960023|13\" }, { n: \"淮南\", g: \"117.018639,32.642812|13\" }, { n: \"黄山\", g: \"118.29357,29.734435|13\" }, { n: \"六安\", g: \"116.505253,31.755558|13\" }, { n: \"马鞍山\", g: \"118.515882,31.688528|13\" }, { n: \"宿州\", g: \"116.988692,33.636772|13\" }, { n: \"铜陵\", g: \"117.819429,30.94093|14\" }, { n: \"芜湖\", g: \"118.384108,31.36602|12\" }, { n: \"宣城\", g: \"118.752096,30.951642|13\" }] }, { n: \"福建\", g: \"117.984943,26.050118|8\", cities: [{ n: \"福州\", g: \"119.330221,26.047125|12\" }, { n: \"龙岩\", g: \"117.017997,25.078685|13\" }, { n: \"南平\", g: \"118.181883,26.643626|13\" }, { n: \"宁德\", g: \"119.542082,26.656527|14\" }, { n: \"莆田\", g: \"119.077731,25.44845|13\" }, { n: \"泉州\", g: \"118.600362,24.901652|12\" }, { n: \"三明\", g: \"117.642194,26.270835|14\" }, { n: \"厦门\", g: \"118.103886,24.489231|12\" }, { n: \"漳州\", g: \"117.676205,24.517065|12\" }] }, { n: \"甘肃\", g: \"102.457625,38.103267|6\", cities: [{ n: \"兰州\", g: \"103.823305,36.064226|12\" }, { n: \"白银\", g: \"104.171241,36.546682|13\" }, { n: \"定西\", g: \"104.626638,35.586056|13\" }, { n: \"甘南州\", g: \"102.917442,34.992211|14\" }, { n: \"嘉峪关\", g: \"98.281635,39.802397|13\" }, { n: \"金昌\", g: \"102.208126,38.516072|13\" }, { n: \"酒泉\", g: \"98.508415,39.741474|13\" }, { n: \"临夏州\", g: \"103.215249,35.598514|13\" }, { n: \"陇南\", g: \"104.934573,33.39448|14\" }, { n: \"平凉\", g: \"106.688911,35.55011|13\" }, { n: \"庆阳\", g: \"107.644227,35.726801|13\" }, { n: \"天水\", g: \"105.736932,34.584319|13\" }, { n: \"武威\", g: \"102.640147,37.933172|13\" }, { n: \"张掖\", g: \"100.459892,38.93932|13\" }] }, { n: \"广东\", g: \"113.394818,23.408004|8\", cities: [{ n: \"广州\", g: \"113.30765,23.120049|12\" }, { n: \"潮州\", g: \"116.630076,23.661812|13\" }, { n: \"东莞\", g: \"113.763434,23.043024|12\" }, { n: \"佛山\", g: \"113.134026,23.035095|13\" }, { n: \"河源\", g: \"114.713721,23.757251|12\" }, { n: \"惠州\", g: \"114.410658,23.11354|12\" }, { n: \"江门\", g: \"113.078125,22.575117|13\" }, { n: \"揭阳\", g: \"116.379501,23.547999|13\" }, { n: \"茂名\", g: \"110.931245,21.668226|13\" }, { n: \"梅州\", g: \"116.126403,24.304571|13\" }, { n: \"清远\", g: \"113.040773,23.698469|13\" }, { n: \"汕头\", g: \"116.72865,23.383908|13\" }, { n: \"汕尾\", g: \"115.372924,22.778731|14\" }, { n: \"韶关\", g: \"113.594461,24.80296|13\" }, { n: \"深圳\", g: \"114.025974,22.546054|12\" }, { n: \"阳江\", g: \"111.97701,21.871517|14\" }, { n: \"云浮\", g: \"112.050946,22.937976|13\" }, { n: \"湛江\", g: \"110.365067,21.257463|13\" }, { n: \"肇庆\", g: \"112.479653,23.078663|13\" }, { n: \"中山\", g: \"113.42206,22.545178|12\" }, { n: \"珠海\", g: \"113.562447,22.256915|13\" }] }, { n: \"广西\", g: \"108.924274,23.552255|7\", cities: [{ n: \"南宁\", g: \"108.297234,22.806493|12\" }, { n: \"百色\", g: \"106.631821,23.901512|13\" }, { n: \"北海\", g: \"109.122628,21.472718|13\" }, { n: \"崇左\", g: \"107.357322,22.415455|14\" }, { n: \"防城港\", g: \"108.351791,21.617398|15\" }, { n: \"桂林\", g: \"110.26092,25.262901|12\" }, { n: \"贵港\", g: \"109.613708,23.103373|13\" }, { n: \"河池\", g: \"108.069948,24.699521|14\" }, { n: \"贺州\", g: \"111.552594,24.411054|14\" }, { n: \"来宾\", g: \"109.231817,23.741166|14\" }, { n: \"柳州\", g: \"109.422402,24.329053|12\" }, { n: \"钦州\", g: \"108.638798,21.97335|13\" }, { n: \"梧州\", g: \"111.305472,23.485395|13\" }, { n: \"玉林\", g: \"110.151676,22.643974|14\" }] }, { n: \"贵州\", g: \"106.734996,26.902826|8\", cities: [{ n: \"贵阳\", g: \"106.709177,26.629907|12\" }, { n: \"安顺\", g: \"105.92827,26.228595|13\" }, { n: \"毕节地区\", g: \"105.300492,27.302612|14\" }, { n: \"六盘水\", g: \"104.852087,26.591866|13\" }, { n: \"铜仁地区\", g: \"109.196161,27.726271|14\" }, { n: \"遵义\", g: \"106.93126,27.699961|13\" }, { n: \"黔西南州\", g: \"104.900558,25.095148|11\" }, { n: \"黔东南州\", g: \"107.985353,26.583992|11\" }, { n: \"黔南州\", g: \"107.523205,26.264536|11\" }] }, { n: \"海南\", g: \"109.733755,19.180501|9\", cities: [{ n: \"海口\", g: \"110.330802,20.022071|13\" }, { n: \"白沙\", g: \"109.358586,19.216056|12\" }, { n: \"保亭\", g: \"109.656113,18.597592|12\" }, { n: \"昌江\", g: \"109.0113,19.222483|12\" }, { n: \"儋州\", g: \"109.413973,19.571153|13\" }, { n: \"澄迈\", g: \"109.996736,19.693135|13\" }, { n: \"东方\", g: \"108.85101,18.998161|13\" }, { n: \"定安\", g: \"110.32009,19.490991|13\" }, { n: \"琼海\", g: \"110.414359,19.21483|13\" }, { n: \"琼中\", g: \"109.861849,19.039771|12\" }, { n: \"乐东\", g: \"109.062698,18.658614|12\" }, { n: \"临高\", g: \"109.724101,19.805922|13\" }, { n: \"陵水\", g: \"109.948661,18.575985|12\" }, { n: \"三亚\", g: \"109.522771,18.257776|12\" }, { n: \"屯昌\", g: \"110.063364,19.347749|13\" }, { n: \"万宁\", g: \"110.292505,18.839886|13\" }, { n: \"文昌\", g: \"110.780909,19.750947|13\" }, { n: \"五指山\", g: \"109.51775,18.831306|13\" }] }, { n: \"河北\", g: \"115.661434,38.61384|7\", cities: [{ n: \"石家庄\", g: \"114.522082,38.048958|12\" }, { n: \"保定\", g: \"115.49481,38.886565|13\" }, { n: \"沧州\", g: \"116.863806,38.297615|13\" }, { n: \"承德\", g: \"117.933822,40.992521|14\" }, { n: \"邯郸\", g: \"114.482694,36.609308|13\" }, { n: \"衡水\", g: \"115.686229,37.746929|13\" }, { n: \"廊坊\", g: \"116.703602,39.518611|13\" }, { n: \"秦皇岛\", g: \"119.604368,39.945462|12\" }, { n: \"唐山\", g: \"118.183451,39.650531|13\" }, { n: \"邢台\", g: \"114.520487,37.069531|13\" }, { n: \"张家口\", g: \"114.893782,40.811188|13\" }] }, { n: \"河南\", g: \"113.486804,34.157184|7\", cities: [{ n: \"郑州\", g: \"113.649644,34.75661|12\" }, { n: \"安阳\", g: \"114.351807,36.110267|12\" }, { n: \"鹤壁\", g: \"114.29777,35.755426|13\" }, { n: \"焦作\", g: \"113.211836,35.234608|13\" }, { n: \"开封\", g: \"114.351642,34.801854|13\" }, { n: \"洛阳\", g: \"112.447525,34.657368|12\" }, { n: \"漯河\", g: \"114.046061,33.576279|13\" }, { n: \"南阳\", g: \"112.542842,33.01142|13\" }, { n: \"平顶山\", g: \"113.300849,33.745301|13\" }, { n: \"濮阳\", g: \"115.026627,35.753298|12\" }, { n: \"三门峡\", g: \"111.181262,34.78332|13\" }, { n: \"商丘\", g: \"115.641886,34.438589|13\" }, { n: \"新乡\", g: \"113.91269,35.307258|13\" }, { n: \"信阳\", g: \"114.085491,32.128582|13\" }, { n: \"许昌\", g: \"113.835312,34.02674|13\" }, { n: \"周口\", g: \"114.654102,33.623741|13\" }, { n: \"驻马店\", g: \"114.049154,32.983158|13\" }] }, { n: \"黑龙江\", g: \"128.047414,47.356592|6\", cities: [{ n: \"哈尔滨\", g: \"126.657717,45.773225|12\" }, { n: \"大庆\", g: \"125.02184,46.596709|12\" }, { n: \"大兴安岭地区\", g: \"124.196104,51.991789|10\" }, { n: \"鹤岗\", g: \"130.292472,47.338666|13\" }, { n: \"黑河\", g: \"127.50083,50.25069|14\" }, { n: \"鸡西\", g: \"130.941767,45.32154|13\" }, { n: \"佳木斯\", g: \"130.284735,46.81378|12\" }, { n: \"牡丹江\", g: \"129.608035,44.588521|13\" }, { n: \"七台河\", g: \"131.019048,45.775005|14\" }, { n: \"齐齐哈尔\", g: \"123.987289,47.3477|13\" }, { n: \"双鸭山\", g: \"131.171402,46.655102|13\" }, { n: \"绥化\", g: \"126.989095,46.646064|13\" }, { n: \"伊春\", g: \"128.910766,47.734685|14\" }] }, { n: \"湖北\", g: \"112.410562,31.209316|8\", cities: [{ n: \"武汉\", g: \"114.3162,30.581084|12\" }, { n: \"鄂州\", g: \"114.895594,30.384439|14\" }, { n: \"恩施\", g: \"109.517433,30.308978|14\" }, { n: \"黄冈\", g: \"114.906618,30.446109|14\" }, { n: \"黄石\", g: \"115.050683,30.216127|13\" }, { n: \"荆门\", g: \"112.21733,31.042611|13\" }, { n: \"荆州\", g: \"112.241866,30.332591|12\" }, { n: \"潜江\", g: \"112.768768,30.343116|13\" }, { n: \"神农架林区\", g: \"110.487231,31.595768|13\" }, { n: \"十堰\", g: \"110.801229,32.636994|13\" }, { n: \"随州\", g: \"113.379358,31.717858|13\" }, { n: \"天门\", g: \"113.12623,30.649047|13\" }, { n: \"仙桃\", g: \"113.387448,30.293966|13\" }, { n: \"咸宁\", g: \"114.300061,29.880657|13\" }, { n: \"襄阳\", g: \"112.176326,32.094934|12\" }, { n: \"孝感\", g: \"113.935734,30.927955|13\" }, { n: \"宜昌\", g: \"111.310981,30.732758|13\" }] }, { n: \"湖南\", g: \"111.720664,27.695864|7\", cities: [{ n: \"长沙\", g: \"112.979353,28.213478|12\" }, { n: \"常德\", g: \"111.653718,29.012149|12\" }, { n: \"郴州\", g: \"113.037704,25.782264|13\" }, { n: \"衡阳\", g: \"112.583819,26.898164|13\" }, { n: \"怀化\", g: \"109.986959,27.557483|13\" }, { n: \"娄底\", g: \"111.996396,27.741073|13\" }, { n: \"邵阳\", g: \"111.461525,27.236811|13\" }, { n: \"湘潭\", g: \"112.935556,27.835095|13\" }, { n: \"湘西州\", g: \"109.745746,28.317951|14\" }, { n: \"益阳\", g: \"112.366547,28.588088|13\" }, { n: \"永州\", g: \"111.614648,26.435972|13\" }, { n: \"岳阳\", g: \"113.146196,29.378007|13\" }, { n: \"张家界\", g: \"110.48162,29.124889|13\" }, { n: \"株洲\", g: \"113.131695,27.827433|13\" }] }, { n: \"江苏\", g: \"119.368489,33.013797|8\", cities: [{ n: \"南京\", g: \"118.778074,32.057236|12\" }, { n: \"常州\", g: \"119.981861,31.771397|12\" }, { n: \"淮安\", g: \"119.030186,33.606513|12\" }, { n: \"连云港\", g: \"119.173872,34.601549|12\" }, { n: \"南通\", g: \"120.873801,32.014665|12\" }, { n: \"苏州\", g: \"120.619907,31.317987|12\" }, { n: \"宿迁\", g: \"118.296893,33.95205|13\" }, { n: \"泰州\", g: \"119.919606,32.476053|13\" }, { n: \"无锡\", g: \"120.305456,31.570037|12\" }, { n: \"徐州\", g: \"117.188107,34.271553|12\" }, { n: \"盐城\", g: \"120.148872,33.379862|12\" }, { n: \"扬州\", g: \"119.427778,32.408505|13\" }, { n: \"镇江\", g: \"119.455835,32.204409|13\" }] }, { n: \"江西\", g: \"115.676082,27.757258|7\", cities: [{ n: \"南昌\", g: \"115.893528,28.689578|12\" }, { n: \"抚州\", g: \"116.360919,27.954545|13\" }, { n: \"赣州\", g: \"114.935909,25.845296|13\" }, { n: \"吉安\", g: \"114.992039,27.113848|13\" }, { n: \"景德镇\", g: \"117.186523,29.303563|12\" }, { n: \"九江\", g: \"115.999848,29.71964|13\" }, { n: \"萍乡\", g: \"113.859917,27.639544|13\" }, { n: \"上饶\", g: \"117.955464,28.457623|13\" }, { n: \"新余\", g: \"114.947117,27.822322|13\" }, { n: \"宜春\", g: \"114.400039,27.81113|13\" }, { n: \"鹰潭\", g: \"117.03545,28.24131|13\" }] }, { n: \"吉林\", g: \"126.262876,43.678846|7\", cities: [{ n: \"长春\", g: \"125.313642,43.898338|12\" }, { n: \"白城\", g: \"122.840777,45.621086|13\" }, { n: \"白山\", g: \"126.435798,41.945859|13\" }, { n: \"吉林\", g: \"126.564544,43.871988|12\" }, { n: \"辽源\", g: \"125.133686,42.923303|13\" }, { n: \"四平\", g: \"124.391382,43.175525|12\" }, { n: \"松原\", g: \"124.832995,45.136049|13\" }, { n: \"通化\", g: \"125.94265,41.736397|13\" }, { n: \"延边\", g: \"129.485902,42.896414|13\" }] }, { n: \"辽宁\", g: \"122.753592,41.6216|8\", cities: [{ n: \"沈阳\", g: \"123.432791,41.808645|12\" }, { n: \"鞍山\", g: \"123.007763,41.118744|13\" }, { n: \"本溪\", g: \"123.778062,41.325838|12\" }, { n: \"朝阳\", g: \"120.446163,41.571828|13\" }, { n: \"大连\", g: \"121.593478,38.94871|12\" }, { n: \"丹东\", g: \"124.338543,40.129023|12\" }, { n: \"抚顺\", g: \"123.92982,41.877304|12\" }, { n: \"阜新\", g: \"121.660822,42.01925|14\" }, { n: \"葫芦岛\", g: \"120.860758,40.74303|13\" }, { n: \"锦州\", g: \"121.147749,41.130879|13\" }, { n: \"辽阳\", g: \"123.172451,41.273339|14\" }, { n: \"盘锦\", g: \"122.073228,41.141248|13\" }, { n: \"铁岭\", g: \"123.85485,42.299757|13\" }, { n: \"营口\", g: \"122.233391,40.668651|13\" }] }, { n: \"内蒙古\", g: \"114.415868,43.468238|5\", cities: [{ n: \"呼和浩特\", g: \"111.660351,40.828319|12\" }, { n: \"阿拉善盟\", g: \"105.695683,38.843075|14\" }, { n: \"包头\", g: \"109.846239,40.647119|12\" }, { n: \"巴彦淖尔\", g: \"107.423807,40.76918|12\" }, { n: \"赤峰\", g: \"118.930761,42.297112|12\" }, { n: \"鄂尔多斯\", g: \"109.993706,39.81649|12\" }, { n: \"呼伦贝尔\", g: \"119.760822,49.201636|12\" }, { n: \"通辽\", g: \"122.260363,43.633756|12\" }, { n: \"乌海\", g: \"106.831999,39.683177|13\" }, { n: \"乌兰察布\", g: \"113.112846,41.022363|12\" }, { n: \"锡林郭勒盟\", g: \"116.02734,43.939705|11\" }, { n: \"兴安盟\", g: \"122.048167,46.083757|11\" }] }, { n: \"宁夏\", g: \"106.155481,37.321323|8\", cities: [{ n: \"银川\", g: \"106.206479,38.502621|12\" }, { n: \"固原\", g: \"106.285268,36.021523|13\" }, { n: \"石嘴山\", g: \"106.379337,39.020223|13\" }, { n: \"吴忠\", g: \"106.208254,37.993561|14\" }, { n: \"中卫\", g: \"105.196754,37.521124|14\" }] }, { n: \"青海\", g: \"96.202544,35.499761|7\", cities: [{ n: \"西宁\", g: \"101.767921,36.640739|12\" }, { n: \"果洛州\", g: \"100.223723,34.480485|11\" }, { n: \"海东地区\", g: \"102.085207,36.51761|11\" }, { n: \"海北州\", g: \"100.879802,36.960654|11\" }, { n: \"海南州\", g: \"100.624066,36.284364|11\" }, { n: \"海西州\", g: \"97.342625,37.373799|11\" }, { n: \"黄南州\", g: \"102.0076,35.522852|11\" }, { n: \"玉树州\", g: \"97.013316,33.00624|14\" }] }, { n: \"山东\", g: \"118.527663,36.09929|8\", cities: [{ n: \"济南\", g: \"117.024967,36.682785|12\" }, { n: \"滨州\", g: \"117.968292,37.405314|12\" }, { n: \"东营\", g: \"118.583926,37.487121|12\" }, { n: \"德州\", g: \"116.328161,37.460826|12\" }, { n: \"菏泽\", g: \"115.46336,35.26244|13\" }, { n: \"济宁\", g: \"116.600798,35.402122|13\" }, { n: \"莱芜\", g: \"117.684667,36.233654|13\" }, { n: \"聊城\", g: \"115.986869,36.455829|12\" }, { n: \"临沂\", g: \"118.340768,35.072409|12\" }, { n: \"青岛\", g: \"120.384428,36.105215|12\" }, { n: \"日照\", g: \"119.50718,35.420225|12\" }, { n: \"泰安\", g: \"117.089415,36.188078|13\" }, { n: \"威海\", g: \"122.093958,37.528787|13\" }, { n: \"潍坊\", g: \"119.142634,36.716115|12\" }, { n: \"烟台\", g: \"121.309555,37.536562|12\" }, { n: \"枣庄\", g: \"117.279305,34.807883|13\" }, { n: \"淄博\", g: \"118.059134,36.804685|12\" }] }, { n: \"山西\", g: \"112.515496,37.866566|7\", cities: [{ n: \"太原\", g: \"112.550864,37.890277|12\" }, { n: \"长治\", g: \"113.120292,36.201664|12\" }, { n: \"大同\", g: \"113.290509,40.113744|12\" }, { n: \"晋城\", g: \"112.867333,35.499834|13\" }, { n: \"晋中\", g: \"112.738514,37.693362|13\" }, { n: \"临汾\", g: \"111.538788,36.099745|13\" }, { n: \"吕梁\", g: \"111.143157,37.527316|14\" }, { n: \"朔州\", g: \"112.479928,39.337672|13\" }, { n: \"忻州\", g: \"112.727939,38.461031|12\" }, { n: \"阳泉\", g: \"113.569238,37.869529|13\" }, { n: \"运城\", g: \"111.006854,35.038859|13\" }] }, { n: \"陕西\", g: \"109.503789,35.860026|7\", cities: [{ n: \"西安\", g: \"108.953098,34.2778|12\" }, { n: \"安康\", g: \"109.038045,32.70437|13\" }, { n: \"宝鸡\", g: \"107.170645,34.364081|12\" }, { n: \"汉中\", g: \"107.045478,33.081569|13\" }, { n: \"商洛\", g: \"109.934208,33.873907|13\" }, { n: \"铜川\", g: \"108.968067,34.908368|13\" }, { n: \"渭南\", g: \"109.483933,34.502358|13\" }, { n: \"咸阳\", g: \"108.707509,34.345373|13\" }, { n: \"延安\", g: \"109.50051,36.60332|13\" }, { n: \"榆林\", g: \"109.745926,38.279439|12\" }] }, { n: \"四川\", g: \"102.89916,30.367481|7\", cities: [{ n: \"成都\", g: \"104.067923,30.679943|12\" }, { n: \"阿坝州\", g: \"102.228565,31.905763|15\" }, { n: \"巴中\", g: \"106.757916,31.869189|14\" }, { n: \"达州\", g: \"107.494973,31.214199|14\" }, { n: \"德阳\", g: \"104.402398,31.13114|13\" }, { n: \"甘孜州\", g: \"101.969232,30.055144|15\" }, { n: \"广安\", g: \"106.63572,30.463984|13\" }, { n: \"广元\", g: \"105.819687,32.44104|13\" }, { n: \"乐山\", g: \"103.760824,29.600958|13\" }, { n: \"凉山州\", g: \"102.259591,27.892393|14\" }, { n: \"泸州\", g: \"105.44397,28.89593|14\" }, { n: \"南充\", g: \"106.105554,30.800965|13\" }, { n: \"眉山\", g: \"103.84143,30.061115|13\" }, { n: \"绵阳\", g: \"104.705519,31.504701|12\" }, { n: \"内江\", g: \"105.073056,29.599462|13\" }, { n: \"攀枝花\", g: \"101.722423,26.587571|14\" }, { n: \"遂宁\", g: \"105.564888,30.557491|12\" }, { n: \"雅安\", g: \"103.009356,29.999716|13\" }, { n: \"宜宾\", g: \"104.633019,28.769675|13\" }, { n: \"资阳\", g: \"104.63593,30.132191|13\" }, { n: \"自贡\", g: \"104.776071,29.359157|13\" }] }, { n: \"西藏\", g: \"89.137982,31.367315|6\", cities: [{ n: \"拉萨\", g: \"91.111891,29.662557|13\" }, { n: \"阿里地区\", g: \"81.107669,30.404557|11\" }, { n: \"昌都地区\", g: \"97.185582,31.140576|15\" }, { n: \"林芝地区\", g: \"94.349985,29.666941|11\" }, { n: \"那曲地区\", g: \"92.067018,31.48068|14\" }, { n: \"日喀则地区\", g: \"88.891486,29.269023|14\" }, { n: \"山南地区\", g: \"91.750644,29.229027|11\" }] }, { n: \"新疆\", g: \"85.614899,42.127001|6\", cities: [{ n: \"乌鲁木齐\", g: \"87.564988,43.84038|12\" }, { n: \"阿拉尔\", g: \"81.291737,40.61568|13\" }, { n: \"阿克苏地区\", g: \"80.269846,41.171731|12\" }, { n: \"阿勒泰地区\", g: \"88.137915,47.839744|13\" }, { n: \"巴音郭楞\", g: \"86.121688,41.771362|12\" }, { n: \"博尔塔拉州\", g: \"82.052436,44.913651|11\" }, { n: \"昌吉州\", g: \"87.296038,44.007058|13\" }, { n: \"哈密地区\", g: \"93.528355,42.858596|13\" }, { n: \"和田地区\", g: \"79.930239,37.116774|13\" }, { n: \"喀什地区\", g: \"75.992973,39.470627|12\" }, { n: \"克拉玛依\", g: \"84.88118,45.594331|13\" }, { n: \"克孜勒苏州\", g: \"76.137564,39.750346|11\" }, { n: \"石河子\", g: \"86.041865,44.308259|13\" }, { n: \"塔城地区\", g: \"82.974881,46.758684|12\" }, { n: \"图木舒克\", g: \"79.198155,39.889223|13\" }, { n: \"吐鲁番地区\", g: \"89.181595,42.96047|13\" }, { n: \"五家渠\", g: \"87.565449,44.368899|13\" }, { n: \"伊犁州\", g: \"81.297854,43.922248|11\" }] }, { n: \"云南\", g: \"101.592952,24.864213|7\", cities: [{ n: \"昆明\", g: \"102.714601,25.049153|12\" }, { n: \"保山\", g: \"99.177996,25.120489|13\" }, { n: \"楚雄州\", g: \"101.529382,25.066356|13\" }, { n: \"大理州\", g: \"100.223675,25.5969|14\" }, { n: \"德宏州\", g: \"98.589434,24.44124|14\" }, { n: \"迪庆州\", g: \"99.713682,27.831029|14\" }, { n: \"红河州\", g: \"103.384065,23.367718|11\" }, { n: \"丽江\", g: \"100.229628,26.875351|13\" }, { n: \"临沧\", g: \"100.092613,23.887806|14\" }, { n: \"怒江州\", g: \"98.859932,25.860677|14\" }, { n: \"普洱\", g: \"100.980058,22.788778|14\" }, { n: \"曲靖\", g: \"103.782539,25.520758|12\" }, { n: \"昭通\", g: \"103.725021,27.340633|13\" }, { n: \"文山\", g: \"104.089112,23.401781|14\" }, { n: \"西双版纳\", g: \"100.803038,22.009433|13\" }, { n: \"玉溪\", g: \"102.545068,24.370447|13\" }] }, { n: \"浙江\", g: \"119.957202,29.159494|8\", cities: [{ n: \"杭州\", g: \"120.219375,30.259244|12\" }, { n: \"湖州\", g: \"120.137243,30.877925|12\" }, { n: \"嘉兴\", g: \"120.760428,30.773992|13\" }, { n: \"金华\", g: \"119.652576,29.102899|12\" }, { n: \"丽水\", g: \"119.929576,28.4563|13\" }, { n: \"宁波\", g: \"121.579006,29.885259|12\" }, { n: \"衢州\", g: \"118.875842,28.95691|12\" }, { n: \"绍兴\", g: \"120.592467,30.002365|13\" }, { n: \"台州\", g: \"121.440613,28.668283|13\" }, { n: \"温州\", g: \"120.690635,28.002838|12\" }, { n: \"舟山\", g: \"122.169872,30.03601|13\" }] }], other: [{ n: \"香港\", g: \"114.186124,22.293586|11\" }, { n: \"澳门\", g: \"113.557519,22.204118|13\" }, { n: \"台湾\", g: \"120.961454,23.80406|8\" }] };\n\nfunction getCenter(g) {\n var item = g.split(\"|\");\n item[0] = item[0].split(\",\");\n return {\n lng: parseFloat(item[0][0]),\n lat: parseFloat(item[0][1])\n };\n}\n\nvar cityCenter = {\n getProvinceNameByCityName: function getProvinceNameByCityName(name) {\n var provinces = citycenter.provinces;\n for (var i = 0; i < provinces.length; i++) {\n var provinceName = provinces[i].n;\n var cities = provinces[i].cities;\n for (var j = 0; j < cities.length; j++) {\n if (cities[j].n == name) {\n return provinceName;\n }\n }\n }\n return null;\n },\n getCenterByCityName: function getCenterByCityName(name) {\n name = name.replace('市', '');\n for (var i = 0; i < citycenter.municipalities.length; i++) {\n if (citycenter.municipalities[i].n == name) {\n return getCenter(citycenter.municipalities[i].g);\n }\n }\n\n for (var i = 0; i < citycenter.other.length; i++) {\n if (citycenter.other[i].n == name) {\n return getCenter(citycenter.other[i].g);\n }\n }\n\n var provinces = citycenter.provinces;\n for (var i = 0; i < provinces.length; i++) {\n if (provinces[i].n == name) {\n return getCenter(provinces[i].g);\n }\n var cities = provinces[i].cities;\n for (var j = 0; j < cities.length; j++) {\n if (cities[j].n == name) {\n return getCenter(cities[j].g);\n }\n }\n }\n return null;\n }\n};\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\n\n\nvar get = function get(object, property, receiver) {\n if (object === null) object = Function.prototype;\n var desc = Object.getOwnPropertyDescriptor(object, property);\n\n if (desc === undefined) {\n var parent = Object.getPrototypeOf(object);\n\n if (parent === null) {\n return undefined;\n } else {\n return get(parent, property, receiver);\n }\n } else if (\"value\" in desc) {\n return desc.value;\n } else {\n var getter = desc.get;\n\n if (getter === undefined) {\n return undefined;\n }\n\n return getter.call(receiver);\n }\n};\n\nvar inherits = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar possibleConstructorReturn = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\n/**\n * @author kyle / http://nikai.us/\n */\n\n/**\n * DataSet\n *\n * A data set can:\n * - add/remove/update data\n * - gives triggers upon changes in the data\n * - can import/export data in various data formats\n * @param {Array} [data] Optional array with initial data\n * the field geometry is like geojson, it can be:\n * {\n * \"type\": \"Point\",\n * \"coordinates\": [125.6, 10.1]\n * }\n * {\n * \"type\": \"LineString\",\n * \"coordinates\": [\n * [102.0, 0.0], [103.0, 1.0], [104.0, 0.0], [105.0, 1.0]\n * ]\n * }\n * {\n * \"type\": \"Polygon\",\n * \"coordinates\": [\n * [ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0],\n * [100.0, 1.0], [100.0, 0.0] ]\n * ]\n * }\n * @param {Object} [options] Available options:\n * \n */\nfunction DataSet(data, options) {\n Event.bind(this)();\n\n this._options = options || {};\n this._data = []; // map with data indexed by id\n\n // add initial data when provided\n if (data) {\n this.add(data);\n }\n}\n\nDataSet.prototype = Event.prototype;\n\n/**\n * Add data.\n */\nDataSet.prototype.add = function (data, senderId) {\n if (Array.isArray(data)) {\n // Array\n for (var i = 0, len = data.length; i < len; i++) {\n if (data[i]) {\n if (data[i].time && data[i].time.length == 14 && data[i].time.substr(0, 2) == '20') {\n var time = data[i].time;\n data[i].time = new Date(time.substr(0, 4) + '-' + time.substr(4, 2) + '-' + time.substr(6, 2) + ' ' + time.substr(8, 2) + ':' + time.substr(10, 2) + ':' + time.substr(12, 2)).getTime();\n }\n this._data.push(data[i]);\n }\n }\n } else if (data instanceof Object) {\n // Single item\n this._data.push(data);\n } else {\n throw new Error('Unknown dataType');\n }\n\n this._dataCache = JSON.parse(JSON.stringify(this._data));\n};\n\nDataSet.prototype.reset = function () {\n this._data = JSON.parse(JSON.stringify(this._dataCache));\n};\n\n/**\n * get data.\n */\nDataSet.prototype.get = function (args) {\n args = args || {};\n\n //console.time('copy data time')\n var start = new Date();\n // TODO: 不修改原始数据,在数据上挂载新的名称,每次修改数据直接修改新名称下的数据,可以省去deepCopy\n // var data = deepCopy(this._data);\n var data = this._data;\n\n var start = new Date();\n\n if (args.filter) {\n var newData = [];\n for (var i = 0; i < data.length; i++) {\n if (args.filter(data[i])) {\n newData.push(data[i]);\n }\n }\n data = newData;\n }\n\n if (args.transferCoordinate) {\n data = this.transferCoordinate(data, args.transferCoordinate, args.fromColumn, args.toColumn);\n }\n\n // console.timeEnd('transferCoordinate time')\n\n return data;\n};\n\n/**\n * set data.\n */\nDataSet.prototype.set = function (data) {\n this._set(data);\n this._trigger('change');\n};\n\n/**\n * set data.\n */\nDataSet.prototype._set = function (data) {\n this.clear();\n this.add(data);\n};\n\n/**\n * clear data.\n */\nDataSet.prototype.clear = function (args) {\n this._data = []; // map with data indexed by id\n};\n\n/**\n * remove data.\n */\nDataSet.prototype.remove = function (args) {};\n\n/**\n * update data.\n */\nDataSet.prototype.update = function (cbk, condition) {\n\n var data = this._data;\n\n var item = null;\n for (var i = 0; i < data.length; i++) {\n if (condition) {\n var flag = true;\n for (var key in condition) {\n if (data[i][key] != condition[key]) {\n flag = false;\n }\n }\n if (flag) {\n cbk && cbk(data[i]);\n }\n } else {\n cbk && cbk(data[i]);\n }\n }\n\n this._dataCache = JSON.parse(JSON.stringify(this._data));\n\n this._trigger('change');\n};\n\n/**\n * transfer coordinate.\n */\nDataSet.prototype.transferCoordinate = function (data, transferFn, fromColumn, toColumnName) {\n\n toColumnName = toColumnName || '_coordinates';\n fromColumn = fromColumn || 'coordinates';\n\n for (var i = 0; i < data.length; i++) {\n\n var geometry = data[i].geometry;\n var coordinates = geometry[fromColumn];\n switch (geometry.type) {\n case 'Point':\n geometry[toColumnName] = transferFn(coordinates);\n break;\n case 'LineString':\n var newCoordinates = [];\n for (var j = 0; j < coordinates.length; j++) {\n newCoordinates.push(transferFn(coordinates[j]));\n }\n geometry[toColumnName] = newCoordinates;\n break;\n case 'MultiLineString':\n case 'Polygon':\n var newCoordinates = getPolygon(coordinates);\n geometry[toColumnName] = newCoordinates;\n break;\n case 'MultiPolygon':\n var newCoordinates = [];\n for (var c = 0; c < coordinates.length; c++) {\n var polygon = coordinates[c];\n var polygon = getPolygon(polygon);\n newCoordinates.push(polygon);\n }\n\n geometry[toColumnName] = newCoordinates;\n break;\n }\n }\n\n function getPolygon(coordinates) {\n var newCoordinates = [];\n for (var c = 0; c < coordinates.length; c++) {\n var coordinate = coordinates[c];\n var newcoordinate = [];\n for (var j = 0; j < coordinate.length; j++) {\n newcoordinate.push(transferFn(coordinate[j]));\n }\n newCoordinates.push(newcoordinate);\n }\n return newCoordinates;\n }\n\n return data;\n};\n\nDataSet.prototype.initGeometry = function (transferFn) {\n\n if (transferFn) {\n\n this._data.forEach(function (item) {\n item.geometry = transferFn(item);\n });\n } else {\n\n this._data.forEach(function (item) {\n if (!item.geometry) {\n if (item.lng && item.lat) {\n item.geometry = {\n type: 'Point',\n coordinates: [item.lng, item.lat]\n };\n } else if (item.city) {\n var center = cityCenter.getCenterByCityName(item.city);\n if (center) {\n item.geometry = {\n type: 'Point',\n coordinates: [center.lng, center.lat]\n };\n }\n }\n }\n });\n }\n};\n\n/**\n * 获取当前列的最大值\n */\nDataSet.prototype.getMax = function (columnName) {\n var data = this._data;\n\n if (!data || data.length <= 0) {\n return;\n }\n\n var max = parseFloat(data[0][columnName]);\n\n for (var i = 1; i < data.length; i++) {\n var value = parseFloat(data[i][columnName]);\n if (value > max) {\n max = value;\n }\n }\n\n return max;\n};\n\n/**\n * 获取当前列的总和\n */\nDataSet.prototype.getSum = function (columnName) {\n var data = this._data;\n\n if (!data || data.length <= 0) {\n return;\n }\n\n var sum = 0;\n\n for (var i = 0; i < data.length; i++) {\n if (data[i][columnName]) {\n sum += parseFloat(data[i][columnName]);\n }\n }\n\n return sum;\n};\n\n/**\n * 获取当前列的最小值\n */\nDataSet.prototype.getMin = function (columnName) {\n var data = this._data;\n\n if (!data || data.length <= 0) {\n return;\n }\n\n var min = parseFloat(data[0][columnName]);\n\n for (var i = 1; i < data.length; i++) {\n var value = parseFloat(data[i][columnName]);\n if (value < min) {\n min = value;\n }\n }\n\n return min;\n};\n\n/**\n * 获取去重的数据\n */\nDataSet.prototype.getUnique = function (columnName) {\n var data = this._data;\n\n if (!data || data.length <= 0) {\n return;\n }\n\n var maps = {};\n\n for (var i = 1; i < data.length; i++) {\n maps[data[i][columnName]] = true;\n }\n\n var data = [];\n for (var key in maps) {\n data.push(key);\n }\n\n return data;\n};\n\nfunction hex_corner(center, size, i) {\n var angle_deg = 60 * i + 30;\n var angle_rad = Math.PI / 180 * angle_deg;\n return [center.x + size * Math.cos(angle_rad), center.y + size * Math.sin(angle_rad)];\n}\n\nfunction draw(context, x, y, size) {\n\n for (var j = 0; j < 6; j++) {\n\n var result = hex_corner({\n x: x,\n y: y\n }, size, j);\n\n context.lineTo(result[0], result[1]);\n }\n}\n\n/**\n * @author kyle / http://nikai.us/\n */\n\nvar pathSimple = {\n drawDataSet: function drawDataSet(context, dataSet, options) {\n\n var data = dataSet instanceof DataSet ? dataSet.get() : dataSet;\n\n for (var i = 0, len = data.length; i < len; i++) {\n var item = data[i];\n this.draw(context, item, options);\n }\n },\n draw: function draw$$1(context, data, options) {\n var type = data.geometry.type;\n var coordinates = data.geometry._coordinates || data.geometry.coordinates;\n var symbol = data.symbol || options.symbol || 'circle';\n switch (type) {\n case 'Point':\n var size = data._size || data.size || options._size || options.size || 5;\n if (symbol === 'circle') {\n if (options.bigData === 'Point') {\n context.moveTo(coordinates[0], coordinates[1]);\n }\n context.arc(coordinates[0], coordinates[1], size, 0, Math.PI * 2);\n } else if (symbol === 'rect') {\n context.rect(coordinates[0] - size / 2, coordinates[1] - size / 2, size, size);\n } else if (symbol === 'honeycomb') {\n draw(context, coordinates[0], coordinates[1], size);\n }\n break;\n case 'LineString':\n this.drawLineString(context, coordinates);\n break;\n case 'MultiLineString':\n for (var i = 0; i < coordinates.length; i++) {\n var lineString = coordinates[i];\n this.drawLineString(context, lineString);\n }\n break;\n case 'Polygon':\n this.drawPolygon(context, coordinates);\n break;\n case 'MultiPolygon':\n for (var i = 0; i < coordinates.length; i++) {\n var polygon = coordinates[i];\n this.drawPolygon(context, polygon);\n if (options.multiPolygonDraw) {\n var flag = options.multiPolygonDraw();\n if (flag) {\n return flag;\n }\n }\n }\n break;\n default:\n console.error('type' + type + 'is not support now!');\n break;\n }\n },\n\n drawLineString: function drawLineString(context, coordinates) {\n for (var j = 0; j < coordinates.length; j++) {\n var x = coordinates[j][0];\n var y = coordinates[j][1];\n if (j == 0) {\n context.moveTo(x, y);\n } else {\n context.lineTo(x, y);\n }\n }\n },\n\n drawPolygon: function drawPolygon(context, coordinates) {\n context.beginPath();\n\n for (var i = 0; i < coordinates.length; i++) {\n var coordinate = coordinates[i];\n\n context.moveTo(coordinate[0][0], coordinate[0][1]);\n for (var j = 1; j < coordinate.length; j++) {\n context.lineTo(coordinate[j][0], coordinate[j][1]);\n }\n context.lineTo(coordinate[0][0], coordinate[0][1]);\n context.closePath();\n }\n }\n\n};\n\n/**\n * @author kyle / http://nikai.us/\n */\n\nvar drawSimple = {\n draw: function draw(context, dataSet, options) {\n\n var data = dataSet instanceof DataSet ? dataSet.get() : dataSet;\n\n // console.log('xxxx',options)\n context.save();\n\n for (var key in options) {\n context[key] = options[key];\n }\n\n // console.log(data);\n if (options.bigData) {\n context.save();\n context.beginPath();\n\n for (var i = 0, len = data.length; i < len; i++) {\n\n var item = data[i];\n\n pathSimple.draw(context, item, options);\n }\n\n var type = options.bigData;\n\n if (type == 'Point' || type == 'Polygon' || type == 'MultiPolygon') {\n\n context.fill();\n\n if (context.lineDash) {\n context.setLineDash(context.lineDash);\n }\n\n if (item.lineDash) {\n context.setLineDash(item.lineDash);\n }\n\n if ((item.strokeStyle || options.strokeStyle) && options.lineWidth) {\n context.stroke();\n }\n } else if (type == 'LineString' || type == 'MultiLineString') {\n context.stroke();\n }\n\n context.restore();\n } else {\n\n for (var i = 0, len = data.length; i < len; i++) {\n\n var item = data[i];\n\n context.save();\n\n if (item.fillStyle || item._fillStyle) {\n context.fillStyle = item.fillStyle || item._fillStyle;\n }\n\n if (item.strokeStyle || item._strokeStyle) {\n context.strokeStyle = item.strokeStyle || item._strokeStyle;\n }\n\n if (context.lineDash) {\n context.setLineDash(context.lineDash);\n }\n\n if (item.lineDash) {\n context.setLineDash(item.lineDash);\n }\n\n var type = item.geometry.type;\n\n context.beginPath();\n\n options.multiPolygonDraw = function () {\n context.fill();\n\n if ((item.strokeStyle || options.strokeStyle) && options.lineWidth) {\n context.stroke();\n }\n };\n pathSimple.draw(context, item, options);\n\n if (type == 'Point' || type == 'Polygon' || type == 'MultiPolygon') {\n\n context.fill();\n\n if ((item.strokeStyle || options.strokeStyle) && options.lineWidth) {\n context.stroke();\n }\n } else if (type == 'LineString' || type == 'MultiLineString') {\n if (item.lineWidth || item._lineWidth) {\n context.lineWidth = item.lineWidth || item._lineWidth;\n }\n context.stroke();\n }\n\n context.restore();\n }\n }\n\n context.restore();\n }\n};\n\nfunction Canvas(width, height) {\n\n var canvas;\n\n if (typeof document === 'undefined') {\n\n // var Canvas = require('canvas');\n // canvas = new Canvas(width, height);\n\n } else {\n\n var canvas = document.createElement('canvas');\n\n if (width) {\n canvas.width = width;\n }\n\n if (height) {\n canvas.height = height;\n }\n }\n\n return canvas;\n}\n\n/**\n * @author kyle / http://nikai.us/\n */\n\n/**\n * Category\n * @param {Object} [options] Available options:\n * {Object} gradient: { 0.25: \"rgb(0,0,255)\", 0.55: \"rgb(0,255,0)\", 0.85: \"yellow\", 1.0: \"rgb(255,0,0)\"}\n */\nfunction Intensity(options) {\n\n options = options || {};\n this.gradient = options.gradient || {\n 0.25: \"rgba(0, 0, 255, 1)\",\n 0.55: \"rgba(0, 255, 0, 1)\",\n 0.85: \"rgba(255, 255, 0, 1)\",\n 1.0: \"rgba(255, 0, 0, 1)\"\n };\n this.maxSize = options.maxSize || 35;\n this.minSize = options.minSize || 0;\n this.max = options.max || 100;\n this.min = options.min || 0;\n this.initPalette();\n}\n\nIntensity.prototype.setMax = function (value) {\n this.max = value || 100;\n};\n\nIntensity.prototype.setMin = function (value) {\n this.min = value || 0;\n};\n\nIntensity.prototype.setMaxSize = function (maxSize) {\n this.maxSize = maxSize || 35;\n};\n\nIntensity.prototype.setMinSize = function (minSize) {\n this.minSize = minSize || 0;\n};\n\nIntensity.prototype.initPalette = function () {\n\n var gradient = this.gradient;\n\n var canvas = new Canvas(256, 1);\n\n var paletteCtx = this.paletteCtx = canvas.getContext('2d');\n\n var lineGradient = paletteCtx.createLinearGradient(0, 0, 256, 1);\n\n for (var key in gradient) {\n lineGradient.addColorStop(parseFloat(key), gradient[key]);\n }\n\n paletteCtx.fillStyle = lineGradient;\n paletteCtx.fillRect(0, 0, 256, 1);\n};\n\nIntensity.prototype.getColor = function (value) {\n\n var imageData = this.getImageData(value);\n\n return \"rgba(\" + imageData[0] + \", \" + imageData[1] + \", \" + imageData[2] + \", \" + imageData[3] / 256 + \")\";\n};\n\nIntensity.prototype.getImageData = function (value) {\n\n var imageData = this.paletteCtx.getImageData(0, 0, 256, 1).data;\n\n if (value === undefined) {\n return imageData;\n }\n\n var max = this.max;\n var min = this.min;\n\n if (value > max) {\n value = max;\n }\n\n if (value < min) {\n value = min;\n }\n\n var index = Math.floor((value - min) / (max - min) * (256 - 1)) * 4;\n\n return [imageData[index], imageData[index + 1], imageData[index + 2], imageData[index + 3]];\n};\n\n/**\n * @param Number value \n * @param Number max of value\n * @param Number max of size\n * @param Object other options\n */\nIntensity.prototype.getSize = function (value) {\n\n var size = 0;\n var max = this.max;\n var min = this.min;\n var maxSize = this.maxSize;\n var minSize = this.minSize;\n\n if (value > max) {\n value = max;\n }\n\n if (value < min) {\n value = min;\n }\n\n if (max > min) {\n size = minSize + (value - min) / (max - min) * (maxSize - minSize);\n } else {\n return maxSize;\n }\n\n return size;\n};\n\nIntensity.prototype.getLegend = function (options) {\n var gradient = this.gradient;\n\n var width = options.width || 20;\n var height = options.height || 180;\n\n var canvas = new Canvas(width, height);\n\n var paletteCtx = canvas.getContext('2d');\n\n var lineGradient = paletteCtx.createLinearGradient(0, height, 0, 0);\n\n for (var key in gradient) {\n lineGradient.addColorStop(parseFloat(key), gradient[key]);\n }\n\n paletteCtx.fillStyle = lineGradient;\n paletteCtx.fillRect(0, 0, width, height);\n\n return canvas;\n};\n\nvar global$1 = typeof window === 'undefined' ? {} : window;\n\nvar devicePixelRatio = global$1.devicePixelRatio || 1;\n\n/**\n * @author kyle / http://nikai.us/\n */\n\nfunction createCircle(size) {\n\n var shadowBlur = size / 2;\n var r2 = size + shadowBlur;\n var offsetDistance = 10000;\n\n var circle = new Canvas(r2 * 2, r2 * 2);\n var context = circle.getContext('2d');\n\n context.shadowBlur = shadowBlur;\n context.shadowColor = 'black';\n context.shadowOffsetX = context.shadowOffsetY = offsetDistance;\n\n context.beginPath();\n context.arc(r2 - offsetDistance, r2 - offsetDistance, size, 0, Math.PI * 2, true);\n context.closePath();\n context.fill();\n return circle;\n}\n\nfunction colorize(pixels, gradient, options) {\n var max = getMax(options);\n var min = getMin(options);\n var diff = max - min;\n var range = options.range || null;\n\n var jMin = 0;\n var jMax = 1024;\n if (range && range.length === 2) {\n jMin = (range[0] - min) / diff * 1024;\n }\n\n if (range && range.length === 2) {\n jMax = (range[1] - min) / diff * 1024;\n }\n\n var maxOpacity = options.maxOpacity || 0.8;\n var minOpacity = options.minOpacity || 0;\n var range = options.range;\n\n for (var i = 3, len = pixels.length, j; i < len; i += 4) {\n j = pixels[i] * 4; // get gradient color from opacity value\n\n if (pixels[i] / 256 > maxOpacity) {\n pixels[i] = 256 * maxOpacity;\n }\n if (pixels[i] / 256 < minOpacity) {\n pixels[i] = 256 * minOpacity;\n }\n\n if (j && j >= jMin && j <= jMax) {\n pixels[i - 3] = gradient[j];\n pixels[i - 2] = gradient[j + 1];\n pixels[i - 1] = gradient[j + 2];\n } else {\n pixels[i] = 0;\n }\n }\n}\n\nfunction getMax(options) {\n var max = options.max || 100;\n return max;\n}\n\nfunction getMin(options) {\n var min = options.min || 0;\n return min;\n}\n\nfunction drawGray(context, dataSet, options) {\n\n var max = getMax(options);\n var min = getMin(options);\n // console.log(max)\n var size = options._size;\n if (size == undefined) {\n size = options.size;\n if (size == undefined) {\n size = 13;\n }\n }\n\n var intensity = new Intensity({\n gradient: options.gradient,\n max: max,\n min: min\n });\n\n var circle = createCircle(size);\n var circleHalfWidth = circle.width / 2;\n var circleHalfHeight = circle.height / 2;\n\n var data = dataSet;\n\n var dataOrderByAlpha = {};\n\n data.forEach(function (item, index) {\n var count = item.count === undefined ? 1 : item.count;\n var alpha = Math.min(1, count / max).toFixed(2);\n dataOrderByAlpha[alpha] = dataOrderByAlpha[alpha] || [];\n dataOrderByAlpha[alpha].push(item);\n });\n\n for (var i in dataOrderByAlpha) {\n if (isNaN(i)) continue;\n var _data = dataOrderByAlpha[i];\n context.beginPath();\n if (!options.withoutAlpha) {\n context.globalAlpha = i;\n }\n context.strokeStyle = intensity.getColor(i * max);\n _data.forEach(function (item, index) {\n if (!item.geometry) {\n return;\n }\n\n var coordinates = item.geometry._coordinates || item.geometry.coordinates;\n var type = item.geometry.type;\n if (type === 'Point') {\n var count = item.count === undefined ? 1 : item.count;\n context.globalAlpha = count / max;\n context.drawImage(circle, coordinates[0] - circleHalfWidth, coordinates[1] - circleHalfHeight);\n } else if (type === 'LineString') {\n var count = item.count === undefined ? 1 : item.count;\n context.globalAlpha = count / max;\n context.beginPath();\n pathSimple.draw(context, item, options);\n context.stroke();\n } else if (type === 'Polygon') {}\n });\n }\n}\n\nfunction draw$1(context, dataSet, options) {\n if (context.canvas.width <= 0 || context.canvas.height <= 0) {\n return;\n }\n\n var strength = options.strength || 0.3;\n context.strokeStyle = 'rgba(0,0,0,' + strength + ')';\n\n var shadowCanvas = new Canvas(context.canvas.width, context.canvas.height);\n var shadowContext = shadowCanvas.getContext('2d');\n shadowContext.scale(devicePixelRatio, devicePixelRatio);\n\n options = options || {};\n\n var data = dataSet instanceof DataSet ? dataSet.get() : dataSet;\n\n context.save();\n\n var intensity = new Intensity({\n gradient: options.gradient\n });\n\n //console.time('drawGray')\n drawGray(shadowContext, data, options);\n\n //console.timeEnd('drawGray');\n // return false;\n if (!options.absolute) {\n //console.time('changeColor');\n var colored = shadowContext.getImageData(0, 0, context.canvas.width, context.canvas.height);\n colorize(colored.data, intensity.getImageData(), options);\n //console.timeEnd('changeColor');\n context.putImageData(colored, 0, 0);\n\n context.restore();\n }\n\n intensity = null;\n shadowCanvas = null;\n}\n\nvar drawHeatmap = {\n draw: draw$1\n};\n\n/**\n * @author kyle / http://nikai.us/\n */\n\nvar drawGrid = {\n draw: function draw(context, dataSet, options) {\n\n context.save();\n\n var data = dataSet instanceof DataSet ? dataSet.get() : dataSet;\n\n var grids = {};\n\n var size = options._size || options.size || 50;\n\n // 后端传入数据为网格数据时,传入enableCluster为false,前端不进行删格化操作,直接画方格\t\n var enableCluster = 'enableCluster' in options ? options.enableCluster : true;\n\n var offset = options.offset || {\n x: 0,\n y: 0\n };\n\n var intensity = new Intensity({\n min: options.min || 0,\n max: options.max || 100,\n gradient: options.gradient\n });\n\n if (!enableCluster) {\n for (var i = 0; i < data.length; i++) {\n var coordinates = data[i].geometry._coordinates || data[i].geometry.coordinates;\n var gridKey = coordinates.join(',');\n grids[gridKey] = data[i].count || 1;\n }\n for (var _gridKey in grids) {\n _gridKey = _gridKey.split(',');\n\n context.beginPath();\n context.rect(+_gridKey[0] - size / 2, +_gridKey[1] - size / 2, size, size);\n context.fillStyle = intensity.getColor(grids[_gridKey]);\n context.fill();\n if (options.strokeStyle && options.lineWidth) {\n context.stroke();\n }\n }\n } else {\n for (var _i = 0; _i < data.length; _i++) {\n var coordinates = data[_i].geometry._coordinates || data[_i].geometry.coordinates;\n var gridKey = Math.floor((coordinates[0] - offset.x) / size) + ',' + Math.floor((coordinates[1] - offset.y) / size);\n if (!grids[gridKey]) {\n grids[gridKey] = 0;\n }\n\n grids[gridKey] += ~~(data[_i].count || 1);\n }\n\n for (var _gridKey2 in grids) {\n _gridKey2 = _gridKey2.split(',');\n\n context.beginPath();\n context.rect(_gridKey2[0] * size + .5 + offset.x, _gridKey2[1] * size + .5 + offset.y, size, size);\n context.fillStyle = intensity.getColor(grids[_gridKey2]);\n context.fill();\n if (options.strokeStyle && options.lineWidth) {\n context.stroke();\n }\n }\n }\n\n if (options.label && options.label.show !== false) {\n\n context.fillStyle = options.label.fillStyle || 'white';\n\n if (options.label.font) {\n context.font = options.label.font;\n }\n\n if (options.label.shadowColor) {\n context.shadowColor = options.label.shadowColor;\n }\n\n if (options.label.shadowBlur) {\n context.shadowBlur = options.label.shadowBlur;\n }\n\n for (var gridKey in grids) {\n gridKey = gridKey.split(',');\n var text = grids[gridKey];\n var textWidth = context.measureText(text).width;\n if (!enableCluster) {\n context.fillText(text, +gridKey[0] - textWidth / 2, +gridKey[1] + 5);\n } else {\n context.fillText(text, gridKey[0] * size + .5 + offset.x + size / 2 - textWidth / 2, gridKey[1] * size + .5 + offset.y + size / 2 + 5);\n }\n }\n }\n\n context.restore();\n }\n};\n\n/**\n * @author kyle / http://nikai.us/\n */\n\nfunction hex_corner$1(center, size, i) {\n var angle_deg = 60 * i + 30;\n var angle_rad = Math.PI / 180 * angle_deg;\n return [center.x + size * Math.cos(angle_rad), center.y + size * Math.sin(angle_rad)];\n}\n\nvar drawHoneycomb = {\n draw: function draw(context, dataSet, options) {\n\n context.save();\n\n var data = dataSet instanceof DataSet ? dataSet.get() : dataSet;\n\n for (var key in options) {\n context[key] = options[key];\n }\n\n var grids = {};\n\n var offset = options.offset || {\n x: 10,\n y: 10\n };\n\n var r = options._size || options.size || 40;\n r = r / 2 / Math.sin(Math.PI / 3);\n var dx = r * 2 * Math.sin(Math.PI / 3);\n var dy = r * 1.5;\n\n var binsById = {};\n\n for (var i = 0; i < data.length; i++) {\n var coordinates = data[i].geometry._coordinates || data[i].geometry.coordinates;\n var py = (coordinates[1] - offset.y) / dy,\n pj = Math.round(py),\n px = (coordinates[0] - offset.x) / dx - (pj & 1 ? .5 : 0),\n pi = Math.round(px),\n py1 = py - pj;\n\n if (Math.abs(py1) * 3 > 1) {\n var px1 = px - pi,\n pi2 = pi + (px < pi ? -1 : 1) / 2,\n pj2 = pj + (py < pj ? -1 : 1),\n px2 = px - pi2,\n py2 = py - pj2;\n if (px1 * px1 + py1 * py1 > px2 * px2 + py2 * py2) pi = pi2 + (pj & 1 ? 1 : -1) / 2, pj = pj2;\n }\n\n var id = pi + \"-\" + pj,\n bin = binsById[id];\n if (bin) {\n bin.push(data[i]);\n } else {\n bin = binsById[id] = [data[i]];\n bin.i = pi;\n bin.j = pj;\n bin.x = (pi + (pj & 1 ? 1 / 2 : 0)) * dx;\n bin.y = pj * dy;\n }\n }\n\n var intensity = new Intensity({\n max: options.max || 100,\n maxSize: r,\n gradient: options.gradient\n });\n\n for (var key in binsById) {\n\n var item = binsById[key];\n\n context.beginPath();\n\n for (var j = 0; j < 6; j++) {\n\n var result = hex_corner$1({\n x: item.x + offset.x,\n y: item.y + offset.y\n }, r, j);\n\n context.lineTo(result[0], result[1]);\n }\n\n context.closePath();\n\n var count = 0;\n for (var i = 0; i < item.length; i++) {\n count += item[i].count || 1;\n }\n item.count = count;\n\n context.fillStyle = intensity.getColor(count);\n context.fill();\n if (options.strokeStyle && options.lineWidth) {\n context.stroke();\n }\n }\n\n if (options.label && options.label.show !== false) {\n\n context.fillStyle = options.label.fillStyle || 'white';\n\n if (options.label.font) {\n context.font = options.label.font;\n }\n\n if (options.label.shadowColor) {\n context.shadowColor = options.label.shadowColor;\n }\n\n if (options.label.shadowBlur) {\n context.shadowBlur = options.label.shadowBlur;\n }\n\n for (var key in binsById) {\n var item = binsById[key];\n var text = item.count;\n if (text < 0) {\n text = text.toFixed(2);\n } else {\n text = ~~text;\n }\n var textWidth = context.measureText(text).width;\n context.fillText(text, item.x + offset.x - textWidth / 2, item.y + offset.y + 5);\n }\n }\n\n context.restore();\n }\n};\n\nfunction createShader(gl, src, type) {\n var shader = gl.createShader(type);\n gl.shaderSource(shader, src);\n gl.compileShader(shader);\n return shader;\n}\n\nfunction initShaders(gl, vs_source, fs_source) {\n\n var vertexShader = createShader(gl, vs_source, gl.VERTEX_SHADER);\n var fragmentShader = createShader(gl, fs_source, gl.FRAGMENT_SHADER);\n\n var glProgram = gl.createProgram();\n\n gl.attachShader(glProgram, vertexShader);\n gl.attachShader(glProgram, fragmentShader);\n gl.linkProgram(glProgram);\n\n gl.useProgram(glProgram);\n\n return glProgram;\n}\n\nfunction getColorData(color) {\n var tmpCanvas = document.createElement('canvas');\n var tmpCtx = tmpCanvas.getContext('2d');\n tmpCanvas.width = 1;\n tmpCanvas.height = 1;\n tmpCtx.fillStyle = color;\n tmpCtx.fillRect(0, 0, 1, 1);\n return tmpCtx.getImageData(0, 0, 1, 1).data;\n}\n\nvar vs_s = ['attribute vec4 a_Position;', 'void main() {', 'gl_Position = a_Position;', 'gl_PointSize = 30.0;', '}'].join('');\n\nvar fs_s = ['precision mediump float;', 'uniform vec4 u_FragColor;', 'void main() {', 'gl_FragColor = u_FragColor;', '}'].join('');\n\nfunction draw$2(gl, data, options) {\n\n if (!data) {\n return;\n }\n\n var program = initShaders(gl, vs_s, fs_s);\n\n gl.enable(gl.BLEND);\n gl.blendFunc(gl.SRC_ALPHA, gl.ONE);\n\n //gl.clearColor(0.0, 0.0, 1.0, 1.0);\n gl.clear(gl.COLOR_BUFFER_BIT);\n\n var halfCanvasWidth = gl.canvas.width / 2;\n var halfCanvasHeight = gl.canvas.height / 2;\n\n // Create a buffer object\n var vertexBuffer = gl.createBuffer();\n // Bind the buffer object to target\n gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);\n\n var a_Position = gl.getAttribLocation(program, 'a_Position');\n // Assign the buffer object to a_Position variable\n gl.vertexAttribPointer(a_Position, 2, gl.FLOAT, false, 0, 0);\n\n // Enable the assignment to a_Position variable\n gl.enableVertexAttribArray(a_Position);\n\n var uFragColor = gl.getUniformLocation(program, 'u_FragColor');\n\n var colored = getColorData(options.strokeStyle || 'red');\n\n gl.uniform4f(uFragColor, colored[0] / 255, colored[1] / 255, colored[2] / 255, colored[3] / 255);\n\n gl.lineWidth(options.lineWidth || 1);\n\n for (var i = 0, len = data.length; i < len; i++) {\n var _geometry = data[i].geometry._coordinates;\n\n var verticesData = [];\n\n for (var j = 0; j < _geometry.length; j++) {\n var item = _geometry[j];\n\n var x = (item[0] - halfCanvasWidth) / halfCanvasWidth;\n var y = (halfCanvasHeight - item[1]) / halfCanvasHeight;\n verticesData.push(x, y);\n }\n\n var vertices = new Float32Array(verticesData);\n // Write date into the buffer object\n gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);\n gl.drawArrays(gl.LINE_STRIP, 0, _geometry.length);\n }\n}\n\nvar line = {\n draw: draw$2\n};\n\nvar vs_s$1 = ['attribute vec4 a_Position;', 'attribute float a_PointSize;', 'void main() {', 'gl_Position = a_Position;', 'gl_PointSize = a_PointSize;', '}'].join('');\n\nvar fs_s$1 = ['precision mediump float;', 'uniform vec4 u_FragColor;', 'void main() {', 'gl_FragColor = u_FragColor;', '}'].join('');\n\nfunction draw$3(gl, data, options) {\n\n if (!data) {\n return;\n }\n\n var program = initShaders(gl, vs_s$1, fs_s$1);\n\n var a_Position = gl.getAttribLocation(program, 'a_Position');\n\n var a_PointSize = gl.getAttribLocation(program, 'a_PointSize');\n\n var uFragColor = gl.getUniformLocation(program, 'u_FragColor');\n\n //gl.clearColor(0.0, 0.0, 1.0, 1.0);\n gl.clear(gl.COLOR_BUFFER_BIT);\n\n var halfCanvasWidth = gl.canvas.width / 2;\n var halfCanvasHeight = gl.canvas.height / 2;\n\n var verticesData = [];\n var count = 0;\n for (var i = 0; i < data.length; i++) {\n var item = data[i].geometry._coordinates;\n\n var x = (item[0] - halfCanvasWidth) / halfCanvasWidth;\n var y = (halfCanvasHeight - item[1]) / halfCanvasHeight;\n\n if (x < -1 || x > 1 || y < -1 || y > 1) {\n continue;\n }\n verticesData.push(x, y);\n count++;\n }\n\n var vertices = new Float32Array(verticesData);\n var n = count; // The number of vertices\n\n // Create a buffer object\n var vertexBuffer = gl.createBuffer();\n\n // Bind the buffer object to target\n gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);\n // Write date into the buffer object\n gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);\n\n // Assign the buffer object to a_Position variable\n gl.vertexAttribPointer(a_Position, 2, gl.FLOAT, false, 0, 0);\n\n // Enable the assignment to a_Position variable\n gl.enableVertexAttribArray(a_Position);\n\n gl.vertexAttrib1f(a_PointSize, options._size);\n\n var colored = getColorData(options.fillStyle || 'red');\n\n gl.uniform4f(uFragColor, colored[0] / 255, colored[1] / 255, colored[2] / 255, colored[3] / 255);\n gl.drawArrays(gl.POINTS, 0, n);\n}\n\nvar point = {\n draw: draw$3\n};\n\nfunction earcut(data, holeIndices, dim) {\n\n dim = dim || 2;\n\n var hasHoles = holeIndices && holeIndices.length,\n outerLen = hasHoles ? holeIndices[0] * dim : data.length,\n outerNode = linkedList(data, 0, outerLen, dim, true),\n triangles = [];\n\n if (!outerNode) return triangles;\n\n var minX, minY, maxX, maxY, x, y, size;\n\n if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim);\n\n // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n if (data.length > 80 * dim) {\n minX = maxX = data[0];\n minY = maxY = data[1];\n\n for (var i = dim; i < outerLen; i += dim) {\n x = data[i];\n y = data[i + 1];\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n }\n\n // minX, minY and size are later used to transform coords into integers for z-order calculation\n size = Math.max(maxX - minX, maxY - minY);\n }\n\n earcutLinked(outerNode, triangles, dim, minX, minY, size);\n\n return triangles;\n}\n\n// create a circular doubly linked list from polygon points in the specified winding order\nfunction linkedList(data, start, end, dim, clockwise) {\n var i, last;\n\n if (clockwise === signedArea(data, start, end, dim) > 0) {\n for (i = start; i < end; i += dim) {\n last = insertNode(i, data[i], data[i + 1], last);\n }\n } else {\n for (i = end - dim; i >= start; i -= dim) {\n last = insertNode(i, data[i], data[i + 1], last);\n }\n }\n\n if (last && equals(last, last.next)) {\n removeNode(last);\n last = last.next;\n }\n\n return last;\n}\n\n// eliminate colinear or duplicate points\nfunction filterPoints(start, end) {\n if (!start) return start;\n if (!end) end = start;\n\n var p = start,\n again;\n do {\n again = false;\n\n if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) {\n removeNode(p);\n p = end = p.prev;\n if (p === p.next) return null;\n again = true;\n } else {\n p = p.next;\n }\n } while (again || p !== end);\n\n return end;\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked(ear, triangles, dim, minX, minY, size, pass) {\n if (!ear) return;\n\n // interlink polygon nodes in z-order\n if (!pass && size) indexCurve(ear, minX, minY, size);\n\n var stop = ear,\n prev,\n next;\n\n // iterate through ears, slicing them one by one\n while (ear.prev !== ear.next) {\n prev = ear.prev;\n next = ear.next;\n\n if (size ? isEarHashed(ear, minX, minY, size) : isEar(ear)) {\n // cut off the triangle\n triangles.push(prev.i / dim);\n triangles.push(ear.i / dim);\n triangles.push(next.i / dim);\n\n removeNode(ear);\n\n // skipping the next vertice leads to less sliver triangles\n ear = next.next;\n stop = next.next;\n\n continue;\n }\n\n ear = next;\n\n // if we looped through the whole remaining polygon and can't find any more ears\n if (ear === stop) {\n // try filtering points and slicing again\n if (!pass) {\n earcutLinked(filterPoints(ear), triangles, dim, minX, minY, size, 1);\n\n // if this didn't work, try curing all small self-intersections locally\n } else if (pass === 1) {\n ear = cureLocalIntersections(ear, triangles, dim);\n earcutLinked(ear, triangles, dim, minX, minY, size, 2);\n\n // as a last resort, try splitting the remaining polygon into two\n } else if (pass === 2) {\n splitEarcut(ear, triangles, dim, minX, minY, size);\n }\n\n break;\n }\n }\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nfunction isEar(ear) {\n var a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n // now make sure we don't have other points inside the potential ear\n var p = ear.next.next;\n\n while (p !== ear.prev) {\n if (pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;\n p = p.next;\n }\n\n return true;\n}\n\nfunction isEarHashed(ear, minX, minY, size) {\n var a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n // triangle bbox; min & max are calculated like this for speed\n var minTX = a.x < b.x ? a.x < c.x ? a.x : c.x : b.x < c.x ? b.x : c.x,\n minTY = a.y < b.y ? a.y < c.y ? a.y : c.y : b.y < c.y ? b.y : c.y,\n maxTX = a.x > b.x ? a.x > c.x ? a.x : c.x : b.x > c.x ? b.x : c.x,\n maxTY = a.y > b.y ? a.y > c.y ? a.y : c.y : b.y > c.y ? b.y : c.y;\n\n // z-order range for the current triangle bbox;\n var minZ = zOrder(minTX, minTY, minX, minY, size),\n maxZ = zOrder(maxTX, maxTY, minX, minY, size);\n\n // first look for points inside the triangle in increasing z-order\n var p = ear.nextZ;\n\n while (p && p.z <= maxZ) {\n if (p !== ear.prev && p !== ear.next && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;\n p = p.nextZ;\n }\n\n // then look for points in decreasing z-order\n p = ear.prevZ;\n\n while (p && p.z >= minZ) {\n if (p !== ear.prev && p !== ear.next && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n }\n\n return true;\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections(start, triangles, dim) {\n var p = start;\n do {\n var a = p.prev,\n b = p.next.next;\n\n if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) {\n\n triangles.push(a.i / dim);\n triangles.push(p.i / dim);\n triangles.push(b.i / dim);\n\n // remove two nodes involved\n removeNode(p);\n removeNode(p.next);\n\n p = start = b;\n }\n p = p.next;\n } while (p !== start);\n\n return p;\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut(start, triangles, dim, minX, minY, size) {\n // look for a valid diagonal that divides the polygon into two\n var a = start;\n do {\n var b = a.next.next;\n while (b !== a.prev) {\n if (a.i !== b.i && isValidDiagonal(a, b)) {\n // split the polygon in two by the diagonal\n var c = splitPolygon(a, b);\n\n // filter colinear points around the cuts\n a = filterPoints(a, a.next);\n c = filterPoints(c, c.next);\n\n // run earcut on each half\n earcutLinked(a, triangles, dim, minX, minY, size);\n earcutLinked(c, triangles, dim, minX, minY, size);\n return;\n }\n b = b.next;\n }\n a = a.next;\n } while (a !== start);\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nfunction eliminateHoles(data, holeIndices, outerNode, dim) {\n var queue = [],\n i,\n len,\n start,\n end,\n list;\n\n for (i = 0, len = holeIndices.length; i < len; i++) {\n start = holeIndices[i] * dim;\n end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n list = linkedList(data, start, end, dim, false);\n if (list === list.next) list.steiner = true;\n queue.push(getLeftmost(list));\n }\n\n queue.sort(compareX);\n\n // process holes from left to right\n for (i = 0; i < queue.length; i++) {\n eliminateHole(queue[i], outerNode);\n outerNode = filterPoints(outerNode, outerNode.next);\n }\n\n return outerNode;\n}\n\nfunction compareX(a, b) {\n return a.x - b.x;\n}\n\n// find a bridge between vertices that connects hole with an outer ring and and link it\nfunction eliminateHole(hole, outerNode) {\n outerNode = findHoleBridge(hole, outerNode);\n if (outerNode) {\n var b = splitPolygon(outerNode, hole);\n filterPoints(b, b.next);\n }\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge(hole, outerNode) {\n var p = outerNode,\n hx = hole.x,\n hy = hole.y,\n qx = -Infinity,\n m;\n\n // find a segment intersected by a ray from the hole's leftmost point to the left;\n // segment's endpoint with lesser x will be potential connection point\n do {\n if (hy <= p.y && hy >= p.next.y) {\n var x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y);\n if (x <= hx && x > qx) {\n qx = x;\n if (x === hx) {\n if (hy === p.y) return p;\n if (hy === p.next.y) return p.next;\n }\n m = p.x < p.next.x ? p : p.next;\n }\n }\n p = p.next;\n } while (p !== outerNode);\n\n if (!m) return null;\n\n if (hx === qx) return m.prev; // hole touches outer segment; pick lower endpoint\n\n // look for points inside the triangle of hole point, segment intersection and endpoint;\n // if there are no points found, we have a valid connection;\n // otherwise choose the point of the minimum angle with the ray as connection point\n\n var stop = m,\n mx = m.x,\n my = m.y,\n tanMin = Infinity,\n tan;\n\n p = m.next;\n\n while (p !== stop) {\n if (hx >= p.x && p.x >= mx && pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) {\n\n tan = Math.abs(hy - p.y) / (hx - p.x); // tangential\n\n if ((tan < tanMin || tan === tanMin && p.x > m.x) && locallyInside(p, hole)) {\n m = p;\n tanMin = tan;\n }\n }\n\n p = p.next;\n }\n\n return m;\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve(start, minX, minY, size) {\n var p = start;\n do {\n if (p.z === null) p.z = zOrder(p.x, p.y, minX, minY, size);\n p.prevZ = p.prev;\n p.nextZ = p.next;\n p = p.next;\n } while (p !== start);\n\n p.prevZ.nextZ = null;\n p.prevZ = null;\n\n sortLinked(p);\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked(list) {\n var i,\n p,\n q,\n e,\n tail,\n numMerges,\n pSize,\n qSize,\n inSize = 1;\n\n do {\n p = list;\n list = null;\n tail = null;\n numMerges = 0;\n\n while (p) {\n numMerges++;\n q = p;\n pSize = 0;\n for (i = 0; i < inSize; i++) {\n pSize++;\n q = q.nextZ;\n if (!q) break;\n }\n\n qSize = inSize;\n\n while (pSize > 0 || qSize > 0 && q) {\n\n if (pSize === 0) {\n e = q;\n q = q.nextZ;\n qSize--;\n } else if (qSize === 0 || !q) {\n e = p;\n p = p.nextZ;\n pSize--;\n } else if (p.z <= q.z) {\n e = p;\n p = p.nextZ;\n pSize--;\n } else {\n e = q;\n q = q.nextZ;\n qSize--;\n }\n\n if (tail) tail.nextZ = e;else list = e;\n\n e.prevZ = tail;\n tail = e;\n }\n\n p = q;\n }\n\n tail.nextZ = null;\n inSize *= 2;\n } while (numMerges > 1);\n\n return list;\n}\n\n// z-order of a point given coords and size of the data bounding box\nfunction zOrder(x, y, minX, minY, size) {\n // coords are transformed into non-negative 15-bit integer range\n x = 32767 * (x - minX) / size;\n y = 32767 * (y - minY) / size;\n\n x = (x | x << 8) & 0x00FF00FF;\n x = (x | x << 4) & 0x0F0F0F0F;\n x = (x | x << 2) & 0x33333333;\n x = (x | x << 1) & 0x55555555;\n\n y = (y | y << 8) & 0x00FF00FF;\n y = (y | y << 4) & 0x0F0F0F0F;\n y = (y | y << 2) & 0x33333333;\n y = (y | y << 1) & 0x55555555;\n\n return x | y << 1;\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost(start) {\n var p = start,\n leftmost = start;\n do {\n if (p.x < leftmost.x) leftmost = p;\n p = p.next;\n } while (p !== start);\n\n return leftmost;\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle(ax, ay, bx, by, cx, cy, px, py) {\n return (cx - px) * (ay - py) - (ax - px) * (cy - py) >= 0 && (ax - px) * (by - py) - (bx - px) * (ay - py) >= 0 && (bx - px) * (cy - py) - (cx - px) * (by - py) >= 0;\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nfunction isValidDiagonal(a, b) {\n return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) && locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b);\n}\n\n// signed area of a triangle\nfunction area(p, q, r) {\n return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);\n}\n\n// check if two points are equal\nfunction equals(p1, p2) {\n return p1.x === p2.x && p1.y === p2.y;\n}\n\n// check if two segments intersect\nfunction intersects(p1, q1, p2, q2) {\n if (equals(p1, q1) && equals(p2, q2) || equals(p1, q2) && equals(p2, q1)) return true;\n return area(p1, q1, p2) > 0 !== area(p1, q1, q2) > 0 && area(p2, q2, p1) > 0 !== area(p2, q2, q1) > 0;\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon(a, b) {\n var p = a;\n do {\n if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i && intersects(p, p.next, a, b)) return true;\n p = p.next;\n } while (p !== a);\n\n return false;\n}\n\n// check if a polygon diagonal is locally inside the polygon\nfunction locallyInside(a, b) {\n return area(a.prev, a, a.next) < 0 ? area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 : area(a, b, a.prev) < 0 || area(a, a.next, b) < 0;\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside(a, b) {\n var p = a,\n inside = false,\n px = (a.x + b.x) / 2,\n py = (a.y + b.y) / 2;\n do {\n if (p.y > py !== p.next.y > py && px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x) inside = !inside;\n p = p.next;\n } while (p !== a);\n\n return inside;\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nfunction splitPolygon(a, b) {\n var a2 = new Node(a.i, a.x, a.y),\n b2 = new Node(b.i, b.x, b.y),\n an = a.next,\n bp = b.prev;\n\n a.next = b;\n b.prev = a;\n\n a2.next = an;\n an.prev = a2;\n\n b2.next = a2;\n a2.prev = b2;\n\n bp.next = b2;\n b2.prev = bp;\n\n return b2;\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode(i, x, y, last) {\n var p = new Node(i, x, y);\n\n if (!last) {\n p.prev = p;\n p.next = p;\n } else {\n p.next = last.next;\n p.prev = last;\n last.next.prev = p;\n last.next = p;\n }\n return p;\n}\n\nfunction removeNode(p) {\n p.next.prev = p.prev;\n p.prev.next = p.next;\n\n if (p.prevZ) p.prevZ.nextZ = p.nextZ;\n if (p.nextZ) p.nextZ.prevZ = p.prevZ;\n}\n\nfunction Node(i, x, y) {\n // vertice index in coordinates array\n this.i = i;\n\n // vertex coordinates\n this.x = x;\n this.y = y;\n\n // previous and next vertice nodes in a polygon ring\n this.prev = null;\n this.next = null;\n\n // z-order curve value\n this.z = null;\n\n // previous and next nodes in z-order\n this.prevZ = null;\n this.nextZ = null;\n\n // indicates whether this is a steiner point\n this.steiner = false;\n}\n\n// return a percentage difference between the polygon area and its triangulation area;\n// used to verify correctness of triangulation\nearcut.deviation = function (data, holeIndices, dim, triangles) {\n var hasHoles = holeIndices && holeIndices.length;\n var outerLen = hasHoles ? holeIndices[0] * dim : data.length;\n\n var polygonArea = Math.abs(signedArea(data, 0, outerLen, dim));\n if (hasHoles) {\n for (var i = 0, len = holeIndices.length; i < len; i++) {\n var start = holeIndices[i] * dim;\n var end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n polygonArea -= Math.abs(signedArea(data, start, end, dim));\n }\n }\n\n var trianglesArea = 0;\n for (i = 0; i < triangles.length; i += 3) {\n var a = triangles[i] * dim;\n var b = triangles[i + 1] * dim;\n var c = triangles[i + 2] * dim;\n trianglesArea += Math.abs((data[a] - data[c]) * (data[b + 1] - data[a + 1]) - (data[a] - data[b]) * (data[c + 1] - data[a + 1]));\n }\n\n return polygonArea === 0 && trianglesArea === 0 ? 0 : Math.abs((trianglesArea - polygonArea) / polygonArea);\n};\n\nfunction signedArea(data, start, end, dim) {\n var sum = 0;\n for (var i = start, j = end - dim; i < end; i += dim) {\n sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]);\n j = i;\n }\n return sum;\n}\n\n// turn a polygon in a multi-dimensional array form (e.g. as in GeoJSON) into a form Earcut accepts\nearcut.flatten = function (data) {\n var dim = data[0][0].length,\n result = { vertices: [], holes: [], dimensions: dim },\n holeIndex = 0;\n\n for (var i = 0; i < data.length; i++) {\n for (var j = 0; j < data[i].length; j++) {\n for (var d = 0; d < dim; d++) {\n result.vertices.push(data[i][j][d]);\n }\n }\n if (i > 0) {\n holeIndex += data[i - 1].length;\n result.holes.push(holeIndex);\n }\n }\n return result;\n};\n\nvar vs_s$2 = ['attribute vec4 a_Position;', 'void main() {', 'gl_Position = a_Position;', 'gl_PointSize = 30.0;', '}'].join('');\n\nvar fs_s$2 = ['precision mediump float;', 'uniform vec4 u_FragColor;', 'void main() {', 'gl_FragColor = u_FragColor;', '}'].join('');\n\nfunction draw$4(gl, data, options) {\n\n if (!data) {\n return;\n }\n\n // gl.clearColor(0.0, 0.0, 0.0, 1.0);\n gl.clear(gl.COLOR_BUFFER_BIT);\n gl.viewport(0, 0, gl.canvas.width, gl.canvas.height);\n\n var program = initShaders(gl, vs_s$2, fs_s$2);\n\n gl.enable(gl.BLEND);\n gl.blendFunc(gl.SRC_ALPHA, gl.ONE);\n\n var halfCanvasWidth = gl.canvas.width / 2;\n var halfCanvasHeight = gl.canvas.height / 2;\n\n // Bind the buffer object to target\n gl.bindBuffer(gl.ARRAY_BUFFER, gl.createBuffer());\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, gl.createBuffer());\n\n var a_Position = gl.getAttribLocation(program, 'a_Position');\n // Assign the buffer object to a_Position variable\n gl.vertexAttribPointer(a_Position, 2, gl.FLOAT, false, 0, 0);\n\n // Enable the assignment to a_Position variable\n gl.enableVertexAttribArray(a_Position);\n\n var uFragColor = gl.getUniformLocation(program, 'u_FragColor');\n\n var colored = getColorData(options.fillStyle || 'red');\n\n gl.uniform4f(uFragColor, colored[0] / 255, colored[1] / 255, colored[2] / 255, colored[3] / 255);\n\n gl.lineWidth(options.lineWidth || 1);\n\n var verticesArr = [];\n var trianglesArr = [];\n\n var maxSize = 65536;\n var indexOffset = 0;\n\n for (var i = 0, len = data.length; i < len; i++) {\n\n var flatten = earcut.flatten(data[i].geometry._coordinates || data[i].geometry.coordinates);\n var vertices = flatten.vertices;\n indexOffset = verticesArr.length / 2;\n for (var j = 0; j < vertices.length; j += 2) {\n vertices[j] = (vertices[j] - halfCanvasWidth) / halfCanvasWidth;\n vertices[j + 1] = (halfCanvasHeight - vertices[j + 1]) / halfCanvasHeight;\n }\n\n if ((verticesArr.length + vertices.length) / 2 > maxSize) {\n gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(verticesArr), gl.STATIC_DRAW);\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(trianglesArr), gl.STATIC_DRAW);\n gl.drawElements(gl.TRIANGLES, trianglesArr.length, gl.UNSIGNED_SHORT, 0);\n verticesArr.length = 0;\n trianglesArr.length = 0;\n indexOffset = 0;\n }\n\n for (var j = 0; j < vertices.length; j++) {\n verticesArr.push(vertices[j]);\n }\n\n var triangles = earcut(vertices, flatten.holes, flatten.dimensions);\n for (var j = 0; j < triangles.length; j++) {\n trianglesArr.push(triangles[j] + indexOffset);\n }\n }\n\n gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(verticesArr), gl.STATIC_DRAW);\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(trianglesArr), gl.STATIC_DRAW);\n gl.drawElements(gl.TRIANGLES, trianglesArr.length, gl.UNSIGNED_SHORT, 0);\n\n gl.bindBuffer(gl.ARRAY_BUFFER, null);\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);\n}\n\nvar polygon = {\n draw: draw$4\n};\n\n/**\n * @author kyle / http://nikai.us/\n */\nvar webglDrawSimple = {\n draw: function draw(gl, dataSet, options) {\n var data = dataSet instanceof DataSet ? dataSet.get() : dataSet;\n if (data.length > 0) {\n if (data[0].geometry.type == \"LineString\") {\n line.draw(gl, data, options);\n } else if (data[0].geometry.type == \"Polygon\" || data[0].geometry.type == \"MultiPolygon\") {\n polygon.draw(gl, data, options);\n } else {\n point.draw(gl, data, options);\n }\n }\n }\n};\n\n/**\n * 根据弧线的坐标节点数组\n */\nfunction getCurvePoints(points, options) {\n options = options || {};\n var curvePoints = [];\n for (var i = 0; i < points.length - 1; i++) {\n var p = getCurveByTwoPoints(points[i], points[i + 1], options.count);\n if (p && p.length > 0) {\n curvePoints = curvePoints.concat(p);\n }\n }\n return curvePoints;\n}\n\n/**\n * 根据两点获取曲线坐标点数组\n * @param Point 起点\n * @param Point 终点\n */\nfunction getCurveByTwoPoints(obj1, obj2, count) {\n if (!obj1 || !obj2) {\n return null;\n }\n\n var B1 = function B1(x) {\n return 1 - 2 * x + x * x;\n };\n var B2 = function B2(x) {\n return 2 * x - 2 * x * x;\n };\n var B3 = function B3(x) {\n return x * x;\n };\n\n var curveCoordinates = [];\n\n var count = count || 40; // 曲线是由一些小的线段组成的,这个表示这个曲线所有到的折线的个数\n var isFuture = false;\n var t, h, h2, lat3, lng3, j, t2;\n var LnArray = [];\n var i = 0;\n var inc = 0;\n\n if (typeof obj2 == \"undefined\") {\n if (typeof curveCoordinates != \"undefined\") {\n curveCoordinates = [];\n }\n return;\n }\n\n var lat1 = parseFloat(obj1.lat);\n var lat2 = parseFloat(obj2.lat);\n var lng1 = parseFloat(obj1.lng);\n var lng2 = parseFloat(obj2.lng);\n\n // 计算曲线角度的方法\n if (lng2 > lng1) {\n if (parseFloat(lng2 - lng1) > 180) {\n if (lng1 < 0) {\n lng1 = parseFloat(180 + 180 + lng1);\n lng2 = parseFloat(180 + 180 + lng2);\n }\n }\n }\n // 此时纠正了 lng1 lng2\n j = 0;\n t2 = 0;\n // 纬度相同\n if (lat2 == lat1) {\n t = 0;\n h = lng1 - lng2;\n // 经度相同\n } else if (lng2 == lng1) {\n t = Math.PI / 2;\n h = lat1 - lat2;\n } else {\n t = Math.atan((lat2 - lat1) / (lng2 - lng1));\n h = (lat2 - lat1) / Math.sin(t);\n }\n if (t2 == 0) {\n t2 = t + Math.PI / 5;\n }\n h2 = h / 2;\n lng3 = h2 * Math.cos(t2) + lng1;\n lat3 = h2 * Math.sin(t2) + lat1;\n\n for (i = 0; i < count + 1; i++) {\n var x = lng1 * B1(inc) + lng3 * B2(inc) + lng2 * B3(inc);\n var y = lat1 * B1(inc) + lat3 * B2(inc) + lat2 * B3(inc);\n var lng1_src = obj1.lng;\n var lng2_src = obj2.lng;\n\n curveCoordinates.push([lng1_src < 0 && lng2_src > 0 ? x - 360 : x, y]);\n inc = inc + 1 / count;\n }\n return curveCoordinates;\n}\n\nvar curve = {\n getPoints: getCurvePoints\n};\n\n/* \nFDEB algorithm implementation [www.win.tue.nl/~dholten/papers/forcebundles_eurovis.pdf].\n\nAuthor: (github.com/upphiminn)\n2013\n\n*/\n\nvar ForceEdgeBundling = function ForceEdgeBundling() {\n var data_nodes = {},\n // {'nodeid':{'x':,'y':},..}\n data_edges = [],\n // [{'source':'nodeid1', 'target':'nodeid2'},..]\n compatibility_list_for_edge = [],\n subdivision_points_for_edge = [],\n K = 0.1,\n // global bundling constant controling edge stiffness\n S_initial = 0.1,\n // init. distance to move points\n P_initial = 1,\n // init. subdivision number\n P_rate = 2,\n // subdivision rate increase\n C = 6,\n // number of cycles to perform\n I_initial = 70,\n // init. number of iterations for cycle\n I_rate = 0.6666667,\n // rate at which iteration number decreases i.e. 2/3\n compatibility_threshold = 0.6,\n invers_quadratic_mode = false,\n eps = 1e-8;\n\n /*** Geometry Helper Methods ***/\n function vector_dot_product(p, q) {\n return p.x * q.x + p.y * q.y;\n }\n\n function edge_as_vector(P) {\n return { 'x': data_nodes[P.target].x - data_nodes[P.source].x,\n 'y': data_nodes[P.target].y - data_nodes[P.source].y };\n }\n\n function edge_length(e) {\n return Math.sqrt(Math.pow(data_nodes[e.source].x - data_nodes[e.target].x, 2) + Math.pow(data_nodes[e.source].y - data_nodes[e.target].y, 2));\n }\n\n function custom_edge_length(e) {\n return Math.sqrt(Math.pow(e.source.x - e.target.x, 2) + Math.pow(e.source.y - e.target.y, 2));\n }\n\n function edge_midpoint(e) {\n var middle_x = (data_nodes[e.source].x + data_nodes[e.target].x) / 2.0;\n var middle_y = (data_nodes[e.source].y + data_nodes[e.target].y) / 2.0;\n return { 'x': middle_x, 'y': middle_y };\n }\n\n function compute_divided_edge_length(e_idx) {\n var length = 0;\n for (var i = 1; i < subdivision_points_for_edge[e_idx].length; i++) {\n var segment_length = euclidean_distance(subdivision_points_for_edge[e_idx][i], subdivision_points_for_edge[e_idx][i - 1]);\n length += segment_length;\n }\n return length;\n }\n\n function euclidean_distance(p, q) {\n return Math.sqrt(Math.pow(p.x - q.x, 2) + Math.pow(p.y - q.y, 2));\n }\n\n function project_point_on_line(p, Q) {\n var L = Math.sqrt((Q.target.x - Q.source.x) * (Q.target.x - Q.source.x) + (Q.target.y - Q.source.y) * (Q.target.y - Q.source.y));\n var r = ((Q.source.y - p.y) * (Q.source.y - Q.target.y) - (Q.source.x - p.x) * (Q.target.x - Q.source.x)) / (L * L);\n\n return { 'x': Q.source.x + r * (Q.target.x - Q.source.x), 'y': Q.source.y + r * (Q.target.y - Q.source.y) };\n }\n\n /*** ********************** ***/\n\n /*** Initialization Methods ***/\n function initialize_edge_subdivisions() {\n for (var i = 0; i < data_edges.length; i++) {\n if (P_initial == 1) subdivision_points_for_edge[i] = []; //0 subdivisions\n else {\n subdivision_points_for_edge[i] = [];\n subdivision_points_for_edge[i].push(data_nodes[data_edges[i].source]);\n subdivision_points_for_edge[i].push(data_nodes[data_edges[i].target]);\n }\n }\n }\n\n function initialize_compatibility_lists() {\n for (var i = 0; i < data_edges.length; i++) {\n compatibility_list_for_edge[i] = [];\n } //0 compatible edges.\n }\n\n function filter_self_loops(edgelist) {\n var filtered_edge_list = [];\n for (var e = 0; e < edgelist.length; e++) {\n if (data_nodes[edgelist[e].source].x != data_nodes[edgelist[e].target].x && data_nodes[edgelist[e].source].y != data_nodes[edgelist[e].target].y) {\n //or smaller than eps\n filtered_edge_list.push(edgelist[e]);\n }\n }\n\n return filtered_edge_list;\n }\n /*** ********************** ***/\n\n /*** Force Calculation Methods ***/\n function apply_spring_force(e_idx, i, kP) {\n\n var prev = subdivision_points_for_edge[e_idx][i - 1];\n var next = subdivision_points_for_edge[e_idx][i + 1];\n var crnt = subdivision_points_for_edge[e_idx][i];\n\n var x = prev.x - crnt.x + next.x - crnt.x;\n var y = prev.y - crnt.y + next.y - crnt.y;\n\n x *= kP;\n y *= kP;\n\n return { 'x': x, 'y': y };\n }\n\n function apply_electrostatic_force(e_idx, i, S) {\n var sum_of_forces = { 'x': 0, 'y': 0 };\n var compatible_edges_list = compatibility_list_for_edge[e_idx];\n\n for (var oe = 0; oe < compatible_edges_list.length; oe++) {\n var force = { 'x': subdivision_points_for_edge[compatible_edges_list[oe]][i].x - subdivision_points_for_edge[e_idx][i].x,\n 'y': subdivision_points_for_edge[compatible_edges_list[oe]][i].y - subdivision_points_for_edge[e_idx][i].y };\n\n if (Math.abs(force.x) > eps || Math.abs(force.y) > eps) {\n\n var diff = 1 / Math.pow(custom_edge_length({ 'source': subdivision_points_for_edge[compatible_edges_list[oe]][i],\n 'target': subdivision_points_for_edge[e_idx][i] }), 1);\n\n sum_of_forces.x += force.x * diff;\n sum_of_forces.y += force.y * diff;\n }\n }\n return sum_of_forces;\n }\n\n function apply_resulting_forces_on_subdivision_points(e_idx, P, S) {\n var kP = K / (edge_length(data_edges[e_idx]) * (P + 1)); // kP=K/|P|(number of segments), where |P| is the initial length of edge P.\n // (length * (num of sub division pts - 1))\n var resulting_forces_for_subdivision_points = [{ 'x': 0, 'y': 0 }];\n for (var i = 1; i < P + 1; i++) {\n // exclude initial end points of the edge 0 and P+1\n var resulting_force = { 'x': 0, 'y': 0 };\n\n var spring_force = apply_spring_force(e_idx, i, kP);\n var electrostatic_force = apply_electrostatic_force(e_idx, i, S);\n\n resulting_force.x = S * (spring_force.x + electrostatic_force.x);\n resulting_force.y = S * (spring_force.y + electrostatic_force.y);\n\n resulting_forces_for_subdivision_points.push(resulting_force);\n }\n resulting_forces_for_subdivision_points.push({ 'x': 0, 'y': 0 });\n return resulting_forces_for_subdivision_points;\n }\n /*** ********************** ***/\n\n /*** Edge Division Calculation Methods ***/\n function update_edge_divisions(P) {\n for (var e_idx = 0; e_idx < data_edges.length; e_idx++) {\n\n if (P == 1) {\n subdivision_points_for_edge[e_idx].push(data_nodes[data_edges[e_idx].source]); // source\n subdivision_points_for_edge[e_idx].push(edge_midpoint(data_edges[e_idx])); // mid point\n subdivision_points_for_edge[e_idx].push(data_nodes[data_edges[e_idx].target]); // target\n } else {\n\n var divided_edge_length = compute_divided_edge_length(e_idx);\n var segment_length = divided_edge_length / (P + 1);\n var current_segment_length = segment_length;\n var new_subdivision_points = [];\n new_subdivision_points.push(data_nodes[data_edges[e_idx].source]); //source\n\n for (var i = 1; i < subdivision_points_for_edge[e_idx].length; i++) {\n var old_segment_length = euclidean_distance(subdivision_points_for_edge[e_idx][i], subdivision_points_for_edge[e_idx][i - 1]);\n\n while (old_segment_length > current_segment_length) {\n var percent_position = current_segment_length / old_segment_length;\n var new_subdivision_point_x = subdivision_points_for_edge[e_idx][i - 1].x;\n var new_subdivision_point_y = subdivision_points_for_edge[e_idx][i - 1].y;\n\n new_subdivision_point_x += percent_position * (subdivision_points_for_edge[e_idx][i].x - subdivision_points_for_edge[e_idx][i - 1].x);\n new_subdivision_point_y += percent_position * (subdivision_points_for_edge[e_idx][i].y - subdivision_points_for_edge[e_idx][i - 1].y);\n new_subdivision_points.push({ 'x': new_subdivision_point_x,\n 'y': new_subdivision_point_y });\n\n old_segment_length -= current_segment_length;\n current_segment_length = segment_length;\n }\n current_segment_length -= old_segment_length;\n }\n new_subdivision_points.push(data_nodes[data_edges[e_idx].target]); //target\n subdivision_points_for_edge[e_idx] = new_subdivision_points;\n }\n }\n }\n /*** ********************** ***/\n\n /*** Edge compatibility measures ***/\n function angle_compatibility(P, Q) {\n var result = Math.abs(vector_dot_product(edge_as_vector(P), edge_as_vector(Q)) / (edge_length(P) * edge_length(Q)));\n return result;\n }\n\n function scale_compatibility(P, Q) {\n var lavg = (edge_length(P) + edge_length(Q)) / 2.0;\n var result = 2.0 / (lavg / Math.min(edge_length(P), edge_length(Q)) + Math.max(edge_length(P), edge_length(Q)) / lavg);\n return result;\n }\n\n function position_compatibility(P, Q) {\n var lavg = (edge_length(P) + edge_length(Q)) / 2.0;\n var midP = { 'x': (data_nodes[P.source].x + data_nodes[P.target].x) / 2.0,\n 'y': (data_nodes[P.source].y + data_nodes[P.target].y) / 2.0 };\n var midQ = { 'x': (data_nodes[Q.source].x + data_nodes[Q.target].x) / 2.0,\n 'y': (data_nodes[Q.source].y + data_nodes[Q.target].y) / 2.0 };\n var result = lavg / (lavg + euclidean_distance(midP, midQ));\n return result;\n }\n\n function edge_visibility(P, Q) {\n var I0 = project_point_on_line(data_nodes[Q.source], { 'source': data_nodes[P.source],\n 'target': data_nodes[P.target] });\n var I1 = project_point_on_line(data_nodes[Q.target], { 'source': data_nodes[P.source],\n 'target': data_nodes[P.target] }); //send acutal edge points positions\n var midI = { 'x': (I0.x + I1.x) / 2.0,\n 'y': (I0.y + I1.y) / 2.0 };\n var midP = { 'x': (data_nodes[P.source].x + data_nodes[P.target].x) / 2.0,\n 'y': (data_nodes[P.source].y + data_nodes[P.target].y) / 2.0 };\n var result = Math.max(0, 1 - 2 * euclidean_distance(midP, midI) / euclidean_distance(I0, I1));\n return result;\n }\n\n function visibility_compatibility(P, Q) {\n return Math.min(edge_visibility(P, Q), edge_visibility(Q, P));\n }\n\n function compatibility_score(P, Q) {\n var result = angle_compatibility(P, Q) * scale_compatibility(P, Q) * position_compatibility(P, Q) * visibility_compatibility(P, Q);\n\n return result;\n }\n\n function are_compatible(P, Q) {\n // console.log('compatibility ' + P.source +' - '+ P.target + ' and ' + Q.source +' '+ Q.target);\n return compatibility_score(P, Q) >= compatibility_threshold;\n }\n\n function compute_compatibility_lists() {\n for (var e = 0; e < data_edges.length - 1; e++) {\n for (var oe = e + 1; oe < data_edges.length; oe++) {\n // don't want any duplicates\n if (e == oe) continue;else {\n if (are_compatible(data_edges[e], data_edges[oe])) {\n compatibility_list_for_edge[e].push(oe);\n compatibility_list_for_edge[oe].push(e);\n }\n }\n }\n }\n }\n\n /*** ************************ ***/\n\n /*** Main Bundling Loop Methods ***/\n var forcebundle = function forcebundle() {\n var S = S_initial;\n var I = I_initial;\n var P = P_initial;\n\n initialize_edge_subdivisions();\n initialize_compatibility_lists();\n update_edge_divisions(P);\n compute_compatibility_lists();\n for (var cycle = 0; cycle < C; cycle++) {\n for (var iteration = 0; iteration < I; iteration++) {\n var forces = [];\n for (var edge = 0; edge < data_edges.length; edge++) {\n forces[edge] = apply_resulting_forces_on_subdivision_points(edge, P, S);\n }\n for (var e = 0; e < data_edges.length; e++) {\n for (var i = 0; i < P + 1; i++) {\n subdivision_points_for_edge[e][i].x += forces[e][i].x;\n subdivision_points_for_edge[e][i].y += forces[e][i].y;\n }\n }\n }\n //prepare for next cycle\n S = S / 2;\n P = P * 2;\n I = I_rate * I;\n\n update_edge_divisions(P);\n // console.log('C' + cycle);\n // console.log('P' + P);\n // console.log('S' + S);\n }\n return subdivision_points_for_edge;\n };\n /*** ************************ ***/\n\n /*** Getters/Setters Methods ***/\n forcebundle.nodes = function (nl) {\n if (arguments.length == 0) {\n return data_nodes;\n } else {\n data_nodes = nl;\n }\n return forcebundle;\n };\n\n forcebundle.edges = function (ll) {\n if (arguments.length == 0) {\n return data_edges;\n } else {\n data_edges = filter_self_loops(ll); //remove edges to from to the same point\n }\n return forcebundle;\n };\n\n forcebundle.bundling_stiffness = function (k) {\n if (arguments.length == 0) {\n return K;\n } else {\n K = k;\n }\n return forcebundle;\n };\n\n forcebundle.step_size = function (step) {\n if (arguments.length == 0) {\n return S_initial;\n } else {\n S_initial = step;\n }\n return forcebundle;\n };\n\n forcebundle.cycles = function (c) {\n if (arguments.length == 0) {\n return C;\n } else {\n C = c;\n }\n return forcebundle;\n };\n\n forcebundle.iterations = function (i) {\n if (arguments.length == 0) {\n return I_initial;\n } else {\n I_initial = i;\n }\n return forcebundle;\n };\n\n forcebundle.iterations_rate = function (i) {\n if (arguments.length == 0) {\n return I_rate;\n } else {\n I_rate = i;\n }\n return forcebundle;\n };\n\n forcebundle.subdivision_points_seed = function (p) {\n if (arguments.length == 0) {\n return P;\n } else {\n P = p;\n }\n return forcebundle;\n };\n\n forcebundle.subdivision_rate = function (r) {\n if (arguments.length == 0) {\n return P_rate;\n } else {\n P_rate = r;\n }\n return forcebundle;\n };\n\n forcebundle.compatbility_threshold = function (t) {\n if (arguments.length == 0) {\n return compatbility_threshold;\n } else {\n compatibility_threshold = t;\n }\n return forcebundle;\n };\n\n /*** ************************ ***/\n\n return forcebundle;\n};\n\n/**\n * @author kyle / http://nikai.us/\n */\n\n/**\n * Category\n * @param {Object} splitList:\n * { \n * other: 1,\n * 1: 2,\n * 2: 3,\n * 3: 4,\n * 4: 5,\n * 5: 6,\n * 6: 7\n * }\n */\nfunction Category(splitList) {\n this.splitList = splitList || {\n other: 1\n };\n}\n\nCategory.prototype.get = function (count) {\n\n var splitList = this.splitList;\n\n var value = splitList['other'];\n\n for (var i in splitList) {\n if (count == i) {\n value = splitList[i];\n break;\n }\n }\n\n return value;\n};\n\n/**\n * 根据DataSet自动生成对应的splitList\n */\nCategory.prototype.generateByDataSet = function (dataSet, color) {\n var colors = color || ['rgba(255, 255, 0, 0.8)', 'rgba(253, 98, 104, 0.8)', 'rgba(255, 146, 149, 0.8)', 'rgba(255, 241, 193, 0.8)', 'rgba(110, 176, 253, 0.8)', 'rgba(52, 139, 251, 0.8)', 'rgba(17, 102, 252, 0.8)'];\n var data = dataSet.get();\n this.splitList = {};\n var count = 0;\n for (var i = 0; i < data.length; i++) {\n if (this.splitList[data[i].count] === undefined) {\n this.splitList[data[i].count] = colors[count];\n count++;\n }\n if (count >= colors.length - 1) {\n break;\n }\n }\n\n this.splitList['other'] = colors[colors.length - 1];\n};\n\nCategory.prototype.getLegend = function (options) {\n var splitList = this.splitList;\n var container = document.createElement('div');\n container.style.cssText = \"background:#fff; padding: 5px; border: 1px solid #ccc;\";\n var html = '';\n for (var key in splitList) {\n html += '
' + key + '
';\n }\n container.innerHTML = html;\n return container;\n};\n\n/**\n * @author kyle / http://nikai.us/\n */\n\n/**\n * Choropleth\n * @param {Object} splitList:\n * [\n * {\n * start: 0,\n * end: 2,\n * value: randomColor()\n * },{\n * start: 2,\n * end: 4,\n * value: randomColor()\n * },{\n * start: 4,\n * value: randomColor()\n * }\n * ];\n *\n */\nfunction Choropleth(splitList) {\n this.splitList = splitList || [{\n start: 0,\n value: 'red'\n }];\n}\n\nChoropleth.prototype.get = function (count) {\n var splitList = this.splitList;\n\n var value = false;\n\n for (var i = 0; i < splitList.length; i++) {\n if ((splitList[i].start === undefined || splitList[i].start !== undefined && count >= splitList[i].start) && (splitList[i].end === undefined || splitList[i].end !== undefined && count < splitList[i].end)) {\n value = splitList[i].value;\n break;\n }\n }\n\n return value;\n};\n\n/**\n * 根据DataSet自动生成对应的splitList\n */\nChoropleth.prototype.generateByDataSet = function (dataSet) {\n\n var min = dataSet.getMin('count');\n var max = dataSet.getMax('count');\n\n this.generateByMinMax(min, max);\n};\n\n/**\n * 根据DataSet自动生成对应的splitList\n */\nChoropleth.prototype.generateByMinMax = function (min, max) {\n var colors = ['rgba(255, 255, 0, 0.8)', 'rgba(253, 98, 104, 0.8)', 'rgba(255, 146, 149, 0.8)', 'rgba(255, 241, 193, 0.8)', 'rgba(110, 176, 253, 0.8)', 'rgba(52, 139, 251, 0.8)', 'rgba(17, 102, 252, 0.8)'];\n var splitNum = Number((max - min) / 7);\n // console.log(splitNum)\n max = Number(max);\n var index = Number(min);\n this.splitList = [];\n var count = 0;\n\n while (index < max) {\n this.splitList.push({\n start: index,\n end: index + splitNum,\n value: colors[count]\n });\n count++;\n index += splitNum;\n // console.log(index, max)\n }\n // console.log('splitNum')\n};\n\nChoropleth.prototype.getLegend = function (options) {\n var splitList = this.splitList;\n};\n\n/**\n * @author Mofei\n */\n\nvar MapHelper = function () {\n function MapHelper(id, type, opt) {\n classCallCheck(this, MapHelper);\n\n if (!id || !type) {\n console.warn('id 和 type 为必填项');\n return false;\n }\n\n if (type == 'baidu') {\n if (!BMap) {\n console.warn('请先引入百度地图JS API');\n return false;\n }\n } else {\n console.warn('暂不支持你的地图类型');\n }\n this.type = type;\n var center = opt && opt.center ? opt.center : [106.962497, 38.208726];\n var zoom = opt && opt.zoom ? opt.zoom : 5;\n var map = this.map = new BMap.Map(id, {\n enableMapClick: false\n });\n map.centerAndZoom(new BMap.Point(center[0], center[1]), zoom);\n map.enableScrollWheelZoom(true);\n\n map.setMapStyle({\n style: 'light'\n });\n }\n\n createClass(MapHelper, [{\n key: 'addLayer',\n value: function addLayer(datas, options) {\n if (this.type == 'baidu') {\n return new mapv.baiduMapLayer(this.map, dataSet, options);\n }\n }\n }, {\n key: 'getMap',\n value: function getMap() {\n return this.map;\n }\n }]);\n return MapHelper;\n}();\n\n/**\n * 一直覆盖在当前地图视野的Canvas对象\n *\n * @author nikai (@胖嘟嘟的骨头, nikai@baidu.com)\n *\n * @param \n * {\n * map 地图实例对象\n * }\n */\n\nfunction CanvasLayer(options) {\n this.options = options || {};\n this.paneName = this.options.paneName || 'mapPane';\n this.context = this.options.context || '2d';\n this.zIndex = this.options.zIndex || 0;\n this.mixBlendMode = this.options.mixBlendMode || null;\n this.enableMassClear = this.options.enableMassClear;\n this._map = options.map;\n this._lastDrawTime = null;\n this.show();\n}\n\nvar global$3 = typeof window === 'undefined' ? {} : window;\nvar BMap$1 = global$3.BMap || global$3.BMapGL;\nif (BMap$1) {\n\n CanvasLayer.prototype = new BMap$1.Overlay();\n\n CanvasLayer.prototype.initialize = function (map) {\n this._map = map;\n var canvas = this.canvas = document.createElement(\"canvas\");\n canvas.style.cssText = \"position:absolute;\" + \"left:0;\" + \"top:0;\" + \"z-index:\" + this.zIndex + \";user-select:none;\";\n canvas.style.mixBlendMode = this.mixBlendMode;\n this.adjustSize();\n var pane = map.getPanes()[this.paneName];\n if (!pane) {\n pane = map.getPanes().floatShadow;\n }\n pane.appendChild(canvas);\n var that = this;\n map.addEventListener('resize', function () {\n that.adjustSize();\n that._draw();\n });\n map.addEventListener('update', function () {\n that._draw();\n });\n /*\n map.addEventListener('moving', function() {\n that._draw();\n });\n */\n if (this.options.updateImmediate) {\n setTimeout(function () {\n that._draw();\n }, 100);\n }\n return this.canvas;\n };\n\n CanvasLayer.prototype.adjustSize = function () {\n var size = this._map.getSize();\n var canvas = this.canvas;\n\n var devicePixelRatio = this.devicePixelRatio = global$3.devicePixelRatio || 1;\n\n canvas.width = size.width * devicePixelRatio;\n canvas.height = size.height * devicePixelRatio;\n if (this.context == '2d') {\n canvas.getContext(this.context).scale(devicePixelRatio, devicePixelRatio);\n }\n\n canvas.style.width = size.width + \"px\";\n canvas.style.height = size.height + \"px\";\n };\n\n CanvasLayer.prototype.draw = function () {\n var self = this;\n if (this.options.updateImmediate) {\n self._draw();\n } else {\n clearTimeout(self.timeoutID);\n self.timeoutID = setTimeout(function () {\n self._draw();\n }, 15);\n }\n };\n\n CanvasLayer.prototype._draw = function () {\n var map = this._map;\n var size = map.getSize();\n var center = map.getCenter();\n if (center) {\n var pixel = map.pointToOverlayPixel(center);\n this.canvas.style.left = pixel.x - size.width / 2 + 'px';\n this.canvas.style.top = pixel.y - size.height / 2 + 'px';\n this.dispatchEvent('draw');\n this.options.update && this.options.update.call(this);\n }\n };\n\n CanvasLayer.prototype.getContainer = function () {\n return this.canvas;\n };\n\n CanvasLayer.prototype.show = function () {\n if (!this.canvas) {\n this._map.addOverlay(this);\n }\n this.canvas.style.display = \"block\";\n };\n\n CanvasLayer.prototype.hide = function () {\n this.canvas.style.display = \"none\";\n //this._map.removeOverlay(this);\n };\n\n CanvasLayer.prototype.setZIndex = function (zIndex) {\n this.zIndex = zIndex;\n this.canvas.style.zIndex = this.zIndex;\n };\n\n CanvasLayer.prototype.getZIndex = function () {\n return this.zIndex;\n };\n}\n\n/**\n * Tween.js - Licensed under the MIT license\n * https://github.com/tweenjs/tween.js\n * ----------------------------------------------\n *\n * See https://github.com/tweenjs/tween.js/graphs/contributors for the full list of contributors.\n * Thank you all, you're awesome!\n */\n\nvar TWEEN = TWEEN || function () {\n\n var _tweens = [];\n\n return {\n\n getAll: function getAll() {\n\n return _tweens;\n },\n\n removeAll: function removeAll() {\n\n _tweens = [];\n },\n\n add: function add(tween) {\n\n _tweens.push(tween);\n },\n\n remove: function remove(tween) {\n\n var i = _tweens.indexOf(tween);\n\n if (i !== -1) {\n _tweens.splice(i, 1);\n }\n },\n\n update: function update(time, preserve) {\n\n if (_tweens.length === 0) {\n return false;\n }\n\n var i = 0;\n\n time = time !== undefined ? time : TWEEN.now();\n\n while (i < _tweens.length) {\n\n if (_tweens[i].update(time) || preserve) {\n i++;\n } else {\n _tweens.splice(i, 1);\n }\n }\n\n return true;\n }\n };\n}();\n\n// Include a performance.now polyfill.\n// In node.js, use process.hrtime.\nif (typeof window === 'undefined' && typeof process !== 'undefined') {\n TWEEN.now = function () {\n var time = process.hrtime();\n\n // Convert [seconds, nanoseconds] to milliseconds.\n return time[0] * 1000 + time[1] / 1000000;\n };\n}\n// In a browser, use window.performance.now if it is available.\nelse if (typeof window !== 'undefined' && window.performance !== undefined && window.performance.now !== undefined) {\n // This must be bound, because directly assigning this function\n // leads to an invocation exception in Chrome.\n TWEEN.now = window.performance.now.bind(window.performance);\n }\n // Use Date.now if it is available.\n else if (Date.now !== undefined) {\n TWEEN.now = Date.now;\n }\n // Otherwise, use 'new Date().getTime()'.\n else {\n TWEEN.now = function () {\n return new Date().getTime();\n };\n }\n\nTWEEN.Tween = function (object) {\n\n var _object = object;\n var _valuesStart = {};\n var _valuesEnd = {};\n var _valuesStartRepeat = {};\n var _duration = 1000;\n var _repeat = 0;\n var _repeatDelayTime;\n var _yoyo = false;\n var _isPlaying = false;\n var _reversed = false;\n var _delayTime = 0;\n var _startTime = null;\n var _easingFunction = TWEEN.Easing.Linear.None;\n var _interpolationFunction = TWEEN.Interpolation.Linear;\n var _chainedTweens = [];\n var _onStartCallback = null;\n var _onStartCallbackFired = false;\n var _onUpdateCallback = null;\n var _onCompleteCallback = null;\n var _onStopCallback = null;\n\n this.to = function (properties, duration) {\n\n _valuesEnd = properties;\n\n if (duration !== undefined) {\n _duration = duration;\n }\n\n return this;\n };\n\n this.start = function (time) {\n\n TWEEN.add(this);\n\n _isPlaying = true;\n\n _onStartCallbackFired = false;\n\n _startTime = time !== undefined ? time : TWEEN.now();\n _startTime += _delayTime;\n\n for (var property in _valuesEnd) {\n\n // Check if an Array was provided as property value\n if (_valuesEnd[property] instanceof Array) {\n\n if (_valuesEnd[property].length === 0) {\n continue;\n }\n\n // Create a local copy of the Array with the start value at the front\n _valuesEnd[property] = [_object[property]].concat(_valuesEnd[property]);\n }\n\n // If `to()` specifies a property that doesn't exist in the source object,\n // we should not set that property in the object\n if (_object[property] === undefined) {\n continue;\n }\n\n // Save the starting value.\n _valuesStart[property] = _object[property];\n\n if (_valuesStart[property] instanceof Array === false) {\n _valuesStart[property] *= 1.0; // Ensures we're using numbers, not strings\n }\n\n _valuesStartRepeat[property] = _valuesStart[property] || 0;\n }\n\n return this;\n };\n\n this.stop = function () {\n\n if (!_isPlaying) {\n return this;\n }\n\n TWEEN.remove(this);\n _isPlaying = false;\n\n if (_onStopCallback !== null) {\n _onStopCallback.call(_object, _object);\n }\n\n this.stopChainedTweens();\n return this;\n };\n\n this.end = function () {\n\n this.update(_startTime + _duration);\n return this;\n };\n\n this.stopChainedTweens = function () {\n\n for (var i = 0, numChainedTweens = _chainedTweens.length; i < numChainedTweens; i++) {\n _chainedTweens[i].stop();\n }\n };\n\n this.delay = function (amount) {\n\n _delayTime = amount;\n return this;\n };\n\n this.repeat = function (times) {\n\n _repeat = times;\n return this;\n };\n\n this.repeatDelay = function (amount) {\n\n _repeatDelayTime = amount;\n return this;\n };\n\n this.yoyo = function (yoyo) {\n\n _yoyo = yoyo;\n return this;\n };\n\n this.easing = function (easing) {\n\n _easingFunction = easing;\n return this;\n };\n\n this.interpolation = function (interpolation) {\n\n _interpolationFunction = interpolation;\n return this;\n };\n\n this.chain = function () {\n\n _chainedTweens = arguments;\n return this;\n };\n\n this.onStart = function (callback) {\n\n _onStartCallback = callback;\n return this;\n };\n\n this.onUpdate = function (callback) {\n\n _onUpdateCallback = callback;\n return this;\n };\n\n this.onComplete = function (callback) {\n\n _onCompleteCallback = callback;\n return this;\n };\n\n this.onStop = function (callback) {\n\n _onStopCallback = callback;\n return this;\n };\n\n this.update = function (time) {\n\n var property;\n var elapsed;\n var value;\n\n if (time < _startTime) {\n return true;\n }\n\n if (_onStartCallbackFired === false) {\n\n if (_onStartCallback !== null) {\n _onStartCallback.call(_object, _object);\n }\n\n _onStartCallbackFired = true;\n }\n\n elapsed = (time - _startTime) / _duration;\n elapsed = elapsed > 1 ? 1 : elapsed;\n\n value = _easingFunction(elapsed);\n\n for (property in _valuesEnd) {\n\n // Don't update properties that do not exist in the source object\n if (_valuesStart[property] === undefined) {\n continue;\n }\n\n var start = _valuesStart[property] || 0;\n var end = _valuesEnd[property];\n\n if (end instanceof Array) {\n\n _object[property] = _interpolationFunction(end, value);\n } else {\n\n // Parses relative end values with start as base (e.g.: +10, -3)\n if (typeof end === 'string') {\n\n if (end.charAt(0) === '+' || end.charAt(0) === '-') {\n end = start + parseFloat(end);\n } else {\n end = parseFloat(end);\n }\n }\n\n // Protect against non numeric properties.\n if (typeof end === 'number') {\n _object[property] = start + (end - start) * value;\n }\n }\n }\n\n if (_onUpdateCallback !== null) {\n _onUpdateCallback.call(_object, value);\n }\n\n if (elapsed === 1) {\n\n if (_repeat > 0) {\n\n if (isFinite(_repeat)) {\n _repeat--;\n }\n\n // Reassign starting values, restart by making startTime = now\n for (property in _valuesStartRepeat) {\n\n if (typeof _valuesEnd[property] === 'string') {\n _valuesStartRepeat[property] = _valuesStartRepeat[property] + parseFloat(_valuesEnd[property]);\n }\n\n if (_yoyo) {\n var tmp = _valuesStartRepeat[property];\n\n _valuesStartRepeat[property] = _valuesEnd[property];\n _valuesEnd[property] = tmp;\n }\n\n _valuesStart[property] = _valuesStartRepeat[property];\n }\n\n if (_yoyo) {\n _reversed = !_reversed;\n }\n\n if (_repeatDelayTime !== undefined) {\n _startTime = time + _repeatDelayTime;\n } else {\n _startTime = time + _delayTime;\n }\n\n return true;\n } else {\n\n if (_onCompleteCallback !== null) {\n\n _onCompleteCallback.call(_object, _object);\n }\n\n for (var i = 0, numChainedTweens = _chainedTweens.length; i < numChainedTweens; i++) {\n // Make the chained tweens start exactly at the time they should,\n // even if the `update()` method was called way past the duration of the tween\n _chainedTweens[i].start(_startTime + _duration);\n }\n\n return false;\n }\n }\n\n return true;\n };\n};\n\nTWEEN.Easing = {\n\n Linear: {\n\n None: function None(k) {\n\n return k;\n }\n\n },\n\n Quadratic: {\n\n In: function In(k) {\n\n return k * k;\n },\n\n Out: function Out(k) {\n\n return k * (2 - k);\n },\n\n InOut: function InOut(k) {\n\n if ((k *= 2) < 1) {\n return 0.5 * k * k;\n }\n\n return -0.5 * (--k * (k - 2) - 1);\n }\n\n },\n\n Cubic: {\n\n In: function In(k) {\n\n return k * k * k;\n },\n\n Out: function Out(k) {\n\n return --k * k * k + 1;\n },\n\n InOut: function InOut(k) {\n\n if ((k *= 2) < 1) {\n return 0.5 * k * k * k;\n }\n\n return 0.5 * ((k -= 2) * k * k + 2);\n }\n\n },\n\n Quartic: {\n\n In: function In(k) {\n\n return k * k * k * k;\n },\n\n Out: function Out(k) {\n\n return 1 - --k * k * k * k;\n },\n\n InOut: function InOut(k) {\n\n if ((k *= 2) < 1) {\n return 0.5 * k * k * k * k;\n }\n\n return -0.5 * ((k -= 2) * k * k * k - 2);\n }\n\n },\n\n Quintic: {\n\n In: function In(k) {\n\n return k * k * k * k * k;\n },\n\n Out: function Out(k) {\n\n return --k * k * k * k * k + 1;\n },\n\n InOut: function InOut(k) {\n\n if ((k *= 2) < 1) {\n return 0.5 * k * k * k * k * k;\n }\n\n return 0.5 * ((k -= 2) * k * k * k * k + 2);\n }\n\n },\n\n Sinusoidal: {\n\n In: function In(k) {\n\n return 1 - Math.cos(k * Math.PI / 2);\n },\n\n Out: function Out(k) {\n\n return Math.sin(k * Math.PI / 2);\n },\n\n InOut: function InOut(k) {\n\n return 0.5 * (1 - Math.cos(Math.PI * k));\n }\n\n },\n\n Exponential: {\n\n In: function In(k) {\n\n return k === 0 ? 0 : Math.pow(1024, k - 1);\n },\n\n Out: function Out(k) {\n\n return k === 1 ? 1 : 1 - Math.pow(2, -10 * k);\n },\n\n InOut: function InOut(k) {\n\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n if ((k *= 2) < 1) {\n return 0.5 * Math.pow(1024, k - 1);\n }\n\n return 0.5 * (-Math.pow(2, -10 * (k - 1)) + 2);\n }\n\n },\n\n Circular: {\n\n In: function In(k) {\n\n return 1 - Math.sqrt(1 - k * k);\n },\n\n Out: function Out(k) {\n\n return Math.sqrt(1 - --k * k);\n },\n\n InOut: function InOut(k) {\n\n if ((k *= 2) < 1) {\n return -0.5 * (Math.sqrt(1 - k * k) - 1);\n }\n\n return 0.5 * (Math.sqrt(1 - (k -= 2) * k) + 1);\n }\n\n },\n\n Elastic: {\n\n In: function In(k) {\n\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n return -Math.pow(2, 10 * (k - 1)) * Math.sin((k - 1.1) * 5 * Math.PI);\n },\n\n Out: function Out(k) {\n\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n return Math.pow(2, -10 * k) * Math.sin((k - 0.1) * 5 * Math.PI) + 1;\n },\n\n InOut: function InOut(k) {\n\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n k *= 2;\n\n if (k < 1) {\n return -0.5 * Math.pow(2, 10 * (k - 1)) * Math.sin((k - 1.1) * 5 * Math.PI);\n }\n\n return 0.5 * Math.pow(2, -10 * (k - 1)) * Math.sin((k - 1.1) * 5 * Math.PI) + 1;\n }\n\n },\n\n Back: {\n\n In: function In(k) {\n\n var s = 1.70158;\n\n return k * k * ((s + 1) * k - s);\n },\n\n Out: function Out(k) {\n\n var s = 1.70158;\n\n return --k * k * ((s + 1) * k + s) + 1;\n },\n\n InOut: function InOut(k) {\n\n var s = 1.70158 * 1.525;\n\n if ((k *= 2) < 1) {\n return 0.5 * (k * k * ((s + 1) * k - s));\n }\n\n return 0.5 * ((k -= 2) * k * ((s + 1) * k + s) + 2);\n }\n\n },\n\n Bounce: {\n\n In: function In(k) {\n\n return 1 - TWEEN.Easing.Bounce.Out(1 - k);\n },\n\n Out: function Out(k) {\n\n if (k < 1 / 2.75) {\n return 7.5625 * k * k;\n } else if (k < 2 / 2.75) {\n return 7.5625 * (k -= 1.5 / 2.75) * k + 0.75;\n } else if (k < 2.5 / 2.75) {\n return 7.5625 * (k -= 2.25 / 2.75) * k + 0.9375;\n } else {\n return 7.5625 * (k -= 2.625 / 2.75) * k + 0.984375;\n }\n },\n\n InOut: function InOut(k) {\n\n if (k < 0.5) {\n return TWEEN.Easing.Bounce.In(k * 2) * 0.5;\n }\n\n return TWEEN.Easing.Bounce.Out(k * 2 - 1) * 0.5 + 0.5;\n }\n\n }\n\n};\n\nTWEEN.Interpolation = {\n\n Linear: function Linear(v, k) {\n\n var m = v.length - 1;\n var f = m * k;\n var i = Math.floor(f);\n var fn = TWEEN.Interpolation.Utils.Linear;\n\n if (k < 0) {\n return fn(v[0], v[1], f);\n }\n\n if (k > 1) {\n return fn(v[m], v[m - 1], m - f);\n }\n\n return fn(v[i], v[i + 1 > m ? m : i + 1], f - i);\n },\n\n Bezier: function Bezier(v, k) {\n\n var b = 0;\n var n = v.length - 1;\n var pw = Math.pow;\n var bn = TWEEN.Interpolation.Utils.Bernstein;\n\n for (var i = 0; i <= n; i++) {\n b += pw(1 - k, n - i) * pw(k, i) * v[i] * bn(n, i);\n }\n\n return b;\n },\n\n CatmullRom: function CatmullRom(v, k) {\n\n var m = v.length - 1;\n var f = m * k;\n var i = Math.floor(f);\n var fn = TWEEN.Interpolation.Utils.CatmullRom;\n\n if (v[0] === v[m]) {\n\n if (k < 0) {\n i = Math.floor(f = m * (1 + k));\n }\n\n return fn(v[(i - 1 + m) % m], v[i], v[(i + 1) % m], v[(i + 2) % m], f - i);\n } else {\n\n if (k < 0) {\n return v[0] - (fn(v[0], v[0], v[1], v[1], -f) - v[0]);\n }\n\n if (k > 1) {\n return v[m] - (fn(v[m], v[m], v[m - 1], v[m - 1], f - m) - v[m]);\n }\n\n return fn(v[i ? i - 1 : 0], v[i], v[m < i + 1 ? m : i + 1], v[m < i + 2 ? m : i + 2], f - i);\n }\n },\n\n Utils: {\n\n Linear: function Linear(p0, p1, t) {\n\n return (p1 - p0) * t + p0;\n },\n\n Bernstein: function Bernstein(n, i) {\n\n var fc = TWEEN.Interpolation.Utils.Factorial;\n\n return fc(n) / fc(i) / fc(n - i);\n },\n\n Factorial: function () {\n\n var a = [1];\n\n return function (n) {\n\n var s = 1;\n\n if (a[n]) {\n return a[n];\n }\n\n for (var i = n; i > 1; i--) {\n s *= i;\n }\n\n a[n] = s;\n return s;\n };\n }(),\n\n CatmullRom: function CatmullRom(p0, p1, p2, p3, t) {\n\n var v0 = (p2 - p0) * 0.5;\n var v1 = (p3 - p1) * 0.5;\n var t2 = t * t;\n var t3 = t * t2;\n\n return (2 * p1 - 2 * p2 + v0 + v1) * t3 + (-3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1;\n }\n\n }\n\n};\n\n/**\n * 根据2点获取角度\n * @param Array [123, 23] 点1\n * @param Array [123, 23] 点2\n * @return angle 角度,不是弧度\n */\nfunction getAngle(start, end) {\n var diff_x = end[0] - start[0];\n var diff_y = end[1] - start[1];\n var deg = 360 * Math.atan(diff_y / diff_x) / (2 * Math.PI);\n if (end[0] < start[0]) {\n deg = deg + 180;\n }\n return deg;\n}\n\n/**\n * 绘制沿线箭头\n * @author kyle / http://nikai.us/\n */\n\nvar imageCache = {};\n\nvar object = {\n draw: function draw(context, dataSet, options) {\n var imageCacheKey = 'http://huiyan.baidu.com/github/tools/gis-drawing/static/images/direction.png';\n if (options.arrow && options.arrow.url) {\n imageCacheKey = options.arrow.url;\n }\n\n if (!imageCache[imageCacheKey]) {\n imageCache[imageCacheKey] = null;\n }\n\n var directionImage = imageCache[imageCacheKey];\n\n if (!directionImage) {\n var args = Array.prototype.slice.call(arguments);\n var image = new Image();\n image.onload = function () {\n imageCache[imageCacheKey] = image;\n object.draw.apply(null, args);\n };\n image.src = imageCacheKey;\n return;\n }\n\n var data = dataSet instanceof DataSet ? dataSet.get() : dataSet;\n\n // console.log('xxxx',options)\n context.save();\n\n for (var key in options) {\n context[key] = options[key];\n }\n\n var points = [];\n var preCoordinate = null;\n for (var i = 0, len = data.length; i < len; i++) {\n\n var item = data[i];\n\n context.save();\n\n if (item.fillStyle || item._fillStyle) {\n context.fillStyle = item.fillStyle || item._fillStyle;\n }\n\n if (item.strokeStyle || item._strokeStyle) {\n context.strokeStyle = item.strokeStyle || item._strokeStyle;\n }\n\n var type = item.geometry.type;\n\n context.beginPath();\n if (type === 'LineString') {\n var coordinates = item.geometry._coordinates || item.geometry.coordinates;\n var interval = options.arrow.interval !== undefined ? options.arrow.interval : 1;\n for (var j = 0; j < coordinates.length; j += interval) {\n if (coordinates[j] && coordinates[j + 1]) {\n var coordinate = coordinates[j];\n\n if (preCoordinate && getDistance(coordinate, preCoordinate) < 30) {\n continue;\n }\n\n context.save();\n var angle = getAngle(coordinates[j], coordinates[j + 1]);\n context.translate(coordinate[0], coordinate[1]);\n context.rotate(angle * Math.PI / 180);\n context.drawImage(directionImage, -directionImage.width / 2 / 2, -directionImage.height / 2 / 2, directionImage.width / 2, directionImage.height / 2);\n context.restore();\n\n points.push(coordinate);\n preCoordinate = coordinate;\n }\n }\n }\n\n context.restore();\n }\n\n context.restore();\n }\n};\n\nfunction getDistance(coordinateA, coordinateB) {\n return Math.sqrt(Math.pow(coordinateA[0] - coordinateB[0], 2) + Math.pow(coordinateA[1] - coordinateB[1], 2));\n}\n\n/**\n * @author Mofei Zhu\n * This file is to draw text\n */\n\nvar drawClip = {\n draw: function draw(context, dataSet, options) {\n var data = dataSet instanceof DataSet ? dataSet.get() : dataSet;\n context.save();\n\n context.fillStyle = options.fillStyle || 'rgba(0, 0, 0, 0.5)';\n context.fillRect(0, 0, context.canvas.width, context.canvas.height);\n\n options.multiPolygonDraw = function () {\n context.save();\n context.clip();\n clear(context);\n context.restore();\n };\n\n for (var i = 0, len = data.length; i < len; i++) {\n\n context.beginPath();\n\n pathSimple.drawDataSet(context, [data[i]], options);\n context.save();\n context.clip();\n clear(context);\n context.restore();\n }\n\n context.restore();\n }\n};\n\n/**\n * @author kyle / http://nikai.us/\n */\n\nvar drawCluster = {\n draw: function draw(context, dataSet, options) {\n context.save();\n var data = dataSet instanceof DataSet ? dataSet.get() : dataSet;\n\n var pointCountMax;\n var pointCountMin;\n for (var i = 0; i < data.length; i++) {\n var item = data[i];\n if (item.properties && item.properties.cluster) {\n if (pointCountMax === undefined) {\n pointCountMax = item.properties.point_count;\n }\n if (pointCountMin === undefined) {\n pointCountMin = item.properties.point_count;\n }\n pointCountMax = Math.max(pointCountMax, item.properties.point_count);\n pointCountMin = Math.min(pointCountMin, item.properties.point_count);\n }\n }\n\n var intensity = new Intensity({\n min: pointCountMin,\n max: pointCountMax,\n minSize: options.minSize || 8,\n maxSize: options.maxSize || 30,\n gradient: options.gradient\n });\n\n for (var i = 0; i < data.length; i++) {\n var item = data[i];\n var coordinates = data[i].geometry._coordinates || data[i].geometry.coordinates;\n context.beginPath();\n if (item.properties && item.properties.cluster) {\n context.arc(coordinates[0], coordinates[1], intensity.getSize(item.properties.point_count), 0, Math.PI * 2);\n context.fillStyle = intensity.getColor(item.properties.point_count);\n context.fill();\n\n if (options.label && options.label.show !== false) {\n\n context.fillStyle = options.label.fillStyle || 'white';\n\n if (options.label.font) {\n context.font = options.label.font;\n }\n\n if (options.label.shadowColor) {\n context.shadowColor = options.label.shadowColor;\n }\n\n if (options.label.shadowBlur) {\n context.shadowBlur = options.label.shadowBlur;\n }\n\n var text = item.properties.point_count;\n var textWidth = context.measureText(text).width;\n context.fillText(text, coordinates[0] + .5 - textWidth / 2, coordinates[1] + .5 + 3);\n }\n } else {\n context.arc(coordinates[0], coordinates[1], options.size || 5, 0, Math.PI * 2);\n context.fillStyle = options.fillStyle || 'red';\n context.fill();\n }\n }\n context.restore();\n }\n};\n\n/**\n * @author Mofei Zhu\n * This file is to draw text\n */\n\nvar drawText = {\n draw: function draw(context, dataSet, options) {\n\n var data = dataSet instanceof DataSet ? dataSet.get() : dataSet;\n context.save();\n\n // set from options\n for (var key in options) {\n context[key] = options[key];\n }\n\n var rects = [];\n\n var size = options._size || options.size;\n if (size) {\n context.font = \"bold \" + size + \"px Arial\";\n } else {\n size = 12;\n }\n\n var textKey = options.textKey || 'text';\n\n if (!options.textAlign) {\n context.textAlign = 'center';\n }\n\n if (!options.textBaseline) {\n context.textBaseline = 'middle';\n }\n\n if (options.avoid) {\n // 标注避让\n for (var i = 0, len = data.length; i < len; i++) {\n\n var offset = data[i].offset || options.offset || {\n x: 0,\n y: 0\n };\n\n var coordinates = data[i].geometry._coordinates || data[i].geometry.coordinates;\n var x = coordinates[0] + offset.x;\n var y = coordinates[1] + offset.y;\n var text = data[i][textKey];\n var textWidth = context.measureText(text).width;\n\n // 根据文本宽度和高度调整x,y位置,使得绘制文本时候坐标点在文本中心点,这个计算出的是左上角坐标\n var px = x - textWidth / 2;\n var py = y - size / 2;\n\n var rect = {\n sw: {\n x: px,\n y: py + size\n },\n ne: {\n x: px + textWidth,\n y: py\n }\n };\n\n if (!hasOverlay(rects, rect)) {\n rects.push(rect);\n px = px + textWidth / 2;\n py = py + size / 2;\n context.fillText(text, px, py);\n }\n }\n } else {\n for (var i = 0, len = data.length; i < len; i++) {\n var offset = data[i].offset || options.offset || {\n x: 0,\n y: 0\n };\n var coordinates = data[i].geometry._coordinates || data[i].geometry.coordinates;\n var x = coordinates[0] + offset.x;\n var y = coordinates[1] + offset.y;\n var text = data[i][textKey];\n context.fillText(text, x, y);\n }\n }\n\n context.restore();\n }\n\n /*\n * 当前文字区域和已有的文字区域是否有重叠部分\n */\n};function hasOverlay(rects, overlay) {\n for (var i = 0; i < rects.length; i++) {\n if (isRectOverlay(rects[i], overlay)) {\n return true;\n }\n }\n return false;\n}\n\n//判断2个矩形是否有重叠部分\nfunction isRectOverlay(rect1, rect2) {\n //minx、miny 2个矩形右下角最小的x和y\n //maxx、maxy 2个矩形左上角最大的x和y\n var minx = Math.min(rect1.ne.x, rect2.ne.x);\n var miny = Math.min(rect1.sw.y, rect2.sw.y);\n var maxx = Math.max(rect1.sw.x, rect2.sw.x);\n var maxy = Math.max(rect1.ne.y, rect2.ne.y);\n if (minx > maxx && miny > maxy) {\n return true;\n }\n return false;\n}\n\n/**\n * @author Mofei Zhu\n * This file is to draw text\n */\n\nvar drawIcon = {\n draw: function draw(context, dataSet, options) {\n var data = dataSet instanceof DataSet ? dataSet.get() : dataSet;\n\n context.fillStyle = 'white';\n context.textAlign = 'center';\n context.textBaseline = 'middle';\n\n var offset = options.offset || {\n x: 0,\n y: 0\n };\n\n // set from options\n // for (var key in options) {\n // context[key] = options[key];\n // }\n // console.log(data)\n for (var i = 0, len = data.length; i < len; i++) {\n\n if (data[i].geometry) {\n var deg = data[i].deg || options.deg;\n var icon = data[i].icon || options.icon;\n var coordinates = data[i].geometry._coordinates || data[i].geometry.coordinates;\n var x = coordinates[0];\n var y = coordinates[1];\n if (deg) {\n context.save();\n context.translate(x, y);\n context.rotate(deg * Math.PI / 180);\n context.translate(-x, -y);\n }\n var width = options._width || options.width || icon.width;\n var height = options._height || options.height || icon.height;\n x = x - width / 2 + offset.x;\n y = y - height / 2 + offset.y;\n if (options.sx && options.sy && options.swidth && options.sheight && options.width && options.height) {\n context.drawImage(icon, options.sx, options.sy, options.swidth, options.sheight, x, y, width, height);\n } else if (options.width && options.height) {\n context.drawImage(icon, x, y, width, height);\n } else {\n context.drawImage(icon, x, y);\n }\n\n if (deg) {\n context.restore();\n }\n }\n }\n }\n};\n\n/**\n * from https://github.com/mapbox/supercluster\n */\n\nfunction sortKD(ids, coords, nodeSize, left, right, depth) {\n if (right - left <= nodeSize) {\n return;\n }\n\n var m = left + right >> 1;\n\n select(ids, coords, m, left, right, depth % 2);\n\n sortKD(ids, coords, nodeSize, left, m - 1, depth + 1);\n sortKD(ids, coords, nodeSize, m + 1, right, depth + 1);\n}\n\nfunction select(ids, coords, k, left, right, inc) {\n\n while (right > left) {\n if (right - left > 600) {\n var n = right - left + 1;\n var m = k - left + 1;\n var z = Math.log(n);\n var s = 0.5 * Math.exp(2 * z / 3);\n var sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n var newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n var newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n select(ids, coords, k, newLeft, newRight, inc);\n }\n\n var t = coords[2 * k + inc];\n var i = left;\n var j = right;\n\n swapItem(ids, coords, left, k);\n if (coords[2 * right + inc] > t) {\n swapItem(ids, coords, left, right);\n }\n\n while (i < j) {\n swapItem(ids, coords, i, j);\n i++;\n j--;\n while (coords[2 * i + inc] < t) {\n i++;\n }\n while (coords[2 * j + inc] > t) {\n j--;\n }\n }\n\n if (coords[2 * left + inc] === t) {\n swapItem(ids, coords, left, j);\n } else {\n j++;\n swapItem(ids, coords, j, right);\n }\n\n if (j <= k) {\n left = j + 1;\n }\n if (k <= j) {\n right = j - 1;\n }\n }\n}\n\nfunction swapItem(ids, coords, i, j) {\n swap(ids, i, j);\n swap(coords, 2 * i, 2 * j);\n swap(coords, 2 * i + 1, 2 * j + 1);\n}\n\nfunction swap(arr, i, j) {\n var tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n}\n\nfunction range(ids, coords, minX, minY, maxX, maxY, nodeSize) {\n var stack = [0, ids.length - 1, 0];\n var result = [];\n var x, y;\n\n while (stack.length) {\n var axis = stack.pop();\n var right = stack.pop();\n var left = stack.pop();\n\n if (right - left <= nodeSize) {\n for (var i = left; i <= right; i++) {\n x = coords[2 * i];\n y = coords[2 * i + 1];\n if (x >= minX && x <= maxX && y >= minY && y <= maxY) {\n result.push(ids[i]);\n }\n }\n continue;\n }\n\n var m = Math.floor((left + right) / 2);\n\n x = coords[2 * m];\n y = coords[2 * m + 1];\n\n if (x >= minX && x <= maxX && y >= minY && y <= maxY) {\n result.push(ids[m]);\n }\n\n var nextAxis = (axis + 1) % 2;\n\n if (axis === 0 ? minX <= x : minY <= y) {\n stack.push(left);\n stack.push(m - 1);\n stack.push(nextAxis);\n }\n if (axis === 0 ? maxX >= x : maxY >= y) {\n stack.push(m + 1);\n stack.push(right);\n stack.push(nextAxis);\n }\n }\n\n return result;\n}\n\nfunction within(ids, coords, qx, qy, r, nodeSize) {\n var stack = [0, ids.length - 1, 0];\n var result = [];\n var r2 = r * r;\n\n while (stack.length) {\n var axis = stack.pop();\n var right = stack.pop();\n var left = stack.pop();\n\n if (right - left <= nodeSize) {\n for (var i = left; i <= right; i++) {\n if (sqDist(coords[2 * i], coords[2 * i + 1], qx, qy) <= r2) {\n result.push(ids[i]);\n }\n }\n continue;\n }\n\n var m = Math.floor((left + right) / 2);\n\n var x = coords[2 * m];\n var y = coords[2 * m + 1];\n\n if (sqDist(x, y, qx, qy) <= r2) {\n result.push(ids[m]);\n }\n\n var nextAxis = (axis + 1) % 2;\n\n if (axis === 0 ? qx - r <= x : qy - r <= y) {\n stack.push(left);\n stack.push(m - 1);\n stack.push(nextAxis);\n }\n if (axis === 0 ? qx + r >= x : qy + r >= y) {\n stack.push(m + 1);\n stack.push(right);\n stack.push(nextAxis);\n }\n }\n\n return result;\n}\n\nfunction sqDist(ax, ay, bx, by) {\n var dx = ax - bx;\n var dy = ay - by;\n return dx * dx + dy * dy;\n}\n\nvar defaultGetX = function defaultGetX(p) {\n return p[0];\n};\nvar defaultGetY = function defaultGetY(p) {\n return p[1];\n};\n\nvar KDBush = function KDBush(points, getX, getY, nodeSize, ArrayType) {\n if (getX === void 0) getX = defaultGetX;\n if (getY === void 0) getY = defaultGetY;\n if (nodeSize === void 0) nodeSize = 64;\n if (ArrayType === void 0) ArrayType = Float64Array;\n\n this.nodeSize = nodeSize;\n this.points = points;\n\n var IndexArrayType = points.length < 65536 ? Uint16Array : Uint32Array;\n\n var ids = this.ids = new IndexArrayType(points.length);\n var coords = this.coords = new ArrayType(points.length * 2);\n\n for (var i = 0; i < points.length; i++) {\n ids[i] = i;\n coords[2 * i] = getX(points[i]);\n coords[2 * i + 1] = getY(points[i]);\n }\n\n sortKD(ids, coords, nodeSize, 0, ids.length - 1, 0);\n};\n\nKDBush.prototype.range = function range$1(minX, minY, maxX, maxY) {\n return range(this.ids, this.coords, minX, minY, maxX, maxY, this.nodeSize);\n};\n\nKDBush.prototype.within = function within$1(x, y, r) {\n return within(this.ids, this.coords, x, y, r, this.nodeSize);\n};\n\nvar defaultOptions = {\n minZoom: 0, // min zoom to generate clusters on\n maxZoom: 16, // max zoom level to cluster the points on\n radius: 40, // cluster radius in pixels\n extent: 512, // tile extent (radius is calculated relative to it)\n nodeSize: 64, // size of the KD-tree leaf node, affects performance\n log: false, // whether to log timing info\n\n // a reduce function for calculating custom cluster properties\n reduce: null, // (accumulated, props) => { accumulated.sum += props.sum; }\n\n // properties to use for individual points when running the reducer\n map: function map(props) {\n return props;\n } // props => ({sum: props.my_value})\n};\n\nvar Supercluster = function Supercluster(options) {\n this.options = extend(Object.create(defaultOptions), options);\n this.trees = new Array(this.options.maxZoom + 1);\n};\n\nSupercluster.prototype.load = function load(points) {\n var ref = this.options;\n var log = ref.log;\n var minZoom = ref.minZoom;\n var maxZoom = ref.maxZoom;\n var nodeSize = ref.nodeSize;\n\n if (log) {}\n\n var timerId = \"prepare \" + points.length + \" points\";\n if (log) {}\n\n this.points = points;\n\n // generate a cluster object for each point and index input points into a KD-tree\n var clusters = [];\n for (var i = 0; i < points.length; i++) {\n if (!points[i].geometry) {\n continue;\n }\n clusters.push(createPointCluster(points[i], i));\n }\n this.trees[maxZoom + 1] = new KDBush(clusters, getX, getY, nodeSize, Float32Array);\n\n if (log) {}\n\n // cluster points on max zoom, then cluster the results on previous zoom, etc.;\n // results in a cluster hierarchy across zoom levels\n for (var z = maxZoom; z >= minZoom; z--) {\n var now = +Date.now();\n\n // create a new set of clusters for the zoom and index them with a KD-tree\n clusters = this._cluster(clusters, z);\n this.trees[z] = new KDBush(clusters, getX, getY, nodeSize, Float32Array);\n\n if (log) {}\n }\n\n if (log) {}\n\n return this;\n};\n\nSupercluster.prototype.getClusters = function getClusters(bbox, zoom) {\n var minLng = ((bbox[0] + 180) % 360 + 360) % 360 - 180;\n var minLat = Math.max(-90, Math.min(90, bbox[1]));\n var maxLng = bbox[2] === 180 ? 180 : ((bbox[2] + 180) % 360 + 360) % 360 - 180;\n var maxLat = Math.max(-90, Math.min(90, bbox[3]));\n\n if (bbox[2] - bbox[0] >= 360) {\n minLng = -180;\n maxLng = 180;\n } else if (minLng > maxLng) {\n var easternHem = this.getClusters([minLng, minLat, 180, maxLat], zoom);\n var westernHem = this.getClusters([-180, minLat, maxLng, maxLat], zoom);\n return easternHem.concat(westernHem);\n }\n\n var tree = this.trees[this._limitZoom(zoom)];\n var ids = tree.range(lngX(minLng), latY(maxLat), lngX(maxLng), latY(minLat));\n var clusters = [];\n for (var i = 0, list = ids; i < list.length; i += 1) {\n var id = list[i];\n\n var c = tree.points[id];\n clusters.push(c.numPoints ? getClusterJSON(c) : this.points[c.index]);\n }\n return clusters;\n};\n\nSupercluster.prototype.getChildren = function getChildren(clusterId) {\n var originId = clusterId >> 5;\n var originZoom = clusterId % 32;\n var errorMsg = 'No cluster with the specified id.';\n\n var index = this.trees[originZoom];\n if (!index) {\n throw new Error(errorMsg);\n }\n\n var origin = index.points[originId];\n if (!origin) {\n throw new Error(errorMsg);\n }\n\n var r = this.options.radius / (this.options.extent * Math.pow(2, originZoom - 1));\n var ids = index.within(origin.x, origin.y, r);\n var children = [];\n for (var i = 0, list = ids; i < list.length; i += 1) {\n var id = list[i];\n\n var c = index.points[id];\n if (c.parentId === clusterId) {\n children.push(c.numPoints ? getClusterJSON(c) : this.points[c.index]);\n }\n }\n\n if (children.length === 0) {\n throw new Error(errorMsg);\n }\n\n return children;\n};\n\nSupercluster.prototype.getLeaves = function getLeaves(clusterId, limit, offset) {\n limit = limit || 10;\n offset = offset || 0;\n\n var leaves = [];\n this._appendLeaves(leaves, clusterId, limit, offset, 0);\n\n return leaves;\n};\n\nSupercluster.prototype.getTile = function getTile(z, x, y) {\n var tree = this.trees[this._limitZoom(z)];\n var z2 = Math.pow(2, z);\n var ref = this.options;\n var extent = ref.extent;\n var radius = ref.radius;\n var p = radius / extent;\n var top = (y - p) / z2;\n var bottom = (y + 1 + p) / z2;\n\n var tile = {\n features: []\n };\n\n this._addTileFeatures(tree.range((x - p) / z2, top, (x + 1 + p) / z2, bottom), tree.points, x, y, z2, tile);\n\n if (x === 0) {\n this._addTileFeatures(tree.range(1 - p / z2, top, 1, bottom), tree.points, z2, y, z2, tile);\n }\n if (x === z2 - 1) {\n this._addTileFeatures(tree.range(0, top, p / z2, bottom), tree.points, -1, y, z2, tile);\n }\n\n return tile.features.length ? tile : null;\n};\n\nSupercluster.prototype.getClusterExpansionZoom = function getClusterExpansionZoom(clusterId) {\n var clusterZoom = clusterId % 32 - 1;\n while (clusterZoom <= this.options.maxZoom) {\n var children = this.getChildren(clusterId);\n clusterZoom++;\n if (children.length !== 1) {\n break;\n }\n clusterId = children[0].properties.cluster_id;\n }\n return clusterZoom;\n};\n\nSupercluster.prototype._appendLeaves = function _appendLeaves(result, clusterId, limit, offset, skipped) {\n var children = this.getChildren(clusterId);\n\n for (var i = 0, list = children; i < list.length; i += 1) {\n var child = list[i];\n\n var props = child.properties;\n\n if (props && props.cluster) {\n if (skipped + props.point_count <= offset) {\n // skip the whole cluster\n skipped += props.point_count;\n } else {\n // enter the cluster\n skipped = this._appendLeaves(result, props.cluster_id, limit, offset, skipped);\n // exit the cluster\n }\n } else if (skipped < offset) {\n // skip a single point\n skipped++;\n } else {\n // add a single point\n result.push(child);\n }\n if (result.length === limit) {\n break;\n }\n }\n\n return skipped;\n};\n\nSupercluster.prototype._addTileFeatures = function _addTileFeatures(ids, points, x, y, z2, tile) {\n for (var i$1 = 0, list = ids; i$1 < list.length; i$1 += 1) {\n var i = list[i$1];\n\n var c = points[i];\n var f = {\n type: 1,\n geometry: [[Math.round(this.options.extent * (c.x * z2 - x)), Math.round(this.options.extent * (c.y * z2 - y))]],\n tags: c.numPoints ? getClusterProperties(c) : this.points[c.index].properties\n };\n var id = c.numPoints ? c.id : this.points[c.index].id;\n if (id !== undefined) {\n f.id = id;\n }\n tile.features.push(f);\n }\n};\n\nSupercluster.prototype._limitZoom = function _limitZoom(z) {\n return Math.max(this.options.minZoom, Math.min(z, this.options.maxZoom + 1));\n};\n\nSupercluster.prototype._cluster = function _cluster(points, zoom) {\n var clusters = [];\n var ref = this.options;\n var radius = ref.radius;\n var extent = ref.extent;\n var reduce = ref.reduce;\n var r = radius / (extent * Math.pow(2, zoom));\n\n // loop through each point\n for (var i = 0; i < points.length; i++) {\n var p = points[i];\n // if we've already visited the point at this zoom level, skip it\n if (p.zoom <= zoom) {\n continue;\n }\n p.zoom = zoom;\n\n // find all nearby points\n var tree = this.trees[zoom + 1];\n var neighborIds = tree.within(p.x, p.y, r);\n\n var numPoints = p.numPoints || 1;\n var wx = p.x * numPoints;\n var wy = p.y * numPoints;\n\n var clusterProperties = reduce && numPoints > 1 ? this._map(p, true) : null;\n\n // encode both zoom and point index on which the cluster originated\n var id = (i << 5) + (zoom + 1);\n\n for (var i$1 = 0, list = neighborIds; i$1 < list.length; i$1 += 1) {\n var neighborId = list[i$1];\n\n var b = tree.points[neighborId];\n // filter out neighbors that are already processed\n if (b.zoom <= zoom) {\n continue;\n }\n b.zoom = zoom; // save the zoom (so it doesn't get processed twice)\n\n var numPoints2 = b.numPoints || 1;\n wx += b.x * numPoints2; // accumulate coordinates for calculating weighted center\n wy += b.y * numPoints2;\n\n numPoints += numPoints2;\n b.parentId = id;\n\n if (reduce) {\n if (!clusterProperties) {\n clusterProperties = this._map(p, true);\n }\n reduce(clusterProperties, this._map(b));\n }\n }\n\n if (numPoints === 1) {\n clusters.push(p);\n } else {\n p.parentId = id;\n clusters.push(createCluster(wx / numPoints, wy / numPoints, id, numPoints, clusterProperties));\n }\n }\n\n return clusters;\n};\n\nSupercluster.prototype._map = function _map(point, clone) {\n if (point.numPoints) {\n return clone ? extend({}, point.properties) : point.properties;\n }\n var original = this.points[point.index].properties;\n var result = this.options.map(original);\n return clone && result === original ? extend({}, result) : result;\n};\n\nfunction createCluster(x, y, id, numPoints, properties) {\n return {\n x: x, // weighted cluster center\n y: y,\n zoom: Infinity, // the last zoom the cluster was processed at\n id: id, // encodes index of the first child of the cluster and its zoom level\n parentId: -1, // parent cluster id\n numPoints: numPoints,\n properties: properties\n };\n}\n\nfunction createPointCluster(p, id) {\n var ref = p.geometry.coordinates;\n var x = ref[0];\n var y = ref[1];\n return {\n x: lngX(x), // projected point coordinates\n y: latY(y),\n zoom: Infinity, // the last zoom the point was processed at\n index: id, // index of the source feature in the original input array,\n parentId: -1 // parent cluster id\n };\n}\n\nfunction getClusterJSON(cluster) {\n return {\n type: 'Feature',\n id: cluster.id,\n properties: getClusterProperties(cluster),\n geometry: {\n type: 'Point',\n coordinates: [xLng(cluster.x), yLat(cluster.y)]\n }\n };\n}\n\nfunction getClusterProperties(cluster) {\n var count = cluster.numPoints;\n var abbrev = count >= 10000 ? Math.round(count / 1000) + \"k\" : count >= 1000 ? Math.round(count / 100) / 10 + \"k\" : count;\n return extend(extend({}, cluster.properties), {\n cluster: true,\n cluster_id: cluster.id,\n point_count: count,\n point_count_abbreviated: abbrev\n });\n}\n\n// longitude/latitude to spherical mercator in [0..1] range\nfunction lngX(lng) {\n return lng / 360 + 0.5;\n}\nfunction latY(lat) {\n var sin = Math.sin(lat * Math.PI / 180);\n var y = 0.5 - 0.25 * Math.log((1 + sin) / (1 - sin)) / Math.PI;\n return y < 0 ? 0 : y > 1 ? 1 : y;\n}\n\n// spherical mercator to longitude/latitude\nfunction xLng(x) {\n return (x - 0.5) * 360;\n}\nfunction yLat(y) {\n var y2 = (180 - y * 360) * Math.PI / 180;\n return 360 * Math.atan(Math.exp(y2)) / Math.PI - 90;\n}\n\nfunction extend(dest, src) {\n for (var id in src) {\n dest[id] = src[id];\n }\n return dest;\n}\n\nfunction getX(p) {\n return p.x;\n}\nfunction getY(p) {\n return p.y;\n}\n\n/**\n * @author kyle / http://nikai.us/\n */\n\nif (typeof window !== 'undefined') {\n requestAnimationFrame(animate);\n}\n\nfunction animate(time) {\n requestAnimationFrame(animate);\n TWEEN.update(time);\n}\n\nvar BaseLayer = function () {\n function BaseLayer(map, dataSet, options) {\n classCallCheck(this, BaseLayer);\n\n if (!(dataSet instanceof DataSet)) {\n dataSet = new DataSet(dataSet);\n }\n\n this.dataSet = dataSet;\n this.map = map;\n\n if (options.draw === 'cluster' && !this.supercluster) {\n this.supercluster = new Supercluster({ maxZoom: options.maxZoom || 19, radius: options.clusterRadius || 100 });\n this.supercluster.load(dataSet.get());\n this.clusterDataSet = new DataSet();\n }\n }\n\n createClass(BaseLayer, [{\n key: \"getDefaultContextConfig\",\n value: function getDefaultContextConfig() {\n return {\n globalAlpha: 1,\n globalCompositeOperation: 'source-over',\n imageSmoothingEnabled: true,\n strokeStyle: '#000000',\n fillStyle: '#000000',\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n shadowBlur: 0,\n shadowColor: 'rgba(0, 0, 0, 0)',\n lineWidth: 1,\n lineCap: 'butt',\n lineJoin: 'miter',\n miterLimit: 10,\n lineDashOffset: 0,\n font: '10px sans-serif',\n textAlign: 'start',\n textBaseline: 'alphabetic'\n };\n }\n }, {\n key: \"initDataRange\",\n value: function initDataRange(options) {\n var self = this;\n self.intensity = new Intensity({\n maxSize: self.options.maxSize,\n minSize: self.options.minSize,\n gradient: self.options.gradient,\n max: self.options.max || this.dataSet.getMax('count')\n });\n self.category = new Category(self.options.splitList);\n self.choropleth = new Choropleth(self.options.splitList);\n if (self.options.splitList === undefined) {\n self.category.generateByDataSet(this.dataSet, self.options.color);\n }\n if (self.options.splitList === undefined) {\n var min = self.options.min || this.dataSet.getMin('count');\n var max = self.options.max || this.dataSet.getMax('count');\n self.choropleth.generateByMinMax(min, max);\n }\n }\n }, {\n key: \"getLegend\",\n value: function getLegend(options) {\n var draw = this.options.draw;\n var legend = null;\n var self = this;\n if (self.options.draw == 'intensity' || self.options.draw == 'heatmap') {\n return this.intensity.getLegend(options);\n } else if (self.options.draw == 'category') {\n return this.category.getLegend(options);\n }\n }\n }, {\n key: \"processData\",\n value: function processData(data) {\n var self = this;\n var draw = self.options.draw;\n if (draw == 'bubble' || draw == 'intensity' || draw == 'category' || draw == 'choropleth' || draw == 'simple') {\n\n for (var i = 0; i < data.length; i++) {\n var item = data[i];\n\n if (self.options.draw == 'bubble') {\n data[i]._size = self.intensity.getSize(item.count);\n } else {\n data[i]._size = undefined;\n }\n\n var styleType = '_fillStyle';\n\n if (data[i].geometry.type === 'LineString' || self.options.styleType === 'stroke') {\n styleType = '_strokeStyle';\n }\n\n if (self.options.draw == 'intensity') {\n data[i][styleType] = self.intensity.getColor(item.count);\n } else if (self.options.draw == 'category') {\n data[i][styleType] = self.category.get(item.count);\n } else if (self.options.draw == 'choropleth') {\n data[i][styleType] = self.choropleth.get(item.count);\n }\n }\n }\n }\n }, {\n key: \"isEnabledTime\",\n value: function isEnabledTime() {\n\n var animationOptions = this.options.animation;\n\n var flag = animationOptions && !(animationOptions.enabled === false);\n\n return flag;\n }\n }, {\n key: \"argCheck\",\n value: function argCheck(options) {\n if (options.draw == 'heatmap') {\n if (options.strokeStyle) {\n console.warn('[heatmap] options.strokeStyle is discard, pleause use options.strength [eg: options.strength = 0.1]');\n }\n }\n }\n }, {\n key: \"drawContext\",\n value: function drawContext(context, dataSet, options, nwPixel) {\n var self = this;\n switch (self.options.draw) {\n case 'heatmap':\n drawHeatmap.draw(context, dataSet, self.options);\n break;\n case 'grid':\n case 'cluster':\n case 'honeycomb':\n self.options.offset = {\n x: nwPixel.x,\n y: nwPixel.y\n };\n if (self.options.draw === 'grid') {\n drawGrid.draw(context, dataSet, self.options);\n } else if (self.options.draw === 'cluster') {\n drawCluster.draw(context, dataSet, self.options);\n } else {\n drawHoneycomb.draw(context, dataSet, self.options);\n }\n break;\n case 'text':\n drawText.draw(context, dataSet, self.options);\n break;\n case 'icon':\n drawIcon.draw(context, dataSet, self.options);\n break;\n case 'clip':\n drawClip.draw(context, dataSet, self.options);\n break;\n default:\n if (self.options.context == \"webgl\") {\n webglDrawSimple.draw(self.canvasLayer.canvas.getContext('webgl'), dataSet, self.options);\n } else {\n drawSimple.draw(context, dataSet, self.options);\n }\n }\n\n if (self.options.arrow && self.options.arrow.show !== false) {\n object.draw(context, dataSet, self.options);\n }\n }\n }, {\n key: \"isPointInPath\",\n value: function isPointInPath(context, pixel) {\n var context = this.canvasLayer.canvas.getContext(this.context);\n var data;\n if (this.options.draw === 'cluster') {\n data = this.clusterDataSet.get();\n } else {\n data = this.dataSet.get();\n }\n for (var i = 0; i < data.length; i++) {\n context.beginPath();\n var options = this.options;\n var x = pixel.x * this.canvasLayer.devicePixelRatio;\n var y = pixel.y * this.canvasLayer.devicePixelRatio;\n\n options.multiPolygonDraw = function () {\n if (context.isPointInPath(x, y)) {\n return data[i];\n }\n };\n\n pathSimple.draw(context, data[i], options);\n\n var geoType = data[i].geometry && data[i].geometry.type;\n if (geoType.indexOf('LineString') > -1) {\n if (context.isPointInStroke && context.isPointInStroke(x, y)) {\n return data[i];\n }\n } else {\n\n if (context.isPointInPath(x, y)) {\n return data[i];\n }\n }\n }\n }\n }, {\n key: \"clickEvent\",\n value: function clickEvent(pixel, e) {\n if (!this.options.methods) {\n return;\n }\n var dataItem = this.isPointInPath(this.getContext(), pixel);\n\n if (dataItem) {\n this.options.methods.click(dataItem, e);\n } else {\n this.options.methods.click(null, e);\n }\n }\n }, {\n key: \"mousemoveEvent\",\n value: function mousemoveEvent(pixel, e) {\n if (!this.options.methods) {\n return;\n }\n var dataItem = this.isPointInPath(this.getContext(), pixel);\n if (dataItem) {\n this.options.methods.mousemove(dataItem, e);\n } else {\n this.options.methods.mousemove(null, e);\n }\n }\n }, {\n key: \"tapEvent\",\n value: function tapEvent(pixel, e) {\n if (!this.options.methods) {\n return;\n }\n var dataItem = this.isPointInPath(this.getContext(), pixel);\n if (dataItem) {\n this.options.methods.tap(dataItem, e);\n } else {\n this.options.methods.tap(null, e);\n }\n }\n\n /**\n * obj.options\n */\n\n }, {\n key: \"update\",\n value: function update(obj, isDraw) {\n var self = this;\n var _options = obj.options;\n var options = self.options;\n for (var i in _options) {\n options[i] = _options[i];\n }\n self.init(options);\n if (isDraw !== false) {\n self.draw();\n }\n }\n }, {\n key: \"setOptions\",\n value: function setOptions(options) {\n var self = this;\n self.dataSet.reset();\n // console.log('xxx1')\n self.init(options);\n // console.log('xxx')\n self.draw();\n }\n }, {\n key: \"set\",\n value: function set$$1(obj) {\n var self = this;\n var ctx = this.getContext();\n var conf = this.getDefaultContextConfig();\n for (var i in conf) {\n ctx[i] = conf[i];\n }\n self.init(obj.options);\n self.draw();\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.unbindEvent();\n this.hide();\n }\n }, {\n key: \"initAnimator\",\n value: function initAnimator() {\n var self = this;\n var animationOptions = self.options.animation;\n\n if (self.options.draw == 'time' || self.isEnabledTime()) {\n\n if (!animationOptions.stepsRange) {\n animationOptions.stepsRange = {\n start: this.dataSet.getMin('time') || 0,\n end: this.dataSet.getMax('time') || 0\n };\n }\n\n this.steps = { step: animationOptions.stepsRange.start };\n self.animator = new TWEEN.Tween(this.steps).onUpdate(function () {\n self._canvasUpdate(this.step);\n }).repeat(Infinity);\n\n this.addAnimatorEvent();\n\n var duration = animationOptions.duration * 1000 || 5000;\n\n self.animator.to({ step: animationOptions.stepsRange.end }, duration);\n self.animator.start();\n } else {\n self.animator && self.animator.stop();\n }\n }\n }, {\n key: \"addAnimatorEvent\",\n value: function addAnimatorEvent() {}\n }, {\n key: \"animatorMovestartEvent\",\n value: function animatorMovestartEvent() {\n var animationOptions = this.options.animation;\n if (this.isEnabledTime() && this.animator) {\n this.steps.step = animationOptions.stepsRange.start;\n this.animator.stop();\n }\n }\n }, {\n key: \"animatorMoveendEvent\",\n value: function animatorMoveendEvent() {\n if (this.isEnabledTime() && this.animator) {\n this.animator.start();\n }\n }\n }]);\n return BaseLayer;\n}();\n\nvar global$4 = typeof window === 'undefined' ? {} : window;\nvar BMap$2 = global$4.BMap || global$4.BMapGL;\n\nvar AnimationLayer = function (_BaseLayer) {\n inherits(AnimationLayer, _BaseLayer);\n\n function AnimationLayer(map, dataSet, options) {\n classCallCheck(this, AnimationLayer);\n\n var _this = possibleConstructorReturn(this, (AnimationLayer.__proto__ || Object.getPrototypeOf(AnimationLayer)).call(this, map, dataSet, options));\n\n _this.map = map;\n _this.options = options || {};\n _this.dataSet = dataSet;\n\n var canvasLayer = new CanvasLayer({\n map: map,\n zIndex: _this.options.zIndex,\n update: _this._canvasUpdate.bind(_this)\n });\n\n _this.init(_this.options);\n\n _this.canvasLayer = canvasLayer;\n _this.transferToMercator();\n var self = _this;\n dataSet.on('change', function () {\n self.transferToMercator();\n canvasLayer.draw();\n });\n _this.ctx = canvasLayer.canvas.getContext('2d');\n\n _this.start();\n return _this;\n }\n\n createClass(AnimationLayer, [{\n key: \"draw\",\n value: function draw() {\n this.canvasLayer.draw();\n }\n }, {\n key: \"init\",\n value: function init(options) {\n\n var self = this;\n self.options = options;\n this.initDataRange(options);\n this.context = self.options.context || '2d';\n\n if (self.options.zIndex) {\n this.canvasLayer && this.canvasLayer.setZIndex(self.options.zIndex);\n }\n\n if (self.options.max) {\n this.intensity.setMax(self.options.max);\n }\n\n if (self.options.min) {\n this.intensity.setMin(self.options.min);\n }\n\n this.initAnimator();\n }\n\n // 经纬度左边转换为墨卡托坐标\n\n }, {\n key: \"transferToMercator\",\n value: function transferToMercator() {\n var map = this.map;\n var mapType = map.getMapType();\n var projection;\n if (mapType.getProjection) {\n projection = mapType.getProjection();\n } else {\n projection = {\n lngLatToPoint: function lngLatToPoint(point) {\n var mc = map.lnglatToMercator(point.lng, point.lat);\n return {\n x: mc[0],\n y: mc[1]\n };\n }\n };\n }\n\n if (this.options.coordType !== 'bd09mc') {\n var data = this.dataSet.get();\n data = this.dataSet.transferCoordinate(data, function (coordinates) {\n var pixel = projection.lngLatToPoint({\n lng: coordinates[0],\n lat: coordinates[1]\n });\n return [pixel.x, pixel.y];\n }, 'coordinates', 'coordinates_mercator');\n this.dataSet._set(data);\n }\n }\n }, {\n key: \"_canvasUpdate\",\n value: function _canvasUpdate() {\n var ctx = this.ctx;\n if (!ctx) {\n return;\n }\n //clear(ctx);\n var map = this.map;\n var projection;\n var mcCenter;\n if (map.getMapType().getProjection) {\n projection = map.getMapType().getProjection();\n mcCenter = projection.lngLatToPoint(map.getCenter());\n } else {\n mcCenter = {\n x: map.getCenter().lng,\n y: map.getCenter().lat\n };\n if (mcCenter.x > -180 && mcCenter.x < 180) {\n mcCenter = map.lnglatToMercator(mcCenter.x, mcCenter.y);\n mcCenter = { x: mcCenter[0], y: mcCenter[1] };\n }\n projection = {\n lngLatToPoint: function lngLatToPoint(point) {\n var mc = map.lnglatToMercator(point.lng, point.lat);\n return {\n x: mc[0],\n y: mc[1]\n };\n }\n };\n }\n var zoomUnit;\n if (projection.getZoomUnits) {\n zoomUnit = projection.getZoomUnits(map.getZoom());\n } else {\n zoomUnit = Math.pow(2, 18 - map.getZoom());\n }\n var nwMc = new BMap$2.Pixel(mcCenter.x - map.getSize().width / 2 * zoomUnit, mcCenter.y + map.getSize().height / 2 * zoomUnit); //左上角墨卡托坐标\n\n clear(ctx);\n\n var dataGetOptions = {\n fromColumn: this.options.coordType == 'bd09mc' ? 'coordinates' : 'coordinates_mercator',\n transferCoordinate: function transferCoordinate(coordinate) {\n if (!coordinate) {\n return;\n }\n var x = (coordinate[0] - nwMc.x) / zoomUnit;\n var y = (nwMc.y - coordinate[1]) / zoomUnit;\n return [x, y];\n }\n };\n\n this.data = this.dataSet.get(dataGetOptions);\n\n this.processData(this.data);\n\n this.drawAnimation();\n }\n }, {\n key: \"drawAnimation\",\n value: function drawAnimation() {\n var ctx = this.ctx;\n var data = this.data;\n if (!data) {\n return;\n }\n\n ctx.save();\n ctx.globalCompositeOperation = 'destination-out';\n ctx.fillStyle = 'rgba(0, 0, 0, .1)';\n ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n ctx.restore();\n\n ctx.save();\n if (this.options.shadowColor) {\n ctx.shadowColor = this.options.shadowColor;\n }\n\n if (this.options.shadowBlur) {\n ctx.shadowBlur = this.options.shadowBlur;\n }\n\n if (this.options.globalAlpha) {\n ctx.globalAlpha = this.options.globalAlpha;\n }\n\n if (this.options.globalCompositeOperation) {\n ctx.globalCompositeOperation = this.options.globalCompositeOperation;\n }\n\n var options = this.options;\n for (var i = 0; i < data.length; i++) {\n if (data[i].geometry.type === 'Point') {\n ctx.beginPath();\n var maxSize = data[i].size || this.options.size;\n var minSize = data[i].minSize || this.options.minSize || 0;\n if (data[i]._size === undefined) {\n data[i]._size = minSize;\n }\n ctx.arc(data[i].geometry._coordinates[0], data[i].geometry._coordinates[1], data[i]._size, 0, Math.PI * 2, true);\n ctx.closePath();\n\n data[i]._size++;\n\n if (data[i]._size > maxSize) {\n data[i]._size = minSize;\n }\n ctx.lineWidth = 1;\n ctx.strokeStyle = data[i].strokeStyle || data[i]._strokeStyle || options.strokeStyle || 'yellow';\n ctx.stroke();\n var fillStyle = data[i].fillStyle || data[i]._fillStyle || options.fillStyle;\n if (fillStyle) {\n ctx.fillStyle = fillStyle;\n ctx.fill();\n }\n } else if (data[i].geometry.type === 'LineString') {\n ctx.beginPath();\n var size = data[i].size || this.options.size || 5;\n var minSize = data[i].minSize || this.options.minSize || 0;\n if (data[i]._index === undefined) {\n data[i]._index = 0;\n }\n var index = data[i]._index;\n ctx.arc(data[i].geometry._coordinates[index][0], data[i].geometry._coordinates[index][1], size, 0, Math.PI * 2, true);\n ctx.closePath();\n\n data[i]._index++;\n\n if (data[i]._index >= data[i].geometry._coordinates.length) {\n data[i]._index = 0;\n }\n\n var strokeStyle = data[i].strokeStyle || options.strokeStyle;\n var fillStyle = data[i].fillStyle || options.fillStyle || 'yellow';\n ctx.fillStyle = fillStyle;\n ctx.fill();\n if (strokeStyle && options.lineWidth) {\n ctx.lineWidth = options.lineWidth || 1;\n ctx.strokeStyle = strokeStyle;\n ctx.stroke();\n }\n }\n }\n ctx.restore();\n }\n }, {\n key: \"animate\",\n value: function animate() {\n this.drawAnimation();\n var animateTime = this.options.animateTime || 100;\n this.timeout = setTimeout(this.animate.bind(this), animateTime);\n }\n }, {\n key: \"start\",\n value: function start() {\n this.stop();\n this.animate();\n }\n }, {\n key: \"stop\",\n value: function stop() {\n clearTimeout(this.timeout);\n }\n }, {\n key: \"unbindEvent\",\n value: function unbindEvent() {}\n }, {\n key: \"hide\",\n value: function hide() {\n this.canvasLayer.hide();\n this.stop();\n }\n }, {\n key: \"show\",\n value: function show() {\n this.start();\n }\n }, {\n key: \"clearData\",\n value: function clearData() {\n this.dataSet && this.dataSet.clear();\n this.update({\n options: null\n });\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.stop();\n this.unbindEvent();\n this.clearData();\n this.map.removeOverlay(this.canvasLayer);\n this.canvasLayer = null;\n }\n }]);\n return AnimationLayer;\n}(BaseLayer);\n\n/**\n * @author kyle / http://nikai.us/\n */\n\nvar global$5 = typeof window === 'undefined' ? {} : window;\nvar BMap$3 = global$5.BMap || global$5.BMapGL;\n\nvar Layer = function (_BaseLayer) {\n inherits(Layer, _BaseLayer);\n\n function Layer(map, dataSet, options) {\n classCallCheck(this, Layer);\n\n var _this = possibleConstructorReturn(this, (Layer.__proto__ || Object.getPrototypeOf(Layer)).call(this, map, dataSet, options));\n\n var self = _this;\n var data = null;\n options = options || {};\n\n _this.clickEvent = _this.clickEvent.bind(_this);\n _this.mousemoveEvent = _this.mousemoveEvent.bind(_this);\n _this.tapEvent = _this.tapEvent.bind(_this);\n\n self.init(options);\n self.argCheck(options);\n self.transferToMercator();\n\n var canvasLayer = _this.canvasLayer = new CanvasLayer({\n map: map,\n context: _this.context,\n updateImmediate: options.updateImmediate,\n paneName: options.paneName,\n mixBlendMode: options.mixBlendMode,\n enableMassClear: options.enableMassClear,\n zIndex: options.zIndex,\n update: function update() {\n self._canvasUpdate();\n }\n });\n\n dataSet.on('change', function () {\n self.transferToMercator();\n canvasLayer.draw();\n });\n\n return _this;\n }\n\n createClass(Layer, [{\n key: \"clickEvent\",\n value: function clickEvent(e) {\n var pixel = e.pixel;\n get(Layer.prototype.__proto__ || Object.getPrototypeOf(Layer.prototype), \"clickEvent\", this).call(this, pixel, e);\n }\n }, {\n key: \"mousemoveEvent\",\n value: function mousemoveEvent(e) {\n var pixel = e.pixel;\n get(Layer.prototype.__proto__ || Object.getPrototypeOf(Layer.prototype), \"mousemoveEvent\", this).call(this, pixel, e);\n }\n }, {\n key: \"tapEvent\",\n value: function tapEvent(e) {\n var pixel = e.pixel;\n get(Layer.prototype.__proto__ || Object.getPrototypeOf(Layer.prototype), \"tapEvent\", this).call(this, pixel, e);\n }\n }, {\n key: \"bindEvent\",\n value: function bindEvent(e) {\n this.unbindEvent();\n var map = this.map;\n var timer = 0;\n var that = this;\n\n if (this.options.methods) {\n if (this.options.methods.click) {\n map.setDefaultCursor(\"default\");\n map.addEventListener('click', this.clickEvent);\n }\n if (this.options.methods.mousemove) {\n map.addEventListener('mousemove', this.mousemoveEvent);\n }\n\n if (\"ontouchend\" in window.document && this.options.methods.tap) {\n map.addEventListener('touchstart', function (e) {\n timer = new Date();\n });\n map.addEventListener('touchend', function (e) {\n if (new Date() - timer < 300) {\n that.tapEvent(e);\n }\n });\n }\n }\n }\n }, {\n key: \"unbindEvent\",\n value: function unbindEvent(e) {\n var map = this.map;\n\n if (this.options.methods) {\n if (this.options.methods.click) {\n map.removeEventListener('click', this.clickEvent);\n }\n if (this.options.methods.mousemove) {\n map.removeEventListener('mousemove', this.mousemoveEvent);\n }\n }\n }\n\n // 经纬度左边转换为墨卡托坐标\n\n }, {\n key: \"transferToMercator\",\n value: function transferToMercator(dataSet) {\n if (!dataSet) {\n dataSet = this.dataSet;\n }\n\n var map = this.map;\n\n var mapType = map.getMapType();\n var projection;\n if (mapType.getProjection) {\n projection = mapType.getProjection();\n } else {\n projection = {\n lngLatToPoint: function lngLatToPoint(point) {\n var mc = map.lnglatToMercator(point.lng, point.lat);\n return {\n x: mc[0],\n y: mc[1]\n };\n }\n };\n }\n\n if (this.options.coordType !== 'bd09mc') {\n var data = dataSet.get();\n data = dataSet.transferCoordinate(data, function (coordinates) {\n if (coordinates[0] < -180 || coordinates[0] > 180 || coordinates[1] < -90 || coordinates[1] > 90) {\n return coordinates;\n } else {\n var pixel = projection.lngLatToPoint({\n lng: coordinates[0],\n lat: coordinates[1]\n });\n return [pixel.x, pixel.y];\n }\n }, 'coordinates', 'coordinates_mercator');\n dataSet._set(data);\n }\n }\n }, {\n key: \"getContext\",\n value: function getContext() {\n return this.canvasLayer.canvas.getContext(this.context);\n }\n }, {\n key: \"_canvasUpdate\",\n value: function _canvasUpdate(time) {\n if (!this.canvasLayer) {\n return;\n }\n\n var self = this;\n\n var animationOptions = self.options.animation;\n\n var map = this.canvasLayer._map;\n\n var projection;\n var mcCenter;\n if (map.getMapType().getProjection) {\n projection = map.getMapType().getProjection();\n mcCenter = projection.lngLatToPoint(map.getCenter());\n } else {\n mcCenter = {\n x: map.getCenter().lng,\n y: map.getCenter().lat\n };\n if (mcCenter.x > -180 && mcCenter.x < 180) {\n mcCenter = map.lnglatToMercator(mcCenter.x, mcCenter.y);\n mcCenter = { x: mcCenter[0], y: mcCenter[1] };\n }\n projection = {\n lngLatToPoint: function lngLatToPoint(point) {\n var mc = map.lnglatToMercator(point.lng, point.lat);\n return {\n x: mc[0],\n y: mc[1]\n };\n }\n };\n }\n var zoomUnit;\n if (projection.getZoomUnits) {\n zoomUnit = projection.getZoomUnits(map.getZoom());\n } else {\n zoomUnit = Math.pow(2, 18 - map.getZoom());\n }\n\n var nwMc = new BMap$3.Pixel(mcCenter.x - map.getSize().width / 2 * zoomUnit, mcCenter.y + map.getSize().height / 2 * zoomUnit); //左上角墨卡托坐标\n\n var context = this.getContext();\n\n if (self.isEnabledTime()) {\n if (time === undefined) {\n clear(context);\n return;\n }\n if (this.context == '2d') {\n context.save();\n context.globalCompositeOperation = 'destination-out';\n context.fillStyle = 'rgba(0, 0, 0, .1)';\n context.fillRect(0, 0, context.canvas.width, context.canvas.height);\n context.restore();\n }\n } else {\n clear(context);\n }\n\n if (this.context == '2d') {\n for (var key in self.options) {\n context[key] = self.options[key];\n }\n } else {\n context.clear(context.COLOR_BUFFER_BIT);\n }\n\n if (self.options.minZoom && map.getZoom() < self.options.minZoom || self.options.maxZoom && map.getZoom() > self.options.maxZoom) {\n return;\n }\n\n var scale = 1;\n if (this.context != '2d') {\n scale = this.canvasLayer.devicePixelRatio;\n }\n\n var dataGetOptions = {\n fromColumn: self.options.coordType == 'bd09mc' ? 'coordinates' : 'coordinates_mercator',\n transferCoordinate: function transferCoordinate(coordinate) {\n var x = (coordinate[0] - nwMc.x) / zoomUnit * scale;\n var y = (nwMc.y - coordinate[1]) / zoomUnit * scale;\n return [x, y];\n }\n };\n\n if (time !== undefined) {\n dataGetOptions.filter = function (item) {\n var trails = animationOptions.trails || 10;\n if (time && item.time > time - trails && item.time < time) {\n return true;\n } else {\n return false;\n }\n };\n }\n\n // get data from data set\n var data;\n\n if (self.options.draw === 'cluster') {\n var bounds = this.map.getBounds();\n var ne = bounds.getNorthEast();\n var sw = bounds.getSouthWest();\n var clusterData = this.supercluster.getClusters([sw.lng, sw.lat, ne.lng, ne.lat], this.getZoom());\n this.clusterDataSet.set(clusterData);\n this.transferToMercator(this.clusterDataSet);\n data = this.clusterDataSet.get(dataGetOptions);\n } else {\n data = self.dataSet.get(dataGetOptions);\n }\n\n this.processData(data);\n\n var nwPixel = map.pointToPixel(new BMap$3.Point(0, 0));\n\n if (self.options.unit == 'm') {\n if (self.options.size) {\n self.options._size = self.options.size / zoomUnit;\n }\n if (self.options.width) {\n self.options._width = self.options.width / zoomUnit;\n }\n if (self.options.height) {\n self.options._height = self.options.height / zoomUnit;\n }\n } else {\n self.options._size = self.options.size;\n self.options._height = self.options.height;\n self.options._width = self.options.width;\n }\n\n this.drawContext(context, data, self.options, nwPixel);\n\n //console.timeEnd('draw');\n\n //console.timeEnd('update')\n self.options.updateCallback && self.options.updateCallback(time);\n }\n }, {\n key: \"init\",\n value: function init(options) {\n\n var self = this;\n self.options = options;\n this.initDataRange(options);\n this.context = self.options.context || '2d';\n\n if (self.options.zIndex) {\n this.canvasLayer && this.canvasLayer.setZIndex(self.options.zIndex);\n }\n\n if (self.options.max) {\n this.intensity.setMax(self.options.max);\n }\n\n if (self.options.min) {\n this.intensity.setMin(self.options.min);\n }\n\n this.initAnimator();\n this.bindEvent();\n }\n }, {\n key: \"getZoom\",\n value: function getZoom() {\n return this.map.getZoom();\n }\n }, {\n key: \"addAnimatorEvent\",\n value: function addAnimatorEvent() {\n this.map.addEventListener('movestart', this.animatorMovestartEvent.bind(this));\n this.map.addEventListener('moveend', this.animatorMoveendEvent.bind(this));\n }\n }, {\n key: \"show\",\n value: function show() {\n this.map.addOverlay(this.canvasLayer);\n }\n }, {\n key: \"hide\",\n value: function hide() {\n this.map.removeOverlay(this.canvasLayer);\n }\n }, {\n key: \"draw\",\n value: function draw() {\n this.canvasLayer && this.canvasLayer.draw();\n }\n }, {\n key: \"clearData\",\n value: function clearData() {\n this.dataSet && this.dataSet.clear();\n this.update({\n options: null\n });\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.unbindEvent();\n this.clearData();\n this.map.removeOverlay(this.canvasLayer);\n this.canvasLayer = null;\n }\n }]);\n return Layer;\n}(BaseLayer);\n\n/**\n * Copyright 2012 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Extends OverlayView to provide a canvas \"Layer\".\n * @author Brendan Kenny\n */\n\n/**\n * A map layer that provides a canvas over the slippy map and a callback\n * system for efficient animation. Requires canvas and CSS 2D transform\n * support.\n * @constructor\n * @extends google.maps.OverlayView\n * @param {CanvasLayerOptions=} opt_options Options to set in this CanvasLayer.\n */\nfunction CanvasLayer$2(opt_options) {\n /**\n * If true, canvas is in a map pane and the OverlayView is fully functional.\n * See google.maps.OverlayView.onAdd for more information.\n * @type {boolean}\n * @private\n */\n this.isAdded_ = false;\n\n /**\n * If true, each update will immediately schedule the next.\n * @type {boolean}\n * @private\n */\n this.isAnimated_ = false;\n\n /**\n * The name of the MapPane in which this layer will be displayed.\n * @type {string}\n * @private\n */\n this.paneName_ = CanvasLayer$2.DEFAULT_PANE_NAME_;\n\n /**\n * A user-supplied function called whenever an update is required. Null or\n * undefined if a callback is not provided.\n * @type {?function=}\n * @private\n */\n this.updateHandler_ = null;\n\n /**\n * A user-supplied function called whenever an update is required and the\n * map has been resized since the last update. Null or undefined if a\n * callback is not provided.\n * @type {?function}\n * @private\n */\n this.resizeHandler_ = null;\n\n /**\n * The LatLng coordinate of the top left of the current view of the map. Will\n * be null when this.isAdded_ is false.\n * @type {google.maps.LatLng}\n * @private\n */\n this.topLeft_ = null;\n\n /**\n * The map-pan event listener. Will be null when this.isAdded_ is false. Will\n * be null when this.isAdded_ is false.\n * @type {?function}\n * @private\n */\n this.centerListener_ = null;\n\n /**\n * The map-resize event listener. Will be null when this.isAdded_ is false.\n * @type {?function}\n * @private\n */\n this.resizeListener_ = null;\n\n /**\n * If true, the map size has changed and this.resizeHandler_ must be called\n * on the next update.\n * @type {boolean}\n * @private\n */\n this.needsResize_ = true;\n\n /**\n * A browser-defined id for the currently requested callback. Null when no\n * callback is queued.\n * @type {?number}\n * @private\n */\n this.requestAnimationFrameId_ = null;\n\n var canvas = document.createElement('canvas');\n canvas.style.position = 'absolute';\n canvas.style.top = 0;\n canvas.style.left = 0;\n canvas.style.pointerEvents = 'none';\n\n /**\n * The canvas element.\n * @type {!HTMLCanvasElement}\n */\n this.canvas = canvas;\n\n /**\n * The CSS width of the canvas, which may be different than the width of the\n * backing store.\n * @private {number}\n */\n this.canvasCssWidth_ = 300;\n\n /**\n * The CSS height of the canvas, which may be different than the height of\n * the backing store.\n * @private {number}\n */\n this.canvasCssHeight_ = 150;\n\n /**\n * A value for scaling the CanvasLayer resolution relative to the CanvasLayer\n * display size.\n * @private {number}\n */\n this.resolutionScale_ = 1;\n\n /**\n * Simple bind for functions with no args for bind-less browsers (Safari).\n * @param {Object} thisArg The this value used for the target function.\n * @param {function} func The function to be bound.\n */\n function simpleBindShim(thisArg, func) {\n return function () {\n func.apply(thisArg);\n };\n }\n\n /**\n * A reference to this.repositionCanvas_ with this bound as its this value.\n * @type {function}\n * @private\n */\n this.repositionFunction_ = simpleBindShim(this, this.repositionCanvas_);\n\n /**\n * A reference to this.resize_ with this bound as its this value.\n * @type {function}\n * @private\n */\n this.resizeFunction_ = simpleBindShim(this, this.resize_);\n\n /**\n * A reference to this.update_ with this bound as its this value.\n * @type {function}\n * @private\n */\n this.requestUpdateFunction_ = simpleBindShim(this, this.update_);\n\n // set provided options, if any\n if (opt_options) {\n this.setOptions(opt_options);\n }\n}\n\nvar global$6 = typeof window === 'undefined' ? {} : window;\n\nif (global$6.google && global$6.google.maps) {\n\n CanvasLayer$2.prototype = new google.maps.OverlayView();\n\n /**\n * The default MapPane to contain the canvas.\n * @type {string}\n * @const\n * @private\n */\n CanvasLayer$2.DEFAULT_PANE_NAME_ = 'overlayLayer';\n\n /**\n * Transform CSS property name, with vendor prefix if required. If browser\n * does not support transforms, property will be ignored.\n * @type {string}\n * @const\n * @private\n */\n CanvasLayer$2.CSS_TRANSFORM_ = function () {\n var div = document.createElement('div');\n var transformProps = ['transform', 'WebkitTransform', 'MozTransform', 'OTransform', 'msTransform'];\n for (var i = 0; i < transformProps.length; i++) {\n var prop = transformProps[i];\n if (div.style[prop] !== undefined) {\n return prop;\n }\n }\n\n // return unprefixed version by default\n return transformProps[0];\n }();\n\n /**\n * The requestAnimationFrame function, with vendor-prefixed or setTimeout-based\n * fallbacks. MUST be called with window as thisArg.\n * @type {function}\n * @param {function} callback The function to add to the frame request queue.\n * @return {number} The browser-defined id for the requested callback.\n * @private\n */\n CanvasLayer$2.prototype.requestAnimFrame_ = global$6.requestAnimationFrame || global$6.webkitRequestAnimationFrame || global$6.mozRequestAnimationFrame || global$6.oRequestAnimationFrame || global$6.msRequestAnimationFrame || function (callback) {\n return global$6.setTimeout(callback, 1000 / 60);\n };\n\n /**\n * The cancelAnimationFrame function, with vendor-prefixed fallback. Does not\n * fall back to clearTimeout as some platforms implement requestAnimationFrame\n * but not cancelAnimationFrame, and the cost is an extra frame on onRemove.\n * MUST be called with window as thisArg.\n * @type {function}\n * @param {number=} requestId The id of the frame request to cancel.\n * @private\n */\n CanvasLayer$2.prototype.cancelAnimFrame_ = global$6.cancelAnimationFrame || global$6.webkitCancelAnimationFrame || global$6.mozCancelAnimationFrame || global$6.oCancelAnimationFrame || global$6.msCancelAnimationFrame || function (requestId) {};\n\n /**\n * Sets any options provided. See CanvasLayerOptions for more information.\n * @param {CanvasLayerOptions} options The options to set.\n */\n CanvasLayer$2.prototype.setOptions = function (options) {\n if (options.animate !== undefined) {\n this.setAnimate(options.animate);\n }\n\n if (options.paneName !== undefined) {\n this.setPaneName(options.paneName);\n }\n\n if (options.updateHandler !== undefined) {\n this.setUpdateHandler(options.updateHandler);\n }\n\n if (options.resizeHandler !== undefined) {\n this.setResizeHandler(options.resizeHandler);\n }\n\n if (options.resolutionScale !== undefined) {\n this.setResolutionScale(options.resolutionScale);\n }\n\n if (options.map !== undefined) {\n this.setMap(options.map);\n }\n };\n\n /**\n * Set the animated state of the layer. If true, updateHandler will be called\n * repeatedly, once per frame. If false, updateHandler will only be called when\n * a map property changes that could require the canvas content to be redrawn.\n * @param {boolean} animate Whether the canvas is animated.\n */\n CanvasLayer$2.prototype.setAnimate = function (animate) {\n this.isAnimated_ = !!animate;\n\n if (this.isAnimated_) {\n this.scheduleUpdate();\n }\n };\n\n /**\n * @return {boolean} Whether the canvas is animated.\n */\n CanvasLayer$2.prototype.isAnimated = function () {\n return this.isAnimated_;\n };\n\n /**\n * Set the MapPane in which this layer will be displayed, by name. See\n * {@code google.maps.MapPanes} for the panes available.\n * @param {string} paneName The name of the desired MapPane.\n */\n CanvasLayer$2.prototype.setPaneName = function (paneName) {\n this.paneName_ = paneName;\n\n this.setPane_();\n };\n\n /**\n * @return {string} The name of the current container pane.\n */\n CanvasLayer$2.prototype.getPaneName = function () {\n return this.paneName_;\n };\n\n /**\n * Adds the canvas to the specified container pane. Since this is guaranteed to\n * execute only after onAdd is called, this is when paneName's existence is\n * checked (and an error is thrown if it doesn't exist).\n * @private\n */\n CanvasLayer$2.prototype.setPane_ = function () {\n if (!this.isAdded_) {\n return;\n }\n\n // onAdd has been called, so panes can be used\n var panes = this.getPanes();\n if (!panes[this.paneName_]) {\n throw new Error('\"' + this.paneName_ + '\" is not a valid MapPane name.');\n }\n\n panes[this.paneName_].appendChild(this.canvas);\n };\n\n /**\n * Set a function that will be called whenever the parent map and the overlay's\n * canvas have been resized. If opt_resizeHandler is null or unspecified, any\n * existing callback is removed.\n * @param {?function=} opt_resizeHandler The resize callback function.\n */\n CanvasLayer$2.prototype.setResizeHandler = function (opt_resizeHandler) {\n this.resizeHandler_ = opt_resizeHandler;\n };\n\n /**\n * Sets a value for scaling the canvas resolution relative to the canvas\n * display size. This can be used to save computation by scaling the backing\n * buffer down, or to support high DPI devices by scaling it up (by e.g.\n * window.devicePixelRatio).\n * @param {number} scale\n */\n CanvasLayer$2.prototype.setResolutionScale = function (scale) {\n if (typeof scale === 'number') {\n this.resolutionScale_ = scale;\n this.resize_();\n }\n };\n\n /**\n * Set a function that will be called when a repaint of the canvas is required.\n * If opt_updateHandler is null or unspecified, any existing callback is\n * removed.\n * @param {?function=} opt_updateHandler The update callback function.\n */\n CanvasLayer$2.prototype.setUpdateHandler = function (opt_updateHandler) {\n this.updateHandler_ = opt_updateHandler;\n };\n\n /**\n * @inheritDoc\n */\n CanvasLayer$2.prototype.onAdd = function () {\n if (this.isAdded_) {\n return;\n }\n\n this.isAdded_ = true;\n this.setPane_();\n\n this.resizeListener_ = google.maps.event.addListener(this.getMap(), 'resize', this.resizeFunction_);\n this.centerListener_ = google.maps.event.addListener(this.getMap(), 'center_changed', this.repositionFunction_);\n\n this.resize_();\n this.repositionCanvas_();\n };\n\n /**\n * @inheritDoc\n */\n CanvasLayer$2.prototype.onRemove = function () {\n if (!this.isAdded_) {\n return;\n }\n\n this.isAdded_ = false;\n this.topLeft_ = null;\n\n // remove canvas and listeners for pan and resize from map\n this.canvas.parentElement.removeChild(this.canvas);\n if (this.centerListener_) {\n google.maps.event.removeListener(this.centerListener_);\n this.centerListener_ = null;\n }\n if (this.resizeListener_) {\n google.maps.event.removeListener(this.resizeListener_);\n this.resizeListener_ = null;\n }\n\n // cease canvas update callbacks\n if (this.requestAnimationFrameId_) {\n this.cancelAnimFrame_.call(global$6, this.requestAnimationFrameId_);\n this.requestAnimationFrameId_ = null;\n }\n };\n\n /**\n * The internal callback for resize events that resizes the canvas to keep the\n * map properly covered.\n * @private\n */\n CanvasLayer$2.prototype.resize_ = function () {\n if (!this.isAdded_) {\n return;\n }\n\n var map = this.getMap();\n var mapWidth = map.getDiv().offsetWidth;\n var mapHeight = map.getDiv().offsetHeight;\n\n var newWidth = mapWidth * this.resolutionScale_;\n var newHeight = mapHeight * this.resolutionScale_;\n var oldWidth = this.canvas.width;\n var oldHeight = this.canvas.height;\n\n // resizing may allocate a new back buffer, so do so conservatively\n if (oldWidth !== newWidth || oldHeight !== newHeight) {\n this.canvas.width = newWidth;\n this.canvas.height = newHeight;\n\n this.needsResize_ = true;\n this.scheduleUpdate();\n }\n\n // reset styling if new sizes don't match; resize of data not needed\n if (this.canvasCssWidth_ !== mapWidth || this.canvasCssHeight_ !== mapHeight) {\n this.canvasCssWidth_ = mapWidth;\n this.canvasCssHeight_ = mapHeight;\n this.canvas.style.width = mapWidth + 'px';\n this.canvas.style.height = mapHeight + 'px';\n }\n };\n\n /**\n * @inheritDoc\n */\n CanvasLayer$2.prototype.draw = function () {\n this.repositionCanvas_();\n };\n\n /**\n * Internal callback for map view changes. Since the Maps API moves the overlay\n * along with the map, this function calculates the opposite translation to\n * keep the canvas in place.\n * @private\n */\n CanvasLayer$2.prototype.repositionCanvas_ = function () {\n // TODO(bckenny): *should* only be executed on RAF, but in current browsers\n // this causes noticeable hitches in map and overlay relative\n // positioning.\n\n var map = this.getMap();\n\n // topLeft can't be calculated from map.getBounds(), because bounds are\n // clamped to -180 and 180 when completely zoomed out. Instead, calculate\n // left as an offset from the center, which is an unwrapped LatLng.\n var top = map.getBounds().getNorthEast().lat();\n var center = map.getCenter();\n var scale = Math.pow(2, map.getZoom());\n var left = center.lng() - this.canvasCssWidth_ * 180 / (256 * scale);\n this.topLeft_ = new google.maps.LatLng(top, left);\n\n // Canvas position relative to draggable map's container depends on\n // overlayView's projection, not the map's. Have to use the center of the\n // map for this, not the top left, for the same reason as above.\n var projection = this.getProjection();\n var divCenter = projection.fromLatLngToDivPixel(center);\n var offsetX = -Math.round(this.canvasCssWidth_ / 2 - divCenter.x);\n var offsetY = -Math.round(this.canvasCssHeight_ / 2 - divCenter.y);\n this.canvas.style[CanvasLayer$2.CSS_TRANSFORM_] = 'translate(' + offsetX + 'px,' + offsetY + 'px)';\n\n this.scheduleUpdate();\n };\n\n /**\n * Internal callback that serves as main animation scheduler via\n * requestAnimationFrame. Calls resize and update callbacks if set, and\n * schedules the next frame if overlay is animated.\n * @private\n */\n CanvasLayer$2.prototype.update_ = function () {\n this.requestAnimationFrameId_ = null;\n\n if (!this.isAdded_) {\n return;\n }\n\n if (this.isAnimated_) {\n this.scheduleUpdate();\n }\n\n if (this.needsResize_ && this.resizeHandler_) {\n this.needsResize_ = false;\n this.resizeHandler_();\n }\n\n if (this.updateHandler_) {\n this.updateHandler_();\n }\n };\n\n /**\n * A convenience method to get the current LatLng coordinate of the top left of\n * the current view of the map.\n * @return {google.maps.LatLng} The top left coordinate.\n */\n CanvasLayer$2.prototype.getTopLeft = function () {\n return this.topLeft_;\n };\n\n /**\n * Schedule a requestAnimationFrame callback to updateHandler. If one is\n * already scheduled, there is no effect.\n */\n CanvasLayer$2.prototype.scheduleUpdate = function () {\n if (this.isAdded_ && !this.requestAnimationFrameId_) {\n this.requestAnimationFrameId_ = this.requestAnimFrame_.call(global$6, this.requestUpdateFunction_);\n }\n };\n}\n\n/**\n * @author kyle / http://nikai.us/\n */\n\nvar Layer$2 = function (_BaseLayer) {\n inherits(Layer, _BaseLayer);\n\n function Layer(map, dataSet, options) {\n classCallCheck(this, Layer);\n\n var _this = possibleConstructorReturn(this, (Layer.__proto__ || Object.getPrototypeOf(Layer)).call(this, map, dataSet, options));\n\n var self = _this;\n var data = null;\n options = options || {};\n\n self.init(options);\n self.argCheck(options);\n\n var canvasLayerOptions = {\n map: map,\n animate: false,\n updateHandler: function updateHandler() {\n self._canvasUpdate();\n },\n resolutionScale: resolutionScale\n };\n\n var canvasLayer = _this.canvasLayer = new CanvasLayer$2(canvasLayerOptions);\n\n _this.clickEvent = _this.clickEvent.bind(_this);\n _this.mousemoveEvent = _this.mousemoveEvent.bind(_this);\n _this.bindEvent();\n return _this;\n }\n\n createClass(Layer, [{\n key: \"clickEvent\",\n value: function clickEvent(e) {\n var pixel = e.pixel;\n get(Layer.prototype.__proto__ || Object.getPrototypeOf(Layer.prototype), \"clickEvent\", this).call(this, pixel, e);\n }\n }, {\n key: \"mousemoveEvent\",\n value: function mousemoveEvent(e) {\n var pixel = e.pixel;\n get(Layer.prototype.__proto__ || Object.getPrototypeOf(Layer.prototype), \"mousemoveEvent\", this).call(this, pixel, e);\n }\n }, {\n key: \"bindEvent\",\n value: function bindEvent(e) {\n var map = this.map;\n\n if (this.options.methods) {\n if (this.options.methods.click) {\n map.setDefaultCursor(\"default\");\n map.addListener('click', this.clickEvent);\n }\n if (this.options.methods.mousemove) {\n map.addListener('mousemove', this.mousemoveEvent);\n }\n }\n }\n }, {\n key: \"unbindEvent\",\n value: function unbindEvent(e) {\n var map = this.map;\n\n if (this.options.methods) {\n if (this.options.methods.click) {\n map.removeListener('click', this.clickEvent);\n }\n if (this.options.methods.mousemove) {\n map.removeListener('mousemove', this.mousemoveEvent);\n }\n }\n }\n }, {\n key: \"getContext\",\n value: function getContext() {\n return this.canvasLayer.canvas.getContext(this.context);\n }\n }, {\n key: \"_canvasUpdate\",\n value: function _canvasUpdate(time) {\n if (!this.canvasLayer) {\n return;\n }\n\n var self = this;\n\n var animationOptions = self.options.animation;\n\n var context = this.getContext();\n\n if (self.isEnabledTime()) {\n if (time === undefined) {\n clear(context);\n return;\n }\n if (this.context == '2d') {\n context.save();\n context.globalCompositeOperation = 'destination-out';\n context.fillStyle = 'rgba(0, 0, 0, .1)';\n context.fillRect(0, 0, context.canvas.width, context.canvas.height);\n context.restore();\n }\n } else {\n clear(context);\n }\n\n if (this.context == '2d') {\n for (var key in self.options) {\n context[key] = self.options[key];\n }\n } else {\n context.clear(context.COLOR_BUFFER_BIT);\n }\n\n if (self.options.minZoom && map.getZoom() < self.options.minZoom || self.options.maxZoom && map.getZoom() > self.options.maxZoom) {\n return;\n }\n\n var scale = 1;\n if (this.context != '2d') {\n scale = this.canvasLayer.devicePixelRatio;\n }\n\n var map = this.map;\n var mapProjection = map.getProjection();\n var scale = Math.pow(2, map.zoom) * resolutionScale;\n var offset = mapProjection.fromLatLngToPoint(this.canvasLayer.getTopLeft());\n var dataGetOptions = {\n //fromColumn: self.options.coordType == 'bd09mc' ? 'coordinates' : 'coordinates_mercator',\n transferCoordinate: function transferCoordinate(coordinate) {\n var latLng = new google.maps.LatLng(coordinate[1], coordinate[0]);\n var worldPoint = mapProjection.fromLatLngToPoint(latLng);\n var pixel = {\n x: (worldPoint.x - offset.x) * scale,\n y: (worldPoint.y - offset.y) * scale\n };\n return [pixel.x, pixel.y];\n }\n };\n\n if (time !== undefined) {\n dataGetOptions.filter = function (item) {\n var trails = animationOptions.trails || 10;\n if (time && item.time > time - trails && item.time < time) {\n return true;\n } else {\n return false;\n }\n };\n }\n\n // get data from data set\n var data = self.dataSet.get(dataGetOptions);\n\n this.processData(data);\n\n var latLng = new google.maps.LatLng(0, 0);\n var worldPoint = mapProjection.fromLatLngToPoint(latLng);\n var pixel = {\n x: (worldPoint.x - offset.x) * scale,\n y: (worldPoint.y - offset.y) * scale\n };\n\n if (self.options.unit == 'm' && self.options.size) {\n self.options._size = self.options.size / zoomUnit;\n } else {\n self.options._size = self.options.size;\n }\n\n this.drawContext(context, new DataSet(data), self.options, pixel);\n\n //console.timeEnd('draw');\n\n //console.timeEnd('update')\n self.options.updateCallback && self.options.updateCallback(time);\n }\n }, {\n key: \"init\",\n value: function init(options) {\n\n var self = this;\n\n self.options = options;\n\n this.initDataRange(options);\n\n this.context = self.options.context || '2d';\n\n if (self.options.zIndex) {\n this.canvasLayer && this.canvasLayer.setZIndex(self.options.zIndex);\n }\n\n this.initAnimator();\n }\n }, {\n key: \"addAnimatorEvent\",\n value: function addAnimatorEvent() {\n this.map.addListener('movestart', this.animatorMovestartEvent.bind(this));\n this.map.addListener('moveend', this.animatorMoveendEvent.bind(this));\n }\n }, {\n key: \"show\",\n value: function show() {\n this.map.addOverlay(this.canvasLayer);\n }\n }, {\n key: \"hide\",\n value: function hide() {\n this.map.removeOverlay(this.canvasLayer);\n }\n }, {\n key: \"draw\",\n value: function draw() {\n self.canvasLayer.draw();\n }\n }]);\n return Layer;\n}(BaseLayer);\n\n/**\n * MapV for maptalks.js (https://github.com/maptalks/maptalks.js)\n * @author fuzhenn / https://github.com/fuzhenn\n */\n// import * as maptalks from 'maptalks';\nvar Layer$4 = void 0;\nif (typeof maptalks !== 'undefined') {\n Layer$4 = function (_maptalks$Layer) {\n inherits(Layer, _maptalks$Layer);\n\n function Layer(id, dataSet, options) {\n classCallCheck(this, Layer);\n\n var _this = possibleConstructorReturn(this, (Layer.__proto__ || Object.getPrototypeOf(Layer)).call(this, id, options));\n\n _this.options_ = options;\n _this.dataSet = dataSet;\n _this._initBaseLayer(options);\n return _this;\n }\n\n createClass(Layer, [{\n key: \"_initBaseLayer\",\n value: function _initBaseLayer(options) {\n var self = this;\n var baseLayer = this.baseLayer = new BaseLayer(null, this.dataSet, options);\n self.init(options);\n baseLayer.argCheck(options);\n }\n }, {\n key: \"clickEvent\",\n value: function clickEvent(e) {\n if (!this.baseLayer) {\n return;\n }\n var pixel = e.containerPoint;\n this.baseLayer.clickEvent(pixel, e.domEvent);\n }\n }, {\n key: \"mousemoveEvent\",\n value: function mousemoveEvent(e) {\n if (!this.baseLayer) {\n return;\n }\n var pixel = e.containerPoint;\n this.baseLayer.mousemoveEvent(pixel, e.domEvent);\n }\n }, {\n key: \"getEvents\",\n value: function getEvents() {\n return {\n 'click': this.clickEvent,\n 'mousemove': this.mousemoveEvent\n };\n }\n }, {\n key: \"init\",\n value: function init(options) {\n\n var base = this.baseLayer;\n\n base.options = options;\n\n base.initDataRange(options);\n\n base.context = base.options.context || '2d';\n\n base.initAnimator();\n }\n }, {\n key: \"addAnimatorEvent\",\n value: function addAnimatorEvent() {\n this.map.addListener('movestart', this.animatorMovestartEvent.bind(this));\n this.map.addListener('moveend', this.animatorMoveendEvent.bind(this));\n }\n }]);\n return Layer;\n }(maptalks.Layer);\n\n var LayerRenderer = function (_maptalks$renderer$Ca) {\n inherits(LayerRenderer, _maptalks$renderer$Ca);\n\n function LayerRenderer() {\n classCallCheck(this, LayerRenderer);\n return possibleConstructorReturn(this, (LayerRenderer.__proto__ || Object.getPrototypeOf(LayerRenderer)).apply(this, arguments));\n }\n\n createClass(LayerRenderer, [{\n key: \"needToRedraw\",\n value: function needToRedraw() {\n var base = this.layer.baseLayer;\n if (base.isEnabledTime()) {\n return true;\n }\n return get(LayerRenderer.prototype.__proto__ || Object.getPrototypeOf(LayerRenderer.prototype), \"needToRedraw\", this).call(this);\n }\n }, {\n key: \"draw\",\n value: function draw() {\n var base = this.layer.baseLayer;\n if (!this.canvas || !base.isEnabledTime() || this._shouldClear) {\n this.prepareCanvas();\n this._shouldClear = false;\n }\n this._update(this.gl || this.context, this._mapvFrameTime);\n delete this._mapvFrameTime;\n this.completeRender();\n }\n }, {\n key: \"drawOnInteracting\",\n value: function drawOnInteracting() {\n this.draw();\n this._shouldClear = false;\n }\n }, {\n key: \"onSkipDrawOnInteracting\",\n value: function onSkipDrawOnInteracting() {\n this._shouldClear = true;\n }\n }, {\n key: \"_canvasUpdate\",\n value: function _canvasUpdate(time) {\n this.setToRedraw();\n this._mapvFrameTime = time;\n }\n }, {\n key: \"_update\",\n value: function _update(context, time) {\n if (!this.canvas) {\n return;\n }\n\n var self = this.layer.baseLayer;\n\n var animationOptions = self.options.animation;\n\n var map = this.getMap();\n\n if (self.isEnabledTime()) {\n if (time === undefined) {\n clear(context);\n return;\n }\n if (self.context == '2d') {\n context.save();\n context.globalCompositeOperation = 'destination-out';\n context.fillStyle = 'rgba(0, 0, 0, .1)';\n context.fillRect(0, 0, context.canvas.width, context.canvas.height);\n context.restore();\n }\n } else {\n clear(context);\n }\n\n if (self.context == '2d') {\n for (var key in self.options) {\n context[key] = self.options[key];\n }\n } else {\n context.clear(context.COLOR_BUFFER_BIT);\n }\n\n var scale = 1;\n if (self.context === '2d' && self.options.draw !== 'heatmap') {\n //in heatmap.js, devicePixelRatio is being mulitplied independently\n scale = self.canvasLayer.devicePixelRatio;\n }\n\n //reuse to save coordinate instance creation\n var coord = new maptalks.Coordinate(0, 0);\n var dataGetOptions = {\n fromColumn: self.options.coordType === 'bd09mc' ? 'coordinates_mercator' : 'coordinates',\n transferCoordinate: function transferCoordinate(coordinate) {\n coord.x = coordinate[0];\n coord.y = coordinate[1];\n var r = map.coordToContainerPoint(coord)._multi(scale).toArray();\n return r;\n }\n };\n\n if (time !== undefined) {\n dataGetOptions.filter = function (item) {\n var trails = animationOptions.trails || 10;\n if (time && item.time > time - trails && item.time < time) {\n return true;\n } else {\n return false;\n }\n };\n }\n\n // get data from data set\n var data = self.dataSet.get(dataGetOptions);\n\n self.processData(data);\n\n if (self.options.unit == 'm') {\n if (self.options.size) {\n self.options._size = self.options.size / zoomUnit;\n }\n if (self.options.width) {\n self.options._width = self.options.width / zoomUnit;\n }\n if (self.options.height) {\n self.options._height = self.options.height / zoomUnit;\n }\n } else {\n self.options._size = self.options.size;\n self.options._height = self.options.height;\n self.options._width = self.options.width;\n }\n\n var zeroZero = new maptalks.Point(0, 0);\n //screen position of the [0, 0] point\n var zeroZeroScreen = map._pointToContainerPoint(zeroZero)._multi(scale);\n self.drawContext(context, data, self.options, zeroZeroScreen);\n\n //console.timeEnd('draw');\n\n //console.timeEnd('update')\n self.options.updateCallback && self.options.updateCallback(time);\n }\n }, {\n key: \"createCanvas\",\n value: function createCanvas() {\n if (this.canvas) {\n return;\n }\n var map = this.getMap();\n var size = map.getSize();\n var r = maptalks.Browser.retina ? 2 : 1,\n w = r * size.width,\n h = r * size.height;\n this.canvas = maptalks.Canvas.createCanvas(w, h, map.CanvasClass);\n var mapvContext = this.layer.baseLayer.context;\n if (mapvContext === '2d') {\n this.context = this.canvas.getContext('2d');\n if (this.layer.options['globalCompositeOperation']) {\n this.context.globalCompositeOperation = this.layer.options['globalCompositeOperation'];\n }\n } else {\n var attributes = {\n 'alpha': true,\n 'preserveDrawingBuffer': true,\n 'antialias': false\n };\n this.gl = this.canvas.getContext('webgl', attributes);\n }\n\n this.onCanvasCreate();\n\n this._bindToMapv();\n\n this.layer.fire('canvascreate', {\n 'context': this.context,\n 'gl': this.gl\n });\n }\n }, {\n key: \"_bindToMapv\",\n value: function _bindToMapv() {\n //some bindings needed by mapv baselayer\n var base = this.layer.baseLayer;\n this.devicePixelRatio = maptalks.Browser.retina ? 2 : 1;\n base.canvasLayer = this;\n base._canvasUpdate = this._canvasUpdate.bind(this);\n base.getContext = function () {\n var renderer = self.getRenderer();\n return renderer.gl || renderer.context;\n };\n }\n }]);\n return LayerRenderer;\n }(maptalks.renderer.CanvasRenderer);\n\n Layer$4.registerRenderer('canvas', LayerRenderer);\n}\n\nvar Layer$5 = Layer$4;\n\n/**\n * MapV for AMap\n * @author sakitam-fdd - https://github.com/sakitam-fdd\n */\n\n/**\n * create canvas\n * @param width\n * @param height\n * @param Canvas\n * @returns {HTMLCanvasElement}\n */\nvar createCanvas = function createCanvas(width, height, Canvas) {\n if (typeof document !== 'undefined') {\n var canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\n } else {\n // create a new canvas instance in node.js\n // the canvas class needs to have a default constructor without any parameter\n return new Canvas(width, height);\n }\n};\n\nvar Layer$6 = function (_BaseLayer) {\n inherits(Layer, _BaseLayer);\n\n function Layer() {\n var map = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var dataSet = arguments[1];\n var options = arguments[2];\n classCallCheck(this, Layer);\n\n var _this = possibleConstructorReturn(this, (Layer.__proto__ || Object.getPrototypeOf(Layer)).call(this, map, dataSet, options));\n\n _this.options = options;\n\n /**\n * internal\n * @type {{canvas: null, devicePixelRatio: number}}\n */\n _this.canvasLayer = {\n canvas: null,\n devicePixelRatio: window.devicePixelRatio\n };\n\n /**\n * canvas layer\n * @type {null}\n * @private\n */\n _this.layer_ = null;\n\n _this.initDataRange(options);\n _this.initAnimator();\n _this.onEvents();\n map.on('complete', function () {\n this.init(map, options);\n this.argCheck(options);\n }, _this);\n return _this;\n }\n\n /**\n * init mapv layer\n * @param map\n * @param options\n */\n\n\n createClass(Layer, [{\n key: \"init\",\n value: function init(map, options) {\n if (map) {\n this.map = map;\n this.context = this.options.context || '2d';\n this.getCanvasLayer();\n } else {\n throw new Error('not map object');\n }\n }\n\n /**\n * update layer\n * @param time\n * @private\n */\n\n }, {\n key: \"_canvasUpdate\",\n value: function _canvasUpdate(time) {\n this.render(this.canvasLayer.canvas, time);\n }\n\n /**\n * render layer\n * @param canvas\n * @param time\n * @returns {Layer}\n */\n\n }, {\n key: \"render\",\n value: function render(canvas, time) {\n if (!canvas) return;\n var map = this.map;\n var context = canvas.getContext(this.context);\n var animationOptions = this.options.animation;\n if (this.isEnabledTime()) {\n if (time === undefined) {\n clear(context);\n return this;\n }\n if (this.context === '2d') {\n context.save();\n context.globalCompositeOperation = 'destination-out';\n context.fillStyle = 'rgba(0, 0, 0, .1)';\n context.fillRect(0, 0, context.canvas.width, context.canvas.height);\n context.restore();\n }\n } else {\n clear(context);\n }\n\n if (this.context === '2d') {\n for (var key in this.options) {\n context[key] = this.options[key];\n }\n } else {\n context.clear(context.COLOR_BUFFER_BIT);\n }\n var dataGetOptions = {\n transferCoordinate: function transferCoordinate(coordinate) {\n var _pixel = map.lngLatToContainer(new AMap.LngLat(coordinate[0], coordinate[1]));\n return [_pixel['x'], _pixel['y']];\n }\n };\n\n if (time !== undefined) {\n dataGetOptions.filter = function (item) {\n var trails = animationOptions.trails || 10;\n if (time && item.time > time - trails && item.time < time) {\n return true;\n } else {\n return false;\n }\n };\n }\n\n var data = this.dataSet.get(dataGetOptions);\n this.processData(data);\n\n if (this.options.unit === 'm') {\n if (this.options.size) {\n this.options._size = this.options.size / zoomUnit;\n }\n if (this.options.width) {\n this.options._width = this.options.width / zoomUnit;\n }\n if (this.options.height) {\n this.options._height = this.options.height / zoomUnit;\n }\n } else {\n this.options._size = this.options.size;\n this.options._height = this.options.height;\n this.options._width = this.options.width;\n }\n\n this.drawContext(context, new DataSet(data), this.options, { x: 0, y: 0 });\n this.options.updateCallback && this.options.updateCallback(time);\n return this;\n }\n\n /**\n * get canvas layer\n */\n\n }, {\n key: \"getCanvasLayer\",\n value: function getCanvasLayer() {\n if (!this.canvasLayer.canvas && !this.layer_) {\n var canvas = this.canvasFunction();\n var bounds = this.map.getBounds();\n this.layer_ = new AMap.CanvasLayer({\n canvas: canvas,\n bounds: this.options.bounds || bounds,\n zooms: this.options.zooms || [0, 22]\n });\n this.layer_.setMap(this.map);\n this.map.on('mapmove', this.canvasFunction, this);\n this.map.on('zoomchange', this.canvasFunction, this);\n }\n }\n\n /**\n * canvas constructor\n * @returns {*}\n */\n\n }, {\n key: \"canvasFunction\",\n value: function canvasFunction() {\n var _ref = [this.map.getSize().width, this.map.getSize().height],\n width = _ref[0],\n height = _ref[1];\n\n if (!this.canvasLayer.canvas) {\n this.canvasLayer.canvas = createCanvas(width, height);\n } else {\n this.canvasLayer.canvas.width = width;\n this.canvasLayer.canvas.height = height;\n var bounds = this.map.getBounds();\n if (this.layer_) {\n this.layer_.setBounds(this.options.bounds || bounds);\n }\n }\n this.render(this.canvasLayer.canvas);\n return this.canvasLayer.canvas;\n }\n\n /**\n * remove layer\n */\n\n }, {\n key: \"removeLayer\",\n value: function removeLayer() {\n if (!this.map) return;\n this.unEvents();\n this.map.removeLayer(this.layer_);\n delete this.map;\n delete this.layer_;\n delete this.canvasLayer.canvas;\n }\n }, {\n key: \"getContext\",\n value: function getContext() {\n return this.canvasLayer.canvas.getContext(this.context);\n }\n\n /**\n * handle click event\n * @param event\n */\n\n }, {\n key: \"clickEvent\",\n value: function clickEvent(event) {\n var pixel = event.pixel;\n get(Layer.prototype.__proto__ || Object.getPrototypeOf(Layer.prototype), \"clickEvent\", this).call(this, pixel, event);\n }\n\n /**\n * handle mousemove/pointermove event\n * @param event\n */\n\n }, {\n key: \"mousemoveEvent\",\n value: function mousemoveEvent(event) {\n var pixel = event.pixel;\n get(Layer.prototype.__proto__ || Object.getPrototypeOf(Layer.prototype), \"mousemoveEvent\", this).call(this, pixel, event);\n }\n\n /**\n * add animator event\n */\n\n }, {\n key: \"addAnimatorEvent\",\n value: function addAnimatorEvent() {\n this.map.on('movestart', this.animatorMovestartEvent, this);\n this.map.on('moveend', this.animatorMoveendEvent, this);\n }\n\n /**\n * bind event\n */\n\n }, {\n key: \"onEvents\",\n value: function onEvents() {\n var map = this.map;\n this.unEvents();\n if (this.options.methods) {\n if (this.options.methods.click) {\n map.on('click', this.clickEvent, this);\n }\n if (this.options.methods.mousemove) {\n map.on('mousemove', this.mousemoveEvent, this);\n }\n }\n }\n\n /**\n * unbind events\n */\n\n }, {\n key: \"unEvents\",\n value: function unEvents() {\n var map = this.map;\n if (this.options.methods) {\n if (this.options.methods.click) {\n map.off('click', this.clickEvent, this);\n }\n if (this.options.methods.mousemove) {\n map.off('mousemove', this.mousemoveEvent, this);\n }\n }\n }\n }]);\n return Layer;\n}(BaseLayer);\n\n/**\n * MapV for openlayers (https://openlayers.org)\n * @author sakitam-fdd - https://github.com/sakitam-fdd\n */\n\n/**\n * create canvas\n * @param width\n * @param height\n * @returns {HTMLCanvasElement}\n */\nvar createCanvas$1 = function createCanvas(width, height) {\n if (typeof document !== 'undefined') {\n var canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\n } else {\n // create a new canvas instance in node.js\n // the canvas class needs to have a default constructor without any parameter\n }\n};\n\nvar Layer$8 = function (_BaseLayer) {\n inherits(Layer, _BaseLayer);\n\n function Layer() {\n var map = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var dataSet = arguments[1];\n var options = arguments[2];\n classCallCheck(this, Layer);\n\n var _this = possibleConstructorReturn(this, (Layer.__proto__ || Object.getPrototypeOf(Layer)).call(this, map, dataSet, options));\n\n _this.options = options;\n\n /**\n * internal\n * @type {{canvas: null, devicePixelRatio: number}}\n */\n _this.canvasLayer = {\n canvas: null,\n devicePixelRatio: window.devicePixelRatio\n\n /**\n * cavnas layer\n * @type {null}\n * @private\n */\n };_this.layer_ = null;\n\n /**\n * previous cursor\n * @type {undefined}\n * @private\n */\n _this.previousCursor_ = undefined;\n\n _this.init(map, options);\n _this.argCheck(options);\n return _this;\n }\n\n /**\n * init mapv layer\n * @param map\n * @param options\n */\n\n\n createClass(Layer, [{\n key: \"init\",\n value: function init(map, options) {\n if (map && map instanceof ol.Map) {\n this.$Map = map;\n this.context = this.options.context || '2d';\n this.getCanvasLayer();\n this.initDataRange(options);\n this.initAnimator();\n this.onEvents();\n } else {\n throw new Error('not map object');\n }\n }\n\n /**\n * update layer\n * @param time\n * @private\n */\n\n }, {\n key: \"_canvasUpdate\",\n value: function _canvasUpdate(time) {\n this.render(this.canvasLayer.canvas, time);\n }\n\n /**\n * render layer\n * @param canvas\n * @param time\n * @returns {Layer}\n */\n\n }, {\n key: \"render\",\n value: function render(canvas, time) {\n var map = this.$Map;\n var context = canvas.getContext(this.context);\n var animationOptions = this.options.animation;\n var _projection = this.options.hasOwnProperty('projection') ? this.options.projection : 'EPSG:4326';\n if (this.isEnabledTime()) {\n if (time === undefined) {\n clear(context);\n return this;\n }\n if (this.context === '2d') {\n context.save();\n context.globalCompositeOperation = 'destination-out';\n context.fillStyle = 'rgba(0, 0, 0, .1)';\n context.fillRect(0, 0, context.canvas.width, context.canvas.height);\n context.restore();\n }\n } else {\n clear(context);\n }\n\n if (this.context === '2d') {\n for (var key in this.options) {\n context[key] = this.options[key];\n }\n } else {\n context.clear(context.COLOR_BUFFER_BIT);\n }\n var dataGetOptions = {\n transferCoordinate: function transferCoordinate(coordinate) {\n return map.getPixelFromCoordinate(ol.proj.transform(coordinate, _projection, 'EPSG:4326'));\n }\n };\n\n if (time !== undefined) {\n dataGetOptions.filter = function (item) {\n var trails = animationOptions.trails || 10;\n if (time && item.time > time - trails && item.time < time) {\n return true;\n } else {\n return false;\n }\n };\n }\n\n var data = this.dataSet.get(dataGetOptions);\n this.processData(data);\n\n if (this.options.unit === 'm') {\n if (this.options.size) {\n this.options._size = this.options.size / zoomUnit;\n }\n if (this.options.width) {\n this.options._width = this.options.width / zoomUnit;\n }\n if (this.options.height) {\n this.options._height = this.options.height / zoomUnit;\n }\n } else {\n this.options._size = this.options.size;\n this.options._height = this.options.height;\n this.options._width = this.options.width;\n }\n\n this.drawContext(context, new DataSet(data), this.options, { x: 0, y: 0 });\n this.options.updateCallback && this.options.updateCallback(time);\n return this;\n }\n\n /**\n * get canvas layer\n */\n\n }, {\n key: \"getCanvasLayer\",\n value: function getCanvasLayer() {\n if (!this.canvasLayer.canvas && !this.layer_) {\n var extent = this.getMapExtent();\n this.layer_ = new ol.layer.Image({\n layerName: this.options.layerName,\n minResolution: this.options.minResolution,\n maxResolution: this.options.maxResolution,\n zIndex: this.options.zIndex,\n extent: extent,\n source: new ol.source.ImageCanvas({\n canvasFunction: this.canvasFunction.bind(this),\n projection: this.options.hasOwnProperty('projection') ? this.options.projection : 'EPSG:4326',\n ratio: this.options.hasOwnProperty('ratio') ? this.options.ratio : 1\n })\n });\n this.$Map.addLayer(this.layer_);\n this.$Map.un('precompose', this.reRender, this);\n this.$Map.on('precompose', this.reRender, this);\n }\n }\n\n /**\n * re render\n */\n\n }, {\n key: \"reRender\",\n value: function reRender() {\n if (!this.layer_) return;\n var extent = this.getMapExtent();\n this.layer_.setExtent(extent);\n }\n\n /**\n * canvas constructor\n * @param extent\n * @param resolution\n * @param pixelRatio\n * @param size\n * @param projection\n * @returns {*}\n */\n\n }, {\n key: \"canvasFunction\",\n value: function canvasFunction(extent, resolution, pixelRatio, size, projection) {\n if (!this.canvasLayer.canvas) {\n this.canvasLayer.canvas = createCanvas$1(size[0], size[1]);\n } else {\n this.canvasLayer.canvas.width = size[0];\n this.canvasLayer.canvas.height = size[1];\n }\n this.render(this.canvasLayer.canvas);\n return this.canvasLayer.canvas;\n }\n\n /**\n * get map current extent\n * @returns {Array}\n */\n\n }, {\n key: \"getMapExtent\",\n value: function getMapExtent() {\n var size = this.$Map.getSize();\n return this.$Map.getView().calculateExtent(size);\n }\n\n /**\n * add layer to map\n * @param map\n */\n\n }, {\n key: \"addTo\",\n value: function addTo(map) {\n this.init(map, this.options);\n }\n\n /**\n * remove layer\n */\n\n }, {\n key: \"removeLayer\",\n value: function removeLayer() {\n if (!this.$Map) return;\n this.unEvents();\n this.$Map.un('precompose', this.reRender, this);\n this.$Map.removeLayer(this.layer_);\n delete this.$Map;\n delete this.layer_;\n delete this.canvasLayer.canvas;\n }\n }, {\n key: \"getContext\",\n value: function getContext() {\n return this.canvasLayer.canvas.getContext(this.context);\n }\n\n /**\n * handle click event\n * @param event\n */\n\n }, {\n key: \"clickEvent\",\n value: function clickEvent(event) {\n var pixel = event.pixel;\n get(Layer.prototype.__proto__ || Object.getPrototypeOf(Layer.prototype), \"clickEvent\", this).call(this, {\n x: pixel[0],\n y: pixel[1]\n }, event);\n }\n\n /**\n * handle mousemove/pointermove event\n * @param event\n */\n\n }, {\n key: \"mousemoveEvent\",\n value: function mousemoveEvent(event) {\n var pixel = event.pixel;\n get(Layer.prototype.__proto__ || Object.getPrototypeOf(Layer.prototype), \"mousemoveEvent\", this).call(this, {\n x: pixel[0],\n y: pixel[1]\n }, event);\n }\n\n /**\n * add animator event\n */\n\n }, {\n key: \"addAnimatorEvent\",\n value: function addAnimatorEvent() {\n this.$Map.on('movestart', this.animatorMovestartEvent, this);\n this.$Map.on('moveend', this.animatorMoveendEvent, this);\n }\n\n /**\n * bind event\n */\n\n }, {\n key: \"onEvents\",\n value: function onEvents() {\n var map = this.$Map;\n this.unEvents();\n if (this.options.methods) {\n if (this.options.methods.click) {\n map.on('click', this.clickEvent, this);\n }\n if (this.options.methods.mousemove) {\n map.on('pointermove', this.mousemoveEvent, this);\n }\n }\n }\n\n /**\n * unbind events\n */\n\n }, {\n key: \"unEvents\",\n value: function unEvents() {\n var map = this.$Map;\n if (this.options.methods) {\n if (this.options.methods.click) {\n map.un('click', this.clickEvent, this);\n }\n if (this.options.methods.pointermove) {\n map.un('pointermove', this.mousemoveEvent, this);\n }\n }\n }\n\n /**\n * set map cursor\n * @param cursor\n * @param feature\n */\n\n }, {\n key: \"setDefaultCursor\",\n value: function setDefaultCursor(cursor, feature) {\n if (!this.$Map) return;\n var element = this.$Map.getTargetElement();\n if (feature) {\n if (element.style.cursor !== cursor) {\n this.previousCursor_ = element.style.cursor;\n element.style.cursor = cursor;\n }\n } else if (this.previousCursor_ !== undefined) {\n element.style.cursor = this.previousCursor_;\n this.previousCursor_ = undefined;\n }\n }\n }]);\n return Layer;\n}(BaseLayer);\n\n// https://github.com/SuperMap/iClient-JavaScript\n/**\n * @class MapVRenderer\n * @classdesc 地图渲染类。\n * @category Visualization MapV\n * @private\n * @extends mapv.BaseLayer\n * @param {L.Map} map - 待渲染的地图。\n * @param {L.Layer} layer - 待渲染的图层。\n * @param {DataSet} dataSet - 待渲染的数据集。\n * @param {Object} options - 渲染的参数。\n */\nvar MapVRenderer = function (_BaseLayer) {\n inherits(MapVRenderer, _BaseLayer);\n\n function MapVRenderer(map, layer, dataSet, options) {\n classCallCheck(this, MapVRenderer);\n\n var _this = possibleConstructorReturn(this, (MapVRenderer.__proto__ || Object.getPrototypeOf(MapVRenderer)).call(this, map, dataSet, options));\n\n if (!BaseLayer) {\n return possibleConstructorReturn(_this);\n }\n\n var self = _this;\n options = options || {};\n\n self.init(options);\n self.argCheck(options);\n _this.canvasLayer = layer;\n _this.clickEvent = _this.clickEvent.bind(_this);\n _this.mousemoveEvent = _this.mousemoveEvent.bind(_this);\n _this._moveStartEvent = _this.moveStartEvent.bind(_this);\n _this._moveEndEvent = _this.moveEndEvent.bind(_this);\n _this._zoomStartEvent = _this.zoomStartEvent.bind(_this);\n _this.bindEvent();\n return _this;\n }\n\n /**\n * @function MapVRenderer.prototype.clickEvent\n * @description 点击事件。\n * @param {Object} e - 触发对象。\n */\n\n\n createClass(MapVRenderer, [{\n key: 'clickEvent',\n value: function clickEvent(e) {\n var offset = this.map.containerPointToLayerPoint([0, 0]);\n var devicePixelRatio = this.devicePixelRatio = this.canvasLayer.devicePixelRatio = window.devicePixelRatio;\n var pixel = e.layerPoint;\n get(MapVRenderer.prototype.__proto__ || Object.getPrototypeOf(MapVRenderer.prototype), 'clickEvent', this).call(this, L.point((pixel.x - offset.x) / devicePixelRatio, (pixel.y - offset.y) / devicePixelRatio), e);\n }\n\n /**\n * @function MapVRenderer.prototype.mousemoveEvent\n * @description 鼠标移动事件。\n * @param {Object} e - 触发对象。\n */\n\n }, {\n key: 'mousemoveEvent',\n value: function mousemoveEvent(e) {\n var pixel = e.layerPoint;\n get(MapVRenderer.prototype.__proto__ || Object.getPrototypeOf(MapVRenderer.prototype), 'mousemoveEvent', this).call(this, pixel, e);\n }\n\n /**\n * @function MapVRenderer.prototype.bindEvent\n * @description 绑定鼠标移动和鼠标点击事件。\n * @param {Object} e - 触发对象。\n */\n\n }, {\n key: 'bindEvent',\n value: function bindEvent() {\n var map = this.map;\n\n if (this.options.methods) {\n if (this.options.methods.click) {\n map.on('click', this.clickEvent);\n }\n if (this.options.methods.mousemove) {\n map.on('mousemove', this.mousemoveEvent);\n }\n }\n this.map.on('movestart', this._moveStartEvent);\n this.map.on('moveend', this._moveEndEvent);\n this.map.on('zoomstart', this._zoomStartEvent);\n }\n /**\n * @function MapVRenderer.prototype.destroy\n * @description 释放资源。\n */\n\n }, {\n key: 'destroy',\n value: function destroy() {\n this.unbindEvent();\n this.clearData();\n this.animator && this.animator.stop();\n this.animator = null;\n this.canvasLayer = null;\n }\n /**\n * @function MapVRenderer.prototype.unbindEvent\n * @description 解绑鼠标移动和鼠标滑动触发的事件。\n * @param {Object} e - 触发对象。\n */\n\n }, {\n key: 'unbindEvent',\n value: function unbindEvent() {\n var map = this.map;\n\n if (this.options.methods) {\n if (this.options.methods.click) {\n map.off('click', this.clickEvent);\n }\n if (this.options.methods.mousemove) {\n map.off('mousemove', this.mousemoveEvent);\n }\n }\n this.map.off('movestart', this._moveStartEvent);\n this.map.off('moveend', this._moveEndEvent);\n this.map.off('zoomstart', this._zoomStartEvent);\n }\n\n /**\n * @function MapVRenderer.prototype.getContext\n * @description 获取信息。\n */\n\n }, {\n key: 'getContext',\n value: function getContext() {\n return this.canvasLayer.getCanvas().getContext(this.context);\n }\n\n /**\n * @function MapVRenderer.prototype.addData\n * @description 添加数据。\n * @param {Object} data - 待添加的数据。\n * @param {Object} options - 待添加的数据信息。\n */\n\n }, {\n key: 'addData',\n value: function addData(data, options) {\n var _data = data;\n if (data && data.get) {\n _data = data.get();\n }\n this.dataSet.add(_data);\n this.update({\n options: options\n });\n }\n\n /**\n * @function MapVRenderer.prototype.update\n * @description 更新图层。\n * @param {Object} opt - 待更新的数据。\n * @param {Object} opt.data - mapv数据集。\n * @param {Object} opt.options - mapv绘制参数。\n */\n\n }, {\n key: 'update',\n value: function update(opt) {\n var update = opt || {};\n var _data = update.data;\n if (_data && _data.get) {\n _data = _data.get();\n }\n if (_data != undefined) {\n this.dataSet.set(_data);\n }\n get(MapVRenderer.prototype.__proto__ || Object.getPrototypeOf(MapVRenderer.prototype), 'update', this).call(this, {\n options: update.options\n });\n }\n\n /**\n * @function MapVRenderer.prototype.getData\n * @description 获取数据\n */\n\n }, {\n key: 'getData',\n value: function getData() {\n return this.dataSet;\n }\n\n /**\n * @function MapVRenderer.prototype.removeData\n * @description 删除符合过滤条件的数据。\n * @param {Function} filter - 过滤条件。条件参数为数据项,返回值为 true,表示删除该元素;否则表示不删除。\n */\n\n }, {\n key: 'removeData',\n value: function removeData(_filter) {\n if (!this.dataSet) {\n return;\n }\n var newData = this.dataSet.get({\n filter: function filter(data) {\n return _filter != null && typeof _filter === \"function\" ? !_filter(data) : true;\n }\n });\n this.dataSet.set(newData);\n this.update({\n options: null\n });\n }\n\n /**\n * @function MapVRenderer.prototype.clearData\n * @description 清除数据\n */\n\n }, {\n key: 'clearData',\n value: function clearData() {\n this.dataSet && this.dataSet.clear();\n this.update({\n options: null\n });\n }\n }, {\n key: '_canvasUpdate',\n value: function _canvasUpdate(time) {\n if (!this.canvasLayer) {\n return;\n }\n\n var self = this;\n\n var animationOptions = self.options.animation;\n\n var context = this.getContext();\n var map = this.map;\n if (self.isEnabledTime()) {\n if (time === undefined) {\n this.clear(context);\n return;\n }\n if (this.context === '2d') {\n context.save();\n context.globalCompositeOperation = 'destination-out';\n context.fillStyle = 'rgba(0, 0, 0, .1)';\n context.fillRect(0, 0, context.canvas.width, context.canvas.height);\n context.restore();\n }\n } else {\n this.clear(context);\n }\n\n if (this.context === '2d') {\n for (var key in self.options) {\n context[key] = self.options[key];\n }\n } else {\n context.clear(context.COLOR_BUFFER_BIT);\n }\n\n if (self.options.minZoom && map.getZoom() < self.options.minZoom || self.options.maxZoom && map.getZoom() > self.options.maxZoom) {\n return;\n }\n\n var bounds = map.getBounds();\n //获取当前像素下的地理范围\n var dw = bounds.getEast() - bounds.getWest();\n var dh = bounds.getNorth() - bounds.getSouth();\n var mapCanvas = map.getSize();\n\n var resolutionX = dw / mapCanvas.x,\n resolutionY = dh / mapCanvas.y;\n //var centerPx = map.latLngToLayerPoint(map.getCenter());\n\n //获取屏幕左上角的地理坐标坐标\n //左上角屏幕坐标为0,0\n var topLeft = this.canvasLayer.getTopLeft();\n\n var topLeftPX = map.latLngToContainerPoint(topLeft);\n // 获取精确的像素坐标. https://github.com/SuperMap/iClient-JavaScript/blob/eacc26952b8915bba0122db751d766056c5fb24d/src/leaflet/core/Base.js\n // var topLeftPX = map.latLngToAccurateContainerPoint(topLeft);\n // var lopLeft = map.containerPointToLatLng([0, 0]);\n var dataGetOptions = {\n transferCoordinate: function transferCoordinate(coordinate) {\n var offset;\n if (self.context === '2d') {\n offset = map.latLngToContainerPoint(L.latLng(coordinate[1], coordinate[0]));\n // offset = map.latLngToAccurateContainerPoint(L.latLng(coordinate[1], coordinate[0]));\n } else {\n offset = {\n 'x': (coordinate[0] - topLeft.lng) / resolutionX,\n 'y': (topLeft.lat - coordinate[1]) / resolutionY\n };\n }\n var pixel = {\n x: offset.x - topLeftPX.x,\n y: offset.y - topLeftPX.y\n };\n return [pixel.x, pixel.y];\n }\n };\n\n if (time !== undefined) {\n dataGetOptions.filter = function (item) {\n var trails = animationOptions.trails || 10;\n return time && item.time > time - trails && item.time < time;\n };\n }\n\n var data = self.dataSet.get(dataGetOptions);\n\n this.processData(data);\n\n self.options._size = self.options.size;\n\n var worldPoint = map.latLngToContainerPoint(L.latLng(0, 0));\n var pixel = {\n x: worldPoint.x - topLeftPX.x,\n y: worldPoint.y - topLeftPX.y\n };\n this.drawContext(context, data, self.options, pixel);\n\n self.options.updateCallback && self.options.updateCallback(time);\n }\n }, {\n key: 'init',\n value: function init(options) {\n\n var self = this;\n\n self.options = options;\n\n this.initDataRange(options);\n\n this.context = self.options.context || '2d';\n\n if (self.options.zIndex) {\n this.canvasLayer && this.canvasLayer.setZIndex(self.options.zIndex);\n }\n\n this.initAnimator();\n }\n }, {\n key: 'addAnimatorEvent',\n value: function addAnimatorEvent() {}\n\n /**\n * @function MapVRenderer.prototype.moveStartEvent\n * @description 开始移动事件。\n */\n\n }, {\n key: 'moveStartEvent',\n value: function moveStartEvent() {\n var animationOptions = this.options.animation;\n if (this.isEnabledTime() && this.animator) {\n this.steps.step = animationOptions.stepsRange.start;\n this._hide();\n }\n }\n\n /**\n * @function MapVRenderer.prototype.moveEndEvent\n * @description 结束移动事件。\n */\n\n }, {\n key: 'moveEndEvent',\n value: function moveEndEvent() {\n this.canvasLayer.draw();\n this._show();\n }\n\n /**\n * @function MapVRenderer.prototype.zoomStartEvent\n * @description 隐藏渲染样式。\n */\n\n }, {\n key: 'zoomStartEvent',\n value: function zoomStartEvent() {\n this._hide();\n }\n\n /**\n * @function MapVRenderer.prototype.clear\n * @description 清除信息。\n * @param {string} context - 指定要清除的信息。\n */\n\n }, {\n key: 'clear',\n value: function clear(context) {\n context && context.clearRect && context.clearRect(0, 0, context.canvas.width, context.canvas.height);\n }\n }, {\n key: '_hide',\n value: function _hide() {\n this.canvasLayer.canvas.style.display = 'none';\n }\n }, {\n key: '_show',\n value: function _show() {\n this.canvasLayer.canvas.style.display = 'block';\n }\n\n /**\n * @function MapVRenderer.prototype.draw\n * @description 绘制渲染\n */\n\n }, {\n key: 'draw',\n value: function draw() {\n this.canvasLayer.draw();\n }\n }]);\n return MapVRenderer;\n}(BaseLayer);\n\nvar mapVLayer;\nif (typeof L !== 'undefined') {\n /**\n * @class mapVLayer\n * @classdesc MapV 图层。\n * @category Visualization MapV\n * @extends {L.Layer}\n * @param {mapv.DataSet} dataSet - MapV 图层数据集。\n * @param {Object} mapVOptions - MapV 图层参数。\n * @param {Object} options - 参数。\n * @param {string} [options.attributionPrefix] - 版权信息前缀。\n * @param {string} [options.attribution='© 2018 百度 MapV'] - 版权信息。\n * @fires mapVLayer#loaded\n */\n var MapVLayer = L.Layer.extend({\n\n options: {\n attributionPrefix: null,\n attribution: ''\n },\n\n initialize: function initialize(dataSet, mapVOptions, options) {\n options = options || {};\n this.dataSet = dataSet || {};\n this.mapVOptions = mapVOptions || {};\n this.render = this.render.bind(this);\n L.Util.setOptions(this, options);\n if (this.options.attributionPrefix) {\n this.options.attribution = this.options.attributionPrefix + this.options.attribution;\n }\n\n this.canvas = this._createCanvas();\n L.stamp(this);\n },\n\n /**\n * @private\n * @function mapVLayer.prototype.onAdd\n * @description 添加地图图层。\n * @param {L.Map} map - 要添加的地图。\n */\n onAdd: function onAdd(map) {\n this._map = map;\n var overlayPane = this.getPane();\n var container = this.container = L.DomUtil.create(\"div\", \"leaflet-layer leaflet-zoom-animated\", overlayPane);\n container.appendChild(this.canvas);\n var size = map.getSize();\n container.style.width = size.x + \"px\";\n container.style.height = size.y + \"px\";\n this.renderer = new MapVRenderer(map, this, this.dataSet, this.mapVOptions);\n this.draw();\n /**\n * @event mapVLayer#loaded\n * @description 图层添加完成之后触发。\n */\n this.fire(\"loaded\");\n },\n\n // _hide: function () {\n // this.canvas.style.display = 'none';\n // },\n\n // _show: function () {\n // this.canvas.style.display = 'block';\n // },\n\n /**\n * @private\n * @function mapVLayer.prototype.onRemove\n * @description 删除地图图层。\n */\n onRemove: function onRemove() {\n L.DomUtil.remove(this.container);\n this.renderer.destroy();\n },\n\n /**\n * @function mapVLayer.prototype.addData\n * @description 追加数据。\n * @param {Object} data - 要追加的数据。\n * @param {Object} options - 要追加的值。\n */\n addData: function addData(data, options) {\n this.renderer.addData(data, options);\n },\n\n /**\n * @function mapVLayer.prototype.update\n * @description 更新图层。\n * @param {Object} opt - 待更新的数据。\n * @param {Object} data - mapv 数据集。\n * @param {Object} options - mapv 绘制参数。\n */\n update: function update(opt) {\n this.renderer.update(opt);\n },\n\n /**\n * @function mapVLayer.prototype.getData\n * @description 获取数据。\n * @returns {mapv.DataSet} mapv 数据集。\n */\n getData: function getData() {\n if (this.renderer) {\n this.dataSet = this.renderer.getData();\n }\n return this.dataSet;\n },\n\n /**\n * @function mapVLayer.prototype.removeData\n * @description 删除符合过滤条件的数据。\n * @param {Function} filter - 过滤条件。条件参数为数据项,返回值为 true,表示删除该元素;否则表示不删除。\n * @example\n * filter=function(data){\n * if(data.id==\"1\"){\n * return true\n * }\n * return false;\n * }\n */\n removeData: function removeData(filter) {\n this.renderer && this.renderer.removeData(filter);\n },\n\n /**\n * @function mapVLayer.prototype.clearData\n * @description 清除数据。\n */\n clearData: function clearData() {\n this.renderer.clearData();\n },\n\n /**\n * @function mapVLayer.prototype.draw\n * @description 绘制图层。\n */\n draw: function draw() {\n return this._reset();\n },\n\n /**\n * @function mapVLayer.prototype.setZIndex\n * @description 设置 canvas 层级。\n * @param {number} zIndex - canvas 层级。\n */\n setZIndex: function setZIndex(zIndex) {\n this.canvas.style.zIndex = zIndex;\n },\n\n /**\n * @function mapVLayer.prototype.render\n * @description 渲染。\n */\n render: function render() {\n this.renderer._canvasUpdate();\n },\n\n /**\n * @function mapVLayer.prototype.getCanvas\n * @description 获取 canvas。\n * @returns {HTMLElement} 返回 mapV 图层包含的 canvas 对象。\n */\n getCanvas: function getCanvas() {\n return this.canvas;\n },\n\n /**\n * @function mapVLayer.prototype.getContainer\n * @description 获取容器。\n * @returns {HTMLElement} 返回包含 mapV 图层的 dom 对象。\n */\n getContainer: function getContainer() {\n return this.container;\n },\n\n /**\n * @function mapVLayer.prototype.getTopLeft\n * @description 获取左上角坐标。\n * @returns {L.Bounds} 返回左上角坐标。\n */\n getTopLeft: function getTopLeft() {\n var map = this._map;\n var topLeft;\n if (map) {\n var bounds = map.getBounds();\n topLeft = bounds.getNorthWest();\n }\n return topLeft;\n },\n\n _createCanvas: function _createCanvas() {\n var canvas = document.createElement('canvas');\n canvas.style.position = 'absolute';\n canvas.style.top = 0 + \"px\";\n canvas.style.left = 0 + \"px\";\n canvas.style.pointerEvents = \"none\";\n canvas.style.zIndex = this.options.zIndex || 600;\n var global$2 = typeof window === 'undefined' ? {} : window;\n var devicePixelRatio = this.devicePixelRatio = global$2.devicePixelRatio;\n if (!this.mapVOptions.context || this.mapVOptions.context === '2d') {\n canvas.getContext('2d').scale(devicePixelRatio, devicePixelRatio);\n }\n return canvas;\n },\n\n _resize: function _resize() {\n var canvas = this.canvas;\n if (!canvas) {\n return;\n }\n\n var map = this._map;\n var size = map.getSize();\n canvas.width = size.x;\n canvas.height = size.y;\n canvas.style.width = size.x + 'px';\n canvas.style.height = size.y + 'px';\n var bounds = map.getBounds();\n var topLeft = map.latLngToLayerPoint(bounds.getNorthWest());\n L.DomUtil.setPosition(canvas, topLeft);\n },\n\n _reset: function _reset() {\n this._resize();\n this._render();\n },\n redraw: function redraw() {\n this._resize();\n this._render();\n },\n _render: function _render() {\n this.render();\n }\n\n });\n\n mapVLayer = function mapVLayer(dataSet, mapVOptions, options) {\n return new MapVLayer(dataSet, mapVOptions, options);\n };\n}\nvar mapVLayer$1 = mapVLayer;\n\nvar MapVRenderer$1 = function (_BaseLayer) {\n inherits(MapVRenderer, _BaseLayer);\n\n /**\n * Creates an instance of MapVRenderer.\n * @param {*} viewer cesium viewer\n * @param {*} dataset mapv dataset\n * @param {*} option mapvOptions\n * @param {*} mapVLayer\n * @memberof MapVRenderer\n */\n function MapVRenderer(viewer, dataset, option, mapVLayer) {\n classCallCheck(this, MapVRenderer);\n\n var _this = possibleConstructorReturn(this, (MapVRenderer.__proto__ || Object.getPrototypeOf(MapVRenderer)).call(this, viewer, dataset, option));\n\n if (!BaseLayer) {\n return possibleConstructorReturn(_this);\n }\n _this.map = viewer, _this.scene = viewer.scene, _this.dataSet = dataset;\n option = option || {}, _this.init(option), _this.argCheck(option), _this.initDevicePixelRatio(), _this.canvasLayer = mapVLayer, _this.stopAniamation = !1, _this.animation = option.animation, _this.clickEvent = _this.clickEvent.bind(_this), _this.mousemoveEvent = _this.mousemoveEvent.bind(_this), _this.bindEvent();\n return _this;\n }\n\n createClass(MapVRenderer, [{\n key: \"initDevicePixelRatio\",\n value: function initDevicePixelRatio() {\n this.devicePixelRatio = window.devicePixelRatio || 1;\n }\n }, {\n key: \"clickEvent\",\n value: function clickEvent(t) {\n var e = t.point;\n get(MapVRenderer.prototype.__proto__ || Object.getPrototypeOf(MapVRenderer.prototype), \"clickEvent\", this).call(this, e, t);\n }\n }, {\n key: \"mousemoveEvent\",\n value: function mousemoveEvent(t) {\n var e = t.point;\n get(MapVRenderer.prototype.__proto__ || Object.getPrototypeOf(MapVRenderer.prototype), \"mousemoveEvent\", this).call(this, e, t);\n }\n }, {\n key: \"addAnimatorEvent\",\n value: function addAnimatorEvent() {}\n }, {\n key: \"animatorMovestartEvent\",\n value: function animatorMovestartEvent() {\n var t = this.options.animation;\n this.isEnabledTime() && this.animator && (this.steps.step = t.stepsRange.start);\n }\n }, {\n key: \"animatorMoveendEvent\",\n value: function animatorMoveendEvent() {\n this.isEnabledTime() && this.animator;\n }\n }, {\n key: \"bindEvent\",\n value: function bindEvent() {\n this.map;\n this.options.methods && (this.options.methods.click, this.options.methods.mousemove);\n }\n }, {\n key: \"unbindEvent\",\n value: function unbindEvent() {\n var t = this.map;\n this.options.methods && (this.options.methods.click && t.off(\"click\", this.clickEvent), this.options.methods.mousemove && t.off(\"mousemove\", this.mousemoveEvent));\n }\n }, {\n key: \"getContext\",\n value: function getContext() {\n return this.canvasLayer.canvas.getContext(this.context);\n }\n }, {\n key: \"init\",\n value: function init(t) {\n this.options = t, this.initDataRange(t), this.context = this.options.context || \"2d\", this.options.zIndex && this.canvasLayer && this.canvasLayer.setZIndex(this.options.zIndex), this.initAnimator();\n }\n }, {\n key: \"_canvasUpdate\",\n value: function _canvasUpdate(t) {\n this.map;\n var e = this.scene;\n if (this.canvasLayer && !this.stopAniamation) {\n var i = this.options.animation,\n n = this.getContext();\n if (this.isEnabledTime()) {\n if (void 0 === t) return void this.clear(n);\n \"2d\" === this.context && (n.save(), n.globalCompositeOperation = \"destination-out\", n.fillStyle = \"rgba(0, 0, 0, .1)\", n.fillRect(0, 0, n.canvas.width, n.canvas.height), n.restore());\n } else this.clear(n);\n if (\"2d\" === this.context) for (var o in this.options) {\n n[o] = this.options[o];\n } else n.clear(n.COLOR_BUFFER_BIT);\n var a = {\n transferCoordinate: function transferCoordinate(t) {\n var i = Cesium.Cartesian3.fromDegrees(t[0], t[1]),\n n = Cesium.SceneTransforms.wgs84ToWindowCoordinates(e, i);\n return void 0 == n ? [-1, -1] : [n.x, n.y];\n }\n };\n void 0 !== t && (a.filter = function (e) {\n var n = i.trails || 10;\n return !!(t && e.time > t - n && e.time < t);\n });\n var c = this.dataSet.get(a);\n this.processData(c), \"m\" == this.options.unit && this.options.size, this.options._size = this.options.size;\n var h = Cesium.SceneTransforms.wgs84ToWindowCoordinates(e, Cesium.Cartesian3.fromDegrees(0, 0));\n this.drawContext(n, new DataSet(c), this.options, h), this.options.updateCallback && this.options.updateCallback(t);\n }\n }\n }, {\n key: \"updateData\",\n value: function updateData(t, e) {\n var i = t;\n i && i.get && (i = i.get()), void 0 != i && this.dataSet.set(i), get(MapVRenderer.prototype.__proto__ || Object.getPrototypeOf(MapVRenderer.prototype), \"update\", this).call(this, {\n options: e\n });\n }\n }, {\n key: \"addData\",\n value: function addData(t, e) {\n var i = t;\n t && t.get && (i = t.get()), this.dataSet.add(i), this.update({\n options: e\n });\n }\n }, {\n key: \"getData\",\n value: function getData() {\n return this.dataSet;\n }\n }, {\n key: \"removeData\",\n value: function removeData(t) {\n if (this.dataSet) {\n var e = this.dataSet.get({\n filter: function filter(e) {\n return null == t || \"function\" != typeof t || !t(e);\n }\n });\n this.dataSet.set(e), this.update({\n options: null\n });\n }\n }\n }, {\n key: \"clearData\",\n value: function clearData() {\n this.dataSet && this.dataSet.clear(), this.update({\n options: null\n });\n }\n }, {\n key: \"draw\",\n value: function draw() {\n this.canvasLayer.draw();\n }\n }, {\n key: \"clear\",\n value: function clear(t) {\n t && t.clearRect && t.clearRect(0, 0, t.canvas.width, t.canvas.height);\n }\n }]);\n return MapVRenderer;\n}(BaseLayer);\n\nvar mapVLayer$2;\nif (typeof Cesium !== 'undefined') {\n var defIndex = 0;\n var r = Cesium;\n\n var MapVLayer$1 = function () {\n /**\n *Creates an instance of MapVLayer.\n * @param {*} viewer\n * @param {*} dataset\n * @param {*} options\n * @param {*} container default viewer.container\n * @memberof MapVLayer\n */\n function MapVLayer(viewer, dataset, options, container) {\n classCallCheck(this, MapVLayer);\n\n this.map = viewer, this.scene = viewer.scene, this.mapvBaseLayer = new MapVRenderer$1(viewer, dataset, options, this), this.mapVOptions = options, this.initDevicePixelRatio(), this.canvas = this._createCanvas(), this.render = this.render.bind(this);\n if (container) {\n this.container = container;\n } else {\n var inner = viewer.container.querySelector('.cesium-viewer-cesiumWidgetContainer');\n this.container = inner ? inner : viewer.container;\n }\n this.addInnerContainer();\n\n // void 0 != container ? (this.container = container,\n // container.appendChild(this.canvas)) : (this.container = viewer.container,\n // this.addInnerContainer()),\n this.bindEvent();\n this._reset();\n }\n\n createClass(MapVLayer, [{\n key: 'initDevicePixelRatio',\n value: function initDevicePixelRatio() {\n this.devicePixelRatio = window.devicePixelRatio || 1;\n }\n }, {\n key: 'addInnerContainer',\n value: function addInnerContainer() {\n this.container.appendChild(this.canvas);\n }\n }, {\n key: 'bindEvent',\n value: function bindEvent() {\n var that = this;\n\n this.innerMoveStart = this.moveStartEvent.bind(this);\n this.innerMoveEnd = this.moveEndEvent.bind(this);\n this.scene.camera.moveStart.addEventListener(this.innerMoveStart, this);\n this.scene.camera.moveEnd.addEventListener(this.innerMoveEnd, this);\n\n var t = new Cesium.ScreenSpaceEventHandler(this.scene.canvas);\n\n t.setInputAction(function (t) {\n that.innerMoveEnd();\n }, Cesium.ScreenSpaceEventType.LEFT_UP);\n t.setInputAction(function (t) {\n that.innerMoveEnd();\n }, Cesium.ScreenSpaceEventType.MIDDLE_UP);\n this.handler = t;\n }\n }, {\n key: 'unbindEvent',\n value: function unbindEvent() {\n this.scene.camera.moveStart.removeEventListener(this.innerMoveStart, this);\n this.scene.camera.moveEnd.removeEventListener(this.innerMoveEnd, this);\n this.scene.postRender.removeEventListener(this._reset, this);\n this.handler && (this.handler.destroy(), this.handler = null);\n }\n }, {\n key: 'moveStartEvent',\n value: function moveStartEvent() {\n if (this.mapvBaseLayer) {\n this.mapvBaseLayer.animatorMovestartEvent();\n this.scene.postRender.addEventListener(this._reset, this);\n }\n }\n }, {\n key: 'moveEndEvent',\n value: function moveEndEvent() {\n if (this.mapvBaseLayer) {\n this.scene.postRender.removeEventListener(this._reset, this), this.mapvBaseLayer.animatorMoveendEvent();\n this._reset();\n }\n }\n }, {\n key: 'zoomStartEvent',\n value: function zoomStartEvent() {\n this._unvisiable();\n }\n }, {\n key: 'zoomEndEvent',\n value: function zoomEndEvent() {\n this._unvisiable();\n }\n }, {\n key: 'addData',\n value: function addData(t, e) {\n void 0 != this.mapvBaseLayer && this.mapvBaseLayer.addData(t, e);\n }\n }, {\n key: 'updateData',\n value: function updateData(t, e) {\n void 0 != this.mapvBaseLayer && this.mapvBaseLayer.updateData(t, e);\n }\n }, {\n key: 'getData',\n value: function getData() {\n return this.mapvBaseLayer && (this.dataSet = this.mapvBaseLayer.getData()), this.dataSet;\n }\n }, {\n key: 'removeData',\n value: function removeData(t) {\n void 0 != this.mapvBaseLayer && this.mapvBaseLayer && this.mapvBaseLayer.removeData(t);\n }\n }, {\n key: 'removeAllData',\n value: function removeAllData() {\n void 0 != this.mapvBaseLayer && this.mapvBaseLayer.clearData();\n }\n }, {\n key: '_visiable',\n value: function _visiable() {\n return this.canvas.style.display = \"block\", this;\n }\n }, {\n key: '_unvisiable',\n value: function _unvisiable() {\n return this.canvas.style.display = \"none\", this;\n }\n }, {\n key: '_createCanvas',\n value: function _createCanvas() {\n var t = document.createElement(\"canvas\");\n t.id = this.mapVOptions.layerid || \"mapv\" + defIndex++, t.style.position = \"absolute\", t.style.top = \"0px\", t.style.left = \"0px\", t.style.pointerEvents = \"none\", t.style.zIndex = this.mapVOptions.zIndex || 0, t.width = parseInt(this.map.canvas.width), t.height = parseInt(this.map.canvas.height), t.style.width = this.map.canvas.style.width, t.style.height = this.map.canvas.style.height;\n var e = this.devicePixelRatio;\n return \"2d\" == this.mapVOptions.context && t.getContext(this.mapVOptions.context).scale(e, e), t;\n }\n }, {\n key: '_reset',\n value: function _reset() {\n this.resizeCanvas();\n this.fixPosition();\n this.onResize();\n this.render();\n }\n }, {\n key: 'draw',\n value: function draw() {\n this._reset();\n }\n }, {\n key: 'show',\n value: function show() {\n this._visiable();\n }\n }, {\n key: 'hide',\n value: function hide() {\n this._unvisiable();\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.remove();\n }\n }, {\n key: 'remove',\n value: function remove() {\n void 0 != this.mapvBaseLayer && (this.removeAllData(), this.mapvBaseLayer.clear(this.mapvBaseLayer.getContext()), this.mapvBaseLayer = void 0, this.canvas.parentElement.removeChild(this.canvas));\n }\n }, {\n key: 'update',\n value: function update(t) {\n void 0 != t && this.updateData(t.data, t.options);\n }\n }, {\n key: 'resizeCanvas',\n value: function resizeCanvas() {\n if (void 0 != this.canvas && null != this.canvas) {\n var t = this.canvas;\n t.style.position = \"absolute\", t.style.top = \"0px\", t.style.left = \"0px\", t.width = parseInt(this.map.canvas.width), t.height = parseInt(this.map.canvas.height), t.style.width = this.map.canvas.style.width, t.style.height = this.map.canvas.style.height;\n }\n }\n }, {\n key: 'fixPosition',\n value: function fixPosition() {}\n }, {\n key: 'onResize',\n value: function onResize() {}\n }, {\n key: 'render',\n value: function render() {\n void 0 != this.mapvBaseLayer && this.mapvBaseLayer._canvasUpdate();\n }\n }]);\n return MapVLayer;\n }();\n\n mapVLayer$2 = function mapVLayer(viewer, dataSet, mapVOptions, container) {\n return new MapVLayer$1(viewer, dataSet, mapVOptions, container);\n };\n}\n\nvar mapVLayer$3 = mapVLayer$2;\n\n/**\n * @author kyle / http://nikai.us/\n */\n\nvar geojson = {\n getDataSet: function getDataSet(geoJson) {\n\n var data = [];\n var features = geoJson.features;\n if (features) {\n for (var i = 0; i < features.length; i++) {\n var feature = features[i];\n var geometry = feature.geometry;\n var properties = feature.properties;\n var item = {};\n for (var key in properties) {\n item[key] = properties[key];\n }\n item.geometry = geometry;\n data.push(item);\n }\n }\n return new DataSet(data);\n }\n};\n\n/**\n * @author kyle / http://nikai.us/\n */\n\nvar csv = {\n CSVToArray: function CSVToArray(strData, strDelimiter) {\n // Check to see if the delimiter is defined. If not,\n // then default to comma.\n strDelimiter = strDelimiter || \",\";\n\n // Create a regular expression to parse the CSV values.\n var objPattern = new RegExp(\n // Delimiters.\n \"(\\\\\" + strDelimiter + \"|\\\\r?\\\\n|\\\\r|^)\" +\n\n // Quoted fields.\n \"(?:\\\"([^\\\"]*(?:\\\"\\\"[^\\\"]*)*)\\\"|\" +\n\n // Standard fields.\n \"([^\\\"\\\\\" + strDelimiter + \"\\\\r\\\\n]*))\", \"gi\");\n\n // Create an array to hold our data. Give the array\n // a default empty first row.\n var arrData = [[]];\n\n // Create an array to hold our individual pattern\n // matching groups.\n var arrMatches = null;\n\n // Keep looping over the regular expression matches\n // until we can no longer find a match.\n while (arrMatches = objPattern.exec(strData)) {\n\n // Get the delimiter that was found.\n var strMatchedDelimiter = arrMatches[1];\n\n // Check to see if the given delimiter has a length\n // (is not the start of string) and if it matches\n // field delimiter. If id does not, then we know\n // that this delimiter is a row delimiter.\n if (strMatchedDelimiter.length && strMatchedDelimiter !== strDelimiter) {\n\n // Since we have reached a new row of data,\n // add an empty row to our data array.\n arrData.push([]);\n }\n\n var strMatchedValue;\n\n // Now that we have our delimiter out of the way,\n // let's check to see which kind of value we\n // captured (quoted or unquoted).\n if (arrMatches[2]) {\n\n // We found a quoted value. When we capture\n // this value, unescape any double quotes.\n strMatchedValue = arrMatches[2].replace(new RegExp(\"\\\"\\\"\", \"g\"), \"\\\"\");\n } else {\n\n // We found a non-quoted value.\n strMatchedValue = arrMatches[3];\n }\n\n // Now that we have our value string, let's add\n // it to the data array.\n arrData[arrData.length - 1].push(strMatchedValue);\n }\n\n // Return the parsed data.\n return arrData;\n },\n\n getDataSet: function getDataSet(csvStr, split) {\n\n var arr = this.CSVToArray(csvStr, split || ',');\n\n var data = [];\n\n var header = arr[0];\n\n for (var i = 1; i < arr.length - 1; i++) {\n var line = arr[i];\n var item = {};\n for (var j = 0; j < line.length; j++) {\n var value = line[j];\n if (header[j] == 'geometry') {\n value = JSON.parse(value);\n }\n item[header[j]] = value;\n }\n data.push(item);\n }\n\n return new DataSet(data);\n }\n};\n\nexports.version = version;\nexports.canvasClear = clear;\nexports.canvasResolutionScale = resolutionScale$1;\nexports.canvasDrawSimple = drawSimple;\nexports.canvasDrawHeatmap = drawHeatmap;\nexports.canvasDrawGrid = drawGrid;\nexports.canvasDrawHoneycomb = drawHoneycomb;\nexports.webglDrawSimple = webglDrawSimple;\nexports.webglDrawPoint = point;\nexports.webglDrawLine = line;\nexports.webglDrawPolygon = polygon;\nexports.utilCityCenter = cityCenter;\nexports.utilCurve = curve;\nexports.utilForceEdgeBundling = ForceEdgeBundling;\nexports.utilDataRangeIntensity = Intensity;\nexports.utilDataRangeCategory = Category;\nexports.utilDataRangeChoropleth = Choropleth;\nexports.Map = MapHelper;\nexports.baiduMapCanvasLayer = CanvasLayer;\nexports.baiduMapAnimationLayer = AnimationLayer;\nexports.baiduMapLayer = Layer;\nexports.googleMapCanvasLayer = CanvasLayer$2;\nexports.googleMapLayer = Layer$2;\nexports.MaptalksLayer = Layer$5;\nexports.AMapLayer = Layer$6;\nexports.OpenlayersLayer = Layer$8;\nexports.leafletMapLayer = mapVLayer$1;\nexports.cesiumMapLayer = mapVLayer$3;\nexports.DataSet = DataSet;\nexports.geojson = geojson;\nexports.csv = csv;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n"],"sourceRoot":""}