UNPKG

highcharts

Version:
10 lines 6.24 kB
/** * Highcharts JS v13.0.1 (2026-08-17) * @module highcharts/modules/geoheatmap * @requires highcharts * * (c) 2009-2026 * * A commercial license may be required depending on use, * see www.highcharts.com/license */import*as t from"../highcharts.js";let e={};e.n=t=>{let i=t&&t.__esModule?()=>t.default:()=>t;return e.d(i,{a:i}),i},e.d=(t,i)=>{if(Array.isArray(i))for(var a=0;a<i.length;){var o=i[a++],r=i[a++];e.o(t,o)?0===r&&a++:0===r?Object.defineProperty(t,o,{enumerable:!0,value:i[a++]}):Object.defineProperty(t,o,{enumerable:!0,get:r})}else for(var o in i)e.o(i,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:i[o]})},e.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);let i=t.default;var a=e.n(i);let o=t.default.SeriesRegistry;var r=e.n(o);let{map:{prototype:{pointClass:s}}}=r().seriesTypes,n=class extends s{applyOptions(t,e){let a=super.applyOptions.call(this,t,e),{lat:o,lon:r}=a.options;if((0,i.isNumber)(r)&&(0,i.isNumber)(o)){let{colsize:t=1,rowsize:e=1}=this.series.options,i=r-t/2,s=o-e/2;a.geometry=a.options.geometry={type:"Polygon",coordinates:[[[i,s],[i+t,s],[i+t,s+e],[i,s+e],[i,s]]]}}return a}},{doc:l}=a(),{noop:p}=a(),{colorFromPoint:h,getContext:d}={colorFromPoint:function(t,e){let a=e.series.colorAxis;if(a){let o=a.toColor(t||0,e).split(")")[0].split("(")[1].split(",").map(t=>(0,i.pick)(parseFloat(t),parseInt(t,10)));return o[3]=255*(0,i.pick)(o[3],1),(0,i.defined)(t)&&e.visible||(o[3]=0),o}return[0,0,0,0]},getContext:function(t){let{canvas:e,context:i}=t;return e&&i?.clearRect?(i.clearRect(0,0,e.width,e.height),i):(t.canvas=l.createElement("canvas"),t.context=t.canvas.getContext("2d",{willReadFrequently:!0})||void 0,t.context)}},{seriesTypes:{map:c}}=r();function g(t){return t-360*Math.floor((t+180)/360)}class u extends c{constructor(){super(...arguments),this.isDirtyCanvas=!0}update(){this.options=(0,i.merge)(this.options,arguments[0]),this.getInterpolation().enabled&&(this.isDirtyCanvas=!0,this.points.forEach(t=>{t.graphic&&(t.graphic.destroy(),delete t.graphic)})),super.update.apply(this,arguments)}translate(){(!this.getInterpolation().enabled||!this.image||this.isDirty||this.isDirtyData)&&super.translate.apply(this,arguments)}getInterpolation(){return(0,i.isObject)(this.options.interpolation)?this.options.interpolation:{blur:1,enabled:this.options.interpolation}}drawPoints(){let t=this.chart.mapView,e=this.options;if(this.getInterpolation().enabled&&t&&this.bounds){let o=this.context||d(this),{canvas:r,colorAxis:s,image:n,chart:l,points:p}=this,[c,g]=[(0,i.pick)(e.colsize,1),(0,i.pick)(e.rowsize,1)],u=t.projectedUnitsToPixels({x:this.bounds.x1,y:this.bounds.y2}),m=t.projectedUnitsToPixels({x:this.bounds.x2,y:this.bounds.y1});if(r&&o&&s&&u&&m){let{x:e,y:s}=u,d=m.x-e,y=m.y-s,b={x:e,y:s,width:d,height:y};if(this.isDirtyCanvas||this.isDirtyData||"Orthographic"===t.projection.options.name){let n=r.width=~~(360/c)+1,l=r.height=~~(180/g)+1,u=new Uint8ClampedArray(n*l*4),{lat:m=0,lon:b=0}=p[0].options,f=b%g!=0,x=m%c!=0,w=f?t=>Math.round(t/g)*g:t=>t,v=x?t=>Math.round(t/c)*c:t=>t,D=p.length;(f||x)&&(0,i.error)("Highcharts Warning: For best performance, lon/lat datapoints should spaced by a single colsize/rowsize",!1,this.chart,{colsize:String(c),rowsize:String(g)}),this.directTouch=!1,this.isDirtyCanvas=!0;for(let t=0;t<D;t++){var a;let e=p[t],{lon:o,lat:r}=e.options;(0,i.isNumber)(o)&&(0,i.isNumber)(r)&&u.set(h(e.value,e),4*(a=w(o),Math.ceil(n*(l-1-(v(r)+90)/g)+(a+180)/c)))}let C=this.getInterpolation().blur,P=0===C?1:11*C,j=~~(n*P),I=~~(l*P),O=~~d,T=~~y,A=new ImageData(u,n,l);r.width=j,r.height=I,o.putImageData(A,0,0),o.globalCompositeOperation="copy",o.drawImage(r,0,0,A.width,A.height,0,0,j,I);let L=this.getProjectedImageData(t,O,T,o.getImageData(0,0,j,I),r,e,s);r.width=O,r.height=T,o.putImageData(new ImageData(L,O,T),0,0)}if(n)if(l.renderer.globalAnimation&&l.hasRendered){let t=Number(n.attr("x")),a=Number(n.attr("y")),o=Number(n.attr("width")),p=Number(n.attr("height")),h=(i,r)=>{let l=r.pos;n.attr({x:t+(e-t)*l,y:a+(s-a)*l,width:o+(d-o)*l,height:p+(y-p)*l})},c=(0,i.merge)((0,i.animObject)(l.renderer.globalAnimation)),g=c.step;c.step=function(){g&&g.apply(this,arguments),h.apply(this,arguments)},n.attr((0,i.merge)({animator:0},this.isDirtyCanvas?{href:r.toDataURL("image/png",1)}:void 0)).animate({animator:1},c)}else(0,i.stop)(n),n.attr((0,i.merge)(b,this.isDirtyCanvas?{href:r.toDataURL("image/png",1)}:void 0));else this.image=l.renderer.image(r.toDataURL("image/png",1)).attr(b).add(this.group);this.isDirtyCanvas=!1}}else super.drawPoints.apply(this,arguments)}getProjectedImageData(t,e,a,o,r,s,n){let l=new Uint8ClampedArray(e*a*4),p=(0,i.pick)(t.projection.options.rotation?.[0],0),h=r.width/360,d=-1*r.height/180,c=-1;for(let i=0;i<l.length;i+=4){let a=i/4%e;0===a&&c++;let u=t.pixelsToLonLat({x:s+a,y:n+c});if(u){u.lon>-180-p&&u.lon<180-p&&(u.lon=g(u.lon));let t=[u.lon,u.lat],e=t[0]*h+r.width/2,a=t[1]*d+r.height/2;if(e>=0&&e<=r.width&&a>=0&&a<=r.height){let t=Math.floor(a)*r.width*4+4*Math.round(e);l[i]=o.data[t],l[i+1]=o.data[t+1],l[i+2]=o.data[t+2],l[i+3]=o.data[t+3]}}}return l}searchPoint(t,e){let i=this.chart,a=i.mapView;if(a&&this.bounds&&this.image&&i.tooltip&&i.tooltip.options.enabled)if(!i.pointer.hasDragged&&(.01>=+this.image.attr("animator")||+this.image.attr("animator")>=.99)){let o=a.projectedUnitsToPixels({x:this.bounds.x1,y:this.bounds.y2}),r=a.projectedUnitsToPixels({x:this.bounds.x2,y:this.bounds.y1});if(i.pointer.normalize(t),t.lon&&t.lat&&o&&r&&t.chartX-i.plotLeft>o.x&&t.chartX-i.plotLeft<r.x&&t.chartY-i.plotTop>o.y&&t.chartY-i.plotTop<r.y)return this.searchKDTree({clientX:t.chartX,lon:g(t.lon),lat:t.lat},e,t)}else i.tooltip.destroy()}}u.defaultOptions=(0,i.merge)(c.defaultOptions,{nullColor:"transparent",tooltip:{pointFormat:"Lat: {point.lat}, Lon: {point.lon}, Value: {point.value}<br/>"},borderWidth:0,colsize:1,rowsize:1,stickyTracking:!0,interpolation:{enabled:!1,blur:1}}),(0,i.addEvent)(u,"afterDataClassLegendClick",function(){this.isDirtyCanvas=!0,this.drawPoints()}),(0,i.extend)(u.prototype,{type:"geoheatmap",applyJitter:p,pointClass:n,pointArrayMap:["lon","lat","value"],kdAxisArray:["lon","lat"]}),r().registerSeriesType("geoheatmap",u);let m=a();export{m as default};