(function(a){function b(b){function e(a){if(a._containertype)return a._containertype;var b=g.findIndex(function(b){return!!b.find(function(b){return a instanceof b})});if(b!=-1)return b=f[b],a._containertype=b}if(c)return c(b);var f=Object.keys(a.Visuals),g=f.map(function(b){return Object.keys(a.Visuals[b]).map(function(c){return a.Visuals[b][c]})});c=e;return e(b)}if(!a)throw Error("\u8bf7\u5148\u5f15\u5165GeoGlobe\u6846\u67b6\uff01");var c=null;mapboxgl.FreeCRSMap.prototype._visualsContainers=[]; mapboxgl.FreeCRSMap.prototype.addVisualLayer=function(c){var e=b(c);if(!e)throw"\u975e\u53ef\u89c6\u5316\u56fe\u5c42\uff01";this._visualsContainers[e]||(this._visualsContainers[e]=new a.Visuals[e],this._visualsContainers[e].addTo(this));c.addTo(this._visualsContainers[e]);this._visualsContainers[e].render()};mapboxgl.FreeCRSMap.prototype.removeVisualLayer=function(a){typeof a==="string"&&Object.values(this._visualsContainers).forEach(function(b){b.removeLayer(a)})}})(GeoGlobe||window.GeoGlobe); GeoGlobe.ElementContainer=GeoGlobe.Class4OL({id:null,map:null,initialize:function(a){this.id=GeoGlobe.Util.createUniqueID(this.CLASS_NAME+"_");GeoGlobe.Util.extend(this,a)},addTo:function(a){this.map=a;var b=a.getCanvasContainer();if(!a.eleContainer)b=GeoGlobe.DOM.create("div","geoglobe-element-container",b),b.style.width=a.getCanvas().style.width,b.style.height=a.getCanvas().style.height,b.style.position="absolute",a.eleContainer=b;this.container=GeoGlobe.DOM.create("div",null,a.eleContainer);this.container.style.width= a.getCanvas().style.width;this.container.style.height=a.getCanvas().style.height;this.container.style.position="absolute";this._resize=GeoGlobe.Function.bind(this._resize,this);a.on("resize",this._resize)},_resize:function(){var a=this.map;a.eleContainer.style.width=a.getCanvas().style.width;a.eleContainer.style.height=a.getCanvas().style.height;this.container.style.width=a.getCanvas().style.width;this.container.style.height=a.getCanvas().style.height},getElMap:function(){return this.elmap},remove:function(){this.map.off("resize", this._resize)},CLASS_NAME:"GeoGlobe.ElementContainer"}); GeoGlobe.MaptalksEle=GeoGlobe.Class4OL(GeoGlobe.ElementContainer,{map:null,container:null,elmap:null,elmapOptions:null,initialize:function(){GeoGlobe.ElementContainer.prototype.initialize.apply(this,arguments)},addTo:function(){GeoGlobe.ElementContainer.prototype.addTo.apply(this,arguments);this.container.id=this.id;this.container.className="geoglobe-maptalks-container";if(window.maptalks&&window.maptalks.Map){GeoGlobe.MaptalksEle.overrideMapTalksFunc();var a=this.map.getCenter(),a=GeoGlobe.Util.extend({zoom:this.map.getZoom()+ 1,center:[a.lng,a.lat]},this.elmapOptions);this.elmap=new maptalks.Map(this.container.id,a);this._bindEvent()}else console.log("\u4f7f\u7528\u524d\u7f6emaptalks\u5bb9\u5668\uff0c\u9700\u5f15\u5165maptalks\u5730\u56fe\u5e93\u3002")},_bindEvent:function(){var a=this.map;this._movestart=GeoGlobe.Function.bind(function(){if(this._zooming)this._zooming=!1,this._iszoomend=!0},this);this._move=GeoGlobe.Function.bind(function(){if(!(this._zooming==!0||this._rotating==!0))this.elmap._moving=!0,this.syncElmapCenter()}, this);this._moveend=GeoGlobe.Function.bind(function(a){this.elmap._moving=!1;this._rotating=this._zooming=this.elmap._dragRotating=!1;var c=this.map.getZoom();if(!this.map.isIntScrollZoom&&this._latelyZoom&&this._latelyZoom!=c)this._latelyZoom=c=this._latelyZoom2||c.lng-d.x<-2)&&this.syncElmapCenter()},this);this._zoomend=GeoGlobe.Function.bind(function(){this._zooming=!1;this._iszoomend=!0},this);a.on("movestart", this._movestart);a.on("move",this._move);a.on("moveend",this._moveend);a.on("rotatestart",this._rotatestart);a.on("rotate",this._rotate);a.on("zoomstart",this._zoomstart);a.on("zoom",this._zoom);a.on("zoomend",this._zoomend)},_resize:function(){GeoGlobe.ElementContainer.prototype._resize.apply(this,arguments);this.elmap.checkSize()},syncElmapCenter:function(){var a=this.map.getCenter(),a=[a.lng,a.lat];if(!a)return!1;a=new maptalks.Coordinate(a);this.elmap._setPrjCenter(this.elmap.getProjection().project(a))}, syncElmapRotate:function(){var a=this.map;this.elmap&&(a.getBearing(),a.getPitch(),this.elmap.setView({bearing:a.getBearing(),pitch:a.getPitch()}))},_syncElmap:function(){var a=this.map;if(this.elmap){var b=a.getCenter();a.getZoom();a.getBearing();a.getPitch();this.elmap.setView({center:[b.lng,b.lat],zoom:a.getZoom()+1,bearing:a.getBearing(),pitch:a.getPitch()})}},remove:function(){GeoGlobe.ElementContainer.prototype.remove.apply(this,arguments);var a=this.map;a.off("movestart",this._movestart);a.off("move", this._move);a.off("moveend",this._moveend);a.off("rotatestart",this._rotatestart);a.off("rotate",this._rotate);a.off("zoomstart",this._zoomstart);a.off("zoom",this._zoom);a.off("zoomend",this._zoomend);this.container.parentNode.removeChild(this.container);this.container=null;this.elmap.remove();this.map=this.elmap=null},CLASS_NAME:"GeoGlobe.MaptalksEle"}); GeoGlobe.MaptalksEle.overrideMapTalksFunc=function(){if(window.maptalks&&window.maptalks.Map)maptalks.Map.prototype.addHandler=function(a,b){if(a==="draggable"||a==="touchZoom"||a==="boxZoom"||a==="doubleClickZoom"||a==="scrollWheelZoom")return this;if(!b)return this;if(!this._handlers)this._handlers=[];if(this[a])return this[a].enable(),this;var c=this[a]=new b(this);this._handlers.push(c);this.options[a]&&c.enable();return this}}; GeoGlobe.Visuals=GeoGlobe.Class4OL(GeoGlobe.ElementContainer,{initialize:function(){GeoGlobe.ElementContainer.prototype.initialize.apply(this,arguments)},addTo:function(a){a._visuals=a._visuals||[];a._visuals.push(this);GeoGlobe.ElementContainer.prototype.addTo.apply(this,arguments)},remove:function(){var a=this.map;a._visuals.splice(a._visuals.indexOf(this),1);a.eleContainer.removeChild(this.container);GeoGlobe.ElementContainer.prototype.remove.apply(this,arguments)}}); GeoGlobe.Visuals=GeoGlobe.Class4OL(GeoGlobe.Visuals,mapboxgl.Evented); GeoGlobe.Visuals.Three=GeoGlobe.Class4OL(GeoGlobe.Visuals,{type:"three",map:null,container:null,layers:[],_threebox:null,_raycaster:null,_raycAsix:null,initialize:function(){GeoGlobe.Visuals.prototype.initialize.apply(this,arguments);this.layers=[];!window.THREE||!window.Threebox?console.error("\u4f7f\u7528three\u53ef\u89c6\u5316\u56fe\u5c42\u524d\uff0c\u9700\u5f15\u5165threejs\u5e93\uff01"):(this._raycaster=new THREE.Raycaster,this._raycAsix=new THREE.Vector2)},addTo:function(a,b){GeoGlobe.Visuals.prototype.addTo.apply(this, arguments);this.container.className="geoglobe-three-container";this._threebox=new Threebox(this.map,b?b:this.container);this._threebox.setupDefaultLights();this._bindEvent()},render:function(){if(this._order)for(var a=0;a0)for(var b=0;b0&&this.fire("overlayerhover",{param:{info:this._getSymbolObject(b[0].object),pickedInfos:b,event:a}})},_onClick:function(a){var b=this._computerIntersect(a);b.length>0&&this.fire("overlayerclick",{param:{info:this._getSymbolObject(b[0].object),pickedInfos:b,event:a}})},_computerIntersect:function(a){this._raycAsix.x=(a.originalEvent.pageX-this.container.offsetLeft)/this.container.offsetWidth*2-1;this._raycAsix.y=-((a.originalEvent.pageY- this.container.offsetTop)/this.container.offsetHeight)*2+1;this._raycaster.setFromCamera(this._raycAsix,this._threebox.camera);return this._raycaster.intersectObjects(this._threebox.scene.children,!0)},_getSymbolObject:function(a){if(!a||!a.userData)return a;return a.userData.attributes?a:this._getSymbolObject(a.parent)},remove:function(){if(this.container){for(;this.layers.length;)this.removeLayer(this.layers[this.layers.length-1].id);GeoGlobe.Visuals.prototype.remove.apply(this);for(var a in this._listeners)this._listeners.hasOwnProperty(a)&& (this.off(a,this._listeners[a]),delete this._listeners[a]);this._unbindEvent();this.container=this.map=null;this.layers=[];this._order=[];this._raycAsix=this._raycaster=this._threebox=null}}}); GeoGlobe.Visuals.Three.Base=GeoGlobe.Class({id:null,_three:null,_meshes:null,initialize:function(a){this.id=a.id||"three"+GeoGlobe.Util.randomStr(6);this._meshes=[]},addTo:function(a){this._three=a;this._three.addLayer(this)},remove:function(){this._three.removeLayer(this.id)},render:function(){throw"\u8bf7\u5b9e\u73b0\u8be5\u65b9\u6cd5";}}); GeoGlobe.Visuals.Three.ModelLayer=GeoGlobe.Class4OL(GeoGlobe.Visuals.Three.Base,{url:null,coordinate:null,scale:1,ratation:null,initialize:function(a){GeoGlobe.Visuals.Three.Base.prototype.initialize.apply(this,arguments);GeoGlobe.Util.extend(this,GeoGlobe.Util.pick(a,["url","coordinate","scale","ratation"]))},render:function(){var a=this,b=this._three._threebox;this.url&&this.coordinate?(new THREE.GLTFLoader).load(this.url,function(c){c=c.scene.clone();console.log(c);if(a.ratation)for(var d in a.ratation){var e= a.ratation[d],e=e/360*2*Math.PI;c.rotation[d]=e}a._meshes=[b.addAtCoordinate(c,a.coordinate,{scaleToLatitude:!0,preScale:a.scale})];b.render();d={exposure:1,bloomStrength:1.5,bloomThreshold:0,bloomRadius:0};c=new THREE.RenderPass(c,b.camera);e=new THREE.UnrealBloomPass(new THREE.Vector2(window.innerWidth,window.innerHeight),1.5,0.4,0.85);e.threshold=d.bloomThreshold;e.strength=d.bloomStrength;e.radius=d.bloomRadius;composer=new THREE.EffectComposer(b.renderer);composer.addPass(c);composer.addPass(e); composer.render()}):console.error("modelLayer: \u52a0\u8f7d\u6a21\u578b\u9519\u8bef\uff01")}}); GeoGlobe.Visuals.Three.PointLayer=GeoGlobe.Class4OL({id:"1",visible:!0,opacity:1,data:[],getColor:function(a){return a.properties.color?a.properties.color:"rgb(255, 0, 0)"},getTexture:function(a){return a.properties.texture?a.properties.texture:""},getPoint:function(a){return a.geometry.type==="Point"?a.geometry.coordinates:null},getSize:function(a){return a.properties.size?a.properties.size:1},_three:null,_meshes:[],_textureCache:[],initialize:function(a){this.id=a.id?a.id:this.id;this.visible=a.visible!== void 0?a.visible:this.visible;this.opacity=a.opacity?a.opacity:this.opacity;this.data=a.data?a.data:this.data;this.getColor=a.getColor?a.getColor:this.getColor;this.getTexture=a.getTexture?a.getTexture:this.getTexture;this.getPoint=a.getPoint?a.getPoint:this.getPoint;this.getSize=a.getSize?a.getSize:this.getSize},addTo:function(a){this._three=a;this._three.addLayer(this)},remove:function(){this._three.removeLayer(this.id)},render:function(){var a=this;a._three._removeInnerLayer(a);a._meshes=[];for(var b= 0;b=a)return"high";if(this.drawMode.middle.minZoom=a)return"middle";if(this.drawMode.low.minZoom=a)return"low";return null},_highDraw:function(){for(var a=new THREE.Geometry,b=this.data.length>0?this.getColor(this.data[0]):"rgb(255, 0, 0)",b=new THREE.MeshPhongMaterial({color:new THREE.Color(b),opacity:this.opacity,transparent:!0}),c=0;c0)a=this._three._threebox.distaneToWorld(a),c.translate(0,0,a);return c},_createUvs:function(a){a.faceVertexUvs=[[]];for(var b=[new THREE.Vector2(1,0),new THREE.Vector2(0,0),new THREE.Vector2(0,1),new THREE.Vector2(1,1)],c=a.faces.length, d=0;d1)var k=this._three._threebox.projectToWorld(v[0]),p=this._three._threebox.projectToWorld(v[v.length-1]),p=Math.sqrt(Math.pow(p.x-k.x,2)+Math.pow(p.y-k.y,2)+Math.pow(p.z-k.z,2));for(var u=0;u1)q.rate1=Math.sqrt(Math.pow(m.x-k.x,2)+Math.pow(m.y-k.y,2)+Math.pow(m.z-k.z,2))/p,q.rate2=Math.sqrt(Math.pow(s.x-m.x,2)+Math.pow(s.y-m.y,2)+Math.pow(s.z-m.z,2))/p;o.push(q);m=q.getPoints(50);for(s=0;s1&&(t=0);for(var b=r.attributes.position.array,c=0;c=e[c][d].rate1&&t<=e[c][d].rate1+e[c][d].rate2){x=e[c][d].getPoint((t-e[c][d].rate1)/e[c][d].rate2);break}b[c*3]=x.x;b[c*3+1]=x.y; b[c*3+2]=x.z}r.attributes.position.needsUpdate=!0;a._three._render()})()}}); GeoGlobe.Visuals.Three.SingleBuildingLayer=GeoGlobe.Class4OL({id:"1",visible:!0,isCirclesVisible:!0,lightShown:!0,lightColor:"rgb(255, 255, 0)",floorColor:"white",wallColor:"yellow",movingFloorColor:"rgb(135, 135, 135)",specificFloorColor:"#00FFFF",specificWallColor:"rgb(32, 178, 170)",floorColorOpacity:0.6,wallColorOpacity:0.3,movingFloorColorOpacity:0.2,specificFloorColorOpacity:0.6,specificWallColorOpacity:0.3,isFloorLinesVisible:!0,floorLinesColor:"#627BC1",floorLinesOpacity:0.5,topLineColor:"#ffffff", topLineOpacity:1,isPillarVisible:!0,pillarColor:"#ffffff",pillarOpacity:0.5,originalFloorColor:"#627BC1",originalFloorOpacity:0.1,originalWallColor:"#627BC1",originalWallOpacity:0.05,isRoofVisible:!0,roofColor:"#627BC1",roofOpacity:0.8,data:{},getColor:function(a){return a.properties.color?a.properties.color:"rgb(255, 0, 0)"},getPolygon:function(a){return a.geometry.type==="Polygon"?a.geometry.coordinates:null},getElevation:function(a){if(a.properties.levels){var b=0;(typeof a.properties.levels=== "string"?JSON.parse(a.properties.levels):a.properties.levels).forEach(function(a){b+=a});return b}else return 0},_three:null,_meshes:[],_textureCache:[],_HOVER_FLOOR:null,_CLICK_ITEM:null,_SELECT_ITEMS:null,initialize:function(a){if(window.turf){this.id=a.id?a.id:this.id;if(a.visible!==void 0)this.visible=a.visible;if(a.isCirclesVisible!==void 0)this.isCirclesVisible=a.isCirclesVisible;if(a.isFloorLinesVisible!==void 0)this.isFloorLinesVisible=a.isFloorLinesVisible;if(a.isPillarVisible!==void 0)this.isPillarVisible= a.isPillarVisible;if(a.lightShown!==void 0)this.lightShown=a.lightShown;if(a.isRoofVisible!==void 0)this.isRoofVisible=a.isRoofVisible;this.lightColor=a.lightColor?a.lightColor:this.lightColor;this.floorColor=a.floorColor?a.floorColor:this.floorColor;this.wallColor=a.wallColor?a.wallColor:this.wallColor;this.movingFloorColor=a.movingFloorColor?a.movingFloorColor:this.movingFloorColor;this.floorColorOpacity=a.floorColorOpacity?a.floorColorOpacity:this.floorColorOpacity;this.wallColorOpacity=a.wallColorOpacity? a.wallColorOpacity:this.wallColorOpacity;this.movingFloorColorOpacity=a.movingFloorColorOpacity?a.movingFloorColorOpacity:this.movingFloorColorOpacity;this.specificFloorColor=a.specificFloorColor?a.specificFloorColor:this.specificFloorColor;this.specificWallColor=a.specificWallColor?a.specificWallColor:this.specificWallColor;this.specificFloorColorOpacity=a.specificFloorColorOpacity?a.specificFloorColorOpacity:this.specificFloorColorOpacity;this.specificWallColorOpacity=a.specificWallColorOpacity? a.specificWallColorOpacity:this.specificWallColorOpacity;this.floorLinesColor=a.floorLinesColor?a.floorLinesColor:this.floorLinesColor;this.floorLinesOpacity=a.floorLinesOpacity?a.floorLinesOpacity:this.floorLinesOpacity;this.topLineColor=a.topLineColor?a.topLineColor:this.topLineColor;this.topLineOpacity=a.topLineOpacity?a.topLineOpacity:this.topLineOpacity;this.pillarColor=a.pillarColor?a.pillarColor:this.pillarColor;this.pillarOpacity=a.pillarOpacity?a.pillarOpacity:this.pillarOpacity;this.originalFloorColor= a.originalFloorColor?a.originalFloorColor:this.originalFloorColor;this.originalFloorOpacity=a.originalFloorOpacity?a.originalFloorOpacity:this.originalFloorOpacity;this.originalWallColor=a.originalWallColor?a.originalWallColor:this.originalWallColor;this.originalWallOpacity=a.originalWallOpacity?a.originalWallOpacity:this.originalWallOpacity;this.roofColor=a.roofColor?a.roofColor:this.roofColor;this.roofOpacity=a.roofOpacity?a.roofOpacity:this.roofOpacity;this.data=a.data?a.data:this.data;this.isClicked= !0;this.getColor=a.getColor?a.getColor:this.getColor;this.getPolygon=a.getPolygon?a.getPolygon:this.getPolygon;this.getElevation=a.getElevation?a.getElevation:this.getElevation;this.getBaseElevation=a.getBaseElevation?a.getBaseElevation:this.getBaseElevation;this.timer=null}else console.error("\u672a\u5f15\u5165turf.js\u5e93\uff01")},addTo:function(a){this._three=a;this._three.addLayer(this)},remove:function(){this._three.removeLayer(this.id)},_createLineGeometry:function(a){var b=new THREE.Geometry; a.forEach(function(a){b.vertices.push(a)});return b},_createGeoExtrudeGeometry:function(a,b){var c=new THREE.Shape(a),c=new THREE.GeoExtrudeGeometry(c,b),d=new THREE.Geometry;d.faceVertexUvs=c.faceVertexUvs.concat();d.faces=c.faces.concat();d.vertices=c.vertices.concat();return d},_createSideGeometry:function(a,b){var c=new THREE.Shape(a),c=new THREE.GeoExtrudeGeometry(c,b),d=0;c.faces.forEach(function(a){a.normal.z!=0&&d++});c.faces.splice(0,d);var e=new THREE.Geometry;e.faceVertexUvs=c.faceVertexUvs.concat(); e.faces=c.faces.concat();e.vertices=c.vertices.concat();return e},_createPillarMesh:function(a,b,c){var d=this,e=new THREE.Geometry;a.forEach(function(a){var g=[];a.geometry.coordinates[0].forEach(function(a){g.push(d._three._threebox.projectToWorld(a))});var a=new THREE.Shape(g),a=new THREE.GeoExtrudeGeometry(a,b),h=new THREE.Geometry;h.faceVertexUvs=a.faceVertexUvs.concat();h.faces=a.faces.concat();h.vertices=a.vertices.concat();a=new THREE.Mesh(h,c);e.merge(a.geometry,a.matrix)});return new THREE.Mesh(e, c)},_changeColor:function(a,b){a&&b&&(a instanceof Array||(a=[a]),b instanceof Array||(b=[b]),a.length&&b.length&&a.forEach(function(a,d){var e=b[d]||b[0];Object.keys(e).forEach(function(b){var d=e[b];switch(b){case "color":d instanceof THREE.Color||(d=new THREE.Color(d))}a.material[b]=d})}))},_reRender:function(){var a=this;this._SELECT_ITEMS&&this._SELECT_ITEMS.forEach(function(b){a._changeColor(b,[{color:a.specificFloorColor,opacity:a.specificFloorColorOpacity},{color:a.specificWallColor,opacity:a.specificWallColorOpacity}])}); this._changeColor(this._CLICK_ITEM,[{color:this.floorColor,opacity:this.floorColorOpacity},{color:this.wallColor,opacity:this.wallColorOpacity}]);this._changeColor(this._HOVER_FLOOR,{color:this.movingFloorColor,opacity:this.movingFloorColorOpacity});this._three._render()},clear:function(){this._changeColor(this._HOVER_FLOOR,{color:this.originalFloorColor,opacity:this.originalFloorOpacity});this._HOVER_FLOOR=null;this._changeColor(this._CLICK_ITEM,[{color:this.originalFloorColor,opacity:this.originalFloorOpacity}, {color:this.originalWallColor,opacity:this.originalWallOpacity}]);this._CLICK_ITEM=null;var a=this;this._SELECT_ITEMS&&this._SELECT_ITEMS.forEach(function(b){a._changeColor(b,[{color:a.originalFloorColor,opacity:a.originalFloorOpacity},{color:a.originalWallColor,opacity:a.originalWallOpacity}])});this._SELECT_ITEMS=null;this._reRender()},highlightFloor:function(a){this._changeColor(this._HOVER_FLOOR,{color:this.originalFloorColor,opacity:this.originalFloorOpacity});var b=this._HOVER_FLOOR=null;if(a.length> 0){for(var c=0;c0){for(var d=0;d0)for(var c=0;c 1E3/60&&(z<1?(A.position.copy(B.getPointAt(z)),z+=0.01):z=0,b._three._render(),d=0);b.timer=window.requestAnimationFrame(function(b){return a(b,d+b-c)})}this.clear();var b=this;b._three._removeInnerLayer(b);b._meshes=[];if(b.timer)cancelAnimationFrame(b.timer),b.timer=null;var c=new THREE.Group;c.visible=this.visible;c.name="main part";c.userData.attributes={OriginalData:b.data,Layer:b};var d=new THREE.Group;d.visible=this.visible;d.name="extra part";d.userData.attributes={OriginalData:b.data,Layer:b}; if(b.data.geometry){var e=turf.centroid(b.data).geometry.coordinates;if(b.isCirclesVisible){var f=new THREE.MeshBasicMaterial({color:7372944,transparent:!0,opacity:0.3});[0.01,0.015,0.02,0.025,0.03,0.035,0.04,0.045,0.05,0.055].forEach(function(a){var a=turf.circle(e,a,{steps:50,units:"kilometers",properties:{}}),d=new THREE.Geometry;a.geometry.coordinates[0].forEach(function(a){d.vertices.push(b._three._threebox.projectToWorld([a[0],a[1],-1]))});a=new THREE.Line(d,f);c.add(a)})}for(var g=b.data.geometry.coordinates[0], h=typeof b.data.properties.levels==="string"?JSON.parse(b.data.properties.levels):b.data.properties.levels,j=h.reduce(function(a,b){return a+b}),l=b._three._threebox.distaneToWorld(j),m={steps:10,units:"kilometers",properties:{}},n=[],o=[],v=[],k=[],p=[],u=[],s=[],q=0;q maxValue) maxValue = features[k].properties.value;\n\t}\n\t//\u6807\u6ce8\u53c2\u6570\u8ba1\u7b97\n\tfor (var j = 0; j < features.length; j++) {\n\t\t//\u74e6\u7247\u4e0a\u7684\u70b9\u76f8\u5bf9\u4e8e\u753b\u5e03\u7684\u5750\u6807\n\t\tvar point = project([features[j].geometry.coordinates[0], features[j].geometry.coordinates[1]], transform);\n\t\tvar canvasCord = coordinatePoint(coordinate, transform);\n\t\tvar X = point.x - (canvasCord.x-5);\n\t\tvar Y = point.y - (canvasCord.y-5);\n\n\t\t//\u7ed8\u5236\n\t\ttileOffscreenContext.save();\n\t\ttileOffscreenContext.translate(X, Y);\n\t\ttileOffscreenContext.drawImage(spriteOffscreen, -spriteOffscreen.width / 2, -spriteOffscreen.width / 2);\n\t\ttileOffscreenContext.restore();\n\t}\n\n\tvar imgData = tileOffscreenContext.getImageData(5, 5, ').concat(a.tileSize, ", ").concat(a.tileSize,");\n\ttileOffscreen.width = ").concat(a.tileSize,";\n\ttileOffscreen.height = ").concat(a.tileSize,";\n\ttileOffscreenContext.putImageData(imgData, 0, 0);\n\tcallback(tileOffscreen);\n}\n\nvar proxyHost;\nvar spriteOffscreen, spriteOffscreenContext;\nself.onmessage = function(e) {\n if(!e.data.key){\n proxyHost = e.data.proxyHost;\n\n //\u5c0f\u7cbe\u7075\u79bb\u5c4f\u753b\u5e03\uff0810*10\uff09\n spriteOffscreen = new OffscreenCanvas(e.data.size, e.data.size);\n spriteOffscreenContext = spriteOffscreen.getContext('2d');\n\n //\u5c0f\u7cbe\u7075\u6807\u6ce8\u989c\u8272\u914d\u7f6e\u6682\u65f6\u53ea\u652f\u6301\u5355\u8272\n var gradient = spriteOffscreenContext.createRadialGradient(e.data.size / 2, e.data.size / 2, 0, e.data.size / 2, e.data.size / 2, e.data.size / 2);\n gradient.addColorStop(0.15, e.data.color);\n gradient.addColorStop(0.5, 'rgba' + e.data.rgbColor.slice(3).split(')')[0] + ',0.15)');\n gradient.addColorStop(1, 'rgba' + e.data.rgbColor.slice(3).split(')')[0] + ',0)');\n spriteOffscreenContext.fillStyle = gradient;\n spriteOffscreenContext.fillRect(0, 0, e.data.size, e.data.size);\n } else {\n getCanvas(e.data.requestArgs, function(response){\n renderToCanvas(response, e.data.coordinate, e.data.transform, function(canvas){\n var bitmap = canvas.transferToImageBitmap();\n postMessage({\n key: e.data.key,\n bitmap: bitmap\n }, [bitmap]);\n });\n });\n }\n};"), c=new Blob([c],{type:"text/javascript"});this.workerObjectURL=URL.createObjectURL(c);this.worker=new Worker(this.workerObjectURL);this.worker.onmessage=function(c){var e=document.createElement("canvas");e.width=a.tileSize;e.height=a.tileSize;e.getContext("bitmaprenderer").transferFromImageBitmap(c.data.bitmap);b=new THREE.CanvasTexture(e);a._addTextureInToCache({key:c.data.key,value:b});a._render()};this.worker.postMessage({size:this.rendererOptions.markPoint.symbolMaxSize,color:this.rendererOptions.markPoint.color, rgbColor:GeoGlobe.Util.getRgbColor(this.rendererOptions.markPoint.color),proxyHost:location.origin+"/"+location.pathname.split("/")[1]+"/proxy?url="});URL.revokeObjectURL(this.workerObjectURL)},addTo:function(a){this._three=a;this._three.addLayer(this);this._bindEvent()},remove:function(){this._three.removeLayer(this.id)},_bindEvent:function(){var a=this;this._three.map.on("moveend",function(){a._reDraw()})},_reDraw:function(){this.update()},reDraw:function(){this._clearTextureFromCache();this.update()}, _unbindEvent:function(){for(var a=0;ae)e=h[f].properties.value}for(b=0;b0.5?d-1:d,e>0.5?e-1:e,0]);this.alignedProjMatrix= c;c=this.mat4.create();this.mat4.scale(c,c,[a.width/2,-a.height/2,1]);this.mat4.translate(c,c,[1,-1,0]);this.pixelMatrix=this.mat4.multiply(new Float64Array(16),c,this.projMatrix);c=this.mat4.invert(new Float64Array(16),this.pixelMatrix);if(!c)throw Error("failed to invert matrix");this.pixelMatrixInverse=c}},update:function(){var a=this,b=a._three.map.transform.coveringTiles({tileSize:a.tileSize,minzoom:0,maxzoom:22,roundZoom:!0});this._calcMatrices(a._three.map);var c={pixelMatrix:a.pixelMatrix, pixelMatrixInverse:a.pixelMatrixInverse,worldSize:a._three.map.transform.worldSize,tileSize:a._three.map.transform.tileSize,tileZoom:a._three.map.transform.tileZoom,zoom:a._three.map.transform.zoom};if(this._three.map._mapCRS)c._mapCRS=this._three.map._mapCRS;for(var d=0;d1E3&&this._textureCache.splice(0,this._textureCache.length-1E3)},_clearTextureFromCache:function(){this._textureCache=[]},_initCalculator:function(){this.calculator=function(){};this.calculator.prototype={project:function(a,b){return this.locationPoint(a,b)},unproject:function(a,b){return this.pointLocation(a,b)},pointLocation:function(a,b){return this.coordinateLocation(this.pointCoordinate(a,b),b)},coordinateLocation:function(a,b){var c=this.zoomTo(a.column, a.row,a.zoom,b.zoom),d=this.xLng(c.column*b.tileSize,b),c=this.yLat(c.row*b.tileSize,b);return{lng:d,lat:c}},xLng:function(a,b){if(b._mapCRS){var c=b._mapCRS.topTileExtent;return a*(c[2]-c[0])/b.worldSize+c[0]}else return a*360/b.worldSize-180},yLat:function(a,b){if(b._mapCRS){var c=b._mapCRS.topTileExtent;return c[3]-a*(c[3]-c[1])/b.worldSize}else return 360/Math.PI*Math.atan(Math.exp((180-a*360/b.worldSize)*Math.PI/180))-90},lngX:function(a,b){if(b._mapCRS){var c=b._mapCRS.topTileExtent;return(a- c[0])*b.worldSize/(c[2]-c[0])}else return(180+a)*b.worldSize/360},latY:function(a,b){if(b._mapCRS){var c=b._mapCRS.topTileExtent;return(c[3]-a)*b.worldSize/(c[3]-c[1])}else return(180-180/Math.PI*Math.log(Math.tan(Math.PI/4+a*Math.PI/360)))*b.worldSize/360},pointCoordinate:function(a,b){var c=b.tileZoom,d=[a.x,a.y,0,1],e=[a.x,a.y,1,1];this.transformMat4(d,d,b.pixelMatrixInverse);this.transformMat4(e,e,b.pixelMatrixInverse);var f=d[3],g=e[3],h=d[1]/f,j=e[1]/g,l=d[2]/f,m=e[2]/g,l=l===m?0:(0-l)/(m-l), d={column:this.interp(d[0]/f,e[0]/g,l)/b.tileSize,row:this.interp(h,j,l)/b.tileSize,zoom:b.zoom};return this.zoomTo(d.column,d.row,d.zoom,c)},interp:function(a,b,c){return a*(1-c)+b*c},locationPoint:function(a,b){return this.coordinatePoint(this.locationCoordinate(a,b),b)},coordinatePoint:function(a,b){var c=this.zoomTo(a.column,a.row,a.zoom,b.zoom),c=[c.column*b.tileSize,c.row*b.tileSize,0,1];this.transformMat4(c,c,b.pixelMatrix);return{x:c[0]/c[3],y:c[1]/c[3]}},locationCoordinate:function(a,b){var c= this.lngX(a[0],b)/b.tileSize,d=this.latY(a[1],b)/b.tileSize;return this.zoomTo(c,d,b.zoom,b.tileZoom)},zoomTo:function(a,b,c,d){c=Math.pow(2,d-c);a*=c;b*=c;return{column:a,row:b,zoom:d}},transformMat4:function(a,b,c){var d=b[0],e=b[1],f=b[2],b=b[3];a[0]=c[0]*d+c[4]*e+c[8]*f+c[12]*b;a[1]=c[1]*d+c[5]*e+c[9]*f+c[13]*b;a[2]=c[2]*d+c[6]*e+c[10]*f+c[14]*b;a[3]=c[3]*d+c[7]*e+c[11]*f+c[15]*b;return a}}},_initMat4:function(){this.mat4=function(){};this.mat4.prototype={create:function(){var a=new Float32Array(16); a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},identity:function(a){a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},translate:function(a,b,c){var d=c[0],e=c[1],c=c[2],f,g,h,j,l,m,n,o,v,k,p,u;b===a?(a[12]=b[0]*d+b[4]*e+b[8]*c+b[12],a[13]=b[1]*d+b[5]*e+b[9]*c+b[13],a[14]=b[2]*d+b[6]*e+b[10]*c+b[14],a[15]=b[3]*d+b[7]*e+b[11]*c+b[15]):(f=b[0], g=b[1],h=b[2],j=b[3],l=b[4],m=b[5],n=b[6],o=b[7],v=b[8],k=b[9],p=b[10],u=b[11],a[0]=f,a[1]=g,a[2]=h,a[3]=j,a[4]=l,a[5]=m,a[6]=n,a[7]=o,a[8]=v,a[9]=k,a[10]=p,a[11]=u,a[12]=f*d+l*e+v*c+b[12],a[13]=g*d+m*e+k*c+b[13],a[14]=h*d+n*e+p*c+b[14],a[15]=j*d+o*e+u*c+b[15]);return a},scale:function(a,b,c){var d=c[0],e=c[1],c=c[2];a[0]=b[0]*d;a[1]=b[1]*d;a[2]=b[2]*d;a[3]=b[3]*d;a[4]=b[4]*e;a[5]=b[5]*e;a[6]=b[6]*e;a[7]=b[7]*e;a[8]=b[8]*c;a[9]=b[9]*c;a[10]=b[10]*c;a[11]=b[11]*c;a[12]=b[12];a[13]=b[13];a[14]=b[14]; a[15]=b[15];return a},multiply:function(a,b,c){var d=b[0],e=b[1],f=b[2],g=b[3],h=b[4],j=b[5],l=b[6],m=b[7],n=b[8],o=b[9],v=b[10],k=b[11],p=b[12],u=b[13],s=b[14],b=b[15],q=c[0],r=c[1],t=c[2],x=c[3];a[0]=q*d+r*h+t*n+x*p;a[1]=q*e+r*j+t*o+x*u;a[2]=q*f+r*l+t*v+x*s;a[3]=q*g+r*m+t*k+x*b;q=c[4];r=c[5];t=c[6];x=c[7];a[4]=q*d+r*h+t*n+x*p;a[5]=q*e+r*j+t*o+x*u;a[6]=q*f+r*l+t*v+x*s;a[7]=q*g+r*m+t*k+x*b;q=c[8];r=c[9];t=c[10];x=c[11];a[8]=q*d+r*h+t*n+x*p;a[9]=q*e+r*j+t*o+x*u;a[10]=q*f+r*l+t*v+x*s;a[11]=q*g+r*m+ t*k+x*b;q=c[12];r=c[13];t=c[14];x=c[15];a[12]=q*d+r*h+t*n+x*p;a[13]=q*e+r*j+t*o+x*u;a[14]=q*f+r*l+t*v+x*s;a[15]=q*g+r*m+t*k+x*b;return a},perspective:function(a,b,c,d,e){var b=1/Math.tan(b/2),f=1/(d-e);a[0]=b/c;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=b;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=(e+d)*f;a[11]=-1;a[12]=0;a[13]=0;a[14]=2*e*d*f;a[15]=0;return a},rotateX:function(a,b,c){var d=Math.sin(c),c=Math.cos(c),e=b[4],f=b[5],g=b[6],h=b[7],j=b[8],l=b[9],m=b[10],n=b[11];b!==a&&(a[0]=b[0],a[1]=b[1],a[2]=b[2],a[3]= b[3],a[12]=b[12],a[13]=b[13],a[14]=b[14],a[15]=b[15]);a[4]=e*c+j*d;a[5]=f*c+l*d;a[6]=g*c+m*d;a[7]=h*c+n*d;a[8]=j*c-e*d;a[9]=l*c-f*d;a[10]=m*c-g*d;a[11]=n*c-h*d;return a},rotateZ:function(a,b,c){var d=Math.sin(c),c=Math.cos(c),e=b[0],f=b[1],g=b[2],h=b[3],j=b[4],l=b[5],m=b[6],n=b[7];b!==a&&(a[8]=b[8],a[9]=b[9],a[10]=b[10],a[11]=b[11],a[12]=b[12],a[13]=b[13],a[14]=b[14],a[15]=b[15]);a[0]=e*c+j*d;a[1]=f*c+l*d;a[2]=g*c+m*d;a[3]=h*c+n*d;a[4]=j*c-e*d;a[5]=l*c-f*d;a[6]=m*c-g*d;a[7]=n*c-h*d;return a},invert:function(a, b){var c=b[0],d=b[1],e=b[2],f=b[3],g=b[4],h=b[5],j=b[6],l=b[7],m=b[8],n=b[9],o=b[10],v=b[11],k=b[12],p=b[13],u=b[14],s=b[15],q=c*h-d*g,r=c*j-e*g,t=c*l-f*g,x=d*j-e*h,A=d*l-f*h,B=e*l-f*j,z=m*p-n*k,y=m*u-o*k,w=m*s-v*k,D=n*u-o*p,E=n*s-v*p,F=o*s-v*u,C=q*F-r*E+t*D+x*w-A*y+B*z;if(!C)return null;C=1/C;a[0]=(h*F-j*E+l*D)*C;a[1]=(e*E-d*F-f*D)*C;a[2]=(p*B-u*A+s*x)*C;a[3]=(o*A-n*B-v*x)*C;a[4]=(j*w-g*F-l*y)*C;a[5]=(c*F-e*w+f*y)*C;a[6]=(u*t-k*B-s*r)*C;a[7]=(m*B-o*t+v*r)*C;a[8]=(g*E-h*w+l*z)*C;a[9]=(d*w-c*E-f*z)* C;a[10]=(k*A-p*t+s*q)*C;a[11]=(n*t-m*A-v*q)*C;a[12]=(h*y-g*D-j*z)*C;a[13]=(c*D-d*y+e*z)*C;a[14]=(p*r-k*x-u*q)*C;a[15]=(m*x-n*r+o*q)*C;return a},ortho:function(a,b,c,d,e,f,g){var h=1/(b-c),j=1/(d-e),l=1/(f-g);a[0]=-2*h;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=-2*j;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=2*l;a[11]=0;a[12]=(b+c)*h;a[13]=(e+d)*j;a[14]=(g+f)*l;a[15]=1;return a}}}}); GeoGlobe.Visuals.EchartsGL=GeoGlobe.Class4OL(GeoGlobe.Visuals,{type:"echartsgl",map:null,container:null,layers:[],visualMap:null,mapbox3D:{boxHeight:10,boxWidth:100,altitudeScale:1},_echartsgl:null,initialize:function(a){GeoGlobe.Visuals.prototype.initialize.apply(this,arguments);this.layers=[];window.echarts?(this.visualMap=a.visualMap?a.visualMap:this.visualMap,this.mapbox3D=a.mapbox3D?a.mapbox3D:this.mapbox3D,console.warn("EchartsGL 1.1 \u6682\u672a\u652f\u6301\u9f20\u6807\u62fe\u53d6\u4e8b\u4ef6\uff01")): console.error("\u4f7f\u7528EchartsGL\u53ef\u89c6\u5316\u56fe\u5c42\u524d\uff0c\u9700\u5f15\u5165echarts\u548cechartsgl\u5e93\uff01")},addTo:function(){GeoGlobe.Visuals.prototype.addTo.apply(this,arguments);this.container.className="geoglobe-echartsgl-container";this._init()},_init:function(){this._echartsgl=echarts.init(this.container);this._echartsgl._mapbox=this.map;this.mapbox3D.center=this.map.getCenter().toArray();this.mapbox3D.zoom=this.map.getZoom();this.mapbox3D.pitch=this.map.getPitch(); this.mapbox3D.bearing=this.map.getBearing();this._bindEvent()},render:function(){this._echartsgl.getOption()&&this.clear(this._init.bind(this));this.option={};this.visualMap&&(this.option.visualMap=this.visualMap);this.option.mapbox3D=this.mapbox3D;this.option.series=[];this.option.units=this.map.units;this.option.topTileExtent=this.map._tileExtent||this.map.projection.getExtent();if(this._order)for(var a=0;a1)this.weight=1;if(this.weight<0)this.weight=0;this.size=b.symbolMinSize+(b.symbolMaxSize-b.symbolMinSize)*this.weight;this.radius=this.size/2;if(d.flat)this.color=GeoGlobe.Util.getType(d.color)==="object"?"rgba("+a.gradientImageData[~~(this.weight*255+0.5)*4]+","+a.gradientImageData[~~(this.weight*255+0.5)*4+1]+","+a.gradientImageData[~~(this.weight*255+0.5)*4+2]+","+a.gradientImageData[3]/ 255+")":d.color;else{if(GeoGlobe.Util.getType(d.color)!=="object"){console.error("\u975e\u6241\u5e73\u6837\u5f0f\u4e0b\u8bf7\u4f7f\u7528\u6e10\u53d8\u8272\uff01");return}var c=0,n;for(n in d.color)+n>c&&(c=+n);this.color=d.color[c]}this.rgbColor=GeoGlobe.Util.getRgbColor(this.color);this.tmpColor=this.color;this.alpha=this.color.indexOf("a(")!==-1?+this.color.split(",")[3].split(")")[0]:1;if(b.valueFilter)for(n=0;n1||b.increment<0)&&console.error("increment must be between 0 and 1"); if(b.increment!=void 0&&b.increment==0)this.energy=1;this.increment=b.increment!=void 0?b.increment:Math.max(0.1*c.scaleSize/c.period+Math.random()*(Math.random()>0.5?1:-1)*0.002,0.001);break;case "circle":this.energy=[];for(var a=0;a0.5?1:-1)*0.002,0.001);break;case "ring":this.energy=[];for(a=0;a0.5?1:-1)*0.002,0.001);break;case "water":this.energy=0;this.increment=b.increment?b.increment:0.1+Math.random()*(Math.random()>0.5?1:-1)*0.02;break;case "sprite":this.energy=c.show?Math.random()*c.scaleSize:c.scaleSize,this.increment=b.increment?b.increment:Math.max(0.1*c.scaleSize/c.period+Math.random()*(Math.random()>0.5?1:-1)*0.002,0.001)}};this.MarkPoint.prototype.updateXY=function(){var c=a._parent.map.project([this.lon, this.lat]);this.x=c.x;this.y=c.y;if(b.symbol==="fire")for(c=0;c=c.scaleSize)this.factor=-1;this.energy+=this.factor*this.increment;break;case "bubble":case "ellipse":this.energy+=this.increment;if(this.energy>c.scaleSize)this.energy=0;break;case "circle":for(d=0;d1&&(this.energy[d]=0);break;case "ring":for(d=0;d1&&(this.energy[d]=0);break;case "fire":var e;for(d=0;d= c.scaleSize)this.factor=-1;this.energy+=this.factor*this.increment}};this.MarkPoint.prototype.isPointInPath=function(c,d,h){c.beginPath();switch(b.symbol){case "simple":case "bubble":case "circle":case "ring":case "round":case "water":case "ellipse":case "heatmap":case "sprite":c.arc(this.x,this.y,this.radius,0,Math.PI*2,!0);break;case "pin":c.moveTo(this.x-0.5,this.y);c.quadraticCurveTo(this.x,this.y-this.radius/2,this.x-this.radius*Math.sin(Math.PI/3),this.y-this.radius-this.radius*Math.sin(Math.PI/ 6));c.arc(this.x,this.y-this.radius*2,this.radius,0,Math.PI*5/6,!0);c.arc(this.x,this.y-this.radius*2,this.radius,0,Math.PI/6,!1);c.quadraticCurveTo(this.x,this.y-this.radius/2,this.x+0.5,this.y);break;case "rmb":c.font=e.fontStyle+" "+e.fontWeight+" "+this.size+"px "+e.fontFamily;if(GeoGlobe.String.isNumeric(this.value)){var j=0,l=this.size;if(b.formatter)for(var m=GeoGlobe.Util.getFormattedString({a:this.name,b:"\u7edf\u8ba1\u6570",c:this.value},b.formatter).split("
"),n=m.length,o=0;oj&&(j=v);c.fillText(m[o],this.x,this.y-((n-1)/2-o)*(this.radius*2+5))}else j=c.measureText("\uffe5"+this.value).width;c.rect(this.x-j/2,this.y-l/2,j,l)}break;case "fire":c.rect(this.x-this.size/2,this.y-this.size/2,this.size,this.size);break;case "icon":c.rect(this.x-b.symbolWidth/2,this.y-b.symbolHeight/2,b.symbolWidth,b.symbolHeight)}if(c.isPointInPath(d,h))a.hoveredMarkPoint=this};this.MarkPoint.prototype.draw1=function(f){a.hoveredMarkPoint===this?(this.radius=this.size/ 2*1.1,this.color=GeoGlobe.Util.getShadeColor(this.tmpColor,20)):(this.radius=this.size/2,this.color=this.tmpColor);this.rgbColor=GeoGlobe.Util.getRgbColor(this.color);f.shadowColor=d.shadowColor;f.shadowBlur=d.shadowBlur;f.shadowOffsetX=d.shadowOffsetX;f.shadowOffsetY=d.shadowOffsetY;switch(b.symbol){case "bubble":if(a.hoveredMarkPoint===this)f.beginPath(),f.arc(this.x,this.y,this.radius*c.scaleSize/2,0,Math.PI*2,!0),f.lineWidth=~~(this.radius/5+0.5)<2?2:~~(this.radius/5+0.5),f.strokeStyle=this.color, f.stroke();break;case "circle":case "ring":case "round":if(!d.flat)for(var g in this.color=f.createRadialGradient(this.x,this.y,0,this.x,this.y,this.radius),d.color)d.color.hasOwnProperty(g)&&(a.hoveredMarkPoint===this?this.color.addColorStop(+g,GeoGlobe.Util.getShadeColor(d.color[g],20)):this.color.addColorStop(+g,d.color[g]));f.beginPath();f.arc(this.x,this.y,this.radius,0,Math.PI*2,!0);f.fillStyle=this.color;f.fill();break;case "pin":f.beginPath();f.moveTo(this.x+this.radius/3,this.y);f.quadraticCurveTo(this.x+ this.radius/3,this.y+this.radius/10,this.x,this.y+this.radius/10);f.quadraticCurveTo(this.x-this.radius/3,this.y+this.radius/10,this.x-this.radius/3,this.y);f.quadraticCurveTo(this.x-this.radius/3,this.y-this.radius/10,this.x,this.y-this.radius/10);f.quadraticCurveTo(this.x+this.radius/3,this.y-this.radius/10,this.x+this.radius/3,this.y);f.fillStyle="rgba(0,0,0,0.3)";f.fill();f.beginPath();f.moveTo(this.x+this.radius*2/3,this.y);f.quadraticCurveTo(this.x+this.radius*2/3,this.y+this.radius/6,this.x, this.y+this.radius/6);f.quadraticCurveTo(this.x-this.radius*2/3,this.y+this.radius/6,this.x-this.radius*2/3,this.y);f.quadraticCurveTo(this.x-this.radius*2/3,this.y-this.radius/6,this.x,this.y-this.radius/6);f.quadraticCurveTo(this.x+this.radius*2/3,this.y-this.radius/6,this.x+this.radius*2/3,this.y);f.fillStyle="rgba(0,0,0,0.2)";f.fill();f.beginPath();f.moveTo(this.x-0.5,this.y);f.quadraticCurveTo(this.x,this.y-this.radius/2,this.x-this.radius*Math.sin(Math.PI/3),this.y-this.radius-this.radius*Math.sin(Math.PI/ 6));f.arc(this.x,this.y-this.radius*2,this.radius,0,Math.PI*5/6,!0);f.arc(this.x,this.y-this.radius*2,this.radius,0,Math.PI/6,!1);f.quadraticCurveTo(this.x,this.y-this.radius/2,this.x+0.5,this.y);f.fillStyle=this.color;f.fill();break;case "rmb":f.font=e.fontStyle+" "+e.fontWeight+" "+this.radius*2+"px "+e.fontFamily;f.textAlign="center";f.textBaseline="middle";f.fillStyle=this.color;if(GeoGlobe.String.isNumeric(this.value))if(b.formatter){g=GeoGlobe.Util.getFormattedString({a:this.name,b:"\u7edf\u8ba1\u6570", c:this.value},b.formatter).split("
");for(var h=g.length,j=0;j0&&!this._parent.map.moving&&(this.hover(a.point.x,a.point.y),this.hoveredMarkPoint&&this._parent.fire("overlayerhover", {layer:this,feature:this.hoveredMarkPoint,event:a}))},onResize:function(){this.canvas[0].width=this.canvas[1].width=this.cacheCanvas[0].width=this.cacheCanvas[1].width=this.width=this._parent.map.transform.width;this.canvas[0].height=this.canvas[1].height=this.cacheCanvas[0].height=this.cacheCanvas[1].height=this.height=this._parent.map.transform.height;this.redraw()},redraw:function(){this.clearCanvas();this.resetCanvas();this.updateXY();this.drawCanvas1();this.drawCanvas2()},updateXY:function(){for(var a= this._parent.getBounds(this._rendererOptions.markPoint.symbolMaxSize/2),b=this.markPoints.length=a[0][0]&&c.lon<=a[1][0]&&c.lat>=a[0][1]&&c.lat<=a[1][1]?(c.visible=!0,c.updateXY()):c.visible=!1},drawCanvas1:function(){this.cacheCanvas[0].width=this.width;if(this._rendererOptions.markPoint.symbol==="round")this.cacheCanvasContext[0].globalCompositeOperation= "lighter";for(var a=this.markPoints.lengththis.maxValue)this.maxValue=a[b].properties[this._rendererOptions.markPoint.valueField]}this.maxValue/=this._rendererOptions.markPoint.symbolValueRangeScale;for(var c=[],b=0;b1)this.weight=1;if(this.weight<0)this.weight=0;this.size=c+(d-c)*this.weight;this.radius=this.size/2;this.color=typeof f.color==="object"?"rgba("+g[parseInt(this.weight*255,10)*4]+ ","+g[parseInt(this.weight*255,10)*4+1]+","+g[parseInt(this.weight*255,10)*4+2]+","+g[3]/255+")":f.color;this.rgbColor=GeoGlobe.Util.getRgbColor(this.color);this.tmpColor=this.color};this.MarkPoint.prototype.init=function(){switch(b){case "circle":this.energy=[0,1/3,2/3];break;case "ring":this.energy=[0,0.25*e.scaleSize,0.5*e.scaleSize,0.75*e.scaleSize];break;case "emptyCircle":this.energy=0}this.increment=Math.max(0.1*e.scaleSize/e.period+Math.random()*(Math.random()>0.5?1:-1)*0.002,0.001)};this.MarkPoint.prototype.updateXY= function(){var b=a._parent.map.project([this.lon,this.lat]);this.x=b.x;this.y=b.y};this.MarkPoint.prototype.update=function(){var a;switch(b){case "circle":for(a=0;a<3;a++)this.energy[a]<1?this.energy[a]+=this.increment:this.energy[a]=0;break;case "ring":for(a=0;a<4;a++)this.energy[a]this.p2.y?{x:this.p1.x-Math.round(f*Math.sin(b)),y:this.p1.y-Math.round(f*Math.cos(b))}:this.p1.y===this.p2.y?{x:this.p1.x,y:this.p1.y}:{x:this.p1.x+Math.round(f*Math.sin(b)),y:this.p1.y+Math.round(f*Math.cos(b))}:this.p1.xthis.p2.y?(c=Math.asin((this.p2.x-this.p1.x)/c),this.cp=c0&&!this._parent.map.moving)this.hover(a.point.x,a.point.y),this.hoveredMarkPoint&&this._parent.fire("overlayerhover",{layer:this,feature:this.hoveredMarkPoint,event:a})},onClick:function(a){this.visibility&& this.markPoints.length>0&&!this._parent.map.moving&&this.hoveredMarkPoint&&this._parent.fire("overlayerclick",{layer:this,feature:this.hoveredMarkPoint,event:a})},onResize:function(){this.canvas[0].width=this.canvas[1].width=this.canvas[2].width=this.cacheCanvas[0].width=this.cacheCanvas[1].width=this.cacheCanvas[2].width=this.width=this._parent.map.transform.width;this.canvas[0].height=this.canvas[1].height=this.canvas[2].height=this.cacheCanvas[0].height=this.cacheCanvas[1].height=this.cacheCanvas[2].height= this.height=this._parent.map.transform.height;this.redraw()},redraw:function(){this.clearCanvas();this.updateXY();this.drawCanvas1();this.drawCanvas2();this.drawCanvas3()},updateXY:function(){for(var a=this.markPoints.length;a--;)this.markPoints[a].updateXY(),this.markLines[a].updateXY()},drawCanvas1:function(){this.cacheCanvas[0].width=this.width;for(var a=this.markLines.length;a--;)this.markLines[a].draw(this.cacheCanvasContext[0]);for(a=this.markPoints.length;a--;)this.markPoints[a].draw1(this.cacheCanvasContext[0]); this.canvas[0].width=this.width;this.canvasContext[0].drawImage(this.cacheCanvas[0],0,0)},drawCanvas2:function(){document.createElement("canvas").getContext?(this.cacheCanvasContext[1].globalCompositeOperation="destination-out",this.cacheCanvasContext[1].fillStyle="rgba(0, 0, 0, 0.05)",this.cacheCanvasContext[1].fillRect(0,0,this.width,this.height),this.cacheCanvasContext[1].globalCompositeOperation="source-over"):this.cacheCanvas[1].width=this.width;this.cacheCanvasContext[1].save();for(var a=this.markLines.length;a--;)this.markLines[a].effect.draw(this.cacheCanvasContext[1]); this.cacheCanvasContext[1].restore();this.canvas[1].width=this.width;this.canvasContext[1].drawImage(this.cacheCanvas[1],0,0)},drawCanvas3:function(){this._rendererOptions.markPoint.symbol==="emptyCircle"?document.createElement("canvas").getContext?(this.cacheCanvasContext[2].globalCompositeOperation="destination-out",this.cacheCanvasContext[2].fillStyle="rgba(0, 0, 0, 0.05)",this.cacheCanvasContext[2].fillRect(0,0,this.width,this.height),this.cacheCanvasContext[2].globalCompositeOperation="source-over"): this.cacheCanvas[2].width=this.width:this._rendererOptions.markPoint.symbol==="ring"?(this.cacheCanvas[2].width=this.width,this.cacheCanvasContext[2].globalCompositeOperation="lighter"):this.cacheCanvas[2].width=this.width;this.cacheCanvasContext[2].save();for(var a=this.markPoints.length;a--;)this.markPoints[a].draw2(this.cacheCanvasContext[2]);this.cacheCanvasContext[2].restore();this.canvas[2].width=this.width;this.canvasContext[2].drawImage(this.cacheCanvas[2],0,0)},clearCanvas:function(){this.canvas[0].width= this.canvas[1].width=this.canvas[2].width=this.cacheCanvas[0].width=this.cacheCanvas[1].width=this.cacheCanvas[2].width=this.width},stopDraw:function(){cancelAnimationFrame(this.frame);this.clearCanvas()},destroy:function(){this.stopDraw();this._parent.container.removeChild(this.div);this.MarkPoint=null;this.markPoints=[];this.canvas=[];this.data=[];this.cacheCanvas=[];this.canvasContext=[];this.cacheCanvasContext=[];this._rendererOptions={}},hover:function(a,b){this.hoveredMarkLine=null;this.lastHoveredMarkPoint= this.hoveredMarkPoint?GeoGlobe.Util.clone(this.hoveredMarkPoint):null;this.hoveredMarkPoint=null;var c,d;c=0;for(d=this.markLines.length;c "+ this.hoveredMarkLine.end.name:this.hoveredMarkPoint.name,a,b),this.canvas[2].style.cursor="pointer"):(this.hideTooltip(),this.canvas[2].style.cursor="grab")},showTooltip:function(a,b,c){if(this._rendererOptions.tooltip.show)this.tooltipDiv.textContent=a,this.tooltipDiv.style.top=c-15+"px",this.tooltipDiv.style.left=b+15+"px",this.tooltipDiv.style.display="block"},hideTooltip:function(){if(this._rendererOptions.tooltip.show)this.tooltipDiv.style.display="none"},addTo:function(a){this._parent=a;this._parent.addLayer(this); this._parent.container.appendChild(this.div);this.canvas[0].width=this.canvas[1].width=this.canvas[2].width=this.cacheCanvas[0].width=this.cacheCanvas[1].width=this.cacheCanvas[2].width=this.width=this._parent.map.transform.width;this.canvas[0].height=this.canvas[1].height=this.canvas[2].height=this.cacheCanvas[0].height=this.cacheCanvas[1].height=this.cacheCanvas[2].height=this.height=this._parent.map.transform.height},setVisible:function(a){this.visibility=a;this.div.style.display=a?"block":"none"; a?this.draw():this.stopDraw()},setData:function(a){this.data=a;this.minValue=Number.MAX_VALUE;this.maxValue=Number.MIN_VALUE;for(var b=0;bthis.maxValue)this.maxValue=a[b].properties[this._rendererOptions.markPoint.valueField]}for(var c=new this.MarkPoint(void 0,this.location.name, 0,this.location.lonLat[0],this.location.lonLat[1]),d=[],e=[],b=0;b0.5?1:-1)*0.002};this.MarkPoint.prototype.updateXY=function(){var b= a._parent.map.project([this.lon,this.lat]);this.x=b.x;this.y=b.y};this.MarkPoint.prototype.update=function(){this.energyf.points.length-1&&(this.pointIndex=0)):(this.pointIndex-=a.markLines.option.lineIncrement-0.1,this.pointIndex<0&&(this.pointIndex=f.points.length-1));this.pointIndex=Math.round(this.pointIndex)},draw:function(b){this.update();b.beginPath();d<~~(a.markLines.option.linesNumber/200)?b.arc(f.points[this.pointIndex].x, f.points[this.pointIndex].y,this.radius,0,Math.PI*2,!0):b.rect(f.points[this.pointIndex].x-1,f.points[this.pointIndex].y-1,2,2);b.fillStyle=this.color;b.fill()}}}};this.MarkLine.prototype.updateXY=function(){for(var b=0;bthis.points.length&&(a=this.points.length);for(var c=0;c0&&!this._parent.map.moving&&(this.hover(a.point.x,a.point.y),this.hoveredMarkPoint&&this._parent.fire("overlayerhover",{layer:this,feature:this.hoveredMarkPoint,event:a}))},onResize:function(){this.canvas[0].width=this.canvas[1].width=this.cacheCanvas[0].width=this.cacheCanvas[1].width=this.width=this._parent.map.transform.width; this.canvas[0].height=this.canvas[1].height=this.cacheCanvas[0].height=this.cacheCanvas[1].height=this.height=this._parent.map.transform.height;this.redraw()},redraw:function(){this.clearCanvas();this.updateXY();this.drawCanvas1();this.drawCanvas2()},updateXY:function(){for(var a=this.markLines.items.length;a--;)this.markLines.items[a].updateXY();for(a=this.markPoints.length;a--;)this.markPoints[a].updateXY()},drawCanvas1:function(){this.cacheCanvas[0].width=this.width;this.cacheCanvasContext[0].globalCompositeOperation= "lighter";var a,b,c=this.markLines.items,d=this.markLines.option;if(c.length>0){this.cacheCanvasContext[0].beginPath();switch(d.step){case 1:d.lineLength+=d.lineIncrement+0.1;a=0;for(b=~~(d.linesNumber*2/3);ad.linePointsNumber-1&&(d.factor=1,d.lineLength=0,d.step=2);break;case 2:a=0;for(b=~~(d.linesNumber*2/3);ad.linePointsNumber-1&&(d.factor=-1,d.lineLength=d.linePointsNumber-1,d.step=3);break;case 3:a=0;for(b=~~(d.linesNumber*2/3);a0)for(var a=0;a<~~(this.markLines.option.linesNumber/200);a++)this.markLines.items[a].effect.draw(this.cacheCanvasContext[1]);for(a=this.markPoints.length;a--;)this.markPoints[a].draw(this.cacheCanvasContext[1]);this.cacheCanvasContext[1].restore();this.canvas[1].width=this.width;this.canvasContext[1].drawImage(this.cacheCanvas[1],0,0)},clearCanvas:function(){this.canvas[0].width=this.canvas[1].width=this.cacheCanvas[0].width= this.cacheCanvas[1].width=this.width},stopDraw:function(){cancelAnimationFrame(this.frame);this.clearCanvas()},destroy:function(){this.stopDraw();this._parent.container.removeChild(this.div);this.MarkPoint=null;this.markPoints=[];this.canvas=[];this.data=[];this.cacheCanvas=[];this.canvasContext=[];this.cacheCanvasContext=[];this._rendererOptions={}},hover:function(a,b){this.hoveredMarkPoint=null;this.cacheCanvasContext[1].save();for(var c=0,d=this.markPoints.length;c1)d[c].weight= 1;if(d[c].weight<0)d[c].weight=0;if(GeoGlobe.Util.getType(a._rendererOptions.markPoint.itemStyle.color[e])==="object")a.gradientImageData=GeoGlobe.Util.getGradientImageData(a._rendererOptions.markPoint.itemStyle.color[e]);d[c].color=GeoGlobe.Util.getType(g.color[e])==="object"?"rgba("+a.gradientImageData[~~(d[c].weight*255+0.5)*4]+","+a.gradientImageData[~~(d[c].weight*255+0.5)*4+1]+","+a.gradientImageData[~~(d[c].weight*255+0.5)*4+2]+","+a.gradientImageData[3]/255+")":b[e]}};h.prototype.updateXY= function(){for(var b=this.markPoints.length;b--;)if(a._parent.map){var c=a._parent.map.project([this.markPoints[b].lon,this.markPoints[b].lat]);this.markPoints[b].x=c.x;this.markPoints[b].y=c.y}};h.prototype.draw=function(a,b){if(d||c[b]!==0){var g=[],n=function(a){for(var b=0;bd?-1:cp.value)h(),p.value=k.value}else h(),g.push({x:k.x,y:k.y,value:k.value})}else h()}}};return h},render:function(){this._init_Legend(); this._init_RendererOptions();this.setData(this.data);this.draw()},draw:function(){this.updateXY();this.drawCanvas();this.frame&&cancelAnimationFrame(this.frame)},lazydraw:function(){var a=this;(function c(){if(a.DRAWINDEXthis.maxValue)this.maxValue=a[b].properties.value}var a=new Blob(["function MarkPoint(lon, lat, value) {this.lon = lon;this.lat = lat;this.value = value;}function MarkPointsSet(legendLabel) {this.legendLabel = legendLabel;this.markPoints = [];}var legendLabels = [];var markPointsSets = [];onmessage = function (evt) {var features = evt.data.data;var feature = null;var legendLabel = null;for (var i = 0, len = features.length; i < len; i++) {feature = features[i];legendLabel = feature.properties.type;if (legendLabels.indexOf(legendLabel) === -1) {legendLabels.push(legendLabel);markPointsSets.push(new MarkPointsSet(legendLabel));}markPointsSets[legendLabels.indexOf(legendLabel)].markPoints.push(new MarkPoint(feature.geometry.coordinates[0], feature.geometry.coordinates[1],feature.properties.value));}postMessage({legendLabels: legendLabels,markPointsSets: markPointsSets})}"]), a=window.URL.createObjectURL(a),b=new Worker(a),c=this,d=_initMarkPointsSet(c);b.onmessage=function(a){c.legendLabels=a.data.legendLabels;c.markPointsSets=[];for(var b=0,g=a.data.markPointsSets.length;b0;f--)s+=this.parts[c].cubes[f-1].height;this.parts[c].cubes[e].vertexs=[[m+c*(g+j),l-s],[m+c*(g+j)+h*Math.cos(b),l-h*Math.sin(b)-s],[m+c*(g+j)+h*Math.cos(b)-g,l-h*Math.sin(b)-s],[m+c*(g+j)-g,l-s]]}break;case "pie":var q,r,t,x,A,B=Math.PI*2/50;for(c=0;c<1;c++){f=this.parts[c].size/2;m=f>g?f-g:0;s=new this.Point(0,0,-h/2);q=new this.Point(0,0,h/2);r=[];t=[];x=[];A=[];for(l=0;l<=Math.PI*2;)r.push(new this.Point(f*Math.cos(l),f*Math.sin(l),-h/2)),t.push(new this.Point(f*Math.cos(l),f*Math.sin(l), h/2)),m>0&&(x.push(new this.Point(m*Math.cos(l),m*Math.sin(l),-h/2)),A.push(new this.Point(m*Math.cos(l),m*Math.sin(l),h/2))),l+=B;r.push(new this.Point(f,0,-h/2));t.push(new this.Point(f,0,h/2));m>0&&(x.push(new this.Point(m,0,-h/2)),A.push(new this.Point(m,0,h/2)));e=Math.cos(b);var z=Math.sin(b),y;l=s.y*e-s.z*z;y=s.z*e+s.y*z;s.y=l;s.z=y;l=q.y*e-q.z*z;y=q.z*e+q.y*z;q.y=l;q.z=y;for(f=0;f<50;f++)if(l=r[f].y*e-r[f].z*z,y=r[f].z*e+r[f].y*z,r[f].y=l,r[f].z=y,l=t[f].y*e-t[f].z*z,y=t[f].z*e+t[f].y*z,t[f].y= l,t[f].z=y,m>0)l=x[f].y*e-x[f].z*z,y=x[f].z*e+x[f].y*z,x[f].y=l,x[f].z=y,l=A[f].y*e-A[f].z*z,y=A[f].z*e+A[f].y*z,A[f].y=l,A[f].z=y;for(e=0;e0;f--)z+=this.parts[c].sectors[f-1].angle;f=z+l;this.parts[c].sectors[e].startIndex=e===0?Math.round(z/B):this.parts[c].sectors[e-1].endIndex;this.parts[c].sectors[e].endIndex=Math.round(f/B)}this.parts[c].uCentrePoint=s;this.parts[c].tCentrePoint=q;this.parts[c].oUnderPoints=r; this.parts[c].oTopPoints=t;if(m>0)this.parts[c].iUnderPoints=x,this.parts[c].iTopPoints=A}}};this.MarkPoint.prototype.update=function(){this.energy+=this.velocity;this.energy>1&&(this.energy=1);a.DRAWDONE=this.energy===1};this.MarkPoint.prototype.isPointInPath=function(c,e,f){var h,j,l;switch(d){case "column":for(h=0;h0&&(c.beginPath(),c.moveTo(this.parts[h].cubes[j].vertexs[0][0],this.parts[h].cubes[j].vertexs[0][1]), c.lineTo(this.parts[h].cubes[j].vertexs[1][0],this.parts[h].cubes[j].vertexs[1][1]),c.lineTo(this.parts[h].cubes[j].vertexs[1][0],this.parts[h].cubes[j].vertexs[1][1]-this.parts[h].cubes[j].height),c.lineTo(this.parts[h].cubes[j].vertexs[3][0],this.parts[h].cubes[j].vertexs[3][1]-this.parts[h].cubes[j].height),c.lineTo(this.parts[h].cubes[j].vertexs[3][0],this.parts[h].cubes[j].vertexs[3][1]),c.isPointInPath(e,f))){a.hoveredMarkPoint=this;this.hActive=h;this.vActive=j;return}break;case "pie":for(h= 0;h<1;h++){var s=this.parts[h].tCentrePoint,q=this.parts[h].oUnderPoints,r=this.parts[h].oTopPoints,t=this.parts[h].iUnderPoints,x=this.parts[h].iTopPoints,A=!1;this.parts[h].size/2>g&&(A=!0);var B=Math.round(25),z=[],y=[],w=[];l=[];for(j=0;j=0;j--)if(z[j]>0){c.beginPath(); if(y[j]>B){c.moveTo(r[w[j]].get2d().x,r[w[j]].get2d().y);for(l=w[j]-1;l>=y[j];l--)c.lineTo(r[l].get2d().x,r[l].get2d().y);if(A){c.lineTo(x[y[j]].get2d().x,x[y[j]].get2d().y);for(l=y[j];l<=w[j];l++)c.lineTo(t[l].get2d().x,t[l].get2d().y);c.lineTo(x[w[j]].get2d().x,x[w[j]].get2d().y)}else c.lineTo(s.get2d().x,s.get2d().y)}else if(w[j]=y[j];l--)c.lineTo(q[l].get2d().x,q[l].get2d().y);c.lineTo(r[y[j]].get2d().x,r[y[j]].get2d().y);if(A)for(l= y[j];l<=w[j];l++)c.lineTo(x[l].get2d().x,x[l].get2d().y);else c.lineTo(s.get2d().x,s.get2d().y);c.lineTo(r[w[j]].get2d().x,r[w[j]].get2d().y)}else{c.moveTo(r[w[j]].get2d().x,r[w[j]].get2d().y);for(l=w[j]-1;l>=B;l--)c.lineTo(r[l].get2d().x,r[l].get2d().y);for(l=B;l>=y[j];l--)c.lineTo(q[l].get2d().x,q[l].get2d().y);c.lineTo(r[y[j]].get2d().x,r[y[j]].get2d().y);if(A){for(l=y[j];l<=B;l++)c.lineTo(x[l].get2d().x,x[l].get2d().y);for(l=B;l<=w[j];l++)c.lineTo(t[l].get2d().x,t[l].get2d().y)}else c.lineTo(s.get2d().x, s.get2d().y)}if(c.isPointInPath(e,f)){a.hoveredMarkPoint=this;this.hActive=h;this.vActive=j;return}}}}};this.MarkPoint.prototype.draw=function(c){var e=a._rendererOptions.markPoint.slope;this.update();var f,k,p;p=!1;var u;switch(d){case "column":for(f=0;f0&&(p=!0,u=b[k]?b[k]:m.color,a.hoveredMarkPoint===this&&f===this.hActive&&k===this.vActive&&(u=GeoGlobe.Util.getShadeColor(u,20)),c.globalAlpha=l,c.globalCompositeOperation= "source-over",c.shadowBlur=0,c.shadowOffsetX=0,c.shadowOffsetY=0,c.beginPath(),c.moveTo(this.parts[f].cubes[k].vertexs[0][0],this.parts[f].cubes[k].vertexs[0][1]),c.lineTo(this.parts[f].cubes[k].vertexs[0][0],this.parts[f].cubes[k].vertexs[0][1]-this.parts[f].cubes[k].height*this.energy),c.lineTo(this.parts[f].cubes[k].vertexs[3][0],this.parts[f].cubes[k].vertexs[3][1]-this.parts[f].cubes[k].height*this.energy),c.lineTo(this.parts[f].cubes[k].vertexs[3][0],this.parts[f].cubes[k].vertexs[3][1]),c.closePath(), c.fillStyle=u,c.fill(),h!==0))c.beginPath(),c.moveTo(this.parts[f].cubes[k].vertexs[0][0],this.parts[f].cubes[k].vertexs[0][1]),c.lineTo(this.parts[f].cubes[k].vertexs[1][0],this.parts[f].cubes[k].vertexs[1][1]),c.lineTo(this.parts[f].cubes[k].vertexs[1][0],this.parts[f].cubes[k].vertexs[1][1]-this.parts[f].cubes[k].height*this.energy),c.lineTo(this.parts[f].cubes[k].vertexs[0][0],this.parts[f].cubes[k].vertexs[0][1]-this.parts[f].cubes[k].height*this.energy),c.closePath(),c.fillStyle=GeoGlobe.Util.getShadeColor(u, -40),c.fill(),c.beginPath(),c.moveTo(this.parts[f].cubes[k].vertexs[0][0],this.parts[f].cubes[k].vertexs[0][1]-this.parts[f].cubes[k].height*this.energy),c.lineTo(this.parts[f].cubes[k].vertexs[1][0],this.parts[f].cubes[k].vertexs[1][1]-this.parts[f].cubes[k].height*this.energy),c.lineTo(this.parts[f].cubes[k].vertexs[2][0],this.parts[f].cubes[k].vertexs[2][1]-this.parts[f].cubes[k].height*this.energy),c.lineTo(this.parts[f].cubes[k].vertexs[3][0],this.parts[f].cubes[k].vertexs[3][1]-this.parts[f].cubes[k].height* this.energy),c.closePath(),c.fillStyle=GeoGlobe.Util.getShadeColor(u,-20),c.fill(),c.shadowColor=m.shadowColor,c.shadowBlur=m.shadowBlur,c.shadowOffsetX=m.shadowOffsetX,c.shadowOffsetY=m.shadowOffsetY,c.globalCompositeOperation="destination-over",c.beginPath(),c.moveTo(this.parts[f].cubes[k].vertexs[1][0],this.parts[f].cubes[k].vertexs[1][1]),c.lineTo(this.parts[f].cubes[k].vertexs[1][0],this.parts[f].cubes[k].vertexs[1][1]-this.parts[f].cubes[k].height*this.energy),c.lineTo(this.parts[f].cubes[k].vertexs[2][0], this.parts[f].cubes[k].vertexs[2][1]-this.parts[f].cubes[k].height*this.energy),c.lineTo(this.parts[f].cubes[k].vertexs[2][0],this.parts[f].cubes[k].vertexs[2][1]),c.closePath(),c.fillStyle=u,c.fill(),c.beginPath(),c.moveTo(this.parts[f].cubes[k].vertexs[2][0],this.parts[f].cubes[k].vertexs[2][1]),c.lineTo(this.parts[f].cubes[k].vertexs[2][0],this.parts[f].cubes[k].vertexs[2][1]-this.parts[f].cubes[k].height*this.energy),c.lineTo(this.parts[f].cubes[k].vertexs[3][0],this.parts[f].cubes[k].vertexs[3][1]- this.parts[f].cubes[k].height*this.energy),c.lineTo(this.parts[f].cubes[k].vertexs[3][0],this.parts[f].cubes[k].vertexs[3][1]),c.closePath(),c.fillStyle=GeoGlobe.Util.getShadeColor(u,-40),c.fill(),c.beginPath(),c.moveTo(this.parts[f].cubes[k].vertexs[0][0],this.parts[f].cubes[k].vertexs[0][1]),c.lineTo(this.parts[f].cubes[k].vertexs[1][0],this.parts[f].cubes[k].vertexs[1][1]),c.lineTo(this.parts[f].cubes[k].vertexs[2][0],this.parts[f].cubes[k].vertexs[2][1]),c.lineTo(this.parts[f].cubes[k].vertexs[3][0], this.parts[f].cubes[k].vertexs[3][1]),c.closePath(),c.fillStyle=GeoGlobe.Util.getShadeColor(u,-20),c.fill();if(p)c.lineWidth=0.3,c.globalAlpha=1,c.globalCompositeOperation="destination-over",c.shadowBlur=0,c.shadowOffsetX=0,c.shadowOffsetY=0,c.strokeStyle="#fff",c.beginPath(),c.moveTo(this.x-this.parts.length/2*g-(this.parts.length/2-0.5)*j-5,this.y),c.lineTo(this.x+this.parts.length/2*g+(this.parts.length/2-0.5)*j+5,this.y),c.closePath(),c.stroke(),h!==0&&(c.beginPath(),c.moveTo(this.x-(h/2+5)*Math.cos(e), this.y+(h/2+5)*Math.sin(e)),c.lineTo(this.x+(h/2+5)*Math.cos(e),this.y-(h/2+5)*Math.sin(e)),c.closePath(),c.stroke());break;case "pie":c.globalAlpha=l;for(f=0;f<1;f++){u=this.parts[f].uCentrePoint;var s=this.parts[f].tCentrePoint,q=this.parts[f].oUnderPoints,r=this.parts[f].oTopPoints,t=this.parts[f].iUnderPoints,x=this.parts[f].iTopPoints,A=!1;this.parts[f].size/2>g&&(A=!0);var B=Math.round(25),z=[],y=[],w=[],D=[];for(k=0;k=0;k--)z[k]>0&&a.hoveredMarkPoint===this&&f===this.hActive&&k===this.vActive&&(D[k]=GeoGlobe.Util.getShadeColor(D[k],10));for(k=z.length-1;k>=0;k--)if(z[k]>0){c.globalCompositeOperation="destination-over";c.beginPath();c.moveTo(q[w[k]].get2d().x,q[w[k]].get2d().y);for(p=w[k]-1;p>=y[k];p--)c.lineTo(q[p].get2d().x,q[p].get2d().y);if(A)for(p=y[k];p<= w[k];p++)c.lineTo(t[p].get2d().x,t[p].get2d().y);else c.lineTo(u.get2d().x,u.get2d().y);c.fillStyle=D[k];c.fill()}if(e!==0){for(k=z.length-1;k>=0;k--)if(z[k]>0)c.globalCompositeOperation="source-over",c.beginPath(),c.moveTo(q[w[k]].get2d().x,q[w[k]].get2d().y),A?(c.lineTo(t[w[k]].get2d().x,t[w[k]].get2d().y),c.lineTo(x[w[k]].get2d().x,x[w[k]].get2d().y)):(c.lineTo(u.get2d().x,u.get2d().y),c.lineTo(s.get2d().x,s.get2d().y)),c.lineTo(r[w[k]].get2d().x,r[w[k]].get2d().y),c.moveTo(q[y[k]].get2d().x,q[y[k]].get2d().y), A?(c.lineTo(t[y[k]].get2d().x,t[y[k]].get2d().y),c.lineTo(x[y[k]].get2d().x,x[y[k]].get2d().y)):(c.lineTo(u.get2d().x,u.get2d().y),c.lineTo(s.get2d().x,s.get2d().y)),c.lineTo(r[y[k]].get2d().x,r[y[k]].get2d().y),c.fillStyle=GeoGlobe.Util.getShadeColor(D[k],-20),c.fill();if(A)for(k=z.length-1;k>=0;k--)if(z[k]>0){c.globalCompositeOperation="source-over";c.beginPath();c.moveTo(t[w[k]].get2d().x,t[w[k]].get2d().y);if(y[k]B){for(p=w[k]-1;p>=B;p--)c.lineTo(t[p].get2d().x,t[p].get2d().y);for(p= B;p<=w[k];p++)c.lineTo(x[p].get2d().x,x[p].get2d().y);c.moveTo(t[y[k]].get2d().x,t[y[k]].get2d().y);for(p=y[k]+1;p<=B;p++)c.lineTo(t[p].get2d().x,t[p].get2d().y);for(p=B;p>=y[k];p--)c.lineTo(x[p].get2d().x,x[p].get2d().y)}else{for(p=w[k]-1;p>=y[k];p--)c.lineTo(t[p].get2d().x,t[p].get2d().y);for(p=y[k];p<=w[k];p++)c.lineTo(x[p].get2d().x,x[p].get2d().y)}c.fillStyle=GeoGlobe.Util.getShadeColor(D[k],-20);c.fill()}for(k=z.length-1;k>=0;k--)if(z[k]>0){if(y[k]B){c.globalCompositeOperation="destination-over"; c.beginPath();c.moveTo(q[w[k]].get2d().x,q[w[k]].get2d().y);for(p=w[k]-1;p>=B;p--)c.lineTo(q[p].get2d().x,q[p].get2d().y);for(p=B;p<=w[k];p++)c.lineTo(r[p].get2d().x,r[p].get2d().y);c.fillStyle=GeoGlobe.Util.getShadeColor(D[k],-20);c.fill();c.globalCompositeOperation="source-over";c.beginPath();c.moveTo(q[y[k]].get2d().x,q[y[k]].get2d().y);for(p=y[k]+1;p<=B;p++)c.lineTo(q[p].get2d().x,q[p].get2d().y);for(p=B;p>=y[k];p--)c.lineTo(r[p].get2d().x,r[p].get2d().y)}else{c.globalCompositeOperation="source-over"; c.beginPath();c.moveTo(q[w[k]].get2d().x,q[w[k]].get2d().y);for(p=w[k]-1;p>=y[k];p--)c.lineTo(q[p].get2d().x,q[p].get2d().y);for(p=y[k];p<=w[k];p++)c.lineTo(r[p].get2d().x,r[p].get2d().y)}c.fillStyle=GeoGlobe.Util.getShadeColor(D[k],-20);c.fill()}for(k=z.length-1;k>=0;k--)if(z[k]>0){c.globalCompositeOperation="source-over";c.beginPath();c.moveTo(r[w[k]].get2d().x,r[w[k]].get2d().y);for(p=w[k]-1;p>=y[k];p--)c.lineTo(r[p].get2d().x,r[p].get2d().y);if(A)for(p=y[k];p<=w[k];p++)c.lineTo(x[p].get2d().x, x[p].get2d().y);else c.lineTo(s.get2d().x,s.get2d().y);c.fillStyle=D[k];c.fill()}}}}}},_initCanvas:function(){this.canvas=[];this.canvasContext=[];this.canvas.push(document.createElement("canvas"));this.canvasContext.push(this.canvas[0].getContext("2d"));this.cacheCanvas=[];this.cacheCanvasContext=[];this.cacheCanvas.push(document.createElement("canvas"));this.cacheCanvasContext.push(this.cacheCanvas[0].getContext("2d"));this.canvas[0].style.position="absolute";this.div.appendChild(this.canvas[0])}, _initTooltip:function(){if((this._rendererOptions.markPoint.hoverable||this._rendererOptions.markPoint.clickable)&&this._rendererOptions.tooltip.show)this.tooltipDiv=this.tooltipDiv||this.div.appendChild(document.createElement("div")),this.tooltipDiv.style.position="relative",this.tooltipDiv.style.display="none",this.tooltipDiv.style.zIndex=999,this.tooltipDiv.style.width="max-content",this.tooltipDiv.style.width=this._rendererOptions.tooltip.width+"px",this.tooltipDiv.style.color=this._rendererOptions.tooltip.textStyle.color, this.tooltipDiv.style.padding=this._rendererOptions.tooltip.padding.toString().split(" ").join("px ")+"px",this.tooltipDiv.style.font=this._rendererOptions.tooltip.textStyle.fontStyle+" "+this._rendererOptions.tooltip.textStyle.fontWeight+" "+this._rendererOptions.tooltip.textStyle.fontSize+"px "+this._rendererOptions.tooltip.textStyle.fontFamily,this.tooltipDiv.style["background-color"]=document.createElement("canvas").getContext?this._rendererOptions.tooltip.backgroundColor:GeoGlobe.Util.getRgbColor(this._rendererOptions.tooltip.backgroundColor), this.tooltipDiv.style["border-width"]=this._rendererOptions.tooltip.borderWidth+"px",this.tooltipDiv.style["border-color"]=this._rendererOptions.tooltip.borderColor,this.tooltipDiv.style["border-radius"]=this._rendererOptions.tooltip.borderRadius+"px",this.tooltipDiv.style["border-style"]="solid",this.tooltipDiv.style["white-space"]="nowrap",this.tooltipDiv.style["box-shadow"]="rgba(0, 0, 0, 0.2) 0px 10px 10px",this.tooltipDiv.style.transition="left 0.4s cubic-bezier(0.23, 1, 0.32, 1), top 0.4s cubic-bezier(0.23, 1, 0.32, 1)", this.tooltipDiv.innerHTML='

    '},render:function(){this._init_Legend();this._init_RendererOptions();this._initMarkPoint();this._initTooltip();this.setData(this.data);this.draw()},draw:function(){this.updateCountValueMinMaxSum(); this.updateXY();this.drawCanvas();this.drawLegend();this.frame&&cancelAnimationFrame(this.frame);var a=this;(function c(){a.frame=requestAnimationFrame(c);!a.DRAWDONE&&a.drawCanvas()})()},onMove:function(){this._rendererOptions.markPoint.slope=this._parent.map.getPitch()*Math.PI/180;this.updateXY();this.drawCanvas()},onMoveEnd:function(){this.redraw()},onClick:function(a){this.visibility&&this._rendererOptions.markPoint.clickable&&this.hoveredMarkPoint&&this._parent.fire("overlayerclick",{layer:this, feature:this.hoveredMarkPoint,event:a})},onMouseMove:function(a){this.visibility&&this._rendererOptions.markPoint.hoverable&&this.markPoints.length>0&&!this._parent.map.moving&&(this.hover(a.point.x,a.point.y),this.hoveredMarkPoint&&this._parent.fire("overlayerhover",{layer:this,feature:this.hoveredMarkPoint,event:a}))},onResize:function(){this.canvas[0].width=this.cacheCanvas[0].width=this.width=this._parent.map.transform.width;this.canvas[0].height=this.cacheCanvas[0].height=this.height=this._parent.map.transform.height; this.redraw()},redraw:function(){this.clearCanvas();this.updateCountValueMinMaxSum();this.updateXY();this.drawCanvas();this.drawLegend()},updateXY:function(){for(var a=this.markPoints.length;a--;)this.SWITCH&&this.markPoints[a].init(),!this.SWITCH&&this.markPoints[a].updateXY(),this.markPoints[a].updateSize(),this.markPoints[a].updatePartXY();this.SWITCH=!1},drawCanvas:function(){this.cacheCanvas[0].width=this.width;for(var a=this.markPoints.length;a--;)this.markPoints[a].draw(this.cacheCanvasContext[0]); this.canvas[0].width=this.width;this.canvasContext[0].drawImage(this.cacheCanvas[0],0,0)},drawLegend:function(){if(this._legend&&this._legend.show){if(!this.legendDiv)this.legendDiv=document.createElement("div"),this.legendDiv.style.position="absolute",this.legendDiv.style["background-color"]=this._legend.backgroundColor,this.legendDiv.style["border-color"]=this._legend.borderColor,this.legendDiv.style["border-width"]=this._legend.borderWidth+"px",this.legendDiv.style["border-radius"]=this._legend.borderRadius+ "px",this.legendDiv.style["border-style"]="solid",this.legendDiv.style["box-shadow"]=this._legend.shadowOffsetX+"px "+this._legend.shadowOffsetY+"px "+this._legend.shadowBlur+"px "+this._legend.shadowColor,this.legendDiv.style.padding=this._legend.padding+"px",this.legendDiv.style.left=this._legend.left!==null?this._legend.left+"px":null,this.legendDiv.style.right=this._legend.right!==null?this._legend.right+"px":null,this.legendDiv.style.top=this._legend.top!==null?this._legend.top+"px":null,this.legendDiv.style.bottom= this._legend.bottom!==null?this._legend.bottom+"px":null,this.legendCanvas=document.createElement("canvas"),this.legendCanvasContext=this.legendCanvas.getContext("2d"),this.legendCanvas.style.display="block",this.legendCanvasContext.font=this._legend.textStyle.fontStyle+" "+this._legend.textStyle.fontWeight+" "+this._legend.textStyle.fontSize+"px "+this._legend.textStyle.fontFamily,this.legendDiv.appendChild(this.legendCanvas),this.div.appendChild(this.legendDiv);for(var a=[],b=null,c=0,d=this._legend.vLegendLabels.length;c< d;c++)for(var b=this._legend.itemWidth+10+this.legendCanvasContext.measureText(this._legend.vLegendLabels[c].toString()).width,e=this._legend.col,f=0;fthis.measureValueMaxSum&&(this.measureValueMaxSum=g)}}},clearCanvas:function(){this.canvas[0].width=this.cacheCanvas[0].width= this.width},stopDraw:function(){cancelAnimationFrame(this.frame);this.clearCanvas()},destroy:function(){this.stopDraw();this._parent.container.removeChild(this.div);this.MarkPoint=null;this.markPoints=[];this.canvas=[];this.data=[];this.cacheCanvas=[];this.canvasContext=[];this.cacheCanvasContext=[];this._rendererOptions={}},hover:function(a,b){this.lastHoveredMarkPoint=this.hoveredMarkPoint?GeoGlobe.Util.clone(this.hoveredMarkPoint):null;this.hoveredMarkPoint=null;for(var c=0,d=this.markPoints.length;c< d;c++)!this.hoveredMarkPoint&&this.markPoints[c].isPointInPath(this.cacheCanvasContext[0],a,b);this.drawCanvas();this.hoveredMarkPoint?(this.canvas[0].style.cursor="pointer",this.showTooltip(this.hoveredMarkPoint,a,b)):(this.canvas[0].style.cursor="grab",this.hideTooltip())},showTooltip:function(a,b,c){if(this._rendererOptions.tooltip.show){this.tooltipDiv.getElementsByTagName("span")[0].textContent=this._legend.hLegendLabels[a.hActive];this.tooltipDiv.getElementsByTagName("span")[1].textContent= a.name;var d=this.tooltipDiv.getElementsByTagName("ul")[0];d.innerHTML="";for(var e=0;e
    '+this._legend.vLegendLabels[e]+ "\uff1a"+this._rendererOptions.tooltip.formatter.replace("{0}",a.measureValues[a.hActive][e])+"");this.tooltipDiv.style.top=c-15+"px";this.tooltipDiv.style.left=b+15+"px";this.tooltipDiv.style.display="block"}},hideTooltip:function(){if(this._rendererOptions.tooltip.show)this.tooltipDiv.style.display="none"},addTo:function(a){this._parent=a;this._parent.addLayer(this);this._parent.container.appendChild(this.div);this.canvas[0].width=this.cacheCanvas[0].width=this.width=this._parent.map.transform.width; this.canvas[0].height=this.cacheCanvas[0].height=this.height=this._parent.map.transform.height},setVisible:function(a){this.visibility=a;this.div.style.display=a?"block":"none";this.legendDiv&&(this.legendDiv.style.display=a?"block":"none");a?this.draw():this.stopDraw()},setData:function(a){this.data=a;for(var b=[],c=0;cd&&(d=Number(e))}this.MarkFace=function(e,g,h,j,l,m){this.index=e;this.name=g;this.value=h;this.lon=j;this.lat=l;this.polygons=m;this.vertices=[];this.weight=d===1?(this.value-a.minValue)/(a.maxValue-a.minValue):h>d?1:h/d;this.color=typeof b.color==="object"?"rgba("+c[parseInt(this.weight*255,10)*4]+","+c[parseInt(this.weight*255,10)*4+1]+","+c[parseInt(this.weight* 255,10)*4+2]+","+c[3]/255+")":b.color};this.MarkFace.prototype.updateXY=function(){var b=a._parent.map.project([this.lon,this.lat]);this.x=b.x;this.y=b.y;var c;this.vertices=[];this.polygons.map(function(d){d.geometry.coordinates.map(function(e){c=[];(d.geometry.type==="MultiPolygon"?e[0]:e).map(function(d){b=a._parent.map.project(d);c.push([b.x,b.y])});this.vertices.push(c)}.bind(this))}.bind(this))};this.MarkFace.prototype.isPointInPath=function(b,c,d){b.beginPath();this.vertices.map(function(a){b.moveTo(a[0][0], a[0][1]);a.map(function(a){b.lineTo(a[0],a[1])})});b.closePath();if(b.isPointInPath(c,d))a.hoveredMarkFace=this};this.MarkFace.prototype.draw=function(c){c.shadowColor=b.shadowColor;c.shadowBlur=b.shadowBlur;c.shadowOffsetX=b.shadowOffsetX;c.shadowOffsetY=b.shadowOffsetY;c.beginPath();this.vertices.map(function(a){c.moveTo(a[0][0],a[0][1]);a.map(function(a){c.lineTo(a[0],a[1])})});c.closePath();c.fillStyle=a.hoveredMarkFace===this?GeoGlobe.Util.getShadeColor(this.color,20):this.color;c.strokeStyle= b.borderColor;c.lineWidth=b.borderWidth;c.stroke();c.fill()}},_initBounds:function(){var a=this,b=new XMLHttpRequest;b.open("GET",this.boundsURL,!0);b.responseType="json";b.onload=function(){switch(this.response.features[0].geometry.type){case "Polygon":a.bounds=this.response.features;break;case "MultiPolygon":a.bounds=[];for(var b=this.response.features[0].geometry.coordinates,d=0;d0&&!this._parent.map.moving&&(this.hover(a.point.x,a.point.y), this.hoveredMarkFace&&this._parent.fire("overlayerhover",{layer:this,feature:this.hoveredMarkFace,event:a}))},onResize:function(){this.canvas[0].width=this.cacheCanvas[0].width=this.width=this._parent.map.transform.width;this.canvas[0].height=this.cacheCanvas[0].height=this.height=this._parent.map.transform.height;this.redraw()},redraw:function(){this.clearCanvas();this.updateXY();this.drawCanvas()},updateXY:function(){for(var a=this.markFaces.length;a--;)this.markFaces[a].updateXY()},drawCanvas:function(){this.cacheCanvas[0].width= this.width;for(var a=this.markFaces.length;a--;)this.markFaces[a].draw(this.cacheCanvasContext[0]);this.canvas[0].width=this.width;this.canvasContext[0].drawImage(this.cacheCanvas[0],0,0)},clearCanvas:function(){this.canvas[0].width=this.cacheCanvas[0].width=this.width},stopDraw:function(){cancelAnimationFrame(this.frame);this.clearCanvas()},destroy:function(){this.stopDraw();this._parent.container.removeChild(this.div);this.MarkPoint=null;this.markPoints=[];this.canvas=[];this.data=[];this.cacheCanvas= [];this.canvasContext=[];this.cacheCanvasContext=[];this._rendererOptions={}},hover:function(a,b){this.lastHoveredMarkFace=this.hoveredMarkFace?GeoGlobe.Util.clone(this.hoveredMarkFace):null;this.hoveredMarkFace=null;for(var c=0,d=this.markFaces.length;cthis.maxValue)this.maxValue= a[b].properties[this._rendererOptions.markFace.valueField]}var c=this,d=setInterval(function(){if(c.bounds){clearInterval(d);c.markFaces=[];c.hoveredMarkFace=null;for(var b=c.getVoronoi({type:"FeatureCollection",features:a}).features,f=c.bounds,g,h,j=0;j0&&!this._parent.map.moving&&(this.hover(a.point.x,a.point.y),this.hoveredMarkFace&&this._parent.fire("overlayerhover",{layer:this,feature:this.hoveredMarkFace,event:a}))},onResize:function(){this.canvas[0].width=this.cacheCanvas[0].width=this.width=this.parentMap.width;this.canvas[0].height=this.cacheCanvas[0].height=this.height=this.parentMap.height; this.redraw()},redraw:function(){this.clearCanvas();this.updateXY();this.drawCanvas()},updateXY:function(){for(var a=this.markFaces.length;a--;)this.markFaces[a].updateXY()},clearCanvas:function(){this.canvas[0].width=this.cacheCanvas[0].width=this.width},stopDraw:function(){cancelAnimationFrame(this.frame);this.clearCanvas()},destroy:function(){this.stopDraw();this._parent.container.removeChild(this.div);this.MarkPoint=null;this.markPoints=[];this.canvas=[];this.data=[];this.cacheCanvas=[];this.canvasContext= [];this.cacheCanvasContext=[];this._rendererOptions={}},hover:function(a,b){this.lastHoveredMarkFace=this.hoveredMarkFace?GeoGlobe.Util.clone(this.hoveredMarkFace,!1):null;this.hoveredMarkFace=null;for(var c=0,d=this.markFaces.length;c1&&(a.energy=1),a.drawCanvas1()})()},onMove:function(){this.animation=!1;this.updateXY();this.drawCanvas1();this.drawCanvas2()},onMoveEnd:function(){this.redraw()}, onMouseMove:function(a){if(this.visibility&&(this._rendererOptions.markLine.hoverable||this._rendererOptions.markPoint.hoverable)&&this.markPoints.length>0&&!this._parent.map.moving)this.hover(a.point.x,a.point.y),this.hoveredMarkPoint&&this._parent.fire("overlayerhover",{layer:this,feature:this.hoveredMarkPoint,event:a})},onResize:function(){this.canvas[0].width=this.canvas[1].width=this.cacheCanvas[0].width=this.cacheCanvas[1].width=this.width=this._parent.map.transform.width;this.canvas[0].height= this.canvas[1].height=this.cacheCanvas[0].height=this.cacheCanvas[1].height=this.height=this._parent.map.transform.height;this.redraw()},redraw:function(){this.clearCanvas();this.updateXY();this.drawCanvas1();this.drawCanvas2()},updateXY:function(){this.markPoints.forEach(function(a){a.updateXY()})},drawCanvas1:function(){this.cacheCanvas[0].width=this.width;var a=this;this.markLines.forEach(function(b){b.draw(a.cacheCanvasContext[0])});this.markPoints.forEach(function(b){b.draw1(a.cacheCanvasContext[0])}); this.canvas[0].width=this.width;this.canvasContext[0].drawImage(this.cacheCanvas[0],0,0)},drawCanvas2:function(){},clearCanvas:function(){this.canvas[0].width=this.canvas[1].width=this.cacheCanvas[0].width=this.cacheCanvas[1].width=this.width},stopDraw:function(){cancelAnimationFrame(this.frame);this.clearCanvas()},destroy:function(){this.stopDraw();this._parent.container.removeChild(this.div);this.markPointImages=[];this.MarkPoint=null;this.markPoints=[];this.MarkLine=null;this.markLines=[];this.canvas= [];this.data=[];this.cacheCanvas=[];this.canvasContext=[];this.cacheCanvasContext=[];this._rendererOptions={}},hover:function(a,b){this.hoveredMarkPoint=this.hoveredMarkLine=null;var c=this;this.markPoints.forEach(function(d){!c.hoveredMarkPoint&&d.isPointInPath(c.cacheCanvasContext[0],a,b)});this.markLines.forEach(function(d){!c.hoveredMarkLine&&d.isPointInStroke(c.cacheCanvasContext[0],a,b)});this.drawCanvas1();this.hoveredMarkLine||this.hoveredMarkPoint?(this.showTooltip(this.hoveredMarkLine?this.hoveredMarkLine.source.name+ " > "+this.hoveredMarkLine.target.name:this.hoveredMarkPoint.name,a,b),this.canvas[1].style.cursor="pointer"):(this.hideTooltip(),this.canvas[1].style.cursor="grab")},showTooltip:function(a,b,c){if(this._rendererOptions.tooltip.show)this.tooltipDiv.textContent=a,this.tooltipDiv.style.top=c-15+"px",this.tooltipDiv.style.left=b+15+"px",this.tooltipDiv.style.display="block"},hideTooltip:function(){if(this._rendererOptions.tooltip.show)this.tooltipDiv.style.display="none"},addTo:function(a){this._parent= a;this._parent.addLayer(this);this._parent.container.appendChild(this.div);this.canvas[0].width=this.canvas[1].width=this.cacheCanvas[0].width=this.cacheCanvas[1].width=this.width=this._parent.map.transform.width;this.canvas[0].height=this.canvas[1].height=this.cacheCanvas[0].height=this.cacheCanvas[1].height=this.height=this._parent.map.transform.height},setVisible:function(a){this.visibility=a;this.div.style.display=a?"block":"none";a?this.draw():this.stopDraw()},getMarkPointById:function(a){for(var b, c=0,d=this.markPoints.length;c0.5?1:-1)*0.002,0.001);break;case "ring":g[f].energy=[0,1/3*d.scaleSize,2/3*d.scaleSize],g[f].increment=Math.max(0.1*d.scaleSize/d.period+Math.random()*(Math.random()>0.5?1:-1)*0.002,0.001)}}};this.MarkPointsSet.prototype.update=function(){var a; for(a=this.markPoints.length;a--;)switch(this.markPoints[a].symbol){case "circle":for(var b=0;b<4;b++)this.markPoints[a].energy[b]+=this.markPoints[a].increment,this.markPoints[a].energy[b]>1&&(this.markPoints[a].energy[b]=0);break;case "ring":for(b=0;b<3;b++)this.markPoints[a].energy[b]+=this.markPoints[a].increment,this.markPoints[a].energy[b]>d.scaleSize&&(this.markPoints[a].energy[b]=0)}};this.MarkPointsSet.prototype.isPointInPath=function(b,c,d){if(b)for(var e=0;e 0&&!this._parent.map.moving&&(this.hover(a.point.x,a.point.y),this.hoveredMarkPoint&&this._parent.fire("overlayerhover",{layer:this,feature:this.hoveredMarkPoint,event:a}))},onMoveEnd:function(){this.redraw()},onResize:function(){this.canvas[0].width=this.cacheCanvas[0].width=this.width=this._parent.map.transform.width;this.canvas[0].height=this.cacheCanvas[0].height=this.height=this._parent.map.transform.height;this.redraw()},redraw:function(){this.clearCanvas();this.updateXY();this.drawCanvas()}, updateXY:function(){for(var a=this.markPointsSets.length;a--;)this.markPointsSets[a].updateXY()},drawCanvas:function(){this.cacheCanvas[0].width=this.width;for(var a=0,b=this.markPointsSets.length;ab[0])a.size=b[1]});c.color.forEach(function(b){if(a.count>b[0])a.color=b[1]});this.alpha=this.color.indexOf("a(")!==-1?+this.color.split(",")[3].split(")")[0]: 1;return this};this.MarkCluster.prototype.updateXY=function(){var b=a._parent.map.project([this.lon,this.lat]);this.x=this.ox=b.x;this.y=this.oy=b.y};this.MarkCluster.prototype.draw=function(e,f){e.save();e.shadowColor=c.shadowColor;e.shadowBlur=c.shadowBlur;e.shadowOffsetX=c.shadowOffsetX;e.shadowOffsetY=c.shadowOffsetY;e.globalAlpha=f*this.alpha;e.translate(this.x,this.y);a.hoveredMarkCluster===this&&e.scale(1.1,1.1);switch(b.symbol){case "round":e.beginPath();e.arc(0,0,this.size/2,0,Math.PI*2, !0);e.fillStyle=a.hoveredMarkCluster===this?GeoGlobe.Util.getShadeColor(this.color,20):this.color;e.fill();if(c.lineWidth)e.lineWidth=c.lineWidth,e.strokeStyle=a.hoveredMarkCluster===this?GeoGlobe.Util.getShadeColor(c.lineColor,20):c.lineColor,e.stroke();break;case "icon":a.markClusterImages[this.size]&&e.drawImage(a.markClusterImages[this.size],-this.size/2,-this.size/2,this.size,this.size)}if(d.show)e.font=d.fontStyle+" "+d.fontWeight+" "+d.fontSize+"px "+d.fontFamily,e.textAlign=d.align,e.textBaseline= d.baseline,e.fillStyle=d.color,e.fillText(this.count,0,0);e.restore()};this.MarkCluster.prototype.isPointInPath=function(c,d,g){c.beginPath();switch(b.symbol){case "round":c.arc(this.x,this.y,this.size/2,0,Math.PI*2,!0);break;case "icon":c.rect(this.x-this.size/2,this.y-this.size/2,this.size,this.size)}if(c.isPointInPath(d,g))a.hoveredMarkCluster=this}},render:function(){this._init_RendererOptions();this._initTooltip();this._initMarkPointImage();this._initMarkClusterImages();this._initMarkPoint(); this._initMarkCluster();this.setData(this.data);this.draw()},draw:function(){this.updateXY();this.drawCanvas();this.frame&&cancelAnimationFrame(this.frame);var a=this;(function c(){a.frame=requestAnimationFrame(c);if(a._animated&&(a._inout==="in"?(a._ratio+=0.08,a._ratio>1&&(a._ratio=1)):(a._ratio-=0.08,a._ratio<0&&(a._ratio=0)),a.energy=1-Math.cos(Math.PI/2*a._ratio),a.drawCanvasFrame(),a._ratio===0||a._ratio===1))a._animated=!1,a._inout=void 0,a._from=void 0,a._to=void 0})()},onZoomStart:function(){this._animated= !1;this._from=this._parent.map.getZoom();if(this._from>this.markClusterMaxZoom){this._fromMarkPoints=[];for(var a=this._parent.getBounds(this._rendererOptions.markPoint.symbolHeight/2),b,c=this.markPoints,d=0,e=c.length;d=a[0][0]&&b.lon<=a[1][0]&&b.lat>=a[0][1]&&b.lat<=a[1][1]&&this._fromMarkPoints.push(b)}else{this._fromMarkClusters=[];a=this._parent.getBounds(40);c=this.markClusterZoomMap[Math.floor(this._from)].markClusters;d=0;for(e=c.length;d=a[0][0]&& b.lon<=a[1][0]&&b.lat>=a[0][1]&&b.lat<=a[1][1]&&this._fromMarkClusters.push(b)}},onMove:function(){this.updateXY();this.drawCanvas()},onZoomEnd:function(){this._to=this._parent.map.getZoom();this._from&&Math.floor(this._from)!==Math.floor(this._to)?(this._fromthis.markClusterMaxZoom&&this.markClusterMaxZoom>=this._to?(this._animated=!0,this._parentMarkClusterZoom=this.markClusterZoomMap[Math.floor(this._to)],this._childMarkClusterZoom=void 0):this._from<=this.markClusterMaxZoom? (this._animated=!0,this._parentMarkClusterZoom=this.markClusterZoomMap[Math.floor(this._to)],this._childMarkClusterZoom=this.markClusterZoomMap[Math.floor(this._from)]):(this._animated=!1,this._to=this._from=void 0)),this._parentMarkClusters=this._parentMarkClusterZoom?this._parentMarkClusterZoom.markClusters:[],this._childMarkClusters=this._childMarkClusterZoom?this._childMarkClusterZoom.markClusters:[]):(this._animated=!1,this._to=this._from=void 0)},onMoveEnd:function(){this.redraw()},onClick:function(a){this._parent.map.getZoom()> this.markClusterMaxZoom?this.visibility&&this._rendererOptions.markPoint.clickable&&this.hoveredMarkPoint&&this._parent.fire("overlayerclick",{layer:this,feature:this.hoveredMarkPoint,event:a}):this.visibility&&this._rendererOptions.markCluster.clickable&&(this.hoveredMarkCluster||this.hoveredMarkPoint)&&this._parent.fire("overlayerclick",{layer:this,feature:this.hoveredMarkCluster?this.hoveredMarkCluster:this.hoveredMarkPoint,event:a})},onMouseMove:function(a){var b=this._parent.map.getZoom();b> this.markClusterMaxZoom?this.visibility&&this._rendererOptions.markPoint.hoverable&&this.markPoints.length>0&&!this._parent.map.moving&&(this.hover(a.point.x,a.point.y),this.hoveredMarkPoint&&this._parent.fire("overlayerhover",{layer:this,feature:this.hoveredMarkPoint,event:a})):this.visibility&&this._rendererOptions.markCluster.hoverable&&this.markClusterZoomMap[Math.floor(b)].markClusters.length>0&&!this._parent.map.moving&&(this.hover(a.point.x,a.point.y),(this.hoveredMarkCluster||this.hoveredMarkPoint)&& this._parent.fire("overlayerhover",{layer:this,feature:this.hoveredMarkCluster?this.hoveredMarkCluster:this.hoveredMarkPoint,event:a}))},onResize:function(){this.canvas[0].width=this.cacheCanvas[0].width=this.width=this._parent.map.transform.width;this.canvas[0].height=this.cacheCanvas[0].height=this.height=this._parent.map.transform.height;this.redraw()},redraw:function(){this.clearCanvas();this.updateXY();this.drawCanvas()},updateXY:function(){var a=this._parent.map.getZoom();this._from===void 0? a>this.markClusterMaxZoom?this.updateMarkPointXY():this.updateMarkClusterXY(a):this._to===void 0?this._from>this.markClusterMaxZoom?this.updateMarkPointXY():this.updateMarkClusterXY(this._from):this._to>this.markClusterMaxZoom?this.updateMarkPointXY():this.updateMarkClusterXY(this._to)},updateMarkPointXY:function(){for(var a=this._parent.getBounds(this._rendererOptions.markPoint.symbolHeight/2),b,c=this.markPoints,d=0,e=c.length;d=a[0][0]&&b.lon<=a[1][0]&&b.lat>=a[0][1]&&b.lat<= a[1][1]?(b.visible=!0,b.updateXY()):b.visible=!1},updateMarkClusterXY:function(a){for(var b=this._parent.getBounds(40),c=this.markClusterZoomMap[Math.floor(a)].markClusters,d=0,e=c.length;d=b[0][0]&&a.lon<=b[1][0]&&a.lat>=b[0][1]&&a.lat<=b[1][1]?(a.visible=!0,a.updateXY()):a.visible=!1},drawCanvas:function(){this.cacheCanvas[0].width=this.width;var a=this._from!==void 0?this._from:this._parent.map.getZoom();if(a>this.markClusterMaxZoom)for(var b,c=this._from!==void 0?this._fromMarkPoints: this.markPoints,a=0,d=c.length;a1?b.draw(this.cacheCanvasContext[0],1):(b.children[0].x=b.x,b.children[0].y=b.y,b.children[0].draw(this.cacheCanvasContext[0],1))}this.canvas[0].width=this.width;this.canvasContext[0].drawImage(this.cacheCanvas[0],0,0)},drawCanvasFrame:function(){this.cacheCanvas[0].width= this.width;for(var a,b=this._parentMarkClusters,c=0,d=b.length;c1?a.draw(this.cacheCanvasContext[0],1-this.energy):(a.children[0].x=a.x,a.children[0].y=a.y,a.children[0].draw(this.cacheCanvasContext[0],1-this.energy));if(this._childMarkClusterZoom){var c=this._parentMarkClusterZoom.zoom,b=this._parent.map.getResolutions()[c]*80,e=a=void 0;a=void 0;for(var f,g=this._childMarkClusters,c=0,d=g.length;c1?f.draw(this.cacheCanvasContext[0],this.energy):(f.children[0].x=f.x,f.children[0].y=f.y,f.children[0].draw(this.cacheCanvasContext[0],this.energy))}}else{c=0;for(g=b.length;c< g;c++){a=b[c];f=a.children;for(var e=0,h=f.length;ethis.markClusterMaxZoom)for(var d=0,e=this.markPoints.length;d1?f.isPointInPath(this.cacheCanvasContext[0],a,b):f.children[0].isPointInPath(this.cacheCanvasContext[0],a,b));this.drawCanvas();this.hoveredMarkPoint||this.hoveredMarkCluster?(this.canvas[0].style.cursor="pointer",this.hoveredMarkPoint?this.showTooltip(this.hoveredMarkPoint.attributes[this._rendererOptions.markPoint.nameField], a,b):this.hideTooltip()):(this.canvas[0].style.cursor="grab",this.hideTooltip())},showTooltip:function(a,b,c){if(this._rendererOptions.tooltip.show)this.tooltipDiv.textContent=a,this.tooltipDiv.style.top=c-15+"px",this.tooltipDiv.style.left=b+15+"px",this.tooltipDiv.style.display="block"},hideTooltip:function(){if(this._rendererOptions.tooltip.show)this.tooltipDiv.style.display="none"},addTo:function(a){this._parent=a;this._parent.addLayer(this);this._parent.container.appendChild(this.div);this.canvas[0].width= this.cacheCanvas[0].width=this.width=this._parent.map.transform.width;this.canvas[0].height=this.cacheCanvas[0].height=this.height=this._parent.map.transform.height},setVisible:function(a){this.visibility=a;this.div.style.display=a?"block":"none";a?this.draw():this.stopDraw()},setData:function(a){this.data=a;this.hoveredMarkCluster=this.hoveredMarkPoint=null;this.markPoints=[];for(var b=0;bf)o=Math.floor((a.mercator[0]-e._markPointSWMercator[0])/j),v=Math.floor((a.mercator[1]-e._markPointSWMercator[1])/j),k=o+"_"+ v,g[n].parent=e.markClusterZoomMap[b-1].markClustersMap[k]});for(n in g)g[n]=new this.MarkCluster(n,g[n].count,g[n].sumLonLat,g[n].children,g[n].parent);var p=this._mergeMarkClusters(g,h/2);this.markClusterZoomMap[b]={};this.markClusterZoomMap[b].zoom=b;this.markClusterZoomMap[b].markClusters=[];this.markClusterZoomMap[b].markClustersMap=p.markClustersMap;for(n in p.markClusters)this.markClusterZoomMap[b].markClusters.push(p.markClusters[n].init())}},_mergeMarkClusters:function(a,b){var c={},d;for(d in a)c[d]= a[d];var e={},f={},g=void 0,h=void 0;for(d in a)if(g=a[d],!f[d])for(var h=d.split("_"),j=+h[0],l=+h[1],m=-1;m<=1;m++)for(var n=-1;n<=1;n++)if(!(m===0&&n===0)){var o=j+m+"_"+(l+n);if(h=a[o]){var v=GeoGlobe.Util.transferToMercator([g.sumLonLat[0]/g.count,g.sumLonLat[1]/g.count]),k=GeoGlobe.Util.transferToMercator([h.sumLonLat[0]/h.count,h.sumLonLat[1]/h.count]),p=v[0]-k[0],v=v[1]-k[1];Math.sqrt(p*p+v*v)<=b&&(e[d]=e[d]||[],e[d].push(h),f[o]=1)}}for(var u in e)if(d=a[u]){f=e[u];for(g=0;g1E3){setTimeout(H,25);return}}u(f,a,e)})()},B=function(b,c){function k(a){return a.charAt(0)=="#"?a.substring(1,7):a}function l(){o.forEach(function(a){a.length=0});q.forEach(function(a){if(a.age>e)c.randomize(a).age=0;var b=a.x,d=a.y,f=c(b,d),g=f[2];g===null?a.age=e:(b+=f[0],d+=f[1],c(b,d)[2]!==null?(a.xt=b,a.yt=d,o[n.indexFor(g)].push(a)):(a.x=b,a.y=d));a.age+=1})}function m(){var a=r.globalCompositeOperation;r.globalCompositeOperation="destination-in";r.fillRect(b.x,b.y,b.width, b.height);r.globalCompositeOperation=a;o.forEach(function(a,b){if(a.length>0)r.beginPath(),r.strokeStyle=n[b],a.forEach(function(a){r.moveTo(a.x,a.y);r.lineTo(a.xt,a.yt);a.x=a.xt;a.y=a.yt}),r.stroke()})}var n=function(a,b){var c=[];j.forEach(function(a){c.push("rgba("+parseInt(k(a).substring(0,2),16)+", "+parseInt(k(a).substring(2,4),16)+", "+parseInt(k(a).substring(4,6),16)+", "+h+")")});c.indexFor=function(a){return Math.floor(Math.min(a,b)/b*(c.length-1))};return c}(10,d),o=n.map(function(){return[]}), p=Math.round(b.width*b.height*g);/android|blackberry|iemobile|ipad|iphone|ipod|opera mini|webos/i.test(navigator.userAgent)&&(p*=0.075);for(var q=[],s=0;s=360,m=0;mb!=this[d][1]>b&&a<(this[d][0]-this[c][0])*(b-this[c][1])/(this[d][1]-this[c][1])+this[c][0]&&(e=!e);return e};this.kriging=function(){var a={};kriging_matrix_diag=function(a,c){var d,e=[0].rep(c*c);for(d=0;d=o&&(o=Math.abs(a[m*c+n]),l=m,j=n);++g[j];if(l!=j){for(m=0;m=0;m--)if(f[m]!=e[m])for(n=0;nd)return c+(e- c)/d;return c+(e-c)/d*(1.5*(a/d)-0.5*Math.pow(a/d,3))};a.train=function(a,c,d,e,f,g){var h={t:a,x:c,y:d,nugget:0,range:0,sill:0,A:1/3,n:0};switch(e){case "gaussian":h.model=kriging_variogram_gaussian;break;case "exponential":h.model=kriging_variogram_exponential;break;case "spherical":h.model=kriging_variogram_spherical}var j,l,m,n,o=a.length,v=Array((o*o-o)/2);for(m=j=0;j30?30:(o*o-o)/2,p=h.range/k,u=[0].rep(k),s=[0].rep(k);if(k<30)for(n=0;n=(o*o-o)/2)break;m>0&&(u[n]/=m,s[n]/=m,n++)}if(n<2)return h}o=n;h.range=u[o-1]-u[0];m=[1].rep(2*o);l=Array(o);n=h.A;for(j=0;jj[1]&&(j[1]=b[e][f][0]),b[e][f][1]l[1]&&(l[1]=b[e][f][1]);var m,n,o=Array(2),v=Array(2),k=Array(2),p=Array(2);f=Math.ceil((j[1]-j[0])/d);g=Math.ceil((l[1]-l[0])/d);var u=Array(f+1);for(e=0;e<=f;e++)u[e]=Array(g+1);for(e=0;ek[1]&&(k[1]=b[e][f][0]),b[e][f][1]p[1]&&(p[1]=b[e][f][1]);o[0]=Math.floor((k[0]-(k[0]-j[0])%d-j[0])/d);o[1]=Math.ceil((k[1]-(k[1]-j[1])%d-j[0])/d);v[0]=Math.floor((p[0]-(p[0]-l[0])%d-l[0])/d);v[1]=Math.ceil((p[1]-(p[1]-l[1])%d-l[0])/d);for(f=o[0];f<=o[1];f++)for(g=v[0];g<=v[1];g++)m=j[0]+f*d,n=l[0]+g*d,b[e].pip(m,n)&&(u[f][g]=a.predict(m,n,c))}u.xlim=j;u.ylim=l;u.zlim=[c.t.min(),c.t.max()];u.width=d;return u}};a.contour=function(){};a.plot= function(a,c,d,e,f){var g=a.getContext("2d");g.clearRect(0,0,a.width,a.height);var h=[d[1]-d[0],e[1]-e[0],c.zlim[1]-c.zlim[0]],j,l,m,n,o,v,k,p=c.length,u=c[0].length,s=Math.ceil(c.width*a.width/(d[1]-d[0])),q=Math.ceil(c.width*a.height/(e[1]-e[0]));j=0;for(k=n=void 0;j1&&(o=1);g.fillStyle=f[Math.floor((f.length-1)*o)];m=Math.round(m- s/2);o=Math.round(n-q/2);var r=s,t=q;k!==void 0&&(t=k-o);v!==void 0&&(r=v-m);k=o;n=m;g.fillRect(m,o,r,t)}}};return a}()},_initWorker:function(){var a=this,b=new Blob(['Array.prototype.max=function(){return Math.max.apply(null,this)};Array.prototype.min=function(){return Math.min.apply(null,this)};Array.prototype.mean=function(){var a,b;for(a=0,b=0;af)!=(this[b][1]>f))&&(a<(this[b][0]-this[d][0])*(f-this[d][1])/(this[b][1]-this[d][1])+this[d][0])){e=!e}}return e};this.kriging=function(){var c={};kriging_matrix_diag=function(h,g){var e,f=[0].rep(g*g);for(e=0;e=v){v=Math.abs(f[s*o+r]);E=s;B=r}}}}}++(w[B]);if(E!=B){for(q=0;q=0;q--){if(D[q]!=g[q]){for(r=0;rg){return i+(f-i)/g}return i+((f-i)/g)*(1.5*(j/g)-0.5*Math.pow(j/g,3))};c.train=function(D,w,v,o,B,q){var Q={t:D,x:w,y:v,nugget:0,range:0,sill:0,A:1/3,n:0};switch(o){case"gaussian":Q.model=b;break;case"exponential":Q.model=a;break;case"spherical":Q.model=d;break}var O,N,L,J,I=D.length;var p=Array((I*I-I)/2);for(O=0,L=0;O30?30:(I*I-I)/2;var P=Q.range/s;var G=[0].rep(s);var R=[0].rep(s);if(s<30){for(J=0;J=((I*I-I)/2)){break}}if(L>0){G[J]/=L;R[J]/=L;J++}}if(J<2){return Q}}I=J;Q.range=G[I-1]-G[0];var h=[1].rep(2*I);var g=Array(I);var H=Q.A;for(O=0;Oe[1]){e[1]=B[v][u][0]}if(B[v][u][1]g[1]){g[1]=B[v][u][1]}}}var h,f;var D=Array(2),C=Array(2);var r=Array(2);var z=Array(2);var m=Math.ceil((e[1]-e[0])/q);var l=Math.ceil((g[1]-g[0])/q);var o=Array(m+1);for(v=0;v<=m;v++){o[v]=Array(l+1)}for(v=0;vr[1]){r[1]=B[v][u][0]}if(B[v][u][1]z[1]){z[1]=B[v][u][1]}}D[0]=Math.floor(((r[0]-((r[0]-e[0])%q))-e[0])/q);D[1]=Math.ceil(((r[1]-((r[1]-e[1])%q))-e[0])/q);C[0]=Math.floor(((z[0]-((z[0]-g[0])%q))-g[0])/q);C[1]=Math.ceil(((z[1]-((z[1]-g[1])%q))-g[0])/q);for(u=D[0];u<=D[1];u++){for(s=C[0];s<=C[1];s++){h=e[0]+u*q;f=g[0]+s*q;if(B[v].pip(h,f)){o[u][s]=c.predict(h,f,w)}}}}o.xlim=e;o.ylim=g;o.zlim=[w.t.min(),w.t.max()];o.width=q;return o};c.contour=function(f,e,g){};c.plot=function(g,e,A,s,f){var B=g.getContext("2d");B.clearRect(0,0,g.width,g.height);var r=[A[1]-A[0],s[1]-s[0],e.zlim[1]-e.zlim[0]];var q,p,w,v,u;var h=e.length;var k=e[0].length;var o=Math.ceil(e.width*g.width/(A[1]-A[0]));var l=Math.ceil(e.width*g.height/(s[1]-s[0]));for(q=0;q1){u=1}B.fillStyle=f[Math.floor((f.length-1)*u)];B.fillRect(Math.round(w-o/2),Math.round(v-l/2),o,l)}}};return c}();var variogram,t,x,y,rendererOptions,boundary,seq,timer;function renderToCanvas(o,A,B,l){var u=rendererOptions.krigingSize;var D=new OffscreenCanvas(A[0],A[1]);var k=D.getContext("2d");k.globalAlpha=rendererOptions.opacity;var a,d,b,g,r,v;if(isContain(o)){var K=[];d=(o[1][0]-o[0][0])/u;K.push([o[0],[o[0][0],o[1][1]],o[1],[o[1][0],o[0][1]]]);a=kriging.grid(K,variogram,d)}else{d=(boundary.bounds[1][0]-boundary.bounds[0][0])/u;a=kriging.grid(boundary.geometry.coordinates,variogram,d)}v=o;b=[v[0][0],v[1][0]],g=[v[0][1],v[1][1]],r=rendererOptions.colors;var w=[b[1]-b[0],g[1]-g[0],a.zlim[1]-a.zlim[0]];var I,H,s,q,p,J,h=undefined,q=undefined;var C=a.length;var E=a[0].length;var N=Math.ceil(a.width*D.width/(b[1]-b[0]));var M=Math.ceil(a.width*D.height/(g[1]-g[0]));for(I=0;Ic[0]){J=c[1]}})}else{p=(a[I][H]-a.zlim[0])/w[2];if(p<0){p=0}if(p>1){p=1}J=r[Math.floor((r.length-1)*p)]}k.fillStyle=J;var f=Math.round(s-N/2);var e=Math.round(q-M/2);var G=N,F=M;if(ly!==undefined){F=ly-e}if(h!==undefined){G=h-f}ly=e;L=f;k.fillRect(f,e,G,F)}h=L}l(D)}self.onmessage=function(a){var b=a.data;if(b.t){t=b.t;x=b.x;y=b.y;rendererOptions=b.rendererOptions;boundary=b.boundary;variogram=kriging.train(t,x,y,rendererOptions.krigingModel,rendererOptions.krigingSigma2,rendererOptions.krigingAlpha);boundary.bounds=getBounds(boundary.geometry.coordinates[0])}else{seq=b.seq;postMessage({state:1,seq:seq});if(!variogram){return}clearTimeout(timer);timer=setTimeout(function(){renderToCanvas(b.bounds,b.size,b.seq,function(c){var d=c.transferToImageBitmap();postMessage({seq:seq,bitmap:d},[d])})},100)}};function getBounds(b){var a,e,d,c;b.forEach(function(f,g,h){if(g===0){a=f[0];d=f[0];e=f[1];c=f[1]}if(f[0]d){d=f[0]}if(f[1]c){c=f[1]}});return[[a,e],[d,c]]}function isPointInPolygon(j,f){var d=f.length;var h=true;var e=0;var c=2e-10;var m,k;var a=j;m=f[0];for(var b=1;b<=d;++b){if(a[0]==m[0]&&a[1]==m[1]){return h}k=f[b%d];if(a[1]Math.max(m[1],k[1])){m=k;continue}if(a[1]>Math.min(m[1],k[1])&&a[1]=Math.min(m[0],k[0])){return h}if(m[0]==k[0]){if(m[0]==a[0]){return h}else{++e}}else{var l=(a[1]-m[1])*(k[0]-m[0])/(k[1]-m[1])+m[0];if(Math.abs(a[0]-l)=Math.min(m[1],g[1])&&a[1]<=Math.max(m[1],g[1])){++e}else{e+=2}}}m=k}if(e%2==0){return false}else{return true}}function isContain(d){var a=false;var c=boundary.geometry.coordinates[0];a=isPointInPolygon(d[0],c);if(!a){return false}a=isPointInPolygon(d[1],c);\nif(!a){return false}a=isPointInPolygon([d[0][0],d[1][1]],c);if(!a){return false}a=isPointInPolygon([d[1][0],d[0][1]],c);return a};'], {type:"text/javascript"});this.workerObjectURL=URL.createObjectURL(b);this.worker=new Worker(this.workerObjectURL);this.worker.onmessage=function(b){b.data.seq===a._seq&&b.data.bitmap&&a.canvasContext.drawImage(b.data.bitmap,0,0)};URL.revokeObjectURL(this.workerObjectURL)},_initWorkerTrain:function(){if(this.data&&Array.isArray(this.data)){var a=[],b=[],c=[];this.data.forEach(function(d){a.push(d.properties.value);b.push(d.geometry.coordinates[0]);c.push(d.geometry.coordinates[1])});a.length!==0&& this.worker.postMessage({t:a,x:b,y:c,boundary:this.boundary,rendererOptions:this._rendererOptions})}},_initTrain:function(){this.kriging||this._initKriging();if(this.data&&Array.isArray(this.data)){var a=[],b=[],c=[];this.data.forEach(function(d){a.push(d.properties.value);b.push(d.geometry.coordinates[0]);c.push(d.geometry.coordinates[1])});if(a.length!==0)this.variogram=this.kriging.train(a,b,c,this._rendererOptions.krigingModel,this._rendererOptions.krigingSigma2,this._rendererOptions.krigingAlpha)}}, _initGrid:function(){this.variogram||this._initTrain();var a;a=this._rendererOptions.krigingSize;var b=this.getBounds(this.boundary.geometry.coordinates[0]);this.isContain(this.bounds)?(b=[],a=(this.bounds[1][0]-this.bounds[0][0])/a,b.push([this.bounds[0],[this.bounds[0][0],this.bounds[1][1]],this.bounds[1],[this.bounds[1][0],this.bounds[0][1]]]),this.grid=this.kriging.grid(b,this.variogram,a)):(a=(b[1][0]-b[0][0])/a,this.grid=this.kriging.grid(this.boundary.geometry.coordinates,this.variogram,a))}, _initPlot:function(a,b){this.grid||this._initGrid();this.canvasContext.globalAlpha=this._rendererOptions.opacity;var c=this.canvas,d=this.canvasContext,e=this.grid,a=[this.bounds[0][0],this.bounds[1][0]],b=[this.bounds[0][1],this.bounds[1][1]],f=this._rendererOptions.colors,g=[a[1]-a[0],b[1]-b[0],e.zlim[1]-e.zlim[0]],h,j,l,m,n,o,v=void 0;m=void 0;var k=e.length,p=e[0].length,u=Math.ceil(e.width*c.width/(a[1]-a[0])),s=Math.ceil(e.width*c.height/(b[1]-b[0]));for(h=0;ha[0]&&(o=a[1])})):(n=(e[h][j]-e.zlim[0])/g[2],n<0&&(n=0),n>1&&(n=1),o=f[Math.floor((f.length-1)*n)]);d.fillStyle=o;var q=Math.round(l-u/2);m=Math.round(m-s/2);var r=u,t=s;ly!==void 0&&(t=ly-m);v!==void 0&&(r=v-q);ly=m;l=q;d.fillRect(q,m,r,t)}v=l}},render:function(a){this._init_RendererOptions();this.setData(this.data);this.setVisible(this.visibility); this.autoRedraw&&this.stopDraw();this.draw(a)},draw:function(a){!this.data||this.data.length===0?this.clearCanvas():this.isWorker?(this._seq++,this.worker.postMessage({seq:this._seq,size:this.size,bounds:this.bounds})):(this._initGrid(a?a:500),this._initPlot(this.bounds[0],this.bounds[1]))},onMove:function(){this.autoRedraw&&this.stopDraw()},onMoveEnd:function(){this.autoRedraw&&this.redraw()},onResize:function(){if(this.autoRedraw)this.width=this._parent.map.transform.width,this.height=this._parent.map.transform.height, this.redraw()},redraw:function(){this._calculateBoundsAndSize();this.canvas.width=Math.round(this.size[0]);this.canvas.height=Math.round(this.size[1]);this.offscreenCanvas.width=this.canvas.width;this.offscreenCanvas.height=this.canvas.height;this.source.setCoordinates([[this.bounds[0][0],this.bounds[1][1]],this.bounds[1],[this.bounds[1][0],this.bounds[0][1]],this.bounds[0]]);this.draw()},_calculateBoundsAndSize:function(){this._rendererOptions||this._init_RendererOptions();this.bounds=this._parent.getBounds(); var a=this._parent.map.transform.locationCoordinate({lng:this.bounds[0][0],lat:this.bounds[0][1]}),b=this._parent.map.transform.locationCoordinate({lng:this.bounds[1][0],lat:this.bounds[1][1]});this.size=a.hasOwnProperty("x")&&a.hasOwnProperty("y")?[Math.abs(a.x-b.x)*this._parent.map.transform.scale*this._parent.map.transform.tileSize,Math.abs(a.y-b.y)*this._parent.map.transform.scale*this._parent.map.transform.tileSize]:[Math.abs(a.column-b.column)*this._parent.map.transform.tileSize,Math.abs(a.row- b.row)*this._parent.map.transform.tileSize];this.size[0]=Math.round(this.size[0]);this.size[1]=Math.round(this.size[1])},clearCanvas:function(){this.canvasContext.clearRect(0,0,this.canvas.width,this.canvas.height)},stopDraw:function(){this.clearCanvas()},destroy:function(){this.bounds=this.size=this._rendererOptions=this.offscreenCanvasContext=this.offscreenCanvas=this.canvasContext=this.canvas=this._parent=null;this.kriging&&(this.kriging=null);this.variogram&&(this.variogram=null);this.grid&&(this.grid= null);this.source=this.layer=null;this.worker.terminate();this.worker=null},addTo:function(a){this._parent=a;this._parent.addLayer(this);this._calculateBoundsAndSize();this.canvas.width=Math.round(this.size[0]);this.canvas.height=Math.round(this.size[1]);this.offscreenCanvas.width=this.canvas.width;this.offscreenCanvas.height=this.canvas.height;this._parent.map.addSource(this.id+"_source_GeoGlobe.Visuals.Custom.Kriging",{type:"canvas",canvas:this.canvas,animate:!0,coordinates:[[this.bounds[0][0], this.bounds[1][1]],this.bounds[1],[this.bounds[1][0],this.bounds[0][1]],this.bounds[0]]});this._parent.map.addLayer({type:"raster",id:this.id+"_layer_GeoGlobe.Visuals.Custom.Kriging",source:this.id+"_source_GeoGlobe.Visuals.Custom.Kriging"});this.source=this._parent.map.getSource(this.id+"_source_GeoGlobe.Visuals.Custom.Kriging");this.layer=this._parent.map.getLayer(this.id+"_layer_GeoGlobe.Visuals.Custom.Kriging");this.width=this._parent.map.transform.width;this.height=this._parent.map.transform.height}, setVisible:function(a){this.visibility=a;this._parent.map.setLayoutProperty(this.id+"_layer_GeoGlobe.Visuals.Custom.Kriging","visibility",a?"visible":"none")},setData:function(a){this.data=a;this.isWorker?this._initWorkerTrain():this._initTrain()},getBounds:function(a){var b,c,d,e;a.forEach(function(a,g){g===0&&(b=a[0],d=a[0],c=a[1],e=a[1]);a[0]d&&(d=a[0]);a[1]e&&(e=a[1])});return[[b,c],[d,e]]},isPointInPolygon:function(a,b){var c=b.length,d=0,e,f;e=b[0];for(var g= 1;g<=c;++g){if(a[0]==e[0]&&a[1]==e[1])return!0;f=b[g%c];if(!(a[1]Math.max(e[1],f[1])))if(a[1]>Math.min(e[1],f[1])&&a[1]=Math.min(e[0],f[0]))return!0;if(e[0]==f[0])if(e[0]==a[0])return!0;else++d;else{e=(a[1]-e[1])*(f[0]-e[0])/(f[1]-e[1])+e[0];if(Math.abs(a[0]-e)<2.0E-10)return!0;a[0]=Math.min(e[1],h[1])&&a[1]<=Math.max(e[1],h[1])?++d:d+= 2}e=f}return d%2==0?!1:!0},isContain:function(a){var b=!1,c=this.boundary.geometry.coordinates[0],b=this.isPointInPolygon(a[0],c);if(!b)return!1;b=this.isPointInPolygon(a[1],c);if(!b)return!1;b=this.isPointInPolygon([a[0][0],a[1][1]],c);if(!b)return!1;return b=this.isPointInPolygon([a[1][0],a[0][1]],c)}}); GeoGlobe.Visuals.Grid=GeoGlobe.Class4OL(GeoGlobe.Visuals,{type:"grid",map:null,container:null,layers:[],initialize:function(){GeoGlobe.Visuals.prototype.initialize.apply(this,arguments);this.layers=[]},addTo:function(){GeoGlobe.Visuals.prototype.addTo.apply(this,arguments);this.container.className="geoglobe-Grid-container"},render:function(){for(var a=0;a0&&this.inBounds(a[b].x,a[b].y)){var c=this.getValue(a[b].x,a[b].y);a[b].x+=0.01*c.x;a[b].y+=0.01*c.y;a[b].age--}else a[b]=this.makeParticle()},draw:function(){this.colors=[];this.rgb="0, 0, 0";this.background="rgb("+this.rgb+")";this.backgroundAlpha="rgba("+this.rgb+", .02)";var a=this.particles;this.canvasContext[0].globalCompositeOperation= "destination-out";this.first?(this.canvasContext[0].fillStyle=this.background,this.first=!1):this.canvasContext[0].fillStyle=this.backgroundAlpha;this.canvasContext[0].fillRect(0,0,this.canvas[0].width,this.canvas[0].height);this.canvasContext[0].globalCompositeOperation="source-over";this.canvasContext[0].lineWidth=this.options.lineWidth||1;this.canvasContext[0].strokeStyle=this.options.lineColor||"rgba(138,43,226,1)";for(var b=new this.Vector(0,0),c=0;c=this.field.x0&&a=this.field.y0&&bd&&(d=Number(e));if(d>1){var f={};for(e in c.gradient)c.gradient.hasOwnProperty(e)&&(f[e/d]=c.gradient[e]);c.gradient=f}this._layer&&this.div.removeChild(this._layer.canvasLayer.canvas);this._layer=new mapv.mapboxGLMapLayer(a, b,c)},destroy:function(){this._parent.container.removeChild(this.div);this.rendererOptions=this.options=this._layer=this._parent=null;this.data=[]},setVisible:function(a){this.visibility=a;this.div.style.display=a?"block":"none"},setData:function(a){this.data=a.map(function(a){return GeoGlobe.Util.extend(a.properties,{geometry:a.geometry})})}}); GeoGlobe.Visuals.MapV.Simple=GeoGlobe.Class4OL({_parent:null,visibility:!0,initialize:function(a){this.options=a;GeoGlobe.Util.extend(this,a);this.setData(this.data);this._initContainer()},_initContainer:function(){this.div=document.createElement("div");this.div.setAttribute("id",this.id);this.div.setAttribute("style","position:absolute");this.div.style.display=this.visibility?"block":"none"},addTo:function(a){this._parent=a;this._parent.addLayer(this);this._parent.container.appendChild(this.div)}, remove:function(){this._parent.removeLayer(this.id)},render:function(){var a=this,b=this._parent.map,c=new mapv.DataSet(this.data),d=this.rendererOptions;d.draw="simple";d.dragdrawing=this.dragdrawing;d.container=this.div;d.methods={};d.methods.click=function(b,c){b&&a._parent.fire("overlayerclick",{layer:a,feature:b,event:c})};d.methods.mousemove=function(b,c){b&&a._parent.fire("overlayerhover",{layer:a,feature:b,event:c})};this._layer&&this.div.removeChild(this._layer.canvasLayer.canvas);this._layer= new mapv.mapboxGLMapLayer(b,c,d)},destroy:function(){this._parent.container.removeChild(this.div);this.rendererOptions=this.options=this._layer=this._parent=null;this.data=[]},setVisible:function(a){this.visibility=a;this.div.style.display=a?"block":"none"},setData:function(a){this.data=a.map(function(a){return GeoGlobe.Util.extend(a.properties,{geometry:a.geometry})})}}); GeoGlobe.Visuals.MapV.Text=GeoGlobe.Class4OL({_parent:null,visibility:!0,initialize:function(a){this.options=a;GeoGlobe.Util.extend(this,a);this.setData(this.data);this._initContainer()},_initContainer:function(){this.div=document.createElement("div");this.div.setAttribute("id",this.id);this.div.setAttribute("style","position:absolute");this.div.style.display=this.visibility?"block":"none"},addTo:function(a){this._parent=a;this._parent.addLayer(this);this._parent.container.appendChild(this.div)}, remove:function(){this._parent.removeLayer(this.id)},render:function(){var a=this._parent.map,b=new mapv.DataSet(this.data),c=this.rendererOptions;c.draw="text";c.dragdrawing=this.dragdrawing;c.container=this.div;this._layer&&this.div.removeChild(this._layer.canvasLayer.canvas);this._layer=new mapv.mapboxGLMapLayer(a,b,c)},destroy:function(){this._parent.container.removeChild(this._layer.canvasLayer.canvas);this.rendererOptions=this.options=this._layer=this._parent=null;this.data=[]},setVisible:function(a){this.visibility= a;this.div.style.display=a?"block":"none"},setData:function(a){this.data=a.map(function(a){return GeoGlobe.Util.extend(a.properties,{geometry:a.geometry})})}}); GeoGlobe.Visuals.DeckGL=GeoGlobe.Class4OL(GeoGlobe.Visuals,{type:"deckgl",map:null,container:null,layers:[],_deckgl:null,initialize:function(){GeoGlobe.Visuals.prototype.initialize.apply(this,arguments);this.layers=[];window.deck||console.error("\u4f7f\u7528DeckGL\u53ef\u89c6\u5316\u56fe\u5c42\u524d\uff0c\u9700\u5f15\u5165deckgl\u5e93\uff01")},addTo:function(){GeoGlobe.Visuals.prototype.addTo.apply(this,arguments);this.container.className="geoglobe-deckgl-container";var a=this;this._deckgl=new deck.DeckGL({container:this.container, geoMap:this.map,onWebGLInitialized:function(b){a.fire("overlayerinit",{param:b})},onLayerClick:function(b,c,d){a.fire("overlayerclick",{param:{info:b,pickedInfos:c,event:d}})},onLayerHover:function(b,c,d){a.fire("overlayerhover",{param:{info:b,pickedInfos:c,event:d}})},layers:[]})},render:function(){var a=[];if(this._order)for(var b=0;ba.tracker.endPoint[1])a.tracker.current=a.tracker.endPoint[1],a.tracker.status="stop";a.tracker.currentPoint=a.trackPoints[a.tracker.current];a._updateTrackData();a.render()}},start:function(){if(this.status==="ready")this.status="playing",this.play();else if(this.status==="stop")this.status="playing"},pause:function(){this.status={playing:"pause", pause:"playing"}[this.status]||this.status},restart:function(){if(this.status!=="ready")this.status="playing",this.current=0}}},_linearInterpolation:function(){console.time("\u7ebf\u6027\u63d2\u503c\u8017\u65f6");this.trackPoints=[];var a,b,c,d,e,f,g,h,j,l,m,n,o;n=0;for(o=this.data.length;n1)a.geometry.coordinates= b,this.paths.push(a)}.bind(this))},setRange:function(a,b){if(a<=this.trackPoints[0][5])this.tracker.startPoint=this.trackPoints[0],this.tracker.currentPoint=this.trackPoints[0],this.tracker.current=0;else if(a=this.trackPoints[this.trackPoints.length-1][5])this.tracker.endPoint=this.trackPoints[this.trackPoints.length-1];else if(b>this.trackPoints[0][5])for(c=this.trackPoints.length-1;c>=0;c--){if(b>=this.trackPoints[c][5]){this.tracker.endPoint=this.trackPoints[c];break}}else this.tracker.endPoint=this.trackPoints[0];this._updateTrackData()},setData:function(a){this.data=a;this.paths= [];if(this.data.length){this.paths.push({type:"Feature",properties:{T:2},geometry:{type:"LineString",coordinates:[]}});for(a=0;a